From 87cac04ef0250737f796bd55e8adfbf5489414d6 Mon Sep 17 00:00:00 2001 From: RashaAlharthi Date: Sun, 24 Jul 2022 18:30:08 +0300 Subject: [PATCH] all required changes --- my_first_project/my_first_project/db.sqlite3 | 0 my_first_project/my_first_project/manage.py | 22 + .../my_first_project/my_first_app/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../__pycache__/admin.cpython-310.pyc | Bin 0 -> 238 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 486 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 235 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 473 bytes .../my_first_project/my_first_app/admin.py | 3 + .../my_first_project/my_first_app/apps.py | 6 + .../my_first_app/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 208 bytes .../my_first_project/my_first_app/models.py | 3 + .../my_first_project/my_first_app/tests.py | 3 + .../my_first_project/my_first_app/views.py | 7 + .../my_first_project/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 201 bytes .../__pycache__/settings.cpython-310.pyc | Bin 0 -> 2368 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 1065 bytes .../__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 622 bytes .../my_first_project/my_first_project/asgi.py | 16 + .../my_first_project/settings.py | 124 + .../my_first_project/my_first_project/urls.py | 23 + .../my_first_project/my_first_project/wsgi.py | 16 + .../Django-4.0.6.dist-info/AUTHORS | 1029 ++ .../Django-4.0.6.dist-info/INSTALLER | 1 + .../Django-4.0.6.dist-info/LICENSE | 27 + .../Django-4.0.6.dist-info/LICENSE.python | 290 + .../Django-4.0.6.dist-info/METADATA | 97 + .../Django-4.0.6.dist-info/RECORD | 4441 +++++++ .../Django-4.0.6.dist-info/REQUESTED | 0 .../Django-4.0.6.dist-info/WHEEL | 5 + .../Django-4.0.6.dist-info/entry_points.txt | 3 + .../Django-4.0.6.dist-info/top_level.txt | 1 + .../site-packages/_distutils_hack/__init__.py | 128 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 5134 bytes .../__pycache__/override.cpython-310.pyc | Bin 0 -> 240 bytes .../site-packages/_distutils_hack/override.py | 1 + .../asgiref-3.5.2.dist-info/INSTALLER | 1 + .../asgiref-3.5.2.dist-info/LICENSE | 27 + .../asgiref-3.5.2.dist-info/METADATA | 245 + .../asgiref-3.5.2.dist-info/RECORD | 27 + .../asgiref-3.5.2.dist-info/WHEEL | 5 + .../asgiref-3.5.2.dist-info/top_level.txt | 1 + venv/Lib/site-packages/asgiref/__init__.py | 1 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 202 bytes .../__pycache__/compatibility.cpython-310.pyc | Bin 0 -> 1441 bytes .../current_thread_executor.cpython-310.pyc | Bin 0 -> 2715 bytes .../asgiref/__pycache__/local.cpython-310.pyc | Bin 0 -> 4134 bytes .../__pycache__/server.cpython-310.pyc | Bin 0 -> 5760 bytes .../asgiref/__pycache__/sync.cpython-310.pyc | Bin 0 -> 12485 bytes .../__pycache__/testing.cpython-310.pyc | Bin 0 -> 3139 bytes .../__pycache__/timeout.cpython-310.pyc | Bin 0 -> 3177 bytes .../__pycache__/typing.cpython-310.pyc | Bin 0 -> 6597 bytes .../asgiref/__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 4741 bytes .../site-packages/asgiref/compatibility.py | 47 + .../asgiref/current_thread_executor.py | 81 + venv/Lib/site-packages/asgiref/local.py | 120 + venv/Lib/site-packages/asgiref/py.typed | 0 venv/Lib/site-packages/asgiref/server.py | 157 + venv/Lib/site-packages/asgiref/sync.py | 532 + venv/Lib/site-packages/asgiref/testing.py | 97 + venv/Lib/site-packages/asgiref/timeout.py | 112 + venv/Lib/site-packages/asgiref/typing.py | 242 + venv/Lib/site-packages/asgiref/wsgi.py | 162 + .../site-packages/distutils-precedence.pth | 1 + venv/Lib/site-packages/django/__init__.py | 24 + venv/Lib/site-packages/django/__main__.py | 9 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1000 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 0 -> 414 bytes .../__pycache__/shortcuts.cpython-310.pyc | Bin 0 -> 4411 bytes .../Lib/site-packages/django/apps/__init__.py | 4 + .../apps/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 291 bytes .../apps/__pycache__/config.cpython-310.pyc | Bin 0 -> 7132 bytes .../apps/__pycache__/registry.cpython-310.pyc | Bin 0 -> 13074 bytes venv/Lib/site-packages/django/apps/config.py | 309 + .../Lib/site-packages/django/apps/registry.py | 436 + .../Lib/site-packages/django/conf/__init__.py | 295 + .../conf/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 10061 bytes .../global_settings.cpython-310.pyc | Bin 0 -> 9090 bytes .../django/conf/app_template/__init__.py-tpl | 0 .../django/conf/app_template/admin.py-tpl | 3 + .../django/conf/app_template/apps.py-tpl | 6 + .../app_template/migrations/__init__.py-tpl | 0 .../django/conf/app_template/models.py-tpl | 3 + .../django/conf/app_template/tests.py-tpl | 3 + .../django/conf/app_template/views.py-tpl | 3 + .../django/conf/global_settings.py | 659 + .../django/conf/locale/__init__.py | 617 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 7543 bytes .../conf/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 21840 bytes .../conf/locale/af/LC_MESSAGES/django.po | 1267 ++ .../conf/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 35688 bytes .../conf/locale/ar/LC_MESSAGES/django.po | 1389 ++ .../django/conf/locale/ar/__init__.py | 0 .../ar/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ar/__pycache__/formats.cpython-310.pyc | Bin 0 -> 403 bytes .../django/conf/locale/ar/formats.py | 21 + .../conf/locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 35409 bytes .../conf/locale/ar_DZ/LC_MESSAGES/django.po | 1379 ++ .../django/conf/locale/ar_DZ/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../ar_DZ/__pycache__/formats.cpython-310.pyc | Bin 0 -> 668 bytes .../django/conf/locale/ar_DZ/formats.py | 29 + .../conf/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 15579 bytes .../conf/locale/ast/LC_MESSAGES/django.po | 1237 ++ .../conf/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 27170 bytes .../conf/locale/az/LC_MESSAGES/django.po | 1278 ++ .../django/conf/locale/az/__init__.py | 0 .../az/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../az/__pycache__/formats.cpython-310.pyc | Bin 0 -> 728 bytes .../django/conf/locale/az/formats.py | 30 + .../conf/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 36467 bytes .../conf/locale/be/LC_MESSAGES/django.po | 1356 ++ .../conf/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 33758 bytes .../conf/locale/bg/LC_MESSAGES/django.po | 1320 ++ .../django/conf/locale/bg/__init__.py | 0 .../bg/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../bg/__pycache__/formats.cpython-310.pyc | Bin 0 -> 361 bytes .../django/conf/locale/bg/formats.py | 21 + .../conf/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 16660 bytes .../conf/locale/bn/LC_MESSAGES/django.po | 1218 ++ .../django/conf/locale/bn/__init__.py | 0 .../bn/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../bn/__pycache__/formats.cpython-310.pyc | Bin 0 -> 617 bytes .../django/conf/locale/bn/formats.py | 32 + .../conf/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 14009 bytes .../conf/locale/br/LC_MESSAGES/django.po | 1297 ++ .../conf/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 10824 bytes .../conf/locale/bs/LC_MESSAGES/django.po | 1238 ++ .../django/conf/locale/bs/__init__.py | 0 .../bs/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../bs/__pycache__/formats.cpython-310.pyc | Bin 0 -> 430 bytes .../django/conf/locale/bs/formats.py | 21 + .../conf/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 27427 bytes .../conf/locale/ca/LC_MESSAGES/django.po | 1329 ++ .../django/conf/locale/ca/__init__.py | 0 .../ca/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ca/__pycache__/formats.cpython-310.pyc | Bin 0 -> 765 bytes .../django/conf/locale/ca/formats.py | 30 + .../conf/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 29207 bytes .../conf/locale/cs/LC_MESSAGES/django.po | 1349 ++ .../django/conf/locale/cs/__init__.py | 0 .../cs/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../cs/__pycache__/formats.cpython-310.pyc | Bin 0 -> 864 bytes .../django/conf/locale/cs/formats.py | 43 + .../conf/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 18319 bytes .../conf/locale/cy/LC_MESSAGES/django.po | 1278 ++ .../django/conf/locale/cy/__init__.py | 0 .../cy/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../cy/__pycache__/formats.cpython-310.pyc | Bin 0 -> 775 bytes .../django/conf/locale/cy/formats.py | 33 + .../conf/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 26957 bytes .../conf/locale/da/LC_MESSAGES/django.po | 1307 ++ .../django/conf/locale/da/__init__.py | 0 .../da/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../da/__pycache__/formats.cpython-310.pyc | Bin 0 -> 655 bytes .../django/conf/locale/da/formats.py | 26 + .../conf/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 28373 bytes .../conf/locale/de/LC_MESSAGES/django.po | 1330 ++ .../django/conf/locale/de/__init__.py | 0 .../de/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../de/__pycache__/formats.cpython-310.pyc | Bin 0 -> 669 bytes .../django/conf/locale/de/formats.py | 29 + .../django/conf/locale/de_CH/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../de_CH/__pycache__/formats.cpython-310.pyc | Bin 0 -> 676 bytes .../django/conf/locale/de_CH/formats.py | 35 + .../conf/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 29802 bytes .../conf/locale/dsb/LC_MESSAGES/django.po | 1358 ++ .../conf/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 33648 bytes .../conf/locale/el/LC_MESSAGES/django.po | 1332 ++ .../django/conf/locale/el/__init__.py | 0 .../el/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../el/__pycache__/formats.cpython-310.pyc | Bin 0 -> 766 bytes .../django/conf/locale/el/formats.py | 34 + .../conf/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../conf/locale/en/LC_MESSAGES/django.po | 1574 +++ .../django/conf/locale/en/__init__.py | 0 .../en/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../en/__pycache__/formats.cpython-310.pyc | Bin 0 -> 931 bytes .../django/conf/locale/en/formats.py | 65 + .../conf/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 25633 bytes .../conf/locale/en_AU/LC_MESSAGES/django.po | 1299 ++ .../django/conf/locale/en_AU/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../en_AU/__pycache__/formats.cpython-310.pyc | Bin 0 -> 778 bytes .../django/conf/locale/en_AU/formats.py | 41 + .../conf/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 12108 bytes .../conf/locale/en_GB/LC_MESSAGES/django.po | 1221 ++ .../django/conf/locale/en_GB/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../en_GB/__pycache__/formats.cpython-310.pyc | Bin 0 -> 778 bytes .../django/conf/locale/en_GB/formats.py | 41 + .../conf/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 20433 bytes .../conf/locale/eo/LC_MESSAGES/django.po | 1275 ++ .../django/conf/locale/eo/__init__.py | 0 .../eo/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../eo/__pycache__/formats.cpython-310.pyc | Bin 0 -> 931 bytes .../django/conf/locale/eo/formats.py | 44 + .../conf/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 27700 bytes .../conf/locale/es/LC_MESSAGES/django.po | 1342 ++ .../django/conf/locale/es/__init__.py | 0 .../es/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../es/__pycache__/formats.cpython-310.pyc | Bin 0 -> 763 bytes .../django/conf/locale/es/formats.py | 30 + .../conf/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 28082 bytes .../conf/locale/es_AR/LC_MESSAGES/django.po | 1320 ++ .../django/conf/locale/es_AR/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../es_AR/__pycache__/formats.cpython-310.pyc | Bin 0 -> 731 bytes .../django/conf/locale/es_AR/formats.py | 30 + .../conf/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 18079 bytes .../conf/locale/es_CO/LC_MESSAGES/django.po | 1258 ++ .../django/conf/locale/es_CO/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../es_CO/__pycache__/formats.cpython-310.pyc | Bin 0 -> 772 bytes .../django/conf/locale/es_CO/formats.py | 26 + .../conf/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 17424 bytes .../conf/locale/es_MX/LC_MESSAGES/django.po | 1261 ++ .../django/conf/locale/es_MX/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../es_MX/__pycache__/formats.cpython-310.pyc | Bin 0 -> 772 bytes .../django/conf/locale/es_MX/formats.py | 26 + .../django/conf/locale/es_NI/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../es_NI/__pycache__/formats.cpython-310.pyc | Bin 0 -> 772 bytes .../django/conf/locale/es_NI/formats.py | 26 + .../django/conf/locale/es_PR/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../es_PR/__pycache__/formats.cpython-310.pyc | Bin 0 -> 766 bytes .../django/conf/locale/es_PR/formats.py | 27 + .../conf/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 18840 bytes .../conf/locale/es_VE/LC_MESSAGES/django.po | 1260 ++ .../conf/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 26794 bytes .../conf/locale/et/LC_MESSAGES/django.po | 1310 ++ .../django/conf/locale/et/__init__.py | 0 .../et/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../et/__pycache__/formats.cpython-310.pyc | Bin 0 -> 363 bytes .../django/conf/locale/et/formats.py | 21 + .../conf/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 21743 bytes .../conf/locale/eu/LC_MESSAGES/django.po | 1279 ++ .../django/conf/locale/eu/__init__.py | 0 .../eu/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../eu/__pycache__/formats.cpython-310.pyc | Bin 0 -> 544 bytes .../django/conf/locale/eu/formats.py | 21 + .../conf/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 32052 bytes .../conf/locale/fa/LC_MESSAGES/django.po | 1318 ++ .../django/conf/locale/fa/__init__.py | 0 .../fa/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../fa/__pycache__/formats.cpython-310.pyc | Bin 0 -> 513 bytes .../django/conf/locale/fa/formats.py | 21 + .../conf/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 27454 bytes .../conf/locale/fi/LC_MESSAGES/django.po | 1308 ++ .../django/conf/locale/fi/__init__.py | 0 .../fi/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../fi/__pycache__/formats.cpython-310.pyc | Bin 0 -> 803 bytes .../django/conf/locale/fi/formats.py | 36 + .../conf/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 28628 bytes .../conf/locale/fr/LC_MESSAGES/django.po | 1336 ++ .../django/conf/locale/fr/__init__.py | 0 .../fr/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../fr/__pycache__/formats.cpython-310.pyc | Bin 0 -> 745 bytes .../django/conf/locale/fr/formats.py | 33 + .../conf/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 2286 bytes .../conf/locale/fy/LC_MESSAGES/django.po | 1218 ++ .../django/conf/locale/fy/__init__.py | 0 .../fy/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../fy/__pycache__/formats.cpython-310.pyc | Bin 0 -> 194 bytes .../django/conf/locale/fy/formats.py | 21 + .../conf/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 14025 bytes .../conf/locale/ga/LC_MESSAGES/django.po | 1293 ++ .../django/conf/locale/ga/__init__.py | 0 .../ga/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ga/__pycache__/formats.cpython-310.pyc | Bin 0 -> 357 bytes .../django/conf/locale/ga/formats.py | 21 + .../conf/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 30752 bytes .../conf/locale/gd/LC_MESSAGES/django.po | 1386 ++ .../django/conf/locale/gd/__init__.py | 0 .../gd/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../gd/__pycache__/formats.cpython-310.pyc | Bin 0 -> 464 bytes .../django/conf/locale/gd/formats.py | 21 + .../conf/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 14253 bytes .../conf/locale/gl/LC_MESSAGES/django.po | 1233 ++ .../django/conf/locale/gl/__init__.py | 0 .../gl/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../gl/__pycache__/formats.cpython-310.pyc | Bin 0 -> 531 bytes .../django/conf/locale/gl/formats.py | 21 + .../conf/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 30227 bytes .../conf/locale/he/LC_MESSAGES/django.po | 1320 ++ .../django/conf/locale/he/__init__.py | 0 .../he/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../he/__pycache__/formats.cpython-310.pyc | Bin 0 -> 476 bytes .../django/conf/locale/he/formats.py | 21 + .../conf/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 17619 bytes .../conf/locale/hi/LC_MESSAGES/django.po | 1237 ++ .../django/conf/locale/hi/__init__.py | 0 .../hi/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../hi/__pycache__/formats.cpython-310.pyc | Bin 0 -> 359 bytes .../django/conf/locale/hi/formats.py | 21 + .../conf/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 19457 bytes .../conf/locale/hr/LC_MESSAGES/django.po | 1274 ++ .../django/conf/locale/hr/__init__.py | 0 .../hr/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../hr/__pycache__/formats.cpython-310.pyc | Bin 0 -> 962 bytes .../django/conf/locale/hr/formats.py | 44 + .../conf/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 29491 bytes .../conf/locale/hsb/LC_MESSAGES/django.po | 1349 ++ .../conf/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 28217 bytes .../conf/locale/hu/LC_MESSAGES/django.po | 1327 ++ .../django/conf/locale/hu/__init__.py | 0 .../hu/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../hu/__pycache__/formats.cpython-310.pyc | Bin 0 -> 719 bytes .../django/conf/locale/hu/formats.py | 30 + .../conf/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 22207 bytes .../conf/locale/hy/LC_MESSAGES/django.po | 1237 ++ .../conf/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 21428 bytes .../conf/locale/ia/LC_MESSAGES/django.po | 1289 ++ .../conf/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 26822 bytes .../conf/locale/id/LC_MESSAGES/django.po | 1303 ++ .../django/conf/locale/id/__init__.py | 0 .../id/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../id/__pycache__/formats.cpython-310.pyc | Bin 0 -> 947 bytes .../django/conf/locale/id/formats.py | 49 + .../conf/locale/ig/LC_MESSAGES/django.mo | Bin 0 -> 27188 bytes .../conf/locale/ig/LC_MESSAGES/django.po | 1271 ++ .../django/conf/locale/ig/__init__.py | 0 .../ig/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ig/__pycache__/formats.cpython-310.pyc | Bin 0 -> 729 bytes .../django/conf/locale/ig/formats.py | 32 + .../conf/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 14317 bytes .../conf/locale/io/LC_MESSAGES/django.po | 1231 ++ .../conf/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 24273 bytes .../conf/locale/is/LC_MESSAGES/django.po | 1302 ++ .../django/conf/locale/is/__init__.py | 0 .../is/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../is/__pycache__/formats.cpython-310.pyc | Bin 0 -> 417 bytes .../django/conf/locale/is/formats.py | 21 + .../conf/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 27374 bytes .../conf/locale/it/LC_MESSAGES/django.po | 1327 ++ .../django/conf/locale/it/__init__.py | 0 .../it/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../it/__pycache__/formats.cpython-310.pyc | Bin 0 -> 934 bytes .../django/conf/locale/it/formats.py | 43 + .../conf/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 30047 bytes .../conf/locale/ja/LC_MESSAGES/django.po | 1294 ++ .../django/conf/locale/ja/__init__.py | 0 .../ja/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ja/__pycache__/formats.cpython-310.pyc | Bin 0 -> 496 bytes .../django/conf/locale/ja/formats.py | 21 + .../conf/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 24759 bytes .../conf/locale/ka/LC_MESSAGES/django.po | 1239 ++ .../django/conf/locale/ka/__init__.py | 0 .../ka/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ka/__pycache__/formats.cpython-310.pyc | Bin 0 -> 932 bytes .../django/conf/locale/ka/formats.py | 48 + .../conf/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 7139 bytes .../conf/locale/kab/LC_MESSAGES/django.po | 1211 ++ .../conf/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 13148 bytes .../conf/locale/kk/LC_MESSAGES/django.po | 1223 ++ .../conf/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 7223 bytes .../conf/locale/km/LC_MESSAGES/django.po | 1196 ++ .../django/conf/locale/km/__init__.py | 0 .../km/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../km/__pycache__/formats.cpython-310.pyc | Bin 0 -> 485 bytes .../django/conf/locale/km/formats.py | 21 + .../conf/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 17515 bytes .../conf/locale/kn/LC_MESSAGES/django.po | 1232 ++ .../django/conf/locale/kn/__init__.py | 0 .../kn/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../kn/__pycache__/formats.cpython-310.pyc | Bin 0 -> 302 bytes .../django/conf/locale/kn/formats.py | 21 + .../conf/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 26696 bytes .../conf/locale/ko/LC_MESSAGES/django.po | 1290 ++ .../django/conf/locale/ko/__init__.py | 0 .../ko/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ko/__pycache__/formats.cpython-310.pyc | Bin 0 -> 1001 bytes .../django/conf/locale/ko/formats.py | 54 + .../conf/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 31395 bytes .../conf/locale/ky/LC_MESSAGES/django.po | 1279 ++ .../django/conf/locale/ky/__init__.py | 0 .../ky/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ky/__pycache__/formats.cpython-310.pyc | Bin 0 -> 758 bytes .../django/conf/locale/ky/formats.py | 32 + .../conf/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 8008 bytes .../conf/locale/lb/LC_MESSAGES/django.po | 1213 ++ .../conf/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 21421 bytes .../conf/locale/lt/LC_MESSAGES/django.po | 1324 ++ .../django/conf/locale/lt/__init__.py | 0 .../lt/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../lt/__pycache__/formats.cpython-310.pyc | Bin 0 -> 962 bytes .../django/conf/locale/lt/formats.py | 45 + .../conf/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 28306 bytes .../conf/locale/lv/LC_MESSAGES/django.po | 1332 ++ .../django/conf/locale/lv/__init__.py | 0 .../lv/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../lv/__pycache__/formats.cpython-310.pyc | Bin 0 -> 970 bytes .../django/conf/locale/lv/formats.py | 46 + .../conf/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 22737 bytes .../conf/locale/mk/LC_MESSAGES/django.po | 1273 ++ .../django/conf/locale/mk/__init__.py | 0 .../mk/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../mk/__pycache__/formats.cpython-310.pyc | Bin 0 -> 873 bytes .../django/conf/locale/mk/formats.py | 40 + .../conf/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 30808 bytes .../conf/locale/ml/LC_MESSAGES/django.po | 1274 ++ .../django/conf/locale/ml/__init__.py | 0 .../ml/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ml/__pycache__/formats.cpython-310.pyc | Bin 0 -> 785 bytes .../django/conf/locale/ml/formats.py | 43 + .../conf/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 24783 bytes .../conf/locale/mn/LC_MESSAGES/django.po | 1256 ++ .../django/conf/locale/mn/__init__.py | 0 .../mn/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../mn/__pycache__/formats.cpython-310.pyc | Bin 0 -> 273 bytes .../django/conf/locale/mn/formats.py | 21 + .../conf/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 1591 bytes .../conf/locale/mr/LC_MESSAGES/django.po | 1212 ++ .../conf/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 27066 bytes .../conf/locale/ms/LC_MESSAGES/django.po | 1286 ++ .../django/conf/locale/ms/__init__.py | 0 .../ms/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ms/__pycache__/formats.cpython-310.pyc | Bin 0 -> 825 bytes .../django/conf/locale/ms/formats.py | 38 + .../conf/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 2589 bytes .../conf/locale/my/LC_MESSAGES/django.po | 1197 ++ .../conf/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 26572 bytes .../conf/locale/nb/LC_MESSAGES/django.po | 1307 ++ .../django/conf/locale/nb/__init__.py | 0 .../nb/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../nb/__pycache__/formats.cpython-310.pyc | Bin 0 -> 795 bytes .../django/conf/locale/nb/formats.py | 41 + .../conf/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 27248 bytes .../conf/locale/ne/LC_MESSAGES/django.po | 1253 ++ .../conf/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 27117 bytes .../conf/locale/nl/LC_MESSAGES/django.po | 1311 ++ .../django/conf/locale/nl/__init__.py | 0 .../nl/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../nl/__pycache__/formats.cpython-310.pyc | Bin 0 -> 1299 bytes .../django/conf/locale/nl/formats.py | 92 + .../conf/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 26850 bytes .../conf/locale/nn/LC_MESSAGES/django.po | 1305 ++ .../django/conf/locale/nn/__init__.py | 0 .../nn/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../nn/__pycache__/formats.cpython-310.pyc | Bin 0 -> 795 bytes .../django/conf/locale/nn/formats.py | 41 + .../conf/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 17994 bytes .../conf/locale/os/LC_MESSAGES/django.po | 1235 ++ .../conf/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 11253 bytes .../conf/locale/pa/LC_MESSAGES/django.po | 1213 ++ .../conf/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 29785 bytes .../conf/locale/pl/LC_MESSAGES/django.po | 1383 ++ .../django/conf/locale/pl/__init__.py | 0 .../pl/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../pl/__pycache__/formats.cpython-310.pyc | Bin 0 -> 679 bytes .../django/conf/locale/pl/formats.py | 30 + .../conf/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 20657 bytes .../conf/locale/pt/LC_MESSAGES/django.po | 1254 ++ .../django/conf/locale/pt/__init__.py | 0 .../pt/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../pt/__pycache__/formats.cpython-310.pyc | Bin 0 -> 826 bytes .../django/conf/locale/pt/formats.py | 39 + .../conf/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 26578 bytes .../conf/locale/pt_BR/LC_MESSAGES/django.po | 1334 ++ .../django/conf/locale/pt_BR/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../pt_BR/__pycache__/formats.cpython-310.pyc | Bin 0 -> 764 bytes .../django/conf/locale/pt_BR/formats.py | 34 + .../conf/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 22141 bytes .../conf/locale/ro/LC_MESSAGES/django.po | 1284 ++ .../django/conf/locale/ro/__init__.py | 0 .../ro/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ro/__pycache__/formats.cpython-310.pyc | Bin 0 -> 769 bytes .../django/conf/locale/ro/formats.py | 35 + .../conf/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 36220 bytes .../conf/locale/ru/LC_MESSAGES/django.po | 1385 ++ .../django/conf/locale/ru/__init__.py | 0 .../ru/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ru/__pycache__/formats.cpython-310.pyc | Bin 0 -> 748 bytes .../django/conf/locale/ru/formats.py | 30 + .../conf/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 27800 bytes .../conf/locale/sk/LC_MESSAGES/django.po | 1354 ++ .../django/conf/locale/sk/__init__.py | 0 .../sk/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../sk/__pycache__/formats.cpython-310.pyc | Bin 0 -> 681 bytes .../django/conf/locale/sk/formats.py | 30 + .../conf/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 21921 bytes .../conf/locale/sl/LC_MESSAGES/django.po | 1297 ++ .../django/conf/locale/sl/__init__.py | 0 .../sl/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../sl/__pycache__/formats.cpython-310.pyc | Bin 0 -> 945 bytes .../django/conf/locale/sl/formats.py | 44 + .../conf/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 27802 bytes .../conf/locale/sq/LC_MESSAGES/django.po | 1317 ++ .../django/conf/locale/sq/__init__.py | 0 .../sq/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../sq/__pycache__/formats.cpython-310.pyc | Bin 0 -> 389 bytes .../django/conf/locale/sq/formats.py | 21 + .../conf/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 34059 bytes .../conf/locale/sr/LC_MESSAGES/django.po | 1330 ++ .../django/conf/locale/sr/__init__.py | 0 .../sr/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../sr/__pycache__/formats.cpython-310.pyc | Bin 0 -> 895 bytes .../django/conf/locale/sr/formats.py | 44 + .../conf/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 22633 bytes .../conf/locale/sr_Latn/LC_MESSAGES/django.po | 1302 ++ .../django/conf/locale/sr_Latn/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/formats.cpython-310.pyc | Bin 0 -> 900 bytes .../django/conf/locale/sr_Latn/formats.py | 44 + .../conf/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 24820 bytes .../conf/locale/sv/LC_MESSAGES/django.po | 1308 ++ .../django/conf/locale/sv/__init__.py | 0 .../sv/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../sv/__pycache__/formats.cpython-310.pyc | Bin 0 -> 792 bytes .../django/conf/locale/sv/formats.py | 35 + .../conf/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 13534 bytes .../conf/locale/sw/LC_MESSAGES/django.po | 1221 ++ .../conf/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 7094 bytes .../conf/locale/ta/LC_MESSAGES/django.po | 1230 ++ .../django/conf/locale/ta/__init__.py | 0 .../ta/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../ta/__pycache__/formats.cpython-310.pyc | Bin 0 -> 304 bytes .../django/conf/locale/ta/formats.py | 21 + .../conf/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 13259 bytes .../conf/locale/te/LC_MESSAGES/django.po | 1233 ++ .../django/conf/locale/te/__init__.py | 0 .../te/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../te/__pycache__/formats.cpython-310.pyc | Bin 0 -> 302 bytes .../django/conf/locale/te/formats.py | 21 + .../conf/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 28497 bytes .../conf/locale/tg/LC_MESSAGES/django.po | 1299 ++ .../django/conf/locale/tg/__init__.py | 0 .../tg/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../tg/__pycache__/formats.cpython-310.pyc | Bin 0 -> 758 bytes .../django/conf/locale/tg/formats.py | 32 + .../conf/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 18629 bytes .../conf/locale/th/LC_MESSAGES/django.po | 1208 ++ .../django/conf/locale/th/__init__.py | 0 .../th/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../th/__pycache__/formats.cpython-310.pyc | Bin 0 -> 738 bytes .../django/conf/locale/th/formats.py | 33 + .../conf/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 25628 bytes .../conf/locale/tk/LC_MESSAGES/django.po | 1300 ++ .../django/conf/locale/tk/__init__.py | 0 .../tk/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../tk/__pycache__/formats.cpython-310.pyc | Bin 0 -> 758 bytes .../django/conf/locale/tk/formats.py | 32 + .../conf/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 27998 bytes .../conf/locale/tr/LC_MESSAGES/django.po | 1325 ++ .../django/conf/locale/tr/__init__.py | 0 .../tr/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../tr/__pycache__/formats.cpython-310.pyc | Bin 0 -> 674 bytes .../django/conf/locale/tr/formats.py | 30 + .../conf/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 14500 bytes .../conf/locale/tt/LC_MESSAGES/django.po | 1211 ++ .../conf/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 12822 bytes .../conf/locale/udm/LC_MESSAGES/django.po | 1197 ++ .../conf/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 26995 bytes .../conf/locale/uk/LC_MESSAGES/django.po | 1339 ++ .../django/conf/locale/uk/__init__.py | 0 .../uk/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../uk/__pycache__/formats.cpython-310.pyc | Bin 0 -> 803 bytes .../django/conf/locale/uk/formats.py | 35 + .../conf/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 12291 bytes .../conf/locale/ur/LC_MESSAGES/django.po | 1222 ++ .../conf/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 27466 bytes .../conf/locale/uz/LC_MESSAGES/django.po | 1295 ++ .../django/conf/locale/uz/__init__.py | 0 .../uz/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../uz/__pycache__/formats.cpython-310.pyc | Bin 0 -> 770 bytes .../django/conf/locale/uz/formats.py | 30 + .../conf/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 17396 bytes .../conf/locale/vi/LC_MESSAGES/django.po | 1234 ++ .../django/conf/locale/vi/__init__.py | 0 .../vi/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../vi/__pycache__/formats.cpython-310.pyc | Bin 0 -> 521 bytes .../django/conf/locale/vi/formats.py | 21 + .../conf/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 26198 bytes .../conf/locale/zh_Hans/LC_MESSAGES/django.po | 1287 ++ .../django/conf/locale/zh_Hans/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/formats.cpython-310.pyc | Bin 0 -> 912 bytes .../django/conf/locale/zh_Hans/formats.py | 42 + .../conf/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 19560 bytes .../conf/locale/zh_Hant/LC_MESSAGES/django.po | 1218 ++ .../django/conf/locale/zh_Hant/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/formats.cpython-310.pyc | Bin 0 -> 912 bytes .../django/conf/locale/zh_Hant/formats.py | 42 + .../conf/project_template/manage.py-tpl | 22 + .../project_name/__init__.py-tpl | 0 .../project_template/project_name/asgi.py-tpl | 16 + .../project_name/settings.py-tpl | 123 + .../project_template/project_name/urls.py-tpl | 21 + .../project_template/project_name/wsgi.py-tpl | 16 + .../django/conf/urls/__init__.py | 9 + .../urls/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 466 bytes .../urls/__pycache__/i18n.cpython-310.pyc | Bin 0 -> 1334 bytes .../urls/__pycache__/static.cpython-310.pyc | Bin 0 -> 1060 bytes .../site-packages/django/conf/urls/i18n.py | 39 + .../site-packages/django/conf/urls/static.py | 30 + .../site-packages/django/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 188 bytes .../django/contrib/admin/__init__.py | 50 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1213 bytes .../admin/__pycache__/actions.cpython-310.pyc | Bin 0 -> 2434 bytes .../admin/__pycache__/apps.cpython-310.pyc | Bin 0 -> 1480 bytes .../admin/__pycache__/checks.cpython-310.pyc | Bin 0 -> 34473 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 0 -> 3454 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 708 bytes .../admin/__pycache__/filters.cpython-310.pyc | Bin 0 -> 16099 bytes .../admin/__pycache__/forms.cpython-310.pyc | Bin 0 -> 1409 bytes .../admin/__pycache__/helpers.cpython-310.pyc | Bin 0 -> 14951 bytes .../admin/__pycache__/models.cpython-310.pyc | Bin 0 -> 5449 bytes .../admin/__pycache__/options.cpython-310.pyc | Bin 0 -> 64143 bytes .../admin/__pycache__/sites.cpython-310.pyc | Bin 0 -> 17347 bytes .../admin/__pycache__/tests.cpython-310.pyc | Bin 0 -> 8149 bytes .../admin/__pycache__/utils.cpython-310.pyc | Bin 0 -> 16056 bytes .../admin/__pycache__/widgets.cpython-310.pyc | Bin 0 -> 18566 bytes .../django/contrib/admin/actions.py | 95 + .../django/contrib/admin/apps.py | 27 + .../django/contrib/admin/checks.py | 1350 ++ .../django/contrib/admin/decorators.py | 111 + .../django/contrib/admin/exceptions.py | 13 + .../django/contrib/admin/filters.py | 547 + .../django/contrib/admin/forms.py | 31 + .../django/contrib/admin/helpers.py | 545 + .../admin/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 16216 bytes .../admin/locale/af/LC_MESSAGES/django.po | 720 + .../admin/locale/af/LC_MESSAGES/djangojs.mo | Bin 0 -> 4477 bytes .../admin/locale/af/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/am/LC_MESSAGES/django.mo | Bin 0 -> 8309 bytes .../admin/locale/am/LC_MESSAGES/django.po | 636 + .../admin/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 19890 bytes .../admin/locale/ar/LC_MESSAGES/django.po | 731 ++ .../admin/locale/ar/LC_MESSAGES/djangojs.mo | Bin 0 -> 6545 bytes .../admin/locale/ar/LC_MESSAGES/djangojs.po | 278 + .../admin/locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 19657 bytes .../admin/locale/ar_DZ/LC_MESSAGES/django.po | 720 + .../locale/ar_DZ/LC_MESSAGES/djangojs.mo | Bin 0 -> 5721 bytes .../locale/ar_DZ/LC_MESSAGES/djangojs.po | 226 + .../admin/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 2476 bytes .../admin/locale/ast/LC_MESSAGES/django.po | 636 + .../admin/locale/ast/LC_MESSAGES/djangojs.mo | Bin 0 -> 2137 bytes .../admin/locale/ast/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 14807 bytes .../admin/locale/az/LC_MESSAGES/django.po | 704 + .../admin/locale/az/LC_MESSAGES/djangojs.mo | Bin 0 -> 4598 bytes .../admin/locale/az/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 21347 bytes .../admin/locale/be/LC_MESSAGES/django.po | 726 ++ .../admin/locale/be/LC_MESSAGES/djangojs.mo | Bin 0 -> 6558 bytes .../admin/locale/be/LC_MESSAGES/djangojs.po | 272 + .../admin/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 21397 bytes .../admin/locale/bg/LC_MESSAGES/django.po | 733 ++ .../admin/locale/bg/LC_MESSAGES/djangojs.mo | Bin 0 -> 6230 bytes .../admin/locale/bg/LC_MESSAGES/djangojs.po | 267 + .../admin/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 15247 bytes .../admin/locale/bn/LC_MESSAGES/django.po | 652 + .../admin/locale/bn/LC_MESSAGES/djangojs.mo | Bin 0 -> 2313 bytes .../admin/locale/bn/LC_MESSAGES/djangojs.po | 207 + .../admin/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 6489 bytes .../admin/locale/br/LC_MESSAGES/django.po | 671 + .../admin/locale/br/LC_MESSAGES/djangojs.mo | Bin 0 -> 1658 bytes .../admin/locale/br/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 8845 bytes .../admin/locale/bs/LC_MESSAGES/django.po | 657 + .../admin/locale/bs/LC_MESSAGES/djangojs.mo | Bin 0 -> 1183 bytes .../admin/locale/bs/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 17411 bytes .../admin/locale/ca/LC_MESSAGES/django.po | 738 ++ .../admin/locale/ca/LC_MESSAGES/djangojs.mo | Bin 0 -> 5150 bytes .../admin/locale/ca/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 17659 bytes .../admin/locale/cs/LC_MESSAGES/django.po | 738 ++ .../admin/locale/cs/LC_MESSAGES/djangojs.mo | Bin 0 -> 5679 bytes .../admin/locale/cs/LC_MESSAGES/djangojs.po | 274 + .../admin/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 12521 bytes .../admin/locale/cy/LC_MESSAGES/django.po | 675 + .../admin/locale/cy/LC_MESSAGES/djangojs.mo | Bin 0 -> 3801 bytes .../admin/locale/cy/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 16680 bytes .../admin/locale/da/LC_MESSAGES/django.po | 722 + .../admin/locale/da/LC_MESSAGES/djangojs.mo | Bin 0 -> 5098 bytes .../admin/locale/da/LC_MESSAGES/djangojs.po | 270 + .../admin/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 17714 bytes .../admin/locale/de/LC_MESSAGES/django.po | 743 ++ .../admin/locale/de/LC_MESSAGES/djangojs.mo | Bin 0 -> 5203 bytes .../admin/locale/de/LC_MESSAGES/djangojs.po | 271 + .../admin/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 17570 bytes .../admin/locale/dsb/LC_MESSAGES/django.po | 722 + .../admin/locale/dsb/LC_MESSAGES/djangojs.mo | Bin 0 -> 5609 bytes .../admin/locale/dsb/LC_MESSAGES/djangojs.po | 273 + .../admin/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 22968 bytes .../admin/locale/el/LC_MESSAGES/django.po | 737 ++ .../admin/locale/el/LC_MESSAGES/djangojs.mo | Bin 0 -> 6509 bytes .../admin/locale/el/LC_MESSAGES/djangojs.po | 272 + .../admin/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../admin/locale/en/LC_MESSAGES/django.po | 908 ++ .../admin/locale/en/LC_MESSAGES/djangojs.mo | Bin 0 -> 356 bytes .../admin/locale/en/LC_MESSAGES/djangojs.po | 316 + .../admin/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 16191 bytes .../admin/locale/en_AU/LC_MESSAGES/django.po | 724 + .../locale/en_AU/LC_MESSAGES/djangojs.mo | Bin 0 -> 5001 bytes .../locale/en_AU/LC_MESSAGES/djangojs.po | 266 + .../admin/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 11159 bytes .../admin/locale/en_GB/LC_MESSAGES/django.po | 691 + .../locale/en_GB/LC_MESSAGES/djangojs.mo | Bin 0 -> 3147 bytes .../locale/en_GB/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 13656 bytes .../admin/locale/eo/LC_MESSAGES/django.po | 711 + .../admin/locale/eo/LC_MESSAGES/djangojs.mo | Bin 0 -> 4452 bytes .../admin/locale/eo/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 17696 bytes .../admin/locale/es/LC_MESSAGES/django.po | 751 ++ .../admin/locale/es/LC_MESSAGES/djangojs.mo | Bin 0 -> 5203 bytes .../admin/locale/es/LC_MESSAGES/djangojs.po | 273 + .../admin/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 17847 bytes .../admin/locale/es_AR/LC_MESSAGES/django.po | 736 ++ .../locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 0 -> 5409 bytes .../locale/es_AR/LC_MESSAGES/djangojs.po | 276 + .../admin/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 15156 bytes .../admin/locale/es_CO/LC_MESSAGES/django.po | 697 + .../locale/es_CO/LC_MESSAGES/djangojs.mo | Bin 0 -> 3895 bytes .../locale/es_CO/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 11628 bytes .../admin/locale/es_MX/LC_MESSAGES/django.po | 702 + .../locale/es_MX/LC_MESSAGES/djangojs.mo | Bin 0 -> 3380 bytes .../locale/es_MX/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 16837 bytes .../admin/locale/es_VE/LC_MESSAGES/django.po | 698 + .../locale/es_VE/LC_MESSAGES/djangojs.mo | Bin 0 -> 4635 bytes .../locale/es_VE/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 16555 bytes .../admin/locale/et/LC_MESSAGES/django.po | 720 + .../admin/locale/et/LC_MESSAGES/djangojs.mo | Bin 0 -> 4965 bytes .../admin/locale/et/LC_MESSAGES/djangojs.po | 270 + .../admin/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 13665 bytes .../admin/locale/eu/LC_MESSAGES/django.po | 709 + .../admin/locale/eu/LC_MESSAGES/djangojs.mo | Bin 0 -> 4522 bytes .../admin/locale/eu/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 20345 bytes .../admin/locale/fa/LC_MESSAGES/django.po | 739 ++ .../admin/locale/fa/LC_MESSAGES/djangojs.mo | Bin 0 -> 6050 bytes .../admin/locale/fa/LC_MESSAGES/djangojs.po | 271 + .../admin/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 16810 bytes .../admin/locale/fi/LC_MESSAGES/django.po | 724 + .../admin/locale/fi/LC_MESSAGES/djangojs.mo | Bin 0 -> 5200 bytes .../admin/locale/fi/LC_MESSAGES/djangojs.po | 270 + .../admin/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 18497 bytes .../admin/locale/fr/LC_MESSAGES/django.po | 744 ++ .../admin/locale/fr/LC_MESSAGES/djangojs.mo | Bin 0 -> 5324 bytes .../admin/locale/fr/LC_MESSAGES/djangojs.po | 268 + .../admin/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../admin/locale/fy/LC_MESSAGES/django.po | 609 + .../admin/locale/fy/LC_MESSAGES/djangojs.mo | Bin 0 -> 476 bytes .../admin/locale/fy/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 15075 bytes .../admin/locale/ga/LC_MESSAGES/django.po | 715 + .../admin/locale/ga/LC_MESSAGES/djangojs.mo | Bin 0 -> 5247 bytes .../admin/locale/ga/LC_MESSAGES/djangojs.po | 234 + .../admin/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 18871 bytes .../admin/locale/gd/LC_MESSAGES/django.po | 754 ++ .../admin/locale/gd/LC_MESSAGES/djangojs.mo | Bin 0 -> 5904 bytes .../admin/locale/gd/LC_MESSAGES/djangojs.po | 286 + .../admin/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 10785 bytes .../admin/locale/gl/LC_MESSAGES/django.po | 708 + .../admin/locale/gl/LC_MESSAGES/djangojs.mo | Bin 0 -> 3279 bytes .../admin/locale/gl/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 16297 bytes .../admin/locale/he/LC_MESSAGES/django.po | 717 + .../admin/locale/he/LC_MESSAGES/djangojs.mo | Bin 0 -> 5791 bytes .../admin/locale/he/LC_MESSAGES/djangojs.po | 272 + .../admin/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 18457 bytes .../admin/locale/hi/LC_MESSAGES/django.po | 666 + .../admin/locale/hi/LC_MESSAGES/djangojs.mo | Bin 0 -> 4893 bytes .../admin/locale/hi/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 14702 bytes .../admin/locale/hr/LC_MESSAGES/django.po | 716 + .../admin/locale/hr/LC_MESSAGES/djangojs.mo | Bin 0 -> 3360 bytes .../admin/locale/hr/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 17520 bytes .../admin/locale/hsb/LC_MESSAGES/django.po | 728 ++ .../admin/locale/hsb/LC_MESSAGES/djangojs.mo | Bin 0 -> 5681 bytes .../admin/locale/hsb/LC_MESSAGES/djangojs.po | 274 + .../admin/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 17427 bytes .../admin/locale/hu/LC_MESSAGES/django.po | 731 ++ .../admin/locale/hu/LC_MESSAGES/djangojs.mo | Bin 0 -> 5121 bytes .../admin/locale/hu/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 18274 bytes .../admin/locale/hy/LC_MESSAGES/django.po | 708 + .../admin/locale/hy/LC_MESSAGES/djangojs.mo | Bin 0 -> 5636 bytes .../admin/locale/hy/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 11278 bytes .../admin/locale/ia/LC_MESSAGES/django.po | 664 + .../admin/locale/ia/LC_MESSAGES/djangojs.mo | Bin 0 -> 3177 bytes .../admin/locale/ia/LC_MESSAGES/djangojs.po | 216 + .../admin/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 16681 bytes .../admin/locale/id/LC_MESSAGES/django.po | 731 ++ .../admin/locale/id/LC_MESSAGES/djangojs.mo | Bin 0 -> 5006 bytes .../admin/locale/id/LC_MESSAGES/djangojs.po | 267 + .../admin/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 12624 bytes .../admin/locale/io/LC_MESSAGES/django.po | 668 + .../admin/locale/io/LC_MESSAGES/djangojs.mo | Bin 0 -> 464 bytes .../admin/locale/io/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 16804 bytes .../admin/locale/is/LC_MESSAGES/django.po | 720 + .../admin/locale/is/LC_MESSAGES/djangojs.mo | Bin 0 -> 5174 bytes .../admin/locale/is/LC_MESSAGES/djangojs.po | 267 + .../admin/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 17309 bytes .../admin/locale/it/LC_MESSAGES/django.po | 742 ++ .../admin/locale/it/LC_MESSAGES/djangojs.mo | Bin 0 -> 5119 bytes .../admin/locale/it/LC_MESSAGES/djangojs.po | 272 + .../admin/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 18553 bytes .../admin/locale/ja/LC_MESSAGES/django.po | 723 + .../admin/locale/ja/LC_MESSAGES/djangojs.mo | Bin 0 -> 5284 bytes .../admin/locale/ja/LC_MESSAGES/djangojs.po | 263 + .../admin/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 20101 bytes .../admin/locale/ka/LC_MESSAGES/django.po | 699 + .../admin/locale/ka/LC_MESSAGES/djangojs.mo | Bin 0 -> 5516 bytes .../admin/locale/ka/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 3531 bytes .../admin/locale/kab/LC_MESSAGES/django.po | 631 + .../admin/locale/kab/LC_MESSAGES/djangojs.mo | Bin 0 -> 1844 bytes .../admin/locale/kab/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 12845 bytes .../admin/locale/kk/LC_MESSAGES/django.po | 695 + .../admin/locale/kk/LC_MESSAGES/djangojs.mo | Bin 0 -> 2387 bytes .../admin/locale/kk/LC_MESSAGES/djangojs.po | 210 + .../admin/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 10403 bytes .../admin/locale/km/LC_MESSAGES/django.po | 636 + .../admin/locale/km/LC_MESSAGES/djangojs.mo | Bin 0 -> 1334 bytes .../admin/locale/km/LC_MESSAGES/djangojs.po | 201 + .../admin/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 9203 bytes .../admin/locale/kn/LC_MESSAGES/django.po | 639 + .../admin/locale/kn/LC_MESSAGES/djangojs.mo | Bin 0 -> 1872 bytes .../admin/locale/kn/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 17829 bytes .../admin/locale/ko/LC_MESSAGES/django.po | 740 ++ .../admin/locale/ko/LC_MESSAGES/djangojs.mo | Bin 0 -> 5092 bytes .../admin/locale/ko/LC_MESSAGES/djangojs.po | 266 + .../admin/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 20129 bytes .../admin/locale/ky/LC_MESSAGES/django.po | 711 + .../admin/locale/ky/LC_MESSAGES/djangojs.mo | Bin 0 -> 5888 bytes .../admin/locale/ky/LC_MESSAGES/djangojs.po | 260 + .../admin/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 913 bytes .../admin/locale/lb/LC_MESSAGES/django.po | 632 + .../admin/locale/lb/LC_MESSAGES/djangojs.mo | Bin 0 -> 474 bytes .../admin/locale/lb/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 17033 bytes .../admin/locale/lt/LC_MESSAGES/django.po | 720 + .../admin/locale/lt/LC_MESSAGES/djangojs.mo | Bin 0 -> 5183 bytes .../admin/locale/lt/LC_MESSAGES/djangojs.po | 236 + .../admin/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 17086 bytes .../admin/locale/lv/LC_MESSAGES/django.po | 726 ++ .../admin/locale/lv/LC_MESSAGES/djangojs.mo | Bin 0 -> 5491 bytes .../admin/locale/lv/LC_MESSAGES/djangojs.po | 273 + .../admin/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 15611 bytes .../admin/locale/mk/LC_MESSAGES/django.po | 705 + .../admin/locale/mk/LC_MESSAGES/djangojs.mo | Bin 0 -> 4719 bytes .../admin/locale/mk/LC_MESSAGES/djangojs.po | 262 + .../admin/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 20830 bytes .../admin/locale/ml/LC_MESSAGES/django.po | 700 + .../admin/locale/ml/LC_MESSAGES/djangojs.mo | Bin 0 -> 6200 bytes .../admin/locale/ml/LC_MESSAGES/djangojs.po | 214 + .../admin/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 14812 bytes .../admin/locale/mn/LC_MESSAGES/django.po | 703 + .../admin/locale/mn/LC_MESSAGES/djangojs.mo | Bin 0 -> 5228 bytes .../admin/locale/mn/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../admin/locale/mr/LC_MESSAGES/django.po | 609 + .../admin/locale/mr/LC_MESSAGES/djangojs.mo | Bin 0 -> 468 bytes .../admin/locale/mr/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 16840 bytes .../admin/locale/ms/LC_MESSAGES/django.po | 721 + .../admin/locale/ms/LC_MESSAGES/djangojs.mo | Bin 0 -> 5018 bytes .../admin/locale/ms/LC_MESSAGES/djangojs.po | 264 + .../admin/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 3677 bytes .../admin/locale/my/LC_MESSAGES/django.po | 629 + .../admin/locale/my/LC_MESSAGES/djangojs.mo | Bin 0 -> 3268 bytes .../admin/locale/my/LC_MESSAGES/djangojs.po | 206 + .../admin/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 16244 bytes .../admin/locale/nb/LC_MESSAGES/django.po | 720 + .../admin/locale/nb/LC_MESSAGES/djangojs.mo | Bin 0 -> 4939 bytes .../admin/locale/nb/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 15772 bytes .../admin/locale/ne/LC_MESSAGES/django.po | 688 + .../admin/locale/ne/LC_MESSAGES/djangojs.mo | Bin 0 -> 5362 bytes .../admin/locale/ne/LC_MESSAGES/djangojs.po | 213 + .../admin/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 17070 bytes .../admin/locale/nl/LC_MESSAGES/django.po | 735 ++ .../admin/locale/nl/LC_MESSAGES/djangojs.mo | Bin 0 -> 4592 bytes .../admin/locale/nl/LC_MESSAGES/djangojs.po | 227 + .../admin/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 16502 bytes .../admin/locale/nn/LC_MESSAGES/django.po | 726 ++ .../admin/locale/nn/LC_MESSAGES/djangojs.mo | Bin 0 -> 4939 bytes .../admin/locale/nn/LC_MESSAGES/djangojs.po | 266 + .../admin/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 14978 bytes .../admin/locale/os/LC_MESSAGES/django.po | 665 + .../admin/locale/os/LC_MESSAGES/djangojs.mo | Bin 0 -> 3806 bytes .../admin/locale/os/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 8556 bytes .../admin/locale/pa/LC_MESSAGES/django.po | 678 + .../admin/locale/pa/LC_MESSAGES/djangojs.mo | Bin 0 -> 1148 bytes .../admin/locale/pa/LC_MESSAGES/djangojs.po | 253 + .../admin/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 18021 bytes .../admin/locale/pl/LC_MESSAGES/django.po | 753 ++ .../admin/locale/pl/LC_MESSAGES/djangojs.mo | Bin 0 -> 5702 bytes .../admin/locale/pl/LC_MESSAGES/djangojs.po | 293 + .../admin/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 16912 bytes .../admin/locale/pt/LC_MESSAGES/django.po | 725 + .../admin/locale/pt/LC_MESSAGES/djangojs.mo | Bin 0 -> 4579 bytes .../admin/locale/pt/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 17151 bytes .../admin/locale/pt_BR/LC_MESSAGES/django.po | 747 ++ .../locale/pt_BR/LC_MESSAGES/djangojs.mo | Bin 0 -> 5208 bytes .../locale/pt_BR/LC_MESSAGES/djangojs.po | 272 + .../admin/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 14387 bytes .../admin/locale/ro/LC_MESSAGES/django.po | 717 + .../admin/locale/ro/LC_MESSAGES/djangojs.mo | Bin 0 -> 4639 bytes .../admin/locale/ro/LC_MESSAGES/djangojs.po | 228 + .../admin/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 22080 bytes .../admin/locale/ru/LC_MESSAGES/django.po | 738 ++ .../admin/locale/ru/LC_MESSAGES/djangojs.mo | Bin 0 -> 7149 bytes .../admin/locale/ru/LC_MESSAGES/djangojs.po | 287 + .../admin/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 17090 bytes .../admin/locale/sk/LC_MESSAGES/django.po | 740 ++ .../admin/locale/sk/LC_MESSAGES/djangojs.mo | Bin 0 -> 5291 bytes .../admin/locale/sk/LC_MESSAGES/djangojs.po | 275 + .../admin/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 16136 bytes .../admin/locale/sl/LC_MESSAGES/django.po | 690 + .../admin/locale/sl/LC_MESSAGES/djangojs.mo | Bin 0 -> 4724 bytes .../admin/locale/sl/LC_MESSAGES/djangojs.po | 225 + .../admin/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 17324 bytes .../admin/locale/sq/LC_MESSAGES/django.po | 724 + .../admin/locale/sq/LC_MESSAGES/djangojs.mo | Bin 0 -> 5179 bytes .../admin/locale/sq/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 15414 bytes .../admin/locale/sr/LC_MESSAGES/django.po | 702 + .../admin/locale/sr/LC_MESSAGES/djangojs.mo | Bin 0 -> 6125 bytes .../admin/locale/sr/LC_MESSAGES/djangojs.po | 270 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 12383 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 694 + .../locale/sr_Latn/LC_MESSAGES/djangojs.mo | Bin 0 -> 5136 bytes .../locale/sr_Latn/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 16436 bytes .../admin/locale/sv/LC_MESSAGES/django.po | 725 + .../admin/locale/sv/LC_MESSAGES/djangojs.mo | Bin 0 -> 4500 bytes .../admin/locale/sv/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 14353 bytes .../admin/locale/sw/LC_MESSAGES/django.po | 676 + .../admin/locale/sw/LC_MESSAGES/djangojs.mo | Bin 0 -> 3647 bytes .../admin/locale/sw/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 10179 bytes .../admin/locale/ta/LC_MESSAGES/django.po | 643 + .../admin/locale/ta/LC_MESSAGES/djangojs.mo | Bin 0 -> 1379 bytes .../admin/locale/ta/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 10590 bytes .../admin/locale/te/LC_MESSAGES/django.po | 640 + .../admin/locale/te/LC_MESSAGES/djangojs.mo | Bin 0 -> 1362 bytes .../admin/locale/te/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 15463 bytes .../admin/locale/tg/LC_MESSAGES/django.po | 699 + .../admin/locale/tg/LC_MESSAGES/djangojs.mo | Bin 0 -> 5154 bytes .../admin/locale/tg/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 16394 bytes .../admin/locale/th/LC_MESSAGES/django.po | 671 + .../admin/locale/th/LC_MESSAGES/djangojs.mo | Bin 0 -> 6250 bytes .../admin/locale/th/LC_MESSAGES/djangojs.po | 213 + .../admin/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 17266 bytes .../admin/locale/tr/LC_MESSAGES/django.po | 729 ++ .../admin/locale/tr/LC_MESSAGES/djangojs.mo | Bin 0 -> 5121 bytes .../admin/locale/tr/LC_MESSAGES/djangojs.po | 269 + .../admin/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 12952 bytes .../admin/locale/tt/LC_MESSAGES/django.po | 655 + .../admin/locale/tt/LC_MESSAGES/djangojs.mo | Bin 0 -> 2607 bytes .../admin/locale/tt/LC_MESSAGES/djangojs.po | 208 + .../admin/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 622 bytes .../admin/locale/udm/LC_MESSAGES/django.po | 606 + .../admin/locale/udm/LC_MESSAGES/djangojs.mo | Bin 0 -> 462 bytes .../admin/locale/udm/LC_MESSAGES/djangojs.po | 142 + .../admin/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 15623 bytes .../admin/locale/uk/LC_MESSAGES/django.po | 724 + .../admin/locale/uk/LC_MESSAGES/djangojs.mo | Bin 0 -> 5787 bytes .../admin/locale/uk/LC_MESSAGES/djangojs.po | 275 + .../admin/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 13106 bytes .../admin/locale/ur/LC_MESSAGES/django.po | 661 + .../admin/locale/ur/LC_MESSAGES/djangojs.mo | Bin 0 -> 2678 bytes .../admin/locale/ur/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 4610 bytes .../admin/locale/uz/LC_MESSAGES/django.po | 678 + .../admin/locale/uz/LC_MESSAGES/djangojs.mo | Bin 0 -> 3783 bytes .../admin/locale/uz/LC_MESSAGES/djangojs.po | 261 + .../admin/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 18077 bytes .../admin/locale/vi/LC_MESSAGES/django.po | 726 ++ .../admin/locale/vi/LC_MESSAGES/djangojs.mo | Bin 0 -> 5302 bytes .../admin/locale/vi/LC_MESSAGES/djangojs.po | 268 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 16014 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 717 + .../locale/zh_Hans/LC_MESSAGES/djangojs.mo | Bin 0 -> 4831 bytes .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 270 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 15152 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 660 + .../locale/zh_Hant/LC_MESSAGES/djangojs.mo | Bin 0 -> 4230 bytes .../locale/zh_Hant/LC_MESSAGES/djangojs.po | 213 + .../contrib/admin/migrations/0001_initial.py | 76 + .../0002_logentry_remove_auto_add.py | 22 + .../0003_logentry_add_action_flag_choices.py | 20 + .../contrib/admin/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1668 bytes ...2_logentry_remove_auto_add.cpython-310.pyc | Bin 0 -> 749 bytes ...ry_add_action_flag_choices.cpython-310.pyc | Bin 0 -> 769 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../django/contrib/admin/models.py | 190 + .../django/contrib/admin/options.py | 2492 ++++ .../django/contrib/admin/sites.py | 607 + .../admin/static/admin/css/autocomplete.css | 275 + .../contrib/admin/static/admin/css/base.css | 1052 ++ .../admin/static/admin/css/changelists.css | 355 + .../admin/static/admin/css/dashboard.css | 26 + .../contrib/admin/static/admin/css/fonts.css | 20 + .../contrib/admin/static/admin/css/forms.css | 527 + .../contrib/admin/static/admin/css/login.css | 61 + .../admin/static/admin/css/nav_sidebar.css | 139 + .../admin/static/admin/css/responsive.css | 1004 ++ .../admin/static/admin/css/responsive_rtl.css | 80 + .../contrib/admin/static/admin/css/rtl.css | 227 + .../css/vendor/select2/LICENSE-SELECT2.md | 21 + .../admin/css/vendor/select2/select2.css | 481 + .../admin/css/vendor/select2/select2.min.css | 1 + .../admin/static/admin/css/widgets.css | 574 + .../admin/static/admin/fonts/LICENSE.txt | 202 + .../admin/static/admin/fonts/README.txt | 3 + .../admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 86184 bytes .../admin/fonts/Roboto-Light-webfont.woff | Bin 0 -> 85692 bytes .../admin/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 85876 bytes .../contrib/admin/static/admin/img/LICENSE | 20 + .../contrib/admin/static/admin/img/README.txt | 7 + .../admin/static/admin/img/calendar-icons.svg | 14 + .../static/admin/img/gis/move_vertex_off.svg | 1 + .../static/admin/img/gis/move_vertex_on.svg | 1 + .../admin/static/admin/img/icon-addlink.svg | 3 + .../admin/static/admin/img/icon-alert.svg | 3 + .../admin/static/admin/img/icon-calendar.svg | 9 + .../static/admin/img/icon-changelink.svg | 3 + .../admin/static/admin/img/icon-clock.svg | 9 + .../static/admin/img/icon-deletelink.svg | 3 + .../admin/static/admin/img/icon-no.svg | 3 + .../static/admin/img/icon-unknown-alt.svg | 3 + .../admin/static/admin/img/icon-unknown.svg | 3 + .../admin/static/admin/img/icon-viewlink.svg | 3 + .../admin/static/admin/img/icon-yes.svg | 3 + .../admin/static/admin/img/inline-delete.svg | 3 + .../contrib/admin/static/admin/img/search.svg | 3 + .../admin/static/admin/img/selector-icons.svg | 34 + .../admin/static/admin/img/sorting-icons.svg | 19 + .../admin/static/admin/img/tooltag-add.svg | 3 + .../static/admin/img/tooltag-arrowright.svg | 3 + .../admin/static/admin/js/SelectBox.js | 112 + .../admin/static/admin/js/SelectFilter2.js | 236 + .../contrib/admin/static/admin/js/actions.js | 201 + .../admin/js/admin/DateTimeShortcuts.js | 415 + .../admin/js/admin/RelatedObjectLookups.js | 155 + .../admin/static/admin/js/autocomplete.js | 35 + .../contrib/admin/static/admin/js/calendar.js | 221 + .../contrib/admin/static/admin/js/cancel.js | 29 + .../admin/static/admin/js/change_form.js | 16 + .../contrib/admin/static/admin/js/collapse.js | 43 + .../contrib/admin/static/admin/js/core.js | 170 + .../contrib/admin/static/admin/js/inlines.js | 344 + .../admin/static/admin/js/jquery.init.js | 8 + .../admin/static/admin/js/nav_sidebar.js | 102 + .../admin/static/admin/js/popup_response.js | 16 + .../admin/static/admin/js/prepopulate.js | 43 + .../admin/static/admin/js/prepopulate_init.js | 11 + .../contrib/admin/static/admin/js/urlify.js | 170 + .../static/admin/js/vendor/jquery/LICENSE.txt | 20 + .../static/admin/js/vendor/jquery/jquery.js | 10881 ++++++++++++++++ .../admin/js/vendor/jquery/jquery.min.js | 2 + .../static/admin/js/vendor/select2/LICENSE.md | 21 + .../static/admin/js/vendor/select2/i18n/af.js | 3 + .../static/admin/js/vendor/select2/i18n/ar.js | 3 + .../static/admin/js/vendor/select2/i18n/az.js | 3 + .../static/admin/js/vendor/select2/i18n/bg.js | 3 + .../static/admin/js/vendor/select2/i18n/bn.js | 3 + .../static/admin/js/vendor/select2/i18n/bs.js | 3 + .../static/admin/js/vendor/select2/i18n/ca.js | 3 + .../static/admin/js/vendor/select2/i18n/cs.js | 3 + .../static/admin/js/vendor/select2/i18n/da.js | 3 + .../static/admin/js/vendor/select2/i18n/de.js | 3 + .../admin/js/vendor/select2/i18n/dsb.js | 3 + .../static/admin/js/vendor/select2/i18n/el.js | 3 + .../static/admin/js/vendor/select2/i18n/en.js | 3 + .../static/admin/js/vendor/select2/i18n/es.js | 3 + .../static/admin/js/vendor/select2/i18n/et.js | 3 + .../static/admin/js/vendor/select2/i18n/eu.js | 3 + .../static/admin/js/vendor/select2/i18n/fa.js | 3 + .../static/admin/js/vendor/select2/i18n/fi.js | 3 + .../static/admin/js/vendor/select2/i18n/fr.js | 3 + .../static/admin/js/vendor/select2/i18n/gl.js | 3 + .../static/admin/js/vendor/select2/i18n/he.js | 3 + .../static/admin/js/vendor/select2/i18n/hi.js | 3 + .../static/admin/js/vendor/select2/i18n/hr.js | 3 + .../admin/js/vendor/select2/i18n/hsb.js | 3 + .../static/admin/js/vendor/select2/i18n/hu.js | 3 + .../static/admin/js/vendor/select2/i18n/hy.js | 3 + .../static/admin/js/vendor/select2/i18n/id.js | 3 + .../static/admin/js/vendor/select2/i18n/is.js | 3 + .../static/admin/js/vendor/select2/i18n/it.js | 3 + .../static/admin/js/vendor/select2/i18n/ja.js | 3 + .../static/admin/js/vendor/select2/i18n/ka.js | 3 + .../static/admin/js/vendor/select2/i18n/km.js | 3 + .../static/admin/js/vendor/select2/i18n/ko.js | 3 + .../static/admin/js/vendor/select2/i18n/lt.js | 3 + .../static/admin/js/vendor/select2/i18n/lv.js | 3 + .../static/admin/js/vendor/select2/i18n/mk.js | 3 + .../static/admin/js/vendor/select2/i18n/ms.js | 3 + .../static/admin/js/vendor/select2/i18n/nb.js | 3 + .../static/admin/js/vendor/select2/i18n/ne.js | 3 + .../static/admin/js/vendor/select2/i18n/nl.js | 3 + .../static/admin/js/vendor/select2/i18n/pl.js | 3 + .../static/admin/js/vendor/select2/i18n/ps.js | 3 + .../admin/js/vendor/select2/i18n/pt-BR.js | 3 + .../static/admin/js/vendor/select2/i18n/pt.js | 3 + .../static/admin/js/vendor/select2/i18n/ro.js | 3 + .../static/admin/js/vendor/select2/i18n/ru.js | 3 + .../static/admin/js/vendor/select2/i18n/sk.js | 3 + .../static/admin/js/vendor/select2/i18n/sl.js | 3 + .../static/admin/js/vendor/select2/i18n/sq.js | 3 + .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 + .../static/admin/js/vendor/select2/i18n/sr.js | 3 + .../static/admin/js/vendor/select2/i18n/sv.js | 3 + .../static/admin/js/vendor/select2/i18n/th.js | 3 + .../static/admin/js/vendor/select2/i18n/tk.js | 3 + .../static/admin/js/vendor/select2/i18n/tr.js | 3 + .../static/admin/js/vendor/select2/i18n/uk.js | 3 + .../static/admin/js/vendor/select2/i18n/vi.js | 3 + .../admin/js/vendor/select2/i18n/zh-CN.js | 3 + .../admin/js/vendor/select2/i18n/zh-TW.js | 3 + .../admin/js/vendor/select2/select2.full.js | 6820 ++++++++++ .../js/vendor/select2/select2.full.min.js | 2 + .../admin/js/vendor/xregexp/LICENSE.txt | 21 + .../static/admin/js/vendor/xregexp/xregexp.js | 4652 +++++++ .../admin/js/vendor/xregexp/xregexp.min.js | 160 + .../contrib/admin/templates/admin/404.html | 12 + .../contrib/admin/templates/admin/500.html | 17 + .../admin/templates/admin/actions.html | 23 + .../admin/templates/admin/app_index.html | 18 + .../admin/templates/admin/app_list.html | 40 + .../templates/admin/auth/user/add_form.html | 10 + .../admin/auth/user/change_password.html | 57 + .../contrib/admin/templates/admin/base.html | 105 + .../admin/templates/admin/base_site.html | 9 + .../admin/templates/admin/change_form.html | 81 + .../admin/change_form_object_tools.html | 8 + .../admin/templates/admin/change_list.html | 86 + .../admin/change_list_object_tools.html | 12 + .../templates/admin/change_list_results.html | 38 + .../admin/templates/admin/date_hierarchy.html | 16 + .../templates/admin/delete_confirmation.html | 52 + .../admin/delete_selected_confirmation.html | 55 + .../templates/admin/edit_inline/stacked.html | 29 + .../templates/admin/edit_inline/tabular.html | 66 + .../contrib/admin/templates/admin/filter.html | 8 + .../templates/admin/includes/fieldset.html | 29 + .../admin/includes/object_delete_summary.html | 7 + .../contrib/admin/templates/admin/index.html | 50 + .../admin/templates/admin/invalid_setup.html | 13 + .../contrib/admin/templates/admin/login.html | 68 + .../admin/templates/admin/nav_sidebar.html | 8 + .../admin/templates/admin/object_history.html | 42 + .../admin/templates/admin/pagination.html | 12 + .../admin/templates/admin/popup_response.html | 10 + .../admin/prepopulated_fields_js.html | 5 + .../admin/templates/admin/search_form.html | 20 + .../admin/templates/admin/submit_line.html | 14 + .../admin/widgets/clearable_file_input.html | 6 + .../admin/widgets/foreign_key_raw_id.html | 2 + .../admin/widgets/many_to_many_raw_id.html | 1 + .../admin/templates/admin/widgets/radio.html | 1 + .../admin/widgets/related_widget_wrapper.html | 31 + .../admin/widgets/split_datetime.html | 4 + .../admin/templates/admin/widgets/url.html | 1 + .../templates/registration/logged_out.html | 14 + .../registration/password_change_done.html | 13 + .../registration/password_change_form.html | 57 + .../registration/password_reset_complete.html | 17 + .../registration/password_reset_confirm.html | 41 + .../registration/password_reset_done.html | 17 + .../registration/password_reset_email.html | 14 + .../registration/password_reset_form.html | 27 + .../contrib/admin/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 207 bytes .../__pycache__/admin_list.cpython-310.pyc | Bin 0 -> 12367 bytes .../__pycache__/admin_modify.cpython-310.pyc | Bin 0 -> 3722 bytes .../__pycache__/admin_urls.cpython-310.pyc | Bin 0 -> 1804 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 1511 bytes .../__pycache__/log.cpython-310.pyc | Bin 0 -> 2381 bytes .../contrib/admin/templatetags/admin_list.py | 533 + .../admin/templatetags/admin_modify.py | 150 + .../contrib/admin/templatetags/admin_urls.py | 66 + .../django/contrib/admin/templatetags/base.py | 45 + .../django/contrib/admin/templatetags/log.py | 69 + .../django/contrib/admin/tests.py | 209 + .../django/contrib/admin/utils.py | 578 + .../django/contrib/admin/views/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/autocomplete.cpython-310.pyc | Bin 0 -> 4087 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 0 -> 879 bytes .../views/__pycache__/main.cpython-310.pyc | Bin 0 -> 13163 bytes .../contrib/admin/views/autocomplete.py | 122 + .../django/contrib/admin/views/decorators.py | 19 + .../django/contrib/admin/views/main.py | 585 + .../django/contrib/admin/widgets.py | 568 + .../django/contrib/admindocs/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 564 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 1600 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 1213 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 5682 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 11728 bytes .../django/contrib/admindocs/apps.py | 7 + .../admindocs/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 2421 bytes .../admindocs/locale/af/LC_MESSAGES/django.po | 268 + .../admindocs/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 7440 bytes .../admindocs/locale/ar/LC_MESSAGES/django.po | 278 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 7445 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 276 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 715 bytes .../locale/ast/LC_MESSAGES/django.po | 258 + .../admindocs/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1687 bytes .../admindocs/locale/az/LC_MESSAGES/django.po | 258 + .../admindocs/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 8163 bytes .../admindocs/locale/be/LC_MESSAGES/django.po | 284 + .../admindocs/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 8236 bytes .../admindocs/locale/bg/LC_MESSAGES/django.po | 290 + .../admindocs/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 3794 bytes .../admindocs/locale/bn/LC_MESSAGES/django.po | 261 + .../admindocs/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1571 bytes .../admindocs/locale/br/LC_MESSAGES/django.po | 263 + .../admindocs/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1730 bytes .../admindocs/locale/bs/LC_MESSAGES/django.po | 261 + .../admindocs/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 6650 bytes .../admindocs/locale/ca/LC_MESSAGES/django.po | 288 + .../admindocs/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 6619 bytes .../admindocs/locale/cs/LC_MESSAGES/django.po | 284 + .../admindocs/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 5401 bytes .../admindocs/locale/cy/LC_MESSAGES/django.po | 279 + .../admindocs/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 6446 bytes .../admindocs/locale/da/LC_MESSAGES/django.po | 285 + .../admindocs/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 6567 bytes .../admindocs/locale/de/LC_MESSAGES/django.po | 287 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 6807 bytes .../locale/dsb/LC_MESSAGES/django.po | 285 + .../admindocs/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 8581 bytes .../admindocs/locale/el/LC_MESSAGES/django.po | 290 + .../admindocs/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../admindocs/locale/en/LC_MESSAGES/django.po | 359 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 275 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1821 bytes .../locale/en_GB/LC_MESSAGES/django.po | 260 + .../admindocs/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 6071 bytes .../admindocs/locale/eo/LC_MESSAGES/django.po | 279 + .../admindocs/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 6682 bytes .../admindocs/locale/es/LC_MESSAGES/django.po | 293 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 6658 bytes .../locale/es_AR/LC_MESSAGES/django.po | 286 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 6476 bytes .../locale/es_CO/LC_MESSAGES/django.po | 281 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1853 bytes .../locale/es_MX/LC_MESSAGES/django.po | 260 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 6663 bytes .../locale/es_VE/LC_MESSAGES/django.po | 286 + .../admindocs/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 6381 bytes .../admindocs/locale/et/LC_MESSAGES/django.po | 286 + .../admindocs/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 6479 bytes .../admindocs/locale/eu/LC_MESSAGES/django.po | 283 + .../admindocs/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 7499 bytes .../admindocs/locale/fa/LC_MESSAGES/django.po | 285 + .../admindocs/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 6397 bytes .../admindocs/locale/fi/LC_MESSAGES/django.po | 278 + .../admindocs/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 6755 bytes .../admindocs/locale/fr/LC_MESSAGES/django.po | 285 + .../admindocs/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../admindocs/locale/fy/LC_MESSAGES/django.po | 275 + .../admindocs/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1940 bytes .../admindocs/locale/ga/LC_MESSAGES/django.po | 262 + .../admindocs/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 6941 bytes .../admindocs/locale/gd/LC_MESSAGES/django.po | 289 + .../admindocs/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 2265 bytes .../admindocs/locale/gl/LC_MESSAGES/django.po | 260 + .../admindocs/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 6743 bytes .../admindocs/locale/he/LC_MESSAGES/django.po | 273 + .../admindocs/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 2297 bytes .../admindocs/locale/hi/LC_MESSAGES/django.po | 258 + .../admindocs/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 2550 bytes .../admindocs/locale/hr/LC_MESSAGES/django.po | 264 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 6770 bytes .../locale/hsb/LC_MESSAGES/django.po | 286 + .../admindocs/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 6634 bytes .../admindocs/locale/hu/LC_MESSAGES/django.po | 288 + .../admindocs/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1860 bytes .../admindocs/locale/ia/LC_MESSAGES/django.po | 260 + .../admindocs/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 6343 bytes .../admindocs/locale/id/LC_MESSAGES/django.po | 287 + .../admindocs/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../admindocs/locale/io/LC_MESSAGES/django.po | 275 + .../admindocs/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1828 bytes .../admindocs/locale/is/LC_MESSAGES/django.po | 261 + .../admindocs/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 6453 bytes .../admindocs/locale/it/LC_MESSAGES/django.po | 289 + .../admindocs/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 7358 bytes .../admindocs/locale/ja/LC_MESSAGES/django.po | 284 + .../admindocs/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 4446 bytes .../admindocs/locale/ka/LC_MESSAGES/django.po | 263 + .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 1289 bytes .../locale/kab/LC_MESSAGES/django.po | 258 + .../admindocs/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1587 bytes .../admindocs/locale/kk/LC_MESSAGES/django.po | 258 + .../admindocs/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1476 bytes .../admindocs/locale/km/LC_MESSAGES/django.po | 259 + .../admindocs/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1656 bytes .../admindocs/locale/kn/LC_MESSAGES/django.po | 259 + .../admindocs/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 6563 bytes .../admindocs/locale/ko/LC_MESSAGES/django.po | 280 + .../admindocs/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 7977 bytes .../admindocs/locale/ky/LC_MESSAGES/django.po | 281 + .../admindocs/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../admindocs/locale/lb/LC_MESSAGES/django.po | 275 + .../admindocs/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 6741 bytes .../admindocs/locale/lt/LC_MESSAGES/django.po | 290 + .../admindocs/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 6449 bytes .../admindocs/locale/lv/LC_MESSAGES/django.po | 284 + .../admindocs/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 8290 bytes .../admindocs/locale/mk/LC_MESSAGES/django.po | 286 + .../admindocs/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 6865 bytes .../admindocs/locale/ml/LC_MESSAGES/django.po | 268 + .../admindocs/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 7607 bytes .../admindocs/locale/mn/LC_MESSAGES/django.po | 284 + .../admindocs/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../admindocs/locale/mr/LC_MESSAGES/django.po | 275 + .../admindocs/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 6557 bytes .../admindocs/locale/ms/LC_MESSAGES/django.po | 283 + .../admindocs/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1721 bytes .../admindocs/locale/my/LC_MESSAGES/django.po | 258 + .../admindocs/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 6308 bytes .../admindocs/locale/nb/LC_MESSAGES/django.po | 284 + .../admindocs/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 2571 bytes .../admindocs/locale/ne/LC_MESSAGES/django.po | 261 + .../admindocs/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 6463 bytes .../admindocs/locale/nl/LC_MESSAGES/django.po | 285 + .../admindocs/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 6299 bytes .../admindocs/locale/nn/LC_MESSAGES/django.po | 282 + .../admindocs/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 2044 bytes .../admindocs/locale/os/LC_MESSAGES/django.po | 258 + .../admindocs/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1275 bytes .../admindocs/locale/pa/LC_MESSAGES/django.po | 258 + .../admindocs/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 6633 bytes .../admindocs/locale/pl/LC_MESSAGES/django.po | 294 + .../admindocs/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 6566 bytes .../admindocs/locale/pt/LC_MESSAGES/django.po | 286 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 6590 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 292 + .../admindocs/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 6755 bytes .../admindocs/locale/ro/LC_MESSAGES/django.po | 288 + .../admindocs/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 8434 bytes .../admindocs/locale/ru/LC_MESSAGES/django.po | 292 + .../admindocs/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 6639 bytes .../admindocs/locale/sk/LC_MESSAGES/django.po | 286 + .../admindocs/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 6508 bytes .../admindocs/locale/sl/LC_MESSAGES/django.po | 285 + .../admindocs/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 6551 bytes .../admindocs/locale/sq/LC_MESSAGES/django.po | 283 + .../admindocs/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 3672 bytes .../admindocs/locale/sr/LC_MESSAGES/django.po | 264 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1932 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 262 + .../admindocs/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 6230 bytes .../admindocs/locale/sv/LC_MESSAGES/django.po | 287 + .../admindocs/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1808 bytes .../admindocs/locale/sw/LC_MESSAGES/django.po | 259 + .../admindocs/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1675 bytes .../admindocs/locale/ta/LC_MESSAGES/django.po | 258 + .../admindocs/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1684 bytes .../admindocs/locale/te/LC_MESSAGES/django.po | 258 + .../admindocs/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 7731 bytes .../admindocs/locale/tg/LC_MESSAGES/django.po | 281 + .../admindocs/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 2167 bytes .../admindocs/locale/th/LC_MESSAGES/django.po | 258 + .../admindocs/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 6661 bytes .../admindocs/locale/tr/LC_MESSAGES/django.po | 287 + .../admindocs/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1869 bytes .../admindocs/locale/tt/LC_MESSAGES/django.po | 259 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 618 bytes .../locale/udm/LC_MESSAGES/django.po | 275 + .../admindocs/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 8468 bytes .../admindocs/locale/uk/LC_MESSAGES/django.po | 294 + .../admindocs/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1836 bytes .../admindocs/locale/ur/LC_MESSAGES/django.po | 259 + .../admindocs/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1306 bytes .../admindocs/locale/vi/LC_MESSAGES/django.po | 259 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6075 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 276 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 4725 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 267 + .../django/contrib/admindocs/middleware.py | 33 + .../templates/admin_doc/bookmarklets.html | 26 + .../admindocs/templates/admin_doc/index.html | 34 + .../templates/admin_doc/missing_docutils.html | 22 + .../templates/admin_doc/model_detail.html | 78 + .../templates/admin_doc/model_index.html | 52 + .../templates/admin_doc/template_detail.html | 27 + .../admin_doc/template_filter_index.html | 54 + .../admin_doc/template_tag_index.html | 54 + .../templates/admin_doc/view_detail.html | 33 + .../templates/admin_doc/view_index.html | 59 + .../django/contrib/admindocs/urls.py | 50 + .../django/contrib/admindocs/utils.py | 247 + .../django/contrib/admindocs/views.py | 492 + .../django/contrib/auth/__init__.py | 230 + .../auth/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 6237 bytes .../auth/__pycache__/admin.cpython-310.pyc | Bin 0 -> 6708 bytes .../auth/__pycache__/apps.cpython-310.pyc | Bin 0 -> 1456 bytes .../auth/__pycache__/backends.cpython-310.pyc | Bin 0 -> 8987 bytes .../__pycache__/base_user.cpython-310.pyc | Bin 0 -> 5826 bytes .../auth/__pycache__/checks.cpython-310.pyc | Bin 0 -> 4781 bytes .../context_processors.cpython-310.pyc | Bin 0 -> 2594 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 0 -> 2778 bytes .../auth/__pycache__/forms.cpython-310.pyc | Bin 0 -> 14646 bytes .../auth/__pycache__/hashers.cpython-310.pyc | Bin 0 -> 25488 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 4493 bytes .../auth/__pycache__/mixins.cpython-310.pyc | Bin 0 -> 5039 bytes .../auth/__pycache__/models.cpython-310.pyc | Bin 0 -> 17548 bytes .../password_validation.cpython-310.pyc | Bin 0 -> 9861 bytes .../auth/__pycache__/signals.cpython-310.pyc | Bin 0 -> 314 bytes .../auth/__pycache__/tokens.cpython-310.pyc | Bin 0 -> 3943 bytes .../auth/__pycache__/urls.cpython-310.pyc | Bin 0 -> 947 bytes .../__pycache__/validators.cpython-310.pyc | Bin 0 -> 1078 bytes .../auth/__pycache__/views.cpython-310.pyc | Bin 0 -> 12424 bytes .../django/contrib/auth/admin.py | 230 + .../site-packages/django/contrib/auth/apps.py | 30 + .../django/contrib/auth/backends.py | 234 + .../django/contrib/auth/base_user.py | 151 + .../django/contrib/auth/checks.py | 220 + .../contrib/auth/common-passwords.txt.gz | Bin 0 -> 81355 bytes .../django/contrib/auth/context_processors.py | 67 + .../django/contrib/auth/decorators.py | 82 + .../django/contrib/auth/forms.py | 486 + .../django/contrib/auth/handlers/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 202 bytes .../__pycache__/modwsgi.cpython-310.pyc | Bin 0 -> 1393 bytes .../django/contrib/auth/handlers/modwsgi.py | 43 + .../django/contrib/auth/hashers.py | 846 ++ .../auth/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 7392 bytes .../auth/locale/af/LC_MESSAGES/django.po | 304 + .../auth/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 10040 bytes .../auth/locale/ar/LC_MESSAGES/django.po | 319 + .../auth/locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 10167 bytes .../auth/locale/ar_DZ/LC_MESSAGES/django.po | 316 + .../auth/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 2250 bytes .../auth/locale/ast/LC_MESSAGES/django.po | 284 + .../auth/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 7448 bytes .../auth/locale/az/LC_MESSAGES/django.po | 300 + .../auth/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 10033 bytes .../auth/locale/be/LC_MESSAGES/django.po | 313 + .../auth/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 9466 bytes .../auth/locale/bg/LC_MESSAGES/django.po | 311 + .../auth/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 5455 bytes .../auth/locale/bn/LC_MESSAGES/django.po | 286 + .../auth/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1436 bytes .../auth/locale/br/LC_MESSAGES/django.po | 293 + .../auth/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 3146 bytes .../auth/locale/bs/LC_MESSAGES/django.po | 296 + .../auth/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 7649 bytes .../auth/locale/ca/LC_MESSAGES/django.po | 315 + .../auth/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 7836 bytes .../auth/locale/cs/LC_MESSAGES/django.po | 309 + .../auth/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 4338 bytes .../auth/locale/cy/LC_MESSAGES/django.po | 294 + .../auth/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 7478 bytes .../auth/locale/da/LC_MESSAGES/django.po | 309 + .../auth/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 7529 bytes .../auth/locale/de/LC_MESSAGES/django.po | 317 + .../auth/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 8135 bytes .../auth/locale/dsb/LC_MESSAGES/django.po | 318 + .../auth/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 10072 bytes .../auth/locale/el/LC_MESSAGES/django.po | 320 + .../auth/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../auth/locale/en/LC_MESSAGES/django.po | 375 + .../auth/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 7183 bytes .../auth/locale/en_AU/LC_MESSAGES/django.po | 306 + .../auth/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 3179 bytes .../auth/locale/en_GB/LC_MESSAGES/django.po | 289 + .../auth/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 7329 bytes .../auth/locale/eo/LC_MESSAGES/django.po | 306 + .../auth/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 7782 bytes .../auth/locale/es/LC_MESSAGES/django.po | 321 + .../auth/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 7943 bytes .../auth/locale/es_AR/LC_MESSAGES/django.po | 314 + .../auth/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 6529 bytes .../auth/locale/es_CO/LC_MESSAGES/django.po | 304 + .../auth/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 7822 bytes .../auth/locale/es_MX/LC_MESSAGES/django.po | 312 + .../auth/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 7415 bytes .../auth/locale/es_VE/LC_MESSAGES/django.po | 304 + .../auth/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 7393 bytes .../auth/locale/et/LC_MESSAGES/django.po | 308 + .../auth/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 7396 bytes .../auth/locale/eu/LC_MESSAGES/django.po | 310 + .../auth/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 8979 bytes .../auth/locale/fa/LC_MESSAGES/django.po | 313 + .../auth/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 7537 bytes .../auth/locale/fi/LC_MESSAGES/django.po | 309 + .../auth/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 8155 bytes .../auth/locale/fr/LC_MESSAGES/django.po | 318 + .../auth/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../auth/locale/fy/LC_MESSAGES/django.po | 226 + .../auth/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 3572 bytes .../auth/locale/ga/LC_MESSAGES/django.po | 298 + .../auth/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 8743 bytes .../auth/locale/gd/LC_MESSAGES/django.po | 337 + .../auth/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 4022 bytes .../auth/locale/gl/LC_MESSAGES/django.po | 293 + .../auth/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 8606 bytes .../auth/locale/he/LC_MESSAGES/django.po | 303 + .../auth/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 5364 bytes .../auth/locale/hi/LC_MESSAGES/django.po | 290 + .../auth/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 5894 bytes .../auth/locale/hr/LC_MESSAGES/django.po | 306 + .../auth/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 7974 bytes .../auth/locale/hsb/LC_MESSAGES/django.po | 315 + .../auth/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 7655 bytes .../auth/locale/hu/LC_MESSAGES/django.po | 308 + .../auth/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 8001 bytes .../auth/locale/hy/LC_MESSAGES/django.po | 295 + .../auth/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 7626 bytes .../auth/locale/ia/LC_MESSAGES/django.po | 310 + .../auth/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 7170 bytes .../auth/locale/id/LC_MESSAGES/django.po | 303 + .../auth/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../auth/locale/io/LC_MESSAGES/django.po | 226 + .../auth/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 7509 bytes .../auth/locale/is/LC_MESSAGES/django.po | 307 + .../auth/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 7608 bytes .../auth/locale/it/LC_MESSAGES/django.po | 317 + .../auth/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 8085 bytes .../auth/locale/ja/LC_MESSAGES/django.po | 302 + .../auth/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 10625 bytes .../auth/locale/ka/LC_MESSAGES/django.po | 300 + .../auth/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 2982 bytes .../auth/locale/kab/LC_MESSAGES/django.po | 287 + .../auth/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 3542 bytes .../auth/locale/kk/LC_MESSAGES/django.po | 285 + .../auth/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 2609 bytes .../auth/locale/km/LC_MESSAGES/django.po | 281 + .../auth/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 4024 bytes .../auth/locale/kn/LC_MESSAGES/django.po | 285 + .../auth/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 7607 bytes .../auth/locale/ko/LC_MESSAGES/django.po | 309 + .../auth/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 8924 bytes .../auth/locale/ky/LC_MESSAGES/django.po | 299 + .../auth/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../auth/locale/lb/LC_MESSAGES/django.po | 226 + .../auth/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 8146 bytes .../auth/locale/lt/LC_MESSAGES/django.po | 320 + .../auth/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 7631 bytes .../auth/locale/lv/LC_MESSAGES/django.po | 309 + .../auth/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 9235 bytes .../auth/locale/mk/LC_MESSAGES/django.po | 308 + .../auth/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 12611 bytes .../auth/locale/ml/LC_MESSAGES/django.po | 303 + .../auth/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 9403 bytes .../auth/locale/mn/LC_MESSAGES/django.po | 310 + .../auth/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../auth/locale/mr/LC_MESSAGES/django.po | 226 + .../auth/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 7654 bytes .../auth/locale/ms/LC_MESSAGES/django.po | 313 + .../auth/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1026 bytes .../auth/locale/my/LC_MESSAGES/django.po | 282 + .../auth/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 7191 bytes .../auth/locale/nb/LC_MESSAGES/django.po | 301 + .../auth/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 7722 bytes .../auth/locale/ne/LC_MESSAGES/django.po | 286 + .../auth/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 7451 bytes .../auth/locale/nl/LC_MESSAGES/django.po | 314 + .../auth/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 7147 bytes .../auth/locale/nn/LC_MESSAGES/django.po | 301 + .../auth/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 4434 bytes .../auth/locale/os/LC_MESSAGES/django.po | 288 + .../auth/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 3666 bytes .../auth/locale/pa/LC_MESSAGES/django.po | 285 + .../auth/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 7950 bytes .../auth/locale/pl/LC_MESSAGES/django.po | 325 + .../auth/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 7756 bytes .../auth/locale/pt/LC_MESSAGES/django.po | 313 + .../auth/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 7546 bytes .../auth/locale/pt_BR/LC_MESSAGES/django.po | 323 + .../auth/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 7777 bytes .../auth/locale/ro/LC_MESSAGES/django.po | 320 + .../auth/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 10347 bytes .../auth/locale/ru/LC_MESSAGES/django.po | 320 + .../auth/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 7853 bytes .../auth/locale/sk/LC_MESSAGES/django.po | 314 + .../auth/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 7552 bytes .../auth/locale/sl/LC_MESSAGES/django.po | 308 + .../auth/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 7813 bytes .../auth/locale/sq/LC_MESSAGES/django.po | 308 + .../auth/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 9761 bytes .../auth/locale/sr/LC_MESSAGES/django.po | 313 + .../auth/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 3191 bytes .../auth/locale/sr_Latn/LC_MESSAGES/django.po | 297 + .../auth/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 7416 bytes .../auth/locale/sv/LC_MESSAGES/django.po | 313 + .../auth/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 5029 bytes .../auth/locale/sw/LC_MESSAGES/django.po | 287 + .../auth/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 2679 bytes .../auth/locale/ta/LC_MESSAGES/django.po | 283 + .../auth/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 2955 bytes .../auth/locale/te/LC_MESSAGES/django.po | 285 + .../auth/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 7932 bytes .../auth/locale/tg/LC_MESSAGES/django.po | 299 + .../auth/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 6013 bytes .../auth/locale/th/LC_MESSAGES/django.po | 282 + .../auth/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 7343 bytes .../auth/locale/tk/LC_MESSAGES/django.po | 303 + .../auth/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 7506 bytes .../auth/locale/tr/LC_MESSAGES/django.po | 313 + .../auth/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1371 bytes .../auth/locale/tt/LC_MESSAGES/django.po | 281 + .../auth/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../auth/locale/udm/LC_MESSAGES/django.po | 226 + .../auth/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 10077 bytes .../auth/locale/uk/LC_MESSAGES/django.po | 323 + .../auth/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 698 bytes .../auth/locale/ur/LC_MESSAGES/django.po | 282 + .../auth/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 2549 bytes .../auth/locale/uz/LC_MESSAGES/django.po | 287 + .../auth/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 7892 bytes .../auth/locale/vi/LC_MESSAGES/django.po | 305 + .../auth/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6907 bytes .../auth/locale/zh_Hans/LC_MESSAGES/django.po | 304 + .../auth/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 6728 bytes .../auth/locale/zh_Hant/LC_MESSAGES/django.po | 291 + .../contrib/auth/management/__init__.py | 170 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3948 bytes .../auth/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 213 bytes .../changepassword.cpython-310.pyc | Bin 0 -> 2510 bytes .../createsuperuser.cpython-310.pyc | Bin 0 -> 7333 bytes .../management/commands/changepassword.py | 81 + .../management/commands/createsuperuser.py | 296 + .../django/contrib/auth/middleware.py | 128 + .../contrib/auth/migrations/0001_initial.py | 205 + .../0002_alter_permission_name_max_length.py | 16 + .../0003_alter_user_email_max_length.py | 18 + .../0004_alter_user_username_opts.py | 28 + .../0005_alter_user_last_login_null.py | 18 + .../0006_require_contenttypes_0002.py | 14 + ...007_alter_validators_add_error_messages.py | 27 + .../0008_alter_user_username_max_length.py | 27 + .../0009_alter_user_last_name_max_length.py | 18 + .../0010_alter_group_name_max_length.py | 16 + .../0011_update_proxy_permissions.py | 76 + .../0012_alter_user_first_name_max_length.py | 18 + .../contrib/auth/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 3142 bytes ...permission_name_max_length.cpython-310.pyc | Bin 0 -> 662 bytes ...lter_user_email_max_length.cpython-310.pyc | Bin 0 -> 708 bytes ...4_alter_user_username_opts.cpython-310.pyc | Bin 0 -> 950 bytes ...alter_user_last_login_null.cpython-310.pyc | Bin 0 -> 693 bytes ..._require_contenttypes_0002.cpython-310.pyc | Bin 0 -> 564 bytes ...idators_add_error_messages.cpython-310.pyc | Bin 0 -> 959 bytes ...r_user_username_max_length.cpython-310.pyc | Bin 0 -> 965 bytes ..._user_last_name_max_length.cpython-310.pyc | Bin 0 -> 709 bytes ...lter_group_name_max_length.cpython-310.pyc | Bin 0 -> 687 bytes ...1_update_proxy_permissions.cpython-310.pyc | Bin 0 -> 2727 bytes ...user_first_name_max_length.cpython-310.pyc | Bin 0 -> 706 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 204 bytes .../django/contrib/auth/mixins.py | 135 + .../django/contrib/auth/models.py | 494 + .../contrib/auth/password_validation.py | 266 + .../django/contrib/auth/signals.py | 5 + .../auth/widgets/read_only_password_hash.html | 5 + .../registration/password_reset_subject.txt | 3 + .../django/contrib/auth/tokens.py | 111 + .../site-packages/django/contrib/auth/urls.py | 36 + .../django/contrib/auth/validators.py | 25 + .../django/contrib/auth/views.py | 384 + .../django/contrib/contenttypes/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 201 bytes .../__pycache__/admin.cpython-310.pyc | Bin 0 -> 3826 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 1225 bytes .../__pycache__/checks.cpython-310.pyc | Bin 0 -> 1602 bytes .../__pycache__/fields.cpython-310.pyc | Bin 0 -> 23038 bytes .../__pycache__/forms.cpython-310.pyc | Bin 0 -> 3272 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 6124 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 2042 bytes .../django/contrib/contenttypes/admin.py | 143 + .../django/contrib/contenttypes/apps.py | 22 + .../django/contrib/contenttypes/checks.py | 46 + .../django/contrib/contenttypes/fields.py | 763 ++ .../django/contrib/contenttypes/forms.py | 133 + .../locale/af/LC_MESSAGES/django.mo | Bin 0 -> 1070 bytes .../locale/af/LC_MESSAGES/django.po | 42 + .../locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 1271 bytes .../locale/ar/LC_MESSAGES/django.po | 46 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 1233 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 43 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 643 bytes .../locale/ast/LC_MESSAGES/django.po | 42 + .../locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1065 bytes .../locale/az/LC_MESSAGES/django.po | 44 + .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1353 bytes .../locale/be/LC_MESSAGES/django.po | 45 + .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1225 bytes .../locale/bg/LC_MESSAGES/django.po | 46 + .../locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1201 bytes .../locale/bn/LC_MESSAGES/django.po | 43 + .../locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1419 bytes .../locale/br/LC_MESSAGES/django.po | 45 + .../locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 700 bytes .../locale/bs/LC_MESSAGES/django.po | 43 + .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1095 bytes .../locale/ca/LC_MESSAGES/django.po | 44 + .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1108 bytes .../locale/cs/LC_MESSAGES/django.po | 44 + .../locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1159 bytes .../locale/cy/LC_MESSAGES/django.po | 43 + .../locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1038 bytes .../locale/da/LC_MESSAGES/django.po | 43 + .../locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1055 bytes .../locale/de/LC_MESSAGES/django.po | 42 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../locale/dsb/LC_MESSAGES/django.po | 43 + .../locale/el/LC_MESSAGES/django.mo | Bin 0 -> 1286 bytes .../locale/el/LC_MESSAGES/django.po | 45 + .../locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../locale/en/LC_MESSAGES/django.po | 45 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 41 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1053 bytes .../locale/en_GB/LC_MESSAGES/django.po | 43 + .../locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1087 bytes .../locale/eo/LC_MESSAGES/django.po | 42 + .../locale/es/LC_MESSAGES/django.mo | Bin 0 -> 1096 bytes .../locale/es/LC_MESSAGES/django.po | 46 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 1084 bytes .../locale/es_AR/LC_MESSAGES/django.po | 43 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1158 bytes .../locale/es_CO/LC_MESSAGES/django.po | 43 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 840 bytes .../locale/es_MX/LC_MESSAGES/django.po | 44 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 1152 bytes .../locale/es_VE/LC_MESSAGES/django.po | 44 + .../locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1028 bytes .../locale/et/LC_MESSAGES/django.po | 45 + .../locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1077 bytes .../locale/eu/LC_MESSAGES/django.po | 43 + .../locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 1130 bytes .../locale/fa/LC_MESSAGES/django.po | 45 + .../locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1036 bytes .../locale/fi/LC_MESSAGES/django.po | 44 + .../locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 1078 bytes .../locale/fr/LC_MESSAGES/django.po | 43 + .../locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../locale/fy/LC_MESSAGES/django.po | 41 + .../locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1097 bytes .../locale/ga/LC_MESSAGES/django.po | 44 + .../locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 1154 bytes .../locale/gd/LC_MESSAGES/django.po | 45 + .../locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1072 bytes .../locale/gl/LC_MESSAGES/django.po | 44 + .../locale/he/LC_MESSAGES/django.mo | Bin 0 -> 1219 bytes .../locale/he/LC_MESSAGES/django.po | 43 + .../locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1321 bytes .../locale/hi/LC_MESSAGES/django.po | 42 + .../locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1167 bytes .../locale/hr/LC_MESSAGES/django.po | 45 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 1106 bytes .../locale/hsb/LC_MESSAGES/django.po | 43 + .../locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1102 bytes .../locale/hu/LC_MESSAGES/django.po | 46 + .../locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 1290 bytes .../locale/hy/LC_MESSAGES/django.po | 41 + .../locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1079 bytes .../locale/ia/LC_MESSAGES/django.po | 42 + .../locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1031 bytes .../locale/id/LC_MESSAGES/django.po | 46 + .../locale/io/LC_MESSAGES/django.mo | Bin 0 -> 1051 bytes .../locale/io/LC_MESSAGES/django.po | 41 + .../locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1049 bytes .../locale/is/LC_MESSAGES/django.po | 44 + .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1075 bytes .../locale/it/LC_MESSAGES/django.po | 46 + .../locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 1211 bytes .../locale/ja/LC_MESSAGES/django.po | 47 + .../locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1429 bytes .../locale/ka/LC_MESSAGES/django.po | 43 + .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 627 bytes .../locale/kk/LC_MESSAGES/django.po | 41 + .../locale/km/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes .../locale/km/LC_MESSAGES/django.po | 41 + .../locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 714 bytes .../locale/kn/LC_MESSAGES/django.po | 42 + .../locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1089 bytes .../locale/ko/LC_MESSAGES/django.po | 43 + .../locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 1182 bytes .../locale/ky/LC_MESSAGES/django.po | 42 + .../locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../locale/lb/LC_MESSAGES/django.po | 41 + .../locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 1215 bytes .../locale/lt/LC_MESSAGES/django.po | 46 + .../locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 1065 bytes .../locale/lv/LC_MESSAGES/django.po | 45 + .../locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 1258 bytes .../locale/mk/LC_MESSAGES/django.po | 44 + .../locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1378 bytes .../locale/ml/LC_MESSAGES/django.po | 43 + .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1225 bytes .../locale/mn/LC_MESSAGES/django.po | 46 + .../locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../locale/mr/LC_MESSAGES/django.po | 41 + .../locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 1035 bytes .../locale/ms/LC_MESSAGES/django.po | 41 + .../locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1554 bytes .../locale/my/LC_MESSAGES/django.po | 42 + .../locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1031 bytes .../locale/nb/LC_MESSAGES/django.po | 46 + .../locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1344 bytes .../locale/ne/LC_MESSAGES/django.po | 41 + .../locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1040 bytes .../locale/nl/LC_MESSAGES/django.po | 44 + .../locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1040 bytes .../locale/nn/LC_MESSAGES/django.po | 44 + .../locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1116 bytes .../locale/os/LC_MESSAGES/django.po | 42 + .../locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 697 bytes .../locale/pa/LC_MESSAGES/django.po | 42 + .../locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 1208 bytes .../locale/pl/LC_MESSAGES/django.po | 47 + .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 1125 bytes .../locale/pt/LC_MESSAGES/django.po | 44 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1117 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 46 + .../locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1142 bytes .../locale/ro/LC_MESSAGES/django.po | 45 + .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1345 bytes .../locale/ru/LC_MESSAGES/django.po | 47 + .../locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 1082 bytes .../locale/sk/LC_MESSAGES/django.po | 45 + .../locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../locale/sl/LC_MESSAGES/django.po | 45 + .../locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1066 bytes .../locale/sq/LC_MESSAGES/django.po | 43 + .../locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 1204 bytes .../locale/sr/LC_MESSAGES/django.po | 46 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1102 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 45 + .../locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1066 bytes .../locale/sv/LC_MESSAGES/django.po | 45 + .../locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 563 bytes .../locale/sw/LC_MESSAGES/django.po | 41 + .../locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes .../locale/ta/LC_MESSAGES/django.po | 41 + .../locale/te/LC_MESSAGES/django.mo | Bin 0 -> 690 bytes .../locale/te/LC_MESSAGES/django.po | 41 + .../locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 864 bytes .../locale/tg/LC_MESSAGES/django.po | 41 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1186 bytes .../locale/th/LC_MESSAGES/django.po | 42 + .../locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 1068 bytes .../locale/tk/LC_MESSAGES/django.po | 42 + .../locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 1057 bytes .../locale/tr/LC_MESSAGES/django.po | 45 + .../locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 659 bytes .../locale/tt/LC_MESSAGES/django.po | 41 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../locale/udm/LC_MESSAGES/django.po | 41 + .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1404 bytes .../locale/uk/LC_MESSAGES/django.po | 49 + .../locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 671 bytes .../locale/ur/LC_MESSAGES/django.po | 41 + .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1155 bytes .../locale/vi/LC_MESSAGES/django.po | 45 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1015 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 46 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1046 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 44 + .../contenttypes/management/__init__.py | 145 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 4057 bytes .../management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 221 bytes .../remove_stale_contenttypes.cpython-310.pyc | Bin 0 -> 3661 bytes .../commands/remove_stale_contenttypes.py | 110 + .../contenttypes/migrations/0001_initial.py | 46 + .../0002_remove_content_type_name.py | 42 + .../contenttypes/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1199 bytes ...2_remove_content_type_name.cpython-310.pyc | Bin 0 -> 1253 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 212 bytes .../django/contrib/contenttypes/models.py | 182 + .../django/contrib/contenttypes/views.py | 88 + .../django/contrib/flatpages/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../__pycache__/admin.cpython-310.pyc | Bin 0 -> 917 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 600 bytes .../__pycache__/forms.cpython-310.pyc | Bin 0 -> 2718 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 917 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 2153 bytes .../__pycache__/sitemaps.cpython-310.pyc | Bin 0 -> 945 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 394 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 1959 bytes .../django/contrib/flatpages/admin.py | 22 + .../django/contrib/flatpages/apps.py | 8 + .../django/contrib/flatpages/forms.py | 74 + .../flatpages/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 2297 bytes .../flatpages/locale/af/LC_MESSAGES/django.po | 89 + .../flatpages/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 2636 bytes .../flatpages/locale/ar/LC_MESSAGES/django.po | 91 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 2637 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 87 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 924 bytes .../locale/ast/LC_MESSAGES/django.po | 80 + .../flatpages/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 2373 bytes .../flatpages/locale/az/LC_MESSAGES/django.po | 93 + .../flatpages/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 2978 bytes .../flatpages/locale/be/LC_MESSAGES/django.po | 92 + .../flatpages/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 2802 bytes .../flatpages/locale/bg/LC_MESSAGES/django.po | 92 + .../flatpages/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 2988 bytes .../flatpages/locale/bn/LC_MESSAGES/django.po | 83 + .../flatpages/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 2433 bytes .../flatpages/locale/br/LC_MESSAGES/django.po | 95 + .../flatpages/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1782 bytes .../flatpages/locale/bs/LC_MESSAGES/django.po | 88 + .../flatpages/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2237 bytes .../flatpages/locale/ca/LC_MESSAGES/django.po | 93 + .../flatpages/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 2340 bytes .../flatpages/locale/cs/LC_MESSAGES/django.po | 89 + .../flatpages/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 2163 bytes .../flatpages/locale/cy/LC_MESSAGES/django.po | 88 + .../flatpages/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 2277 bytes .../flatpages/locale/da/LC_MESSAGES/django.po | 92 + .../flatpages/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 2373 bytes .../flatpages/locale/de/LC_MESSAGES/django.po | 92 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 2391 bytes .../locale/dsb/LC_MESSAGES/django.po | 90 + .../flatpages/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 2864 bytes .../flatpages/locale/el/LC_MESSAGES/django.po | 93 + .../flatpages/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../flatpages/locale/en/LC_MESSAGES/django.po | 96 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 2210 bytes .../locale/en_AU/LC_MESSAGES/django.po | 88 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1989 bytes .../locale/en_GB/LC_MESSAGES/django.po | 85 + .../flatpages/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 2032 bytes .../flatpages/locale/eo/LC_MESSAGES/django.po | 89 + .../flatpages/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2258 bytes .../flatpages/locale/es/LC_MESSAGES/django.po | 93 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 2275 bytes .../locale/es_AR/LC_MESSAGES/django.po | 89 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 2140 bytes .../locale/es_CO/LC_MESSAGES/django.po | 86 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 2062 bytes .../locale/es_MX/LC_MESSAGES/django.po | 84 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 2187 bytes .../locale/es_VE/LC_MESSAGES/django.po | 85 + .../flatpages/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 2233 bytes .../flatpages/locale/et/LC_MESSAGES/django.po | 89 + .../flatpages/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 2244 bytes .../flatpages/locale/eu/LC_MESSAGES/django.po | 90 + .../flatpages/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 2612 bytes .../flatpages/locale/fa/LC_MESSAGES/django.po | 92 + .../flatpages/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 2256 bytes .../flatpages/locale/fi/LC_MESSAGES/django.po | 92 + .../flatpages/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 2430 bytes .../flatpages/locale/fr/LC_MESSAGES/django.po | 93 + .../flatpages/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../flatpages/locale/fy/LC_MESSAGES/django.po | 74 + .../flatpages/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 2191 bytes .../flatpages/locale/ga/LC_MESSAGES/django.po | 87 + .../flatpages/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 2469 bytes .../flatpages/locale/gd/LC_MESSAGES/django.po | 95 + .../flatpages/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 2039 bytes .../flatpages/locale/gl/LC_MESSAGES/django.po | 86 + .../flatpages/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 2517 bytes .../flatpages/locale/he/LC_MESSAGES/django.po | 87 + .../flatpages/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 2770 bytes .../flatpages/locale/hi/LC_MESSAGES/django.po | 81 + .../flatpages/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 2188 bytes .../flatpages/locale/hr/LC_MESSAGES/django.po | 88 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 2361 bytes .../locale/hsb/LC_MESSAGES/django.po | 89 + .../flatpages/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 2363 bytes .../flatpages/locale/hu/LC_MESSAGES/django.po | 94 + .../flatpages/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 2536 bytes .../flatpages/locale/hy/LC_MESSAGES/django.po | 84 + .../flatpages/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 500 bytes .../flatpages/locale/ia/LC_MESSAGES/django.po | 77 + .../flatpages/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 2222 bytes .../flatpages/locale/id/LC_MESSAGES/django.po | 90 + .../flatpages/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../flatpages/locale/io/LC_MESSAGES/django.po | 74 + .../flatpages/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 2229 bytes .../flatpages/locale/is/LC_MESSAGES/django.po | 87 + .../flatpages/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 2209 bytes .../flatpages/locale/it/LC_MESSAGES/django.po | 92 + .../flatpages/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2469 bytes .../flatpages/locale/ja/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 3022 bytes .../flatpages/locale/ka/LC_MESSAGES/django.po | 88 + .../flatpages/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 2438 bytes .../flatpages/locale/kk/LC_MESSAGES/django.po | 88 + .../flatpages/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1942 bytes .../flatpages/locale/km/LC_MESSAGES/django.po | 80 + .../flatpages/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1902 bytes .../flatpages/locale/kn/LC_MESSAGES/django.po | 82 + .../flatpages/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 2304 bytes .../flatpages/locale/ko/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 2667 bytes .../flatpages/locale/ky/LC_MESSAGES/django.po | 89 + .../flatpages/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 502 bytes .../flatpages/locale/lb/LC_MESSAGES/django.po | 77 + .../flatpages/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 2506 bytes .../flatpages/locale/lt/LC_MESSAGES/django.po | 94 + .../flatpages/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 2359 bytes .../flatpages/locale/lv/LC_MESSAGES/django.po | 93 + .../flatpages/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 2699 bytes .../flatpages/locale/mk/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 3549 bytes .../flatpages/locale/ml/LC_MESSAGES/django.po | 89 + .../flatpages/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2776 bytes .../flatpages/locale/mn/LC_MESSAGES/django.po | 92 + .../flatpages/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../flatpages/locale/mr/LC_MESSAGES/django.po | 74 + .../flatpages/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 2184 bytes .../flatpages/locale/ms/LC_MESSAGES/django.po | 87 + .../flatpages/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 507 bytes .../flatpages/locale/my/LC_MESSAGES/django.po | 77 + .../flatpages/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 2208 bytes .../flatpages/locale/nb/LC_MESSAGES/django.po | 91 + .../flatpages/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1500 bytes .../flatpages/locale/ne/LC_MESSAGES/django.po | 77 + .../flatpages/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 2231 bytes .../flatpages/locale/nl/LC_MESSAGES/django.po | 92 + .../flatpages/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 2256 bytes .../flatpages/locale/nn/LC_MESSAGES/django.po | 90 + .../flatpages/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 2329 bytes .../flatpages/locale/os/LC_MESSAGES/django.po | 86 + .../flatpages/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 903 bytes .../flatpages/locale/pa/LC_MESSAGES/django.po | 78 + .../flatpages/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 2448 bytes .../flatpages/locale/pl/LC_MESSAGES/django.po | 96 + .../flatpages/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2115 bytes .../flatpages/locale/pt/LC_MESSAGES/django.po | 87 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2291 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 98 + .../flatpages/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 2337 bytes .../flatpages/locale/ro/LC_MESSAGES/django.po | 96 + .../flatpages/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2934 bytes .../flatpages/locale/ru/LC_MESSAGES/django.po | 95 + .../flatpages/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 2321 bytes .../flatpages/locale/sk/LC_MESSAGES/django.po | 92 + .../flatpages/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 2173 bytes .../flatpages/locale/sl/LC_MESSAGES/django.po | 88 + .../flatpages/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 2328 bytes .../flatpages/locale/sq/LC_MESSAGES/django.po | 89 + .../flatpages/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 2770 bytes .../flatpages/locale/sr/LC_MESSAGES/django.po | 92 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 2328 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 93 + .../flatpages/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 2288 bytes .../flatpages/locale/sv/LC_MESSAGES/django.po | 90 + .../flatpages/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1537 bytes .../flatpages/locale/sw/LC_MESSAGES/django.po | 83 + .../flatpages/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1945 bytes .../flatpages/locale/ta/LC_MESSAGES/django.po | 80 + .../flatpages/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1238 bytes .../flatpages/locale/te/LC_MESSAGES/django.po | 79 + .../flatpages/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 2064 bytes .../flatpages/locale/tg/LC_MESSAGES/django.po | 86 + .../flatpages/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 2698 bytes .../flatpages/locale/th/LC_MESSAGES/django.po | 80 + .../flatpages/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../flatpages/locale/tk/LC_MESSAGES/django.po | 83 + .../flatpages/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 2290 bytes .../flatpages/locale/tr/LC_MESSAGES/django.po | 94 + .../flatpages/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 2007 bytes .../flatpages/locale/tt/LC_MESSAGES/django.po | 84 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 490 bytes .../locale/udm/LC_MESSAGES/django.po | 77 + .../flatpages/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 3002 bytes .../flatpages/locale/uk/LC_MESSAGES/django.po | 99 + .../flatpages/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1976 bytes .../flatpages/locale/ur/LC_MESSAGES/django.po | 84 + .../flatpages/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1035 bytes .../flatpages/locale/vi/LC_MESSAGES/django.po | 82 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 2124 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 89 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2200 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 87 + .../django/contrib/flatpages/middleware.py | 20 + .../flatpages/migrations/0001_initial.py | 69 + .../contrib/flatpages/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1539 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 209 bytes .../django/contrib/flatpages/models.py | 49 + .../django/contrib/flatpages/sitemaps.py | 14 + .../flatpages/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 211 bytes .../__pycache__/flatpages.cpython-310.pyc | Bin 0 -> 2951 bytes .../flatpages/templatetags/flatpages.py | 101 + .../django/contrib/flatpages/urls.py | 6 + .../django/contrib/flatpages/views.py | 70 + .../django/contrib/gis/__init__.py | 0 .../gis/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 192 bytes .../gis/__pycache__/apps.cpython-310.pyc | Bin 0 -> 839 bytes .../gis/__pycache__/feeds.cpython-310.pyc | Bin 0 -> 5350 bytes .../gis/__pycache__/geometry.cpython-310.pyc | Bin 0 -> 574 bytes .../gis/__pycache__/measure.cpython-310.pyc | Bin 0 -> 9482 bytes .../gis/__pycache__/ptr.cpython-310.pyc | Bin 0 -> 1352 bytes .../gis/__pycache__/shortcuts.cpython-310.pyc | Bin 0 -> 1380 bytes .../gis/__pycache__/views.cpython-310.pyc | Bin 0 -> 849 bytes .../django/contrib/gis/admin/__init__.py | 34 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 738 bytes .../admin/__pycache__/options.cpython-310.pyc | Bin 0 -> 5729 bytes .../admin/__pycache__/widgets.cpython-310.pyc | Bin 0 -> 2910 bytes .../django/contrib/gis/admin/options.py | 180 + .../django/contrib/gis/admin/widgets.py | 124 + .../site-packages/django/contrib/gis/apps.py | 14 + .../django/contrib/gis/db/__init__.py | 0 .../db/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../contrib/gis/db/backends/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 204 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 1219 bytes .../contrib/gis/db/backends/base/__init__.py | 0 .../base/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 209 bytes .../base/__pycache__/adapter.cpython-310.pyc | Bin 0 -> 1229 bytes .../base/__pycache__/features.cpython-310.pyc | Bin 0 -> 3473 bytes .../base/__pycache__/models.cpython-310.pyc | Bin 0 -> 4388 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 6216 bytes .../contrib/gis/db/backends/base/adapter.py | 26 + .../contrib/gis/db/backends/base/features.py | 111 + .../contrib/gis/db/backends/base/models.py | 140 + .../gis/db/backends/base/operations.py | 206 + .../contrib/gis/db/backends/mysql/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 210 bytes .../mysql/__pycache__/base.cpython-310.pyc | Bin 0 -> 766 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 1753 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 1531 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 4110 bytes .../mysql/__pycache__/schema.cpython-310.pyc | Bin 0 -> 3150 bytes .../contrib/gis/db/backends/mysql/base.py | 14 + .../contrib/gis/db/backends/mysql/features.py | 44 + .../gis/db/backends/mysql/introspection.py | 37 + .../gis/db/backends/mysql/operations.py | 127 + .../contrib/gis/db/backends/mysql/schema.py | 83 + .../gis/db/backends/oracle/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 211 bytes .../__pycache__/adapter.cpython-310.pyc | Bin 0 -> 2581 bytes .../oracle/__pycache__/base.cpython-310.pyc | Bin 0 -> 772 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 843 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 1572 bytes .../oracle/__pycache__/models.cpython-310.pyc | Bin 0 -> 2728 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 8207 bytes .../oracle/__pycache__/schema.cpython-310.pyc | Bin 0 -> 3910 bytes .../contrib/gis/db/backends/oracle/adapter.py | 62 + .../contrib/gis/db/backends/oracle/base.py | 14 + .../gis/db/backends/oracle/features.py | 14 + .../gis/db/backends/oracle/introspection.py | 47 + .../contrib/gis/db/backends/oracle/models.py | 64 + .../gis/db/backends/oracle/operations.py | 243 + .../contrib/gis/db/backends/oracle/schema.py | 116 + .../gis/db/backends/postgis/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 212 bytes .../__pycache__/adapter.cpython-310.pyc | Bin 0 -> 2598 bytes .../postgis/__pycache__/base.cpython-310.pyc | Bin 0 -> 1352 bytes .../postgis/__pycache__/const.cpython-310.pyc | Bin 0 -> 741 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 733 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 2593 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 2649 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 13169 bytes .../__pycache__/pgraster.cpython-310.pyc | Bin 0 -> 2608 bytes .../__pycache__/schema.cpython-310.pyc | Bin 0 -> 2532 bytes .../gis/db/backends/postgis/adapter.py | 71 + .../contrib/gis/db/backends/postgis/base.py | 26 + .../contrib/gis/db/backends/postgis/const.py | 62 + .../gis/db/backends/postgis/features.py | 13 + .../gis/db/backends/postgis/introspection.py | 71 + .../contrib/gis/db/backends/postgis/models.py | 72 + .../gis/db/backends/postgis/operations.py | 417 + .../gis/db/backends/postgis/pgraster.py | 153 + .../contrib/gis/db/backends/postgis/schema.py | 76 + .../gis/db/backends/spatialite/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 215 bytes .../__pycache__/adapter.cpython-310.pyc | Bin 0 -> 766 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 2742 bytes .../__pycache__/client.cpython-310.pyc | Bin 0 -> 485 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 1266 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 2424 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 2613 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 8357 bytes .../__pycache__/schema.cpython-310.pyc | Bin 0 -> 4779 bytes .../gis/db/backends/spatialite/adapter.py | 10 + .../gis/db/backends/spatialite/base.py | 79 + .../gis/db/backends/spatialite/client.py | 5 + .../gis/db/backends/spatialite/features.py | 26 + .../db/backends/spatialite/introspection.py | 82 + .../gis/db/backends/spatialite/models.py | 70 + .../gis/db/backends/spatialite/operations.py | 225 + .../gis/db/backends/spatialite/schema.py | 191 + .../django/contrib/gis/db/backends/utils.py | 28 + .../django/contrib/gis/db/models/__init__.py | 30 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 772 bytes .../__pycache__/aggregates.cpython-310.pyc | Bin 0 -> 3410 bytes .../models/__pycache__/fields.cpython-310.pyc | Bin 0 -> 12777 bytes .../__pycache__/functions.cpython-310.pyc | Bin 0 -> 18340 bytes .../__pycache__/lookups.cpython-310.pyc | Bin 0 -> 11770 bytes .../models/__pycache__/proxy.cpython-310.pyc | Bin 0 -> 2461 bytes .../contrib/gis/db/models/aggregates.py | 94 + .../django/contrib/gis/db/models/fields.py | 436 + .../django/contrib/gis/db/models/functions.py | 544 + .../django/contrib/gis/db/models/lookups.py | 395 + .../django/contrib/gis/db/models/proxy.py | 83 + .../contrib/gis/db/models/sql/__init__.py | 6 + .../sql/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 340 bytes .../__pycache__/conversion.cpython-310.pyc | Bin 0 -> 2905 bytes .../contrib/gis/db/models/sql/conversion.py | 73 + .../site-packages/django/contrib/gis/feeds.py | 151 + .../django/contrib/gis/forms/__init__.py | 13 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 562 bytes .../forms/__pycache__/fields.cpython-310.pyc | Bin 0 -> 4126 bytes .../forms/__pycache__/widgets.cpython-310.pyc | Bin 0 -> 4051 bytes .../django/contrib/gis/forms/fields.py | 144 + .../django/contrib/gis/forms/widgets.py | 127 + .../django/contrib/gis/gdal/LICENSE | 28 + .../django/contrib/gis/gdal/__init__.py | 58 + .../gdal/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1960 bytes .../gis/gdal/__pycache__/base.cpython-310.pyc | Bin 0 -> 513 bytes .../__pycache__/datasource.cpython-310.pyc | Bin 0 -> 4213 bytes .../gdal/__pycache__/driver.cpython-310.pyc | Bin 0 -> 2636 bytes .../gdal/__pycache__/envelope.cpython-310.pyc | Bin 0 -> 5859 bytes .../gdal/__pycache__/error.cpython-310.pyc | Bin 0 -> 1555 bytes .../gdal/__pycache__/feature.cpython-310.pyc | Bin 0 -> 4762 bytes .../gdal/__pycache__/field.cpython-310.pyc | Bin 0 -> 7753 bytes .../__pycache__/geometries.cpython-310.pyc | Bin 0 -> 24845 bytes .../gdal/__pycache__/geomtype.cpython-310.pyc | Bin 0 -> 3103 bytes .../gdal/__pycache__/layer.cpython-310.pyc | Bin 0 -> 9320 bytes .../gdal/__pycache__/libgdal.cpython-310.pyc | Bin 0 -> 2856 bytes .../gis/gdal/__pycache__/srs.cpython-310.pyc | Bin 0 -> 13182 bytes .../django/contrib/gis/gdal/base.py | 6 + .../django/contrib/gis/gdal/datasource.py | 126 + .../django/contrib/gis/gdal/driver.py | 103 + .../django/contrib/gis/gdal/envelope.py | 203 + .../django/contrib/gis/gdal/error.py | 61 + .../django/contrib/gis/gdal/feature.py | 120 + .../django/contrib/gis/gdal/field.py | 254 + .../django/contrib/gis/gdal/geometries.py | 743 ++ .../django/contrib/gis/gdal/geomtype.py | 95 + .../django/contrib/gis/gdal/layer.py | 234 + .../django/contrib/gis/gdal/libgdal.py | 140 + .../contrib/gis/gdal/prototypes/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 208 bytes .../prototypes/__pycache__/ds.cpython-310.pyc | Bin 0 -> 3700 bytes .../__pycache__/errcheck.cpython-310.pyc | Bin 0 -> 3857 bytes .../__pycache__/generation.cpython-310.pyc | Bin 0 -> 4539 bytes .../__pycache__/geom.cpython-310.pyc | Bin 0 -> 4096 bytes .../__pycache__/raster.cpython-310.pyc | Bin 0 -> 3800 bytes .../__pycache__/srs.cpython-310.pyc | Bin 0 -> 2853 bytes .../django/contrib/gis/gdal/prototypes/ds.py | 102 + .../contrib/gis/gdal/prototypes/errcheck.py | 141 + .../contrib/gis/gdal/prototypes/generation.py | 177 + .../contrib/gis/gdal/prototypes/geom.py | 139 + .../contrib/gis/gdal/prototypes/raster.py | 177 + .../django/contrib/gis/gdal/prototypes/srs.py | 110 + .../contrib/gis/gdal/raster/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 204 bytes .../raster/__pycache__/band.cpython-310.pyc | Bin 0 -> 7893 bytes .../raster/__pycache__/base.cpython-310.pyc | Bin 0 -> 1848 bytes .../raster/__pycache__/const.cpython-310.pyc | Bin 0 -> 1636 bytes .../raster/__pycache__/source.cpython-310.pyc | Bin 0 -> 13734 bytes .../django/contrib/gis/gdal/raster/band.py | 273 + .../django/contrib/gis/gdal/raster/base.py | 77 + .../django/contrib/gis/gdal/raster/const.py | 87 + .../django/contrib/gis/gdal/raster/source.py | 539 + .../django/contrib/gis/gdal/srs.py | 360 + .../django/contrib/gis/geoip2/__init__.py | 24 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1016 bytes .../geoip2/__pycache__/base.cpython-310.pyc | Bin 0 -> 7422 bytes .../__pycache__/resources.cpython-310.pyc | Bin 0 -> 823 bytes .../django/contrib/gis/geoip2/base.py | 247 + .../django/contrib/gis/geoip2/resources.py | 22 + .../django/contrib/gis/geometry.py | 17 + .../django/contrib/gis/geos/LICENSE | 27 + .../django/contrib/gis/geos/__init__.py | 18 + .../geos/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 954 bytes .../gis/geos/__pycache__/base.cpython-310.pyc | Bin 0 -> 513 bytes .../__pycache__/collections.cpython-310.pyc | Bin 0 -> 4451 bytes .../geos/__pycache__/coordseq.cpython-310.pyc | Bin 0 -> 8794 bytes .../geos/__pycache__/error.cpython-310.pyc | Bin 0 -> 437 bytes .../geos/__pycache__/factory.cpython-310.pyc | Bin 0 -> 1001 bytes .../geos/__pycache__/geometry.cpython-310.pyc | Bin 0 -> 27026 bytes .../gis/geos/__pycache__/io.cpython-310.pyc | Bin 0 -> 1252 bytes .../geos/__pycache__/libgeos.cpython-310.pyc | Bin 0 -> 4073 bytes .../__pycache__/linestring.cpython-310.pyc | Bin 0 -> 5739 bytes .../__pycache__/mutable_list.cpython-310.pyc | Bin 0 -> 10172 bytes .../geos/__pycache__/point.cpython-310.pyc | Bin 0 -> 5257 bytes .../geos/__pycache__/polygon.cpython-310.pyc | Bin 0 -> 6590 bytes .../geos/__pycache__/prepared.cpython-310.pyc | Bin 0 -> 2344 bytes .../django/contrib/gis/geos/base.py | 6 + .../django/contrib/gis/geos/collections.py | 120 + .../django/contrib/gis/geos/coordseq.py | 220 + .../django/contrib/gis/geos/error.py | 3 + .../django/contrib/gis/geos/factory.py | 33 + .../django/contrib/gis/geos/geometry.py | 755 ++ .../django/contrib/gis/geos/io.py | 27 + .../django/contrib/gis/geos/libgeos.py | 174 + .../django/contrib/gis/geos/linestring.py | 193 + .../django/contrib/gis/geos/mutable_list.py | 314 + .../django/contrib/gis/geos/point.py | 162 + .../django/contrib/gis/geos/polygon.py | 190 + .../django/contrib/gis/geos/prepared.py | 51 + .../contrib/gis/geos/prototypes/__init__.py | 65 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1814 bytes .../__pycache__/coordseq.cpython-310.pyc | Bin 0 -> 2951 bytes .../__pycache__/errcheck.cpython-310.pyc | Bin 0 -> 2507 bytes .../__pycache__/geom.cpython-310.pyc | Bin 0 -> 2520 bytes .../prototypes/__pycache__/io.cpython-310.pyc | Bin 0 -> 10278 bytes .../__pycache__/misc.cpython-310.pyc | Bin 0 -> 1304 bytes .../__pycache__/predicates.cpython-310.pyc | Bin 0 -> 1785 bytes .../__pycache__/prepared.cpython-310.pyc | Bin 0 -> 1288 bytes .../__pycache__/threadsafe.cpython-310.pyc | Bin 0 -> 2686 bytes .../__pycache__/topology.cpython-310.pyc | Bin 0 -> 2075 bytes .../contrib/gis/geos/prototypes/coordseq.py | 95 + .../contrib/gis/geos/prototypes/errcheck.py | 95 + .../contrib/gis/geos/prototypes/geom.py | 90 + .../django/contrib/gis/geos/prototypes/io.py | 366 + .../contrib/gis/geos/prototypes/misc.py | 34 + .../contrib/gis/geos/prototypes/predicates.py | 47 + .../contrib/gis/geos/prototypes/prepared.py | 26 + .../contrib/gis/geos/prototypes/threadsafe.py | 77 + .../contrib/gis/geos/prototypes/topology.py | 72 + .../gis/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../gis/locale/af/LC_MESSAGES/django.po | 80 + .../gis/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 2301 bytes .../gis/locale/ar/LC_MESSAGES/django.po | 89 + .../gis/locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 2403 bytes .../gis/locale/ar_DZ/LC_MESSAGES/django.po | 88 + .../gis/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 850 bytes .../gis/locale/ast/LC_MESSAGES/django.po | 85 + .../gis/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1976 bytes .../gis/locale/az/LC_MESSAGES/django.po | 88 + .../gis/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 2445 bytes .../gis/locale/be/LC_MESSAGES/django.po | 90 + .../gis/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 2389 bytes .../gis/locale/bg/LC_MESSAGES/django.po | 90 + .../gis/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1070 bytes .../gis/locale/bn/LC_MESSAGES/django.po | 86 + .../gis/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1614 bytes .../gis/locale/br/LC_MESSAGES/django.po | 91 + .../gis/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1308 bytes .../gis/locale/bs/LC_MESSAGES/django.po | 88 + .../gis/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2007 bytes .../gis/locale/ca/LC_MESSAGES/django.po | 94 + .../gis/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 2071 bytes .../gis/locale/cs/LC_MESSAGES/django.po | 91 + .../gis/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1430 bytes .../gis/locale/cy/LC_MESSAGES/django.po | 86 + .../gis/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1894 bytes .../gis/locale/da/LC_MESSAGES/django.po | 88 + .../gis/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1965 bytes .../gis/locale/de/LC_MESSAGES/django.po | 88 + .../gis/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 2071 bytes .../gis/locale/dsb/LC_MESSAGES/django.po | 89 + .../gis/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 2484 bytes .../gis/locale/el/LC_MESSAGES/django.po | 94 + .../gis/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../gis/locale/en/LC_MESSAGES/django.po | 103 + .../gis/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../gis/locale/en_AU/LC_MESSAGES/django.po | 80 + .../gis/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1369 bytes .../gis/locale/en_GB/LC_MESSAGES/django.po | 88 + .../gis/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1960 bytes .../gis/locale/eo/LC_MESSAGES/django.po | 88 + .../gis/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2025 bytes .../gis/locale/es/LC_MESSAGES/django.po | 95 + .../gis/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 2012 bytes .../gis/locale/es_AR/LC_MESSAGES/django.po | 90 + .../gis/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1865 bytes .../gis/locale/es_CO/LC_MESSAGES/django.po | 92 + .../gis/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1441 bytes .../gis/locale/es_MX/LC_MESSAGES/django.po | 87 + .../gis/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../gis/locale/es_VE/LC_MESSAGES/django.po | 80 + .../gis/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1921 bytes .../gis/locale/et/LC_MESSAGES/django.po | 91 + .../gis/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1936 bytes .../gis/locale/eu/LC_MESSAGES/django.po | 87 + .../gis/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 2242 bytes .../gis/locale/fa/LC_MESSAGES/django.po | 90 + .../gis/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1887 bytes .../gis/locale/fi/LC_MESSAGES/django.po | 87 + .../gis/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 2052 bytes .../gis/locale/fr/LC_MESSAGES/django.po | 90 + .../gis/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../gis/locale/fy/LC_MESSAGES/django.po | 80 + .../gis/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1420 bytes .../gis/locale/ga/LC_MESSAGES/django.po | 88 + .../gis/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 2082 bytes .../gis/locale/gd/LC_MESSAGES/django.po | 92 + .../gis/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1421 bytes .../gis/locale/gl/LC_MESSAGES/django.po | 89 + .../gis/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 2190 bytes .../gis/locale/he/LC_MESSAGES/django.po | 86 + .../gis/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1818 bytes .../gis/locale/hi/LC_MESSAGES/django.po | 86 + .../gis/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1549 bytes .../gis/locale/hr/LC_MESSAGES/django.po | 91 + .../gis/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 2045 bytes .../gis/locale/hsb/LC_MESSAGES/django.po | 90 + .../gis/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1940 bytes .../gis/locale/hu/LC_MESSAGES/django.po | 91 + .../gis/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 2535 bytes .../gis/locale/hy/LC_MESSAGES/django.po | 86 + .../gis/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1899 bytes .../gis/locale/ia/LC_MESSAGES/django.po | 89 + .../gis/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1938 bytes .../gis/locale/id/LC_MESSAGES/django.po | 93 + .../gis/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../gis/locale/io/LC_MESSAGES/django.po | 80 + .../gis/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1350 bytes .../gis/locale/is/LC_MESSAGES/django.po | 87 + .../gis/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1976 bytes .../gis/locale/it/LC_MESSAGES/django.po | 94 + .../gis/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2096 bytes .../gis/locale/ja/LC_MESSAGES/django.po | 89 + .../gis/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1991 bytes .../gis/locale/ka/LC_MESSAGES/django.po | 87 + .../gis/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1349 bytes .../gis/locale/kk/LC_MESSAGES/django.po | 85 + .../gis/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../gis/locale/km/LC_MESSAGES/django.po | 80 + .../gis/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../gis/locale/kn/LC_MESSAGES/django.po | 80 + .../gis/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1939 bytes .../gis/locale/ko/LC_MESSAGES/django.po | 91 + .../gis/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 2221 bytes .../gis/locale/ky/LC_MESSAGES/django.po | 86 + .../gis/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../gis/locale/lb/LC_MESSAGES/django.po | 80 + .../gis/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 2113 bytes .../gis/locale/lt/LC_MESSAGES/django.po | 91 + .../gis/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 2025 bytes .../gis/locale/lv/LC_MESSAGES/django.po | 90 + .../gis/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 2620 bytes .../gis/locale/mk/LC_MESSAGES/django.po | 93 + .../gis/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 2049 bytes .../gis/locale/ml/LC_MESSAGES/django.po | 88 + .../gis/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2433 bytes .../gis/locale/mn/LC_MESSAGES/django.po | 93 + .../gis/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../gis/locale/mr/LC_MESSAGES/django.po | 80 + .../gis/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 1887 bytes .../gis/locale/ms/LC_MESSAGES/django.po | 87 + .../gis/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 525 bytes .../gis/locale/my/LC_MESSAGES/django.po | 85 + .../gis/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1879 bytes .../gis/locale/nb/LC_MESSAGES/django.po | 91 + .../gis/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 982 bytes .../gis/locale/ne/LC_MESSAGES/django.po | 84 + .../gis/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1947 bytes .../gis/locale/nl/LC_MESSAGES/django.po | 94 + .../gis/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1888 bytes .../gis/locale/nn/LC_MESSAGES/django.po | 90 + .../gis/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1594 bytes .../gis/locale/os/LC_MESSAGES/django.po | 87 + .../gis/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../gis/locale/pa/LC_MESSAGES/django.po | 86 + .../gis/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 2095 bytes .../gis/locale/pl/LC_MESSAGES/django.po | 95 + .../gis/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2036 bytes .../gis/locale/pt/LC_MESSAGES/django.po | 95 + .../gis/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1976 bytes .../gis/locale/pt_BR/LC_MESSAGES/django.po | 94 + .../gis/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1829 bytes .../gis/locale/ro/LC_MESSAGES/django.po | 92 + .../gis/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2542 bytes .../gis/locale/ru/LC_MESSAGES/django.po | 94 + .../gis/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 2043 bytes .../gis/locale/sk/LC_MESSAGES/django.po | 89 + .../gis/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 2067 bytes .../gis/locale/sl/LC_MESSAGES/django.po | 92 + .../gis/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1708 bytes .../gis/locale/sq/LC_MESSAGES/django.po | 88 + .../gis/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 2454 bytes .../gis/locale/sr/LC_MESSAGES/django.po | 90 + .../gis/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 2044 bytes .../gis/locale/sr_Latn/LC_MESSAGES/django.po | 90 + .../gis/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1987 bytes .../gis/locale/sv/LC_MESSAGES/django.po | 92 + .../gis/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1426 bytes .../gis/locale/sw/LC_MESSAGES/django.po | 87 + .../gis/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../gis/locale/ta/LC_MESSAGES/django.po | 80 + .../gis/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 824 bytes .../gis/locale/te/LC_MESSAGES/django.po | 84 + .../gis/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 611 bytes .../gis/locale/tg/LC_MESSAGES/django.po | 84 + .../gis/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1835 bytes .../gis/locale/th/LC_MESSAGES/django.po | 86 + .../gis/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 1961 bytes .../gis/locale/tr/LC_MESSAGES/django.po | 91 + .../gis/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1470 bytes .../gis/locale/tt/LC_MESSAGES/django.po | 85 + .../gis/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../gis/locale/udm/LC_MESSAGES/django.po | 80 + .../gis/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 2586 bytes .../gis/locale/uk/LC_MESSAGES/django.po | 96 + .../gis/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1410 bytes .../gis/locale/ur/LC_MESSAGES/django.po | 86 + .../gis/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1384 bytes .../gis/locale/vi/LC_MESSAGES/django.po | 87 + .../gis/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1812 bytes .../gis/locale/zh_Hans/LC_MESSAGES/django.po | 93 + .../gis/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1975 bytes .../gis/locale/zh_Hant/LC_MESSAGES/django.po | 89 + .../django/contrib/gis/management/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 203 bytes .../gis/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 212 bytes .../__pycache__/inspectdb.cpython-310.pyc | Bin 0 -> 878 bytes .../__pycache__/ogrinspect.cpython-310.pyc | Bin 0 -> 5211 bytes .../gis/management/commands/inspectdb.py | 18 + .../gis/management/commands/ogrinspect.py | 164 + .../django/contrib/gis/measure.py | 370 + .../site-packages/django/contrib/gis/ptr.py | 41 + .../contrib/gis/serializers/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 204 bytes .../__pycache__/geojson.cpython-310.pyc | Bin 0 -> 2873 bytes .../django/contrib/gis/serializers/geojson.py | 77 + .../django/contrib/gis/shortcuts.py | 40 + .../django/contrib/gis/sitemaps/__init__.py | 4 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 317 bytes .../sitemaps/__pycache__/kml.cpython-310.pyc | Bin 0 -> 2638 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 1956 bytes .../django/contrib/gis/sitemaps/kml.py | 78 + .../django/contrib/gis/sitemaps/views.py | 65 + .../django/contrib/gis/static/gis/css/ol3.css | 31 + .../gis/static/gis/img/draw_line_off.svg | 1 + .../gis/static/gis/img/draw_line_on.svg | 1 + .../gis/static/gis/img/draw_point_off.svg | 1 + .../gis/static/gis/img/draw_point_on.svg | 1 + .../gis/static/gis/img/draw_polygon_off.svg | 1 + .../gis/static/gis/img/draw_polygon_on.svg | 1 + .../contrib/gis/static/gis/js/OLMapWidget.js | 228 + .../gis/templates/gis/admin/openlayers.html | 31 + .../gis/templates/gis/admin/openlayers.js | 176 + .../contrib/gis/templates/gis/admin/osm.html | 2 + .../contrib/gis/templates/gis/admin/osm.js | 2 + .../contrib/gis/templates/gis/kml/base.kml | 6 + .../gis/templates/gis/kml/placemarks.kml | 8 + .../gis/templates/gis/openlayers-osm.html | 12 + .../contrib/gis/templates/gis/openlayers.html | 40 + .../django/contrib/gis/utils/__init__.py | 17 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 685 bytes .../__pycache__/layermapping.cpython-310.pyc | Bin 0 -> 15965 bytes .../utils/__pycache__/ogrinfo.cpython-310.pyc | Bin 0 -> 1714 bytes .../__pycache__/ogrinspect.cpython-310.pyc | Bin 0 -> 7244 bytes .../gis/utils/__pycache__/srs.cpython-310.pyc | Bin 0 -> 2502 bytes .../django/contrib/gis/utils/layermapping.py | 723 + .../django/contrib/gis/utils/ogrinfo.py | 53 + .../django/contrib/gis/utils/ogrinspect.py | 267 + .../django/contrib/gis/utils/srs.py | 78 + .../site-packages/django/contrib/gis/views.py | 22 + .../django/contrib/humanize/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../humanize/__pycache__/apps.cpython-310.pyc | Bin 0 -> 541 bytes .../django/contrib/humanize/apps.py | 7 + .../humanize/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 5097 bytes .../humanize/locale/af/LC_MESSAGES/django.po | 394 + .../humanize/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 7510 bytes .../humanize/locale/ar/LC_MESSAGES/django.po | 449 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 9155 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 555 + .../humanize/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 3468 bytes .../humanize/locale/ast/LC_MESSAGES/django.po | 262 + .../humanize/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 5286 bytes .../humanize/locale/az/LC_MESSAGES/django.po | 397 + .../humanize/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 6653 bytes .../humanize/locale/be/LC_MESSAGES/django.po | 389 + .../humanize/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 4823 bytes .../humanize/locale/bg/LC_MESSAGES/django.po | 332 + .../humanize/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 4026 bytes .../humanize/locale/bn/LC_MESSAGES/django.po | 263 + .../humanize/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 5850 bytes .../humanize/locale/br/LC_MESSAGES/django.po | 517 + .../humanize/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1416 bytes .../humanize/locale/bs/LC_MESSAGES/django.po | 292 + .../humanize/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 4270 bytes .../humanize/locale/ca/LC_MESSAGES/django.po | 332 + .../humanize/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 5479 bytes .../humanize/locale/cs/LC_MESSAGES/django.po | 388 + .../humanize/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 5241 bytes .../humanize/locale/cy/LC_MESSAGES/django.po | 318 + .../humanize/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 4316 bytes .../humanize/locale/da/LC_MESSAGES/django.po | 331 + .../humanize/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 4364 bytes .../humanize/locale/de/LC_MESSAGES/django.po | 330 + .../humanize/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 5588 bytes .../humanize/locale/dsb/LC_MESSAGES/django.po | 387 + .../humanize/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 6740 bytes .../humanize/locale/el/LC_MESSAGES/django.po | 398 + .../humanize/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../humanize/locale/en/LC_MESSAGES/django.po | 378 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 918 bytes .../locale/en_AU/LC_MESSAGES/django.po | 328 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 3461 bytes .../locale/en_GB/LC_MESSAGES/django.po | 263 + .../humanize/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 5386 bytes .../humanize/locale/eo/LC_MESSAGES/django.po | 394 + .../humanize/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 4409 bytes .../humanize/locale/es/LC_MESSAGES/django.po | 336 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 4425 bytes .../locale/es_AR/LC_MESSAGES/django.po | 332 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 4203 bytes .../locale/es_CO/LC_MESSAGES/django.po | 267 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 3939 bytes .../locale/es_MX/LC_MESSAGES/django.po | 264 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 942 bytes .../locale/es_VE/LC_MESSAGES/django.po | 262 + .../humanize/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 4406 bytes .../humanize/locale/et/LC_MESSAGES/django.po | 334 + .../humanize/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 5287 bytes .../humanize/locale/eu/LC_MESSAGES/django.po | 397 + .../humanize/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 5808 bytes .../humanize/locale/fa/LC_MESSAGES/django.po | 400 + .../humanize/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 4425 bytes .../humanize/locale/fi/LC_MESSAGES/django.po | 331 + .../humanize/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 4484 bytes .../humanize/locale/fr/LC_MESSAGES/django.po | 330 + .../humanize/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../humanize/locale/fy/LC_MESSAGES/django.po | 261 + .../humanize/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 5112 bytes .../humanize/locale/ga/LC_MESSAGES/django.po | 516 + .../humanize/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 7232 bytes .../humanize/locale/gd/LC_MESSAGES/django.po | 476 + .../humanize/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 3474 bytes .../humanize/locale/gl/LC_MESSAGES/django.po | 265 + .../humanize/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 5875 bytes .../humanize/locale/he/LC_MESSAGES/django.po | 389 + .../humanize/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 4131 bytes .../humanize/locale/hi/LC_MESSAGES/django.po | 263 + .../humanize/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1274 bytes .../humanize/locale/hr/LC_MESSAGES/django.po | 291 + .../humanize/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 5679 bytes .../humanize/locale/hsb/LC_MESSAGES/django.po | 387 + .../humanize/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 5307 bytes .../humanize/locale/hu/LC_MESSAGES/django.po | 397 + .../humanize/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 1488 bytes .../humanize/locale/hy/LC_MESSAGES/django.po | 395 + .../humanize/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 4167 bytes .../humanize/locale/ia/LC_MESSAGES/django.po | 262 + .../humanize/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 3885 bytes .../humanize/locale/id/LC_MESSAGES/django.po | 304 + .../humanize/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../humanize/locale/io/LC_MESSAGES/django.po | 261 + .../humanize/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 3805 bytes .../humanize/locale/is/LC_MESSAGES/django.po | 399 + .../humanize/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 4653 bytes .../humanize/locale/it/LC_MESSAGES/django.po | 338 + .../humanize/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 3907 bytes .../humanize/locale/ja/LC_MESSAGES/django.po | 301 + .../humanize/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 4878 bytes .../humanize/locale/ka/LC_MESSAGES/django.po | 395 + .../humanize/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 2113 bytes .../humanize/locale/kk/LC_MESSAGES/django.po | 394 + .../humanize/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../humanize/locale/km/LC_MESSAGES/django.po | 233 + .../humanize/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../humanize/locale/kn/LC_MESSAGES/django.po | 233 + .../humanize/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 4817 bytes .../humanize/locale/ko/LC_MESSAGES/django.po | 358 + .../humanize/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 4177 bytes .../humanize/locale/ky/LC_MESSAGES/django.po | 299 + .../humanize/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../humanize/locale/lb/LC_MESSAGES/django.po | 261 + .../humanize/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 7333 bytes .../humanize/locale/lt/LC_MESSAGES/django.po | 477 + .../humanize/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 5033 bytes .../humanize/locale/lv/LC_MESSAGES/django.po | 363 + .../humanize/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 4761 bytes .../humanize/locale/mk/LC_MESSAGES/django.po | 262 + .../humanize/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 4655 bytes .../humanize/locale/ml/LC_MESSAGES/django.po | 396 + .../humanize/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 6020 bytes .../humanize/locale/mn/LC_MESSAGES/django.po | 398 + .../humanize/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../humanize/locale/mr/LC_MESSAGES/django.po | 261 + .../humanize/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 842 bytes .../humanize/locale/ms/LC_MESSAGES/django.po | 353 + .../humanize/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 3479 bytes .../humanize/locale/my/LC_MESSAGES/django.po | 234 + .../humanize/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 5317 bytes .../humanize/locale/nb/LC_MESSAGES/django.po | 397 + .../humanize/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 3590 bytes .../humanize/locale/ne/LC_MESSAGES/django.po | 395 + .../humanize/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 5262 bytes .../humanize/locale/nl/LC_MESSAGES/django.po | 398 + .../humanize/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 4327 bytes .../humanize/locale/nn/LC_MESSAGES/django.po | 330 + .../humanize/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 3902 bytes .../humanize/locale/os/LC_MESSAGES/django.po | 262 + .../humanize/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1569 bytes .../humanize/locale/pa/LC_MESSAGES/django.po | 263 + .../humanize/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 5596 bytes .../humanize/locale/pl/LC_MESSAGES/django.po | 394 + .../humanize/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 5408 bytes .../humanize/locale/pt/LC_MESSAGES/django.po | 398 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 5427 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 400 + .../humanize/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 6188 bytes .../humanize/locale/ro/LC_MESSAGES/django.po | 440 + .../humanize/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 8569 bytes .../humanize/locale/ru/LC_MESSAGES/django.po | 484 + .../humanize/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 6931 bytes .../humanize/locale/sk/LC_MESSAGES/django.po | 477 + .../humanize/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 5430 bytes .../humanize/locale/sl/LC_MESSAGES/django.po | 323 + .../humanize/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 5280 bytes .../humanize/locale/sq/LC_MESSAGES/django.po | 395 + .../humanize/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 5415 bytes .../humanize/locale/sr/LC_MESSAGES/django.po | 359 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1017 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 358 + .../humanize/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 4066 bytes .../humanize/locale/sv/LC_MESSAGES/django.po | 333 + .../humanize/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 4146 bytes .../humanize/locale/sw/LC_MESSAGES/django.po | 262 + .../humanize/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../humanize/locale/ta/LC_MESSAGES/django.po | 261 + .../humanize/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1327 bytes .../humanize/locale/te/LC_MESSAGES/django.po | 262 + .../humanize/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 1580 bytes .../humanize/locale/tg/LC_MESSAGES/django.po | 393 + .../humanize/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 3709 bytes .../humanize/locale/th/LC_MESSAGES/django.po | 357 + .../humanize/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 4319 bytes .../humanize/locale/tr/LC_MESSAGES/django.po | 333 + .../humanize/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 3243 bytes .../humanize/locale/tt/LC_MESSAGES/django.po | 233 + .../humanize/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../humanize/locale/udm/LC_MESSAGES/django.po | 233 + .../humanize/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 8809 bytes .../humanize/locale/uk/LC_MESSAGES/django.po | 482 + .../humanize/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1347 bytes .../humanize/locale/ur/LC_MESSAGES/django.po | 261 + .../humanize/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 1915 bytes .../humanize/locale/uz/LC_MESSAGES/django.po | 353 + .../humanize/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 3646 bytes .../humanize/locale/vi/LC_MESSAGES/django.po | 235 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 3844 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 308 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 4520 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 358 + .../contrib/humanize/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 210 bytes .../__pycache__/humanize.cpython-310.pyc | Bin 0 -> 7529 bytes .../contrib/humanize/templatetags/humanize.py | 322 + .../django/contrib/messages/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 286 bytes .../messages/__pycache__/api.cpython-310.pyc | Bin 0 -> 2930 bytes .../messages/__pycache__/apps.cpython-310.pyc | Bin 0 -> 541 bytes .../__pycache__/constants.cpython-310.pyc | Bin 0 -> 445 bytes .../context_processors.cpython-310.pyc | Bin 0 -> 597 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 1261 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 515 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 965 bytes .../django/contrib/messages/api.py | 127 + .../django/contrib/messages/apps.py | 7 + .../django/contrib/messages/constants.py | 21 + .../contrib/messages/context_processors.py | 13 + .../django/contrib/messages/middleware.py | 26 + .../contrib/messages/storage/__init__.py | 12 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 667 bytes .../storage/__pycache__/base.cpython-310.pyc | Bin 0 -> 6712 bytes .../__pycache__/cookie.cpython-310.pyc | Bin 0 -> 6545 bytes .../__pycache__/fallback.cpython-310.pyc | Bin 0 -> 2094 bytes .../__pycache__/session.cpython-310.pyc | Bin 0 -> 2227 bytes .../django/contrib/messages/storage/base.py | 178 + .../django/contrib/messages/storage/cookie.py | 187 + .../contrib/messages/storage/fallback.py | 56 + .../contrib/messages/storage/session.py | 52 + .../django/contrib/messages/utils.py | 12 + .../django/contrib/messages/views.py | 19 + .../django/contrib/postgres/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../postgres/__pycache__/apps.cpython-310.pyc | Bin 0 -> 2886 bytes .../__pycache__/constraints.cpython-310.pyc | Bin 0 -> 6439 bytes .../__pycache__/expressions.cpython-310.pyc | Bin 0 -> 945 bytes .../__pycache__/functions.cpython-310.pyc | Bin 0 -> 670 bytes .../__pycache__/indexes.cpython-310.pyc | Bin 0 -> 7711 bytes .../__pycache__/lookups.cpython-310.pyc | Bin 0 -> 2645 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 13065 bytes .../__pycache__/search.cpython-310.pyc | Bin 0 -> 11645 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 0 -> 693 bytes .../__pycache__/signals.cpython-310.pyc | Bin 0 -> 1899 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 1245 bytes .../__pycache__/validators.cpython-310.pyc | Bin 0 -> 3173 bytes .../contrib/postgres/aggregates/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 254 bytes .../__pycache__/general.cpython-310.pyc | Bin 0 -> 3852 bytes .../__pycache__/mixins.cpython-310.pyc | Bin 0 -> 2594 bytes .../__pycache__/statistics.cpython-310.pyc | Bin 0 -> 2600 bytes .../contrib/postgres/aggregates/general.py | 109 + .../contrib/postgres/aggregates/mixins.py | 57 + .../contrib/postgres/aggregates/statistics.py | 75 + .../django/contrib/postgres/apps.py | 77 + .../django/contrib/postgres/constraints.py | 176 + .../django/contrib/postgres/expressions.py | 14 + .../contrib/postgres/fields/__init__.py | 5 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 297 bytes .../fields/__pycache__/array.cpython-310.pyc | Bin 0 -> 11698 bytes .../fields/__pycache__/citext.cpython-310.pyc | Bin 0 -> 1185 bytes .../fields/__pycache__/hstore.cpython-310.pyc | Bin 0 -> 4345 bytes .../fields/__pycache__/jsonb.cpython-310.pyc | Bin 0 -> 652 bytes .../fields/__pycache__/ranges.cpython-310.pyc | Bin 0 -> 10367 bytes .../fields/__pycache__/utils.cpython-310.pyc | Bin 0 -> 516 bytes .../django/contrib/postgres/fields/array.py | 329 + .../django/contrib/postgres/fields/citext.py | 23 + .../django/contrib/postgres/fields/hstore.py | 112 + .../django/contrib/postgres/fields/jsonb.py | 14 + .../django/contrib/postgres/fields/ranges.py | 333 + .../django/contrib/postgres/fields/utils.py | 3 + .../django/contrib/postgres/forms/__init__.py | 3 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 261 bytes .../forms/__pycache__/array.cpython-310.pyc | Bin 0 -> 7967 bytes .../forms/__pycache__/hstore.cpython-310.pyc | Bin 0 -> 1712 bytes .../forms/__pycache__/ranges.cpython-310.pyc | Bin 0 -> 3772 bytes .../django/contrib/postgres/forms/array.py | 251 + .../django/contrib/postgres/forms/hstore.py | 59 + .../django/contrib/postgres/forms/ranges.py | 113 + .../django/contrib/postgres/functions.py | 11 + .../django/contrib/postgres/indexes.py | 242 + .../jinja2/postgres/widgets/split_array.html | 1 + .../postgres/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 2841 bytes .../postgres/locale/af/LC_MESSAGES/django.po | 104 + .../postgres/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 4294 bytes .../postgres/locale/ar/LC_MESSAGES/django.po | 131 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 4352 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 131 + .../postgres/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 2855 bytes .../postgres/locale/az/LC_MESSAGES/django.po | 102 + .../postgres/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 4134 bytes .../postgres/locale/be/LC_MESSAGES/django.po | 122 + .../postgres/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 3515 bytes .../postgres/locale/bg/LC_MESSAGES/django.po | 110 + .../postgres/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2904 bytes .../postgres/locale/ca/LC_MESSAGES/django.po | 112 + .../postgres/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 3388 bytes .../postgres/locale/cs/LC_MESSAGES/django.po | 119 + .../postgres/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 2916 bytes .../postgres/locale/da/LC_MESSAGES/django.po | 110 + .../postgres/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 2993 bytes .../postgres/locale/de/LC_MESSAGES/django.po | 107 + .../postgres/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 3573 bytes .../postgres/locale/dsb/LC_MESSAGES/django.po | 121 + .../postgres/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 3583 bytes .../postgres/locale/el/LC_MESSAGES/django.po | 111 + .../postgres/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../postgres/locale/en/LC_MESSAGES/django.po | 115 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 2839 bytes .../locale/en_AU/LC_MESSAGES/django.po | 109 + .../postgres/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 2742 bytes .../postgres/locale/eo/LC_MESSAGES/django.po | 109 + .../postgres/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2917 bytes .../postgres/locale/es/LC_MESSAGES/django.po | 114 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 2917 bytes .../locale/es_AR/LC_MESSAGES/django.po | 108 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 2484 bytes .../locale/es_CO/LC_MESSAGES/django.po | 112 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 689 bytes .../locale/es_MX/LC_MESSAGES/django.po | 98 + .../postgres/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 2886 bytes .../postgres/locale/et/LC_MESSAGES/django.po | 111 + .../postgres/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 2883 bytes .../postgres/locale/eu/LC_MESSAGES/django.po | 108 + .../postgres/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 3308 bytes .../postgres/locale/fa/LC_MESSAGES/django.po | 108 + .../postgres/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 2943 bytes .../postgres/locale/fi/LC_MESSAGES/django.po | 110 + .../postgres/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 3081 bytes .../postgres/locale/fr/LC_MESSAGES/django.po | 109 + .../postgres/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 3541 bytes .../postgres/locale/gd/LC_MESSAGES/django.po | 125 + .../postgres/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 539 bytes .../postgres/locale/gl/LC_MESSAGES/django.po | 98 + .../postgres/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 3713 bytes .../postgres/locale/he/LC_MESSAGES/django.po | 111 + .../postgres/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 929 bytes .../postgres/locale/hr/LC_MESSAGES/django.po | 102 + .../postgres/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 3482 bytes .../postgres/locale/hsb/LC_MESSAGES/django.po | 119 + .../postgres/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 2872 bytes .../postgres/locale/hu/LC_MESSAGES/django.po | 109 + .../postgres/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 3234 bytes .../postgres/locale/hy/LC_MESSAGES/django.po | 109 + .../postgres/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 582 bytes .../postgres/locale/ia/LC_MESSAGES/django.po | 98 + .../postgres/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 2733 bytes .../postgres/locale/id/LC_MESSAGES/django.po | 109 + .../postgres/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 2931 bytes .../postgres/locale/is/LC_MESSAGES/django.po | 108 + .../postgres/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 2978 bytes .../postgres/locale/it/LC_MESSAGES/django.po | 116 + .../postgres/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 3027 bytes .../postgres/locale/ja/LC_MESSAGES/django.po | 101 + .../postgres/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 713 bytes .../postgres/locale/ka/LC_MESSAGES/django.po | 98 + .../postgres/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 665 bytes .../postgres/locale/kk/LC_MESSAGES/django.po | 97 + .../postgres/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 2897 bytes .../postgres/locale/ko/LC_MESSAGES/django.po | 105 + .../postgres/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 3101 bytes .../postgres/locale/ky/LC_MESSAGES/django.po | 100 + .../postgres/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 3452 bytes .../postgres/locale/lt/LC_MESSAGES/django.po | 120 + .../postgres/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 3099 bytes .../postgres/locale/lv/LC_MESSAGES/django.po | 116 + .../postgres/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 3048 bytes .../postgres/locale/mk/LC_MESSAGES/django.po | 112 + .../postgres/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1581 bytes .../postgres/locale/ml/LC_MESSAGES/django.po | 98 + .../postgres/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 3310 bytes .../postgres/locale/mn/LC_MESSAGES/django.po | 111 + .../postgres/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 2712 bytes .../postgres/locale/ms/LC_MESSAGES/django.po | 100 + .../postgres/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 2849 bytes .../postgres/locale/nb/LC_MESSAGES/django.po | 107 + .../postgres/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 875 bytes .../postgres/locale/ne/LC_MESSAGES/django.po | 96 + .../postgres/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 2951 bytes .../postgres/locale/nl/LC_MESSAGES/django.po | 111 + .../postgres/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 2836 bytes .../postgres/locale/nn/LC_MESSAGES/django.po | 106 + .../postgres/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 3444 bytes .../postgres/locale/pl/LC_MESSAGES/django.po | 127 + .../postgres/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2745 bytes .../postgres/locale/pt/LC_MESSAGES/django.po | 107 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2903 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 116 + .../postgres/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 3188 bytes .../postgres/locale/ro/LC_MESSAGES/django.po | 120 + .../postgres/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 4721 bytes .../postgres/locale/ru/LC_MESSAGES/django.po | 132 + .../postgres/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 3358 bytes .../postgres/locale/sk/LC_MESSAGES/django.po | 119 + .../postgres/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 3026 bytes .../postgres/locale/sl/LC_MESSAGES/django.po | 120 + .../postgres/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 2899 bytes .../postgres/locale/sq/LC_MESSAGES/django.po | 107 + .../postgres/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 3753 bytes .../postgres/locale/sr/LC_MESSAGES/django.po | 114 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 3092 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 113 + .../postgres/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 2787 bytes .../postgres/locale/sv/LC_MESSAGES/django.po | 111 + .../postgres/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 2688 bytes .../postgres/locale/tg/LC_MESSAGES/django.po | 101 + .../postgres/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 2789 bytes .../postgres/locale/tk/LC_MESSAGES/django.po | 107 + .../postgres/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 2898 bytes .../postgres/locale/tr/LC_MESSAGES/django.po | 109 + .../postgres/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 4418 bytes .../postgres/locale/uk/LC_MESSAGES/django.po | 129 + .../postgres/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 703 bytes .../postgres/locale/uz/LC_MESSAGES/django.po | 95 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 2574 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 100 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2586 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 97 + .../django/contrib/postgres/lookups.py | 65 + .../django/contrib/postgres/operations.py | 335 + .../django/contrib/postgres/search.py | 365 + .../django/contrib/postgres/serializers.py | 10 + .../django/contrib/postgres/signals.py | 68 + .../postgres/widgets/split_array.html | 1 + .../django/contrib/postgres/utils.py | 29 + .../django/contrib/postgres/validators.py | 91 + .../django/contrib/redirects/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../__pycache__/admin.cpython-310.pyc | Bin 0 -> 637 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 599 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 1852 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 1471 bytes .../django/contrib/redirects/admin.py | 10 + .../django/contrib/redirects/apps.py | 8 + .../redirects/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 1136 bytes .../redirects/locale/af/LC_MESSAGES/django.po | 51 + .../redirects/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 1336 bytes .../redirects/locale/ar/LC_MESSAGES/django.po | 51 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 1336 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 49 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 1071 bytes .../locale/ast/LC_MESSAGES/django.po | 50 + .../redirects/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1092 bytes .../redirects/locale/az/LC_MESSAGES/django.po | 50 + .../redirects/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1426 bytes .../redirects/locale/be/LC_MESSAGES/django.po | 52 + .../redirects/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1279 bytes .../redirects/locale/bg/LC_MESSAGES/django.po | 53 + .../redirects/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1319 bytes .../redirects/locale/bn/LC_MESSAGES/django.po | 48 + .../redirects/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1429 bytes .../redirects/locale/br/LC_MESSAGES/django.po | 54 + .../redirects/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1115 bytes .../redirects/locale/bs/LC_MESSAGES/django.po | 51 + .../redirects/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1136 bytes .../redirects/locale/ca/LC_MESSAGES/django.po | 54 + .../redirects/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1229 bytes .../redirects/locale/cs/LC_MESSAGES/django.po | 51 + .../redirects/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../redirects/locale/cy/LC_MESSAGES/django.po | 51 + .../redirects/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../redirects/locale/da/LC_MESSAGES/django.po | 50 + .../redirects/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1155 bytes .../redirects/locale/de/LC_MESSAGES/django.po | 51 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 1236 bytes .../locale/dsb/LC_MESSAGES/django.po | 51 + .../redirects/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 1395 bytes .../redirects/locale/el/LC_MESSAGES/django.po | 52 + .../redirects/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../redirects/locale/en/LC_MESSAGES/django.po | 50 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 1127 bytes .../locale/en_AU/LC_MESSAGES/django.po | 50 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1053 bytes .../locale/en_GB/LC_MESSAGES/django.po | 50 + .../redirects/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1138 bytes .../redirects/locale/eo/LC_MESSAGES/django.po | 52 + .../redirects/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 1159 bytes .../redirects/locale/es/LC_MESSAGES/django.po | 53 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 1144 bytes .../locale/es_AR/LC_MESSAGES/django.po | 51 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../locale/es_CO/LC_MESSAGES/django.po | 50 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1116 bytes .../locale/es_MX/LC_MESSAGES/django.po | 53 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/es_VE/LC_MESSAGES/django.po | 42 + .../redirects/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1131 bytes .../redirects/locale/et/LC_MESSAGES/django.po | 54 + .../redirects/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1126 bytes .../redirects/locale/eu/LC_MESSAGES/django.po | 51 + .../redirects/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 1234 bytes .../redirects/locale/fa/LC_MESSAGES/django.po | 50 + .../redirects/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1164 bytes .../redirects/locale/fi/LC_MESSAGES/django.po | 52 + .../redirects/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 1155 bytes .../redirects/locale/fr/LC_MESSAGES/django.po | 50 + .../redirects/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../redirects/locale/fy/LC_MESSAGES/django.po | 42 + .../redirects/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1075 bytes .../redirects/locale/ga/LC_MESSAGES/django.po | 48 + .../redirects/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 1250 bytes .../redirects/locale/gd/LC_MESSAGES/django.po | 52 + .../redirects/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1127 bytes .../redirects/locale/gl/LC_MESSAGES/django.po | 51 + .../redirects/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 1204 bytes .../redirects/locale/he/LC_MESSAGES/django.po | 47 + .../redirects/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1409 bytes .../redirects/locale/hi/LC_MESSAGES/django.po | 49 + .../redirects/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1207 bytes .../redirects/locale/hr/LC_MESSAGES/django.po | 52 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 1221 bytes .../locale/hsb/LC_MESSAGES/django.po | 51 + .../redirects/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1111 bytes .../redirects/locale/hu/LC_MESSAGES/django.po | 51 + .../redirects/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 1261 bytes .../redirects/locale/hy/LC_MESSAGES/django.po | 49 + .../redirects/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1152 bytes .../redirects/locale/ia/LC_MESSAGES/django.po | 50 + .../redirects/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1105 bytes .../redirects/locale/id/LC_MESSAGES/django.po | 52 + .../redirects/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 1019 bytes .../redirects/locale/io/LC_MESSAGES/django.po | 48 + .../redirects/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1040 bytes .../redirects/locale/is/LC_MESSAGES/django.po | 49 + .../redirects/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1092 bytes .../redirects/locale/it/LC_MESSAGES/django.po | 53 + .../redirects/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 1193 bytes .../redirects/locale/ja/LC_MESSAGES/django.po | 51 + .../redirects/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1511 bytes .../redirects/locale/ka/LC_MESSAGES/django.po | 50 + .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 699 bytes .../locale/kab/LC_MESSAGES/django.po | 45 + .../redirects/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1261 bytes .../redirects/locale/kk/LC_MESSAGES/django.po | 48 + .../redirects/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1248 bytes .../redirects/locale/km/LC_MESSAGES/django.po | 47 + .../redirects/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../redirects/locale/kn/LC_MESSAGES/django.po | 47 + .../redirects/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1079 bytes .../redirects/locale/ko/LC_MESSAGES/django.po | 52 + .../redirects/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../redirects/locale/ky/LC_MESSAGES/django.po | 50 + .../redirects/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../redirects/locale/lb/LC_MESSAGES/django.po | 42 + .../redirects/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 1191 bytes .../redirects/locale/lt/LC_MESSAGES/django.po | 53 + .../redirects/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 1175 bytes .../redirects/locale/lv/LC_MESSAGES/django.po | 53 + .../redirects/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 1353 bytes .../redirects/locale/mk/LC_MESSAGES/django.po | 52 + .../redirects/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1573 bytes .../redirects/locale/ml/LC_MESSAGES/django.po | 51 + .../redirects/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1274 bytes .../redirects/locale/mn/LC_MESSAGES/django.po | 52 + .../redirects/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../redirects/locale/mr/LC_MESSAGES/django.po | 42 + .../redirects/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 1094 bytes .../redirects/locale/ms/LC_MESSAGES/django.po | 49 + .../redirects/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 549 bytes .../redirects/locale/my/LC_MESSAGES/django.po | 46 + .../redirects/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1110 bytes .../redirects/locale/nb/LC_MESSAGES/django.po | 54 + .../redirects/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1420 bytes .../redirects/locale/ne/LC_MESSAGES/django.po | 47 + .../redirects/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1080 bytes .../redirects/locale/nl/LC_MESSAGES/django.po | 52 + .../redirects/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1143 bytes .../redirects/locale/nn/LC_MESSAGES/django.po | 50 + .../redirects/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1150 bytes .../redirects/locale/os/LC_MESSAGES/django.po | 49 + .../redirects/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 748 bytes .../redirects/locale/pa/LC_MESSAGES/django.po | 47 + .../redirects/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 1285 bytes .../redirects/locale/pl/LC_MESSAGES/django.po | 54 + .../redirects/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 1129 bytes .../redirects/locale/pt/LC_MESSAGES/django.po | 52 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1171 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 56 + .../redirects/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1158 bytes .../redirects/locale/ro/LC_MESSAGES/django.po | 54 + .../redirects/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1457 bytes .../redirects/locale/ru/LC_MESSAGES/django.po | 53 + .../redirects/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 1189 bytes .../redirects/locale/sk/LC_MESSAGES/django.po | 53 + .../redirects/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 1173 bytes .../redirects/locale/sl/LC_MESSAGES/django.po | 52 + .../redirects/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1165 bytes .../redirects/locale/sq/LC_MESSAGES/django.po | 52 + .../redirects/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 1367 bytes .../redirects/locale/sr/LC_MESSAGES/django.po | 53 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1210 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 52 + .../redirects/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../redirects/locale/sv/LC_MESSAGES/django.po | 52 + .../redirects/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1078 bytes .../redirects/locale/sw/LC_MESSAGES/django.po | 49 + .../redirects/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1502 bytes .../redirects/locale/ta/LC_MESSAGES/django.po | 49 + .../redirects/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 467 bytes .../redirects/locale/te/LC_MESSAGES/django.po | 42 + .../redirects/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 782 bytes .../redirects/locale/tg/LC_MESSAGES/django.po | 45 + .../redirects/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1331 bytes .../redirects/locale/th/LC_MESSAGES/django.po | 46 + .../redirects/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 1113 bytes .../redirects/locale/tk/LC_MESSAGES/django.po | 49 + .../redirects/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 1133 bytes .../redirects/locale/tr/LC_MESSAGES/django.po | 53 + .../redirects/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1178 bytes .../redirects/locale/tt/LC_MESSAGES/django.po | 48 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../locale/udm/LC_MESSAGES/django.po | 42 + .../redirects/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1569 bytes .../redirects/locale/uk/LC_MESSAGES/django.po | 56 + .../redirects/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1138 bytes .../redirects/locale/ur/LC_MESSAGES/django.po | 46 + .../redirects/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 743 bytes .../redirects/locale/uz/LC_MESSAGES/django.po | 48 + .../redirects/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1106 bytes .../redirects/locale/vi/LC_MESSAGES/django.po | 49 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1100 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 53 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1071 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 48 + .../django/contrib/redirects/middleware.py | 50 + .../redirects/migrations/0001_initial.py | 65 + .../0002_alter_redirect_new_path_help_text.py | 24 + .../contrib/redirects/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1340 bytes ...edirect_new_path_help_text.cpython-310.pyc | Bin 0 -> 834 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 209 bytes .../django/contrib/redirects/models.py | 35 + .../django/contrib/sessions/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../sessions/__pycache__/apps.cpython-310.pyc | Bin 0 -> 541 bytes .../__pycache__/base_session.cpython-310.pyc | Bin 0 -> 2274 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 807 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 2669 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 1850 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 0 -> 381 bytes .../django/contrib/sessions/apps.py | 7 + .../contrib/sessions/backends/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 206 bytes .../backends/__pycache__/base.cpython-310.pyc | Bin 0 -> 12086 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 2624 bytes .../__pycache__/cached_db.cpython-310.pyc | Bin 0 -> 2412 bytes .../backends/__pycache__/db.cpython-310.pyc | Bin 0 -> 4087 bytes .../backends/__pycache__/file.cpython-310.pyc | Bin 0 -> 5550 bytes .../signed_cookies.cpython-310.pyc | Bin 0 -> 3120 bytes .../django/contrib/sessions/backends/base.py | 359 + .../django/contrib/sessions/backends/cache.py | 85 + .../contrib/sessions/backends/cached_db.py | 72 + .../django/contrib/sessions/backends/db.py | 110 + .../django/contrib/sessions/backends/file.py | 211 + .../sessions/backends/signed_cookies.py | 81 + .../django/contrib/sessions/base_session.py | 47 + .../django/contrib/sessions/exceptions.py | 19 + .../sessions/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 717 bytes .../sessions/locale/af/LC_MESSAGES/django.po | 36 + .../sessions/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 846 bytes .../sessions/locale/ar/LC_MESSAGES/django.po | 37 + .../locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 817 bytes .../locale/ar_DZ/LC_MESSAGES/django.po | 37 + .../sessions/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 702 bytes .../sessions/locale/ast/LC_MESSAGES/django.po | 36 + .../sessions/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 731 bytes .../sessions/locale/az/LC_MESSAGES/django.po | 37 + .../sessions/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 854 bytes .../sessions/locale/be/LC_MESSAGES/django.po | 38 + .../sessions/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/bg/LC_MESSAGES/django.po | 38 + .../sessions/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 762 bytes .../sessions/locale/bn/LC_MESSAGES/django.po | 36 + .../sessions/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1027 bytes .../sessions/locale/br/LC_MESSAGES/django.po | 40 + .../sessions/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/bs/LC_MESSAGES/django.po | 37 + .../sessions/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 738 bytes .../sessions/locale/ca/LC_MESSAGES/django.po | 37 + .../sessions/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/cs/LC_MESSAGES/django.po | 37 + .../sessions/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 774 bytes .../sessions/locale/cy/LC_MESSAGES/django.po | 37 + .../sessions/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 681 bytes .../sessions/locale/da/LC_MESSAGES/django.po | 36 + .../sessions/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes .../sessions/locale/de/LC_MESSAGES/django.po | 35 + .../sessions/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/dsb/LC_MESSAGES/django.po | 37 + .../sessions/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sessions/locale/el/LC_MESSAGES/django.po | 36 + .../sessions/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../sessions/locale/en/LC_MESSAGES/django.po | 38 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 693 bytes .../locale/en_AU/LC_MESSAGES/django.po | 36 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../locale/en_GB/LC_MESSAGES/django.po | 36 + .../sessions/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/eo/LC_MESSAGES/django.po | 37 + .../sessions/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 734 bytes .../sessions/locale/es/LC_MESSAGES/django.po | 37 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 694 bytes .../locale/es_AR/LC_MESSAGES/django.po | 37 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 754 bytes .../locale/es_CO/LC_MESSAGES/django.po | 36 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 756 bytes .../locale/es_MX/LC_MESSAGES/django.po | 37 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/es_VE/LC_MESSAGES/django.po | 35 + .../sessions/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 737 bytes .../sessions/locale/et/LC_MESSAGES/django.po | 37 + .../sessions/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 728 bytes .../sessions/locale/eu/LC_MESSAGES/django.po | 36 + .../sessions/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 755 bytes .../sessions/locale/fa/LC_MESSAGES/django.po | 37 + .../sessions/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes .../sessions/locale/fi/LC_MESSAGES/django.po | 37 + .../sessions/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 692 bytes .../sessions/locale/fr/LC_MESSAGES/django.po | 36 + .../sessions/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../sessions/locale/fy/LC_MESSAGES/django.po | 35 + .../sessions/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 747 bytes .../sessions/locale/ga/LC_MESSAGES/django.po | 37 + .../sessions/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sessions/locale/gd/LC_MESSAGES/django.po | 37 + .../sessions/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 701 bytes .../sessions/locale/gl/LC_MESSAGES/django.po | 37 + .../sessions/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sessions/locale/he/LC_MESSAGES/django.po | 37 + .../sessions/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/hi/LC_MESSAGES/django.po | 36 + .../sessions/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 819 bytes .../sessions/locale/hr/LC_MESSAGES/django.po | 38 + .../sessions/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 805 bytes .../sessions/locale/hsb/LC_MESSAGES/django.po | 37 + .../sessions/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/hu/LC_MESSAGES/django.po | 37 + .../sessions/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../sessions/locale/hy/LC_MESSAGES/django.po | 35 + .../sessions/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 744 bytes .../sessions/locale/ia/LC_MESSAGES/django.po | 36 + .../sessions/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 705 bytes .../sessions/locale/id/LC_MESSAGES/django.po | 38 + .../sessions/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 683 bytes .../sessions/locale/io/LC_MESSAGES/django.po | 35 + .../sessions/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../sessions/locale/is/LC_MESSAGES/django.po | 36 + .../sessions/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 726 bytes .../sessions/locale/it/LC_MESSAGES/django.po | 37 + .../sessions/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../sessions/locale/ja/LC_MESSAGES/django.po | 37 + .../sessions/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 803 bytes .../sessions/locale/ka/LC_MESSAGES/django.po | 36 + .../sessions/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 743 bytes .../sessions/locale/kab/LC_MESSAGES/django.po | 35 + .../sessions/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/kk/LC_MESSAGES/django.po | 37 + .../sessions/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 929 bytes .../sessions/locale/km/LC_MESSAGES/django.po | 35 + .../sessions/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/kn/LC_MESSAGES/django.po | 37 + .../sessions/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 700 bytes .../sessions/locale/ko/LC_MESSAGES/django.po | 36 + .../sessions/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 742 bytes .../sessions/locale/ky/LC_MESSAGES/django.po | 35 + .../sessions/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../sessions/locale/lb/LC_MESSAGES/django.po | 35 + .../sessions/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sessions/locale/lt/LC_MESSAGES/django.po | 39 + .../sessions/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../sessions/locale/lv/LC_MESSAGES/django.po | 38 + .../sessions/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 816 bytes .../sessions/locale/mk/LC_MESSAGES/django.po | 37 + .../sessions/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 854 bytes .../sessions/locale/ml/LC_MESSAGES/django.po | 37 + .../sessions/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 784 bytes .../sessions/locale/mn/LC_MESSAGES/django.po | 38 + .../sessions/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../sessions/locale/mr/LC_MESSAGES/django.po | 35 + .../sessions/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 649 bytes .../sessions/locale/ms/LC_MESSAGES/django.po | 35 + .../sessions/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 872 bytes .../sessions/locale/my/LC_MESSAGES/django.po | 36 + .../sessions/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 717 bytes .../sessions/locale/nb/LC_MESSAGES/django.po | 38 + .../sessions/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 802 bytes .../sessions/locale/ne/LC_MESSAGES/django.po | 36 + .../sessions/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 692 bytes .../sessions/locale/nl/LC_MESSAGES/django.po | 36 + .../sessions/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 667 bytes .../sessions/locale/nn/LC_MESSAGES/django.po | 37 + .../sessions/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 732 bytes .../sessions/locale/os/LC_MESSAGES/django.po | 36 + .../sessions/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 771 bytes .../sessions/locale/pa/LC_MESSAGES/django.po | 36 + .../sessions/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 828 bytes .../sessions/locale/pl/LC_MESSAGES/django.po | 39 + .../sessions/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 738 bytes .../sessions/locale/pt/LC_MESSAGES/django.po | 37 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 37 + .../sessions/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 776 bytes .../sessions/locale/ro/LC_MESSAGES/django.po | 39 + .../sessions/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 913 bytes .../sessions/locale/ru/LC_MESSAGES/django.po | 39 + .../sessions/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 766 bytes .../sessions/locale/sk/LC_MESSAGES/django.po | 37 + .../sessions/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 770 bytes .../sessions/locale/sl/LC_MESSAGES/django.po | 38 + .../sessions/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 683 bytes .../sessions/locale/sq/LC_MESSAGES/django.po | 36 + .../sessions/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 855 bytes .../sessions/locale/sr/LC_MESSAGES/django.po | 38 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 38 + .../sessions/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../sessions/locale/sv/LC_MESSAGES/django.po | 37 + .../sessions/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 743 bytes .../sessions/locale/sw/LC_MESSAGES/django.po | 36 + .../sessions/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 801 bytes .../sessions/locale/ta/LC_MESSAGES/django.po | 35 + .../sessions/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sessions/locale/te/LC_MESSAGES/django.po | 36 + .../sessions/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 747 bytes .../sessions/locale/tg/LC_MESSAGES/django.po | 35 + .../sessions/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sessions/locale/th/LC_MESSAGES/django.po | 36 + .../sessions/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 699 bytes .../sessions/locale/tk/LC_MESSAGES/django.po | 36 + .../sessions/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 685 bytes .../sessions/locale/tr/LC_MESSAGES/django.po | 37 + .../sessions/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 806 bytes .../sessions/locale/tt/LC_MESSAGES/django.po | 36 + .../sessions/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../sessions/locale/udm/LC_MESSAGES/django.po | 35 + .../sessions/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 841 bytes .../sessions/locale/uk/LC_MESSAGES/django.po | 40 + .../sessions/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 729 bytes .../sessions/locale/ur/LC_MESSAGES/django.po | 35 + .../sessions/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 744 bytes .../sessions/locale/uz/LC_MESSAGES/django.po | 35 + .../sessions/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 679 bytes .../sessions/locale/vi/LC_MESSAGES/django.po | 38 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 722 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 37 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 733 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 37 + .../contrib/sessions/management/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 208 bytes .../sessions/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 217 bytes .../__pycache__/clearsessions.cpython-310.pyc | Bin 0 -> 1010 bytes .../management/commands/clearsessions.py | 21 + .../django/contrib/sessions/middleware.py | 77 + .../sessions/migrations/0001_initial.py | 38 + .../contrib/sessions/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1053 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 208 bytes .../django/contrib/sessions/models.py | 35 + .../django/contrib/sessions/serializers.py | 5 + .../django/contrib/sitemaps/__init__.py | 238 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 6631 bytes .../sitemaps/__pycache__/apps.cpython-310.pyc | Bin 0 -> 596 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 2698 bytes .../django/contrib/sitemaps/apps.py | 8 + .../contrib/sitemaps/management/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 208 bytes .../sitemaps/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 217 bytes .../__pycache__/ping_google.cpython-310.pyc | Bin 0 -> 1031 bytes .../management/commands/ping_google.py | 16 + .../contrib/sitemaps/templates/sitemap.xml | 16 + .../sitemaps/templates/sitemap_index.xml | 4 + .../django/contrib/sitemaps/views.py | 107 + .../django/contrib/sites/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes .../sites/__pycache__/admin.cpython-310.pyc | Bin 0 -> 542 bytes .../sites/__pycache__/apps.cpython-310.pyc | Bin 0 -> 1018 bytes .../sites/__pycache__/checks.cpython-310.pyc | Bin 0 -> 575 bytes .../__pycache__/management.cpython-310.pyc | Bin 0 -> 1274 bytes .../__pycache__/managers.cpython-310.pyc | Bin 0 -> 2250 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 742 bytes .../sites/__pycache__/models.cpython-310.pyc | Bin 0 -> 4273 bytes .../__pycache__/requests.cpython-310.pyc | Bin 0 -> 1257 bytes .../__pycache__/shortcuts.cpython-310.pyc | Bin 0 -> 682 bytes .../django/contrib/sites/admin.py | 8 + .../django/contrib/sites/apps.py | 17 + .../django/contrib/sites/checks.py | 12 + .../sites/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sites/locale/af/LC_MESSAGES/django.po | 36 + .../sites/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 947 bytes .../sites/locale/ar/LC_MESSAGES/django.po | 38 + .../sites/locale/ar_DZ/LC_MESSAGES/django.mo | Bin 0 -> 918 bytes .../sites/locale/ar_DZ/LC_MESSAGES/django.po | 37 + .../sites/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 774 bytes .../sites/locale/ast/LC_MESSAGES/django.po | 36 + .../sites/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 773 bytes .../sites/locale/az/LC_MESSAGES/django.po | 37 + .../sites/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 983 bytes .../sites/locale/be/LC_MESSAGES/django.po | 38 + .../sites/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 904 bytes .../sites/locale/bg/LC_MESSAGES/django.po | 38 + .../sites/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 925 bytes .../sites/locale/bn/LC_MESSAGES/django.po | 37 + .../sites/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1107 bytes .../sites/locale/br/LC_MESSAGES/django.po | 40 + .../sites/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 692 bytes .../sites/locale/bs/LC_MESSAGES/django.po | 37 + .../sites/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sites/locale/ca/LC_MESSAGES/django.po | 38 + .../sites/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 827 bytes .../sites/locale/cs/LC_MESSAGES/django.po | 37 + .../sites/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 835 bytes .../sites/locale/cy/LC_MESSAGES/django.po | 37 + .../sites/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../sites/locale/da/LC_MESSAGES/django.po | 36 + .../sites/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/de/LC_MESSAGES/django.po | 36 + .../sites/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 868 bytes .../sites/locale/dsb/LC_MESSAGES/django.po | 37 + .../sites/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 878 bytes .../sites/locale/el/LC_MESSAGES/django.po | 38 + .../sites/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../sites/locale/en/LC_MESSAGES/django.po | 38 + .../sites/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../sites/locale/en_AU/LC_MESSAGES/django.po | 36 + .../sites/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 639 bytes .../sites/locale/en_GB/LC_MESSAGES/django.po | 36 + .../sites/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/eo/LC_MESSAGES/django.po | 38 + .../sites/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 804 bytes .../sites/locale/es/LC_MESSAGES/django.po | 39 + .../sites/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 776 bytes .../sites/locale/es_AR/LC_MESSAGES/django.po | 38 + .../sites/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 825 bytes .../sites/locale/es_CO/LC_MESSAGES/django.po | 36 + .../sites/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sites/locale/es_MX/LC_MESSAGES/django.po | 38 + .../sites/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../sites/locale/es_VE/LC_MESSAGES/django.po | 35 + .../sites/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../sites/locale/et/LC_MESSAGES/django.po | 38 + .../sites/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 807 bytes .../sites/locale/eu/LC_MESSAGES/django.po | 37 + .../sites/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 872 bytes .../sites/locale/fa/LC_MESSAGES/django.po | 38 + .../sites/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sites/locale/fi/LC_MESSAGES/django.po | 37 + .../sites/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 756 bytes .../sites/locale/fr/LC_MESSAGES/django.po | 37 + .../sites/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../sites/locale/fy/LC_MESSAGES/django.po | 35 + .../sites/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 683 bytes .../sites/locale/ga/LC_MESSAGES/django.po | 37 + .../sites/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 858 bytes .../sites/locale/gd/LC_MESSAGES/django.po | 37 + .../sites/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 742 bytes .../sites/locale/gl/LC_MESSAGES/django.po | 37 + .../sites/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 820 bytes .../sites/locale/he/LC_MESSAGES/django.po | 37 + .../sites/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 665 bytes .../sites/locale/hi/LC_MESSAGES/django.po | 35 + .../sites/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 876 bytes .../sites/locale/hr/LC_MESSAGES/django.po | 38 + .../sites/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../sites/locale/hsb/LC_MESSAGES/django.po | 37 + .../sites/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 796 bytes .../sites/locale/hu/LC_MESSAGES/django.po | 37 + .../sites/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 906 bytes .../sites/locale/hy/LC_MESSAGES/django.po | 36 + .../sites/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sites/locale/ia/LC_MESSAGES/django.po | 36 + .../sites/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sites/locale/id/LC_MESSAGES/django.po | 38 + .../sites/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 760 bytes .../sites/locale/io/LC_MESSAGES/django.po | 35 + .../sites/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 812 bytes .../sites/locale/is/LC_MESSAGES/django.po | 37 + .../sites/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 795 bytes .../sites/locale/it/LC_MESSAGES/django.po | 38 + .../sites/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sites/locale/ja/LC_MESSAGES/django.po | 37 + .../sites/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 993 bytes .../sites/locale/ka/LC_MESSAGES/django.po | 37 + .../sites/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 808 bytes .../sites/locale/kab/LC_MESSAGES/django.po | 35 + .../sites/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 895 bytes .../sites/locale/kk/LC_MESSAGES/django.po | 36 + .../sites/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 701 bytes .../sites/locale/km/LC_MESSAGES/django.po | 35 + .../sites/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 673 bytes .../sites/locale/kn/LC_MESSAGES/django.po | 37 + .../sites/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 807 bytes .../sites/locale/ko/LC_MESSAGES/django.po | 38 + .../sites/locale/ky/LC_MESSAGES/django.mo | Bin 0 -> 811 bytes .../sites/locale/ky/LC_MESSAGES/django.po | 34 + .../sites/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../sites/locale/lb/LC_MESSAGES/django.po | 35 + .../sites/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 869 bytes .../sites/locale/lt/LC_MESSAGES/django.po | 41 + .../sites/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 823 bytes .../sites/locale/lv/LC_MESSAGES/django.po | 39 + .../sites/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 885 bytes .../sites/locale/mk/LC_MESSAGES/django.po | 37 + .../sites/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1007 bytes .../sites/locale/ml/LC_MESSAGES/django.po | 37 + .../sites/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 867 bytes .../sites/locale/mn/LC_MESSAGES/django.po | 39 + .../sites/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../sites/locale/mr/LC_MESSAGES/django.po | 35 + .../sites/locale/ms/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sites/locale/ms/LC_MESSAGES/django.po | 35 + .../sites/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 961 bytes .../sites/locale/my/LC_MESSAGES/django.po | 36 + .../sites/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 793 bytes .../sites/locale/nb/LC_MESSAGES/django.po | 38 + .../sites/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../sites/locale/ne/LC_MESSAGES/django.po | 36 + .../sites/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 735 bytes .../sites/locale/nl/LC_MESSAGES/django.po | 38 + .../sites/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 731 bytes .../sites/locale/nn/LC_MESSAGES/django.po | 37 + .../sites/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 806 bytes .../sites/locale/os/LC_MESSAGES/django.po | 36 + .../sites/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 684 bytes .../sites/locale/pa/LC_MESSAGES/django.po | 36 + .../sites/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 903 bytes .../sites/locale/pl/LC_MESSAGES/django.po | 40 + .../sites/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 797 bytes .../sites/locale/pt/LC_MESSAGES/django.po | 38 + .../sites/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 824 bytes .../sites/locale/pt_BR/LC_MESSAGES/django.po | 38 + .../sites/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 857 bytes .../sites/locale/ro/LC_MESSAGES/django.po | 40 + .../sites/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1016 bytes .../sites/locale/ru/LC_MESSAGES/django.po | 41 + .../sites/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 822 bytes .../sites/locale/sk/LC_MESSAGES/django.po | 38 + .../sites/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 845 bytes .../sites/locale/sl/LC_MESSAGES/django.po | 39 + .../sites/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 769 bytes .../sites/locale/sq/LC_MESSAGES/django.po | 36 + .../sites/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 935 bytes .../sites/locale/sr/LC_MESSAGES/django.po | 38 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 38 + .../sites/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/sv/LC_MESSAGES/django.po | 38 + .../sites/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 781 bytes .../sites/locale/sw/LC_MESSAGES/django.po | 36 + .../sites/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 714 bytes .../sites/locale/ta/LC_MESSAGES/django.po | 35 + .../sites/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 687 bytes .../sites/locale/te/LC_MESSAGES/django.po | 35 + .../sites/locale/tg/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../sites/locale/tg/LC_MESSAGES/django.po | 35 + .../sites/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 898 bytes .../sites/locale/th/LC_MESSAGES/django.po | 36 + .../sites/locale/tk/LC_MESSAGES/django.mo | Bin 0 -> 755 bytes .../sites/locale/tk/LC_MESSAGES/django.po | 36 + .../sites/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 758 bytes .../sites/locale/tr/LC_MESSAGES/django.po | 39 + .../sites/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../sites/locale/tt/LC_MESSAGES/django.po | 36 + .../sites/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../sites/locale/udm/LC_MESSAGES/django.po | 35 + .../sites/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 960 bytes .../sites/locale/uk/LC_MESSAGES/django.po | 41 + .../sites/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 654 bytes .../sites/locale/ur/LC_MESSAGES/django.po | 35 + .../sites/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 799 bytes .../sites/locale/uz/LC_MESSAGES/django.po | 35 + .../sites/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 762 bytes .../sites/locale/vi/LC_MESSAGES/django.po | 38 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 779 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 37 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 790 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 39 + .../django/contrib/sites/management.py | 47 + .../django/contrib/sites/managers.py | 65 + .../django/contrib/sites/middleware.py | 12 + .../contrib/sites/migrations/0001_initial.py | 44 + .../migrations/0002_alter_domain_unique.py | 22 + .../contrib/sites/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1106 bytes .../0002_alter_domain_unique.cpython-310.pyc | Bin 0 -> 803 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../django/contrib/sites/models.py | 121 + .../django/contrib/sites/requests.py | 20 + .../django/contrib/sites/shortcuts.py | 18 + .../django/contrib/staticfiles/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 884 bytes .../__pycache__/checks.cpython-310.pyc | Bin 0 -> 584 bytes .../__pycache__/finders.cpython-310.pyc | Bin 0 -> 9707 bytes .../__pycache__/handlers.cpython-310.pyc | Bin 0 -> 4266 bytes .../__pycache__/storage.cpython-310.pyc | Bin 0 -> 12457 bytes .../__pycache__/testing.cpython-310.pyc | Bin 0 -> 795 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 679 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 2021 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 1434 bytes .../django/contrib/staticfiles/apps.py | 13 + .../django/contrib/staticfiles/checks.py | 14 + .../django/contrib/staticfiles/finders.py | 326 + .../django/contrib/staticfiles/handlers.py | 101 + .../staticfiles/management/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 211 bytes .../management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 220 bytes .../__pycache__/collectstatic.cpython-310.pyc | Bin 0 -> 9373 bytes .../__pycache__/findstatic.cpython-310.pyc | Bin 0 -> 1926 bytes .../__pycache__/runserver.cpython-310.pyc | Bin 0 -> 1596 bytes .../management/commands/collectstatic.py | 379 + .../management/commands/findstatic.py | 48 + .../management/commands/runserver.py | 36 + .../django/contrib/staticfiles/storage.py | 492 + .../django/contrib/staticfiles/testing.py | 13 + .../django/contrib/staticfiles/urls.py | 19 + .../django/contrib/staticfiles/utils.py | 71 + .../django/contrib/staticfiles/views.py | 39 + .../django/contrib/syndication/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 553 bytes .../__pycache__/views.cpython-310.pyc | Bin 0 -> 6382 bytes .../django/contrib/syndication/apps.py | 7 + .../django/contrib/syndication/views.py | 221 + .../Lib/site-packages/django/core/__init__.py | 0 .../core/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 185 bytes .../core/__pycache__/asgi.cpython-310.pyc | Bin 0 -> 642 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 7072 bytes .../__pycache__/paginator.cpython-310.pyc | Bin 0 -> 7698 bytes .../core/__pycache__/signals.cpython-310.pyc | Bin 0 -> 337 bytes .../core/__pycache__/signing.cpython-310.pyc | Bin 0 -> 8805 bytes .../__pycache__/validators.cpython-310.pyc | Bin 0 -> 16869 bytes .../core/__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 644 bytes venv/Lib/site-packages/django/core/asgi.py | 13 + .../django/core/cache/__init__.py | 75 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2431 bytes .../cache/__pycache__/utils.cpython-310.pyc | Bin 0 -> 553 bytes .../django/core/cache/backends/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../backends/__pycache__/base.cpython-310.pyc | Bin 0 -> 13121 bytes .../backends/__pycache__/db.cpython-310.pyc | Bin 0 -> 7948 bytes .../__pycache__/dummy.cpython-310.pyc | Bin 0 -> 1697 bytes .../__pycache__/filebased.cpython-310.pyc | Bin 0 -> 5869 bytes .../__pycache__/locmem.cpython-310.pyc | Bin 0 -> 4271 bytes .../__pycache__/memcached.cpython-310.pyc | Bin 0 -> 7915 bytes .../__pycache__/redis.cpython-310.pyc | Bin 0 -> 8562 bytes .../django/core/cache/backends/base.py | 403 + .../django/core/cache/backends/db.py | 285 + .../django/core/cache/backends/dummy.py | 34 + .../django/core/cache/backends/filebased.py | 164 + .../django/core/cache/backends/locmem.py | 117 + .../django/core/cache/backends/memcached.py | 232 + .../django/core/cache/backends/redis.py | 234 + .../site-packages/django/core/cache/utils.py | 12 + .../django/core/checks/__init__.py | 47 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1118 bytes .../__pycache__/async_checks.cpython-310.pyc | Bin 0 -> 691 bytes .../checks/__pycache__/caches.cpython-310.pyc | Bin 0 -> 2543 bytes .../__pycache__/database.cpython-310.pyc | Bin 0 -> 576 bytes .../checks/__pycache__/files.cpython-310.pyc | Bin 0 -> 726 bytes .../__pycache__/messages.cpython-310.pyc | Bin 0 -> 3317 bytes .../__pycache__/model_checks.cpython-310.pyc | Bin 0 -> 6906 bytes .../__pycache__/registry.cpython-310.pyc | Bin 0 -> 3807 bytes .../__pycache__/templates.cpython-310.pyc | Bin 0 -> 1458 bytes .../__pycache__/translation.cpython-310.pyc | Bin 0 -> 2492 bytes .../checks/__pycache__/urls.cpython-310.pyc | Bin 0 -> 3437 bytes .../django/core/checks/async_checks.py | 16 + .../django/core/checks/caches.py | 76 + .../core/checks/compatibility/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 206 bytes .../__pycache__/django_4_0.cpython-310.pyc | Bin 0 -> 801 bytes .../core/checks/compatibility/django_4_0.py | 20 + .../django/core/checks/database.py | 14 + .../site-packages/django/core/checks/files.py | 19 + .../django/core/checks/messages.py | 81 + .../django/core/checks/model_checks.py | 227 + .../django/core/checks/registry.py | 117 + .../django/core/checks/security/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 201 bytes .../security/__pycache__/base.cpython-310.pyc | Bin 0 -> 7646 bytes .../security/__pycache__/csrf.cpython-310.pyc | Bin 0 -> 2204 bytes .../__pycache__/sessions.cpython-310.pyc | Bin 0 -> 2533 bytes .../django/core/checks/security/base.py | 261 + .../django/core/checks/security/csrf.py | 67 + .../django/core/checks/security/sessions.py | 97 + .../django/core/checks/templates.py | 41 + .../django/core/checks/translation.py | 66 + .../site-packages/django/core/checks/urls.py | 117 + .../site-packages/django/core/exceptions.py | 239 + .../django/core/files/__init__.py | 3 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 264 bytes .../files/__pycache__/base.cpython-310.pyc | Bin 0 -> 5357 bytes .../files/__pycache__/images.cpython-310.pyc | Bin 0 -> 2150 bytes .../files/__pycache__/locks.cpython-310.pyc | Bin 0 -> 3394 bytes .../files/__pycache__/move.cpython-310.pyc | Bin 0 -> 2129 bytes .../files/__pycache__/storage.cpython-310.pyc | Bin 0 -> 13077 bytes .../files/__pycache__/temp.cpython-310.pyc | Bin 0 -> 2759 bytes .../__pycache__/uploadedfile.cpython-310.pyc | Bin 0 -> 4740 bytes .../__pycache__/uploadhandler.cpython-310.pyc | Bin 0 -> 8124 bytes .../files/__pycache__/utils.cpython-310.pyc | Bin 0 -> 3538 bytes .../site-packages/django/core/files/base.py | 161 + .../site-packages/django/core/files/images.py | 88 + .../site-packages/django/core/files/locks.py | 126 + .../site-packages/django/core/files/move.py | 100 + .../django/core/files/storage.py | 416 + .../site-packages/django/core/files/temp.py | 79 + .../django/core/files/uploadedfile.py | 150 + .../django/core/files/uploadhandler.py | 251 + .../site-packages/django/core/files/utils.py | 78 + .../django/core/handlers/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes .../handlers/__pycache__/asgi.cpython-310.pyc | Bin 0 -> 8150 bytes .../handlers/__pycache__/base.cpython-310.pyc | Bin 0 -> 8423 bytes .../__pycache__/exception.cpython-310.pyc | Bin 0 -> 4126 bytes .../handlers/__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 6614 bytes .../django/core/handlers/asgi.py | 311 + .../django/core/handlers/base.py | 376 + .../django/core/handlers/exception.py | 184 + .../django/core/handlers/wsgi.py | 215 + .../django/core/mail/__init__.py | 154 + .../mail/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 4419 bytes .../mail/__pycache__/message.cpython-310.pyc | Bin 0 -> 14862 bytes .../mail/__pycache__/utils.cpython-310.pyc | Bin 0 -> 831 bytes .../django/core/mail/backends/__init__.py | 1 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 199 bytes .../backends/__pycache__/base.cpython-310.pyc | Bin 0 -> 2430 bytes .../__pycache__/console.cpython-310.pyc | Bin 0 -> 1774 bytes .../__pycache__/dummy.cpython-310.pyc | Bin 0 -> 651 bytes .../__pycache__/filebased.cpython-310.pyc | Bin 0 -> 2396 bytes .../__pycache__/locmem.cpython-310.pyc | Bin 0 -> 1304 bytes .../backends/__pycache__/smtp.cpython-310.pyc | Bin 0 -> 4148 bytes .../django/core/mail/backends/base.py | 62 + .../django/core/mail/backends/console.py | 44 + .../django/core/mail/backends/dummy.py | 10 + .../django/core/mail/backends/filebased.py | 66 + .../django/core/mail/backends/locmem.py | 31 + .../django/core/mail/backends/smtp.py | 156 + .../site-packages/django/core/mail/message.py | 493 + .../site-packages/django/core/mail/utils.py | 22 + .../django/core/management/__init__.py | 446 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 13553 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 22994 bytes .../__pycache__/color.cpython-310.pyc | Bin 0 -> 2761 bytes .../__pycache__/sql.cpython-310.pyc | Bin 0 -> 1406 bytes .../__pycache__/templates.cpython-310.pyc | Bin 0 -> 10209 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 5217 bytes .../django/core/management/base.py | 690 + .../django/core/management/color.py | 113 + .../core/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../__pycache__/check.cpython-310.pyc | Bin 0 -> 2475 bytes .../compilemessages.cpython-310.pyc | Bin 0 -> 5292 bytes .../createcachetable.cpython-310.pyc | Bin 0 -> 3569 bytes .../__pycache__/dbshell.cpython-310.pyc | Bin 0 -> 1609 bytes .../__pycache__/diffsettings.cpython-310.pyc | Bin 0 -> 3111 bytes .../__pycache__/dumpdata.cpython-310.pyc | Bin 0 -> 6642 bytes .../__pycache__/flush.cpython-310.pyc | Bin 0 -> 2778 bytes .../__pycache__/inspectdb.cpython-310.pyc | Bin 0 -> 9329 bytes .../__pycache__/loaddata.cpython-310.pyc | Bin 0 -> 11706 bytes .../__pycache__/makemessages.cpython-310.pyc | Bin 0 -> 20056 bytes .../makemigrations.cpython-310.pyc | Bin 0 -> 10179 bytes .../__pycache__/migrate.cpython-310.pyc | Bin 0 -> 11052 bytes .../__pycache__/runserver.cpython-310.pyc | Bin 0 -> 5061 bytes .../__pycache__/sendtestemail.cpython-310.pyc | Bin 0 -> 1766 bytes .../__pycache__/shell.cpython-310.pyc | Bin 0 -> 3170 bytes .../showmigrations.cpython-310.pyc | Bin 0 -> 4777 bytes .../__pycache__/sqlflush.cpython-310.pyc | Bin 0 -> 1361 bytes .../__pycache__/sqlmigrate.cpython-310.pyc | Bin 0 -> 2564 bytes .../sqlsequencereset.cpython-310.pyc | Bin 0 -> 1411 bytes .../squashmigrations.cpython-310.pyc | Bin 0 -> 6139 bytes .../__pycache__/startapp.cpython-310.pyc | Bin 0 -> 898 bytes .../__pycache__/startproject.cpython-310.pyc | Bin 0 -> 1090 bytes .../commands/__pycache__/test.cpython-310.pyc | Bin 0 -> 2602 bytes .../__pycache__/testserver.cpython-310.pyc | Bin 0 -> 1922 bytes .../django/core/management/commands/check.py | 83 + .../management/commands/compilemessages.py | 195 + .../management/commands/createcachetable.py | 130 + .../core/management/commands/dbshell.py | 48 + .../core/management/commands/diffsettings.py | 91 + .../core/management/commands/dumpdata.py | 281 + .../django/core/management/commands/flush.py | 92 + .../core/management/commands/inspectdb.py | 367 + .../core/management/commands/loaddata.py | 432 + .../core/management/commands/makemessages.py | 750 ++ .../management/commands/makemigrations.py | 379 + .../core/management/commands/migrate.py | 445 + .../core/management/commands/runserver.py | 183 + .../core/management/commands/sendtestemail.py | 46 + .../django/core/management/commands/shell.py | 139 + .../management/commands/showmigrations.py | 176 + .../core/management/commands/sqlflush.py | 29 + .../core/management/commands/sqlmigrate.py | 83 + .../management/commands/sqlsequencereset.py | 31 + .../management/commands/squashmigrations.py | 252 + .../core/management/commands/startapp.py | 14 + .../core/management/commands/startproject.py | 21 + .../django/core/management/commands/test.py | 71 + .../core/management/commands/testserver.py | 65 + .../django/core/management/sql.py | 59 + .../django/core/management/templates.py | 386 + .../django/core/management/utils.py | 155 + .../site-packages/django/core/paginator.py | 224 + .../django/core/serializers/__init__.py | 254 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 6978 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 11351 bytes .../__pycache__/json.cpython-310.pyc | Bin 0 -> 3481 bytes .../__pycache__/jsonl.cpython-310.pyc | Bin 0 -> 2132 bytes .../__pycache__/python.cpython-310.pyc | Bin 0 -> 5567 bytes .../__pycache__/pyyaml.cpython-310.pyc | Bin 0 -> 2832 bytes .../xml_serializer.cpython-310.pyc | Bin 0 -> 14822 bytes .../django/core/serializers/base.py | 401 + .../django/core/serializers/json.py | 106 + .../django/core/serializers/jsonl.py | 57 + .../django/core/serializers/python.py | 185 + .../django/core/serializers/pyyaml.py | 82 + .../django/core/serializers/xml_serializer.py | 488 + .../django/core/servers/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 193 bytes .../__pycache__/basehttp.cpython-310.pyc | Bin 0 -> 7857 bytes .../django/core/servers/basehttp.py | 246 + venv/Lib/site-packages/django/core/signals.py | 6 + venv/Lib/site-packages/django/core/signing.py | 253 + .../site-packages/django/core/validators.py | 638 + venv/Lib/site-packages/django/core/wsgi.py | 13 + venv/Lib/site-packages/django/db/__init__.py | 61 + .../db/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1246 bytes .../__pycache__/transaction.cpython-310.pyc | Bin 0 -> 8324 bytes .../db/__pycache__/utils.cpython-310.pyc | Bin 0 -> 9477 bytes .../django/db/backends/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 192 bytes .../ddl_references.cpython-310.pyc | Bin 0 -> 10193 bytes .../__pycache__/signals.cpython-310.pyc | Bin 0 -> 265 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 8229 bytes .../django/db/backends/base/__init__.py | 0 .../base/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../base/__pycache__/base.cpython-310.pyc | Bin 0 -> 22073 bytes .../base/__pycache__/client.cpython-310.pyc | Bin 0 -> 1254 bytes .../base/__pycache__/creation.cpython-310.pyc | Bin 0 -> 10722 bytes .../base/__pycache__/features.cpython-310.pyc | Bin 0 -> 6295 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 8863 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 30625 bytes .../base/__pycache__/schema.cpython-310.pyc | Bin 0 -> 40824 bytes .../__pycache__/validation.cpython-310.pyc | Bin 0 -> 1357 bytes .../django/db/backends/base/base.py | 715 + .../django/db/backends/base/client.py | 28 + .../django/db/backends/base/creation.py | 369 + .../django/db/backends/base/features.py | 367 + .../django/db/backends/base/introspection.py | 219 + .../django/db/backends/base/operations.py | 754 ++ .../django/db/backends/base/schema.py | 1689 +++ .../django/db/backends/base/validation.py | 29 + .../django/db/backends/ddl_references.py | 254 + .../django/db/backends/dummy/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../dummy/__pycache__/base.cpython-310.pyc | Bin 0 -> 2703 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 498 bytes .../django/db/backends/dummy/base.py | 75 + .../django/db/backends/dummy/features.py | 6 + .../django/db/backends/mysql/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../mysql/__pycache__/base.cpython-310.pyc | Bin 0 -> 12403 bytes .../mysql/__pycache__/client.cpython-310.pyc | Bin 0 -> 1583 bytes .../__pycache__/compiler.cpython-310.pyc | Bin 0 -> 2709 bytes .../__pycache__/creation.cpython-310.pyc | Bin 0 -> 2907 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 9700 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 11242 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 13579 bytes .../mysql/__pycache__/schema.cpython-310.pyc | Bin 0 -> 6160 bytes .../__pycache__/validation.cpython-310.pyc | Bin 0 -> 2569 bytes .../django/db/backends/mysql/base.py | 441 + .../django/db/backends/mysql/client.py | 60 + .../django/db/backends/mysql/compiler.py | 77 + .../django/db/backends/mysql/creation.py | 87 + .../django/db/backends/mysql/features.py | 326 + .../django/db/backends/mysql/introspection.py | 345 + .../django/db/backends/mysql/operations.py | 426 + .../django/db/backends/mysql/schema.py | 175 + .../django/db/backends/mysql/validation.py | 77 + .../django/db/backends/oracle/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 199 bytes .../oracle/__pycache__/base.cpython-310.pyc | Bin 0 -> 18187 bytes .../oracle/__pycache__/client.cpython-310.pyc | Bin 0 -> 1119 bytes .../__pycache__/creation.cpython-310.pyc | Bin 0 -> 15253 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 4385 bytes .../__pycache__/functions.cpython-310.pyc | Bin 0 -> 1255 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 13017 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 22071 bytes .../oracle/__pycache__/schema.cpython-310.pyc | Bin 0 -> 8080 bytes .../oracle/__pycache__/utils.cpython-310.pyc | Bin 0 -> 2970 bytes .../__pycache__/validation.cpython-310.pyc | Bin 0 -> 1035 bytes .../django/db/backends/oracle/base.py | 587 + .../django/db/backends/oracle/client.py | 27 + .../django/db/backends/oracle/creation.py | 464 + .../django/db/backends/oracle/features.py | 122 + .../django/db/backends/oracle/functions.py | 26 + .../db/backends/oracle/introspection.py | 406 + .../django/db/backends/oracle/operations.py | 708 + .../django/db/backends/oracle/schema.py | 244 + .../django/db/backends/oracle/utils.py | 97 + .../django/db/backends/oracle/validation.py | 22 + .../django/db/backends/postgresql/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 203 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 10024 bytes .../__pycache__/client.cpython-310.pyc | Bin 0 -> 1717 bytes .../__pycache__/creation.cpython-310.pyc | Bin 0 -> 3203 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 3659 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 10366 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 11271 bytes .../__pycache__/schema.cpython-310.pyc | Bin 0 -> 6984 bytes .../django/db/backends/postgresql/base.py | 368 + .../django/db/backends/postgresql/client.py | 64 + .../django/db/backends/postgresql/creation.py | 87 + .../django/db/backends/postgresql/features.py | 99 + .../db/backends/postgresql/introspection.py | 295 + .../db/backends/postgresql/operations.py | 326 + .../django/db/backends/postgresql/schema.py | 318 + .../django/db/backends/signals.py | 3 + .../django/db/backends/sqlite3/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../sqlite3/__pycache__/base.cpython-310.pyc | Bin 0 -> 19615 bytes .../__pycache__/client.cpython-310.pyc | Bin 0 -> 707 bytes .../__pycache__/creation.cpython-310.pyc | Bin 0 -> 3598 bytes .../__pycache__/features.cpython-310.pyc | Bin 0 -> 4968 bytes .../__pycache__/introspection.cpython-310.pyc | Bin 0 -> 12666 bytes .../__pycache__/operations.cpython-310.pyc | Bin 0 -> 14469 bytes .../__pycache__/schema.cpython-310.pyc | Bin 0 -> 12708 bytes .../django/db/backends/sqlite3/base.py | 695 + .../django/db/backends/sqlite3/client.py | 10 + .../django/db/backends/sqlite3/creation.py | 108 + .../django/db/backends/sqlite3/features.py | 145 + .../db/backends/sqlite3/introspection.py | 528 + .../django/db/backends/sqlite3/operations.py | 416 + .../django/db/backends/sqlite3/schema.py | 531 + .../site-packages/django/db/backends/utils.py | 292 + .../django/db/migrations/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 295 bytes .../__pycache__/autodetector.cpython-310.pyc | Bin 0 -> 36953 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 2382 bytes .../__pycache__/executor.cpython-310.pyc | Bin 0 -> 11157 bytes .../__pycache__/graph.cpython-310.pyc | Bin 0 -> 12634 bytes .../__pycache__/loader.cpython-310.pyc | Bin 0 -> 11140 bytes .../__pycache__/migration.cpython-310.pyc | Bin 0 -> 6419 bytes .../__pycache__/optimizer.cpython-310.pyc | Bin 0 -> 2710 bytes .../__pycache__/questioner.cpython-310.pyc | Bin 0 -> 8656 bytes .../__pycache__/recorder.cpython-310.pyc | Bin 0 -> 4492 bytes .../__pycache__/serializer.cpython-310.pyc | Bin 0 -> 14136 bytes .../__pycache__/state.cpython-310.pyc | Bin 0 -> 26992 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 3530 bytes .../__pycache__/writer.cpython-310.pyc | Bin 0 -> 8133 bytes .../django/db/migrations/autodetector.py | 1579 +++ .../django/db/migrations/exceptions.py | 60 + .../django/db/migrations/executor.py | 406 + .../django/db/migrations/graph.py | 333 + .../django/db/migrations/loader.py | 385 + .../django/db/migrations/migration.py | 235 + .../db/migrations/operations/__init__.py | 40 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 877 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 5363 bytes .../__pycache__/fields.cpython-310.pyc | Bin 0 -> 9953 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 27130 bytes .../__pycache__/special.cpython-310.pyc | Bin 0 -> 6467 bytes .../django/db/migrations/operations/base.py | 146 + .../django/db/migrations/operations/fields.py | 355 + .../django/db/migrations/operations/models.py | 936 ++ .../db/migrations/operations/special.py | 208 + .../django/db/migrations/optimizer.py | 69 + .../django/db/migrations/questioner.py | 259 + .../django/db/migrations/recorder.py | 103 + .../django/db/migrations/serializer.py | 385 + .../django/db/migrations/state.py | 963 ++ .../django/db/migrations/utils.py | 127 + .../django/db/migrations/writer.py | 311 + .../django/db/models/__init__.py | 115 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2327 bytes .../__pycache__/aggregates.cpython-310.pyc | Bin 0 -> 6352 bytes .../models/__pycache__/base.cpython-310.pyc | Bin 0 -> 52811 bytes .../__pycache__/constants.cpython-310.pyc | Bin 0 -> 268 bytes .../__pycache__/constraints.cpython-310.pyc | Bin 0 -> 9822 bytes .../__pycache__/deletion.cpython-310.pyc | Bin 0 -> 15196 bytes .../models/__pycache__/enums.cpython-310.pyc | Bin 0 -> 4313 bytes .../__pycache__/expressions.cpython-310.pyc | Bin 0 -> 51959 bytes .../__pycache__/indexes.cpython-310.pyc | Bin 0 -> 10169 bytes .../__pycache__/lookups.cpython-310.pyc | Bin 0 -> 22687 bytes .../__pycache__/manager.cpython-310.pyc | Bin 0 -> 6424 bytes .../__pycache__/options.cpython-310.pyc | Bin 0 -> 25022 bytes .../models/__pycache__/query.cpython-310.pyc | Bin 0 -> 63754 bytes .../__pycache__/query_utils.cpython-310.pyc | Bin 0 -> 10842 bytes .../__pycache__/signals.cpython-310.pyc | Bin 0 -> 1730 bytes .../models/__pycache__/utils.cpython-310.pyc | Bin 0 -> 1793 bytes .../django/db/models/aggregates.py | 195 + .../site-packages/django/db/models/base.py | 2391 ++++ .../django/db/models/constants.py | 6 + .../django/db/models/constraints.py | 267 + .../django/db/models/deletion.py | 500 + .../site-packages/django/db/models/enums.py | 92 + .../django/db/models/expressions.py | 1595 +++ .../django/db/models/fields/__init__.py | 2738 ++++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 71890 bytes .../fields/__pycache__/files.cpython-310.pyc | Bin 0 -> 12999 bytes .../fields/__pycache__/json.cpython-310.pyc | Bin 0 -> 18145 bytes .../fields/__pycache__/mixins.cpython-310.pyc | Bin 0 -> 2394 bytes .../fields/__pycache__/proxy.cpython-310.pyc | Bin 0 -> 948 bytes .../__pycache__/related.cpython-310.pyc | Bin 0 -> 49044 bytes .../related_descriptors.cpython-310.pyc | Bin 0 -> 38245 bytes .../related_lookups.cpython-310.pyc | Bin 0 -> 5871 bytes .../reverse_related.cpython-310.pyc | Bin 0 -> 11042 bytes .../django/db/models/fields/files.py | 509 + .../django/db/models/fields/json.py | 569 + .../django/db/models/fields/mixins.py | 59 + .../django/db/models/fields/proxy.py | 18 + .../django/db/models/fields/related.py | 1954 +++ .../db/models/fields/related_descriptors.py | 1372 ++ .../db/models/fields/related_lookups.py | 197 + .../db/models/fields/reverse_related.py | 377 + .../django/db/models/functions/__init__.py | 190 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2369 bytes .../__pycache__/comparison.cpython-310.pyc | Bin 0 -> 8070 bytes .../__pycache__/datetime.cpython-310.pyc | Bin 0 -> 10347 bytes .../__pycache__/math.cpython-310.pyc | Bin 0 -> 6542 bytes .../__pycache__/mixins.cpython-310.pyc | Bin 0 -> 2799 bytes .../__pycache__/text.cpython-310.pyc | Bin 0 -> 11821 bytes .../__pycache__/window.cpython-310.pyc | Bin 0 -> 3603 bytes .../django/db/models/functions/comparison.py | 212 + .../django/db/models/functions/datetime.py | 419 + .../django/db/models/functions/math.py | 212 + .../django/db/models/functions/mixins.py | 57 + .../django/db/models/functions/text.py | 351 + .../django/db/models/functions/window.py | 120 + .../site-packages/django/db/models/indexes.py | 292 + .../site-packages/django/db/models/lookups.py | 727 ++ .../site-packages/django/db/models/manager.py | 213 + .../site-packages/django/db/models/options.py | 992 ++ .../site-packages/django/db/models/query.py | 2270 ++++ .../django/db/models/query_utils.py | 336 + .../site-packages/django/db/models/signals.py | 54 + .../django/db/models/sql/__init__.py | 6 + .../sql/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 411 bytes .../sql/__pycache__/compiler.cpython-310.pyc | Bin 0 -> 47244 bytes .../sql/__pycache__/constants.cpython-310.pyc | Bin 0 -> 504 bytes .../datastructures.cpython-310.pyc | Bin 0 -> 6239 bytes .../sql/__pycache__/query.cpython-310.pyc | Bin 0 -> 69202 bytes .../__pycache__/subqueries.cpython-310.pyc | Bin 0 -> 6185 bytes .../sql/__pycache__/where.cpython-310.pyc | Bin 0 -> 8887 bytes .../django/db/models/sql/compiler.py | 1876 +++ .../django/db/models/sql/constants.py | 24 + .../django/db/models/sql/datastructures.py | 220 + .../django/db/models/sql/query.py | 2671 ++++ .../django/db/models/sql/subqueries.py | 167 + .../django/db/models/sql/where.py | 278 + .../site-packages/django/db/models/utils.py | 52 + .../site-packages/django/db/transaction.py | 332 + venv/Lib/site-packages/django/db/utils.py | 301 + .../site-packages/django/dispatch/__init__.py | 9 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 496 bytes .../__pycache__/dispatcher.cpython-310.pyc | Bin 0 -> 8614 bytes .../django/dispatch/dispatcher.py | 305 + .../site-packages/django/dispatch/license.txt | 36 + .../site-packages/django/forms/__init__.py | 11 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 505 bytes .../__pycache__/boundfield.cpython-310.pyc | Bin 0 -> 10333 bytes .../forms/__pycache__/fields.cpython-310.pyc | Bin 0 -> 39078 bytes .../forms/__pycache__/forms.cpython-310.pyc | Bin 0 -> 15588 bytes .../__pycache__/formsets.cpython-310.pyc | Bin 0 -> 15669 bytes .../forms/__pycache__/models.cpython-310.pyc | Bin 0 -> 38611 bytes .../__pycache__/renderers.cpython-310.pyc | Bin 0 -> 2992 bytes .../forms/__pycache__/utils.cpython-310.pyc | Bin 0 -> 8345 bytes .../forms/__pycache__/widgets.cpython-310.pyc | Bin 0 -> 36625 bytes .../site-packages/django/forms/boundfield.py | 316 + venv/Lib/site-packages/django/forms/fields.py | 1382 ++ venv/Lib/site-packages/django/forms/forms.py | 539 + .../site-packages/django/forms/formsets.py | 559 + .../forms/jinja2/django/forms/attrs.html | 1 + .../forms/jinja2/django/forms/default.html | 1 + .../django/forms/errors/dict/default.html | 1 + .../jinja2/django/forms/errors/dict/text.txt | 3 + .../jinja2/django/forms/errors/dict/ul.html | 1 + .../django/forms/errors/list/default.html | 1 + .../jinja2/django/forms/errors/list/text.txt | 2 + .../jinja2/django/forms/errors/list/ul.html | 1 + .../jinja2/django/forms/formsets/default.html | 1 + .../forms/jinja2/django/forms/formsets/p.html | 1 + .../jinja2/django/forms/formsets/table.html | 1 + .../jinja2/django/forms/formsets/ul.html | 1 + .../forms/jinja2/django/forms/label.html | 1 + .../django/forms/jinja2/django/forms/p.html | 20 + .../forms/jinja2/django/forms/table.html | 29 + .../django/forms/jinja2/django/forms/ul.html | 24 + .../jinja2/django/forms/widgets/attrs.html | 1 + .../jinja2/django/forms/widgets/checkbox.html | 1 + .../django/forms/widgets/checkbox_option.html | 1 + .../django/forms/widgets/checkbox_select.html | 1 + .../forms/widgets/clearable_file_input.html | 5 + .../jinja2/django/forms/widgets/date.html | 1 + .../jinja2/django/forms/widgets/datetime.html | 1 + .../jinja2/django/forms/widgets/email.html | 1 + .../jinja2/django/forms/widgets/file.html | 1 + .../jinja2/django/forms/widgets/hidden.html | 1 + .../jinja2/django/forms/widgets/input.html | 1 + .../django/forms/widgets/input_option.html | 1 + .../django/forms/widgets/multiple_hidden.html | 1 + .../django/forms/widgets/multiple_input.html | 5 + .../django/forms/widgets/multiwidget.html | 1 + .../jinja2/django/forms/widgets/number.html | 1 + .../jinja2/django/forms/widgets/password.html | 1 + .../jinja2/django/forms/widgets/radio.html | 1 + .../django/forms/widgets/radio_option.html | 1 + .../jinja2/django/forms/widgets/select.html | 5 + .../django/forms/widgets/select_date.html | 1 + .../django/forms/widgets/select_option.html | 1 + .../django/forms/widgets/splitdatetime.html | 1 + .../forms/widgets/splithiddendatetime.html | 1 + .../jinja2/django/forms/widgets/text.html | 1 + .../jinja2/django/forms/widgets/textarea.html | 2 + .../jinja2/django/forms/widgets/time.html | 1 + .../jinja2/django/forms/widgets/url.html | 1 + venv/Lib/site-packages/django/forms/models.py | 1657 +++ .../site-packages/django/forms/renderers.py | 71 + .../forms/templates/django/forms/attrs.html | 1 + .../forms/templates/django/forms/default.html | 1 + .../django/forms/errors/dict/default.html | 1 + .../django/forms/errors/dict/text.txt | 3 + .../django/forms/errors/dict/ul.html | 1 + .../django/forms/errors/list/default.html | 1 + .../django/forms/errors/list/text.txt | 2 + .../django/forms/errors/list/ul.html | 1 + .../django/forms/formsets/default.html | 1 + .../templates/django/forms/formsets/p.html | 1 + .../django/forms/formsets/table.html | 1 + .../templates/django/forms/formsets/ul.html | 1 + .../forms/templates/django/forms/label.html | 1 + .../forms/templates/django/forms/p.html | 20 + .../forms/templates/django/forms/table.html | 29 + .../forms/templates/django/forms/ul.html | 24 + .../templates/django/forms/widgets/attrs.html | 1 + .../django/forms/widgets/checkbox.html | 1 + .../django/forms/widgets/checkbox_option.html | 1 + .../django/forms/widgets/checkbox_select.html | 1 + .../forms/widgets/clearable_file_input.html | 5 + .../templates/django/forms/widgets/date.html | 1 + .../django/forms/widgets/datetime.html | 1 + .../templates/django/forms/widgets/email.html | 1 + .../templates/django/forms/widgets/file.html | 1 + .../django/forms/widgets/hidden.html | 1 + .../templates/django/forms/widgets/input.html | 1 + .../django/forms/widgets/input_option.html | 1 + .../django/forms/widgets/multiple_hidden.html | 1 + .../django/forms/widgets/multiple_input.html | 5 + .../django/forms/widgets/multiwidget.html | 1 + .../django/forms/widgets/number.html | 1 + .../django/forms/widgets/password.html | 1 + .../templates/django/forms/widgets/radio.html | 1 + .../django/forms/widgets/radio_option.html | 1 + .../django/forms/widgets/select.html | 5 + .../django/forms/widgets/select_date.html | 1 + .../django/forms/widgets/select_option.html | 1 + .../django/forms/widgets/splitdatetime.html | 1 + .../forms/widgets/splithiddendatetime.html | 1 + .../templates/django/forms/widgets/text.html | 1 + .../django/forms/widgets/textarea.html | 2 + .../templates/django/forms/widgets/time.html | 1 + .../templates/django/forms/widgets/url.html | 1 + venv/Lib/site-packages/django/forms/utils.py | 221 + .../Lib/site-packages/django/forms/widgets.py | 1172 ++ .../Lib/site-packages/django/http/__init__.py | 48 + .../http/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 998 bytes .../http/__pycache__/cookie.cpython-310.pyc | Bin 0 -> 604 bytes .../multipartparser.cpython-310.pyc | Bin 0 -> 18337 bytes .../http/__pycache__/request.cpython-310.pyc | Bin 0 -> 22555 bytes .../http/__pycache__/response.cpython-310.pyc | Bin 0 -> 21428 bytes venv/Lib/site-packages/django/http/cookie.py | 23 + .../django/http/multipartparser.py | 754 ++ venv/Lib/site-packages/django/http/request.py | 712 + .../Lib/site-packages/django/http/response.py | 654 + .../django/middleware/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 191 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 6282 bytes .../__pycache__/clickjacking.cpython-310.pyc | Bin 0 -> 1932 bytes .../__pycache__/common.cpython-310.pyc | Bin 0 -> 6170 bytes .../__pycache__/csrf.cpython-310.pyc | Bin 0 -> 12858 bytes .../__pycache__/gzip.cpython-310.pyc | Bin 0 -> 1517 bytes .../__pycache__/http.cpython-310.pyc | Bin 0 -> 1741 bytes .../__pycache__/locale.cpython-310.pyc | Bin 0 -> 2392 bytes .../__pycache__/security.cpython-310.pyc | Bin 0 -> 2736 bytes .../site-packages/django/middleware/cache.py | 206 + .../django/middleware/clickjacking.py | 48 + .../site-packages/django/middleware/common.py | 179 + .../site-packages/django/middleware/csrf.py | 465 + .../site-packages/django/middleware/gzip.py | 52 + .../site-packages/django/middleware/http.py | 40 + .../site-packages/django/middleware/locale.py | 80 + .../django/middleware/security.py | 66 + venv/Lib/site-packages/django/shortcuts.py | 155 + .../site-packages/django/template/__init__.py | 75 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1807 bytes .../__pycache__/autoreload.cpython-310.pyc | Bin 0 -> 1973 bytes .../template/__pycache__/base.cpython-310.pyc | Bin 0 -> 30737 bytes .../__pycache__/context.cpython-310.pyc | Bin 0 -> 9891 bytes .../context_processors.cpython-310.pyc | Bin 0 -> 2852 bytes .../defaultfilters.cpython-310.pyc | Bin 0 -> 25352 bytes .../__pycache__/defaulttags.cpython-310.pyc | Bin 0 -> 43007 bytes .../__pycache__/engine.cpython-310.pyc | Bin 0 -> 6695 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 1792 bytes .../__pycache__/library.cpython-310.pyc | Bin 0 -> 10347 bytes .../__pycache__/loader.cpython-310.pyc | Bin 0 -> 1961 bytes .../__pycache__/loader_tags.cpython-310.pyc | Bin 0 -> 10697 bytes .../__pycache__/response.cpython-310.pyc | Bin 0 -> 4720 bytes .../__pycache__/smartif.cpython-310.pyc | Bin 0 -> 7315 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 3626 bytes .../django/template/autoreload.py | 51 + .../django/template/backends/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../backends/__pycache__/base.cpython-310.pyc | Bin 0 -> 2689 bytes .../__pycache__/django.cpython-310.pyc | Bin 0 -> 4891 bytes .../__pycache__/dummy.cpython-310.pyc | Bin 0 -> 2248 bytes .../__pycache__/jinja2.cpython-310.pyc | Bin 0 -> 4297 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 674 bytes .../django/template/backends/base.py | 81 + .../django/template/backends/django.py | 130 + .../django/template/backends/dummy.py | 52 + .../django/template/backends/jinja2.py | 128 + .../django/template/backends/utils.py | 15 + .../Lib/site-packages/django/template/base.py | 1116 ++ .../site-packages/django/template/context.py | 290 + .../django/template/context_processors.py | 89 + .../django/template/defaultfilters.py | 976 ++ .../django/template/defaulttags.py | 1494 +++ .../site-packages/django/template/engine.py | 213 + .../django/template/exceptions.py | 44 + .../site-packages/django/template/library.py | 387 + .../site-packages/django/template/loader.py | 66 + .../django/template/loader_tags.py | 352 + .../django/template/loaders/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../app_directories.cpython-310.pyc | Bin 0 -> 720 bytes .../loaders/__pycache__/base.cpython-310.pyc | Bin 0 -> 1850 bytes .../__pycache__/cached.cpython-310.pyc | Bin 0 -> 4271 bytes .../__pycache__/filesystem.cpython-310.pyc | Bin 0 -> 1857 bytes .../__pycache__/locmem.cpython-310.pyc | Bin 0 -> 1157 bytes .../template/loaders/app_directories.py | 13 + .../django/template/loaders/base.py | 51 + .../django/template/loaders/cached.py | 100 + .../django/template/loaders/filesystem.py | 45 + .../django/template/loaders/locmem.py | 26 + .../site-packages/django/template/response.py | 164 + .../site-packages/django/template/smartif.py | 213 + .../site-packages/django/template/utils.py | 111 + .../django/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 193 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 3199 bytes .../__pycache__/i18n.cpython-310.pyc | Bin 0 -> 17054 bytes .../__pycache__/l10n.cpython-310.pyc | Bin 0 -> 2189 bytes .../__pycache__/static.cpython-310.pyc | Bin 0 -> 5105 bytes .../__pycache__/tz.cpython-310.pyc | Bin 0 -> 5918 bytes .../django/templatetags/cache.py | 100 + .../site-packages/django/templatetags/i18n.py | 615 + .../site-packages/django/templatetags/l10n.py | 63 + .../django/templatetags/static.py | 179 + .../site-packages/django/templatetags/tz.py | 227 + .../Lib/site-packages/django/test/__init__.py | 38 + .../test/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 841 bytes .../test/__pycache__/client.cpython-310.pyc | Bin 0 -> 26918 bytes .../test/__pycache__/html.cpython-310.pyc | Bin 0 -> 7564 bytes .../test/__pycache__/runner.cpython-310.pyc | Bin 0 -> 34316 bytes .../test/__pycache__/selenium.cpython-310.pyc | Bin 0 -> 4414 bytes .../test/__pycache__/signals.cpython-310.pyc | Bin 0 -> 6053 bytes .../__pycache__/testcases.cpython-310.pyc | Bin 0 -> 53097 bytes .../test/__pycache__/utils.cpython-310.pyc | Bin 0 -> 30451 bytes venv/Lib/site-packages/django/test/client.py | 1090 ++ venv/Lib/site-packages/django/test/html.py | 285 + venv/Lib/site-packages/django/test/runner.py | 1170 ++ .../Lib/site-packages/django/test/selenium.py | 134 + venv/Lib/site-packages/django/test/signals.py | 237 + .../site-packages/django/test/testcases.py | 1857 +++ venv/Lib/site-packages/django/test/utils.py | 1001 ++ .../Lib/site-packages/django/urls/__init__.py | 53 + .../urls/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1040 bytes .../urls/__pycache__/base.cpython-310.pyc | Bin 0 -> 4574 bytes .../urls/__pycache__/conf.cpython-310.pyc | Bin 0 -> 2263 bytes .../__pycache__/converters.cpython-310.pyc | Bin 0 -> 2251 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 519 bytes .../__pycache__/resolvers.cpython-310.pyc | Bin 0 -> 22058 bytes .../urls/__pycache__/utils.cpython-310.pyc | Bin 0 -> 1760 bytes venv/Lib/site-packages/django/urls/base.py | 187 + venv/Lib/site-packages/django/urls/conf.py | 91 + .../site-packages/django/urls/converters.py | 66 + .../site-packages/django/urls/exceptions.py | 9 + .../site-packages/django/urls/resolvers.py | 802 ++ venv/Lib/site-packages/django/urls/utils.py | 66 + .../site-packages/django/utils/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 186 bytes .../utils/__pycache__/_os.cpython-310.pyc | Bin 0 -> 1942 bytes .../utils/__pycache__/archive.cpython-310.pyc | Bin 0 -> 8442 bytes .../utils/__pycache__/asyncio.cpython-310.pyc | Bin 0 -> 1186 bytes .../__pycache__/autoreload.cpython-310.pyc | Bin 0 -> 20908 bytes .../__pycache__/baseconv.cpython-310.pyc | Bin 0 -> 2731 bytes .../utils/__pycache__/cache.cpython-310.pyc | Bin 0 -> 12004 bytes .../__pycache__/connection.cpython-310.pyc | Bin 0 -> 3817 bytes .../utils/__pycache__/crypto.cpython-310.pyc | Bin 0 -> 2683 bytes .../datastructures.cpython-310.pyc | Bin 0 -> 13598 bytes .../__pycache__/dateformat.cpython-310.pyc | Bin 0 -> 11391 bytes .../__pycache__/dateparse.cpython-310.pyc | Bin 0 -> 4666 bytes .../utils/__pycache__/dates.cpython-310.pyc | Bin 0 -> 1413 bytes .../__pycache__/datetime_safe.cpython-310.pyc | Bin 0 -> 2953 bytes .../__pycache__/deconstruct.cpython-310.pyc | Bin 0 -> 1840 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 0 -> 5601 bytes .../__pycache__/deprecation.cpython-310.pyc | Bin 0 -> 4855 bytes .../__pycache__/duration.cpython-310.pyc | Bin 0 -> 1274 bytes .../__pycache__/encoding.cpython-310.pyc | Bin 0 -> 6985 bytes .../__pycache__/feedgenerator.cpython-310.pyc | Bin 0 -> 12311 bytes .../utils/__pycache__/formats.cpython-310.pyc | Bin 0 -> 7706 bytes .../__pycache__/functional.cpython-310.pyc | Bin 0 -> 13984 bytes .../__pycache__/hashable.cpython-310.pyc | Bin 0 -> 863 bytes .../utils/__pycache__/html.cpython-310.pyc | Bin 0 -> 11832 bytes .../utils/__pycache__/http.cpython-310.pyc | Bin 0 -> 9998 bytes .../utils/__pycache__/inspect.cpython-310.pyc | Bin 0 -> 3022 bytes .../utils/__pycache__/ipv6.cpython-310.pyc | Bin 0 -> 1492 bytes .../__pycache__/itercompat.cpython-310.pyc | Bin 0 -> 407 bytes .../utils/__pycache__/jslex.cpython-310.pyc | Bin 0 -> 6982 bytes .../utils/__pycache__/log.cpython-310.pyc | Bin 0 -> 6709 bytes .../__pycache__/lorem_ipsum.cpython-310.pyc | Bin 0 -> 4591 bytes .../module_loading.cpython-310.pyc | Bin 0 -> 2891 bytes .../__pycache__/numberformat.cpython-310.pyc | Bin 0 -> 2214 bytes .../__pycache__/regex_helper.cpython-310.pyc | Bin 0 -> 7618 bytes .../__pycache__/safestring.cpython-310.pyc | Bin 0 -> 2521 bytes .../__pycache__/termcolors.cpython-310.pyc | Bin 0 -> 5604 bytes .../utils/__pycache__/text.cpython-310.pyc | Bin 0 -> 12314 bytes .../__pycache__/timesince.cpython-310.pyc | Bin 0 -> 2889 bytes .../__pycache__/timezone.cpython-310.pyc | Bin 0 -> 8570 bytes .../topological_sort.cpython-310.pyc | Bin 0 -> 1818 bytes .../utils/__pycache__/tree.cpython-310.pyc | Bin 0 -> 4212 bytes .../utils/__pycache__/version.cpython-310.pyc | Bin 0 -> 3238 bytes .../__pycache__/xmlutils.cpython-310.pyc | Bin 0 -> 1514 bytes venv/Lib/site-packages/django/utils/_os.py | 62 + .../Lib/site-packages/django/utils/archive.py | 257 + .../Lib/site-packages/django/utils/asyncio.py | 39 + .../site-packages/django/utils/autoreload.py | 685 + .../site-packages/django/utils/baseconv.py | 115 + venv/Lib/site-packages/django/utils/cache.py | 440 + .../site-packages/django/utils/connection.py | 76 + venv/Lib/site-packages/django/utils/crypto.py | 76 + .../django/utils/datastructures.py | 342 + .../site-packages/django/utils/dateformat.py | 335 + .../site-packages/django/utils/dateparse.py | 160 + venv/Lib/site-packages/django/utils/dates.py | 79 + .../django/utils/datetime_safe.py | 118 + .../site-packages/django/utils/deconstruct.py | 57 + .../site-packages/django/utils/decorators.py | 189 + .../site-packages/django/utils/deprecation.py | 156 + .../site-packages/django/utils/duration.py | 46 + .../site-packages/django/utils/encoding.py | 264 + .../django/utils/feedgenerator.py | 448 + .../Lib/site-packages/django/utils/formats.py | 316 + .../site-packages/django/utils/functional.py | 439 + .../site-packages/django/utils/hashable.py | 26 + venv/Lib/site-packages/django/utils/html.py | 384 + venv/Lib/site-packages/django/utils/http.py | 368 + .../Lib/site-packages/django/utils/inspect.py | 73 + venv/Lib/site-packages/django/utils/ipv6.py | 47 + .../site-packages/django/utils/itercompat.py | 8 + venv/Lib/site-packages/django/utils/jslex.py | 249 + venv/Lib/site-packages/django/utils/log.py | 250 + .../site-packages/django/utils/lorem_ipsum.py | 286 + .../django/utils/module_loading.py | 107 + .../django/utils/numberformat.py | 104 + .../django/utils/regex_helper.py | 353 + .../site-packages/django/utils/safestring.py | 65 + .../site-packages/django/utils/termcolors.py | 221 + venv/Lib/site-packages/django/utils/text.py | 458 + .../site-packages/django/utils/timesince.py | 101 + .../site-packages/django/utils/timezone.py | 341 + .../django/utils/topological_sort.py | 42 + .../django/utils/translation/__init__.py | 301 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 8869 bytes .../__pycache__/reloader.cpython-310.pyc | Bin 0 -> 1565 bytes .../__pycache__/template.cpython-310.pyc | Bin 0 -> 4801 bytes .../__pycache__/trans_null.cpython-310.pyc | Bin 0 -> 1871 bytes .../__pycache__/trans_real.cpython-310.pyc | Bin 0 -> 18029 bytes .../django/utils/translation/reloader.py | 36 + .../django/utils/translation/template.py | 246 + .../django/utils/translation/trans_null.py | 67 + .../django/utils/translation/trans_real.py | 609 + venv/Lib/site-packages/django/utils/tree.py | 124 + .../Lib/site-packages/django/utils/version.py | 120 + .../site-packages/django/utils/xmlutils.py | 35 + .../site-packages/django/views/__init__.py | 3 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 262 bytes .../views/__pycache__/csrf.cpython-310.pyc | Bin 0 -> 5489 bytes .../views/__pycache__/debug.cpython-310.pyc | Bin 0 -> 17433 bytes .../__pycache__/defaults.cpython-310.pyc | Bin 0 -> 3451 bytes .../views/__pycache__/i18n.cpython-310.pyc | Bin 0 -> 11350 bytes .../views/__pycache__/static.cpython-310.pyc | Bin 0 -> 4399 bytes venv/Lib/site-packages/django/views/csrf.py | 160 + venv/Lib/site-packages/django/views/debug.py | 622 + .../django/views/decorators/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 2549 bytes .../__pycache__/clickjacking.cpython-310.pyc | Bin 0 -> 1843 bytes .../__pycache__/common.cpython-310.pyc | Bin 0 -> 657 bytes .../__pycache__/csrf.cpython-310.pyc | Bin 0 -> 2267 bytes .../__pycache__/debug.cpython-310.pyc | Bin 0 -> 3256 bytes .../__pycache__/gzip.cpython-310.pyc | Bin 0 -> 430 bytes .../__pycache__/http.cpython-310.pyc | Bin 0 -> 4504 bytes .../__pycache__/vary.cpython-310.pyc | Bin 0 -> 1541 bytes .../django/views/decorators/cache.py | 66 + .../django/views/decorators/clickjacking.py | 59 + .../django/views/decorators/common.py | 15 + .../django/views/decorators/csrf.py | 57 + .../django/views/decorators/debug.py | 96 + .../django/views/decorators/gzip.py | 5 + .../django/views/decorators/http.py | 132 + .../django/views/decorators/vary.py | 46 + .../site-packages/django/views/defaults.py | 154 + .../django/views/generic/__init__.py | 39 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1087 bytes .../generic/__pycache__/base.cpython-310.pyc | Bin 0 -> 7699 bytes .../generic/__pycache__/dates.cpython-310.pyc | Bin 0 -> 21380 bytes .../__pycache__/detail.cpython-310.pyc | Bin 0 -> 5297 bytes .../generic/__pycache__/edit.cpython-310.pyc | Bin 0 -> 9821 bytes .../generic/__pycache__/list.cpython-310.pyc | Bin 0 -> 6522 bytes .../django/views/generic/base.py | 244 + .../django/views/generic/dates.py | 795 ++ .../django/views/generic/detail.py | 180 + .../django/views/generic/edit.py | 294 + .../django/views/generic/list.py | 220 + venv/Lib/site-packages/django/views/i18n.py | 345 + venv/Lib/site-packages/django/views/static.py | 140 + .../views/templates/default_urlconf.html | 254 + .../django/views/templates/technical_404.html | 82 + .../django/views/templates/technical_500.html | 482 + .../django/views/templates/technical_500.txt | 65 + .../pip-22.0.4.dist-info/INSTALLER | 1 + .../pip-22.0.4.dist-info/LICENSE.txt | 20 + .../pip-22.0.4.dist-info/METADATA | 92 + .../site-packages/pip-22.0.4.dist-info/RECORD | 1053 ++ .../pip-22.0.4.dist-info/REQUESTED | 0 .../site-packages/pip-22.0.4.dist-info/WHEEL | 5 + .../pip-22.0.4.dist-info/entry_points.txt | 5 + .../pip-22.0.4.dist-info/top_level.txt | 1 + venv/Lib/site-packages/pip/__init__.py | 13 + venv/Lib/site-packages/pip/__main__.py | 31 + .../pip/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 633 bytes .../pip/__pycache__/__main__.cpython-310.pyc | Bin 0 -> 595 bytes .../site-packages/pip/_internal/__init__.py | 19 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 754 bytes .../__pycache__/build_env.cpython-310.pyc | Bin 0 -> 9598 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 8381 bytes .../__pycache__/configuration.cpython-310.pyc | Bin 0 -> 11127 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 23126 bytes .../__pycache__/main.cpython-310.pyc | Bin 0 -> 619 bytes .../__pycache__/pyproject.cpython-310.pyc | Bin 0 -> 3538 bytes .../self_outdated_check.cpython-310.pyc | Bin 0 -> 4578 bytes .../__pycache__/wheel_builder.cpython-310.pyc | Bin 0 -> 9140 bytes .../site-packages/pip/_internal/build_env.py | 296 + venv/Lib/site-packages/pip/_internal/cache.py | 264 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 274 bytes .../autocompletion.cpython-310.pyc | Bin 0 -> 5309 bytes .../__pycache__/base_command.cpython-310.pyc | Bin 0 -> 6349 bytes .../__pycache__/cmdoptions.cpython-310.pyc | Bin 0 -> 22549 bytes .../command_context.cpython-310.pyc | Bin 0 -> 1308 bytes .../cli/__pycache__/main.cpython-310.pyc | Bin 0 -> 1372 bytes .../__pycache__/main_parser.cpython-310.pyc | Bin 0 -> 2158 bytes .../cli/__pycache__/parser.cpython-310.pyc | Bin 0 -> 9945 bytes .../__pycache__/progress_bars.cpython-310.pyc | Bin 0 -> 9234 bytes .../__pycache__/req_command.cpython-310.pyc | Bin 0 -> 13535 bytes .../cli/__pycache__/spinners.cpython-310.pyc | Bin 0 -> 4948 bytes .../__pycache__/status_codes.cpython-310.pyc | Bin 0 -> 353 bytes .../pip/_internal/cli/autocompletion.py | 171 + .../pip/_internal/cli/base_command.py | 223 + .../pip/_internal/cli/cmdoptions.py | 1018 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 70 + .../pip/_internal/cli/main_parser.py | 87 + .../site-packages/pip/_internal/cli/parser.py | 292 + .../pip/_internal/cli/progress_bars.py | 321 + .../pip/_internal/cli/req_command.py | 506 + .../pip/_internal/cli/spinners.py | 157 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 127 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3137 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 6178 bytes .../__pycache__/check.cpython-310.pyc | Bin 0 -> 1571 bytes .../__pycache__/completion.cpython-310.pyc | Bin 0 -> 3138 bytes .../__pycache__/configuration.cpython-310.pyc | Bin 0 -> 8320 bytes .../__pycache__/debug.cpython-310.pyc | Bin 0 -> 6687 bytes .../__pycache__/download.cpython-310.pyc | Bin 0 -> 3985 bytes .../__pycache__/freeze.cpython-310.pyc | Bin 0 -> 2636 bytes .../commands/__pycache__/hash.cpython-310.pyc | Bin 0 -> 2150 bytes .../commands/__pycache__/help.cpython-310.pyc | Bin 0 -> 1311 bytes .../__pycache__/index.cpython-310.pyc | Bin 0 -> 4634 bytes .../__pycache__/install.cpython-310.pyc | Bin 0 -> 17797 bytes .../commands/__pycache__/list.cpython-310.pyc | Bin 0 -> 10261 bytes .../__pycache__/search.cpython-310.pyc | Bin 0 -> 5364 bytes .../commands/__pycache__/show.cpython-310.pyc | Bin 0 -> 6117 bytes .../__pycache__/uninstall.cpython-310.pyc | Bin 0 -> 3108 bytes .../__pycache__/wheel.cpython-310.pyc | Bin 0 -> 4840 bytes .../pip/_internal/commands/cache.py | 223 + .../pip/_internal/commands/check.py | 53 + .../pip/_internal/commands/completion.py | 96 + .../pip/_internal/commands/configuration.py | 266 + .../pip/_internal/commands/debug.py | 202 + .../pip/_internal/commands/download.py | 140 + .../pip/_internal/commands/freeze.py | 97 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/install.py | 771 ++ .../pip/_internal/commands/list.py | 361 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 178 + .../pip/_internal/commands/uninstall.py | 105 + .../pip/_internal/commands/wheel.py | 178 + .../pip/_internal/configuration.py | 366 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 801 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 1858 bytes .../__pycache__/installed.cpython-310.pyc | Bin 0 -> 1235 bytes .../__pycache__/sdist.cpython-310.pyc | Bin 0 -> 4447 bytes .../__pycache__/wheel.cpython-310.pyc | Bin 0 -> 1602 bytes .../pip/_internal/distributions/base.py | 36 + .../pip/_internal/distributions/installed.py | 20 + .../pip/_internal/distributions/sdist.py | 127 + .../pip/_internal/distributions/wheel.py | 31 + .../site-packages/pip/_internal/exceptions.py | 658 + .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 228 bytes .../__pycache__/collector.cpython-310.pyc | Bin 0 -> 18066 bytes .../package_finder.cpython-310.pyc | Bin 0 -> 28122 bytes .../index/__pycache__/sources.cpython-310.pyc | Bin 0 -> 7121 bytes .../pip/_internal/index/collector.py | 610 + .../pip/_internal/index/package_finder.py | 1004 ++ .../pip/_internal/index/sources.py | 224 + .../pip/_internal/locations/__init__.py | 520 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 12388 bytes .../__pycache__/_distutils.cpython-310.pyc | Bin 0 -> 4656 bytes .../__pycache__/_sysconfig.cpython-310.pyc | Bin 0 -> 6239 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 1538 bytes .../pip/_internal/locations/_distutils.py | 169 + .../pip/_internal/locations/_sysconfig.py | 219 + .../pip/_internal/locations/base.py | 52 + venv/Lib/site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 62 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2294 bytes .../metadata/__pycache__/base.cpython-310.pyc | Bin 0 -> 20848 bytes .../__pycache__/pkg_resources.cpython-310.pyc | Bin 0 -> 9864 bytes .../pip/_internal/metadata/base.py | 546 + .../pip/_internal/metadata/pkg_resources.py | 256 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 262 bytes .../__pycache__/candidate.cpython-310.pyc | Bin 0 -> 1414 bytes .../__pycache__/direct_url.cpython-310.pyc | Bin 0 -> 7291 bytes .../format_control.cpython-310.pyc | Bin 0 -> 2739 bytes .../models/__pycache__/index.cpython-310.pyc | Bin 0 -> 1231 bytes .../models/__pycache__/link.cpython-310.pyc | Bin 0 -> 10163 bytes .../models/__pycache__/scheme.cpython-310.pyc | Bin 0 -> 1030 bytes .../__pycache__/search_scope.cpython-310.pyc | Bin 0 -> 3485 bytes .../selection_prefs.cpython-310.pyc | Bin 0 -> 1692 bytes .../__pycache__/target_python.cpython-310.pyc | Bin 0 -> 3447 bytes .../models/__pycache__/wheel.cpython-310.pyc | Bin 0 -> 4338 bytes .../pip/_internal/models/candidate.py | 34 + .../pip/_internal/models/direct_url.py | 220 + .../pip/_internal/models/format_control.py | 80 + .../pip/_internal/models/index.py | 28 + .../pip/_internal/models/link.py | 288 + .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 129 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 110 + .../pip/_internal/models/wheel.py | 89 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 250 bytes .../network/__pycache__/auth.cpython-310.pyc | Bin 0 -> 7530 bytes .../network/__pycache__/cache.cpython-310.pyc | Bin 0 -> 2931 bytes .../__pycache__/download.cpython-310.pyc | Bin 0 -> 5497 bytes .../__pycache__/lazy_wheel.cpython-310.pyc | Bin 0 -> 8405 bytes .../__pycache__/session.cpython-310.pyc | Bin 0 -> 10736 bytes .../network/__pycache__/utils.cpython-310.pyc | Bin 0 -> 1446 bytes .../__pycache__/xmlrpc.cpython-310.pyc | Bin 0 -> 2063 bytes .../pip/_internal/network/auth.py | 323 + .../pip/_internal/network/cache.py | 69 + .../pip/_internal/network/download.py | 185 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 454 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 60 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../__pycache__/check.cpython-310.pyc | Bin 0 -> 4011 bytes .../__pycache__/freeze.cpython-310.pyc | Bin 0 -> 6196 bytes .../__pycache__/prepare.cpython-310.pyc | Bin 0 -> 14894 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 204 bytes .../__pycache__/metadata.cpython-310.pyc | Bin 0 -> 1431 bytes .../metadata_editable.cpython-310.pyc | Bin 0 -> 1465 bytes .../metadata_legacy.cpython-310.pyc | Bin 0 -> 2376 bytes .../build/__pycache__/wheel.cpython-310.pyc | Bin 0 -> 1221 bytes .../wheel_editable.cpython-310.pyc | Bin 0 -> 1445 bytes .../__pycache__/wheel_legacy.cpython-310.pyc | Bin 0 -> 2761 bytes .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 149 + .../pip/_internal/operations/freeze.py | 254 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 262 bytes .../editable_legacy.cpython-310.pyc | Bin 0 -> 1549 bytes .../__pycache__/legacy.cpython-310.pyc | Bin 0 -> 3333 bytes .../install/__pycache__/wheel.cpython-310.pyc | Bin 0 -> 21095 bytes .../operations/install/editable_legacy.py | 47 + .../_internal/operations/install/legacy.py | 120 + .../pip/_internal/operations/install/wheel.py | 738 ++ .../pip/_internal/operations/prepare.py | 642 + .../site-packages/pip/_internal/pyproject.py | 168 + .../pip/_internal/req/__init__.py | 94 + .../req/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2598 bytes .../__pycache__/constructors.cpython-310.pyc | Bin 0 -> 12163 bytes .../req/__pycache__/req_file.cpython-310.pyc | Bin 0 -> 13493 bytes .../__pycache__/req_install.cpython-310.pyc | Bin 0 -> 22178 bytes .../req/__pycache__/req_set.cpython-310.pyc | Bin 0 -> 5840 bytes .../__pycache__/req_tracker.cpython-310.pyc | Bin 0 -> 4306 bytes .../__pycache__/req_uninstall.cpython-310.pyc | Bin 0 -> 18948 bytes .../pip/_internal/req/constructors.py | 490 + .../pip/_internal/req/req_file.py | 536 + .../pip/_internal/req/req_install.py | 858 ++ .../pip/_internal/req/req_set.py | 189 + .../pip/_internal/req/req_tracker.py | 124 + .../pip/_internal/req/req_uninstall.py | 633 + .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 1050 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../__pycache__/resolver.cpython-310.pyc | Bin 0 -> 12292 bytes .../_internal/resolution/legacy/resolver.py | 467 + .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 209 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 6452 bytes .../__pycache__/candidates.cpython-310.pyc | Bin 0 -> 18363 bytes .../__pycache__/factory.cpython-310.pyc | Bin 0 -> 19217 bytes .../found_candidates.cpython-310.pyc | Bin 0 -> 4869 bytes .../__pycache__/provider.cpython-310.pyc | Bin 0 -> 7711 bytes .../__pycache__/reporter.cpython-310.pyc | Bin 0 -> 3178 bytes .../__pycache__/requirements.cpython-310.pyc | Bin 0 -> 7467 bytes .../__pycache__/resolver.cpython-310.pyc | Bin 0 -> 8229 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 547 + .../resolution/resolvelib/factory.py | 739 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 248 + .../resolution/resolvelib/reporter.py | 68 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 298 + .../pip/_internal/self_outdated_check.py | 189 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 193 bytes .../utils/__pycache__/_log.cpython-310.pyc | Bin 0 -> 1521 bytes .../utils/__pycache__/appdirs.cpython-310.pyc | Bin 0 -> 1619 bytes .../utils/__pycache__/compat.cpython-310.pyc | Bin 0 -> 1509 bytes .../compatibility_tags.cpython-310.pyc | Bin 0 -> 4078 bytes .../__pycache__/datetime.cpython-310.pyc | Bin 0 -> 516 bytes .../__pycache__/deprecation.cpython-310.pyc | Bin 0 -> 3318 bytes .../direct_url_helpers.cpython-310.pyc | Bin 0 -> 2084 bytes .../distutils_args.cpython-310.pyc | Bin 0 -> 1100 bytes .../__pycache__/egg_link.cpython-310.pyc | Bin 0 -> 2149 bytes .../__pycache__/encoding.cpython-310.pyc | Bin 0 -> 1306 bytes .../__pycache__/entrypoints.cpython-310.pyc | Bin 0 -> 1303 bytes .../__pycache__/filesystem.cpython-310.pyc | Bin 0 -> 5161 bytes .../__pycache__/filetypes.cpython-310.pyc | Bin 0 -> 943 bytes .../utils/__pycache__/glibc.cpython-310.pyc | Bin 0 -> 1672 bytes .../utils/__pycache__/hashes.cpython-310.pyc | Bin 0 -> 5195 bytes .../inject_securetransport.cpython-310.pyc | Bin 0 -> 988 bytes .../utils/__pycache__/logging.cpython-310.pyc | Bin 0 -> 9634 bytes .../utils/__pycache__/misc.cpython-310.pyc | Bin 0 -> 18716 bytes .../utils/__pycache__/models.cpython-310.pyc | Bin 0 -> 1989 bytes .../__pycache__/packaging.cpython-310.pyc | Bin 0 -> 2081 bytes .../setuptools_build.cpython-310.pyc | Bin 0 -> 4596 bytes .../__pycache__/subprocess.cpython-310.pyc | Bin 0 -> 5775 bytes .../__pycache__/temp_dir.cpython-310.pyc | Bin 0 -> 7298 bytes .../__pycache__/unpacking.cpython-310.pyc | Bin 0 -> 6667 bytes .../utils/__pycache__/urls.cpython-310.pyc | Bin 0 -> 1594 bytes .../__pycache__/virtualenv.cpython-310.pyc | Bin 0 -> 3289 bytes .../utils/__pycache__/wheel.cpython-310.pyc | Bin 0 -> 4414 bytes .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/distutils_args.py | 42 + .../pip/_internal/utils/egg_link.py | 75 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 27 + .../pip/_internal/utils/filesystem.py | 182 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 144 + .../_internal/utils/inject_securetransport.py | 35 + .../pip/_internal/utils/logging.py | 343 + .../site-packages/pip/_internal/utils/misc.py | 629 + .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 195 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 246 + .../pip/_internal/utils/unpacking.py | 258 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 136 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 516 bytes .../vcs/__pycache__/bazaar.cpython-310.pyc | Bin 0 -> 3343 bytes .../vcs/__pycache__/git.cpython-310.pyc | Bin 0 -> 12546 bytes .../vcs/__pycache__/mercurial.cpython-310.pyc | Bin 0 -> 5062 bytes .../__pycache__/subversion.cpython-310.pyc | Bin 0 -> 8450 bytes .../versioncontrol.cpython-310.pyc | Bin 0 -> 21145 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 101 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 + .../pip/_internal/wheel_builder.py | 377 + .../Lib/site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2916 bytes .../__pycache__/distro.cpython-310.pyc | Bin 0 -> 38234 bytes .../_vendor/__pycache__/six.cpython-310.pyc | Bin 0 -> 27587 bytes .../typing_extensions.cpython-310.pyc | Bin 0 -> 66599 bytes .../pip/_vendor/cachecontrol/__init__.py | 18 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 644 bytes .../__pycache__/_cmd.cpython-310.pyc | Bin 0 -> 1582 bytes .../__pycache__/adapter.cpython-310.pyc | Bin 0 -> 3158 bytes .../__pycache__/cache.cpython-310.pyc | Bin 0 -> 1848 bytes .../__pycache__/compat.cpython-310.pyc | Bin 0 -> 758 bytes .../__pycache__/controller.cpython-310.pyc | Bin 0 -> 8218 bytes .../__pycache__/filewrapper.cpython-310.pyc | Bin 0 -> 2794 bytes .../__pycache__/heuristics.cpython-310.pyc | Bin 0 -> 4718 bytes .../__pycache__/serialize.cpython-310.pyc | Bin 0 -> 4253 bytes .../__pycache__/wrapper.cpython-310.pyc | Bin 0 -> 689 bytes .../pip/_vendor/cachecontrol/_cmd.py | 61 + .../pip/_vendor/cachecontrol/adapter.py | 137 + .../pip/_vendor/cachecontrol/cache.py | 43 + .../_vendor/cachecontrol/caches/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 295 bytes .../__pycache__/file_cache.cpython-310.pyc | Bin 0 -> 3369 bytes .../__pycache__/redis_cache.cpython-310.pyc | Bin 0 -> 1575 bytes .../_vendor/cachecontrol/caches/file_cache.py | 150 + .../cachecontrol/caches/redis_cache.py | 37 + .../pip/_vendor/cachecontrol/compat.py | 32 + .../pip/_vendor/cachecontrol/controller.py | 415 + .../pip/_vendor/cachecontrol/filewrapper.py | 111 + .../pip/_vendor/cachecontrol/heuristics.py | 139 + .../pip/_vendor/cachecontrol/serialize.py | 186 + .../pip/_vendor/cachecontrol/wrapper.py | 33 + .../pip/_vendor/certifi/__init__.py | 3 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 277 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 0 -> 456 bytes .../certifi/__pycache__/core.cpython-310.pyc | Bin 0 -> 1551 bytes .../pip/_vendor/certifi/cacert.pem | 4362 +++++++ .../site-packages/pip/_vendor/certifi/core.py | 76 + .../pip/_vendor/chardet/__init__.py | 83 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1901 bytes .../__pycache__/big5freq.cpython-310.pyc | Bin 0 -> 27180 bytes .../__pycache__/big5prober.cpython-310.pyc | Bin 0 -> 1131 bytes .../chardistribution.cpython-310.pyc | Bin 0 -> 5741 bytes .../charsetgroupprober.cpython-310.pyc | Bin 0 -> 2230 bytes .../__pycache__/charsetprober.cpython-310.pyc | Bin 0 -> 3484 bytes .../codingstatemachine.cpython-310.pyc | Bin 0 -> 2903 bytes .../__pycache__/compat.cpython-310.pyc | Bin 0 -> 402 bytes .../__pycache__/cp949prober.cpython-310.pyc | Bin 0 -> 1138 bytes .../chardet/__pycache__/enums.cpython-310.pyc | Bin 0 -> 2585 bytes .../__pycache__/escprober.cpython-310.pyc | Bin 0 -> 2632 bytes .../chardet/__pycache__/escsm.cpython-310.pyc | Bin 0 -> 8379 bytes .../__pycache__/eucjpprober.cpython-310.pyc | Bin 0 -> 2436 bytes .../__pycache__/euckrfreq.cpython-310.pyc | Bin 0 -> 12064 bytes .../__pycache__/euckrprober.cpython-310.pyc | Bin 0 -> 1139 bytes .../__pycache__/euctwfreq.cpython-310.pyc | Bin 0 -> 27184 bytes .../__pycache__/euctwprober.cpython-310.pyc | Bin 0 -> 1139 bytes .../__pycache__/gb2312freq.cpython-310.pyc | Bin 0 -> 19108 bytes .../__pycache__/gb2312prober.cpython-310.pyc | Bin 0 -> 1147 bytes .../__pycache__/hebrewprober.cpython-310.pyc | Bin 0 -> 3024 bytes .../__pycache__/jisfreq.cpython-310.pyc | Bin 0 -> 22136 bytes .../__pycache__/jpcntx.cpython-310.pyc | Bin 0 -> 37643 bytes .../langbulgarianmodel.cpython-310.pyc | Bin 0 -> 47924 bytes .../langgreekmodel.cpython-310.pyc | Bin 0 -> 46114 bytes .../langhebrewmodel.cpython-310.pyc | Bin 0 -> 44563 bytes .../langhungarianmodel.cpython-310.pyc | Bin 0 -> 47884 bytes .../langrussianmodel.cpython-310.pyc | Bin 0 -> 61017 bytes .../__pycache__/langthaimodel.cpython-310.pyc | Bin 0 -> 44739 bytes .../langturkishmodel.cpython-310.pyc | Bin 0 -> 44580 bytes .../__pycache__/latin1prober.cpython-310.pyc | Bin 0 -> 4430 bytes .../mbcharsetprober.cpython-310.pyc | Bin 0 -> 2251 bytes .../mbcsgroupprober.cpython-310.pyc | Bin 0 -> 1134 bytes .../__pycache__/mbcssm.cpython-310.pyc | Bin 0 -> 18761 bytes .../sbcharsetprober.cpython-310.pyc | Bin 0 -> 3080 bytes .../sbcsgroupprober.cpython-310.pyc | Bin 0 -> 1703 bytes .../__pycache__/sjisprober.cpython-310.pyc | Bin 0 -> 2474 bytes .../universaldetector.cpython-310.pyc | Bin 0 -> 5826 bytes .../__pycache__/utf8prober.cpython-310.pyc | Bin 0 -> 1983 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 440 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 233 + .../pip/_vendor/chardet/charsetgroupprober.py | 107 + .../pip/_vendor/chardet/charsetprober.py | 145 + .../pip/_vendor/chardet/cli/__init__.py | 1 + .../cli/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../__pycache__/chardetect.cpython-310.pyc | Bin 0 -> 2696 bytes .../pip/_vendor/chardet/cli/chardetect.py | 84 + .../pip/_vendor/chardet/codingstatemachine.py | 88 + .../pip/_vendor/chardet/compat.py | 36 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 76 + .../pip/_vendor/chardet/escprober.py | 101 + .../pip/_vendor/chardet/escsm.py | 246 + .../pip/_vendor/chardet/eucjpprober.py | 92 + .../pip/_vendor/chardet/euckrfreq.py | 195 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 387 + .../pip/_vendor/chardet/euctwprober.py | 46 + .../pip/_vendor/chardet/gb2312freq.py | 283 + .../pip/_vendor/chardet/gb2312prober.py | 46 + .../pip/_vendor/chardet/hebrewprober.py | 292 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/jpcntx.py | 233 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4650 +++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4398 +++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4383 +++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4650 +++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5718 ++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4383 +++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4383 +++++++ .../pip/_vendor/chardet/latin1prober.py | 145 + .../pip/_vendor/chardet/mbcharsetprober.py | 91 + .../pip/_vendor/chardet/mbcsgroupprober.py | 54 + .../pip/_vendor/chardet/mbcssm.py | 572 + .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 202 bytes .../__pycache__/languages.cpython-310.pyc | Bin 0 -> 7964 bytes .../pip/_vendor/chardet/metadata/languages.py | 310 + .../pip/_vendor/chardet/sbcharsetprober.py | 145 + .../pip/_vendor/chardet/sbcsgroupprober.py | 83 + .../pip/_vendor/chardet/sjisprober.py | 92 + .../pip/_vendor/chardet/universaldetector.py | 286 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 445 bytes .../colorama/__pycache__/ansi.cpython-310.pyc | Bin 0 -> 3006 bytes .../__pycache__/ansitowin32.cpython-310.pyc | Bin 0 -> 7904 bytes .../__pycache__/initialise.cpython-310.pyc | Bin 0 -> 1692 bytes .../__pycache__/win32.cpython-310.pyc | Bin 0 -> 3952 bytes .../__pycache__/winterm.cpython-310.pyc | Bin 0 -> 4569 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 258 + .../pip/_vendor/colorama/initialise.py | 80 + .../pip/_vendor/colorama/win32.py | 152 + .../pip/_vendor/colorama/winterm.py | 169 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1064 bytes .../__pycache__/compat.cpython-310.pyc | Bin 0 -> 31538 bytes .../__pycache__/database.cpython-310.pyc | Bin 0 -> 42618 bytes .../distlib/__pycache__/index.cpython-310.pyc | Bin 0 -> 17319 bytes .../__pycache__/locators.cpython-310.pyc | Bin 0 -> 38385 bytes .../__pycache__/manifest.cpython-310.pyc | Bin 0 -> 10232 bytes .../__pycache__/markers.cpython-310.pyc | Bin 0 -> 4956 bytes .../__pycache__/metadata.cpython-310.pyc | Bin 0 -> 26564 bytes .../__pycache__/resources.cpython-310.pyc | Bin 0 -> 11038 bytes .../__pycache__/scripts.cpython-310.pyc | Bin 0 -> 11256 bytes .../distlib/__pycache__/util.cpython-310.pyc | Bin 0 -> 52576 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 20153 bytes .../distlib/__pycache__/wheel.cpython-310.pyc | Bin 0 -> 27311 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 485 bytes .../__pycache__/misc.cpython-310.pyc | Bin 0 -> 1107 bytes .../__pycache__/shutil.cpython-310.pyc | Bin 0 -> 21544 bytes .../__pycache__/sysconfig.cpython-310.pyc | Bin 0 -> 15899 bytes .../__pycache__/tarfile.cpython-310.pyc | Bin 0 -> 62482 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 + .../pip/_vendor/distlib/_backport/shutil.py | 764 ++ .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../_vendor/distlib/_backport/sysconfig.py | 786 ++ .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ++++ .../pip/_vendor/distlib/compat.py | 1122 ++ .../pip/_vendor/distlib/database.py | 1339 ++ .../pip/_vendor/distlib/index.py | 509 + .../pip/_vendor/distlib/locators.py | 1300 ++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 147 + .../pip/_vendor/distlib/metadata.py | 1058 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 429 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 96768 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 180736 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 105984 bytes .../site-packages/pip/_vendor/distlib/util.py | 1969 +++ .../pip/_vendor/distlib/version.py | 739 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 90112 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 166400 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 99840 bytes .../pip/_vendor/distlib/wheel.py | 1053 ++ venv/Lib/site-packages/pip/_vendor/distro.py | 1386 ++ .../pip/_vendor/html5lib/__init__.py | 35 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1304 bytes .../__pycache__/_ihatexml.cpython-310.pyc | Bin 0 -> 13861 bytes .../__pycache__/_inputstream.cpython-310.pyc | Bin 0 -> 21680 bytes .../__pycache__/_tokenizer.cpython-310.pyc | Bin 0 -> 37362 bytes .../__pycache__/_utils.cpython-310.pyc | Bin 0 -> 4798 bytes .../__pycache__/constants.cpython-310.pyc | Bin 0 -> 161263 bytes .../__pycache__/html5parser.cpython-310.pyc | Bin 0 -> 88521 bytes .../__pycache__/serializer.cpython-310.pyc | Bin 0 -> 10745 bytes .../pip/_vendor/html5lib/_ihatexml.py | 289 + .../pip/_vendor/html5lib/_inputstream.py | 918 ++ .../pip/_vendor/html5lib/_tokenizer.py | 1735 +++ .../pip/_vendor/html5lib/_trie/__init__.py | 5 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 354 bytes .../_trie/__pycache__/_base.cpython-310.pyc | Bin 0 -> 1606 bytes .../_trie/__pycache__/py.cpython-310.pyc | Bin 0 -> 2269 bytes .../pip/_vendor/html5lib/_trie/_base.py | 40 + .../pip/_vendor/html5lib/_trie/py.py | 67 + .../pip/_vendor/html5lib/_utils.py | 159 + .../pip/_vendor/html5lib/constants.py | 2946 +++++ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 202 bytes .../alphabeticalattributes.cpython-310.pyc | Bin 0 -> 1332 bytes .../filters/__pycache__/base.cpython-310.pyc | Bin 0 -> 872 bytes .../inject_meta_charset.cpython-310.pyc | Bin 0 -> 1870 bytes .../filters/__pycache__/lint.cpython-310.pyc | Bin 0 -> 2578 bytes .../__pycache__/optionaltags.cpython-310.pyc | Bin 0 -> 2731 bytes .../__pycache__/sanitizer.cpython-310.pyc | Bin 0 -> 20036 bytes .../__pycache__/whitespace.cpython-310.pyc | Bin 0 -> 1378 bytes .../filters/alphabeticalattributes.py | 29 + .../pip/_vendor/html5lib/filters/base.py | 12 + .../html5lib/filters/inject_meta_charset.py | 73 + .../pip/_vendor/html5lib/filters/lint.py | 93 + .../_vendor/html5lib/filters/optionaltags.py | 207 + .../pip/_vendor/html5lib/filters/sanitizer.py | 916 ++ .../_vendor/html5lib/filters/whitespace.py | 38 + .../pip/_vendor/html5lib/html5parser.py | 2795 ++++ .../pip/_vendor/html5lib/serializer.py | 409 + .../_vendor/html5lib/treeadapters/__init__.py | 30 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 943 bytes .../__pycache__/genshi.cpython-310.pyc | Bin 0 -> 1555 bytes .../__pycache__/sax.cpython-310.pyc | Bin 0 -> 1462 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 + .../pip/_vendor/html5lib/treeadapters/sax.py | 50 + .../_vendor/html5lib/treebuilders/__init__.py | 88 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3334 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 11327 bytes .../__pycache__/dom.cpython-310.pyc | Bin 0 -> 9414 bytes .../__pycache__/etree.cpython-310.pyc | Bin 0 -> 11714 bytes .../__pycache__/etree_lxml.cpython-310.pyc | Bin 0 -> 13033 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 + .../pip/_vendor/html5lib/treebuilders/dom.py | 239 + .../_vendor/html5lib/treebuilders/etree.py | 343 + .../html5lib/treebuilders/etree_lxml.py | 392 + .../_vendor/html5lib/treewalkers/__init__.py | 154 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3984 bytes .../__pycache__/base.cpython-310.pyc | Bin 0 -> 6945 bytes .../__pycache__/dom.cpython-310.pyc | Bin 0 -> 1716 bytes .../__pycache__/etree.cpython-310.pyc | Bin 0 -> 3474 bytes .../__pycache__/etree_lxml.cpython-310.pyc | Bin 0 -> 6561 bytes .../__pycache__/genshi.cpython-310.pyc | Bin 0 -> 1922 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 + .../pip/_vendor/html5lib/treewalkers/dom.py | 43 + .../pip/_vendor/html5lib/treewalkers/etree.py | 131 + .../html5lib/treewalkers/etree_lxml.py | 215 + .../_vendor/html5lib/treewalkers/genshi.py | 69 + .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 849 bytes .../idna/__pycache__/codec.cpython-310.pyc | Bin 0 -> 2820 bytes .../idna/__pycache__/compat.cpython-310.pyc | Bin 0 -> 749 bytes .../idna/__pycache__/core.cpython-310.pyc | Bin 0 -> 9592 bytes .../idna/__pycache__/idnadata.cpython-310.pyc | Bin 0 -> 38227 bytes .../__pycache__/intranges.cpython-310.pyc | Bin 0 -> 1986 bytes .../__pycache__/package_data.cpython-310.pyc | Bin 0 -> 213 bytes .../__pycache__/uts46data.cpython-310.pyc | Bin 0 -> 150948 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 397 + .../pip/_vendor/idna/idnadata.py | 2137 +++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8512 ++++++++++++ .../pip/_vendor/msgpack/__init__.py | 54 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1429 bytes .../__pycache__/_version.cpython-310.pyc | Bin 0 -> 220 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 1810 bytes .../msgpack/__pycache__/ext.cpython-310.pyc | Bin 0 -> 6318 bytes .../__pycache__/fallback.cpython-310.pyc | Bin 0 -> 25447 bytes .../pip/_vendor/msgpack/_version.py | 1 + .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1012 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-310.pyc | Bin 0 -> 592 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 448 bytes .../__pycache__/_manylinux.cpython-310.pyc | Bin 0 -> 7302 bytes .../__pycache__/_musllinux.cpython-310.pyc | Bin 0 -> 4614 bytes .../__pycache__/_structures.cpython-310.pyc | Bin 0 -> 2707 bytes .../__pycache__/markers.cpython-310.pyc | Bin 0 -> 9291 bytes .../__pycache__/requirements.cpython-310.pyc | Bin 0 -> 3977 bytes .../__pycache__/specifiers.cpython-310.pyc | Bin 0 -> 21529 bytes .../__pycache__/tags.cpython-310.pyc | Bin 0 -> 12198 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 3577 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 12927 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pep517/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 315 bytes .../pep517/__pycache__/build.cpython-310.pyc | Bin 0 -> 3598 bytes .../pep517/__pycache__/check.cpython-310.pyc | Bin 0 -> 4562 bytes .../__pycache__/colorlog.cpython-310.pyc | Bin 0 -> 2966 bytes .../pep517/__pycache__/compat.cpython-310.pyc | Bin 0 -> 1539 bytes .../__pycache__/dirtools.cpython-310.pyc | Bin 0 -> 1357 bytes .../__pycache__/envbuild.cpython-310.pyc | Bin 0 -> 4380 bytes .../pep517/__pycache__/meta.cpython-310.pyc | Bin 0 -> 2962 bytes .../__pycache__/wrappers.cpython-310.pyc | Bin 0 -> 12308 bytes .../site-packages/pip/_vendor/pep517/build.py | 127 + .../site-packages/pip/_vendor/pep517/check.py | 207 + .../pip/_vendor/pep517/colorlog.py | 115 + .../pip/_vendor/pep517/compat.py | 51 + .../pip/_vendor/pep517/dirtools.py | 44 + .../pip/_vendor/pep517/envbuild.py | 171 + .../pip/_vendor/pep517/in_process/__init__.py | 17 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 923 bytes .../__pycache__/_in_process.cpython-310.pyc | Bin 0 -> 10070 bytes .../_vendor/pep517/in_process/_in_process.py | 363 + .../site-packages/pip/_vendor/pep517/meta.py | 92 + .../pip/_vendor/pep517/wrappers.py | 375 + .../pip/_vendor/pkg_resources/__init__.py | 3296 +++++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 99892 bytes .../__pycache__/py31compat.cpython-310.pyc | Bin 0 -> 662 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 + .../pip/_vendor/platformdirs/__init__.py | 331 + .../pip/_vendor/platformdirs/__main__.py | 46 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 10478 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 0 -> 1238 bytes .../__pycache__/android.cpython-310.pyc | Bin 0 -> 4270 bytes .../__pycache__/api.cpython-310.pyc | Bin 0 -> 5204 bytes .../__pycache__/macos.cpython-310.pyc | Bin 0 -> 3192 bytes .../__pycache__/unix.cpython-310.pyc | Bin 0 -> 6893 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 297 bytes .../__pycache__/windows.cpython-310.pyc | Bin 0 -> 6436 bytes .../pip/_vendor/platformdirs/android.py | 119 + .../pip/_vendor/platformdirs/api.py | 156 + .../pip/_vendor/platformdirs/macos.py | 64 + .../pip/_vendor/platformdirs/unix.py | 181 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 182 + .../pip/_vendor/progress/__init__.py | 189 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 5734 bytes .../progress/__pycache__/bar.cpython-310.pyc | Bin 0 -> 2697 bytes .../__pycache__/colors.cpython-310.pyc | Bin 0 -> 1490 bytes .../__pycache__/counter.cpython-310.pyc | Bin 0 -> 1561 bytes .../__pycache__/spinner.cpython-310.pyc | Bin 0 -> 1391 bytes .../site-packages/pip/_vendor/progress/bar.py | 93 + .../pip/_vendor/progress/colors.py | 79 + .../pip/_vendor/progress/counter.py | 47 + .../pip/_vendor/progress/spinner.py | 45 + .../pip/_vendor/pygments/__init__.py | 83 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3002 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 0 -> 590 bytes .../__pycache__/cmdline.cpython-310.pyc | Bin 0 -> 15455 bytes .../__pycache__/console.cpython-310.pyc | Bin 0 -> 1885 bytes .../__pycache__/filter.cpython-310.pyc | Bin 0 -> 2656 bytes .../__pycache__/formatter.cpython-310.pyc | Bin 0 -> 3012 bytes .../__pycache__/lexer.cpython-310.pyc | Bin 0 -> 24368 bytes .../__pycache__/modeline.cpython-310.pyc | Bin 0 -> 1194 bytes .../__pycache__/plugin.cpython-310.pyc | Bin 0 -> 2046 bytes .../__pycache__/regexopt.cpython-310.pyc | Bin 0 -> 2958 bytes .../__pycache__/scanner.cpython-310.pyc | Bin 0 -> 3559 bytes .../__pycache__/sphinxext.cpython-310.pyc | Bin 0 -> 4544 bytes .../__pycache__/style.cpython-310.pyc | Bin 0 -> 4581 bytes .../__pycache__/token.cpython-310.pyc | Bin 0 -> 4653 bytes .../__pycache__/unistring.cpython-310.pyc | Bin 0 -> 31207 bytes .../pygments/__pycache__/util.cpython-310.pyc | Bin 0 -> 9164 bytes .../pip/_vendor/pygments/cmdline.py | 663 + .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 937 ++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 29519 bytes .../pip/_vendor/pygments/formatter.py | 94 + .../_vendor/pygments/formatters/__init__.py | 153 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 4670 bytes .../__pycache__/_mapping.cpython-310.pyc | Bin 0 -> 5537 bytes .../__pycache__/bbcode.cpython-310.pyc | Bin 0 -> 3087 bytes .../__pycache__/groff.cpython-310.pyc | Bin 0 -> 4360 bytes .../__pycache__/html.cpython-310.pyc | Bin 0 -> 29073 bytes .../__pycache__/img.cpython-310.pyc | Bin 0 -> 17499 bytes .../__pycache__/irc.cpython-310.pyc | Bin 0 -> 4590 bytes .../__pycache__/latex.cpython-310.pyc | Bin 0 -> 13496 bytes .../__pycache__/other.cpython-310.pyc | Bin 0 -> 4806 bytes .../__pycache__/pangomarkup.cpython-310.pyc | Bin 0 -> 2106 bytes .../__pycache__/rtf.cpython-310.pyc | Bin 0 -> 4136 bytes .../__pycache__/svg.cpython-310.pyc | Bin 0 -> 6334 bytes .../__pycache__/terminal.cpython-310.pyc | Bin 0 -> 4001 bytes .../__pycache__/terminal256.cpython-310.pyc | Bin 0 -> 9251 bytes .../_vendor/pygments/formatters/_mapping.py | 84 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 168 + .../pip/_vendor/pygments/formatters/html.py | 983 ++ .../pip/_vendor/pygments/formatters/img.py | 641 + .../pip/_vendor/pygments/formatters/irc.py | 179 + .../pip/_vendor/pygments/formatters/latex.py | 511 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 879 ++ .../pip/_vendor/pygments/lexers/__init__.py | 341 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 9186 bytes .../__pycache__/_mapping.cpython-310.pyc | Bin 0 -> 58124 bytes .../lexers/__pycache__/python.cpython-310.pyc | Bin 0 -> 29385 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 580 + .../pip/_vendor/pygments/lexers/python.py | 1188 ++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 69 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 155 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 93 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 3222 bytes .../pip/_vendor/pygments/token.py | 212 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 308 + .../pip/_vendor/pyparsing/__init__.py | 328 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 7127 bytes .../__pycache__/actions.cpython-310.pyc | Bin 0 -> 7184 bytes .../__pycache__/common.cpython-310.pyc | Bin 0 -> 10107 bytes .../__pycache__/core.cpython-310.pyc | Bin 0 -> 175301 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 9074 bytes .../__pycache__/helpers.cpython-310.pyc | Bin 0 -> 34769 bytes .../__pycache__/results.cpython-310.pyc | Bin 0 -> 24787 bytes .../__pycache__/testing.cpython-310.pyc | Bin 0 -> 12104 bytes .../__pycache__/unicode.cpython-310.pyc | Bin 0 -> 9816 bytes .../__pycache__/util.cpython-310.pyc | Bin 0 -> 8607 bytes .../pip/_vendor/pyparsing/actions.py | 207 + .../pip/_vendor/pyparsing/common.py | 424 + .../pip/_vendor/pyparsing/core.py | 5789 ++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 593 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 15659 bytes .../pip/_vendor/pyparsing/exceptions.py | 267 + .../pip/_vendor/pyparsing/helpers.py | 1069 ++ .../pip/_vendor/pyparsing/results.py | 760 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 332 + .../pip/_vendor/pyparsing/util.py | 235 + .../pip/_vendor/requests/__init__.py | 154 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 4040 bytes .../__pycache__/__version__.cpython-310.pyc | Bin 0 -> 557 bytes .../_internal_utils.cpython-310.pyc | Bin 0 -> 1309 bytes .../__pycache__/adapters.cpython-310.pyc | Bin 0 -> 17045 bytes .../requests/__pycache__/api.cpython-310.pyc | Bin 0 -> 6656 bytes .../requests/__pycache__/auth.cpython-310.pyc | Bin 0 -> 8099 bytes .../__pycache__/certs.cpython-310.pyc | Bin 0 -> 641 bytes .../__pycache__/compat.cpython-310.pyc | Bin 0 -> 1676 bytes .../__pycache__/cookies.cpython-310.pyc | Bin 0 -> 18701 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 5250 bytes .../requests/__pycache__/help.cpython-310.pyc | Bin 0 -> 2909 bytes .../__pycache__/hooks.cpython-310.pyc | Bin 0 -> 996 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 24315 bytes .../__pycache__/packages.cpython-310.pyc | Bin 0 -> 510 bytes .../__pycache__/sessions.cpython-310.pyc | Bin 0 -> 19631 bytes .../__pycache__/status_codes.cpython-310.pyc | Bin 0 -> 4673 bytes .../__pycache__/structures.cpython-310.pyc | Bin 0 -> 4455 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 24398 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 42 + .../pip/_vendor/requests/adapters.py | 538 + .../site-packages/pip/_vendor/requests/api.py | 159 + .../pip/_vendor/requests/auth.py | 305 + .../pip/_vendor/requests/certs.py | 18 + .../pip/_vendor/requests/compat.py | 77 + .../pip/_vendor/requests/cookies.py | 549 + .../pip/_vendor/requests/exceptions.py | 133 + .../pip/_vendor/requests/help.py | 132 + .../pip/_vendor/requests/hooks.py | 34 + .../pip/_vendor/requests/models.py | 973 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 771 ++ .../pip/_vendor/requests/status_codes.py | 123 + .../pip/_vendor/requests/structures.py | 105 + .../pip/_vendor/requests/utils.py | 1060 ++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 608 bytes .../__pycache__/providers.cpython-310.pyc | Bin 0 -> 6659 bytes .../__pycache__/reporters.cpython-310.pyc | Bin 0 -> 2579 bytes .../__pycache__/resolvers.cpython-310.pyc | Bin 0 -> 15132 bytes .../__pycache__/structs.cpython-310.pyc | Bin 0 -> 7165 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 203 bytes .../collections_abc.cpython-310.pyc | Bin 0 -> 379 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 482 + .../pip/_vendor/resolvelib/structs.py | 165 + .../pip/_vendor/rich/__init__.py | 172 + .../pip/_vendor/rich/__main__.py | 280 + .../rich/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 5893 bytes .../rich/__pycache__/__main__.cpython-310.pyc | Bin 0 -> 7327 bytes .../__pycache__/_cell_widths.cpython-310.pyc | Bin 0 -> 7816 bytes .../__pycache__/_emoji_codes.cpython-310.pyc | Bin 0 -> 360056 bytes .../_emoji_replace.cpython-310.pyc | Bin 0 -> 1196 bytes .../__pycache__/_extension.cpython-310.pyc | Bin 0 -> 497 bytes .../rich/__pycache__/_inspect.cpython-310.pyc | Bin 0 -> 6614 bytes .../__pycache__/_log_render.cpython-310.pyc | Bin 0 -> 2642 bytes .../rich/__pycache__/_loop.cpython-310.pyc | Bin 0 -> 1294 bytes .../__pycache__/_lru_cache.cpython-310.pyc | Bin 0 -> 1577 bytes .../__pycache__/_palettes.cpython-310.pyc | Bin 0 -> 5099 bytes .../rich/__pycache__/_pick.cpython-310.pyc | Bin 0 -> 642 bytes .../rich/__pycache__/_ratio.cpython-310.pyc | Bin 0 -> 5161 bytes .../__pycache__/_spinners.cpython-310.pyc | Bin 0 -> 15215 bytes .../rich/__pycache__/_stack.cpython-310.pyc | Bin 0 -> 840 bytes .../rich/__pycache__/_timer.cpython-310.pyc | Bin 0 -> 689 bytes .../rich/__pycache__/_windows.cpython-310.pyc | Bin 0 -> 1880 bytes .../rich/__pycache__/_wrap.cpython-310.pyc | Bin 0 -> 1518 bytes .../rich/__pycache__/abc.cpython-310.pyc | Bin 0 -> 1316 bytes .../rich/__pycache__/align.cpython-310.pyc | Bin 0 -> 7970 bytes .../rich/__pycache__/ansi.cpython-310.pyc | Bin 0 -> 6019 bytes .../rich/__pycache__/bar.cpython-310.pyc | Bin 0 -> 2985 bytes .../rich/__pycache__/box.cpython-310.pyc | Bin 0 -> 7759 bytes .../rich/__pycache__/cells.cpython-310.pyc | Bin 0 -> 3501 bytes .../rich/__pycache__/color.cpython-310.pyc | Bin 0 -> 16757 bytes .../__pycache__/color_triplet.cpython-310.pyc | Bin 0 -> 1439 bytes .../rich/__pycache__/columns.cpython-310.pyc | Bin 0 -> 6199 bytes .../rich/__pycache__/console.cpython-310.pyc | Bin 0 -> 70446 bytes .../__pycache__/constrain.cpython-310.pyc | Bin 0 -> 1756 bytes .../__pycache__/containers.cpython-310.pyc | Bin 0 -> 6488 bytes .../rich/__pycache__/control.cpython-310.pyc | Bin 0 -> 6831 bytes .../default_styles.cpython-310.pyc | Bin 0 -> 6031 bytes .../rich/__pycache__/diagnose.cpython-310.pyc | Bin 0 -> 357 bytes .../rich/__pycache__/emoji.cpython-310.pyc | Bin 0 -> 3269 bytes .../rich/__pycache__/errors.cpython-310.pyc | Bin 0 -> 1529 bytes .../__pycache__/file_proxy.cpython-310.pyc | Bin 0 -> 2266 bytes .../rich/__pycache__/filesize.cpython-310.pyc | Bin 0 -> 2618 bytes .../__pycache__/highlighter.cpython-310.pyc | Bin 0 -> 5345 bytes .../rich/__pycache__/json.cpython-310.pyc | Bin 0 -> 4749 bytes .../rich/__pycache__/jupyter.cpython-310.pyc | Bin 0 -> 3828 bytes .../rich/__pycache__/layout.cpython-310.pyc | Bin 0 -> 14680 bytes .../rich/__pycache__/live.cpython-310.pyc | Bin 0 -> 11570 bytes .../__pycache__/live_render.cpython-310.pyc | Bin 0 -> 3404 bytes .../rich/__pycache__/logging.cpython-310.pyc | Bin 0 -> 9298 bytes .../rich/__pycache__/markup.cpython-310.pyc | Bin 0 -> 5915 bytes .../rich/__pycache__/measure.cpython-310.pyc | Bin 0 -> 5060 bytes .../rich/__pycache__/padding.cpython-310.pyc | Bin 0 -> 4484 bytes .../rich/__pycache__/pager.cpython-310.pyc | Bin 0 -> 1497 bytes .../rich/__pycache__/palette.cpython-310.pyc | Bin 0 -> 3710 bytes .../rich/__pycache__/panel.cpython-310.pyc | Bin 0 -> 6393 bytes .../rich/__pycache__/pretty.cpython-310.pyc | Bin 0 -> 25111 bytes .../rich/__pycache__/progress.cpython-310.pyc | Bin 0 -> 33339 bytes .../__pycache__/progress_bar.cpython-310.pyc | Bin 0 -> 6709 bytes .../rich/__pycache__/prompt.cpython-310.pyc | Bin 0 -> 11303 bytes .../rich/__pycache__/protocol.cpython-310.pyc | Bin 0 -> 1373 bytes .../rich/__pycache__/region.cpython-310.pyc | Bin 0 -> 529 bytes .../rich/__pycache__/repr.cpython-310.pyc | Bin 0 -> 4042 bytes .../rich/__pycache__/rule.cpython-310.pyc | Bin 0 -> 3739 bytes .../rich/__pycache__/scope.cpython-310.pyc | Bin 0 -> 2990 bytes .../rich/__pycache__/screen.cpython-310.pyc | Bin 0 -> 1881 bytes .../rich/__pycache__/segment.cpython-310.pyc | Bin 0 -> 20571 bytes .../rich/__pycache__/spinner.cpython-310.pyc | Bin 0 -> 4401 bytes .../rich/__pycache__/status.cpython-310.pyc | Bin 0 -> 4595 bytes .../rich/__pycache__/style.cpython-310.pyc | Bin 0 -> 20524 bytes .../rich/__pycache__/styled.cpython-310.pyc | Bin 0 -> 1765 bytes .../rich/__pycache__/syntax.cpython-310.pyc | Bin 0 -> 19040 bytes .../rich/__pycache__/table.cpython-310.pyc | Bin 0 -> 26984 bytes .../rich/__pycache__/tabulate.cpython-310.pyc | Bin 0 -> 1758 bytes .../terminal_theme.cpython-310.pyc | Bin 0 -> 1722 bytes .../rich/__pycache__/text.cpython-310.pyc | Bin 0 -> 39298 bytes .../rich/__pycache__/theme.cpython-310.pyc | Bin 0 -> 4702 bytes .../rich/__pycache__/themes.cpython-310.pyc | Bin 0 -> 295 bytes .../__pycache__/traceback.cpython-310.pyc | Bin 0 -> 19541 bytes .../rich/__pycache__/tree.cpython-310.pyc | Bin 0 -> 7319 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_extension.py | 10 + .../pip/_vendor/rich/_inspect.py | 210 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_lru_cache.py | 34 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 848 ++ .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_windows.py | 72 + .../site-packages/pip/_vendor/rich/_wrap.py | 55 + .../Lib/site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 312 + .../site-packages/pip/_vendor/rich/ansi.py | 228 + .../Lib/site-packages/pip/_vendor/rich/bar.py | 94 + .../Lib/site-packages/pip/_vendor/rich/box.py | 483 + .../site-packages/pip/_vendor/rich/cells.py | 147 + .../site-packages/pip/_vendor/rich/color.py | 581 + .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2211 ++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 175 + .../pip/_vendor/rich/default_styles.py | 183 + .../pip/_vendor/rich/diagnose.py | 6 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 54 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 147 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 92 + .../site-packages/pip/_vendor/rich/layout.py | 444 + .../site-packages/pip/_vendor/rich/live.py | 365 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 268 + .../site-packages/pip/_vendor/rich/markup.py | 244 + .../site-packages/pip/_vendor/rich/measure.py | 149 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 250 + .../site-packages/pip/_vendor/rich/pretty.py | 903 ++ .../pip/_vendor/rich/progress.py | 1036 ++ .../pip/_vendor/rich/progress_bar.py | 216 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 151 + .../site-packages/pip/_vendor/rich/rule.py | 115 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 720 + .../site-packages/pip/_vendor/rich/spinner.py | 134 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 785 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 735 ++ .../site-packages/pip/_vendor/rich/table.py | 968 ++ .../pip/_vendor/rich/tabulate.py | 51 + .../pip/_vendor/rich/terminal_theme.py | 55 + .../site-packages/pip/_vendor/rich/text.py | 1282 ++ .../site-packages/pip/_vendor/rich/theme.py | 112 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 678 + .../site-packages/pip/_vendor/rich/tree.py | 249 + venv/Lib/site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 517 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 16376 bytes .../__pycache__/_asyncio.cpython-310.pyc | Bin 0 -> 2616 bytes .../__pycache__/_utils.cpython-310.pyc | Bin 0 -> 1229 bytes .../__pycache__/after.cpython-310.pyc | Bin 0 -> 1233 bytes .../__pycache__/before.cpython-310.pyc | Bin 0 -> 1111 bytes .../__pycache__/before_sleep.cpython-310.pyc | Bin 0 -> 1413 bytes .../tenacity/__pycache__/nap.cpython-310.pyc | Bin 0 -> 1201 bytes .../__pycache__/retry.cpython-310.pyc | Bin 0 -> 8431 bytes .../tenacity/__pycache__/stop.cpython-310.pyc | Bin 0 -> 4019 bytes .../__pycache__/tornadoweb.cpython-310.pyc | Bin 0 -> 1766 bytes .../tenacity/__pycache__/wait.cpython-310.pyc | Bin 0 -> 7963 bytes .../pip/_vendor/tenacity/_asyncio.py | 92 + .../pip/_vendor/tenacity/_utils.py | 68 + .../pip/_vendor/tenacity/after.py | 46 + .../pip/_vendor/tenacity/before.py | 41 + .../pip/_vendor/tenacity/before_sleep.py | 58 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 213 + .../pip/_vendor/tenacity/stop.py | 96 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 191 + .../pip/_vendor/tomli/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 381 bytes .../tomli/__pycache__/_parser.cpython-310.pyc | Bin 0 -> 16335 bytes .../tomli/__pycache__/_re.cpython-310.pyc | Bin 0 -> 2425 bytes .../pip/_vendor/tomli/_parser.py | 703 + .../site-packages/pip/_vendor/tomli/_re.py | 83 + .../pip/_vendor/typing_extensions.py | 2296 ++++ .../pip/_vendor/urllib3/__init__.py | 85 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2191 bytes .../__pycache__/_collections.cpython-310.pyc | Bin 0 -> 10865 bytes .../__pycache__/_version.cpython-310.pyc | Bin 0 -> 215 bytes .../__pycache__/connection.cpython-310.pyc | Bin 0 -> 13646 bytes .../connectionpool.cpython-310.pyc | Bin 0 -> 25376 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 10996 bytes .../__pycache__/fields.cpython-310.pyc | Bin 0 -> 8187 bytes .../__pycache__/filepost.cpython-310.pyc | Bin 0 -> 2752 bytes .../__pycache__/poolmanager.cpython-310.pyc | Bin 0 -> 15204 bytes .../__pycache__/request.cpython-310.pyc | Bin 0 -> 5628 bytes .../__pycache__/response.cpython-310.pyc | Bin 0 -> 20929 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 569 + .../pip/_vendor/urllib3/connectionpool.py | 1108 ++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 201 bytes .../_appengine_environ.cpython-310.pyc | Bin 0 -> 1381 bytes .../__pycache__/appengine.cpython-310.pyc | Bin 0 -> 8197 bytes .../__pycache__/ntlmpool.cpython-310.pyc | Bin 0 -> 3636 bytes .../__pycache__/pyopenssl.cpython-310.pyc | Bin 0 -> 15540 bytes .../securetransport.cpython-310.pyc | Bin 0 -> 21943 bytes .../contrib/__pycache__/socks.cpython-310.pyc | Bin 0 -> 5603 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 218 bytes .../__pycache__/bindings.cpython-310.pyc | Bin 0 -> 10714 bytes .../__pycache__/low_level.cpython-310.pyc | Bin 0 -> 9101 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 511 + .../urllib3/contrib/securetransport.py | 922 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 202 bytes .../packages/__pycache__/six.cpython-310.pyc | Bin 0 -> 27662 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 212 bytes .../__pycache__/makefile.cpython-310.pyc | Bin 0 -> 1312 bytes .../urllib3/packages/backports/makefile.py | 51 + .../pip/_vendor/urllib3/packages/six.py | 1077 ++ .../pip/_vendor/urllib3/poolmanager.py | 536 + .../pip/_vendor/urllib3/request.py | 170 + .../pip/_vendor/urllib3/response.py | 821 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 1111 bytes .../__pycache__/connection.cpython-310.pyc | Bin 0 -> 3439 bytes .../util/__pycache__/proxy.cpython-310.pyc | Bin 0 -> 1346 bytes .../util/__pycache__/queue.cpython-310.pyc | Bin 0 -> 1066 bytes .../util/__pycache__/request.cpython-310.pyc | Bin 0 -> 3474 bytes .../util/__pycache__/response.cpython-310.pyc | Bin 0 -> 2359 bytes .../util/__pycache__/retry.cpython-310.pyc | Bin 0 -> 16144 bytes .../util/__pycache__/ssl_.cpython-310.pyc | Bin 0 -> 11313 bytes .../ssl_match_hostname.cpython-310.pyc | Bin 0 -> 3283 bytes .../__pycache__/ssltransport.cpython-310.pyc | Bin 0 -> 7401 bytes .../util/__pycache__/timeout.cpython-310.pyc | Bin 0 -> 8943 bytes .../util/__pycache__/url.cpython-310.pyc | Bin 0 -> 10686 bytes .../util/__pycache__/wait.cpython-310.pyc | Bin 0 -> 3095 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 143 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 + .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 161 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 268 + .../pip/_vendor/urllib3/util/url.py | 432 + .../pip/_vendor/urllib3/util/wait.py | 153 + venv/Lib/site-packages/pip/_vendor/vendor.txt | 25 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 9748 bytes .../__pycache__/labels.cpython-310.pyc | Bin 0 -> 5238 bytes .../__pycache__/mklabels.cpython-310.pyc | Bin 0 -> 1943 bytes .../__pycache__/tests.cpython-310.pyc | Bin 0 -> 5045 bytes .../x_user_defined.cpython-310.pyc | Bin 0 -> 2594 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + venv/Lib/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3288 +++++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 100044 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes .../__pycache__/appdirs.cpython-310.pyc | Bin 0 -> 20256 bytes .../__pycache__/pyparsing.cpython-310.pyc | Bin 0 -> 198811 bytes .../pkg_resources/_vendor/appdirs.py | 608 + .../_vendor/packaging/__about__.py | 27 + .../_vendor/packaging/__init__.py | 26 + .../__pycache__/__about__.cpython-310.pyc | Bin 0 -> 711 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 557 bytes .../__pycache__/_compat.cpython-310.pyc | Bin 0 -> 1157 bytes .../__pycache__/_structures.cpython-310.pyc | Bin 0 -> 2701 bytes .../__pycache__/_typing.cpython-310.pyc | Bin 0 -> 1513 bytes .../__pycache__/markers.cpython-310.pyc | Bin 0 -> 9198 bytes .../__pycache__/requirements.cpython-310.pyc | Bin 0 -> 4103 bytes .../__pycache__/specifiers.cpython-310.pyc | Bin 0 -> 20464 bytes .../__pycache__/tags.cpython-310.pyc | Bin 0 -> 17343 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 1648 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 13028 bytes .../_vendor/packaging/_compat.py | 38 + .../_vendor/packaging/_structures.py | 86 + .../_vendor/packaging/_typing.py | 48 + .../_vendor/packaging/markers.py | 328 + .../_vendor/packaging/requirements.py | 145 + .../_vendor/packaging/specifiers.py | 863 ++ .../pkg_resources/_vendor/packaging/tags.py | 751 ++ .../pkg_resources/_vendor/packaging/utils.py | 65 + .../_vendor/packaging/version.py | 535 + .../pkg_resources/_vendor/pyparsing.py | 5742 ++++++++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2903 bytes .../__pycache__/setup.cpython-310.pyc | Bin 0 -> 323 bytes .../data/my-test-package-source/setup.py | 6 + .../setuptools-58.1.0.dist-info/INSTALLER | 1 + .../setuptools-58.1.0.dist-info/LICENSE | 19 + .../setuptools-58.1.0.dist-info/METADATA | 119 + .../setuptools-58.1.0.dist-info/RECORD | 296 + .../setuptools-58.1.0.dist-info/REQUESTED | 0 .../setuptools-58.1.0.dist-info/WHEEL | 5 + .../entry_points.txt | 56 + .../setuptools-58.1.0.dist-info/top_level.txt | 3 + venv/Lib/site-packages/setuptools/__init__.py | 242 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 8599 bytes .../_deprecation_warning.cpython-310.pyc | Bin 0 -> 556 bytes .../__pycache__/_imp.cpython-310.pyc | Bin 0 -> 2082 bytes .../__pycache__/archive_util.cpython-310.pyc | Bin 0 -> 5852 bytes .../__pycache__/build_meta.cpython-310.pyc | Bin 0 -> 9124 bytes .../__pycache__/config.cpython-310.pyc | Bin 0 -> 20912 bytes .../__pycache__/dep_util.cpython-310.pyc | Bin 0 -> 863 bytes .../__pycache__/depends.cpython-310.pyc | Bin 0 -> 5276 bytes .../__pycache__/dist.cpython-310.pyc | Bin 0 -> 36259 bytes .../__pycache__/errors.cpython-310.pyc | Bin 0 -> 856 bytes .../__pycache__/extension.cpython-310.pyc | Bin 0 -> 1952 bytes .../__pycache__/glob.cpython-310.pyc | Bin 0 -> 3741 bytes .../__pycache__/installer.cpython-310.pyc | Bin 0 -> 2759 bytes .../__pycache__/launch.cpython-310.pyc | Bin 0 -> 913 bytes .../__pycache__/monkey.cpython-310.pyc | Bin 0 -> 4641 bytes .../__pycache__/msvc.cpython-310.pyc | Bin 0 -> 42645 bytes .../__pycache__/namespaces.cpython-310.pyc | Bin 0 -> 3624 bytes .../__pycache__/package_index.cpython-310.pyc | Bin 0 -> 32498 bytes .../__pycache__/py34compat.cpython-310.pyc | Bin 0 -> 488 bytes .../__pycache__/sandbox.cpython-310.pyc | Bin 0 -> 15764 bytes .../__pycache__/unicode_utils.cpython-310.pyc | Bin 0 -> 1118 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 330 bytes .../__pycache__/wheel.cpython-310.pyc | Bin 0 -> 7356 bytes .../windows_support.cpython-310.pyc | Bin 0 -> 1031 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 15 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 462 bytes .../__pycache__/_msvccompiler.cpython-310.pyc | Bin 0 -> 13841 bytes .../__pycache__/archive_util.cpython-310.pyc | Bin 0 -> 6569 bytes .../__pycache__/bcppcompiler.cpython-310.pyc | Bin 0 -> 6556 bytes .../__pycache__/ccompiler.cpython-310.pyc | Bin 0 -> 33283 bytes .../__pycache__/cmd.cpython-310.pyc | Bin 0 -> 13956 bytes .../__pycache__/config.cpython-310.pyc | Bin 0 -> 3597 bytes .../__pycache__/core.cpython-310.pyc | Bin 0 -> 6664 bytes .../cygwinccompiler.cpython-310.pyc | Bin 0 -> 8750 bytes .../__pycache__/debug.cpython-310.pyc | Bin 0 -> 258 bytes .../__pycache__/dep_util.cpython-310.pyc | Bin 0 -> 2779 bytes .../__pycache__/dir_util.cpython-310.pyc | Bin 0 -> 5890 bytes .../__pycache__/dist.cpython-310.pyc | Bin 0 -> 34055 bytes .../__pycache__/errors.cpython-310.pyc | Bin 0 -> 5000 bytes .../__pycache__/extension.cpython-310.pyc | Bin 0 -> 7014 bytes .../__pycache__/fancy_getopt.cpython-310.pyc | Bin 0 -> 10640 bytes .../__pycache__/file_util.cpython-310.pyc | Bin 0 -> 5984 bytes .../__pycache__/filelist.cpython-310.pyc | Bin 0 -> 10830 bytes .../__pycache__/log.cpython-310.pyc | Bin 0 -> 2315 bytes .../__pycache__/msvc9compiler.cpython-310.pyc | Bin 0 -> 17570 bytes .../__pycache__/msvccompiler.cpython-310.pyc | Bin 0 -> 14789 bytes .../__pycache__/py35compat.cpython-310.pyc | Bin 0 -> 634 bytes .../__pycache__/py38compat.cpython-310.pyc | Bin 0 -> 431 bytes .../__pycache__/spawn.cpython-310.pyc | Bin 0 -> 2901 bytes .../__pycache__/sysconfig.cpython-310.pyc | Bin 0 -> 12568 bytes .../__pycache__/text_file.cpython-310.pyc | Bin 0 -> 8477 bytes .../__pycache__/unixccompiler.cpython-310.pyc | Bin 0 -> 6835 bytes .../__pycache__/util.cpython-310.pyc | Bin 0 -> 14221 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 7365 bytes .../versionpredicate.cpython-310.pyc | Bin 0 -> 5195 bytes .../setuptools/_distutils/_msvccompiler.py | 561 + .../setuptools/_distutils/archive_util.py | 256 + .../setuptools/_distutils/bcppcompiler.py | 393 + .../setuptools/_distutils/ccompiler.py | 1123 ++ .../setuptools/_distutils/cmd.py | 403 + .../setuptools/_distutils/command/__init__.py | 31 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 537 bytes .../command/__pycache__/bdist.cpython-310.pyc | Bin 0 -> 3671 bytes .../__pycache__/bdist_dumb.cpython-310.pyc | Bin 0 -> 3652 bytes .../__pycache__/bdist_msi.cpython-310.pyc | Bin 0 -> 19728 bytes .../__pycache__/bdist_rpm.cpython-310.pyc | Bin 0 -> 12294 bytes .../__pycache__/bdist_wininst.cpython-310.pyc | Bin 0 -> 8637 bytes .../command/__pycache__/build.cpython-310.pyc | Bin 0 -> 3899 bytes .../__pycache__/build_clib.cpython-310.pyc | Bin 0 -> 4876 bytes .../__pycache__/build_ext.cpython-310.pyc | Bin 0 -> 16273 bytes .../__pycache__/build_py.cpython-310.pyc | Bin 0 -> 9895 bytes .../__pycache__/build_scripts.cpython-310.pyc | Bin 0 -> 4018 bytes .../command/__pycache__/check.cpython-310.pyc | Bin 0 -> 5015 bytes .../command/__pycache__/clean.cpython-310.pyc | Bin 0 -> 2154 bytes .../__pycache__/config.cpython-310.pyc | Bin 0 -> 10336 bytes .../__pycache__/install.cpython-310.pyc | Bin 0 -> 13870 bytes .../__pycache__/install_data.cpython-310.pyc | Bin 0 -> 2353 bytes .../install_egg_info.cpython-310.pyc | Bin 0 -> 3094 bytes .../install_headers.cpython-310.pyc | Bin 0 -> 1776 bytes .../__pycache__/install_lib.cpython-310.pyc | Bin 0 -> 5178 bytes .../install_scripts.cpython-310.pyc | Bin 0 -> 2205 bytes .../__pycache__/py37compat.cpython-310.pyc | Bin 0 -> 1050 bytes .../__pycache__/register.cpython-310.pyc | Bin 0 -> 8689 bytes .../command/__pycache__/sdist.cpython-310.pyc | Bin 0 -> 14505 bytes .../__pycache__/upload.cpython-310.pyc | Bin 0 -> 5381 bytes .../setuptools/_distutils/command/bdist.py | 143 + .../_distutils/command/bdist_dumb.py | 123 + .../_distutils/command/bdist_msi.py | 749 ++ .../_distutils/command/bdist_rpm.py | 579 + .../_distutils/command/bdist_wininst.py | 377 + .../setuptools/_distutils/command/build.py | 157 + .../_distutils/command/build_clib.py | 209 + .../_distutils/command/build_ext.py | 757 ++ .../setuptools/_distutils/command/build_py.py | 392 + .../_distutils/command/build_scripts.py | 152 + .../setuptools/_distutils/command/check.py | 148 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 344 + .../setuptools/_distutils/command/install.py | 678 + .../_distutils/command/install_data.py | 79 + .../_distutils/command/install_egg_info.py | 77 + .../_distutils/command/install_headers.py | 47 + .../_distutils/command/install_lib.py | 217 + .../_distutils/command/install_scripts.py | 60 + .../_distutils/command/py37compat.py | 30 + .../setuptools/_distutils/command/register.py | 304 + .../setuptools/_distutils/command/sdist.py | 494 + .../setuptools/_distutils/command/upload.py | 214 + .../setuptools/_distutils/config.py | 130 + .../setuptools/_distutils/core.py | 234 + .../setuptools/_distutils/cygwinccompiler.py | 414 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 92 + .../setuptools/_distutils/dir_util.py | 210 + .../setuptools/_distutils/dist.py | 1257 ++ .../setuptools/_distutils/errors.py | 97 + .../setuptools/_distutils/extension.py | 240 + .../setuptools/_distutils/fancy_getopt.py | 457 + .../setuptools/_distutils/file_util.py | 238 + .../setuptools/_distutils/filelist.py | 355 + .../setuptools/_distutils/log.py | 77 + .../setuptools/_distutils/msvc9compiler.py | 788 ++ .../setuptools/_distutils/msvccompiler.py | 643 + .../setuptools/_distutils/py35compat.py | 19 + .../setuptools/_distutils/py38compat.py | 7 + .../setuptools/_distutils/spawn.py | 106 + .../setuptools/_distutils/sysconfig.py | 578 + .../setuptools/_distutils/text_file.py | 286 + .../setuptools/_distutils/unixccompiler.py | 332 + .../setuptools/_distutils/util.py | 535 + .../setuptools/_distutils/version.py | 347 + .../setuptools/_distutils/versionpredicate.py | 166 + venv/Lib/site-packages/setuptools/_imp.py | 82 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 192 bytes .../__pycache__/ordered_set.cpython-310.pyc | Bin 0 -> 16328 bytes .../__pycache__/pyparsing.cpython-310.pyc | Bin 0 -> 198808 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 273 bytes .../__pycache__/more.cpython-310.pyc | Bin 0 -> 110003 bytes .../__pycache__/recipes.cpython-310.pyc | Bin 0 -> 17973 bytes .../setuptools/_vendor/more_itertools/more.py | 3825 ++++++ .../_vendor/more_itertools/recipes.py | 620 + .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 27 + .../setuptools/_vendor/packaging/__init__.py | 26 + .../__pycache__/__about__.cpython-310.pyc | Bin 0 -> 708 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 554 bytes .../__pycache__/_compat.cpython-310.pyc | Bin 0 -> 1154 bytes .../__pycache__/_structures.cpython-310.pyc | Bin 0 -> 2698 bytes .../__pycache__/_typing.cpython-310.pyc | Bin 0 -> 1510 bytes .../__pycache__/markers.cpython-310.pyc | Bin 0 -> 9192 bytes .../__pycache__/requirements.cpython-310.pyc | Bin 0 -> 4097 bytes .../__pycache__/specifiers.cpython-310.pyc | Bin 0 -> 20461 bytes .../__pycache__/tags.cpython-310.pyc | Bin 0 -> 17340 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 1645 bytes .../__pycache__/version.cpython-310.pyc | Bin 0 -> 13025 bytes .../setuptools/_vendor/packaging/_compat.py | 38 + .../_vendor/packaging/_structures.py | 86 + .../setuptools/_vendor/packaging/_typing.py | 48 + .../setuptools/_vendor/packaging/markers.py | 328 + .../_vendor/packaging/requirements.py | 145 + .../_vendor/packaging/specifiers.py | 863 ++ .../setuptools/_vendor/packaging/tags.py | 751 ++ .../setuptools/_vendor/packaging/utils.py | 65 + .../setuptools/_vendor/packaging/version.py | 535 + .../setuptools/_vendor/pyparsing.py | 5742 ++++++++ .../site-packages/setuptools/archive_util.py | 205 + .../site-packages/setuptools/build_meta.py | 281 + venv/Lib/site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes venv/Lib/site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 8 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 381 bytes .../command/__pycache__/alias.cpython-310.pyc | Bin 0 -> 2383 bytes .../__pycache__/bdist_egg.cpython-310.pyc | Bin 0 -> 13109 bytes .../__pycache__/bdist_rpm.cpython-310.pyc | Bin 0 -> 1596 bytes .../__pycache__/build_clib.cpython-310.pyc | Bin 0 -> 2472 bytes .../__pycache__/build_ext.cpython-310.pyc | Bin 0 -> 9899 bytes .../__pycache__/build_py.cpython-310.pyc | Bin 0 -> 7876 bytes .../__pycache__/develop.cpython-310.pyc | Bin 0 -> 6159 bytes .../__pycache__/dist_info.cpython-310.pyc | Bin 0 -> 1401 bytes .../__pycache__/easy_install.cpython-310.pyc | Bin 0 -> 63733 bytes .../__pycache__/egg_info.cpython-310.pyc | Bin 0 -> 22027 bytes .../__pycache__/install.cpython-310.pyc | Bin 0 -> 4058 bytes .../install_egg_info.cpython-310.pyc | Bin 0 -> 2435 bytes .../__pycache__/install_lib.cpython-310.pyc | Bin 0 -> 4178 bytes .../install_scripts.cpython-310.pyc | Bin 0 -> 2436 bytes .../__pycache__/py36compat.cpython-310.pyc | Bin 0 -> 4543 bytes .../__pycache__/register.cpython-310.pyc | Bin 0 -> 847 bytes .../__pycache__/rotate.cpython-310.pyc | Bin 0 -> 2514 bytes .../__pycache__/saveopts.cpython-310.pyc | Bin 0 -> 933 bytes .../command/__pycache__/sdist.cpython-310.pyc | Bin 0 -> 6534 bytes .../__pycache__/setopt.cpython-310.pyc | Bin 0 -> 4695 bytes .../command/__pycache__/test.cpython-310.pyc | Bin 0 -> 8139 bytes .../__pycache__/upload.cpython-310.pyc | Bin 0 -> 820 bytes .../__pycache__/upload_docs.cpython-310.pyc | Bin 0 -> 6189 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 456 + .../setuptools/command/bdist_rpm.py | 40 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 328 + .../setuptools/command/build_py.py | 232 + .../setuptools/command/develop.py | 193 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2290 ++++ .../setuptools/command/egg_info.py | 734 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 62 + .../setuptools/command/install_lib.py | 122 + .../setuptools/command/install_scripts.py | 69 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 189 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 252 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 202 + venv/Lib/site-packages/setuptools/config.py | 749 ++ venv/Lib/site-packages/setuptools/dep_util.py | 25 + venv/Lib/site-packages/setuptools/depends.py | 175 + venv/Lib/site-packages/setuptools/dist.py | 1150 ++ venv/Lib/site-packages/setuptools/errors.py | 16 + .../Lib/site-packages/setuptools/extension.py | 55 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2942 bytes venv/Lib/site-packages/setuptools/glob.py | 167 + venv/Lib/site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes venv/Lib/site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes venv/Lib/site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../Lib/site-packages/setuptools/installer.py | 97 + venv/Lib/site-packages/setuptools/launch.py | 36 + venv/Lib/site-packages/setuptools/monkey.py | 177 + venv/Lib/site-packages/setuptools/msvc.py | 1805 +++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 ++ .../site-packages/setuptools/py34compat.py | 13 + venv/Lib/site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + venv/Lib/site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + venv/Lib/site-packages/setuptools/version.py | 6 + venv/Lib/site-packages/setuptools/wheel.py | 213 + .../setuptools/windows_support.py | 29 + .../sqlparse-0.4.2.dist-info/AUTHORS | 71 + .../sqlparse-0.4.2.dist-info/INSTALLER | 1 + .../sqlparse-0.4.2.dist-info/LICENSE | 25 + .../sqlparse-0.4.2.dist-info/METADATA | 108 + .../sqlparse-0.4.2.dist-info/RECORD | 53 + .../sqlparse-0.4.2.dist-info/WHEEL | 5 + .../sqlparse-0.4.2.dist-info/entry_points.txt | 3 + .../sqlparse-0.4.2.dist-info/top_level.txt | 1 + venv/Lib/site-packages/sqlparse/__init__.py | 70 + venv/Lib/site-packages/sqlparse/__main__.py | 22 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 2387 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 0 -> 586 bytes .../sqlparse/__pycache__/cli.cpython-310.pyc | Bin 0 -> 4679 bytes .../__pycache__/compat.cpython-310.pyc | Bin 0 -> 1138 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 455 bytes .../__pycache__/formatter.cpython-310.pyc | Bin 0 -> 4125 bytes .../__pycache__/keywords.cpython-310.pyc | Bin 0 -> 24951 bytes .../__pycache__/lexer.cpython-310.pyc | Bin 0 -> 2051 bytes .../sqlparse/__pycache__/sql.cpython-310.pyc | Bin 0 -> 21417 bytes .../__pycache__/tokens.cpython-310.pyc | Bin 0 -> 1285 bytes .../__pycache__/utils.cpython-310.pyc | Bin 0 -> 3414 bytes venv/Lib/site-packages/sqlparse/cli.py | 196 + venv/Lib/site-packages/sqlparse/compat.py | 45 + .../site-packages/sqlparse/engine/__init__.py | 16 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 413 bytes .../__pycache__/filter_stack.cpython-310.pyc | Bin 0 -> 1244 bytes .../__pycache__/grouping.cpython-310.pyc | Bin 0 -> 13349 bytes .../statement_splitter.cpython-310.pyc | Bin 0 -> 2273 bytes .../sqlparse/engine/filter_stack.py | 44 + .../site-packages/sqlparse/engine/grouping.py | 454 + .../sqlparse/engine/statement_splitter.py | 107 + venv/Lib/site-packages/sqlparse/exceptions.py | 12 + .../sqlparse/filters/__init__.py | 40 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 937 bytes .../aligned_indent.cpython-310.pyc | Bin 0 -> 4888 bytes .../__pycache__/others.cpython-310.pyc | Bin 0 -> 5030 bytes .../__pycache__/output.cpython-310.pyc | Bin 0 -> 2757 bytes .../__pycache__/reindent.cpython-310.pyc | Bin 0 -> 7708 bytes .../__pycache__/right_margin.cpython-310.pyc | Bin 0 -> 1373 bytes .../__pycache__/tokens.cpython-310.pyc | Bin 0 -> 2082 bytes .../sqlparse/filters/aligned_indent.py | 135 + .../site-packages/sqlparse/filters/others.py | 136 + .../site-packages/sqlparse/filters/output.py | 122 + .../sqlparse/filters/reindent.py | 242 + .../sqlparse/filters/right_margin.py | 48 + .../site-packages/sqlparse/filters/tokens.py | 59 + venv/Lib/site-packages/sqlparse/formatter.py | 198 + venv/Lib/site-packages/sqlparse/keywords.py | 958 ++ venv/Lib/site-packages/sqlparse/lexer.py | 82 + venv/Lib/site-packages/sqlparse/sql.py | 644 + venv/Lib/site-packages/sqlparse/tokens.py | 68 + venv/Lib/site-packages/sqlparse/utils.py | 121 + .../tzdata-2022.1.dist-info/INSTALLER | 1 + .../tzdata-2022.1.dist-info/LICENSE | 15 + .../tzdata-2022.1.dist-info/LICENSE_APACHE | 201 + .../tzdata-2022.1.dist-info/METADATA | 36 + .../tzdata-2022.1.dist-info/RECORD | 652 + .../tzdata-2022.1.dist-info/WHEEL | 6 + .../tzdata-2022.1.dist-info/top_level.txt | 1 + venv/Lib/site-packages/tzdata/__init__.py | 6 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 229 bytes .../tzdata/zoneinfo/Africa/Abidjan | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Accra | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Addis_Ababa | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Algiers | Bin 0 -> 470 bytes .../tzdata/zoneinfo/Africa/Asmara | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Asmera | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Bamako | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Bangui | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Banjul | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Bissau | Bin 0 -> 149 bytes .../tzdata/zoneinfo/Africa/Blantyre | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Brazzaville | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Bujumbura | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Cairo | Bin 0 -> 1276 bytes .../tzdata/zoneinfo/Africa/Casablanca | Bin 0 -> 1919 bytes .../tzdata/zoneinfo/Africa/Ceuta | Bin 0 -> 562 bytes .../tzdata/zoneinfo/Africa/Conakry | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Dakar | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Dar_es_Salaam | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Djibouti | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Douala | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/El_Aaiun | Bin 0 -> 1830 bytes .../tzdata/zoneinfo/Africa/Freetown | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Gaborone | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Harare | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Johannesburg | Bin 0 -> 190 bytes .../site-packages/tzdata/zoneinfo/Africa/Juba | Bin 0 -> 458 bytes .../tzdata/zoneinfo/Africa/Kampala | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Khartoum | Bin 0 -> 458 bytes .../tzdata/zoneinfo/Africa/Kigali | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Kinshasa | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Lagos | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Libreville | Bin 0 -> 180 bytes .../site-packages/tzdata/zoneinfo/Africa/Lome | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Luanda | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Lubumbashi | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Lusaka | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Malabo | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Maputo | Bin 0 -> 131 bytes .../tzdata/zoneinfo/Africa/Maseru | Bin 0 -> 190 bytes .../tzdata/zoneinfo/Africa/Mbabane | Bin 0 -> 190 bytes .../tzdata/zoneinfo/Africa/Mogadishu | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Monrovia | Bin 0 -> 164 bytes .../tzdata/zoneinfo/Africa/Nairobi | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Africa/Ndjamena | Bin 0 -> 160 bytes .../tzdata/zoneinfo/Africa/Niamey | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Nouakchott | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Ouagadougou | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Porto-Novo | Bin 0 -> 180 bytes .../tzdata/zoneinfo/Africa/Sao_Tome | Bin 0 -> 173 bytes .../tzdata/zoneinfo/Africa/Timbuktu | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Africa/Tripoli | Bin 0 -> 431 bytes .../tzdata/zoneinfo/Africa/Tunis | Bin 0 -> 449 bytes .../tzdata/zoneinfo/Africa/Windhoek | Bin 0 -> 638 bytes .../tzdata/zoneinfo/Africa/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes .../tzdata/zoneinfo/America/Adak | Bin 0 -> 969 bytes .../tzdata/zoneinfo/America/Anchorage | Bin 0 -> 977 bytes .../tzdata/zoneinfo/America/Anguilla | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Antigua | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Araguaina | Bin 0 -> 592 bytes .../zoneinfo/America/Argentina/Buenos_Aires | Bin 0 -> 708 bytes .../zoneinfo/America/Argentina/Catamarca | Bin 0 -> 708 bytes .../zoneinfo/America/Argentina/ComodRivadavia | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Argentina/Cordoba | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Argentina/Jujuy | Bin 0 -> 690 bytes .../zoneinfo/America/Argentina/La_Rioja | Bin 0 -> 717 bytes .../tzdata/zoneinfo/America/Argentina/Mendoza | Bin 0 -> 708 bytes .../zoneinfo/America/Argentina/Rio_Gallegos | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Argentina/Salta | Bin 0 -> 690 bytes .../zoneinfo/America/Argentina/San_Juan | Bin 0 -> 717 bytes .../zoneinfo/America/Argentina/San_Luis | Bin 0 -> 717 bytes .../tzdata/zoneinfo/America/Argentina/Tucuman | Bin 0 -> 726 bytes .../tzdata/zoneinfo/America/Argentina/Ushuaia | Bin 0 -> 708 bytes .../zoneinfo/America/Argentina/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 207 bytes .../tzdata/zoneinfo/America/Aruba | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Asuncion | Bin 0 -> 884 bytes .../tzdata/zoneinfo/America/Atikokan | Bin 0 -> 149 bytes .../tzdata/zoneinfo/America/Atka | Bin 0 -> 969 bytes .../tzdata/zoneinfo/America/Bahia | Bin 0 -> 682 bytes .../tzdata/zoneinfo/America/Bahia_Banderas | Bin 0 -> 530 bytes .../tzdata/zoneinfo/America/Barbados | Bin 0 -> 278 bytes .../tzdata/zoneinfo/America/Belem | Bin 0 -> 394 bytes .../tzdata/zoneinfo/America/Belize | Bin 0 -> 1045 bytes .../tzdata/zoneinfo/America/Blanc-Sablon | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Boa_Vista | Bin 0 -> 430 bytes .../tzdata/zoneinfo/America/Bogota | Bin 0 -> 179 bytes .../tzdata/zoneinfo/America/Boise | Bin 0 -> 999 bytes .../tzdata/zoneinfo/America/Buenos_Aires | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Cambridge_Bay | Bin 0 -> 768 bytes .../tzdata/zoneinfo/America/Campo_Grande | Bin 0 -> 952 bytes .../tzdata/zoneinfo/America/Cancun | Bin 0 -> 529 bytes .../tzdata/zoneinfo/America/Caracas | Bin 0 -> 190 bytes .../tzdata/zoneinfo/America/Catamarca | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Cayenne | Bin 0 -> 151 bytes .../tzdata/zoneinfo/America/Cayman | Bin 0 -> 149 bytes .../tzdata/zoneinfo/America/Chicago | Bin 0 -> 1754 bytes .../tzdata/zoneinfo/America/Chihuahua | Bin 0 -> 340 bytes .../tzdata/zoneinfo/America/Coral_Harbour | Bin 0 -> 149 bytes .../tzdata/zoneinfo/America/Cordoba | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Costa_Rica | Bin 0 -> 232 bytes .../tzdata/zoneinfo/America/Creston | Bin 0 -> 240 bytes .../tzdata/zoneinfo/America/Cuiaba | Bin 0 -> 934 bytes .../tzdata/zoneinfo/America/Curacao | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Danmarkshavn | Bin 0 -> 447 bytes .../tzdata/zoneinfo/America/Dawson | Bin 0 -> 1029 bytes .../tzdata/zoneinfo/America/Dawson_Creek | Bin 0 -> 683 bytes .../tzdata/zoneinfo/America/Denver | Bin 0 -> 1042 bytes .../tzdata/zoneinfo/America/Detroit | Bin 0 -> 899 bytes .../tzdata/zoneinfo/America/Dominica | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Edmonton | Bin 0 -> 970 bytes .../tzdata/zoneinfo/America/Eirunepe | Bin 0 -> 436 bytes .../tzdata/zoneinfo/America/El_Salvador | Bin 0 -> 176 bytes .../tzdata/zoneinfo/America/Ensenada | Bin 0 -> 1025 bytes .../tzdata/zoneinfo/America/Fort_Nelson | Bin 0 -> 1448 bytes .../tzdata/zoneinfo/America/Fort_Wayne | Bin 0 -> 531 bytes .../tzdata/zoneinfo/America/Fortaleza | Bin 0 -> 484 bytes .../tzdata/zoneinfo/America/Glace_Bay | Bin 0 -> 880 bytes .../tzdata/zoneinfo/America/Godthab | Bin 0 -> 465 bytes .../tzdata/zoneinfo/America/Goose_Bay | Bin 0 -> 1580 bytes .../tzdata/zoneinfo/America/Grand_Turk | Bin 0 -> 853 bytes .../tzdata/zoneinfo/America/Grenada | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Guadeloupe | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Guatemala | Bin 0 -> 212 bytes .../tzdata/zoneinfo/America/Guayaquil | Bin 0 -> 179 bytes .../tzdata/zoneinfo/America/Guyana | Bin 0 -> 181 bytes .../tzdata/zoneinfo/America/Halifax | Bin 0 -> 1672 bytes .../tzdata/zoneinfo/America/Havana | Bin 0 -> 1117 bytes .../tzdata/zoneinfo/America/Hermosillo | Bin 0 -> 286 bytes .../zoneinfo/America/Indiana/Indianapolis | Bin 0 -> 531 bytes .../tzdata/zoneinfo/America/Indiana/Knox | Bin 0 -> 1016 bytes .../tzdata/zoneinfo/America/Indiana/Marengo | Bin 0 -> 567 bytes .../zoneinfo/America/Indiana/Petersburg | Bin 0 -> 683 bytes .../tzdata/zoneinfo/America/Indiana/Tell_City | Bin 0 -> 522 bytes .../tzdata/zoneinfo/America/Indiana/Vevay | Bin 0 -> 369 bytes .../tzdata/zoneinfo/America/Indiana/Vincennes | Bin 0 -> 558 bytes .../tzdata/zoneinfo/America/Indiana/Winamac | Bin 0 -> 612 bytes .../zoneinfo/America/Indiana/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../tzdata/zoneinfo/America/Indianapolis | Bin 0 -> 531 bytes .../tzdata/zoneinfo/America/Inuvik | Bin 0 -> 701 bytes .../tzdata/zoneinfo/America/Iqaluit | Bin 0 -> 740 bytes .../tzdata/zoneinfo/America/Jamaica | Bin 0 -> 339 bytes .../tzdata/zoneinfo/America/Jujuy | Bin 0 -> 690 bytes .../tzdata/zoneinfo/America/Juneau | Bin 0 -> 966 bytes .../zoneinfo/America/Kentucky/Louisville | Bin 0 -> 1242 bytes .../zoneinfo/America/Kentucky/Monticello | Bin 0 -> 972 bytes .../zoneinfo/America/Kentucky/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 206 bytes .../tzdata/zoneinfo/America/Knox_IN | Bin 0 -> 1016 bytes .../tzdata/zoneinfo/America/Kralendijk | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/La_Paz | Bin 0 -> 170 bytes .../tzdata/zoneinfo/America/Lima | Bin 0 -> 283 bytes .../tzdata/zoneinfo/America/Los_Angeles | Bin 0 -> 1294 bytes .../tzdata/zoneinfo/America/Louisville | Bin 0 -> 1242 bytes .../tzdata/zoneinfo/America/Lower_Princes | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Maceio | Bin 0 -> 502 bytes .../tzdata/zoneinfo/America/Managua | Bin 0 -> 295 bytes .../tzdata/zoneinfo/America/Manaus | Bin 0 -> 412 bytes .../tzdata/zoneinfo/America/Marigot | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Martinique | Bin 0 -> 178 bytes .../tzdata/zoneinfo/America/Matamoros | Bin 0 -> 437 bytes .../tzdata/zoneinfo/America/Mazatlan | Bin 0 -> 367 bytes .../tzdata/zoneinfo/America/Mendoza | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Menominee | Bin 0 -> 917 bytes .../tzdata/zoneinfo/America/Merida | Bin 0 -> 303 bytes .../tzdata/zoneinfo/America/Metlakatla | Bin 0 -> 595 bytes .../tzdata/zoneinfo/America/Mexico_City | Bin 0 -> 412 bytes .../tzdata/zoneinfo/America/Miquelon | Bin 0 -> 550 bytes .../tzdata/zoneinfo/America/Moncton | Bin 0 -> 1493 bytes .../tzdata/zoneinfo/America/Monterrey | Bin 0 -> 293 bytes .../tzdata/zoneinfo/America/Montevideo | Bin 0 -> 969 bytes .../tzdata/zoneinfo/America/Montreal | Bin 0 -> 1717 bytes .../tzdata/zoneinfo/America/Montserrat | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Nassau | Bin 0 -> 1717 bytes .../tzdata/zoneinfo/America/New_York | Bin 0 -> 1744 bytes .../tzdata/zoneinfo/America/Nipigon | Bin 0 -> 835 bytes .../tzdata/zoneinfo/America/Nome | Bin 0 -> 975 bytes .../tzdata/zoneinfo/America/Noronha | Bin 0 -> 484 bytes .../zoneinfo/America/North_Dakota/Beulah | Bin 0 -> 1043 bytes .../zoneinfo/America/North_Dakota/Center | Bin 0 -> 990 bytes .../zoneinfo/America/North_Dakota/New_Salem | Bin 0 -> 990 bytes .../zoneinfo/America/North_Dakota/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 210 bytes .../tzdata/zoneinfo/America/Nuuk | Bin 0 -> 465 bytes .../tzdata/zoneinfo/America/Ojinaga | Bin 0 -> 484 bytes .../tzdata/zoneinfo/America/Panama | Bin 0 -> 149 bytes .../tzdata/zoneinfo/America/Pangnirtung | Bin 0 -> 769 bytes .../tzdata/zoneinfo/America/Paramaribo | Bin 0 -> 187 bytes .../tzdata/zoneinfo/America/Phoenix | Bin 0 -> 240 bytes .../tzdata/zoneinfo/America/Port-au-Prince | Bin 0 -> 565 bytes .../tzdata/zoneinfo/America/Port_of_Spain | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Porto_Acre | Bin 0 -> 418 bytes .../tzdata/zoneinfo/America/Porto_Velho | Bin 0 -> 394 bytes .../tzdata/zoneinfo/America/Puerto_Rico | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Punta_Arenas | Bin 0 -> 1209 bytes .../tzdata/zoneinfo/America/Rainy_River | Bin 0 -> 835 bytes .../tzdata/zoneinfo/America/Rankin_Inlet | Bin 0 -> 692 bytes .../tzdata/zoneinfo/America/Recife | Bin 0 -> 484 bytes .../tzdata/zoneinfo/America/Regina | Bin 0 -> 638 bytes .../tzdata/zoneinfo/America/Resolute | Bin 0 -> 692 bytes .../tzdata/zoneinfo/America/Rio_Branco | Bin 0 -> 418 bytes .../tzdata/zoneinfo/America/Rosario | Bin 0 -> 708 bytes .../tzdata/zoneinfo/America/Santa_Isabel | Bin 0 -> 1025 bytes .../tzdata/zoneinfo/America/Santarem | Bin 0 -> 409 bytes .../tzdata/zoneinfo/America/Santiago | Bin 0 -> 1282 bytes .../tzdata/zoneinfo/America/Santo_Domingo | Bin 0 -> 317 bytes .../tzdata/zoneinfo/America/Sao_Paulo | Bin 0 -> 952 bytes .../tzdata/zoneinfo/America/Scoresbysund | Bin 0 -> 479 bytes .../tzdata/zoneinfo/America/Shiprock | Bin 0 -> 1042 bytes .../tzdata/zoneinfo/America/Sitka | Bin 0 -> 956 bytes .../tzdata/zoneinfo/America/St_Barthelemy | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/St_Johns | Bin 0 -> 1878 bytes .../tzdata/zoneinfo/America/St_Kitts | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/St_Lucia | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/St_Thomas | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/St_Vincent | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Swift_Current | Bin 0 -> 368 bytes .../tzdata/zoneinfo/America/Tegucigalpa | Bin 0 -> 194 bytes .../tzdata/zoneinfo/America/Thule | Bin 0 -> 455 bytes .../tzdata/zoneinfo/America/Thunder_Bay | Bin 0 -> 881 bytes .../tzdata/zoneinfo/America/Tijuana | Bin 0 -> 1025 bytes .../tzdata/zoneinfo/America/Toronto | Bin 0 -> 1717 bytes .../tzdata/zoneinfo/America/Tortola | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Vancouver | Bin 0 -> 1330 bytes .../tzdata/zoneinfo/America/Virgin | Bin 0 -> 177 bytes .../tzdata/zoneinfo/America/Whitehorse | Bin 0 -> 1029 bytes .../tzdata/zoneinfo/America/Winnipeg | Bin 0 -> 1294 bytes .../tzdata/zoneinfo/America/Yakutat | Bin 0 -> 946 bytes .../tzdata/zoneinfo/America/Yellowknife | Bin 0 -> 729 bytes .../tzdata/zoneinfo/America/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes .../tzdata/zoneinfo/Antarctica/Casey | Bin 0 -> 243 bytes .../tzdata/zoneinfo/Antarctica/Davis | Bin 0 -> 197 bytes .../tzdata/zoneinfo/Antarctica/DumontDUrville | Bin 0 -> 154 bytes .../tzdata/zoneinfo/Antarctica/Macquarie | Bin 0 -> 976 bytes .../tzdata/zoneinfo/Antarctica/Mawson | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Antarctica/McMurdo | Bin 0 -> 1043 bytes .../tzdata/zoneinfo/Antarctica/Palmer | Bin 0 -> 887 bytes .../tzdata/zoneinfo/Antarctica/Rothera | Bin 0 -> 132 bytes .../tzdata/zoneinfo/Antarctica/South_Pole | Bin 0 -> 1043 bytes .../tzdata/zoneinfo/Antarctica/Syowa | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Antarctica/Troll | Bin 0 -> 177 bytes .../tzdata/zoneinfo/Antarctica/Vostok | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Antarctica/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 200 bytes .../tzdata/zoneinfo/Arctic/Longyearbyen | Bin 0 -> 676 bytes .../tzdata/zoneinfo/Arctic/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes .../site-packages/tzdata/zoneinfo/Asia/Aden | Bin 0 -> 133 bytes .../site-packages/tzdata/zoneinfo/Asia/Almaty | Bin 0 -> 609 bytes .../site-packages/tzdata/zoneinfo/Asia/Amman | Bin 0 -> 922 bytes .../site-packages/tzdata/zoneinfo/Asia/Anadyr | Bin 0 -> 743 bytes .../site-packages/tzdata/zoneinfo/Asia/Aqtau | Bin 0 -> 606 bytes .../site-packages/tzdata/zoneinfo/Asia/Aqtobe | Bin 0 -> 615 bytes .../tzdata/zoneinfo/Asia/Ashgabat | Bin 0 -> 375 bytes .../tzdata/zoneinfo/Asia/Ashkhabad | Bin 0 -> 375 bytes .../site-packages/tzdata/zoneinfo/Asia/Atyrau | Bin 0 -> 616 bytes .../tzdata/zoneinfo/Asia/Baghdad | Bin 0 -> 630 bytes .../tzdata/zoneinfo/Asia/Bahrain | Bin 0 -> 152 bytes .../site-packages/tzdata/zoneinfo/Asia/Baku | Bin 0 -> 744 bytes .../tzdata/zoneinfo/Asia/Bangkok | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Asia/Barnaul | Bin 0 -> 753 bytes .../site-packages/tzdata/zoneinfo/Asia/Beirut | Bin 0 -> 732 bytes .../tzdata/zoneinfo/Asia/Bishkek | Bin 0 -> 618 bytes .../site-packages/tzdata/zoneinfo/Asia/Brunei | Bin 0 -> 154 bytes .../tzdata/zoneinfo/Asia/Calcutta | Bin 0 -> 220 bytes .../site-packages/tzdata/zoneinfo/Asia/Chita | Bin 0 -> 750 bytes .../tzdata/zoneinfo/Asia/Choibalsan | Bin 0 -> 619 bytes .../tzdata/zoneinfo/Asia/Chongqing | Bin 0 -> 393 bytes .../tzdata/zoneinfo/Asia/Chungking | Bin 0 -> 393 bytes .../tzdata/zoneinfo/Asia/Colombo | Bin 0 -> 247 bytes .../site-packages/tzdata/zoneinfo/Asia/Dacca | Bin 0 -> 231 bytes .../tzdata/zoneinfo/Asia/Damascus | Bin 0 -> 1047 bytes .../site-packages/tzdata/zoneinfo/Asia/Dhaka | Bin 0 -> 231 bytes .../site-packages/tzdata/zoneinfo/Asia/Dili | Bin 0 -> 170 bytes .../site-packages/tzdata/zoneinfo/Asia/Dubai | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Asia/Dushanbe | Bin 0 -> 366 bytes .../tzdata/zoneinfo/Asia/Famagusta | Bin 0 -> 940 bytes .../site-packages/tzdata/zoneinfo/Asia/Gaza | Bin 0 -> 1240 bytes .../site-packages/tzdata/zoneinfo/Asia/Harbin | Bin 0 -> 393 bytes .../site-packages/tzdata/zoneinfo/Asia/Hebron | Bin 0 -> 1258 bytes .../tzdata/zoneinfo/Asia/Ho_Chi_Minh | Bin 0 -> 236 bytes .../tzdata/zoneinfo/Asia/Hong_Kong | Bin 0 -> 775 bytes .../site-packages/tzdata/zoneinfo/Asia/Hovd | Bin 0 -> 594 bytes .../tzdata/zoneinfo/Asia/Irkutsk | Bin 0 -> 760 bytes .../tzdata/zoneinfo/Asia/Istanbul | Bin 0 -> 1200 bytes .../tzdata/zoneinfo/Asia/Jakarta | Bin 0 -> 248 bytes .../tzdata/zoneinfo/Asia/Jayapura | Bin 0 -> 171 bytes .../tzdata/zoneinfo/Asia/Jerusalem | Bin 0 -> 1074 bytes .../site-packages/tzdata/zoneinfo/Asia/Kabul | Bin 0 -> 159 bytes .../tzdata/zoneinfo/Asia/Kamchatka | Bin 0 -> 727 bytes .../tzdata/zoneinfo/Asia/Karachi | Bin 0 -> 266 bytes .../tzdata/zoneinfo/Asia/Kashgar | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Asia/Kathmandu | Bin 0 -> 161 bytes .../tzdata/zoneinfo/Asia/Katmandu | Bin 0 -> 161 bytes .../tzdata/zoneinfo/Asia/Khandyga | Bin 0 -> 775 bytes .../tzdata/zoneinfo/Asia/Kolkata | Bin 0 -> 220 bytes .../tzdata/zoneinfo/Asia/Krasnoyarsk | Bin 0 -> 741 bytes .../tzdata/zoneinfo/Asia/Kuala_Lumpur | Bin 0 -> 256 bytes .../tzdata/zoneinfo/Asia/Kuching | Bin 0 -> 320 bytes .../site-packages/tzdata/zoneinfo/Asia/Kuwait | Bin 0 -> 133 bytes .../site-packages/tzdata/zoneinfo/Asia/Macao | Bin 0 -> 791 bytes .../site-packages/tzdata/zoneinfo/Asia/Macau | Bin 0 -> 791 bytes .../tzdata/zoneinfo/Asia/Magadan | Bin 0 -> 751 bytes .../tzdata/zoneinfo/Asia/Makassar | Bin 0 -> 190 bytes .../site-packages/tzdata/zoneinfo/Asia/Manila | Bin 0 -> 238 bytes .../site-packages/tzdata/zoneinfo/Asia/Muscat | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Asia/Nicosia | Bin 0 -> 597 bytes .../tzdata/zoneinfo/Asia/Novokuznetsk | Bin 0 -> 726 bytes .../tzdata/zoneinfo/Asia/Novosibirsk | Bin 0 -> 753 bytes .../site-packages/tzdata/zoneinfo/Asia/Omsk | Bin 0 -> 741 bytes .../site-packages/tzdata/zoneinfo/Asia/Oral | Bin 0 -> 625 bytes .../tzdata/zoneinfo/Asia/Phnom_Penh | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Asia/Pontianak | Bin 0 -> 247 bytes .../tzdata/zoneinfo/Asia/Pyongyang | Bin 0 -> 183 bytes .../site-packages/tzdata/zoneinfo/Asia/Qatar | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Asia/Qostanay | Bin 0 -> 615 bytes .../tzdata/zoneinfo/Asia/Qyzylorda | Bin 0 -> 624 bytes .../tzdata/zoneinfo/Asia/Rangoon | Bin 0 -> 187 bytes .../site-packages/tzdata/zoneinfo/Asia/Riyadh | Bin 0 -> 133 bytes .../site-packages/tzdata/zoneinfo/Asia/Saigon | Bin 0 -> 236 bytes .../tzdata/zoneinfo/Asia/Sakhalin | Bin 0 -> 755 bytes .../tzdata/zoneinfo/Asia/Samarkand | Bin 0 -> 366 bytes .../site-packages/tzdata/zoneinfo/Asia/Seoul | Bin 0 -> 415 bytes .../tzdata/zoneinfo/Asia/Shanghai | Bin 0 -> 393 bytes .../tzdata/zoneinfo/Asia/Singapore | Bin 0 -> 256 bytes .../tzdata/zoneinfo/Asia/Srednekolymsk | Bin 0 -> 742 bytes .../site-packages/tzdata/zoneinfo/Asia/Taipei | Bin 0 -> 511 bytes .../tzdata/zoneinfo/Asia/Tashkent | Bin 0 -> 366 bytes .../tzdata/zoneinfo/Asia/Tbilisi | Bin 0 -> 629 bytes .../site-packages/tzdata/zoneinfo/Asia/Tehran | Bin 0 -> 2004 bytes .../tzdata/zoneinfo/Asia/Tel_Aviv | Bin 0 -> 1074 bytes .../site-packages/tzdata/zoneinfo/Asia/Thimbu | Bin 0 -> 154 bytes .../tzdata/zoneinfo/Asia/Thimphu | Bin 0 -> 154 bytes .../site-packages/tzdata/zoneinfo/Asia/Tokyo | Bin 0 -> 213 bytes .../site-packages/tzdata/zoneinfo/Asia/Tomsk | Bin 0 -> 753 bytes .../tzdata/zoneinfo/Asia/Ujung_Pandang | Bin 0 -> 190 bytes .../tzdata/zoneinfo/Asia/Ulaanbaatar | Bin 0 -> 594 bytes .../tzdata/zoneinfo/Asia/Ulan_Bator | Bin 0 -> 594 bytes .../site-packages/tzdata/zoneinfo/Asia/Urumqi | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Asia/Ust-Nera | Bin 0 -> 771 bytes .../tzdata/zoneinfo/Asia/Vientiane | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Asia/Vladivostok | Bin 0 -> 742 bytes .../tzdata/zoneinfo/Asia/Yakutsk | Bin 0 -> 741 bytes .../site-packages/tzdata/zoneinfo/Asia/Yangon | Bin 0 -> 187 bytes .../tzdata/zoneinfo/Asia/Yekaterinburg | Bin 0 -> 760 bytes .../tzdata/zoneinfo/Asia/Yerevan | Bin 0 -> 708 bytes .../tzdata/zoneinfo/Asia/__init__.py | 0 .../Asia/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes .../tzdata/zoneinfo/Atlantic/Azores | Bin 0 -> 1453 bytes .../tzdata/zoneinfo/Atlantic/Bermuda | Bin 0 -> 1024 bytes .../tzdata/zoneinfo/Atlantic/Canary | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Atlantic/Cape_Verde | Bin 0 -> 175 bytes .../tzdata/zoneinfo/Atlantic/Faeroe | Bin 0 -> 441 bytes .../tzdata/zoneinfo/Atlantic/Faroe | Bin 0 -> 441 bytes .../tzdata/zoneinfo/Atlantic/Jan_Mayen | Bin 0 -> 676 bytes .../tzdata/zoneinfo/Atlantic/Madeira | Bin 0 -> 1453 bytes .../tzdata/zoneinfo/Atlantic/Reykjavik | Bin 0 -> 753 bytes .../tzdata/zoneinfo/Atlantic/South_Georgia | Bin 0 -> 132 bytes .../tzdata/zoneinfo/Atlantic/St_Helena | Bin 0 -> 130 bytes .../tzdata/zoneinfo/Atlantic/Stanley | Bin 0 -> 789 bytes .../tzdata/zoneinfo/Atlantic/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 198 bytes .../tzdata/zoneinfo/Australia/ACT | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/Adelaide | Bin 0 -> 921 bytes .../tzdata/zoneinfo/Australia/Brisbane | Bin 0 -> 289 bytes .../tzdata/zoneinfo/Australia/Broken_Hill | Bin 0 -> 941 bytes .../tzdata/zoneinfo/Australia/Canberra | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/Currie | Bin 0 -> 1003 bytes .../tzdata/zoneinfo/Australia/Darwin | Bin 0 -> 234 bytes .../tzdata/zoneinfo/Australia/Eucla | Bin 0 -> 314 bytes .../tzdata/zoneinfo/Australia/Hobart | Bin 0 -> 1003 bytes .../tzdata/zoneinfo/Australia/LHI | Bin 0 -> 692 bytes .../tzdata/zoneinfo/Australia/Lindeman | Bin 0 -> 325 bytes .../tzdata/zoneinfo/Australia/Lord_Howe | Bin 0 -> 692 bytes .../tzdata/zoneinfo/Australia/Melbourne | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/NSW | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/North | Bin 0 -> 234 bytes .../tzdata/zoneinfo/Australia/Perth | Bin 0 -> 306 bytes .../tzdata/zoneinfo/Australia/Queensland | Bin 0 -> 289 bytes .../tzdata/zoneinfo/Australia/South | Bin 0 -> 921 bytes .../tzdata/zoneinfo/Australia/Sydney | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/Tasmania | Bin 0 -> 1003 bytes .../tzdata/zoneinfo/Australia/Victoria | Bin 0 -> 904 bytes .../tzdata/zoneinfo/Australia/West | Bin 0 -> 306 bytes .../tzdata/zoneinfo/Australia/Yancowinna | Bin 0 -> 941 bytes .../tzdata/zoneinfo/Australia/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 199 bytes .../site-packages/tzdata/zoneinfo/Brazil/Acre | Bin 0 -> 418 bytes .../tzdata/zoneinfo/Brazil/DeNoronha | Bin 0 -> 484 bytes .../site-packages/tzdata/zoneinfo/Brazil/East | Bin 0 -> 952 bytes .../site-packages/tzdata/zoneinfo/Brazil/West | Bin 0 -> 412 bytes .../tzdata/zoneinfo/Brazil/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes venv/Lib/site-packages/tzdata/zoneinfo/CET | Bin 0 -> 621 bytes .../Lib/site-packages/tzdata/zoneinfo/CST6CDT | Bin 0 -> 951 bytes .../tzdata/zoneinfo/Canada/Atlantic | Bin 0 -> 1672 bytes .../tzdata/zoneinfo/Canada/Central | Bin 0 -> 1294 bytes .../tzdata/zoneinfo/Canada/Eastern | Bin 0 -> 1717 bytes .../tzdata/zoneinfo/Canada/Mountain | Bin 0 -> 970 bytes .../tzdata/zoneinfo/Canada/Newfoundland | Bin 0 -> 1878 bytes .../tzdata/zoneinfo/Canada/Pacific | Bin 0 -> 1330 bytes .../tzdata/zoneinfo/Canada/Saskatchewan | Bin 0 -> 638 bytes .../tzdata/zoneinfo/Canada/Yukon | Bin 0 -> 1029 bytes .../tzdata/zoneinfo/Canada/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes .../tzdata/zoneinfo/Chile/Continental | Bin 0 -> 1282 bytes .../tzdata/zoneinfo/Chile/EasterIsland | Bin 0 -> 1102 bytes .../tzdata/zoneinfo/Chile/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 195 bytes venv/Lib/site-packages/tzdata/zoneinfo/Cuba | Bin 0 -> 1117 bytes venv/Lib/site-packages/tzdata/zoneinfo/EET | Bin 0 -> 497 bytes venv/Lib/site-packages/tzdata/zoneinfo/EST | Bin 0 -> 111 bytes .../Lib/site-packages/tzdata/zoneinfo/EST5EDT | Bin 0 -> 951 bytes venv/Lib/site-packages/tzdata/zoneinfo/Egypt | Bin 0 -> 1276 bytes venv/Lib/site-packages/tzdata/zoneinfo/Eire | Bin 0 -> 1496 bytes .../Lib/site-packages/tzdata/zoneinfo/Etc/GMT | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+0 | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+1 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+10 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+11 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+12 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+2 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+3 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+4 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+5 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+6 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+7 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+8 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT+9 | Bin 0 -> 113 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-0 | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-1 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-10 | Bin 0 -> 115 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-11 | Bin 0 -> 115 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-12 | Bin 0 -> 115 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-13 | Bin 0 -> 115 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-14 | Bin 0 -> 115 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-2 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-3 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-4 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-5 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-6 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-7 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-8 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT-9 | Bin 0 -> 114 bytes .../site-packages/tzdata/zoneinfo/Etc/GMT0 | Bin 0 -> 111 bytes .../tzdata/zoneinfo/Etc/Greenwich | Bin 0 -> 111 bytes .../Lib/site-packages/tzdata/zoneinfo/Etc/UCT | Bin 0 -> 111 bytes .../Lib/site-packages/tzdata/zoneinfo/Etc/UTC | Bin 0 -> 111 bytes .../tzdata/zoneinfo/Etc/Universal | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Etc/Zulu | Bin 0 -> 111 bytes .../tzdata/zoneinfo/Etc/__init__.py | 0 .../Etc/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 193 bytes .../tzdata/zoneinfo/Europe/Amsterdam | Bin 0 -> 1071 bytes .../tzdata/zoneinfo/Europe/Andorra | Bin 0 -> 389 bytes .../tzdata/zoneinfo/Europe/Astrakhan | Bin 0 -> 726 bytes .../tzdata/zoneinfo/Europe/Athens | Bin 0 -> 682 bytes .../tzdata/zoneinfo/Europe/Belfast | Bin 0 -> 1599 bytes .../tzdata/zoneinfo/Europe/Belgrade | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/Berlin | Bin 0 -> 705 bytes .../tzdata/zoneinfo/Europe/Bratislava | Bin 0 -> 723 bytes .../tzdata/zoneinfo/Europe/Brussels | Bin 0 -> 1103 bytes .../tzdata/zoneinfo/Europe/Bucharest | Bin 0 -> 661 bytes .../tzdata/zoneinfo/Europe/Budapest | Bin 0 -> 766 bytes .../tzdata/zoneinfo/Europe/Busingen | Bin 0 -> 497 bytes .../tzdata/zoneinfo/Europe/Chisinau | Bin 0 -> 755 bytes .../tzdata/zoneinfo/Europe/Copenhagen | Bin 0 -> 623 bytes .../tzdata/zoneinfo/Europe/Dublin | Bin 0 -> 1496 bytes .../tzdata/zoneinfo/Europe/Gibraltar | Bin 0 -> 1220 bytes .../tzdata/zoneinfo/Europe/Guernsey | Bin 0 -> 1599 bytes .../tzdata/zoneinfo/Europe/Helsinki | Bin 0 -> 481 bytes .../tzdata/zoneinfo/Europe/Isle_of_Man | Bin 0 -> 1599 bytes .../tzdata/zoneinfo/Europe/Istanbul | Bin 0 -> 1200 bytes .../tzdata/zoneinfo/Europe/Jersey | Bin 0 -> 1599 bytes .../tzdata/zoneinfo/Europe/Kaliningrad | Bin 0 -> 904 bytes .../site-packages/tzdata/zoneinfo/Europe/Kiev | Bin 0 -> 558 bytes .../tzdata/zoneinfo/Europe/Kirov | Bin 0 -> 717 bytes .../tzdata/zoneinfo/Europe/Lisbon | Bin 0 -> 1454 bytes .../tzdata/zoneinfo/Europe/Ljubljana | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/London | Bin 0 -> 1599 bytes .../tzdata/zoneinfo/Europe/Luxembourg | Bin 0 -> 1087 bytes .../tzdata/zoneinfo/Europe/Madrid | Bin 0 -> 897 bytes .../tzdata/zoneinfo/Europe/Malta | Bin 0 -> 928 bytes .../tzdata/zoneinfo/Europe/Mariehamn | Bin 0 -> 481 bytes .../tzdata/zoneinfo/Europe/Minsk | Bin 0 -> 808 bytes .../tzdata/zoneinfo/Europe/Monaco | Bin 0 -> 1114 bytes .../tzdata/zoneinfo/Europe/Moscow | Bin 0 -> 908 bytes .../tzdata/zoneinfo/Europe/Nicosia | Bin 0 -> 597 bytes .../site-packages/tzdata/zoneinfo/Europe/Oslo | Bin 0 -> 676 bytes .../tzdata/zoneinfo/Europe/Paris | Bin 0 -> 1105 bytes .../tzdata/zoneinfo/Europe/Podgorica | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/Prague | Bin 0 -> 723 bytes .../site-packages/tzdata/zoneinfo/Europe/Riga | Bin 0 -> 694 bytes .../site-packages/tzdata/zoneinfo/Europe/Rome | Bin 0 -> 947 bytes .../tzdata/zoneinfo/Europe/Samara | Bin 0 -> 732 bytes .../tzdata/zoneinfo/Europe/San_Marino | Bin 0 -> 947 bytes .../tzdata/zoneinfo/Europe/Sarajevo | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/Saratov | Bin 0 -> 726 bytes .../tzdata/zoneinfo/Europe/Simferopol | Bin 0 -> 865 bytes .../tzdata/zoneinfo/Europe/Skopje | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/Sofia | Bin 0 -> 592 bytes .../tzdata/zoneinfo/Europe/Stockholm | Bin 0 -> 497 bytes .../tzdata/zoneinfo/Europe/Tallinn | Bin 0 -> 675 bytes .../tzdata/zoneinfo/Europe/Tirane | Bin 0 -> 604 bytes .../tzdata/zoneinfo/Europe/Tiraspol | Bin 0 -> 755 bytes .../tzdata/zoneinfo/Europe/Ulyanovsk | Bin 0 -> 760 bytes .../tzdata/zoneinfo/Europe/Uzhgorod | Bin 0 -> 539 bytes .../tzdata/zoneinfo/Europe/Vaduz | Bin 0 -> 497 bytes .../tzdata/zoneinfo/Europe/Vatican | Bin 0 -> 947 bytes .../tzdata/zoneinfo/Europe/Vienna | Bin 0 -> 658 bytes .../tzdata/zoneinfo/Europe/Vilnius | Bin 0 -> 676 bytes .../tzdata/zoneinfo/Europe/Volgograd | Bin 0 -> 735 bytes .../tzdata/zoneinfo/Europe/Warsaw | Bin 0 -> 923 bytes .../tzdata/zoneinfo/Europe/Zagreb | Bin 0 -> 478 bytes .../tzdata/zoneinfo/Europe/Zaporozhye | Bin 0 -> 569 bytes .../tzdata/zoneinfo/Europe/Zurich | Bin 0 -> 497 bytes .../tzdata/zoneinfo/Europe/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes .../Lib/site-packages/tzdata/zoneinfo/Factory | Bin 0 -> 113 bytes venv/Lib/site-packages/tzdata/zoneinfo/GB | Bin 0 -> 1599 bytes .../Lib/site-packages/tzdata/zoneinfo/GB-Eire | Bin 0 -> 1599 bytes venv/Lib/site-packages/tzdata/zoneinfo/GMT | Bin 0 -> 111 bytes venv/Lib/site-packages/tzdata/zoneinfo/GMT+0 | Bin 0 -> 111 bytes venv/Lib/site-packages/tzdata/zoneinfo/GMT-0 | Bin 0 -> 111 bytes venv/Lib/site-packages/tzdata/zoneinfo/GMT0 | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Greenwich | Bin 0 -> 111 bytes venv/Lib/site-packages/tzdata/zoneinfo/HST | Bin 0 -> 112 bytes .../site-packages/tzdata/zoneinfo/Hongkong | Bin 0 -> 775 bytes .../Lib/site-packages/tzdata/zoneinfo/Iceland | Bin 0 -> 753 bytes .../tzdata/zoneinfo/Indian/Antananarivo | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Indian/Chagos | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Indian/Christmas | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Indian/Cocos | Bin 0 -> 140 bytes .../tzdata/zoneinfo/Indian/Comoro | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Indian/Kerguelen | Bin 0 -> 133 bytes .../site-packages/tzdata/zoneinfo/Indian/Mahe | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Indian/Maldives | Bin 0 -> 152 bytes .../tzdata/zoneinfo/Indian/Mauritius | Bin 0 -> 179 bytes .../tzdata/zoneinfo/Indian/Mayotte | Bin 0 -> 191 bytes .../tzdata/zoneinfo/Indian/Reunion | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Indian/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes venv/Lib/site-packages/tzdata/zoneinfo/Iran | Bin 0 -> 2004 bytes venv/Lib/site-packages/tzdata/zoneinfo/Israel | Bin 0 -> 1074 bytes .../Lib/site-packages/tzdata/zoneinfo/Jamaica | Bin 0 -> 339 bytes venv/Lib/site-packages/tzdata/zoneinfo/Japan | Bin 0 -> 213 bytes .../site-packages/tzdata/zoneinfo/Kwajalein | Bin 0 -> 219 bytes venv/Lib/site-packages/tzdata/zoneinfo/Libya | Bin 0 -> 431 bytes venv/Lib/site-packages/tzdata/zoneinfo/MET | Bin 0 -> 621 bytes venv/Lib/site-packages/tzdata/zoneinfo/MST | Bin 0 -> 111 bytes .../Lib/site-packages/tzdata/zoneinfo/MST7MDT | Bin 0 -> 951 bytes .../tzdata/zoneinfo/Mexico/BajaNorte | Bin 0 -> 1025 bytes .../tzdata/zoneinfo/Mexico/BajaSur | Bin 0 -> 367 bytes .../tzdata/zoneinfo/Mexico/General | Bin 0 -> 412 bytes .../tzdata/zoneinfo/Mexico/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 196 bytes venv/Lib/site-packages/tzdata/zoneinfo/NZ | Bin 0 -> 1043 bytes .../Lib/site-packages/tzdata/zoneinfo/NZ-CHAT | Bin 0 -> 808 bytes venv/Lib/site-packages/tzdata/zoneinfo/Navajo | Bin 0 -> 1042 bytes venv/Lib/site-packages/tzdata/zoneinfo/PRC | Bin 0 -> 393 bytes .../Lib/site-packages/tzdata/zoneinfo/PST8PDT | Bin 0 -> 951 bytes .../tzdata/zoneinfo/Pacific/Apia | Bin 0 -> 407 bytes .../tzdata/zoneinfo/Pacific/Auckland | Bin 0 -> 1043 bytes .../tzdata/zoneinfo/Pacific/Bougainville | Bin 0 -> 201 bytes .../tzdata/zoneinfo/Pacific/Chatham | Bin 0 -> 808 bytes .../tzdata/zoneinfo/Pacific/Chuuk | Bin 0 -> 195 bytes .../tzdata/zoneinfo/Pacific/Easter | Bin 0 -> 1102 bytes .../tzdata/zoneinfo/Pacific/Efate | Bin 0 -> 342 bytes .../tzdata/zoneinfo/Pacific/Enderbury | Bin 0 -> 172 bytes .../tzdata/zoneinfo/Pacific/Fakaofo | Bin 0 -> 153 bytes .../tzdata/zoneinfo/Pacific/Fiji | Bin 0 -> 428 bytes .../tzdata/zoneinfo/Pacific/Funafuti | Bin 0 -> 134 bytes .../tzdata/zoneinfo/Pacific/Galapagos | Bin 0 -> 175 bytes .../tzdata/zoneinfo/Pacific/Gambier | Bin 0 -> 132 bytes .../tzdata/zoneinfo/Pacific/Guadalcanal | Bin 0 -> 134 bytes .../tzdata/zoneinfo/Pacific/Guam | Bin 0 -> 350 bytes .../tzdata/zoneinfo/Pacific/Honolulu | Bin 0 -> 221 bytes .../tzdata/zoneinfo/Pacific/Johnston | Bin 0 -> 221 bytes .../tzdata/zoneinfo/Pacific/Kanton | Bin 0 -> 172 bytes .../tzdata/zoneinfo/Pacific/Kiritimati | Bin 0 -> 174 bytes .../tzdata/zoneinfo/Pacific/Kosrae | Bin 0 -> 242 bytes .../tzdata/zoneinfo/Pacific/Kwajalein | Bin 0 -> 219 bytes .../tzdata/zoneinfo/Pacific/Majuro | Bin 0 -> 218 bytes .../tzdata/zoneinfo/Pacific/Marquesas | Bin 0 -> 139 bytes .../tzdata/zoneinfo/Pacific/Midway | Bin 0 -> 146 bytes .../tzdata/zoneinfo/Pacific/Nauru | Bin 0 -> 183 bytes .../tzdata/zoneinfo/Pacific/Niue | Bin 0 -> 154 bytes .../tzdata/zoneinfo/Pacific/Norfolk | Bin 0 -> 247 bytes .../tzdata/zoneinfo/Pacific/Noumea | Bin 0 -> 198 bytes .../tzdata/zoneinfo/Pacific/Pago_Pago | Bin 0 -> 146 bytes .../tzdata/zoneinfo/Pacific/Palau | Bin 0 -> 148 bytes .../tzdata/zoneinfo/Pacific/Pitcairn | Bin 0 -> 153 bytes .../tzdata/zoneinfo/Pacific/Pohnpei | Bin 0 -> 214 bytes .../tzdata/zoneinfo/Pacific/Ponape | Bin 0 -> 214 bytes .../tzdata/zoneinfo/Pacific/Port_Moresby | Bin 0 -> 154 bytes .../tzdata/zoneinfo/Pacific/Rarotonga | Bin 0 -> 406 bytes .../tzdata/zoneinfo/Pacific/Saipan | Bin 0 -> 350 bytes .../tzdata/zoneinfo/Pacific/Samoa | Bin 0 -> 146 bytes .../tzdata/zoneinfo/Pacific/Tahiti | Bin 0 -> 133 bytes .../tzdata/zoneinfo/Pacific/Tarawa | Bin 0 -> 134 bytes .../tzdata/zoneinfo/Pacific/Tongatapu | Bin 0 -> 237 bytes .../tzdata/zoneinfo/Pacific/Truk | Bin 0 -> 195 bytes .../tzdata/zoneinfo/Pacific/Wake | Bin 0 -> 134 bytes .../tzdata/zoneinfo/Pacific/Wallis | Bin 0 -> 134 bytes .../site-packages/tzdata/zoneinfo/Pacific/Yap | Bin 0 -> 195 bytes .../tzdata/zoneinfo/Pacific/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 197 bytes venv/Lib/site-packages/tzdata/zoneinfo/Poland | Bin 0 -> 923 bytes .../site-packages/tzdata/zoneinfo/Portugal | Bin 0 -> 1454 bytes venv/Lib/site-packages/tzdata/zoneinfo/ROC | Bin 0 -> 511 bytes venv/Lib/site-packages/tzdata/zoneinfo/ROK | Bin 0 -> 415 bytes .../site-packages/tzdata/zoneinfo/Singapore | Bin 0 -> 256 bytes venv/Lib/site-packages/tzdata/zoneinfo/Turkey | Bin 0 -> 1200 bytes venv/Lib/site-packages/tzdata/zoneinfo/UCT | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/US/Alaska | Bin 0 -> 977 bytes .../site-packages/tzdata/zoneinfo/US/Aleutian | Bin 0 -> 969 bytes .../site-packages/tzdata/zoneinfo/US/Arizona | Bin 0 -> 240 bytes .../site-packages/tzdata/zoneinfo/US/Central | Bin 0 -> 1754 bytes .../tzdata/zoneinfo/US/East-Indiana | Bin 0 -> 531 bytes .../site-packages/tzdata/zoneinfo/US/Eastern | Bin 0 -> 1744 bytes .../site-packages/tzdata/zoneinfo/US/Hawaii | Bin 0 -> 221 bytes .../tzdata/zoneinfo/US/Indiana-Starke | Bin 0 -> 1016 bytes .../site-packages/tzdata/zoneinfo/US/Michigan | Bin 0 -> 899 bytes .../site-packages/tzdata/zoneinfo/US/Mountain | Bin 0 -> 1042 bytes .../site-packages/tzdata/zoneinfo/US/Pacific | Bin 0 -> 1294 bytes .../site-packages/tzdata/zoneinfo/US/Samoa | Bin 0 -> 146 bytes .../tzdata/zoneinfo/US/__init__.py | 0 .../US/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 192 bytes venv/Lib/site-packages/tzdata/zoneinfo/UTC | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/Universal | Bin 0 -> 111 bytes venv/Lib/site-packages/tzdata/zoneinfo/W-SU | Bin 0 -> 908 bytes venv/Lib/site-packages/tzdata/zoneinfo/WET | Bin 0 -> 494 bytes venv/Lib/site-packages/tzdata/zoneinfo/Zulu | Bin 0 -> 111 bytes .../site-packages/tzdata/zoneinfo/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 189 bytes .../site-packages/tzdata/zoneinfo/iso3166.tab | 274 + .../site-packages/tzdata/zoneinfo/leapseconds | 82 + .../site-packages/tzdata/zoneinfo/tzdata.zi | 4437 +++++++ .../site-packages/tzdata/zoneinfo/zone.tab | 454 + .../tzdata/zoneinfo/zone1970.tab | 374 + venv/Lib/site-packages/tzdata/zones | 595 + venv/Scripts/Activate.ps1 | 443 + venv/Scripts/activate | 69 + venv/Scripts/activate.bat | 34 + venv/Scripts/deactivate.bat | 22 + venv/Scripts/django-admin.exe | Bin 0 -> 106422 bytes venv/Scripts/pip.exe | Bin 0 -> 106380 bytes venv/Scripts/pip3.10.exe | Bin 0 -> 106380 bytes venv/Scripts/pip3.exe | Bin 0 -> 106380 bytes venv/Scripts/python.exe | Bin 0 -> 264176 bytes venv/Scripts/pythonw.exe | Bin 0 -> 252912 bytes venv/Scripts/sqlformat.exe | Bin 0 -> 106375 bytes venv/pyvenv.cfg | 3 + 6553 files changed, 787242 insertions(+) create mode 100644 my_first_project/my_first_project/db.sqlite3 create mode 100644 my_first_project/my_first_project/manage.py create mode 100644 my_first_project/my_first_project/my_first_app/__init__.py create mode 100644 my_first_project/my_first_project/my_first_app/__pycache__/__init__.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/__pycache__/admin.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/__pycache__/apps.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/__pycache__/models.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/__pycache__/views.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/admin.py create mode 100644 my_first_project/my_first_project/my_first_app/apps.py create mode 100644 my_first_project/my_first_project/my_first_app/migrations/__init__.py create mode 100644 my_first_project/my_first_project/my_first_app/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_app/models.py create mode 100644 my_first_project/my_first_project/my_first_app/tests.py create mode 100644 my_first_project/my_first_project/my_first_app/views.py create mode 100644 my_first_project/my_first_project/my_first_project/__init__.py create mode 100644 my_first_project/my_first_project/my_first_project/__pycache__/__init__.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_project/__pycache__/settings.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_project/__pycache__/urls.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_project/__pycache__/wsgi.cpython-310.pyc create mode 100644 my_first_project/my_first_project/my_first_project/asgi.py create mode 100644 my_first_project/my_first_project/my_first_project/settings.py create mode 100644 my_first_project/my_first_project/my_first_project/urls.py create mode 100644 my_first_project/my_first_project/my_first_project/wsgi.py create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/AUTHORS create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE.python create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/METADATA create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/RECORD create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/Django-4.0.6.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/_distutils_hack/__init__.py create mode 100644 venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-310.pyc create mode 100644 venv/Lib/site-packages/_distutils_hack/override.py create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/asgiref-3.5.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/asgiref/__init__.py create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/compatibility.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/current_thread_executor.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/local.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/server.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/sync.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/testing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/timeout.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/typing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/__pycache__/wsgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/asgiref/compatibility.py create mode 100644 venv/Lib/site-packages/asgiref/current_thread_executor.py create mode 100644 venv/Lib/site-packages/asgiref/local.py create mode 100644 venv/Lib/site-packages/asgiref/py.typed create mode 100644 venv/Lib/site-packages/asgiref/server.py create mode 100644 venv/Lib/site-packages/asgiref/sync.py create mode 100644 venv/Lib/site-packages/asgiref/testing.py create mode 100644 venv/Lib/site-packages/asgiref/timeout.py create mode 100644 venv/Lib/site-packages/asgiref/typing.py create mode 100644 venv/Lib/site-packages/asgiref/wsgi.py create mode 100644 venv/Lib/site-packages/distutils-precedence.pth create mode 100644 venv/Lib/site-packages/django/__init__.py create mode 100644 venv/Lib/site-packages/django/__main__.py create mode 100644 venv/Lib/site-packages/django/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/__pycache__/shortcuts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/apps/__init__.py create mode 100644 venv/Lib/site-packages/django/apps/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/apps/__pycache__/config.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/apps/__pycache__/registry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/apps/config.py create mode 100644 venv/Lib/site-packages/django/apps/registry.py create mode 100644 venv/Lib/site-packages/django/conf/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/__pycache__/global_settings.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/app_template/__init__.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/admin.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/apps.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/migrations/__init__.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/models.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/tests.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/app_template/views.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/global_settings.py create mode 100644 venv/Lib/site-packages/django/conf/locale/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ar/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ar_DZ/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/az/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/az/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/az/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/az/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bg/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bn/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/bs/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ca/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/cs/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/cy/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/da/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/da/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/da/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/da/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/de/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/de/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/de/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/de/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/de_CH/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/de_CH/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/de_CH/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/de_CH/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/el/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/el/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/el/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/el/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/en/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en_AU/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/en_GB/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/eo/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/es/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_AR/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_CO/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_MX/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_NI/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_NI/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_NI/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_NI/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_PR/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_PR/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_PR/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/es_PR/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/et/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/et/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/et/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/et/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/eu/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fa/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fi/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fr/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/fy/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ga/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/gd/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/gl/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/he/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/he/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/he/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/he/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hi/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hr/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/hu/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/id/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/id/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/id/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/id/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ig/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/is/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/is/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/is/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/is/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/it/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/it/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/it/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/it/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ja/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ka/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/km/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/km/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/km/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/km/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/kn/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ko/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ky/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/lt/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/lv/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/mk/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ml/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/mn/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ms/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nb/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nl/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/nn/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pl/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pt/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/pt_BR/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ro/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ru/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sk/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sl/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sq/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sr/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sr_Latn/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/sv/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/ta/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/te/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/te/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/te/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/te/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tg/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/th/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/th/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/th/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/th/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tk/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/tr/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/uk/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/uz/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/vi/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hans/formats.py create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/locale/zh_Hant/formats.py create mode 100644 venv/Lib/site-packages/django/conf/project_template/manage.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/project_template/project_name/__init__.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/project_template/project_name/asgi.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/project_template/project_name/settings.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/project_template/project_name/urls.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/project_template/project_name/wsgi.py-tpl create mode 100644 venv/Lib/site-packages/django/conf/urls/__init__.py create mode 100644 venv/Lib/site-packages/django/conf/urls/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/urls/__pycache__/i18n.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/urls/__pycache__/static.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/conf/urls/i18n.py create mode 100644 venv/Lib/site-packages/django/conf/urls/static.py create mode 100644 venv/Lib/site-packages/django/contrib/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/actions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/decorators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/filters.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/forms.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/helpers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/options.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/sites.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/tests.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/__pycache__/widgets.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/actions.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/checks.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/decorators.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/exceptions.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/filters.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/forms.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/helpers.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo create mode 100644 venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/0002_logentry_remove_auto_add.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0003_logentry_add_action_flag_choices.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/models.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/options.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/sites.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/autocomplete.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/base.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/changelists.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/dashboard.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/fonts.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/forms.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/login.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/rtl.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/css/widgets.css create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/README.txt create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/LICENSE create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/README.txt create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-no.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/search.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectBox.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/actions.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/autocomplete.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/calendar.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/cancel.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/change_form.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/collapse.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/core.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/inlines.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/jquery.init.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/popup_response.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/urlify.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/app_index.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/filter.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/popup_response.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/radio.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/url.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/admin_list.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/log.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/admin_list.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/admin_modify.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/admin_urls.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/base.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/templatetags/log.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/tests.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/__pycache__/autocomplete.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/__pycache__/decorators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/__pycache__/main.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/autocomplete.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/decorators.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/views/main.py create mode 100644 venv/Lib/site-packages/django/contrib/admin/widgets.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/urls.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/admindocs/views.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/admin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/backends.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/base_user.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/context_processors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/decorators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/forms.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/hashers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/mixins.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/password_validation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/tokens.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/validators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/admin.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/backends.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/base_user.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/checks.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/common-passwords.txt.gz create mode 100644 venv/Lib/site-packages/django/contrib/auth/context_processors.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/decorators.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/forms.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/handlers/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/modwsgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/handlers/modwsgi.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/hashers.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/__pycache__/changepassword.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/__pycache__/createsuperuser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/changepassword.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/management/commands/createsuperuser.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0003_alter_user_email_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0006_require_contenttypes_0002.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0008_alter_user_username_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0011_update_proxy_permissions.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/0012_alter_user_first_name_max_length.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0002_alter_permission_name_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0005_alter_user_last_login_null.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0008_alter_user_username_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0009_alter_user_last_name_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0010_alter_group_name_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0011_update_proxy_permissions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0012_alter_user_first_name_max_length.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/auth/mixins.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/models.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/password_validation.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/signals.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/templates/auth/widgets/read_only_password_hash.html create mode 100644 venv/Lib/site-packages/django/contrib/auth/templates/registration/password_reset_subject.txt create mode 100644 venv/Lib/site-packages/django/contrib/auth/tokens.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/urls.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/validators.py create mode 100644 venv/Lib/site-packages/django/contrib/auth/views.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/admin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/forms.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/admin.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/checks.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/fields.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/forms.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/management/commands/remove_stale_contenttypes.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/0002_remove_content_type_name.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/0002_remove_content_type_name.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/models.py create mode 100644 venv/Lib/site-packages/django/contrib/contenttypes/views.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/admin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/forms.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/sitemaps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/admin.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/forms.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/models.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/sitemaps.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/templatetags/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/templatetags/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/templatetags/__pycache__/flatpages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/templatetags/flatpages.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/urls.py create mode 100644 venv/Lib/site-packages/django/contrib/flatpages/views.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/feeds.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/geometry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/measure.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/ptr.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/shortcuts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/options.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/widgets.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/options.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/admin/widgets.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/adapter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/adapter.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/features.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/models.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/base/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/features.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/introspection.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/schema.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/adapter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/adapter.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/features.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/introspection.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/models.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/schema.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/adapter.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/const.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/features.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/introspection.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/models.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/pgraster.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/schema.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/adapter.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/client.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/features.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/models.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/schema.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/backends/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/aggregates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/functions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/lookups.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/proxy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/aggregates.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/fields.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/functions.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/lookups.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/proxy.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/sql/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/db/models/sql/conversion.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/feeds.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/widgets.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/fields.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/forms/widgets.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/LICENSE create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/datasource.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/driver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/envelope.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/error.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/feature.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/field.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geometries.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geomtype.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/layer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/libgdal.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/srs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/datasource.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/driver.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/envelope.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/error.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/feature.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/field.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/geometries.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/geomtype.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/layer.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/libgdal.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/ds.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/errcheck.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/ds.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/generation.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/geom.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/raster.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/srs.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/band.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/const.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/source.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/band.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/const.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/raster/source.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/gdal/srs.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/resources.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geoip2/resources.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geometry.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/LICENSE create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/collections.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/coordseq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/error.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/factory.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/geometry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/io.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/libgeos.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/linestring.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/mutable_list.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/point.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/polygon.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/prepared.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/base.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/collections.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/coordseq.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/error.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/factory.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/geometry.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/io.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/libgeos.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/linestring.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/mutable_list.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/point.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/polygon.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prepared.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/coordseq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/errcheck.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/io.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/threadsafe.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/topology.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/coordseq.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/errcheck.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/geom.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/io.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/misc.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/predicates.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/prepared.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/threadsafe.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/geos/prototypes/topology.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/inspectdb.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/management/commands/ogrinspect.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/measure.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/ptr.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/serializers/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/serializers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/serializers/__pycache__/geojson.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/serializers/geojson.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/shortcuts.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/__pycache__/kml.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/kml.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/sitemaps/views.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/css/ol3.css create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_line_off.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_line_on.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_off.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg create mode 100644 venv/Lib/site-packages/django/contrib/gis/static/gis/js/OLMapWidget.js create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.js create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/osm.html create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/osm.js create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/kml/base.kml create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/kml/placemarks.kml create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/openlayers-osm.html create mode 100644 venv/Lib/site-packages/django/contrib/gis/templates/gis/openlayers.html create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/layermapping.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/ogrinfo.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/ogrinspect.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/srs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/layermapping.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/ogrinfo.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/ogrinspect.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/utils/srs.py create mode 100644 venv/Lib/site-packages/django/contrib/gis/views.py create mode 100644 venv/Lib/site-packages/django/contrib/humanize/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/humanize/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/humanize/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/humanize/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/humanize/templatetags/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/humanize/templatetags/__pycache__/humanize.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/humanize/templatetags/humanize.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/api.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/constants.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/api.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/constants.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/context_processors.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/cookie.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/base.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/cookie.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/fallback.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/storage/session.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/messages/views.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/constraints.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/expressions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/functions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/lookups.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/search.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/serializers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/__pycache__/validators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/general.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/mixins.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/statistics.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/general.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/mixins.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/aggregates/statistics.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/constraints.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/expressions.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/hstore.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/jsonb.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/ranges.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/array.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/citext.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/hstore.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/jsonb.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/ranges.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/fields/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/array.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/hstore.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/array.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/hstore.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/forms/ranges.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/functions.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/indexes.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/postgres/lookups.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/operations.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/search.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/serializers.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/signals.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html create mode 100644 venv/Lib/site-packages/django/contrib/postgres/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/postgres/validators.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__pycache__/admin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/admin.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/redirects/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/0002_alter_redirect_new_path_help_text.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/0002_alter_redirect_new_path_help_text.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/redirects/models.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/__pycache__/serializers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/file.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/base.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/cache.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/cached_db.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/db.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/file.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/backends/signed_cookies.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/base_session.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/exceptions.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/management/commands/clearsessions.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sessions/models.py create mode 100644 venv/Lib/site-packages/django/contrib/sessions/serializers.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__pycache__/ping_google.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/management/commands/ping_google.py create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/templates/sitemap.xml create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml create mode 100644 venv/Lib/site-packages/django/contrib/sitemaps/views.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/admin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/management.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/managers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/middleware.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/requests.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/admin.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/checks.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/Lib/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/Lib/site-packages/django/contrib/sites/management.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/managers.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/middleware.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/0001_initial.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/sites/models.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/requests.py create mode 100644 venv/Lib/site-packages/django/contrib/sites/shortcuts.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/handlers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/checks.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/finders.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/handlers.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/runserver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/findstatic.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/management/commands/runserver.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/storage.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/testing.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/urls.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/utils.py create mode 100644 venv/Lib/site-packages/django/contrib/staticfiles/views.py create mode 100644 venv/Lib/site-packages/django/contrib/syndication/__init__.py create mode 100644 venv/Lib/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/syndication/__pycache__/apps.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/syndication/__pycache__/views.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/contrib/syndication/apps.py create mode 100644 venv/Lib/site-packages/django/contrib/syndication/views.py create mode 100644 venv/Lib/site-packages/django/core/__init__.py create mode 100644 venv/Lib/site-packages/django/core/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/asgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/paginator.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/signing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/validators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/__pycache__/wsgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/asgi.py create mode 100644 venv/Lib/site-packages/django/core/cache/__init__.py create mode 100644 venv/Lib/site-packages/django/core/cache/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/db.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/filebased.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/locmem.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/memcached.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/__pycache__/redis.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/cache/backends/base.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/db.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/dummy.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/filebased.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/locmem.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/memcached.py create mode 100644 venv/Lib/site-packages/django/core/cache/backends/redis.py create mode 100644 venv/Lib/site-packages/django/core/cache/utils.py create mode 100644 venv/Lib/site-packages/django/core/checks/__init__.py create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/async_checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/caches.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/database.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/files.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/messages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/model_checks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/registry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/templates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/translation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/async_checks.py create mode 100644 venv/Lib/site-packages/django/core/checks/caches.py create mode 100644 venv/Lib/site-packages/django/core/checks/compatibility/__init__.py create mode 100644 venv/Lib/site-packages/django/core/checks/compatibility/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/compatibility/__pycache__/django_4_0.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/compatibility/django_4_0.py create mode 100644 venv/Lib/site-packages/django/core/checks/database.py create mode 100644 venv/Lib/site-packages/django/core/checks/files.py create mode 100644 venv/Lib/site-packages/django/core/checks/messages.py create mode 100644 venv/Lib/site-packages/django/core/checks/model_checks.py create mode 100644 venv/Lib/site-packages/django/core/checks/registry.py create mode 100644 venv/Lib/site-packages/django/core/checks/security/__init__.py create mode 100644 venv/Lib/site-packages/django/core/checks/security/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/security/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/security/__pycache__/csrf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/security/__pycache__/sessions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/checks/security/base.py create mode 100644 venv/Lib/site-packages/django/core/checks/security/csrf.py create mode 100644 venv/Lib/site-packages/django/core/checks/security/sessions.py create mode 100644 venv/Lib/site-packages/django/core/checks/templates.py create mode 100644 venv/Lib/site-packages/django/core/checks/translation.py create mode 100644 venv/Lib/site-packages/django/core/checks/urls.py create mode 100644 venv/Lib/site-packages/django/core/exceptions.py create mode 100644 venv/Lib/site-packages/django/core/files/__init__.py create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/images.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/locks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/move.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/storage.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/temp.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/uploadedfile.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/uploadhandler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/files/base.py create mode 100644 venv/Lib/site-packages/django/core/files/images.py create mode 100644 venv/Lib/site-packages/django/core/files/locks.py create mode 100644 venv/Lib/site-packages/django/core/files/move.py create mode 100644 venv/Lib/site-packages/django/core/files/storage.py create mode 100644 venv/Lib/site-packages/django/core/files/temp.py create mode 100644 venv/Lib/site-packages/django/core/files/uploadedfile.py create mode 100644 venv/Lib/site-packages/django/core/files/uploadhandler.py create mode 100644 venv/Lib/site-packages/django/core/files/utils.py create mode 100644 venv/Lib/site-packages/django/core/handlers/__init__.py create mode 100644 venv/Lib/site-packages/django/core/handlers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/handlers/__pycache__/asgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/handlers/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/handlers/__pycache__/exception.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/handlers/__pycache__/wsgi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/handlers/asgi.py create mode 100644 venv/Lib/site-packages/django/core/handlers/base.py create mode 100644 venv/Lib/site-packages/django/core/handlers/exception.py create mode 100644 venv/Lib/site-packages/django/core/handlers/wsgi.py create mode 100644 venv/Lib/site-packages/django/core/mail/__init__.py create mode 100644 venv/Lib/site-packages/django/core/mail/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/__pycache__/message.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/console.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/dummy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/filebased.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/locmem.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/__pycache__/smtp.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/mail/backends/base.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/console.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/dummy.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/filebased.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/locmem.py create mode 100644 venv/Lib/site-packages/django/core/mail/backends/smtp.py create mode 100644 venv/Lib/site-packages/django/core/mail/message.py create mode 100644 venv/Lib/site-packages/django/core/mail/utils.py create mode 100644 venv/Lib/site-packages/django/core/management/__init__.py create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/color.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/sql.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/templates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/base.py create mode 100644 venv/Lib/site-packages/django/core/management/color.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/__init__.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/compilemessages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/createcachetable.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/diffsettings.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/dumpdata.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/flush.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/makemessages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/migrate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/runserver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/shell.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlmigrate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/squashmigrations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/startapp.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/startproject.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/test.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/__pycache__/testserver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/management/commands/check.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/compilemessages.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/createcachetable.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/dbshell.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/diffsettings.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/dumpdata.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/flush.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/inspectdb.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/loaddata.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/makemessages.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/makemigrations.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/migrate.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/runserver.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/sendtestemail.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/shell.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/showmigrations.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/sqlflush.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/sqlmigrate.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/sqlsequencereset.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/squashmigrations.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/startapp.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/startproject.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/test.py create mode 100644 venv/Lib/site-packages/django/core/management/commands/testserver.py create mode 100644 venv/Lib/site-packages/django/core/management/sql.py create mode 100644 venv/Lib/site-packages/django/core/management/templates.py create mode 100644 venv/Lib/site-packages/django/core/management/utils.py create mode 100644 venv/Lib/site-packages/django/core/paginator.py create mode 100644 venv/Lib/site-packages/django/core/serializers/__init__.py create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/json.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/jsonl.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/python.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/serializers/base.py create mode 100644 venv/Lib/site-packages/django/core/serializers/json.py create mode 100644 venv/Lib/site-packages/django/core/serializers/jsonl.py create mode 100644 venv/Lib/site-packages/django/core/serializers/python.py create mode 100644 venv/Lib/site-packages/django/core/serializers/pyyaml.py create mode 100644 venv/Lib/site-packages/django/core/serializers/xml_serializer.py create mode 100644 venv/Lib/site-packages/django/core/servers/__init__.py create mode 100644 venv/Lib/site-packages/django/core/servers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/servers/__pycache__/basehttp.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/core/servers/basehttp.py create mode 100644 venv/Lib/site-packages/django/core/signals.py create mode 100644 venv/Lib/site-packages/django/core/signing.py create mode 100644 venv/Lib/site-packages/django/core/validators.py create mode 100644 venv/Lib/site-packages/django/core/wsgi.py create mode 100644 venv/Lib/site-packages/django/db/__init__.py create mode 100644 venv/Lib/site-packages/django/db/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/__pycache__/transaction.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/__pycache__/ddl_references.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/creation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/__pycache__/validation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/base/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/client.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/creation.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/introspection.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/operations.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/schema.py create mode 100644 venv/Lib/site-packages/django/db/backends/base/validation.py create mode 100644 venv/Lib/site-packages/django/db/backends/ddl_references.py create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/dummy/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/compiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/creation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/__pycache__/validation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/client.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/compiler.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/creation.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/introspection.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/operations.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/schema.py create mode 100644 venv/Lib/site-packages/django/db/backends/mysql/validation.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/creation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/__pycache__/validation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/client.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/creation.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/functions.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/introspection.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/operations.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/schema.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/utils.py create mode 100644 venv/Lib/site-packages/django/db/backends/oracle/validation.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/client.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/creation.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/introspection.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/operations.py create mode 100644 venv/Lib/site-packages/django/db/backends/postgresql/schema.py create mode 100644 venv/Lib/site-packages/django/db/backends/signals.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__init__.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/creation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/features.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/introspection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/operations.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/schema.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/base.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/client.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/creation.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/features.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/introspection.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/operations.py create mode 100644 venv/Lib/site-packages/django/db/backends/sqlite3/schema.py create mode 100644 venv/Lib/site-packages/django/db/backends/utils.py create mode 100644 venv/Lib/site-packages/django/db/migrations/__init__.py create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/autodetector.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/executor.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/graph.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/loader.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/migration.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/optimizer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/questioner.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/recorder.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/serializer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/state.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/__pycache__/writer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/autodetector.py create mode 100644 venv/Lib/site-packages/django/db/migrations/exceptions.py create mode 100644 venv/Lib/site-packages/django/db/migrations/executor.py create mode 100644 venv/Lib/site-packages/django/db/migrations/graph.py create mode 100644 venv/Lib/site-packages/django/db/migrations/loader.py create mode 100644 venv/Lib/site-packages/django/db/migrations/migration.py create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__init__.py create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/__pycache__/special.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/base.py create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/fields.py create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/models.py create mode 100644 venv/Lib/site-packages/django/db/migrations/operations/special.py create mode 100644 venv/Lib/site-packages/django/db/migrations/optimizer.py create mode 100644 venv/Lib/site-packages/django/db/migrations/questioner.py create mode 100644 venv/Lib/site-packages/django/db/migrations/recorder.py create mode 100644 venv/Lib/site-packages/django/db/migrations/serializer.py create mode 100644 venv/Lib/site-packages/django/db/migrations/state.py create mode 100644 venv/Lib/site-packages/django/db/migrations/utils.py create mode 100644 venv/Lib/site-packages/django/db/migrations/writer.py create mode 100644 venv/Lib/site-packages/django/db/models/__init__.py create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/aggregates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/constants.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/constraints.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/deletion.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/enums.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/expressions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/indexes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/lookups.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/manager.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/options.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/query.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/query_utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/aggregates.py create mode 100644 venv/Lib/site-packages/django/db/models/base.py create mode 100644 venv/Lib/site-packages/django/db/models/constants.py create mode 100644 venv/Lib/site-packages/django/db/models/constraints.py create mode 100644 venv/Lib/site-packages/django/db/models/deletion.py create mode 100644 venv/Lib/site-packages/django/db/models/enums.py create mode 100644 venv/Lib/site-packages/django/db/models/expressions.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/__init__.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/files.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/json.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/mixins.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/proxy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/related.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/related_descriptors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/related_lookups.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/__pycache__/reverse_related.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/fields/files.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/json.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/mixins.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/proxy.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/related.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/related_descriptors.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/related_lookups.py create mode 100644 venv/Lib/site-packages/django/db/models/fields/reverse_related.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/__init__.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/comparison.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/datetime.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/math.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/mixins.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/text.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/__pycache__/window.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/functions/comparison.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/datetime.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/math.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/mixins.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/text.py create mode 100644 venv/Lib/site-packages/django/db/models/functions/window.py create mode 100644 venv/Lib/site-packages/django/db/models/indexes.py create mode 100644 venv/Lib/site-packages/django/db/models/lookups.py create mode 100644 venv/Lib/site-packages/django/db/models/manager.py create mode 100644 venv/Lib/site-packages/django/db/models/options.py create mode 100644 venv/Lib/site-packages/django/db/models/query.py create mode 100644 venv/Lib/site-packages/django/db/models/query_utils.py create mode 100644 venv/Lib/site-packages/django/db/models/signals.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/__init__.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/compiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/constants.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/datastructures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/query.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/__pycache__/where.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/db/models/sql/compiler.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/constants.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/datastructures.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/query.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/subqueries.py create mode 100644 venv/Lib/site-packages/django/db/models/sql/where.py create mode 100644 venv/Lib/site-packages/django/db/models/utils.py create mode 100644 venv/Lib/site-packages/django/db/transaction.py create mode 100644 venv/Lib/site-packages/django/db/utils.py create mode 100644 venv/Lib/site-packages/django/dispatch/__init__.py create mode 100644 venv/Lib/site-packages/django/dispatch/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/dispatch/__pycache__/dispatcher.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/dispatch/dispatcher.py create mode 100644 venv/Lib/site-packages/django/dispatch/license.txt create mode 100644 venv/Lib/site-packages/django/forms/__init__.py create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/boundfield.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/forms.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/formsets.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/renderers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/__pycache__/widgets.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/forms/boundfield.py create mode 100644 venv/Lib/site-packages/django/forms/fields.py create mode 100644 venv/Lib/site-packages/django/forms/forms.py create mode 100644 venv/Lib/site-packages/django/forms/formsets.py create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/attrs.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/default.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/dict/default.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/dict/text.txt create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/dict/ul.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/list/default.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/list/text.txt create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/errors/list/ul.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/formsets/default.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/formsets/p.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/formsets/table.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/formsets/ul.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/label.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/p.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/table.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/ul.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/attrs.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/checkbox.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_option.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_select.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/clearable_file_input.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/date.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/datetime.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/email.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/file.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/hidden.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/input.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/input_option.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/multiple_hidden.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/multiple_input.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/multiwidget.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/number.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/password.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/radio.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/radio_option.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/select.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/select_date.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/select_option.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/splitdatetime.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/splithiddendatetime.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/text.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/textarea.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/time.html create mode 100644 venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/url.html create mode 100644 venv/Lib/site-packages/django/forms/models.py create mode 100644 venv/Lib/site-packages/django/forms/renderers.py create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/attrs.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/default.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/default.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/text.txt create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/ul.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/default.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/text.txt create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/ul.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/formsets/default.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/formsets/p.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/formsets/table.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/formsets/ul.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/label.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/p.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/table.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/ul.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/attrs.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/date.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/datetime.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/email.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/file.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/hidden.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input_option.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/number.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/password.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio_option.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_date.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_option.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/text.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/textarea.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/time.html create mode 100644 venv/Lib/site-packages/django/forms/templates/django/forms/widgets/url.html create mode 100644 venv/Lib/site-packages/django/forms/utils.py create mode 100644 venv/Lib/site-packages/django/forms/widgets.py create mode 100644 venv/Lib/site-packages/django/http/__init__.py create mode 100644 venv/Lib/site-packages/django/http/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/http/__pycache__/cookie.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/http/__pycache__/multipartparser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/http/__pycache__/request.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/http/__pycache__/response.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/http/cookie.py create mode 100644 venv/Lib/site-packages/django/http/multipartparser.py create mode 100644 venv/Lib/site-packages/django/http/request.py create mode 100644 venv/Lib/site-packages/django/http/response.py create mode 100644 venv/Lib/site-packages/django/middleware/__init__.py create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/clickjacking.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/common.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/csrf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/gzip.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/http.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/locale.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/__pycache__/security.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/middleware/cache.py create mode 100644 venv/Lib/site-packages/django/middleware/clickjacking.py create mode 100644 venv/Lib/site-packages/django/middleware/common.py create mode 100644 venv/Lib/site-packages/django/middleware/csrf.py create mode 100644 venv/Lib/site-packages/django/middleware/gzip.py create mode 100644 venv/Lib/site-packages/django/middleware/http.py create mode 100644 venv/Lib/site-packages/django/middleware/locale.py create mode 100644 venv/Lib/site-packages/django/middleware/security.py create mode 100644 venv/Lib/site-packages/django/shortcuts.py create mode 100644 venv/Lib/site-packages/django/template/__init__.py create mode 100644 venv/Lib/site-packages/django/template/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/autoreload.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/context.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/context_processors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/defaultfilters.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/defaulttags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/engine.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/library.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/loader.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/loader_tags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/response.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/smartif.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/autoreload.py create mode 100644 venv/Lib/site-packages/django/template/backends/__init__.py create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/django.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/dummy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/jinja2.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/backends/base.py create mode 100644 venv/Lib/site-packages/django/template/backends/django.py create mode 100644 venv/Lib/site-packages/django/template/backends/dummy.py create mode 100644 venv/Lib/site-packages/django/template/backends/jinja2.py create mode 100644 venv/Lib/site-packages/django/template/backends/utils.py create mode 100644 venv/Lib/site-packages/django/template/base.py create mode 100644 venv/Lib/site-packages/django/template/context.py create mode 100644 venv/Lib/site-packages/django/template/context_processors.py create mode 100644 venv/Lib/site-packages/django/template/defaultfilters.py create mode 100644 venv/Lib/site-packages/django/template/defaulttags.py create mode 100644 venv/Lib/site-packages/django/template/engine.py create mode 100644 venv/Lib/site-packages/django/template/exceptions.py create mode 100644 venv/Lib/site-packages/django/template/library.py create mode 100644 venv/Lib/site-packages/django/template/loader.py create mode 100644 venv/Lib/site-packages/django/template/loader_tags.py create mode 100644 venv/Lib/site-packages/django/template/loaders/__init__.py create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/app_directories.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/cached.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/filesystem.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/__pycache__/locmem.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/template/loaders/app_directories.py create mode 100644 venv/Lib/site-packages/django/template/loaders/base.py create mode 100644 venv/Lib/site-packages/django/template/loaders/cached.py create mode 100644 venv/Lib/site-packages/django/template/loaders/filesystem.py create mode 100644 venv/Lib/site-packages/django/template/loaders/locmem.py create mode 100644 venv/Lib/site-packages/django/template/response.py create mode 100644 venv/Lib/site-packages/django/template/smartif.py create mode 100644 venv/Lib/site-packages/django/template/utils.py create mode 100644 venv/Lib/site-packages/django/templatetags/__init__.py create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/i18n.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/l10n.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/static.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/__pycache__/tz.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/templatetags/cache.py create mode 100644 venv/Lib/site-packages/django/templatetags/i18n.py create mode 100644 venv/Lib/site-packages/django/templatetags/l10n.py create mode 100644 venv/Lib/site-packages/django/templatetags/static.py create mode 100644 venv/Lib/site-packages/django/templatetags/tz.py create mode 100644 venv/Lib/site-packages/django/test/__init__.py create mode 100644 venv/Lib/site-packages/django/test/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/client.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/html.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/runner.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/selenium.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/signals.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/testcases.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/test/client.py create mode 100644 venv/Lib/site-packages/django/test/html.py create mode 100644 venv/Lib/site-packages/django/test/runner.py create mode 100644 venv/Lib/site-packages/django/test/selenium.py create mode 100644 venv/Lib/site-packages/django/test/signals.py create mode 100644 venv/Lib/site-packages/django/test/testcases.py create mode 100644 venv/Lib/site-packages/django/test/utils.py create mode 100644 venv/Lib/site-packages/django/urls/__init__.py create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/conf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/converters.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/resolvers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/urls/base.py create mode 100644 venv/Lib/site-packages/django/urls/conf.py create mode 100644 venv/Lib/site-packages/django/urls/converters.py create mode 100644 venv/Lib/site-packages/django/urls/exceptions.py create mode 100644 venv/Lib/site-packages/django/urls/resolvers.py create mode 100644 venv/Lib/site-packages/django/urls/utils.py create mode 100644 venv/Lib/site-packages/django/utils/__init__.py create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/_os.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/archive.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/asyncio.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/autoreload.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/baseconv.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/connection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/crypto.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/datastructures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/dateformat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/dateparse.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/dates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/datetime_safe.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/deconstruct.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/decorators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/deprecation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/duration.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/encoding.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/feedgenerator.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/formats.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/functional.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/hashable.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/html.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/http.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/inspect.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/ipv6.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/itercompat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/jslex.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/log.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/lorem_ipsum.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/module_loading.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/numberformat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/regex_helper.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/safestring.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/termcolors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/text.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/timesince.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/timezone.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/topological_sort.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/tree.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/__pycache__/xmlutils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/_os.py create mode 100644 venv/Lib/site-packages/django/utils/archive.py create mode 100644 venv/Lib/site-packages/django/utils/asyncio.py create mode 100644 venv/Lib/site-packages/django/utils/autoreload.py create mode 100644 venv/Lib/site-packages/django/utils/baseconv.py create mode 100644 venv/Lib/site-packages/django/utils/cache.py create mode 100644 venv/Lib/site-packages/django/utils/connection.py create mode 100644 venv/Lib/site-packages/django/utils/crypto.py create mode 100644 venv/Lib/site-packages/django/utils/datastructures.py create mode 100644 venv/Lib/site-packages/django/utils/dateformat.py create mode 100644 venv/Lib/site-packages/django/utils/dateparse.py create mode 100644 venv/Lib/site-packages/django/utils/dates.py create mode 100644 venv/Lib/site-packages/django/utils/datetime_safe.py create mode 100644 venv/Lib/site-packages/django/utils/deconstruct.py create mode 100644 venv/Lib/site-packages/django/utils/decorators.py create mode 100644 venv/Lib/site-packages/django/utils/deprecation.py create mode 100644 venv/Lib/site-packages/django/utils/duration.py create mode 100644 venv/Lib/site-packages/django/utils/encoding.py create mode 100644 venv/Lib/site-packages/django/utils/feedgenerator.py create mode 100644 venv/Lib/site-packages/django/utils/formats.py create mode 100644 venv/Lib/site-packages/django/utils/functional.py create mode 100644 venv/Lib/site-packages/django/utils/hashable.py create mode 100644 venv/Lib/site-packages/django/utils/html.py create mode 100644 venv/Lib/site-packages/django/utils/http.py create mode 100644 venv/Lib/site-packages/django/utils/inspect.py create mode 100644 venv/Lib/site-packages/django/utils/ipv6.py create mode 100644 venv/Lib/site-packages/django/utils/itercompat.py create mode 100644 venv/Lib/site-packages/django/utils/jslex.py create mode 100644 venv/Lib/site-packages/django/utils/log.py create mode 100644 venv/Lib/site-packages/django/utils/lorem_ipsum.py create mode 100644 venv/Lib/site-packages/django/utils/module_loading.py create mode 100644 venv/Lib/site-packages/django/utils/numberformat.py create mode 100644 venv/Lib/site-packages/django/utils/regex_helper.py create mode 100644 venv/Lib/site-packages/django/utils/safestring.py create mode 100644 venv/Lib/site-packages/django/utils/termcolors.py create mode 100644 venv/Lib/site-packages/django/utils/text.py create mode 100644 venv/Lib/site-packages/django/utils/timesince.py create mode 100644 venv/Lib/site-packages/django/utils/timezone.py create mode 100644 venv/Lib/site-packages/django/utils/topological_sort.py create mode 100644 venv/Lib/site-packages/django/utils/translation/__init__.py create mode 100644 venv/Lib/site-packages/django/utils/translation/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/translation/__pycache__/reloader.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/translation/__pycache__/template.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/translation/__pycache__/trans_null.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/translation/__pycache__/trans_real.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/utils/translation/reloader.py create mode 100644 venv/Lib/site-packages/django/utils/translation/template.py create mode 100644 venv/Lib/site-packages/django/utils/translation/trans_null.py create mode 100644 venv/Lib/site-packages/django/utils/translation/trans_real.py create mode 100644 venv/Lib/site-packages/django/utils/tree.py create mode 100644 venv/Lib/site-packages/django/utils/version.py create mode 100644 venv/Lib/site-packages/django/utils/xmlutils.py create mode 100644 venv/Lib/site-packages/django/views/__init__.py create mode 100644 venv/Lib/site-packages/django/views/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/__pycache__/csrf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/__pycache__/debug.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/__pycache__/defaults.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/__pycache__/i18n.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/__pycache__/static.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/csrf.py create mode 100644 venv/Lib/site-packages/django/views/debug.py create mode 100644 venv/Lib/site-packages/django/views/decorators/__init__.py create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/clickjacking.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/common.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/csrf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/debug.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/gzip.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/http.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/__pycache__/vary.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/decorators/cache.py create mode 100644 venv/Lib/site-packages/django/views/decorators/clickjacking.py create mode 100644 venv/Lib/site-packages/django/views/decorators/common.py create mode 100644 venv/Lib/site-packages/django/views/decorators/csrf.py create mode 100644 venv/Lib/site-packages/django/views/decorators/debug.py create mode 100644 venv/Lib/site-packages/django/views/decorators/gzip.py create mode 100644 venv/Lib/site-packages/django/views/decorators/http.py create mode 100644 venv/Lib/site-packages/django/views/decorators/vary.py create mode 100644 venv/Lib/site-packages/django/views/defaults.py create mode 100644 venv/Lib/site-packages/django/views/generic/__init__.py create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/dates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/detail.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/edit.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/__pycache__/list.cpython-310.pyc create mode 100644 venv/Lib/site-packages/django/views/generic/base.py create mode 100644 venv/Lib/site-packages/django/views/generic/dates.py create mode 100644 venv/Lib/site-packages/django/views/generic/detail.py create mode 100644 venv/Lib/site-packages/django/views/generic/edit.py create mode 100644 venv/Lib/site-packages/django/views/generic/list.py create mode 100644 venv/Lib/site-packages/django/views/i18n.py create mode 100644 venv/Lib/site-packages/django/views/static.py create mode 100644 venv/Lib/site-packages/django/views/templates/default_urlconf.html create mode 100644 venv/Lib/site-packages/django/views/templates/technical_404.html create mode 100644 venv/Lib/site-packages/django/views/templates/technical_500.html create mode 100644 venv/Lib/site-packages/django/views/templates/technical_500.txt create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/LICENSE.txt create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/METADATA create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/RECORD create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/pip-22.0.4.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/pip/__init__.py create mode 100644 venv/Lib/site-packages/pip/__main__.py create mode 100644 venv/Lib/site-packages/pip/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/main.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/build_env.py create mode 100644 venv/Lib/site-packages/pip/_internal/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/base_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/command_context.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/main_parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/parser.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/req_command.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/spinners.py create mode 100644 venv/Lib/site-packages/pip/_internal/cli/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/commands/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/completion.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/debug.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/hash.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/help.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/install.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/list.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/search.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/show.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/commands/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/configuration.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/installed.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/sdist.py create mode 100644 venv/Lib/site-packages/pip/_internal/distributions/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/index/collector.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/package_finder.py create mode 100644 venv/Lib/site-packages/pip/_internal/index/sources.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_distutils.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 venv/Lib/site-packages/pip/_internal/locations/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/main.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/models/candidate.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/direct_url.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/format_control.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/index.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/link.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/scheme.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/search_scope.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/target_python.py create mode 100644 venv/Lib/site-packages/pip/_internal/models/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/network/auth.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/cache.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/download.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/session.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/utils.py create mode 100644 venv/Lib/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/check.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/freeze.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/legacy.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/operations/prepare.py create mode 100644 venv/Lib/site-packages/pip/_internal/pyproject.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/req/constructors.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_file.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_install.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_set.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_tracker.py create mode 100644 venv/Lib/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 venv/Lib/site-packages/pip/_internal/self_outdated_check.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/utils/_log.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/appdirs.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compat.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/datetime.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/deprecation.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/distutils_args.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/egg_link.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/encoding.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filesystem.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/filetypes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/glibc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/hashes.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/logging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/misc.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/models.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/packaging.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/subprocess.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/unpacking.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/urls.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 venv/Lib/site-packages/pip/_internal/utils/wheel.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/git.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/subversion.py create mode 100644 venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 venv/Lib/site-packages/pip/_internal/wheel_builder.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 venv/Lib/site-packages/pip/_vendor/certifi/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/enums.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 venv/Lib/site-packages/pip/_vendor/chardet/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/win32.py create mode 100644 venv/Lib/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/database.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/index.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/locators.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/resources.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 venv/Lib/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/distro.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/constants.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py create mode 100644 venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/codec.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/intranges.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/package_data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/_version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/dirtools.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/meta.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/build.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/check.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/meta.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__pycache__/colors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/colors.py create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/counter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/progress/spinner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/token.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pygments/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 venv/Lib/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/__version__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/adapters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/api.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/auth.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/certs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/compat.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/cookies.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/help.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/hooks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/models.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/packages.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/sessions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/structures.py create mode 100644 venv/Lib/site-packages/pip/_vendor/requests/utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__main__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_lru_cache.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tabulate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_extension.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_loop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_lru_cache.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_pick.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_stack.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_timer.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_windows.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/abc.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/align.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/ansi.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/box.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/cells.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/columns.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/console.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/constrain.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/containers.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/control.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/emoji.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/errors.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/filesize.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/json.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/layout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/live_render.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/logging.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/markup.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/measure.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/padding.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/palette.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/panel.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/pretty.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/prompt.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/protocol.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/region.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/repr.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/rule.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/scope.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/screen.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/segment.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/spinner.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/status.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/style.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/styled.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/syntax.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/table.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/tabulate.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/text.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/theme.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/themes.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/traceback.py create mode 100644 venv/Lib/site-packages/pip/_vendor/rich/tree.py create mode 100644 venv/Lib/site-packages/pip/_vendor/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/after.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 venv/Lib/site-packages/pip/_vendor/tomli/_re.py create mode 100644 venv/Lib/site-packages/pip/_vendor/typing_extensions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 venv/Lib/site-packages/pip/_vendor/vendor.txt create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 venv/Lib/site-packages/pip/py.typed create mode 100644 venv/Lib/site-packages/pkg_resources/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_typing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv/Lib/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/__pycache__/setup.cpython-310.pyc create mode 100644 venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/METADATA create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/RECORD create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/REQUESTED create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/setuptools-58.1.0.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/setuptools/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/_imp.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/archive_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/build_meta.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/config.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dep_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/depends.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/dist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/errors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/extension.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/glob.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/installer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/launch.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/monkey.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/msvc.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/namespaces.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/package_index.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/py34compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/sandbox.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/unicode_utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/wheel.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/__pycache__/windows_support.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_deprecation_warning.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/_msvccompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/archive_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/bcppcompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/ccompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/cmd.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/config.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/core.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/cygwinccompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/debug.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dep_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dir_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/dist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/errors.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/extension.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/fancy_getopt.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/file_util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/filelist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/log.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvc9compiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/msvccompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/py35compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/py38compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/spawn.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/sysconfig.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/text_file.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/unixccompiler.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/util.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/__pycache__/versionpredicate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/archive_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/cmd.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_msi.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/bdist_wininst.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_clib.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_ext.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_py.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/build_scripts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/check.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/clean.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/config.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_data.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_egg_info.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_headers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_lib.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/install_scripts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/py37compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/register.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/sdist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/__pycache__/upload.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/check.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/clean.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/config.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/register.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/command/upload.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/config.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/core.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/debug.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dep_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dir_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/dist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/errors.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/extension.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/file_util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/filelist.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/log.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/py35compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/py38compat.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/spawn.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/text_file.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/util.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/version.py create mode 100644 venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 venv/Lib/site-packages/setuptools/_imp.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/more.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_typing.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv/Lib/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 venv/Lib/site-packages/setuptools/archive_util.py create mode 100644 venv/Lib/site-packages/setuptools/build_meta.py create mode 100644 venv/Lib/site-packages/setuptools/cli-32.exe create mode 100644 venv/Lib/site-packages/setuptools/cli-64.exe create mode 100644 venv/Lib/site-packages/setuptools/cli.exe create mode 100644 venv/Lib/site-packages/setuptools/command/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/alias.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_clib.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_ext.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/build_py.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/develop.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/dist_info.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/easy_install.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/egg_info.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_lib.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/install_scripts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/py36compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/register.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/rotate.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/saveopts.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/sdist.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/setopt.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/test.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/__pycache__/upload_docs.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/command/alias.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv/Lib/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_clib.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_ext.py create mode 100644 venv/Lib/site-packages/setuptools/command/build_py.py create mode 100644 venv/Lib/site-packages/setuptools/command/develop.py create mode 100644 venv/Lib/site-packages/setuptools/command/dist_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/easy_install.py create mode 100644 venv/Lib/site-packages/setuptools/command/egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_lib.py create mode 100644 venv/Lib/site-packages/setuptools/command/install_scripts.py create mode 100644 venv/Lib/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv/Lib/site-packages/setuptools/command/py36compat.py create mode 100644 venv/Lib/site-packages/setuptools/command/register.py create mode 100644 venv/Lib/site-packages/setuptools/command/rotate.py create mode 100644 venv/Lib/site-packages/setuptools/command/saveopts.py create mode 100644 venv/Lib/site-packages/setuptools/command/sdist.py create mode 100644 venv/Lib/site-packages/setuptools/command/setopt.py create mode 100644 venv/Lib/site-packages/setuptools/command/test.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload.py create mode 100644 venv/Lib/site-packages/setuptools/command/upload_docs.py create mode 100644 venv/Lib/site-packages/setuptools/config.py create mode 100644 venv/Lib/site-packages/setuptools/dep_util.py create mode 100644 venv/Lib/site-packages/setuptools/depends.py create mode 100644 venv/Lib/site-packages/setuptools/dist.py create mode 100644 venv/Lib/site-packages/setuptools/errors.py create mode 100644 venv/Lib/site-packages/setuptools/extension.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__init__.py create mode 100644 venv/Lib/site-packages/setuptools/extern/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/setuptools/glob.py create mode 100644 venv/Lib/site-packages/setuptools/gui-32.exe create mode 100644 venv/Lib/site-packages/setuptools/gui-64.exe create mode 100644 venv/Lib/site-packages/setuptools/gui.exe create mode 100644 venv/Lib/site-packages/setuptools/installer.py create mode 100644 venv/Lib/site-packages/setuptools/launch.py create mode 100644 venv/Lib/site-packages/setuptools/monkey.py create mode 100644 venv/Lib/site-packages/setuptools/msvc.py create mode 100644 venv/Lib/site-packages/setuptools/namespaces.py create mode 100644 venv/Lib/site-packages/setuptools/package_index.py create mode 100644 venv/Lib/site-packages/setuptools/py34compat.py create mode 100644 venv/Lib/site-packages/setuptools/sandbox.py create mode 100644 venv/Lib/site-packages/setuptools/script (dev).tmpl create mode 100644 venv/Lib/site-packages/setuptools/script.tmpl create mode 100644 venv/Lib/site-packages/setuptools/unicode_utils.py create mode 100644 venv/Lib/site-packages/setuptools/version.py create mode 100644 venv/Lib/site-packages/setuptools/wheel.py create mode 100644 venv/Lib/site-packages/setuptools/windows_support.py create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/AUTHORS create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/METADATA create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/RECORD create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/entry_points.txt create mode 100644 venv/Lib/site-packages/sqlparse-0.4.2.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/sqlparse/__init__.py create mode 100644 venv/Lib/site-packages/sqlparse/__main__.py create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/__main__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/cli.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/compat.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/exceptions.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/formatter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/keywords.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/lexer.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/sql.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/tokens.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/__pycache__/utils.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/cli.py create mode 100644 venv/Lib/site-packages/sqlparse/compat.py create mode 100644 venv/Lib/site-packages/sqlparse/engine/__init__.py create mode 100644 venv/Lib/site-packages/sqlparse/engine/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/engine/__pycache__/filter_stack.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/engine/__pycache__/grouping.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/engine/__pycache__/statement_splitter.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/engine/filter_stack.py create mode 100644 venv/Lib/site-packages/sqlparse/engine/grouping.py create mode 100644 venv/Lib/site-packages/sqlparse/engine/statement_splitter.py create mode 100644 venv/Lib/site-packages/sqlparse/exceptions.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/__init__.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/aligned_indent.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/others.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/output.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/reindent.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/right_margin.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/__pycache__/tokens.cpython-310.pyc create mode 100644 venv/Lib/site-packages/sqlparse/filters/aligned_indent.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/others.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/output.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/reindent.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/right_margin.py create mode 100644 venv/Lib/site-packages/sqlparse/filters/tokens.py create mode 100644 venv/Lib/site-packages/sqlparse/formatter.py create mode 100644 venv/Lib/site-packages/sqlparse/keywords.py create mode 100644 venv/Lib/site-packages/sqlparse/lexer.py create mode 100644 venv/Lib/site-packages/sqlparse/sql.py create mode 100644 venv/Lib/site-packages/sqlparse/tokens.py create mode 100644 venv/Lib/site-packages/sqlparse/utils.py create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/INSTALLER create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/LICENSE create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/LICENSE_APACHE create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/METADATA create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/RECORD create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/WHEEL create mode 100644 venv/Lib/site-packages/tzdata-2022.1.dist-info/top_level.txt create mode 100644 venv/Lib/site-packages/tzdata/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Abidjan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Accra create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Addis_Ababa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Algiers create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Asmara create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Asmera create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Bamako create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Bangui create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Banjul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Bissau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Blantyre create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Brazzaville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Bujumbura create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Cairo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Casablanca create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Ceuta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Conakry create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Dakar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Dar_es_Salaam create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Djibouti create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Douala create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/El_Aaiun create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Freetown create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Gaborone create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Harare create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Johannesburg create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Juba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Kampala create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Khartoum create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Kigali create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Kinshasa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Lagos create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Libreville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Lome create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Luanda create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Lubumbashi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Lusaka create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Malabo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Maputo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Maseru create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Mbabane create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Mogadishu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Monrovia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Nairobi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Ndjamena create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Niamey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Nouakchott create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Ouagadougou create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Porto-Novo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Sao_Tome create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Timbuktu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Tripoli create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Tunis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/Windhoek create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Africa/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Adak create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Anchorage create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Anguilla create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Antigua create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Araguaina create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Buenos_Aires create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Catamarca create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/ComodRivadavia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Cordoba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Jujuy create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/La_Rioja create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Mendoza create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Rio_Gallegos create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Salta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/San_Juan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/San_Luis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Tucuman create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/Ushuaia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Argentina/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Aruba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Asuncion create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Atikokan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Atka create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Bahia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Bahia_Banderas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Barbados create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Belem create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Belize create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Blanc-Sablon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Boa_Vista create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Bogota create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Boise create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Buenos_Aires create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cambridge_Bay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Campo_Grande create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cancun create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Caracas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Catamarca create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cayenne create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cayman create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Chicago create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Chihuahua create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Coral_Harbour create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cordoba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Costa_Rica create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Creston create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Cuiaba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Curacao create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Danmarkshavn create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Dawson create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Dawson_Creek create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Denver create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Detroit create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Dominica create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Edmonton create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Eirunepe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/El_Salvador create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Ensenada create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Fort_Nelson create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Fort_Wayne create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Fortaleza create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Glace_Bay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Godthab create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Goose_Bay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Grand_Turk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Grenada create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Guadeloupe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Guatemala create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Guayaquil create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Guyana create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Halifax create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Havana create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Hermosillo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Indianapolis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Knox create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Marengo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Petersburg create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Tell_City create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Vevay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Vincennes create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/Winamac create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indiana/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Indianapolis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Inuvik create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Iqaluit create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Jamaica create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Jujuy create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Juneau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Kentucky/Louisville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Kentucky/Monticello create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Kentucky/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Kentucky/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Knox_IN create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Kralendijk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/La_Paz create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Lima create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Los_Angeles create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Louisville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Lower_Princes create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Maceio create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Managua create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Manaus create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Marigot create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Martinique create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Matamoros create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Mazatlan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Mendoza create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Menominee create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Merida create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Metlakatla create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Mexico_City create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Miquelon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Moncton create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Monterrey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Montevideo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Montreal create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Montserrat create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Nassau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/New_York create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Nipigon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Nome create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Noronha create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/North_Dakota/Beulah create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/North_Dakota/Center create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/North_Dakota/New_Salem create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/North_Dakota/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/North_Dakota/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Nuuk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Ojinaga create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Panama create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Pangnirtung create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Paramaribo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Phoenix create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Port-au-Prince create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Port_of_Spain create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Porto_Acre create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Porto_Velho create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Puerto_Rico create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Punta_Arenas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Rainy_River create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Rankin_Inlet create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Recife create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Regina create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Resolute create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Rio_Branco create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Rosario create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Santa_Isabel create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Santarem create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Santiago create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Santo_Domingo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Sao_Paulo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Scoresbysund create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Shiprock create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Sitka create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Barthelemy create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Johns create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Kitts create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Lucia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Thomas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/St_Vincent create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Swift_Current create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Tegucigalpa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Thule create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Thunder_Bay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Tijuana create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Toronto create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Tortola create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Vancouver create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Virgin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Whitehorse create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Winnipeg create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Yakutat create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/Yellowknife create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/America/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Casey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Davis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/DumontDUrville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Macquarie create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Mawson create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/McMurdo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Palmer create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Rothera create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/South_Pole create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Syowa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Troll create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/Vostok create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Antarctica/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Arctic/Longyearbyen create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Arctic/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Arctic/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Aden create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Almaty create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Amman create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Anadyr create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Aqtau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Aqtobe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ashgabat create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ashkhabad create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Atyrau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Baghdad create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Bahrain create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Baku create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Bangkok create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Barnaul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Beirut create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Bishkek create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Brunei create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Calcutta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Chita create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Choibalsan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Chongqing create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Chungking create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Colombo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Dacca create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Damascus create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Dhaka create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Dili create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Dubai create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Dushanbe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Famagusta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Gaza create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Harbin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Hebron create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ho_Chi_Minh create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Hong_Kong create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Hovd create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Irkutsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Istanbul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Jakarta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Jayapura create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Jerusalem create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kabul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kamchatka create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Karachi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kashgar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kathmandu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Katmandu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Khandyga create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kolkata create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Krasnoyarsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kuala_Lumpur create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kuching create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Kuwait create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Macao create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Macau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Magadan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Makassar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Manila create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Muscat create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Nicosia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Novokuznetsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Novosibirsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Omsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Oral create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Phnom_Penh create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Pontianak create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Pyongyang create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Qatar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Qostanay create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Qyzylorda create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Rangoon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Riyadh create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Saigon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Sakhalin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Samarkand create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Seoul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Shanghai create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Singapore create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Srednekolymsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Taipei create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tashkent create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tbilisi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tehran create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tel_Aviv create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Thimbu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Thimphu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tokyo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Tomsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ujung_Pandang create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ulaanbaatar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ulan_Bator create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Urumqi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Ust-Nera create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Vientiane create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Vladivostok create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Yakutsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Yangon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Yekaterinburg create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/Yerevan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Asia/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Azores create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Bermuda create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Canary create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Cape_Verde create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Faeroe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Faroe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Jan_Mayen create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Madeira create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Reykjavik create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/South_Georgia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/St_Helena create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/Stanley create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Atlantic/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/ACT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Adelaide create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Brisbane create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Broken_Hill create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Canberra create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Currie create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Darwin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Eucla create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Hobart create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/LHI create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Lindeman create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Lord_Howe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Melbourne create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/NSW create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/North create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Perth create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Queensland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/South create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Sydney create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Tasmania create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Victoria create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/West create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/Yancowinna create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Australia/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/Acre create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/DeNoronha create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/East create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/West create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Brazil/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/CET create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/CST6CDT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Atlantic create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Central create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Eastern create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Mountain create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Newfoundland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Pacific create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Saskatchewan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/Yukon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Canada/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Chile/Continental create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Chile/EasterIsland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Chile/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Chile/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Cuba create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/EET create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/EST create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/EST5EDT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Egypt create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Eire create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+1 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+10 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+11 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+12 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+2 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+3 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+4 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+5 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+6 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+7 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+8 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT+9 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-1 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-10 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-11 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-12 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-13 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-14 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-2 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-3 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-4 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-5 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-6 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-7 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-8 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT-9 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/GMT0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/Greenwich create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/UCT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/UTC create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/Universal create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/Zulu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Etc/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Amsterdam create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Andorra create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Astrakhan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Athens create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Belfast create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Belgrade create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Berlin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Bratislava create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Brussels create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Bucharest create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Budapest create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Busingen create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Chisinau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Copenhagen create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Dublin create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Gibraltar create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Guernsey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Helsinki create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Isle_of_Man create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Istanbul create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Jersey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Kaliningrad create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Kiev create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Kirov create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Lisbon create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Ljubljana create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/London create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Luxembourg create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Madrid create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Malta create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Mariehamn create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Minsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Monaco create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Moscow create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Nicosia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Oslo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Paris create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Podgorica create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Prague create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Riga create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Rome create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Samara create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/San_Marino create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Sarajevo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Saratov create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Simferopol create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Skopje create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Sofia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Stockholm create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Tallinn create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Tirane create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Tiraspol create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Ulyanovsk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Uzhgorod create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Vaduz create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Vatican create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Vienna create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Vilnius create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Volgograd create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Warsaw create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Zagreb create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Zaporozhye create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/Zurich create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Europe/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Factory create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GB create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GB-Eire create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GMT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GMT+0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GMT-0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/GMT0 create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Greenwich create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/HST create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Hongkong create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Iceland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Antananarivo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Chagos create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Christmas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Cocos create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Comoro create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Kerguelen create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Mahe create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Maldives create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Mauritius create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Mayotte create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/Reunion create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Indian/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Iran create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Israel create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Jamaica create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Japan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Kwajalein create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Libya create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/MET create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/MST create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/MST7MDT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Mexico/BajaNorte create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Mexico/BajaSur create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Mexico/General create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Mexico/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Mexico/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/NZ create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/NZ-CHAT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Navajo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/PRC create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/PST8PDT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Apia create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Auckland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Bougainville create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Chatham create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Chuuk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Easter create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Efate create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Enderbury create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Fakaofo create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Fiji create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Funafuti create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Galapagos create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Gambier create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Guadalcanal create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Guam create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Honolulu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Johnston create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Kanton create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Kiritimati create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Kosrae create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Kwajalein create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Majuro create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Marquesas create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Midway create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Nauru create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Niue create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Norfolk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Noumea create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Pago_Pago create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Palau create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Pitcairn create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Pohnpei create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Ponape create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Port_Moresby create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Rarotonga create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Saipan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Samoa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Tahiti create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Tarawa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Tongatapu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Truk create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Wake create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Wallis create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/Yap create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Pacific/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Poland create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Portugal create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/ROC create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/ROK create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Singapore create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Turkey create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/UCT create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Alaska create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Aleutian create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Arizona create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Central create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/East-Indiana create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Eastern create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Hawaii create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Indiana-Starke create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Michigan create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Mountain create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Pacific create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/Samoa create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/US/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/UTC create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Universal create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/W-SU create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/WET create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/Zulu create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/__init__.py create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/__pycache__/__init__.cpython-310.pyc create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/iso3166.tab create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/leapseconds create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/tzdata.zi create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/zone.tab create mode 100644 venv/Lib/site-packages/tzdata/zoneinfo/zone1970.tab create mode 100644 venv/Lib/site-packages/tzdata/zones create mode 100644 venv/Scripts/Activate.ps1 create mode 100644 venv/Scripts/activate create mode 100644 venv/Scripts/activate.bat create mode 100644 venv/Scripts/deactivate.bat create mode 100644 venv/Scripts/django-admin.exe create mode 100644 venv/Scripts/pip.exe create mode 100644 venv/Scripts/pip3.10.exe create mode 100644 venv/Scripts/pip3.exe create mode 100644 venv/Scripts/python.exe create mode 100644 venv/Scripts/pythonw.exe create mode 100644 venv/Scripts/sqlformat.exe create mode 100644 venv/pyvenv.cfg diff --git a/my_first_project/my_first_project/db.sqlite3 b/my_first_project/my_first_project/db.sqlite3 new file mode 100644 index 000000000..e69de29bb diff --git a/my_first_project/my_first_project/manage.py b/my_first_project/my_first_project/manage.py new file mode 100644 index 000000000..1708baf2c --- /dev/null +++ b/my_first_project/my_first_project/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_first_project.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/my_first_project/my_first_project/my_first_app/__init__.py b/my_first_project/my_first_project/my_first_app/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_first_project/my_first_project/my_first_app/__pycache__/__init__.cpython-310.pyc b/my_first_project/my_first_project/my_first_app/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd58c657b775a2b025df38853bc59d409d37ba61 GIT binary patch literal 197 zcmd1j<>g`kg8hkilR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_UvsFxJacWU< zOi*cYabk>1esXDUYFTj~zJQ=WVnIPn he0*kJW=VX!UP0w84x8Nkl+v73JCF;CnScZf0|3{`H!%PJ literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_app/__pycache__/admin.cpython-310.pyc b/my_first_project/my_first_project/my_first_app/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c7dccf1730fcdd4dadcab419d839b934c6d24ad GIT binary patch literal 238 zcmd1j<>g`kg8hkilbnF`V-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+0!0}# z8E>&BrsQVk`Drpm@ug%X=B4NBCFkdr6lEqAfecv5P{a(Rz{IaqXRDad;?$zzn4r?) z;=~x2{N&Qy)Vz}7828K)kJ6+Vx6GpA65W8J{H)aEl9=4e_%x6}d;vj$#Dantusie$ YDsOSvV{ zOia826X&!l-8kvazMt>&=hMAjo1lHj&)FNEUoP1GNJ#DBuqZ}4UnI-9tLz)aWPon^7!-*q5Jc0MffxJ0kj1x0x9f3I znrg@Ld;%+(FLea7DAS-)6I~_CVO{BQqEfKkY%LZJA!JcZ!Iu>9%tWY9Z?sG01~(N94QSJ1N~(n(zaobN*;lY509@jO5pPUS}$=44)*`O+Dj{ z(zCl#uhhKaJ0Zot1(eFsO;oH)hVQvun*$61@o7Mt+B9Ugv;Di9Ej=g9P5(*U+&WmZ R!NumUmu}0(5q3$R{Q`T$f-wL9 literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_app/__pycache__/models.cpython-310.pyc b/my_first_project/my_first_project/my_first_app/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96625d5087c94ec782e4ad86ffc3dd7bb063f6ec GIT binary patch literal 235 zcmd1j<>g`kg8hkilWc(WV-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+0!0}# z8E>)W=BK3Q6#Hp1-QrBiO3X{o*Gow%0%=~!P{abHz{IaKXRDad;?$zzn4r?);=~x2 z{N&Qy)Vz}7828K)kJ6+Vx6GpA65W8J{H)aEl9=4e_%x6}d;vj$#Danth#T|@DsOSv T0NJHEsdkJ&tBXO-5MTfRSe8M~ literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_app/__pycache__/views.cpython-310.pyc b/my_first_project/my_first_project/my_first_app/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9618c4d8f80a7e243cdb34efcf566a80ee24004b GIT binary patch literal 473 zcmah_%}T>S5Z+DFwAvK<2+@-P?E{F2P=9izjqC~bCaQnJ~&v$0h4q%Y$m_$mSM z;K^6;@de;Kka7Lp@W*g;@~(VPexQEF@}w}c(p z!igN@HgjG{)L@M(61d-(O#)iGiWiKlz^dD!*5#1jR~&Th{Shc-0X(55c_pTw(LO48 z2#h{cO`hlr#dod2<95jNT>7_C9gD^2&NxQpzm9QP z#t#{vL$6%aPAUa&m{H7!9NMC41C2r8MqM@=7gO1TR4ScR8k8BkZm--aZcEwdS&p)- bTK;?uS|-1BASA1DerT2mE`mq8)U$s9g&KJN literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_app/admin.py b/my_first_project/my_first_project/my_first_app/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/my_first_project/my_first_project/my_first_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/my_first_project/my_first_project/my_first_app/apps.py b/my_first_project/my_first_project/my_first_app/apps.py new file mode 100644 index 000000000..6902db626 --- /dev/null +++ b/my_first_project/my_first_project/my_first_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MyFirstAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'my_first_app' diff --git a/my_first_project/my_first_project/my_first_app/migrations/__init__.py b/my_first_project/my_first_project/my_first_app/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_first_project/my_first_project/my_first_app/migrations/__pycache__/__init__.cpython-310.pyc b/my_first_project/my_first_project/my_first_app/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6583b4b74e7ef32270dcb94a03f074b91f937789 GIT binary patch literal 208 zcmd1j<>g`kg8hkilR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_1esXDUYFTj~zJQ=WVnIPn sZf1H>Vo7FxUU5u(d}dx|NqoFsLFFwDo80`A(wtN~kYkFOfCLKz0F1yp)c^nh literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_app/models.py b/my_first_project/my_first_project/my_first_app/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/my_first_project/my_first_project/my_first_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/my_first_project/my_first_project/my_first_app/tests.py b/my_first_project/my_first_project/my_first_app/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/my_first_project/my_first_project/my_first_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/my_first_project/my_first_project/my_first_app/views.py b/my_first_project/my_first_project/my_first_app/views.py new file mode 100644 index 000000000..56b993673 --- /dev/null +++ b/my_first_project/my_first_project/my_first_app/views.py @@ -0,0 +1,7 @@ +from django.shortcuts import render +from django.http import HttpRequest, HttpResponse + +# Create your views here. +def home(request): + message = "Hello World, This is my new HOME !" + return HttpResponse(message) diff --git a/my_first_project/my_first_project/my_first_project/__init__.py b/my_first_project/my_first_project/my_first_project/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_first_project/my_first_project/my_first_project/__pycache__/__init__.cpython-310.pyc b/my_first_project/my_first_project/my_first_project/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d3db2b61adaee67ca02defb1b704325cc0722d5 GIT binary patch literal 201 zcmd1j<>g`kf@AS_lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_cvsFxJacWU< zOi*cYabk>1esXDUYFTj~zJO?f`1s7c d%#!$cy@JYH95%W6DWy57b|6<2GXV(}1_0A%IPd@f literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_project/__pycache__/settings.cpython-310.pyc b/my_first_project/my_first_project/my_first_project/__pycache__/settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5b33836129b2b0829b21eb8562c41c99f36a9da GIT binary patch literal 2368 zcmb7GNpIUm6eekEiDD&=ovjI4Foz^nTT=WU6P(84`p)XO)81aTw z8u)?aPRs!bC^N@_e}HW!&1Sh!s9_HW7Q;yDPo&!@Ro=9aOFW4(D_}Fp+fqmYPMV?L zm+#0AL3<|w_X8{u5A3)WBfclWkBtaeCJz1z9KnSVV`KWHTt>c4<*ALi2e$8)u~!Db zGV{m8rscWkuzF|HoE<2MdP&fGl$*J{CI` z8%5i*C=icgI}GsVx5LX;0p6TKyXjXz1RtUzTp-yDuM)wmf@$%i4-i z;CjL6@s?i7MHiUA-;*op^dF)$7|0bEUJ!h^Ao^&@7YjnU=!XLD5Jh6AWx1fZyoq_>7L}XR zU@mAq{KzI8V!t}D>{rkl@^?Fd<>K}@=>fW+cj+kN^O_F>heqWY9K-I|fd-WOfP+0W zZxFef_M$#xQ)4}?innPK+u)ra(2^K^z6^6xN=CRJ4x=wlAsOJ;&`2!$awdCJyGdw2 zf}Dgry0;{J6wZ$*%y}g-&TT7|=W45Jh}C*mi}OmSW2UQIyQA0JEiJlnB65dxNMtBn zhMczN5)hzHw7Af$SE~(mPwA@hYPa3i&0e=r zX}5ObGrHRBG!$Lc;2D(hcxj2jog(JzlS>J4&yin}FOl zcj{`R`U@9)22n_dznsdG{iJ~Cem8`ZdcW%1kOPm={TgArVSj%oxuZ8b(>r>9x%f{( zm|vapcoOHohD3!9ehPmIIQlINBDcD_wj$=l6;a4%@&&OVhypM0c|rIf{w;nG*MywF YXL<1-SQmjNEHq)$ literal 0 HcmV?d00001 diff --git a/my_first_project/my_first_project/my_first_project/__pycache__/urls.cpython-310.pyc b/my_first_project/my_first_project/my_first_project/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1e42c6b6e4e2006405f6e046d517bd118b5bca5 GIT binary patch literal 1065 zcma)5QES^U5SAS$?cB73{Q|wEhSc81p29jd+I20AG1~RT1YE~b5(P^#lDw^b?XTHi zGVEzjd)W`z!`Ml2f*A}d@NqiMci;EjN$&552+ptK`|PTR&<}g*o&YYd;nSyJ2ucz0 zh+lf#Pkqn&y|TxHG;n@U_R|3kNT2$voz?EW5B`7-R*zQUy}$6&JrZ1@XeYn*5#qPm zoGERxO34*148Fd6k58nSvqi0P!=wnqPfLn#YE@RbF;oeCgG;6jRyM)Fq|CKGngKD=sro+@(k!X6Kw>A<2F^Lu za_Aq3#^%Sl&TNsx=pRHEq9|*^!~#Tc{VcTthPlz_!U=-`3XI3*(!&VPTPY`Nxz^)| zt>7DwZSL5K@?f;HQZ5n@aMNjI1Fr5Uio&0;$0+ieeoiZiwp=E#bye&7d3kwxC$N)N}p_3dMkD_?8cfvGeeueGHm*88ckrkHG7>E z_=eOF$~p6Uc`}(^YpV40ver7Ep30);R2V&d$IN*>o1WP>bo6okhNjzY?NUD=V8O)I dZL|B5OH!Bgl?ToB0hj;{9}m45bfz?H|yw%2NAsWHQ>(d!P6q5nB5rBte9PdFwp5t*GxL}bPrQKS+iGv zM34I;e#C$vc=8uK*^?-QJz3CIR25b4RaM)=!;pCS#=p;R0z!Va&aQO5^TIzo_DYf| zk%6Q-miN^KE? ziJwNt@xop?8%rp)T^C?ne1*A+!(VPfjl`M&sdx zzdIjXzCFEue0vQMf^*8`*zYwx&OH~-8)~t6uw@jbevqi`Ur~?P^uVlCWla + Aaron Swartz + Aaron T. Myers + Abeer Upadhyay + Abhijeet Viswa + Abhinav Patil + Abhishek Gautam + Abhyudai + Adam Allred + Adam Bogdał + Adam Donaghy + Adam Johnson + Adam Malinowski + Adam Vandenberg + Adiyat Mubarak + Adnan Umer + Adrian Holovaty + Adrien Lemaire + Afonso Fernández Nogueira + AgarFu + Ahmad Alhashemi + Ahmad Al-Ibrahim + Ahmed Eltawela + ajs + Akash Agrawal + Akis Kesoglou + Aksel Ethem + Akshesh Doshi + alang@bright-green.com + Alasdair Nicol + Albert Wang + Alcides Fonseca + Aldian Fazrihady + Aleksandra Sendecka + Aleksi Häkli + Alex Dutton + Alexander Myodov + Alexandr Tatarinov + Alex Aktsipetrov + Alex Becker + Alex Couper + Alex Dedul + Alex Gaynor + Alex Hill + Alex Ogier + Alex Robbins + Alexey Boriskin + Alexey Tsivunin + Ali Vakilzade + Aljaž Košir + Aljosa Mohorovic + Amit Chakradeo + Amit Ramon + Amit Upadhyay + A. Murat Eren + Ana Belen Sarabia + Ana Krivokapic + Andi Albrecht + André Ericson + Andrei Kulakov + Andreas + Andreas Mock + Andreas Pelme + Andrés Torres Marroquín + Andrew Brehaut + Andrew Clark + Andrew Durdin + Andrew Godwin + Andrew Pinkham + Andrews Medina + Andrew Northall + Andriy Sokolovskiy + Andy Chosak + Andy Dustman + Andy Gayton + andy@jadedplanet.net + Anssi Kääriäinen + ant9000@netwise.it + Anthony Briggs + Anthony Wright + Anton Samarchyan + Antoni Aloy + Antonio Cavedoni + Antonis Christofides + Antti Haapala + Antti Kaihola + Anubhav Joshi + Aram Dulyan + arien + Armin Ronacher + Aron Podrigal + Artem Gnilov + Arthur + Arthur Jovart + Arthur Koziel + Arthur Rio + Arvis Bickovskis + Arya Khaligh + Aryeh Leib Taurog + A S Alam + Asif Saif Uddin + atlithorn + Audrey Roy + av0000@mail.ru + Axel Haustant + Aymeric Augustin + Bahadır Kandemir + Baishampayan Ghose + Baptiste Mispelon + Barry Pederson + Bartolome Sanchez Salado + Barton Ip + Bartosz Grabski + Bashar Al-Abdulhadi + Bastian Kleineidam + Batiste Bieler + Batman + Batuhan Taskaya + Baurzhan Ismagulov + Ben Dean Kawamura + Ben Firshman + Ben Godfrey + Benjamin Wohlwend + Ben Khoo + Ben Slavin + Ben Sturmfels + Berker Peksag + Bernd Schlapsi + Bernhard Essl + berto + Bill Fenner + Bjørn Stabell + Bo Marchman + Bogdan Mateescu + Bojan Mihelac + Bouke Haarsma + Božidar Benko + Brad Melin + Brandon Chinn + Brant Harris + Brendan Hayward + Brendan Quinn + Brenton Simpson + Brett Cannon + Brett Hoerner + Brian Beck + Brian Fabian Crain + Brian Harring + Brian Helba + Brian Ray + Brian Rosner + Bruce Kroeze + Bruno Alla + Bruno Renié + brut.alll@gmail.com + Bryan Chow + Bryan Veloso + bthomas + btoll@bestweb.net + C8E + Caio Ariede + Calvin Spealman + Cameron Curry + Cameron Knight (ckknight) + Can Burak Çilingir + Can Sarıgöl + Carl Meyer + Carles Pina i Estany + Carlos Eduardo de Paula + Carlos Matías de la Torre + Carlton Gibson + cedric@terramater.net + Chad Whitman + ChaosKCW + Charlie Leifer + charly.wilhelm@gmail.com + Chason Chaffin + Cheng Zhang + Chris Adams + Chris Beaven + Chris Bennett + Chris Cahoon + Chris Chamberlin + Chris Jerdonek + Chris Jones + Chris Lamb + Chris Streeter + Christian Barcenas + Christian Metts + Christian Oudard + Christian Tanzer + Christoffer Sjöbergsson + Christophe Pettus + Christopher Adams + Christopher Babiak + Christopher Lenz + Christoph Mędrela + Chris Wagner + Chris Wesseling + Chris Wilson + Claude Paroz + Clint Ecker + colin@owlfish.com + Colin Wood + Collin Anderson + Collin Grady + Colton Hicks + Craig Blaszczyk + crankycoder@gmail.com + Curtis Maloney (FunkyBob) + dackze+django@gmail.com + Dagur Páll Ammendrup + Dane Springmeyer + Dan Fairs + Daniel Alves Barbosa de Oliveira Vaz + Daniel Duan + Daniele Procida + Daniel Greenfeld + dAniel hAhler + Daniel Jilg + Daniel Lindsley + Daniel Poelzleithner + Daniel Pyrathon + Daniel Roseman + Daniel Tao + Daniel Wiesmann + Danilo Bargen + Dan Johnson + Dan Palmer + Dan Poirier + Dan Stephenson + Dan Watson + dave@thebarproject.com + David Ascher + David Avsajanishvili + David Blewett + David Brenneman + David Cramer + David Danier + David Eklund + David Foster + David Gouldin + david@kazserve.org + David Krauth + David Larlet + David Reynolds + David Sanders + David Schein + David Tulig + David Winterbottom + David Wobrock + Davide Ceretti + Deep L. Sukhwani + Deepak Thukral + Denis Kuzmichyov + Dennis Schwertel + Derek Willis + Deric Crago + deric@monowerks.com + Deryck Hodge + Dimitris Glezos + Dirk Datzert + Dirk Eschler + Dmitri Fedortchenko + Dmitry Jemerov + dne@mayonnaise.net + Dolan Antenucci + Donald Harvey + Donald Stufft + Don Spaulding + Doug Beck + Doug Napoleone + dready + dusk@woofle.net + Dustyn Gibson + Ed Morley + Egidijus Macijauskas + eibaan@gmail.com + elky + Emmanuelle Delescolle + Emil Stenström + enlight + Enrico + Eric Boersma + Eric Brandwein + Eric Floehr + Eric Florenzano + Eric Holscher + Eric Moritz + Eric Palakovich Carr + Erik Karulf + Erik Romijn + eriks@win.tue.nl + Erwin Junge + Esdras Beleza + Espen Grindhaug + Étienne Beaulé + Eugene Lazutkin + Evan Grim + Fabian Büchler + Fabrice Aneche + Farhaan Bukhsh + favo@exoweb.net + fdr + Federico Capoano + Felipe Lee + Filip Noetzel + Filip Wasilewski + Finn Gruwier Larsen + Flávio Juvenal da Silva Junior + flavio.curella@gmail.com + Florian Apolloner + Florian Demmer + Florian Moussous + Fran Hrženjak + Francisco Albarran Cristobal + Francisco Couzo + François Freitag + Frank Tegtmeyer + Frank Wierzbicki + Frank Wiles + František Malina + Fraser Nevett + Gabriel Grant + Gabriel Hurley + gandalf@owca.info + Garry Lawrence + Garry Polley + Garth Kidd + Gary Wilson + Gasper Koren + Gasper Zejn + Gavin Wahl + Ge Hanbin + geber@datacollect.com + Geert Vanderkelen + George Karpenkov + George Song + George Vilches + Georg "Hugo" Bauer + Georgi Stanojevski + Gerardo Orozco + Gil Gonçalves + Girish Kumar + Girish Sontakke + Gisle Aas + Glenn Maynard + glin@seznam.cz + GomoX + Gonzalo Saavedra + Gopal Narayanan + Graham Carlyle + Grant Jenks + Greg Chapple + Greg Twohig + Gregor Allensworth + Gregor Müllegger + Grigory Fateyev + Grzegorz Ślusarek + Guilherme Mesquita Gondim + Guillaume Pannatier + Gustavo Picon + hambaloney + Hang Park + Hannes Ljungberg + Hannes Struß + Harm Geerts + Hasan Ramezani + Hawkeye + Helen Sherwood-Taylor + Henrique Romano + Henry Dang + Hidde Bultsma + Himanshu Chauhan + hipertracker@gmail.com + Hiroki Kiyohara + Honza Král + Horst Gutmann + Hugo Osvaldo Barrera + HyukJin Jang + Hyun Mi Ae + Iacopo Spalletti + Ian A Wilson + Ian Clelland + Ian G. Kelly + Ian Holsman + Ian Lee + Ibon + Idan Gazit + Idan Melamed + Ifedapo Olarewaju + Igor Kolar + Illia Volochii + Ilya Semenov + Ingo Klöcker + I.S. van Oostveen + Iuri de Silvio + ivan.chelubeev@gmail.com + Ivan Sagalaev (Maniac) + Jaap Roes + Jack Moffitt + Jacob Burch + Jacob Green + Jacob Kaplan-Moss + Jacob Walls + Jakub Paczkowski + Jakub Wilk + Jakub Wiśniowski + james_027@yahoo.com + James Aylett + James Bennett + James Murty + James Tauber + James Timmins + James Turk + James Wheare + Jannis Leidel + Janos Guljas + Jan Pazdziora + Jan Rademaker + Jarek Głowacki + Jarek Zgoda + Jarosław Wygoda + Jason Davies (Esaj) + Jason Huggins + Jason McBrayer + jason.sidabras@gmail.com + Jason Yan + Javier Mansilla + Jay Parlar + Jay Welborn + Jay Wineinger + J. Clifford Dyer + jcrasta@gmail.com + jdetaeye + Jeff Anderson + Jeff Balogh + Jeff Hui + Jeffrey Gelens + Jeff Triplett + Jeffrey Yancey + Jens Diemer + Jens Page + Jensen Cochran + Jeong-Min Lee + Jérémie Blaser + Jeremy Bowman + Jeremy Carbaugh + Jeremy Dunck + Jeremy Lainé + Jerin Peter George + Jesse Young + Jezeniel Zapanta + jhenry + Jim Dalton + Jimmy Song + Jiri Barton + Joachim Jablon + Joao Oliveira + Joao Pedro Silva + Joe Heck + Joe Jackson + Joel Bohman + Joel Heenan + Joel Watts + Joe Topjian + Johan C. Stöver + Johann Queuniet + john@calixto.net + John D'Agostino + John D'Ambrosio + John Huddleston + John Moses + John Paulett + John Shaffer + Jökull Sólberg Auðunsson + Jon Dufresne + Jonas Haag + Jonathan Davis + Jonatas C. D. + Jonathan Buchanan + Jonathan Daugherty (cygnus) + Jonathan Feignberg + Jonathan Slenders + Jonny Park + Jordan Bae + Jordan Dimov + Jordi J. Tablada + Jorge Bastida + Jorge Gajon + José Tomás Tocino García + Josef Rousek + Joseph Kocherhans + Josh Smeaton + Joshua Cannon + Joshua Ginsberg + Jozko Skrablin + J. Pablo Fernandez + jpellerin@gmail.com + Juan Catalano + Juan Manuel Caicedo + Juan Pedro Fisanotti + Julia Elman + Julia Matsieva + Julian Bez + Julien Phalip + Junyoung Choi + junzhang.jn@gmail.com + Jure Cuhalev + Justin Bronn + Justine Tunney + Justin Lilly + Justin Michalicek + Justin Myles Holmes + Jyrki Pulliainen + Kadesarin Sanjek + Karderio + Karen Tracey + Karol Sikora + Katherine “Kati” Michel + Kathryn Killebrew + Katie Miller + Keith Bussell + Kenneth Love + Kent Hauser + Keryn Knight + Kevin Grinberg + Kevin Kubasik + Kevin McConnell + Kieran Holland + kilian + Kim Joon Hwan 김준환 + Klaas van Schelven + knox + konrad@gwu.edu + Kowito Charoenratchatabhan + Krišjānis Vaiders + krzysiek.pawlik@silvermedia.pl + Krzysztof Jurewicz + Krzysztof Kulewski + kurtiss@meetro.com + Lakin Wecker + Lars Yencken + Lau Bech Lauritzen + Laurent Luce + Laurent Rahuel + lcordier@point45.com + Leah Culver + Leandra Finger + Lee Reilly + Lee Sanghyuck + Leo "hylje" Honkanen + Leo Shklovskii + Leo Soto + lerouxb@gmail.com + Lex Berezhny + Liang Feng + limodou + Lincoln Smith + Liu Yijie <007gzs@gmail.com> + Loek van Gent + Loïc Bistuer + Lowe Thiderman + Luan Pablo + Lucas Connors + Luciano Ramalho + Lucidiot + Ludvig Ericson + Luis C. Berrocal + Łukasz Langa + Łukasz Rekucki + Luke Granger-Brown + Luke Plant + Maciej Fijalkowski + Maciej Wiśniowski + Mads Jensen + Makoto Tsuyuki + Malcolm Tredinnick + Manav Agarwal + Manuel Saelices + Manuzhai + Marc Aymerich Gubern + Marc Egli + Marcel Telka + Marcelo Galigniana + Marc Fargas + Marc Garcia + Marcin Wróbel + Marc Remolt + Marc Tamlyn + Marc-Aurèle Brothier + Marian Andre + Marijn Vriens + Mario Gonzalez + Mariusz Felisiak + Mark Biggers + Mark Gensler + mark@junklight.com + Mark Lavin + Mark Sandstrom + Markus Amalthea Magnuson + Markus Holtermann + Marten Kenbeek + Marti Raudsepp + martin.glueck@gmail.com + Martin Green + Martin Kosír + Martin Mahner + Martin Maney + Martin von Gagern + Mart Sõmermaa + Marty Alchin + Masashi Shibata + masonsimon+django@gmail.com + Massimiliano Ravelli + Massimo Scamarcia + Mathieu Agopian + Matías Bordese + Matt Boersma + Matt Croydon + Matt Deacalion Stevens + Matt Dennenbaum + Matthew Flanagan + Matthew Schinckel + Matthew Somerville + Matthew Tretter + Matthew Wilkes + Matthias Kestenholz + Matthias Pronk + Matt Hoskins + Matt McClanahan + Matt Riggott + Matt Robenolt + Mattia Larentis + Mattia Procopio + Mattias Loverot + mattycakes@gmail.com + Max Burstein + Max Derkachev + Max Smolens + Maxime Lorant + Maxime Turcotte + Maximilian Merz + Maximillian Dornseif + mccutchen@gmail.com + Meghana Bhange + Meir Kriheli + Michael S. Brown + Michael Hall + Michael Josephson + Michael Lissner + Michael Manfre + michael.mcewan@gmail.com + Michael Placentra II + Michael Radziej + Michael Sanders + Michael Schwarz + Michael Sinov + Michael Thornhill + Michal Chruszcz + michal@plovarna.cz + Michał Modzelewski + Mihai Damian + Mihai Preda + Mikaël Barbero + Mike Axiak + Mike Grouchy + Mike Malone + Mike Richardson + Mike Wiacek + Mikhail Korobov + Mikko Hellsing + Mikołaj Siedlarek + milkomeda + Milton Waddams + mitakummaa@gmail.com + mmarshall + Moayad Mardini + Morgan Aubert + Moritz Sichert + Morten Bagai + msaelices + msundstr + Mushtaq Ali + Mykola Zamkovoi + Nadège Michel + Nagy Károly + Nasimul Haque + Nasir Hussain + Natalia Bidart + Nate Bragg + Nathan Gaberel + Neal Norwitz + Nebojša Dorđević + Ned Batchelder + Nena Kojadin + Niall Dalton + Niall Kelly + Nick Efford + Nick Lane + Nick Pope + Nick Presta + Nick Sandford + Nick Sarbicki + Niclas Olofsson + Nicola Larosa + Nicolas Lara + Nicolas Noé + Nikita Marchant + Niran Babalola + Nis Jørgensen + Nowell Strite + Nuno Mariz + Octavio Peri + oggie rob + oggy + Oliver Beattie + Oliver Rutherfurd + Olivier Sels + Olivier Tabone + Orestis Markou + Orne Brocaar + Oscar Ramirez + Ossama M. Khayat + Owen Griffiths + Pablo Martín + Panos Laganakos + Paolo Melchiorre + Pascal Hartig + Pascal Varet + Patrik Sletmo + Paul Bissex + Paul Collier + Paul Collins + Paul Donohue + Paul Lanier + Paul McLanahan + Paul McMillan + Paulo Poiati + Paulo Scardine + Paul Smith + Pavel Kulikov + pavithran s + Pavlo Kapyshin + permonik@mesias.brnonet.cz + Petar Marić + Pete Crosier + peter@mymart.com + Peter Sheats + Peter van Kampen + Peter Zsoldos + Pete Shinners + Petr Marhoun + Petter Strandmark + pgross@thoughtworks.com + phaedo + phil.h.smith@gmail.com + Philip Lindborg + Philippe Raoult + phil@produxion.net + Piotr Jakimiak + Piotr Lewandowski + plisk + polpak@yahoo.com + pradeep.gowda@gmail.com + Preston Holmes + Preston Timmons + Priyansh Saxena + Przemysław Buczkowski + Przemysław Suliga + Qi Zhao + Rachel Tobin + Rachel Willmer + Radek Švarz + Raffaele Salmaso + Rajesh Dhawan + Ramez Ashraf + Ramin Farajpour Cami + Ramiro Morales + Ramon Saraiva + Ram Rachum + Randy Barlow + Raphaël Barrois + Raphael Michel + Raúl Cumplido + Rebecca Smith + Remco Wendt + Renaud Parent + Renbi Yu + Reza Mohammadi + rhettg@gmail.com + Ricardo Javier Cárdenes Medina + ricardojbarrios@gmail.com + Riccardo Di Virgilio + Riccardo Magliocchetti + Richard Davies + Richard House + Rick Wagner + Rigel Di Scala + Robert Coup + Robert Myers + Roberto Aguilar + Robert Rock Howard + Robert Wittams + Rob Golding-Day + Rob Hudson + Rob Nguyen + Robin Munn + Rodrigo Pinheiro Marques de Araújo + Rohith P R + Romain Garrigues + Ronny Haryanto + Ross Poulton + Roxane Bellot + Rozza + Rudolph Froger + Rudy Mutter + Rune Rønde Laursen + Russell Cloran + Russell Keith-Magee + Russ Webber + Ryan Hall + ryankanno + Ryan Kelly + Ryan Niemeyer + Ryan Petrello + Ryan Rubin + Ryno Mathee + Sachin Jat + Sage M. Abdullah + Sam Newman + Sander Dijkhuis + Sanket Saurav + Sanyam Khurana + Sarah Boyce + Sarthak Mehrish + schwank@gmail.com + Scot Hacker + Scott Barr + Scott Cranfill + Scott Fitsimones + Scott Pashley + scott@staplefish.com + Sean Brant + Sebastian Hillig + Sebastian Spiegel + Segyo Myung + Selwin Ong + Sengtha Chay + Senko Rašić + serbaut@gmail.com + Sergei Maertens + Sergey Fedoseev + Sergey Kolosov + Seth Hill + Shai Berger + Shannon -jj Behrens + Shawn Milochik + Silvan Spross + Simeon Visser + Simon Blanchard + Simon Charette + Simon Greenhill + Simon Litchfield + Simon Meers + Simon Williams + Simon Willison + Sjoerd Job Postmus + Slawek Mikula + sloonz + smurf@smurf.noris.de + sopel + Sreehari K V + Srinivas Reddy Thatiparthy + Stanislas Guerra + Stanislaus Madueke + Stanislav Karpov + starrynight + Stefan R. Filipek + Stefane Fermgier + Stefano Rivera + Stéphane Raimbault + Stephan Jaekel + Stephen Burrows + Steven L. Smith (fvox13) + Steven Noorbergen (Xaroth) + Stuart Langridge + Subhav Gautam + Sujay S Kumar + Sune Kirkeby + Sung-Jin Hong + SuperJared + Susan Tan + Sutrisno Efendi + Swaroop C H + Szilveszter Farkas + Taavi Teska + Tai Lee + Takashi Matsuo + Tareque Hossain + Taylor Mitchell + Terry Huang + thebjorn + Thejaswi Puthraya + Thijs van Dien + Thom Wiggers + Thomas Chaumeny + Thomas Güttler + Thomas Kerpe + Thomas Sorrel + Thomas Steinacher + Thomas Stromberg + Thomas Tanner + tibimicu@gmx.net + Ties Jan Hefting + Tim Allen + Tim Givois + Tim Graham + Tim Heap + Tim McCurrach + Tim Saylor + Tobias Kunze + Tobias McNulty + tobias@neuyork.de + Todd O'Bryan + Tom Carrick + Tom Christie + Tom Forbes + Tom Insam + Tom Tobin + Tom Wojcik + Tomáš Ehrlich + Tomáš Kopeček + Tome Cvitan + Tomek Paczkowski + Tomer Chachamu + Tommy Beadle + Tore Lundqvist + torne-django@wolfpuppy.org.uk + Travis Cline + Travis Pinney + Travis Swicegood + Travis Terry + Trevor Caira + Trey Long + tstromberg@google.com + tt@gurgle.no + Tyler Tarabula + Tyson Clugg + Tyson Tate + Unai Zalakain + Valentina Mukhamedzhanova + valtron + Vasiliy Stavenko + Vasil Vangelovski + Vibhu Agarwal + Victor Andrée + viestards.lists@gmail.com + Viktor Danyliuk + Viktor Grabov + Ville Säävuori + Vinay Karanam + Vinay Sajip + Vincent Foley + Vinny Do + Vitaly Babiy + Vitaliy Yelnik + Vladimir Kuzma + Vlado + Vsevolod Solovyov + Vytis Banaitis + wam-djangobug@wamber.net + Wang Chun + Warren Smith + Waylan Limberg + Wiktor Kołodziej + Wiley Kestner + Wiliam Alves de Souza + Will Ayd + William Schwartz + Will Hardy + Wilson Miner + Wim Glenn + wojtek + Wu Haotian + Xavier Francisco + Xia Kai + Yann Fouillat + Yann Malet + Yasushi Masuda + ye7cakf02@sneakemail.com + ymasuda@ethercube.com + Yoong Kang Lim + Yusuke Miyazaki + yyyyyyyan + Zac Hatfield-Dodds + Zachary Voase + Zach Liu + Zach Thompson + Zain Memon + Zain Patel + Zak Johnson + Žan Anderle + Zbigniew Siciarz + zegor + Zeynel Özdemir + Zlatko Mašek + zriv + + +A big THANK YOU goes to: + + Rob Curley and Ralph Gage for letting us open-source Django. + + Frank Wiles for making excellent arguments for open-sourcing, and for + his sage sysadmin advice. + + Ian Bicking for convincing Adrian to ditch code generation. + + Mark Pilgrim for "Dive Into Python" (https://www.diveinto.org/python3/). + + Guido van Rossum for creating Python. diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/INSTALLER b/venv/Lib/site-packages/Django-4.0.6.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE b/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE new file mode 100644 index 000000000..5f4f225dd --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Django Software Foundation and individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of Django nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE.python b/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE.python new file mode 100644 index 000000000..031ce490b --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/LICENSE.python @@ -0,0 +1,290 @@ +Django is licensed under the three-clause BSD license; see the file +LICENSE for details. + +Django includes code from the Python standard library, which is licensed under +the Python license, a permissive open source license. The copyright and license +is included below for compliance with Python's terms. + +---------------------------------------------------------------------- + +Copyright (c) 2001-present Python Software Foundation; All Rights Reserved + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://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. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/METADATA b/venv/Lib/site-packages/Django-4.0.6.dist-info/METADATA new file mode 100644 index 000000000..b8f0837b7 --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/METADATA @@ -0,0 +1,97 @@ +Metadata-Version: 2.1 +Name: Django +Version: 4.0.6 +Summary: A high-level Python web framework that encourages rapid development and clean, pragmatic design. +Home-page: https://www.djangoproject.com/ +Author: Django Software Foundation +Author-email: foundation@djangoproject.com +License: BSD-3-Clause +Project-URL: Documentation, https://docs.djangoproject.com/ +Project-URL: Release notes, https://docs.djangoproject.com/en/stable/releases/ +Project-URL: Funding, https://www.djangoproject.com/fundraising/ +Project-URL: Source, https://github.com/django/django +Project-URL: Tracker, https://code.djangoproject.com/ +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=3.8 +Requires-Dist: asgiref (<4,>=3.4.1) +Requires-Dist: sqlparse (>=0.2.2) +Requires-Dist: backports.zoneinfo ; python_version < "3.9" +Requires-Dist: tzdata ; sys_platform == "win32" +Provides-Extra: argon2 +Requires-Dist: argon2-cffi (>=19.1.0) ; extra == 'argon2' +Provides-Extra: bcrypt +Requires-Dist: bcrypt ; extra == 'bcrypt' + +====== +Django +====== + +Django is a high-level Python web framework that encourages rapid development +and clean, pragmatic design. Thanks for checking it out. + +All documentation is in the "``docs``" directory and online at +https://docs.djangoproject.com/en/stable/. If you're just getting started, +here's how we recommend you read the docs: + +* First, read ``docs/intro/install.txt`` for instructions on installing Django. + +* Next, work through the tutorials in order (``docs/intro/tutorial01.txt``, + ``docs/intro/tutorial02.txt``, etc.). + +* If you want to set up an actual deployment server, read + ``docs/howto/deployment/index.txt`` for instructions. + +* You'll probably want to read through the topical guides (in ``docs/topics``) + next; from there you can jump to the HOWTOs (in ``docs/howto``) for specific + problems, and check out the reference (``docs/ref``) for gory details. + +* See ``docs/README`` for instructions on building an HTML version of the docs. + +Docs are updated rigorously. If you find any problems in the docs, or think +they should be clarified in any way, please take 30 seconds to fill out a +ticket here: https://code.djangoproject.com/newticket + +To get more help: + +* Join the ``#django`` channel on ``irc.libera.chat``. Lots of helpful people + hang out there. See https://web.libera.chat if you're new to IRC. + +* Join the django-users mailing list, or read the archives, at + https://groups.google.com/group/django-users. + +To contribute to Django: + +* Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for + information about getting involved. + +To run Django's test suite: + +* Follow the instructions in the "Unit tests" section of + ``docs/internals/contributing/writing-code/unit-tests.txt``, published online at + https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests + +Supporting the Development of Django +==================================== + +Django's development depends on your contributions. + +If you depend on Django, remember to support the Django Software Foundation: https://www.djangoproject.com/fundraising/ + + diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/RECORD b/venv/Lib/site-packages/Django-4.0.6.dist-info/RECORD new file mode 100644 index 000000000..36cb5af7d --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/RECORD @@ -0,0 +1,4441 @@ +../../Scripts/django-admin.exe,sha256=VWOb5jLUcH3ek0o4eF4NOR6LI9krrbFXK_iBSSC0tsk,106422 +Django-4.0.6.dist-info/AUTHORS,sha256=b2cbyCGZaQdEiQ7SzcNN-0VZ3WNdVN1mw36OUi_mlaY,39793 +Django-4.0.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Django-4.0.6.dist-info/LICENSE,sha256=uEZBXRtRTpwd_xSiLeuQbXlLxUbKYSn5UKGM0JHipmk,1552 +Django-4.0.6.dist-info/LICENSE.python,sha256=HqxYFuXzG1c2lJcnZYYD5mMSM9rNmrEZJCiFkfjybfs,14377 +Django-4.0.6.dist-info/METADATA,sha256=gvOMkV3KUIXbAmoBn9RK_Yj4x6DbmBaZUW4229tNTus,3977 +Django-4.0.6.dist-info/RECORD,, +Django-4.0.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +Django-4.0.6.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92 +Django-4.0.6.dist-info/entry_points.txt,sha256=daYW_s0r8Z5eiRi_bNU6vodHqVUXQWzm-DHFOQHTV2Q,83 +Django-4.0.6.dist-info/top_level.txt,sha256=V_goijg9tfO20ox_7os6CcnPvmBavbxu46LpJiNLwjA,7 +django/__init__.py,sha256=vtz-7ZEXvDOVy10iN5inEcjsUv2XjIO8npurtD1UXf4,799 +django/__main__.py,sha256=9a5To1vQXqf2Jg_eh8nLvIc0GXmDjEXv4jE1QZEqBFk,211 +django/__pycache__/__init__.cpython-310.pyc,, +django/__pycache__/__main__.cpython-310.pyc,, +django/__pycache__/shortcuts.cpython-310.pyc,, +django/apps/__init__.py,sha256=8WZTI_JnNuP4tyfuimH3_pKQYbDAy2haq-xkQT1UXkc,90 +django/apps/__pycache__/__init__.cpython-310.pyc,, +django/apps/__pycache__/config.cpython-310.pyc,, +django/apps/__pycache__/registry.cpython-310.pyc,, +django/apps/config.py,sha256=bXN_4OgE8lyeKT7TkreFuRzL4o9yXP2XuIrtTciwS60,13315 +django/apps/registry.py,sha256=0pItLFP0gw_EPbqeGdvVbSkYljeK6UVT2hL0eH7yDdg,17665 +django/conf/__init__.py,sha256=pT6dcpP5xaTBxx0xWokr4V_XxCT62hBhu6G3ZrudHoM,10808 +django/conf/__pycache__/__init__.cpython-310.pyc,, +django/conf/__pycache__/global_settings.cpython-310.pyc,, +django/conf/app_template/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/app_template/admin.py-tpl,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63 +django/conf/app_template/apps.py-tpl,sha256=jrRjsh9lSkUvV4NnKdlAhLDtvydwBNjite0w2J9WPtI,171 +django/conf/app_template/migrations/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/app_template/models.py-tpl,sha256=Vjc0p2XbAPgE6HyTF6vll98A4eDhA5AvaQqsc4kQ9AQ,57 +django/conf/app_template/tests.py-tpl,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60 +django/conf/app_template/views.py-tpl,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63 +django/conf/global_settings.py,sha256=6h2SOLdBvFutsAiBiFdE5_xtsnuQKbtInt1FG9MdHIs,22639 +django/conf/locale/__init__.py,sha256=-5CQ68LtJOAC3ulhpP7OGGxyNdGqRG8QiCvgeMZP0YI,13588 +django/conf/locale/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/af/LC_MESSAGES/django.mo,sha256=3KYsjZe0UVNs12pbY1C71twF3KuIQAnLD6yyFPxG0CM,21840 +django/conf/locale/af/LC_MESSAGES/django.po,sha256=v1ebpND1kYlrQFEWhYwCq-Zbe1ujvf3xYqcmUBDmvZk,26530 +django/conf/locale/ar/LC_MESSAGES/django.mo,sha256=qBaEPhfJxd2mK1uPH7J06hPI3_leRPsWkVgcKtJSAvQ,35688 +django/conf/locale/ar/LC_MESSAGES/django.po,sha256=MQeB4q0H-uDLurniJP5b2SBOTETAUl9k9NHxtaw0nnU,38892 +django/conf/locale/ar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ar/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ar/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ar/formats.py,sha256=EI9DAiGt1avNY-a6luMnAqKISKGHXHiKE4QLRx7wGHU,696 +django/conf/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=1LjYIo3qTIliodHd4Mm7Gmh2tzuZRZzc6s0zohGsiNU,35409 +django/conf/locale/ar_DZ/LC_MESSAGES/django.po,sha256=a5lRnz_D4NgsMxCnU_lxE8JsQb3VEfXQ3xIXgH-VQrI,38151 +django/conf/locale/ar_DZ/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ar_DZ/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ar_DZ/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ar_DZ/formats.py,sha256=T84q3oMKng-L7_xymPqYwpzs78LvvfHy2drfSRj8XjE,901 +django/conf/locale/ast/LC_MESSAGES/django.mo,sha256=XSStt50HP-49AJ8wFcnbn55SLncJCsS2lx_4UwK-h-8,15579 +django/conf/locale/ast/LC_MESSAGES/django.po,sha256=7qZUb5JjfrWLqtXPRjpNOMNycbcsEYpNO-oYmazLTk4,23675 +django/conf/locale/az/LC_MESSAGES/django.mo,sha256=lsm6IvKmBmUxUCqVW3RowQxKXd6TPzwGKGw7jeO5FX0,27170 +django/conf/locale/az/LC_MESSAGES/django.po,sha256=yO6Qd6eTX9Z9JRVAynpwlZNz8Q8VFgNEkjw8-v9A-Ck,29059 +django/conf/locale/az/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/az/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/az/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/az/formats.py,sha256=JQoS2AYHKJxiH6TJas1MoeYgTeUv5XcNtYUHF7ulDmw,1087 +django/conf/locale/be/LC_MESSAGES/django.mo,sha256=FZivGaKrh1M4tAxfZGF-H1koGnof248obvfA6Xw57rY,36467 +django/conf/locale/be/LC_MESSAGES/django.po,sha256=N2laJ6pArev1YBKRfqpeez0LbULVaIt7TNNlIX_5nWM,39028 +django/conf/locale/bg/LC_MESSAGES/django.mo,sha256=FqbeKBkf9BqYntobFo98EnL5NeHy6DsSIXuinIWoCHE,33758 +django/conf/locale/bg/LC_MESSAGES/django.po,sha256=3FL505XlkCzIA_peYeeb2O-eKS4hQbOKRW7OSCtAX08,36197 +django/conf/locale/bg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bg/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/bg/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/bg/formats.py,sha256=LC7P_5yjdGgsxLQ_GDtC8H2bz9NTxUze_CAtzlm37TA,705 +django/conf/locale/bn/LC_MESSAGES/django.mo,sha256=sB0RIFrGS11Z8dx5829oOFw55vuO4vty3W4oVzIEe8Q,16660 +django/conf/locale/bn/LC_MESSAGES/django.po,sha256=rF9vML3LDOqXkmK6R_VF3tQaFEoZI7besJAPx5qHNM0,26877 +django/conf/locale/bn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bn/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/bn/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/bn/formats.py,sha256=jynhZ9XNNuxTXeF7f2FrJYYZuFwlLY58fGfQ6gVs7s8,964 +django/conf/locale/br/LC_MESSAGES/django.mo,sha256=Xow2-sd55CZJsvfF8axtxXNRe27EDwxKixCGelVQ4aU,14009 +django/conf/locale/br/LC_MESSAGES/django.po,sha256=ODCUDdEDAvsOVOAr49YiWT2YQaBZmc-38brdgYWc8Bs,24293 +django/conf/locale/bs/LC_MESSAGES/django.mo,sha256=Xa5QAbsHIdLkyG4nhLCD4UHdCngrw5Oh120abCNdWlA,10824 +django/conf/locale/bs/LC_MESSAGES/django.po,sha256=IB-2VvrQKUivAMLMpQo1LGRAxw3kj-7kB6ckPai0fug,22070 +django/conf/locale/bs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bs/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/bs/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/bs/formats.py,sha256=760m-h4OHpij6p_BAD2dr3nsWaTb6oR1Y5culX9Gxqw,705 +django/conf/locale/ca/LC_MESSAGES/django.mo,sha256=ssxRpHM0lFShsLwaRoEVs_vRR4coEVkD3ne8mEaU7PI,27427 +django/conf/locale/ca/LC_MESSAGES/django.po,sha256=DARV_Phd8ugGNdL36iaFgsuUMeV3_rA9vEmK_nuh57E,29996 +django/conf/locale/ca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ca/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ca/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ca/formats.py,sha256=6czxXIeGs7BYpAbZVLSFtHXCRleftoPRRabRhRXuKPM,955 +django/conf/locale/cs/LC_MESSAGES/django.mo,sha256=16hlLpPmncCdlC8_s8QDvzTC_43ZN1vofO7qf2bTR68,29207 +django/conf/locale/cs/LC_MESSAGES/django.po,sha256=zDHi4FqaihdMELv-D0ZP8LPPv7N6GPVNUW9Om5---kk,31971 +django/conf/locale/cs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/cs/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/cs/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/cs/formats.py,sha256=3MA70CW0wfr0AIYvYqE0ACmX79tNOx-ZdlR6Aetp9e8,1539 +django/conf/locale/cy/LC_MESSAGES/django.mo,sha256=s7mf895rsoiqrPrXpyWg2k85rN8umYB2aTExWMTux7s,18319 +django/conf/locale/cy/LC_MESSAGES/django.po,sha256=S-1PVWWVgYmugHoYUlmTFAzKCpI81n9MIAhkETbpUoo,25758 +django/conf/locale/cy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/cy/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/cy/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/cy/formats.py,sha256=NY1pYPfpu7XjLMCCuJk5ggdpLcufV1h101ojyxfPUrY,1355 +django/conf/locale/da/LC_MESSAGES/django.mo,sha256=guEjF0Lgf_ZqZisWHqPFXYXZFzWP5SKdxO4taCx7mPU,26957 +django/conf/locale/da/LC_MESSAGES/django.po,sha256=GzODGRHoDZA1paoctBSpE4YMyQ0qebQxb1aNl5_n38M,29332 +django/conf/locale/da/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/da/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/da/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/da/formats.py,sha256=-y3033Fo7COyY0NbxeJVYGFybrnLbgXtRf1yBGlouys,876 +django/conf/locale/de/LC_MESSAGES/django.mo,sha256=WBYBgUO9yULQcu6HgA7lOAcgF-13t_HXhySUUdm1z1g,28373 +django/conf/locale/de/LC_MESSAGES/django.po,sha256=rxizy5S92pZkKFFrd2Zb0sOxpRWDRmCkTWNkVWw9j_0,30798 +django/conf/locale/de/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/de/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/de/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/de/formats.py,sha256=fysX8z5TkbPUWAngoy_sMeFGWp2iaNU6ftkBz8cqplg,996 +django/conf/locale/de_CH/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/de_CH/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/de_CH/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/de_CH/formats.py,sha256=22UDF62ESuU0Jp_iNUqAj-Bhq4_-frpji0-ynBdHXYk,1377 +django/conf/locale/dsb/LC_MESSAGES/django.mo,sha256=EuJv_1tQQTRMDhy7XwIl69Hv4UISRQq6oLgFI8BHmng,29802 +django/conf/locale/dsb/LC_MESSAGES/django.po,sha256=5QeIB5sHXmPKjsbAMEkTVjYjA4KB6brUSVJjxi2-Z54,32262 +django/conf/locale/el/LC_MESSAGES/django.mo,sha256=P5lTOPFcl9x6_j69ZN3hM_mQbhW7Fbbx02RtTNJwfS0,33648 +django/conf/locale/el/LC_MESSAGES/django.po,sha256=rZCComPQcSSr8ZDLPgtz958uBeBZsmV_gEP-sW88kRA,37123 +django/conf/locale/el/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/el/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/el/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/el/formats.py,sha256=RON2aqQaQK3DYVF_wGlBQJDHrhANxypcUW_udYKI-ro,1241 +django/conf/locale/en/LC_MESSAGES/django.mo,sha256=mVpSj1AoAdDdW3zPZIg5ZDsDbkSUQUMACg_BbWHGFig,356 +django/conf/locale/en/LC_MESSAGES/django.po,sha256=fR3-Y7427YEPhTTKIx6nN5MpJq0eetglzz9iR46Z49k,29556 +django/conf/locale/en/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/en/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/en/formats.py,sha256=VTQUhaZ_WFhS5rQj0PxbnoMySK0nzUSqrd6Gx-DtXxI,2438 +django/conf/locale/en_AU/LC_MESSAGES/django.mo,sha256=SntsKx21R2zdjj0D73BkOXGTDnoN5unsLMJ3y06nONM,25633 +django/conf/locale/en_AU/LC_MESSAGES/django.po,sha256=6Qh4Z6REzhUdG5KwNPNK9xgLlgq3VbAJuoSXyd_eHdE,28270 +django/conf/locale/en_AU/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en_AU/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/en_AU/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/en_AU/formats.py,sha256=BoI5UviKGZ4TccqLmxpcdMf0Yk1YiEhY_iLQUddjvi0,1650 +django/conf/locale/en_GB/LC_MESSAGES/django.mo,sha256=jSIe44HYGfzQlPtUZ8tWK2vCYM9GqCKs-CxLURn4e1o,12108 +django/conf/locale/en_GB/LC_MESSAGES/django.po,sha256=PTXvOpkxgZFRoyiqftEAuMrFcYRLfLDd6w0K8crN8j4,22140 +django/conf/locale/en_GB/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en_GB/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/en_GB/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/en_GB/formats.py,sha256=cJN8YNthkIOHCIMnwiTaSZ6RCwgSHkjWYMcfw8VFScE,1650 +django/conf/locale/eo/LC_MESSAGES/django.mo,sha256=G5VNi-7AMozkh0vK3UhPJi1tCbqJWSTeFSMoHo4jfvM,20433 +django/conf/locale/eo/LC_MESSAGES/django.po,sha256=0UwyG4ncz-dI6tkC2gLWg56EgmU1YLBspAh50Caj7-o,26212 +django/conf/locale/eo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/eo/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/eo/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/eo/formats.py,sha256=zIEAk-SiLX0cvQVmRc3LpmV69jwRrejMMdC7vtVsSh0,1715 +django/conf/locale/es/LC_MESSAGES/django.mo,sha256=apr2uf-Xnvai6GkGtYtX7yl3v9HnI27yysJl63e5OA8,27700 +django/conf/locale/es/LC_MESSAGES/django.po,sha256=DL6VVKfPlZ62XEGv1yiexHFu0XW8NKSqNxdq4vgDcHY,31003 +django/conf/locale/es/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es/formats.py,sha256=j2k3I4e_4ePYFsJbkREtmknqlhqDPxSrvWN3lIQE0oA,953 +django/conf/locale/es_AR/LC_MESSAGES/django.mo,sha256=E06Np7SoEVVznN1sxSKzceWS15w1NStJJRL0BBqHGBU,28082 +django/conf/locale/es_AR/LC_MESSAGES/django.po,sha256=mxJPl0ibBWPZRLtyujymKf7yUubodsVQrihn4W-FZks,30245 +django/conf/locale/es_AR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_AR/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es_AR/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es_AR/formats.py,sha256=4qgOJoR2K5ZE-pA2-aYRwFW7AbK-M9F9u3zVwgebr2w,935 +django/conf/locale/es_CO/LC_MESSAGES/django.mo,sha256=ehUwvqz9InObH3fGnOLuBwivRTVMJriZmJzXcJHsfjc,18079 +django/conf/locale/es_CO/LC_MESSAGES/django.po,sha256=XRgn56QENxEixlyix3v4ZSTSjo4vn8fze8smkrv_gc4,25107 +django/conf/locale/es_CO/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_CO/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es_CO/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es_CO/formats.py,sha256=0uAbBvOkdJZKjvhrrd0htScdO7sTgbofOkkC8A35_a8,691 +django/conf/locale/es_MX/LC_MESSAGES/django.mo,sha256=CWpmhzGDdfUZ1k59EqU9MmZI_fvzFHsnDFTwV_qWqj0,17424 +django/conf/locale/es_MX/LC_MESSAGES/django.po,sha256=BLUYqbCL9Jw_S5f-7Us_vLbkc8Qjz1Uq83bdX6rg4zU,25029 +django/conf/locale/es_MX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_MX/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es_MX/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es_MX/formats.py,sha256=fBvyAqBcAXARptSE3hxwzFYNx3lEE8QrhNrCWuuGNlA,768 +django/conf/locale/es_NI/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_NI/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es_NI/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es_NI/formats.py,sha256=UiOadPoMrNt0iTp8jZVq65xR_4LkOwp-fjvFb8MyNVg,711 +django/conf/locale/es_PR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_PR/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/es_PR/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/es_PR/formats.py,sha256=VVTlwyekX80zCKlg1P4jhaAdKNpN5I64pW_xgrhpyVs,675 +django/conf/locale/es_VE/LC_MESSAGES/django.mo,sha256=h-h1D_Kr-LI_DyUJuIG4Zbu1HcLWTM1s5X515EYLXO8,18840 +django/conf/locale/es_VE/LC_MESSAGES/django.po,sha256=Xj38imu4Yw-Mugwge5CqAqWlcnRWnAKpVBPuL06Twjs,25494 +django/conf/locale/et/LC_MESSAGES/django.mo,sha256=AAtf-jezxKyK4-4vqKpCnbTRmXW2Qij4YA2X8ckt6Jw,26794 +django/conf/locale/et/LC_MESSAGES/django.po,sha256=6DeZWGsqrsoNbsPYa-1d7Q0F0fyWQAzqnXXn6aUcmX0,29326 +django/conf/locale/et/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/et/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/et/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/et/formats.py,sha256=DyFSZVuGSYGoImrRI2FodeM51OtvIcCkKzkI0KvYTQw,707 +django/conf/locale/eu/LC_MESSAGES/django.mo,sha256=EFcIbNvLcmCCW2S2A5icZ7pArQzjEgQhGtXuU3NMEPA,21743 +django/conf/locale/eu/LC_MESSAGES/django.po,sha256=aZR0jWdLCcfMfWIc-WErfNpeEa3rz3SkTKFmL97OKs0,27112 +django/conf/locale/eu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/eu/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/eu/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/eu/formats.py,sha256=-PuRA6eHeXP8R3YV0aIEQRbk2LveaZk-_kjHlBT-Drg,749 +django/conf/locale/fa/LC_MESSAGES/django.mo,sha256=4wb3eCOGWADBdwvAtqc3xekw1o5oYL5wwSFlB4Rnq8w,32052 +django/conf/locale/fa/LC_MESSAGES/django.po,sha256=TRHzYO6sBTpASuuuiUXtGvEb--o5d-gckCFSRbTxukM,34832 +django/conf/locale/fa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fa/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/fa/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/fa/formats.py,sha256=v0dLaIh6-CWCAQHkmX0PaIlA499gTeRcJEi7lVJzw9o,722 +django/conf/locale/fi/LC_MESSAGES/django.mo,sha256=lw8RBCTTc5Tsl3u7FuCx-6T1wYQ0a4vJmyEEiUwm3Rk,27454 +django/conf/locale/fi/LC_MESSAGES/django.po,sha256=O2uiltiQtNUK4kYSqyyNx66e9FiS7q9N6iyEFMAbDjI,29760 +django/conf/locale/fi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fi/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/fi/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/fi/formats.py,sha256=CO_wD5ZBHwAVgjxArXktLCD7M-PPhtHbayX_bBKqhlA,1213 +django/conf/locale/fr/LC_MESSAGES/django.mo,sha256=rTOlY_ntQgkkBn_sxrnaMGw1kl1Ym5cTL4HIJkRzGSk,28628 +django/conf/locale/fr/LC_MESSAGES/django.po,sha256=MCFFPl9ZCxzkVlgBjvOMS9HZ7mQYfhOcvtbY6sDH0gc,31027 +django/conf/locale/fr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fr/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/fr/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/fr/formats.py,sha256=Idd_fVXKJHJSOuB3jRbo_FgwQ2P6VK2AjJbadv5UxK8,1293 +django/conf/locale/fy/LC_MESSAGES/django.mo,sha256=9P7zoJtaYHfXly8d6zBoqkxLM98dO8uI6nmWtsGu-lM,2286 +django/conf/locale/fy/LC_MESSAGES/django.po,sha256=jveK-2MjopbqC9jWcrYbttIb4DUmFyW1_-0tYaD6R0I,19684 +django/conf/locale/fy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fy/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/fy/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/fy/formats.py,sha256=mJXj1dHUnO883PYWPwuI07CNbjmnfBTQVRXZMg2hmOk,658 +django/conf/locale/ga/LC_MESSAGES/django.mo,sha256=abQpDgeTUIdZzldVuZLZiBOgf1s2YVSyrvEhxwl0GK8,14025 +django/conf/locale/ga/LC_MESSAGES/django.po,sha256=rppcWQVozZdsbl7Gud6KnJo6yDB8T0xH6hvIiLFi_zA,24343 +django/conf/locale/ga/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ga/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ga/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ga/formats.py,sha256=Qh7R3UMfWzt7QIdMZqxY0o4OMpVsqlchHK7Z0QnDWds,682 +django/conf/locale/gd/LC_MESSAGES/django.mo,sha256=2VKzI7Nqd2NjABVQGdcduWHjj0h2b3UBGQub7xaTVPs,30752 +django/conf/locale/gd/LC_MESSAGES/django.po,sha256=3PfuhhmosuarfPjvM2TVf2kHhZaw5_G8oIM2VWTc3gI,33347 +django/conf/locale/gd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/gd/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/gd/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/gd/formats.py,sha256=7doL7JIoCqA_o-lpCwM3jDHMpptA3BbSgeLRqdZk8Lc,715 +django/conf/locale/gl/LC_MESSAGES/django.mo,sha256=utB99vnkb5SLff8K0i3gFI8Nu_eirBxDEpFKbZ_voPY,14253 +django/conf/locale/gl/LC_MESSAGES/django.po,sha256=rvhCJsURGjM2ekm6NBjY5crVGc5lrQv2qpHj35dM3qc,23336 +django/conf/locale/gl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/gl/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/gl/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/gl/formats.py,sha256=ygSFv-YTS8htG_LW0awegkkOarPRTZNPbUck5sxkAwI,757 +django/conf/locale/he/LC_MESSAGES/django.mo,sha256=46lIe8tACJ_ga70yOY5qNNDIZhvGZAqNh25zHRoBo_c,30227 +django/conf/locale/he/LC_MESSAGES/django.po,sha256=NrzjGVZoDiXeg6Uolt8m9emSNHpmOCzzIxnyipggDzo,33362 +django/conf/locale/he/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/he/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/he/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/he/formats.py,sha256=M-tu-LmTZd_oYPNH6CZEsdxJN526RUOfnLHlQxRL0N0,712 +django/conf/locale/hi/LC_MESSAGES/django.mo,sha256=Zi72xDA1RVm3S5Y9_tRA52_wke8PlvomklvUJBXwiF0,17619 +django/conf/locale/hi/LC_MESSAGES/django.po,sha256=R_DRspzGYZ5XxXS4OvpVD4EEVZ9LY3NzrfzD2LbXqIg,27594 +django/conf/locale/hi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hi/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/hi/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/hi/formats.py,sha256=JArVM9dMluSP-cwpZydSVXHB5Vs9QKyR9c-bftI9hds,684 +django/conf/locale/hr/LC_MESSAGES/django.mo,sha256=HP4PCb-i1yYsl5eqCamg5s3qBxZpS_aXDDKZ4Hlbbcc,19457 +django/conf/locale/hr/LC_MESSAGES/django.po,sha256=qeVJgKiAv5dKR2msD2iokSOApZozB3Gp0xqzC09jnvs,26329 +django/conf/locale/hr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hr/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/hr/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/hr/formats.py,sha256=F4mIdDoaOYJ_lPmsJ_6bQo4Zj8pOSVwuldm92zRy4Fo,1723 +django/conf/locale/hsb/LC_MESSAGES/django.mo,sha256=lD79U1OLYaJKq3Q6XrPMTmkrX3qwLiGbr8c-T-Oe6mg,29491 +django/conf/locale/hsb/LC_MESSAGES/django.po,sha256=MkKgegENDgUK9urEUskxfZ__ETOR6IbXqgxyUJq47q0,31920 +django/conf/locale/hu/LC_MESSAGES/django.mo,sha256=zORP8fLsHnlY5RRY7i_mlVlx8f3erqSfPziYNAOIAe8,28217 +django/conf/locale/hu/LC_MESSAGES/django.po,sha256=6zz8Tvs_InxZDyuSKyo7f-JbNVM2JjkE_XXYbb0skMk,30680 +django/conf/locale/hu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hu/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/hu/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/hu/formats.py,sha256=xAD7mNsC5wFA2_KGRbBMPKwj884pq0jCKmXhEenGAEk,1001 +django/conf/locale/hy/LC_MESSAGES/django.mo,sha256=KfmTnB-3ZUKDHeNgLiego2Af0WZoHTuNKss3zE-_XOE,22207 +django/conf/locale/hy/LC_MESSAGES/django.po,sha256=kNKlJ5NqZmeTnnxdqhmU3kXiqT9t8MgAFgxM2V09AIc,28833 +django/conf/locale/ia/LC_MESSAGES/django.mo,sha256=JcrpersrDAoJXrD3AnPYBCQyGJ-6kUzH_Q8StbqmMeE,21428 +django/conf/locale/ia/LC_MESSAGES/django.po,sha256=LG0juYDjf3KkscDxwjY3ac6H1u5BBwGHljW3QWvr1nc,26859 +django/conf/locale/id/LC_MESSAGES/django.mo,sha256=Fnu4dhDrt6pGQYDxXX9p1B-LX9fLMhY_qqbfl6blqSo,26822 +django/conf/locale/id/LC_MESSAGES/django.po,sha256=heyxYms8XAlxQFevF_rXIAojtvbqQCy94K6Nz0Ph3P4,29126 +django/conf/locale/id/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/id/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/id/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/id/formats.py,sha256=kYyOxWHN3Jyif3rFxLFyBUjTzFUwmuaLrkw5JvGbEz8,1644 +django/conf/locale/ig/LC_MESSAGES/django.mo,sha256=tAZG5GKhEbrUCJtLrUxzmrROe1RxOhep8w-RR7DaDYo,27188 +django/conf/locale/ig/LC_MESSAGES/django.po,sha256=DB_I4JXKMY4M7PdAeIsdqnLSFpq6ImkGPCuY82rNBpY,28931 +django/conf/locale/ig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ig/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ig/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ig/formats.py,sha256=P3IsxhF5rNFZ5nCWUSyJfFLb0V1QdX_Xn-tYdrcll5Q,1119 +django/conf/locale/io/LC_MESSAGES/django.mo,sha256=uI78C7Qkytf3g1A6kVWiri_CbS55jReO2XmRfLTeNs0,14317 +django/conf/locale/io/LC_MESSAGES/django.po,sha256=FyN4ZTfNPV5TagM8NEhRts8y_FhehIPPouh_MfslnWY,23124 +django/conf/locale/is/LC_MESSAGES/django.mo,sha256=1pFU-dTPg2zs87L0ZqFFGS9q-f-XrzTOlhKujlyNL2E,24273 +django/conf/locale/is/LC_MESSAGES/django.po,sha256=76cQ_9DLg1jR53hiKSc1tLUMeKn8qTdPwpHwutEK014,28607 +django/conf/locale/is/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/is/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/is/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/is/formats.py,sha256=scsNfP4vVacxWIoN03qc2Fa3R8Uh5Izr1MqBicrAl3A,688 +django/conf/locale/it/LC_MESSAGES/django.mo,sha256=TT9-lL6zoRHuxegdPT5m9EpSxSy5bK9JXr3LFXsnsgI,27374 +django/conf/locale/it/LC_MESSAGES/django.po,sha256=CIHNxNJ45orebW0I6VqVTSHOGiEcmmOnmLGwfYefDKI,30205 +django/conf/locale/it/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/it/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/it/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/it/formats.py,sha256=KzkSb3KXBwfM3gk2FezyR-W8_RYKpnlFeFuIi5zl-S0,1774 +django/conf/locale/ja/LC_MESSAGES/django.mo,sha256=PO_AhwSIFA2XXRMoDG2hbzxsP8IaQXgAW_vtKQDQMDg,30047 +django/conf/locale/ja/LC_MESSAGES/django.po,sha256=CznWWpAbgmFc7i8uld3mpeKwR39mld--4BoXOCb7Los,32447 +django/conf/locale/ja/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ja/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ja/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ja/formats.py,sha256=MQ1KA6l1qmW07rXLYplRs-V1hR1Acbx30k2RpXnMhQg,729 +django/conf/locale/ka/LC_MESSAGES/django.mo,sha256=4e8at-KNaxYJKIJd8r6iPrYhEdnaJ1qtPw-QHPMh-Sc,24759 +django/conf/locale/ka/LC_MESSAGES/django.po,sha256=pIgaLU6hXgVQ2WJp1DTFoubI7zHOUkkKMddwV3PTdt8,32088 +django/conf/locale/ka/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ka/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ka/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ka/formats.py,sha256=elTGOjS-mxuoSCAKOm8Wz2aLfh4pWvNyClUFcrYq9ng,1861 +django/conf/locale/kab/LC_MESSAGES/django.mo,sha256=x5Kyq2Uf3XNlQP06--4lT8Q1MacA096hZbyMJRrHYIc,7139 +django/conf/locale/kab/LC_MESSAGES/django.po,sha256=DsFL3IzidcAnPoAWIfIbGJ6Teop1yKPBRALeLYrdiFA,20221 +django/conf/locale/kk/LC_MESSAGES/django.mo,sha256=krjcDvA5bu591zcP76bWp2mD2FL1VUl7wutaZjgD668,13148 +django/conf/locale/kk/LC_MESSAGES/django.po,sha256=RgM4kzn46ZjkSDHMAsyOoUg7GdxGiZ-vaEOdf7k0c5A,23933 +django/conf/locale/km/LC_MESSAGES/django.mo,sha256=kEvhZlH7lkY1DUIHTHhFVQzOMAPd_-QMItXTYX0j1xY,7223 +django/conf/locale/km/LC_MESSAGES/django.po,sha256=QgRxEiJMopO14drcmeSG6XEXQpiAyfQN0Ot6eH4gca8,21999 +django/conf/locale/km/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/km/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/km/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/km/formats.py,sha256=0UMLrZz1aI2sdRPkJ0YzX99co2IV6tldP7pEvGEPdP0,750 +django/conf/locale/kn/LC_MESSAGES/django.mo,sha256=fQ7AD5tUiV_PZFBxUjNPQN79dWBJKqfoYwRdrOaQjU4,17515 +django/conf/locale/kn/LC_MESSAGES/django.po,sha256=fS4Z7L4NGVQ6ipZ7lMHAqAopTBP0KkOc-eBK0IYdbBE,28133 +django/conf/locale/kn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/kn/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/kn/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/kn/formats.py,sha256=X5j9VHIW2XRdeTzDFEyS8tG05OBFzP2R7sEGUQa_INg,680 +django/conf/locale/ko/LC_MESSAGES/django.mo,sha256=WVGMUYgYPYSH1_PNnMyFMrck0QRc7dnKkM7A4Vd72JA,26696 +django/conf/locale/ko/LC_MESSAGES/django.po,sha256=dxYKncgNz7hPl003QlCOwuGQ2riodHmuZIYtQ3heK9I,30363 +django/conf/locale/ko/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ko/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ko/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ko/formats.py,sha256=qn36EjiO4Bu12D_6qitjMDkBfy4M0LgFE-FhK8bPOto,2061 +django/conf/locale/ky/LC_MESSAGES/django.mo,sha256=IBVfwPwaZmaoljMRBGww_wWGMJqbF_IOHHnH2j-yJw8,31395 +django/conf/locale/ky/LC_MESSAGES/django.po,sha256=5ACTPMMbXuPJbU7Rfzs0yZHh3xy483pqo5DwSBQp4s4,33332 +django/conf/locale/ky/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ky/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ky/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ky/formats.py,sha256=QCq7vxAD5fe9VhcjRhG6C3N28jNvdzKR-c-EvDSJ1Pg,1178 +django/conf/locale/lb/LC_MESSAGES/django.mo,sha256=tQSJLQUeD5iUt-eA2EsHuyYqsCSYFtbGdryATxisZsc,8008 +django/conf/locale/lb/LC_MESSAGES/django.po,sha256=GkKPLO3zfGTNync-xoYTf0vZ2GUSAotAjfPSP01SDMU,20622 +django/conf/locale/lt/LC_MESSAGES/django.mo,sha256=cdUzK5RYW-61Upf8Sd8ydAg9wXg21pJaIRWFSKPv17c,21421 +django/conf/locale/lt/LC_MESSAGES/django.po,sha256=Lvpe_xlbxSa5vWEossxBCKryDVT7Lwz0EnuL1kSO6OY,28455 +django/conf/locale/lt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/lt/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/lt/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/lt/formats.py,sha256=C9ScR3gYswT1dQXFedUUnYe6DQPVGAS_nLxs0h2E3dE,1637 +django/conf/locale/lv/LC_MESSAGES/django.mo,sha256=A06pCAw9j4IsUV1l6_aoEZt7yjZfDXIzA5U27VUS5jk,28306 +django/conf/locale/lv/LC_MESSAGES/django.po,sha256=15dXbAHj39Lp-mBqUvvDKkBBju4cwkNAwrmJoIhvluc,30954 +django/conf/locale/lv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/lv/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/lv/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/lv/formats.py,sha256=k8owdq0U7-x6yl8ll1W5VjRoKdp8a1G2enH04G5_nvU,1713 +django/conf/locale/mk/LC_MESSAGES/django.mo,sha256=uQKmcys0rOsRynEa812XDAaeiNTeBMkqhR4LZ_cfdAk,22737 +django/conf/locale/mk/LC_MESSAGES/django.po,sha256=4K11QRb493wD-FM6-ruCxks9_vl_jB59V1c1rx-TdKg,29863 +django/conf/locale/mk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/mk/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/mk/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/mk/formats.py,sha256=xwnJsXLXGogOqpP18u6GozjehpWAwwKmXbELolYV_k4,1451 +django/conf/locale/ml/LC_MESSAGES/django.mo,sha256=MGvV0e3LGUFdVIA-h__BuY8Ckom2dAhSFvAtZ8FiAXU,30808 +django/conf/locale/ml/LC_MESSAGES/django.po,sha256=iLllS6vlCpBNZfy9Xd_2Cuwi_1-Vz9fW4G1lUNOuZ6k,37271 +django/conf/locale/ml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ml/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ml/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ml/formats.py,sha256=ZR7tMdJF0U6K1H95cTqrFH4gop6ZuSQ7vD2h0yKq6mo,1597 +django/conf/locale/mn/LC_MESSAGES/django.mo,sha256=sd860BHXfgAjDzU3CiwO3JirA8S83nSr4Vy3QUpXHyU,24783 +django/conf/locale/mn/LC_MESSAGES/django.po,sha256=VBgXVee15TTorC7zwYFwmHM4qgpYy11yclv_u7UTNwA,30004 +django/conf/locale/mn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/mn/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/mn/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/mn/formats.py,sha256=fsexJU9_UTig2PS_o11hcEmrbPBS8voI4ojuAVPOd_U,676 +django/conf/locale/mr/LC_MESSAGES/django.mo,sha256=aERpEBdJtkSwBj6zOtiKDaXuFzepi8_IwvPPHi8QtGU,1591 +django/conf/locale/mr/LC_MESSAGES/django.po,sha256=GFtk4tVQVi8b7N7KEhoNubVw_PV08pyRvcGOP270s1Q,19401 +django/conf/locale/ms/LC_MESSAGES/django.mo,sha256=U4_kzfbYF7u78DesFRSReOIeVbOnq8hi_pReFfHfyUQ,27066 +django/conf/locale/ms/LC_MESSAGES/django.po,sha256=49pG3cykGjVfC9N8WPyskz-m7r6KmQiq5i8MR6eOi54,28985 +django/conf/locale/ms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ms/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ms/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ms/formats.py,sha256=YtOBs6s4j4SOmfB3cpp2ekcxVFoVGgUN8mThoSueCt0,1522 +django/conf/locale/my/LC_MESSAGES/django.mo,sha256=SjYOewwnVim3-GrANk2RNanOjo6Hy2omw0qnpkMzTlM,2589 +django/conf/locale/my/LC_MESSAGES/django.po,sha256=b_QSKXc3lS2Xzb45yVYVg307uZNaAnA0eoXX2ZmNiT0,19684 +django/conf/locale/nb/LC_MESSAGES/django.mo,sha256=XDCGV0qH1f2V-w_Hp2uqkl5w08--EGoqHKAnrBdViGo,26572 +django/conf/locale/nb/LC_MESSAGES/django.po,sha256=DGM90Bk4YsbVffQ18ECsWV4QsZcjw3sCblA_lbt2PNM,28941 +django/conf/locale/nb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nb/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/nb/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/nb/formats.py,sha256=y1QLE-SG00eHwje0lkAToHtz4t621Rz_HQRyBWCgK8c,1552 +django/conf/locale/ne/LC_MESSAGES/django.mo,sha256=BcK8z38SNWDXXWVWUmOyHEzwk2xHEeaW2t7JwrxehKM,27248 +django/conf/locale/ne/LC_MESSAGES/django.po,sha256=_Kj_i2zMb7JLU7EN7Z7JcUn89YgonJf6agSFCjXa49w,33369 +django/conf/locale/nl/LC_MESSAGES/django.mo,sha256=yIiuxrpS6L0qVxm11jnXphVICeyer7Dp-LwSmfb1omQ,27117 +django/conf/locale/nl/LC_MESSAGES/django.po,sha256=S-T7QOXjAJoJz2Vsb1uWQi0h69y9bWdeG9LnYrvmkQ4,29653 +django/conf/locale/nl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nl/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/nl/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/nl/formats.py,sha256=cKaaOvRdeauORjvuZ1xyVcVsl36J3Zk4FSE-lnx2Xwg,3927 +django/conf/locale/nn/LC_MESSAGES/django.mo,sha256=Ccj8kjvjTefC8H6TuDCOdSrTmtkYXkmRR2V42HBMYo4,26850 +django/conf/locale/nn/LC_MESSAGES/django.po,sha256=oaVJTl0NgZ92XJv9DHdsXVaKAc81ky_R3CA6HljTH-8,29100 +django/conf/locale/nn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nn/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/nn/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/nn/formats.py,sha256=y1QLE-SG00eHwje0lkAToHtz4t621Rz_HQRyBWCgK8c,1552 +django/conf/locale/os/LC_MESSAGES/django.mo,sha256=LBpf_dyfBnvGOvthpn5-oJuFiSNHrgiVHBzJBR-FxOw,17994 +django/conf/locale/os/LC_MESSAGES/django.po,sha256=WYlAnNYwGFnH76Elnnth6YP2TWA-fEtvV5UinnNj7AA,26278 +django/conf/locale/pa/LC_MESSAGES/django.mo,sha256=H1hCnQzcq0EiSEaayT6t9H-WgONO5V4Cf7l25H2930M,11253 +django/conf/locale/pa/LC_MESSAGES/django.po,sha256=26ifUdCX9fOiXfWvgMkOXlsvS6h6nNskZcIBoASJec4,23013 +django/conf/locale/pl/LC_MESSAGES/django.mo,sha256=XlCZKVB_fXSf3QdFlck0r-Cq5knbJw_zwc5AqEMrAH8,29785 +django/conf/locale/pl/LC_MESSAGES/django.po,sha256=kgqUTMnNLZCRCWwV6_WzTS6DjYMABNNVTLaKJoJ4kKM,33489 +django/conf/locale/pl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pl/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/pl/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/pl/formats.py,sha256=KREhPtHuzKS_ZsAqXs5LqYPGhn6O-jLd4WZQ-39BA8I,1032 +django/conf/locale/pt/LC_MESSAGES/django.mo,sha256=nlj_L7Z2FkXs1w6wCGGseuZ_U-IecnlfYRtG5jPkGrs,20657 +django/conf/locale/pt/LC_MESSAGES/django.po,sha256=ETTedbjU2J4FLi2QDHNN8C7zlAsvLWNUlYzkEV1WB6s,26224 +django/conf/locale/pt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pt/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/pt/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/pt/formats.py,sha256=RQ9MuIwUPhiY2u-1hFU2abs9Wqv1qZE2AUAfYVK-NU8,1520 +django/conf/locale/pt_BR/LC_MESSAGES/django.mo,sha256=XD1D86JAuti97A_tDFNL5JiWBd-csKFSGSduaBFz2ZM,26578 +django/conf/locale/pt_BR/LC_MESSAGES/django.po,sha256=3mtKECf2gbuhMimBjEjq-b-NzOX52HfGHiHNOazEi3w,30713 +django/conf/locale/pt_BR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pt_BR/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/pt_BR/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/pt_BR/formats.py,sha256=J1IKV7cS2YMJ5_qlT9h1dDYUX9tLFvqA95l_GpZTLUY,1285 +django/conf/locale/ro/LC_MESSAGES/django.mo,sha256=IMUybfJat0koxf_jSv6urQQuiHlldUhjrqo3FR303WA,22141 +django/conf/locale/ro/LC_MESSAGES/django.po,sha256=mdMWVR6kXJwUSxul2bpu3IoWom6kWDiES6Iw5ziynj0,27499 +django/conf/locale/ro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ro/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ro/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ro/formats.py,sha256=e_dp0zyfFfoydrGyn6Kk3DnQIj7RTRuvRc6rQ6tSxzA,928 +django/conf/locale/ru/LC_MESSAGES/django.mo,sha256=rTITYVXoFAoqCIKj21rjgnWXCEMwE41QeyX26PqC05M,36220 +django/conf/locale/ru/LC_MESSAGES/django.po,sha256=A98tjI-zPro3bx0zopl5maKKDedF3f2AE5yU4AAZ-mE,40123 +django/conf/locale/ru/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ru/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ru/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ru/formats.py,sha256=lTfYbecdSmHCxebog_2bd0N32iD3nEq_f5buh9il-nI,1098 +django/conf/locale/sk/LC_MESSAGES/django.mo,sha256=LLHZDII9g__AFTHCgyLy05I7DQEjZjk20LO-CkrdhS0,27800 +django/conf/locale/sk/LC_MESSAGES/django.po,sha256=iH6cKWjUfKMqVd4Q6HPEnZwOB-39SpllevZIythjk9M,31062 +django/conf/locale/sk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sk/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sk/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sk/formats.py,sha256=bWj0FNpYfOAgi9J-L4VuiN6C_jsgPsKNdLYd9gTnFs0,1051 +django/conf/locale/sl/LC_MESSAGES/django.mo,sha256=uaPbjsAAam_SrzenHjeHgTC3Pxn6BEecXgnDY9HOzwg,21921 +django/conf/locale/sl/LC_MESSAGES/django.po,sha256=MZ8Lz3dN5JSxw7l8bFRN0ozeW4Sue0jnRURm2zpOcuI,27860 +django/conf/locale/sl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sl/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sl/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sl/formats.py,sha256=Nq4IfEUnlGebMZeRvB2l9aps-5G5b4y1kQ_3MiJTfe8,1642 +django/conf/locale/sq/LC_MESSAGES/django.mo,sha256=E31OUoJGXPv0kW3MdZk6TQl8XF2tTRHw8Em4fk2k6MY,27802 +django/conf/locale/sq/LC_MESSAGES/django.po,sha256=AI1j6XLOzeWsk_N_KaOHggR9CE8hQeb4LMk44YGbcjE,30191 +django/conf/locale/sq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sq/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sq/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sq/formats.py,sha256=SA_jCSNwI8-p79skHoLxrPLZnkyq1PVadwT6gMt7n_M,688 +django/conf/locale/sr/LC_MESSAGES/django.mo,sha256=XVnYuUQmoQy6BZnPmHnSrWVz75J4sTYKxGn4NqdJU4c,34059 +django/conf/locale/sr/LC_MESSAGES/django.po,sha256=jvlDoqR-OhFigYmrjPWm2cXMVqeYvT9qpbT-yAlp7Lg,36513 +django/conf/locale/sr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sr/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sr/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sr/formats.py,sha256=F3_gYopOXINcllaPFzTqZrZ2oZ1ye3xzR0NQtlqXYp0,1729 +django/conf/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=T4ZIcgyBTOXlmY0B94ER98YQsc8CoowLVnLeNYPx6wc,22633 +django/conf/locale/sr_Latn/LC_MESSAGES/django.po,sha256=u5bcaCdCEbNGj7OEe2SB88942VWi6BbvAWpOUbTpNSw,27658 +django/conf/locale/sr_Latn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sr_Latn/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sr_Latn/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sr_Latn/formats.py,sha256=BDZm-ajQgCIxQ8mCcckEH32IoCN9233TvAOXkg4mc38,1728 +django/conf/locale/sv/LC_MESSAGES/django.mo,sha256=E-c3gYgaN7sadn0-nRWJw3EHT-mBiKIMjNSdC-Ia-mk,24820 +django/conf/locale/sv/LC_MESSAGES/django.po,sha256=cAi7HXk2pB6niiTNTlXkMkEwrLcK_dPQ2U9ipCMSQOg,28635 +django/conf/locale/sv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sv/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/sv/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/sv/formats.py,sha256=9o8ZtaSq1UOa5y6Du3rQsLAAl5ZOEdVY1OVVMbj02RA,1311 +django/conf/locale/sw/LC_MESSAGES/django.mo,sha256=aUmIVLANgSCTK5Lq8QZPEKWjZWnsnBvm_-ZUcih3J6g,13534 +django/conf/locale/sw/LC_MESSAGES/django.po,sha256=GOE6greXZoLhpccsfPZjE6lR3G4vpK230EnIOdjsgPk,22698 +django/conf/locale/ta/LC_MESSAGES/django.mo,sha256=WeM8tElbcmL11P_D60y5oHKtDxUNWZM9UNgXe1CsRQ4,7094 +django/conf/locale/ta/LC_MESSAGES/django.po,sha256=kgHTFqysEMj1hqktLr-bnL1NRM715zTpiwhelqC232s,22329 +django/conf/locale/ta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ta/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/ta/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/ta/formats.py,sha256=vmjfiM54oJJxqcdgZJUNNQN7oMS-XLVBYJ4lWBb5ctY,682 +django/conf/locale/te/LC_MESSAGES/django.mo,sha256=Sk45kPC4capgRdW5ImOKYEVxiBjHXsosNyhVIDtHLBc,13259 +django/conf/locale/te/LC_MESSAGES/django.po,sha256=IQxpGTpsKUtBGN1P-KdGwvE7ojNCqKqPXEvYD3qT5A4,25378 +django/conf/locale/te/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/te/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/te/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/te/formats.py,sha256=-HOoZgmnME4--4CuXzcnhXqNma0Wh7Ninof3RCCGZkU,680 +django/conf/locale/tg/LC_MESSAGES/django.mo,sha256=ePzS2pD84CTkHBaiaMyXBxiizxfFBjHdsGH7hCt5p_4,28497 +django/conf/locale/tg/LC_MESSAGES/django.po,sha256=oSKu3YT3griCrDLPqptZmHcuviI99wvlfX6I6nLJnDk,33351 +django/conf/locale/tg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/tg/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/tg/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/tg/formats.py,sha256=TG5TGfLNy4JSjl-QAWk46gIEb0ijdBpqPrDtwfJzshw,1160 +django/conf/locale/th/LC_MESSAGES/django.mo,sha256=SJeeJWbdF-Lae5BendxlyMKqx5zdDmh3GCQa8ER5FyY,18629 +django/conf/locale/th/LC_MESSAGES/django.po,sha256=K4ITjzHLq6DyTxgMAfu3CoGxrTd3aG2J6-ZxQj2KG1U,27507 +django/conf/locale/th/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/th/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/th/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/th/formats.py,sha256=SmCUD-zVgI1QE2HwqkFtAO87rJ-FoCjw1s-2-cfl1h0,1072 +django/conf/locale/tk/LC_MESSAGES/django.mo,sha256=B80ko55qX70bXz0b7f5azf1_6Vqyp0ELIiB1T-RJMW8,25628 +django/conf/locale/tk/LC_MESSAGES/django.po,sha256=FaDJ7UkoZzRvLhy25uo2l2IQkBGFVQuW-izXHzKdNCM,28772 +django/conf/locale/tk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/tk/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/tk/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/tk/formats.py,sha256=TG5TGfLNy4JSjl-QAWk46gIEb0ijdBpqPrDtwfJzshw,1160 +django/conf/locale/tr/LC_MESSAGES/django.mo,sha256=j9d-WIh0uzs315J9d3aTd-77YQPJGlA625GGraeozb8,27998 +django/conf/locale/tr/LC_MESSAGES/django.po,sha256=FxMqznG_70UXSunb8V5g-7DI3xchaV8v_HEeic5fvpg,30525 +django/conf/locale/tr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/tr/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/tr/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/tr/formats.py,sha256=yJg-7hmevD1gvj9iBRMCiYGgd5DxKZcL7T_C3K3ztME,1019 +django/conf/locale/tt/LC_MESSAGES/django.mo,sha256=r554DvdPjD_S8hBRjW8ehccEjEk8h7czQsp46FZZ_Do,14500 +django/conf/locale/tt/LC_MESSAGES/django.po,sha256=W8QgEAH7yXNmjWoF-UeqyVAu5jEMHZ5MXE60e5sawJc,24793 +django/conf/locale/udm/LC_MESSAGES/django.mo,sha256=cIf0i3TjY-yORRAcSev3mIsdGYT49jioTHZtTLYAEyc,12822 +django/conf/locale/udm/LC_MESSAGES/django.po,sha256=n9Az_8M8O5y16yE3iWmK20R9F9VoKBh3jR3iKwMgFlY,23113 +django/conf/locale/uk/LC_MESSAGES/django.mo,sha256=bWwHvsJbgauAc-IDyL1sUCzpBjiukxy9MCu5wVQ0v_w,26995 +django/conf/locale/uk/LC_MESSAGES/django.po,sha256=H4z9AsoHiNLdNXUU2KZOiyF2DufQlNb6hmyvyDN8514,33904 +django/conf/locale/uk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/uk/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/uk/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/uk/formats.py,sha256=ZmeYmL0eooFwQgmE054V36RQ469ZTfAv6k8SUJrDYQ8,1241 +django/conf/locale/ur/LC_MESSAGES/django.mo,sha256=M6R2DYFRBvcVRAsgVxVOLvH3e8v14b2mJs650UlUb2I,12291 +django/conf/locale/ur/LC_MESSAGES/django.po,sha256=Lr0DXaPqWtCFAxn10BQ0vlvZIMNRvCg_QJQxAC01eWk,23479 +django/conf/locale/uz/LC_MESSAGES/django.mo,sha256=c8eHLqubZqScsU8LjGK-j2uAGeWzHCSmCy-tYu9x_FA,27466 +django/conf/locale/uz/LC_MESSAGES/django.po,sha256=TxmmhZCC1zrAgo0xM0JQKywju0XBd1BujMKZ9HtOLKY,29376 +django/conf/locale/uz/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/uz/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/uz/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/uz/formats.py,sha256=cdmqOUBVnPSyi2k9AkOGl27s89PymFePG2gtnYzYbiw,1176 +django/conf/locale/vi/LC_MESSAGES/django.mo,sha256=TMsBzDnf9kZndozqVUnEKtKxfH2N1ajLdrm8hJ4HkYI,17396 +django/conf/locale/vi/LC_MESSAGES/django.po,sha256=tL2rvgunvaN_yqpPSBYAKImFDaFaeqbnpEw_egI11Lo,25342 +django/conf/locale/vi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/vi/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/vi/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/vi/formats.py,sha256=_xIugkqLnjN9dzIhefMpsJXaTPldr4blKSGS-c3swg0,762 +django/conf/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=vDGGCa14szv2Ru9NV_HxxBLktu4Kj0XWEAN7ZTCME4M,26198 +django/conf/locale/zh_Hans/LC_MESSAGES/django.po,sha256=_krsSJiCWnMN6Emt_T0AoK3ZiK-GYOH1Jd2eDhiCMCw,29150 +django/conf/locale/zh_Hans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/zh_Hans/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/zh_Hans/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/zh_Hans/formats.py,sha256=iMb9Taj6xQQA3l_NWCC7wUlQuh4YfNUgs2mHcQ6XUEo,1598 +django/conf/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=1U3cID-BpV09p0sgYryzJCCApQYVlCtb4fJ5IPB8wtc,19560 +django/conf/locale/zh_Hant/LC_MESSAGES/django.po,sha256=buHXYy_UKFoGW8xz6PNrSwbMx-p8gwmPRgdWGBYwT2U,24939 +django/conf/locale/zh_Hant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/zh_Hant/__pycache__/__init__.cpython-310.pyc,, +django/conf/locale/zh_Hant/__pycache__/formats.cpython-310.pyc,, +django/conf/locale/zh_Hant/formats.py,sha256=iMb9Taj6xQQA3l_NWCC7wUlQuh4YfNUgs2mHcQ6XUEo,1598 +django/conf/project_template/manage.py-tpl,sha256=JDuGG02670bELmn3XLUSxHFZ8VFhqZTT_oN9VbT5Acc,674 +django/conf/project_template/project_name/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/project_template/project_name/asgi.py-tpl,sha256=q_6Jo5tLy6ba-S7pLs3YTK7byxSBmU0oYylYJlNvwHI,428 +django/conf/project_template/project_name/settings.py-tpl,sha256=JskIPIEWPSX2p7_rlsPr60JDjmFC0bVEeMChmq--0OY,3342 +django/conf/project_template/project_name/urls.py-tpl,sha256=vrokVPIRgYajr3Osw2_D1gCndrJ-waGU3tkpnzhWync,775 +django/conf/project_template/project_name/wsgi.py-tpl,sha256=OCfjjCsdEeXPkJgFIrMml_FURt7msovNUPnjzb401fs,428 +django/conf/urls/__init__.py,sha256=qmpaRi5Gn2uaY9h3g9RNu0z3LDEpEeNL9JlfSLed9s0,292 +django/conf/urls/__pycache__/__init__.cpython-310.pyc,, +django/conf/urls/__pycache__/i18n.cpython-310.pyc,, +django/conf/urls/__pycache__/static.cpython-310.pyc,, +django/conf/urls/i18n.py,sha256=Xz83EPb1MwylIF1z3NimtAD7TlJwd_0ZpZoxj2HEO1E,1184 +django/conf/urls/static.py,sha256=gZOYaiIf3SxQ75N69GyVm9C0OmQv1r1IDrUJ0E7zMe0,908 +django/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admin/__init__.py,sha256=s4yCvpvHN4PbCIiNNZKSCaUhN_0NdkrLq-qihnJH4L4,1169 +django/contrib/admin/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admin/__pycache__/actions.cpython-310.pyc,, +django/contrib/admin/__pycache__/apps.cpython-310.pyc,, +django/contrib/admin/__pycache__/checks.cpython-310.pyc,, +django/contrib/admin/__pycache__/decorators.cpython-310.pyc,, +django/contrib/admin/__pycache__/exceptions.cpython-310.pyc,, +django/contrib/admin/__pycache__/filters.cpython-310.pyc,, +django/contrib/admin/__pycache__/forms.cpython-310.pyc,, +django/contrib/admin/__pycache__/helpers.cpython-310.pyc,, +django/contrib/admin/__pycache__/models.cpython-310.pyc,, +django/contrib/admin/__pycache__/options.cpython-310.pyc,, +django/contrib/admin/__pycache__/sites.cpython-310.pyc,, +django/contrib/admin/__pycache__/tests.cpython-310.pyc,, +django/contrib/admin/__pycache__/utils.cpython-310.pyc,, +django/contrib/admin/__pycache__/widgets.cpython-310.pyc,, +django/contrib/admin/actions.py,sha256=efImpehGXIm5Oy5NnZsIn4JYIbYHWjn0ti2QvkkyaWY,3231 +django/contrib/admin/apps.py,sha256=BOiulA4tsb3wuAUtLGTGjrbywpSXX0dLo2pUCGV8URw,840 +django/contrib/admin/checks.py,sha256=3rKY-7UTJ8-1OXnYBXKGDDhYUb3BNWVMjqAidTM5XZ0,49761 +django/contrib/admin/decorators.py,sha256=dki7GLFKOPT-mB5rxsYX12rox18BywroxmrzjG_VJXM,3481 +django/contrib/admin/exceptions.py,sha256=wpzdKnp6V_aTYui_4tQZ8hFJf7W5xYkEMym0Keg1k0k,333 +django/contrib/admin/filters.py,sha256=SPefxuFISo829mqrvfO_RGrsgwHthxXHeeVdUcS9dk4,20802 +django/contrib/admin/forms.py,sha256=0UCJstmmBfp_c_0AqlALJQYy9bxXo9fqoQQICQONGEo,1023 +django/contrib/admin/helpers.py,sha256=nFwn75Yof_P_SbVOcJqBd2W-F7kUGHfiRs2ZIYZ1rBw,18065 +django/contrib/admin/locale/af/LC_MESSAGES/django.mo,sha256=3VNfQp5JaJy4XRqxM7Uu9uKHDihJCvKXYhdWPXOofc8,16216 +django/contrib/admin/locale/af/LC_MESSAGES/django.po,sha256=R2ix5AnK5X35wnhjT38K85JgwewQkmwrYwyVx4YqikQ,17667 +django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo,sha256=dmctO7tPkPwdbpp-tVmZrR0QLZekrJ1aE3rnm6vvUQM,4477 +django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po,sha256=1wwspqp0rsSupVes7zjYLyNT_wY4lFefqhpXH5wBdJM,4955 +django/contrib/admin/locale/am/LC_MESSAGES/django.mo,sha256=UOwMxYH1r5AEBpu-P9zxHazk3kwI4CtsPosGIYtl6Hs,8309 +django/contrib/admin/locale/am/LC_MESSAGES/django.po,sha256=NmsIZoBEQwyBIqbKjkwCJ2_iMHnMKB87atoT0iuNXrw,14651 +django/contrib/admin/locale/ar/LC_MESSAGES/django.mo,sha256=tzGQ8jSJc406IBBwtAErlXVqaA10glxB8krZtWp1Rq4,19890 +django/contrib/admin/locale/ar/LC_MESSAGES/django.po,sha256=RBJbiYNDy57K592OKghugZFYiHpTvxUoEQ_B26-5i8A,21339 +django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo,sha256=xoI2xNKgspuuJe1UCUB9H6Kyp3AGhj5aeo_WEg5e23A,6545 +django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po,sha256=jwehFDFk3lMIEH43AEU_JyHOm84Seo-OLd5FmGBbaxo,7281 +django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=IJlPu_ROkcvVEyTej2un1WMuCueOYBMYNxAmTCK7NbU,19657 +django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.po,sha256=qEHImGRyP-cOeA66387z9glbIhUEeliq-dI-iLhuweM,21027 +django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.mo,sha256=bNJysHeUsNaSg2BgFh9r4FEnRAee9w6DNN4OvfQfYnc,5721 +django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.po,sha256=dGIamisxnWLYkxJOsJQLqXTy9zC3B6Tn3gtPKlRiMBQ,6302 +django/contrib/admin/locale/ast/LC_MESSAGES/django.mo,sha256=3uffu2zPbQ1rExUsG_ambggq854Vy8HbullkCYdazA4,2476 +django/contrib/admin/locale/ast/LC_MESSAGES/django.po,sha256=wCWFh9viYUhTGOX0mW3fpN2z0kdE6b7IaA-A5zzb3Yo,11676 +django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo,sha256=kiG-lzQidkXER5s_6POO1G91mcAv9VAkAXI25jdYBLE,2137 +django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po,sha256=s4s6aHocTlzGcFi0p7cFGTi3K8AgoPvFCv7-Hji6At0,4085 +django/contrib/admin/locale/az/LC_MESSAGES/django.mo,sha256=pOABf7ef6c4Apn3e0YE0bm-GJzXfKUsBYL7iUK5NdQs,14807 +django/contrib/admin/locale/az/LC_MESSAGES/django.po,sha256=ZQVARobZ9XzSbP9HLDV8DhmQpe08ExhoTj5RBpFu__g,17299 +django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo,sha256=3P3iKDFi9G1iMmxTVHWol1FgczmMl4gYHRoBT5W3fYw,4598 +django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po,sha256=BpFkIKu93AVAYKPnCKSPswCIAm8L2909oh6NJSZJLu8,5125 +django/contrib/admin/locale/be/LC_MESSAGES/django.mo,sha256=npxIePwS6kY6UScaQl13xx1MPecYJcFCATuGNZB7a5c,21347 +django/contrib/admin/locale/be/LC_MESSAGES/django.po,sha256=4gG-r4SS9yEc9riM3e0fh46FSQHhB6E4vCw9jx1AsNc,22579 +django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo,sha256=ujRhIpDAf0W8YQpXiWgVOsbjpmS6QqI9I49WkKfqDpc,6558 +django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po,sha256=Gg9mu6NJp4K0Fqs7TSPbGkTyn5YkXICHTAlRqL57rMw,7190 +django/contrib/admin/locale/bg/LC_MESSAGES/django.mo,sha256=YgKt1Ai781xv0Meb0j9cB-S5PMKPopZM_PNH1T4gS-Y,21397 +django/contrib/admin/locale/bg/LC_MESSAGES/django.po,sha256=HWrKUkzmIFScPPo8Mzg-4wNh1i_n1SbIN5jzJKl1W_g,22834 +django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo,sha256=B_Xg-IuoDeYFhqjDoaeI4i6eZueznriHwaGcC-JpKO8,6230 +django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po,sha256=obkM96U9Tu99DlLojktQ2N7PZDbwmONQn0AYogudyVE,6832 +django/contrib/admin/locale/bn/LC_MESSAGES/django.mo,sha256=fKmzDwzLp0Qlv4bvWscf0evanPRAXwR04B6IeJ7wGSw,15247 +django/contrib/admin/locale/bn/LC_MESSAGES/django.po,sha256=-go1WtUozfqbnKlUQr-jNnvEXf98eIZjq-C8KjRJ6NA,19812 +django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo,sha256=t_OiMyPMsR2IdH65qfD9qvQfpWbwFueNuY72XSed2Io,2313 +django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po,sha256=iFwEJi4k3ULklCq9eQNUhKVblivQPJIoC_6lbyEkotY,4576 +django/contrib/admin/locale/br/LC_MESSAGES/django.mo,sha256=yCuMwrrEB_H44UsnKwY0E87sLpect_AMo0GdBjMZRPs,6489 +django/contrib/admin/locale/br/LC_MESSAGES/django.po,sha256=WMU_sN0ENWgyEbKOm8uVQfTQh9sabvKihtSdMt4XQBM,13717 +django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo,sha256=n7Yx2k9sAVSNtdY-2Ao6VFsnsx4aiExZ3TF_DnnrKU0,1658 +django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po,sha256=gjg-VapbI9n_827CqNYhbtIQ8W9UcMmMObCsxCzReUU,4108 +django/contrib/admin/locale/bs/LC_MESSAGES/django.mo,sha256=44D550fxiO59Pczu5HZ6gvWEClsfmMuaxQWbA4lCW2M,8845 +django/contrib/admin/locale/bs/LC_MESSAGES/django.po,sha256=FrieR1JB4ssdWwYitJVpZO-odzPBKrW4ZsGK9LA595I,14317 +django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo,sha256=SupUK-RLDcqJkpLEsOVjgZOWBRKQMALZLRXGEnA623M,1183 +django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.po,sha256=TOtcfw-Spn5Y8Yugv2OlPoaZ5DRwJjRIl-YKiyU092U,3831 +django/contrib/admin/locale/ca/LC_MESSAGES/django.mo,sha256=x8ttMC4FzuTMZn_PYzn0QwOCYqnJldVT2RVti_QhC8s,17411 +django/contrib/admin/locale/ca/LC_MESSAGES/django.po,sha256=hsVktdeEaGacE0lXVbLe94yKmumIH8muBvnkx01Xxs4,18963 +django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo,sha256=waHQl2HV9fXDaQtYlyIEIYRVp4c-a9jNAwaXkmnKdUg,5150 +django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po,sha256=ol9nB369AYYt224-DbJJ_pQ9Y1CDsux2vOD8n8YsZQg,5806 +django/contrib/admin/locale/cs/LC_MESSAGES/django.mo,sha256=TOrsVokH8-5xCQ4Fr8rX7hy1slS1GYi7anlWr1QUPG8,17659 +django/contrib/admin/locale/cs/LC_MESSAGES/django.po,sha256=A9utoXRi5J3ZcHISjZp3ucyuPXu6CHbTQtxTRaIvN-4,19121 +django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo,sha256=7JR9YG_KB_aA8HQpMOON7CdTGYx-q3fjXvdvXBPv354,5679 +django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po,sha256=_isJkLp5vzX3WbEnnve63QjtVRKUCZDOiz8Ng0_reho,6415 +django/contrib/admin/locale/cy/LC_MESSAGES/django.mo,sha256=7ifUyqraN1n0hbyTVb_UjRIG1jdn1HcwehugHBiQvHs,12521 +django/contrib/admin/locale/cy/LC_MESSAGES/django.po,sha256=bS_gUoKklZwd3Vs0YlRTt24-k5ure5ObTu-b5nB5qCA,15918 +django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo,sha256=fOCA1fXEmJw_QaXEISLkuBhaMnEmP1ssP9lhqdCCC3c,3801 +django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po,sha256=OVcS-3tlMJS_T58qnZbWLGczHwFyAjbuWr35YwuxAVM,5082 +django/contrib/admin/locale/da/LC_MESSAGES/django.mo,sha256=jTtKti7NsWwvMyDA_sD8EWFjWopp7pUaSc4B8Imk2GE,16680 +django/contrib/admin/locale/da/LC_MESSAGES/django.po,sha256=kBfGE2OfUXd-Q8UALsQDErpiwxeaQX0lP4d9FIvyBTM,18093 +django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo,sha256=TFo-KibDumqVFkHFlIDP87O3pLoXyliuf-K8maH3rl0,5098 +django/contrib/admin/locale/da/LC_MESSAGES/djangojs.po,sha256=80URMUS7fIcBM3Qx97Wa9Gg_QV7Zcp4J2R-4FeEHgo8,5873 +django/contrib/admin/locale/de/LC_MESSAGES/django.mo,sha256=AjWysv_nOzNvjYTqcLsXCnNZt_5_2gn6qtCWKfvwAR8,17714 +django/contrib/admin/locale/de/LC_MESSAGES/django.po,sha256=i9uvk6nVIlOv2pO1Q-_BS6gjH5-tHxo9Q52gRxqCHOk,19193 +django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo,sha256=-1xXMjwq7J5p1YsOmwqkPEAaIGRzzdpikFVZTW4eYQQ,5203 +django/contrib/admin/locale/de/LC_MESSAGES/djangojs.po,sha256=6XKG1F-vB0ELJn4zbtgCsXHyGm9Sh3BLVXN_wGpMYBg,5887 +django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo,sha256=xxvchve6F4k4rgc5N8hlOotmv3-2y9kx-FQn-7506vY,17570 +django/contrib/admin/locale/dsb/LC_MESSAGES/django.po,sha256=74YowJk3U5JApK8luxJ32HFoj6RTuVsoi4yg6kf2i_U,18784 +django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo,sha256=TNj2M3uToLfTRR2fI47MZoZJdCbYs-tifz8vSz6M4Do,5609 +django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po,sha256=agDAUc7ktsqx37XhaIXkPB3TIFV5mqdFW23WGdS1SBU,6206 +django/contrib/admin/locale/el/LC_MESSAGES/django.mo,sha256=54kG_94nJigDgJpZM8Cy58G_AGLdS5csJFEjTTvJBfM,22968 +django/contrib/admin/locale/el/LC_MESSAGES/django.po,sha256=f2gUQtedb0sZCBxAoy3hP2rGXT9ysP5UTOlCBvu2NvI,24555 +django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo,sha256=cix1Bkj2hYO_ofRvtPDhJ9rBnTR6-cnKCFKpZrsxJ34,6509 +django/contrib/admin/locale/el/LC_MESSAGES/djangojs.po,sha256=R05tMMuQEjVQpioy_ayQgFBlLM4WdwXthkMguW6ga24,7339 +django/contrib/admin/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admin/locale/en/LC_MESSAGES/django.po,sha256=q4HqtLXKeG_A5iu73qNDNdiI-XPcFEOAZ97pvyyAcME,23737 +django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po,sha256=ziLBiK7Fw6IGf-ytCHNMk4NmKifDMv8zwNH9a9KPItI,7480 +django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo,sha256=QEvxPxDqNUmq8NxN-8c_F6KMEcWWum3YzERlc3_S_DM,16191 +django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po,sha256=BoVuGaPoGdQcF3zdgGRxrNKSq2XLHTvKfINCyU8t86Y,17548 +django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo,sha256=s0qPS8TjODtPo4miSznQfS6M8CQK9URDeMKeQsp7DK4,5001 +django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po,sha256=YecPU6VmUDDNNIzZVl2Wgd6lNRp3msJaW8FhdHMtEyc,5553 +django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo,sha256=pFkTMRDDj76WA91wtGPjUB7Pq2PN7IJEC54Tewobrlc,11159 +django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po,sha256=REUJMGLGRyDMkqh4kJdYXO9R0Y6CULFVumJ_P3a0nv0,15313 +django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo,sha256=hW325c2HlYIIdvNE308c935_IaDu7_qeP-NlwPnklhQ,3147 +django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po,sha256=Ol5j1-BLbtSIDgbcC0o7tg_uHImcjJQmkA4-kSmZY9o,4581 +django/contrib/admin/locale/eo/LC_MESSAGES/django.mo,sha256=rrRYsz82QIaUEuHREYIw7mPLBhUhJ4EcX8PdND7btyk,13656 +django/contrib/admin/locale/eo/LC_MESSAGES/django.po,sha256=2AacIHf1R3030J0Deo-2LR8VZhmPmG4nii6mi8q9kbY,16778 +django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo,sha256=I1Ue345qSHPmJpX4yiYgomQ8vMgshRt1S1D_ZVJWf7g,4452 +django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po,sha256=BdSRWCYCDxLxtbcPSfRdAMGoTRWOWaxRGpdCIm-3HA0,5040 +django/contrib/admin/locale/es/LC_MESSAGES/django.mo,sha256=lHBMJveopDZkJ2pUiNMNjh3WJN6tBB6VAp1ycUodsTI,17696 +django/contrib/admin/locale/es/LC_MESSAGES/django.po,sha256=9bOk-Ye-JWUdyqZzSkUE11NQgX7xnCOgSd-Uy4YspeQ,19639 +django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo,sha256=FWXwW5YUTD6HHoYV2Snc2WeNmllz9vJVy5rjSCjQlA4,5203 +django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po,sha256=v1xp_eeyFsrW9rvXk5V6pOVyzHP_ZX06_fCbQppdE-4,6035 +django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo,sha256=9OUrQduv7L9y1JkYc24fJkI1VXvvnTfZt-p44PC_yiU,17847 +django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po,sha256=DjWG0FHYhL5Fa6-grLAwUUTLXtmbpnMjSL2pKS_VrJY,19082 +django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo,sha256=odNv6CkDux2LhzpJX3Dnh66cHQOFDSlbal5eQGZIyjw,5409 +django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po,sha256=t6bJnFzl5Pid7PqEBNDm4QmlAqLaU4zyeOXXWocazyI,5990 +django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo,sha256=0k8kSiwIawYCa-Lao0uetNPLUzd4m_me3tCAVBvgcSw,15156 +django/contrib/admin/locale/es_CO/LC_MESSAGES/django.po,sha256=4T_syIsVY-nyvn5gEAtfN-ejPrJSUpNT2dmzufxaBsE,17782 +django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo,sha256=PLS10KgX10kxyy7MUkiyLjqhMzRgkAFGPmzugx9AGfs,3895 +django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.po,sha256=Y4bkC8vkJE6kqLbN8t56dR5670B06sB2fbtVzmQygK8,5176 +django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo,sha256=oZQndBnTu5o0IwQIZCKjTtS5MGhRgsDipzQuIniRgSE,11628 +django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po,sha256=oFhdB2JtS8zCPK5Zf9KFbm-B1M1u83nO5p0rfaVkL78,16138 +django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo,sha256=2w3CMJFBugP8xMOmXsDU82xUm8cWGRUGZQX5XjiTCpM,3380 +django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po,sha256=OP9cBsdCf3zZAXiKBMJPvY1AHwC_WE1k2vKlzVCtUec,4761 +django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo,sha256=himCORjsM-U3QMYoURSRbVv09i0P7-cfVh26aQgGnKg,16837 +django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po,sha256=mlmaSYIHpa-Vp3f3NJfdt2RXB88CVZRoPEMfl-tccr0,18144 +django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo,sha256=Zy-Hj_Mr2FiMiGGrZyssN7GZJrbxRj3_yKQFZKR36Ro,4635 +django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.po,sha256=RI8CIdewjL3bAivniMOl7lA9tD7caP4zEo2WK71cX7c,5151 +django/contrib/admin/locale/et/LC_MESSAGES/django.mo,sha256=glFzba5o4yqusgsbxgRN7sJhTRqAtbxYhiKi-opDDv0,16555 +django/contrib/admin/locale/et/LC_MESSAGES/django.po,sha256=0bku_wIqmVY7J2hukwv6aFpJoNaJKmXqHwcURIp_rTg,18001 +django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo,sha256=kxz2ZDbL-1BxlF6iYTIk2tl5yefzh1NCHRdoJI4xlJ8,4965 +django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po,sha256=fEGMNYwWRUXoJcb8xi95SYOcdm4FYxwAzearlMk76yc,5694 +django/contrib/admin/locale/eu/LC_MESSAGES/django.mo,sha256=vA5uxffIq16C1hBztWR-5XXmqnHtK57iH5FBgk7DoU0,13665 +django/contrib/admin/locale/eu/LC_MESSAGES/django.po,sha256=JCEgbT6Y8okN675f3DEOAJwY9xnyEBAlUPOAjV-QWkI,16725 +django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo,sha256=bZHiuTFj8MNrO3AntBAY5iUhmCa6LSluGLYw504RKWg,4522 +django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po,sha256=eMpM70UTWIiCDigCgYVOZ9JKQ2IidYZxYcUWunvG8js,5051 +django/contrib/admin/locale/fa/LC_MESSAGES/django.mo,sha256=Og9enbwYKrRvYCgnhAxxCLPiR5a3qqi-6k7YMr9pH7E,20345 +django/contrib/admin/locale/fa/LC_MESSAGES/django.po,sha256=729GcmVyQ9tksaff4VJbvaeKdaoly5gQhad06Tn42YY,22018 +django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo,sha256=MAje4ub3vWYhiKrVR_LvxAIqkvOlFpVcXQEBz3ezlPs,6050 +django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.po,sha256=1nzEmRuswDmyCCMShGH2CYdjMY7tUuedfN4kDCEnTCM,6859 +django/contrib/admin/locale/fi/LC_MESSAGES/django.mo,sha256=FgQSwJAeyDUdx2MZPFD9RD-6B961SSaUdXGGviF0F9k,16810 +django/contrib/admin/locale/fi/LC_MESSAGES/django.po,sha256=kUjN-OY9KRoLuLTplidIYfUSbZPUbmLs2MGsQdcS2c0,18172 +django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo,sha256=htqAFHouiZKPRSNwEH7fe278pxKskccsmHmybLb8qhY,5200 +django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.po,sha256=OJWC0eqFhjmokWRWWV3E7nL-FlFkuUjDt4ts5_hXOIs,5856 +django/contrib/admin/locale/fr/LC_MESSAGES/django.mo,sha256=fTZxxfKSDXuQc_XslYUS32yBsQYZxemrIcWJN1CJlsg,18497 +django/contrib/admin/locale/fr/LC_MESSAGES/django.po,sha256=I5-sNdewcrfmvyUG7ZH_u9atE9qM7AmEEX1nvcZnqYI,19791 +django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo,sha256=gxMws51GbzrgGA2b0oMFvujuO97g-GdLJDgIb0biiIk,5324 +django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.po,sha256=j78nbvunsFPNzE3ebSLaQ21nQxI_vapJf3LmZQclmi0,5940 +django/contrib/admin/locale/fy/LC_MESSAGES/django.mo,sha256=mWnHXGJUtiewo1F0bsuJCE_YBh7-Ak9gjTpwjOAv-HI,476 +django/contrib/admin/locale/fy/LC_MESSAGES/django.po,sha256=oSKEF_DInUC42Xzhw9HiTobJjE2fLNI1VE5_p6rqnCE,10499 +django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po,sha256=efBDCcu43j4SRxN8duO5Yfe7NlpcM88kUPzz-qOkC04,2864 +django/contrib/admin/locale/ga/LC_MESSAGES/django.mo,sha256=cIOjVge5KC37U6g-0MMaP5p8N0XJxzK6oJqWNUw9jfI,15075 +django/contrib/admin/locale/ga/LC_MESSAGES/django.po,sha256=Qx1D0cEGIIPnO10I_83IfU3faEYpp0lm-KHg48lJMxE,17687 +django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo,sha256=G-9VfhiMcooTbAI1IMvbvUwj_h_ttNyxGS89nIgrpw4,5247 +django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.po,sha256=DsDMYhm5PEpFBBGepf2iRD0qCkh2r45Y4tIHzFtjJAo,5920 +django/contrib/admin/locale/gd/LC_MESSAGES/django.mo,sha256=HEqiGvjMp0NnfIS0Z-c1i8SicEtMPIg8LvNMh-SXiPg,18871 +django/contrib/admin/locale/gd/LC_MESSAGES/django.po,sha256=cZWnJyEoyGFLbk_M4-eddTJLKJ0dqTIlIj4w6YwcjJg,20139 +django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo,sha256=QA2_hxHGzt_y0U8sAGQaT27IvvyWrehLPKP2X1jAvEs,5904 +django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.po,sha256=KyYGpFHq2E55dK005xzH0I2RD-C2kD6BlJi8bcMjtRA,6540 +django/contrib/admin/locale/gl/LC_MESSAGES/django.mo,sha256=rRBlaoBQzzpFHN9ZuuHvXTJnLYciMYHA8IX9K6-4fmw,10785 +django/contrib/admin/locale/gl/LC_MESSAGES/django.po,sha256=OEOpmZuXMGG_SSHX0zdw_bgy3gDzcjWz9zgb9esYHrA,15902 +django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo,sha256=YkT7l3U9ffSGqXmu6S41Ex0r7tbK-0BKH5lS6O8PAGs,3279 +django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.po,sha256=EDccOpm1mpT8mVRvu5LBsq8nao50oP1V7aKEnuRmtF8,4803 +django/contrib/admin/locale/he/LC_MESSAGES/django.mo,sha256=5Ckbdd-vF0C-W6tHf2_o2SZzMiRyrv9u9W0CLsqt0XM,16297 +django/contrib/admin/locale/he/LC_MESSAGES/django.po,sha256=FoVOVR6iqKlFLhkHMLJMnQJmLLwzkVKe5wQ7IsFPX_c,18924 +django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo,sha256=sdc97pmpMSUAvoMwrWOHyGPYV4j3DDhz4DlqFeRVTT4,5791 +django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po,sha256=ZXy7lexBNYbzAriBG27Jn-mv2DFoGobsV1Ur2lDtRMQ,6573 +django/contrib/admin/locale/hi/LC_MESSAGES/django.mo,sha256=EogCHT8iAURSuE34kZ0kwEIoz5VjgUQUG2eAIqDxReU,18457 +django/contrib/admin/locale/hi/LC_MESSAGES/django.po,sha256=NcTFbFyHhWOIieUpzIVL7aSDWZ8ZNmfnv5gcxhON1zc,21770 +django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo,sha256=yCUHDS17dQDKcAbqCg5q8ualaUgaa9qndORgM-tLCIw,4893 +django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po,sha256=U9rb5tPMICK50bRyTl40lvn-tvh6xL_6o7xIPkzfKi0,6378 +django/contrib/admin/locale/hr/LC_MESSAGES/django.mo,sha256=3TR3uFcd0pnkDi551WaB9IyKX1aOazH7USxqc0lA0KQ,14702 +django/contrib/admin/locale/hr/LC_MESSAGES/django.po,sha256=qcW7tvZoWZIR8l-nMRexGDD8VlrOD7l5Fah6-ecilMk,17378 +django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo,sha256=KR34lviGYh1esCkPE9xcDE1pQ_q-RxK1R2LPjnG553w,3360 +django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.po,sha256=w7AqbYcLtu88R3KIKKKXyRt2gwBBBnr-ulxONWbw01I,4870 +django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo,sha256=-ParKlCmKrzENtnyHqh4a0yJE18J5yi0TP-r9jQfArI,17520 +django/contrib/admin/locale/hsb/LC_MESSAGES/django.po,sha256=9e_sWbpB1UlyORWsbjOMXvA2vtsiff1saZfhOoGhX50,18700 +django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo,sha256=nx5PHpjnFVOL_64Ui3HGTgUOZWnIUy5HF0DxHi7Dyz0,5681 +django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po,sha256=XMpmL1mYKGymExY5KXl9FBBZgMrJIGNSBBvc92y8yno,6281 +django/contrib/admin/locale/hu/LC_MESSAGES/django.mo,sha256=O_QBDJcYI_rVYvXdI3go3YA2Y1u-NOuKOwshF6Ic7bs,17427 +django/contrib/admin/locale/hu/LC_MESSAGES/django.po,sha256=Gt0lw5n8KxK0ReE0HWrMjPFOXxVGZxxZ3YX4MiV9z1M,18962 +django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo,sha256=CgDVu17Y4DDNfuzUGWyfHyAMFc4ZulYcTFPcU7Yot74,5121 +django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.po,sha256=U52dESIGFfZIzUTgeNUKcLjZGGFmTGU0fSxDw2LMhiQ,5816 +django/contrib/admin/locale/hy/LC_MESSAGES/django.mo,sha256=Dcx9cOsYBfbgQgoAQoLhn_cG1d2sKGV6dag4DwnUTaY,18274 +django/contrib/admin/locale/hy/LC_MESSAGES/django.po,sha256=CnQlRZ_DUILMIqVEgUTT2sufAseEKJHHjWsYr_LAqi8,20771 +django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.mo,sha256=ttfGmyEN0-3bM-WmfCge2lG8inubMPOzFXfZrfX9sfw,5636 +django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po,sha256=jf94wzUOMQaKSBR-77aijQXfdRAqiYSeAQopiT_8Obc,6046 +django/contrib/admin/locale/ia/LC_MESSAGES/django.mo,sha256=SRKlr8RqW8FQhzMsXdA9HNqttO3hc0xf4QdQJd4Dy8c,11278 +django/contrib/admin/locale/ia/LC_MESSAGES/django.po,sha256=pBQLQsMinRNh0UzIHBy3qEW0etUWMhFALu4-h-woFyE,15337 +django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo,sha256=28MiqUf-0-p3PIaongqgPQp2F3D54MLAujPslVACAls,3177 +django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po,sha256=CauoEc8Fiowa8k6K-f9N8fQDle40qsgtXdNPDHBiudQ,4567 +django/contrib/admin/locale/id/LC_MESSAGES/django.mo,sha256=K4QEDjEXouYrPWgmgGUbOdH895CruqSPsXizLBeZi6g,16681 +django/contrib/admin/locale/id/LC_MESSAGES/django.po,sha256=_xgVOVRsRVendtBnCwOJe2J1CKZqk93RYhN0LbBP3AY,18131 +django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo,sha256=S2kI3uRCVI1vic6VTp4NPQL_CGcEKMe-Q2cpJhyfxtk,5006 +django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po,sha256=_0EkG-U2XN68kTUGry_NPq2YKr2ufk2Xm7Ody4tmHuE,5680 +django/contrib/admin/locale/io/LC_MESSAGES/django.mo,sha256=URiYZQZpROBedC-AkpVo0q3Tz78VfkmwN1W7j6jYpMo,12624 +django/contrib/admin/locale/io/LC_MESSAGES/django.po,sha256=y0WXY7v_9ff-ZbFasj33loG-xWlFO8ttvCB6YPyF7FQ,15562 +django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo,sha256=nMu5JhIy8Fjie0g5bT8-h42YElCiS00b4h8ej_Ie-w0,464 +django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po,sha256=WLh40q6yDs-8ZG1hpz6kfMQDXuUzOZa7cqtEPDywxG4,2852 +django/contrib/admin/locale/is/LC_MESSAGES/django.mo,sha256=csD3bmz3iQgLLdSqCKOmY_d893147TvDumrpRVoRTY0,16804 +django/contrib/admin/locale/is/LC_MESSAGES/django.po,sha256=tXgb3ARXP5tPa5iEYwwiHscDGfjS5JgIV2BsUX8OnjE,18222 +django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo,sha256=Z3ujWoenX5yYTAUmHUSCvHcuV65nQmYKPv6Jo9ygx_c,5174 +django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po,sha256=YPf4XqfnpvrS9irAS8O4G0jgU5PCoQ9C-w3MoDipelk,5847 +django/contrib/admin/locale/it/LC_MESSAGES/django.mo,sha256=Z5WsBMKDNX_0t7U0_q0NVMqaqrquzrN2zjFr8gTEO8E,17309 +django/contrib/admin/locale/it/LC_MESSAGES/django.po,sha256=5xuPVKs6xKuxJwPt4X8oek88baE2Fn-cL5VNi5OXZf0,18982 +django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo,sha256=dZ-_EjmtlPHhaOgnz1ISFAYkaSkuEpw_d-sdU7BZeaU,5119 +django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po,sha256=ixWfLqf2WwFnkn63WR1DzY4GWXHXSa9eyoxTNPAFDGA,5919 +django/contrib/admin/locale/ja/LC_MESSAGES/django.mo,sha256=XuHILa1vd1pSQAI2u-Z-tAFb2T3_JfgDT215bPiGnM4,18553 +django/contrib/admin/locale/ja/LC_MESSAGES/django.po,sha256=4MtIoWafdzn5UMzlU1pS88933VMAPUCUFn9skh9F08Y,20037 +django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo,sha256=FVs4HxrhvIXVfZMxHq5vPSx55ggb8Mmd0F4Go47JDvA,5284 +django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po,sha256=v2P8YcTDTOWKPWgw0J45V1m5Tzpz752xmaIh_CzRYQQ,5899 +django/contrib/admin/locale/ka/LC_MESSAGES/django.mo,sha256=M3FBRrXFFa87DlUi0HDD_n7a_0IYElQAOafJoIH_i60,20101 +django/contrib/admin/locale/ka/LC_MESSAGES/django.po,sha256=abkt7pw4Kc-Y74ZCpAk_VpFWIkr7trseCtQdM6IUYpQ,23527 +django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo,sha256=GlPU3qUavvU0FXPfvCl-8KboYhDOmMsKM-tv14NqOac,5516 +django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po,sha256=jDpB9c_edcLoFPHFIogOSPrFkssOjIdxtCA_lum8UCs,6762 +django/contrib/admin/locale/kab/LC_MESSAGES/django.mo,sha256=9QKEWgr8YQV17OJ14rMusgV8b79ZgOOsX4aIFMZrEto,3531 +django/contrib/admin/locale/kab/LC_MESSAGES/django.po,sha256=cSOG_HqsNE4tA5YYDd6txMFoUul8d5UKvk77ZhaqOK0,11711 +django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo,sha256=nqwZHJdtjHUSFDJmC0nPNyvWcAdcoRcN3f-4XPIItvs,1844 +django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po,sha256=tF3RH22p2E236Cv6lpIWQxtuPFeWOvJ-Ery3vBUv6co,3713 +django/contrib/admin/locale/kk/LC_MESSAGES/django.mo,sha256=f2WU3e7dOz0XXHFFe0gnCm1MAPCJ9sva2OUnWYTHOJg,12845 +django/contrib/admin/locale/kk/LC_MESSAGES/django.po,sha256=D1vF3nqANT46f17Gc2D2iGCKyysHAyEmv9nBei6NRA4,17837 +django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo,sha256=cBxp5pFJYUF2-zXxPVBIG06UNq6XAeZ72uRLwGeLbiE,2387 +django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po,sha256=Y30fcDpi31Fn7DU7JGqROAiZY76iumoiW9qGAgPCCbU,4459 +django/contrib/admin/locale/km/LC_MESSAGES/django.mo,sha256=eOe9EcFPzAWrTjbGUr-m6RAz2TryC-qHKbqRP337lPY,10403 +django/contrib/admin/locale/km/LC_MESSAGES/django.po,sha256=RSxy5vY2sgC43h-9sl6eomkFvxClvH_Ka4lFiwTvc2I,17103 +django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo,sha256=Ja8PIXmw6FMREHZhhBtGrr3nRKQF_rVjgLasGPnU95w,1334 +django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po,sha256=LH4h4toEgpVBb9yjw7d9JQ8sdU0WIZD-M025JNlLXAU,3846 +django/contrib/admin/locale/kn/LC_MESSAGES/django.mo,sha256=955iPq05ru6tm_iPFVMebxwvZMtEa5_7GaFG1mPt6HU,9203 +django/contrib/admin/locale/kn/LC_MESSAGES/django.po,sha256=-4YAm0MyhS-wp4RQmo0TzWvqYqmzHFNpIBtdQlg_8Dw,16059 +django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo,sha256=dHzxizjDQWiZeRfBqnVFcK1yk1-M5p1KOfQ1ya9TMVU,1872 +django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.po,sha256=MqRj6ozyr1e9-qNORUTJXNahe6SL3ee3OveSm3efV4g,4214 +django/contrib/admin/locale/ko/LC_MESSAGES/django.mo,sha256=n5v2HMHEYIaX1_uog-MkbDQ011j79xlMwljjfrpETpg,17829 +django/contrib/admin/locale/ko/LC_MESSAGES/django.po,sha256=d1HDdGcdcp9oNv0lXsl7Bf9Ws0bDy8Kizeff1G_llfo,19671 +django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo,sha256=NQOPmHV4Z1wMqS1WobZrNb6z-f-uPgNFh5WY6W2nLNo,5092 +django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po,sha256=FUqBIciM_sVkeIMdu0_WYtIDhIINpIDp5MElLTPTsug,5824 +django/contrib/admin/locale/ky/LC_MESSAGES/django.mo,sha256=eg-TnIzJO4h3q_FS2a1LnCs7qOf5dpNJwvRD99ZZ0GQ,20129 +django/contrib/admin/locale/ky/LC_MESSAGES/django.po,sha256=dWxU3yUAKHUGKdVJbRLkS6fJEefPBk2XM0i2INcRPms,21335 +django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.mo,sha256=VuBYBwFwIHC27GFZiHY2_4AB0cME2R0Q3juczjOs3G0,5888 +django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.po,sha256=uMk9CxL1wP45goq2093lYMza7LRuO4XbVo5RRWlsbaE,6432 +django/contrib/admin/locale/lb/LC_MESSAGES/django.mo,sha256=8GGM2sYG6GQTQwQFJ7lbg7w32SvqgSzNRZIUi9dIe6M,913 +django/contrib/admin/locale/lb/LC_MESSAGES/django.po,sha256=PZ3sL-HvghnlIdrdPovNJP6wDrdDMSYp_M1ok6dodrw,11078 +django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po,sha256=fiMelo6K0_RITx8b9k26X1R86Ck2daQXm86FLJpzt20,2862 +django/contrib/admin/locale/lt/LC_MESSAGES/django.mo,sha256=SpaNUiaGtDlX5qngVj0dWdqNLSin8EOXXyBvRM9AnKg,17033 +django/contrib/admin/locale/lt/LC_MESSAGES/django.po,sha256=tHnRrSNG2ENVduP0sOffCIYQUn69O6zIev3Bb7PjKb0,18497 +django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo,sha256=vZtnYQupzdTjVHnWrtjkC2QKNpsca5yrpb4SDuFx0_0,5183 +django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.po,sha256=dMjFClA0mh5g0aNFTyHC8nbYxwmFD0-j-7gCKD8NFnw,5864 +django/contrib/admin/locale/lv/LC_MESSAGES/django.mo,sha256=JasSPrV3rsW1_Axk8bfJILKuAx3jNqIKjQwdfLLb85E,17086 +django/contrib/admin/locale/lv/LC_MESSAGES/django.po,sha256=zpn9vVxFQ60Tu8050Zc_Hh47rzZN0jyyCqXLYB9y8_g,18460 +django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo,sha256=m2v9CtKlzh10brhZelAruNj0var77Mr1N0uoeetqW-4,5491 +django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po,sha256=1hCp5ziBGVDokhDDU0wRCeGeLkWuhTyI291oX3m0boM,6165 +django/contrib/admin/locale/mk/LC_MESSAGES/django.mo,sha256=wy8NuOl_ojwSrY0pWjJ7XXbPl_O0kckp618zIE0a8Hk,15611 +django/contrib/admin/locale/mk/LC_MESSAGES/django.po,sha256=DYsVd2DM6QYWWLcYnOROHN_oFilWmjxIpUMyF9RtmvM,19505 +django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo,sha256=8BkWjadml2f1lDeH-IULdxsogXSK8NpVuu293GvcQc8,4719 +django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po,sha256=u9mVSzbIgA1uRgV_L8ZOZLelyknoKFvXH0HbBurezf8,6312 +django/contrib/admin/locale/ml/LC_MESSAGES/django.mo,sha256=4Y1KAip3NNsoRc9Zz3k0YFLzes3DNRFvAXWSTBivXDk,20830 +django/contrib/admin/locale/ml/LC_MESSAGES/django.po,sha256=jL9i3kmOnoKYDq2RiF90WCc55KeA8EBN9dmPHjuUfmo,24532 +django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo,sha256=COohY0mAHAOkv1eNzLkaGZy8mimXzcDK1EgRd3tTB_E,6200 +django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.po,sha256=NvN0sF_w5tkc3bND4lBtCHsIDLkwqdEPo-8wi2MTQ14,7128 +django/contrib/admin/locale/mn/LC_MESSAGES/django.mo,sha256=Lu8mM_3lJuByz4xXE7shq4nuBwE71_yh4_HIuy7KK64,14812 +django/contrib/admin/locale/mn/LC_MESSAGES/django.po,sha256=yNbv9cOeXEHPiDOKPXIbq2-cBZvUXSXCfL4TPe74x0s,18851 +django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo,sha256=H7fIPdWTK3_iuC0WRBJdfXN8zO77p7-IzTviEUVQJ2U,5228 +django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po,sha256=vJIqqVG34Zd7q8-MhTgZcXTtl6gukOSb6egt70AOyAc,5757 +django/contrib/admin/locale/mr/LC_MESSAGES/django.mo,sha256=UAxGnGliid2PTx6SMgIuHVfbCcqVvcwC4FQUWtDuSTc,468 +django/contrib/admin/locale/mr/LC_MESSAGES/django.po,sha256=TNARpu8Pfmu9fGOLUP0bRwqqDdyFmlh9rWjFspboTyc,10491 +django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po,sha256=uGe9kH2mwrab97Ue77oggJBlrpzZNckKGRUMU1vaigs,2856 +django/contrib/admin/locale/ms/LC_MESSAGES/django.mo,sha256=Xj5v1F4_m1ZFUn42Rbep9eInxIV-NE-oA_NyfQkbp00,16840 +django/contrib/admin/locale/ms/LC_MESSAGES/django.po,sha256=ykFH-mPbv2plm2NIvKgaj3WVukJ3SquU8nQIAXuOrWA,17967 +django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.mo,sha256=9VY_MrHK-dGOIkucLCyR9psy4o5p4nHd8kN_5N2E-gY,5018 +django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.po,sha256=P4GvM17rlX1Vl-7EbCyfWVasAJBEv_RvgWEvfJqcErA,5479 +django/contrib/admin/locale/my/LC_MESSAGES/django.mo,sha256=xvlgM0vdYxZuA7kPQR7LhrLzgmyVCHAvqaqvFhKX9wY,3677 +django/contrib/admin/locale/my/LC_MESSAGES/django.po,sha256=zdUCYcyq2-vKudkYvFcjk95YUtbMDDSKQHCysmQ-Pvc,12522 +django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo,sha256=1fS9FfWi8b9NJKm3DBKETmuffsrTX-_OHo9fkCCXzpg,3268 +django/contrib/admin/locale/my/LC_MESSAGES/djangojs.po,sha256=-z1j108uoswi9YZfh3vSIswLXu1iUKgDXNdZNEA0yrA,5062 +django/contrib/admin/locale/nb/LC_MESSAGES/django.mo,sha256=viQKBFH6ospYn2sE-DokVJGGYhSqosTgbNMn5sBVnmM,16244 +django/contrib/admin/locale/nb/LC_MESSAGES/django.po,sha256=x0ANRpDhe1rxxAH0qjpPxRfccCvR73_4g5TNUdJqmrc,17682 +django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo,sha256=KwrxBpvwveERK4uKTIgh-DCc9aDLumpHQYh5YroqxhQ,4939 +django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po,sha256=ygn6a5zkHkoIYMC8Hgup8Uw1tMbZcLGgwwDu3x33M-o,5555 +django/contrib/admin/locale/ne/LC_MESSAGES/django.mo,sha256=yrm85YXwXIli7eNaPyBTtV7y3TxQuH4mokKuHdAja2A,15772 +django/contrib/admin/locale/ne/LC_MESSAGES/django.po,sha256=F8vfWKvSNngkLPZUIwik_qDYu0UAnrWepbI9Z9Iz35g,20400 +django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo,sha256=mJdtpLT9k4vDbN9fk2fOeiy4q720B3pLD3OjLbAjmUI,5362 +django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po,sha256=N91RciTV1m7e8-6Ihod5U2xR9K0vrLoFnyXjn2ta098,6458 +django/contrib/admin/locale/nl/LC_MESSAGES/django.mo,sha256=ndq_k6QUL6hwc9iuI-rlPbML_-HdcUslCXLRxiV10yw,17070 +django/contrib/admin/locale/nl/LC_MESSAGES/django.po,sha256=SaTkp0m6wEbwl79Q3Lj6vICGw61HI5Um4_8Bs2hfhg0,18768 +django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo,sha256=yHX5iQjKqqrIxl_K-AQkBMFNQ8YmgdUxAJVkOEfWDE4,4592 +django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po,sha256=B9y-TjAFtDgnX7RcPlWWgCqdOUzWY5EWV-buuXtP468,5457 +django/contrib/admin/locale/nn/LC_MESSAGES/django.mo,sha256=rVQYyJ7SYlKH3vfpOWD3MQZgL5AVnxxDiwDBjhlb1dk,16502 +django/contrib/admin/locale/nn/LC_MESSAGES/django.po,sha256=sh1dss7STEXkyLssLgFbvM_1T4xAd68M5mW3x2mUG34,17825 +django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo,sha256=RsDri1DmCwrby8m7mLWkFdCe6HK7MD7GindOarVYPWc,4939 +django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.po,sha256=koVTt2mmdku1j7SUDRbnug8EThxXuCIF2XPnGckMi7A,5543 +django/contrib/admin/locale/os/LC_MESSAGES/django.mo,sha256=c51PwfOeLU2YcVNEEPCK6kG4ZyNc79jUFLuNopmsRR8,14978 +django/contrib/admin/locale/os/LC_MESSAGES/django.po,sha256=yugDw7iziHto6s6ATNDK4yuG6FN6yJUvYKhrGxvKmcY,18188 +django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo,sha256=0gMkAyO4Zi85e9qRuMYmxm6JV98WvyRffOKbBVJ_fLQ,3806 +django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po,sha256=skiTlhgUEN8uKk7ihl2z-Rxr1ZXqu5qV4wB4q9qXVq0,5208 +django/contrib/admin/locale/pa/LC_MESSAGES/django.mo,sha256=mSBJpzzGEhkKnqAhofa2vC6MPG8t--uJhF5xvRsx_1I,8556 +django/contrib/admin/locale/pa/LC_MESSAGES/django.po,sha256=tYtU9_fGdp83ea1cWiJfa6aVG-DYo_WfvXPFZB0W7Cg,15671 +django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo,sha256=Hub-6v7AfF-tWhw53abpyhnVHo76h_xBgGIhlGIcS70,1148 +django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po,sha256=7L8D4qqhq53XG83NJUZNoM8zCCScwMwzsrzzsyO4lHY,4357 +django/contrib/admin/locale/pl/LC_MESSAGES/django.mo,sha256=-rFoUXC3uUhMfP-DAAD8Qa2U7oUvm-3I_e30IZ7I-J4,18021 +django/contrib/admin/locale/pl/LC_MESSAGES/django.po,sha256=TBpwB1rPLFoxvwIi8G0vPmVUZG6Q6DvTiXfT8tVK-cg,19824 +django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo,sha256=6Oi_eVA7sYkM7xHROBdaSnfSOBBGijyW4_EA_z63Bfk,5702 +django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.po,sha256=xAEEIhbbqbEHDZa9QCAH7ccgFdO4vMRcSZLFrhwF778,6662 +django/contrib/admin/locale/pt/LC_MESSAGES/django.mo,sha256=MTFRTfUKot-0r-h7qtggPe8l_q0JPAzVF9GzdtB9600,16912 +django/contrib/admin/locale/pt/LC_MESSAGES/django.po,sha256=gzRkbl35HZ-88mlA1Bdj1Y-CUJ752pZKCUIG-NNw2os,18436 +django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo,sha256=D6-8QwX6lsACkEcYXq1tK_4W2q_NMc6g5lZQJDZRFHw,4579 +django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po,sha256=__a9WBgO_o0suf2xvMhyRk_Wkg2tfqNHmJOM5YF86sk,5118 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo,sha256=s4TU28oyJkcmjawja2KOvBPVgXBPnAE4N0T6Yw8xdnw,17151 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.po,sha256=dwb6qnw8lWlSrCj9kpZ9v_DXJl--E7aXtmHPHqewwfI,19492 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo,sha256=moTW7LW6HTDEGGpzq8JxPZ8_xNWjABPK-qkIVpgcshY,5208 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po,sha256=FsmX0dINSguDwJUOWZqmbbV529VeA--_iU1wINdRTUE,6073 +django/contrib/admin/locale/ro/LC_MESSAGES/django.mo,sha256=vkDRRqbQXemsY69kUYonzahIeafWAoIWEJ85aS33Hk8,14387 +django/contrib/admin/locale/ro/LC_MESSAGES/django.po,sha256=fyO2ylCXWZqU3GgHnZJtZfr5tssHMv8RUfkJFKhlvt0,17365 +django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo,sha256=voEqSN3JUgJM9vumLxE_QNPV7kA0XOoTktN7E7AYV6o,4639 +django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po,sha256=SO7FAqNnuvIDfZ_tsWRiwSv91mHx5NZHyR2VnmoYBWY,5429 +django/contrib/admin/locale/ru/LC_MESSAGES/django.mo,sha256=QJ6L9257dATWvsiBLc9QLn886vKaaEIFWglBBG5zWJo,22080 +django/contrib/admin/locale/ru/LC_MESSAGES/django.po,sha256=GFDQeIY3pDT7CbKCttBkz81AzUE1ztaUUCLd62Il_vg,23779 +django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo,sha256=RiHcf9X0qZaOjCeaJKnyNpoEV52AQ4NRe3ANgAyQ5u8,7149 +django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po,sha256=RmQxQ4zn3rJgeHYvVBcQ_svbkBklIhExAw4v8jTtYhI,8161 +django/contrib/admin/locale/sk/LC_MESSAGES/django.mo,sha256=hSHmImczSCOq8Fq1zVyZD5Sn5bhqUGBHiqM7WFMIMnw,17090 +django/contrib/admin/locale/sk/LC_MESSAGES/django.po,sha256=u4mxos-LzwOoZ0KqzYlynCFGagw9y2kQhx9nHE8svJg,18791 +django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo,sha256=-9dSuiVIPqZDSkF5arXISKP3TXbHtEveZO3vXy5ZotQ,5291 +django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po,sha256=wHjVgHIHxubOaeAuf8nBmj1vlXcPeWTGf1xMrhdVL2E,6083 +django/contrib/admin/locale/sl/LC_MESSAGES/django.mo,sha256=iqcg1DYwwDVacRAKJ3QR4fTmKQhRGXU4WkwYco9ASaA,16136 +django/contrib/admin/locale/sl/LC_MESSAGES/django.po,sha256=VeIJDh1PojyUy-4AdPcVezbQ-XVWqp04vFE_u3KU2tU,17508 +django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo,sha256=0jqGv5lgcfyxh9pdnB0Nt7e0bF2G0nO-iVWJjKwyZqI,4724 +django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.po,sha256=1DEs7obfCCf-hNM2nIkMizcRcq1KoLBvngMaXLlozUo,5269 +django/contrib/admin/locale/sq/LC_MESSAGES/django.mo,sha256=uyn8IzRKrCUsVMgkkKiv8QFqtNC9c9nVr6Uw6E7sdrc,17324 +django/contrib/admin/locale/sq/LC_MESSAGES/django.po,sha256=nFyndUnCwyAgsPWMlM_fTcQlOO2q2NOeMMFNOjnglDc,18640 +django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo,sha256=ZeCPydr-jAYr2tx50e4cdFAVsh4nJ1MJn-buqChlG2Q,5179 +django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po,sha256=kU02h9ZaAamXIrEFBTIl9zLGgzFxXEHQPNFEh8FC1SQ,5819 +django/contrib/admin/locale/sr/LC_MESSAGES/django.mo,sha256=Dj_vd6vp-NNeiB46bfcNXxcmnbqoEyPzWiOziVHpFko,15414 +django/contrib/admin/locale/sr/LC_MESSAGES/django.po,sha256=827weBLl0b41B9v4oEkZeVYBgSQQBiM2xZ5nCQO3sVE,19194 +django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo,sha256=sUOlK4V6-Ct0VKemqbcHPMk81jEGumujgorhpUVD6yw,6125 +django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.po,sha256=GGzmoBQBaFHy9QB_PkUUIxWy0Ot-GL5BfY-jWVtNmS0,6785 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=8wcRn4O2WYMFJal760MvjtSPBNoDgHAEYtedg8CC7Ao,12383 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po,sha256=N4fPEJTtUrQnc8q1MioPZ2a7E55YXrE-JvfAcWZubfA,16150 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo,sha256=eE2Xu7W3ggV0lo62WghIbME2jkAVZXMUWGexwz2V0fI,5136 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po,sha256=YuKlU4CyKwrc0yumnUH_6tetOzBwbjTCjkhcO8VcTyU,5753 +django/contrib/admin/locale/sv/LC_MESSAGES/django.mo,sha256=LbQrBeUhFggf7OJm7xc79r8B3r0CSC4ObTddnIzilNo,16436 +django/contrib/admin/locale/sv/LC_MESSAGES/django.po,sha256=8AUaeZ2A0EvGYyve97UBcVmbUc_XsS-Ob8d-xLY5fBg,18150 +django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo,sha256=D7Bo8rFeCT6daVSdjr8QWdmDpN5UYdFnwviV3zZW0_o,4500 +django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.po,sha256=qdD922JzhXE5WK54ZYtgq9uL80n1tum0q5tEo1kHBqY,5182 +django/contrib/admin/locale/sw/LC_MESSAGES/django.mo,sha256=Mtj7jvbugkVTj0qyJ_AMokWEa2btJNSG2XrhpY0U1Mc,14353 +django/contrib/admin/locale/sw/LC_MESSAGES/django.po,sha256=ElU-s0MgtNKF_aXdo-uugBnuJIDzHqMmy1ToMDQhuD0,16419 +django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo,sha256=p0pi6-Zg-qsDVMDjNHO4aav3GfJ3tKKhy6MK7mPtC50,3647 +django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po,sha256=lZFP7Po4BM_QMTj-SXGlew1hqyJApZxu0lxMP-YduHI,4809 +django/contrib/admin/locale/ta/LC_MESSAGES/django.mo,sha256=ZdtNRZLRqquwMk7mE0XmTzEjTno9Zni3mV6j4DXL4nI,10179 +django/contrib/admin/locale/ta/LC_MESSAGES/django.po,sha256=D0TCLM4FFF7K9NqUGXNFE2KfoEzx5IHcJQ6-dYQi2Eg,16881 +django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo,sha256=2-37FOw9Bge0ahIRxFajzxvMkAZL2zBiQFaELmqyhhY,1379 +django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po,sha256=Qs-D7N3ZVzpZVxXtMWKOzJfSmu_Mk9pge5W15f21ihI,3930 +django/contrib/admin/locale/te/LC_MESSAGES/django.mo,sha256=aIAG0Ey4154R2wa-vNe2x8X4fz2L958zRmTpCaXZzds,10590 +django/contrib/admin/locale/te/LC_MESSAGES/django.po,sha256=-zJYrDNmIs5fp37VsG4EAOVefgbBNl75c-Pp3RGBDAM,16941 +django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo,sha256=VozLzWQwrY-USvin5XyVPtUUKEmCr0dxaWC6J14BReo,1362 +django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po,sha256=HI8IfXqJf4I6i-XZB8ELGyp5ZNr-oi5hW9h7n_8XSaQ,3919 +django/contrib/admin/locale/tg/LC_MESSAGES/django.mo,sha256=gJfgsEn9doTT0erBK77OBDi7_0O7Rb6PF9tRPacliXU,15463 +django/contrib/admin/locale/tg/LC_MESSAGES/django.po,sha256=Wkx7Hk2a9OzZymgrt9N91OL9K5HZXTbpPBXMhyE0pjI,19550 +django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.mo,sha256=SEaBcnnKupXbTKCJchkSu_dYFBBvOTAOQSZNbCYUuHE,5154 +django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.po,sha256=CfUjLtwMmz1h_MLE7c4UYv05ZTz_SOclyKKWmVEP9Jg,5978 +django/contrib/admin/locale/th/LC_MESSAGES/django.mo,sha256=EVlUISdKOvNkGMG4nbQFzSn5p7d8c9zOGpXwoHsHNlY,16394 +django/contrib/admin/locale/th/LC_MESSAGES/django.po,sha256=OqhGCZ87VX-WKdC2EQ8A8WeXdWXu9mj6k8mG9RLZMpM,20187 +django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo,sha256=ukj5tyDor9COi5BT9oRLucO2wVTI6jZWclOM-wNpXHM,6250 +django/contrib/admin/locale/th/LC_MESSAGES/djangojs.po,sha256=3L5VU3BNcmfiqzrAWK0tvRRVOtgR8Ceg9YIxL54RGBc,6771 +django/contrib/admin/locale/tr/LC_MESSAGES/django.mo,sha256=lIH6Rxbni7csB5cHmZwmHQnpxa1SCwPr_8nAPFR9WJY,17266 +django/contrib/admin/locale/tr/LC_MESSAGES/django.po,sha256=GAm62Lh7u0T1aiNI5BjidNzOKTCHOiGAca8eAIgKvPE,18789 +django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo,sha256=GBahBmPERR7nnaf8ruY-XTq_GDn_Km80IW8yny-4dXc,5121 +django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po,sha256=iHYckcDAbOkxL4wREObIUnoEIjQL9i51CRaYwL4wI4Y,5764 +django/contrib/admin/locale/tt/LC_MESSAGES/django.mo,sha256=ObJ8zwVLhFsS6XZK_36AkNRCeznoJJwLTMh4_LLGPAA,12952 +django/contrib/admin/locale/tt/LC_MESSAGES/django.po,sha256=VDjg5nDrLqRGXpxCyQudEC_n-6kTCIYsOl3izt1Eblc,17329 +django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo,sha256=Sz5qnMHWfLXjaCIHxQNrwac4c0w4oeAAQubn5R7KL84,2607 +django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po,sha256=_Uh3yH_RXVB3PP75RFztvSzVykVq0SQjy9QtTnyH3Qk,4541 +django/contrib/admin/locale/udm/LC_MESSAGES/django.mo,sha256=2Q_lfocM7OEjFKebqNR24ZBqUiIee7Lm1rmS5tPGdZA,622 +django/contrib/admin/locale/udm/LC_MESSAGES/django.po,sha256=L4TgEk2Fm2mtKqhZroE6k_gfz1VC-_dXe39CiJvaOPE,10496 +django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.po,sha256=ZLYr0yHdMYAl7Z7ipNSNjRFIMNYmzIjT7PsKNMT6XVk,2811 +django/contrib/admin/locale/uk/LC_MESSAGES/django.mo,sha256=KDkQFp-PXtWWsO5Yt5_1nvOlykXFiOJ9SolC5jxzfLw,15623 +django/contrib/admin/locale/uk/LC_MESSAGES/django.po,sha256=aI4WE1idRp6zIXJDrRsbA_yj9OJY2oodXd198x7CBK8,20011 +django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo,sha256=_YwTcBttv3DZNYkBq4Rsl6oq30o8nDvUHPI5Yx0GaA4,5787 +django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po,sha256=4lYvm_LDX5xha4Qj1dXE5tGs4BjGPUgjigvG2n6y1S4,6993 +django/contrib/admin/locale/ur/LC_MESSAGES/django.mo,sha256=HvyjnSeLhUf1JVDy759V_TI7ygZfLaMhLnoCBJxhH_s,13106 +django/contrib/admin/locale/ur/LC_MESSAGES/django.po,sha256=BFxxLbHs-UZWEmbvtWJNA7xeuvO9wDc32H2ysKZQvF4,17531 +django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo,sha256=eYN9Q9KKTV2W0UuqRc-gg7y42yFAvJP8avMeZM-W7mw,2678 +django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.po,sha256=Nj-6L6axLrqA0RHUQbidNAT33sXYfVdGcX4egVua-Pk,4646 +django/contrib/admin/locale/uz/LC_MESSAGES/django.mo,sha256=bWJujZSbu9Q4u2hcVJAkHDQCjx8Uo_Bj5gcU3CbkeLw,4610 +django/contrib/admin/locale/uz/LC_MESSAGES/django.po,sha256=3fxRPvC5_1md4LrntCTLUXVINdrHxgHOav04xabwYUg,13107 +django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.mo,sha256=LpuFvNKqNRCCiV5VyRnJoZ8gY3Xieb05YV9KakNU7o8,3783 +django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.po,sha256=joswozR3I1ijRapf50FZMzQQhI_aU2XiiSTLeSxkL64,5235 +django/contrib/admin/locale/vi/LC_MESSAGES/django.mo,sha256=coCDRhju7xVvdSaounXO5cMqCmLWICZPJth6JI3Si2c,18077 +django/contrib/admin/locale/vi/LC_MESSAGES/django.po,sha256=Q1etVmaAb1f79f4uVjbNjPkn-_3m2Spz1buNAV3y9lk,19543 +django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo,sha256=45E-fCQkq-BRLzRzsGkw1-AvWlvjL1rdsRFqfsvAq98,5302 +django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po,sha256=k87QvFnt8psnwMXXrFO6TyH6xCyXIDd_rlnWDfl2FAA,5958 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=dS4gJsC_O-Wx46PGYYs1e_W3AbB7EBRowEMl1P03vz4,16014 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po,sha256=bTyioHpGSUuekG1nOWEd7bsGHzoIv2beoiQilrYX2W4,17985 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo,sha256=WbSCAiqttOXlVFh64D4gLTZIX5C_JYAQBCD3TrE842E,4831 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po,sha256=cQKCmWwRnAzL9RHKWENfT_4j-Pu-7xF_ZtQP5i-oOew,5752 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=kEKX-cQPRFCNkiqNs1BnyzEvJQF-EzA814ASnYPFMsw,15152 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po,sha256=iH3w7Xt_MelkZefKi8F0yAWN6QGdQCJBz8VaFY4maUg,16531 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo,sha256=yFwS8aTJUAG5lN4tYLCxx-FLfTsiOxXrCEhlIA-9vcs,4230 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po,sha256=C4Yk5yuYcmaovVs_CS8YFYY2iS4RGi0oNaUpTm7akeU,4724 +django/contrib/admin/migrations/0001_initial.py,sha256=zFK34hmWHrMGFVyooWug9TdVRPzbq9YtlpzMUa_-wmY,2508 +django/contrib/admin/migrations/0002_logentry_remove_auto_add.py,sha256=Fjda6T9ZALOk0ApouxbPe5Ph4RCGZigpgYEZipqFtT4,554 +django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py,sha256=OYurX3-py7fLmfuwyzhED9efg74mAut92S-NEqgBINc,539 +django/contrib/admin/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-310.pyc,, +django/contrib/admin/migrations/__pycache__/0003_logentry_add_action_flag_choices.cpython-310.pyc,, +django/contrib/admin/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admin/models.py,sha256=2eTsW0WRQbXV1GeOPLX76RMFv6GQqIGuZs10GFT7V48,6501 +django/contrib/admin/options.py,sha256=Wfo1NJ43awhoAGxGURhVWyFVSucn6JFd01KhWM5VmOk,97409 +django/contrib/admin/sites.py,sha256=ynRgsMxZBVflmalSQTOLqGTw1zZeYi-x-NK3iWwwrC0,22588 +django/contrib/admin/static/admin/css/autocomplete.css,sha256=6-fcQdqClpGf8EpH1NxgS8YL-diGXc8CFq3Sw2I9K8k,9114 +django/contrib/admin/static/admin/css/base.css,sha256=uIqqrMcVS8cUSwazn-SVHKwzrZsB3k-Hhw4MOMBs74c,19513 +django/contrib/admin/static/admin/css/changelists.css,sha256=OCIbdBFGRaKdigNGwvfpBqC6zvSMO426Fa8CfUMVwuQ,6932 +django/contrib/admin/static/admin/css/dashboard.css,sha256=i2OcDTa1R_bO6aBTZ66-aRlTXl0l4sjeHfasUrfzjd0,380 +django/contrib/admin/static/admin/css/fonts.css,sha256=SnBl3KjeUZqRmZw3F0iNm1YpqFhjrNC_fNN0H2TkuYc,423 +django/contrib/admin/static/admin/css/forms.css,sha256=kz4EvcKQHygihbK8ZDZHSpMFHlJwT6slnJuI1PCcByw,8878 +django/contrib/admin/static/admin/css/login.css,sha256=frvfBpUydI9A0hoe_YH04sVn7q6WeNAAFVYO5YlHXEQ,954 +django/contrib/admin/static/admin/css/nav_sidebar.css,sha256=RzKShcJR6SA6MtgDJUS950GcbwFitBXLoYQgTwyLBm8,2616 +django/contrib/admin/static/admin/css/responsive.css,sha256=EYQpfNTd8XXZS7-RxmT0VClzcAgyL84-osPR6HNRLYs,18575 +django/contrib/admin/static/admin/css/responsive_rtl.css,sha256=iM8FIfXLuXgurjYK0JwboVuilUg1hnaZw7wa3hx8aI0,1741 +django/contrib/admin/static/admin/css/rtl.css,sha256=1omOH5YP-blvLuFKw1fFtPiMaKlC7UDmT2T2JvM7D4o,3234 +django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md,sha256=TuDLxRNwr941hlKg-XeXIFNyntV4tqQvXioDfRFPCzk,1124 +django/contrib/admin/static/admin/css/vendor/select2/select2.css,sha256=kalgQ55Pfy9YBkT-4yYYd5N8Iobe-iWeBuzP7LjVO0o,17358 +django/contrib/admin/static/admin/css/vendor/select2/select2.min.css,sha256=FdatTf20PQr_rWg-cAKfl6j4_IY3oohFAJ7gVC3M34E,14966 +django/contrib/admin/static/admin/css/widgets.css,sha256=RYVncctTggpZ1eBo8QCavypH4ug8rySk8MzQeCYur8U,11097 +django/contrib/admin/static/admin/fonts/LICENSE.txt,sha256=Pd-b5cKP4n2tFDpdx27qJSIq0d1ok0oEcGTlbtL6QMU,11560 +django/contrib/admin/static/admin/fonts/README.txt,sha256=E4rvl9Y9cvKx2wpkrgQZjhaKfRhEUG8pNLCoZoBq-rE,214 +django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff,sha256=sXZ6DD5d-zpQCe_uREX_FdY2LpKFRh4Xve0Ybx6UVvA,86184 +django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff,sha256=GIJzScf-vUuNAaqQfGfqm4ARJCB4MmskcDl4RU_fNRo,85692 +django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff,sha256=munWVF19fYI_ipQBDbd8Gg_3Hjcei7FY3xy5g5UWJQc,85876 +django/contrib/admin/static/admin/img/LICENSE,sha256=0RT6_zSIwWwxmzI13EH5AjnT1j2YU3MwM9j3U19cAAQ,1081 +django/contrib/admin/static/admin/img/README.txt,sha256=XqN5MlT1SIi6sdnYnKJrOiJ6h9lTIejT7nLSY-Y74pk,319 +django/contrib/admin/static/admin/img/calendar-icons.svg,sha256=gbMu26nfxZphlqKFcVOXpcv5zhv5x_Qm_P4ba0Ze84I,1094 +django/contrib/admin/static/admin/img/gis/move_vertex_off.svg,sha256=ou-ppUNyy5QZCKFYlcrzGBwEEiTDX5mmJvM8rpwC5DM,1129 +django/contrib/admin/static/admin/img/gis/move_vertex_on.svg,sha256=DgmcezWDms_3VhgqgYUGn-RGFHyScBP0MeX8PwHy_nE,1129 +django/contrib/admin/static/admin/img/icon-addlink.svg,sha256=kBtPJJ3qeQPWeNftvprZiR51NYaZ2n_ZwJatY9-Zx1Q,331 +django/contrib/admin/static/admin/img/icon-alert.svg,sha256=aXtd9PA66tccls-TJfyECQrmdWrj8ROWKC0tJKa7twA,504 +django/contrib/admin/static/admin/img/icon-calendar.svg,sha256=_bcF7a_R94UpOfLf-R0plVobNUeeTto9UMiUIHBcSHY,1086 +django/contrib/admin/static/admin/img/icon-changelink.svg,sha256=clM2ew94bwVa2xQ6bvfKx8xLtk0i-u5AybNlyP8k-UM,380 +django/contrib/admin/static/admin/img/icon-clock.svg,sha256=k55Yv6R6-TyS8hlL3Kye0IMNihgORFjoJjHY21vtpEA,677 +django/contrib/admin/static/admin/img/icon-deletelink.svg,sha256=06XOHo5y59UfNBtO8jMBHQqmXt8UmohlSMloUuZ6d0A,392 +django/contrib/admin/static/admin/img/icon-no.svg,sha256=QqBaTrrp3KhYJxLYB5E-0cn_s4A_Y8PImYdWjfQSM-c,560 +django/contrib/admin/static/admin/img/icon-unknown-alt.svg,sha256=LyL9oJtR0U49kGHYKMxmmm1vAw3qsfXR7uzZH76sZ_g,655 +django/contrib/admin/static/admin/img/icon-unknown.svg,sha256=ePcXlyi7cob_IcJOpZ66uiymyFgMPHl8p9iEn_eE3fc,655 +django/contrib/admin/static/admin/img/icon-viewlink.svg,sha256=NL7fcy7mQOQ91sRzxoVRLfzWzXBRU59cFANOrGOwWM0,581 +django/contrib/admin/static/admin/img/icon-yes.svg,sha256=_H4JqLywJ-NxoPLqSqk9aGJcxEdZwtSFua1TuI9kIcM,436 +django/contrib/admin/static/admin/img/inline-delete.svg,sha256=Ni1z8eDYBOveVDqtoaGyEMWG5Mdnt9dniiuBWTlnr5Y,560 +django/contrib/admin/static/admin/img/search.svg,sha256=HgvLPNT7FfgYvmbt1Al1yhXgmzYHzMg8BuDLnU9qpMU,458 +django/contrib/admin/static/admin/img/selector-icons.svg,sha256=0RJyrulJ_UR9aYP7Wbvs5jYayBVhLoXR26zawNMZ0JQ,3291 +django/contrib/admin/static/admin/img/sorting-icons.svg,sha256=cCvcp4i3MAr-mo8LE_h8ZRu3LD7Ma9BtpK-p24O3lVA,1097 +django/contrib/admin/static/admin/img/tooltag-add.svg,sha256=fTZCouGMJC6Qq2xlqw_h9fFodVtLmDMrpmZacGVJYZQ,331 +django/contrib/admin/static/admin/img/tooltag-arrowright.svg,sha256=GIAqy_4Oor9cDMNC2fSaEGh-3gqScvqREaULnix3wHc,280 +django/contrib/admin/static/admin/js/SelectBox.js,sha256=FLFCFiaO4KziwueL83Un_WCR0-Lf66PhVqpvnbat50s,4360 +django/contrib/admin/static/admin/js/SelectFilter2.js,sha256=Nkgyinav9IBHIkJf8zCfAwArDZnY2Jbji2847SByUoU,12350 +django/contrib/admin/static/admin/js/actions.js,sha256=90nO6o7754a2w8bNZOrS7EoEoh_MZEnIOJzJji1zTl8,7872 +django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js,sha256=7tcIrJeL0C8WtUHCohivb_2n9i1XnbUi1-3a4H_5DNc,19634 +django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js,sha256=pZamCGsBc4mp14Fbzyaq4agdOhktSby3B9eZXDsa494,5984 +django/contrib/admin/static/admin/js/autocomplete.js,sha256=tzMf-zIpdciVp0jRNP0kv1KcOVMYyeqwdqCULVHiSJ8,1121 +django/contrib/admin/static/admin/js/calendar.js,sha256=vsYjQ4Nv6LPpqMVMhko8mnsv6U5EXkk5hOHhmkC5m7g,8466 +django/contrib/admin/static/admin/js/cancel.js,sha256=UEZdvvWu5s4ZH16lFfxa8UPgWXJ3i8VseK5Lcw2Kreg,884 +django/contrib/admin/static/admin/js/change_form.js,sha256=zOTeORCq1i9XXV_saSBBDOXbou5UtZvxYFpVPqxQ02Q,606 +django/contrib/admin/static/admin/js/collapse.js,sha256=UONBUueHwsm5SMlG0Ufp4mlqdgu7UGimU6psKzpxbuE,1803 +django/contrib/admin/static/admin/js/core.js,sha256=AVLCrqYJOnCuLJLo0jqe0pyEKxA_4tzJ_rMcDQE1szw,5698 +django/contrib/admin/static/admin/js/inlines.js,sha256=sPIdb715z-NYiXhjR7q6PmyU0aKNtvpFCyA88HExrAY,14969 +django/contrib/admin/static/admin/js/jquery.init.js,sha256=uM_Kf7EOBMipcCmuQHbyubQkycleSWDCS8-c3WevFW0,347 +django/contrib/admin/static/admin/js/nav_sidebar.js,sha256=pN6AcH7ly2eNxwmC3QBAJmzuIHXWFwaO9G6d8Obz4ls,3763 +django/contrib/admin/static/admin/js/popup_response.js,sha256=H4ppG14jfrxB1XF5xZp5SS8PapYuYou5H7uwYjHd7eI,551 +django/contrib/admin/static/admin/js/prepopulate.js,sha256=UYkWrHNK1-OWp1a5IWZdg0udfo_dcR-jKSn5AlxxqgU,1531 +django/contrib/admin/static/admin/js/prepopulate_init.js,sha256=JdhYQLmheJU2wK3xAelyDN5VVesDXT9XU_xwRnKhlKA,492 +django/contrib/admin/static/admin/js/urlify.js,sha256=ksu4cDd9JpFsN5cLT8BpOtg0JkkrIlWR1yr3nLlWXbI,7902 +django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt,sha256=1Nuevm8p9RaOrEWtcT8FViOsXQ3NW6ktoj1lCuASAg0,1097 +django/contrib/admin/static/admin/js/vendor/jquery/jquery.js,sha256=H-K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk,288580 +django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js,sha256=_xUj-3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej_m4,89501 +django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md,sha256=TuDLxRNwr941hlKg-XeXIFNyntV4tqQvXioDfRFPCzk,1124 +django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js,sha256=IpI3uo19fo77jMtN5R3peoP0OriN-nQfPY2J4fufd8g,866 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js,sha256=zxQ3peSnbVIfrH1Ndjx4DrHDsmbpqu6mfeylVWFM5mY,905 +django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js,sha256=N_KU7ftojf2HgvJRlpP8KqG6hKIbqigYN3K0YH_ctuQ,721 +django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js,sha256=5Z6IlHmuk_6IdZdAVvdigXnlj7IOaKXtcjuI0n0FmYQ,968 +django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js,sha256=wdQbgaxZ47TyGlwvso7GOjpmTXUKaWzvVUr_oCRemEE,1291 +django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js,sha256=g56kWSu9Rxyh_rarLSDa_8nrdqL51JqZai4QQx20jwQ,965 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js,sha256=DSyyAXJUI0wTp_TbFhLNGrgvgRsGWeV3IafxYUGBggM,900 +django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js,sha256=t_8OWVi6Yy29Kabqs_l1sM2SSrjUAgZTwbTX_m0MCL8,1292 +django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js,sha256=tF2mvzFYSWYOU3Yktl3G93pCkf-V9gonCxk7hcA5J1o,828 +django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js,sha256=5bspfcihMp8yXDwfcqvC_nV3QTbtBuQDmR3c7UPQtFw,866 +django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js,sha256=KtP2xNoP75oWnobUrS7Ep_BOFPzcMNDt0wyPnkbIF_Q,1017 +django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js,sha256=IdvD8eY_KpX9fdHvld3OMvQfYsnaoJjDeVkgbIemfn8,1182 +django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js,sha256=C66AO-KOXNuXEWwhwfjYBFa3gGcIzsPFHQAZ9qSh3Go,844 +django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js,sha256=IhZaIy8ufTduO2-vBrivswMCjlPk7vrk4P81pD6B0SM,922 +django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js,sha256=LgLgdOkKjc63svxP1Ua7A0ze1L6Wrv0X6np-8iRD5zw,801 +django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js,sha256=rLmtP7bA_atkNIj81l_riTM7fi5CXxVrFBHFyddO-Hw,868 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js,sha256=fqZkE9e8tt2rZ7OrDGPiOsTNdj3S2r0CjbddVUBDeMA,1023 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js,sha256=KVGirhGGNee_iIpMGLX5EzH_UkNe-FOPC_0484G-QQ0,803 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js,sha256=aj0q2rdJN47BRBc9LqvsgxkuPOcWAbZsUFUlbguwdY0,924 +django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js,sha256=HSJafI85yKp4WzjFPT5_3eZ_-XQDYPzzf4BWmu6uXHk,924 +django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js,sha256=DIPRKHw0NkDuUtLNGdTnYZcoCiN3ustHY-UMmw34V_s,984 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js,sha256=m6ZqiKZ_jzwzVFgC8vkYiwy4lH5fJEMV-LTPVO2Wu40,1175 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js,sha256=NclTlDTiNFX1y0W1Llj10-ZIoXUYd7vDXqyeUJ7v3B4,852 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js,sha256=FTLszcrGaelTW66WV50u_rS6HV0SZxQ6Vhpi2tngC6M,1018 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js,sha256=3PdUk0SpHY-H-h62womw4AyyRMujlGc6_oxW-L1WyOs,831 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js,sha256=BLh0fntrwtwNwlQoiwLkdQOVyNXHdmRpL28p-W5FsDg,1028 +django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js,sha256=fGJ--Aw70Ppzk3EgLjF1V_QvqD2q_ufXjnQIIyZqYgc,768 +django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js,sha256=gn0ddIqTnJX4wk-tWC5gFORJs1dkgIH9MOwLljBuQK0,807 +django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js,sha256=kGxtapwhRFj3u_IhY_7zWZhKgR5CrZmmasT5w-aoXRM,897 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js,sha256=tZ4sqdx_SEcJbiW5-coHDV8FVmElJRA3Z822EFHkjLM,862 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js,sha256=DH6VrnVdR8SX6kso2tzqnJqs32uCpBNyvP9Kxs3ssjI,1195 +django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js,sha256=x9hyjennc1i0oeYrFUHQnYHakXpv7WD7MSF-c9AaTjg,1088 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js,sha256=ImmB9v7g2ZKEmPFUQeXrL723VEjbiEW3YelxeqHEgHc,855 +django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js,sha256=ZT-45ibVwdWnTyo-TqsqW2NjIp9zw4xs5So78KMb_s8,944 +django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js,sha256=hHpEK4eYSoJj_fvA2wl8QSuJluNxh-Tvp6UZm-ZYaeE,900 +django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js,sha256=PSpxrnBpL4SSs9Tb0qdWD7umUIyIoR2V1fpqRQvCXcA,1038 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js,sha256=NCz4RntkJZf8YDDC1TFBvK-nkn-D-cGNy7wohqqaQD4,811 +django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js,sha256=eduKCG76J3iIPrUekCDCq741rnG4xD7TU3E7Lib7sPE,778 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js,sha256=QQjDPQE6GDKXS5cxq2JRjk3MGDvjg3Izex71Zhonbj8,1357 +django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js,sha256=JctLfTpLQ5UFXtyAmgbCvSPUtW0fy1mE7oNYcMI90bI,904 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js,sha256=6gEuKYnJdf8cbPERsw-mtdcgdByUJuLf1QUH0aSajMo,947 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js,sha256=4J4sZtSavxr1vZdxmnub2J0H0qr1S8WnNsTehfdfq4M,1049 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js,sha256=0DFe1Hu9fEDSXgpjPOQrA6Eq0rGb15NRbsGh1U4vEr0,876 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js,sha256=L5jqz8zc5BF8ukrhpI2vvGrNR34X7482dckX-IUuUpA,878 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js,sha256=Aadb6LV0u2L2mCOgyX2cYZ6xI5sDT9OI3V7HwuueivM,938 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js,sha256=bV6emVCE9lY0LzbVN87WKAAAFLUT3kKqEzn641pJ29o,1171 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js,sha256=MnbUcP6pInuBzTW_L_wmXY8gPLGCOcKyzQHthFkImZo,1306 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js,sha256=LPIKwp9gp_WcUc4UaVt_cySlNL5_lmfZlt0bgtwnkFk,925 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js,sha256=oIxJLYLtK0vG2g3s5jsGLn4lHuDgSodxYAWL0ByHRHo,903 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js,sha256=BoT2KdiceZGgxhESRz3W2J_7CFYqWyZyov2YktUo_2w,1109 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js,sha256=7EELYXwb0tISsuvL6eorxzTviMK-oedSvZvEZCMloGU,980 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js,sha256=c6nqUmitKs4_6AlYDviCe6HqLyOHqot2IrvJRGjj1JE,786 +django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js,sha256=saDPLk-2dq5ftKCvW1wddkJOg-mXA-GUoPPVOlSZrIY,1074 +django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js,sha256=mUEGlb-9nQHvzcTYI-1kjsB7JsPRGpLxWbjrJ8URthU,771 +django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js,sha256=dDz8iSp07vbx9gciIqz56wmc2TLHj5v8o6es75vzmZU,775 +django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js,sha256=MixhFDvdRda-wj-TjrN018s7R7E34aQhRjz4baxrdKw,1156 +django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js,sha256=mwTeySsUAgqu_IA6hvFzMyhcSIM1zGhNYKq8G7X_tpM,796 +django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js,sha256=olAdvPQ5qsN9IZuxAKgDVQM-blexUnWTDTXUtiorygI,768 +django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js,sha256=DnDBG9ywBOfxVb2VXg71xBR_tECPAxw7QLhZOXiJ4fo,707 +django/contrib/admin/static/admin/js/vendor/select2/select2.full.js,sha256=ugZkER5OAEGzCwwb_4MvhBKE5Gvmc0S59MKn-dooZaI,173566 +django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js,sha256=XG_auAy4aieWldzMImofrFDiySK-pwJC7aoo9St7rS0,79212 +django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt,sha256=xnYLh4GL4QG4S1G_JWwF_AR18rY9KmrwD3kxq7PTZNw,1103 +django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js,sha256=rtvcVZex5zUbQQpBDEwPXetC28nAEksnAblw2Flt9tA,232381 +django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js,sha256=e2iDfG6V1sfGUB92i5yNqQamsMCc8An0SFzoo3vbylg,125266 +django/contrib/admin/templates/admin/404.html,sha256=zyawWu1I9IxDGBRsks6-DgtLUGDDYOKHfj9YQqPl0AA,282 +django/contrib/admin/templates/admin/500.html,sha256=rZNmFXr9POnc9TdZwD06qkY8h2W5K05vCyssrIzbZGE,551 +django/contrib/admin/templates/admin/actions.html,sha256=pTlhPi66D3Lrm2RQdAWHqUVdyJECbqx1Oj86Fkv-fPk,1245 +django/contrib/admin/templates/admin/app_index.html,sha256=X-ISFsSrON8osoS93ywjM11MLGhrcx-U0o6tJfpWRqY,389 +django/contrib/admin/templates/admin/app_list.html,sha256=ihZHIZLWNwtvmeDnsdXAVEo_mHNiM6X4CHA7y0I9YdA,1716 +django/contrib/admin/templates/admin/auth/user/add_form.html,sha256=5DL3UbNWW2rTvWrpMsxy5XcVNT6_uYv8DjDZZksiVKQ,320 +django/contrib/admin/templates/admin/auth/user/change_password.html,sha256=T_iluw6yjMbD0kQHXLxyUQR8OhReN1WUis3A1rBlGzk,2274 +django/contrib/admin/templates/admin/base.html,sha256=MRUYs02WD0PoUJntbyBJ1bBv0wKsaUW51Tclb-NKSsU,4359 +django/contrib/admin/templates/admin/base_site.html,sha256=3ckWrcAdd7Pw1hk6Zwyknab_Qb-rteV9-mXhMnfo6VI,361 +django/contrib/admin/templates/admin/change_form.html,sha256=f58vbrT4Wv_nzYtV7ohffAOEFw8y91mnaGlemtsOGa8,3051 +django/contrib/admin/templates/admin/change_form_object_tools.html,sha256=C0l0BJF2HuSjIvtY-Yr-ByZ9dePFRrTc-MR-OVJD-AI,403 +django/contrib/admin/templates/admin/change_list.html,sha256=FSuAcw7c_Gb4F2SP8-Wt6oAsFZYgCHnlgQMzL9ux0nk,3258 +django/contrib/admin/templates/admin/change_list_object_tools.html,sha256=-AX0bYTxDsdLtEpAEK3RFpY89tdvVChMAWPYBLqPn48,378 +django/contrib/admin/templates/admin/change_list_results.html,sha256=_beAjUTnFJTVIagZuVcf7XNz_fMseMaNyk1fRtQ-AME,1543 +django/contrib/admin/templates/admin/date_hierarchy.html,sha256=I9Nj9WJb3JM_9ZBHrg4xIFku_a59U-KoqO5yuSaqVJQ,518 +django/contrib/admin/templates/admin/delete_confirmation.html,sha256=GfcMpSIo6Xy4QWX1_oNYilY7c1C8FKSbGWiWfw61VlY,2426 +django/contrib/admin/templates/admin/delete_selected_confirmation.html,sha256=i2sUDTPuSlJqOh_JMKx5VsxOpZC9W5zD94R2XpiNPBk,2341 +django/contrib/admin/templates/admin/edit_inline/stacked.html,sha256=3ebT2hvOWtiv4tN4LCWLdgFy7H5SYNZOGd2WHuHcyrY,2554 +django/contrib/admin/templates/admin/edit_inline/tabular.html,sha256=r3nQ-dWGs2tX4mM7_68YNt6aLoYV-ciiGNz5-R5Zc5Q,4060 +django/contrib/admin/templates/admin/filter.html,sha256=V1sWCmJMSvBC_GzTtJkNWn-FfdzPpcBySERTVH5i8HY,338 +django/contrib/admin/templates/admin/includes/fieldset.html,sha256=DgcBbVUfkho33IMZGEg42Xr9P5y3ZAefFzqkxf74v1Q,1787 +django/contrib/admin/templates/admin/includes/object_delete_summary.html,sha256=OC7VhKQiczmi01Gt_3jyemelerSNrGyDiWghUK6xKEI,192 +django/contrib/admin/templates/admin/index.html,sha256=IJV2pH-Xi8rYmR1TzckraJ3A2fSjzejV6Dpk-oPqCEA,1861 +django/contrib/admin/templates/admin/invalid_setup.html,sha256=F5FS3o7S3l4idPrX29OKlM_azYmCRKzFdYjV_jpTqhE,447 +django/contrib/admin/templates/admin/login.html,sha256=yhk3veXIvM_efQLL4NcjfYWxZKqqAct3hPS6mYaWBJ0,1912 +django/contrib/admin/templates/admin/nav_sidebar.html,sha256=CRALc3xH43rRGk3hkhV_NMsrXGEXQ-XrLvyd3yF8oAs,447 +django/contrib/admin/templates/admin/object_history.html,sha256=hr_yKkciaPU-ljl3XM_87c2q0076YhAQXHy7buayLIc,1472 +django/contrib/admin/templates/admin/pagination.html,sha256=OBvC2HWFaH3wIuk6gzKSyCli51NTaW8vnJFyBOpNo_8,549 +django/contrib/admin/templates/admin/popup_response.html,sha256=Lj8dfQrg1XWdA-52uNtWJ9hwBI98Wt2spSMkO4YBjEk,327 +django/contrib/admin/templates/admin/prepopulated_fields_js.html,sha256=PShGpqQWBBVwQ86r7b-SimwJS0mxNiz8AObaiDOSfvY,209 +django/contrib/admin/templates/admin/search_form.html,sha256=CxonKc0fIOccSuvpIAeMOYGGAf1MJjlRS7jOosPQdkI,1166 +django/contrib/admin/templates/admin/submit_line.html,sha256=DgxKlyJ2b8o5NVWzE47yt_2X-xnbobKjdIVK2Y7jXBU,1052 +django/contrib/admin/templates/admin/widgets/clearable_file_input.html,sha256=NWjHNdkTZMAxU5HWXrOQCReeAO5A6PXBDRWO8S9gSGI,618 +django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html,sha256=Sp46OiJ5ViQMXfSaug4UkqIiXbiGdlQ8GNEhA8kVLUo,341 +django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html,sha256=w18JMKnPKrw6QyqIXBcdPs3YJlTRtHK5HGxj0lVkMlY,54 +django/contrib/admin/templates/admin/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html,sha256=LN8EMnad8qnyi2HIbOes3DkdbGkEsX4R4szGf_KByGM,1490 +django/contrib/admin/templates/admin/widgets/split_datetime.html,sha256=BQ9XNv3eqtvNqZZGW38VBM2Nan-5PBxokbo2Fm_wwCQ,238 +django/contrib/admin/templates/admin/widgets/url.html,sha256=Tf7PwdoKAiimfmDTVbWzRVxxUeyfhF0OlsuiOZ1tHgI,218 +django/contrib/admin/templates/registration/logged_out.html,sha256=PuviqzJh7C6SZJl9yKZXDcxxqXNCTDVfRuEpqvwJiPE,425 +django/contrib/admin/templates/registration/password_change_done.html,sha256=Zmw7eNYw8wa8tem8xVBG5C2Oavcz8Fxsst4xfxzqOdo,592 +django/contrib/admin/templates/registration/password_change_form.html,sha256=-j_Khtxde2DRGu5G9xXZ3PGPMqDfT9U-soEXY6h0MJM,1980 +django/contrib/admin/templates/registration/password_reset_complete.html,sha256=_fc5bDeYBaI5fCUJZ0ZFpmOE2CUqlbk3npGk63uc_Ks,417 +django/contrib/admin/templates/registration/password_reset_confirm.html,sha256=3OqkroQSoGf-jh0xofN4BBWoDKpeqeY8xxuBe_cfBBM,1382 +django/contrib/admin/templates/registration/password_reset_done.html,sha256=SQsksjWN8vPLpvtFYPBFMMqZtLeiB4nesPq2VxpB3Y8,588 +django/contrib/admin/templates/registration/password_reset_email.html,sha256=rqaoGa900-rsUasaGYP2W9nBd6KOGZTyc1PsGTFozHo,612 +django/contrib/admin/templates/registration/password_reset_form.html,sha256=yZ0bRooNSKEyiG2KK8nplisKLQTxGk55rdzZxVybeaM,885 +django/contrib/admin/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/templatetags/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_list.cpython-310.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-310.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-310.pyc,, +django/contrib/admin/templatetags/__pycache__/base.cpython-310.pyc,, +django/contrib/admin/templatetags/__pycache__/log.cpython-310.pyc,, +django/contrib/admin/templatetags/admin_list.py,sha256=oKnqZgQrUlMIeSDeEKKFVtLyuTzszpFgMfPTV1M2Ggk,18492 +django/contrib/admin/templatetags/admin_modify.py,sha256=3t6rainlP3KHTb0OK1Pkr0TlB0PhZ8IC7O8HnRzijMw,4981 +django/contrib/admin/templatetags/admin_urls.py,sha256=GaDOb10w0kPIPYNvlwEaAIqhKvLKpHQDqYBVpOQhXQU,1926 +django/contrib/admin/templatetags/base.py,sha256=SyI_Dwh5OvtdP0DaPNehpvjgZknlJmrucck5tF3eUHY,1474 +django/contrib/admin/templatetags/log.py,sha256=3MT5WKsac8S5H1J2kkM-gasYc9faF91b95TEt3y8E-k,2167 +django/contrib/admin/tests.py,sha256=GZPtUy9fLH7oladvDtZRpUvntv8bq8lmBOhnZs6HI_k,7705 +django/contrib/admin/utils.py,sha256=l8zacnNDFUcABEyKlcShlzfRd-qP4ue5TYVPAT20m88,20151 +django/contrib/admin/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/views/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admin/views/__pycache__/autocomplete.cpython-310.pyc,, +django/contrib/admin/views/__pycache__/decorators.cpython-310.pyc,, +django/contrib/admin/views/__pycache__/main.cpython-310.pyc,, +django/contrib/admin/views/autocomplete.py,sha256=yDp5k-zICP16x-EXY_4ntPX3HewTzcPDLQWQlaHbYEs,4316 +django/contrib/admin/views/decorators.py,sha256=4ndYdYoPLhWsdutME0Lxsmcf6UFP5Z2ou3_pMjgNbw8,639 +django/contrib/admin/views/main.py,sha256=2y45kvfecNj_NEOWtFKs4BSIQkClE65Fb2Tz1PJTsFc,23813 +django/contrib/admin/widgets.py,sha256=MZsb5NtspS_m6dOLQA-GrppJsvOvtVKHWVah7jvWafU,18359 +django/contrib/admindocs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admindocs/__pycache__/__init__.cpython-310.pyc,, +django/contrib/admindocs/__pycache__/apps.cpython-310.pyc,, +django/contrib/admindocs/__pycache__/middleware.cpython-310.pyc,, +django/contrib/admindocs/__pycache__/urls.cpython-310.pyc,, +django/contrib/admindocs/__pycache__/utils.cpython-310.pyc,, +django/contrib/admindocs/__pycache__/views.cpython-310.pyc,, +django/contrib/admindocs/apps.py,sha256=bklhU4oaTSmPdr0QzpVeuNT6iG77QM1AgiKKZDX05t4,216 +django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo,sha256=MrncgyILquCzFENxkWfJdzauVt6m3yPnQc1sDR4bCMg,2421 +django/contrib/admindocs/locale/af/LC_MESSAGES/django.po,sha256=yHYO9ZMBSGQLiSxd9PLzzNY7GT518wb7M-JAzTjSbw8,5392 +django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo,sha256=MwAJ0TMsgRN4wrwlhlw3gYCfZK5IKDzNPuvjfJS_Eug,7440 +django/contrib/admindocs/locale/ar/LC_MESSAGES/django.po,sha256=KSmZCjSEizBx5a6yN_u0FPqG5QoXsTV9gdJkqWC8xC8,8052 +django/contrib/admindocs/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=JfZf3pQPepUkAqcWj4XEKHGVg59E8U4sHI7wXxZ1F9Q,7445 +django/contrib/admindocs/locale/ar_DZ/LC_MESSAGES/django.po,sha256=fQLd1eOQppL7PFnjqDYq1cEJchxzNxi5ALOldU_68XA,7942 +django/contrib/admindocs/locale/ast/LC_MESSAGES/django.mo,sha256=d4u-2zZXnnueWm9CLSnt4TRWgZk2NMlrA6gaytJ2gdU,715 +django/contrib/admindocs/locale/ast/LC_MESSAGES/django.po,sha256=TUkc-Hm4h1kD0NKyndteW97jH6bWcJMFXUuw2Bd62qo,4578 +django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo,sha256=yWjmqVrGit7XjELYepZ9R48eOKma5Wau2RkkSSiJrgc,1687 +django/contrib/admindocs/locale/az/LC_MESSAGES/django.po,sha256=wGdq-g4u8ssHHvODJB-knjZdrP6noxRW9APn_kmOz7w,4993 +django/contrib/admindocs/locale/be/LC_MESSAGES/django.mo,sha256=VZl0yvgbo0jwQpf-s472jagbUj83A3twnxddQGwGW5c,8163 +django/contrib/admindocs/locale/be/LC_MESSAGES/django.po,sha256=Z8ZtS_t5Tc7iy1p4TTrsKZqiMJl94f1jiTWuv1sep3A,8728 +django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo,sha256=iLkCZ9SUrxFbVuPBiPUajfPYGL928x9NryBtoiaZqss,8236 +django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po,sha256=1OlWLLvowOMsnrZ24R_yoXWuE1RpcLHSpIFpfmIB304,8983 +django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo,sha256=NOKVcE8id9G1OctSly4C5lm64CgEF8dohX-Pdyt4kCM,3794 +django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po,sha256=6M7LjIEjvDTjyraxz70On_TIsgqJPLW7omQ0Fz_zyfQ,6266 +django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo,sha256=UsPTado4ZNJM_arSMXyuBGsKN-bCHXQZdFbh0GB3dtg,1571 +django/contrib/admindocs/locale/br/LC_MESSAGES/django.po,sha256=SHOxPSgozJbOkm8u5LQJ9VmL58ZSBmlxfOVw1fAGl2s,5139 +django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo,sha256=clvhu0z3IF5Nt0tZ85hOt4M37pnGEWeIYumE20vLpsI,1730 +django/contrib/admindocs/locale/bs/LC_MESSAGES/django.po,sha256=1-OrVWFqLpeXQFfh7JNjJtvWjVww7iB2s96dcSgLy90,5042 +django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo,sha256=nI2ctIbZVrsaMbJQGIHQCjwqJNTnH3DKxwI2dWR6G_w,6650 +django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po,sha256=hPjkw0bkoUu-yKU8XYE3ji0NG4z5cE1LGonYPJXeze4,7396 +django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo,sha256=dJ-3fDenE42f6XZFc-yrfWL1pEAmSGt2j1eWAyy-5OQ,6619 +django/contrib/admindocs/locale/cs/LC_MESSAGES/django.po,sha256=uU4n9PsiI96O0UpJzL-inVzB1Kx7OB_SbLkjrFLuyVA,7227 +django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo,sha256=sYeCCq0CMrFWjT6rKtmFrpC09OEFpYLSI3vu9WtpVTY,5401 +django/contrib/admindocs/locale/cy/LC_MESSAGES/django.po,sha256=GhdikiXtx8Aea459uifQtBjHuTlyUeiKu0_rR_mDKyg,6512 +django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo,sha256=vmsIZeMIVpLkSdJNS0G6alAmBBEtLDBLnOd-P3dSOAs,6446 +django/contrib/admindocs/locale/da/LC_MESSAGES/django.po,sha256=bSoTGPcE7MdRfAtBybZT9jsuww2VDH9t5CssaxSs_GU,7148 +django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo,sha256=ReSz0aH1TKT6AtP13lWoONnwNM2OGo4jK9fXJlo75Hc,6567 +django/contrib/admindocs/locale/de/LC_MESSAGES/django.po,sha256=tVkDIPF_wYb_KaJ7PF9cZyBJoYu6RpznoM9JIk3RYN4,7180 +django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo,sha256=K_QuInKk1HrrzQivwJcs_2lc1HreFj7_R7qQh3qMTPY,6807 +django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po,sha256=flF1D0gfTScuC_RddC9njLe6RrnqnksiRxwODVA9Vqw,7332 +django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo,sha256=1x0sTZwWbGEURyRaSn4ONvTPXHwm7XemNlcun9Nm1QI,8581 +django/contrib/admindocs/locale/el/LC_MESSAGES/django.po,sha256=GebfJfW0QPzAQyBKz1Km9a3saCpAWT7d_Qe2nCBvGn4,9320 +django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admindocs/locale/en/LC_MESSAGES/django.po,sha256=pEypE71l-Ude2e3XVf0tkBpGx6BSYNqBagWnSYmEbxI,10688 +django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo,sha256=BQ54LF9Tx88m-pG_QVz_nm_vqvoy6pVJzL8urSO4l1Q,486 +django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po,sha256=ho7s1uKEs9FGooyZBurvSjvFz1gDSX6R4G2ZKpF1c9Q,5070 +django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo,sha256=xKGbswq1kuWCbn4zCgUQUb58fEGlICIOr00oSdCgtU4,1821 +django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po,sha256=No09XHkzYVFBgZqo7bPlJk6QD9heE0oaI3JmnrU_p24,4992 +django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo,sha256=114OOVg9hP0H0UU2aQngCm0wE7zEEAp7QFMupOuWCfQ,6071 +django/contrib/admindocs/locale/eo/LC_MESSAGES/django.po,sha256=h8P3lmvBaJ8J2xiytReJvI8iGK0gCe-LPK27kWxSNKI,6799 +django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo,sha256=wVt9I5M6DGKZFhPhYuS2yKRGVzSROthx98TFiJvJA80,6682 +django/contrib/admindocs/locale/es/LC_MESSAGES/django.po,sha256=F72OFWbIZXvopNMzy7eIibNKc5EM0jsYgbN4PobD6tc,7602 +django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo,sha256=mZ7OKAmlj2_FOabKsEiWycxiKLSLCPFldponKNxINjs,6658 +django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po,sha256=deaOq0YMCb1B1PHWYUbgUrQsyXFutn4wQ2BAXiyzugA,7257 +django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo,sha256=KFjQyWtSxH_kTdSJ-kNUDAFt3qVZI_3Tlpg2pdkvJfs,6476 +django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po,sha256=dwrTVjYmueLiVPu2yiJ_fkFF8ZeRntABoVND5H2WIRI,7038 +django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo,sha256=3hZiFFVO8J9cC624LUt4lBweqmpgdksRtvt2TLq5Jqs,1853 +django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po,sha256=gNmx1QTbmyMxP3ftGXGWJH_sVGThiSe_VNKkd7M9jOY,5043 +django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo,sha256=sMwJ7t5GqPF496w-PvBYUneZ9uSwmi5jP-sWulhc6BM,6663 +django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po,sha256=ZOcE0f95Q6uD9SelK6bQlKtS2c3JX9QxNYCihPdlM5o,7201 +django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo,sha256=JQHVKehV0sxNaBQRqbsN-Of22CMV70bQ9TUId3QDudY,6381 +django/contrib/admindocs/locale/et/LC_MESSAGES/django.po,sha256=qrS3cPEy16hEi1857jvqsmr9zHF9_AkkJUw4mKimg98,7096 +django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo,sha256=WHgK7vGaqjO4MwjBkWz2Y3ABPXCqfnwSGelazRhOiuo,6479 +django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po,sha256=718XgJN7UQcHgE9ku0VyFp7Frs-cvmCTO1o-xS5kpqc,7099 +django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo,sha256=Qrkrb_CHPGymnXBoBq5oeTs4W54R6nLz5hLIWH63EHM,7499 +django/contrib/admindocs/locale/fa/LC_MESSAGES/django.po,sha256=L-rxiKqUmlQgrPTLQRaS50woZWB9JuEamJpgDpLvIXw,8251 +django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo,sha256=SzuPvgeiaBwABvkJbOoTHsbP7juAuyyMWAjENr50gYk,6397 +django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po,sha256=jn4ZMVQ_Gh6I-YLSmBhlyTn5ICP5o3oj7u0VKpV2hnI,6972 +django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo,sha256=dD92eLXIDeI-a_BrxX1G49qRwLS4Vt56bTP9cha5MeE,6755 +django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po,sha256=hiUeHTul4Z3JWmkClGZmD5Xn4a1Tj1A5OLRfKU5Zdmo,7329 +django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo,sha256=_xVO-FkPPoTla_R0CzktpRuafD9fuIP_G5N-Q08PxNg,476 +django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po,sha256=b3CRH9bSUl_jjb9s51RlvFXp3bmsmuxTfN_MTmIIVNA,5060 +django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo,sha256=PkY5sLKd7gEIE2IkuuNJXP5RmjC-D4OODRv6KCCUDX8,1940 +django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po,sha256=-l6VME96KR1KKNACVu7oHzlhCrnkC1PaJQyskOUqOvk,5211 +django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo,sha256=k5-Ov9BkwYHZ_IvIxQdHKVBdOUN7kWGft1l7w5Scd5o,6941 +django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po,sha256=FyvfRNkSrEZo8x1didB6nFHYD54lZfKSoAGcwJ2wLso,7478 +django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo,sha256=CYtHrSyH_Lw0YxmmmndEnMPU-cw5TMr-8NHUjz6v7JM,2265 +django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po,sha256=0S2CJju3EIiEp6kqJIn0Jl1IyRAg2-5ovYMOW0YRtVA,5188 +django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo,sha256=mJKr2rC_1OWQpRaRCecnz01YDEu5APFhJHqRHgGQxXA,6743 +django/contrib/admindocs/locale/he/LC_MESSAGES/django.po,sha256=sYlIetORzAXaKk7DAhr-6J0TGucV7RsOftT9Zilz6yE,7427 +django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo,sha256=sZhObIxqrmFu5Y-ZOQC0JGM3ly4IVFr02yqOOOHnDag,2297 +django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po,sha256=X6UfEc6q0BeaxVP_C4priFt8irhh-YGOUUzNQyVnEYY,5506 +django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo,sha256=fMsayjODNoCdbpBAk9GHtIUaGJGFz4sD9qYrguj-BQA,2550 +django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po,sha256=qi2IB-fBkGovlEz2JAQRUNE54MDdf5gjNJWXM-dIG1s,5403 +django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo,sha256=4CbZ95VHJUg3UNt-FdzPtUtHJLralgnhadz-evigiFA,6770 +django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po,sha256=ty8zWmqY160ZpSbt1-_2iY2M4RIL7ksh5-ggQGc_TO8,7298 +django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo,sha256=ATEt9wE2VNQO_NMcwepgxpS7mYXdVD5OySFFPWpnBUA,6634 +django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po,sha256=3XKQrlonyLXXpU8xeS1OLXcKmmE2hiBoMJN-QZ3k82g,7270 +django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo,sha256=KklX2loobVtA6PqHOZHwF1_A9YeVGlqORinHW09iupI,1860 +django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po,sha256=Z7btOCeARREgdH4CIJlVob_f89r2M9j55IDtTLtgWJU,5028 +django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo,sha256=2HZrdwFeJV4Xk2HIKsxp_rDyBrmxCuRb92HtFtW8MxE,6343 +django/contrib/admindocs/locale/id/LC_MESSAGES/django.po,sha256=O01yt7iDXvEwkebUxUlk-vCrLR26ebuqI51x64uqFl4,7041 +django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo,sha256=5t9Vurrh6hGqKohwsZIoveGeYCsUvRBRMz9M7k9XYY8,464 +django/contrib/admindocs/locale/io/LC_MESSAGES/django.po,sha256=SVZZEmaS1WbXFRlLLGg5bzUe09pXR23TeJtHUbhyl0w,5048 +django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo,sha256=pEr-_MJi4D-WpNyFaQe3tVKVLq_9V-a4eIF18B3Qyko,1828 +django/contrib/admindocs/locale/is/LC_MESSAGES/django.po,sha256=-mD5fFnL6xUqeW4MITzm8Lvx6KXq4C9DGsEM9kDluZ8,5045 +django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo,sha256=AzCkkJ8x-V38XSOdOG2kMSUujcn0mD8TIvdAeNT6Qcw,6453 +django/contrib/admindocs/locale/it/LC_MESSAGES/django.po,sha256=SUsGtCKkCVoj5jaM6z_-JQR8kv8W4Wv_OE26hpOb96s,7171 +django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo,sha256=KoPwCbH9VlKoP_7zTEjOzPsHZ7jVWl2grQRckQmshw4,7358 +django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po,sha256=6ZTqM2qfBS_j5aLH52yJPYW4e4X5MqiQFdqV1fmEQGg,8047 +django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo,sha256=w2cHLI1O3pVt43H-h71cnNcjNNvDC8y9uMYxZ_XDBtg,4446 +django/contrib/admindocs/locale/ka/LC_MESSAGES/django.po,sha256=omKVSzNA3evF5Mk_Ud6utHql-Do7s9xDzCVQGQA0pSg,6800 +django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo,sha256=XTuWnZOdXhCFXEW4Hp0zFtUtAF0wJHaFpQqoDUTWYGw,1289 +django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po,sha256=lQWewMZncWUvGhpkgU_rtwWHcgAyvhIkrDfjFu1l-d8,4716 +django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo,sha256=mmhLzn9lo4ff_LmlIW3zZuhE77LoSUfpaMMMi3oyi38,1587 +django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po,sha256=72sxLw-QDSFnsH8kuzeQcV5jx7Hf1xisBmxI8XqSCYw,5090 +django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo,sha256=Fff1K0qzialXE_tLiGM_iO5kh8eAmQhPZ0h-eB9iNOU,1476 +django/contrib/admindocs/locale/km/LC_MESSAGES/django.po,sha256=E_CaaYc4GqOPgPh2t7iuo0Uf4HSQQFWAoxSOCG-uEGU,4998 +django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo,sha256=lisxE1zzW-Spdm7hIzXxDAfS7bM-RdrAG_mQVwz9WMU,1656 +django/contrib/admindocs/locale/kn/LC_MESSAGES/django.po,sha256=u6JnB-mYoYWvLl-2pzKNfeNlT1s6A2I3lRi947R_0yA,5184 +django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo,sha256=nVBVLfXUlGQCeF2foSQ2kksBmR3KbweXdbD6Kyq-PrU,6563 +django/contrib/admindocs/locale/ko/LC_MESSAGES/django.po,sha256=y2YjuXM3p0haXrGpxRtm6I84o75TQaMeT4xbHCg7zOM,7342 +django/contrib/admindocs/locale/ky/LC_MESSAGES/django.mo,sha256=HEJo4CLoIOWpK-MPcTqLhbNMA8Mt3totYN1YbJ_SNn4,7977 +django/contrib/admindocs/locale/ky/LC_MESSAGES/django.po,sha256=VaSXjz8Qlr2EI8f12gtziN7yA7IWsaVoEzL3G6dERXs,8553 +django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo,sha256=N0hKFuAdDIq5clRKZirGh4_YDLsxi1PSX3DVe_CZe4k,474 +django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po,sha256=B46-wRHMKUMcbvMCdojOCxqIVL5qVEh4Czo20Qgz6oU,5058 +django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo,sha256=KOnpaVeomKJIHcVLrkeRVnaqQHzFdYM_wXZbbqxWs4g,6741 +django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po,sha256=-uzCS8193VCZPyhO8VOi11HijtBG9CWVKStFBZSXfI4,7444 +django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo,sha256=5PAE_peuqlRcc45pm6RsSqnBpG-o8OZpfdt2aasYM2w,6449 +django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po,sha256=_mFvAQT1ZVBuDhnWgKY3bVQUWA8DoEf-HFAEsMfkGuU,7085 +django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo,sha256=8H9IpRASM7O2-Ql1doVgM9c4ybZ2KcfnJr12PpprgP4,8290 +django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po,sha256=Uew7tEljjgmslgfYJOP9JF9ELp6NbhkZG_v50CZgBg8,8929 +django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo,sha256=bm4tYwcaT8XyPcEW1PNZUqHJIds9CAq3qX_T1-iD4k4,6865 +django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po,sha256=yNINX5M7JMTbYnFqQGetKGIXqOjGJtbN2DmIW9BKQ_c,8811 +django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo,sha256=KqdcvSpqmjRfA8M4nGB9Cnu9Auj4pTu9aH07XtCep3I,7607 +django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po,sha256=PGhlnzDKyAIRzaPCbNujpxSpf_JaOG66LK_NMlnZy6I,8316 +django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo,sha256=LDGC7YRyVBU50W-iH0MuESunlRXrNfNjwjXRCBdfFVg,468 +django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po,sha256=5cUgPltXyS2Z0kIKF5ER8f5DuBhwmAINJQyfHj652d0,5052 +django/contrib/admindocs/locale/ms/LC_MESSAGES/django.mo,sha256=vgoSQlIQeFWaVfJv3YK9_0FOywWwxLhWGICKBdxcqJY,6557 +django/contrib/admindocs/locale/ms/LC_MESSAGES/django.po,sha256=Qy_NjgqwEwLGk4oaHB4Np3dVbPeCK2URdI73S73IZLE,7044 +django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo,sha256=AsdUmou0FjCiML3QOeXMdbHiaSt2GdGMcEKRJFonLOQ,1721 +django/contrib/admindocs/locale/my/LC_MESSAGES/django.po,sha256=c75V-PprKrWzgrHbfrZOpm00U_zZRzxAUr2U_j8MF4w,5189 +django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo,sha256=qlzN0-deW2xekojbHi2w6mYKeBe1Cf1nm8Z5FVrmYtA,6308 +django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po,sha256=a60vtwHJXhjbRAtUIlO0w3XfQcQ0ljwmwFG3WbQ7PNo,6875 +django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo,sha256=fWPAUZOX9qrDIxGhVVouJCVDWEQLybZ129wGYymuS-c,2571 +django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po,sha256=wb8pCm141YfGSHVW84FnAvsKt5KnKvzNyzGcPr-Wots,5802 +django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo,sha256=nZwZekyuJi9U8WhJHasdQ05O1Qky8kJzj3i6c4lj3rw,6463 +django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po,sha256=aP59hIiCQwGCKyHnoJXYJIChzYMbNFlb2IotTX4WBwU,7188 +django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo,sha256=tIOU1WrHkAfxD6JBpdakiMi6pVzzvIg0jun6gii-D08,6299 +django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po,sha256=oekYY3xjjM2sPnHv_ZXxAti1ySPF-HxLrvLLk7Izibk,6824 +django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo,sha256=zSQBgSj4jSu5Km0itNgDtbkb1SbxzRvQeZ5M9sXHI8k,2044 +django/contrib/admindocs/locale/os/LC_MESSAGES/django.po,sha256=hZlMmmqfbGmoiElGbJg7Fp791ZuOpRFrSu09xBXt6z4,5215 +django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo,sha256=yFeO0eZIksXeDhAl3CrnkL1CF7PHz1PII2kIxGA0opQ,1275 +django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po,sha256=DA5LFFLOXHIJIqrrnj9k_rqL-wr63RYX_i-IJFhBuc0,4900 +django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo,sha256=DHxRNP6YK8qocDqSd2DZg7n-wPp2hJSbjNBLFti7U8o,6633 +django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po,sha256=mRjleE2-9r9TfseHWeyjvRwzBZP_t2LMvihq8n_baU8,7575 +django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo,sha256=WcXhSlbGdJgVMvydkPYYee7iOQ9SYdrLkquzgIBhVWU,6566 +django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po,sha256=J98Hxa-ApyzRevBwcAldK9bRYbkn5DFw3Z5P7SMEwx0,7191 +django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo,sha256=L8t589rbg4vs4HArLpgburmMufZ6BTuwxxkv1QUetBA,6590 +django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po,sha256=EG4xELZ8emUIWB78cw8gFeiqTiN9UdAuEaXHyPyNtIE,7538 +django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo,sha256=9K8Sapn6sOg1wtt2mxn7u0cnqPjEHH70qjwM-XMPzNA,6755 +django/contrib/admindocs/locale/ro/LC_MESSAGES/django.po,sha256=b4AsPjWBYHQeThAtLP_TH4pJitwidtoPNkJ7dowUuRg,7476 +django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo,sha256=9pIPv2D0rq29vrBNWZENM_SOdNpaPidxmgT20hWtBis,8434 +django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po,sha256=BTlxkS4C0DdfC9QJCegXwi5ejfG9pMsAdfy6UJzec3s,9175 +django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo,sha256=GtiqSwQxKsrC-HBexRMuV3qQhZa8vJeukTpeJdXxsz4,6639 +django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po,sha256=45J2eddF99_xWbWUoUgQ5NrawMYNreUWpeyXHF6KjsI,7339 +django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo,sha256=FMg_s9ZpeRD42OsSF9bpe8pRQ7wP7-a9WWnaVliqXpU,6508 +django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po,sha256=JWO_WZAwBpXw-4FoB7rkWXGhi9aEVq1tH2fOC69rcgg,7105 +django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo,sha256=XvNDzCc3-Hh5Pz7SHhG8zCT_3dtqGzBLkDqhim4jJpc,6551 +django/contrib/admindocs/locale/sq/LC_MESSAGES/django.po,sha256=0GZvLpxbuYln7GrTsFyzgjIleSw6Z9IRSPgAWWdx6Eo,7165 +django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo,sha256=PyE8DXRYELzSs4RWh1jeADXOPrDEN3k-nLr8sbM1Ssw,3672 +django/contrib/admindocs/locale/sr/LC_MESSAGES/django.po,sha256=ri7v9WHXORY-3Dl-YDKGsCFfQzH-a5y8t1vT6yziIyo,6108 +django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=au90IT43VR162L2jEsYqhRpso2dvOjpCPSCFiglokTc,1932 +django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po,sha256=tJ4tHLJj0tDaVZba3WIkI0kg95_jEYWTmqXD0rFb6T8,5140 +django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo,sha256=hoeSXXIKXPNwIqJiNUhFsiK5F_Jd5PzJV8o6mDiVv18,6230 +django/contrib/admindocs/locale/sv/LC_MESSAGES/django.po,sha256=P6Ngt4ta0jvLy8MIFE5yjwM9QVYDvZj2dMbs01GevEM,7036 +django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo,sha256=pyJfGL7UdPrJAVlCB3YimXxTjTfEkoZQWX-CSpDkcWc,1808 +django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po,sha256=SIywrLX1UGx4OiPxoxUYelmQ1YaY2LMa3dxynGQpHp8,4929 +django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo,sha256=8SjQ9eGGyaZGhkuDoZTdtYKuqcVyEtWrJuSabvNRUVM,1675 +django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po,sha256=k593yzVqpSQOsdpuF-rdsSLwKQU8S_QFMRpZXww__1A,5194 +django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo,sha256=eAzNpYRy_G1erCcKDAMnJC4809ITRHvJjO3vpyAC_mk,1684 +django/contrib/admindocs/locale/te/LC_MESSAGES/django.po,sha256=oDg_J8JxepFKIe5m6lDKVC4YWQ_gDLibgNyQ3508VOM,5204 +django/contrib/admindocs/locale/tg/LC_MESSAGES/django.mo,sha256=jSMmwS6F_ChDAZDyTZxRa3YuxkXWlO-M16osP2NLRc0,7731 +django/contrib/admindocs/locale/tg/LC_MESSAGES/django.po,sha256=mewOHgRsFydk0d5IY3jy3rOWa6uHdatlSIvFNZFONsc,8441 +django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo,sha256=bHK49r45Q1nX4qv0a0jtDja9swKbDHHJVLa3gM13Cb4,2167 +django/contrib/admindocs/locale/th/LC_MESSAGES/django.po,sha256=_GMgPrD8Zs0lPKQOMlBmVu1I59yXSV42kfkrHzeiehY,5372 +django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo,sha256=L1iBsNGqqfdNkZZmvnnBB-HxogAgngwhanY1FYefveE,6661 +django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po,sha256=D4vmznsY4icyKLXQUgAL4WZL5TOUZYVUSCJ4cvZuFg8,7311 +django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo,sha256=pQmAQOPbrBVzBqtoQ0dsFWFwC6LxA5mQZ9QPqL6pSFw,1869 +django/contrib/admindocs/locale/tt/LC_MESSAGES/django.po,sha256=NCLv7sSwvEficUOSoMJlHGqjgjYvrvm2V3j1Gkviw80,5181 +django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo,sha256=hwDLYgadsKrQEPi9HiuMWF6jiiYUSy4y-7PVNJMaNpY,618 +django/contrib/admindocs/locale/udm/LC_MESSAGES/django.po,sha256=29fpfn4p8KxxrBdg4QB0GW_l8genZVV0kYi50zO-qKs,5099 +django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo,sha256=G-3yCDj2jK7ZTu80YXGJ_ZR1E7FejbLxTFe866G4Pr0,8468 +django/contrib/admindocs/locale/uk/LC_MESSAGES/django.po,sha256=bbWzP-gpbslzbTBc_AO7WBNmtr3CkLOwkSJHI0Z_dTA,9330 +django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo,sha256=VNg9o_7M0Z2LC0n3_-iwF3zYmncRJHaFqqpxuPmMq84,1836 +django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po,sha256=QTg85c4Z13hMN_PnhjaLX3wx6TU4SH4hPTzNBfNVaMU,5148 +django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo,sha256=F6dyo00yeyUND_w1Ocm9SL_MUdXb60QQpmAQPto53IU,1306 +django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po,sha256=JrVKjT848Y1cS4tpH-eRivFNwM-cUs886UEhY2FkTPw,4836 +django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=ngPlxN85wGOMKoo3OK3wUQeikoaxPKqAIsgw2_0ovN4,6075 +django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.po,sha256=TNdJGJCAi0OijBN6w23SwKieZqNqkgNt2qdlPfY-r20,6823 +django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=7c2QywaTzF_GX8T2PUknQ_PN5s0Cx37_cO-walIg8mk,4725 +django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po,sha256=uX-3zu8RQdntg__qYBweKtcuBgLsXPUYApf4bQx9eSU,6153 +django/contrib/admindocs/middleware.py,sha256=owqLbigBtxKmhPQmz767KOAkN3nKRIJrwZAUuHRIAQM,1329 +django/contrib/admindocs/templates/admin_doc/bookmarklets.html,sha256=PnfojSYh6lJA03UPjWbvxci64CNPQmrhJhycdyqlT5U,1281 +django/contrib/admindocs/templates/admin_doc/index.html,sha256=o710lPn-AHBJfKSUS6x1eUjAOZYRO9dbnuq_Cg7HEiY,1369 +django/contrib/admindocs/templates/admin_doc/missing_docutils.html,sha256=f8CcVOHCgUmbG_V56rVLV1tttQYPdkcxAHY_IWiMPK4,786 +django/contrib/admindocs/templates/admin_doc/model_detail.html,sha256=0O5-Kxf8RNyZ_slYJ1kq26HmKoarGMkf0S27fqhrFYE,1880 +django/contrib/admindocs/templates/admin_doc/model_index.html,sha256=7fgybgDWYcWZaDPgf25DxFkdxtnrqnpLem7iVmPQmLk,1346 +django/contrib/admindocs/templates/admin_doc/template_detail.html,sha256=C_shsOpJiW0Rngv8ZSXi12dgoepUUCqU3dPdaq9Bmio,1049 +django/contrib/admindocs/templates/admin_doc/template_filter_index.html,sha256=U2HBVHXtgCqUp9hLuOMVqCxBbXyYMMgAORG8fziN7uc,1775 +django/contrib/admindocs/templates/admin_doc/template_tag_index.html,sha256=S4U-G05yi1YIlFEv-HG20bDiq4rhdiZCgebhVBzNzdY,1731 +django/contrib/admindocs/templates/admin_doc/view_detail.html,sha256=u2rjpM0cLlHxSY-Na7wxqnv76zaGf0P1FgdnHl9XqdQ,928 +django/contrib/admindocs/templates/admin_doc/view_index.html,sha256=ZLfmxMkVlPYETRFnjLmU3bagve4ZvY1Xzsya1Lntgkw,1734 +django/contrib/admindocs/urls.py,sha256=zUZG14KLznM6CVtoxnCsJEa7TRwKRN44XLNAp9EgUy8,1310 +django/contrib/admindocs/utils.py,sha256=Gnbj3YXh0yZzs0vFa-pbxAe0GS4Pkg4tZmQ3djFuPso,8061 +django/contrib/admindocs/views.py,sha256=JkVD_O0Wr2daO_sHrxEeCjJX6OvW4_rfke0FEpieHZk,18559 +django/contrib/auth/__init__.py,sha256=RfV_3QgS1JKo_ooxEC90Jik4QXP7xxkzxkx3CLje6uw,7974 +django/contrib/auth/__pycache__/__init__.cpython-310.pyc,, +django/contrib/auth/__pycache__/admin.cpython-310.pyc,, +django/contrib/auth/__pycache__/apps.cpython-310.pyc,, +django/contrib/auth/__pycache__/backends.cpython-310.pyc,, +django/contrib/auth/__pycache__/base_user.cpython-310.pyc,, +django/contrib/auth/__pycache__/checks.cpython-310.pyc,, +django/contrib/auth/__pycache__/context_processors.cpython-310.pyc,, +django/contrib/auth/__pycache__/decorators.cpython-310.pyc,, +django/contrib/auth/__pycache__/forms.cpython-310.pyc,, +django/contrib/auth/__pycache__/hashers.cpython-310.pyc,, +django/contrib/auth/__pycache__/middleware.cpython-310.pyc,, +django/contrib/auth/__pycache__/mixins.cpython-310.pyc,, +django/contrib/auth/__pycache__/models.cpython-310.pyc,, +django/contrib/auth/__pycache__/password_validation.cpython-310.pyc,, +django/contrib/auth/__pycache__/signals.cpython-310.pyc,, +django/contrib/auth/__pycache__/tokens.cpython-310.pyc,, +django/contrib/auth/__pycache__/urls.cpython-310.pyc,, +django/contrib/auth/__pycache__/validators.cpython-310.pyc,, +django/contrib/auth/__pycache__/views.cpython-310.pyc,, +django/contrib/auth/admin.py,sha256=jOLuaoiasplhn_HWMqqAo9VdQpDAVIfGPBFwpdMopVQ,9020 +django/contrib/auth/apps.py,sha256=JE5zuVw7Tx6NFULN_u8sOxs0OnHczMC9bM0N_m1xsmA,1224 +django/contrib/auth/backends.py,sha256=I66mtqQbHZBTzTfp1jWnFnmWaLDN3GBUoG2Tj492zp4,8578 +django/contrib/auth/base_user.py,sha256=KpR-mxMFOXQwZfaJlVUfjdxCrLAiuajwM0jF0UYEkoQ,4484 +django/contrib/auth/checks.py,sha256=q05m4ylm3r3z8t7BPKeJLlpz5qfv6HOiPNcEl6sgAfw,8442 +django/contrib/auth/common-passwords.txt.gz,sha256=CnCdMuzzpa5EVwTpCqtO7-x3CIPsy47PWWw7GUT9C5M,81355 +django/contrib/auth/context_processors.py,sha256=8BbvdbTVPl8GVgB5-2LTzx6FrGsMzev-E7JMnUgr-rM,1911 +django/contrib/auth/decorators.py,sha256=YWxmna4E6nQSgNzEpcNkW6aoawqVGDmUnRoOJqZAxhs,2901 +django/contrib/auth/forms.py,sha256=YgfDipDFlWLAtuhFeUwPpOoKa_gkSAJXVB9zxFfr8QQ,16433 +django/contrib/auth/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/auth/handlers/__pycache__/__init__.cpython-310.pyc,, +django/contrib/auth/handlers/__pycache__/modwsgi.cpython-310.pyc,, +django/contrib/auth/handlers/modwsgi.py,sha256=bTXKVMezywsn1KA2MVyDWeHvTNa2KrwIxn2olH7o_5I,1248 +django/contrib/auth/hashers.py,sha256=p05t7lpA9HZWgN86L8MtkBoCeDP340sL1WM8V1hKeAs,27821 +django/contrib/auth/locale/af/LC_MESSAGES/django.mo,sha256=UKEGdzrpTwNnuhPcejOS-682hL88yV83xh-55dMZzyg,7392 +django/contrib/auth/locale/af/LC_MESSAGES/django.po,sha256=GFM0MbuRB9axSqvFQzZXhyeZF9JTKqoMMdfNEgNQVFY,7618 +django/contrib/auth/locale/ar/LC_MESSAGES/django.mo,sha256=7LhxFfL9y6RAfZ8PU-1lKI2V02LbHxXtB1UAf_vXpuc,10040 +django/contrib/auth/locale/ar/LC_MESSAGES/django.po,sha256=2QIaioY0RedAB0CFKVZLhGoCnhLzgUh84sAR7i6QUnQ,10520 +django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=s6EoUozLpEw-OT2WllVMl8SwKrkBmIWgGO9qbG80xsQ,10167 +django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.po,sha256=P7GHKRC3hZiyVtbfzVGTcY81FuAGf0LFUgR6TZSEwfY,10494 +django/contrib/auth/locale/ast/LC_MESSAGES/django.mo,sha256=Pt3gYY3j8Eroo4lAEmf-LR6u9U56mpE3vqLhjR4Uq-o,2250 +django/contrib/auth/locale/ast/LC_MESSAGES/django.po,sha256=Kiq4s8d1HnYpo3DQGlgUl3bOkxmgGW8CvGp9AbryRk8,5440 +django/contrib/auth/locale/az/LC_MESSAGES/django.mo,sha256=h1bem16bDuYOFR7NEGt2b3ssLOXMHqeWmnZtlni4e9g,7448 +django/contrib/auth/locale/az/LC_MESSAGES/django.po,sha256=euNyhutfYGtuMhUHpGJrLVXnlhPEGkJOV4d_gEJn5no,7735 +django/contrib/auth/locale/be/LC_MESSAGES/django.mo,sha256=PKHL5EabL4jB0bQkw6GGiWhUK56Wa6tJxzZ09ymAF-M,10033 +django/contrib/auth/locale/be/LC_MESSAGES/django.po,sha256=ncUrvZfc57_WF38MxBV_rpLJeMcIg14D6d2M8NvLogk,10355 +django/contrib/auth/locale/bg/LC_MESSAGES/django.mo,sha256=iCuCi9MbjhsOUaUh2-OR_Ox9odgtBFSwyzJhmIOH9iQ,9466 +django/contrib/auth/locale/bg/LC_MESSAGES/django.po,sha256=NGss8TqtnQ_KrEtl433W8y3dbgYoezne1w2ylqGrn7s,9994 +django/contrib/auth/locale/bn/LC_MESSAGES/django.mo,sha256=cJSawQn3rNh2I57zK9vRi0r1xc598Wr26AyHh6D50ZQ,5455 +django/contrib/auth/locale/bn/LC_MESSAGES/django.po,sha256=5Vqd4n9ab98IMev4GHLxpO7f4r9nnhC3Nfx27HQNd8s,7671 +django/contrib/auth/locale/br/LC_MESSAGES/django.mo,sha256=nxLj88BBhT3Hudev1S_BRC8P6Jv7eoR8b6CHGt5eoPo,1436 +django/contrib/auth/locale/br/LC_MESSAGES/django.po,sha256=rFo68wfXMyju633KCAhg0Jcb3GVm3rk4opFQqI89d6Y,5433 +django/contrib/auth/locale/bs/LC_MESSAGES/django.mo,sha256=jDjP1qIs02k6RixY9xy3V7Cr6zi-henR8nDnhqNG18s,3146 +django/contrib/auth/locale/bs/LC_MESSAGES/django.po,sha256=NOICHHU8eFtltH0OBlnasz9TF0uZGZd3hMibRmn158E,5975 +django/contrib/auth/locale/ca/LC_MESSAGES/django.mo,sha256=C-Majs_UV5pW2wET8sRPo3zj3FGaEnkrQzAE2O2ShCM,7649 +django/contrib/auth/locale/ca/LC_MESSAGES/django.po,sha256=9ABSsHnSTgWHmuF3m6PkzMxQfQOrdY7rITH1AgG6qCU,8201 +django/contrib/auth/locale/cs/LC_MESSAGES/django.mo,sha256=7TuyZNQ11j4iLxxr_xch3gBDQ0cSTh0VFUa0FMzH1Uo,7836 +django/contrib/auth/locale/cs/LC_MESSAGES/django.po,sha256=qoA5lHFEwLZZakgYONzA-TxBqpBNhBytGHxS40YCf0s,8292 +django/contrib/auth/locale/cy/LC_MESSAGES/django.mo,sha256=lSfCwEVteW4PDaiGKPDxnSnlDUcGMkPfsxIluExZar0,4338 +django/contrib/auth/locale/cy/LC_MESSAGES/django.po,sha256=-LPAKGXNzB77lVHfCRmFlH3SUaLgOXk_YxfC0BomcEs,6353 +django/contrib/auth/locale/da/LC_MESSAGES/django.mo,sha256=r3_2TSpbpLSK62t8KdD2VQqAxUXzdBaox5fyjgtoS7w,7478 +django/contrib/auth/locale/da/LC_MESSAGES/django.po,sha256=3ZgzujWtZwIsdk7gtvzXOxQusiFgzLTZBhXS3jUESAg,7958 +django/contrib/auth/locale/de/LC_MESSAGES/django.mo,sha256=ewzAnUawN_euTDtXmroxkktzKAHsTkHRjZQOkuYHu7k,7529 +django/contrib/auth/locale/de/LC_MESSAGES/django.po,sha256=J8GJ8N1RvQDRACYUfeZwqFnnEwi3PtYe7QaJ_UDFp3Q,8033 +django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo,sha256=QOnCzO9Nf3_JBX9WP2pGfZXISgyAHv3p62OAF6fxkG8,8135 +django/contrib/auth/locale/dsb/LC_MESSAGES/django.po,sha256=g1o_S2lb_fN7aL_YIpOI0KicRiz72gh5sz2DYuwNYNI,8434 +django/contrib/auth/locale/el/LC_MESSAGES/django.mo,sha256=KaP9RLYThwYWLBx0W90HI0zJZ09iNhZ3tk8UVF63n74,10072 +django/contrib/auth/locale/el/LC_MESSAGES/django.po,sha256=O5JsNCUNr1YcNNqMugoM5epN6nC5pgq3E6nKXDh3OY0,10795 +django/contrib/auth/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/auth/locale/en/LC_MESSAGES/django.po,sha256=VLGYW9XtfDKb1uNmH5-6q_8vh7WFfpOLV8dleeQFUkE,8219 +django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo,sha256=7cPKOZX0ZmWCYU2ZwgCp8LwXj7FAdP3lMoI2u4nzgeU,7183 +django/contrib/auth/locale/en_AU/LC_MESSAGES/django.po,sha256=92Q42wfwKhGxDkomv8JlGBHVUdFIc_wvm_LUNBc9Q1k,7467 +django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo,sha256=p57gDaYVvgEk1x80Hq4Pn2SZbsp9ly3XrJ5Ttlt2yOE,3179 +django/contrib/auth/locale/en_GB/LC_MESSAGES/django.po,sha256=-yDflw5-81VOlyqkmLJN17FRuwDrhYXItFUJwx2aqpE,5787 +django/contrib/auth/locale/eo/LC_MESSAGES/django.mo,sha256=0Z-qGFJc_j9rV2-BN4YoVTeGQd15yoHHpt0fSEMwiwg,7329 +django/contrib/auth/locale/eo/LC_MESSAGES/django.po,sha256=cghgKB3ZOFTNdjBuCpWXn1WFXJQLRCQGEzBwiLU5D-c,7731 +django/contrib/auth/locale/es/LC_MESSAGES/django.mo,sha256=9BfzdvlAsARjd4CVzSritsWzQJsP5w7sM7nLO-KXF9A,7782 +django/contrib/auth/locale/es/LC_MESSAGES/django.po,sha256=Km0bEjiIkOoNXvC4hhId3CXKqIqFHWSFEdK6OgEHx04,8571 +django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo,sha256=tPRhIvlvgn5urawLpgF-YIoO4zqc06LtHflK_G_FYFU,7943 +django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po,sha256=XqPd_mBJmPG-YYZrDdfVe7nbC6B5NLcHp2aISkk23xI,8214 +django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo,sha256=K5VaKTyeV_WoKsLR1x8ZG4VQmk3azj6ZM8Phqjs81So,6529 +django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po,sha256=qJywTaYi7TmeMB1sjwsiwG8GXtxAOaOX0voj7lLVZRw,7703 +django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo,sha256=dCav1yN5q3bU4PvXZd_NxHQ8cZ9KqQCiNoe4Xi8seoY,7822 +django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po,sha256=_4un21ALfFsFaqpLrkE2_I18iEfJlcAnd_X8YChfdWo,8210 +django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo,sha256=GwpZytNHtK7Y9dqQKDiVi4SfA1AtPlk824_k7awqrdI,7415 +django/contrib/auth/locale/es_VE/LC_MESSAGES/django.po,sha256=G3mSCo_XGRUfOAKUeP_UNfWVzDPpbQrVYQt8Hv3VZVM,7824 +django/contrib/auth/locale/et/LC_MESSAGES/django.mo,sha256=yilio-iPwr09MPHPgrDLQ-G5d2xNg1o75lcv5-yzcM4,7393 +django/contrib/auth/locale/et/LC_MESSAGES/django.po,sha256=OvUyjbna_KS-bI4PUUHagS-JuwtB7G0J1__MtFGxB-M,7886 +django/contrib/auth/locale/eu/LC_MESSAGES/django.mo,sha256=K0AoFJGJJSnD1IzYqCY9qB4HZHwx-F7QaDTAGehyo7w,7396 +django/contrib/auth/locale/eu/LC_MESSAGES/django.po,sha256=y9BAASQYTTYfoTKWFVQUYs5-zPlminfJ6C5ZORD6g-s,7749 +django/contrib/auth/locale/fa/LC_MESSAGES/django.mo,sha256=yeA_5LAPu7OyQssunvUNlH07bPVCyGLpnvijNenrtHQ,8979 +django/contrib/auth/locale/fa/LC_MESSAGES/django.po,sha256=NChJSgpkXrwAiTrCJzvwlm9mh-LFSD1rR1ESdRQD43o,9513 +django/contrib/auth/locale/fi/LC_MESSAGES/django.mo,sha256=fH_rcYkl9L2dK1G3MjVETXAHunCPhsXQYMTbDcNe-00,7537 +django/contrib/auth/locale/fi/LC_MESSAGES/django.po,sha256=PVwyNBaToxjyHkxy4t4L-kULjJslTe94coSxWNseyn4,7892 +django/contrib/auth/locale/fr/LC_MESSAGES/django.mo,sha256=nppbd8aA9qHRmmneAz9Ld0PtnnaWranJ0Gil2j1ZqP8,8155 +django/contrib/auth/locale/fr/LC_MESSAGES/django.po,sha256=UfsLNtSLwfWgFgHIigXUSM-atmNRoOKm2U4lCUOU2Qo,8530 +django/contrib/auth/locale/fy/LC_MESSAGES/django.mo,sha256=95N-77SHF0AzQEer5LuBKu5n5oWf3pbH6_hQGvDrlP4,476 +django/contrib/auth/locale/fy/LC_MESSAGES/django.po,sha256=8XOzOFx-WerF7whzTie03hgO-dkbUFZneyrpZtat5JY,3704 +django/contrib/auth/locale/ga/LC_MESSAGES/django.mo,sha256=Nd02Ed9ACCY6JCCSwtiWl3DTODLFFu9Mq6JVlr5YbYk,3572 +django/contrib/auth/locale/ga/LC_MESSAGES/django.po,sha256=FQJMR5DosuKqo4vvF0NAQnjfqbH54MSzqL2-4BO4-uM,6127 +django/contrib/auth/locale/gd/LC_MESSAGES/django.mo,sha256=BLBYJV9Adx1BsXZaM0qZ54mNRAF5s4dxB1TBLtIyMHQ,8743 +django/contrib/auth/locale/gd/LC_MESSAGES/django.po,sha256=rqPK26mtE_U-TG2qyjc5xCR-feI3sGXZR5H6ohNzx4s,9099 +django/contrib/auth/locale/gl/LC_MESSAGES/django.mo,sha256=ZqVb1YCn_0_HyVtb_rnxmn0BSYAuKTVTFNHf2gftt5c,4022 +django/contrib/auth/locale/gl/LC_MESSAGES/django.po,sha256=YN_7iJTGc1Kh5llxHnwqq1kZmdQVMUMv1bkti30fMCI,6371 +django/contrib/auth/locale/he/LC_MESSAGES/django.mo,sha256=MeI7B43KSAIZL7_qxceKnnFKnyoUVYeZDRkGWabrclw,8606 +django/contrib/auth/locale/he/LC_MESSAGES/django.po,sha256=aDJlOsxyGpm-t6BydtqPMDB9lPcBCie8a1IfW_Ennvc,9012 +django/contrib/auth/locale/hi/LC_MESSAGES/django.mo,sha256=7CxV1H37hMbgKIhnAWx-aJmipLRosJe1qg8BH2CABfw,5364 +django/contrib/auth/locale/hi/LC_MESSAGES/django.po,sha256=DU5YM6r1kd5fo40yqFXzEaNh42ezFQFQ-0dmVqkaKQ0,7769 +django/contrib/auth/locale/hr/LC_MESSAGES/django.mo,sha256=GEap3QClwCkuwQZKJE7qOZl93RRxmyyvTTnOTYaAWUo,5894 +django/contrib/auth/locale/hr/LC_MESSAGES/django.po,sha256=ALftoYSaI1U90RNDEvnaFATbw1SL0m8fNXAyl6DkSvo,7355 +django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo,sha256=J28d-As2avF34TlqEkhOzy91URZAXF47SY27qCPysPg,7974 +django/contrib/auth/locale/hsb/LC_MESSAGES/django.po,sha256=P3onPBZkAYofZpYnTsJ0ILbRFRhHtZorsHZ4-DVuu8w,8264 +django/contrib/auth/locale/hu/LC_MESSAGES/django.mo,sha256=TLGY7EaLD12NHYM1hQlqb4D4BM0T68jv8yhECOHIgcA,7655 +django/contrib/auth/locale/hu/LC_MESSAGES/django.po,sha256=E51MM5qqplgrOSrh60bfz-EvyL91Ik3kL3YJOK-dqzk,8040 +django/contrib/auth/locale/hy/LC_MESSAGES/django.mo,sha256=zoLe0EqIH8HQYC5XAWd8b8mA2DpbmDSEBsF-WIKX_OQ,8001 +django/contrib/auth/locale/hy/LC_MESSAGES/django.po,sha256=wIWLbz6f0n44ZcjEbZZsgoWTpzXRGND15hudr_DQ3l0,8787 +django/contrib/auth/locale/ia/LC_MESSAGES/django.mo,sha256=OTxh6u0QmsytMrp8IKWBwMnhrYCpyS6qVnF7YBCAWe0,7626 +django/contrib/auth/locale/ia/LC_MESSAGES/django.po,sha256=ue4RXEXweO1-9sZOKkLZsyZe8yxnPWB3JZyyh3qzmlA,7895 +django/contrib/auth/locale/id/LC_MESSAGES/django.mo,sha256=gCVLTVK24TVnaaeb3JAqQ9Wzt0Cad0FLcCBr0gD76kU,7170 +django/contrib/auth/locale/id/LC_MESSAGES/django.po,sha256=0bxsUqjQMA2qCjBkx1Q62v007ow3S5J3UgcV2ll9sL4,7589 +django/contrib/auth/locale/io/LC_MESSAGES/django.mo,sha256=YwAS3aWljAGXWcBhGU_GLVuGJbHJnGY8kUCE89CPdks,464 +django/contrib/auth/locale/io/LC_MESSAGES/django.po,sha256=W36JXuA1HQ72LspixRxeuvxogVxtk7ZBbT0VWI38_oM,3692 +django/contrib/auth/locale/is/LC_MESSAGES/django.mo,sha256=0PBYGqQKJaAG9m2jmJUzcqRVPc16hCe2euECMCrNGgI,7509 +django/contrib/auth/locale/is/LC_MESSAGES/django.po,sha256=o6dQ8WMuPCw4brSzKUU3j8PYhkLBO7XQ3M7RlsIw-VY,7905 +django/contrib/auth/locale/it/LC_MESSAGES/django.mo,sha256=cKZiZxBLLKL3HqbBWCtMxkP_Y5o9tgo5J-dMLPPthk0,7608 +django/contrib/auth/locale/it/LC_MESSAGES/django.po,sha256=VTurpVr2_2HRZpw1bUqjehWaypfGfI6ySGjoYA_MFFM,8178 +django/contrib/auth/locale/ja/LC_MESSAGES/django.mo,sha256=MB36xS89-mlWuDRood1NGARfcWmqj7dp2JMCXuA16fA,8085 +django/contrib/auth/locale/ja/LC_MESSAGES/django.po,sha256=aAVHTduL9eq_BuCvjLjBxOmU7_Oq3MnrsZ4JqutCSFM,8436 +django/contrib/auth/locale/ka/LC_MESSAGES/django.mo,sha256=0QWYd58Dz5Az3OfZo7wV3o-QCre2oc5dgEPu0rnLVJI,10625 +django/contrib/auth/locale/ka/LC_MESSAGES/django.po,sha256=oCtz7gS4--mhv7biS1rIh43I4v1UpZX4DKdrB-xZ2RA,11217 +django/contrib/auth/locale/kab/LC_MESSAGES/django.mo,sha256=9qKeQ-gDByoOdSxDpSbLaM4uSP5sIi7qlTn8tJidVDs,2982 +django/contrib/auth/locale/kab/LC_MESSAGES/django.po,sha256=8cq5_rjRXPzTvn1jPo6H_Jcrv6IXkWr8n9fTPvghsS8,5670 +django/contrib/auth/locale/kk/LC_MESSAGES/django.mo,sha256=RJablrXpRba6YVB_8ACSt2q_BjmxrHQZzX6RxMJImlA,3542 +django/contrib/auth/locale/kk/LC_MESSAGES/django.po,sha256=OebwPN9iWBvjDu0P2gQyBbShvIFxFIqCw8DpKuti3xk,6360 +django/contrib/auth/locale/km/LC_MESSAGES/django.mo,sha256=FahcwnCgzEamtWcDEPOiJ4KpXCIHbnSowfSRdRQ2F9U,2609 +django/contrib/auth/locale/km/LC_MESSAGES/django.po,sha256=lvRHHIkClbt_8-9Yn0xY57dMxcS72z4sUkxLb4cohP0,5973 +django/contrib/auth/locale/kn/LC_MESSAGES/django.mo,sha256=u0YygqGJYljBZwI9rm0rRk_DdgaBEMA1etL-Lk-7Mls,4024 +django/contrib/auth/locale/kn/LC_MESSAGES/django.po,sha256=J67MIAas5egVq_FJBNsug3Y7rZ8KakhQt6isyF23HAA,6957 +django/contrib/auth/locale/ko/LC_MESSAGES/django.mo,sha256=vwD0-GW2g4uAPCQbvsr2CyZ1Y-9VHcF4xlN3qaJbolU,7607 +django/contrib/auth/locale/ko/LC_MESSAGES/django.po,sha256=6PX6SMXjv_bYolpgHfcFpzaKPdkwJSVg95GU5EpjdeM,8350 +django/contrib/auth/locale/ky/LC_MESSAGES/django.mo,sha256=mnBXtpInYxaSNIURJTmx8uBg_PH-NuPN9r54pkQY3q4,8924 +django/contrib/auth/locale/ky/LC_MESSAGES/django.po,sha256=7FeO_Kb2er0S84KnFeXVHO3TgAmEJ0gTQEDHImoxiZ4,9170 +django/contrib/auth/locale/lb/LC_MESSAGES/django.mo,sha256=OFhpMA1ZXhrs5fwZPO5IjubvWDiju4wfwWiV94SFkiA,474 +django/contrib/auth/locale/lb/LC_MESSAGES/django.po,sha256=dOfY9HjTfMQ0nkRYumw_3ZaywbUrTgT-oTXAnrRyfxo,3702 +django/contrib/auth/locale/lt/LC_MESSAGES/django.mo,sha256=-nlZHl7w__TsFUmBb5pQV_XJtKGsi9kzP6CBZXkfM8M,8146 +django/contrib/auth/locale/lt/LC_MESSAGES/django.po,sha256=-rdhB6eroSSemsdZkG1Jl4CruNZc_7dj4m5IVoyRBUQ,8620 +django/contrib/auth/locale/lv/LC_MESSAGES/django.mo,sha256=DlqrlpNQc98t2J90qhKomGxiALksW85e8BsSR94DBgk,7631 +django/contrib/auth/locale/lv/LC_MESSAGES/django.po,sha256=86UCfg0-4IJFYvV9g7__7CuuRYFOccYr3XkFNtRAT8Q,8018 +django/contrib/auth/locale/mk/LC_MESSAGES/django.mo,sha256=XS9dslnD_YBeD07P8WQkss1gT7GIV-qLiCx4i5_Vd_k,9235 +django/contrib/auth/locale/mk/LC_MESSAGES/django.po,sha256=QOLgcwHub9Uo318P2z6sp69MI8syIIWCcr4VOom9vfs,9799 +django/contrib/auth/locale/ml/LC_MESSAGES/django.mo,sha256=UEaqq7nnGvcZ8vqFicLiuqsuEUhEjd2FpWfyzy2HqdU,12611 +django/contrib/auth/locale/ml/LC_MESSAGES/django.po,sha256=xBROIwJb5h2LmyBLAafZ2tUlPVTAOcMgt-olq5XnPT8,13107 +django/contrib/auth/locale/mn/LC_MESSAGES/django.mo,sha256=hBYT0p3LcvIKKPtIn2NzPk_2di9L8jYrUt9j3TcVvaY,9403 +django/contrib/auth/locale/mn/LC_MESSAGES/django.po,sha256=R3wAEwnefEHZsma8J-XOn4XlLtuWYKDPLwJ99DUYmvE,9913 +django/contrib/auth/locale/mr/LC_MESSAGES/django.mo,sha256=zGuqUTqcWZZn8lZY56lf5tB0_lELn7Dd0Gj78wwO5T4,468 +django/contrib/auth/locale/mr/LC_MESSAGES/django.po,sha256=yLW9WuaBHqdp9PXoDEw7c05Vt0oOtlks5TS8oxYPAO8,3696 +django/contrib/auth/locale/ms/LC_MESSAGES/django.mo,sha256=eCAZrzQxsM_pAxr_XQo2fIOsCbj5LjGKpLNCzob2l-I,7654 +django/contrib/auth/locale/ms/LC_MESSAGES/django.po,sha256=FAtyzSGcD1mIhRIg8O_1SHLdisTPGYZK-QUjzgw-wCY,7847 +django/contrib/auth/locale/my/LC_MESSAGES/django.mo,sha256=gYzFJKi15RbphgG1IHbJF3yGz3P2D9vaPoHZpA7LoH8,1026 +django/contrib/auth/locale/my/LC_MESSAGES/django.po,sha256=lH5mrq-MyY8gvrNkH2_20rkjFnbviq23wIUqIjPIgFI,5130 +django/contrib/auth/locale/nb/LC_MESSAGES/django.mo,sha256=T6aK_x_t3c0uoALxmraqrK4--Ln5vTUMPb2m7iuR9bM,7191 +django/contrib/auth/locale/nb/LC_MESSAGES/django.po,sha256=jwECmnO6m_sk9O3PXnmEnh3FC9LJKVdSliRZ8nNPNLY,7585 +django/contrib/auth/locale/ne/LC_MESSAGES/django.mo,sha256=pq8dEr1ugF5ldwkCDHOq5sXaXV31InbLHYyXU56U_Ao,7722 +django/contrib/auth/locale/ne/LC_MESSAGES/django.po,sha256=bV-uWvT1ViEejrbRbVTtwC2cZVD2yX-KaESxKBnxeRI,8902 +django/contrib/auth/locale/nl/LC_MESSAGES/django.mo,sha256=g29u9ZMWBkbkWw6jA0UU74pMCAh9s-Gb9Ft3zi9aNn4,7451 +django/contrib/auth/locale/nl/LC_MESSAGES/django.po,sha256=U9JaMXlbuY9Lvu2pUK6x5vSD5m7ROaKt2P2rbBTDZ30,8176 +django/contrib/auth/locale/nn/LC_MESSAGES/django.mo,sha256=83HdNOuNQVgJXBZMytPz1jx3wWDy8-e6t_JNEUu6W8w,7147 +django/contrib/auth/locale/nn/LC_MESSAGES/django.po,sha256=4ciwQsZFYSV6CjFqzxxcESAm16huv9XyXvU-nchD-Fs,7363 +django/contrib/auth/locale/os/LC_MESSAGES/django.mo,sha256=DVsYGz-31nofEjZla4YhM5L7qoBnQaYnZ4TBki03AI4,4434 +django/contrib/auth/locale/os/LC_MESSAGES/django.po,sha256=Akc1qelQWRA1DE6xseoK_zsY7SFI8SpiVflsSTUhQLw,6715 +django/contrib/auth/locale/pa/LC_MESSAGES/django.mo,sha256=PeOLukzQ_CZjWBa5FGVyBEysat4Gwv40xGMS29UKRww,3666 +django/contrib/auth/locale/pa/LC_MESSAGES/django.po,sha256=7ts9PUSuvfXGRLpfyVirJLDtsQcsVWFXDepVKUVlmtc,6476 +django/contrib/auth/locale/pl/LC_MESSAGES/django.mo,sha256=-Ie-Wmu6bIpQFabfX9apO1uYvjnK-lPj-99jTOhtH44,7950 +django/contrib/auth/locale/pl/LC_MESSAGES/django.po,sha256=9dyBmCqSvGEZ4BALTTzokZNx46NTJ04RHOYnrMfNCnU,8704 +django/contrib/auth/locale/pt/LC_MESSAGES/django.mo,sha256=oyKCSXRo55UiO3-JKcodMUnK7fuOuQxQrXcU7XkWidA,7756 +django/contrib/auth/locale/pt/LC_MESSAGES/django.po,sha256=tEazw0kctJ3BaP21IblsMhno6qooOGW54zwende522Q,8128 +django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo,sha256=5oeVsEZTpuSXrh05QhaMDtgh-Lju6HdE8QROe-_uV_0,7546 +django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.po,sha256=IFe28giz1RoK9IPKbXi4kJj8PYKqHvEtFuYGuBmGitY,8521 +django/contrib/auth/locale/ro/LC_MESSAGES/django.mo,sha256=GD04tb5R6nEeD6ZMAcZghVhXwr8en1omw0c6BxnyHas,7777 +django/contrib/auth/locale/ro/LC_MESSAGES/django.po,sha256=YfkFuPrMwAR50k6lfOYeBbMosEbvXGWwMBD8B7p_2ZA,8298 +django/contrib/auth/locale/ru/LC_MESSAGES/django.mo,sha256=4MRl7yEBk9G9R_GewxkBxHK5ic4ww_WopNQymluwbYs,10347 +django/contrib/auth/locale/ru/LC_MESSAGES/django.po,sha256=y9e6hrsZO4GwIOWedYNuU2h7PX9Sa0uomKTyOlKGPw0,10963 +django/contrib/auth/locale/sk/LC_MESSAGES/django.mo,sha256=1xmFLKSKxwWOoW7MLQ6oLhOi5fRs_YEqYQ6VlQ0f7ag,7853 +django/contrib/auth/locale/sk/LC_MESSAGES/django.po,sha256=sNAtYJYT-QLmTRaYpoyAeC9j3adeQwvQqtxjKuDFkn0,8292 +django/contrib/auth/locale/sl/LC_MESSAGES/django.mo,sha256=UAzD5UAqHBdiCMIPjZdouGt14xoHuo5EXDctNSDTEJk,7552 +django/contrib/auth/locale/sl/LC_MESSAGES/django.po,sha256=tUqZLZJegGLteWOQiDwFRUGayBB2j9qATmL6SMgEhb8,7943 +django/contrib/auth/locale/sq/LC_MESSAGES/django.mo,sha256=3bm81rsRuQmV_1mD9JrAwSjRIDUlsb3lPmBxRNHfz8w,7813 +django/contrib/auth/locale/sq/LC_MESSAGES/django.po,sha256=BWfyT4qg1jMoDGwmpLq4uPHJ1hJXLHI7gyo4BnzVHZI,8128 +django/contrib/auth/locale/sr/LC_MESSAGES/django.mo,sha256=3dRNH8jjE8I2vQwyTZ5J6tGLeBr3_XhlAjdPqcMea0M,9761 +django/contrib/auth/locale/sr/LC_MESSAGES/django.po,sha256=33D4YxtMpY3s0cDsK0L2-bCvfZHlbfxR4XX9oMjCQXM,10081 +django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=SXl_MvkY_idYMT3sF7nIuh8z2qMdMC1lJ69Y6FcJMaA,3191 +django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.po,sha256=hlU8JVlqIKv-Wx9urJDnFxvyT_m8mLz0vTl8Tcat4lw,5958 +django/contrib/auth/locale/sv/LC_MESSAGES/django.mo,sha256=cYfXonEKxA6H7RNn3dOxDKTwujEBfYDLb2b41nWmv2s,7416 +django/contrib/auth/locale/sv/LC_MESSAGES/django.po,sha256=xtFMHCNOC1Zwx32zxhTmh3RMfx9fU-Xe944l4-26kdE,8029 +django/contrib/auth/locale/sw/LC_MESSAGES/django.mo,sha256=I_lEsKuMGm07X1vM3-ReGDx2j09PGLkWcG0onC8q1uQ,5029 +django/contrib/auth/locale/sw/LC_MESSAGES/django.po,sha256=TiZS5mh0oN0e6dFEdh-FK81Vk-tdv35ngJ-EbM1yX80,6455 +django/contrib/auth/locale/ta/LC_MESSAGES/django.mo,sha256=T1t5CKEb8hIumvbOtai-z4LKj2et8sX-PgBMd0B3zuA,2679 +django/contrib/auth/locale/ta/LC_MESSAGES/django.po,sha256=X8UDNmk02X9q1leNV1qWWwPNakhvNd45mCKkQ8EpZQQ,6069 +django/contrib/auth/locale/te/LC_MESSAGES/django.mo,sha256=i9hG4thA0P-Hc-S2oX7GufWFDO4Y_LF4RcdQ22cbLyE,2955 +django/contrib/auth/locale/te/LC_MESSAGES/django.po,sha256=txND8Izv2oEjSlcsx3q6l5fEUqsS-zv-sjVVILB1Bmc,6267 +django/contrib/auth/locale/tg/LC_MESSAGES/django.mo,sha256=MwdyYwC4ILX4MFsqCy46NNfPKLbW1GzRhFxMV0uIbLI,7932 +django/contrib/auth/locale/tg/LC_MESSAGES/django.po,sha256=miOPNThjHZODwjXMbON8PTMQhaCGJ0Gy6FZr6Jcj4J8,8938 +django/contrib/auth/locale/th/LC_MESSAGES/django.mo,sha256=zRpZ2xM5JEQoHtfXm2_XYdhe2FtaqH-hULJadLJ1MHU,6013 +django/contrib/auth/locale/th/LC_MESSAGES/django.po,sha256=Yhh_AQS_aM_9f_yHNNSu_3THbrU-gOoMpfiDKhkaSHo,7914 +django/contrib/auth/locale/tk/LC_MESSAGES/django.mo,sha256=AqCIDe-6QrLMN3CNbMZsfrL0KxnQ3zuZwN8KvFmwRhE,7343 +django/contrib/auth/locale/tk/LC_MESSAGES/django.po,sha256=LpVXh4T0ZS3EzbIpJud8Dlms0Bu1vWf6c0JqkpoD8q8,7605 +django/contrib/auth/locale/tr/LC_MESSAGES/django.mo,sha256=jQyJ55Sr_xkHTgcfvl3smdWjum0tGCzp4NY0U1w9aig,7506 +django/contrib/auth/locale/tr/LC_MESSAGES/django.po,sha256=5DXWBmUc3fAwVHwcCTeu7M2y8X9VqrI_Ex3ZFKqzCgA,8090 +django/contrib/auth/locale/tt/LC_MESSAGES/django.mo,sha256=g4pTk8QLQFCOkU29RZvR1wOd1hkOZe_o5GV9Cg5u8N4,1371 +django/contrib/auth/locale/tt/LC_MESSAGES/django.po,sha256=owkJ7iPT-zJYkuKLykfWsw8j7O8hbgzVTOD0DVv956E,5222 +django/contrib/auth/locale/udm/LC_MESSAGES/django.mo,sha256=zey19UQmS79AJFxHGrOziExPDDpJ1AbUegbCRm0x0hM,462 +django/contrib/auth/locale/udm/LC_MESSAGES/django.po,sha256=gLVgaMGg0GA3Tey1_nWIjV1lnM7czLC0XR9NFBgL2Zk,3690 +django/contrib/auth/locale/uk/LC_MESSAGES/django.mo,sha256=1CE7KRwdtP3D0UmEQcgydqXLGWVNZRUs4hpkoQJGMlo,10077 +django/contrib/auth/locale/uk/LC_MESSAGES/django.po,sha256=7KbG2N4XhLlgjtaO20ZXCPIIotoWO7fr_nFUlWxzv6s,10776 +django/contrib/auth/locale/ur/LC_MESSAGES/django.mo,sha256=rippTNHoh49W19c4HDUF8G5Yo3SknL3C87Afu8YXxzA,698 +django/contrib/auth/locale/ur/LC_MESSAGES/django.po,sha256=gwSd8noEwbcvDE1Q4ZsrftvoWMwhw1J15gvdtK6E9ns,4925 +django/contrib/auth/locale/uz/LC_MESSAGES/django.mo,sha256=bDkhpvduocjekq6eZiuEfWJqnIt5hQmxxoIMhLQWzqM,2549 +django/contrib/auth/locale/uz/LC_MESSAGES/django.po,sha256=tPp8tRZwSMQCQ9AyAeUDtnRfmOk54UQMwok3HH8VNSQ,5742 +django/contrib/auth/locale/vi/LC_MESSAGES/django.mo,sha256=eBMTwnpRWRj8SZVZ1tN592Re_8CPyJzuF4Vtg9IMmFw,7892 +django/contrib/auth/locale/vi/LC_MESSAGES/django.po,sha256=mOr5WgFpwztdW-pEZ4O80MGlltYQyL2cAMhz6-Esfo0,8246 +django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=xV9wTiaL7hMCKmUOHuEs5XtxEibXWLnywDYTjeXoVCA,6907 +django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po,sha256=CUdR2ch2mOf5v3GTOTIQg2IOj-7M1mS6Dw9yvz891Yw,7638 +django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=yQ5Gllu4hXzuBpBNAgtJaBMVivJeXUUlpfDS4CT1wg4,6728 +django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.po,sha256=Rw18_ZEtobUhmj2oF544zdQ6Vrac0T9UI9RJO4plOdc,7145 +django/contrib/auth/management/__init__.py,sha256=uKE77RX6iQSDb0B6ZP-QTt-kjSelmBY6FQSqxXv3zvI,5327 +django/contrib/auth/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/auth/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/auth/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/auth/management/commands/__pycache__/changepassword.cpython-310.pyc,, +django/contrib/auth/management/commands/__pycache__/createsuperuser.cpython-310.pyc,, +django/contrib/auth/management/commands/changepassword.py,sha256=uMA0bm8Xy2JovP9M4WrVdZF4qxgRLMaebx3sET2BKSY,2633 +django/contrib/auth/management/commands/createsuperuser.py,sha256=5ukgw880M6u7pbvgWjr66uLKdjoEEvatC9lGyT03UU0,12806 +django/contrib/auth/middleware.py,sha256=_Y3pB-F4WhZdAZZMHL4iQ-TSBQrivkz2flALIjodXiM,5431 +django/contrib/auth/migrations/0001_initial.py,sha256=gos3cWdK6busgmjH4dUBR-S9_7m-LIYF7AtTIlGRFq4,7282 +django/contrib/auth/migrations/0002_alter_permission_name_max_length.py,sha256=Ofj3HGISrF35pqmD-VBr1rlbLTszxaePWXrULRDc0gM,347 +django/contrib/auth/migrations/0003_alter_user_email_max_length.py,sha256=7sFie4LLqpe74dZB6gjymc2PJ6Fm8R1i-_L_1Otr204,419 +django/contrib/auth/migrations/0004_alter_user_username_opts.py,sha256=8Yebbje2LQMo8RlvLhiuNxXT_Fjo60zEMSGwWTctD2A,881 +django/contrib/auth/migrations/0005_alter_user_last_login_null.py,sha256=NvFKl9IxcAEz2Oi21u3XSvkK1DI6ZYg0emW_7PQMqe8,411 +django/contrib/auth/migrations/0006_require_contenttypes_0002.py,sha256=EBEPNuSJtXBj58m2x-rr3WWCSc30ssHWI0Ni6_g9gtk,370 +django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py,sha256=2mOgZgr3in1UU8JAROculPKm_8hqSTbPPFV3XgFc_Ko,803 +django/contrib/auth/migrations/0008_alter_user_username_max_length.py,sha256=vKKsmPu5_6EqyIDrSRByKn9jhrd-_OGgSwQ-4-x_ZRQ,815 +django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py,sha256=T5-y4RVYe5R9dhrP2VvFrmruuNs-UJ8bHL45FIfQtjM,416 +django/contrib/auth/migrations/0010_alter_group_name_max_length.py,sha256=j7YCblkuVz50X1pZdMzRWXJSdwBrHEOt1kyVAe3AsqY,379 +django/contrib/auth/migrations/0011_update_proxy_permissions.py,sha256=Do06UrWbcE6d_tmqkhRfU8TspxSXi-TIMPcT1dGU57k,2879 +django/contrib/auth/migrations/0012_alter_user_first_name_max_length.py,sha256=9AvEG8YCXFe4mm_bjxjp6-5IvIeou6b_QP7Kr5FTD-U,412 +django/contrib/auth/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/auth/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0002_alter_permission_name_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0005_alter_user_last_login_null.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0008_alter_user_username_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0009_alter_user_last_name_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0010_alter_group_name_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0011_update_proxy_permissions.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/0012_alter_user_first_name_max_length.cpython-310.pyc,, +django/contrib/auth/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/auth/mixins.py,sha256=rHq9HsX4W8lKtfXsazxM3chhTFLqd3eKI-OVKpbeLjQ,4652 +django/contrib/auth/models.py,sha256=o9nq-sR8W8eIJ2vlYfShx7o6mtj5x5_ZOuy5O42whS4,16158 +django/contrib/auth/password_validation.py,sha256=9-cOqtABxf9zW6uSM46RIAVqlHkNXiXyp9uN5ZjmcCQ,9379 +django/contrib/auth/signals.py,sha256=BFks70O0Y8s6p1fr8SCD4-yk2kjucv7HwTcdRUzVDFM,118 +django/contrib/auth/templates/auth/widgets/read_only_password_hash.html,sha256=cMrG-iMsrVQ6Qd6T_Xz21b6WIWhXxaIwgNDW2NpDpuM,185 +django/contrib/auth/templates/registration/password_reset_subject.txt,sha256=-TZcy_r0vArBgdPK7feeUY6mr9EkYwy7esQ62_onbBk,132 +django/contrib/auth/tokens.py,sha256=M5HB9H6D8JASBkN8SpDyuRsGe4ISyVheUC-Y9SRFk-M,3773 +django/contrib/auth/urls.py,sha256=Uh8DrSqpJXDA5a17Br9fMmIbEcgLkxdN9FvCRg-vxyg,1185 +django/contrib/auth/validators.py,sha256=N67vd_FgRCMKk9MXsXulprJPKA4UGPgSLWZcGb13yLw,687 +django/contrib/auth/views.py,sha256=fV8BiF3QnlQOGt0JJwSPs0jurTkjumoR0EFrQKX67yA,14071 +django/contrib/contenttypes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/contenttypes/__pycache__/__init__.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/admin.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/apps.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/checks.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/fields.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/forms.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/models.cpython-310.pyc,, +django/contrib/contenttypes/__pycache__/views.cpython-310.pyc,, +django/contrib/contenttypes/admin.py,sha256=a0KrlT8k2aPIKn54fNwCDTaAVdVr1fLY1BDz_FrE3ts,5200 +django/contrib/contenttypes/apps.py,sha256=1Q1mWjPvfYU7EaO50JvsWuDg_3uK8DoCwpvdIdT7iKY,846 +django/contrib/contenttypes/checks.py,sha256=KKB-4FOfPO60TM-uxqK8m9sIXzB3CRx7Imr-jaauM_U,1268 +django/contrib/contenttypes/fields.py,sha256=izgsYFgSWG43mi5LvXXUY9sz6z_iBMLEuslf_n7QJUI,28262 +django/contrib/contenttypes/forms.py,sha256=T6fZZkJjPrD6R3h5Wos2a9aDM3mZJLerHSh6NXHJp4I,3956 +django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo,sha256=93nlniPFfVcxfBCs_PsLtMKrJ2BqpcofPRNYYTTlels,1070 +django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po,sha256=SY04sW55-xpO_qBjv8pHoN7eqB2C5q_9CxQguMz7Q94,1244 +django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo,sha256=2t3y_6wxi0khsYi6s9ZyJwjRB8bnRT1PKvazWOKhJcQ,1271 +django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po,sha256=t6M3XYQLotNMFCjzB8aWFXnlRI8fU744YZvAoFdScQY,1634 +django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=upFxoSvOvdmqCvC5irRV_8yYpFidanHfRk6i3tPrFAc,1233 +django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.po,sha256=jUg-4BVi0arx5v-osaUDAfM6cQgaBh7mE8Mr8aVTp5A,1447 +django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo,sha256=y88CPGGbwTVRmZYIipCNIWkn4OuzuxEk2QCYsBhc7RY,643 +django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po,sha256=H-qMo5ikva84ycnlmBT4XXEWhzMIw-r7J_zuqxo3wu4,1088 +django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo,sha256=VTQ2qQ7aoZYUVl2yht2DbYzj2acs71Szqz7iZyySAqI,1065 +django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po,sha256=9NcmP1jMQPfjPraoXui6iqJn3z3f3uG1RYN7K5-_-dU,1359 +django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo,sha256=Kp1TpXX1v0IgGp9HZxleXJ6y5ZvMZ6AqJrSIVcDs7xA,1353 +django/contrib/contenttypes/locale/be/LC_MESSAGES/django.po,sha256=Oy5QXZBmBM_OYLT5OeXJQzTBCHXBp8NVMYuKmr_TUm0,1615 +django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo,sha256=IFghXuYj0yxP5j-LfRsNJXlyS2b2dUNJXD01uhUqxLg,1225 +django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po,sha256=y-OpKdDHxHDYATSmi8DAUXuhpIwgujKZUe48G8So8AU,1613 +django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo,sha256=2Z1GL6c1ukKQCMcls7R0_n4eNdH3YOXZSR8nCct7SLI,1201 +django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.po,sha256=PLjnppx0FxfGBQMuWVjo0N4sW2QYc2DAEMK6ziGWUc8,1491 +django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo,sha256=kAlOemlwBvCdktgYoV-4NpC7XFDaIue_XN7GJYzDu88,1419 +django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po,sha256=BQmHVQqOc6xJWJLeAo49rl_Ogfv-lFtx18mj82jT_to,1613 +django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo,sha256=klj9n7AKBkTf7pIa9m9b-itsy4UlbYPnHiuvSLcFZXY,700 +django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po,sha256=pmJaMBLWbYtYFFXYBvPEvwXkTPdjQDv2WkFI5jNGmTI,1151 +django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo,sha256=uYq1BXdw1AXjnLusUQfN7ox1ld6siiy41C8yKVTry7Q,1095 +django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.po,sha256=-dsOzvzVzEPVvA9lYsIP-782BbtJxGRo-OHtS3fIjmU,1403 +django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo,sha256=QexBQDuGdMFhVBtA9XWUs2geFBROcxyzdU_IBUGQ7x4,1108 +django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po,sha256=8pdPwZmpGOeSZjILGLZEAzqvmmV69ogpkh0c3tukT2g,1410 +django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo,sha256=2QyCWeXFyymoFu0Jz1iVFgOIdLtt4N1rCZATZAwiH-8,1159 +django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.po,sha256=ZWDxQTHJcw1UYav1C3MX08wCFrSeJNNI2mKjzRVd6H0,1385 +django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo,sha256=EyancRrTWxM6KTpLq65gIQB0sO_PLtVr1ESN2v1pSNU,1038 +django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po,sha256=J09u3IjLgv4g77Kea_WQAhevHb8DskGU-nVxyucYf_0,1349 +django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo,sha256=MGUZ4Gw8rSFjBO2OfFX9ooGGpJYwAapgNkc-GdBMXa0,1055 +django/contrib/contenttypes/locale/de/LC_MESSAGES/django.po,sha256=T5ucSqa6VyfUcoN6nFWBtjUkrSrz7wxr8t0NGTBrWow,1308 +django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo,sha256=QpdSZObmfb-DQZb3Oh6I1bFRnaPorXMznNZMyVIM7Hc,1132 +django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po,sha256=_tNajamEnnf9FEjI-XBRraKjJVilwvpv2TBf9PAzPxw,1355 +django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo,sha256=1ySEbSEzhH1lDjHQK9Kv59PMA3ZPdqY8EJe6xEQejIM,1286 +django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po,sha256=8rlMKE5SCLTtm1myjLFBtbEIFyuRmSrL9HS2PA7gneQ,1643 +django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po,sha256=BRgOISCCJb4TU0dNxG4eeQJFe-aIe7U3GKLPip03d_Q,1110 +django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po,sha256=wmxyIJtz628AbsxgkB-MjdImcIJWhcW7NV3tWbDpedg,1001 +django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo,sha256=_uM-jg43W7Pz8RQhMcR_o15wRkDaYD8aRcl2_NFGoNs,1053 +django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po,sha256=SyzwSvqAgKF8BEhXYh4598GYP583OK2GUXH1lc4iDMk,1298 +django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo,sha256=MFC-mQeWLeFry7d2EXeAf2G47YRLLKFhenGLCwo5O9A,1087 +django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po,sha256=BgQ7lRtsjD-XHaNvlHMu9AxCCqx38XdOCG4zYpKgDn4,1279 +django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo,sha256=KzgypFDwIlVzr_h9Dq2X8dXu3XnsbdSaHwJKJWZ6qc8,1096 +django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po,sha256=Dpn9dTvdy87bVf3It8pZFOdEEKnO91bDeYyY1YujkIA,1456 +django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo,sha256=WkHABVDmtKidPyo6zaYGVGrgXpe6tZ69EkxaIBu6mtg,1084 +django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.po,sha256=yVSu_fJSKwS4zTlRud9iDochIaY0zOPILF59biVfkeY,1337 +django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo,sha256=aACo1rOrgs_BYK3AWzXEljCdAc4bC3BXpyXrwE4lzAs,1158 +django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po,sha256=vemhoL-sESessGmIlHoRvtWICqF2aO05WvcGesUZBRM,1338 +django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo,sha256=vD9rSUAZC_rgkwiOOsrrra07Gnx7yEpNHI96tr8xD3U,840 +django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po,sha256=tLgjAi9Z1kZloJFVQuUdAvyiJy1J-5QHfoWmxbqQZCc,1237 +django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo,sha256=TVGDydYVg_jGfnYghk_cUFjCCtpGchuoTB4Vf0XJPYk,1152 +django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.po,sha256=vJW37vuKYb_KpXBPmoNSqtNstFgCDlKmw-8iOoSCenU,1342 +django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo,sha256=TE84lZl6EP54-pgmv275jiTOW0vIsnsGU97qmtxMEVg,1028 +django/contrib/contenttypes/locale/et/LC_MESSAGES/django.po,sha256=KO9fhmRCx25VeHNDGXVNhoFx3VFH-6PSLVXZJ6ohOSA,1368 +django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo,sha256=K0f1cXEhfg_djPzgCL9wC0iHGWF_JGIhWGFL0Y970g0,1077 +django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po,sha256=sSuVV0o8MeWN6BxlaeKcjKA3h4H29fCo1kKEtkczEp4,1344 +django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo,sha256=hW3A3_9b-NlLS4u6qDnPS1dmNdn1UJCt-nihXvnXywI,1130 +django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po,sha256=TPiYsGGN-j-VD--Rentx1p-IcrNJYoYxrxDO_5xeZHI,1471 +django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo,sha256=dWar3g1rJAkUG1xRLlmGkH63Fy_h2YqzhMVv0Z25aWc,1036 +django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.po,sha256=yALWMFU8-gFD2G0NdWqIDIenrAMUY4VCW1oi8TJXFAc,1325 +django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo,sha256=CTOu_JOAQeC72VX5z9cg8Bn3HtZsdgbtjA7XKcy681o,1078 +django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po,sha256=6LArEWoBpdaJa7UPcyv4HJKD3YoKUxrwGQGd16bi9DM,1379 +django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po,sha256=SB07aEGG7n4oX_5rqHB6OnjpK_K0KwFM7YxaWYNpB_4,991 +django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo,sha256=GYQYfYWbgwL3nQJR5d7XGjc5KeYYXsB0yRQJz7zxd_k,1097 +django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po,sha256=byvw9sQ9VLVjS7Au81LcNpxOzwA29_4Al9nB1ZyV2b4,1408 +django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo,sha256=dQz7j45qlY3M1rL2fCVdPnuHMUdUcJ0K6cKgRD7Js2w,1154 +django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po,sha256=_hwx9XqeX5QYRFtDpEYkChswn8WMdYTQlbzL1LjREbY,1368 +django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo,sha256=gMDLuxVazSNvwLmi5AqJEsxugmDVLk8DlxseHRRoQoc,1072 +django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.po,sha256=hFPL2GH-o6XN0SKu5kqgiEaGT8lKnbi_zmlUNCn3Obg,1364 +django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo,sha256=oaxWykyc3N63WpxyHPI5CyhCTBqhM5-2Sasp_DNm1xc,1219 +django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po,sha256=wCm08UMCiCa6y1-5E-7bEz-8Kd0oMRMwgzoEJjMwFyw,1486 +django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo,sha256=KAZuQMKOvIPj3a7GrNJE3yhT70O2abCEF2GOsbwTE5A,1321 +django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po,sha256=PcsNgu2YmT0biklhwOF_nSvoGTvWVKw2IsBxIwSVAtI,1577 +django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo,sha256=DbOUA8ks3phsEwQvethkwZ9-ymrd36aQ6mP7OnGdpjU,1167 +django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po,sha256=722KxvayO6YXByAmO4gfsfzyVbT-HqqrLYQsr02KDc8,1445 +django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo,sha256=tPtv_lIzCPIUjGkAYalnNIUxVUQFE3MShhVXTnfVx3Q,1106 +django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po,sha256=rbI3G8ARG7DF7uEe82SYCfotBnKTRJJ641bGhjdptTQ,1329 +django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo,sha256=2nsylOwBIDOnkUjE2GYU-JRvgs_zxent7q3_PuscdXk,1102 +django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po,sha256=Dzcf94ZSvJtyNW9EUKpmyNJ1uZbXPvc7dIxCccZrDYc,1427 +django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo,sha256=hKOErB5dzj44ThQ1_nZHak2-aXZlwMoxYcDWmPb3Xo8,1290 +django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po,sha256=UeGzaghsEt9Lt5DsEzRb9KCbuphWUQwLayt4AN194ao,1421 +django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo,sha256=3yDFJFxh16B2WigXeJxZV9vOyRxnjZ4MAUq3T_-PHGs,1079 +django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.po,sha256=4JsXrJxsMVVu9Y6OuFrwMV5L4Dglh9XJ5sp9CHDGHaA,1288 +django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo,sha256=4-6RBAvrtA1PY3LNxMrgwzBLZE0ZKwWaXa7SmtmAIyk,1031 +django/contrib/contenttypes/locale/id/LC_MESSAGES/django.po,sha256=xdxEOgfta1kaXyQAngmmbL8wDQzJU6boC9HdbmoM1iI,1424 +django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo,sha256=3SSRXx4tYiMUc00LZ9kGHuvTgaWpsICEf5G208CEqgg,1051 +django/contrib/contenttypes/locale/io/LC_MESSAGES/django.po,sha256=1ku9WPcenn47DOF05HL2eRqghZeRYfklo2huYUrkeJ0,1266 +django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo,sha256=ZYWbT4qeaco8h_J9SGF2Bs7Rdu3auZ969xZ0RQ_03go,1049 +django/contrib/contenttypes/locale/is/LC_MESSAGES/django.po,sha256=iNdghSbBVPZmfrHu52hRG8vHMgGUfOjLqie09fYcuso,1360 +django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo,sha256=GSP0BJc3bGLoNS0tnhiz_5dtSh5NXCrBiZbnwEhWbpk,1075 +django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po,sha256=njEgvhDwWOc-CsGBDz1_mtEsXx2aTU6cP3jZzcLkkYk,1457 +django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo,sha256=tVH6RvZ5tXz56lEM3aoJtFp5PKsSR-XXpi8ZNCHjiFw,1211 +django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.po,sha256=5_-Uo7Ia3X9gAWm2f72ezQnNr_pQzf6Ax4AUutULuZU,1534 +django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo,sha256=1_yGL68sK0QG_mhwFAVdksiDlB57_1W5QkL7NGGE5L0,1429 +django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po,sha256=6iUBbKjXsIgrq7Dj_xhxzoxItSSSKwQjIZsDayefGr8,1654 +django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo,sha256=SNY0vydwLyR2ExofAHjmg1A2ykoLI7vU5Ryq-QFu5Gs,627 +django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po,sha256=PU-NAl6xUEeGV0jvJx9siVBTZIzHywL7oKc4DgUjNkc,1130 +django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo,sha256=BXifukxf48Lr0t0V3Y0GJUMhD1KiHN1wwbueoK0MW1A,678 +django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po,sha256=fTPlBbnaNbLZxjzJutGvqe33t6dWsEKiHQYaw27m7KQ,1123 +django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo,sha256=a4sDGaiyiWn-1jFozYI4vdAvuHXrs8gbZErP_SAUk9Y,714 +django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po,sha256=A6Vss8JruQcPUKQvY-zaubVZDTLEPwHsnd_rXcyzQUs,1168 +django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo,sha256=myRfFxf2oKcbpmCboongTsL72RTM95nEmAC938M-ckE,1089 +django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po,sha256=uui_LhgGTrW0uo4p-oKr4JUzhjvkLbFCqRVLNMrptzY,1383 +django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.mo,sha256=ULoIe36zGKPZZs113CenA6J9HviYcBOKagXrPGxyBUI,1182 +django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.po,sha256=FnW5uO8OrTYqbvoRuZ6gnCD6CHnuLjN00s2Jo1HX1NE,1465 +django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po,sha256=dwVKpCRYmXTD9h69v5ivkZe-yFtvdZNZ3VfuyIl4olY,989 +django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo,sha256=HucsRl-eqfxw6ESTuXvl7IGjPGYSI9dxM5lMly_P1sc,1215 +django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po,sha256=odzYqHprxKFIrR8TzdxA4WeeMK0W0Nvn2gAVuzAsEqI,1488 +django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo,sha256=nWfy7jv2VSsKYT6yhk_xqxjk1TlppJfsQcurC40CeTs,1065 +django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po,sha256=pHlbzgRpIJumDMp2rh1EKrxFBg_DRcvLLgkQ3mi_L0s,1356 +django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo,sha256=KTFZWm0F4S6lmi1FX76YKOyJqIZN5cTsiTBI_D4ADHs,1258 +django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po,sha256=mQZosS90S-Bil6-EoGjs9BDWYlvOF6mtUDZ8h9NxEdE,1534 +django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo,sha256=rtmLWfuxJED-1KuqkUT8F5CU1KGJP0Of718n2Gl_gI0,1378 +django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po,sha256=Z-kL9X9CD7rYfa4Uoykye2UgCNQlgyql0HTv1eUXAf4,1634 +django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo,sha256=J6kKYjUOsQxptNXDcCaY4d3dHJio4HRibRk3qfwO6Xc,1225 +django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.po,sha256=x8aRJH2WQvMBBWlQt3T3vpV4yHeZXLmRTT1U0at4ZIk,1525 +django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po,sha256=FgZKD9E-By0NztUnBM4llpR59K0MJSIMZIrJYGKDqpc,983 +django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.mo,sha256=EIwbOZ0QahW9AFFWRmRdKGKBtYYY_eTcfU4eqDVSVxw,1035 +django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.po,sha256=t7nKsOMxycn_CsXw2nIfU-owJRge3FAixgbTsDhffvo,1225 +django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo,sha256=YYa2PFe9iJygqL-LZclfpgR6rBmIvx61JRpBkKS6Hrs,1554 +django/contrib/contenttypes/locale/my/LC_MESSAGES/django.po,sha256=6F3nXd9mBc-msMchkC8OwAHME1x1O90xrsZp7xmynpU,1732 +django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo,sha256=EHU9Lm49U7WilR5u-Lq0Fg8ChR_OzOce4UyPlkZ6Zs4,1031 +django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po,sha256=lbktPYsJudrhe4vxnauzpzN9eNwyoVs0ZmZSdkwjkOk,1403 +django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo,sha256=-zZAn5cex4PkScoZVqS74PUMThJJuovZSk3WUKZ8hnw,1344 +django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po,sha256=1ZCUkulQ9Gxb50yMKFKWaTJli2SinBeNj0KpXkKpsNE,1519 +django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo,sha256=aXDHgg891TyTiMWNcbNaahfZQ2hqtl5yTkx5gNRocMU,1040 +django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po,sha256=zDJ_vyQxhP0mP06U-e4p6Uj6v1g863s8oaxc0JIAMjg,1396 +django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo,sha256=a_X8e2lMieWwUtENJueBr8wMvkw6at0QSaWXd5AM6yQ,1040 +django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po,sha256=xFSirHUAKv78fWUpik6xv-6WQSEoUgN5jjPbTOy58C4,1317 +django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo,sha256=QV533Wu-UpjV3XiCe83jlz7XGuwgRviV0ggoeMaIOIY,1116 +django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po,sha256=UZahnxo8z6oWJfEz4JNHGng0EAifXYtJupB6lx0JB60,1334 +django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo,sha256=qacd7eywof8rvJpstNfEmbHgvDiQ9gmkcyG7gfato8s,697 +django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.po,sha256=Kq2NTzdbgq8Q9jLLgV-ZJaSRj43D1dDHcRIgNnJXu-s,1145 +django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo,sha256=J5sC36QwKLvrMB4adsojhuw2kYuEckHz6eoTrZwYcnI,1208 +django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po,sha256=gxP59PjlIHKSiYZcbgIY4PUZSoKYx4YKCpm4W4Gj22g,1577 +django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo,sha256=MjyyKlA75YtEG9m6hm0GxKhU-cF3m1PA_j63BuIPPlE,1125 +django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po,sha256=X2Rec6LXIqPa9AVqF4J2mzYrwfls1BdUfN8XOe0zkdQ,1379 +django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo,sha256=qjl-3fBqNcAuoviGejjILC7Z8XmrRd7gHwOgwu1x1zw,1117 +django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.po,sha256=Xp0iBhseS8v13zjDcNQv4BDaroMtDJVs4-BzNc0UOpU,1494 +django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo,sha256=sCthDD10v7GY2cui9Jj9HK8cofVEg2WERCm6aktOM-4,1142 +django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.po,sha256=n-BPEfua0Gd6FN0rsP7qAlTGbQEZ14NnDMA8jI2844Y,1407 +django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo,sha256=OSf206SFmVLULHmwVhTaRhWTQtyDKsxe03gIzuvAUnY,1345 +django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.po,sha256=xHyJYD66r8We3iN5Hqo69syWkjhz4zM7X9BWPIiI6mU,1718 +django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo,sha256=xf95XGPB9Tyz7p8JH1aqiY4BYMkug2cnN5gNNlHV7xU,1082 +django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po,sha256=wqbW-x6NEJU7nIAmYnKw9ncgmrcD3TKW7aPg7rIiX_M,1395 +django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo,sha256=sMML-ubI_9YdKptzeri1du8FOdKcEzJbe4Tt0J4ePFI,1147 +django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po,sha256=0zxiyzRWWDNVpNNLlcwl-OLh5sLukma1vm-kYrGHYrE,1392 +django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo,sha256=jYDQH3OpY4Vx9hp6ISFMI88uxBa2GDQK0BkLGm8Qulk,1066 +django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po,sha256=JIvguXVOFpQ3MRqRXHpxlg8_YhEzCsZBBMdpekYTxlk,1322 +django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo,sha256=GUXj97VN15HdY7XMy5jmMLEu13juD3To5NsztcoyPGs,1204 +django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po,sha256=T1w_EeB6yT-PXr7mrwzqu270linf_KY3_ZCgl4wfLAQ,1535 +django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=m2plistrI8O-ztAs5HmDYXG8N_wChaDfXFev0GYWVys,1102 +django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.po,sha256=lJrhLPDbJAcXgBPco-_lfUXqs31imj_vGwE5p1EXZjk,1390 +django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo,sha256=I5bmwlJ8jVHoJW6-uGZ6r8FRIEVdg3xQseenfnhKkpg,1066 +django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po,sha256=KybZ8wY7r_ZU0beG8plP36ba8CEMKa3MTWwbL_Sf8zg,1331 +django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo,sha256=XLPle0JYPPkmm5xpJRmWztMTF1_3a2ZubWE4ur2sav8,563 +django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po,sha256=jRc8Eh6VuWgqc4kM-rxjbVE3yV9uip6mOJLdD6yxGLM,1009 +django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo,sha256=L3eF4z9QSmIPqzEWrNk8-2uLteQUMsuxiD9VZyRuSfo,678 +django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po,sha256=iDb9lRU_-YPmO5tEQeXEZeGeFe-wVZy4k444sp_vTgw,1123 +django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo,sha256=S_UF_mZbYfScD6Z36aB-kwtTflTeX3Wt4k7z_pEcOV8,690 +django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po,sha256=aAGMMoJPg_pF9_rCNZmda5A_TvDCvQfYEL64Xdoa4jo,1135 +django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.mo,sha256=dkLic6fD2EMzrB7m7MQazaGLoJ_pBw55O4nYZc5UYEs,864 +django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.po,sha256=1nv1cVJewfr44gbQh1Szzy3DT4Y9Dy7rUgAZ81otJQs,1232 +django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo,sha256=qilt-uZMvt0uw-zFz7-eCmkGEx3XYz7NNo9Xbq3s7uI,1186 +django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po,sha256=42F34fNEn_3yQKBBJnCLttNeyktuLVpilhMyepOd6dg,1444 +django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.mo,sha256=0fuA3E487-pceoGpX9vMCwSnCItN_pbLUIUzzcrAGOE,1068 +django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.po,sha256=pS8wX9dzxys3q8Vvz3PyoVJYqplXhNuAqfq7Dsb07fw,1283 +django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo,sha256=gKg2FCxs2fHpDB1U6gh9xrP7mOpYG65pB4CNmdPYiDg,1057 +django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po,sha256=gmI3RDhq39IlDuvNohT_FTPY5QG8JD0gFxG5CTsvVZs,1345 +django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo,sha256=_LQ1N04FgosdDLUYXJOEqpCB2Mg92q95cBRgYPi1MyY,659 +django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.po,sha256=L7wMMpxGnpQiKd_mjv2bJpE2iqCJ8XwiXK0IN4EHSbM,1110 +django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.po,sha256=YVyej0nAhhEf7knk4vCeRQhmSQeGZLhMPPXyIyWObnM,977 +django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo,sha256=GgAuuLexfhYl1fRKPfZI5uMTkt2H42Ogil6MQHcejkU,1404 +django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po,sha256=1HzO_Wmxqk0Kd5gtACKZODiH8ZEpOf5Eh8Mkrg3IMf8,1779 +django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo,sha256=OJs_EmDBps-9a_KjFJnrS8IqtJfd25LaSWeyG8u8UfI,671 +django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po,sha256=f0FnsaAM_qrBuCXzLnkBrW5uFfVc6pUh7S-qp4918Ng,1122 +django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo,sha256=kGYgEI1gHkyU4y_73mBJN1hlKC2JujVXMg6iCdWncDg,1155 +django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po,sha256=RIDUgsElfRF8bvBdUKtshizuMnupdMGAM896s7qZKD4,1439 +django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=RviK0bqLZzPrZ46xUpc0f8IKkw3JLtsrt0gNA74Ypj0,1015 +django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.po,sha256=vSKJDEQ_ANTj3-W8BFJd9u_QGdTMF12iS15rVgeujOs,1380 +django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=NMumOJ9dPX-7YjQH5Obm4Yj0-lnGXJmCMN5DGbsLQG4,1046 +django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po,sha256=7WIqYRpcs986MjUsegqIido5k6HG8d3FVvkrOQCRVCI,1338 +django/contrib/contenttypes/management/__init__.py,sha256=ZVHVJAYi_jCIXxWUZSkxq0IDECe6bvbFsWayrqbutfc,4937 +django/contrib/contenttypes/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/contenttypes/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/contenttypes/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-310.pyc,, +django/contrib/contenttypes/management/commands/remove_stale_contenttypes.py,sha256=lbHKtUIqAbOQf5cO02Xp3ZQjgsy6niCn1v9jvYKLgiY,4245 +django/contrib/contenttypes/migrations/0001_initial.py,sha256=6-NKdPKCI-2eJnQkspHtLV4pwFLxt8CC0oRPzCjaa6k,1435 +django/contrib/contenttypes/migrations/0002_remove_content_type_name.py,sha256=L2DGA1x-ZSP4Tr7d9jq1ysJOvR7nWhzMgAk1NFpYxGU,1150 +django/contrib/contenttypes/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/contenttypes/migrations/__pycache__/0002_remove_content_type_name.cpython-310.pyc,, +django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/contenttypes/models.py,sha256=WNyzQh3HPwvJEdUdbg2uyWnQRH4UeBMmQotc19ZVW0A,6626 +django/contrib/contenttypes/views.py,sha256=HBoIbNpgHTQN5pH8mul77UMEMZHbbkEH_Qdln-XFgd0,3549 +django/contrib/flatpages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/__pycache__/__init__.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/admin.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/apps.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/forms.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/middleware.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/models.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/sitemaps.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/urls.cpython-310.pyc,, +django/contrib/flatpages/__pycache__/views.cpython-310.pyc,, +django/contrib/flatpages/admin.py,sha256=ynemOSDgvKoCfRFLXZrPwj27U0mPUXmxdrue7SOZeqQ,701 +django/contrib/flatpages/apps.py,sha256=_OlaDxWbMrUmFNCS4u-RnBsg67rCWs8Qzh_c58wvtXA,252 +django/contrib/flatpages/forms.py,sha256=MyuENmsP1Wn01frdVSug7JnabiwoHf8nm-PthAlcoQw,2493 +django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo,sha256=c0XEKXJYgpy2snfmWFPQqeYeVla1F5s_wXIBaioiyPc,2297 +django/contrib/flatpages/locale/af/LC_MESSAGES/django.po,sha256=_psp14JfICDxrKx_mKF0uLnItkJPkCNMvrNOyE35nFw,2428 +django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo,sha256=dBHaqsaKH9QOIZ0h2lIDph8l9Bv2UAcD-Hr9TAxj8Ac,2636 +django/contrib/flatpages/locale/ar/LC_MESSAGES/django.po,sha256=-0ZdfA-sDU8fOucgT2Ow1iM3QnRMuQeslMOSwYhAH9M,2958 +django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=jp6sS05alESJ4-SbEIf574UPVcbllAd_J-FW802lGyk,2637 +django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.po,sha256=yezpjWcROwloS08TEMo9oPXDKS1mfFE9NYI66FUuLaA,2799 +django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo,sha256=4SEsEE2hIZJwQUNs8jDgN6qVynnUYJUIE4w-usHKA6M,924 +django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po,sha256=5UlyS59bVo1lccM6ZgdYSgHe9NLt_WeOdXX-swLKubU,1746 +django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo,sha256=6ID6KejChxQzsUT4wevUAjd9u7Ly21mfJ22dgbitNN4,2373 +django/contrib/flatpages/locale/az/LC_MESSAGES/django.po,sha256=v7tkbuUUqkbUzXoOOWxS75TpvuMESqoZAEXDXisfbiA,2679 +django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo,sha256=mOQlbfwwIZiwWCrFStwag2irCwsGYsXIn6wZDsPRvyA,2978 +django/contrib/flatpages/locale/be/LC_MESSAGES/django.po,sha256=wlIfhun5Jd6gxbkmmYPSIy_tzPVmSu4CjMwPzBNnvpo,3161 +django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo,sha256=9Un5mKtsAuNeYWFQKFkIyCpQquE6qVD3zIrFoq8sCDI,2802 +django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po,sha256=Vr6d-9XjgK4_eXdWY3FEpdTlCEGgbCv93bLGyMTE9hs,3104 +django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo,sha256=2oK2Rm0UtAI7QFRwpUR5aE3-fOltE6kTilsTbah737Y,2988 +django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po,sha256=QrbX69iqXOD6oByLcgPkD1QzAkfthpfTjezIFQ-6kVg,3172 +django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo,sha256=SKbykdilX_NcpkVi_lHF8LouB2G49ZAzdF09xw49ERc,2433 +django/contrib/flatpages/locale/br/LC_MESSAGES/django.po,sha256=O_mwrHIiEwV4oB1gZ7Yua4nVKRgyIf3j5UtedZWAtwk,2783 +django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo,sha256=bd7ID7OsEhp57JRw_TXoTwsVQNkFYiR_sxSkgi4WvZU,1782 +django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po,sha256=IyFvI5mL_qesEjf6NO1nNQbRHhCAZQm0UhIpmGjrSwQ,2233 +django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo,sha256=GcMVbg4i5zKCd2Su7oN30WVJN7Q9K7FsFifgTB8jDPI,2237 +django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po,sha256=-aJHSbWPVyNha_uF6R35Q6yn4-Hse3jTInr9jtaxKOI,2631 +django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo,sha256=8nwep22P86bMCbW7sj4n0BMGl_XaJIJV0fjnVp-_dqY,2340 +django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po,sha256=1agUeRthwpam1UvZY4vRnZtLLbiop75IEXb6ul_e3mg,2611 +django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo,sha256=zr_2vsDZsrby3U8AmvlJMU3q1U_4IrrTmz6oS29OWtQ,2163 +django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po,sha256=E_NC_wtuhWKYKB3YvYGB9ccJgKI3AfIZlB2HpXSyOsk,2370 +django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo,sha256=nALoI50EvFPa4f3HTuaHUHATF1zHMjo4v5zcHj4n6sA,2277 +django/contrib/flatpages/locale/da/LC_MESSAGES/django.po,sha256=j4dpnreB7LWdZO7Drj7E9zBwFx_Leuj7ZLyEPi-ccAQ,2583 +django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo,sha256=I4CHFzjYM_Wd-vuIYOMf8E58ntOgkLmgOAg35Chdz3s,2373 +django/contrib/flatpages/locale/de/LC_MESSAGES/django.po,sha256=P6tPVPumP9JwBIv-XXi1QQYJyj1PY3OWoM4yOAmgTRE,2592 +django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo,sha256=oTILSe5teHa9XTYWoamstpyPu02yb_xo8S0AtkP7WP8,2391 +django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.po,sha256=1xD2aH5alerranvee6QLZqgxDVXxHThXCHR4kOJAV48,2576 +django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo,sha256=LQ8qIGwzoKwewtLz_1NhnhEeR4dPx2rrQ_hAN4BF6Og,2864 +django/contrib/flatpages/locale/el/LC_MESSAGES/django.po,sha256=gbLO52fcZK7LoG5Rget2Aq5PTFoz467ackXpSsR81kY,3221 +django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/flatpages/locale/en/LC_MESSAGES/django.po,sha256=0bNWKiu-1MkHFJ_UWrCLhp9ENr-pHzBz1lkhBkkrhJM,2169 +django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTt7KtwiEyMEKYVzkPSqs6VS0CiUfK7ISz2c6rV2erA,2210 +django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.po,sha256=_V4RTf0JtmyU7DRQv7jIwtPJs05KA2THPid5nKQ0ego,2418 +django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo,sha256=7zyXYOsqFkUGxclW-VPPxrQTZKDuiYQ7MQJy4m8FClo,1989 +django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po,sha256=oHrBd6lVnO7-SdnO-Taa7iIyiqp_q2mQZjkuuU3Qa_s,2232 +django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo,sha256=QsmIOjVlQGcgeAFTa8ND9Uuuihyl63OIJnFwh4MkvZ0,2032 +django/contrib/flatpages/locale/eo/LC_MESSAGES/django.po,sha256=uVTSEAswL_siMnbhOsqWyMGziQr9byUQPiltEEZpS7I,2530 +django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo,sha256=9Q7Qf1eSPvAfPTZSGWq7QMWrROY-CnpUkeRpiH8rpJw,2258 +django/contrib/flatpages/locale/es/LC_MESSAGES/django.po,sha256=3vGZ3uVCyWnIkDSUt6DMMOqyphv3EQteTPLx7e9J_sU,2663 +django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo,sha256=bUnFDa5vpxl27kn2ojTbNaCmwRkBCH-z9zKXAvXe3Z0,2275 +django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po,sha256=vEg3wjL_7Ee-PK4FZTaGRCXFscthkoH9szJ7H01K8w8,2487 +django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo,sha256=jt8wzeYky5AEnoNuAv8W4nGgd45XsMbpEdRuLnptr3U,2140 +django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.po,sha256=xrbAayPoxT7yksXOGPb-0Nc-4g14UmWANaKTD4ItAFA,2366 +django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo,sha256=Y5IOKRzooJHIhJzD9q4PKOe39Z4Rrdz8dBKuvmGkqWU,2062 +django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po,sha256=Y-EXhw-jISttA9FGMz7gY_kB-hQ3wEyKEaOc2gu2hKQ,2246 +django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo,sha256=EI6WskepXUmbwCPBNFKqLGNcWFVZIbvXayOHxOCLZKo,2187 +django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po,sha256=ipG6a0A2d0Pyum8GcknA-aNExVLjSyuUqbgHM9VdRQo,2393 +django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo,sha256=zriqETEWD-DDPiNzXgAzgEhjvPAaTo7KBosyvBebyc0,2233 +django/contrib/flatpages/locale/et/LC_MESSAGES/django.po,sha256=tMuITUlzy6LKJh3X3CxssFpTQogg8OaGHlKExzjwyOI,2525 +django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo,sha256=FoKazUkuPpDgsEEI6Gm-xnZYVHtxILiy6Yzvnu8y-L0,2244 +django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po,sha256=POPFB5Jd8sE9Z_ivYSdnet14u-aaXneTUNDMuOrJy00,2478 +django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo,sha256=2rA7-OR8lQbl_ZhlAC4cmHEmQ9mwxnA8q5M-gx3NmVQ,2612 +django/contrib/flatpages/locale/fa/LC_MESSAGES/django.po,sha256=_-yKW2xIN9XSXEwZTdkhEpRHJoacN8f56D3AkCvlFs0,3006 +django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo,sha256=VsQdof8hE_AKQGS-Qp82o8PTN_7NxxEdxelGenIAE-8,2256 +django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po,sha256=RL7eruNkgDjr1b3cF2yCqeM8eDKHwAqF6h8hYuxl6R4,2552 +django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo,sha256=ZqD4O3_Ny8p5i6_RVHlANCnPiowMd19Qi_LOPfTHav4,2430 +django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po,sha256=liAoOgT2CfpANL_rYzyzsET1MhsM19o7wA2GBnoDvMA,2745 +django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo,sha256=DRsFoZKo36F34XaiQg_0KUOr3NS_MG3UHptzOI4uEAU,476 +django/contrib/flatpages/locale/fy/LC_MESSAGES/django.po,sha256=9JIrRVsPL1m0NPN6uHiaAYxJXHp5IghZmQhVSkGo5g8,1523 +django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo,sha256=KKvDhZULHQ4JQ_31ltLkk88H2BKUbBXDQFSvdKFqjn8,2191 +django/contrib/flatpages/locale/ga/LC_MESSAGES/django.po,sha256=Yat7oU2XPQFQ8vhNq1nJFAlX2rqfxz4mjpU5TcnaYO8,2400 +django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo,sha256=KbaTL8kF9AxDBLDQWlxcP5hZ4zWnbkvY0l2xRKZ9Dg0,2469 +django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po,sha256=DVY_1R0AhIaI1qXIeRej3XSHMtlimeKNUwzFjc4OmwA,2664 +django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo,sha256=VXyPsc6cXB97dJJFGfD8Oh2lYpn8TFYjIOeFUQeYpVU,2039 +django/contrib/flatpages/locale/gl/LC_MESSAGES/django.po,sha256=MzE7lepmRu60wy9gn6Wxx-LtKIO9JwScSdJ3SyLRU9s,2366 +django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo,sha256=PbypHBhT3W_rp37u8wvaCJdtYB4IP-UeE02VUvSHPf0,2517 +django/contrib/flatpages/locale/he/LC_MESSAGES/django.po,sha256=f7phCRqJPFL7CsuSE1xg9xlaBoOpdd-0zoTYotff29M,2827 +django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo,sha256=w29ukoF48C7iJ6nE045YoWi7Zcrgu_oXoxT-r6gcQy8,2770 +django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po,sha256=nXq5y1FqMGVhpXpQVdV3uU5JcUtBc2BIrf-n__C2q30,3055 +django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo,sha256=Mt4gpBuUXvcBl8K714ls4PimHQqee82jFxY1BEAYQOE,2188 +django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po,sha256=ZbUMJY6a-os-xDmcDCJNrN4-YqRe9b_zJ4V5gt2wlGI,2421 +django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo,sha256=Pk44puT-3LxzNdGYxMALWpFdw6j6W0G-dWwAfv8sopI,2361 +django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.po,sha256=mhnBXgZSK19E4JU8p2qzqyZqozSzltK-3iY5glr9WG8,2538 +django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo,sha256=rZxICk460iWBubNq53g9j2JfKIw2W7OqyPG5ylGE92s,2363 +django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po,sha256=DDP7OLBkNbWXr-wiulmQgG461qAubJ8VrfCCXbyPk2g,2700 +django/contrib/flatpages/locale/hy/LC_MESSAGES/django.mo,sha256=qocNtyLcQpjmGqQ130VGjJo-ruaOCtfmZehS9If_hWk,2536 +django/contrib/flatpages/locale/hy/LC_MESSAGES/django.po,sha256=WD8ohMnsaUGQItyqQmS46d76tKgzhQ17X_tGevqULO0,2619 +django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo,sha256=bochtCPlc268n0WLF0bJtUUT-XveZLPOZPQUetnOWfU,500 +django/contrib/flatpages/locale/ia/LC_MESSAGES/django.po,sha256=gOJ850e8sFcjR2G79zGn3_0-9-KSy591i7ketBRFjyw,1543 +django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo,sha256=2kRHbcmfo09pIEuBb8q5AOkgC0sISJrAG37Rb5F0vts,2222 +django/contrib/flatpages/locale/id/LC_MESSAGES/django.po,sha256=1avfX88CkKMh2AjzN7dxRwj9pgohIBgKE0aXB_shZfc,2496 +django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo,sha256=N8R9dXw_cnBSbZtwRbX6Tzw5XMr_ZdRkn0UmsQFDTi4,464 +django/contrib/flatpages/locale/io/LC_MESSAGES/django.po,sha256=_pJveonUOmMu3T6WS-tV1OFh-8egW0o7vU3i5YqgChA,1511 +django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo,sha256=lFtP1N5CN-x2aMtBNpB6j5HsZYZIZYRm6Y-22gNe1Ek,2229 +django/contrib/flatpages/locale/is/LC_MESSAGES/django.po,sha256=9e132zDa-n6IZxB8jO5H8I0Wr7ubYxrFEMBYj2W49vI,2490 +django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo,sha256=oOEG327VGpi0K5P2UOQgQa39ln15t0lAz2Z36MIQQAc,2209 +django/contrib/flatpages/locale/it/LC_MESSAGES/django.po,sha256=ar8i-bTtAKhiXLULCsKMddpmYBjKyg2paYxBI6ImY1s,2526 +django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo,sha256=Qax3t7FFRonMrszVEeiyQNMtYyWQB3dmOeeIklEmhAg,2469 +django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po,sha256=N6PBvnXLEWELKTx8nHm5KwydDuFFKq5pn6AIHsBSM5M,2848 +django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo,sha256=R4OSbZ-lGxMdeJYsaXVXpo6-KSZWeKPuErKmEsUvEQE,3022 +django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po,sha256=TWKtkRamM6YD-4WMoqfZ7KY-ZPs5ny7G82Wst6vQRko,3306 +django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo,sha256=lMPryzUQr21Uy-NAGQhuIZjHz-4LfBHE_zxEc2_UPaw,2438 +django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po,sha256=3y9PbPw-Q8wM7tCq6u3KeYUT6pfTqcQwlNlSxpAXMxQ,2763 +django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo,sha256=FYRfhNSqBtavYb10sHZNfB-xwLwdZEfVEzX116nBs-k,1942 +django/contrib/flatpages/locale/km/LC_MESSAGES/django.po,sha256=d2AfbR78U0rJqbFmJQvwiBl_QvYIeSwsPKEnfYM4JZA,2471 +django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo,sha256=n5HCZEPYN_YIVCXrgA1qhxvfhZtDbhfiannJy5EkHkI,1902 +django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po,sha256=-CHwu13UuE2-Qg6poG949I_dw3YiPI9ZhMh5h2vP4xw,2443 +django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo,sha256=M-IInVdIH24ORarb-KgY60tEorJZgrThDfJQOxW-S0c,2304 +django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po,sha256=DjAtWVAN_fwOvZb-7CUSLtO8WN0Sr08z3jQLNqZ98wY,2746 +django/contrib/flatpages/locale/ky/LC_MESSAGES/django.mo,sha256=WmdWR6dRgmJ-nqSzFDUETypf373fj62igDVHC4ww7hQ,2667 +django/contrib/flatpages/locale/ky/LC_MESSAGES/django.po,sha256=0XDF6CjQTGkuaHADytG95lpFRVndlf_136q0lrQiU1U,2907 +django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo,sha256=Wkvlh5L_7CopayfNM5Z_xahmyVje1nYOBfQJyqucI_0,502 +django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po,sha256=gGeTuniu3ZZ835t9HR-UtwCcd2s_Yr7ihIUm3jgQ7Y0,1545 +django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo,sha256=es6xV6X1twtqhIMkV-MByA7KZ5SoVsrx5Qh8BuzJS0Q,2506 +django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po,sha256=T__44veTC_u4hpPvkLekDOWfntXYAMzCd5bffRtGxWA,2779 +django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo,sha256=RJbVUR8qS8iLL3dD5x1TOau4hcdscHUJBfxge3p3dsM,2359 +django/contrib/flatpages/locale/lv/LC_MESSAGES/django.po,sha256=M6GT6S-5-7__RtSbJ9oqkIlxfU3FIWMlGAQ03NEfcKo,2610 +django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo,sha256=55H8w6fB-B-RYlKKkGw3fg2m-djxUoEp_XpupK-ZL70,2699 +django/contrib/flatpages/locale/mk/LC_MESSAGES/django.po,sha256=OhHJ5OVWb0jvNaOB3wip9tSIZ1yaPPLkfQR--uUEyUI,2989 +django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo,sha256=VMMeOujp5fiLzrrbDeH24O2qKBPUkvI_YTSPH-LQjZc,3549 +django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po,sha256=KR2CGnZ1sVuRzSGaPj5IlspoAkVuVEdf48XsAzt1se0,3851 +django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo,sha256=tqwROY6D-bJ4gbDQIowKXfuLIIdCWksGwecL2sj_wco,2776 +django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po,sha256=jqiBpFLXlptDyU4F8ZWbP61S4APSPh0-nuTpNOejA6c,3003 +django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo,sha256=GvSfsp0Op7st6Ifd8zp8Cj4tTHoFMltQb4p64pebrqI,468 +django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po,sha256=sayU0AfVaSFpBj0dT32Ri55LRafQFUHLi03K06kI7gc,1515 +django/contrib/flatpages/locale/ms/LC_MESSAGES/django.mo,sha256=5t_67bMQhux6v6SSWqHfzzCgc6hm3olxgHAsKOMGGZU,2184 +django/contrib/flatpages/locale/ms/LC_MESSAGES/django.po,sha256=-ZzZ8lfAglGkO_BRYz1lRlywxaF1zZ28-Xv74O2nT04,2336 +django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo,sha256=OcbiA7tJPkyt_WNrqyvoFjHt7WL7tMGHV06AZSxzkho,507 +django/contrib/flatpages/locale/my/LC_MESSAGES/django.po,sha256=EPWE566Vn7tax0PYUKq93vtydvmt-A4ooIau9Cwcdfc,1550 +django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo,sha256=L_XICESZ0nywkk1dn6RqzdUbFTcR92ju-zHCT1g3iEg,2208 +django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po,sha256=ZtcBVD0UqIcsU8iLu5a2wnHLqu5WRLLboVFye2IuQew,2576 +django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo,sha256=gDZKhcku1NVlSs5ZPPupc7RI8HOF7ex0R4Rs8tMmrYE,1500 +django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po,sha256=GWlzsDaMsJkOvw2TidJOEf1Fvxx9WxGdGAtfZIHkHwk,2178 +django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo,sha256=_yV_-SYYjpbo-rOHp8NlRzVHFPOSrfS-ndHOEJ9JP3Y,2231 +django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po,sha256=xUuxx2b4ZTCA-1RIdoMqykLgjLLkmpO4ur1Vh93IITU,2669 +django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo,sha256=sHkuZneEWo1TItSlarlnOUR7ERjc76bJfHUcuFgd9mQ,2256 +django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po,sha256=MpI9qkWqj4rud__xetuqCP-eFHUgMYJpfBhDnWRKPK4,2487 +django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo,sha256=cXGTA5M229UFsgc7hEiI9vI9SEBrNQ8d3A0XrtazO6w,2329 +django/contrib/flatpages/locale/os/LC_MESSAGES/django.po,sha256=m-qoTiKePeFviKGH1rJRjZRH-doJ2Fe4DcZ6W52rG8s,2546 +django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo,sha256=69_ZsZ4nWlQ0krS6Mx3oL6c4sP5W9mx-yAmOhZOnjPU,903 +django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po,sha256=N6gkoRXP5MefEnjywzRiE3aeU6kHQ0TUG6IGdLV7uww,1780 +django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo,sha256=5M5-d-TOx2WHlD6BCw9BYIU6bYrSR0Wlem89ih5k3Pc,2448 +django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po,sha256=oKeeo-vNfPaCYVUbufrJZGk0vsgzAE0kLQOTF5qHAK4,2793 +django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo,sha256=xD2pWdS3XMg7gAqBrUBmCEXFsOzEs0Npe8AJnlpueRY,2115 +django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po,sha256=-K2jipPUWjXpfSPq3upnC_bvtaRAeOw0OLRFv03HWFY,2326 +django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo,sha256=YGyagSFIc-ssFN8bnqVRce1_PsybvLmI8RVCygjow8E,2291 +django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po,sha256=pFA8RPNefZpuhbxBHLt9KrI2RiHxct5V-DnZA-XqBv0,2942 +django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo,sha256=oS3MXuRh2USyLOMrMH0WfMSFpgBcZWfrbCrovYgbONo,2337 +django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po,sha256=UNKGNSZKS92pJDjxKDLqVUW87DKCWP4_Q51xS16IZl0,2632 +django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo,sha256=AACtHEQuytEohUZVgk-o33O7rJTFAluq22VJOw5JqII,2934 +django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po,sha256=H6JOPAXNxji1oni9kfga_hNZevodStpEl0O6cDnZ148,3312 +django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo,sha256=8_NZkzRd3Bcewp4GiczCAjQshq5rl29TPEj1RbBPipo,2321 +django/contrib/flatpages/locale/sk/LC_MESSAGES/django.po,sha256=qo9Xvr2whYmwtc1n39T_9ADcI3nP-t-jtVh2S51KkFQ,2601 +django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo,sha256=MBjwhw6wppQUl0Lb_rShXZj_Sq-JLSkdYU5Xhi0OtYY,2173 +django/contrib/flatpages/locale/sl/LC_MESSAGES/django.po,sha256=6zbOXzkLTsdWRKAhuLzBVBc53n6MQKpvOeHw4cRrAlc,2400 +django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo,sha256=Jv2sebdAM6CfiLzgi1b7rHo5hp-6_BFeeMQ4_BwYpjk,2328 +django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po,sha256=Xm87FbWaQ1JGhhGx8uvtqwUltkTkwk5Oysagu8qIPUA,2548 +django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo,sha256=p--v7bpD8Pp6zeP3cdh8fnfC8g2nuhbzGJTdN9eoE58,2770 +django/contrib/flatpages/locale/sr/LC_MESSAGES/django.po,sha256=jxcyMN2Qh_osmo4Jf_6QUC2vW3KVKt1BupDWMMZyAXA,3071 +django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=3N4mGacnZj0tI5tFniLqC2LQCPSopDEM1SGaw5N1bsw,2328 +django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po,sha256=od7r3dPbZ7tRAJUW80Oe-nm_tHcmIiG6b2OZMsFg53s,2589 +django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo,sha256=ATOsOiNTLlCDWZO630xUUdnXfs7YW4nuqy9wUVOfzmU,2288 +django/contrib/flatpages/locale/sv/LC_MESSAGES/django.po,sha256=4bhfJNUKc1K1Z8IWSB9_YQVk_Gy3q4ZhkhfDS9FKaaw,2562 +django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo,sha256=Lhf99AGmazKJHzWk2tkGrMInoYOq0mtdCd8SGblnVCQ,1537 +django/contrib/flatpages/locale/sw/LC_MESSAGES/django.po,sha256=cos3eahuznpTfTdl1Vj_07fCOSYE8C9CRYHCBLYZrVw,1991 +django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo,sha256=nNuoOX-FPAmTvM79o7colM4C7TtBroTFxYtETPPatcQ,1945 +django/contrib/flatpages/locale/ta/LC_MESSAGES/django.po,sha256=XE4SndPZPLf1yXGl5xQSb0uor4OE8CKJ0EIXBRDA3qU,2474 +django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo,sha256=bMxhDMTQc_WseqoeqJMCSNy71o4U5tJZYgD2G0p-jD0,1238 +django/contrib/flatpages/locale/te/LC_MESSAGES/django.po,sha256=tmUWOrAZ98B9T6Cai8AgLCfb_rLeoPVGjDTgdsMOY1Y,2000 +django/contrib/flatpages/locale/tg/LC_MESSAGES/django.mo,sha256=gpzjf_LxwWX6yUrcUfNepK1LGez6yvnuYhmfULDPZ6E,2064 +django/contrib/flatpages/locale/tg/LC_MESSAGES/django.po,sha256=lZFLes8BWdJ-VbczHFDWCSKhKg0qmmk10hTjKcBNr5o,2572 +django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo,sha256=mct17_099pUn0aGuHu8AlZG6UqdKDpYLojqGYDLRXRg,2698 +django/contrib/flatpages/locale/th/LC_MESSAGES/django.po,sha256=PEcRx5AtXrDZvlNGWFH-0arroD8nZbutdJBe8_I02ag,2941 +django/contrib/flatpages/locale/tk/LC_MESSAGES/django.mo,sha256=5iVSzjcnJLfdAnrI1yOKua_OfHmgUu6ydixKkvayrzQ,753 +django/contrib/flatpages/locale/tk/LC_MESSAGES/django.po,sha256=0VK0Ju55wTvmYXqS9hPKLJXyTtTz9Z8mv_qw66ck5gg,1824 +django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo,sha256=pPNGylfG8S0iBI4ONZbky3V2Q5AG-M1njp27tFrhhZc,2290 +django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po,sha256=0ULZu3Plp8H9zdirHy3MSduJ_QRdpoaaivf3bL9MCwA,2588 +django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo,sha256=9RfCKyn0ZNYsqLvFNmY18xVMl7wnmDq5uXscrsFfupk,2007 +django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po,sha256=SUwalSl8JWI9tuDswmnGT8SjuWR3DQGND9roNxJtH1o,2402 +django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo,sha256=7KhzWgskBlHmi-v61Ax9fjc3NBwHB17WppdNMuz-rEc,490 +django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po,sha256=zidjP05Hx1OpXGqWEmF2cg9SFxASM4loOV85uW7zV5U,1533 +django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo,sha256=r2RZT8xQ1Gi9Yp0nnoNALqQ4zrEJ0JC7m26E5gSeq4g,3002 +django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po,sha256=qcVizoTiKYc1c9KwSTwSALHgjjSGVY2oito_bBRLVTE,3405 +django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo,sha256=Li4gVdFoNOskGKAKiNuse6B2sz6ePGqGvZu7aGXMNy0,1976 +django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po,sha256=hDasKiKrYov9YaNIHIpoooJo0Bzba___IuN2Hl6ofSc,2371 +django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo,sha256=FsFUi96oGTWGlZwM4qSMpuL1M2TAxsW51qO70TrybSM,1035 +django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po,sha256=ITX3MWd7nlWPxTCoNPl22_OMLTt0rfvajGvTVwo0QC8,1900 +django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=UTCQr9t2wSj6dYLK1ftpF8-pZ25dAMYLRE2wEUQva-o,2124 +django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po,sha256=loi9RvOnrgFs4qp8FW4RGis7wgDzBBXuwha5pFfLRxY,2533 +django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=Y5nDMQ3prLJ6OHuQEeEqjDLBC9_L-4XHDGJSLNoCgqg,2200 +django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po,sha256=6dKCSJpw_8gnunfTY86_apXdH5Pqe0kKYSVaqRtOIh0,2475 +django/contrib/flatpages/middleware.py,sha256=aXeOeOkUmpdkGOyqZnkR-l1VrDQ161RWIWa3WPBhGac,784 +django/contrib/flatpages/migrations/0001_initial.py,sha256=hTnlVa-FRA-H5lNuNkT2CKhxDViGJ3xyeZaPR7qpWR0,2409 +django/contrib/flatpages/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/flatpages/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/flatpages/models.py,sha256=3ugRRsDwB5C3GHOWvtOzjJl-y0yqqjYZBSOMt24QYuw,1764 +django/contrib/flatpages/sitemaps.py,sha256=CEhZOsLwv3qIJ1hs4eHlE_0AAtYjicb_yRzsstY19eg,584 +django/contrib/flatpages/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/templatetags/__pycache__/__init__.cpython-310.pyc,, +django/contrib/flatpages/templatetags/__pycache__/flatpages.cpython-310.pyc,, +django/contrib/flatpages/templatetags/flatpages.py,sha256=QH-suzsoPIMSrgyHR9O8uOdmfIkBv_w3LM-hGfQvnU8,3552 +django/contrib/flatpages/urls.py,sha256=Rs37Ij192SOtSBjd4Lx9YtpINfEMg7XRY01dEOY8Rgg,179 +django/contrib/flatpages/views.py,sha256=H4LG7Janb6Dcn-zINLmp358hR60JigAKGzh4A4PMPaM,2724 +django/contrib/gis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/__pycache__/apps.cpython-310.pyc,, +django/contrib/gis/__pycache__/feeds.cpython-310.pyc,, +django/contrib/gis/__pycache__/geometry.cpython-310.pyc,, +django/contrib/gis/__pycache__/measure.cpython-310.pyc,, +django/contrib/gis/__pycache__/ptr.cpython-310.pyc,, +django/contrib/gis/__pycache__/shortcuts.cpython-310.pyc,, +django/contrib/gis/__pycache__/views.cpython-310.pyc,, +django/contrib/gis/admin/__init__.py,sha256=4Y8GtbXZ5kmJutSADVitiMByz3Z96wmXleF9bUC5L3w,672 +django/contrib/gis/admin/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/admin/__pycache__/options.cpython-310.pyc,, +django/contrib/gis/admin/__pycache__/widgets.cpython-310.pyc,, +django/contrib/gis/admin/options.py,sha256=7dR6t_kD3yma_pcz8gwrudWiKbaIkIh6cFX7T5lqoWU,6390 +django/contrib/gis/admin/widgets.py,sha256=_PR7FeyClESjUabCLAdynewYufTFSw5iJhYcuQNJ4C4,4737 +django/contrib/gis/apps.py,sha256=dbAFKx9jj9_QdhdNfL5KCC47puH_ZTw098jsJFwDO9Y,417 +django/contrib/gis/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/__pycache__/utils.cpython-310.pyc,, +django/contrib/gis/db/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/base/__pycache__/adapter.cpython-310.pyc,, +django/contrib/gis/db/backends/base/__pycache__/features.cpython-310.pyc,, +django/contrib/gis/db/backends/base/__pycache__/models.cpython-310.pyc,, +django/contrib/gis/db/backends/base/__pycache__/operations.cpython-310.pyc,, +django/contrib/gis/db/backends/base/adapter.py,sha256=qbLG-sLB6EZ_sA6-E_uIClyp5E5hz9UQ-CsR3BWx8W8,592 +django/contrib/gis/db/backends/base/features.py,sha256=fF-AKB6__RjkxVRadNkOP7Av4wMaRGkXKybYV6ES2Gk,3718 +django/contrib/gis/db/backends/base/models.py,sha256=WqpmVLqK21m9J6k_N-SGPXq1VZMuNHafyB9xqxUwR4k,4009 +django/contrib/gis/db/backends/base/operations.py,sha256=SHW9YHjDexxhUN_BMQ85lGND5mLQwNQOJ6UQUXdNDOs,6778 +django/contrib/gis/db/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/mysql/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/features.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/operations.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-310.pyc,, +django/contrib/gis/db/backends/mysql/base.py,sha256=z75wKhm-e9JfRLCvgDq-iv9OqOjBBAS238JTTrWfHRQ,498 +django/contrib/gis/db/backends/mysql/features.py,sha256=AtlQM3bi4kTxYA-PIg2RGedGFTNeBDvF6_MNhaymWTc,1529 +django/contrib/gis/db/backends/mysql/introspection.py,sha256=zRwqQ3v1-GZ94Y35zdkon0raFduDs6KWquNcOXZQPhk,1807 +django/contrib/gis/db/backends/mysql/operations.py,sha256=2anxu0etylypmJadf6UwrhhKgRuXSwoKem3wneJ4rTs,4330 +django/contrib/gis/db/backends/mysql/schema.py,sha256=4hegMdTi5jTjVP3WtZPZ8grQYsBDnroS4qkKOeYPgYE,3070 +django/contrib/gis/db/backends/oracle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/adapter.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/features.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/schema.cpython-310.pyc,, +django/contrib/gis/db/backends/oracle/adapter.py,sha256=IB5C_zBe_yvbZ-w71kuh_A77sGESuJOUbxGTFKEHDw4,2025 +django/contrib/gis/db/backends/oracle/base.py,sha256=_7qhvEdbnrJQEKL51sg8YYu8kRYmQNAlBgNb2OUbBkw,507 +django/contrib/gis/db/backends/oracle/features.py,sha256=HGnfEoauV5O_gNxcbnzDqLM3QAXU1cESg7AF2t4ZPg0,566 +django/contrib/gis/db/backends/oracle/introspection.py,sha256=51_nz8_OKGP1TCw44no20Vt6EV1B9MTKu8irSnkqZBo,1890 +django/contrib/gis/db/backends/oracle/models.py,sha256=7mij7owmmwqAl-4rPJmEU_zW3hZZI0hix7HyFOwJkms,2084 +django/contrib/gis/db/backends/oracle/operations.py,sha256=x6zraAyoMZa8rdcLAc2k35rprJxBAoqzDSdFYMcm52k,8652 +django/contrib/gis/db/backends/oracle/schema.py,sha256=XQybscqUYVRAS9H_5tidC2wz-SAraOrX9VQgdgeYw0w,4282 +django/contrib/gis/db/backends/postgis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/introspection.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/models.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/operations.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/schema.cpython-310.pyc,, +django/contrib/gis/db/backends/postgis/adapter.py,sha256=zAesRYPyQ5vQJpHrBJr6YDiKE6oTlZXG1eatfR-EGNo,2219 +django/contrib/gis/db/backends/postgis/base.py,sha256=Ai3kvz6JqH1HqJG_XqjfnZOX26Uo7qmwbUPavudCcTI,937 +django/contrib/gis/db/backends/postgis/const.py,sha256=_ODq71ixhGpojzbO1DAWs5O4REFgzruIpQkNhPw9O-E,2007 +django/contrib/gis/db/backends/postgis/features.py,sha256=GuBG7N5_zUuyf49ZIOLMI0AxQciUMav5A1VxAmWlCuk,457 +django/contrib/gis/db/backends/postgis/introspection.py,sha256=ihrNd_qHQ64DRjoaPj9-1a0y3H8Ko4gWbK2N5fDA3_g,3164 +django/contrib/gis/db/backends/postgis/models.py,sha256=nFFshpCS4Az4js853MuZxdsp_SOOIlghjuu2XZEeB-Y,2002 +django/contrib/gis/db/backends/postgis/operations.py,sha256=BCp87C5Sc6xT29xdbi1DljYXQ-jqhNloq-ssHgkKbNU,16209 +django/contrib/gis/db/backends/postgis/pgraster.py,sha256=_cxT4yPT4123YdIs5M8_gV4ela-YdGd-B3fGISSD-5M,4658 +django/contrib/gis/db/backends/postgis/schema.py,sha256=gA5w4fEwKqP-S52OEYDLXSFD8MWCBKnAAXD6-ySMfE8,2879 +django/contrib/gis/db/backends/spatialite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/client.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/introspection.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-310.pyc,, +django/contrib/gis/db/backends/spatialite/adapter.py,sha256=qTiA5BBGUFND3D7xGK_85oo__HSexTH32XF4uin3ZV0,318 +django/contrib/gis/db/backends/spatialite/base.py,sha256=wU1fgp68CLyKELsMfO6zYM85ox4g_GloWESEK8EPrfM,3218 +django/contrib/gis/db/backends/spatialite/client.py,sha256=dNM7mqDyTzFlgQR1XhqZIftnR9VRH7AfcSvvy4vucEs,138 +django/contrib/gis/db/backends/spatialite/features.py,sha256=zkmJPExFtRqjRj608ZTlsSpxkYaPbV3A3SEfX3PcaFY,876 +django/contrib/gis/db/backends/spatialite/introspection.py,sha256=V_iwkz0zyF1U-AKq-UlxvyDImqQCsitcmvxk2cUw81A,3118 +django/contrib/gis/db/backends/spatialite/models.py,sha256=Of5O1At0W9wQ5PPLVpO0LWth2KDCOJt6Cfz5_OwaYR0,1930 +django/contrib/gis/db/backends/spatialite/operations.py,sha256=me6dv6Ejt5VQ2-lkiQC3TkiT-DABB92YqY9z7AcEra0,8308 +django/contrib/gis/db/backends/spatialite/schema.py,sha256=Uqo4Zp3q_HlmdjTWXvMAVn4_p5piK35iJ7UGXzqQ0Hc,7204 +django/contrib/gis/db/backends/utils.py,sha256=rLwSv79tKJPxvDHACY8rhPDLFZC79mEIlIySTyl_qqc,785 +django/contrib/gis/db/models/__init__.py,sha256=TrCS27JdVa-Q7Hok-YaJxb4eLrPdyvRmasJGIu05fvA,865 +django/contrib/gis/db/models/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/models/__pycache__/aggregates.cpython-310.pyc,, +django/contrib/gis/db/models/__pycache__/fields.cpython-310.pyc,, +django/contrib/gis/db/models/__pycache__/functions.cpython-310.pyc,, +django/contrib/gis/db/models/__pycache__/lookups.cpython-310.pyc,, +django/contrib/gis/db/models/__pycache__/proxy.cpython-310.pyc,, +django/contrib/gis/db/models/aggregates.py,sha256=kM-GKfjwurd7D3P6sDbkEpZXBaocqobcSarQ89OEJko,2969 +django/contrib/gis/db/models/fields.py,sha256=n40s9HYbqVpFKIW9b4X4IQ8INWUus7QZi5QdiWVPsTI,14312 +django/contrib/gis/db/models/functions.py,sha256=v-DSLE-QfBCghNn-M2ZzXbKEoyMDulS581CIeSBICvg,18259 +django/contrib/gis/db/models/lookups.py,sha256=1raEdKM1m7e2rdMRZ4g30UKzLieJ1QCXcAdeAyuH1LA,11798 +django/contrib/gis/db/models/proxy.py,sha256=o2wXW3sFIWhjhkSrzrwFaCdatvZLF8Z5Zs3s1ugmriA,3173 +django/contrib/gis/db/models/sql/__init__.py,sha256=-rzcC3izMJi2bnvyQUCMzIOrigBnY6N_5EQIim4wCSY,134 +django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-310.pyc,, +django/contrib/gis/db/models/sql/conversion.py,sha256=AZLJCMSw_svSLQPB5LTvA-YRFnMZSXYdHdvPSTFmK4Y,2432 +django/contrib/gis/feeds.py,sha256=0vNVVScIww13bOxvlQfXAOCItIOGWSXroKKl6QXGB58,5995 +django/contrib/gis/forms/__init__.py,sha256=Zyid_YlZzHUcMYkfGX1GewmPPDNc0ni7HyXKDTeIkjo,318 +django/contrib/gis/forms/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/forms/__pycache__/fields.cpython-310.pyc,, +django/contrib/gis/forms/__pycache__/widgets.cpython-310.pyc,, +django/contrib/gis/forms/fields.py,sha256=FrZaZWXFUdWK1QEu8wlda3u6EtqaVHjQRYrSKKu66PA,4608 +django/contrib/gis/forms/widgets.py,sha256=JYsXnfglVDttWxUbpd6GcoliXDwYUenVB2NfCfQo6iw,4000 +django/contrib/gis/gdal/LICENSE,sha256=VwoEWoNyts1qAOMOuv6OPo38Cn_j1O8sxfFtQZ62Ous,1526 +django/contrib/gis/gdal/__init__.py,sha256=m5cRj_qvD3jbLDjMk0ggDxW_hifeZ-CbtRtHZUIsRiQ,1827 +django/contrib/gis/gdal/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/datasource.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/driver.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/envelope.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/error.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/feature.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/field.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/geometries.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/geomtype.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/layer.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/libgdal.cpython-310.pyc,, +django/contrib/gis/gdal/__pycache__/srs.cpython-310.pyc,, +django/contrib/gis/gdal/base.py,sha256=yymyL0vZRMBfiFUzrehvaeaunIxMH5ucGjPRfKj-rAo,181 +django/contrib/gis/gdal/datasource.py,sha256=OkvQNRQXlKExw181GqD7JKElGGrSTI3jwhNZf1DkGNU,4606 +django/contrib/gis/gdal/driver.py,sha256=eCzrqEVOwyTlcRItrUirmEdNaSrsAIvw9jP_Z669xds,3351 +django/contrib/gis/gdal/envelope.py,sha256=Aj3Qn33QWjDYrwX1je2AZOmokffzs-s4kD96HL1easQ,7323 +django/contrib/gis/gdal/error.py,sha256=Vt-Uis9z786UGE3tD7fjiH8_0P5HSTO81n4fad4l6kw,1578 +django/contrib/gis/gdal/feature.py,sha256=HPWoCZjwzsUnhc7QmKh-BBMRqJCjj07RcFI6vjbdnp4,4017 +django/contrib/gis/gdal/field.py,sha256=2v1ouT_nxL_OkVsoIl1u79TaJCK3ib0M4gL_Q_uoFeo,6927 +django/contrib/gis/gdal/geometries.py,sha256=tYXqoHD0kY8LWN1SVcabj15kfeXy2WTQW9zKIeR8-iQ,24346 +django/contrib/gis/gdal/geomtype.py,sha256=VD_w5GymdaKJwgBW1cq2Xjtl3EVXCvJh26LIlKgW_PM,3071 +django/contrib/gis/gdal/layer.py,sha256=PygAgsRZzWekp6kq6NEAZ6vhQTSo1Nk4c1Yi_pOdK58,8825 +django/contrib/gis/gdal/libgdal.py,sha256=q8cknqkr32TU6uKCuDD9kWXsLtx3lV0juhqBwc7xWKE,3577 +django/contrib/gis/gdal/prototypes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/ds.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/errcheck.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-310.pyc,, +django/contrib/gis/gdal/prototypes/ds.py,sha256=7ITRVx-ewxVFzLNV5DwBoqTCNfb74FhrtrnWyAjaTGU,4650 +django/contrib/gis/gdal/prototypes/errcheck.py,sha256=wlRqrVnozMingrYIBH_9oMMzY9DMrX00BYzP_n54iu0,4173 +django/contrib/gis/gdal/prototypes/generation.py,sha256=c4m3x0QkDhDDaYxavGcvMLs3RNNb9EzfKTzHudWF1f8,4889 +django/contrib/gis/gdal/prototypes/geom.py,sha256=LjygKS-WbNMXj4Y8kaYGSn0OU5-UlQpjCmpmj3aPjhY,5046 +django/contrib/gis/gdal/prototypes/raster.py,sha256=HPLc2gAsGRhNwkjTgtZzHdjWG8LKbcSdwRl1A3qjQDk,5994 +django/contrib/gis/gdal/prototypes/srs.py,sha256=o103FkuUlAjk4drsHuT1JpOLp1wfTAIG_aPYj9QnIS0,3785 +django/contrib/gis/gdal/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/gdal/raster/__pycache__/band.cpython-310.pyc,, +django/contrib/gis/gdal/raster/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/gdal/raster/__pycache__/const.cpython-310.pyc,, +django/contrib/gis/gdal/raster/__pycache__/source.cpython-310.pyc,, +django/contrib/gis/gdal/raster/band.py,sha256=RPdut6BeQ9vW71rrPMwb2CnXrbCys8YAt1BA8Aholy0,8343 +django/contrib/gis/gdal/raster/base.py,sha256=2GGlL919lPr7YVGFtdIynLPIH-QKYhzrUpoXwVRlM1k,2882 +django/contrib/gis/gdal/raster/const.py,sha256=xBoMW6PeykWg3_IfVIEaGdrKTahxCMENCtDVzHOB8V8,2981 +django/contrib/gis/gdal/raster/source.py,sha256=yUh6gpu04EyynuDubIhPXAVSCqcb-5g9kk3mmez6z9c,18324 +django/contrib/gis/gdal/srs.py,sha256=uIF9WL5FGThhV_rspN79DATEJ41Xtcco3H-Zg7RyuNc,12675 +django/contrib/gis/geoip2/__init__.py,sha256=xHxacfECnYNrV-6h0uQJvx0QnweBnHG1ZFrIY6NdaQo,823 +django/contrib/gis/geoip2/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/geoip2/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/geoip2/__pycache__/resources.cpython-310.pyc,, +django/contrib/gis/geoip2/base.py,sha256=6Dq6rh_IGlF_fRqQC3Irz9lac2NBzM0QrmJ4mmjWSQs,9245 +django/contrib/gis/geoip2/resources.py,sha256=Lzz-Ok677UBmMZQdHsPv1-qPBeJ8bc4HKTk7_UzmY0I,819 +django/contrib/gis/geometry.py,sha256=yW9GSA4QgKYOuucfmQySCiVfIRJNUWijUk5JPto50Ng,662 +django/contrib/gis/geos/LICENSE,sha256=CL8kt1USOK4yUpUkVCWxyuua0PQvni0wPHs1NQJjIEU,1530 +django/contrib/gis/geos/__init__.py,sha256=LCGbpFFWXYm6SunsMzV9LoPLNRtDKEWaQ7P4VUtsk84,660 +django/contrib/gis/geos/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/base.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/collections.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/coordseq.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/error.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/factory.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/geometry.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/io.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/libgeos.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/linestring.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/mutable_list.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/point.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/polygon.cpython-310.pyc,, +django/contrib/gis/geos/__pycache__/prepared.cpython-310.pyc,, +django/contrib/gis/geos/base.py,sha256=NdlFg5l9akvDp87aqzh9dk0A3ZH2TI3cOq10mmmuHBk,181 +django/contrib/gis/geos/collections.py,sha256=p3-m7yjqxsKPhLZxvLoQUtNKElM3tQjbs860LTCSnYM,3940 +django/contrib/gis/geos/coordseq.py,sha256=zK2p4lzNHzgw6HgYT1vXwEgQg_ad3BdUIMSDHSS2H-U,7284 +django/contrib/gis/geos/error.py,sha256=r3SNTnwDBI6HtuyL3mQ_iEEeKlOqqqdkHnhNoUkMohw,104 +django/contrib/gis/geos/factory.py,sha256=KQF6lqAh5KRlFSDgN-BSXWojmWFabbEUFgz2IGYX_vk,961 +django/contrib/gis/geos/geometry.py,sha256=tvuu2HBtFH-sYVNH2H3_wDxk3Aqw9a54TmVA35hHk5Q,25705 +django/contrib/gis/geos/io.py,sha256=P3bfg3AIWv99lrqmzFZyP-i6e5YiCuC32fql_IXPgUo,799 +django/contrib/gis/geos/libgeos.py,sha256=NZPlXWrRsyrq4HFW5zAkFvJ5lq5vX7AHA_fszf1quds,4990 +django/contrib/gis/geos/linestring.py,sha256=BJAoWfHW08EX1UpNFVB09iSKXdTS6pZsTIBc6DcZcfc,6372 +django/contrib/gis/geos/mutable_list.py,sha256=nthCtQ0FsJrDGd29cSERwXb-tJkpK35Vc0T_ywCnXgc,10121 +django/contrib/gis/geos/point.py,sha256=bvatsdXTb1XYy1EaSZvp4Rnr2LwXZU12zILefLu6sRw,4781 +django/contrib/gis/geos/polygon.py,sha256=Ads6NGbbvtrZtAdfHIx_1Dv-XT3EX5qZTbHnmUQek0E,6734 +django/contrib/gis/geos/prepared.py,sha256=J5Dj6e3u3gEfVPNOM1E_rvcmcXR2-CdwtbAcoiDU5a0,1577 +django/contrib/gis/geos/prototypes/__init__.py,sha256=phW_juFbYZncypjG-7KUnjKGGwnXenzjTIG29wCl3lw,1392 +django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/coordseq.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/errcheck.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/io.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/threadsafe.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/topology.cpython-310.pyc,, +django/contrib/gis/geos/prototypes/coordseq.py,sha256=fIcSIzmyCbazQSR-XdvCwtP2YZItQur1Y27vfAKXNfw,3122 +django/contrib/gis/geos/prototypes/errcheck.py,sha256=aW4kLew3tdXZ4NmJhOF2NFY837ACid6Vm-_a10ET5Q8,2788 +django/contrib/gis/geos/prototypes/geom.py,sha256=wfYJnRL38BJ4m46q43r1M5_tPGb8RHr_zunqGL6WjqI,3332 +django/contrib/gis/geos/prototypes/io.py,sha256=gyiOOrXxY3r7J9DWN2pVvM6-gK2TL997q_koEaBmrWA,11360 +django/contrib/gis/geos/prototypes/misc.py,sha256=3Ek1DTeDo4BBsS7LloseeSHPBz70Vu-4mF-dxSjyXLU,1168 +django/contrib/gis/geos/prototypes/predicates.py,sha256=67HWiwf5NWFWNjiDJ8GvdlS5rCw0BcO7brqcDMwv_5s,1599 +django/contrib/gis/geos/prototypes/prepared.py,sha256=4I9pS75Q5MZ1z8A1v0mKkmdCly33Kj_0sDcrqxOppzM,1175 +django/contrib/gis/geos/prototypes/threadsafe.py,sha256=n1yCYvQCtc7piFrhjeZCWH8Pf0-AiOGBH33VZusTgWI,2302 +django/contrib/gis/geos/prototypes/topology.py,sha256=7TNgvTU8L3cyoU0VMXbox3RA3qmUePDXejJiHMntXlU,2327 +django/contrib/gis/locale/af/LC_MESSAGES/django.mo,sha256=TN3GddZjlqXnhK8UKLlMoMIXNw2szzj7BeRjoKjsR5c,470 +django/contrib/gis/locale/af/LC_MESSAGES/django.po,sha256=XPdXaQsZ6yDPxF3jVMEI4bli_5jrEawoO-8DHMk8Q_A,1478 +django/contrib/gis/locale/ar/LC_MESSAGES/django.mo,sha256=5LCO903yJTtRVaaujBrmwMx8f8iLa3ihasgmj8te9eg,2301 +django/contrib/gis/locale/ar/LC_MESSAGES/django.po,sha256=pfUyK0VYgY0VC2_LvWZvG_EEIWa0OqIUfhiPT2Uov3Q,2569 +django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=1e2lutVEjsa5vErMdjS6gaBbOLPTVIpDv15rax-wvKg,2403 +django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.po,sha256=dizXM36w-rUtI7Dv2mSoJDR5ouVR6Ar7zqjywX3xKr0,2555 +django/contrib/gis/locale/ast/LC_MESSAGES/django.mo,sha256=8o0Us4wR14bdv1M5oBeczYC4oW5uKnycWrj1-lMIqV4,850 +django/contrib/gis/locale/ast/LC_MESSAGES/django.po,sha256=0beyFcBkBOUNvPP45iqewTNv2ExvCPvDYwpafCJY5QM,1684 +django/contrib/gis/locale/az/LC_MESSAGES/django.mo,sha256=liiZOQ712WIdLolC8_uIHY6G4QPJ_sYhp5CfwxTXEv0,1976 +django/contrib/gis/locale/az/LC_MESSAGES/django.po,sha256=kUxBJdYhLZNnAO3IWKy4R3ijTZBiG-OFMg2wrZ7Jh28,2172 +django/contrib/gis/locale/be/LC_MESSAGES/django.mo,sha256=4B6F3HmhZmk1eLi42Bw90aipUHF4mT-Zlmsi0aKojHg,2445 +django/contrib/gis/locale/be/LC_MESSAGES/django.po,sha256=4QgQvhlM_O4N_8uikD7RASkS898vov-qT_FkQMhg4cE,2654 +django/contrib/gis/locale/bg/LC_MESSAGES/django.mo,sha256=qZKt6jmYT9ecax0Z1H8nCKWwL5qLoUiZB2MfYMu-SQs,2389 +django/contrib/gis/locale/bg/LC_MESSAGES/django.po,sha256=4MDPVwks5pLvqsXQVA2M9m_3nMFEWMsivkLEWkYm1LA,2654 +django/contrib/gis/locale/bn/LC_MESSAGES/django.mo,sha256=7oNsr_vHQfsanyP-o1FG8jZTSBK8jB3eK2fA9AqNOx4,1070 +django/contrib/gis/locale/bn/LC_MESSAGES/django.po,sha256=PTa9EFZdqfznUH7si3Rq3zp1kNkTOnn2HRTEYXQSOdM,1929 +django/contrib/gis/locale/br/LC_MESSAGES/django.mo,sha256=xN8hOvJi_gDlpdC5_lghXuX6yCBYDPfD_SQLjcvq8gU,1614 +django/contrib/gis/locale/br/LC_MESSAGES/django.po,sha256=LQw3Tp_ymJ_x7mJ6g4SOr6aP00bejkjuaxfFFRZnmaQ,2220 +django/contrib/gis/locale/bs/LC_MESSAGES/django.mo,sha256=9EdKtZkY0FX2NlX_q0tIxXD-Di0SNQJZk3jo7cend0A,1308 +django/contrib/gis/locale/bs/LC_MESSAGES/django.po,sha256=eu_qF8dbmlDiRKGNIz80XtIunrF8QIOcy8O28X02GvQ,1905 +django/contrib/gis/locale/ca/LC_MESSAGES/django.mo,sha256=nPWtfc4Fbm2uaY-gCASaye9CxzOYIfjG8mDTQGvn2As,2007 +django/contrib/gis/locale/ca/LC_MESSAGES/django.po,sha256=pPMDNc3hAWsbC_BM4UNmziX2Bq7vs6bHbNqVkEvCSic,2359 +django/contrib/gis/locale/cs/LC_MESSAGES/django.mo,sha256=V7MNXNsOaZ3x1G6LqYu6KJn6zeiFQCZKvF7Xk4J0fkg,2071 +django/contrib/gis/locale/cs/LC_MESSAGES/django.po,sha256=mPkcIWtWRILisD6jOlBpPV7CKYJjhTaBcRLf7OqifdM,2321 +django/contrib/gis/locale/cy/LC_MESSAGES/django.mo,sha256=vUG_wzZaMumPwIlKwuN7GFcS9gnE5rpflxoA_MPM_po,1430 +django/contrib/gis/locale/cy/LC_MESSAGES/django.po,sha256=_QjXT6cySUXrjtHaJ3046z-5PoXkCqtOhvA7MCZsXxk,1900 +django/contrib/gis/locale/da/LC_MESSAGES/django.mo,sha256=kH8GcLFe-XvmznQbiY5Ce2-Iz4uKJUfF4Be0yY13AEs,1894 +django/contrib/gis/locale/da/LC_MESSAGES/django.po,sha256=JOVTWeTnSUASbupCd2Fo0IY_veJb6XKDhyKFu6M2J_8,2179 +django/contrib/gis/locale/de/LC_MESSAGES/django.mo,sha256=1PBxHsFHDrbkCslumxKVD_kD2eIElGWOq2chQopcorY,1965 +django/contrib/gis/locale/de/LC_MESSAGES/django.po,sha256=0XnbUsy9yZHhFsGGhcSnXUqJpDlMVqmrRl-0c-kdcYk,2163 +django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo,sha256=NzmmexcIC525FHQ5XvsKdzCZtkkb5wnrSd12fdAkZ-0,2071 +django/contrib/gis/locale/dsb/LC_MESSAGES/django.po,sha256=aTBfL_NB8uIDt2bWBxKCdKi-EUNo9lQ9JZ0ekWeI4Yk,2234 +django/contrib/gis/locale/el/LC_MESSAGES/django.mo,sha256=OBxHnlLrT4tY0bW5TuaRqBCKtchnz_53RtrEc0fZ3V4,2484 +django/contrib/gis/locale/el/LC_MESSAGES/django.po,sha256=q0YzrFC5seve2ralJJDSmMG2uukAAALhoRflYOPFudg,2937 +django/contrib/gis/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/gis/locale/en/LC_MESSAGES/django.po,sha256=8yvqHG1Mawkhx9RqD5tDXX8U0-a7RWr-wCQPGHWAqG0,2225 +django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo,sha256=IPn5kRqOvv5S7jpbIUw8PEUkHlyjEL-4GuOANd1iAzI,486 +django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po,sha256=x_58HmrHRia2LoYhmmN_NLb1J3f7oTDvwumgTo0LowI,1494 +django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo,sha256=WkORQDOsFuV2bI7hwVsJr_JTWnDQ8ZaK-VYugqnLv3w,1369 +django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po,sha256=KWPMoX-X-gQhb47zoVsa79-16-SiCGpO0s4xkcGv9z0,1910 +django/contrib/gis/locale/eo/LC_MESSAGES/django.mo,sha256=qls9V1jybymGCdsutcjP6fT5oMaI-GXnt_oNfwq-Yhs,1960 +django/contrib/gis/locale/eo/LC_MESSAGES/django.po,sha256=WPSkCxwq3ZnR-_L-W-CnS0_Qne3ekX7ZAZVaubiWw5s,2155 +django/contrib/gis/locale/es/LC_MESSAGES/django.mo,sha256=oMQQrOdtyzvfCE844C5vM7wUuqtjMQ_HsG0TkKmfhr4,2025 +django/contrib/gis/locale/es/LC_MESSAGES/django.po,sha256=Tqmpl0-dMQELpOc7o-ig9pf6W4p8X-7Hn1EhLTnBN4Q,2476 +django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo,sha256=J-A7H9J3DjwlJ-8KvO5MC-sq4hUsJhmioAE-wiwOA8E,2012 +django/contrib/gis/locale/es_AR/LC_MESSAGES/django.po,sha256=uWqoO-Tw7lOyPnOKC2SeSFD0MgPIQHWqTfroAws24aQ,2208 +django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo,sha256=P79E99bXjthakFYr1BMobTKqJN9S1aj3vfzMTbGRhCY,1865 +django/contrib/gis/locale/es_CO/LC_MESSAGES/django.po,sha256=tyu8_dFA9JKeQ2VCpCUy_6yX97SPJcDwVqqAuf_xgks,2347 +django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo,sha256=bC-uMgJXdbKHQ-w7ez-6vh9E_2YSgCF_LkOQlvb60BU,1441 +django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po,sha256=MYO9fGclp_VvLG5tXDjXY3J_1FXI4lDv23rGElXAyjA,1928 +django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo,sha256=5YVIO9AOtmjky90DAXVyU0YltfQ4NLEpVYRTTk7SZ5o,486 +django/contrib/gis/locale/es_VE/LC_MESSAGES/django.po,sha256=R8suLsdDnSUEKNlXzow3O6WIT5NcboZoCjir9GfSTSQ,1494 +django/contrib/gis/locale/et/LC_MESSAGES/django.mo,sha256=xrNWaGCM9t14hygJ7a2g3KmhnFIAxVPrfKdJmP9ysrg,1921 +django/contrib/gis/locale/et/LC_MESSAGES/django.po,sha256=ejWpn0QAyxGCsfY1VpsJhUcY4ngNXG5vcwt_qOF5jbA,2282 +django/contrib/gis/locale/eu/LC_MESSAGES/django.mo,sha256=VCs3BT_AwXUHmLnAftVWs9C9rZl1FYB33u4kkQyoedY,1936 +django/contrib/gis/locale/eu/LC_MESSAGES/django.po,sha256=IrFIeK0oZNh3y3RodKxqG_1c84DdPHYqdfufY5a9C6g,2197 +django/contrib/gis/locale/fa/LC_MESSAGES/django.mo,sha256=5S15sLEZkbyZJ_GaWfysYbSo49X2U15ZFqfRHf-q0ZY,2242 +django/contrib/gis/locale/fa/LC_MESSAGES/django.po,sha256=SBQDQA2E3e1e2XniZtEu4dr6-MwNh-q_uJ022xHO_34,2596 +django/contrib/gis/locale/fi/LC_MESSAGES/django.mo,sha256=wbBTW0tVHJZbyVYDLdHourHKw5m6joaX1X_eP9uD6vY,1887 +django/contrib/gis/locale/fi/LC_MESSAGES/django.po,sha256=FYB9ZYdGMBtxt-7ZkxjtsgxVYFLDLOlscqaeSnNUa4s,2114 +django/contrib/gis/locale/fr/LC_MESSAGES/django.mo,sha256=BpmQ_09rbzFR-dRjX0_SbFAHQJs7bZekLTGwsN96j8A,2052 +django/contrib/gis/locale/fr/LC_MESSAGES/django.po,sha256=Nqsu2ILMuPVFGhHo7vYdQH7lwNupJRjl1SsMmFEo_Dw,2306 +django/contrib/gis/locale/fy/LC_MESSAGES/django.mo,sha256=2kCnWU_giddm3bAHMgDy0QqNwOb9qOiEyCEaYo1WdqQ,476 +django/contrib/gis/locale/fy/LC_MESSAGES/django.po,sha256=7ncWhxC5OLhXslQYv5unWurhyyu_vRsi4bGflZ6T2oQ,1484 +django/contrib/gis/locale/ga/LC_MESSAGES/django.mo,sha256=m6Owcr-5pln54TXcZFAkYEYDjYiAkT8bGFyw4nowNHA,1420 +django/contrib/gis/locale/ga/LC_MESSAGES/django.po,sha256=I0kyTnYBPSdYr8RontzhGPShJhylVAdRLBGWRQr2E7g,1968 +django/contrib/gis/locale/gd/LC_MESSAGES/django.mo,sha256=8TAogB3fzblx48Lv6V94mOlR6MKAW6NjZOkKmAhncRY,2082 +django/contrib/gis/locale/gd/LC_MESSAGES/django.po,sha256=vBafKOhKlhMXU2Qzgbiy7GhEGy-RBdHJi5ey5sHx5_I,2259 +django/contrib/gis/locale/gl/LC_MESSAGES/django.mo,sha256=4OUuNpkYRWjKz_EoY1zDzKOK8YptrwUutQqFvSKsLUs,1421 +django/contrib/gis/locale/gl/LC_MESSAGES/django.po,sha256=s9tiYQLnv1_uzyLpi3qqV_zwJNic1AGFsUGc3FhJbMo,2006 +django/contrib/gis/locale/he/LC_MESSAGES/django.mo,sha256=ngfIMxGYVgNCVs_bfNI2PwjSyj03DF3FmSugZuVti60,2190 +django/contrib/gis/locale/he/LC_MESSAGES/django.po,sha256=N-FTLS0TL8AW5Owtfuqt7mlmqszgfXLUZ_4MQo23F2w,2393 +django/contrib/gis/locale/hi/LC_MESSAGES/django.mo,sha256=3nsy5mxKTPtx0EpqBNA_TJXmLmVZ4BPUZG72ZEe8OPM,1818 +django/contrib/gis/locale/hi/LC_MESSAGES/django.po,sha256=jTFG2gqqYAQct9-to0xL2kUFQu-ebR4j7RGfxn4sBAg,2372 +django/contrib/gis/locale/hr/LC_MESSAGES/django.mo,sha256=0XrRj2oriNZxNhEwTryo2zdMf-85-4X7fy7OJhB5ub4,1549 +django/contrib/gis/locale/hr/LC_MESSAGES/django.po,sha256=iijzoBoD_EJ1n-a5ys5CKnjzZzG299zPoCN-REFkeqE,2132 +django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo,sha256=hA9IBuEZ6JHsTIVjGZdlvD8NcFy6v56pTy1fmA_lWwo,2045 +django/contrib/gis/locale/hsb/LC_MESSAGES/django.po,sha256=LAGSJIa6wd3Dh4IRG5DLigL-mjQzmYwn0o2RmSAdBdw,2211 +django/contrib/gis/locale/hu/LC_MESSAGES/django.mo,sha256=9P8L1-RxODT4NCMBUQnWQJaydNs9FwcAZeuoVmaQUDY,1940 +django/contrib/gis/locale/hu/LC_MESSAGES/django.po,sha256=qTC31EofFBS4HZ5SvxRKDIt2afAV4OS52_LYFnX2OB8,2261 +django/contrib/gis/locale/hy/LC_MESSAGES/django.mo,sha256=4D6em091yzO4s3U_DIdocdlvxtAbXdMt6Ig1ATxRGrQ,2535 +django/contrib/gis/locale/hy/LC_MESSAGES/django.po,sha256=0nkAba1H7qrC5JSakzJuAqsldWPG7lsjH7H8jVfG1SU,2603 +django/contrib/gis/locale/ia/LC_MESSAGES/django.mo,sha256=9MZnSXkQUIfbYB2f4XEtYo_FzuVi5OlsYcX9K_REz3c,1899 +django/contrib/gis/locale/ia/LC_MESSAGES/django.po,sha256=f7OuqSzGHQNldBHp62VIWjqP0BB0bvo8qEx9_wzH090,2116 +django/contrib/gis/locale/id/LC_MESSAGES/django.mo,sha256=FPjGhjf4wy-Wi6f3GnsBhmpBJBFnAPOw5jUPbufHISM,1938 +django/contrib/gis/locale/id/LC_MESSAGES/django.po,sha256=ap7GLVlZO6mmAs6PHgchU5xrChWF-YbwtJU7t0tqz0k,2353 +django/contrib/gis/locale/io/LC_MESSAGES/django.mo,sha256=_yUgF2fBUxVAZAPNw2ROyWly5-Bq0niGdNEzo2qbp8k,464 +django/contrib/gis/locale/io/LC_MESSAGES/django.po,sha256=fgGJ1xzliMK0MlVoV9CQn_BuuS3Kl71Kh5YEybGFS0Y,1472 +django/contrib/gis/locale/is/LC_MESSAGES/django.mo,sha256=UQb3H5F1nUxJSrADpLiYe12TgRhYKCFQE5Xy13MzEqU,1350 +django/contrib/gis/locale/is/LC_MESSAGES/django.po,sha256=8QWtgdEZR7OUVXur0mBCeEjbXTBjJmE-DOiKe55FvMo,1934 +django/contrib/gis/locale/it/LC_MESSAGES/django.mo,sha256=8VddOMr-JMs5D-J5mq-UgNnhf98uutpoJYJKTr8E224,1976 +django/contrib/gis/locale/it/LC_MESSAGES/django.po,sha256=Vp1G-GChjjTsODwABsg5LbmR6_Z-KpslwkNUipuOqk4,2365 +django/contrib/gis/locale/ja/LC_MESSAGES/django.mo,sha256=Ro8-P0647LU_963TJT1uOWTohB77YaGGci_2sMLJwEo,2096 +django/contrib/gis/locale/ja/LC_MESSAGES/django.po,sha256=shMi1KrURuWbFGc3PpSrpatfEQJlW--QTDH6HwHbtv4,2352 +django/contrib/gis/locale/ka/LC_MESSAGES/django.mo,sha256=iqWQ9j8yanPjDhwi9cNSktYgfLVnofIsdICnAg2Y_to,1991 +django/contrib/gis/locale/ka/LC_MESSAGES/django.po,sha256=rkM7RG0zxDN8vqyAudmk5nocajhOYP6CTkdJKu21Pf4,2571 +django/contrib/gis/locale/kk/LC_MESSAGES/django.mo,sha256=NtgQONp0UncUNvrh0W2R7u7Ja8H33R-a-tsQShWq-QI,1349 +django/contrib/gis/locale/kk/LC_MESSAGES/django.po,sha256=78OMHuerBJZJZVo9GjGJ1h5fwdLuSc_X03ZhSRibtf4,1979 +django/contrib/gis/locale/km/LC_MESSAGES/django.mo,sha256=T0aZIZ_gHqHpQyejnBeX40jdcfhrCOjgKjNm2hLrpNE,459 +django/contrib/gis/locale/km/LC_MESSAGES/django.po,sha256=7ARjFcuPQJG0OGLJu9pVfSiAwc2Q-1tT6xcLeKeom1c,1467 +django/contrib/gis/locale/kn/LC_MESSAGES/django.mo,sha256=EkJRlJJSHZJvNZJuOLpO4IIUEoyi_fpKwNWe0OGFcy4,461 +django/contrib/gis/locale/kn/LC_MESSAGES/django.po,sha256=MnsSftGvmgJgGfgayQUVDMj755z8ItkM9vBehORfYbk,1475 +django/contrib/gis/locale/ko/LC_MESSAGES/django.mo,sha256=3cvrvesJ_JU-XWI5oaYSAANVjwFxn3SLd3UrdRSMAfA,1939 +django/contrib/gis/locale/ko/LC_MESSAGES/django.po,sha256=Gg9s__57BxLIYJx5O0c-UJ8cAzsU3TcLuKGE7abn1rE,2349 +django/contrib/gis/locale/ky/LC_MESSAGES/django.mo,sha256=1z_LnGCxvS3_6OBr9dBxsyHrDs7mR3Fzm76sdgNGJrU,2221 +django/contrib/gis/locale/ky/LC_MESSAGES/django.po,sha256=NyWhlb3zgb0iAa6C0hOqxYxA7zaR_XgyjJHffoCIw1g,2438 +django/contrib/gis/locale/lb/LC_MESSAGES/django.mo,sha256=XAyZQUi8jDr47VpSAHp_8nQb0KvSMJHo5THojsToFdk,474 +django/contrib/gis/locale/lb/LC_MESSAGES/django.po,sha256=5rfudPpH4snSq2iVm9E81EBwM0S2vbkY2WBGhpuga1Q,1482 +django/contrib/gis/locale/lt/LC_MESSAGES/django.mo,sha256=9I8bq0gbDGv7wBe60z3QtWZ5x_NgALjCTvR6rBtPPBY,2113 +django/contrib/gis/locale/lt/LC_MESSAGES/django.po,sha256=jD2vv47dySaH1nVzzf7mZYKM5vmofhmaKXFp4GvX1Iw,2350 +django/contrib/gis/locale/lv/LC_MESSAGES/django.mo,sha256=KkVqgndzTA8WAagHB4hg65PUvQKXl_O79fb2r04foXw,2025 +django/contrib/gis/locale/lv/LC_MESSAGES/django.po,sha256=21VWQDPMF27yZ-ctKO-f0sohyvVkIaTXk9MKF-WGmbo,2253 +django/contrib/gis/locale/mk/LC_MESSAGES/django.mo,sha256=PVw73LWWNvaNd95zQbAIA7LA7JNmpf61YIoyuOca2_s,2620 +django/contrib/gis/locale/mk/LC_MESSAGES/django.po,sha256=eusHVHXHRfdw1_JyuBW7H7WPCHFR_z1NBqr79AVqAk0,2927 +django/contrib/gis/locale/ml/LC_MESSAGES/django.mo,sha256=Kl9okrE3AzTPa5WQ-IGxYVNSRo2y_VEdgDcOyJ_Je78,2049 +django/contrib/gis/locale/ml/LC_MESSAGES/django.po,sha256=PWg8atPKfOsnVxg_uro8zYO9KCE1UVhfy_zmCWG0Bdk,2603 +django/contrib/gis/locale/mn/LC_MESSAGES/django.mo,sha256=-Nn70s2On94C-jmSZwTppW2q7_W5xgMpzPXYmxZSKXs,2433 +django/contrib/gis/locale/mn/LC_MESSAGES/django.po,sha256=I0ZHocPlRYrogJtzEGVPsWWHpoVEa7e2KYP9Ystlj60,2770 +django/contrib/gis/locale/mr/LC_MESSAGES/django.mo,sha256=sO2E__g61S0p5I6aEwnoAsA3epxv7_Jn55TyF0PZCUA,468 +django/contrib/gis/locale/mr/LC_MESSAGES/django.po,sha256=McWaLXfWmYTDeeDbIOrV80gwnv07KCtNIt0OXW_v7vw,1476 +django/contrib/gis/locale/ms/LC_MESSAGES/django.mo,sha256=Ws6mtfdx1yajz4NUl1aqrWYc0XNPm2prqAAE8yCNyT0,1887 +django/contrib/gis/locale/ms/LC_MESSAGES/django.po,sha256=wglQEOZ8SF4_d7tZBCoOOSTbRG1U5IM4lIZA1H5MaDg,2017 +django/contrib/gis/locale/my/LC_MESSAGES/django.mo,sha256=e6G8VbCCthUjV6tV6PRCy_ZzsXyZ-1OYjbYZIEShbXI,525 +django/contrib/gis/locale/my/LC_MESSAGES/django.po,sha256=R3v1S-904f8FWSVGHe822sWrOJI6cNJIk93-K7_E_1c,1580 +django/contrib/gis/locale/nb/LC_MESSAGES/django.mo,sha256=a89qhy9BBE_S-MYlOMLaYMdnOvUEJxh8V80jYJqFEj0,1879 +django/contrib/gis/locale/nb/LC_MESSAGES/django.po,sha256=UIk8oXTFdxTn22tTtIXowTl3Nxn2qvpQO72GoQDUmaw,2166 +django/contrib/gis/locale/ne/LC_MESSAGES/django.mo,sha256=nB-Ta8w57S6hIAhAdWZjDT0Dg6JYGbAt5FofIhJT7k8,982 +django/contrib/gis/locale/ne/LC_MESSAGES/django.po,sha256=eMH6uKZZZYn-P3kmHumiO4z9M4923s9tWGhHuJ0eWuI,1825 +django/contrib/gis/locale/nl/LC_MESSAGES/django.mo,sha256=d22j68OCI1Bevtl2WgXHSQHFCiDgkPXmrFHca_uUm14,1947 +django/contrib/gis/locale/nl/LC_MESSAGES/django.po,sha256=ffytg6K7pTQoIRfxY35i1FpolJeox-fpSsG1JQzvb-0,2381 +django/contrib/gis/locale/nn/LC_MESSAGES/django.mo,sha256=Rp1zi-gbaGBPk9MVR4sw1MS4MhCRs6u9v7Aa8IxrkQQ,1888 +django/contrib/gis/locale/nn/LC_MESSAGES/django.po,sha256=ApoLxcaZ3UzO8owOqfDgDMCJuemnGAfrKH_qJVR47eM,2087 +django/contrib/gis/locale/os/LC_MESSAGES/django.mo,sha256=02NpGC8WPjxmPqQkfv9Kj2JbtECdQCtgecf_Tjk1CZc,1594 +django/contrib/gis/locale/os/LC_MESSAGES/django.po,sha256=JBIsv5nJg3Wof7Xy7odCI_xKRBLN_Hlbb__kNqNW4Xw,2161 +django/contrib/gis/locale/pa/LC_MESSAGES/django.mo,sha256=JR1NxG5_h_dFE_7p6trBWWIx-QqWYIgfGomnjaCsWAA,1265 +django/contrib/gis/locale/pa/LC_MESSAGES/django.po,sha256=Ejd_8dq_M0E9XFijk0qj4oC-8_oe48GWWHXhvOrFlnY,1993 +django/contrib/gis/locale/pl/LC_MESSAGES/django.mo,sha256=BkGcSOdz9VE7OYEeFzC9OLANJsTB3pFU1Xs8-CWFgb4,2095 +django/contrib/gis/locale/pl/LC_MESSAGES/django.po,sha256=IIy2N8M_UFanmHB6Ajne9g5NQ7tJCF5JvgrzasFUJDY,2531 +django/contrib/gis/locale/pt/LC_MESSAGES/django.mo,sha256=sE5PPOHzfT8QQXuV5w0m2pnBTRhKYs_vFhk8p_A4Jg0,2036 +django/contrib/gis/locale/pt/LC_MESSAGES/django.po,sha256=TFt6Oj1NlCM3pgs2dIgFZR3S3y_g7oR7S-XRBlM4924,2443 +django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo,sha256=5HGIao480s3B6kXtSmdy1AYjGUZqbYuZ9Eapho_jkTk,1976 +django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po,sha256=4-2WPZT15YZPyYbH7xnBRc7A8675875kVFjM9tr1o5U,2333 +django/contrib/gis/locale/ro/LC_MESSAGES/django.mo,sha256=brEMR8zmBMK6otF_kmR2IVuwM9UImo24vwSVUdRysAY,1829 +django/contrib/gis/locale/ro/LC_MESSAGES/django.po,sha256=EDdumoPfwMHckneEl4OROll5KwYL0ljdY-yJTUkK2JA,2242 +django/contrib/gis/locale/ru/LC_MESSAGES/django.mo,sha256=Beo_YLNtenVNPIyWB-KKMlbxeK0z4DIxhLNkAE8p9Ko,2542 +django/contrib/gis/locale/ru/LC_MESSAGES/django.po,sha256=GKPf50Wm3evmbOdok022P2YZxh-6ROKgDRLyxewPy1g,2898 +django/contrib/gis/locale/sk/LC_MESSAGES/django.mo,sha256=bws9O1h9u-ia1FraYJNIsRCf78_cSo9PNVo802hCMMQ,2043 +django/contrib/gis/locale/sk/LC_MESSAGES/django.po,sha256=DAAMn59_3-aTD8qimDetbY6GFqC311lTD3VOxz80xNQ,2375 +django/contrib/gis/locale/sl/LC_MESSAGES/django.mo,sha256=9-efMT2MoEMa5-SApGWTRiyfvI6vmZzLeMg7qGAr7_A,2067 +django/contrib/gis/locale/sl/LC_MESSAGES/django.po,sha256=foZY7N5QkuAQS7nc3CdnJerCPk-lhSb1xZqU11pNGNo,2303 +django/contrib/gis/locale/sq/LC_MESSAGES/django.mo,sha256=WEq6Bdd9fM_aRhWUBpl_qTc417U9708u9sXNgyB8o1k,1708 +django/contrib/gis/locale/sq/LC_MESSAGES/django.po,sha256=mAOImw7HYWDO2VuoHU-VAp08u5DM-BUC633Lhkc3vRk,2075 +django/contrib/gis/locale/sr/LC_MESSAGES/django.mo,sha256=cQzh-8YOz0FSIE0-BkeQHiqG6Tl4ArHvSN3yMXiaoec,2454 +django/contrib/gis/locale/sr/LC_MESSAGES/django.po,sha256=PQ3FYEidoV200w8WQBFsid7ULKZyGLzCjfCVUUPKWrk,2719 +django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=SASOtA8mOnMPxh1Lr_AC0yR82SqyTiPrlD8QmvYgG58,2044 +django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.po,sha256=BPkwFmsLHVN8jwjf1pqmrTXhxO0fgDzE0-C7QvaBeVg,2271 +django/contrib/gis/locale/sv/LC_MESSAGES/django.mo,sha256=XVr0uSQnEIRNJoOpgFlxvYnpF4cGDP2K2oTjqVHhmuA,1987 +django/contrib/gis/locale/sv/LC_MESSAGES/django.po,sha256=fqUAyUbjamnqbdie8Ecek0v99uo-4uUfaSvtFffz8v4,2275 +django/contrib/gis/locale/sw/LC_MESSAGES/django.mo,sha256=uBhpGHluGwYpODTE-xhdJD2e6PHleN07wLE-kjrXr_M,1426 +django/contrib/gis/locale/sw/LC_MESSAGES/django.po,sha256=nHXQQMYYXT1ec3lIBxQIDIAwLtXucX47M4Cozy08kko,1889 +django/contrib/gis/locale/ta/LC_MESSAGES/django.mo,sha256=Rboo36cGKwTebe_MiW4bOiMsRO2isB0EAyJJcoy_F6s,466 +django/contrib/gis/locale/ta/LC_MESSAGES/django.po,sha256=sLYW8_5BSVoSLWUr13BbKRe0hNJ_cBMEtmjCPBdTlAk,1474 +django/contrib/gis/locale/te/LC_MESSAGES/django.mo,sha256=xDkaSztnzQ33Oc-GxHoSuutSIwK9A5Bg3qXEdEvo4h4,824 +django/contrib/gis/locale/te/LC_MESSAGES/django.po,sha256=nYryhktJumcwtZDGZ43xBxWljvdd-cUeBrAYFZOryVg,1772 +django/contrib/gis/locale/tg/LC_MESSAGES/django.mo,sha256=6Jyeaq1ORsnE7Ceh_rrhbfslFskGe12Ar-dQl6NFyt0,611 +django/contrib/gis/locale/tg/LC_MESSAGES/django.po,sha256=9c1zPt7kz1OaRJPPLdqjQqO8MT99KtS9prUvoPa9qJk,1635 +django/contrib/gis/locale/th/LC_MESSAGES/django.mo,sha256=0kekAr7eXc_papwPAxEZ3TxHOBg6EPzdR3q4hmAxOjg,1835 +django/contrib/gis/locale/th/LC_MESSAGES/django.po,sha256=WJPdoZjLfvepGGMhfBB1EHCpxtxxfv80lRjPG9kGErM,2433 +django/contrib/gis/locale/tr/LC_MESSAGES/django.mo,sha256=_bNVyXHbuyM42-fAsL99wW7_Hwu5hF_WD7FzY-yfS8k,1961 +django/contrib/gis/locale/tr/LC_MESSAGES/django.po,sha256=W0pxShIqMePnQvn_7zcY_q4_C1PCnWwFMastDo_gHd0,2242 +django/contrib/gis/locale/tt/LC_MESSAGES/django.mo,sha256=cGVPrWCe4WquVV77CacaJwgLSnJN0oEAepTzNMD-OWk,1470 +django/contrib/gis/locale/tt/LC_MESSAGES/django.po,sha256=98yeRs-JcMGTyizOpEuQenlnWJMYTR1-rG3HGhKCykk,2072 +django/contrib/gis/locale/udm/LC_MESSAGES/django.mo,sha256=I6bfLvRfMn79DO6bVIGfYSVeZY54N6c8BNO7OyyOOsw,462 +django/contrib/gis/locale/udm/LC_MESSAGES/django.po,sha256=B1PCuPYtNOrrhu4fKKJgkqxUrcEyifS2Y3kw-iTmSIk,1470 +django/contrib/gis/locale/uk/LC_MESSAGES/django.mo,sha256=Pnot1RDsNa4HYvy_6ZsFFMGhJ4JyEn6qWbDPPFUXDzg,2586 +django/contrib/gis/locale/uk/LC_MESSAGES/django.po,sha256=uJfVys_Tzi99yJ7F5IEbIDJTcM1MzCz2vpiVv_fVRmc,3090 +django/contrib/gis/locale/ur/LC_MESSAGES/django.mo,sha256=tB5tz7EscuE9IksBofNuyFjk89-h5X7sJhCKlIho5SY,1410 +django/contrib/gis/locale/ur/LC_MESSAGES/django.po,sha256=16m0t10Syv76UcI7y-EXfQHETePmrWX4QMVfyeuX1fQ,2007 +django/contrib/gis/locale/vi/LC_MESSAGES/django.mo,sha256=NT5T0FRCC2XINdtaCFCVUxb5VRv8ta62nE8wwSHGTrc,1384 +django/contrib/gis/locale/vi/LC_MESSAGES/django.po,sha256=y77GtqH5bv1wR78xN5JLHusmQzoENTH9kLf9Y3xz5xk,1957 +django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=g_8mpfbj-6HJ-g1PrFU2qTTfvCbztNcjDym_SegaI8Q,1812 +django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po,sha256=MBJpb5IJxUaI2k0Hq8Q1GLXHJPFAA-S1w6NRjsmrpBw,2286 +django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=jEgcPJy_WzZa65-5rXb64tN_ehUku_yIj2d7tXwweP8,1975 +django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.po,sha256=iVnQKpbsQ4nJi65PHAO8uGRO6jhHWs22gTOUKPpb64s,2283 +django/contrib/gis/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-310.pyc,, +django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-310.pyc,, +django/contrib/gis/management/commands/inspectdb.py,sha256=8WhDOBICFAbLFu7kwAAS4I5pNs_p1BrCv8GJYI3S49k,760 +django/contrib/gis/management/commands/ogrinspect.py,sha256=XnWAbLxRxTSvbKSvjgePN7D1o_Ep4qWkvMwVrG1TpYY,6071 +django/contrib/gis/measure.py,sha256=KieLLeQFsV23gnPzj1WoJvN5unOIK5v8QThgX0Rk4Sg,12557 +django/contrib/gis/ptr.py,sha256=NeIBB-plwO61wGOOxGg7fFyVXI4a5vbAGUdaJ_Fmjqo,1312 +django/contrib/gis/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/serializers/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/serializers/__pycache__/geojson.cpython-310.pyc,, +django/contrib/gis/serializers/geojson.py,sha256=j7f8iaEeJttWy3g2TBo9BHXg1W3p2a0bYcue5tbUJpE,2834 +django/contrib/gis/shortcuts.py,sha256=aa9zFjVU38qaEvRc0vAH_j2AgAERlI01rphYLHbc7Tg,1027 +django/contrib/gis/sitemaps/__init__.py,sha256=Tjj057omOVcoC5Fb8ITEYVhLm0HcVjrZ1Mbz_tKoD1A,138 +django/contrib/gis/sitemaps/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/sitemaps/__pycache__/kml.cpython-310.pyc,, +django/contrib/gis/sitemaps/__pycache__/views.cpython-310.pyc,, +django/contrib/gis/sitemaps/kml.py,sha256=CUn_KKVrwGg2ZmmDcWosBc0QFuJp8hHpeNRCcloVk1U,2573 +django/contrib/gis/sitemaps/views.py,sha256=AFV1ay-oFftFC-IszzeKz3JAGzE0TOCH8pN1cwtg7yI,2353 +django/contrib/gis/static/gis/css/ol3.css,sha256=pJADzfx4_NL2C1onFpU-muconAA5NThN4sEqSNyY_So,657 +django/contrib/gis/static/gis/img/draw_line_off.svg,sha256=6XW83xsR5-Guh27UH3y5UFn9y9FB9T_Zc4kSPA-xSOI,918 +django/contrib/gis/static/gis/img/draw_line_on.svg,sha256=Hx-pXu4ped11esG6YjXP1GfZC5q84zrFQDPUo1C7FGA,892 +django/contrib/gis/static/gis/img/draw_point_off.svg,sha256=PICrywZPwuBkaQAKxR9nBJ0AlfTzPHtVn_up_rSiHH4,803 +django/contrib/gis/static/gis/img/draw_point_on.svg,sha256=raGk3oc8w87rJfLdtZ4nIXJyU3OChCcTd4oH-XAMmmM,803 +django/contrib/gis/static/gis/img/draw_polygon_off.svg,sha256=gnVmjeZE2jOvjfyx7mhazMDBXJ6KtSDrV9f0nSzkv3A,981 +django/contrib/gis/static/gis/img/draw_polygon_on.svg,sha256=ybJ9Ww7-bsojKQJtjErLd2cCOgrIzyqgIR9QNhH_ZfA,982 +django/contrib/gis/static/gis/js/OLMapWidget.js,sha256=QOOHCR4CyAljFTtXTP_MNKN5RTplp3lvDKxHJj3J4KY,8813 +django/contrib/gis/templates/gis/admin/openlayers.html,sha256=41MtWKVz6IR-_-c0zIQi1hvA9wXpD-g5VDJdojkcMgE,1441 +django/contrib/gis/templates/gis/admin/openlayers.js,sha256=KoT3VUMAez9-5QoT5U6OJXzt3MLxlTrJMMwINjQ_k7M,8975 +django/contrib/gis/templates/gis/admin/osm.html,sha256=yvYyZPmgP64r1JT3eZCDun5ENJaaN3d3wbTdCxIOvSo,111 +django/contrib/gis/templates/gis/admin/osm.js,sha256=0wFRJXKZ2plp7tb0F9fgkMzp4NrKZXcHiMkKDJeHMRw,128 +django/contrib/gis/templates/gis/kml/base.kml,sha256=VYnJaGgFVHRzDjiFjbcgI-jxlUos4B4Z1hx_JeI2ZXU,219 +django/contrib/gis/templates/gis/kml/placemarks.kml,sha256=TEC81sDL9RK2FVeH0aFJTwIzs6_YWcMeGnHkACJV1Uc,360 +django/contrib/gis/templates/gis/openlayers-osm.html,sha256=TeiUqCjt73W8Hgrp_6zAtk_ZMBxskNN6KHSmnJ1-GD4,378 +django/contrib/gis/templates/gis/openlayers.html,sha256=gp49iEA82IgDWPHRrAYyCqC0pvInPxTw5674RuxPM_M,1897 +django/contrib/gis/utils/__init__.py,sha256=om0rPPBwSmvN4_BZpEkvpZqT44S0b7RCJpLAS2nI9-o,604 +django/contrib/gis/utils/__pycache__/__init__.cpython-310.pyc,, +django/contrib/gis/utils/__pycache__/layermapping.cpython-310.pyc,, +django/contrib/gis/utils/__pycache__/ogrinfo.cpython-310.pyc,, +django/contrib/gis/utils/__pycache__/ogrinspect.cpython-310.pyc,, +django/contrib/gis/utils/__pycache__/srs.cpython-310.pyc,, +django/contrib/gis/utils/layermapping.py,sha256=ASFnX5zbm-T1fFkWbM5DMUeBcUAgWtVveseoef3Lrhc,28895 +django/contrib/gis/utils/ogrinfo.py,sha256=6m3KaRzLoZtQ0OSrpRkaFIQXi9YOXTkQcYeqYb0S0nw,1956 +django/contrib/gis/utils/ogrinspect.py,sha256=nxKd1cufjbP86uJcsaNb1c3n9IA-uy4ltQjLGgPjB1E,9169 +django/contrib/gis/utils/srs.py,sha256=UXsbxW0cQzdnPKO0d9E5K2HPdekdab5NaLZWNOUq-zk,2962 +django/contrib/gis/views.py,sha256=zdCV8QfUVfxEFGxESsUtCicsbSVtZNI_IXybdmsHKiM,714 +django/contrib/humanize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/humanize/__pycache__/__init__.cpython-310.pyc,, +django/contrib/humanize/__pycache__/apps.cpython-310.pyc,, +django/contrib/humanize/apps.py,sha256=LH3PTbB4V1gbBc8nmCw3BsSuA8La0fNOb4cSISvJAwI,194 +django/contrib/humanize/locale/af/LC_MESSAGES/django.mo,sha256=bNLjjeZ3H-KD_pm-wa1_5eLCDOmG2FXgDHVOg5vgL7o,5097 +django/contrib/humanize/locale/af/LC_MESSAGES/django.po,sha256=p3OduzjtTGkwlgDJhPgSm9aXI2sWzORspsPf7_RnWjs,8923 +django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo,sha256=PokPfBR8w4AbRtNNabl5vO8r5E8_egHvFBjKp4CCvO4,7510 +django/contrib/humanize/locale/ar/LC_MESSAGES/django.po,sha256=QGW-kx-87DlPMGr5l_Eb6Ge-x4tkz2PuwHDe3EIkIQg,12326 +django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=NwCrL5FX_xdxYdqkW_S8tmU8ktDM8LqimmUvkt8me74,9155 +django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.po,sha256=tt0AxhohGX79OQ_lX1S5soIo-iSCC07SdAhPpy0O7Q4,15234 +django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo,sha256=WvBk8V6g1vgzGqZ_rR-4p7SMh43PFnDnRhIS9HSwdoQ,3468 +django/contrib/humanize/locale/ast/LC_MESSAGES/django.po,sha256=S9lcUf2y5wR8Ufa-Rlz-M73Z3bMo7zji_63cXwtDK2I,5762 +django/contrib/humanize/locale/az/LC_MESSAGES/django.mo,sha256=G9dyDa8T8wwEJDVw5rrajGLQo2gfs7XqsW6LbURELvA,5286 +django/contrib/humanize/locale/az/LC_MESSAGES/django.po,sha256=G0_M87HUGSH280uvUzni0qlCGviv2uwtyr6gne5SszA,9139 +django/contrib/humanize/locale/be/LC_MESSAGES/django.mo,sha256=7KyJKhNqMqv32CPdJi01RPLBefOVCQW-Gx6-Vf9JVrs,6653 +django/contrib/humanize/locale/be/LC_MESSAGES/django.po,sha256=2mbReEHyXhmZysqhSmaT6A2XCHn8mYb2R_O16TMGCAo,10666 +django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo,sha256=jCdDIbqWlhOs-4gML44wSRIXJQxypfak6ByRG_reMsk,4823 +django/contrib/humanize/locale/bg/LC_MESSAGES/django.po,sha256=v2ih4-pL1cdDXaa3uXm9FxRjRKyULLGyz78Q91eKEG8,8267 +django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo,sha256=jbL4ucZxxtexI10jgldtgnDie3I23XR3u-PrMMMqP6U,4026 +django/contrib/humanize/locale/bn/LC_MESSAGES/django.po,sha256=0l4yyy7q3OIWyFk_PW0y883Vw2Pmu48UcnLM9OBxB68,6545 +django/contrib/humanize/locale/br/LC_MESSAGES/django.mo,sha256=V_tPVAyQzVdDwWPNlVGWmlVJjmVZfbh35alkwsFlCNU,5850 +django/contrib/humanize/locale/br/LC_MESSAGES/django.po,sha256=BcAqEV2JpF0hiCQDttIMblp9xbB7zoHsmj7fJFV632k,12245 +django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo,sha256=1-RNRHPgZR_9UyiEn9Djp4mggP3fywKZho45E1nGMjM,1416 +django/contrib/humanize/locale/bs/LC_MESSAGES/django.po,sha256=M017Iu3hyXmINZkhCmn2he-FB8rQ7rXN0KRkWgrp7LI,5498 +django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo,sha256=WDvXis2Y1ivSq6NdJgddO_WKbz8w5MpVpkT4sq-pWXI,4270 +django/contrib/humanize/locale/ca/LC_MESSAGES/django.po,sha256=AD3h2guGADdp1f9EcbP1vc1lmfDOL8-1qQfwvXa6I04,7731 +django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo,sha256=VFyZcn19aQUXhVyh2zo2g3PAuzOO38Kx9fMFOCCxzMc,5479 +django/contrib/humanize/locale/cs/LC_MESSAGES/django.po,sha256=mq3LagwA9hyWOGy76M9n_rD4p3wuVk6oQsneB9CF99w,9527 +django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo,sha256=VjJiaUUhvX9tjOEe6x2Bdp7scvZirVcUsA4-iE2-ElQ,5241 +django/contrib/humanize/locale/cy/LC_MESSAGES/django.po,sha256=sylmceSq-NPvtr_FjklQXoBAfueKu7hrjEpMAsVbQC4,7813 +django/contrib/humanize/locale/da/LC_MESSAGES/django.mo,sha256=vfDHopmWFAomwqmmCX3wfmX870-zzVbgUFC6I77n9tE,4316 +django/contrib/humanize/locale/da/LC_MESSAGES/django.po,sha256=v7Al6UOkbYB1p7m8kOe-pPRIAoyWemoyg_Pm9bD5Ldc,7762 +django/contrib/humanize/locale/de/LC_MESSAGES/django.mo,sha256=aOUax9csInbXnjAJc3jq4dcW_9H-6ueVI-TtKz2b9q0,4364 +django/contrib/humanize/locale/de/LC_MESSAGES/django.po,sha256=gW3OfOfoVMvpVudwghKCYztkLrCIPbbcriZjBNnRyGo,7753 +django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo,sha256=OVKcuW9ZXosNvP_3A98WsIIk_Jl6U_kv3zOx4pvwh-g,5588 +django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po,sha256=VimcsmobK3VXTbbTasg6osWDPOIZ555uimbUoUfNco4,9557 +django/contrib/humanize/locale/el/LC_MESSAGES/django.mo,sha256=o-yjhpzyGRbbdMzwUcG_dBP_FMEMZevm7Wz1p4Wd-pg,6740 +django/contrib/humanize/locale/el/LC_MESSAGES/django.po,sha256=UbD5QEw_-JNoNETaOyDfSReirkRsHnlHeSsZF5hOSkI,10658 +django/contrib/humanize/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/humanize/locale/en/LC_MESSAGES/django.po,sha256=7CzW7XKCntUjZon7-mQU_Z2UX9XReoQ8IsjojNowG1w,9050 +django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo,sha256=QFf4EgAsGprbFetnwogmj8vDV7SfGq1E3vhL9D8xTTM,918 +django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po,sha256=Bnfesr1_T9sa31qkKOMunwKKXbnFzZJhzV8rYC_pdSE,6532 +django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo,sha256=mkx192XQM3tt1xYG8EOacMfa-BvgzYCbSsJQsWZGeAo,3461 +django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po,sha256=MArKzXxY1104jxaq3kvDZs2WzOGYxicfJxFKsLzFavw,5801 +django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo,sha256=b47HphXBi0cax_reCZiD3xIedavRHcH2iRG8pcwqb54,5386 +django/contrib/humanize/locale/eo/LC_MESSAGES/django.po,sha256=oN1YqOZgxKY3L1a1liluhM6X5YA5bawg91mHF_Vfqx8,9095 +django/contrib/humanize/locale/es/LC_MESSAGES/django.mo,sha256=F9UaraI_lUDFSv9etjKWY39bA53FZql4n9qlpXCq4pw,4409 +django/contrib/humanize/locale/es/LC_MESSAGES/django.po,sha256=IwonvoL51Wk6UyzqzDlyS3pq3I9aZA31FjfS7alKT9o,8015 +django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo,sha256=-btiXH3B5M1qkAsW9D5I742Gt9GcJs5VC8ZhJ_DKkGY,4425 +django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.po,sha256=UsiuRj-eq-Vl41wNZGw9XijCMEmcXhcGrMTPWgZn4LA,7858 +django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo,sha256=2GhQNtNOjK5mTov5RvnuJFTYbdoGBkDGLxzvJ8Vsrfs,4203 +django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.po,sha256=JBf2fHO8jWi6dFdgZhstKXwyot_qT3iJBixQZc3l330,6326 +django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo,sha256=82DL2ztdq10X5RIceshK1nO99DW5628ZIjaN8Xzp9ok,3939 +django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po,sha256=-O7AQluA5Kce9-bd04GN4tfQKoCxb8Sa7EZR6TZBCdM,6032 +django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo,sha256=cJECzKpD99RRIpVFKQW65x0Nvpzrm5Fuhfi-nxOWmkM,942 +django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.po,sha256=tDdYtvRILgeDMgZqKHSebe7Z5ZgI1bZhDdvGVtj_anM,4832 +django/contrib/humanize/locale/et/LC_MESSAGES/django.mo,sha256=_vLDxD-e-pBY7vs6gNkhFZNGYu_dAeETVMKGsjjWOHg,4406 +django/contrib/humanize/locale/et/LC_MESSAGES/django.po,sha256=u0tSkVYckwXUv1tVfe1ODdZ8tJ2wUkS0Vv8pakJ8eBM,7915 +django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo,sha256=w2TlBudWWTI1M7RYCl_n2UY7U1CBzxIuwXl-7DCVl8o,5287 +django/contrib/humanize/locale/eu/LC_MESSAGES/django.po,sha256=77QrRqIsMuu-6HxHvaifKsPA9OVZR7686WFp26dQFMg,9146 +django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo,sha256=-EfCvMVkX5VqYlXxiX8fLQntzZx8pBjmjtjvIdsaPvU,5808 +django/contrib/humanize/locale/fa/LC_MESSAGES/django.po,sha256=Xxv-FVTrSjbx0JB33F6O1wBzodwkHJpmTEiNssNTeYQ,9775 +django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo,sha256=FJfyLFkz-oAz9e15e1aQUct7CJ2EJqSkZKh_ztDxtic,4425 +django/contrib/humanize/locale/fi/LC_MESSAGES/django.po,sha256=j5Z5t9zX1kePdM_Es1hu9AKOpOrijVWTsS2t19CIiaE,7807 +django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo,sha256=dZ3JfZyUIqicd2hsit9QOW_2CA2XgpKQgJQ5G3MbrC4,4484 +django/contrib/humanize/locale/fr/LC_MESSAGES/django.po,sha256=z-rfIbTRVEiYaD_kssNLvMFiINveBAq070-YanuL_hw,7872 +django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/humanize/locale/fy/LC_MESSAGES/django.po,sha256=pPvcGgBWiZwQ5yh30OlYs-YZUd_XsFro71T9wErVv0M,4732 +django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo,sha256=AOEiBNOak_KQkBeGyUpTNO12zyg3CiK66h4kMoS15_0,5112 +django/contrib/humanize/locale/ga/LC_MESSAGES/django.po,sha256=jTXihbd-ysAUs0TEKkOBmXJJj69V0cFNOHM6VbcPCWw,11639 +django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo,sha256=XNSpJUu4DxtlXryfUVeBOrvl2-WRyj2nKjips_qGDOg,7232 +django/contrib/humanize/locale/gd/LC_MESSAGES/django.po,sha256=I7s86NJDzeMsCGgXja--fTZNFm9bM7Cd8M1bstxabSY,11874 +django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo,sha256=ChoVHsJ_bVIaHtHxhxuUK99Zu1tvRu0iY5vhtB1LDMg,3474 +django/contrib/humanize/locale/gl/LC_MESSAGES/django.po,sha256=U5D505aBKEdg80BGWddcwWuzmYdoNHx1WEPzVHQfbTE,5903 +django/contrib/humanize/locale/he/LC_MESSAGES/django.mo,sha256=phFZMDohKT86DUtiAlnZslPFwSmpcpxTgZaXb8pGohc,5875 +django/contrib/humanize/locale/he/LC_MESSAGES/django.po,sha256=xhEZYcK-fg_mHMyGCEZXEwbd6FvutaGvkDyHTET-sic,9970 +django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo,sha256=qrzm-6vXIUsxA7nOxa-210-6iO-3BPBj67vKfhTOPrY,4131 +django/contrib/humanize/locale/hi/LC_MESSAGES/django.po,sha256=BrypbKaQGOyY_Gl1-aHXiBVlRqrbSjGfZ2OK8omj_9M,6527 +django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo,sha256=29XTvFJHex31hbu2qsOfl5kOusz-zls9eqlxtvw_H0s,1274 +django/contrib/humanize/locale/hr/LC_MESSAGES/django.po,sha256=OuEH4fJE6Fk-s0BMqoxxdlUAtndvvKK7N8Iy-9BP3qA,5424 +django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo,sha256=a1DqdiuRfFSfSrD8IvzQmZdzE0dhkxDChFddrmt3fjA,5679 +django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po,sha256=V5aRblcqKii4RXSQO87lyoQwwvxL59T3m4-KOBTx4bc,9648 +django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo,sha256=8tEqiZHEc6YmfWjf7hO0Fb3Xd-HSleKaR1gT_XFTQ8g,5307 +django/contrib/humanize/locale/hu/LC_MESSAGES/django.po,sha256=KDVYBAGSuMrtwqO98-oGOOAp7Unfm7ode1sv8lfe81c,9124 +django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo,sha256=C1yx1DrYTrZ7WkOzZ5hvunphWABvGX-DqXbChNQ5_yg,1488 +django/contrib/humanize/locale/hy/LC_MESSAGES/django.po,sha256=MGbuYylBt1C5hvSlktydD4oMLZ1Sjzj7DL_nl7uluTg,7823 +django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo,sha256=d0m-FddFnKp08fQYQSC9Wr6M4THVU7ibt3zkIpx_Y_A,4167 +django/contrib/humanize/locale/ia/LC_MESSAGES/django.po,sha256=qX6fAZyn54hmtTU62oJcHF8p4QcYnoO2ZNczVjvjOeE,6067 +django/contrib/humanize/locale/id/LC_MESSAGES/django.mo,sha256=AdUmhfkQOV9Le4jXQyQSyd5f2GqwNt-oqnJV-WVELVw,3885 +django/contrib/humanize/locale/id/LC_MESSAGES/django.po,sha256=lMnTtM27j1EWg1i9d7NzAeueo7mRztGVfNOXtXdZVjw,7021 +django/contrib/humanize/locale/io/LC_MESSAGES/django.mo,sha256=nMu5JhIy8Fjie0g5bT8-h42YElCiS00b4h8ej_Ie-w0,464 +django/contrib/humanize/locale/io/LC_MESSAGES/django.po,sha256=RUs8JkpT0toKOLwdv1oCbcBP298EOk02dkdNSJiC-_A,4720 +django/contrib/humanize/locale/is/LC_MESSAGES/django.mo,sha256=D6ElUYj8rODRsZwlJlH0QyBSM44sVmuBCNoEkwPVxko,3805 +django/contrib/humanize/locale/is/LC_MESSAGES/django.po,sha256=1VddvtkhsK_5wmpYIqEFqFOo-NxIBnL9wwW74Tw9pbw,8863 +django/contrib/humanize/locale/it/LC_MESSAGES/django.mo,sha256=oFaOtzqH0RFuybF1bPI_IZ23YaPVYAvaW-SbNuS4DPU,4653 +django/contrib/humanize/locale/it/LC_MESSAGES/django.po,sha256=nBU8lS9dAIPJuY3vfKkY_Jgkt7ZawnOtor8IZvEIkYU,8342 +django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo,sha256=x8AvfUPBBJkGtE0jvAP4tLeZEByuyo2H4V_UuLoCEmw,3907 +django/contrib/humanize/locale/ja/LC_MESSAGES/django.po,sha256=G2yTPZq6DxgzPV5uJ6zvMK4o3aiuLWbl4vXPH7ylUhc,6919 +django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo,sha256=UeUbonYTkv1d2ljC0Qj8ZHw-59zHu83fuMvnME9Fkmw,4878 +django/contrib/humanize/locale/ka/LC_MESSAGES/django.po,sha256=-eAMexwjm8nSB4ARJU3f811UZnuatHKIFf8FevpJEpo,9875 +django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo,sha256=jujbUM0jOpt3Mw8zN4LSIIkxCJ0ihk_24vR0bXoux78,2113 +django/contrib/humanize/locale/kk/LC_MESSAGES/django.po,sha256=hjZg_NRE9xMA5uEa2mVSv1Hr4rv8inG9es1Yq7uy9Zc,8283 +django/contrib/humanize/locale/km/LC_MESSAGES/django.mo,sha256=mfXs9p8VokORs6JqIfaSSnQshZEhS90rRFhOIHjW7CI,459 +django/contrib/humanize/locale/km/LC_MESSAGES/django.po,sha256=JQBEHtcy-hrV_GVWIjvUJyOf3dZ5jUzzN8DUTAbHKUg,4351 +django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo,sha256=Oq3DIPjgCqkn8VZMb6ael7T8fQ7LnWobPPAZKQSFHl4,461 +django/contrib/humanize/locale/kn/LC_MESSAGES/django.po,sha256=CAJ0etMlQF3voPYrxIRr5ChAwUYO7wI42n5kjpIEVjA,4359 +django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo,sha256=hDb7IOB8PRflKkZ81yQbgHtvN4TO35o5kWTK3WpiL4A,4817 +django/contrib/humanize/locale/ko/LC_MESSAGES/django.po,sha256=dZpSVF3l5wGTwKOXn0looag7Q23jyLGlzs083kpnqFc,8217 +django/contrib/humanize/locale/ky/LC_MESSAGES/django.mo,sha256=jDu1bVgJMDpaZ0tw9-wdkorvZxDdRzcuzdeC_Ot7rUs,4177 +django/contrib/humanize/locale/ky/LC_MESSAGES/django.po,sha256=MEHbKMLIiFEG7BlxsNVF60viXSnlk5iqlFCH3hgamH0,7157 +django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/humanize/locale/lb/LC_MESSAGES/django.po,sha256=_y0QFS5Kzx6uhwOnzmoHtCrbufMrhaTLsHD0LfMqtcM,4730 +django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo,sha256=O0C-tPhxWNW5J4tCMlB7c7shVjNO6dmTURtIpTVO9uc,7333 +django/contrib/humanize/locale/lt/LC_MESSAGES/django.po,sha256=M5LlRxC1KWh1-3fwS93UqTijFuyRENmQJXfpxySSKik,12086 +django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo,sha256=3gEzmKBtYsFz9wvLw0ltiir91CDLxhK3IG2j55-uM7Y,5033 +django/contrib/humanize/locale/lv/LC_MESSAGES/django.po,sha256=yfeBxpH2J49xHDzZUZI3cK5ms4QbWq0gtTmhj8ejAjE,8836 +django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo,sha256=htUgd6rcaeRPDf6UrEb18onz-Ayltw9LTvWRgEkXm08,4761 +django/contrib/humanize/locale/mk/LC_MESSAGES/django.po,sha256=Wl9Rt8j8WA_0jyxKCswIovSiCQD-ZWFYXbhFsCUKIWo,6665 +django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo,sha256=5As-FXkEJIYetmV9dMtzLtsRPTOm1oUgyx-oeTH_guY,4655 +django/contrib/humanize/locale/ml/LC_MESSAGES/django.po,sha256=I9_Ln0C1nSj188_Zdq9Vy6lC8aLzg_YdNc5gy9hNGjE,10065 +django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo,sha256=gi-b-GRPhg2s2O9wP2ENx4bVlgHBo0mSqoi58d_QpCw,6020 +django/contrib/humanize/locale/mn/LC_MESSAGES/django.po,sha256=0zV7fYPu6xs_DVOCUQ6li36JWOnpc-RQa0HXwo7FrWc,9797 +django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/humanize/locale/mr/LC_MESSAGES/django.po,sha256=M44sYiBJ7woVZZlDO8rPDQmS_Lz6pDTCajdheyxtdaI,4724 +django/contrib/humanize/locale/ms/LC_MESSAGES/django.mo,sha256=xSHIddCOU0bnfiyzQLaDaHAs1E4CaBlkyeXdLhJo1A8,842 +django/contrib/humanize/locale/ms/LC_MESSAGES/django.po,sha256=YhBKpxsTw9BleyaDIoDJAdwDleBFQdo1LckqLRmN8x4,7127 +django/contrib/humanize/locale/my/LC_MESSAGES/django.mo,sha256=55CWHz34sy9k6TfOeVI9GYvE9GRa3pjSRE6DSPk9uQ8,3479 +django/contrib/humanize/locale/my/LC_MESSAGES/django.po,sha256=jCiDhSqARfqKcMLEHJd-Xe6zo3Uc9QpiCh3BbAAA5UE,5433 +django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo,sha256=ZQ8RSlS3DXBHmpjZrZza9FPSxb1vDBN87g87dRbGMkQ,5317 +django/contrib/humanize/locale/nb/LC_MESSAGES/django.po,sha256=fpfJStyZSHz0A6fVoRSOs_NKcUGo9fFKmXme4yll62s,9134 +django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo,sha256=YFT2D-yEkUdJBO2GfuUowau1OZQA5mS86CZvMzH38Rk,3590 +django/contrib/humanize/locale/ne/LC_MESSAGES/django.po,sha256=SN7yH65hthOHohnyEmQUjXusRTDRjxWJG_kuv5g2Enk,9038 +django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo,sha256=xSGou2yFmVuiMH3C1IefwHBSys0YI_qW8ZQ9rwLdlPQ,5262 +django/contrib/humanize/locale/nl/LC_MESSAGES/django.po,sha256=s7LbdXpSQxkqSr666oTwTNlfdrJpLeYGoCe1xlAkGH8,9217 +django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo,sha256=U8T2xhNfS4eG8olRLsLa0ykJc7lXG1nds8RG7yM_-PU,4327 +django/contrib/humanize/locale/nn/LC_MESSAGES/django.po,sha256=ThvRCloPtKxlz23CiH23JmlkIhgEYP8xCySEpy_X9xY,7648 +django/contrib/humanize/locale/os/LC_MESSAGES/django.mo,sha256=BwS3Mj7z_Fg5s7Qm-bGLVhzYLZ8nPgXoB0gXLnrMGWc,3902 +django/contrib/humanize/locale/os/LC_MESSAGES/django.po,sha256=CGrxyL5l-5HexruOc7QDyRbum7piADf-nY8zjDP9wVM,6212 +django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo,sha256=TH1GkAhaVVLk2jrcqAmdxZprWyikAX6qMP0eIlr2tWM,1569 +django/contrib/humanize/locale/pa/LC_MESSAGES/django.po,sha256=_7oP0Hn-IU7IPLv_Qxg_wstLEdhgWNBBTCWYwSycMb0,5200 +django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo,sha256=0QheMbF3Y0Q_sxZlN2wAYJRQyK3K_uq6ttVr7wCc33w,5596 +django/contrib/humanize/locale/pl/LC_MESSAGES/django.po,sha256=6wX50O68aIyKiP6CcyLMXZ3xuUnAzasFPIg_8deJQBY,9807 +django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo,sha256=El9Sdr3kXS-yTol_sCg1dquxf0ThDdWyrWGjjim9Dj4,5408 +django/contrib/humanize/locale/pt/LC_MESSAGES/django.po,sha256=XudOc67ybF_fminrTR2XOCKEKwqB5FX14pl3clCNXGE,9281 +django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo,sha256=5GqZStkWlU0gGvtk_ufR3ZdLRqLEkSF6KJtbTuJb3pc,5427 +django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.po,sha256=Hz2kgq9Nv4jjGCyL16iE9ctJElxcLoIracR7DuVY-BE,9339 +django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo,sha256=vP6o72bsgKPsbKGwH0PU8Xyz9BnQ_sPWT3EANLT2wRk,6188 +django/contrib/humanize/locale/ro/LC_MESSAGES/django.po,sha256=JZiW6Y9P5JdQe4vgCvcFg35kFa8bSX0lU_2zdeudQP0,10575 +django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo,sha256=tkKePMXIA1h_TXxXmB2m-QbelTteNKEc5-SEzs7u6FM,8569 +django/contrib/humanize/locale/ru/LC_MESSAGES/django.po,sha256=fXkT7XpiU2_wmnR1__QCxIdndI2M3ssNus8rMM-TSOw,13609 +django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo,sha256=uUeDN0iYDq_3vT3NcTOTpKCGcv2ner5WtkIk6GVIsu0,6931 +django/contrib/humanize/locale/sk/LC_MESSAGES/django.po,sha256=cwmpA5EbD4ZE8aK0I1enRE_4RVbtfp1HQy0g1n_IYAE,11708 +django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo,sha256=f_07etc_G4OdYiUBKPkPqKm2iINqXoNsHUi3alUBgeo,5430 +django/contrib/humanize/locale/sl/LC_MESSAGES/django.po,sha256=mleF0fvn0oEfszhGLoaQkWofTwZJurKrJlIH8o-6kAI,8166 +django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo,sha256=1XXRe0nurGUUxI7r7gbSIuluRuza7VOeNdkIVX3LIFU,5280 +django/contrib/humanize/locale/sq/LC_MESSAGES/django.po,sha256=BS-5o3aG8Im9dWTkx4E_IbbeTRFcjjohinz1823ZepI,9127 +django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo,sha256=kBcoXTmJJlXEOk2M3l-k0PisT2jN_jXXhcOdPLBAiUY,5415 +django/contrib/humanize/locale/sr/LC_MESSAGES/django.po,sha256=u9ECn0qC8OPkHC9n10rljZc1vxed10eI0OOG7iPyA2w,9055 +django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=Z4hRzn0ks-vAj2ia4ovbsv00pOoZ973jRThbtlLKe5U,1017 +django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po,sha256=T9CYAx-KhtXwrlY4ol3hFv8dzxyJ1FTqeMBgtjYMEj8,6875 +django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo,sha256=Vb7VkAhhLbFdki1vUbFVAW5Dy5vUS8XWqr2T78-dTMg,4066 +django/contrib/humanize/locale/sv/LC_MESSAGES/django.po,sha256=4ccBM3edMXFOv4o30Zxmm9mbKRRcOkVttfeWHkSNmFg,7526 +django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo,sha256=cxjSUqegq1JX08xIAUgqq9ByP-HuqaXuxWM8Y2gHdB4,4146 +django/contrib/humanize/locale/sw/LC_MESSAGES/django.po,sha256=bPYrLJ2yY_lZ3y1K-RguNi-qrxq2r-GLlsz1gZcm2A8,6031 +django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo,sha256=1X2vH0iZOwM0uYX9BccJUXqK-rOuhcu5isRzMpnjh2o,466 +django/contrib/humanize/locale/ta/LC_MESSAGES/django.po,sha256=8x1lMzq2KOJveX92ADSuqNmXGIEYf7fZ1JfIJPysS04,4722 +django/contrib/humanize/locale/te/LC_MESSAGES/django.mo,sha256=iKd4dW9tan8xPxgaSoenIGp1qQpvSHHXUw45Tj2ATKQ,1327 +django/contrib/humanize/locale/te/LC_MESSAGES/django.po,sha256=FQdjWKMsiv-qehYZ4AtN9iKRf8Rifzcm5TZzMkQVfQI,5103 +django/contrib/humanize/locale/tg/LC_MESSAGES/django.mo,sha256=1Fiqat0CZSyExRXRjRCBS0AFzwy0q1Iba-2RVnrXoZQ,1580 +django/contrib/humanize/locale/tg/LC_MESSAGES/django.po,sha256=j2iczgQDbqzpthKAAlMt1Jk7gprYLqZ1Ya0ASr2SgD0,7852 +django/contrib/humanize/locale/th/LC_MESSAGES/django.mo,sha256=jT7wGhYWP9HHwOvtr2rNPStiOgZW-rGMcO36w1U8Y4c,3709 +django/contrib/humanize/locale/th/LC_MESSAGES/django.po,sha256=ZO3_wU7z0VASS5E8RSLEtmTveMDjJ0O8QTynb2-jjt0,8318 +django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo,sha256=D4ChMLE1Uz921NIF_Oe1vNkYAGfRpQuC8xANFwtlygE,4319 +django/contrib/humanize/locale/tr/LC_MESSAGES/django.po,sha256=4PjW65seHF9SsWnLv47JhgYPt0Gvzr-7_Ejech3d3ak,7754 +django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo,sha256=z8VgtMhlfyDo7bERDfrDmcYV5aqOeBY7LDgqa5DRxDM,3243 +django/contrib/humanize/locale/tt/LC_MESSAGES/django.po,sha256=j_tRbg1hzLBFAmPQt0HoN-_WzWFtA07PloCkqhvNkcY,5201 +django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/humanize/locale/udm/LC_MESSAGES/django.po,sha256=AR55jQHmMrbA6RyHGOtqdvUtTFlxWnqvfMy8vZK25Bo,4354 +django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo,sha256=Y1DAAowIHg4ibKYa6blAjm_OAjE9DppWN0HIkW7FNCg,8809 +django/contrib/humanize/locale/uk/LC_MESSAGES/django.po,sha256=Kv644K7dXfAt4tustWP-2dVT5aV26wBlUeBHfYo1D50,13754 +django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo,sha256=MF9uX26-4FFIz-QpDUbUHUNLQ1APaMLQmISMIaPsOBE,1347 +django/contrib/humanize/locale/ur/LC_MESSAGES/django.po,sha256=D5UhcPEcQ16fsBEdkk_zmpjIF6f0gEv0P86z_pK_1eA,5015 +django/contrib/humanize/locale/uz/LC_MESSAGES/django.mo,sha256=HDah_1qqUz5m_ABBVIEML3WMR2xyomFckX82i6b3n4k,1915 +django/contrib/humanize/locale/uz/LC_MESSAGES/django.po,sha256=Ql3GZOhuoVgS0xHEzxjyYkOWQUyi_jiizfAXBp2Y4uw,7296 +django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo,sha256=ZUK_Na0vnfdhjo0MgnBWnGFU34sxcMf_h0MeyuysKG8,3646 +django/contrib/humanize/locale/vi/LC_MESSAGES/django.po,sha256=DzRpXObt9yP5RK_slWruaIhnVI0-JXux2hn_uGsVZiE,5235 +django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=YgeAjXHMV1rXNNIrlDu_haxnKB0hxU5twJ86LMR10k8,3844 +django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po,sha256=JGfRVW_5UqwyI2mK_WRK8xDPzwBAO2q_mGsGzf89a88,7122 +django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=qYO9_rWuIMxnlL9Q8V9HfhUu7Ebv1HGOlvsnh7MvZkE,4520 +django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po,sha256=AijEfvIlJK9oVaLJ7lplmbvhGRKIbYcLh8WxoBYoQkA,7929 +django/contrib/humanize/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/humanize/templatetags/__pycache__/__init__.cpython-310.pyc,, +django/contrib/humanize/templatetags/__pycache__/humanize.cpython-310.pyc,, +django/contrib/humanize/templatetags/humanize.py,sha256=KrYTdiByIhAdenW55earN6pmRZ88EYkBgCVy46Nx3Lc,12071 +django/contrib/messages/__init__.py,sha256=6myQIwIFgc3SAyH5P1soIjwELREVgbxgxP85fJcge04,106 +django/contrib/messages/__pycache__/__init__.cpython-310.pyc,, +django/contrib/messages/__pycache__/api.cpython-310.pyc,, +django/contrib/messages/__pycache__/apps.cpython-310.pyc,, +django/contrib/messages/__pycache__/constants.cpython-310.pyc,, +django/contrib/messages/__pycache__/context_processors.cpython-310.pyc,, +django/contrib/messages/__pycache__/middleware.cpython-310.pyc,, +django/contrib/messages/__pycache__/utils.cpython-310.pyc,, +django/contrib/messages/__pycache__/views.cpython-310.pyc,, +django/contrib/messages/api.py,sha256=3DbnVG5oOBdg499clMU8l2hxCXMXB6S03-HCKVuBXjA,3250 +django/contrib/messages/apps.py,sha256=IWh-40L2X_Pzw7hJ_Qd16X0QCiuK3nxd5ryu5TCmpfg,194 +django/contrib/messages/constants.py,sha256=JD4TpaR4C5G0oxIh4BmrWiVmCACv7rnVgZSpJ8Rmzeg,312 +django/contrib/messages/context_processors.py,sha256=xMrgYeX6AcT_WwS9AYKNDDstbvAwE7_u1ssDVLN_bbg,354 +django/contrib/messages/middleware.py,sha256=2mxncCpJVUgLtjouUGSVl39mTF-QskQpWo2jCOOqV8A,986 +django/contrib/messages/storage/__init__.py,sha256=gXDHbQ9KgQdfhYOla9Qj59_SlE9WURQiKzIA0cFH0DQ,392 +django/contrib/messages/storage/__pycache__/__init__.cpython-310.pyc,, +django/contrib/messages/storage/__pycache__/base.cpython-310.pyc,, +django/contrib/messages/storage/__pycache__/cookie.cpython-310.pyc,, +django/contrib/messages/storage/__pycache__/fallback.cpython-310.pyc,, +django/contrib/messages/storage/__pycache__/session.cpython-310.pyc,, +django/contrib/messages/storage/base.py,sha256=sVkSITZRsdYDvyaS5tqjcw8-fylvcbZpR4ctlpWI5bM,5820 +django/contrib/messages/storage/cookie.py,sha256=c03f85FXbVSZ264MmuqphnjmPrLjpK_NOlpDdscsZso,6776 +django/contrib/messages/storage/fallback.py,sha256=K5CrVJfUDakMjIcqSRt1WZd_1Xco1Bc2AQM3O3ld9aA,2093 +django/contrib/messages/storage/session.py,sha256=kvdVosbBAvI3XBA0G4AFKf0vxLleyzlwbGEgl60DfMQ,1764 +django/contrib/messages/utils.py,sha256=_oItQILchdwdXH08SIyZ-DBdYi7q_uobHQajWwmAeUw,256 +django/contrib/messages/views.py,sha256=I_7C4yr-YLkhTEWx3iuhixG7NrKuyuSDG_CVg-EYRD8,524 +django/contrib/postgres/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/postgres/__pycache__/__init__.cpython-310.pyc,, +django/contrib/postgres/__pycache__/apps.cpython-310.pyc,, +django/contrib/postgres/__pycache__/constraints.cpython-310.pyc,, +django/contrib/postgres/__pycache__/expressions.cpython-310.pyc,, +django/contrib/postgres/__pycache__/functions.cpython-310.pyc,, +django/contrib/postgres/__pycache__/indexes.cpython-310.pyc,, +django/contrib/postgres/__pycache__/lookups.cpython-310.pyc,, +django/contrib/postgres/__pycache__/operations.cpython-310.pyc,, +django/contrib/postgres/__pycache__/search.cpython-310.pyc,, +django/contrib/postgres/__pycache__/serializers.cpython-310.pyc,, +django/contrib/postgres/__pycache__/signals.cpython-310.pyc,, +django/contrib/postgres/__pycache__/utils.cpython-310.pyc,, +django/contrib/postgres/__pycache__/validators.cpython-310.pyc,, +django/contrib/postgres/aggregates/__init__.py,sha256=QCznqMKqPbpraxSi1Y8-B7_MYlL42F1kEWZ1HeLgTKs,65 +django/contrib/postgres/aggregates/__pycache__/__init__.cpython-310.pyc,, +django/contrib/postgres/aggregates/__pycache__/general.cpython-310.pyc,, +django/contrib/postgres/aggregates/__pycache__/mixins.cpython-310.pyc,, +django/contrib/postgres/aggregates/__pycache__/statistics.cpython-310.pyc,, +django/contrib/postgres/aggregates/general.py,sha256=Iq9o8-_GTPybU-enLoxOlhBIuwuztRCnck_mZlfiIfM,3272 +django/contrib/postgres/aggregates/mixins.py,sha256=0JK-VUxGU4vNFd5FQkl93L9T2Hrd2fby9UpQLszuOGs,2204 +django/contrib/postgres/aggregates/statistics.py,sha256=xSWk5Z5ZVpM2LSaMgP97pxcijOnPHiPATe3X45poXCI,1511 +django/contrib/postgres/apps.py,sha256=rH0nbVQREE1YSORmeRPbcno_tGieC_DajFNiWLDT2lI,3466 +django/contrib/postgres/constraints.py,sha256=aTZgdxI_iCo2Jpcpxw5ssXN86sb-fYR3OBetXOZM4nE,7279 +django/contrib/postgres/expressions.py,sha256=fo5YASHJtIjexadqskuhYYk4WutofxzymYsivWWJS84,405 +django/contrib/postgres/fields/__init__.py,sha256=Xo8wuWPwVNOkKY-EwV9U1zusQ2DjMXXtL7_8R_xAi5s,148 +django/contrib/postgres/fields/__pycache__/__init__.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/array.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/citext.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/hstore.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/jsonb.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/ranges.cpython-310.pyc,, +django/contrib/postgres/fields/__pycache__/utils.cpython-310.pyc,, +django/contrib/postgres/fields/array.py,sha256=M6oR4upd4OgIaUqge7TJtZbL5eoGxXlVUBUKlOJpZjA,10778 +django/contrib/postgres/fields/citext.py,sha256=_c0QYlKJa5CS2_XFbv1KB0HwG3wJHeQ8PxGVxRrKQrk,438 +django/contrib/postgres/fields/hstore.py,sha256=WWWEoBfMtAjd226vvjFtGqbHMHFCjSly-BEhm9UN1qQ,3276 +django/contrib/postgres/fields/jsonb.py,sha256=ncMGT6WY70lCbcmhwtu2bjRmfDMUIvCr76foUv7tqv0,406 +django/contrib/postgres/fields/ranges.py,sha256=EJ5_adoNlKwAY529T9NQXb3r_tjGwjqYvAc2NvFtrxw,9683 +django/contrib/postgres/fields/utils.py,sha256=TV-Aj9VpBb13I2iuziSDURttZtz355XakxXnFwvtGio,95 +django/contrib/postgres/forms/__init__.py,sha256=NjENn2-C6BcXH4T8YeC0K2AbDk8MVT8tparL3Q4OF6g,89 +django/contrib/postgres/forms/__pycache__/__init__.cpython-310.pyc,, +django/contrib/postgres/forms/__pycache__/array.cpython-310.pyc,, +django/contrib/postgres/forms/__pycache__/hstore.cpython-310.pyc,, +django/contrib/postgres/forms/__pycache__/ranges.cpython-310.pyc,, +django/contrib/postgres/forms/array.py,sha256=LRUU3fxXePptMh3lolxhX4sbMjNSvnzMvNgcJolKfZc,8401 +django/contrib/postgres/forms/hstore.py,sha256=XN5xOrI-jCeTsWFEjPXf6XMaLzJdXiqA6pTdGSjWdOw,1767 +django/contrib/postgres/forms/ranges.py,sha256=FT6pt98n1xHuWbDeTZJl-0JCc2hepao4YPeI-3DzCRM,3434 +django/contrib/postgres/functions.py,sha256=7v6J01QQvX70KFyg9hDc322PgvT62xZqWlzp_vrl8bA,252 +django/contrib/postgres/indexes.py,sha256=pfwflPdWybvjFe3YS4BOD3gF04ExgnXMMnPlnztfkKM,8108 +django/contrib/postgres/jinja2/postgres/widgets/split_array.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/contrib/postgres/locale/af/LC_MESSAGES/django.mo,sha256=kDeL_SZezO8DRNMRh2oXz94YtAK1ZzPiK5dftqAonKI,2841 +django/contrib/postgres/locale/af/LC_MESSAGES/django.po,sha256=ALKUHbZ8DE6IH80STMJhGOoyHB8HSSxI4PlX_SfxJWc,3209 +django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo,sha256=UTBknYC-W7nclTrBCEiCpTglZxZQY80UqGki8I6j3EM,4294 +django/contrib/postgres/locale/ar/LC_MESSAGES/django.po,sha256=_PgF2T3ylO4vnixVoKRsgmpPDHO-Qhj3mShHtHeSna0,4821 +django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=fND1NtGTmEl7Rukt_VlqJeExdJjphBygmI-qJmE83P0,4352 +django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.po,sha256=Z9y3h6lDnbwD4JOn7OACLjEZqNY8OpEwuzoUD8FSdwA,4868 +django/contrib/postgres/locale/az/LC_MESSAGES/django.mo,sha256=K-2weZNapdDjP5-ecOfQhhhWmVR53JneJ2n4amA_zTk,2855 +django/contrib/postgres/locale/az/LC_MESSAGES/django.po,sha256=Pn47g_NvMgSBjguFLT_AE1QzxOGXOYjA-g_heXAT_tU,3214 +django/contrib/postgres/locale/be/LC_MESSAGES/django.mo,sha256=0Y6S-XR45rgw0zEZgjpRJyNm7szHxr9XOUyolo_5cN0,4134 +django/contrib/postgres/locale/be/LC_MESSAGES/django.po,sha256=KIkbhabWDYo4iDaQ8Dt0kxH_VB2wTFsS0rGs9zzKoKU,4635 +django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo,sha256=dkM1WSo5SgBglvJXNVvcIhKHU0ZjUJxmy4cX6_cJgZs,3515 +django/contrib/postgres/locale/bg/LC_MESSAGES/django.po,sha256=jalX0o2VjTVhXJIBKkyEk3aMjqYyNywmSGmyve9cu5M,3974 +django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo,sha256=XR1UEZV9AXKFz7XrchjRkd-tEdjnlmccW_I7XANyMns,2904 +django/contrib/postgres/locale/ca/LC_MESSAGES/django.po,sha256=5wPLvkODU_501cHPZ7v0n89rmFrsuctt7T8dUBMfQ0Q,3430 +django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo,sha256=_EmT9NnoX3xeRU-AI5sPlAszjzC0XwryWOmj8d07ox8,3388 +django/contrib/postgres/locale/cs/LC_MESSAGES/django.po,sha256=dkWVucs3-avEVtk_Xh5p-C8Tvw_oKDASdgab_-ByP-w,3884 +django/contrib/postgres/locale/da/LC_MESSAGES/django.mo,sha256=Pi841HD7j9mPiKNTaBvQP2aa5cF9MtwqbY6zfiouwu4,2916 +django/contrib/postgres/locale/da/LC_MESSAGES/django.po,sha256=3D8kRTXX2nbuvRoDlTf5tHB2S_k2d571L678wa3nBA8,3339 +django/contrib/postgres/locale/de/LC_MESSAGES/django.mo,sha256=B3HwniAOjSHmhuuqpLVa3nqYD5HPzZ7vwtQ_oPKiByE,2993 +django/contrib/postgres/locale/de/LC_MESSAGES/django.po,sha256=dZu8_1FIFKw67QnhXsGibfWT2W3d07Ro9CU8Y_HolvE,3468 +django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo,sha256=4Ymt58bCjpZlmNDZbFO8TtI6agusGvTwlDCjip_q8nQ,3573 +django/contrib/postgres/locale/dsb/LC_MESSAGES/django.po,sha256=m1PlbIRBIkTnbe2jLzcR0_Oi9MujrsS82apXd8GDkcs,4033 +django/contrib/postgres/locale/el/LC_MESSAGES/django.mo,sha256=NmzROkTfSbioGv8exM3UdMDnRAxR65YMteGv9Nhury4,3583 +django/contrib/postgres/locale/el/LC_MESSAGES/django.po,sha256=4WuswUwrInAh-OPX9k7gDdLb-oMKp1vQFUGvfm0ej00,4144 +django/contrib/postgres/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/postgres/locale/en/LC_MESSAGES/django.po,sha256=FtuWLiTQcIvK-kpbZujmawA0yQeRERhzfoJeEiOAyJw,2865 +django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.mo,sha256=WA0RSssD8ljI16g6DynQZQLQhd_0XR8ilrnJnepsIFg,2839 +django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.po,sha256=4JASYUpYlQlSPREPvMxFBqDpDhprlkI1GpAqTJrmb10,3215 +django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo,sha256=1wqM_IVO8Dl9AefzvWYuoS4eNTrBg7LDH6XUMovKi9A,2742 +django/contrib/postgres/locale/eo/LC_MESSAGES/django.po,sha256=r2tpOblfLAAHMacDWU-OVXTQus_vvAPMjUzVfrV_T7U,3217 +django/contrib/postgres/locale/es/LC_MESSAGES/django.mo,sha256=GoDmVupnksF_ypFyzFSjsGYb6EKA--HwvJfByZtSlTA,2917 +django/contrib/postgres/locale/es/LC_MESSAGES/django.po,sha256=kPsH3ohAmLLkEI5xKqge39SDF8FrNTx1emhPPeReYUg,3518 +django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo,sha256=f_gM-9Y0FK-y67lU2b4yYiFt0hz4ps9gH0NhCZScwaE,2917 +django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po,sha256=0qNlBk5v2QhZsb90xX3xHp8gw6jXevERbkOLBjwtJOc,3278 +django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo,sha256=Q2eOegYKQFY3fAKZCX7VvZAN6lT304W51aGl0lzkbLU,2484 +django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po,sha256=bbgOn34B7CSq1Kf2IrJh6oRJWPur_Smc4ebljIxAFGE,3233 +django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo,sha256=l6WdS59mDfjsV9EMULjKP2DhXR7x3bYax1iokL-AXcU,689 +django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po,sha256=_-jzhIT71zV539_4SUbwvOXfDHkxRy1FDGdx23iB7B4,2283 +django/contrib/postgres/locale/et/LC_MESSAGES/django.mo,sha256=oPGqGUQhU9xE7j6hQZSVdC-be2WV-_BNrSAaN4csFR4,2886 +django/contrib/postgres/locale/et/LC_MESSAGES/django.po,sha256=xKkb-0CQCAn37xe0G2jfQmjg2kuYBmXB5yBpTA5lYNI,3404 +django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo,sha256=UG7x642-n3U7mamXuNHD66a_mR0agX72xSwBD3PpyJU,2883 +django/contrib/postgres/locale/eu/LC_MESSAGES/django.po,sha256=dAx6nlRd4FF_8i7Xeylwvj4HkEDKi3swFenkdJkDawU,3321 +django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo,sha256=uLh9fJtCSKg5eaj9uGP2muN_71aFxpZwOjRHtnZhPik,3308 +django/contrib/postgres/locale/fa/LC_MESSAGES/django.po,sha256=adN7bh9Q_R0Wzlf2fWaQnTtvxo0NslyoHH5t5V0eeMM,3845 +django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo,sha256=gB2z3nI8Bz-km3DngYfJulwelHSlWgZeBXlj5yWyA08,2943 +django/contrib/postgres/locale/fi/LC_MESSAGES/django.po,sha256=LNVTHv4-FWT5KOre5qTwLEpKIQbaSIusFH2uUmbwYBg,3315 +django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo,sha256=wmlIBo9os5o1u04uSvk9-VBCCfK47MWj6kIirqMvHMA,3081 +django/contrib/postgres/locale/fr/LC_MESSAGES/django.po,sha256=sLwnf7qCGv5buhPp6kEJhsjx_BqFTxT5k5o3gQQ8fEI,3463 +django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo,sha256=okWU_Ke95EG2pm8rZ4PT5ScO-8f0Hqg65lYZgSid8tM,3541 +django/contrib/postgres/locale/gd/LC_MESSAGES/django.po,sha256=tjt5kfkUGryU3hFzPuAly2DBDLuLQTTD5p-XrxryFEI,4013 +django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo,sha256=MjJ8iObaHWyy2vFg_pDepfkiVH8LlTVHdy5tSqt8Wbw,539 +django/contrib/postgres/locale/gl/LC_MESSAGES/django.po,sha256=uI-7M-VYa4rqbEZcNwfQHUYDGRsz5mmksdigRywKDQc,2222 +django/contrib/postgres/locale/he/LC_MESSAGES/django.mo,sha256=UDu--EyjTrPOqf-XI9rH_Z9z7mhBGnXvrpHrfdGBlKk,3713 +django/contrib/postgres/locale/he/LC_MESSAGES/django.po,sha256=ekkwIceJdQKqL9VlCYwipnrsckSLhGi5OwBKEloZWlU,4188 +django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo,sha256=vdm5GxgpKuVdGoVl3VreD8IB1Mq5HGWuq-2YDeDrNnU,929 +django/contrib/postgres/locale/hr/LC_MESSAGES/django.po,sha256=8TxEnVH2yIQWbmbmDOpR7kksNFSaUGVhimRPQgSgDkM,2501 +django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo,sha256=fnzghbobisOaQTMu6Fm7FMAv7r6afzc8_hFHwlrHU0Y,3482 +django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po,sha256=V35au4H4RIMcVq_T-KEfnQ2oUqxJqyXP--YFHWt_DNw,3933 +django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo,sha256=6-9w_URPmVzSCcFea7eThbIE5Q-QSr5Q-i0zvKhpBBI,2872 +django/contrib/postgres/locale/hu/LC_MESSAGES/django.po,sha256=fx4w4FgjfP0dlik7zGCJsZEHmmwQUSA-GRzg4KeVd_s,3394 +django/contrib/postgres/locale/hy/LC_MESSAGES/django.mo,sha256=2QFIJdmh47IGPqI-8rvuHR0HdH2LOAmaYqEeCwUpRuw,3234 +django/contrib/postgres/locale/hy/LC_MESSAGES/django.po,sha256=MLHMbdwdo1txzFOG-fVK4VUvAoDtrLA8CdpQThybSCQ,3825 +django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo,sha256=gn8lf-gOP4vv-iiqnkcxvjzhJ8pTdetBhHyjl4TapXo,582 +django/contrib/postgres/locale/ia/LC_MESSAGES/django.po,sha256=FsqhPQf0j4g06rGuWSTn8A1kJ7E5U9rX16mtB8CAiIE,2251 +django/contrib/postgres/locale/id/LC_MESSAGES/django.mo,sha256=KKI5fjmuD7jqiGe7SgGkWmF6unHNe8JMVoOSDVemB8o,2733 +django/contrib/postgres/locale/id/LC_MESSAGES/django.po,sha256=Me13R5Oi89IZ0T3CtY0MZ34YK3T-HIZ7GbtFiXl2h50,3300 +django/contrib/postgres/locale/is/LC_MESSAGES/django.mo,sha256=rNL5Un5K_iRAZDtpHo4egcySaaBnNEirYDuWw0eI7gk,2931 +django/contrib/postgres/locale/is/LC_MESSAGES/django.po,sha256=UO53ciyI0jCVtBOXWkaip2AbPE2Hd2YhzK1RAlcxyQ8,3313 +django/contrib/postgres/locale/it/LC_MESSAGES/django.mo,sha256=m7bI5A6ER8TNWQH7m5-vU4xbFeqDlw-Tslv02oLLWJs,2978 +django/contrib/postgres/locale/it/LC_MESSAGES/django.po,sha256=FgyUi-A3zHv-UC21oqQ8NuHKSccRaH5_UqSuOpJFlKk,3600 +django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo,sha256=Up-87OUoJEieJkp8QecimVE-9q2krKt0pdHw1CcSxXs,3027 +django/contrib/postgres/locale/ja/LC_MESSAGES/django.po,sha256=mq2YnEbj6R6EEic2Gyhc56o-BbyJFv4PoJjXzz1CauI,3416 +django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo,sha256=A_VhLUZbocGNF5_5mMoYfB3l654MrPIW4dL1ywd3Tw8,713 +django/contrib/postgres/locale/ka/LC_MESSAGES/django.po,sha256=kRIwQ1Nrzdf5arHHxOPzQcB-XwPNK5lUFKU0L3QHfC8,2356 +django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo,sha256=xMc-UwyP1_jBHcGIAGWmDAjvSL50jJaiZbcT5TmzDOg,665 +django/contrib/postgres/locale/kk/LC_MESSAGES/django.po,sha256=f6Z3VUFRJ3FgSReC0JItjA0RaYbblqDb31lbJ3RRExQ,2327 +django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo,sha256=vK52cwamFt1mrvpSaoVcf2RAmQghw_EbPVrx_EA9onI,2897 +django/contrib/postgres/locale/ko/LC_MESSAGES/django.po,sha256=N_HTD-HK_xI27gZJRm_sEX4qM_Wtgdy5Pwqb8A6h9C8,3445 +django/contrib/postgres/locale/ky/LC_MESSAGES/django.mo,sha256=F0Ws34MbE7zJa8FNxA-9rFm5sNLL22D24LyiBb927lE,3101 +django/contrib/postgres/locale/ky/LC_MESSAGES/django.po,sha256=yAzSeT2jBm7R2ZXiuYBQFSKQ_uWIUfNTAobE1UYnlPs,3504 +django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo,sha256=kJ3ih8HrHt2M_hFW0H9BZg7zcj6sXy6H_fD1ReIzngM,3452 +django/contrib/postgres/locale/lt/LC_MESSAGES/django.po,sha256=PNADIV8hdpLoqwW4zpIhxtWnQN8cPkdcoXYngyjFeFw,3972 +django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo,sha256=zSCp3i4tUkXh-o0uCnOntFhohUId8ctOQIooEgPbrtw,3099 +django/contrib/postgres/locale/lv/LC_MESSAGES/django.po,sha256=HaGoMy-idXgYHqxczydnQSZdzRv-YaShFU2ns4yuPAY,3626 +django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo,sha256=WE4nRJKWAZvXuyU2qT2_FGqGlKYsP1KSACCtT10gQQY,3048 +django/contrib/postgres/locale/mk/LC_MESSAGES/django.po,sha256=CQX91LP1Gbkazpt4hTownJtSqZGR1OJfoD-1MCo6C1Y,3783 +django/contrib/postgres/locale/ml/LC_MESSAGES/django.mo,sha256=N47idWIsmtghZ_D5325TRsDFeoUa0MIvMFtdx7ozAHc,1581 +django/contrib/postgres/locale/ml/LC_MESSAGES/django.po,sha256=lt_7fGZV7BCB2XqFWIQQtH4niU4oMBfGzQQuN5sD0fo,2947 +django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo,sha256=VWeXaMvdqhW0GHs1Irb1ikTceH7jMKH_xMzKLH0vKZg,3310 +django/contrib/postgres/locale/mn/LC_MESSAGES/django.po,sha256=p3141FJiYrkV8rocgqdxnV05FReQYZmosv9LI46FlfE,3867 +django/contrib/postgres/locale/ms/LC_MESSAGES/django.mo,sha256=m3JZm1IIMZwmpvIs3oV0roYCeR_UlswHyCpZjjE6-A8,2712 +django/contrib/postgres/locale/ms/LC_MESSAGES/django.po,sha256=HCMBA1fxKLJct14ywap0PYVBi2bDp2F97Ms5_-G_Pwg,3025 +django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo,sha256=3h8DqEFG39i6uHY0vpXuGFmoJnAxTtRFy1RazcYIXfg,2849 +django/contrib/postgres/locale/nb/LC_MESSAGES/django.po,sha256=gDUg-HDg3LiYMKzb2QaDrYopqaJmbvnw2Fo-qhUHFuI,3252 +django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo,sha256=5XdBLGMkn20qeya3MgTCpsIDxLEa7PV-i2BmK993iRc,875 +django/contrib/postgres/locale/ne/LC_MESSAGES/django.po,sha256=1QLLfbrHneJmxM_5UTpNIYalP-qX7Bn7bmj4AfDLIzE,2421 +django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo,sha256=ttUzGWvxJYw71fVbcXCwzetyTWERBsURTe_nsf_axq0,2951 +django/contrib/postgres/locale/nl/LC_MESSAGES/django.po,sha256=ENw-dI6FHFqxclQKdefthCIVgp41HoIYj0IBmRCz0Vw,3515 +django/contrib/postgres/locale/nn/LC_MESSAGES/django.mo,sha256=RdMFozwxYIckBY40mJhN-jjkghztKn0-ytCtqxFHBMY,2836 +django/contrib/postgres/locale/nn/LC_MESSAGES/django.po,sha256=vl8NkY342eonqbrj89eCR_8PsJpeQuaRjxems-OPIBk,3184 +django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo,sha256=HZOPQ8tC_vWEqsCAtDquwnyhEiECyKSmVHuoklAj6hA,3444 +django/contrib/postgres/locale/pl/LC_MESSAGES/django.po,sha256=gKrgT2Mpuxhs6ym_D4yJQVC0tVr9KSaZBP7Fc4yW-wY,4150 +django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo,sha256=KZvJXjrIdtxbffckcrRV3nJ5GnID6PvqAb7vpOiWpHE,2745 +django/contrib/postgres/locale/pt/LC_MESSAGES/django.po,sha256=2gIDOjnFo6Iom-oTkQek4IX6FYPI9rNp9V-6sJ55aL8,3281 +django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo,sha256=y4D_g5Er3BpERdgloYcjvrhd2b_H77HzLkNUPiQY7d4,2903 +django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po,sha256=NTn26DdAGB90QPXwiWmhuB6un6sL2Rff5DJddtjLid4,3648 +django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo,sha256=w4tyByrZlba_Ju_F2OzD52ut5JSD6UGJfjt3A7CG_uc,3188 +django/contrib/postgres/locale/ro/LC_MESSAGES/django.po,sha256=hnotgrr-zeEmE4lgpqDDiJ051GoGbL_2GVs4O9dVLXI,3700 +django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo,sha256=TQ7EuEipMb-vduqTGhQY8PhjmDrCgujKGRX7Im0BymQ,4721 +django/contrib/postgres/locale/ru/LC_MESSAGES/django.po,sha256=Me728Qfq_PXRZDxjGQbs3lLMueG3bNaqGZuZPgqsZQA,5495 +django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo,sha256=0LY5Axf2dGDPCe0d2eQgEJY6OI3VORrIU9IiXPF2MD8,3358 +django/contrib/postgres/locale/sk/LC_MESSAGES/django.po,sha256=jtXuD3iUdd0_COtBzW57sNgWZ9jgXhNNiWKTj8M2X1A,3846 +django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo,sha256=rBO3S_wTGtqYq3PPasYZ9fMIxbNsCevNwNlj-csP53Y,3026 +django/contrib/postgres/locale/sl/LC_MESSAGES/django.po,sha256=-hQIB9eapgVP-jrewMbtlwZfiNn8N9w03BF9OkP73xE,3642 +django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo,sha256=Pm-uXjVgLGsPwPueqLL4bLJooVzeRFwqk-gpIlxXRDE,2899 +django/contrib/postgres/locale/sq/LC_MESSAGES/django.po,sha256=hQq8PofZztjMCuvv4vZuWYIwHYErygvCz2zAsplfgWs,3281 +django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo,sha256=xNuocml3ql2Cz5cp74N525eaJ7erKcEwLbFc6IZqYBk,3753 +django/contrib/postgres/locale/sr/LC_MESSAGES/django.po,sha256=jQJQzmmrdVOEQRFSmzPPW_rUOeCS6T-1u5_pRDXWRLI,4190 +django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=RsF_fhesv3GZ0cLY3sLrLjNWxy--tUnU3jj8zEDWu2g,3092 +django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.po,sha256=6DwzkQTrhF-hhDd6GfyOZsthi84HKVy7mszvGYJXFpk,3488 +django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo,sha256=ASNm2ZJRX_EDsz-4kUGiDlqZc62GzYceT76Yg_CqdDY,2787 +django/contrib/postgres/locale/sv/LC_MESSAGES/django.po,sha256=dVEH6Cuf-2afXl7tkaNK5vKRbrxyPGFz18MZ4MnyMFU,3342 +django/contrib/postgres/locale/tg/LC_MESSAGES/django.mo,sha256=3yW5NKKsa2f2qDGZ4NGlSn4DHatLOYEv5SEwB9voraA,2688 +django/contrib/postgres/locale/tg/LC_MESSAGES/django.po,sha256=Zuix5sJH5Fz9-joe_ivMRpNz2Fbzefsxz3OOoDV0o1c,3511 +django/contrib/postgres/locale/tk/LC_MESSAGES/django.mo,sha256=ytivs6cnECDuyVKToFQMRnH_RPr4PlVepg8xFHnr0W4,2789 +django/contrib/postgres/locale/tk/LC_MESSAGES/django.po,sha256=bfXIyKNOFRC3U34AEKCsYQn3XMBGtgqHsXpboHvRQq0,3268 +django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo,sha256=2wed5sCHeOFoykqShgnZ1aJ2dF6b6RbygraHUBhcysU,2898 +django/contrib/postgres/locale/tr/LC_MESSAGES/django.po,sha256=9xd_-n_JNSZ8GeYI0NeegzLLsTvREWsD0xbBx6otQQ4,3267 +django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo,sha256=8Hd-F7RZgoSrBlWYHSUw6uhXHdVFiEcWHWuXxJhYrU8,4418 +django/contrib/postgres/locale/uk/LC_MESSAGES/django.po,sha256=jFuGp_wSpAEZ91at1WUhS-S6k5JGv10kbVu4YoDsoDo,5116 +django/contrib/postgres/locale/uz/LC_MESSAGES/django.mo,sha256=PcmhhVC1spz3EFrQ2qdhfPFcA1ELHtBhHGWk9Z868Ss,703 +django/contrib/postgres/locale/uz/LC_MESSAGES/django.po,sha256=lbQxX2cmueGCT8sl6hsNWcrf9H-XEUbioP4L7JHGqiU,2291 +django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=jUqnfwS-XMNKVytVLEcyVsxqyfIHGkSJfW0hi7Sh7w4,2574 +django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po,sha256=7L9pBCN-dScEAfPIe4u-jY14S6NgVe6seZHaqthgms0,3060 +django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=Twqt8SVetuVV6UQ8ne48RfXILh2I9_-5De7cIrd5Lvc,2586 +django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po,sha256=5qE-q9uXlHM59soKgNSqeCfP-DnFuYI4fXLAbQctJ8c,2962 +django/contrib/postgres/lookups.py,sha256=Y8x4RxGGkVnlqJfNIWcQvBA1Uk5cKtsr4FPUF7hUSuo,1601 +django/contrib/postgres/operations.py,sha256=wBooH3gFy8arxZvMiPhU6w_5fGwwlcWb8OBvm-iiy1s,11808 +django/contrib/postgres/search.py,sha256=ryqdaExbKFOvFcjqEMBib064nQGBujp6qhP-6kaPn2c,11344 +django/contrib/postgres/serializers.py,sha256=wCg0IzTNeuVOiC2cdy1wio6gChjqVvH6Ri4hkCkEeXU,435 +django/contrib/postgres/signals.py,sha256=zpjL9gEF0Pc1peXe-ri9nxGocy3UNB9ORwQDvn9t5ow,2289 +django/contrib/postgres/templates/postgres/widgets/split_array.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/contrib/postgres/utils.py,sha256=32nCnzdMZ7Ra4dDonbIdv1aCppV3tnQnoEX9AhCJe38,1187 +django/contrib/postgres/validators.py,sha256=LT4W70ZC6aJ_uHZzu1VbFTjEY2p0V0hKqnKaTobNV78,2805 +django/contrib/redirects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/redirects/__pycache__/__init__.cpython-310.pyc,, +django/contrib/redirects/__pycache__/admin.cpython-310.pyc,, +django/contrib/redirects/__pycache__/apps.cpython-310.pyc,, +django/contrib/redirects/__pycache__/middleware.cpython-310.pyc,, +django/contrib/redirects/__pycache__/models.cpython-310.pyc,, +django/contrib/redirects/admin.py,sha256=1bPOgeZYRYCHdh7s2SpXnuL2WsfdQjD96U5Y3xhRY8g,314 +django/contrib/redirects/apps.py,sha256=1uS5EBp7WwDnY0WHeaRYo7VW9j-s20h4KDdImodjCNg,251 +django/contrib/redirects/locale/af/LC_MESSAGES/django.mo,sha256=EZpwI7hxr96D4CUt6e-kJHgkE3Q5k9RAmPjn6kXvE8A,1136 +django/contrib/redirects/locale/af/LC_MESSAGES/django.po,sha256=kDPrxqvMg3hn12fGyTaImC1gOtTjSxuJtbKdA7jvl_4,1367 +django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo,sha256=FfPauXNUmQxq0R1-eQ2xw2WY1Oi33sLwVhyKX10_zFw,1336 +django/contrib/redirects/locale/ar/LC_MESSAGES/django.po,sha256=X0xX51asSDWedd56riJ4UrsCGEjH-lZdkcilIg4amgI,1595 +django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=Nt17Ugj4UVEsyg-y7UYgCnAttSX_pRR5OLS-qRbpZvI,1336 +django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.po,sha256=ckrjwULi4Sx_mBOxadvywXOy6vyecQYWryACnyg1XGA,1511 +django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo,sha256=a1ixBQQIdBZ7o-ADnF2r74CBtPLsuatG7txjc05_GXI,1071 +django/contrib/redirects/locale/ast/LC_MESSAGES/django.po,sha256=PguAqeIUeTMWsADOYLTxoC6AuKrCloi8HN18hbm3pZ0,1266 +django/contrib/redirects/locale/az/LC_MESSAGES/django.mo,sha256=KzpRUrONOi5Cdr9sSRz3p0X-gGhD1-3LNhen-XDhO3g,1092 +django/contrib/redirects/locale/az/LC_MESSAGES/django.po,sha256=RGjd2J_pRdSkin4UlKxg7kc3aA8PCQRjDPXkpGZHdn0,1347 +django/contrib/redirects/locale/be/LC_MESSAGES/django.mo,sha256=fVqy28ml508UJf5AA-QVsS5dzKI8Q_ugZZ34WjTpJ-s,1426 +django/contrib/redirects/locale/be/LC_MESSAGES/django.po,sha256=zHBVewcpt0KoavV96v3F4wybqtkGb1jUuPz7sbiWWDI,1662 +django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo,sha256=o-ETSDGtAFZRo3SPd_IHe0mJ3R0RHA32KpgfOmUH11M,1279 +django/contrib/redirects/locale/bg/LC_MESSAGES/django.po,sha256=9qm8s6vj-0LStnyEJ8iYVi13_MfugVAAs2RHvIi7kW8,1587 +django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo,sha256=SbQh_pgxNCogvUFud7xW9T6NTAvpaQb2jngXCtpjICM,1319 +django/contrib/redirects/locale/bn/LC_MESSAGES/django.po,sha256=LgUuiPryDLSXxo_4KMCdjM5XC3BiRfINuEk0s5PUQYQ,1511 +django/contrib/redirects/locale/br/LC_MESSAGES/django.mo,sha256=Yt8xo5B5LJ9HB8IChCkj5mljFQAAKlaW_gurtF8q8Yw,1429 +django/contrib/redirects/locale/br/LC_MESSAGES/django.po,sha256=L2qPx6mZEVUNay1yYEweKBLr_fXVURCnACfsezfP_pI,1623 +django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo,sha256=0Yak4rXHjRRXLu3oYYzvS8qxvk2v4IFvUiDPA68a5YI,1115 +django/contrib/redirects/locale/bs/LC_MESSAGES/django.po,sha256=s9Nhx3H4074hlSqo1zgQRJbozakdJTwA1aTuMSqEJWw,1316 +django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo,sha256=VHE6qHCEoA7rQk0fMUpoTfwqSfu63-CiOFvhvKp5DMQ,1136 +django/contrib/redirects/locale/ca/LC_MESSAGES/django.po,sha256=PSMb_7iZBuYhtdR8byh9zr9dr50Z_tQ518DUlqoEA_M,1484 +django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo,sha256=UwYsoEHsg7FJLVe0JxdOa1cTGypqJFienAbWe7Vldf0,1229 +django/contrib/redirects/locale/cs/LC_MESSAGES/django.po,sha256=hnWJLXX7IjwZK7_8L3p-dpj5XpDmEo7lQ7-F4upjn7U,1504 +django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo,sha256=NSGoK12A7gbtuAuzQEVFPNSZMqqmhHyRvTEn9PUm9So,1132 +django/contrib/redirects/locale/cy/LC_MESSAGES/django.po,sha256=jDmC64z5exPnO9zwRkBmpa9v3DBlaeHRhqZYPoWqiIY,1360 +django/contrib/redirects/locale/da/LC_MESSAGES/django.mo,sha256=_UVfTMRG__5j7Ak8Q3HtXSy_DPGpZ1XvKj9MHdmR_xI,1132 +django/contrib/redirects/locale/da/LC_MESSAGES/django.po,sha256=RAWWbZXbJciNSdw4skUEoTnOb19iKXAe1KXJLWi0zPQ,1418 +django/contrib/redirects/locale/de/LC_MESSAGES/django.mo,sha256=uh-ldy-QkWS5-ARX6cLyzxzdhbTb_chyEbBPFCvCKuE,1155 +django/contrib/redirects/locale/de/LC_MESSAGES/django.po,sha256=hhGNnVCRV4HNxhCYfmVXTOIkabD7qsVQccwxKa5Tz9g,1424 +django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo,sha256=LXgczA38RzrN7zSWpxKy8_RY4gPg5tZLl30CJGjJ63s,1236 +django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po,sha256=rI9dyDp7zuZ6CjvFyo2OkGUDK5XzdvdI0ma8IGVkjp4,1431 +django/contrib/redirects/locale/el/LC_MESSAGES/django.mo,sha256=sD3HT4e53Yd3HmQap_Mqlxkm0xF98A6PFW8Lil0PihI,1395 +django/contrib/redirects/locale/el/LC_MESSAGES/django.po,sha256=puhVCcshg5HaPHsVAOucneVgBYT6swhCCBpVGOZykgA,1716 +django/contrib/redirects/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/redirects/locale/en/LC_MESSAGES/django.po,sha256=u4RcMkFmNvlG9Bv6kM0a0scWUMDUbTEDJGR90-G8C0E,1123 +django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo,sha256=wxCpSLGl_zsE47kDwilDkpihazwHkA363PvtGOLWhdk,1127 +django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po,sha256=zujH1WuxoHw_32flptG0x2Ob_BlilLKXuMjQxVbZmgw,1307 +django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo,sha256=VscL30uJnV-eiQZITpBCy0xk_FfKdnMh4O9Hk4HGxww,1053 +django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po,sha256=loe8xIVjZ7eyteQNLPoa-QceBZdgky22dR6deK5ubmA,1246 +django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo,sha256=pZo0DSbfGGTHi-jgaTGp29kJK-iplaai-WXJoOPluMA,1138 +django/contrib/redirects/locale/eo/LC_MESSAGES/django.po,sha256=3AxFPHffYw3svHe-MR3zuVGLMtkJPL_SX_vB_ztx98c,1414 +django/contrib/redirects/locale/es/LC_MESSAGES/django.mo,sha256=xyeIQL_pHFyo7p7SkeuxzKdDsma2EXhvnPNDHUhaBv8,1159 +django/contrib/redirects/locale/es/LC_MESSAGES/django.po,sha256=Y3hPQrcbhLtR-pPYRJJXkJME5M8Enr20j9D63hhe9ZA,1490 +django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo,sha256=JdKzpdyf9W2m_0_NguvXvyciOh6LAATfE6lqcsp45To,1144 +django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po,sha256=3zrKJXLh_mrjc4A6g9O6ePyFz8PNUMYTPjNFpvEhaDo,1364 +django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo,sha256=wcAMOiqsgz2KEpRwirRH9FNoto6vmo_hxthrQJi0IHU,1147 +django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.po,sha256=n8DM14vHekZRayH0B6Pm3L5XnSo4lto4ZAdu4OhcOmc,1291 +django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo,sha256=38fbiReibMAmC75BCCbyo7pA2VA3QvmRqVEo_K6Ejow,1116 +django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po,sha256=t7R6PiQ1bCc7jhfMrjHlZxVQ6BRlWT2Vv4XXhxBD_Oo,1397 +django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po,sha256=f4XZW8OHjRJoztMJtSDCxd2_Mfy-XK44hLtigjGSsZY,958 +django/contrib/redirects/locale/et/LC_MESSAGES/django.mo,sha256=34-Z1s9msdnj6U7prMctEWCxAR8TNnP44MIoyUuFsls,1131 +django/contrib/redirects/locale/et/LC_MESSAGES/django.po,sha256=1VWcUbM9z_nNmiGnT9Mka3Y3ZLRVHuJdS_j_yNXvmQ0,1479 +django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo,sha256=yHlAEz01pWse4ZworAj7JiATUam5Fp20EZd_3PRgSNw,1126 +django/contrib/redirects/locale/eu/LC_MESSAGES/django.po,sha256=zAvSdahjvq727hXeGjHJ_R5L5meCrOv98tbH3rwlBcE,1404 +django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo,sha256=vZa1KKm2y8duEv9UbJMyiM8WO2EAXcevdR3Lj1ISgLU,1234 +django/contrib/redirects/locale/fa/LC_MESSAGES/django.po,sha256=1quB0Wx5VTIjX2QUCpENl1GA2hpSdsRpgK931jr20B0,1541 +django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo,sha256=xJEd4M2IowXxKBlaGuOEgFKA9OuihcgPoK07Beat4cc,1164 +django/contrib/redirects/locale/fi/LC_MESSAGES/django.po,sha256=1I7AoXMPRDMY6TCjPkQh0Q9g68r9BwKOwki9DybcFWc,1429 +django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo,sha256=YhVNoNaHdSOp2P2F7xfo2MHCd2KkHiehpVjLyJ4VLuw,1155 +django/contrib/redirects/locale/fr/LC_MESSAGES/django.po,sha256=-ljzEKiU05annJ8DHw4OOg8eDCAnWLV2V33R-tQn9dE,1391 +django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/redirects/locale/fy/LC_MESSAGES/django.po,sha256=D7xverCbf3kTCcFM8h7EKWM5DcxZRqeOSKDB1irbKeE,948 +django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo,sha256=blwOMshClFZKvOZXVvqENK_E_OkdS1ydbjQCDXcHXd4,1075 +django/contrib/redirects/locale/ga/LC_MESSAGES/django.po,sha256=76rdrG4GVbcKwgUQN4bB-B0t6hpivCA_ehf4uzGM_mY,1341 +django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo,sha256=baZXdulbPZwe4_Q3OwfHFl4GJ4hCYtoZz-lE4wcdJvg,1250 +django/contrib/redirects/locale/gd/LC_MESSAGES/django.po,sha256=M4E2giFgzRowd3OsvhD389MyJmT5osKz1Vs1sEfmUpU,1428 +django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo,sha256=LoMrpBThJSmWzZ1wT66xGndnNCVCOq2eCEyo88qKwkA,1127 +django/contrib/redirects/locale/gl/LC_MESSAGES/django.po,sha256=d8qXhC2wI45yXtFJuMBgibzHsCkZSxAD3I6pVdpxlSU,1313 +django/contrib/redirects/locale/he/LC_MESSAGES/django.mo,sha256=MnCcK4Vb3Z5ZQ2A52tb0kM60hmoHQJ0UrWcrhuI2RK0,1204 +django/contrib/redirects/locale/he/LC_MESSAGES/django.po,sha256=gjFr6b15s5JoAT6OoLCA3ApfwiqZ_vhB-EXEWOiUEwo,1427 +django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo,sha256=onR8L7Kvkx6HgFLK7jT-wA_zjarBN8pyltG6BbKFIWU,1409 +django/contrib/redirects/locale/hi/LC_MESSAGES/django.po,sha256=fNv9_qwR9iS-pjWNXnrUFIqvc10lwg3bfj5lgdQOy1U,1649 +django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo,sha256=7wHi6Uu0czZhI6v0ndJJ1wSkalTRfn7D5ovyw8tr4U4,1207 +django/contrib/redirects/locale/hr/LC_MESSAGES/django.po,sha256=HtxZwZ-ymmf-XID0z5s7nGYg-4gJL8i6FDGWt9i4Wns,1406 +django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo,sha256=6lfIW4LcMGvuLOY0U4w1V6Xwcd_TsUC3r-QzZOOLwys,1221 +django/contrib/redirects/locale/hsb/LC_MESSAGES/django.po,sha256=l5pATo8NHa8ypB8dCigRwqpLZvV8W0v2vPh60oAeGn0,1420 +django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo,sha256=4oYBNGEmFMISzw3LExVf6CHsJD_o20mMy132pwzM-wk,1111 +django/contrib/redirects/locale/hu/LC_MESSAGES/django.po,sha256=UYJ_ZrAnOqA6S8nkkfN_FBLxCyPHJjOMd1OSIUVc8aY,1383 +django/contrib/redirects/locale/hy/LC_MESSAGES/django.mo,sha256=gT5x1TZXMNyBwfmQ-C_cOB60JGYdKIM7tVb3-J5d6nw,1261 +django/contrib/redirects/locale/hy/LC_MESSAGES/django.po,sha256=40QTpth2AVeoy9P36rMJC2C82YsBh_KYup19WL6zM6w,1359 +django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo,sha256=PDB5ZQP6iH31xN6N2YmPZYjt6zzc88TRmh9_gAWH2U0,1152 +django/contrib/redirects/locale/ia/LC_MESSAGES/django.po,sha256=GXjbzY-cQz2QLx_iuqgijT7VUMcoNKL7prbP6yIbj8E,1297 +django/contrib/redirects/locale/id/LC_MESSAGES/django.mo,sha256=XEsvVWMR9As9csO_6iXNAcLZrErxz3HfDj5GTe06fJU,1105 +django/contrib/redirects/locale/id/LC_MESSAGES/django.po,sha256=t8FoC1xIB-XHDplyDJByQGFnHggxR0LSfUMGwWoAKWE,1410 +django/contrib/redirects/locale/io/LC_MESSAGES/django.mo,sha256=vz7TWRML-DFDFapbEXTByb9-pRQwoeJ0ApSdh6nOzXY,1019 +django/contrib/redirects/locale/io/LC_MESSAGES/django.po,sha256=obStuMYYSQ7x2utkGS3gekdPfnsNAwp3DcNwlwdg1sI,1228 +django/contrib/redirects/locale/is/LC_MESSAGES/django.mo,sha256=aMjlGilYfP7clGriAp1Za60uCD40rvLt9sKXuYX3ABg,1040 +django/contrib/redirects/locale/is/LC_MESSAGES/django.po,sha256=nw5fxVV20eQqsk4WKg6cIiKttG3zsITSVzH4p5xBV8s,1299 +django/contrib/redirects/locale/it/LC_MESSAGES/django.mo,sha256=bBj6dvhZSpxojLZ0GiMBamh1xiluxAYMt6RHubi9CxU,1092 +django/contrib/redirects/locale/it/LC_MESSAGES/django.po,sha256=NHSVus7ixtrB7JDIrYw22srZcse5i4Z9y8Ply_-Jcts,1390 +django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo,sha256=XSJw3iLK0gYVjZ86MYuV4jfoiN_-WkH--oMK5uW9cs8,1193 +django/contrib/redirects/locale/ja/LC_MESSAGES/django.po,sha256=SlYrmC3arGgS7SL8cCnq7d37P-bQGcmpgUXAwVC2eRw,1510 +django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo,sha256=0aOLKrhUX6YAIMNyt6KES9q2iFk2GupEr76WeGlJMkk,1511 +django/contrib/redirects/locale/ka/LC_MESSAGES/django.po,sha256=AQWIEdhxp55XnJwwHrUxxQaGbLJPmdo1YLeT86IJqnY,1725 +django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo,sha256=Ogx9NXK1Nfw4ctZfp-slIL81ziDX3f4DZ01OkVNY5Tw,699 +django/contrib/redirects/locale/kab/LC_MESSAGES/django.po,sha256=gI6aUPkXH-XzKrStDsMCMNfQKDEc-D1ffqE-Z-ItQuI,1001 +django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo,sha256=KVLc6PKL1MP_Px0LmpoW2lIvgLiSzlvoJ9062F-s3Zw,1261 +django/contrib/redirects/locale/kk/LC_MESSAGES/django.po,sha256=Xoy4mnOT51F_GS1oIO91EAuwt-ZfePKh-sutedo6D_g,1478 +django/contrib/redirects/locale/km/LC_MESSAGES/django.mo,sha256=tcW1s7jvTG0cagtdRNT0jSNkhX-B903LKl7bK31ZvJU,1248 +django/contrib/redirects/locale/km/LC_MESSAGES/django.po,sha256=KJ4h1umpfFLdsWZtsfXoeOl6cUPUD97U4ISWt80UZ2U,1437 +django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo,sha256=24GHcQlEoCDri-98eLtqLbGjtJz9cTPAfYdAijsL5ck,788 +django/contrib/redirects/locale/kn/LC_MESSAGES/django.po,sha256=xkH24itr2fpuCQMGQ3xssOqaN_7KzM-GLy0u00ti27I,1245 +django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo,sha256=RJRxocjiFAeDTEVtAawhpkv99axVeNmLDyBhwmjGCcM,1079 +django/contrib/redirects/locale/ko/LC_MESSAGES/django.po,sha256=QNDHQmvOgJnfpv9vMIIZVw--4YXSArJeOJks75m3zKo,1445 +django/contrib/redirects/locale/ky/LC_MESSAGES/django.mo,sha256=4jX_g-hledmjWEx0RvY99G5QcBj_mQt_HZzpd000J44,1265 +django/contrib/redirects/locale/ky/LC_MESSAGES/django.po,sha256=yvx21nxsqqVzPyyxX9_rF-oeaY2WszXrG4ZDSZTW6-4,1522 +django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/redirects/locale/lb/LC_MESSAGES/django.po,sha256=Hv1CF9CC78YuVVNpklDtPJDU5-iIUeuXcljewmc9akg,946 +django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo,sha256=reiFMXJnvE4XUosbKjyvUFzl4IKjlJoFK1gVJE9Tbnc,1191 +django/contrib/redirects/locale/lt/LC_MESSAGES/django.po,sha256=G56UIYuuVLgwzHCIj_suHNYPe1z76Y_cauWfGEs4nKI,1448 +django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo,sha256=slGK6O2tYD5yciS8m_7h2WA4LOPf05nQ4oTRKB63etE,1175 +django/contrib/redirects/locale/lv/LC_MESSAGES/django.po,sha256=GUDn1IYQ5UMOQUBvGfuVOeVb-bpf5FHVigqTt_N0I0M,1442 +django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo,sha256=3XGgf2K60LclScPKcgw07TId6x535AW5jtGVJ9lC01A,1353 +django/contrib/redirects/locale/mk/LC_MESSAGES/django.po,sha256=Smsdpid5VByoxvnfzju_XOlp6aTPl8qshFptot3cRYM,1596 +django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo,sha256=IhSkvbgX9xfE4GypOQ7W7SDM-wOOqx1xgSTW7L1JofU,1573 +django/contrib/redirects/locale/ml/LC_MESSAGES/django.po,sha256=9KpXf88GRUB5I51Rj3q9qhvhjHFINuiJ9ig0SZdYE6k,1755 +django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo,sha256=14fdHC_hZrRaA0EAFzBJy8BHj4jMMX6l2e6rLLBtJ8E,1274 +django/contrib/redirects/locale/mn/LC_MESSAGES/django.po,sha256=7_QzUWf5l0P-7gM35p9UW7bOj33NabQq_zSrekUeZsY,1502 +django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/redirects/locale/mr/LC_MESSAGES/django.po,sha256=0aGKTlriCJoP-Tirl-qCl7tjjpjURhgCjRGmurHVO3c,940 +django/contrib/redirects/locale/ms/LC_MESSAGES/django.mo,sha256=WUk6hvvHPWuylCGiDvy0MstWoQ1mdmwwfqlms1Nv4Ng,1094 +django/contrib/redirects/locale/ms/LC_MESSAGES/django.po,sha256=bsQDwxqtS5FgPCqTrfm9kw2hH_R2y44DnI5nluUgduc,1255 +django/contrib/redirects/locale/my/LC_MESSAGES/django.mo,sha256=H5-y9A3_1yIXJzC4sSuHqhURxhOlnYEL8Nvc0IF4zUE,549 +django/contrib/redirects/locale/my/LC_MESSAGES/django.po,sha256=MZGNt0jMQA6aHA6OmjvaC_ajvRWfUfDiKkV0j3_E480,1052 +django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo,sha256=pxRtj5VFxTQBbi_mDS05iGoQs4BZ4y6LLJZ9pozJezY,1110 +django/contrib/redirects/locale/nb/LC_MESSAGES/django.po,sha256=ALYXciVa0d0sG70dqjtk17Yh_qwzKAzTXDlEZSU9kc0,1392 +django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo,sha256=TxTnBGIi5k0PKAjADeCuOAJQV5dtzLrsFRXBXtfszWI,1420 +django/contrib/redirects/locale/ne/LC_MESSAGES/django.po,sha256=5b5R-6AlSIQrDyTtcmquoW5xrQRGZwlxZpBpZfVo5t4,1607 +django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo,sha256=uGVQu5YnzWjf2aBtxY2ZdCHXz7M8T2GKz5EcQ20ODvM,1080 +django/contrib/redirects/locale/nl/LC_MESSAGES/django.po,sha256=fnEiqRdM-BOP2_6v4U-FC4cCmcVgXAXloiWKhYu-uOE,1400 +django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo,sha256=8TQXBF2mzENl7lFpcrsKxkJ4nKySTOgXJM5_I2OD7q8,1143 +django/contrib/redirects/locale/nn/LC_MESSAGES/django.po,sha256=pfrKVQd1wLKKpq-b7CBpc-rZnEEgyZFDSjbipsEiwxM,1344 +django/contrib/redirects/locale/os/LC_MESSAGES/django.mo,sha256=joQ-ibV9_6ctGMNPLZQLCx5fUamRQngs6_LDd_s9sMQ,1150 +django/contrib/redirects/locale/os/LC_MESSAGES/django.po,sha256=ZwFWiuGS9comy7r2kMnKuqaPOvVehVdAAuFvXM5ldxM,1358 +django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo,sha256=MY-OIDNXlZth-ZRoOJ52nlUPg_51_F5k0NBIpc7GZEw,748 +django/contrib/redirects/locale/pa/LC_MESSAGES/django.po,sha256=TPDTK2ZvDyvO1ob8Qfr64QDbHVWAREfEeBO5w9jf63E,1199 +django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo,sha256=9Sc_8aDC8-PADnr4hYdat6iRUXj0QxsWR1RGWKIQP3M,1285 +django/contrib/redirects/locale/pl/LC_MESSAGES/django.po,sha256=RLuSAlWQPvxDGSNHL3j5ohMdf4IZL-g21-_QIuTdY4c,1605 +django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo,sha256=WocPaVk3fQEz_MLmGVtFBGwsThD-gNU7GDocqEbeaBA,1129 +django/contrib/redirects/locale/pt/LC_MESSAGES/django.po,sha256=ptCzoE41c9uFAbgSjb6VHSFYPEUv_51YyBdoThXN3XA,1350 +django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo,sha256=LxFEZCH75ucCaB5fEmdsjEJi5aJa3barRLqcd6r-gj0,1171 +django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po,sha256=PO5whkwiagEN_s8ViBDN41dW35wdjAuXZBB1j2m09lY,1615 +django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo,sha256=D8FkmV6IxZOn5QAPBu9PwhStBpVQWudU62wKa7ADfJY,1158 +django/contrib/redirects/locale/ro/LC_MESSAGES/django.po,sha256=Z_-pDi2-A7_KXrEQtFlAJ_KLO0vXFKCbMphsNlqfNJk,1477 +django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo,sha256=IvO0IXq1xuX0wpo2hV8po1AMifLS3ElGyQal0vmC_Jw,1457 +django/contrib/redirects/locale/ru/LC_MESSAGES/django.po,sha256=FHb4L3RMVV5ajxGj9y6ZymPtO_XjZrhHmvCZBPwwzmQ,1762 +django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo,sha256=oVA89AU0UVErADtesum66Oo3D27RRy04qLHy3n0Y9-w,1189 +django/contrib/redirects/locale/sk/LC_MESSAGES/django.po,sha256=Kjbdc7nrKsMCaEphxUdGb4VbpJbFhF0cs3ReqrY7638,1468 +django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo,sha256=GAZtOFSUxsOHdXs3AzT40D-3JFWIlNDZU_Z-cMvdaHo,1173 +django/contrib/redirects/locale/sl/LC_MESSAGES/django.po,sha256=gkZTyxNh8L2gNxyLVzm-M1HTiK8KDvughTa2MK9NzWo,1351 +django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo,sha256=f2HyVjWFGnjNXV-EIk0YMFaMH6_ZwYLYgSDwU4fIJfM,1165 +django/contrib/redirects/locale/sq/LC_MESSAGES/django.po,sha256=gbd4JxoevGfDTRx3iYfDtlnh54EwyRKYXxs4XagHvRM,1453 +django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo,sha256=OK90avxrpYxBcvPIZ_tDlSZP6PyRCzFg_7h0F_JlMy8,1367 +django/contrib/redirects/locale/sr/LC_MESSAGES/django.po,sha256=Ipi7j7q5N8aNGWmkz5XGlOPqpD46xCLKarfs-lNbKqM,1629 +django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=qYXT0j80c7a5jMsxeezncAL9Gff2Pb7eJz8iTX0TRX4,1210 +django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.po,sha256=CL3ij3uGK8UOMggLXf0MctEydLbyi-9zvkXN5Teuu9c,1424 +django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo,sha256=y1KpTjzF2FWY_x373UyaEFTTNYPT6hroB6zvA1ev010,1147 +django/contrib/redirects/locale/sv/LC_MESSAGES/django.po,sha256=7Us64PRHRyIZ8D7lY6HCef9xXnoSfwWI3YYtlNEaFSo,1362 +django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo,sha256=oJnTp9CTgNsg5TSOV_aPZIUXdr6-l65hAZbaARZCO2w,1078 +django/contrib/redirects/locale/sw/LC_MESSAGES/django.po,sha256=CTVwA3O7GUQb7l1WpbmT8kOfqr7DpqnIyQt3HWJ6YTQ,1245 +django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo,sha256=AE6Py2_CV2gQKjKQAa_UgkLT9i61x3i1hegQpRGuZZM,1502 +django/contrib/redirects/locale/ta/LC_MESSAGES/django.po,sha256=ojdq8p4HnwtK0n6By2I6_xuucOpJIobJEGRMGc_TrS8,1700 +django/contrib/redirects/locale/te/LC_MESSAGES/django.mo,sha256=Gtcs4cbgrD7-bSkPKiPbM5DcjONS2fSdHhvWdbs_E1M,467 +django/contrib/redirects/locale/te/LC_MESSAGES/django.po,sha256=RT-t3TjcOLyNQQWljVrIcPWErKssh_HQMyGujloy-EI,939 +django/contrib/redirects/locale/tg/LC_MESSAGES/django.mo,sha256=6e4Pk9vX1csvSz80spVLhNTd3N251JrXaCga9n60AP8,782 +django/contrib/redirects/locale/tg/LC_MESSAGES/django.po,sha256=2Cmle5usoNZBo8nTfAiqCRq3KqN1WKKdc-mogUOJm9I,1177 +django/contrib/redirects/locale/th/LC_MESSAGES/django.mo,sha256=1l6eO0k1KjcmuRJKUS4ZdtJGhAUmUDMAMIeNwEobQqY,1331 +django/contrib/redirects/locale/th/LC_MESSAGES/django.po,sha256=DVVqpGC6zL8Hy8e6P8ZkhKbvcMJmXV5euLxmfoTCtms,1513 +django/contrib/redirects/locale/tk/LC_MESSAGES/django.mo,sha256=KhWOArsItusTEzoZZflZ75hl9hhMU0lkm_p8foe8QiU,1113 +django/contrib/redirects/locale/tk/LC_MESSAGES/django.po,sha256=nBeAakgUKhHB21jEiwFrwLSyrJq2XYl8-N6Tq1Klq_Q,1292 +django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo,sha256=-qySxKYwxfFO79cBytvzTBeFGdio1wJlM5DeBBfdxns,1133 +django/contrib/redirects/locale/tr/LC_MESSAGES/django.po,sha256=-03z3YMI6tlt12xwFI2lWchOxiIVbkdVRhghaCoMKlk,1408 +django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo,sha256=Hf1JXcCGNwedxy1nVRM_pQ0yUebC-tvOXr7P0h86JyI,1178 +django/contrib/redirects/locale/tt/LC_MESSAGES/django.po,sha256=2WCyBQtqZk-8GXgtu-x94JYSNrryy2QoMnirhiBrgV0,1376 +django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/redirects/locale/udm/LC_MESSAGES/django.po,sha256=xsxlm4itpyLlLdPQRIHLuvTYRvruhM3Ezc9jtp3XSm4,934 +django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo,sha256=QbN1ABfbr2YbZQXz2U4DI-6iTvWoKPrLAn5tGq57G5Y,1569 +django/contrib/redirects/locale/uk/LC_MESSAGES/django.po,sha256=pH9M4ilsJneoHw6E1E3T54QCHGS_i4tlhDc0nbAJP8I,1949 +django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo,sha256=CQkt-yxyAaTd_Aj1ZZC8s5-4fI2TRyTEZ-SYJZgpRrQ,1138 +django/contrib/redirects/locale/ur/LC_MESSAGES/django.po,sha256=CkhmN49PvYTccvlSRu8qGpcbx2C-1aY7K3Lq1VC2fuM,1330 +django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo,sha256=vD0Y920SSsRsLROKFaU6YM8CT5KjQxJcgMh5bZ4Pugo,743 +django/contrib/redirects/locale/uz/LC_MESSAGES/django.po,sha256=G2Rj-6g8Vse2Bp8L_hGIO84S--akagMXj8gSa7F2lK4,1195 +django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo,sha256=BquXycJKh-7-D9p-rGUNnjqzs1d6S1YhEJjFW8_ARFA,1106 +django/contrib/redirects/locale/vi/LC_MESSAGES/django.po,sha256=xsCASrGZNbQk4d1mhsTZBcCpPJ0KO6Jr4Zz1wfnL67s,1301 +django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=iftb_HccNV383_odHbB6Tikn2h7EtP_9QK-Plq2xwTY,1100 +django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po,sha256=xZmfuCEYx7ou_qvtxBcBly5mBmkSBEhnx0xqJj3nvMw,1490 +django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=-H2o5p5v8j5RqKZ6vOsWToFWGOn8CaO3KSTiU42Zqjk,1071 +django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po,sha256=fQicS5nmJLgloKM83l6NcSJp36-Wjn2Dl9jf03e0pGo,1334 +django/contrib/redirects/middleware.py,sha256=ydqidqi5JTaoguEFQBRzLEkU3HeiohgVsFglHUE-HIU,1921 +django/contrib/redirects/migrations/0001_initial.py,sha256=FmCw6R7-BK2bQIsetCADPKjV_s5bU4_gQLXzs5YySrk,2102 +django/contrib/redirects/migrations/0002_alter_redirect_new_path_help_text.py,sha256=qUWUkoM5ak5ywVulV9dzKNby3iDZgG212c9U659KdQg,636 +django/contrib/redirects/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/redirects/migrations/__pycache__/0002_alter_redirect_new_path_help_text.cpython-310.pyc,, +django/contrib/redirects/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/redirects/models.py,sha256=KJ6mj0BS243BNPKp26K7OSqcT9j49FPth5m0gNWWxFM,1083 +django/contrib/sessions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sessions/__pycache__/apps.cpython-310.pyc,, +django/contrib/sessions/__pycache__/base_session.cpython-310.pyc,, +django/contrib/sessions/__pycache__/exceptions.cpython-310.pyc,, +django/contrib/sessions/__pycache__/middleware.cpython-310.pyc,, +django/contrib/sessions/__pycache__/models.cpython-310.pyc,, +django/contrib/sessions/__pycache__/serializers.cpython-310.pyc,, +django/contrib/sessions/apps.py,sha256=5WIMqa3ymqEvYMnFHe3uWZB8XSijUF_NSgaorRD50Lg,194 +django/contrib/sessions/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/backends/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/base.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/cache.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/cached_db.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/db.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/file.cpython-310.pyc,, +django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-310.pyc,, +django/contrib/sessions/backends/base.py,sha256=7e8_8MljyPkIuxmYNweGZakyiYawYInJFpb0U7h3_7o,11492 +django/contrib/sessions/backends/cache.py,sha256=Dz4lOirEI3ZSrvOWnAffQpyA53TuPm3MmV1u8jkT-hI,2741 +django/contrib/sessions/backends/cached_db.py,sha256=pxPlY9klOH0NCht8OZrHQew_UkMrQlKMtIKMLYIv2DI,2098 +django/contrib/sessions/backends/db.py,sha256=qEYZNmyWk1pBbuXGXbTsLtQ2Xt_HgoRALxTQm55ZLy0,3785 +django/contrib/sessions/backends/file.py,sha256=06SgHJOy45CeL8WI4is9gmyfV_CCJwM6iSoFLqaETpE,7779 +django/contrib/sessions/backends/signed_cookies.py,sha256=keRgy5CyvufiEo4A91znOKbX6UOzzH2hzaw51UzK_0Y,2676 +django/contrib/sessions/base_session.py,sha256=1woSGGF4IFWm2apOabxtdQHeVS6OmnivL_fwjUYGJwc,1490 +django/contrib/sessions/exceptions.py,sha256=KhkhXiFwfUflSP_t6wCLOEXz1YjBRTKVNbrLmGhOTLo,359 +django/contrib/sessions/locale/af/LC_MESSAGES/django.mo,sha256=0DS0pgVrMN-bUimDfesgHs8Lgr0loz2c6nJdz58RxyQ,717 +django/contrib/sessions/locale/af/LC_MESSAGES/django.po,sha256=ZJRLBshQCAiTTAUycdB3MZIadLeHR5LxbSlDvSWLnEo,838 +django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo,sha256=yoepqaR68PTGLx--cAOzP94Sqyl5xIYpeQ0IFWgY380,846 +django/contrib/sessions/locale/ar/LC_MESSAGES/django.po,sha256=ZgwtBYIdtnqp_8nKHXF1NVJFzQU81-3yv9b7STrQHMc,995 +django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=_iSasR22CxvNWfei6aE_24woPhhhvNzQl5FUO_649dc,817 +django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.po,sha256=vop5scstamgFSnO_FWXCEnI7R1N26t7jy_mZUAfETcY,978 +django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo,sha256=hz2m-PkrHby2CKfIOARj6kCzisT-Vs0syfDSTx_iVVw,702 +django/contrib/sessions/locale/ast/LC_MESSAGES/django.po,sha256=M90j1Nx6oDJ16hguUkfKYlyb5OymUeZ5xzPixWxSC7I,846 +django/contrib/sessions/locale/az/LC_MESSAGES/django.mo,sha256=_4XcYdtRasbCjRoaWGoULsXX2cEa--KdRdqbnGoaRuM,731 +django/contrib/sessions/locale/az/LC_MESSAGES/django.po,sha256=qYd7vz6A-hHQNwewzI6wEsxRVLdoc2xLGm1RPW0Hxc4,891 +django/contrib/sessions/locale/be/LC_MESSAGES/django.mo,sha256=FHZ72QuOd-vAOjOXisLs4CaEk7uZuzjO_EfUSB6754M,854 +django/contrib/sessions/locale/be/LC_MESSAGES/django.po,sha256=tHsYVn3XNTcukB0SrHUWP1iV763rrQHCimOyJHRPiek,1023 +django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo,sha256=fFZ8EgRlJ1Z-IP8gPtsUXAnqVHbqQRZpYv6PLWNlNVA,759 +django/contrib/sessions/locale/bg/LC_MESSAGES/django.po,sha256=tXcaDPNmFIv0RU-7sGscRkLCbKEgTBowzVj3AYymarY,997 +django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo,sha256=0BdFN7ou9tmoVG00fCA-frb1Tri3iKz43W7SWal398s,762 +django/contrib/sessions/locale/bn/LC_MESSAGES/django.po,sha256=LycmTel6LXV2HGGN6qzlAfID-cVEQCNnW1Nv_hbWXJk,909 +django/contrib/sessions/locale/br/LC_MESSAGES/django.mo,sha256=6ubPQUyXX08KUssyVZBMMkTlD94mlA6wzsteAMiZ8C8,1027 +django/contrib/sessions/locale/br/LC_MESSAGES/django.po,sha256=LKxGGHOQejKpUp18rCU2FXW8D_H3WuP_P6dPlEluwcE,1201 +django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo,sha256=M7TvlJMrSUAFhp7oUSpUKejnbTuIK-19yiGBBECl9Sc,759 +django/contrib/sessions/locale/bs/LC_MESSAGES/django.po,sha256=Ur0AeRjXUsLgDJhcGiw75hRk4Qe98DzPBOocD7GFDRQ,909 +django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo,sha256=tbaZ48PaihGGD9-2oTKiMFY3kbXjU59nNciCRINOBNk,738 +django/contrib/sessions/locale/ca/LC_MESSAGES/django.po,sha256=tJuJdehKuD9aXOauWOkE5idQhsVsLbeg1Usmc6N_SP0,906 +django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo,sha256=wEFP4NNaRQDbcbw96UC906jN4rOrlPJMn60VloXr944,759 +django/contrib/sessions/locale/cs/LC_MESSAGES/django.po,sha256=7XkKESwfOmbDRDbUYr1f62-fDOuyI-aCqLGaEiDrmX8,962 +django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo,sha256=GeWVeV2PvgLQV8ecVUA2g3-VvdzMsedgIDUSpn8DByk,774 +django/contrib/sessions/locale/cy/LC_MESSAGES/django.po,sha256=zo18MXtkEdO1L0Q6ewFurx3lsEWTCdh0JpQJTmvw5bY,952 +django/contrib/sessions/locale/da/LC_MESSAGES/django.mo,sha256=7_YecCzfeYQp9zVYt2B7MtjhAAuVb0BcK2D5Qv_uAbg,681 +django/contrib/sessions/locale/da/LC_MESSAGES/django.po,sha256=qX_Oo7niVo57bazlIYFA6bnVmPBclUUTWvZFYNLaG04,880 +django/contrib/sessions/locale/de/LC_MESSAGES/django.mo,sha256=N3kTal0YK9z7Te3zYGLbJmoSB6oWaviWDLGdPlsPa9g,721 +django/contrib/sessions/locale/de/LC_MESSAGES/django.po,sha256=0qnfDeCUQN2buKn6R0MvwhQP05XWxSu-xgvfxvnJe3k,844 +django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo,sha256=RABl3WZmY6gLh4IqmTUhoBEXygDzjp_5lLF1MU9U5fA,810 +django/contrib/sessions/locale/dsb/LC_MESSAGES/django.po,sha256=cItKs5tASYHzDxfTg0A_dgBQounpzoGyOEFn18E_W_g,934 +django/contrib/sessions/locale/el/LC_MESSAGES/django.mo,sha256=QbTbmcfgc8_4r5hFrIghDhk2XQ4f8_emKmqupMG2ah0,809 +django/contrib/sessions/locale/el/LC_MESSAGES/django.po,sha256=HeaEbpVmFhhrZt2NsZteYaYoeo8FYKZF0IoNJwtzZkc,971 +django/contrib/sessions/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/sessions/locale/en/LC_MESSAGES/django.po,sha256=afaM-IIUZtcRZduojUTS8tT0w7C4Ya9lXgReOvq_iF0,804 +django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo,sha256=FgY1K6IVyQjMjXqVZxcsyWW_Tu5ckfrbmIfNYq5P-_E,693 +django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po,sha256=cMV15gJq8jNSUzkhn7uyOf2JYMFx7BNH1oFYa1vISnc,853 +django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo,sha256=T5NQCTYkpERfP9yKbUvixT0VdBt1zGmGB8ITlkVc420,707 +django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po,sha256=1ks_VE1qpEfPcyKg0HybkTG0-DTttTHTfUPhQCR53sw,849 +django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo,sha256=eBvYQbZS_WxVV3QCSZAOyHNIljC2ZXxVc4mktUuXVjI,727 +django/contrib/sessions/locale/eo/LC_MESSAGES/django.po,sha256=Ru9xicyTgHWVHh26hO2nQNFRQmwBnYKEagsS8TZRv3E,917 +django/contrib/sessions/locale/es/LC_MESSAGES/django.mo,sha256=jbHSvHjO2OCLlBD66LefocKOEbefWbPhj-l3NugiWuc,734 +django/contrib/sessions/locale/es/LC_MESSAGES/django.po,sha256=fY5WXeONEXHeuBlH0LkvzdZ2CSgbvLZ8BJc429aIbhI,909 +django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo,sha256=_8icF2dMUWj4WW967rc5npgndXBAdJrIiz_VKf5D-Rw,694 +django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po,sha256=AnmvjeOA7EBTJ6wMOkCl8JRLVYRU8KS0egPijcKutns,879 +django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo,sha256=UP7ia0gV9W-l0Qq5AS4ZPadJtml8iuzzlS5C9guMgh8,754 +django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.po,sha256=_XeiiRWvDaGjofamsRHr5up_EQvcw0w-GLLeWK27Af8,878 +django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo,sha256=MDM0K3xMvyf8ymvAurHYuacpxfG_YfJFyNnp1uuc6yY,756 +django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po,sha256=Y7VNa16F_yyK7_XJvF36rR2XNW8aBJK4UDweufyXpxE,892 +django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po,sha256=zWjgB0AmsmhX2tjk1PgldttqY56Czz8epOVCaYWXTLU,761 +django/contrib/sessions/locale/et/LC_MESSAGES/django.mo,sha256=aL1jZWourEC7jtjsuBZHD-Gw9lpL6L1SoqjTtzguxD0,737 +django/contrib/sessions/locale/et/LC_MESSAGES/django.po,sha256=VNBYohAOs59jYWkjVMY-v2zwVy5AKrtBbFRJZLwdCFg,899 +django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo,sha256=M9piOB_t-ZnfN6pX-jeY0yWh2S_5cCuo1oGiy7X65A4,728 +django/contrib/sessions/locale/eu/LC_MESSAGES/django.po,sha256=bHdSoknoH0_dy26e93tWVdO4TT7rnCPXlSLPsYAhwyw,893 +django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo,sha256=6DdJcqaYuBnhpFFHR42w-RqML0eQPFMAUEEDY0Redy8,755 +django/contrib/sessions/locale/fa/LC_MESSAGES/django.po,sha256=rklhNf0UFl2bM6mt7x9lWvfzPH4XWGbrW9Gc2w-9rzg,922 +django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo,sha256=oAugvlTEvJmG8KsZw09WcfnifYY5oHnGo4lxcxqKeaY,721 +django/contrib/sessions/locale/fi/LC_MESSAGES/django.po,sha256=BVVrjbZZtLGAuZ9HK63p769CbjZFZMlS4BewSMfNMKU,889 +django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo,sha256=aDGYdzx2eInF6IZ-UzPDEJkuYVPnvwVND3qVuSfJNWw,692 +django/contrib/sessions/locale/fr/LC_MESSAGES/django.po,sha256=hARxGdtBOzEZ_iVyzkNvcKlgyM8fOkdXTH3upj2XFYM,893 +django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/sessions/locale/fy/LC_MESSAGES/django.po,sha256=U-VEY4WbmIkmrnPK4Mv-B-pbdtDzusBCVmE8iHyvzFU,751 +django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo,sha256=zTrydRCRDiUQwF4tQ3cN1-5w36i6KptagsdA5_SaGy0,747 +django/contrib/sessions/locale/ga/LC_MESSAGES/django.po,sha256=Qpk1JaUWiHSEPdgBk-O_KfvGzwlZ4IAA6c6-nsJe400,958 +django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo,sha256=Yi8blY_fUD5YTlnUD6YXZvv1qjm4QDriO6CJIUe1wIk,791 +django/contrib/sessions/locale/gd/LC_MESSAGES/django.po,sha256=fEa40AUqA5vh743Zqv0FO2WxSFXGYk4IzUR4BoaP-C4,890 +django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo,sha256=uQ2ZmtUNoVCB2mSlMGSy-j4a_hu9PBfJDo796d8beFA,701 +django/contrib/sessions/locale/gl/LC_MESSAGES/django.po,sha256=FovTLHdVK15N9FI9lFFAOP4zt7GsvO0kKdocgeVDkNk,902 +django/contrib/sessions/locale/he/LC_MESSAGES/django.mo,sha256=qhgjSWfGAOgl-i7iwzSrJttx88xcj1pB0iLkEK64mJU,809 +django/contrib/sessions/locale/he/LC_MESSAGES/django.po,sha256=KvQG6wOpokM-2JkhWnB2UUQacy5Ie1402K_pH2zUOu0,1066 +django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo,sha256=naqxOjfAnNKy3qqnUG-4LGf9arLRJpjyWWmSj5tEfao,759 +django/contrib/sessions/locale/hi/LC_MESSAGES/django.po,sha256=WnTGvOz9YINMcUJg2BYCaHceZLKaTfsba_0AZtRNP38,951 +django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo,sha256=axyJAmXmadpFxIhu8rroVD8NsGGadQemh9-_ZDo7L1U,819 +django/contrib/sessions/locale/hr/LC_MESSAGES/django.po,sha256=3G-qOYXBO-eMWWsa5LwTCW9M1oF0hlWgEz7hAK8hJqI,998 +django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo,sha256=_OXpOlCt4KU0i65Iw4LMjSsyn__E9wH20l9vDNBSEzw,805 +django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po,sha256=yv3vX_UCDrdl07GQ79Mnytwgz2oTvySYOG9enzMpFJA,929 +django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo,sha256=ik40LnsWkKYEUioJB9e11EX9XZ-qWMa-S7haxGhM-iI,727 +django/contrib/sessions/locale/hu/LC_MESSAGES/django.po,sha256=1-UWEEsFxRwmshP2x4pJbitWIGZ1YMeDDxnAX-XGNxc,884 +django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo,sha256=x6VQWGdidRJFUJme-6jf1pcitktcQHQ7fhmw2UBej1Q,815 +django/contrib/sessions/locale/hy/LC_MESSAGES/django.po,sha256=eRMa3_A2Vx195mx2lvza1v-wcEcEeMrU63f0bgPPFjc,893 +django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo,sha256=-o4aQPNJeqSDRSLqcKuYvJuKNBbFqDJDe3IzHgSgZeQ,744 +django/contrib/sessions/locale/ia/LC_MESSAGES/django.po,sha256=PULLDd3QOIU03kgradgQzT6IicoPhLPlUvFgRl-tGbA,869 +django/contrib/sessions/locale/id/LC_MESSAGES/django.mo,sha256=mOaIF0NGOO0-dt-nhHL-i3cfvt9-JKTbyUkFWPqDS9Y,705 +django/contrib/sessions/locale/id/LC_MESSAGES/django.po,sha256=EA6AJno3CaFOO-dEU9VQ_GEI-RAXS0v0uFqn1RJGjEs,914 +django/contrib/sessions/locale/io/LC_MESSAGES/django.mo,sha256=_rqAY6reegqmxmWc-pW8_kDaG9zflZuD-PGOVFsjRHo,683 +django/contrib/sessions/locale/io/LC_MESSAGES/django.po,sha256=tbKMxGuB6mh_m0ex9rO9KkTy6qyuRW2ERrQsGwmPiaw,840 +django/contrib/sessions/locale/is/LC_MESSAGES/django.mo,sha256=3QeMl-MCnBie9Sc_aQ1I7BrBhkbuArpoSJP95UEs4lg,706 +django/contrib/sessions/locale/is/LC_MESSAGES/django.po,sha256=LADIFJv8L5vgDJxiQUmKPSN64zzzrIKImh8wpLBEVWQ,853 +django/contrib/sessions/locale/it/LC_MESSAGES/django.mo,sha256=qTY3O-0FbbpZ5-BR5xOJWP0rlnIkBZf-oSawW_YJWlk,726 +django/contrib/sessions/locale/it/LC_MESSAGES/django.po,sha256=hEv0iTGLuUvEBk-lF-w7a9P3ifC0-eiodNtuSc7cXhg,869 +django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo,sha256=hbv9FzWzXRIGRh_Kf_FLQB34xfmPU_9RQKn9u1kJqGU,757 +django/contrib/sessions/locale/ja/LC_MESSAGES/django.po,sha256=ppGx5ekOWGgDF3vzyrWsqnFUZ-sVZZhiOhvAzl_8v54,920 +django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo,sha256=VZ-ysrDbea_-tMV-1xtlTeW62IAy2RWR94V3Y1iSh4U,803 +django/contrib/sessions/locale/ka/LC_MESSAGES/django.po,sha256=hqiWUiATlrc7qISF7ndlelIrFwc61kzhKje9l-DY6V4,955 +django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo,sha256=W_yE0NDPJrVznA2Qb89VuprJNwyxSg59ovvjkQe6mAs,743 +django/contrib/sessions/locale/kab/LC_MESSAGES/django.po,sha256=FJeEuv4P3NT_PpWHEUsQVSWXu65nYkJ6Z2AlbSKb0ZA,821 +django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo,sha256=FROGz_MuIhsIU5_-EYV38cHnRZrc3-OxxkBeK0ax9Rk,810 +django/contrib/sessions/locale/kk/LC_MESSAGES/django.po,sha256=P-oHO3Oi3V_RjWHjEAHdTrDfTwKP2xh3yJh7BlXL1VQ,1029 +django/contrib/sessions/locale/km/LC_MESSAGES/django.mo,sha256=VOuKsIG2DEeCA5JdheuMIeJlpmAhKrI6lD4KWYqIIPk,929 +django/contrib/sessions/locale/km/LC_MESSAGES/django.po,sha256=09i6Nd_rUK7UqFpJ70LMXTR6xS0NuGETRLe0CopMVBk,1073 +django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo,sha256=TMZ71RqNR6zI20BeozyLa9cjYrWlvfIajGDfpnHd3pQ,810 +django/contrib/sessions/locale/kn/LC_MESSAGES/django.po,sha256=whdM8P74jkAAHvjgJN8Q77dYd9sIsf_135ID8KBu-a8,990 +django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo,sha256=EUyVQYGtiFJg01mP30a0iOqBYHvpzHAcGTZM28Ubs5Q,700 +django/contrib/sessions/locale/ko/LC_MESSAGES/django.po,sha256=PjntvSzRz_Aekj9VFhGsP5yO6rAsxTMzwFj58JqToIU,855 +django/contrib/sessions/locale/ky/LC_MESSAGES/django.mo,sha256=ME7YUgKOYQz9FF_IdrqHImieEONDrkcn4T3HxTZKSV0,742 +django/contrib/sessions/locale/ky/LC_MESSAGES/django.po,sha256=JZHTs9wYmlWzilRMyp-jZWFSzGxWtPiQefPmLL9yhtM,915 +django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/sessions/locale/lb/LC_MESSAGES/django.po,sha256=3igeAnQjDg6D7ItBkQQhyBoFJOZlBxT7NoZiExwD-Fo,749 +django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo,sha256=L9w8-qxlDlCqR_2P0PZegfhok_I61n0mJ1koJxzufy4,786 +django/contrib/sessions/locale/lt/LC_MESSAGES/django.po,sha256=dEefLGtg5flFr_v4vHS5HhK1kxx9WYWTw98cvEn132M,1023 +django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo,sha256=exEzDUNwNS0GLsUkKPu_SfqBxU7T6VRA_T2schIQZ88,753 +django/contrib/sessions/locale/lv/LC_MESSAGES/django.po,sha256=fBgQEbsGg1ECVm1PFDrS2sfKs2eqmsqrSYzx9ELotNQ,909 +django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo,sha256=4oTWp8-qzUQBiqG32hNieABgT3O17q2C4iEhcFtAxLA,816 +django/contrib/sessions/locale/mk/LC_MESSAGES/django.po,sha256=afApb5YRhPXUWR8yF_TTym73u0ov7lWiwRda1-uNiLY,988 +django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo,sha256=tff5TsHILSV1kAAB3bzHQZDB9fgMglZJTofzCunGBzc,854 +django/contrib/sessions/locale/ml/LC_MESSAGES/django.po,sha256=eRkeupt42kUey_9vJmlH8USshnXPZ8M7aYHq88u-5iY,1016 +django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo,sha256=CcCH2ggVYrD29Q11ZMthcscBno2ePkQDbZfoYquTRPM,784 +django/contrib/sessions/locale/mn/LC_MESSAGES/django.po,sha256=nvcjbJzXiDvWFXrM5CxgOQIq8XucsZEUVdYkY8LnCRE,992 +django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/sessions/locale/mr/LC_MESSAGES/django.po,sha256=FQRdZ-qIDuvTCrwbnWfxoxNi8rywLSebcNbxGvr-hb0,743 +django/contrib/sessions/locale/ms/LC_MESSAGES/django.mo,sha256=rFi4D_ZURYUPjs5AqJ66bW70yL7AekAKWnrZRBvGPiE,649 +django/contrib/sessions/locale/ms/LC_MESSAGES/django.po,sha256=nZuJ_D0JZUzmGensLa7tSgzbBo05qgQcuHmte2oU6WQ,786 +django/contrib/sessions/locale/my/LC_MESSAGES/django.mo,sha256=8zzzyfJYok969YuAwDUaa6YhxaSi3wcXy3HRNXDb_70,872 +django/contrib/sessions/locale/my/LC_MESSAGES/django.po,sha256=mfs0zRBI0tugyyEfXBZzZ_FMIohydq6EYPZGra678pw,997 +django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo,sha256=hfJ1NCFgcAAtUvNEpaZ9b31PyidHxDGicifUWANIbM8,717 +django/contrib/sessions/locale/nb/LC_MESSAGES/django.po,sha256=yXr6oYuiu01oELdQKuztQFWz8x5C2zS5OzEfU9MHJsU,908 +django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo,sha256=slFgMrqGVtLRHdGorLGPpB09SM92_WnbnRR0rlpNlPQ,802 +django/contrib/sessions/locale/ne/LC_MESSAGES/django.po,sha256=1vyoiGnnaB8f9SFz8PGfzpw6V_NoL78DQwjjnB6fS98,978 +django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo,sha256=84BTlTyxa409moKbQMFyJisI65w22p09qjJHBAmQe-g,692 +django/contrib/sessions/locale/nl/LC_MESSAGES/django.po,sha256=smRr-QPGm6h6hdXxghggWES8b2NnL7yDQ07coUypa8g,909 +django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo,sha256=cytH72J3yS1PURcgyrD8R2PV5d3SbPE73IAqOMBPPVg,667 +django/contrib/sessions/locale/nn/LC_MESSAGES/django.po,sha256=y9l60yy_W3qjxWzxgJg5VgEH9KAIHIQb5hv7mgnep9w,851 +django/contrib/sessions/locale/os/LC_MESSAGES/django.mo,sha256=xVux1Ag45Jo9HQBbkrRzcWrNjqP09nMQl16jIh0YVlo,732 +django/contrib/sessions/locale/os/LC_MESSAGES/django.po,sha256=1hG5Vsz2a2yW05_Z9cTNrBKtK9VRPZuQdx4KJ_0n98o,892 +django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo,sha256=qEx4r_ONwXK1-qYD5uxxXEQPqK5I6rf38QZoUSm7UVA,771 +django/contrib/sessions/locale/pa/LC_MESSAGES/django.po,sha256=M7fmVGP8DtZGEuTV3iJhuWWqILVUTDZvUey_mrP4_fM,918 +django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo,sha256=F9CQb7gQ1ltP6B82JNKu8IAsTdHK5TNke0rtDIgNz3c,828 +django/contrib/sessions/locale/pl/LC_MESSAGES/django.po,sha256=C_MJBB-vwTZbx-t4-mzun-RxHhdOVv04b6xrWdnTv8E,1084 +django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo,sha256=dlJF7hF4GjLmQPdAJhtf-FCKX26XsOmZlChOcxxIqPk,738 +django/contrib/sessions/locale/pt/LC_MESSAGES/django.po,sha256=cOycrw3HCHjSYBadpalyrg5LdRTlqZCTyMh93GOQ8O0,896 +django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo,sha256=XHNF5D8oXIia3e3LYwxd46a2JOgDc_ykvc8yuo21fT0,757 +django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po,sha256=K_zxKaUKngWPFpvHgXOcymJEsiONSw-OrVrroRXmUUk,924 +django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo,sha256=WR9I9Gum_pq7Qg2Gzhf-zAv43OwR_uDtsbhtx4Ta5gE,776 +django/contrib/sessions/locale/ro/LC_MESSAGES/django.po,sha256=fEgVxL_0Llnjspu9EsXBf8AVL0DGdfF7NgV88G7WN1E,987 +django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo,sha256=n-8vXR5spEbdfyeWOYWC_6kBbAppNoRrWYgqKFY6gJA,913 +django/contrib/sessions/locale/ru/LC_MESSAGES/django.po,sha256=sNqNGdoof6eXzFlh4YIp1O54MdDOAFDjD3GvAFsNP8k,1101 +django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo,sha256=Yntm624Wt410RwuNPU1c-WwQoyrRrBs69VlKMlNUHeQ,766 +django/contrib/sessions/locale/sk/LC_MESSAGES/django.po,sha256=wt7BJk6RpFogJ2Wwa9Mh0mJi9YMpNYKTUSDuDuv1Ong,975 +django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo,sha256=EE6mB8BiYRyAxK6qzurRWcaYVs96FO_4rERYQdtIt3k,770 +django/contrib/sessions/locale/sl/LC_MESSAGES/django.po,sha256=KTjBWyvaNCHbpV9K6vbnavwxxXqf2DlIqVPv7MVFcO8,928 +django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo,sha256=eRaTy3WOC76EYLtMSD4xtJj2h8eE4W-TS4VvCVxI5bw,683 +django/contrib/sessions/locale/sq/LC_MESSAGES/django.po,sha256=9pzp7834LQKafe5fJzC4OKsAd6XfgtEQl6K6hVLaBQM,844 +django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo,sha256=ZDBOYmWIoSyDeT0nYIIFeMtW5jwpr257CbdTZlkVeRQ,855 +django/contrib/sessions/locale/sr/LC_MESSAGES/django.po,sha256=OXQOYeac0ghuzLrwaErJGr1FczuORTu2yroFX5hvRnk,1027 +django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=f3x9f9hTOsJltghjzJMdd8ueDwzxJex6zTXsU-_Hf_Y,757 +django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po,sha256=HKjo7hjSAvgrIvlI0SkgF3zxz8TtKWyBT51UGNhDwek,946 +django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo,sha256=SGbr0K_5iAMA22MfseAldMDgLSEBrI56pCtyV8tMAPc,707 +django/contrib/sessions/locale/sv/LC_MESSAGES/django.po,sha256=vraY3915wBYGeYu9Ro0-TlBeLWqGZP1fbckLv8y47Ys,853 +django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo,sha256=Edhqp8yuBnrGtJqPO7jxobeXN4uU5wKSLrOsFO1F23k,743 +django/contrib/sessions/locale/sw/LC_MESSAGES/django.po,sha256=iY4rN4T-AA2FBQA7DiWWFvrclqKiDYQefqwwVw61-f8,858 +django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo,sha256=qLIThhFQbJKc1_UVr7wVIm1rJfK2rO5m84BCB_oKq7s,801 +django/contrib/sessions/locale/ta/LC_MESSAGES/django.po,sha256=bYqtYf9XgP9IKKFJXh0u64JhRhDvPPUliI1J-NeRpKE,945 +django/contrib/sessions/locale/te/LC_MESSAGES/django.mo,sha256=kteZeivEckt4AmAeKgmgouMQo1qqSQrI8M42B16gMnQ,786 +django/contrib/sessions/locale/te/LC_MESSAGES/django.po,sha256=dQgiNS52RHrL6bV9CEO7Jk9lk3YUQrUBDCg_bP2OSZc,980 +django/contrib/sessions/locale/tg/LC_MESSAGES/django.mo,sha256=N6AiKfV47QTlO5Z_r4SQZXVLtouu-NVSwWkePgD17Tc,747 +django/contrib/sessions/locale/tg/LC_MESSAGES/django.po,sha256=wvvDNu060yqlTxy3swM0x3v6QpvCB9DkfNm0Q-kb9Xk,910 +django/contrib/sessions/locale/th/LC_MESSAGES/django.mo,sha256=D41vbkoYMdYPj3587p-c5yytLVi9pE5xvRZEYhZrxPs,814 +django/contrib/sessions/locale/th/LC_MESSAGES/django.po,sha256=43704TUv4ysKhL8T5MowZwlyv1JZrPyVGrpdIyb3r40,988 +django/contrib/sessions/locale/tk/LC_MESSAGES/django.mo,sha256=pT_hpKCwFT60GUXzD_4z8JOhmh1HRnkZj-QSouVEgUA,699 +django/contrib/sessions/locale/tk/LC_MESSAGES/django.po,sha256=trqXxfyIbh4V4szol0pXETmEWRxAAKywPZ9EzVMVE-I,865 +django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo,sha256=STDnYOeO1d9nSCVf7pSkMq8R7z1aeqq-xAuIYjsofuE,685 +django/contrib/sessions/locale/tr/LC_MESSAGES/django.po,sha256=XYKo0_P5xitYehvjMzEw2MTp_Nza-cIXEECV3dA6BmY,863 +django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo,sha256=Q-FGu_ljTsxXO_EWu7zCzGwoqFXkeoTzWSlvx85VLGc,806 +django/contrib/sessions/locale/tt/LC_MESSAGES/django.po,sha256=UC85dFs_1836noZTuZEzPqAjQMFfSvj7oGmEWOGcfCA,962 +django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/sessions/locale/udm/LC_MESSAGES/django.po,sha256=CPml2Fn9Ax_qO5brCFDLPBoTiNdvsvJb1btQ0COwUfY,737 +django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo,sha256=jzNrLuFghQMCHNRQ0ihnKMCicgear0yWiTOLnvdPszw,841 +django/contrib/sessions/locale/uk/LC_MESSAGES/django.po,sha256=4K2geuGjRpJCtNfGPMhYWZlGxUy5xzIoDKA2jL2iGos,1171 +django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo,sha256=FkGIiHegr8HR8zjVyJ9TTW1T9WYtAL5Mg77nRKnKqWk,729 +django/contrib/sessions/locale/ur/LC_MESSAGES/django.po,sha256=qR4QEBTP6CH09XFCzsPSPg2Dv0LqzbRV_I67HO2OUwk,879 +django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo,sha256=asPu0RhMB_Ui1li-OTVL4qIXnM9XpjsYyx5yJldDYBY,744 +django/contrib/sessions/locale/uz/LC_MESSAGES/django.po,sha256=KsHuLgGJt-KDH0h6ND7JLP2dDJAdLVHSlau4DkkfqA8,880 +django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo,sha256=KriTpT-Hgr10DMnY5Bmbd4isxmSFLmav8vg2tuL2Bb8,679 +django/contrib/sessions/locale/vi/LC_MESSAGES/django.po,sha256=M7S46Q0Q961ykz_5FCAN8SXQ54w8tp4rZeZpy6bPtXs,909 +django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=zsbhIMocgB8Yn1XEBxbIIbBh8tLifvvYNlhe5U61ch8,722 +django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po,sha256=tPshgXjEv6pME4N082ztamJhd5whHB2_IV_egdP-LlQ,889 +django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=WZzfpFKZ41Pu8Q9SuhGu3hXwp4eiq8Dt8vdiQfxvF9M,733 +django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.po,sha256=6IRDQu6-PAYh6SyEIcKdhuR172lX0buY8qqsU0QXlYU,898 +django/contrib/sessions/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sessions/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-310.pyc,, +django/contrib/sessions/management/commands/clearsessions.py,sha256=pAiO5o7zgButVlYAV93bPnmiwzWP7V5N7-xPtxSkjJg,661 +django/contrib/sessions/middleware.py,sha256=ghX32L-B6lQokp8lH6_f0AvQ_9YhV4RJ3g9YkhZt23M,3496 +django/contrib/sessions/migrations/0001_initial.py,sha256=4tczVgNJxmM5aEhrDw_EfqOBePzsxuJmlchwlMFHWrU,1149 +django/contrib/sessions/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/sessions/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sessions/models.py,sha256=BguwuQSDzpeTNXhteYRAcspg1rop431tjFeZUVWZNYc,1250 +django/contrib/sessions/serializers.py,sha256=IYLeqZgf-JAZkPwl0j4x3VzbQKispJBk6KFASfnNTU8,228 +django/contrib/sitemaps/__init__.py,sha256=9GZlar98YUNm7umG-4VCm1MtCy152z19VhZ-l9QwF_U,8435 +django/contrib/sitemaps/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sitemaps/__pycache__/apps.cpython-310.pyc,, +django/contrib/sitemaps/__pycache__/views.cpython-310.pyc,, +django/contrib/sitemaps/apps.py,sha256=xYE-mAs37nL8ZAnv052LhUKVUwGYKB3xyPy4t8pwOpw,249 +django/contrib/sitemaps/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sitemaps/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sitemaps/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sitemaps/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sitemaps/management/commands/__pycache__/ping_google.cpython-310.pyc,, +django/contrib/sitemaps/management/commands/ping_google.py,sha256=cU6bAGhDARD7ZM2R9cUZufEPiB9ZrM7Nc3EbghQJI5Y,558 +django/contrib/sitemaps/templates/sitemap.xml,sha256=L092SHTtwtmNJ_Lj_jLrzHhfI0-OKKIw5fpyOfr4qRs,683 +django/contrib/sitemaps/templates/sitemap_index.xml,sha256=VqDmRlWMx9kC6taiBoi1h9JVspV54ou3nFjE8Nfofl8,209 +django/contrib/sitemaps/views.py,sha256=VS0CcdITHiQ_8KuyyZhP7cnbrafPM_1HcNUMLVqOyfI,3690 +django/contrib/sites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sites/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sites/__pycache__/admin.cpython-310.pyc,, +django/contrib/sites/__pycache__/apps.cpython-310.pyc,, +django/contrib/sites/__pycache__/checks.cpython-310.pyc,, +django/contrib/sites/__pycache__/management.cpython-310.pyc,, +django/contrib/sites/__pycache__/managers.cpython-310.pyc,, +django/contrib/sites/__pycache__/middleware.cpython-310.pyc,, +django/contrib/sites/__pycache__/models.cpython-310.pyc,, +django/contrib/sites/__pycache__/requests.cpython-310.pyc,, +django/contrib/sites/__pycache__/shortcuts.cpython-310.pyc,, +django/contrib/sites/admin.py,sha256=IWvGDQUTDPEUsd-uuxfHxJq4syGtddNKUdkP0nmVUMA,214 +django/contrib/sites/apps.py,sha256=uBLHUyQoSuo1Q7NwLTwlvsTuRU1MXwj4t6lRUnIBdwk,562 +django/contrib/sites/checks.py,sha256=SsFycVVw6JcbMNF1tNgCen9dix-UGrMTWz8Gbb80adQ,340 +django/contrib/sites/locale/af/LC_MESSAGES/django.mo,sha256=A10bZFMs-wUetVfF5UrFwmuiKnN4ZnlrR4Rx8U4Ut1A,786 +django/contrib/sites/locale/af/LC_MESSAGES/django.po,sha256=O0-ZRvmXvV_34kONuqakuXV5OmYbQ569K1Puj3qQNac,907 +django/contrib/sites/locale/ar/LC_MESSAGES/django.mo,sha256=kLoytp2jvhWn6p1c8kNVua2sYAMnrpS4xnbluHD22Vs,947 +django/contrib/sites/locale/ar/LC_MESSAGES/django.po,sha256=HYA3pA29GktzXBP-soUEn9VP2vkZuhVIXVA8TNPCHCs,1135 +django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.mo,sha256=-ltwY57Th6LNqU3bgOPPP7qWtII5c6rj8Dv8eY7PZ84,918 +django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.po,sha256=KRTjZ2dFRWVPmE_hC5Hq8eDv3GQs3yQKCgV5ISFmEKk,1079 +django/contrib/sites/locale/ast/LC_MESSAGES/django.mo,sha256=eEvaeiGnZFBPGzKLlRz4M9AHemgJVAb-yNpbpxRqtd0,774 +django/contrib/sites/locale/ast/LC_MESSAGES/django.po,sha256=huBohKzLpdaJRFMFXXSDhDCUOqVqyWXfxb8_lLOkUd0,915 +django/contrib/sites/locale/az/LC_MESSAGES/django.mo,sha256=CjAGI4qGoXN95q4LpCLXLKvaNB33Ocf5SfXdurFBkas,773 +django/contrib/sites/locale/az/LC_MESSAGES/django.po,sha256=E84kNPFhgHmIfYT0uzCnTPGwPkAqKzqwFvJB7pETbVo,933 +django/contrib/sites/locale/be/LC_MESSAGES/django.mo,sha256=HGh78mI50ZldBtQ8jId26SI-lSHv4ZLcveRN2J8VzH8,983 +django/contrib/sites/locale/be/LC_MESSAGES/django.po,sha256=W5FhVJKcmd3WHl2Lpd5NJUsc7_sE_1Pipk3CVPoGPa4,1152 +django/contrib/sites/locale/bg/LC_MESSAGES/django.mo,sha256=a2R52umIQIhnzFaFYSRhQ6nBlywE8RGMj2FUOFmyb0A,904 +django/contrib/sites/locale/bg/LC_MESSAGES/django.po,sha256=awB8RMS-qByhNB6eH2f0Oyxb3SH8waLhrZ--rokGfaI,1118 +django/contrib/sites/locale/bn/LC_MESSAGES/django.mo,sha256=cI3a9_L-OC7gtdyRNaGX7A5w0Za0M4ERnYB7rSNkuRU,925 +django/contrib/sites/locale/bn/LC_MESSAGES/django.po,sha256=8ZxYF16bgtTZSZRZFok6IJxUV02vIztoVx2qXqwO8NM,1090 +django/contrib/sites/locale/br/LC_MESSAGES/django.mo,sha256=rI_dIznbwnadZbxOPtQxZ1pGYePNwcNNXt05iiPkchU,1107 +django/contrib/sites/locale/br/LC_MESSAGES/django.po,sha256=7Ein5Xw73DNGGtdd595Bx6ixfSD-dBXZNBUU44pSLuQ,1281 +django/contrib/sites/locale/bs/LC_MESSAGES/django.mo,sha256=bDeqQNme586LnQRQdvOWaLGZssjOoECef3vMq_OCXno,692 +django/contrib/sites/locale/bs/LC_MESSAGES/django.po,sha256=xRTWInDNiLxikjwsjgW_pYjhy24zOro90-909ns9fig,923 +django/contrib/sites/locale/ca/LC_MESSAGES/django.mo,sha256=lEUuQEpgDY3bVWzRONrPzYlojRoNduT16_oYDkkbdfk,791 +django/contrib/sites/locale/ca/LC_MESSAGES/django.po,sha256=aORAoVn69iG1ynmEfnkBzBO-UZOzzbkPVOU-ZvfMtZg,996 +django/contrib/sites/locale/cs/LC_MESSAGES/django.mo,sha256=mnXnpU7sLDTJ3OrIUTnGarPYsupNIUPV4ex_BPWU8fk,827 +django/contrib/sites/locale/cs/LC_MESSAGES/django.po,sha256=ONzFlwzmt7p5jdp6111qQkkevckRrd7GNS0lkDPKu-4,1035 +django/contrib/sites/locale/cy/LC_MESSAGES/django.mo,sha256=70pOie0K__hkmM9oBUaQfVwHjK8Cl48E26kRQL2mtew,835 +django/contrib/sites/locale/cy/LC_MESSAGES/django.po,sha256=FAZrVc72x-4R1A-1qYOBwADoXngC_F6FO8nRjr5-Z6g,1013 +django/contrib/sites/locale/da/LC_MESSAGES/django.mo,sha256=FTOyV1DIH9sMldyjgPw98d2HCotoO4zJ_KY_C9DCB7Y,753 +django/contrib/sites/locale/da/LC_MESSAGES/django.po,sha256=Po1Z6u52CFCyz9hLfK009pMbZzZgHrBse0ViX8wCYm8,957 +django/contrib/sites/locale/de/LC_MESSAGES/django.mo,sha256=5Q6X0_bDQ1ZRpkTy7UpPNzrhmQsB9Q0P1agB7koRyzs,792 +django/contrib/sites/locale/de/LC_MESSAGES/django.po,sha256=aD0wBinqtDUPvBbwtHrLEhFdoVRx1nOh17cJFuWhN3U,980 +django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo,sha256=pPpWYsYp81MTrqCsGF0QnGktZNIll70bdBwSkuVE8go,868 +django/contrib/sites/locale/dsb/LC_MESSAGES/django.po,sha256=IA3G8AKJls20gzfxnrfPzivMNpL8A0zBQBg7OyzrP6g,992 +django/contrib/sites/locale/el/LC_MESSAGES/django.mo,sha256=G9o1zLGysUePGzZRicQ2aIIrc2UXMLTQmdpbrUMfWBU,878 +django/contrib/sites/locale/el/LC_MESSAGES/django.po,sha256=RBi_D-_znYuV6LXfTlSOf1Mvuyl96fIyEoiZ-lgeyWs,1133 +django/contrib/sites/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/sites/locale/en/LC_MESSAGES/django.po,sha256=tSjfrNZ_FqLHsXjm5NuTyo5-JpdlPLsPZjFqF2APhy8,817 +django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo,sha256=G--2j_CR99JjRgVIX2Y_5pDfO7IgIkvK4kYHZtGzpxU,753 +django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po,sha256=Giw634r94MJT1Q3qgqM7gZakQCasRM9Dm7MDkb9JOc8,913 +django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo,sha256=FbSh7msJdrHsXr0EtDMuODFzSANG_HJ3iBlW8ePpqFs,639 +django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po,sha256=Ib-DIuTWlrN3kg99kLCuqWJVtt1NWaFD4UbDFK6d4KY,862 +django/contrib/sites/locale/eo/LC_MESSAGES/django.mo,sha256=N4KkH12OHxic3pp1okeBhpfDx8XxxpULk3UC219vjWU,792 +django/contrib/sites/locale/eo/LC_MESSAGES/django.po,sha256=ymXSJaFJWGBO903ObqR-ows-p4T3KyUplc_p_3r1uk8,1043 +django/contrib/sites/locale/es/LC_MESSAGES/django.mo,sha256=qLN1uoCdslxdYWgdjgSBi7szllP-mQZtHbuZnNOthsQ,804 +django/contrib/sites/locale/es/LC_MESSAGES/django.po,sha256=QClia2zY39269VSQzkQsLwwukthN6u2JBsjbLNxA1VQ,1066 +django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo,sha256=_O4rVk7IM2BBlZvjDP2SvTOo8WWqthQi5exQzt027-s,776 +django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po,sha256=RwyNylXbyxdSXn6qRDXd99-GaEPlmr6TicHTUW0boaQ,969 +django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo,sha256=a4Xje2M26wyIx6Wlg6puHo_OXjiDEy7b0FquT9gbThA,825 +django/contrib/sites/locale/es_CO/LC_MESSAGES/django.po,sha256=9bnRhVD099JzkheO80l65dufjuawsj9aSFgFu5A-lnM,949 +django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo,sha256=AtGta5jBL9XNBvfSpsCcnDtDhvcb89ALl4hNjSPxibM,809 +django/contrib/sites/locale/es_MX/LC_MESSAGES/django.po,sha256=TnkpQp-7swH-x9cytUJe-QJRd2n_pYMVo0ltDw9Pu8o,991 +django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po,sha256=8PWXy2L1l67wDIi98Q45j7OpVITr0Lt4zwitAnB-d_o,791 +django/contrib/sites/locale/et/LC_MESSAGES/django.mo,sha256=I2E-49UQsG-F26OeAfnKlfUdA3YCkUSV8ffA-GMSkE0,788 +django/contrib/sites/locale/et/LC_MESSAGES/django.po,sha256=mEfD6EyQ15PPivb5FTlkabt3Lo_XGtomI9XzHrrh34Y,992 +django/contrib/sites/locale/eu/LC_MESSAGES/django.mo,sha256=1HTAFI3DvTAflLJsN7NVtSd4XOTlfoeLGFyYCOX69Ec,807 +django/contrib/sites/locale/eu/LC_MESSAGES/django.po,sha256=NWxdE5-mF6Ak4nPRpCFEgAMIsVDe9YBEZl81v9kEuX8,1023 +django/contrib/sites/locale/fa/LC_MESSAGES/django.mo,sha256=odtsOpZ6noNqwDb18HDc2e6nz3NMsa-wrTN-9dk7d9w,872 +django/contrib/sites/locale/fa/LC_MESSAGES/django.po,sha256=-DirRvcTqcpIy90QAUiCSoNkCDRifqpWSzLriJ4cwQU,1094 +django/contrib/sites/locale/fi/LC_MESSAGES/django.mo,sha256=I5DUeLk1ChUC32q5uzriABCLLJpJKNbEK4BfqylPQzg,786 +django/contrib/sites/locale/fi/LC_MESSAGES/django.po,sha256=LH2sFIKM3YHPoz9zIu10z1DFv1svXphBdOhXNy4a17s,929 +django/contrib/sites/locale/fr/LC_MESSAGES/django.mo,sha256=W7Ne5HqgnRcl42njzbUaDSY059jdhwvr0tgZzecVWD8,756 +django/contrib/sites/locale/fr/LC_MESSAGES/django.po,sha256=u24rHDJ47AoBgcmBwI1tIescAgbjFxov6y906H_uhK0,999 +django/contrib/sites/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/sites/locale/fy/LC_MESSAGES/django.po,sha256=Yh6Lw0QI2Me0zCtlyXraFLjERKqklB6-IJLDTjH_jTs,781 +django/contrib/sites/locale/ga/LC_MESSAGES/django.mo,sha256=g5popLirHXWn6ZWJHESQaG5MmKWZL_JNI_5Vgn5FTqU,683 +django/contrib/sites/locale/ga/LC_MESSAGES/django.po,sha256=34hj3ELt7GQ7CaHL246uBDmvsVUaaN5kTrzt8j7eETM,962 +django/contrib/sites/locale/gd/LC_MESSAGES/django.mo,sha256=df4XIGGD6FIyMUXsb-SoSqNfBFAsRXf4qYtolh_C964,858 +django/contrib/sites/locale/gd/LC_MESSAGES/django.po,sha256=NPKp7A5-y-MR7r8r4WqtcVQJEHCIOP5mLTd0cIfUsug,957 +django/contrib/sites/locale/gl/LC_MESSAGES/django.mo,sha256=QUJdJV71VT-4iVQ5mUAeyszTVhD2LlmmPQv0WpPWttU,742 +django/contrib/sites/locale/gl/LC_MESSAGES/django.po,sha256=cLcejsFyoFk0fRX9fAcl9owHoxiD593QZZeZTfObBVw,940 +django/contrib/sites/locale/he/LC_MESSAGES/django.mo,sha256=L3bganfG4gHqp2WXGh4rfWmmbaIxHaGc7-ypAqjSL_E,820 +django/contrib/sites/locale/he/LC_MESSAGES/django.po,sha256=iO3OZwz2aiuAzugkKp5Hxonwdg3kKjBurxR685J2ZMk,1082 +django/contrib/sites/locale/hi/LC_MESSAGES/django.mo,sha256=J4oIS1vJnCvdCCUD4tlTUVyTe4Xn0gKcWedfhH4C0t0,665 +django/contrib/sites/locale/hi/LC_MESSAGES/django.po,sha256=INBrm37jL3okBHuzX8MSN1vMptj77a-4kwQkAyt8w_8,890 +django/contrib/sites/locale/hr/LC_MESSAGES/django.mo,sha256=KjDUhEaOuYSMexcURu2UgfkatN2rrUcAbCUbcpVSInk,876 +django/contrib/sites/locale/hr/LC_MESSAGES/django.po,sha256=-nFMFkVuDoKYDFV_zdNULOqQlnqtiCG57aakN5hqlmg,1055 +django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo,sha256=RyHVb7u9aRn5BXmWzR1gApbZlOioPDJ59ufR1Oo3e8Y,863 +django/contrib/sites/locale/hsb/LC_MESSAGES/django.po,sha256=Aq54y5Gb14bIt28oDDrFltnSOk31Z2YalwaJMDMXfWc,987 +django/contrib/sites/locale/hu/LC_MESSAGES/django.mo,sha256=P--LN84U2BeZAvRVR-OiWl4R02cTTBi2o8XR2yHIwIU,796 +django/contrib/sites/locale/hu/LC_MESSAGES/django.po,sha256=b0VhyFdNaZZR5MH1vFsLL69FmICN8Dz-sTRk0PdK49E,953 +django/contrib/sites/locale/hy/LC_MESSAGES/django.mo,sha256=Hs9XwRHRkHicLWt_NvWvr7nMocmY-Kc8XphhVSAMQRc,906 +django/contrib/sites/locale/hy/LC_MESSAGES/django.po,sha256=MU4hXXGfjXKfYcjxDYzFfsEUIelz5ZzyQLkeSrUQKa0,1049 +django/contrib/sites/locale/ia/LC_MESSAGES/django.mo,sha256=gRMs-W5EiY26gqzwnDXEMbeb1vs0bYZ2DC2a9VCciew,809 +django/contrib/sites/locale/ia/LC_MESSAGES/django.po,sha256=HXZzn9ACIqfR2YoyvpK2FjZ7QuEq_RVZ1kSC4nxMgeg,934 +django/contrib/sites/locale/id/LC_MESSAGES/django.mo,sha256=__2E_2TmVUcbf1ygxtS1lHvkhv8L0mdTAtJpBsdH24Y,791 +django/contrib/sites/locale/id/LC_MESSAGES/django.po,sha256=e5teAHiMjLR8RDlg8q99qtW-K81ltcIiBIdb1MZw2sE,1000 +django/contrib/sites/locale/io/LC_MESSAGES/django.mo,sha256=W-NP0b-zR1oWUZnHZ6fPu5AC2Q6o7nUNoxssgeguUBo,760 +django/contrib/sites/locale/io/LC_MESSAGES/django.po,sha256=G4GUUz3rxoBjWTs-j5RFCvv52AEHiwrCBwom5hYeBSE,914 +django/contrib/sites/locale/is/LC_MESSAGES/django.mo,sha256=lkJgTzDjh5PNfIJpOS2DxKmwVUs9Sl5XwFHv4YdCB30,812 +django/contrib/sites/locale/is/LC_MESSAGES/django.po,sha256=1DVgAcHSZVyDd5xn483oqICIG4ooyZY8ko7A3aDogKM,976 +django/contrib/sites/locale/it/LC_MESSAGES/django.mo,sha256=6NQjjtDMudnAgnDCkemOXinzX0J-eAE5gSq1F8kjusY,795 +django/contrib/sites/locale/it/LC_MESSAGES/django.po,sha256=zxavlLMmp1t1rCDsgrw12kVgxiK5EyR_mOalSu8-ws8,984 +django/contrib/sites/locale/ja/LC_MESSAGES/django.mo,sha256=RNuCS6wv8uK5TmXkSH_7SjsbUFkf24spZfTsvfoTKro,814 +django/contrib/sites/locale/ja/LC_MESSAGES/django.po,sha256=e-cj92VOVc5ycIY6NwyFh5bO7Q9q5vp5CG4dOzd_eWQ,982 +django/contrib/sites/locale/ka/LC_MESSAGES/django.mo,sha256=m8GTqr9j0ijn0YJhvnsYwlk5oYcASKbHg_5hLqZ91TI,993 +django/contrib/sites/locale/ka/LC_MESSAGES/django.po,sha256=1upohcHrQH9T34b6lW09MTtFkk5WswdYOLs2vMAJIuE,1160 +django/contrib/sites/locale/kab/LC_MESSAGES/django.mo,sha256=Utdj5gH5YPeaYMjeMzF-vjqYvYTCipre2qCBkEJSc-Y,808 +django/contrib/sites/locale/kab/LC_MESSAGES/django.po,sha256=d78Z-YanYZkyP5tpasj8oAa5RimVEmce6dlq5vDSscA,886 +django/contrib/sites/locale/kk/LC_MESSAGES/django.mo,sha256=T2dTZ83vBRfQb2dRaKOrhvO00BHQu_2bu0O0k7RsvGA,895 +django/contrib/sites/locale/kk/LC_MESSAGES/django.po,sha256=HvdSFqsumyNurDJ6NKVLjtDdSIg0KZN2v29dM748GtU,1062 +django/contrib/sites/locale/km/LC_MESSAGES/django.mo,sha256=Q7pn5E4qN957j20-iCHgrfI-p8sm3Tc8O2DWeuH0By8,701 +django/contrib/sites/locale/km/LC_MESSAGES/django.po,sha256=TOs76vlCMYOZrdHgXPWZhQH1kTBQTpzsDJ8N4kbJQ7E,926 +django/contrib/sites/locale/kn/LC_MESSAGES/django.mo,sha256=_jl_4_39oe940UMyb15NljGOd45kkCeVNpJy6JvGWTE,673 +django/contrib/sites/locale/kn/LC_MESSAGES/django.po,sha256=cMPXF2DeiQuErhyFMe4i7swxMoqoz1sqtBEXf4Ghx1c,921 +django/contrib/sites/locale/ko/LC_MESSAGES/django.mo,sha256=wlfoWG-vmMSCipUJVVC0Y_W7QbGNNE-oEnVwl_6-AmY,807 +django/contrib/sites/locale/ko/LC_MESSAGES/django.po,sha256=TENAk9obGUxFwMnJQj_V9sZxEKJj4DyWMuGpx3Ft_pM,1049 +django/contrib/sites/locale/ky/LC_MESSAGES/django.mo,sha256=IYxp8jG5iyN81h7YJqOiSQdOH7DnwOiIvelKZfzP6ZA,811 +django/contrib/sites/locale/ky/LC_MESSAGES/django.po,sha256=rxPdgQoBtGQSi5diOy3MXyoM4ffpwdWCc4WE3pjIHEI,927 +django/contrib/sites/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/sites/locale/lb/LC_MESSAGES/django.po,sha256=1yRdK9Zyh7kcWG7wUexuF9-zxEaKLS2gG3ggVOHbRJ8,779 +django/contrib/sites/locale/lt/LC_MESSAGES/django.mo,sha256=bK6PJtd7DaOgDukkzuqos5ktgdjSF_ffL9IJTQY839s,869 +django/contrib/sites/locale/lt/LC_MESSAGES/django.po,sha256=T-vdVqs9KCz9vMs9FfushgZN9z7LQOT-C86D85H2X8c,1195 +django/contrib/sites/locale/lv/LC_MESSAGES/django.mo,sha256=t9bQiVqpAmXrq8QijN4Lh0n6EGUGQjnuH7hDcu21z4c,823 +django/contrib/sites/locale/lv/LC_MESSAGES/django.po,sha256=vMaEtXGosD3AcTomiuctbOpjLes8TRBnumLe8DC4yq4,1023 +django/contrib/sites/locale/mk/LC_MESSAGES/django.mo,sha256=_YXasRJRWjYmmiEWCrAoqnrKuHHPBG_v_EYTUe16Nfo,885 +django/contrib/sites/locale/mk/LC_MESSAGES/django.po,sha256=AgdIjiSpN0P5o5rr5Ie4sFhnmS5d4doB1ffk91lmOvY,1062 +django/contrib/sites/locale/ml/LC_MESSAGES/django.mo,sha256=axNQVBY0nbR7hYa5bzNtdxB17AUOs2WXhu0Rg--FA3Q,1007 +django/contrib/sites/locale/ml/LC_MESSAGES/django.po,sha256=Sg7hHfK8OMs05ebtTv8gxS6_2kZv-OODwf7okP95Jtk,1169 +django/contrib/sites/locale/mn/LC_MESSAGES/django.mo,sha256=w2sqJRAe0wyz_IuCZ_Ocubs_VHL6wV1BcutWPz0dseQ,867 +django/contrib/sites/locale/mn/LC_MESSAGES/django.po,sha256=Zh_Eao0kLZsrQ8wkL1f-pRrsAtNJOspu45uStq5t8Mo,1127 +django/contrib/sites/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/sites/locale/mr/LC_MESSAGES/django.po,sha256=pqnjF5oxvpMyjijy6JfI8qJbbbowZzE5tZF0DMYiCBs,773 +django/contrib/sites/locale/ms/LC_MESSAGES/django.mo,sha256=GToJlS8yDNEy-D3-p7p8ZlWEZYHlSzZAcVIH5nQEkkI,727 +django/contrib/sites/locale/ms/LC_MESSAGES/django.po,sha256=_4l4DCIqSWZtZZNyfzpBA0V-CbAaHe9Ckz06VLbTjFo,864 +django/contrib/sites/locale/my/LC_MESSAGES/django.mo,sha256=jN59e9wRheZYx1A4t_BKc7Hx11J5LJg2wQRd21aQv08,961 +django/contrib/sites/locale/my/LC_MESSAGES/django.po,sha256=EhqYIW5-rX33YjsDsBwfiFb3BK6fZKVc3CRYeJpZX1E,1086 +django/contrib/sites/locale/nb/LC_MESSAGES/django.mo,sha256=AaiHGcmcciy5IMBPVAShcc1OQOETJvBCv7GYHMcIQMA,793 +django/contrib/sites/locale/nb/LC_MESSAGES/django.po,sha256=936zoN1sPSiiq7GuH01umrw8W6BtymYEU3bCfOQyfWE,1000 +django/contrib/sites/locale/ne/LC_MESSAGES/django.mo,sha256=n96YovpBax3T5VZSmIfGmd7Zakn9FJShJs5rvUX7Kf0,863 +django/contrib/sites/locale/ne/LC_MESSAGES/django.po,sha256=B14rhDd8GAaIjxd1sYjxO2pZfS8gAwZ1C-kCdVkRXho,1078 +django/contrib/sites/locale/nl/LC_MESSAGES/django.mo,sha256=ghu-tNPNZuE4sVRDWDVmmmVNPYZLWYm_UPJRqh8wmec,735 +django/contrib/sites/locale/nl/LC_MESSAGES/django.po,sha256=1DCQNzMRhy4vW-KkmlPGy58UR27Np5ilmYhmjaq-8_k,1030 +django/contrib/sites/locale/nn/LC_MESSAGES/django.mo,sha256=eSW8kwbzm2HsE9s9IRCsAo9juimVQjcfdd8rtl3TQJM,731 +django/contrib/sites/locale/nn/LC_MESSAGES/django.po,sha256=OOyvE7iji9hwvz8Z_OxWoKw2e3ptk3dqeqlriXgilSc,915 +django/contrib/sites/locale/os/LC_MESSAGES/django.mo,sha256=Su06FkWMOPzBxoung3bEju_EnyAEAXROoe33imO65uQ,806 +django/contrib/sites/locale/os/LC_MESSAGES/django.po,sha256=4i4rX6aXDUKjq64T02iStqV2V2erUsSVnTivh2XtQeY,963 +django/contrib/sites/locale/pa/LC_MESSAGES/django.mo,sha256=tOHiisOtZrTyIFoo4Ipn_XFH9hhu-ubJLMdOML5ZUgk,684 +django/contrib/sites/locale/pa/LC_MESSAGES/django.po,sha256=ztGyuqvzxRfNjqDG0rMLCu_oQ8V3Dxdsx0WZoYUyNv8,912 +django/contrib/sites/locale/pl/LC_MESSAGES/django.mo,sha256=lo5K262sZmo-hXvcHoBsEDqX8oJEPSxJY5EfRIqHZh0,903 +django/contrib/sites/locale/pl/LC_MESSAGES/django.po,sha256=-kQ49UvXITMy1vjJoN_emuazV_EjNDQnZDERXWNoKvw,1181 +django/contrib/sites/locale/pt/LC_MESSAGES/django.mo,sha256=PrcFQ04lFJ7mIYThXbW6acmDigEFIoLAC0PYk5hfaJs,797 +django/contrib/sites/locale/pt/LC_MESSAGES/django.po,sha256=Aj8hYI9W5nk5uxKHj1oE-b9bxmmuoeXLKaJDPfI2x2o,993 +django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo,sha256=BsFfarOR6Qk67fB-tTWgGhuOReJSgjwJBkIzZsv28vo,824 +django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po,sha256=jfvgelpWn2VQqYe2_CE39SLTsscCckvjuZo6dWII28c,1023 +django/contrib/sites/locale/ro/LC_MESSAGES/django.mo,sha256=oGsZw4_uYpaH6adMxnAuifJgHeZ_ytRZ4rFhiNfRQkQ,857 +django/contrib/sites/locale/ro/LC_MESSAGES/django.po,sha256=tWbWVbjFFELNzSXX4_5ltmzEeEJsY3pKwgEOjgV_W_8,1112 +django/contrib/sites/locale/ru/LC_MESSAGES/django.mo,sha256=bIZJWMpm2O5S6RC_2cfkrp5NXaTU2GWSsMr0wHVEmcw,1016 +django/contrib/sites/locale/ru/LC_MESSAGES/django.po,sha256=jHy5GR05ZSjLmAwaVNq3m0WdhO9GYxge3rDBziqesA8,1300 +django/contrib/sites/locale/sk/LC_MESSAGES/django.mo,sha256=-EYdm14ZjoR8bd7Rv2b5G7UJVSKmZa1ItLsdATR3-Cg,822 +django/contrib/sites/locale/sk/LC_MESSAGES/django.po,sha256=VSRlsq8uk-hP0JI94iWsGX8Al76vvGK4N1xIoFtoRQM,1070 +django/contrib/sites/locale/sl/LC_MESSAGES/django.mo,sha256=JmkpTKJGWgnBM3CqOUriGvrDnvg2YWabIU2kbYAOM4s,845 +django/contrib/sites/locale/sl/LC_MESSAGES/django.po,sha256=qWrWrSz5r3UOVraX08ILt3TTmfyTDGKbJKbTlN9YImU,1059 +django/contrib/sites/locale/sq/LC_MESSAGES/django.mo,sha256=DMLN1ZDJeDnslavjcKloXSXn6IvangVliVP3O6U8dAY,769 +django/contrib/sites/locale/sq/LC_MESSAGES/django.po,sha256=zg3ALcMNZErAS_xFxmtv6TmXZ0vxobX5AzCwOSRSwc8,930 +django/contrib/sites/locale/sr/LC_MESSAGES/django.mo,sha256=8kfi9IPdB2reF8C_eC2phaP6qonboHPwes_w3UgNtzw,935 +django/contrib/sites/locale/sr/LC_MESSAGES/django.po,sha256=A7xaen8H1W4uMBRAqCXT_0KQMoA2-45AUNDfGo9FydI,1107 +django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=jMXiq18efq0wErJAQfJR1fCnkYcEb7OYXg8sv6kzP0s,815 +django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po,sha256=9jkWYcZCTfQr2UZtyvhWDAmEHBrzunJUZcx7FlrFOis,1004 +django/contrib/sites/locale/sv/LC_MESSAGES/django.mo,sha256=qmhdn3N2C_DR_FYrUaFSacVjghgfb0CuWKanVRJSTq8,792 +django/contrib/sites/locale/sv/LC_MESSAGES/django.po,sha256=dDVuuuHGpZIoT6dU48aT2j4nEuGrd6zZ3FiZEs3TCeE,987 +django/contrib/sites/locale/sw/LC_MESSAGES/django.mo,sha256=cWjjDdFXBGmpUm03UDtgdDrREa2r75oMsXiEPT_Bx3g,781 +django/contrib/sites/locale/sw/LC_MESSAGES/django.po,sha256=oOKNdztQQU0sd6XmLI-n3ONmTL7jx3Q0z1YD8673Wi8,901 +django/contrib/sites/locale/ta/LC_MESSAGES/django.mo,sha256=CLO41KsSKqBrgtrHi6fmXaBk-_Y2l4KBLDJctZuZyWY,714 +django/contrib/sites/locale/ta/LC_MESSAGES/django.po,sha256=YsTITHg7ikkNcsP29tDgkZrUdtO0s9PrV1XPu4mgqCw,939 +django/contrib/sites/locale/te/LC_MESSAGES/django.mo,sha256=GmIWuVyIOcoQoAmr2HxCwBDE9JUYEktzYig93H_4v50,687 +django/contrib/sites/locale/te/LC_MESSAGES/django.po,sha256=jbncxU9H3EjXxWPsEoCKJhKi392XXTGvWyuenqLDxps,912 +django/contrib/sites/locale/tg/LC_MESSAGES/django.mo,sha256=wiWRlf3AN5zlFMNyP_rSDZS7M5rHQJ2DTUHARtXjim8,863 +django/contrib/sites/locale/tg/LC_MESSAGES/django.po,sha256=VBGZfJIw40JZe15ghsk-n3qUVX0VH2nFQQhpBy_lk1Y,1026 +django/contrib/sites/locale/th/LC_MESSAGES/django.mo,sha256=dQOp4JoP3gvfsxqEQ73L6F8FgH1YtAA9hYY-Uz5sv6Y,898 +django/contrib/sites/locale/th/LC_MESSAGES/django.po,sha256=auZBoKKKCHZbbh0PaUr9YKiWB1TEYZoj4bE7efAonV8,1077 +django/contrib/sites/locale/tk/LC_MESSAGES/django.mo,sha256=YhzSiVb_NdG1s7G1-SGGd4R3uweZQgnTs3G8Lv9r5z0,755 +django/contrib/sites/locale/tk/LC_MESSAGES/django.po,sha256=sigmzH3Ni2vJwLJ7ba8EeB4wnDXsg8rQRFExZAGycF4,917 +django/contrib/sites/locale/tr/LC_MESSAGES/django.mo,sha256=ryf01jcvvBMGPKkdViieDuor-Lr2KRXZeFF1gPupCOA,758 +django/contrib/sites/locale/tr/LC_MESSAGES/django.po,sha256=L9tsnwxw1BEJD-Nm3m1RAS7ekgdmyC0ETs_mr7tQw1E,1043 +django/contrib/sites/locale/tt/LC_MESSAGES/django.mo,sha256=gmmjXeEQUlBpfDmouhxE-qpEtv-iWdQSobYL5MWprZc,706 +django/contrib/sites/locale/tt/LC_MESSAGES/django.po,sha256=yj49TjwcZ4YrGqnJrKh3neKydlTgwYduto9KsmxI_eI,930 +django/contrib/sites/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/sites/locale/udm/LC_MESSAGES/django.po,sha256=vrLZ0XJF63CO3IucbQpd12lxuoM9S8tTUv6cpu3g81c,767 +django/contrib/sites/locale/uk/LC_MESSAGES/django.mo,sha256=H4806mPqOoHJFm549F7drzsfkvAXWKmn1w_WVwQx9rk,960 +django/contrib/sites/locale/uk/LC_MESSAGES/django.po,sha256=CJZTOaurDXwpgBiwXx3W7juaF0EctEImPhJdDn8j1xU,1341 +django/contrib/sites/locale/ur/LC_MESSAGES/django.mo,sha256=s6QL8AB_Mp9haXS4n1r9b0YhEUECPxUyPrHTMI3agts,654 +django/contrib/sites/locale/ur/LC_MESSAGES/django.po,sha256=R9tv3qtett8CUGackoHrc5XADeygVKAE0Fz8YzK2PZ4,885 +django/contrib/sites/locale/uz/LC_MESSAGES/django.mo,sha256=OsuqnLEDl9gUAwsmM2s1KH7VD74ID-k7JXcjGhjFlEY,799 +django/contrib/sites/locale/uz/LC_MESSAGES/django.po,sha256=RoaOwLDjkqqIJTuxpuY7eMLo42n6FoYAYutCfMaDk4I,935 +django/contrib/sites/locale/vi/LC_MESSAGES/django.mo,sha256=YOaKcdrN1238Zdm81jUkc2cpxjInAbdnhsSqHP_jQsI,762 +django/contrib/sites/locale/vi/LC_MESSAGES/django.po,sha256=AHcqR2p0fdscLvzbJO_a-CzMzaeRL4LOw4HB9K3noVQ,989 +django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=7D9_pDY5lBRpo1kfzIQL-PNvIg-ofCm7cBHE1-JWlMk,779 +django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po,sha256=xI_N00xhV8dWDp4fg5Mmj9ivOBBdHP79T3-JYXPyc5M,946 +django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=0F6Qmh1smIXlOUNDaDwDajyyGecc1azfwh8BhXrpETo,790 +django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.po,sha256=ixbXNBNKNfrpI_B0O_zktTfo63sRFMOk1B1uIh4DGGg,1046 +django/contrib/sites/management.py,sha256=AElGktvFhWXJtlJwOKpUlIeuv2thkNM8F6boliML84U,1646 +django/contrib/sites/managers.py,sha256=uqD_Cu3P4NCp7VVdGn0NvHfhsZB05MLmiPmgot-ygz4,1994 +django/contrib/sites/middleware.py,sha256=qYcVHsHOg0VxQNS4saoLHkdF503nJR-D7Z01vE0SvUM,309 +django/contrib/sites/migrations/0001_initial.py,sha256=eSu5aiR8FPElTvIbLeuSQZclOa0TIltT7XaDroJejOg,1362 +django/contrib/sites/migrations/0002_alter_domain_unique.py,sha256=OyuSeh6HxcuRRe6dCrJDQ8vGnAlrngO_jec3LL38Kg0,550 +django/contrib/sites/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sites/migrations/__pycache__/0001_initial.cpython-310.pyc,, +django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-310.pyc,, +django/contrib/sites/migrations/__pycache__/__init__.cpython-310.pyc,, +django/contrib/sites/models.py,sha256=NZkMEqDxrulV-y2yAq_dYg1Y3GxbI7o7Ca4HYOA_98s,3696 +django/contrib/sites/requests.py,sha256=baABc6fmTejNmk8M3fcoQ1cuI2qpJzF8Y47A1xSt8gY,641 +django/contrib/sites/shortcuts.py,sha256=YPCbb_uIYuwPyZ9SfwlyxAm2yuITkx24mbzSMJ2a7TI,583 +django/contrib/staticfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/staticfiles/__pycache__/__init__.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/apps.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/checks.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/finders.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/handlers.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/storage.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/testing.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/urls.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/utils.cpython-310.pyc,, +django/contrib/staticfiles/__pycache__/views.cpython-310.pyc,, +django/contrib/staticfiles/apps.py,sha256=SbeI6t0nB9pO56qpwyxRYgPvvCfAvbLTwMJDAzFfn6U,423 +django/contrib/staticfiles/checks.py,sha256=rH9A8NIYtEkA_PRYXQJxndm243O6Mz6GwyqWSUe3f24,391 +django/contrib/staticfiles/finders.py,sha256=VqUPjNTjHrJZL5pyMPcrRF2lmqKzjZF9nas_mnyIjaM,11008 +django/contrib/staticfiles/handlers.py,sha256=HGzVGgV4nv8v20XxzX9L1dXdNxV7ciwYzWxG1S0GJ6c,3496 +django/contrib/staticfiles/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/staticfiles/management/__pycache__/__init__.cpython-310.pyc,, +django/contrib/staticfiles/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/staticfiles/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-310.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-310.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/runserver.cpython-310.pyc,, +django/contrib/staticfiles/management/commands/collectstatic.py,sha256=Zd65dgKD8JlXmoDb3ig6tvZka4gMV_6egbLcoRLJ1SA,15137 +django/contrib/staticfiles/management/commands/findstatic.py,sha256=TMMGlbV-B1aq1b27nA6Otu6hV44pqAzeuEtTV2DPmp0,1638 +django/contrib/staticfiles/management/commands/runserver.py,sha256=U_7oCY8LJX5Jn1xlMv-qF4EQoUvlT0ldB5E_0sJmRtw,1373 +django/contrib/staticfiles/storage.py,sha256=M9r7p8q0ubHX1VJxcBYwrkkT-gNP7fDvDhVOYPu-XCs,19123 +django/contrib/staticfiles/testing.py,sha256=4X-EtOfXnwkJAyFT8qe4H4sbVTKgM65klLUtY81KHiE,463 +django/contrib/staticfiles/urls.py,sha256=owDM_hdyPeRmxYxZisSMoplwnzWrptI_W8-3K2f7ITA,498 +django/contrib/staticfiles/utils.py,sha256=iPXHA0yMXu37PQwCrq9zjhSzjZf_zEBXJ-dHGsqZoX8,2279 +django/contrib/staticfiles/views.py,sha256=XacxXwbhLlcmxhspeDOYvNF0OhMtSMOHGouxqQf0jlU,1261 +django/contrib/syndication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/syndication/__pycache__/__init__.cpython-310.pyc,, +django/contrib/syndication/__pycache__/apps.cpython-310.pyc,, +django/contrib/syndication/__pycache__/views.cpython-310.pyc,, +django/contrib/syndication/apps.py,sha256=7IpHoihPWtOcA6S4O6VoG0XRlqEp3jsfrNf-D-eluic,203 +django/contrib/syndication/views.py,sha256=gcCR8C3_b3lBRx3XfQhM3h8WkSO09gXbkziOUjNzj78,8716 +django/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/__pycache__/__init__.cpython-310.pyc,, +django/core/__pycache__/asgi.cpython-310.pyc,, +django/core/__pycache__/exceptions.cpython-310.pyc,, +django/core/__pycache__/paginator.cpython-310.pyc,, +django/core/__pycache__/signals.cpython-310.pyc,, +django/core/__pycache__/signing.cpython-310.pyc,, +django/core/__pycache__/validators.cpython-310.pyc,, +django/core/__pycache__/wsgi.cpython-310.pyc,, +django/core/asgi.py,sha256=N2L3GS6F6oL-yD9Tu2otspCi2UhbRQ90LEx3ExOP1m0,386 +django/core/cache/__init__.py,sha256=MecIA1TacIKkQTGHI1zti-rnoGNiWr0PgviUWFnPO2k,2252 +django/core/cache/__pycache__/__init__.cpython-310.pyc,, +django/core/cache/__pycache__/utils.cpython-310.pyc,, +django/core/cache/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/cache/backends/__pycache__/__init__.cpython-310.pyc,, +django/core/cache/backends/__pycache__/base.cpython-310.pyc,, +django/core/cache/backends/__pycache__/db.cpython-310.pyc,, +django/core/cache/backends/__pycache__/dummy.cpython-310.pyc,, +django/core/cache/backends/__pycache__/filebased.cpython-310.pyc,, +django/core/cache/backends/__pycache__/locmem.cpython-310.pyc,, +django/core/cache/backends/__pycache__/memcached.cpython-310.pyc,, +django/core/cache/backends/__pycache__/redis.cpython-310.pyc,, +django/core/cache/backends/base.py,sha256=fkEigg1NJnT26lrkDuBLm0n9dmhU_rhY_oxIdSZ7vnQ,14227 +django/core/cache/backends/db.py,sha256=MAesuss4Vkobs_EfD2nEOG1raSByXLXEKq5SlvkY7NM,11077 +django/core/cache/backends/dummy.py,sha256=fQbFiL72DnVKP9UU4WDsZYaxYKx7FlMOJhtP8aky2ic,1043 +django/core/cache/backends/filebased.py,sha256=h54aS2msZiDX2MNVn5rSB02Fa9tFOb1UkbdRTOhwqAo,5658 +django/core/cache/backends/locmem.py,sha256=cqdFgPxYrfEKDvKR2IYiFV7-MwhM0CIHPxLTBxJMDTQ,4035 +django/core/cache/backends/memcached.py,sha256=IIKQ2F2NvAW0xSlSmCXbSOxhBwlvl7qv-hDL6Fs0OgI,8573 +django/core/cache/backends/redis.py,sha256=z6JDItdQ3T2Aixr3SVDo9RZKQ_C07iIXFv7_Pmccw4k,7966 +django/core/cache/utils.py,sha256=qWHXd2UtdttdO5xvQ9pnCZf60fPYmi4Do-lPYcrvpBU,375 +django/core/checks/__init__.py,sha256=gFG0gY0C0L-akCrk1F0Q_WmkptYDLXYdyzr3wNJVIi4,1195 +django/core/checks/__pycache__/__init__.cpython-310.pyc,, +django/core/checks/__pycache__/async_checks.cpython-310.pyc,, +django/core/checks/__pycache__/caches.cpython-310.pyc,, +django/core/checks/__pycache__/database.cpython-310.pyc,, +django/core/checks/__pycache__/files.cpython-310.pyc,, +django/core/checks/__pycache__/messages.cpython-310.pyc,, +django/core/checks/__pycache__/model_checks.cpython-310.pyc,, +django/core/checks/__pycache__/registry.cpython-310.pyc,, +django/core/checks/__pycache__/templates.cpython-310.pyc,, +django/core/checks/__pycache__/translation.cpython-310.pyc,, +django/core/checks/__pycache__/urls.cpython-310.pyc,, +django/core/checks/async_checks.py,sha256=A9p_jebELrf4fiD6jJtBM6Gvm8cMb03sSuW9Ncx3-vU,403 +django/core/checks/caches.py,sha256=hbcIFD_grXUQR2lGAzzlCX6qMJfkXj02ZDJElgdT5Yg,2643 +django/core/checks/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/checks/compatibility/__pycache__/__init__.cpython-310.pyc,, +django/core/checks/compatibility/__pycache__/django_4_0.cpython-310.pyc,, +django/core/checks/compatibility/django_4_0.py,sha256=2s7lm9LZ0NrhaYSrw1Y5mMkL5BC68SS-TyD-TKczbEI,657 +django/core/checks/database.py,sha256=sBj-8o4DmpG5QPy1KXgXtZ0FZ0T9xdlT4XBIc70wmEQ,341 +django/core/checks/files.py,sha256=W4yYHiWrqi0d_G6tDWTw79pr2dgJY41rOv7mRpbtp2Q,522 +django/core/checks/messages.py,sha256=vIJtvmeafgwFzwcXaoRBWkcL_t2gLTLjstWSw5xCtjQ,2241 +django/core/checks/model_checks.py,sha256=8aK5uit9yP_lDfdXBJPlz_r-46faP_gIOXLszXqLQqY,8830 +django/core/checks/registry.py,sha256=FaixxLUVKtF-wNVKYXVkOVTg06lLdwOty2mfdDcEfb4,3458 +django/core/checks/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/checks/security/__pycache__/__init__.cpython-310.pyc,, +django/core/checks/security/__pycache__/base.cpython-310.pyc,, +django/core/checks/security/__pycache__/csrf.cpython-310.pyc,, +django/core/checks/security/__pycache__/sessions.cpython-310.pyc,, +django/core/checks/security/base.py,sha256=MXT5p_QB23rgdOC8bZ-m7j8OYY6u1y7bXpKFLhxmGMc,8530 +django/core/checks/security/csrf.py,sha256=nT4qi-YgISEvotUC4_X_Vd7gWUZ5f2703gKlFFx7s3U,2047 +django/core/checks/security/sessions.py,sha256=rwuWKyPNI1sUNJ2ZIhLIojnEeOoKpE2l4_fCWsITr70,2558 +django/core/checks/templates.py,sha256=9vbFFNMD99nf1QF5dNuisd5hpbVogP5Hgc_fHfm2F6k,1166 +django/core/checks/translation.py,sha256=it7VjXf10-HBdCc3z55_lSxwok9qEncdojRBG74d4FA,1990 +django/core/checks/urls.py,sha256=NIRbMn2r9GzdgOxhIujAICdYWC2M7SAiC5QuamENfU4,3328 +django/core/exceptions.py,sha256=856Rz8frSvYvg37zHXhX2GtZUReqtAybVueOJIx5Hjo,6297 +django/core/files/__init__.py,sha256=Rhz5Jm9BM6gy_nf5yMtswN1VsTIILYUL7Z-5edjh_HI,60 +django/core/files/__pycache__/__init__.cpython-310.pyc,, +django/core/files/__pycache__/base.cpython-310.pyc,, +django/core/files/__pycache__/images.cpython-310.pyc,, +django/core/files/__pycache__/locks.cpython-310.pyc,, +django/core/files/__pycache__/move.cpython-310.pyc,, +django/core/files/__pycache__/storage.cpython-310.pyc,, +django/core/files/__pycache__/temp.cpython-310.pyc,, +django/core/files/__pycache__/uploadedfile.cpython-310.pyc,, +django/core/files/__pycache__/uploadhandler.cpython-310.pyc,, +django/core/files/__pycache__/utils.cpython-310.pyc,, +django/core/files/base.py,sha256=UeErNSLdQMR2McOUNfgjHBadSlmVP_DDHsAwVrn1gYk,4811 +django/core/files/images.py,sha256=nn_GxARZobyRZr15MtCjbcgax8L4JhNQmfBK3-TvB78,2643 +django/core/files/locks.py,sha256=XWB-AECioVzp4BFO_YImcpqPxJR95pfF8bOfogGIeds,3611 +django/core/files/move.py,sha256=3XS3kX7KerwZy0eYALnzXu2yeWkf-3pVE90uoyk2AK0,3101 +django/core/files/storage.py,sha256=ZeIJb1-SHOpIttd7HRxyeYKYKakrzxWlPKklOA0t3Bo,15668 +django/core/files/temp.py,sha256=iUegEgQ3UyUrDN10SgvKIrHfBPSej1lk-LAgJqMZBcU,2503 +django/core/files/uploadedfile.py,sha256=6hBjxmx8P0fxmZQbtj4OTsXtUk9GdIA7IUcv_KwSI08,4189 +django/core/files/uploadhandler.py,sha256=riobj6SKikjiacrhObFsW9NFRfjG5qPklsaS1pzpFvE,7179 +django/core/files/utils.py,sha256=f0naLw9ovd9z1DzQHLKXPJxHmBogsg4MEFZH4K9nxvg,2659 +django/core/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/handlers/__pycache__/__init__.cpython-310.pyc,, +django/core/handlers/__pycache__/asgi.cpython-310.pyc,, +django/core/handlers/__pycache__/base.cpython-310.pyc,, +django/core/handlers/__pycache__/exception.cpython-310.pyc,, +django/core/handlers/__pycache__/wsgi.cpython-310.pyc,, +django/core/handlers/asgi.py,sha256=-3Qw_J87Fbp7y9cpTUBwHQE7SrSFxFYJ1zW2RVMZLmE,11647 +django/core/handlers/base.py,sha256=K5SIqBB4VTro0H57XEaVZbDoF2gD3xVBk61x4PhN7-g,14836 +django/core/handlers/exception.py,sha256=aoHIjYBYMTvnm5KxQCkWXUVBpI2ABcBJ-3rmW0GJum4,5898 +django/core/handlers/wsgi.py,sha256=UONg1fxy5L6FqgGln4bUJVck-055ln3zWnJFz8YvUzc,7850 +django/core/mail/__init__.py,sha256=HJSPyTBz34PsIyv4jTFJvhswauZr51NpsB-gpYR73-A,4958 +django/core/mail/__pycache__/__init__.cpython-310.pyc,, +django/core/mail/__pycache__/message.cpython-310.pyc,, +django/core/mail/__pycache__/utils.cpython-310.pyc,, +django/core/mail/backends/__init__.py,sha256=VJ_9dBWKA48MXBZXVUaTy9NhgfRonapA6UAjVFEPKD8,37 +django/core/mail/backends/__pycache__/__init__.cpython-310.pyc,, +django/core/mail/backends/__pycache__/base.cpython-310.pyc,, +django/core/mail/backends/__pycache__/console.cpython-310.pyc,, +django/core/mail/backends/__pycache__/dummy.cpython-310.pyc,, +django/core/mail/backends/__pycache__/filebased.cpython-310.pyc,, +django/core/mail/backends/__pycache__/locmem.cpython-310.pyc,, +django/core/mail/backends/__pycache__/smtp.cpython-310.pyc,, +django/core/mail/backends/base.py,sha256=Cljbb7nil40Dfpob2R8iLmlO0Yv_wlOCBA9hF2Z6W54,1683 +django/core/mail/backends/console.py,sha256=Z9damLP7VPLswrNDX9kLjL3MdWf9yAM6ZCeUv-3tRgU,1426 +django/core/mail/backends/dummy.py,sha256=sI7tAa3MfG43UHARduttBvEAYYfiLasgF39jzaZPu9E,234 +django/core/mail/backends/filebased.py,sha256=AbEBL9tXr6WIhuSQvm3dHoCpuMoDTSIkx6qFb4GMUe4,2353 +django/core/mail/backends/locmem.py,sha256=AT8ilBy4m5OWaiyqm_k82HdkQIemn4gciIYILGZag2o,885 +django/core/mail/backends/smtp.py,sha256=ek6Jp3X5AKYM_LwKAYT4pZ4YVe495uwIerfe60l0ack,5538 +django/core/mail/message.py,sha256=Mdi8_UbFQD0k-WzM43cqTJcwqxpqwM5v5OM3Hzdm9Vk,17709 +django/core/mail/utils.py,sha256=Wf-pdSdv0WLREYzI7EVWr59K6o7tfb3d2HSbAyE3SOE,506 +django/core/management/__init__.py,sha256=ERXugED2C041pzlujq2WB8upfZeAe-OMhWAg26i8gRU,17617 +django/core/management/__pycache__/__init__.cpython-310.pyc,, +django/core/management/__pycache__/base.cpython-310.pyc,, +django/core/management/__pycache__/color.cpython-310.pyc,, +django/core/management/__pycache__/sql.cpython-310.pyc,, +django/core/management/__pycache__/templates.cpython-310.pyc,, +django/core/management/__pycache__/utils.cpython-310.pyc,, +django/core/management/base.py,sha256=xo6x9RnjdY85DHOsZLL6ANx3v0Jx8QtiAoEYM6pnQMY,24338 +django/core/management/color.py,sha256=a9NzfaVrMCcn9xWYu_Yfi1fdAsFqtGa5H0waJcG_E-M,2874 +django/core/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/management/commands/__pycache__/__init__.cpython-310.pyc,, +django/core/management/commands/__pycache__/check.cpython-310.pyc,, +django/core/management/commands/__pycache__/compilemessages.cpython-310.pyc,, +django/core/management/commands/__pycache__/createcachetable.cpython-310.pyc,, +django/core/management/commands/__pycache__/dbshell.cpython-310.pyc,, +django/core/management/commands/__pycache__/diffsettings.cpython-310.pyc,, +django/core/management/commands/__pycache__/dumpdata.cpython-310.pyc,, +django/core/management/commands/__pycache__/flush.cpython-310.pyc,, +django/core/management/commands/__pycache__/inspectdb.cpython-310.pyc,, +django/core/management/commands/__pycache__/loaddata.cpython-310.pyc,, +django/core/management/commands/__pycache__/makemessages.cpython-310.pyc,, +django/core/management/commands/__pycache__/makemigrations.cpython-310.pyc,, +django/core/management/commands/__pycache__/migrate.cpython-310.pyc,, +django/core/management/commands/__pycache__/runserver.cpython-310.pyc,, +django/core/management/commands/__pycache__/sendtestemail.cpython-310.pyc,, +django/core/management/commands/__pycache__/shell.cpython-310.pyc,, +django/core/management/commands/__pycache__/showmigrations.cpython-310.pyc,, +django/core/management/commands/__pycache__/sqlflush.cpython-310.pyc,, +django/core/management/commands/__pycache__/sqlmigrate.cpython-310.pyc,, +django/core/management/commands/__pycache__/sqlsequencereset.cpython-310.pyc,, +django/core/management/commands/__pycache__/squashmigrations.cpython-310.pyc,, +django/core/management/commands/__pycache__/startapp.cpython-310.pyc,, +django/core/management/commands/__pycache__/startproject.cpython-310.pyc,, +django/core/management/commands/__pycache__/test.cpython-310.pyc,, +django/core/management/commands/__pycache__/testserver.cpython-310.pyc,, +django/core/management/commands/check.py,sha256=KPtpSfNkIPPKaBP4od_vh-kp_D439sG8T9MOU41p9DA,2652 +django/core/management/commands/compilemessages.py,sha256=zb5fkLrfXSg5LQgs5m-SUBDFt7OtYmdgEmqiENv1Vrc,6992 +django/core/management/commands/createcachetable.py,sha256=1gXJFZpvuCZPd1I_VlhFlCVOPmxk-LQxFB0Tf2H2eyA,4616 +django/core/management/commands/dbshell.py,sha256=XWBxHQIxXzKd_o81PxmmOCV67VPcqbDr9Und6LEAt9Q,1731 +django/core/management/commands/diffsettings.py,sha256=NNL_J0P3HRzAZd9XcW7Eo_iE_lNliIpKtdcarDbBRpc,3554 +django/core/management/commands/dumpdata.py,sha256=PTJ32bLwSRd-NkZZhpowxNMHAPQpclAoOFESKMsyGQg,10962 +django/core/management/commands/flush.py,sha256=9KhMxzJFqA3cOCw-0VFZ2Utb2xZ-xCnn8ZGeiVGOm8E,3611 +django/core/management/commands/inspectdb.py,sha256=MfNrdVMb09c8bcfSRufGaFgY70bUaL1LxIpQmJzB93c,15142 +django/core/management/commands/loaddata.py,sha256=RJrdi1VWKv53FcBMrXZhLpTYwsjZvhqo76JJdor3aaA,15969 +django/core/management/commands/makemessages.py,sha256=MgK4yC93plBzG9jQ746VJRPjbAJUPuMnfrngYVWVdZc,27834 +django/core/management/commands/makemigrations.py,sha256=PdOgjdH3luE3R3dalmsf66oQFc8kv7NFMe6cuhltnik,16244 +django/core/management/commands/migrate.py,sha256=RXD2zuUCoQ4gMkyV-5kqOOlHXNmPVMlM3zidM0U3fQU,18458 +django/core/management/commands/runserver.py,sha256=AAXjfEFhDysNLQGaH-xpPUp61G2JfvNzcULTaahEHuo,6788 +django/core/management/commands/sendtestemail.py,sha256=sF5TUMbD_tlGBnUsn9t-oFVGNSyeiWRIrgyPbJE88cs,1518 +django/core/management/commands/shell.py,sha256=LKmj6KYv6zpJzQ2mWtR4-u2CDSQL-_Na6TsT4JLYsi4,4613 +django/core/management/commands/showmigrations.py,sha256=dHDyNji_c55LntHanNT7ZF2EOq6pN4nulP-e4WRPMwE,6807 +django/core/management/commands/sqlflush.py,sha256=wivzfu_vA5XeU7fu2x1k7nEBky_vjtJgU4ruPja1pRQ,991 +django/core/management/commands/sqlmigrate.py,sha256=fjC7M5-cFxPV6yiqpSwpBrvo4ygZQeqoGEAVywVhKQY,3308 +django/core/management/commands/sqlsequencereset.py,sha256=Bf6HoGe5WoyAivZv1qYpklFQF9CaG4X2s1sLxT6U0Xw,1061 +django/core/management/commands/squashmigrations.py,sha256=hPS7TG6zgnXKf0hW30iOX6Uue-U-1paE7b_-43KVPzI,10241 +django/core/management/commands/startapp.py,sha256=Dhllhaf1q3EKVnyBLhJ9QsWf6JmjAtYnVLruHsmMlcQ,503 +django/core/management/commands/startproject.py,sha256=Iv7KOco1GkzGqUEME_LCx5vGi4JfY8-lzdkazDqF7k8,789 +django/core/management/commands/test.py,sha256=R0DDsSQ3rYHvA6rL0tFh-Q66JibpP6naPhirF3PeKnY,2554 +django/core/management/commands/testserver.py,sha256=o0MuEiPYKbZ4w7bj3BnwDQawc5CNOp53nl4e_nretF0,2245 +django/core/management/sql.py,sha256=fP6Bvq4NrQB_9Tb6XsYeCg57xs2Ck6uaCXq0ojFOSvA,1851 +django/core/management/templates.py,sha256=NMBG5yNyTvaBD5_HidoaiJ-8XqZLcTLeXVStgMX80ZY,14694 +django/core/management/utils.py,sha256=VmC3Qz0Qxza4ZZf8g5tVjOY3M_P4phA4RztlUShzXGk,4897 +django/core/paginator.py,sha256=RItcuDrLFaa6IeWvaoOeFWSukWvP2FFRft28oQnFc_0,7542 +django/core/serializers/__init__.py,sha256=gaH58ip_2dyUFDlfOPenMkVJftQQOBvXqCcZBjAKwTA,8772 +django/core/serializers/__pycache__/__init__.cpython-310.pyc,, +django/core/serializers/__pycache__/base.cpython-310.pyc,, +django/core/serializers/__pycache__/json.cpython-310.pyc,, +django/core/serializers/__pycache__/jsonl.cpython-310.pyc,, +django/core/serializers/__pycache__/python.cpython-310.pyc,, +django/core/serializers/__pycache__/pyyaml.cpython-310.pyc,, +django/core/serializers/__pycache__/xml_serializer.cpython-310.pyc,, +django/core/serializers/base.py,sha256=x2JpZwHk5zOHPsO0VLGZONRX7Vi1R7OoQXB_IngHxwo,12995 +django/core/serializers/json.py,sha256=GK9Slqj1cCeQVZU-jkagTC_hRsvgf2kBmdEseBcRpn8,3446 +django/core/serializers/jsonl.py,sha256=671JRbWRgOH3-oeD3auK9QCziwtrcdbyCIRDy5s4Evw,1879 +django/core/serializers/python.py,sha256=mfP8mMuaaYCl4cy6sXVAr8YQLOgsTBO-7jelfmWA9oc,6490 +django/core/serializers/pyyaml.py,sha256=77zu6PCfJg_75m36lX9X5018ADcux5qsDGajKNh4pI8,2955 +django/core/serializers/xml_serializer.py,sha256=iN0du1rdtJuo1CI1mk4vCN_kYsFeZ2Lshs0_KIs6kgw,17949 +django/core/servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/servers/__pycache__/__init__.cpython-310.pyc,, +django/core/servers/__pycache__/basehttp.cpython-310.pyc,, +django/core/servers/basehttp.py,sha256=ueq272hWTqH-t6_j312lvL02ro-pzYaMrI22B48JFuU,8815 +django/core/signals.py,sha256=5vh1e7IgPN78WXPo7-hEMPN9tQcqJSZHu0WCibNgd-E,151 +django/core/signing.py,sha256=R7Ucq6mjE7ZP3yWucDUkqrvJUr_kuiPRMs1AXhyF1wU,8232 +django/core/validators.py,sha256=TTlbJUlq_b6FoEcQzRQGODK6330JkSOfJP0mbFscypU,21222 +django/core/wsgi.py,sha256=2sYMSe3IBrENeQT7rys-04CRmf8hW2Q2CjlkBUIyjHk,388 +django/db/__init__.py,sha256=iw69FXBNG7Xwb2OzJP6o3cDVr46IMFSSRTVKivveUv0,1441 +django/db/__pycache__/__init__.cpython-310.pyc,, +django/db/__pycache__/transaction.cpython-310.pyc,, +django/db/__pycache__/utils.cpython-310.pyc,, +django/db/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/__pycache__/ddl_references.cpython-310.pyc,, +django/db/backends/__pycache__/signals.cpython-310.pyc,, +django/db/backends/__pycache__/utils.cpython-310.pyc,, +django/db/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/base/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/base/__pycache__/base.cpython-310.pyc,, +django/db/backends/base/__pycache__/client.cpython-310.pyc,, +django/db/backends/base/__pycache__/creation.cpython-310.pyc,, +django/db/backends/base/__pycache__/features.cpython-310.pyc,, +django/db/backends/base/__pycache__/introspection.cpython-310.pyc,, +django/db/backends/base/__pycache__/operations.cpython-310.pyc,, +django/db/backends/base/__pycache__/schema.cpython-310.pyc,, +django/db/backends/base/__pycache__/validation.cpython-310.pyc,, +django/db/backends/base/base.py,sha256=w-xQ5ZzxExbbX73Lg9hVol6hWumRvhQwLrHoKoszjic,25340 +django/db/backends/base/client.py,sha256=90Ffs6zZYCli3tJjwsPH8TItZ8tz1Pp-zhQa-EpsNqc,937 +django/db/backends/base/creation.py,sha256=VX38HmJQsrJeLc6x23-D2p5lqO7su-3buEpWeJiEGmg,15084 +django/db/backends/base/features.py,sha256=syGA6jIvEqUpF9zChLGFA6Fo1ImFUNrEyldlhUInBec,13941 +django/db/backends/base/introspection.py,sha256=r6Pk8lvcT_l-BaqYHjM7i5j8IZId2-hk3sD6td1uTIQ,8068 +django/db/backends/base/operations.py,sha256=sgwC_eKmyOa7majr2uSnmtcxcf3v3dXtqp71S8aendo,28166 +django/db/backends/base/schema.py,sha256=xDcy1yxyKCYAcsluVPRIcqt57q9qxkrzCR8h3S8-KSU,67434 +django/db/backends/base/validation.py,sha256=2zpI11hyUJr0I0cA1xmvoFwQVdZ-7_1T2F11TpQ0Rkk,1067 +django/db/backends/ddl_references.py,sha256=eBDnxoh7_PY2H8AGuZ5FUoxsEscpnmMuYEMqzfPRFqk,8129 +django/db/backends/dummy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/dummy/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/dummy/__pycache__/base.cpython-310.pyc,, +django/db/backends/dummy/__pycache__/features.cpython-310.pyc,, +django/db/backends/dummy/base.py,sha256=TYBN_29LPOUA94rombqiQaVlXoScTcOPJdXYmJaDeu0,2212 +django/db/backends/dummy/features.py,sha256=Pg8_jND-aoJomTaBBXU3hJEjzpB-rLs6VwpoKkOYuQg,181 +django/db/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/mysql/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/base.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/client.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/compiler.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/creation.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/features.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/introspection.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/operations.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/schema.cpython-310.pyc,, +django/db/backends/mysql/__pycache__/validation.cpython-310.pyc,, +django/db/backends/mysql/base.py,sha256=pAnle6fHcVKqOK4zvdyq2GG6TAa2yXcVLm-GvneSS3o,16835 +django/db/backends/mysql/client.py,sha256=kehdRl8BX9KPcfTwYd3iDtHN3cdl-IFWUcV3cYHlIXY,2581 +django/db/backends/mysql/compiler.py,sha256=wju0iZ_KHfEgyNtQjnLizXC_GxW2uc61zgznLIGo_C0,3075 +django/db/backends/mysql/creation.py,sha256=8BV8YHk3qEq555nH3NHukxpZZgxtvXFvkv7XvkRlhKA,3449 +django/db/backends/mysql/features.py,sha256=mn1RgTViBBO80QLUBHHLaClWCHVbUV6i1Dyoivfbmr0,11508 +django/db/backends/mysql/introspection.py,sha256=54X68yV0Q0pNYznhj3ecmJy_EJu7h_zSh23U4LQfMxc,14090 +django/db/backends/mysql/operations.py,sha256=j61c1XrlCOlOY2E-YpYK6xEJ2xzfHfItdkOamEkOF3A,16825 +django/db/backends/mysql/schema.py,sha256=7ho_sQkRzkPRHNzRq-7ZaI3UPZqBFstJP-2HbV9DouU,7294 +django/db/backends/mysql/validation.py,sha256=XERj0lPEihKThPvzoVJmNpWdPOun64cRF3gHv-zmCGk,3093 +django/db/backends/oracle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/oracle/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/base.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/client.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/creation.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/features.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/functions.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/introspection.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/operations.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/schema.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/utils.cpython-310.pyc,, +django/db/backends/oracle/__pycache__/validation.cpython-310.pyc,, +django/db/backends/oracle/base.py,sha256=qEJQi2sIOte1iS5BKcp40GCCeXsGEjdD8qyvZjLVqeQ,22973 +django/db/backends/oracle/client.py,sha256=DfDURfno8Sek13M8r5S2t2T8VUutx2hBT9DZRfow9VQ,784 +django/db/backends/oracle/creation.py,sha256=KVUU5EqNWeaeRMRj0Q2Z3EQ-F-FRuj25JaXdSTA_Q7I,20834 +django/db/backends/oracle/features.py,sha256=We9YF5bG4TbPEMzJ36bDI4XtcaaJrmsryHCK2WJDBvo,4800 +django/db/backends/oracle/functions.py,sha256=2OoBYyY1Lb4B5hYbkRHjd8YY_artr3QeGu2hlojC-vc,812 +django/db/backends/oracle/introspection.py,sha256=rBgffDO89PipOOCmyyf3AH71nMpj-j2a8Sujvd1L-B0,15416 +django/db/backends/oracle/operations.py,sha256=IHj3v7kxUMF2ry9r6M86u3thi1Q7Nfr5Zq7Z6yFZ7sk,29026 +django/db/backends/oracle/schema.py,sha256=WyS3h3oKwhU6PB0NAfEyFNTcbW3kMaUuEHATxwLnVF8,10299 +django/db/backends/oracle/utils.py,sha256=I4N0L0epD4HLE4StVJZ-SwN8cPl_92ZySZuLkj6d3tQ,2682 +django/db/backends/oracle/validation.py,sha256=cq-Bvy5C0_rmkgng0SSQ4s74FKg2yTM1N782Gfz86nY,860 +django/db/backends/postgresql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/postgresql/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/base.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/client.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/creation.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/features.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/introspection.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/operations.cpython-310.pyc,, +django/db/backends/postgresql/__pycache__/schema.cpython-310.pyc,, +django/db/backends/postgresql/base.py,sha256=ejKk7ZoCqzNvuzVSoxtoqkOyIXyao-JucRtGW6Lixe0,13825 +django/db/backends/postgresql/client.py,sha256=7-Q-fpIFgeFwO6mbNKosHZYcCQskcA58OqXKBG1kkl4,2052 +django/db/backends/postgresql/creation.py,sha256=ZuyzNToyKmUA6S49a3is6SQg8ELV3_ijvm3Ch3uMf7o,3663 +django/db/backends/postgresql/features.py,sha256=ewVukS_I5N1UuPpveIUk2FxSsjLvn8WOD_yw-C0aZ0g,3443 +django/db/backends/postgresql/introspection.py,sha256=7uOy6gLxdRHKVXmn8tgLtDhqmrNVSUiHFcDMA0rug3g,11149 +django/db/backends/postgresql/operations.py,sha256=f0yjtmKezSnd444Gxqro_WT4v3Ule4wUTA5GrfqLSqM,12445 +django/db/backends/postgresql/schema.py,sha256=OxCeOtxZL8zuZlUabScTlp2y5dmZNgpc4ZCxOtewVQU,12096 +django/db/backends/signals.py,sha256=Yl14KjYJijTt1ypIZirp90lS7UTJ8UogPFI_DwbcsSc,66 +django/db/backends/sqlite3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/sqlite3/__pycache__/__init__.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/base.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/client.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/creation.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/features.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/introspection.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/operations.cpython-310.pyc,, +django/db/backends/sqlite3/__pycache__/schema.cpython-310.pyc,, +django/db/backends/sqlite3/base.py,sha256=ol9gsuu_oaQVQb7Wgn6A6qOwBcrRQYdH4ooCLhhVobk,27350 +django/db/backends/sqlite3/client.py,sha256=Eb_-P1w0aTbZGVNYkv7KA1ku5Il1N2RQov2lc3v0nho,321 +django/db/backends/sqlite3/creation.py,sha256=a64zo_KZ1UTrIoQge7LyhfJiqsKgpmUzBkMFC05kfs8,4528 +django/db/backends/sqlite3/features.py,sha256=h6s4v_ovycrSXYomty2F7ePXlNu3MqAO6T7QmMrSZnc,5973 +django/db/backends/sqlite3/introspection.py,sha256=_HMysyF7tIW51VZgdW0NmXFU2hGU3lXunAPMmbnmnww,21335 +django/db/backends/sqlite3/operations.py,sha256=v4va12h738krQPqvdw1C5igPGLM9x-UypTXpPxBPe60,16177 +django/db/backends/sqlite3/schema.py,sha256=BUbnIm0tGEqmkQ2LpiFs87QNa-HPiuYg4vvIHpoKe_s,22398 +django/db/backends/utils.py,sha256=P4lD-Q6XEqDaLMS_kOMOANq7vuugkgt7TmBtTDkNKn4,9202 +django/db/migrations/__init__.py,sha256=Oa4RvfEa6hITCqdcqwXYC66YknFKyluuy7vtNbSc-L4,97 +django/db/migrations/__pycache__/__init__.cpython-310.pyc,, +django/db/migrations/__pycache__/autodetector.cpython-310.pyc,, +django/db/migrations/__pycache__/exceptions.cpython-310.pyc,, +django/db/migrations/__pycache__/executor.cpython-310.pyc,, +django/db/migrations/__pycache__/graph.cpython-310.pyc,, +django/db/migrations/__pycache__/loader.cpython-310.pyc,, +django/db/migrations/__pycache__/migration.cpython-310.pyc,, +django/db/migrations/__pycache__/optimizer.cpython-310.pyc,, +django/db/migrations/__pycache__/questioner.cpython-310.pyc,, +django/db/migrations/__pycache__/recorder.cpython-310.pyc,, +django/db/migrations/__pycache__/serializer.cpython-310.pyc,, +django/db/migrations/__pycache__/state.cpython-310.pyc,, +django/db/migrations/__pycache__/utils.cpython-310.pyc,, +django/db/migrations/__pycache__/writer.cpython-310.pyc,, +django/db/migrations/autodetector.py,sha256=uO45iVduLNcrqXLzusc8evQ76hKRb5iPUV9rRefPCP8,70734 +django/db/migrations/exceptions.py,sha256=SotQF7ZKgJpd9KN-gKDL8wCJAKSEgbZToM_vtUAnqHw,1204 +django/db/migrations/executor.py,sha256=hFI8JRGc9vCJCIzEF8TWy4c1XsZDSAMegC8LOgpPCnQ,18698 +django/db/migrations/graph.py,sha256=vt7Pc45LuiXR8aRCrXP5Umm6VDCCTs2LAr5NXh-rxcE,13055 +django/db/migrations/loader.py,sha256=KRHdjq7A0sHqOS0JHVNlR8MtQvbY9smjId7rngwrrOU,16863 +django/db/migrations/migration.py,sha256=gMnKmIgRC8Ixn8fGO4gVvP5EYEmUtxkI_cCmkR5KvZY,9483 +django/db/migrations/operations/__init__.py,sha256=q6REvafmof5Hb6e-PxsfcpCVasydBfIna2Pev_b5c-U,870 +django/db/migrations/operations/__pycache__/__init__.cpython-310.pyc,, +django/db/migrations/operations/__pycache__/base.cpython-310.pyc,, +django/db/migrations/operations/__pycache__/fields.cpython-310.pyc,, +django/db/migrations/operations/__pycache__/models.cpython-310.pyc,, +django/db/migrations/operations/__pycache__/special.cpython-310.pyc,, +django/db/migrations/operations/base.py,sha256=-wdWlbVLtUGeOeWKyuQ67R3HCx_jd0ausstbJcBT4QQ,5082 +django/db/migrations/operations/fields.py,sha256=d48jg79ZfPGwHBBJnKXEmKQXcbx-XpOOSKIFW4rMLWE,12633 +django/db/migrations/operations/models.py,sha256=MNc0bHWIwN0J7AZzhucpCWSrGhVMtnCVGStvBcTtwXs,33452 +django/db/migrations/operations/special.py,sha256=3Zbya6B1nEjvIwhQLoFR8kGBZUlc26kgBxX7XS3aeFQ,7831 +django/db/migrations/optimizer.py,sha256=c0JZ5FGltD_gmh20e5SR6A21q_De6rUKfkAJKwmX4Ks,3255 +django/db/migrations/questioner.py,sha256=QRw_8XrD3RmPf25ZUisqE7TXIBoBoP7p5Y4r0K9nGOE,10158 +django/db/migrations/recorder.py,sha256=36vtix99DAFnWgKQYnj4G8VQwNfOQUP2OTsC_afAPNM,3535 +django/db/migrations/serializer.py,sha256=2Ffq8uKPxRDK_qHW_Skm8CMj1_O1oUilqpE0nhLFjDo,13303 +django/db/migrations/state.py,sha256=4QJtorTt9nYVRuplTkSO85yL3XjDC219mrxd4iZG7ZM,39723 +django/db/migrations/utils.py,sha256=uas_tahI8e6HgNL4NdqLK1OdCXgqcwrxs-85_jdezbU,4320 +django/db/migrations/writer.py,sha256=KqsYN3bDTjGWnuvVvkAj06qk2lhFQLkaWsr9cW-oVYI,11458 +django/db/models/__init__.py,sha256=CB0CfDP1McdMRNfGuDs1OaJ7Xw-br2tC_EIjTcH51X4,2774 +django/db/models/__pycache__/__init__.cpython-310.pyc,, +django/db/models/__pycache__/aggregates.cpython-310.pyc,, +django/db/models/__pycache__/base.cpython-310.pyc,, +django/db/models/__pycache__/constants.cpython-310.pyc,, +django/db/models/__pycache__/constraints.cpython-310.pyc,, +django/db/models/__pycache__/deletion.cpython-310.pyc,, +django/db/models/__pycache__/enums.cpython-310.pyc,, +django/db/models/__pycache__/expressions.cpython-310.pyc,, +django/db/models/__pycache__/indexes.cpython-310.pyc,, +django/db/models/__pycache__/lookups.cpython-310.pyc,, +django/db/models/__pycache__/manager.cpython-310.pyc,, +django/db/models/__pycache__/options.cpython-310.pyc,, +django/db/models/__pycache__/query.cpython-310.pyc,, +django/db/models/__pycache__/query_utils.cpython-310.pyc,, +django/db/models/__pycache__/signals.cpython-310.pyc,, +django/db/models/__pycache__/utils.cpython-310.pyc,, +django/db/models/aggregates.py,sha256=-9URmsgm6NcNuQ6exTm6LpuN7c_5pPKZQZu27S3_wn8,6941 +django/db/models/base.py,sha256=aOzl5y4Wjwc5No9XRIhNypQOKEbr1BzIMn2_8Dce8SI,94597 +django/db/models/constants.py,sha256=WtejyxsiW2HplCEPgmQt1CuMYty6-43akCksKfr5nIk,117 +django/db/models/constraints.py,sha256=L3G68J_56wzMTZl--68yOLmSSgIdty76bLLIjyPOo8w,10322 +django/db/models/deletion.py,sha256=5VBdEN8zw7vC-balbAxsYE5kZVgM3l5QYrbVmDEXNgg,20475 +django/db/models/enums.py,sha256=Erf-SMu9CD1aZfq4xct3WdoOjjMIZp_vlja6FyJQfyw,2804 +django/db/models/expressions.py,sha256=vE1YOsCniSazX7g9cI69oSgxAIzJjqjOqPxS3GhIKHg,54979 +django/db/models/fields/__init__.py,sha256=FlWwwqaeWMeZK1FkUv1EQOA57poE88UHE7I8fankrdo,93131 +django/db/models/fields/__pycache__/__init__.cpython-310.pyc,, +django/db/models/fields/__pycache__/files.cpython-310.pyc,, +django/db/models/fields/__pycache__/json.cpython-310.pyc,, +django/db/models/fields/__pycache__/mixins.cpython-310.pyc,, +django/db/models/fields/__pycache__/proxy.cpython-310.pyc,, +django/db/models/fields/__pycache__/related.cpython-310.pyc,, +django/db/models/fields/__pycache__/related_descriptors.cpython-310.pyc,, +django/db/models/fields/__pycache__/related_lookups.cpython-310.pyc,, +django/db/models/fields/__pycache__/reverse_related.cpython-310.pyc,, +django/db/models/fields/files.py,sha256=gNA62GW-O4X3gtAZBLtl97IwyhdMCmlVhAv0ON9s9qc,18764 +django/db/models/fields/json.py,sha256=ORKD8GVQw9TPrKu4o8VuhlTpuH61EyyYFiYxm_1ZI9w,19542 +django/db/models/fields/mixins.py,sha256=AfnqL5l3yXQmYh9sW35MPFy9AvKjA7SarXijXfd68J8,1823 +django/db/models/fields/proxy.py,sha256=eFHyl4gRTqocjgd6nID9UlQuOIppBA57Vcr71UReTAs,515 +django/db/models/fields/related.py,sha256=4JrPOlyNVUN59sxdDwpM__ibA5QoIEg81A8oQrN3JRw,74943 +django/db/models/fields/related_descriptors.py,sha256=N1BclSaQTSmpX9szmvw2hHTrUIDJ4lkpLTfMUA3Pk1o,56866 +django/db/models/fields/related_lookups.py,sha256=Wgsc93Een1791coJ1lRQKL0KjtGv_VuOpSMltP9PNSU,7682 +django/db/models/fields/reverse_related.py,sha256=dUjBABohT76zLs0iXRZmqopD8I1g6I0DNyYLivwdHe8,11571 +django/db/models/functions/__init__.py,sha256=aglCm_JtzDYk2KmxubDN_78CGG3JCfRWnfJ74Oj5YJ4,2658 +django/db/models/functions/__pycache__/__init__.cpython-310.pyc,, +django/db/models/functions/__pycache__/comparison.cpython-310.pyc,, +django/db/models/functions/__pycache__/datetime.cpython-310.pyc,, +django/db/models/functions/__pycache__/math.cpython-310.pyc,, +django/db/models/functions/__pycache__/mixins.cpython-310.pyc,, +django/db/models/functions/__pycache__/text.cpython-310.pyc,, +django/db/models/functions/__pycache__/window.cpython-310.pyc,, +django/db/models/functions/comparison.py,sha256=1PAS7MopA64-U1yEzk-pFpqsJF8kqCoiROuEeV_RRjA,8159 +django/db/models/functions/datetime.py,sha256=GrUURwqW4XJEsNCVZN57qj7mE1zijmgjHR-_R2ErDfE,13225 +django/db/models/functions/math.py,sha256=1MMhlAzVYjIbC2kuuG0wzSQ21aXvgp7OlqMnfPG5y7Q,6104 +django/db/models/functions/mixins.py,sha256=04MuLCiXw4DYDx0kRU3g_QZcOOCbttAkFEa4WtwGeao,2229 +django/db/models/functions/text.py,sha256=nukaAx3ZAOPQoBFvZ4a3zVLkwqztLHI0ZSywuLOPth8,10605 +django/db/models/functions/window.py,sha256=g4fryay1tLQCpZRfmPQhrTiuib4RvPqtwFdodlLbi98,2841 +django/db/models/indexes.py,sha256=4kUVubVDGphZA2y5RVkudeOmnZvE4iAcEJT5zaKW-c8,11706 +django/db/models/lookups.py,sha256=5LpshYtSvaGCalW0EtfKKR-GqDXKTqcgqWE6nG_LV3U,25005 +django/db/models/manager.py,sha256=bTLdM0ed5kE7T5QUtLLx2lvhg_KFxBzD5I__Ryznzxo,6917 +django/db/models/options.py,sha256=8iSGfRP739wI5mIk8mERbXb0fPhmYVIPtqgcnNJSbUo,38097 +django/db/models/query.py,sha256=gWuS_K81GemQJj9R6_T2filYkMi7Cx6NDW-fFVS61tQ,88558 +django/db/models/query_utils.py,sha256=nVSdyCJULwzYS6LtZr0vOogb3Fjnbl2w_BJIs0vCJts,11690 +django/db/models/signals.py,sha256=mG6hxVWugr_m0ugTU2XAEMiqlu2FJ4CBuGa34dLJvEQ,1622 +django/db/models/sql/__init__.py,sha256=Syx0wsbb0hqxNffPOFITCgRMwZfSECpk9MgY7cS26Jk,229 +django/db/models/sql/__pycache__/__init__.cpython-310.pyc,, +django/db/models/sql/__pycache__/compiler.cpython-310.pyc,, +django/db/models/sql/__pycache__/constants.cpython-310.pyc,, +django/db/models/sql/__pycache__/datastructures.cpython-310.pyc,, +django/db/models/sql/__pycache__/query.cpython-310.pyc,, +django/db/models/sql/__pycache__/subqueries.cpython-310.pyc,, +django/db/models/sql/__pycache__/where.cpython-310.pyc,, +django/db/models/sql/compiler.py,sha256=rw0SCRgdhsbl1Ptf0LqJND2BASvfs61k2PJOwBiJAC0,79564 +django/db/models/sql/constants.py,sha256=usb1LSh9WNGPsurWAGppDkV0wYJJg5GEegKibQdS718,533 +django/db/models/sql/datastructures.py,sha256=cg4EexjiRimHEzgAuvMm3QN9qqmklPu37Zf1ONc0jFQ,7180 +django/db/models/sql/query.py,sha256=Qb_i1uhWhI2sRRom_83Cxaw9JDffUlam9gjAfgO4Cfw,113999 +django/db/models/sql/subqueries.py,sha256=XvD-2xEKJFzCxWE53rmA-OI9IT-C9WjRSUJjoFZ6HbA,5792 +django/db/models/sql/where.py,sha256=_W2lYuyC1VjSAu93y_kHI62AMGylrWq2Ro2PqnLwGds,9542 +django/db/models/utils.py,sha256=wRPcaaZbElvqmPWU30paM_KIh-0ycMP7R1occhVgwoU,1612 +django/db/transaction.py,sha256=cBt1AO_kx_hEphb3qP-KV1UxD20octqFJWNFVuydmYM,12278 +django/db/utils.py,sha256=Qf28qzIodJUzr9fmElkRSFnvtoaRzcYCAonF8fKvQy4,9834 +django/dispatch/__init__.py,sha256=qP203zNwjaolUFnXLNZHnuBn7HNzyw9_JkODECRKZbc,286 +django/dispatch/__pycache__/__init__.cpython-310.pyc,, +django/dispatch/__pycache__/dispatcher.cpython-310.pyc,, +django/dispatch/dispatcher.py,sha256=hMPMYVDCkQuUfY1D3XVyP2CqSQDhEHMgp25a-RytTMs,10793 +django/dispatch/license.txt,sha256=VABMS2BpZOvBY68W0EYHwW5Cj4p4oCb-y1P3DAn0qU8,1743 +django/forms/__init__.py,sha256=S6ckOMmvUX-vVST6AC-M8BzsfVQwuEUAdHWabMN-OGI,368 +django/forms/__pycache__/__init__.cpython-310.pyc,, +django/forms/__pycache__/boundfield.cpython-310.pyc,, +django/forms/__pycache__/fields.cpython-310.pyc,, +django/forms/__pycache__/forms.cpython-310.pyc,, +django/forms/__pycache__/formsets.cpython-310.pyc,, +django/forms/__pycache__/models.cpython-310.pyc,, +django/forms/__pycache__/renderers.cpython-310.pyc,, +django/forms/__pycache__/utils.cpython-310.pyc,, +django/forms/__pycache__/widgets.cpython-310.pyc,, +django/forms/boundfield.py,sha256=IHMcz-omizXY32A_9Pc5w5L6kU8wwpGKTawujf5ew5w,11280 +django/forms/fields.py,sha256=WrV8UteJcY0yo8OoC86019lpLpEzk_7lAomp_wSYBp0,47957 +django/forms/forms.py,sha256=_rIT1KeXiyi7xaxhsSHIiNfaaQs7Fh9vtHWzu3ZNRds,20494 +django/forms/formsets.py,sha256=QtjOhG3M-0lNpUufPg_h5PAbXQ9wYke1saaMw6Ip3DQ,20624 +django/forms/jinja2/django/forms/attrs.html,sha256=TD0lNK-ohDjb_bWg1Kosdn4kU01B_M0_C19dp9kYJqo,165 +django/forms/jinja2/django/forms/default.html,sha256=stPE5cj2dGb6pxqKLtgDHPr14Qr6pcr4i_s2lCZDFF8,40 +django/forms/jinja2/django/forms/errors/dict/default.html,sha256=1DLQf0Czjr5V4cghQOyJr3v34G2ClF0RAOc-H7GwXUE,49 +django/forms/jinja2/django/forms/errors/dict/text.txt,sha256=E7eqEWc6q2_kLyc9k926klRe2mPp4O2VqG-2_MliYaU,113 +django/forms/jinja2/django/forms/errors/dict/ul.html,sha256=65EYJOqDAn7-ca7FtjrcdbXygLE-RA_IJQTltO7qS1Q,137 +django/forms/jinja2/django/forms/errors/list/default.html,sha256=q41d4u6XcxDL06gRAVdU021kM_iFLIt5BuYa-HATOWE,49 +django/forms/jinja2/django/forms/errors/list/text.txt,sha256=VVbLrGMHcbs1hK9-2v2Y6SIoH9qRMtlKzM6qzLVAFyE,52 +django/forms/jinja2/django/forms/errors/list/ul.html,sha256=AwXfGxnos6llX44dhxMChz6Kk6VStAJiNzUpSLN8_y4,119 +django/forms/jinja2/django/forms/formsets/default.html,sha256=VS7142h_1WElYa58vKdd9vfQiwaRxrQLyatBAI22T3U,77 +django/forms/jinja2/django/forms/formsets/p.html,sha256=HzEX7XdSDt9owDkYJvBdFIETeU9RDbXc1e4R2YEt6ec,84 +django/forms/jinja2/django/forms/formsets/table.html,sha256=L9B4E8lR0roTr7dBoMiUlekuMbO-3y4_b4NHm6Oy_Vg,88 +django/forms/jinja2/django/forms/formsets/ul.html,sha256=ANvMWb6EeFAtLPDTr61IeI3-YHtAYZCT_zmm-_y-5Oc,85 +django/forms/jinja2/django/forms/label.html,sha256=t1MriYEm7v7uZ15Oxk2BgU5Rz5ZahHC0yHe7EPx9UU8,139 +django/forms/jinja2/django/forms/p.html,sha256=fQJWWpBV4WgggOA-KULIY6vIIPTHNVlkfj9yOngfOOY,673 +django/forms/jinja2/django/forms/table.html,sha256=B6EEQIJDDpc2SHC5qJzOZylzjmLVA1IWzOQWzzvRZA8,814 +django/forms/jinja2/django/forms/ul.html,sha256=U6aaYi-Wb66KcLhRGJ_GeGc5TQyeUK9LKLTw4a8utoE,712 +django/forms/jinja2/django/forms/widgets/attrs.html,sha256=_J2P-AOpHFhIwaqCNcrJFxEY4s-KPdy0Wcq0KlarIG0,172 +django/forms/jinja2/django/forms/widgets/checkbox.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/checkbox_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/jinja2/django/forms/widgets/checkbox_select.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/jinja2/django/forms/widgets/clearable_file_input.html,sha256=h5_tWYnKRjGTYkzOq6AfDpkffj31DdEolpdtInilitM,511 +django/forms/jinja2/django/forms/widgets/date.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/datetime.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/file.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/hidden.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/input.html,sha256=u12fZde-ugkEAAkPAtAfSxwGQmYBkXkssWohOUs-xoE,172 +django/forms/jinja2/django/forms/widgets/input_option.html,sha256=PyRNn9lmE9Da0-RK37zW4yJZUSiJWgIPCU9ou5oUC28,219 +django/forms/jinja2/django/forms/widgets/multiple_hidden.html,sha256=T54-n1ZeUlTd-svM3C4tLF42umKM0R5A7fdfsdthwkA,54 +django/forms/jinja2/django/forms/widgets/multiple_input.html,sha256=voM3dqu69R0Z202TmCgMFM6toJp7FgFPVvbWY9WKEAU,395 +django/forms/jinja2/django/forms/widgets/multiwidget.html,sha256=pr-MxRyucRxn_HvBGZvbc3JbFyrAolbroxvA4zmPz2Y,86 +django/forms/jinja2/django/forms/widgets/number.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/password.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/jinja2/django/forms/widgets/radio_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/jinja2/django/forms/widgets/select.html,sha256=ESyDzbLTtM7-OG34EuSUnvxCtyP5IrQsZh0jGFrIdEA,365 +django/forms/jinja2/django/forms/widgets/select_date.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/select_option.html,sha256=tNa1D3G8iy2ZcWeKyI-mijjDjRmMaqSo-jnAR_VS3Qc,110 +django/forms/jinja2/django/forms/widgets/splitdatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/splithiddendatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/text.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/textarea.html,sha256=Av1Y-hpXUU2AjrhnUivgZFKNBLdwCSZSeuSmCqmCkDA,145 +django/forms/jinja2/django/forms/widgets/time.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/url.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/models.py,sha256=eZfIkvhqJNqJlsdbkDGT44QMB8CVKl5qf7RWEoFYL_8,60082 +django/forms/renderers.py,sha256=k8f8m6JqcF25Fbw83kNPcJP_KJowhsVcexXPTXLcsOo,1950 +django/forms/templates/django/forms/attrs.html,sha256=UFPgCXXCAkbumxZE1NM-aJVE4VCe2RjCrHLNseibv3I,165 +django/forms/templates/django/forms/default.html,sha256=stPE5cj2dGb6pxqKLtgDHPr14Qr6pcr4i_s2lCZDFF8,40 +django/forms/templates/django/forms/errors/dict/default.html,sha256=tFtwfHlkOY_XaKjoUPsWshiSWT5olxm3kDElND-GQtQ,48 +django/forms/templates/django/forms/errors/dict/text.txt,sha256=E7eqEWc6q2_kLyc9k926klRe2mPp4O2VqG-2_MliYaU,113 +django/forms/templates/django/forms/errors/dict/ul.html,sha256=65EYJOqDAn7-ca7FtjrcdbXygLE-RA_IJQTltO7qS1Q,137 +django/forms/templates/django/forms/errors/list/default.html,sha256=Kmx1nwrzQ49MaP80Gd17GC5TQH4B7doWa3I3azXvoHA,48 +django/forms/templates/django/forms/errors/list/text.txt,sha256=VVbLrGMHcbs1hK9-2v2Y6SIoH9qRMtlKzM6qzLVAFyE,52 +django/forms/templates/django/forms/errors/list/ul.html,sha256=5kt2ckbr3esK0yoPzco2EB0WzS8MvGzau_rAcomB508,118 +django/forms/templates/django/forms/formsets/default.html,sha256=VS7142h_1WElYa58vKdd9vfQiwaRxrQLyatBAI22T3U,77 +django/forms/templates/django/forms/formsets/p.html,sha256=qkoHKem-gb3iqvTtROBcHNJqI-RoUwLHUvJC6EoHg-I,82 +django/forms/templates/django/forms/formsets/table.html,sha256=N0G9GETzJfV16wUesvdrNMDwc8Fhh6durrmkHUPeDZY,86 +django/forms/templates/django/forms/formsets/ul.html,sha256=bGQpjbpKwMahyiIP4-2p3zg3yJP-pN1A48yCqhHdw7o,83 +django/forms/templates/django/forms/label.html,sha256=Azlf6IUf8tPWRlmhpY4upnVjHYhmJTq3_adlhWxEBro,114 +django/forms/templates/django/forms/p.html,sha256=N3sx-PBlt3Trs6lfjE4oQa3owxhM3rqXTy-AQg9Hr44,684 +django/forms/templates/django/forms/table.html,sha256=zuLIyEOeNzV7aeIjIqIwM4XfZP_SlEc_OZ_x87rbOhY,825 +django/forms/templates/django/forms/ul.html,sha256=K8kCd5q4nD-_ChR47s3q5fkHd8BHrHAa830-5H8aXVI,723 +django/forms/templates/django/forms/widgets/attrs.html,sha256=9ylIPv5EZg-rx2qPLgobRkw6Zq_WJSM8kt106PpSYa0,172 +django/forms/templates/django/forms/widgets/checkbox.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/checkbox_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/templates/django/forms/widgets/checkbox_select.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/templates/django/forms/widgets/clearable_file_input.html,sha256=h5_tWYnKRjGTYkzOq6AfDpkffj31DdEolpdtInilitM,511 +django/forms/templates/django/forms/widgets/date.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/datetime.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/file.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/hidden.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/input.html,sha256=dwzzrLocGLZQIaGe-_X8k7z87jV6AFtn28LilnUnUH0,189 +django/forms/templates/django/forms/widgets/input_option.html,sha256=PyRNn9lmE9Da0-RK37zW4yJZUSiJWgIPCU9ou5oUC28,219 +django/forms/templates/django/forms/widgets/multiple_hidden.html,sha256=T54-n1ZeUlTd-svM3C4tLF42umKM0R5A7fdfsdthwkA,54 +django/forms/templates/django/forms/widgets/multiple_input.html,sha256=jxEWRqV32a73340eQ0uIn672Xz5jW9qm3V_srByLEd0,426 +django/forms/templates/django/forms/widgets/multiwidget.html,sha256=slk4AgCdXnVmFvavhjVcsza0quTOP2LG50D8wna0dw0,117 +django/forms/templates/django/forms/widgets/number.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/password.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/templates/django/forms/widgets/radio_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/templates/django/forms/widgets/select.html,sha256=7U0RzjeESG87ENzQjPRUF71gvKvGjVVvXcpsW2-BTR4,384 +django/forms/templates/django/forms/widgets/select_date.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/select_option.html,sha256=N_psd0JYCqNhx2eh2oyvkF2KU2dv7M9mtMw_4BLYq8A,127 +django/forms/templates/django/forms/widgets/splitdatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/splithiddendatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/text.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/textarea.html,sha256=Av1Y-hpXUU2AjrhnUivgZFKNBLdwCSZSeuSmCqmCkDA,145 +django/forms/templates/django/forms/widgets/time.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/url.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/utils.py,sha256=RHMTeA7rsJqAMx5D52uLtQ24rmzAWnhrP7VYa5xq30k,7178 +django/forms/widgets.py,sha256=NYfQ9xKzUMpNmQDlkhkZhVk-Dvk7-JyEPgpCIbs3-Ds,38406 +django/http/__init__.py,sha256=kaczUV9rEkyRGlun8wzsmdGwdtOoFS-1Rpy7OV-e8Bs,1118 +django/http/__pycache__/__init__.cpython-310.pyc,, +django/http/__pycache__/cookie.cpython-310.pyc,, +django/http/__pycache__/multipartparser.cpython-310.pyc,, +django/http/__pycache__/request.cpython-310.pyc,, +django/http/__pycache__/response.cpython-310.pyc,, +django/http/cookie.py,sha256=t7yGORGClUnCYVKQqyLBlEYsxQLLHn9crsMSWqK_Eic,679 +django/http/multipartparser.py,sha256=lwny_1GnNjyzeKlNduvIxMYLTktOgH0u8pcD_15x_zo,26910 +django/http/request.py,sha256=McMG8tMBx0pO5UAUYFTD4GZFj1RL4OhtnqhsvSzow4A,24724 +django/http/response.py,sha256=jgTJRv3WH9etrftemZGkkmZILaDJQxB4k2mCF-MRJ-c,21855 +django/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/middleware/__pycache__/__init__.cpython-310.pyc,, +django/middleware/__pycache__/cache.cpython-310.pyc,, +django/middleware/__pycache__/clickjacking.cpython-310.pyc,, +django/middleware/__pycache__/common.cpython-310.pyc,, +django/middleware/__pycache__/csrf.cpython-310.pyc,, +django/middleware/__pycache__/gzip.cpython-310.pyc,, +django/middleware/__pycache__/http.cpython-310.pyc,, +django/middleware/__pycache__/locale.cpython-310.pyc,, +django/middleware/__pycache__/security.cpython-310.pyc,, +django/middleware/cache.py,sha256=CL52am97oatuGuOPOVb3MNwJGBxlcfC-d6GhjD36pP8,7941 +django/middleware/clickjacking.py,sha256=KlShjOPFYmouHDC8vwbxV0MuvhLZpECeWmYtEaAJX-U,1697 +django/middleware/common.py,sha256=9G8G40Jd6vNeSVQfu1bKO-y2Rd550Lsm8ohr_fDeAnU,7603 +django/middleware/csrf.py,sha256=iz58TxttDSBxllKrnWfEpjDWZTS2lU7UZwFoU0PP3no,18518 +django/middleware/gzip.py,sha256=P_gEykSWFCwAhcsm4bUB8bvv6oH7B3gl47O3ezOACsQ,2143 +django/middleware/http.py,sha256=RqXN9Kp6GEh8j_ub7YXRi6W2_CKZTZEyAPpFUzeNPBs,1616 +django/middleware/locale.py,sha256=CV8aerSUWmO6cJQ6IrD5BzT3YlOxYNIqFraCqr8DoY4,3442 +django/middleware/security.py,sha256=AjcJ338onziA0HPXsM5WUnIrQkmyW8mpwU0KObaPPUI,2623 +django/shortcuts.py,sha256=UniuxOq4cpBYCN-spLkUCFEYmA2SSXsozeS6xM2Lx8w,5009 +django/template/__init__.py,sha256=-hvAhcRO8ydLdjTJJFr6LYoBVCsJq561ebRqE9kYBJs,1845 +django/template/__pycache__/__init__.cpython-310.pyc,, +django/template/__pycache__/autoreload.cpython-310.pyc,, +django/template/__pycache__/base.cpython-310.pyc,, +django/template/__pycache__/context.cpython-310.pyc,, +django/template/__pycache__/context_processors.cpython-310.pyc,, +django/template/__pycache__/defaultfilters.cpython-310.pyc,, +django/template/__pycache__/defaulttags.cpython-310.pyc,, +django/template/__pycache__/engine.cpython-310.pyc,, +django/template/__pycache__/exceptions.cpython-310.pyc,, +django/template/__pycache__/library.cpython-310.pyc,, +django/template/__pycache__/loader.cpython-310.pyc,, +django/template/__pycache__/loader_tags.cpython-310.pyc,, +django/template/__pycache__/response.cpython-310.pyc,, +django/template/__pycache__/smartif.cpython-310.pyc,, +django/template/__pycache__/utils.cpython-310.pyc,, +django/template/autoreload.py,sha256=SqSite-APbLWmnaYkvz2btuQSQeIlZkyKadjWniYl5U,1756 +django/template/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/template/backends/__pycache__/__init__.cpython-310.pyc,, +django/template/backends/__pycache__/base.cpython-310.pyc,, +django/template/backends/__pycache__/django.cpython-310.pyc,, +django/template/backends/__pycache__/dummy.cpython-310.pyc,, +django/template/backends/__pycache__/jinja2.cpython-310.pyc,, +django/template/backends/__pycache__/utils.cpython-310.pyc,, +django/template/backends/base.py,sha256=leXk6e3XTeD8YYZ4jzGYP9bqKs2HdZupz3C1b-XcImE,2752 +django/template/backends/django.py,sha256=CXaMq1tocKHGFVNnMMzvDYnzmH78NhuublsS1sX2NuE,4198 +django/template/backends/dummy.py,sha256=XAtI1wmVkGJDfVOz-ENr4voPWrfY3h4sW0CjMqoiCK4,1752 +django/template/backends/jinja2.py,sha256=60KCBBNAF5scVuxpU-saKqE8Y7--VgkNnOkcPg3r1Nk,4083 +django/template/backends/utils.py,sha256=z5X_lxKa9qL4KFDVeai-FmsewU3KLgVHO8y-gHLiVts,424 +django/template/base.py,sha256=ddzWYrFyKMhrB_QEd1yeEofaNgk8kbUbJIO2NgYuU7k,40007 +django/template/context.py,sha256=67y6QyhjnwxKx37h4vORKBSNao1tYAf95LhXszZ4O10,9004 +django/template/context_processors.py,sha256=PMIuGUE1iljf5L8oXggIdvvFOhCLJpASdwd39BMdjBE,2480 +django/template/defaultfilters.py,sha256=EYeb9eTizxhERrdpMEeF3iqBVphtvSpxInZBYyk2Mk0,27924 +django/template/defaulttags.py,sha256=mgLeENndoSN-AQ-u5t-rC91C0fV_biVgU7Dm0OPyc00,48461 +django/template/engine.py,sha256=BrFAgOZc5ki4i94DkY_1S7PRNhmy4d5_Mf71VhqfPVw,7765 +django/template/exceptions.py,sha256=rqG3_qZq31tUHbmtZD-MIu0StChqwaFejFFpR4u7th4,1342 +django/template/library.py,sha256=3tel6vxobLwvJPXfdSv_rnm_WVSYsaQaaQel5HoIKgM,13596 +django/template/loader.py,sha256=PVFUUtC5WgiRVVTilhQ6NFZnvjly6sP9s7anFmMoKdo,2054 +django/template/loader_tags.py,sha256=EDqLQHmeo29shyupM8mzKMLwEqHOr1q2Kmf1Fbq3yUw,13153 +django/template/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/template/loaders/__pycache__/__init__.cpython-310.pyc,, +django/template/loaders/__pycache__/app_directories.cpython-310.pyc,, +django/template/loaders/__pycache__/base.cpython-310.pyc,, +django/template/loaders/__pycache__/cached.cpython-310.pyc,, +django/template/loaders/__pycache__/filesystem.cpython-310.pyc,, +django/template/loaders/__pycache__/locmem.cpython-310.pyc,, +django/template/loaders/app_directories.py,sha256=sQpVXKYpnKr9Rl1YStNca-bGIQHcOkSnmm1l2qRGFVE,312 +django/template/loaders/base.py,sha256=Y5V4g0ly9GuNe7BQxaJSMENJnvxzXJm7XhSTxzfFM0s,1636 +django/template/loaders/cached.py,sha256=bDwkWYPgbvprU_u9f9w9oNYpSW_j9b7so_mlKzp9-N4,3716 +django/template/loaders/filesystem.py,sha256=f4silD7WWhv3K9QySMgW7dlGGNwwYAcHCMSTFpwiiXY,1506 +django/template/loaders/locmem.py,sha256=t9p0GYF2VHf4XG6Gggp0KBmHkdIuSKuLdiVXMVb2iHs,672 +django/template/response.py,sha256=UAU-aM7mn6cbGOIJuurn4EE5ITdcAqSFgKD5RXFms4w,5584 +django/template/smartif.py,sha256=eTzcnzPBdbkoiP8j9q_sa_47SoLLMqYdLKC3z0TbjpA,6407 +django/template/utils.py,sha256=C2fRN04KCQR-ZnsvqIouC3_jVjMRncJ-Bg_OS3jeq8I,3628 +django/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/templatetags/__pycache__/__init__.cpython-310.pyc,, +django/templatetags/__pycache__/cache.cpython-310.pyc,, +django/templatetags/__pycache__/i18n.cpython-310.pyc,, +django/templatetags/__pycache__/l10n.cpython-310.pyc,, +django/templatetags/__pycache__/static.cpython-310.pyc,, +django/templatetags/__pycache__/tz.cpython-310.pyc,, +django/templatetags/cache.py,sha256=OpiR0FQBsJC9p73aEcXQQamSySR2hwIx2wEiuD925pg,3545 +django/templatetags/i18n.py,sha256=HADC6IaSWefGG-aGN7RSX67tQZ8xP77Wfh9f1KrjI48,19896 +django/templatetags/l10n.py,sha256=F6pnC2_7xNCKfNi0mcfzYQY8pzrQ9enK7_6-ZWzRu3A,1723 +django/templatetags/static.py,sha256=W4Rqt3DN_YtXe6EoqO-GLy7WR7xd7z0JsoX-VT0vvjc,4730 +django/templatetags/tz.py,sha256=O2Tk50xdMHEfmwbm_99LKpdTVGVYK23gA6CmBW2Hpuw,6015 +django/test/__init__.py,sha256=X12C98lKN5JW1-wms7B6OaMTo-Li90waQpjfJE1V3AE,834 +django/test/__pycache__/__init__.cpython-310.pyc,, +django/test/__pycache__/client.cpython-310.pyc,, +django/test/__pycache__/html.cpython-310.pyc,, +django/test/__pycache__/runner.cpython-310.pyc,, +django/test/__pycache__/selenium.cpython-310.pyc,, +django/test/__pycache__/signals.cpython-310.pyc,, +django/test/__pycache__/testcases.cpython-310.pyc,, +django/test/__pycache__/utils.cpython-310.pyc,, +django/test/client.py,sha256=TzCGZ49OuFxPbG6Xsb9EXhdE67ENLo-rlYMcqaRpJd4,39134 +django/test/html.py,sha256=K8vgdoHMGpy5XRx6R7CAMR3uyfIcA_jpge8QNSPxD30,9000 +django/test/runner.py,sha256=640BlWuMHffdb5LBuZuot9PoKdzI6wgtLsQSlMKh5ug,40223 +django/test/selenium.py,sha256=0JPzph8lyk1i9taDCgsOvLhkxSh-jR-gvM4pPhdTGzc,5129 +django/test/signals.py,sha256=uILgP-mc9okVF9U_-uh0I1qOX2p2FIjUV2wPE4ihrPU,6878 +django/test/testcases.py,sha256=xOZVDZpIRVO9yEONvp6KehXWqUWYfdoPJG1DoACzcC8,68706 +django/test/utils.py,sha256=DEzdS2fKRpEvW5TimfTzwTQObIlqdinNQ9h69UIb8k0,32871 +django/urls/__init__.py,sha256=BHyBIOD3E4_3Ng27SpXnRmqO3IzUqvBLCE4TTfs4wNs,1079 +django/urls/__pycache__/__init__.cpython-310.pyc,, +django/urls/__pycache__/base.cpython-310.pyc,, +django/urls/__pycache__/conf.cpython-310.pyc,, +django/urls/__pycache__/converters.cpython-310.pyc,, +django/urls/__pycache__/exceptions.cpython-310.pyc,, +django/urls/__pycache__/resolvers.cpython-310.pyc,, +django/urls/__pycache__/utils.cpython-310.pyc,, +django/urls/base.py,sha256=0YT_x7hYBKkYV_1RXetdP6gFQKxQci5_bLHoowWPKQA,5703 +django/urls/conf.py,sha256=UkI6NQ5c6t4I_93g9ufAUN5dt5hPhwBTvQtKJKtJbN4,3246 +django/urls/converters.py,sha256=fVO-I8vTHL0H25GyElAYQWwSZtPMMNa9mJ1W-ZQrHyg,1216 +django/urls/exceptions.py,sha256=alLNjkORtAxneC00g4qnRpG5wouOHvJvGbymdpKtG_I,115 +django/urls/resolvers.py,sha256=MpdCwUkGHh964PHewgxwmFCyn7a0CocIygv44j-Xf6k,30684 +django/urls/utils.py,sha256=MSSGo9sAlnsDG3fDt2zayhXwYMCL4qtBzVjQv8BwemA,2197 +django/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/utils/__pycache__/__init__.cpython-310.pyc,, +django/utils/__pycache__/_os.cpython-310.pyc,, +django/utils/__pycache__/archive.cpython-310.pyc,, +django/utils/__pycache__/asyncio.cpython-310.pyc,, +django/utils/__pycache__/autoreload.cpython-310.pyc,, +django/utils/__pycache__/baseconv.cpython-310.pyc,, +django/utils/__pycache__/cache.cpython-310.pyc,, +django/utils/__pycache__/connection.cpython-310.pyc,, +django/utils/__pycache__/crypto.cpython-310.pyc,, +django/utils/__pycache__/datastructures.cpython-310.pyc,, +django/utils/__pycache__/dateformat.cpython-310.pyc,, +django/utils/__pycache__/dateparse.cpython-310.pyc,, +django/utils/__pycache__/dates.cpython-310.pyc,, +django/utils/__pycache__/datetime_safe.cpython-310.pyc,, +django/utils/__pycache__/deconstruct.cpython-310.pyc,, +django/utils/__pycache__/decorators.cpython-310.pyc,, +django/utils/__pycache__/deprecation.cpython-310.pyc,, +django/utils/__pycache__/duration.cpython-310.pyc,, +django/utils/__pycache__/encoding.cpython-310.pyc,, +django/utils/__pycache__/feedgenerator.cpython-310.pyc,, +django/utils/__pycache__/formats.cpython-310.pyc,, +django/utils/__pycache__/functional.cpython-310.pyc,, +django/utils/__pycache__/hashable.cpython-310.pyc,, +django/utils/__pycache__/html.cpython-310.pyc,, +django/utils/__pycache__/http.cpython-310.pyc,, +django/utils/__pycache__/inspect.cpython-310.pyc,, +django/utils/__pycache__/ipv6.cpython-310.pyc,, +django/utils/__pycache__/itercompat.cpython-310.pyc,, +django/utils/__pycache__/jslex.cpython-310.pyc,, +django/utils/__pycache__/log.cpython-310.pyc,, +django/utils/__pycache__/lorem_ipsum.cpython-310.pyc,, +django/utils/__pycache__/module_loading.cpython-310.pyc,, +django/utils/__pycache__/numberformat.cpython-310.pyc,, +django/utils/__pycache__/regex_helper.cpython-310.pyc,, +django/utils/__pycache__/safestring.cpython-310.pyc,, +django/utils/__pycache__/termcolors.cpython-310.pyc,, +django/utils/__pycache__/text.cpython-310.pyc,, +django/utils/__pycache__/timesince.cpython-310.pyc,, +django/utils/__pycache__/timezone.cpython-310.pyc,, +django/utils/__pycache__/topological_sort.cpython-310.pyc,, +django/utils/__pycache__/tree.cpython-310.pyc,, +django/utils/__pycache__/version.cpython-310.pyc,, +django/utils/__pycache__/xmlutils.cpython-310.pyc,, +django/utils/_os.py,sha256=-_6vh_w0-c2wMUXveE45hj-QHf2HCq5KuWGUkX4_FvI,2310 +django/utils/archive.py,sha256=JExZfmiqSixQ_ujY7UM6sNShVpO5CsF-0hH2qyt44Eo,8086 +django/utils/asyncio.py,sha256=sHogB-77wjWFfKEvkpsPSoC2rb4UnhrQDS1d8GZhUOA,1143 +django/utils/autoreload.py,sha256=sZCFfpy_O8MhLxzNwauntvpmpIR5djovU3vG_aN9mqU,24847 +django/utils/baseconv.py,sha256=mnIn3_P2jqb8ytiFOiaCjrTFFujeNFT0EkympSmt7Ck,3268 +django/utils/cache.py,sha256=A1kU_HT7K7mfTQQbEVcJOiVZKBgy2553LnGok4-Kyrg,16459 +django/utils/connection.py,sha256=XYivlt9CvkX8mQTp68AAfUZoS8gyGEWNj2fx_C9AyYk,2239 +django/utils/crypto.py,sha256=29fvZcWMlx7WwmIAwjf0NB1LaOpUbQQ1BzN-86AEHvk,2661 +django/utils/datastructures.py,sha256=d1l_t4LRjgqR388sgJTZbIhb2-u4kEn4hRdQKoKlFT0,10072 +django/utils/dateformat.py,sha256=AeS8k0SuLOFAT-tGpvhl4P6XF0bsA7bRnGPGBU3Qkj4,10257 +django/utils/dateparse.py,sha256=aWow4S2Owf_Hb4b3ldcoBdhZxaiZGQNKeJHTYu7IoSc,5531 +django/utils/dates.py,sha256=zHUHeOkxuo53rTvHG3dWMLRfVyfaMLBIt5xmA4E_Ids,2179 +django/utils/datetime_safe.py,sha256=KG5hS-S4NCeZ0IAwLd30gvsOe28rHgN0TbXEe9t3jVw,3106 +django/utils/deconstruct.py,sha256=EgXqmTxSn2pzvuJY08zJhlgRkP7bviGT009qBCuyjHk,1996 +django/utils/decorators.py,sha256=xa6p2egupMJYpcXVFrteTAHT9DiatGm-zGFoQ2nxUOs,6939 +django/utils/deprecation.py,sha256=F04-P92PTYhPiSUhsXDnkRsiA4XwVuwer0Cu95I6VP8,5197 +django/utils/duration.py,sha256=8JFvrrlyMGUUcVqN-7_TR_wi388rZYWsBoqeZZtpUbQ,1248 +django/utils/encoding.py,sha256=IFRvnB0-g9mF1H-AS72_LFIZgCHlo4yl11ZDoBTA_gU,8794 +django/utils/feedgenerator.py,sha256=eRqRqtbvrP4P2ACaOnn54IjV6LTvB5Sl1dTNyffyX_Q,15655 +django/utils/formats.py,sha256=SAXsRmNUy4Vcvu3n8QS-q2zlGYzKRvb0TyFiUt7nWIY,10589 +django/utils/functional.py,sha256=OZZDiFloi40-raEZF-Xa-KrI-UiTkqXPwGfRJyPwru4,14267 +django/utils/hashable.py,sha256=kFbHnVOA4g-rTFI_1oHeNGA0ZEzAlY0vOeGTAeqxz7E,740 +django/utils/html.py,sha256=GYbe55OufSL4sPOajYbQoq7RWwvgq3qs-7qVUZlZMlY,13271 +django/utils/http.py,sha256=iuuM_REZzPzLVcn7z5lJ9zrccAxWrlnwYPkK6F0UxiI,12775 +django/utils/inspect.py,sha256=lhDEOtmSLEub5Jj__MIgW3AyWOEVkaA6doJKKwBhZ6A,2235 +django/utils/ipv6.py,sha256=laDOQe_r4W-oVKLOgQ4aAJxs37n8P3LkH-eeIchJqh4,1333 +django/utils/itercompat.py,sha256=lacIDjczhxbwG4ON_KfG1H6VNPOGOpbRhnVhbedo2CY,184 +django/utils/jslex.py,sha256=LwfwKHNFM1FJt_DmgD1G6U_7GBcAVYDyr9f9KcKC2dE,8040 +django/utils/log.py,sha256=zrskZ1PfvWf6opc32bHxwFfwbSQR6JDzGcyGpOMvjUM,7969 +django/utils/lorem_ipsum.py,sha256=yUtBgKhshftIpPg04pc1IrLpOBydZIf7g0isFCIJZqk,5473 +django/utils/module_loading.py,sha256=Ky3472UpPU2b1cRGCedRhFiqYlH1fFOuDDjiyEAnQxc,3847 +django/utils/numberformat.py,sha256=99DahMpI94hgBALt00-VGaN9NMYjJfb4WHcU9tnewSQ,3733 +django/utils/regex_helper.py,sha256=gv0YfkofciCI4iptv_6GEwyLyVZg1_HFaNRwn3DuH4c,12771 +django/utils/safestring.py,sha256=FSD9ZDwX2PFhpf2I9y6LFaAFlSkTKGdHfGz5Kl79nA4,1766 +django/utils/termcolors.py,sha256=vvQbUH7GsFofGRSiKQwx4YvgE4yZMtAGRVz9QPDfisA,7386 +django/utils/text.py,sha256=KzEoBpAt-y6erIblITCfkoPNfiDm7Gm9c32J2OMKi9o,14214 +django/utils/timesince.py,sha256=iHTKSKjPanK3YWtSV5sfZs3cTrDcbnuWYxinIM-6KaQ,3623 +django/utils/timezone.py,sha256=_5qheDG3BUF1QwTLjRrkp_zrwcm_Fb2cEMiaWw6Xk7I,9593 +django/utils/topological_sort.py,sha256=W_xR8enn8cY6W4oM8M2TnoidbbiYZbThfdI6UMI4-gc,1287 +django/utils/translation/__init__.py,sha256=BWLfGwW57kXwWOGpYsp6oIzUvOlPDxr8zk7ho2ZVlno,8889 +django/utils/translation/__pycache__/__init__.cpython-310.pyc,, +django/utils/translation/__pycache__/reloader.cpython-310.pyc,, +django/utils/translation/__pycache__/template.cpython-310.pyc,, +django/utils/translation/__pycache__/trans_null.cpython-310.pyc,, +django/utils/translation/__pycache__/trans_real.cpython-310.pyc,, +django/utils/translation/reloader.py,sha256=oVM0xenn3fraUomMEFucvwlbr5UGYUijWnUn6FL55Zc,1114 +django/utils/translation/template.py,sha256=TOfPNT62RnUbUG64a_6d_VQ7tsDC1_F1TCopw_HwlcA,10549 +django/utils/translation/trans_null.py,sha256=yp82bHt5oqqL95Z5PFoYCZeENOulxzp-IqMmkWz0l9Y,1257 +django/utils/translation/trans_real.py,sha256=-fwtSc5Aklj9HrstzOihRiDxizv3uJhV2O7T6oAFCus,20219 +django/utils/tree.py,sha256=iST3UIX4Hobmlo3YxQETWMPij7l_wsZqVoeOHnyychs,4558 +django/utils/version.py,sha256=yB8khgSxwUmZVeGzud2KwD5CG1LQuNZHRAHElsca-IU,3607 +django/utils/xmlutils.py,sha256=LsggeI4vhln3An_YXNBk2cCwKLQgMe-O_3L--j3o3GM,1172 +django/views/__init__.py,sha256=GIq6CKUBCbGpQVyK4xIoaAUDPrmRvbBPSX_KSHk0Bb4,63 +django/views/__pycache__/__init__.cpython-310.pyc,, +django/views/__pycache__/csrf.cpython-310.pyc,, +django/views/__pycache__/debug.cpython-310.pyc,, +django/views/__pycache__/defaults.cpython-310.pyc,, +django/views/__pycache__/i18n.cpython-310.pyc,, +django/views/__pycache__/static.cpython-310.pyc,, +django/views/csrf.py,sha256=le5ZUjDfQFMYuxHIfkrZm41lbs6_k9YeNpypZHg7nVA,6332 +django/views/debug.py,sha256=s12AU_QjtsmOfc5UYI0-6-W9iH4VJ3vS-88IwQiSkcs,23633 +django/views/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/views/decorators/__pycache__/__init__.cpython-310.pyc,, +django/views/decorators/__pycache__/cache.cpython-310.pyc,, +django/views/decorators/__pycache__/clickjacking.cpython-310.pyc,, +django/views/decorators/__pycache__/common.cpython-310.pyc,, +django/views/decorators/__pycache__/csrf.cpython-310.pyc,, +django/views/decorators/__pycache__/debug.cpython-310.pyc,, +django/views/decorators/__pycache__/gzip.cpython-310.pyc,, +django/views/decorators/__pycache__/http.cpython-310.pyc,, +django/views/decorators/__pycache__/vary.cpython-310.pyc,, +django/views/decorators/cache.py,sha256=MWG5wGtCAW2Onb-jSNxEiGbAeXlX4j_sX1ILuEOa6HU,2340 +django/views/decorators/clickjacking.py,sha256=RuN4sYDOQyvqVMuhG2VzKLpiYJbLSJrzP4uaUrMLQfw,1571 +django/views/decorators/common.py,sha256=EC0OmNVMZdoKb5nXPWiOfQxOU9lCph_ZDwcWw9bMlmg,489 +django/views/decorators/csrf.py,sha256=sz46dXdnsUdVJbRdoMa7bwaRJUQ0_CSGbgrMdBskH8I,2074 +django/views/decorators/debug.py,sha256=MXGthVNjdh8wzX7BepHN6SEniWhziU2tHMRJs7ijjdU,3150 +django/views/decorators/gzip.py,sha256=PtpSGd8BePa1utGqvKMFzpLtZJxpV2_Jej8llw5bCJY,253 +django/views/decorators/http.py,sha256=Loe8PWnfoAZdxhS00G7UchRceM2QAGzNGpZm26_joak,4907 +django/views/decorators/vary.py,sha256=VcBaCDOEjy1CrIy0LnCt2cJdJRnqXgn3B43zmzKuZ80,1089 +django/views/defaults.py,sha256=H742ukDQgQF9mcKKaHZPA6Xk-OZrDkDUw_J_XMSj1z8,4904 +django/views/generic/__init__.py,sha256=VwQKUbBFJktiq5J2fo3qRNzRc0STfcMRPChlLPYAkkE,886 +django/views/generic/__pycache__/__init__.cpython-310.pyc,, +django/views/generic/__pycache__/base.cpython-310.pyc,, +django/views/generic/__pycache__/dates.cpython-310.pyc,, +django/views/generic/__pycache__/detail.cpython-310.pyc,, +django/views/generic/__pycache__/edit.cpython-310.pyc,, +django/views/generic/__pycache__/list.cpython-310.pyc,, +django/views/generic/base.py,sha256=7LZ5EgMcr-FZu96xG2GedUbe6wQ2rY8cNvFGQcKSaLw,8132 +django/views/generic/dates.py,sha256=xwSEF6zsaSl1jUTePs6NPihnOJEWT-j8SST0RG4bco0,26332 +django/views/generic/detail.py,sha256=zrAuhJxrFvNqJLnlvK-NSiRiiONsKKOYFantD7UztwU,6663 +django/views/generic/edit.py,sha256=Gq0E2HTi9KZuIDJHC24tB4VQVRL0qLswqfyA9gRJ210,9747 +django/views/generic/list.py,sha256=KWsT5UOK5jflxn5JFoJCnyJEQXa0fM4talHswzEjzXU,7941 +django/views/i18n.py,sha256=L54knZenhRK1sLXvjDLxI7jjwqYlW-gC8FSE0FsdXJI,11466 +django/views/static.py,sha256=8KkwEayiB8QKBwP-eUOpsgTpTGRMPBascIZWVXz_iC8,4635 +django/views/templates/default_urlconf.html,sha256=VuT3cVYagdn5Kb94DGpfJyZhPpNtgC4HjuY8v8eEq5I,11150 +django/views/templates/technical_404.html,sha256=dJEOimEguJg6g4IhdRPG5HmdMy8D30U-lNI8wC8wwQs,2706 +django/views/templates/technical_500.html,sha256=OwSy7TU-GW-T_DWjDmVCmgYorzL7YFg5KAq_fZqDH2Q,17343 +django/views/templates/technical_500.txt,sha256=7K_RLYW-WerfBxkwg2PmsXnBWtICjVdxcdnJXWjuKoY,3574 diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/REQUESTED b/venv/Lib/site-packages/Django-4.0.6.dist-info/REQUESTED new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/WHEEL b/venv/Lib/site-packages/Django-4.0.6.dist-info/WHEEL new file mode 100644 index 000000000..b552003ff --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.34.2) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/entry_points.txt b/venv/Lib/site-packages/Django-4.0.6.dist-info/entry_points.txt new file mode 100644 index 000000000..22df67eba --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +django-admin = django.core.management:execute_from_command_line + diff --git a/venv/Lib/site-packages/Django-4.0.6.dist-info/top_level.txt b/venv/Lib/site-packages/Django-4.0.6.dist-info/top_level.txt new file mode 100644 index 000000000..d3e4ba564 --- /dev/null +++ b/venv/Lib/site-packages/Django-4.0.6.dist-info/top_level.txt @@ -0,0 +1 @@ +django diff --git a/venv/Lib/site-packages/_distutils_hack/__init__.py b/venv/Lib/site-packages/_distutils_hack/__init__.py new file mode 100644 index 000000000..5f40996a6 --- /dev/null +++ b/venv/Lib/site-packages/_distutils_hack/__init__.py @@ -0,0 +1,128 @@ +import sys +import os +import re +import importlib +import warnings + + +is_pypy = '__pypy__' in sys.builtin_module_names + + +warnings.filterwarnings('ignore', + r'.+ distutils\b.+ deprecated', + DeprecationWarning) + + +def warn_distutils_present(): + if 'distutils' not in sys.modules: + return + if is_pypy and sys.version_info < (3, 7): + # PyPy for 3.6 unconditionally imports distutils, so bypass the warning + # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 + return + warnings.warn( + "Distutils was imported before Setuptools, but importing Setuptools " + "also replaces the `distutils` module in `sys.modules`. This may lead " + "to undesirable behaviors or errors. To avoid these issues, avoid " + "using distutils directly, ensure that setuptools is installed in the " + "traditional way (e.g. not an editable install), and/or make sure " + "that setuptools is always imported before distutils.") + + +def clear_distutils(): + if 'distutils' not in sys.modules: + return + warnings.warn("Setuptools is replacing distutils.") + mods = [name for name in sys.modules if re.match(r'distutils\b', name)] + for name in mods: + del sys.modules[name] + + +def enabled(): + """ + Allow selection of distutils by environment variable. + """ + which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib') + return which == 'local' + + +def ensure_local_distutils(): + clear_distutils() + distutils = importlib.import_module('setuptools._distutils') + distutils.__name__ = 'distutils' + sys.modules['distutils'] = distutils + + # sanity check that submodules load as expected + core = importlib.import_module('distutils.core') + assert '_distutils' in core.__file__, core.__file__ + + +def do_override(): + """ + Ensure that the local copy of distutils is preferred over stdlib. + + See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 + for more motivation. + """ + if enabled(): + warn_distutils_present() + ensure_local_distutils() + + +class DistutilsMetaFinder: + def find_spec(self, fullname, path, target=None): + if path is not None: + return + + method_name = 'spec_for_{fullname}'.format(**locals()) + method = getattr(self, method_name, lambda: None) + return method() + + def spec_for_distutils(self): + import importlib.abc + import importlib.util + + class DistutilsLoader(importlib.abc.Loader): + + def create_module(self, spec): + return importlib.import_module('setuptools._distutils') + + def exec_module(self, module): + pass + + return importlib.util.spec_from_loader('distutils', DistutilsLoader()) + + def spec_for_pip(self): + """ + Ensure stdlib distutils when running under pip. + See pypa/pip#8761 for rationale. + """ + if self.pip_imported_during_build(): + return + clear_distutils() + self.spec_for_distutils = lambda: None + + @staticmethod + def pip_imported_during_build(): + """ + Detect if pip is being imported in a build script. Ref #2355. + """ + import traceback + return any( + frame.f_globals['__file__'].endswith('setup.py') + for frame, line in traceback.walk_stack(None) + ) + + +DISTUTILS_FINDER = DistutilsMetaFinder() + + +def add_shim(): + sys.meta_path.insert(0, DISTUTILS_FINDER) + + +def remove_shim(): + try: + sys.meta_path.remove(DISTUTILS_FINDER) + except ValueError: + pass diff --git a/venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3431f7a97f13ca0e53582485e60cf34970b8476b GIT binary patch literal 5134 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 Y_=(^=@=D&KHw!+@Rp#Auo;~mU7qOuYf&c&j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-310.pyc b/venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04483ed313100a285c34c818d5261e217372caf1 GIT binary patch literal 240 zcmd1j<>g`kf^BhklXQUeV-N=!FabFZKwK;UBvKht7@8RuFfL?ZWJqBQX3%7c;*U?s zEG{W6$;>H^&qz$p_S0m##T6f)nOl%wR1zN_#hsELpI??*RFs*Lx{{#?WE`0ImEdd@ z6Iz^FR2&mjT3nnMjQe6yugzR9vDPP?VpQnp_f7mYP=<b sQ=D0ns#^fGDKR~@I0nsjeVA2x1(mlrY;yBcN^?@}7(wm_*(|^S0L7U`KmY&$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/_distutils_hack/override.py b/venv/Lib/site-packages/_distutils_hack/override.py new file mode 100644 index 000000000..2cc433a4a --- /dev/null +++ b/venv/Lib/site-packages/_distutils_hack/override.py @@ -0,0 +1 @@ +__import__('_distutils_hack').do_override() diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/INSTALLER b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/LICENSE b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/LICENSE new file mode 100644 index 000000000..5f4f225dd --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Django Software Foundation and individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of Django nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/METADATA b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/METADATA new file mode 100644 index 000000000..48f0b334d --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/METADATA @@ -0,0 +1,245 @@ +Metadata-Version: 2.1 +Name: asgiref +Version: 3.5.2 +Summary: ASGI specs, helper code, and adapters +Home-page: https://github.com/django/asgiref/ +Author: Django Software Foundation +Author-email: foundation@djangoproject.com +License: BSD +Project-URL: Documentation, https://asgi.readthedocs.io/ +Project-URL: Further Documentation, https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions +Project-URL: Changelog, https://github.com/django/asgiref/blob/master/CHANGELOG.txt +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Topic :: Internet :: WWW/HTTP +Requires-Python: >=3.7 +License-File: LICENSE +Requires-Dist: typing-extensions ; python_version < "3.8" +Provides-Extra: tests +Requires-Dist: pytest ; extra == 'tests' +Requires-Dist: pytest-asyncio ; extra == 'tests' +Requires-Dist: mypy (>=0.800) ; extra == 'tests' + +asgiref +======= + +.. image:: https://api.travis-ci.org/django/asgiref.svg + :target: https://travis-ci.org/django/asgiref + +.. image:: https://img.shields.io/pypi/v/asgiref.svg + :target: https://pypi.python.org/pypi/asgiref + +ASGI is a standard for Python asynchronous web apps and servers to communicate +with each other, and positioned as an asynchronous successor to WSGI. You can +read more at https://asgi.readthedocs.io/en/latest/ + +This package includes ASGI base libraries, such as: + +* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync`` +* Server base classes, ``asgiref.server`` +* A WSGI-to-ASGI adapter, in ``asgiref.wsgi`` + + +Function wrappers +----------------- + +These allow you to wrap or decorate async or sync functions to call them from +the other style (so you can call async functions from a synchronous thread, +or vice-versa). + +In particular: + +* AsyncToSync lets a synchronous subthread stop and wait while the async + function is called on the main thread's event loop, and then control is + returned to the thread when the async function is finished. + +* SyncToAsync lets async code call a synchronous function, which is run in + a threadpool and control returned to the async coroutine when the synchronous + function completes. + +The idea is to make it easier to call synchronous APIs from async code and +asynchronous APIs from synchronous code so it's easier to transition code from +one style to the other. In the case of Channels, we wrap the (synchronous) +Django view system with SyncToAsync to allow it to run inside the (asynchronous) +ASGI server. + +Note that exactly what threads things run in is very specific, and aimed to +keep maximum compatibility with old synchronous code. See +"Synchronous code & Threads" below for a full explanation. By default, +``sync_to_async`` will run all synchronous code in the program in the same +thread for safety reasons; you can disable this for more performance with +``@sync_to_async(thread_sensitive=False)``, but make sure that your code does +not rely on anything bound to threads (like database connections) when you do. + + +Threadlocal replacement +----------------------- + +This is a drop-in replacement for ``threading.local`` that works with both +threads and asyncio Tasks. Even better, it will proxy values through from a +task-local context to a thread-local context when you use ``sync_to_async`` +to run things in a threadpool, and vice-versa for ``async_to_sync``. + +If you instead want true thread- and task-safety, you can set +``thread_critical`` on the Local object to ensure this instead. + + +Server base classes +------------------- + +Includes a ``StatelessServer`` class which provides all the hard work of +writing a stateless server (as in, does not handle direct incoming sockets +but instead consumes external streams or sockets to work out what is happening). + +An example of such a server would be a chatbot server that connects out to +a central chat server and provides a "connection scope" per user chatting to +it. There's only one actual connection, but the server has to separate things +into several scopes for easier writing of the code. + +You can see an example of this being used in `frequensgi `_. + + +WSGI-to-ASGI adapter +-------------------- + +Allows you to wrap a WSGI application so it appears as a valid ASGI application. + +Simply wrap it around your WSGI application like so:: + + asgi_application = WsgiToAsgi(wsgi_application) + +The WSGI application will be run in a synchronous threadpool, and the wrapped +ASGI application will be one that accepts ``http`` class messages. + +Please note that not all extended features of WSGI may be supported (such as +file handles for incoming POST bodies). + + +Dependencies +------------ + +``asgiref`` requires Python 3.7 or higher. + + +Contributing +------------ + +Please refer to the +`main Channels contributing docs `_. + + +Testing +''''''' + +To run tests, make sure you have installed the ``tests`` extra with the package:: + + cd asgiref/ + pip install -e .[tests] + pytest + + +Building the documentation +'''''''''''''''''''''''''' + +The documentation uses `Sphinx `_:: + + cd asgiref/docs/ + pip install sphinx + +To build the docs, you can use the default tools:: + + sphinx-build -b html . _build/html # or `make html`, if you've got make set up + cd _build/html + python -m http.server + +...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload +your documentation changes automatically:: + + pip install sphinx-autobuild + sphinx-autobuild . _build/html + + +Releasing +''''''''' + +To release, first add details to CHANGELOG.txt and update the version number in ``asgiref/__init__.py``. + +Then, build and push the packages:: + + python -m build + twine upload dist/* + rm -r build/ dist/ + + +Implementation Details +---------------------- + +Synchronous code & threads +'''''''''''''''''''''''''' + +The ``asgiref.sync`` module provides two wrappers that let you go between +asynchronous and synchronous code at will, while taking care of the rough edges +for you. + +Unfortunately, the rough edges are numerous, and the code has to work especially +hard to keep things in the same thread as much as possible. Notably, the +restrictions we are working with are: + +* All synchronous code called through ``SyncToAsync`` and marked with + ``thread_sensitive`` should run in the same thread as each other (and if the + outer layer of the program is synchronous, the main thread) + +* If a thread already has a running async loop, ``AsyncToSync`` can't run things + on that loop if it's blocked on synchronous code that is above you in the + call stack. + +The first compromise you get to might be that ``thread_sensitive`` code should +just run in the same thread and not spawn in a sub-thread, fulfilling the first +restriction, but that immediately runs you into the second restriction. + +The only real solution is to essentially have a variant of ThreadPoolExecutor +that executes any ``thread_sensitive`` code on the outermost synchronous +thread - either the main thread, or a single spawned subthread. + +This means you now have two basic states: + +* If the outermost layer of your program is synchronous, then all async code + run through ``AsyncToSync`` will run in a per-call event loop in arbitrary + sub-threads, while all ``thread_sensitive`` code will run in the main thread. + +* If the outermost layer of your program is asynchronous, then all async code + runs on the main thread's event loop, and all ``thread_sensitive`` synchronous + code will run in a single shared sub-thread. + +Crucially, this means that in both cases there is a thread which is a shared +resource that all ``thread_sensitive`` code must run on, and there is a chance +that this thread is currently blocked on its own ``AsyncToSync`` call. Thus, +``AsyncToSync`` needs to act as an executor for thread code while it's blocking. + +The ``CurrentThreadExecutor`` class provides this functionality; rather than +simply waiting on a Future, you can call its ``run_until_future`` method and +it will run submitted code until that Future is done. This means that code +inside the call can then run code on your thread. + + +Maintenance and Security +------------------------ + +To report security issues, please contact security@djangoproject.com. For GPG +signatures and more security process information, see +https://docs.djangoproject.com/en/dev/internals/security/. + +To report bugs or request new features, please open a new GitHub issue. + +This repository is part of the Channels project. For the shepherd and maintenance team, please see the +`main Channels readme `_. diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/RECORD b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/RECORD new file mode 100644 index 000000000..8e94b96f0 --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/RECORD @@ -0,0 +1,27 @@ +asgiref-3.5.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +asgiref-3.5.2.dist-info/LICENSE,sha256=uEZBXRtRTpwd_xSiLeuQbXlLxUbKYSn5UKGM0JHipmk,1552 +asgiref-3.5.2.dist-info/METADATA,sha256=3JU5Zw-j9qCKPcuf3cJZ5dVispB_b7UXU0fnQVp9DDA,9143 +asgiref-3.5.2.dist-info/RECORD,, +asgiref-3.5.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +asgiref-3.5.2.dist-info/top_level.txt,sha256=bokQjCzwwERhdBiPdvYEZa4cHxT4NCeAffQNUqJ8ssg,8 +asgiref/__init__.py,sha256=LtYJ5AVwuiAlsrJUQwzHZMrGMIRn7cuIoIt4OznYy6c,22 +asgiref/__pycache__/__init__.cpython-310.pyc,, +asgiref/__pycache__/compatibility.cpython-310.pyc,, +asgiref/__pycache__/current_thread_executor.cpython-310.pyc,, +asgiref/__pycache__/local.cpython-310.pyc,, +asgiref/__pycache__/server.cpython-310.pyc,, +asgiref/__pycache__/sync.cpython-310.pyc,, +asgiref/__pycache__/testing.cpython-310.pyc,, +asgiref/__pycache__/timeout.cpython-310.pyc,, +asgiref/__pycache__/typing.cpython-310.pyc,, +asgiref/__pycache__/wsgi.cpython-310.pyc,, +asgiref/compatibility.py,sha256=MVH2bEdiCMMVTLbE-1V6KiU7q4LwqzP7PIufeXa-njM,1598 +asgiref/current_thread_executor.py,sha256=oeH8zv2tTmcbpxdUmOSMzbEXzeY5nJzIMFvzprE95gA,2801 +asgiref/local.py,sha256=nx5RqVFLYgUJVaxzApuQUW7dd9y21sruMYdgISoRs1k,4854 +asgiref/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +asgiref/server.py,sha256=egTQhZo1k4G0F7SSBQNp_VOekpGcjBJZU2kkCoiGC_M,6005 +asgiref/sync.py,sha256=3P813NHl3EHPMtzPEjaBelmjV_JUw97zYbtx-MmLUiw,20185 +asgiref/testing.py,sha256=3byNRV7Oto_Fg8Z-fErQJ3yGf7OQlcUexbN_cDQugzQ,3119 +asgiref/timeout.py,sha256=5Ekbmn3X1HPR55qgx-hPJMPEu_-YoivHqNhFEitiSYE,3440 +asgiref/typing.py,sha256=MZ7vbJY1F7EQqo9gL9pMSFRMw9b_SQrQQsnvlJQ2iP4,5603 +asgiref/wsgi.py,sha256=-L0eo_uK_dq7EPjv1meW1BRGytURaO9NPESxnJc9CtA,6575 diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/WHEEL b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/WHEEL new file mode 100644 index 000000000..becc9a66e --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/asgiref-3.5.2.dist-info/top_level.txt b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/top_level.txt new file mode 100644 index 000000000..ddf99d3d4 --- /dev/null +++ b/venv/Lib/site-packages/asgiref-3.5.2.dist-info/top_level.txt @@ -0,0 +1 @@ +asgiref diff --git a/venv/Lib/site-packages/asgiref/__init__.py b/venv/Lib/site-packages/asgiref/__init__.py new file mode 100644 index 000000000..dae42b1bd --- /dev/null +++ b/venv/Lib/site-packages/asgiref/__init__.py @@ -0,0 +1 @@ +__version__ = "3.5.2" diff --git a/venv/Lib/site-packages/asgiref/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60447bc7dfd16054081f5d2da9ad0b73715d49df GIT binary patch literal 202 zcmd1j<>g`kf;Vw@lf;1ZV-N=!FakLaKwQiLBvKfn7*ZI688n%ySdH~e^^E*98E#mBE?C}IMt0~5a@oULL)i-A%xL8ZmTi7_tu$)&lec_qa$?wKVXrAaYv znMK7Vx&cM`S*gh-F=eTFWidXPNioHlC8@dviOJcC>8ZsriN)!eMX71}@$s2?nI-Y@ ZdIgoYIBatBQ%ZAE?Le+82HD8L005u9H!=VK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/compatibility.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/compatibility.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f138a18527706bb2eb0e9da79d56b69c93cca0a GIT binary patch literal 1441 zcmZ{k&ubJ(6vw-|duG}=VWX~!yO%l$y8~t-9v2C_MEn6F%O)NidUvSldNV2QR1Nj2 z6DEwHjG%Y_0X_OJHF)wQ_!sPHUsWeM8QFsR@#@E`uJ`%AHtXwa5tT3hd>n1Jqv(@2 zmP<^=?^N*yH8PT{j0R252292>c@+&}naURRiEPUb^{HgLQ7`*UC!$9M^W91D!jY`-oL|Fh6qSBKRhNnC4p3XNOzRvH}*)SNxVXsqnCg6l~w(cm6Qz#q_uqXv$ z-Psq|ED4)h(pI>^%hsd6%*?<4u`7M8pU@`xzLKOKO zQ&b0_9p?9xyI+m+yUL>5{L`AJbaQ?P`Y?Z}MmZ`6n^RFd6BEGPKhDBKf09?cHbK-1^sg4xWm5Ert1ERO32jd%vgLAiaf--6DK{f^V} z`-PTVlt*HQ+=8pDMy_1&r}TH=LN4|>X_>oyN>Wc(N^3MnIuZIu$BlwS@NyRg{!Vr7EQa6k%Cit#`&@ll88dnN5i0 zpsL}yzaf!$;ZO93tkkDIRq9J$kx+ZijBT7K?M6O3*K>Bx`Mz&bE-W+&Jb(T4d-rc> z{ehj?$A`{s_~|=f1Q9eRZTF^a3VoKdzSs8pe%q(yJ`tYqUlHN&vvvTzK!nf>rMK_3 zLqXR_tMMoJA*(G`M|WSyv@)ft!+VvfluU7E_F>Su4L{AnNP_X&OwhI`nDAbawl91U zz#F2V=Xx$)FV)s}M)rq?O%Bf^IZ#r|!f2ipJc9{dNGY;ngPW3fC07*;7u-CPT#mnH z+3s8^2bmPSr^-Hm{7lJ2JS@w6^2Pjmw=&@Gn&tzQZ6`*4$#uzhH?@ZAb(U(39wLhz#+Xd*OoVBQdQ3SMtFR=(;y(NgKoqe|;SDDmP_nI@_|??tGthI~sC$W00g<$%fROL~mqD_HL$?Qm{ET zHc|03lY`wlisP)vOdQWcSdHHiQv7Su;nK8P%acVZg$0wxg9c*L=A?keh-{JrdPsBw zvoM^8KICW9%W%ejO@F0(be$9zePV*$WlHuKCBqNwu5iQ-DFxi_k#+JE-|QtrFRryi zcbxaeh`M!aL}5)@k?uJY8bZ&+Ogl zV7Tx;kFa*N6=Kqhq%Y&RZpLxH6jhGx`8a-FCHZ)!5yzrT<5(?#Uxm(RA|pl=hF3^` z#E~ssM0^?r^PwI6Z?;~C_5aUS(E!$lA_CUV)n`{6d>qXt6dV3#S@KQ6CnLbp#PB3F za0nn3oK^F*6mmjfhd$sJ&oqo_lN2TcY6|E$Qa?Hj+2v4Ts}j>G@MgaZHDerdys$5=Ubt9Cpp3Ad()%)Wj0G~%+IR>4A%HIq1X4ak zP`23WJ(M%&9=@zzJW4UBSZtiMi_c{S}UlV=$@=oH zQgB&*mtXAy&U;4u)?r{ODOo3YrX zbU7=0T>!>cDAZTYynbQUoPG*s3fFvbHgGl*d` zhyg`cOMoAS_%Xpg+4D^ZcOV74c>Dfd00?RvM56!^HS&Qp-s@J`ST`H{qm{)Vhs--@IGr1BVIjmIL0;wy|ZH118 zM{nht_SEON*y`?7eCyDi!IBH>xyW2OLO-G*!%M(t!%HWA@v_^x+G?n?==mI)kI%iS)@+FmmPkz!iuZ+=SN>B X1*xN3?t1zf6>=OYqNnMicjm&sEeW(U literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/local.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/local.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63bdbaaaf31fb0d79a16486f7695de64e003439e GIT binary patch literal 4134 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/server.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/server.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e78fd70f97abbe31aa87f13f301f983d99539aa GIT binary patch literal 5760 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 P($jK{$_v!K^638o1un04 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/testing.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/testing.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73dd4d4c13e77e114a53ba90bb9fdd213d040277 GIT binary patch literal 3139 zcmai0OK%*<5$^7peQ>y3F%iVv)gcrb!Mp zJG1HT<%a83Kv}xx2gE1x=u7T7=O5%afDb_qh5;XZG;CSQS3UdS!-QwCHPw%*>8|?f z>&_PzJcj4XKYzCQYJ;)=QRDdIpz${T`VEMf#XM#0^3B^k7O|6xuG4lngYKqo*KJog zyUF58Tz$mi>O;}4#(bT%YG1&ft$o2ETfBH?yC14BGg1aR$+lA&L}8kSo2kTL%_Lo! z_f145$Diq9-bb%wSO9B_n718T$RpNv<4g9#yj_Ve$Mtyb5y$7fcphW5xDhYlUB{ee zd;ueK@s)Tfz6i~Wm$AgF#g%t@y)=nJljPZI-tG1?YUFBo-}CX@?q}K$Gyk3SoA3JJ zY^tARe&`#ijo-~{ojGMLh_TEHOdQ#Ah@Kk5{>epUaoI_jKr=llYa1p%O5PNK78m$vWySVA9I(v?4dKU z$>v`h`_sP|@X1{AV7*n2n7(VZD)}AG9seGATZcFMosEet^$qOE)WhJI2SUem#T%G8 zw%?oB570MYEiwF)g(sE9Mwl4wZ{^B2JMu(r0P5Q0J>Z>^KEZrn*;3l~lJAFmk{DWxJz8{25;i$a`99gy!2Qccr_2bOX#bjulbl-i<23ThtHh{ z7;=8+3{VIxwqRGFAiO9=q^)5!3kNE}5m%RNk3)&19{Q^)Oj@pufVv7@JwxI$^_IIV zyjc*>Y?fmGGUjTcdCzX3DcmRLZ-5LUV(H04I#sD%|4UFT!~maI{GAgFX_bHo-@iBk z2=xFU&f1L@SI@!(D}4^Hq5%q}l-iVG%qHnneriDw%QOgHgMnSO5KBl;Rfs3UpPm=? zvCWyl6QS7(rN})1+fnF8{Ah}AdpL>Vuct^}C*Ji#zdV*EluV3$3fWVOHSBI4?$rf| zNlt2GEL;4X{;G&qI!fj0VmX#0ql?u);P0k{whb9Wl$+cJ{L9?s4)so7F__jGcu z`-8;n__?JP9Ij&?DbLfAW4vP}Mb)G(k-!~@DdP2#Wg2(NtB3_`S$RYqEoa6r1(&Cj z+*IXagYsZ}8y1?15VTSOkpRz4{`%8J;R&2THSb$Nb?G#p2qK^-^#k$s@Y;EBIO+QH zPyRvAzux-%qve0z{O|D5TPH3Hgf0S#1<7qF54f@1bKfc7Bj+l3=N?lpB5~pn%%hhn z!3F>s30o%O7Ls#vwx&bP&c?OL8NN47(&~>i3(~P zIfaHO&vJ8PtyL{t>MQ2Dd6t_T_b{88q9VIJvtQ<>qEjh*pvEcH7xe^JN`>1L?ky%% z=5%5%Ori&;JGdNdAS9a37I9FoEZY0PB47N@bB90wq4SxrP zr%Oi`c4ZJ0UJ&43*vBO|C>jASO<_77A+F1#AW+L>_+t{pljBUSnak@HZ_c||uhr{bt$D?cw`w+A>KdjL3sK(f;eNZBqzU3k*eDN43x0C< aecvhSzbQBHCLIQrl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/timeout.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/timeout.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bb1feb297683d85231f77dd315c01cbc600d7d8 GIT binary patch literal 3177 zcmZ`*UvJ#T5$7&>Jc^P|e=JLO{xV6^_=@`M0(~gdz)0fQE{Z@6ViyGthY~#Qos9y zE@FOBE{Y|&BwARpeBBy(Vp(*c(Sh!YSOvH8vM%=Y#F|*g?5bSD+T{@!SH#A1=Nap- z8;S7)(yLiK?v=dW6h$}~u_Ada-u!P7mN1&4VVJdLs`r zCUFp{yv#%}O!N4$*(D!gdm)2dy|7cH53@MQdrzaJ2uC!ngDfusT_!~|Ol2>)51~AW z#*J36nitHH*WWC-~L^9+gR%LdgOLsHm=p8B;PBFNpDvcH$EUvZ{NDL ziw(+QFV4pwbfFxmi_6UxER+P_x!?6FFKnW#+D%@n z4nPZyXCe7gwPt@sq#sv)7)Mzw(^QITrQyT9C=;nv^T{wOa0VSM(~)xFq>1O$QtROV z_qV&-1C*H3gD*<0qrsXfN9Oq+OWas@*u)YD=3TMRXA<*}o+Gn-~{7*?JgT)!OcKgrcnfk(HhkB)08Kr8DKuZx8tU%wg~n5p+k>(~WtQ~lCfBk@kmj$5GNf|2;3#I;YT zi7k?5*WNk${iFHhx?4<=ltS39ph<{R!p@1YKh=JZkt&H;EAJ0K`3L8exSJ7y**DnQ(V^JDU; zYn#lf9#*{a*s9-Pc8ph3zxUyi&zzr+HmDTvwbVPGd_+h}=0Ddk3*JAG3;(sGMP*rz#+wcZd)wl{ZoOM5^LYy+^WN6QLS3@S8x-^=6YHy0uI= z)YbH#K|IT0eBJ%g<@{&Q;Xm@0|AW86Z5nf%|HL74Nw#oNMta;^W!y$u-OY{8VhvMM uRV}*gbnUwf9(_pJWSsCYVbuLA^s~*`&$yme>YcxBn0JQQLn2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/__pycache__/typing.cpython-310.pyc b/venv/Lib/site-packages/asgiref/__pycache__/typing.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f41f6e63dd4d80db99eb0f8aa88de1ba29dbcc4 GIT binary patch literal 6597 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 OLMp7nC&aildGUWRn6lyk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/asgiref/compatibility.py b/venv/Lib/site-packages/asgiref/compatibility.py new file mode 100644 index 000000000..eccaee0d6 --- /dev/null +++ b/venv/Lib/site-packages/asgiref/compatibility.py @@ -0,0 +1,47 @@ +import asyncio +import inspect + + +def is_double_callable(application): + """ + Tests to see if an application is a legacy-style (double-callable) application. + """ + # Look for a hint on the object first + if getattr(application, "_asgi_single_callable", False): + return False + if getattr(application, "_asgi_double_callable", False): + return True + # Uninstanted classes are double-callable + if inspect.isclass(application): + return True + # Instanted classes depend on their __call__ + if hasattr(application, "__call__"): + # We only check to see if its __call__ is a coroutine function - + # if it's not, it still might be a coroutine function itself. + if asyncio.iscoroutinefunction(application.__call__): + return False + # Non-classes we just check directly + return not asyncio.iscoroutinefunction(application) + + +def double_to_single_callable(application): + """ + Transforms a double-callable ASGI application into a single-callable one. + """ + + async def new_application(scope, receive, send): + instance = application(scope) + return await instance(receive, send) + + return new_application + + +def guarantee_single_callable(application): + """ + Takes either a single- or double-callable application and always returns it + in single-callable style. Use this to add backwards compatibility for ASGI + 2.0 applications to your server/test harness/etc. + """ + if is_double_callable(application): + application = double_to_single_callable(application) + return application diff --git a/venv/Lib/site-packages/asgiref/current_thread_executor.py b/venv/Lib/site-packages/asgiref/current_thread_executor.py new file mode 100644 index 000000000..a7898f85e --- /dev/null +++ b/venv/Lib/site-packages/asgiref/current_thread_executor.py @@ -0,0 +1,81 @@ +import queue +import threading +from concurrent.futures import Executor, Future + + +class _WorkItem: + """ + Represents an item needing to be run in the executor. + Copied from ThreadPoolExecutor (but it's private, so we're not going to rely on importing it) + """ + + def __init__(self, future, fn, args, kwargs): + self.future = future + self.fn = fn + self.args = args + self.kwargs = kwargs + + def run(self): + if not self.future.set_running_or_notify_cancel(): + return + try: + result = self.fn(*self.args, **self.kwargs) + except BaseException as exc: + self.future.set_exception(exc) + # Break a reference cycle with the exception 'exc' + self = None + else: + self.future.set_result(result) + + +class CurrentThreadExecutor(Executor): + """ + An Executor that actually runs code in the thread it is instantiated in. + Passed to other threads running async code, so they can run sync code in + the thread they came from. + """ + + def __init__(self): + self._work_thread = threading.current_thread() + self._work_queue = queue.Queue() + self._broken = False + + def run_until_future(self, future): + """ + Runs the code in the work queue until a result is available from the future. + Should be run from the thread the executor is initialised in. + """ + # Check we're in the right thread + if threading.current_thread() != self._work_thread: + raise RuntimeError( + "You cannot run CurrentThreadExecutor from a different thread" + ) + future.add_done_callback(self._work_queue.put) + # Keep getting and running work items until we get the future we're waiting for + # back via the future's done callback. + try: + while True: + # Get a work item and run it + work_item = self._work_queue.get() + if work_item is future: + return + work_item.run() + del work_item + finally: + self._broken = True + + def submit(self, fn, *args, **kwargs): + # Check they're not submitting from the same thread + if threading.current_thread() == self._work_thread: + raise RuntimeError( + "You cannot submit onto CurrentThreadExecutor from its own thread" + ) + # Check they're not too late or the executor errored + if self._broken: + raise RuntimeError("CurrentThreadExecutor already quit or is broken") + # Add to work queue + f = Future() + work_item = _WorkItem(f, fn, args, kwargs) + self._work_queue.put(work_item) + # Return the future + return f diff --git a/venv/Lib/site-packages/asgiref/local.py b/venv/Lib/site-packages/asgiref/local.py new file mode 100644 index 000000000..17314d4ec --- /dev/null +++ b/venv/Lib/site-packages/asgiref/local.py @@ -0,0 +1,120 @@ +import random +import string +import sys +import threading +import weakref + + +class Local: + """ + A drop-in replacement for threading.locals that also works with asyncio + Tasks (via the current_task asyncio method), and passes locals through + sync_to_async and async_to_sync. + + Specifically: + - Locals work per-coroutine on any thread not spawned using asgiref + - Locals work per-thread on any thread not spawned using asgiref + - Locals are shared with the parent coroutine when using sync_to_async + - Locals are shared with the parent thread when using async_to_sync + (and if that thread was launched using sync_to_async, with its parent + coroutine as well, with this working for indefinite levels of nesting) + + Set thread_critical to True to not allow locals to pass from an async Task + to a thread it spawns. This is needed for code that truly needs + thread-safety, as opposed to things used for helpful context (e.g. sqlite + does not like being called from a different thread to the one it is from). + Thread-critical code will still be differentiated per-Task within a thread + as it is expected it does not like concurrent access. + + This doesn't use contextvars as it needs to support 3.6. Once it can support + 3.7 only, we can then reimplement the storage more nicely. + """ + + def __init__(self, thread_critical: bool = False) -> None: + self._thread_critical = thread_critical + self._thread_lock = threading.RLock() + self._context_refs: "weakref.WeakSet[object]" = weakref.WeakSet() + # Random suffixes stop accidental reuse between different Locals, + # though we try to force deletion as well. + self._attr_name = "_asgiref_local_impl_{}_{}".format( + id(self), + "".join(random.choice(string.ascii_letters) for i in range(8)), + ) + + def _get_context_id(self): + """ + Get the ID we should use for looking up variables + """ + # Prevent a circular reference + from .sync import AsyncToSync, SyncToAsync + + # First, pull the current task if we can + context_id = SyncToAsync.get_current_task() + context_is_async = True + # OK, let's try for a thread ID + if context_id is None: + context_id = threading.current_thread() + context_is_async = False + # If we're thread-critical, we stop here, as we can't share contexts. + if self._thread_critical: + return context_id + # Now, take those and see if we can resolve them through the launch maps + for i in range(sys.getrecursionlimit()): + try: + if context_is_async: + # Tasks have a source thread in AsyncToSync + context_id = AsyncToSync.launch_map[context_id] + context_is_async = False + else: + # Threads have a source task in SyncToAsync + context_id = SyncToAsync.launch_map[context_id] + context_is_async = True + except KeyError: + break + else: + # Catch infinite loops (they happen if you are screwing around + # with AsyncToSync implementations) + raise RuntimeError("Infinite launch_map loops") + return context_id + + def _get_storage(self): + context_obj = self._get_context_id() + if not hasattr(context_obj, self._attr_name): + setattr(context_obj, self._attr_name, {}) + self._context_refs.add(context_obj) + return getattr(context_obj, self._attr_name) + + def __del__(self): + try: + for context_obj in self._context_refs: + try: + delattr(context_obj, self._attr_name) + except AttributeError: + pass + except TypeError: + # WeakSet.__iter__ can crash when interpreter is shutting down due + # to _IterationGuard being None. + pass + + def __getattr__(self, key): + with self._thread_lock: + storage = self._get_storage() + if key in storage: + return storage[key] + else: + raise AttributeError(f"{self!r} object has no attribute {key!r}") + + def __setattr__(self, key, value): + if key in ("_context_refs", "_thread_critical", "_thread_lock", "_attr_name"): + return super().__setattr__(key, value) + with self._thread_lock: + storage = self._get_storage() + storage[key] = value + + def __delattr__(self, key): + with self._thread_lock: + storage = self._get_storage() + if key in storage: + del storage[key] + else: + raise AttributeError(f"{self!r} object has no attribute {key!r}") diff --git a/venv/Lib/site-packages/asgiref/py.typed b/venv/Lib/site-packages/asgiref/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/asgiref/server.py b/venv/Lib/site-packages/asgiref/server.py new file mode 100644 index 000000000..43c28c6cc --- /dev/null +++ b/venv/Lib/site-packages/asgiref/server.py @@ -0,0 +1,157 @@ +import asyncio +import logging +import time +import traceback + +from .compatibility import guarantee_single_callable + +logger = logging.getLogger(__name__) + + +class StatelessServer: + """ + Base server class that handles basic concepts like application instance + creation/pooling, exception handling, and similar, for stateless protocols + (i.e. ones without actual incoming connections to the process) + + Your code should override the handle() method, doing whatever it needs to, + and calling get_or_create_application_instance with a unique `scope_id` + and `scope` for the scope it wants to get. + + If an application instance is found with the same `scope_id`, you are + given its input queue, otherwise one is made for you with the scope provided + and you are given that fresh new input queue. Either way, you should do + something like: + + input_queue = self.get_or_create_application_instance( + "user-123456", + {"type": "testprotocol", "user_id": "123456", "username": "andrew"}, + ) + input_queue.put_nowait(message) + + If you try and create an application instance and there are already + `max_application` instances, the oldest/least recently used one will be + reclaimed and shut down to make space. + + Application coroutines that error will be found periodically (every 100ms + by default) and have their exceptions printed to the console. Override + application_exception() if you want to do more when this happens. + + If you override run(), make sure you handle things like launching the + application checker. + """ + + application_checker_interval = 0.1 + + def __init__(self, application, max_applications=1000): + # Parameters + self.application = application + self.max_applications = max_applications + # Initialisation + self.application_instances = {} + + ### Mainloop and handling + + def run(self): + """ + Runs the asyncio event loop with our handler loop. + """ + event_loop = asyncio.get_event_loop() + asyncio.ensure_future(self.application_checker()) + try: + event_loop.run_until_complete(self.handle()) + except KeyboardInterrupt: + logger.info("Exiting due to Ctrl-C/interrupt") + + async def handle(self): + raise NotImplementedError("You must implement handle()") + + async def application_send(self, scope, message): + """ + Receives outbound sends from applications and handles them. + """ + raise NotImplementedError("You must implement application_send()") + + ### Application instance management + + def get_or_create_application_instance(self, scope_id, scope): + """ + Creates an application instance and returns its queue. + """ + if scope_id in self.application_instances: + self.application_instances[scope_id]["last_used"] = time.time() + return self.application_instances[scope_id]["input_queue"] + # See if we need to delete an old one + while len(self.application_instances) > self.max_applications: + self.delete_oldest_application_instance() + # Make an instance of the application + input_queue = asyncio.Queue() + application_instance = guarantee_single_callable(self.application) + # Run it, and stash the future for later checking + future = asyncio.ensure_future( + application_instance( + scope=scope, + receive=input_queue.get, + send=lambda message: self.application_send(scope, message), + ), + ) + self.application_instances[scope_id] = { + "input_queue": input_queue, + "future": future, + "scope": scope, + "last_used": time.time(), + } + return input_queue + + def delete_oldest_application_instance(self): + """ + Finds and deletes the oldest application instance + """ + oldest_time = min( + details["last_used"] for details in self.application_instances.values() + ) + for scope_id, details in self.application_instances.items(): + if details["last_used"] == oldest_time: + self.delete_application_instance(scope_id) + # Return to make sure we only delete one in case two have + # the same oldest time + return + + def delete_application_instance(self, scope_id): + """ + Removes an application instance (makes sure its task is stopped, + then removes it from the current set) + """ + details = self.application_instances[scope_id] + del self.application_instances[scope_id] + if not details["future"].done(): + details["future"].cancel() + + async def application_checker(self): + """ + Goes through the set of current application instance Futures and cleans up + any that are done/prints exceptions for any that errored. + """ + while True: + await asyncio.sleep(self.application_checker_interval) + for scope_id, details in list(self.application_instances.items()): + if details["future"].done(): + exception = details["future"].exception() + if exception: + await self.application_exception(exception, details) + try: + del self.application_instances[scope_id] + except KeyError: + # Exception handling might have already got here before us. That's fine. + pass + + async def application_exception(self, exception, application_details): + """ + Called whenever an application coroutine has an exception. + """ + logging.error( + "Exception inside application: %s\n%s%s", + exception, + "".join(traceback.format_tb(exception.__traceback__)), + f" {exception}", + ) diff --git a/venv/Lib/site-packages/asgiref/sync.py b/venv/Lib/site-packages/asgiref/sync.py new file mode 100644 index 000000000..624704327 --- /dev/null +++ b/venv/Lib/site-packages/asgiref/sync.py @@ -0,0 +1,532 @@ +import asyncio +import asyncio.coroutines +import contextvars +import functools +import inspect +import os +import sys +import threading +import warnings +import weakref +from concurrent.futures import Future, ThreadPoolExecutor +from typing import Any, Callable, Dict, Optional, overload + +from .current_thread_executor import CurrentThreadExecutor +from .local import Local + + +def _restore_context(context): + # Check for changes in contextvars, and set them to the current + # context for downstream consumers + for cvar in context: + try: + if cvar.get() != context.get(cvar): + cvar.set(context.get(cvar)) + except LookupError: + cvar.set(context.get(cvar)) + + +def _iscoroutinefunction_or_partial(func: Any) -> bool: + # Python < 3.8 does not correctly determine partially wrapped + # coroutine functions are coroutine functions, hence the need for + # this to exist. Code taken from CPython. + if sys.version_info >= (3, 8): + return asyncio.iscoroutinefunction(func) + else: + while inspect.ismethod(func): + func = func.__func__ + while isinstance(func, functools.partial): + func = func.func + + return asyncio.iscoroutinefunction(func) + + +class ThreadSensitiveContext: + """Async context manager to manage context for thread sensitive mode + + This context manager controls which thread pool executor is used when in + thread sensitive mode. By default, a single thread pool executor is shared + within a process. + + In Python 3.7+, the ThreadSensitiveContext() context manager may be used to + specify a thread pool per context. + + This context manager is re-entrant, so only the outer-most call to + ThreadSensitiveContext will set the context. + + Usage: + + >>> import time + >>> async with ThreadSensitiveContext(): + ... await sync_to_async(time.sleep, 1)() + """ + + def __init__(self): + self.token = None + + async def __aenter__(self): + try: + SyncToAsync.thread_sensitive_context.get() + except LookupError: + self.token = SyncToAsync.thread_sensitive_context.set(self) + + return self + + async def __aexit__(self, exc, value, tb): + if not self.token: + return + + executor = SyncToAsync.context_to_thread_executor.pop(self, None) + if executor: + executor.shutdown() + SyncToAsync.thread_sensitive_context.reset(self.token) + + +class AsyncToSync: + """ + Utility class which turns an awaitable that only works on the thread with + the event loop into a synchronous callable that works in a subthread. + + If the call stack contains an async loop, the code runs there. + Otherwise, the code runs in a new loop in a new thread. + + Either way, this thread then pauses and waits to run any thread_sensitive + code called from further down the call stack using SyncToAsync, before + finally exiting once the async task returns. + """ + + # Maps launched Tasks to the threads that launched them (for locals impl) + launch_map: "Dict[asyncio.Task[object], threading.Thread]" = {} + + # Keeps track of which CurrentThreadExecutor to use. This uses an asgiref + # Local, not a threadlocal, so that tasks can work out what their parent used. + executors = Local() + + # When we can't find a CurrentThreadExecutor from the context, such as + # inside create_task, we'll look it up here from the running event loop. + loop_thread_executors: "Dict[asyncio.AbstractEventLoop, CurrentThreadExecutor]" = {} + + def __init__(self, awaitable, force_new_loop=False): + if not callable(awaitable) or ( + not _iscoroutinefunction_or_partial(awaitable) + and not _iscoroutinefunction_or_partial( + getattr(awaitable, "__call__", awaitable) + ) + ): + # Python does not have very reliable detection of async functions + # (lots of false negatives) so this is just a warning. + warnings.warn( + "async_to_sync was passed a non-async-marked callable", stacklevel=2 + ) + self.awaitable = awaitable + try: + self.__self__ = self.awaitable.__self__ + except AttributeError: + pass + if force_new_loop: + # They have asked that we always run in a new sub-loop. + self.main_event_loop = None + else: + try: + self.main_event_loop = asyncio.get_running_loop() + except RuntimeError: + # There's no event loop in this thread. Look for the threadlocal if + # we're inside SyncToAsync + main_event_loop_pid = getattr( + SyncToAsync.threadlocal, "main_event_loop_pid", None + ) + # We make sure the parent loop is from the same process - if + # they've forked, this is not going to be valid any more (#194) + if main_event_loop_pid and main_event_loop_pid == os.getpid(): + self.main_event_loop = getattr( + SyncToAsync.threadlocal, "main_event_loop", None + ) + else: + self.main_event_loop = None + + def __call__(self, *args, **kwargs): + # You can't call AsyncToSync from a thread with a running event loop + try: + event_loop = asyncio.get_running_loop() + except RuntimeError: + pass + else: + if event_loop.is_running(): + raise RuntimeError( + "You cannot use AsyncToSync in the same thread as an async event loop - " + "just await the async function directly." + ) + + # Wrapping context in list so it can be reassigned from within + # `main_wrap`. + context = [contextvars.copy_context()] + + # Make a future for the return information + call_result = Future() + # Get the source thread + source_thread = threading.current_thread() + # Make a CurrentThreadExecutor we'll use to idle in this thread - we + # need one for every sync frame, even if there's one above us in the + # same thread. + if hasattr(self.executors, "current"): + old_current_executor = self.executors.current + else: + old_current_executor = None + current_executor = CurrentThreadExecutor() + self.executors.current = current_executor + loop = None + # Use call_soon_threadsafe to schedule a synchronous callback on the + # main event loop's thread if it's there, otherwise make a new loop + # in this thread. + try: + awaitable = self.main_wrap( + args, kwargs, call_result, source_thread, sys.exc_info(), context + ) + + if not (self.main_event_loop and self.main_event_loop.is_running()): + # Make our own event loop - in a new thread - and run inside that. + loop = asyncio.new_event_loop() + self.loop_thread_executors[loop] = current_executor + loop_executor = ThreadPoolExecutor(max_workers=1) + loop_future = loop_executor.submit( + self._run_event_loop, loop, awaitable + ) + if current_executor: + # Run the CurrentThreadExecutor until the future is done + current_executor.run_until_future(loop_future) + # Wait for future and/or allow for exception propagation + loop_future.result() + else: + # Call it inside the existing loop + self.main_event_loop.call_soon_threadsafe( + self.main_event_loop.create_task, awaitable + ) + if current_executor: + # Run the CurrentThreadExecutor until the future is done + current_executor.run_until_future(call_result) + finally: + # Clean up any executor we were running + if loop is not None: + del self.loop_thread_executors[loop] + if hasattr(self.executors, "current"): + del self.executors.current + if old_current_executor: + self.executors.current = old_current_executor + _restore_context(context[0]) + + # Wait for results from the future. + return call_result.result() + + def _run_event_loop(self, loop, coro): + """ + Runs the given event loop (designed to be called in a thread). + """ + asyncio.set_event_loop(loop) + try: + loop.run_until_complete(coro) + finally: + try: + # mimic asyncio.run() behavior + # cancel unexhausted async generators + tasks = asyncio.all_tasks(loop) + for task in tasks: + task.cancel() + + async def gather(): + await asyncio.gather(*tasks, return_exceptions=True) + + loop.run_until_complete(gather()) + for task in tasks: + if task.cancelled(): + continue + if task.exception() is not None: + loop.call_exception_handler( + { + "message": "unhandled exception during loop shutdown", + "exception": task.exception(), + "task": task, + } + ) + if hasattr(loop, "shutdown_asyncgens"): + loop.run_until_complete(loop.shutdown_asyncgens()) + finally: + loop.close() + asyncio.set_event_loop(self.main_event_loop) + + def __get__(self, parent, objtype): + """ + Include self for methods + """ + func = functools.partial(self.__call__, parent) + return functools.update_wrapper(func, self.awaitable) + + async def main_wrap( + self, args, kwargs, call_result, source_thread, exc_info, context + ): + """ + Wraps the awaitable with something that puts the result into the + result/exception future. + """ + if context is not None: + _restore_context(context[0]) + + current_task = SyncToAsync.get_current_task() + self.launch_map[current_task] = source_thread + try: + # If we have an exception, run the function inside the except block + # after raising it so exc_info is correctly populated. + if exc_info[1]: + try: + raise exc_info[1] + except BaseException: + result = await self.awaitable(*args, **kwargs) + else: + result = await self.awaitable(*args, **kwargs) + except BaseException as e: + call_result.set_exception(e) + else: + call_result.set_result(result) + finally: + del self.launch_map[current_task] + + context[0] = contextvars.copy_context() + + +class SyncToAsync: + """ + Utility class which turns a synchronous callable into an awaitable that + runs in a threadpool. It also sets a threadlocal inside the thread so + calls to AsyncToSync can escape it. + + If thread_sensitive is passed, the code will run in the same thread as any + outer code. This is needed for underlying Python code that is not + threadsafe (for example, code which handles SQLite database connections). + + If the outermost program is async (i.e. SyncToAsync is outermost), then + this will be a dedicated single sub-thread that all sync code runs in, + one after the other. If the outermost program is sync (i.e. AsyncToSync is + outermost), this will just be the main thread. This is achieved by idling + with a CurrentThreadExecutor while AsyncToSync is blocking its sync parent, + rather than just blocking. + + If executor is passed in, that will be used instead of the loop's default executor. + In order to pass in an executor, thread_sensitive must be set to False, otherwise + a TypeError will be raised. + """ + + # If they've set ASGI_THREADS, update the default asyncio executor for now + if "ASGI_THREADS" in os.environ: + # We use get_event_loop here - not get_running_loop - as this will + # be run at import time, and we want to update the main thread's loop. + loop = asyncio.get_event_loop() + loop.set_default_executor( + ThreadPoolExecutor(max_workers=int(os.environ["ASGI_THREADS"])) + ) + + # Maps launched threads to the coroutines that spawned them + launch_map: "Dict[threading.Thread, asyncio.Task[object]]" = {} + + # Storage for main event loop references + threadlocal = threading.local() + + # Single-thread executor for thread-sensitive code + single_thread_executor = ThreadPoolExecutor(max_workers=1) + + # Maintain a contextvar for the current execution context. Optionally used + # for thread sensitive mode. + thread_sensitive_context: "contextvars.ContextVar[str]" = contextvars.ContextVar( + "thread_sensitive_context" + ) + + # Contextvar that is used to detect if the single thread executor + # would be awaited on while already being used in the same context + deadlock_context: "contextvars.ContextVar[bool]" = contextvars.ContextVar( + "deadlock_context" + ) + + # Maintaining a weak reference to the context ensures that thread pools are + # erased once the context goes out of scope. This terminates the thread pool. + context_to_thread_executor: "weakref.WeakKeyDictionary[object, ThreadPoolExecutor]" = ( + weakref.WeakKeyDictionary() + ) + + def __init__( + self, + func: Callable[..., Any], + thread_sensitive: bool = True, + executor: Optional["ThreadPoolExecutor"] = None, + ) -> None: + if ( + not callable(func) + or _iscoroutinefunction_or_partial(func) + or _iscoroutinefunction_or_partial(getattr(func, "__call__", func)) + ): + raise TypeError("sync_to_async can only be applied to sync functions.") + self.func = func + functools.update_wrapper(self, func) + self._thread_sensitive = thread_sensitive + self._is_coroutine = asyncio.coroutines._is_coroutine # type: ignore + if thread_sensitive and executor is not None: + raise TypeError("executor must not be set when thread_sensitive is True") + self._executor = executor + try: + self.__self__ = func.__self__ # type: ignore + except AttributeError: + pass + + async def __call__(self, *args, **kwargs): + loop = asyncio.get_running_loop() + + # Work out what thread to run the code in + if self._thread_sensitive: + if hasattr(AsyncToSync.executors, "current"): + # If we have a parent sync thread above somewhere, use that + executor = AsyncToSync.executors.current + elif self.thread_sensitive_context and self.thread_sensitive_context.get( + None + ): + # If we have a way of retrieving the current context, attempt + # to use a per-context thread pool executor + thread_sensitive_context = self.thread_sensitive_context.get() + + if thread_sensitive_context in self.context_to_thread_executor: + # Re-use thread executor in current context + executor = self.context_to_thread_executor[thread_sensitive_context] + else: + # Create new thread executor in current context + executor = ThreadPoolExecutor(max_workers=1) + self.context_to_thread_executor[thread_sensitive_context] = executor + elif loop in AsyncToSync.loop_thread_executors: + # Re-use thread executor for running loop + executor = AsyncToSync.loop_thread_executors[loop] + elif self.deadlock_context and self.deadlock_context.get(False): + raise RuntimeError( + "Single thread executor already being used, would deadlock" + ) + else: + # Otherwise, we run it in a fixed single thread + executor = self.single_thread_executor + if self.deadlock_context: + self.deadlock_context.set(True) + else: + # Use the passed in executor, or the loop's default if it is None + executor = self._executor + + context = contextvars.copy_context() + child = functools.partial(self.func, *args, **kwargs) + func = context.run + args = (child,) + kwargs = {} + + try: + # Run the code in the right thread + future = loop.run_in_executor( + executor, + functools.partial( + self.thread_handler, + loop, + self.get_current_task(), + sys.exc_info(), + func, + *args, + **kwargs, + ), + ) + ret = await asyncio.wait_for(future, timeout=None) + + finally: + _restore_context(context) + if self.deadlock_context: + self.deadlock_context.set(False) + + return ret + + def __get__(self, parent, objtype): + """ + Include self for methods + """ + return functools.partial(self.__call__, parent) + + def thread_handler(self, loop, source_task, exc_info, func, *args, **kwargs): + """ + Wraps the sync application with exception handling. + """ + # Set the threadlocal for AsyncToSync + self.threadlocal.main_event_loop = loop + self.threadlocal.main_event_loop_pid = os.getpid() + # Set the task mapping (used for the locals module) + current_thread = threading.current_thread() + if AsyncToSync.launch_map.get(source_task) == current_thread: + # Our parent task was launched from this same thread, so don't make + # a launch map entry - let it shortcut over us! (and stop infinite loops) + parent_set = False + else: + self.launch_map[current_thread] = source_task + parent_set = True + # Run the function + try: + # If we have an exception, run the function inside the except block + # after raising it so exc_info is correctly populated. + if exc_info[1]: + try: + raise exc_info[1] + except BaseException: + return func(*args, **kwargs) + else: + return func(*args, **kwargs) + finally: + # Only delete the launch_map parent if we set it, otherwise it is + # from someone else. + if parent_set: + del self.launch_map[current_thread] + + @staticmethod + def get_current_task(): + """ + Implementation of asyncio.current_task() + that returns None if there is no task. + """ + try: + return asyncio.current_task() + except RuntimeError: + return None + + +# Lowercase aliases (and decorator friendliness) +async_to_sync = AsyncToSync + + +@overload +def sync_to_async( + func: None = None, + thread_sensitive: bool = True, + executor: Optional["ThreadPoolExecutor"] = None, +) -> Callable[[Callable[..., Any]], SyncToAsync]: + ... + + +@overload +def sync_to_async( + func: Callable[..., Any], + thread_sensitive: bool = True, + executor: Optional["ThreadPoolExecutor"] = None, +) -> SyncToAsync: + ... + + +def sync_to_async( + func=None, + thread_sensitive=True, + executor=None, +): + if func is None: + return lambda f: SyncToAsync( + f, + thread_sensitive=thread_sensitive, + executor=executor, + ) + return SyncToAsync( + func, + thread_sensitive=thread_sensitive, + executor=executor, + ) diff --git a/venv/Lib/site-packages/asgiref/testing.py b/venv/Lib/site-packages/asgiref/testing.py new file mode 100644 index 000000000..6624317d7 --- /dev/null +++ b/venv/Lib/site-packages/asgiref/testing.py @@ -0,0 +1,97 @@ +import asyncio +import time + +from .compatibility import guarantee_single_callable +from .timeout import timeout as async_timeout + + +class ApplicationCommunicator: + """ + Runs an ASGI application in a test mode, allowing sending of + messages to it and retrieval of messages it sends. + """ + + def __init__(self, application, scope): + self.application = guarantee_single_callable(application) + self.scope = scope + self.input_queue = asyncio.Queue() + self.output_queue = asyncio.Queue() + self.future = asyncio.ensure_future( + self.application(scope, self.input_queue.get, self.output_queue.put) + ) + + async def wait(self, timeout=1): + """ + Waits for the application to stop itself and returns any exceptions. + """ + try: + async with async_timeout(timeout): + try: + await self.future + self.future.result() + except asyncio.CancelledError: + pass + finally: + if not self.future.done(): + self.future.cancel() + try: + await self.future + except asyncio.CancelledError: + pass + + def stop(self, exceptions=True): + if not self.future.done(): + self.future.cancel() + elif exceptions: + # Give a chance to raise any exceptions + self.future.result() + + def __del__(self): + # Clean up on deletion + try: + self.stop(exceptions=False) + except RuntimeError: + # Event loop already stopped + pass + + async def send_input(self, message): + """ + Sends a single message to the application + """ + # Give it the message + await self.input_queue.put(message) + + async def receive_output(self, timeout=1): + """ + Receives a single message from the application, with optional timeout. + """ + # Make sure there's not an exception to raise from the task + if self.future.done(): + self.future.result() + # Wait and receive the message + try: + async with async_timeout(timeout): + return await self.output_queue.get() + except asyncio.TimeoutError as e: + # See if we have another error to raise inside + if self.future.done(): + self.future.result() + else: + self.future.cancel() + try: + await self.future + except asyncio.CancelledError: + pass + raise e + + async def receive_nothing(self, timeout=0.1, interval=0.01): + """ + Checks that there is no message to receive in the given time. + """ + # `interval` has precedence over `timeout` + start = time.monotonic() + while time.monotonic() - start < timeout: + if not self.output_queue.empty(): + return False + await asyncio.sleep(interval) + return self.output_queue.empty() diff --git a/venv/Lib/site-packages/asgiref/timeout.py b/venv/Lib/site-packages/asgiref/timeout.py new file mode 100644 index 000000000..65932d170 --- /dev/null +++ b/venv/Lib/site-packages/asgiref/timeout.py @@ -0,0 +1,112 @@ +# This code is originally sourced from the aio-libs project "async_timeout", +# under the Apache 2.0 license. You may see the original project at +# https://github.com/aio-libs/async-timeout + +# It is vendored here to reduce chain-dependencies on this library, and +# modified slightly to remove some features we don't use. + + +import asyncio +from types import TracebackType +from typing import Any, Optional, Type + + +class timeout: + """timeout context manager. + + Useful in cases when you want to apply timeout logic around block + of code or in cases when asyncio.wait_for is not suitable. For example: + + >>> with timeout(0.001): + ... async with aiohttp.get('https://github.com') as r: + ... await r.text() + + + timeout - value in seconds or None to disable timeout logic + loop - asyncio compatible event loop + """ + + def __init__( + self, + timeout: Optional[float], + *, + loop: Optional[asyncio.AbstractEventLoop] = None, + ) -> None: + self._timeout = timeout + if loop is None: + loop = asyncio.get_event_loop() + self._loop = loop + self._task = None # type: Optional[asyncio.Task[Any]] + self._cancelled = False + self._cancel_handler = None # type: Optional[asyncio.Handle] + self._cancel_at = None # type: Optional[float] + + def __enter__(self) -> "timeout": + return self._do_enter() + + def __exit__( + self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType, + ) -> Optional[bool]: + self._do_exit(exc_type) + return None + + async def __aenter__(self) -> "timeout": + return self._do_enter() + + async def __aexit__( + self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType, + ) -> None: + self._do_exit(exc_type) + + @property + def expired(self) -> bool: + return self._cancelled + + @property + def remaining(self) -> Optional[float]: + if self._cancel_at is not None: + return max(self._cancel_at - self._loop.time(), 0.0) + else: + return None + + def _do_enter(self) -> "timeout": + # Support Tornado 5- without timeout + # Details: https://github.com/python/asyncio/issues/392 + if self._timeout is None: + return self + + self._task = asyncio.current_task(self._loop) + if self._task is None: + raise RuntimeError( + "Timeout context manager should be used " "inside a task" + ) + + if self._timeout <= 0: + self._loop.call_soon(self._cancel_task) + return self + + self._cancel_at = self._loop.time() + self._timeout + self._cancel_handler = self._loop.call_at(self._cancel_at, self._cancel_task) + return self + + def _do_exit(self, exc_type: Type[BaseException]) -> None: + if exc_type is asyncio.CancelledError and self._cancelled: + self._cancel_handler = None + self._task = None + raise asyncio.TimeoutError + if self._timeout is not None and self._cancel_handler is not None: + self._cancel_handler.cancel() + self._cancel_handler = None + self._task = None + return None + + def _cancel_task(self) -> None: + if self._task is not None: + self._task.cancel() + self._cancelled = True diff --git a/venv/Lib/site-packages/asgiref/typing.py b/venv/Lib/site-packages/asgiref/typing.py new file mode 100644 index 000000000..c7d7576dd --- /dev/null +++ b/venv/Lib/site-packages/asgiref/typing.py @@ -0,0 +1,242 @@ +import sys +from typing import Awaitable, Callable, Dict, Iterable, Optional, Tuple, Type, Union + +if sys.version_info >= (3, 8): + from typing import Literal, Protocol, TypedDict +else: + from typing_extensions import Literal, Protocol, TypedDict + +__all__ = ( + "ASGIVersions", + "HTTPScope", + "WebSocketScope", + "LifespanScope", + "WWWScope", + "Scope", + "HTTPRequestEvent", + "HTTPResponseStartEvent", + "HTTPResponseBodyEvent", + "HTTPServerPushEvent", + "HTTPDisconnectEvent", + "WebSocketConnectEvent", + "WebSocketAcceptEvent", + "WebSocketReceiveEvent", + "WebSocketSendEvent", + "WebSocketResponseStartEvent", + "WebSocketResponseBodyEvent", + "WebSocketDisconnectEvent", + "WebSocketCloseEvent", + "LifespanStartupEvent", + "LifespanShutdownEvent", + "LifespanStartupCompleteEvent", + "LifespanStartupFailedEvent", + "LifespanShutdownCompleteEvent", + "LifespanShutdownFailedEvent", + "ASGIReceiveEvent", + "ASGISendEvent", + "ASGIReceiveCallable", + "ASGISendCallable", + "ASGI2Protocol", + "ASGI2Application", + "ASGI3Application", + "ASGIApplication", +) + + +class ASGIVersions(TypedDict): + spec_version: str + version: Union[Literal["2.0"], Literal["3.0"]] + + +class HTTPScope(TypedDict): + type: Literal["http"] + asgi: ASGIVersions + http_version: str + method: str + scheme: str + path: str + raw_path: bytes + query_string: bytes + root_path: str + headers: Iterable[Tuple[bytes, bytes]] + client: Optional[Tuple[str, int]] + server: Optional[Tuple[str, Optional[int]]] + extensions: Optional[Dict[str, Dict[object, object]]] + + +class WebSocketScope(TypedDict): + type: Literal["websocket"] + asgi: ASGIVersions + http_version: str + scheme: str + path: str + raw_path: bytes + query_string: bytes + root_path: str + headers: Iterable[Tuple[bytes, bytes]] + client: Optional[Tuple[str, int]] + server: Optional[Tuple[str, Optional[int]]] + subprotocols: Iterable[str] + extensions: Optional[Dict[str, Dict[object, object]]] + + +class LifespanScope(TypedDict): + type: Literal["lifespan"] + asgi: ASGIVersions + + +WWWScope = Union[HTTPScope, WebSocketScope] +Scope = Union[HTTPScope, WebSocketScope, LifespanScope] + + +class HTTPRequestEvent(TypedDict): + type: Literal["http.request"] + body: bytes + more_body: bool + + +class HTTPResponseStartEvent(TypedDict): + type: Literal["http.response.start"] + status: int + headers: Iterable[Tuple[bytes, bytes]] + + +class HTTPResponseBodyEvent(TypedDict): + type: Literal["http.response.body"] + body: bytes + more_body: bool + + +class HTTPServerPushEvent(TypedDict): + type: Literal["http.response.push"] + path: str + headers: Iterable[Tuple[bytes, bytes]] + + +class HTTPDisconnectEvent(TypedDict): + type: Literal["http.disconnect"] + + +class WebSocketConnectEvent(TypedDict): + type: Literal["websocket.connect"] + + +class WebSocketAcceptEvent(TypedDict): + type: Literal["websocket.accept"] + subprotocol: Optional[str] + headers: Iterable[Tuple[bytes, bytes]] + + +class WebSocketReceiveEvent(TypedDict): + type: Literal["websocket.receive"] + bytes: Optional[bytes] + text: Optional[str] + + +class WebSocketSendEvent(TypedDict): + type: Literal["websocket.send"] + bytes: Optional[bytes] + text: Optional[str] + + +class WebSocketResponseStartEvent(TypedDict): + type: Literal["websocket.http.response.start"] + status: int + headers: Iterable[Tuple[bytes, bytes]] + + +class WebSocketResponseBodyEvent(TypedDict): + type: Literal["websocket.http.response.body"] + body: bytes + more_body: bool + + +class WebSocketDisconnectEvent(TypedDict): + type: Literal["websocket.disconnect"] + code: int + + +class WebSocketCloseEvent(TypedDict): + type: Literal["websocket.close"] + code: int + reason: Optional[str] + + +class LifespanStartupEvent(TypedDict): + type: Literal["lifespan.startup"] + + +class LifespanShutdownEvent(TypedDict): + type: Literal["lifespan.shutdown"] + + +class LifespanStartupCompleteEvent(TypedDict): + type: Literal["lifespan.startup.complete"] + + +class LifespanStartupFailedEvent(TypedDict): + type: Literal["lifespan.startup.failed"] + message: str + + +class LifespanShutdownCompleteEvent(TypedDict): + type: Literal["lifespan.shutdown.complete"] + + +class LifespanShutdownFailedEvent(TypedDict): + type: Literal["lifespan.shutdown.failed"] + message: str + + +ASGIReceiveEvent = Union[ + HTTPRequestEvent, + HTTPDisconnectEvent, + WebSocketConnectEvent, + WebSocketReceiveEvent, + WebSocketDisconnectEvent, + LifespanStartupEvent, + LifespanShutdownEvent, +] + + +ASGISendEvent = Union[ + HTTPResponseStartEvent, + HTTPResponseBodyEvent, + HTTPServerPushEvent, + HTTPDisconnectEvent, + WebSocketAcceptEvent, + WebSocketSendEvent, + WebSocketResponseStartEvent, + WebSocketResponseBodyEvent, + WebSocketCloseEvent, + LifespanStartupCompleteEvent, + LifespanStartupFailedEvent, + LifespanShutdownCompleteEvent, + LifespanShutdownFailedEvent, +] + + +ASGIReceiveCallable = Callable[[], Awaitable[ASGIReceiveEvent]] +ASGISendCallable = Callable[[ASGISendEvent], Awaitable[None]] + + +class ASGI2Protocol(Protocol): + def __init__(self, scope: Scope) -> None: + ... + + async def __call__( + self, receive: ASGIReceiveCallable, send: ASGISendCallable + ) -> None: + ... + + +ASGI2Application = Type[ASGI2Protocol] +ASGI3Application = Callable[ + [ + Scope, + ASGIReceiveCallable, + ASGISendCallable, + ], + Awaitable[None], +] +ASGIApplication = Union[ASGI2Application, ASGI3Application] diff --git a/venv/Lib/site-packages/asgiref/wsgi.py b/venv/Lib/site-packages/asgiref/wsgi.py new file mode 100644 index 000000000..40fba2055 --- /dev/null +++ b/venv/Lib/site-packages/asgiref/wsgi.py @@ -0,0 +1,162 @@ +from io import BytesIO +from tempfile import SpooledTemporaryFile + +from asgiref.sync import AsyncToSync, sync_to_async + + +class WsgiToAsgi: + """ + Wraps a WSGI application to make it into an ASGI application. + """ + + def __init__(self, wsgi_application): + self.wsgi_application = wsgi_application + + async def __call__(self, scope, receive, send): + """ + ASGI application instantiation point. + We return a new WsgiToAsgiInstance here with the WSGI app + and the scope, ready to respond when it is __call__ed. + """ + await WsgiToAsgiInstance(self.wsgi_application)(scope, receive, send) + + +class WsgiToAsgiInstance: + """ + Per-socket instance of a wrapped WSGI application + """ + + def __init__(self, wsgi_application): + self.wsgi_application = wsgi_application + self.response_started = False + self.response_content_length = None + + async def __call__(self, scope, receive, send): + if scope["type"] != "http": + raise ValueError("WSGI wrapper received a non-HTTP scope") + self.scope = scope + with SpooledTemporaryFile(max_size=65536) as body: + # Alright, wait for the http.request messages + while True: + message = await receive() + if message["type"] != "http.request": + raise ValueError("WSGI wrapper received a non-HTTP-request message") + body.write(message.get("body", b"")) + if not message.get("more_body"): + break + body.seek(0) + # Wrap send so it can be called from the subthread + self.sync_send = AsyncToSync(send) + # Call the WSGI app + await self.run_wsgi_app(body) + + def build_environ(self, scope, body): + """ + Builds a scope and request body into a WSGI environ object. + """ + environ = { + "REQUEST_METHOD": scope["method"], + "SCRIPT_NAME": scope.get("root_path", "").encode("utf8").decode("latin1"), + "PATH_INFO": scope["path"].encode("utf8").decode("latin1"), + "QUERY_STRING": scope["query_string"].decode("ascii"), + "SERVER_PROTOCOL": "HTTP/%s" % scope["http_version"], + "wsgi.version": (1, 0), + "wsgi.url_scheme": scope.get("scheme", "http"), + "wsgi.input": body, + "wsgi.errors": BytesIO(), + "wsgi.multithread": True, + "wsgi.multiprocess": True, + "wsgi.run_once": False, + } + # Get server name and port - required in WSGI, not in ASGI + if "server" in scope: + environ["SERVER_NAME"] = scope["server"][0] + environ["SERVER_PORT"] = str(scope["server"][1]) + else: + environ["SERVER_NAME"] = "localhost" + environ["SERVER_PORT"] = "80" + + if "client" in scope: + environ["REMOTE_ADDR"] = scope["client"][0] + + # Go through headers and make them into environ entries + for name, value in self.scope.get("headers", []): + name = name.decode("latin1") + if name == "content-length": + corrected_name = "CONTENT_LENGTH" + elif name == "content-type": + corrected_name = "CONTENT_TYPE" + else: + corrected_name = "HTTP_%s" % name.upper().replace("-", "_") + # HTTPbis say only ASCII chars are allowed in headers, but we latin1 just in case + value = value.decode("latin1") + if corrected_name in environ: + value = environ[corrected_name] + "," + value + environ[corrected_name] = value + return environ + + def start_response(self, status, response_headers, exc_info=None): + """ + WSGI start_response callable. + """ + # Don't allow re-calling once response has begun + if self.response_started: + raise exc_info[1].with_traceback(exc_info[2]) + # Don't allow re-calling without exc_info + if hasattr(self, "response_start") and exc_info is None: + raise ValueError( + "You cannot call start_response a second time without exc_info" + ) + # Extract status code + status_code, _ = status.split(" ", 1) + status_code = int(status_code) + # Extract headers + headers = [ + (name.lower().encode("ascii"), value.encode("ascii")) + for name, value in response_headers + ] + # Extract content-length + self.response_content_length = None + for name, value in response_headers: + if name.lower() == "content-length": + self.response_content_length = int(value) + # Build and send response start message. + self.response_start = { + "type": "http.response.start", + "status": status_code, + "headers": headers, + } + + @sync_to_async + def run_wsgi_app(self, body): + """ + Called in a subthread to run the WSGI app. We encapsulate like + this so that the start_response callable is called in the same thread. + """ + # Translate the scope and incoming request body into a WSGI environ + environ = self.build_environ(self.scope, body) + # Run the WSGI app + bytes_sent = 0 + for output in self.wsgi_application(environ, self.start_response): + # If this is the first response, include the response headers + if not self.response_started: + self.response_started = True + self.sync_send(self.response_start) + # If the application supplies a Content-Length header + if self.response_content_length is not None: + # The server should not transmit more bytes to the client than the header allows + bytes_allowed = self.response_content_length - bytes_sent + if len(output) > bytes_allowed: + output = output[:bytes_allowed] + self.sync_send( + {"type": "http.response.body", "body": output, "more_body": True} + ) + bytes_sent += len(output) + # The server should stop iterating over the response when enough data has been sent + if bytes_sent == self.response_content_length: + break + # Close connection + if not self.response_started: + self.response_started = True + self.sync_send(self.response_start) + self.sync_send({"type": "http.response.body"}) diff --git a/venv/Lib/site-packages/distutils-precedence.pth b/venv/Lib/site-packages/distutils-precedence.pth new file mode 100644 index 000000000..6de4198fc --- /dev/null +++ b/venv/Lib/site-packages/distutils-precedence.pth @@ -0,0 +1 @@ +import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'stdlib') == 'local'; enabled and __import__('_distutils_hack').add_shim(); diff --git a/venv/Lib/site-packages/django/__init__.py b/venv/Lib/site-packages/django/__init__.py new file mode 100644 index 000000000..e1b5657d4 --- /dev/null +++ b/venv/Lib/site-packages/django/__init__.py @@ -0,0 +1,24 @@ +from django.utils.version import get_version + +VERSION = (4, 0, 6, "final", 0) + +__version__ = get_version(VERSION) + + +def setup(set_prefix=True): + """ + Configure the settings (this happens as a side effect of accessing the + first setting), configure logging and populate the app registry. + Set the thread-local urlresolvers script prefix if `set_prefix` is True. + """ + from django.apps import apps + from django.conf import settings + from django.urls import set_script_prefix + from django.utils.log import configure_logging + + configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) + if set_prefix: + set_script_prefix( + "/" if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME + ) + apps.populate(settings.INSTALLED_APPS) diff --git a/venv/Lib/site-packages/django/__main__.py b/venv/Lib/site-packages/django/__main__.py new file mode 100644 index 000000000..8b96e91ea --- /dev/null +++ b/venv/Lib/site-packages/django/__main__.py @@ -0,0 +1,9 @@ +""" +Invokes django-admin when the django module is run as a script. + +Example: python -m django check +""" +from django.core import management + +if __name__ == "__main__": + management.execute_from_command_line() diff --git a/venv/Lib/site-packages/django/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c7e203f2b1aa6f25cecc8a96c07a3c0d36ad6fd GIT binary patch literal 1000 zcmY*Y&2G~`5cc{fN%N-`_0FCUmPmR>2vMbJh!m122_RV(uIpVp8ywr(T~`z(r}7|h z*@yvMUn{Q^dX`@lqVEz8^t_jlyZ&Rq@3u=x&gEm`dS0M{!Jkl+&}-UVpyFt30ahLishVQL8W9# zB=A!?X9CatETf6QKD<~kLNN_P8c3Xm*bf3K1O%(Z0xD!&$UTJp3X)?UI%Ap0l^(JiJ3EcEhQWg`Y%eTLE!( zs`nn1!OIUlz*g{z@*M86a>-)R21I_K+|9wL*Xs{^US~8s@AsVY&UTK@N0Uz1n|3Ds z@yr{ZzUexZ{k)uJe>k0;4hG#b?{qw#+LlxO*LcCHpixvV>U`ID4a(iU?>u+k3K*R` z$%XLUvoy$;G?BvXG5I>bbkEhnwZ=SMz}dQ2G`VsI?9vrX(pKgNAN`05ciYN|=dpxI z&ueGb8w={^nd(#=gQ%D4NIgy6L^^te%s+<)Z@`bCjb=di_`hlFt_#;8U{ikAolN_q m;il&8?~&&fxkU>PL|uhfUMy3R$MmJTO+pchHNr+(>BSHWNYiw=+Wo#R`BFW z@Cm$Vwzc5E%rKLg%$JGT+)PoBulx7>E%=W*_%Cq?4uZO!U zitQG}&&dmlkVtM8+G#%J>A9Ym5jZS{Ob<-PgpwLR7ND^&;4h1n5!D#5bl6rJGlv;= z+{)5-)AV@CR5^woE@!?l8fR+N#S7r0^fM5lPBc#y(`*0=w4b*qRZMD1FFVcoI;FyJ zO8Xm2hAuZ2Z2h9TPBR7JY#XM)D-ZO+8b!HL;Wk0XQo}2 zkt4&adZHtz(w|j1Ig!@+?8=%Ua8D+nC*(rr#7PfX$@nM`IUG4u`|xn|bej z?|W~QFE57R z<9^y4w+1cK57PFyGw6)NL1>;E>C(76=(Pif#YQ5X2+6jK zY^akwQ!LIn8>X>RLNPsxHM^uHadwG~i&Q5Qe42`Vk*YA?W_KUn>a!0rmg^Bj9ORO# zb$la~IF@(4mX%~$V(lTVOm!+u6D95qo3x4Q*TS8iZ{bp}q0!E+J9B5=%$YT~`&sa~sl8cq z=FftsJ`C?2ejYOXHiRx@2J5oLJ+XsP4r`G`ux|$cY$wJr2Z?+%0N4rtKG-JEPy+m9XR-R?uL^%GynJQZ``LYT`fJ3>eC zmdevYi>Q$4)!w6dPy!Tb3NZ#!f>%q`()JT^z{s`hY?3RLY^76+qWLy&ut$)n05=mk zB)XPZ0Apt3B#n{c)ud|xa-QxBvrCeGYE{@{9np{sM<-;lSY4y2s4OL`$YyCijES!* zDIX{WY_gaUHgg%vDb}?lz_zB0i|rUu^cExAvN;NV`al-gP>#66=Pb77uQ4*0P(_L_ z2~d*IQZ7~6kY#&~($l#_7I4Y{Hd1AC?||-um3j}6Awh$E+Ymm>cK!MlJSmF4aLqe< z*_SV(J4Yz`2Bj2+hIHtyc4o*NPdypVKtEr2Upn_OV(8{8qeV?O?B|7$)B6GpB4M7p zafZ;5R-@a+aE~Ea5&bLyHJJo(0~9s2383=2!4mm+Ec7Vn>?)jL)*y)GTNI&DE+de0 z&o1%^9Hxal^$DZtX`+rNkCUB|W;{2-C=Pb>ExWUFHL6?|Azo?6J-=*?VijvG4Oc4y!I$nown?9M2ms0;kf zU3RjuD$fxWS*|e&mal@vn2e3%DNz70LF}xF!KD!CNuvy-+lMz1W15-2X zi78b8$7F_{V8jOmE^@Ec%Xp>Q$(>|RSd`T(_RS>hrm8kRG#gMB&Lm1%1E9AJ-opy0 zQ8KfgJQK{SZt`eeWMDQTq0)!Y!-poP%(qAO#qdc0!|dZi>94iRy0Ph%%j!!1`D^!b zb{TaQl@F$5f}#mB7PE@>mJQzI%YaoGCP=kNjHqzRz@*7`WU^=!m7U141iInFI4#7x zQsz=piBUETtq;1l;m&)xewUmnJ@Y0)RL13!RouwxH6#&=ygitND-S+SecOG=zOz~ z(k%*>_%E?k7NWEha&q2>}b-=*ezXv%(Qa4Cze>1*Y)BikeQ+c>pF4hIm zG3WljOstAnX--yjw4qY5E+7api}f!KVqX9Hq2KRc?|H}E_}sl-y8T|q@U!d#5*FDV z^hzH-^I;SXmZ~$~24)#O4aDCFzYf1FBE+#Hxp6>4)AvAYQ-v$X{U=`bg4E&CIsDEwpL gZ6MiERH6pXi;ZrRRP=)IXl1E=vAx`WrTfyq0FSHK3;+NC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/apps/__init__.py b/venv/Lib/site-packages/django/apps/__init__.py new file mode 100644 index 000000000..96674be73 --- /dev/null +++ b/venv/Lib/site-packages/django/apps/__init__.py @@ -0,0 +1,4 @@ +from .config import AppConfig +from .registry import apps + +__all__ = ["AppConfig", "apps"] diff --git a/venv/Lib/site-packages/django/apps/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/apps/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46787de23b526995a180270aac9e7f89e043530d GIT binary patch literal 291 zcmYjL%SyyB6iw1jXOzxgxane?{UD-@s0$HM+>|gOZDPpSHX%11m{0PT07EYK6newY6I_ylE9h&aDNPzPT*YV>Js!I}N91SU9OPcz2w}Va^!uI>tVbo2Q#Z zzjV8yuOJ=J=MjL@8`F-x96ZoF?eE8i-f9Pa_2kT6ww@m3aG(#mp`g87S>C>LC4q`P iACy@qKWoPHpgm*f_81lyy%A$4FOz*JB9*AbCHVtn^h}8W literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/apps/__pycache__/config.cpython-310.pyc b/venv/Lib/site-packages/django/apps/__pycache__/config.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..389c6ac354817a2efddcb22a651b3e3fc2b902ec GIT binary patch literal 7132 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/apps/__pycache__/registry.cpython-310.pyc b/venv/Lib/site-packages/django/apps/__pycache__/registry.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95a0402ddf1afdd1cd593ccfef1e14b161d05154 GIT binary patch literal 13074 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/apps/config.py b/venv/Lib/site-packages/django/apps/config.py new file mode 100644 index 000000000..53d385213 --- /dev/null +++ b/venv/Lib/site-packages/django/apps/config.py @@ -0,0 +1,309 @@ +import inspect +import os +import warnings +from importlib import import_module + +from django.core.exceptions import ImproperlyConfigured +from django.utils.deprecation import RemovedInDjango41Warning +from django.utils.functional import cached_property +from django.utils.module_loading import import_string, module_has_submodule + +APPS_MODULE_NAME = "apps" +MODELS_MODULE_NAME = "models" + + +class AppConfig: + """Class representing a Django application and its configuration.""" + + def __init__(self, app_name, app_module): + # Full Python path to the application e.g. 'django.contrib.admin'. + self.name = app_name + + # Root module for the application e.g. . + self.module = app_module + + # Reference to the Apps registry that holds this AppConfig. Set by the + # registry when it registers the AppConfig instance. + self.apps = None + + # The following attributes could be defined at the class level in a + # subclass, hence the test-and-set pattern. + + # Last component of the Python path to the application e.g. 'admin'. + # This value must be unique across a Django project. + if not hasattr(self, "label"): + self.label = app_name.rpartition(".")[2] + if not self.label.isidentifier(): + raise ImproperlyConfigured( + "The app label '%s' is not a valid Python identifier." % self.label + ) + + # Human-readable name for the application e.g. "Admin". + if not hasattr(self, "verbose_name"): + self.verbose_name = self.label.title() + + # Filesystem path to the application directory e.g. + # '/path/to/django/contrib/admin'. + if not hasattr(self, "path"): + self.path = self._path_from_module(app_module) + + # Module containing models e.g. . Set by import_models(). + # None if the application doesn't have a models module. + self.models_module = None + + # Mapping of lowercase model names to model classes. Initially set to + # None to prevent accidental access before import_models() runs. + self.models = None + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.label) + + @cached_property + def default_auto_field(self): + from django.conf import settings + + return settings.DEFAULT_AUTO_FIELD + + @property + def _is_default_auto_field_overridden(self): + return self.__class__.default_auto_field is not AppConfig.default_auto_field + + def _path_from_module(self, module): + """Attempt to determine app's filesystem path from its module.""" + # See #21874 for extended discussion of the behavior of this method in + # various cases. + # Convert to list because __path__ may not support indexing. + paths = list(getattr(module, "__path__", [])) + if len(paths) != 1: + filename = getattr(module, "__file__", None) + if filename is not None: + paths = [os.path.dirname(filename)] + else: + # For unknown reasons, sometimes the list returned by __path__ + # contains duplicates that must be removed (#25246). + paths = list(set(paths)) + if len(paths) > 1: + raise ImproperlyConfigured( + "The app module %r has multiple filesystem locations (%r); " + "you must configure this app with an AppConfig subclass " + "with a 'path' class attribute." % (module, paths) + ) + elif not paths: + raise ImproperlyConfigured( + "The app module %r has no filesystem location, " + "you must configure this app with an AppConfig subclass " + "with a 'path' class attribute." % module + ) + return paths[0] + + @classmethod + def create(cls, entry): + """ + Factory that creates an app config from an entry in INSTALLED_APPS. + """ + # create() eventually returns app_config_class(app_name, app_module). + app_config_class = None + app_config_name = None + app_name = None + app_module = None + + # If import_module succeeds, entry points to the app module. + try: + app_module = import_module(entry) + except Exception: + pass + else: + # If app_module has an apps submodule that defines a single + # AppConfig subclass, use it automatically. + # To prevent this, an AppConfig subclass can declare a class + # variable default = False. + # If the apps module defines more than one AppConfig subclass, + # the default one can declare default = True. + if module_has_submodule(app_module, APPS_MODULE_NAME): + mod_path = "%s.%s" % (entry, APPS_MODULE_NAME) + mod = import_module(mod_path) + # Check if there's exactly one AppConfig candidate, + # excluding those that explicitly define default = False. + app_configs = [ + (name, candidate) + for name, candidate in inspect.getmembers(mod, inspect.isclass) + if ( + issubclass(candidate, cls) + and candidate is not cls + and getattr(candidate, "default", True) + ) + ] + if len(app_configs) == 1: + app_config_class = app_configs[0][1] + app_config_name = "%s.%s" % (mod_path, app_configs[0][0]) + else: + # Check if there's exactly one AppConfig subclass, + # among those that explicitly define default = True. + app_configs = [ + (name, candidate) + for name, candidate in app_configs + if getattr(candidate, "default", False) + ] + if len(app_configs) > 1: + candidates = [repr(name) for name, _ in app_configs] + raise RuntimeError( + "%r declares more than one default AppConfig: " + "%s." % (mod_path, ", ".join(candidates)) + ) + elif len(app_configs) == 1: + app_config_class = app_configs[0][1] + app_config_name = "%s.%s" % (mod_path, app_configs[0][0]) + + # If app_module specifies a default_app_config, follow the link. + # default_app_config is deprecated, but still takes over the + # automatic detection for backwards compatibility during the + # deprecation period. + try: + new_entry = app_module.default_app_config + except AttributeError: + # Use the default app config class if we didn't find anything. + if app_config_class is None: + app_config_class = cls + app_name = entry + else: + message = "%r defines default_app_config = %r. " % (entry, new_entry) + if new_entry == app_config_name: + message += ( + "Django now detects this configuration automatically. " + "You can remove default_app_config." + ) + else: + message += ( + "However, Django's automatic detection %s. You should " + "move the default config class to the apps submodule " + "of your application and, if this module defines " + "several config classes, mark the default one with " + "default = True." + % ( + "picked another configuration, %r" % app_config_name + if app_config_name + else "did not find this configuration" + ) + ) + warnings.warn(message, RemovedInDjango41Warning, stacklevel=2) + entry = new_entry + app_config_class = None + + # If import_string succeeds, entry is an app config class. + if app_config_class is None: + try: + app_config_class = import_string(entry) + except Exception: + pass + # If both import_module and import_string failed, it means that entry + # doesn't have a valid value. + if app_module is None and app_config_class is None: + # If the last component of entry starts with an uppercase letter, + # then it was likely intended to be an app config class; if not, + # an app module. Provide a nice error message in both cases. + mod_path, _, cls_name = entry.rpartition(".") + if mod_path and cls_name[0].isupper(): + # We could simply re-trigger the string import exception, but + # we're going the extra mile and providing a better error + # message for typos in INSTALLED_APPS. + # This may raise ImportError, which is the best exception + # possible if the module at mod_path cannot be imported. + mod = import_module(mod_path) + candidates = [ + repr(name) + for name, candidate in inspect.getmembers(mod, inspect.isclass) + if issubclass(candidate, cls) and candidate is not cls + ] + msg = "Module '%s' does not contain a '%s' class." % ( + mod_path, + cls_name, + ) + if candidates: + msg += " Choices are: %s." % ", ".join(candidates) + raise ImportError(msg) + else: + # Re-trigger the module import exception. + import_module(entry) + + # Check for obvious errors. (This check prevents duck typing, but + # it could be removed if it became a problem in practice.) + if not issubclass(app_config_class, AppConfig): + raise ImproperlyConfigured("'%s' isn't a subclass of AppConfig." % entry) + + # Obtain app name here rather than in AppClass.__init__ to keep + # all error checking for entries in INSTALLED_APPS in one place. + if app_name is None: + try: + app_name = app_config_class.name + except AttributeError: + raise ImproperlyConfigured("'%s' must supply a name attribute." % entry) + + # Ensure app_name points to a valid module. + try: + app_module = import_module(app_name) + except ImportError: + raise ImproperlyConfigured( + "Cannot import '%s'. Check that '%s.%s.name' is correct." + % ( + app_name, + app_config_class.__module__, + app_config_class.__qualname__, + ) + ) + + # Entry is a path to an app config class. + return app_config_class(app_name, app_module) + + def get_model(self, model_name, require_ready=True): + """ + Return the model with the given case-insensitive model_name. + + Raise LookupError if no model exists with this name. + """ + if require_ready: + self.apps.check_models_ready() + else: + self.apps.check_apps_ready() + try: + return self.models[model_name.lower()] + except KeyError: + raise LookupError( + "App '%s' doesn't have a '%s' model." % (self.label, model_name) + ) + + def get_models(self, include_auto_created=False, include_swapped=False): + """ + Return an iterable of models. + + By default, the following models aren't included: + + - auto-created models for many-to-many relations without + an explicit intermediate table, + - models that have been swapped out. + + Set the corresponding keyword argument to True to include such models. + Keyword arguments aren't documented; they're a private API. + """ + self.apps.check_models_ready() + for model in self.models.values(): + if model._meta.auto_created and not include_auto_created: + continue + if model._meta.swapped and not include_swapped: + continue + yield model + + def import_models(self): + # Dictionary of models for this app, primarily maintained in the + # 'all_models' attribute of the Apps this AppConfig is attached to. + self.models = self.apps.all_models[self.label] + + if module_has_submodule(self.module, MODELS_MODULE_NAME): + models_module_name = "%s.%s" % (self.name, MODELS_MODULE_NAME) + self.models_module = import_module(models_module_name) + + def ready(self): + """ + Override this method in subclasses to run code when Django starts. + """ diff --git a/venv/Lib/site-packages/django/apps/registry.py b/venv/Lib/site-packages/django/apps/registry.py new file mode 100644 index 000000000..c5ba3a307 --- /dev/null +++ b/venv/Lib/site-packages/django/apps/registry.py @@ -0,0 +1,436 @@ +import functools +import sys +import threading +import warnings +from collections import Counter, defaultdict +from functools import partial + +from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured + +from .config import AppConfig + + +class Apps: + """ + A registry that stores the configuration of installed applications. + + It also keeps track of models, e.g. to provide reverse relations. + """ + + def __init__(self, installed_apps=()): + # installed_apps is set to None when creating the master registry + # because it cannot be populated at that point. Other registries must + # provide a list of installed apps and are populated immediately. + if installed_apps is None and hasattr(sys.modules[__name__], "apps"): + raise RuntimeError("You must supply an installed_apps argument.") + + # Mapping of app labels => model names => model classes. Every time a + # model is imported, ModelBase.__new__ calls apps.register_model which + # creates an entry in all_models. All imported models are registered, + # regardless of whether they're defined in an installed application + # and whether the registry has been populated. Since it isn't possible + # to reimport a module safely (it could reexecute initialization code) + # all_models is never overridden or reset. + self.all_models = defaultdict(dict) + + # Mapping of labels to AppConfig instances for installed apps. + self.app_configs = {} + + # Stack of app_configs. Used to store the current state in + # set_available_apps and set_installed_apps. + self.stored_app_configs = [] + + # Whether the registry is populated. + self.apps_ready = self.models_ready = self.ready = False + # For the autoreloader. + self.ready_event = threading.Event() + + # Lock for thread-safe population. + self._lock = threading.RLock() + self.loading = False + + # Maps ("app_label", "modelname") tuples to lists of functions to be + # called when the corresponding model is ready. Used by this class's + # `lazy_model_operation()` and `do_pending_operations()` methods. + self._pending_operations = defaultdict(list) + + # Populate apps and models, unless it's the master registry. + if installed_apps is not None: + self.populate(installed_apps) + + def populate(self, installed_apps=None): + """ + Load application configurations and models. + + Import each application module and then each model module. + + It is thread-safe and idempotent, but not reentrant. + """ + if self.ready: + return + + # populate() might be called by two threads in parallel on servers + # that create threads before initializing the WSGI callable. + with self._lock: + if self.ready: + return + + # An RLock prevents other threads from entering this section. The + # compare and set operation below is atomic. + if self.loading: + # Prevent reentrant calls to avoid running AppConfig.ready() + # methods twice. + raise RuntimeError("populate() isn't reentrant") + self.loading = True + + # Phase 1: initialize app configs and import app modules. + for entry in installed_apps: + if isinstance(entry, AppConfig): + app_config = entry + else: + app_config = AppConfig.create(entry) + if app_config.label in self.app_configs: + raise ImproperlyConfigured( + "Application labels aren't unique, " + "duplicates: %s" % app_config.label + ) + + self.app_configs[app_config.label] = app_config + app_config.apps = self + + # Check for duplicate app names. + counts = Counter( + app_config.name for app_config in self.app_configs.values() + ) + duplicates = [name for name, count in counts.most_common() if count > 1] + if duplicates: + raise ImproperlyConfigured( + "Application names aren't unique, " + "duplicates: %s" % ", ".join(duplicates) + ) + + self.apps_ready = True + + # Phase 2: import models modules. + for app_config in self.app_configs.values(): + app_config.import_models() + + self.clear_cache() + + self.models_ready = True + + # Phase 3: run ready() methods of app configs. + for app_config in self.get_app_configs(): + app_config.ready() + + self.ready = True + self.ready_event.set() + + def check_apps_ready(self): + """Raise an exception if all apps haven't been imported yet.""" + if not self.apps_ready: + from django.conf import settings + + # If "not ready" is due to unconfigured settings, accessing + # INSTALLED_APPS raises a more helpful ImproperlyConfigured + # exception. + settings.INSTALLED_APPS + raise AppRegistryNotReady("Apps aren't loaded yet.") + + def check_models_ready(self): + """Raise an exception if all models haven't been imported yet.""" + if not self.models_ready: + raise AppRegistryNotReady("Models aren't loaded yet.") + + def get_app_configs(self): + """Import applications and return an iterable of app configs.""" + self.check_apps_ready() + return self.app_configs.values() + + def get_app_config(self, app_label): + """ + Import applications and returns an app config for the given label. + + Raise LookupError if no application exists with this label. + """ + self.check_apps_ready() + try: + return self.app_configs[app_label] + except KeyError: + message = "No installed app with label '%s'." % app_label + for app_config in self.get_app_configs(): + if app_config.name == app_label: + message += " Did you mean '%s'?" % app_config.label + break + raise LookupError(message) + + # This method is performance-critical at least for Django's test suite. + @functools.lru_cache(maxsize=None) + def get_models(self, include_auto_created=False, include_swapped=False): + """ + Return a list of all installed models. + + By default, the following models aren't included: + + - auto-created models for many-to-many relations without + an explicit intermediate table, + - models that have been swapped out. + + Set the corresponding keyword argument to True to include such models. + """ + self.check_models_ready() + + result = [] + for app_config in self.app_configs.values(): + result.extend(app_config.get_models(include_auto_created, include_swapped)) + return result + + def get_model(self, app_label, model_name=None, require_ready=True): + """ + Return the model matching the given app_label and model_name. + + As a shortcut, app_label may be in the form .. + + model_name is case-insensitive. + + Raise LookupError if no application exists with this label, or no + model exists with this name in the application. Raise ValueError if + called with a single argument that doesn't contain exactly one dot. + """ + if require_ready: + self.check_models_ready() + else: + self.check_apps_ready() + + if model_name is None: + app_label, model_name = app_label.split(".") + + app_config = self.get_app_config(app_label) + + if not require_ready and app_config.models is None: + app_config.import_models() + + return app_config.get_model(model_name, require_ready=require_ready) + + def register_model(self, app_label, model): + # Since this method is called when models are imported, it cannot + # perform imports because of the risk of import loops. It mustn't + # call get_app_config(). + model_name = model._meta.model_name + app_models = self.all_models[app_label] + if model_name in app_models: + if ( + model.__name__ == app_models[model_name].__name__ + and model.__module__ == app_models[model_name].__module__ + ): + warnings.warn( + "Model '%s.%s' was already registered. Reloading models is not " + "advised as it can lead to inconsistencies, most notably with " + "related models." % (app_label, model_name), + RuntimeWarning, + stacklevel=2, + ) + else: + raise RuntimeError( + "Conflicting '%s' models in application '%s': %s and %s." + % (model_name, app_label, app_models[model_name], model) + ) + app_models[model_name] = model + self.do_pending_operations(model) + self.clear_cache() + + def is_installed(self, app_name): + """ + Check whether an application with this name exists in the registry. + + app_name is the full name of the app e.g. 'django.contrib.admin'. + """ + self.check_apps_ready() + return any(ac.name == app_name for ac in self.app_configs.values()) + + def get_containing_app_config(self, object_name): + """ + Look for an app config containing a given object. + + object_name is the dotted Python path to the object. + + Return the app config for the inner application in case of nesting. + Return None if the object isn't in any registered app config. + """ + self.check_apps_ready() + candidates = [] + for app_config in self.app_configs.values(): + if object_name.startswith(app_config.name): + subpath = object_name[len(app_config.name) :] + if subpath == "" or subpath[0] == ".": + candidates.append(app_config) + if candidates: + return sorted(candidates, key=lambda ac: -len(ac.name))[0] + + def get_registered_model(self, app_label, model_name): + """ + Similar to get_model(), but doesn't require that an app exists with + the given app_label. + + It's safe to call this method at import time, even while the registry + is being populated. + """ + model = self.all_models[app_label].get(model_name.lower()) + if model is None: + raise LookupError("Model '%s.%s' not registered." % (app_label, model_name)) + return model + + @functools.lru_cache(maxsize=None) + def get_swappable_settings_name(self, to_string): + """ + For a given model string (e.g. "auth.User"), return the name of the + corresponding settings name if it refers to a swappable model. If the + referred model is not swappable, return None. + + This method is decorated with lru_cache because it's performance + critical when it comes to migrations. Since the swappable settings don't + change after Django has loaded the settings, there is no reason to get + the respective settings attribute over and over again. + """ + to_string = to_string.lower() + for model in self.get_models(include_swapped=True): + swapped = model._meta.swapped + # Is this model swapped out for the model given by to_string? + if swapped and swapped.lower() == to_string: + return model._meta.swappable + # Is this model swappable and the one given by to_string? + if model._meta.swappable and model._meta.label_lower == to_string: + return model._meta.swappable + return None + + def set_available_apps(self, available): + """ + Restrict the set of installed apps used by get_app_config[s]. + + available must be an iterable of application names. + + set_available_apps() must be balanced with unset_available_apps(). + + Primarily used for performance optimization in TransactionTestCase. + + This method is safe in the sense that it doesn't trigger any imports. + """ + available = set(available) + installed = {app_config.name for app_config in self.get_app_configs()} + if not available.issubset(installed): + raise ValueError( + "Available apps isn't a subset of installed apps, extra apps: %s" + % ", ".join(available - installed) + ) + + self.stored_app_configs.append(self.app_configs) + self.app_configs = { + label: app_config + for label, app_config in self.app_configs.items() + if app_config.name in available + } + self.clear_cache() + + def unset_available_apps(self): + """Cancel a previous call to set_available_apps().""" + self.app_configs = self.stored_app_configs.pop() + self.clear_cache() + + def set_installed_apps(self, installed): + """ + Enable a different set of installed apps for get_app_config[s]. + + installed must be an iterable in the same format as INSTALLED_APPS. + + set_installed_apps() must be balanced with unset_installed_apps(), + even if it exits with an exception. + + Primarily used as a receiver of the setting_changed signal in tests. + + This method may trigger new imports, which may add new models to the + registry of all imported models. They will stay in the registry even + after unset_installed_apps(). Since it isn't possible to replay + imports safely (e.g. that could lead to registering listeners twice), + models are registered when they're imported and never removed. + """ + if not self.ready: + raise AppRegistryNotReady("App registry isn't ready yet.") + self.stored_app_configs.append(self.app_configs) + self.app_configs = {} + self.apps_ready = self.models_ready = self.loading = self.ready = False + self.clear_cache() + self.populate(installed) + + def unset_installed_apps(self): + """Cancel a previous call to set_installed_apps().""" + self.app_configs = self.stored_app_configs.pop() + self.apps_ready = self.models_ready = self.ready = True + self.clear_cache() + + def clear_cache(self): + """ + Clear all internal caches, for methods that alter the app registry. + + This is mostly used in tests. + """ + # Call expire cache on each model. This will purge + # the relation tree and the fields cache. + self.get_models.cache_clear() + if self.ready: + # Circumvent self.get_models() to prevent that the cache is refilled. + # This particularly prevents that an empty value is cached while cloning. + for app_config in self.app_configs.values(): + for model in app_config.get_models(include_auto_created=True): + model._meta._expire_cache() + + def lazy_model_operation(self, function, *model_keys): + """ + Take a function and a number of ("app_label", "modelname") tuples, and + when all the corresponding models have been imported and registered, + call the function with the model classes as its arguments. + + The function passed to this method must accept exactly n models as + arguments, where n=len(model_keys). + """ + # Base case: no arguments, just execute the function. + if not model_keys: + function() + # Recursive case: take the head of model_keys, wait for the + # corresponding model class to be imported and registered, then apply + # that argument to the supplied function. Pass the resulting partial + # to lazy_model_operation() along with the remaining model args and + # repeat until all models are loaded and all arguments are applied. + else: + next_model, *more_models = model_keys + + # This will be executed after the class corresponding to next_model + # has been imported and registered. The `func` attribute provides + # duck-type compatibility with partials. + def apply_next_model(model): + next_function = partial(apply_next_model.func, model) + self.lazy_model_operation(next_function, *more_models) + + apply_next_model.func = function + + # If the model has already been imported and registered, partially + # apply it to the function now. If not, add it to the list of + # pending operations for the model, where it will be executed with + # the model class as its sole argument once the model is ready. + try: + model_class = self.get_registered_model(*next_model) + except LookupError: + self._pending_operations[next_model].append(apply_next_model) + else: + apply_next_model(model_class) + + def do_pending_operations(self, model): + """ + Take a newly-prepared model and pass it to each function waiting for + it. This is called at the very end of Apps.register_model(). + """ + key = model._meta.app_label, model._meta.model_name + for function in self._pending_operations.pop(key, []): + function(model) + + +apps = Apps(installed_apps=None) diff --git a/venv/Lib/site-packages/django/conf/__init__.py b/venv/Lib/site-packages/django/conf/__init__.py new file mode 100644 index 000000000..2fda24a23 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/__init__.py @@ -0,0 +1,295 @@ +""" +Settings and configuration for Django. + +Read values from the module specified by the DJANGO_SETTINGS_MODULE environment +variable, and then from django.conf.global_settings; see the global_settings.py +for a list of all possible variables. +""" + +import importlib +import os +import time +import traceback +import warnings +from pathlib import Path + +import django +from django.conf import global_settings +from django.core.exceptions import ImproperlyConfigured +from django.utils.deprecation import RemovedInDjango50Warning +from django.utils.functional import LazyObject, empty + +ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE" + +# RemovedInDjango50Warning +USE_DEPRECATED_PYTZ_DEPRECATED_MSG = ( + "The USE_DEPRECATED_PYTZ setting, and support for pytz timezones is " + "deprecated in favor of the stdlib zoneinfo module. Please update your " + "code to use zoneinfo and remove the USE_DEPRECATED_PYTZ setting." +) + +USE_L10N_DEPRECATED_MSG = ( + "The USE_L10N setting is deprecated. Starting with Django 5.0, localized " + "formatting of data will always be enabled. For example Django will " + "display numbers and dates using the format of the current locale." +) + + +class SettingsReference(str): + """ + String subclass which references a current settings value. It's treated as + the value in memory but serializes to a settings.NAME attribute reference. + """ + + def __new__(self, value, setting_name): + return str.__new__(self, value) + + def __init__(self, value, setting_name): + self.setting_name = setting_name + + +class LazySettings(LazyObject): + """ + A lazy proxy for either global Django settings or a custom settings object. + The user can manually configure settings prior to using them. Otherwise, + Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE. + """ + + def _setup(self, name=None): + """ + Load the settings module pointed to by the environment variable. This + is used the first time settings are needed, if the user hasn't + configured settings manually. + """ + settings_module = os.environ.get(ENVIRONMENT_VARIABLE) + if not settings_module: + desc = ("setting %s" % name) if name else "settings" + raise ImproperlyConfigured( + "Requested %s, but settings are not configured. " + "You must either define the environment variable %s " + "or call settings.configure() before accessing settings." + % (desc, ENVIRONMENT_VARIABLE) + ) + + self._wrapped = Settings(settings_module) + + def __repr__(self): + # Hardcode the class name as otherwise it yields 'Settings'. + if self._wrapped is empty: + return "" + return '' % { + "settings_module": self._wrapped.SETTINGS_MODULE, + } + + def __getattr__(self, name): + """Return the value of a setting and cache it in self.__dict__.""" + if self._wrapped is empty: + self._setup(name) + val = getattr(self._wrapped, name) + + # Special case some settings which require further modification. + # This is done here for performance reasons so the modified value is cached. + if name in {"MEDIA_URL", "STATIC_URL"} and val is not None: + val = self._add_script_prefix(val) + elif name == "SECRET_KEY" and not val: + raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.") + + self.__dict__[name] = val + return val + + def __setattr__(self, name, value): + """ + Set the value of setting. Clear all cached values if _wrapped changes + (@override_settings does this) or clear single values when set. + """ + if name == "_wrapped": + self.__dict__.clear() + else: + self.__dict__.pop(name, None) + super().__setattr__(name, value) + + def __delattr__(self, name): + """Delete a setting and clear it from cache if needed.""" + super().__delattr__(name) + self.__dict__.pop(name, None) + + def configure(self, default_settings=global_settings, **options): + """ + Called to manually configure the settings. The 'default_settings' + parameter sets where to retrieve any unspecified values from (its + argument must support attribute access (__getattr__)). + """ + if self._wrapped is not empty: + raise RuntimeError("Settings already configured.") + holder = UserSettingsHolder(default_settings) + for name, value in options.items(): + if not name.isupper(): + raise TypeError("Setting %r must be uppercase." % name) + setattr(holder, name, value) + self._wrapped = holder + + @staticmethod + def _add_script_prefix(value): + """ + Add SCRIPT_NAME prefix to relative paths. + + Useful when the app is being served at a subpath and manually prefixing + subpath to STATIC_URL and MEDIA_URL in settings is inconvenient. + """ + # Don't apply prefix to absolute paths and URLs. + if value.startswith(("http://", "https://", "/")): + return value + from django.urls import get_script_prefix + + return "%s%s" % (get_script_prefix(), value) + + @property + def configured(self): + """Return True if the settings have already been configured.""" + return self._wrapped is not empty + + @property + def USE_L10N(self): + stack = traceback.extract_stack() + # Show a warning if the setting is used outside of Django. + # Stack index: -1 this line, -2 the caller. + filename, _, _, _ = stack[-2] + if not filename.startswith(os.path.dirname(django.__file__)): + warnings.warn( + USE_L10N_DEPRECATED_MSG, + RemovedInDjango50Warning, + stacklevel=2, + ) + return self.__getattr__("USE_L10N") + + # RemovedInDjango50Warning. + @property + def _USE_L10N_INTERNAL(self): + # Special hook to avoid checking a traceback in internal use on hot + # paths. + return self.__getattr__("USE_L10N") + + +class Settings: + def __init__(self, settings_module): + # update this dict from global settings (but only for ALL_CAPS settings) + for setting in dir(global_settings): + if setting.isupper(): + setattr(self, setting, getattr(global_settings, setting)) + + # store the settings module in case someone later cares + self.SETTINGS_MODULE = settings_module + + mod = importlib.import_module(self.SETTINGS_MODULE) + + tuple_settings = ( + "ALLOWED_HOSTS", + "INSTALLED_APPS", + "TEMPLATE_DIRS", + "LOCALE_PATHS", + ) + self._explicit_settings = set() + for setting in dir(mod): + if setting.isupper(): + setting_value = getattr(mod, setting) + + if setting in tuple_settings and not isinstance( + setting_value, (list, tuple) + ): + raise ImproperlyConfigured( + "The %s setting must be a list or a tuple." % setting + ) + setattr(self, setting, setting_value) + self._explicit_settings.add(setting) + + if self.USE_TZ is False and not self.is_overridden("USE_TZ"): + warnings.warn( + "The default value of USE_TZ will change from False to True " + "in Django 5.0. Set USE_TZ to False in your project settings " + "if you want to keep the current default behavior.", + category=RemovedInDjango50Warning, + ) + + if self.is_overridden("USE_DEPRECATED_PYTZ"): + warnings.warn(USE_DEPRECATED_PYTZ_DEPRECATED_MSG, RemovedInDjango50Warning) + + if hasattr(time, "tzset") and self.TIME_ZONE: + # When we can, attempt to validate the timezone. If we can't find + # this file, no check happens and it's harmless. + zoneinfo_root = Path("/usr/share/zoneinfo") + zone_info_file = zoneinfo_root.joinpath(*self.TIME_ZONE.split("/")) + if zoneinfo_root.exists() and not zone_info_file.exists(): + raise ValueError("Incorrect timezone setting: %s" % self.TIME_ZONE) + # Move the time zone info into os.environ. See ticket #2315 for why + # we don't do this unconditionally (breaks Windows). + os.environ["TZ"] = self.TIME_ZONE + time.tzset() + + if self.is_overridden("USE_L10N"): + warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning) + + def is_overridden(self, setting): + return setting in self._explicit_settings + + def __repr__(self): + return '<%(cls)s "%(settings_module)s">' % { + "cls": self.__class__.__name__, + "settings_module": self.SETTINGS_MODULE, + } + + +class UserSettingsHolder: + """Holder for user configured settings.""" + + # SETTINGS_MODULE doesn't make much sense in the manually configured + # (standalone) case. + SETTINGS_MODULE = None + + def __init__(self, default_settings): + """ + Requests for configuration variables not in this class are satisfied + from the module specified in default_settings (if possible). + """ + self.__dict__["_deleted"] = set() + self.default_settings = default_settings + + def __getattr__(self, name): + if not name.isupper() or name in self._deleted: + raise AttributeError + return getattr(self.default_settings, name) + + def __setattr__(self, name, value): + self._deleted.discard(name) + if name == "USE_L10N": + warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning) + super().__setattr__(name, value) + if name == "USE_DEPRECATED_PYTZ": + warnings.warn(USE_DEPRECATED_PYTZ_DEPRECATED_MSG, RemovedInDjango50Warning) + + def __delattr__(self, name): + self._deleted.add(name) + if hasattr(self, name): + super().__delattr__(name) + + def __dir__(self): + return sorted( + s + for s in [*self.__dict__, *dir(self.default_settings)] + if s not in self._deleted + ) + + def is_overridden(self, setting): + deleted = setting in self._deleted + set_locally = setting in self.__dict__ + set_on_default = getattr( + self.default_settings, "is_overridden", lambda s: False + )(setting) + return deleted or set_locally or set_on_default + + def __repr__(self): + return "<%(cls)s>" % { + "cls": self.__class__.__name__, + } + + +settings = LazySettings() diff --git a/venv/Lib/site-packages/django/conf/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcb805bc5de374ee7b13cc9bfd2d8cb7be16d554 GIT binary patch literal 10061 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 B4`KiS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/__pycache__/global_settings.cpython-310.pyc b/venv/Lib/site-packages/django/conf/__pycache__/global_settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ec9a1311b782f8b3e2acf4f8fb99c88ad914c37 GIT binary patch literal 9090 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 NG!{<`R>)~A`d4vC4FdoG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/app_template/__init__.py-tpl b/venv/Lib/site-packages/django/conf/app_template/__init__.py-tpl new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/app_template/admin.py-tpl b/venv/Lib/site-packages/django/conf/app_template/admin.py-tpl new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/app_template/admin.py-tpl @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/venv/Lib/site-packages/django/conf/app_template/apps.py-tpl b/venv/Lib/site-packages/django/conf/app_template/apps.py-tpl new file mode 100644 index 000000000..b70535218 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/app_template/apps.py-tpl @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class {{ camel_case_app_name }}Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = '{{ app_name }}' diff --git a/venv/Lib/site-packages/django/conf/app_template/migrations/__init__.py-tpl b/venv/Lib/site-packages/django/conf/app_template/migrations/__init__.py-tpl new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/app_template/models.py-tpl b/venv/Lib/site-packages/django/conf/app_template/models.py-tpl new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/app_template/models.py-tpl @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/venv/Lib/site-packages/django/conf/app_template/tests.py-tpl b/venv/Lib/site-packages/django/conf/app_template/tests.py-tpl new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/app_template/tests.py-tpl @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/venv/Lib/site-packages/django/conf/app_template/views.py-tpl b/venv/Lib/site-packages/django/conf/app_template/views.py-tpl new file mode 100644 index 000000000..91ea44a21 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/app_template/views.py-tpl @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/venv/Lib/site-packages/django/conf/global_settings.py b/venv/Lib/site-packages/django/conf/global_settings.py new file mode 100644 index 000000000..ba0f391f8 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/global_settings.py @@ -0,0 +1,659 @@ +""" +Default Django settings. Override these with settings in the module pointed to +by the DJANGO_SETTINGS_MODULE environment variable. +""" + + +# This is defined here as a do-nothing function because we can't import +# django.utils.translation -- that module depends on the settings. +def gettext_noop(s): + return s + + +#################### +# CORE # +#################### + +DEBUG = False + +# Whether the framework should propagate raw exceptions rather than catching +# them. This is useful under some testing situations and should never be used +# on a live site. +DEBUG_PROPAGATE_EXCEPTIONS = False + +# People who get code error notifications. In the format +# [('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com')] +ADMINS = [] + +# List of IP addresses, as strings, that: +# * See debug comments, when DEBUG is true +# * Receive x-headers +INTERNAL_IPS = [] + +# Hosts/domain names that are valid for this site. +# "*" matches anything, ".example.com" matches example.com and all subdomains +ALLOWED_HOSTS = [] + +# Local time zone for this installation. All choices can be found here: +# https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all +# systems may support all possibilities). When USE_TZ is True, this is +# interpreted as the default user time zone. +TIME_ZONE = "America/Chicago" + +# If you set this to True, Django will use timezone-aware datetimes. +USE_TZ = False + +# RemovedInDjango50Warning: It's a transitional setting helpful in migrating +# from pytz tzinfo to ZoneInfo(). Set True to continue using pytz tzinfo +# objects during the Django 4.x release cycle. +USE_DEPRECATED_PYTZ = False + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = "en-us" + +# Languages we provide translations for, out of the box. +LANGUAGES = [ + ("af", gettext_noop("Afrikaans")), + ("ar", gettext_noop("Arabic")), + ("ar-dz", gettext_noop("Algerian Arabic")), + ("ast", gettext_noop("Asturian")), + ("az", gettext_noop("Azerbaijani")), + ("bg", gettext_noop("Bulgarian")), + ("be", gettext_noop("Belarusian")), + ("bn", gettext_noop("Bengali")), + ("br", gettext_noop("Breton")), + ("bs", gettext_noop("Bosnian")), + ("ca", gettext_noop("Catalan")), + ("cs", gettext_noop("Czech")), + ("cy", gettext_noop("Welsh")), + ("da", gettext_noop("Danish")), + ("de", gettext_noop("German")), + ("dsb", gettext_noop("Lower Sorbian")), + ("el", gettext_noop("Greek")), + ("en", gettext_noop("English")), + ("en-au", gettext_noop("Australian English")), + ("en-gb", gettext_noop("British English")), + ("eo", gettext_noop("Esperanto")), + ("es", gettext_noop("Spanish")), + ("es-ar", gettext_noop("Argentinian Spanish")), + ("es-co", gettext_noop("Colombian Spanish")), + ("es-mx", gettext_noop("Mexican Spanish")), + ("es-ni", gettext_noop("Nicaraguan Spanish")), + ("es-ve", gettext_noop("Venezuelan Spanish")), + ("et", gettext_noop("Estonian")), + ("eu", gettext_noop("Basque")), + ("fa", gettext_noop("Persian")), + ("fi", gettext_noop("Finnish")), + ("fr", gettext_noop("French")), + ("fy", gettext_noop("Frisian")), + ("ga", gettext_noop("Irish")), + ("gd", gettext_noop("Scottish Gaelic")), + ("gl", gettext_noop("Galician")), + ("he", gettext_noop("Hebrew")), + ("hi", gettext_noop("Hindi")), + ("hr", gettext_noop("Croatian")), + ("hsb", gettext_noop("Upper Sorbian")), + ("hu", gettext_noop("Hungarian")), + ("hy", gettext_noop("Armenian")), + ("ia", gettext_noop("Interlingua")), + ("id", gettext_noop("Indonesian")), + ("ig", gettext_noop("Igbo")), + ("io", gettext_noop("Ido")), + ("is", gettext_noop("Icelandic")), + ("it", gettext_noop("Italian")), + ("ja", gettext_noop("Japanese")), + ("ka", gettext_noop("Georgian")), + ("kab", gettext_noop("Kabyle")), + ("kk", gettext_noop("Kazakh")), + ("km", gettext_noop("Khmer")), + ("kn", gettext_noop("Kannada")), + ("ko", gettext_noop("Korean")), + ("ky", gettext_noop("Kyrgyz")), + ("lb", gettext_noop("Luxembourgish")), + ("lt", gettext_noop("Lithuanian")), + ("lv", gettext_noop("Latvian")), + ("mk", gettext_noop("Macedonian")), + ("ml", gettext_noop("Malayalam")), + ("mn", gettext_noop("Mongolian")), + ("mr", gettext_noop("Marathi")), + ("ms", gettext_noop("Malay")), + ("my", gettext_noop("Burmese")), + ("nb", gettext_noop("Norwegian Bokmål")), + ("ne", gettext_noop("Nepali")), + ("nl", gettext_noop("Dutch")), + ("nn", gettext_noop("Norwegian Nynorsk")), + ("os", gettext_noop("Ossetic")), + ("pa", gettext_noop("Punjabi")), + ("pl", gettext_noop("Polish")), + ("pt", gettext_noop("Portuguese")), + ("pt-br", gettext_noop("Brazilian Portuguese")), + ("ro", gettext_noop("Romanian")), + ("ru", gettext_noop("Russian")), + ("sk", gettext_noop("Slovak")), + ("sl", gettext_noop("Slovenian")), + ("sq", gettext_noop("Albanian")), + ("sr", gettext_noop("Serbian")), + ("sr-latn", gettext_noop("Serbian Latin")), + ("sv", gettext_noop("Swedish")), + ("sw", gettext_noop("Swahili")), + ("ta", gettext_noop("Tamil")), + ("te", gettext_noop("Telugu")), + ("tg", gettext_noop("Tajik")), + ("th", gettext_noop("Thai")), + ("tk", gettext_noop("Turkmen")), + ("tr", gettext_noop("Turkish")), + ("tt", gettext_noop("Tatar")), + ("udm", gettext_noop("Udmurt")), + ("uk", gettext_noop("Ukrainian")), + ("ur", gettext_noop("Urdu")), + ("uz", gettext_noop("Uzbek")), + ("vi", gettext_noop("Vietnamese")), + ("zh-hans", gettext_noop("Simplified Chinese")), + ("zh-hant", gettext_noop("Traditional Chinese")), +] + +# Languages using BiDi (right-to-left) layout +LANGUAGES_BIDI = ["he", "ar", "ar-dz", "fa", "ur"] + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True +LOCALE_PATHS = [] + +# Settings for language cookie +LANGUAGE_COOKIE_NAME = "django_language" +LANGUAGE_COOKIE_AGE = None +LANGUAGE_COOKIE_DOMAIN = None +LANGUAGE_COOKIE_PATH = "/" +LANGUAGE_COOKIE_SECURE = False +LANGUAGE_COOKIE_HTTPONLY = False +LANGUAGE_COOKIE_SAMESITE = None + + +# If you set this to True, Django will format dates, numbers and calendars +# according to user current locale. +USE_L10N = True + +# Not-necessarily-technical managers of the site. They get broken link +# notifications and other various emails. +MANAGERS = ADMINS + +# Default charset to use for all HttpResponse objects, if a MIME type isn't +# manually specified. It's used to construct the Content-Type header. +DEFAULT_CHARSET = "utf-8" + +# Email address that error messages come from. +SERVER_EMAIL = "root@localhost" + +# Database connection info. If left empty, will default to the dummy backend. +DATABASES = {} + +# Classes used to implement DB routing behavior. +DATABASE_ROUTERS = [] + +# The email backend to use. For possible shortcuts see django.core.mail. +# The default is to use the SMTP backend. +# Third-party backends can be specified by providing a Python path +# to a module that defines an EmailBackend class. +EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" + +# Host for sending email. +EMAIL_HOST = "localhost" + +# Port for sending email. +EMAIL_PORT = 25 + +# Whether to send SMTP 'Date' header in the local time zone or in UTC. +EMAIL_USE_LOCALTIME = False + +# Optional SMTP authentication information for EMAIL_HOST. +EMAIL_HOST_USER = "" +EMAIL_HOST_PASSWORD = "" +EMAIL_USE_TLS = False +EMAIL_USE_SSL = False +EMAIL_SSL_CERTFILE = None +EMAIL_SSL_KEYFILE = None +EMAIL_TIMEOUT = None + +# List of strings representing installed apps. +INSTALLED_APPS = [] + +TEMPLATES = [] + +# Default form rendering class. +FORM_RENDERER = "django.forms.renderers.DjangoTemplates" + +# Default email address to use for various automated correspondence from +# the site managers. +DEFAULT_FROM_EMAIL = "webmaster@localhost" + +# Subject-line prefix for email messages send with django.core.mail.mail_admins +# or ...mail_managers. Make sure to include the trailing space. +EMAIL_SUBJECT_PREFIX = "[Django] " + +# Whether to append trailing slashes to URLs. +APPEND_SLASH = True + +# Whether to prepend the "www." subdomain to URLs that don't have it. +PREPEND_WWW = False + +# Override the server-derived value of SCRIPT_NAME +FORCE_SCRIPT_NAME = None + +# List of compiled regular expression objects representing User-Agent strings +# that are not allowed to visit any page, systemwide. Use this for bad +# robots/crawlers. Here are a few examples: +# import re +# DISALLOWED_USER_AGENTS = [ +# re.compile(r'^NaverBot.*'), +# re.compile(r'^EmailSiphon.*'), +# re.compile(r'^SiteSucker.*'), +# re.compile(r'^sohu-search'), +# ] +DISALLOWED_USER_AGENTS = [] + +ABSOLUTE_URL_OVERRIDES = {} + +# List of compiled regular expression objects representing URLs that need not +# be reported by BrokenLinkEmailsMiddleware. Here are a few examples: +# import re +# IGNORABLE_404_URLS = [ +# re.compile(r'^/apple-touch-icon.*\.png$'), +# re.compile(r'^/favicon.ico$'), +# re.compile(r'^/robots.txt$'), +# re.compile(r'^/phpmyadmin/'), +# re.compile(r'\.(cgi|php|pl)$'), +# ] +IGNORABLE_404_URLS = [] + +# A secret key for this particular Django installation. Used in secret-key +# hashing algorithms. Set this in your settings, or Django will complain +# loudly. +SECRET_KEY = "" + +# Default file storage mechanism that holds media. +DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage" + +# Absolute filesystem path to the directory that will hold user-uploaded files. +# Example: "/var/www/example.com/media/" +MEDIA_ROOT = "" + +# URL that handles the media served from MEDIA_ROOT. +# Examples: "http://example.com/media/", "http://media.example.com/" +MEDIA_URL = "" + +# Absolute path to the directory static files should be collected to. +# Example: "/var/www/example.com/static/" +STATIC_ROOT = None + +# URL that handles the static files served from STATIC_ROOT. +# Example: "http://example.com/static/", "http://static.example.com/" +STATIC_URL = None + +# List of upload handler classes to be applied in order. +FILE_UPLOAD_HANDLERS = [ + "django.core.files.uploadhandler.MemoryFileUploadHandler", + "django.core.files.uploadhandler.TemporaryFileUploadHandler", +] + +# Maximum size, in bytes, of a request before it will be streamed to the +# file system instead of into memory. +FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB + +# Maximum size in bytes of request data (excluding file uploads) that will be +# read before a SuspiciousOperation (RequestDataTooBig) is raised. +DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB + +# Maximum number of GET/POST parameters that will be read before a +# SuspiciousOperation (TooManyFieldsSent) is raised. +DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 + +# Directory in which upload streamed files will be temporarily saved. A value of +# `None` will make Django use the operating system's default temporary directory +# (i.e. "/tmp" on *nix systems). +FILE_UPLOAD_TEMP_DIR = None + +# The numeric mode to set newly-uploaded files to. The value should be a mode +# you'd pass directly to os.chmod; see +# https://docs.python.org/library/os.html#files-and-directories. +FILE_UPLOAD_PERMISSIONS = 0o644 + +# The numeric mode to assign to newly-created directories, when uploading files. +# The value should be a mode as you'd pass to os.chmod; +# see https://docs.python.org/library/os.html#files-and-directories. +FILE_UPLOAD_DIRECTORY_PERMISSIONS = None + +# Python module path where user will place custom format definition. +# The directory where this setting is pointing should contain subdirectories +# named as the locales, containing a formats.py file +# (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use) +FORMAT_MODULE_PATH = None + +# Default formatting for date objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "N j, Y" + +# Default formatting for datetime objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATETIME_FORMAT = "N j, Y, P" + +# Default formatting for time objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +TIME_FORMAT = "P" + +# Default formatting for date objects when only the year and month are relevant. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +YEAR_MONTH_FORMAT = "F Y" + +# Default formatting for date objects when only the month and day are relevant. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +MONTH_DAY_FORMAT = "F j" + +# Default short formatting for date objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +SHORT_DATE_FORMAT = "m/d/Y" + +# Default short formatting for datetime objects. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +SHORT_DATETIME_FORMAT = "m/d/Y P" + +# Default formats to be used when parsing dates from input boxes, in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%m/%d/%Y", # '10/25/2006' + "%m/%d/%y", # '10/25/06' + "%b %d %Y", # 'Oct 25 2006' + "%b %d, %Y", # 'Oct 25, 2006' + "%d %b %Y", # '25 Oct 2006' + "%d %b, %Y", # '25 Oct, 2006' + "%B %d %Y", # 'October 25 2006' + "%B %d, %Y", # 'October 25, 2006' + "%d %B %Y", # '25 October 2006' + "%d %B, %Y", # '25 October, 2006' +] + +# Default formats to be used when parsing times from input boxes, in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '14:30:59' + "%H:%M:%S.%f", # '14:30:59.000200' + "%H:%M", # '14:30' +] + +# Default formats to be used when parsing dates and times from input boxes, +# in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%m/%d/%Y %H:%M:%S", # '10/25/2006 14:30:59' + "%m/%d/%Y %H:%M:%S.%f", # '10/25/2006 14:30:59.000200' + "%m/%d/%Y %H:%M", # '10/25/2006 14:30' + "%m/%d/%y %H:%M:%S", # '10/25/06 14:30:59' + "%m/%d/%y %H:%M:%S.%f", # '10/25/06 14:30:59.000200' + "%m/%d/%y %H:%M", # '10/25/06 14:30' +] + +# First day of week, to be used on calendars +# 0 means Sunday, 1 means Monday... +FIRST_DAY_OF_WEEK = 0 + +# Decimal separator symbol +DECIMAL_SEPARATOR = "." + +# Boolean that sets whether to add thousand separator when formatting numbers +USE_THOUSAND_SEPARATOR = False + +# Number of digits that will be together, when splitting them by +# THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands... +NUMBER_GROUPING = 0 + +# Thousand separator symbol +THOUSAND_SEPARATOR = "," + +# The tablespaces to use for each model when not specified otherwise. +DEFAULT_TABLESPACE = "" +DEFAULT_INDEX_TABLESPACE = "" + +# Default primary key field type. +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + +# Default X-Frame-Options header value +X_FRAME_OPTIONS = "DENY" + +USE_X_FORWARDED_HOST = False +USE_X_FORWARDED_PORT = False + +# The Python dotted path to the WSGI application that Django's internal server +# (runserver) will use. If `None`, the return value of +# 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same +# behavior as previous versions of Django. Otherwise this should point to an +# actual WSGI application object. +WSGI_APPLICATION = None + +# If your Django app is behind a proxy that sets a header to specify secure +# connections, AND that proxy ensures that user-submitted headers with the +# same name are ignored (so that people can't spoof it), set this value to +# a tuple of (header_name, header_value). For any requests that come in with +# that header/value, request.is_secure() will return True. +# WARNING! Only set this if you fully understand what you're doing. Otherwise, +# you may be opening yourself up to a security risk. +SECURE_PROXY_SSL_HEADER = None + +############## +# MIDDLEWARE # +############## + +# List of middleware to use. Order is important; in the request phase, these +# middleware will be applied in the order given, and in the response +# phase the middleware will be applied in reverse order. +MIDDLEWARE = [] + +############ +# SESSIONS # +############ + +# Cache to store session data if using the cache session backend. +SESSION_CACHE_ALIAS = "default" +# Cookie name. This can be whatever you want. +SESSION_COOKIE_NAME = "sessionid" +# Age of cookie, in seconds (default: 2 weeks). +SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 +# A string like "example.com", or None for standard domain cookie. +SESSION_COOKIE_DOMAIN = None +# Whether the session cookie should be secure (https:// only). +SESSION_COOKIE_SECURE = False +# The path of the session cookie. +SESSION_COOKIE_PATH = "/" +# Whether to use the HttpOnly flag. +SESSION_COOKIE_HTTPONLY = True +# Whether to set the flag restricting cookie leaks on cross-site requests. +# This can be 'Lax', 'Strict', 'None', or False to disable the flag. +SESSION_COOKIE_SAMESITE = "Lax" +# Whether to save the session data on every request. +SESSION_SAVE_EVERY_REQUEST = False +# Whether a user's session cookie expires when the web browser is closed. +SESSION_EXPIRE_AT_BROWSER_CLOSE = False +# The module to store session data +SESSION_ENGINE = "django.contrib.sessions.backends.db" +# Directory to store session files if using the file session module. If None, +# the backend will use a sensible default. +SESSION_FILE_PATH = None +# class to serialize session data +SESSION_SERIALIZER = "django.contrib.sessions.serializers.JSONSerializer" + +######### +# CACHE # +######### + +# The cache backends to use. +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", + } +} +CACHE_MIDDLEWARE_KEY_PREFIX = "" +CACHE_MIDDLEWARE_SECONDS = 600 +CACHE_MIDDLEWARE_ALIAS = "default" + +################## +# AUTHENTICATION # +################## + +AUTH_USER_MODEL = "auth.User" + +AUTHENTICATION_BACKENDS = ["django.contrib.auth.backends.ModelBackend"] + +LOGIN_URL = "/accounts/login/" + +LOGIN_REDIRECT_URL = "/accounts/profile/" + +LOGOUT_REDIRECT_URL = None + +# The number of seconds a password reset link is valid for (default: 3 days). +PASSWORD_RESET_TIMEOUT = 60 * 60 * 24 * 3 + +# the first hasher in this list is the preferred algorithm. any +# password using different algorithms will be converted automatically +# upon login +PASSWORD_HASHERS = [ + "django.contrib.auth.hashers.PBKDF2PasswordHasher", + "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher", + "django.contrib.auth.hashers.Argon2PasswordHasher", + "django.contrib.auth.hashers.BCryptSHA256PasswordHasher", + "django.contrib.auth.hashers.ScryptPasswordHasher", +] + +AUTH_PASSWORD_VALIDATORS = [] + +########### +# SIGNING # +########### + +SIGNING_BACKEND = "django.core.signing.TimestampSigner" + +######## +# CSRF # +######## + +# Dotted path to callable to be used as view when a request is +# rejected by the CSRF middleware. +CSRF_FAILURE_VIEW = "django.views.csrf.csrf_failure" + +# Settings for CSRF cookie. +CSRF_COOKIE_NAME = "csrftoken" +CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 +CSRF_COOKIE_DOMAIN = None +CSRF_COOKIE_PATH = "/" +CSRF_COOKIE_SECURE = False +CSRF_COOKIE_HTTPONLY = False +CSRF_COOKIE_SAMESITE = "Lax" +CSRF_HEADER_NAME = "HTTP_X_CSRFTOKEN" +CSRF_TRUSTED_ORIGINS = [] +CSRF_USE_SESSIONS = False + +############ +# MESSAGES # +############ + +# Class to use as messages backend +MESSAGE_STORAGE = "django.contrib.messages.storage.fallback.FallbackStorage" + +# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within +# django.contrib.messages to avoid imports in this settings file. + +########### +# LOGGING # +########### + +# The callable to use to configure logging +LOGGING_CONFIG = "logging.config.dictConfig" + +# Custom logging configuration. +LOGGING = {} + +# Default exception reporter class used in case none has been +# specifically assigned to the HttpRequest instance. +DEFAULT_EXCEPTION_REPORTER = "django.views.debug.ExceptionReporter" + +# Default exception reporter filter class used in case none has been +# specifically assigned to the HttpRequest instance. +DEFAULT_EXCEPTION_REPORTER_FILTER = "django.views.debug.SafeExceptionReporterFilter" + +########### +# TESTING # +########### + +# The name of the class to use to run the test suite +TEST_RUNNER = "django.test.runner.DiscoverRunner" + +# Apps that don't need to be serialized at test database creation time +# (only apps with migrations are to start with) +TEST_NON_SERIALIZED_APPS = [] + +############ +# FIXTURES # +############ + +# The list of directories to search for fixtures +FIXTURE_DIRS = [] + +############### +# STATICFILES # +############### + +# A list of locations of additional static files +STATICFILES_DIRS = [] + +# The default file storage backend used during the build process +STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage" + +# List of finder classes that know how to find static files in +# various locations. +STATICFILES_FINDERS = [ + "django.contrib.staticfiles.finders.FileSystemFinder", + "django.contrib.staticfiles.finders.AppDirectoriesFinder", + # 'django.contrib.staticfiles.finders.DefaultStorageFinder', +] + +############## +# MIGRATIONS # +############## + +# Migration module overrides for apps, by app label. +MIGRATION_MODULES = {} + +################# +# SYSTEM CHECKS # +################# + +# List of all issues generated by system checks that should be silenced. Light +# issues like warnings, infos or debugs will not generate a message. Silencing +# serious issues like errors and criticals does not result in hiding the +# message, but Django will not stop you from e.g. running server. +SILENCED_SYSTEM_CHECKS = [] + +####################### +# SECURITY MIDDLEWARE # +####################### +SECURE_CONTENT_TYPE_NOSNIFF = True +SECURE_CROSS_ORIGIN_OPENER_POLICY = "same-origin" +SECURE_HSTS_INCLUDE_SUBDOMAINS = False +SECURE_HSTS_PRELOAD = False +SECURE_HSTS_SECONDS = 0 +SECURE_REDIRECT_EXEMPT = [] +SECURE_REFERRER_POLICY = "same-origin" +SECURE_SSL_HOST = None +SECURE_SSL_REDIRECT = False diff --git a/venv/Lib/site-packages/django/conf/locale/__init__.py b/venv/Lib/site-packages/django/conf/locale/__init__.py new file mode 100644 index 000000000..a18d5775d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/__init__.py @@ -0,0 +1,617 @@ +""" +LANG_INFO is a dictionary structure to provide meta information about languages. + +About name_local: capitalize it as if your language name was appearing +inside a sentence in your language. +The 'fallback' key can be used to specify a special fallback logic which doesn't +follow the traditional 'fr-ca' -> 'fr' fallback logic. +""" + +LANG_INFO = { + "af": { + "bidi": False, + "code": "af", + "name": "Afrikaans", + "name_local": "Afrikaans", + }, + "ar": { + "bidi": True, + "code": "ar", + "name": "Arabic", + "name_local": "العربيّة", + }, + "ar-dz": { + "bidi": True, + "code": "ar-dz", + "name": "Algerian Arabic", + "name_local": "العربية الجزائرية", + }, + "ast": { + "bidi": False, + "code": "ast", + "name": "Asturian", + "name_local": "asturianu", + }, + "az": { + "bidi": True, + "code": "az", + "name": "Azerbaijani", + "name_local": "Azərbaycanca", + }, + "be": { + "bidi": False, + "code": "be", + "name": "Belarusian", + "name_local": "беларуская", + }, + "bg": { + "bidi": False, + "code": "bg", + "name": "Bulgarian", + "name_local": "български", + }, + "bn": { + "bidi": False, + "code": "bn", + "name": "Bengali", + "name_local": "বাংলা", + }, + "br": { + "bidi": False, + "code": "br", + "name": "Breton", + "name_local": "brezhoneg", + }, + "bs": { + "bidi": False, + "code": "bs", + "name": "Bosnian", + "name_local": "bosanski", + }, + "ca": { + "bidi": False, + "code": "ca", + "name": "Catalan", + "name_local": "català", + }, + "cs": { + "bidi": False, + "code": "cs", + "name": "Czech", + "name_local": "česky", + }, + "cy": { + "bidi": False, + "code": "cy", + "name": "Welsh", + "name_local": "Cymraeg", + }, + "da": { + "bidi": False, + "code": "da", + "name": "Danish", + "name_local": "dansk", + }, + "de": { + "bidi": False, + "code": "de", + "name": "German", + "name_local": "Deutsch", + }, + "dsb": { + "bidi": False, + "code": "dsb", + "name": "Lower Sorbian", + "name_local": "dolnoserbski", + }, + "el": { + "bidi": False, + "code": "el", + "name": "Greek", + "name_local": "Ελληνικά", + }, + "en": { + "bidi": False, + "code": "en", + "name": "English", + "name_local": "English", + }, + "en-au": { + "bidi": False, + "code": "en-au", + "name": "Australian English", + "name_local": "Australian English", + }, + "en-gb": { + "bidi": False, + "code": "en-gb", + "name": "British English", + "name_local": "British English", + }, + "eo": { + "bidi": False, + "code": "eo", + "name": "Esperanto", + "name_local": "Esperanto", + }, + "es": { + "bidi": False, + "code": "es", + "name": "Spanish", + "name_local": "español", + }, + "es-ar": { + "bidi": False, + "code": "es-ar", + "name": "Argentinian Spanish", + "name_local": "español de Argentina", + }, + "es-co": { + "bidi": False, + "code": "es-co", + "name": "Colombian Spanish", + "name_local": "español de Colombia", + }, + "es-mx": { + "bidi": False, + "code": "es-mx", + "name": "Mexican Spanish", + "name_local": "español de Mexico", + }, + "es-ni": { + "bidi": False, + "code": "es-ni", + "name": "Nicaraguan Spanish", + "name_local": "español de Nicaragua", + }, + "es-ve": { + "bidi": False, + "code": "es-ve", + "name": "Venezuelan Spanish", + "name_local": "español de Venezuela", + }, + "et": { + "bidi": False, + "code": "et", + "name": "Estonian", + "name_local": "eesti", + }, + "eu": { + "bidi": False, + "code": "eu", + "name": "Basque", + "name_local": "Basque", + }, + "fa": { + "bidi": True, + "code": "fa", + "name": "Persian", + "name_local": "فارسی", + }, + "fi": { + "bidi": False, + "code": "fi", + "name": "Finnish", + "name_local": "suomi", + }, + "fr": { + "bidi": False, + "code": "fr", + "name": "French", + "name_local": "français", + }, + "fy": { + "bidi": False, + "code": "fy", + "name": "Frisian", + "name_local": "frysk", + }, + "ga": { + "bidi": False, + "code": "ga", + "name": "Irish", + "name_local": "Gaeilge", + }, + "gd": { + "bidi": False, + "code": "gd", + "name": "Scottish Gaelic", + "name_local": "Gàidhlig", + }, + "gl": { + "bidi": False, + "code": "gl", + "name": "Galician", + "name_local": "galego", + }, + "he": { + "bidi": True, + "code": "he", + "name": "Hebrew", + "name_local": "עברית", + }, + "hi": { + "bidi": False, + "code": "hi", + "name": "Hindi", + "name_local": "हिंदी", + }, + "hr": { + "bidi": False, + "code": "hr", + "name": "Croatian", + "name_local": "Hrvatski", + }, + "hsb": { + "bidi": False, + "code": "hsb", + "name": "Upper Sorbian", + "name_local": "hornjoserbsce", + }, + "hu": { + "bidi": False, + "code": "hu", + "name": "Hungarian", + "name_local": "Magyar", + }, + "hy": { + "bidi": False, + "code": "hy", + "name": "Armenian", + "name_local": "հայերեն", + }, + "ia": { + "bidi": False, + "code": "ia", + "name": "Interlingua", + "name_local": "Interlingua", + }, + "io": { + "bidi": False, + "code": "io", + "name": "Ido", + "name_local": "ido", + }, + "id": { + "bidi": False, + "code": "id", + "name": "Indonesian", + "name_local": "Bahasa Indonesia", + }, + "ig": { + "bidi": False, + "code": "ig", + "name": "Igbo", + "name_local": "Asụsụ Ìgbò", + }, + "is": { + "bidi": False, + "code": "is", + "name": "Icelandic", + "name_local": "Íslenska", + }, + "it": { + "bidi": False, + "code": "it", + "name": "Italian", + "name_local": "italiano", + }, + "ja": { + "bidi": False, + "code": "ja", + "name": "Japanese", + "name_local": "日本語", + }, + "ka": { + "bidi": False, + "code": "ka", + "name": "Georgian", + "name_local": "ქართული", + }, + "kab": { + "bidi": False, + "code": "kab", + "name": "Kabyle", + "name_local": "taqbaylit", + }, + "kk": { + "bidi": False, + "code": "kk", + "name": "Kazakh", + "name_local": "Қазақ", + }, + "km": { + "bidi": False, + "code": "km", + "name": "Khmer", + "name_local": "Khmer", + }, + "kn": { + "bidi": False, + "code": "kn", + "name": "Kannada", + "name_local": "Kannada", + }, + "ko": { + "bidi": False, + "code": "ko", + "name": "Korean", + "name_local": "한국어", + }, + "ky": { + "bidi": False, + "code": "ky", + "name": "Kyrgyz", + "name_local": "Кыргызча", + }, + "lb": { + "bidi": False, + "code": "lb", + "name": "Luxembourgish", + "name_local": "Lëtzebuergesch", + }, + "lt": { + "bidi": False, + "code": "lt", + "name": "Lithuanian", + "name_local": "Lietuviškai", + }, + "lv": { + "bidi": False, + "code": "lv", + "name": "Latvian", + "name_local": "latviešu", + }, + "mk": { + "bidi": False, + "code": "mk", + "name": "Macedonian", + "name_local": "Македонски", + }, + "ml": { + "bidi": False, + "code": "ml", + "name": "Malayalam", + "name_local": "മലയാളം", + }, + "mn": { + "bidi": False, + "code": "mn", + "name": "Mongolian", + "name_local": "Mongolian", + }, + "mr": { + "bidi": False, + "code": "mr", + "name": "Marathi", + "name_local": "मराठी", + }, + "ms": { + "bidi": False, + "code": "ms", + "name": "Malay", + "name_local": "Bahasa Melayu", + }, + "my": { + "bidi": False, + "code": "my", + "name": "Burmese", + "name_local": "မြန်မာဘာသာ", + }, + "nb": { + "bidi": False, + "code": "nb", + "name": "Norwegian Bokmal", + "name_local": "norsk (bokmål)", + }, + "ne": { + "bidi": False, + "code": "ne", + "name": "Nepali", + "name_local": "नेपाली", + }, + "nl": { + "bidi": False, + "code": "nl", + "name": "Dutch", + "name_local": "Nederlands", + }, + "nn": { + "bidi": False, + "code": "nn", + "name": "Norwegian Nynorsk", + "name_local": "norsk (nynorsk)", + }, + "no": { + "bidi": False, + "code": "no", + "name": "Norwegian", + "name_local": "norsk", + }, + "os": { + "bidi": False, + "code": "os", + "name": "Ossetic", + "name_local": "Ирон", + }, + "pa": { + "bidi": False, + "code": "pa", + "name": "Punjabi", + "name_local": "Punjabi", + }, + "pl": { + "bidi": False, + "code": "pl", + "name": "Polish", + "name_local": "polski", + }, + "pt": { + "bidi": False, + "code": "pt", + "name": "Portuguese", + "name_local": "Português", + }, + "pt-br": { + "bidi": False, + "code": "pt-br", + "name": "Brazilian Portuguese", + "name_local": "Português Brasileiro", + }, + "ro": { + "bidi": False, + "code": "ro", + "name": "Romanian", + "name_local": "Română", + }, + "ru": { + "bidi": False, + "code": "ru", + "name": "Russian", + "name_local": "Русский", + }, + "sk": { + "bidi": False, + "code": "sk", + "name": "Slovak", + "name_local": "Slovensky", + }, + "sl": { + "bidi": False, + "code": "sl", + "name": "Slovenian", + "name_local": "Slovenščina", + }, + "sq": { + "bidi": False, + "code": "sq", + "name": "Albanian", + "name_local": "shqip", + }, + "sr": { + "bidi": False, + "code": "sr", + "name": "Serbian", + "name_local": "српски", + }, + "sr-latn": { + "bidi": False, + "code": "sr-latn", + "name": "Serbian Latin", + "name_local": "srpski (latinica)", + }, + "sv": { + "bidi": False, + "code": "sv", + "name": "Swedish", + "name_local": "svenska", + }, + "sw": { + "bidi": False, + "code": "sw", + "name": "Swahili", + "name_local": "Kiswahili", + }, + "ta": { + "bidi": False, + "code": "ta", + "name": "Tamil", + "name_local": "தமிழ்", + }, + "te": { + "bidi": False, + "code": "te", + "name": "Telugu", + "name_local": "తెలుగు", + }, + "tg": { + "bidi": False, + "code": "tg", + "name": "Tajik", + "name_local": "тоҷикӣ", + }, + "th": { + "bidi": False, + "code": "th", + "name": "Thai", + "name_local": "ภาษาไทย", + }, + "tk": { + "bidi": False, + "code": "tk", + "name": "Turkmen", + "name_local": "Türkmençe", + }, + "tr": { + "bidi": False, + "code": "tr", + "name": "Turkish", + "name_local": "Türkçe", + }, + "tt": { + "bidi": False, + "code": "tt", + "name": "Tatar", + "name_local": "Татарча", + }, + "udm": { + "bidi": False, + "code": "udm", + "name": "Udmurt", + "name_local": "Удмурт", + }, + "uk": { + "bidi": False, + "code": "uk", + "name": "Ukrainian", + "name_local": "Українська", + }, + "ur": { + "bidi": True, + "code": "ur", + "name": "Urdu", + "name_local": "اردو", + }, + "uz": { + "bidi": False, + "code": "uz", + "name": "Uzbek", + "name_local": "oʻzbek tili", + }, + "vi": { + "bidi": False, + "code": "vi", + "name": "Vietnamese", + "name_local": "Tiếng Việt", + }, + "zh-cn": { + "fallback": ["zh-hans"], + }, + "zh-hans": { + "bidi": False, + "code": "zh-hans", + "name": "Simplified Chinese", + "name_local": "简体中文", + }, + "zh-hant": { + "bidi": False, + "code": "zh-hant", + "name": "Traditional Chinese", + "name_local": "繁體中文", + }, + "zh-hk": { + "fallback": ["zh-hant"], + }, + "zh-mo": { + "fallback": ["zh-hant"], + }, + "zh-my": { + "fallback": ["zh-hans"], + }, + "zh-sg": { + "fallback": ["zh-hans"], + }, + "zh-tw": { + "fallback": ["zh-hant"], + }, +} diff --git a/venv/Lib/site-packages/django/conf/locale/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..629da970dce2720a5546015c3bb9ccf9f4267691 GIT binary patch literal 7543 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 J>E4Z4|8HMycyj;% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5da1748388354066541f5cde4f83bede97184df9 GIT binary patch literal 21840 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, 2019-2020 +# Stephen Cox , 2011-2012 +# unklphil , 2014,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-20 19:37+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabies" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Asturies" + +msgid "Azerbaijani" +msgstr "Aserbeidjans" + +msgid "Bulgarian" +msgstr "Bulgaars" + +msgid "Belarusian" +msgstr "Wit-Russies" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Bretons" + +msgid "Bosnian" +msgstr "Bosnies" + +msgid "Catalan" +msgstr "Katalaans" + +msgid "Czech" +msgstr "Tsjeggies" + +msgid "Welsh" +msgstr "Welsh" + +msgid "Danish" +msgstr "Deens" + +msgid "German" +msgstr "Duits" + +msgid "Lower Sorbian" +msgstr "Neder-Sorbies" + +msgid "Greek" +msgstr "Grieks" + +msgid "English" +msgstr "Engels" + +msgid "Australian English" +msgstr "Australiese Engels" + +msgid "British English" +msgstr "Britse Engels" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spaans" + +msgid "Argentinian Spanish" +msgstr "Argentynse Spaans" + +msgid "Colombian Spanish" +msgstr "Kolombiaanse Spaans" + +msgid "Mexican Spanish" +msgstr "Meksikaanse Spaans" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguaanse Spaans" + +msgid "Venezuelan Spanish" +msgstr "Venezolaanse Spaans" + +msgid "Estonian" +msgstr "Estnies" + +msgid "Basque" +msgstr "Baskies" + +msgid "Persian" +msgstr "Persies" + +msgid "Finnish" +msgstr "Fins" + +msgid "French" +msgstr "Fraans" + +msgid "Frisian" +msgstr "Fries" + +msgid "Irish" +msgstr "Iers" + +msgid "Scottish Gaelic" +msgstr "Skots-Gaelies" + +msgid "Galician" +msgstr "Galicies" + +msgid "Hebrew" +msgstr "Hebreeus" + +msgid "Hindi" +msgstr "Hindoe" + +msgid "Croatian" +msgstr "Kroaties" + +msgid "Upper Sorbian" +msgstr "Opper-Sorbies" + +msgid "Hungarian" +msgstr "Hongaars" + +msgid "Armenian" +msgstr "Armeens" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesies" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Yslands" + +msgid "Italian" +msgstr "Italiaans" + +msgid "Japanese" +msgstr "Japannees" + +msgid "Georgian" +msgstr "Georgian" + +msgid "Kabyle" +msgstr "Kabilies" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreaans" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Luxemburgs" + +msgid "Lithuanian" +msgstr "Litaus" + +msgid "Latvian" +msgstr "Lets" + +msgid "Macedonian" +msgstr "Macedonies" + +msgid "Malayalam" +msgstr "Malabaars" + +msgid "Mongolian" +msgstr "Mongools" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Birmaans" + +msgid "Norwegian Bokmål" +msgstr "Noorweegse Bokmål" + +msgid "Nepali" +msgstr "Nepalees" + +msgid "Dutch" +msgstr "Nederlands" + +msgid "Norwegian Nynorsk" +msgstr "Noorweegse Nynorsk" + +msgid "Ossetic" +msgstr "Osseties" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Pools" + +msgid "Portuguese" +msgstr "Portugees" + +msgid "Brazilian Portuguese" +msgstr "Brasiliaanse Portugees" + +msgid "Romanian" +msgstr "Roemeens" + +msgid "Russian" +msgstr "Russiese" + +msgid "Slovak" +msgstr "Slowaaks" + +msgid "Slovenian" +msgstr "Sloweens" + +msgid "Albanian" +msgstr "Albanees" + +msgid "Serbian" +msgstr "Serwies" + +msgid "Serbian Latin" +msgstr "Serwies Latyns" + +msgid "Swedish" +msgstr "Sweeds" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Teloegoe" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turks" + +msgid "Tatar" +msgstr "Tataars" + +msgid "Udmurt" +msgstr "Oedmoerts" + +msgid "Ukrainian" +msgstr "Oekraïens" + +msgid "Urdu" +msgstr "Oerdoe" + +msgid "Uzbek" +msgstr "Oesbekies " + +msgid "Vietnamese" +msgstr "Viëtnamees" + +msgid "Simplified Chinese" +msgstr "Vereenvoudigde Sjinees" + +msgid "Traditional Chinese" +msgstr "Tradisionele Sjinees" + +msgid "Messages" +msgstr "Boodskappe" + +msgid "Site Maps" +msgstr "Werfkaarte" + +msgid "Static Files" +msgstr "Statiese lêers" + +msgid "Syndication" +msgstr "Sindikasie" + +msgid "That page number is not an integer" +msgstr "Daai bladsynommer is nie 'n heelgetal nie" + +msgid "That page number is less than 1" +msgstr "Daai bladsynommer is minder as 1" + +msgid "That page contains no results" +msgstr "Daai bladsy bevat geen resultate nie" + +msgid "Enter a valid value." +msgstr "Gee 'n geldige waarde." + +msgid "Enter a valid URL." +msgstr "Gee ’n geldige URL." + +msgid "Enter a valid integer." +msgstr "Gee ’n geldige heelgetal." + +msgid "Enter a valid email address." +msgstr "Gee ’n geldige e-posadres." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Gee ’n geldige IPv4-adres." + +msgid "Enter a valid IPv6 address." +msgstr "Gee ’n geldige IPv6-adres." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Gee ’n geldige IPv4- of IPv6-adres." + +msgid "Enter only digits separated by commas." +msgstr "Gee slegs syfers in wat deur kommas geskei is." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Maak seker dat hierdie waarde %(limit_value)s is (dit is %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Maak seker dat hierdie waarde kleiner of gelyk is aan %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Maak seker dat hierdie waarde groter of gelyk is aan %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Maak seker hierdie waarde het ten minste %(limit_value)d karakter (dit het " +"%(show_value)d)." +msgstr[1] "" +"Maak seker hierdie waarde het ten minste %(limit_value)d karakters (dit het " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Maak seker hierdie waarde het op die meeste %(limit_value)d karakter (dit " +"het %(show_value)d)." +msgstr[1] "" +"Maak seker hierdie waarde het op die meeste %(limit_value)d karakters (dit " +"het %(show_value)d)." + +msgid "Enter a number." +msgstr "Gee ’n getal." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Maak seker dat daar nie meer as %(max)s syfer in totaal is nie." +msgstr[1] "Maak seker dat daar nie meer as %(max)s syfers in totaal is nie." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Maak seker dat daar nie meer as %(max)s desimale plek is nie." +msgstr[1] "Maak seker dat daar nie meer as %(max)s desimale plekke is nie." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Maak seker dat daar nie meer as %(max)s syfer voor die desimale punt is nie." +msgstr[1] "" +"Maak seker dat daar nie meer as %(max)s syfers voor die desimale punt is nie." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Nul-karakters word nie toegelaat nie." + +msgid "and" +msgstr "en" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s met hierdie %(field_labels)s bestaan alreeds." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Waarde %(value)r is nie ’n geldige keuse nie." + +msgid "This field cannot be null." +msgstr "Hierdie veld kan nie nil wees nie." + +msgid "This field cannot be blank." +msgstr "Hierdie veld kan nie leeg wees nie." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s met hierdie %(field_label)s bestaan ​​alreeds." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s moet uniek wees per %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Veld van tipe: %(field_type)s " + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boole (True of False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (hoogstens %(max_length)s karakters)" + +msgid "Comma-separated integers" +msgstr "Heelgetalle geskei met kommas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (sonder die tyd)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (met die tyd)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s”-waarde moet ’n desimale getal wees." + +msgid "Decimal number" +msgstr "Desimale getal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Duur" + +msgid "Email address" +msgstr "E-posadres" + +msgid "File path" +msgstr "Lêerpad" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Dryfpuntgetal" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s”-waarde moet ’n heelgetal wees." + +msgid "Integer" +msgstr "Heelgetal" + +msgid "Big (8 byte) integer" +msgstr "Groot (8 greep) heelgetal" + +msgid "IPv4 address" +msgstr "IPv4-adres" + +msgid "IP address" +msgstr "IP-adres" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s”-waarde moet een wees uit None, True of False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boole (True, False, of None)" + +msgid "Positive big integer" +msgstr "Positiewe groot heelgetal" + +msgid "Positive integer" +msgstr "Positiewe heelgetal" + +msgid "Positive small integer" +msgstr "Klein positiewe heelgetal" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (tot en met %(max_length)s karakters)" + +msgid "Small integer" +msgstr "Klein heelgetal" + +msgid "Text" +msgstr "Teks" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s”-waarde het ’n ongeldige formaat. Dit moet geformateer word as HH:" +"MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Tyd" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Rou binêre data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” is nie ’n geldige UUID nie." + +msgid "Universally unique identifier" +msgstr "Universeel unieke identifiseerder" + +msgid "File" +msgstr "Lêer" + +msgid "Image" +msgstr "Prent" + +msgid "A JSON object" +msgstr "’n JSON-objek" + +msgid "Value must be valid JSON." +msgstr "Waarde moet geldige JSON wees." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-objek met %(field)s %(value)r bestaan nie." + +msgid "Foreign Key (type determined by related field)" +msgstr "Vreemde sleutel (tipe bepaal deur verwante veld)" + +msgid "One-to-one relationship" +msgstr "Een-tot-een-verhouding" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-verwantskap" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-verwantskappe" + +msgid "Many-to-many relationship" +msgstr "Baie-tot-baie-verwantskap" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Dié veld is verpligtend." + +msgid "Enter a whole number." +msgstr "Tik ’n heelgetal in." + +msgid "Enter a valid date." +msgstr "Tik ’n geldige datum in." + +msgid "Enter a valid time." +msgstr "Tik ’n geldige tyd in." + +msgid "Enter a valid date/time." +msgstr "Tik ’n geldige datum/tyd in." + +msgid "Enter a valid duration." +msgstr "Tik ’n geldige tydsduur in." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Die aantal dae moet tussen {min_days} en {max_days} wees." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Geen lêer is ingedien nie. Maak seker die koderingtipe op die vorm is reg." + +msgid "No file was submitted." +msgstr "Geen lêer is ingedien nie." + +msgid "The submitted file is empty." +msgstr "Die ingedien lêer is leeg." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Maak seker hierdie lêernaam het hoogstens %(max)d karakter (dit het " +"%(length)d)." +msgstr[1] "" +"Maak seker hierdie lêernaam het hoogstens %(max)d karakters (dit het " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Dien die lêer in óf merk die Maak skoon-boksie, nie altwee nie." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Laai ’n geldige prent. Die lêer wat jy opgelaai het, is nie ’n prent nie of " +"dit is ’n korrupte prent." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Kies 'n geldige keuse. %(value)s is nie een van die beskikbare keuses nie." + +msgid "Enter a list of values." +msgstr "Tik ’n lys waardes in." + +msgid "Enter a complete value." +msgstr "Tik ’n volledige waarde in." + +msgid "Enter a valid UUID." +msgstr "Tik ’n geldig UUID in." + +msgid "Enter a valid JSON." +msgstr "Gee geldige JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Versteekte veld %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Die ManagementForm-data ontbreek of is mee gepeuter" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Dien asseblief %d of minder vorms in." +msgstr[1] "Dien asseblief %d of minder vorms in." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Dien asseblief %d of meer vorms in." +msgstr[1] "Dien asseblief %d of meer vorms in." + +msgid "Order" +msgstr "Orde" + +msgid "Delete" +msgstr "Verwyder" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Korrigeer die dubbele data vir %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Korrigeer die dubbele data vir %(field)s, dit moet uniek wees." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Korrigeer die dubbele data vir %(field_name)s, dit moet uniek wees vir die " +"%(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korrigeer die dubbele waardes hieronder." + +msgid "The inline value did not match the parent instance." +msgstr "Die waarde inlyn pas nie by die ouerobjek nie." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Kies ’n geldige keuse. Daardie keuse is nie een van die beskikbare keuses " +"nie." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” is nie ’n geldige waarde nie." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Maak skoon" + +msgid "Currently" +msgstr "Tans" + +msgid "Change" +msgstr "Verander" + +msgid "Unknown" +msgstr "Onbekend" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nee" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nee,miskien" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d greep" +msgstr[1] "%(size)d grepe" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "nm." + +msgid "a.m." +msgstr "vm." + +msgid "PM" +msgstr "NM" + +msgid "AM" +msgstr "VM" + +msgid "midnight" +msgstr "middernag" + +msgid "noon" +msgstr "middag" + +msgid "Monday" +msgstr "Maandag" + +msgid "Tuesday" +msgstr "Dinsdag" + +msgid "Wednesday" +msgstr "Woensdag" + +msgid "Thursday" +msgstr "Donderdag" + +msgid "Friday" +msgstr "Vrydag" + +msgid "Saturday" +msgstr "Saterdag" + +msgid "Sunday" +msgstr "Sondag" + +msgid "Mon" +msgstr "Ma" + +msgid "Tue" +msgstr "Di" + +msgid "Wed" +msgstr "Wo" + +msgid "Thu" +msgstr "Do" + +msgid "Fri" +msgstr "Vr" + +msgid "Sat" +msgstr "Sa" + +msgid "Sun" +msgstr "So" + +msgid "January" +msgstr "Januarie" + +msgid "February" +msgstr "Februarie" + +msgid "March" +msgstr "Maart" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Junie" + +msgid "July" +msgstr "Julie" + +msgid "August" +msgstr "Augustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mrt" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mei" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sept" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Maart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junie" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julie" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Des." + +msgctxt "alt. month" +msgid "January" +msgstr "Januarie" + +msgctxt "alt. month" +msgid "February" +msgstr "Februarie" + +msgctxt "alt. month" +msgid "March" +msgstr "Maart" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mei" + +msgctxt "alt. month" +msgid "June" +msgstr "Junie" + +msgctxt "alt. month" +msgid "July" +msgstr "Julie" + +msgctxt "alt. month" +msgid "August" +msgstr "Augustus" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Desember" + +msgid "This is not a valid IPv6 address." +msgstr "Hierdie is nie ’n geldige IPv6-adres nie." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "of" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jare" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maande" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weke" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dae" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d ure" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minute" + +msgid "Forbidden" +msgstr "Verbode" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifikasie het misluk. Versoek is laat val." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"U sien hierdie boodskap omdat dié werf ’n CSRF-koekie benodig wanneer vorms " +"ingedien word. Dié koekie word vir sekuriteitsredes benodig om te te " +"verseker dat u blaaier nie deur derde partye gekaap word nie." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Meer inligting is beskikbaar met DEBUG=True." + +msgid "No year specified" +msgstr "Geen jaar gespesifiseer nie" + +msgid "Date out of range" +msgstr "Datum buite omvang" + +msgid "No month specified" +msgstr "Geen maand gespesifiseer nie" + +msgid "No day specified" +msgstr "Geen dag gespesifiseer nie" + +msgid "No week specified" +msgstr "Geen week gespesifiseer nie" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Geen %(verbose_name_plural)s beskikbaar nie" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Toekomstige %(verbose_name_plural)s is nie beskikbaar nie, omdat " +"%(class_name)s.allow_future vals is." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ongeldige datumstring “%(datestr)s” gegewe die formaat “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Geen %(verbose_name)s gevind vir die soektog" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ongeldige bladsy (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Gidsindekse word nie hier toegelaat nie." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” bestaan nie." + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks van %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: die webraamwerk vir perfeksioniste met sperdatums." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Sien die vrystellingsnotas vir Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Die installasie was suksesvol! Geluk!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"U sien dié bladsy omdat DEBUG=True in die settings-lêer is en geen URL’e opgestel is nie." + +msgid "Django Documentation" +msgstr "Django-dokumentasie" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "Kom aan die gang met Django" + +msgid "Django Community" +msgstr "Django-gemeenskap" + +msgid "Connect, get help, or contribute" +msgstr "Kontak, kry hulp om dra by" diff --git a/venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f0a041294326d38405c3c8c54c3b93e682f91b7d GIT binary patch literal 35688 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..25a491b5a --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,1389 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2015-2016,2020-2021 +# Bashar Al-Abdulhadi, 2014 +# Eyad Toma , 2013-2014 +# Jannis Leidel , 2011 +# Mariusz Felisiak , 2021 +# Muaaz Alsaied, 2020 +# Omar Al-Ithawi , 2020 +# Ossama Khayat , 2011 +# Tony xD , 2020 +# صفا الفليج , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:27+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Afrikaans" +msgstr "الإفريقية" + +msgid "Arabic" +msgstr "العربيّة" + +msgid "Algerian Arabic" +msgstr "عربي جزائري" + +msgid "Asturian" +msgstr "الأسترية" + +msgid "Azerbaijani" +msgstr "الأذربيجانية" + +msgid "Bulgarian" +msgstr "البلغاريّة" + +msgid "Belarusian" +msgstr "البيلاروسية" + +msgid "Bengali" +msgstr "البنغاليّة" + +msgid "Breton" +msgstr "البريتونية" + +msgid "Bosnian" +msgstr "البوسنيّة" + +msgid "Catalan" +msgstr "الكتلانيّة" + +msgid "Czech" +msgstr "التشيكيّة" + +msgid "Welsh" +msgstr "الويلز" + +msgid "Danish" +msgstr "الدنماركيّة" + +msgid "German" +msgstr "الألمانيّة" + +msgid "Lower Sorbian" +msgstr "الصربية السفلى" + +msgid "Greek" +msgstr "اليونانيّة" + +msgid "English" +msgstr "الإنجليزيّة" + +msgid "Australian English" +msgstr "الإنجليزية الإسترالية" + +msgid "British English" +msgstr "الإنجليزيّة البريطانيّة" + +msgid "Esperanto" +msgstr "الاسبرانتو" + +msgid "Spanish" +msgstr "الإسبانيّة" + +msgid "Argentinian Spanish" +msgstr "الأسبانية الأرجنتينية" + +msgid "Colombian Spanish" +msgstr "الكولومبية الإسبانية" + +msgid "Mexican Spanish" +msgstr "الأسبانية المكسيكية" + +msgid "Nicaraguan Spanish" +msgstr "الإسبانية النيكاراغوية" + +msgid "Venezuelan Spanish" +msgstr "الإسبانية الفنزويلية" + +msgid "Estonian" +msgstr "الإستونيّة" + +msgid "Basque" +msgstr "الباسك" + +msgid "Persian" +msgstr "الفارسيّة" + +msgid "Finnish" +msgstr "الفنلنديّة" + +msgid "French" +msgstr "الفرنسيّة" + +msgid "Frisian" +msgstr "الفريزيّة" + +msgid "Irish" +msgstr "الإيرلنديّة" + +msgid "Scottish Gaelic" +msgstr "الغيلية الأسكتلندية" + +msgid "Galician" +msgstr "الجليقيّة" + +msgid "Hebrew" +msgstr "العبريّة" + +msgid "Hindi" +msgstr "الهندية" + +msgid "Croatian" +msgstr "الكرواتيّة" + +msgid "Upper Sorbian" +msgstr "الصربية العليا" + +msgid "Hungarian" +msgstr "الهنغاريّة" + +msgid "Armenian" +msgstr "الأرمنية" + +msgid "Interlingua" +msgstr "اللغة الوسيطة" + +msgid "Indonesian" +msgstr "الإندونيسيّة" + +msgid "Igbo" +msgstr "الإيبو" + +msgid "Ido" +msgstr "ايدو" + +msgid "Icelandic" +msgstr "الآيسلنديّة" + +msgid "Italian" +msgstr "الإيطاليّة" + +msgid "Japanese" +msgstr "اليابانيّة" + +msgid "Georgian" +msgstr "الجورجيّة" + +msgid "Kabyle" +msgstr "القبائل" + +msgid "Kazakh" +msgstr "الكازاخستانية" + +msgid "Khmer" +msgstr "الخمر" + +msgid "Kannada" +msgstr "الهنديّة (كنّادا)" + +msgid "Korean" +msgstr "الكوريّة" + +msgid "Kyrgyz" +msgstr "قيرغيز" + +msgid "Luxembourgish" +msgstr "اللوكسمبرجية" + +msgid "Lithuanian" +msgstr "اللتوانيّة" + +msgid "Latvian" +msgstr "اللاتفيّة" + +msgid "Macedonian" +msgstr "المقدونيّة" + +msgid "Malayalam" +msgstr "المايالام" + +msgid "Mongolian" +msgstr "المنغوليّة" + +msgid "Marathi" +msgstr "المهاراتية" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "البورمية" + +msgid "Norwegian Bokmål" +msgstr "النرويجية" + +msgid "Nepali" +msgstr "النيبالية" + +msgid "Dutch" +msgstr "الهولنديّة" + +msgid "Norwegian Nynorsk" +msgstr "النينورسك نرويجيّة" + +msgid "Ossetic" +msgstr "الأوسيتيكية" + +msgid "Punjabi" +msgstr "البنجابيّة" + +msgid "Polish" +msgstr "البولنديّة" + +msgid "Portuguese" +msgstr "البرتغاليّة" + +msgid "Brazilian Portuguese" +msgstr "البرتغاليّة البرازيليّة" + +msgid "Romanian" +msgstr "الرومانيّة" + +msgid "Russian" +msgstr "الروسيّة" + +msgid "Slovak" +msgstr "السلوفاكيّة" + +msgid "Slovenian" +msgstr "السلوفانيّة" + +msgid "Albanian" +msgstr "الألبانيّة" + +msgid "Serbian" +msgstr "الصربيّة" + +msgid "Serbian Latin" +msgstr "اللاتينيّة الصربيّة" + +msgid "Swedish" +msgstr "السويديّة" + +msgid "Swahili" +msgstr "السواحلية" + +msgid "Tamil" +msgstr "التاميل" + +msgid "Telugu" +msgstr "التيلوغو" + +msgid "Tajik" +msgstr "طاجيك" + +msgid "Thai" +msgstr "التايلنديّة" + +msgid "Turkmen" +msgstr "تركمان" + +msgid "Turkish" +msgstr "التركيّة" + +msgid "Tatar" +msgstr "التتاريية" + +msgid "Udmurt" +msgstr "الأدمرتية" + +msgid "Ukrainian" +msgstr "الأكرانيّة" + +msgid "Urdu" +msgstr "الأوردو" + +msgid "Uzbek" +msgstr "الأوزبكي" + +msgid "Vietnamese" +msgstr "الفيتناميّة" + +msgid "Simplified Chinese" +msgstr "الصينيّة المبسطة" + +msgid "Traditional Chinese" +msgstr "الصينيّة التقليدية" + +msgid "Messages" +msgstr "الرسائل" + +msgid "Site Maps" +msgstr "خرائط الموقع" + +msgid "Static Files" +msgstr "الملفات الثابتة" + +msgid "Syndication" +msgstr "توظيف النشر" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "رقم الصفحة هذا ليس عدداً طبيعياً" + +msgid "That page number is less than 1" +msgstr "رقم الصفحة أقل من 1" + +msgid "That page contains no results" +msgstr "هذه الصفحة لا تحتوي على نتائج" + +msgid "Enter a valid value." +msgstr "أدخِل قيمة صحيحة." + +msgid "Enter a valid URL." +msgstr "أدخِل رابطًا صحيحًا." + +msgid "Enter a valid integer." +msgstr "أدخِل عدداً طبيعياً." + +msgid "Enter a valid email address." +msgstr "أدخِل عنوان بريد إلكتروني صحيح." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "أدخل اختصار 'slug' صحيح يتكوّن من أحرف، أرقام، شرطات سفلية وعاديّة." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"أدخل اختصار 'slug' صحيح يتكون من أحرف Unicode أو أرقام أو شرطات سفلية أو " +"واصلات." + +msgid "Enter a valid IPv4 address." +msgstr "أدخِل عنوان IPv4 صحيح." + +msgid "Enter a valid IPv6 address." +msgstr "أدخِل عنوان IPv6 صحيح." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "أدخِل عنوان IPv4 أو عنوان IPv6 صحيح." + +msgid "Enter only digits separated by commas." +msgstr "أدخِل فقط أرقامًا تفصلها الفواصل." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "تحقق من أن هذه القيمة هي %(limit_value)s (إنها %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "تحقق من أن تكون هذه القيمة أقل من %(limit_value)s أو مساوية لها." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "تحقق من أن تكون هذه القيمة أكثر من %(limit_value)s أو مساوية لها." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[1] "" +"تأكد أن هذه القيمة تحتوي على حرف أو رمز %(limit_value)d على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[2] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف و رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[3] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[4] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[5] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[1] "" +"تأكد أن هذه القيمة تحتوي على حرف أو رمز %(limit_value)d على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[2] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف و رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[3] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[4] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[5] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." + +msgid "Enter a number." +msgstr "أدخل رقماً." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[1] "تحقق من أن تدخل رقم %(max)s لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s رقمين لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s أرقام لا أكثر." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[1] "تحقق من أن تدخل خانة %(max)s عشرية لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s خانتين عشريتين لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[1] "تحقق من أن تدخل رقم %(max)s قبل الفاصل العشري لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s رقمين قبل الفاصل العشري لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"امتداد الملف “%(extension)s” غير مسموح به. الامتدادات المسموح بها هي:" +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "الأحرف الخالية غير مسموح بها." + +msgid "and" +msgstr "و" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s بهذا %(field_labels)s موجود سلفاً." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "القيمة %(value)r ليست خيارا صحيحاً." + +msgid "This field cannot be null." +msgstr "لا يمكن تعيين null كقيمة لهذا الحقل." + +msgid "This field cannot be blank." +msgstr "لا يمكن ترك هذا الحقل فارغاً." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "النموذج %(model_name)s والحقل %(field_label)s موجود مسبقاً." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s يجب أن يكون فريد لـ %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "حقل نوع: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "قيمة '%(value)s' يجب أن تكون True أو False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "قيمة “%(value)s” يجب أن تكون True , False أو None." + +msgid "Boolean (Either True or False)" +msgstr "ثنائي (إما True أو False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "سلسلة نص (%(max_length)s كحد أقصى)" + +msgid "Comma-separated integers" +msgstr "أرقام صحيحة مفصولة بفواصل" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"قيمة '%(value)s' ليست من بُنية تاريخ صحيحة. القيمة يجب ان تكون من البُنية YYYY-" +"MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "قيمة '%(value)s' من بُنية صحيحة (YYYY-MM-DD) لكنها تحوي تاريخ غير صحيح." + +msgid "Date (without time)" +msgstr "التاريخ (دون الوقت)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"قيمة '%(value)s' ليست من بُنية صحيحة. القيمة يجب ان تكون من البُنية YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] ." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"قيمة '%(value)s' من بُنية صحيحة (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) لكنها " +"تحوي وقت و تاريخ غير صحيحين." + +msgid "Date (with time)" +msgstr "التاريخ (مع الوقت)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "قيمة '%(value)s' يجب ان تكون عدد عشري." + +msgid "Decimal number" +msgstr "رقم عشري" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"قيمة '%(value)s' ليست بنسق صحيح. القيمة يجب ان تكون من التنسيق ([DD] " +"[[HH:]MM:]ss[.uuuuuu])" + +msgid "Duration" +msgstr "المدّة" + +msgid "Email address" +msgstr "عنوان بريد إلكتروني" + +msgid "File path" +msgstr "مسار الملف" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "قيمة '%(value)s' يجب ان تكون عدد تعويم." + +msgid "Floating point number" +msgstr "رقم فاصلة عائمة" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "قيمة '%(value)s' يجب ان تكون عدد طبيعي." + +msgid "Integer" +msgstr "عدد صحيح" + +msgid "Big (8 byte) integer" +msgstr "عدد صحيح كبير (8 بايت)" + +msgid "Small integer" +msgstr "عدد صحيح صغير" + +msgid "IPv4 address" +msgstr "عنوان IPv4" + +msgid "IP address" +msgstr "عنوان IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "قيمة '%(value)s' يجب ان تكون None أو True أو False." + +msgid "Boolean (Either True, False or None)" +msgstr "ثنائي (إما True أو False أو None)" + +msgid "Positive big integer" +msgstr "عدد صحيح موجب كبير" + +msgid "Positive integer" +msgstr "عدد صحيح موجب" + +msgid "Positive small integer" +msgstr "عدد صحيح صغير موجب" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (حتى %(max_length)s)" + +msgid "Text" +msgstr "نص" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"قيمة '%(value)s' ليست بنسق صحيح. القيمة يجب ان تكون من التنسيق\n" +"HH:MM[:ss[.uuuuuu]]" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"قيمة '%(value)s' من بُنية صحيحة (HH:MM[:ss[.uuuuuu]]) لكنها تحوي وقت غير صحيح." + +msgid "Time" +msgstr "وقت" + +msgid "URL" +msgstr "رابط" + +msgid "Raw binary data" +msgstr "البيانات الثنائية الخام" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "القيمة \"%(value)s\" ليست UUID صالح." + +msgid "Universally unique identifier" +msgstr "معرّف فريد عالمياً" + +msgid "File" +msgstr "ملف" + +msgid "Image" +msgstr "صورة" + +msgid "A JSON object" +msgstr "كائن JSON" + +msgid "Value must be valid JSON." +msgstr "يجب أن تكون قيمة JSON صالحة." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "النموذج %(model)s ذو الحقل و القيمة %(field)s %(value)r غير موجود." + +msgid "Foreign Key (type determined by related field)" +msgstr "الحقل المرتبط (تم تحديد النوع وفقاً للحقل المرتبط)" + +msgid "One-to-one relationship" +msgstr "علاقة واحد إلى واحد" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s علاقة" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s علاقات" + +msgid "Many-to-many relationship" +msgstr "علاقة متعدد إلى متعدد" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "هذا الحقل مطلوب." + +msgid "Enter a whole number." +msgstr "أدخل رقما صحيحا." + +msgid "Enter a valid date." +msgstr "أدخل تاريخاً صحيحاً." + +msgid "Enter a valid time." +msgstr "أدخل وقتاً صحيحاً." + +msgid "Enter a valid date/time." +msgstr "أدخل تاريخاً/وقتاً صحيحاً." + +msgid "Enter a valid duration." +msgstr "أدخل مدّة صحيحة" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "يجب أن يكون عدد الأيام بين {min_days} و {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "لم يتم ارسال ملف، الرجاء التأكد من نوع ترميز الاستمارة." + +msgid "No file was submitted." +msgstr "لم يتم إرسال اي ملف." + +msgid "The submitted file is empty." +msgstr "الملف الذي قمت بإرساله فارغ." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[1] "" +"تأكد أن إسم هذا الملف يحتوي على حرف %(max)d على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[2] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرفين على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[3] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[4] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[5] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "رجاءً أرسل ملف أو صح علامة صح عند مربع اختيار \"فارغ\"، وليس كلاهما." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"قم برفع صورة صحيحة، الملف الذي قمت برفعه إما أنه ليس ملفا لصورة أو أنه ملف " +"معطوب." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "انتق خياراً صحيحاً. %(value)s ليس أحد الخيارات المتاحة." + +msgid "Enter a list of values." +msgstr "أدخل قائمة من القيم." + +msgid "Enter a complete value." +msgstr "إدخال قيمة كاملة." + +msgid "Enter a valid UUID." +msgstr "أدخل قيمة UUID صحيحة." + +msgid "Enter a valid JSON." +msgstr "أدخل مدخل JSON صالح." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(الحقل الخفي %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"بيانات نموذج الإدارة مفقودة أو تم العبث بها. الحقول المفقودة: " +"%(field_names)s. قد تحتاج إلى تقديم تقرير خطأ إذا استمرت المشكلة." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "الرجاء إرسال %d إستمارة على الأكثر." +msgstr[1] "الرجاء إرسال %d إستمارة على الأكثر." +msgstr[2] "الرجاء إرسال %d إستمارة على الأكثر." +msgstr[3] "الرجاء إرسال %d إستمارة على الأكثر." +msgstr[4] "الرجاء إرسال %d إستمارة على الأكثر." +msgstr[5] "الرجاء إرسال %d إستمارة على الأكثر." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "الرجاء إرسال %d إستمارة على الأقل." +msgstr[1] "الرجاء إرسال %d إستمارة على الأقل." +msgstr[2] "الرجاء إرسال %d إستمارة على الأقل." +msgstr[3] "الرجاء إرسال %d إستمارة على الأقل." +msgstr[4] "الرجاء إرسال %d إستمارة على الأقل." +msgstr[5] "الرجاء إرسال %d إستمارة على الأقل." + +msgid "Order" +msgstr "الترتيب" + +msgid "Delete" +msgstr "احذف" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "رجاء صحّح بيانات %(field)s المتكررة." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "رجاء صحّح بيانات %(field)s المتكررة والتي يجب أن تكون مُميّزة." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"رجاء صحّح بيانات %(field_name)s المتكررة والتي يجب أن تكون مُميّزة لـ%(lookup)s " +"في %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "رجاءً صحّح القيم المُكرّرة أدناه." + +msgid "The inline value did not match the parent instance." +msgstr "لا تتطابق القيمة المضمنة مع المثيل الأصلي." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "انتق خياراً صحيحاً. اختيارك ليس أحد الخيارات المتاحة." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" ليست قيمة صالحة." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s لا يمكن تفسيرها في المنطقة الزمنية %(current_timezone)s; قد " +"تكون غامضة أو أنها غير موجودة." + +msgid "Clear" +msgstr "تفريغ" + +msgid "Currently" +msgstr "حالياً" + +msgid "Change" +msgstr "عدّل" + +msgid "Unknown" +msgstr "مجهول" + +msgid "Yes" +msgstr "نعم" + +msgid "No" +msgstr "لا" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "نعم,لا,ربما" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d بايت" +msgstr[1] "بايت واحد" +msgstr[2] "بايتان" +msgstr[3] "%(size)d بايتان" +msgstr[4] "%(size)d بايت" +msgstr[5] "%(size)d بايت" + +#, python-format +msgid "%s KB" +msgstr "%s ك.ب" + +#, python-format +msgid "%s MB" +msgstr "%s م.ب" + +#, python-format +msgid "%s GB" +msgstr "%s ج.ب" + +#, python-format +msgid "%s TB" +msgstr "%s ت.ب" + +#, python-format +msgid "%s PB" +msgstr "%s ب.ب" + +msgid "p.m." +msgstr "م" + +msgid "a.m." +msgstr "ص" + +msgid "PM" +msgstr "م" + +msgid "AM" +msgstr "ص" + +msgid "midnight" +msgstr "منتصف الليل" + +msgid "noon" +msgstr "ظهراً" + +msgid "Monday" +msgstr "الاثنين" + +msgid "Tuesday" +msgstr "الثلاثاء" + +msgid "Wednesday" +msgstr "الأربعاء" + +msgid "Thursday" +msgstr "الخميس" + +msgid "Friday" +msgstr "الجمعة" + +msgid "Saturday" +msgstr "السبت" + +msgid "Sunday" +msgstr "الأحد" + +msgid "Mon" +msgstr "إثنين" + +msgid "Tue" +msgstr "ثلاثاء" + +msgid "Wed" +msgstr "أربعاء" + +msgid "Thu" +msgstr "خميس" + +msgid "Fri" +msgstr "جمعة" + +msgid "Sat" +msgstr "سبت" + +msgid "Sun" +msgstr "أحد" + +msgid "January" +msgstr "يناير" + +msgid "February" +msgstr "فبراير" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "إبريل" + +msgid "May" +msgstr "مايو" + +msgid "June" +msgstr "يونيو" + +msgid "July" +msgstr "يوليو" + +msgid "August" +msgstr "أغسطس" + +msgid "September" +msgstr "سبتمبر" + +msgid "October" +msgstr "أكتوبر" + +msgid "November" +msgstr "نوفمبر" + +msgid "December" +msgstr "ديسمبر" + +msgid "jan" +msgstr "يناير" + +msgid "feb" +msgstr "فبراير" + +msgid "mar" +msgstr "مارس" + +msgid "apr" +msgstr "إبريل" + +msgid "may" +msgstr "مايو" + +msgid "jun" +msgstr "يونيو" + +msgid "jul" +msgstr "يوليو" + +msgid "aug" +msgstr "أغسطس" + +msgid "sep" +msgstr "سبتمبر" + +msgid "oct" +msgstr "أكتوبر" + +msgid "nov" +msgstr "نوفمبر" + +msgid "dec" +msgstr "ديسمبر" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "يناير" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "فبراير" + +msgctxt "abbrev. month" +msgid "March" +msgstr "مارس" + +msgctxt "abbrev. month" +msgid "April" +msgstr "إبريل" + +msgctxt "abbrev. month" +msgid "May" +msgstr "مايو" + +msgctxt "abbrev. month" +msgid "June" +msgstr "يونيو" + +msgctxt "abbrev. month" +msgid "July" +msgstr "يوليو" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "أغسطس" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "سبتمبر" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "أكتوبر" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "نوفمبر" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ديسمبر" + +msgctxt "alt. month" +msgid "January" +msgstr "يناير" + +msgctxt "alt. month" +msgid "February" +msgstr "فبراير" + +msgctxt "alt. month" +msgid "March" +msgstr "مارس" + +msgctxt "alt. month" +msgid "April" +msgstr "أبريل" + +msgctxt "alt. month" +msgid "May" +msgstr "مايو" + +msgctxt "alt. month" +msgid "June" +msgstr "يونيو" + +msgctxt "alt. month" +msgid "July" +msgstr "يوليو" + +msgctxt "alt. month" +msgid "August" +msgstr "أغسطس" + +msgctxt "alt. month" +msgid "September" +msgstr "سبتمبر" + +msgctxt "alt. month" +msgid "October" +msgstr "أكتوبر" + +msgctxt "alt. month" +msgid "November" +msgstr "نوفمبر" + +msgctxt "alt. month" +msgid "December" +msgstr "ديسمبر" + +msgid "This is not a valid IPv6 address." +msgstr "هذا ليس عنوان IPv6 صحيح." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "أو" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "، " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d سنة" +msgstr[1] "%(num)d سنة" +msgstr[2] "%(num)d سنتين" +msgstr[3] "%(num)d سنوات" +msgstr[4] "%(num)d سنوات" +msgstr[5] "%(num)d سنوات" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d شهر" +msgstr[1] "%(num)d شهر" +msgstr[2] "%(num)d شهرين" +msgstr[3] "%(num)d أشهر" +msgstr[4] "%(num)d أشهر" +msgstr[5] "%(num)d أشهر" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d أسبوع" +msgstr[1] "%(num)d أسبوع" +msgstr[2] "%(num)d أسبوعين" +msgstr[3] "%(num)d أسابيع" +msgstr[4] "%(num)d أسابيع" +msgstr[5] "%(num)d أسابيع" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d يوم" +msgstr[1] "%(num)d يوم" +msgstr[2] "%(num)d يومين" +msgstr[3] "%(num)d أيام" +msgstr[4] "%(num)d يوم" +msgstr[5] "%(num)d أيام" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ساعة" +msgstr[1] "%(num)d ساعة" +msgstr[2] "%(num)d ساعتين" +msgstr[3] "%(num)d ساعات" +msgstr[4] "%(num)d ساعة" +msgstr[5] "%(num)d ساعات" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d دقيقة" +msgstr[1] "%(num)d دقيقة" +msgstr[2] "%(num)d دقيقتين" +msgstr[3] "%(num)d دقائق" +msgstr[4] "%(num)d دقيقة" +msgstr[5] "%(num)d دقيقة" + +msgid "Forbidden" +msgstr "ممنوع" + +msgid "CSRF verification failed. Request aborted." +msgstr "تم الفشل للتحقق من CSRF. تم إنهاء الطلب." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"أنت ترى هذه الرسالة لأن موقع HTTPS هذا يتطلب إرسال “Referer header” بواسطة " +"متصفح الويب الخاص بك، ولكن لم يتم إرسال أي منها. هذا مطلوب لأسباب أمنية، " +"لضمان عدم اختطاف متصفحك من قبل أطراف ثالثة." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"إذا قمت بتكوين المستعرض لتعطيل رؤوس “Referer” ، فيرجى إعادة تمكينها ، على " +"الأقل لهذا الموقع ، أو لاتصالات HTTPS ، أو لطلبات “same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"إذا كنت تستخدم العلامة أو " +"تضمين رأس “Referrer-Policy: no-referrer”، يرجى إزالتها. تتطلب حماية CSRF أن " +"يقوم رأس “Referer” بإجراء فحص صارم للمراجع. إذا كنت قلقًا بشأن الخصوصية ، " +"فاستخدم بدائل مثل للروابط إلى مواقع الجهات الخارجية." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"أنت ترى هذه الرسالة لأن هذا الموقع يتطلب كعكة CSRF عند تقديم النماذج. ملف " +"الكعكة هذا مطلوب لأسباب أمنية في تعريف الإرتباط، لضمان أنه لم يتم اختطاف " +"المتصفح من قبل أطراف أخرى." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"إذا قمت بضبط المتصفح لتعطيل الكوكيز الرجاء إعادة تغعيلها، على الأقل بالنسبة " +"لهذا الموقع، أو للطلبات من “same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "يتوفر مزيد من المعلومات عند ضبط الخيار DEBUG=True." + +msgid "No year specified" +msgstr "لم تحدد السنة" + +msgid "Date out of range" +msgstr "التاريخ خارج النطاق" + +msgid "No month specified" +msgstr "لم تحدد الشهر" + +msgid "No day specified" +msgstr "لم تحدد اليوم" + +msgid "No week specified" +msgstr "لم تحدد الأسبوع" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "لا يوجد %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"التاريخ بالمستقبل %(verbose_name_plural)s غير متوفر لأن قيمة %(class_name)s." +"allow_future هي False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "نسق تاريخ غير صحيح \"%(datestr)s\" محدد بالشكل ''%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "لم يعثر على أي %(verbose_name)s مطابقة لهذا الإستعلام" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "الصفحة ليست \"الأخيرة\"، كما لا يمكن تحويل القيمة إلى رقم طبيعي." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "صفحة خاطئة (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" +"قائمة فارغة و\n" +"\"%(class_name)s.allow_empty\"\n" +"قيمته False." + +msgid "Directory indexes are not allowed here." +msgstr "لا يسمح لفهارس الدليل هنا." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "”%(path)s“ غير موجود" + +#, python-format +msgid "Index of %(directory)s" +msgstr "فهرس لـ %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "تمت عملية التنصيب بنجاح! تهانينا!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"استعراض ملاحظات الإصدار لجانغو %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"تظهر لك هذه الصفحة لأن DEBUG=True في ملف settings خاصتك كما أنك لم تقم بإعداد الروابط URLs." + +msgid "Django Documentation" +msgstr "وثائق تعليمات جانغو" + +msgid "Topics, references, & how-to’s" +msgstr "المواضيع و المراجع و التعليمات" + +msgid "Tutorial: A Polling App" +msgstr "برنامج تعليمي: تطبيق تصويت" + +msgid "Get started with Django" +msgstr "إبدأ مع جانغو" + +msgid "Django Community" +msgstr "مجتمع جانغو" + +msgid "Connect, get help, or contribute" +msgstr "اتصل بنا أو احصل على مساعدة أو ساهم" diff --git a/venv/Lib/site-packages/django/conf/locale/ar/__init__.py b/venv/Lib/site-packages/django/conf/locale/ar/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ar/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ar/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c506ba3290dc9df21a329d95ac337c539ccf2797 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lVv&A)d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04dKj)c^nh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ar/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ar/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f949f903dca382701b63dd519a0942df21ec62ff GIT binary patch literal 403 zcmYjN%SyvQ6wRv-Efwn*WLvP!zKA$9jVUxuNzz4z!H{OACAGE;5ekE5Bft3i~@Hs0S@qN z2VQulJ$1oY|My;mOy)QJ(4O>rXv#>&kW(-gBArG>LeiX}+c-Ci88YIG<()}Jmn6#3 zhNK%bif4$$Iq9s!=ssK!hVU{>7gURAI@eY-3Rgr6Gi^?@B+OZN{jjTFB@`Dca$UZb QopDkWMN}jXQ8}rL-zk4>;{X5v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ar/formats.py b/venv/Lib/site-packages/django/conf/locale/ar/formats.py new file mode 100644 index 000000000..8008ce6ec --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ar/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F، Y" +TIME_FORMAT = "g:i A" +# DATETIME_FORMAT = +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d‏/m‏/Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1fce7bcdd6291f54c56478b01ddc44522654d050 GIT binary patch literal 35409 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 z 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, 2019-2020 +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Afrikaans" +msgstr "الإفريقية" + +msgid "Arabic" +msgstr "العربية" + +msgid "Algerian Arabic" +msgstr "العربية الجزائرية" + +msgid "Asturian" +msgstr "الأسترية" + +msgid "Azerbaijani" +msgstr "الأذربيجانية" + +msgid "Bulgarian" +msgstr "البلغارية" + +msgid "Belarusian" +msgstr "البيلاروسية" + +msgid "Bengali" +msgstr "البنغالية" + +msgid "Breton" +msgstr "البريتونية" + +msgid "Bosnian" +msgstr "البوسنية" + +msgid "Catalan" +msgstr "الكتلانية" + +msgid "Czech" +msgstr "التشيكية" + +msgid "Welsh" +msgstr "الويلز" + +msgid "Danish" +msgstr "الدنماركية" + +msgid "German" +msgstr "الألمانية" + +msgid "Lower Sorbian" +msgstr "الصربية السفلى" + +msgid "Greek" +msgstr "اليونانية" + +msgid "English" +msgstr "الإنجليزية" + +msgid "Australian English" +msgstr "الإنجليزية الإسترالية" + +msgid "British English" +msgstr "الإنجليزية البريطانية" + +msgid "Esperanto" +msgstr "الاسبرانتو" + +msgid "Spanish" +msgstr "الإسبانية" + +msgid "Argentinian Spanish" +msgstr "الأسبانية الأرجنتينية" + +msgid "Colombian Spanish" +msgstr "الكولومبية الإسبانية" + +msgid "Mexican Spanish" +msgstr "الأسبانية المكسيكية" + +msgid "Nicaraguan Spanish" +msgstr "الإسبانية النيكاراغوية" + +msgid "Venezuelan Spanish" +msgstr "الإسبانية الفنزويلية" + +msgid "Estonian" +msgstr "الإستونية" + +msgid "Basque" +msgstr "الباسك" + +msgid "Persian" +msgstr "الفارسية" + +msgid "Finnish" +msgstr "الفنلندية" + +msgid "French" +msgstr "الفرنسية" + +msgid "Frisian" +msgstr "الفريزية" + +msgid "Irish" +msgstr "الإيرلندية" + +msgid "Scottish Gaelic" +msgstr "الغيلية الأسكتلندية" + +msgid "Galician" +msgstr "الجليقية" + +msgid "Hebrew" +msgstr "العبرية" + +msgid "Hindi" +msgstr "الهندية" + +msgid "Croatian" +msgstr "الكرواتية" + +msgid "Upper Sorbian" +msgstr "الصربية العليا" + +msgid "Hungarian" +msgstr "الهنغارية" + +msgid "Armenian" +msgstr "الأرمنية" + +msgid "Interlingua" +msgstr "اللغة الوسيطة" + +msgid "Indonesian" +msgstr "الإندونيسية" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "ايدو" + +msgid "Icelandic" +msgstr "الآيسلندية" + +msgid "Italian" +msgstr "الإيطالية" + +msgid "Japanese" +msgstr "اليابانية" + +msgid "Georgian" +msgstr "الجورجية" + +msgid "Kabyle" +msgstr "القبائلية" + +msgid "Kazakh" +msgstr "الكازاخستانية" + +msgid "Khmer" +msgstr "الخمر" + +msgid "Kannada" +msgstr "الهندية (كنّادا)" + +msgid "Korean" +msgstr "الكورية" + +msgid "Kyrgyz" +msgstr "القيرغيزية" + +msgid "Luxembourgish" +msgstr "اللوكسمبرجية" + +msgid "Lithuanian" +msgstr "اللتوانية" + +msgid "Latvian" +msgstr "اللاتفية" + +msgid "Macedonian" +msgstr "المقدونية" + +msgid "Malayalam" +msgstr "المايالام" + +msgid "Mongolian" +msgstr "المنغولية" + +msgid "Marathi" +msgstr "المهاراتية" + +msgid "Burmese" +msgstr "البورمية" + +msgid "Norwegian Bokmål" +msgstr "النرويجية" + +msgid "Nepali" +msgstr "النيبالية" + +msgid "Dutch" +msgstr "الهولندية" + +msgid "Norwegian Nynorsk" +msgstr "النينورسك نرويجية" + +msgid "Ossetic" +msgstr "الأوسيتيكية" + +msgid "Punjabi" +msgstr "البنجابية" + +msgid "Polish" +msgstr "البولندية" + +msgid "Portuguese" +msgstr "البرتغالية" + +msgid "Brazilian Portuguese" +msgstr "البرتغالية البرازيلية" + +msgid "Romanian" +msgstr "الرومانية" + +msgid "Russian" +msgstr "الروسية" + +msgid "Slovak" +msgstr "السلوفاكية" + +msgid "Slovenian" +msgstr "السلوفانية" + +msgid "Albanian" +msgstr "الألبانية" + +msgid "Serbian" +msgstr "الصربية" + +msgid "Serbian Latin" +msgstr "اللاتينية الصربية" + +msgid "Swedish" +msgstr "السويدية" + +msgid "Swahili" +msgstr "السواحلية" + +msgid "Tamil" +msgstr "التاميل" + +msgid "Telugu" +msgstr "التيلوغو" + +msgid "Tajik" +msgstr "الطاجيكية" + +msgid "Thai" +msgstr "التايلندية" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "التركية" + +msgid "Tatar" +msgstr "التتاريية" + +msgid "Udmurt" +msgstr "الأدمرتية" + +msgid "Ukrainian" +msgstr "الأكرانية" + +msgid "Urdu" +msgstr "الأوردو" + +msgid "Uzbek" +msgstr "الأوزبكية" + +msgid "Vietnamese" +msgstr "الفيتنامية" + +msgid "Simplified Chinese" +msgstr "الصينية المبسطة" + +msgid "Traditional Chinese" +msgstr "الصينية التقليدية" + +msgid "Messages" +msgstr "الرسائل" + +msgid "Site Maps" +msgstr "خرائط الموقع" + +msgid "Static Files" +msgstr "الملفات الثابتة" + +msgid "Syndication" +msgstr "توظيف النشر" + +msgid "That page number is not an integer" +msgstr "رقم الصفحة ليس عددًا صحيحًا" + +msgid "That page number is less than 1" +msgstr "رقم الصفحة أقل من 1" + +msgid "That page contains no results" +msgstr "هذه الصفحة لا تحتوي على نتائج" + +msgid "Enter a valid value." +msgstr "أدخل قيمة صحيحة." + +msgid "Enter a valid URL." +msgstr "أدخل رابطاً صحيحاً." + +msgid "Enter a valid integer." +msgstr "أدخل رقم صالح." + +msgid "Enter a valid email address." +msgstr "أدخل عنوان بريد إلكتروني صحيح." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"أدخل “slug” صالحة تتكون من أحرف أو أرقام أو الشرطة السفلية أو الواصلات." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"أدخل “slug” صالحة تتكون من أحرف Unicode أو الأرقام أو الشرطة السفلية أو " +"الواصلات." + +msgid "Enter a valid IPv4 address." +msgstr "أدخل عنوان IPv4 صحيح." + +msgid "Enter a valid IPv6 address." +msgstr "أدخل عنوان IPv6 صحيح." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "أدخل عنوان IPv4 أو عنوان IPv6 صحيح." + +msgid "Enter only digits separated by commas." +msgstr "أدخل أرقاما فقط مفصول بينها بفواصل." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "تحقق من أن هذه القيمة هي %(limit_value)s (إنها %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "تحقق من أن تكون هذه القيمة أقل من %(limit_value)s أو مساوية لها." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "تحقق من أن تكون هذه القيمة أكثر من %(limit_value)s أو مساوية لها." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[1] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[2] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[3] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[4] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[5] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأقل (هي تحتوي " +"حالياً على %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[1] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[2] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[3] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[4] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." +msgstr[5] "" +"تأكد أن هذه القيمة تحتوي على %(limit_value)d حرف أو رمز على الأكثر (هي تحتوي " +"حالياً على %(show_value)d)." + +msgid "Enter a number." +msgstr "أدخل رقماً." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[1] "تحقق من أن تدخل رقم %(max)s لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s رقمين لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s أرقام لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s أرقام لا أكثر." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[1] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s خانات عشرية لا أكثر." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[1] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[2] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[3] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[4] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." +msgstr[5] "تحقق من أن تدخل %(max)s أرقام قبل الفاصل العشري لا أكثر." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"امتداد الملف “%(extension)s” غير مسموح به. الامتدادات المسموح بها هي:" +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "لا يُسمح بالأحرف الخالية." + +msgid "and" +msgstr "و" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s بهذا %(field_labels)s موجود سلفاً." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "القيمة %(value)r ليست خيارا صحيحاً." + +msgid "This field cannot be null." +msgstr "لا يمكن ترك هذا الحقل خالي." + +msgid "This field cannot be blank." +msgstr "لا يمكن ترك هذا الحقل فارغاً." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "النموذج %(model_name)s والحقل %(field_label)s موجود مسبقاً." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s يجب أن يكون فريد لـ %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "حقل نوع: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "يجب أن تكون القيمة “%(value)s” إما True أو False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "يجب أن تكون القيمة “%(value)s” إما True أو False أو None." + +msgid "Boolean (Either True or False)" +msgstr "ثنائي (إما True أو False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "سلسلة نص (%(max_length)s كحد أقصى)" + +msgid "Comma-separated integers" +msgstr "أرقام صحيحة مفصولة بفواصل" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"تحتوي القيمة “%(value)s” على تنسيق تاريخ غير صالح. يجب أن يكون بتنسيق YYYY-" +"MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"تحتوي القيمة “%(value)s” على التنسيق الصحيح (YYYY-MM-DD) ولكنه تاريخ غير " +"صالح." + +msgid "Date (without time)" +msgstr "التاريخ (دون الوقت)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"تحتوي القيمة “%(value)s” على تنسيق غير صالح. يجب أن يكون بتنسيق YYYY-MM-DD " +"HH: MM [: ss [.uuuuuu]] [TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"تحتوي القيمة “%(value)s” على التنسيق الصحيح (YYYY-MM-DD HH: MM [: ss [." +"uuuuuu]] [TZ]) ولكنها تعد تاريخًا / وقتًا غير صالحين." + +msgid "Date (with time)" +msgstr "التاريخ (مع الوقت)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "يجب أن تكون القيمة “%(value)s” رقمًا عشريًا." + +msgid "Decimal number" +msgstr "رقم عشري" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"تحتوي القيمة “%(value)s” على تنسيق غير صالح. يجب أن يكون بتنسيق [DD] [[HH:] " +"MM:] ss [.uuuuuu]." + +msgid "Duration" +msgstr "المدّة" + +msgid "Email address" +msgstr "عنوان بريد إلكتروني" + +msgid "File path" +msgstr "مسار الملف" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "يجب أن تكون القيمة “%(value)s” قيمة عائمة." + +msgid "Floating point number" +msgstr "رقم فاصلة عائمة" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "يجب أن تكون القيمة “%(value)s” عددًا صحيحًا." + +msgid "Integer" +msgstr "عدد صحيح" + +msgid "Big (8 byte) integer" +msgstr "عدد صحيح كبير (8 بايت)" + +msgid "IPv4 address" +msgstr "عنوان IPv4" + +msgid "IP address" +msgstr "عنوان IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "يجب أن تكون القيمة “%(value)s” إما None أو True أو False." + +msgid "Boolean (Either True, False or None)" +msgstr "ثنائي (إما True أو False أو None)" + +msgid "Positive big integer" +msgstr "عدد صحيح كبير موجب" + +msgid "Positive integer" +msgstr "عدد صحيح موجب" + +msgid "Positive small integer" +msgstr "عدد صحيح صغير موجب" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (حتى %(max_length)s)" + +msgid "Small integer" +msgstr "عدد صحيح صغير" + +msgid "Text" +msgstr "نص" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"تحتوي القيمة “%(value)s” على تنسيق غير صالح. يجب أن يكون بتنسيق HH: MM [: ss " +"[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"تحتوي القيمة “%(value)s” على التنسيق الصحيح (HH: MM [: ss [.uuuuuu]]) ولكنه " +"وقت غير صالح." + +msgid "Time" +msgstr "وقت" + +msgid "URL" +msgstr "رابط" + +msgid "Raw binary data" +msgstr "البيانات الثنائية الخام" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” ليس UUID صالحًا." + +msgid "Universally unique identifier" +msgstr "المعرف الفريد العالمي (UUID)" + +msgid "File" +msgstr "ملف" + +msgid "Image" +msgstr "صورة" + +msgid "A JSON object" +msgstr "كائن JSON" + +msgid "Value must be valid JSON." +msgstr "يجب أن تكون قيمة JSON صالحة." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "النموذج %(model)s ذو الحقل و القيمة %(field)s %(value)r غير موجود." + +msgid "Foreign Key (type determined by related field)" +msgstr "الحقل المرتبط (تم تحديد النوع وفقاً للحقل المرتبط)" + +msgid "One-to-one relationship" +msgstr "علاقة واحد إلى واحد" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s علاقة" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s علاقات" + +msgid "Many-to-many relationship" +msgstr "علاقة متعدد إلى متعدد" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "هذا الحقل مطلوب." + +msgid "Enter a whole number." +msgstr "أدخل رقما صحيحا." + +msgid "Enter a valid date." +msgstr "أدخل تاريخاً صحيحاً." + +msgid "Enter a valid time." +msgstr "أدخل وقتاً صحيحاً." + +msgid "Enter a valid date/time." +msgstr "أدخل تاريخاً/وقتاً صحيحاً." + +msgid "Enter a valid duration." +msgstr "أدخل مدّة صحيحة" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "يجب أن يتراوح عدد الأيام بين {min_days} و {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "لم يتم ارسال ملف، الرجاء التأكد من نوع ترميز الاستمارة." + +msgid "No file was submitted." +msgstr "لم يتم إرسال اي ملف." + +msgid "The submitted file is empty." +msgstr "الملف الذي قمت بإرساله فارغ." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[1] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[2] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[3] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[4] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." +msgstr[5] "" +"تأكد أن إسم هذا الملف يحتوي على %(max)d حرف على الأكثر (هو يحتوي الآن على " +"%(length)d حرف)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"رجاءً أرسل ملف أو صح علامة صح عند مربع اختيار \\\"فارغ\\\"، وليس كلاهما." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"قم برفع صورة صحيحة، الملف الذي قمت برفعه إما أنه ليس ملفا لصورة أو أنه ملف " +"معطوب." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "انتق خياراً صحيحاً. %(value)s ليس أحد الخيارات المتاحة." + +msgid "Enter a list of values." +msgstr "أدخل قائمة من القيم." + +msgid "Enter a complete value." +msgstr "إدخال قيمة كاملة." + +msgid "Enter a valid UUID." +msgstr "أدخل قيمة UUID صحيحة." + +msgid "Enter a valid JSON." +msgstr "ادخل كائن JSON صالح." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(الحقل الخفي %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "بيانات ManagementForm مفقودة أو تم العبث بها" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "الرجاء إرسال %d إستمارة أو أقل" +msgstr[1] "الرجاء إرسال %d إستمارة أو أقل" +msgstr[2] "الرجاء إرسال %d إستمارة أو أقل" +msgstr[3] "الرجاء إرسال %d إستمارة أو أقل" +msgstr[4] "الرجاء إرسال %d إستمارة أو أقل" +msgstr[5] "الرجاء إرسال %d إستمارة أو أقل" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "الرجاء إرسال %d إستمارة أو أكثر." +msgstr[1] "الرجاء إرسال %d إستمارة أو أكثر." +msgstr[2] "الرجاء إرسال %d إستمارة أو أكثر." +msgstr[3] "الرجاء إرسال %d إستمارة أو أكثر." +msgstr[4] "الرجاء إرسال %d إستمارة أو أكثر." +msgstr[5] "الرجاء إرسال %d إستمارة أو أكثر." + +msgid "Order" +msgstr "الترتيب" + +msgid "Delete" +msgstr "احذف" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "رجاء صحّح بيانات %(field)s المتكررة." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "رجاء صحّح بيانات %(field)s المتكررة والتي يجب أن تكون مُميّزة." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"رجاء صحّح بيانات %(field_name)s المتكررة والتي يجب أن تكون مُميّزة لـ%(lookup)s " +"في %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "رجاءً صحّح القيم المُكرّرة أدناه." + +msgid "The inline value did not match the parent instance." +msgstr "القيمة المضمنة لا تتطابق مع المثيل الأصلي." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "انتق خياراً صحيحاً. اختيارك ليس أحد الخيارات المتاحة." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” ليست قيمة صالحة." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"لا يمكن تفسير٪ %(datetime)s في المنطقة الزمنية٪ %(current_timezone)s؛ قد " +"تكون غامضة أو غير موجودة." + +msgid "Clear" +msgstr "تفريغ" + +msgid "Currently" +msgstr "حالياً" + +msgid "Change" +msgstr "عدّل" + +msgid "Unknown" +msgstr "مجهول" + +msgid "Yes" +msgstr "نعم" + +msgid "No" +msgstr "لا" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "نعم,لا,ربما" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d بايت" +msgstr[1] "%(size)d بايت واحد " +msgstr[2] "%(size)d بايتان" +msgstr[3] "%(size)d بايت" +msgstr[4] "%(size)d بايت" +msgstr[5] "%(size)d بايت" + +#, python-format +msgid "%s KB" +msgstr "%s ك.ب" + +#, python-format +msgid "%s MB" +msgstr "%s م.ب" + +#, python-format +msgid "%s GB" +msgstr "%s ج.ب" + +#, python-format +msgid "%s TB" +msgstr "%s ت.ب" + +#, python-format +msgid "%s PB" +msgstr "%s ب.ب" + +msgid "p.m." +msgstr "م" + +msgid "a.m." +msgstr "ص" + +msgid "PM" +msgstr "م" + +msgid "AM" +msgstr "ص" + +msgid "midnight" +msgstr "منتصف الليل" + +msgid "noon" +msgstr "ظهراً" + +msgid "Monday" +msgstr "الاثنين" + +msgid "Tuesday" +msgstr "الثلاثاء" + +msgid "Wednesday" +msgstr "الأربعاء" + +msgid "Thursday" +msgstr "الخميس" + +msgid "Friday" +msgstr "الجمعة" + +msgid "Saturday" +msgstr "السبت" + +msgid "Sunday" +msgstr "الأحد" + +msgid "Mon" +msgstr "إثنين" + +msgid "Tue" +msgstr "ثلاثاء" + +msgid "Wed" +msgstr "أربعاء" + +msgid "Thu" +msgstr "خميس" + +msgid "Fri" +msgstr "جمعة" + +msgid "Sat" +msgstr "سبت" + +msgid "Sun" +msgstr "أحد" + +msgid "January" +msgstr "جانفي" + +msgid "February" +msgstr "فيفري" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "أفريل" + +msgid "May" +msgstr "ماي" + +msgid "June" +msgstr "جوان" + +msgid "July" +msgstr "جويليه" + +msgid "August" +msgstr "أوت" + +msgid "September" +msgstr "سبتمبر" + +msgid "October" +msgstr "أكتوبر" + +msgid "November" +msgstr "نوفمبر" + +msgid "December" +msgstr "ديسمبر" + +msgid "jan" +msgstr "جانفي" + +msgid "feb" +msgstr "فيفري" + +msgid "mar" +msgstr "مارس" + +msgid "apr" +msgstr "أفريل" + +msgid "may" +msgstr "ماي" + +msgid "jun" +msgstr "جوان" + +msgid "jul" +msgstr "جويليه" + +msgid "aug" +msgstr "أوت" + +msgid "sep" +msgstr "سبتمبر" + +msgid "oct" +msgstr "أكتوبر" + +msgid "nov" +msgstr "نوفمبر" + +msgid "dec" +msgstr "ديسمبر" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "جانفي" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "فيفري" + +msgctxt "abbrev. month" +msgid "March" +msgstr "مارس" + +msgctxt "abbrev. month" +msgid "April" +msgstr "أفريل" + +msgctxt "abbrev. month" +msgid "May" +msgstr "ماي" + +msgctxt "abbrev. month" +msgid "June" +msgstr "جوان" + +msgctxt "abbrev. month" +msgid "July" +msgstr "جويليه" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "أوت" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "سبتمبر" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "أكتوبر" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "نوفمبر" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ديسمبر" + +msgctxt "alt. month" +msgid "January" +msgstr "جانفي" + +msgctxt "alt. month" +msgid "February" +msgstr "فيفري" + +msgctxt "alt. month" +msgid "March" +msgstr "مارس" + +msgctxt "alt. month" +msgid "April" +msgstr "أفريل" + +msgctxt "alt. month" +msgid "May" +msgstr "ماي" + +msgctxt "alt. month" +msgid "June" +msgstr "جوان" + +msgctxt "alt. month" +msgid "July" +msgstr "جويليه" + +msgctxt "alt. month" +msgid "August" +msgstr "أوت" + +msgctxt "alt. month" +msgid "September" +msgstr "سبتمبر" + +msgctxt "alt. month" +msgid "October" +msgstr "أكتوبر" + +msgctxt "alt. month" +msgid "November" +msgstr "نوفمبر" + +msgctxt "alt. month" +msgid "December" +msgstr "ديسمبر" + +msgid "This is not a valid IPv6 address." +msgstr "هذا ليس عنوان IPv6 صحيح." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "أو" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "، " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d سنة" +msgstr[1] "%d سنة" +msgstr[2] "%d سنتان" +msgstr[3] "%d سنوات" +msgstr[4] "%d سنة" +msgstr[5] "%d سنة" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d شهر" +msgstr[1] "%d شهر" +msgstr[2] "%d شهرين\"" +msgstr[3] "%d أشهر" +msgstr[4] "%d شهر" +msgstr[5] "%d شهر" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d أسبوع" +msgstr[1] "%d اسبوع" +msgstr[2] "%d أسبوعين" +msgstr[3] "%d أسابيع" +msgstr[4] "%d أسبوع" +msgstr[5] "%d أسبوع" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d يوم" +msgstr[1] "%d يوم" +msgstr[2] "%d يومان" +msgstr[3] "%d أيام" +msgstr[4] "%d يوم" +msgstr[5] "%d يوم" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ساعة" +msgstr[1] "%d ساعة" +msgstr[2] "%d ساعتين" +msgstr[3] "%d ساعات" +msgstr[4] "%d ساعة" +msgstr[5] "%d ساعة" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d دقيقة" +msgstr[1] "%d دقيقة" +msgstr[2] "%d دقيقتين" +msgstr[3] "%d دقائق" +msgstr[4] "%d دقيقة" +msgstr[5] "%d دقيقة" + +msgid "Forbidden" +msgstr "ممنوع" + +msgid "CSRF verification failed. Request aborted." +msgstr "تم الفشل للتحقق من CSRF. تم إنهاء الطلب." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"أنت ترى هذه الرسالة لأن موقع HTTPS هذا يتطلب إرسال “Referer header” بواسطة " +"متصفح الويب الخاص بك ، ولكن لم يتم إرسال أي منها. هذا العنوان مطلوب لأسباب " +"أمنية ، لضمان عدم اختطاف متصفحك من قبل أطراف ثالثة." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"إذا قمت بتكوين المستعرض الخاص بك لتعطيل رؤوس “Referer” ، فالرجاء إعادة " +"تمكينها ، على الأقل لهذا الموقع ، أو لاتصالات HTTPS ، أو لطلبات “same-" +"origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"إذا كنت تستخدم العلامة أو تتضمن رأس “Referrer-Policy: no-referrer” ، فيرجى إزالتها. تتطلب حماية " +"CSRF رأس “Referer” القيام بالتحقق من “strict referer”. إذا كنت مهتمًا " +"بالخصوصية ، فاستخدم بدائل مثل للروابط إلى مواقع " +"الجهات الخارجية." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"تشاهد هذه الرسالة لأن هذا الموقع يتطلب ملف تعريف ارتباط CSRF Cookie عند " +"إرسال النماذج. ملف تعريف ارتباط Cookie هذا مطلوب لأسباب أمنية ، لضمان عدم " +"اختطاف متصفحك من قبل أطراف ثالثة." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"إذا قمت بتكوين المستعرض الخاص بك لتعطيل ملفات تعريف الارتباط Cookies ، يرجى " +"إعادة تمكينها ، على الأقل لهذا الموقع ، أو لطلبات “same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "يتوفر مزيد من المعلومات عند ضبط الخيار DEBUG=True." + +msgid "No year specified" +msgstr "لم تحدد السنة" + +msgid "Date out of range" +msgstr "تاريخ خارج النطاق" + +msgid "No month specified" +msgstr "لم تحدد الشهر" + +msgid "No day specified" +msgstr "لم تحدد اليوم" + +msgid "No week specified" +msgstr "لم تحدد الأسبوع" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "لا يوجد %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"التاريخ بالمستقبل %(verbose_name_plural)s غير متوفر لأن قيمة %(class_name)s." +"allow_future هي False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "سلسلة تاريخ غير صالحة “%(datestr)s” شكل معين “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "لم يعثر على أي %(verbose_name)s مطابقة لهذا الإستعلام" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "الصفحة ليست \"الأخيرة\" ، ولا يمكن تحويلها إلى عدد صحيح." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "صفحة خاطئة (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "القائمة فارغة و “%(class_name)s.allow_empty” هي False." + +msgid "Directory indexes are not allowed here." +msgstr "لا يسمح لفهارس الدليل هنا." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” غير موجود" + +#, python-format +msgid "Index of %(directory)s" +msgstr "فهرس لـ %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" +"جانغو: المنصة البرمجية لتطبيقات الويب للمتَّسمين بالكمال مع المواعيد المحدّدة." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"عرض ملاحظات الإصدار ل جانغو " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "تمَّت عملية التثبيت بنجاح! تهانينا!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"تشاهد هذه الصفحة لأن DEBUG = True موجود في ملف الإعدادات الخاص بك ولم تقم بتكوين أي " +"عناوين URL." + +msgid "Django Documentation" +msgstr "توثيق جانغو" + +msgid "Topics, references, & how-to’s" +msgstr "الموضوعات ، المراجع، & الكيفية" + +msgid "Tutorial: A Polling App" +msgstr "البرنامج التعليمي: تطبيق الاقتراع" + +msgid "Get started with Django" +msgstr "الخطوات الأولى مع جانغو" + +msgid "Django Community" +msgstr "مجتمع جانغو" + +msgid "Connect, get help, or contribute" +msgstr "الاتصال، الحصول على المساعدة أو المساهمة" diff --git a/venv/Lib/site-packages/django/conf/locale/ar_DZ/__init__.py b/venv/Lib/site-packages/django/conf/locale/ar_DZ/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ar_DZ/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ar_DZ/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db7e626eb3e3ec4221fe1d4585d2139e78f922f4 GIT binary patch literal 198 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, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikáans" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azerbaixanu" + +msgid "Bulgarian" +msgstr "Búlgaru" + +msgid "Belarusian" +msgstr "Bielorrusu" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "Bosniu" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checu" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Griegu" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Inglés británicu" + +msgid "Esperanto" +msgstr "Esperantu" + +msgid "Spanish" +msgstr "Castellán" + +msgid "Argentinian Spanish" +msgstr "Español arxentín" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Español mexicanu" + +msgid "Nicaraguan Spanish" +msgstr "Español nicaraguanu" + +msgid "Venezuelan Spanish" +msgstr "Español venezolanu" + +msgid "Estonian" +msgstr "Estoniu" + +msgid "Basque" +msgstr "Vascu" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Gallegu" + +msgid "Hebrew" +msgstr "Hebréu" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Húngaru" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesiu" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italianu" + +msgid "Japanese" +msgstr "Xaponés" + +msgid "Georgian" +msgstr "Xeorxanu" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Canarés" + +msgid "Korean" +msgstr "Coreanu" + +msgid "Luxembourgish" +msgstr "Luxemburgués" + +msgid "Lithuanian" +msgstr "Lituanu" + +msgid "Latvian" +msgstr "Letón" + +msgid "Macedonian" +msgstr "Macedoniu" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Birmanu" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepalí" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk noruegu" + +msgid "Ossetic" +msgstr "Osetiu" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polacu" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués brasileñu" + +msgid "Romanian" +msgstr "Rumanu" + +msgid "Russian" +msgstr "Rusu" + +msgid "Slovak" +msgstr "Eslovacu" + +msgid "Slovenian" +msgstr "Eslovenu" + +msgid "Albanian" +msgstr "Albanu" + +msgid "Serbian" +msgstr "Serbiu" + +msgid "Serbian Latin" +msgstr "Serbiu llatín" + +msgid "Swedish" +msgstr "Suecu" + +msgid "Swahili" +msgstr "Suaḥili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkish" +msgstr "Turcu" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurtu" + +msgid "Ukrainian" +msgstr "Ucranianu" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chinu simplificáu" + +msgid "Traditional Chinese" +msgstr "Chinu tradicional" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Introduz un valor válidu." + +msgid "Enter a valid URL." +msgstr "Introduz una URL válida." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Introduz una direición de corréu válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Introduz una direición IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Introduz una direición IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Introduz una direición IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Introduz namái díxitos separtaos per comes." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Asegúrate qu'esti valor ye %(limit_value)s (ye %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrate qu'esti valor ye menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrate qu'esti valor ye mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrate qu'esti valor tien polo menos %(limit_value)d caráuter (tien " +"%(show_value)d)." +msgstr[1] "" +"Asegúrate qu'esti valor tien polo menos %(limit_value)d caráuteres (tien " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrate qu'esti valor tien como muncho %(limit_value)d caráuter (tien " +"%(show_value)d)." +msgstr[1] "" +"Asegúrate qu'esti valor tien como muncho %(limit_value)d caráuteres (tien " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Introduz un númberu." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrate que nun hai más de %(max)s díxitu en total." +msgstr[1] "Asegúrate que nun hai más de %(max)s díxitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrate que nun hai más de %(max)s allugamientu decimal." +msgstr[1] "Asegúrate que nun hai más de %(max)s allugamientos decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrate que nun hai más de %(max)s díxitu enantes del puntu decimal." +msgstr[1] "" +"Asegúrate que nun hai más de %(max)s díxitos enantes del puntu decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Esti campu nun pue ser nulu." + +msgid "This field cannot be blank." +msgstr "Esti campu nun pue tar baleru." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s con esti %(field_label)s yá esiste." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campu de la triba: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boleanu (tamién True o False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (fasta %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separtaos per coma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Data (ensin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Data (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Númberu decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Direición de corréu" + +msgid "File path" +msgstr "Camín del ficheru" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Númberu de puntu flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Enteru" + +msgid "Big (8 byte) integer" +msgstr "Enteru big (8 byte)" + +msgid "IPv4 address" +msgstr "Direición IPv4" + +msgid "IP address" +msgstr "Direición IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boleanu (tamién True, False o None)" + +msgid "Positive integer" +msgstr "Enteru positivu" + +msgid "Positive small integer" +msgstr "Enteru pequeñu positivu" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (fasta %(max_length)s)" + +msgid "Small integer" +msgstr "Enteru pequeñu" + +msgid "Text" +msgstr "Testu" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binarios crudos" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Ficheru" + +msgid "Image" +msgstr "Imaxe" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave foriata (triba determinada pol campu rellacionáu)" + +msgid "One-to-one relationship" +msgstr "Rellación a ún" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Rellación a munchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Requierse esti campu." + +msgid "Enter a whole number." +msgstr "Introduz un númberu completu" + +msgid "Enter a valid date." +msgstr "Introduz una data válida." + +msgid "Enter a valid time." +msgstr "Introduz una hora válida." + +msgid "Enter a valid date/time." +msgstr "Introduz una data/hora válida." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nun s'unvió'l ficheru. Comprueba la triba de cifráu nel formulariu." + +msgid "No file was submitted." +msgstr "No file was submitted." + +msgid "The submitted file is empty." +msgstr "El ficheru dunviáu ta baleru." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrate qu'esti nome de ficheru tien polo menos %(max)d caráuter (tien " +"%(length)d)." +msgstr[1] "" +"Asegúrate qu'esti nome de ficheru tien polo menos %(max)d caráuteres (tien " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor, dunvia un ficheru o conseña la caxella , non dambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Xubi una imaxe válida. El ficheru que xubiesti o nun yera una imaxe, o taba " +"toriada." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Esbilla una escoyeta válida. %(value)s nun una ún de les escoyetes " +"disponibles." + +msgid "Enter a list of values." +msgstr "Introduz una llista valores." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campu anubríu %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor, dunvia %d o menos formularios." +msgstr[1] "Por favor, dunvia %d o menos formularios." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Orde" + +msgid "Delete" +msgstr "Desanciar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, igua'l datu duplicáu de %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor, igua'l datu duplicáu pa %(field)s, el cual tien de ser únicu." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor, igua'l datu duplicáu de %(field_name)s el cual tien de ser únicu " +"pal %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, igua los valores duplicaos embaxo" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Esbilla una escoyeta válida. Esa escoyeta nun ye una de les escoyetes " +"disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Llimpiar" + +msgid "Currently" +msgstr "Anguaño" + +msgid "Change" +msgstr "Camudar" + +msgid "Unknown" +msgstr "Desconocíu" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "Non" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "sí,non,quiciabes" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "Media nueche" + +msgid "noon" +msgstr "Meudía" + +msgid "Monday" +msgstr "Llunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Xueves" + +msgid "Friday" +msgstr "Vienres" + +msgid "Saturday" +msgstr "Sábadu" + +msgid "Sunday" +msgstr "Domingu" + +msgid "Mon" +msgstr "LLu" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mie" + +msgid "Thu" +msgstr "Xue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Xineru" + +msgid "February" +msgstr "Febreru" + +msgid "March" +msgstr "Marzu" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayu" + +msgid "June" +msgstr "Xunu" + +msgid "July" +msgstr "Xunetu" + +msgid "August" +msgstr "Agostu" + +msgid "September" +msgstr "Setiembre" + +msgid "October" +msgstr "Ochobre" + +msgid "November" +msgstr "Payares" + +msgid "December" +msgstr "Avientu" + +msgid "jan" +msgstr "xin" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "xun" + +msgid "jul" +msgstr "xnt" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "och" + +msgid "nov" +msgstr "pay" + +msgid "dec" +msgstr "avi" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Xin." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "May." + +msgctxt "abbrev. month" +msgid "June" +msgstr "Xun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Xnt." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Och." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Pay." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Avi." + +msgctxt "alt. month" +msgid "January" +msgstr "Xineru" + +msgctxt "alt. month" +msgid "February" +msgstr "Febreru" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzu" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayu" + +msgctxt "alt. month" +msgid "June" +msgstr "Xunu" + +msgctxt "alt. month" +msgid "July" +msgstr "Xunetu" + +msgctxt "alt. month" +msgid "August" +msgstr "Agostu" + +msgctxt "alt. month" +msgid "September" +msgstr "Setiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Ochobre" + +msgctxt "alt. month" +msgid "November" +msgstr "Payares" + +msgctxt "alt. month" +msgid "December" +msgstr "Avientu" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d añu" +msgstr[1] "%d años" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d selmana" +msgstr[1] "%d selmanes" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d díes" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d hores" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutu" +msgstr[1] "%d minutos" + +msgid "0 minutes" +msgstr "0 minutos" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Nun s'especificó l'añu" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Nun s'especificó'l mes" + +msgid "No day specified" +msgstr "Nun s'especificó'l día" + +msgid "No week specified" +msgstr "Nun s'especificó la selmana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ensin %(verbose_name_plural)s disponible" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Nun ta disponible'l %(verbose_name_plural)s futuru porque %(class_name)s." +"allow_future ye False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nun s'alcontró %(verbose_name)s que concase cola gueta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Páxina inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Nun tán almitíos equí los indexaos de direutoriu." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índiz de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfb7d4435285d5950c473882f217285886e7379b GIT binary patch literal 27170 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, 2018,2020 +# Emin Mastizada , 2015-2016 +# Metin Amiroff , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2020-01-12 07:21+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Ərəbcə" + +msgid "Asturian" +msgstr "Asturiyaca" + +msgid "Azerbaijani" +msgstr "Azərbaycanca" + +msgid "Bulgarian" +msgstr "Bolqarca" + +msgid "Belarusian" +msgstr "Belarusca" + +msgid "Bengali" +msgstr "Benqalca" + +msgid "Breton" +msgstr "Bretonca" + +msgid "Bosnian" +msgstr "Bosniyaca" + +msgid "Catalan" +msgstr "Katalanca" + +msgid "Czech" +msgstr "Çexcə" + +msgid "Welsh" +msgstr "Uelscə" + +msgid "Danish" +msgstr "Danimarkaca" + +msgid "German" +msgstr "Almanca" + +msgid "Lower Sorbian" +msgstr "Aşağı Sorbca" + +msgid "Greek" +msgstr "Yunanca" + +msgid "English" +msgstr "İngiliscə" + +msgid "Australian English" +msgstr "Avstraliya İngiliscəsi" + +msgid "British English" +msgstr "Britaniya İngiliscəsi" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "İspanca" + +msgid "Argentinian Spanish" +msgstr "Argentina İspancası" + +msgid "Colombian Spanish" +msgstr "Kolumbia İspancası" + +msgid "Mexican Spanish" +msgstr "Meksika İspancası" + +msgid "Nicaraguan Spanish" +msgstr "Nikaraqua İspancası" + +msgid "Venezuelan Spanish" +msgstr "Venesuela İspancası" + +msgid "Estonian" +msgstr "Estonca" + +msgid "Basque" +msgstr "Baskca" + +msgid "Persian" +msgstr "Farsca" + +msgid "Finnish" +msgstr "Fincə" + +msgid "French" +msgstr "Fransızca" + +msgid "Frisian" +msgstr "Friscə" + +msgid "Irish" +msgstr "İrlandca" + +msgid "Scottish Gaelic" +msgstr "Şotland Keltcəsi" + +msgid "Galician" +msgstr "Qallik dili" + +msgid "Hebrew" +msgstr "İbranicə" + +msgid "Hindi" +msgstr "Hindcə" + +msgid "Croatian" +msgstr "Xorvatca" + +msgid "Upper Sorbian" +msgstr "Üst Sorbca" + +msgid "Hungarian" +msgstr "Macarca" + +msgid "Armenian" +msgstr "Ermənicə" + +msgid "Interlingua" +msgstr "İnterlinqua" + +msgid "Indonesian" +msgstr "İndonezcə" + +msgid "Ido" +msgstr "İdoca" + +msgid "Icelandic" +msgstr "İslandca" + +msgid "Italian" +msgstr "İtalyanca" + +msgid "Japanese" +msgstr "Yaponca" + +msgid "Georgian" +msgstr "Gürcücə" + +msgid "Kabyle" +msgstr "Kabile" + +msgid "Kazakh" +msgstr "Qazax" + +msgid "Khmer" +msgstr "Kxmercə" + +msgid "Kannada" +msgstr "Kannada dili" + +msgid "Korean" +msgstr "Koreyca" + +msgid "Luxembourgish" +msgstr "Lüksemburqca" + +msgid "Lithuanian" +msgstr "Litva dili" + +msgid "Latvian" +msgstr "Latviya dili" + +msgid "Macedonian" +msgstr "Makedonca" + +msgid "Malayalam" +msgstr "Malayamca" + +msgid "Mongolian" +msgstr "Monqolca" + +msgid "Marathi" +msgstr "Marathicə" + +msgid "Burmese" +msgstr "Burmescə" + +msgid "Norwegian Bokmål" +msgstr "Norveç Bukmolcası" + +msgid "Nepali" +msgstr "Nepal" + +msgid "Dutch" +msgstr "Flamandca" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk Norveçcəsi" + +msgid "Ossetic" +msgstr "Osetincə" + +msgid "Punjabi" +msgstr "Pancabicə" + +msgid "Polish" +msgstr "Polyakca" + +msgid "Portuguese" +msgstr "Portuqalca" + +msgid "Brazilian Portuguese" +msgstr "Braziliya Portuqalcası" + +msgid "Romanian" +msgstr "Rumınca" + +msgid "Russian" +msgstr "Rusca" + +msgid "Slovak" +msgstr "Slovakca" + +msgid "Slovenian" +msgstr "Slovencə" + +msgid "Albanian" +msgstr "Albanca" + +msgid "Serbian" +msgstr "Serbcə" + +msgid "Serbian Latin" +msgstr "Serbcə Latın" + +msgid "Swedish" +msgstr "İsveçcə" + +msgid "Swahili" +msgstr "Suahili" + +msgid "Tamil" +msgstr "Tamilcə" + +msgid "Telugu" +msgstr "Teluqu dili" + +msgid "Thai" +msgstr "Tayca" + +msgid "Turkish" +msgstr "Türkcə" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurtca" + +msgid "Ukrainian" +msgstr "Ukraynaca" + +msgid "Urdu" +msgstr "Urduca" + +msgid "Uzbek" +msgstr "Özbəkcə" + +msgid "Vietnamese" +msgstr "Vyetnamca" + +msgid "Simplified Chinese" +msgstr "Sadələşdirilmiş Çincə" + +msgid "Traditional Chinese" +msgstr "Ənənəvi Çincə" + +msgid "Messages" +msgstr "Mesajlar" + +msgid "Site Maps" +msgstr "Sayt Xəritələri" + +msgid "Static Files" +msgstr "Statik Fayllar" + +msgid "Syndication" +msgstr "Sindikasiya" + +msgid "That page number is not an integer" +msgstr "Səhifə nömrəsi rəqəm deyil" + +msgid "That page number is less than 1" +msgstr "Səhifə nömrəsi 1-dən balacadır" + +msgid "That page contains no results" +msgstr "Səhifədə nəticə yoxdur" + +msgid "Enter a valid value." +msgstr "Düzgün qiymət daxil edin." + +msgid "Enter a valid URL." +msgstr "Düzgün URL daxil edin." + +msgid "Enter a valid integer." +msgstr "Düzgün rəqəm daxil edin." + +msgid "Enter a valid email address." +msgstr "Düzgün e-poçt ünvanı daxil edin." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Hərflərdən, rəqəmlərdən, alt-xətlərdən və ya defislərdən ibarət düzgün " +"qısaltma (“slug”) daxil edin." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Unicode hərflərdən, rəqəmlərdən, alt-xətlərdən və ya defislərdən ibarət " +"düzgün qısaltma (“slug”) daxil edin." + +msgid "Enter a valid IPv4 address." +msgstr "Düzgün IPv4 ünvanı daxil edin." + +msgid "Enter a valid IPv6 address." +msgstr "Düzgün IPv6 ünvanını daxil edin." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Düzgün IPv4 və ya IPv6 ünvanını daxil edin." + +msgid "Enter only digits separated by commas." +msgstr "Vergüllə ayırmaqla yalnız rəqəmlər daxil edin." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Əmin edin ki, bu qiymət %(limit_value)s-dir (bu %(show_value)s-dir)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Bu qiymətin %(limit_value)s-ya bərabər və ya ondan kiçik olduğunu yoxlayın." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Bu qiymətin %(limit_value)s-ya bərabər və ya ondan böyük olduğunu yoxlayın." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu dəyərin ən az %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" +msgstr[1] "" +"Bu dəyərin ən az %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu dəyərin ən çox %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" +msgstr[1] "" +"Bu dəyərin ən çox %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" + +msgid "Enter a number." +msgstr "Ədəd daxil edin." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Toplamda %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Toplamda %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Onluq hissənin %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Onluq hissənin %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Onluq hissədən əvvəl %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Onluq hissədən əvvəl %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"“%(extension)s” fayl uzantısına icazə verilmir. İcazə verilən fayl " +"uzantıları: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null simvollara icazə verilmir." + +msgid "and" +msgstr "və" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s ilə %(model_name)s artıq mövcuddur." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r dəyəri doğru seçim deyil." + +msgid "This field cannot be null." +msgstr "Bu sahə boş qala bilməz." + +msgid "This field cannot be blank." +msgstr "Bu sahə ağ qala bilməz." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s bu %(field_label)s sahə ilə artıq mövcuddur." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s dəyəri %(date_field_label)s %(lookup_type)s üçün unikal " +"olmalıdır." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Sahənin tipi: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” dəyəri True və ya False olmalıdır." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” dəyəri True, False və ya None olmalıdır." + +msgid "Boolean (Either True or False)" +msgstr "Bul (ya Doğru, ya Yalan)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Sətir (%(max_length)s simvola kimi)" + +msgid "Comma-separated integers" +msgstr "Vergüllə ayrılmış tam ədədlər" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” dəyəri səhv tarix formatındadır. Formatı YYYY-MM-DD olmalıdır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” dəyəri düzgün formatdadır (YYYY-MM-DD) amma bu tarix xətalıdır." + +msgid "Date (without time)" +msgstr "Tarix (saatsız)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” dəyərinin formatı səhvdir. Formatı YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] olmalıdır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” dəyərinin formatı düzgündür (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"amma bu tarix xətalıdır." + +msgid "Date (with time)" +msgstr "Tarix (vaxt ilə)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” dəyəri onluq kəsrli (decimal) rəqəm olmalıdır." + +msgid "Decimal number" +msgstr "Rasional ədəd" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” dəyərinin formatı səhvdir. Formatı [DD] [HH:[MM:]]ss[.uuuuuu] " +"olmalıdır." + +msgid "Duration" +msgstr "Müddət" + +msgid "Email address" +msgstr "E-poçt" + +msgid "File path" +msgstr "Faylın ünvanı" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” dəyəri float olmalıdır." + +msgid "Floating point number" +msgstr "Sürüşən vergüllü ədəd" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” dəyəri tam rəqəm olmalıdır." + +msgid "Integer" +msgstr "Tam ədəd" + +msgid "Big (8 byte) integer" +msgstr "Böyük (8 bayt) tam ədəd" + +msgid "IPv4 address" +msgstr "IPv4 ünvanı" + +msgid "IP address" +msgstr "IP ünvan" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” dəyəri None, True və ya False olmalıdır." + +msgid "Boolean (Either True, False or None)" +msgstr "Bul (Ya Doğru, ya Yalan, ya da Heç nə)" + +msgid "Positive integer" +msgstr "Müsbət tam ədəd" + +msgid "Positive small integer" +msgstr "Müsbət tam kiçik ədəd" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Əzmə (%(max_length)s simvola kimi)" + +msgid "Small integer" +msgstr "Kiçik tam ədəd" + +msgid "Text" +msgstr "Mətn" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” dəyərinin formatı səhvdir. Formatı HH:MM[:ss[.uuuuuu]] olmalıdır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” dəyəri düzgün formatdadır (HH:MM[:ss[.uuuuuu]]), amma vaxtı " +"xətalıdır." + +msgid "Time" +msgstr "Vaxt" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Düz ikili (binary) məlumat" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” keçərli UUID deyil." + +msgid "Universally unique identifier" +msgstr "Universal təkrarolunmaz identifikator" + +msgid "File" +msgstr "Fayl" + +msgid "Image" +msgstr "Şəkil" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s dəyəri %(value)r olan %(model)s mövcud deyil." + +msgid "Foreign Key (type determined by related field)" +msgstr "Xarici açar (bağlı olduğu sahəyə uyğun tipi alır)" + +msgid "One-to-one relationship" +msgstr "Birin-birə münasibət" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s əlaqəsi" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s əlaqələri" + +msgid "Many-to-many relationship" +msgstr "Çoxun-çoxa münasibət" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Bu sahə vacibdir." + +msgid "Enter a whole number." +msgstr "Tam ədəd daxil edin." + +msgid "Enter a valid date." +msgstr "Düzgün tarix daxil edin." + +msgid "Enter a valid time." +msgstr "Düzgün vaxt daxil edin." + +msgid "Enter a valid date/time." +msgstr "Düzgün tarix/vaxt daxil edin." + +msgid "Enter a valid duration." +msgstr "Keçərli müddət daxil edin." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Günlərin sayı {min_days} ilə {max_days} arasında olmalıdır." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Fayl göndərilməyib. Vərəqənin (\"form\") şifrələmə tipini yoxlayın." + +msgid "No file was submitted." +msgstr "Fayl göndərilməyib." + +msgid "The submitted file is empty." +msgstr "Göndərilən fayl boşdur." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." +msgstr[1] "" +"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ya fayl göndərin, ya da xanaya quş qoymayın, hər ikisini də birdən etməyin." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Düzgün şəkil göndərin. Göndərdiyiniz fayl ya şəkil deyil, ya da şəkildə " +"problem var." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Düzgün seçim edin. %(value)s seçimlər arasında yoxdur." + +msgid "Enter a list of values." +msgstr "Qiymətlərin siyahısını daxil edin." + +msgid "Enter a complete value." +msgstr "Tam dəyər daxil edin." + +msgid "Enter a valid UUID." +msgstr "Keçərli UUID daxil et." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gizli %(name)s sahəsi) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm məlumatları əksikdir və ya korlanıb" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Lütfən %d və ya daha az forma göndərin." +msgstr[1] "Lütfən %d və ya daha az forma göndərin." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Lütfən %d və ya daha çox forma göndərin." +msgstr[1] "Lütfən %d və ya daha çox forma göndərin." + +msgid "Order" +msgstr "Sırala" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin, onların hamısı " +"fərqli olmalıdır." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin, onlar " +"%(date_field)s %(lookup)s-a görə fərqli olmalıdır." + +msgid "Please correct the duplicate values below." +msgstr "Aşağıda təkrarlanan qiymətlərə düzəliş edin." + +msgid "The inline value did not match the parent instance." +msgstr "Sətiriçi dəyər ana nüsxəyə uyğun deyil." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Düzgün seçim edin. Bu seçim mümkün deyil." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” düzgün dəyər deyil." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s vaxtı %(current_timezone)s zaman qurşağında ifadə oluna bilmir; " +"ya duallıq, ya da mövcud olmaya bilər." + +msgid "Clear" +msgstr "Təmizlə" + +msgid "Currently" +msgstr "Hal-hazırda" + +msgid "Change" +msgstr "Dəyiş" + +msgid "Unknown" +msgstr "Məlum deyil" + +msgid "Yes" +msgstr "Hə" + +msgid "No" +msgstr "Yox" + +msgid "Year" +msgstr "İl" + +msgid "Month" +msgstr "Ay" + +msgid "Day" +msgstr "Gün" + +msgid "yes,no,maybe" +msgstr "hə,yox,bəlkə" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bayt" +msgstr[1] "%(size)d bayt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s QB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "gecə yarısı" + +msgid "noon" +msgstr "günorta" + +msgid "Monday" +msgstr "Bazar ertəsi" + +msgid "Tuesday" +msgstr "Çərşənbə axşamı" + +msgid "Wednesday" +msgstr "Çərşənbə" + +msgid "Thursday" +msgstr "Cümə axşamı" + +msgid "Friday" +msgstr "Cümə" + +msgid "Saturday" +msgstr "Şənbə" + +msgid "Sunday" +msgstr "Bazar" + +msgid "Mon" +msgstr "B.e" + +msgid "Tue" +msgstr "Ç.a" + +msgid "Wed" +msgstr "Çrş" + +msgid "Thu" +msgstr "C.a" + +msgid "Fri" +msgstr "Cüm" + +msgid "Sat" +msgstr "Şnb" + +msgid "Sun" +msgstr "Bzr" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "İyun" + +msgid "July" +msgstr "İyul" + +msgid "August" +msgstr "Avqust" + +msgid "September" +msgstr "Sentyabr" + +msgid "October" +msgstr "Oktyabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgid "jan" +msgstr "ynv" + +msgid "feb" +msgstr "fvr" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "iyn" + +msgid "jul" +msgstr "iyl" + +msgid "aug" +msgstr "avq" + +msgid "sep" +msgstr "snt" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "noy" + +msgid "dec" +msgstr "dek" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Yan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprel" + +msgctxt "abbrev. month" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month" +msgid "June" +msgstr "İyun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "İyul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Avq." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sent." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Noy." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dek." + +msgctxt "alt. month" +msgid "January" +msgstr "Yanvar" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevral" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprel" + +msgctxt "alt. month" +msgid "May" +msgstr "May" + +msgctxt "alt. month" +msgid "June" +msgstr "İyun" + +msgctxt "alt. month" +msgid "July" +msgstr "İyul" + +msgctxt "alt. month" +msgid "August" +msgstr "Avqust" + +msgctxt "alt. month" +msgid "September" +msgstr "Sentyabr" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktyabr" + +msgctxt "alt. month" +msgid "November" +msgstr "Noyabr" + +msgctxt "alt. month" +msgid "December" +msgstr "Dekabr" + +msgid "This is not a valid IPv6 address." +msgstr "Bu doğru IPv6 ünvanı deyil." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "və ya" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d il" +msgstr[1] "%d il" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d həftə" +msgstr[1] "%d həftə" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dəqiqə" +msgstr[1] "%d dəqiqə" + +msgid "0 minutes" +msgstr "0 dəqiqə" + +msgid "Forbidden" +msgstr "Qadağan" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF təsdiqləmə alınmadı. Sorğu ləğv edildi." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Bu HTTPS sayt səyyahınız tərəfindən “Referer header” göndərilməsini tələb " +"edir, amma göndərilmir. Bu başlıq səyyahınızın üçüncü biri tərəfindən hack-" +"lənmədiyinə əmin olmaq üçün istifadə edilir." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Əgər səyyahınızın “Referer” başlığını göndərməsini söndürmüsünüzsə, lütfən " +"bu sayt üçün, HTTPS əlaqələr üçün və ya “same-origin” sorğular üçün aktiv " +"edin." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Əgər etiketini və ya " +"“Referrer-Policy: no-referrer” başlığını işlədirsinizsə, lütfən silin. CSRF " +"qoruma dəqiq yönləndirən yoxlaması üçün “Referer” başlığını tələb edir. Əgər " +"məxfilik üçün düşünürsünüzsə, üçüncü tərəf sayt keçidləri üçün kimi bir alternativ işlədin." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Bu sayt formaları göndərmək üçün CSRF çərəzini işlədir. Bu çərəz " +"səyyahınızın üçüncü biri tərəfindən hack-lənmədiyinə əmin olmaq üçün " +"istifadə edilir. " + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Əgər səyyahınızda çərəzlər söndürülübsə, lütfən bu sayt və ya “same-origin” " +"sorğular üçün aktiv edin." + +msgid "More information is available with DEBUG=True." +msgstr "Daha ətraflı məlumat DEBUG=True ilə mövcuddur." + +msgid "No year specified" +msgstr "İl göstərilməyib" + +msgid "Date out of range" +msgstr "Tarix aralığın xaricindədir" + +msgid "No month specified" +msgstr "Ay göstərilməyib" + +msgid "No day specified" +msgstr "Gün göstərilməyib" + +msgid "No week specified" +msgstr "Həftə göstərilməyib" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s seçmək mümkün deyil" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Gələcək %(verbose_name_plural)s seçmək mümkün deyil, çünki %(class_name)s." +"allow_future Yalan kimi qeyd olunub." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "“%(format)s” formatına görə “%(datestr)s” tarixi düzgün deyil" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Sorğuya uyğun %(verbose_name)s tapılmadı" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Səhifə həm “axırıncı” deyil, həm də tam ədədə çevrilə bilmir." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Qeyri-düzgün səhifə (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Siyahı boşdur və “%(class_name)s.allow_empty” dəyəri False-dur." + +msgid "Directory indexes are not allowed here." +msgstr "Ünvan indekslərinə icazə verilmir." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” mövcud deyil" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-nin indeksi" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: tələsən mükəmməlləkçilər üçün Web framework." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s üçün buraxılış " +"qeydlərinə baxın" + +msgid "The install worked successfully! Congratulations!" +msgstr "Quruluş uğurla tamamlandı! Təbriklər!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Tənzimləmə faylınızda DEBUG=True və heç bir URL qurmadığınız üçün bu səhifəni görürsünüz." + +msgid "Django Documentation" +msgstr "Django Sənədləri" + +msgid "Topics, references, & how-to’s" +msgstr "Mövzular, istinadlar və nümunələr" + +msgid "Tutorial: A Polling App" +msgstr "Məşğələ: Səsvermə Tətbiqi" + +msgid "Get started with Django" +msgstr "Django-ya başla" + +msgid "Django Community" +msgstr "Django İcması" + +msgid "Connect, get help, or contribute" +msgstr "Qoşul, kömək al və dəstək ol" diff --git a/venv/Lib/site-packages/django/conf/locale/az/__init__.py b/venv/Lib/site-packages/django/conf/locale/az/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/az/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/az/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09849dfbbc688426faa2739c810b1daa6605911a GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lVwHY;d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04m=!-2eap literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/az/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/az/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4aba2029e2d38f40279048b339ba2d3ad4230480 GIT binary patch literal 728 zcmZXS%Wj)M6o$DB4z}aCj@m9OHY_Y9c#o>KG=M=3U~y5!2o+%uws4J!7#ztwP1Rjr zqmNOktF9t-+f5c#!HpfP%xKQ#oB7XNG+D3LA*%NK)6eN!KoGy`q}iw{c~=cw8$>_? zk&r|bq!0~h1Ry{RWKavX&cS2>gX=q*y5!W7K|(6{Wqap1O-$~{YU`5ak-(<{?;oP=uvHHBl;bs#H$>hk zpFcqYKQGUY=|Q-CDttsu;RC%VFaFeT^8L#lT{&~ugI!s2l~A>8Lvmr))r~{auV{;rkfMbeW>Ta zmxp5<^MR~f>4tP2I?6<{CD*dyxvN>8Bbjo8^-a%suh`+(w!DdMj=vE(Q(b*$?&B*l z@Nk^tz}{dS1#&jqr184I!8j?j%`{Mx92b|9JX^-IBDjs$x50HX4RBJ#mp9SubF_$Y zfR@pEk&R~AdOliZvuG8MqH;9P@-!;2aI^ivzD_f=S;cSazkpv=1^_@dJH=2W_{##o I0+J>F0T{o$#{d8T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/az/formats.py b/venv/Lib/site-packages/django/conf/locale/az/formats.py new file mode 100644 index 000000000..253b6dddf --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/az/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j E Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j E Y, G:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c0de61046162a560e7693bca79674c9734f4467 GIT binary patch literal 36467 zcmds=37lM2weAmtfDr*FCIt>dpc~Si1dyRgfQ%%BkeGCW5M!+FKItw}UDec(q@!Fy zA|Xm331Cnlgc%h`iSELHX>EiIv>&5B$(Cb4KuJ8Y?y-!tjb$3W&g!i+^ z?(dv^_OSNaYp=c5+NX-2ynElz1bn9L6$BpupBfMZ|HgIdeaa1j6=Y_?mEbsV-=kc) zi6H-i%lUH-xD-4KduR-JoD%vI1-!;@-LXfANBKTpZ|cz?LPm<;M;iq7mvX) z?tVXy2YP%rcr4`(2lob>K*$b;gZqN#f$s!I`{z@@w{t%YJOG>p9t?JX>Tf={ANVie zd%$ZzmHV8>yZ!SA!FQAYDEJQW>ps5(!n)uG;Qrvx!S{l{0U1gVgh6lua15yDqd`5t z2volb(C7h0=X_A*7J(;&pZ50~K$YJLiteYtcY)so#qSqD{sn*HkLW)XCaJw+K$Wit zRevye2zUml@m>I`of)9&b%F0 zQt)YTG8oncftJb@AWa9?g5vkX-~r&{9={5*B!X{(`+_flE#U7!m7iSi_;eYl_F6#Y z&j%a9Mc{tmT5uomaeu!B+@JfeftP{*4jurWh|mZJgQ|BHsPUZ#YMw6f`7`}}8~Aqe zF9!#JdGJ8+Dxbd$RKKghkM0!&w}PMI{?${U30yqLjq8IAuKgxZ{5u~U0A2!$&K6MX z=5lZpI2WXeU=t|1ehI4FZ$17usBydoif?a&8Nvae#&s~L@`w8Sqd~PZ(BGfp@l;Ud z&IU!#2=JZYMIJBn`5mC@=RonJ8@vfz3?2a#&0PYQL0%2va6=VqnzXrA54j$t88G>2|XM(Di1GR3Kc>Ju# zFM8Ypimq>iA^3ezeE2gcc?gEOaU2dR|7cKjoCr37^*+B19Ls$Qq-wAZ%z(cD5rv@n z)F2oMUIm^HZU?n)_c_gte-%K6n9m)aj1T5vcYupyqiVD1KezpMMtAyxi^YzW_>qtOHg4Sy1(V3~C+x zC#d!N2T=S!-M8SHi7Oi=pjHc<3G4r;&sE~xqaJ%|bp_CM3nTMvq_4WRlx1C*Sd z1HK3R7$`pHL5*j=$Auo3f`^g60#v!rgBr(|K*{$yQ1ovFRsTOg>C2yk;_GmX1ob-s z6kjHTCxX*Kt*0Z=}adK$TB{T7Qedi@+~} z9|2$S&zmQpE4ZHnik{Dbr+^Rp`yYAyJ;=XcUm8)nlR?qh4r*NU!IQx2z%#&g;B@fU z{`rWBZoM~y2a-R_V+z#xyFux-)gVhNcpTJv`4g!5-S=YGUkIw*p`hw51qXs(0!7zz zpvLhlQ1$)?{5p8#B$xj)a3d4+C-4^VAtw70aLiQn4HLK;VXX)6p_8HDGaq(#?B6bP ze49JN*}th)N57p_)&!sEY!pXdJjpyXp=t1G_} z)cyTn2yO&b?+5<*e}MzIe+?Af`_tJw!6U(g!8%a$dltAKI0@7|O$W8$7S3i2;MMJJ zTw6O_dryNJM+uaC{S8!mM#O0;>NHf@=Rl@WWuj=Whb*xqlYi7km{Q5B?8$Iyf%v zibn_%tXwUI81xgSy;!hJm7U z0(c1cF>o<>1vmiw6UaZ?Tr_W2u*rN8d={JzF339nvjjH4uZ|pJ23O@>d*3QJe*YLe zh4Oy}Mehl7-8viv9>V<`a2WUrP;@`x@mrwy^Hb3H4Ql5EOrZ396l!!BJqaz|lJzL{$c9kR=v;1)K!decbJ% z^Fi^m2#O!Cf#Tl@pK$jHQ2Omtpy=HUs-LfbTF=jd9|XS#s{Vmjx^kz3Dt9)h@r(lx z1uq592fIM=buFmzeFxNde+gk>1)K(c0Q?zv0Qfqn_V>HWt%vu4m<~Z2 z6dmh9_4fj}1^go@`X5>7__hI5zuQ5L<9Tos^7aBa4!mU%@&^74Ay&D+e$wGV*Esv) zSdaCf=o#won?TLWNKo`m^7v7o-wEzd{sNDSJboHfKR1G^e;=s&kNW$sg5t-w{ryk< z^WS>>tIr>>#If81zgGft>B&Dpry%0Ak%DZ{SkbL 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, 2014-2015 +# znotdead , 2016-2017,2019-2021 +# Дмитрий Шатера , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 01:46+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Афрыкаанс" + +msgid "Arabic" +msgstr "Арабская" + +msgid "Algerian Arabic" +msgstr "Алжырская арабская" + +msgid "Asturian" +msgstr "Астурыйская" + +msgid "Azerbaijani" +msgstr "Азэрбайджанская" + +msgid "Bulgarian" +msgstr "Баўгарская" + +msgid "Belarusian" +msgstr "Беларуская" + +msgid "Bengali" +msgstr "Бэнґальская" + +msgid "Breton" +msgstr "Брэтонская" + +msgid "Bosnian" +msgstr "Басьнійская" + +msgid "Catalan" +msgstr "Каталёнская" + +msgid "Czech" +msgstr "Чэская" + +msgid "Welsh" +msgstr "Валійская" + +msgid "Danish" +msgstr "Дацкая" + +msgid "German" +msgstr "Нямецкая" + +msgid "Lower Sorbian" +msgstr "Ніжнелужыцкая" + +msgid "Greek" +msgstr "Грэцкая" + +msgid "English" +msgstr "Анґельская" + +msgid "Australian English" +msgstr "Анґельская (Аўстралія)" + +msgid "British English" +msgstr "Анґельская (Брытанская)" + +msgid "Esperanto" +msgstr "Эспэранта" + +msgid "Spanish" +msgstr "Гішпанская" + +msgid "Argentinian Spanish" +msgstr "Гішпанская (Арґентына)" + +msgid "Colombian Spanish" +msgstr "Гішпанская (Калумбія)" + +msgid "Mexican Spanish" +msgstr "Гішпанская (Мэксыка)" + +msgid "Nicaraguan Spanish" +msgstr "Гішпанская (Нікараґуа)" + +msgid "Venezuelan Spanish" +msgstr "Іспанская (Вэнэсуэла)" + +msgid "Estonian" +msgstr "Эстонская" + +msgid "Basque" +msgstr "Басконская" + +msgid "Persian" +msgstr "Фарсі" + +msgid "Finnish" +msgstr "Фінская" + +msgid "French" +msgstr "Француская" + +msgid "Frisian" +msgstr "Фрызкая" + +msgid "Irish" +msgstr "Ірляндзкая" + +msgid "Scottish Gaelic" +msgstr "Гэльская шатляндзкая" + +msgid "Galician" +msgstr "Ґальская" + +msgid "Hebrew" +msgstr "Габрэйская" + +msgid "Hindi" +msgstr "Гінды" + +msgid "Croatian" +msgstr "Харвацкая" + +msgid "Upper Sorbian" +msgstr "Верхнелужыцкая" + +msgid "Hungarian" +msgstr "Вугорская" + +msgid "Armenian" +msgstr "Армянскі" + +msgid "Interlingua" +msgstr "Інтэрлінгва" + +msgid "Indonesian" +msgstr "Інданэзійская" + +msgid "Igbo" +msgstr "Ігба" + +msgid "Ido" +msgstr "Іда" + +msgid "Icelandic" +msgstr "Ісьляндзкая" + +msgid "Italian" +msgstr "Італьянская" + +msgid "Japanese" +msgstr "Японская" + +msgid "Georgian" +msgstr "Грузінская" + +msgid "Kabyle" +msgstr "Кабільскі" + +msgid "Kazakh" +msgstr "Казаская" + +msgid "Khmer" +msgstr "Кхмерская" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Korean" +msgstr "Карэйская" + +msgid "Kyrgyz" +msgstr "Кіргізская" + +msgid "Luxembourgish" +msgstr "Люксэмбургская" + +msgid "Lithuanian" +msgstr "Літоўская" + +msgid "Latvian" +msgstr "Латыская" + +msgid "Macedonian" +msgstr "Македонская" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Манґольская" + +msgid "Marathi" +msgstr "Маратхі" + +msgid "Malay" +msgstr "Малайская" + +msgid "Burmese" +msgstr "Бірманская" + +msgid "Norwegian Bokmål" +msgstr "Нарвэская букмал" + +msgid "Nepali" +msgstr "Нэпальская" + +msgid "Dutch" +msgstr "Галяндзкая" + +msgid "Norwegian Nynorsk" +msgstr "Нарвэская нюнорск" + +msgid "Ossetic" +msgstr "Асяцінская" + +msgid "Punjabi" +msgstr "Панджабі" + +msgid "Polish" +msgstr "Польская" + +msgid "Portuguese" +msgstr "Партуґальская" + +msgid "Brazilian Portuguese" +msgstr "Партуґальская (Бразылія)" + +msgid "Romanian" +msgstr "Румынская" + +msgid "Russian" +msgstr "Расейская" + +msgid "Slovak" +msgstr "Славацкая" + +msgid "Slovenian" +msgstr "Славенская" + +msgid "Albanian" +msgstr "Альбанская" + +msgid "Serbian" +msgstr "Сэрбская" + +msgid "Serbian Latin" +msgstr "Сэрбская (лацінка)" + +msgid "Swedish" +msgstr "Швэдзкая" + +msgid "Swahili" +msgstr "Суахілі" + +msgid "Tamil" +msgstr "Тамільская" + +msgid "Telugu" +msgstr "Тэлуґу" + +msgid "Tajik" +msgstr "Таджыкскі" + +msgid "Thai" +msgstr "Тайская" + +msgid "Turkmen" +msgstr "Туркменская" + +msgid "Turkish" +msgstr "Турэцкая" + +msgid "Tatar" +msgstr "Татарская" + +msgid "Udmurt" +msgstr "Удмурцкая" + +msgid "Ukrainian" +msgstr "Украінская" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "Узбецкі" + +msgid "Vietnamese" +msgstr "Віетнамская" + +msgid "Simplified Chinese" +msgstr "Кітайская (спрошчаная)" + +msgid "Traditional Chinese" +msgstr "Кітайская (звычайная)" + +msgid "Messages" +msgstr "Паведамленні" + +msgid "Site Maps" +msgstr "Мапы сайту" + +msgid "Static Files" +msgstr "Cтатычныя файлы" + +msgid "Syndication" +msgstr "Сындыкацыя" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Лік гэтай старонкі не з'яўляецца цэлым лікам" + +msgid "That page number is less than 1" +msgstr "Лік старонкі менш чым 1" + +msgid "That page contains no results" +msgstr "Гэтая старонка не мае ніякіх вынікаў" + +msgid "Enter a valid value." +msgstr "Пазначце правільнае значэньне." + +msgid "Enter a valid URL." +msgstr "Пазначце чынную спасылку." + +msgid "Enter a valid integer." +msgstr "Увядзіце цэлы лік." + +msgid "Enter a valid email address." +msgstr "Увядзіце сапраўдны адрас электроннай пошты." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Значэнне павінна быць толькі з літараў, личбаў, знакаў падкрэслівання ці " +"злучкі." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Значэнне павінна быць толькі з літараў стандарту Unicode, личбаў, знакаў " +"падкрэслівання ці злучкі." + +msgid "Enter a valid IPv4 address." +msgstr "Пазначце чынны адрас IPv4." + +msgid "Enter a valid IPv6 address." +msgstr "Пазначце чынны адрас IPv6." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Пазначце чынны адрас IPv4 або IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Набярыце лічбы, падзеленыя коскамі." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Упэўніцеся, што гэтае значэньне — %(limit_value)s (зараз яно — " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Значэньне мусіць быць меншым або роўным %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Значэньне мусіць быць большым або роўным %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Упэўніцеся, што гэтае значэнне мае не менш %(limit_value)d сімвал (зараз " +"%(show_value)d)." +msgstr[1] "" +"Упэўніцеся, што гэтае значэнне мае не менш %(limit_value)d сімвала (зараз " +"%(show_value)d)." +msgstr[2] "" +"Упэўніцеся, што гэтае значэнне мае не менш %(limit_value)d сімвалаў (зараз " +"%(show_value)d)." +msgstr[3] "" +"Упэўніцеся, што гэтае значэнне мае не менш %(limit_value)d сімвалаў (зараз " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Упэўніцеся, што гэтае значэнне мае не болей %(limit_value)d сімвал (зараз " +"%(show_value)d)." +msgstr[1] "" +"Упэўніцеся, што гэтае значэнне мае не болей %(limit_value)d сімвала (зараз " +"%(show_value)d)." +msgstr[2] "" +"Упэўніцеся, што гэтае значэнне мае не болей %(limit_value)d сімвалаў (зараз " +"%(show_value)d)." +msgstr[3] "" +"Упэўніцеся, што гэтае значэнне мае не болей %(limit_value)d сімвалаў (зараз " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Набярыце лік." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Упэўніцеся, што набралі ня болей за %(max)s лічбу." +msgstr[1] "Упэўніцеся, што набралі ня болей за %(max)s лічбы." +msgstr[2] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў." +msgstr[3] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Упэўніцеся, што набралі ня болей за %(max)s лічбу пасьля коскі." +msgstr[1] "Упэўніцеся, што набралі ня болей за %(max)s лічбы пасьля коскі." +msgstr[2] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў пасьля коскі." +msgstr[3] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў пасьля коскі." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Упэўніцеся, што набралі ня болей за %(max)s лічбу да коскі." +msgstr[1] "Упэўніцеся, што набралі ня болей за %(max)s лічбы да коскі." +msgstr[2] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў да коскі." +msgstr[3] "Упэўніцеся, што набралі ня болей за %(max)s лічбаў да коскі." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Пашырэнне файла “%(extension)s” не дапускаецца. Дапушчальныя пашырэння: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null сімвалы не дапускаюцца." + +msgid "and" +msgstr "і" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s з такім %(field_labels)s ужо існуе." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Значэнне %(value)r не з'яўляецца правільным выбарам." + +msgid "This field cannot be null." +msgstr "Поле ня можа мець значэньне «null»." + +msgid "This field cannot be blank." +msgstr "Трэба запоўніць поле." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s з такім %(field_label)s ужо існуе." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s павінна быць унікальна для %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Палі віду: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Значэньне “%(value)s” павінна быць True альбо False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Значэньне “%(value)s” павінна быць True, False альбо None." + +msgid "Boolean (Either True or False)" +msgstr "Ляґічнае («сапраўдна» або «не сапраўдна»)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Радок (ня болей за %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Цэлыя лікі, падзеленыя коскаю" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Значэнне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце ГГГГ-" +"ММ-ДД." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Значэнне “%(value)s” мае правільны фармат(ГГГГ-ММ-ДД) але гэта несапраўдная " +"дата." + +msgid "Date (without time)" +msgstr "Дата (бяз часу)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Значэнне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце ГГГГ-" +"ММ-ДД ГГ:ХХ[:сс[.мммммм]][ЧА], дзе ЧА — часавы абсяг." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Значэнне “%(value)s” мае правільны фармат (ГГГГ-ММ-ДД ГГ:ХХ[:сс[.мммммм]]" +"[ЧА], дзе ЧА — часавы абсяг) але гэта несапраўдныя дата/час." + +msgid "Date (with time)" +msgstr "Дата (разам з часам)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Значэньне “%(value)s” павінна быць дзесятковым лікам." + +msgid "Decimal number" +msgstr "Дзесятковы лік" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Значэньне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце " +"[ДД] [ГГ:[ХХ:]]сс[.мммммм]." + +msgid "Duration" +msgstr "Працягласць" + +msgid "Email address" +msgstr "Адрас эл. пошты" + +msgid "File path" +msgstr "Шлях да файла" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Значэньне “%(value)s” павінна быць дробным лікам." + +msgid "Floating point number" +msgstr "Лік зь пераноснай коскаю" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Значэньне “%(value)s” павінна быць цэлым лікам." + +msgid "Integer" +msgstr "Цэлы лік" + +msgid "Big (8 byte) integer" +msgstr "Вялікі (8 байтаў) цэлы" + +msgid "Small integer" +msgstr "Малы цэлы лік" + +msgid "IPv4 address" +msgstr "Адрас IPv4" + +msgid "IP address" +msgstr "Адрас IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Значэньне “%(value)s” павінна быць None, True альбо False." + +msgid "Boolean (Either True, False or None)" +msgstr "Ляґічнае («сапраўдна», «не сапраўдна» ці «нічога»)" + +msgid "Positive big integer" +msgstr "Дадатны вялікі цэлы лік" + +msgid "Positive integer" +msgstr "Дадатны цэлы лік" + +msgid "Positive small integer" +msgstr "Дадатны малы цэлы лік" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Бірка (ня болей за %(max_length)s)" + +msgid "Text" +msgstr "Тэкст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Значэньне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце ГГ:" +"ХХ[:сс[.мммммм]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Значэнне “%(value)s” мае правільны фармат (ГГ:ХХ[:сс[.мммммм]]) але гэта " +"несапраўдны час." + +msgid "Time" +msgstr "Час" + +msgid "URL" +msgstr "Сеціўная спасылка" + +msgid "Raw binary data" +msgstr "Неапрацаваныя бінарныя зьвесткі" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” не з'яўляецца дапушчальным UUID." + +msgid "Universally unique identifier" +msgstr "Універсальны непаўторны ідэнтыфікатар" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Выява" + +msgid "A JSON object" +msgstr "Аб'ект JSON" + +msgid "Value must be valid JSON." +msgstr "Значэньне павінна быць сапраўдным JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Экземпляр %(model)s з %(field)s %(value)r не iснуе." + +msgid "Foreign Key (type determined by related field)" +msgstr "Вонкавы ключ (від вызначаецца паводле зьвязанага поля)" + +msgid "One-to-one relationship" +msgstr "Сувязь «адзін да аднаго»" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Сувязь %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Сувязi %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Сувязь «некалькі да некалькіх»" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Поле трэба запоўніць." + +msgid "Enter a whole number." +msgstr "Набярыце ўвесь лік." + +msgid "Enter a valid date." +msgstr "Пазначце чынную дату." + +msgid "Enter a valid time." +msgstr "Пазначце чынны час." + +msgid "Enter a valid date/time." +msgstr "Пазначце чынныя час і дату." + +msgid "Enter a valid duration." +msgstr "Увядзіце сапраўдны тэрмін." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Колькасць дзён павінна быць паміж {min_days} i {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл не даслалі. Зірніце кадоўку блянку." + +msgid "No file was submitted." +msgstr "Файл не даслалі." + +msgid "The submitted file is empty." +msgstr "Дасланы файл — парожні." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Упэўніцеся, што гэтае імя файлу мае не болей %(max)d сімвал (зараз " +"%(length)d)." +msgstr[1] "" +"Упэўніцеся, што гэтае імя файлу мае не болей %(max)d сімвала (зараз " +"%(length)d)." +msgstr[2] "" +"Упэўніцеся, што гэтае імя файлу мае не болей %(max)d сімвалаў (зараз " +"%(length)d)." +msgstr[3] "" +"Упэўніцеся, што гэтае імя файлу мае не болей %(max)d сімвалаў (зараз " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Трэба або даслаць файл, або абраць «Ачысьціць», але нельга рабіць гэта " +"адначасова." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Запампаваць чынны малюнак. Запампавалі або не выяву, або пашкоджаную выяву." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Абярыце дазволенае. %(value)s няма ў даступных значэньнях." + +msgid "Enter a list of values." +msgstr "Упішыце сьпіс значэньняў." + +msgid "Enter a complete value." +msgstr "Калі ласка, увядзіце поўнае значэньне." + +msgid "Enter a valid UUID." +msgstr "Увядзіце сапраўдны UUID." + +msgid "Enter a valid JSON." +msgstr "Пазначце сапраўдны JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Схаванае поле %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Дадзеныя формы ManagementForm адсутнічаюць ці былі падменены. Адсутнічаюць " +"палі: %(field_names)s. Магчыма, вам спатрэбіцца падаць справаздачу пра " +"памылку, калі праблема захоўваецца." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Калі ласка, адпраўце не болей чым %d форму." +msgstr[1] "Калі ласка, адпраўце не болей чым %d формаў." +msgstr[2] "Калі ласка, адпраўце не болей чым %d формаў." +msgstr[3] "Калі ласка, адпраўце не болей чым %d формаў." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Калі ласка, адпраўце не менш чым %d форму." +msgstr[1] "Калі ласка, адпраўце не менш чым %d формаў." +msgstr[2] "Калі ласка, адпраўце не менш чым %d формаў." +msgstr[3] "Калі ласка, адпраўце не менш чым %d формаў." + +msgid "Order" +msgstr "Парадак" + +msgid "Delete" +msgstr "Выдаліць" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "У полі «%(field)s» выпраўце зьвесткі, якія паўтараюцца." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Выпраўце зьвесткі ў полі «%(field)s»: нельга, каб яны паўтараліся." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Выпраўце зьвесткі ў полі «%(field_name)s»: нельга каб зьвесткі ў " +"«%(date_field)s» для «%(lookup)s» паўтараліся." + +msgid "Please correct the duplicate values below." +msgstr "Выпраўце зьвесткі, якія паўтараюцца (гл. ніжэй)." + +msgid "The inline value did not match the parent instance." +msgstr "Убудаванае значэнне не супадае з бацькоўскім значэннем." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Абярыце дазволенае. Абранага няма ў даступных значэньнях." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” не сапраўднае значэнне." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"У часавым абсягу %(current_timezone)s нельга зразумець дату %(datetime)s: " +"яна можа быць неадназначнаю або яе можа не існаваць." + +msgid "Clear" +msgstr "Ачысьціць" + +msgid "Currently" +msgstr "Зараз" + +msgid "Change" +msgstr "Зьмяніць" + +msgid "Unknown" +msgstr "Невядома" + +msgid "Yes" +msgstr "Так" + +msgid "No" +msgstr "Не" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "так,не,магчыма" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байты" +msgstr[2] "%(size)d байтаў" +msgstr[3] "%(size)d байтаў" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ҐБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "папаўдні" + +msgid "a.m." +msgstr "папоўначы" + +msgid "PM" +msgstr "папаўдні" + +msgid "AM" +msgstr "папоўначы" + +msgid "midnight" +msgstr "поўнач" + +msgid "noon" +msgstr "поўдзень" + +msgid "Monday" +msgstr "Панядзелак" + +msgid "Tuesday" +msgstr "Аўторак" + +msgid "Wednesday" +msgstr "Серада" + +msgid "Thursday" +msgstr "Чацьвер" + +msgid "Friday" +msgstr "Пятніца" + +msgid "Saturday" +msgstr "Субота" + +msgid "Sunday" +msgstr "Нядзеля" + +msgid "Mon" +msgstr "Пн" + +msgid "Tue" +msgstr "Аў" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Чц" + +msgid "Fri" +msgstr "Пт" + +msgid "Sat" +msgstr "Сб" + +msgid "Sun" +msgstr "Нд" + +msgid "January" +msgstr "студзеня" + +msgid "February" +msgstr "лютага" + +msgid "March" +msgstr "сакавік" + +msgid "April" +msgstr "красавіка" + +msgid "May" +msgstr "траўня" + +msgid "June" +msgstr "чэрвеня" + +msgid "July" +msgstr "ліпеня" + +msgid "August" +msgstr "жніўня" + +msgid "September" +msgstr "верасьня" + +msgid "October" +msgstr "кастрычніка" + +msgid "November" +msgstr "лістапада" + +msgid "December" +msgstr "сьнежня" + +msgid "jan" +msgstr "сту" + +msgid "feb" +msgstr "лют" + +msgid "mar" +msgstr "сак" + +msgid "apr" +msgstr "кра" + +msgid "may" +msgstr "тра" + +msgid "jun" +msgstr "чэр" + +msgid "jul" +msgstr "ліп" + +msgid "aug" +msgstr "жні" + +msgid "sep" +msgstr "вер" + +msgid "oct" +msgstr "кас" + +msgid "nov" +msgstr "ліс" + +msgid "dec" +msgstr "сьн" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Сту." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Люты" + +msgctxt "abbrev. month" +msgid "March" +msgstr "сакавік" + +msgctxt "abbrev. month" +msgid "April" +msgstr "красавіка" + +msgctxt "abbrev. month" +msgid "May" +msgstr "траўня" + +msgctxt "abbrev. month" +msgid "June" +msgstr "чэрвеня" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ліпеня" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Жні." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Вер." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Кас." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ліс." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Сьн." + +msgctxt "alt. month" +msgid "January" +msgstr "студзеня" + +msgctxt "alt. month" +msgid "February" +msgstr "лютага" + +msgctxt "alt. month" +msgid "March" +msgstr "сакавік" + +msgctxt "alt. month" +msgid "April" +msgstr "красавіка" + +msgctxt "alt. month" +msgid "May" +msgstr "траўня" + +msgctxt "alt. month" +msgid "June" +msgstr "чэрвеня" + +msgctxt "alt. month" +msgid "July" +msgstr "ліпеня" + +msgctxt "alt. month" +msgid "August" +msgstr "жніўня" + +msgctxt "alt. month" +msgid "September" +msgstr "верасьня" + +msgctxt "alt. month" +msgid "October" +msgstr "кастрычніка" + +msgctxt "alt. month" +msgid "November" +msgstr "лістапада" + +msgctxt "alt. month" +msgid "December" +msgstr "сьнежня" + +msgid "This is not a valid IPv6 address." +msgstr "Гэта ня правільны адрас IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "або" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d год" +msgstr[1] "%(num)d гадоў" +msgstr[2] "%(num)d гадоў" +msgstr[3] "%(num)d гадоў" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месяц" +msgstr[1] "%(num)d месяцаў" +msgstr[2] "%(num)d месяцаў" +msgstr[3] "%(num)d месяцаў" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d тыдзень" +msgstr[1] "%(num)d тыдняў" +msgstr[2] "%(num)d тыдняў" +msgstr[3] "%(num)d тыдняў" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d дзень" +msgstr[1] "%(num)d дзён" +msgstr[2] "%(num)d дзён" +msgstr[3] "%(num)d дзён" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d гадзіна" +msgstr[1] "%(num)d гадзін" +msgstr[2] "%(num)d гадзін" +msgstr[3] "%(num)d гадзін" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d хвіліна" +msgstr[1] "%(num)d хвілін" +msgstr[2] "%(num)d хвілін" +msgstr[3] "%(num)d хвілін" + +msgid "Forbidden" +msgstr "Забаронена" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-праверка не атрымалася. Запыт спынены." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Вы бачыце гэта паведамленне, таму што гэты HTTPS-сайт патрабуе каб Referer " +"загаловак быў адасланы вашым аглядальнікам, але гэтага не адбылося. Гэты " +"загаловак неабходны для бяспекі, каб пераканацца, што ваш аглядальнік не " +"ўзаламаны трэцімі асобамі." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Калі вы сканфігуравалі ваш браўзэр так, каб ён не працаваў з “Referer” " +"загалоўкамі, калі ласка дазвольце іх хаця б для гэтага сайту, ці для HTTPS " +"злучэнняў, ці для 'same-origin' запытаў." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Калі вы выкарыстоўваеце тэг " +"ці дадалі загаловак “Referrer-Policy: no-referrer”, калі ласка выдаліце іх. " +"CSRF абароне неабходны “Referer” загаловак для строгай праверкі. Калі Вы " +"турбуецеся аб прыватнасці, выкарыстоўвайце альтэрнатывы, напрыклад , для спасылкі на сайты трэціх асоб." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Вы бачыце гэта паведамленне, таму што гэты сайт патрабуе CSRF кукі для " +"адсылкі формы. Гэтыя кукі неабходныя для бяспекі, каб пераканацца, што ваш " +"браўзэр не ўзламаны трэцімі асобамі." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Калі вы сканфігуравалі ваш браўзэр так, каб ён не працаваў з кукамі, калі " +"ласка дазвольце іх хаця б для гэтага сайту ці для “same-origin” запытаў." + +msgid "More information is available with DEBUG=True." +msgstr "Больш падрабязная інфармацыя даступная з DEBUG=True." + +msgid "No year specified" +msgstr "Не пазначылі год" + +msgid "Date out of range" +msgstr "Дата выходзіць за межы дыяпазону" + +msgid "No month specified" +msgstr "Не пазначылі месяц" + +msgid "No day specified" +msgstr "Не пазначылі дзень" + +msgid "No week specified" +msgstr "Не пазначылі тыдзень" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Няма доступу да %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Няма доступу да %(verbose_name_plural)s, якія будуць, бо «%(class_name)s." +"allow_future» мае значэньне «не сапраўдна»." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Радок даты “%(datestr)s” не адпавядае выгляду “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Па запыце не знайшлі ніводнага %(verbose_name)s" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Нумар бачыны ня мае значэньня “last” і яго нельга ператварыць у цэлы лік." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Няправільная старонка (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" +"Сьпіс парожні, але “%(class_name)s.allow_empty” мае значэньне «не " +"сапраўдна», што забараняе паказваць парожнія сьпісы." + +msgid "Directory indexes are not allowed here." +msgstr "Не дазваляецца глядзець сьпіс файлаў каталёґа." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” не існуе" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Файлы каталёґа «%(directory)s»" + +msgid "The install worked successfully! Congratulations!" +msgstr "Усталяванне прайшло паспяхова! Віншаванні!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Паглядзець заўвагі да выпуску для Джангі " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Вы бачыце гэту старонку таму што DEBUG=True у вашым файле налад і вы не сканфігурыравалі ніякіх URL." + +msgid "Django Documentation" +msgstr "Дакументацыя Джангі" + +msgid "Topics, references, & how-to’s" +msgstr "Тэмы, спасылкі, & як зрабіць" + +msgid "Tutorial: A Polling App" +msgstr "Падручнік: Дадатак для галасавання" + +msgid "Get started with Django" +msgstr "Пачніце з Джангаю" + +msgid "Django Community" +msgstr "Джанга супольнасць" + +msgid "Connect, get help, or contribute" +msgstr "Злучайцеся, атрымлівайце дапамогу, ці спрыяйце" diff --git a/venv/Lib/site-packages/django/conf/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b85f3380fcf4c58a812007ddc7b2f4c5239879b GIT binary patch literal 33758 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, 2022 +# Boris Chervenkov , 2012 +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2013-2015 +# Venelin Stoykov , 2015-2017 +# vestimir , 2014 +# Alexander Atanasov , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-14 11:26+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "африкаански" + +msgid "Arabic" +msgstr "арабски език" + +msgid "Algerian Arabic" +msgstr "алжирски арабски" + +msgid "Asturian" +msgstr "Астурийски" + +msgid "Azerbaijani" +msgstr "Азербайджански език" + +msgid "Bulgarian" +msgstr "български език" + +msgid "Belarusian" +msgstr "Беларуски" + +msgid "Bengali" +msgstr "бенгалски език" + +msgid "Breton" +msgstr "Бретон" + +msgid "Bosnian" +msgstr "босненски език" + +msgid "Catalan" +msgstr "каталански" + +msgid "Czech" +msgstr "чешки" + +msgid "Welsh" +msgstr "уелски" + +msgid "Danish" +msgstr "датски" + +msgid "German" +msgstr "немски" + +msgid "Lower Sorbian" +msgstr "долносорбски" + +msgid "Greek" +msgstr "гръцки" + +msgid "English" +msgstr "английски" + +msgid "Australian English" +msgstr "австралийски английски" + +msgid "British English" +msgstr "британски английски" + +msgid "Esperanto" +msgstr "есперанто" + +msgid "Spanish" +msgstr "испански" + +msgid "Argentinian Spanish" +msgstr "кастилски" + +msgid "Colombian Spanish" +msgstr "колумбийски испански" + +msgid "Mexican Spanish" +msgstr "мексикански испански" + +msgid "Nicaraguan Spanish" +msgstr "никарагуански испански" + +msgid "Venezuelan Spanish" +msgstr "венецуелски испански" + +msgid "Estonian" +msgstr "естонски" + +msgid "Basque" +msgstr "баски" + +msgid "Persian" +msgstr "персийски" + +msgid "Finnish" +msgstr "финландски" + +msgid "French" +msgstr "френски" + +msgid "Frisian" +msgstr "фризийски" + +msgid "Irish" +msgstr "ирландски" + +msgid "Scottish Gaelic" +msgstr "шотландски галски" + +msgid "Galician" +msgstr "галицейски" + +msgid "Hebrew" +msgstr "иврит" + +msgid "Hindi" +msgstr "хинди" + +msgid "Croatian" +msgstr "хърватски" + +msgid "Upper Sorbian" +msgstr "горносорбски" + +msgid "Hungarian" +msgstr "унгарски" + +msgid "Armenian" +msgstr "арменски" + +msgid "Interlingua" +msgstr "интерлингва" + +msgid "Indonesian" +msgstr "индонезийски" + +msgid "Igbo" +msgstr "игбо" + +msgid "Ido" +msgstr "идо" + +msgid "Icelandic" +msgstr "исландски" + +msgid "Italian" +msgstr "италиански" + +msgid "Japanese" +msgstr "японски" + +msgid "Georgian" +msgstr "грузински" + +msgid "Kabyle" +msgstr "кабилски" + +msgid "Kazakh" +msgstr "казахски" + +msgid "Khmer" +msgstr "кхмерски" + +msgid "Kannada" +msgstr "каннада" + +msgid "Korean" +msgstr "корейски" + +msgid "Kyrgyz" +msgstr "киргизки" + +msgid "Luxembourgish" +msgstr "люксембургски" + +msgid "Lithuanian" +msgstr "литовски" + +msgid "Latvian" +msgstr "латвийски" + +msgid "Macedonian" +msgstr "македонски" + +msgid "Malayalam" +msgstr "малаялам" + +msgid "Mongolian" +msgstr "монголски" + +msgid "Marathi" +msgstr "марати" + +msgid "Malay" +msgstr "малайски" + +msgid "Burmese" +msgstr "бирмански" + +msgid "Norwegian Bokmål" +msgstr "норвежки букмол" + +msgid "Nepali" +msgstr "непалски" + +msgid "Dutch" +msgstr "нидерландски" + +msgid "Norwegian Nynorsk" +msgstr "съвременен норвежки" + +msgid "Ossetic" +msgstr "осетски" + +msgid "Punjabi" +msgstr "панджабски" + +msgid "Polish" +msgstr "полски" + +msgid "Portuguese" +msgstr "португалски" + +msgid "Brazilian Portuguese" +msgstr "бразилски португалски" + +msgid "Romanian" +msgstr "румънски" + +msgid "Russian" +msgstr "руски" + +msgid "Slovak" +msgstr "словашки" + +msgid "Slovenian" +msgstr "словенски" + +msgid "Albanian" +msgstr "албански" + +msgid "Serbian" +msgstr "сръбски" + +msgid "Serbian Latin" +msgstr "сръбски - латиница" + +msgid "Swedish" +msgstr "шведски" + +msgid "Swahili" +msgstr "суахили" + +msgid "Tamil" +msgstr "тамилски" + +msgid "Telugu" +msgstr "телугу" + +msgid "Tajik" +msgstr "таджикски" + +msgid "Thai" +msgstr "тайландски" + +msgid "Turkmen" +msgstr "туркменски" + +msgid "Turkish" +msgstr "турски" + +msgid "Tatar" +msgstr "татарски" + +msgid "Udmurt" +msgstr "удмурт" + +msgid "Ukrainian" +msgstr "украински" + +msgid "Urdu" +msgstr "урду" + +msgid "Uzbek" +msgstr "узбекски" + +msgid "Vietnamese" +msgstr "виетнамски" + +msgid "Simplified Chinese" +msgstr "китайски" + +msgid "Traditional Chinese" +msgstr "традиционен китайски" + +msgid "Messages" +msgstr "Съобщения" + +msgid "Site Maps" +msgstr "Карти на сайта" + +msgid "Static Files" +msgstr "Статични файлове" + +msgid "Syndication" +msgstr "Синдикация" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Номерът на страницата не е цяло число" + +msgid "That page number is less than 1" +msgstr "Номерът на страницата е по-малък от 1" + +msgid "That page contains no results" +msgstr "В тази страница няма резултати" + +msgid "Enter a valid value." +msgstr "Въведете валидна стойност. " + +msgid "Enter a valid URL." +msgstr "Въведете валиден URL адрес." + +msgid "Enter a valid integer." +msgstr "Въведете валидно целочислено число." + +msgid "Enter a valid email address." +msgstr "Въведете валиден имейл адрес." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Въведете валиден 'слъг', състоящ се от букви, цифри, тирета или долни тирета." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Въведете валиден 'слъг', състоящ се от Уникод букви, цифри, тирета или долни " +"тирета." + +msgid "Enter a valid IPv4 address." +msgstr "Въведете валиден IPv4 адрес." + +msgid "Enter a valid IPv6 address." +msgstr "Въведете валиден IPv6 адрес." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Въведете валиден IPv4 или IPv6 адрес." + +msgid "Enter only digits separated by commas." +msgstr "Въведете само еднозначни числа, разделени със запетая. " + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Уверете се, че тази стойност е %(limit_value)s (тя е %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Уверете се, че тази стойност е по-малка или равна на %(limit_value)s ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Уверете се, че тази стойност е по-голяма или равна на %(limit_value)s ." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Уверете се, че тази стойност е най-малко %(limit_value)d знака (тя има " +"%(show_value)d )." +msgstr[1] "" +"Уверете се, че тази стойност е най-малко %(limit_value)d знака (тя има " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Уверете се, тази стойност има най-много %(limit_value)d знака (тя има " +"%(show_value)d)." +msgstr[1] "" +"Уверете се, че тази стойност има най-много %(limit_value)d знака (тя има " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Въведете число." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Уверете се, че има не повече от %(max)s цифри общо." +msgstr[1] "Уверете се, че има не повече от %(max)s цифри общо." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Уверете се, че има не повече от%(max)s знак след десетичната запетая." +msgstr[1] "" +"Уверете се, че има не повече от %(max)s знака след десетичната запетая." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Уверете се, че има не повече от %(max)s цифра преди десетичната запетая." +msgstr[1] "" +"Уверете се, че има не повече от %(max)s цифри преди десетичната запетая." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Не са разрешени файлове с раширение \"%(extension)s\". Позволените " +"разширения са: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Празни знаци не са разрешени." + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s с този %(field_labels)s вече съществува." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Стойността %(value)r не е валиден избор." + +msgid "This field cannot be null." +msgstr "Това поле не може да има празна стойност." + +msgid "This field cannot be blank." +msgstr "Това поле не може да е празно." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s с този %(field_label)s вече съществува." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s трябва да е уникално за %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поле от тип: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Стойността на \"%(value)s\" трябва да бъде или True, или False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Стойност \"%(value)s\" трябва да бъде или True, или False или None." + +msgid "Boolean (Either True or False)" +msgstr "Булево (True или False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Символен низ (до %(max_length)s символа)" + +msgid "Comma-separated integers" +msgstr "Цели числа, разделени с запетая" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Стойността \"%(value)s\" е с невалиден формат за дата. Тя трябва да бъде в " +"ГГГГ-ММ-ДД формат." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Стойността \"%(value)s\" е в правилния формат (ГГГГ-ММ-ДД), но самата дата е " +"невалидна." + +msgid "Date (without time)" +msgstr "Дата (без час)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Стойността '%(value)s' е с невалиден формат. Трябва да бъде във формат ГГГГ-" +"ММ-ДД ЧЧ:ММ[:сс[.uuuuuu]][TZ]" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Стойността '%(value)s' е с правилен формат ( ГГГГ-ММ-ДД ЧЧ:ММ[:сс[.μμμμμμ]]" +"[TZ]), но датата/часът са невалидни" + +msgid "Date (with time)" +msgstr "Дата (и час)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Стойността \"%(value)s\" трябва да е десетично число." + +msgid "Decimal number" +msgstr "Десетична дроб" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Стойността “%(value)s” е с невалиден формат. Трябва да бъде във формат [ДД] " +"[[ЧЧ:]ММ:]сс[.uuuuuu] format." + +msgid "Duration" +msgstr "Продължителност" + +msgid "Email address" +msgstr "Имейл адрес" + +msgid "File path" +msgstr "Път към файл" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Стойността '%(value)s' трябва да е число с плаваща запетая." + +msgid "Floating point number" +msgstr "Число с плаваща запетая" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Стойността \"%(value)s\" трябва да е цяло число." + +msgid "Integer" +msgstr "Цяло число" + +msgid "Big (8 byte) integer" +msgstr "Голямо (8 байта) цяло число" + +msgid "Small integer" +msgstr "2 байта цяло число" + +msgid "IPv4 address" +msgstr "IPv4 адрес" + +msgid "IP address" +msgstr "IP адрес" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Стойността '%(value)s' трябва да бъде None, True или False." + +msgid "Boolean (Either True, False or None)" +msgstr "булев (възможните стойности са True, False или None)" + +msgid "Positive big integer" +msgstr "Положително голямо цяло число." + +msgid "Positive integer" +msgstr "Положително цяло число" + +msgid "Positive small integer" +msgstr "Положително 2 байта цяло число" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слъг (до %(max_length)s )" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Стойността \"%(value)s\" е с невалиден формат. Тя трябва да бъде в ЧЧ:ММ [:" +"сс[.μμμμμμ]]" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Стойността \"%(value)s\" е в правилния формат (ЧЧ:ММ [:сс[.μμμμμμ]]), но " +"часът е невалиден." + +msgid "Time" +msgstr "Време" + +msgid "URL" +msgstr "URL адрес" + +msgid "Raw binary data" +msgstr "сурови двоични данни" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" не е валиден UUID." + +msgid "Universally unique identifier" +msgstr "Универсално уникален идентификатор" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Изображение" + +msgid "A JSON object" +msgstr "Обект във формат JSON" + +msgid "Value must be valid JSON." +msgstr "Стойността трябва да е валиден JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Инстанция на %(model)s с %(field)s %(value)r не съществува." + +msgid "Foreign Key (type determined by related field)" +msgstr "Външен ключ (тип, определен от свързаното поле)" + +msgid "One-to-one relationship" +msgstr "едно-към-едно релация " + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s релация" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s релации" + +msgid "Many-to-many relationship" +msgstr "Много-към-много релация" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Това поле е задължително." + +msgid "Enter a whole number." +msgstr "Въведете цяло число. " + +msgid "Enter a valid date." +msgstr "Въведете валидна дата." + +msgid "Enter a valid time." +msgstr "Въведете валиден час." + +msgid "Enter a valid date/time." +msgstr "Въведете валидна дата/час. " + +msgid "Enter a valid duration." +msgstr "Въведете валидна продължителност." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Броят на дните трябва да е между {min_days} и {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Няма изпратен файл. Проверете типа кодиране на формата. " + +msgid "No file was submitted." +msgstr "Няма изпратен файл." + +msgid "The submitted file is empty." +msgstr "Изпратеният файл е празен. " + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "Уверете се, това име е най-много %(max)d знака (то има %(length)d)." +msgstr[1] "" +"Уверете се, че това файлово име има най-много %(max)d знаци (има " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Моля, или пратете файл или маркирайте полето за изчистване, но не и двете." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Качете валидно изображение. Файлът, който сте качили или не е изображение, " +"или е повреден. " + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Направете валиден избор. %(value)s не е един от възможните избори." + +msgid "Enter a list of values." +msgstr "Въведете списък от стойности" + +msgid "Enter a complete value." +msgstr "Въведете пълна стойност." + +msgid "Enter a valid UUID." +msgstr "Въведете валиден UUID." + +msgid "Enter a valid JSON." +msgstr "Въведете валиден JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скрито поле %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm данните липсват или са променяни неправомерно. Липсващи " +"полета: %(field_names)s. Трябва да изпратите уведомление за бъг, ако този " +"проблем продължава." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Моля изпратете не повече от %d формуляр." +msgstr[1] "Моля изпратете не повече от %d формуляри." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Моля изпратете поне %d формуляр." +msgstr[1] "Моля изпратете поне %d формуляра." + +msgid "Order" +msgstr "Ред" + +msgid "Delete" +msgstr "Изтрий" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Моля, коригирайте дублираните данни за %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Моля, коригирайте дублираните данни за %(field)s, които трябва да са " +"уникални." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Моля, коригирайте дублиранитe данни за %(field_name)s , които трябва да са " +"уникални за %(lookup)s в %(date_field)s ." + +msgid "Please correct the duplicate values below." +msgstr "Моля, коригирайте повтарящите се стойности по-долу." + +msgid "The inline value did not match the parent instance." +msgstr "Стойността в реда не отговаря на родителската инстанция." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Направете валиден избор. Този не е един от възможните избори. " + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” не е валидна стойност." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s не може да се интерпретира в часова зона %(current_timezone)s; " +"вероятно стойността е нееднозначна или не съществува изобщо." + +msgid "Clear" +msgstr "Изчисти" + +msgid "Currently" +msgstr "Сега" + +msgid "Change" +msgstr "Промени" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "да,не,може би" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d, байт" +msgstr[1] "%(size)d байта" + +#, python-format +msgid "%s KB" +msgstr "%s KБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "след обяд" + +msgid "a.m." +msgstr "преди обяд" + +msgid "PM" +msgstr "след обяд" + +msgid "AM" +msgstr "преди обяд" + +msgid "midnight" +msgstr "полунощ" + +msgid "noon" +msgstr "обяд" + +msgid "Monday" +msgstr "понеделник" + +msgid "Tuesday" +msgstr "вторник" + +msgid "Wednesday" +msgstr "сряда" + +msgid "Thursday" +msgstr "четвъртък" + +msgid "Friday" +msgstr "петък" + +msgid "Saturday" +msgstr "събота" + +msgid "Sunday" +msgstr "неделя" + +msgid "Mon" +msgstr "Пон" + +msgid "Tue" +msgstr "Вт" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Чет" + +msgid "Fri" +msgstr "Пет" + +msgid "Sat" +msgstr "Съб" + +msgid "Sun" +msgstr "Нед" + +msgid "January" +msgstr "Януари" + +msgid "February" +msgstr "Февруари" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Юни" + +msgid "July" +msgstr "Юли" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Септември" + +msgid "October" +msgstr "Октомври" + +msgid "November" +msgstr "Ноември" + +msgid "December" +msgstr "Декември" + +msgid "jan" +msgstr "ян" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "юни" + +msgid "jul" +msgstr "юли" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сеп" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноем" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ян." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апр." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Юни" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Юли" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Септ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноем." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "Януари" + +msgctxt "alt. month" +msgid "February" +msgstr "Февруари" + +msgctxt "alt. month" +msgid "March" +msgstr "Март" + +msgctxt "alt. month" +msgid "April" +msgstr "Април" + +msgctxt "alt. month" +msgid "May" +msgstr "Май" + +msgctxt "alt. month" +msgid "June" +msgstr "Юни" + +msgctxt "alt. month" +msgid "July" +msgstr "Юли" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Септември" + +msgctxt "alt. month" +msgid "October" +msgstr "Октомври" + +msgctxt "alt. month" +msgid "November" +msgstr "Ноември" + +msgctxt "alt. month" +msgid "December" +msgstr "Декември" + +msgid "This is not a valid IPv6 address." +msgstr "Въведете валиден IPv6 адрес." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d година" +msgstr[1] "%(num)d години" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месец" +msgstr[1] "%(num)d месеца" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d седмица" +msgstr[1] "%(num)d седмици" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d ден" +msgstr[1] "%(num)d дни" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d час" +msgstr[1] "%(num)d часа" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минута" +msgstr[1] "%(num)d минути" + +msgid "Forbidden" +msgstr "Забранен" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF проверката се провали. Заявката прекратена." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Вие виждате това съобщение, защото този HTTPS сайт изисква да бъде изпратен " +"'Referer header' от вашият уеб браузър, но такъв не бе изпратен. Този " +"header е задължителен от съображения за сигурност, за да се гарантира, че " +"вашият браузър не е компрометиран от трети страни." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ако сте настроили вашия браузър да деактивира 'Referer' headers, моля да ги " +"активирате отново, поне за този сайт, или за HTTPS връзки, или за 'same-" +"origin' заявки." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ако използвате таг или " +"включвате “Referrer-Policy: no-referrer” header, моля премахнете ги. CSRF " +"защитата изисква “Referer” header, за да извърши стриктна проверка на " +"изпращача. Ако сте притеснени за поверителността, използвайте алтернативи " +"като за връзки към сайтове на трети страни." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Вие виждате това съобщение, защото този сайт изисква CSRF бисквитка, когато " +"се подават формуляри. Тази бисквитка е задължителна от съображения за " +"сигурност, за да се гарантира, че вашият браузър не е компрометиран от трети " +"страни." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ако сте конфигурирали браузъра си да забрани бисквитките, моля да ги " +"активирате отново, поне за този сайт, или за \"same-origin\" заявки." + +msgid "More information is available with DEBUG=True." +msgstr "Повече информация е на разположение с DEBUG=True." + +msgid "No year specified" +msgstr "Не е посочена година" + +msgid "Date out of range" +msgstr "Датата е в невалиден диапазон" + +msgid "No month specified" +msgstr "Не е посочен месец" + +msgid "No day specified" +msgstr "Не е посочен ден" + +msgid "No week specified" +msgstr "Не е посочена седмица" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Няма достъпни %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Бъдещo %(verbose_name_plural)s е недостъпно, тъй като %(class_name)s." +"allow_future е False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Невалидна текстова стойност на датата “%(datestr)s” при зададен формат " +"“%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Няма %(verbose_name)s, съвпадащи със заявката" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Страницата не е \"последна\", нито може да се преобразува в цяло число." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Невалидна страница (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Празен списък и \"%(class_name)s.allow_empty\" e False." + +msgid "Directory indexes are not allowed here." +msgstr "Тук не е позволено индексиране на директория." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" не съществува" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Индекс %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Инсталацията Ви заработи успешно! Поздравления!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Разгледайте release notes за Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Вие виждате тази страница, защото DEBUG=True е във вашия файл с настройки и не сте конфигурирали " +"никакви URL-и." + +msgid "Django Documentation" +msgstr "Django документация" + +msgid "Topics, references, & how-to’s" +msgstr "Теми, наръчници, & друга документация" + +msgid "Tutorial: A Polling App" +msgstr "Урок: Приложение за анкета" + +msgid "Get started with Django" +msgstr "Започнете с Django" + +msgid "Django Community" +msgstr "Django общност" + +msgid "Connect, get help, or contribute" +msgstr "Свържете се, получете помощ или допринесете" diff --git a/venv/Lib/site-packages/django/conf/locale/bg/__init__.py b/venv/Lib/site-packages/django/conf/locale/bg/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/bg/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bg/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3e91e347c6ed462f28dccdb1821074722c4e467 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lQo4S8d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04RJk%K!iX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/bg/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bg/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7439db96650f463d5242397eda6a569d36b762c7 GIT binary patch literal 361 zcmYjN!D_-l6x^6-ZLLsy?!l{2le?7C#TX+PBguNmvQ(1nDzPRj*+i&c(`!GY{ft6S zz4qFRr>=$84$Q#JcL*Q{*u+;^=Z(~(E>o5jf((B~Rf-t`EHK>DEWw{0%oYCc)agDQNe*gXLb6-smU9Pz+ z-}#^Y`u6wU``$di|Lz+DJ}*G;fKJ&X2u^ri5L~d2dV`?t%|S2=YzH;o2fhKk+~ZXq zuk-i`kDI{PGw)O2-+{OL_T9d{9o&=thd}Xr9Gn6^1@aes)3<*P?nV3GeEav{RN8+8 z5jB|dmLT9S*oViV;E~`v!ER9F10a7v!bAK&4DJhF2THD6K+W6gaXYAap9dw^PVgY` zE1=~438-~1`0?L>n*V!nKk$zrq6K>&VDm#zrfdf_Zx(nAcq%CV1K=CMAy9H$3Z4R9 z3BDVA9Gnfl0v-s?eyhp99DFtH^3H26MH`mG10??*ju1P`Ho8@M~T6V$vfgOdB}p!j?b>;zu~rSCy(z8iQLsP>Vd z<{t}+|M4DY`|)|8?6SzW&++Z|fZFduQ2rkT_XbP8e;ufG*Mg`Rd>qugaZvm1@Z(?b z?Z-Vn4N8vhfYR$ZkI(z@UxJeR*P!_S&bR;I$6o=p&mM0xKkg5z9fFegT_AtKNj$WE zDJXla02PPl`*t4GK0~0^m3{j%Q2x9MR6gAVP6KZN73WWbio2IV>HQ~A@p8byw(cD8 zO|)|!S9`n$l-@UkvdroD0|ESwSNz&dFO#F z2_jJQJ_Ksrb)e$*22lHb7Sy`W`|+I~zY0q4Z+Ltb)VzNI6&FAA_yWjZ@FEZGHwEUH zA~*t+{pNtqzo7IzAJqCjQ299E$1epX-{l@R`2Oob>2rhc{}gyW?X95ryaG!9-6?jm z`+=bLI|9_Yqe1C0!}rewwXO@){-=UkzueT$Ej9iY}d2`Y}B^Zmc}_$NR9 zro+ttM}e9*6V$phJzfB6-(gVkaHYo^K*h}#P<8SFQ0txmHUCGT>eNf1^nAtRZlSgJ z@VJ-9eLcR}M}qRtF`(=-0~G(0Je~|H?&p9SKMmCQd{A{~A$UILw$u7m#zDlXcNFr4S{10Fx<@g|Vv!2_V|^`P&68Wg`5KujCVIMVE}6x6z9Jk>l2{XZ3p=ap5n0>{C5x*!O2J4`U^qD<7J@MUjw32a2wbLei;;>mwf+j$Cy4x zgT3_61hxJ;Q0q4O@rS`nX+Q089?UMI{W#bSp4x7>9-K}4N$~yP>y9d8;|5T2-41HsuXubJR6HGYocZNMQ2Va~r+^;^Wrt0m__A9AAQ(}keg+d$>Vi=g&9<|NZ|4mh9o zxuE2^72F@Z3p@ba2}=HF!6(6AfEwS%rn1u)LCN!da26=#)PFLlI9vuQjz&T8xe1h= zw}Ilb16&P0>G2epX#VFw+3{Hrk%QlW%C93&HvWr2`9B8v3$Eosss>*LweBUb8=OKB z(0&U+?YA7%_)6bi4@$0$pzOcZ_kYdfk3p?}89V~~Z?G3Uc((1EfQrkzK-upZP<(y} zYTX||$^H6MY@c_52hpAlN}gWd9ssp&9VmG|4OYP&zI_AEJB{`hQ1e~@#eWLPCqDam zJQCFUnc&;O1-`!z+=F%nd?WZFPBlbz#s7NW{v;^=cY%tx`$4UL3e@_aftvp(Q2XwAn(6U2 zP-W=vwGo(49~_)cE-Yjaks15XYU1>+geA zNFPiQTn&91QtrJKdIzM>P0)MX8#;hP&?;z$?-TqS`WjS(E`=V4vd`yvxeU6`cYF%` zDYOid{$GTC0O|8VD0Oe#C&4qI!+rZL;OYMT0q|^SEA(04C%6Jy+0cHH_m4w_w);@( zgS(*x(7n)F=rL#s^kYc*ug^M2zWQhAF6ad4Jm@>n9njmLZm0)382SP<+2>dWmP1n^ z#ZNDE9ke@iBBakT(0cb~F*u+1pZWG0@H75humze2eGl3R>2nD*2t5S78_GT_{LA~m z=b_=>hhBhw2>lb(2I=zzbfJ6WtOjp@Mtyq*_)Ta# z^aW}+*J=Zrs34R0G-?s(B&`Hp(&`+S*P#>hv-p~N_5jFhhS@046ei(SB z-j8Y{)&tD>k# zqtF)>^HDK4eK^e*g45HeFW(Og#Km%61L5*vCX@z)(<=j&QaLz%ZJhQ+`HSfcx}(x1 zl{n~*3sG7riA#4}9Eb{xFXdHFQ%FDL0J z+vegmG44;}u$YtygF-TbI9M$14CYnJY&?G`$``^YmrLVPDaiDkUo2HvNiW(+l=RP;liHPCuSy?a142wGxJsEOggq=+2U4~ISesT z-*maRbs%o^PwU`B3!KXJi6et#N{ik}u`n9u@&oyDDXa%+-)PvcxRtp|!*LoF%L#9! zfdY0x+?Q6ObTn9?$|BpAM~CCCTB%X1y~JoCc8_p4Di88jbQ!;(ptvs%gu@9boCWNH zB#rX}#c)wP8n%f+m?MBwstZAiI4RXY>Enu7d$53vAz~M#c~LGxmNf5b#TmG*+0 zYj3!GQY;PThZ#w++7isQg!H8ZK1Q$Q?+lsX9>~vBD(w4+*&bJbuop zVlnb zCQmCrG+c0zL~Kw?7V?LyDoBu4_QVnUkg!e9A4!@d#F=xk_+uT#VONREKNj=iGc;)=d|Wo=2U4 z@UFBuFD@YF`Ee%uTy` z+pE^tfnN1yt!6g#W#zM>OImpmi@6{gPJ^g25aiu`jtYcxW<6ITvq}Uba z;5(2^T^0{>^Y2(v8p!85x+?>vj^3mzoZ7RrV_CeK8%9#>&^^2>JbuP;CwCloT*r)) z!WlEVPMGzs8GNQLj!NYYvZ+|&x{{<_;WCmwO~NG!hh1D^yvR8^5O?&((NI_Dzu1Ir zgXQvY*YxQlBO{$9iCB0 z*v9JE=IYpEp=)n;UAO4D^-g&CZ>H6;&s4`At&TB$^JKjxIBbHEdos6ig~r&2u^rX% z>vkQx*KNz{3D({1#t?CWF%$Rx*0E`PE3S^+>o(lxo|}W}7>w3CB|nx4@JMx>_ic<} zjeA@JUPy_o>~=p)u43E`+*cjD6P|QoPiFZkOs8wRoBt3`#K=-N^OZDft=_!ZT$2Wtw|rejpiur^X|3frpVGE_YR+G&|JYPxty z+$u4K#becR^ppy47{fW6?WY9ig{{Uf`%%G}Ytm(IUG^J8({lT@!STY6tp+t|kP!6wZ1z)*{aZ>^=ta2fd8Nm&E z%d?w>v-a88;B7OQc}N>N;UqQ2&!lvc)CL}MtLqWYo4HoYX|T_uVRdZG>F#1}d;@KQ z$97>r<8GOIo7Ax;C(N1gsC=uJ2gSERMbbg+sQ?%PpYzP*9^VjD$8L736pVK?s9g_o zlF|jIbiPq>gIi&?8J;S9?JRtiDHft*?4gNwNH&&9PIzE+S&;#BMsD-KM&pbdZ>$N# z6jOl8i2|~u@iOJj5V%VIWx2DM^x?(E9;Vky4a;FgjWh?`$pFgA55^Q_Z|2P;MaM|H&JpK|zhZBgOE?z-gbaH-5pH$hws+1p(I*h~Z@o7P;TVOM;s$sv+v8x1 ze4K;P+-xLwqqO(a#7gys7v_J2N zS~$Jx?8eK_mR<9)z7{z+;}L1xJuOr@>2xSEi?~u(Hb2YC34*do@~h=;J2QQGxAULK ze+;Iu+wNk-U!gFnT|(FxOR6+!BD=YFWaPHS0QQz#lGKmMvu;>?xok3QbymWUyQJ8% z%kQLO=Oa|tv3i3woSR!~44oA2;I`W$8<=mxT3PXnVIA;Kh^EM-F11Na>HS+&9czPE=@iqBus2~@4}3kvn^I^ z%-2o?F@|O*-49R^k?J8)>oQMZDqXLcg_xgo!c2VWB39)CIc3)hWIs+%(C)}d6h zJuCzznuKHq$2-qk`5x8q12$U`^a@hOaADKsz}D5&;0)rOdG0Rd?glkexz*Yd>#?P` z91Kh=vzBh2Ok@hCaK6~Z*lf_6Q^pIsWa)?wE(9nRFrioXH9|u5j5osC&6G4~#0^j! zY6HgZM%r8;%&WR;5rK%tLMLj2T($)=6ID%NW5KkwL132xO-m({ziB!C?3X2t#3K;a zRmV58yP20|JnD~Kg8<+0X1z#STy4lWE zL7gZ_GeK=I-b_+5vzO&FfrE?^iY}6raW*ERkVDyPQAe*%VA@0ke%7im8}uP*B@mJE zE-aNZmVAl;8t~t0mBWo_16M7^VaAp^&-@p7H_OC@so%?w)wn9+#@tTZrtx}T7K2&J zH3?c5#6pqaL27ojdZk0o=`NvKf2v`C^G6!F=XN$@t(~yeWyh0TIKf==IyO<-zS=^h zu`8Cb<8q=qh|Gdb8FXu%rI3SOl965{cvRCeg)FsPg554$()S* zziw-3VAaGD&yEnEdluD}z;r!UZLsPtW4?Oh76p9c-Od66no=sAW=vP+TSMiN?siLG4?>BP>HvbznWB=y@*7#3) zZGbn%ayPZ^gr&(t_-3*!3OwWDq3c4&b>P3kzsu=?5ptmCFmSiz}qZ@SP#r>*9 zbSpcUiBuLDc3V_}`=qsTc%lK>qhl1^^u3lhN{iID2HsZI!?ba^{*gT48u?s2w9E=% zJ=w@tERFg&3zKfNaTXAn?0zNN)Eb%7WkS?oUCkrtFus|&77>`0h_>Q7NqD1k_RVTc zUTJDK^0sWdwOyK*;7JHA5TP*oolj0C=y2Al=2`IAaKwjcZmZpKs4>?C^ z#NGOwTX7qHs9#z=6Z0g7GTRa73S_%@*rnXQfU$h1tIhaJ{)BhtXde{xvb9gA?e49% z2>D%D$$`vJvfQX0}zX)CE@f%hvc=1+GsiGqzPUpdv#jWU*-2nTtYWLK3eIb=pd^8g`iM(&fqC~PU1M}rd{eeW(_jm Zc-6zMRdX$C3fpOx1_0f7%l{e~{2x*1K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..b554f7a8f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,1218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# M Nasimul Haque , 2013 +# Tahmid Rafi , 2012-2013 +# Tahmid Rafi , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "আফ্রিকার অন্যতম সরকারি ভাষা" + +msgid "Arabic" +msgstr "আরবী" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "আজারবাইজানি" + +msgid "Bulgarian" +msgstr "বুলগেরিয়ান" + +msgid "Belarusian" +msgstr "বেলারুশীয়" + +msgid "Bengali" +msgstr "বাংলা" + +msgid "Breton" +msgstr "ব্রেটন" + +msgid "Bosnian" +msgstr "বসনিয়ান" + +msgid "Catalan" +msgstr "ক্যাটালান" + +msgid "Czech" +msgstr "চেক" + +msgid "Welsh" +msgstr "ওয়েল্স" + +msgid "Danish" +msgstr "ড্যানিশ" + +msgid "German" +msgstr "জার্মান" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "গ্রিক" + +msgid "English" +msgstr "ইংলিশ" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "বৃটিশ ইংলিশ" + +msgid "Esperanto" +msgstr "আন্তর্জাতিক ভাষা" + +msgid "Spanish" +msgstr "স্প্যানিশ" + +msgid "Argentinian Spanish" +msgstr "আর্জেন্টিনিয়ান স্প্যানিশ" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "মেক্সিকান স্প্যানিশ" + +msgid "Nicaraguan Spanish" +msgstr "নিকারাগুয়ান স্প্যানিশ" + +msgid "Venezuelan Spanish" +msgstr "ভেনেজুয়েলার স্প্যানিশ" + +msgid "Estonian" +msgstr "এস্তোনিয়ান" + +msgid "Basque" +msgstr "বাস্ক" + +msgid "Persian" +msgstr "ফারসি" + +msgid "Finnish" +msgstr "ফিনিশ" + +msgid "French" +msgstr "ফ্রেঞ্চ" + +msgid "Frisian" +msgstr "ফ্রিজ্ল্যানডের ভাষা" + +msgid "Irish" +msgstr "আইরিশ" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "গ্যালিসিয়ান" + +msgid "Hebrew" +msgstr "হিব্রু" + +msgid "Hindi" +msgstr "হিন্দী" + +msgid "Croatian" +msgstr "ক্রোয়েশিয়ান" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "হাঙ্গেরিয়ান" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "ইন্দোনেশিয়ান" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "আইসল্যান্ডিক" + +msgid "Italian" +msgstr "ইটালিয়ান" + +msgid "Japanese" +msgstr "জাপানিজ" + +msgid "Georgian" +msgstr "জর্জিয়ান" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "কাজাখ" + +msgid "Khmer" +msgstr "খমার" + +msgid "Kannada" +msgstr "কান্নাড়া" + +msgid "Korean" +msgstr "কোরিয়ান" + +msgid "Luxembourgish" +msgstr "লুক্সেমবার্গীয়" + +msgid "Lithuanian" +msgstr "লিথুয়ানিয়ান" + +msgid "Latvian" +msgstr "লাটভিয়ান" + +msgid "Macedonian" +msgstr "ম্যাসাডোনিয়ান" + +msgid "Malayalam" +msgstr "মালায়ালম" + +msgid "Mongolian" +msgstr "মঙ্গোলিয়ান" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "বার্মিজ" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "নেপালি" + +msgid "Dutch" +msgstr "ডাচ" + +msgid "Norwegian Nynorsk" +msgstr "নরওয়েজীয়ান নিনর্স্ক" + +msgid "Ossetic" +msgstr "অসেটিক" + +msgid "Punjabi" +msgstr "পাঞ্জাবী" + +msgid "Polish" +msgstr "পোলিশ" + +msgid "Portuguese" +msgstr "পর্তুগীজ" + +msgid "Brazilian Portuguese" +msgstr "ব্রাজিলিয়ান পর্তুগীজ" + +msgid "Romanian" +msgstr "রোমানিয়ান" + +msgid "Russian" +msgstr "রাশান" + +msgid "Slovak" +msgstr "স্লোভাক" + +msgid "Slovenian" +msgstr "স্লোভেনিয়ান" + +msgid "Albanian" +msgstr "আলবেনীয়ান" + +msgid "Serbian" +msgstr "সার্বিয়ান" + +msgid "Serbian Latin" +msgstr "সার্বিয়ান ল্যাটিন" + +msgid "Swedish" +msgstr "সুইডিশ" + +msgid "Swahili" +msgstr "সোয়াহিলি" + +msgid "Tamil" +msgstr "তামিল" + +msgid "Telugu" +msgstr "তেলেগু" + +msgid "Thai" +msgstr "থাই" + +msgid "Turkish" +msgstr "তুর্কি" + +msgid "Tatar" +msgstr "তাতারদেশীয়" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ইউক্রেনিয়ান" + +msgid "Urdu" +msgstr "উর্দু" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "ভিয়েতনামিজ" + +msgid "Simplified Chinese" +msgstr "সরলীকৃত চাইনীজ" + +msgid "Traditional Chinese" +msgstr "প্রচলিত চাইনীজ" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "একটি বৈধ মান দিন।" + +msgid "Enter a valid URL." +msgstr "বৈধ URL দিন" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "একটি বৈধ ইমেইল ঠিকানা লিখুন." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "একটি বৈধ IPv4 ঠিকানা দিন।" + +msgid "Enter a valid IPv6 address." +msgstr "একটি বৈধ IPv6 ঠিকানা টাইপ করুন।" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "একটি বৈধ IPv4 অথবা IPv6 ঠিকানা টাইপ করুন।" + +msgid "Enter only digits separated by commas." +msgstr "শুধুমাত্র কমা দিয়ে সংখ্যা দিন।" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "সংখ্যাটির মান %(limit_value)s হতে হবে (এটা এখন %(show_value)s আছে)।" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "সংখ্যাটির মান %(limit_value)s এর চেয়ে ছোট বা সমান হতে হবে।" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "সংখ্যাটির মান %(limit_value)s এর চেয়ে বড় বা সমান হতে হবে।" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "একটি সংখ্যা প্রবেশ করান।" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "এবং" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "এর মান null হতে পারবে না।" + +msgid "This field cannot be blank." +msgstr "এই ফিল্ডের মান ফাঁকা হতে পারে না" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s সহ %(model_name)s আরেকটি রয়েছে।" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ফিল্ডের ধরণ: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "বুলিয়ান (হয় True অথবা False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "স্ট্রিং (সর্বোচ্চ %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "কমা দিয়ে আলাদা করা ইন্টিজার" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "তারিখ (সময় বাদে)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "তারিখ (সময় সহ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "দশমিক সংখ্যা" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "ইমেইল ঠিকানা" + +msgid "File path" +msgstr "ফাইল পথ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "ফ্লোটিং পয়েন্ট সংখ্যা" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "ইন্টিজার" + +msgid "Big (8 byte) integer" +msgstr "বিগ (৮ বাইট) ইন্টিজার" + +msgid "IPv4 address" +msgstr "IPv4 ঠিকানা" + +msgid "IP address" +msgstr "আইপি ঠিকানা" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "বুলিয়ান (হয় True, False অথবা None)" + +msgid "Positive integer" +msgstr "পজিটিভ ইন্টিজার" + +msgid "Positive small integer" +msgstr "পজিটিভ স্মল ইন্টিজার" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "স্লাগ (সর্বোচ্চ %(max_length)s)" + +msgid "Small integer" +msgstr "স্মল ইন্টিজার" + +msgid "Text" +msgstr "টেক্সট" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "সময়" + +msgid "URL" +msgstr "ইউআরএল (URL)" + +msgid "Raw binary data" +msgstr "র বাইনারি ডাটা" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "ফাইল" + +msgid "Image" +msgstr "ইমেজ" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "ফরেন কি (টাইপ রিলেটেড ফিল্ড দ্বারা নির্ণীত হবে)" + +msgid "One-to-one relationship" +msgstr "ওয়ান-টু-ওয়ান রিলেশানশিপ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ম্যানি-টু-ম্যানি রিলেশানশিপ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "এটি আবশ্যক।" + +msgid "Enter a whole number." +msgstr "একটি পূর্ণসংখ্যা দিন" + +msgid "Enter a valid date." +msgstr "বৈধ তারিখ দিন।" + +msgid "Enter a valid time." +msgstr "বৈধ সময় দিন।" + +msgid "Enter a valid date/time." +msgstr "বৈধ তারিখ/সময় দিন।" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "কোন ফাইল দেয়া হয়নি। ফর্মের এনকোডিং ঠিক আছে কিনা দেখুন।" + +msgid "No file was submitted." +msgstr "কোন ফাইল দেয়া হয়নি।" + +msgid "The submitted file is empty." +msgstr "ফাইলটি খালি।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"একটি ফাইল সাবমিট করুন অথবা ক্লিয়ার চেকবক্সটি চেক করে দিন, যে কোন একটি করুন।" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"সঠিক ছবি আপলোড করুন। যে ফাইলটি আপলোড করা হয়েছে তা হয় ছবি নয় অথবা নষ্ট হয়ে " +"যাওয়া ছবি।" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "%(value)s বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।" + +msgid "Enter a list of values." +msgstr "কয়েকটি মানের তালিকা দিন।" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ক্রম" + +msgid "Delete" +msgstr "মুছুন" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "এটি বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "পরিষ্কার করুন" + +msgid "Currently" +msgstr "এই মুহুর্তে" + +msgid "Change" +msgstr "পরিবর্তন" + +msgid "Unknown" +msgstr "অজানা" + +msgid "Yes" +msgstr "হ্যাঁ" + +msgid "No" +msgstr "না" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "হ্যাঁ,না,হয়তো" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d বাইট" +msgstr[1] "%(size)d বাইট" + +#, python-format +msgid "%s KB" +msgstr "%s কিলোবাইট" + +#, python-format +msgid "%s MB" +msgstr "%s মেগাবাইট" + +#, python-format +msgid "%s GB" +msgstr "%s গিগাবাইট" + +#, python-format +msgid "%s TB" +msgstr "%s টেরাবাইট" + +#, python-format +msgid "%s PB" +msgstr "%s পেটাবাইট" + +msgid "p.m." +msgstr "অপরাহ্ন" + +msgid "a.m." +msgstr "পূর্বাহ্ন" + +msgid "PM" +msgstr "অপরাহ্ন" + +msgid "AM" +msgstr "পূর্বাহ্ন" + +msgid "midnight" +msgstr "মধ্যরাত" + +msgid "noon" +msgstr "দুপুর" + +msgid "Monday" +msgstr "সোমবার" + +msgid "Tuesday" +msgstr "মঙ্গলবার" + +msgid "Wednesday" +msgstr "বুধবার" + +msgid "Thursday" +msgstr "বৃহস্পতিবার" + +msgid "Friday" +msgstr "শুক্রবার" + +msgid "Saturday" +msgstr "শনিবার" + +msgid "Sunday" +msgstr "রবিবার" + +msgid "Mon" +msgstr "সোম" + +msgid "Tue" +msgstr "মঙ্গল" + +msgid "Wed" +msgstr "বুধ" + +msgid "Thu" +msgstr "বৃহঃ" + +msgid "Fri" +msgstr "শুক্র" + +msgid "Sat" +msgstr "শনি" + +msgid "Sun" +msgstr "রবি" + +msgid "January" +msgstr "জানুয়ারি" + +msgid "February" +msgstr "ফেব্রুয়ারি" + +msgid "March" +msgstr "মার্চ" + +msgid "April" +msgstr "এপ্রিল" + +msgid "May" +msgstr "মে" + +msgid "June" +msgstr "জুন" + +msgid "July" +msgstr "জুলাই" + +msgid "August" +msgstr "আগস্ট" + +msgid "September" +msgstr "সেপ্টেম্বর" + +msgid "October" +msgstr "অক্টোবর" + +msgid "November" +msgstr "নভেম্বর" + +msgid "December" +msgstr "ডিসেম্বর" + +msgid "jan" +msgstr "জান." + +msgid "feb" +msgstr "ফেব." + +msgid "mar" +msgstr "মার্চ" + +msgid "apr" +msgstr "এপ্রি." + +msgid "may" +msgstr "মে" + +msgid "jun" +msgstr "জুন" + +msgid "jul" +msgstr "জুল." + +msgid "aug" +msgstr "আগ." + +msgid "sep" +msgstr "সেপ্টে." + +msgid "oct" +msgstr "অক্টো." + +msgid "nov" +msgstr "নভে." + +msgid "dec" +msgstr "ডিসে." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "জানু." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ফেব্রু." + +msgctxt "abbrev. month" +msgid "March" +msgstr "মার্চ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "এপ্রিল" + +msgctxt "abbrev. month" +msgid "May" +msgstr "মে" + +msgctxt "abbrev. month" +msgid "June" +msgstr "জুন" + +msgctxt "abbrev. month" +msgid "July" +msgstr "জুলাই" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "আগ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "সেপ্ট." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "অক্টো." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "নভে." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ডিসে." + +msgctxt "alt. month" +msgid "January" +msgstr "জানুয়ারি" + +msgctxt "alt. month" +msgid "February" +msgstr "ফেব্রুয়ারি" + +msgctxt "alt. month" +msgid "March" +msgstr "মার্চ" + +msgctxt "alt. month" +msgid "April" +msgstr "এপ্রিল" + +msgctxt "alt. month" +msgid "May" +msgstr "মে" + +msgctxt "alt. month" +msgid "June" +msgstr "জুন" + +msgctxt "alt. month" +msgid "July" +msgstr "জুলাই" + +msgctxt "alt. month" +msgid "August" +msgstr "আগস্ট" + +msgctxt "alt. month" +msgid "September" +msgstr "সেপ্টেম্বর" + +msgctxt "alt. month" +msgid "October" +msgstr "অক্টোবর" + +msgctxt "alt. month" +msgid "November" +msgstr "নভেম্বর" + +msgctxt "alt. month" +msgid "December" +msgstr "ডিসেম্বর" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "অথবা" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "0 মিনিট" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "কোন বছর উল্লেখ করা হয়নি" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "কোন মাস উল্লেখ করা হয়নি" + +msgid "No day specified" +msgstr "কোন দিন উল্লেখ করা হয়নি" + +msgid "No week specified" +msgstr "কোন সপ্তাহ উল্লেখ করা হয়নি" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "কোন %(verbose_name_plural)s নেই" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "কুয়েরি ম্যাচ করে এমন কোন %(verbose_name)s পাওয়া যায় নি" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "ডিরেক্টরি ইনডেক্স অনুমোদিত নয়" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s এর ইনডেক্স" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/bn/__init__.py b/venv/Lib/site-packages/django/conf/locale/bn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/bn/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bn/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae74b961e2eaae7b1b3478740c7b7c8d439b0578 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lQl5T%d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04ZuT(f|Me literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/bn/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bn/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d97399f070e2feba1d81cf875630f533ce8f1d7 GIT binary patch literal 617 zcmZva!ET!{9L6!2geFThdf0Kwg+rvK+@oq5Dlnpz5CPGIg@y=r5ov%5lS<`rdh2`a zDJt!>)1*B?57P`?vR0ZUfBycz&wpF8T#iNqj*VYmzpuXu9QUIwUJjlWAK9emOfZKy z3=qIP;<11P3=za45>pQM?g8rIK9*7*_3;rNuvNlCbcEla0UmkWv0wDyD TXOpP}`92TeZ(eK_LJ9lkd<{=Y91^&szb%235Y_vpnyq@Hoc> zjwd_zIGzUgquwgV7r}!_55NQA5L7$c;M3p*@CZ2S$|qd@W$>BgUk(q3*Sh@c;e65` zhN$e_3Q^JfJbXU<0Xz{t?8=XRc2RyjRDY*J4RIBeUPDmroa?w9s$K<3&j=n4Gx!|% zdZ=-{7wY{FLDjnj>b+axGvMc-#`SHe`ag$D2;`sl1^#GVe+*H@dlaht zu%nClIsr0;-U_%7ZiE_d4mF-j9j}1TBmGvmKfDR5-p8TF@mZ*LzU=bvf!(CJW1-SM)O(BIOW_iz{@&ntHB`OppyvJkE`5Vbe-x_!PeR$r=i$@g*IoYIQ2p(O zdjEc?@jnPve;$*l{ttz+yJthydx6XEa9j$d*9xd{_c^Y0%9EN)Tr7rz)S6+eY zFNRw8mP=m&rT^8CDe~S8rO&6J+W8!m{$GOX|7%d||6P~A8>-*?q1t)Kr5}N^gU6uu z=iw~=Vt6Ffe(8g<+cBv5n1CzcRZ#EU0ksc);`m#~r?B|a;|M4{kAXnYKfok^(NY~!=kR|ZG45iO~ z5EJ$uhnoLmjxYLO1~o6ILbZ1m)IMMB%3lJd*9DGcmtTj{qX{)n6R!MK@I2C2LbZ1v z)O`I4YJL6!HSVXqpm=XS)cB5s%0C9`z2`&eaRSu)r#Y^7ywI`f_!`HzL%nwcls$gN z<$ud@w=4e>l${)OLQ(G+sP`5-z6h${5vcuBah!m9?{X-A{SK)2J_uF+cBu2_PB;(V z=lDy%OJQJ=X|I-WEb8!Df#X4+q-0FC~W8heUPoaJTYW-uV^&f`^z{{Z4^9rc)tDyY* zHShp`aY5i=foi`Os+~Tl_lBX?<3e~K zya=jZ3#$B8@BsKmcp$tQYTd4bbm83uRel%Ly#3UrAB58LVW{=}ZzwxBth31Xq4Zb? z)z1oe3ham4$Kz1-Uk%m%)o=v93--a^IW9Y?*q<4ce}5Cyd)Gtl>rX-Hd6!E+4mIB6 zPA=X%1!})E8FC&f5p!eE3|PzVurN4}#rL{jPu-|4X3O z^JP%;nnAUDF+32y8LoiuaOK~D^GM(A()T#t2e*;`091c{T}6L`Q0)x6^aW7mV^IA^ zt~`TJC;bYjefS2K|4yj>-sjTSL+N`H)OfxG)!w(@!SF7qao^|4e*-nHN1^IH?$QS^ zNz&_3sQja#^f}IPfh#{5>iy*|y%HWmdNox4TO2Qdn*TAV_AZ5b?{X;puY%I=ZBX|4 z9+!W!<0qi>xee<5FF>us9j^RdI7oUoWQx7TON#U0JSh7ZhXe3!F8xC&JNX0j;o(aQ zyITh3R|cT=?OG_kH@I{eO7GC6n=YNh^U1#iVxr#N@Re|0PjO#-HI$v)0HyzKsC9S% z%0B-Db)FrvtQhCXj>{caLCw=zsQ%Z(v*C;3T6itg{QS(7KL9oE-@`-UA*U4k_*kfV zJ&wKb1kwZW2v~tyw~OIn@O2QA@UDUCf0yG|pxXI5ls?~w8qbfR#&})A4Gkb^0V!|383w|3@x;FMI~+-7ft{D19Dre9YxP z^@W9g2SMp`BvifU!7@D2rLTlXkbVo)JbVDE-;Y4OcZ=igPrrPrN~--CMZ zZdZPf%fHX@SB?)k{sF4~BT()B#pOTdIPcVAJ`aTI=TMhE0!q)Lq4YSx@gyjHdtAB~ zs{KBw_SZnQb2e1HA(y`ms@{2y7di$|>uFrN<`_GsjuVa-L+N#?G5ut|2`;tz22oi0d@ZV8u=lj-x_4Ked2t9uW`@6hu0xB9^|#i)ySF1%%AM9{kxKf3FN!Tmys7B`h5iHw@;q;uTX2F`5r*-L@q;c zZFX+I0=p6Yb|SyEPsJbY@z1+-CmeLoUw1qUhRDAotB_j|?N|LigJ^GFtc3fW==d}E z4kST(kxLN$Mv+h3C(a=FJ>(^beE$uIe)1#weGoYZS&v+R==U!L?B9F%`yAw#$cvDh zkT)X#fwX`7@gTo?FY*Y|M6N=9fav#1qz`$Y67F{-EW77V!H3-Qq~kxqcOg4mx{XEd zVF;e&o}cD;sH1R#d%hl?i)=*x1k-D1U;}v&IU5;AK7edO-id5SeB?*S zmylDDUm+Wi!;v>5-hz%sTsHOXQP41*sXq~BRX?kSslT9OEHw4<_IgkZKqGgUIV^CSl#{OM+533MwYbLKXPKO)8{SuP@E=#MaC!d762B{7Hhks;r4Bbz7xn zl2Q=v;03QgNH5Bb*Kg`UlBasF-$WJad;MX>?^t1V@AShcGZm9~{c&73G}W<&Sulw| zlH|sZ6Mt<`Pfh1uix(G#syzF<%ZygN)x|unrn=uzEOyAkli$vW^UTkRJTqznU&3VZh z+;~uDx~=8a!$z2Gw;5PoN0=4aX*Hf`=XQ3}$X;HqV5J#rmoal%6?0LJ=2?tA&uVoa zuh-G;NxiE+0)I4aG&LE%)m3d4`B-A+$74k{o28v!%;0pI*TS+txOseedusMt#yF^R z>J!x2XW7;*=ge)g%mnQ%Z;6(DZh@J(ZgUIW#+jSFw|3@C&_tE3<_xO+dK}d!{c>0d zv(%rq>C&WTxe;g<)22y+D2sVwAIZMgno^Pn$)vYd&Pr3BO*T#Ml=o7qGo`d{>>s}w zWL2Ib>rU3zwN0Xm-;5bb+rHPvNhvIs4XwwC2`iDm!A$xcYRWIO*hwRdux=Dfa4gz) z)>C$RYuRd;`r0IvlmoO%LhE+c=J+jxR^vFQI5pPYZg19eoEH{uH_bR3Bq%W}B{Lf2 zscMhbgEV!nx!dll?PEntY!mC1y1jLn(5R+jor#l5@sKo>PK>E}XEQ-&!aJKi8hU5v zct7iC1~<2j$(w0?-ry)hqUxwOSdP8HMu7Jj)b`fYF6bz?_dIh-HXhFoZ_qhVF{v}5 zdEgB)^r|~)XI)7B8QEkTv&-^c7nLu{<9j4@2vp9t6@c?mCx`E~Cj+aIW! z(VFcOyNt_L0U2=|+03yxY1nrgam1-VtCtCEXLimcN6@UCWWvbY{Ed@QoTN3B7%z^C zO`HlkHa0~@tALRd8>PJno076h)6`_x+2$c{vq`KOZRVK6?nh(JtWi!OCaat`F>f7C zc&&ixOqk*W>Fhk(!Bx!L60?)E#kS8z?ie<8tyZAJ zj>BxU8i%8%TU$W~x@MqoaIypWXQpS$!d-2A`#xG3sRo&=^kmyO zSM3|>a7H(yz78DP%Mxw6eKnAy4(>s7I1yC2EkaY)VhvBq2h$QxXe4NGDIUT66K}+z zP!4ux9#a$QPsW*6(XNTIAdEEEY_~M8XX%X6;^LtxoW9}oP;RE(NMTgeFpXw5*-atO z)@FVDqK+u`Sc%i2wvVzXuh(Z4@qWVni!%csHBv?IYM!JT?+7;yZzKuI*kK%TL2IwY z2-kI_sFWu)O$JvOZ)>@cCz-dkmM})G>ei?h#S^f}8D5^UKJKX%j86lzdt@@seOw4t zIHu(_-A=M6ZsgnQx+dx>mn1p1!!6pj;cZRIxwp+krj_eVocadY7Me_7OIXgixMTz? z(xA>Yb+kQ?bq~66tU-yBcf8xT-gW=t(`HUyUYT2stM=S1t~hhEI8FD+(s??&d3(Cf z&MMBmxp{M6#FNi$9-lrpYuGfESI_1QaYjb*kv5|W!z(uDjJ&BU+>E^Tbzx?f9pH51 z#ptHfZfG+z7}s=i>Uf%w*FLFcWNB1R#i;BB&BP1xidQzH-k2$QJFvVRc^!$o2K%wW zvNytV6jrL47sc$>C?5CX(aehzuPH0wBI`|>ba50frgF)6yDz)m+nmHZ@R?nM<*scy z`{JnAFVl707PWU$%5vPgf8B zR`|<$dV5Ykc`3j7=LBii#m0(KZl-b4%Qq~~;TRXVes=H~XHrAgvx?~&F+ro(FFr~A zj%t=QdzUPkn3(A1i@JEFn~V37La#R12=?tIrDRFx{Gq|2HPa*L>0Ua2058P%X4i(LwPL!S`WiDy*BW<2>GfBX!fZ;*UcZ#g-)!&6UEIbS zX|Ep@*XDH93s?HZHR13@I zwlF8-v^nY1NuTBSOt)}~f5|1j^jWoP`Sj!IGn+lbM_XHqho%0Re$SlZ(_C>;dfJ@Q z(`S{QPU%_xGAW=DFVzHa=TOV~X;zl1#wmWUzr1thd}1K2MZRhICQtp*Mb$WHRqb=G zyVa~{P=${zzUs-g=Ri9a#Kn3S|Is!T0g7w5&HrEWiQ`4y5H}SL?>-wcicF;l8NoI9 z*dk&?f-|@h@m*Q*`w|9*@?jJdF(Xxt2^b9raf|o;J`y%?X~&A} zlR`y2^y#aHYg{Se{2*v#hpTW%#`E~+|<+ekABE~tzi1J$@;%lLRtGn#g@Ci6ylLPOTZV}|TARpW79 zwyj{yvjRbW2Yz*Gug89cvs?t-*DRkjSo^_h>fgVmqQsl$PwhY^J`&a_{l79pRLH@1X~6 z@9~P8sXg*%HB}5oD~@s3OyqN#+O0Ha3u*r_=hIOtZ6k%LWUGs+6J|W&t9KYZWJTC0 z8v>8qcC9W@wZ-6rQlT{&WK)- zoZk9_n`b4)mwSU;e5`*^{A##naycGsjOOq)dy8O63+LjAY0U^=P2j@{hwP$QR9t5w z22MCjVJwm{!5l;Lt*RL(U}$4mS>V+a%bFF+qOyWnLYNUa(nDTLxoRquMQSLhDUxNM z+JUUqxZg&T&nLegnzSp z6fNz`V(i;EOr4&5PfT|!D@X&`EbhW~GNZ5-aF;Chg)M5osKaEBGQaJ6QL5MvCaT3{ z?di7fFLu~oI&bXR_mpD%2UrzntP#vmZK}A$XXiMU;VQ%ltIu)Yj+d>@v2ToLdXe)e zh>Atl6Ca=~?Iy;_Dy{1tB9gI4S)i!^Srqs!8&PiA z!4mam7qj1I91?yRBlqJjb=m#o+kVnj+wro%=c-@BpxUZPBkO_7R(<}r#_CWkNuB?c zw6-=CN1Gc&v$LQ!8FB}|Uw8Fm)2W74; zlH@FN2ZObMR;l77;K2G!0DAr zBTcb&KXL*^XiW_fW0N=LL9sRV4v}WQJ7&bzSW*qIyK`?dJMFMAR+dyfr3BshzmBNz z_V)6q2Aq<6?SuFo-|>>v#@?imZmB?rO)V&M>9(OavS_{tzQs9Cjqn>6PR3*-aD~s{ zG7#fwea@I>u!BN(W9@TSF9J*@o6p%VoAt3zYbeEA6;`E(LlKWzk9Bs+sI9?TXD08a z+j4RE&N#kxi?e=~g?bWIwip6xYQD}=g>Lh-?*iT4c|k16`5NM;!nYHPT9p~_-!yd& zxm+TrG(u#KX;ENqQ(kUxg2_h}!8smQW8J|xHwQLBRk!Bi^THm*ZNu(syJ8(4hMKgi zuMzGw#?DFL$BOrxI`S==hl z3y9s=?@GQRxwplHp*Qf=GN2n2i(&AGtcWgvE&b6G2W{cEDN?24`_q0}7N0!!WqZ|g zR|Q&_bwzMfINefl;j(+J8mK{OGOdX8kQ&lLN?0BAZEKP!Zh19sx>#e_a(a19<5d)R W(oJqMSj>D8cw&88#_R6x_WlaFsDy<8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b1a759bb --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,1297 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Ewen , 2021 +# Fulup , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Afrikaans" +msgstr "Afrikaneg" + +msgid "Arabic" +msgstr "Arabeg" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Astureg" + +msgid "Azerbaijani" +msgstr "Azeri" + +msgid "Bulgarian" +msgstr "Bulgareg" + +msgid "Belarusian" +msgstr "Belaruseg" + +msgid "Bengali" +msgstr "Bengaleg" + +msgid "Breton" +msgstr "Brezhoneg" + +msgid "Bosnian" +msgstr "Bosneg" + +msgid "Catalan" +msgstr "Katalaneg" + +msgid "Czech" +msgstr "Tchekeg" + +msgid "Welsh" +msgstr "Kembraeg" + +msgid "Danish" +msgstr "Daneg" + +msgid "German" +msgstr "Alamaneg" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Gresianeg" + +msgid "English" +msgstr "Saozneg" + +msgid "Australian English" +msgstr "Saozneg Aostralia" + +msgid "British English" +msgstr "Saozneg Breizh-Veur" + +msgid "Esperanto" +msgstr "Esperanteg" + +msgid "Spanish" +msgstr "Spagnoleg" + +msgid "Argentinian Spanish" +msgstr "Spagnoleg Arc'hantina" + +msgid "Colombian Spanish" +msgstr "Spagnoleg Kolombia" + +msgid "Mexican Spanish" +msgstr "Spagnoleg Mec'hiko" + +msgid "Nicaraguan Spanish" +msgstr "Spagnoleg Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Spagnoleg Venezuela" + +msgid "Estonian" +msgstr "Estoneg" + +msgid "Basque" +msgstr "Euskareg" + +msgid "Persian" +msgstr "Perseg" + +msgid "Finnish" +msgstr "Finneg" + +msgid "French" +msgstr "Galleg" + +msgid "Frisian" +msgstr "Frizeg" + +msgid "Irish" +msgstr "Iwerzhoneg" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galizeg" + +msgid "Hebrew" +msgstr "Hebraeg" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroateg" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Hungareg" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezeg" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeg" + +msgid "Italian" +msgstr "Italianeg" + +msgid "Japanese" +msgstr "Japaneg" + +msgid "Georgian" +msgstr "Jorjianeg" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "kazak" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannata" + +msgid "Korean" +msgstr "Koreaneg" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Luksembourgeg" + +msgid "Lithuanian" +msgstr "Lituaneg" + +msgid "Latvian" +msgstr "Latveg" + +msgid "Macedonian" +msgstr "Makedoneg" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongoleg" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Burmeg" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "nepaleg" + +msgid "Dutch" +msgstr "Nederlandeg" + +msgid "Norwegian Nynorsk" +msgstr "Norvegeg Nynorsk" + +msgid "Ossetic" +msgstr "Oseteg" + +msgid "Punjabi" +msgstr "Punjabeg" + +msgid "Polish" +msgstr "Poloneg" + +msgid "Portuguese" +msgstr "Portugaleg" + +msgid "Brazilian Portuguese" +msgstr "Portugaleg Brazil" + +msgid "Romanian" +msgstr "Roumaneg" + +msgid "Russian" +msgstr "Rusianeg" + +msgid "Slovak" +msgstr "Slovakeg" + +msgid "Slovenian" +msgstr "Sloveneg" + +msgid "Albanian" +msgstr "Albaneg" + +msgid "Serbian" +msgstr "Serbeg" + +msgid "Serbian Latin" +msgstr "Serbeg e lizherennoù latin" + +msgid "Swedish" +msgstr "Svedeg" + +msgid "Swahili" +msgstr "swahileg" + +msgid "Tamil" +msgstr "Tamileg" + +msgid "Telugu" +msgstr "Telougou" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turkeg" + +msgid "Tatar" +msgstr "tatar" + +msgid "Udmurt" +msgstr "Oudmourteg" + +msgid "Ukrainian" +msgstr "Ukraineg" + +msgid "Urdu" +msgstr "Ourdou" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnameg" + +msgid "Simplified Chinese" +msgstr "Sinaeg eeunaet" + +msgid "Traditional Chinese" +msgstr "Sinaeg hengounel" + +msgid "Messages" +msgstr "Kemennadenn" + +msgid "Site Maps" +msgstr "Tresoù al lec'hienn" + +msgid "Static Files" +msgstr "Restroù statek" + +msgid "Syndication" +msgstr "Sindikadur" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "An niver a bajenn mañ a zo bihanoc'h eget 1." + +msgid "That page contains no results" +msgstr "N'eus disoc'h er pajenn-mañ." + +msgid "Enter a valid value." +msgstr "Merkit un talvoud reizh" + +msgid "Enter a valid URL." +msgstr "Merkit un URL reizh" + +msgid "Enter a valid integer." +msgstr "Merkit un niver anterin reizh." + +msgid "Enter a valid email address." +msgstr "Merkit ur chomlec'h postel reizh" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Merkit ur chomlec'h IPv4 reizh." + +msgid "Enter a valid IPv6 address." +msgstr "Merkit ur chomlec'h IPv6 reizh." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Merkit ur chomlec'h IPv4 pe IPv6 reizh." + +msgid "Enter only digits separated by commas." +msgstr "Merkañ hepken sifroù dispartiet dre skejoù." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Bezit sur ez eo an talvoud-mañ %(limit_value)s (evit ar mare ez eo " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Gwiriit mat emañ an talvoud-mañ a-is pe par da %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Gwiriit mat emañ an talvoud-mañ a-us pe par da %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Enter a number." +msgstr "Merkit un niver." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ha" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "N'hall ket ar vaezienn chom goullo" + +msgid "This field cannot be blank." +msgstr "N'hall ket ar vaezienn chom goullo" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Bez' ez eus c'hoazh eus ur %(model_name)s gant ar %(field_label)s-mañ." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Seurt maezienn : %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boulean (gwir pe gaou)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "neudennad arouezennoù (betek %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Niveroù anterin dispartiet dre ur skej" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Deizad (hep eur)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Deizad (gant an eur)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Niver dekvedennel" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Chomlec'h postel" + +msgid "File path" +msgstr "Treug war-du ar restr" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Niver gant skej nij" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Anterin" + +msgid "Big (8 byte) integer" +msgstr "Anterin bras (8 okted)" + +msgid "Small integer" +msgstr "Niver anterin bihan" + +msgid "IPv4 address" +msgstr "Chomlec'h IPv4" + +msgid "IP address" +msgstr "Chomlec'h IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boulean (gwir pe gaou pe netra)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Niver anterin pozitivel" + +msgid "Positive small integer" +msgstr "Niver anterin bihan pozitivel" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (betek %(max_length)s arouez.)" + +msgid "Text" +msgstr "Testenn" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Eur" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Restr" + +msgid "Image" +msgstr "Skeudenn" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Alc'hwez estren (seurt termenet dre ar vaezienn liammet)" + +msgid "One-to-one relationship" +msgstr "Darempred unan-ouzh-unan" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Darempred lies-ouzh-lies" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Rekis eo leuniañ ar vaezienn." + +msgid "Enter a whole number." +msgstr "Merkit un niver anterin." + +msgid "Enter a valid date." +msgstr "Merkit un deiziad reizh" + +msgid "Enter a valid time." +msgstr "Merkit un eur reizh" + +msgid "Enter a valid date/time." +msgstr "Merkit un eur/deiziad reizh" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "N'eus ket kaset restr ebet. Gwiriit ar seurt enkodañ evit ar restr" + +msgid "No file was submitted." +msgstr "N'eus bet kaset restr ebet." + +msgid "The submitted file is empty." +msgstr "Goullo eo ar restr kaset." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Kasit ur restr pe askit al log riñsañ; an eil pe egile" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Enpozhiit ur skeudenn reizh. Ar seurt bet enporzhiet ganeoc'h a oa foeltret " +"pe ne oa ket ur skeudenn" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Dizuit un dibab reizh. %(value)s n'emañ ket e-touez an dibaboù posupl." + +msgid "Enter a list of values." +msgstr "Merkit ur roll talvoudoù" + +msgid "Enter a complete value." +msgstr "Merkañ un talvoud klok" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Order" +msgstr "Urzh" + +msgid "Delete" +msgstr "Diverkañ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Reizhit ar roadennoù e doubl e %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Reizhit ar roadennoù e doubl e %(field)s, na zle bezañ enni nemet talvoudoù " +"dzho o-unan." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Reizhit ar roadennoù e doubl e %(field_name)s a rank bezañ ennañ talvodoù en " +"o-unan evit lodenn %(lookup)s %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Reizhañ ar roadennoù e doubl zo a-is" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Diuzit un dibab reizh. N'emañ ket an dibab-mañ e-touez ar re bosupl." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Riñsañ" + +msgid "Currently" +msgstr "Evit ar mare" + +msgid "Change" +msgstr "Kemmañ" + +msgid "Unknown" +msgstr "Dianav" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Ket" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ya,ket,marteze" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d okted" +msgstr[1] "%(size)d okted" +msgstr[2] "%(size)d okted" +msgstr[3] "%(size)d okted" +msgstr[4] "%(size)d okted" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "g.m." + +msgid "a.m." +msgstr "mintin" + +msgid "PM" +msgstr "G.M." + +msgid "AM" +msgstr "Mintin" + +msgid "midnight" +msgstr "hanternoz" + +msgid "noon" +msgstr "kreisteiz" + +msgid "Monday" +msgstr "Lun" + +msgid "Tuesday" +msgstr "Meurzh" + +msgid "Wednesday" +msgstr "Merc'her" + +msgid "Thursday" +msgstr "Yaou" + +msgid "Friday" +msgstr "Gwener" + +msgid "Saturday" +msgstr "Sadorn" + +msgid "Sunday" +msgstr "Sul" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Meu" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Yao" + +msgid "Fri" +msgstr "Gwe" + +msgid "Sat" +msgstr "Sad" + +msgid "Sun" +msgstr "Sul" + +msgid "January" +msgstr "Genver" + +msgid "February" +msgstr "C'hwevrer" + +msgid "March" +msgstr "Meurzh" + +msgid "April" +msgstr "Ebrel" + +msgid "May" +msgstr "Mae" + +msgid "June" +msgstr "Mezheven" + +msgid "July" +msgstr "Gouere" + +msgid "August" +msgstr "Eost" + +msgid "September" +msgstr "Gwengolo" + +msgid "October" +msgstr "Here" + +msgid "November" +msgstr "Du" + +msgid "December" +msgstr "Kerzu" + +msgid "jan" +msgstr "Gen" + +msgid "feb" +msgstr "C'hwe" + +msgid "mar" +msgstr "Meu" + +msgid "apr" +msgstr "Ebr" + +msgid "may" +msgstr "Mae" + +msgid "jun" +msgstr "Mez" + +msgid "jul" +msgstr "Gou" + +msgid "aug" +msgstr "Eos" + +msgid "sep" +msgstr "Gwe" + +msgid "oct" +msgstr "Her" + +msgid "nov" +msgstr "Du" + +msgid "dec" +msgstr "Kzu" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Gen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "C'hwe." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Meu." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Ebr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mae" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Mez." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Gou." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Eos." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Gwe." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Her." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Du" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Kzu" + +msgctxt "alt. month" +msgid "January" +msgstr "Genver" + +msgctxt "alt. month" +msgid "February" +msgstr "C'hwevrer" + +msgctxt "alt. month" +msgid "March" +msgstr "Meurzh" + +msgctxt "alt. month" +msgid "April" +msgstr "Ebrel" + +msgctxt "alt. month" +msgid "May" +msgstr "Mae" + +msgctxt "alt. month" +msgid "June" +msgstr "Mezheven" + +msgctxt "alt. month" +msgid "July" +msgstr "Gouere" + +msgctxt "alt. month" +msgid "August" +msgstr "Eost" + +msgctxt "alt. month" +msgid "September" +msgstr "Gwengolo" + +msgctxt "alt. month" +msgid "October" +msgstr "Here" + +msgctxt "alt. month" +msgid "November" +msgstr "Du" + +msgctxt "alt. month" +msgid "December" +msgstr "Kerzu" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "pe" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Forbidden" +msgstr "Difennet" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "N'eus bet resisaet bloavezh ebet" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "N'eus bet resisaet miz ebet" + +msgid "No day specified" +msgstr "N'eus bet resisaet deiz ebet" + +msgid "No week specified" +msgstr "N'eus bet resisaet sizhun ebet" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "N'eus %(verbose_name_plural)s ebet da gaout." + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"En dazont ne vo ket a %(verbose_name_plural)s rak faos eo %(class_name)s." +"allow_future." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" +"N'eus bet kavet traezenn %(verbose_name)s ebet o klotaén gant ar goulenn" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "N'haller ket diskwel endalc'had ar c'havlec'h-mañ." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Meneger %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..064cc5d8e1e13fe22f215d03fbb7f564f47ff18c GIT binary patch literal 10824 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, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "arapski" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azerbejdžanski" + +msgid "Bulgarian" +msgstr "bugarski" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "bengalski" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "bosanski" + +msgid "Catalan" +msgstr "katalonski" + +msgid "Czech" +msgstr "češki" + +msgid "Welsh" +msgstr "velški" + +msgid "Danish" +msgstr "danski" + +msgid "German" +msgstr "njemački" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "grčki" + +msgid "English" +msgstr "engleski" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Britanski engleski" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "španski" + +msgid "Argentinian Spanish" +msgstr "Argentinski španski" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Meksički španski" + +msgid "Nicaraguan Spanish" +msgstr "Nikuaraganski španski" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "estonski" + +msgid "Basque" +msgstr "baskijski" + +msgid "Persian" +msgstr "persijski" + +msgid "Finnish" +msgstr "finski" + +msgid "French" +msgstr "francuski" + +msgid "Frisian" +msgstr "frišanski" + +msgid "Irish" +msgstr "irski" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "galski" + +msgid "Hebrew" +msgstr "hebrejski" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "hrvatski" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "mađarski" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Indonežanski" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "islandski" + +msgid "Italian" +msgstr "italijanski" + +msgid "Japanese" +msgstr "japanski" + +msgid "Georgian" +msgstr "gruzijski" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "kambođanski" + +msgid "Kannada" +msgstr "kanada" + +msgid "Korean" +msgstr "korejski" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "litvanski" + +msgid "Latvian" +msgstr "latvijski" + +msgid "Macedonian" +msgstr "makedonski" + +msgid "Malayalam" +msgstr "Malajalamski" + +msgid "Mongolian" +msgstr "Mongolski" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "holandski" + +msgid "Norwegian Nynorsk" +msgstr "Norveški novi" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Pandžabi" + +msgid "Polish" +msgstr "poljski" + +msgid "Portuguese" +msgstr "portugalski" + +msgid "Brazilian Portuguese" +msgstr "brazilski portugalski" + +msgid "Romanian" +msgstr "rumunski" + +msgid "Russian" +msgstr "ruski" + +msgid "Slovak" +msgstr "slovački" + +msgid "Slovenian" +msgstr "slovenački" + +msgid "Albanian" +msgstr "albanski" + +msgid "Serbian" +msgstr "srpski" + +msgid "Serbian Latin" +msgstr "srpski latinski" + +msgid "Swedish" +msgstr "švedski" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "tamilski" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "tajlandski" + +msgid "Turkish" +msgstr "turski" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ukrajinski" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "vijetnamežanski" + +msgid "Simplified Chinese" +msgstr "novokineski" + +msgid "Traditional Chinese" +msgstr "starokineski" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Unesite ispravnu vrijednost." + +msgid "Enter a valid URL." +msgstr "Unesite ispravan URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Unesite samo brojke razdvojene zapetama." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Pobrinite se da je ova vrijednost %(limit_value)s (trenutno je " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ova vrijednost mora da bude manja ili jednaka %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ova vrijednost mora biti veća ili jednaka %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Enter a number." +msgstr "Unesite broj." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ovo polje ne može ostati prazno." + +msgid "This field cannot be blank." +msgstr "Ovo polje ne može biti prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s sa ovom vrijednošću %(field_label)s već postoji." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Bulova vrijednost (True ili False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (najviše %(max_length)s znakova)" + +msgid "Comma-separated integers" +msgstr "Cijeli brojevi razdvojeni zapetama" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (bez vremena)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (sa vremenom)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimalni broj" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Email adresa" + +msgid "File path" +msgstr "Putanja fajla" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Broj sa pokrenom zapetom" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Cijeo broj" + +msgid "Big (8 byte) integer" +msgstr "Big (8 bajtni) integer" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Bulova vrijednost (True, False ili None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Vrijeme" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Strani ključ (tip određen povezanim poljem)" + +msgid "One-to-one relationship" +msgstr "Jedan-na-jedan odnos" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Više-na-više odsnos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ovo polje se mora popuniti." + +msgid "Enter a whole number." +msgstr "Unesite cijeo broj." + +msgid "Enter a valid date." +msgstr "Unesite ispravan datum." + +msgid "Enter a valid time." +msgstr "Unesite ispravno vrijeme" + +msgid "Enter a valid date/time." +msgstr "Unesite ispravan datum/vrijeme." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Fajl nije prebačen. Provjerite tip enkodiranja formulara." + +msgid "No file was submitted." +msgstr "Fajl nije prebačen." + +msgid "The submitted file is empty." +msgstr "Prebačen fajl je prazan." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je " +"oštećen." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"%(value)s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih." + +msgid "Enter a list of values." +msgstr "Unesite listu vrijednosti." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Order" +msgstr "Redoslijed" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ispravite dupli sadržaj za polja: %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ispravite dupli sadržaj za polja: %(field)s, koji mora da bude jedinstven." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ispravite dupli sadržaj za polja: %(field_name)s, koji mora da bude " +"jedinstven za %(lookup)s u %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ispravite duple vrijednosti dole." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Odabrana vrijednost nije među ponuđenima. Odaberite jednu od ponuđenih." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Očisti" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Izmjeni" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "da,ne,možda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "po p." + +msgid "a.m." +msgstr "prije p." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "ponoć" + +msgid "noon" +msgstr "podne" + +msgid "Monday" +msgstr "ponedjeljak" + +msgid "Tuesday" +msgstr "utorak" + +msgid "Wednesday" +msgstr "srijeda" + +msgid "Thursday" +msgstr "četvrtak" + +msgid "Friday" +msgstr "petak" + +msgid "Saturday" +msgstr "subota" + +msgid "Sunday" +msgstr "nedjelja" + +msgid "Mon" +msgstr "pon." + +msgid "Tue" +msgstr "uto." + +msgid "Wed" +msgstr "sri." + +msgid "Thu" +msgstr "čet." + +msgid "Fri" +msgstr "pet." + +msgid "Sat" +msgstr "sub." + +msgid "Sun" +msgstr "ned." + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "septembar" + +msgid "October" +msgstr "oktobar" + +msgid "November" +msgstr "novembar" + +msgid "December" +msgstr "decembar" + +msgid "jan" +msgstr "jan." + +msgid "feb" +msgstr "feb." + +msgid "mar" +msgstr "mar." + +msgid "apr" +msgstr "apr." + +msgid "may" +msgstr "maj." + +msgid "jun" +msgstr "jun." + +msgid "jul" +msgstr "jul." + +msgid "aug" +msgstr "aug." + +msgid "sep" +msgstr "sep." + +msgid "oct" +msgstr "okt." + +msgid "nov" +msgstr "nov." + +msgid "dec" +msgstr "dec." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "august" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "septembar" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "oktobar" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "novembar" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "decembar" + +msgctxt "alt. month" +msgid "January" +msgstr "januar" + +msgctxt "alt. month" +msgid "February" +msgstr "februar" + +msgctxt "alt. month" +msgid "March" +msgstr "mart" + +msgctxt "alt. month" +msgid "April" +msgstr "april" + +msgctxt "alt. month" +msgid "May" +msgstr "maj" + +msgctxt "alt. month" +msgid "June" +msgstr "juni" + +msgctxt "alt. month" +msgid "July" +msgstr "juli" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "septembar" + +msgctxt "alt. month" +msgid "October" +msgstr "oktobar" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembar" + +msgctxt "alt. month" +msgid "December" +msgstr "decembar" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ili" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Godina nije naznačena" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Mjesec nije naznačen" + +msgid "No day specified" +msgstr "Dan nije naznačen" + +msgid "No week specified" +msgstr "Sedmica nije naznačena" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/bs/__init__.py b/venv/Lib/site-packages/django/conf/locale/bs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/bs/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bs/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f652adf877bada6009bbf669f040c4c72bfe9a88 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lQn7w~d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04fwT*8l(j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/bs/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/bs/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95a975f428e465a2e21a45ae95e14a6cbd5e4557 GIT binary patch literal 430 zcmYk2!ES;;5QafevBp;W1RQ!Xsc<(bfS0qDV>fDqgQ!JazS|>5HbgKC<@*RVX>#$_VO7PKwby z&(=6D;2x)YI7=c(k^+x*Vf-4dFo9?trmIYjvvetMvN+seIU@2h%eP@cq}|&=c-UsB T+~CLh=cG@C=Xv&=9fAD;PHS>Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/bs/formats.py b/venv/Lib/site-packages/django/conf/locale/bs/formats.py new file mode 100644 index 000000000..a15e7099e --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/bs/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. N Y." +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j. N. Y. G:i T" +YEAR_MONTH_FORMAT = "F Y." +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "Y M j" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca8826b7227f610561edac5101493fc4c6af2db1 GIT binary patch literal 27427 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..d315fd502 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1329 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012,2015-2017,2021 +# Carles Barrobés , 2011-2012,2014,2020 +# duub qnnp, 2015 +# Gil Obradors Via , 2019 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +# Manuel Miranda , 2015 +# Mariusz Felisiak , 2021 +# Roger Pons , 2015 +# Santiago Lamora , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:29+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikans" + +msgid "Arabic" +msgstr "àrab" + +msgid "Algerian Arabic" +msgstr "àrab argelià" + +msgid "Asturian" +msgstr "Asturià" + +msgid "Azerbaijani" +msgstr "azerbaijanès" + +msgid "Bulgarian" +msgstr "búlgar" + +msgid "Belarusian" +msgstr "Bielorús" + +msgid "Bengali" +msgstr "bengalí" + +msgid "Breton" +msgstr "Bretó" + +msgid "Bosnian" +msgstr "bosnià" + +msgid "Catalan" +msgstr "català" + +msgid "Czech" +msgstr "txec" + +msgid "Welsh" +msgstr "gal·lès" + +msgid "Danish" +msgstr "danès" + +msgid "German" +msgstr "alemany" + +msgid "Lower Sorbian" +msgstr "Lower Sorbian" + +msgid "Greek" +msgstr "grec" + +msgid "English" +msgstr "anglès" + +msgid "Australian English" +msgstr "Anglès d'Austràlia" + +msgid "British English" +msgstr "anglès britànic" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "castellà" + +msgid "Argentinian Spanish" +msgstr "castellà d'Argentina" + +msgid "Colombian Spanish" +msgstr "castellà de Colombia" + +msgid "Mexican Spanish" +msgstr "castellà de Mèxic" + +msgid "Nicaraguan Spanish" +msgstr "castellà de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "castellà de Veneçuela" + +msgid "Estonian" +msgstr "estonià" + +msgid "Basque" +msgstr "èuscar" + +msgid "Persian" +msgstr "persa" + +msgid "Finnish" +msgstr "finlandès" + +msgid "French" +msgstr "francès" + +msgid "Frisian" +msgstr "frisi" + +msgid "Irish" +msgstr "irlandès" + +msgid "Scottish Gaelic" +msgstr "Gaèlic escocès" + +msgid "Galician" +msgstr "gallec" + +msgid "Hebrew" +msgstr "hebreu" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "croat" + +msgid "Upper Sorbian" +msgstr "Upper Sorbian" + +msgid "Hungarian" +msgstr "hongarès" + +msgid "Armenian" +msgstr "Armeni" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "indonesi" + +msgid "Igbo" +msgstr "lgbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "islandès" + +msgid "Italian" +msgstr "italià" + +msgid "Japanese" +msgstr "japonès" + +msgid "Georgian" +msgstr "georgià" + +msgid "Kabyle" +msgstr "Cabilenc" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "khmer" + +msgid "Kannada" +msgstr "kannarès" + +msgid "Korean" +msgstr "coreà" + +msgid "Kyrgyz" +msgstr "Kyrgyz" + +msgid "Luxembourgish" +msgstr "Luxemburguès" + +msgid "Lithuanian" +msgstr "lituà" + +msgid "Latvian" +msgstr "letó" + +msgid "Macedonian" +msgstr "macedoni" + +msgid "Malayalam" +msgstr "malaiàlam " + +msgid "Mongolian" +msgstr "mongol" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Burmès" + +msgid "Norwegian Bokmål" +msgstr "Bokmål noruec" + +msgid "Nepali" +msgstr "Nepalès" + +msgid "Dutch" +msgstr "holandès" + +msgid "Norwegian Nynorsk" +msgstr "noruec nynorsk" + +msgid "Ossetic" +msgstr "Ossètic" + +msgid "Punjabi" +msgstr "panjabi" + +msgid "Polish" +msgstr "polonès" + +msgid "Portuguese" +msgstr "portuguès" + +msgid "Brazilian Portuguese" +msgstr "portuguès de brasil" + +msgid "Romanian" +msgstr "romanès" + +msgid "Russian" +msgstr "rus" + +msgid "Slovak" +msgstr "eslovac" + +msgid "Slovenian" +msgstr "eslovè" + +msgid "Albanian" +msgstr "albanès" + +msgid "Serbian" +msgstr "serbi" + +msgid "Serbian Latin" +msgstr "serbi llatí" + +msgid "Swedish" +msgstr "suec" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "tàmil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "Tajik" + +msgid "Thai" +msgstr "tailandès" + +msgid "Turkmen" +msgstr "Turkmen" + +msgid "Turkish" +msgstr "turc" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "ucraïnès" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "Uzbek" + +msgid "Vietnamese" +msgstr "vietnamita" + +msgid "Simplified Chinese" +msgstr "xinès simplificat" + +msgid "Traditional Chinese" +msgstr "xinès tradicional" + +msgid "Messages" +msgstr "Missatges" + +msgid "Site Maps" +msgstr "Mapes del lloc" + +msgid "Static Files" +msgstr "Arxius estàtics" + +msgid "Syndication" +msgstr "Sindicació" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Aquest número de plana no és un enter" + +msgid "That page number is less than 1" +msgstr "El nombre de plana és inferior a 1" + +msgid "That page contains no results" +msgstr "La plana no conté cap resultat" + +msgid "Enter a valid value." +msgstr "Introduïu un valor vàlid." + +msgid "Enter a valid URL." +msgstr "Introduïu una URL vàlida." + +msgid "Enter a valid integer." +msgstr "Introduïu un enter vàlid." + +msgid "Enter a valid email address." +msgstr "Introdueix una adreça de correu electrònic vàlida" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Introduïu un 'slug' vàlid, consistent en lletres, números, guions o guions " +"baixos." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Introduïu un 'slug' vàlid format per lletres Unicode, números, guions o " +"guions baixos." + +msgid "Enter a valid IPv4 address." +msgstr "Introduïu una adreça IPv4 vàlida." + +msgid "Enter a valid IPv6 address." +msgstr "Entreu una adreça IPv6 vàlida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Entreu una adreça IPv4 o IPv6 vàlida." + +msgid "Enter only digits separated by commas." +msgstr "Introduïu només dígits separats per comes." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Assegureu-vos que aquest valor sigui %(limit_value)s (és %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Assegureu-vos que aquest valor sigui menor o igual que %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Assegureu-vos que aquest valor sigui més gran o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assegureu-vos que aquest valor té almenys %(limit_value)d caràcter (en té " +"%(show_value)d)." +msgstr[1] "" +"Assegureu-vos que el valor tingui almenys %(limit_value)d caràcters (en té " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assegureu-vos que aquest valor té com a molt %(limit_value)d caràcter (en té " +"%(show_value)d)." +msgstr[1] "" +"Assegureu-vos que aquest valor tingui com a molt %(limit_value)d caràcters " +"(en té %(show_value)d)." + +msgid "Enter a number." +msgstr "Introduïu un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Assegureu-vos que no hi ha més de %(max)s dígit en total." +msgstr[1] "Assegureu-vos que no hi hagi més de %(max)s dígits en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Assegureu-vos que no hi ha més de %(max)s decimal." +msgstr[1] "Assegureu-vos que no hi hagi més de %(max)s decimals." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Assegureu-vos que no hi ha més de %(max)s dígit abans de la coma decimal." +msgstr[1] "" +"Assegureu-vos que no hi hagi més de %(max)s dígits abans de la coma decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"L'extensió d'arxiu “%(extension)s” no està permesa. Les extensions permeses " +"són: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "No es permeten caràcters nuls." + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ja existeix %(model_name)s amb aquest %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "El valor %(value)r no és una opció vàlida." + +msgid "This field cannot be null." +msgstr "Aquest camp no pot ser nul." + +msgid "This field cannot be blank." +msgstr "Aquest camp no pot estar en blanc." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ja existeix %(model_name)s amb aquest %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s ha de ser únic per a %(date_field_label)s i %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Camp del tipus: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "El valor '%(value)s' ha de ser \"True\" o \"False\"." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "El valor '%(value)s' ha de ser cert, fals o cap." + +msgid "Boolean (Either True or False)" +msgstr "Booleà (Cert o Fals)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (de fins a %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enters separats per comes" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"El valor '%(value)s' no té un format de data vàlid. Ha de tenir el format " +"YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"El valor '%(value)s' té el format correcte (YYYY-MM-DD) però no és una data " +"vàlida." + +msgid "Date (without time)" +msgstr "Data (sense hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"El valor '%(value)s' no té un format vàlid. Ha de tenir el format YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"El valor '%(value)s' té el format correcte (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) però no és una data/hora vàlida." + +msgid "Date (with time)" +msgstr "Data (amb hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "El valor '%(value)s' ha de ser un nombre decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"'El valor %(value)s' té un format invàlid. Ha d'estar en el format [DD] [HH:" +"[MM:]]ss[.uuuuuu] ." + +msgid "Duration" +msgstr "Durada" + +msgid "Email address" +msgstr "Adreça de correu electrònic" + +msgid "File path" +msgstr "Ruta del fitxer" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "El valor '%(value)s' ha de ser un número de coma flotant." + +msgid "Floating point number" +msgstr "Número de coma flotant" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "El valor '%(value)s' ha de ser un nombre enter." + +msgid "Integer" +msgstr "Enter" + +msgid "Big (8 byte) integer" +msgstr "Enter gran (8 bytes)" + +msgid "Small integer" +msgstr "Enter petit" + +msgid "IPv4 address" +msgstr "Adreça IPv4" + +msgid "IP address" +msgstr "Adreça IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "El valor '%(value)s' ha de ser None, True o False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleà (Cert, Fals o Cap ('None'))" + +msgid "Positive big integer" +msgstr "Enter gran positiu" + +msgid "Positive integer" +msgstr "Enter positiu" + +msgid "Positive small integer" +msgstr "Enter petit positiu" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (fins a %(max_length)s)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"El valor '%(value)s' no té un format vàlid. Ha de tenir el format HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"El valor '%(value)s' té el format correcte (HH:MM[:ss[.uuuuuu]]) però no és " +"una hora vàlida." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dades binàries" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "'%(value)s' no és un UUID vàlid." + +msgid "Universally unique identifier" +msgstr "Identificador únic universal" + +msgid "File" +msgstr "Arxiu" + +msgid "Image" +msgstr "Imatge" + +msgid "A JSON object" +msgstr "Un objecte JSON" + +msgid "Value must be valid JSON." +msgstr "El valor ha de ser JSON vàlid." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "La instància de %(model)s amb %(field)s %(value)r no existeix." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clau forana (tipus determinat pel camp relacionat)" + +msgid "One-to-one relationship" +msgstr "Relació un-a-un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "relació %(from)s-%(to)s " + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "relacions %(from)s-%(to)s " + +msgid "Many-to-many relationship" +msgstr "Relació molts-a-molts" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Aquest camp és obligatori." + +msgid "Enter a whole number." +msgstr "Introduïu un número enter." + +msgid "Enter a valid date." +msgstr "Introduïu una data vàlida." + +msgid "Enter a valid time." +msgstr "Introduïu una hora vàlida." + +msgid "Enter a valid date/time." +msgstr "Introduïu una data/hora vàlides." + +msgid "Enter a valid duration." +msgstr "Introduïu una durada vàlida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "El número de dies ha de ser entre {min_days} i {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No s'ha enviat cap fitxer. Comproveu el tipus de codificació del formulari." + +msgid "No file was submitted." +msgstr "No s'ha enviat cap fitxer." + +msgid "The submitted file is empty." +msgstr "El fitxer enviat està buit." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Aquest nom d'arxiu hauria de tenir com a molt %(max)d caràcter (en té " +"%(length)d)." +msgstr[1] "" +"Aquest nom d'arxiu hauria de tenir com a molt %(max)d caràcters (en té " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Si us plau, envieu un fitxer o marqueu la casella de selecció \"netejar\", " +"no ambdós." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Carregueu una imatge vàlida. El fitxer que heu carregat no era una imatge o " +"estava corrupte." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Esculliu una opció vàlida. %(value)s no és una de les opcions vàlides." + +msgid "Enter a list of values." +msgstr "Introduïu una llista de valors." + +msgid "Enter a complete value." +msgstr "Introduïu un valor complet." + +msgid "Enter a valid UUID." +msgstr "Intruduïu un UUID vàlid." + +msgid "Enter a valid JSON." +msgstr "Introduïu un JSON vàlid." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Camp ocult %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Les dades de ManagementForm no hi són o han estat modificades. Camps que " +"falten: %(field_names)s. . Necessitaràs omplir una incidència si el problema " +"persisteix." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Si uns plau, envia com a màxim %d formulari" +msgstr[1] "Si us plau, envia com a màxim %d formularis" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Sisplau envieu com a mínim %d formulari." +msgstr[1] "Si us plau envieu com a mínim %d formularis." + +msgid "Order" +msgstr "Ordre" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Si us plau, corregiu la dada duplicada per a %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Si us plau, corregiu la dada duplicada per a %(field)s, la qual ha de ser " +"única." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Si us plau, corregiu la dada duplicada per a %(field_name)s, la qual ha de " +"ser única per a %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Si us plau, corregiu els valors duplicats a sota." + +msgid "The inline value did not match the parent instance." +msgstr "El valor en línia no coincideix amb la instància mare ." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Esculliu una opció vàlida. La opció triada no és una de les opcions " +"disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" no és un valor vàlid" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"No s'ha pogut interpretar %(datetime)s a la zona horària " +"%(current_timezone)s; potser és ambigua o no existeix." + +msgid "Clear" +msgstr "Netejar" + +msgid "Currently" +msgstr "Actualment" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconegut" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sí,no,potser" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "mitjanit" + +msgid "noon" +msgstr "migdia" + +msgid "Monday" +msgstr "Dilluns" + +msgid "Tuesday" +msgstr "Dimarts" + +msgid "Wednesday" +msgstr "Dimecres" + +msgid "Thursday" +msgstr "Dijous" + +msgid "Friday" +msgstr "Divendres" + +msgid "Saturday" +msgstr "Dissabte" + +msgid "Sunday" +msgstr "Diumenge" + +msgid "Mon" +msgstr "dl." + +msgid "Tue" +msgstr "dt." + +msgid "Wed" +msgstr "dc." + +msgid "Thu" +msgstr "dj." + +msgid "Fri" +msgstr "dv." + +msgid "Sat" +msgstr "ds." + +msgid "Sun" +msgstr "dg." + +msgid "January" +msgstr "gener" + +msgid "February" +msgstr "febrer" + +msgid "March" +msgstr "març" + +msgid "April" +msgstr "abril" + +msgid "May" +msgstr "maig" + +msgid "June" +msgstr "juny" + +msgid "July" +msgstr "juliol" + +msgid "August" +msgstr "agost" + +msgid "September" +msgstr "setembre" + +msgid "October" +msgstr "octubre" + +msgid "November" +msgstr "novembre" + +msgid "December" +msgstr "desembre" + +msgid "jan" +msgstr "gen." + +msgid "feb" +msgstr "feb." + +msgid "mar" +msgstr "març" + +msgid "apr" +msgstr "abr." + +msgid "may" +msgstr "maig" + +msgid "jun" +msgstr "juny" + +msgid "jul" +msgstr "jul." + +msgid "aug" +msgstr "ago." + +msgid "sep" +msgstr "set." + +msgid "oct" +msgstr "oct." + +msgid "nov" +msgstr "nov." + +msgid "dec" +msgstr "des." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Gen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Març" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maig" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juny" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Des." + +msgctxt "alt. month" +msgid "January" +msgstr "gener" + +msgctxt "alt. month" +msgid "February" +msgstr "febrer" + +msgctxt "alt. month" +msgid "March" +msgstr "març" + +msgctxt "alt. month" +msgid "April" +msgstr "abril" + +msgctxt "alt. month" +msgid "May" +msgstr "maig" + +msgctxt "alt. month" +msgid "June" +msgstr "juny" + +msgctxt "alt. month" +msgid "July" +msgstr "juliol" + +msgctxt "alt. month" +msgid "August" +msgstr "agost" + +msgctxt "alt. month" +msgid "September" +msgstr "setembre" + +msgctxt "alt. month" +msgid "October" +msgstr "octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "novembre" + +msgctxt "alt. month" +msgid "December" +msgstr "desembre" + +msgid "This is not a valid IPv6 address." +msgstr "Aquesta no és una adreça IPv6 vàlida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d any" +msgstr[1] "%(num)d anys" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d mesos" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d setmana" +msgstr[1] "%(num)d setmanes" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dia" +msgstr[1] "%(num)d dies" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d hores" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minuts" + +msgid "Forbidden" +msgstr "Prohibit" + +msgid "CSRF verification failed. Request aborted." +msgstr "La verificació de CSRF ha fallat. Petició abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Esteu veient aquest missatge perquè aquest lloc HTTPS requereix que el " +"vostre navegador enviï una capçalera “Referer\", i no n'ha arribada cap. " +"Aquesta capçalera es requereix per motius de seguretat, per garantir que el " +"vostre navegador no està sent segrestat per tercers." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Si heu configurat el vostre navegador per deshabilitar capçaleres “Referer" +"\", sisplau torneu-les a habilitar, com a mínim per a aquest lloc, o per a " +"connexions HTTPs, o per a peticions amb el mateix orígen." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Si utilitzeu l'etiqueta o " +"incloeu la capçalera “Referer-Policy: no-referrer\" , si us plau elimineu-" +"la. La protecció CSRF requereix la capçalera “Referer\" per a fer una " +"comprovació estricta. Si esteu preocupats quant a la privacitat, utilitzeu " +"alternatives com per enllaços a aplicacions de " +"tercers." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Estàs veient aquest missatge perquè aquest lloc requereix una galeta CSRF " +"quan s'envien formularis. Aquesta galeta es requereix per motius de " +"seguretat, per garantir que el teu navegador no està sent infiltrat per " +"tercers." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Si has configurat el teu navegador per deshabilitar galetes, sisplau torna-" +"les a habilitar, com a mínim per a aquest lloc, o per a peticions amb el " +"mateix orígen." + +msgid "More information is available with DEBUG=True." +msgstr "Més informació disponible amb DEBUG=True." + +msgid "No year specified" +msgstr "No s'ha especificat any" + +msgid "Date out of range" +msgstr "Data fora de rang" + +msgid "No month specified" +msgstr "No s'ha especificat mes" + +msgid "No day specified" +msgstr "No s'ha especificat dia" + +msgid "No week specified" +msgstr "No s'ha especificat setmana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Cap %(verbose_name_plural)s disponible" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Futurs %(verbose_name_plural)s no disponibles perquè %(class_name)s." +"allow_future és Fals." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Cadena invàlida de data '%(datestr)s' donat el format '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No s'ha trobat cap %(verbose_name)s que coincideixi amb la petició" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "La pàgina no és 'last', ni es pot convertir en un enter" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Pàgina invàlida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Llista buida i '%(class_name)s.allow_empty' és Fals." + +msgid "Directory indexes are not allowed here." +msgstr "Aquí no es permeten índex de directori." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" no existeix" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índex de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "La instal·lació ha estat un èxit! Enhorabona!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Visualitza notes de llançament per Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Esteu veient aquesta pàgina perquè el paràmetre DEBUG=Trueconsta al fitxer de configuració i no teniu cap " +"URL configurada." + +msgid "Django Documentation" +msgstr "Documentació de Django" + +msgid "Topics, references, & how-to’s" +msgstr "Temes, referències, & Com es fa" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Una aplicació enquesta" + +msgid "Get started with Django" +msgstr "Primers passos amb Django" + +msgid "Django Community" +msgstr "Comunitat Django" + +msgid "Connect, get help, or contribute" +msgstr "Connecta, obté ajuda, o col·labora" diff --git a/venv/Lib/site-packages/django/conf/locale/ca/__init__.py b/venv/Lib/site-packages/django/conf/locale/ca/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ca/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ca/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b5223cd0f52bc33a9df908aeee5aac631e3e1d8 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`la-x2Gd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04LKl#sB~S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ca/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ca/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6691785f92be1257c30e72b79ac2beecf0915b00 GIT binary patch literal 765 zcmZXSPj8zr7{-A>N|L5os%^JTTsTBp!#$d&u>v7lfe45uENh5hCrSpP!lY98IJ@mL z?3+~DX{Sp21U*cH{3}^)`L*AlpXZfrIcc|>RMGx?{Wbkrqp06yQf*9;d@Kej1EK(h zXh0(dFsKG^|)2f8?8&WlJAV@WKe z`_-mb&$|aIi26V@2BMR{e1`hsEWbFVN8{$X@d;Ipd-_PfyQljP#hX%QuMJv??5e(I z*@o71l8)#wXSGhqg5t zkIdl@D&>l+Z^I+L9>58~DS`HykN_%4xQ_8EBXGFL^z{^Kio=9P`nn_U-1`(FRK$<0K9Au<_ySeAz#|c_T_(S;*$lD^Y TEK65A!!b1bmuFd?rFr@vd=AOb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ca/formats.py b/venv/Lib/site-packages/django/conf/locale/ca/formats.py new file mode 100644 index 000000000..2f9100911 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ca/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j \d\e F \d\e Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\e\s G:i" +YEAR_MONTH_FORMAT = r"F \d\e\l Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = "d/m/Y" +SHORT_DATETIME_FORMAT = "d/m/Y G:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '31/12/2009' + "%d/%m/%y", # '31/12/09' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..addcb5054dc5f32fe6207e4a6737f2dc534a020b GIT binary patch literal 29207 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, 2020 +# Jannis Leidel , 2011 +# Jan Papež , 2012 +# Jirka Vejrazka , 2011 +# trendspotter, 2020 +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2012-2014 +# Vláďa Macek , 2015-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-10 16:05+0200\n" +"PO-Revision-Date: 2021-03-18 23:20+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Afrikaans" +msgstr "afrikánsky" + +msgid "Arabic" +msgstr "arabsky" + +msgid "Algerian Arabic" +msgstr "alžírskou arabštinou" + +msgid "Asturian" +msgstr "asturštinou" + +msgid "Azerbaijani" +msgstr "ázerbájdžánsky" + +msgid "Bulgarian" +msgstr "bulharsky" + +msgid "Belarusian" +msgstr "bělorusky" + +msgid "Bengali" +msgstr "bengálsky" + +msgid "Breton" +msgstr "bretonsky" + +msgid "Bosnian" +msgstr "bosensky" + +msgid "Catalan" +msgstr "katalánsky" + +msgid "Czech" +msgstr "česky" + +msgid "Welsh" +msgstr "velšsky" + +msgid "Danish" +msgstr "dánsky" + +msgid "German" +msgstr "německy" + +msgid "Lower Sorbian" +msgstr "dolnolužickou srbštinou" + +msgid "Greek" +msgstr "řecky" + +msgid "English" +msgstr "anglicky" + +msgid "Australian English" +msgstr "australskou angličtinou" + +msgid "British English" +msgstr "britskou angličtinou" + +msgid "Esperanto" +msgstr "esperantsky" + +msgid "Spanish" +msgstr "španělsky" + +msgid "Argentinian Spanish" +msgstr "argentinskou španělštinou" + +msgid "Colombian Spanish" +msgstr "kolumbijskou španělštinou" + +msgid "Mexican Spanish" +msgstr "mexickou španělštinou" + +msgid "Nicaraguan Spanish" +msgstr "nikaragujskou španělštinou" + +msgid "Venezuelan Spanish" +msgstr "venezuelskou španělštinou" + +msgid "Estonian" +msgstr "estonsky" + +msgid "Basque" +msgstr "baskicky" + +msgid "Persian" +msgstr "persky" + +msgid "Finnish" +msgstr "finsky" + +msgid "French" +msgstr "francouzsky" + +msgid "Frisian" +msgstr "frísky" + +msgid "Irish" +msgstr "irsky" + +msgid "Scottish Gaelic" +msgstr "skotskou keltštinou" + +msgid "Galician" +msgstr "galicijsky" + +msgid "Hebrew" +msgstr "hebrejsky" + +msgid "Hindi" +msgstr "hindsky" + +msgid "Croatian" +msgstr "chorvatsky" + +msgid "Upper Sorbian" +msgstr "hornolužickou srbštinou" + +msgid "Hungarian" +msgstr "maďarsky" + +msgid "Armenian" +msgstr "arménštinou" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonésky" + +msgid "Igbo" +msgstr "igboštinou" + +msgid "Ido" +msgstr "idem" + +msgid "Icelandic" +msgstr "islandsky" + +msgid "Italian" +msgstr "italsky" + +msgid "Japanese" +msgstr "japonsky" + +msgid "Georgian" +msgstr "gruzínštinou" + +msgid "Kabyle" +msgstr "kabylštinou" + +msgid "Kazakh" +msgstr "kazašsky" + +msgid "Khmer" +msgstr "khmersky" + +msgid "Kannada" +msgstr "kannadsky" + +msgid "Korean" +msgstr "korejsky" + +msgid "Kyrgyz" +msgstr "kyrgyzštinou" + +msgid "Luxembourgish" +msgstr "lucembursky" + +msgid "Lithuanian" +msgstr "litevsky" + +msgid "Latvian" +msgstr "lotyšsky" + +msgid "Macedonian" +msgstr "makedonsky" + +msgid "Malayalam" +msgstr "malajálamsky" + +msgid "Mongolian" +msgstr "mongolsky" + +msgid "Marathi" +msgstr "marathi" + +msgid "Burmese" +msgstr "barmštinou" + +msgid "Norwegian Bokmål" +msgstr "bokmål norštinou" + +msgid "Nepali" +msgstr "nepálsky" + +msgid "Dutch" +msgstr "nizozemsky" + +msgid "Norwegian Nynorsk" +msgstr "norsky (Nynorsk)" + +msgid "Ossetic" +msgstr "osetštinou" + +msgid "Punjabi" +msgstr "paňdžábsky" + +msgid "Polish" +msgstr "polsky" + +msgid "Portuguese" +msgstr "portugalsky" + +msgid "Brazilian Portuguese" +msgstr "brazilskou portugalštinou" + +msgid "Romanian" +msgstr "rumunsky" + +msgid "Russian" +msgstr "rusky" + +msgid "Slovak" +msgstr "slovensky" + +msgid "Slovenian" +msgstr "slovinsky" + +msgid "Albanian" +msgstr "albánsky" + +msgid "Serbian" +msgstr "srbsky" + +msgid "Serbian Latin" +msgstr "srbsky (latinkou)" + +msgid "Swedish" +msgstr "švédsky" + +msgid "Swahili" +msgstr "svahilsky" + +msgid "Tamil" +msgstr "tamilsky" + +msgid "Telugu" +msgstr "telužsky" + +msgid "Tajik" +msgstr "Tádžik" + +msgid "Thai" +msgstr "thajsky" + +msgid "Turkmen" +msgstr "turkmenštinou" + +msgid "Turkish" +msgstr "turecky" + +msgid "Tatar" +msgstr "tatarsky" + +msgid "Udmurt" +msgstr "udmurtsky" + +msgid "Ukrainian" +msgstr "ukrajinsky" + +msgid "Urdu" +msgstr "urdsky" + +msgid "Uzbek" +msgstr "uzbecky" + +msgid "Vietnamese" +msgstr "vietnamsky" + +msgid "Simplified Chinese" +msgstr "čínsky (zjednodušeně)" + +msgid "Traditional Chinese" +msgstr "čínsky (tradičně)" + +msgid "Messages" +msgstr "Zprávy" + +msgid "Site Maps" +msgstr "Mapy webu" + +msgid "Static Files" +msgstr "Statické soubory" + +msgid "Syndication" +msgstr "Syndikace" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Číslo stránky není celé číslo." + +msgid "That page number is less than 1" +msgstr "Číslo stránky je menší než 1" + +msgid "That page contains no results" +msgstr "Stránka je bez výsledků" + +msgid "Enter a valid value." +msgstr "Zadejte platnou hodnotu." + +msgid "Enter a valid URL." +msgstr "Zadejte platnou adresu URL." + +msgid "Enter a valid integer." +msgstr "Zadejte platné celé číslo." + +msgid "Enter a valid email address." +msgstr "Zadejte platnou e-mailovou adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Vložte platný identifikátor složený pouze z písmen, čísel, podtržítek a " +"pomlček." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Zadejte platný identifikátor složený pouze z písmen, čísel, podtržítek a " +"pomlček typu Unicode." + +msgid "Enter a valid IPv4 address." +msgstr "Zadejte platnou adresu typu IPv4." + +msgid "Enter a valid IPv6 address." +msgstr "Zadejte platnou adresu typu IPv6." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Zadejte platnou adresu typu IPv4 nebo IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Zadejte pouze číslice oddělené čárkami." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Hodnota musí být %(limit_value)s (nyní je %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Hodnota musí být menší nebo rovna %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Hodnota musí být větší nebo rovna %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Tato hodnota má mít nejméně %(limit_value)d znak (nyní má %(show_value)d)." +msgstr[1] "" +"Tato hodnota má mít nejméně %(limit_value)d znaky (nyní má %(show_value)d)." +msgstr[2] "" +"Tato hodnota má mít nejméně %(limit_value)d znaku (nyní má %(show_value)d)." +msgstr[3] "" +"Tato hodnota má mít nejméně %(limit_value)d znaků (nyní má %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Tato hodnota má mít nejvýše %(limit_value)d znak (nyní má %(show_value)d)." +msgstr[1] "" +"Tato hodnota má mít nejvýše %(limit_value)d znaky (nyní má %(show_value)d)." +msgstr[2] "" +"Tato hodnota má mít nejvýše %(limit_value)d znaků (nyní má %(show_value)d)." +msgstr[3] "" +"Tato hodnota má mít nejvýše %(limit_value)d znaků (nyní má %(show_value)d)." + +msgid "Enter a number." +msgstr "Zadejte číslo." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Ujistěte se, že pole neobsahuje celkem více než %(max)s číslici." +msgstr[1] "Ujistěte se, že pole neobsahuje celkem více než %(max)s číslice." +msgstr[2] "Ujistěte se, že pole neobsahuje celkem více než %(max)s číslic." +msgstr[3] "Ujistěte se, že pole neobsahuje celkem více než %(max)s číslic." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Ujistěte se, že pole neobsahuje více než %(max)s desetinné místo." +msgstr[1] "Ujistěte se, že pole neobsahuje více než %(max)s desetinná místa." +msgstr[2] "Ujistěte se, že pole neobsahuje více než %(max)s desetinných míst." +msgstr[3] "Ujistěte se, že pole neobsahuje více než %(max)s desetinných míst." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Ujistěte se, že hodnota neobsahuje více než %(max)s místo před desetinnou " +"čárkou (tečkou)." +msgstr[1] "" +"Ujistěte se, že hodnota neobsahuje více než %(max)s místa před desetinnou " +"čárkou (tečkou)." +msgstr[2] "" +"Ujistěte se, že hodnota neobsahuje více než %(max)s míst před desetinnou " +"čárkou (tečkou)." +msgstr[3] "" +"Ujistěte se, že hodnota neobsahuje více než %(max)s míst před desetinnou " +"čárkou (tečkou)." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Přípona souboru \"%(extension)s\" není povolena. Povolené jsou tyto: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Nulové znaky nejsou povoleny." + +msgid "and" +msgstr "a" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" +"Položka %(model_name)s s touto kombinací hodnot v polích %(field_labels)s " +"již existuje." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Hodnota %(value)r není platná možnost." + +msgid "This field cannot be null." +msgstr "Pole nemůže být null." + +msgid "This field cannot be blank." +msgstr "Pole nemůže být prázdné." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" +"Položka %(model_name)s s touto hodnotou v poli %(field_label)s již existuje." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Pole %(field_label)s musí být unikátní testem %(lookup_type)s pro pole " +"%(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Pole typu: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Hodnota \"%(value)s\" musí být buď True nebo False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Hodnota \"%(value)s\" musí být buď True, False nebo None." + +msgid "Boolean (Either True or False)" +msgstr "Pravdivost (buď Ano (True), nebo Ne (False))" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Řetězec (max. %(max_length)s znaků)" + +msgid "Comma-separated integers" +msgstr "Celá čísla oddělená čárkou" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "Hodnota \"%(value)s\" není platné datum. Musí být ve tvaru RRRR-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Ačkoli hodnota \"%(value)s\" je ve správném tvaru (RRRR-MM-DD), jde o " +"neplatné datum." + +msgid "Date (without time)" +msgstr "Datum (bez času)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Hodnota \"%(value)s\" je v neplatném tvaru, který má být RRRR-MM-DD HH:MM[:" +"SS[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Ačkoli hodnota \"%(value)s\" je ve správném tvaru (RRRR-MM-DD HH:MM[:SS[." +"uuuuuu]][TZ]), jde o neplatné datum a čas." + +msgid "Date (with time)" +msgstr "Datum (s časem)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Hodnota \"%(value)s\" musí být desítkové číslo." + +msgid "Decimal number" +msgstr "Desetinné číslo" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Hodnota \"%(value)s\" je v neplatném tvaru, který má být [DD] [HH:[MM:]]ss[." +"uuuuuu]." + +msgid "Duration" +msgstr "Doba trvání" + +msgid "Email address" +msgstr "E-mailová adresa" + +msgid "File path" +msgstr "Cesta k souboru" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Hodnota \"%(value)s\" musí být reálné číslo." + +msgid "Floating point number" +msgstr "Číslo s pohyblivou řádovou čárkou" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Hodnota \"%(value)s\" musí být celé číslo." + +msgid "Integer" +msgstr "Celé číslo" + +msgid "Big (8 byte) integer" +msgstr "Velké číslo (8 bajtů)" + +msgid "Small integer" +msgstr "Malé celé číslo" + +msgid "IPv4 address" +msgstr "Adresa IPv4" + +msgid "IP address" +msgstr "Adresa IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Hodnota \"%(value)s\" musí být buď None, True nebo False." + +msgid "Boolean (Either True, False or None)" +msgstr "Pravdivost (buď Ano (True), Ne (False) nebo Nic (None))" + +msgid "Positive big integer" +msgstr "Velké kladné celé číslo" + +msgid "Positive integer" +msgstr "Kladné celé číslo" + +msgid "Positive small integer" +msgstr "Kladné malé celé číslo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Identifikátor (nejvýše %(max_length)s znaků)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Hodnota \"%(value)s\" je v neplatném tvaru, který má být HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Ačkoli hodnota \"%(value)s\" je ve správném tvaru (HH:MM[:ss[.uuuuuu]]), jde " +"o neplatný čas." + +msgid "Time" +msgstr "Čas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Přímá binární data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" není platná hodnota typu UUID." + +msgid "Universally unique identifier" +msgstr "Všeobecně jedinečný identifikátor" + +msgid "File" +msgstr "Soubor" + +msgid "Image" +msgstr "Obrázek" + +msgid "A JSON object" +msgstr "Objekt typu JSON" + +msgid "Value must be valid JSON." +msgstr "Hodnota musí být platná struktura typu JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Položka typu %(model)s s hodnotou %(field)s rovnou %(value)r neexistuje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Cizí klíč (typ určen pomocí souvisejícího pole)" + +msgid "One-to-one relationship" +msgstr "Vazba jedna-jedna" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Vazba z %(from)s do %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Vazby z %(from)s do %(to)s" + +msgid "Many-to-many relationship" +msgstr "Vazba mnoho-mnoho" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?!" + +msgid "This field is required." +msgstr "Toto pole je třeba vyplnit." + +msgid "Enter a whole number." +msgstr "Zadejte celé číslo." + +msgid "Enter a valid date." +msgstr "Zadejte platné datum." + +msgid "Enter a valid time." +msgstr "Zadejte platný čas." + +msgid "Enter a valid date/time." +msgstr "Zadejte platné datum a čas." + +msgid "Enter a valid duration." +msgstr "Zadejte platnou délku trvání." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Počet dní musí být mezi {min_days} a {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Soubor nebyl odeslán. Zkontrolujte parametr \"encoding type\" formuláře." + +msgid "No file was submitted." +msgstr "Žádný soubor nebyl odeslán." + +msgid "The submitted file is empty." +msgstr "Odeslaný soubor je prázdný." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Tento název souboru má mít nejvýše %(max)d znak (nyní má %(length)d)." +msgstr[1] "" +"Tento název souboru má mít nejvýše %(max)d znaky (nyní má %(length)d)." +msgstr[2] "" +"Tento název souboru má mít nejvýše %(max)d znaku (nyní má %(length)d)." +msgstr[3] "" +"Tento název souboru má mít nejvýše %(max)d znaků (nyní má %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Musíte vybrat cestu k souboru nebo vymazat výběr, ne obojí." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Nahrajte platný obrázek. Odeslaný soubor buď nebyl obrázek nebo byl poškozen." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Vyberte platnou možnost, \"%(value)s\" není k dispozici." + +msgid "Enter a list of values." +msgstr "Zadejte seznam hodnot." + +msgid "Enter a complete value." +msgstr "Zadejte úplnou hodnotu." + +msgid "Enter a valid UUID." +msgstr "Zadejte platné UUID." + +msgid "Enter a valid JSON." +msgstr "Zadejte platnou strukturu typu JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skryté pole %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Data objektu ManagementForm chybí nebo s nimi bylo nedovoleně manipulováno. " +"Chybějící pole: %(field_names)s. Pokud problém přetrvává, budete možná muset " +"problém ohlásit." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Odešlete nejvýše %d formulář." +msgstr[1] "Odešlete nejvýše %d formuláře." +msgstr[2] "Odešlete nejvýše %d formuláře." +msgstr[3] "Odešlete nejvýše %d formulářů." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Odešlete nejméně %d formulář." +msgstr[1] "Odešlete nejméně %d formuláře." +msgstr[2] "Odešlete nejméně %d formuláře." +msgstr[3] "Odešlete nejméně %d formulářů." + +msgid "Order" +msgstr "Pořadí" + +msgid "Delete" +msgstr "Odstranit" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Opravte duplicitní data v poli %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Opravte duplicitní data v poli %(field)s, které musí být unikátní." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Opravte duplicitní data v poli %(field_name)s, které musí být unikátní " +"testem %(lookup)s pole %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Odstraňte duplicitní hodnoty níže." + +msgid "The inline value did not match the parent instance." +msgstr "Hodnota typu inline neodpovídá rodičovské položce." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Vyberte platnou možnost. Tato není k dispozici." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" není platná hodnota." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Hodnotu %(datetime)s nelze interpretovat v časové zóně %(current_timezone)s; " +"může být nejednoznačná nebo nemusí existovat." + +msgid "Clear" +msgstr "Zrušit" + +msgid "Currently" +msgstr "Aktuálně" + +msgid "Change" +msgstr "Změnit" + +msgid "Unknown" +msgstr "Neznámé" + +msgid "Yes" +msgstr "Ano" + +msgid "No" +msgstr "Ne" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ano,ne,možná" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtů" +msgstr[3] "%(size)d bajtů" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "odp." + +msgid "a.m." +msgstr "dop." + +msgid "PM" +msgstr "odp." + +msgid "AM" +msgstr "dop." + +msgid "midnight" +msgstr "půlnoc" + +msgid "noon" +msgstr "poledne" + +msgid "Monday" +msgstr "pondělí" + +msgid "Tuesday" +msgstr "úterý" + +msgid "Wednesday" +msgstr "středa" + +msgid "Thursday" +msgstr "čtvrtek" + +msgid "Friday" +msgstr "pátek" + +msgid "Saturday" +msgstr "sobota" + +msgid "Sunday" +msgstr "neděle" + +msgid "Mon" +msgstr "po" + +msgid "Tue" +msgstr "út" + +msgid "Wed" +msgstr "st" + +msgid "Thu" +msgstr "čt" + +msgid "Fri" +msgstr "pá" + +msgid "Sat" +msgstr "so" + +msgid "Sun" +msgstr "ne" + +msgid "January" +msgstr "leden" + +msgid "February" +msgstr "únor" + +msgid "March" +msgstr "březen" + +msgid "April" +msgstr "duben" + +msgid "May" +msgstr "květen" + +msgid "June" +msgstr "červen" + +msgid "July" +msgstr "červenec" + +msgid "August" +msgstr "srpen" + +msgid "September" +msgstr "září" + +msgid "October" +msgstr "říjen" + +msgid "November" +msgstr "listopad" + +msgid "December" +msgstr "prosinec" + +msgid "jan" +msgstr "led" + +msgid "feb" +msgstr "úno" + +msgid "mar" +msgstr "bře" + +msgid "apr" +msgstr "dub" + +msgid "may" +msgstr "kvě" + +msgid "jun" +msgstr "čen" + +msgid "jul" +msgstr "čec" + +msgid "aug" +msgstr "srp" + +msgid "sep" +msgstr "zář" + +msgid "oct" +msgstr "říj" + +msgid "nov" +msgstr "lis" + +msgid "dec" +msgstr "pro" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Led." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Úno." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Bře." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Dub." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Kvě." + +msgctxt "abbrev. month" +msgid "June" +msgstr "Čer." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Čec." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Srp." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Zář." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Říj." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Lis." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Pro." + +msgctxt "alt. month" +msgid "January" +msgstr "ledna" + +msgctxt "alt. month" +msgid "February" +msgstr "února" + +msgctxt "alt. month" +msgid "March" +msgstr "března" + +msgctxt "alt. month" +msgid "April" +msgstr "dubna" + +msgctxt "alt. month" +msgid "May" +msgstr "května" + +msgctxt "alt. month" +msgid "June" +msgstr "června" + +msgctxt "alt. month" +msgid "July" +msgstr "července" + +msgctxt "alt. month" +msgid "August" +msgstr "srpna" + +msgctxt "alt. month" +msgid "September" +msgstr "září" + +msgctxt "alt. month" +msgid "October" +msgstr "října" + +msgctxt "alt. month" +msgid "November" +msgstr "listopadu" + +msgctxt "alt. month" +msgid "December" +msgstr "prosince" + +msgid "This is not a valid IPv6 address." +msgstr "Toto není platná adresa typu IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "nebo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rok" +msgstr[1] "%(num)d roky" +msgstr[2] "%(num)d roku" +msgstr[3] "%(num)d let" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsíc" +msgstr[1] "%(num)d měsíce" +msgstr[2] "%(num)d měsíců" +msgstr[3] "%(num)d měsíců" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d týden" +msgstr[1] "%(num)d týdny" +msgstr[2] "%(num)d týdne" +msgstr[3] "%(num)d týdnů" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d den" +msgstr[1] "%(num)d dny" +msgstr[2] "%(num)d dní" +msgstr[3] "%(num)d dní" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodina" +msgstr[1] "%(num)d hodiny" +msgstr[2] "%(num)d hodiny" +msgstr[3] "%(num)d hodin" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuty" +msgstr[2] "%(num)d minut" +msgstr[3] "%(num)d minut" + +msgid "Forbidden" +msgstr "Nepřístupné (Forbidden)" + +msgid "CSRF verification failed. Request aborted." +msgstr "Selhalo ověření typu CSRF. Požadavek byl zadržen." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Tato zpráva se zobrazuje, protože tento web na protokolu HTTPS požaduje " +"záhlaví \"Referer\" od vašeho webového prohlížeče. Záhlaví je požadováno z " +"bezpečnostních důvodů, aby se zajistilo, že vašeho prohlížeče se nezmocnil " +"někdo další." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Pokud má váš prohlížeč záhlaví \"Referer\" vypnuté, žádáme vás o jeho " +"zapnutí, alespoň pro tento web nebo pro spojení typu HTTPS nebo pro " +"požadavky typu \"stejný původ\" (same origin)." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Pokud používáte značku nebo " +"záhlaví \"Referrer-Policy: no-referrer\", odeberte je. Ochrana typu CSRF " +"vyžaduje, aby záhlaví zajišťovalo striktní hlídání refereru. Pokud je pro " +"vás soukromí důležité, použijte k odkazům na cizí weby alternativní možnosti " +"jako například ." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Tato zpráva se zobrazuje, protože tento web při odesílání formulářů požaduje " +"v souboru cookie údaj CSRF, a to z bezpečnostních důvodů, aby se zajistilo, " +"že se vašeho prohlížeče nezmocnil někdo další." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Pokud má váš prohlížeč soubory cookie vypnuté, žádáme vás o jejich zapnutí, " +"alespoň pro tento web nebo pro požadavky typu \"stejný původ\" (same origin)." + +msgid "More information is available with DEBUG=True." +msgstr "V případě zapnutí volby DEBUG=True bude k dispozici více informací." + +msgid "No year specified" +msgstr "Nebyl specifikován rok" + +msgid "Date out of range" +msgstr "Datum je mimo rozsah" + +msgid "No month specified" +msgstr "Nebyl specifikován měsíc" + +msgid "No day specified" +msgstr "Nebyl specifikován den" + +msgid "No week specified" +msgstr "Nebyl specifikován týden" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nejsou k dispozici" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s s budoucím datem nejsou k dipozici protoze " +"%(class_name)s.allow_future je False" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Datum \"%(datestr)s\" neodpovídá formátu \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nepodařilo se nalézt žádný objekt %(verbose_name)s" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Požadavek na stránku nemohl být konvertován na celé číslo, ani není \"last\"." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Neplatná stránka (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "List je prázdný a \"%(class_name)s.allow_empty\" je nastaveno na False" + +msgid "Directory indexes are not allowed here." +msgstr "Indexy adresářů zde nejsou povoleny." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "Cesta \"%(path)s\" neexistuje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index adresáře %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalace proběhla úspěšně, gratulujeme!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Zobrazit poznámky k vydání frameworku Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Tuto zprávu vidíte, protože máte v nastavení Djanga zapnutý vývojový režim " +"DEBUG=True a zatím nemáte " +"nastavena žádná URL." + +msgid "Django Documentation" +msgstr "Dokumentace frameworku Django" + +msgid "Topics, references, & how-to’s" +msgstr "Témata, odkazy & how-to" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriál: Hlasovací aplikace" + +msgid "Get started with Django" +msgstr "Začínáme s frameworkem Django" + +msgid "Django Community" +msgstr "Komunita kolem frameworku Django" + +msgid "Connect, get help, or contribute" +msgstr "Propojte se, získejte pomoc, podílejte se" diff --git a/venv/Lib/site-packages/django/conf/locale/cs/__init__.py b/venv/Lib/site-packages/django/conf/locale/cs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/cs/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/cs/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c023a8de9104f49fec6ce3e41eda4b9311c4063 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`laK!Sw<04g^$*Z=?k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/cs/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/cs/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f50d46adc7a714382a00c3caed4cf0c20f07ade GIT binary patch literal 864 zcmZvaL64e16vsipMO}5>wtMP<3kQ>mchfYbD~Ra=1~3g1Qo=fDv?3b^H<3@%^wzJ@ zkI|&3o;K;Vmp%23TNTp|;r-wH&3k_)Kw7U?8CbtQ{PN0;d6A3>!^+!F4J!2<%J?? zlAm*f-aM~96%x%k9Vib#&jqX`il0|@LN^~+I7FMzMHwq{qR9Rs+vZhZ5eu;0NA2<-J-9WXz>S>{FJErQPnm05LMU(CnLCe=vCp2x# zGxh@)PgP&__oU?-w&R6G*B3{0Vy6!smv;K0t%n~p?LE5OjSa2Q*!%0}qRZXPDZ4rx z?Uc9r+V#*>Z$eiasgCN|4vZW2*j255fiGrSqtzwcHuF;?ge8K zuSwu+2#JDzI@u)gDkH&Qo*A3lK%cKk))}qSMLfxZ`*?L9+{|wSGSA}9T{QU=&0-SZ zMYNiw-ATHdc9-cSTE^W8=}yyi5@kfW+kO{cCn?@6<2UqQBrhTGJkJ&{krykXz}I+I GWd8t+Slb-{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/cs/formats.py b/venv/Lib/site-packages/django/conf/locale/cs/formats.py new file mode 100644 index 000000000..e4a7ab994 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/cs/formats.py @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. E Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j. E Y G:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y G:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '05.01.2006' + "%d.%m.%y", # '05.01.06' + "%d. %m. %Y", # '5. 1. 2006' + "%d. %m. %y", # '5. 1. 06' + # "%d. %B %Y", # '25. October 2006' + # "%d. %b. %Y", # '25. Oct. 2006' +] +# Kept ISO formats as one is in first position +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '04:30:59' + "%H.%M", # '04.30' + "%H:%M", # '04:30' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '05.01.2006 04:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '05.01.2006 04:30:59.000200' + "%d.%m.%Y %H.%M", # '05.01.2006 04.30' + "%d.%m.%Y %H:%M", # '05.01.2006 04:30' + "%d. %m. %Y %H:%M:%S", # '05. 01. 2006 04:30:59' + "%d. %m. %Y %H:%M:%S.%f", # '05. 01. 2006 04:30:59.000200' + "%d. %m. %Y %H.%M", # '05. 01. 2006 04.30' + "%d. %m. %Y %H:%M", # '05. 01. 2006 04:30' + "%Y-%m-%d %H.%M", # '2006-01-05 04.30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea5b45cea0d92e995aae102e35533d6abbc38d00 GIT binary patch literal 18319 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 XDO8l=wzv|G!qu_AI;=6oNcevMYAEI_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..16383ce02 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,1278 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Afrikaans" +msgstr "Affricaneg" + +msgid "Arabic" +msgstr "Arabeg" + +msgid "Asturian" +msgstr "Astwrieg" + +msgid "Azerbaijani" +msgstr "Azerbaijanaidd" + +msgid "Bulgarian" +msgstr "Bwlgareg" + +msgid "Belarusian" +msgstr "Belarwseg" + +msgid "Bengali" +msgstr "Bengaleg" + +msgid "Breton" +msgstr "Llydaweg" + +msgid "Bosnian" +msgstr "Bosnieg" + +msgid "Catalan" +msgstr "Catalaneg" + +msgid "Czech" +msgstr "Tsieceg" + +msgid "Welsh" +msgstr "Cymraeg" + +msgid "Danish" +msgstr "Daneg" + +msgid "German" +msgstr "Almaeneg" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Groegedd" + +msgid "English" +msgstr "Saesneg" + +msgid "Australian English" +msgstr "Saesneg Awstralia" + +msgid "British English" +msgstr "Saesneg Prydain" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Sbaeneg" + +msgid "Argentinian Spanish" +msgstr "Sbaeneg Ariannin" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Sbaeneg Mecsico" + +msgid "Nicaraguan Spanish" +msgstr "Sbaeneg Nicaragwa" + +msgid "Venezuelan Spanish" +msgstr "Sbaeneg Feneswela" + +msgid "Estonian" +msgstr "Estoneg" + +msgid "Basque" +msgstr "Basgeg" + +msgid "Persian" +msgstr "Persieg" + +msgid "Finnish" +msgstr "Ffinneg" + +msgid "French" +msgstr "Ffrangeg" + +msgid "Frisian" +msgstr "Ffrisieg" + +msgid "Irish" +msgstr "Gwyddeleg" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galisieg" + +msgid "Hebrew" +msgstr "Hebraeg" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croasieg" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Hwngareg" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneseg" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeg" + +msgid "Italian" +msgstr "Eidaleg" + +msgid "Japanese" +msgstr "Siapanëeg" + +msgid "Georgian" +msgstr "Georgeg" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Casacstanaidd" + +msgid "Khmer" +msgstr "Chmereg" + +msgid "Kannada" +msgstr "Canadeg" + +msgid "Korean" +msgstr "Corëeg" + +msgid "Luxembourgish" +msgstr "Lwcsembergeg" + +msgid "Lithuanian" +msgstr "Lithwaneg" + +msgid "Latvian" +msgstr "Latfieg" + +msgid "Macedonian" +msgstr "Macedoneg" + +msgid "Malayalam" +msgstr "Malaialam" + +msgid "Mongolian" +msgstr "Mongoleg" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Byrmaneg" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepaleg" + +msgid "Dutch" +msgstr "Iseldireg" + +msgid "Norwegian Nynorsk" +msgstr "Ninorsk Norwyeg" + +msgid "Ossetic" +msgstr "Osetieg" + +msgid "Punjabi" +msgstr "Pwnjabi" + +msgid "Polish" +msgstr "Pwyleg" + +msgid "Portuguese" +msgstr "Portiwgaleg" + +msgid "Brazilian Portuguese" +msgstr "Portiwgaleg Brasil" + +msgid "Romanian" +msgstr "Romaneg" + +msgid "Russian" +msgstr "Rwsieg" + +msgid "Slovak" +msgstr "Slofaceg" + +msgid "Slovenian" +msgstr "Slofeneg" + +msgid "Albanian" +msgstr "Albaneg" + +msgid "Serbian" +msgstr "Serbeg" + +msgid "Serbian Latin" +msgstr "Lladin Serbiaidd" + +msgid "Swedish" +msgstr "Swedeg" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telwgw" + +msgid "Thai" +msgstr "Tai" + +msgid "Turkish" +msgstr "Twrceg" + +msgid "Tatar" +msgstr "Tatareg" + +msgid "Udmurt" +msgstr "Wdmwrteg" + +msgid "Ukrainian" +msgstr "Wcreineg" + +msgid "Urdu" +msgstr "Wrdw" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Fietnameg" + +msgid "Simplified Chinese" +msgstr "Tsieinëeg Syml" + +msgid "Traditional Chinese" +msgstr "Tseinëeg Traddodiadol" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "Mapiau Safle" + +msgid "Static Files" +msgstr "Ffeiliau Statig" + +msgid "Syndication" +msgstr "Syndicetiad" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Rhowch werth dilys." + +msgid "Enter a valid URL." +msgstr "Rhowch URL dilys." + +msgid "Enter a valid integer." +msgstr "Rhowch gyfanrif dilys." + +msgid "Enter a valid email address." +msgstr "Rhowch gyfeiriad ebost dilys." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Rhowch gyfeiriad IPv4 dilys." + +msgid "Enter a valid IPv6 address." +msgstr "Rhowch gyfeiriad IPv6 dilys." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Rhowch gyfeiriad IPv4 neu IPv6 dilys." + +msgid "Enter only digits separated by commas." +msgstr "Rhowch ddigidau wedi'i gwahanu gan gomas yn unig." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Sicrhewch taw y gwerth yw %(limit_value)s (%(show_value)s yw ar hyn o bryd)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Sicrhewch fod y gwerth hwn yn fwy neu'n llai na %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Sicrhewch fod y gwerth yn fwy na neu'n gyfartal â %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sicrhewch fod gan y gwerth hwn oleiaf %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[1] "" +"Sicrhewch fod gan y gwerth hwn oleiaf %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[2] "" +"Sicrhewch fod gan y gwerth hwn oleiaf %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[3] "" +"Sicrhewch fod gan y gwerth hwn oleiaf %(limit_value)d nod (mae ganddo " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sicrhewch fod gan y gwerth hwn ddim mwy na %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[1] "" +"Sicrhewch fod gan y gwerth hwn ddim mwy na %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[2] "" +"Sicrhewch fod gan y gwerth hwn ddim mwy na %(limit_value)d nod (mae ganddo " +"%(show_value)d)." +msgstr[3] "" +"Sicrhewch fod gan y gwerth hwn ddim mwy na %(limit_value)d nod (mae ganddo " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Rhowch rif." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Sicrhewch nad oes mwy nag %(max)s digid i gyd." +msgstr[1] "Sicrhewch nad oes mwy na %(max)s ddigid i gyd." +msgstr[2] "Sicrhewch nad oes mwy na %(max)s digid i gyd." +msgstr[3] "Sicrhewch nad oes mwy na %(max)s digid i gyd." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Sicrhewch nad oes mwy nag %(max)s lle degol." +msgstr[1] "Sicrhewch nad oes mwy na %(max)s le degol." +msgstr[2] "Sicrhewch nad oes mwy na %(max)s lle degol." +msgstr[3] "Sicrhewch nad oes mwy na %(max)s lle degol." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Sicrhewch nad oes mwy nag %(max)s digid cyn y pwynt degol." +msgstr[1] "Sicrhewch nad oes mwy na %(max)s ddigid cyn y pwynt degol." +msgstr[2] "Sicrhewch nad oes mwy na %(max)s digid cyn y pwynt degol." +msgstr[3] "Sicrhewch nad oes mwy na %(max)s digid cyn y pwynt degol." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "a" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Mae %(model_name)s gyda'r %(field_labels)s hyn yn bodoli'n barod." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Nid yw gwerth %(value)r yn ddewis dilys." + +msgid "This field cannot be null." +msgstr "Ni all y maes hwn fod yn 'null'." + +msgid "This field cannot be blank." +msgstr "Ni all y maes hwn fod yn wag." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Mae %(model_name)s gyda'r %(field_label)s hwn yn bodoli'n barod." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Maes o fath: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boleaidd (Unai True neu False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (hyd at %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Cyfanrifau wedi'u gwahanu gan gomas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dyddiad (heb amser)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dyddiad (gydag amser)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Rhif degol" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Cyfeiriad ebost" + +msgid "File path" +msgstr "Llwybr ffeil" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Rhif pwynt symudol" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "cyfanrif" + +msgid "Big (8 byte) integer" +msgstr "Cyfanrif mawr (8 beit)" + +msgid "IPv4 address" +msgstr "Cyfeiriad IPv4" + +msgid "IP address" +msgstr "cyfeiriad IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boleaidd (Naill ai True, False neu None)" + +msgid "Positive integer" +msgstr "Cyfanrif positif" + +msgid "Positive small integer" +msgstr "Cyfanrif bach positif" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Malwen (hyd at %(max_length)s)" + +msgid "Small integer" +msgstr "Cyfanrif bach" + +msgid "Text" +msgstr "Testun" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Amser" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Data deuol crai" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Ffeil" + +msgid "Image" +msgstr "Delwedd" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Allwedd Estron (math yn ddibynol ar y maes cysylltiedig)" + +msgid "One-to-one relationship" +msgstr "Perthynas un-i-un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Perthynas llawer-i-lawer" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Mae angen y maes hwn." + +msgid "Enter a whole number." +msgstr "Rhowch cyfanrif." + +msgid "Enter a valid date." +msgstr "Rhif ddyddiad dilys." + +msgid "Enter a valid time." +msgstr "Rhowch amser dilys." + +msgid "Enter a valid date/time." +msgstr "Rhowch ddyddiad/amser dilys." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ni anfonwyd ffeil. Gwiriwch math yr amgodiad ar y ffurflen." + +msgid "No file was submitted." +msgstr "Ni anfonwyd ffeil." + +msgid "The submitted file is empty." +msgstr "Mae'r ffeil yn wag." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Sicrhewch fod gan enw'r ffeil ar y mwyaf %(max)d nod (mae ganddo %(length)d)." +msgstr[1] "" +"Sicrhewch fod gan enw'r ffeil ar y mwyaf %(max)d nod (mae ganddo %(length)d)." +msgstr[2] "" +"Sicrhewch fod gan enw'r ffeil ar y mwyaf %(max)d nod (mae ganddo %(length)d)." +msgstr[3] "" +"Sicrhewch fod gan enw'r ffeil ar y mwyaf %(max)d nod (mae ganddo %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Nail ai cyflwynwych ffeil neu dewisiwch y blwch gwiriad, ond nid y ddau." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Llwythwch ddelwedd dilys. Doedd y ddelwedd a lwythwyd ddim yn ddelwedd " +"dilys, neu roedd yn ddelwedd llygredig." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Dewiswch ddewisiad dilys. Nid yw %(value)s yn un o'r dewisiadau sydd ar gael." + +msgid "Enter a list of values." +msgstr "Rhowch restr o werthoedd." + +msgid "Enter a complete value." +msgstr "Rhowch werth cyflawn." + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Maes cudd %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Mae data ManagementForm ar goll neu mae rhywun wedi ymyrryd ynddo" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Cyflwynwch %d neu lai o ffurflenni." +msgstr[1] "Cyflwynwch %d neu lai o ffurflenni." +msgstr[2] "Cyflwynwch %d neu lai o ffurflenni." +msgstr[3] "Cyflwynwch %d neu lai o ffurflenni." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Cyflwynwch %d neu fwy o ffurflenni." +msgstr[1] "Cyflwynwch %d neu fwy o ffurflenni." +msgstr[2] "Cyflwynwch %d neu fwy o ffurflenni." +msgstr[3] "Cyflwynwch %d neu fwy o ffurflenni." + +msgid "Order" +msgstr "Trefn" + +msgid "Delete" +msgstr "Dileu" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Cywirwch y data dyblyg ar gyfer %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Cywirwch y data dyblyg ar gyfer %(field)s, sydd yn gorfod bod yn unigryw." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Cywirwch y data dyblyg ar gyfer %(field_name)s sydd yn gorfod bod yn unigryw " +"ar gyfer %(lookup)s yn %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Cywirwch y gwerthoedd dyblyg isod." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Dewiswch ddewisiad dilys. Nid yw'r dewisiad yn un o'r dewisiadau sydd ar " +"gael." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Clirio" + +msgid "Currently" +msgstr "Ar hyn o bryd" + +msgid "Change" +msgstr "Newid" + +msgid "Unknown" +msgstr "Anhysbys" + +msgid "Yes" +msgstr "Ie" + +msgid "No" +msgstr "Na" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "ie,na,efallai" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d beit" +msgstr[1] "%(size)d beit" +msgstr[2] "%(size)d beit" +msgstr[3] "%(size)d beit" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "y.h." + +msgid "a.m." +msgstr "y.b." + +msgid "PM" +msgstr "YH" + +msgid "AM" +msgstr "YB" + +msgid "midnight" +msgstr "canol nos" + +msgid "noon" +msgstr "canol dydd" + +msgid "Monday" +msgstr "Dydd Llun" + +msgid "Tuesday" +msgstr "Dydd Mawrth" + +msgid "Wednesday" +msgstr "Dydd Mercher" + +msgid "Thursday" +msgstr "Dydd Iau" + +msgid "Friday" +msgstr "Dydd Gwener" + +msgid "Saturday" +msgstr "Dydd Sadwrn" + +msgid "Sunday" +msgstr "Dydd Sul" + +msgid "Mon" +msgstr "Llu" + +msgid "Tue" +msgstr "Maw" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Iau" + +msgid "Fri" +msgstr "Gwe" + +msgid "Sat" +msgstr "Sad" + +msgid "Sun" +msgstr "Sul" + +msgid "January" +msgstr "Ionawr" + +msgid "February" +msgstr "Chwefror" + +msgid "March" +msgstr "Mawrth" + +msgid "April" +msgstr "Ebrill" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Mehefin" + +msgid "July" +msgstr "Gorffenaf" + +msgid "August" +msgstr "Awst" + +msgid "September" +msgstr "Medi" + +msgid "October" +msgstr "Hydref" + +msgid "November" +msgstr "Tachwedd" + +msgid "December" +msgstr "Rhagfyr" + +msgid "jan" +msgstr "ion" + +msgid "feb" +msgstr "chw" + +msgid "mar" +msgstr "maw" + +msgid "apr" +msgstr "ebr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "meh" + +msgid "jul" +msgstr "gor" + +msgid "aug" +msgstr "aws" + +msgid "sep" +msgstr "med" + +msgid "oct" +msgstr "hyd" + +msgid "nov" +msgstr "tach" + +msgid "dec" +msgstr "rhag" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ion." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Chwe." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mawrth" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Ebrill" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Meh." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Gorff." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Awst" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Medi" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Hydr." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Tach." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Rhag." + +msgctxt "alt. month" +msgid "January" +msgstr "Ionawr" + +msgctxt "alt. month" +msgid "February" +msgstr "Chwefror" + +msgctxt "alt. month" +msgid "March" +msgstr "Mawrth" + +msgctxt "alt. month" +msgid "April" +msgstr "Ebrill" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Mehefin" + +msgctxt "alt. month" +msgid "July" +msgstr "Gorffenaf" + +msgctxt "alt. month" +msgid "August" +msgstr "Awst" + +msgctxt "alt. month" +msgid "September" +msgstr "Medi" + +msgctxt "alt. month" +msgid "October" +msgstr "Hydref" + +msgctxt "alt. month" +msgid "November" +msgstr "Tachwedd" + +msgctxt "alt. month" +msgid "December" +msgstr "Rhagfyr" + +msgid "This is not a valid IPv6 address." +msgstr "Nid yw hwn yn gyfeiriad IPv6 dilys." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "neu" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d blwyddyn" +msgstr[1] "%d flynedd" +msgstr[2] "%d blwyddyn" +msgstr[3] "%d blwyddyn" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mis" +msgstr[1] "%d fis" +msgstr[2] "%d mis" +msgstr[3] "%d mis" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d wythnos" +msgstr[1] "%d wythnos" +msgstr[2] "%d wythnos" +msgstr[3] "%d wythnos" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d diwrnod" +msgstr[1] "%d ddiwrnod" +msgstr[2] "%d diwrnod" +msgstr[3] "%d diwrnod" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d awr" +msgstr[1] "%d awr" +msgstr[2] "%d awr" +msgstr[3] "%d awr" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d munud" +msgstr[1] "%d funud" +msgstr[2] "%d munud" +msgstr[3] "%d munud" + +msgid "0 minutes" +msgstr "0 munud" + +msgid "Forbidden" +msgstr "Gwaharddedig" + +msgid "CSRF verification failed. Request aborted." +msgstr "Gwirio CSRF wedi methu. Ataliwyd y cais." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Dangosir y neges hwn oherwydd bod angen cwci CSRF ar y safle hwn pan yn " +"anfon ffurflenni. Mae angen y cwci ar gyfer diogelwch er mwyn sicrhau nad " +"oes trydydd parti yn herwgipio eich porwr." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Mae mwy o wybodaeth ar gael gyda DEBUG=True" + +msgid "No year specified" +msgstr "Dim blwyddyn wedi’i bennu" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Dim mis wedi’i bennu" + +msgid "No day specified" +msgstr "Dim diwrnod wedi’i bennu" + +msgid "No week specified" +msgstr "Dim wythnos wedi’i bennu" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Dim %(verbose_name_plural)s ar gael" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s i'r dyfodol ddim ar gael oherwydd mae %(class_name)s." +"allow_future yn 'False'. " + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ni ganfuwyd %(verbose_name)s yn cydweddu â'r ymholiad" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Tudalen annilys (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Ni ganiateir mynegai cyfeiriaduron yma." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Mynegai %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/cy/__init__.py b/venv/Lib/site-packages/django/conf/locale/cy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/cy/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/cy/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29c5e5111b68e58e046d3e317164491187b5c041 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`la;1KJd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04oDD-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/cy/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/cy/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e0c8c9a11667baa7100b4f29419660a04ddcb6c GIT binary patch literal 775 zcmZXSO>f#T7{}whK!8$8we2|N;sa74cQj2)OCV937v)7$tY}e)1A-A!;ZTWuoZa@7 zkapUs(mp{C(*mV5thW64`Ty+yV_S0CY}Tow{rUE5e9KYP@0}<&x)5KAL3ROCh{6B? zOd}dIh`}skF^4!@K^0s@Rm|hslt%oN!u1~j)o=sV@fm91COX6CHq~k6+*}w6-WHfS zzt64&GiM5tGlk4KEGD9tSND@(K7!)VoQGJ1i3q)8w&~RJHuSnM=|U_(r4O|}wDWgw zP!CS>^HW+F59P|n|IxGYgdUBXx5iggHXi5}^q#=gBU8LZ?=(?kAUSd{G%QVWP{UER zqiF3`%AoDZk`-u%?kF#Yi)S^Eycg286~l6Za@F^*=%n0Gwd~zaFEEC|S6RMAmwTJ4 zo33-HXQL0tYn<}-K)z8m=`OHkQ?ew-u+XKW7_KepgA!}$u68Y3!N@XPQ`JX5sa2(T z`aV3xH+|nF@rwA?nvl>Rq|rKwml^R#vrJi!{o!myvaY#G=W&$z5ApKBznhJHGRxxb zeHeWYr!n#IJX}swF-n&cagj#hA{L{KI7wGYn33N7X3Kv{QoLTopLZXKd@KUXvY^~) Ojt1;so@E;>;K4t-jmK~R literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/cy/formats.py b/venv/Lib/site-packages/django/conf/locale/cy/formats.py new file mode 100644 index 000000000..eaef6a618 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/cy/formats.py @@ -0,0 +1,33 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" # '25 Hydref 2006' +TIME_FORMAT = "P" # '2:30 y.b.' +DATETIME_FORMAT = "j F Y, P" # '25 Hydref 2006, 2:30 y.b.' +YEAR_MONTH_FORMAT = "F Y" # 'Hydref 2006' +MONTH_DAY_FORMAT = "j F" # '25 Hydref' +SHORT_DATE_FORMAT = "d/m/Y" # '25/10/2006' +SHORT_DATETIME_FORMAT = "d/m/Y P" # '25/10/2006 2:30 y.b.' +FIRST_DAY_OF_WEEK = 1 # 'Dydd Llun' + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d/%m/%Y %H:%M:%S", # '25/10/2006 14:30:59' + "%d/%m/%Y %H:%M:%S.%f", # '25/10/2006 14:30:59.000200' + "%d/%m/%Y %H:%M", # '25/10/2006 14:30' + "%d/%m/%y %H:%M:%S", # '25/10/06 14:30:59' + "%d/%m/%y %H:%M:%S.%f", # '25/10/06 14:30:59.000200' + "%d/%m/%y %H:%M", # '25/10/06 14:30' +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1829715feca6f4b9abb25a3add0c29a399981236 GIT binary patch literal 26957 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 l3s$E+%;ZL=>2iIu>Wp!|IFcM@J8m55y9c^, 2012 +# Danni Randeris , 2014 +# Erik Ramsgaard Wognsen , 2020-2021 +# Erik Ramsgaard Wognsen , 2013-2019 +# Finn Gruwier Larsen, 2011 +# Jannis Leidel , 2011 +# jonaskoelker , 2012 +# Mads Chr. Olesen , 2013 +# valberg , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 19:17+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaans" + +msgid "Arabic" +msgstr "arabisk" + +msgid "Algerian Arabic" +msgstr "algerisk arabisk" + +msgid "Asturian" +msgstr "Asturisk" + +msgid "Azerbaijani" +msgstr "azerbaidjansk" + +msgid "Bulgarian" +msgstr "bulgarsk" + +msgid "Belarusian" +msgstr "hviderussisk" + +msgid "Bengali" +msgstr "bengalsk" + +msgid "Breton" +msgstr "bretonsk" + +msgid "Bosnian" +msgstr "bosnisk" + +msgid "Catalan" +msgstr "catalansk" + +msgid "Czech" +msgstr "tjekkisk" + +msgid "Welsh" +msgstr "walisisk" + +msgid "Danish" +msgstr "dansk" + +msgid "German" +msgstr "tysk" + +msgid "Lower Sorbian" +msgstr "nedresorbisk" + +msgid "Greek" +msgstr "græsk" + +msgid "English" +msgstr "engelsk" + +msgid "Australian English" +msgstr "australsk engelsk" + +msgid "British English" +msgstr "britisk engelsk" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "spansk" + +msgid "Argentinian Spanish" +msgstr "argentinsk spansk" + +msgid "Colombian Spanish" +msgstr "colombiansk spansk" + +msgid "Mexican Spanish" +msgstr "mexikansk spansk" + +msgid "Nicaraguan Spanish" +msgstr "nicaraguansk spansk" + +msgid "Venezuelan Spanish" +msgstr "venezuelansk spansk" + +msgid "Estonian" +msgstr "estisk" + +msgid "Basque" +msgstr "baskisk" + +msgid "Persian" +msgstr "persisk" + +msgid "Finnish" +msgstr "finsk" + +msgid "French" +msgstr "fransk" + +msgid "Frisian" +msgstr "frisisk" + +msgid "Irish" +msgstr "irsk" + +msgid "Scottish Gaelic" +msgstr "skotsk gælisk" + +msgid "Galician" +msgstr "galicisk" + +msgid "Hebrew" +msgstr "hebraisk" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "kroatisk" + +msgid "Upper Sorbian" +msgstr "øvresorbisk" + +msgid "Hungarian" +msgstr "ungarsk" + +msgid "Armenian" +msgstr "armensk" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesisk" + +msgid "Igbo" +msgstr "igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "islandsk" + +msgid "Italian" +msgstr "italiensk" + +msgid "Japanese" +msgstr "japansk" + +msgid "Georgian" +msgstr "georgisk" + +msgid "Kabyle" +msgstr "kabylsk" + +msgid "Kazakh" +msgstr "kasakhisk" + +msgid "Khmer" +msgstr "khmer" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "koreansk" + +msgid "Kyrgyz" +msgstr "kirgisisk" + +msgid "Luxembourgish" +msgstr "luxembourgisk" + +msgid "Lithuanian" +msgstr "litauisk" + +msgid "Latvian" +msgstr "lettisk" + +msgid "Macedonian" +msgstr "makedonsk" + +msgid "Malayalam" +msgstr "malayalam" + +msgid "Mongolian" +msgstr "mongolsk" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "malajisk" + +msgid "Burmese" +msgstr "burmesisk" + +msgid "Norwegian Bokmål" +msgstr "norsk bokmål" + +msgid "Nepali" +msgstr "nepalesisk" + +msgid "Dutch" +msgstr "hollandsk" + +msgid "Norwegian Nynorsk" +msgstr "norsk nynorsk" + +msgid "Ossetic" +msgstr "ossetisk" + +msgid "Punjabi" +msgstr "punjabi" + +msgid "Polish" +msgstr "polsk" + +msgid "Portuguese" +msgstr "portugisisk" + +msgid "Brazilian Portuguese" +msgstr "brasiliansk portugisisk" + +msgid "Romanian" +msgstr "rumænsk" + +msgid "Russian" +msgstr "russisk" + +msgid "Slovak" +msgstr "slovakisk" + +msgid "Slovenian" +msgstr "slovensk" + +msgid "Albanian" +msgstr "albansk" + +msgid "Serbian" +msgstr "serbisk" + +msgid "Serbian Latin" +msgstr "serbisk (latin)" + +msgid "Swedish" +msgstr "svensk" + +msgid "Swahili" +msgstr "swahili" + +msgid "Tamil" +msgstr "tamil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tadsjikisk" + +msgid "Thai" +msgstr "thai" + +msgid "Turkmen" +msgstr "turkmensk" + +msgid "Turkish" +msgstr "tyrkisk" + +msgid "Tatar" +msgstr "tatarisk" + +msgid "Udmurt" +msgstr "udmurtisk" + +msgid "Ukrainian" +msgstr "ukrainsk" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "usbekisk" + +msgid "Vietnamese" +msgstr "vietnamesisk" + +msgid "Simplified Chinese" +msgstr "forenklet kinesisk" + +msgid "Traditional Chinese" +msgstr "traditionelt kinesisk" + +msgid "Messages" +msgstr "Meddelelser" + +msgid "Site Maps" +msgstr "Site Maps" + +msgid "Static Files" +msgstr "Static Files" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Det sidetal er ikke et heltal" + +msgid "That page number is less than 1" +msgstr "Det sidetal er mindre end 1" + +msgid "That page contains no results" +msgstr "Den side indeholder ingen resultater" + +msgid "Enter a valid value." +msgstr "Indtast en gyldig værdi." + +msgid "Enter a valid URL." +msgstr "Indtast en gyldig URL." + +msgid "Enter a valid integer." +msgstr "Indtast et gyldigt heltal." + +msgid "Enter a valid email address." +msgstr "Indtast en gyldig e-mail-adresse." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Indtast en gyldig “slug” bestående af bogstaver, cifre, understreger eller " +"bindestreger." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Indtast en gyldig “slug” bestående af Unicode-bogstaver, cifre, understreger " +"eller bindestreger." + +msgid "Enter a valid IPv4 address." +msgstr "Indtast en gyldig IPv4-adresse." + +msgid "Enter a valid IPv6 address." +msgstr "Indtast en gyldig IPv6-adresse." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Indtast en gyldig IPv4- eller IPv6-adresse." + +msgid "Enter only digits separated by commas." +msgstr "Indtast kun cifre adskilt af kommaer." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Denne værdi skal være %(limit_value)s (den er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Denne værdi skal være mindre end eller lig %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Denne værdi skal være større end eller lig %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Denne værdi skal have mindst %(limit_value)d tegn (den har %(show_value)d)." +msgstr[1] "" +"Denne værdi skal have mindst %(limit_value)d tegn (den har %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Denne værdi må højst have %(limit_value)d tegn (den har %(show_value)d)." +msgstr[1] "" +"Denne værdi må højst have %(limit_value)d tegn (den har %(show_value)d)." + +msgid "Enter a number." +msgstr "Indtast et tal." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Der må maksimalt være %(max)s ciffer i alt." +msgstr[1] "Der må maksimalt være %(max)s cifre i alt." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Der må maksimalt være %(max)s decimal." +msgstr[1] "Der må maksimalt være %(max)s decimaler." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Der må maksimalt være %(max)s ciffer før kommaet." +msgstr[1] "Der må maksimalt være %(max)s cifre før kommaet." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Filendelse “%(extension)s” er ikke tilladt. Tilladte filendelser er: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null-tegn er ikke tilladte." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s med dette %(field_labels)s eksisterer allerede." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Værdien %(value)r er ikke et gyldigt valg." + +msgid "This field cannot be null." +msgstr "Dette felt kan ikke være null." + +msgid "This field cannot be blank." +msgstr "Dette felt kan ikke være tomt." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s med dette %(field_label)s eksisterer allerede." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s skal være unik for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Felt af type: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s”-værdien skal være enten True eller False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s”-værdien skal være enten True, False eller None." + +msgid "Boolean (Either True or False)" +msgstr "Boolsk (enten True eller False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Streng (op til %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Kommaseparerede heltal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s”-værdien har et ugyldigt datoformat. Den skal være i formatet " +"ÅÅÅÅ-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s”-værdien har det korrekte format (ÅÅÅÅ-MM-DD) men er en ugyldig " +"dato." + +msgid "Date (without time)" +msgstr "Dato (uden tid)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s”-værdien har et ugyldigt format. Den skal være i formatet ÅÅÅÅ-MM-" +"DD TT:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s”-værdien har det korrekte format (ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]" +"[TZ]) men er en ugyldig dato/tid." + +msgid "Date (with time)" +msgstr "Dato (med tid)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s”-værdien skal være et decimaltal." + +msgid "Decimal number" +msgstr "Decimaltal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s”-værdien har et ugyldigt format. Den skal være i formatet [DD] " +"[[TT:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Varighed" + +msgid "Email address" +msgstr "E-mail-adresse" + +msgid "File path" +msgstr "Sti" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s”-værdien skal være et kommatal." + +msgid "Floating point number" +msgstr "Flydende-komma-tal" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s”-værdien skal være et heltal." + +msgid "Integer" +msgstr "Heltal" + +msgid "Big (8 byte) integer" +msgstr "Stort heltal (8 byte)" + +msgid "Small integer" +msgstr "Lille heltal" + +msgid "IPv4 address" +msgstr "IPv4-adresse" + +msgid "IP address" +msgstr "IP-adresse" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s”-værdien skal være enten None, True eller False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolsk (True, False eller None)" + +msgid "Positive big integer" +msgstr "Positivt stort heltal" + +msgid "Positive integer" +msgstr "Positivt heltal" + +msgid "Positive small integer" +msgstr "Positivt lille heltal" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "\"Slug\" (op til %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s”-værdien har et ugyldigt format. Den skal være i formatet TT:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s”-værdien har det korrekte format (TT:MM[:ss[.uuuuuu]]) men er et " +"ugyldigt tidspunkt." + +msgid "Time" +msgstr "Tid" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Rå binære data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” er ikke et gyldigt UUID." + +msgid "Universally unique identifier" +msgstr "Universelt unik identifikator" + +msgid "File" +msgstr "Fil" + +msgid "Image" +msgstr "Billede" + +msgid "A JSON object" +msgstr "Et JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Værdien skal være gyldig JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s instans med %(field)s %(value)r findes ikke." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremmednøgle (type bestemt af relateret felt)" + +msgid "One-to-one relationship" +msgstr "En-til-en-relation" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-relation" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-relationer" + +msgid "Many-to-many relationship" +msgstr "Mange-til-mange-relation" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Dette felt er påkrævet." + +msgid "Enter a whole number." +msgstr "Indtast et heltal." + +msgid "Enter a valid date." +msgstr "Indtast en gyldig dato." + +msgid "Enter a valid time." +msgstr "Indtast en gyldig tid." + +msgid "Enter a valid date/time." +msgstr "Indtast gyldig dato/tid." + +msgid "Enter a valid duration." +msgstr "Indtast en gyldig varighed." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Antallet af dage skal være mellem {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ingen fil blev indsendt. Kontroller kodningstypen i formularen." + +msgid "No file was submitted." +msgstr "Ingen fil blev indsendt." + +msgid "The submitted file is empty." +msgstr "Den indsendte fil er tom." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "Dette filnavn må højst have %(max)d tegn (det har %(length)d)." +msgstr[1] "Dette filnavn må højst have %(max)d tegn (det har %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Du skal enten indsende en fil eller afmarkere afkrydsningsfeltet, ikke begge " +"dele." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Indsend en billedfil. Filen, du indsendte, var enten ikke et billede eller " +"en defekt billedfil." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Marker en gyldig valgmulighed. %(value)s er ikke en af de tilgængelige " +"valgmuligheder." + +msgid "Enter a list of values." +msgstr "Indtast en liste af værdier." + +msgid "Enter a complete value." +msgstr "Indtast en komplet værdi." + +msgid "Enter a valid UUID." +msgstr "Indtast et gyldigt UUID." + +msgid "Enter a valid JSON." +msgstr "Indtast gyldig JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skjult felt %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm-data mangler eller er blevet pillet ved. Manglende felter: " +"%(field_names)s. Du kan få behov for at oprette en fejlrapport hvis " +"problemet varer ved." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Send venligst højst %d formular." +msgstr[1] "Send venligst højst %d formularer." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Send venligst mindst %d formular." +msgstr[1] "Send venligst mindst %d formularer." + +msgid "Order" +msgstr "Rækkefølge" + +msgid "Delete" +msgstr "Slet" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ret venligst duplikerede data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Ret venligst de duplikerede data for %(field)s, som skal være unik." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ret venligst de duplikerede data for %(field_name)s, som skal være unik for " +"%(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ret venligst de duplikerede data herunder." + +msgid "The inline value did not match the parent instance." +msgstr "Den indlejrede værdi passede ikke med forældreinstansen." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Marker en gyldig valgmulighed. Det valg, du har foretaget, er ikke blandt de " +"tilgængelige valgmuligheder." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” er ikke en gyldig værdi." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kunne ikke fortolkes i tidszonen %(current_timezone)s; den kan " +"være tvetydig eller den eksisterer måske ikke." + +msgid "Clear" +msgstr "Afmarkér" + +msgid "Currently" +msgstr "Aktuelt" + +msgid "Change" +msgstr "Ret" + +msgid "Unknown" +msgstr "Ukendt" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nej" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nej,måske" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnat" + +msgid "noon" +msgstr "middag" + +msgid "Monday" +msgstr "mandag" + +msgid "Tuesday" +msgstr "tirsdag" + +msgid "Wednesday" +msgstr "onsdag" + +msgid "Thursday" +msgstr "torsdag" + +msgid "Friday" +msgstr "fredag" + +msgid "Saturday" +msgstr "lørdag" + +msgid "Sunday" +msgstr "søndag" + +msgid "Mon" +msgstr "man" + +msgid "Tue" +msgstr "tir" + +msgid "Wed" +msgstr "ons" + +msgid "Thu" +msgstr "tor" + +msgid "Fri" +msgstr "fre" + +msgid "Sat" +msgstr "lør" + +msgid "Sun" +msgstr "søn" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "marts" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sept" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "marts" + +msgctxt "abbrev. month" +msgid "April" +msgstr "april" + +msgctxt "abbrev. month" +msgid "May" +msgstr "maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec." + +msgctxt "alt. month" +msgid "January" +msgstr "januar" + +msgctxt "alt. month" +msgid "February" +msgstr "februar" + +msgctxt "alt. month" +msgid "March" +msgstr "marts" + +msgctxt "alt. month" +msgid "April" +msgstr "april" + +msgctxt "alt. month" +msgid "May" +msgstr "maj" + +msgctxt "alt. month" +msgid "June" +msgstr "juni" + +msgctxt "alt. month" +msgid "July" +msgstr "juli" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "december" + +msgid "This is not a valid IPv6 address." +msgstr "Dette er ikke en gyldig IPv6-adresse." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eller" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d måned" +msgstr[1] "%(num)d måneder" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d uge" +msgstr[1] "%(num)d uger" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dage" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timer" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutter" + +msgid "Forbidden" +msgstr "Forbudt" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifikationen mislykkedes. Forespørgslen blev afbrudt." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Du ser denne besked fordi denne HTTPS-webside kræver at din browser sender " +"en “Referer header”, som ikke blev sendt. Denne header er påkrævet af " +"sikkerhedsmæssige grunde for at sikre at din browser ikke bliver kapret af " +"tredjepart." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Hvis du har opsat din browser til ikke at sende “Referer” headere, beder vi " +"dig slå dem til igen, i hvert fald for denne webside, eller for HTTPS-" +"forbindelser, eller for “same-origin”-forespørgsler." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Hvis du bruger tagget eller " +"inkluderer headeren “Referrer-Policy: no-referrer”, så fjern dem venligst. " +"CSRF-beskyttelsen afhænger af at “Referer”-headeren udfører stringent " +"referer-kontrol. Hvis du er bekymret om privatliv, så brug alternativer så " +"som for links til tredjepartswebsider." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Du ser denne besked fordi denne webside kræver en CSRF-cookie, når du sender " +"formularer. Denne cookie er påkrævet af sikkerhedsmæssige grunde for at " +"sikre at din browser ikke bliver kapret af tredjepart." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Hvis du har slået cookies fra i din browser, beder vi dig slå dem til igen, " +"i hvert fald for denne webside, eller for “same-origin”-forespørgsler." + +msgid "More information is available with DEBUG=True." +msgstr "Mere information er tilgængeligt med DEBUG=True." + +msgid "No year specified" +msgstr "Intet år specificeret" + +msgid "Date out of range" +msgstr "Dato uden for rækkevidde" + +msgid "No month specified" +msgstr "Ingen måned specificeret" + +msgid "No day specified" +msgstr "Ingen dag specificeret" + +msgid "No week specified" +msgstr "Ingen uge specificeret" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ingen %(verbose_name_plural)s til rådighed" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Fremtidige %(verbose_name_plural)s ikke tilgængelige, fordi %(class_name)s ." +"allow_future er falsk." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ugyldig datostreng “%(datestr)s” givet format “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ingen %(verbose_name)s fundet matcher forespørgslen" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Side er ikke “sidste”, og kan heller ikke konverteres til en int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ugyldig side (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tom liste og “%(class_name)s.allow_empty” er falsk." + +msgid "Directory indexes are not allowed here." +msgstr "Mappeindekser er ikke tilladte her" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” eksisterer ikke" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks for %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installationen virkede! Tillykke!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Vis udgivelsesnoter for Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Du ser denne side fordi du har DEBUG=True i din settings-fil og ikke har opsat nogen URL'er." + +msgid "Django Documentation" +msgstr "Django-dokumentation" + +msgid "Topics, references, & how-to’s" +msgstr "Emner, referencer & how-to’s" + +msgid "Tutorial: A Polling App" +msgstr "Gennemgang: En afstemnings-app" + +msgid "Get started with Django" +msgstr "Kom i gang med Django" + +msgid "Django Community" +msgstr "Django-fællesskabet" + +msgid "Connect, get help, or contribute" +msgstr "Forbind, få hjælp eller bidrag" diff --git a/venv/Lib/site-packages/django/conf/locale/da/__init__.py b/venv/Lib/site-packages/django/conf/locale/da/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/da/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/da/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..147a273dbb5cc9349b7f87edbf257d984f7d1905 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lN}_&zd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04Me|#{d8T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/da/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/da/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c6bd23fb2ec1f0bc2de0137f10dfc66deb2da67 GIT binary patch literal 655 zcmZXR&2F1O5XV^q4z}Z@j@q7j@P&h=2H&kJDh*&z0$6;gVugw@gDqTRA{Iv~kJDRU zDN;{8MamQ8l7LgESl!jm&i^+%vpd?X-|te@c=+~vzNRVaPc53GRf*5lA{Uhb3R8eE zf);K8jcH&o11x5tjoWa9kAPbu%q=PC{6x3|UEGBp?!hrWhQ3XWPRjO57%D@rq}54M zc3;G>_UW23H7HpSQo$=byR8o1qw4CC<3Zq4f%isqIoSI{UY+pzgtyDL{~>{2lqZMu z5q-Qv!hO{zWsLf`Cy9<6D5j;04(>Uc{whxEND~Y^S+oM(G#quG@a9EHqPHglTQw~w zXjXmq4;_?KG|R3}dV#3~UuF3UpY75#W9B-4>)H7I>oX4dK$0&tUAzu#c_vz-V_Nvk zQBBtt4XMFS4OjmnTfx*a-I-=ge^EJGwZ1ct@#VyKNt_ek+7c4_QWkB~cvBF6niT4G z?kh=7it|~Xt>UQgZ{y9af1S*Ik`(dzO&EO-mof2S6>gTiVHw1sXCzRoF#rGn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/da/formats.py b/venv/Lib/site-packages/django/conf/locale/da/formats.py new file mode 100644 index 000000000..58292084f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/da/formats.py @@ -0,0 +1,26 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..59a12cf2143683aa303db3bbbfcf6e97f400741d GIT binary patch literal 28373 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, 2011 +# Daniel Roschka , 2016 +# Florian Apolloner , 2018,2020-2021 +# Jannis Vajen, 2011,2013 +# Jannis Leidel , 2013-2018,2020 +# Jannis Vajen, 2016 +# Markus Holtermann , 2013,2015 +# Raphael Michel , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-28 18:34+0000\n" +"Last-Translator: Florian Apolloner \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabisch" + +msgid "Algerian Arabic" +msgstr "Algerisches Arabisch" + +msgid "Asturian" +msgstr "Asturisch" + +msgid "Azerbaijani" +msgstr "Aserbaidschanisch" + +msgid "Bulgarian" +msgstr "Bulgarisch" + +msgid "Belarusian" +msgstr "Weißrussisch" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Bretonisch" + +msgid "Bosnian" +msgstr "Bosnisch" + +msgid "Catalan" +msgstr "Katalanisch" + +msgid "Czech" +msgstr "Tschechisch" + +msgid "Welsh" +msgstr "Walisisch" + +msgid "Danish" +msgstr "Dänisch" + +msgid "German" +msgstr "Deutsch" + +msgid "Lower Sorbian" +msgstr "Niedersorbisch" + +msgid "Greek" +msgstr "Griechisch" + +msgid "English" +msgstr "Englisch" + +msgid "Australian English" +msgstr "Australisches Englisch" + +msgid "British English" +msgstr "Britisches Englisch" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanisch" + +msgid "Argentinian Spanish" +msgstr "Argentinisches Spanisch" + +msgid "Colombian Spanish" +msgstr "Kolumbianisches Spanisch" + +msgid "Mexican Spanish" +msgstr "Mexikanisches Spanisch" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguanisches Spanisch" + +msgid "Venezuelan Spanish" +msgstr "Venezolanisches Spanisch" + +msgid "Estonian" +msgstr "Estnisch" + +msgid "Basque" +msgstr "Baskisch" + +msgid "Persian" +msgstr "Persisch" + +msgid "Finnish" +msgstr "Finnisch" + +msgid "French" +msgstr "Französisch" + +msgid "Frisian" +msgstr "Friesisch" + +msgid "Irish" +msgstr "Irisch" + +msgid "Scottish Gaelic" +msgstr "Schottisch-Gälisch" + +msgid "Galician" +msgstr "Galicisch" + +msgid "Hebrew" +msgstr "Hebräisch" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatisch" + +msgid "Upper Sorbian" +msgstr "Obersorbisch" + +msgid "Hungarian" +msgstr "Ungarisch" + +msgid "Armenian" +msgstr "Armenisch" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesisch" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Isländisch" + +msgid "Italian" +msgstr "Italienisch" + +msgid "Japanese" +msgstr "Japanisch" + +msgid "Georgian" +msgstr "Georgisch" + +msgid "Kabyle" +msgstr "Kabylisch" + +msgid "Kazakh" +msgstr "Kasachisch" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreanisch" + +msgid "Kyrgyz" +msgstr "Kirgisisch" + +msgid "Luxembourgish" +msgstr "Luxemburgisch" + +msgid "Lithuanian" +msgstr "Litauisch" + +msgid "Latvian" +msgstr "Lettisch" + +msgid "Macedonian" +msgstr "Mazedonisch" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolisch" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malaiisch" + +msgid "Burmese" +msgstr "Birmanisch" + +msgid "Norwegian Bokmål" +msgstr "Norwegisch (Bokmål)" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Niederländisch" + +msgid "Norwegian Nynorsk" +msgstr "Norwegisch (Nynorsk)" + +msgid "Ossetic" +msgstr "Ossetisch" + +msgid "Punjabi" +msgstr "Panjabi" + +msgid "Polish" +msgstr "Polnisch" + +msgid "Portuguese" +msgstr "Portugiesisch" + +msgid "Brazilian Portuguese" +msgstr "Brasilianisches Portugiesisch" + +msgid "Romanian" +msgstr "Rumänisch" + +msgid "Russian" +msgstr "Russisch" + +msgid "Slovak" +msgstr "Slowakisch" + +msgid "Slovenian" +msgstr "Slowenisch" + +msgid "Albanian" +msgstr "Albanisch" + +msgid "Serbian" +msgstr "Serbisch" + +msgid "Serbian Latin" +msgstr "Serbisch (Latein)" + +msgid "Swedish" +msgstr "Schwedisch" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamilisch" + +msgid "Telugu" +msgstr "Telugisch" + +msgid "Tajik" +msgstr "Tadschikisch" + +msgid "Thai" +msgstr "Thailändisch" + +msgid "Turkmen" +msgstr "Turkmenisch" + +msgid "Turkish" +msgstr "Türkisch" + +msgid "Tatar" +msgstr "Tatarisch" + +msgid "Udmurt" +msgstr "Udmurtisch" + +msgid "Ukrainian" +msgstr "Ukrainisch" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Usbekisch" + +msgid "Vietnamese" +msgstr "Vietnamesisch" + +msgid "Simplified Chinese" +msgstr "Vereinfachtes Chinesisch" + +msgid "Traditional Chinese" +msgstr "Traditionelles Chinesisch" + +msgid "Messages" +msgstr "Mitteilungen" + +msgid "Site Maps" +msgstr "Sitemaps" + +msgid "Static Files" +msgstr "Statische Dateien" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Diese Seitennummer ist keine Ganzzahl" + +msgid "That page number is less than 1" +msgstr "Diese Seitennummer ist kleiner als 1" + +msgid "That page contains no results" +msgstr "Diese Seite enthält keine Ergebnisse" + +msgid "Enter a valid value." +msgstr "Bitte einen gültigen Wert eingeben." + +msgid "Enter a valid URL." +msgstr "Bitte eine gültige Adresse eingeben." + +msgid "Enter a valid integer." +msgstr "Bitte eine gültige Ganzzahl eingeben." + +msgid "Enter a valid email address." +msgstr "Bitte gültige E-Mail-Adresse eingeben." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Bitte ein gültiges Kürzel, bestehend aus Buchstaben, Ziffern, Unterstrichen " +"und Bindestrichen, eingeben." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Bitte ein gültiges Kürzel eingeben, bestehend aus Buchstaben (Unicode), " +"Ziffern, Unter- und Bindestrichen." + +msgid "Enter a valid IPv4 address." +msgstr "Bitte eine gültige IPv4-Adresse eingeben." + +msgid "Enter a valid IPv6 address." +msgstr "Bitte eine gültige IPv6-Adresse eingeben." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Bitte eine gültige IPv4- oder IPv6-Adresse eingeben" + +msgid "Enter only digits separated by commas." +msgstr "Bitte nur durch Komma getrennte Ziffern eingeben." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Bitte sicherstellen, dass der Wert %(limit_value)s ist. (Er ist " +"%(show_value)s.)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Dieser Wert muss kleiner oder gleich %(limit_value)s sein." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Dieser Wert muss größer oder gleich %(limit_value)s sein." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bitte sicherstellen, dass der Wert aus mindestens %(limit_value)d Zeichen " +"besteht. (Er besteht aus %(show_value)d Zeichen.)" +msgstr[1] "" +"Bitte sicherstellen, dass der Wert aus mindestens %(limit_value)d Zeichen " +"besteht. (Er besteht aus %(show_value)d Zeichen.)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bitte sicherstellen, dass der Wert aus höchstens %(limit_value)d Zeichen " +"besteht. (Er besteht aus %(show_value)d Zeichen.)" +msgstr[1] "" +"Bitte sicherstellen, dass der Wert aus höchstens %(limit_value)d Zeichen " +"besteht. (Er besteht aus %(show_value)d Zeichen.)" + +msgid "Enter a number." +msgstr "Bitte eine Zahl eingeben." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Ziffer enthält." +msgstr[1] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Ziffern enthält." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Dezimalstelle enthält." +msgstr[1] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Dezimalstellen enthält." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Ziffer vor dem Komma " +"enthält." +msgstr[1] "" +"Bitte sicherstellen, dass der Wert höchstens %(max)s Ziffern vor dem Komma " +"enthält." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Dateiendung „%(extension)s“ ist nicht erlaubt. Erlaubte Dateiendungen sind: " +"„%(allowed_extensions)s“." + +msgid "Null characters are not allowed." +msgstr "Nullzeichen sind nicht erlaubt." + +msgid "and" +msgstr "und" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s mit diesem %(field_labels)s existiert bereits." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Wert %(value)r ist keine gültige Option." + +msgid "This field cannot be null." +msgstr "Dieses Feld darf nicht null sein." + +msgid "This field cannot be blank." +msgstr "Dieses Feld darf nicht leer sein." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s mit diesem %(field_label)s existiert bereits." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s muss für %(date_field_label)s %(lookup_type)s eindeutig sein." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Feldtyp: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Wert „%(value)s“ muss entweder True oder False sein." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Wert „%(value)s“ muss True, False oder None sein." + +msgid "Boolean (Either True or False)" +msgstr "Boolescher Wert (True oder False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Zeichenkette (bis zu %(max_length)s Zeichen)" + +msgid "Comma-separated integers" +msgstr "Kommaseparierte Liste von Ganzzahlen" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Wert „%(value)s“ hat ein ungültiges Datumsformat. Es muss YYYY-MM-DD " +"entsprechen." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Wert „%(value)s“ hat das korrekte Format (YYYY-MM-DD) aber ein ungültiges " +"Datum." + +msgid "Date (without time)" +msgstr "Datum (ohne Uhrzeit)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Wert „%(value)s“ hat ein ungültiges Format. Es muss YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] entsprechen." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Wert „%(value)s“ hat das korrekte Format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) aber eine ungültige Zeit-/Datumsangabe." + +msgid "Date (with time)" +msgstr "Datum (mit Uhrzeit)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Wert „%(value)s“ muss eine Dezimalzahl sein." + +msgid "Decimal number" +msgstr "Dezimalzahl" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Wert „%(value)s“ hat ein ungültiges Format. Es muss der Form [DD] [HH:" +"[MM:]]ss[.uuuuuu] entsprechen." + +msgid "Duration" +msgstr "Zeitspanne" + +msgid "Email address" +msgstr "E-Mail-Adresse" + +msgid "File path" +msgstr "Dateipfad" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Wert „%(value)s“ muss eine Fließkommazahl sein." + +msgid "Floating point number" +msgstr "Gleitkommazahl" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Wert „%(value)s“ muss eine Ganzzahl sein." + +msgid "Integer" +msgstr "Ganzzahl" + +msgid "Big (8 byte) integer" +msgstr "Große Ganzzahl (8 Byte)" + +msgid "Small integer" +msgstr "Kleine Ganzzahl" + +msgid "IPv4 address" +msgstr "IPv4-Adresse" + +msgid "IP address" +msgstr "IP-Adresse" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Wert „%(value)s“ muss entweder None, True oder False sein." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolescher Wert (True, False oder None)" + +msgid "Positive big integer" +msgstr "Positive große Ganzzahl" + +msgid "Positive integer" +msgstr "Positive Ganzzahl" + +msgid "Positive small integer" +msgstr "Positive kleine Ganzzahl" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Kürzel (bis zu %(max_length)s)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Wert „%(value)s“ hat ein ungültiges Format. Es muss HH:MM[:ss[.uuuuuu]] " +"entsprechen." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Wert „%(value)s“ hat das korrekte Format (HH:MM[:ss[.uuuuuu]]), aber ist " +"eine ungültige Zeitangabe." + +msgid "Time" +msgstr "Zeit" + +msgid "URL" +msgstr "Adresse (URL)" + +msgid "Raw binary data" +msgstr "Binärdaten" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "Wert „%(value)s“ ist keine gültige UUID." + +msgid "Universally unique identifier" +msgstr "Universally Unique Identifier" + +msgid "File" +msgstr "Datei" + +msgid "Image" +msgstr "Bild" + +msgid "A JSON object" +msgstr "Ein JSON-Objekt" + +msgid "Value must be valid JSON." +msgstr "Wert muss gültiges JSON sein." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Objekt vom Typ %(model)s mit %(field)s %(value)r existiert nicht." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremdschlüssel (Typ definiert durch verknüpftes Feld)" + +msgid "One-to-one relationship" +msgstr "1:1-Beziehung" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-Beziehung" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-Beziehungen" + +msgid "Many-to-many relationship" +msgstr "n:m-Beziehung" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Dieses Feld ist zwingend erforderlich." + +msgid "Enter a whole number." +msgstr "Bitte eine ganze Zahl eingeben." + +msgid "Enter a valid date." +msgstr "Bitte ein gültiges Datum eingeben." + +msgid "Enter a valid time." +msgstr "Bitte eine gültige Uhrzeit eingeben." + +msgid "Enter a valid date/time." +msgstr "Bitte ein gültiges Datum und Uhrzeit eingeben." + +msgid "Enter a valid duration." +msgstr "Bitte eine gültige Zeitspanne eingeben." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Die Anzahl der Tage muss zwischen {min_days} und {max_days} sein." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Es wurde keine Datei übertragen. Überprüfen Sie das Encoding des Formulars." + +msgid "No file was submitted." +msgstr "Es wurde keine Datei übertragen." + +msgid "The submitted file is empty." +msgstr "Die übertragene Datei ist leer." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bitte sicherstellen, dass der Dateiname aus höchstens %(max)d Zeichen " +"besteht. (Er besteht aus %(length)d Zeichen.)" +msgstr[1] "" +"Bitte sicherstellen, dass der Dateiname aus höchstens %(max)d Zeichen " +"besteht. (Er besteht aus %(length)d Zeichen.)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Bitte wählen Sie entweder eine Datei aus oder wählen Sie „Löschen“, nicht " +"beides." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Bitte ein gültiges Bild hochladen. Die hochgeladene Datei ist kein Bild oder " +"ist defekt." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Bitte eine gültige Auswahl treffen. %(value)s ist keine gültige Auswahl." + +msgid "Enter a list of values." +msgstr "Bitte eine Liste mit Werten eingeben." + +msgid "Enter a complete value." +msgstr "Bitte einen vollständigen Wert eingeben." + +msgid "Enter a valid UUID." +msgstr "Bitte eine gültige UUID eingeben." + +msgid "Enter a valid JSON." +msgstr "Bitte ein gültiges JSON-Objekt eingeben." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Verstecktes Feld %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Daten für das Management-Formular fehlen oder wurden manipuliert. Fehlende " +"Felder: %(field_names)s. Bitte erstellen Sie einen Bug-Report falls der " +"Fehler dauerhaft besteht." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Bitte höchstens %d Formular abschicken." +msgstr[1] "Bitte höchstens %d Formulare abschicken." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Bitte mindestens %d Formular abschicken." +msgstr[1] "Bitte mindestens %d Formulare abschicken." + +msgid "Order" +msgstr "Reihenfolge" + +msgid "Delete" +msgstr "Löschen" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Bitte die doppelten Daten für %(field)s korrigieren." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Bitte die doppelten Daten für %(field)s korrigieren, das eindeutig sein muss." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Bitte die doppelten Daten für %(field_name)s korrigieren, da es für " +"%(lookup)s in %(date_field)s eindeutig sein muss." + +msgid "Please correct the duplicate values below." +msgstr "Bitte die unten aufgeführten doppelten Werte korrigieren." + +msgid "The inline value did not match the parent instance." +msgstr "Der Inline-Wert passt nicht zur übergeordneten Instanz." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Bitte eine gültige Auswahl treffen. Dies ist keine gültige Auswahl." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "„%(pk)s“ ist kein gültiger Wert." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s konnte mit der Zeitzone %(current_timezone)s nicht eindeutig " +"interpretiert werden, da es doppeldeutig oder eventuell inkorrekt ist." + +msgid "Clear" +msgstr "Zurücksetzen" + +msgid "Currently" +msgstr "Derzeit" + +msgid "Change" +msgstr "Ändern" + +msgid "Unknown" +msgstr "Unbekannt" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nein" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "Ja,Nein,Vielleicht" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d Byte" +msgstr[1] "%(size)d Bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "nachm." + +msgid "a.m." +msgstr "vorm." + +msgid "PM" +msgstr "nachm." + +msgid "AM" +msgstr "vorm." + +msgid "midnight" +msgstr "Mitternacht" + +msgid "noon" +msgstr "Mittag" + +msgid "Monday" +msgstr "Montag" + +msgid "Tuesday" +msgstr "Dienstag" + +msgid "Wednesday" +msgstr "Mittwoch" + +msgid "Thursday" +msgstr "Donnerstag" + +msgid "Friday" +msgstr "Freitag" + +msgid "Saturday" +msgstr "Samstag" + +msgid "Sunday" +msgstr "Sonntag" + +msgid "Mon" +msgstr "Mo" + +msgid "Tue" +msgstr "Di" + +msgid "Wed" +msgstr "Mi" + +msgid "Thu" +msgstr "Do" + +msgid "Fri" +msgstr "Fr" + +msgid "Sat" +msgstr "Sa" + +msgid "Sun" +msgstr "So" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgid "jan" +msgstr "Jan" + +msgid "feb" +msgstr "Feb" + +msgid "mar" +msgstr "Mär" + +msgid "apr" +msgstr "Apr" + +msgid "may" +msgstr "Mai" + +msgid "jun" +msgstr "Jun" + +msgid "jul" +msgstr "Jul" + +msgid "aug" +msgstr "Aug" + +msgid "sep" +msgstr "Sep" + +msgid "oct" +msgstr "Okt" + +msgid "nov" +msgstr "Nov" + +msgid "dec" +msgstr "Dez" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "März" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dez." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "März" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Dezember" + +msgid "This is not a valid IPv6 address." +msgstr "Dies ist keine gültige IPv6-Adresse." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "oder" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d Jahr" +msgstr[1] "%(num)d Jahre" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d Monat" +msgstr[1] "%(num)d Monate" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d Woche" +msgstr[1] "%(num)d Wochen" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d Tag" +msgstr[1] "%(num)d Tage" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d Stunde" +msgstr[1] "%(num)d Stunden" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d Minute" +msgstr[1] "%(num)d Minuten" + +msgid "Forbidden" +msgstr "Verboten" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-Verifizierung fehlgeschlagen. Anfrage abgebrochen." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Sie sehen diese Fehlermeldung, da diese HTTPS-Seite einen „Referer“-Header " +"von Ihrem Webbrowser erwartet, aber keinen erhalten hat. Dieser Header ist " +"aus Sicherheitsgründen notwendig, um sicherzustellen, dass Ihr Webbrowser " +"nicht von Dritten missbraucht wird." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Falls Sie Ihren Webbrowser so konfiguriert haben, dass „Referer“-Header " +"nicht gesendet werden, müssen Sie diese Funktion mindestens für diese Seite, " +"für sichere HTTPS-Verbindungen oder für „Same-Origin“-Verbindungen " +"reaktivieren." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Wenn der Tag „“ oder der " +"„Referrer-Policy: no-referrer“-Header verwendet wird, entfernen Sie sie " +"bitte. Der „Referer“-Header wird zur korrekten CSRF-Verifizierung benötigt. " +"Falls es datenschutzrechtliche Gründe gibt, benutzen Sie bitte Alternativen " +"wie „“ für Links zu Drittseiten." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Sie sehen Diese Nachricht, da diese Seite einen CSRF-Cookie beim Verarbeiten " +"von Formulardaten benötigt. Dieses Cookie ist aus Sicherheitsgründen " +"notwendig, um sicherzustellen, dass Ihr Webbrowser nicht von Dritten " +"missbraucht wird." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Falls Sie Cookies in Ihren Webbrowser deaktiviert haben, müssen Sie sie " +"mindestens für diese Seite oder für „Same-Origin“-Verbindungen reaktivieren." + +msgid "More information is available with DEBUG=True." +msgstr "Mehr Information ist verfügbar mit DEBUG=True." + +msgid "No year specified" +msgstr "Kein Jahr angegeben" + +msgid "Date out of range" +msgstr "Datum außerhalb des zulässigen Bereichs" + +msgid "No month specified" +msgstr "Kein Monat angegeben" + +msgid "No day specified" +msgstr "Kein Tag angegeben" + +msgid "No week specified" +msgstr "Keine Woche angegeben" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Keine %(verbose_name_plural)s verfügbar" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"In der Zukunft liegende %(verbose_name_plural)s sind nicht verfügbar, da " +"%(class_name)s.allow_future auf False gesetzt ist." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ungültiges Datum „%(datestr)s“ für das Format „%(format)s“" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Konnte keine %(verbose_name)s mit diesen Parametern finden." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Weder ist dies die letzte Seite („last“) noch konnte sie in einen " +"ganzzahligen Wert umgewandelt werden." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ungültige Seite (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Leere Liste und „%(class_name)s.allow_empty“ ist False." + +msgid "Directory indexes are not allowed here." +msgstr "Dateilisten sind untersagt." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ ist nicht vorhanden" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Verzeichnis %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Die Installation war erfolgreich. Herzlichen Glückwunsch!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Versionshinweise für Django %(version)s " +"anzeigen" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Diese Seite ist sichtbar weil in der Settings-Datei DEBUG = True steht und die URLs noch nicht konfiguriert " +"sind." + +msgid "Django Documentation" +msgstr "Django-Dokumentation" + +msgid "Topics, references, & how-to’s" +msgstr "Themen, Referenz, & Kurzanleitungen" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Eine Umfrage-App" + +msgid "Get started with Django" +msgstr "Los geht's mit Django" + +msgid "Django Community" +msgstr "Django-Community" + +msgid "Connect, get help, or contribute" +msgstr "Nimm Kontakt auf, erhalte Hilfe oder arbeite an Django mit" diff --git a/venv/Lib/site-packages/django/conf/locale/de/__init__.py b/venv/Lib/site-packages/django/conf/locale/de/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/de/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/de/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43477d808d322864f3c80ef96c3981508f2378ba GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lN~(T*d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04RPm%K!iX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/de/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/de/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b76d2656f5bc793db70cb4e6c269222c9294099 GIT binary patch literal 669 zcmZXR&2F1O5XV_Q9BjvN9ko4HzHqSA;JX!7B>@a-0E-V*tWXhV*A}iZ5sM>*$H}d) z6sf275~)v+Lsf8U7puG4+4=uwXLd)M^?Dtu8o$1LpZ{bi>PIb_gRaEKYLVI?3Q`C_ zfM`e~1~Q0+EaD)CTCjyq;0fYUdr3onNukaIfNj);9dru2s0UBcnL~~GWoso4)uCT9 z+9WAEFJf5xOikGulpGRM(J$M(tqwkc>hh8okSL_0;2*sE5mOHKbSP*O!I%h6`T9R3 z3XAgWm_CE|k3f8?dZx@#4|ZkARYKLW4atRFS2qr#Uq_l?;46|H8kXs5`-E37N|yXR z8916{yJ55Hn}6u2oT}SSebNstHTg`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lN@~2bhkkr~W?p7Ve7s&kee^79Xlup(4y;7uT4G#gW3(RK4{z z`WTgZ>M2sMz2s1pjcXUHv)Y;Y|8{3~SDSac9iq0M@4wF@mLPs$(KMua7zMqK9isgdC-BUfQMah3eOy3*sEGAai9+T ziq^(y)!B&w&S^{;3@R3indn#Tr+^n9$olY#6QC$$qTnC0`ypNR_jDj=W5E~;PW9|R zBnpe_?3g~1uYTdjef{)6*TEci0WV9g5~`MMNG{-A-8hIIUTK29uSj-iSf;D(3(j{+ zmi#^GJDO#?VYBP=f9R;4s@o3U>4%mYzEhO9;Nq!FH)o#vx1R%E9IkQ9`?5084e2Iy zl$m5pu4RJ@SF=1vGUW#AnVxa2*x}T+yqRuJzYs2WncN@^V(>t0XRiyJT}0+@$jWrDbw?8^s@^Wr6~@iZ;u96z7}8Xr0H= xIvK$voM@v(USv^;#M}FC+*Ovt?K*jle-*u~9m6nWb5JZrGQYVN!!smD{sH%2u!8^q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/de_CH/formats.py b/venv/Lib/site-packages/django/conf/locale/de_CH/formats.py new file mode 100644 index 000000000..f42dd4873 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/de_CH/formats.py @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + # "%d. %B %Y", # '25. October 2006' + # "%d. %b. %Y", # '25. Oct. 2006' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' +] + +# these are the separators for non-monetary numbers. For monetary numbers, +# the DECIMAL_SEPARATOR is a . (decimal point) and the THOUSAND_SEPARATOR is a +# ' (single quote). +# For details, please refer to the documentation and the following link: +# https://www.bk.admin.ch/bk/de/home/dokumentation/sprachen/hilfsmittel-textredaktion/schreibweisungen.html +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7ca18752f4c4e6d9400c462e37947f8785698e0 GIT binary patch literal 29802 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

G9lbsy$svEh@gXgZz_2f+cKwD1P$*`H+1q% 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, 2016-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-23 23:47+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Afrikaanšćina" + +msgid "Arabic" +msgstr "Arabšćina" + +msgid "Algerian Arabic" +msgstr "Algeriska arabšćina" + +msgid "Asturian" +msgstr "Asturišćina" + +msgid "Azerbaijani" +msgstr "Azerbajdžanišćina" + +msgid "Bulgarian" +msgstr "Bulgaršćina" + +msgid "Belarusian" +msgstr "Běłorušćina" + +msgid "Bengali" +msgstr "Bengalšćina" + +msgid "Breton" +msgstr "Bretońšćina" + +msgid "Bosnian" +msgstr "Bosnišćina" + +msgid "Catalan" +msgstr "Katalańšćina" + +msgid "Czech" +msgstr "Češćina" + +msgid "Welsh" +msgstr "Kymrišćina" + +msgid "Danish" +msgstr "Dańšćina" + +msgid "German" +msgstr "Nimšćina" + +msgid "Lower Sorbian" +msgstr "Dolnoserbšćina" + +msgid "Greek" +msgstr "Grichišćina" + +msgid "English" +msgstr "Engelšćina" + +msgid "Australian English" +msgstr "Awstralska engelšćina" + +msgid "British English" +msgstr "Britiska engelšćina" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Špańšćina" + +msgid "Argentinian Spanish" +msgstr "Argentinska špańšćina" + +msgid "Colombian Spanish" +msgstr "Kolumbiska špańšćina" + +msgid "Mexican Spanish" +msgstr "Mexikańska špańšćina" + +msgid "Nicaraguan Spanish" +msgstr "Nikaraguaska špańšćina" + +msgid "Venezuelan Spanish" +msgstr "Venezolaniska špańšćina" + +msgid "Estonian" +msgstr "Estnišćina" + +msgid "Basque" +msgstr "Baskišćina" + +msgid "Persian" +msgstr "Persišćina" + +msgid "Finnish" +msgstr "Finšćina" + +msgid "French" +msgstr "Francojšćina" + +msgid "Frisian" +msgstr "Frizišćina" + +msgid "Irish" +msgstr "Iršćina" + +msgid "Scottish Gaelic" +msgstr "Šotiska gelišćina" + +msgid "Galician" +msgstr "Galicišćina" + +msgid "Hebrew" +msgstr "Hebrejšćina" + +msgid "Hindi" +msgstr "Hindišćina" + +msgid "Croatian" +msgstr "Chorwatšćina" + +msgid "Upper Sorbian" +msgstr "Górnoserbšćina" + +msgid "Hungarian" +msgstr "Hungoršćina" + +msgid "Armenian" +msgstr "Armeńšćina" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonešćina" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandšćina" + +msgid "Italian" +msgstr "Italšćina" + +msgid "Japanese" +msgstr "Japańšćina" + +msgid "Georgian" +msgstr "Georgišćina" + +msgid "Kabyle" +msgstr "Kabylšćina" + +msgid "Kazakh" +msgstr "Kazachšćina" + +msgid "Khmer" +msgstr "Rěc Khmerow" + +msgid "Kannada" +msgstr "Kannadišćina" + +msgid "Korean" +msgstr "Korejańšćina" + +msgid "Kyrgyz" +msgstr "Kirgišćina" + +msgid "Luxembourgish" +msgstr "Luxemburgšćina" + +msgid "Lithuanian" +msgstr "Litawšćina" + +msgid "Latvian" +msgstr "Letišćina" + +msgid "Macedonian" +msgstr "Makedońšćina" + +msgid "Malayalam" +msgstr "Malajalam" + +msgid "Mongolian" +msgstr "Mongolšćina" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malayzišćina" + +msgid "Burmese" +msgstr "Myanmaršćina" + +msgid "Norwegian Bokmål" +msgstr "Norwegski Bokmål" + +msgid "Nepali" +msgstr "Nepalšćina" + +msgid "Dutch" +msgstr "¨Nižozemšćina" + +msgid "Norwegian Nynorsk" +msgstr "Norwegski Nynorsk" + +msgid "Ossetic" +msgstr "Osetšćina" + +msgid "Punjabi" +msgstr "Pundžabi" + +msgid "Polish" +msgstr "Pólšćina" + +msgid "Portuguese" +msgstr "Portugišćina" + +msgid "Brazilian Portuguese" +msgstr "Brazilska portugišćina" + +msgid "Romanian" +msgstr "Rumunšćina" + +msgid "Russian" +msgstr "Rušćina" + +msgid "Slovak" +msgstr "Słowakšćina" + +msgid "Slovenian" +msgstr "Słowjeńšćina" + +msgid "Albanian" +msgstr "Albanšćina" + +msgid "Serbian" +msgstr "Serbišćina" + +msgid "Serbian Latin" +msgstr "Serbišćina, łatyńska" + +msgid "Swedish" +msgstr "Šwedšćina" + +msgid "Swahili" +msgstr "Suahelšćina" + +msgid "Tamil" +msgstr "Tamilšćina" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tadźikišćina" + +msgid "Thai" +msgstr "Thaišćina" + +msgid "Turkmen" +msgstr "Turkmeńšćina" + +msgid "Turkish" +msgstr "Turkojšćina" + +msgid "Tatar" +msgstr "Tataršćina" + +msgid "Udmurt" +msgstr "Udmurtšćina" + +msgid "Ukrainian" +msgstr "Ukrainšćina" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbekšćina" + +msgid "Vietnamese" +msgstr "Vietnamšćina" + +msgid "Simplified Chinese" +msgstr "Zjadnorjona chinšćina" + +msgid "Traditional Chinese" +msgstr "Tradicionelna chinšćina" + +msgid "Messages" +msgstr "Powěsći" + +msgid "Site Maps" +msgstr "Wopśimjeśowy pśeglěd sedła" + +msgid "Static Files" +msgstr "Statiske dataje" + +msgid "Syndication" +msgstr "Syndikacija" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Toś ten numer boka njejo ceła licba" + +msgid "That page number is less than 1" +msgstr "Numer boka jo mjeńšy ako 1" + +msgid "That page contains no results" +msgstr "Toś ten bok njewopśimujo wuslědki" + +msgid "Enter a valid value." +msgstr "Zapódajśo płaśiwu gódnotu." + +msgid "Enter a valid URL." +msgstr "Zapódajśo płaśiwy URL." + +msgid "Enter a valid integer." +msgstr "Zapódajśo płaśiwu cełu licbu." + +msgid "Enter a valid email address." +msgstr "Zapódajśo płaśiwu e-mailowu adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Zapódajśo płaśiwe „adresowe mě“, kótarež jano wopśimujo pismiki, licby, " +"pódsmužki abo wězawki." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Zapódajśo płaśiwe „adresowe mě“, kótarež jano wopśimujo unicodowe pismiki, " +"licby, pódmužki abo wězawki." + +msgid "Enter a valid IPv4 address." +msgstr "Zapódajśo płaśiwu IPv4-adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Zapódajśo płaśiwu IPv6-adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Zapódajśo płaśiwu IPv4- abo IPv6-adresu." + +msgid "Enter only digits separated by commas." +msgstr "Zapódajśo jano cyfry źělone pśez komy." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Zawěsććo toś tu gódnotu jo %(limit_value)s (jo %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Zawěsććo, až toś ta gódnota jo mjeńša ako abo to samske ako %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Zawěsććo, až toś ta gódnota jo wětša ako abo to samske ako %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zawěsććo, až toś ta gódnota ma nanejmjenjej %(limit_value)d znamuško (ma " +"%(show_value)d)." +msgstr[1] "" +"Zawěsććo, až toś ta gódnota ma nanejmjenjej %(limit_value)d znamušce (ma " +"%(show_value)d)." +msgstr[2] "" +"Zawěsććo, až toś ta gódnota ma nanejmjenjej %(limit_value)d znamuška (ma " +"%(show_value)d)." +msgstr[3] "" +"Zawěsććo, až toś ta gódnota ma nanejmjenjej %(limit_value)d znamuškow (ma " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zawěććo, až toś ta gódnota ma maksimalnje %(limit_value)d znamuško (ma " +"%(show_value)d)." +msgstr[1] "" +"Zawěććo, až toś ta gódnota ma maksimalnje %(limit_value)d znamušce (ma " +"%(show_value)d)." +msgstr[2] "" +"Zawěććo, až toś ta gódnota ma maksimalnje %(limit_value)d znamuška (ma " +"%(show_value)d)." +msgstr[3] "" +"Zawěććo, až toś ta gódnota ma maksimalnje %(limit_value)d znamuškow (ma " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Zapódajśo licbu." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Zawěsććo, až njejo wěcej ako %(max)s cyfry dogromady." +msgstr[1] "Zawěsććo, až njejo wěcej ako %(max)s cyfrowu dogromady." +msgstr[2] "Zawěsććo, až njejo wěcej ako %(max)s cyfrow dogromady." +msgstr[3] "Zawěsććo, až njejo wěcej ako %(max)s cyfrow dogromady." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Zawěsććo, až njejo wěcej ako %(max)s decimalnego městna." +msgstr[1] "Zawěsććo, až njejo wěcej ako %(max)s decimalneju městnowu." +msgstr[2] "Zawěsććo, až njejo wěcej ako %(max)s decimalnych městnow." +msgstr[3] "Zawěsććo, až njejo wěcej ako %(max)s decimalnych městnow." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Zawěsććo, až njejo wěcej ako %(max)s cyfry pśed decimalneju komu." +msgstr[1] "Zawěsććo, až njejo wěcej ako %(max)s cyfrowu pśed decimalneju komu." +msgstr[2] "Zawěsććo, až njejo wěcej ako %(max)s cyfrow pśed decimalneju komu." +msgstr[3] "Zawěsććo, až njejo wěcej ako %(max)s cyfrow pśed decimalneju komu." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Datajowy sufiks „%(extension)s“ njejo dowólony. Dowólone sufikse su: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Znamuška nul njejsu dowólone." + +msgid "and" +msgstr "a" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s z toś tym %(field_labels)s južo eksistěrujo." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Gódnota %(value)r njejo płaśiwa wóleńska móžnosć." + +msgid "This field cannot be null." +msgstr "Toś to pólo njamóžo nul byś." + +msgid "This field cannot be blank." +msgstr "Toś to pólo njamóžo prozne byś." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s z toś tym %(field_label)s južo eksistěrujo." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s musy za %(date_field_label)s %(lookup_type)s jadnorazowy byś." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Typ póla: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Gódnota „%(value)s“ musy pak True pak False byś." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Gódnota „%(value)s“ musy pak True, False pak None byś." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (pak True pak False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Znamuškowy rjeśazk (až %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Pśez komu źělone cełe licby" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Gódnota „%(value)s“ ma njepłaśiwy datumowy format. Musy we formaśe DD.MM." +"YYYY byś." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Gódnota „%(value)s“ ma korektny format (DD.MM.YYYY), ale jo njepłaśiwy datum." + +msgid "Date (without time)" +msgstr "Datum (bźez casa)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe DD.MM.YYYY HH:MM[:" +"ss[.uuuuuu]][TZ] byś." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Gódnota „%(value)s“ ma korektny format (DD.MM.YYYY HH:MM[:ss[.uuuuuu]][TZ]), " +"ale jo njepłaśiwy datum/cas." + +msgid "Date (with time)" +msgstr "Datum (z casom)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Gódnota „%(value)s“ musy decimalna licba byś." + +msgid "Decimal number" +msgstr "Decimalna licba" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Gódnota „%(value)s“ ma njepłaśiwy format. Musy we formaśe [DD] " +"[[HH:]MM:]ss[.uuuuuu] byś." + +msgid "Duration" +msgstr "Traśe" + +msgid "Email address" +msgstr "E-mailowa adresa" + +msgid "File path" +msgstr "Datajowa sćažka" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Gódnota „%(value)s“ musy typ float měś." + +msgid "Floating point number" +msgstr "Licba běžeceje komy" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Gódnota „%(value)s“ musy ceła licba byś." + +msgid "Integer" +msgstr "Integer" + +msgid "Big (8 byte) integer" +msgstr "Big (8 bajtow) integer" + +msgid "Small integer" +msgstr "Mała ceła licba" + +msgid "IPv4 address" +msgstr "IPv4-adresa" + +msgid "IP address" +msgstr "IP-adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Gódnota „%(value)s“ musy pak None, True pak False byś." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (pak True, False pak None)" + +msgid "Positive big integer" +msgstr "Pozitiwna wjelika ceła licba" + +msgid "Positive integer" +msgstr "Pozitiwna ceła licba" + +msgid "Positive small integer" +msgstr "Pozitiwna mała ceła licba" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Adresowe mě (až %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe HH:MM[:ss[." +"uuuuuu]] byś." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Gódnota „%(value)s“ ma korektny format (HH:MM[:ss[.uuuuuu]]), ale jo " +"njepłaśiwy cas." + +msgid "Time" +msgstr "Cas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Gropne binarne daty" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "„%(value)s“ njejo płaśiwy UUID." + +msgid "Universally unique identifier" +msgstr "Uniwerselnje jadnorazowy identifikator" + +msgid "File" +msgstr "Dataja" + +msgid "Image" +msgstr "Woraz" + +msgid "A JSON object" +msgstr "JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Gódnota musy płaśiwy JSON byś." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Instanca %(model)s z %(field)s %(value)r njeeksistěrujo." + +msgid "Foreign Key (type determined by related field)" +msgstr "Cuzy kluc (typ póstaja se pśez wótpowědne pólo)" + +msgid "One-to-one relationship" +msgstr "Póśěg jaden jaden" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Póśěg %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Póśěgi %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Póśěg wjele wjele" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Toś to pólo jo trěbne." + +msgid "Enter a whole number." +msgstr "Zapódajśo cełu licbu." + +msgid "Enter a valid date." +msgstr "Zapódajśo płaśiwy datum." + +msgid "Enter a valid time." +msgstr "Zapódajśo płaśiwy cas." + +msgid "Enter a valid date/time." +msgstr "Zapódajśo płaśiwy datum/cas." + +msgid "Enter a valid duration." +msgstr "Zapódaśe płaśiwe traśe." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Licba dnjow musy mjazy {min_days} a {max_days} byś." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Dataja njejo se wótpósłała. Pśeglědujśo koděrowański typ na formularje. " + +msgid "No file was submitted." +msgstr "Žedna dataja jo se wótpósłała." + +msgid "The submitted file is empty." +msgstr "Wótpósłana dataja jo prozna." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Zawěsććo, až toś to datajowe mě ma maksimalnje %(max)d znamuško (ma " +"%(length)d)." +msgstr[1] "" +"Zawěsććo, až toś to datajowe mě ma maksimalnje %(max)d znamušce (ma " +"%(length)d)." +msgstr[2] "" +"Zawěsććo, až toś to datajowe mě ma maksimalnje %(max)d znamuška (ma " +"%(length)d)." +msgstr[3] "" +"Zawěsććo, až toś to datajowe mě ma maksimalnje %(max)d znamuškow (ma " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Pšosym pak wótpósćelśo dataju pak stajśo kokulku do kontrolnego kašćika, " +"njecyńśo wobej." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Nagrajśo płaśiwy wobraz. Dataja, kótaruž sćo nagrał, pak njejo wobraz był " +"pak jo wobškóźony wobraz." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Wubjeŕśo płaśiwu wóleńsku móžnosć. %(value)s njejo jadna z k dispoziciji " +"stojecych wóleńskich móžnosćow." + +msgid "Enter a list of values." +msgstr "Zapódajśo lisćinu gódnotow." + +msgid "Enter a complete value." +msgstr "Zapódajśo dopołnu gódnotu." + +msgid "Enter a valid UUID." +msgstr "Zapódajśo płaśiwy UUID." + +msgid "Enter a valid JSON." +msgstr "Zapódajśo płaśiwy JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Schowane pólo %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Daty ManagementForm feluju abo su wobškóźone. Felujuce póla: " +"%(field_names)s. Móžośo zmólkowu rozpšawu pisaś, jolic problem dalej " +"eksistěrujo." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Pšosym wótposćelśo maksimalnje %d formular." +msgstr[1] "Pšosym wótposćelśo maksimalnje %d formulara." +msgstr[2] "Pšosym wótposćelśo maksimalnje %d formulary." +msgstr[3] "Pšosym wótposćelśo maksimalnje %d formularow." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Pšosym wótposćelśo minimalnje %d formular." +msgstr[1] "Pšosym wótposćelśo minimalnje %d formulara." +msgstr[2] "Pšosym wótposćelśo minimalnje %d formulary." +msgstr[3] "Pšosym wótposćelśo minimalnje %d formularow." + +msgid "Order" +msgstr "Rěd" + +msgid "Delete" +msgstr "Lašowaś" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Pšosym korigěrujśo dwójne daty za %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Pšosym korigěrujśo dwójne daty za %(field)s, kótarež muse jadnorazowe byś." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Pšosym korigěrujśo dwójne daty za %(field_name)s, kótarež muse za %(lookup)s " +"w %(date_field)s jadnorazowe byś." + +msgid "Please correct the duplicate values below." +msgstr "Pšosym korigěrujśo slědujuce dwójne gódnoty." + +msgid "The inline value did not match the parent instance." +msgstr "Gódnota inline nadrědowanej instance njewótpowědujo." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Wubjeŕśo płaśiwu wóleńsku móžnosć. Toś ta wóleńska móžnosć njejo žedna z " +"wóleńskich móžnosćow." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "„%(pk)s“ njejo płaśiwa gódnota." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s njedajo se w casowej conje %(current_timezone)s " +"interpretěrowaś; jo dwójozmysłowy abo snaź njeeksistěrujo." + +msgid "Clear" +msgstr "Lašowaś" + +msgid "Currently" +msgstr "Tuchylu" + +msgid "Change" +msgstr "Změniś" + +msgid "Unknown" +msgstr "Njeznaty" + +msgid "Yes" +msgstr "Jo" + +msgid "No" +msgstr "Ně" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "jo,ně,snaź" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajta" +msgstr[2] "%(size)d bajty" +msgstr[3] "%(size)d bajtow" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "wótpołdnja" + +msgid "a.m." +msgstr "dopołdnja" + +msgid "PM" +msgstr "wótpołdnja" + +msgid "AM" +msgstr "dopołdnja" + +msgid "midnight" +msgstr "połnoc" + +msgid "noon" +msgstr "połdnjo" + +msgid "Monday" +msgstr "Pónjeźele" + +msgid "Tuesday" +msgstr "Wałtora" + +msgid "Wednesday" +msgstr "Srjoda" + +msgid "Thursday" +msgstr "Stwórtk" + +msgid "Friday" +msgstr "Pětk" + +msgid "Saturday" +msgstr "Sobota" + +msgid "Sunday" +msgstr "Njeźela" + +msgid "Mon" +msgstr "Pón" + +msgid "Tue" +msgstr "Wał" + +msgid "Wed" +msgstr "Srj" + +msgid "Thu" +msgstr "Stw" + +msgid "Fri" +msgstr "Pět" + +msgid "Sat" +msgstr "Sob" + +msgid "Sun" +msgstr "Nje" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Měrc" + +msgid "April" +msgstr "Apryl" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Junij" + +msgid "July" +msgstr "Julij" + +msgid "August" +msgstr "Awgust" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "Nowember" + +msgid "December" +msgstr "December" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "měr" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "awg" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "now" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Měrc" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Apryl" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junij" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julij" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Awg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Now." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Měrc" + +msgctxt "alt. month" +msgid "April" +msgstr "Apryl" + +msgctxt "alt. month" +msgid "May" +msgstr "Maj" + +msgctxt "alt. month" +msgid "June" +msgstr "Junij" + +msgctxt "alt. month" +msgid "July" +msgstr "Julij" + +msgctxt "alt. month" +msgid "August" +msgstr "Awgust" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "Nowember" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "To njejo płaśiwa IPv6-adresa." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "abo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)d lěśe" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mjasec" +msgstr[1] "%(num)d mjaseca" +msgstr[2] "%(num)d mjasece" +msgstr[3] "%(num)dmjasecow" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tyźeń" +msgstr[1] "%(num)d tyźenja" +msgstr[2] "%(num)d tyźenje" +msgstr[3] "%(num)d tyźenjow" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d źeń " +msgstr[1] "%(num)d dnja" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d góźina" +msgstr[1] "%(num)d góźinje" +msgstr[2] "%(num)d góźiny" +msgstr[3] "%(num)d góźin" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuśe" +msgstr[2] "%(num)d minuty" +msgstr[3] "%(num)d minutow" + +msgid "Forbidden" +msgstr "Zakazany" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-pśeglědanje njejo se raźiło. Napšašowanje jo se pśetergnuło." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Wiźiśo toś tu powěźeńku, dokulaž toś to HTTPS-sedło trjeba \"Referer header" +"\", aby se pśez waš webwobglědowak słało, ale žedna njejo se pósłała. Toś ta " +"głowa jo trěbna z pśicynow wěstoty, aby so zawěsćiło, až waš wobglědowak " +"njekaprujo se wót tśeśich." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Jolic sćo swój wobglědowak tak konfigurěrował, aby se głowy 'Referer' " +"znjemóžnili, zmóžniśo je pšosym zasej, nanejmjenjej za toś to sedło, za " +"HTTPS-zwiski abo za napšašowanja 'same-origin'." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jolic woznamjenje wužywaśo " +"abo głowu „Referrer-Policy: no-referrer“ zapśimujośo, wótwónoźćo je. CSRF-" +"šćit pomina se głowu „Referer“, aby striktnu kontrolu referera pśewjasć. " +"Jolic se wó swóju priwatnosć staraśo, wužywajśo alternatiwy ako za wótkazy k sedłam tśeśich." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Wiźiśo toś tu powěźeńku, dokulaž toś to HTTPS-sedło trjeba CSRF-cookie, aby " +"formulary wótpósłało. Toś ten cookie jo trěbna z pśicynow wěstoty, aby so " +"zawěsćiło, až waš wobglědowak njekaprujo se wót tśeśich." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Jolic sćo swój wobglědowak tak konfigurěrował, aby cookieje znjemóžnili, " +"zmóžniśo je pšosym zasej, nanejmjenjej za toś to sedło abo za napšašowanja " +"„same-origin“." + +msgid "More information is available with DEBUG=True." +msgstr "Dalšne informacije su k dispoziciji z DEBUG=True." + +msgid "No year specified" +msgstr "Žedno lěto pódane" + +msgid "Date out of range" +msgstr "Datum zwenka wobcerka" + +msgid "No month specified" +msgstr "Žeden mjasec pódany" + +msgid "No day specified" +msgstr "Žeden źeń pódany" + +msgid "No week specified" +msgstr "Žeden tyźeń pódany" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Žedne %(verbose_name_plural)s k dispoziciji" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Pśichodne %(verbose_name_plural)s njejo k dispoziciji, dokulaž " +"%(class_name)s.allow_future jo False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Njepłaśiwy „%(format)s“ za datumowy znamuškowy rjeśazk „%(datestr)s“ pódany" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Žedno %(verbose_name)s namakane, kótarež wótpowědujo napšašowanjeju." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Bok njejo „last“, ani njedajo se do „int“ konwertěrowaś." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Njepłaśiwy bok (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Prozna lisćina a „%(class_name)s.allow_empty“ jo False." + +msgid "Directory indexes are not allowed here." +msgstr "Zapisowe indekse njejsu how dowólone." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ njeeksistěrujo" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalacija jo była wuspěšna! Gratulacija!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Wersijowe informacije za Django %(version)s " +"pokazaś" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Wiźiśo toś ten bok, dokulaž DEBUG=True jo w swójej dataji nastajenjow a njejsćo konfigurěrował " +"URL." + +msgid "Django Documentation" +msgstr "Dokumentacija Django" + +msgid "Topics, references, & how-to’s" +msgstr "Temy, reference a rozpokazanja" + +msgid "Tutorial: A Polling App" +msgstr "Rozpokazanje: Napšašowańske nałoženje" + +msgid "Get started with Django" +msgstr "Prědne kšace z Django" + +msgid "Django Community" +msgstr "Zgromaźeństwo Django" + +msgid "Connect, get help, or contribute" +msgstr "Zwězajśo, wobsarajśo se pomoc abo źěłajśo sobu" diff --git a/venv/Lib/site-packages/django/conf/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b07550997aa8ca2f849671ac36c859422aedd0d GIT binary patch literal 33648 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�P$YjS^iosJo zQEfz@Nvv#mAaQ1^c;rpjQ&iK7PwvBZyeAt6nN)Soj3Pah&uogkc=Z#SN2*O-8@>}f zV{LO-epr;(d*^GL#T?W@++|-haWr3DmHb?>I?;+k=#}aSFNJ6!MnHu=F z^BBK3poxJ#r-eyMW4$_rk7t_Uy1%37phlX>ImRuCxthO+RdqSBQ=1NpmK1|L~qY*A~1x(5ly%NJ1v)Q19N!%*t;fE7k^9 zMlC`KgBO&auu81w)uBCsR8&nYPoBjB(c-iGCwU|0dP<%G!o`bEbS9QyO#AJt?OgA6 zrfzjknrg)xgpv;w916OLxnh5TqKP zDssDwF={7G+Oh>J6z{Gm&_V<%)2XP;g(*gk0t~%dCfh+(MHWw)vC-Q;+84#|s%FKG z&KkZ3);GZF#hkV+tP1*aG~@ns81HKmk?c&S)$gLDaB6jRLo!cqS;aTTYkUe>w~)?8 zhy!7<lJU;hhX-u5H3)=Phiuq8pf-L3IS!#HSTy&-;zGvwPj4kSMxF0VF1oqBi% zJwUmBp&O+jn)U);L8jOjU(FEQwx{+xjO#1Os=RURs@y{v?Nai3wQNd%7q6cfZ^hh_?6p1md#W;_JVqSv6MZ63s~EXqQohqxY)q zf$B8Co+hjU?68P2VGH~_1`1Fi#8zO;9+&Q|KNNzQ#X!V{#Z!wxmrtQN!HM;Mq!WdF zNUE)g5xY1);$L@mMb~auWFzl%nHk|9Q)qNZZ`oo5hK44t+CLVL-3gG1+R!@8iPv$z zrz9WT*|D{nPEDdY(uuKppBhWHH2LkesHJ%F^X>BLenFzB2?KrpH@}&h7z^{-px8_AsVwuvFh8|aCTNfjXde7)&ng<%ls7d{ zma1px?D|Rl2OQFzLj#Y?T6-|#&0EhOQ8!xpWynp_h>o=U>QqA^r}pUG_vyo^6MxXs z+}u1&EjcPBVOpc50W9kSjQ48VS zTSEWc10T4DHAhN5Y{O#&ErO{^F%wiSopw)vm|sp#+A zYoeUhtTrhX6lpezx8a?bKDgs(wvbR(^$jW50WV70bkYV^vTCA~xkq&4bkGJ*3wYY% z8vIy;aNQx^U`8w>b^z?-ew&Kt-Pv4q!V|`^`Y}*UPeK=JL_21Ug%xy~Xv7?;K@Cu~ zmCCC={T6c<)#-GNh#C>m0h#RGTu8zl}zx`l;)IeHDK;XgqSLmh`BoRbBDhZQZ zvsZ@%`j|Pksn$07!sZ&)Fd>MIO40FivQ?G!o|P=IIy-5mVd_hi;H%aQI~;Y#ah!O` z!856Ji<+#{dL&L}UJsDRIMh>E#3^UewEDktpw_EOvPil|RkK1g!hWV#uC3^cZS*pa z6w>Dw;(=--1=vJiPE?Z1eom!~vj!T4QOxqUqw*K$Vu6k|h-O5N7RkyVO`s{~fJ2%H zL;4ubUUR$}%j~s0{@H(8!AwN$W-)&N)BUxEcsHPiH4Ga!h%exnU;Ixe+^(d;0C63w zjtIF)OIpxUK2vD!?qUA%#%ZGFU4NA~*Gfy2whJVfYla4h=r&lq%&Z3Pu3axJZvds% zFM#$!5x7D!XlQO!;pr$`mjw@P@&PHzT3HSy}IwMpvrs#6TYQx zeEy^arM5#MiG`^5Byp>uNRWNDQ8+Nu4Y*Q9x7skYmR6}ggja9NA9YVec)xDlHt^lH z4eTrU!SpX_{+u760FHWwdg47h1;)+zf+Hg1rGd{?f<(qn8RM~M zaG;2YSMFj)2a=icmXW9=CpIG`QgU8o?CcvF_s1EA#Veq#Z0?K&2?_YfrklUdP%)O{0;x(%|!9FNyT(p0E=nq2+!1F$u^Yr_ zeq@x{qT_O1Vxk853mCSjvO!SM5o{|p-4g0TUcJht#h}`1<;C7ziQ3M{smknN%x`4j zXNA}~b+*j+qp!YZx!87>v{#LU@lcwU7 Z5E0zz$n1}Xya{bo{)h-|xj!QE{{R{?, 2013 +# Dimitris Glezos , 2011,2013,2017 +# Fotis Athineos , 2021 +# Giannis Meletakis , 2015 +# Jannis Leidel , 2011 +# Nick Mavrakis , 2017-2020 +# Nikolas Demiridis , 2014 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +# Pãnoș , 2016 +# Serafeim Papastefanos , 2016 +# Stavros Korokithakis , 2014,2016 +# Yorgos Pagles , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Αφρικάνς" + +msgid "Arabic" +msgstr "Αραβικά" + +msgid "Algerian Arabic" +msgstr "Αραβικά Αλγερίας" + +msgid "Asturian" +msgstr "Αστούριας" + +msgid "Azerbaijani" +msgstr "Γλώσσα Αζερμπαϊτζάν" + +msgid "Bulgarian" +msgstr "Βουλγαρικά" + +msgid "Belarusian" +msgstr "Λευκορώσικα" + +msgid "Bengali" +msgstr "Μπενγκάλι" + +msgid "Breton" +msgstr "Βρετονικά" + +msgid "Bosnian" +msgstr "Βοσνιακά" + +msgid "Catalan" +msgstr "Καταλανικά" + +msgid "Czech" +msgstr "Τσέχικα" + +msgid "Welsh" +msgstr "Ουαλικά" + +msgid "Danish" +msgstr "Δανέζικα" + +msgid "German" +msgstr "Γερμανικά" + +msgid "Lower Sorbian" +msgstr "Κάτω Σορβικά" + +msgid "Greek" +msgstr "Ελληνικά" + +msgid "English" +msgstr "Αγγλικά" + +msgid "Australian English" +msgstr "Αγγλικά Αυστραλίας" + +msgid "British English" +msgstr "Αγγλικά Βρετανίας" + +msgid "Esperanto" +msgstr "Εσπεράντο" + +msgid "Spanish" +msgstr "Ισπανικά" + +msgid "Argentinian Spanish" +msgstr "Ισπανικά Αργεντινής" + +msgid "Colombian Spanish" +msgstr "Ισπανικά Κολομβίας" + +msgid "Mexican Spanish" +msgstr "Μεξικανική διάλεκτος Ισπανικών" + +msgid "Nicaraguan Spanish" +msgstr "Ισπανικά Νικαράγουας " + +msgid "Venezuelan Spanish" +msgstr "Ισπανικά Βενεζουέλας" + +msgid "Estonian" +msgstr "Εσθονικά" + +msgid "Basque" +msgstr "Βάσκικα" + +msgid "Persian" +msgstr "Περσικά" + +msgid "Finnish" +msgstr "Φινλανδικά" + +msgid "French" +msgstr "Γαλλικά" + +msgid "Frisian" +msgstr "Frisian" + +msgid "Irish" +msgstr "Ιρλανδικά" + +msgid "Scottish Gaelic" +msgstr "Σκωτσέζικα Γαελικά" + +msgid "Galician" +msgstr "Γαελικά" + +msgid "Hebrew" +msgstr "Εβραϊκά" + +msgid "Hindi" +msgstr "Ινδικά" + +msgid "Croatian" +msgstr "Κροατικά" + +msgid "Upper Sorbian" +msgstr "Άνω Σορβικά" + +msgid "Hungarian" +msgstr "Ουγγρικά" + +msgid "Armenian" +msgstr "Αρμενικά" + +msgid "Interlingua" +msgstr "Ιντερλίνγκουα" + +msgid "Indonesian" +msgstr "Ινδονησιακά" + +msgid "Igbo" +msgstr "Ίγκμπο" + +msgid "Ido" +msgstr "Ίντο" + +msgid "Icelandic" +msgstr "Ισλανδικά" + +msgid "Italian" +msgstr "Ιταλικά" + +msgid "Japanese" +msgstr "Γιαπωνέζικα" + +msgid "Georgian" +msgstr "Γεωργιανά" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Καζακστά" + +msgid "Khmer" +msgstr "Χμερ" + +msgid "Kannada" +msgstr "Κανάντα" + +msgid "Korean" +msgstr "Κορεάτικα" + +msgid "Kyrgyz" +msgstr "Κιργιζικά" + +msgid "Luxembourgish" +msgstr "Λουξεμβουργιανά" + +msgid "Lithuanian" +msgstr "Λιθουανικά" + +msgid "Latvian" +msgstr "Λεττονικά" + +msgid "Macedonian" +msgstr "Μακεδονικά" + +msgid "Malayalam" +msgstr "Μαλαγιαλάμ" + +msgid "Mongolian" +msgstr "Μογγολικά" + +msgid "Marathi" +msgstr "Μαράθι" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Βιρμανικά" + +msgid "Norwegian Bokmål" +msgstr "Νορβηγικά Μποκμάλ" + +msgid "Nepali" +msgstr "Νεπαλέζικα" + +msgid "Dutch" +msgstr "Ολλανδικά" + +msgid "Norwegian Nynorsk" +msgstr "Νορβηγική διάλεκτος Nynorsk - Νεονορβηγική" + +msgid "Ossetic" +msgstr "Οσσετικά" + +msgid "Punjabi" +msgstr "Πουντζάμπι" + +msgid "Polish" +msgstr "Πολωνικά" + +msgid "Portuguese" +msgstr "Πορτογαλικά" + +msgid "Brazilian Portuguese" +msgstr "Πορτογαλικά - διάλεκτος Βραζιλίας" + +msgid "Romanian" +msgstr "Ρουμανικά" + +msgid "Russian" +msgstr "Ρωσικά" + +msgid "Slovak" +msgstr "Σλοβακικά" + +msgid "Slovenian" +msgstr "Σλοβενικά" + +msgid "Albanian" +msgstr "Αλβανικά" + +msgid "Serbian" +msgstr "Σερβικά" + +msgid "Serbian Latin" +msgstr "Σέρβικα Λατινικά" + +msgid "Swedish" +msgstr "Σουηδικά" + +msgid "Swahili" +msgstr "Σουαχίλι" + +msgid "Tamil" +msgstr "Διάλεκτος Ταμίλ" + +msgid "Telugu" +msgstr "Τελούγκου" + +msgid "Tajik" +msgstr "Τατζικικά" + +msgid "Thai" +msgstr "Ταϊλάνδης" + +msgid "Turkmen" +msgstr "Τουρκμενικά" + +msgid "Turkish" +msgstr "Τουρκικά" + +msgid "Tatar" +msgstr "Ταταρικά" + +msgid "Udmurt" +msgstr "Ουντμουρτικά" + +msgid "Ukrainian" +msgstr "Ουκρανικά" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Ουζμπεκικά" + +msgid "Vietnamese" +msgstr "Βιετναμέζικα" + +msgid "Simplified Chinese" +msgstr "Απλοποιημένα Κινέζικα" + +msgid "Traditional Chinese" +msgstr "Παραδοσιακά Κινέζικα" + +msgid "Messages" +msgstr "Μηνύματα" + +msgid "Site Maps" +msgstr "Χάρτες Ιστότοπου" + +msgid "Static Files" +msgstr "Στατικά Αρχεία" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Ο αριθμός αυτής της σελίδας δεν είναι ακέραιος" + +msgid "That page number is less than 1" +msgstr "Ο αριθμός αυτής της σελίδας είναι μικρότερος του 1" + +msgid "That page contains no results" +msgstr "Η σελίδα αυτή δεν περιέχει αποτελέσματα" + +msgid "Enter a valid value." +msgstr "Εισάγετε μια έγκυρη τιμή." + +msgid "Enter a valid URL." +msgstr "Εισάγετε ένα έγκυρο URL." + +msgid "Enter a valid integer." +msgstr "Εισάγετε έναν έγκυρο ακέραιο." + +msgid "Enter a valid email address." +msgstr "Εισάγετε μια έγκυρη διεύθυνση ηλ. ταχυδρομείου." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Εισάγετε ένα 'slug' που να αποτελείται από γράμματα, αριθμούς, παύλες ή κάτω " +"παύλες." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Εισάγετε ένα 'slug' που να αποτελείται από Unicode γράμματα, παύλες ή κάτω " +"παύλες." + +msgid "Enter a valid IPv4 address." +msgstr "Εισάγετε μια έγκυρη IPv4 διεύθυνση." + +msgid "Enter a valid IPv6 address." +msgstr "Εισάγετε μία έγκυρη IPv6 διεύθυνση" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Εισάγετε μία έγκυρη IPv4 ή IPv6 διεύθυνση" + +msgid "Enter only digits separated by commas." +msgstr "Εισάγετε μόνο ψηφία χωρισμένα με κόμματα." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Βεβαιωθείτε ότι η τιμή είναι %(limit_value)s (η τιμή που καταχωρήσατε είναι " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Βεβαιωθείτε ότι η τιμή είναι μικρότερη ή ίση από %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Βεβαιωθείτε ότι η τιμή είναι μεγαλύτερη ή ίση από %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Βεβαιωθείται πως η τιμή αυτή έχει τουλάχιστον %(limit_value)d χαρακτήρες " +"(έχει %(show_value)d)." +msgstr[1] "" +"Βεβαιωθείτε πως η τιμή έχει τουλάχιστον %(limit_value)d χαρακτήρες (έχει " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Βεβαιωθείται πως η τιμή αυτή έχει τοπολύ %(limit_value)d χαρακτήρες (έχει " +"%(show_value)d)." +msgstr[1] "" +"Βεβαιωθείτε πως η τιμή έχει το πολύ %(limit_value)d χαρακτήρες (έχει " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Εισάγετε έναν αριθμό." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +"Σιγουρευτείτε οτι τα σύνολο των ψηφίων δεν είναι παραπάνω από %(max)s" +msgstr[1] "" +"Σιγουρευτείτε οτι τα σύνολο των ψηφίων δεν είναι παραπάνω από %(max)s" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Σιγουρευτείτε ότι το δεκαδικό ψηφίο δεν είναι παραπάνω από %(max)s." +msgstr[1] "Σιγουρευτείτε ότι τα δεκαδικά ψηφία δεν είναι παραπάνω από %(max)s." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Βεβαιωθείτε ότι δεν υπάρχουν πάνω από %(max)s ψηφία πριν την υποδιαστολή." +msgstr[1] "" +"Βεβαιωθείτε ότι δεν υπάρχουν πάνω από %(max)s ψηφία πριν την υποδιαστολή." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Η επέκταση '%(extension)s' του αρχείου δεν επιτρέπεται. Οι επιτρεπόμενες " +"επεκτάσεις είναι: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Δεν επιτρέπονται null (μηδενικοί) χαρακτήρες" + +msgid "and" +msgstr "και" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s με αυτή την %(field_labels)s υπάρχει ήδη." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Η τιμή %(value)r δεν είναι έγκυρη επιλογή." + +msgid "This field cannot be null." +msgstr "Το πεδίο αυτό δεν μπορεί να είναι μηδενικό (null)." + +msgid "This field cannot be blank." +msgstr "Το πεδίο αυτό δεν μπορεί να είναι κενό." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s με αυτό το %(field_label)s υπάρχει ήδη." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s πρέπει να είναι μοναδική για %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Πεδίο τύπου: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Η τιμή '%(value)s' πρέπει να είναι True ή False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Η τιμή '%(value)s' πρέπει να είναι True, False, ή None." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Είτε Αληθές ή Ψευδές)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Συμβολοσειρά (μέχρι %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Ακέραιοι χωρισμένοι με κόμματα" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Η τιμή του '%(value)s' έχει μια λανθασμένη μορφή ημερομηνίας. Η ημερομηνία " +"θα πρέπει να είναι στην μορφή YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Η τιμή '%(value)s' είναι στην σωστή μορφή (YYYY-MM-DD) αλλά είναι μια " +"λανθασμένη ημερομηνία." + +msgid "Date (without time)" +msgstr "Ημερομηνία (χωρίς την ώρα)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Η τιμή του '%(value)s' έχει μια λανθασμένη μορφή. Η ημερομηνία/ώρα θα πρέπει " +"να είναι στην μορφή YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Η τιμή '%(value)s' έχει τη σωστή μορφή (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"αλλά δεν αντιστοιχεί σε σωστή ημερομηνία και ώρα." + +msgid "Date (with time)" +msgstr "Ημερομηνία (με ώρα)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Η τιμή '%(value)s' πρέπει να είναι δεκαδικός αριθμός." + +msgid "Decimal number" +msgstr "Δεκαδικός αριθμός" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Η τιμή '%(value)s' έχει εσφαλμένη μορφή. Πρέπει να είναι της μορφής [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Διάρκεια" + +msgid "Email address" +msgstr "Ηλεκτρονική διεύθυνση" + +msgid "File path" +msgstr "Τοποθεσία αρχείου" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Η '%(value)s' τιμή πρέπει να είναι δεκαδικός." + +msgid "Floating point number" +msgstr "Αριθμός κινητής υποδιαστολής" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Η τιμή '%(value)s' πρέπει να είναι ακέραιος." + +msgid "Integer" +msgstr "Ακέραιος" + +msgid "Big (8 byte) integer" +msgstr "Μεγάλος ακέραιος - big integer (8 bytes)" + +msgid "Small integer" +msgstr "Μικρός ακέραιος" + +msgid "IPv4 address" +msgstr "Διεύθυνση IPv4" + +msgid "IP address" +msgstr "IP διεύθυνση" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Η τιμή '%(value)s' πρέπει να είναι None, True ή False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Αληθές, Ψευδές, ή τίποτα)" + +msgid "Positive big integer" +msgstr "Μεγάλος θετικός ακέραιος" + +msgid "Positive integer" +msgstr "Θετικός ακέραιος" + +msgid "Positive small integer" +msgstr "Θετικός μικρός ακέραιος" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (μέχρι %(max_length)s)" + +msgid "Text" +msgstr "Κείμενο" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Η τιμή '%(value)s' έχει εσφαλμένη μορφή. Πρέπει να είναι της μορφής HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Η τιμή '%(value)s' έχει τη σωστή μορφή (HH:MM[:ss[.uuuuuu]]) αλλά δεν " +"αντιστοιχή σε σωστή ώρα." + +msgid "Time" +msgstr "Ώρα" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Δυαδικά δεδομένα" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "'%(value)s' δεν είναι ένα έγκυρο UUID." + +msgid "Universally unique identifier" +msgstr "Καθολικά μοναδικό αναγνωριστικό" + +msgid "File" +msgstr "Αρχείο" + +msgid "Image" +msgstr "Εικόνα" + +msgid "A JSON object" +msgstr "Ένα αντικείμενο JSON" + +msgid "Value must be valid JSON." +msgstr "Η τιμή πρέπει να είναι έγκυρο JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Το μοντέλο %(model)s με την τιμή %(value)r του πεδίου %(field)s δεν υπάρχει." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (ο τύπος καθορίζεται από το πεδίο του συσχετισμού)" + +msgid "One-to-one relationship" +msgstr "Σχέση ένα-προς-ένα" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "σχέση %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "σχέσεις %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Σχέση πολλά-προς-πολλά" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Αυτό το πεδίο είναι απαραίτητο." + +msgid "Enter a whole number." +msgstr "Εισάγετε έναν ακέραιο αριθμό." + +msgid "Enter a valid date." +msgstr "Εισάγετε μια έγκυρη ημερομηνία." + +msgid "Enter a valid time." +msgstr "Εισάγετε μια έγκυρη ώρα." + +msgid "Enter a valid date/time." +msgstr "Εισάγετε μια έγκυρη ημερομηνία/ώρα." + +msgid "Enter a valid duration." +msgstr "Εισάγετε μια έγκυρη διάρκεια." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Ο αριθμός των ημερών πρέπει να είναι μεταξύ {min_days} και {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Δεν έχει υποβληθεί κάποιο αρχείο. Ελέγξτε τον τύπο κωδικοποίησης στη φόρμα." + +msgid "No file was submitted." +msgstr "Δεν υποβλήθηκε κάποιο αρχείο." + +msgid "The submitted file is empty." +msgstr "Το αρχείο που υποβλήθηκε είναι κενό." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Βεβαιωθείται πως το όνομα του αρχείου έχει το πολύ %(max)d χαρακτήρα (το " +"παρόν έχει %(length)d)." +msgstr[1] "" +"Βεβαιωθείται πως το όνομα του αρχείου έχει το πολύ %(max)d χαρακτήρα (το " +"παρόν έχει %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Βεβαιωθείτε ότι είτε έχετε επιλέξει ένα αρχείο για αποστολή είτε έχετε " +"επιλέξει την εκκαθάριση του πεδίου. Δεν είναι δυνατή η επιλογή και των δύο " +"ταυτοχρόνως." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Βεβαιωθείτε ότι το αρχείο που έχετε επιλέξει για αποστολή είναι αρχείο " +"εικόνας. Το τρέχον είτε δεν ήταν εικόνα είτε έχει υποστεί φθορά." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Βεβαιωθείτε ότι έχετε επιλέξει μία έγκυρη επιλογή. Η τιμή %(value)s δεν " +"είναι διαθέσιμη προς επιλογή." + +msgid "Enter a list of values." +msgstr "Εισάγετε μια λίστα τιμών." + +msgid "Enter a complete value." +msgstr "Εισάγετε μια πλήρης τιμή" + +msgid "Enter a valid UUID." +msgstr "Εισάγετε μια έγκυρη UUID." + +msgid "Enter a valid JSON." +msgstr "Εισάγετε ένα έγκυρο JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Κρυφό πεδίο %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Παρακαλώ υποβάλλετε το πολύ %d φόρμα." +msgstr[1] "Παρακαλώ υποβάλλετε το πολύ %d φόρμες." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Παρακαλώ υποβάλλετε τουλάχιστον %d φόρμα." +msgstr[1] "Παρακαλώ υποβάλλετε τουλάχιστον %d φόρμες." + +msgid "Order" +msgstr "Ταξινόμηση" + +msgid "Delete" +msgstr "Διαγραφή" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Στο %(field)s έχετε ξαναεισάγει τα ίδια δεδομένα." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Στο %(field)s έχετε ξαναεισάγει τα ίδια δεδομένα. Θα πρέπει να εμφανίζονται " +"μία φορά. " + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Στο %(field_name)s έχετε ξαναεισάγει τα ίδια δεδομένα. Θα πρέπει να " +"εμφανίζονται μία φορά για το %(lookup)s στο %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Έχετε ξαναεισάγει την ίδια τιμη. Βεβαιωθείτε ότι είναι μοναδική." + +msgid "The inline value did not match the parent instance." +msgstr "Η τιμή δεν είναι ίση με την αντίστοιχη τιμή του γονικού object." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Επιλέξτε μια έγκυρη επιλογή. Η επιλογή αυτή δεν είναι μία από τις διαθέσιμες " +"επιλογές." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" δεν είναι έγκυρη τιμή." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Η ημερομηνία %(datetime)s δεν μπόρεσε να μετατραπεί στην ζώνη ώρας " +"%(current_timezone)s. Ίσως να είναι ασαφής ή να μην υπάρχει." + +msgid "Clear" +msgstr "Εκκαθάριση" + +msgid "Currently" +msgstr "Τώρα" + +msgid "Change" +msgstr "Επεξεργασία" + +msgid "Unknown" +msgstr "Άγνωστο" + +msgid "Yes" +msgstr "Ναι" + +msgid "No" +msgstr "Όχι" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ναι,όχι,ίσως" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bytes" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "μμ." + +msgid "a.m." +msgstr "πμ." + +msgid "PM" +msgstr "ΜΜ" + +msgid "AM" +msgstr "ΠΜ" + +msgid "midnight" +msgstr "μεσάνυχτα" + +msgid "noon" +msgstr "μεσημέρι" + +msgid "Monday" +msgstr "Δευτέρα" + +msgid "Tuesday" +msgstr "Τρίτη" + +msgid "Wednesday" +msgstr "Τετάρτη" + +msgid "Thursday" +msgstr "Πέμπτη" + +msgid "Friday" +msgstr "Παρασκευή" + +msgid "Saturday" +msgstr "Σάββατο" + +msgid "Sunday" +msgstr "Κυριακή" + +msgid "Mon" +msgstr "Δευ" + +msgid "Tue" +msgstr "Τρί" + +msgid "Wed" +msgstr "Τετ" + +msgid "Thu" +msgstr "Πέμ" + +msgid "Fri" +msgstr "Παρ" + +msgid "Sat" +msgstr "Σαβ" + +msgid "Sun" +msgstr "Κυρ" + +msgid "January" +msgstr "Ιανουάριος" + +msgid "February" +msgstr "Φεβρουάριος" + +msgid "March" +msgstr "Μάρτιος" + +msgid "April" +msgstr "Απρίλιος" + +msgid "May" +msgstr "Μάιος" + +msgid "June" +msgstr "Ιούνιος" + +msgid "July" +msgstr "Ιούλιος" + +msgid "August" +msgstr "Αύγουστος" + +msgid "September" +msgstr "Σεπτέμβριος" + +msgid "October" +msgstr "Οκτώβριος" + +msgid "November" +msgstr "Νοέμβριος" + +msgid "December" +msgstr "Δεκέμβριος" + +msgid "jan" +msgstr "Ιαν" + +msgid "feb" +msgstr "Φεβ" + +msgid "mar" +msgstr "Μάρ" + +msgid "apr" +msgstr "Απρ" + +msgid "may" +msgstr "Μάι" + +msgid "jun" +msgstr "Ιούν" + +msgid "jul" +msgstr "Ιούλ" + +msgid "aug" +msgstr "Αύγ" + +msgid "sep" +msgstr "Σεπ" + +msgid "oct" +msgstr "Οκτ" + +msgid "nov" +msgstr "Νοέ" + +msgid "dec" +msgstr "Δεκ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ιαν." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Φεβ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Μάρτιος" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Απρίλ." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Μάιος" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Ιούν." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Ιούλ." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Αύγ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Σεπτ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Οκτ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Νοέμ." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Δεκ." + +msgctxt "alt. month" +msgid "January" +msgstr "Ιανουαρίου" + +msgctxt "alt. month" +msgid "February" +msgstr "Φεβρουαρίου" + +msgctxt "alt. month" +msgid "March" +msgstr "Μαρτίου" + +msgctxt "alt. month" +msgid "April" +msgstr "Απριλίου" + +msgctxt "alt. month" +msgid "May" +msgstr "Μαΐου" + +msgctxt "alt. month" +msgid "June" +msgstr "Ιουνίου" + +msgctxt "alt. month" +msgid "July" +msgstr "Ιουλίου" + +msgctxt "alt. month" +msgid "August" +msgstr "Αυγούστου" + +msgctxt "alt. month" +msgid "September" +msgstr "Σεπτεμβρίου" + +msgctxt "alt. month" +msgid "October" +msgstr "Οκτωβρίου" + +msgctxt "alt. month" +msgid "November" +msgstr "Νοεμβρίου" + +msgctxt "alt. month" +msgid "December" +msgstr "Δεκεμβρίου" + +msgid "This is not a valid IPv6 address." +msgstr "Αυτή δεν είναι έγκυρη διεύθυνση IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ή" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Απαγορευμένο" + +msgid "CSRF verification failed. Request aborted." +msgstr "Η πιστοποίηση CSRF απέτυχε. Το αίτημα ματαιώθηκε." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Αν οι 'Referer' headers είναι απενεργοποιημένοι στον browser σας από εσάς, " +"παρακαλούμε να τους ξανά-ενεργοποιήσετε, τουλάχιστον για αυτό το site ή για " +"τις συνδέσεις HTTPS ή για τα 'same-origin' requests." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Αν χρησιμοποιείτε την ετικέτα ή συμπεριλαμβάνετε την κεφαλίδα (header) 'Referrer-Policy: no-referrer', " +"παρακαλούμε αφαιρέστε τα. Η προστασία CSRF απαιτεί την κεφαλίδα 'Referer' να " +"κάνει αυστηρό έλεγχο στον referer. Αν κύριο μέλημα σας είναι η ιδιωτικότητα, " +"σκεφτείτε να χρησιμοποιήσετε εναλλακτικές μεθόδους όπως για συνδέσμους από άλλες ιστοσελίδες." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Βλέπετε αυτό το μήνυμα επειδή αυτή η σελίδα απαιτεί ένα CSRF cookie, όταν " +"κατατίθενται φόρμες. Αυτό το cookie είναι απαραίτητο για λόγους ασφαλείας, " +"για να εξασφαλιστεί ότι ο browser δεν έχει γίνει hijacked από τρίτους." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Αν τα cookies είναι απενεργοποιημένα στον browser σας από εσάς, παρακαλούμε " +"να τα ξανά-ενεργοποιήσετε, τουλάχιστον για αυτό το site ή για τα 'same-" +"origin' requests." + +msgid "More information is available with DEBUG=True." +msgstr "Περισσότερες πληροφορίες είναι διαθέσιμες με DEBUG=True." + +msgid "No year specified" +msgstr "Δεν έχει οριστεί χρονιά" + +msgid "Date out of range" +msgstr "Ημερομηνία εκτός εύρους" + +msgid "No month specified" +msgstr "Δεν έχει οριστεί μήνας" + +msgid "No day specified" +msgstr "Δεν έχει οριστεί μέρα" + +msgid "No week specified" +msgstr "Δεν έχει οριστεί εβδομάδα" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Δεν υπάρχουν διαθέσιμα %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Μελλοντικά %(verbose_name_plural)s δεν είναι διαθέσιμα διότι δεν έχει τεθεί " +"το %(class_name)s.allow_future." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Λανθασμένη μορφή ημερομηνίας '%(datestr)s' για την επιλεγμένη μορφή " +"'%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Δεν βρέθηκαν %(verbose_name)s που να ικανοποιούν την αναζήτηση." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Η σελίδα δεν έχει την τιμή 'last' υποδηλώνοντας την τελευταία σελίδα, ούτε " +"μπορεί να μετατραπεί σε ακέραιο." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Άκυρη σελίδα (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Άδεια λίστα και το \"%(class_name)s.allow_empty\" είναι False." + +msgid "Directory indexes are not allowed here." +msgstr "Τα ευρετήρια καταλόγων δεν επιτρέπονται εδώ." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "Το \"%(path)s\" δεν υπάρχει" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Ευρετήριο του %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Η εγκατάσταση δούλεψε με επιτυχία! Συγχαρητήρια!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Δείτε τις σημειώσεις κυκλοφορίας για το " +"Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Βλέπετε αυτό το μήνυμα επειδή έχετε DEBUG=True στο αρχείο settings και δεν έχετε ρυθμίσει κανένα URL στο " +"αρχείο urls.py. Στρωθείτε στην δουλειά!" + +msgid "Django Documentation" +msgstr "Εγχειρίδιο Django" + +msgid "Topics, references, & how-to’s" +msgstr "Θέματα, αναφορές & \"πως να...\"" + +msgid "Tutorial: A Polling App" +msgstr "Εγχειρίδιο: Ένα App Ψηφοφορίας" + +msgid "Get started with Django" +msgstr "Ξεκινήστε με το Django" + +msgid "Django Community" +msgstr "Κοινότητα Django" + +msgid "Connect, get help, or contribute" +msgstr "Συνδεθείτε, λάβετε βοήθεια, ή συνεισφέρετε" diff --git a/venv/Lib/site-packages/django/conf/locale/el/__init__.py b/venv/Lib/site-packages/django/conf/locale/el/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/el/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/el/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2e9230190466f5fc3b54d190913a0b1a8573ca7 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYL0$K!Sw<04a|&(*OVf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/el/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/el/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d66ff45ba335fb124b3e462634273c722488b1bb GIT binary patch literal 766 zcmZXPO^=#D7{@_SQPytVv_16Xg@Z|zyV*3Q3kd1*5?<0UAtlI+Mk}&ma1;4Bz4as2 zq^F)X=_lAzM^|0!&Sai>{=b?3^UP$OPMad*@3-HRUo1ua*@^0?5%GyEybF*56r=$S zYoG=hz(5wTgw=^|z&dEoDA@Qx1CH!XvbP`y+OP$9*ajDncd7nGS%+dO23y)LoBOP1 zmyFsAN@mehA4m(T&y<`1MIjZ1;FN7h77T=RAi#dB>>kg1f;JM2k>HkZUZ9~cEnl6} zlX3IX_>8K?10}{o_p0%K^kh7vkMxHvJ$zuuzs!CI@UrA7k!m@HbcBrFdVPBeBb-`36XPbzPaukXVnx*3H& zMmY|hHO6r$XURH6s{)7Pd7-T*p*qiTF|hM&fs!J;N2~krc0LL5yg-AyIQbsW5DwuY zUd=Kw$yQTwnI-WOiD)TKvpkIpJiOa%x$888>m~X~lg{`(2`tOf)yc73o#k1YqyGUv Cki~TX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/el/formats.py b/venv/Lib/site-packages/django/conf/locale/el/formats.py new file mode 100644 index 000000000..25c8ef7d3 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/el/formats.py @@ -0,0 +1,34 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d/m/Y" +TIME_FORMAT = "P" +DATETIME_FORMAT = "d/m/Y P" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d/m/Y" +SHORT_DATETIME_FORMAT = "d/m/Y P" +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' + "%Y-%m-%d", # '2006-10-25' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", # '25/10/2006 14:30:59' + "%d/%m/%Y %H:%M:%S.%f", # '25/10/2006 14:30:59.000200' + "%d/%m/%Y %H:%M", # '25/10/2006 14:30' + "%d/%m/%y %H:%M:%S", # '25/10/06 14:30:59' + "%d/%m/%y %H:%M:%S.%f", # '25/10/06 14:30:59.000200' + "%d/%m/%y %H:%M", # '25/10/06 14:30' + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d4c976d2624f5caf10d5989cf58218bbd1bd925 GIT binary patch literal 356 zcmYL^&q@O^5Qi&z+M{O=Ie4;8O)0B0xB&q0w_}K)qVuH1Y-7m!Y=xZ< z2^P`11|GIHLglr{md_PT1DeDx%uGTp#!^i{Dn3G8Y9)tKNy#Ft@YD4@_nriqgPI7H z>q$P8WA>g*Oi%?wu{Ftu|M?=J`QReit+5CdzqBaHwl1#44bpwZfIi6?w_ylTR)bkViO(Y2`8CPYlPFV!Oyd#~T*9Rrk9`^J&gqIh#D8~gzx CN@0=! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..4aef1af29 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,1574 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: conf/global_settings.py:57 +msgid "Afrikaans" +msgstr "" + +#: conf/global_settings.py:58 +msgid "Arabic" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Algerian Arabic" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Asturian" +msgstr "" + +#: conf/global_settings.py:61 +msgid "Azerbaijani" +msgstr "" + +#: conf/global_settings.py:62 +msgid "Bulgarian" +msgstr "" + +#: conf/global_settings.py:63 +msgid "Belarusian" +msgstr "" + +#: conf/global_settings.py:64 +msgid "Bengali" +msgstr "" + +#: conf/global_settings.py:65 +msgid "Breton" +msgstr "" + +#: conf/global_settings.py:66 +msgid "Bosnian" +msgstr "" + +#: conf/global_settings.py:67 +msgid "Catalan" +msgstr "" + +#: conf/global_settings.py:68 +msgid "Czech" +msgstr "" + +#: conf/global_settings.py:69 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:70 +msgid "Danish" +msgstr "" + +#: conf/global_settings.py:71 +msgid "German" +msgstr "" + +#: conf/global_settings.py:72 +msgid "Lower Sorbian" +msgstr "" + +#: conf/global_settings.py:73 +msgid "Greek" +msgstr "" + +#: conf/global_settings.py:74 +msgid "English" +msgstr "" + +#: conf/global_settings.py:75 +msgid "Australian English" +msgstr "" + +#: conf/global_settings.py:76 +msgid "British English" +msgstr "" + +#: conf/global_settings.py:77 +msgid "Esperanto" +msgstr "" + +#: conf/global_settings.py:78 +msgid "Spanish" +msgstr "" + +#: conf/global_settings.py:79 +msgid "Argentinian Spanish" +msgstr "" + +#: conf/global_settings.py:80 +msgid "Colombian Spanish" +msgstr "" + +#: conf/global_settings.py:81 +msgid "Mexican Spanish" +msgstr "" + +#: conf/global_settings.py:82 +msgid "Nicaraguan Spanish" +msgstr "" + +#: conf/global_settings.py:83 +msgid "Venezuelan Spanish" +msgstr "" + +#: conf/global_settings.py:84 +msgid "Estonian" +msgstr "" + +#: conf/global_settings.py:85 +msgid "Basque" +msgstr "" + +#: conf/global_settings.py:86 +msgid "Persian" +msgstr "" + +#: conf/global_settings.py:87 +msgid "Finnish" +msgstr "" + +#: conf/global_settings.py:88 +msgid "French" +msgstr "" + +#: conf/global_settings.py:89 +msgid "Frisian" +msgstr "" + +#: conf/global_settings.py:90 +msgid "Irish" +msgstr "" + +#: conf/global_settings.py:91 +msgid "Scottish Gaelic" +msgstr "" + +#: conf/global_settings.py:92 +msgid "Galician" +msgstr "" + +#: conf/global_settings.py:93 +msgid "Hebrew" +msgstr "" + +#: conf/global_settings.py:94 +msgid "Hindi" +msgstr "" + +#: conf/global_settings.py:95 +msgid "Croatian" +msgstr "" + +#: conf/global_settings.py:96 +msgid "Upper Sorbian" +msgstr "" + +#: conf/global_settings.py:97 +msgid "Hungarian" +msgstr "" + +#: conf/global_settings.py:98 +msgid "Armenian" +msgstr "" + +#: conf/global_settings.py:99 +msgid "Interlingua" +msgstr "" + +#: conf/global_settings.py:100 +msgid "Indonesian" +msgstr "" + +#: conf/global_settings.py:101 +msgid "Igbo" +msgstr "" + +#: conf/global_settings.py:102 +msgid "Ido" +msgstr "" + +#: conf/global_settings.py:103 +msgid "Icelandic" +msgstr "" + +#: conf/global_settings.py:104 +msgid "Italian" +msgstr "" + +#: conf/global_settings.py:105 +msgid "Japanese" +msgstr "" + +#: conf/global_settings.py:106 +msgid "Georgian" +msgstr "" + +#: conf/global_settings.py:107 +msgid "Kabyle" +msgstr "" + +#: conf/global_settings.py:108 +msgid "Kazakh" +msgstr "" + +#: conf/global_settings.py:109 +msgid "Khmer" +msgstr "" + +#: conf/global_settings.py:110 +msgid "Kannada" +msgstr "" + +#: conf/global_settings.py:111 +msgid "Korean" +msgstr "" + +#: conf/global_settings.py:112 +msgid "Kyrgyz" +msgstr "" + +#: conf/global_settings.py:113 +msgid "Luxembourgish" +msgstr "" + +#: conf/global_settings.py:114 +msgid "Lithuanian" +msgstr "" + +#: conf/global_settings.py:115 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:116 +msgid "Macedonian" +msgstr "" + +#: conf/global_settings.py:117 +msgid "Malayalam" +msgstr "" + +#: conf/global_settings.py:118 +msgid "Mongolian" +msgstr "" + +#: conf/global_settings.py:119 +msgid "Marathi" +msgstr "" + +#: conf/global_settings.py:120 +msgid "Malay" +msgstr "" + +#: conf/global_settings.py:120 +msgid "Burmese" +msgstr "" + +#: conf/global_settings.py:121 +msgid "Norwegian Bokmål" +msgstr "" + +#: conf/global_settings.py:122 +msgid "Nepali" +msgstr "" + +#: conf/global_settings.py:123 +msgid "Dutch" +msgstr "" + +#: conf/global_settings.py:124 +msgid "Norwegian Nynorsk" +msgstr "" + +#: conf/global_settings.py:125 +msgid "Ossetic" +msgstr "" + +#: conf/global_settings.py:126 +msgid "Punjabi" +msgstr "" + +#: conf/global_settings.py:127 +msgid "Polish" +msgstr "" + +#: conf/global_settings.py:128 +msgid "Portuguese" +msgstr "" + +#: conf/global_settings.py:129 +msgid "Brazilian Portuguese" +msgstr "" + +#: conf/global_settings.py:130 +msgid "Romanian" +msgstr "" + +#: conf/global_settings.py:131 +msgid "Russian" +msgstr "" + +#: conf/global_settings.py:132 +msgid "Slovak" +msgstr "" + +#: conf/global_settings.py:133 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:134 +msgid "Albanian" +msgstr "" + +#: conf/global_settings.py:135 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:136 +msgid "Serbian Latin" +msgstr "" + +#: conf/global_settings.py:137 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:138 +msgid "Swahili" +msgstr "" + +#: conf/global_settings.py:139 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:140 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:141 +msgid "Tajik" +msgstr "" + +#: conf/global_settings.py:142 +msgid "Thai" +msgstr "" + +#: conf/global_settings.py:143 +msgid "Turkmen" +msgstr "" + +#: conf/global_settings.py:144 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:145 +msgid "Tatar" +msgstr "" + +#: conf/global_settings.py:146 +msgid "Udmurt" +msgstr "" + +#: conf/global_settings.py:147 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:148 +msgid "Urdu" +msgstr "" + +#: conf/global_settings.py:149 +msgid "Uzbek" +msgstr "" + +#: conf/global_settings.py:150 +msgid "Vietnamese" +msgstr "" + +#: conf/global_settings.py:151 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:152 +msgid "Traditional Chinese" +msgstr "" + +#: contrib/messages/apps.py:7 +msgid "Messages" +msgstr "" + +#: contrib/sitemaps/apps.py:8 +msgid "Site Maps" +msgstr "" + +#: contrib/staticfiles/apps.py:9 +msgid "Static Files" +msgstr "" + +#: contrib/syndication/apps.py:7 +msgid "Syndication" +msgstr "" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +#: core/paginator.py:30 +msgid "…" +msgstr "" + +#: core/paginator.py:51 +msgid "That page number is not an integer" +msgstr "" + +#: core/paginator.py:53 +msgid "That page number is less than 1" +msgstr "" + +#: core/paginator.py:58 +msgid "That page contains no results" +msgstr "" + +#: core/validators.py:22 +msgid "Enter a valid value." +msgstr "" + +#: core/validators.py:93 forms/fields.py:674 +msgid "Enter a valid URL." +msgstr "" + +#: core/validators.py:150 +msgid "Enter a valid integer." +msgstr "" + +#: core/validators.py:161 +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +#: core/validators.py:262 +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +#: core/validators.py:269 +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +#: core/validators.py:278 core/validators.py:288 core/validators.py:311 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: core/validators.py:296 core/validators.py:312 +msgid "Enter a valid IPv6 address." +msgstr "" + +#: core/validators.py:306 core/validators.py:310 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +#: core/validators.py:340 +msgid "Enter only digits separated by commas." +msgstr "" + +#: core/validators.py:346 +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#: core/validators.py:379 +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#: core/validators.py:388 +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#: core/validators.py:398 +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:413 +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:432 forms/fields.py:292 forms/fields.py:327 +msgid "Enter a number." +msgstr "" + +#: core/validators.py:434 +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:439 +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:444 +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:506 +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +#: core/validators.py:559 +msgid "Null characters are not allowed." +msgstr "" + +#: db/models/base.py:1201 forms/models.py:772 +msgid "and" +msgstr "" + +#: db/models/base.py:1203 +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:100 +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +#: db/models/fields/__init__.py:101 +msgid "This field cannot be null." +msgstr "" + +#: db/models/fields/__init__.py:102 +msgid "This field cannot be blank." +msgstr "" + +#: db/models/fields/__init__.py:103 +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#: db/models/fields/__init__.py:107 +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#: db/models/fields/__init__.py:126 +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#: db/models/fields/__init__.py:954 +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#: db/models/fields/__init__.py:955 +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +#: db/models/fields/__init__.py:957 +msgid "Boolean (Either True or False)" +msgstr "" + +#: db/models/fields/__init__.py:998 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +#: db/models/fields/__init__.py:1092 +msgid "Comma-separated integers" +msgstr "" + +#: db/models/fields/__init__.py:1187 +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#: db/models/fields/__init__.py:1189 db/models/fields/__init__.py:1311 +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +#: db/models/fields/__init__.py:1192 +msgid "Date (without time)" +msgstr "" + +#: db/models/fields/__init__.py:1309 +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#: db/models/fields/__init__.py:1313 +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +#: db/models/fields/__init__.py:1317 +msgid "Date (with time)" +msgstr "" + +#: db/models/fields/__init__.py:1436 +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +#: db/models/fields/__init__.py:1438 +msgid "Decimal number" +msgstr "" + +#: db/models/fields/__init__.py:1577 +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +#: db/models/fields/__init__.py:1580 +msgid "Duration" +msgstr "" + +#: db/models/fields/__init__.py:1630 +msgid "Email address" +msgstr "" + +#: db/models/fields/__init__.py:1653 +msgid "File path" +msgstr "" + +#: db/models/fields/__init__.py:1719 +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +#: db/models/fields/__init__.py:1721 +msgid "Floating point number" +msgstr "" + +#: db/models/fields/__init__.py:1759 +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +#: db/models/fields/__init__.py:1761 +msgid "Integer" +msgstr "" + +#: db/models/fields/__init__.py:1844 +msgid "Big (8 byte) integer" +msgstr "" + +#: db/models/fields/__init__.py:1859 +msgid "Small integer" +msgstr "" + +#: db/models/fields/__init__.py:1867 +msgid "IPv4 address" +msgstr "" + +#: db/models/fields/__init__.py:1898 +msgid "IP address" +msgstr "" + +#: db/models/fields/__init__.py:1978 db/models/fields/__init__.py:1979 +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +#: db/models/fields/__init__.py:1981 +msgid "Boolean (Either True, False or None)" +msgstr "" + +#: db/models/fields/__init__.py:2035 +msgid "Positive big integer" +msgstr "" + +#: db/models/fields/__init__.py:2048 +msgid "Positive integer" +msgstr "" + +#: db/models/fields/__init__.py:2061 +msgid "Positive small integer" +msgstr "" + +#: db/models/fields/__init__.py:2075 +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +#: db/models/fields/__init__.py:2107 +msgid "Text" +msgstr "" + +#: db/models/fields/__init__.py:2173 +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#: db/models/fields/__init__.py:2175 +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +#: db/models/fields/__init__.py:2178 +msgid "Time" +msgstr "" + +#: db/models/fields/__init__.py:2283 +msgid "URL" +msgstr "" + +#: db/models/fields/__init__.py:2305 +msgid "Raw binary data" +msgstr "" + +#: db/models/fields/__init__.py:2370 +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +#: db/models/fields/__init__.py:2372 +msgid "Universally unique identifier" +msgstr "" + +#: db/models/fields/files.py:226 +msgid "File" +msgstr "" + +#: db/models/fields/files.py:375 +msgid "Image" +msgstr "" + +#: db/models/fields/json.py:18 +msgid "A JSON object" +msgstr "" + +#: db/models/fields/json.py:20 +msgid "Value must be valid JSON." +msgstr "" + +#: db/models/fields/related.py:808 +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +#: db/models/fields/related.py:810 +msgid "Foreign Key (type determined by related field)" +msgstr "" + +#: db/models/fields/related.py:1066 +msgid "One-to-one relationship" +msgstr "" + +#: db/models/fields/related.py:1120 +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#: db/models/fields/related.py:1121 +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +#: db/models/fields/related.py:1163 +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the label +#: forms/boundfield.py:165 +msgid ":?.!" +msgstr "" + +#: forms/fields.py:54 +msgid "This field is required." +msgstr "" + +#: forms/fields.py:247 +msgid "Enter a whole number." +msgstr "" + +#: forms/fields.py:401 forms/fields.py:1144 +msgid "Enter a valid date." +msgstr "" + +#: forms/fields.py:425 forms/fields.py:1145 +msgid "Enter a valid time." +msgstr "" + +#: forms/fields.py:453 +msgid "Enter a valid date/time." +msgstr "" + +#: forms/fields.py:487 +msgid "Enter a valid duration." +msgstr "" + +#: forms/fields.py:488 +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +#: forms/fields.py:548 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: forms/fields.py:549 +msgid "No file was submitted." +msgstr "" + +#: forms/fields.py:550 +msgid "The submitted file is empty." +msgstr "" + +#: forms/fields.py:552 +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +#: forms/fields.py:555 +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +#: forms/fields.py:616 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: forms/fields.py:778 forms/fields.py:868 forms/models.py:1331 +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +#: forms/fields.py:869 forms/fields.py:984 forms/models.py:1330 +msgid "Enter a list of values." +msgstr "" + +#: forms/fields.py:985 +msgid "Enter a complete value." +msgstr "" + +#: forms/fields.py:1203 +msgid "Enter a valid UUID." +msgstr "" + +#: forms/fields.py:1233 +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +#: forms/forms.py:84 +msgid ":" +msgstr "" + +#: forms/forms.py:230 forms/forms.py:304 +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#: forms/formsets.py:60 +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#: forms/formsets.py:381 +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#: forms/formsets.py:388 +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +#: forms/formsets.py:420 forms/formsets.py:427 +msgid "Order" +msgstr "" + +#: forms/formsets.py:433 +msgid "Delete" +msgstr "" + +#: forms/models.py:767 +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#: forms/models.py:771 +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#: forms/models.py:777 +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +#: forms/models.py:786 +msgid "Please correct the duplicate values below." +msgstr "" + +#: forms/models.py:1127 +msgid "The inline value did not match the parent instance." +msgstr "" + +#: forms/models.py:1211 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#: forms/models.py:1333 +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#: forms/utils.py:198 +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +#: forms/widgets.py:403 +msgid "Clear" +msgstr "" + +#: forms/widgets.py:404 +msgid "Currently" +msgstr "" + +#: forms/widgets.py:405 +msgid "Change" +msgstr "" + +#: forms/widgets.py:712 +msgid "Unknown" +msgstr "" + +#: forms/widgets.py:713 +msgid "Yes" +msgstr "" + +#: forms/widgets.py:714 +msgid "No" +msgstr "" + +#. Translators: Please do not add spaces around commas. +#: template/defaultfilters.py:827 +msgid "yes,no,maybe" +msgstr "" + +#: template/defaultfilters.py:856 template/defaultfilters.py:873 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#: template/defaultfilters.py:875 +#, python-format +msgid "%s KB" +msgstr "" + +#: template/defaultfilters.py:877 +#, python-format +msgid "%s MB" +msgstr "" + +#: template/defaultfilters.py:879 +#, python-format +msgid "%s GB" +msgstr "" + +#: template/defaultfilters.py:881 +#, python-format +msgid "%s TB" +msgstr "" + +#: template/defaultfilters.py:883 +#, python-format +msgid "%s PB" +msgstr "" + +#: utils/dateformat.py:72 +msgid "p.m." +msgstr "" + +#: utils/dateformat.py:73 +msgid "a.m." +msgstr "" + +#: utils/dateformat.py:78 +msgid "PM" +msgstr "" + +#: utils/dateformat.py:79 +msgid "AM" +msgstr "" + +#: utils/dateformat.py:150 +msgid "midnight" +msgstr "" + +#: utils/dateformat.py:152 +msgid "noon" +msgstr "" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "" + +#: utils/dates.py:10 +msgid "Mon" +msgstr "" + +#: utils/dates.py:10 +msgid "Tue" +msgstr "" + +#: utils/dates.py:10 +msgid "Wed" +msgstr "" + +#: utils/dates.py:10 +msgid "Thu" +msgstr "" + +#: utils/dates.py:10 +msgid "Fri" +msgstr "" + +#: utils/dates.py:11 +msgid "Sat" +msgstr "" + +#: utils/dates.py:11 +msgid "Sun" +msgstr "" + +#: utils/dates.py:14 +msgid "January" +msgstr "" + +#: utils/dates.py:14 +msgid "February" +msgstr "" + +#: utils/dates.py:14 +msgid "March" +msgstr "" + +#: utils/dates.py:14 +msgid "April" +msgstr "" + +#: utils/dates.py:14 +msgid "May" +msgstr "" + +#: utils/dates.py:14 +msgid "June" +msgstr "" + +#: utils/dates.py:15 +msgid "July" +msgstr "" + +#: utils/dates.py:15 +msgid "August" +msgstr "" + +#: utils/dates.py:15 +msgid "September" +msgstr "" + +#: utils/dates.py:15 +msgid "October" +msgstr "" + +#: utils/dates.py:15 +msgid "November" +msgstr "" + +#: utils/dates.py:16 +msgid "December" +msgstr "" + +#: utils/dates.py:19 +msgid "jan" +msgstr "" + +#: utils/dates.py:19 +msgid "feb" +msgstr "" + +#: utils/dates.py:19 +msgid "mar" +msgstr "" + +#: utils/dates.py:19 +msgid "apr" +msgstr "" + +#: utils/dates.py:19 +msgid "may" +msgstr "" + +#: utils/dates.py:19 +msgid "jun" +msgstr "" + +#: utils/dates.py:20 +msgid "jul" +msgstr "" + +#: utils/dates.py:20 +msgid "aug" +msgstr "" + +#: utils/dates.py:20 +msgid "sep" +msgstr "" + +#: utils/dates.py:20 +msgid "oct" +msgstr "" + +#: utils/dates.py:20 +msgid "nov" +msgstr "" + +#: utils/dates.py:20 +msgid "dec" +msgstr "" + +#: utils/dates.py:23 +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +#: utils/dates.py:24 +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +#: utils/dates.py:25 +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +#: utils/dates.py:26 +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +#: utils/dates.py:27 +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +#: utils/dates.py:28 +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +#: utils/dates.py:29 +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +#: utils/dates.py:30 +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +#: utils/dates.py:31 +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +#: utils/dates.py:32 +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +#: utils/dates.py:33 +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +#: utils/dates.py:34 +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +#: utils/dates.py:37 +msgctxt "alt. month" +msgid "January" +msgstr "" + +#: utils/dates.py:38 +msgctxt "alt. month" +msgid "February" +msgstr "" + +#: utils/dates.py:39 +msgctxt "alt. month" +msgid "March" +msgstr "" + +#: utils/dates.py:40 +msgctxt "alt. month" +msgid "April" +msgstr "" + +#: utils/dates.py:41 +msgctxt "alt. month" +msgid "May" +msgstr "" + +#: utils/dates.py:42 +msgctxt "alt. month" +msgid "June" +msgstr "" + +#: utils/dates.py:43 +msgctxt "alt. month" +msgid "July" +msgstr "" + +#: utils/dates.py:44 +msgctxt "alt. month" +msgid "August" +msgstr "" + +#: utils/dates.py:45 +msgctxt "alt. month" +msgid "September" +msgstr "" + +#: utils/dates.py:46 +msgctxt "alt. month" +msgid "October" +msgstr "" + +#: utils/dates.py:47 +msgctxt "alt. month" +msgid "November" +msgstr "" + +#: utils/dates.py:48 +msgctxt "alt. month" +msgid "December" +msgstr "" + +#: utils/ipv6.py:8 +msgid "This is not a valid IPv6 address." +msgstr "" + +#: utils/text.py:73 +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +#: utils/text.py:242 +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +#: utils/text.py:261 utils/timesince.py:94 +msgid ", " +msgstr "" + +#: utils/timesince.py:9 +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:10 +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:11 +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:12 +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:13 +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:14 +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#: views/csrf.py:110 +msgid "Forbidden" +msgstr "" + +#: views/csrf.py:111 +msgid "CSRF verification failed. Request aborted." +msgstr "" + +#: views/csrf.py:115 +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +#: views/csrf.py:120 +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +#: views/csrf.py:124 +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +#: views/csrf.py:132 +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +#: views/csrf.py:137 +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +#: views/csrf.py:142 +msgid "More information is available with DEBUG=True." +msgstr "" + +#: views/generic/dates.py:41 +msgid "No year specified" +msgstr "" + +#: views/generic/dates.py:61 views/generic/dates.py:111 +#: views/generic/dates.py:208 +msgid "Date out of range" +msgstr "" + +#: views/generic/dates.py:90 +msgid "No month specified" +msgstr "" + +#: views/generic/dates.py:142 +msgid "No day specified" +msgstr "" + +#: views/generic/dates.py:188 +msgid "No week specified" +msgstr "" + +#: views/generic/dates.py:338 views/generic/dates.py:367 +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#: views/generic/dates.py:594 +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#: views/generic/dates.py:628 +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#: views/generic/detail.py:54 +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +#: views/generic/list.py:67 +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#: views/generic/list.py:72 +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#: views/generic/list.py:154 +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +#: views/static.py:40 +msgid "Directory indexes are not allowed here." +msgstr "" + +#: views/static.py:42 +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#: views/static.py:80 +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +#: views/templates/default_urlconf.html:7 +#: views/templates/default_urlconf.html:221 +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#: views/templates/default_urlconf.html:207 +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#: views/templates/default_urlconf.html:222 +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +#: views/templates/default_urlconf.html:230 +msgid "Django Documentation" +msgstr "" + +#: views/templates/default_urlconf.html:231 +msgid "Topics, references, & how-to’s" +msgstr "" + +#: views/templates/default_urlconf.html:239 +msgid "Tutorial: A Polling App" +msgstr "" + +#: views/templates/default_urlconf.html:240 +msgid "Get started with Django" +msgstr "" + +#: views/templates/default_urlconf.html:248 +msgid "Django Community" +msgstr "" + +#: views/templates/default_urlconf.html:249 +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/en/__init__.py b/venv/Lib/site-packages/django/conf/locale/en/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/en/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/en/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7303e8a7af4092322cf1ed6fbcdd242150bba6fd GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYMy?4d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04dWn)c^nh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/en/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/en/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34c3c6ba1f6949f67961c1e598bb20bbed6c387d GIT binary patch literal 931 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..a0a3ed8ce --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,1299 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2014 +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabic" + +msgid "Algerian Arabic" +msgstr "Algerian Arabic" + +msgid "Asturian" +msgstr "Asturian" + +msgid "Azerbaijani" +msgstr "Azerbaijani" + +msgid "Bulgarian" +msgstr "Bulgarian" + +msgid "Belarusian" +msgstr "Belarusian" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosnian" + +msgid "Catalan" +msgstr "Catalan" + +msgid "Czech" +msgstr "Czech" + +msgid "Welsh" +msgstr "Welsh" + +msgid "Danish" +msgstr "Danish" + +msgid "German" +msgstr "German" + +msgid "Lower Sorbian" +msgstr "Lower Sorbian" + +msgid "Greek" +msgstr "Greek" + +msgid "English" +msgstr "English" + +msgid "Australian English" +msgstr "Australian English" + +msgid "British English" +msgstr "British English" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanish" + +msgid "Argentinian Spanish" +msgstr "Argentinian Spanish" + +msgid "Colombian Spanish" +msgstr "Colombian Spanish" + +msgid "Mexican Spanish" +msgstr "Mexican Spanish" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguan Spanish" + +msgid "Venezuelan Spanish" +msgstr "Venezuelan Spanish" + +msgid "Estonian" +msgstr "Estonian" + +msgid "Basque" +msgstr "Basque" + +msgid "Persian" +msgstr "Persian" + +msgid "Finnish" +msgstr "Finnish" + +msgid "French" +msgstr "French" + +msgid "Frisian" +msgstr "Frisian" + +msgid "Irish" +msgstr "Irish" + +msgid "Scottish Gaelic" +msgstr "Scottish Gaelic" + +msgid "Galician" +msgstr "Galician" + +msgid "Hebrew" +msgstr "Hebrew" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croatian" + +msgid "Upper Sorbian" +msgstr "Upper Sorbian" + +msgid "Hungarian" +msgstr "Hungarian" + +msgid "Armenian" +msgstr "Armenian" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesian" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Icelandic" + +msgid "Italian" +msgstr "Italian" + +msgid "Japanese" +msgstr "Japanese" + +msgid "Georgian" +msgstr "Georgian" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Korean" + +msgid "Kyrgyz" +msgstr "Kyrgyz" + +msgid "Luxembourgish" +msgstr "Luxembourgish" + +msgid "Lithuanian" +msgstr "Lithuanian" + +msgid "Latvian" +msgstr "Latvian" + +msgid "Macedonian" +msgstr "Macedonian" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolian" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Burmese" + +msgid "Norwegian Bokmål" +msgstr "Norwegian Bokmål" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Dutch" + +msgid "Norwegian Nynorsk" +msgstr "Norwegian Nynorsk" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polish" + +msgid "Portuguese" +msgstr "Portuguese" + +msgid "Brazilian Portuguese" +msgstr "Brazilian Portuguese" + +msgid "Romanian" +msgstr "Romanian" + +msgid "Russian" +msgstr "Russian" + +msgid "Slovak" +msgstr "Slovak" + +msgid "Slovenian" +msgstr "Slovenian" + +msgid "Albanian" +msgstr "Albanian" + +msgid "Serbian" +msgstr "Serbian" + +msgid "Serbian Latin" +msgstr "Serbian Latin" + +msgid "Swedish" +msgstr "Swedish" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tajik" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "Turkmen" + +msgid "Turkish" +msgstr "Turkish" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainian" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbek" + +msgid "Vietnamese" +msgstr "Vietnamese" + +msgid "Simplified Chinese" +msgstr "Simplified Chinese" + +msgid "Traditional Chinese" +msgstr "Traditional Chinese" + +msgid "Messages" +msgstr "Messages" + +msgid "Site Maps" +msgstr "Site Maps" + +msgid "Static Files" +msgstr "Static Files" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "That page number is not an integer" + +msgid "That page number is less than 1" +msgstr "That page number is less than 1" + +msgid "That page contains no results" +msgstr "That page contains no results" + +msgid "Enter a valid value." +msgstr "Enter a valid value." + +msgid "Enter a valid URL." +msgstr "Enter a valid URL." + +msgid "Enter a valid integer." +msgstr "Enter a valid integer." + +msgid "Enter a valid email address." +msgstr "Enter a valid email address." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." + +msgid "Enter a valid IPv4 address." +msgstr "Enter a valid IPv4 address." + +msgid "Enter a valid IPv6 address." +msgstr "Enter a valid IPv6 address." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Enter a valid IPv4 or IPv6 address." + +msgid "Enter only digits separated by commas." +msgstr "Enter only digits separated by commas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ensure this value is %(limit_value)s (it is %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ensure this value is less than or equal to %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ensure this value is greater than or equal to %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgstr[1] "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgstr[1] "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Enter a number." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Ensure that there are no more than %(max)s digit in total." +msgstr[1] "Ensure that there are no more than %(max)s digits in total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Ensure that there are no more than %(max)s decimal place." +msgstr[1] "Ensure that there are no more than %(max)s decimal places." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgstr[1] "" +"Ensure that there are no more than %(max)s digits before the decimal point." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null characters are not allowed." + +msgid "and" +msgstr "and" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s with this %(field_labels)s already exists." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Value %(value)r is not a valid choice." + +msgid "This field cannot be null." +msgstr "This field cannot be null." + +msgid "This field cannot be blank." +msgstr "This field cannot be blank." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s with this %(field_label)s already exists." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Field of type: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” value must be either True or False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” value must be either True, False, or None." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Either True or False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (up to %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Comma-separated integers" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." + +msgid "Date (without time)" +msgstr "Date (without time)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." + +msgid "Date (with time)" +msgstr "Date (with time)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” value must be a decimal number." + +msgid "Decimal number" +msgstr "Decimal number" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." + +msgid "Duration" +msgstr "Duration" + +msgid "Email address" +msgstr "Email address" + +msgid "File path" +msgstr "File path" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” value must be a float." + +msgid "Floating point number" +msgstr "Floating point number" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” value must be an integer." + +msgid "Integer" +msgstr "Integer" + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +msgid "Small integer" +msgstr "Small integer" + +msgid "IPv4 address" +msgstr "IPv4 address" + +msgid "IP address" +msgstr "IP address" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” value must be either None, True or False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Either True, False or None)" + +msgid "Positive big integer" +msgstr "Positive big integer" + +msgid "Positive integer" +msgstr "Positive integer" + +msgid "Positive small integer" +msgstr "Positive small integer" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (up to %(max_length)s)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." + +msgid "Time" +msgstr "Time" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Raw binary data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” is not a valid UUID." + +msgid "Universally unique identifier" +msgstr "Universally unique identifier" + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Image" + +msgid "A JSON object" +msgstr "A JSON object" + +msgid "Value must be valid JSON." +msgstr "Value must be valid JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s instance with %(field)s %(value)r does not exist." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (type determined by related field)" + +msgid "One-to-one relationship" +msgstr "One-to-one relationship" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s relationship" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s relationships" + +msgid "Many-to-many relationship" +msgstr "Many-to-many relationship" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "This field is required." + +msgid "Enter a whole number." +msgstr "Enter a whole number." + +msgid "Enter a valid date." +msgstr "Enter a valid date." + +msgid "Enter a valid time." +msgstr "Enter a valid time." + +msgid "Enter a valid date/time." +msgstr "Enter a valid date/time." + +msgid "Enter a valid duration." +msgstr "Enter a valid duration." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "The number of days must be between {min_days} and {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "No file was submitted. Check the encoding type on the form." + +msgid "No file was submitted." +msgstr "No file was submitted." + +msgid "The submitted file is empty." +msgstr "The submitted file is empty." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Ensure this filename has at most %(max)d character (it has %(length)d)." +msgstr[1] "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Please either submit a file or check the clear checkbox, not both." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Select a valid choice. %(value)s is not one of the available choices." + +msgid "Enter a list of values." +msgstr "Enter a list of values." + +msgid "Enter a complete value." +msgstr "Enter a complete value." + +msgid "Enter a valid UUID." +msgstr "Enter a valid UUID." + +msgid "Enter a valid JSON." +msgstr "Enter a valid JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Hidden field %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Please submit at most %d form." +msgstr[1] "Please submit at most %d forms." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Please submit at least %d form." +msgstr[1] "Please submit at least %d forms." + +msgid "Order" +msgstr "Order" + +msgid "Delete" +msgstr "Delete" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Please correct the duplicate data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Please correct the duplicate data for %(field)s, which must be unique." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Please correct the duplicate values below." + +msgid "The inline value did not match the parent instance." +msgstr "The inline value did not match the parent instance." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Select a valid choice. That choice is not one of the available choices." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” is not a valid value." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." + +msgid "Clear" +msgstr "Clear" + +msgid "Currently" +msgstr "Currently" + +msgid "Change" +msgstr "Change" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "yes,no,maybe" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnight" + +msgid "noon" +msgstr "noon" + +msgid "Monday" +msgstr "Monday" + +msgid "Tuesday" +msgstr "Tuesday" + +msgid "Wednesday" +msgstr "Wednesday" + +msgid "Thursday" +msgstr "Thursday" + +msgid "Friday" +msgstr "Friday" + +msgid "Saturday" +msgstr "Saturday" + +msgid "Sunday" +msgstr "Sunday" + +msgid "Mon" +msgstr "Mon" + +msgid "Tue" +msgstr "Tue" + +msgid "Wed" +msgstr "Wed" + +msgid "Thu" +msgstr "Thu" + +msgid "Fri" +msgstr "Fri" + +msgid "Sat" +msgstr "Sat" + +msgid "Sun" +msgstr "Sun" + +msgid "January" +msgstr "January" + +msgid "February" +msgstr "February" + +msgid "March" +msgstr "March" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "June" + +msgid "July" +msgstr "July" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "October" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "March" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month" +msgid "June" +msgstr "June" + +msgctxt "abbrev. month" +msgid "July" +msgstr "July" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "January" + +msgctxt "alt. month" +msgid "February" +msgstr "February" + +msgctxt "alt. month" +msgid "March" +msgstr "March" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "May" + +msgctxt "alt. month" +msgid "June" +msgstr "June" + +msgctxt "alt. month" +msgid "July" +msgstr "July" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "October" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "This is not a valid IPv6 address." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "or" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Forbidden" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verification failed. Request aborted." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." + +msgid "More information is available with DEBUG=True." +msgstr "More information is available with DEBUG=True." + +msgid "No year specified" +msgstr "No year specified" + +msgid "Date out of range" +msgstr "Date out of range" + +msgid "No month specified" +msgstr "No month specified" + +msgid "No day specified" +msgstr "No day specified" + +msgid "No week specified" +msgstr "No week specified" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s available" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Invalid date string “%(datestr)s” given format “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No %(verbose_name)s found matching the query" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Page is not “last”, nor can it be converted to an int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Invalid page (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Empty list and “%(class_name)s.allow_empty” is False." + +msgid "Directory indexes are not allowed here." +msgstr "Directory indexes are not allowed here." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” does not exist" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index of %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "The install worked successfully! Congratulations!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"View release notes for Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." + +msgid "Django Documentation" +msgstr "Django Documentation" + +msgid "Topics, references, & how-to’s" +msgstr "Topics, references, & how-to’s" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: A Polling App" + +msgid "Get started with Django" +msgstr "Get started with Django" + +msgid "Django Community" +msgstr "Django Community" + +msgid "Connect, get help, or contribute" +msgstr "Connect, get help, or contribute" diff --git a/venv/Lib/site-packages/django/conf/locale/en_AU/__init__.py b/venv/Lib/site-packages/django/conf/locale/en_AU/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/en_AU/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/en_AU/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67a6ba823746a8b5fe26ef9b4d3c8f041be80fd2 GIT binary patch literal 198 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, 2011 +# jon_atkinson , 2011-2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "Arabic" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azerbaijani" + +msgid "Bulgarian" +msgstr "Bulgarian" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Bosnian" + +msgid "Catalan" +msgstr "Catalan" + +msgid "Czech" +msgstr "Czech" + +msgid "Welsh" +msgstr "Welsh" + +msgid "Danish" +msgstr "Danish" + +msgid "German" +msgstr "German" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Greek" + +msgid "English" +msgstr "English" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "British English" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanish" + +msgid "Argentinian Spanish" +msgstr "Argentinian Spanish" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Mexican Spanish" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguan Spanish" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Estonian" + +msgid "Basque" +msgstr "Basque" + +msgid "Persian" +msgstr "Persian" + +msgid "Finnish" +msgstr "Finnish" + +msgid "French" +msgstr "French" + +msgid "Frisian" +msgstr "Frisian" + +msgid "Irish" +msgstr "Irish" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galician" + +msgid "Hebrew" +msgstr "Hebrew" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croatian" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Hungarian" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Indonesian" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Icelandic" + +msgid "Italian" +msgstr "Italian" + +msgid "Japanese" +msgstr "Japanese" + +msgid "Georgian" +msgstr "Georgian" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Korean" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Lithuanian" + +msgid "Latvian" +msgstr "Latvian" + +msgid "Macedonian" +msgstr "Macedonian" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolian" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Dutch" + +msgid "Norwegian Nynorsk" +msgstr "Norwegian Nynorsk" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polish" + +msgid "Portuguese" +msgstr "Portuguese" + +msgid "Brazilian Portuguese" +msgstr "Brazilian Portuguese" + +msgid "Romanian" +msgstr "Romanian" + +msgid "Russian" +msgstr "Russian" + +msgid "Slovak" +msgstr "Slovak" + +msgid "Slovenian" +msgstr "Slovenian" + +msgid "Albanian" +msgstr "Albanian" + +msgid "Serbian" +msgstr "Serbian" + +msgid "Serbian Latin" +msgstr "Serbian Latin" + +msgid "Swedish" +msgstr "Swedish" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkish" +msgstr "Turkish" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Ukrainian" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamese" + +msgid "Simplified Chinese" +msgstr "Simplified Chinese" + +msgid "Traditional Chinese" +msgstr "Traditional Chinese" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Enter a valid value." + +msgid "Enter a valid URL." +msgstr "Enter a valid URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Enter a valid IPv4 address." + +msgid "Enter a valid IPv6 address." +msgstr "Enter a valid IPv6 address." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Enter a valid IPv4 or IPv6 address." + +msgid "Enter only digits separated by commas." +msgstr "Enter only digits separated by commas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ensure this value is %(limit_value)s (it is %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ensure this value is less than or equal to %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ensure this value is greater than or equal to %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Enter a number." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "and" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "This field cannot be null." + +msgid "This field cannot be blank." +msgstr "This field cannot be blank." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s with this %(field_label)s already exists." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Field of type: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Either True or False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (up to %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Comma-separated integers" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Date (without time)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Date (with time)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimal number" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Email address" + +msgid "File path" +msgstr "File path" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Floating point number" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Integer" + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +msgid "IPv4 address" +msgstr "IPv4 address" + +msgid "IP address" +msgstr "IP address" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Either True, False or None)" + +msgid "Positive integer" +msgstr "Positive integer" + +msgid "Positive small integer" +msgstr "Positive small integer" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (up to %(max_length)s)" + +msgid "Small integer" +msgstr "Small integer" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Time" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Image" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (type determined by related field)" + +msgid "One-to-one relationship" +msgstr "One-to-one relationship" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Many-to-many relationship" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "This field is required." + +msgid "Enter a whole number." +msgstr "Enter a whole number." + +msgid "Enter a valid date." +msgstr "Enter a valid date." + +msgid "Enter a valid time." +msgstr "Enter a valid time." + +msgid "Enter a valid date/time." +msgstr "Enter a valid date/time." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "No file was submitted. Check the encoding type on the form." + +msgid "No file was submitted." +msgstr "No file was submitted." + +msgid "The submitted file is empty." +msgstr "The submitted file is empty." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Please either submit a file or check the clear checkbox, not both." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Select a valid choice. %(value)s is not one of the available choices." + +msgid "Enter a list of values." +msgstr "Enter a list of values." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Order" + +msgid "Delete" +msgstr "Delete" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Please correct the duplicate data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Please correct the duplicate data for %(field)s, which must be unique." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Please correct the duplicate values below." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Select a valid choice. That choice is not one of the available choices." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Clear" + +msgid "Currently" +msgstr "Currently" + +msgid "Change" +msgstr "Change" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "yes,no,maybe" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnight" + +msgid "noon" +msgstr "noon" + +msgid "Monday" +msgstr "Monday" + +msgid "Tuesday" +msgstr "Tuesday" + +msgid "Wednesday" +msgstr "Wednesday" + +msgid "Thursday" +msgstr "Thursday" + +msgid "Friday" +msgstr "Friday" + +msgid "Saturday" +msgstr "Saturday" + +msgid "Sunday" +msgstr "Sunday" + +msgid "Mon" +msgstr "Mon" + +msgid "Tue" +msgstr "Tue" + +msgid "Wed" +msgstr "Wed" + +msgid "Thu" +msgstr "Thu" + +msgid "Fri" +msgstr "Fri" + +msgid "Sat" +msgstr "Sat" + +msgid "Sun" +msgstr "Sun" + +msgid "January" +msgstr "January" + +msgid "February" +msgstr "February" + +msgid "March" +msgstr "March" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "June" + +msgid "July" +msgstr "July" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "October" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "March" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month" +msgid "June" +msgstr "June" + +msgctxt "abbrev. month" +msgid "July" +msgstr "July" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "January" + +msgctxt "alt. month" +msgid "February" +msgstr "February" + +msgctxt "alt. month" +msgid "March" +msgstr "March" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "May" + +msgctxt "alt. month" +msgid "June" +msgstr "June" + +msgctxt "alt. month" +msgid "July" +msgstr "July" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "October" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "or" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "No year specified" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "No month specified" + +msgid "No day specified" +msgstr "No day specified" + +msgid "No week specified" +msgstr "No week specified" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s available" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No %(verbose_name)s found matching the query" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Directory indexes are not allowed here." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index of %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/en_GB/__init__.py b/venv/Lib/site-packages/django/conf/locale/en_GB/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/en_GB/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/en_GB/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6250e7e52fce822035c7ad83f02b1d8418f8030 GIT binary patch literal 198 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 icSL^M`fYDpU9i7~NA|P9L9;XL=L3_H8@, 2012-2013 +# Batist D 🐍 , 2013-2019 +# batisteo , 2011 +# Dinu Gherman , 2011 +# kristjan , 2011 +# Matthieu Desplantes , 2021 +# Nikolay Korotkiy , 2017-2018 +# Robin van der Vliet , 2019 +# Adamo Mesha , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-13 08:22+0000\n" +"Last-Translator: Matthieu Desplantes \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikansa" + +msgid "Arabic" +msgstr "Araba" + +msgid "Algerian Arabic" +msgstr "Alĝeria araba" + +msgid "Asturian" +msgstr "Asturia" + +msgid "Azerbaijani" +msgstr "Azerbajĝana" + +msgid "Bulgarian" +msgstr "Bulgara" + +msgid "Belarusian" +msgstr "Belorusa" + +msgid "Bengali" +msgstr "Bengala" + +msgid "Breton" +msgstr "Bretona" + +msgid "Bosnian" +msgstr "Bosnia" + +msgid "Catalan" +msgstr "Kataluna" + +msgid "Czech" +msgstr "Ĉeĥa" + +msgid "Welsh" +msgstr "Kimra" + +msgid "Danish" +msgstr "Dana" + +msgid "German" +msgstr "Germana" + +msgid "Lower Sorbian" +msgstr "Malsuprasaroba" + +msgid "Greek" +msgstr "Greka" + +msgid "English" +msgstr "Angla" + +msgid "Australian English" +msgstr "Angla (Aŭstralia)" + +msgid "British English" +msgstr "Angla (Brita)" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Hispana" + +msgid "Argentinian Spanish" +msgstr "Hispana (Argentinio)" + +msgid "Colombian Spanish" +msgstr "Hispana (Kolombio)" + +msgid "Mexican Spanish" +msgstr "Hispana (Meksiko)" + +msgid "Nicaraguan Spanish" +msgstr "Hispana (Nikaragvo)" + +msgid "Venezuelan Spanish" +msgstr "Hispana (Venezuelo)" + +msgid "Estonian" +msgstr "Estona" + +msgid "Basque" +msgstr "Eŭska" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finna" + +msgid "French" +msgstr "Franca" + +msgid "Frisian" +msgstr "Frisa" + +msgid "Irish" +msgstr "Irlanda" + +msgid "Scottish Gaelic" +msgstr "Skota gaela" + +msgid "Galician" +msgstr "Galega" + +msgid "Hebrew" +msgstr "Hebrea" + +msgid "Hindi" +msgstr "Hinda" + +msgid "Croatian" +msgstr "Kroata" + +msgid "Upper Sorbian" +msgstr "Suprasoraba" + +msgid "Hungarian" +msgstr "Hungara" + +msgid "Armenian" +msgstr "Armena" + +msgid "Interlingua" +msgstr "Interlingvaa" + +msgid "Indonesian" +msgstr "Indoneza" + +msgid "Igbo" +msgstr "Igba" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islanda" + +msgid "Italian" +msgstr "Itala" + +msgid "Japanese" +msgstr "Japana" + +msgid "Georgian" +msgstr "Kartvela" + +msgid "Kabyle" +msgstr "Kabila" + +msgid "Kazakh" +msgstr "Kazaĥa" + +msgid "Khmer" +msgstr "Kmera" + +msgid "Kannada" +msgstr "Kanara" + +msgid "Korean" +msgstr "Korea" + +msgid "Kyrgyz" +msgstr "Kirgiza" + +msgid "Luxembourgish" +msgstr "Lukszemburga" + +msgid "Lithuanian" +msgstr "Litova" + +msgid "Latvian" +msgstr "Latva" + +msgid "Macedonian" +msgstr "Makedona" + +msgid "Malayalam" +msgstr "Malajala" + +msgid "Mongolian" +msgstr "Mongola" + +msgid "Marathi" +msgstr "Marata" + +msgid "Burmese" +msgstr "Birma" + +msgid "Norwegian Bokmål" +msgstr "Norvega Bbokmål" + +msgid "Nepali" +msgstr "Nepala" + +msgid "Dutch" +msgstr "Nederlanda" + +msgid "Norwegian Nynorsk" +msgstr "Norvega (nynorsk)" + +msgid "Ossetic" +msgstr "Oseta" + +msgid "Punjabi" +msgstr "Panĝaba" + +msgid "Polish" +msgstr "Pola" + +msgid "Portuguese" +msgstr "Portugala" + +msgid "Brazilian Portuguese" +msgstr "Portugala (Brazilo)" + +msgid "Romanian" +msgstr "Rumana" + +msgid "Russian" +msgstr "Rusa" + +msgid "Slovak" +msgstr "Slovaka" + +msgid "Slovenian" +msgstr "Slovena" + +msgid "Albanian" +msgstr "Albana" + +msgid "Serbian" +msgstr "Serba" + +msgid "Serbian Latin" +msgstr "Serba (latina)" + +msgid "Swedish" +msgstr "Sveda" + +msgid "Swahili" +msgstr "Svahila" + +msgid "Tamil" +msgstr "Tamila" + +msgid "Telugu" +msgstr "Telugua" + +msgid "Tajik" +msgstr "Taĝika" + +msgid "Thai" +msgstr "Taja" + +msgid "Turkmen" +msgstr "Turkmena" + +msgid "Turkish" +msgstr "Turka" + +msgid "Tatar" +msgstr "Tatara" + +msgid "Udmurt" +msgstr "Udmurta" + +msgid "Ukrainian" +msgstr "Ukraina" + +msgid "Urdu" +msgstr "Urdua" + +msgid "Uzbek" +msgstr "Uzbeka" + +msgid "Vietnamese" +msgstr "Vjetnama" + +msgid "Simplified Chinese" +msgstr "Ĉina (simpligite)" + +msgid "Traditional Chinese" +msgstr "Ĉina (tradicie)" + +msgid "Messages" +msgstr "Mesaĝoj" + +msgid "Site Maps" +msgstr "Retejaj mapoj" + +msgid "Static Files" +msgstr "Statikaj dosieroj" + +msgid "Syndication" +msgstr "Abonrilato" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Tuo paĝnumero ne estas entjero" + +msgid "That page number is less than 1" +msgstr "Tuo paĝnumero estas malpli ol 1" + +msgid "That page contains no results" +msgstr "Tiu paĝo ne enhavas rezultojn" + +msgid "Enter a valid value." +msgstr "Enigu validan valoron." + +msgid "Enter a valid URL." +msgstr "Enigu validan adreson." + +msgid "Enter a valid integer." +msgstr "Enigu validan entjero." + +msgid "Enter a valid email address." +msgstr "Enigu validan retpoŝtan adreson." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Enigu validan IPv4-adreson." + +msgid "Enter a valid IPv6 address." +msgstr "Enigu validan IPv6-adreson." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Enigu validan IPv4 aŭ IPv6-adreson." + +msgid "Enter only digits separated by commas." +msgstr "Enigu nur ciferojn apartigitajn per komoj." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Certigu ke ĉi tiu valoro estas %(limit_value)s (ĝi estas %(show_value)s). " + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Certigu ke ĉi tiu valoro estas malpli ol aŭ egala al %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Certigu ke ĉi tiu valoro estas pli ol aŭ egala al %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certigu, ke tiu valoro havas %(limit_value)d signon (ĝi havas " +"%(show_value)d)." +msgstr[1] "" +"Certigu, ke tiu valoro havas %(limit_value)d signojn (ĝi havas " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certigu, ke tio valuto maksimume havas %(limit_value)d karakterojn (ĝi havas " +"%(show_value)d)." +msgstr[1] "" +"Certigu, ke tiu valoro maksimume havas %(limit_value)d signojn (ĝi havas " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Enigu nombron." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Certigu ke ne estas pli ol %(max)s cifero entute." +msgstr[1] "Certigu ke ne estas pli ol %(max)s ciferoj entute." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Certigu, ke ne estas pli ol %(max)s dekumaj lokoj." +msgstr[1] "Certigu, ke ne estas pli ol %(max)s dekumaj lokoj." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Certigu ke ne estas pli ol %(max)s ciferoj antaŭ la dekuma punkto." +msgstr[1] "Certigu ke ne estas pli ol %(max)s ciferoj antaŭ la dekuma punkto." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Nulsignoj ne estas permesitaj." + +msgid "and" +msgstr "kaj" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s kun tiuj %(field_labels)s jam ekzistas." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valoro %(value)r ne estas valida elekto." + +msgid "This field cannot be null." +msgstr "Tiu ĉi kampo ne povas esti senvalora (null)." + +msgid "This field cannot be blank." +msgstr "Tiu ĉi kampo ne povas esti malplena." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s kun tiu %(field_label)s jam ekzistas." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s devas esti unika por %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Kampo de tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Bulea (Vera aŭ Malvera)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Ĉeno (ĝis %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Kom-apartigitaj entjeroj" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"La valoro “%(value)s” havas malĝustan datformaton. Ĝi devas esti en la " +"formato JJJJ-MM-TT." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dato (sen horo)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dato (kun horo)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Dekuma nombro" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Daŭro" + +msgid "Email address" +msgstr "Retpoŝtadreso" + +msgid "File path" +msgstr "Dosiervojo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Glitkoma nombro" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "La valoro “%(value)s” devas esti entjero." + +msgid "Integer" +msgstr "Entjero" + +msgid "Big (8 byte) integer" +msgstr "Granda (8 bitoka) entjero" + +msgid "Small integer" +msgstr "Malgranda entjero" + +msgid "IPv4 address" +msgstr "IPv4-adreso" + +msgid "IP address" +msgstr "IP-adreso" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Buleo (Vera, Malvera aŭ Neniu)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Pozitiva entjero" + +msgid "Positive small integer" +msgstr "Pozitiva malgranda entjero" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Ĵetonvorto (ĝis %(max_length)s)" + +msgid "Text" +msgstr "Teksto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Horo" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Kruda binara datumo" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "Universe unika identigilo" + +msgid "File" +msgstr "Dosiero" + +msgid "Image" +msgstr "Bildo" + +msgid "A JSON object" +msgstr "JSON-objekto" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s kazo kun %(field)s %(value)r ne ekzistas." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremda ŝlosilo (tipo determinita per rilata kampo)" + +msgid "One-to-one relationship" +msgstr "Unu-al-unu rilato" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s rilato" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s rilatoj" + +msgid "Many-to-many relationship" +msgstr "Mult-al-multa rilato" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ĉi tiu kampo estas deviga." + +msgid "Enter a whole number." +msgstr "Enigu plenan nombron." + +msgid "Enter a valid date." +msgstr "Enigu validan daton." + +msgid "Enter a valid time." +msgstr "Enigu validan horon." + +msgid "Enter a valid date/time." +msgstr "Enigu validan daton/tempon." + +msgid "Enter a valid duration." +msgstr "Enigu validan daŭron." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "La nombro da tagoj devas esti inter {min_days} kaj {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Neniu dosiero estis alŝutita. Kontrolu la kodoprezentan tipon en la " +"formularo." + +msgid "No file was submitted." +msgstr "Neniu dosiero estis alŝutita." + +msgid "The submitted file is empty." +msgstr "La alŝutita dosiero estas malplena." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Certigu, ke tio dosiernomo maksimume havas %(max)d karakteron (ĝi havas " +"%(length)d)." +msgstr[1] "" +"Certigu, ke tiu dosiernomo maksimume havas %(max)d signojn (ĝi havas " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Bonvolu aŭ alŝuti dosieron, aŭ elekti la malplenan markobutonon, ne ambaŭ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Alŝutu validan bildon. La alŝutita dosiero ne estas bildo, aŭ estas " +"difektita bildo." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Elektu validan elekton. %(value)s ne estas el la eblaj elektoj." + +msgid "Enter a list of values." +msgstr "Enigu liston de valoroj." + +msgid "Enter a complete value." +msgstr "Enigu kompletan valoron." + +msgid "Enter a valid UUID." +msgstr "Enigu validan UUID-n." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Kaŝita kampo %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordo" + +msgid "Delete" +msgstr "Forigi" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Bonvolu ĝustigi la duoblan datumon por %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Bonvolu ĝustigi la duoblan datumon por %(field)s, kiu devas esti unika." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Bonvolu ĝustigi la duoblan datumon por %(field_name)s, kiu devas esti unika " +"por la %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Bonvolu ĝustigi la duoblan valoron sube." + +msgid "The inline value did not match the parent instance." +msgstr "La enteksta valoro ne egalas la patran aperon." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Elektu validan elekton. Ĉi tiu elekto ne estas el la eblaj elektoj." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Vakigi" + +msgid "Currently" +msgstr "Nuntempe" + +msgid "Change" +msgstr "Ŝanĝi" + +msgid "Unknown" +msgstr "Nekonate" + +msgid "Yes" +msgstr "Jes" + +msgid "No" +msgstr "Ne" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "jes,ne,eble" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bitoko" +msgstr[1] "%(size)d bitokoj" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ptm" + +msgid "a.m." +msgstr "atm" + +msgid "PM" +msgstr "PTM" + +msgid "AM" +msgstr "ATM" + +msgid "midnight" +msgstr "noktomezo" + +msgid "noon" +msgstr "tagmezo" + +msgid "Monday" +msgstr "lundo" + +msgid "Tuesday" +msgstr "mardo" + +msgid "Wednesday" +msgstr "merkredo" + +msgid "Thursday" +msgstr "ĵaŭdo" + +msgid "Friday" +msgstr "vendredo" + +msgid "Saturday" +msgstr "sabato" + +msgid "Sunday" +msgstr "dimanĉo" + +msgid "Mon" +msgstr "lun" + +msgid "Tue" +msgstr "mar" + +msgid "Wed" +msgstr "mer" + +msgid "Thu" +msgstr "ĵaŭ" + +msgid "Fri" +msgstr "ven" + +msgid "Sat" +msgstr "sab" + +msgid "Sun" +msgstr "dim" + +msgid "January" +msgstr "januaro" + +msgid "February" +msgstr "februaro" + +msgid "March" +msgstr "marto" + +msgid "April" +msgstr "aprilo" + +msgid "May" +msgstr "majo" + +msgid "June" +msgstr "junio" + +msgid "July" +msgstr "julio" + +msgid "August" +msgstr "aŭgusto" + +msgid "September" +msgstr "septembro" + +msgid "October" +msgstr "oktobro" + +msgid "November" +msgstr "novembro" + +msgid "December" +msgstr "decembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aŭg" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "marto" + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "majo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aŭg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januaro" + +msgctxt "alt. month" +msgid "February" +msgstr "Februaro" + +msgctxt "alt. month" +msgid "March" +msgstr "Marto" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprilo" + +msgctxt "alt. month" +msgid "May" +msgstr "Majo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Aŭgusto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktobro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembro" + +msgid "This is not a valid IPv6 address." +msgstr "Tiu ne estas valida IPv6-adreso." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "aŭ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaro" +msgstr[1] "%d jaroj" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d monato" +msgstr[1] "%d monatoj" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semajno" +msgstr[1] "%d semajnoj" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d tago" +msgstr[1] "%d tagoj" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horo" +msgstr[1] "%d horoj" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutoj" + +msgid "Forbidden" +msgstr "Malpermesa" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF konfirmo malsukcesis. Peto ĉesigita." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Vi vidas tiun mesaĝon ĉar tiu-ĉi retejo postulas CSRF kuketon sendante " +"formojn. Tiu-ĉi kuketo estas bezonata pro motivoj de sekureco, por certigi " +"ke via retumilo ne esti forrabita de triaj partioj." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Pliaj informoj estas videblaj kun DEBUG=True." + +msgid "No year specified" +msgstr "Neniu jaro specifita" + +msgid "Date out of range" +msgstr "Dato ne en la intervalo" + +msgid "No month specified" +msgstr "Neniu monato specifita" + +msgid "No day specified" +msgstr "Neniu tago specifita" + +msgid "No week specified" +msgstr "Neniu semajno specifita" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Neniu %(verbose_name_plural)s disponeblaj" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Estonta %(verbose_name_plural)s ne disponeblas ĉar %(class_name)s." +"allow_future estas Malvera." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Neniu %(verbose_name)s trovita kongruas kun la informpeto" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nevalida paĝo (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Dosierujaj indeksoj ne estas permesitaj tie." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” ne ekzistas" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indekso de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "La instalado sukcesis! Gratulojn!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Vidu eldonajn notojn por Dĵango %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Vi vidas ĉi tiun paĝon ĉar DEBUG = " +"True estas en via agorda dosiero kaj vi ne agordis ajnan URL." + +msgid "Django Documentation" +msgstr "Djanga dokumentaro" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Instruilo: apo pri enketoj" + +msgid "Get started with Django" +msgstr "Komencu kun Dĵango" + +msgid "Django Community" +msgstr "Djanga komunumo" + +msgid "Connect, get help, or contribute" +msgstr "Konektiĝu, ricevu helpon aŭ kontribuu" diff --git a/venv/Lib/site-packages/django/conf/locale/eo/__init__.py b/venv/Lib/site-packages/django/conf/locale/eo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/eo/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/eo/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4af00ad55cc199a231680d2baa0ac1b495ea4039 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYQBDad}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04en})&Kwi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/eo/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/eo/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c4f5fca76c6213f2f6aef5505a3693226ad87d2 GIT binary patch literal 931 zcmY+CO^cgQ6o%E9jQKE`47AXlo4W{%aUV*lGtn42YEVP*a;cbHCnSw=h-P5?HKn_* z`w#jv3SD(I&}}!fD7~65RlN5-&w0=B_!04ZgCfVDPrqj0YZUc63yKFrg7@T#HL_p| zQkaG`W*~zru!330;wr4-8m!?9c(I@`_mzemuH(jnfpro$N!-9K*u*?+;Wp%P$EJFh zX?ul4L+Ku`rYt!RT~`lbxgwSZP6pQSi;?{(8w(UewQF%)rH&$rC^Op`%-jg$kf z2tpBHqMlC56+kHD%!HImvSEGRiFbDN2?iA{M;AMbT11#BzAPqNRjh=?odUTDt7OrZd)0K_|-;LDyAe%hOH6(T)X|`)DY;N7A)5({j9G*H>p$YNw7ZJ9E08 zsd^t3Kyvn@G7q4U3wn|<{zPtpt12m0;ZH%m49Q$Y(&39q2Nn$iwCfaU>)a5o##K|^V z1@iuBz;11X54`)C{bN!)*U`pLZw gBfMJ&@3P-C7RbV~EL}V~mf;zi{l~FvgQYq8KNW59L;wH) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/eo/formats.py b/venv/Lib/site-packages/django/conf/locale/eo/formats.py new file mode 100644 index 000000000..d1346d1c3 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/eo/formats.py @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j\-\a \d\e F Y" # '26-a de julio 1887' +TIME_FORMAT = "H:i" # '18:59' +DATETIME_FORMAT = r"j\-\a \d\e F Y\, \j\e H:i" # '26-a de julio 1887, je 18:59' +YEAR_MONTH_FORMAT = r"F \d\e Y" # 'julio de 1887' +MONTH_DAY_FORMAT = r"j\-\a \d\e F" # '26-a de julio' +SHORT_DATE_FORMAT = "Y-m-d" # '1887-07-26' +SHORT_DATETIME_FORMAT = "Y-m-d H:i" # '1887-07-26 18:59' +FIRST_DAY_OF_WEEK = 1 # Monday (lundo) + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '1887-07-26' + "%y-%m-%d", # '87-07-26' + "%Y %m %d", # '1887 07 26' + "%Y.%m.%d", # '1887.07.26' + "%d-a de %b %Y", # '26-a de jul 1887' + "%d %b %Y", # '26 jul 1887' + "%d-a de %B %Y", # '26-a de julio 1887' + "%d %B %Y", # '26 julio 1887' + "%d %m %Y", # '26 07 1887' + "%d/%m/%Y", # '26/07/1887' +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '18:59:00' + "%H:%M", # '18:59' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '1887-07-26 18:59:00' + "%Y-%m-%d %H:%M", # '1887-07-26 18:59' + "%Y.%m.%d %H:%M:%S", # '1887.07.26 18:59:00' + "%Y.%m.%d %H:%M", # '1887.07.26 18:59' + "%d/%m/%Y %H:%M:%S", # '26/07/1887 18:59:00' + "%d/%m/%Y %H:%M", # '26/07/1887 18:59' + "%y-%m-%d %H:%M:%S", # '87-07-26 18:59:00' + "%y-%m-%d %H:%M", # '87-07-26 18:59' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f48ccad6aec45fd1aacb95223c858d513d4e7d99 GIT binary patch literal 27700 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 OHQmK2=jC!a@Bah-x{Q?o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..56e3c7b25 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1342 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abe Estrada, 2013 +# albertoalcolea , 2014 +# Amanda Copete, 2017 +# Antoni Aloy , 2011-2014,2017,2019 +# Claude Paroz , 2020 +# Diego Andres Sanabria Martin , 2012 +# Diego Schulz , 2012 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015-2016 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2014 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2020 +# Ernesto Rico Schmidt , 2017 +# 8cb2d5a716c3c9a99b6d20472609a4d5_6d03802 , 2011 +# Ignacio José Lizarán Rus , 2019 +# Igor Támara , 2015 +# Jannis Leidel , 2011 +# José Luis , 2016 +# Josue Naaman Nistal Guerra , 2014 +# Leonardo J. Caballero G. , 2011,2013 +# Luigy, 2019 +# Marc Garcia , 2011 +# Mariusz Felisiak , 2021 +# monobotsoft , 2012 +# ntrrgc , 2013 +# ntrrgc , 2013 +# Pablo, 2015 +# Sebastián Magrí, 2013 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:30+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Africano" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Algerian Arabic" +msgstr "Árabe argelino" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerbaiyán" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "Bosnio" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "Bajo sorbio" + +msgid "Greek" +msgstr "Griego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés australiano" + +msgid "British English" +msgstr "Inglés británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "Español de Colombia" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español de Venezuela" + +msgid "Estonian" +msgstr "Estonio" + +msgid "Basque" +msgstr "Vasco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "Gaélico Escocés" + +msgid "Galician" +msgstr "Gallego" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Alto sorbio" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "Armenio" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesio" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonés" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Cabilio" + +msgid "Kazakh" +msgstr "Kazajo" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Coreano" + +msgid "Kyrgyz" +msgstr "Kirguís" + +msgid "Luxembourgish" +msgstr "Luxenburgués" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letón" + +msgid "Macedonian" +msgstr "Macedonio" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Birmano" + +msgid "Norwegian Bokmål" +msgstr "Bokmål noruego" + +msgid "Nepali" +msgstr "Nepalí" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk" + +msgid "Ossetic" +msgstr "Osetio" + +msgid "Punjabi" +msgstr "Panyabí" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués de Brasil" + +msgid "Romanian" +msgstr "Rumano" + +msgid "Russian" +msgstr "Ruso" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanés" + +msgid "Serbian" +msgstr "Serbio" + +msgid "Serbian Latin" +msgstr "Serbio latino" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suajili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tayiko" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkmen" +msgstr "Turcomanos" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tártaro" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbeko" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chino simplificado" + +msgid "Traditional Chinese" +msgstr "Chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas del sitio" + +msgid "Static Files" +msgstr "Archivos estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Este número de página no es un entero" + +msgid "That page number is less than 1" +msgstr "Este número de página es menor que 1" + +msgid "That page contains no results" +msgstr "Esa página no contiene resultados" + +msgid "Enter a valid value." +msgstr "Introduzca un valor válido." + +msgid "Enter a valid URL." +msgstr "Introduzca una URL válida." + +msgid "Enter a valid integer." +msgstr "Introduzca un número entero válido." + +msgid "Enter a valid email address." +msgstr "Introduzca una dirección de correo electrónico válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o " +"medios." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o " +"medios de Unicode." + +msgid "Enter a valid IPv4 address." +msgstr "Introduzca una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Introduzca una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Introduzca una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Introduzca sólo dígitos separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Asegúrese de que este valor es %(limit_value)s (actualmente es " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor es menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor es mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga al menos %(limit_value)d caracter (tiene " +"%(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga al menos %(limit_value)d carácter(es) " +"(tiene%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga menos de %(limit_value)d caracter (tiene " +"%(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga menos de %(limit_value)d caracteres (tiene " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Introduzca un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no hay más de %(max)s dígito en total." +msgstr[1] "Asegúrese de que no haya más de %(max)s dígitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrese de que no haya más de %(max)s dígito decimal." +msgstr[1] "Asegúrese de que no haya más de %(max)s dígitos decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrese de que no haya más de %(max)s dígito antes del punto decimal" +msgstr[1] "" +"Asegúrese de que no haya más de %(max)s dígitos antes del punto decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"La extensión de archivo “%(extension)s” no esta permitida. Las extensiones " +"permitidas son: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Los caracteres nulos no están permitidos." + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s con este %(field_labels)s ya existe." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar vacío." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ya existe %(model_name)s con este %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo de tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s”: el valor debe ser Verdadero o Falso." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s”: el valor debe ser Verdadero, Falso o Nulo." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por coma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” : el valor tiene un formato de fecha inválido. Debería estar en " +"el formato YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” : el valor tiene el formato correcto (YYYY-MM-DD) pero es una " +"fecha inválida." + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s”: el valor tiene un formato inválido. Debería estar en el formato " +"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s”: el valor tiene el formato correcto (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ]) pero es una fecha inválida." + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s”: el valor debe ser un número decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s”: el valor tiene un formato inválido. Debería estar en el formato " +"[DD] [[HH:]MM:]ss[.uuuuuu]" + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Correo electrónico" + +msgid "File path" +msgstr "Ruta de fichero" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s”: el valor debería ser un número de coma flotante." + +msgid "Floating point number" +msgstr "Número en coma flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s”: el valor debería ser un numero entero" + +msgid "Integer" +msgstr "Entero" + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +msgid "Small integer" +msgstr "Entero corto" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s”: el valor debería ser None, Verdadero o Falso." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive big integer" +msgstr "Entero grande positivo" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero positivo corto" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hasta %(max_length)s)" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s”: el valor tiene un formato inválido. Debería estar en el formato " +"HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” : el valor tiene el formato correcto (HH:MM[:ss[.uuuuuu]]) pero " +"es un tiempo inválido." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binarios en bruto" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” no es un UUID válido." + +msgid "Universally unique identifier" +msgstr "Identificador universal único" + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser un objeto JSON válido." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "La instancia de %(model)s con %(field)s %(value)r no existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave foránea (tipo determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno-a-uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "relación %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "relaciones %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relación muchos-a-muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Introduzca un número entero." + +msgid "Enter a valid date." +msgstr "Introduzca una fecha válida." + +msgid "Enter a valid time." +msgstr "Introduzca una hora válida." + +msgid "Enter a valid date/time." +msgstr "Introduzca una fecha/hora válida." + +msgid "Enter a valid duration." +msgstr "Introduzca una duración válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "El número de días debe estar entre {min_days} y {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se ha enviado ningún fichero. Compruebe el tipo de codificación en el " +"formulario." + +msgid "No file was submitted." +msgstr "No se ha enviado ningún fichero" + +msgid "The submitted file is empty." +msgstr "El fichero enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracter " +"(tiene %(length)d)." +msgstr[1] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d " +"carácter(es) (tiene %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Por favor envíe un fichero o marque la casilla de limpiar, pero no ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se " +"trataba de una imagen corrupta." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Escoja una opción válida. %(value)s no es una de las opciones disponibles." + +msgid "Enter a list of values." +msgstr "Introduzca una lista de valores." + +msgid "Enter a complete value." +msgstr "Introduzca un valor completo." + +msgid "Enter a valid UUID." +msgstr "Introduzca un UUID válido." + +msgid "Enter a valid JSON." +msgstr "Ingresa un JSON válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) *%(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Los datos de ManagementForm faltan o han sido alterados. Campos que faltan: " +"%(field_names)s. Es posible que deba presentar un informe de error si el " +"problema persiste." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Por favor, envíe %d formulario como máximo." +msgstr[1] "Por favor, envíe %d formularios como máximo." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Por favor, envíe %d formulario como máximo." +msgstr[1] "Por favor, envíe %d formularios como máximo." + +msgid "Order" +msgstr "Orden" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija el dato duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija el dato duplicado para %(field)s, ya que debe ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija los datos duplicados para %(field_name)s ya que debe ser " +"único para %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados abajo." + +msgid "The inline value did not match the parent instance." +msgstr "El valor en línea no coincide con la instancia padre." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Escoja una opción válida. Esa opción no está entre las disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” no es un valor válido." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s no pudo ser interpretado en la zona horaria " +"%(current_timezone)s; podría ser ambiguo o no existir." + +msgid "Clear" +msgstr "Limpiar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sí,no,quizás" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mié" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ene." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Jun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Enero" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "Noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "No es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d años" +msgstr[1] "%(num)d años" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutos" +msgstr[1] "%(num)d minutes" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "La verificación CSRF ha fallado. Solicitud abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porque este sitio HTTPS requiere que tu navegador " +"web envíe un \"encabezado de referencia\", pero no se envió ninguno. Este " +"encabezado es necesario por razones de seguridad, para garantizar que su " +"navegador no sea secuestrado por terceros." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Si ha configurado su navegador para deshabilitar los encabezados \"Referer" +"\", vuelva a habilitarlos, al menos para este sitio, o para conexiones " +"HTTPS, o para solicitudes del \"mismo origen\"." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Si esta utilizando la etiqueta o incluyendo el encabezado \"Referrer-Policy: no-referrer\", elimínelos. " +"La protección CSRF requiere que el encabezado \"Referer\" realice una " +"comprobación estricta del referente. Si le preocupa la privacidad, utilice " +"alternativas como para los enlaces a sitios de " +"terceros." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porqué esta web requiere una cookie CSRF cuando se " +"envían formularios. Esta cookie se necesita por razones de seguridad, para " +"asegurar que tu navegador no ha sido comprometido por terceras partes." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Si ha configurado su navegador para deshabilitar las cookies, vuelva a " +"habilitarlas, al menos para este sitio o para solicitudes del \"mismo origen" +"\"." + +msgid "More information is available with DEBUG=True." +msgstr "Más información disponible si se establece DEBUG=True." + +msgid "No year specified" +msgstr "No se ha indicado el año" + +msgid "Date out of range" +msgstr "Fecha fuera de rango" + +msgid "No month specified" +msgstr "No se ha indicado el mes" + +msgid "No day specified" +msgstr "No se ha indicado el día" + +msgid "No week specified" +msgstr "No se ha indicado la semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Los futuros %(verbose_name_plural)s no están disponibles porque " +"%(class_name)s.allow_future es Falso." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Cadena de fecha no valida “%(datestr)s” dado el formato “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se encontró ningún %(verbose_name)s coincidente con la consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "La página no es la \"última\", ni se puede convertir a un entero." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lista vacía y “%(class_name)s.allow_empty” es Falso" + +msgid "Directory indexes are not allowed here." +msgstr "Los índices de directorio no están permitidos." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” no existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "¡La instalación funcionó con éxito! ¡Felicitaciones!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ve la notas de la versión de Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Estás viendo esta página porque DEBUG=True está en su archivo de configuración y no ha configurado " +"ninguna URL." + +msgid "Django Documentation" +msgstr "Documentación de Django" + +msgid "Topics, references, & how-to’s" +msgstr "Temas, referencias, & como hacer" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Una aplicación de encuesta" + +msgid "Get started with Django" +msgstr "Comienza con Django" + +msgid "Django Community" +msgstr "Comunidad Django" + +msgid "Connect, get help, or contribute" +msgstr "Conéctate, obtén ayuda o contribuye" diff --git a/venv/Lib/site-packages/django/conf/locale/es/__init__.py b/venv/Lib/site-packages/django/conf/locale/es/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98c1c306fd3ad593217562a875aa3838aef507ce GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYO#KNd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04jYn+5i9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c72b41c852f7df87357a143700cfd43d6f62eaa GIT binary patch literal 763 zcmZXS&2F1O5XS+7gY7u3qqetJTsT;2%-yQ0(tr(W0E-V*tX4&sU0ZgIiC7%TJWg+Y zguY6oo_dPZC&-~HI5EM^taf(ixAPy(t~Tj*+f-qHzW$p1Y*5tiGN>C<1Rsk@N{1*w zAsWz#0Ssz@24Vq=IKZJMXrdEvf_T(gFo0iBsQsM=Ez|*RbP77C3r^9QLk)U)ZzVtk zu`qsE{Jf!!mie3ir~pF&u3-p?P#*JDHh)OWIV8oBpSSi)nRQ1O9p=1?U7+bJ{sz#0c%RP{4B z-^+A!>bZ~g9Pqko*JnhZz}O?{4|`ae}sM{Gt2@A4>B1<4(C!LL?L!0h^Y{pwvx2tcus%~*_Rd+gy zq7JA$9A$VoqT(|+%7ihzr|68sh%?fP%ZQE)E>B0F!sxg@9n=vWm-+tAIk&31(^=(x z-u>kC@7}X7|MNfp|Ns0e-#YfdyA02U{fs#o{Ny}iKFfRM`HD5>twg5a9pEbPz*Ahl zL6CoD6MrrN-w0j=eiFPG{2h1#c;O3;ISCvB`De!Yqjqld@%MRr#K(UVJc#t)cr>TF z?}I%)$K$c!Y2-Tr+#g&F(rvQ@JP^DbJOUi>>FdG6_}%~>3T_0C0>?nLw;4Pbd^Px7 z@D@<{?)G@EPyZ|MSmHkf9u9uW$A1ZA>de=`L%^rN=Yc;08HzE1F=qg$f=V9%mA)2K zyCG=%1FD~!LFIcLcs6*O|NaQ5{11cb_b0()z|Vo2?|%XLXMV{a_5U~~N%fryDt|Yq z@_pdZ;02(@yAo7A*MTZm1&;(LK;^#$JPW)XRJjj>>i?%e<^MXU`kw+d?>_)V2fqR} zjz#m0X@D1lZv!6yC&1;WLu25_z`p3XyA~L88TdFTIy>e}V~z(0Jw~AB z?I!RA;G03JGTZ$3W1z^4$Y!ydMOw z0Urg2z@W<*ZIv5Asy1%`HQx__hk_sV_z93LVLk^Q2!0wBQ`{n+C#K#k+Kpyur$CPO$6)VPiUmH#;Z{X$UnEb!mwcsvhO zzKcQiryo25T1w|acL z$NN2g3{=0q00!V!LCwQ6py3HS)8eS5%*-1wJ*n)lV9_R$D}F2emHu`tNO^_{W2w@_!Lj`EP>S z2j2y?f1d_5|3|;r^=B=pdWJydzuMzQP;_1fEj@Xh^7tB1I!4_|-c>_5Y)w&f6zIt?y4kSg<+dLf7AJQ1jXYs@)4f z(b*;7bHP`Dn&$?n@oe^Zv&T1r#}ofnQ2G86)Hpr>ioPEN)&GY-6WK=;eO!Pr;9XYH#3T*UljVz@~47o_eG%Sc7?~QK$RN>j|3+{<-ZkF{&#@S1Gj@3=OZ2;_4qlDU-0<2$FF$& zy2o#MeA46hK+(YuLCw$4ef%>Xe+!BaXcH^_08s583Ti(*2RsEl5fpu12%Z663$6!W z16~C_4n|=2<$2rC>MTG02jdJHZ!$kAdP#`z>|- zxfC4V51s?wO#BCyA;W+@1CE~F1ZqFL7i380e*jM={-hO-{x0;m#N#rLt36%`o<{x+;QrtwNO#Q^@IdfYpw|7hKK-qr=>ASn z>+^0<^mHG15cs#?!QkJ6qKijCyU#%Fzo)>1!JmMlqhEmHLx-+(<(~(t{*yq}zW_WQ z>;*Nh72tfZ2&$f2LACQ{@DT7`P;_}esPYf{_(wsl-xqxR??LtFkX0_Ay`cK@AgKC318P4#4ju|V3BDBk5vX!YRy+A_ z9jN?ek2iu^msf%;sksL{1bhnI4E_kb8!TNx9`N_zG`MAr!^_q>+<(xu_bAv;`U&eC zUJGh}ybBD#hrr{&Z-8fkPlLVSNmsh>)!+$y-w0}cZu9tlQ1v_lo(+B*RKE`&a&l7- z*u(cV;2Gc>K&|5kz-z$If^^-S&ZMZG8mM+}2M+`P4%E0mhB$(>bW0e>zNOOT8C#q@r(V2UHu1nJOUgi{`vm6%{{-*Y&zL`e_waqk2FikcFeUA~Ux2Fr z*PzB>u6E^51QmZeD0(~_6n$I(o(sMTR6E;2_2X|q_3Iz}_oM#%iyprWYJR`r)1LxW z|BpTX+^7G>r|s(|$4Q{ZdnTy%&j(e{WuWpc2e*QQp!n8Lef(h%f%*2ZJ^&m%%c>-JkKJNzCzw1Dv%r;Q<9{h4g-$#JjuP1=& zXCHV1csZ!~cp3P7Fa%X@64d;@8q|Eg9@Mzr03HLr1!OCltstamo(47ERU2LT_2AKb zUju4gHi1WiH-UEkJ>CU&6aQ{d{rZfL{~D-y`VM$1_)Adzd;Tk2f6f8bpFWQlf|{?( zL7nHzL5*WQsQ7C@wYw2i{1~YC1l0a-f?C&`J-!!Q!1trz#o&*@^T0DhH{aKQ0pITd z&j3FGo&tUkJPACo;P~LFpyqESsCL(Yn%DK9>c1M)eBJ~q-&;WCyAxFZ-T`V}-vg@t z`$6UV45;yc-lsnSp3e8TK<%&ni_Xqp|6D09CFG zs@#qKdkSP&=JntK;4L2C28yn~1Zv-Y3p@k-6?i6ia?IWZmw9|2Sm*nYP0%{H8BD_1y2k{ym8_Sf169{!d4|=0?w9 zq-Wqy?3d#uR}y!t{}!A`cpm{)Yn~+J&++*Ss6DvIe`|gYB>c1g7Qm*==Lk%zIokJ^ zSNkl@UqJD6Juf8BXTZDcm;3WU|9&=U2NH$}YY58-`7_AN7Q!urLy2dZ%zFu1MG(){^XG(L*f;m*9v~ugQO|a833xrY5p1`{@_i6N&$|hKAY4Gu zS*g2=kAN!)R}u7l(t-WEfWHgL(*yQ`FD2;t3kT*E;HL>^`1r?oe-YtWzL)yA^S~>J z`vyULy9PcV{2q9O&+{DK7x2D{a2oHYf>(l@3D4nuKf>t*Js%_ditt>*mkIA8e2VZT zLjIh=%X0E}`-lg?YYG30a1rr;<>OD|{W#tq@!vVD;N>>Le zK27if!i|J!!UqWXGvM>jC*s#W@)D0JxQ_HA2@m{2k-Rn zUjaW%INyH@R+D$cfA{nLP5=Hv@NfOQ-~`hC8hi=i3j{r{A=C-~op2sulJF0N|0Jv- z=((M6qDG5q19?Lv+Xr&@r}(W7^RTw)yA3m z7IamTWV~75*qEx*qOB-Rs@+-7g04nFMQKzC8*x(0#^SnK*=b@%YBed@*5g{%2y4YC zn2Z}^G;G_XvISieVWk;$r$H%+vS3F4ZP|^r&`z2y*BFacWM+rMN*aZwDK~E0-#saq z(fE!fYt3qRDJX?gbiMViak!7Mq?yk6XeU+UTC)+g65VGi*5a_nOF2q; z3HsBp5Eo5)^LaGe6#7)jO0mCPDVl{Ed$GK2|ajWnz%@A6u?V)Jf^ z(n1(-qNG_GW)Q7e3hAZIOy!nFwKDn5(zqOSU1aB?+wLWLWR@mLC8DaX~X(zroaTU}n-tdv7L ztffsxO2%cw>sJI5Owwpvw7Vu44dY5w>J8RMjEF567O0j8vn*_c6-KsfEUc9&$p})j zEU6^y^NuN8mQ<@@PZrg~6qX{M(TEsxM%G%5rCJ!2qed_mRq6{hm?ET>#s$&lvNWL! zYQgc9%9L5QB`S`Y0k=2<)E9KQjV4Y-d>)ZB8 zz2ZJAFf}s}r}QdGr|4-Z+8nX%(#US~uu@4T838L4^_l?|x|{?W9xSRcl}8LD#U@14 zu(M|dnv5Fe!%KsnFRwD2L0BrKQI_#lZ%hRc53^b;1yA1mE_i4q%rehJdTomvBV~K? z=6eE|iKU2MlhfStTGpg@jj@pNs$agdK{avFHTFt1+zj(5`O(%ZVUh0dYe^W^-V}|? z8~}v~?yX)%?Or6%!QNMuJ&SeO(<_07_oW*;`DT@6bw=4L;!(j^2-$G*B`mF5fKpH# zV+RyDJcBOgL^(LR;0leg?oxM0ANIJOZ1)w}!z%9$8`O5E5?ABKMt6?Q-K}gananfH z>e}Aa*xA87tgj@fgiZFI-@vN@-WTxAY^tv}nfCSC_eh5a;= z*|p9j1~=mrufQ|*sI1xu;iT2NI9gyUP@OK`@*B9Jjkep_#XC0G&PRG&3RVwIoS!qS zInx*ic`n#Ro}H%Yz@A;_hV?jueo%w@KlC?i@dxL&| z^0ulH{) zT8$mn1VTVqpo@j57&bGjI_-GukGh)J`2Nse$%ZUywpT_;T6QmK)qXbu)D?+kPG51d ziCLLSP+!H`M3ZI};!JE-H4#It#J74V-?FB2kDJv+gjTW^&FWHOR*wc#Nz+Od$g#|y z4)IH?Q6mg=&@GvtMx)5$Q99pBZpb}L=GT&*R_tX#BZTTv_-e&Uvy|7s=2-6w_6#Kq zYico5(<&w!7(+>l(uDy$EM$t(sG3Yz8KT-7jL-=ysn*k^fwU$%O5vu6ZsL%Uh|1O< zrR}Q3XiEtbmBz&e+37cYvN#qM$LUsY;D(Bt%kr^fi&3hzN8CktL{FFqi&Jb-x)N5P zj2h%LL2H$GoCygZ(>oS2G};_R zK~8CuDNln!noMRoE$DWfS$Zj=>BeFXtx4%Y-Vh}*=;}g=9PW^pwrrJ8wPSgSV#JbI zw4NkoccakXV)J@l%~8mMkD|#^tOGkcs0(WtJHYG-0PTT(Wz&sjWKd zbR+0m&?VgHPSWnITO10tDkDi&+~sCREv4^u{JykzUbJ(qLGeO<&E; zC_9i-S#1v@`ZFa;7({oQa({WN@>ZjlQe0LrR7?u&a9B?@&g{0=X@taDh?t8;Smgll zyrwr8^jR!x%-TF(`~j;)Z*UC^L^hyWL>Z`AQZn*Mp;?Ch>S&We%z44Cr6TlR>eguq zP12{So<`CGkMkT@#33`zpp?n6SO^;))JWVkXS{4ib#1HggD77F@o1n7v(f08MOczs zNpTN`8n)Q7RVfFSFWsfMd3Z9v+nxVJB^pCCHiu#CNNK&mA2s6HBub$|03Fo~sj$ zVQQ8&Xoi%aonY0O*@}!gGh<}KnGustMml?frO9}8`h68D%460|!T+*xVkVq|y{=iQ zwAG#+6zN`bC5pCG?<;GO)|t&JK57+ayUbUn90BIaEW;F8G(&@CNZX9H(lN?b<0w2a zV{vh8mN}B@_O6<}EYPwd&e66#RJ4$}l&c24h zb(p+{63#w&cYxJd6dA~S2+Vgf!l zL)%F$BeMCpD)+RWdc*C@VMJ5gd4~a~NX$@T^hL{W;2_Ao97)4S55Ztq&&+TonFz-% zID_agx=qm4tZR!|3&%!p%gDOT@Qk_4ZK=aDi4_CM=G2E2#&Nr|3S25xW4COkHTIy+ zowQk#QBqPU^8SI?_gzd>+NcPf$nQ79O@;#Z)p|^ZW0*q02nlM;3{Od}wd}==gqz}V z{#G#nk8s$fW+Y-rO<;4wFuAe*Ao+>oz)%_?R{{_`J<6JuM%Iz)j(aUaTSH$oXS$XC zEkClNZ+vjvY5*-)xB(}vkFo>tg$8dgt70xK8rn)JspGX| zl3aB(P}B)OEDX|`wIwhn4WVrmI| z8`4tKY}isj@w-Y~rp0Yg!Dh~^XGcC;e%TeYS2RDL~jrCEaK*rD+FT0%&I>$fO({4+P5v_`k-INf*sBn_f17H z0s6rx(h>|SZJ;Ce?)kuH57}zgPStdb*YAH#pH6c`dOI4Q<^SJkEN{+jDEmx_qkV{% zI#sg1(@POr$!=+~tr}Q@WCD=C>>A}YxlOH09iq{k5JR++IY)98Un&jkgmnsg5y!&< zMw*FUCzBuO?j>i%HOsTJae*~E3ParNC=|^dqNHlhtllb~GozexH9Ky0L8SfJ)g#u= zjv9{YimR{_tlE(eu_MA=tafB+UDS2NwG53Nak(bl8D$69uH22T{q2X=8Ns;PpDh)p zBQ94~I-)cxCsMK0Cak9>Y?ci-ZDuqo7?_~h)T|I{riy@p4s5D%sTP;V8m5+@m)4RA zlW<#|q^2$^z}#x4IKgVkLNXU3W6cpVWI9{KOrHavI_}auTgVR>D`NJ#EMD9c=bDwv znbvJ99hvN_yET%q!Y6WxwUTK2hpgdh?zX&t2Bd!tPtV|B&%l7?4`kS(-8rkAyS7!U z77q?yw>ZnL>uuWSh8v!ZYCAePM+?`DT>GrFa^1kd4Z(HS(ZUUbgNtwI7{nfoK?*>w zm%6zLy5{I>w>@7_by-ZS-MR&GHxoNw%eiXb{iN)qF;RoRYuVQpcTw}s=qIPSuyv1| zUs}!GiFW=`+5dN2ZA&!YT~05Z$@602OmB@nEIGr&V=u~hw-0L|RqHDHelz4Gt)A7T zo~vZ$NNS4%CxgvfZ!K&+gIPH)^(<|cv!0P;aWHS_%AWPn1XmVGt!IF>TpXNt?soXc{wnCxnVxI@ZOj}i7lx^%^-`72FaP{Ew_IMWc zo;wfShHE1_WG|Pb^Y!7*5Z5k25ysUBF>=Gmik^$w`P3YC{+{LD5VknDs1P?=yzSSv5^lJNaJMztlJhRX(5{P{C0(`Pv?al!?n~wwXJ^r7>$dt}y%}+tCqun# z3f40&Ul^!CtJt$+okEdFOeI-RE!IX$fnE~ z_r8{tN!sKNawVpG#z)(eO{>;Q(nmYVI?E-kMEBW|jMkAifTq#$m2u--YuD;N+nK}Z z54LO7hmtznK*Vi341 zR2pyr>OJYm!|dd}=#rod zCRoz#A)~jKr^%d&j+ZJAhHA2KU0aJ2qZ6jP)v*n&t8` z!R**Er@3ccw;z9gIbTXL*aTKtOq15BZh9L|Mj7W4dnb#_VGvF=OCh7=+q%|Gg{COi zI+m~4zyn2>K9P}?H!&r*(kpPY3xh80K9N2b-Y$Z>pcxUPTx!^j&RUcceCLWW@^BiN zb<+=VTg5$w^Ezt}NX#N*>JTpr*yb9{fEXpNm(=8DhFO=73Jl4vKz^ea^9fg_G|Ua} zO_#eDKSDX+vEG5R3YeA$UaPu10bXw73~mn)j~2_i`?WG!>5Cr9Zkw{+THm$m3uc?5 z*z;6iC5>Hq>7jk2`9~F5dRP~KdGE>H^k-3d`XP*nb{~oJ=e#}SzQ_*Pnp0ttm?N>a z`x)%rRms|%MPb#xu*?B_(J)*Q?~erG5<;SmN>Fd&?vdBF%er>ximyzf>fYC;1-E{7 zvj^yF-Az|^Q+m!>(P_h)h>967rX#NKCb+y8_t7Tf-fVj7<`{JAgk7KG*7^0hrJv!} zx8t<$djl*+*Pb`w$Ztl!x7S?1JAK&Z>VJnbn_LrjGKRfwptJw`+(bV2|Ify->jw69 z3|S=ErnA#5CS;TIU-%m79kU`Y!d*_hYQ#zai%A0fMlfyf(88Y75b5r87d5Qr&`3(n zEk!F*x;1AT)NwXLV4RT(C%3$kZDaFU50@FmYwlRsp`7LMjtg67q>1UR_Pm^3|LlB; z^F7?N>=y)c<+HyUa0xq(2MgVtg%GY~I`L^cmK(Llg+f^4#|Xm@zogp?mM|7q*Shs)5Z!J zsJG5X(i!+9Cs@ge2Jrx~;w0*MUW1)B{CnyWspzb10Ja)LPyK9RhKnSoz+UdKk!#wG zno;f|y;Rf|-!!kd0#tBzmz0R5VJyaHlHpZk)y7PPIaaL#Eae}jQuq3KE ze?{TlDd(2X_-RfhLVzuM&q`F0O2j$OZ%>jc@*F<|LyqQGZ}QO1<;-##tIU|z8?gSB zV<_QP8R(EJR}Xbcnc{CI#+>5hPfg`;>}Rc+5t~RJMonNOtj}KgTIREFoh_&6ED;qb zyNG(Wg&7w?*xM`!bZ35-(j`X23I5_w*+Bc^x(7OSo|cZ!Sd|7}JzVSP;oL1a&r55G z;8v>=Z$Xrmc|hAVO$uJrhoI$+X~~e5xB#}BuNyeNRN@s^W-T_8M3Tg$!szG8KBon>OM_}I?6Tho0Q#Ojv& zCSHn8-P0Oiqw4VBWKXFTxax9yR!JUc`EM>m#fPFOz%fzGR3Q^~k zIF2{xCNfWNlRGC0XB5^FGajdy9JXhMqfyKc%@{XBYzpLsmt$W^OvUs!8gsFO8 z&V)ByIUN+j6bDcU2V<=z>A{(9o!BAZ<1C|ofs(;{pi3qc0%yzF0}Fo+n}@k;A6qR~ zPH`%tTypN$a=ya z_rg$cU76l4zs@a*{5tu=85nNjTxgq@2B){-i zYMl_+UuZzTZxoN!rb4Ji6K`MW_L`b}JvG7Y_F8_Q-5g3fmnfnMlzS!Ot=PlNQwrr> z=TMQ~8WdqzHE|NP2*`OT3{=Uk4!4d&t<@fr>>NUiYLI2{awKL6pC_tKU|I@l*cv#7 za@DnWW-0=x*J*nLXQ@(Gsm`9>Y$mykw#`?tOVYGq@F+@SMBRM+JLwM=&)sG5X3*VK zWUZkE=VgjQjw3FIZLRHNnp>Lea)c#BBKn%^;t(XhMq=e$+css9Y7`x4(-vW?nG(>jh>dzg~da?GW0R3)cTM zpMj1p!;`#X7Fv5)$O)I}cZZeM#(Jk(Z&YSJku{C$ z6Ieho$@F8T*38jITg?J~o@Co;)AS#ajZWp}ARS)LT{Yh+JG8xv-1MQ2Q4)J&y=8x% zW$6}&MV!dbLd$VyeCrq57~tCp{IXywEKF}V1NJ23J0N}4PtRz9~rs70OlR)|aLj^(_(%!eco<+YMR z2TwzUk%@H|6(VuwjbwRNnTmI)epanWhSvVfeO!SZ&86k^cB@%ApI5BhF;!&V)m5C7 zQ>IQg>8+K=Oq9vhm36Q$h-^5$%GH$&`~m{rZOwiyZ`TfvlUwFF7TrQng}V{q{}HfO zL^g^vIIaMgeJ{Rr<@7VN-flCud+R__H3V3EVzMSqtoXO`s|or$ECs|{#Z4oeipLW` z{;f2rgP6~@i>uQ36`E5*mS^m0&-s`hood#I?R;IeGcn-jTDqnx&&*Ows+C{jqMc;P zSB(9Kqyh2f2bcGJwe8t+()!tIOIyl;TQb|6pJF)tUcOh_vh#fP$^#O*6=4uXk#@q~ z;E}B>wOsPNQ*arNyAo!p(L>;ja%?Q_B$Muqbx_Tyf>}kt;_60Ts4i&+<+m+9 z);l)eg-D$G6;Z^`(#$GEMl&+~AkMK#hj%QKxr1}8+Y%CEm^!)0O8Qbj1TYhlj1JP#LAruNjJZx!YnfwV=XN5GvSPL!3xI1)7$Za?#;IVoWkvgNW4I@ItNgy zrGX}LE!U}uj;mO0Kn}3nlghZl)GId{b`6tK*;0wzY1`-i92N|3U(k^c$8h>FO9M6J zI}`!0SH!}-=9uoTY$LWyBG}v_l3}~**lhIK9$r;`F~D&{DemjIxE2GkdU|fZka=WQ zpDktRYBO_FA~u?GrZYQCNQZS{Zzpf3)5gfT8CNfL;GX4d5NElc#um{ZX&F_;&7=Db zqZ3U~_U4$Fjv8jp3Uj)*vywY2@9~^0x28=tgD0l;fs_+dn+G#q=GK{JoFLLVvG#fE zjQ+7+!2G_^l3%N5;zbv0h}9}017C-2~IYK_j)STHVF0|b7jh(J}VO6#J?;BM-(<8*43BI!M@0=f03 zhI$Q^TK83|+R=TLZ2?P1<~G_Pi4Ig%>%3TVC)S3^V)?Kl)=xxRjI~0yomfQ@`Y*q7 z?^f@>YAFReo_(cYOMB^3s#h!D%nKOk*&gQF46}>4{X^Bx?qfI1Op_6uVn9-XH6606 z@{IjF&a;(O+M5<~Ytqgtp2My4S#F`-^oq@opKN z^eZe(!}ubkr@8gl&+U yELyH5yCUtm3&Maqu7!5Jz;o5$lz}}g=iF?Oj%GS_?P2LZx?G2!7>ca(xcx7s<~?fw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..8123a0975 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,1320 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# lardissone , 2014 +# poli , 2014 +# Ramiro Morales, 2013-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 14:56+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikáans" + +msgid "Arabic" +msgstr "árabe" + +msgid "Algerian Arabic" +msgstr "Árabe de Argelia" + +msgid "Asturian" +msgstr "asturiano" + +msgid "Azerbaijani" +msgstr "azerbaiyán" + +msgid "Bulgarian" +msgstr "búlgaro" + +msgid "Belarusian" +msgstr "bielorruso" + +msgid "Bengali" +msgstr "bengalí" + +msgid "Breton" +msgstr "bretón" + +msgid "Bosnian" +msgstr "bosnio" + +msgid "Catalan" +msgstr "catalán" + +msgid "Czech" +msgstr "checo" + +msgid "Welsh" +msgstr "galés" + +msgid "Danish" +msgstr "danés" + +msgid "German" +msgstr "alemán" + +msgid "Lower Sorbian" +msgstr "bajo sorabo" + +msgid "Greek" +msgstr "griego" + +msgid "English" +msgstr "inglés" + +msgid "Australian English" +msgstr "inglés australiano" + +msgid "British English" +msgstr "inglés británico" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "español" + +msgid "Argentinian Spanish" +msgstr "español (Argentina)" + +msgid "Colombian Spanish" +msgstr "español (Colombia)" + +msgid "Mexican Spanish" +msgstr "español (México)" + +msgid "Nicaraguan Spanish" +msgstr "español (Nicaragua)" + +msgid "Venezuelan Spanish" +msgstr "español (Venezuela)" + +msgid "Estonian" +msgstr "estonio" + +msgid "Basque" +msgstr "vasco" + +msgid "Persian" +msgstr "persa" + +msgid "Finnish" +msgstr "finlandés" + +msgid "French" +msgstr "francés" + +msgid "Frisian" +msgstr "frisón" + +msgid "Irish" +msgstr "irlandés" + +msgid "Scottish Gaelic" +msgstr "gaélico escocés" + +msgid "Galician" +msgstr "gallego" + +msgid "Hebrew" +msgstr "hebreo" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "croata" + +msgid "Upper Sorbian" +msgstr "alto sorabo" + +msgid "Hungarian" +msgstr "húngaro" + +msgid "Armenian" +msgstr "armenio" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "indonesio" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandés" + +msgid "Italian" +msgstr "italiano" + +msgid "Japanese" +msgstr "japonés" + +msgid "Georgian" +msgstr "georgiano" + +msgid "Kabyle" +msgstr "cabilio" + +msgid "Kazakh" +msgstr "kazajo" + +msgid "Khmer" +msgstr "jémer" + +msgid "Kannada" +msgstr "canarés" + +msgid "Korean" +msgstr "coreano" + +msgid "Kyrgyz" +msgstr "kirguís" + +msgid "Luxembourgish" +msgstr "luxemburgués" + +msgid "Lithuanian" +msgstr "lituano" + +msgid "Latvian" +msgstr "letón" + +msgid "Macedonian" +msgstr "macedonio" + +msgid "Malayalam" +msgstr "malabar" + +msgid "Mongolian" +msgstr "mongol" + +msgid "Marathi" +msgstr "maratí" + +msgid "Malay" +msgstr "malayo" + +msgid "Burmese" +msgstr "burmés" + +msgid "Norwegian Bokmål" +msgstr "bokmål noruego" + +msgid "Nepali" +msgstr "nepalés" + +msgid "Dutch" +msgstr "holandés" + +msgid "Norwegian Nynorsk" +msgstr "nynorsk" + +msgid "Ossetic" +msgstr "osetio" + +msgid "Punjabi" +msgstr "panyabí" + +msgid "Polish" +msgstr "polaco" + +msgid "Portuguese" +msgstr "portugués" + +msgid "Brazilian Portuguese" +msgstr "portugués de Brasil" + +msgid "Romanian" +msgstr "rumano" + +msgid "Russian" +msgstr "ruso" + +msgid "Slovak" +msgstr "eslovaco" + +msgid "Slovenian" +msgstr "esloveno" + +msgid "Albanian" +msgstr "albanés" + +msgid "Serbian" +msgstr "serbio" + +msgid "Serbian Latin" +msgstr "latín de Serbia" + +msgid "Swedish" +msgstr "sueco" + +msgid "Swahili" +msgstr "suajili" + +msgid "Tamil" +msgstr "tamil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tayiko" + +msgid "Thai" +msgstr "tailandés" + +msgid "Turkmen" +msgstr "turcomano" + +msgid "Turkish" +msgstr "turco" + +msgid "Tatar" +msgstr "tártaro" + +msgid "Udmurt" +msgstr "udmurto" + +msgid "Ukrainian" +msgstr "ucraniano" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "uzbeko" + +msgid "Vietnamese" +msgstr "vietnamita" + +msgid "Simplified Chinese" +msgstr "chino simplificado" + +msgid "Traditional Chinese" +msgstr "chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas de sitio" + +msgid "Static Files" +msgstr "Archivos estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "El número de página no es un entero" + +msgid "That page number is less than 1" +msgstr "El número de página es menor a 1" + +msgid "That page contains no results" +msgstr "Esa página no contiene resultados" + +msgid "Enter a valid value." +msgstr "Introduzca un valor válido." + +msgid "Enter a valid URL." +msgstr "Introduzca una URL válida." + +msgid "Enter a valid integer." +msgstr "Introduzca un valor numérico entero válido." + +msgid "Enter a valid email address." +msgstr "Introduzca una dirección de email válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "Introduzca un “slug” válido compuesto por letras, números o guiones." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Introduzca un “slug” compuesto por letras Unicode, números, guiones bajos o " +"guiones." + +msgid "Enter a valid IPv4 address." +msgstr "Introduzca una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Introduzca una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Introduzca una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Introduzca sólo dígitos separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Asegúrese de que este valor sea %(limit_value)s (actualmente es " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +msgid "Enter a number." +msgstr "Introduzca un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no exista en total mas de %(max)s dígito." +msgstr[1] "Asegúrese de que no existan en total mas de %(max)s dígitos." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrese de que no exista mas de %(max)s lugar decimal." +msgstr[1] "Asegúrese de que no existan mas de %(max)s lugares decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrese de que no exista mas de %(max)s dígito antes del punto decimal." +msgstr[1] "" +"Asegúrese de que no existan mas de %(max)s dígitos antes del punto decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"La extensión de archivo “%(extension)s” no está permitida. Las extensiones " +"aceptadas son: “%(allowed_extensions)s”." + +msgid "Null characters are not allowed." +msgstr "No se admiten caracteres nulos." + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "El valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar en blanco." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe ser único/a para un %(lookup_type)s " +"%(date_field_label)s determinado." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "El valor de “%(value)s” debe ser Verdadero o Falso." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "El valor de “%(value)s” debe ser Verdadero, Falso o None." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"El valor de “%(value)s” tiene un formato de fecha inválido. Debe usar el " +"formato AAAA-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"El valor de “%(value)s” tiene un formato de fecha correcto (AAAA-MM-DD) pero " +"representa una fecha inválida." + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"El valor de “%(value)s” tiene un formato inválido. Debe usar el formato AAAA-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"El valor de “%(value)s” tiene un formato correcto (AAAA-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ]) pero representa una fecha/hora inválida." + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "El valor de “%(value)s” debe ser un número decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"El valor de “%(value)s” tiene un formato inválido. Debe usar el formato [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Dirección de correo electrónico" + +msgid "File path" +msgstr "Ruta de archivo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "El valor de “%(value)s” debe ser un número de coma flotante." + +msgid "Floating point number" +msgstr "Número de coma flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "El valor de “%(value)s” debe ser un número entero." + +msgid "Integer" +msgstr "Entero" + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +msgid "Small integer" +msgstr "Entero pequeño" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "El valor de “%(value)s” debe ser None, Verdadero o Falso." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive big integer" +msgstr "Entero grande positivo" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero pequeño positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (de hasta %(max_length)s caracteres)" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"El valor de “%(value)s” tiene un formato inválido. Debe usar el formato HH:" +"MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"El valor de “%(value)s” tiene un formato correcto (HH:MM[:ss[.uuuuuu]]) pero " +"representa una hora inválida." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binarios crudos" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” no es un UUID válido." + +msgid "Universally unique identifier" +msgstr "Identificador universalmente único" + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser JSON válido." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "No existe una instancia de %(model)s con %(field)s %(value)r." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave foránea (el tipo está determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno-a-uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "relación %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "relaciones %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relación muchos-a-muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Introduzca un número entero." + +msgid "Enter a valid date." +msgstr "Introduzca una fecha válida." + +msgid "Enter a valid time." +msgstr "Introduzca un valor de hora válido." + +msgid "Enter a valid date/time." +msgstr "Introduzca un valor de fecha/hora válido." + +msgid "Enter a valid duration." +msgstr "Introduzca una duración válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "La cantidad de días debe tener valores entre {min_days} y {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se envió un archivo. Verifique el tipo de codificación en el formulario." + +msgid "No file was submitted." +msgstr "No se envió ningún archivo." + +msgid "The submitted file is empty." +msgstr "El archivo enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracter " +"(tiene %(length)d)." +msgstr[1] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres " +"(tiene %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor envíe un archivo o active el checkbox, pero no ambas cosas." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Seleccione una imagen válida. El archivo que ha seleccionado no es una " +"imagen o es un archivo de imagen corrupto." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Seleccione una opción válida. %(value)s no es una de las opciones " +"disponibles." + +msgid "Enter a list of values." +msgstr "Introduzca una lista de valores." + +msgid "Enter a complete value." +msgstr "Introduzca un valor completo." + +msgid "Enter a valid UUID." +msgstr "Introduzca un UUID válido." + +msgid "Enter a valid JSON." +msgstr "Introduzca JSON válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Los datos de ManagementForm faltan o han sido alterados. Campos faltantes: " +"%(field_names)s. Si el problema persiste es posible que deba reportarlo como " +"un error." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Por favor envíe un máximo de %d formulario." +msgstr[1] "Por favor envíe un máximo de %d formularios." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Por favor envíe %d o mas formularios." +msgstr[1] "Por favor envíe %d o mas formularios." + +msgid "Order" +msgstr "Ordenar" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija la información duplicada en %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija la información duplicada en %(field)s, que debe ser única." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija la información duplicada en %(field_name)s que debe ser " +"única para el %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados detallados mas abajo." + +msgid "The inline value did not match the parent instance." +msgstr "El valor inline no coincide con el de la instancia padre." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Seleccione una opción válida. La opción seleccionada no es una de las " +"disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” no es un valor válido." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s no puede ser interpretado en la zona horaria " +"%(current_timezone)s; ya que podría ser ambiguo o podría no existir." + +msgid "Clear" +msgstr "Eliminar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "si,no,talvez" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mie" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Enero" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "enero" + +msgctxt "alt. month" +msgid "February" +msgstr "febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "abril" + +msgctxt "alt. month" +msgid "May" +msgstr "mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "junio" + +msgctxt "alt. month" +msgid "July" +msgstr "julio" + +msgctxt "alt. month" +msgid "August" +msgstr "agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "setiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "Esta no es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d año" +msgstr[1] "%(num)d años" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificación CSRF fallida. Petición abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Ud. está viendo este mensaje porque este sitio HTTPS tiene como " +"requerimiento que su navegador web envíe un encabezado “Referer” pero el " +"mismo no ha enviado uno. El hecho de que este encabezado sea obligatorio es " +"una medida de seguridad para comprobar que su navegador no está siendo " +"controlado por terceros." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Si ha configurado su browser para deshabilitar las cabeceras “Referer”, por " +"favor activelas al menos para este sitio, o para conexiones HTTPS o para " +"peticiones generadas desde el mismo origen." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Si está usando la etiqueta " +"o está incluyendo el encabezado “Referrer-Policy: no-referrer” por favor " +"quitelos. La protección CSRF necesita el encabezado “Referer” para realizar " +"una comprobación estricta de los referers. Si le preocupa la privacidad " +"tiene alternativas tales como usar en los enlaces a " +"sitios de terceros." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ud. está viendo este mensaje porque este sitio tiene como requerimiento el " +"uso de una 'cookie' CSRF cuando se envíen formularios. El hecho de que esta " +"'cookie' sea obligatoria es una medida de seguridad para comprobar que su " +"browser no está siendo controlado por terceros." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Si ha configurado su browser para deshabilitar “cookies”, por favor " +"activelas al menos para este sitio o para peticiones generadas desde el " +"mismo origen." + +msgid "More information is available with DEBUG=True." +msgstr "Hay mas información disponible. Para ver la misma use DEBUG=True." + +msgid "No year specified" +msgstr "No se ha especificado el valor año" + +msgid "Date out of range" +msgstr "Fecha fuera de rango" + +msgid "No month specified" +msgstr "No se ha especificado el valor mes" + +msgid "No day specified" +msgstr "No se ha especificado el valor día" + +msgid "No week specified" +msgstr "No se ha especificado el valor semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No hay %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"No hay %(verbose_name_plural)s futuros disponibles porque %(class_name)s." +"allow_future tiene el valor False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Cadena de fecha inválida “%(datestr)s”, formato “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se han encontrado %(verbose_name)s que coincidan con la consulta " + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Página debe tener el valor “last” o un valor número entero." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lista vacía y “%(class_name)s.allow_empty” tiene el valor False." + +msgid "Directory indexes are not allowed here." +msgstr "" +"No está habilitada la generación de listados de directorios en esta " +"ubicación." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” no existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Listado de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "La instalación ha sido exitosa. ¡Felicitaciones!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ver las release notes de Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Está viendo esta página porque el archivo de configuración contiene DEBUG=True y no ha configurado ninguna URL." + +msgid "Django Documentation" +msgstr "Documentación de Django" + +msgid "Topics, references, & how-to’s" +msgstr "Tópicos, referencia & how-to’s" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Una app de encuesta" + +msgid "Get started with Django" +msgstr "Comience a aprender Django" + +msgid "Django Community" +msgstr "Comunidad Django" + +msgid "Connect, get help, or contribute" +msgstr "Conéctese, consiga ayuda o contribuya" diff --git a/venv/Lib/site-packages/django/conf/locale/es_AR/__init__.py b/venv/Lib/site-packages/django/conf/locale/es_AR/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es_AR/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es_AR/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0432b7a280b73802e872ac329edeb8c815d9e807 GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYH_?{kbZo8W?p7Ve7s&k|u(GS2o%!wjXLdL1^*Tf~{(Sj0`#}@L?>cA>stP_-3)cn_fIuW5 z5d|nj0~#@aK`dZV3$)M~I71w2FDSq*2-Nvbf;Q@c4mt;2)C1?}!XbwJl3ns9@0YYT zPRjPq=WCZ%E66Q*h+xdCC5yyV^vm{cs}mlo?nKE6NEA|0s8aXdcGxNh2g(cDSTM$d zQ@(tLM#8+jIHgD7_POv0HHCZnNWQ%%M-SC^5$3Q5y0YXdfoj=?|kPB-c&ayKZ%^Jp1w1WU$4i| z!*PzGy}>wyau#jUcwJyPNeXQI>!{}SMh%rRV zaJ|UHC|l3PRThP-Sd4KX+2TCQ)3Cs!+wDE~F3r$p6~8B|=J-uz7=|I6lVT~7`O7g3 I$B-QP4|}b?Z~y=R literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_AR/formats.py b/venv/Lib/site-packages/django/conf/locale/es_AR/formats.py new file mode 100644 index 000000000..601b45843 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_AR/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j N Y" +TIME_FORMAT = r"H:i" +DATETIME_FORMAT = r"j N Y H:i" +YEAR_MONTH_FORMAT = r"F Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = r"d/m/Y" +SHORT_DATETIME_FORMAT = r"d/m/Y H:i" +FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '31/12/2009' + "%d/%m/%y", # '31/12/09' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..678fdc715bd2c8520453f41bbc4e7a5328af9e8d GIT binary patch literal 18079 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 000000000..9f839fea5 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,1258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlos Muñoz , 2015 +# Claude Paroz , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikáans" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerí" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "Bosnio" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Griego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés Australiano" + +msgid "British English" +msgstr "Inglés Británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español venezolano" + +msgid "Estonian" +msgstr "Estonio" + +msgid "Basque" +msgstr "Vasco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Gallego" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesio" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonés" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kazajo" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreano" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Luxenburgués" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letón" + +msgid "Macedonian" +msgstr "Macedonio" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Burmese" +msgstr "Birmano" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepalí" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk" + +msgid "Ossetic" +msgstr "Osetio" + +msgid "Punjabi" +msgstr "Panyabí" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués brasileño" + +msgid "Romanian" +msgstr "Rumano" + +msgid "Russian" +msgstr "Ruso" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanés" + +msgid "Serbian" +msgstr "Serbio" + +msgid "Serbian Latin" +msgstr "Serbio latino" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suajili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tártaro" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chino simplificado" + +msgid "Traditional Chinese" +msgstr "Chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas del sitio" + +msgid "Static Files" +msgstr "Archivos estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Ingrese un valor válido." + +msgid "Enter a valid URL." +msgstr "Ingrese una URL válida." + +msgid "Enter a valid integer." +msgstr "Ingrese un entero válido." + +msgid "Enter a valid email address." +msgstr "Ingrese una dirección de correo electrónico válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Ingrese una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Ingrese una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ingrese una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Ingrese solo números separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Asegúrese de que este valor es %(limit_value)s (es %(show_value)s )." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +msgid "Enter a number." +msgstr "Ingrese un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no hayan mas de %(max)s dígito en total." +msgstr[1] "Asegúrese de que no hayan mas de %(max)s dígitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrese de que no hayan más de %(max)s decimal." +msgstr[1] "Asegúrese de que no hayan más de %(max)s decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrese de que no hayan más de %(max)s dígito antes del punto decimal." +msgstr[1] "" +"Asegúrese de que no hayan más de %(max)s dígitos antes del punto decimal" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar en blanco." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Tipo de campo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Dirección de correo electrónico" + +msgid "File path" +msgstr "Ruta de archivo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Número de punto flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Entero" + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero positivo pequeño" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hasta %(max_length)s)" + +msgid "Small integer" +msgstr "Entero pequeño" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos de binarios brutos" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "La instancia del %(model)s con %(field)s %(value)r no existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Llave foránea (tipo determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno-a-uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Relación muchos-a-muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Ingrese un número entero." + +msgid "Enter a valid date." +msgstr "Ingrese una fecha válida." + +msgid "Enter a valid time." +msgstr "Ingrese una hora válida." + +msgid "Enter a valid date/time." +msgstr "Ingrese una fecha/hora válida." + +msgid "Enter a valid duration." +msgstr "Ingrese una duración válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se ha enviado ningún fichero. Compruebe el tipo de codificación en el " +"formulario." + +msgid "No file was submitted." +msgstr "No se ha enviado ningún fichero." + +msgid "The submitted file is empty." +msgstr "El fichero enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d carácter " +"(tiene %(length)d)." +msgstr[1] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres " +"(tiene %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Por favor envíe un fichero o marque la casilla de limpiar, pero no ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se " +"trataba de una imagen corrupta." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Escoja una opción válida. %(value)s no es una de las opciones disponibles." + +msgid "Enter a list of values." +msgstr "Ingrese una lista de valores." + +msgid "Enter a complete value." +msgstr "Ingrese un valor completo." + +msgid "Enter a valid UUID." +msgstr "Ingrese un UUID válido." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) *%(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Los datos de ManagementForm faltan o han sido manipulados" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor, envíe %d o menos formularios." +msgstr[1] "Por favor, envíe %d o menos formularios." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Por favor, envíe %d o mas formularios." +msgstr[1] "Por favor, envíe %d o mas formularios." + +msgid "Order" +msgstr "Orden" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija el dato duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija el dato duplicado para %(field)s, este debe ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija los datos duplicados para %(field_name)s este debe ser " +"único para %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados abajo." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Escoja una opción válida. Esa opción no está entre las disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Limpiar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Cambiar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sí,no,quizás" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mié" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ene." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Enero" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "Noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "Esta no es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d año" +msgstr[1] "%d años" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d días" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificación CSRF fallida. Solicitud abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porqué esta web requiere una cookie CSRF cuando se " +"envían formularios. Esta cookie se necesita por razones de seguridad, para " +"asegurar que tu navegador no ha sido comprometido por terceras partes." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Se puede ver más información si se establece DEBUG=True." + +msgid "No year specified" +msgstr "No se ha indicado el año" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "No se ha indicado el mes" + +msgid "No day specified" +msgstr "No se ha indicado el día" + +msgid "No week specified" +msgstr "No se ha indicado la semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Los futuros %(verbose_name_plural)s no están disponibles porque " +"%(class_name)s.allow_future es Falso." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se encontró ningún %(verbose_name)s coincidente con la consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Los índices de directorio no están permitidos." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/es_CO/__init__.py b/venv/Lib/site-packages/django/conf/locale/es_CO/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es_CO/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es_CO/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed5f04696987781f14061e2e696ca29d89d74463 GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYH_@?zkYmtW?p7Ve7s&ke|HMEbpy2h+xPm zkIu^}brj|A{-YcWIJkxZ#9WzXt7`U8m@`O-1ut*yU0HQc784GroaK?g#{%zFw_V=k zJwE2qpqcj%S&mmnyguUX{M8FIY(q*qUGzR;iw0}`C}xB-huRO)wCSH-u3k}I%=nAmR(kQzNz?M zWcf3=*vm9y>N-#TZ1AQUIy0&OYHP$m+{gZ6@6U%g` znlbrFq)hSjy?OXH9zhp}DTdY-;{Zy@d>eM9M z@E|xB9tfAY{Bs=}a5wVD9be`6ddEu~-wt=C++~p0n=9b1@JhH3+~n?G5BDN{1Ei_u z^Kd`-WvKVu19yi%f=`9_LzR2X@$c^bo`)6f-4E`~{aH}Y^}!kNIdBhn8dU$zfX{+2 zhDX7dyZf8m{p+BfzXjU%K(+H8sCw>m`~_6G-$J$bF{q*bFG$nOzE3aOdkoa`^PtKt zgnI5YsBu3Xs(&wldcFzO&sRdt&qYw>FNMdztDv6yGE{%Q2UY&pQ1w3wHO_y5YVV$h z8#4;`hwq0M!S})AP=Zt7x8QT(Q=VzeB6t==HOxhh?|~YJPeUFxUx7!$2V8m&22=WS zBve06gzEp9Q1w)y^zCKvVEAsRa@Rw(e*&HdzYkZz1xFb3H27M0G`t*Y{BDKn=N*pU zfi%JV7)rnX0#)wsQ2pM^E9yA_D*qVR2j@eL=S$%(uWO(`|feP7wWlR zK#lVwF8!!W{}t*zJIyTgZg2P$(g#E39|`roUa0oYhpOj9sBt+3N?!+|+VK)7eIAC# z!UU@P)$acL9X|@y&QC(s`vu3_pxXNtsQT`7>F+_+^AneTz}ivI!(x1OM?mer> zKMblLM?qBF^g-2g22{TWpxUt-N?*=*`6E#6h@qYzb?FPC^yVVCGrR&G2d{!h!8@Sz z{I^i!Bc+pm9s>2;Ak=ypcHH22F;qLQgdV&Ws{gk`>EoSH?S9bZKMZ#!{U}@rA9wi+ zXv7NA3*kKYY8b;C;IrYZ*~Tn^{ZRdT8`St+2G#EOLACovsQ2FiH7<8UweNnH|7*Al z=|8&s$Dzte`Im$J;puQK)c9QuRo{o8=IP^5<8h0-e;3@H^p9NneyDZ(FjV(;Ryo7dZ|%`cThhQ2PBwmw$!hW_SNqC_VcwRJotK{Kp;l#%Sn$ zM?mS*0>>p#&#i{qU#d{=OQ6cX0m?344(+%*-r#tXcRJn;_oUwM zL5FJ-K=4CgG#PRSrIJT29FNOa^`un|wJ{^dWSO4ZZ zo(9#Q=R=LduuG4+`Xz`aNx1$Dmo?io1|M^h$4@0e&7;2qg z1hvktfvV?rsQ!NwYJJ=fHO~)0J^weCzx%u*y)RTd4uN`pCR96mpz1%x<-Y)`UF)FQ zHRAFwfcul);P@t}_g?{3@AYs$_*tm;e+|kW+zs`fT}jA)I25YWxyhw}4%Lo*o>SPd zqoKxi8B{y!PUTdM|V;IUVwVd!Bs+VvYK{d^3nzcUsV<@SYo&p|GIID8uEnNarNB&hjW2r!4}er{ z4ua~}IdA~3ary6uW2Enc&x7ZlT9m&Gs$X|QjqeYj+VL}ZD0~#^{rf!E?Q2lwd!WW` zF4Q=k09Ec}cmO;Nu7azf*2OhY_5T^_`CVy*?ET(QcIr^5_Z|y14~ra^!NW=SyZfQb zABP%`*T5s-rBLm-39218JKhF09(O>!@7pf@6UPUj+Vd-y{vA|1AA_2|olYy}=_si6 zd?sW`n{nvDkHe$jUGSOkG5Bbe5i4&K#fz~-5+=NUjfzL*SY+Q zq5AVyD80B8O26L=bNEr0p0%W?w-2&Kn&aWKpbw>|7ee*xQmFQ9a_MWK+Vydl|7oc9 zeGaM}x4QK0j$e2Dw&Oie<$mb+Q^yD0{f8ZY@A#PGU!k7UqS5i!Xq zvmK9hoDbE`lc1hE1?ssKQ2iW$JHhkdF7SNEb&gfXy5opr?3g-^Ilc_4-d91r?_!t# zPRDmcz3)n>c3tiAuYvoL{veb-+yvRe%)LzjbJM6Ubi1Ne#y1fGk7`jVdPWD zorr!1PzIOCdd5`bqsURn z3Piu(B8oS4|72TUhWyoKdX87YO~}h#`rUAUL~BRm@F1e!OOZ?${LVr&Hs4l)A11pT_eckfc^`W%=yDsmG@G|5gmu8up=OdUo`+G5e ze}tTl+1p=9kLcV8<~yh=Of=iWN+HY>ySSq`n?6& zllQ;KriwrFz_*Zpae3c>vL*WMPuZWr6uD6u{Qk3md9$PN8RP-vZY8Gu&L#axs8bfnOWDsrF}e@h8u%9HLo(B1yfV0nO*a0{_L{#|AN4lOaqd04)M&+D6M7JFw7 zo-^RZmGwb2GmHDp;^8D5@%<<@i<=cc3jK(SdXRA8El&JOST&2=N!T=HBB=*a7OJ2( z*ye$>!L3$MJeg*>o-~W|dY)20e-gi`vdg1-)0W*BBo#kg&y!|}pI(p$W=YWWlRVXP zOM<9Qd9x&}dp#%HF`eUuQ5Mi5vm}n20af)ZXLf?b8%pxPixY2!-%Nu!TfKc;aZ{xR z;>Z?CZA+IV{>IQYY*n0Ov^Gd-ND^c*jYz_brgoaVByZMz+pQ%zJ*D7MKl7V3cWJ|q z>Lh7aVwT3uxK-&Mm!)y5<@csR+fV!~sFfW_&C(?HGxc|Ao+J!sbKET57*rc(Suvo? zDDL$XN*JP$L$3A`xIQ0itpMgtkupwBF0a_X_C*5^@}jh7kA;%d%BXEdErT9(tP;v%Ev%Ugcf z^!!>a3DVS*v%Ne@bKa3Pd|IvA-7CFTTx3Tqu$I4pg;fjdVMfcmEM{=~sN%^znr`h` z7VxOwL`@n#z0Eu(D$RIhGi-&~I(v(yTWv5w)eM#Dp$RI=s&2$%Wq~KGRwGrp>Cd&1M zp4B^iuNt@7QvE^+RA-ToC9=!LDgZ{j%rDlbL({DP1Iz4-9_1h7eUhw`4uS}bH{r(HDVuYiV z!3?9i%+Q)Btg?+VO&J579_I`Y7daLuNvo`S5{y@4yxj<*uAwi6dYd(Gx5lkjIM!gd za1AIs5J%1N!qBANq*<}nBr172IQ!95W z29|7gZrjI|&JhrkCZn4B+%7byO%-0x>>hDlv5x1Yb2Lrt*eRK+im_^#m25BS#F>6% z=k-hUwFvUk&JoZuH|ij3X_sqVe7=?qw|9OtYV+jj+v~glX<) ze*25or(A3Zt6ff4KYK7D9RT&%_GtiL1NUiwl8MjoO!{a8u^Et+?N$%;VmM}HdM%$V zTw2N=?ctK4?OPO{)Fr>vBNgKP9*d?LqMWFJH1GEHUoB$d!949UNY)fA7)VIhDo|+>+cuGz(7D!pWf$=C#(h(XlT6jkTd9yjW z=WpQ!^_g?6V@vQg9L!%~2r!~! zjj-DAT6oy18%K?Kqq-+o&69kfb3EG0yKVb4ZTJUqJd(H3F1$GwGd)=6n!SVf+1)0k zKe(fvqCw&97wW{OZWT-e+tHq?{O=-Ni8pB28Iw3`PzB3^)z{_YuZmN=`%$LL8Iw*% z+QR-#X6Mm*PCsU~Kju}!hz-Ebf>|B2S~X#-^VCk;zltwD1orU4+tS(oYU1=M&49Tl5s(hmLw6kIf46;e6 z6OJC%EF=};F4=|5(qsq1CJu(EU%%f@&0sSg^+zmh+fY+0^3-1jleqEE(Th_qr zn!zb!S)LOIb#$nD+A66pOSIs(RY6X3FijfMF~7l44F)w$=HR$?kK*hxyU-dLQBu(H#d3K;b_zJvO&w}5Tnz#d8s;IqOEZ-CHI_#l z;gpvuFvJlZDGKGuh~@yd)vT$t@+32BMiPcr%CsgLiQ+NX#_6ebl%A7l9i3O#?b02O za}Uc#5ynd!g(J+^n_7yK+G#(WmW)+^p^t|a0vKLOTo=tCh)?m<9 zUNf84#jcDZ&eK(-6NBi=>$uQed8PN&on<>XS$WaB$+YWQcLx2MOm;T-uDo(9@5)lI z3M+^kYW#L${Jd^zLDdWg6|){iUY|FS$h5F3EvCH{)}pZ9$V?RDbVc!~i3y&?iD^p< zI7parjx|wy9EB@^!2>AuG1VE#+WO8;%?743LEjFFxkWK0#>IY?#0uQ?uB`R0mE#ac z3%wdmuE#T02W=u*z5QuDto1I*>uK*$ywIDm>YU!y!6;{hIOyLKIktd}-YIG2wA5zxRW?4C;_|-h zLGMuDwr4cfSFBTj6FXfteFIPOG<<02Cq z#8a|S_9ErLAKB-ME1T(0e8N5_lCk{|aTy_ALtKXFFfOX>qe8^KLc|lBIx*sj>rylE zYGT8R=GF0YqS!31C`Mf5>J+V4HaW`@LoVXQzKar5)CGyTsuStr_(y1%Iz5i0E?Ug3 zt}yXhpTL2saQxPOkj5@bJh8cm+r$KwSjn9JihwchM<-IuBB`;@B(WFU(`?+i7kfRO zn?;mZWjGqxA_R%!(rZ-HsGW#$N*A&C*~E=er_uB~o7kkdhgmXlvjW95l`yde$%cu! z$pNi~Tg91-mL&=3j8G?NOvFK_+PDl%)VN|nvj?_N0~;`A2&)<4GR0sCI^+Jv3K;86 zD+nI@UXK(}dPAU~$VlhxF~hF+6tQH}2_08M2Cw@D@d=w} z&WN!EHFd_usXGPjiHH};kxqD6BkeQ>RSN18H{;PMY@&m!n$+M#+M3v8C#@4)p4d!u znOZvGXTq>mbsKq%X~pI!Y)y}Cat!E%o3jw_19Q?9I;{~p-Li52 z*bA7lp8xeLHf`8mAO0V|f~HN6ReL=)vun6hZ%5;u20j6jai%u*LN+VDa!jvx2Qy}C z2owz1P7Ua^RpdN!ip0uS@H*~8-LoXFH3V6>E7~Hcx2f z7VFAJQ7`Th;a0mUrjMh;6fiT4_YK zU1GB97>cc!l}mGxS?h2@qBp>a$(J53o% zCzw&pCJ~={juVIeR{ZrCWwyN{J#GG;NbUbXt*#kvOs2duow%{dX5iZC0_#)uuPp=X zv5l)Ux@?lIcFZTuHs0#AnEGOZpy6mtsHM<%1x1x6xUPL-ptEOr?VOms9P5nWeIPfv z5fWji_NGs)htL_j6zjN$4NR{p_AQ3Hh_(B**lxDmt=i@&>|WI|xQ08hg3Yq37jiC? zBus*hyUPz4C^np_fz`=asSTzxTSP9}gntRX+ihK2)%Jq#h0&%t#hx-5h;IgL+hrUc zH>nx0)kQ?&L*1~Ucu<7mCvH|OUb}qPx}TaFJ;AKR;V<^xsqy&8OuWTz`%=oShvZA2 zMfRr?kY6>isgCDBV8pHH9Y^Im4Jab>s#cmoU_Q1JO<*2(jN>4GmlBjysyjBn-Z~*J zKEKq)=VNnr;inOwCk&2r#-j03#pYwvw4r$-^SNfV49&+}m67??cK+q6v~nVBX|LZ~ zTu>(2sFLIS;RBYx9$n~obBt8~#C62!c|GSxgu6v_-q_Iml%lvYMU);Tk{;p3=&Pt= z;TU}BL>U|xBtA(~US`i!uv$Vk`Vh?_I?}9 z;h3|dBJKdRgNp2lXdvbvNB9Sat`7sw3ts9RGZrbaHI{AUEX7n0m!Lu}r+HFK@+d|{ z_-piSKz=iy;E1E?-xY@PC_}>r3og=U=392E!U>N=Z0A4aIHzNhpp0`Wu|_uSQfVof{Ej$<=2K> z$Lm4uq*Zr9-Nwg;nC}mKS1{2wE=z8Yc*R!-=_UQ+nA+vKINN~D;b4!VOBd&F zt5iA3of--s)!ep;c`Lp}IGZq>vrDjl-YC=JX;;ePnci)iR_Mc&j^_d2BbIZRDF)0M zdfMkaBW7Y^Gb@Kt#9y{P5w9-H6=zXCw@H`jb#)tsWN~Cer&K{7<4QBEE5azVPwi6_ ztJ_iG|7l7kXY1G3`Cyc7;0%Sw3U$&RNmul-Lff(=qr_02Fmw7sk=rj6Tvzen_(Fjz zq;(a=^q;vcwYykZ_7ekVFLx;Nx`swGLU^TXIk?z|T@LO+jhyUCmuX?4xSKNEe9558 zi<>yA&JVF4FnCYlx10_R9p`SRcbb>4SCoK=wm|{d7QB zo!;3npo{BKgEI;G03eUf`E}c@$`vp7S4HYwmOfw*sAqvP7eI;)(6bk^j)S)M9T*K+W;TCNjLWJ{659`||X Fe*g)P3KIYT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b4705dd0 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,1261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abe Estrada, 2011-2013 +# Claude Paroz , 2020 +# Jesús Bautista , 2019-2020 +# Sergio Benitez , 2021 +# zodman , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-17 03:02+0000\n" +"Last-Translator: Sergio Benitez \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikáans" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Algerian Arabic" +msgstr "Árabe argelino" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerbaijani" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "bretón" + +msgid "Bosnian" +msgstr "Bosnio" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "Bajo sorbio" + +msgid "Greek" +msgstr "Griego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés australiano" + +msgid "British English" +msgstr "Inglés británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "Español Colombiano" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de nicaragua" + +msgid "Venezuelan Spanish" +msgstr "español de Venezuela" + +msgid "Estonian" +msgstr "Estonio" + +msgid "Basque" +msgstr "Vasco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "Gaélico escocés" + +msgid "Galician" +msgstr "Gallego" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Alto sorbio" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "Armenio" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesio" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonés" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Cabilio" + +msgid "Kazakh" +msgstr "Kazajstán" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Coreano" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "luxemburgués" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letón" + +msgid "Macedonian" +msgstr "Macedonio" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "burmés" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepal" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Noruego Nynorsk" + +msgid "Ossetic" +msgstr "osetio" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués de Brasil" + +msgid "Romanian" +msgstr "Rumano" + +msgid "Russian" +msgstr "Ruso" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanés" + +msgid "Serbian" +msgstr "Serbio" + +msgid "Serbian Latin" +msgstr "Latin Serbio" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "udmurto" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chino simplificado" + +msgid "Traditional Chinese" +msgstr "Chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas del sitio" + +msgid "Static Files" +msgstr "Archivos Estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Ese número de página no es un número entero" + +msgid "That page number is less than 1" +msgstr "Ese número de página es menor que 1" + +msgid "That page contains no results" +msgstr "Esa página no contiene resultados" + +msgid "Enter a valid value." +msgstr "Introduzca un valor válido." + +msgid "Enter a valid URL." +msgstr "Ingrese una URL válida." + +msgid "Enter a valid integer." +msgstr "Ingrese un entero válido." + +msgid "Enter a valid email address." +msgstr "Introduzca una dirección de correo electrónico válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Introduzca un \"slug\" válido que conste de letras, números, guiones bajos o " +"guiones." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Introduzca un \"slug\" válido que conste de letras Unicode, números, guiones " +"bajos o guiones." + +msgid "Enter a valid IPv4 address." +msgstr "Introduzca una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Introduzca una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Introduzca una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Introduzca sólo números separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Asegúrese de que este valor es %(limit_value)s (es %(show_value)s )." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +msgid "Enter a number." +msgstr "Introduzca un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no hay más de %(max)s dígito en total." +msgstr[1] "Asegúrese de que no hay más de %(max)s dígitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Caracteres nulos no están permitidos." + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "El valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar en blanco." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "El valor \"%(value)s\" debe ser Verdadero o Falso. " + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Dirección de correo electrónico" + +msgid "File path" +msgstr "Ruta de archivo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "El valor \"%(value)s\" debe ser flotante." + +msgid "Floating point number" +msgstr "Número de punto flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Entero" + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +msgid "Small integer" +msgstr "Entero pequeño" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero positivo pequeño" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hasta %(max_length)s)" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Los datos en bruto" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser JSON válido" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave foránea (el tipo está determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno-a-uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Relación muchos-a-muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Introduzca un número entero." + +msgid "Enter a valid date." +msgstr "Introduzca una fecha válida." + +msgid "Enter a valid time." +msgstr "Introduzca una hora válida." + +msgid "Enter a valid date/time." +msgstr "Introduzca una fecha/hora válida." + +msgid "Enter a valid duration." +msgstr "Introduzca una duración válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se envió un archivo. Verifique el tipo de codificación en el formulario." + +msgid "No file was submitted." +msgstr "No se envió ningún archivo." + +msgid "The submitted file is empty." +msgstr "El archivo enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor envíe un archivo o marque la casilla, no ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Seleccione una imagen válida. El archivo que ha seleccionado no es una " +"imagen o es un un archivo de imagen corrupto." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Seleccione una opción válida. %(value)s no es una de las opciones " +"disponibles." + +msgid "Enter a list of values." +msgstr "Introduzca una lista de valores." + +msgid "Enter a complete value." +msgstr "Ingrese un valor completo." + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordenar" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija la información duplicada en %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija la información duplicada en %(field)s, que debe ser única." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija la información duplicada en %(field_name)s que debe ser " +"única para el %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados detallados mas abajo." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Seleccione una opción válida. La opción seleccionada no es una de las " +"disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Borrar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sí,no,tal vez" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mie" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ene." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Enero" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "Noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "Esta no es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d año" +msgstr[1] "%d años" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d días" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "No se ha especificado el valor año" + +msgid "Date out of range" +msgstr "Fecha fuera de rango" + +msgid "No month specified" +msgstr "No se ha especificado el valor mes" + +msgid "No day specified" +msgstr "No se ha especificado el valor dia" + +msgid "No week specified" +msgstr "No se ha especificado el valor semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No hay %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"No hay %(verbose_name_plural)s futuros disponibles porque %(class_name)s." +"allow_future tiene el valor False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se han encontrado %(verbose_name)s que coincidan con la consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "La página no es \"last\", ni puede ser convertido a un int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Los índices del directorio no están permitidos." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "¡La instalación funcionó con éxito! ¡Felicidades!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "Documentación de Django" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "Comunidad de Django" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/es_MX/__init__.py b/venv/Lib/site-packages/django/conf/locale/es_MX/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es_MX/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es_MX/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14d56011c9061aeef2ea75fb144d0dae8f27f63b GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYH_@8gnoQ{W?p7Ve7s&k62i2X?dw)CCScTg8}Q4jRcDL6%an;4xHgB1r6j5y`N zc?G3T;^OUpl!E~W*D!#XtI}*;%^nI11__Da6`j4Ss_w}0gd?h8c_i?OzSG0ML zPk1zH7sErA@Ch}AkMx!t-;?j|%C{wqQ6Kaq(UE<{ zv~#HYp)K1YXyQ=hjQ}MsZ z@@H_qmube#bsqcK;B|eBV?LDROHCKAd|RH0mgtxkICoUjwM9c}uz}&~pJdCQTBbYG zjOi~TW6G=V&HeYw33PFkVQ6hJ4xp5V+a%iL7*69{-OiyBXE?u@W$7vkb9fVNZs1is zhd9ooi|Zi#5iBDN(JI(1Qz1+@3t^px!8#Hm?CW2JMVci+j>p%#TlRgDqU}2RP<;yg TrZjYmCYzHbS%zk5k|qBE$LPw? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_MX/formats.py b/venv/Lib/site-packages/django/conf/locale/es_MX/formats.py new file mode 100644 index 000000000..d675d79bd --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_MX/formats.py @@ -0,0 +1,26 @@ +# This file is distributed under the same license as the Django package. +# +DATE_FORMAT = r"j \d\e F \d\e Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i" +YEAR_MONTH_FORMAT = r"F \d\e Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = "d/m/Y" +SHORT_DATETIME_FORMAT = "d/m/Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday: ISO 8601 +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' + "%Y%m%d", # '20061025' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", +] +DECIMAL_SEPARATOR = "." # ',' is also official (less common): NOM-008-SCFI-2002 +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/es_NI/__init__.py b/venv/Lib/site-packages/django/conf/locale/es_NI/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es_NI/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es_NI/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..791691ff91634a44622267e408ba7b4a35f643ff GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYH_@ur+$2VW?p7Ve7s&kW((Uw_YkwFu%*6*O1Lh>zvLl|cj` z5D7@s0xd)V3ekW@3}8?jw9yGTSrUl-K?1h)ozizu7j#h%^w23dMSYtXofU%>2N8@o z<-vIcrB34F?SGVm0SDJGfS9Y&Y+cPB3JV4aiQpBTy{oG3$a2CFRj@n~_(b5n`nD_D zyvHXz8nuhzALa`rh1syPQB5M;V6J7UKX)X}C?IO^)F-&eiQ4DshJMi&>VgqA-Uy(dGtT z#dC<`Ji53J!tcQ{!Vs;3%`z3jbh8lFX&9^{A;P|)35zsKf*g;pcem{OBt_eG^r89` U_)Tf(7ELxcOR@~j(j-g%0}#o}hyVZp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_NI/formats.py b/venv/Lib/site-packages/django/conf/locale/es_NI/formats.py new file mode 100644 index 000000000..0c8112a62 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_NI/formats.py @@ -0,0 +1,26 @@ +# This file is distributed under the same license as the Django package. +# +DATE_FORMAT = r"j \d\e F \d\e Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i" +YEAR_MONTH_FORMAT = r"F \d\e Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = "d/m/Y" +SHORT_DATETIME_FORMAT = "d/m/Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday: ISO 8601 +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' + "%Y%m%d", # '20061025' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/es_PR/__init__.py b/venv/Lib/site-packages/django/conf/locale/es_PR/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/es_PR/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/es_PR/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13ec21fe7464510030df10898edd2a7b4d5ea680 GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYH@r(kbZo8W?p7Ve7s&k#&ZG;1T9=W6D5&O5x@$4I8)xoA?;Ea2p=u6Nl<`vd&yU7{!A6 z==_Y;2D9w#e^fxBfEFl3L@3gHS_8N_@sbf1T4?i&CyS4UCY0| zGY{V`2goDwnjo+tBt*j`+AQN$O3-MQYMU`qXKRw4+v{W=M=83AS2yTtHb!KY#^={z z^gW!$1mStOnkG_|tR~VTiNZxJ#U!wSG)dOWFeUx#?HzxyOz>tAf1vZn$-CTe3`bWt P!!k7Ym*=Ya3U&9KvpQ$(b9N7V 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..bd0a9048b --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,1260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Eduardo , 2017 +# Leonardo J. Caballero G. , 2016 +# Sebastián Magrí, 2011 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikáans" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerí" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "Bosnio" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "Sorbio Inferior" + +msgid "Greek" +msgstr "Griego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés Australiano" + +msgid "British English" +msgstr "Inglés Británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "Español de Colombia" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español de Venezuela" + +msgid "Estonian" +msgstr "Estonio" + +msgid "Basque" +msgstr "Vazco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finlandés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisio" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "Gaélico Escocés" + +msgid "Galician" +msgstr "Galés" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Sorbio Superior" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesio" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonés" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kazajo" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Canarés" + +msgid "Korean" +msgstr "Coreano" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Luxenburgués" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Latvio" + +msgid "Macedonian" +msgstr "Macedonio" + +msgid "Malayalam" +msgstr "Malayala" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Burmese" +msgstr "Birmano" + +msgid "Norwegian Bokmål" +msgstr "Noruego" + +msgid "Nepali" +msgstr "Nepalí" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk" + +msgid "Ossetic" +msgstr "Osetio" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués de Brasil" + +msgid "Romanian" +msgstr "Ruman" + +msgid "Russian" +msgstr "Ruso" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Eslovenio" + +msgid "Albanian" +msgstr "Albano" + +msgid "Serbian" +msgstr "Serbi" + +msgid "Serbian Latin" +msgstr "Latín Serbio" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suajili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tártaro" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucranio" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chino simplificado" + +msgid "Traditional Chinese" +msgstr "Chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas del sitio" + +msgid "Static Files" +msgstr "Archivos estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +msgid "That page number is not an integer" +msgstr "Ese número de página no es un número entero" + +msgid "That page number is less than 1" +msgstr "Ese número de página es menor que 1" + +msgid "That page contains no results" +msgstr "Esa página no contiene resultados" + +msgid "Enter a valid value." +msgstr "Introduzca un valor válido." + +msgid "Enter a valid URL." +msgstr "Introduzca una URL válida." + +msgid "Enter a valid integer." +msgstr "Ingrese un valor válido." + +msgid "Enter a valid email address." +msgstr "Ingrese una dirección de correo electrónico válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Introduzca una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Ingrese una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ingrese una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Introduzca solo dígitos separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Asegúrese de que este valor %(limit_value)s (ahora es %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor es menor o igual que %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor es mayor o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +msgid "Enter a number." +msgstr "Introduzca un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no hayan más de %(max)s dígito en total." +msgstr[1] "Asegúrese de que no hayan más de %(max)s dígitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrese de que no hayan más de %(max)s decimal." +msgstr[1] "Asegúrese de que no hayan más de %(max)s decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrese de que no hayan más de %(max)s dígito antes del punto decimal." +msgstr[1] "" +"Asegúrese de que no hayan más de %(max)s dígitos antes del punto decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s con este %(field_labels)s ya existe." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar en blanco." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s con esta %(field_label)s ya existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Tipo de campo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Dirección de correo electrónico" + +msgid "File path" +msgstr "Ruta de archivo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Número de punto flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Entero" + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero positivo pequeño" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hasta %(max_length)s)" + +msgid "Small integer" +msgstr "Entero pequeño" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos de binarios brutos" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "la instancia del %(model)s con %(field)s %(value)r no existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave foránea (tipo determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno a uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relación %(from)s - %(to)s " + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relaciones %(from)s - %(to)s" + +msgid "Many-to-many relationship" +msgstr "Relación muchos a muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Introduzca un número completo." + +msgid "Enter a valid date." +msgstr "Introduzca una fecha válida." + +msgid "Enter a valid time." +msgstr "Introduzca una hora válida." + +msgid "Enter a valid date/time." +msgstr "Introduzca una hora y fecha válida." + +msgid "Enter a valid duration." +msgstr "Ingrese una duración válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se envió archivo alguno. Revise el tipo de codificación del formulario." + +msgid "No file was submitted." +msgstr "No se envió ningún archivo." + +msgid "The submitted file is empty." +msgstr "El archivo enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d carácter " +"(tiene %(length)d)." +msgstr[1] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres " +"(tiene %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor provea un archivo o active el selector de limpiar, no ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se " +"trataba de una imagen corrupta." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Escoja una opción válida. %(value)s no es una de las opciones disponibles." + +msgid "Enter a list of values." +msgstr "Ingrese una lista de valores." + +msgid "Enter a complete value." +msgstr "Ingrese un valor completo." + +msgid "Enter a valid UUID." +msgstr "Ingrese un UUID válido." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Los datos de ManagementForm faltan o han sido manipulados" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor, envíe %d o un menor número de formularios." +msgstr[1] "Por favor, envíe %d o un menor número de formularios." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Por favor, envíe %d o más formularios." +msgstr[1] "Por favor, envíe %d o más formularios." + +msgid "Order" +msgstr "Orden" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija el dato duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor, corrija el dato duplicado para %(field)s, este debe ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor, corrija los datos duplicados para %(field_name)s este debe ser " +"único para %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados abajo." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Escoja una opción válida. Esa opción no está entre las opciones disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Limpiar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Cambiar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sí,no,quizás" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mié" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ene." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Enero" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "Noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "Esta no es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d año" +msgstr[1] "%d años" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d días" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificación CSRF fallida. Solicitud abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porqué esta web requiere una cookie CSRF cuando se " +"envían formularios. Esta cookie se necesita por razones de seguridad, para " +"asegurar que tu navegador no ha sido comprometido por terceras partes." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Se puede ver más información si se establece DEBUG=True." + +msgid "No year specified" +msgstr "No se ha indicado el año" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "No se ha indicado el mes" + +msgid "No day specified" +msgstr "No se ha indicado el día" + +msgid "No week specified" +msgstr "No se ha indicado la semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Los futuros %(verbose_name_plural)s no están disponibles porque " +"%(class_name)s.allow_future es Falso." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se encontró ningún %(verbose_name)s coincidente con la consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Los índices de directorio no están permitidos." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9eb09456ae7fd172174bcd68724efe5aead5f2e2 GIT binary patch literal 26794 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 z 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 eZ(S}Jo9ukr%RK&, 2011 +# Erlend , 2020 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# madisvain , 2011 +# Martin , 2014-2015,2021 +# Martin , 2016-2017,2019-2020 +# Marti Raudsepp , 2014,2016 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 11:27+0000\n" +"Last-Translator: Martin \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaani" + +msgid "Arabic" +msgstr "araabia" + +msgid "Algerian Arabic" +msgstr "Alžeeria Araabia" + +msgid "Asturian" +msgstr "astuuria" + +msgid "Azerbaijani" +msgstr "aserbaidžaani" + +msgid "Bulgarian" +msgstr "bulgaaria" + +msgid "Belarusian" +msgstr "valgevene" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "bretooni" + +msgid "Bosnian" +msgstr "bosnia" + +msgid "Catalan" +msgstr "katalaani" + +msgid "Czech" +msgstr "tšehhi" + +msgid "Welsh" +msgstr "uelsi" + +msgid "Danish" +msgstr "taani" + +msgid "German" +msgstr "saksa" + +msgid "Lower Sorbian" +msgstr "alamsorbi" + +msgid "Greek" +msgstr "kreeka" + +msgid "English" +msgstr "inglise" + +msgid "Australian English" +msgstr "austraalia inglise" + +msgid "British English" +msgstr "briti inglise" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "hispaania" + +msgid "Argentinian Spanish" +msgstr "argentiina hispaani" + +msgid "Colombian Spanish" +msgstr "kolumbia hispaania" + +msgid "Mexican Spanish" +msgstr "mehhiko hispaania" + +msgid "Nicaraguan Spanish" +msgstr "nikaraagua hispaania" + +msgid "Venezuelan Spanish" +msgstr "venetsueela hispaania" + +msgid "Estonian" +msgstr "eesti" + +msgid "Basque" +msgstr "baski" + +msgid "Persian" +msgstr "pärsia" + +msgid "Finnish" +msgstr "soome" + +msgid "French" +msgstr "prantsuse" + +msgid "Frisian" +msgstr "friisi" + +msgid "Irish" +msgstr "iiri" + +msgid "Scottish Gaelic" +msgstr "šoti gaeli" + +msgid "Galician" +msgstr "galiitsia" + +msgid "Hebrew" +msgstr "heebrea" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "horvaatia" + +msgid "Upper Sorbian" +msgstr "ülemsorbi" + +msgid "Hungarian" +msgstr "ungari" + +msgid "Armenian" +msgstr "armeenia" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indoneesi" + +msgid "Igbo" +msgstr "ibo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandi" + +msgid "Italian" +msgstr "itaalia" + +msgid "Japanese" +msgstr "jaapani" + +msgid "Georgian" +msgstr "gruusia" + +msgid "Kabyle" +msgstr "Kabiili" + +msgid "Kazakh" +msgstr "kasahhi" + +msgid "Khmer" +msgstr "khmeri" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "korea" + +msgid "Kyrgyz" +msgstr "kirgiisi" + +msgid "Luxembourgish" +msgstr "letseburgi" + +msgid "Lithuanian" +msgstr "leedu" + +msgid "Latvian" +msgstr "läti" + +msgid "Macedonian" +msgstr "makedoonia" + +msgid "Malayalam" +msgstr "malaia" + +msgid "Mongolian" +msgstr "mongoolia" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "malai" + +msgid "Burmese" +msgstr "birma" + +msgid "Norwegian Bokmål" +msgstr "norra bokmål" + +msgid "Nepali" +msgstr "nepali" + +msgid "Dutch" +msgstr "hollandi" + +msgid "Norwegian Nynorsk" +msgstr "norra (nynorsk)" + +msgid "Ossetic" +msgstr "osseetia" + +msgid "Punjabi" +msgstr "pandžab" + +msgid "Polish" +msgstr "poola" + +msgid "Portuguese" +msgstr "portugali" + +msgid "Brazilian Portuguese" +msgstr "brasiilia portugali" + +msgid "Romanian" +msgstr "rumeenia" + +msgid "Russian" +msgstr "vene" + +msgid "Slovak" +msgstr "slovaki" + +msgid "Slovenian" +msgstr "sloveeni" + +msgid "Albanian" +msgstr "albaania" + +msgid "Serbian" +msgstr "serbia" + +msgid "Serbian Latin" +msgstr "serbia (ladina)" + +msgid "Swedish" +msgstr "rootsi" + +msgid "Swahili" +msgstr "suahiili" + +msgid "Tamil" +msgstr "tamiili" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tadžiki" + +msgid "Thai" +msgstr "tai" + +msgid "Turkmen" +msgstr "türkmeeni" + +msgid "Turkish" +msgstr "türgi" + +msgid "Tatar" +msgstr "tatari" + +msgid "Udmurt" +msgstr "udmurdi" + +msgid "Ukrainian" +msgstr "ukrania" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "Usbeki" + +msgid "Vietnamese" +msgstr "vietnami" + +msgid "Simplified Chinese" +msgstr "lihtsustatud hiina" + +msgid "Traditional Chinese" +msgstr "traditsiooniline hiina" + +msgid "Messages" +msgstr "Sõnumid" + +msgid "Site Maps" +msgstr "Saidikaardid" + +msgid "Static Files" +msgstr "Staatilised failid" + +msgid "Syndication" +msgstr "Sündikeerimine" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "See lehe number ei ole täisarv" + +msgid "That page number is less than 1" +msgstr "See lehe number on väiksem kui 1" + +msgid "That page contains no results" +msgstr "See leht ei sisalda tulemusi" + +msgid "Enter a valid value." +msgstr "Sisestage korrektne väärtus." + +msgid "Enter a valid URL." +msgstr "Sisestage korrektne URL." + +msgid "Enter a valid integer." +msgstr "Sisestage korrektne täisarv." + +msgid "Enter a valid email address." +msgstr "Sisestage korrektne e-posti aadress." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Sisestage korrektne “nälk”, mis koosneb tähtedest, numbritest, " +"alakriipsudest või sidekriipsudest." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Sisestage korrektne “nälk”, mis koosneb Unicode tähtedest, numbritest, ala- " +"või sidekriipsudest." + +msgid "Enter a valid IPv4 address." +msgstr "Sisestage korrektne IPv4 aadress." + +msgid "Enter a valid IPv6 address." +msgstr "Sisestage korrektne IPv6 aadress." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Sisestage korrektne IPv4 või IPv6 aadress." + +msgid "Enter only digits separated by commas." +msgstr "Sisestage ainult komaga eraldatud numbreid." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Veendu, et see väärtus on %(limit_value)s (hetkel on %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Veendu, et see väärtus on väiksem või võrdne kui %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Veendu, et see väärtus on suurem või võrdne kui %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Väärtuses peab olema vähemalt %(limit_value)d tähemärk (praegu on " +"%(show_value)d)." +msgstr[1] "" +"Väärtuses peab olema vähemalt %(limit_value)d tähemärki (praegu on " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Väärtuses võib olla kõige rohkem %(limit_value)d tähemärk (praegu on " +"%(show_value)d)." +msgstr[1] "" +"Väärtuses võib olla kõige rohkem %(limit_value)d tähemärki (praegu on " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Sisestage arv." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Veenduge, et kogu numbrikohtade arv ei oleks suurem kui %(max)s." +msgstr[1] "Veenduge, et kogu numbrikohtade arv ei oleks suurem kui %(max)s." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Veenduge, et komakohtade arv ei oleks suurem kui %(max)s." +msgstr[1] "Veenduge, et komakohtade arv ei oleks suurem kui %(max)s." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %(max)s." +msgstr[1] "" +"Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %(max)s." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Faililaiend “%(extension)s” pole lubatud. Lubatud laiendid on: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Tühjad tähemärgid ei ole lubatud." + +msgid "and" +msgstr "ja" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s väljaga %(field_labels)s on juba olemas." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Väärtus %(value)r ei ole kehtiv valik." + +msgid "This field cannot be null." +msgstr "See lahter ei tohi olla tühi." + +msgid "This field cannot be blank." +msgstr "See väli ei saa olla tühi." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Sellise %(field_label)s-väljaga %(model_name)s on juba olemas." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s peab olema unikaalne %(date_field_label)s %(lookup_type)s " +"suhtes." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Lahter tüüpi: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” väärtus peab olema Tõene või Väär." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” väärtus peab olema Tõene, Väär või Tühi." + +msgid "Boolean (Either True or False)" +msgstr "Tõeväärtus (Kas tõene või väär)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (kuni %(max_length)s märki)" + +msgid "Comma-separated integers" +msgstr "Komaga eraldatud täisarvud" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” väärtusel on vale kuupäevaformaat. See peab olema kujul AAAA-KK-" +"PP." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” väärtusel on õige formaat (AAAA-KK-PP), kuid kuupäev on vale." + +msgid "Date (without time)" +msgstr "Kuupäev (kellaajata)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” väärtusel on vale formaat. Peab olema formaadis AAAA-KK-PP HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” väärtusel on õige formaat (AAAA-KK-PP HH:MM[:ss[.uuuuuu]][TZ]), " +"kuid kuupäev/kellaaeg on vale." + +msgid "Date (with time)" +msgstr "Kuupäev (kellaajaga)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” väärtus peab olema kümnendarv." + +msgid "Decimal number" +msgstr "Kümnendmurd" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” väärtusel on vale formaat. Peab olema formaadis [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Kestus" + +msgid "Email address" +msgstr "E-posti aadress" + +msgid "File path" +msgstr "Faili asukoht" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” väärtus peab olema ujukomaarv." + +msgid "Floating point number" +msgstr "Ujukomaarv" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” väärtus peab olema täisarv." + +msgid "Integer" +msgstr "Täisarv" + +msgid "Big (8 byte) integer" +msgstr "Suur (8 baiti) täisarv" + +msgid "Small integer" +msgstr "Väike täisarv" + +msgid "IPv4 address" +msgstr "IPv4 aadress" + +msgid "IP address" +msgstr "IP aadress" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” väärtus peab olema kas Tühi, Tõene või Väär." + +msgid "Boolean (Either True, False or None)" +msgstr "Tõeväärtus (Kas tõene, väär või tühi)" + +msgid "Positive big integer" +msgstr "Positiivne suur täisarv" + +msgid "Positive integer" +msgstr "Positiivne täisarv" + +msgid "Positive small integer" +msgstr "Positiivne väikene täisarv" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Nälk (kuni %(max_length)s märki)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” väärtusel on vale formaat. Peab olema formaadis HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” väärtusel on õige formaat (HH:MM[:ss[.uuuuuu]]), kuid kellaaeg " +"on vale." + +msgid "Time" +msgstr "Aeg" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Töötlemata binaarandmed" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” ei ole korrektne UUID." + +msgid "Universally unique identifier" +msgstr "Universaalne unikaalne identifikaator" + +msgid "File" +msgstr "Fail" + +msgid "Image" +msgstr "Pilt" + +msgid "A JSON object" +msgstr "JSON objekt" + +msgid "Value must be valid JSON." +msgstr "Väärtus peab olema korrektne JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s isendit %(field)s %(value)r ei leidu." + +msgid "Foreign Key (type determined by related field)" +msgstr "Välisvõti (tüübi määrab seotud väli) " + +msgid "One-to-one relationship" +msgstr "Üks-ühele seos" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s seos" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s seosed" + +msgid "Many-to-many relationship" +msgstr "Mitu-mitmele seos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "See lahter on nõutav." + +msgid "Enter a whole number." +msgstr "Sisestage täisarv." + +msgid "Enter a valid date." +msgstr "Sisestage korrektne kuupäev." + +msgid "Enter a valid time." +msgstr "Sisestage korrektne kellaaeg." + +msgid "Enter a valid date/time." +msgstr "Sisestage korrektne kuupäev ja kellaaeg." + +msgid "Enter a valid duration." +msgstr "Sisestage korrektne kestus." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Päevade arv peab jääma vahemikku {min_days} kuni {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ühtegi faili ei saadetud. Kontrollige vormi kodeeringutüüpi." + +msgid "No file was submitted." +msgstr "Ühtegi faili ei saadetud." + +msgid "The submitted file is empty." +msgstr "Saadetud fail on tühi." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Veenduge, et faili nimes poleks rohkem kui %(max)d märk (praegu on " +"%(length)d)." +msgstr[1] "" +"Veenduge, et faili nimes poleks rohkem kui %(max)d märki (praegu on " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Palun laadige fail või märgistage 'tühjenda' kast, mitte mõlemat." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Laadige korrektne pilt. Fail, mille laadisite, ei olnud kas pilt või oli " +"fail vigane." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Valige korrektne väärtus. %(value)s ei ole valitav." + +msgid "Enter a list of values." +msgstr "Sisestage väärtuste nimekiri." + +msgid "Enter a complete value." +msgstr "Sisestage täielik väärtus." + +msgid "Enter a valid UUID." +msgstr "Sisestage korrektne UUID." + +msgid "Enter a valid JSON." +msgstr "Sisestage korrektne JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Peidetud väli %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Palun kinnitage kõige rohkem %d vorm." +msgstr[1] "Palun kinnitage kõige rohkem %d vormi." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Palun kinnitage vähemalt %d vorm." +msgstr[1] "Palun kinnitage vähemalt %d vormi." + +msgid "Order" +msgstr "Järjestus" + +msgid "Delete" +msgstr "Kustuta" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Palun parandage duplikaat-andmed lahtris %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Palun parandage duplikaat-andmed lahtris %(field)s, mis peab olema unikaalne." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Palun parandage allolevad duplikaat-väärtused" + +msgid "The inline value did not match the parent instance." +msgstr "Pesastatud väärtus ei sobi ülemobjektiga." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Valige korrektne väärtus. Valitud väärtus ei ole valitav." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” ei ole korrektne väärtus." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s ei saanud tõlgendada ajavööndis %(current_timezone)s; see on " +"kas mitmetähenduslik või seda ei eksisteeri." + +msgid "Clear" +msgstr "Tühjenda" + +msgid "Currently" +msgstr "Hetkel" + +msgid "Change" +msgstr "Muuda" + +msgid "Unknown" +msgstr "Tundmatu" + +msgid "Yes" +msgstr "Jah" + +msgid "No" +msgstr "Ei" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "jah,ei,võib-olla" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bait" +msgstr[1] "%(size)d baiti" + +#, python-format +msgid "%s KB" +msgstr "%s kB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.l." + +msgid "a.m." +msgstr "e.l." + +msgid "PM" +msgstr "PL" + +msgid "AM" +msgstr "EL" + +msgid "midnight" +msgstr "südaöö" + +msgid "noon" +msgstr "keskpäev" + +msgid "Monday" +msgstr "esmaspäev" + +msgid "Tuesday" +msgstr "teisipäev" + +msgid "Wednesday" +msgstr "kolmapäev" + +msgid "Thursday" +msgstr "neljapäev" + +msgid "Friday" +msgstr "reede" + +msgid "Saturday" +msgstr "laupäev" + +msgid "Sunday" +msgstr "pühapäev" + +msgid "Mon" +msgstr "esmasp." + +msgid "Tue" +msgstr "teisip." + +msgid "Wed" +msgstr "kolmap." + +msgid "Thu" +msgstr "neljap." + +msgid "Fri" +msgstr "reede" + +msgid "Sat" +msgstr "laup." + +msgid "Sun" +msgstr "pühap." + +msgid "January" +msgstr "jaanuar" + +msgid "February" +msgstr "veebruar" + +msgid "March" +msgstr "märts" + +msgid "April" +msgstr "aprill" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juuni" + +msgid "July" +msgstr "juuli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktoober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "detsember" + +msgid "jan" +msgstr "jaan" + +msgid "feb" +msgstr "veeb" + +msgid "mar" +msgstr "märts" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sept" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dets" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jaan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "veeb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mär." + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juuni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juuli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dets." + +msgctxt "alt. month" +msgid "January" +msgstr "jaanuar" + +msgctxt "alt. month" +msgid "February" +msgstr "veebruar" + +msgctxt "alt. month" +msgid "March" +msgstr "märts" + +msgctxt "alt. month" +msgid "April" +msgstr "aprill" + +msgctxt "alt. month" +msgid "May" +msgstr "mai" + +msgctxt "alt. month" +msgid "June" +msgstr "juuni" + +msgctxt "alt. month" +msgid "July" +msgstr "juuli" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "oktoober" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "detsember" + +msgid "This is not a valid IPv6 address." +msgstr "See ei ole korrektne IPv6 aadress." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "või" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d aasta" +msgstr[1] "%(num)d aastat" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d kuu" +msgstr[1] "%(num)d kuud" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nädal" +msgstr[1] "%(num)d nädalat" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d päev" +msgstr[1] "%(num)d päeva" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tund" +msgstr[1] "%(num)d tundi" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutit" + +msgid "Forbidden" +msgstr "Keelatud" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifitseerimine ebaõnnestus. Päring katkestati." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Näete seda sõnumit, kuna käesolev HTTPS leht nõuab “Viitaja päise” saatmist " +"teie brauserile, kuid seda ei saadetud. Seda päist on vaja " +"turvakaalutlustel, kindlustamaks et teie brauserit ei ole kolmandate " +"osapoolte poolt üle võetud." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Kui olete oma brauseri seadistustes välja lülitanud “Viitaja” päised siis " +"lülitage need taas sisse vähemalt antud lehe jaoks või HTTPS üheduste jaoks " +"või “sama-allika” päringute jaoks." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Kui kasutate silti või " +"saadate päist “Referrer-Policy: no-referrer”, siis palun eemaldage need. " +"CSRF kaitse vajab range viitaja kontrolliks päist “Referer”. Kui privaatsus " +"on probleemiks, kasutage alternatiive nagu " +"linkidele, mis viivad kolmandate poolte lehtedele." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Näete seda teadet, kuna see leht vajab CSRF küpsist vormide postitamiseks. " +"Seda küpsist on vaja turvakaalutlustel, kindlustamaks et teie brauserit ei " +"ole kolmandate osapoolte poolt üle võetud." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Kui olete oma brauseris küpsised keelanud, siis palun lubage need vähemalt " +"selle lehe jaoks või “sama-allika” päringute jaoks." + +msgid "More information is available with DEBUG=True." +msgstr "Saadaval on rohkem infot kasutades DEBUG=True" + +msgid "No year specified" +msgstr "Aasta on valimata" + +msgid "Date out of range" +msgstr "Kuupäev vahemikust väljas" + +msgid "No month specified" +msgstr "Kuu on valimata" + +msgid "No day specified" +msgstr "Päev on valimata" + +msgid "No week specified" +msgstr "Nädal on valimata" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ei leitud %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Tulevane %(verbose_name_plural)s pole saadaval, sest %(class_name)s." +"allow_future on False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Vigane kuupäeva sõne “%(datestr)s” lähtudes formaadist “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Päringule vastavat %(verbose_name)s ei leitud" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Lehekülg pole “viimane” ja ei saa teda konvertida täisarvuks." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Vigane leht (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tühi list ja “%(class_name)s.allow_empty” on Väär." + +msgid "Directory indexes are not allowed here." +msgstr "Kausta sisuloendid ei ole siin lubatud." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” ei eksisteeri" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s sisuloend" + +msgid "The install worked successfully! Congratulations!" +msgstr "Paigaldamine õnnestus! Palju õnne!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Vaata release notes Djangole %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Näete seda lehte, kuna teil on määratud DEBUG=True Django seadete failis ja te ei ole ühtki URLi seadistanud." + +msgid "Django Documentation" +msgstr "Django dokumentatsioon" + +msgid "Topics, references, & how-to’s" +msgstr "Teemad, viited, & õpetused" + +msgid "Tutorial: A Polling App" +msgstr "Õpetus: Küsitlusrakendus" + +msgid "Get started with Django" +msgstr "Alusta Djangoga" + +msgid "Django Community" +msgstr "Django Kogukond" + +msgid "Connect, get help, or contribute" +msgstr "Suhelge, küsige abi või panustage" diff --git a/venv/Lib/site-packages/django/conf/locale/et/__init__.py b/venv/Lib/site-packages/django/conf/locale/et/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/et/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/et/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12445b53c37df3a7fd484a13f6fab7c112ece7a5 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYKeY)d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04kp}+W-In literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/et/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/et/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efb0be4ae20581937591d88820f4fecd9c121bcb GIT binary patch literal 363 zcmYk2!D_-l5QaBqwYFBMJ@?>MsL5SQ>0;Cf#z+zmE=wh5SBW)Q$!>(^X?pEzv~N-9 zsn=e6@zk}@+8_QOz8Pi)hS%$7KBDYeb9*ucz~izjl`Jkwd*gn9K1Y@TNPZhP|%zAUC%)Qt_4Hq z4=x;c9N2RU&3@Yr-*&w~RgM!4tJfVmXf*eG6Xc=5_3&k2yHg*Htz+#OWV*We6MNR} zkf~sqAYLv+NGu-Z2}`9QgIL=6g7o7|$o3@TYZgheW9g2J;sp`0WbJJjJ%lSJ2wjKi uiklHnm*$2?;f9$^noFJ~p%ljU@vVB3aGGz}?cr(STm^(sgSzr*Rr?0mgJK;3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/et/formats.py b/venv/Lib/site-packages/django/conf/locale/et/formats.py new file mode 100644 index 000000000..3b2d9ba44 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/et/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "G:i" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = " " # Non-breaking space +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cf1b961be4092ce66df9ad78dbd110dce35a2c91 GIT binary patch literal 21743 zcmb`O3!Gh5eeX9A9trQKfKYb=ff<-NlYqPe0W!(t$s{o|K?q{pXU?8;Hs_qZ5BrhH z3}R8rEm$s>`nt4WeF3Gu+G_E(w%`SeTB=oQQK?qFh*YI2dT&LkmHYjzwa%F{lSv4a z{mGi|UTd$t_J6(p>%Z3jR{+Q#FaDUSOuj8*AUvS)? zkL&rta3MSr?hDU`i0hpT=fU&gp>Vl-z5!AtZzDViUI7n>0aSU{!UNz0RF&TXmG2#n zce>|yL&^OScrbj>r9TQ65Pu9F2)_kY&!^yT!C%2s;qf$@o-c=bJ_PmMZP3UACFiwJ z`L2U!z#Cos<52lO1ts?b@JRSscszU@`tT=E@*mE}Ro?MX`4>UG-viYj15ow76snw2 zsQ1R9`YnOV{}y;Uyb0>Pk3q@*AXNUZLY4n5sCIu6O8#eI4u1*X1Dmh$yd7|!?|HYw z>)_q+5IXaN@Xz5zaCDL9T?~I8UI@PeUj+|2#qw0B_PPi%G`!0o|Gb)u-wIW)`=I*k zZ(RJ#j^Bf7ujio3J%Y}mi@Y9q92|mr{|!*}Y{6sUP4F~$CseyW3|0RxIzA3*dhgqC z9{e>_zI_(k_Ba@-oTH)AdtnKl4b{$NxF3vMyb0BgIot-{4E4RQJAN1Hy&po=<5{>r zJP09`ei&5zSg7y48fu&_hKIlAbu-UIq!t(kN3LtFG7uaohDuZNOj zi;HiCtBGF?m%zJW0w0HGz#;w&!WL9LKM5DWPeYCCN1*2OKSRm?3_K9-OXsSc7C^~& zB2@Y*Q0;l9OCNyBcRn0~YvCGr8=Mcn2KC-|q4dHJpxWgZ?)iKgQ*s>*mH$Mj`Ftu= z{!5|W-v|$ZmqX33F{pNaE0jDBK$Y_lRQ@kGegz&({2Ng1_>|+1pz=QpH9ntn{54eh z`}BJrs>*u}MD=)=z_Vc)E`{%b%i$NG^u_@U8p(YMWC`>xf$G0)5S8YoP;$Ntsy*+3 z`tApy^vu2P`KO`ef6(!BQ04rCd;T<(+&_Y9ub)B5`yWv6oiN~eSHgwxPFXWe2#+E?g@?nN9N!J~ z-aYUz_$hcad;}{06HxQu-=ONZ&ucCBcbxBdsN<22$2y+ic(UU{$Hh?n+zZt{XSwwA z94~~L$CtS0gD!myJcRTOa0|QwUJXA2N8$W)ShL|9q3KW9OZJAZf8RE-xBwH1=P4)<+u@QJX`@a z{;z>*_Y@unuY=0}4#&Ho^4$w1|Hq-`$-^%FD=z*GsP~?Rs{ga_M0hAl$A>*o-&qGW zjwTnvx6$jWgpRC`_u_1)D_ z?`?vr|LdXZ6Ty?<^-$0M5K6uey7>K2sC2jr9=5`A1WMjJpxX1pP;x&4PlZpwe)t;~ z?;Et^>vd558M*ikj(5P5NdGga^1cK$FMiF}09mGefpFRVeeU)?c>R};S;D&IF9 zzYq1@pF)lI=b+v@Xvp$NxIgg|p}yxs$#EuB|DNa4*TemYZ-p9PS3yd*20B&ZAJ@{TC?to_2f|O1|fz%H4Oh%{Lz^{V1sXC%W`gU3$MuKL<+gOQ7c4 zdMG)rfRZb8&#!gqZ-y%G7O3*y>3AnRfcS@?`s2e;?ff8A`42gM5u(DpuS3=6h&8qy zPJqh41fB=ahFa(AP~-jgpvKYrAw$UfYj^_u4b=QReywE*>iesp+U*K>0Ib8sFopZW zJD~dWkKFS=g$EJ;6qFpFaq)*CQ_%Z+cp5xt9eo7{;3D|PQ1Uzq=fgwSTfPcv{4a#k z&lf|8< zWWRF+lw8Nb)8VC1->pHl?{C9*!?#1p;ZumxPl0Nm64dw4fnS6d!0*5VUT4?aryZYh zeAe;b9iMl6!ExRe``&!V!yJ!xJl^qS$3;;6b-Lq#<9UvkK(*T%7k?d;+*i8zn;dH{ zy#>|&6E1!|RQ-O(@n*+c9dCDhm*X9dcR9Y_@ovZap!)Blj`zFt2OS@F{2ZJ|zDHgB z%TWFHRY((i--X-Y(h+Na-3m3o9)~_$FlzhrOgKP%#PLQbJ@rYbdOZX8f&GMYxH*Y% zz7n`DC;UC(ECSu{F?75?Bk1}GAu@M%{bd+?|BLWVm$ry9G%s{5B-~HX`1m?O^X`8W z-au#&bZKt?IpM>EQwZ&=hnrIgXHwoFgumeaUkS%@-+g67P9sfi_D2MkJMTI|A7K$e zZKrXqYk+(VH?wYj1s+8>g0%O+fS_w9;rGoQW$Sx|FD z?Yq>a={a3xt`>h&LO;)*vPs?vF5l;fUq)C#sJUkvhti$8ULfp8-u(%Sx&KooaxEZU zfj(3}{|#Z1@P5K)2)d5u*+1A@?*S;gWgX#Omv*$H#^px{uX6G4!PgVsPSBXs^@kST z!;U?a{h!>w!^MT46K*E_r6OEEATZ3l)5&`_ObCBRn0-nAJV}_C_23HPUncy}r8C4k z*8!ASCib^3<opc;Z9Z3NF5M*?EaC6TF5$;;DPg^fpX%~| zlKAhswCCUl-Te*lS$99~*v6N*xr3my@eja9+YcOv;9c&15MJx;Ce*9gZDUPb&G_&Wq$8wkH3`~l$$1YH*q{-3$Ce-`tO^nEu4a9LtX!k@D0Ly2>(R5hj1{@?t@3d z!{Jv6%L%$}C){H0n0GwCk^A#pSxWvB!fk}B6mi%8guMjc#oPEUHz&GxmvR3P;SAz$ zg5M#uuY*Xt(nSvC{?&w-_$4lFUwATUpNEG-U5CN7_SV?BZ|43nLP$7`(ChMXYpzEe zf7|hS_*%jdg#REMNB&>JoUn$VYrci|jN@} z7Fq6>L%)clYm3kyPf~wzPbJ91?KAT&?r9`Ry=ZOECtG1}R#HJ}((KLp7x&}|1*Ksl z$fG3AYEf&C4>O)NlZyFz6lZx5kA?n3l-KyM`6h)e?%5GEim*5JD@mC7agzJt&M3?E zS@Z7pIA|hn^`m!_E!AzWF8_wSB$z;{7NwC zV4}68NEH`NLNkgBy;$+>olQ*Qyk^pLW0EGqu&xx*Bus{ZDM=(D^VbaO?*{XC*!ap%5NFL{Fq>TPZix;vQkD8%8&WL3@(u6Y0yyKp}5*Gd8fj(97NafrZ*U53_Nd;;gc4b-Wv?#D*3&^sOtBeZ(64+l&)z^dMl^Gv6{EacFrow^LxxB%OfTZ>FtE1$o;M~ zMU!zqHG-}R$HHcrR_7*a1`R(hT(lAL)m2f7R7pCCq?K@I$ka(gGg*U1BblHE^iWvx zR?*Sb#8>rDGx=mYVO26#FlchqdfuvnTBAU?$&q}hNo)E+rILnO=Cw!8P@ENfBd-NW zt!_Zj(1VI;|zFd8ow6M`8mD7u(ush@yBY6vFOeFUTw#ZE2WhMw~{}jPmVvMVVWytd>l)Gt3h0rIgq$;NBMLn(UR6anA+5BoXNu zx~!}9?As=}tA5#>O-8ONOR)N%=^9I8p%+mic{01ynS;T$IIlOD`Fr)Qz7e1gn=R=j z-xQ!SZ8}Si(P<{xOlO;JmDzMYo<|jb-R2#yZL6I*pHUC;oV$lSyM3l*cXpXuw_LVM z($;mWW~a#{n=5TVx_g%gPLa`Lh~$qQ;u+)`s@$N!*z9E7FFU zKfR)rC)G>MK)sN)LROhP;f@7Yi`VL~oEAYk>8+NDs%1#V<}yZ$HSMhF$#b%TWf@wXMhdd=fU!?j7Z^ApQnC1#lPom0==N5FMwdk`V>Q^p;uVx>m2x;16q$05 zHG(X2c5BHjklV*?Nep#kzLdN*48buq#hNfltM(>snt1MGD$AU(Hm_Y%y)~(f#h%Hk zqs*!G1xCyIA`ZO`L3xrM-VnrbPzm5vP_KC#YE2B04Rj)JUl!y$RLW%-fdwXxZZSAg ze?;A_Sg{k!1q-~Yj}Bu2P!ByA#t@q%G`Wi>`}3rq=5?Ll-n|UV{;EafNErdcbp5cc zMaIoeti5TgcNlwxpy2_kiK*ML7XK*5251_K#;1d)M})D$Rt*hqU9()qYsuS)!H2oK zk%H5JR-G<=W8!U;vg{scjIi;fh}ld8m`NJ%GBYqZnK!#+o*tE*?<*7H`b@tuOxLiY z1g+!#1S@n_lvyi{(K>gszp@sN)y+4VA4$aspvjbATp)-lO_dT%0roXBzoL!J%oOcx zW~8JOp@zLbnADq}y{ADz?Uap^agt_rQg&FIbYszIOxqZ{*q$YC6Sk?0*G+M#er6oc z+@x+wD|(t`Va`<8JnU@_Q!~;x%Ww$MRM^sE#?JIBMT?m!qZvgUxNWl46j`4?QH#cE zv$oPD?9V7QCD)7_ zZAChRVoZA*8!sn2`;0a$CwYw`m>kT-uC3PQBx94c10~5$&n-VZcZs_sWKFc@biN|K zhMlRmC79s-m}SFsjkhIXLTjdPDKgWWBSG#Fid2(yWGu`>^hdeD}ZHA?l!kzg%&W3DCSlO|ck4 zvRzNE_gS=w(vc==zt_>&b}~}Yu-VEd^^kj`qI^~?)sADnG7EowH_u{ZobibFQ%rWu z0nRW?aio}La?@p|9Xwj2gK8XlsbfbmOTE!Fs4&Bm7^}ZMU`ILZA=pesT34@+7MvnP zL1US}!beTWxbRoBS{}Bsx3$tN(%joxPw8Y$iLEgzBh6^z$@Zyb#K~8#d6Dw89w!sz zYGDpmIuo1Iiz@S49b|OYWK#I3bh5~xV&QX|tvv{oT{{--D$=xIT5=p?%AjNn*N&mF zHLVohEvb9fKt;Vrig3H4=oGN6Mb0-pZB@3{;Y_tW+^aE3GuqQCMSxO`EZBrQIkF1py|R0oIIMFYXbW)*Q~H(f<~ug7K}pnlZRuMZpa;FTzhD``_5 z0A*ol6oAH`GyghfusNzl!D}ftBa3z0Hz#Rh94|*0AyOl5Osf>x6PY@W!d#ZFVQECn z!Z8jUa~W|##sPGn6kgbMP(){^emPAhGCIx;;j)pj#u?<8rYZJ6qNNp7N}5L@I(@F% z7=6>W=wEh+j1ORONJnM^r&PjnQGL;_nYI>9zfc8Mb5pB!Np@6AKakA%2aBqPGP-d* zs{E2^`zaSS*+i9OrwBux8Vl4RV^EZ&&< zGn1^nJv(joix_~ji^tNNoiq}*l-9^+Rk16<9#3~==^S@#pO}&-suTlvi@~4-faRTGh_5cSYL0((KZ%TD9tG|EjCju3dKZ@bI#$ zv+Sx;VXmw9qIB76Z4=%W@ApiL*Xwg|?sG25WJ2q9SFN-gk=xY_I)}RL6QsFYZ94zB zjwW8T*pBV-VmaMfC1*z8Ob5tbzB$8b@)F*0o)qJK(AV|qz20WK`t+}>^k1$WR1z=q z?YgvJOW48%(m$M4qe}l^QO){ClV$#b&71nSggZD*N#cHaB9{4QEjepx|B`e1mt5d4 zJ$KpCrDrbTT5uWXxBVCqafZQ^q|5x_s2(;jcN^^HgG%CGR4Fx;RKlFKNtaf2#-)|; zVqVuFMK$an4TI(~-+G$-9xb4(pA!=kB^*<67LA8H&C+Rw9&lhWHg6Av#X#?Z;dR49 z)74vATCxCJF30TXA2nxGvTg@(HAL}+nEd$bSZTM8uI@j7I-kBZ9;W?6Zr{AjKffI1 z9VwUjVX@+2qkJl4y_j8@ z8U`VmiaL{Xme02mR1-`VN;N)VQvg|Kl_5`VEhso~pp>bXQjFZZeABskk*v$%>xETS zup&RLZqcNb!o_uqzQx(wPO%Y>9ZrBXPod_$cGP2Zx6^d%Vdu8vx_vQ^Z`;Z1;|6OM zG-{nM2Xni8I}YDE!j;((&*AmuIJWKfO|9EkDM2g3^UD+Yft9c(n960TMuFe6!a0J2 zUg!TcWf%vrdAD3lA=0!981oAUC_6FIIzC|K94fLpr(gJdId8z=&djH*Cs@z7g>gBk zM}Cqed=_^?h0i7DKI&V@dfJ(_FMwV{2uEU=9yf< zkxn_C%+3j{?1PccWzCz$eAThlR32bU2X((zaOzD;%(+p?AEIi!V%@=P{>)h2z_yk~ zREx8m7PKlGe#7b3-GGNU<`|%tW6x$Vg%QmOHVv8wjD2QJr$y>yU_!8aFZz7ik8dd`>PkgrFvaTL20P24Ku*rk;@ zFiEBm#GFd!JYdSG=N`a_m$HVVJ>ehE`6xF&kDAe?vrE;c6yYe^SSiHg6f9Nyd>Uqlf zZylZ1>C9~rlT6)VzKlv~u&~Qv!R&P|WJKXmp&HgARE}S#6A%_Z=M*P~NHQ0bna4Tx?C$=ZO|p@-j~bhedUF17y63H8WeuD)2=g1)lWIp<%x8b7UpSZ zJ&%I!u6GSeVY7>{6VWalRn`!xMf55D3z_qc?y>x0h0yzTDTKKS89~=+fkii(wW@@R z4Sf;Wr2e+L(-Pcy)YjzPX_O!X$GGh>v`#<2`Z2m}cbQZla~!u9xzF`?&D15hl)AAO z_*R$rl7|C?8KOHex8ks#E1jwbyGtK1meU;7L9s}e&-Grr5xNxmT-o-}pu791?XhlY z+J#_o%=m^@f%a0&l0>5zt(mZdWeG>wtP362HcOuIZEG<~@=QKqZ%D?PSx1`u7H1CU zwo``zj_vlXRvq=e(qgS{X0eu0;MZ8O>T*;eh!dHqVm6#C)L}WSv&7|rx3qtw&rc`m z4`;;3CY`s8^=KD1Ogu!D?;FQFhlWVq@c2m&U4rDs|E;PFv3A#^DSWlOZcYa0aDzLg z?_q*y1ozPO^nPZwC;*9KYSTMNM0C-Q&Wyv7BttTUY8 zO27;5#*OazaYy&yCyBkKYf$42PYX;-Z-y7VW2Im`Sa-O}-PUD*@nG61zA0tvVg{7V zC9_t|@{6+ub-Bg$eT}24TvEnFk&j%Tkby#Bv^{Qe>=%=Um8ldu7Tx8X<>Z~|E>}+D zF*i5(qs7bg%SKZOesj6al{gsI!v0KdbCU(Xd0fVAuE=mOg<7%M*mGmNr6zgV#`Yjm z9{I|ZEHiH>239kO(0DxIL>qrp_jWo-JjdYk6MjKy%*CHi@g!lLmE_ut)?_<2LoAiYvvf{ zH_e?*YL%a-XtT<9XJ+bn*6nk%8N>#j3Ttcw3YXZiL{uIVm~KTon9c88kNhFKiC_iM zffZgNOk^`N>+Gi`d%tFIyNLEaQiad_u6C2VrfN^wo$7q-3{br6JG6o6^_-WzJBgoP zux;>+yS-yH&1JAlGHgm_&tQ=EtAX3+1>PoH?ez2}x!ToBZD+ggw-x9uHqm8gzMHqFv&~UT7`M+JI+L-F z%Jl8bxNi*{Z?o~RtBY1?o5c2%Mz6AhqIc@7V`qED5zO(u1_2zb;M^!JXYKu#Ktoxjs0{^*@ zP`?4I+v7XqKv&`@ylP<`{L(JV0+SiCqR~ zXDDOjFQpT-OP;oh`OQ`*tI6W}#I2WfHVPs&#)Fv-bQ*IWFBRT9qwTCiU5ACXJM)B* zZVYDQTQ`-f<7#AUh^E6D8`n{X+{}!uO0m%2rn3bG=|XQv$946jRq(^YdbcZGpPY83 zQy6CpF|&=IF*)s0lvpyPvW=0~nVFbeobE6mwJ4y9&DopXwPK3s#HXD>g>^EpC9#ib zPE@(ct39CW)r)7P;YNwOJK{w^uu` zwl;8$)}?G1fabZ$*1g}Ey}nFOV!x;3r0k8HHUzT1Y#;I7 zI_+`kOD*e2%1>AnnG$jld%=|LW!6&$1YIg)evseI$g|)K3p6^zn>QKwbde^$&R)8` z@eHlbbYPRLzN5OhJs9Rw1>SxB)B?^pS6c5q_cniL@bYT_W_BKA%tMJcm7qGS(t&;c zlzv7VqvMHBp^31S%P1xt0WwGU`337Doi0VM0bvelrtGQR6yr#%zxla=b*4`*p48`M zH~fFuIe!hcq)UuWW7f#vsyi>d)RVRZrtwT`qE~&CD~iB1E2`HiVOrIB>RXYV+lrRM zlJ=1@vp7EB5U!+cKuM;z{wUuRQH%|<^bvK3_q=Wn;wix#&bBwB(;Ez)cW*0Z8}rTx zwC0^#RZ*e(fMkT78S6_A2 zrcJwZInOGZZrMZ8ECC!9Suy>dX)$~IsFgW-(g}&J%$x;vmfFrK`fLr={dKeL-&2Nm uaU5#wv4y%^%Q8ak{(P3{-TmRR(WWz1s%PuGp6!#F{a&e5^8P=)004#n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..028cc459d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,1279 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2013,2016 +# Ander Martinez , 2013-2014 +# Eneko Illarramendi , 2017-2019,2021 +# Jannis Leidel , 2011 +# jazpillaga , 2011 +# julen, 2011-2012 +# julen, 2013,2015 +# Mikel Maldonado , 2021 +# totorika93 , 2012 +# 67feb0cba3962a6c9f09eb0e43697461_528661a , 2013 +# Urtzi Odriozola , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-05-09 16:11+0000\n" +"Last-Translator: Mikel Maldonado \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabiera" + +msgid "Algerian Arabic" +msgstr "Algeriar Arabiera" + +msgid "Asturian" +msgstr "Asturiera" + +msgid "Azerbaijani" +msgstr "Azerbaijanera" + +msgid "Bulgarian" +msgstr "Bulgariera" + +msgid "Belarusian" +msgstr "Bielorrusiera" + +msgid "Bengali" +msgstr "Bengalera" + +msgid "Breton" +msgstr "Bretoia" + +msgid "Bosnian" +msgstr "Bosniera" + +msgid "Catalan" +msgstr "Katalana" + +msgid "Czech" +msgstr "Txekiera" + +msgid "Welsh" +msgstr "Galesa" + +msgid "Danish" +msgstr "Daniera" + +msgid "German" +msgstr "Alemana" + +msgid "Lower Sorbian" +msgstr "Behe-sorbiera" + +msgid "Greek" +msgstr "Greziera" + +msgid "English" +msgstr "Ingelesa" + +msgid "Australian English" +msgstr "Australiar ingelesa" + +msgid "British English" +msgstr "Ingelesa" + +msgid "Esperanto" +msgstr "Esperantoa" + +msgid "Spanish" +msgstr "Gaztelania" + +msgid "Argentinian Spanish" +msgstr "Gaztelania (Argentina)" + +msgid "Colombian Spanish" +msgstr "Gaztelania (Kolonbia)" + +msgid "Mexican Spanish" +msgstr "Gaztelania (Mexiko)" + +msgid "Nicaraguan Spanish" +msgstr "Gaztelania (Nikaragua)" + +msgid "Venezuelan Spanish" +msgstr "Gaztelania (Venezuela)" + +msgid "Estonian" +msgstr "Estoniera" + +msgid "Basque" +msgstr "Euskara" + +msgid "Persian" +msgstr "Persiera" + +msgid "Finnish" +msgstr "Finlandiera" + +msgid "French" +msgstr "Frantsesa" + +msgid "Frisian" +msgstr "Frisiera" + +msgid "Irish" +msgstr "Irlandako gaelikoa" + +msgid "Scottish Gaelic" +msgstr "Eskoziako gaelikoa" + +msgid "Galician" +msgstr "Galiziera" + +msgid "Hebrew" +msgstr "Hebreera" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroaziera" + +msgid "Upper Sorbian" +msgstr "Goi-sorbiera" + +msgid "Hungarian" +msgstr "Hungariera" + +msgid "Armenian" +msgstr "Armeniera" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesiera" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandiera" + +msgid "Italian" +msgstr "Italiera" + +msgid "Japanese" +msgstr "Japoniera" + +msgid "Georgian" +msgstr "Georgiera" + +msgid "Kabyle" +msgstr "Kabylera" + +msgid "Kazakh" +msgstr "Kazakhera" + +msgid "Khmer" +msgstr "Khmerera" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreera" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Luxenburgera" + +msgid "Lithuanian" +msgstr "Lituaniera" + +msgid "Latvian" +msgstr "Letoniera" + +msgid "Macedonian" +msgstr "Mazedoniera" + +msgid "Malayalam" +msgstr "Malabarera" + +msgid "Mongolian" +msgstr "Mongoliera" + +msgid "Marathi" +msgstr "Marathera" + +msgid "Burmese" +msgstr "Birmaniera" + +msgid "Norwegian Bokmål" +msgstr "Bokmåla (Norvegia)" + +msgid "Nepali" +msgstr "Nepalera" + +msgid "Dutch" +msgstr "Nederlandera" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk (Norvegia)" + +msgid "Ossetic" +msgstr "Osetiera" + +msgid "Punjabi" +msgstr "Punjabera" + +msgid "Polish" +msgstr "Poloniera" + +msgid "Portuguese" +msgstr "Portugesa" + +msgid "Brazilian Portuguese" +msgstr "Portugesa (Brazil)" + +msgid "Romanian" +msgstr "Errumaniera" + +msgid "Russian" +msgstr "Errusiera" + +msgid "Slovak" +msgstr "Eslovakiera" + +msgid "Slovenian" +msgstr "Esloveniera" + +msgid "Albanian" +msgstr "Albaniera" + +msgid "Serbian" +msgstr "Serbiera" + +msgid "Serbian Latin" +msgstr "Serbiera" + +msgid "Swedish" +msgstr "Suediera" + +msgid "Swahili" +msgstr "Swahilia" + +msgid "Tamil" +msgstr "Tamilera" + +msgid "Telugu" +msgstr "Telugua" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Thailandiera" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turkiera" + +msgid "Tatar" +msgstr "Tatarera" + +msgid "Udmurt" +msgstr "Udmurtera" + +msgid "Ukrainian" +msgstr "Ukrainera" + +msgid "Urdu" +msgstr "Urdua" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamera" + +msgid "Simplified Chinese" +msgstr "Txinera (sinpletua)" + +msgid "Traditional Chinese" +msgstr "Txinera (tradizionala)" + +msgid "Messages" +msgstr "Mezuak" + +msgid "Site Maps" +msgstr "Sitemap-ak" + +msgid "Static Files" +msgstr "Fitxategi estatikoak" + +msgid "Syndication" +msgstr "Sindikazioa" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Orrialde hori ez da zenbaki bat" + +msgid "That page number is less than 1" +msgstr "Orrialde zenbaki hori 1 baino txikiagoa da" + +msgid "That page contains no results" +msgstr "Orrialde horrek ez du emaitzarik" + +msgid "Enter a valid value." +msgstr "Idatzi baleko balio bat." + +msgid "Enter a valid URL." +msgstr "Idatzi baleko URL bat." + +msgid "Enter a valid integer." +msgstr "Idatzi baleko zenbaki bat." + +msgid "Enter a valid email address." +msgstr "Idatzi baleko helbide elektroniko bat." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Idatzi baleko IPv4 sare-helbide bat." + +msgid "Enter a valid IPv6 address." +msgstr "Idatzi baleko IPv6 sare-helbide bat." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Idatzi baleko IPv4 edo IPv6 sare-helbide bat." + +msgid "Enter only digits separated by commas." +msgstr "Idatzi komaz bereizitako digitoak soilik." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Ziurtatu balio hau gutxienez %(limit_value)s dela (orain %(show_value)s da)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ziurtatu balio hau %(limit_value)s baino txikiagoa edo berdina dela." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ziurtatu balio hau %(limit_value)s baino handiagoa edo berdina dela." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ziurtatu balio honek gutxienez karaktere %(limit_value)d duela " +"(%(show_value)d ditu)." +msgstr[1] "" +"Ziurtatu balio honek gutxienez %(limit_value)d karaktere dituela " +"(%(show_value)d ditu)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ziurtatu balio honek gehienez karaktere %(limit_value)d duela " +"(%(show_value)d ditu)." +msgstr[1] "" +"Ziurtatu balio honek gehienez %(limit_value)d karaktere dituela " +"(%(show_value)d ditu)." + +msgid "Enter a number." +msgstr "Idatzi zenbaki bat." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Ziurtatu digitu %(max)s baino gehiago ez dagoela guztira." +msgstr[1] "Ziurtatu %(max)s digitu baino gehiago ez dagoela guztira." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Ziurtatu ez dagoela digitu %(max)s baino gehiago komaren atzetik." +msgstr[1] "Ziurtatu ez dagoela %(max)s digitu baino gehiago komaren atzetik." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Ziurtatu ez dagoela digitu %(max)s baino gehiago komaren aurretik." +msgstr[1] "Ziurtatu ez dagoela %(max)s digitu baino gehiago komaren aurretik." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Null karaktereak ez daude baimenduta." + +msgid "and" +msgstr "eta" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s hauek dauzkan %(model_name)s dagoeneko existitzen da." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r balioa ez da baleko aukera bat." + +msgid "This field cannot be null." +msgstr "Eremu hau ezin daiteke hutsa izan (null)." + +msgid "This field cannot be blank." +msgstr "Eremu honek ezin du hutsik egon." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s hori daukan %(model_name)s dagoeneko existitzen da." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Eremuaren mota: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "\"%(value)s\" blioa True edo False izan behar da." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\" balioa, True, False edo None izan behar da." + +msgid "Boolean (Either True or False)" +msgstr "Boolearra (True edo False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String-a (%(max_length)s gehienez)" + +msgid "Comma-separated integers" +msgstr "Komaz bereiztutako zenbaki osoak" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"\"%(value)s\" balioa data formatu okerra dauka. UUUU-HH-EE formatua izan " +"behar da." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"\"%(value)s\" balioa formatu egokia dauka (UUUU-HH-EE), baina data okerra." + +msgid "Date (without time)" +msgstr "Data (ordurik gabe)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Data (orduarekin)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "\"%(value)s\" balioa zenbaki hamartarra izan behar da." + +msgid "Decimal number" +msgstr "Zenbaki hamartarra" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"\"%(value)s\" balioa formatu okerra dauka. [EE][[OO:]MM:]ss[.uuuuuu] " +"formatua izan behar du." + +msgid "Duration" +msgstr "Iraupena" + +msgid "Email address" +msgstr "Helbide elektronikoa" + +msgid "File path" +msgstr "Fitxategiaren bidea" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "\"%(value)s\" float izan behar da." + +msgid "Floating point number" +msgstr "Koma higikorreko zenbakia (float)" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "\"%(value)s\" zenbaki osoa izan behar da." + +msgid "Integer" +msgstr "Zenbaki osoa" + +msgid "Big (8 byte) integer" +msgstr "Zenbaki osoa (handia 8 byte)" + +msgid "Small integer" +msgstr "Osoko txikia" + +msgid "IPv4 address" +msgstr "IPv4 sare-helbidea" + +msgid "IP address" +msgstr "IP helbidea" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "\"%(value)s\" None, True edo False izan behar da." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolearra (True, False edo None)" + +msgid "Positive big integer" +msgstr "Zenbaki positivo osoa-handia" + +msgid "Positive integer" +msgstr "Osoko positiboa" + +msgid "Positive small integer" +msgstr "Osoko positibo txikia" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (gehienez %(max_length)s)" + +msgid "Text" +msgstr "Testua" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Ordua" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datu bitar gordinak" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "\"Universally unique identifier\"" + +msgid "File" +msgstr "Fitxategia" + +msgid "Image" +msgstr "Irudia" + +msgid "A JSON object" +msgstr "JSON objektu bat" + +msgid "Value must be valid JSON." +msgstr "Balioa baliozko JSON bat izan behar da." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"%(field)s %(value)r edukidun %(model)s modeloko instantziarik ez da " +"exiistitzen." + +msgid "Foreign Key (type determined by related field)" +msgstr "1-N (mota erlazionatutako eremuaren arabera)" + +msgid "One-to-one relationship" +msgstr "Bat-bat erlazioa" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s erlazioa" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s erlazioak" + +msgid "Many-to-many relationship" +msgstr "M:N erlazioa" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Eremu hau beharrezkoa da." + +msgid "Enter a whole number." +msgstr "Idatzi zenbaki oso bat." + +msgid "Enter a valid date." +msgstr "Idatzi baleko data bat." + +msgid "Enter a valid time." +msgstr "Idatzi baleko ordu bat." + +msgid "Enter a valid date/time." +msgstr "Idatzi baleko data/ordu bat." + +msgid "Enter a valid duration." +msgstr "Idatzi baleko iraupen bat." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Egun kopuruak {min_days} eta {max_days} artean egon behar du." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ez da fitxategirik bidali. Egiaztatu formularioaren kodeketa-mota." + +msgid "No file was submitted." +msgstr "Ez da fitxategirik bidali." + +msgid "The submitted file is empty." +msgstr "Bidalitako fitxategia hutsik dago." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Ziurtatu fitxategi izen honek gehienez karaktere %(max)d duela (%(length)d " +"ditu)." +msgstr[1] "" +"Ziurtatu fitxategi izen honek gehienez %(max)d karaktere dituela (%(length)d " +"ditu)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Mesedez, igo fitxategi bat edo egin klik garbitu botoian, ez biak." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Igo baleko irudi bat. Zuk igotako fitxategia ez da irudi bat edo akatsen bat " +"du." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Hautatu baleko aukera bat. %(value)s ez dago erabilgarri." + +msgid "Enter a list of values." +msgstr "Idatzi balio-zerrenda bat." + +msgid "Enter a complete value." +msgstr "Sartu balio osoa." + +msgid "Enter a valid UUID." +msgstr "Idatzi baleko UUID bat." + +msgid "Enter a valid JSON." +msgstr "Sartu baliozko JSON bat" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(%(name)s eremu ezkutua) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordena" + +msgid "Delete" +msgstr "Ezabatu" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Zuzendu bikoiztketa %(field)s eremuan." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Zuzendu bikoizketa %(field)s eremuan. Bakarra izan behar da." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Zuzendu bakarra izan behar den%(field_name)s eremuarentzako bikoiztutako " +"data %(lookup)s egiteko %(date_field)s eremuan" + +msgid "Please correct the duplicate values below." +msgstr "Zuzendu hurrengo balio bikoiztuak." + +msgid "The inline value did not match the parent instance." +msgstr "Barneko balioa eta gurasoaren instantzia ez datoz bat." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Hautatu aukera zuzen bat. Hautatutakoa ez da zuzena." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Garbitu" + +msgid "Currently" +msgstr "Orain" + +msgid "Change" +msgstr "Aldatu" + +msgid "Unknown" +msgstr "Ezezaguna" + +msgid "Yes" +msgstr "Bai" + +msgid "No" +msgstr "Ez" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "bai,ez,agian" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "byte %(size)d " +msgstr[1] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "gauerdia" + +msgid "noon" +msgstr "eguerdia" + +msgid "Monday" +msgstr "astelehena" + +msgid "Tuesday" +msgstr "asteartea" + +msgid "Wednesday" +msgstr "asteazkena" + +msgid "Thursday" +msgstr "osteguna" + +msgid "Friday" +msgstr "ostirala" + +msgid "Saturday" +msgstr "larunbata" + +msgid "Sunday" +msgstr "igandea" + +msgid "Mon" +msgstr "al" + +msgid "Tue" +msgstr "ar" + +msgid "Wed" +msgstr "az" + +msgid "Thu" +msgstr "og" + +msgid "Fri" +msgstr "ol" + +msgid "Sat" +msgstr "lr" + +msgid "Sun" +msgstr "ig" + +msgid "January" +msgstr "urtarrila" + +msgid "February" +msgstr "otsaila" + +msgid "March" +msgstr "martxoa" + +msgid "April" +msgstr "apirila" + +msgid "May" +msgstr "maiatza" + +msgid "June" +msgstr "ekaina" + +msgid "July" +msgstr "uztaila" + +msgid "August" +msgstr "abuztua" + +msgid "September" +msgstr "iraila" + +msgid "October" +msgstr "urria" + +msgid "November" +msgstr "azaroa" + +msgid "December" +msgstr "abendua" + +msgid "jan" +msgstr "urt" + +msgid "feb" +msgstr "ots" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "api" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "eka" + +msgid "jul" +msgstr "uzt" + +msgid "aug" +msgstr "abu" + +msgid "sep" +msgstr "ira" + +msgid "oct" +msgstr "urr" + +msgid "nov" +msgstr "aza" + +msgid "dec" +msgstr "abe" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "urt." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ots." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "api." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai." + +msgctxt "abbrev. month" +msgid "June" +msgstr "eka." + +msgctxt "abbrev. month" +msgid "July" +msgstr "uzt." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "abu." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ira." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "urr." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "aza." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "abe." + +msgctxt "alt. month" +msgid "January" +msgstr "urtarrila" + +msgctxt "alt. month" +msgid "February" +msgstr "otsaila" + +msgctxt "alt. month" +msgid "March" +msgstr "martxoa" + +msgctxt "alt. month" +msgid "April" +msgstr "apirila" + +msgctxt "alt. month" +msgid "May" +msgstr "maiatza" + +msgctxt "alt. month" +msgid "June" +msgstr "ekaina" + +msgctxt "alt. month" +msgid "July" +msgstr "uztaila" + +msgctxt "alt. month" +msgid "August" +msgstr "abuztua" + +msgctxt "alt. month" +msgid "September" +msgstr "iraila" + +msgctxt "alt. month" +msgid "October" +msgstr "urria" + +msgctxt "alt. month" +msgid "November" +msgstr "azaroa" + +msgctxt "alt. month" +msgid "December" +msgstr "abendua" + +msgid "This is not a valid IPv6 address." +msgstr "Hau ez da baleko IPv6 helbide bat." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "edo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "urte %d" +msgstr[1] "%d urte" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "hilabete %d" +msgstr[1] "%d hilabete" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "aste %d" +msgstr[1] "%d aste" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "egun %d" +msgstr[1] "%d egun" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "ordu %d" +msgstr[1] "%d ordu" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "minutu %d" +msgstr[1] "%d minutu" + +msgid "Forbidden" +msgstr "Debekatuta" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF egiaztapenak huts egin du. Eskaera abortatu da." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Formularioa bidaltzean gune honek CSRF cookie bat behar duelako ikusten duzu " +"mezu hau. Cookie hau beharrezkoa da segurtasun arrazoiengatik, zure " +"nabigatzailea beste batek ordezkatzen ez duela ziurtatzeko." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Informazio gehiago erabilgarri dago DEBUG=True ezarrita." + +msgid "No year specified" +msgstr "Ez da urterik zehaztu" + +msgid "Date out of range" +msgstr "Data baliozko tartetik kanpo" + +msgid "No month specified" +msgstr "Ez da hilabeterik zehaztu" + +msgid "No day specified" +msgstr "Ez da egunik zehaztu" + +msgid "No week specified" +msgstr "Ez da asterik zehaztu" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ez dago %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Etorkizuneko %(verbose_name_plural)s ez dago aukeran %(class_name)s." +"allow_future False delako" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Bilaketarekin bat datorren %(verbose_name)s-rik ez dago" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Orri baliogabea (%(page_number)s):%(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Direktorio zerrendak ez daude baimenduak." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s zerrenda" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalazioak arrakastaz funtzionatu du! Zorionak!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ikusi Django %(version)s-ren argitaratze " +"oharrak" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Zure settings fitxategian DEBUG=True jarrita eta URLrik konfiguratu gabe duzulako ari zara " +"ikusten orrialde hau." + +msgid "Django Documentation" +msgstr "Django dokumentazioa" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriala: Galdetegi aplikazioa" + +msgid "Get started with Django" +msgstr "Hasi Djangorekin" + +msgid "Django Community" +msgstr "Django Komunitatea" + +msgid "Connect, get help, or contribute" +msgstr "Konektatu, lortu laguntza edo lagundu" diff --git a/venv/Lib/site-packages/django/conf/locale/eu/__init__.py b/venv/Lib/site-packages/django/conf/locale/eu/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/eu/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/eu/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25aa55ad70170eaee78fd31343c169d8fdbe3500 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lYN>vFd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04l*W+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/eu/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/eu/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f7cf9a990c0abb1151ecd41c7b64207f596c4a4 GIT binary patch literal 544 zcmY+A-%f)t6vkm=jtz~QiC*v4#5u2xF`~dA3M_@i&@>W8yM_IshQbngBVTEWS6-Ru z3wR~WsCb%w?e{yUCvEB8UYjf8{o!TuQRBGR(o};l%vCYjSs|E%9Ofa9Yp{mvu#N>N z;0A2q9k_#=u!%(|;udV-Hf&?b;f{B6$wLc7dsc6bg1oMuM|r10PI@J2eiJR1G?XBM z;%#xm>#zDaZ*7;d?ybDbCx5cxPv7dr);gA;q{y!7Yc?=t7fP;S{+j(VQw3d5m4R>C zmaG39=zKdx_I^m$(QV-R)vkws=wCa{08Uxy`L^cYtLiQ6D(a14%6Gn_j$|OaHh>4N zZjT+=QYviU8k^TD@Q1)2j|^-0%q5NDIa~Q8H|J=~NWu`v7z>a>!)!(3l%Zji>e&Qo zQNq&xD4}x_rf5y#HM)x?h(#&sKL+65Yl)$Skf?9k^#vEQ<|)Tl$}04 aZN!Te#o3ZvmVe5Q3K0Z>|2LWfFY;eKIg@|@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/eu/formats.py b/venv/Lib/site-packages/django/conf/locale/eu/formats.py new file mode 100644 index 000000000..61b16fbc6 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/eu/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"Y\k\o N j\a" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"Y\k\o N j\a, H:i" +YEAR_MONTH_FORMAT = r"Y\k\o F" +MONTH_DAY_FORMAT = r"F\r\e\n j\a" +SHORT_DATE_FORMAT = "Y-m-d" +SHORT_DATETIME_FORMAT = "Y-m-d H:i" +FIRST_DAY_OF_WEEK = 1 # Astelehena + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..906097c39c632d3889b82fa2b25ff50fca53bc4b GIT binary patch literal 32052 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 D<_i?^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..795602ff6 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,1318 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmad Hosseini , 2020 +# alirezamastery , 2021 +# Ali Vakilzade , 2015 +# Arash Fazeli , 2012 +# Eric Hamiter , 2019 +# Farshad Asadpour, 2021 +# Jannis Leidel , 2011 +# Mariusz Felisiak , 2021 +# Mazdak Badakhshan , 2014 +# Milad Hazrati , 2019 +# MJafar Mashhadi , 2018 +# Mohammad Hossein Mojtahedi , 2013,2019 +# Pouya Abbassi, 2016 +# Pouya Abbassi, 2016 +# rahim agh , 2020-2021 +# Reza Mohammadi , 2013-2016 +# Saeed , 2011 +# Sina Cheraghi , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:28+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "آفریکانس" + +msgid "Arabic" +msgstr "عربی" + +msgid "Algerian Arabic" +msgstr "عربی الجزایری" + +msgid "Asturian" +msgstr "آستوری" + +msgid "Azerbaijani" +msgstr "آذربایجانی" + +msgid "Bulgarian" +msgstr "بلغاری" + +msgid "Belarusian" +msgstr "بلاروس" + +msgid "Bengali" +msgstr "بنگالی" + +msgid "Breton" +msgstr "برتون" + +msgid "Bosnian" +msgstr "بوسنیایی" + +msgid "Catalan" +msgstr "کاتالونیایی" + +msgid "Czech" +msgstr "چکی" + +msgid "Welsh" +msgstr "ویلزی" + +msgid "Danish" +msgstr "دانمارکی" + +msgid "German" +msgstr "آلمانی" + +msgid "Lower Sorbian" +msgstr "صربستانی پایین" + +msgid "Greek" +msgstr "یونانی" + +msgid "English" +msgstr "انگلیسی" + +msgid "Australian English" +msgstr "انگلیسی استرالیایی" + +msgid "British English" +msgstr "انگلیسی بریتیش" + +msgid "Esperanto" +msgstr "اسپرانتو" + +msgid "Spanish" +msgstr "اسپانیایی" + +msgid "Argentinian Spanish" +msgstr "اسپانیایی آرژانتینی" + +msgid "Colombian Spanish" +msgstr "اسپانیایی کلمبیایی" + +msgid "Mexican Spanish" +msgstr "اسپانیولی مکزیکی" + +msgid "Nicaraguan Spanish" +msgstr "نیکاراگوئه اسپانیایی" + +msgid "Venezuelan Spanish" +msgstr "ونزوئلا اسپانیایی" + +msgid "Estonian" +msgstr "استونی" + +msgid "Basque" +msgstr "باسکی" + +msgid "Persian" +msgstr "فارسی" + +msgid "Finnish" +msgstr "فنلاندی" + +msgid "French" +msgstr "فرانسوی" + +msgid "Frisian" +msgstr "فریزی" + +msgid "Irish" +msgstr "ایرلندی" + +msgid "Scottish Gaelic" +msgstr "گیلیک اسکاتلندی" + +msgid "Galician" +msgstr "گالیسیایی" + +msgid "Hebrew" +msgstr "عبری" + +msgid "Hindi" +msgstr "هندی" + +msgid "Croatian" +msgstr "کرواتی" + +msgid "Upper Sorbian" +msgstr "صربستانی بالا" + +msgid "Hungarian" +msgstr "مجاری" + +msgid "Armenian" +msgstr "ارمنی" + +msgid "Interlingua" +msgstr "اینترلینگوا" + +msgid "Indonesian" +msgstr "اندونزیایی" + +msgid "Igbo" +msgstr "ایگبو" + +msgid "Ido" +msgstr "ایدو" + +msgid "Icelandic" +msgstr "ایسلندی" + +msgid "Italian" +msgstr "ایتالیایی" + +msgid "Japanese" +msgstr "ژاپنی" + +msgid "Georgian" +msgstr "گرجی" + +msgid "Kabyle" +msgstr "قبایلی" + +msgid "Kazakh" +msgstr "قزاقستان" + +msgid "Khmer" +msgstr "خمری" + +msgid "Kannada" +msgstr "کناده‌ای" + +msgid "Korean" +msgstr "کره‌ای" + +msgid "Kyrgyz" +msgstr "قرقیزی" + +msgid "Luxembourgish" +msgstr "لوگزامبورگی" + +msgid "Lithuanian" +msgstr "لیتوانی" + +msgid "Latvian" +msgstr "لتونیایی" + +msgid "Macedonian" +msgstr "مقدونی" + +msgid "Malayalam" +msgstr "مالایایی" + +msgid "Mongolian" +msgstr "مغولی" + +msgid "Marathi" +msgstr "مِراتی" + +msgid "Malay" +msgstr "Malay" + +msgid "Burmese" +msgstr "برمه‌ای" + +msgid "Norwegian Bokmål" +msgstr "نروژی" + +msgid "Nepali" +msgstr "نپالی" + +msgid "Dutch" +msgstr "هلندی" + +msgid "Norwegian Nynorsk" +msgstr "نروژی Nynorsk" + +msgid "Ossetic" +msgstr "آسی" + +msgid "Punjabi" +msgstr "پنجابی" + +msgid "Polish" +msgstr "لهستانی" + +msgid "Portuguese" +msgstr "پرتغالی" + +msgid "Brazilian Portuguese" +msgstr "پرتغالیِ برزیل" + +msgid "Romanian" +msgstr "رومانی" + +msgid "Russian" +msgstr "روسی" + +msgid "Slovak" +msgstr "اسلواکی" + +msgid "Slovenian" +msgstr "اسلووِنی" + +msgid "Albanian" +msgstr "آلبانیایی" + +msgid "Serbian" +msgstr "صربی" + +msgid "Serbian Latin" +msgstr "صربی لاتین" + +msgid "Swedish" +msgstr "سوئدی" + +msgid "Swahili" +msgstr "سواحیلی" + +msgid "Tamil" +msgstr "تامیلی" + +msgid "Telugu" +msgstr "تلوگویی" + +msgid "Tajik" +msgstr "تاجیک" + +msgid "Thai" +msgstr "تایلندی" + +msgid "Turkmen" +msgstr "ترکمن" + +msgid "Turkish" +msgstr "ترکی" + +msgid "Tatar" +msgstr "تاتار" + +msgid "Udmurt" +msgstr "ادمورت" + +msgid "Ukrainian" +msgstr "اکراینی" + +msgid "Urdu" +msgstr "اردو" + +msgid "Uzbek" +msgstr "ازبکی" + +msgid "Vietnamese" +msgstr "ویتنامی" + +msgid "Simplified Chinese" +msgstr "چینی ساده‌شده" + +msgid "Traditional Chinese" +msgstr "چینی سنتی" + +msgid "Messages" +msgstr "پیغام‌ها" + +msgid "Site Maps" +msgstr "نقشه‌های وب‌گاه" + +msgid "Static Files" +msgstr "پرونده‌های استاتیک" + +msgid "Syndication" +msgstr "پیوند" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "شمارهٔ صفحه یک عدد طبیعی نیست" + +msgid "That page number is less than 1" +msgstr "شمارهٔ صفحه کوچکتر از ۱ است" + +msgid "That page contains no results" +msgstr "این صفحه خالی از اطلاعات است" + +msgid "Enter a valid value." +msgstr "یک مقدار معتبر وارد کنید." + +msgid "Enter a valid URL." +msgstr "یک نشانی اینترنتی معتبر وارد کنید." + +msgid "Enter a valid integer." +msgstr "یک عدد معتبر وارد کنید." + +msgid "Enter a valid email address." +msgstr "یک ایمیل آدرس معتبر وارد کنید." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"یک \"اسلاگ\" معتبر متشکل از حروف، اعداد، خط زیر یا خط فاصله، وارد کنید. " + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"یک \"اسلاگ\" معتبر وارد کنید که شامل حروف یونیکد، اعداد، خط زیر یا خط فاصله " +"باشد." + +msgid "Enter a valid IPv4 address." +msgstr "یک نشانی IPv4 معتبر وارد کنید." + +msgid "Enter a valid IPv6 address." +msgstr "یک آدرس معتبر IPv6 وارد کنید." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "IPv4 یا IPv6 آدرس معتبر وارد کنید." + +msgid "Enter only digits separated by commas." +msgstr "فقط ارقام جدا شده با کاما وارد کنید." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "مطمئن شوید مقدار %(limit_value)s است. (اکنون %(show_value)s می باشد)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "مطمئن شوید این مقدار کوچکتر و یا مساوی %(limit_value)s است." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "مطمئن شوید این مقدار بزرگتر و یا مساوی %(limit_value)s است." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"طول این مقدار باید حداقل %(limit_value)d کاراکتر باشد (طولش %(show_value)d " +"است)." +msgstr[1] "" +"طول این مقدار باید حداقل %(limit_value)d کاراکتر باشد (طولش %(show_value)d " +"است)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"طول این مقدار باید حداکثر %(limit_value)d کاراکتر باشد (طولش %(show_value)d " +"است)." +msgstr[1] "" +"طول این مقدار باید حداکثر %(limit_value)d کاراکتر باشد (طولش %(show_value)d " +"است)." + +msgid "Enter a number." +msgstr "یک عدد وارد کنید." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "نباید در مجموع بیش از %(max)s رقم داشته باشد." +msgstr[1] "نباید در مجموع بیش از %(max)s رقم داشته باشد." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "نباید بیش از %(max)s رقم اعشار داشته باشد." +msgstr[1] "نباید بیش از %(max)s رقم اعشار داشته باشد." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "نباید بیش از %(max)s رقم قبل ممیز داشته باشد." +msgstr[1] "نباید بیش از %(max)s رقم قبل ممیز داشته باشد." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"استفاده از پرونده با پسوند '%(extension)s' مجاز نیست. پسوند‌های مجاز عبارتند " +"از: '%(allowed_extensions)s'" + +msgid "Null characters are not allowed." +msgstr "کاراکترهای تهی مجاز نیستند." + +msgid "and" +msgstr "و" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "‏%(model_name)s با این %(field_labels)s وجود دارد." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "مقدار %(value)r انتخاب معتبری نیست. " + +msgid "This field cannot be null." +msgstr "این فیلد نمی تواند پوچ باشد." + +msgid "This field cannot be blank." +msgstr "این فیلد نمی تواند خالی باشد." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s با این %(field_label)s از قبل موجود است." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"‏%(field_label)s باید برای %(lookup_type)s %(date_field_label)s یکتا باشد." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "فیلد با نوع: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "مقدار «%(value)s» باید True یا False باشد." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "مقدار «%(value)s» باید True یا False یا None باشد." + +msgid "Boolean (Either True or False)" +msgstr "بولی (درست یا غلط)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "رشته (تا %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "اعداد صحیح جدا-شده با ویلگول" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"مقدار «%(value)s» در قالب نادرستی وارد شده است. تاریخ باید در قالب YYYY-MM-" +"DD باشد." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"مقدار تاریخ «%(value)s» با اینکه در قالب درستی (YYYY-MM-DD) است ولی تاریخ " +"ناممکنی را نشان می‌دهد." + +msgid "Date (without time)" +msgstr "تاریخ (بدون زمان)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"مقدار \"%(value)s\" یک قالب نامعتبر دارد. باید در قالب YYYY-MM-DD HH:MM[:" +"ss[.uuuuuu]][TZ] باشد." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"مقدار \"%(value)s\" یک قالب معتبر دارد (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"اما یک تاریخ/زمان نامعتبر است." + +msgid "Date (with time)" +msgstr "تاریخ (با زمان)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "مقدار '%(value)s' باید عدد دسیمال باشد." + +msgid "Decimal number" +msgstr "عدد دهدهی" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"مقدار «%(value)s» در قالب نادرستی وارد شده است. باید در قالب ‎[DD] [HH:" +"[MM:]]ss[.uuuuuu]‎ باشد." + +msgid "Duration" +msgstr "بازهٔ زمانی" + +msgid "Email address" +msgstr "نشانی پست الکترونیکی" + +msgid "File path" +msgstr "مسیر پرونده" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "مقدار «%(value)s» باید عدد اعشاری فلوت باشد." + +msgid "Floating point number" +msgstr "عدد اعشاری" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "مقدار «%(value)s» باید عدد حقیقی باشد." + +msgid "Integer" +msgstr "عدد صحیح" + +msgid "Big (8 byte) integer" +msgstr "بزرگ (8 بایت) عدد صحیح" + +msgid "Small integer" +msgstr "عدد صحیح کوچک" + +msgid "IPv4 address" +msgstr "IPv4 آدرس" + +msgid "IP address" +msgstr "نشانی IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "مقدار «%(value)s» باید True یا False یا None باشد." + +msgid "Boolean (Either True, False or None)" +msgstr "‌بولی (درست، نادرست یا پوچ)" + +msgid "Positive big integer" +msgstr "عدد صحیح مثبت" + +msgid "Positive integer" +msgstr "عدد صحیح مثبت" + +msgid "Positive small integer" +msgstr "مثبت عدد صحیح کوچک" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "تیتر (حداکثر %(max_length)s)" + +msgid "Text" +msgstr "متن" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"مقدار «%(value)s» در قالب نادرستی وارد شده است. باید در قالب HH:MM[:ss[." +"uuuuuu]]‎ باشد." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"مقدار «%(value)s» با اینکه در قالب درستی (HH:MM[:ss[.uuuuuu]]‎) است ولی زمان " +"ناممکنی را نشان می‌دهد." + +msgid "Time" +msgstr "زمان" + +msgid "URL" +msgstr "نشانی اینترنتی" + +msgid "Raw binary data" +msgstr "دادهٔ دودویی خام" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" یک UUID معتبر نیست." + +msgid "Universally unique identifier" +msgstr "شناسه منحصر به فرد سراسری" + +msgid "File" +msgstr "پرونده" + +msgid "Image" +msgstr "تصویر" + +msgid "A JSON object" +msgstr "یک شیء JSON" + +msgid "Value must be valid JSON." +msgstr "مقدار، باید یک JSON معتبر باشد." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s با %(field)s %(value)r وجود ندارد." + +msgid "Foreign Key (type determined by related field)" +msgstr "کلید خارجی ( نوع بر اساس فیلد رابط مشخص میشود )" + +msgid "One-to-one relationship" +msgstr "رابطه یک به یک " + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "رابطه %(from)s به %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "روابط %(from)s به %(to)s" + +msgid "Many-to-many relationship" +msgstr "رابطه چند به چند" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":؟.!" + +msgid "This field is required." +msgstr "این فیلد لازم است." + +msgid "Enter a whole number." +msgstr "به طور کامل یک عدد وارد کنید." + +msgid "Enter a valid date." +msgstr "یک تاریخ معتبر وارد کنید." + +msgid "Enter a valid time." +msgstr "یک زمان معتبر وارد کنید." + +msgid "Enter a valid date/time." +msgstr "یک تاریخ/زمان معتبر وارد کنید." + +msgid "Enter a valid duration." +msgstr "یک بازهٔ زمانی معتبر وارد کنید." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "عدد روز باید بین {min_days} و {max_days} باشد." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "پرونده‌ای ارسال نشده است. نوع کدگذاری فرم را بررسی کنید." + +msgid "No file was submitted." +msgstr "پرونده‌ای ارسال نشده است." + +msgid "The submitted file is empty." +msgstr "پروندهٔ ارسال‌شده خالیست." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"طول عنوان پرونده باید حداقل %(max)d کاراکتر باشد (طولش %(length)d است)." +msgstr[1] "" +"طول عنوان پرونده باید حداقل %(max)d کاراکتر باشد (طولش %(length)d است)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "لطفا یا فایل ارسال کنید یا دکمه پاک کردن را علامت بزنید، نه هردو." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"یک تصویر معتبر بارگذاری کنید. پرونده‌ای که بارگذاری کردید یا تصویر نبوده و یا " +"تصویری مخدوش بوده است." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "یک گزینهٔ معتبر انتخاب کنید. %(value)s از گزینه‌های موجود نیست." + +msgid "Enter a list of values." +msgstr "فهرستی از مقادیر وارد کنید." + +msgid "Enter a complete value." +msgstr "یک مقدار کامل وارد کنید." + +msgid "Enter a valid UUID." +msgstr "یک UUID معتبر وارد کنید." + +msgid "Enter a valid JSON." +msgstr "یک JSON معتبر وارد کنید" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(فیلد پنهان %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"اطلاعات ManagementForm مفقود یا دستکاری شده است. ردیف های مفقود شده: " +"%(field_names)s. اگر این مشکل ادامه داشت، آن را گزارش کنید." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "لطفاً تعدا فرم‌ها حداکثر %d باشد." +msgstr[1] "لطفاً تعداد فرم‌ها حداکثر %d باشد." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "لطفاً تعداد فرم‌ها حداقل %d باشد." +msgstr[1] "لطفاً تعدا فرم‌ ها حداقل %d باشد." + +msgid "Order" +msgstr "ترتیب:" + +msgid "Delete" +msgstr "حذف" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "لطفا محتوی تکراری برای %(field)s را اصلاح کنید." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "لطفا محتوی تکراری برای %(field)s را که باید یکتا باشد اصلاح کنید." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"لطفا اطلاعات تکراری %(field_name)s را اصلاح کنید که باید در %(lookup)s " +"یکتا باشد %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "لطفا مقدار تکراری را اصلاح کنید." + +msgid "The inline value did not match the parent instance." +msgstr "مقدار درون خطی موجود با نمونه والد آن مطابقت ندارد." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "یک گزینهٔ معتبر انتخاب کنید. آن گزینه از گزینه‌های موجود نیست." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" یک مقدار معتبر نیست." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)sدر محدوده زمانی %(current_timezone)s، قابل تفسیر نیست؛ ممکن است " +"نامشخص باشد یا اصلاً وجود نداشته باشد." + +msgid "Clear" +msgstr "پاک کردن" + +msgid "Currently" +msgstr "در حال حاضر" + +msgid "Change" +msgstr "تغییر" + +msgid "Unknown" +msgstr "ناشناخته" + +msgid "Yes" +msgstr "بله" + +msgid "No" +msgstr "خیر" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "بله،خیر،شاید" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d بایت" +msgstr[1] "%(size)d بایت" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ب.ظ." + +msgid "a.m." +msgstr "صبح" + +msgid "PM" +msgstr "بعد از ظهر" + +msgid "AM" +msgstr "صبح" + +msgid "midnight" +msgstr "نیمه شب" + +msgid "noon" +msgstr "ظهر" + +msgid "Monday" +msgstr "دوشنبه" + +msgid "Tuesday" +msgstr "سه شنبه" + +msgid "Wednesday" +msgstr "چهارشنبه" + +msgid "Thursday" +msgstr "پنجشنبه" + +msgid "Friday" +msgstr "جمعه" + +msgid "Saturday" +msgstr "شنبه" + +msgid "Sunday" +msgstr "یکشنبه" + +msgid "Mon" +msgstr "دوشنبه" + +msgid "Tue" +msgstr "سه‌شنبه" + +msgid "Wed" +msgstr "چهارشنبه" + +msgid "Thu" +msgstr "پنجشنبه" + +msgid "Fri" +msgstr "جمعه" + +msgid "Sat" +msgstr "شنبه" + +msgid "Sun" +msgstr "یکشنبه" + +msgid "January" +msgstr "ژانویه" + +msgid "February" +msgstr "فوریه" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "آوریل" + +msgid "May" +msgstr "مه" + +msgid "June" +msgstr "ژوئن" + +msgid "July" +msgstr "ژوئیه" + +msgid "August" +msgstr "اوت" + +msgid "September" +msgstr "سپتامبر" + +msgid "October" +msgstr "اکتبر" + +msgid "November" +msgstr "نوامبر" + +msgid "December" +msgstr "دسامبر" + +msgid "jan" +msgstr "ژانویه" + +msgid "feb" +msgstr "فوریه" + +msgid "mar" +msgstr "مارس" + +msgid "apr" +msgstr "آوریل" + +msgid "may" +msgstr "مه" + +msgid "jun" +msgstr "ژوئن" + +msgid "jul" +msgstr "ژوئیه" + +msgid "aug" +msgstr "اوت" + +msgid "sep" +msgstr "سپتامبر" + +msgid "oct" +msgstr "اکتبر" + +msgid "nov" +msgstr "نوامبر" + +msgid "dec" +msgstr "دسامبر" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ژانویه" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "فوریه" + +msgctxt "abbrev. month" +msgid "March" +msgstr "مارس" + +msgctxt "abbrev. month" +msgid "April" +msgstr "آوریل" + +msgctxt "abbrev. month" +msgid "May" +msgstr "مه" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ژوئن" + +msgctxt "abbrev. month" +msgid "July" +msgstr "جولای" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "اوت" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "سپتامبر" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "اکتبر" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "نوامبر" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "دسامبر" + +msgctxt "alt. month" +msgid "January" +msgstr "ژانویه" + +msgctxt "alt. month" +msgid "February" +msgstr "فوریه" + +msgctxt "alt. month" +msgid "March" +msgstr "مارس" + +msgctxt "alt. month" +msgid "April" +msgstr "آوریل" + +msgctxt "alt. month" +msgid "May" +msgstr "مه" + +msgctxt "alt. month" +msgid "June" +msgstr "ژوئن" + +msgctxt "alt. month" +msgid "July" +msgstr "جولای" + +msgctxt "alt. month" +msgid "August" +msgstr "اوت" + +msgctxt "alt. month" +msgid "September" +msgstr "سپتامبر" + +msgctxt "alt. month" +msgid "October" +msgstr "اکتبر" + +msgctxt "alt. month" +msgid "November" +msgstr "نوامبر" + +msgctxt "alt. month" +msgid "December" +msgstr "دسامبر" + +msgid "This is not a valid IPv6 address." +msgstr "این مقدار آدرس IPv6 معتبری نیست." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "یا" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "،" + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d سال" +msgstr[1] "%(num)d سال ها" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ماه" +msgstr[1] "%(num)d ماه ها" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d هفته" +msgstr[1] "%(num)d هفته ها" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d روز" +msgstr[1] "%(num)d روزها" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ساعت" +msgstr[1] "%(num)d ساعت ها" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d دقیقه" +msgstr[1] "%(num)d دقیقه ها" + +msgid "Forbidden" +msgstr "ممنوع" + +msgid "CSRF verification failed. Request aborted." +msgstr "‏CSRF تأیید نشد. درخواست لغو شد." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"شما این پیغام را مشاهده میکنید برای اینکه این HTTPS site نیازمند یک " +"\"Referer header\" برای ارسال توسط مرورگر شما دارد،‌اما مقداری ارسال " +"نمیشود . این هدر الزامی میباشد برای امنیت ، در واقع برای اینکه مرورگر شما " +"مطمین شود hijack به عنوان نفر سوم (third parties) در میان نیست" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"اگر در مرورگر خود سر تیتر \"Referer\" را غیرفعال کرده‌اید، لطفاً آن را فعال " +"کنید، یا حداقل برای این وب‌گاه یا برای ارتباطات HTTPS و یا برای درخواست‌های " +"\"Same-origin\" فعال کنید." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"اگر شما از تگ استفاده " +"می‌کنید یا سر تیتر \"Referrer-Policy: no-referrer\" را اضافه کرده‌اید، لطفاً " +"آن را حذف کنید. محافظ CSRF به سرتیتر \"Referer\" نیاز دارد تا بتواند بررسی " +"سخت‌گیرانه ارجاع دهنده را انجام دهد. اگر ملاحظاتی در مورد حریم خصوصی دارید از " +"روش‎‌های جایگزین مانند برای ارجاع دادن به وب‌گاه‌های " +"شخص ثالث استفاده کنید." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"شما این پیام را میبینید چون این سایت نیازمند کوکی «جعل درخواست میان وبگاهی " +"(CSRF)» است. این کوکی برای امنیت شما ضروری است. با این کوکی می‌توانیم از " +"اینکه شخص ثالثی کنترل مرورگرتان را به دست نگرفته است اطمینان پیدا کنیم." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"اگر مرورگر خود را تنظیم کرده‌اید که کوکی غیرفعال باشد، لطفاً مجدداً آن را فعال " +"کنید؛ حداقل برای این وب‌گاه یا برای درخواست‌های \"same-origin\"." + +msgid "More information is available with DEBUG=True." +msgstr "اطلاعات بیشتر با DEBUG=True ارائه خواهد شد." + +msgid "No year specified" +msgstr "هیچ سالی مشخص نشده است" + +msgid "Date out of range" +msgstr "تاریخ غیرمجاز است" + +msgid "No month specified" +msgstr "هیچ ماهی مشخص نشده است" + +msgid "No day specified" +msgstr "هیچ روزی مشخص نشده است" + +msgid "No week specified" +msgstr "هیچ هفته‌ای مشخص نشده است" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "هیچ %(verbose_name_plural)s موجود نیست" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"آینده %(verbose_name_plural)s امکان پذیر نیست زیرا مقدار %(class_name)s." +"allow_future برابر False تنظیم شده است." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "نوشته تاریخ \"%(datestr)s\" در قالب \"%(format)s\" نامعتبر است" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "هیچ %(verbose_name)s ای مطابق جستجو پیدا نشد." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "صفحه \"آخرین\" نیست یا شماره صفحه قابل ترجمه به یک عدد صحیح نیست." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "صفحه‌ی اشتباه (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "لیست خالی و \"%(class_name)s.allow_empty\" برابر False است." + +msgid "Directory indexes are not allowed here." +msgstr "شاخص دایرکتوری اینجا قابل قبول نیست." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" وجود ندارد " + +#, python-format +msgid "Index of %(directory)s" +msgstr "فهرست %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "نصب درست کار کرد. تبریک می گویم!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"نمایش release notes برای نسخه %(version)s " +"جنگو" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"شما این صفحه را به این دلیل مشاهده می کنید که DEBUG=True در فایل تنظیمات شما وجود دارد و شما هیچ URL " +"تنظیم نکرده اید." + +msgid "Django Documentation" +msgstr "مستندات جنگو" + +msgid "Topics, references, & how-to’s" +msgstr "سرفصل‌ها، منابع و دستورالعمل‌ها" + +msgid "Tutorial: A Polling App" +msgstr "آموزش گام به گام: برنامکی برای رأی‌گیری" + +msgid "Get started with Django" +msgstr "شروع به کار با جنگو" + +msgid "Django Community" +msgstr "جامعهٔ جنگو" + +msgid "Connect, get help, or contribute" +msgstr "متصل شوید، کمک بگیرید یا مشارکت کنید" diff --git a/venv/Lib/site-packages/django/conf/locale/fa/__init__.py b/venv/Lib/site-packages/django/conf/locale/fa/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/fa/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fa/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56b1741d54871b55c8903ee7eeee333a33837c53 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lTB3e@d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04O{($p8QV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fa/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fa/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6eee789411bbc1bb3108eb5aec23ffabfdfb0023 GIT binary patch literal 513 zcmY*W%}T>S5Kfw;tu0k6de2o*b1x!>Cb31^ND`4Oiy_T!OKO{yY$BMG4YHM>)^S>aqk6~51xU2cIg&Nhyxtr0gpdZoApc@%ZBV`!a*xc*ID@t<~MTwnBV13`Gd@a zOqf}ilu51HHR~{vb_tf0?G;F)hcN@4E3%EwnSbmR&eq&osPKT|Wd(O>cL5>XB#b z$Eu||rUllVj(K9MeeIvS=VFn~FiT&!-GV0+#}ryAr9RY1kWO)wP;d8IpMFCv@lH>ZQ6n VB`BTXz2XaLv42q%`Gr%d^50~`jsXAw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fa/formats.py b/venv/Lib/site-packages/django/conf/locale/fa/formats.py new file mode 100644 index 000000000..e7019bc7a --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fa/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j F Y، ساعت G:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "Y/n/j" +SHORT_DATETIME_FORMAT = "Y/n/j،‏ G:i" +FIRST_DAY_OF_WEEK = 6 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e805013eb1cf01946f8cba91d55f99989ad2ba53 GIT binary patch literal 27454 zcmd6v37lP3o#zi*z^H(T2rh6F2vkX46=A0!KvoixB1NhacEhcDH}!74%!fgZ>${-J{m|pjLCxd0pw{g$7DKoY)Vz)YRsJ|1KM_bFMhe4LoJOFY8%=bZ^x1-K*>luJL2j_vRmx4OCw|acN$G3UB zAJn)$4+h{Ppw{76py%bd8@vAq28vh4D-M0^e+TS08uwZled2YPDpw_hns^4=#(b

  • VFj!zx)=cbzP2-pnf-i zT9+a4RB$V(^YwgC`}8_c^zt_FmEZ?J^|$&0*Uvgo^*4h`zZ(1%cs=+za0|ryW$b(Sf3iu|U{!Wh{^Z5^hqUXmzmHV|%e4}ksPF)JKBtOR?B#~@p3UJafFehw60I%uUE&qd(X z2f=f|TS5!PiKLLgX_SPz#&k4 zWfEkn<}Og}JO-+tAA^U3hpcn`JrUG+o&ky;P6l2OH2Go8Wzuxh=i@+m@Uk!?{grLeNU@tfYYTe!pYQFCV zwGIz~s`nXC=j&k*k~075(|a#xuZW)s-VVM6{1fo}4bTGk0q~pPOE z96RLX@m^5$btR~JDX4m{0CnEp0&W5S06q=eawR+;tb$Jf?*c`KZwIw5?*Rkw!#@61 za2xS&gIed+9B!@SW>EF7_BaZ{VoeRyKD-qay}!%nzt^YV4~~;Q18Uz-A9i>asCF*| z18{{;9|hIkgwMap$EQK{{{m3w=Ov)pdkuI9_$F}kLF_;H1>!%0$$Sxfh{e!+Uk`H< z-U*5x?*i4{gP`d7v!L4jGI&1t9k2wRc$MpCBdBqWfLgcfe7p>*ovKgIefkSPjqesv z>-Y+fZv-{(dqK7HE>P`$5LEfU_357kpF;faLAC#=&;Oy1{~WxB^xuQp=ew_V_3sB& z{^Ow9|GZCs1U#DfH$m;wPe7IX8K`o<1J42%T;s+&03Jhp9jNlxf#-qG1155Zv#&O?*Q%mLCxor;6m{0pxSv1)Hr?# zitc^`YTeGg&fO2o!PAKE02A=dU;rM?<**i92CfEofR};~fZB)OgBr)793Iidk>Ckn zpO3Et)qe%leoTWJ=SxAY+p9p0>kc2k6V$rh4Xy+~1g-&p3##7A=eluU4yxTNLG^bd zsQK;$)$T1GUkUaRe;ufHKLM(pFN5L>{{r@dzW}vvr*e2To{K=u>k?4q*MnNGD?!ou z)jq%M(;J}1ll%Ceff~nOfGYnQa1r=s@LAx4;Hls@!DZlr8y(*|AJn|B^6@*s#l$}Z z_JCglHQ&QRSN|kX<6R5dae`WhE5SwJ_25&%7l11FSD?zh7Sw$11U1iH;IqMZf~x;n zP~(3DRQZ1fHIK)9{?9>Jr1=A=`a`3RKU@o{{5DYI90xVeKLxe^Z}s^f0bfge20R$N zX3VvJJt(@WfEr%|`~{eUUjl1oC#SBAT)k&)cjZq44-P{Xa04}Jw_@&^*#P0-Q`Q~e23Z50Shu}S64|w#1<5L%arxAZH zsCu`8;+qeFmx8|rHLroHll#8I_sEB;)A`o#Z4T_;XOIUAvO3Z?yV6hf-%lW4^Zt>K zi7ayR`p!k7)%L$^ze^A8#U>D}o1eV7f?Z@l0EZ-=; zukaryQs#g1t+Q7A-s3->L*Ai;VZsK&DnjuaR1Qj*|H-VSu3DZ3LaAjg--uUEtd}1RNuN7(u`PLihvWT!MJ8-Yz}> zUPjQF)$ijD?B6B)T}qh}*au!o&~KLmb0hdk!YMxeb9|pgIEMI2pLQmAIcZ-dJeBVT z_%!gl;FEnB@uwwxuOlqt`y_A^xP$N{z7HatOwjLs!Y>I=C47nSCc;C6FA$2~DSWJ< ze6LS|GSd-&K$_%T89|LKGw zf_~?Mw}TfGzDHQ>)A_W&yNVC+iG;feFY;+m_P7ST%6}gY9#6Q$xAPgk|JCOSo=Lcg zFhh7dq4=%#r5GE7{pmn4_m4j)<@&< zJjv4_X%@+iBnzS)ahmnf<@PwLmABQx(WpkR^*pux<&F5JJPNi`$&G5;>~c$bYDrSf zC%0v-NqV#mHIsU8T3XVRB{bBGYGD>9jkFR^s+T=xrsUR>vh6)?q*>S)i-PGmtI)CS zlg5_xOog>P>TL$)Buax>o!&);6%Plu=JKp`Nn9}*~H5+-o zw;Yti7DI1;YaT9AN%H2bNGGcvH}WiMXS!%tcGAcyom|B_nbT2JZRaV{$!bMmr$hA{ochLSFvVTWbnx1uWxg0eDyMO_+vTNJRSJZ4K&EC{3 z4Y;@lF6mojRs@$1Z@MB#Mkk`N%&ZtRE4DY|Y8WTG zVzL?6Oc800L%gvH2E&t7NGoL3BUdxca@8~|@^J_gNV8^GQ`t3*@tQ5WGir{8@dP!^ z$}oj!%}PkGnWw6^GHQ%d-mHwrgP!y4TJ+kp#E8twB&kI-)w2d_i<-em6N-o6*M_w; z>YX=xsmoNUD|FN-l-iN5Y=%2yJFuaonK9ZZWgwi_gh4dpjG?xNyfUwihjv;kb7o4x zRl}Rt22(83_IS*mnqYev*P?P?usLEz9LaE$W=Sxs!Yr&YvsIO_F-}cp&@`)(TEaQ+ zTEbOHy&jg*XfkZVQp7W|h&iVeZ8X@brNMZV1(m2axm1%GgVdVwsAzLlGhqno!SR(^ z%dFZNjaAHQw>hh6FX(XxO`MAKA|c5$%b9$dqRIB4X$QJG8jI?qtU4cYJ*)+s6&J0+ z)XeI*$*7WMi;gH!Su22eSk*>3c=UyDf``_^H1$lR&-S=2Qn5#0cxM1J zu@uo~3YuHfNOMM)RYK;garwap^~5DNI4kvV2h5}FXFFL7#~A+OtqH?AkgD-G7rX+2hAXuusc|lT?LWu0AzlYZh5cm7+*W53 zgIjT`*WelZRabq4aMJpuI9gyEP@68@@*B9JO}59`r8_p*DMx->4%QD%on0`jdGnYD zWzOA8nLXy|!k*jamd!YW6hn1G*s^8)>bYqWPv=YPm+ZM)hG)Wa)1z)~JU7$dQ*)E& zYk$rHyHUf<(^@_*zRjJM!sO$|xNe~>jd%sL`a85m#xJ@P$;N8+vUt z+RVdd%dC|QuUSeOAAqo(?CWH6a%++OgYcU%GcHDV>$Ri3slVtXS^EpOFIeGk-gYs2 zDXV#3WLqakDuDV4CPO6HwQ<7=a%*dnCD?#TT|C8=zcy)(S_#we6~*I?U_;ajdNf*Y zDs~64m`gRn)*;TsW?haLY9+q)L&cFb-DljaA46!R=$KhwPR#o4K`Y6vRDm4J`sotC zs2*iupo?z#;%2lRSv+bkwvroi&+^5Mq|{EmILJb%9)+(lR?Evp3mlHkzG7)8VOp&L zmZn`zG*CfFikeFUcv#31HKTemWo3wZUogTTtfV^GOfsZ3(NPm_is&W|8HuQD`%$yg zlo)L}VWFDwSVnQi4WAsVL}OKk)fc#_qUN%FoY=9bsl7+sMR-I{mQ98rc6)}V|A zS`r@Ac|cAQ#z8AH>J#T?p;QbOJkB{AvxQi&Yyl9#q@l~46!d5KcQlGwCT z(&Tib(BEkn4Wa(PM>5|6Kkjj@8yOiI*8HUpNK@ax5s!~TpY;&kW4$DGaUCoKh4_wg zNHVICJ(la8)WRl>MpTl0eLeoXJvp)94{JYo6$fMPFm)&-M7tcw=u~u zf}SNk!foy*?M-{dp-`(*5;YuHM8&K};?&u_JZxBwd3lJgDb?%p90lj{yb+lV;b;p+ zxgl&c!g2`i467Bhp;AX_*#L=Adqb-^-r8w4hS`)F+lbznqZR2B9iTzn1y>25U*3pQy$ig}ofaf)R z!JscrMEul%q z)GB332_EM;u!uuuoIxp*l~@QH9@I?SGN*j(Ky~e?@PjB{1o3EK9A=~0vx=}Jx0B)? zOf_t?Wvf!IUbAw`Wy__B_n9luUeVpJpy6f+>2zAZA~9D;e(UD;u=(u?cR7d<>==4@R91prv}v{=%|{X6tp+}SaXy8j<#y!zw;%6=u85o0?n!W>cDCiX1aTgJwv_jJ?t|%2DOg%wS`P zP|&9~-71^nB{%do)ZO&3qUlOJ zR+(dtq`3oY<^U_St%&pVZ7&sVWMTP)-cU!ojiZu*_Buc-vFbQu(P$TqobkyK7zfmn zoEElCPh(8l$48SLT6UECB*R_X_g2&`?x7_}OqSgCp5Ga6rvaz8?XiA$wyJZkVQ^h0 zuc3sy58fSMbruE4=tRCx+$|xkBT9D4<&6m}gl2O%P5lOvttAb!Ie{06iZ$;ix7O3#DqIN{v;L7}JZmg|#8GZH|&f_Y#@e(>4?ErJ33u zS{aee$2GaX?M!CwTn;0e+QB;vxJ6>75~D9#egg+V?&V4vMtTSa!^zYP*OIBQYQY&q zhtX|Yldg7WnoJlmPu?ZkZewSNMT&JduqVt(lmCfUMQ z4H+dRg(B}CihbXuMCENt(2abz8P1ss+*kWC9ab=ff)Nr_#SFJ3*IM>sM#71>%HKK$ z;1MpnrWuKtQV#6M42v7<50ala4h$s=c@lu&8Bv-}?m425W>tq6)HSb=uavRNrv+(Hy#Lv_u2W?WE=ic5`>S*O{|ImuYkZ5yHkl6e_m`8gw6AP!<0xl(i|NB|&>uDWt&k*@zc=mYmX}tS_Af@7@QGZ!W&rmlRDz=|%ma)2Y1iy{k!c6><^*z9rhYDyp%c*T88ceaeELMv)W6 zSOzbXxAkwUDmg7g3R6LnNGy^vHhWdkX{1t{U`#w{raGC}2CTL=9gP+m+fqbZObp`c zR$!x;cA9=&3)+Z+=(9TIPq#TDy`7CO^8ao&mNyqRl*dhp+xrnOb*rTP zCzm6%l6}%-M>Vhn$pRpM**z*+a)(-vIwYexA%^HAbB`1%zEm363HucGA&!Tm7-^>Z zoJ@YGdzYM(mXFUZ#sk*eBn)wLlTb8wOOmQNyLqd4&Q5a5)!ekX6_NJmHjh|8H)%MU zR9cObVAYOdid_lrVYRDB`=PEYt!-%RN-H$!?j$?GPUCKNow%P`cLMY3MB6G%S6ZR0 zbR}t4PNZV1O*q*!VLonnX*1iSQ3De+6M2o$Fm(hBbYN4D%Z+%vl9@(=UfM{eOu}n* z(lnEz0?e(Z#SPX-mQr{$GS(a+L#DGu%=S6(xmB0v*+Ox_SP`?&74hPxIM_f^tMXY#yQI@?=gKWonN@Hl`v-tEI0NY%Tl-ff1Qq*Yp9E^U>W zBWVl-P6k`J*;?32gXwr&F0IVR)6z&X5G)+pRN5R(@nn%SN~_t+f#A$D&RkYnwybpK zIl&p{4V-!Q>1Xg;xDg9W3Gum+qE94E1mdvSh=UDDT174-Tb9)Es5BCV^#OD{``Qxp zNE$>KoSvTU!%c>Vp6$^ND+jt!^?N|FwAK5!$Njwv2iFg->5P9_-x&+hWq2lH0QNCS zI$l5S3vuH@6klA65F59QtSz12DW|@$>zCGe!`DD?{%D-FhdIE#yl}|A#gx`clHt|C zJ@Uct1$PFw4R)K(PpQ8^&rEB~X^tIH=F;n%RXkn9c0s zGn=`O+k0{Gj^>@?7MH3l%giobk@>HdVKtEI5m&1*+F&J%WDJ!hR>$-}{pCuuP?l%d zY)?5Q({M(Hcake1XJ$FFQ%FzVT;>Pn7r=6TeC1d&y)zQ(c(;UoMH_{gYr-yt?2~rV zMRSEOAk^LnCX)TA-g47anUv}M=-B*xc8tuud({oaaV-%A zvE0Glz3QY0`h7MlhD_M@sSEL`!xYwWslzgkQOQ)Gl9)LfA7A0T>ad|Tf+*#wVF;DVUObAJq=c$g}0CZL5X^s^Rdc>4_?IDaH4439z@b*?? zX)w3AYlE{KS9O|k>=Uo=S#)Nf^aeq?Q|!?jG|E`hNw){ zx$c>fnO&9@RHBUgg7KK_p|?b^DT8-yT4f;a06L}zHBN+q3Tmt7$?b`2b`jbo!rt9l zfY-?GL6Oi*;JM6x=eYW%SWA#&?e_cGuM1(`tbD_OmUnQ7#FnS389Pg$0^tJ=_3ypVWcWW+Gc* zW7<%Tzh$JXI%JI7DNn4{FQ(35I9YQygm*y>5o*(9%z4!!^-y*8F=6kzTm%2ldaA~Z zioRe)kGH3S3b`tI8DO-Iyt-ZC_H$NUZgO&Z+{4WFyT5(T?ZEn*wO9Y?v)e~+2Rb*- zDD>x8Mz>(No6BOOC8yM`m65|@QCke9yY^nT9NSec*YmZaYdlq6cBvf21IsmHP z$*}CWD+&ki#JC-%IO6u)$Zx6ScU9!dw~S!p3wfg0xSD>I&m4;?{;g` z=UA7;Vx}(5%bLYiH@C6Lsd|6s>YJNe)#cJj>|O=9+?8rIj^sf0fL{J)OYj@|*_^c$s%VfL+FL! zQm)VJv-QW-YO(sW=e<><)nznW%5g)rj2V%Ke~b{KQ{f%p?#n)deB^x|r{X5Jd{jfW zL$KK3rRc2Hnw*5ucHCdQ%j1Z@4kV`_jzs~w9D1yCe(X&b7rK#?IBX0{7V+pA?D z;3X16gUChF6Y>utR&D0KRvB+PL`eu~UJ1x~KkhC8Nm#}S(u_MFNRx)uG&F;VS8S`6 zE7e+|9OSSu_e>;7u!?&pk}n&_KV1W?Gi2VV;tPrUqd&#g5wiG3Rj^7&Tu#j8Ng6=E zEt<{_$omlm1ZNq`ffn0mBwP;Xb9h`Fl#-08NSQ|4MOUt92Xt0&Se4X>smHoJqJ}3E zD3lyKq|TUsmSg=GU3E+k=+IH6JhQ9HdzTCf%_`D8FLZKtWHfr`%n)^>Mqi*=(F!l4 zK?~tGYsF~`tA+$qKUtmaN|rj+D(TC0Wa8+EFhNLUwpPg1l5Ce^_0 z5q%6o?6XTslJpDrCV~Y7Z6n31gtdk0)>y#Ur%(?eJ}JF**-h+XqDi1qFjTmy6}}=? zD|H8D&iYkbs2+jOr@t($q6Ufyh*}s6wwp#Md5q>1)fj~`#^5f=5Y(IG$)IO(m;dDA zUhF`vMq}o_1Dw%rgP*mB^N@g>f+LXq9{=1skkm-N431o-=^=rl*-T?37qC zzPoJAzPv2sra!mV&(c6Oj#E#_&oYJq#MlhPy17!_hj+K+pjdays@yFh2WL{K%ImTd zllP_JIvTf351S~g&D5}iWjK_sz#mP1m!@XDF6DGtG*jnnThB{gfuQh-*y04=b6qcG zZ7K6sI4R2#OD~Fz1B`o+r}T+B>FN$ezg@!dY5t9yiWj!Rw*RHhIZh#5SsWg5lN{Z> zt?bxi#EqVpIeyJh7KucNF|q z0_Z8cJCWWucq?PO+pX55*on%7*pA^X2|Mo@bsn6(JVV+zCNcZft35?V&=!thsgV9C z$*3A(v@;OVmO;v%l2(q)l|GOT>W?frfr`N z7%9dWYx`r_TqlHm>KEF{t0$RVWz58zZaUtpHl_1io z?iwTSSX;3tIm>1HGGS%JD4e*!K^GU18Dc3MLn0*CcO9u#oK3fyJv|%kHA+qRa+hLX zcGSi#y^jJMnXWS3O5Z$9%$IE&kZgcZ**1kb>n(;eT(;sVtLb&i@ZO1Y-W&|4T7o^* zoOEuT1^sPiIq*Y=xgiE}7lnrZH-P**O<`Cz46GL7@GVA_R^{HQ_b2FkTrQs2FEADI zq~o-xjJ6nrTw&;;G7fu#TbG*jD)9HC=Wexd#^Bo{lrX zBCy2T)t|Lh1s5KcjTF~d$zPr@buGYC;)w*O%Kd78et*wY%1)!fGmW;$dwez#BT!1L z!)I0h;!6hS@gU!<<63!8W+$a4+WJwN2k#Vhix8CV#1jOivWE7HeancsZ*tMXc=0+%moz{0kq>uXhEN_c4kya(siU zKsR>0DA>dx7!Bmc9no0i?jkm&t=~z+wK|?Pl5*%Vh}Ss&UH+e34BhUZjsfT{YHyr` zkjxse3;T~{nqtiwa$$m`T-YGrPo&>?&*dB&%{;I-7(` z_9~PPJy)qnQYyFAQ5|Duo!fe-1j1RGoTN2(`-*RfrbYIJIxBY37i_Xxe}~vHmo(WQ zBx$6v6pfr}(5`=KuwpqCBPmi+ot=h_;O{kTz910k%1G&6n|33u;I@WIq|fZnwC7CN zJ~tK`^el~Beg;yIC7dGIS<$^OSi|VJVE(_EmDd>f=ViJ~IV=CSeMN)i)=9{Ei}Dg` zj~M58mgS?ZRCE}Km5#zm_oi-m7dQ4n(^(&NjbY+*`mCs&JIm={P66{mycN!^c+h^D zN6v9??0gh2q7-?PbHap2o)1$=qogfAZdaS$k` zqAt~!CZWdFs#%2b{oKepAj?s4AG-BQITXD=YweJBUB}g6p26|`x3wM&j#DOsb z85|)m80Hd|Ayhsv@Yb#TN*gwmhK7PtyU^Umd9v$ptdl38JyWzjJ0`rvu7`>c8k*2zYBe}JwT%~`Bs%0=rz zPuCL9)41l??!ePmv1|QuJ(!0C<}UNBsmy7kGqcV(e1G%M)||?_b=0+W?e}z9_4ih= zR+#?xR;XM2+*>*8Bg4S?ho{!?f%GAJ0td0}`m$T~S>)SsvUwbJy8LTw?any*OkZE0 F`43C3{t^HH literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..d599ae31a --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,1308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017-2018,2020-2021 +# Antti Kaihola , 2011 +# Jannis Leidel , 2011 +# Jiri Grönroos , 2021 +# Lasse Liehu , 2015 +# Mika Mäkelä , 2018 +# Klaus Dahlén , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-25 07:24+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaans" + +msgid "Arabic" +msgstr "arabia" + +msgid "Algerian Arabic" +msgstr "Algerian arabia" + +msgid "Asturian" +msgstr "asturian kieli" + +msgid "Azerbaijani" +msgstr "azeri" + +msgid "Bulgarian" +msgstr "bulgaria" + +msgid "Belarusian" +msgstr "valkovenäjän kieli" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "bretoni" + +msgid "Bosnian" +msgstr "bosnia" + +msgid "Catalan" +msgstr "katalaani" + +msgid "Czech" +msgstr "tšekki" + +msgid "Welsh" +msgstr "wales" + +msgid "Danish" +msgstr "tanska" + +msgid "German" +msgstr "saksa" + +msgid "Lower Sorbian" +msgstr "Alasorbi" + +msgid "Greek" +msgstr "kreikka" + +msgid "English" +msgstr "englanti" + +msgid "Australian English" +msgstr "australianenglanti" + +msgid "British English" +msgstr "brittienglanti" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "espanja" + +msgid "Argentinian Spanish" +msgstr "Argentiinan espanja" + +msgid "Colombian Spanish" +msgstr "Kolumbian espanja" + +msgid "Mexican Spanish" +msgstr "Meksikon espanja" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguan espanja" + +msgid "Venezuelan Spanish" +msgstr "Venezuelan espanja" + +msgid "Estonian" +msgstr "viro" + +msgid "Basque" +msgstr "baski" + +msgid "Persian" +msgstr "persia" + +msgid "Finnish" +msgstr "suomi" + +msgid "French" +msgstr "ranska" + +msgid "Frisian" +msgstr "friisi" + +msgid "Irish" +msgstr "irlanti" + +msgid "Scottish Gaelic" +msgstr "skottilainen gaeli" + +msgid "Galician" +msgstr "galicia" + +msgid "Hebrew" +msgstr "heprea" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "kroatia" + +msgid "Upper Sorbian" +msgstr "Yläsorbi" + +msgid "Hungarian" +msgstr "unkari" + +msgid "Armenian" +msgstr "armenian kieli" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesia" + +msgid "Igbo" +msgstr "igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islanti" + +msgid "Italian" +msgstr "italia" + +msgid "Japanese" +msgstr "japani" + +msgid "Georgian" +msgstr "georgia" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "kazakin kieli" + +msgid "Khmer" +msgstr "khmerin kieli" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "korea" + +msgid "Kyrgyz" +msgstr "kirgiisi" + +msgid "Luxembourgish" +msgstr "luxemburgin kieli" + +msgid "Lithuanian" +msgstr "liettua" + +msgid "Latvian" +msgstr "latvia" + +msgid "Macedonian" +msgstr "makedonia" + +msgid "Malayalam" +msgstr "malajalam" + +msgid "Mongolian" +msgstr "mongolia" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "malaiji" + +msgid "Burmese" +msgstr "burman kieli" + +msgid "Norwegian Bokmål" +msgstr "norja (bokmål)" + +msgid "Nepali" +msgstr "nepalin kieli" + +msgid "Dutch" +msgstr "hollanti" + +msgid "Norwegian Nynorsk" +msgstr "norja (uusnorja)" + +msgid "Ossetic" +msgstr "osseetin kieli" + +msgid "Punjabi" +msgstr "punjabin kieli" + +msgid "Polish" +msgstr "puola" + +msgid "Portuguese" +msgstr "portugali" + +msgid "Brazilian Portuguese" +msgstr "brasilian portugali" + +msgid "Romanian" +msgstr "romania" + +msgid "Russian" +msgstr "venäjä" + +msgid "Slovak" +msgstr "slovakia" + +msgid "Slovenian" +msgstr "slovenia" + +msgid "Albanian" +msgstr "albaani" + +msgid "Serbian" +msgstr "serbia" + +msgid "Serbian Latin" +msgstr "serbian latina" + +msgid "Swedish" +msgstr "ruotsi" + +msgid "Swahili" +msgstr "swahili" + +msgid "Tamil" +msgstr "tamili" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tadžikki" + +msgid "Thai" +msgstr "thain kieli" + +msgid "Turkmen" +msgstr "turkmeeni" + +msgid "Turkish" +msgstr "turkki" + +msgid "Tatar" +msgstr "tataarin kieli" + +msgid "Udmurt" +msgstr "udmurtti" + +msgid "Ukrainian" +msgstr "ukraina" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "uzbekki" + +msgid "Vietnamese" +msgstr "vietnam" + +msgid "Simplified Chinese" +msgstr "kiina (yksinkertaistettu)" + +msgid "Traditional Chinese" +msgstr "kiina (perinteinen)" + +msgid "Messages" +msgstr "Viestit" + +msgid "Site Maps" +msgstr "Sivukartat" + +msgid "Static Files" +msgstr "Staattiset tiedostot" + +msgid "Syndication" +msgstr "Syndikointi" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Annettu sivunumero ei ole kokonaisluku" + +msgid "That page number is less than 1" +msgstr "Annettu sivunumero on alle 1" + +msgid "That page contains no results" +msgstr "Annetulla sivulla ei ole tuloksia" + +msgid "Enter a valid value." +msgstr "Syötä oikea arvo." + +msgid "Enter a valid URL." +msgstr "Syötä oikea URL-osoite." + +msgid "Enter a valid integer." +msgstr "Syötä kelvollinen kokonaisluku." + +msgid "Enter a valid email address." +msgstr "Syötä kelvollinen sähköpostiosoite." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Anna lyhytnimi joka koostuu vain kirjaimista, numeroista sekä ala- ja " +"tavuviivoista." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Anna lyhytnimi joka koostuu vain Unicode-kirjaimista, numeroista sekä ala- " +"ja tavuviivoista." + +msgid "Enter a valid IPv4 address." +msgstr "Syötä kelvollinen IPv4-osoite." + +msgid "Enter a valid IPv6 address." +msgstr "Syötä kelvollinen IPv6-osoite." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Syötä kelvollinen IPv4- tai IPv6-osoite." + +msgid "Enter only digits separated by commas." +msgstr "Vain pilkulla erotetut numeromerkit kelpaavat tässä." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Tämän arvon on oltava %(limit_value)s (nyt %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Tämän arvon on oltava enintään %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Tämän luvun on oltava vähintään %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Varmista, että tämä arvo on vähintään %(limit_value)d merkin pituinen (tällä " +"hetkellä %(show_value)d)." +msgstr[1] "" +"Varmista, että tämä arvo on vähintään %(limit_value)d merkkiä pitkä (tällä " +"hetkellä %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Varmista, että tämä arvo on enintään %(limit_value)d merkin pituinen (tällä " +"hetkellä %(show_value)d)." +msgstr[1] "" +"Varmista, että tämä arvo on enintään %(limit_value)d merkkiä pitkä (tällä " +"hetkellä %(show_value)d)." + +msgid "Enter a number." +msgstr "Syötä luku." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Tässä luvussa voi olla yhteensä enintään %(max)s numero." +msgstr[1] "Tässä luvussa voi olla yhteensä enintään %(max)s numeroa." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Tässä luvussa saa olla enintään %(max)s desimaali." +msgstr[1] "Tässä luvussa saa olla enintään %(max)s desimaalia." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Tässä luvussa saa olla enintään %(max)s numero ennen desimaalipilkkua." +msgstr[1] "" +"Tässä luvussa saa olla enintään %(max)s numeroa ennen desimaalipilkkua." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Pääte \"%(extension)s\" ei ole sallittu. Sallittuja päätteitä ovat " +"\"%(allowed_extensions)s\"." + +msgid "Null characters are not allowed." +msgstr "Tyhjiä merkkejä (null) ei sallita." + +msgid "and" +msgstr "ja" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s jolla on nämä %(field_labels)s on jo olemassa." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Arvo %(value)r ei kelpaa." + +msgid "This field cannot be null." +msgstr "Tämän kentän arvo ei voi olla \"null\"." + +msgid "This field cannot be blank." +msgstr "Tämä kenttä ei voi olla tyhjä." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s jolla on tämä %(field_label)s, on jo olemassa." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"\"%(field_label)s\"-kentän on oltava uniikki suhteessa: %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Kenttä tyyppiä: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "%(value)s-arvo pitää olla joko tosi tai epätosi." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "%(value)s-arvo pitää olla joko tosi, epätosi tai ei mitään." + +msgid "Boolean (Either True or False)" +msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Merkkijono (enintään %(max_length)s merkkiä)" + +msgid "Comma-separated integers" +msgstr "Pilkulla erotetut kokonaisluvut" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"%(value)s-arvo on väärässä päivämäärämuodossa. Sen tulee olla VVVV-KK-PP -" +"muodossa." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"%(value)s-arvo on oikeassa päivämäärämuodossa (VVVV-KK-PP), muttei ole " +"kelvollinen päivämäärä." + +msgid "Date (without time)" +msgstr "Päivämäärä (ilman kellonaikaa)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"%(value)s-arvon muoto ei kelpaa. Se tulee olla VVVV-KK-PP TT:MM[:ss[.uuuuuu]]" +"[TZ] -muodossa." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"%(value)s-arvon muoto on oikea (VVVV-KK-PP TT:MM[:ss[.uuuuuu]][TZ]), mutta " +"päivämäärä/aika ei ole kelvollinen." + +msgid "Date (with time)" +msgstr "Päivämäärä ja kellonaika" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "%(value)s-arvo tulee olla desimaaliluku." + +msgid "Decimal number" +msgstr "Desimaaliluku" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "%(value)s-arvo pitää olla muodossa [PP] TT:MM[:ss[.uuuuuu]]." + +msgid "Duration" +msgstr "Kesto" + +msgid "Email address" +msgstr "Sähköpostiosoite" + +msgid "File path" +msgstr "Tiedostopolku" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "%(value)s-arvo tulee olla liukuluku." + +msgid "Floating point number" +msgstr "Liukuluku" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "%(value)s-arvo tulee olla kokonaisluku." + +msgid "Integer" +msgstr "Kokonaisluku" + +msgid "Big (8 byte) integer" +msgstr "Suuri (8-tavuinen) kokonaisluku" + +msgid "Small integer" +msgstr "Pieni kokonaisluku" + +msgid "IPv4 address" +msgstr "IPv4-osoite" + +msgid "IP address" +msgstr "IP-osoite" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "%(value)s-arvo tulee olla joko ei mitään, tosi tai epätosi." + +msgid "Boolean (Either True, False or None)" +msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)" + +msgid "Positive big integer" +msgstr "Suuri positiivinen kokonaisluku" + +msgid "Positive integer" +msgstr "Positiivinen kokonaisluku" + +msgid "Positive small integer" +msgstr "Pieni positiivinen kokonaisluku" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Lyhytnimi (enintään %(max_length)s merkkiä)" + +msgid "Text" +msgstr "Tekstiä" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "%(value)s-arvo pitää olla muodossa TT:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"%(value)s-arvo on oikeassa muodossa (TT:MM[:ss[.uuuuuu]]), mutta kellonaika " +"ei kelpaa." + +msgid "Time" +msgstr "Kellonaika" + +msgid "URL" +msgstr "URL-osoite" + +msgid "Raw binary data" +msgstr "Raaka binaaridata" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "%(value)s ei ole kelvollinen UUID." + +msgid "Universally unique identifier" +msgstr "UUID-tunnus" + +msgid "File" +msgstr "Tiedosto" + +msgid "Image" +msgstr "Kuva" + +msgid "A JSON object" +msgstr "JSON-tietue" + +msgid "Value must be valid JSON." +msgstr "Arvon pitää olla kelvollista JSONia." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-tietuetta %(field)s-kentällä %(value)r ei ole olemassa." + +msgid "Foreign Key (type determined by related field)" +msgstr "Vierasavain (tyyppi määräytyy liittyvän kentän mukaan)" + +msgid "One-to-one relationship" +msgstr "Yksi-yhteen -relaatio" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s -suhde" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s -suhteet" + +msgid "Many-to-many relationship" +msgstr "Moni-moneen -relaatio" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Tämä kenttä vaaditaan." + +msgid "Enter a whole number." +msgstr "Syötä kokonaisluku." + +msgid "Enter a valid date." +msgstr "Syötä oikea päivämäärä." + +msgid "Enter a valid time." +msgstr "Syötä oikea kellonaika." + +msgid "Enter a valid date/time." +msgstr "Syötä oikea pvm/kellonaika." + +msgid "Enter a valid duration." +msgstr "Syötä oikea kesto." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Päivien määrä täytyy olla välillä {min_days} ja {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)." + +msgid "No file was submitted." +msgstr "Yhtään tiedostoa ei ole lähetetty." + +msgid "The submitted file is empty." +msgstr "Lähetetty tiedosto on tyhjä." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Varmista, että tämä tiedostonimi on enintään %(max)d merkin pituinen (tällä " +"hetkellä %(length)d)." +msgstr[1] "" +"Varmista, että tämä tiedostonimi on enintään %(max)d merkkiä pitkä (tällä " +"hetkellä %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Voit joko lähettää tai poistaa tiedoston, muttei kumpaakin samalla." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Valitse oikea vaihtoehto. %(value)s ei ole vaihtoehtojen joukossa." + +msgid "Enter a list of values." +msgstr "Syötä lista." + +msgid "Enter a complete value." +msgstr "Syötä kokonainen arvo." + +msgid "Enter a valid UUID." +msgstr "Syötä oikea UUID." + +msgid "Enter a valid JSON." +msgstr "Syötä oikea JSON-arvo." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Piilokenttä %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm-tiedot puuttuvat tai niitä on muutettu. Puuttuvat kentät ovat " +"%(field_names)s. Jos ongelma toistuu, voi olla että joudut raportoimaan " +"tämän bugina." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Lähetä enintään %d lomake." +msgstr[1] "Lähetä enintään %d lomaketta." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Lähetä vähintään %d lomake." +msgstr[1] "Lähetä vähintään %d lomaketta." + +msgid "Order" +msgstr "Järjestys" + +msgid "Delete" +msgstr "Poista" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Korjaa kaksoisarvo kentälle %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Ole hyvä ja korjaa uniikin kentän %(field)s kaksoisarvo." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korjaa alla olevat kaksoisarvot." + +msgid "The inline value did not match the parent instance." +msgstr "Liittyvä arvo ei vastannut vanhempaa instanssia." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Valitse oikea vaihtoehto. Valintasi ei löydy vaihtoehtojen joukosta." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" ei ole kelvollinen arvo." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s -arvoa ei pystytty lukemaan aikavyöhykkeellä " +"%(current_timezone)s; se saattaa olla moniarvoinen tai määrittämätön." + +msgid "Clear" +msgstr "Poista" + +msgid "Currently" +msgstr "Tällä hetkellä" + +msgid "Change" +msgstr "Muokkaa" + +msgid "Unknown" +msgstr "Tuntematon" + +msgid "Yes" +msgstr "Kyllä" + +msgid "No" +msgstr "Ei" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "kyllä,ei,ehkä" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d tavu" +msgstr[1] "%(size)d tavua" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ip" + +msgid "a.m." +msgstr "ap" + +msgid "PM" +msgstr "IP" + +msgid "AM" +msgstr "AP" + +msgid "midnight" +msgstr "keskiyö" + +msgid "noon" +msgstr "keskipäivä" + +msgid "Monday" +msgstr "maanantai" + +msgid "Tuesday" +msgstr "tiistai" + +msgid "Wednesday" +msgstr "keskiviikko" + +msgid "Thursday" +msgstr "torstai" + +msgid "Friday" +msgstr "perjantai" + +msgid "Saturday" +msgstr "lauantai" + +msgid "Sunday" +msgstr "sunnuntai" + +msgid "Mon" +msgstr "ma" + +msgid "Tue" +msgstr "ti" + +msgid "Wed" +msgstr "ke" + +msgid "Thu" +msgstr "to" + +msgid "Fri" +msgstr "pe" + +msgid "Sat" +msgstr "la" + +msgid "Sun" +msgstr "su" + +msgid "January" +msgstr "tammikuu" + +msgid "February" +msgstr "helmikuu" + +msgid "March" +msgstr "maaliskuu" + +msgid "April" +msgstr "huhtikuu" + +msgid "May" +msgstr "toukokuu" + +msgid "June" +msgstr "kesäkuu" + +msgid "July" +msgstr "heinäkuu" + +msgid "August" +msgstr "elokuu" + +msgid "September" +msgstr "syyskuu" + +msgid "October" +msgstr "lokakuu" + +msgid "November" +msgstr "marraskuu" + +msgid "December" +msgstr "joulukuu" + +msgid "jan" +msgstr "tam" + +msgid "feb" +msgstr "hel" + +msgid "mar" +msgstr "maa" + +msgid "apr" +msgstr "huh" + +msgid "may" +msgstr "tou" + +msgid "jun" +msgstr "kes" + +msgid "jul" +msgstr "hei" + +msgid "aug" +msgstr "elo" + +msgid "sep" +msgstr "syy" + +msgid "oct" +msgstr "lok" + +msgid "nov" +msgstr "mar" + +msgid "dec" +msgstr "jou" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "tammi" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "helmi" + +msgctxt "abbrev. month" +msgid "March" +msgstr "maalis" + +msgctxt "abbrev. month" +msgid "April" +msgstr "huhti" + +msgctxt "abbrev. month" +msgid "May" +msgstr "touko" + +msgctxt "abbrev. month" +msgid "June" +msgstr "kesä" + +msgctxt "abbrev. month" +msgid "July" +msgstr "heinä" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "elo" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "syys" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "loka" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "marras" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "joulu" + +msgctxt "alt. month" +msgid "January" +msgstr "tammikuuta" + +msgctxt "alt. month" +msgid "February" +msgstr "helmikuuta" + +msgctxt "alt. month" +msgid "March" +msgstr "maaliskuuta" + +msgctxt "alt. month" +msgid "April" +msgstr "huhtikuuta" + +msgctxt "alt. month" +msgid "May" +msgstr "toukokuuta" + +msgctxt "alt. month" +msgid "June" +msgstr "kesäkuuta" + +msgctxt "alt. month" +msgid "July" +msgstr "heinäkuuta" + +msgctxt "alt. month" +msgid "August" +msgstr "elokuuta" + +msgctxt "alt. month" +msgid "September" +msgstr "syyskuuta" + +msgctxt "alt. month" +msgid "October" +msgstr "lokakuuta" + +msgctxt "alt. month" +msgid "November" +msgstr "marraskuuta" + +msgctxt "alt. month" +msgid "December" +msgstr "joulukuuta" + +msgid "This is not a valid IPv6 address." +msgstr "Tämä ei ole kelvollinen IPv6-osoite." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "tai" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d vuosi" +msgstr[1] "%(num)d vuotta" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d kuukausi" +msgstr[1] "%(num)d kuukautta " + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d viikko" +msgstr[1] "%(num)d viikkoa" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d päivä" +msgstr[1] "%(num)d päivää" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tunti" +msgstr[1] "%(num)d tuntia" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuutti" +msgstr[1] "%(num)d minuuttia" + +msgid "Forbidden" +msgstr "Kielletty" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-vahvistus epäonnistui. Pyyntö hylätty." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Näet tämän viestin, koska tämä HTTPS-sivusto vaatii selaintasi lähettämään " +"Referer-otsakkeen, mutta sitä ei vastaanotettu. Otsake vaaditaan " +"turvallisuussyistä, varmistamaan etteivät kolmannet osapuolet ole ottaneet " +"selaintasi haltuun." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Jos olet konfiguroinut selaimesi olemaan lähettämättä Referer-otsaketta, ole " +"hyvä ja kytke otsake takaisin päälle ainakin tälle sivulle, HTTPS-" +"yhteyksille tai saman lähteen (\"same-origin\") pyynnöille." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jos käytät -tagia tai " +"\"Referrer-Policy: no-referrer\" -otsaketta, ole hyvä ja poista ne. CSRF-" +"suojaus vaatii Referer-otsakkeen tehdäkseen tarkan referer-tarkistuksen. Jos " +"vaadit yksityisyyttä, käytä vaihtoehtoja kuten linkittääksesi kolmannen osapuolen sivuille." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Näet tämän viestin, koska tämä sivusto vaatii CSRF-evästeen " +"vastaanottaessaan lomaketietoja. Eväste vaaditaan turvallisuussyistä, " +"varmistamaan etteivät kolmannet osapuolet ole ottaneet selaintasi haltuun." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Jos olet konfiguroinut selaimesi olemaan vastaanottamatta tai lähettämättä " +"evästeitä, ole hyvä ja kytke evästeet takaisin päälle ainakin tälle sivulle " +"tai saman lähteen (\"same-origin\") pyynnöille." + +msgid "More information is available with DEBUG=True." +msgstr "Lisätietoja `DEBUG=True`-konfiguraatioasetuksella." + +msgid "No year specified" +msgstr "Vuosi puuttuu" + +msgid "Date out of range" +msgstr "Päivämäärä ei alueella" + +msgid "No month specified" +msgstr "Kuukausi puuttuu" + +msgid "No day specified" +msgstr "Päivä puuttuu" + +msgid "No week specified" +msgstr "Viikko puuttuu" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s: yhtään kohdetta ei löydy" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s: tulevia kohteita ei löydy, koska %(class_name)s." +"allow_future:n arvo on False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Päivämäärä '%(datestr)s' ei ole muotoa '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Hakua vastaavaa %(verbose_name)s -kohdetta ei löytynyt" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Sivunumero ei ole 'last' (viimeinen) eikä näytä luvulta." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Epäkelpo sivu (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lista on tyhjä, ja '%(class_name)s.allow_empty':n arvo on False." + +msgid "Directory indexes are not allowed here." +msgstr "Hakemistolistauksia ei sallita täällä." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" ei ole olemassa" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Hakemistolistaus: %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Asennus toimi! Onneksi olkoon!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Katso Djangon version %(version)s julkaisutiedot" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Näet tämän viestin, koska asetuksissasi on DEBUG = True etkä ole konfiguroinut yhtään URL-osoitetta." + +msgid "Django Documentation" +msgstr "Django-dokumentaatio" + +msgid "Topics, references, & how-to’s" +msgstr "Aiheet, viittaukset & how-tot" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriaali: kyselyapplikaatio" + +msgid "Get started with Django" +msgstr "Miten päästä alkuun Djangolla" + +msgid "Django Community" +msgstr "Django-yhteisö" + +msgid "Connect, get help, or contribute" +msgstr "Verkostoidu, saa apua tai jatkokehitä" diff --git a/venv/Lib/site-packages/django/conf/locale/fi/__init__.py b/venv/Lib/site-packages/django/conf/locale/fi/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/fi/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fi/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a816212e6960c14919ff6258aaa993b6e4dc0047 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lTBd${d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04Yo~(EtDd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fi/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fi/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89d2c5da6863ad2049b79ea4367edae571c05e42 GIT binary patch literal 803 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 g0<>Z5k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..72bee50a5 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,1336 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bruno Brouard , 2021 +# Simon Charette , 2012 +# Claude Paroz , 2013-2021 +# Claude Paroz , 2011 +# Jannis Leidel , 2011 +# Jean-Baptiste Mora, 2014 +# Larlet David , 2011 +# Marie-Cécile Gohier , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-23 17:19+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabe" + +msgid "Algerian Arabic" +msgstr "Arabe algérien" + +msgid "Asturian" +msgstr "Asturien" + +msgid "Azerbaijani" +msgstr "Azéri" + +msgid "Bulgarian" +msgstr "Bulgare" + +msgid "Belarusian" +msgstr "Biélorusse" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosniaque" + +msgid "Catalan" +msgstr "Catalan" + +msgid "Czech" +msgstr "Tchèque" + +msgid "Welsh" +msgstr "Gallois" + +msgid "Danish" +msgstr "Danois" + +msgid "German" +msgstr "Allemand" + +msgid "Lower Sorbian" +msgstr "Bas-sorabe" + +msgid "Greek" +msgstr "Grec" + +msgid "English" +msgstr "Anglais" + +msgid "Australian English" +msgstr "Anglais australien" + +msgid "British English" +msgstr "Anglais britannique" + +msgid "Esperanto" +msgstr "Espéranto" + +msgid "Spanish" +msgstr "Espagnol" + +msgid "Argentinian Spanish" +msgstr "Espagnol argentin" + +msgid "Colombian Spanish" +msgstr "Espagnol colombien" + +msgid "Mexican Spanish" +msgstr "Espagnol mexicain" + +msgid "Nicaraguan Spanish" +msgstr "Espagnol nicaraguayen" + +msgid "Venezuelan Spanish" +msgstr "Espagnol vénézuélien" + +msgid "Estonian" +msgstr "Estonien" + +msgid "Basque" +msgstr "Basque" + +msgid "Persian" +msgstr "Perse" + +msgid "Finnish" +msgstr "Finlandais" + +msgid "French" +msgstr "Français" + +msgid "Frisian" +msgstr "Frison" + +msgid "Irish" +msgstr "Irlandais" + +msgid "Scottish Gaelic" +msgstr "Gaélique écossais" + +msgid "Galician" +msgstr "Galicien" + +msgid "Hebrew" +msgstr "Hébreu" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croate" + +msgid "Upper Sorbian" +msgstr "Haut-sorabe" + +msgid "Hungarian" +msgstr "Hongrois" + +msgid "Armenian" +msgstr "Arménien" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonésien" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandais" + +msgid "Italian" +msgstr "Italien" + +msgid "Japanese" +msgstr "Japonais" + +msgid "Georgian" +msgstr "Géorgien" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Coréen" + +msgid "Kyrgyz" +msgstr "Kirghiz" + +msgid "Luxembourgish" +msgstr "Luxembourgeois" + +msgid "Lithuanian" +msgstr "Lituanien" + +msgid "Latvian" +msgstr "Letton" + +msgid "Macedonian" +msgstr "Macédonien" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongole" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malais" + +msgid "Burmese" +msgstr "Birman" + +msgid "Norwegian Bokmål" +msgstr "Norvégien bokmål" + +msgid "Nepali" +msgstr "Népalais" + +msgid "Dutch" +msgstr "Hollandais" + +msgid "Norwegian Nynorsk" +msgstr "Norvégien nynorsk" + +msgid "Ossetic" +msgstr "Ossète" + +msgid "Punjabi" +msgstr "Penjabi" + +msgid "Polish" +msgstr "Polonais" + +msgid "Portuguese" +msgstr "Portugais" + +msgid "Brazilian Portuguese" +msgstr "Portugais brésilien" + +msgid "Romanian" +msgstr "Roumain" + +msgid "Russian" +msgstr "Russe" + +msgid "Slovak" +msgstr "Slovaque" + +msgid "Slovenian" +msgstr "Slovène" + +msgid "Albanian" +msgstr "Albanais" + +msgid "Serbian" +msgstr "Serbe" + +msgid "Serbian Latin" +msgstr "Serbe latin" + +msgid "Swedish" +msgstr "Suédois" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamoul" + +msgid "Telugu" +msgstr "Télougou" + +msgid "Tajik" +msgstr "Tadjik" + +msgid "Thai" +msgstr "Thaï" + +msgid "Turkmen" +msgstr "Turkmène" + +msgid "Turkish" +msgstr "Turc" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Oudmourte" + +msgid "Ukrainian" +msgstr "Ukrainien" + +msgid "Urdu" +msgstr "Ourdou" + +msgid "Uzbek" +msgstr "Ouzbek" + +msgid "Vietnamese" +msgstr "Vietnamien" + +msgid "Simplified Chinese" +msgstr "Chinois simplifié" + +msgid "Traditional Chinese" +msgstr "Chinois traditionnel" + +msgid "Messages" +msgstr "Messages" + +msgid "Site Maps" +msgstr "Plans des sites" + +msgid "Static Files" +msgstr "Fichiers statiques" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Ce numéro de page n’est pas un nombre entier" + +msgid "That page number is less than 1" +msgstr "Ce numéro de page est plus petit que 1" + +msgid "That page contains no results" +msgstr "Cette page ne contient aucun résultat" + +msgid "Enter a valid value." +msgstr "Saisissez une valeur valide." + +msgid "Enter a valid URL." +msgstr "Saisissez une URL valide." + +msgid "Enter a valid integer." +msgstr "Saisissez un nombre entier valide." + +msgid "Enter a valid email address." +msgstr "Saisissez une adresse de courriel valide." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas (_) " +"et des traits d’union." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Ce champ ne doit contenir que des caractères Unicode, des nombres, des " +"tirets bas (_) et des traits d’union." + +msgid "Enter a valid IPv4 address." +msgstr "Saisissez une adresse IPv4 valide." + +msgid "Enter a valid IPv6 address." +msgstr "Saisissez une adresse IPv6 valide." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Saisissez une adresse IPv4 ou IPv6 valide." + +msgid "Enter only digits separated by commas." +msgstr "Saisissez uniquement des chiffres séparés par des virgules." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Assurez-vous que cette valeur est %(limit_value)s (actuellement " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Assurez-vous que cette valeur est inférieure ou égale à %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Assurez-vous que cette valeur est supérieure ou égale à %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assurez-vous que cette valeur comporte au moins %(limit_value)d caractère " +"(actuellement %(show_value)d)." +msgstr[1] "" +"Assurez-vous que cette valeur comporte au moins %(limit_value)d caractères " +"(actuellement %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assurez-vous que cette valeur comporte au plus %(limit_value)d caractère " +"(actuellement %(show_value)d)." +msgstr[1] "" +"Assurez-vous que cette valeur comporte au plus %(limit_value)d caractères " +"(actuellement %(show_value)d)." + +msgid "Enter a number." +msgstr "Saisissez un nombre." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Assurez-vous qu'il n'y a pas plus de %(max)s chiffre au total." +msgstr[1] "Assurez-vous qu’il n’y a pas plus de %(max)s chiffres au total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Assurez-vous qu'il n'y a pas plus de %(max)s chiffre après la virgule." +msgstr[1] "" +"Assurez-vous qu’il n’y a pas plus de %(max)s chiffres après la virgule." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Assurez-vous qu'il n'y a pas plus de %(max)s chiffre avant la virgule." +msgstr[1] "" +"Assurez-vous qu’il n’y a pas plus de %(max)s chiffres avant la virgule." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"L'extension de fichier « %(extension)s » n’est pas autorisée. Les extensions " +"autorisées sont : %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Le caractère nul n’est pas autorisé." + +msgid "and" +msgstr "et" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Un objet %(model_name)s avec ces champs %(field_labels)s existe déjà." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "La valeur « %(value)r » n’est pas un choix valide." + +msgid "This field cannot be null." +msgstr "Ce champ ne peut pas contenir la valeur nulle." + +msgid "This field cannot be blank." +msgstr "Ce champ ne peut pas être vide." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Un objet %(model_name)s avec ce champ %(field_label)s existe déjà." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s doit être unique pour la partie %(lookup_type)s de " +"%(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Champ de type : %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "La valeur « %(value)s » doit être soit True (vrai), soit False (faux)." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" +"La valeur « %(value)s » doit être True (vrai), False (faux) ou None (vide)." + +msgid "Boolean (Either True or False)" +msgstr "Booléen (soit True (vrai) ou False (faux))" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Chaîne de caractères (jusqu'à %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Des entiers séparés par une virgule" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Le format de date de la valeur « %(value)s » n’est pas valide. Le format " +"correct est AAAA-MM-JJ." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Le format de date de la valeur « %(value)s » est correct (AAAA-MM-JJ), mais " +"la date n’est pas valide." + +msgid "Date (without time)" +msgstr "Date (sans l’heure)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Le format de la valeur « %(value)s » n’est pas valide. Le format correct est " +"AAAA-MM-JJ HH:MM[:ss[.uuuuuu]][FH]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Le format de date de la valeur « %(value)s » est correct (AAAA-MM-JJ HH:MM[:" +"ss[.uuuuuu]][FH]), mais la date ou l’heure n’est pas valide." + +msgid "Date (with time)" +msgstr "Date (avec l’heure)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "La valeur « %(value)s » doit être un nombre décimal." + +msgid "Decimal number" +msgstr "Nombre décimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Le format de la valeur « %(value)s » n’est pas valide. Le format correct est " +"[JJ] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Durée" + +msgid "Email address" +msgstr "Adresse électronique" + +msgid "File path" +msgstr "Chemin vers le fichier" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "La valeur « %(value)s » doit être un nombre à virgule flottante." + +msgid "Floating point number" +msgstr "Nombre à virgule flottante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "La valeur « %(value)s » doit être un nombre entier." + +msgid "Integer" +msgstr "Entier" + +msgid "Big (8 byte) integer" +msgstr "Grand entier (8 octets)" + +msgid "Small integer" +msgstr "Petit nombre entier" + +msgid "IPv4 address" +msgstr "Adresse IPv4" + +msgid "IP address" +msgstr "Adresse IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" +"La valeur « %(value)s » doit être None (vide), True (vrai) ou False (faux)." + +msgid "Boolean (Either True, False or None)" +msgstr "Booléen (soit None (vide), True (vrai) ou False (faux))" + +msgid "Positive big integer" +msgstr "Grand nombre entier positif" + +msgid "Positive integer" +msgstr "Nombre entier positif" + +msgid "Positive small integer" +msgstr "Petit nombre entier positif" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (jusqu'à %(max_length)s car.)" + +msgid "Text" +msgstr "Texte" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Le format de la valeur « %(value)s » n’est pas valide. Le format correct est " +"HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Le format de la valeur « %(value)s » est correct (HH:MM[:ss[.uuuuuu]]), mais " +"l’heure n’est pas valide." + +msgid "Time" +msgstr "Heure" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Données binaires brutes" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "La valeur « %(value)s » n’est pas un UUID valide." + +msgid "Universally unique identifier" +msgstr "Identifiant unique universel" + +msgid "File" +msgstr "Fichier" + +msgid "Image" +msgstr "Image" + +msgid "A JSON object" +msgstr "Un objet JSON" + +msgid "Value must be valid JSON." +msgstr "La valeur doit respecter la syntaxe JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "L’instance %(model)s avec %(value)r dans %(field)s n’existe pas." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clé étrangère (type défini par le champ lié)" + +msgid "One-to-one relationship" +msgstr "Relation un à un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relation %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relations %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relation plusieurs à plusieurs" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ce champ est obligatoire." + +msgid "Enter a whole number." +msgstr "Saisissez un nombre entier." + +msgid "Enter a valid date." +msgstr "Saisissez une date valide." + +msgid "Enter a valid time." +msgstr "Saisissez une heure valide." + +msgid "Enter a valid date/time." +msgstr "Saisissez une date et une heure valides." + +msgid "Enter a valid duration." +msgstr "Saisissez une durée valide." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Le nombre de jours doit être entre {min_days} et {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Aucun fichier n’a été soumis. Vérifiez le type d’encodage du formulaire." + +msgid "No file was submitted." +msgstr "Aucun fichier n’a été soumis." + +msgid "The submitted file is empty." +msgstr "Le fichier soumis est vide." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Assurez-vous que ce nom de fichier comporte au plus %(max)d caractère " +"(actuellement %(length)d)." +msgstr[1] "" +"Assurez-vous que ce nom de fichier comporte au plus %(max)d caractères " +"(actuellement %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Envoyez un fichier ou cochez la case d’effacement, mais pas les deux." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Téléversez une image valide. Le fichier que vous avez transféré n’est pas " +"une image ou bien est corrompu." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Sélectionnez un choix valide. %(value)s n’en fait pas partie." + +msgid "Enter a list of values." +msgstr "Saisissez une liste de valeurs." + +msgid "Enter a complete value." +msgstr "Saisissez une valeur complète." + +msgid "Enter a valid UUID." +msgstr "Saisissez un UUID valide." + +msgid "Enter a valid JSON." +msgstr "Saisissez du contenu JSON valide." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr " :" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(champ masqué %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Des données du formulaire ManagementForm sont manquantes ou ont été " +"manipulées. Champs manquants : %(field_names)s. Vous pourriez créer un " +"rapport de bogue si le problème persiste." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Veuillez soumettre au plus %d formulaire." +msgstr[1] "Veuillez soumettre au plus %d formulaires." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Veuillez soumettre au moins %d formulaire." +msgstr[1] "Veuillez soumettre au moins %d formulaires." + +msgid "Order" +msgstr "Ordre" + +msgid "Delete" +msgstr "Supprimer" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Corrigez les données en double dans %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Corrigez les données en double dans %(field)s qui doit contenir des valeurs " +"uniques." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Corrigez les données en double dans %(field_name)s qui doit contenir des " +"valeurs uniques pour la partie %(lookup)s de %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Corrigez les valeurs en double ci-dessous." + +msgid "The inline value did not match the parent instance." +msgstr "La valeur en ligne ne correspond pas à l’instance parente." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Sélectionnez un choix valide. Ce choix ne fait pas partie de ceux " +"disponibles." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "« %(pk)s » n’est pas une valeur correcte." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"La valeur %(datetime)s n’a pas pu être interprétée dans le fuseau horaire " +"%(current_timezone)s ; elle est peut-être ambigüe ou elle n’existe pas." + +msgid "Clear" +msgstr "Effacer" + +msgid "Currently" +msgstr "Actuellement" + +msgid "Change" +msgstr "Modifier" + +msgid "Unknown" +msgstr "Inconnu" + +msgid "Yes" +msgstr "Oui" + +msgid "No" +msgstr "Non" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "oui,non,peut-être" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d octet" +msgstr[1] "%(size)d octets" + +#, python-format +msgid "%s KB" +msgstr "%s Kio" + +#, python-format +msgid "%s MB" +msgstr "%s Mio" + +#, python-format +msgid "%s GB" +msgstr "%s Gio" + +#, python-format +msgid "%s TB" +msgstr "%s Tio" + +#, python-format +msgid "%s PB" +msgstr "%s Pio" + +msgid "p.m." +msgstr "après-midi" + +msgid "a.m." +msgstr "matin" + +msgid "PM" +msgstr "Après-midi" + +msgid "AM" +msgstr "Matin" + +msgid "midnight" +msgstr "minuit" + +msgid "noon" +msgstr "midi" + +msgid "Monday" +msgstr "lundi" + +msgid "Tuesday" +msgstr "mardi" + +msgid "Wednesday" +msgstr "mercredi" + +msgid "Thursday" +msgstr "jeudi" + +msgid "Friday" +msgstr "vendredi" + +msgid "Saturday" +msgstr "samedi" + +msgid "Sunday" +msgstr "dimanche" + +msgid "Mon" +msgstr "lun" + +msgid "Tue" +msgstr "mar" + +msgid "Wed" +msgstr "mer" + +msgid "Thu" +msgstr "jeu" + +msgid "Fri" +msgstr "ven" + +msgid "Sat" +msgstr "sam" + +msgid "Sun" +msgstr "dim" + +msgid "January" +msgstr "janvier" + +msgid "February" +msgstr "février" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "avril" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juin" + +msgid "July" +msgstr "juillet" + +msgid "August" +msgstr "août" + +msgid "September" +msgstr "septembre" + +msgid "October" +msgstr "octobre" + +msgid "November" +msgstr "novembre" + +msgid "December" +msgstr "décembre" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "fév" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "avr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jui" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aoû" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "déc" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "fév." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "avr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juin" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juil." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "août" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "déc." + +msgctxt "alt. month" +msgid "January" +msgstr "Janvier" + +msgctxt "alt. month" +msgid "February" +msgstr "Février" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "Avril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Juin" + +msgctxt "alt. month" +msgid "July" +msgstr "Juillet" + +msgctxt "alt. month" +msgid "August" +msgstr "Août" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octobre" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Décembre" + +msgid "This is not a valid IPv6 address." +msgstr "Ceci n’est pas une adresse IPv6 valide." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ou" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d année" +msgstr[1] "%(num)d années" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mois" +msgstr[1] "%(num)d mois" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semaine" +msgstr[1] "%(num)d semaines" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d jour" +msgstr[1] "%(num)d jours" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d heure" +msgstr[1] "%(num)d heures" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minute" +msgstr[1] "%(num)d minutes" + +msgid "Forbidden" +msgstr "Interdit" + +msgid "CSRF verification failed. Request aborted." +msgstr "La vérification CSRF a échoué. La requête a été interrompue." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Vous voyez ce message parce que ce site HTTPS exige que le navigateur web " +"envoie un en-tête « Referer », ce qu’il n'a pas fait. Cet en-tête est exigé " +"pour des raisons de sécurité, afin de s’assurer que le navigateur n’ait pas " +"été piraté par un intervenant externe." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Si vous avez désactivé l’envoi des en-têtes « Referer » par votre " +"navigateur, veuillez les réactiver, au moins pour ce site ou pour les " +"connexions HTTPS, ou encore pour les requêtes de même origine (« same-" +"origin »)." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Si vous utilisez la balise " +"ou que vous incluez l’en-tête « Referrer-Policy: no-referrer », il est " +"préférable de les enlever. La protection CSRF exige que l’en-tête " +"``Referer`` effectue un contrôle de référant strict. Si vous vous souciez de " +"la confidentialité, utilisez des alternatives comme " +"pour les liens vers des sites tiers." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Vous voyez ce message parce que ce site exige la présence d’un cookie CSRF " +"lors de l’envoi de formulaires. Ce cookie est nécessaire pour des raisons de " +"sécurité, afin de s’assurer que le navigateur n’ait pas été piraté par un " +"intervenant externe." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Si vous avez désactivé l’envoi des cookies par votre navigateur, veuillez " +"les réactiver au moins pour ce site ou pour les requêtes de même origine (« " +"same-origin »)." + +msgid "More information is available with DEBUG=True." +msgstr "" +"Des informations plus détaillées sont affichées lorsque la variable DEBUG " +"vaut True." + +msgid "No year specified" +msgstr "Aucune année indiquée" + +msgid "Date out of range" +msgstr "Date hors limites" + +msgid "No month specified" +msgstr "Aucun mois indiqué" + +msgid "No day specified" +msgstr "Aucun jour indiqué" + +msgid "No week specified" +msgstr "Aucune semaine indiquée" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Pas de %(verbose_name_plural)s disponible" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Pas de %(verbose_name_plural)s disponible dans le futur car %(class_name)s." +"allow_future est faux (False)." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Le format « %(format)s » appliqué à la chaîne date « %(datestr)s » n’est pas " +"valide" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Aucun objet %(verbose_name)s trouvé en réponse à la requête" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"La page n’est pas la « dernière », elle ne peut pas non plus être convertie " +"en nombre entier." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Page non valide (%(page_number)s) : %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Liste vide et « %(class_name)s.allow_empty » est faux (False)." + +msgid "Directory indexes are not allowed here." +msgstr "Il n’est pas autorisé d’afficher le contenu de ce répertoire." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "« %(path)s » n’existe pas" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "L’installation s’est déroulée avec succès. Félicitations !" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Afficher les notes de publication de " +"Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Vous voyez cette page parce que votre fichier de réglages contient DEBUG=True et que vous n’avez pas encore " +"configuré d’URL." + +msgid "Django Documentation" +msgstr "Documentation de Django" + +msgid "Topics, references, & how-to’s" +msgstr "Thématiques, références et guides pratiques" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriel : une application de sondage" + +msgid "Get started with Django" +msgstr "Premiers pas avec Django" + +msgid "Django Community" +msgstr "Communauté Django" + +msgid "Connect, get help, or contribute" +msgstr "Se connecter, obtenir de l’aide ou contribuer" diff --git a/venv/Lib/site-packages/django/conf/locale/fr/__init__.py b/venv/Lib/site-packages/django/conf/locale/fr/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/fr/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fr/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e31bdcc509564201883fb69a3dc69255c64dba0 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lT9JNyd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04jbo+5i9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fr/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fr/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85c69c03611e1945f3bcb7aa31b375c1bb19efd5 GIT binary patch literal 745 zcmZXSO^=#D7{@_SQJ3AiX?y6&3kQ>~+|8ybT|h_|FubH;LQ0T9gB95@xQTq4rni2L zevBqP^|VQ^z3izox>{^!!t?Tbp8qowGC9w8DZGAt{4wL36!nuN_0_=1Tl^tnAO$E$ z0~$6!12TYtEMQ?1G+_(0U>md-6y(0pfWy9neFt_y7xq98o`EySJJj&JYAy%rz^@o> zoK~G(JRl*ngE%J*CT_qr>`3i_#wQQiiW8tHWTN07qb-R>LN?m7U9=sxs{WyKAZTO3 z7zDZNGEZSq?X=i1XgpMR|YdZm?;E?9>0|gQi1&0#_oW|Z+d+ga6XLdG@ zBP1$1I=GesItmIzM@NwO7ibPaO+!b^_w8=tB$ogytv{Zbw{O1h&71ez#fe)1o~Q6W zkN0Q1SMch)@Pp@fa1Q(fd)=K3WAF)Z2YeR%tQ>y@K8f-7An)-D z_%e7Kd>Wj%CkW=j%iz7>4R9I!2z(p-24r1-f|tMx6NQeKzz;E=2L-g<0%tM)8%}ut zSMCdfN5Dn!IdBVPof>34pO*7qf~@;HkoElpa-6?{*TBEP7r-m`2f+sT7Ko|fb8r>> zqU3Fm?Itf2Tmd;g3GRTOfSgj!9Y2tp@5leyA3vOjg;w-9}Of~lTXIhCDmZVMbZWDOD)?TIV|FDcdcs6Dl(s|M$T~z z#v;20pU3&@&q=>Pd?Lh?~~Ma0-&CIdgJ22C!BydbD842x=U z9<@HP1RE!JGUYfw+XHPybQGORLM&Sq2rOKKHMLl6Uwz4G$*7PGEjoTX^@wDzBbT8nRy(jaH;eQ+s&15ZfwVU#nOe#Wyv*YuBH5u+y=#?%BIc` zM7V+iOdDhd`7m9Wou}gO!jz#G7ieaBzH+)NBvRpq_&a(+3-K$7^FkTCgY#6TXa{UR zlmbPL`YadB!H)^|gK`*iJCJ!l2nDx;(<^y5IBAS-km2&2HR+W?$(>v|Ypzf=wzN9c z60(o06Iv@{RJ%)jelER6Xq$a#`{={MIW&y4Xcz;Y<$jTA#hKgSgce<+@5|2&m5J;Nce-=nU=&2h zC`@D;0{g0umMjUjPMV@~oa1Rp?eFJ?dGGj7Ppf_$_)#j58ZBkJi%f7JJ*6Y+bFSeo zU!dW^xBHx^qh)R~P$<$qrq=}82kgrT4}OSSBb_%?JE#)2Jj{7Cn)KAOWN}IOn7U#( bM7vh#P^{e0@lRu(Nc*@joNak*ts49T_}r7e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..172f28356 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,1218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Western Frisian (http://www.transifex.com/django/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "" + +msgid "Catalan" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Welsh" +msgstr "" + +msgid "Danish" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "English" +msgstr "" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "" + +msgid "Argentinian Spanish" +msgstr "" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Basque" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Slovak" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Jou in falide wearde." + +msgid "Enter a valid URL." +msgstr "Jou in falide URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Jou in falide IPv4-adres." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Jou allinnich sifers, skieden troch komma's." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Jou in nûmer." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Dit fjild kin net leech wêze." + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s mei dit %(field_label)s bestiet al." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Dit fjild is fereaske." + +msgid "Enter a whole number." +msgstr "Jou in folslein nûmer." + +msgid "Enter a valid date." +msgstr "Jou in falide datum." + +msgid "Enter a valid time." +msgstr "Jou in falide tiid." + +msgid "Enter a valid date/time." +msgstr "Jou in falide datum.tiid." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Der is gjin bestân yntsjinne. Kontrolearje it kodearringstype op it " +"formulier." + +msgid "No file was submitted." +msgstr "Der is gjin bestân yntsjinne." + +msgid "The submitted file is empty." +msgstr "It yntsjinne bestân is leech." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Laad in falide ôfbylding op. It bestân dy't jo opladen hawwe wie net in " +"ôfbylding of in skansearre ôfbylding." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selektearje in falide kar. %(value)s is net ien fan de beskikbere karren." + +msgid "Enter a list of values." +msgstr "Jou in list mei weardes." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Oarder" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Selektearje in falide kar. Dizze kar is net ien fan de beskikbere karren." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "" + +#, python-format +msgid "%s MB" +msgstr "" + +#, python-format +msgid "%s GB" +msgstr "" + +#, python-format +msgid "%s TB" +msgstr "" + +#, python-format +msgid "%s PB" +msgstr "" + +msgid "p.m." +msgstr "" + +msgid "a.m." +msgstr "" + +msgid "PM" +msgstr "" + +msgid "AM" +msgstr "" + +msgid "midnight" +msgstr "" + +msgid "noon" +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgid "jan" +msgstr "" + +msgid "feb" +msgstr "" + +msgid "mar" +msgstr "" + +msgid "apr" +msgstr "" + +msgid "may" +msgstr "" + +msgid "jun" +msgstr "" + +msgid "jul" +msgstr "" + +msgid "aug" +msgstr "" + +msgid "sep" +msgstr "" + +msgid "oct" +msgstr "" + +msgid "nov" +msgstr "" + +msgid "dec" +msgstr "" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +msgctxt "alt. month" +msgid "January" +msgstr "" + +msgctxt "alt. month" +msgid "February" +msgstr "" + +msgctxt "alt. month" +msgid "March" +msgstr "" + +msgctxt "alt. month" +msgid "April" +msgstr "" + +msgctxt "alt. month" +msgid "May" +msgstr "" + +msgctxt "alt. month" +msgid "June" +msgstr "" + +msgctxt "alt. month" +msgid "July" +msgstr "" + +msgctxt "alt. month" +msgid "August" +msgstr "" + +msgctxt "alt. month" +msgid "September" +msgstr "" + +msgctxt "alt. month" +msgid "October" +msgstr "" + +msgctxt "alt. month" +msgid "November" +msgstr "" + +msgctxt "alt. month" +msgid "December" +msgstr "" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/fy/__init__.py b/venv/Lib/site-packages/django/conf/locale/fy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/fy/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fy/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96e05da5b8b6eb5030b4b4f2f4e6915e14e7424f GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lTBUw`d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04r=X;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fy/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/fy/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eeb8e1300a6c1d25e4bdfc646190b08f7998eebf GIT binary patch literal 194 zcmd1j<>g`kf;Vw@lO{1SFgylvkO3o*;{e3PEI=ZKA(%mv(QhR~5l9$8{7QAUiU}=F zEh>%)DlINfjB&|NF3nBND=Cg~&n)pMO^R{LEGjP14JgXbN=+__DND^Oi}A@!iYd-4 zN!2Y#OwLYBPc4o~$x6&i&(}}R&r8$K$xlwqN!3rQ)KAMV%1taO)+?yI#bJ}1pHiBW OY6r5u80cIE76t%dk2OF5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/fy/formats.py b/venv/Lib/site-packages/django/conf/locale/fy/formats.py new file mode 100644 index 000000000..3825be444 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/fy/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +# DATE_FORMAT = +# TIME_FORMAT = +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +# MONTH_DAY_FORMAT = +# SHORT_DATE_FORMAT = +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c2a8a88d70f7cef96f129fd807ff954b33f53005 GIT binary patch literal 14025 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

    q{f?Td6G)U5w;j+B=IYFP#m!XYguiCZ8%a? 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 Q2jR5dF}i51R)kdZKb^%m;s5{u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..2b1b5289e --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,1293 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +# John Moylan , 2013 +# John Stafford , 2013 +# Seán de Búrca , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2011-2012,2015 +# Séamus Ó Cúile , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Afrikaans" +msgstr "Afracáinis" + +msgid "Arabic" +msgstr "Araibis" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Astúiris" + +msgid "Azerbaijani" +msgstr "Asarbaiseáinis" + +msgid "Bulgarian" +msgstr "Bulgáiris" + +msgid "Belarusian" +msgstr "Bealarúisis" + +msgid "Bengali" +msgstr "Beangáilis" + +msgid "Breton" +msgstr "Briotánach" + +msgid "Bosnian" +msgstr "Boisnis" + +msgid "Catalan" +msgstr "Catalóinis" + +msgid "Czech" +msgstr "Seicis" + +msgid "Welsh" +msgstr "Breatnais" + +msgid "Danish" +msgstr "Danmhairgis " + +msgid "German" +msgstr "Gearmáinis" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Gréigis" + +msgid "English" +msgstr "Béarla" + +msgid "Australian English" +msgstr "Béarla Astrálach" + +msgid "British English" +msgstr "Béarla na Breataine" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spáinnis" + +msgid "Argentinian Spanish" +msgstr "Spáinnis na hAirgintíne" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Spáinnis Mheicsiceo " + +msgid "Nicaraguan Spanish" +msgstr "Spáinnis Nicearagua" + +msgid "Venezuelan Spanish" +msgstr "Spáinnis Veiniséalach" + +msgid "Estonian" +msgstr "Eastóinis" + +msgid "Basque" +msgstr "Bascais" + +msgid "Persian" +msgstr "Peirsis" + +msgid "Finnish" +msgstr "Fionlainnis" + +msgid "French" +msgstr "Fraincis" + +msgid "Frisian" +msgstr "Freaslainnis" + +msgid "Irish" +msgstr "Gaeilge" + +msgid "Scottish Gaelic" +msgstr "Gaeilge na hAlban" + +msgid "Galician" +msgstr "Gailísis" + +msgid "Hebrew" +msgstr "Eabhrais" + +msgid "Hindi" +msgstr "Hiondúis" + +msgid "Croatian" +msgstr "Cróitis" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Ungáiris" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indinéisis" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Íoslainnis" + +msgid "Italian" +msgstr "Iodáilis" + +msgid "Japanese" +msgstr "Seapáinis" + +msgid "Georgian" +msgstr "Seoirsis" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Casaicis" + +msgid "Khmer" +msgstr "Ciméiris" + +msgid "Kannada" +msgstr "Cannadais" + +msgid "Korean" +msgstr "Cóiréis" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Lucsamburgach" + +msgid "Lithuanian" +msgstr "Liotuáinis" + +msgid "Latvian" +msgstr "Laitvis" + +msgid "Macedonian" +msgstr "Macadóinis" + +msgid "Malayalam" +msgstr "Mailéalaimis" + +msgid "Mongolian" +msgstr "Mongóilis" + +msgid "Marathi" +msgstr "Maraitis" + +msgid "Burmese" +msgstr "Burmais" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Neipeailis" + +msgid "Dutch" +msgstr "Ollainnis" + +msgid "Norwegian Nynorsk" +msgstr "Ioruais Nynorsk" + +msgid "Ossetic" +msgstr "Oiséitis" + +msgid "Punjabi" +msgstr "Puinseáibis" + +msgid "Polish" +msgstr "Polainnis" + +msgid "Portuguese" +msgstr "Portaingéilis" + +msgid "Brazilian Portuguese" +msgstr "Portaingéilis na Brasaíle" + +msgid "Romanian" +msgstr "Rómáinis" + +msgid "Russian" +msgstr "Rúisis" + +msgid "Slovak" +msgstr "Slóvaicis" + +msgid "Slovenian" +msgstr "Slóivéinis" + +msgid "Albanian" +msgstr "Albáinis" + +msgid "Serbian" +msgstr "Seirbis" + +msgid "Serbian Latin" +msgstr "Seirbis (Laidineach)" + +msgid "Swedish" +msgstr "Sualainnis" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Tamailis" + +msgid "Telugu" +msgstr "Teileagúis" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Téalainnis" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Tuircis" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Úcráinis" + +msgid "Urdu" +msgstr "Urdais" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vítneamais" + +msgid "Simplified Chinese" +msgstr "Sínis Simplithe" + +msgid "Traditional Chinese" +msgstr "Sínis Traidisiúnta" + +msgid "Messages" +msgstr "Teachtaireachtaí" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "Comhaid Statach" + +msgid "Syndication" +msgstr "Sindeacáitiú" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Iontráil luach bailí" + +msgid "Enter a valid URL." +msgstr "Iontráil URL bailí." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Iontráil seoladh IPv4 bailí." + +msgid "Enter a valid IPv6 address." +msgstr "Cuir seoladh bailí IPv6 isteach." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Cuir seoladh bailí IPv4 nó IPv6 isteach." + +msgid "Enter only digits separated by commas." +msgstr "Ná hiontráil ach digití atá deighilte le camóga." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Cinntigh go bhfuil an luach seo %(limit_value)s (tá sé %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Cinntigh go bhfuil an luach seo níos lú ná nó cothrom le %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Cinntigh go bhfuil an luach seo níos mó ná nó cothrom le %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Enter a number." +msgstr "Iontráil uimhir." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "agus" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ní cheadaítear luach nialasach sa réimse seo." + +msgid "This field cannot be blank." +msgstr "Ní cheadaítear luach nialasach sa réimse seo." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Tá %(model_name)s leis an %(field_label)s seo ann cheana." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Réimse de Cineál: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boole" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Teaghrán (suas go %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Slánuimhireacha camóg-scartha" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dáta (gan am)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dáta (le am)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Uimhir deachúlach" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Fad" + +msgid "Email address" +msgstr "R-phost" + +msgid "File path" +msgstr "Conair comhaid" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Snámhphointe" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Slánuimhir" + +msgid "Big (8 byte) integer" +msgstr "Mór (8 byte) slánuimhi" + +msgid "IPv4 address" +msgstr "Seoladh IPv4" + +msgid "IP address" +msgstr "Seoladh IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boole (Fíor, Bréagach nó Dada)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Slánuimhir dearfach" + +msgid "Positive small integer" +msgstr "Slánuimhir beag dearfach" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (suas go %(max_length)s)" + +msgid "Small integer" +msgstr "Slánuimhir beag" + +msgid "Text" +msgstr "Téacs" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Am" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Comhaid" + +msgid "Image" +msgstr "Íomhá" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Eochair Eachtracha (cineál a chinnfear de réir réimse a bhaineann)" + +msgid "One-to-one relationship" +msgstr "Duine-le-duine caidreamh" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Go leor le go leor caidreamh" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Tá an réimse seo riachtanach." + +msgid "Enter a whole number." +msgstr "Iontráil slánuimhir." + +msgid "Enter a valid date." +msgstr "Iontráil dáta bailí." + +msgid "Enter a valid time." +msgstr "Iontráil am bailí." + +msgid "Enter a valid date/time." +msgstr "Iontráil dáta/am bailí." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Níor seoladh comhad. Deimhnigh cineál an ionchódaithe ar an bhfoirm." + +msgid "No file was submitted." +msgstr "Níor seoladh aon chomhad." + +msgid "The submitted file is empty." +msgstr "Tá an comhad a seoladh folamh." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Cuir ceachtar isteach comhad nó an ticbhosca soiléir, ní féidir an dá " +"sheiceáil." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Uasluchtaigh íomhá bhailí. Níorbh íomhá é an comhad a d'uasluchtaigh tú, nó " +"b'íomhá thruaillithe é." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Déan rogha bhailí. Ní ceann de na roghanna é %(value)s." + +msgid "Enter a list of values." +msgstr "Cuir liosta de luachanna isteach." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Order" +msgstr "Ord" + +msgid "Delete" +msgstr "Scrios" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Le do thoil ceartaigh an sonra dúbail le %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field)s, chaithfidh a " +"bheith uathúil." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field_name)s ní mór a " +"bheith uaithúil le haghaidh an %(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Le do thoil ceartaigh na luachanna dúbail thíos." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Déan rogha bhailí. Ní ceann de na roghanna é do roghasa." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Glan" + +msgid "Currently" +msgstr "Faoi láthair" + +msgid "Change" +msgstr "Athraigh" + +msgid "Unknown" +msgstr "Anaithnid" + +msgid "Yes" +msgstr "Tá" + +msgid "No" +msgstr "Níl" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "tá,níl,b'fhéidir" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bheart" +msgstr[1] "%(size)d bheart" +msgstr[2] "%(size)d bheart" +msgstr[3] "%(size)d mbeart" +msgstr[4] "%(size)d beart" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "i.n." + +msgid "a.m." +msgstr "r.n." + +msgid "PM" +msgstr "IN" + +msgid "AM" +msgstr "RN" + +msgid "midnight" +msgstr "meán oíche" + +msgid "noon" +msgstr "nóin" + +msgid "Monday" +msgstr "Dé Luain" + +msgid "Tuesday" +msgstr "Dé Máirt" + +msgid "Wednesday" +msgstr "Dé Céadaoin" + +msgid "Thursday" +msgstr "Déardaoin" + +msgid "Friday" +msgstr "Dé hAoine" + +msgid "Saturday" +msgstr "Dé Sathairn" + +msgid "Sunday" +msgstr "Dé Domhnaigh" + +msgid "Mon" +msgstr "L" + +msgid "Tue" +msgstr "M" + +msgid "Wed" +msgstr "C" + +msgid "Thu" +msgstr "D" + +msgid "Fri" +msgstr "A" + +msgid "Sat" +msgstr "S" + +msgid "Sun" +msgstr "D" + +msgid "January" +msgstr "Eanáir" + +msgid "February" +msgstr "Feabhra" + +msgid "March" +msgstr "Márta" + +msgid "April" +msgstr "Aibreán" + +msgid "May" +msgstr "Bealtaine" + +msgid "June" +msgstr "Meitheamh" + +msgid "July" +msgstr "Iúil" + +msgid "August" +msgstr "Lúnasa" + +msgid "September" +msgstr "Meán Fómhair" + +msgid "October" +msgstr "Deireadh Fómhair" + +msgid "November" +msgstr "Samhain" + +msgid "December" +msgstr "Nollaig" + +msgid "jan" +msgstr "ean" + +msgid "feb" +msgstr "feabh" + +msgid "mar" +msgstr "márta" + +msgid "apr" +msgstr "aib" + +msgid "may" +msgstr "beal" + +msgid "jun" +msgstr "meith" + +msgid "jul" +msgstr "iúil" + +msgid "aug" +msgstr "lún" + +msgid "sep" +msgstr "mfómh" + +msgid "oct" +msgstr "dfómh" + +msgid "nov" +msgstr "samh" + +msgid "dec" +msgstr "noll" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ean." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feabh." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Márta" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aib." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Beal." + +msgctxt "abbrev. month" +msgid "June" +msgstr "Meith." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Iúil" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Lún." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "MFómh." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "DFómh." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Samh." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Noll." + +msgctxt "alt. month" +msgid "January" +msgstr "Mí Eanáir" + +msgctxt "alt. month" +msgid "February" +msgstr "Mí Feabhra" + +msgctxt "alt. month" +msgid "March" +msgstr "Mí na Márta" + +msgctxt "alt. month" +msgid "April" +msgstr "Mí Aibreáin" + +msgctxt "alt. month" +msgid "May" +msgstr "Mí na Bealtaine" + +msgctxt "alt. month" +msgid "June" +msgstr "Mí an Mheithimh" + +msgctxt "alt. month" +msgid "July" +msgstr "Mí Iúil" + +msgctxt "alt. month" +msgid "August" +msgstr "Mí Lúnasa" + +msgctxt "alt. month" +msgid "September" +msgstr "Mí Mheán Fómhair" + +msgctxt "alt. month" +msgid "October" +msgstr "Mí Dheireadh Fómhair" + +msgctxt "alt. month" +msgid "November" +msgstr "Mí na Samhna" + +msgctxt "alt. month" +msgid "December" +msgstr "Mí na Nollag" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "nó" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d nóiméad" +msgstr[1] "%d nóiméad" +msgstr[2] "%d nóiméad" +msgstr[3] "%d nóiméad" +msgstr[4] "%d nóiméad" + +msgid "Forbidden" +msgstr "Toirmiscthe" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Tá tuilleadh eolais ar fáil le DEBUG=True." + +msgid "No year specified" +msgstr "Bliain gan sonrú" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Mí gan sonrú" + +msgid "No day specified" +msgstr "Lá gan sonrú" + +msgid "No week specified" +msgstr "Seachtain gan sonrú" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Gan %(verbose_name_plural)s ar fáil" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Níl %(verbose_name_plural)s sa todhchaí ar fáil mar tá %(class_name)s." +"allow_future Bréagach." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Níl bhfuarthas %(verbose_name)s le hadhaigh an iarratas" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Leathanach neamhbhailí (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Níl innéacsanna chomhadlann cheadaítear anseo." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innéacs de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "Tosaigh le Django" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ga/__init__.py b/venv/Lib/site-packages/django/conf/locale/ga/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ga/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ga/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f77fce099ff7ac2d45e123211c7e113e6dab7ea GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`ldZK=Od}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04QHH$^ZZW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ga/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ga/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54877fdf93b957952d176ef4bfdc944437520bec GIT binary patch literal 357 zcmYjN!D_-l6x=n@+FGIZ+=Ex4n!A+J#i$XCkz_q&St@IGl~~P6HW8XXYClQnsn>pi zr>=$84$Sao9s`dj>-8(3@%8+%crO9)c{2Y2wRzH1cUm|gfI|X#iIliO3~myWmr0pd z0?@iB%IoH!85V}qjSEB1r@(E72iQ5n`$?-pYBs|C`M~pCgh>sL+&^>UdK2u-Z4~~l z8-e5bSSRO3!|wM+E*j5+{uKELdp^0vjyDU?#6D+lAT{)@KXMekE}bcnD(dG-F>1>w z--;wtbQot&zMz9RRatwQ%C(3xx);fwj^hPYaVFY37QL{QP?WD(vXWLLlclwh5!(oB j#jK@Fw=7eg-Rq(Hu$4UDh{w~r)U_7VG@)r|URL2ZVlZG3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ga/formats.py b/venv/Lib/site-packages/django/conf/locale/ga/formats.py new file mode 100644 index 000000000..7cde1a568 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ga/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "H:i" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f177bbd99009c588c09490bfbdf2bcb06f4364dc GIT binary patch literal 30752 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 T 2 && n < 20) ? 2 : 3;\n" + +msgid "Afrikaans" +msgstr "Afraganais" + +msgid "Arabic" +msgstr "Arabais" + +msgid "Algerian Arabic" +msgstr "Arabais Aildireach" + +msgid "Asturian" +msgstr "Astùrais" + +msgid "Azerbaijani" +msgstr "Asarbaideànais" + +msgid "Bulgarian" +msgstr "Bulgarais" + +msgid "Belarusian" +msgstr "Bealaruisis" + +msgid "Bengali" +msgstr "Beangailis" + +msgid "Breton" +msgstr "Breatnais" + +msgid "Bosnian" +msgstr "Bosnais" + +msgid "Catalan" +msgstr "Catalanais" + +msgid "Czech" +msgstr "Seacais" + +msgid "Welsh" +msgstr "Cuimris" + +msgid "Danish" +msgstr "Danmhairgis" + +msgid "German" +msgstr "Gearmailtis" + +msgid "Lower Sorbian" +msgstr "Sòrbais Ìochdarach" + +msgid "Greek" +msgstr "Greugais" + +msgid "English" +msgstr "Beurla" + +msgid "Australian English" +msgstr "Beurla Astràilia" + +msgid "British English" +msgstr "Beurla Bhreatainn" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spàinntis" + +msgid "Argentinian Spanish" +msgstr "Spàinntis na h-Argantaine" + +msgid "Colombian Spanish" +msgstr "Spàinntis Choloimbia" + +msgid "Mexican Spanish" +msgstr "Spàinntis Mheagsagach" + +msgid "Nicaraguan Spanish" +msgstr "Spàinntis Niocaragua" + +msgid "Venezuelan Spanish" +msgstr "Spàinntis na Bheiniseala" + +msgid "Estonian" +msgstr "Eastoinis" + +msgid "Basque" +msgstr "Basgais" + +msgid "Persian" +msgstr "Farsaidh" + +msgid "Finnish" +msgstr "Fionnlannais" + +msgid "French" +msgstr "Fraingis" + +msgid "Frisian" +msgstr "Frìsis" + +msgid "Irish" +msgstr "Gaeilge" + +msgid "Scottish Gaelic" +msgstr "Gàidhlig" + +msgid "Galician" +msgstr "Gailìsis" + +msgid "Hebrew" +msgstr "Eabhra" + +msgid "Hindi" +msgstr "Hindis" + +msgid "Croatian" +msgstr "Cròthaisis" + +msgid "Upper Sorbian" +msgstr "Sòrbais Uachdarach" + +msgid "Hungarian" +msgstr "Ungairis" + +msgid "Armenian" +msgstr "Airmeinis" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Innd-Innsis" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Innis Tìlis" + +msgid "Italian" +msgstr "Eadailtis" + +msgid "Japanese" +msgstr "Seapanais" + +msgid "Georgian" +msgstr "Cairtbheilis" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Casachais" + +msgid "Khmer" +msgstr "Cmèar" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Coirèanais" + +msgid "Kyrgyz" +msgstr "Cìorgasais" + +msgid "Luxembourgish" +msgstr "Lugsamburgais" + +msgid "Lithuanian" +msgstr "Liotuainis" + +msgid "Latvian" +msgstr "Laitbheis" + +msgid "Macedonian" +msgstr "Masadonais" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolais" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malaidhis" + +msgid "Burmese" +msgstr "Burmais" + +msgid "Norwegian Bokmål" +msgstr "Nirribhis (Bokmål)" + +msgid "Nepali" +msgstr "Neapàlais" + +msgid "Dutch" +msgstr "Duitsis" + +msgid "Norwegian Nynorsk" +msgstr "Nirribhis (Nynorsk)" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "Panjabi" + +msgid "Polish" +msgstr "Pòlainnis" + +msgid "Portuguese" +msgstr "Portagailis" + +msgid "Brazilian Portuguese" +msgstr "Portagailis Bhraisileach" + +msgid "Romanian" +msgstr "Romàinis" + +msgid "Russian" +msgstr "Ruisis" + +msgid "Slovak" +msgstr "Slòbhacais" + +msgid "Slovenian" +msgstr "Slòbhainis" + +msgid "Albanian" +msgstr "Albàinis" + +msgid "Serbian" +msgstr "Sèirbis" + +msgid "Serbian Latin" +msgstr "Sèirbis (Laideann)" + +msgid "Swedish" +msgstr "Suainis" + +msgid "Swahili" +msgstr "Kiswahili" + +msgid "Tamil" +msgstr "Taimilis" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Taidigis" + +msgid "Thai" +msgstr "Tàidh" + +msgid "Turkmen" +msgstr "Turcmanais" + +msgid "Turkish" +msgstr "Turcais" + +msgid "Tatar" +msgstr "Tatarais" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucràinis" + +msgid "Urdu" +msgstr "Ùrdu" + +msgid "Uzbek" +msgstr "Usbagais" + +msgid "Vietnamese" +msgstr "Bhiet-Namais" + +msgid "Simplified Chinese" +msgstr "Sìnis Shimplichte" + +msgid "Traditional Chinese" +msgstr "Sìnis Thradaiseanta" + +msgid "Messages" +msgstr "Teachdaireachdan" + +msgid "Site Maps" +msgstr "Mapaichean-làraich" + +msgid "Static Files" +msgstr "Faidhlichean stadastaireachd" + +msgid "Syndication" +msgstr "Siondacaideadh" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Chan eil àireamh na duilleige seo 'na àireamh slàn" + +msgid "That page number is less than 1" +msgstr "Tha àireamh na duilleige seo nas lugha na 1" + +msgid "That page contains no results" +msgstr "Chan eil toradh aig an duilleag seo" + +msgid "Enter a valid value." +msgstr "Cuir a-steach luach dligheach." + +msgid "Enter a valid URL." +msgstr "Cuir a-steach URL dligheach." + +msgid "Enter a valid integer." +msgstr "Cuir a-steach àireamh slàin dhligheach." + +msgid "Enter a valid email address." +msgstr "Cuir a-steach seòladh puist-d dligheach." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Cuir a-steach “sluga” dligheach anns nach eil ach litrichean, àireamhan, fo-" +"loidhnichean is tàthanan." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Cuir a-steach “sluga” dligheach anns nach eil ach litrichean Unicode, " +"àireamhan, fo-loidhnichean is tàthanan." + +msgid "Enter a valid IPv4 address." +msgstr "Cuir a-steach seòladh IPv4 dligheach." + +msgid "Enter a valid IPv6 address." +msgstr "Cuir a-steach seòladh IPv6 dligheach." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Cuir a-steach seòladh IPv4 no IPv6 dligheach." + +msgid "Enter only digits separated by commas." +msgstr "Na cuir a-steach ach àireamhan ’gan sgaradh le cromagan." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Dèan cinnteach gu bheil an luach seo %(limit_value)s (’s e %(show_value)s a " +"th’ ann)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an luach seo nas lugha na no co-ionnan ri " +"%(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an luach seo nas motha na no co-ionnan ri " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Dèan cinnteach gu bheil %(limit_value)d charactar aig an luach seo air a’ " +"char as lugha (tha %(show_value)d aige an-dràsta)." +msgstr[1] "" +"Dèan cinnteach gu bheil %(limit_value)d charactar aig an luach seo air a’ " +"char as lugha (tha %(show_value)d aige an-dràsta)." +msgstr[2] "" +"Dèan cinnteach gu bheil %(limit_value)d caractaran aig an luach seo air a’ " +"char as lugha (tha %(show_value)d aige an-dràsta)." +msgstr[3] "" +"Dèan cinnteach gu bheil %(limit_value)d caractar aig an luach seo air a’ " +"char as lugha (tha %(show_value)d aige an-dràsta)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Dèan cinnteach gu bheil %(limit_value)d charactar aig an luach seo air a’ " +"char as motha (tha %(show_value)d aige an-dràsta)." +msgstr[1] "" +"Dèan cinnteach gu bheil %(limit_value)d charactar aig an luach seo air a’ " +"char as motha (tha %(show_value)d aige an-dràsta)." +msgstr[2] "" +"Dèan cinnteach gu bheil %(limit_value)d caractaran aig an luach seo air a’ " +"char as motha (tha %(show_value)d aige an-dràsta)." +msgstr[3] "" +"Dèan cinnteach gu bheil %(limit_value)d caractar aig an luach seo air a’ " +"char as motha (tha %(show_value)d aige an-dràsta)." + +msgid "Enter a number." +msgstr "Cuir a-steach àireamh." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann gu h-iomlan." +msgstr[1] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann gu h-iomlan." +msgstr[2] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamhan ann gu h-iomlan." +msgstr[3] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann gu h-iomlan." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Dèan cinnteach nach eil barrachd air %(max)s ionad deicheach ann." +msgstr[1] "Dèan cinnteach nach eil barrachd air %(max)s ionad deicheach ann." +msgstr[2] "Dèan cinnteach nach eil barrachd air %(max)s ionadan deicheach ann." +msgstr[3] "Dèan cinnteach nach eil barrachd air %(max)s ionad deicheach ann." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann ron phuing " +"dheicheach." +msgstr[1] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann ron phuing " +"dheicheach." +msgstr[2] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamhan ann ron phuing " +"dheicheach." +msgstr[3] "" +"Dèan cinnteach nach eil barrachd air %(max)s àireamh ann ron phuing " +"dheicheach." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Chan eil an leudachan faidhle “%(extension)s” ceadaichte. Seo na leudachain " +"a tha ceadaichte: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Chan eil caractaran null ceadaichte." + +msgid "and" +msgstr "agus" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Tha %(model_name)s lis a’ %(field_labels)s seo ann mar-thà." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Chan eil an luach %(value)r ’na roghainn dhligheach." + +msgid "This field cannot be null." +msgstr "Chan fhaod an raon seo a bhith ’na neoni." + +msgid "This field cannot be blank." +msgstr "Chan fhaod an raon seo a bhith bàn." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Tha %(model_name)s leis a’ %(field_label)s seo ann mar-thà." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Chan fhaod %(field_label)s a bhith ann ach aon turas airson " +"%(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Raon dhen t-seòrsa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Feumaidh “%(value)s” a bhith True no False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Feumaidh “%(value)s” a bhith True, False no None." + +msgid "Boolean (Either True or False)" +msgstr "Booleach (True no False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Sreang (suas ri %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Àireamhan slàna sgaraichte le cromagan" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Tha fòrmat cinn-là mì-dhligheach aig an luach “%(value)s”. Feumaidh e bhith " +"san fhòrmat BBBB-MM-LL." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Tha fòrmat mar bu chòir (BBBB-MM-LL) aig an luach “%(value)s” ach tha an " +"ceann-là mì-dligheach." + +msgid "Date (without time)" +msgstr "Ceann-là (gun àm)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Tha fòrmat mì-dhligheach aig an luach “%(value)s”. Feumaidh e bhith san " +"fhòrmat BBBB-MM-LL HH:MM[:dd[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Tha fòrmat mar bu chòir (BBBB-MM-LL HH:MM[:dd[.uuuuuu]][TZ]) aig an luach " +"“%(value)s” ach tha an ceann-là/an t-àm mì-dligheach." + +msgid "Date (with time)" +msgstr "Ceann-là (le àm)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Feumaidh “%(value)s” a bhith ’na àireamh dheicheach." + +msgid "Decimal number" +msgstr "Àireamh dheicheach" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Tha fòrmat mì-dhligheach aig an luach “%(value)s”. Feumaidh e bhith san " +"fhòrmat [DD] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Faid" + +msgid "Email address" +msgstr "Seòladh puist-d" + +msgid "File path" +msgstr "Slighe an fhaidhle" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Feumaidh “%(value)s” a bhith ’na àireamh floda." + +msgid "Floating point number" +msgstr "Àireamh le puing floda" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Feumaidh “%(value)s” a bhith ’na àireamh shlàn." + +msgid "Integer" +msgstr "Àireamh shlàn" + +msgid "Big (8 byte) integer" +msgstr "Mòr-àireamh shlàn (8 baidht)" + +msgid "Small integer" +msgstr "Beag-àireamh slàn" + +msgid "IPv4 address" +msgstr "Seòladh IPv4" + +msgid "IP address" +msgstr "Seòladh IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Feumaidh “%(value)s” a bhith None, True no False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleach (True, False no None)" + +msgid "Positive big integer" +msgstr "Àireamh shlàn dhearbh" + +msgid "Positive integer" +msgstr "Àireamh shlàn dhearbh" + +msgid "Positive small integer" +msgstr "Beag-àireamh shlàn dhearbh" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Sluga (suas ri %(max_length)s)" + +msgid "Text" +msgstr "Teacsa" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Tha fòrmat mì-dhligheach aig an luach “%(value)s”. Feumaidh e bhith san " +"fhòrmat HH:MM[:dd[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Tha fòrmat mar bu chòir (HH:MM[:dd[.uuuuuu]]) aig an luach “%(value)s” ach " +"tha an t-àm mì-dligheach." + +msgid "Time" +msgstr "Àm" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dàta bìnearaidh amh" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "Chan eil “%(value)s” ’na UUID dligheach." + +msgid "Universally unique identifier" +msgstr "Aithnichear àraidh gu h-uile-choitcheann" + +msgid "File" +msgstr "Faidhle" + +msgid "Image" +msgstr "Dealbh" + +msgid "A JSON object" +msgstr "Oibseact JSON" + +msgid "Value must be valid JSON." +msgstr "Feumaidh an luach a bhith ’na JSON dligheach." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Chan eil ionstans dhe %(model)s le %(field)s %(value)r ann." + +msgid "Foreign Key (type determined by related field)" +msgstr "Iuchair chèin (thèid a sheòrsa a mhìneachadh leis an raon dàimheach)" + +msgid "One-to-one relationship" +msgstr "Dàimh aonan gu aonan" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Dàimh %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Dàimhean %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Dàimh iomadh rud gu iomadh rud" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Tha an raon seo riatanach." + +msgid "Enter a whole number." +msgstr "Cuir a-steach àireamh shlàn." + +msgid "Enter a valid date." +msgstr "Cuir a-steach ceann-là dligheach." + +msgid "Enter a valid time." +msgstr "Cuir a-steach àm dligheach." + +msgid "Enter a valid date/time." +msgstr "Cuir a-steach ceann-là ’s àm dligheach." + +msgid "Enter a valid duration." +msgstr "Cuir a-steach faid dhligheach." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" +"Feumaidh an àireamh de làithean a bhith eadar {min_days} is {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Cha deach faidhle a chur a-null. Dearbhaich seòrsa a’ chòdachaidh air an " +"fhoirm." + +msgid "No file was submitted." +msgstr "Cha deach faidhle a chur a-null." + +msgid "The submitted file is empty." +msgstr "Tha am faidhle a chaidh a chur a-null falamh." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Dèan cinnteach nach eil barrachd air %(max)d charactar ann an ainm an " +"fhaidhle (tha %(length)d aige)." +msgstr[1] "" +"Dèan cinnteach nach eil barrachd air %(max)d charactar ann an ainm an " +"fhaidhle (tha %(length)d aige)." +msgstr[2] "" +"Dèan cinnteach nach eil barrachd air %(max)d caractaran ann an ainm an " +"fhaidhle (tha %(length)d aige)." +msgstr[3] "" +"Dèan cinnteach nach eil barrachd air %(max)d caractar ann an ainm an " +"fhaidhle (tha %(length)d aige)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Cuir a-null faidhle no cuir cromag sa bhogsa fhalamh, na dèan an dà chuidh " +"dhiubh." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Luchdaich suas dealbh dligheach. Cha robh am faidhle a luchdaich thu suas " +"’na dhealbh no bha an dealbh coirbte." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Tagh rud dligheach. Chan eil %(value)s ’na roghainn dhut." + +msgid "Enter a list of values." +msgstr "Cuir a-steach liosta de luachan." + +msgid "Enter a complete value." +msgstr "Cuir a-steach luach slàn." + +msgid "Enter a valid UUID." +msgstr "Cuir a-steach UUID dligheach." + +msgid "Enter a valid JSON." +msgstr "Cuir a-steach JSON dligheach." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Raon falaichte %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Tha dàta an fhoirm stiùiridh a dhìth no chaidh beantainn ris. Seo na " +"raointean a tha a dhìth: %(field_names)s. Ma mhaireas an duilgheadas, saoil " +"an cuir thu aithris air buga thugainn?" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Na cuir a-null barrachd air %d fhoirm." +msgstr[1] "Na cuir a-null barrachd air %d fhoirm." +msgstr[2] "Na cuir a-null barrachd air %d foirmean." +msgstr[3] "Na cuir a-null barrachd air %d foirm." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Cuir a-null %d fhoirm air a char as lugha." +msgstr[1] "Cuir a-null %d fhoirm air a char as lugha." +msgstr[2] "Cuir a-null %d foirmichean air a char as lugha." +msgstr[3] "Cuir a-null %d foirm air a char as lugha." + +msgid "Order" +msgstr "Òrdugh" + +msgid "Delete" +msgstr "Sguab às" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ceartaich an dàta dùblaichte airson %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ceartaich an dàta dùblaichte airson %(field)s, chan fhaod gach nì a bhith " +"ann ach aon turas." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ceartaich an dàta dùblaichte airson %(field_name)s nach fhaod a bhith ann " +"ach aon turas airson %(lookup)s ann an %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ceartaich na luachan dùblaichte gu h-ìosal." + +msgid "The inline value did not match the parent instance." +msgstr "" +"Chan eil an luach am broinn na loidhne a’ freagairt ris an ionstans-pàraint." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Tagh rud dligheach. Chan eil an rud seo ’na roghainn dhut." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "Chan e luach dligheach a tha ann an “%(pk)s”." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Cha chiall dha %(datetime)s san roinn-tìde %(current_timezone)s; dh’fhaoidte " +"gu bheil e dà-sheaghach no nach eil e ann." + +msgid "Clear" +msgstr "Falamhaich" + +msgid "Currently" +msgstr "An-dràsta" + +msgid "Change" +msgstr "Atharraich" + +msgid "Unknown" +msgstr "Chan eil fhios" + +msgid "Yes" +msgstr "Tha" + +msgid "No" +msgstr "Chan eil" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "yes,no,maybe" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d baidht" +msgstr[1] "%(size)d baidht" +msgstr[2] "%(size)d baidht" +msgstr[3] "%(size)d baidht" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "f" + +msgid "a.m." +msgstr "m" + +msgid "PM" +msgstr "f" + +msgid "AM" +msgstr "m" + +msgid "midnight" +msgstr "meadhan-oidhche" + +msgid "noon" +msgstr "meadhan-latha" + +msgid "Monday" +msgstr "DiLuain" + +msgid "Tuesday" +msgstr "DiMàirt" + +msgid "Wednesday" +msgstr "DiCiadain" + +msgid "Thursday" +msgstr "DiarDaoin" + +msgid "Friday" +msgstr "DihAoine" + +msgid "Saturday" +msgstr "DiSathairne" + +msgid "Sunday" +msgstr "DiDòmhnaich" + +msgid "Mon" +msgstr "DiL" + +msgid "Tue" +msgstr "DiM" + +msgid "Wed" +msgstr "DiC" + +msgid "Thu" +msgstr "Dia" + +msgid "Fri" +msgstr "Dih" + +msgid "Sat" +msgstr "DiS" + +msgid "Sun" +msgstr "DiD" + +msgid "January" +msgstr "Am Faoilleach" + +msgid "February" +msgstr "An Gearran" + +msgid "March" +msgstr "Am Màrt" + +msgid "April" +msgstr "An Giblean" + +msgid "May" +msgstr "An Cèitean" + +msgid "June" +msgstr "An t-Ògmhios" + +msgid "July" +msgstr "An t-Iuchar" + +msgid "August" +msgstr "An Lùnastal" + +msgid "September" +msgstr "An t-Sultain" + +msgid "October" +msgstr "An Dàmhair" + +msgid "November" +msgstr "An t-Samhain" + +msgid "December" +msgstr "An Dùbhlachd" + +msgid "jan" +msgstr "faoi" + +msgid "feb" +msgstr "gearr" + +msgid "mar" +msgstr "màrt" + +msgid "apr" +msgstr "gibl" + +msgid "may" +msgstr "cèit" + +msgid "jun" +msgstr "ògmh" + +msgid "jul" +msgstr "iuch" + +msgid "aug" +msgstr "lùna" + +msgid "sep" +msgstr "sult" + +msgid "oct" +msgstr "dàmh" + +msgid "nov" +msgstr "samh" + +msgid "dec" +msgstr "dùbh" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Faoi" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Gearr" + +msgctxt "abbrev. month" +msgid "March" +msgstr "Màrt" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Gibl" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Cèit" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Ògmh" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Iuch" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Lùna" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sult" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Dàmh" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Samh" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dùbh" + +msgctxt "alt. month" +msgid "January" +msgstr "Am Faoilleach" + +msgctxt "alt. month" +msgid "February" +msgstr "An Gearran" + +msgctxt "alt. month" +msgid "March" +msgstr "Am Màrt" + +msgctxt "alt. month" +msgid "April" +msgstr "An Giblean" + +msgctxt "alt. month" +msgid "May" +msgstr "An Cèitean" + +msgctxt "alt. month" +msgid "June" +msgstr "An t-Ògmhios" + +msgctxt "alt. month" +msgid "July" +msgstr "An t-Iuchar" + +msgctxt "alt. month" +msgid "August" +msgstr "An Lùnastal" + +msgctxt "alt. month" +msgid "September" +msgstr "An t-Sultain" + +msgctxt "alt. month" +msgid "October" +msgstr "An Dàmhair" + +msgctxt "alt. month" +msgid "November" +msgstr "An t-Samhain" + +msgctxt "alt. month" +msgid "December" +msgstr "An Dùbhlachd" + +msgid "This is not a valid IPv6 address." +msgstr "Chan eil seo ’na sheòladh IPv6 dligheach." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "no" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d bliadhna" +msgstr[1] "%(num)d bhliadhna" +msgstr[2] "%(num)d bliadhnaichean" +msgstr[3] "%(num)d bliadhna" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mhìos" +msgstr[1] "%(num)d mhìos" +msgstr[2] "%(num)d mìosan" +msgstr[3] "%(num)d mìos" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d seachdain" +msgstr[1] "%(num)d sheachdain" +msgstr[2] "%(num)d seachdainean" +msgstr[3] "%(num)d seachdain" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d latha" +msgstr[1] "%(num)d latha" +msgstr[2] "%(num)d làithean" +msgstr[3] "%(num)d latha" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d uair a thìde" +msgstr[1] "%(num)d uair a thìde" +msgstr[2] "%(num)d uairean a thìde" +msgstr[3] "%(num)d uair a thìde" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d mhionaid" +msgstr[1] "%(num)d mhionaid" +msgstr[2] "%(num)d mionaidean" +msgstr[3] "%(num)d mionaid" + +msgid "Forbidden" +msgstr "Toirmisgte" + +msgid "CSRF verification failed. Request aborted." +msgstr "Dh’fhàillig le dearbhadh CSRF. chaidh sgur dhen iarrtas." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Chì thu an teachdaireachd seo air sgàth ’s gu bheil an làrach-lìn HTTPS seo " +"ag iarraidh air a’ bhrabhsair-lìn agad gun cuir e bann-cinn “Referer” thuice " +"ach cha deach gin a chur a-null. Tha feum air a’ bhann-chinn seo a chum " +"tèarainteachd ach nach cleachd treas-phàrtaidh am brabhsair agad gu droch-" +"rùnach." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ma rèitich thu am brabhsair agad ach an cuir e bannan-cinn “Referer” à " +"comas, cuir an comas iad a-rithist, co-dhiù airson na làraich seo no airson " +"ceanglaichean HTTPS no airson iarrtasan “same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ma tha thu a’ cleachdadh taga no a’ gabhail a-staigh bann-cinn “'Referrer-Policy: no-referrer” feuch " +"an doir thu air falbh iad. Iarraidh an dìon CSRF bann-cinn “Referer” gus na " +"referers a dhearbhadh gu teann. Ma tha thu iomagaineach a thaobh do " +"prìobhaideachd, cleachd roghainnean eile mar airson " +"ceangal gu làraichean-lìn threas-phàrtaidhean." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Chì thu an teachdaireachd seo air sgàth ’s gu bheil an làrach-lìn seo ag " +"iarraidh briosgaid CSRF nuair a chuireas tu foirm a-null. Tha feum air a’ " +"bhriosgaid seo a chum tèarainteachd ach nach cleachd treas-phàrtaidh am " +"brabhsair agad gu droch-rùnach." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ma rèitich thu am brabhsair agad ach an cuir e briosgaidean à comas, cuir an " +"comas iad a-rithist, co-dhiù airson na làraich seo no airson iarrtasan “same-" +"origin”." + +msgid "More information is available with DEBUG=True." +msgstr "Gheibh thu barrachd fiosrachaidh le DEBUG=True." + +msgid "No year specified" +msgstr "Cha deach bliadhna a shònrachadh" + +msgid "Date out of range" +msgstr "Tha ceann-là taobh thar na rainse" + +msgid "No month specified" +msgstr "Cha deach mìos a shònrachadh" + +msgid "No day specified" +msgstr "Cha deach latha a shònrachadh" + +msgid "No week specified" +msgstr "Cha deach seachdain a shònrachadh" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Chan eil %(verbose_name_plural)s ri fhaighinn" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Chan eil %(verbose_name_plural)s san àm ri teachd ri fhaighinn air sgàth ’s " +"gun deach %(class_name)s.allow_future a shuidheachadh air False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Sreang cinn-là “%(datestr)s” mì-dhligheach airson an fhòrmait “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Cha deach %(verbose_name)s a lorg a fhreagras dhan cheist" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Chan eil an duilleag ’na “last” is cha ghabh a h-iompachadh gu àireamh shlàn." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Duilleag mhì-dhligheach (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" +"Tha liosta fhalamh ann agus chaidh “%(class_name)s.allow_empty” a " +"shuidheachadh air False." + +msgid "Directory indexes are not allowed here." +msgstr "Chan eil clàran-amais pasgain falamh ceadaichte an-seo." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "Chan eil “%(path)s” ann" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Clàr-amais dhe %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Chaidh a stàladh! Meal do naidheachd!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Seall na nòtaichean sgaoilidh airson Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Chì thu an duilleag seo on a tha DEBUG=True ann am faidhle nan roghainnean agad agus cha do rèitich " +"thu URL sam bith fhathast." + +msgid "Django Documentation" +msgstr "Docamaideadh Django" + +msgid "Topics, references, & how-to’s" +msgstr "Cuspairean, iomraidhean ⁊ treòraichean" + +msgid "Tutorial: A Polling App" +msgstr "Oideachadh: Aplacaid cunntais-bheachd" + +msgid "Get started with Django" +msgstr "Dèan toiseach-tòiseachaidh le Django" + +msgid "Django Community" +msgstr "Coimhearsnachd Django" + +msgid "Connect, get help, or contribute" +msgstr "Dèan ceangal, faigh taic no cuidich" diff --git a/venv/Lib/site-packages/django/conf/locale/gd/__init__.py b/venv/Lib/site-packages/django/conf/locale/gd/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/gd/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/gd/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82eb619e11b373e66f2b78747b0dcfac85aa11e7 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`ldWwF0d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04T*Y%>V!Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/gd/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/gd/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..074d977c30e94fccb1e7cf7bbd2185d6d8ad2ed1 GIT binary patch literal 464 zcmYk2-)h1z6vi8^S{2z8cJJkcY42r>72B>dYo)CWLs+RzbamQD(+cyA_AGk?VOP5v z>j-1z5mESi~X} zaS4`i8J2McR+aC}Hy2su99){#*fl&=nf>)Q9mBF+PEJQ$ozVH-rarWttaIjB zy7#1MkFcp~gQ2O6JV%=-w&GegY`KOtb(FDsV(&sM@(1T~B!fPhG7>Xnr;PbXr9rwO zQNqwem>B6C>0!*0?j)uw5+rCxq8%EAbHu`gbhm!+>MsdHc;!b+DhD)L$ZHz-Ya%bP kyrA*MPgrmJc93p26sK!)mwgp$aS=rk@KMMWh!qL^0<)TYMgRZ+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/gd/formats.py b/venv/Lib/site-packages/django/conf/locale/gd/formats.py new file mode 100644 index 000000000..5ef677446 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/gd/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "h:ia" +DATETIME_FORMAT = "j F Y h:ia" +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +SHORT_DATETIME_FORMAT = "j M Y h:ia" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b53513d9af1dcdc5dd27fefaa9b4a5096077db69 GIT binary patch literal 14253 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ae3fa2437 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,1233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fasouto , 2011-2012 +# fonso , 2011,2013 +# fonso , 2013 +# fasouto , 2017 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +# Oscar Carballal , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "africáner" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "azerí" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "bosníaco" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Dinamarqués" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Grego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés australiano" + +msgid "British English" +msgstr "inglés británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "español" + +msgid "Argentinian Spanish" +msgstr "español da Arxentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "español de México" + +msgid "Nicaraguan Spanish" +msgstr "español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "español de Venezuela" + +msgid "Estonian" +msgstr "estoniano" + +msgid "Basque" +msgstr "vasco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "irlandés" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galego" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "croata" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesio" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "xaponés" + +msgid "Georgian" +msgstr "xeorxiano" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "casaco" + +msgid "Khmer" +msgstr "camboxano" + +msgid "Kannada" +msgstr "canará" + +msgid "Korean" +msgstr "Coreano" + +msgid "Luxembourgish" +msgstr "luxemburgués" + +msgid "Lithuanian" +msgstr "lituano" + +msgid "Latvian" +msgstr "letón" + +msgid "Macedonian" +msgstr "macedonio" + +msgid "Malayalam" +msgstr "mala" + +msgid "Mongolian" +msgstr "mongol" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "birmano" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "nepalés" + +msgid "Dutch" +msgstr "holandés" + +msgid "Norwegian Nynorsk" +msgstr "noruegués (nynorsk)" + +msgid "Ossetic" +msgstr "osetio" + +msgid "Punjabi" +msgstr "panxabiano" + +msgid "Polish" +msgstr "polaco" + +msgid "Portuguese" +msgstr "portugués" + +msgid "Brazilian Portuguese" +msgstr "portugués do Brasil" + +msgid "Romanian" +msgstr "romanés" + +msgid "Russian" +msgstr "ruso" + +msgid "Slovak" +msgstr "eslovaco" + +msgid "Slovenian" +msgstr "esloveno" + +msgid "Albanian" +msgstr "albanés" + +msgid "Serbian" +msgstr "serbio" + +msgid "Serbian Latin" +msgstr "serbio (alfabeto latino)" + +msgid "Swedish" +msgstr "sueco" + +msgid "Swahili" +msgstr "suahili" + +msgid "Tamil" +msgstr "támil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "tai" + +msgid "Turkish" +msgstr "turco" + +msgid "Tatar" +msgstr "tártaro" + +msgid "Udmurt" +msgstr "udmurt" + +msgid "Ukrainian" +msgstr "ucraíno" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "vietnamita" + +msgid "Simplified Chinese" +msgstr "chinés simplificado" + +msgid "Traditional Chinese" +msgstr "chinés tradicional" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Insira un valor válido." + +msgid "Enter a valid URL." +msgstr "Insira un URL válido." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Insira un enderezo de correo electrónico válido." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Insira unha dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Insira unha dirección IPv6 válida" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Insira unha dirección IPv4 ou IPv6 válida" + +msgid "Enter only digits separated by commas." +msgstr "Insira só díxitos separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Asegúrese de que este valor é %(limit_value)s (agora é %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegure que este valor é menor ou igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegure que este valor é maior ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Insira un número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegure que non hai mais de %(max)s díxito en total." +msgstr[1] "Asegure que non hai mais de %(max)s díxitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "O valor %(value)r non é unha opción válida." + +msgid "This field cannot be null." +msgstr "Este campo non pode ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo non pode estar baleiro." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" +"Xa existe un modelo %(model_name)s coa etiqueta de campo %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo de tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Valor booleano (verdadeiro ou falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadea (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Números enteiros separados por comas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Data (sen a hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Data (coa hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Enderezo electrónico" + +msgid "File path" +msgstr "Ruta de ficheiro" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Número en coma flotante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Número enteiro" + +msgid "Big (8 byte) integer" +msgstr "Enteiro grande (8 bytes)" + +msgid "IPv4 address" +msgstr "Enderezo IPv4" + +msgid "IP address" +msgstr "Enderezo IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (verdadeiro, falso ou ningún)" + +msgid "Positive integer" +msgstr "Numero enteiro positivo" + +msgid "Positive small integer" +msgstr "Enteiro pequeno positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (ata %(max_length)s)" + +msgid "Small integer" +msgstr "Enteiro pequeno" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binarios en bruto" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Ficheiro" + +msgid "Image" +msgstr "Imaxe" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave Estranxeira (tipo determinado por un campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación un a un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Relación moitos a moitos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Requírese este campo." + +msgid "Enter a whole number." +msgstr "Insira un número enteiro." + +msgid "Enter a valid date." +msgstr "Insira unha data válida." + +msgid "Enter a valid time." +msgstr "Insira unha hora válida." + +msgid "Enter a valid date/time." +msgstr "Insira unha data/hora válida." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Non se enviou ficheiro ningún. Comprobe o tipo de codificación do formulario." + +msgid "No file was submitted." +msgstr "Non se enviou ficheiro ningún." + +msgid "The submitted file is empty." +msgstr "O ficheiro enviado está baleiro." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ou ben envíe un ficheiro, ou ben marque a casilla de eliminar, pero non " +"ambas as dúas cousas." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Suba unha imaxe válida. O ficheiro subido non era unha imaxe ou esta estaba " +"corrupta." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Escolla unha opción válida. %(value)s non se atopa entre as opcións " +"dispoñibles." + +msgid "Enter a list of values." +msgstr "Insira unha lista de valores." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "Insira un UUID válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Orde" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Corrixa os datos duplicados no campo %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Corrixa os datos duplicados no campo %(field)s, que debe ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Corrixa os datos duplicados no campo %(field_name)s, que debe ser único para " +"a busca %(lookup)s no campo %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Corrixa os valores duplicados de abaixo." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Escolla unha opción válida. Esta opción non se atopa entre as opcións " +"dispoñíbeis" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Limpar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Descoñecido" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "Non" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "si,non,quizais" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoite" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Luns" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Mércores" + +msgid "Thursday" +msgstr "Xoves" + +msgid "Friday" +msgstr "Venres" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "lun" + +msgid "Tue" +msgstr "mar" + +msgid "Wed" +msgstr "mér" + +msgid "Thu" +msgstr "xov" + +msgid "Fri" +msgstr "ven" + +msgid "Sat" +msgstr "sáb" + +msgid "Sun" +msgstr "dom" + +msgid "January" +msgstr "xaneiro" + +msgid "February" +msgstr "febreiro" + +msgid "March" +msgstr "marzo" + +msgid "April" +msgstr "abril" + +msgid "May" +msgstr "maio" + +msgid "June" +msgstr "xuño" + +msgid "July" +msgstr "xullo" + +msgid "August" +msgstr "agosto" + +msgid "September" +msgstr "setembro" + +msgid "October" +msgstr "outubro" + +msgid "November" +msgstr "novembro" + +msgid "December" +msgstr "decembro" + +msgid "jan" +msgstr "xan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "xuñ" + +msgid "jul" +msgstr "xul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "out" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "xan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "abr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "xuño" + +msgctxt "abbrev. month" +msgid "July" +msgstr "xul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "out." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec." + +msgctxt "alt. month" +msgid "January" +msgstr "xaneiro" + +msgctxt "alt. month" +msgid "February" +msgstr "febreiro" + +msgctxt "alt. month" +msgid "March" +msgstr "marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "abril" + +msgctxt "alt. month" +msgid "May" +msgstr "maio" + +msgctxt "alt. month" +msgid "June" +msgstr "xuño" + +msgctxt "alt. month" +msgid "July" +msgstr "xullo" + +msgctxt "alt. month" +msgid "August" +msgstr "agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "setembro" + +msgctxt "alt. month" +msgid "October" +msgstr "outubro" + +msgctxt "alt. month" +msgid "November" +msgstr "novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "decembro" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ou" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ano" +msgstr[1] "%d anos" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d días" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "0 minutes" +msgstr "0 minutos" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Pode ver máis información se establece DEBUG=True." + +msgid "No year specified" +msgstr "Non se especificou ningún ano" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Non se especificou ningún mes" + +msgid "No day specified" +msgstr "Non se especificou ningún día" + +msgid "No week specified" +msgstr "Non se especificou ningunha semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Non hai %(verbose_name_plural)s dispoñibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Non hai dispoñibles %(verbose_name_plural)s futuros/as porque %(class_name)s." +"allow_futuro é False" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Non se atopou ningún/ha %(verbose_name)s que coincidise coa consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Páxina non válida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Os índices de directorio non están permitidos aquí." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/gl/__init__.py b/venv/Lib/site-packages/django/conf/locale/gl/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/gl/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/gl/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbd53a9a9edce16e19a8bb02ff2f9f37d3fa514a GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`ldX9d4d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04dcp)c^nh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/gl/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/gl/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4fd108b690213cf539484f33c361e5e26b030e54 GIT binary patch literal 531 zcmZ8dO>4q17;d#{Rm3^A!){&$t9Kb=#kQ-=T4^hzA*|FUN?o&dMD(x=9B8GwSf;4U&4|#_S=? z?n7}7adXa$OWW2=W8dkuHgt1Mw+4+8C=0wHT9T?MyaCEaPdSik>YNHSQ{**EQ3r;+ zKX9>Q0&nh>nl7uFVVzFBK1yffq@JdyNz+m#>q!(JK}`_5J%#UEx;W%D-cU7gX~^nG z=Lf=3d#3^>dBYYqxZ8mvf&&7zh!7hJz7x&yA|&v^4drMIB{v`;Hw^q4c0#zqixup< zV@TW(b4%NKv8R|oG_w~|zwP*oN!#-s+r#at*Pi&n+zv@=`MPFr=RS%&e3$+nxk`Xx K82W4#So#k?RFB;N literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/gl/formats.py b/venv/Lib/site-packages/django/conf/locale/gl/formats.py new file mode 100644 index 000000000..73729355f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/gl/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j \d\e F \d\e Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"j \d\e F \d\e Y \á\s H:i" +YEAR_MONTH_FORMAT = r"F \d\e Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = "d-m-Y" +SHORT_DATETIME_FORMAT = "d-m-Y, H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6cd5abacf1c7fa29eb261e861400e8ac5f721434 GIT binary patch literal 30227 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 S8{@03jc-p5Jpt}3uKx><2r@JP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..cd074cd77 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,1320 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 534b44a19bf18d20b71ecc4eb77c572f_db336e9 , 2011-2012 +# Jannis Leidel , 2011 +# Meir Kriheli , 2011-2015,2017,2019-2020 +# Menachem G., 2021 +# Yaron Shahrabani , 2021 +# Uri Rodberg , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Afrikaans" +msgstr "אפריקאנס" + +msgid "Arabic" +msgstr "ערבית" + +msgid "Algerian Arabic" +msgstr "ערבית אלג'ירית" + +msgid "Asturian" +msgstr "אסטורית" + +msgid "Azerbaijani" +msgstr "אזרית" + +msgid "Bulgarian" +msgstr "בולגרית" + +msgid "Belarusian" +msgstr "בֶּלָרוּסִית" + +msgid "Bengali" +msgstr "בנגאלית" + +msgid "Breton" +msgstr "בְּרֶטוֹנִית" + +msgid "Bosnian" +msgstr "בוסנית" + +msgid "Catalan" +msgstr "קאטלונית" + +msgid "Czech" +msgstr "צ'כית" + +msgid "Welsh" +msgstr "וולשית" + +msgid "Danish" +msgstr "דנית" + +msgid "German" +msgstr "גרמנית" + +msgid "Lower Sorbian" +msgstr "סורבית תחתונה" + +msgid "Greek" +msgstr "יוונית" + +msgid "English" +msgstr "אנגלית" + +msgid "Australian English" +msgstr "אנגלית אוסטרלית" + +msgid "British English" +msgstr "אנגלית בריטית" + +msgid "Esperanto" +msgstr "אספרנטו" + +msgid "Spanish" +msgstr "ספרדית" + +msgid "Argentinian Spanish" +msgstr "ספרדית ארגנטינית" + +msgid "Colombian Spanish" +msgstr "ספרדית קולומביאנית" + +msgid "Mexican Spanish" +msgstr "ספרדית מקסיקנית" + +msgid "Nicaraguan Spanish" +msgstr "ספרדית ניקרגואה" + +msgid "Venezuelan Spanish" +msgstr "ספרדית ונצואלית" + +msgid "Estonian" +msgstr "אסטונית" + +msgid "Basque" +msgstr "בסקית" + +msgid "Persian" +msgstr "פרסית" + +msgid "Finnish" +msgstr "פינית" + +msgid "French" +msgstr "צרפתית" + +msgid "Frisian" +msgstr "פריזית" + +msgid "Irish" +msgstr "אירית" + +msgid "Scottish Gaelic" +msgstr "גאלית סקוטית" + +msgid "Galician" +msgstr "גאליציאנית" + +msgid "Hebrew" +msgstr "עברית" + +msgid "Hindi" +msgstr "הינדי" + +msgid "Croatian" +msgstr "קרואטית" + +msgid "Upper Sorbian" +msgstr "סורבית עילית" + +msgid "Hungarian" +msgstr "הונגרית" + +msgid "Armenian" +msgstr "ארמנית" + +msgid "Interlingua" +msgstr "אינטרלינגואה" + +msgid "Indonesian" +msgstr "אינדונזית" + +msgid "Igbo" +msgstr "איגבו" + +msgid "Ido" +msgstr "אידו" + +msgid "Icelandic" +msgstr "איסלנדית" + +msgid "Italian" +msgstr "איטלקית" + +msgid "Japanese" +msgstr "יפנית" + +msgid "Georgian" +msgstr "גיאורגית" + +msgid "Kabyle" +msgstr "קבילה" + +msgid "Kazakh" +msgstr "קזחית" + +msgid "Khmer" +msgstr "חמר" + +msgid "Kannada" +msgstr "קאנאדה" + +msgid "Korean" +msgstr "קוריאנית" + +msgid "Kyrgyz" +msgstr "קירגיזית" + +msgid "Luxembourgish" +msgstr "לוקסמבורגית" + +msgid "Lithuanian" +msgstr "ליטאית" + +msgid "Latvian" +msgstr "לטבית" + +msgid "Macedonian" +msgstr "מקדונית" + +msgid "Malayalam" +msgstr "מלאיאלאם" + +msgid "Mongolian" +msgstr "מונגולי" + +msgid "Marathi" +msgstr "מראטהי" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "בּוּרְמֶזִית" + +msgid "Norwegian Bokmål" +msgstr "נורבגית ספרותית" + +msgid "Nepali" +msgstr "נפאלית" + +msgid "Dutch" +msgstr "הולנדית" + +msgid "Norwegian Nynorsk" +msgstr "נורבגית חדשה" + +msgid "Ossetic" +msgstr "אוסטית" + +msgid "Punjabi" +msgstr "פנג'אבי" + +msgid "Polish" +msgstr "פולנית" + +msgid "Portuguese" +msgstr "פורטוגזית" + +msgid "Brazilian Portuguese" +msgstr "פורטוגזית ברזילאית" + +msgid "Romanian" +msgstr "רומנית" + +msgid "Russian" +msgstr "רוסית" + +msgid "Slovak" +msgstr "סלובקית" + +msgid "Slovenian" +msgstr "סלובנית" + +msgid "Albanian" +msgstr "אלבנית" + +msgid "Serbian" +msgstr "סרבית" + +msgid "Serbian Latin" +msgstr "סרבית לטינית" + +msgid "Swedish" +msgstr "שוודית" + +msgid "Swahili" +msgstr "סווהילי" + +msgid "Tamil" +msgstr "טמילית" + +msgid "Telugu" +msgstr "טלגו" + +msgid "Tajik" +msgstr "טג'יקית" + +msgid "Thai" +msgstr "תאילנדית" + +msgid "Turkmen" +msgstr "טורקמנית" + +msgid "Turkish" +msgstr "טורקית" + +msgid "Tatar" +msgstr "טטרית" + +msgid "Udmurt" +msgstr "אודמורטית" + +msgid "Ukrainian" +msgstr "אוקראינית" + +msgid "Urdu" +msgstr "אורדו" + +msgid "Uzbek" +msgstr "אוזבקית" + +msgid "Vietnamese" +msgstr "וייטנאמית" + +msgid "Simplified Chinese" +msgstr "סינית פשוטה" + +msgid "Traditional Chinese" +msgstr "סינית מסורתית" + +msgid "Messages" +msgstr "הודעות" + +msgid "Site Maps" +msgstr "מפות אתר" + +msgid "Static Files" +msgstr "קבצים סטטיים" + +msgid "Syndication" +msgstr "הפצת תכנים" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "מספר העמוד אינו מספר שלם" + +msgid "That page number is less than 1" +msgstr "מספר העמוד קטן מ־1" + +msgid "That page contains no results" +msgstr "עמוד זה אינו מכיל תוצאות" + +msgid "Enter a valid value." +msgstr "יש להזין ערך חוקי." + +msgid "Enter a valid URL." +msgstr "יש להזין URL חוקי." + +msgid "Enter a valid integer." +msgstr "יש להזין מספר שלם חוקי." + +msgid "Enter a valid email address." +msgstr "נא להזין כתובת דוא\"ל חוקית" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"יש להזין 'slug' חוקי המכיל אותיות לטיניות, ספרות, קווים תחתונים או מקפים." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"יש להזין 'slug' חוקי המכיל אותיות יוניקוד, ספרות, קווים תחתונים או מקפים." + +msgid "Enter a valid IPv4 address." +msgstr "יש להזין כתובת IPv4 חוקית." + +msgid "Enter a valid IPv6 address." +msgstr "יש להזין כתובת IPv6 חוקית." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "יש להזין כתובת IPv4 או IPv6 חוקית." + +msgid "Enter only digits separated by commas." +msgstr "יש להזין רק ספרות מופרדות בפסיקים." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "יש לוודא שערך זה הינו %(limit_value)s (כרגע %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "יש לוודא שערך זה פחות מ או שווה ל־%(limit_value)s ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "יש לוודא שהערך גדול מ או שווה ל־%(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"נא לוודא שערך זה מכיל תו %(limit_value)d לכל הפחות (מכיל %(show_value)d)." +msgstr[1] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל הפחות (מכיל %(show_value)d)." +msgstr[2] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל הפחות (מכיל %(show_value)d)." +msgstr[3] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל הפחות (מכיל %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"נא לוודא שערך זה מכיל תו %(limit_value)d לכל היותר (מכיל %(show_value)d)." +msgstr[1] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל היותר (מכיל %(show_value)d)." +msgstr[2] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל היותר (מכיל %(show_value)d)." +msgstr[3] "" +"נא לוודא שערך זה מכיל %(limit_value)d תווים לכל היותר (מכיל %(show_value)d)." + +msgid "Enter a number." +msgstr "נא להזין מספר." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "נא לוודא שאין יותר מספרה %(max)s בסה\"כ." +msgstr[1] "נא לוודא שאין יותר מ־%(max)s ספרות בסה\"כ." +msgstr[2] "נא לוודא שאין יותר מ־%(max)s ספרות בסה\"כ." +msgstr[3] "נא לוודא שאין יותר מ־%(max)s ספרות בסה\"כ." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "נא לוודא שאין יותר מספרה %(max)s אחרי הנקודה." +msgstr[1] "נא לוודא שאין יותר מ־%(max)s ספרות אחרי הנקודה." +msgstr[2] "נא לוודא שאין יותר מ־%(max)s ספרות אחרי הנקודה." +msgstr[3] "נא לוודא שאין יותר מ־%(max)s ספרות אחרי הנקודה." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "נא לוודא שאין יותר מספרה %(max)s לפני הנקודה העשרונית" +msgstr[1] "נא לוודא שאין יותר מ־%(max)s ספרות לפני הנקודה העשרונית" +msgstr[2] "נא לוודא שאין יותר מ־%(max)s ספרות לפני הנקודה העשרונית" +msgstr[3] "נא לוודא שאין יותר מ־%(max)s ספרות לפני הנקודה העשרונית" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"סיומת הקובץ \"%(extension)s\" אסורה. הסיומות המותרות הן: " +"'%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "תווי NULL אינם מותרים. " + +msgid "and" +msgstr "ו" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s·עם·%(field_labels)s·אלו קיימים כבר." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "ערך %(value)r אינו אפשרות חוקית." + +msgid "This field cannot be null." +msgstr "שדה זה אינו יכול להיות ריק." + +msgid "This field cannot be blank." +msgstr "שדה זה אינו יכול להיות ריק." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s·עם·%(field_label)s·זה קיימת כבר." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s חייב להיות ייחודי עבור %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "שדה מסוג: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "הערך \"%(value)s\" חייב להיות True או False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\" חייב להיות אחד מ־True‏, False, או None." + +msgid "Boolean (Either True or False)" +msgstr "בוליאני (אמת או שקר)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "מחרוזת (עד %(max_length)s תווים)" + +msgid "Comma-separated integers" +msgstr "מספרים שלמים מופרדים בפסיקים" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"הערך \"%(value)s\" מכיל פורמט תאריך לא חוקי. חייב להיות בפורמט YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "הערך \"%(value)s\" בפורמט הנכון (YYYY-MM-DD), אך אינו תאריך חוקי." + +msgid "Date (without time)" +msgstr "תאריך (ללא שעה)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"הערך \"%(value)s\" מכיל פורמט לא חוקי. הוא חייב להיות בפורמטYYYY-MM-DD HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"הערך \"%(value)s\" בפורמט הנכון (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) אך אינו " +"מהווה תאריך/שעה חוקיים." + +msgid "Date (with time)" +msgstr "תאריך (כולל שעה)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "הערך \"%(value)s\" חייב להיות מספר עשרוני." + +msgid "Decimal number" +msgstr "מספר עשרוני" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"הערך \"%(value)s\" מכיל פורמט לא חוקי. הוא חייב להיות בפורמט [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "משך" + +msgid "Email address" +msgstr "כתובת דוא\"ל" + +msgid "File path" +msgstr "נתיב קובץ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” חייב להיות מספר נקודה צפה." + +msgid "Floating point number" +msgstr "מספר עשרוני" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "הערך '%(value)s' חייב להיות מספר שלם." + +msgid "Integer" +msgstr "מספר שלם" + +msgid "Big (8 byte) integer" +msgstr "מספר שלם גדול (8 בתים)" + +msgid "Small integer" +msgstr "מספר שלם קטן" + +msgid "IPv4 address" +msgstr "כתובת IPv4" + +msgid "IP address" +msgstr "כתובת IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "\"%(value)s\" חייב להיות אחד מ־None‏, True, או False." + +msgid "Boolean (Either True, False or None)" +msgstr "בוליאני (אמת, שקר או כלום)" + +msgid "Positive big integer" +msgstr "מספר שלם גדול וחיובי" + +msgid "Positive integer" +msgstr "מספר שלם חיובי" + +msgid "Positive small integer" +msgstr "מספר שלם חיובי קטן" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (עד %(max_length)s תווים)" + +msgid "Text" +msgstr "טקסט" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"הערך “%(value)s” מכיל פורמט לא חוקי. הוא חייב להיות בפורמט HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"הערך “%(value)s” בפורמט הנכון (HH:MM[:ss[.uuuuuu]]) אך אינו מהווה שעה חוקית." + +msgid "Time" +msgstr "זמן" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "מידע בינארי גולמי" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" אינו UUID חוקי." + +msgid "Universally unique identifier" +msgstr "מזהה ייחודי אוניברסלי" + +msgid "File" +msgstr "קובץ" + +msgid "Image" +msgstr "תמונה" + +msgid "A JSON object" +msgstr "אובייקט JSON" + +msgid "Value must be valid JSON." +msgstr "הערך חייב להיות JSON חוקי." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "פריט %(model)s עם %(field)s %(value)r אינו קיים." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (הסוג נקבע לפי השדה המקושר)" + +msgid "One-to-one relationship" +msgstr "יחס של אחד לאחד" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "קשר %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "קשרי %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "יחס של רבים לרבים" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "יש להזין תוכן בשדה זה." + +msgid "Enter a whole number." +msgstr "נא להזין מספר שלם." + +msgid "Enter a valid date." +msgstr "יש להזין תאריך חוקי." + +msgid "Enter a valid time." +msgstr "יש להזין שעה חוקית." + +msgid "Enter a valid date/time." +msgstr "יש להזין תאריך ושעה חוקיים." + +msgid "Enter a valid duration." +msgstr "יש להזין משך חוקי." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "מספר הימים חייב להיות בין {min_days} ל־{max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "לא נשלח שום קובץ. נא לבדוק את סוג הקידוד של הטופס." + +msgid "No file was submitted." +msgstr "לא נשלח שום קובץ" + +msgid "The submitted file is empty." +msgstr "הקובץ שנשלח ריק." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "נא לוודא ששם קובץ זה מכיל תו %(max)d לכל היותר (מכיל %(length)d)." +msgstr[1] "" +"נא לוודא ששם קובץ זה מכיל %(max)d תווים לכל היותר (מכיל %(length)d)." +msgstr[2] "" +"נא לוודא ששם קובץ זה מכיל %(max)d תווים לכל היותר (מכיל %(length)d)." +msgstr[3] "" +"נא לוודא ששם קובץ זה מכיל %(max)d תווים לכל היותר (מכיל %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "נא לשים קובץ או סימן את התיבה לניקוי, לא שניהם." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "נא להעלות תמונה חוקית. הקובץ שהעלת אינו תמונה או מכיל תמונה מקולקלת." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "יש לבחור אפשרות חוקית. %(value)s אינו בין האפשרויות הזמינות." + +msgid "Enter a list of values." +msgstr "יש להזין רשימת ערכים" + +msgid "Enter a complete value." +msgstr "יש להזין ערך שלם." + +msgid "Enter a valid UUID." +msgstr "יש להזין UUID חוקי." + +msgid "Enter a valid JSON." +msgstr "נא להזין JSON חוקי." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(שדה מוסתר %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"המידע של ManagementForm חסר או שובש. שדות חסרים: %(field_names)s. יתכן " +"שתצטרך להגיש דיווח באג אם הבעיה נמשכת." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Order" +msgstr "מיון" + +msgid "Delete" +msgstr "מחיקה" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "נא לתקן את הערכים הכפולים ל%(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "נא לתקן את הערכים הכפולים ל%(field)s, שערכים בו חייבים להיות ייחודיים." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"נא לתקן את הערכים הכפולים %(field_name)s, שחייבים להיות ייחודיים ל%(lookup)s " +"של %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "נא לתקן את הערכים הכפולים למטה." + +msgid "The inline value did not match the parent instance." +msgstr "הערך הפנימי אינו תואם לאב." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "יש לבחור אפשרות חוקית; אפשרות זו אינה אחת מהזמינות." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" אינו ערך חוקי." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"לא ניתן לפרש את %(datetime)s באזור הזמן %(current_timezone)s; הוא עשוי להיות " +"דו־משמעי או לא קיים." + +msgid "Clear" +msgstr "לסלק" + +msgid "Currently" +msgstr "עכשיו" + +msgid "Change" +msgstr "שינוי" + +msgid "Unknown" +msgstr "לא ידוע" + +msgid "Yes" +msgstr "כן" + +msgid "No" +msgstr "לא" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "כן,לא,אולי" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "בית %(size)d " +msgstr[1] "%(size)d בתים" +msgstr[2] "%(size)d בתים" +msgstr[3] "%(size)d בתים" + +#, python-format +msgid "%s KB" +msgstr "%s ק\"ב" + +#, python-format +msgid "%s MB" +msgstr "%s מ\"ב" + +#, python-format +msgid "%s GB" +msgstr "%s ג\"ב" + +#, python-format +msgid "%s TB" +msgstr "%s ט\"ב" + +#, python-format +msgid "%s PB" +msgstr "%s פ\"ב" + +msgid "p.m." +msgstr "אחר הצהריים" + +msgid "a.m." +msgstr "בבוקר" + +msgid "PM" +msgstr "אחר הצהריים" + +msgid "AM" +msgstr "בבוקר" + +msgid "midnight" +msgstr "חצות" + +msgid "noon" +msgstr "12 בצהריים" + +msgid "Monday" +msgstr "שני" + +msgid "Tuesday" +msgstr "שלישי" + +msgid "Wednesday" +msgstr "רביעי" + +msgid "Thursday" +msgstr "חמישי" + +msgid "Friday" +msgstr "שישי" + +msgid "Saturday" +msgstr "שבת" + +msgid "Sunday" +msgstr "ראשון" + +msgid "Mon" +msgstr "שני" + +msgid "Tue" +msgstr "שלישי" + +msgid "Wed" +msgstr "רביעי" + +msgid "Thu" +msgstr "חמישי" + +msgid "Fri" +msgstr "שישי" + +msgid "Sat" +msgstr "שבת" + +msgid "Sun" +msgstr "ראשון" + +msgid "January" +msgstr "ינואר" + +msgid "February" +msgstr "פברואר" + +msgid "March" +msgstr "מרץ" + +msgid "April" +msgstr "אפריל" + +msgid "May" +msgstr "מאי" + +msgid "June" +msgstr "יוני" + +msgid "July" +msgstr "יולי" + +msgid "August" +msgstr "אוגוסט" + +msgid "September" +msgstr "ספטמבר" + +msgid "October" +msgstr "אוקטובר" + +msgid "November" +msgstr "נובמבר" + +msgid "December" +msgstr "דצמבר" + +msgid "jan" +msgstr "ינו" + +msgid "feb" +msgstr "פבר" + +msgid "mar" +msgstr "מרץ" + +msgid "apr" +msgstr "אפר" + +msgid "may" +msgstr "מאי" + +msgid "jun" +msgstr "יונ" + +msgid "jul" +msgstr "יול" + +msgid "aug" +msgstr "אוג" + +msgid "sep" +msgstr "ספט" + +msgid "oct" +msgstr "אוק" + +msgid "nov" +msgstr "נוב" + +msgid "dec" +msgstr "דצמ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "יאנ'" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "פבר'" + +msgctxt "abbrev. month" +msgid "March" +msgstr "מרץ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "אפריל" + +msgctxt "abbrev. month" +msgid "May" +msgstr "מאי" + +msgctxt "abbrev. month" +msgid "June" +msgstr "יוני" + +msgctxt "abbrev. month" +msgid "July" +msgstr "יולי" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "אוג'" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ספט'" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "אוק'" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "נוב'" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "דצמ'" + +msgctxt "alt. month" +msgid "January" +msgstr "ינואר" + +msgctxt "alt. month" +msgid "February" +msgstr "פברואר" + +msgctxt "alt. month" +msgid "March" +msgstr "מרץ" + +msgctxt "alt. month" +msgid "April" +msgstr "אפריל" + +msgctxt "alt. month" +msgid "May" +msgstr "מאי" + +msgctxt "alt. month" +msgid "June" +msgstr "יוני" + +msgctxt "alt. month" +msgid "July" +msgstr "יולי" + +msgctxt "alt. month" +msgid "August" +msgstr "אוגוסט" + +msgctxt "alt. month" +msgid "September" +msgstr "ספטמבר" + +msgctxt "alt. month" +msgid "October" +msgstr "אוקטובר" + +msgctxt "alt. month" +msgid "November" +msgstr "נובמבר" + +msgctxt "alt. month" +msgid "December" +msgstr "דצמבר" + +msgid "This is not a valid IPv6 address." +msgstr "זו אינה כתובת IPv6 חוקית." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s‮…" + +msgid "or" +msgstr "או" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "שנה" +msgstr[1] "שנתיים" +msgstr[2] "%(num)d שנים" +msgstr[3] "%(num)d שנים" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "חודש" +msgstr[1] "חודשיים" +msgstr[2] "%(num)d חודשים" +msgstr[3] "%(num)d חודשים" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "שבוע" +msgstr[1] "שבועיים" +msgstr[2] "%(num)d שבועות" +msgstr[3] "%(num)d שבועות" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "יום" +msgstr[1] "יומיים" +msgstr[2] "%(num)d ימים" +msgstr[3] "%(num)d ימים" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "שעה" +msgstr[1] "שעתיים" +msgstr[2] "%(num)d שעות" +msgstr[3] "%(num)d שעות" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "דקה" +msgstr[1] "%(num)d דקות" +msgstr[2] "%(num)d דקות" +msgstr[3] "%(num)d דקות" + +msgid "Forbidden" +msgstr "אסור" + +msgid "CSRF verification failed. Request aborted." +msgstr "אימות CSRF נכשל. הבקשה בוטלה." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"אם ביטלת \"Referer\" headers בדפדפן שלך, נא לאפשר אותם מחדש, לפחות עבור אתר " +"זה, חיבורי HTTPS או בקשות \"same-origin\"." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"אם השתמשת בתגאו הוספת header " +"של “Referrer-Policy: no-referrer”, נא להסיר אותם. הגנת ה־CSRF דורשת" +" ‎“Referer” header לבדיקת ה־referer. אם פרטיות מדאיגה אותך, ניתן להשתמש " +"בתחליפים כמו לקישור אל אתרי צד שלישי." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"הודעה זו מופיעה מאחר ואתר זה דורש עוגיית CSRF כאשר שולחים טפסים. עוגיה זו " +"נדרשת מסיבות אבטחה, כדי לוודא שהדפדפן שלך לא נחטף על ידי אחרים." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"אם ביטלת עוגיות בדפדפן שלך, נא לאפשר אותם מחדש לפחות עבור אתר זה או בקשות " +"“same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "מידע נוסף זמין עם " + +msgid "No year specified" +msgstr "לא צוינה שנה" + +msgid "Date out of range" +msgstr "תאריך מחוץ לטווח" + +msgid "No month specified" +msgstr "לא צוין חודש" + +msgid "No day specified" +msgstr "לא צוין יום" + +msgid "No week specified" +msgstr "לא צוין שבוע" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "לא נמצאו %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"לא נמצאו %(verbose_name_plural)s בזמן עתיד מאחר ש-%(class_name)s." +"allow_future מוגדר False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "מחרוזת תאריך %(datestr)s אינה חוקית בפורמט %(format)s." + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "לא נמצא/ה %(verbose_name)s התואם/ת לשאילתה" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "העמוד אינו \"last\" או לא ניתן להמרה למספר שם." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "עמוד לא חוקי (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "רשימה ריקה ו־“%(class_name)s.allow_empty” הוא False." + +msgid "Directory indexes are not allowed here." +msgstr "אינדקסים על תיקיה אסורים כאן." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" אינו קיים" + +#, python-format +msgid "Index of %(directory)s" +msgstr "אינדקס של %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "ההתקנה עברה בהצלחה! מזל טוב!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"ראו הערות השחרור עבור Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"עמוד זה מופיע בעקבות המצאות DEBUG=True בקובץ ההגדרות שלך ולא הגדרת שום URLs." + +msgid "Django Documentation" +msgstr "תיעוד Django" + +msgid "Topics, references, & how-to’s" +msgstr "נושאים, הפניות ומדריכים לביצוע" + +msgid "Tutorial: A Polling App" +msgstr "מדריך ללומד: יישום לסקרים." + +msgid "Get started with Django" +msgstr "התחילו לעבוד עם Django" + +msgid "Django Community" +msgstr "קהילת Django" + +msgid "Connect, get help, or contribute" +msgstr "יצירת קשר, קבלת עזרה או השתתפות" diff --git a/venv/Lib/site-packages/django/conf/locale/he/__init__.py b/venv/Lib/site-packages/django/conf/locale/he/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/he/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/he/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59084a4969060a20ed072cce707d084c5a1776e9 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lMyh^%d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04WMI&j0`b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/he/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/he/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afba9d4d04fcee761b239de6397b08c6a74b8b1f GIT binary patch literal 476 zcmY+B!ES;;5QafOQDa(7diPk9DtFT~C4$97!~h=HY)X(_Empy>U{cDI+Oi3|2MOfOg3sXY7C9<$ItnDiDABSQw)}xdwR$<6~q7rv4BM-P(mEw z5D$1H00EUj8C5_9i9keEi|N$T3Tp3=LRv?@x5m;F hmKIUG@eGzNa#sAK~RaWyI#60sjAn!s!FE= zN)j|g5Hbvgun9z~NgzTZ8kP}3aK&*!M;JxX5|>fWI4&H=<9IyI?|<)owRE}zIJ}du z|L<W2S;TK#e~Kz83tm$G>?z z=uNKwP>)A~qnP(*k8c4FrF{bUdT=Z#KJDP^z$qZC%yi$r5Il_b3g7MmN7K%NsAx(c z|I8KqIT5@8JO$hfYWx|Hf984qi2onKBf-Cb(&NxKyLrcWJOR|alR@cq8u%7)A}D21A>p{)G9+U~UgPM0YI1aoI6#r+yH-J9`rSGr7bHG1<=Ys9W zVhb=29tYk7O8+Oo6Tt6)CxgHB?W34s#+gGu1w;5oj3A*glBKulsT1~sn_l-$cf#nV;b z>EKpS^FQaupYZq;D80S|YQN8U{D~j`IjH^p7pV0w`u1P^xH;a*eLX1u9^>0%K_6QEd`GPBai(aKLTpsw}G-(1tbK_r$FiXCEx#bP;$TP+s}aWX+IB61WzH@VsJTl z8u(>!Hu!r``#FPPl3%8Q(sLdtJy(E|n+K&w*|$Fk%08QY|25z|+Bbp=z#o9J&lrk; z)}Ic_?q`77?<`PqJ3-BR4~VKJ0yS?VsC8RGSefmhYTYDI`hUs< zAM&`}8@QJC{ow1su`E&@84pU{9PkS8{on@hd2l0mDMe`-SOvA86F3Z} zgUi5ofm^{dz;A;Sz=J5RsAkRpCxPz)=Y!XQnA&^~oC*E~TmVjMGiEWk3DiEH29^K6 z1GSICFxuJRiQwVjyFr}?5vX(YN)T3N8+Z%&B&c=oMH$&C2IaRaJ>Cp%qy1@6>laLP za^D9YN&5#hYAPZd!1 z`wA#|qb55!M}um&c%16-JWzb!4N9Lb-@ne|7Vv2LZw4i2Hz+%P$>YyFj>1Vt(?15p zm1YVkc`HH1Lkwa%vlf)RK~VDcfa3dQQ0spTqPqD5D1V$hg<1?w1kVMp2Rp%Ug7WK0 zXQCU}2VMdmig7eQ18Uxr;0*9Mf=l`=2PHQGb-rBg`)>iI$339*d(!uR101CNBQORx zO*Q71;2%NB`vJkT7o0*6i~lb`#n+!e?e{30A%D!|kM?&3C^=g}?Qa(-dHekMZmd|nPPGl3(dlE>BnFZjnV4v^58kAo?4k}(A1(mNq_2Y+NybEc+9hAI0D1G`t z>2nPz{+|S;*CU|z^A%9@o&~k;*B)O4XVU%~xD-5>WIYeO0aV^T#~<-Iex~C)4%GS? zpw%DLcpoUaAMki1_$J!-`1WJqiL}25N}m_OC&7bedHq0KW1a=Ik0WL~IpaX-Jqgsh zxxT;C3KUuTA5F(!E-94n0pwy8M+u+0#zVApNB4j9)MOso1ia3+o1IM zF)y!$Rzj)=U)T26Qo6GP8JKZS0D zCPE*D^sIAWKJD=!a0m23-xiGW?_US+gzks_-S;)ZKhtQ3zU(_!fSu52Xe#t`Xb?I9 z`Y_Z6T?pl%G0-mPQ_$^@o^L__1Z{=RfbNC91f|cTy!R7DUe1P|f_?-24EhN46G+d= z(3SShn12CpgC;@!&>HAC=yXWWkDzhTbTxRgP=|eU_bI)e2=zcE=ql)N=)KSssPPGD zoYc^9ir&Yz-QorKq`8G-Hdwg4z1J$o^ey|905FoLJ)nGi$M#wJOQ33By9s%*u6z zg=|jm{9CBv&uc?V#&-}A0=I3b~T-5c38Zu9GTfs zE=Xnnc zCe8^ zDTr4ER#n1$9&w|7XQ_Id@oXko*s*p>YJy?M(3d%99bnFgW6PIbFqCBmLk!n9LGB$o z5H)?a7vkK|M&j27+$It;|*Ii;}QVig_aq6tMH7 zuB03$17^PJiELXM=!>S+3XEE zqB!YsFG*hQB#PFU^Ds-)Z_XptvgW)pCCgTag&k?En8x5T3%l78Q@hQ=d`P)is0@`c z$F^kBw8e^aQ=;tF7W#@OOmdj895U?UwhtCT%h(p-N*CI##a8)*(p02VtT0ipSxAwR z?&pUE>%{XzO0mk<`DIGb`Q<`n7KMdEm!NnXz-3>>> zVu~&#=K?*k)p`kql#^fyGm{Vl)K8Knv00)L(&%>_zA7#kGC@A1z$xfBA_7hqf_J~k z^&kn;0MR7m2joC^me9+nV-;~7^oQh2xr-V|RJM=M9n9&Cy4P5lgln9!3MjVYg6&)t zCwaRz9~U^Ko22v;Qq4UB94AdZNq?j$43-QO;-t6+CDyvb;6iG?4uuN~k&I6Kxco_N zeqoZ)Xt5ZT2)~ZSrXxyhgmrLakq+H4CsH?O493co`-plSJ=CfYb0*l>WnpoA(BGTw z?hW!B;p9?KE@ZK7yLp9dUg3h;&1M+cRzIoDQ4+^%%6&vYwm?gTcBNPQCFHq-g8gtp z)}}`8a^YOg>0yHaTXfev+^yr@wY%bV<87tsic7t)AaqHLhATx!T;wvbmZQ|CbgiS9 zr})&n%Z1fkoy^jh#8E~qEf=k$mW3q)l@n#hvM48Sg*xIm!n%9oYDHao2dl{m&6`oLmRUpJP?-yGMp*+Lq*L8x;-Zgft{{9 zT4;+x8P{@!wLHx7BvUpkqC&L3tdp#ErC*VaO8W7EV=tm&LO5BQx+uz_?Zr{igzeP5 zu#59@ZF^vg-@)#e!jQgl&(LYybBA_u9U0oi*|uMoPPb|kH@X6^K7 z=t~chhA!>Ot60dGurD!TxyNLpZnG-tGOJ1V)#V&iFnKa6kK6OvOd;FTTQY^16TJ|x zHF0;z#EI!s6maP@15t5&As)}z?w(tmF?o96 zUT3rvf-y6KNv+dIn`-6iYUSbd_^y2is8+UB2d@qos#YGWRt9<7N+0u@J|t8t_f{*9 zR4WgplkJ*Es)HL?@DV%uaCPuH7*s2dS1T2I8Qc<72P>xbX`x#Alof&^caGFsWaaI! z)m)hCqk~hispEdsXzIAPw#2Qtv)<}+%S7& zBZx=DF1wvQdKtXV4I_$SmTtiuu4}K;C2eS2(yA4hI!)m7SRf;73=XVytRIwi=(If@ ztkB-9_2`I{y2>9dOp{tW^&e(8paB+E|Jwxu0ch+ADFrQRQ9ukccnHzgcW?~ z;_rj#!RFY(_SExCSBzT8lIF~dvzT5}$;%{E(O>RlI-v$rR>+fX`Q2*Ed7EfE7VMwx zD2JGj=6(<*TxgPt7#Ueihtd5^l(%`aZTZU%ivtd#eUs%V^BQYjYpp?yxyN#Uuu*fe z1J>wBx+`c{ajRX)uz4m?%sTkE+>riz zGzRP(oo53H`NO1bt|w%{A9BS7{h6-m;HweCKaR&N-`XY zK2Glkz1g*`=4gPQTntDV0PW-v%68L7w4lY!7|lTA$GLzdQdS8sv~~Iw2p=MKKe3jT zT#xrK29-?aW|cr5wd(5SA5>uY-H)sX^OYtqtpN_RwMrSN5XK+03H=Q;h)Wksx6^>7 z&rNT=t@POy%^CNS>-OP*YGo($Hgia~+fb2f>E94c;l+mzZ}$zAnXa`Tm;CYmf}q;7-*%JSYt6x(8FxME43s;x+@WL1e1&K{6@3TvF z9PYNqkUOPzAZ{Dw52$$p%VWL0`+Y68%otIvgpISwt+t+PiDgk4G}Xa7Y@bun7fI$b zQ;|nKp;Ed*s=dndQ0p=oZJCvx2Ber(lcGzW>r@Y@nQj^U=-X-M`y&C%5J#w4x2)eI z3>k#EHkj(HE*gH@NOC&6A_8MKSLI#D9@ew-#a~5-E{*^+Lxcu~wrk=V)@pBP&tLDQ z`_dh|_}@c~Z2U-C|L&RI<2hit`yx*j34NQ7H~O45=I5ZF)kw z+aX#uT|F>Aavf)1XdAb}CCc>@+zPcPjN-Me&eglr~zk z7AxbMx}_*%4b?Y2uYF}ro3`3vT9&!Q@RvEOIaP>$sdAgMx@r2HA6R3Jc=6!2t<^*Y z3{cJm@(ycf-s!0uD_}}fC9$z2Z@9I*aocd#LPPkvJrhiunL(Y{R~_8qe9YEr3B^x> z1OGQdx_@UmUH;IE;s7rv$A=xhB6dgzbdc3)BZqiLlxr)no$HVKkz2 zR`{A>n1gj625LuuyVUBY+E|8K^)ug_#%)#wz0QfoO;!cmDf6k0kX(%{UTGyWY0$_I z9J$y|7Iph|9&o*`aO&dFqz@)>A*F<-p2_8bX=Li+r|B4T++EN)?uv;fzAjWy%HB=z zIZl#_|8H*afZJ6z5v{VeP1fD1C{P+;Vwr$hIu*$`e2%McwSCHD=4{$eF=EvDThYVR zSJ#3raP-p&F|RszCF!fdls()0P&PX6Vm%igKByR0l2r%!TIQmQaA&p(HmfO6*ipZT zXj7i?0fQ7){NsDK(%V+MN7jlH6LzwO69*A2kdJ8JX!8jk$|~z))R8c_an9;fn9Fl& zCR0?|nxmukAANxxk!LA)goE>ls~ap4b2sM1C>;=REx1hL%nDkpbhsKt3J^rBw-M-LX2cpc-bSU3zjOmcqAOvW0@(si3_F+VJf)2)E^Dbo z?sK0%A9uPqw$V+tVH)=lnx_6p zD~=mru1{?4jqLDoy8WB2H<-|026)4nXuk*X*wB6NQ$?YTWmUL%^M3GWfKG7#U(D84 z_YKd%Rw4yS8omB^hQwjv1N_wRa!h@HsfrX!6*DnV*S!bQ(rT}RW0*z5|HsA9iPpr; zJ7|a(8#$cM_OvE2ZJm=xeATAQg#m5GWJ-3le=k0Oi*~dnt=6@PHa+wW%KAxucPYYT zypO&tR%vhURW``&4MM%qx9gVQ_#f*CCa$-&!sF$IqLY-~=q1D7J8=hR5P#iOoESuy zJqd_>rr|Us>02DmCnT7OVeICcRgy07kTdFU>1GwTP6fAlcX;@WOb2AH9agAxlT_Q# z2L>95bbrN5w@Pb!(wuAlM!MYI?&59G>BpP1<~}>QetW~0Y_sW_=kBV~CuoWfgy=H7 zTa{1hF#`kapv#$ybBOkES3-XxI`b(lsaN(}GXdp30IO&?e#+t|4bVF+Z}x2{GaI{} zkyC*?FS=qDc@lOUDz3by!}6u{lp5^cIJ;>d_D8pj=o-x~lMnVVxpwt%Awbg`0G3UG z&V0oXTVqwd(a6;u6fViIkB`OuzfHn`gm)JbIJpJ-{->#mOuJd@Z0Bg7tL&Y&E4xa` zeRj(`gVg7BE4gKiV>{ww7gJCOLA33?nU2k_ULj2fTJ3s7IAQ@gb_f%1=V5{jz1Ri| z>$RJ%L1!Arn{7R0Et0y**Qwea6#4RxJyth^Hm-;uS6`QO{bFnHeWG^d~bd&Bk`lyuhknDLWJhEwoniracQiE WL7xw;@piedfi$=VAr85BoBsnzhw>Z% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..427d0151f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,1237 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alkuma , 2013 +# Chandan kumar , 2012 +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +# Pratik , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "अफ़्रीकांस" + +msgid "Arabic" +msgstr "अरबी" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "आज़रबाइजानी" + +msgid "Bulgarian" +msgstr "बलगारियन" + +msgid "Belarusian" +msgstr "बेलारूसी" + +msgid "Bengali" +msgstr "बंगाली" + +msgid "Breton" +msgstr "ब्रेटन" + +msgid "Bosnian" +msgstr "बोस्नियन" + +msgid "Catalan" +msgstr "कटलान" + +msgid "Czech" +msgstr "च्चेक" + +msgid "Welsh" +msgstr "वेल्श" + +msgid "Danish" +msgstr "दानिश" + +msgid "German" +msgstr "जर्मन" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ग्रीक" + +msgid "English" +msgstr "अंग्रेज़ी " + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ब्रिटिश अंग्रेजी" + +msgid "Esperanto" +msgstr "एस्परेन्तो" + +msgid "Spanish" +msgstr "स्पानिश" + +msgid "Argentinian Spanish" +msgstr "अर्जेंटीना स्पैनिश " + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "मेक्सिकन स्पैनिश" + +msgid "Nicaraguan Spanish" +msgstr "निकारागुआ स्पैनिश" + +msgid "Venezuelan Spanish" +msgstr "वेनेज़ुएलाई स्पेनिश" + +msgid "Estonian" +msgstr "एस्टोनियन" + +msgid "Basque" +msgstr "बास्क" + +msgid "Persian" +msgstr "पारसी" + +msgid "Finnish" +msgstr "फ़िन्निश" + +msgid "French" +msgstr "फ्रेंच" + +msgid "Frisian" +msgstr "फ्रिसियन" + +msgid "Irish" +msgstr "आयरिश" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "गलिशियन" + +msgid "Hebrew" +msgstr "हि‍ब्रू" + +msgid "Hindi" +msgstr "हिंदी" + +msgid "Croatian" +msgstr "क्रोयेशियन" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "हंगेरियन" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "इंतर्लिंगुआ" + +msgid "Indonesian" +msgstr "इन्डोनेशियन " + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "आयिस्लान्डिक" + +msgid "Italian" +msgstr "इटैलियन" + +msgid "Japanese" +msgstr "जपानी" + +msgid "Georgian" +msgstr "ज्योर्जियन" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "कज़ाख" + +msgid "Khmer" +msgstr "ख्मेर" + +msgid "Kannada" +msgstr "कन्‍नड़" + +msgid "Korean" +msgstr "कोरियन" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "लक्संबर्गी" + +msgid "Lithuanian" +msgstr "लिथुवेनियन" + +msgid "Latvian" +msgstr "लात्वियन" + +msgid "Macedonian" +msgstr "मेसिडोनियन" + +msgid "Malayalam" +msgstr "मलयालम" + +msgid "Mongolian" +msgstr "मंगोलियन" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "बर्मीज़" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "नेपाली" + +msgid "Dutch" +msgstr "डच" + +msgid "Norwegian Nynorsk" +msgstr "नार्वेजियन नायनॉर्स्क" + +msgid "Ossetic" +msgstr "ओस्सेटिक" + +msgid "Punjabi" +msgstr "पंजाबी" + +msgid "Polish" +msgstr "पोलिश" + +msgid "Portuguese" +msgstr "पुर्तगाली" + +msgid "Brazilian Portuguese" +msgstr "ब्रजिलियन पुर्तगाली" + +msgid "Romanian" +msgstr "रोमानियन" + +msgid "Russian" +msgstr "रूसी" + +msgid "Slovak" +msgstr "स्लोवाक" + +msgid "Slovenian" +msgstr "स्लोवेनियन" + +msgid "Albanian" +msgstr "अल्बेनियन्" + +msgid "Serbian" +msgstr "सर्बियन" + +msgid "Serbian Latin" +msgstr "सर्बियाई लैटिन" + +msgid "Swedish" +msgstr "स्वीडिश" + +msgid "Swahili" +msgstr "स्वाहिली" + +msgid "Tamil" +msgstr "तमिल" + +msgid "Telugu" +msgstr "तेलुगु" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "थाई" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "तुर्किश" + +msgid "Tatar" +msgstr "तातार" + +msgid "Udmurt" +msgstr "उद्मर्त" + +msgid "Ukrainian" +msgstr "यूक्रानियन" + +msgid "Urdu" +msgstr "उर्दू" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "वियतनामी" + +msgid "Simplified Chinese" +msgstr "सरल चीनी" + +msgid "Traditional Chinese" +msgstr "पारम्परिक चीनी" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "एक मान्य मूल्य दर्ज करें" + +msgid "Enter a valid URL." +msgstr "वैध यू.आर.एल भरें ।" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "वैध डाक पता प्रविष्ट करें।" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "वैध आइ.पि वी 4 पता भरें ।" + +msgid "Enter a valid IPv6 address." +msgstr "वैध IPv6 पता दर्ज करें." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "वैध IPv4 या IPv6 पता दर्ज करें." + +msgid "Enter only digits separated by commas." +msgstr "अल्पविराम अंक मात्र ही भरें ।" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"सुनिश्चित करें कि यह मान %(limit_value)s (यह\n" +" %(show_value)s है) है ।" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "सुनिश्चित करें कि यह मान %(limit_value)s से कम या बराबर है ।" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "सुनिश्चित करें यह मान %(limit_value)s से बड़ा या बराबर है ।" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "एक संख्या दर्ज करें ।" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "और" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "यह मूल्य खाली नहीं हो सकता ।" + +msgid "This field cannot be blank." +msgstr "इस फ़ील्ड रिक्त नहीं हो सकता है." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "इस %(field_label)s के साथ एक %(model_name)s पहले से ही उपस्थित है ।" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "फील्ड के प्रकार: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "बूलियन (सही अथ‌वा गलत)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "स्ट्रिंग (अधिकतम लम्बाई %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "अल्पविराम सीमांकित संख्या" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "तिथि (बिना समय)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "तिथि (समय के साथ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "दशमलव संख्या" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "ईमेल पता" + +msgid "File path" +msgstr "संचिका पथ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "चल बिन्दु संख्या" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "पूर्णांक" + +msgid "Big (8 byte) integer" +msgstr "बड़ा (8 बाइट) पूर्णांक " + +msgid "IPv4 address" +msgstr "IPv4 पता" + +msgid "IP address" +msgstr "आइ.पि पता" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "बूलियन (सही, गलत या कुछ नहीं)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "धनात्मक पूर्णांक" + +msgid "Positive small integer" +msgstr "धनात्मक छोटा पूर्णांक" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "स्लग (%(max_length)s तक)" + +msgid "Small integer" +msgstr "छोटा पूर्णांक" + +msgid "Text" +msgstr "पाठ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "समय" + +msgid "URL" +msgstr "यू.आर.एल" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "फाइल" + +msgid "Image" +msgstr "छवि" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "विदेशी कुंजी (संबंधित क्षेत्र के द्वारा प्रकार निर्धारित)" + +msgid "One-to-one relationship" +msgstr "एक-एक संबंध" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "बहुत से कई संबंध" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "यह क्षेत्र अपेक्षित हैं" + +msgid "Enter a whole number." +msgstr "एक पूर्ण संख्या दर्ज करें ।" + +msgid "Enter a valid date." +msgstr "वैध तिथि भरें ।" + +msgid "Enter a valid time." +msgstr "वैध समय भरें ।" + +msgid "Enter a valid date/time." +msgstr "वैध तिथि/समय भरें ।" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "कोई संचिका निवेदित नहीं हुई । कृपया कूटलेखन की जाँच करें ।" + +msgid "No file was submitted." +msgstr "कोई संचिका निवेदित नहीं हुई ।" + +msgid "The submitted file is empty." +msgstr "निवेदित संचिका खाली है ।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "कृपया या फ़ाइल प्रस्तुत करे या साफ जांचपेटी की जाँच करे,दोनों नहीं ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "वैध चित्र निवेदन करें । आप के द्वारा निवेदित संचिका अमान्य अथवा दूषित है ।" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "मान्य इच्छा चयन करें । %(value)s लभ्य इच्छाओं में उप्लब्ध नहीं हैं ।" + +msgid "Enter a list of values." +msgstr "मूल्य सूची दर्ज करें ।" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "छाटें" + +msgid "Delete" +msgstr "मिटाएँ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "कृपया %(field)s के लिए डुप्लिकेट डेटा को सही करे." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "कृपया %(field)s के डुप्लिकेट डेटा जो अद्वितीय होना चाहिए को सही करें." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"कृपया %(field_name)s के लिए डुप्लिकेट डेटा को सही करे जो %(date_field)s में " +"%(lookup)s के लिए अद्वितीय होना चाहिए." + +msgid "Please correct the duplicate values below." +msgstr "कृपया डुप्लिकेट मानों को सही करें." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "मान्य विकल्प चयन करें । यह विकल्प उपस्थित विकल्पों में नहीं है ।" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "रिक्त करें" + +msgid "Currently" +msgstr "फिलहाल" + +msgid "Change" +msgstr "बदलें" + +msgid "Unknown" +msgstr "अनजान" + +msgid "Yes" +msgstr "हाँ" + +msgid "No" +msgstr "नहीं" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "हाँ,नहीं,शायद" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d बाइट" +msgstr[1] "%(size)d बाइट" + +#, python-format +msgid "%s KB" +msgstr "%s केबी " + +#, python-format +msgid "%s MB" +msgstr "%s मेबी " + +#, python-format +msgid "%s GB" +msgstr "%s जीबी " + +#, python-format +msgid "%s TB" +msgstr "%s टीबी" + +#, python-format +msgid "%s PB" +msgstr "%s पीबी" + +msgid "p.m." +msgstr "बजे" + +msgid "a.m." +msgstr "बजे" + +msgid "PM" +msgstr "बजे" + +msgid "AM" +msgstr "बजे" + +msgid "midnight" +msgstr "मध्यरात्री" + +msgid "noon" +msgstr "दोपहर" + +msgid "Monday" +msgstr "सोम‌वार" + +msgid "Tuesday" +msgstr "मंगलवार" + +msgid "Wednesday" +msgstr "बुधवार" + +msgid "Thursday" +msgstr "गुरूवार" + +msgid "Friday" +msgstr "शुक्रवार" + +msgid "Saturday" +msgstr "शनिवार" + +msgid "Sunday" +msgstr "रविवार" + +msgid "Mon" +msgstr "सोम" + +msgid "Tue" +msgstr "मंगल" + +msgid "Wed" +msgstr "बुध" + +msgid "Thu" +msgstr "गुरू" + +msgid "Fri" +msgstr "शुक्र" + +msgid "Sat" +msgstr "शनि" + +msgid "Sun" +msgstr "रवि" + +msgid "January" +msgstr "जनवरी" + +msgid "February" +msgstr "फ़रवरी" + +msgid "March" +msgstr "मार्च" + +msgid "April" +msgstr "अप्रैल" + +msgid "May" +msgstr "मई" + +msgid "June" +msgstr "जून" + +msgid "July" +msgstr "जुलाई" + +msgid "August" +msgstr "अगस्त" + +msgid "September" +msgstr "सितमबर" + +msgid "October" +msgstr "अक्टूबर" + +msgid "November" +msgstr "नवमबर" + +msgid "December" +msgstr "दिसमबर" + +msgid "jan" +msgstr "जन" + +msgid "feb" +msgstr "फ़र" + +msgid "mar" +msgstr "मा" + +msgid "apr" +msgstr "अप्र" + +msgid "may" +msgstr "मई" + +msgid "jun" +msgstr "जून" + +msgid "jul" +msgstr "जुल" + +msgid "aug" +msgstr "अग" + +msgid "sep" +msgstr "सित" + +msgid "oct" +msgstr "अक्ट" + +msgid "nov" +msgstr "नव" + +msgid "dec" +msgstr "दिस्" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "जनवरी." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "फ़रवरी." + +msgctxt "abbrev. month" +msgid "March" +msgstr "मार्च" + +msgctxt "abbrev. month" +msgid "April" +msgstr "अप्रैल" + +msgctxt "abbrev. month" +msgid "May" +msgstr "मई" + +msgctxt "abbrev. month" +msgid "June" +msgstr "जून" + +msgctxt "abbrev. month" +msgid "July" +msgstr "जुलाई" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "अग." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "सितम्बर." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "अक्टूबर" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "नवम्बर." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "दिसम्बर" + +msgctxt "alt. month" +msgid "January" +msgstr "जनवरी" + +msgctxt "alt. month" +msgid "February" +msgstr "फरवरी" + +msgctxt "alt. month" +msgid "March" +msgstr "मार्च" + +msgctxt "alt. month" +msgid "April" +msgstr "अप्रैल" + +msgctxt "alt. month" +msgid "May" +msgstr "मई" + +msgctxt "alt. month" +msgid "June" +msgstr "जून" + +msgctxt "alt. month" +msgid "July" +msgstr "जुलाई" + +msgctxt "alt. month" +msgid "August" +msgstr "अगस्त" + +msgctxt "alt. month" +msgid "September" +msgstr "सितंबर" + +msgctxt "alt. month" +msgid "October" +msgstr "अक्टूबर" + +msgctxt "alt. month" +msgid "November" +msgstr "नवंबर" + +msgctxt "alt. month" +msgid "December" +msgstr "दिसंबर" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "अथवा" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "कोई साल निर्दिष्ट नहीं किया गया " + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "कोई महीने निर्दिष्ट नहीं किया गया " + +msgid "No day specified" +msgstr "कोई दिन निर्दिष्ट नहीं किया गया " + +msgid "No week specified" +msgstr "कोई सप्ताह निर्दिष्ट नहीं किया गया " + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s उपलब्ध नहीं है" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"भविष्य %(verbose_name_plural)s उपलब्ध नहीं है क्योंकि %(class_name)s.allow_future " +"गलत है." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr " इस प्रश्न %(verbose_name)s से मेल नहीं खाते है" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "अवैध पन्ना (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "निर्देशिका अनुक्रमित की अनुमति यहाँ नहीं है." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s का अनुक्रमणिका" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/hi/__init__.py b/venv/Lib/site-packages/django/conf/locale/hi/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/hi/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hi/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3090f0f8b02a8a56baeb0d893ffad3af35003922 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lMy7szd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04b6*(*OVf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hi/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hi/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d87c33f90b55c87e8a09db879a16f107f72bd417 GIT binary patch literal 359 zcmYk2!D_-l6h&uDVr{KZyY9lR(3riH(!ppW7$eEJa2P5vGul{_kxU{qe^lrf30-yD zFL2ed(Ao?4!nuzJk0%<93!wD%^s#ua0PuN)|AGo0l;w>I1_)q~Kvp3YrV)+lL}vyu zSTz9cv(i|%2CZ3Xth#Xvm71c`U}j>@_ONq+x8rt|)NO?O^MU8P2$MPv1(2mO}pP4x@a^H`V-_M?D^yxJKi)vWBb&-flO1^{=|Xzx^yaeCaGUY z8B$wBMZ(iu(#JS=iUl3Snas^eCe}R4>5iv6I*J!m#yK~)Ve}HNxTI_yrYm7ZB3)V= o5rrFWJ;&BkWJ#FI&h~X*yGsNsHvInhFnOs$*LA3C%I7us4MA04(EtDd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hi/formats.py b/venv/Lib/site-packages/django/conf/locale/hi/formats.py new file mode 100644 index 000000000..ac078ec6c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hi/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "g:i A" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d-m-Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f7afa5d2fe61f1c26eb815313d4f0eaf076a79e5 GIT binary patch literal 19457 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..574a7ab76 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,1274 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# aljosa , 2011,2013 +# Berislav Lopac , 2013 +# Bojan Mihelač , 2012 +# Boni Đukić , 2017 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015-2016 +# Nino , 2013 +# senko , 2012 +# Ylodi , 2011 +# zmasek , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arapski" + +msgid "Asturian" +msgstr "Asturijski" + +msgid "Azerbaijani" +msgstr "Azarbejdžanac" + +msgid "Bulgarian" +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Belarusian" +msgstr "Bjeloruski" + +msgid "Bengali" +msgstr "Bengalski" + +msgid "Breton" +msgstr "Bretonski" + +msgid "Bosnian" +msgstr "Bošnjački" + +msgid "Catalan" +msgstr "Katalanski" + +msgid "Czech" +msgstr "Češki" + +msgid "Welsh" +msgstr "Velški" + +msgid "Danish" +msgstr "Danski" + +msgid "German" +msgstr "Njemački" + +msgid "Lower Sorbian" +msgstr "Donjolužičkosrpski" + +msgid "Greek" +msgstr "Grčki" + +msgid "English" +msgstr "Engleski" + +msgid "Australian English" +msgstr "Australski engleski" + +msgid "British English" +msgstr "Britanski engleski" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Španjolski" + +msgid "Argentinian Spanish" +msgstr "Argentinski španjolski" + +msgid "Colombian Spanish" +msgstr "Kolumbijski španjolski" + +msgid "Mexican Spanish" +msgstr "Meksički španjolski" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvanski Španjolski" + +msgid "Venezuelan Spanish" +msgstr "Venezuelanski Španjolski" + +msgid "Estonian" +msgstr "Estonski" + +msgid "Basque" +msgstr "Baskijski" + +msgid "Persian" +msgstr "Perzijski" + +msgid "Finnish" +msgstr "Finski" + +msgid "French" +msgstr "Francuski" + +msgid "Frisian" +msgstr "Frizijski" + +msgid "Irish" +msgstr "Irski" + +msgid "Scottish Gaelic" +msgstr "Škotski gaelski" + +msgid "Galician" +msgstr "Galičanski" + +msgid "Hebrew" +msgstr "Hebrejski" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Hrvatski" + +msgid "Upper Sorbian" +msgstr "Gornjolužičkosrpski" + +msgid "Hungarian" +msgstr "Mađarski" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezijski" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandski" + +msgid "Italian" +msgstr "Talijanski" + +msgid "Japanese" +msgstr "Japanski" + +msgid "Georgian" +msgstr "Gruzijski" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kazaški" + +msgid "Khmer" +msgstr "Kambođanski" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreanski" + +msgid "Luxembourgish" +msgstr "Luksemburški" + +msgid "Lithuanian" +msgstr "Litvanski" + +msgid "Latvian" +msgstr "Latvijski" + +msgid "Macedonian" +msgstr "Makedonski" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolski" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmanski" + +msgid "Norwegian Bokmål" +msgstr "Bokmål" + +msgid "Nepali" +msgstr "Nepalski" + +msgid "Dutch" +msgstr "Nizozemski" + +msgid "Norwegian Nynorsk" +msgstr "Norveški Nynorsk" + +msgid "Ossetic" +msgstr "Osetski" + +msgid "Punjabi" +msgstr "Pendžabljanin" + +msgid "Polish" +msgstr "Poljski" + +msgid "Portuguese" +msgstr "Portugalski" + +msgid "Brazilian Portuguese" +msgstr "Brazilski portugalski" + +msgid "Romanian" +msgstr "Rumunjski" + +msgid "Russian" +msgstr "Ruski" + +msgid "Slovak" +msgstr "Slovački" + +msgid "Slovenian" +msgstr "Slovenski" + +msgid "Albanian" +msgstr "Albanski" + +msgid "Serbian" +msgstr "Srpski" + +msgid "Serbian Latin" +msgstr "Latinski srpski" + +msgid "Swedish" +msgstr "Švedski" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamilski" + +msgid "Telugu" +msgstr "Teluški" + +msgid "Thai" +msgstr "Thai (tajlandski)" + +msgid "Turkish" +msgstr "Turski" + +msgid "Tatar" +msgstr "Tatarski" + +msgid "Udmurt" +msgstr "Udmurtski" + +msgid "Ukrainian" +msgstr "Ukrajinski" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vijetnamski" + +msgid "Simplified Chinese" +msgstr "Pojednostavljeni kineski" + +msgid "Traditional Chinese" +msgstr "Tradicionalni kineski" + +msgid "Messages" +msgstr "Poruke" + +msgid "Site Maps" +msgstr "Mape stranica" + +msgid "Static Files" +msgstr "Statične datoteke" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Broj stranice nije cijeli broj" + +msgid "That page number is less than 1" +msgstr "Broj stranice je manji od 1" + +msgid "That page contains no results" +msgstr "Stranica ne sadrži rezultate" + +msgid "Enter a valid value." +msgstr "Unesite ispravnu vrijednost." + +msgid "Enter a valid URL." +msgstr "Unesite ispravan URL." + +msgid "Enter a valid integer." +msgstr "Unesite vrijednost u obliku cijelog broja." + +msgid "Enter a valid email address." +msgstr "Unesite ispravnu e-mail adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Unesite ispravnu IPv6 adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Unesite ispravnu IPv4 ili IPv6 adresu." + +msgid "Enter only digits separated by commas." +msgstr "Unesite samo brojeve razdvojene zarezom." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Osigurajte da ova vrijednost ima %(limit_value)s (trenutno je " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Osigurajte da je ova vrijednost manja ili jednaka %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Osigurajte da je ova vrijednost veća ili jednaka %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." +msgstr[2] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." +msgstr[2] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." + +msgid "Enter a number." +msgstr "Unesite broj." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Osigurajte da nema više od ukupno %(max)s numeričkog znaka." +msgstr[1] "Osigurajte da nema više od ukupno %(max)s numerička znaka." +msgstr[2] "Osigurajte da nema više od ukupno %(max)s numeričkih znakova." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Osigurajte da nema više od ukupno %(max)s decimalnog mjesta." +msgstr[1] "Osigurajte da nema više od ukupno %(max)s decimalna mjesta." +msgstr[2] "Osigurajte da nema više od ukupno %(max)s decimalnih mjesta." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Osigurajte da nema više od ukupno %(max)s numberičkog znaka prije decimalne " +"točke." +msgstr[1] "" +"Osigurajte da nema više od ukupno %(max)s numberička znaka prije decimalne " +"točke." +msgstr[2] "" +"Osigurajte da nema više od ukupno %(max)s numberičkih znakova prije " +"decimalne točke." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s sa navedenim %(field_labels)s već postoji." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vrijednost %(value)r nije jedna od raspoloživih opcija." + +msgid "This field cannot be null." +msgstr "Ovo polje ne može biti null." + +msgid "This field cannot be blank." +msgstr "Ovo polje ne može biti prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s sa navedenim %(field_label)s već postoji." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s mora biti jedinstven pojam za %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True ili False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Slova (do %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Cijeli brojevi odvojeni zarezom" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (bez vremena/sati)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (sa vremenom/satima)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimalni broj" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Trajanje" + +msgid "Email address" +msgstr "E-mail adresa" + +msgid "File path" +msgstr "Put do datoteke" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Broj s pomičnim zarezom (floating point number)" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Cijeli broj" + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +msgid "IPv4 address" +msgstr "IPv4 adresa" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (True, False ili None)" + +msgid "Positive integer" +msgstr "Pozitivan cijeli broj" + +msgid "Positive small integer" +msgstr "Pozitivan mali cijeli broj" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "'Slug' (do %(max_length)s)" + +msgid "Small integer" +msgstr "Mali broj" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Vrijeme" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Binarni podaci" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Datoteka" + +msgid "Image" +msgstr "Slika" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s instanca sa %(field)s %(value)r ne postoji." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (type determined by related field)" + +msgid "One-to-one relationship" +msgstr "One-to-one relationship" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s veza" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s veze" + +msgid "Many-to-many relationship" +msgstr "Many-to-many relationship" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Unos za ovo polje je obavezan." + +msgid "Enter a whole number." +msgstr "Unesite cijeli broj." + +msgid "Enter a valid date." +msgstr "Unesite ispravan datum." + +msgid "Enter a valid time." +msgstr "Unesite ispravno vrijeme." + +msgid "Enter a valid date/time." +msgstr "Unesite ispravan datum/vrijeme." + +msgid "Enter a valid duration." +msgstr "Unesite ispravno trajanje." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Datoteka nije poslana. Provjerite 'encoding type' forme." + +msgid "No file was submitted." +msgstr "Datoteka nije poslana." + +msgid "The submitted file is empty." +msgstr "Poslana datoteka je prazna." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znak (ima %(length)d)." +msgstr[1] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znakova (ima %(length)d)." +msgstr[2] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znakova (ima %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Molimo Vas da pošaljete ili datoteku ili označite izbor, a ne oboje." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Upload-ajte ispravnu sliku. Datoteka koju ste upload-ali ili nije slika ili " +"je oštečena." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Odaberite iz ponuđenog. %(value)s nije ponuđen kao opcija." + +msgid "Enter a list of values." +msgstr "Unesite listu vrijednosti." + +msgid "Enter a complete value." +msgstr "Unesite kompletnu vrijednost." + +msgid "Enter a valid UUID." +msgstr "Unesite ispravan UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skriveno polje %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm podaci nedostaju ili su promijenjeni" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Molimo unesite %d obrazac." +msgstr[1] "Molimo unesite %d ili manje obrazaca." +msgstr[2] "Molimo unesite %d ili manje obrazaca." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Molimo unesite %d ili više obrazaca." +msgstr[1] "Molimo unesite %d ili više obrazaca." +msgstr[2] "Molimo unesite %d ili više obrazaca." + +msgid "Order" +msgstr "Redoslijed:" + +msgid "Delete" +msgstr "Izbriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ispravite duplicirane podatke za %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Molimo ispravite duplicirane podatke za %(field)s, koji moraju biti " +"jedinstveni." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Molimo ispravite duplicirane podatke za %(field_name)s koji moraju biti " +"jedinstveni za %(lookup)s u %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Molimo ispravite duplicirane vrijednosti ispod." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Izaberite ispravnu opciju. Ta opcija nije jedna od dostupnih opcija." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Isprazni" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Promijeni" + +msgid "Unknown" +msgstr "Nepoznat pojam" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "da,ne,možda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d byte-a" +msgstr[2] "%(size)d byte-a" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "popodne" + +msgid "a.m." +msgstr "ujutro" + +msgid "PM" +msgstr "popodne" + +msgid "AM" +msgstr "ujutro" + +msgid "midnight" +msgstr "ponoć" + +msgid "noon" +msgstr "podne" + +msgid "Monday" +msgstr "Ponedjeljak" + +msgid "Tuesday" +msgstr "Utorak" + +msgid "Wednesday" +msgstr "Srijeda" + +msgid "Thursday" +msgstr "Četvrtak" + +msgid "Friday" +msgstr "Petak" + +msgid "Saturday" +msgstr "Subota" + +msgid "Sunday" +msgstr "Nedjelja" + +msgid "Mon" +msgstr "Pon" + +msgid "Tue" +msgstr "Uto" + +msgid "Wed" +msgstr "Sri" + +msgid "Thu" +msgstr "Čet" + +msgid "Fri" +msgstr "Pet" + +msgid "Sat" +msgstr "Sub" + +msgid "Sun" +msgstr "Ned" + +msgid "January" +msgstr "Siječanj" + +msgid "February" +msgstr "Veljača" + +msgid "March" +msgstr "Ožujak" + +msgid "April" +msgstr "Travanj" + +msgid "May" +msgstr "Svibanj" + +msgid "June" +msgstr "Lipanj" + +msgid "July" +msgstr "Srpanj" + +msgid "August" +msgstr "Kolovoz" + +msgid "September" +msgstr "Rujan" + +msgid "October" +msgstr "Listopad" + +msgid "November" +msgstr "Studeni" + +msgid "December" +msgstr "Prosinac" + +msgid "jan" +msgstr "sij." + +msgid "feb" +msgstr "velj." + +msgid "mar" +msgstr "ožu." + +msgid "apr" +msgstr "tra." + +msgid "may" +msgstr "svi." + +msgid "jun" +msgstr "lip." + +msgid "jul" +msgstr "srp." + +msgid "aug" +msgstr "kol." + +msgid "sep" +msgstr "ruj." + +msgid "oct" +msgstr "lis." + +msgid "nov" +msgstr "stu." + +msgid "dec" +msgstr "pro." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Sij." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Velj." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Ožu." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Tra." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Svi." + +msgctxt "abbrev. month" +msgid "June" +msgstr "Lip." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Srp." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Kol." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Ruj." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Lis." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Stu." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Pro." + +msgctxt "alt. month" +msgid "January" +msgstr "siječnja" + +msgctxt "alt. month" +msgid "February" +msgstr "veljače" + +msgctxt "alt. month" +msgid "March" +msgstr "ožujka" + +msgctxt "alt. month" +msgid "April" +msgstr "travnja" + +msgctxt "alt. month" +msgid "May" +msgstr "svibnja" + +msgctxt "alt. month" +msgid "June" +msgstr "lipnja" + +msgctxt "alt. month" +msgid "July" +msgstr "srpnja" + +msgctxt "alt. month" +msgid "August" +msgstr "kolovoza" + +msgctxt "alt. month" +msgid "September" +msgstr "rujna" + +msgctxt "alt. month" +msgid "October" +msgstr "listopada" + +msgctxt "alt. month" +msgid "November" +msgstr "studenoga" + +msgctxt "alt. month" +msgid "December" +msgstr "prosinca" + +msgid "This is not a valid IPv6 address." +msgstr "To nije ispravna IPv6 adresa." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ili" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d godina" +msgstr[1] "%d godina" +msgstr[2] "%d godina" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mjesec" +msgstr[1] "%d mjeseci" +msgstr[2] "%d mjeseci" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tjedan" +msgstr[1] "%d tjedna" +msgstr[2] "%d tjedana" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dana" +msgstr[1] "%d dana" +msgstr[2] "%d dana" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d sat" +msgstr[1] "%d sati" +msgstr[2] "%d sati" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutu" +msgstr[1] "%d minute" +msgstr[2] "%d minuta" + +msgid "0 minutes" +msgstr "0 minuta" + +msgid "Forbidden" +msgstr "Zabranjeno" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifikacija nije uspjela. Zahtjev je prekinut." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ova poruka vam se prikazuje jer stranica na kojoj se nalazite zahtjeva CSRF " +"kolačić prilikom slanja forme. Navedeni kolačić je obavezan iz sigurnosnih " +"razloga, kako bi se osiguralo da vaš internetski preglednik ne bude otet od " +"strane trećih osoba." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Dodatne informacije su dostupne sa postavkom DEBUG=True." + +msgid "No year specified" +msgstr "Nije navedena godina" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Nije naveden mjesec" + +msgid "No day specified" +msgstr "Nije naveden dan" + +msgid "No week specified" +msgstr "Tjedan nije određen" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nije dostupno: %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s nije dostupno jer je %(class_name)s.allow_future " +"False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s - pretragom nisu pronađeni rezultati za upit" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nevažeća stranica (%(page_number)s):%(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Sadržaji direktorija ovdje nisu dozvoljeni." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Sadržaj direktorija %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/hr/__init__.py b/venv/Lib/site-packages/django/conf/locale/hr/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/hr/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hr/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e4fd20ef997be0cbba2a1df81b1694620625a02 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lMv;Ded}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04l^Z+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hr/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hr/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17e62ebbcd2049247fd0bd711991779e3549ce99 GIT binary patch literal 962 zcmZva!H$|h9L7OWQP#DZZkzPPg@Z{Q@1|)=R}j+$3}6~3q=a?QYDG2-ZX%Dsg!dBscCf$LO@jGX{PmimUPgqq`WliNnuYyXmPjZ?nz78u9>&Mirx&9 z?()Or?$`gL)ZacS6cVyfdg?r(K#vo$!UOyEjs^E+^7V~w6ADAwQ9RYOblHJ|Gu98H zMJq+no++~B>89amnc>Bg8p^Ybv~A6_9Iu#qk)xwHb!^#m<;*ix@3W$Of}Ka(*qBV6 z=R6y}I<#@j+e77YtjkxPtxRM~c1#O)9L=2CvN0^MmNC^oDwa30%;{uojD9e2g&h5H zcnB^B?i2?xcC8)8zB`QOyD-=$*d47BZFlXes~9J}NgS<%dE(v%+gtZ)b?xF+67+8T z`8R(VU>B|Z?K0}mqwS)XS)9MAh_o-4;H)$?9OVhp|-Tn!%hTw87s z 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..6a396965d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-23 23:48+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Afrikaanšćina" + +msgid "Arabic" +msgstr "Arabšćina" + +msgid "Algerian Arabic" +msgstr "Algeriska arabšćina" + +msgid "Asturian" +msgstr "Asturišćina" + +msgid "Azerbaijani" +msgstr "Azerbajdźanšćina" + +msgid "Bulgarian" +msgstr "Bołharšćina" + +msgid "Belarusian" +msgstr "Běłorušćina" + +msgid "Bengali" +msgstr "Bengalšćina" + +msgid "Breton" +msgstr "Bretonšćina" + +msgid "Bosnian" +msgstr "Bosnišćina" + +msgid "Catalan" +msgstr "Katalanšćina" + +msgid "Czech" +msgstr "Čěšćina" + +msgid "Welsh" +msgstr "Walizišćina" + +msgid "Danish" +msgstr "Danšćina" + +msgid "German" +msgstr "Němčina" + +msgid "Lower Sorbian" +msgstr "Delnjoserbšćina" + +msgid "Greek" +msgstr "Grjekšćina" + +msgid "English" +msgstr "Jendźelšćina" + +msgid "Australian English" +msgstr "Awstralska jendźelšćina" + +msgid "British English" +msgstr "Britiska jendźelšćina" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Španišćina" + +msgid "Argentinian Spanish" +msgstr "Argentinska španišćina" + +msgid "Colombian Spanish" +msgstr "Kolumbiska španišćina" + +msgid "Mexican Spanish" +msgstr "Mexiska španišćina" + +msgid "Nicaraguan Spanish" +msgstr "Nikaraguaska španišćina" + +msgid "Venezuelan Spanish" +msgstr "Venezuelska španišćina" + +msgid "Estonian" +msgstr "Estišćina" + +msgid "Basque" +msgstr "Baskišćina" + +msgid "Persian" +msgstr "Persišćina" + +msgid "Finnish" +msgstr "Finšćina" + +msgid "French" +msgstr "Francošćina" + +msgid "Frisian" +msgstr "Frizišćina" + +msgid "Irish" +msgstr "Irišćina" + +msgid "Scottish Gaelic" +msgstr "Šotiska gaelšćina" + +msgid "Galician" +msgstr "Galicišćina" + +msgid "Hebrew" +msgstr "Hebrejšćina" + +msgid "Hindi" +msgstr "Hindišćina" + +msgid "Croatian" +msgstr "Chorwatšćina" + +msgid "Upper Sorbian" +msgstr "Hornjoserbšćina" + +msgid "Hungarian" +msgstr "Madźaršćina" + +msgid "Armenian" +msgstr "Armenšćina" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezišćina" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandšćina" + +msgid "Italian" +msgstr "Italšćina" + +msgid "Japanese" +msgstr "Japanšćina" + +msgid "Georgian" +msgstr "Georgišćina" + +msgid "Kabyle" +msgstr "Kabylšćina" + +msgid "Kazakh" +msgstr "Kazachšćina" + +msgid "Khmer" +msgstr "Khmeršćina" + +msgid "Kannada" +msgstr "Kannadšćina" + +msgid "Korean" +msgstr "Korejšćina" + +msgid "Kyrgyz" +msgstr "Kirgišćina" + +msgid "Luxembourgish" +msgstr "Luxemburgšćina" + +msgid "Lithuanian" +msgstr "Litawšćina" + +msgid "Latvian" +msgstr "Letišćina" + +msgid "Macedonian" +msgstr "Makedonšćina" + +msgid "Malayalam" +msgstr "Malajalam" + +msgid "Mongolian" +msgstr "Mongolšćina" + +msgid "Marathi" +msgstr "Marathišćina" + +msgid "Malay" +msgstr "Malajšćina" + +msgid "Burmese" +msgstr "Myanmaršćina" + +msgid "Norwegian Bokmål" +msgstr "Norwegski bokmål" + +msgid "Nepali" +msgstr "Nepalšćina" + +msgid "Dutch" +msgstr "Nižozemšćina" + +msgid "Norwegian Nynorsk" +msgstr "Norwegski nynorsk" + +msgid "Ossetic" +msgstr "Osetšćina" + +msgid "Punjabi" +msgstr "Pundźabišćina" + +msgid "Polish" +msgstr "Pólšćina" + +msgid "Portuguese" +msgstr "Portugalšćina" + +msgid "Brazilian Portuguese" +msgstr "Brazilska portugalšćina" + +msgid "Romanian" +msgstr "Rumunšćina" + +msgid "Russian" +msgstr "Rušćina" + +msgid "Slovak" +msgstr "Słowakšćina" + +msgid "Slovenian" +msgstr "Słowjenšćina" + +msgid "Albanian" +msgstr "Albanšćina" + +msgid "Serbian" +msgstr "Serbišćina" + +msgid "Serbian Latin" +msgstr "Serbšćina, łaćonska" + +msgid "Swedish" +msgstr "Šwedšćina" + +msgid "Swahili" +msgstr "Suahelšćina" + +msgid "Tamil" +msgstr "Tamilšćina" + +msgid "Telugu" +msgstr "Telugušćina" + +msgid "Tajik" +msgstr "Tadźikišćina" + +msgid "Thai" +msgstr "Thaišćina" + +msgid "Turkmen" +msgstr "Turkmenšćina" + +msgid "Turkish" +msgstr "Turkowšćina" + +msgid "Tatar" +msgstr "Tataršćina" + +msgid "Udmurt" +msgstr "Udmurtšćina" + +msgid "Ukrainian" +msgstr "Ukrainšćina" + +msgid "Urdu" +msgstr "Urdušćina" + +msgid "Uzbek" +msgstr "Uzbekšćina" + +msgid "Vietnamese" +msgstr "Vietnamšćina" + +msgid "Simplified Chinese" +msgstr "Zjednorjene chinšćina" + +msgid "Traditional Chinese" +msgstr "Tradicionalna chinšćina" + +msgid "Messages" +msgstr "Powěsće" + +msgid "Site Maps" +msgstr "Přehlady sydła" + +msgid "Static Files" +msgstr "Statiske dataje" + +msgid "Syndication" +msgstr "Syndikacija" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Tute čisko strony cyła ličba njeje." + +msgid "That page number is less than 1" +msgstr "Tute čisło strony je mjeńše hač 1." + +msgid "That page contains no results" +msgstr "Tuta strona wuslědki njewobsahuje" + +msgid "Enter a valid value." +msgstr "Zapodajće płaćiwu hódnotu." + +msgid "Enter a valid URL." +msgstr "Zapodajće płaćiwy URL." + +msgid "Enter a valid integer." +msgstr "Zapodajće płaćiwu cyłu ličbu." + +msgid "Enter a valid email address." +msgstr "Zapodajće płaćiwu e-mejlowu adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Zapodajće płaćiwe adresowe mjeno, kotrež jenož pismiki, ličby, podsmužki abo " +"wjazawki wobsahuje." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Zapodajće płaćiwe „adresowe mjeno“, kotrež jenož pismiki, ličby, podsmužki " +"abo wjazawki wobsahuje." + +msgid "Enter a valid IPv4 address." +msgstr "Zapodajće płaćiwu IPv4-adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Zapodajće płaćiwu IPv6-adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Zapodajće płaćiwu IPv4- abo IPv6-adresu." + +msgid "Enter only digits separated by commas." +msgstr "Zapodajće jenož přez komy dźělene cyfry," + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Zawěsćće, zo tuta hódnota je %(limit_value)s (je %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Zawěsćće, zo hódnota je mjeńša hač abo runja %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Zawěsćće, zo tuta hódnota je wjetša hač abo runja %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zawěsćće, zo tuta hódnota ma znajmjeńša %(limit_value)d znamješko (ma " +"%(show_value)d)." +msgstr[1] "" +"Zawěsćće, zo tuta hódnota ma znajmjeńša %(limit_value)d znamješce (ma " +"%(show_value)d)." +msgstr[2] "" +"Zawěsćće, zo tuta hódnota ma znajmjeńša %(limit_value)d znamješka (ma " +"%(show_value)d)." +msgstr[3] "" +"Zawěsćće, zo tuta hódnota ma znajmjeńša %(limit_value)d znamješkow (ma " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zawěsćće, zo tuta hódnota ma maksimalnje %(limit_value)d znamješko (ima " +"%(show_value)d)." +msgstr[1] "" +"Zawěsćće, zo tuta hódnota ma maksimalnje %(limit_value)d znamješce (ima " +"%(show_value)d)." +msgstr[2] "" +"Zawěsćće, zo tuta hódnota ma maksimalnje %(limit_value)d znamješka (ima " +"%(show_value)d)." +msgstr[3] "" +"Zawěsćće, zo tuta hódnota ma maksimalnje %(limit_value)d znamješkow (ima " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Zapodajće ličbu." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Zawěsćće, zo njeje wjace hač %(max)s cyfry dohromady." +msgstr[1] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow dohromady." +msgstr[2] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow dohromady." +msgstr[3] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow dohromady." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Zawěsćće, zo njeje wjace hač %(max)s decimalneho městna." +msgstr[1] "Zawěsćće, zo njeje wjace hač %(max)s decimalneju městnow." +msgstr[2] "Zawěsćće, zo njeje wjace hač %(max)s decimalnych městnow." +msgstr[3] "Zawěsćće, zo njeje wjace hač %(max)s decimalnych městnow." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Zawěsćće, zo njeje wjace hač %(max)s cyfry před decimalnej komu." +msgstr[1] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow před decimalnej komu." +msgstr[2] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow před decimalnej komu." +msgstr[3] "Zawěsćće, zo njeje wjace hač %(max)s cyfrow před decimalnej komu." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Datajowy sufiks ' %(extension)s' dowoleny njeje. Dowolene sufiksy su: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Prózdne znamješka dowolene njejsu." + +msgid "and" +msgstr "a" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s z tutym %(field_labels)s hižo eksistuje." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Hódnota %(value)r płaćiwa wólba njeje." + +msgid "This field cannot be null." +msgstr "Tute polo njesmě nul być." + +msgid "This field cannot be blank." +msgstr "Tute polo njesmě prózdne być." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s z tutym %(field_label)s hižo eksistuje." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s dyrbi za %(date_field_label)s %(lookup_type)s jónkróćne być." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polo typa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Hódnota „%(value)s“ dyrbi pak True pak False być." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Hódnota „%(value)s“ dyrbi pak True, False pak None być." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (pak True pak False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Znamješkowy rjećazk (hač %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Cyłe ličby dźělene přez komu" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Hódnota „%(value)s“ ma njepłaćiwy datumowy format. Dyrbi we formaće DD.MM." +"YYYY być." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Hódnota „%(value)s“ ma korektny format (DD.MM.YYYY), ale je njepłaćiwy datum." + +msgid "Date (without time)" +msgstr "Datum (bjez časa)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće DD.MM.YYYY HH:MM[:" +"ss[.uuuuuu]][TZ] być." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Hódnota „%(value)s“ ma korektny format (DD.MM.YYYY HH:MM[:ss[.uuuuuu]][TZ]), " +"ale je njepłaćiwy datum/čas." + +msgid "Date (with time)" +msgstr "Datum (z časom)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Hódnota „%(value)s“ dyrbi decimalna ličba być." + +msgid "Decimal number" +msgstr "Decimalna ličba" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi w formaće [DD] [HH:[MM:]]ss[." +"uuuuuu] być." + +msgid "Duration" +msgstr "Traće" + +msgid "Email address" +msgstr "E-mejlowa adresa" + +msgid "File path" +msgstr "Datajowa šćežka" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Hódnota „%(value)s“ dyrbi decimalna ličba być." + +msgid "Floating point number" +msgstr "Komowa ličba typa float" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Hódnota „%(value)s“ dyrbi integer być." + +msgid "Integer" +msgstr "Integer" + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +msgid "Small integer" +msgstr "Mała cyła ličba" + +msgid "IPv4 address" +msgstr "IPv4-adresa" + +msgid "IP address" +msgstr "IP-adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Hódnota „%(value)s“ dyrbi pak None, True pak False być." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (pak True, False pak None)" + +msgid "Positive big integer" +msgstr "Pozitiwna wulka cyła ličba" + +msgid "Positive integer" +msgstr "Pozitiwna cyła ličba" + +msgid "Positive small integer" +msgstr "Pozitiwna mała cyła ličba" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Adresowe mjeno (hač %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće HH:MM[:ss[." +"uuuuuu]] być." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Hódnota „%(value)s“ ma korektny format (HH:MM[:ss[.uuuuuu]]), ale je " +"njepłaćiwy čas." + +msgid "Time" +msgstr "Čas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Hrube binarne daty" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "„%(value)s“ płaćiwy UUID njeje." + +msgid "Universally unique identifier" +msgstr "Uniwerselnje jónkróćny identifikator" + +msgid "File" +msgstr "Dataja" + +msgid "Image" +msgstr "Wobraz" + +msgid "A JSON object" +msgstr "JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Hódnota dyrbi płaćiwy JSON być." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Instanca %(model)s z %(field)s %(value)r njeeksistuje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Cuzy kluč (typ so přez wotpowědne polo postaja)" + +msgid "One-to-one relationship" +msgstr "Poćah jedyn jedyn" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Poćah %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Poćahi %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Poćah wjele wjele" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Tute polo je trěbne." + +msgid "Enter a whole number." +msgstr "Zapodajće cyłu ličbu." + +msgid "Enter a valid date." +msgstr "Zapodajće płaćiwy datum." + +msgid "Enter a valid time." +msgstr "Zapodajće płaćiwy čas." + +msgid "Enter a valid date/time." +msgstr "Zapodajće płaćiwy datum/čas." + +msgid "Enter a valid duration." +msgstr "Zapodajće płaćiwe traće." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Ličba dnjow dyrbi mjez {min_days} a {max_days} być." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Žana dataja je so pósłała. Přepruwujće kodowanski typ we formularje." + +msgid "No file was submitted." +msgstr "Žana dataja je so pósłała." + +msgid "The submitted file is empty." +msgstr "Pósłana dataja je prózdna." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Zawěsćće, zo tute datajowe mjeno ma maksimalnje %(max)d znamješko (ma " +"%(length)d)." +msgstr[1] "" +"Zawěsćće, zo tute datajowe mjeno ma maksimalnje %(max)d znamješce (ma " +"%(length)d)." +msgstr[2] "" +"Zawěsćće, zo tute datajowe mjeno ma maksimalnje %(max)d znamješka (ma " +"%(length)d)." +msgstr[3] "" +"Zawěsćće, zo tute datajowe mjeno ma maksimalnje %(max)d znamješkow (ma " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Prošu zapodajće dataju abo stajće hóčku do kontrolneho kašćika, nic wobě." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Nahrajće płaćiwy wobraz. Dataja, kotruž sće nahrał, pak njebě wobraz pak bě " +"wobškodźeny wobraz. " + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Wubjerće płaćiwu wolensku móžnosć. %(value)s žana k dispoziciji stejacych " +"wolenskich móžnosćow njeje. " + +msgid "Enter a list of values." +msgstr "Zapodajće lisćinu hódnotow." + +msgid "Enter a complete value." +msgstr "Zapodajće dospołnu hódnotu." + +msgid "Enter a valid UUID." +msgstr "Zapodajće płaćiwy UUID." + +msgid "Enter a valid JSON." +msgstr "Zapodajće płaćiwy JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Schowane polo field %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Daty ManagementForm faluja abo su skepsane. Falowace pola: %(field_names)s. " +"Móžeće zmylkowu rozprawu spisać, jeli problem dale eksistuje." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Prošu wotpósćelće maksimalnje %d formular." +msgstr[1] "Prošu wotpósćelće maksimalnje %d formularaj." +msgstr[2] "Prošu wotpósćelće maksimalnje %d formulary." +msgstr[3] "Prošu wotpósćelće maksimalnje %d formularow." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Prošu wotpósćelće minimalnje %d formular." +msgstr[1] "Prošu wotpósćelće minimalnje %d formularaj." +msgstr[2] "Prošu wotpósćelće minimalnje %d formulary." +msgstr[3] "Prošu wotpósćelće minimalnje %d formularow." + +msgid "Order" +msgstr "Porjad" + +msgid "Delete" +msgstr "Zhašeć" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Prošu porjedźće dwójne daty za %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Prošu porjedźće dwójne daty za %(field)s, kotrež dyrbja jónkróćne być." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Prošu porjedźće dwójne daty za %(field_name)s, kotrež dyrbja za %(lookup)s w " +"%(date_field)s jónkróćne być." + +msgid "Please correct the duplicate values below." +msgstr "Prošu porjedźće slědowace dwójne hódnoty." + +msgid "The inline value did not match the parent instance." +msgstr "Hódnota inline nadrjadowanej instancy njewotpowěduje." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Wubjerće płaćiwu wolensku móžnosć. Tuta wolenska móžnosć jedna z k " +"dispoziciji stejacych wolenskich móžnosćow njeje." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" płaćiwa hódnota njeje." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s njeda so w časowym pasmje %(current_timezone)s interpretować; " +"je snano dwuzmyslny abo njeeksistuje." + +msgid "Clear" +msgstr "Zhašeć" + +msgid "Currently" +msgstr "Tuchwilu" + +msgid "Change" +msgstr "Změnić" + +msgid "Unknown" +msgstr "Njeznaty" + +msgid "Yes" +msgstr "Haj" + +msgid "No" +msgstr "Ně" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "haj,ně,snano" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajtaj" +msgstr[2] "%(size)d bajty" +msgstr[3] "%(size)d bajtow" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "popołdnju" + +msgid "a.m." +msgstr "dopołdnja" + +msgid "PM" +msgstr "popołdnju" + +msgid "AM" +msgstr "dopołdnja" + +msgid "midnight" +msgstr "połnoc" + +msgid "noon" +msgstr "připołdnjo" + +msgid "Monday" +msgstr "Póndźela" + +msgid "Tuesday" +msgstr "Wutora" + +msgid "Wednesday" +msgstr "Srjeda" + +msgid "Thursday" +msgstr "Štwórtk" + +msgid "Friday" +msgstr "Pjatk" + +msgid "Saturday" +msgstr "Sobota" + +msgid "Sunday" +msgstr "Njedźela" + +msgid "Mon" +msgstr "Pón" + +msgid "Tue" +msgstr "Wut" + +msgid "Wed" +msgstr "Srj" + +msgid "Thu" +msgstr "Štw" + +msgid "Fri" +msgstr "Pja" + +msgid "Sat" +msgstr "Sob" + +msgid "Sun" +msgstr "Nje" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Měrc" + +msgid "April" +msgstr "Apryl" + +msgid "May" +msgstr "Meja" + +msgid "June" +msgstr "Junij" + +msgid "July" +msgstr "Julij" + +msgid "August" +msgstr "Awgust" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "Nowember" + +msgid "December" +msgstr "December" + +msgid "jan" +msgstr "jan." + +msgid "feb" +msgstr "feb." + +msgid "mar" +msgstr "měr." + +msgid "apr" +msgstr "apr." + +msgid "may" +msgstr "mej." + +msgid "jun" +msgstr "jun." + +msgid "jul" +msgstr "jul." + +msgid "aug" +msgstr "awg." + +msgid "sep" +msgstr "sep." + +msgid "oct" +msgstr "okt." + +msgid "nov" +msgstr "now." + +msgid "dec" +msgstr "dec." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Měrc" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Apryl" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Meja" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junij" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julij" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Awg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Now." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Měrc" + +msgctxt "alt. month" +msgid "April" +msgstr "Apryl" + +msgctxt "alt. month" +msgid "May" +msgstr "Meja" + +msgctxt "alt. month" +msgid "June" +msgstr "Junij" + +msgctxt "alt. month" +msgid "July" +msgstr "Julij" + +msgctxt "alt. month" +msgid "August" +msgstr "Awgust" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "Nowember" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "To płaćiwa IPv6-adresa njeje." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "abo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)dlěće" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsac" +msgstr[1] "%(num)d měsacaj" +msgstr[2] "%(num)d měsacy" +msgstr[3] "%(num)d měsacow" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydźeń" +msgstr[1] "%(num)d njedźeli" +msgstr[2] "%(num)d njedźele" +msgstr[3] "%(num)d njedźel" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dźeń" +msgstr[1] "%(num)d dnjej" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodźina" +msgstr[1] "%(num)d hodźinje" +msgstr[2] "%(num)d hodźiny" +msgstr[3] "%(num)d hodźin" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d mjeńšina" +msgstr[1] "%(num)d mjeńšinje" +msgstr[2] "%(num)d mjeńšiny" +msgstr[3] "%(num)d mjeńšin" + +msgid "Forbidden" +msgstr "Zakazany" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-přepruwowanje je so nimokuliło. Naprašowanje je so přetorhnyło." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Widźiće tutu zdźělenku, dokelž tute HTTPS-sydło \"Referer header\" trjeba, " +"kotryž so ma na waš webwobhladowak pósłać, ale žadyn njeje so pósłał. Tutón " +"header je z wěstotnych přičinow trěbny, zo by so zawěsćiło, zo waš " +"wobhladowak so wot třećich njekapruje." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Jei sće swój wobhladowak tak konfigurował, zo su hłowy „Referer“ " +"znjemóžnjene, zmóžńće je, znajmjeńša za tute sydło abo za HTTPS-zwiski abo " +"za naprašowanja „sameorigin“." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jeli značku wužiwaće abo hłowu „Referrer-Policy: no-referrer“ zapřijimaće, " +"wotstrońće je prošu. CSRF-škit trjeba hłowu „Referer“ , zo by striktnu " +"kontrolu referer přewjedźe. Jeli so wo priwatnosć staraće, wužiwajće " +"alternatiwy kaž za wotkazy k sydłam třećich." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Widźiće tutu zdźělenku, dokelž tute sydło CSRF-plack trjeba, hdyž so " +"formulary wotesyłaja. Tutón plack je z přičinow wěstoty trěbny, zo by so waš " +"wobhladowak wot třećich njekapruje." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Jeli sće swój wobhladowak tak konfigurował, zo su placki znjemóžnjene, " +"zmóžńće je zaso, znajmjeńša za tute sydło abo za naprašowanja „same-origin“." + +msgid "More information is available with DEBUG=True." +msgstr "Z DEBUG=True su dalše informacije k dispoziciji." + +msgid "No year specified" +msgstr "Žane lěto podate" + +msgid "Date out of range" +msgstr "Datum zwonka wobłuka" + +msgid "No month specified" +msgstr "Žadyn měsac podaty" + +msgid "No day specified" +msgstr "Žadyn dźeń podaty" + +msgid "No week specified" +msgstr "Žadyn tydźeń podaty" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Žadyn %(verbose_name_plural)s k dispoziciji njeje" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Přichodowe %(verbose_name_plural)s k dispoziciji njejsu, dokelž hódnota " +"%(class_name)s.allow_future je False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Njepłaćiwy „%(format)s“ za datumowy znamješkowy rjaćazk „%(datestr)s“ podaty" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Žane %(verbose_name)s namakane, kotrež naprašowanju wotpowěduje" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Strona „last“ njeje, ani njeda so do int konwertować." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Njepłaćiwa strona (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Prózdna lisćina a „%(class_name)s.allow_empty“ je False." + +msgid "Directory indexes are not allowed here." +msgstr "Zapisowe indeksy tu dowolone njejsu." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ njeeksistuje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalacija bě wuspěšna! Zbožopřeće!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Čitajće wersijowe informacije za Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Widźiće tutu stronu, dokelž DEBUG=True je we wašej dataji nastajenjow a njejsće URL skonfigurował." + +msgid "Django Documentation" +msgstr "Dokumentacija Django" + +msgid "Topics, references, & how-to’s" +msgstr "Temy, referency a nawody" + +msgid "Tutorial: A Polling App" +msgstr "Nawod: Naprašowanske nałoženje" + +msgid "Get started with Django" +msgstr "Prěnje kroki z Django" + +msgid "Django Community" +msgstr "Zhromadźenstwo Django" + +msgid "Connect, get help, or contribute" +msgstr "Zwjazać, pomoc wobstarać abo přinošować" diff --git a/venv/Lib/site-packages/django/conf/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..858f0c43401242d63d27eabb8c9e73835a94b60d GIT binary patch literal 28217 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, 2018 +# András Veres-Szentkirályi, 2016-2021 +# Attila Nagy <>, 2012 +# Dóra Szendrei , 2017 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +# János R, 2011-2012,2014 +# Máté Őry , 2013 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 15:20+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arab" + +msgid "Algerian Arabic" +msgstr "algériai arab" + +msgid "Asturian" +msgstr "Asztúriai" + +msgid "Azerbaijani" +msgstr "azerbajdzsáni" + +msgid "Bulgarian" +msgstr "Bolgár" + +msgid "Belarusian" +msgstr "Belarusz" + +msgid "Bengali" +msgstr "Bengáli" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosnyák" + +msgid "Catalan" +msgstr "Katalán" + +msgid "Czech" +msgstr "Cseh" + +msgid "Welsh" +msgstr "Walesi" + +msgid "Danish" +msgstr "Dán" + +msgid "German" +msgstr "Német" + +msgid "Lower Sorbian" +msgstr "Alsószorb" + +msgid "Greek" +msgstr "Görög" + +msgid "English" +msgstr "Angol" + +msgid "Australian English" +msgstr "Ausztráliai angol" + +msgid "British English" +msgstr "Brit angol" + +msgid "Esperanto" +msgstr "Eszperantó" + +msgid "Spanish" +msgstr "Spanyol" + +msgid "Argentinian Spanish" +msgstr "Argentin spanyol" + +msgid "Colombian Spanish" +msgstr "Kolumbiai spanyol" + +msgid "Mexican Spanish" +msgstr "Mexikói spanyol" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguai spanyol" + +msgid "Venezuelan Spanish" +msgstr "Venezuelai spanyol" + +msgid "Estonian" +msgstr "Észt" + +msgid "Basque" +msgstr "Baszk " + +msgid "Persian" +msgstr "Perzsa" + +msgid "Finnish" +msgstr "Finn" + +msgid "French" +msgstr "Francia" + +msgid "Frisian" +msgstr "Fríz" + +msgid "Irish" +msgstr "Ír" + +msgid "Scottish Gaelic" +msgstr "Skót gael" + +msgid "Galician" +msgstr "Gall" + +msgid "Hebrew" +msgstr "Héber" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Horvát" + +msgid "Upper Sorbian" +msgstr "Felsőszorb" + +msgid "Hungarian" +msgstr "Magyar" + +msgid "Armenian" +msgstr "Örmény" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonéz" + +msgid "Igbo" +msgstr "igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Izlandi" + +msgid "Italian" +msgstr "Olasz" + +msgid "Japanese" +msgstr "Japán" + +msgid "Georgian" +msgstr "Grúz" + +msgid "Kabyle" +msgstr "Kabil" + +msgid "Kazakh" +msgstr "Kazak" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreai" + +msgid "Kyrgyz" +msgstr "kirgiz" + +msgid "Luxembourgish" +msgstr "Luxemburgi" + +msgid "Lithuanian" +msgstr "Litván" + +msgid "Latvian" +msgstr "Lett" + +msgid "Macedonian" +msgstr "Macedón" + +msgid "Malayalam" +msgstr "Malajálam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Maráthi" + +msgid "Burmese" +msgstr "Burmai" + +msgid "Norwegian Bokmål" +msgstr "Bokmål norvég" + +msgid "Nepali" +msgstr "Nepáli" + +msgid "Dutch" +msgstr "Holland" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk norvég" + +msgid "Ossetic" +msgstr "Oszét" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Lengyel" + +msgid "Portuguese" +msgstr "Portugál" + +msgid "Brazilian Portuguese" +msgstr "Brazíliai portugál" + +msgid "Romanian" +msgstr "Román" + +msgid "Russian" +msgstr "Orosz" + +msgid "Slovak" +msgstr "Szlovák" + +msgid "Slovenian" +msgstr "Szlovén" + +msgid "Albanian" +msgstr "Albán" + +msgid "Serbian" +msgstr "Szerb" + +msgid "Serbian Latin" +msgstr "Latin betűs szerb" + +msgid "Swedish" +msgstr "Svéd" + +msgid "Swahili" +msgstr "Szuahéli" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "tadzsik" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "türkmén" + +msgid "Turkish" +msgstr "Török" + +msgid "Tatar" +msgstr "Tatár" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrán" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "Üzbég" + +msgid "Vietnamese" +msgstr "Vietnámi" + +msgid "Simplified Chinese" +msgstr "Egyszerű kínai" + +msgid "Traditional Chinese" +msgstr "Hagyományos kínai" + +msgid "Messages" +msgstr "Üzenetek" + +msgid "Site Maps" +msgstr "Oldaltérképek" + +msgid "Static Files" +msgstr "Statikus fájlok" + +msgid "Syndication" +msgstr "Szindikáció" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Az oldalszám nem egész szám." + +msgid "That page number is less than 1" +msgstr "Az oldalszám kisebb, mint 1" + +msgid "That page contains no results" +msgstr "Az oldal nem tartalmaz találatokat" + +msgid "Enter a valid value." +msgstr "Adjon meg egy érvényes értéket." + +msgid "Enter a valid URL." +msgstr "Adjon meg egy érvényes URL-t." + +msgid "Enter a valid integer." +msgstr "Adjon meg egy érvényes számot." + +msgid "Enter a valid email address." +msgstr "Írjon be egy érvényes e-mail címet." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Kérjük adjon meg egy érvényes \"domain-darabkát\", amely csak ékezet nélküli " +"betűkből, számokból, aláhúzásból és kötőjelből áll." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Kérjük adjon meg egy érvényes \"domain-darabkát\", amely csak betűkből, " +"számokból, aláhúzásból és kötőjelből áll." + +msgid "Enter a valid IPv4 address." +msgstr "Írjon be egy érvényes IPv4 címet." + +msgid "Enter a valid IPv6 address." +msgstr "Írjon be egy érvényes IPv6 címet." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Írjon be egy érvényes IPv4 vagy IPv6 címet." + +msgid "Enter only digits separated by commas." +msgstr "Csak számokat adjon meg, vesszővel elválasztva." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Bizonyosodjon meg arról, hogy az érték %(limit_value)s (jelenleg: " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Bizonyosodjon meg arról, hogy az érték %(limit_value)s, vagy kisebb." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Bizonyosodjon meg arról, hogy az érték %(limit_value)s, vagy nagyobb." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bizonyosodjon meg arról, hogy ez az érték legalább %(limit_value)d karaktert " +"tartalmaz (jelenlegi hossza: %(show_value)d)." +msgstr[1] "" +"Bizonyosodjon meg arról, hogy ez az érték legalább %(limit_value)d karaktert " +"tartalmaz (jelenlegi hossza: %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bizonyosodjon meg arról, hogy ez az érték legfeljebb %(limit_value)d " +"karaktert tartalmaz (jelenlegi hossza: %(show_value)d)." +msgstr[1] "" +"Bizonyosodjon meg arról, hogy ez az érték legfeljebb %(limit_value)d " +"karaktert tartalmaz (jelenlegi hossza: %(show_value)d)." + +msgid "Enter a number." +msgstr "Adj meg egy számot." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Bizonyosodjon meg arról, hogy legfeljebb %(max)s számjegyből áll." +msgstr[1] "Bizonyosodjon meg arról, hogy legfeljebb %(max)s számjegyből áll." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Bizonyosodjon meg arról, hogy legfeljebb %(max)s tizedesjegyből áll." +msgstr[1] "" +"Bizonyosodjon meg arról, hogy legfeljebb %(max)s tizedesjegyből áll." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Bizonyosodjon meg arról, hogy legfeljebb %(max)s számjegy van a " +"tizedesvessző előtt." +msgstr[1] "" +"Bizonyosodjon meg arról, hogy legfeljebb %(max)s számjegy van a " +"tizedesvessző előtt." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"A(z) \"%(extension)s\" kiterjesztés nincs engedélyezve. Az engedélyezett " +"fájltípusok: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null karakterek használata nem megengedett." + +msgid "and" +msgstr "és" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Már létezik %(model_name)s ilyennel: %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r érték érvénytelen." + +msgid "This field cannot be null." +msgstr "Ez a mező nem lehet nulla." + +msgid "This field cannot be blank." +msgstr "Ez a mező nem lehet üres." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Már létezik %(model_name)s ilyennel: %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s egyedi kell hogy legyen %(lookup_type)s alapján a(z) " +"%(date_field_label)s mezőn." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Mezőtípus: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "A(z) \"%(value)s\" értéke csak True vagy False lehet." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "A(z) \"%(value)s\" értéke csak True, False vagy üres lehet." + +msgid "Boolean (Either True or False)" +msgstr "Logikai (True vagy False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Karakterlánc (%(max_length)s hosszig)" + +msgid "Comma-separated integers" +msgstr "Vesszővel elválasztott egészek" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"A(z) \"%(value)s\" érvénytelen dátumformátumot tartalmaz. A dátumnak ÉÉÉÉ-HH-" +"NN formában kell lennie." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"A(z) \"%(value)s\" értéke formára (ÉÉÉÉ-HH-NN) megfelel ugyan, de " +"érvénytelen dátumot tartalmaz." + +msgid "Date (without time)" +msgstr "Dátum (idő nélkül)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"A(z) \"%(value)s\" érvénytelen dátumformátumot tartalmaz. A dátumnak ÉÉÉÉ-HH-" +"NN ÓÓ:PP[:mm[.uuuuuu]][TZ] formában kell lennie." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"A(z) \"%(value)s\" értéke formára (ÉÉÉÉ-HH-NN ÓÓ:PP[:mm[:uuuuuu]][TZ]) " +"megfelel ugyan, de érvénytelen dátumot vagy időt tartalmaz." + +msgid "Date (with time)" +msgstr "Dátum (idővel)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "A(z) \"%(value)s\" értékének tizes számrendszerű számnak kell lennie." + +msgid "Decimal number" +msgstr "Tizes számrendszerű (decimális) szám" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"A(z) \"%(value)s\" érvénytelen idő formátumot tartalmaz. Az időnek ÓÓ:PP[:" +"mm[.uuuuuu]] formában kell lennie." + +msgid "Duration" +msgstr "Időtartam" + +msgid "Email address" +msgstr "E-mail cím" + +msgid "File path" +msgstr "Elérési út" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "A(z) \"%(value)s\" értékének lebegőpontos számnak kell lennie." + +msgid "Floating point number" +msgstr "Lebegőpontos szám" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "A(z) \"%(value)s\" értékének egész számnak kell lennie." + +msgid "Integer" +msgstr "Egész" + +msgid "Big (8 byte) integer" +msgstr "Nagy egész szám (8 bájtos)" + +msgid "Small integer" +msgstr "Kis egész" + +msgid "IPv4 address" +msgstr "IPv4 cím" + +msgid "IP address" +msgstr "IP cím" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Az \"%(value)s\" értéke csak üres, True, vagy False lehet." + +msgid "Boolean (Either True, False or None)" +msgstr "Logikai (True, False vagy None)" + +msgid "Positive big integer" +msgstr "Pozitív nagy egész" + +msgid "Positive integer" +msgstr "Pozitív egész" + +msgid "Positive small integer" +msgstr "Pozitív kis egész" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "URL-barát cím (%(max_length)s hosszig)" + +msgid "Text" +msgstr "Szöveg" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"A(z) \"%(value)s\" érvénytelen idő formátumot tartalmaz. Az időnek ÓÓ:PP[:" +"mm[.uuuuuu]] formában kell lennie." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"A(z) \"%(value)s\" értéke formára (ÓÓ:PP[:mm[:uuuuuu]][TZ]) megfelel ugyan, " +"de érvénytelen időt tartalmaz." + +msgid "Time" +msgstr "Idő" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Nyers bináris adat" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "A(z) \"%(value)s\" értéke nem érvényes UUID érték." + +msgid "Universally unique identifier" +msgstr "Univerzálisan egyedi azonosító" + +msgid "File" +msgstr "Fájl" + +msgid "Image" +msgstr "Kép" + +msgid "A JSON object" +msgstr "Egy JSON objektum" + +msgid "Value must be valid JSON." +msgstr "Az érték érvényes JSON kell legyen." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s példány %(value)r %(field)s értékkel nem létezik." + +msgid "Foreign Key (type determined by related field)" +msgstr "Idegen kulcs (típusa a kapcsolódó mezőtől függ)" + +msgid "One-to-one relationship" +msgstr "Egy-egy kapcsolat" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s kapcsolat" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s kapcsolatok" + +msgid "Many-to-many relationship" +msgstr "Több-több kapcsolat" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ennek a mezőnek a megadása kötelező." + +msgid "Enter a whole number." +msgstr "Adjon meg egy egész számot." + +msgid "Enter a valid date." +msgstr "Adjon meg egy érvényes dátumot." + +msgid "Enter a valid time." +msgstr "Adjon meg egy érvényes időt." + +msgid "Enter a valid date/time." +msgstr "Adjon meg egy érvényes dátumot/időt." + +msgid "Enter a valid duration." +msgstr "Adjon meg egy érvényes időtartamot." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "A napok számának {min_days} és {max_days} közé kell esnie." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nem küldött el fájlt. Ellenőrizze a kódolás típusát az űrlapon." + +msgid "No file was submitted." +msgstr "Semmilyen fájl sem került feltöltésre." + +msgid "The submitted file is empty." +msgstr "A küldött fájl üres." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bizonyosodjon meg arról, hogy a fájlnév legfeljebb %(max)d karakterből áll " +"(jelenlegi hossza: %(length)d)." +msgstr[1] "" +"Bizonyosodjon meg arról, hogy a fájlnév legfeljebb %(max)d karakterből áll " +"(jelenlegi hossza: %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Küldjön egy új fájlt, vagy jelölje be a törlés négyzetet, de ne mindkettőt " +"egyszerre." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Töltsön fel egy érvényes képfájlt. A feltöltött fájl nem kép volt, vagy " +"megsérült." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Válasszon érvényes elemet. '%(value)s' nincs az elérhető lehetőségek között." + +msgid "Enter a list of values." +msgstr "Adja meg értékek egy listáját." + +msgid "Enter a complete value." +msgstr "Adjon meg egy teljes értéket." + +msgid "Enter a valid UUID." +msgstr "Adjon meg egy érvényes UUID-t." + +msgid "Enter a valid JSON." +msgstr "Adjon meg egy érvényes JSON-t." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Rejtett mező: %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm adatok hiányoznak vagy hamisításra kerültek. A hiányzó mezők: " +"%(field_names)s. Ha ez többször is előfordul, érdemes bejelenteni hibaként." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Legfeljebb %d űrlapot küldjön be." +msgstr[1] "Legfeljebb %d űrlapot küldjön be." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Legalább %d űrlapot küldjön be." +msgstr[1] "Legalább %d űrlapot küldjön be." + +msgid "Order" +msgstr "Sorrend" + +msgid "Delete" +msgstr "Törlés" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Javítsa a mezőhöz tartozó duplikált adatokat: %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Javítsa a mezőhöz tartozó duplikált adatokat: %(field)s (egyedinek kell " +"lenniük)." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Javítsa a mezőhöz tartozó duplikált adatokat: %(field_name)s (egyedinek kell " +"lenniük %(lookup)s alapján a dátum mezőn: %(date_field)s)." + +msgid "Please correct the duplicate values below." +msgstr "Javítsa az alábbi duplikált értékeket." + +msgid "The inline value did not match the parent instance." +msgstr "A beágyazott érték nem egyezik meg a szülő példányéval." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Válasszon érvényes elemet. Az Ön választása nincs az elérhető lehetőségek " +"között." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "Érvénytelen érték: \"%(pk)s\"" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"A(z) %(datetime)s nem értelmezhető a(z) %(current_timezone)s időzónában; " +"vagy bizonytalan, vagy nem létezik." + +msgid "Clear" +msgstr "Törlés" + +msgid "Currently" +msgstr "Jelenleg" + +msgid "Change" +msgstr "Módosítás" + +msgid "Unknown" +msgstr "Ismeretlen" + +msgid "Yes" +msgstr "Igen" + +msgid "No" +msgstr "Nem" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "igen,nem,talán" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bájt" +msgstr[1] "%(size)d bájt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "du" + +msgid "a.m." +msgstr "de" + +msgid "PM" +msgstr "DU" + +msgid "AM" +msgstr "DE" + +msgid "midnight" +msgstr "éjfél" + +msgid "noon" +msgstr "dél" + +msgid "Monday" +msgstr "hétfő" + +msgid "Tuesday" +msgstr "kedd" + +msgid "Wednesday" +msgstr "szerda" + +msgid "Thursday" +msgstr "csütörtök" + +msgid "Friday" +msgstr "péntek" + +msgid "Saturday" +msgstr "szombat" + +msgid "Sunday" +msgstr "vasárnap" + +msgid "Mon" +msgstr "hét" + +msgid "Tue" +msgstr "kedd" + +msgid "Wed" +msgstr "sze" + +msgid "Thu" +msgstr "csüt" + +msgid "Fri" +msgstr "pén" + +msgid "Sat" +msgstr "szo" + +msgid "Sun" +msgstr "vas" + +msgid "January" +msgstr "január" + +msgid "February" +msgstr "február" + +msgid "March" +msgstr "március" + +msgid "April" +msgstr "április" + +msgid "May" +msgstr "május" + +msgid "June" +msgstr "június" + +msgid "July" +msgstr "július" + +msgid "August" +msgstr "augusztus" + +msgid "September" +msgstr "szeptember" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "már" + +msgid "apr" +msgstr "ápr" + +msgid "may" +msgstr "máj" + +msgid "jun" +msgstr "jún" + +msgid "jul" +msgstr "júl" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sze" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "febr." + +msgctxt "abbrev. month" +msgid "March" +msgstr "márc." + +msgctxt "abbrev. month" +msgid "April" +msgstr "ápr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "máj." + +msgctxt "abbrev. month" +msgid "June" +msgstr "jún." + +msgctxt "abbrev. month" +msgid "July" +msgstr "júl." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "szept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec." + +msgctxt "alt. month" +msgid "January" +msgstr "január" + +msgctxt "alt. month" +msgid "February" +msgstr "február" + +msgctxt "alt. month" +msgid "March" +msgstr "március" + +msgctxt "alt. month" +msgid "April" +msgstr "április" + +msgctxt "alt. month" +msgid "May" +msgstr "május" + +msgctxt "alt. month" +msgid "June" +msgstr "június" + +msgctxt "alt. month" +msgid "July" +msgstr "július" + +msgctxt "alt. month" +msgid "August" +msgstr "augusztus" + +msgctxt "alt. month" +msgid "September" +msgstr "szeptember" + +msgctxt "alt. month" +msgid "October" +msgstr "október" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "december" + +msgid "This is not a valid IPv6 address." +msgstr "Ez nem egy érvényes IPv6 cím." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "vagy" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d év" +msgstr[1] "%d év" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d hónap" +msgstr[1] "%d hónap" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hét" +msgstr[1] "%d hét" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d nap" +msgstr[1] "%d nap" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d óra" +msgstr[1] "%d óra" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d perc" +msgstr[1] "%d perc" + +msgid "Forbidden" +msgstr "Hozzáférés megtagadva" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF ellenőrzés sikertelen. Kérést kiszolgálása megszakítva." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Ezt az üzenetet azért látja, mert ezen a HTTPS oldalon kötelező a \"Referer " +"header\", amelyet a böngészőnek kellene küldenie, de nem tette. Ez az adat " +"biztonsági okokból kötelező, ez biztosítja, hogy a böngészőt nem irányítja " +"át egy harmadik fél." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ha a böngészője úgy van beállítva, hogy letilja a \"Referer\" adatokat, " +"kérjük engedélyezze őket ehhez az oldalhoz, vagy a HTTPS kapcsolatokhoz, " +"vagy a \"same-origin\" kérésekhez." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ha a címkét használja, vagy " +"a “Referrer-Policy: no-referrer” fejlécet, kérjük távolítsa el ezeket. A " +"CSRF védelemnek szüksége van a \"Referer\" fejléc adatra a szigorú " +"ellenőrzéshez. Ha aggódik az adatainak biztonsága miatt, használjon " +"alternatívákat, mint például az , a külső oldalakra " +"mutató linkek esetén. " + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Azért látja ezt az üzenetet, mert ez a weboldal elvárja a CSRF cookie " +"elküldését űrlapoknál. Erre a cookie-ra biztonsági okból van szükség annak " +"kiszűrésére, hogy harmadik fél eltérítse az ön böngészőjét." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ha kikapcsolta a cookie-kat a böngészőjében, kérjük engedélyezze őket újra, " +"legalább erre az oldalra, vagy a \"same-origin\" típusú kérésekre." + +msgid "More information is available with DEBUG=True." +msgstr "További információ DEBUG=True beállítással érhető el." + +msgid "No year specified" +msgstr "Nincs év megadva" + +msgid "Date out of range" +msgstr "A dátum a megengedett tartományon kívül esik." + +msgid "No month specified" +msgstr "Nincs hónap megadva" + +msgid "No day specified" +msgstr "Nincs nap megadva" + +msgid "No week specified" +msgstr "Nincs hét megadva" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nincsenek elérhető %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Jövőbeli %(verbose_name_plural)s nem elérhetők, mert %(class_name)s." +"allow_future értéke False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"A megadott dátum \"%(datestr)s\" érvénytelen a következő formátumban: " +"\"%(format)s\"." + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nincs a keresési feltételeknek megfelelő %(verbose_name)s" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Az oldalszám nem \"utolsó\", vagy nem lehet számmá alakítani." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Érvénytelen oldal (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Üres lista, de a \"%(class_name)s.allow_empty\" értéke hamis." + +msgid "Directory indexes are not allowed here." +msgstr "A könyvtárak listázása itt nincs engedélyezve." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "A(z) \"%(path)s\" útvonal nem létezik" + +#, python-format +msgid "Index of %(directory)s" +msgstr "A %(directory)s könyvtár tartalma" + +msgid "The install worked successfully! Congratulations!" +msgstr "A telepítés sikeresen végződött! Gratulálunk!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"A Django %(version)s kiadási megjegyzéseinek " +"megtekintése" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Azért látod ezt az oldalt, mert a DEBUG=True szerepel a settings fájlban, és még nem került beállításra " +"egy URL sem." + +msgid "Django Documentation" +msgstr "Django Dokumentáció" + +msgid "Topics, references, & how-to’s" +msgstr "Témák, hivatkozások, & leírások" + +msgid "Tutorial: A Polling App" +msgstr "Gyakorlat: egy szavazó app" + +msgid "Get started with Django" +msgstr "Első lépések a Djangóval" + +msgid "Django Community" +msgstr "Django Közösség" + +msgid "Connect, get help, or contribute" +msgstr "Lépj kapcsolatba, kérj segítséget, vagy járulj hozzá" diff --git a/venv/Lib/site-packages/django/conf/locale/hu/__init__.py b/venv/Lib/site-packages/django/conf/locale/hu/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/hu/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hu/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e200c56ed35bdeefefe96414197e99619a83672 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lMyY;$d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04pjq-v9sr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hu/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/hu/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..639246a9da403e89e738b069e1e39c6258fcf967 GIT binary patch literal 719 zcmZWmL64I_7-e8+X}jHSo2=)?ghLaT-Wy}YEtJLu8lW*uh=g`1QcKw|u!;N{x1psllh1&s*S^(objx|>gpjRq&qHjy0 z;i|f3DUXJ;do&g8N2YHox?#EXtml8Jqjd7zFw2{^tIO^iNqUV2m2IvqmexZ)6AdcQ zG56$9+A-gsN|$q0ymC!xAsV8k8--obm!_yqYg|uTs;?x&of-OaG1q3Fse~=sQH4AI za^ftBpAg5$2=Sb0yv`zjpAu&lrb@PQo{`g%s-o#1dr9`;?@RfTW#W>sfFUlV$Pm2H{1ocU?@HY)< M0Do~1vJi0K4-hT8c>n+a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hu/formats.py b/venv/Lib/site-packages/django/conf/locale/hu/formats.py new file mode 100644 index 000000000..c17f2c75f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hu/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "Y. F j." +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "Y. F j. H:i" +YEAR_MONTH_FORMAT = "Y. F" +MONTH_DAY_FORMAT = "F j." +SHORT_DATE_FORMAT = "Y.m.d." +SHORT_DATETIME_FORMAT = "Y.m.d. H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y.%m.%d.", # '2006.10.25.' +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '14:30:59' + "%H:%M", # '14:30' +] +DATETIME_INPUT_FORMATS = [ + "%Y.%m.%d. %H:%M:%S", # '2006.10.25. 14:30:59' + "%Y.%m.%d. %H:%M:%S.%f", # '2006.10.25. 14:30:59.000200' + "%Y.%m.%d. %H:%M", # '2006.10.25. 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = " " # Non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9dcc4721318caa943895c55d9f9f0a1325d21ea0 GIT binary patch literal 22207 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..e4860e2d7 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,1237 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Սմբատ Պետրոսյան , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Աֆրիկաանս" + +msgid "Arabic" +msgstr "Արաբերեն" + +msgid "Asturian" +msgstr "Աստուրերեն" + +msgid "Azerbaijani" +msgstr "Ադրբեջաներեն" + +msgid "Bulgarian" +msgstr "Բուլղարերեն" + +msgid "Belarusian" +msgstr "Բելոռուսերեն" + +msgid "Bengali" +msgstr "Բենգալերեն" + +msgid "Breton" +msgstr "Բրետոներեն" + +msgid "Bosnian" +msgstr "Բոսնիերեն" + +msgid "Catalan" +msgstr "Կատալաներեն" + +msgid "Czech" +msgstr "Չեխերեն" + +msgid "Welsh" +msgstr "Վալլիերեն" + +msgid "Danish" +msgstr "Դանիերեն" + +msgid "German" +msgstr "Գերմաներեն" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Հունարեն" + +msgid "English" +msgstr "Անգլերեն" + +msgid "Australian English" +msgstr "Ավստրալական Անգլերեն" + +msgid "British English" +msgstr "Բրիտանական Անգլերեն" + +msgid "Esperanto" +msgstr "Էսպերանտո" + +msgid "Spanish" +msgstr "Իսպաներեն" + +msgid "Argentinian Spanish" +msgstr "Արգենտինական իսպաներեն" + +msgid "Colombian Spanish" +msgstr "Կոլումբիական իսպաներեն" + +msgid "Mexican Spanish" +msgstr "Մեքսիկական իսպաներեն" + +msgid "Nicaraguan Spanish" +msgstr "Նիկարագուական իսպաներեն" + +msgid "Venezuelan Spanish" +msgstr "Վենեսուելլական իսպաներեն" + +msgid "Estonian" +msgstr "Էստոներեն" + +msgid "Basque" +msgstr "Բասկերեն" + +msgid "Persian" +msgstr "Պարսկերեն" + +msgid "Finnish" +msgstr "Ֆիներեն" + +msgid "French" +msgstr "Ֆրանսերեն" + +msgid "Frisian" +msgstr "Ֆրիզերեն" + +msgid "Irish" +msgstr "Իռլանդերեն" + +msgid "Scottish Gaelic" +msgstr "Գելական շոտլանդերեն" + +msgid "Galician" +msgstr "Գալիսերեն" + +msgid "Hebrew" +msgstr "Եբրայերեն" + +msgid "Hindi" +msgstr "Հինդի" + +msgid "Croatian" +msgstr "Խորվաթերեն" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Հունգարերեն" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Ինտերլինգուա" + +msgid "Indonesian" +msgstr "Ինդոնեզերեն" + +msgid "Ido" +msgstr "Իդո" + +msgid "Icelandic" +msgstr "Իսլանդերեն" + +msgid "Italian" +msgstr "Իտալերեն" + +msgid "Japanese" +msgstr "Ճապոներեն" + +msgid "Georgian" +msgstr "Վրացերեն" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Ղազախերեն" + +msgid "Khmer" +msgstr "Քեմերերեն" + +msgid "Kannada" +msgstr "Կանադա" + +msgid "Korean" +msgstr "Կորեերեն" + +msgid "Luxembourgish" +msgstr "Լյուքսեմբուրգերեն" + +msgid "Lithuanian" +msgstr "Լիտվերեն" + +msgid "Latvian" +msgstr "Լատիշերեն" + +msgid "Macedonian" +msgstr "Մակեդոներեն" + +msgid "Malayalam" +msgstr "Մալայալամ" + +msgid "Mongolian" +msgstr "Մոնղոլերեն" + +msgid "Marathi" +msgstr "Մարատխի" + +msgid "Burmese" +msgstr "Բիրմաներեն" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Նեպալերեն" + +msgid "Dutch" +msgstr "Հոլանդերեն" + +msgid "Norwegian Nynorsk" +msgstr "Նորվեգերեն (Նյունորսկ)" + +msgid "Ossetic" +msgstr "Օսերեն" + +msgid "Punjabi" +msgstr "Փանջաբի" + +msgid "Polish" +msgstr "Լեհերեն" + +msgid "Portuguese" +msgstr "Պորտուգալերեն" + +msgid "Brazilian Portuguese" +msgstr "Բրազիլական պորտուգալերեն" + +msgid "Romanian" +msgstr "Ռումիներեն" + +msgid "Russian" +msgstr "Ռուսերեն" + +msgid "Slovak" +msgstr "Սլովակերեն" + +msgid "Slovenian" +msgstr "Սլովեներեն" + +msgid "Albanian" +msgstr "Ալբաներեն" + +msgid "Serbian" +msgstr "Սերբերեն" + +msgid "Serbian Latin" +msgstr "Սերբերեն (լատինատառ)" + +msgid "Swedish" +msgstr "Շվեդերեն" + +msgid "Swahili" +msgstr "Սվահիլի" + +msgid "Tamil" +msgstr "Թամիլերեն" + +msgid "Telugu" +msgstr "Թելուգու" + +msgid "Thai" +msgstr "Թայերեն" + +msgid "Turkish" +msgstr "Թուրքերեն" + +msgid "Tatar" +msgstr "Թաթարերեն" + +msgid "Udmurt" +msgstr "Ումուրտերեն" + +msgid "Ukrainian" +msgstr "Ուկրաիներեն" + +msgid "Urdu" +msgstr "Ուրդու" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Վիետնամերեն" + +msgid "Simplified Chinese" +msgstr "Հեշտացված չինարեն" + +msgid "Traditional Chinese" +msgstr "Ավանդական չինարեն" + +msgid "Messages" +msgstr "Հաղորդագրություններ" + +msgid "Site Maps" +msgstr "Կայքի քարտեզ" + +msgid "Static Files" +msgstr "Ստատիկ ֆայլեր\t" + +msgid "Syndication" +msgstr "Նորություններ" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Մուտքագրեք ճիշտ արժեք" + +msgid "Enter a valid URL." +msgstr "Մուտքագրեք ճիշտ URL" + +msgid "Enter a valid integer." +msgstr "Մուտքագրեք ամբողջ թիվ" + +msgid "Enter a valid email address." +msgstr "Մուտքագրեք ճիշտ էլեկտրոնային փոստի հասցե" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Մուտքագրեք ճիշտ IPv4 հասցե" + +msgid "Enter a valid IPv6 address." +msgstr "Մուտքագրեք ճիշտ IPv6 հասցե" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Մուտքագրեք ճիշտ IPv4 կամ IPv6 հասցե" + +msgid "Enter only digits separated by commas." +msgstr "Մուտքագրեք միայն ստորակետով բաժանված թվեր" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Համոզվեք, որ այս արժեքը %(limit_value)s (հիմա այն — %(show_value)s)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Համոզվեք, որ այս արժեքը փոքր է, կամ հավասար %(limit_value)s" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Համոզվեք, որ այս արժեքը մեծ է, համ հավասար %(limit_value)s" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Համոզվեք, որ արժեքը պարունակում է ամենաքիչը %(limit_value)d նիշ (այն " +"պարունակում է %(show_value)d)." +msgstr[1] "" +"Համոզվեք, որ արժեքը պարունակում է ամենաքիչը %(limit_value)d նիշ (այն " +"պարունակում է %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Համոզվեք, որ արժեքը պարունակում է ամենաքիչը %(limit_value)d նիշ (այն " +"պարունակում է %(show_value)d)." +msgstr[1] "" +"Համոզվեք, որ արժեքը պարունակում է ամենաքիչը %(limit_value)d նիշ (այն " +"պարունակում է %(show_value)d)." + +msgid "Enter a number." +msgstr "Մուտքագրեք թիվ" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Համոզվեք, որ թվերի քանակը մեծ չէ %(max)s -ից" +msgstr[1] "Համոզվեք, որ թվերի քանակը մեծ չէ %(max)s -ից" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Համոզվեք, որ ստորակետից հետո թվերի քանակը մեծ չէ %(max)s -ից" +msgstr[1] "Համոզվեք, որ ստորակետից հետո թվերի քանակը մեծ չէ %(max)s -ից" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Համոզվեք, որ ստորակետից առաջ թվերի քանակը մեծ չէ %(max)s -ից" +msgstr[1] "Համոզվեք, որ ստորակետից առաջ թվերի քանակը մեծ չէ %(max)s -ից" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "և" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" +"%(field_labels)s դաշտերի այս արժեքով %(model_name)s արդեն գոյություն ունի" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r արժեքը չի մտնում թույլատրված տարբերակների մեջ" + +msgid "This field cannot be null." +msgstr "Այս դաշտը չի կարող ունենալ NULL արժեք " + +msgid "This field cannot be blank." +msgstr "Այս դաշտը չի կարող լինել դատարկ" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s դաշտի այս արժեքով %(model_name)s արդեն գոյություն ունի" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"«%(field_label)s» դաշտի արժեքը պետք է լինի միակը %(date_field_label)s " +"%(lookup_type)s համար" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s տիպի դաշտ" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Տրամաբանական (True կամ False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Տող (մինչև %(max_length)s երկարությամբ)" + +msgid "Comma-separated integers" +msgstr "Ստորակետով բաժանված ամբողջ թվեր" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Ամսաթիվ (առանց ժամանակի)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Ամսաթիվ (և ժամանակ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Տասնորդական թիվ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Տևողություն" + +msgid "Email address" +msgstr "Email հասցե" + +msgid "File path" +msgstr "Ֆայլի ճանապարհ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Floating point թիվ" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Ամբողջ" + +msgid "Big (8 byte) integer" +msgstr "Մեծ (8 բայթ) ամբողջ թիվ" + +msgid "IPv4 address" +msgstr "IPv4 հասցե" + +msgid "IP address" +msgstr "IP հասցե" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Տրամաբանական (Either True, False կամ None)" + +msgid "Positive integer" +msgstr "Դրական ամբողջ թիվ" + +msgid "Positive small integer" +msgstr "Դրայան փոքր ամբողջ թիվ" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (մինչև %(max_length)s նիշ)" + +msgid "Small integer" +msgstr "Փոքր ամբողջ թիվ" + +msgid "Text" +msgstr "Տեքստ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Ժամանակ" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Երկուական տվյալներ" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Ֆայլ" + +msgid "Image" +msgstr "Պատկեր" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +" %(field)s դաշտի %(value)r արժեք ունեցող %(model)s օրինակ գոյություն չունի" + +msgid "Foreign Key (type determined by related field)" +msgstr "Արտաքին բանալի (տեսակը որոշվում է հարակից դաշտից)" + +msgid "One-to-one relationship" +msgstr "Մեկը մեկին կապ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Մի քանիսը մի քանիսին կապ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Այս դաշտը պարտադիր է" + +msgid "Enter a whole number." +msgstr "Մուտքագրեք ամբողջ թիվ" + +msgid "Enter a valid date." +msgstr "Մուտքագրեք ճիշտ ամսաթիվ" + +msgid "Enter a valid time." +msgstr "Մուտքագրեք ճիշտ ժամանակ" + +msgid "Enter a valid date/time." +msgstr "Մուտքագրեք ճիշտ ամսաթիվ/ժամանակ" + +msgid "Enter a valid duration." +msgstr "Մուտքագրեք ճիշտ տևողություն" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ոչ մի ֆայլ չի ուղարկվել։ Ստուգեք ձևաթղթի կոդավորում տեսակը" + +msgid "No file was submitted." +msgstr "Ոչ մի ֆայլ չի ուղարկվել" + +msgid "The submitted file is empty." +msgstr "Ուղարկված ֆայլը դատարկ է" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Համոզվեք, որ ֆայլի անունը պարունակում է ամենաշատը %(max)d նիշ (այն " +"պարունակում է %(length)d)" +msgstr[1] "" +"Համոզվեք, որ ֆայլի անունը պարունակում է ամենաշատը %(max)d նիշ (այն " +"պարունակում է %(length)d)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ուղարկեք ֆայլ, կամ ակտիվացրեք մաքրելու նշման վանդակը, ոչ թե երկուսը միասին" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Ուղարկեք ճիշտ պատկեր․ Ուղարկված ֆայլը պատկեր չէ, կամ վնասված է" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Ընտրեք ճիշտ տարբերակ։ %(value)s արժեքը չի մտնում ճիշտ արժեքների մեջ" + +msgid "Enter a list of values." +msgstr "Մուտքագրեք արժեքների ցուցակ" + +msgid "Enter a complete value." +msgstr "Մուտքագրեք ամբողջական արժեք" + +msgid "Enter a valid UUID." +msgstr "Մուտքագրեք ճիշտ UUID" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Թաքցված դաշտ %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Կառավարման ձևաթղթի տվյալները բացակայում են, կամ վնասված են" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Ուղարկեք %d կամ քիչ ձևաթղթեր" +msgstr[1] "Ուղարկեք %d կամ քիչ ձևաթղթեր" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Ուղարկեք %d կամ շատ ձևաթղթեր" +msgstr[1] "Ուղարկեք %d կամ շատ ձևաթղթեր" + +msgid "Order" +msgstr "Հերթականություն" + +msgid "Delete" +msgstr "Հեռացնել" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ուղղեք %(field)s դաշտի կրկնվող տվյալները" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Ուղղեք %(field)s դաշտի կրկնվող տվյալները, որոնք պետք է լինեն եզակի" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ուղղեք %(field_name)s դաշտի կրկնվող տվյալները, որոնք պետք է լինեն եզակի " +"%(date_field)s-ում %(lookup)s֊ի համար" + +msgid "Please correct the duplicate values below." +msgstr "Ուղղեք կրկնվող տվյալները" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Ընտրեք ճիշտ տարբերակ։ Այս արժեքը չի մտնում ճիշտ արժեքների մեջ" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Մաքրել" + +msgid "Currently" +msgstr "Տվյալ պահին" + +msgid "Change" +msgstr "Փոխել" + +msgid "Unknown" +msgstr "Անհայտ" + +msgid "Yes" +msgstr "Այո" + +msgid "No" +msgstr "Ոչ" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "այո,ոչ,միգուցե" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d բայթ" +msgstr[1] "%(size)d բայթ" + +#, python-format +msgid "%s KB" +msgstr "%s ԿԲ" + +#, python-format +msgid "%s MB" +msgstr "%s ՄԲ" + +#, python-format +msgid "%s GB" +msgstr "%s ԳԲ" + +#, python-format +msgid "%s TB" +msgstr "%s ՏԲ" + +#, python-format +msgid "%s PB" +msgstr "%s ՊԲ" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "կեսգիշեր" + +msgid "noon" +msgstr "կեսօր" + +msgid "Monday" +msgstr "Երկուշաբթի" + +msgid "Tuesday" +msgstr "Երեքշաբթի" + +msgid "Wednesday" +msgstr "Չորեքշաբթի" + +msgid "Thursday" +msgstr "Հինգշաբթի" + +msgid "Friday" +msgstr "Ուրբաթ" + +msgid "Saturday" +msgstr "Շաբաթ" + +msgid "Sunday" +msgstr "Կիրակի" + +msgid "Mon" +msgstr "Երկ" + +msgid "Tue" +msgstr "Երք" + +msgid "Wed" +msgstr "Չրք" + +msgid "Thu" +msgstr "Հնգ" + +msgid "Fri" +msgstr "Ուրբ" + +msgid "Sat" +msgstr "Շբթ" + +msgid "Sun" +msgstr "Կիր" + +msgid "January" +msgstr "Հունվար" + +msgid "February" +msgstr "Փետրվար" + +msgid "March" +msgstr "Մարտ" + +msgid "April" +msgstr "Ապրիլ" + +msgid "May" +msgstr "Մայիս" + +msgid "June" +msgstr "Հունիս" + +msgid "July" +msgstr "Հուլիս" + +msgid "August" +msgstr "Օգոստոս" + +msgid "September" +msgstr "Սեպտեմբեր" + +msgid "October" +msgstr "Հոկտեմբեր" + +msgid "November" +msgstr "Նոյեմբեր" + +msgid "December" +msgstr "Դեկտեմբեր" + +msgid "jan" +msgstr "հուն" + +msgid "feb" +msgstr "փետ" + +msgid "mar" +msgstr "մար" + +msgid "apr" +msgstr "ապր" + +msgid "may" +msgstr "մայ" + +msgid "jun" +msgstr "հուն" + +msgid "jul" +msgstr "հուլ" + +msgid "aug" +msgstr "օգտ" + +msgid "sep" +msgstr "սեպ" + +msgid "oct" +msgstr "հոկ" + +msgid "nov" +msgstr "նոյ" + +msgid "dec" +msgstr "դեկ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Հուն․" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Փետ․" + +msgctxt "abbrev. month" +msgid "March" +msgstr "Մարտ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Մարտ" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Մայիս" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Հունիս" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Հուլիս" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Օգոստ․" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Սեպտ․" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Հոկտ․" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Նոյ․" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Դեկ․" + +msgctxt "alt. month" +msgid "January" +msgstr "Հունվար" + +msgctxt "alt. month" +msgid "February" +msgstr "Փետրվար" + +msgctxt "alt. month" +msgid "March" +msgstr "Մարտ" + +msgctxt "alt. month" +msgid "April" +msgstr "Ապրիլ" + +msgctxt "alt. month" +msgid "May" +msgstr "Մայիս" + +msgctxt "alt. month" +msgid "June" +msgstr "Հունիս" + +msgctxt "alt. month" +msgid "July" +msgstr "Հուլիս" + +msgctxt "alt. month" +msgid "August" +msgstr "Օգոստոս" + +msgctxt "alt. month" +msgid "September" +msgstr "Սեպտեմբեր" + +msgctxt "alt. month" +msgid "October" +msgstr "Հոկտեմբեր" + +msgctxt "alt. month" +msgid "November" +msgstr "Նոյեմբեր" + +msgctxt "alt. month" +msgid "December" +msgstr "Դեկտեմբեր" + +msgid "This is not a valid IPv6 address." +msgstr "Սա ճիշտ IPv6 հասցե չէ" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "կամ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d տարի" +msgstr[1] "%d տարի" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ամիս" +msgstr[1] "%d ամիս" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d շաբաթ" +msgstr[1] "%d շաբաթ" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d օր" +msgstr[1] "%d օր" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ժամ" +msgstr[1] "%d ժամ" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d րոպե" +msgstr[1] "%d րոպե" + +msgid "0 minutes" +msgstr "0 րոպե" + +msgid "Forbidden" +msgstr "Արգելված" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF ստուգման սխալ․ Հարցումն ընդհատված է" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Դուք տեսնում եք այս հաղորդագրությունը, քանի որ այս կայքը ձևաթերթերը " +"ուղարկելու համար պահանջում է CSRF cookie։ Այն անհրաժեշտ է անվտանգության " +"նկատառումներից ելնելով, համոզվելու համար, որ ձեր բրաուզերը չի գտնվում երրորդ " +"անձանց կառավարման տակ։" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Ավելի մանրամասն տեղեկությունը հասանելի է DEBUG=True֊ի ժամանակ" + +msgid "No year specified" +msgstr "Տարին նշված չէ" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Ամիսը նշված չէ" + +msgid "No day specified" +msgstr "Օրը նշված չէ" + +msgid "No week specified" +msgstr "Շաբաթը նշված չէ" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ոչ մի %(verbose_name_plural)s հասանելի չէ" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Ապագա %(verbose_name_plural)s հասանելի չեն, քանի որ %(class_name)s." +"allow_future ունի False արժեք" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Հարցմանը համապատասխանող ոչ մի %(verbose_name)s չի գտնվել" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Սխալ էջ (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Կատալոգների ինդեքսավորումը թույլատրված չէ այստեղ" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s֊ի ինդեքսը" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e22136f196ce569e3a39dd3da3d867500112c700 GIT binary patch literal 21428 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..adb852fe9 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,1289 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012,2014,2016,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaans" + +msgid "Arabic" +msgstr "arabe" + +msgid "Algerian Arabic" +msgstr "Arabe algerian" + +msgid "Asturian" +msgstr "asturiano" + +msgid "Azerbaijani" +msgstr "azeri" + +msgid "Bulgarian" +msgstr "bulgaro" + +msgid "Belarusian" +msgstr "bielorusso" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "breton" + +msgid "Bosnian" +msgstr "bosniaco" + +msgid "Catalan" +msgstr "catalano" + +msgid "Czech" +msgstr "tcheco" + +msgid "Welsh" +msgstr "gallese" + +msgid "Danish" +msgstr "danese" + +msgid "German" +msgstr "germano" + +msgid "Lower Sorbian" +msgstr "sorabo inferior" + +msgid "Greek" +msgstr "greco" + +msgid "English" +msgstr "anglese" + +msgid "Australian English" +msgstr "anglese australian" + +msgid "British English" +msgstr "anglese britannic" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "espaniol" + +msgid "Argentinian Spanish" +msgstr "espaniol argentin" + +msgid "Colombian Spanish" +msgstr "espaniol colombian" + +msgid "Mexican Spanish" +msgstr "espaniol mexican" + +msgid "Nicaraguan Spanish" +msgstr "espaniol nicaraguan" + +msgid "Venezuelan Spanish" +msgstr "espaniol venzuelan" + +msgid "Estonian" +msgstr "estoniano" + +msgid "Basque" +msgstr "basco" + +msgid "Persian" +msgstr "persiano" + +msgid "Finnish" +msgstr "finnese" + +msgid "French" +msgstr "francese" + +msgid "Frisian" +msgstr "frison" + +msgid "Irish" +msgstr "irlandese" + +msgid "Scottish Gaelic" +msgstr "gaelico scotese" + +msgid "Galician" +msgstr "galiciano" + +msgid "Hebrew" +msgstr "hebreo" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "croato" + +msgid "Upper Sorbian" +msgstr "sorabo superior" + +msgid "Hungarian" +msgstr "hungaro" + +msgid "Armenian" +msgstr "Armenio" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesiano" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandese" + +msgid "Italian" +msgstr "italiano" + +msgid "Japanese" +msgstr "japonese" + +msgid "Georgian" +msgstr "georgiano" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "kazakh" + +msgid "Khmer" +msgstr "khmer" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "coreano" + +msgid "Kyrgyz" +msgstr "Kyrgyz" + +msgid "Luxembourgish" +msgstr "luxemburgese" + +msgid "Lithuanian" +msgstr "lituano" + +msgid "Latvian" +msgstr "letton" + +msgid "Macedonian" +msgstr "macedone" + +msgid "Malayalam" +msgstr "malayalam" + +msgid "Mongolian" +msgstr "mongolico" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "burmese" + +msgid "Norwegian Bokmål" +msgstr "norvegianio bokmål" + +msgid "Nepali" +msgstr "nepali" + +msgid "Dutch" +msgstr "hollandese" + +msgid "Norwegian Nynorsk" +msgstr "norvegiano, nynorsk" + +msgid "Ossetic" +msgstr "ossetico" + +msgid "Punjabi" +msgstr "punjabi" + +msgid "Polish" +msgstr "polonese" + +msgid "Portuguese" +msgstr "portugese" + +msgid "Brazilian Portuguese" +msgstr "portugese brasilian" + +msgid "Romanian" +msgstr "romaniano" + +msgid "Russian" +msgstr "russo" + +msgid "Slovak" +msgstr "slovaco" + +msgid "Slovenian" +msgstr "sloveno" + +msgid "Albanian" +msgstr "albanese" + +msgid "Serbian" +msgstr "serbo" + +msgid "Serbian Latin" +msgstr "serbo latin" + +msgid "Swedish" +msgstr "svedese" + +msgid "Swahili" +msgstr "swahili" + +msgid "Tamil" +msgstr "tamil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "Tadzhik" + +msgid "Thai" +msgstr "thailandese" + +msgid "Turkmen" +msgstr "Turkmen" + +msgid "Turkish" +msgstr "turco" + +msgid "Tatar" +msgstr "tartaro" + +msgid "Udmurt" +msgstr "udmurto" + +msgid "Ukrainian" +msgstr "ukrainiano" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "Uzbek" + +msgid "Vietnamese" +msgstr "vietnamese" + +msgid "Simplified Chinese" +msgstr "chinese simplificate" + +msgid "Traditional Chinese" +msgstr "chinese traditional" + +msgid "Messages" +msgstr "Messages" + +msgid "Site Maps" +msgstr "Mappas de sito" + +msgid "Static Files" +msgstr "Files static" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Le numero de pagina non es un numero integre" + +msgid "That page number is less than 1" +msgstr "Le numero de pagina es minus de 1" + +msgid "That page contains no results" +msgstr "Le pagina non contine resultatos" + +msgid "Enter a valid value." +msgstr "Specifica un valor valide." + +msgid "Enter a valid URL." +msgstr "Specifica un URL valide." + +msgid "Enter a valid integer." +msgstr "Specifica un numero integre valide." + +msgid "Enter a valid email address." +msgstr "Specifica un adresse de e-mail valide." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Scribe un denotation (\"slug\") valide, consistente de litteras, numeros, " +"tractos de sublineamento o tractos de union." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Scribe un denotation (\"slug\") valide, consistente de litteras Unicode, " +"numeros, tractos de sublineamento o tractos de union." + +msgid "Enter a valid IPv4 address." +msgstr "Specifica un adresse IPv4 valide." + +msgid "Enter a valid IPv6 address." +msgstr "Specifica un adresse IPv6 valide." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Specifica un adresse IPv4 o IPv6 valide." + +msgid "Enter only digits separated by commas." +msgstr "Scribe solmente digitos separate per commas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Assecura te que iste valor es %(limit_value)s (illo es %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Assecura te que iste valor es inferior o equal a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Assecura te que iste valor es superior o equal a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assecura te que iste valor ha al minus %(limit_value)d character (illo ha " +"%(show_value)d)." +msgstr[1] "" +"Assecura te que iste valor ha al minus %(limit_value)d characteres (illo ha " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assecura te que iste valor ha al plus %(limit_value)d character (illo ha " +"%(show_value)d)." +msgstr[1] "" +"Assecura te que iste valor ha al plus %(limit_value)d characteres (illo ha " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Specifica un numero." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Assecura te que il non ha plus de %(max)s digito in total." +msgstr[1] "Assecura te que il non ha plus de %(max)s digitos in total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Assecura te que il non ha plus de %(max)s cifra post le comma decimal." +msgstr[1] "" +"Assecura te que il non ha plus de %(max)s cifras post le comma decimal." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Assecura te que il non ha plus de %(max)s cifra ante le comma decimal." +msgstr[1] "" +"Assecura te que il non ha plus de %(max)s cifras ante le comma decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Le extension de nomine de file “%(extension)s” non es permittite. Le " +"extensiones permittite es: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Characteres nulle non es permittite." + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Jam existe %(model_name)s con iste %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Le valor %(value)r non es un option valide." + +msgid "This field cannot be null." +msgstr "Iste campo non pote esser nulle." + +msgid "This field cannot be blank." +msgstr "Iste campo non pote esser vacue." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s con iste %(field_label)s jam existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe esser unic pro %(lookup_type)s de %(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo de typo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Le valor “%(value)s” debe esser o True/Ver o False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Le valor “%(value)s” debe esser True/Ver, False o None/Necun." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (ver o false)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Catena (longitude maxime: %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Numeros integre separate per commas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Le valor “%(value)s” ha un formato de data invalide. Debe esser in formato " +"AAAA-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Le valor “%(value)s” ha le formato correcte (AAAA-MM-DD) ma es un data " +"invalide." + +msgid "Date (without time)" +msgstr "Data (sin hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Le valor “%(value)s” es in un formato invalide. Debe esser in formato AAAA-" +"MM-DD HH:MM[:ss[.uuuuuu]][FH]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Le valor “%(value)s” es in le formato correcte (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][FH]) ma es un data/hora invalide." + +msgid "Date (with time)" +msgstr "Data (con hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Le valor “%(value)s” debe esser un numero decimal." + +msgid "Decimal number" +msgstr "Numero decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Le valor “%(value)s” es in un formato invalide. Debe esser in formato [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duration" + +msgid "Email address" +msgstr "Adresse de e-mail" + +msgid "File path" +msgstr "Cammino de file" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Le valor “%(value)s” debe esser un numero a comma flottante." + +msgid "Floating point number" +msgstr "Numero a comma flottante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Le valor “%(value)s” debe esser un numero integre." + +msgid "Integer" +msgstr "Numero integre" + +msgid "Big (8 byte) integer" +msgstr "Numero integre grande (8 bytes)" + +msgid "Small integer" +msgstr "Parve numero integre" + +msgid "IPv4 address" +msgstr "Adresse IPv4" + +msgid "IP address" +msgstr "Adresse IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Le valor “%(value)s” debe esser None/Nulle, True/Ver o False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (ver, false o nulle)" + +msgid "Positive big integer" +msgstr "Grande numero integre positive" + +msgid "Positive integer" +msgstr "Numero integre positive" + +msgid "Positive small integer" +msgstr "Parve numero integre positive" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Denotation (longitude maxime: %(max_length)s)" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Le valor “%(value)s” es in un formato invalide. Debe esser in formato HH:MM[:" +"ss[.uuuuuu]] ." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Le valor “%(value)s” es in le formato correcte (HH:MM[:ss[.uuuuuu]]) ma es " +"un hora invalide." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binari crude" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” non es un UUID valide." + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Imagine" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Le instantia de %(model)s con %(field)s %(value)r non existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave estranier (typo determinate per le campo associate)" + +msgid "One-to-one relationship" +msgstr "Relation un a un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relation %(from)s a %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relationes %(from)s a %(to)s" + +msgid "Many-to-many relationship" +msgstr "Relation multes a multes" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Iste campo es obligatori." + +msgid "Enter a whole number." +msgstr "Specifica un numero integre." + +msgid "Enter a valid date." +msgstr "Specifica un data valide." + +msgid "Enter a valid time." +msgstr "Specifica un hora valide." + +msgid "Enter a valid date/time." +msgstr "Specifica un data e hora valide." + +msgid "Enter a valid duration." +msgstr "Specifica un duration valide." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Nulle file esseva submittite. Verifica le typo de codification in le " +"formulario." + +msgid "No file was submitted." +msgstr "Nulle file esseva submittite." + +msgid "The submitted file is empty." +msgstr "Le file submittite es vacue." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Assecura te que iste valor ha al plus %(max)d character (illo ha %(length)d)." +msgstr[1] "" +"Assecura te que iste valor ha al plus %(max)d characteres (illo ha " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Per favor o submitte un file o marca le quadrato \"rader\", non ambes." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Per favor incarga un imagine valide. Le file que tu incargava o non esseva " +"un imagine o esseva un imagine corrumpite." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selige un option valide. %(value)s non es inter le optiones disponibile." + +msgid "Enter a list of values." +msgstr "Scribe un lista de valores." + +msgid "Enter a complete value." +msgstr "Specifica un valor complete." + +msgid "Enter a valid UUID." +msgstr "Specifica un UUID valide." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo celate %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordine" + +msgid "Delete" +msgstr "Deler" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Per favor corrige le datos duplicate pro %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Per favor corrige le datos duplicate pro %(field)s, que debe esser unic." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Per favor corrige le datos duplicate pro %(field_name)s, que debe esser unic " +"pro le %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Per favor corrige le sequente valores duplicate." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Per favor selige un option valide. Iste option non es inter le optiones " +"disponibile." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Rader" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Cambiar" + +msgid "Unknown" +msgstr "Incognite" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "si,no,forsan" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "pm." + +msgid "a.m." +msgstr "am." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medienocte" + +msgid "noon" +msgstr "mediedie" + +msgid "Monday" +msgstr "lunedi" + +msgid "Tuesday" +msgstr "martedi" + +msgid "Wednesday" +msgstr "mercuridi" + +msgid "Thursday" +msgstr "jovedi" + +msgid "Friday" +msgstr "venerdi" + +msgid "Saturday" +msgstr "sabbato" + +msgid "Sunday" +msgstr "dominica" + +msgid "Mon" +msgstr "lun" + +msgid "Tue" +msgstr "mar" + +msgid "Wed" +msgstr "mer" + +msgid "Thu" +msgstr "jov" + +msgid "Fri" +msgstr "ven" + +msgid "Sat" +msgstr "sab" + +msgid "Sun" +msgstr "dom" + +msgid "January" +msgstr "januario" + +msgid "February" +msgstr "februario" + +msgid "March" +msgstr "martio" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maio" + +msgid "June" +msgstr "junio" + +msgid "July" +msgstr "julio" + +msgid "August" +msgstr "augusto" + +msgid "September" +msgstr "septembre" + +msgid "October" +msgstr "octobre" + +msgid "November" +msgstr "novembre" + +msgid "December" +msgstr "decembre" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januario" + +msgctxt "alt. month" +msgid "February" +msgstr "Februario" + +msgctxt "alt. month" +msgid "March" +msgstr "Martio" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Maio" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Augusto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octobre" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembre" + +msgid "This is not a valid IPv6 address." +msgstr "Isto non es un adresse IPv6 valide." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Prohibite" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verification CSRF fallite. Requesta abortate." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Tu vide iste message perque iste sito require un cookie CSRF durante le " +"submission de formularios. Iste cookie es requirite pro motivos de " +"securitate, pro assecurar que tu navigator non es sequestrate per tertie " +"personas." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Plus information es disponibile con DEBUG=True." + +msgid "No year specified" +msgstr "Nulle anno specificate" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Nulle mense specificate" + +msgid "No day specified" +msgstr "Nulle die specificate" + +msgid "No week specified" +msgstr "Nulle septimana specificate" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Il non ha %(verbose_name_plural)s disponibile" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"In le futuro, %(verbose_name_plural)s non essera disponibile perque " +"%(class_name)s.allow_future es False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nulle %(verbose_name)s trovate que corresponde al consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Pagina invalide (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Le indices de directorio non es permittite hic." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indice de %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c52d43f2fc42873b99be8e2a7b7a73cb6a5cdf22 GIT binary patch literal 26822 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..1dd31def4 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,1303 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Adiyat Mubarak , 2017 +# Claude Paroz , 2018 +# Fery Setiawan , 2015-2019,2021 +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# oon arfiandwi , 2016,2020 +# rodin , 2011 +# rodin , 2013-2016 +# sag᠎e , 2018-2019 +# Sutrisno Efendi , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arab" + +msgid "Algerian Arabic" +msgstr "Arab Aljazair" + +msgid "Asturian" +msgstr "Asturia" + +msgid "Azerbaijani" +msgstr "Azerbaijani" + +msgid "Bulgarian" +msgstr "Bulgaria" + +msgid "Belarusian" +msgstr "Belarusia" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosnia" + +msgid "Catalan" +msgstr "Catalan" + +msgid "Czech" +msgstr "Ceska" + +msgid "Welsh" +msgstr "Wales" + +msgid "Danish" +msgstr "Denmark" + +msgid "German" +msgstr "Jerman" + +msgid "Lower Sorbian" +msgstr "Sorbian Bawah" + +msgid "Greek" +msgstr "Yunani" + +msgid "English" +msgstr "Inggris" + +msgid "Australian English" +msgstr "Inggris Australia" + +msgid "British English" +msgstr "Inggris Britania" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanyol" + +msgid "Argentinian Spanish" +msgstr "Spanyol Argentina" + +msgid "Colombian Spanish" +msgstr "Spanyol Kolombia" + +msgid "Mexican Spanish" +msgstr "Spanyol Meksiko" + +msgid "Nicaraguan Spanish" +msgstr "Spanyol Nikaragua" + +msgid "Venezuelan Spanish" +msgstr "Spanyol Venezuela" + +msgid "Estonian" +msgstr "Estonia" + +msgid "Basque" +msgstr "Basque" + +msgid "Persian" +msgstr "Persia" + +msgid "Finnish" +msgstr "Finlandia" + +msgid "French" +msgstr "Perancis" + +msgid "Frisian" +msgstr "Frisia" + +msgid "Irish" +msgstr "Irlandia" + +msgid "Scottish Gaelic" +msgstr "Skolandia Gaelik" + +msgid "Galician" +msgstr "Galicia" + +msgid "Hebrew" +msgstr "Ibrani" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroasia" + +msgid "Upper Sorbian" +msgstr "Sorbian Atas" + +msgid "Hungarian" +msgstr "Hungaria" + +msgid "Armenian" +msgstr "Armenia" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesia" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandia" + +msgid "Italian" +msgstr "Italia" + +msgid "Japanese" +msgstr "Jepang" + +msgid "Georgian" +msgstr "Georgia" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Kazakhstan" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Korea" + +msgid "Kyrgyz" +msgstr "Kirgis" + +msgid "Luxembourgish" +msgstr "Luksemburg" + +msgid "Lithuanian" +msgstr "Lithuania" + +msgid "Latvian" +msgstr "Latvia" + +msgid "Macedonian" +msgstr "Makedonia" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolia" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Burma" + +msgid "Norwegian Bokmål" +msgstr "Norwegia Bokmål" + +msgid "Nepali" +msgstr "Nepal" + +msgid "Dutch" +msgstr "Belanda" + +msgid "Norwegian Nynorsk" +msgstr "Norwegia Nynorsk" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polandia" + +msgid "Portuguese" +msgstr "Portugis" + +msgid "Brazilian Portuguese" +msgstr "Portugis Brazil" + +msgid "Romanian" +msgstr "Romania" + +msgid "Russian" +msgstr "Rusia" + +msgid "Slovak" +msgstr "Slovakia" + +msgid "Slovenian" +msgstr "Slovenia" + +msgid "Albanian" +msgstr "Albania" + +msgid "Serbian" +msgstr "Serbia" + +msgid "Serbian Latin" +msgstr "Serbia Latin" + +msgid "Swedish" +msgstr "Swedia" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tajik" + +msgid "Thai" +msgstr "Thailand" + +msgid "Turkmen" +msgstr "Turkmenistan" + +msgid "Turkish" +msgstr "Turki" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainia" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbek" + +msgid "Vietnamese" +msgstr "Vietnam" + +msgid "Simplified Chinese" +msgstr "Tiongkok Sederhana" + +msgid "Traditional Chinese" +msgstr "Tiongkok Tradisionil" + +msgid "Messages" +msgstr "Pesan" + +msgid "Site Maps" +msgstr "Peta Situs" + +msgid "Static Files" +msgstr "Berkas Statis" + +msgid "Syndication" +msgstr "Sindikasi" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Nomor halaman itu bukan sebuah integer" + +msgid "That page number is less than 1" +msgstr "Nomor halaman itu kurang dari 1" + +msgid "That page contains no results" +msgstr "Tidak ada hasil untuk halaman tersebut" + +msgid "Enter a valid value." +msgstr "Masukkan nilai yang valid." + +msgid "Enter a valid URL." +msgstr "Masukkan URL yang valid." + +msgid "Enter a valid integer." +msgstr "Masukan sebuah bilangan bulat yang benar" + +msgid "Enter a valid email address." +msgstr "Masukkan alamat email yang valid." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Masukkan “slug” valid yang terdiri dari huruf, angka, garis bawah, atau " +"tanda hubung." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Masukkan sebuah “slug” valid yang terdiri dari huruf, angka, garis bawah, " +"atau penghubung Unicode." + +msgid "Enter a valid IPv4 address." +msgstr "Masukkan alamat IPv4 yang valid." + +msgid "Enter a valid IPv6 address." +msgstr "Masukkan alamat IPv6 yang valid" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Masukkan alamat IPv4 atau IPv6 yang valid" + +msgid "Enter only digits separated by commas." +msgstr "Hanya masukkan angka yang dipisahkan dengan koma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Pastikan nilai ini %(limit_value)s (saat ini %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Pastikan nilai ini lebih kecil dari atau sama dengan %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Pastikan nilai ini lebih besar dari atau sama dengan %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Pastikan nilai ini mengandung paling sedikit %(limit_value)d karakter " +"(sekarang %(show_value)d karakter)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Pastikan nilai ini mengandung paling banyak %(limit_value)d karakter " +"(sekarang %(show_value)d karakter)." + +msgid "Enter a number." +msgstr "Masukkan sebuah bilangan." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Pastikan jumlah angka pada bilangan tidak melebihi %(max)s angka." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Pastikan bilangan tidak memiliki lebih dari %(max)s angka desimal." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Pastikan jumlah angka sebelum desimal pada bilangan tidak memiliki lebih " +"dari %(max)s angka." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Ekstensi berkas “%(extension)s” tidak diizinkan. Ekstensi diizinkan adalah: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Karakter null tidak diizinkan." + +msgid "and" +msgstr "dan" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s dengan %(field_labels)s ini tidak ada." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Nilai %(value)r bukan pilihan yang valid." + +msgid "This field cannot be null." +msgstr "Field ini tidak boleh null." + +msgid "This field cannot be blank." +msgstr "Field ini tidak boleh kosong." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s dengan %(field_label)s telah ada." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s haruslah unik untuk %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Field dengan tipe: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Nilai “%(value)s” harus berupa True atau False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Nilai “%(value)s” harus berupa True, False, atau None." + +msgid "Boolean (Either True or False)" +msgstr "Nilai Boolean (Salah satu dari True atau False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (maksimum %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Bilangan asli yang dipisahkan dengan koma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Nilai “%(value)s” mempunyai format tanggal yang tidak valid. Tanggal harus " +"dalam format YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Nilai “%(value)s” memiliki format yang benar (YYYY-MM-DD), tetapi tanggalnya " +"tidak valid." + +msgid "Date (without time)" +msgstr "Tanggal (tanpa waktu)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Nilai “%(value)s” memiliki format yang tidak valid. Tanggal dan waktu harus " +"dalam format YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Nilai “%(value)s” memiliki format yang benar (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), tetapi tanggal/waktunya tidak valid." + +msgid "Date (with time)" +msgstr "Tanggal (dengan waktu)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Nilai “%(value)s” harus berupa bilangan desimal." + +msgid "Decimal number" +msgstr "Bilangan desimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Nilai “%(value)s” mempunyai format yang tidak valid. Waktu harus dalam " +"format [DD] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Durasi" + +msgid "Email address" +msgstr "Alamat email" + +msgid "File path" +msgstr "Lokasi berkas" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Nilai “%(value)s” harus berupa bilangan real." + +msgid "Floating point number" +msgstr "Bilangan 'floating point'" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Nilai “%(value)s” harus berupa integer." + +msgid "Integer" +msgstr "Bilangan Asli" + +msgid "Big (8 byte) integer" +msgstr "Bilangan asli raksasa (8 byte)" + +msgid "Small integer" +msgstr "Bilangan asli kecil" + +msgid "IPv4 address" +msgstr "Alamat IPv4" + +msgid "IP address" +msgstr "Alamat IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Nilai “%(value)s” harus berupa None, True, atau False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Salah satu dari True, False, atau None)" + +msgid "Positive big integer" +msgstr "Integer besar positif" + +msgid "Positive integer" +msgstr "Bilangan asli positif" + +msgid "Positive small integer" +msgstr "Bilangan asli kecil positif" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hingga %(max_length)s karakter)" + +msgid "Text" +msgstr "Teks" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Nilai “%(value)s” mempunyai format yang tidak valid. Waktu harus dalam " +"format HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Nilai “%(value)s” mempunyai format yang benar (HH:MM[:ss[.uuuuuu]]), tetapi " +"nilai waktunya tidak valid." + +msgid "Time" +msgstr "Waktu" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Data biner mentah" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” bukan UUID yang valid." + +msgid "Universally unique identifier" +msgstr "Pengenal unik secara universal" + +msgid "File" +msgstr "Berkas" + +msgid "Image" +msgstr "Gambar" + +msgid "A JSON object" +msgstr "Objek JSON" + +msgid "Value must be valid JSON." +msgstr "Nilai harus JSON yang valid." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Salinan %(model)s dengan %(field)s %(value)r tidak ada." + +msgid "Foreign Key (type determined by related field)" +msgstr "Kunci Asing (tipe tergantung dari bidang yang berkaitan)" + +msgid "One-to-one relationship" +msgstr "Hubungan satu-ke-satu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Hubungan %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Hubungan %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Hubungan banyak-ke-banyak" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Bidang ini tidak boleh kosong." + +msgid "Enter a whole number." +msgstr "Masukkan keseluruhan angka bilangan." + +msgid "Enter a valid date." +msgstr "Masukkan tanggal yang valid." + +msgid "Enter a valid time." +msgstr "Masukkan waktu yang valid." + +msgid "Enter a valid date/time." +msgstr "Masukkan tanggal/waktu yang valid." + +msgid "Enter a valid duration." +msgstr "Masukan durasi waktu yang benar." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Jumlah hari harus di antara {min_days} dan {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Tidak ada berkas yang dikirimkan. Periksa tipe pengaksaraan formulir." + +msgid "No file was submitted." +msgstr "Tidak ada berkas yang dikirimkan." + +msgid "The submitted file is empty." +msgstr "Berkas yang dikirimkan kosong." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Pastikan nama berkas ini mengandung paling banyak %(max)d karakter (sekarang " +"%(length)d karakter)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Pilih antara mengirimkan berkas atau menghapus tanda centang pada kotak " +"centang" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Unggah gambar yang valid. Berkas yang Anda unggah bukan merupakan berkas " +"gambar atau gambarnya rusak." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Masukkan pilihan yang valid. %(value)s bukan salah satu dari pilihan yang " +"tersedia." + +msgid "Enter a list of values." +msgstr "Masukkan beberapa nilai." + +msgid "Enter a complete value." +msgstr "Masukkan nilai yang komplet." + +msgid "Enter a valid UUID." +msgstr "Masukan UUID yang benar." + +msgid "Enter a valid JSON." +msgstr "Masukkan JSON yang valid." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Bidang tersembunyi %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Data ManagementForm telah hilang atau telah dirusak. Bidang yang hilang: " +"%(field_names)s. Anda mungkin butuh memberkaskan laporan kesalahan jika " +"masalah masih ada." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Harap ajukan paling banyak %d formulir." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Harap ajukan setidaknya %d formulir." + +msgid "Order" +msgstr "Urutan" + +msgid "Delete" +msgstr "Hapus" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Perbaiki data ganda untuk %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Perbaiki data ganda untuk %(field)s yang nilainya harus unik." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Perbaiki data ganda untuk %(field_name)s yang nilainya harus unik untuk " +"pencarian %(lookup)s pada %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Perbaiki nilai ganda di bawah ini." + +msgid "The inline value did not match the parent instance." +msgstr "Nilai sebaris tidak cocok dengan instance induk." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Masukkan pilihan yang valid. Pilihan tersebut bukan salah satu dari pilihan " +"yang tersedia." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” bukan nilai yang valid." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s tidak dapat diterjemahkan dalam zona waktu " +"%(current_timezone)s; mungkin nilainya ambigu atau tidak ada." + +msgid "Clear" +msgstr "Hapus" + +msgid "Currently" +msgstr "Saat ini" + +msgid "Change" +msgstr "Ubah" + +msgid "Unknown" +msgstr "Tidak diketahui" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Tidak" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ya,tidak,mungkin" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bita" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m" + +msgid "a.m." +msgstr "a.m" + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "tengah malam" + +msgid "noon" +msgstr "siang" + +msgid "Monday" +msgstr "Senin" + +msgid "Tuesday" +msgstr "Selasa" + +msgid "Wednesday" +msgstr "Rabu" + +msgid "Thursday" +msgstr "Kamis" + +msgid "Friday" +msgstr "Jumat" + +msgid "Saturday" +msgstr "Sabtu" + +msgid "Sunday" +msgstr "Minggu" + +msgid "Mon" +msgstr "Sen" + +msgid "Tue" +msgstr "Sel" + +msgid "Wed" +msgstr "Rab" + +msgid "Thu" +msgstr "Kam" + +msgid "Fri" +msgstr "Jum" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Min" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Maret" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "Agustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mei" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "agu" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Maret" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Agu" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Des." + +msgctxt "alt. month" +msgid "January" +msgstr "Januari" + +msgctxt "alt. month" +msgid "February" +msgstr "Februari" + +msgctxt "alt. month" +msgid "March" +msgstr "Maret" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mei" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "Agustus" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Desember" + +msgid "This is not a valid IPv6 address." +msgstr "Ini bukan alamat IPv6 yang valid." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "atau" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d tahun" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d bulan" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d minggu" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d hari" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d jam" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d menit" + +msgid "Forbidden" +msgstr "Terlarang" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verifikasi CSRF gagal, Permintaan dibatalkan." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Anda melihat pesan ini karena jaringan HTTPS ini membutuhkan “Referer " +"header” untuk dikirim oleh peramban jaringan anda, tetapi tidak ada yg " +"dikirim. Kepala ini diwajibkan untuk alasan keamanan, untuk memastikan bahwa " +"peramban anda tidak sedang dibajak oleh pihak ketiga." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Jika Anda menonaktifkan header 'Referrer' pada konfigurasi peramban Anda, " +"mohon aktfikan kembali, setidaknya untuk situs ini, untuk koneksi HTTPS, " +"atau untuk request 'same-origin'." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jika Anda menggunakan tag " +"atau menyertakan bagian kepala 'Referrer-Policy: no-referrer', harap hapus " +"hal tersebut. Perlindungan CSRF membutuhkan bagian kepala 'Referrer' untuk " +"melakukan pemeriksaan pengarahan ketat. Jika Anda khawatir mengenai privasi, " +"gunakan cara lain seperti untuk tautan ke situs " +"pihak ketiga." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Anda melihat pesan ini karena situs ini membutuhkan sebuah kuki CSRF ketika " +"mengirimkan formulir. Kuki ini dibutuhkan untuk alasan keamanan, untuk " +"memastikan bahwa peramban Anda tidak sedang dibajak oleh pihak ketiga." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Jika Anda telah mengatur peramban Anda untuk menonaktifkan kuki, maka " +"aktifkanlah kembali, setidaknya untuk website ini, atau untuk request 'same-" +"origin'." + +msgid "More information is available with DEBUG=True." +msgstr "Informasi lebih lanjut tersedia dengan DEBUG=True" + +msgid "No year specified" +msgstr "Tidak ada tahun dipilih" + +msgid "Date out of range" +msgstr "Tanggal di luar kisaran" + +msgid "No month specified" +msgstr "Tidak ada bulan dipilih" + +msgid "No day specified" +msgstr "Tidak ada hari dipilih" + +msgid "No week specified" +msgstr "Tidak ada minggu dipilih" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Tidak ada %(verbose_name_plural)s tersedia" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s di masa depan tidak tersedia karena %(class_name)s." +"allow_future bernilai False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Nilai tanggal tidak valid “%(datestr)s” untuk format “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Tidak ada %(verbose_name)s yang cocok dengan kueri" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Laman bukan yang “terakhir” dan juga tidak dapat dikonversikan ke sebuah " +"integer." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Laman tidak valid (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Daftar kosong dan '%(class_name)s.allow_empty' bernilai False." + +msgid "Directory indexes are not allowed here." +msgstr "Indeks direktori tidak diizinkan di sini." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” tidak ada" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Daftar isi %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Selamat! Instalasi berjalan lancar!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Lihat catatan rilis untuk Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Anda sedang melihat halaman ini karena DEBUG=True berada di berkas pengaturan Anda dan Anda belum " +"mengonfigurasi URL apa pun." + +msgid "Django Documentation" +msgstr "Dokumentasi Django" + +msgid "Topics, references, & how-to’s" +msgstr "Topik, referensi, & cara pemakaian" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Sebuah Aplikasi Jajak Pendapat" + +msgid "Get started with Django" +msgstr "Memulai dengan Django" + +msgid "Django Community" +msgstr "Komunitas Django" + +msgid "Connect, get help, or contribute" +msgstr "Terhubung, minta bantuan, atau berkontribusi" diff --git a/venv/Lib/site-packages/django/conf/locale/id/__init__.py b/venv/Lib/site-packages/django/conf/locale/id/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/id/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/id/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84f6891e5a9643ccec85ab8eb1d92bd9efc4ecda GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lW{Q4%d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04WPJ&j0`b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/id/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/id/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1bdb9fd19747352a447e1699c6a7fcc808634cd4 GIT binary patch literal 947 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, 2020 +# Mariusz Felisiak , 2020 +# Okpala Olisa , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-30 12:26+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Igbo (http://www.transifex.com/django/django/language/ig/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ig\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabici" + +msgid "Algerian Arabic" +msgstr "Arabici ndị Algeria " + +msgid "Asturian" +msgstr "Asturian" + +msgid "Azerbaijani" +msgstr "Azerbaijani" + +msgid "Bulgarian" +msgstr "Bulgaria" + +msgid "Belarusian" +msgstr "Belarusia" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosnian" + +msgid "Catalan" +msgstr "Catalan" + +msgid "Czech" +msgstr "Czech" + +msgid "Welsh" +msgstr "Welsh" + +msgid "Danish" +msgstr "Danishi" + +msgid "German" +msgstr "Germani" + +msgid "Lower Sorbian" +msgstr "Sorbian nke Ala" + +msgid "Greek" +msgstr "Greeki" + +msgid "English" +msgstr "Bekee" + +msgid "Australian English" +msgstr "Bekee ndị Australia" + +msgid "British English" +msgstr "Bekee ndị Britain" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanishi" + +msgid "Argentinian Spanish" +msgstr "Spanishi ndị Argentina" + +msgid "Colombian Spanish" +msgstr "Spanishi ndị Colombia " + +msgid "Mexican Spanish" +msgstr "Spanishi ndị Mexico " + +msgid "Nicaraguan Spanish" +msgstr "Spanishi ndị Nicaraguan" + +msgid "Venezuelan Spanish" +msgstr "Spanishi ndị Venezuela " + +msgid "Estonian" +msgstr "Estonian" + +msgid "Basque" +msgstr "Basque" + +msgid "Persian" +msgstr "Persian" + +msgid "Finnish" +msgstr "Finnishi" + +msgid "French" +msgstr "Fụrenchị" + +msgid "Frisian" +msgstr "Frisian" + +msgid "Irish" +msgstr "Irishi" + +msgid "Scottish Gaelic" +msgstr "Scottish Gaelici" + +msgid "Galician" +msgstr "Galiciani" + +msgid "Hebrew" +msgstr "Hibru" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croatian" + +msgid "Upper Sorbian" +msgstr "Sorbian nke Elu" + +msgid "Hungarian" +msgstr "Hungarian" + +msgid "Armenian" +msgstr "Armeniani" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesian" + +msgid "Igbo" +msgstr "ìgbò" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Icelandici" + +msgid "Italian" +msgstr "Italian" + +msgid "Japanese" +msgstr "Japanisi " + +msgid "Georgian" +msgstr "Georgian" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Kazakh" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Korean" + +msgid "Kyrgyz" +msgstr "Kyrgyz" + +msgid "Luxembourgish" +msgstr "Luxembourgish" + +msgid "Lithuanian" +msgstr "Lithuanian" + +msgid "Latvian" +msgstr "Latvian" + +msgid "Macedonian" +msgstr "Macedonian" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolian" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmese" + +msgid "Norwegian Bokmål" +msgstr "Bokmål ndị Norway" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Dutch" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk ndị Norway " + +msgid "Ossetic" +msgstr "Ossetici" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polishi" + +msgid "Portuguese" +msgstr "Portuguisi" + +msgid "Brazilian Portuguese" +msgstr "Portuguese ndị Brazil" + +msgid "Romanian" +msgstr "Romaniani" + +msgid "Russian" +msgstr "Russiani" + +msgid "Slovak" +msgstr "Slovaki" + +msgid "Slovenian" +msgstr "Sloveniani" + +msgid "Albanian" +msgstr "Albaniani" + +msgid "Serbian" +msgstr "Serbiani" + +msgid "Serbian Latin" +msgstr "Serbian Latini" + +msgid "Swedish" +msgstr "Swedishi" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tajik" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "Turkmen" + +msgid "Turkish" +msgstr "Turkishi" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainiani" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbeki" + +msgid "Vietnamese" +msgstr "Vietnamesi" + +msgid "Simplified Chinese" +msgstr "Chinisi Ndị Mfe" + +msgid "Traditional Chinese" +msgstr "Odịnala Chinisi" + +msgid "Messages" +msgstr "Ozi" + +msgid "Site Maps" +msgstr "Maapụ Saịtị" + +msgid "Static Files" +msgstr "Faịlụ Nkwụsiri ike" + +msgid "Syndication" +msgstr "Nyefee Njikwa" + +msgid "That page number is not an integer" +msgstr "Nọmba peeji ahụ abụghị onu ogugu" + +msgid "That page number is less than 1" +msgstr "Nọmba peeji ahụ erughị 1" + +msgid "That page contains no results" +msgstr "Peeji ahụ enweghị nsonaazụ ọ bụla" + +msgid "Enter a valid value." +msgstr "Tinye uru zuru oke." + +msgid "Enter a valid URL." +msgstr "Tinye URL zuru oke." + +msgid "Enter a valid integer." +msgstr "Tinye nọmba zuru oke." + +msgid "Enter a valid email address." +msgstr "Tinye adreesị ozi ịntanetị n'zuru oke." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Tinye “slug” zuru oke nke mejupụtara mkpụrụedemede, ọnụọgụ, underscores ma ọ " +"bụ hyphens." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Tinye “slug” zuru oke nke mejupụtara Unicode mkpụrụedemede, ọnụọgụ, " +"underscores ma ọ bụ hyphens." + +msgid "Enter a valid IPv4 address." +msgstr "Tinye adreesị IPv4 zuru oke." + +msgid "Enter a valid IPv6 address." +msgstr "Tinye adreesị IPv6 zuru oke." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Tinye adreesị IPv4 ma obu IPv6 zuru oke." + +msgid "Enter only digits separated by commas." +msgstr "Tinye naanị ọnụọgụ kewapụrụ site na comma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Gbaa mbọ hụ na %(limit_value)s (ọ bụ %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Gbaa mbọ hụ na orughị ma ọ bụ hara nhata %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Gbaa mbọ hụ na okarịa ma ọ bụ hara nhata%(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gbaa mbọ hụ na a nwere opekata mpe %(limit_value)d odide (o nwere " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gbaa mbọ hụ na a nwere kacha %(limit_value)d odide (o nwere%(show_value)d)." + +msgid "Enter a number." +msgstr "Tinye nọmba." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Gbaa mbọ hụ na ọ dighi karịrị %(max)s nọmba na mkpokọta." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Gbaa mbọ hụ na ọ dighi karịrị %(max)s na ebe ntụpọ." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Gbaa mbọ hụ na ọ dighi karịrị %(max)s nọmba tupu akụkụ ebe ntụpọ." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Ndọtị Faịlị “%(extension)s”anaghị anabata. Ndọtị nke kwere n'nabata bu: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Anabataghị ihe odide n'enweghị isi." + +msgid "and" +msgstr "na" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s ya na nke a %(field_labels)s dị adị." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Nọmba %(value)r abụghị ezigbo nhọrọ." + +msgid "This field cannot be null." +msgstr "Ebe a enweghị ike ịbụ ihe efu." + +msgid "This field cannot be blank." +msgstr "Ebe a enweghị ike ịbụ ohere efu." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s ya na nke a %(field_label)s dị adi." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s ga-abụ ihe pụrụ iche maka %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Ebe a nke ụdị: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” uru a ga-abụrịrị Eziokwu ma ọ bụ Ugha." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s”uru a ga-abụrịrị Eziokwu, Ugha, ma ọ bụ Onweghị." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Eziokwu ma o bụ Ugha)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (ruo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Rikom-kewapụrụ nomba" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” uru a nwere usoro nke n'adịghị adị. Ọ ga-abụrịrị n'ụdị YYYY-MM-" +"DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s”uru a nwere usoro ziri ezi (YYYY-MM-DD) mana ọ bụ ụbọchị n'abaghị " +"uru." + +msgid "Date (without time)" +msgstr "Ubọchị (na-enweghị oge)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” uru a nwere usoro nke n'adịghị adị. Ọ ga-abụrịrị n'ụdị YYYY-MM-" +"DD HH:MM[:ss[.uuuuuu]][TZ] usoro. " + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s”uru a nwere usoro ziri ezi (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ])mana ọ bụ ụbọchị n'abaghị uru." + +msgid "Date (with time)" +msgstr "Ubọchị (na oge)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” uru a ga-abụrịrị nọmba ntụpọ." + +msgid "Decimal number" +msgstr "Nọmba ntụpọ." + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s”uru a nwere usoro nke n'adịghị adị. Ọ ga-abụrịrị n'ụdị [DD] " +"[[HH:]MM:]ss[.uuuuuu]usoro." + +msgid "Duration" +msgstr "Oge ole" + +msgid "Email address" +msgstr "Adreesị ozi ịntanetị" + +msgid "File path" +msgstr "Uzọ Faịlụ di" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s”uru a ga-abụrịrị float." + +msgid "Floating point number" +msgstr "Nọmba ebe floating no " + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” uru a ga-abụrịrị onu ogugu" + +msgid "Integer" +msgstr "Onu ogugu" + +msgid "Big (8 byte) integer" +msgstr "Onu ogugu (8 byte) nnukwu" + +msgid "IPv4 address" +msgstr "Adreesị IPv4" + +msgid "IP address" +msgstr "Adreesị IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s”uru a ga-abụrịrị na Odighị, Eziokwu ma ọ bụ.Ugha." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Ihe a ga abụriri eziokwu, ụgha ma ọ bu na onweghi)" + +msgid "Positive big integer" +msgstr "Nnukwu nomba nke oma" + +msgid "Positive integer" +msgstr "Nọmba nke oma" + +msgid "Positive small integer" +msgstr "Obere nọmba nke oma" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (ruo %(max_length)s)" + +msgid "Small integer" +msgstr "Onu ogugu nke obere" + +msgid "Text" +msgstr "Ederede" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” uru a nwere usoro nke n'adịghị adị. Ọ ga-abụrịrị n'ụdị HH:MM[:" +"ss[.uuuuuu]]usoro." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” uru a nwere usoro ziri ezi (HH:MM[:ss[.uuuuuu]]) mana ọ bu oge " +"n'abaghị uru." + +msgid "Time" +msgstr "Oge" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Raw binary data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s”abụghị UUID n’kwesịrị ekwesị." + +msgid "Universally unique identifier" +msgstr "Universally unique identifier" + +msgid "File" +msgstr "Faịlụ" + +msgid "Image" +msgstr "Foto" + +msgid "A JSON object" +msgstr "Ihe JSON" + +msgid "Value must be valid JSON." +msgstr "Uru a ga-abụrịrị JSON n’kwesịrị ekwesị." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s dịka %(field)s %(value)r adịghị adị." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (ụdị kpebiri site na mpaghara metụtara)" + +msgid "One-to-one relationship" +msgstr "Mmekọrịta otu-na-otu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s mmekọrịta" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s mmekọrịta" + +msgid "Many-to-many relationship" +msgstr "Mmekọrịta otutu-na-otutu" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ebe a kwesiri ekwesi." + +msgid "Enter a whole number." +msgstr "Tinye nọmba onu ogugu." + +msgid "Enter a valid date." +msgstr "Tinye ụbọchị zuru oke." + +msgid "Enter a valid time." +msgstr "Tinye oge zuru oke." + +msgid "Enter a valid date/time." +msgstr "Tinye ụbọchị / oge zuru oke" + +msgid "Enter a valid duration." +msgstr "Tinye oge onuno zuru oke." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Onu ogugu ubochi a gha aburiri n’agbata {min_days} na {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Onweghi faịlụ a debanyere. Lee ụdị encoding a ntinye na ederede." + +msgid "No file was submitted." +msgstr "E nweghị faịlụ e watara" + +msgid "The submitted file is empty." +msgstr "O nweghị ihe dị n'ime faịlụ e wetara" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Gbaa mbọ hụ na aha faịlụ a nwere kacha %(max)d odide (o nwere %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Biko nyefee faịlụ a ma ọ bụ tinye akara na igbe akara, ọ bụghị ha abụọ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Bugote foto n’zuru oke. Faịlụ a ị bugoro abụghị foto ma ọ bụ foto rụrụ arụ." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Họrọ ezigbo nhọrọ. %(value)sabụghị otu nhọrọ n'ime nke dịnụ." + +msgid "Enter a list of values." +msgstr "Tinye ndepụta nke ụkpụrụ." + +msgid "Enter a complete value." +msgstr "Tinye uru zuru okè" + +msgid "Enter a valid UUID." +msgstr "Tinye UUID kwesịrị ekwesị" + +msgid "Enter a valid JSON." +msgstr "Tinye JSON kwesịrị ekwesị" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Ebe ezoro ezo%(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Data ManagementForm na-efu efu ma ọ bụ a kpara ya aka" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Biko nyefee %d ma ọ bụ fomụ di ole na ole." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Biko nyefee%d ma ọ bụ fomụ karịrị otu ahụ" + +msgid "Order" +msgstr "Usoro" + +msgid "Delete" +msgstr "Hichapụ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Biko dozie data oji abuo a maka %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Biko dozie data oji abuo a maka %(field)s, nke gha diriri iche." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Biko dozie data oji abuo a maka %(field_name)s nke gha diriri iche maka " +"%(lookup)s n'ime %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Biko dozie uru oji abuo nke no n'okpuru." + +msgid "The inline value did not match the parent instance." +msgstr "Uru inline a adabaghị na parent instance." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Họrọ ezigbo nhọrọ. Nhọrọ a abụghị otu nhọrọ dịnụ." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "%(pk)sabụghi uru kwesịrị ekwesị" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s enweghị ike ịkọwa na mpaghara oge %(current_timezone)s; onwere " +"ike iju anya ma obu ọ gaghị adị." + +msgid "Clear" +msgstr "Kpochapu" + +msgid "Currently" +msgstr "Ugbu a" + +msgid "Change" +msgstr "Gbanwee" + +msgid "Unknown" +msgstr "Ihe N’amaghi" + +msgid "Yes" +msgstr "Ee" + +msgid "No" +msgstr "Mba" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ee, mba, nwere ike" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "etiti Abalị" + +msgid "noon" +msgstr "Ehihie" + +msgid "Monday" +msgstr "Mọnde" + +msgid "Tuesday" +msgstr "Tiuzdee" + +msgid "Wednesday" +msgstr "Wenezdee" + +msgid "Thursday" +msgstr "Tọọzdee" + +msgid "Friday" +msgstr "Fraịdee" + +msgid "Saturday" +msgstr "Satọdee" + +msgid "Sunday" +msgstr "Mbọsi Uka" + +msgid "Mon" +msgstr "Mọnde" + +msgid "Tue" +msgstr "Tiu" + +msgid "Wed" +msgstr "Wen" + +msgid "Thu" +msgstr "Tọọ" + +msgid "Fri" +msgstr "Fraị" + +msgid "Sat" +msgstr "Sat" + +msgid "Sun" +msgstr "Ụka" + +msgid "January" +msgstr "Jenụwarị" + +msgid "February" +msgstr "Febrụwarị" + +msgid "March" +msgstr "Maachị" + +msgid "April" +msgstr "Eprel" + +msgid "May" +msgstr "Mee" + +msgid "June" +msgstr "Juun" + +msgid "July" +msgstr "Julaị" + +msgid "August" +msgstr "Ọgọọst" + +msgid "September" +msgstr "Septemba" + +msgid "October" +msgstr "Ọktoba" + +msgid "November" +msgstr "Novemba" + +msgid "December" +msgstr "Disemba" + +msgid "jan" +msgstr "jen" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "maa" + +msgid "apr" +msgstr "epr" + +msgid "may" +msgstr "mee" + +msgid "jun" +msgstr "juu" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ọgọ" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "ọkt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dis" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jenụwarị" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Maachị" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Eprel" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mee" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julaị" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ọgọ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Ọkt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dis." + +msgctxt "alt. month" +msgid "January" +msgstr "Jenụwarị" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrụwarị" + +msgctxt "alt. month" +msgid "March" +msgstr "Maachị" + +msgctxt "alt. month" +msgid "April" +msgstr "Eprel" + +msgctxt "alt. month" +msgid "May" +msgstr "Mee" + +msgctxt "alt. month" +msgid "June" +msgstr "Juun" + +msgctxt "alt. month" +msgid "July" +msgstr "Julaị" + +msgctxt "alt. month" +msgid "August" +msgstr "Ọgọọst" + +msgctxt "alt. month" +msgid "September" +msgstr "Septemba" + +msgctxt "alt. month" +msgid "October" +msgstr "Ọktoba" + +msgctxt "alt. month" +msgid "November" +msgstr "Novemba" + +msgctxt "alt. month" +msgid "December" +msgstr "Disemba" + +msgid "This is not a valid IPv6 address." +msgstr "Nke a abaghị adresị IPv6 zuru oke." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ma obu" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d afọ" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%dọnwa" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d izu" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ụbọchị" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d awa" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d nkeji" + +msgid "Forbidden" +msgstr "Amachibidoro" + +msgid "CSRF verification failed. Request aborted." +msgstr "Nyocha CSRF emeghị nke ọma. Ajuju atọrọ.." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"I na-ahụ ozi a n'ihi na saịtị HTTPS a chọrọ “Onye isi okwu” ka ihe nchọgharị " +"weebụ gị zitere gị, mana onweghi nke zitere. Achọrọ isi ihe a maka ebumnuche " +"nchekwa, iji jide n’aka na ndị ọzọ anaghị egbochi ihe nchọgharị gị." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ọ bụrụ na ihazila ihe nchọgharị gị iji gbanyụọ ndị na-eji “ndị nnọchianya”, " +"biko jisie iketiachi ya, ma ọ dịkarịa maka saịtị a, ma ọ bụ maka njikọ " +"HTTPS, ma ọ bụ maka a arịrịọ “otu ụdị”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ọ bụrụ na ị na-eji akara " +"mmado ma ọ bụ gụnyere isi nke \"Iwu-Onye na gba ama: neweghị onye na-gba ama" +"\", biko wepu ha. Nchedo CSRF chọrọ ka isi “onye na gba ama” wee mee nyocha " +"ike nlele nke gbara ama. Ọ bụrụ na ihe gbasara gị gbasara nzuzo, jiri ụzọ " +"ọzọ dị ka njikọ maka saịtị ndị ọzọ." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"I na-ahụ ozi a n'ihi na saịtị a chọrọ CSRF cookie mgbe ị na-edobe akwụkwọ. " +"Achọrọ cookie a maka ebumnuche nchekwa, iji hụ na ndị ọzọ anaghị egbochi ihe " +"nchọgharị gị." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ọ bụrụ na ịhazila ihe nchọgharị gị iji gbanyụọ kuki, biko tiachi ya ka o na " +"ruo oru, opekata mpe maka saịtị a, ma ọ bụ maka “otu ụdị\"." + +msgid "More information is available with DEBUG=True." +msgstr "Ihe omuma ndi ozo di na DEBUG = Eziokwu." + +msgid "No year specified" +msgstr "Ọ dịghị afọ akọwapụtara" + +msgid "Date out of range" +msgstr "Ubọchị a puru na usoro" + +msgid "No month specified" +msgstr "Onweghị ọnwa akọwapụtara" + +msgid "No day specified" +msgstr "Onweghi ụbọchị akọwapụtara" + +msgid "No week specified" +msgstr "Onweghi izu akọwapụtara" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr " %(verbose_name_plural)sadịghị" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Ọdịnihu %(verbose_name_plural)s adịghị adị n'ihi %(class_name)s.allow_future " +"bu ugha." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "String ụbọchị nabaghị uru “%(datestr)s” Ntọala enyere “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Mba %(verbose_name)s hụrụ ihe dabara na ajụjụ a" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Peeji a a-abụghị “nke ikpeazụ”, a pụghị ịgbanwe ya na int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Peeji na-abaghị uru (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tọgbọ chakoo ndepụta na “%(class_name)s.allow_empty” bụ Ugha." + +msgid "Directory indexes are not allowed here." +msgstr "Anaghị anabata directory indexes ebe a." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” a dịghị" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index of %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" +"Django: usoro Ntanetị maka ndị na-achọkarị izu okè ya na oge edetu imecha." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Lee akwukwo e bipụtara maka Django" +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Nwụnye ahụ dabara nke ọma! Ị mere nke ọma!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"I na-ahụ peeji a n'ihi na DEBUG=True dị na faili setting gị mana ịhazibeghị URL ọ bụla." + +msgid "Django Documentation" +msgstr "Akwụkwọ Ederede Django" + +msgid "Topics, references, & how-to’s" +msgstr "Isiokwu, ntụaka, & otu esi-mee" + +msgid "Tutorial: A Polling App" +msgstr "Nkuzi: App Ntuli Aka" + +msgid "Get started with Django" +msgstr "Bido na Django" + +msgid "Django Community" +msgstr "Obodo Django" + +msgid "Connect, get help, or contribute" +msgstr "Jikọọ, nweta enyemaka, ma ọ bụ tinye aka." diff --git a/venv/Lib/site-packages/django/conf/locale/ig/__init__.py b/venv/Lib/site-packages/django/conf/locale/ig/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ig/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ig/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e44a514f9653ef2371d0da5ef848943326ba6d2f GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lX1acSd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04Z@a(f|Me literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ig/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ig/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9624c682de56a12dc7074fe727b4381414a7fcb3 GIT binary patch literal 729 zcmZXSPmh{F7{(dE6?I+frtPue!oj4AchfYb3kd1*CxB^~kP>8&U_~|zZXzG2w|*s) zo_gA(pTI*?u&ayNnan%${Fvt%hLH99U7~7#zWti}G(r5XMYEBW_*4yC7eqh;0SFKY zNkl;k(U3+h*g_ZZ0<~cqF{l%hkckP@{Q+PH^S09Pk0e%nOKh{C|s1JLh;7Gn~SeoF#o}+3fF{qz3!O)ci z%hwFuQI3XJ|CK1XM>4b(!*cv)>YHbD7ALEgUGH>#L-xN)(ieDru&KH^bDr{S`1bS~ z=X@wix2h)G`L<*Vmf#o`yml00W(&I5U;}-oeU>bLY8f+A)u%s+oT;vUDEsJk;>~cB zW6#=P9C%_DZqjI7U~iff%4Y7#NsfyfGtZV$Sa=W7`oX(P<{nOp=;l5MzXx%IJ+utg zaW)RK^ z-HKw1FY2QrVr>fuibxRzE1=@mK&{)#2J0$5syAI%t!u4q-9C2PU;F>goSWQ)0J^{K zz<2+1&YU^V?|k2xFE4-m$mNRbUF6fqBS$MW{R2vU`2@*T>YBkyje*xfdHy*32z&*8 z6uu4lul~Z%$Kl|UlKe9a$H1e=uQzNooMU*Ip$$JnxeWXuycQk{Z!qcGOnN0ehWxvr z)VmRW2tEK$ggZ?7DfnU1&zN)x4kGrQ8!x+I<>|p1lC2+-oNPEyH)A^y5!Z#(5Nj z77l{){s~a}cQTasPc`YG=J{Dr+WQ=o^}f)gXF%!q#gL^`Hk9|j0%d-#grcusGwJ0} z+F1$Zy;UZ?0m}MrfwJ#*!=dmAD0=x8lyUzVj)Q~QEK+_J{1{9b#)eCwjCUoJ@vVWP zXB(jO?{Sm=BPi{4ne8f@%+IY*@^6Qe;c7Sqz7A!6Mq-Sl{CQC3eLR$LH$rK@1xh&=qH-#P zQtn15?|mCGWojLi_Bx@w_k?-A*YH^=^YXIct5C|l2}MtSZTLHg3aS5v(%z8M^ww2p zLz&-3DD7mRj4KD_{RqmwZ8y)CLFwPkhAU0}YAEflgEFp-=K1&GC8T#jsc*>X$vm6_ zMK4D|X?Gly_b!4mo_dqt2<5#dDE;^nlzGe>USW8P;X1?ZhChb#-pf$*?KdX>$e~F+ zCqsFDCKNrm5K6g5lW!ZwP};o~ieB7lxDm>Gk3jKjPeG~gB`D?JfnwK=7?zB4h~cLV zEyJOPRfZ!BM;V@NIL7dNDC_hEcqFVh`7;e?!w-@_*F3+(s^%`BjG37=FX>R>M0Ws;5>#>DS{>`oG7d_d;3! zeNgIq5sE%_Lz&k%pxE=@oBZRel70?`N0WaVlzBcA%KBUcwO$)$pzNnBpsd%op_JbQ zrQJ>_?>z-&-F^n8-ggZD0HvI&PWn9virqZXq-&s*KNlVgFN89VsZi>jX?Qt2hO}qW zZ6>`GGBkA)lzp)sN5?%qt&vrs-|0O8< z{w>HBP{-6H=@C%YcPf!;sF8_2d>+dD zG(efJIZ)6q0HBlP{#QbJPtks<^66b`{rFJ`)<(a#2+3HWj)70dEN*oKnKeDuQz-gO8YOt z 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, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "العربية" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azərbaycanca" + +msgid "Bulgarian" +msgstr "български" + +msgid "Belarusian" +msgstr "беларуская" + +msgid "Bengali" +msgstr "বাংলা" + +msgid "Breton" +msgstr "Brezhoneg" + +msgid "Bosnian" +msgstr "босански" + +msgid "Catalan" +msgstr "Català" + +msgid "Czech" +msgstr "čeština" + +msgid "Welsh" +msgstr "Cymraeg" + +msgid "Danish" +msgstr "dansk" + +msgid "German" +msgstr "Deutsch" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Ελληνικά" + +msgid "English" +msgstr "English" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "British English" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español de Venezuela" + +msgid "Estonian" +msgstr "Eesti" + +msgid "Basque" +msgstr "Euskara" + +msgid "Persian" +msgstr "فارسی" + +msgid "Finnish" +msgstr "Suomi" + +msgid "French" +msgstr "Français" + +msgid "Frisian" +msgstr "Frysk" + +msgid "Irish" +msgstr "Gaeilge" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galego" + +msgid "Hebrew" +msgstr "עברית" + +msgid "Hindi" +msgstr "हिन्दी" + +msgid "Croatian" +msgstr "hrvatski" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Magyar" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Bahasa Indonesia" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Íslenska" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "日本語" + +msgid "Georgian" +msgstr "ქართული" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Қазақша" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannaḍa" + +msgid "Korean" +msgstr "한국어" + +msgid "Luxembourgish" +msgstr "Lëtzebuergesch" + +msgid "Lithuanian" +msgstr "Lietuvių" + +msgid "Latvian" +msgstr "Latviešu" + +msgid "Macedonian" +msgstr "Македонски" + +msgid "Malayalam" +msgstr "മലയാളം" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Burmese" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "नेपाली" + +msgid "Dutch" +msgstr "Nederlands" + +msgid "Norwegian Nynorsk" +msgstr "Norsk nynorsk" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "ਪੰਜਾਬੀ" + +msgid "Polish" +msgstr "Polski" + +msgid "Portuguese" +msgstr "Português" + +msgid "Brazilian Portuguese" +msgstr "Português do Brasil" + +msgid "Romanian" +msgstr "Română" + +msgid "Russian" +msgstr "Русский" + +msgid "Slovak" +msgstr "Slovenčina" + +msgid "Slovenian" +msgstr "Slovenščina" + +msgid "Albanian" +msgstr "Shqip" + +msgid "Serbian" +msgstr "Српски / srpski" + +msgid "Serbian Latin" +msgstr "Serbian Latin" + +msgid "Swedish" +msgstr "Svenska" + +msgid "Swahili" +msgstr "Kiswahili" + +msgid "Tamil" +msgstr "தமிழ்" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "ไทย" + +msgid "Turkish" +msgstr "Türkçe" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Українська" + +msgid "Urdu" +msgstr "اُردُو" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Tiếng Việt" + +msgid "Simplified Chinese" +msgstr "简体中文" + +msgid "Traditional Chinese" +msgstr "繁體中文" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Skribez valida datumo." + +msgid "Enter a valid URL." +msgstr "Skribez valida URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Skribez valida e-posto adreso." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Skribez valida IPv4 adreso." + +msgid "Enter a valid IPv6 address." +msgstr "Skribez valida IPv6 adreso." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Skribez valida adreso IPv4 od IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Skribez nur cifri separata per komi." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Verifikez ke ica datumo esas %(limit_value)s (olu esas %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Verifikez ke ica datumo esas minora kam od egala a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Verifikez ke ica datumo esas majora kam od egala a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Verifikez ke ica datumo havas %(limit_value)d litero adminime (olu havas " +"%(show_value)d)." +msgstr[1] "" +"Verifikez ke ica datumo havas %(limit_value)d literi adminime (olu havas " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Verifikez ke ica datumo havas %(limit_value)d litero admaxime (olu havas " +"%(show_value)d)." +msgstr[1] "" +"Verifikez ke ica datumo havas %(limit_value)d literi admaxime (olu havas " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Skribez numero." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ica feldo ne povas esar nula." + +msgid "This field cannot be blank." +msgstr "Ica feldo ne povas esar vakua." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "La %(model_name)s kun ica %(field_label)s ja existas." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Feldo de tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (True o False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (til %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Integri separata per komi" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dato (sen horo)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dato (kun horo)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimala numero" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "E-postala adreso" + +msgid "File path" +msgstr "Arkivo voyo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Glitkomo numero" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Integro" + +msgid "Big (8 byte) integer" +msgstr "Granda (8 byte) integro" + +msgid "IPv4 address" +msgstr "IPv4 adreso" + +msgid "IP address" +msgstr "IP adreso" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (True, False o None)" + +msgid "Positive integer" +msgstr "Positiva integro" + +msgid "Positive small integer" +msgstr "Positiva mikra integro" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (til %(max_length)s)" + +msgid "Small integer" +msgstr "Mikra integro" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Horo" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Kruda binara datumo" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Arkivo" + +msgid "Image" +msgstr "Imajo" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Exterklefo (la tipo esas determinata per la relatata feldo)" + +msgid "One-to-one relationship" +msgstr "Un-ad-un parenteso" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Multi-a-multi parenteso" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ica feldo esas obligata." + +msgid "Enter a whole number." +msgstr "Skribez kompleta numero" + +msgid "Enter a valid date." +msgstr "Skribez valida dato." + +msgid "Enter a valid time." +msgstr "Skribez valida horo." + +msgid "Enter a valid date/time." +msgstr "Skribez valida dato/horo." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nula arkivo sendesis. Verifikez la kodexigo tipo en la formulario." + +msgid "No file was submitted." +msgstr "Nula arkivo sendesis." + +msgid "The submitted file is empty." +msgstr "La sendita arkivo esas vakua." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Verifikez ke ica dosiero nomo havas %(max)d skribsigno admaxime (olu havas " +"%(length)d)." +msgstr[1] "" +"Verifikez ke ica arkivo nomo havas %(max)d skribsigni admaxime (olu havas " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Sendez arkivo o markizez la vakua markbuxo, ne la du." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Kargez valida imajo. La arkivo qua vu kargis ne esis imajo od esis defektiva." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selektez valida selekto. %(value)s ne esas un de la disponebla selekti." + +msgid "Enter a list of values." +msgstr "Skribez listo de datumi." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Okulta feldo %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordinar" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Koretigez duopligata datumi por %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Korektigez la duopligata datumi por %(field)s, qui mustas esar unika." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Korektigez la duopligata datumi por %(field_name)s qui mustas esar unika por " +"la %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korektigez la duopligata datumi infre." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Selektez valida selekto. Ita selekto ne esas un de la disponebla selekti." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Vakuigar" + +msgid "Currently" +msgstr "Aktuale" + +msgid "Change" +msgstr "Modifikar" + +msgid "Unknown" +msgstr "Nekonocata" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "yes,no,forsan" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "noktomezo" + +msgid "noon" +msgstr "dimezo" + +msgid "Monday" +msgstr "Lundio" + +msgid "Tuesday" +msgstr "Mardio" + +msgid "Wednesday" +msgstr "Merkurdio" + +msgid "Thursday" +msgstr "Jovdio" + +msgid "Friday" +msgstr "Venerdio" + +msgid "Saturday" +msgstr "Saturdio" + +msgid "Sunday" +msgstr "Sundio" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Jov" + +msgid "Fri" +msgstr "Ven" + +msgid "Sat" +msgstr "Sat" + +msgid "Sun" +msgstr "Sun" + +msgid "January" +msgstr "Januaro" + +msgid "February" +msgstr "Februaro" + +msgid "March" +msgstr "Marto" + +msgid "April" +msgstr "Aprilo" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septembro" + +msgid "October" +msgstr "Oktobro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Decembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marto" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprilo" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januaro" + +msgctxt "alt. month" +msgid "February" +msgstr "Februaro" + +msgctxt "alt. month" +msgid "March" +msgstr "Marto" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprilo" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktobro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembro" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yaro" +msgstr[1] "%d yari" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d monato" +msgstr[1] "%d monati" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semano" +msgstr[1] "%d semani" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dio" +msgstr[1] "%d dii" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horo" +msgstr[1] "%d hori" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minuti" + +msgid "0 minutes" +msgstr "0 minuti" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "La yaro ne specizigesis" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "La monato ne specizigesis" + +msgid "No day specified" +msgstr "La dio ne specizigesis" + +msgid "No week specified" +msgstr "La semano ne specizigesis" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ne esas %(verbose_name_plural)s disponebla" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"La futura %(verbose_name_plural)s ne esas disponebla pro ke %(class_name)s." +"allow_future esas False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Onu ne permisas direktorio indexi hike." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indexi di %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..951078f610fa1906cbec309f983d85f217c0af9c GIT binary patch literal 24273 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, 2011 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# saevarom , 2011 +# saevarom , 2013,2015 +# Thordur Sigurdsson , 2016-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Afrikaans" +msgstr "Afríkanska" + +msgid "Arabic" +msgstr "Arabíska" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Astúríska" + +msgid "Azerbaijani" +msgstr "Aserbaídsjíska" + +msgid "Bulgarian" +msgstr "Búlgarska" + +msgid "Belarusian" +msgstr "Hvítrússneska" + +msgid "Bengali" +msgstr "Bengalska" + +msgid "Breton" +msgstr "Bretónska" + +msgid "Bosnian" +msgstr "Bosníska" + +msgid "Catalan" +msgstr "Katalónska" + +msgid "Czech" +msgstr "Tékkneska" + +msgid "Welsh" +msgstr "Velska" + +msgid "Danish" +msgstr "Danska" + +msgid "German" +msgstr "Þýska" + +msgid "Lower Sorbian" +msgstr "Neðri sorbíska" + +msgid "Greek" +msgstr "Gríska" + +msgid "English" +msgstr "Enska" + +msgid "Australian English" +msgstr "Áströlsk enska" + +msgid "British English" +msgstr "Bresk enska" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spænska" + +msgid "Argentinian Spanish" +msgstr "Argentínsk spænska" + +msgid "Colombian Spanish" +msgstr "Kólumbísk spænska" + +msgid "Mexican Spanish" +msgstr "Mexíkósk spænska" + +msgid "Nicaraguan Spanish" +msgstr "Níkaragva spænska" + +msgid "Venezuelan Spanish" +msgstr "Venesúelsk spænska" + +msgid "Estonian" +msgstr "Eistneska" + +msgid "Basque" +msgstr "Baskneska" + +msgid "Persian" +msgstr "Persneska" + +msgid "Finnish" +msgstr "Finnska" + +msgid "French" +msgstr "Franska" + +msgid "Frisian" +msgstr "Frísneska" + +msgid "Irish" +msgstr "Írska" + +msgid "Scottish Gaelic" +msgstr "Skosk gelíska" + +msgid "Galician" +msgstr "Galíska" + +msgid "Hebrew" +msgstr "Hebreska" + +msgid "Hindi" +msgstr "Hindí" + +msgid "Croatian" +msgstr "Króatíska" + +msgid "Upper Sorbian" +msgstr "Efri sorbíska" + +msgid "Hungarian" +msgstr "Ungverska" + +msgid "Armenian" +msgstr "Armenska" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indónesíska" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Íslenska" + +msgid "Italian" +msgstr "Ítalska" + +msgid "Japanese" +msgstr "Japanska" + +msgid "Georgian" +msgstr "Georgíska" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kasakska" + +msgid "Khmer" +msgstr "Kmeríska" + +msgid "Kannada" +msgstr "Kannadanska" + +msgid "Korean" +msgstr "Kóreska" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Lúxemborgíska" + +msgid "Lithuanian" +msgstr "Litháenska" + +msgid "Latvian" +msgstr "Lettneska" + +msgid "Macedonian" +msgstr "Makedónska" + +msgid "Malayalam" +msgstr "Malajalamska" + +msgid "Mongolian" +msgstr "Mongólska" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Búrmíska" + +msgid "Norwegian Bokmål" +msgstr "Norskt bókmál" + +msgid "Nepali" +msgstr "Nepalska" + +msgid "Dutch" +msgstr "Hollenska" + +msgid "Norwegian Nynorsk" +msgstr "Nýnorska" + +msgid "Ossetic" +msgstr "Ossetíska" + +msgid "Punjabi" +msgstr "Púndjabíska" + +msgid "Polish" +msgstr "Pólska" + +msgid "Portuguese" +msgstr "Portúgalska" + +msgid "Brazilian Portuguese" +msgstr "Brasilísk portúgalska" + +msgid "Romanian" +msgstr "Rúmenska" + +msgid "Russian" +msgstr "Rússneska" + +msgid "Slovak" +msgstr "Slóvakíska" + +msgid "Slovenian" +msgstr "Slóvenska" + +msgid "Albanian" +msgstr "Albanska" + +msgid "Serbian" +msgstr "Serbneska" + +msgid "Serbian Latin" +msgstr "Serbnesk latína" + +msgid "Swedish" +msgstr "Sænska" + +msgid "Swahili" +msgstr "Svahílí" + +msgid "Tamil" +msgstr "Tamílska" + +msgid "Telugu" +msgstr "Telúgúska" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tælenska" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Tyrkneska" + +msgid "Tatar" +msgstr "Tataríska" + +msgid "Udmurt" +msgstr "Údmúrt" + +msgid "Ukrainian" +msgstr "Úkraínska" + +msgid "Urdu" +msgstr "Úrdú" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Víetnamska" + +msgid "Simplified Chinese" +msgstr "Einfölduð kínverska " + +msgid "Traditional Chinese" +msgstr "Hefðbundin kínverska" + +msgid "Messages" +msgstr "Skilaboð" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Þetta síðunúmer er ekki heiltala" + +msgid "That page number is less than 1" +msgstr "Þetta síðunúmer er minna en 1" + +msgid "That page contains no results" +msgstr "Þessi síða hefur engar niðurstöður" + +msgid "Enter a valid value." +msgstr "Sláðu inn gilt gildi." + +msgid "Enter a valid URL." +msgstr "Sláðu inn gilt veffang (URL)." + +msgid "Enter a valid integer." +msgstr "Sláðu inn gilda heiltölu." + +msgid "Enter a valid email address." +msgstr "Sláðu inn gilt netfang." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Settu inn gildan vefslóðartitil sem samanstendur af latneskum bókstöfum, " +"númerin, undirstrikum og bandstrikum." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Settu inn gildan vefslóðartitil sem má innihalda unicode bókstafi, " +"tölustafi, undirstrik og bandstrik." + +msgid "Enter a valid IPv4 address." +msgstr "Sláðu inn gilda IPv4 tölu." + +msgid "Enter a valid IPv6 address." +msgstr "Sláðu inn gilt IPv6 vistfang." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Sláðu inn gilt IPv4 eða IPv6 vistfang." + +msgid "Enter only digits separated by commas." +msgstr "Skrifaðu einungis tölur aðskildar með kommum." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Gakktu úr skugga um að gildi sé %(limit_value)s (það er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að gildið sé minna en eða jafnt og %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að gildið sé stærra en eða jafnt og %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gildið má minnst vera %(limit_value)d stafur að lengd (það er %(show_value)d " +"nú)" +msgstr[1] "" +"Gildið má minnst vera %(limit_value)d stafir að lengd (það er %(show_value)d " +"nú)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gildið má mest vera %(limit_value)d stafur að lengd (það er %(show_value)d " +"nú)" +msgstr[1] "" +"Gildið má mest vera %(limit_value)d stafir að lengd (það er %(show_value)d " +"nú)" + +msgid "Enter a number." +msgstr "Sláðu inn tölu." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Gildið má ekki hafa fleiri en %(max)s tölu." +msgstr[1] "Gildið má ekki hafa fleiri en %(max)s tölur." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Gildið má ekki hafa meira en %(max)s tugatölustaf (decimal places)." +msgstr[1] "" +"Gildið má ekki hafa meira en %(max)s tugatölustafi (decimal places)." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Gildið má ekki hafa fleiri en %(max)s tölu fyrir tugabrotskil." +msgstr[1] "Gildið má ekki hafa fleiri en %(max)s tölur fyrir tugabrotskil." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Skrár með endingunni „%(extension)s“ eru ekki leyfðar. Leyfilegar endingar " +"eru: „%(allowed_extensions)s“„." + +msgid "Null characters are not allowed." +msgstr "Núlltákn eru ekki leyfileg." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s með þessi %(field_labels)s er nú þegar til." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Gildið %(value)r er ógilt." + +msgid "This field cannot be null." +msgstr "Þessi reitur getur ekki haft tómgildi (null)." + +msgid "This field cannot be blank." +msgstr "Þessi reitur má ekki vera tómur." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s með þetta %(field_label)s er nú þegar til." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s verður að vera einkvæmt fyrir %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Reitur af gerð: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "„%(value)s“ verður að vera annaðhvort satt eða ósatt." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "„%(value)s“ verður að vera eitt eftirtalinna: True, False eða None." + +msgid "Boolean (Either True or False)" +msgstr "Boole-gildi (True eða False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Strengur (mest %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Heiltölur aðgreindar með kommum" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"„%(value)s“ er ógilt dagsetningarsnið. Það verður að vera á sniðinu YYYY-MM-" +"DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "„%(value)s“ hefur rétt snið (YYYY-MM-DD) en dagsetningin er ógild." + +msgid "Date (without time)" +msgstr "Dagsetning (án tíma)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"„%(value)s“ hefur ógilt snið. Það verður að vera á sniðinu: YYYY-MM-DD HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"„%(value)s“ hefur rétt snið (YYYY-MM-DD HH:MM [:ss[.uuuuuu]][TZ]) en það er " +"ógild dagsetning/tími." + +msgid "Date (with time)" +msgstr "Dagsetning (með tíma)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "„%(value)s“ verður að vera heiltala." + +msgid "Decimal number" +msgstr "Tugatala" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"„%(value)s“ er á ógildu sniði. Það verður að vera á sniðinu [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Tímalengd" + +msgid "Email address" +msgstr "Netfang" + +msgid "File path" +msgstr "Skjalaslóð" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "„%(value)s“ verður að vera fleytitala." + +msgid "Floating point number" +msgstr "Fleytitala (floating point number)" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Gildi „%(value)s“ verður að vera heiltala." + +msgid "Integer" +msgstr "Heiltala" + +msgid "Big (8 byte) integer" +msgstr "Stór (8 bæta) heiltala" + +msgid "Small integer" +msgstr "Lítil heiltala" + +msgid "IPv4 address" +msgstr "IPv4 vistfang" + +msgid "IP address" +msgstr "IP tala" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "„%(value)s“ verður að vera eitt eftirtalinna: None, True eða False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boole-gildi (True, False eða None)" + +msgid "Positive big integer" +msgstr "Jákvæð stór heiltala" + +msgid "Positive integer" +msgstr "Jákvæð heiltala" + +msgid "Positive small integer" +msgstr "Jákvæð lítil heiltala" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slögg (allt að %(max_length)s)" + +msgid "Text" +msgstr "Texti" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"„%(value)s“ er á ógildu sniði. Það verður að vera á sniðinu HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"„%(value)s“ er á réttu sniði (HH:MM[:ss[.uuuuuu]]), en það er ógild " +"dagsetning/tími." + +msgid "Time" +msgstr "Tími" + +msgid "URL" +msgstr "Veffang" + +msgid "Raw binary data" +msgstr "Hrá tvíundargögn (binary data)" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "„%(value)s“ er ekki gilt UUID." + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Skrá" + +msgid "Image" +msgstr "Mynd" + +msgid "A JSON object" +msgstr "JSON hlutur" + +msgid "Value must be valid JSON." +msgstr "Gildi verður að vera gilt JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s hlutur með %(field)s %(value)r er ekki til." + +msgid "Foreign Key (type determined by related field)" +msgstr "Ytri lykill (Gerð ákveðin af skyldum reit)" + +msgid "One-to-one relationship" +msgstr "Einn-á-einn samband." + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s samband" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s sambönd" + +msgid "Many-to-many relationship" +msgstr "Margir-til-margra samband." + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Þennan reit þarf að fylla út." + +msgid "Enter a whole number." +msgstr "Sláðu inn heiltölu." + +msgid "Enter a valid date." +msgstr "Sláðu inn gilda dagsetningu." + +msgid "Enter a valid time." +msgstr "Sláðu inn gilda tímasetningu." + +msgid "Enter a valid date/time." +msgstr "Sláðu inn gilda dagsetningu ásamt tíma." + +msgid "Enter a valid duration." +msgstr "Sláðu inn gilt tímabil." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Fjöldi daga verður að vera á milli {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Engin skrá var send. Athugaðu kótunartegund á forminu (encoding type)." + +msgid "No file was submitted." +msgstr "Engin skrá var send." + +msgid "The submitted file is empty." +msgstr "Innsend skrá er tóm." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Skráarnafnið má mest vera %(max)d stafur að lengd (það er %(length)d nú)" +msgstr[1] "" +"Skráarnafnið má mest vera %(max)d stafir að lengd (það er %(length)d nú)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Vinsamlegast sendu annað hvort inn skrá eða merktu í boxið, ekki bæði." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Halaðu upp gildri myndskrá. Skráin sem þú halaðir upp var annað hvort gölluð " +"eða ekki mynd." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Veldu gildan valmöguleika. %(value)s er ekki eitt af gildum valmöguleikum." + +msgid "Enter a list of values." +msgstr "Sláðu inn lista af gildum." + +msgid "Enter a complete value." +msgstr "Sláðu inn heilt gildi." + +msgid "Enter a valid UUID." +msgstr "Sláðu inn gilt UUID." + +msgid "Enter a valid JSON." +msgstr "Sláðu inn gilt JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Falinn reitur %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Vinsamlegast sendu ekki meira en %d form." +msgstr[1] "Vinsamlegast sendu ekki meira en %d form." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Vinsamlegast sendu að minnsta kosta %d form." +msgstr[1] "Vinsamlegast sendu að minnsta kosta %d form." + +msgid "Order" +msgstr "Röð" + +msgid "Delete" +msgstr "Eyða" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Vinsamlegast leiðréttu tvítekin gögn í reit %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Vinsamlegast lagfærðu gögn í reit %(field)s, sem verða að vera einstök." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Vinsamlegast leiðréttu tvítekin gögn í reit %(field_name)s sem verða að vera " +"einstök fyrir %(lookup)s í %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Vinsamlegast lagfærðu tvítöldu gögnin fyrir neðan." + +msgid "The inline value did not match the parent instance." +msgstr "Innra gildið passar ekki við eiganda." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Veldu gildan valmöguleika. Valið virðist ekki vera eitt af gildum " +"valmöguleikum." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "„%(pk)s“ er ekki gilt gildi." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s er ekki hægt að túlka í tímabelti %(current_timezone)s, það " +"getur verið óljóst eða að það er ekki til." + +msgid "Clear" +msgstr "Hreinsa" + +msgid "Currently" +msgstr "Eins og er:" + +msgid "Change" +msgstr "Breyta" + +msgid "Unknown" +msgstr "Óþekkt" + +msgid "Yes" +msgstr "Já" + +msgid "No" +msgstr "Nei" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "já,nei,kannski" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bæti" +msgstr[1] "%(size)d bæti" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "eftirmiðdegi" + +msgid "a.m." +msgstr "morgun" + +msgid "PM" +msgstr "Eftirmiðdegi" + +msgid "AM" +msgstr "Morgun" + +msgid "midnight" +msgstr "miðnætti" + +msgid "noon" +msgstr "hádegi" + +msgid "Monday" +msgstr "mánudagur" + +msgid "Tuesday" +msgstr "þriðjudagur" + +msgid "Wednesday" +msgstr "miðvikudagur" + +msgid "Thursday" +msgstr "fimmtudagur" + +msgid "Friday" +msgstr "föstudagur" + +msgid "Saturday" +msgstr "laugardagur" + +msgid "Sunday" +msgstr "sunnudagur" + +msgid "Mon" +msgstr "mán" + +msgid "Tue" +msgstr "þri" + +msgid "Wed" +msgstr "mið" + +msgid "Thu" +msgstr "fim" + +msgid "Fri" +msgstr "fös" + +msgid "Sat" +msgstr "lau" + +msgid "Sun" +msgstr "sun" + +msgid "January" +msgstr "janúar" + +msgid "February" +msgstr "febrúar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "maí" + +msgid "June" +msgstr "júní" + +msgid "July" +msgstr "júlí" + +msgid "August" +msgstr "ágúst" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "nóvember" + +msgid "December" +msgstr "desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maí" + +msgid "jun" +msgstr "jún" + +msgid "jul" +msgstr "júl" + +msgid "aug" +msgstr "ágú" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nóv" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "apríl" + +msgctxt "abbrev. month" +msgid "May" +msgstr "maí" + +msgctxt "abbrev. month" +msgid "June" +msgstr "júní" + +msgctxt "abbrev. month" +msgid "July" +msgstr "júlí" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ág." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nóv." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "des." + +msgctxt "alt. month" +msgid "January" +msgstr "janúar" + +msgctxt "alt. month" +msgid "February" +msgstr "febrúar" + +msgctxt "alt. month" +msgid "March" +msgstr "mars" + +msgctxt "alt. month" +msgid "April" +msgstr "apríl" + +msgctxt "alt. month" +msgid "May" +msgstr "maí" + +msgctxt "alt. month" +msgid "June" +msgstr "júní" + +msgctxt "alt. month" +msgid "July" +msgstr "júlí" + +msgctxt "alt. month" +msgid "August" +msgstr "ágúst" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "október" + +msgctxt "alt. month" +msgid "November" +msgstr "nóvember" + +msgctxt "alt. month" +msgid "December" +msgstr "desember" + +msgid "This is not a valid IPv6 address." +msgstr "Þetta er ekki gilt IPv6 vistfang." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eða" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF auðkenning tókst ekki." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ef þú hefur stillt vafrann þinn til að gera „Referer“ hausa óvirka þarftu að " +"virkja þá aftur. Að minnsta kosti fyrir þetta vefsvæði, eða HTTPS tengingar " +"eða „same-origin“ fyrirspurnir." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Þú ert að fá þessi skilaboð því þetta vefsvæði þarfnast að CSRF kaka (e. " +"cookie) sé send þegar form eru send. Þessi kaka er nauðsynleg af " +"öryggisástæðum til að ganga úr skugga um að utanaðkomandi aðili sé ekki að " +"senda fyrirspurnir úr vafranum þínum." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ef þú hefur stillt vafrann þinn til að gera kökur óvirkar þarftu að virkja " +"þær aftur. Að minnsta kosti fyrir þetta vefsvæði eða „same-origin“ " +"fyrirspurnir." + +msgid "More information is available with DEBUG=True." +msgstr "Meiri upplýsingar fást með DEBUG=True." + +msgid "No year specified" +msgstr "Ekkert ár tilgreint" + +msgid "Date out of range" +msgstr "Dagsetning utan tímabils" + +msgid "No month specified" +msgstr "Enginn mánuður tilgreindur" + +msgid "No day specified" +msgstr "Enginn dagur tilgreindur" + +msgid "No week specified" +msgstr "Engin vika tilgreind" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ekkert %(verbose_name_plural)s í boði" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Framtíðar %(verbose_name_plural)s ekki í boði því %(class_name)s." +"allow_future er Ósatt." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ógilt snið dagsetningar „%(datestr)s“ gefið sniðið „%(format)s“" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ekkert %(verbose_name)s sem uppfyllir skilyrði" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Þetta er hvorki síðasta síða, né er hægt að breyta í heiltölu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ógild síða (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tómur listi og „%(class_name)s.allow_empty“ er Ósatt." + +msgid "Directory indexes are not allowed here." +msgstr "Möppulistar eru ekki leyfðir hér." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ er ekki til" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innihald %(directory)s " + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Þú sérð þessa síðu vegna þess að þú hefur DEBUG=True í stillingunum þínum og hefur ekki sett upp " +"neinar vefslóðir." + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/is/__init__.py b/venv/Lib/site-packages/django/conf/locale/is/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/is/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/is/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c88d4d3fe197f4788428b11f0a00b6682c9e6d37 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lX0d*Jd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04oVJ-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/is/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/is/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83a2e83c123be6d6ce97f81523ffd8969d1a2ec2 GIT binary patch literal 417 zcmYjN&1%9x7|fdWuOihxfrnm%8t+m{w;;!4P2K2^EHn;WV}da9987LJ)A3zo z>lfLz?ORU<4u;tACnJ0Krlc^x=~s@t-=n_dsib%-Wk_`qZPz@>Bpt??xt-BLoXV^- zNyU;!8Qt+@N5}Du$~fblO&Gm|3oa>JhRH&7BazIzD-ne&-i>8CLi{3xp8BLQVjy5LCbqlpJqG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/is/formats.py b/venv/Lib/site-packages/django/conf/locale/is/formats.py new file mode 100644 index 000000000..d0f71cff7 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/is/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "H:i" +# DATETIME_FORMAT = +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "j.n.Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8c3f56254ee59bb5e708b7917e8398864b10c9e GIT binary patch literal 27374 zcmc(n37lM2o$n8eERjuC5zw1JNH?UrNmztHAn9y$l1`d*2ZR{n?W)^VmsHg)@2%>l z8<{~-9xQy;FaLN zgUYx33}g6buH(<8;EmwL;6vag;M3r9!9~wE=6T=>kbhe&FQ+;;F7a12!bCb$TE8K`pifa?Flpz?neRQ=xuHSbS= zqJy7;8pr$v#x%fg@U7t8;5c~UnZ~>kd;q)$T+SrD7km=D41Co>V=f231d7fMI@_32 zz~vsdf||D~cp7*!NLA(?KK^-7<9hk9%=;I^c zk)&S-&I60!QDEZJUk0k(+raA&GUheltBF5#t}zdS*T~5!16BW-pys0+RR4OwW5J7j`dU!^ zSr4kdt3awU+kE(ijdzxaGN-{*tcKbM2Yfy1E2RRq0XZtn z-QWW75s)F8AAwA{Iq4#JAGi(_pL!Lj{=XO0Ir|8x^?d?_^_pLT>hB3Jbn|)&sCENT zbhZ#Y0bCC%-}RuzGwSgMk12Qx=~JNcy&2Rv-U^Do?*i5T_k$|`*P!_1W1!}B5yFAm zy%5yAECbI5SAg1IB~a`1a!~v8PVf!jyFj(qdx>jjDX8+7flBWO{{vhLJ_cR^@jd|_ z&0?v&pMo0S&q39%Lq&Lk$Fn_N;&G$L9iYmk;B&y+eEQoxe#n1+1Qb1g3sk-z`}ALX zJd(vyduM>6+w(lG099@XJO&IwwO0p~|CQj0;M+ir^8t?^_4ts-PkH>D$1iyNvd2d~ ze%<5Wg4$n?gPNZo`1B_|{xc{(@H7AYX`lXYp!UOWz%#%@*yN(m`Jm`%HMj+g!K=Z~ zff0DZ73=|U(&Kl)mlD5l1u`f2ey|VxJt%ruyb_)Y4udSIxfwhk{3Iy8^e>?1b(Z{QO`a40Dd!LVg7!(~n1Sg|382ygHM5{fMTK= z|8qgLe-U^Rcm;SkxD`~p+kL$5@kUVR)-9mQeHc6p{DjBPgX+(hLGh>Wf?D5S`R`|3 z>GIUPJ4yb5fB*MhGFzX?u&+twpff!_u{58eTheFYrcXbf4*NrUbj+5w8r z?gcfEPl3+|58veW@!6p0;ZpD%aEFh-1{A&hC8+*B>hVXQ=IeK$>N#n%qrVHlvxr{> z&IiXqm3upQ8u%c{Kl7N!GlpDx73?Pc)!>of$3e}@=RwWOmqGRWF;MI9FJJ}y1$Z>L z{VGR4J3+NK4yxQ8;8O7IKK?cE5aN&f_;*3g?~lNjfKP#He?81XI0EYX^`Piv3>4i? z`Se?S{B}_J-vAy3z8yRUyw|5c1ghOfz!DqnOW^B?p97QmD)=c--X)T=>AQh z&g=U@&Bwz&{y9+m=TY!H@L-sl+CLxExR-%*z1GL?^!QHjIMVL{HO_}YyH23`@fi4F@H?Q!@v3WFJ9mMq|6Wl2`4Fgb9|MmE zKMQJ}z5%LV-}3nP;6=or1Xb?T7rFf(fZ|^lftrs?K+$goo($d%if$eT*MZ*#PXtf9 z*3tEOpyKPn=YTsrz7$lyZUq;BuLISekAR|sPlD>l*Ffd_7N~xF59DYuKlJHmTxSeh z(VPul2xedg-VZJX&)DYlv>{Oadk?7n@f4``E_tzAzm?#z#5a0;F?b5`3aEUq1T}xJ z1J$p0ftu(0K+Wd^KK-Mh*6ovEKlmsJDVk?*ck6aNsB&dcbX)^9-kU(J^BthZdpD?d z-w&P+e#C$Oy8r$?Q00FDN?!aWcoO)W>s@~qfvV?RQ1x8k@iI{5R)gxtRUWVLxE<8^ z3O;@VDEh90TKAhk@t^y^Mc~)K^TA(%F9a9upl)yncq(`gcqaIW$0xxvh#&S6SN<$e z^S2RHe}{bhTJZVAw}YCWmx0RnMo{_g1l9k$eEfZ&>U{uIzORBB$2UNY|9^twmp=ft z-~RxzH0If%Tdy)G{xAuu+@F9w;H$ue;KxDH@e`ot<6pr)1Ahyuy*ox-`ddJ?cQ>f? z`@m-(gnkSDBk@lZ;H}`>ik=@uuD#nqwSR}lJ3YR`_efCXjsundR8V|qKFILQxuC|| z<8g_{3q4-qakK0Q2XF^a6Wi9 zcqaG-kS%Y10z!gjMah_*;JZPV#2i&d1_$e427U{K6`HlN<12TAD~LZ1E(TA!!O5fj z;045Q21WlL12qpn1J%!;5dMwuQ^Jo4|4GpEGD4si9?`@9wQuYL74nbHotp^XA^ac0 zFyAgByps37AT0NJ8@#`ou+YcPf)E->ohFB|J0gfZ_Bn$*U*S!A zEq^}hU%L5r2w@9hJ)xhFKZCqX5ne?&ob(F#UP3}Ri1;u#&*y)X_mlnm5xoC9;by`r zg4R;cYQmKS@pe6LBmBy~xj%OSY#FnNdL95T1I1s~f=7b$2s#IjA$|_{enS5Ak(NJa z^Zo-OD+#yciQoyOe;Yg>ybydl;eQkKyug9^2k;&KUGOdf8r5*86Qkmq^evwS@Vg9XJ2dhRCtKf*C?Z?`}u_D5MSxjmVoO?`+LIiyw|`J!G8je@_CNp{Vd+s z5$5y$d~h>(BSAc03}Atf=d*<05KbUGPIxEb%Y?rr36xpZDZ1;Ij$$5?DxZG= z3IE{}FZGy$gM2@l@M)iR8t(&yA>vKK7YNTK{uHR^bi!Ng8*&Z!al!>YF1V7sBR;-@ z_wW1n=X=cI6uv!7WCh_dpZKR>op2{%DPe-}SA^dYHW2i@j&O{9gCA1I^}Jt97$f{8 z;jam6NdGn1OL&5C7(vfs!Y2uDBK!}6S=dz!8&M;!M%`IZNSc*m?a5o-(FjJPAg(o{ zw4O$dsK|SuJi$~_i-Lt+g=U&YwZ;ymDXBZVG>98PHJntzusRx-nn^PYk~B}QC5<4u zG0qyjG&vSWmEw*{I2u)Gwc5;Vd(B$>(qcdK>9k1uQ#GzN8&T_{i*|fYYK?OHt77es6H&CY^-YoXr^zU6x2T9dW${!*H%BLJ zgB>wGX2H6C{oP>y4%)v%_U}l)>AEs57Nc5VCoo`Cc5b_Qi_$bnyEC&m;NV(zMelsG zGFU&nc~g*#-VhZUX62w+IhMvd!?2c_m6g%37Kb%nN>R#7urdutJNu2Uc@^QjuSl3Amvl4fPI1YrVMBMmFcyQWsE*t}CwIvU0|P}1~=8ANOPA-%Mj zsa$_lE0N#y$EBd_VmlYzb}!K*)1M@jh^o5QKy6VPjHFOJ1iv<{WKs95pBKB2%C$*b zjZB&CX@43{#kONZN!p;dQAS7DuL+$<;|5)Ab-BM;DTQ`e{Y^$n##O^x)&}ED(pX%u zyCxV5<4RQQ4Yov#h%Fh8QY{H)RoDnCjBHgotd%Iq2vV~usU+<4jwxJ~RI6c67S+QP zmLi_fh!}H5)>@6FS{#(3Mo^9_^~D-Y0a8ojQPJkAG@%P>!SR*Kq**l;70PC{Tb$L@ z7j(IeCQe0qo{%&fmNWS@MU$~0wH;j@6{6}Wv(8Ig4J!eA#YHPHHM2TS=~a?W($ive zW5l*gBfHVVN+p?K1guchYgV(+r6kbsU{Q_9JYjWGXhJj%J9}nzlTpKbcxlk{HC1La z2#duu$}(d0#$*8TFsrp<@Z>G;gojqbEb~mH*S5GLQnn{=xhsH~Sc>R1InAx9Wleh5 zD2I$!{qmg+s)~QDU?A^-B$wZ!EM%VVI#?B7zYn6V=p1D5m zxx)SGA}hm^b8-!N@om-Kp1#c4z*elVt4=+}>cNKY3f(?4hjceU=^VFH!;2PEZe# zVAsYqE6A;_NS0s$>N%R@D|0TTCgFS47$`?PAXOhv6us&v0EjAS38_; zvlcyv<9uxzD@gtZtem&DiJ&ND2q9`T$s&7{@2FQGL1{I1SmOu*;V4}kjS68iv#QhX z$NreBiH+|M{dH`}f@XVNl%ys1l2&cJ5umO}EOYvblTFOJRD$}ItW7jwu0))P&6Q2W zP%H5b4CPzabnbC8P(WxUYrzZ@6EiRtOeRe$RUpSQe>%i3t4575&_TC+K^l!Ai%01K zE4d-}EMHJddRnQM2aOP_N8zg#D$QbE1Dj)uFW57bFs#XCOiinpXrPRe6s3y;cv#33 zrBO8*w=zVvHyEK4R#L5}Ndsw3bdBcaxg+)7B?aY)lY9ZWN5TGhJu{ZC{vyWqiHgc>9nBRac1eI zfTkOZIkYCF2YEx3#GtE-C33h!UfQx%KGlxpB}x%XV$ph%l--R&f0vy!g!=vO$!rsR z!2P;%WMpVqOW&GOCf?mIF@fAc?hOMM}+( zcgIh4mRPcYycw6XGC(Gd7nN9MG|+^d)^MNQyZzd#qfR%1u7zE~9quIU&bq~+P^&T$ z)g4$w*$g0YYVWQOYnEfK579NHdaZAw;H+=fBC{bJorF`nRrIE*-qr zY(j5EYu`l0X$aA@Yu}WZO_JO?`8*7MEa4Pq&}e%(vqNv@WZW%t`%q}LuS|3|;D9Zl zfk#Cp*h!mU39{xWg1gndXHO1RiJ936<#G($?zOR(omZ$)OD=_#__ zOiM{8BAq%xf3mZ>>)r|#B`AQnTosnX*&f%l|Z^@nsVny8<4-=Xw$A$6?LnPJhUp4z#pk+UtrEPnh zXd!c(C-jCQ+G!S*^s~nfT3J=w8CymxYvjyMj=7q1c7VNE6d-dG-+kh4 z30V~(vYoG4y8+vv*%D4rzJ^R|NyBVO;6h9N?7NhxxI+m# zi|;eTO@;#Z)p|^XWsIO;gzQu{!;_L|EqgH|;SKRl{#G&lj&RteW+Y-rP2k3cVRB>r zLFN<3fuS@)E(0KVdXzOQjjZFVJLt6tZQXpytlzENZ~2j>#u1%)HRKSlog?8D?Vhp+ zhouMPM2=)~xr>Nis#O_cQ0qjJ?u5x@%|e0GZwzibIUiGGt;FHj^lWs#E#bQekufjr zTb0qM0mrWeH=*I|(3hL73Gyavg)ZvabDL89)UpHyYK@Wl$h&2f;=Yy}u-{M|cFysw zMjxkrqP!Q`u_fE;NU_u8H_ddb!bq6~DmT+i%R7RSZ$^@OT!2eENgjEf_p=dDE)B3= zai}24vsP(Xgc&3?3@tfrk6@W6xSE>jP7%lmhzJB?`i;ZNvS4KZXOW~BtgP1!W(l*k zSZ$^avvp?*MQ9hH$#dFdEXX9fyS=80xvpqvE2VthSxY9!RY&(kk?_O9+7)#5TOZiDhQ zeP%s7^4ao>Hpi-*P3G#T7ELv!2)3?5u8yOI73?Cz>x6WkGE={NLAlYWXUqEfib)~s zEn2HMYME|fda)SvMYTRFBuUxt&iXjzrO#!33y>zcaY0|)Vd-W83u#rTq)y}Mg3EnQ z(L|J8))zW$%A4Igsx;RiClTOVqK#{!3hQ|-oJP{8Z1-6dIZ=#h@X~lo^R`No(?6st zS+_vXs)X*MzqDaAg*o&HnM4@Y1h@Dg~*BC z9_CrZohg?Gq=uPQd}si}NXw{iTgWv*zl@`HIAv~{3St8EgHfbK7*^UqJM7)}fzKSW z)v2A5=@_ry|C&CX=7{umG(OA!ztLFUoLf&0m=eeO5HEGAWPN8ABease(qvmTums5j zAb;64%4>3)TGu%wqd6glXeV=yVoRQWn&CJHt z)yyPJa5IxoF?UOnk~zJ4t8z|Ha>~`rw3!8w_Gea)SU)pqII1hH!cMSiM?S=k1b3y{ zk)?G-*OAsTF?OWoI&^1}9bmh1H@bG*53MtSakZl@6{aICS5`WbG%6=jvD7B4rzUKc z40mj1EE+X1L32a1La3Q40tPy;sm8@xTq-wAEkQ4>CF3UHo;pcQT~vUf)l71N)sn?z z9*vAOM975ctPs<^4gA-g?we-|`2k}^%wCtpi<{zHGjeUUMs?dtM<)B~?u#U>5JfJr z_7QFWkTo3OR?B;4K>FA6^b8L6tX^&T0~vN}ch)LrukFe!mkkbXTb5u%=P9uA=vuAt!0|3>15=mYE}|Eeo6sHgAiyu=NaP zrMTGB-z;T4BgwL0-q7ZrEzvla6-ljUHEX#nSbE;lB|S^{cX6S6yp32` zdJvy$8Tv$$E@QB~$72{;`#I1qyPO;{qn4tcktnP#gEPP_pvo=@gvf&v6BE7o$hb0A z6m%Wy^MG(^i}%HizV3O01A}YYLs-&#-aOP9?uh7vy-AXq*N5*yT)PzA7r!DT$E_o4 zdoFJ0Q(GAId)9c{*RtT^(YVp-<}z$V^M>q2OwU>gGh8{idzozc(n~R^>xyQ1S1p*o zJXq3w={(~NE81P%5}<2Ay}9dS0ScEKEo4WqesIhV2F^+_*31$Fb#7Or7w_&1w~V`| zMjDMGKl&=XM_fR8D#uWrQ6&qT-p!G=Y{{0R zpBr~jig&$x?qcEeV)BNYQ4W64U8I&IttGVH5sh0>R;S~AhWA^$ly!z{mqKUg$V#)V zI;_x#U8r4ap3*KL?YLEdh)Q?3z)g?s)gf*b3NGXla!btJYp`dRxUF~@lu)tAD79`D zr#OvlCBAS8SFCc4qpMZ|^{EC6PN{}V7Y=jIIgamgi37Yt9B(Ccg`1EPMvy3Id&cnz zm$*dEa0UKCE(y+X8L!qCPHhip6D2rCAVqP1;{D=`_lHY@E|?md%HDt`Ek`)g#YI~# zaDn(??g6K!(lE0wa0xnm+DJ-ewdH)^)TZm`D2kWXLj|lKocgHy)Wpy#I(#8?myBa5 z_+-Te4s$RHmhMN?Z|)vR&HdmKUgY^^hR2(D2DPWIeuH!FZfas_2xE*9@Ox{7l22Tm6=K?xTO4!SXy84fYa0qj3<9q>4HKRo23^{3 zP`mYiBZ|VxZf+-F4WWUtCbkak@ya4QAf$;3^k_1Tx9e%xWwEm$6|`k9U1q-E-br zI6cQ>X-n9EC(l`uAy7$xZ7<6%#m31C;IM2qX92&9OGHdS^ z&DFSaYaORo>xPsBi{uoz$bavOU0Y=P4+7D@S$89(U_HcBn>8R9%0^E`6M+|GeRQHrSrT}@5O zK`@szyu8Dq<%BZ$Kr*U4DA_TZWHQ4`kl}Dhb0(oLNC_+=RTZp!Uf|{^Dv>5nK}k)> zWn8H!L}_u?1J+v*nbp{9j9J_St?ysl=Oh$vFzYz&&=sZNz*s0-t~Se01-#E-Tkw(3 z;1pVUVsfX!gnLc|D+I=Ynm$3PnszUi;WEgVHCj2)`3!EYAwYBaY5lBP{Dk89HWG6& z1K0_?#D?GCFk3r|1Agov|G)im7)+o(>noUFnk=%{FgWYY<|?=dXE>DMv2a{_4#BCJ zj5ATa0m~dzBujC98*?7Wu0i z*NZ4!)Eh83_9VZ7OA3W1-dhQqmqLZG$j?@6AuGcX8p29AsPz zE_r_(Get2{QSVd8wWs~g1b9(K#k?p*<5m?>5{;p0$bb~Xe%cO&3;yWduxl*qLBiLP zQN6!`TfjB1?_S;`I|5uDr2;vF$ShrTJf+oJd(kJ2O2e4(ZQ4lSe9pTNNdOjXX`LSf zTKxd3=Wdf92u<@a^vazF-5cX!Xmv5GWa#7#rLAzJ!Lslzv<|acENAb9lfxOUk)3aH zcY>)n1;v%!t8-y%`#C$Dc0B%rFyM7@ScidV18;2dTQ#LLQR`9Y;3>&;KSQF{&u|sn zNo->S`Y9KfiP?G%jP2fWsg?zrlPaMz=-WW!7~&x-mU3jSxz7sw_)0y z3e8HaZ@Xp3ad8|s94hK?W%Mc2T^S+kftKnSBOT#;qy22xDXcmQHJjNPGMKa}rb(+I zRF@bW8O1=nCu1U4Ml2!_Nxr?Alm!)R?XbAouKTB%m|6UBycw}QF^@W;u+rf0=G+x*f5J?I>x^k)-7bPUwW?;FF^LXOBkwY(f&)7z;9MWny9A z3tDydOe!1S^l|4rCfEOS$HmTm?q43-qq9|P345+<_k6f4g#`q+4zs7VIdbAT|Hu58 zYR89S3UKCI3t&gSA@2yu85TQF$XGvMo0`HmQa^A_tS2N?7>+84132f$B)}VTYD&k= za3SKnfpQlmbti*)ZB3jh)bHrsy$XAPnH49J1kmO+n&~;KU>jxFBiS6$*cc3;DP>X1 zgiIypxw)$(v$Jr@9g-2~Z?KVZGN@JTRu}^(nRSV@oDDz7I=hU!5Q#y~BT}<0*GNr- z^N1XyIGcW^OXT$VZJiJ9H%j)fD{yL9w?_=Mb5t_B!{h3tiXD};;GAi@JdR7e$ADjA zwMy=|GkfrPla2(RqI-+9`XZftDVXl(jVzsc76dTD$uFveIt`j zzesz?&NsB>^?SN#Z;W7)9V}5bF=(rFcX~)hL~{Q~Rbr1if5K@vViz2B%!}@3oGPec zbY2_oOCB9FGwY%HWOTF=ORGfQYPHfilO6h4+d9K(trHunK>XOu1=vVb<&J?14&*jn z9}sbFlW0Okto&{Rupf)4hjN^h2$w40dPp6(N<#bIVNx%-$0XaFjbdeM&c~tzBh%?O zS&-i(49L4kYHL|G9FHelX>zg2VTUuN*am_i1`}#VMwMbE783L8LkZ)~))Dpw`3hhf zCX1w=oT}P+6Gvw4gd$fy5j}%UU@lIE&6-GkR)%f+P}0v9Mdr-P-EdmEZSfw@&^mH= zQW69{%^=ni+~6DD!IIl1=UK@ykC08*q?sJBPusqFSIVnWJCy$bBV?)*>(3^&$Qc5} zpq)PfTFxNetOSk;O90pubkk>sA%?4UQ3c-?!Alyl(y&Ot+9>=7am~OvS+Y{P-0Dz4 z#cQA}%U(P6RPt$DG`sf3S1X znhog0`&3#Z1-}bd9bzrwOx%y4820Al@;Mn-ho+-}@e3uZHM1mt#K_LB3Ahnf1qV#Uf3#<&95O^rmPIoka1`r*>CXzMLd>+Bc&!PZg~MVm zUU~UlcnN;XwJ1L~_aM8uzVB|2(bx2rAtXs)L3xke|j zW+ijy4_ftNfNB&kt^c5bqEHnx~XCA>b0YNm*=c@7B9Tc`v17f z+kFmZX-A%k&su+#yKkb`k{m^FvdR%Er-(hR2rc9l zw_57j`_y#jYME_twi}^6P{FLDYPUIC-MQS+L0z4zKjYZX1x)w9?nqdjt2eV3%&%7R zONh=2_Ry@;;`Sx;CX9Kx2V=di9~`XJ|2DNRMV$-d9EE03Q0M4&ciJ(%y}jnY0G>jX ARR910 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..05f0143d8 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,1327 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 0d21a39e384d88c2313b89b5042c04cb, 2017 +# Carlo Miron , 2011 +# Carlo Miron , 2014 +# Carlo Miron , 2018-2019 +# Davide Targa , 2021 +# Denis Darii , 2011 +# Flavio Curella , 2013,2016 +# Jannis Leidel , 2011 +# Themis Savvidis , 2013 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# Mirco Grillo , 2018,2020 +# Nicola Larosa , 2013 +# palmux , 2014-2015,2017,2021 +# Mattia Procopio , 2015 +# Riccardo Magliocchetti , 2017 +# Stefano Brentegani , 2014-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabo" + +msgid "Algerian Arabic" +msgstr "Arabo Algerino" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azero" + +msgid "Bulgarian" +msgstr "Bulgaro" + +msgid "Belarusian" +msgstr "Bielorusso" + +msgid "Bengali" +msgstr "Bengalese" + +msgid "Breton" +msgstr "Bretone" + +msgid "Bosnian" +msgstr "Bosniaco" + +msgid "Catalan" +msgstr "Catalano" + +msgid "Czech" +msgstr "Ceco" + +msgid "Welsh" +msgstr "Gallese" + +msgid "Danish" +msgstr "Danese" + +msgid "German" +msgstr "Tedesco" + +msgid "Lower Sorbian" +msgstr "Sorabo inferiore" + +msgid "Greek" +msgstr "Greco" + +msgid "English" +msgstr "Inglese" + +msgid "Australian English" +msgstr "Inglese Australiano" + +msgid "British English" +msgstr "Inglese britannico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spagnolo" + +msgid "Argentinian Spanish" +msgstr "Spagnolo Argentino" + +msgid "Colombian Spanish" +msgstr "Spagnolo Colombiano" + +msgid "Mexican Spanish" +msgstr "Spagnolo Messicano" + +msgid "Nicaraguan Spanish" +msgstr "Spagnolo Nicaraguense" + +msgid "Venezuelan Spanish" +msgstr "Spagnolo venezuelano" + +msgid "Estonian" +msgstr "Estone" + +msgid "Basque" +msgstr "Basco" + +msgid "Persian" +msgstr "Persiano" + +msgid "Finnish" +msgstr "Finlandese" + +msgid "French" +msgstr "Francese" + +msgid "Frisian" +msgstr "Frisone" + +msgid "Irish" +msgstr "Irlandese" + +msgid "Scottish Gaelic" +msgstr "Gaelico Scozzese" + +msgid "Galician" +msgstr "Galiziano" + +msgid "Hebrew" +msgstr "Ebraico" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croato" + +msgid "Upper Sorbian" +msgstr "Sorabo superiore" + +msgid "Hungarian" +msgstr "Ungherese" + +msgid "Armenian" +msgstr "Armeno" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesiano" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandese" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Giapponese" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Cabilo" + +msgid "Kazakh" +msgstr "Kazako" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Coreano" + +msgid "Kyrgyz" +msgstr "Kirghiso" + +msgid "Luxembourgish" +msgstr "Lussemburghese" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Lettone" + +msgid "Macedonian" +msgstr "Macedone" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolo" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Birmano" + +msgid "Norwegian Bokmål" +msgstr "Norvegese Bokmål" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Olandese" + +msgid "Norwegian Nynorsk" +msgstr "Norvegese Nynorsk" + +msgid "Ossetic" +msgstr "Ossetico" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polacco" + +msgid "Portuguese" +msgstr "Portoghese" + +msgid "Brazilian Portuguese" +msgstr "Brasiliano Portoghese" + +msgid "Romanian" +msgstr "Rumeno" + +msgid "Russian" +msgstr "Russo" + +msgid "Slovak" +msgstr "Slovacco" + +msgid "Slovenian" +msgstr "Sloveno" + +msgid "Albanian" +msgstr "Albanese" + +msgid "Serbian" +msgstr "Serbo" + +msgid "Serbian Latin" +msgstr "Serbo Latino" + +msgid "Swedish" +msgstr "Svedese" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tajik" + +msgid "Thai" +msgstr "Tailandese" + +msgid "Turkmen" +msgstr "Turkmeno" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraino" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbeko" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Cinese semplificato" + +msgid "Traditional Chinese" +msgstr "Cinese tradizionale" + +msgid "Messages" +msgstr "Messaggi" + +msgid "Site Maps" +msgstr "Mappa del sito" + +msgid "Static Files" +msgstr "File statici" + +msgid "Syndication" +msgstr "Aggregazione" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Quel numero di pagina non è un integer" + +msgid "That page number is less than 1" +msgstr "Quel numero di pagina è minore di 1" + +msgid "That page contains no results" +msgstr "Quella pagina non presenta alcun risultato" + +msgid "Enter a valid value." +msgstr "Inserisci un valore valido." + +msgid "Enter a valid URL." +msgstr "Inserisci un URL valido." + +msgid "Enter a valid integer." +msgstr "Inserire un numero intero valido." + +msgid "Enter a valid email address." +msgstr "Inserisci un indirizzo email valido." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Inserisci uno \"slug\" valido contenente lettere, cifre, sottolineati o " +"trattini." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Inserisci uno 'slug' valido contenente lettere, cifre, sottolineati o " +"trattini." + +msgid "Enter a valid IPv4 address." +msgstr "Inserisci un indirizzo IPv4 valido." + +msgid "Enter a valid IPv6 address." +msgstr "Inserisci un indirizzo IPv6 valido." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Inserisci un indirizzo IPv4 o IPv6 valido." + +msgid "Enter only digits separated by commas." +msgstr "Inserisci solo cifre separate da virgole." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Assicurati che questo valore sia %(limit_value)s (ora è %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Assicurati che questo valore sia minore o uguale a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Assicurati che questo valore sia maggiore o uguale a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assicurati che questo valore contenga almeno %(limit_value)d carattere (ne " +"ha %(show_value)d)." +msgstr[1] "" +"Assicurati che questo valore contenga almeno %(limit_value)d caratteri (ne " +"ha %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assicurati che questo valore non contenga più di %(limit_value)d carattere " +"(ne ha %(show_value)d)." +msgstr[1] "" +"Assicurati che questo valore non contenga più di %(limit_value)d caratteri " +"(ne ha %(show_value)d)." + +msgid "Enter a number." +msgstr "Inserisci un numero." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Assicurati che non vi sia più di %(max)s cifra in totale." +msgstr[1] "Assicurati che non vi siano più di %(max)s cifre in totale." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Assicurati che non vi sia più di %(max)s cifra decimale." +msgstr[1] "Assicurati che non vi siano più di %(max)s cifre decimali." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Assicurati che non vi sia più di %(max)s cifra prima della virgola." +msgstr[1] "" +"Assicurati che non vi siano più di %(max)s cifre prima della virgola." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Il file con estensione \"%(extension)s\" non e' permesso. Le estensioni " +"permesse sono: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "I caratteri null non sono ammessi." + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s con questa %(field_labels)s esiste già." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Il valore %(value)r non è una scelta valida." + +msgid "This field cannot be null." +msgstr "Questo campo non può essere nullo." + +msgid "This field cannot be blank." +msgstr "Questo campo non può essere vuoto." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s con questo %(field_label)s esiste già." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s deve essere unico per %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo di tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Il valore \"%(value)s\" deve essere True oppure False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Il valore di \"%(value)s\" deve essere True, False o None" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Vero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Stringa (fino a %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Interi separati da virgole" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Il valore \"%(value)s\" ha un formato di data non valido. Deve essere nel " +"formato AAAA-MM-GG." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Il valore di \"%(value)s\" ha il corretto formato (AAAA-MM-GG) ma non è una " +"data valida." + +msgid "Date (without time)" +msgstr "Data (senza ora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Il valore \"%(value)s\" ha un formato non valido. Deve essere nel formato " +"AAAA-MM-GG HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Il valore di \"%(value)s\" ha il formato corretto (AAAA-MM-GG HH:MM[:ss[." +"uuuuuu]][TZ]) ma non è una data/ora valida." + +msgid "Date (with time)" +msgstr "Data (con ora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Il valore \"%(value)s\" deve essere un numero decimale." + +msgid "Decimal number" +msgstr "Numero decimale" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Il valore \"%(value)s\" ha un formato non valido. Deve essere nel formato " +"[GG] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Durata" + +msgid "Email address" +msgstr "Indirizzo email" + +msgid "File path" +msgstr "Percorso file" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Il valore di \"%(value)s\" deve essere un numero a virgola mobile." + +msgid "Floating point number" +msgstr "Numero in virgola mobile" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Il valore \"%(value)s\" deve essere un intero." + +msgid "Integer" +msgstr "Intero" + +msgid "Big (8 byte) integer" +msgstr "Intero grande (8 byte)" + +msgid "Small integer" +msgstr "Piccolo intero" + +msgid "IPv4 address" +msgstr "Indirizzo IPv4" + +msgid "IP address" +msgstr "Indirizzo IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Il valore \"%(value)s\" deve essere None, True oppure False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (True, False o None)" + +msgid "Positive big integer" +msgstr "Intero positivo" + +msgid "Positive integer" +msgstr "Intero positivo" + +msgid "Positive small integer" +msgstr "Piccolo intero positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (fino a %(max_length)s)" + +msgid "Text" +msgstr "Testo" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Il valore di \"%(value)s\" ha un formato non valido. Deve essere nel formato " +"HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Il valore di \"%(value)s\" ha il corretto formato (HH:MM[:ss[.uuuuuu]]) ma " +"non è un orario valido." + +msgid "Time" +msgstr "Ora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dati binari grezzi" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" non è uno UUID valido." + +msgid "Universally unique identifier" +msgstr "Identificatore univoco universale" + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Immagine" + +msgid "A JSON object" +msgstr "Un oggetto JSON" + +msgid "Value must be valid JSON." +msgstr "Il valore deve essere un JSON valido." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "L'istanza del modello %(model)s con %(field)s %(value)r non esiste." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (tipo determinato dal campo collegato)" + +msgid "One-to-one relationship" +msgstr "Relazione uno a uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "relazione %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "relazioni %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relazione molti a molti" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Questo campo è obbligatorio." + +msgid "Enter a whole number." +msgstr "Inserisci un numero intero." + +msgid "Enter a valid date." +msgstr "Inserisci una data valida." + +msgid "Enter a valid time." +msgstr "Inserisci un'ora valida." + +msgid "Enter a valid date/time." +msgstr "Inserisci una data/ora valida." + +msgid "Enter a valid duration." +msgstr "Inserisci una durata valida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Il numero di giorni deve essere compreso tra {min_days} e {max_days}" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Non è stato inviato alcun file. Verifica il tipo di codifica sul form." + +msgid "No file was submitted." +msgstr "Nessun file è stato inviato." + +msgid "The submitted file is empty." +msgstr "Il file inviato è vuoto." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Assicurati che questo nome di file non contenga più di %(max)d carattere (ne " +"ha %(length)d)." +msgstr[1] "" +"Assicurati che questo nome di file non contenga più di %(max)d caratteri (ne " +"ha %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"È possibile inviare un file o selezionare la casella \"svuota\", ma non " +"entrambi." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Carica un'immagine valida. Il file caricato non è un'immagine o è " +"un'immagine danneggiata." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Scegli un'opzione valida. %(value)s non è tra quelle disponibili." + +msgid "Enter a list of values." +msgstr "Inserisci una lista di valori." + +msgid "Enter a complete value." +msgstr "Inserisci un valore completo." + +msgid "Enter a valid UUID." +msgstr "Inserire un UUID valido." + +msgid "Enter a valid JSON." +msgstr "Inserisci un JSON valido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo nascosto %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Mancano i dati ManagementForm o sono stati manomessi. Campi mancanti: " +"%(field_names)s. Potrebbe essere necessario inviare una segnalazione di " +"errore se il problema persiste." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Si prega di inviare al massimo %d form." +msgstr[1] "Si prega di inviare al massimo %d form." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Si prega di inviare almeno %d form." +msgstr[1] "Si prega di inviare almeno %d form." + +msgid "Order" +msgstr "Ordine" + +msgid "Delete" +msgstr "Cancella" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Si prega di correggere i dati duplicati di %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Si prega di correggere i dati duplicati di %(field)s, che deve essere unico." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Si prega di correggere i dati duplicati di %(field_name)s che deve essere " +"unico/a per %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Si prega di correggere i dati duplicati qui sotto." + +msgid "The inline value did not match the parent instance." +msgstr "Il valore inline non corrisponde all'istanza padre." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Scegli un'opzione valida. La scelta effettuata non compare tra quelle " +"disponibili." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" non è un valore valido." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +" %(datetime)s non può essere interpretato nel fuso orario " +"%(current_timezone)s: potrebbe essere ambiguo o non esistere." + +msgid "Clear" +msgstr "Svuota" + +msgid "Currently" +msgstr "Attualmente" + +msgid "Change" +msgstr "Cambia" + +msgid "Unknown" +msgstr "Sconosciuto" + +msgid "Yes" +msgstr "Sì" + +msgid "No" +msgstr "No" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sì,no,forse" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "mezzanotte" + +msgid "noon" +msgstr "mezzogiorno" + +msgid "Monday" +msgstr "Lunedì" + +msgid "Tuesday" +msgstr "Martedì" + +msgid "Wednesday" +msgstr "Mercoledì" + +msgid "Thursday" +msgstr "Giovedì" + +msgid "Friday" +msgstr "Venerdì" + +msgid "Saturday" +msgstr "Sabato" + +msgid "Sunday" +msgstr "Domenica" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Gio" + +msgid "Fri" +msgstr "Ven" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Gennaio" + +msgid "February" +msgstr "Febbraio" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Aprile" + +msgid "May" +msgstr "Maggio" + +msgid "June" +msgstr "Giugno" + +msgid "July" +msgstr "Luglio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Settembre" + +msgid "October" +msgstr "Ottobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Dicembre" + +msgid "jan" +msgstr "gen" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mag" + +msgid "jun" +msgstr "giu" + +msgid "jul" +msgstr "lug" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "ott" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Gen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprile" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maggio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Giugno" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Luglio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Ott." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Gennaio" + +msgctxt "alt. month" +msgid "February" +msgstr "Febbraio" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprile" + +msgctxt "alt. month" +msgid "May" +msgstr "Maggio" + +msgctxt "alt. month" +msgid "June" +msgstr "Giugno" + +msgctxt "alt. month" +msgid "July" +msgstr "Luglio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Settembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Ottobre" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Dicembre" + +msgid "This is not a valid IPv6 address." +msgstr "Questo non è un indirizzo IPv6 valido." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d anno" +msgstr[1] "%(num)d anni" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mese" +msgstr[1] "%(num)d mesi" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d settimana" +msgstr[1] "%(num)d settimane" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d giorno" +msgstr[1] "%(num)d giorni" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ora" +msgstr[1] "%(num)d ore" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minuti" + +msgid "Forbidden" +msgstr "Proibito" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verifica CSRF fallita. Richiesta interrotta." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Vedi questo messaggio perchè questo sito HTTPS richiede l'invio da parte del " +"tuo browser del “Referer header”, che non è invece stato inviato. Questo " +"header è richiesto per motivi di sicurezza, per assicurare che il tuo " +"browser non sia stato sabotato da terzi." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Se hai configurato il tuo browser web per disattivare l'invio delle " +"intestazioni \"Referer\", riattiva questo invio, almeno per questo sito, o " +"per le connessioni HTTPS, o per le connessioni \"same-origin\"." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Se usi il tag o includi " +"header 'Referrer-Policy: no-referrer', per favore rimuovili. Per la " +"protezione CSRF è necessario eseguire un controllo rigoroso sull'header " +"'Referer'. Se ti preoccupano le ricadute sulla privacy, puoi ricorrere ad " +"alternative come per i link a siti di terze parti." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Stai vedendo questo messaggio perché questo sito richiede un cookie CSRF " +"quando invii dei form. Questo cookie è necessario per ragioni di sicurezza, " +"per assicurare che il tuo browser non sia stato dirottato da terze parti." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Se hai configurato il tuo browser web per disattivare l'invio dei cookies, " +"riattivalo almeno per questo sito, o per connessioni \"same-origin\"" + +msgid "More information is available with DEBUG=True." +msgstr "Maggiorni informazioni sono disponibili con DEBUG=True" + +msgid "No year specified" +msgstr "Anno non specificato" + +msgid "Date out of range" +msgstr "Data al di fuori dell'intervallo" + +msgid "No month specified" +msgstr "Mese non specificato" + +msgid "No day specified" +msgstr "Giorno non specificato" + +msgid "No week specified" +msgstr "Settimana non specificata" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nessun %(verbose_name_plural)s disponibile" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s futuri/e non disponibili/e poichè %(class_name)s." +"allow_future è False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Data non valida \"%(datestr)s\" con il formato \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Trovato nessun %(verbose_name)s corrispondente alla query" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "La pagina non è \"last\", né può essere convertita in un int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Pagina non valida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lista vuota e \"%(class_name)s.allow_empty\" è False." + +msgid "Directory indexes are not allowed here." +msgstr "Indici di directory non sono consentiti qui." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" non esiste" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indice di %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installazione completata con successo! Congratulazioni!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Leggi le note di rilascio per Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Stai vedendo questa pagina perché hai impostato DEBUG=True nel tuo file di configurazione e non hai " +"configurato nessun URL." + +msgid "Django Documentation" +msgstr "Documentazione di Django" + +msgid "Topics, references, & how-to’s" +msgstr "Temi, riferimenti, & guide" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: un'app per sondaggi" + +msgid "Get started with Django" +msgstr "Iniziare con Django" + +msgid "Django Community" +msgstr "La Community di Django" + +msgid "Connect, get help, or contribute" +msgstr "Connettiti, chiedi aiuto, o contribuisci." diff --git a/venv/Lib/site-packages/django/conf/locale/it/__init__.py b/venv/Lib/site-packages/django/conf/locale/it/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/it/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/it/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c21c17af2ef21a81609edb7cebd16ca197920b72 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lW{G}$d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04pmr-v9sr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/it/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/it/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c19dd459b692be25d4dbf7986e1efdbf2c441f1 GIT binary patch literal 934 zcmZXSO^=#D7=S_0MP1jjX?y623kQ=bce80qR}j+$3}6~2qy!x_Sdoo`o5;`Ut$%5g zo_gA(=?~abXYd2u9l|^FKJz~FK}cGy28G+-@4u)2Y83T{B;{7Y$!Gi`5+DUANCO&H zKm{^@fh=HQ6;xpj)ZhiUSWuArNdpe|b==os12kY0G~p$2pBU8kM# zM_UlJzNq&_JA3;I^~8C0bxu#>?zLE;vUs3aboVDJi!ae$JfmdC{iVv{OLW+=TzC?T zbCEmdB?T&r2l`BZe589%4F1kWrv;h=*-?Dev~<}4O=qN^k~Wzs1Kw3+%hyfA(T>8K zeKwHYBjIh$v>d;@>bnA+EvJqwn^d~Ksrug( vt7I0eLMck6d9sOv6!q?RkK9e1!0jshM1F4c0SA_4>GH#|9LMr3&C&k>lUeR0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/it/formats.py b/venv/Lib/site-packages/django/conf/locale/it/formats.py new file mode 100644 index 000000000..bb9e0270b --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/it/formats.py @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d F Y" # 25 Ottobre 2006 +TIME_FORMAT = "H:i" # 14:30 +DATETIME_FORMAT = "l d F Y H:i" # Mercoledì 25 Ottobre 2006 14:30 +YEAR_MONTH_FORMAT = "F Y" # Ottobre 2006 +MONTH_DAY_FORMAT = "j F" # 25 Ottobre +SHORT_DATE_FORMAT = "d/m/Y" # 25/12/2009 +SHORT_DATETIME_FORMAT = "d/m/Y H:i" # 25/10/2009 14:30 +FIRST_DAY_OF_WEEK = 1 # Lunedì + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%Y/%m/%d", # '2006/10/25' + "%d-%m-%Y", # '25-10-2006' + "%Y-%m-%d", # '2006-10-25' + "%d-%m-%y", # '25-10-06' + "%d/%m/%y", # '25/10/06' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", # '25/10/2006 14:30:59' + "%d/%m/%Y %H:%M:%S.%f", # '25/10/2006 14:30:59.000200' + "%d/%m/%Y %H:%M", # '25/10/2006 14:30' + "%d/%m/%y %H:%M:%S", # '25/10/06 14:30:59' + "%d/%m/%y %H:%M:%S.%f", # '25/10/06 14:30:59.000200' + "%d/%m/%y %H:%M", # '25/10/06 14:30' + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d-%m-%Y %H:%M:%S", # '25-10-2006 14:30:59' + "%d-%m-%Y %H:%M:%S.%f", # '25-10-2006 14:30:59.000200' + "%d-%m-%Y %H:%M", # '25-10-2006 14:30' + "%d-%m-%y %H:%M:%S", # '25-10-06 14:30:59' + "%d-%m-%y %H:%M:%S.%f", # '25-10-06 14:30:59.000200' + "%d-%m-%y %H:%M", # '25-10-06 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2fd64a8f3945d44d317d61000f9d41a66a857e1a GIT binary patch literal 30047 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 T9L#|{bF=(XPC3Rpw|M^z$RX7K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..3663dae5d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,1294 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# xiu1 , 2016 +# tadasu , 2020 +# Goto Hayato , 2021 +# Goto Hayato , 2019 +# Jannis Leidel , 2011 +# Kentaro Matsuzaki , 2015 +# Masashi SHIBATA , 2017 +# Nikita K , 2019 +# Shinichi Katsumata , 2019 +# Shinya Okano , 2012-2019,2021 +# Takuro Onoue , 2020 +# Takuya N , 2020 +# Tetsuya Morimoto , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "アフリカーンス語" + +msgid "Arabic" +msgstr "アラビア語" + +msgid "Algerian Arabic" +msgstr "アラビア語(アルジェリア)" + +msgid "Asturian" +msgstr "アストゥリアス語" + +msgid "Azerbaijani" +msgstr "アゼルバイジャン語" + +msgid "Bulgarian" +msgstr "ブルガリア語" + +msgid "Belarusian" +msgstr "ベラルーシ語" + +msgid "Bengali" +msgstr "ベンガル語" + +msgid "Breton" +msgstr "ブルトン語" + +msgid "Bosnian" +msgstr "ボスニア語" + +msgid "Catalan" +msgstr "カタロニア語" + +msgid "Czech" +msgstr "チェコ語" + +msgid "Welsh" +msgstr "ウェールズ語" + +msgid "Danish" +msgstr "デンマーク語" + +msgid "German" +msgstr "ドイツ語" + +msgid "Lower Sorbian" +msgstr "低地ソルブ語" + +msgid "Greek" +msgstr "ギリシャ語" + +msgid "English" +msgstr "英語(米国)" + +msgid "Australian English" +msgstr "英語(オーストラリア)" + +msgid "British English" +msgstr "英語(英国)" + +msgid "Esperanto" +msgstr "エスペラント語" + +msgid "Spanish" +msgstr "スペイン語" + +msgid "Argentinian Spanish" +msgstr "アルゼンチンスペイン語" + +msgid "Colombian Spanish" +msgstr "コロンビアスペイン語" + +msgid "Mexican Spanish" +msgstr "メキシコスペイン語" + +msgid "Nicaraguan Spanish" +msgstr "ニカラグアスペイン語" + +msgid "Venezuelan Spanish" +msgstr "ベネズエラスペイン語" + +msgid "Estonian" +msgstr "エストニア語" + +msgid "Basque" +msgstr "バスク語" + +msgid "Persian" +msgstr "ペルシア語" + +msgid "Finnish" +msgstr "フィンランド語" + +msgid "French" +msgstr "フランス語" + +msgid "Frisian" +msgstr "フリジア語" + +msgid "Irish" +msgstr "アイルランド語" + +msgid "Scottish Gaelic" +msgstr "ゲール語(スコットランド)" + +msgid "Galician" +msgstr "ガリシア語" + +msgid "Hebrew" +msgstr "ヘブライ語" + +msgid "Hindi" +msgstr "ヒンディー語" + +msgid "Croatian" +msgstr "クロアチア語" + +msgid "Upper Sorbian" +msgstr "高地ソルブ語" + +msgid "Hungarian" +msgstr "ハンガリー語" + +msgid "Armenian" +msgstr "アルメニア" + +msgid "Interlingua" +msgstr "インターリングア" + +msgid "Indonesian" +msgstr "インドネシア語" + +msgid "Igbo" +msgstr "イグボ語" + +msgid "Ido" +msgstr "イド語" + +msgid "Icelandic" +msgstr "アイスランド語" + +msgid "Italian" +msgstr "イタリア語" + +msgid "Japanese" +msgstr "日本語" + +msgid "Georgian" +msgstr "グルジア語" + +msgid "Kabyle" +msgstr "カビル語" + +msgid "Kazakh" +msgstr "カザフ語" + +msgid "Khmer" +msgstr "クメール語" + +msgid "Kannada" +msgstr "カンナダ語" + +msgid "Korean" +msgstr "韓国語" + +msgid "Kyrgyz" +msgstr "キルギス語" + +msgid "Luxembourgish" +msgstr "ルクセンブルグ語" + +msgid "Lithuanian" +msgstr "リトアニア語" + +msgid "Latvian" +msgstr "ラトビア語" + +msgid "Macedonian" +msgstr "マケドニア語" + +msgid "Malayalam" +msgstr "マラヤーラム語" + +msgid "Mongolian" +msgstr "モンゴル語" + +msgid "Marathi" +msgstr "マラーティー語" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "ビルマ語" + +msgid "Norwegian Bokmål" +msgstr "ノルウェーのブークモール" + +msgid "Nepali" +msgstr "ネパール語" + +msgid "Dutch" +msgstr "オランダ語" + +msgid "Norwegian Nynorsk" +msgstr "ノルウェーのニーノシュク" + +msgid "Ossetic" +msgstr "オセット語" + +msgid "Punjabi" +msgstr "パンジャブ語" + +msgid "Polish" +msgstr "ポーランド語" + +msgid "Portuguese" +msgstr "ポルトガル語" + +msgid "Brazilian Portuguese" +msgstr "ブラジルポルトガル語" + +msgid "Romanian" +msgstr "ルーマニア語" + +msgid "Russian" +msgstr "ロシア語" + +msgid "Slovak" +msgstr "スロバキア語" + +msgid "Slovenian" +msgstr "スロヴェニア語" + +msgid "Albanian" +msgstr "アルバニア語" + +msgid "Serbian" +msgstr "セルビア語" + +msgid "Serbian Latin" +msgstr "セルビア語ラテン文字" + +msgid "Swedish" +msgstr "スウェーデン語" + +msgid "Swahili" +msgstr "スワヒリ語" + +msgid "Tamil" +msgstr "タミル語" + +msgid "Telugu" +msgstr "テルグ語" + +msgid "Tajik" +msgstr "タジク語" + +msgid "Thai" +msgstr "タイ語" + +msgid "Turkmen" +msgstr "トルクメン語" + +msgid "Turkish" +msgstr "トルコ語" + +msgid "Tatar" +msgstr "タタール語" + +msgid "Udmurt" +msgstr "ウドムルト語" + +msgid "Ukrainian" +msgstr "ウクライナ語" + +msgid "Urdu" +msgstr "ウルドゥー語" + +msgid "Uzbek" +msgstr "ウズベク語" + +msgid "Vietnamese" +msgstr "ベトナム語" + +msgid "Simplified Chinese" +msgstr "簡体字中国語" + +msgid "Traditional Chinese" +msgstr "繁体字中国語" + +msgid "Messages" +msgstr "メッセージ" + +msgid "Site Maps" +msgstr "サイトマップ" + +msgid "Static Files" +msgstr "静的ファイル" + +msgid "Syndication" +msgstr "シンジケーション" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "このページ番号は整数ではありません。" + +msgid "That page number is less than 1" +msgstr "ページ番号が 1 よりも小さいです。" + +msgid "That page contains no results" +msgstr "このページには結果が含まれていません。" + +msgid "Enter a valid value." +msgstr "値を正しく入力してください。" + +msgid "Enter a valid URL." +msgstr "URLを正しく入力してください。" + +msgid "Enter a valid integer." +msgstr "整数を正しく入力してください。" + +msgid "Enter a valid email address." +msgstr "有効なメールアドレスを入力してください。" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"“slug” には半角の英数字、アンダースコア、ハイフン以外は使用できません。" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"ユニコード文字、数字、アンダースコアまたはハイフンで構成された、有効なスラグ" +"を入力してください。" + +msgid "Enter a valid IPv4 address." +msgstr "有効なIPアドレス (IPv4) を入力してください。" + +msgid "Enter a valid IPv6 address." +msgstr "IPv6の正しいアドレスを入力してください。" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "IPv4またはIPv6の正しいアドレスを入力してください。" + +msgid "Enter only digits separated by commas." +msgstr "カンマ区切りの数字だけを入力してください。" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"この値は %(limit_value)s でなければなりません(実際には %(show_value)s でし" +"た) 。" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "この値は %(limit_value)s 以下でなければなりません。" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "この値は %(limit_value)s 以上でなければなりません。" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"この値が少なくとも %(limit_value)d 文字以上であることを確認してください " +"(%(show_value)d 文字になっています)。" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"この値は %(limit_value)d 文字以下でなければなりません( %(show_value)d 文字に" +"なっています)。" + +msgid "Enter a number." +msgstr "数値を入力してください。" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "この値は合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "この値は小数点以下が合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "この値は小数点より前が合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"ファイル拡張子 “%(extension)s” は許可されていません。許可されている拡張子は " +"%(allowed_extensions)s です。" + +msgid "Null characters are not allowed." +msgstr "何か文字を入力してください。" + +msgid "and" +msgstr "と" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "この %(field_labels)s を持った %(model_name)s が既に存在します。" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r は有効な選択肢ではありません。" + +msgid "This field cannot be null." +msgstr "このフィールドには NULL を指定できません。" + +msgid "This field cannot be blank." +msgstr "このフィールドは空ではいけません。" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "この %(field_label)s を持った %(model_name)s が既に存在します。" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(date_field_label)s %(lookup_type)s では %(field_label)s がユニークである必" +"要があります。" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "タイプが %(field_type)s のフィールド" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” は True または False にしなければなりません。" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” は True 、 False または None の値でなければなりません。" + +msgid "Boolean (Either True or False)" +msgstr "ブール値 (真: True または偽: False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "文字列 ( %(max_length)s 字まで )" + +msgid "Comma-separated integers" +msgstr "カンマ区切りの整数" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” は無効な日付形式です。YYYY-MM-DD 形式にしなければなりません。" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "“%(value)s” は有効な日付形式(YYYY-MM-DD)ですが、不正な日付です。" + +msgid "Date (without time)" +msgstr "日付" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” は無効な形式の値です。 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 形式で" +"なければなりません。" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” は正しい形式 (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) の値ですが、無" +"効な日時です。" + +msgid "Date (with time)" +msgstr "日時" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” は10進浮動小数値にしなければなりません。" + +msgid "Decimal number" +msgstr "10 進数 (小数可)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” は無効な形式の値です。 [DD] [HH:[MM:]]ss[.uuuuuu] 形式でなければ" +"なりません。" + +msgid "Duration" +msgstr "時間差分" + +msgid "Email address" +msgstr "メールアドレス" + +msgid "File path" +msgstr "ファイルの場所" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” は小数値にしなければなりません。" + +msgid "Floating point number" +msgstr "浮動小数点" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” は整数値にしなければなりません。" + +msgid "Integer" +msgstr "整数" + +msgid "Big (8 byte) integer" +msgstr "大きな(8バイト)整数" + +msgid "Small integer" +msgstr "小さな整数" + +msgid "IPv4 address" +msgstr "IPv4アドレス" + +msgid "IP address" +msgstr "IP アドレス" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” は None、True または False の値でなければなりません。" + +msgid "Boolean (Either True, False or None)" +msgstr "ブール値 (真: True 、偽: False または None)" + +msgid "Positive big integer" +msgstr "正の多倍長整数" + +msgid "Positive integer" +msgstr "正の整数" + +msgid "Positive small integer" +msgstr "小さな正の整数" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "スラグ(%(max_length)s文字以内)" + +msgid "Text" +msgstr "テキスト" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” は無効な形式の値です。 HH:MM[:ss[.uuuuuu]] 形式でなければなりませ" +"ん。" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "“%(value)s” は正しい形式(HH:MM[:ss[.uuuuuu]])ですが、無効な時刻です。" + +msgid "Time" +msgstr "時刻" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "生のバイナリデータ" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” は有効なUUIDではありません。" + +msgid "Universally unique identifier" +msgstr "汎用一意識別子" + +msgid "File" +msgstr "ファイル" + +msgid "Image" +msgstr "画像" + +msgid "A JSON object" +msgstr "JSONオブジェクト" + +msgid "Value must be valid JSON." +msgstr "JSONとして正しい値にしてください。" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s が %(value)r である %(model)s のインスタンスは存在しません。" + +msgid "Foreign Key (type determined by related field)" +msgstr "外部キー(型は関連フィールドによって決まります)" + +msgid "One-to-one relationship" +msgstr "1対1の関連" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s の関連" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s の関連" + +msgid "Many-to-many relationship" +msgstr "多対多の関連" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "このフィールドは必須です。" + +msgid "Enter a whole number." +msgstr "整数を入力してください。" + +msgid "Enter a valid date." +msgstr "日付を正しく入力してください。" + +msgid "Enter a valid time." +msgstr "時間を正しく入力してください。" + +msgid "Enter a valid date/time." +msgstr "日時を正しく入力してください。" + +msgid "Enter a valid duration." +msgstr "時間差分を正しく入力してください。" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "日数は{min_days}から{max_days}の間でなければなりません。" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ファイルが取得できませんでした。フォームのencoding typeを確認してください。" + +msgid "No file was submitted." +msgstr "ファイルが送信されていません。" + +msgid "The submitted file is empty." +msgstr "入力されたファイルは空です。" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"このファイル名は %(max)d 文字以下でなければなりません( %(length)d 文字になっ" +"ています)。" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"ファイルを投稿するか、クリアチェックボックスをチェックするかどちらかを選択し" +"てください。両方とも行ってはいけません。" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"画像をアップロードしてください。アップロードしたファイルは画像でないか、また" +"は壊れています。" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "正しく選択してください。 %(value)s は候補にありません。" + +msgid "Enter a list of values." +msgstr "リストを入力してください。" + +msgid "Enter a complete value." +msgstr "すべての値を入力してください。" + +msgid "Enter a valid UUID." +msgstr "UUIDを正しく入力してください。" + +msgid "Enter a valid JSON." +msgstr "JSONを正しく入力してください。" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(隠しフィールド %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm のデータが不足しているか改竄されています。不足するフィールドの" +"数: %(field_names)s 。問題が続くようならバグレポートを出す必要があるかもしれ" +"ません。" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "最多 %d のフォームを送信してください。" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "最少 %d のフォームを送信してください。" + +msgid "Order" +msgstr "並び変え" + +msgid "Delete" +msgstr "削除" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s の重複したデータを修正してください。" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s の重複したデータを修正してください。このフィールドはユニークである" +"必要があります。" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s の重複したデータを修正してください。%(date_field)s %(lookup)s " +"では %(field_name)s がユニークである必要があります。" + +msgid "Please correct the duplicate values below." +msgstr "下記の重複したデータを修正してください。" + +msgid "The inline value did not match the parent instance." +msgstr "インライン値が親のインスタンスに一致しません。" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "正しく選択してください。選択したものは候補にありません。" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” は無効な値です。" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s は %(current_timezone)s のタイムゾーンでは解釈できませんでした。" +"それは曖昧であるか、存在しない可能性があります。" + +msgid "Clear" +msgstr "クリア" + +msgid "Currently" +msgstr "現在" + +msgid "Change" +msgstr "変更" + +msgid "Unknown" +msgstr "不明" + +msgid "Yes" +msgstr "はい" + +msgid "No" +msgstr "いいえ" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "はい,いいえ,たぶん" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d バイト" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "0時" + +msgid "noon" +msgstr "12時" + +msgid "Monday" +msgstr "月曜日" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Friday" +msgstr "金曜日" + +msgid "Saturday" +msgstr "土曜日" + +msgid "Sunday" +msgstr "日曜日" + +msgid "Mon" +msgstr "月" + +msgid "Tue" +msgstr "火" + +msgid "Wed" +msgstr "水" + +msgid "Thu" +msgstr "木" + +msgid "Fri" +msgstr "金" + +msgid "Sat" +msgstr "土" + +msgid "Sun" +msgstr "日" + +msgid "January" +msgstr "1月" + +msgid "February" +msgstr "2月" + +msgid "March" +msgstr "3月" + +msgid "April" +msgstr "4月" + +msgid "May" +msgstr "5月" + +msgid "June" +msgstr "6月" + +msgid "July" +msgstr "7月" + +msgid "August" +msgstr "8月" + +msgid "September" +msgstr "9月" + +msgid "October" +msgstr "10月" + +msgid "November" +msgstr "11月" + +msgid "December" +msgstr "12月" + +msgid "jan" +msgstr "1月" + +msgid "feb" +msgstr "2月" + +msgid "mar" +msgstr "3月" + +msgid "apr" +msgstr "4月" + +msgid "may" +msgstr "5月" + +msgid "jun" +msgstr "6月" + +msgid "jul" +msgstr "7月" + +msgid "aug" +msgstr "8月" + +msgid "sep" +msgstr "9月" + +msgid "oct" +msgstr "10月" + +msgid "nov" +msgstr "11月" + +msgid "dec" +msgstr "12月" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "1月" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "2月" + +msgctxt "abbrev. month" +msgid "March" +msgstr "3月" + +msgctxt "abbrev. month" +msgid "April" +msgstr "4月" + +msgctxt "abbrev. month" +msgid "May" +msgstr "5月" + +msgctxt "abbrev. month" +msgid "June" +msgstr "6月" + +msgctxt "abbrev. month" +msgid "July" +msgstr "7月" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "8月" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "9月" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "10月" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "11月" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "12月" + +msgctxt "alt. month" +msgid "January" +msgstr "1月" + +msgctxt "alt. month" +msgid "February" +msgstr "2月" + +msgctxt "alt. month" +msgid "March" +msgstr "3月" + +msgctxt "alt. month" +msgid "April" +msgstr "4月" + +msgctxt "alt. month" +msgid "May" +msgstr "5月" + +msgctxt "alt. month" +msgid "June" +msgstr "6月" + +msgctxt "alt. month" +msgid "July" +msgstr "7月" + +msgctxt "alt. month" +msgid "August" +msgstr "8月" + +msgctxt "alt. month" +msgid "September" +msgstr "9月" + +msgctxt "alt. month" +msgid "October" +msgstr "10月" + +msgctxt "alt. month" +msgid "November" +msgstr "11月" + +msgctxt "alt. month" +msgid "December" +msgstr "12月" + +msgid "This is not a valid IPv6 address." +msgstr "これは有効なIPv6アドレスではありません。" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "または" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d年" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)dヶ月" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d週間" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d日" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d時間" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d分" + +msgid "Forbidden" +msgstr "アクセス禁止" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF検証に失敗したため、リクエストは中断されました。" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"このメッセージが表示されている理由は、このHTTPSのサイトはウェブブラウザからリ" +"ファラーヘッダが送信されることを必須としていますが、送信されなかったためで" +"す。このヘッダはセキュリティ上の理由(使用中のブラウザが第三者によってハイ" +"ジャックされていないことを確認するため)で必要です。" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"もしブラウザのリファラーヘッダを無効に設定しているならば、HTTPS接続やsame-" +"originリクエストのために、少なくともこのサイトでは再度有効にしてください。" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"もし タグを使用しているか " +"“Referrer-Policy: no-referrer” ヘッダを含んでいる場合は削除してください。" +"CSRF プロテクションは、厳密に “Referer” ヘッダが必要です。プライバシーが気に" +"なる場合は などの代替で第三者サイトと接続してくださ" +"い。" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"このメッセージが表示されている理由は、このサイトはフォーム送信時にCSRFクッ" +"キーを必須としているためです。このクッキーはセキュリティ上の理由(使用中のブラ" +"ウザが第三者によってハイジャックされていないことを確認するため)で必要です。" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"もしブラウザのクッキーを無効に設定しているならば、same-originリクエストのため" +"に少なくともこのサイトでは再度有効にしてください。" + +msgid "More information is available with DEBUG=True." +msgstr "詳細な情報は DEBUG=True を設定すると利用できます。" + +msgid "No year specified" +msgstr "年が未指定です" + +msgid "Date out of range" +msgstr "日付が有効範囲外です" + +msgid "No month specified" +msgstr "月が未指定です" + +msgid "No day specified" +msgstr "日が未指定です" + +msgid "No week specified" +msgstr "週が未指定です" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s は利用できません" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_futureがFalseであるため、未来の%(verbose_name_plural)sは" +"利用できません。" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "指定された形式 “%(format)s” では “%(datestr)s” は無効な日付文字列です" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "クエリーに一致する %(verbose_name)s は見つかりませんでした" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "ページが 「最後」ではないか、数値に変換できる値ではありません。" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "無効なページです (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "空の一覧かつ “%(class_name)s.allow_empty” が False です。" + +msgid "Directory indexes are not allowed here." +msgstr "ここではディレクトリインデックスが許可されていません。" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” が存在しません" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)sのディレクトリインデックス" + +msgid "The install worked successfully! Congratulations!" +msgstr "インストールは成功しました!おめでとうございます!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django%(version)sのリリースノートを見る。" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"このページは、設定ファイルでDEBUG=Trueが指定され、何もURLが設定されていない時に表示されます。" + +msgid "Django Documentation" +msgstr "Django ドキュメント" + +msgid "Topics, references, & how-to’s" +msgstr "トピック、リファレンス、ハウツー" + +msgid "Tutorial: A Polling App" +msgstr "チュートリアル: 投票アプリケーション" + +msgid "Get started with Django" +msgstr "Djangoを始めよう" + +msgid "Django Community" +msgstr "Djangoのコミュニティ" + +msgid "Connect, get help, or contribute" +msgstr "つながり、助け合い、貢献しよう" diff --git a/venv/Lib/site-packages/django/conf/locale/ja/__init__.py b/venv/Lib/site-packages/django/conf/locale/ja/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ja/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ja/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec19b166791e0426047ee1868ba82e961a285c1d GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lR-%4K!Sw<04T^b%>V!Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ja/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ja/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..171e8e4ac507053872b474eddefee581d98c3928 GIT binary patch literal 496 zcmZ9J!D_-l5QYZs;KwR1gCg!~zy2 zKmsK}5^;b-DUd>GkVYAhK|J75cED6};R!7teZ9T9o2LhR^Z2|Z%6Hx}pvTVoy4<7sgN0y>_z2jXE3> z>=USkgcwlr%+SGZKw!%XlyCx@mQR9e-}h{625^bpCG1!eNUQ)?7lwIf%rJq-Hr$yf sn4UWo=ALQHv0xj*)bkx9AhpH)n!j>96wdK=^k<|@h2uCjmORh?0Ng>4%m4rY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ja/formats.py b/venv/Lib/site-packages/django/conf/locale/ja/formats.py new file mode 100644 index 000000000..aaf5f9838 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ja/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "Y年n月j日" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "Y年n月j日G:i" +YEAR_MONTH_FORMAT = "Y年n月" +MONTH_DAY_FORMAT = "n月j日" +SHORT_DATE_FORMAT = "Y/m/d" +SHORT_DATETIME_FORMAT = "Y/m/d G:i" +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7cdc3c59bf8235ae1b304f415b6d93eb9445889c GIT binary patch literal 24759 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..1f342b9b4 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,1239 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# David A. , 2019 +# David A. , 2011 +# Jannis Leidel , 2011 +# Tornike Beradze , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Afrikaans" +msgstr "აფრიკაანსი" + +msgid "Arabic" +msgstr "არაბული" + +msgid "Asturian" +msgstr "ასტურიული" + +msgid "Azerbaijani" +msgstr "აზერბაიჯანული" + +msgid "Bulgarian" +msgstr "ბულგარული" + +msgid "Belarusian" +msgstr "ბელარუსული" + +msgid "Bengali" +msgstr "ბენგალიური" + +msgid "Breton" +msgstr "ბრეტონული" + +msgid "Bosnian" +msgstr "ბოსნიური" + +msgid "Catalan" +msgstr "კატალანური" + +msgid "Czech" +msgstr "ჩეხური" + +msgid "Welsh" +msgstr "უელსური" + +msgid "Danish" +msgstr "დანიური" + +msgid "German" +msgstr "გერმანული" + +msgid "Lower Sorbian" +msgstr "ქვემო სორბული" + +msgid "Greek" +msgstr "ბერძნული" + +msgid "English" +msgstr "ინგლისური" + +msgid "Australian English" +msgstr "ავსტრალიური ინგლისური" + +msgid "British English" +msgstr "ბრიტანეთის ინგლისური" + +msgid "Esperanto" +msgstr "ესპერანტო" + +msgid "Spanish" +msgstr "ესპანური" + +msgid "Argentinian Spanish" +msgstr "არგენტინის ესპანური" + +msgid "Colombian Spanish" +msgstr "კოლუმბიური ესპანური" + +msgid "Mexican Spanish" +msgstr "მექსიკური ესპანური" + +msgid "Nicaraguan Spanish" +msgstr "ნიკარაგუული ესპანური" + +msgid "Venezuelan Spanish" +msgstr "ვენესუელის ესპანური" + +msgid "Estonian" +msgstr "ესტონური" + +msgid "Basque" +msgstr "ბასკური" + +msgid "Persian" +msgstr "სპარსული" + +msgid "Finnish" +msgstr "ფინური" + +msgid "French" +msgstr "ფრანგული" + +msgid "Frisian" +msgstr "ფრისიული" + +msgid "Irish" +msgstr "ირლანდიური" + +msgid "Scottish Gaelic" +msgstr "შოტლანდიური-გელური" + +msgid "Galician" +msgstr "გალიციური" + +msgid "Hebrew" +msgstr "ებრაული" + +msgid "Hindi" +msgstr "ჰინდი" + +msgid "Croatian" +msgstr "ხორვატიული" + +msgid "Upper Sorbian" +msgstr "ზემო სორბიული" + +msgid "Hungarian" +msgstr "უნგრული" + +msgid "Armenian" +msgstr "სომხური" + +msgid "Interlingua" +msgstr "ინტერლინგუა" + +msgid "Indonesian" +msgstr "ინდონეზიური" + +msgid "Ido" +msgstr "იდო" + +msgid "Icelandic" +msgstr "ისლანდიური" + +msgid "Italian" +msgstr "იტალიური" + +msgid "Japanese" +msgstr "იაპონური" + +msgid "Georgian" +msgstr "ქართული" + +msgid "Kabyle" +msgstr "კაბილური" + +msgid "Kazakh" +msgstr "ყაზახური" + +msgid "Khmer" +msgstr "ხმერული" + +msgid "Kannada" +msgstr "კანნადა" + +msgid "Korean" +msgstr "კორეული" + +msgid "Luxembourgish" +msgstr "ლუქსემბურგული" + +msgid "Lithuanian" +msgstr "ლიტვური" + +msgid "Latvian" +msgstr "ლატვიური" + +msgid "Macedonian" +msgstr "მაკედონიური" + +msgid "Malayalam" +msgstr "მალაიზიური" + +msgid "Mongolian" +msgstr "მონღოლური" + +msgid "Marathi" +msgstr "მარათული" + +msgid "Burmese" +msgstr "ბირმული" + +msgid "Norwegian Bokmål" +msgstr "ნორვეგიული Bokmål" + +msgid "Nepali" +msgstr "ნეპალური" + +msgid "Dutch" +msgstr "ჰოლანდიური" + +msgid "Norwegian Nynorsk" +msgstr "ნორვეგიული-ნინორსკი" + +msgid "Ossetic" +msgstr "ოსური" + +msgid "Punjabi" +msgstr "პუნჯაბი" + +msgid "Polish" +msgstr "პოლონური" + +msgid "Portuguese" +msgstr "პორტუგალიური" + +msgid "Brazilian Portuguese" +msgstr "ბრაზილიური პორტუგალიური" + +msgid "Romanian" +msgstr "რუმინული" + +msgid "Russian" +msgstr "რუსული" + +msgid "Slovak" +msgstr "სლოვაკური" + +msgid "Slovenian" +msgstr "სლოვენიური" + +msgid "Albanian" +msgstr "ალბანური" + +msgid "Serbian" +msgstr "სერბული" + +msgid "Serbian Latin" +msgstr "სერბული (ლათინური)" + +msgid "Swedish" +msgstr "შვედური" + +msgid "Swahili" +msgstr "სუაჰილი" + +msgid "Tamil" +msgstr "თამილური" + +msgid "Telugu" +msgstr "ტელუგუ" + +msgid "Thai" +msgstr "ტაი" + +msgid "Turkish" +msgstr "თურქული" + +msgid "Tatar" +msgstr "თათრული" + +msgid "Udmurt" +msgstr "უდმურტული" + +msgid "Ukrainian" +msgstr "უკრაინული" + +msgid "Urdu" +msgstr "ურდუ" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "ვიეტნამური" + +msgid "Simplified Chinese" +msgstr "გამარტივებული ჩინური" + +msgid "Traditional Chinese" +msgstr "ტრადიციული ჩინური" + +msgid "Messages" +msgstr "შეტყობინებები" + +msgid "Site Maps" +msgstr "საიტის რუკები" + +msgid "Static Files" +msgstr "სტატიკური ფაილები" + +msgid "Syndication" +msgstr "სინდიკაცია" + +msgid "That page number is not an integer" +msgstr "გვერდის ნომერი არ არის მთელი რიცხვი" + +msgid "That page number is less than 1" +msgstr "გვერდის ნომერი ნაკლებია 1-ზე" + +msgid "That page contains no results" +msgstr "გვერდი არ შეიცავს მონაცემებს" + +msgid "Enter a valid value." +msgstr "შეიყვანეთ სწორი მნიშვნელობა." + +msgid "Enter a valid URL." +msgstr "შეიყვანეთ სწორი URL." + +msgid "Enter a valid integer." +msgstr "შეიყვანეთ სწორი მთელი რიცხვი." + +msgid "Enter a valid email address." +msgstr "შეიყვანეთ მართებული ელფოსტის მისამართი." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "შეიყვანეთ სწორი IPv4 მისამართი." + +msgid "Enter a valid IPv6 address." +msgstr "შეიყვანეთ მართებული IPv6 მისამართი." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "შეიყვანეთ მართებული IPv4 ან IPv6 მისამართი." + +msgid "Enter only digits separated by commas." +msgstr "შეიყვანეთ მხოლოდ მძიმეებით გამოყოფილი ციფრები." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s (იგი არის %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s-ზე ნაკლები ან ტოლი." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s-ზე მეტი ან ტოლი." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"მნიშვნელობას უნდა ჰქონდეს სულ ცოტა %(limit_value)d სიმბოლო (მას აქვს " +"%(show_value)d)." +msgstr[1] "" +"მნიშვნელობას უნდა ჰქონდეს სულ ცოტა %(limit_value)d სიმბოლო (მას აქვს " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"მნიშვნელობას უნდა ჰქონდეს არაუმეტეს %(limit_value)d სიმბოლოსი (მას აქვს " +"%(show_value)d)." +msgstr[1] "" +"მნიშვნელობას უნდა ჰქონდეს არაუმეტეს %(limit_value)d სიმბოლოსი (მას აქვს " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "შეიყვანეთ რიცხვი." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "ციფრების სრული რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "ციფრების სრული რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "" +"ათობითი გამყოფის წინ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Null მნიშვნელობები დაუშვებელია." + +msgid "and" +msgstr "და" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s ამ %(field_labels)s-ით უკვე არსებობს." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "მნიშვნელობა %(value)r არ არის დასაშვები." + +msgid "This field cannot be null." +msgstr "ეს ველი არ შეიძლება იყოს null." + +msgid "This field cannot be blank." +msgstr "ეს ველი არ შეიძლება იყოს ცარიელი." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s მოცემული %(field_label)s-ით უკვე არსებობს." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s უნდა იყოს უნიკალური %(date_field_label)s %(lookup_type)s-" +"სთვის." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ველის ტიპი: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "ლოგიკური (True ან False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "სტრიქონი (%(max_length)s სიმბოლომდე)" + +msgid "Comma-separated integers" +msgstr "მძიმით გამოყოფილი მთელი რიცხვები" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "თარიღი (დროის გარეშე)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "თარიღი (დროსთან ერთად)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ათობითი რიცხვი" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "ხანგრზლივობა" + +msgid "Email address" +msgstr "ელ. ფოსტის მისამართი" + +msgid "File path" +msgstr "გზა ფაილისაკენ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "რიცხვი მცოცავი წერტილით" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "მთელი" + +msgid "Big (8 byte) integer" +msgstr "დიდი მთელი (8-ბაიტიანი)" + +msgid "IPv4 address" +msgstr "IPv4 მისამართი" + +msgid "IP address" +msgstr "IP-მისამართი" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "ლოგიკური (True, False ან None)" + +msgid "Positive integer" +msgstr "დადებითი მთელი რიცხვი" + +msgid "Positive small integer" +msgstr "დადებითი პატარა მთელი რიცხვი" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "სლაგი (%(max_length)s-მდე)" + +msgid "Small integer" +msgstr "პატარა მთელი რიცხვი" + +msgid "Text" +msgstr "ტექსტი" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "დრო" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "დაუმუშავებელი ორობითი მონაცემები" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "უნივერსალური უნიკალური იდენტიფიკატორი." + +msgid "File" +msgstr "ფაილი" + +msgid "Image" +msgstr "გამოსახულება" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "გარე გასაღები (ტიპი განისაზღვრება დაკავშირებული ველის ტიპით)" + +msgid "One-to-one relationship" +msgstr "კავშირი ერთი-ერთტან" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "კავშირი მრავალი-მრავალთან" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ეს ველი აუცილებელია." + +msgid "Enter a whole number." +msgstr "შეიყვანეთ მთელი რიცხვი" + +msgid "Enter a valid date." +msgstr "შეიყვანეთ სწორი თარიღი." + +msgid "Enter a valid time." +msgstr "შეიყვანეთ სწორი დრო." + +msgid "Enter a valid date/time." +msgstr "შეიყვანეთ სწორი თარიღი და დრო." + +msgid "Enter a valid duration." +msgstr "შეიყვანეთ სწორი დროის პერიოდი." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ფაილი არ იყო გამოგზავნილი. შეამოწმეთ კოდირების ტიპი მოცემული ფორმისათვის." + +msgid "No file was submitted." +msgstr "ფაილი არ იყო გამოგზავნილი." + +msgid "The submitted file is empty." +msgstr "გამოგზავნილი ფაილი ცარიელია." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "ან გამოგზავნეთ ფაილი, ან მონიშნეთ \"წაშლის\" დროშა." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"ატვირთეთ დასაშვები გამოსახულება. თქვენს მიერ გამოგზავნილი ფაილი ან არ არის " +"გამოსახულება, ან დაზიანებულია." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "აირჩიეთ დასაშვები მნიშვნელობა. %(value)s დასაშვები არ არის." + +msgid "Enter a list of values." +msgstr "შეიყვანეთ მნიშვნელობების სია." + +msgid "Enter a complete value." +msgstr "შეიყვანეთ სრული მნიშვნელობა." + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(დამალული ველი %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "დალაგება" + +msgid "Delete" +msgstr "წავშალოთ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "გთხოვთ, შეასწოროთ დუბლირებული მონაცემები %(field)s-თვის." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობა %(field)s ველისთვის, რომელიც უნდა " +"იყოს უნიკალური." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობა %(field_name)s ველისთვის, რომელიც " +"უნდა იყოს უნიკალური %(lookup)s-ზე, %(date_field)s-თვის." + +msgid "Please correct the duplicate values below." +msgstr "გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობები." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "აირჩიეთ დასაშვები მნიშვნელობა. ეს არჩევანი დასაშვები არ არის." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "წაშლა" + +msgid "Currently" +msgstr "ამჟამად" + +msgid "Change" +msgstr "შეცვლა" + +msgid "Unknown" +msgstr "გაურკვეველი" + +msgid "Yes" +msgstr "კი" + +msgid "No" +msgstr "არა" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "კი,არა,შესაძლოა" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ბაიტი" +msgstr[1] "%(size)d ბაიტი" + +#, python-format +msgid "%s KB" +msgstr "%s კბ" + +#, python-format +msgid "%s MB" +msgstr "%s მბ" + +#, python-format +msgid "%s GB" +msgstr "%s გბ" + +#, python-format +msgid "%s TB" +msgstr "%s ტბ" + +#, python-format +msgid "%s PB" +msgstr "%s პბ" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "შუაღამე" + +msgid "noon" +msgstr "შუადღე" + +msgid "Monday" +msgstr "ორშაბათი" + +msgid "Tuesday" +msgstr "სამშაბათი" + +msgid "Wednesday" +msgstr "ოთხშაბათი" + +msgid "Thursday" +msgstr "ხუთშაბათი" + +msgid "Friday" +msgstr "პარასკევი" + +msgid "Saturday" +msgstr "შაბათი" + +msgid "Sunday" +msgstr "კვირა" + +msgid "Mon" +msgstr "ორშ" + +msgid "Tue" +msgstr "სამ" + +msgid "Wed" +msgstr "ოთხ" + +msgid "Thu" +msgstr "ხუთ" + +msgid "Fri" +msgstr "პარ" + +msgid "Sat" +msgstr "შაბ" + +msgid "Sun" +msgstr "კვრ" + +msgid "January" +msgstr "იანვარი" + +msgid "February" +msgstr "თებერვალი" + +msgid "March" +msgstr "მარტი" + +msgid "April" +msgstr "აპრილი" + +msgid "May" +msgstr "მაისი" + +msgid "June" +msgstr "ივნისი" + +msgid "July" +msgstr "ივლისი" + +msgid "August" +msgstr "აგვისტო" + +msgid "September" +msgstr "სექტემბერი" + +msgid "October" +msgstr "ოქტომბერი" + +msgid "November" +msgstr "ნოემბერი" + +msgid "December" +msgstr "დეკემბერი" + +msgid "jan" +msgstr "იან" + +msgid "feb" +msgstr "თებ" + +msgid "mar" +msgstr "მარ" + +msgid "apr" +msgstr "აპრ" + +msgid "may" +msgstr "მაი" + +msgid "jun" +msgstr "ივნ" + +msgid "jul" +msgstr "ივლ" + +msgid "aug" +msgstr "აგვ" + +msgid "sep" +msgstr "სექ" + +msgid "oct" +msgstr "ოქტ" + +msgid "nov" +msgstr "ნოე" + +msgid "dec" +msgstr "დეკ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "იან." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "თებ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "მარ." + +msgctxt "abbrev. month" +msgid "April" +msgstr "აპრ." + +msgctxt "abbrev. month" +msgid "May" +msgstr "მაი" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ივნ." + +msgctxt "abbrev. month" +msgid "July" +msgstr "ივლ." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "აგვ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "სექტ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ოქტ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "ნოემ." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "დეკ." + +msgctxt "alt. month" +msgid "January" +msgstr "იანვარი" + +msgctxt "alt. month" +msgid "February" +msgstr "თებერვალი" + +msgctxt "alt. month" +msgid "March" +msgstr "მარტი" + +msgctxt "alt. month" +msgid "April" +msgstr "აპრილი" + +msgctxt "alt. month" +msgid "May" +msgstr "მაისი" + +msgctxt "alt. month" +msgid "June" +msgstr "ივნისი" + +msgctxt "alt. month" +msgid "July" +msgstr "ივლისი" + +msgctxt "alt. month" +msgid "August" +msgstr "აგვისტო" + +msgctxt "alt. month" +msgid "September" +msgstr "სექტემბერი" + +msgctxt "alt. month" +msgid "October" +msgstr "ოქტომბერი" + +msgctxt "alt. month" +msgid "November" +msgstr "ნოემბერი" + +msgctxt "alt. month" +msgid "December" +msgstr "დეკემბერი" + +msgid "This is not a valid IPv6 address." +msgstr "ეს არ არის სწორი IPv6 მისამართი." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ან" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d წელი" +msgstr[1] "%d წელი" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d თვე" +msgstr[1] "%d თვე" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d კვირა" +msgstr[1] "%d კვირა" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d დღე" +msgstr[1] "%d დღე" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d საათი" +msgstr[1] "%d საათი" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d წუთი" +msgstr[1] "%d წუთი" + +msgid "0 minutes" +msgstr "0 წუთი" + +msgid "Forbidden" +msgstr "აკრძალული" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "მეტი ინფორმაცია მისაწვდომია DEBUG=True-ს მეშვეობით." + +msgid "No year specified" +msgstr "არ არის მითითებული წელი" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "არ არის მითითებული თვე" + +msgid "No day specified" +msgstr "არ არის მითითებული დღე" + +msgid "No week specified" +msgstr "არ არის მითითებული კვირა" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s არ არსებობს" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"მომავალი %(verbose_name_plural)s არ არსებობს იმიტომ, რომ %(class_name)s." +"allow_future არის False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "არ მოიძებნა არცერთი მოთხოვნის თანმხვედრი %(verbose_name)s" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-ის იდექსი" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ka/__init__.py b/venv/Lib/site-packages/django/conf/locale/ka/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ka/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ka/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dbfba65e272154bff0cd18f2000353483c59f60 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lcA|cKd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04VD;&Hw-a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ka/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ka/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7256b5c7cac9499e43a3eb7f92d606a27313fe73 GIT binary patch literal 932 zcmZXS%Wj)M6hOg-7{B5=YP;x)4GT*#?5(IO4cJ%>VDV7J2o+%lyEw)~431x01em#P1pi0*fxpYWnN!ivkP{3%{n># za}cq9-YQDAsHoji6|MID+m*%Fs1VQSQQW*0PpB;JDHivaDvPgC zA)e8rcxsRDSZq0=vbd*DB>zIP&sF?&wO$)ECDD?-p>C+61)A1aJrM%;f)O4o{Y88Zz84f)py|~ydAhU3RC17 zYlM7PN`iG9t}^6~qD)y&-C>lXtUpPUMHpo6W4L;B@1m)TqAct`_`$tD50MKO{%W2G zL9&_&%OvoZp>XdDvm}lE4Dk<}C*~$j;CdN;-u}|)6Alzbk>!V>nHJThNQV3m-Ky-! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ka/formats.py b/venv/Lib/site-packages/django/conf/locale/ka/formats.py new file mode 100644 index 000000000..661b71e2c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ka/formats.py @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "l, j F, Y" +TIME_FORMAT = "h:i a" +DATETIME_FORMAT = "j F, Y h:i a" +YEAR_MONTH_FORMAT = "F, Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j.M.Y" +SHORT_DATETIME_FORMAT = "j.M.Y H:i" +FIRST_DAY_OF_WEEK = 1 # (Monday) + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%m/%d/%Y", # '10/25/2006' + "%m/%d/%y", # '10/25/06' + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + # "%d %b %Y", # '25 Oct 2006' + # "%d %b, %Y", # '25 Oct, 2006' + # "%d %b. %Y", # '25 Oct. 2006' + # "%d %B %Y", # '25 October 2006' + # "%d %B, %Y", # '25 October, 2006' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' + "%m/%d/%Y %H:%M:%S", # '10/25/2006 14:30:59' + "%m/%d/%Y %H:%M:%S.%f", # '10/25/2006 14:30:59.000200' + "%m/%d/%Y %H:%M", # '10/25/2006 14:30' + "%m/%d/%y %H:%M:%S", # '10/25/06 14:30:59' + "%m/%d/%y %H:%M:%S.%f", # '10/25/06 14:30:59.000200' + "%m/%d/%y %H:%M", # '10/25/06 14:30' +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = " " +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..151ed67e134d2b42ea247eb5ea66aded9644b30a GIT binary patch literal 7139 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..b0f6fa288 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,1211 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Tafrikanst" + +msgid "Arabic" +msgstr "Taɛṛabt" + +msgid "Asturian" +msgstr "Tasturyant" + +msgid "Azerbaijani" +msgstr "Tazeṛbayǧant" + +msgid "Bulgarian" +msgstr "Tabulgarit" + +msgid "Belarusian" +msgstr "Tabilurusit" + +msgid "Bengali" +msgstr "Tabelgalit" + +msgid "Breton" +msgstr "Tabrutunt" + +msgid "Bosnian" +msgstr "Tabusnit" + +msgid "Catalan" +msgstr "Takaṭalant" + +msgid "Czech" +msgstr "Tačikit" + +msgid "Welsh" +msgstr "Takusit" + +msgid "Danish" +msgstr "Tadanit" + +msgid "German" +msgstr "Talmanit" + +msgid "Lower Sorbian" +msgstr "Tasiṛbit n wadda" + +msgid "Greek" +msgstr "Tagrigit" + +msgid "English" +msgstr "Taglizit" + +msgid "Australian English" +msgstr "Taglizit n Ustralya" + +msgid "British English" +msgstr "Taglizit (UK)" + +msgid "Esperanto" +msgstr "Taspirantit" + +msgid "Spanish" +msgstr "Taspanit" + +msgid "Argentinian Spanish" +msgstr "Taspanit n Arjuntin" + +msgid "Colombian Spanish" +msgstr "Taspanit n Kulumbya" + +msgid "Mexican Spanish" +msgstr "Taspanit n Miksik" + +msgid "Nicaraguan Spanish" +msgstr "Taspanit n Nikaragwa" + +msgid "Venezuelan Spanish" +msgstr "Taspanit n Vinizwila" + +msgid "Estonian" +msgstr "Tastunit" + +msgid "Basque" +msgstr "Tabaskit" + +msgid "Persian" +msgstr "Tafarsit" + +msgid "Finnish" +msgstr "Tafinit" + +msgid "French" +msgstr "Tafṛansist" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "Tahendit" + +msgid "Croatian" +msgstr "Takarwasit" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Tahungarit" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Tandunizit" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Taslandit" + +msgid "Italian" +msgstr "Taṭelyanit" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "Tajyuṛjit" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Takazaxt" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "Takannadat" + +msgid "Korean" +msgstr "Takurit" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Talitwanit" + +msgid "Latvian" +msgstr "Talitunit" + +msgid "Macedonian" +msgstr "Tamasidunit" + +msgid "Malayalam" +msgstr "Tamayalamt" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Tabirmanit" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Tanipalit" + +msgid "Dutch" +msgstr "Tahulandit" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Tabenjabit" + +msgid "Polish" +msgstr "Tapulandit" + +msgid "Portuguese" +msgstr "Tapurtugit" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "Tarumanit" + +msgid "Russian" +msgstr "Tarusit" + +msgid "Slovak" +msgstr "Tasluvakt" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "Talbanit" + +msgid "Serbian" +msgstr "Tasiṛbit" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "Taswidit" + +msgid "Swahili" +msgstr "Taswahilit" + +msgid "Tamil" +msgstr "Taṭamult" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "Taṭurkit" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Messages" +msgstr "Iznan" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Sekcem azal ameɣtu." + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Sekcem tansa imayl tameɣtut." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Sekcem tansa IPv4 tameɣtut." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Sekcem amḍan." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "akked" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Azemz (s wakud)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Tanzagt" + +msgid "Email address" +msgstr "Tansa email" + +msgid "File path" +msgstr "Abrid n ufaylu" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Ummid" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "Tansa IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Aḍris" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Akud" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Afaylu" + +msgid "Image" +msgstr "Tugna" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "" + +msgid "Enter a whole number." +msgstr "Sekcem amḍan ummid." + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "Afaylu ur yettwazen ara." + +msgid "The submitted file is empty." +msgstr "" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "Sekcem azal ummid." + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Amizwer" + +msgid "Delete" +msgstr "KKES" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Sfeḍ" + +msgid "Currently" +msgstr "Tura" + +msgid "Change" +msgstr "Beddel" + +msgid "Unknown" +msgstr "Arussin" + +msgid "Yes" +msgstr "Ih" + +msgid "No" +msgstr "Uhu" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "%s KAṬ" + +#, python-format +msgid "%s MB" +msgstr "%s MAṬ" + +#, python-format +msgid "%s GB" +msgstr "%s GAṬ" + +#, python-format +msgid "%s TB" +msgstr "%s TAṬ" + +#, python-format +msgid "%s PB" +msgstr "%s PAṬ" + +msgid "p.m." +msgstr "m.d." + +msgid "a.m." +msgstr "f.t." + +msgid "PM" +msgstr "MD" + +msgid "AM" +msgstr "FT" + +msgid "midnight" +msgstr "ttnaṣfa n yiḍ" + +msgid "noon" +msgstr "ttnaṣfa n uzal" + +msgid "Monday" +msgstr "Arim" + +msgid "Tuesday" +msgstr "Aram" + +msgid "Wednesday" +msgstr "Ahad" + +msgid "Thursday" +msgstr "Amhad" + +msgid "Friday" +msgstr "Sem" + +msgid "Saturday" +msgstr "Sed" + +msgid "Sunday" +msgstr "Acer" + +msgid "Mon" +msgstr "Ari" + +msgid "Tue" +msgstr "Ara" + +msgid "Wed" +msgstr "Aha" + +msgid "Thu" +msgstr "Amh" + +msgid "Fri" +msgstr "Sem" + +msgid "Sat" +msgstr "Sed" + +msgid "Sun" +msgstr "Ace" + +msgid "January" +msgstr "Yennayer" + +msgid "February" +msgstr "Fuṛaṛ" + +msgid "March" +msgstr "Meɣres" + +msgid "April" +msgstr "Yebrir" + +msgid "May" +msgstr "Mayyu" + +msgid "June" +msgstr "Yunyu" + +msgid "July" +msgstr "Yulyu" + +msgid "August" +msgstr "Ɣuct" + +msgid "September" +msgstr "Ctamber" + +msgid "October" +msgstr "Tuber" + +msgid "November" +msgstr "Wamber" + +msgid "December" +msgstr "Dujamber" + +msgid "jan" +msgstr "yen" + +msgid "feb" +msgstr "fuṛ" + +msgid "mar" +msgstr "meɣ" + +msgid "apr" +msgstr "yeb" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "yun" + +msgid "jul" +msgstr "yul" + +msgid "aug" +msgstr "ɣuc" + +msgid "sep" +msgstr "cte" + +msgid "oct" +msgstr "tub" + +msgid "nov" +msgstr "wam" + +msgid "dec" +msgstr "duj" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Yen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fuṛ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Meɣres" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Yebrir" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayyu" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Yunyu" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Yulyu" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ɣuc." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Tub." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Wam." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Duj." + +msgctxt "alt. month" +msgid "January" +msgstr "Yennayer" + +msgctxt "alt. month" +msgid "February" +msgstr "Fuṛaṛ" + +msgctxt "alt. month" +msgid "March" +msgstr "Meɣres" + +msgctxt "alt. month" +msgid "April" +msgstr "Yebrir" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayyu" + +msgctxt "alt. month" +msgid "June" +msgstr "Yunyu" + +msgctxt "alt. month" +msgid "July" +msgstr "Yulyu" + +msgctxt "alt. month" +msgid "August" +msgstr "Ɣuct" + +msgctxt "alt. month" +msgid "September" +msgstr "Ctamber" + +msgctxt "alt. month" +msgid "October" +msgstr "Tuber" + +msgctxt "alt. month" +msgid "November" +msgstr "Wamber" + +msgctxt "alt. month" +msgid "December" +msgstr "Dujamber" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "neɣ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "0 n tisdatin" + +msgid "Forbidden" +msgstr "Yegdel" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "Bdu s Django" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..38300b20556650b790c71c214193519f0a85b772 GIT binary patch literal 13148 zcmbuD3zS_|dB-<`AW;#~pru$3t>6sKOcE3c1JULQ6Eew=OrRh&o|$_xb2ImzGdcI% zOeR&y0}%xwfiNZ{Jn~S9Es%svG9fcTt%_RIb0<}+i(;3xwzaiBXjfg@#p>_B&%X0Y zMnijNzWY1-{q1jm``i267cV&LLBl6SE=G2qZOqg&cz(Tdjp=@)F*D(6sPfOlSHtHV zzv+0w@%xTHgs-CBKRNyjd=2S;bLIaD8OrB?8;w*QmTI*JReSl z((^LDRKF3P2j@c7TME_hEl{Rg0i|~lUJJ|ceefW>2L2Mh1=ceu={q0(AzTho!K{W< zF?T@exy_{yK>p2F_?ilT055~TfYR$NWQrbq8?1$z*L6_(+z9zMxA4^fBPjhJfoHwE;N-AfQxH)pe$;#(arhnnZL zQ1+M)scM>`^b4TI>vH8GTtIpaoDPRz1pfnG4nN4`=D<%t>Hj>G9Zo>?|02|QKXK`w zL(TWUUH)(3e9~uKgwMc*Q1ibZs{KwV|K1BVuY*wIdlzs{F}La(S=z7WuJ9W{oW5XpFXJek3#L6y{>!!YP>3$CsezKppAcyLs0F$2^FtigzE2S zQ1#Csm@1yU8ET%jj`fZ+9Ite|+HscSY{&VIO^(e_>vAKMeQtI6D;(RQ{JO)HuX6bj zd>#2EcoXN)dU!qQ@4elaKY^Z?t>-+)MUJhGw>jpZ`Y%9@A3?2W;&?lhexHQu_W`K# zBT)AE5>)y3p!E3%_)hpUcnO@!m-hcvP~|zO^3{-kv)$z%gR=YAT>5)1{bP6)`7c3@ z`>sFE*6F=a`{6pM{KXKLG`BdGq1J5+lppMcs(%=2oFS<7e%_`39u`UeJ6s2EWwLAG zci=R*_#N54`Y2R9*$yv--+;C77jP!Lh|GGp3~HVmpvw2bW$*-)zVEy&;}uZlv!L|s zfM>&ADF0j!=fTZTdVdF=1%C`>_kVT#6)cnfEmZ%j8C>@MFjV>zQ1!RE^uvyiL-qSK zL>Gc~Zd%dnEtN%8r{_CLnzuIx0%U|Mn8&v;!SH9M9lPka1rFTHp z`z+Kr{ZQ-qRj6@(1U1gjAueuy17(McFrMna9je}R$d)y;;Mwp4kgBE)UJ37Z^8!@=FT*MDweQN##|xpxpAMzZY^d@DFb8jhOW|So zd3bIey1_%R2mT7G{wkbC{gk2Xa3@s$gYY%*F{u9cx%?-g{OKr^zrMa9YkwD1{q0ct z?}oUX`2v*wKY==TUxMm?3eNp*I2Ee@CMZ1?L-n%)s$HjJ8LHhzDEod2DlTk=vgZKg z-~5!X_rQy$XZ

    bDiDeE_w--B9D+1J8$Bpvrf{GvO0Z;~#+M!{hKC_-!ctZe!5% zU;x!m0#&aUs@*4D{->ez-3itI9(WFX(($n4amTMh)%zAyKi_x!iOYWps{PB3XJ3(} z&x2}rq2nd+0@8IZ{eGza7P|D!F5TuBx%>~i^v7L#E7ZImg_`$%sQDaq{DR|ij^A?p zj^hiC|LFKr$6rGA`)kK@aR&8!k>e#$`qsGgm5$d!u2N<$JOh3n(R!~(^x1`QRGY_< z0wSB}!!c#=dp5z>K1BDFkGhOHN6qniM835QxgC+;;_mib*4gtUawD=F@esDMIfkH; z`Ag&w@(o0vS7k7(;S-3DC|>HL`%?9@nTIaq)5s>|TgV3y?Xe*wK`uc8grj2Qa}!T< zk*8hG&F~G#7m#gxEn&jT!9s zd-=WgH^9&C?$QO_{WHDkc zttm#ips*tJi$QJ4>&YjbUecK_d6(9#%m;@9=77T2*Sje3%3s zL2TwkQ6Zq4n)ysBh`rXh9C%UeE$|Dap!Sr-by=ZmEsjE4sbqDW6Z`A(1u4}M#R>WZ zB}R|)3Ho{S!;XUVoKr4z__3xm*H8R{*y)EIftiaQv6&kci++76==Nhj3363EOJ;5y z`H5{-j$>wD=rwcK1?`lae znFU7El;?9^Q_Gt7R826kZ28hf6SHzmThjaKaG#49JL7KMdgFPHDg zCnayxKiYb|cDamZR7xW2hYNzXxa`NhW`Q=RCY|(l2aO}URjJw%rHs+-C!IWnb`LEm z$j8DCuRCIYRGni%6bJc^(7Pe%^=j1C%i%0>F(2Zej2{ODrl0d{D5y0H@J_sFL7bQ5 zeAI~ZC3)_Gav~SHv}O%^G%5u)o~-CDlw)7PBa9NyUxV-YZ79|jwEN|fYPT2sQpv@h z2ES0ivsPw3;emFaHkj*JwRVkhT@b|`*+X1ZIu3#^b3GObdd&6tFqb#imx%{<2R5}- z*Vr_*GYd-FO;ea-S6hXfT##sD0-dIb?W&#^`k}S%LZ8s1ExxeKW?Wbf19O8PhJMb6 z>-?@xb3^9_^iN^HEsp z%y&}~W7uXa+Dw3L9~1nVBRY#h85?v&R?o#$iTw`78VQn%BePihYwQAG`IS*Q%y~th z-LKUr5PAeo9O$IVqpLNtQmVwjUa6ayf)C`Bu~NR(yFX@hx%-MqpEBS-Wp#+DuII%`X{W?7lu*sU@_Pmq)CTKytdqt>9njRUMr4EpE!3PyKd zwkFslD0U~k4HWWhm)s+cDDvW>ZA8GXNy@@yey*lMqE@MbmsT_Anc@9&vyeszYWzH-QyTYg^G|Rg=iE<;W%T=X=#np_g zZ}moHkF7@)45}#OJkXvXp=Yb>M&aAtT4rsyNZCHj@;FyEH|2vwcUhLTImGN2G zAuus-Vnf2*#O?`r6SI~D-O4K@6Q(#OBfC|PslxO!Pal&va^V=0S3M=iX4wgjcAm{{ zH0`D~HiLPMCP!lTn7nEjACsk7ITgd4@w;Q=mpe=@Xg4c^Hp82NSye6|p(%3VF0$;! zd@js)bS5T@I7q{2jfvV56UC-mUchC`^aiE6Fsh?+TVPt^XcfVyzA0CKlMaU{Z1i&U z+YwD!8gz5@uWv4O^)qJFPruTe zKE3hXGv76x&y+=eDXC}cge9(2QQYV)WpBrk*Bo(03QClRoaY@ueQV$s8@=qB;nj2| zNq6J4X+1qX4T&1(R|abvxE4;!w5o#bZCg+4>Y7$NrManj{;2*l8m3Q~%L&VyMSZKi zEha>gY25{O<~77ZKQ0BytmUl>>SvDD(^xBmxPHDnxEsBhZTVzG%SNxOYf6i~-qmx7 zES4I*FuU!QW?gZOmp#s^2``y7qxPC9X2M(M#COZ|aC$sFmhKbM*78k+7-`%Jo- zvDMv>Nq3#tUfERXtE?xtvYxyH*~8OPtFkd2u=*UU+&#R*O9v_&(AT!x4F=Koh&iz> zJ)#aW1(}&G--7xZ(q~M%MIEJ2lY7hz@24tr)T?WCKDCh@eumoheCFmN0`|$Wu$Iy&r)YS zYHV`4+Ij<6fDzI|+5GnpKY;qjDtBoTnwl1osmXc|0aa#IRknNhsq_ds)1i#c#IrJz z!%u3qXu+K9N}t$ApG=>woG*;GM|#K&L7U?mh9$C^45~y=CjA^^eaxg=HF`Er9;J|1 z!<2Be%H5=_v(?&a6U!uagDrl+#1*Wg86+ zp(x8$Rddu}!w1r1UOISUI~@*H`iA##$r<;4>@oN=vI2edrB7#0u~C^?eHMr|WFGNq z*gEni?C41eI-2mFo^CmLH0!e3VAu`QPaK>zJC+Uap~0xrVU2!tJx$#j@QhbHG!yK@ zuloL<1Mjq^JtR|kc28j;Cat|?ttyL>l^GF5cUe1}vS>GPfq;h8v-B+~% z*PwbW->GYD%>rFzgO@&oz3oDue$8p4&Ws{=|GtK&Q@g5m=9ZJ2YPa0X#(``TFvUs6 z-z`V+vY>|12vdAdve_$lvRm&MsWqwDo?w5nCly*Y+f&0v8MdKzA3GIeu*Q{*jLIfC z>GzRzFDrOdo6nv+iWqwp+fDiy$`ZAzp?BO5B#bzaK0E$L5l^v5;Y7wD!9M0}pk@~O zFbXkbFB4M9oh-l+g_J?QcpgmmXN3dG&f@3(%3YcPn{n)${OHR$v(^4aaiXcV3854> z#vVM?N$-Bn5(JO?T|cn6Uss4((sZD5C*ccQpTnDl-M3D&mcKEn?$c5$LlM+34zUE?9Guv#(YVSDhXYugy@_p=_HbK~wP z?2h3bX1rh3me?fJJ|G9C8w_Ok#7PxT(*ZH0qL}S;cn@nJ!{Fvw*Cu_ia+f`+w4`{3 zSGhy5{>-A`x7x0@NxxzyA^DZI@Yu;(KL)jXk#p)9Y;?%_$)=Hzkm-2RLCS!er4}|h zmHM00XH_(5d7sQUY3ajOv4gDh)AFe58V^ZfNc}tjjJEax=RfbQ?RW zd#d98CRtT+91H4J{yPS->&;D_nP_*&S*@34*Pc_4JC;!f!Q+;uThQ1a zz{Z(?{k6x-E*Un!^iz4{w=+T!mk;fQ)0n+os4)}7_Sx~{Zg%$iVQ&B@8ySCdM^Scu z9v?tE(vy`oGZJ? zJ+7l9>p4rvE4Yw6^t-FnfRK$*~(wXjw^wc+Dm9pg?-k9Tj8jVf;f{ z;`=N2ND-Vuw-pBF`k`Mw*5gw0LhCB`Q>d5O0lC1o6WeizhEz5k^BalvBC_mDGPHMb z?H+AU(v#i9CbeB$l!|D*`Y=x&&4<2s!f z77p7t%zjhZpkIy*+E|lvJ69a#dYL|Jvan_BkwT{33r5D*S}3j#(oWZ=RKZd=!z{xE tJbSd*PIN`!HmSLfITf@p!w+FC1sGOx;KcSidcrDo=^)(>;%CGJ^S@OS?&<&l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..2858be063 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1223 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baurzhan Muftakhidinov , 2015 +# Zharzhan Kulmyrza , 2011 +# Leo Trubach , 2017 +# Nurlan Rakhimzhanov , 2011 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Әзірбайжан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Босния" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Валлий" + +msgid "Danish" +msgstr "Дания" + +msgid "German" +msgstr "Неміс" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Ағылшын" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британдық ағылшын" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "Испан" + +msgid "Argentinian Spanish" +msgstr "Аргентиналық испан" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикалық испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуа испан" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Эстон" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Парсы" + +msgid "Finnish" +msgstr "Фин" + +msgid "French" +msgstr "Француз" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирландия" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галиц" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Кроат" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгрия" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Индонезия" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исладия" + +msgid "Italian" +msgstr "Итальян" + +msgid "Japanese" +msgstr "Жапон" + +msgid "Georgian" +msgstr "Грузин" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Қазақша" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Канада" + +msgid "Korean" +msgstr "Корей" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латвия" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монғол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвегиялық нюнор" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Пенджаб" + +msgid "Polish" +msgstr "Поляк" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилиялық португал" + +msgid "Romanian" +msgstr "Роман" + +msgid "Russian" +msgstr "Орыс" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словениялық" + +msgid "Albanian" +msgstr "Албан" + +msgid "Serbian" +msgstr "Серб" + +msgid "Serbian Latin" +msgstr "Сербиялық латын" + +msgid "Swedish" +msgstr "Швед" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Тамиль" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тай" + +msgid "Turkish" +msgstr "Түрік" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Украин" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Жеңілдетілген қытай" + +msgid "Traditional Chinese" +msgstr "Дәстүрлі қытай" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Тура мәнін енгізіңіз." + +msgid "Enter a valid URL." +msgstr "Тура URL-ді енгізіңіз." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Тура IPv4 адресті енгізіңіз." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Тек үтірлермен бөлінген цифрлерді енгізіңіз." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Бұл мәннің %(limit_value)s екендігін тексеріңіз (қазір ол %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Бұл мәннің мынадан %(limit_value)s кіші немесе тең екендігін тексеріңіз." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Бұл мәннің мынадан %(limit_value)s үлкен немесе тең екендігін тексеріңіз." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Сан енгізіңіз." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "және" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Бұл жолақ null болмау керек." + +msgid "This field cannot be blank." +msgstr "Бұл жолақ бос болмау керек." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s %(field_label)s жолақпен бұрыннан бар." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Жолақтын түрі: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True немесе False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Жол (%(max_length)s символға дейін)" + +msgid "Comma-separated integers" +msgstr "Үтірмен бөлінген бүтін сандар" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (уақытсыз)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата (уақытпен)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Ондық сан" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Email адрес" + +msgid "File path" +msgstr "Файл жолы" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Реал сан" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Бүтін сан" + +msgid "Big (8 byte) integer" +msgstr "Ұзын (8 байт) бүтін сан" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP мекенжайы" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Булеан (True, False немесе None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Мәтін" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Уақыт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (тип related field арқылы анықталады)" + +msgid "One-to-one relationship" +msgstr "One-to-one қатынас" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Many-to-many қатынас" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Бұл өрісті толтыру міндетті." + +msgid "Enter a whole number." +msgstr "Толық санды енгізіңіз." + +msgid "Enter a valid date." +msgstr "Дұрыс күнді енгізіңіз." + +msgid "Enter a valid time." +msgstr "Дұрыс уақытты енгізіңіз." + +msgid "Enter a valid date/time." +msgstr "Дұрыс күнді/уақытты енгізіңіз." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ешқандай файл жіберілмеді. Форманың кодтау түрін тексеріңіз." + +msgid "No file was submitted." +msgstr "Ешқандай файл жіберілмеді." + +msgid "The submitted file is empty." +msgstr "Бос файл жіберілді." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Файлды жіберіңіз немесе тазалауды белгіленіз, екеуін бірге емес." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Дұрыс сүретті жүктеңіз. Сіз жүктеген файл - сүрет емес немесе бұзылған сүрет." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Дұрыс тандау жасаңыз. %(value)s дұрыс тандау емес." + +msgid "Enter a list of values." +msgstr "Мәндер тізімін енгізіңіз." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Сұрыптау" + +msgid "Delete" +msgstr "Жою" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s жолақтағы қайталанған мәнді түзетіңіз." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "%(field)s жолақтағы мәнді түзетіңіз, ол бірегей болу керек." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s жолақтағы мәнді түзетіңіз. Ол %(date_field)s жолақтың ішінде " +"%(lookup)s үшін бірегей болу керек." + +msgid "Please correct the duplicate values below." +msgstr "Қайталанатын мәндерді түзетіңіз." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Дұрыс нұсқаны таңдаңыз. Бұл нұсқа дұрыс таңдаулардың арасында жоқ." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Тазалау" + +msgid "Currently" +msgstr "Ағымдағы" + +msgid "Change" +msgstr "Түзету" + +msgid "Unknown" +msgstr "Белгісіз" + +msgid "Yes" +msgstr "Иә" + +msgid "No" +msgstr "Жоқ" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "иә,жоқ,мүмкін" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "Т.Қ." + +msgid "a.m." +msgstr "Т.Ж." + +msgid "PM" +msgstr "ТҚ" + +msgid "AM" +msgstr "ТЖ" + +msgid "midnight" +msgstr "түнжарым" + +msgid "noon" +msgstr "түсқайта" + +msgid "Monday" +msgstr "Дүйсенбі" + +msgid "Tuesday" +msgstr "Сейсенбі" + +msgid "Wednesday" +msgstr "Сәрсенбі" + +msgid "Thursday" +msgstr "Бейсенбі" + +msgid "Friday" +msgstr "Жума" + +msgid "Saturday" +msgstr "Сенбі" + +msgid "Sunday" +msgstr "Жексенбі" + +msgid "Mon" +msgstr "Дб" + +msgid "Tue" +msgstr "Сб" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Бс" + +msgid "Fri" +msgstr "Жм" + +msgid "Sat" +msgstr "Сн" + +msgid "Sun" +msgstr "Жк" + +msgid "January" +msgstr "Қаңтар" + +msgid "February" +msgstr "Ақпан" + +msgid "March" +msgstr "Наурыз" + +msgid "April" +msgstr "Сәуір" + +msgid "May" +msgstr "Мамыр" + +msgid "June" +msgstr "Маусым" + +msgid "July" +msgstr "Шілде" + +msgid "August" +msgstr "Тамыз" + +msgid "September" +msgstr "Қыркүйек" + +msgid "October" +msgstr "Қазан" + +msgid "November" +msgstr "Қараша" + +msgid "December" +msgstr "Желтоқсан" + +msgid "jan" +msgstr "қан" + +msgid "feb" +msgstr "ақп" + +msgid "mar" +msgstr "нау" + +msgid "apr" +msgstr "сәу" + +msgid "may" +msgstr "мам" + +msgid "jun" +msgstr "мау" + +msgid "jul" +msgstr "шіл" + +msgid "aug" +msgstr "там" + +msgid "sep" +msgstr "қыр" + +msgid "oct" +msgstr "қаз" + +msgid "nov" +msgstr "қар" + +msgid "dec" +msgstr "жел" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Қаң." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Ақп." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Наурыз" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Сәуір" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Мамыр" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Маусым" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Шілде" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Там." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Қыр." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Қаз." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Қар." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Жел." + +msgctxt "alt. month" +msgid "January" +msgstr "Қаңтар" + +msgctxt "alt. month" +msgid "February" +msgstr "Ақпан" + +msgctxt "alt. month" +msgid "March" +msgstr "Наурыз" + +msgctxt "alt. month" +msgid "April" +msgstr "Сәуір" + +msgctxt "alt. month" +msgid "May" +msgstr "Мамыр" + +msgctxt "alt. month" +msgid "June" +msgstr "Маусым" + +msgctxt "alt. month" +msgid "July" +msgstr "Шілде" + +msgctxt "alt. month" +msgid "August" +msgstr "Тамыз" + +msgctxt "alt. month" +msgid "September" +msgstr "Қыркүйек" + +msgctxt "alt. month" +msgid "October" +msgstr "Қазан" + +msgctxt "alt. month" +msgid "November" +msgstr "Қараша" + +msgctxt "alt. month" +msgid "December" +msgstr "Желтоқсан" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "немесе" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Жыл таңдалмаған" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Ай таңдалмаған" + +msgid "No day specified" +msgstr "Күн таңдалмаған" + +msgid "No week specified" +msgstr "Апта таңдалмаған" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s қол жеткізгісіз" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Болашақ %(verbose_name_plural)s қол жеткізгісіз, себебі %(class_name)s." +"allow_future False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s табылған жоқ" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3de6c806d2fd44ee29deac961a4654d2526361cc GIT binary patch literal 7223 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 W8^=krlvAykkMo`rA}Y;gto{jnaGKQs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..c706129c9 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,1196 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "ភាសាអារ៉ាប់" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "ភាសាបេឡារុស្ស" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "" + +msgid "Catalan" +msgstr "" + +msgid "Czech" +msgstr "ភាសាឆេក" + +msgid "Welsh" +msgstr "ភាសាអ៊ុយក្រែន" + +msgid "Danish" +msgstr "ភាសាដាណឺម៉ាក" + +msgid "German" +msgstr "ភាសាអាល្លឺម៉ង់" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ភាសាហ្កែលិគ" + +msgid "English" +msgstr "ភាសាអង់គ្លេស" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ភាសាអេស្ប៉ាញ" + +msgid "Argentinian Spanish" +msgstr "" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Basque" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "ភាសាហ្វាំងឡង់" + +msgid "French" +msgstr "ភាសាបារាំង" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "ភាសាហ្កែលិគ" + +msgid "Hebrew" +msgstr "ភាសាហេប្រិ" + +msgid "Hindi" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ភាសាហុងគ្រី" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ភាសាអ៉ីស្លង់" + +msgid "Italian" +msgstr "ភាសាអ៊ីតាលី" + +msgid "Japanese" +msgstr "ភាសាជប៉ុន" + +msgid "Georgian" +msgstr "" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "ភាសាហ្វាំងឡង់" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "ភាសារូម៉ានី" + +msgid "Russian" +msgstr "ភាសាรัរូស្ស៉ី" + +msgid "Slovak" +msgstr "ភាសាស្លូវ៉ាគី" + +msgid "Slovenian" +msgstr "ភាសាស្លូវ៉ានី" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "ភាសាស៊ុយអែដ" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "ភាសាតាមីល" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "ភាសាទួរគី" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ភាសាអ៊ុយក្រែន" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "ភាសាចិនសាមញ្ញ" + +msgid "Traditional Chinese" +msgstr "ភាសាចិនបុរាណ" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "" + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "បំពេញតែលេខហើយផ្តាច់ចេញពីគ្នាដោយសញ្ញាក្បៀស។" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +msgid "Enter a number." +msgstr "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "និង" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "ចាំបាច់បំពេញទិន្នន័យកន្លែងនេះ។" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (អាច​ជា True រឺ False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "ចំនួនពិត(Integer) ដែលផ្តាច់ចេញពីគ្នាដោយ​ក្បៀស" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "កាល​បរិច្ឆេទ (Date) (មិនមានសរសេរម៉ោង)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "កាល​បរិច្ឆេទ (Date) (មានសរសេរម៉ោង)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ចំនួនទសភាគ (Decimal)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "ផ្លូវទៅកាន់ឯកសារ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "ចំនួនពិត(Integer)" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "លេខ IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (អាចជា True​ រឺ False រឺ None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "អត្ថបទ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "ពេលវេលា" + +msgid "URL" +msgstr "អាស័យដ្ឋានគេហទំព័រ(URL)" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ចាំបាច់បំពេញទិន្នន័យកន្លែងនេះ។" + +msgid "Enter a whole number." +msgstr "បំពេញចំនួនទាំងអស់។" + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "មិនមានឯកសារត្រូវបានជ្រើសរើស។ សូមពិនិត្យប្រភេទឯកសារម្តងទៀត។" + +msgid "No file was submitted." +msgstr "" + +msgid "The submitted file is empty." +msgstr "ពុំមានឯកសារ។​" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "រូបភាពដែលទាញយកមិនត្រឹមត្រូវ ប្រហែលជាមិនមែនជារូបភាព ឬក៏ជា រូបភាពខូច។" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "" + +msgid "Delete" +msgstr "លប់" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "" + +msgid "Change" +msgstr "ផ្លាស់ប្តូរ" + +msgid "Unknown" +msgstr "មិន​ដឹង" + +msgid "Yes" +msgstr "យល់ព្រម" + +msgid "No" +msgstr "មិនយល់ព្រម" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "យល់ព្រម មិនយល់ព្រម​ ប្រហែល" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" + +#, python-format +msgid "%s KB" +msgstr "" + +#, python-format +msgid "%s MB" +msgstr "" + +#, python-format +msgid "%s GB" +msgstr "" + +#, python-format +msgid "%s TB" +msgstr "" + +#, python-format +msgid "%s PB" +msgstr "" + +msgid "p.m." +msgstr "" + +msgid "a.m." +msgstr "" + +msgid "PM" +msgstr "" + +msgid "AM" +msgstr "" + +msgid "midnight" +msgstr "" + +msgid "noon" +msgstr "" + +msgid "Monday" +msgstr "ច័ន្ទ" + +msgid "Tuesday" +msgstr "អង្គារ" + +msgid "Wednesday" +msgstr "ពុធ" + +msgid "Thursday" +msgstr "ព្រហស្បតិ៍" + +msgid "Friday" +msgstr "សុក្រ" + +msgid "Saturday" +msgstr "សៅរ៍" + +msgid "Sunday" +msgstr "អាទិត្យ" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "January" +msgstr "មករា" + +msgid "February" +msgstr "កុម្ភៈ" + +msgid "March" +msgstr "មិនា" + +msgid "April" +msgstr "មេសា" + +msgid "May" +msgstr "ឧសភា" + +msgid "June" +msgstr "មិថុនា" + +msgid "July" +msgstr "កក្កដា" + +msgid "August" +msgstr "សីហា" + +msgid "September" +msgstr "កញ្ញា" + +msgid "October" +msgstr "តុលា" + +msgid "November" +msgstr "វិច្ឆិកា" + +msgid "December" +msgstr "ធ្នូ" + +msgid "jan" +msgstr "មករា" + +msgid "feb" +msgstr "កុម្ភះ" + +msgid "mar" +msgstr "មិនា" + +msgid "apr" +msgstr "មេសា" + +msgid "may" +msgstr "ឧសភា" + +msgid "jun" +msgstr "មិថុនា" + +msgid "jul" +msgstr "កក្កដា" + +msgid "aug" +msgstr "សីហា" + +msgid "sep" +msgstr "កញ្ញា" + +msgid "oct" +msgstr "តុលា" + +msgid "nov" +msgstr "វិច្ឆិកា" + +msgid "dec" +msgstr "ធ្នូ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +msgctxt "abbrev. month" +msgid "March" +msgstr "មិនា" + +msgctxt "abbrev. month" +msgid "April" +msgstr "មេសា" + +msgctxt "abbrev. month" +msgid "May" +msgstr "ឧសភា" + +msgctxt "abbrev. month" +msgid "June" +msgstr "មិថុនា" + +msgctxt "abbrev. month" +msgid "July" +msgstr "កក្កដា" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +msgctxt "alt. month" +msgid "January" +msgstr "មករា" + +msgctxt "alt. month" +msgid "February" +msgstr "កុម្ភៈ" + +msgctxt "alt. month" +msgid "March" +msgstr "មិនា" + +msgctxt "alt. month" +msgid "April" +msgstr "មេសា" + +msgctxt "alt. month" +msgid "May" +msgstr "ឧសភា" + +msgctxt "alt. month" +msgid "June" +msgstr "មិថុនា" + +msgctxt "alt. month" +msgid "July" +msgstr "កក្កដា" + +msgctxt "alt. month" +msgid "August" +msgstr "សីហា" + +msgctxt "alt. month" +msgid "September" +msgstr "កញ្ញា" + +msgctxt "alt. month" +msgid "October" +msgstr "តុលា" + +msgctxt "alt. month" +msgid "November" +msgstr "វិច្ឆិកា" + +msgctxt "alt. month" +msgid "December" +msgstr "ធ្នូ" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/km/__init__.py b/venv/Lib/site-packages/django/conf/locale/km/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/km/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/km/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e49dbf7cf12773d8ebd891e11c25b1dbeda417a GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lcCLPWd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04jqt+5i9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/km/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/km/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acc0bb543c20ab9707dce9e905106c68a0b79cf5 GIT binary patch literal 485 zcmd1j<>g`kf;Vw@lio2gFgylvkO3o*;{e3PDnKHIA&Mb|F^VyTDT*nDIf^-jC5k15 zHHtNbEs8CLJ&HYrBbY&xvs4DCG)v*(yvB#~n-tuDjJAjKCq0}u`Qf~659hZjL{>4o zTV<9i5>Tb108~}QoTcDa#hRty3)IF1roiIA7iKDML~*+~hPcMN`3LzrhD33P zc>2OQ{2&=*0RdlszYvdj7sp7Ldcj~1|DX_{2*L|Fh{{G!~%l48Ar%3B;Zx%nxjIjMG_s45l!5-cn%j6lc)COJ450c_ck AK>z>% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/km/formats.py b/venv/Lib/site-packages/django/conf/locale/km/formats.py new file mode 100644 index 000000000..592343747 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/km/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j ខែ F ឆ្នាំ Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j ខែ F ឆ្នាំ Y, G:i" +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +SHORT_DATETIME_FORMAT = "j M Y, G:i" +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c926f57dad06da2e027d0de75e6b98a94d39ac1c GIT binary patch literal 17515 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..f2ba2aa82 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,1232 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# karthikbgl , 2011-2012 +# Ramakrishna Yekulla , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "ಅರೇಬಿಕ್" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "ಆಜೆರ್ಬೈಜನಿ" + +msgid "Bulgarian" +msgstr "ಬಲ್ಗೇರಿಯನ್" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "ಬೆಂಗಾಲಿ" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "ಬೋಸ್ನಿಯನ್" + +msgid "Catalan" +msgstr "ಕೆಟಲಾನ್" + +msgid "Czech" +msgstr "ಝೆಕ್" + +msgid "Welsh" +msgstr "ವೆಲ್ಷ್" + +msgid "Danish" +msgstr "ಡ್ಯಾನಿಷ್" + +msgid "German" +msgstr "ಜರ್ಮನ್" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ಗ್ರೀಕ್" + +msgid "English" +msgstr "ಇಂಗ್ಲಿಷ್" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ಬ್ರಿಟೀಶ್ ಇಂಗ್ಲಿಷ್" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ಸ್ಪ್ಯಾನಿಷ್" + +msgid "Argentinian Spanish" +msgstr "ಅರ್ಜೆಂಟಿನಿಯನ್ ಸ್ಪಾನಿಷ್" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "ಮೆಕ್ಸಿಕನ್ ಸ್ಪಾನಿಷ್" + +msgid "Nicaraguan Spanish" +msgstr "nicarguan ಸ್ಪಾನಿಷ್" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "ಎಷ್ಟೋನಿಯನ್" + +msgid "Basque" +msgstr "ಬಾಸ್ಕ್‍" + +msgid "Persian" +msgstr "ಪರ್ಶಿಯನ್" + +msgid "Finnish" +msgstr "ಫಿನ್ನಿಶ್" + +msgid "French" +msgstr "ಫ್ರೆಂಚ್" + +msgid "Frisian" +msgstr "ಫ್ರಿಸಿಯನ್" + +msgid "Irish" +msgstr "ಐರಿಶ್" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "ಗೆಲಿಶಿಯನ್" + +msgid "Hebrew" +msgstr "ಹೀಬ್ರೂ" + +msgid "Hindi" +msgstr "ಹಿಂದಿ" + +msgid "Croatian" +msgstr "ಕ್ರೊಯೇಶಿಯನ್" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ಹಂಗೇರಿಯನ್" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "ಇಂಡೋನಿಶಿಯನ್" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ಐಸ್‌ಲ್ಯಾಂಡಿಕ್" + +msgid "Italian" +msgstr "ಇಟಾಲಿಯನ್" + +msgid "Japanese" +msgstr "ಜಾಪನೀಸ್" + +msgid "Georgian" +msgstr "ಜಾರ್ಜೆಯನ್ " + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "ಖಮೇರ್" + +msgid "Kannada" +msgstr "ಕನ್ನಡ" + +msgid "Korean" +msgstr "ಕೊರಿಯನ್" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "ಲಿತುವಾನಿಯನ್ " + +msgid "Latvian" +msgstr "ಲಾಟ್ವಿಯನ್" + +msgid "Macedonian" +msgstr "ಮೆಸಡೊನಿಯನ್" + +msgid "Malayalam" +msgstr "ಮಲಯಾಳಂ" + +msgid "Mongolian" +msgstr "ಮಂಗೊಲಿಯನ್" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "ಡಚ್" + +msgid "Norwegian Nynorsk" +msgstr "ನಾರ್ವೇಜಿಯನ್ ನಿನೋರ್ಕ್" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "ಪಂಜಾಬಿ" + +msgid "Polish" +msgstr "ಪೋಲಿಷ್" + +msgid "Portuguese" +msgstr "ಪೋರ್ಚುಗೀಸ್" + +msgid "Brazilian Portuguese" +msgstr "ಬ್ರಜೀಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್" + +msgid "Romanian" +msgstr "ರೋಮೇನಿಯನ್" + +msgid "Russian" +msgstr "ರಶಿಯನ್" + +msgid "Slovak" +msgstr "ಸ್ಲೋವಾಕ್" + +msgid "Slovenian" +msgstr "ಸ್ಲೋವೇನಿಯನ್" + +msgid "Albanian" +msgstr "ಅಲ್ಬೆನಿಯನ್ " + +msgid "Serbian" +msgstr "ಸರ್ಬಿಯನ್" + +msgid "Serbian Latin" +msgstr "ಸರ್ಬಿಯನ್ ಲ್ಯಾಟಿನ್" + +msgid "Swedish" +msgstr "ಸ್ವೀಡಿಷ್" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "ತಮಿಳು" + +msgid "Telugu" +msgstr "ತೆಲುಗು" + +msgid "Thai" +msgstr "ಥಾಯ್" + +msgid "Turkish" +msgstr "ಟರ್ಕಿಶ್" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ಉಕ್ರೇನಿಯನ್" + +msgid "Urdu" +msgstr "ಉರ್ದು" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "ವಿಯೆತ್ನಾಮೀಸ್" + +msgid "Simplified Chinese" +msgstr "ಸರಳೀಕೃತ ಚೈನೀಸ್" + +msgid "Traditional Chinese" +msgstr "ಸಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್ " + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "ಸಿಂಧುವಾದ ಮೌಲ್ಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid URL." +msgstr "ಸರಿಯಾದ ಒಂದು URL ಅನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "ಒಂದು ಸರಿಯಾದ IPv4 ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid IPv6 address." +msgstr "ಮಾನ್ಯವಾದ IPv6 ವಿಳಾಸ ದಾಖಲಿಸಿ" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "ಮಾನ್ಯವಾದ IPv4 ಅಥವಾ IPv6 ವಿಳಾಸ ದಾಖಲಿಸಿ" + +msgid "Enter only digits separated by commas." +msgstr "ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ ಬೇರ್ಪಟ್ಟ ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ ಬರೆಯಿರಿ." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಆಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ (ಇದು %(show_value)s ಆಗಿದೆ)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಕ್ಕಿಂತ ಕಡಿಮೆಯ ಅಥವ ಸಮನಾದ ಮೌಲ್ಯವಾಗಿದೆ ಎಂದು ಖಾತ್ರಿ " +"ಮಾಡಿಕೊಳ್ಳಿ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಅಥವ ಸಮನಾದ ಮೌಲ್ಯವಾಗಿದೆ ಎಂದು ಖಾತ್ರಿ " +"ಮಾಡಿಕೊಳ್ಳಿ." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ಮತ್ತು" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "ಈ ಅಂಶವನ್ನು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ." + +msgid "This field cannot be blank." +msgstr "ಈ ಸ್ಥಳವು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" +"ಈ %(field_label)s ಅನ್ನು ಹೊಂದಿರುವ ಒಂದು %(model_name)s ಈಗಾಗಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ಕ್ಷೇತ್ರದ ಬಗೆ: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "ಬೂಲಿಯನ್ (ಹೌದು ಅಥವ ಅಲ್ಲ)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "ಪದಪುಂಜ (%(max_length)s ವರೆಗೆ)" + +msgid "Comma-separated integers" +msgstr "ಅಲ್ಪವಿರಾಮ(,) ದಿಂದ ಬೇರ್ಪಟ್ಟ ಪೂರ್ಣಸಂಖ್ಯೆಗಳು" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "ದಿನಾಂಕ (ಸಮಯವಿಲ್ಲದೆ)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "ದಿನಾಂಕ (ಸಮಯದೊಂದಿಗೆ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ದಶಮಾನ ಸಂಖ್ಯೆ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "ಕಡತದ ಸ್ಥಾನಪಥ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "ತೇಲುವ-ಬಿಂದು ಸಂಖ್ಯೆ" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "ಪೂರ್ಣಾಂಕ" + +msgid "Big (8 byte) integer" +msgstr "ಬೃಹತ್ (೮ ಬೈಟ್) ಪೂರ್ಣ ಸಂಖ್ಯೆ" + +msgid "IPv4 address" +msgstr "IPv4 ವಿಳಾಸ" + +msgid "IP address" +msgstr "IP ವಿಳಾಸ" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "ಬೂಲಿಯನ್ (ನಿಜ, ಸುಳ್ಳು ಅಥವ ಯಾವುದೂ ಅಲ್ಲ ಇವುಗಳಲ್ಲಿ ಒಂದು)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "ಪಠ್ಯ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "ಸಮಯ" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "ಬಾಹ್ಯ ಕೀಲಿ (ಸಂಬಂಧಿತ ಸ್ಥಳದಿಂದ ಪ್ರಕಾರವನ್ನು ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ)" + +msgid "One-to-one relationship" +msgstr "ಒನ್-ಟು-ಒನ್ (ಪರಸ್ಪರ) ಸಂಬಂಧ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ಮೆನಿ-ಟು-ಮೆನಿ (ಸಾರ್ವಜನಿಕ) ಸಂಬಂಧ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ಈ ಸ್ಥಳವು ಅಗತ್ಯವಿರುತ್ತದೆ." + +msgid "Enter a whole number." +msgstr "ಪೂರ್ಣಾಂಕವೊಂದನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid date." +msgstr "ಸರಿಯಾದ ದಿನಾಂಕವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid time." +msgstr "ಸರಿಯಾದ ಸಮಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid date/time." +msgstr "ಸರಿಯಾದ ದಿನಾಂಕ/ಸಮಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ಯಾವದೇ ಕಡತವನ್ನೂ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ. ನಮೂನೆಯ ಮೇಲಿನ ಸಂಕೇತೀಕರಣ (ಎನ್ಕೋಡಿಂಗ್) ಬಗೆಯನ್ನು " +"ಪರೀಕ್ಷಿಸಿ." + +msgid "No file was submitted." +msgstr "ಯಾವದೇ ಕಡತವನ್ನೂ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ." + +msgid "The submitted file is empty." +msgstr "ಸಲ್ಲಿಸಲಾದ ಕಡತ ಖಾಲಿ ಇದೆ." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"ದಯವಿಟ್ಟು ಕಡತವನ್ನು ಸಲ್ಲಿಸಿ ಅಥವ ಅಳಿಸುವ ಗುರುತುಚೌಕವನ್ನು ಗುರುತು ಹಾಕಿ, ಎರಡನ್ನೂ ಒಟ್ಟಿಗೆ " +"ಮಾಡಬೇಡಿ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"ಸರಿಯಾದ ಚಿತ್ರವನ್ನು ಸೇರಿಸಿ. ನೀವು ಸೇರಿಸಿದ ಕಡತವು ಚಿತ್ರವೇ ಅಲ್ಲ ಅಥವಾ ಅದು ಒಂದು ಹಾಳಾದ " +"ಚಿತ್ರವಾಗಿದೆ. " + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "ಸರಿಯಾದ ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ. %(value)s ಎನ್ನುವುದು ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳಲ್ಲಿ ಇಲ್ಲ." + +msgid "Enter a list of values." +msgstr "ಮೌಲ್ಯಗಳ ಒಂದು ಪಟ್ಟಿಯನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ಕ್ರಮ" + +msgid "Delete" +msgstr "ಅಳಿಸಿಹಾಕಿ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ, ಇದರ ಮೌಲ್ಯವು " +"ವಿಶಿಷ್ಟವಾಗಿರಬೇಕು." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ, %(date_field)s " +"ನಲ್ಲಿನ %(lookup)s ಗಾಗಿ ಇದರ ಮೌಲ್ಯವು ವಿಶಿಷ್ಟವಾಗಿರಬೇಕು." + +msgid "Please correct the duplicate values below." +msgstr "ದಯವಿಟ್ಟು ಈ ಕೆಳಗೆ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮೌಲ್ಯವನ್ನು ಸರಿಪಡಿಸಿ." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "ಸರಿಯಾದ ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ. ಆ ಆಯ್ಕೆಯು ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳಲ್ಲಿ ಇಲ್ಲ." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "ಮುಕ್ತಗೊಳಿಸು" + +msgid "Currently" +msgstr "ಪ್ರಸಕ್ತ" + +msgid "Change" +msgstr "ಬದಲಾವಣೆ" + +msgid "Unknown" +msgstr "ಗೊತ್ತಿರದ" + +msgid "Yes" +msgstr "ಹೌದು" + +msgid "No" +msgstr "ಇಲ್ಲ" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "ಹೌದು,ಇಲ್ಲ,ಇರಬಹುದು" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ಬೈಟ್‌ಗಳು" +msgstr[1] "%(size)d ಬೈಟ್‌ಗಳು" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ಅಪರಾಹ್ನ" + +msgid "a.m." +msgstr "ಪೂರ್ವಾಹ್ನ" + +msgid "PM" +msgstr "ಅಪರಾಹ್ನ" + +msgid "AM" +msgstr "ಪೂರ್ವಾಹ್ನ" + +msgid "midnight" +msgstr "ಮಧ್ಯರಾತ್ರಿ" + +msgid "noon" +msgstr "ಮಧ್ಯಾಹ್ನ" + +msgid "Monday" +msgstr "ಸೋಮವಾರ" + +msgid "Tuesday" +msgstr "ಮಂಗಳವಾರ" + +msgid "Wednesday" +msgstr "ಬುಧವಾರ" + +msgid "Thursday" +msgstr "ಗುರುವಾರ" + +msgid "Friday" +msgstr "ಶುಕ್ರವಾರ" + +msgid "Saturday" +msgstr "ಶನಿವಾರ" + +msgid "Sunday" +msgstr "ರವಿವಾರ" + +msgid "Mon" +msgstr "ಸೋಮ" + +msgid "Tue" +msgstr "ಮಂಗಳ" + +msgid "Wed" +msgstr "ಬುಧ" + +msgid "Thu" +msgstr "ಗುರು" + +msgid "Fri" +msgstr "ಶುಕ್ರ" + +msgid "Sat" +msgstr "ಶನಿ" + +msgid "Sun" +msgstr "ರವಿ" + +msgid "January" +msgstr "ಜನವರಿ" + +msgid "February" +msgstr "ಫೆಬ್ರುವರಿ" + +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgid "April" +msgstr "ಎಪ್ರಿಲ್" + +msgid "May" +msgstr "ಮೇ" + +msgid "June" +msgstr "ಜೂನ್" + +msgid "July" +msgstr "ಜುಲೈ" + +msgid "August" +msgstr "ಆಗಸ್ಟ್" + +msgid "September" +msgstr "ಸೆಪ್ಟೆಂಬರ್" + +msgid "October" +msgstr "ಅಕ್ಟೋಬರ್" + +msgid "November" +msgstr "ನವೆಂಬರ್" + +msgid "December" +msgstr "ಡಿಸೆಂಬರ್" + +msgid "jan" +msgstr "ಜನವರಿ" + +msgid "feb" +msgstr "ಫೆಬ್ರವರಿ" + +msgid "mar" +msgstr "ಮಾರ್ಚ್" + +msgid "apr" +msgstr "ಏಪ್ರಿಲ್" + +msgid "may" +msgstr "ಮೇ" + +msgid "jun" +msgstr "ಜೂನ್" + +msgid "jul" +msgstr "ಜುಲೈ" + +msgid "aug" +msgstr "ಆಗಸ್ಟ್‍" + +msgid "sep" +msgstr "ಸೆಪ್ಟೆಂಬರ್" + +msgid "oct" +msgstr "ಅಕ್ಟೋಬರ್" + +msgid "nov" +msgstr "ನವೆಂಬರ್" + +msgid "dec" +msgstr "ಡಿಸೆಂಬರ್" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ಜನ." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ಫೆಬ್ರ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ಏಪ್ರಿಲ್" + +msgctxt "abbrev. month" +msgid "May" +msgstr "ಮೇ" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ಜೂನ್" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ಜುಲೈ" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ಆಗ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ಸೆಪ್ಟೆ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ಅಕ್ಟೋ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "ನವೆಂ." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ಡಿಸೆಂ." + +msgctxt "alt. month" +msgid "January" +msgstr "ಜನವರಿ" + +msgctxt "alt. month" +msgid "February" +msgstr "ಫೆಬ್ರವರಿ" + +msgctxt "alt. month" +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgctxt "alt. month" +msgid "April" +msgstr "ಏಪ್ರಿಲ್" + +msgctxt "alt. month" +msgid "May" +msgstr "ಮೇ" + +msgctxt "alt. month" +msgid "June" +msgstr "ಜೂನ್" + +msgctxt "alt. month" +msgid "July" +msgstr "ಜುಲೈ" + +msgctxt "alt. month" +msgid "August" +msgstr "ಆಗಸ್ಟ್‍" + +msgctxt "alt. month" +msgid "September" +msgstr "ಸಪ್ಟೆಂಬರ್" + +msgctxt "alt. month" +msgid "October" +msgstr "ಅಕ್ಟೋಬರ್" + +msgctxt "alt. month" +msgid "November" +msgstr "ನವೆಂಬರ್" + +msgctxt "alt. month" +msgid "December" +msgstr "ಡಿಸೆಂಬರ್" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ಅಥವ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "ಯಾವುದೆ ವರ್ಷವನ್ನು ಸೂಚಿಲಾಗಿಲ್ಲ" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "ಯಾವುದೆ ತಿಂಗಳನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +msgid "No day specified" +msgstr "ಯಾವುದೆ ದಿನವನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +msgid "No week specified" +msgstr "ಯಾವುದೆ ವಾರವನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "ಯಾವುದೆ %(verbose_name_plural)s ಲಭ್ಯವಿಲ್ಲ" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"ಭವಿಷ್ಯದ %(verbose_name_plural)s ಲಭ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ %(class_name)s.allow_future " +"ಎನ್ನುವುದು ಅಸತ್ಯವಾಗಿದೆ (ಫಾಲ್ಸ್‍) ಆಗಿದೆ." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "ಮನವಿಗೆ ತಾಳೆಯಾಗುವ ಯಾವುದೆ %(verbose_name)s ಕಂಡುಬಂದಿಲ್ಲ" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/kn/__init__.py b/venv/Lib/site-packages/django/conf/locale/kn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/kn/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/kn/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee29883347daad261e74c66627d38d8ad72795c6 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lcAkEGd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04k+4+W-In literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/kn/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/kn/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d7abce67c4203cfb07bd4fe40cf5e27ee9380c3 GIT binary patch literal 302 zcmd1j<>g`kf;Vw@lU6V>FgylvkO3o*;{e3PB0wUAA&Mb|F^VyTDT*nDIf^-jC73~z zwTd-M!A&8uiZ#P3Q^B!{8OQ?(`6@*EX|hCdyEulp#=H3k`8tL~aff*N!Z`xI{(d1I z@h*;$FloVH5C5PLpa@*YN`@kk3&6y$RA;N0(Bjmh;+UY);^M>@m;B_?+|<01;u!bL z5|7fP7`M!#;u76}qWrAX?m%-GapA?8Nlc;+T}I#Ju!;{p9?- yH2s|XvbwEUvn#FApYg34PQHo5sJr8%i~Ae)OhfCLK*3nL3N2O|J*K~Zo3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/kn/formats.py b/venv/Lib/site-packages/django/conf/locale/kn/formats.py new file mode 100644 index 000000000..d212fd52d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/kn/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "h:i A" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a3b88a56c54b4827aff47f920f9b0a12f244e6d4 GIT binary patch literal 26696 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b687c50d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,1290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BJ Jang , 2014 +# JunGu Kang , 2017 +# Jiyoon, Ha , 2016 +# DONGHO JEONG , 2020 +# Park Hyunwoo , 2017 +# Geonho Kim / Leo Kim , 2019 +# hoseung2 , 2017 +# Ian Y. Choi , 2015 +# Jaehong Kim , 2011 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# Le Tartuffe , 2014,2016 +# Jonghwa Seo , 2019 +# Jubeen Lee , 2020 +# JuneHyeon Bae , 2014 +# JunGu Kang , 2015 +# JunGu Kang , 2019 +# Kagami Sascha Rosylight , 2017 +# Mariusz Felisiak , 2021 +# Seho Noh , 2018 +# Subin Choi , 2016 +# Taesik Yoon , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:30+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "아프리칸스어" + +msgid "Arabic" +msgstr "아랍어" + +msgid "Algerian Arabic" +msgstr "알제리 아랍어" + +msgid "Asturian" +msgstr "호주어" + +msgid "Azerbaijani" +msgstr "아제르바이잔어" + +msgid "Bulgarian" +msgstr "불가리어" + +msgid "Belarusian" +msgstr "벨라루스어" + +msgid "Bengali" +msgstr "방글라데시어" + +msgid "Breton" +msgstr "브르타뉴어" + +msgid "Bosnian" +msgstr "보스니아어" + +msgid "Catalan" +msgstr "카탈로니아어" + +msgid "Czech" +msgstr "체코어" + +msgid "Welsh" +msgstr "웨일즈어" + +msgid "Danish" +msgstr "덴마크어" + +msgid "German" +msgstr "독일어" + +msgid "Lower Sorbian" +msgstr "저지 소르브어" + +msgid "Greek" +msgstr "그리스어" + +msgid "English" +msgstr "영어" + +msgid "Australian English" +msgstr "영어(호주)" + +msgid "British English" +msgstr "영어 (영국)" + +msgid "Esperanto" +msgstr "에스페란토어" + +msgid "Spanish" +msgstr "스페인어" + +msgid "Argentinian Spanish" +msgstr "아르헨티나 스페인어" + +msgid "Colombian Spanish" +msgstr "콜롬비아 스페인어" + +msgid "Mexican Spanish" +msgstr "멕시컨 스페인어" + +msgid "Nicaraguan Spanish" +msgstr "니카과라 스페인어" + +msgid "Venezuelan Spanish" +msgstr "베네수엘라 스페인어" + +msgid "Estonian" +msgstr "에스토니아어" + +msgid "Basque" +msgstr "바스크어" + +msgid "Persian" +msgstr "페르시아어" + +msgid "Finnish" +msgstr "핀란드어" + +msgid "French" +msgstr "프랑스어" + +msgid "Frisian" +msgstr "프리슬란트어" + +msgid "Irish" +msgstr "아일랜드어" + +msgid "Scottish Gaelic" +msgstr "스코틀랜드 게일어" + +msgid "Galician" +msgstr "갈리시아어" + +msgid "Hebrew" +msgstr "히브리어" + +msgid "Hindi" +msgstr "힌두어" + +msgid "Croatian" +msgstr "크로아티아어" + +msgid "Upper Sorbian" +msgstr "고지 소르브어" + +msgid "Hungarian" +msgstr "헝가리어" + +msgid "Armenian" +msgstr "아르메니아어" + +msgid "Interlingua" +msgstr "인테르링구아어" + +msgid "Indonesian" +msgstr "인도네시아어" + +msgid "Igbo" +msgstr "이그보어" + +msgid "Ido" +msgstr "이도어" + +msgid "Icelandic" +msgstr "아이슬란드어" + +msgid "Italian" +msgstr "이탈리아어" + +msgid "Japanese" +msgstr "일본어" + +msgid "Georgian" +msgstr "조지아어" + +msgid "Kabyle" +msgstr "커바일어" + +msgid "Kazakh" +msgstr "카자흐어" + +msgid "Khmer" +msgstr "크메르어" + +msgid "Kannada" +msgstr "칸나다어" + +msgid "Korean" +msgstr "한국어" + +msgid "Kyrgyz" +msgstr "키르키즈 공화국어" + +msgid "Luxembourgish" +msgstr "룩셈부르크" + +msgid "Lithuanian" +msgstr "리투아니아어" + +msgid "Latvian" +msgstr "라트비아어" + +msgid "Macedonian" +msgstr "마케도니아어" + +msgid "Malayalam" +msgstr "말레이지아어" + +msgid "Mongolian" +msgstr "몽고어" + +msgid "Marathi" +msgstr "마라티어" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "룩셈부르크어" + +msgid "Norwegian Bokmål" +msgstr "노르웨이어(보크몰)" + +msgid "Nepali" +msgstr "네팔어" + +msgid "Dutch" +msgstr "네덜란드어" + +msgid "Norwegian Nynorsk" +msgstr "노르웨이어 (뉘노르스크)" + +msgid "Ossetic" +msgstr "오세티아어" + +msgid "Punjabi" +msgstr "펀자브어" + +msgid "Polish" +msgstr "폴란드어" + +msgid "Portuguese" +msgstr "포르투갈어" + +msgid "Brazilian Portuguese" +msgstr "브라질 포르투갈어" + +msgid "Romanian" +msgstr "루마니아어" + +msgid "Russian" +msgstr "러시아어" + +msgid "Slovak" +msgstr "슬로바키아어" + +msgid "Slovenian" +msgstr "슬로베니아어" + +msgid "Albanian" +msgstr "알바니아어" + +msgid "Serbian" +msgstr "세르비아어" + +msgid "Serbian Latin" +msgstr "세르비아어" + +msgid "Swedish" +msgstr "스웨덴어" + +msgid "Swahili" +msgstr "스와힐리어" + +msgid "Tamil" +msgstr "타밀어" + +msgid "Telugu" +msgstr "텔루구어" + +msgid "Tajik" +msgstr "타지크어" + +msgid "Thai" +msgstr "태국어" + +msgid "Turkmen" +msgstr "튀르크멘어" + +msgid "Turkish" +msgstr "터키어" + +msgid "Tatar" +msgstr "타타르" + +msgid "Udmurt" +msgstr "이제프스크" + +msgid "Ukrainian" +msgstr "우크라이나어" + +msgid "Urdu" +msgstr "우르드어" + +msgid "Uzbek" +msgstr "우즈베크어" + +msgid "Vietnamese" +msgstr "베트남어" + +msgid "Simplified Chinese" +msgstr "중국어 간체" + +msgid "Traditional Chinese" +msgstr "중국어 번체" + +msgid "Messages" +msgstr "메시지" + +msgid "Site Maps" +msgstr "사이트 맵" + +msgid "Static Files" +msgstr "정적 파일" + +msgid "Syndication" +msgstr "신디케이션" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "페이지 번호가 정수가 아닙니다." + +msgid "That page number is less than 1" +msgstr "페이지 번호가 1보다 작습니다." + +msgid "That page contains no results" +msgstr "해당 페이지에 결과가 없습니다." + +msgid "Enter a valid value." +msgstr "올바른 값을 입력하세요." + +msgid "Enter a valid URL." +msgstr "올바른 URL을 입력하세요." + +msgid "Enter a valid integer." +msgstr "올바른 정수를 입력하세요." + +msgid "Enter a valid email address." +msgstr "올바른 이메일 주소를 입력하세요." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "문자, 숫자, '_', '-'만 가능합니다." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"유니코드 문자, 숫자, 언더스코어 또는 하이픈으로 구성된 올바른 내용을 입력하세" +"요." + +msgid "Enter a valid IPv4 address." +msgstr "올바른 IPv4 주소를 입력하세요." + +msgid "Enter a valid IPv6 address." +msgstr "올바른 IPv6 주소를 입력하세요." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "올바른 IPv4 혹은 IPv6 주소를 입력하세요." + +msgid "Enter only digits separated by commas." +msgstr "콤마로 구분된 숫자만 입력하세요." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"%(limit_value)s 안의 값을 입력해 주세요. (입력하신 값은 %(show_value)s입니" +"다.)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "%(limit_value)s 이하의 값을 입력해 주세요." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "%(limit_value)s 이상의 값을 입력해 주세요." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"이 값이 최소 %(limit_value)d 개의 글자인지 확인하세요(입력값 %(show_value)d " +"자)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"이 값이 최대 %(limit_value)d 개의 글자인지 확인하세요(입력값 %(show_value)d " +"자)." + +msgid "Enter a number." +msgstr "숫자를 입력하세요." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "전체 자릿수가 %(max)s 개를 넘지 않도록 해주세요." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "전체 유효자리 개수가 %(max)s 개를 넘지 않도록 해주세요." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "전체 유효자리 개수가 %(max)s 개를 넘지 않도록 해주세요." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"파일 확장자 '%(extension)s'는 허용되지 않습니다. 허용된 확장자: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "null 문자는 사용할 수 없습니다. " + +msgid "and" +msgstr "또한" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s의 %(field_labels)s 은/는 이미 존재합니다." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r 은/는 올바른 선택사항이 아닙니다." + +msgid "This field cannot be null." +msgstr "이 필드는 null 값을 사용할 수 없습니다. " + +msgid "This field cannot be blank." +msgstr "이 필드는 빈 칸으로 둘 수 없습니다." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s의 %(field_label)s은/는 이미 존재합니다." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s은/는 반드시 %(date_field_label)s %(lookup_type)s에 대해 유일" +"해야 합니다." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s 형식 필드" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "'%(value)s' 값은 반드시 True 또는 False 중 하나여야만 합니다." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "'%(value)s'값은 반드시 True, False, None 중 하나여야만 합니다." + +msgid "Boolean (Either True or False)" +msgstr "boolean(True 또는 False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "문자열(%(max_length)s 글자까지)" + +msgid "Comma-separated integers" +msgstr "정수(콤마로 구분)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "'%(value)s' 값은 날짜 형식이 아닙니다. YYYY-MM-DD 형식이어야 합니다." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' 값은 올바른 형식(YYYY-MM-DD)이지만 유효하지 않은 날짜입니다." + +msgid "Date (without time)" +msgstr "날짜(시간 제외)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' 값은 올바르지 않은 형식입니다. YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] 형식이어야 합니다." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' 값은 올바른 형식이지만 (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) 유효" +"하지 않은 날짜/시간입니다." + +msgid "Date (with time)" +msgstr "날짜(시간 포함)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "'%(value)s' 값은 10진수를 입력하여야 합니다." + +msgid "Decimal number" +msgstr "10진수" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' 값은 올바르지 않은 형식입니다. [DD] [HH:[MM:]]ss[.uuuuuu] 형식이" +"어야 합니다." + +msgid "Duration" +msgstr "지속시간" + +msgid "Email address" +msgstr "이메일 주소" + +msgid "File path" +msgstr "파일 경로" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "\"%(value)s\" 값은 실수를 입력하여야 합니다." + +msgid "Floating point number" +msgstr "부동소수점 숫자" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "\"%(value)s\" 값은 정수를 입력하여야 합니다." + +msgid "Integer" +msgstr "정수" + +msgid "Big (8 byte) integer" +msgstr "큰 정수 (8 byte)" + +msgid "Small integer" +msgstr "작은 정수" + +msgid "IPv4 address" +msgstr "IPv4 주소" + +msgid "IP address" +msgstr "IP 주소" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "\"%(value)s\" 값은 반드시 None, True 또는 False이어야 합니다." + +msgid "Boolean (Either True, False or None)" +msgstr "boolean (True, False 또는 None)" + +msgid "Positive big integer" +msgstr "큰 양의 정수" + +msgid "Positive integer" +msgstr "양의 정수" + +msgid "Positive small integer" +msgstr "작은 양의 정수" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "슬러그(%(max_length)s 까지)" + +msgid "Text" +msgstr "텍스트" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"\"%(value)s\" 값의 형식이 올바르지 않습니다. HH:MM[:ss[.uuuuuu]] 형식이어야 " +"합니다." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"\"%(value)s\" 값이 올바른 형식(HH:MM[:ss[.uuuuuu]])이나, 유효하지 않은 시간 " +"값입니다." + +msgid "Time" +msgstr "시각" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Raw binary data" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\"은 유효하지 않은 UUID입니다." + +msgid "Universally unique identifier" +msgstr "범용 고유 식별 수단(UUID)" + +msgid "File" +msgstr "파일" + +msgid "Image" +msgstr "이미지" + +msgid "A JSON object" +msgstr "JSON 객체" + +msgid "Value must be valid JSON." +msgstr "올바른 JSON 형식이여야 합니다." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s %(value)r 를 가지는 %(model)s 인스턴스가 존재하지 않습니다." + +msgid "Foreign Key (type determined by related field)" +msgstr "외래 키 (연관 필드에 의해 형식 결정)" + +msgid "One-to-one relationship" +msgstr "일대일 관계" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s 관계" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s 관계들" + +msgid "Many-to-many relationship" +msgstr "다대다 관계" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "필수 항목입니다." + +msgid "Enter a whole number." +msgstr "정수를 입력하세요." + +msgid "Enter a valid date." +msgstr "올바른 날짜를 입력하세요." + +msgid "Enter a valid time." +msgstr "올바른 시각을 입력하세요." + +msgid "Enter a valid date/time." +msgstr "올바른 날짜/시각을 입력하세요." + +msgid "Enter a valid duration." +msgstr "올바른 기간을 입력하세요." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "날짜는 {min_days}와 {max_days} 사이여야 합니다." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "등록된 파일이 없습니다. 인코딩 형식을 확인하세요." + +msgid "No file was submitted." +msgstr "파일이 전송되지 않았습니다." + +msgid "The submitted file is empty." +msgstr "입력하신 파일은 빈 파일입니다." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "파일이름의 길이가 최대 %(max)d 자인지 확인하세요(%(length)d 자)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"파일 업로드 또는 삭제 체크박스를 선택하세요. 동시에 둘 다 할 수는 없습니다." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"올바른 이미지를 업로드하세요. 업로드하신 파일은 이미지 파일이 아니거나 파일" +"이 깨져 있습니다." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "올바르게 선택해 주세요. %(value)s 이/가 선택가능항목에 없습니다." + +msgid "Enter a list of values." +msgstr "리스트를 입력하세요." + +msgid "Enter a complete value." +msgstr "완전한 값을 입력하세요." + +msgid "Enter a valid UUID." +msgstr "올바른 UUID를 입력하세요." + +msgid "Enter a valid JSON." +msgstr "올바른 JSON을 입력하세요." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(%(name)s hidden 필드) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" + +msgid "Order" +msgstr "순서:" + +msgid "Delete" +msgstr "삭제" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s의 중복된 데이터를 고쳐주세요." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "%(field)s의 중복된 데이터를 고쳐주세요. 유일한 값이어야 합니다." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s의 값은 %(date_field)s의 %(lookup)s에 대해 유일해야 합니다. 중" +"복된 데이터를 고쳐주세요." + +msgid "Please correct the duplicate values below." +msgstr "아래의 중복된 값들을 고쳐주세요." + +msgid "The inline value did not match the parent instance." +msgstr "Inline 값이 부모 인스턴스와 일치하지 않습니다." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "올바르게 선택해 주세요. 선택하신 것이 선택가능항목에 없습니다." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" 은/는 유효한 값이 아닙니다." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s 은/는 %(current_timezone)s 시간대에서 해석될 수 없습니다; 정보" +"가 모호하거나 존재하지 않을 수 있습니다." + +msgid "Clear" +msgstr "취소" + +msgid "Currently" +msgstr "현재" + +msgid "Change" +msgstr "변경" + +msgid "Unknown" +msgstr "알 수 없습니다." + +msgid "Yes" +msgstr "예" + +msgid "No" +msgstr "아니오" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "예,아니오,아마도" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d 바이트" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "오후" + +msgid "a.m." +msgstr "오전" + +msgid "PM" +msgstr "오후" + +msgid "AM" +msgstr "오전" + +msgid "midnight" +msgstr "자정" + +msgid "noon" +msgstr "정오" + +msgid "Monday" +msgstr "월요일" + +msgid "Tuesday" +msgstr "화요일" + +msgid "Wednesday" +msgstr "수요일" + +msgid "Thursday" +msgstr "목요일" + +msgid "Friday" +msgstr "금요일" + +msgid "Saturday" +msgstr "토요일" + +msgid "Sunday" +msgstr "일요일" + +msgid "Mon" +msgstr "월요일" + +msgid "Tue" +msgstr "화요일" + +msgid "Wed" +msgstr "수요일" + +msgid "Thu" +msgstr "목요일" + +msgid "Fri" +msgstr "금요일" + +msgid "Sat" +msgstr "토요일" + +msgid "Sun" +msgstr "일요일" + +msgid "January" +msgstr "1월" + +msgid "February" +msgstr "2월" + +msgid "March" +msgstr "3월" + +msgid "April" +msgstr "4월" + +msgid "May" +msgstr "5월" + +msgid "June" +msgstr "6월" + +msgid "July" +msgstr "7월" + +msgid "August" +msgstr "8월" + +msgid "September" +msgstr "9월" + +msgid "October" +msgstr "10월" + +msgid "November" +msgstr "11월" + +msgid "December" +msgstr "12월" + +msgid "jan" +msgstr "1월" + +msgid "feb" +msgstr "2월" + +msgid "mar" +msgstr "3월" + +msgid "apr" +msgstr "4월" + +msgid "may" +msgstr "5월" + +msgid "jun" +msgstr "6월" + +msgid "jul" +msgstr "7월" + +msgid "aug" +msgstr "8월" + +msgid "sep" +msgstr "9월" + +msgid "oct" +msgstr "10월" + +msgid "nov" +msgstr "11월" + +msgid "dec" +msgstr "12월" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "1월" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "2월" + +msgctxt "abbrev. month" +msgid "March" +msgstr "3월" + +msgctxt "abbrev. month" +msgid "April" +msgstr "4월" + +msgctxt "abbrev. month" +msgid "May" +msgstr "5월" + +msgctxt "abbrev. month" +msgid "June" +msgstr "6월" + +msgctxt "abbrev. month" +msgid "July" +msgstr "7월" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "8월" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "9월" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "10월" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "11월" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "12월" + +msgctxt "alt. month" +msgid "January" +msgstr "1월" + +msgctxt "alt. month" +msgid "February" +msgstr "2월" + +msgctxt "alt. month" +msgid "March" +msgstr "3월" + +msgctxt "alt. month" +msgid "April" +msgstr "4월" + +msgctxt "alt. month" +msgid "May" +msgstr "5월" + +msgctxt "alt. month" +msgid "June" +msgstr "6월" + +msgctxt "alt. month" +msgid "July" +msgstr "7월" + +msgctxt "alt. month" +msgid "August" +msgstr "8월" + +msgctxt "alt. month" +msgid "September" +msgstr "9월" + +msgctxt "alt. month" +msgid "October" +msgstr "10월" + +msgctxt "alt. month" +msgid "November" +msgstr "11월" + +msgctxt "alt. month" +msgid "December" +msgstr "12월" + +msgid "This is not a valid IPv6 address." +msgstr "올바른 IPv6 주소가 아닙니다." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "또는" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" + +msgid "Forbidden" +msgstr "Forbidden" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF 검증에 실패했습니다. 요청을 중단하였습니다." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"만약 브라우저 설정에서 '참조' 헤더를 비활성화 시켰을 경우, 적어도 이 사이트" +"나 HTTPS 연결, '동일-출처' 요청에 대해서는 이를 다시 활성화 시키십시오. " + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"태그나 'Referrer-Policy: no-" +"referrer' 헤더를 포함하고 있다면, 제거해주시기 바랍니다. CSRF 방지를 위한 리" +"퍼러 검사를 위해 'Referer' 헤더가 필요합니다. 개인 정보에 대해 우려가 있는 경" +"우, 서드 파티 사이트에 대한 링크에 와 같은 대안을 사" +"용할 수 있습니다." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"이 메세지가 보이는 이유는 사이트가 폼을 제출할 때 CSRF 쿠키를 필요로 하기 때" +"문입니다. 이 쿠키는 보안상의 이유로 필요하며, 제3자에 의해 당신의 브라우저가 " +"해킹당하고 있지 않다는 것을 보장합니다." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"만약 브라우저 설정에서 쿠키를 비활성화 시켰을 경우, 적어도 이 사이트나 '동일-" +"출처' 요청에 대해서는 활성화 시키십시오." + +msgid "More information is available with DEBUG=True." +msgstr "DEBUG=True 로 더 많은 정보를 확인할 수 있습니다." + +msgid "No year specified" +msgstr "년도가 없습니다." + +msgid "Date out of range" +msgstr "유효 범위 밖의 날짜" + +msgid "No month specified" +msgstr "월이 없습니다." + +msgid "No day specified" +msgstr "날짜가 없습니다." + +msgid "No week specified" +msgstr "주가 없습니다." + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr " %(verbose_name_plural)s를 사용할 수 없습니다." + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Future 모듈 %(verbose_name_plural)s을 사용할 수 없습니다. %(class_name)s." +"allow_future가 False 입니다." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "날짜 문자열 '%(datestr)s'이 표준 형식 '%(format)s'과 다릅니다." + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "쿼리 결과에 %(verbose_name)s가 없습니다." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "'마지막' 페이지가 아니거나, 정수형으로 변환할 수 없습니다." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Invalid page (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "빈 리스트이고 '%(class_name)s.allow_empty'가 False입니다." + +msgid "Directory indexes are not allowed here." +msgstr "디렉토리 인덱스는 이곳에 사용할 수 없습니다." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" 이/가 존재하지 않습니다." + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index of %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "성공적으로 설치되었습니다! 축하합니다!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s릴리스 노트 보기" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"이 페이지는 어떤 URL도 지정되지 않았고, settings 파일에 DEBUG=True가 설정되어 있을 때 표시됩니다." + +msgid "Django Documentation" +msgstr "Django 문서" + +msgid "Topics, references, & how-to’s" +msgstr "주제, 레퍼런스, & 입문참조하다" + +msgid "Tutorial: A Polling App" +msgstr "튜토리얼: 폴링 애플리케이션" + +msgid "Get started with Django" +msgstr "Django와 함께 시작하기" + +msgid "Django Community" +msgstr "Django 커뮤니티" + +msgid "Connect, get help, or contribute" +msgstr "연결하고, 도움을 받거나 기여하기" diff --git a/venv/Lib/site-packages/django/conf/locale/ko/__init__.py b/venv/Lib/site-packages/django/conf/locale/ko/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ko/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ko/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e6bbd05b0a687b2b5ae0bffbf61b002c859b1e7 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lcD{amd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04m2c+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ko/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ko/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7f955a0cc4ba865322fb1e83b6d8b2f4c95eaed GIT binary patch literal 1001 zcmaiwPm9_>7{(Kg8qMm~W!poc5GZpHs<}%kO*gI)Hi;zhkRepmi4xZ&i%AyDc?*SJ zduw~?t@qMXKgmK*J(cwn?5UIZFRq17$h`CZ=6#-dXS{N`MBuS}`)gRH3F3F0q(=rP zukr5-ctQju5D7_?ffRP5uSKVIJ53 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ko/formats.py b/venv/Lib/site-packages/django/conf/locale/ko/formats.py new file mode 100644 index 000000000..1f3487c6f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ko/formats.py @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "Y년 n월 j일" +TIME_FORMAT = "A g:i" +DATETIME_FORMAT = "Y년 n월 j일 g:i A" +YEAR_MONTH_FORMAT = "Y년 n월" +MONTH_DAY_FORMAT = "n월 j일" +SHORT_DATE_FORMAT = "Y-n-j." +SHORT_DATETIME_FORMAT = "Y-n-j H:i" +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%m/%d/%Y", # '10/25/2006' + "%m/%d/%y", # '10/25/06' + # "%b %d %Y", # 'Oct 25 2006' + # "%b %d, %Y", # 'Oct 25, 2006' + # "%d %b %Y", # '25 Oct 2006' + # "%d %b, %Y", #'25 Oct, 2006' + # "%B %d %Y", # 'October 25 2006' + # "%B %d, %Y", #'October 25, 2006' + # "%d %B %Y", # '25 October 2006' + # "%d %B, %Y", # '25 October, 2006' + "%Y년 %m월 %d일", # '2006년 10월 25일', with localized suffix. +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '14:30:59' + "%H:%M:%S.%f", # '14:30:59.000200' + "%H:%M", # '14:30' + "%H시 %M분 %S초", # '14시 30분 59초' + "%H시 %M분", # '14시 30분' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%m/%d/%Y %H:%M:%S", # '10/25/2006 14:30:59' + "%m/%d/%Y %H:%M:%S.%f", # '10/25/2006 14:30:59.000200' + "%m/%d/%Y %H:%M", # '10/25/2006 14:30' + "%m/%d/%y %H:%M:%S", # '10/25/06 14:30:59' + "%m/%d/%y %H:%M:%S.%f", # '10/25/06 14:30:59.000200' + "%m/%d/%y %H:%M", # '10/25/06 14:30' + "%Y년 %m월 %d일 %H시 %M분 %S초", # '2006년 10월 25일 14시 30분 59초' + "%Y년 %m월 %d일 %H시 %M분", # '2006년 10월 25일 14시 30분' +] + +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f99fc908f772a47cf1a99141c8b9f416ddac7b1e GIT binary patch literal 31395 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 Bc&PvY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..391196f71 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,1279 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mariusz Felisiak , 2021 +# Soyuzbek Orozbek uulu , 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-27 14:11+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Африканча" + +msgid "Arabic" +msgstr "Арабча" + +msgid "Algerian Arabic" +msgstr "Алжир арабчасы" + +msgid "Asturian" +msgstr "Австрийче" + +msgid "Azerbaijani" +msgstr "Азерче" + +msgid "Bulgarian" +msgstr "Болгарча" + +msgid "Belarusian" +msgstr "Белорусча" + +msgid "Bengali" +msgstr "Бенгалча" + +msgid "Breton" +msgstr "Бретончо" + +msgid "Bosnian" +msgstr "Босния" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чехче" + +msgid "Welsh" +msgstr "Валлий" + +msgid "Danish" +msgstr "Данчийче" + +msgid "German" +msgstr "Немисче" + +msgid "Lower Sorbian" +msgstr "Сорб" + +msgid "Greek" +msgstr "Грекче" + +msgid "English" +msgstr "Англисче" + +msgid "Australian English" +msgstr "Авс. Англисчеси" + +msgid "British English" +msgstr "Бр. Англ." + +msgid "Esperanto" +msgstr "Есперанто" + +msgid "Spanish" +msgstr "Испанча" + +msgid "Argentinian Spanish" +msgstr "Арг. исп" + +msgid "Colombian Spanish" +msgstr "Колумб Испанчасы" + +msgid "Mexican Spanish" +msgstr "Мекс. исп" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуа испанчасы" + +msgid "Venezuelan Spanish" +msgstr "Венесуела Испанчасы" + +msgid "Estonian" +msgstr "Эстон" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Персче" + +msgid "Finnish" +msgstr "Финче" + +msgid "French" +msgstr "Французча" + +msgid "Frisian" +msgstr "Фризче" + +msgid "Irish" +msgstr "Ирланча" + +msgid "Scottish Gaelic" +msgstr "Шотланча" + +msgid "Galician" +msgstr "Галицианча" + +msgid "Hebrew" +msgstr "Жөөтчө" + +msgid "Hindi" +msgstr "Хиндче" + +msgid "Croatian" +msgstr "Хорватча" + +msgid "Upper Sorbian" +msgstr "Жогорку Сорбчо" + +msgid "Hungarian" +msgstr "Венгрче" + +msgid "Armenian" +msgstr "Арменче" + +msgid "Interlingua" +msgstr "Эл аралык" + +msgid "Indonesian" +msgstr "Индонезче" + +msgid "Igbo" +msgstr "Игбо" + +msgid "Ido" +msgstr "идо" + +msgid "Icelandic" +msgstr "Исландча" + +msgid "Italian" +msgstr "Итальянча" + +msgid "Japanese" +msgstr "Жапончо" + +msgid "Georgian" +msgstr "Грузинче" + +msgid "Kabyle" +msgstr "Кабилче" + +msgid "Kazakh" +msgstr "Казакча" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Канадча" + +msgid "Korean" +msgstr "Корейче" + +msgid "Kyrgyz" +msgstr "Кыргызча" + +msgid "Luxembourgish" +msgstr "Люкцембургча" + +msgid "Lithuanian" +msgstr "Литвача" + +msgid "Latvian" +msgstr "Латвияча" + +msgid "Macedonian" +msgstr "Македончо" + +msgid "Malayalam" +msgstr "Малаяламча" + +msgid "Mongolian" +msgstr "Монголчо" + +msgid "Marathi" +msgstr "Марати" + +msgid "Malay" +msgstr "Малай" + +msgid "Burmese" +msgstr "Бурмача" + +msgid "Norwegian Bokmål" +msgstr "Норвег Бокмолчо" + +msgid "Nepali" +msgstr "Непалча" + +msgid "Dutch" +msgstr "Голландча" + +msgid "Norwegian Nynorsk" +msgstr "Норвегиялык нюнор" + +msgid "Ossetic" +msgstr "Оссетче" + +msgid "Punjabi" +msgstr "Пенжабча" + +msgid "Polish" +msgstr "Полякча" + +msgid "Portuguese" +msgstr "Португалча" + +msgid "Brazilian Portuguese" +msgstr "Бразилиялык португалчасы" + +msgid "Romanian" +msgstr "Румынча" + +msgid "Russian" +msgstr "Орусча" + +msgid "Slovak" +msgstr "Словакча" + +msgid "Slovenian" +msgstr "Словенияча" + +msgid "Albanian" +msgstr "Албанча" + +msgid "Serbian" +msgstr "Сербче" + +msgid "Serbian Latin" +msgstr "Серб латынчасы" + +msgid "Swedish" +msgstr "Шведче" + +msgid "Swahili" +msgstr "Свахилче" + +msgid "Tamil" +msgstr "Тамиль" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Tajik" +msgstr "Тажикче" + +msgid "Thai" +msgstr "Тайча" + +msgid "Turkmen" +msgstr "Түркмөнчө" + +msgid "Turkish" +msgstr "Түркчө" + +msgid "Tatar" +msgstr "Татарча" + +msgid "Udmurt" +msgstr "Удмурча" + +msgid "Ukrainian" +msgstr "Украинче" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "Өзбекче" + +msgid "Vietnamese" +msgstr "Вьетнамча" + +msgid "Simplified Chinese" +msgstr "Жеңилдетилген кытайча" + +msgid "Traditional Chinese" +msgstr "салттык кытайча" + +msgid "Messages" +msgstr "Билдирүүлөр" + +msgid "Site Maps" +msgstr "сайт картасы" + +msgid "Static Files" +msgstr "Туруктуу файлдар" + +msgid "Syndication" +msgstr "Синдикат" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Бул барактын номуру сан эмес" + +msgid "That page number is less than 1" +msgstr "Бул барактын номуру 1 ден кичине" + +msgid "That page contains no results" +msgstr "Бул баракта жыйынтык жок" + +msgid "Enter a valid value." +msgstr "Туура маани киргиз" + +msgid "Enter a valid URL." +msgstr "Туура URL киргиз" + +msgid "Enter a valid integer." +msgstr "Туура натурал сан тер." + +msgid "Enter a valid email address." +msgstr "Туура эдарек тер." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"ариптер, цифралар, дефис же астыңкы сызык камтыган туура слаг киргизиңиз." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Юникод символдор, цифралар, астыңкы сызыктар же дефис камтыган туурга слаг " +"киргизиңиз." + +msgid "Enter a valid IPv4 address." +msgstr "Туура IPv4 тер." + +msgid "Enter a valid IPv6 address." +msgstr "Туура IPv6 тер." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Туура IPv4 же IPv6 тер." + +msgid "Enter only digits separated by commas." +msgstr "Жалаң үтүр менен бөлүнгөн сан тер." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Бул маани %(limit_value)s ашпоосун текшериңиз (азыр %(show_value)s)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "%(limit_value)s карата кичине же барабар маани болгонун текшериңиз" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "%(limit_value)s карата чоң же барабар маани болгонун текшериңиз" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Бул маани жок дегенде %(limit_value)dсимвол камтыганын текшериңиз (азыркысы " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Бул маани эң көп %(limit_value)dсимвол камтыганын текшериңиз (азыркысы " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Сан киргизиңиз." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Жалпысынан %(max)sорундан ашпоосун текшериңиз." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Жалпысынан ондук сандын%(max)s ашпоосун текшериңиз." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Жалпысынан үтүргө чейин%(max)s ашпоосун текшериңиз." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"%(extension)sфайл кеңейтүүсү кабыл алынбайт. Кабыл алынгандар: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Боштук кабыл алынбайт" + +msgid "and" +msgstr "жана" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s бул %(field_labels)s менен мурдатан эле бар" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r мааниси туура эмес тандоо." + +msgid "This field cannot be null." +msgstr "Бул аймак жок маани албашы керек" + +msgid "This field cannot be blank." +msgstr "Бул аймак бош калбашы керек" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s бул %(field_label)s менен мурдатан эле бар" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s %(date_field_label)s %(lookup_type)s үчүн уникал болуусу " +"керек." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "аймактын түрү: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” мааниси же True же False болуусу керек." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” мааниси же True же False же None болуусу керек." + +msgid "Boolean (Either True or False)" +msgstr "Булен (Туура же Ката)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Сап (%(max_length)s чейин)" + +msgid "Comma-separated integers" +msgstr "үтүр менен бөлүнгөн сан" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” мааниси туура эмес форматта. Ал ЖЖЖЖ-АА-КК форматта болуусу " +"керек." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "%(value)sмааниси туура (ЖЖЖЖ-АА-КК) форматта бирок ал күн туура эмес." + +msgid "Date (without time)" +msgstr "Күн (убакытсыз)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” мааниси туура эмес форматта. Ал ЖЖЖЖ-АА-КК СС:ММ[сс[.дддддд]]" +"[УЗ] форматта болуусу керек." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” мааниси туура форматта (ЖЖЖЖ-АА-КК СС:ММ[сс[.дддддд]][УЗ] ) " +"бирок ал күн/убакыт туура эмес." + +msgid "Date (with time)" +msgstr "Күн(убакыттуу)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” мааниси ондук сан болушу керек." + +msgid "Decimal number" +msgstr "ондук сан" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” мааниси туура эмес форматта. Ал [КК][[CC:]MM:]cc[.дддддд] " +"форматта болуусу керек." + +msgid "Duration" +msgstr "Мөөнөт" + +msgid "Email address" +msgstr "электрондук дарек" + +msgid "File path" +msgstr "файл жайгашуусу" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” мааниси калкыган чекиттүү болуусу керек." + +msgid "Floating point number" +msgstr "калкыган чекит саны" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” мааниси натуралдык сан болуусу керек." + +msgid "Integer" +msgstr "Натурал сан" + +msgid "Big (8 byte) integer" +msgstr "Чоң ( 8 байт) натурал сан" + +msgid "Small integer" +msgstr "кичине натурал сан" + +msgid "IPv4 address" +msgstr "IPv4 дареги" + +msgid "IP address" +msgstr "IP дареги" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” мааниси же None же True же False болуусу керек." + +msgid "Boolean (Either True, False or None)" +msgstr "Булен(Туура же Жалган же Куру)" + +msgid "Positive big integer" +msgstr "Оң чоң натуралдык сан." + +msgid "Positive integer" +msgstr "оң сан" + +msgid "Positive small integer" +msgstr "кичине оң сан" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "слаг ( %(max_length)s чейин)" + +msgid "Text" +msgstr "сап" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” мааниси туура эмес форматта. Ал СС:ММ[:сс[.ддддддд]] форматта " +"болуусу керек." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” мааниси туура форматта (СС:ММ[:cc[.дддддд]]) бирок ал убакыт " +"туура эмес." + +msgid "Time" +msgstr "Убакыт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "жалаң экилик берилиш" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” туура эмес UUID." + +msgid "Universally unique identifier" +msgstr "универсал уникал көрсөтүүчү" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Сүрөт" + +msgid "A JSON object" +msgstr "JSON обектиси" + +msgid "Value must be valid JSON." +msgstr "Маани туура JSON болушу керек." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s нерсеси %(field)s аймагы %(value)r маани менен табылбады." + +msgid "Foreign Key (type determined by related field)" +msgstr "Бөтөн Ачкыч (байланышкан аймак менен аныкталат)" + +msgid "One-to-one relationship" +msgstr "Бирге-бир байланышы" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s байланышы" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s байланыштары" + +msgid "Many-to-many relationship" +msgstr "көпкө-көп байланышы" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Бул талаа керектүү." + +msgid "Enter a whole number." +msgstr "Толук сан киргиз." + +msgid "Enter a valid date." +msgstr "туура күн киргиз." + +msgid "Enter a valid time." +msgstr "Туура убакыт киргиз." + +msgid "Enter a valid date/time." +msgstr "Туура күн/убакыт киргиз." + +msgid "Enter a valid duration." +msgstr "Туура мөөнөт киргиз." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Күндөрдүн саны {min_days} жана {max_days} арасында болуусу керек." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл жиберилген жок. Формдун бекитүү түрүн текшер." + +msgid "No file was submitted." +msgstr "Файл жиберилген жок." + +msgid "The submitted file is empty." +msgstr "Жиберилген файл бош." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Бул файлдын аты эң көп %(max)dсимвол ала алат. (азыркысы %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Сураныч же файл жибериңиз же тандоону бош калтырыңыз. Экөөн тең эмес." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Туура сүрөт жөнөтүңүз. Сиз жүктөгөн же сүрөт эмес же бузулган сүрөт." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Туура тандоону танда. %(value)s мүмкүн болгон тандоо эмес." + +msgid "Enter a list of values." +msgstr "Туура маанилер тизмесин киргиз." + +msgid "Enter a complete value." +msgstr "Толук маани киргиз." + +msgid "Enter a valid UUID." +msgstr "Туура UUID киргиз." + +msgid "Enter a valid JSON." +msgstr "Туура JSON киргиз." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(жашырылган аймак %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm берилиши жетишпей атат же жасалма болуп атат. Жетишпеген " +"талаалар: %(field_names)s. Эгер көйгөй чечилбей атса сиз баг билдирүү " +"жөнөтсөңүз болот." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Сураныч, эң көп %d форм жөнөтүңүз." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Сураныч, эң аз %dформ жөнөтүңүз." + +msgid "Order" +msgstr "Тартип" + +msgid "Delete" +msgstr "Өчүрүү" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s үчүн кайталанган маанилерди оңдоңуз." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s үчүн кайталанган маанилерди оңдоңуз алар уникал болуусу керек." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s %(date_field)s да %(lookup)s үчүн уникал болусу керек. " +"Берилиштерди оңдоңуз." + +msgid "Please correct the duplicate values below." +msgstr "Төмөндө кайталанган маанилерди оңдоңуз." + +msgid "The inline value did not match the parent instance." +msgstr "Катардагы маани энелик нерсеге туура келбей жатат." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Туура тандоо кылыңыз. Ал тандоо мүмкүнчүлүктөн сырткары." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr " “%(pk)s”туура эмес маани." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)sкүнү %(current_timezone)sубактысы боюнча чечмелене албай атат. " +"Ал экианжы же жок болушу мүмкүн." + +msgid "Clear" +msgstr "Тазалоо" + +msgid "Currently" +msgstr "Азыркы" + +msgid "Change" +msgstr "өзгөртүү" + +msgid "Unknown" +msgstr "Белгисиз" + +msgid "Yes" +msgstr "Ооба" + +msgid "No" +msgstr "Жок" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ооба, жок, балким" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)dбит" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s мегабайт" + +#, python-format +msgid "%s GB" +msgstr "%s гигабайт" + +#, python-format +msgid "%s TB" +msgstr "%s терабайт" + +#, python-format +msgid "%s PB" +msgstr "%s пикабайт" + +msgid "p.m." +msgstr "түштөн кийин" + +msgid "a.m." +msgstr "түшкө чейин" + +msgid "PM" +msgstr "Түштөн кийин" + +msgid "AM" +msgstr "Түшкө чейин" + +msgid "midnight" +msgstr "Түнүчү" + +msgid "noon" +msgstr "ай" + +msgid "Monday" +msgstr "Дүйшөмбү" + +msgid "Tuesday" +msgstr "Шейшемби" + +msgid "Wednesday" +msgstr "Шаршемби" + +msgid "Thursday" +msgstr "Бейшемби" + +msgid "Friday" +msgstr "Жума" + +msgid "Saturday" +msgstr "Ишемби" + +msgid "Sunday" +msgstr "Жекшемби" + +msgid "Mon" +msgstr "Дүйш" + +msgid "Tue" +msgstr "Шей" + +msgid "Wed" +msgstr "Шар" + +msgid "Thu" +msgstr "Бей" + +msgid "Fri" +msgstr "Жума" + +msgid "Sat" +msgstr "Ише" + +msgid "Sun" +msgstr "Жек" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "Январь" + +msgctxt "alt. month" +msgid "February" +msgstr "Февраль" + +msgctxt "alt. month" +msgid "March" +msgstr "Март" + +msgctxt "alt. month" +msgid "April" +msgstr "Апрель" + +msgctxt "alt. month" +msgid "May" +msgstr "Май" + +msgctxt "alt. month" +msgid "June" +msgstr "Июнь" + +msgctxt "alt. month" +msgid "July" +msgstr "Июль" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Сентябрь" + +msgctxt "alt. month" +msgid "October" +msgstr "Октябрь" + +msgctxt "alt. month" +msgid "November" +msgstr "Ноябрь" + +msgctxt "alt. month" +msgid "December" +msgstr "Декабрь" + +msgid "This is not a valid IPv6 address." +msgstr "Бул туура эмес IPv6 дареги" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "же" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жыл" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ай" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d апта" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d күн" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d саат" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d мүнөт" + +msgid "Forbidden" +msgstr "Тыйылган" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF текшерүү кыйрады. Суроо четке кагылды." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Браузер тараптан \"Referer header\" HTTPS сайтына жиберилбей калгандыгы үчүн " +"бул билдирүүнү көрүп турасыз. Бул хэдэр сиздин браузер үчүнчү жактан " +"чабуулга учурабаганын текшерүүгө коопсуздук үчүн керек." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Эгер сиз броузерден “Referer” хэдерин өчүрүп салсаңыз, аны күйгүзүп коюңуз. " +"Жок дегенде ушул сайт үчүн же жок дегенде HTTPS байланышуу үчүн. Же болбосо " +"“same-origin” суроолору үчүн." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Эгер сиз тегин же “Referrer-" +"Policy: no-referrer” хэдерин колдонуп жатсаңыз, аларды өчүрүп салыңыз. CSRF " +"коргоосу “Referer” хэдерин талап кылат. Эгер сиз коопсуздук жөнүндө " +"кабатырланып атсаңыз үчүнчү жактар үчүн шилтемесин " +"колдонуңуз." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Сиз бул билдирүүнү бул сайт форм жиберүүдө CSRF кукини талап кылгандыгы үчүн " +"көрүп жатасыз. Бул куки коопсуздуктан улам сиздин сайтыңыз үчүнчү жактан " +"чабуулга кабылбаганын текшерүү үчүн талап кылынат. " + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Эгер сиз броузерде кукиледи өчүрүп койсоңуз, аларды кайра күйгүзүп коюңуз. " +"Жок дегенде ушул сайтка же “same-origin” суроолоруна." + +msgid "More information is available with DEBUG=True." +msgstr "Сиз бул маалыматты DEBUG=True болгону үчүн көрүп жатасыз." + +msgid "No year specified" +msgstr "Жыл көрсөтүлгөн эмес" + +msgid "Date out of range" +msgstr "Күн чектен сырткары" + +msgid "No month specified" +msgstr "Ай көрсөтүлгөн эмес" + +msgid "No day specified" +msgstr "Апта күнү көрсөтүлгөн эмес" + +msgid "No week specified" +msgstr "Апта көрсөтүлгө эмес" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s жок" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s future си тейленбейт. Себеби %(class_name)s." +"allow_future си False маани алган." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Туура эмес күн сабы “%(datestr)s” берилген формат болсо “%(format)s”." + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "суроого эч бир %(verbose_name)s табылбады" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Барак акыркы эмес. Же натуралдык санга өткөрүлө албай атат." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Туура эмес (%(page_number)s) барак: %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Бош тизме жана “%(class_name)s.allow_empty” = False болуп калган." + +msgid "Directory indexes are not allowed here." +msgstr "Папка индекстери бул жерде иштей албайт." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” жашабайт" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s индексттери" + +msgid "The install worked successfully! Congratulations!" +msgstr "Орнотуу ийгиликтүү аяктады! Куттуу болсун!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Жанго %(version)s үчүн чыгарылыш " +"эскертмелерин кара." + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Сиз бул бетти сиздин тууралоо файлыңызда DEBUG=True жана эчбир урл тууралабагандыгыңыз үчүн көрүп " +"жататсыз." + +msgid "Django Documentation" +msgstr "Жанго Түшүндүрмөсү" + +msgid "Topics, references, & how-to’s" +msgstr "Темалар, Сурамжылар, & кантип.. тер" + +msgid "Tutorial: A Polling App" +msgstr "Колдонмо:" + +msgid "Get started with Django" +msgstr "Жангону башта" + +msgid "Django Community" +msgstr "Жанго жамааты" + +msgid "Connect, get help, or contribute" +msgstr "Туташ, жардам ал, же салым кош" diff --git a/venv/Lib/site-packages/django/conf/locale/ky/__init__.py b/venv/Lib/site-packages/django/conf/locale/ky/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ky/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ky/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71ed3a57a0858e3a85790072122b8c2f79c7511b GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lcBOuNd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04y6c<^TWy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ky/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ky/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84004396c94f69aa8786e03b30672b27dac7d63c GIT binary patch literal 758 zcmZXSKX02r7{&qP7~3JPqqbwk!r&ozM^#lCz@P@O_@jywD#9GLaEysKh-5xWrl?!L zKtDh~LFY)FIz{T*B|}wkV+SjD;ys?)%Idg?=->Cl?2n*4Bb|Ch8O>pD7ZT^v=qa%{buT`Cv*@etEN?Vy1pU% zpCsucINjP*ed^ecc@}uRKgJ;+iqg5N2^YR4O$Af14HKN&is4v-E;iUeceD?Z=}%0< znX3BaE0)#2Z(AOsbKY}Mlp)V75DGjo4T~gN=g6DHxl+tLInGdiHqFvy6z1M_w7&K( z;+coyJUY7y!pmS0ArCHt^&%aI>3Tk1rD3p&#+RG%Jk63IN8Husj(VGRW-{ WRD~o-yg7+Bfs=nJlI)Q-SVuK>A(ydT+K+xS~lg;wgCF{CPHpy-_$!^?acY$JY?!9krW^?aM zoI8_jLiwnO2wEtDh$4bzMc3uST574513jUfp4vlCrC-=;In{n0tsZR;we@KG`@i$t zBpZRw$^ZW5ede9#ecsP`^363Tel*~E6#WwV!&e5u58xFi^TQRsE(lJ6XTeipH+%!^ zg=^pev&Y5-h>PGu#@mb^Gu~soAD%$Hqwwe9gYf6zm*9!;F?;^FJ%19u8vCC@`F|F^ z3O)y451+U4e;R)bJFuTX&?mvyLdAW$l{Z-Vd`Q(`CsZ5p1HJ(Ics(&g} zylbueCM%x<>Y;|9ep5`J|Pffr{@rsQ11FHP8PB)&Kv7^79j@dM7ezT92o|Ux24Uh9X!8 z6;}^b{5zoh4MWv`m)R$v{9OSRPZctiK?3FPTB!H$go@)+P<|ga`|m@=^@Q0Mq2l^8 zd;Zr@{re^)FhBOsa?D;HII}675nf+#{cy2NKT~On3pFKZj&mVz`;}6XK1XLW0Q0@E)R6qaT z_>q@hk559)>qBOL!uTwd-+zIcpZ_s-FnN0K3@HES zLDkz12`ShIHC}b&v@tcdjC01TjMo~kH{NLcknvWi^>sVcxZG*>yP@{kz3@s7%m<;) zm)HDa8Q+>x>^Te%SaCsP^xIn!mfD&gTc9;`y9Ce+X*6 zzhL|_)OvdgYW;i_5@PU|X8(@ae+U)#kD>f`ywT2QsP{I&GvEbK{n!Il?>$hTrfH~l z=B#`TR2(-$y?=+<@3HbxC_i6>n!l&a{x?wmo`>@HU8wQ>52*d5Amr~9cotj>-vTdz z>)~Zqz8>oQz8|XIS0I1EH~3LpKZ4pXCvcdH9Z-JPKs`SbDvooZ*3)LFdKW>}+h*lK zsQP=%eks(rM8*cx{LVquyV`gol>gg|_dw0#Q7b=eEQ~jpG`qeHB8*(GBJA9Z>HLLao~osQy==`aKEdFE#rDJe%@0 zQ1kd{sCth=jo0H)e*YM1{raQK)twv*%AjjmKA^=HV}(#`|xL-++4W zAECzapP}mi5VB;0A3@b$^X9VswNUMy4fWnevv-?)E7bf9K)p9^_DhWwsBvuA^Asws z+{#xOuQT3YyxDlG@eZgsKW^oFjYrIW6w2=-#xFsQ`{PjK^R(HYfr|65j9-WH`wvj{ z{|T!8_n`Xy0#y9kwCevWj3*gSHongIdgEH-nNaP$#meUx*O`5zakJSkh8oWvsPj_q zwy%Vn^U(EX_-**>=t88}Z$NtYYNTthL~t|w9n_0bvA;pQ4Nk9L~zBk)spe=&U6?)6P7 z(8my4#_v@S+=%v|&m)~jy55GaMOvS~impP((61n^wXNtkk@lZ1t+QYAcl;k@d=Gp# z+JI)zXOYgG)z{@1K8p6COVB37686_+{BA)XM*7A$q;J}l=w$Rx^bmS4T6s-S_ypRG zYG@oig5HIc)AS=XdC(f zdJx@(K7(#YZ%400x1sl;3d+!ar0W!P3sT;4FM2=PjBZ7`M$j4lt~}FqyV1&H#x^eE z=CBoF_{(S%eG&aG`T}a9Idld3G#Wy|xwWts%^O8{aL2pqnT6xeHwccB}pwBg;tZ3=Y zK9|&^MjZ6T^>E#muri;!^f;$T<7;_y>CG}i8MuyTlkp(;y>s?}hq88O#GNi9vBZ)nIC(GU$! z1w$+eHMToSd>?j4tV}JV-32RQcagYYI7*VJ76rpoO=fsF%^dYdqI_2Gjj%9^axv&x^%rl2j9tHbSCP%&7SG0T+<53=}uhTsn`$rcq5&SrUSuw$K%Jv(LOQ83*IjLV2#hYntC-6 zH92J_T!Rw;9L|G@sVL@$(o~VP6wm~FH<-wx8l6rPc4)iV3C@+4|%aU66tiMZwaplk5bWv&%OUCpi_s<2dNyTYbU+Y`$paFwm7 zudc?yvD(DGT5V#L{)|cM^mzAv)gEsu7vAwUR?TW>te@2;%_O!)zN$kj4CNWVq6(cU zCx3-)>6BPuYj3)hCf}W9=Vf1(%hr))!_wMc;iSC{R+yF-B*#J!&16AT)PtI<29vH5 z9AbeUDjFyWntT+JbT&wPIqTA-Q=gEY@ci!0mvnC4+}V9m z*xlW8!Ity7xjIIoR^G`%Oa+31~YYE(9@?-(5#9a!$h=C1CJ9V}hGg`E@g zGX$Emr8dnp*bZC6>J<5b%eU>H80_4#Tu*IHx~y{`sirkf{hn}3CC-KdO5;=Q+;TCXvD4IDb2;Y$uno zyfbTBB&E^u<(m3<=QZ->iF$lou%KS>yj(I~=&i);8FR!-y}j;2l40lQ;@2FQxMv48PM*$vil z(G1r$qddHv9^^hbl7$(FmrQPQu~}D3|gNhSO#<@&h-howj&1*65K;Nw{nI zG^!jfof16sX_UWXy5iiMvKYtSrgVxSl(kH$_A8_EWl}1e0-sT}?_0|g)fYEv?TpI5 z;uqzRy{?4HmU(%;lUw@sJMr>9e>U@)E;Fxj&VE{8@+|xE4Um476Imu;wnZ)D3jOd6H`MY>nU$5M zv3BZ3Fnw`C$9!Z;xti@QsO-x(F;04k=&+W<^5;%@S6RVsl!37#Y|q8Xr1pL7?UoN| zU`fH|qVizUtxaYbppSL=AR8xjMGPoyR;NhFd|NM(k@Zs>`KI-TKQxxJGEUCp1L2!A1+$bXbIL}Q fm&r?rqD)MtNlcXAFQq1j(v6988)w;~aUT31)EKny literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..b0d475544 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,1213 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# sim0n , 2011,2013 +# sim0n , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Luxembourgish (http://www.transifex.com/django/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabesch" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "Bulgaresch" + +msgid "Belarusian" +msgstr "Wäissrussesch" + +msgid "Bengali" +msgstr "Bengalesch" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Bosnesch" + +msgid "Catalan" +msgstr "Katalanesch" + +msgid "Czech" +msgstr "Tschechesch" + +msgid "Welsh" +msgstr "Walisesch" + +msgid "Danish" +msgstr "Dänesch" + +msgid "German" +msgstr "Däitsch" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Griichesch" + +msgid "English" +msgstr "Englesch" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Britesch Englesch" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "Spuenesch" + +msgid "Argentinian Spanish" +msgstr "Argentinesch Spuenesch" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Mexikanesch Spuenesch" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Estonesch" + +msgid "Basque" +msgstr "Baskesch" + +msgid "Persian" +msgstr "Persesch" + +msgid "Finnish" +msgstr "Finnesch" + +msgid "French" +msgstr "Franséisch" + +msgid "Frisian" +msgstr "Frisesch" + +msgid "Irish" +msgstr "Iresch" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galesch" + +msgid "Hebrew" +msgstr "Hebräesch" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatesch" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Ungaresch" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Indonesesch" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Islännesch" + +msgid "Italian" +msgstr "Italienesch" + +msgid "Japanese" +msgstr "Japanesch" + +msgid "Georgian" +msgstr "Georgesch" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kanadesch" + +msgid "Korean" +msgstr "Koreanesch" + +msgid "Luxembourgish" +msgstr "Lëtzebuergesch" + +msgid "Lithuanian" +msgstr "Lithuanesesch" + +msgid "Latvian" +msgstr "Lättesch" + +msgid "Macedonian" +msgstr "Macedonesch" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolesch" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "Hollännesch" + +msgid "Norwegian Nynorsk" +msgstr "Norwegesch Nynorsk" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polnesch" + +msgid "Portuguese" +msgstr "Portugisesch" + +msgid "Brazilian Portuguese" +msgstr "Brasilianesch Portugisesch" + +msgid "Romanian" +msgstr "Rumänesch" + +msgid "Russian" +msgstr "Russesch" + +msgid "Slovak" +msgstr "Slowakesch" + +msgid "Slovenian" +msgstr "Slowenesch" + +msgid "Albanian" +msgstr "Albanesch" + +msgid "Serbian" +msgstr "Serbesch" + +msgid "Serbian Latin" +msgstr "Serbesch Latäinesch" + +msgid "Swedish" +msgstr "Schwedesch" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkish" +msgstr "Tierkesch" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Ukrainesch" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamesesch" + +msgid "Simplified Chinese" +msgstr "Einfach d'Chinesesch" + +msgid "Traditional Chinese" +msgstr "Traditionell d'Chinesesch" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Gëff en validen Wärt an." + +msgid "Enter a valid URL." +msgstr "Gëff eng valid URL an." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Gëff eng valid e-mail Adress an." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Gëff eng valid IPv4 Adress an." + +msgid "Enter a valid IPv6 address." +msgstr "Gëff eng valid IPv6 Adress an." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Gëff eng valid IPv4 oder IPv6 Adress an." + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "an" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (ouni Zäit)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (mat Zäit)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Dezimalzuel" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "E-mail Adress" + +msgid "File path" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Kommazuel" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Zuel" + +msgid "Big (8 byte) integer" +msgstr "Grouss (8 byte) Zuel" + +msgid "IPv4 address" +msgstr "IPv4 Adress" + +msgid "IP address" +msgstr "IP Adress" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "Positiv Zuel" + +msgid "Positive small integer" +msgstr "Kleng positiv Zuel" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "Kleng Zuel" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Zäit" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Rei Binär Daten" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Fichier" + +msgid "Image" +msgstr "Bild" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "" + +msgid "Enter a whole number." +msgstr "" + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "Et ass keng Datei geschéckt ginn." + +msgid "The submitted file is empty." +msgstr "" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "Gëff eng Lescht vun Wäerter an." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Sortéier" + +msgid "Delete" +msgstr "Läsch" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Maach eidel" + +msgid "Currently" +msgstr "Momentan" + +msgid "Change" +msgstr "Änner" + +msgid "Unknown" +msgstr "Onbekannt" + +msgid "Yes" +msgstr "Jo" + +msgid "No" +msgstr "Nee" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "jo,nee,vläit" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "" + +msgid "noon" +msgstr "" + +msgid "Monday" +msgstr "Méindeg" + +msgid "Tuesday" +msgstr "Dënschdeg" + +msgid "Wednesday" +msgstr "Mëttwoch" + +msgid "Thursday" +msgstr "Donneschdes" + +msgid "Friday" +msgstr "Freides" + +msgid "Saturday" +msgstr "Samschdes" + +msgid "Sunday" +msgstr "Sonndes" + +msgid "Mon" +msgstr "Mei" + +msgid "Tue" +msgstr "Dën" + +msgid "Wed" +msgstr "Mett" + +msgid "Thu" +msgstr "Don" + +msgid "Fri" +msgstr "Fre" + +msgid "Sat" +msgstr "Sam" + +msgid "Sun" +msgstr "Son" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "Abrell" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mär" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "März" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abrell" + +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "März" + +msgctxt "alt. month" +msgid "April" +msgstr "Abrell" + +msgctxt "alt. month" +msgid "May" +msgstr "" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "oder" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d Joer" +msgstr[1] "%d Joren" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d Mount" +msgstr[1] "%d Meint" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d Woch" +msgstr[1] "%d Wochen" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d Dag" +msgstr[1] "%d Deeg" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d Stonn" +msgstr[1] "%d Stonnen" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d Minutt" +msgstr[1] "%d Minutten" + +msgid "0 minutes" +msgstr "0 Minutten" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee14fecb9b7a91b3cb1a49177599227d3261f3a9 GIT binary patch literal 21421 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, 2011 +# Kostas , 2011 +# lauris , 2011 +# Mariusz Felisiak , 2021 +# Matas Dailyda , 2015-2019 +# naktinis , 2012 +# Nikolajus Krauklis , 2013 +# Povilas Balzaravičius , 2011-2012 +# Simonas Kazlauskas , 2012-2014 +# Vytautas Astrauskas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:28+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Afrikaans" +msgstr "Afrikiečių" + +msgid "Arabic" +msgstr "Arabų" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Austrų" + +msgid "Azerbaijani" +msgstr "Azerbaidžaniečių" + +msgid "Bulgarian" +msgstr "Bulgarų" + +msgid "Belarusian" +msgstr "Gudų" + +msgid "Bengali" +msgstr "Bengalų" + +msgid "Breton" +msgstr "Bretonų" + +msgid "Bosnian" +msgstr "Bosnių" + +msgid "Catalan" +msgstr "Katalonų" + +msgid "Czech" +msgstr "Čekų" + +msgid "Welsh" +msgstr "Velso" + +msgid "Danish" +msgstr "Danų" + +msgid "German" +msgstr "Vokiečių" + +msgid "Lower Sorbian" +msgstr "Žemutinė Sorbų" + +msgid "Greek" +msgstr "Graikų" + +msgid "English" +msgstr "Anglų" + +msgid "Australian English" +msgstr "Australų Anlgų" + +msgid "British English" +msgstr "Britų Anglų" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Ispanų" + +msgid "Argentinian Spanish" +msgstr "Argentiniečių Ispanų" + +msgid "Colombian Spanish" +msgstr "Kolumbų Ispanų" + +msgid "Mexican Spanish" +msgstr "Meksikiečių Ispanų" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvos Ispanijos" + +msgid "Venezuelan Spanish" +msgstr "Venesuelos Ispanų" + +msgid "Estonian" +msgstr "Estų" + +msgid "Basque" +msgstr "Baskų" + +msgid "Persian" +msgstr "Persų" + +msgid "Finnish" +msgstr "Suomių" + +msgid "French" +msgstr "Prancūzų" + +msgid "Frisian" +msgstr "Fryzų" + +msgid "Irish" +msgstr "Airių" + +msgid "Scottish Gaelic" +msgstr "Škotų Gėlų" + +msgid "Galician" +msgstr "Galų" + +msgid "Hebrew" +msgstr "Hebrajų" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatų" + +msgid "Upper Sorbian" +msgstr "Aukštutinė Sorbų" + +msgid "Hungarian" +msgstr "Vengrų" + +msgid "Armenian" +msgstr "Armėnų" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneziečių" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandų" + +msgid "Italian" +msgstr "Italų" + +msgid "Japanese" +msgstr "Japonų" + +msgid "Georgian" +msgstr "Gruzinų" + +msgid "Kabyle" +msgstr "Kabilų" + +msgid "Kazakh" +msgstr "Kazachų" + +msgid "Khmer" +msgstr "Khmerų" + +msgid "Kannada" +msgstr "Dravidų" + +msgid "Korean" +msgstr "Korėjiečių" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Liuksemburgų" + +msgid "Lithuanian" +msgstr "Lietuvių" + +msgid "Latvian" +msgstr "Latvių" + +msgid "Macedonian" +msgstr "Makedonų" + +msgid "Malayalam" +msgstr "Malajalių" + +msgid "Mongolian" +msgstr "Mongolų" + +msgid "Marathi" +msgstr "Marati" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Mjanmų" + +msgid "Norwegian Bokmål" +msgstr "Norvegų Bokmal" + +msgid "Nepali" +msgstr "Nepalų" + +msgid "Dutch" +msgstr "Olandų" + +msgid "Norwegian Nynorsk" +msgstr "Norvegų Nynorsk" + +msgid "Ossetic" +msgstr "Osetinų" + +msgid "Punjabi" +msgstr "Pandžabi" + +msgid "Polish" +msgstr "Lenkų" + +msgid "Portuguese" +msgstr "Protugalų" + +msgid "Brazilian Portuguese" +msgstr "Brazilijos Portugalų" + +msgid "Romanian" +msgstr "Rumunų" + +msgid "Russian" +msgstr "Rusų" + +msgid "Slovak" +msgstr "Slovakų" + +msgid "Slovenian" +msgstr "Slovėnų" + +msgid "Albanian" +msgstr "Albanų" + +msgid "Serbian" +msgstr "Serbų" + +msgid "Serbian Latin" +msgstr "Serbų Lotynų" + +msgid "Swedish" +msgstr "Švedų" + +msgid "Swahili" +msgstr "Svahili" + +msgid "Tamil" +msgstr "Tamilų" + +msgid "Telugu" +msgstr "Telugų" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tailando" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Turkų" + +msgid "Tatar" +msgstr "Totorių" + +msgid "Udmurt" +msgstr "Udmurtų" + +msgid "Ukrainian" +msgstr "Ukrainiečių" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamiečių" + +msgid "Simplified Chinese" +msgstr "Supaprastinta kinų" + +msgid "Traditional Chinese" +msgstr "Tradicinė kinų" + +msgid "Messages" +msgstr "Žinutės" + +msgid "Site Maps" +msgstr "Tinklalapio struktūros" + +msgid "Static Files" +msgstr "Statiniai failai" + +msgid "Syndication" +msgstr "Sindikacija" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "To puslapio numeris nėra sveikasis skaičius." + +msgid "That page number is less than 1" +msgstr "To numerio puslapis yra mažesnis už 1" + +msgid "That page contains no results" +msgstr "Tas puslapis neturi jokių rezultatų" + +msgid "Enter a valid value." +msgstr "Įveskite tinkamą reikšmę." + +msgid "Enter a valid URL." +msgstr "Įveskite tinkamą URL adresą." + +msgid "Enter a valid integer." +msgstr "Įveskite tinkamą sveikąjį skaičių." + +msgid "Enter a valid email address." +msgstr "Įveskite teisingą el. pašto adresą." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Įveskite validų IPv4 adresą." + +msgid "Enter a valid IPv6 address." +msgstr "Įveskite validų IPv6 adresą." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Įveskite validų IPv4 arba IPv6 adresą." + +msgid "Enter only digits separated by commas." +msgstr "Įveskite skaitmenis atskirtus kableliais." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Įsitikinkite, kad reikšmę sudaro %(limit_value)s simbolių (dabar yra " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Įsitikinkite, kad reikšmė yra mažesnė arba lygi %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Įsitikinkite, kad reikšmė yra didesnė arba lygi %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklo " +"(dabartinis ilgis %(show_value)d)." +msgstr[1] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[2] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[3] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklo " +"(dabartinis ilgis %(show_value)d)." +msgstr[1] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[2] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[3] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." + +msgid "Enter a number." +msgstr "Įveskite skaičių." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo." +msgstr[1] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys." +msgstr[2] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų." +msgstr[3] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo po kablelio." +msgstr[1] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys po kablelio." +msgstr[2] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų po kablelio." +msgstr[3] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų po kablelio." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo prieš kablelį." +msgstr[1] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys prieš kablelį." +msgstr[2] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų prieš kablelį." +msgstr[3] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų prieš kablelį." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Nuliniai simboliai neleidžiami." + +msgid "and" +msgstr "ir" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s su šiais %(field_labels)s jau egzistuoja." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Reikšmės %(value)r rinktis negalima." + +msgid "This field cannot be null." +msgstr "Šis laukas negali būti null." + +msgid "This field cannot be blank." +msgstr "Lauką privaloma užpildyti." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s su šiuo %(field_label)s jau egzistuoja." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s privalo būti unikalus %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Lauko tipas: %(field_type)s " + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Loginė reikšmė (Tiesa arba Netiesa)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Eilutė (ilgis iki %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Kableliais atskirti sveikieji skaičiai" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Data (be laiko)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Data (su laiku)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Dešimtainis skaičius" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Trukmė" + +msgid "Email address" +msgstr "El. pašto adresas" + +msgid "File path" +msgstr "Kelias iki failo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Realus skaičius" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Sveikas skaičius" + +msgid "Big (8 byte) integer" +msgstr "Didelis (8 baitų) sveikas skaičius" + +msgid "Small integer" +msgstr "Nedidelis sveikasis skaičius" + +msgid "IPv4 address" +msgstr "IPv4 adresas" + +msgid "IP address" +msgstr "IP adresas" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Loginė reikšmė (Tiesa, Netiesa arba Nieko)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Teigiamas sveikasis skaičius" + +msgid "Positive small integer" +msgstr "Nedidelis teigiamas sveikasis skaičius" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Unikalus adresas (iki %(max_length)s ženklų)" + +msgid "Text" +msgstr "Tekstas" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Laikas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Neapdorota informacija" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "Universaliai unikalus identifikatorius" + +msgid "File" +msgstr "Failas" + +msgid "Image" +msgstr "Paveiksliukas" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s objektas su %(field)s %(value)r neegzistuoja." + +msgid "Foreign Key (type determined by related field)" +msgstr "Išorinis raktas (tipas nustatomas susijusiame lauke)" + +msgid "One-to-one relationship" +msgstr "Sąryšis vienas su vienu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s sąryšis" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s sąryšiai" + +msgid "Many-to-many relationship" +msgstr "Sąryšis daug su daug" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Šis laukas yra privalomas." + +msgid "Enter a whole number." +msgstr "Įveskite pilną skaičių." + +msgid "Enter a valid date." +msgstr "Įveskite tinkamą datą." + +msgid "Enter a valid time." +msgstr "Įveskite tinkamą laiką." + +msgid "Enter a valid date/time." +msgstr "Įveskite tinkamą datą/laiką." + +msgid "Enter a valid duration." +msgstr "Įveskite tinkamą trukmę." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Dienų skaičius turi būti tarp {min_days} ir {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nebuvo nurodytas failas. Patikrinkite formos koduotę." + +msgid "No file was submitted." +msgstr "Failas nebuvo nurodytas." + +msgid "The submitted file is empty." +msgstr "Nurodytas failas yra tuščias." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklo (dabartinis ilgis %(length)d)." +msgstr[1] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." +msgstr[2] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." +msgstr[3] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Nurodykite failą arba pažymėkite išvalyti. Abu pasirinkimai negalimi." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Atsiųskite tinkamą paveiksliuką. Failas, kurį siuntėte nebuvo paveiksliukas, " +"arba buvo sugadintas." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Nurodykite tinkamą reikšmę. %(value)s nėra galimas pasirinkimas." + +msgid "Enter a list of values." +msgstr "Įveskite reikšmių sarašą." + +msgid "Enter a complete value." +msgstr "Įveskite pilną reikšmę." + +msgid "Enter a valid UUID." +msgstr "Įveskite tinkamą UUID." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Paslėptas laukelis %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Order" +msgstr "Nurodyti" + +msgid "Delete" +msgstr "Ištrinti" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Pataisykite pasikartojančius duomenis laukui %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Pataisykite pasikartojančius duomenis laukui %(field)s. Duomenys privalo " +"būti unikalūs." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Pataisykite pasikartojančius duomenis laukui %(field_name)s. Duomenys " +"privalo būti unikalūs %(lookup)s peržiūroms per %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Pataisykite žemiau esančias pasikartojančias reikšmes." + +msgid "The inline value did not match the parent instance." +msgstr "Reikšmė nesutapo su pirminiu objektu." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Pasirinkite tinkamą reikšmę. Parinkta reikšmė nėra galima." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Išvalyti" + +msgid "Currently" +msgstr "Šiuo metu" + +msgid "Change" +msgstr "Pakeisti" + +msgid "Unknown" +msgstr "Nežinomas" + +msgid "Yes" +msgstr "Taip" + +msgid "No" +msgstr "Ne" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "taip,ne,galbūt" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d baitas" +msgstr[1] "%(size)d baitai" +msgstr[2] "%(size)d baitai" +msgstr[3] "%(size)d baitai" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "vidurnaktis" + +msgid "noon" +msgstr "vidurdienis" + +msgid "Monday" +msgstr "Pirmadienis" + +msgid "Tuesday" +msgstr "Antradienis" + +msgid "Wednesday" +msgstr "Trečiadienis" + +msgid "Thursday" +msgstr "Ketvirtadienis" + +msgid "Friday" +msgstr "Penktadienis" + +msgid "Saturday" +msgstr "Šeštadienis" + +msgid "Sunday" +msgstr "Sekmadienis" + +msgid "Mon" +msgstr "Pr" + +msgid "Tue" +msgstr "A" + +msgid "Wed" +msgstr "T" + +msgid "Thu" +msgstr "K" + +msgid "Fri" +msgstr "P" + +msgid "Sat" +msgstr "Š" + +msgid "Sun" +msgstr "S" + +msgid "January" +msgstr "sausis" + +msgid "February" +msgstr "vasaris" + +msgid "March" +msgstr "kovas" + +msgid "April" +msgstr "balandis" + +msgid "May" +msgstr "gegužė" + +msgid "June" +msgstr "birželis" + +msgid "July" +msgstr "liepa" + +msgid "August" +msgstr "rugpjūtis" + +msgid "September" +msgstr "rugsėjis" + +msgid "October" +msgstr "spalis" + +msgid "November" +msgstr "lapkritis" + +msgid "December" +msgstr "gruodis" + +msgid "jan" +msgstr "sau" + +msgid "feb" +msgstr "vas" + +msgid "mar" +msgstr "kov" + +msgid "apr" +msgstr "bal" + +msgid "may" +msgstr "geg" + +msgid "jun" +msgstr "bir" + +msgid "jul" +msgstr "lie" + +msgid "aug" +msgstr "rugp" + +msgid "sep" +msgstr "rugs" + +msgid "oct" +msgstr "spa" + +msgid "nov" +msgstr "lap" + +msgid "dec" +msgstr "grd" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "saus." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "vas." + +msgctxt "abbrev. month" +msgid "March" +msgstr "kov." + +msgctxt "abbrev. month" +msgid "April" +msgstr "bal." + +msgctxt "abbrev. month" +msgid "May" +msgstr "geg." + +msgctxt "abbrev. month" +msgid "June" +msgstr "birž." + +msgctxt "abbrev. month" +msgid "July" +msgstr "liep." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "rugpj." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "rugs." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "spal." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "lapkr." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "gruod." + +msgctxt "alt. month" +msgid "January" +msgstr "sausio" + +msgctxt "alt. month" +msgid "February" +msgstr "vasario" + +msgctxt "alt. month" +msgid "March" +msgstr "kovo" + +msgctxt "alt. month" +msgid "April" +msgstr "balandžio" + +msgctxt "alt. month" +msgid "May" +msgstr "gegužės" + +msgctxt "alt. month" +msgid "June" +msgstr "birželio" + +msgctxt "alt. month" +msgid "July" +msgstr "liepos" + +msgctxt "alt. month" +msgid "August" +msgstr "rugpjūčio" + +msgctxt "alt. month" +msgid "September" +msgstr "rugsėjo" + +msgctxt "alt. month" +msgid "October" +msgstr "spalio" + +msgctxt "alt. month" +msgid "November" +msgstr "lapkričio" + +msgctxt "alt. month" +msgid "December" +msgstr "gruodžio" + +msgid "This is not a valid IPv6 address." +msgstr "Tai nėra teisingas IPv6 adresas." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "arba" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Forbidden" +msgstr "Uždrausta" + +msgid "CSRF verification failed. Request aborted." +msgstr "Nepavyko CSRF patvirtinimas. Užklausa nutraukta." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Jūs matote šią žinutę nes šis puslapis reikalauja CSRF slapuko, kai " +"pateikiama forma. Slapukas reikalaujamas saugumo sumetimais, kad užtikrinti " +"jog jūsų naršyklė nėra užgrobiama trečiųjų asmenų." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Gauti daugiau informacijos galima su DEBUG=True nustatymu." + +msgid "No year specified" +msgstr "Nenurodyti metai" + +msgid "Date out of range" +msgstr "Data išeina iš ribų" + +msgid "No month specified" +msgstr "Nenurodytas mėnuo" + +msgid "No day specified" +msgstr "Nenurodyta diena" + +msgid "No week specified" +msgstr "Nenurodyta savaitė" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nėra %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Ateities %(verbose_name_plural)s nėra prieinami, nes %(class_name)s." +"allow_future yra False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Atitinkantis užklausą %(verbose_name)s nerastas" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Neegzistuojantis puslapis (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Aplankų indeksai čia neleidžiami." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s indeksas" + +msgid "The install worked successfully! Congratulations!" +msgstr "Diegimas pavyko! Sveikiname!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Žiūrėti Django %(version)s išleidimo " +"pastabas" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Jūs matote šią žinutę dėl to kad Django nustatymų faile įvesta DEBUG = True ir Jūs nenustatėte jokių URL'ų." + +msgid "Django Documentation" +msgstr "Django dokumentacija" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Pamoka: Apklausos aplikacija" + +msgid "Get started with Django" +msgstr "Pradėti su Django" + +msgid "Django Community" +msgstr "Django Bendrija" + +msgid "Connect, get help, or contribute" +msgstr "Prisijunk, gauk pagalbą arba prisidėk" diff --git a/venv/Lib/site-packages/django/conf/locale/lt/__init__.py b/venv/Lib/site-packages/django/conf/locale/lt/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/lt/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/lt/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fbfd013c2be360512e326efc0597d58da884040 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lPKkbed}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04tO<;s5{u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/lt/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/lt/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..264593c38c7bae24f38b14d9609765fa792e2dc4 GIT binary patch literal 962 zcmZXS&ySiw6vsh9@pm=bo_gTI!DPX^*)*jqis=FdFbxw@f({z2$i~4<8^_hGl(zVQhjHy>lA0G1kJc~83}^9Nz;h6LP~ZZAvo7AT zU%|dS2Z-rNs7pAlzOwV+a4v~~x57#czSMv6m6kf{sI@Nv~G)AH+Ib%&%L=!a3sd5QA zNhS}vmL%$qqN%2w3ErKfk!WS4Ysi{zI{B{euc**&Jk^b)(sH!1^G%Yzg5F6sRcCWE z?Pq}ANmFDWE~6EBcO>0U74g9_q?xFTrlw=Ltj!Hk9pzX@ohx4?-I?gxd^S}lzlc4J zuj916diO(nj=Vjx^#ek#JqnkHz}rR0p7@b`SlDBKk0O4y4>#U2vY))&ll|Z?Y~)8C z|L87%xN8sDaO3XQ;b0l=R)cN0bhqAM8x2JRYB!yC8&zt@kN;*XSeOD2gKU OA44%T!%%ICWXOL+4)lQl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/lt/formats.py b/venv/Lib/site-packages/django/conf/locale/lt/formats.py new file mode 100644 index 000000000..a351b3c24 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/lt/formats.py @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"Y \m. E j \d." +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"Y \m. E j \d., H:i" +YEAR_MONTH_FORMAT = r"Y \m. F" +MONTH_DAY_FORMAT = r"E j \d." +SHORT_DATE_FORMAT = "Y-m-d" +SHORT_DATETIME_FORMAT = "Y-m-d H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '14:30:59' + "%H:%M:%S.%f", # '14:30:59.000200' + "%H:%M", # '14:30' + "%H.%M.%S", # '14.30.59' + "%H.%M.%S.%f", # '14.30.59.000200' + "%H.%M", # '14.30' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' + "%d.%m.%y %H.%M.%S", # '25.10.06 14.30.59' + "%d.%m.%y %H.%M.%S.%f", # '25.10.06 14.30.59.000200' + "%d.%m.%y %H.%M", # '25.10.06 14.30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..db239c6961a8ed72c071f4bb66e25b99ea837b54 GIT binary patch literal 28306 zcmc(n37lO;o$n8bEKwHOQIV5CLbs+n2|IxR+1Cys-C-5ux%ZyFeR7v`Jxhmf#y7-; zH~JK3h`WNKD2_p&D2h4^<8tGu<1!*o#c>&NdoIlAxci*v`~Irx+b^8Tj|f8p@A z4*%rv;L|*BHuVk%4+ftLGHh=EJOo?-9tob~-Y)}>Aiokk9K0Mn8oV0R_r}0O!6tYd zn1ibK3WvA4_iq7@rTiV>)4&hA@=t;+o%dPrFz~D3@!-FJ4B7hycm{a1Z{ME->ixx_ zzIz2|#sg}cW1#v;z~_RKF8?l2_1_0--1mad06z|Dy}tnRpZ7!l(fAK#k<{POpz5Cj zs{Lu;G2lE<^F1F_KkGrYyB<6W90gTB2hRlm0#v&@L5=^zpz41fRR3QEweAmtqJtlU zn#b%po|l3B;OoKL!Ex~1(>?F6!Mnjb!6huxJHSW4i@}%A^}I{KPl2MdgXVeON#GKP zTR^Q_1AG?vVvw%9H@W=ZgPPyNp!V%im)B%eemtmk>jTyAQc(1H4R|6r4yxX(LCyCL z@EY(V;3n{xKF`xp2|&8`wu4&l+rh)Z_c*)<%(uMb4P~-XQmQ1tjW;KAUXAWP`o1w#7XL!i#tA3&|+tc8~TXM<{YJ*e~Aa`+O5 zuXXrtP~-Y2=!2gGHUCFI(ZNqa&Ew!jw)}8V<2VLf3?ApoH-f9kUkTF0yA6!NFM*JN zcgb0vw+xKH%fP!qo!3V}&42#ccD>IAb$%`Zj{%24&8q@xTsMM8gD(X&?wzjut)SNV zPFMaOQ1$KsSAw4eSA&P0W7qj|Q2kv4YJUUpSTJ_)Ujk}euX6dFp!mjZpz41NRQrDf zMgLz0b#A`}ivRo()OgN2*Y>j*RQ;t6*Mg$&D?qL9^$yDpBT(OuLDBQL!y7?;=Oz$Q z;oT0-0UrRFqW3+JCHGD^58el^2F0gd4r=`G03~N10JXmlgRoxjm!QUb-1&B0PXhH_ z9~7O<1&;&QfvWccQ1dA{+~zO=PojJhRJ~h4&Exf;==(NMzODA z`tG@))@3m`54;T2`Kp52ryZcq=WD@Rz_)?=-r$AyJ7?G>yxEn%(cv!l{sB<*{2-`$-*@G| zad-rqrSF{zif$J=ybM&kP2f>r0P1@!Q1xF19uK|&)I9HY_yLFaI{c`^`yGD5VcX$n z9e%;#KZ8174}n^rZ@cnG9R3ItANZ+z|EMef4^Zdfx8SMZQ#jco(<;{1Yg8n7=Z16r%eCcPP)??l> z&wI;3@E|ZF|C!~M4_vguo`aWyIv2Nt93AiD;41JJ;A-&vl~(TjB`ChU3)K1gCU_S3 zbSiVyy-PujD+9%!-vT}r{H((-Ief_BHy!>fsP*{~crbVbA7!}S)4@Z)qd=|aaiHG& zpy>W|Q2R3oiVn_q`E}r--2x$=)V`~;|Zd>%Xl z{5A*)c?Ykx{a)s9EvRvB1~t#CL7k_qpxVC(6n}decm()1SN^x4>faB}20snzJpB+n z0sOUlKWm-k%g+Gy{!~!(H6K*_QSirL1AG+RvYxd9mv4aQgTDvA3;t@z^L__@b))Ce zwf9e#TX}cFCS(Bl5%3i7^`OS{0Z{XJ5Y)N(0XP>t_zKIv`#`PhN|%2=cs%(DQ2TNV zsC~K120MxlU3sgTFK}3vqHK_hx1B#yC0IJ_NgIeErfmeZdgOZPj zY_a=)45;s&0zLyg4OBmiK()Kjy}!(ruL8|?LG^RB!wM+A&;oDepk?4Y$sfi?KMU>x zb?&mOZT}PC@#J@aM}n^hbzbfSHI92hme%_WH~^k}jcvaQ)cDqe8pkkrIC#A)A9dIS zHUDu?>$d~cd~R|0I`{sqpxWOBs=p6_n%Bo2eg@RI9t1VcM?ls81^8FsA3)K=ORlxw zdk3iXe4oP)f$H~T;4$E*LG8~&uKequ`uiTZ0Q@Pa??3Z8d+z3eTGtD~Gr=XG&T$B8 z{ay*4489G#0Q@K@di0T+U>6mJ3)J+wjX&zC{* zq5lDDy?y|y|3881|A@f$cPu!U{Ifx=_cHJ>@G4O4w}Sm(6FdQYBdGDbAJq5m0agEg zhiy>b`2wi#JPe91A93%0;_|vR3TR^q{6nF^uMNsSUAgFbH7(4@fN@(f057hcy z489gz3u;{70oBjh=~d7BI(X`s{oZdtjqi^x|CGp`1|fZFeQ;B0UmcokR&UkJ9r7@S+f_5fc8LgL{06uLJicl3n?bF^Eg;+O{ebizq#u*MPx@aZ{r-aF z>w(|TNdIY`*dH}=zlGq9B+<+7NW;84kMuI0-$GjA>SjE@f;89VpU1O)e`~?~dkXJh ziQYFz-{~oz=bjJeeaiFCU0%FoBV{+cyg=vhPSSOx?~#h%NyP)GGcCTWpVmct^q?~C z2mACsM`D@1qv^l*x2z|#(LJ9^oqy!{bv^Gs;GX+=_Y~4*(mK*IQt=z&VUqN6(qWXd zjmEF2JwJ&2FgVNA|18fZx@XbeuSqW^EhlL&^;D?+v71nJ4?tZ2(8yJClCy z1}_E?QQj)>2yhk&Rm?kz{Byy(NX2gfWyNnE&)+7qlyp;32p&iISHZJE@z*z!{+*=X zX%>ur`X=`*cpFKyy^uB^2Tv#I_b;SpQ}$EvBcwl*ir=m7;WZA=2X~PE3+YjkWcVSp z<@gx=`D@@=8|2la5d>ll764IVE&!Uzt5x205||{BI)-|3*HOC&yY@c;lXNW49B1!%@Q2{jU7e@%d3quH>&ktePvrTNE?>YZ9$rcMZ=`!jeWX{D z-cEWc>F-I;r0oeL{k}wcfb>Dq0@8maox{7o0*jwy*PyGfvVSFQ(F4CR(#52;B*`|( zfh$P!sed(i0eB&4G3f}>FDW~oq+dW9C%u{UQPQEje*}CF=})8vN&NQ~(nY+hfR~bf zL7E^HzjyPnf%I>rE2#He(&Z%m&IMl&UPAhxq}i^VNAtU*cmSV9dKc*>uIxyME5WPW z^I_o0q)S{spXd2U?w#OSq!*DsMcPFwe#>3`ITZZf6<*{p0f%^hB{&doC2b;~ zlRiN@nfy;c{hm$QX`av@!4Hwnae2WS>W;YlWjue&JwL}`0Vnb9!(=WaebE*ECDGvwqQRWGLNFOiY`2x}?>HVbLq?MHa1{@?kOgfaL-+a=2q`x73 zh2+ics{~n?MUAjO^~-TyuQVUI=}nnm3jL^=g-I(3v#`RmuR8u@+zkD>edRn!!e+Kr zWh&}VFY=?zZv+!+7&J;zHIMVukCURf8E1ZYLzHHNd~!4j>y@qbpcK~mY9mk0_wr`+ zqCE6RX=F#Wb!xr2ef2o5<*lvRM2jz)j*__1pAO9J%VIi8!g`QJaWfr@TKdXfU#7fm z#1-@PsF`L#vmE-{qil>1n{U$D+`jRko`?O3Ux~xipE7>ac55>*i)PwoW09In9dJ-j z!k{u?=WWKjKMhkpzGus3-srFRm0*IQcb+v5n;DDqWJ;#{su4BwEbP3r*`C*NGaKu^ zRj&JTdl=R_@097jnh1mL7nRYgG@1+W!AQzr!Yz4q(AlM`v|VZmk!SMmip_4FW>0LrEOt3^Og>IOGlHa76i@I zTUsv#%_wN{Pz@6v{G~}yipt*7Rua{{B9l}h-bfYw;T8?jFiL#1!gV!%~@hZ-m*BZ zhji7q5^4(*eS3|^BOaV zB+3|SXUNO)dNnZ9T9z|YDlQ-1yviSEkw&AkIW_)h5Y@xVpuag}MjXkYM7I=p%Y!Va zGqdGmL9hq)sd+1+gi*!G1S744H-sF!Bs2#-sMq7|%zzyV2fY<+bT#%h zJy=vWQ539*%Q-}onbq@FG!cFs)6W&D`aE+6)wO#tGeI)q>tT^5mv=$IG|=Y^{5eL zTdf?Md06RKyuGL}ZDw@bHVPu>{!-QfWZk)2`7dREW2HpM;jOJ`g%YE=>Z z+JBB~Q@jq23j4|8>Ag-R2D{=kufsF;tF68fz)2e|aWvm_pgwK6;WuzYQ*4g2Ew^m2 zTaWiq#b3K={G5Ve&G?RaQ0KgT)YDS>3xTTf1*$0_Zz_D?o!?6*Y|_x2i5(f(>X%@Dw6{Rh*QJhUxJX zM%AXjKAiCTG+HDTyMtPcz-R8ph~Uvor{7zJor5@El|)L?zX7A?t;$gpWelN2mEtrs zqI_$s4hhPtG1D4H2?$CIu@shrJT<1%o??I0_Qb(=LVq;}vaHo!9mYx3J|qp3&wR`k zsb$t)vAT)3I+3EjhP?^5duvc-C;-Z*3W+m8xZLZ6)^Bj`|aE zZnO&YSk_NM{NhHK1-=B`k~v8@iY^`|bByMO-m_#*Gal%aUgBo~RFA>eEZ6f&(F2EL zvuil8DP~#|i&>gZGts~pMpBr}_u*jyOO%9-c--g^jX{5eK^RT7mBbm^n&>Ejo1(gj zLxv(M(|?$ByAq?V#4J=2l{2a{Zun$*EG*X;)}U{vikZvyabnA1qP<7mMR~+d7!S%5 z98rc6)S-+fQRja2}B^8d1vAb;oX-QtF<0AYm6#pU{O*TKo3UgOQS4=P~Gy5 z1x$@^j$$Aue3T_m{8AEcPbDoFc9a@=DP!qIVh)`}89?65j_Kkjj@85!9$toh3xkfpwVBd(U9&qjdlu~wS8 zxDFnILVd?Lq!`o49Lu%V>Y#|dV@Ilaz_aD2k|l;LAaCYny$q0v>-*9F*`GQHO27&zme~(ub)V&6O-PCARAX_8?YO5tRg*Pqa^;Y zIGb|$4H!F+Q&ry{LiJ}!^kN9xZGzO`smb_cvaDi~I1@PAFr7w}ngcI6gsxf&S%oZU z!1^7R8T5x-6~h$MF1HtFz+W-wUjyrq_oo@s20E60jAl~Gt59AGJJOGk6r5K&!s4ZG z$w{b@F-;6)@c`V-@m`UI95_QVBgY~k40s66J7gC)<>3a5)~@kBgxN(BcLu7k8O@vZ zgBjU96yIQ~L5Cq5V{*mHWm{G+kqtiRZNzTHYTro5NdVDwd*2v)8>PAR@_88iXp9tR z(pY;1v%_viGVW2iD-=54S0#q)BVfx|;9*4tX3@5@1!-PFaW}U2%*Fn4F*CEEh^N?c zTgft}sa4jbnNo~hfKwi))QfzpGA1MajkqIA2<$WZat8 z8}oX-Yw+x0LJxYEV`9tbzPuS~pE;)DpvF`-+kANf^Y<=KQ=E`xZ_|*sNe7I*k^tq9 zA}%u+7|Ij$sZBR#rg#YZAvp-OsZ>VhCXp3ezsX7x^eb8TW<@G_3*n>lZ^)hnVn?lv zhY4*Ti^^lu9FcT)VBH*GgO2}jhHo2jqKzzkp3obHXs=sT+Rr`*XmnK_XM7o*s-bl| zSpwsL8j{n(cIc_hq+Pxg-=Jm3tdFy?P8UVnLITZ2S2E=0Mzfdq-QjjCSc`41?R#IV zIp-SI*5mBj6eIQE+CKhfQGnb{ymy6r6r>H5$Zoy7xeec-w>j8O`zAWAAq{VH3@;KD zZO-9~;Bb&B<%#&qa5>J5XKi&5LQvjtSQm)}GO{qD%42ba(?#6Ec#qjOOUa^pDa-6> zhY7gaOl>c{jL6$#yWHP?TA4kU!ziU@@D_dKN5oVjEJed_;2>zc2%};227f4MrQUEo z9uH~;tSfXFtH$rkTRLLKx3SfEG17i-c*cd&2Df&xWEf2Q@QAv$F$-FJK1d7lp!jebYq-@9pw!68einy-Gbd(a_ z)|&BlYPGOEF(llya5-0D1=>xsrZTUPLR4XuCFUJ7E+|ITWkAWHlO#DO86UdogPzft zI;!55q>_7ECQF!nSBlGYxDCeF)RlGY$W<#Y+AOQGKA9`SW;mJ45bRuqTp5L#QS3sG z$L+Ft##s6#bH=i)l`dYepc0qU!HV&UW0vU_W)P3Tg0Q*3C`mH*`_lzTdD(O6f;niD z+_+#bZZ&i>hmABQRNUg@$(&1EP0>V{Uc4Z%)|7L*_jKu9g`Px$Z;3Xp3hV6WHE<_^hTJcA$O)+9#9&j#_-_-I7T{7ee;FF5_H>GGSeC3 zrl~9@z&MyiQh{M58P?(8{!e`Rl#NYojZDjU-TBw@Nt&b5o7uQ3|NmxVcyr-BdEAsZ zx&ZZ3QYBq*dL_gvc}$w@ng)g-Spf7evqwcw_E76Ohhi)z)DWFyUdDXJu^ONb@D^(jpVelygI!aS69=EaKTM4!o=L8NJi$=?v2Sgwa6M*)61qeMBAU< zJ!<{*qT#TmvN|Whm>tCwdkXB8YEPBU6ZFXo;)PP~?=07t7gfdp&D^Ql}4J>!Uw3)6ZbrbZjMw>A6Dv4ujw7!`BSR&na4 zIM=jVTZ~iPe5I$7d9?RMQdY>Kml*$uj(@-&uH{zCMP@+y*YFz{8X8!!!te(w?D5?h zyPUbVHER|R4PCc5O|Kiw&F}i_pNwvM206nQt{b`bN%_ikD^^_ZUw0i}xPEA8@%25E z*pE5L04VHIyEcB`3}fv#@&!|u%{11n-5`4>vG={4srScTl)ZdR)ZlJe9`6_T(evKu zr=Yo@bAw!5SIs<#Zv9bt{vWg3j%xl`HJx^*n2Y&S<23fO<&@Zt18Cy{K8$NrUsuz2 zdz-ALHL$iaaHZTFadWY6b+B2RjfZVuD6K}7fn|9$9T1i{VHgv1gj%^}WYxe0 z-Fo^K9{+)r&M~&wzn~OlonbEa>*KRFnOmBHRnm00kFb|E>5{WA!r!j@njL2xawdlxEZnAU=*l8EO=ax9v5Yws{Euup339r%0sl#cL$M$s|UC@gCN`oxqNy6!6ld+iZH$Cx`l zHJ*$-AbxJ@pr?eu(PH-2oU9GWWLyx!*hY{qIKcbbIdy=F*Sgi@06U zoO-fTbKRH3hv9jcp6}G=b*c9?W;gqYky3Q-3a00KDztYt!`*j8-5M%j+ou-v*5LlC zy|aCP&!~!$PMe~j+e;OLx$~OL9&d{Hy?_g1D)wa6t|yy6R&?KRy}h%=Ewgr6p%pSO zxi#Tw&+xuZa9@qD65SUly05)s_su!lTgg5wt?z!Iy(_^mlE)ds=Uppl?}A@>F2B?S z`L%bkulTlIv!v19X*x1Nek?NWj84jz6z9jev3)kH?fZFW1N|y|%zVETq_x~Dp&ize zC>-aJsGjx?Ro%dKI6)%B`>|SiKaq8*3Uqigjj9v)XQYD8^7N2D&M)59_D*-u$014l zY}_n2BQsEi`)P)nvu;#!_hpQVEY_qngc3Gpdq=Z(5+y?a+B*^k8*$5Ry0SN_6qbUV z_=IK{O;*D3_71GRO;OlNg0#JBTi)P1)PZ@kX@g!34_e)>!`eyMf3v+S;~oH3$HHe^ zSJjEGGav3Qw_n4Vnqi!07258~BD*dThP4)^&7URlK}|K@hR;rpoix~ebI3U5mZM39 zIhS&?CKc{ED2~D^QOah3xi=Okj62J@HQ0TJxTx2Db%+D0Vh4)Y(=__vGkTeuC_z(F z3MVbs?G#0c&um*nEmtCL>R`r!)O>V*Zu4viA>`4sr7I@eI|&d~7-3Dmq-{BhbVW>x z8}o7I%z@0as1rcAK5p!W9J}FzH4{GA-ce@NytVZz17ku6MCK{dT*(zOUO;Z|aY)LO zRoi_B-{*d+#@!i?D1Xl0!wBd2OvuF(AYw(Mo0wl6-i}X;%N8v*EH{WIt)|7~pa7rs z#&u$50F`ngYH~MlQf+WyIU<+ijDNEFib9N{{|CLbpnew{`6SHr@%6U%xjxzb)nbnB z~G^$3XH*DlEPc^M&J{w0yO+Wi81bSOMUQuM|~ATob8&K?TI~9B5WheP$^yKEY-(Bso zn@@b6`_bhA&UZh0+~>SE#+4*SDHC%woV8Fo39>Mh+OxNaBx(66;z_T1wpAgeGi)nt z8}5wEG?GvP6Rnw?;mp0OiJ;#7c2(=4vcT8{P}u(VuolC`$l6v^Zz6nMU$Fho8z+V2 zckjG!?|_weYgpB%r=&(iMh$JiMWG?o5RRStQ{GBJa@RttHe)SCo6h{wUTy5rGrm~Y zr1&h759Otr`_@UeM+@wyywN-DVvzR50;5zEouQi)uOkWbnc9WDBE4r?MqSJcb#aCs z_x7ck_NExcoZ^lO)h$kfIh~ElMW50nM1I((EH*b>wYZ{)9W+Zc11slwKoyeOF^=|z zUT77ua5Um#XNFN8$QK{qm-f0)b{g1kIe&+v06D91qRv5~Mh!JmE9``{M%5sf+Kd}F z$S2cj)Fef8%QTnVMmQVUMR*O2a_yeqsQJg33SLa@<=CvZusxTDpcx-NY{0N zzl}BYBdi!=n=w2NIL_4?B&?8Be09M7n=3>DP4^w<8qN3Fz{;eyqA+x_82T_a8Ok_} z)!00oNyJ7oWI@f^1P!PfF3|Z@Z^UbRmvJ*OtPpP#6hUx>5G61fj}n#?akI_ljm2cpGN&4Fh>WZ3Vu`c|^nhQZ6BFCsHBL^-*;gd2Eh@xF6719( ztQhY|v8+1z3@YJoc3418yJ~K86fZETs87N`hn!`!_9MmUZtK!iICqJjOH_ z&-Y`X1%32xn%I=3g?$V^A@w*^ zxFUB>+B13OG*^aPZwZVKYQ*>#3svkSQT3Df>?JUXk){W8uWntCoe*1M_@E-FF%WOk z{Rh;>lVP9sI>hkKo*wH6pvQ{0#RZXja(u|jEra!jo#sTv;0lv!~V(LT%Fvy+iT;!=*Y1fPN8a812N z(7w-v;<{Wt*hb6-@vKu~akB(E=Wn*Oer6xx$U6TG>t~4uxq&b>q+#+GB?zjhE1)`I zxSRNk(A_s%de?b|Kf!D`H#+-CTtXDEJH-jXlQbwoaPD3{o>wL#DstNGbJ)AK(wYegdIcsGHH^J3d+j6CICfJBv>+~=-oRb(vPIqtJ zJvbkBy8ZA*`X?w?45#odZEWv^NJRbeCr%5^ZQ|aLYeO1~ab5Pl??&TFK)bI;-bONA z^0XddzF<1SPQ`}{*%ApQC4kUcQ+ryezX`e%dlkDe)C_}+@ywzk1V*PQ8oE{TRU}F{9&2gv%Pz)TyU+bwCj09~$~o##psx;S)<)2PR}-X*)_Ob$ookRm zZ+|)~WL4(^WB;1zAa=*#LVBfLcU>8sfk?Uk62WyQooI?>+`B7hR$Aa~vi^ zI4F^LoG$*5gi<;Al5Rn!jb~qs9F!X|Mzqt7Aq+^H!%S5|1=%J35GL;# zLr;%|o5BX{V%`+vd_r|ZfirY8-5lT7N1u3I4WecERIh7&gK_G&;z?x7u5lKAnk3u^ z9qP`Y$0b2)7BWF#mf1|hv>&e*4z*9 z!Fmh%)akRQD5dRSGFeXd;KGb{5)x|fM1VV+|v6SFrD4E83 zFqbrIU4*5vUh$Zi+W_XM$klEjvRUxy8&gP$VZ|e-wa6R>f`lXfLZ&XoGpRu{u18{T z_ULuyxZ`x(!w}wC?8~?fJ)UHO74(H+l%9x*8h1Y0^X><@aq##{8qOgA52R97L?FwB zPbvSy40kDG*{IZDjPit_%sMT&*|5uG3|k{Ftse&>gK;jJ`c_QX@KXK+$=W7jyd8GI z;Z6f646aMtaV~lBC~;@O9YeD$SB!}{wi7UxMB2bP63iwpHpQ?g2aVa>b|4I_#o5E- zh?(w*FSZ-i8)0nesUt=MlzSscrQ&4fT0?FtO08jPMTPNN*|+BJS6Ifxc z68s*bj*0Zj607^rsR%#;$Cjd(wm9bIYJIW4jQ`^Y${cDSnh!zw1>q?EI5+Xf*tH5k zmI8}+27#GMAyWJ?b>TTvygMnn%A{Bd(wYBr3F;b06_=r;vABN0E3oy&NCvqYLXkmI z#XdKnQ>wFQR&21*S~c5*x<-^poU^=0WxKehb!t>!{zAgVC8O>Y{>KheA~;$0Y_SKH z*RcMbn#SOzSF`V~TEqOmUZ_N*a5-n>tX6Tj$G4d{Wy?$;QTPNZn#|GvyWz?h;bwou z46QHqDCgDEDBzCI1vAyw~V5`7_ z(SfI!zzB0zkwvm+X)m$M#=Nx_BD@Ln7_UPX;Mj4B*i@x981&5v!4Jb9KpL~7*X@8& zC%?7=LPV)zfQYNyHxUQcA~&Nn7mLtDEUL0DmKnw`sipsoiX-1jN8iG7?$#Od^+$mVp2D4S&sKws$W(je6CYxel;sgvrU4iyuFY zKk-0ljxm~vjvAIgZrC_7hP!ApT4H^maj~0TM-KeliVYk=$Qc_AUBqj^t+*mrn6n9N zCen9s4}-ne@-)H7m)D5&a{a9=D|g~k-(hf`FL996YnLq=W(HLLxJZ& zFh#tRXWSz#7X;iZ$U35Z&+x)-wbZw_8>SZg49r#, 2011 +# NullIsNot0 , 2017 +# NullIsNot0 , 2017-2018 +# Jannis Leidel , 2011 +# krikulis , 2014 +# Māris Nartišs , 2016 +# Mariusz Felisiak , 2021 +# Mārtiņš Šulcs , 2018 +# NullIsNot0 , 2018-2021 +# peterisb , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:30+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Afrikaans" +msgstr "afrikāņu" + +msgid "Arabic" +msgstr "arābu" + +msgid "Algerian Arabic" +msgstr "Alžīrijas arābu" + +msgid "Asturian" +msgstr "asturiešu" + +msgid "Azerbaijani" +msgstr "azerbaidžāņu" + +msgid "Bulgarian" +msgstr "bulgāru" + +msgid "Belarusian" +msgstr "baltkrievu" + +msgid "Bengali" +msgstr "bengāļu" + +msgid "Breton" +msgstr "bretoņu" + +msgid "Bosnian" +msgstr "bosniešu" + +msgid "Catalan" +msgstr "katalāņu" + +msgid "Czech" +msgstr "čehu" + +msgid "Welsh" +msgstr "velsiešu" + +msgid "Danish" +msgstr "dāņu" + +msgid "German" +msgstr "vācu" + +msgid "Lower Sorbian" +msgstr "apakšsorbu" + +msgid "Greek" +msgstr "grieķu" + +msgid "English" +msgstr "angļu" + +msgid "Australian English" +msgstr "Austrālijas angļu" + +msgid "British English" +msgstr "Lielbritānijas angļu" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "spāņu" + +msgid "Argentinian Spanish" +msgstr "Argentīnas spāņu" + +msgid "Colombian Spanish" +msgstr "Kolumbijas spāņu" + +msgid "Mexican Spanish" +msgstr "Meksikas spāņu" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvas spāņu" + +msgid "Venezuelan Spanish" +msgstr "Venecuēlas spāņu" + +msgid "Estonian" +msgstr "igauņu" + +msgid "Basque" +msgstr "basku" + +msgid "Persian" +msgstr "persiešu" + +msgid "Finnish" +msgstr "somu" + +msgid "French" +msgstr "franču" + +msgid "Frisian" +msgstr "frīzu" + +msgid "Irish" +msgstr "īru" + +msgid "Scottish Gaelic" +msgstr "skotu gēlu" + +msgid "Galician" +msgstr "galīciešu" + +msgid "Hebrew" +msgstr "ebreju" + +msgid "Hindi" +msgstr "hindu" + +msgid "Croatian" +msgstr "horvātu" + +msgid "Upper Sorbian" +msgstr "augšsorbu" + +msgid "Hungarian" +msgstr "ungāru" + +msgid "Armenian" +msgstr "Armēņu" + +msgid "Interlingua" +msgstr "modernā latīņu" + +msgid "Indonesian" +msgstr "indonēziešu" + +msgid "Igbo" +msgstr "igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandiešu" + +msgid "Italian" +msgstr "itāļu" + +msgid "Japanese" +msgstr "japāņu" + +msgid "Georgian" +msgstr "gruzīnu" + +msgid "Kabyle" +msgstr "kabiliešu" + +msgid "Kazakh" +msgstr "kazahu" + +msgid "Khmer" +msgstr "khmeru" + +msgid "Kannada" +msgstr "kannādiešu" + +msgid "Korean" +msgstr "korejiešu" + +msgid "Kyrgyz" +msgstr "kirgīzu" + +msgid "Luxembourgish" +msgstr "luksemburgiešu" + +msgid "Lithuanian" +msgstr "lietuviešu" + +msgid "Latvian" +msgstr "latviešu" + +msgid "Macedonian" +msgstr "maķedoniešu" + +msgid "Malayalam" +msgstr "malajalu" + +msgid "Mongolian" +msgstr "mongoļu" + +msgid "Marathi" +msgstr "maratiešu" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "birmiešu" + +msgid "Norwegian Bokmål" +msgstr "norvēģu bokmål" + +msgid "Nepali" +msgstr "nepāliešu" + +msgid "Dutch" +msgstr "holandiešu" + +msgid "Norwegian Nynorsk" +msgstr "norvēģu nynorsk" + +msgid "Ossetic" +msgstr "osetiešu" + +msgid "Punjabi" +msgstr "pandžabu" + +msgid "Polish" +msgstr "poļu" + +msgid "Portuguese" +msgstr "portugāļu" + +msgid "Brazilian Portuguese" +msgstr "Brazīlijas portugāļu" + +msgid "Romanian" +msgstr "rumāņu" + +msgid "Russian" +msgstr "krievu" + +msgid "Slovak" +msgstr "slovāku" + +msgid "Slovenian" +msgstr "slovēņu" + +msgid "Albanian" +msgstr "albāņu" + +msgid "Serbian" +msgstr "serbu" + +msgid "Serbian Latin" +msgstr "serbu latīņu" + +msgid "Swedish" +msgstr "zviedru" + +msgid "Swahili" +msgstr "svahili" + +msgid "Tamil" +msgstr "tamilu" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tadžiku" + +msgid "Thai" +msgstr "taizemiešu" + +msgid "Turkmen" +msgstr "turkmēņu" + +msgid "Turkish" +msgstr "turku" + +msgid "Tatar" +msgstr "tatāru" + +msgid "Udmurt" +msgstr "udmurtu" + +msgid "Ukrainian" +msgstr "ukraiņu" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "Uzbeku" + +msgid "Vietnamese" +msgstr "vjetnamiešu" + +msgid "Simplified Chinese" +msgstr "vienkāršā ķīniešu" + +msgid "Traditional Chinese" +msgstr "tradicionālā ķīniešu" + +msgid "Messages" +msgstr "Ziņojumi" + +msgid "Site Maps" +msgstr "Lapas kartes" + +msgid "Static Files" +msgstr "Statiski faili" + +msgid "Syndication" +msgstr "Sindikācija" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Lapas numurs nav cipars" + +msgid "That page number is less than 1" +msgstr "Lapas numurs ir mazāks par 1" + +msgid "That page contains no results" +msgstr "Lapa nesatur rezultātu" + +msgid "Enter a valid value." +msgstr "Ievadiet korektu vērtību." + +msgid "Enter a valid URL." +msgstr "Ievadiet korektu URL adresi." + +msgid "Enter a valid integer." +msgstr "Ievadiet veselu skaitli." + +msgid "Enter a valid email address." +msgstr "Ievadiet korektu e-pasta adresi" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Ievadiet korektu \"identifikatora\" vērtību, kas satur tikai burtus, " +"ciparus, apakšsvītras vai defises." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Ievadiet korektu \"identifikatora\" vērtību, kas satur tikai Unikoda burtus, " +"ciparus, apakšsvītras vai defises." + +msgid "Enter a valid IPv4 address." +msgstr "Ievadiet korektu IPv4 adresi." + +msgid "Enter a valid IPv6 address." +msgstr "Ievadiet korektu IPv6 adresi" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ievadiet korektu IPv4 vai IPv6 adresi" + +msgid "Enter only digits separated by commas." +msgstr "Ievadiet tikai numurus, atdalītus ar komatiem." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Nodrošiniet, ka vērtība ir %(limit_value)s (tā satur %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Šai vērtībai jabūt mazākai vai vienādai ar %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Vērtībai jābūt lielākai vai vienādai ar %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Vērtībai jābūt vismaz %(limit_value)d zīmēm (tai ir %(show_value)d)." +msgstr[1] "" +"Vērtībai jābūt vismaz %(limit_value)d zīmei (tai ir %(show_value)d)." +msgstr[2] "" +"Vērtībai jābūt vismaz %(limit_value)d zīmēm (tai ir %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Vērtībai jābūt ne vairāk kā %(limit_value)d zīmēm (tai ir %(show_value)d)." +msgstr[1] "" +"Vērtībai jābūt ne vairāk kā %(limit_value)d zīmei (tai ir %(show_value)d)." +msgstr[2] "" +"Vērtībai jābūt ne vairāk kā %(limit_value)d zīmēm (tai ir %(show_value)d)." + +msgid "Enter a number." +msgstr "Ievadiet skaitli." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Pārliecinieties, ka kopā nav vairāk par %(max)s ciparu." +msgstr[1] "Pārliecinieties, ka kopā nav vairāk par %(max)s cipariem." +msgstr[2] "Pārliecinieties, ka kopā nav vairāk par %(max)s cipariem." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Pārliecinieties, ka aiz decimālās zīmes nav vairāk par %(max)s ciparu." +msgstr[1] "" +"Pārliecinieties, ka aiz decimālās zīmes nav vairāk par %(max)s cipariem." +msgstr[2] "" +"Pārliecinieties, ka aiz decimālās zīmes nav vairāk par %(max)s cipariem." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Pārliecinieties, ka pirms decimālās zīmes nav vairāk par %(max)s ciparu." +msgstr[1] "" +"Pārliecinieties, ka pirms decimālās zīmes nav vairāk par %(max)s cipariem." +msgstr[2] "" +"Pārliecinieties, ka pirms decimālās zīmes nav vairāk par %(max)s cipariem." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Faila paplašinājums “%(extension)s” nav atļauts. Atļautie paplašinājumi ir: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Nulles rakstzīmes nav atļautas." + +msgid "and" +msgstr "un" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s ar šādu lauka %(field_labels)s vērtību jau eksistē." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vērtība %(value)r ir nederīga izvēle." + +msgid "This field cannot be null." +msgstr "Šis lauks nevar būt tukšs, null." + +msgid "This field cannot be blank." +msgstr "Šis lauks nevar būt tukšs" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s ar šādu lauka %(field_label)s vērtību jau eksistē." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s jābūt unikālam %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Lauks ar tipu: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” vērtībai ir jābūt vai nu True, vai False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” vērtībai ir jābūt True, False vai None." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True vai False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Simbolu virkne (līdz pat %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Ar komatu atdalīti veselie skaitļi" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” vērtība ir nepareizā formātā. Tai ir jābūt YYYY-MM-DD formātā." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” vērtība ir pareizā formātā (YYYY-MM-DD), bet tas nav derīgs " +"datums." + +msgid "Date (without time)" +msgstr "Datums (bez laika)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” vērtība ir nepareizā formātā. Tai ir jābūt YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] formātā." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” vērtība ir pareizā formātā (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]), " +"bet tas nav derīgs datums/laiks." + +msgid "Date (with time)" +msgstr "Datums (ar laiku)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” vērtībai ir jābūt decimālam skaitlim." + +msgid "Decimal number" +msgstr "Decimāls skaitlis" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” vērtība ir nepareizā formātā. Tai ir jābūt [DD] [[HH:]MM:]ss[." +"uuuuuu] formātā." + +msgid "Duration" +msgstr "Ilgums" + +msgid "Email address" +msgstr "E-pasta adrese" + +msgid "File path" +msgstr "Faila ceļš" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” vērtībai ir jābūt daļskaitlim." + +msgid "Floating point number" +msgstr "Plūstošā punkta skaitlis" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” vērtībai ir jābūt veselam skaitlim." + +msgid "Integer" +msgstr "Vesels skaitlis" + +msgid "Big (8 byte) integer" +msgstr "Liels (8 baitu) vesels skaitlis" + +msgid "Small integer" +msgstr "Mazs vesels skaitlis" + +msgid "IPv4 address" +msgstr "IPv4 adrese" + +msgid "IP address" +msgstr "IP adrese" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” vērtībai ir jābūt None, True vai False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (jā, nē vai neviens)" + +msgid "Positive big integer" +msgstr "Liels pozitīvs vesels skaitlis" + +msgid "Positive integer" +msgstr "Naturāls skaitlis" + +msgid "Positive small integer" +msgstr "Mazs pozitīvs vesels skaitlis" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Identifikators (līdz %(max_length)s)" + +msgid "Text" +msgstr "Teksts" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” vērtība ir nepareizā formātā. Tai ir jābūt HH:MM[:ss[.uuuuuu]] " +"formātā." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” vērtība ir pareizā formātā (HH:MM[:ss[.uuuuuu]]), bet tas nav " +"derīgs laiks." + +msgid "Time" +msgstr "Laiks" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Bināri dati" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” nav derīgs UUID." + +msgid "Universally unique identifier" +msgstr "Universāli unikāls identifikators" + +msgid "File" +msgstr "Fails" + +msgid "Image" +msgstr "Attēls" + +msgid "A JSON object" +msgstr "JSON objekts" + +msgid "Value must be valid JSON." +msgstr "Vērtībai ir jābūt derīgam JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s instance ar %(field)s %(value)r neeksistē." + +msgid "Foreign Key (type determined by related field)" +msgstr "Ārējā atslēga (tipu nosaka lauks uz kuru attiecas)" + +msgid "One-to-one relationship" +msgstr "Attiecība viens pret vienu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s attiecība" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s attiecības" + +msgid "Many-to-many relationship" +msgstr "Attiecība daudzi pret daudziem" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Šis lauks ir obligāts." + +msgid "Enter a whole number." +msgstr "Ievadiet veselu skaitli." + +msgid "Enter a valid date." +msgstr "Ievadiet korektu datumu." + +msgid "Enter a valid time." +msgstr "Ievadiet korektu laiku." + +msgid "Enter a valid date/time." +msgstr "Ievadiet korektu datumu/laiku." + +msgid "Enter a valid duration." +msgstr "Ievadiet korektu ilgumu." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Dienu skaitam jābūt no {min_days} līdz {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nav nosūtīts fails. Pārbaudiet formas kodējuma tipu." + +msgid "No file was submitted." +msgstr "Netika nosūtīts fails." + +msgid "The submitted file is empty." +msgstr "Jūsu nosūtītais fails ir tukšs." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Faila nosaukuma garumam jābūt ne vairāk kā %(max)d zīmēm (tas ir %(length)d)." +msgstr[1] "" +"Faila nosaukuma garumam jābūt ne vairāk kā %(max)d zīmei (tas ir %(length)d)." +msgstr[2] "" +"Faila nosaukuma garumam jābūt ne vairāk kā %(max)d zīmēm (tas ir %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Vai nu iesniedziet failu, vai atzīmējiet tukšo izvēles rūtiņu, bet ne abus." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Augšupielādējiet korektu attēlu. Fails, ko augšupielādējāt, vai nu nav " +"attēls, vai arī ir bojāts." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Izvēlieties korektu izvēli. %(value)s nav pieejamo izvēļu sarakstā." + +msgid "Enter a list of values." +msgstr "Ievadiet sarakstu ar vērtībām." + +msgid "Enter a complete value." +msgstr "Ievadiet pilnu vērtību." + +msgid "Enter a valid UUID." +msgstr "Ievadi derīgu UUID." + +msgid "Enter a valid JSON." +msgstr "Ievadiet korektu JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Slēpts lauks %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm trūkst datu vai tie ir mainīti. Trūkstošie lauki: " +"%(field_names)s. Paziņojiet par kļūdu, ja problēma atkārtojas." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Lūdzu iesniedziet ne vairāk kā %d formu." +msgstr[1] "Lūdzu iesniedziet ne vairāk kā %d formu." +msgstr[2] "Lūdzu iesniedziet ne vairāk kā %d formas." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Lūdzu iesniedziet vismaz %d formu." +msgstr[1] "Lūdzu iesniedziet vismaz %d formu." +msgstr[2] "Lūdzu iesniedziet vismaz %d formas." + +msgid "Order" +msgstr "Sakārtojums" + +msgid "Delete" +msgstr "Dzēst" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Lūdzu izlabojiet dublicētos datus priekš %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Lūdzu izlabojiet dublicētos datus laukam %(field)s, kam jābūt unikālam." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Lūdzu izlabojiet dublicētos datus laukam %(field_name)s, kam jābūt unikālam " +"priekš %(lookup)s iekš %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Lūdzu izlabojiet dublicētās vērtības zemāk." + +msgid "The inline value did not match the parent instance." +msgstr "Iekļautā vērtība nesakrita ar vecāka instanci." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Izvēlieties pareizu izvēli. Jūsu izvēle neietilpst pieejamo sarakstā." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” nav derīga vērtība." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s vērtība nevar tikt attēlota %(current_timezone)s laika zonā; tā " +"var būt neskaidra vai neeksistē." + +msgid "Clear" +msgstr "Notīrīt" + +msgid "Currently" +msgstr "Pašlaik" + +msgid "Change" +msgstr "Izmainīt" + +msgid "Unknown" +msgstr "Nezināms" + +msgid "Yes" +msgstr "Jā" + +msgid "No" +msgstr "Nē" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "jā,nē,varbūt" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d baits" +msgstr[1] "%(size)d baiti" +msgstr[2] "%(size)d baitu" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "pusnakts" + +msgid "noon" +msgstr "dienasvidus" + +msgid "Monday" +msgstr "pirmdiena" + +msgid "Tuesday" +msgstr "otrdiena" + +msgid "Wednesday" +msgstr "trešdiena" + +msgid "Thursday" +msgstr "ceturtdiena" + +msgid "Friday" +msgstr "piektdiena" + +msgid "Saturday" +msgstr "sestdiena" + +msgid "Sunday" +msgstr "svētdiena" + +msgid "Mon" +msgstr "pr" + +msgid "Tue" +msgstr "ot" + +msgid "Wed" +msgstr "tr" + +msgid "Thu" +msgstr "ce" + +msgid "Fri" +msgstr "pk" + +msgid "Sat" +msgstr "se" + +msgid "Sun" +msgstr "sv" + +msgid "January" +msgstr "janvāris" + +msgid "February" +msgstr "februāris" + +msgid "March" +msgstr "marts" + +msgid "April" +msgstr "aprīlis" + +msgid "May" +msgstr "maijs" + +msgid "June" +msgstr "jūnijs" + +msgid "July" +msgstr "jūlijs" + +msgid "August" +msgstr "augusts" + +msgid "September" +msgstr "septembris" + +msgid "October" +msgstr "oktobris" + +msgid "November" +msgstr "novembris" + +msgid "December" +msgstr "decembris" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jūn" + +msgid "jul" +msgstr "jūl" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "marts" + +msgctxt "abbrev. month" +msgid "April" +msgstr "aprīlis" + +msgctxt "abbrev. month" +msgid "May" +msgstr "maijs" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jūnijs" + +msgctxt "abbrev. month" +msgid "July" +msgstr "jūlijs" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "janvāris" + +msgctxt "alt. month" +msgid "February" +msgstr "februāris" + +msgctxt "alt. month" +msgid "March" +msgstr "marts" + +msgctxt "alt. month" +msgid "April" +msgstr "aprīlis" + +msgctxt "alt. month" +msgid "May" +msgstr "maijs" + +msgctxt "alt. month" +msgid "June" +msgstr "jūnijs" + +msgctxt "alt. month" +msgid "July" +msgstr "jūlijs" + +msgctxt "alt. month" +msgid "August" +msgstr "augusts" + +msgctxt "alt. month" +msgid "September" +msgstr "septembris" + +msgctxt "alt. month" +msgid "October" +msgstr "oktobris" + +msgctxt "alt. month" +msgid "November" +msgstr "novembris" + +msgctxt "alt. month" +msgid "December" +msgstr "decembris" + +msgid "This is not a valid IPv6 address." +msgstr "Šī nav derīga IPv6 adrese." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "vai" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d gadi" +msgstr[1] "%(num)d gads" +msgstr[2] "%(num)d gadi" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mēneši" +msgstr[1] "%(num)d mēnesis" +msgstr[2] "%(num)d mēneši" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nedēļas" +msgstr[1] "%(num)d nedēļa" +msgstr[2] "%(num)d nedēļas" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dienas" +msgstr[1] "%(num)d diena" +msgstr[2] "%(num)d dienas" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d stundas" +msgstr[1] "%(num)d stunda" +msgstr[2] "%(num)d stubdas" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minūtes" +msgstr[1] "%(num)d minūte" +msgstr[2] "%(num)d minūtes" + +msgid "Forbidden" +msgstr "Aizliegts" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF pārbaude neizdevās. Pieprasījums pārtrauks." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Jūs redzat šo paziņojumu, jo jūsu pārlūkprogrammai ir jānosūta “Referer " +"header” šai HTTPS vietnei, taču tā netika nosūtīta. Šī galvene ir " +"nepieciešama drošības apsvērumu dēļ, lai pārliecinātos, ka jūsu " +"pārlūkprogrammas komunikācijas datus nepārtver trešās puses." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ja esat konfigurējis savu pārlūkprogrammu, lai atspējotu “Referer” headerus, " +"lūdzu, atkārtoti iespējojiet tos vismaz šai vietnei, HTTPS savienojumiem vai " +"“same-origin” pieprasījumiem." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ja jūs izmantojat tagu vai " +"iekļaujat “Referrer-Policy: no-referrer” headeri, lūdzu noņemiet tos. CSRF " +"aizsardzībai ir nepieciešams, lai “Referer” headerī tiktu veikta strikta " +"pārvirzītāja pārbaude. Ja jūs domājat par privātumu, tad izmantojiet tādas " +"alternatīvas kā priekš saitēm uz trešo pušu vietnēm." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Jūs redzat šo ziņojumu, jo, iesniedzot veidlapas, šai vietnei ir " +"nepieciešams CSRF sīkfails. Šis sīkfails ir vajadzīgs drošības apsvērumu " +"dēļ, lai pārliecinātos, ka trešās personas nepārņems kontroli pār jūsu " +"pārlūkprogrammu." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ja esat konfigurējis pārlūkprogrammu, lai atspējotu sīkdatnes, lūdzu, " +"atkārtoti iespējojiet tās vismaz šai vietnei vai “same-origin” " +"pieprasījumiem." + +msgid "More information is available with DEBUG=True." +msgstr "Vairāk informācijas ir pieejams ar DEBUG=True" + +msgid "No year specified" +msgstr "Nav norādīts gads" + +msgid "Date out of range" +msgstr "Datums ir ārpus diapazona" + +msgid "No month specified" +msgstr "Nav norādīts mēnesis" + +msgid "No day specified" +msgstr "Nav norādīta diena" + +msgid "No week specified" +msgstr "Nav norādīta nedēļa" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nav pieejami" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Nākotne %(verbose_name_plural)s nav pieejama, jo %(class_name)s.allow_future " +"ir False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Nepareiza datuma rinda “%(datestr)s” norādītajā formātā “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Neviens %(verbose_name)s netika atrasts" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Lapa nav “pēdējā”, kā arī tā nevar tikt konvertēta par ciparu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nepareiza lapa (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tukšs saraksts un \"%(class_name)s.allow_empty\" ir False." + +msgid "Directory indexes are not allowed here." +msgstr "Direktoriju indeksi nav atļauti." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" neeksistē" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s saturs" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalācija veiksmīga! Apsveicam!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Apskatīt laidiena piezīmes Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Jūs redziet šo lapu, jo DEBUG=True ir iestatījumu failā un Jūs neesiet konfigurējis nevienu " +"saiti." + +msgid "Django Documentation" +msgstr "Django Dokumentācija" + +msgid "Topics, references, & how-to’s" +msgstr "Tēmas, atsauces, & how-to" + +msgid "Tutorial: A Polling App" +msgstr "Apmācība: Balsošanas aplikācija" + +msgid "Get started with Django" +msgstr "Sāciet ar Django" + +msgid "Django Community" +msgstr "Django Komūna" + +msgid "Connect, get help, or contribute" +msgstr "Pievienojaties, saņemiet palīdzību vai dodiet ieguldījumu" diff --git a/venv/Lib/site-packages/django/conf/locale/lv/__init__.py b/venv/Lib/site-packages/django/conf/locale/lv/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/lv/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/lv/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b95a4256bcc462c6687b9577a0250cc9e1d34e9 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lPMLmud}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04vxu3KaDx3eqb_g7@UXGC2?h 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 DWi!LY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..ecd62ceb3 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,1273 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bojan Drangovski , 2021 +# Claude Paroz , 2020 +# dekomote , 2015 +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017 +# Vasil Vangelovski , 2013-2015 +# Vasil Vangelovski , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-05-12 22:47+0000\n" +"Last-Translator: Bojan Drangovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Afrikaans" +msgstr "Африканс" + +msgid "Arabic" +msgstr "Арапски" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Астуриски" + +msgid "Azerbaijani" +msgstr "Азербејџански" + +msgid "Bulgarian" +msgstr "Бугарски" + +msgid "Belarusian" +msgstr "Белоруски" + +msgid "Bengali" +msgstr "Бенгалски" + +msgid "Breton" +msgstr "Бретонски" + +msgid "Bosnian" +msgstr "Босански" + +msgid "Catalan" +msgstr "Каталански" + +msgid "Czech" +msgstr "Чешки" + +msgid "Welsh" +msgstr "Велшки" + +msgid "Danish" +msgstr "Дански" + +msgid "German" +msgstr "Германски" + +msgid "Lower Sorbian" +msgstr "Долно Лужичко-Српски" + +msgid "Greek" +msgstr "Грчки" + +msgid "English" +msgstr "Англиски" + +msgid "Australian English" +msgstr "Австралиски англиски" + +msgid "British English" +msgstr "Британски англиски" + +msgid "Esperanto" +msgstr "Есперанто" + +msgid "Spanish" +msgstr "Шпански" + +msgid "Argentinian Spanish" +msgstr "Аргентински шпански" + +msgid "Colombian Spanish" +msgstr "Колумбиски Шпански" + +msgid "Mexican Spanish" +msgstr "Мексикански шпански" + +msgid "Nicaraguan Spanish" +msgstr "Никарагва шпански" + +msgid "Venezuelan Spanish" +msgstr "Венецуела шпански" + +msgid "Estonian" +msgstr "Естонски" + +msgid "Basque" +msgstr "Баскиски" + +msgid "Persian" +msgstr "Персиски" + +msgid "Finnish" +msgstr "Фински" + +msgid "French" +msgstr "Француски" + +msgid "Frisian" +msgstr "Фризиски" + +msgid "Irish" +msgstr "Ирски" + +msgid "Scottish Gaelic" +msgstr "Шкотски Галски" + +msgid "Galician" +msgstr "Галски" + +msgid "Hebrew" +msgstr "Еврејски" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хрватски" + +msgid "Upper Sorbian" +msgstr "Горно Лужичко-Српски" + +msgid "Hungarian" +msgstr "Унгарски" + +msgid "Armenian" +msgstr "Ерменски" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонезиски" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Идо" + +msgid "Icelandic" +msgstr "Исландски" + +msgid "Italian" +msgstr "Италијански" + +msgid "Japanese" +msgstr "Јапонски" + +msgid "Georgian" +msgstr "Грузиски" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Казахстански" + +msgid "Khmer" +msgstr "Кмер" + +msgid "Kannada" +msgstr "Канада" + +msgid "Korean" +msgstr "Корејски" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Луксембуршки" + +msgid "Lithuanian" +msgstr "Литвански" + +msgid "Latvian" +msgstr "Латвиски" + +msgid "Macedonian" +msgstr "Македонски" + +msgid "Malayalam" +msgstr "Малајалам" + +msgid "Mongolian" +msgstr "Монголски" + +msgid "Marathi" +msgstr "Марати" + +msgid "Burmese" +msgstr "Бурмански" + +msgid "Norwegian Bokmål" +msgstr "Норвешки Бокмел" + +msgid "Nepali" +msgstr "Непалски" + +msgid "Dutch" +msgstr "Холандски" + +msgid "Norwegian Nynorsk" +msgstr "Нинорск норвешки" + +msgid "Ossetic" +msgstr "Осетски" + +msgid "Punjabi" +msgstr "Пунџаби" + +msgid "Polish" +msgstr "Полски" + +msgid "Portuguese" +msgstr "Португалкски" + +msgid "Brazilian Portuguese" +msgstr "Бразилско португалски" + +msgid "Romanian" +msgstr "Романски" + +msgid "Russian" +msgstr "Руски" + +msgid "Slovak" +msgstr "Словачки" + +msgid "Slovenian" +msgstr "Словенечки" + +msgid "Albanian" +msgstr "Албански" + +msgid "Serbian" +msgstr "Српски" + +msgid "Serbian Latin" +msgstr "Српски Латиница" + +msgid "Swedish" +msgstr "Шведски" + +msgid "Swahili" +msgstr "Свахили" + +msgid "Tamil" +msgstr "Тамил" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Тајландски" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Турски" + +msgid "Tatar" +msgstr "Татарски" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Украински" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Виетнамски" + +msgid "Simplified Chinese" +msgstr "Поедноставен кинески" + +msgid "Traditional Chinese" +msgstr "Традиционален кинески" + +msgid "Messages" +msgstr "Пораки" + +msgid "Site Maps" +msgstr "Сајт мапи" + +msgid "Static Files" +msgstr "Статички датотеки" + +msgid "Syndication" +msgstr "Синдикација" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Тој број на страна не е цел број" + +msgid "That page number is less than 1" +msgstr "Тој број на страна е помал од 1" + +msgid "That page contains no results" +msgstr "Таа страна не содржи резултати" + +msgid "Enter a valid value." +msgstr "Внесете правилна вредност." + +msgid "Enter a valid URL." +msgstr "Внесете правилна веб адреса." + +msgid "Enter a valid integer." +msgstr "Внесете валиден цел број." + +msgid "Enter a valid email address." +msgstr "Внесете валидна email адреса." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Внесeте правилна IPv4 адреса." + +msgid "Enter a valid IPv6 address." +msgstr "Внесете валидна IPv6 адреса." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Внесете валидна IPv4 или IPv6 адреса." + +msgid "Enter only digits separated by commas." +msgstr "Внесете само цифри одделени со запирки." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Осигурајте се дека оваа вредност е %(limit_value)s (моментално е " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Осигурајте се дека оваа вредност е помала или еднаква со %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Осигурајте се дека оваа вредност е поголема или еднаква со %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Осигурајте се дека оваа вредност има најмалку %(limit_value)d карактер (има " +"%(show_value)d)." +msgstr[1] "" +"Осигурајте се дека оваа вредност има најмалку %(limit_value)d карактери (има " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Осигурајте се дека оваа вредност има најмногу %(limit_value)d карактер (има " +"%(show_value)d)." +msgstr[1] "" +"Осигурајте се дека оваа вредност има најмногу %(limit_value)d карактери (има " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Внесете број." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Осигурајте се дека вкупно нема повеќе од %(max)s цифра." +msgstr[1] "Осигурајте се дека вкупно нема повеќе од %(max)s цифри." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Осигурајте се дека нема повеќе од %(max)s децимално место." +msgstr[1] "Осигурајте се дека нема повеќе од %(max)s децимални места." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Осигурајте се дека нема повеќе одs %(max)s цифра пред децималната запирка." +msgstr[1] "" +"Осигурајте се дека нема повеќе од %(max)s цифри пред децималната запирка." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Null карактери не се дозволени." + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s со ова %(field_labels)s веќе постојат." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Вредноста %(value)r не е валиден избор." + +msgid "This field cannot be null." +msgstr "Оваа вредност неможе да биде null." + +msgid "This field cannot be blank." +msgstr "Ова поле не може да биде празно" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s со %(field_label)s веќе постои." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s мора да биде уникатно за %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поле од тип: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Вредноста '%(value)s' мора да биде точно или неточно." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Логичка (или точно или неточно)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Нишка од знаци (текст) (до %(max_length)s карактери)" + +msgid "Comma-separated integers" +msgstr "Целобројни вредности одделени со запирка" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Датум (без време)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Датум (со време)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Децимален број" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Траење" + +msgid "Email address" +msgstr "Адреса за е-пошта (email)" + +msgid "File path" +msgstr "Патека на датотека" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Децимален број подвижна запирка" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Цел број" + +msgid "Big (8 byte) integer" +msgstr "Голем (8 бајти) цел број" + +msgid "Small integer" +msgstr "Мал цел број" + +msgid "IPv4 address" +msgstr "IPv4 адреса" + +msgid "IP address" +msgstr "IP адреса" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Логичка вредност (точно,неточно или ништо)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Позитивен цел број" + +msgid "Positive small integer" +msgstr "Позитивен мал цел број" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Скратено име (до %(max_length)s знаци)" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Време" + +msgid "URL" +msgstr "URL (веб адреса)" + +msgid "Raw binary data" +msgstr "Сурови бинарни податоци" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Датотека" + +msgid "Image" +msgstr "Слика" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s инстанца со %(field)s %(value)r не постои." + +msgid "Foreign Key (type determined by related field)" +msgstr "Надворешен клуч (типот е одреден според поврзаното поле)" + +msgid "One-to-one relationship" +msgstr "Еден-према-еден релација" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s релација" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s релации" + +msgid "Many-to-many relationship" +msgstr "Повеќе-према-повеќе релација" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ова поле е задолжително." + +msgid "Enter a whole number." +msgstr "Внесете цел број." + +msgid "Enter a valid date." +msgstr "Внесете правилен датум." + +msgid "Enter a valid time." +msgstr "Внесете правилно време." + +msgid "Enter a valid date/time." +msgstr "Внесете правилен датум со време." + +msgid "Enter a valid duration." +msgstr "Внесете валидно времетрање." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Не беше пратена датотека. Проверете го типот на енкодирање на формата." + +msgid "No file was submitted." +msgstr "Не беше пратена датотека." + +msgid "The submitted file is empty." +msgstr "Пратената датотека е празна." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Осигурајте се дека ова име на датотека има најмногу %(max)d карактер (има " +"%(length)d)." +msgstr[1] "" +"Осигурајте се дека ова име на датотека има најмногу %(max)d карактери (има " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Или прикачете датотека или штиклирајте го полето за чистење, не двете од " +"еднаш." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Качете валидна слика. Датотеката која ја качивте или не беше слика или беше " +"расипана датотеката." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Внесете валиден избор. %(value)s не е еден од можните избори." + +msgid "Enter a list of values." +msgstr "Внесете листа на вредности." + +msgid "Enter a complete value." +msgstr "Внесете целосна вредност." + +msgid "Enter a valid UUID." +msgstr "Внесете валиден UUID (единствен идентификатор)." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скриено поле %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Редослед" + +msgid "Delete" +msgstr "Избриши" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ве молам поправете ја дуплираната вредност за %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ве молам поправете ја дуплираната вредност за %(field)s, која мора да биде " +"уникатна." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ве молам поправете ја дуплираната вредност за %(field_name)s која мора да " +"биде уникатна за %(lookup)s во %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ве молам поправете ги дуплираните вредности подолу." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Изберете правилно. Тоа не е еден од можните избори." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Исчисти" + +msgid "Currently" +msgstr "Моментално" + +msgid "Change" +msgstr "Измени" + +msgid "Unknown" +msgstr "Непознато" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "да,не,можеби" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d бајт" +msgstr[1] "%(size)d бајти" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "попладне" + +msgid "a.m." +msgstr "наутро" + +msgid "PM" +msgstr "попладне" + +msgid "AM" +msgstr "наутро" + +msgid "midnight" +msgstr "полноќ" + +msgid "noon" +msgstr "пладне" + +msgid "Monday" +msgstr "Понеделник" + +msgid "Tuesday" +msgstr "Вторник" + +msgid "Wednesday" +msgstr "Среда" + +msgid "Thursday" +msgstr "Четврток" + +msgid "Friday" +msgstr "Петок" + +msgid "Saturday" +msgstr "Сабота" + +msgid "Sunday" +msgstr "Недела" + +msgid "Mon" +msgstr "Пон" + +msgid "Tue" +msgstr "Вто" + +msgid "Wed" +msgstr "Сре" + +msgid "Thu" +msgstr "Чет" + +msgid "Fri" +msgstr "Пет" + +msgid "Sat" +msgstr "Саб" + +msgid "Sun" +msgstr "Нед" + +msgid "January" +msgstr "Јануари" + +msgid "February" +msgstr "Февруари" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Мај" + +msgid "June" +msgstr "Јуни" + +msgid "July" +msgstr "Јули" + +msgid "August" +msgstr "август" + +msgid "September" +msgstr "Септември" + +msgid "October" +msgstr "Октомври" + +msgid "November" +msgstr "Ноември" + +msgid "December" +msgstr "Декември" + +msgid "jan" +msgstr "јан" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "мај" + +msgid "jun" +msgstr "јун" + +msgid "jul" +msgstr "јул" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сеп" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ное" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Јан." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Април" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Мај" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Јуни" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Јули" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Септ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ное." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "Јануари" + +msgctxt "alt. month" +msgid "February" +msgstr "Февруари" + +msgctxt "alt. month" +msgid "March" +msgstr "Март" + +msgctxt "alt. month" +msgid "April" +msgstr "Април" + +msgctxt "alt. month" +msgid "May" +msgstr "Мај" + +msgctxt "alt. month" +msgid "June" +msgstr "Јуни" + +msgctxt "alt. month" +msgid "July" +msgstr "Јули" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Септември" + +msgctxt "alt. month" +msgid "October" +msgstr "Октомври" + +msgctxt "alt. month" +msgid "November" +msgstr "Ноември" + +msgctxt "alt. month" +msgid "December" +msgstr "Декември" + +msgid "This is not a valid IPv6 address." +msgstr "Ова не е валидна IPv6 адреса." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d година" +msgstr[1] "%d години" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месец" +msgstr[1] "%d месеци" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недела" +msgstr[1] "%d недели" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ден" +msgstr[1] "%d дена" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часови" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минути" + +msgid "Forbidden" +msgstr "Забрането" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF верификацијата не успеа. Барањето е прекинато." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ја гледате оваа порака бидејќи овој сајт бара CSRF колаче (cookie) за да се " +"поднесуваат форми. Ова колаче е потребно од безбедносни причини, за да се " +"осигураме дека вашиот веб прелистувач не е грабнат и контролиран од трети " +"страни." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Повеќе информации се достапни со DEBUG = True." + +msgid "No year specified" +msgstr "Не е дадена година" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Не е даден месец" + +msgid "No day specified" +msgstr "Не е даден ден" + +msgid "No week specified" +msgstr "Не е дадена недела" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Нема достапни %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Идни %(verbose_name_plural)s не се достапни бидејќи %(class_name)s." +"allow_future е False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Нема %(verbose_name)s што се совпаѓа со пребарувањето" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Невалидна страна (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Индекси на директориуми не се дозволени тука." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Индекс на %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/mk/__init__.py b/venv/Lib/site-packages/django/conf/locale/mk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/mk/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/mk/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef1bb1d483815946d70199ff75b38b98cda2ece1 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lZnl1Wd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04jwv+5i9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mk/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/mk/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c510680a0f92f3cd37f6819c2e9d25786fa63001 GIT binary patch literal 873 zcmZvaPj8zr7{(!xhWu-qZtGzuE*v7QA@^o@Td6AnR=LzVGw1pVt<0+HBSsGX8w~HU3#ipCwqZ}Pk3){Fl@YCijy7wq{lIJf8U*uLXW?1u+d ze&oonvN}yrR~1hS`?g~$9;kbUc@QnSQUq;ZQ=HJWEl=MY&R&$N_130{s|*E$d8Tj1L4UqR z+2wGZF5*cR+{df?;ATD!&^(JT@1n_VG>cIH7tv~#b|>j-+FhoTXc>2t+wL@7CsBsv gyX}K;m85X9j6c%%iQbdI^E_Le0xwkf7S9UoUjzx=kpKVy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mk/formats.py b/venv/Lib/site-packages/django/conf/locale/mk/formats.py new file mode 100644 index 000000000..fbb577f77 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/mk/formats.py @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "j.m.Y" +SHORT_DATETIME_FORMAT = "j.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + "%d. %m. %Y", # '25. 10. 2006' + "%d. %m. %y", # '25. 10. 06' +] + +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' + "%d. %m. %Y %H:%M:%S", # '25. 10. 2006 14:30:59' + "%d. %m. %Y %H:%M:%S.%f", # '25. 10. 2006 14:30:59.000200' + "%d. %m. %Y %H:%M", # '25. 10. 2006 14:30' + "%d. %m. %y %H:%M:%S", # '25. 10. 06 14:30:59' + "%d. %m. %y %H:%M:%S.%f", # '25. 10. 06 14:30:59.000200' + "%d. %m. %y %H:%M", # '25. 10. 06 14:30' +] + +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..17d15c64abd6271a117227b557c9b5220a5c1517 GIT binary patch literal 30808 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 F{{sVJievx) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..7e1945dfe --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,1274 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# c1007a0b890405f1fbddfacebc4c6ef7, 2013 +# Claude Paroz , 2020 +# Hrishikesh , 2019-2020 +# Jannis Leidel , 2011 +# Jaseem KM , 2019 +# Jeffy , 2012 +# Jibin Mathew , 2019 +# Mariusz Felisiak , 2021 +# Rag sagar , 2016 +# Rajeesh Nair , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:29+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "ആഫ്രിക്കാന്‍സ്" + +msgid "Arabic" +msgstr "അറബിൿ" + +msgid "Algerian Arabic" +msgstr "അൾഗേരിയൻ അറബിൿ" + +msgid "Asturian" +msgstr "ആസ്ടൂറിയൻ" + +msgid "Azerbaijani" +msgstr "അസര്‍ബൈജാനി" + +msgid "Bulgarian" +msgstr "ബള്‍ഗേറിയന്‍" + +msgid "Belarusian" +msgstr "ബെലറൂഷ്യന്‍" + +msgid "Bengali" +msgstr "ബംഗാളി" + +msgid "Breton" +msgstr "ബ്രെട്ടണ്‍" + +msgid "Bosnian" +msgstr "ബോസ്നിയന്‍" + +msgid "Catalan" +msgstr "കാറ്റലന്‍" + +msgid "Czech" +msgstr "ചെൿ" + +msgid "Welsh" +msgstr "വെല്‍ഷ്" + +msgid "Danish" +msgstr "ഡാനിഷ്" + +msgid "German" +msgstr "ജര്‍മന്‍" + +msgid "Lower Sorbian" +msgstr "ലോവർ സോർബിയൻ " + +msgid "Greek" +msgstr "ഗ്രീക്ക്" + +msgid "English" +msgstr "ഇംഗ്ലീഷ്" + +msgid "Australian English" +msgstr "ആസ്ട്രേലിയൻ ഇംഗ്ലീഷ്" + +msgid "British English" +msgstr "ബ്രിട്ടീഷ് ഇംഗ്ലീഷ്" + +msgid "Esperanto" +msgstr "എസ്പെരാന്റോ" + +msgid "Spanish" +msgstr "സ്പാനിഷ്" + +msgid "Argentinian Spanish" +msgstr "അര്‍ജന്റീനിയന്‍ സ്പാനിഷ്" + +msgid "Colombian Spanish" +msgstr "കൊളംബിയൻ സ്പാനിഷ്" + +msgid "Mexican Spanish" +msgstr "മെക്സിക്കന്‍ സ്പാനിഷ്" + +msgid "Nicaraguan Spanish" +msgstr "നിക്കരാഗ്വന്‍ സ്പാനിഷ്" + +msgid "Venezuelan Spanish" +msgstr "വെനിസ്വലന്‍ സ്പാനിഷ്" + +msgid "Estonian" +msgstr "എസ്ടോണിയന്‍ സ്പാനിഷ്" + +msgid "Basque" +msgstr "ബാസ്ക്യു" + +msgid "Persian" +msgstr "പേര്‍ഷ്യന്‍" + +msgid "Finnish" +msgstr "ഫിന്നിഷ്" + +msgid "French" +msgstr "ഫ്രെഞ്ച്" + +msgid "Frisian" +msgstr "ഫ്രിസിയന്‍" + +msgid "Irish" +msgstr "ഐറിഷ്" + +msgid "Scottish Gaelic" +msgstr "സ്കോട്ടിഷ് ഗൈലിൿ" + +msgid "Galician" +msgstr "ഗലിഷ്യന്‍" + +msgid "Hebrew" +msgstr "ഹീബ്രു" + +msgid "Hindi" +msgstr "ഹിന്ദി" + +msgid "Croatian" +msgstr "ക്രൊയേഷ്യന്‍" + +msgid "Upper Sorbian" +msgstr "അപ്പർ സോർബിയൻ " + +msgid "Hungarian" +msgstr "ഹംഗേറിയന്‍" + +msgid "Armenian" +msgstr "അർമേനിയൻ" + +msgid "Interlingua" +msgstr "ഇന്റര്‍ലിംഗ്വാ" + +msgid "Indonesian" +msgstr "ഇന്തൊനേഷ്യന്‍" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "ഈടോ" + +msgid "Icelandic" +msgstr "ഐസ്ലാന്‍ഡിൿ" + +msgid "Italian" +msgstr "ഇറ്റാലിയന്‍" + +msgid "Japanese" +msgstr "ജാപ്പനീസ്" + +msgid "Georgian" +msgstr "ജോര്‍ജിയന്‍" + +msgid "Kabyle" +msgstr "കാബയെൽ " + +msgid "Kazakh" +msgstr "കസാഖ്" + +msgid "Khmer" +msgstr "ഖ്മേര്‍" + +msgid "Kannada" +msgstr "കന്നഡ" + +msgid "Korean" +msgstr "കൊറിയന്‍" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "ലക്സംബര്‍ഗിഷ് " + +msgid "Lithuanian" +msgstr "ലിത്വാനിയന്‍" + +msgid "Latvian" +msgstr "ലാറ്റ്വിയന്‍" + +msgid "Macedonian" +msgstr "മാസിഡോണിയന്‍" + +msgid "Malayalam" +msgstr "മലയാളം" + +msgid "Mongolian" +msgstr "മംഗോളിയന്‍" + +msgid "Marathi" +msgstr "മറാത്തി" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "ബര്‍മീസ്" + +msgid "Norwegian Bokmål" +msgstr "നോർവേജിയൻ ബുക്ക്മൊൾ" + +msgid "Nepali" +msgstr "നേപ്പാളി" + +msgid "Dutch" +msgstr "ഡച്ച്" + +msgid "Norwegian Nynorsk" +msgstr "നോര്‍വീജിയന്‍ നിനോഷ്ക്" + +msgid "Ossetic" +msgstr "ഒസ്സെറ്റിക്" + +msgid "Punjabi" +msgstr "പഞ്ചാബി" + +msgid "Polish" +msgstr "പോളിഷ്" + +msgid "Portuguese" +msgstr "പോര്‍ചുഗീസ്" + +msgid "Brazilian Portuguese" +msgstr "ബ്രസീലിയന്‍ പോര്‍ച്ചുഗീസ്" + +msgid "Romanian" +msgstr "റൊമാനിയന്‍" + +msgid "Russian" +msgstr "റഷ്യന്‍" + +msgid "Slovak" +msgstr "സ്ലൊവാൿ" + +msgid "Slovenian" +msgstr "സ്ളൊവേനിയന്‍" + +msgid "Albanian" +msgstr "അല്‍ബേനിയന്‍" + +msgid "Serbian" +msgstr "സെര്‍ബിയന്‍" + +msgid "Serbian Latin" +msgstr "സെര്‍ബിയന്‍ ലാറ്റിന്‍" + +msgid "Swedish" +msgstr "സ്വീഡിഷ്" + +msgid "Swahili" +msgstr "സ്വാഹിലി" + +msgid "Tamil" +msgstr "തമിഴ്" + +msgid "Telugu" +msgstr "തെലുങ്ക്" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "തായ്" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "ടര്‍ക്കിഷ്" + +msgid "Tatar" +msgstr "തൊതാര്‍" + +msgid "Udmurt" +msgstr "ഉദ്മര്‍ത്" + +msgid "Ukrainian" +msgstr "യുക്രേനിയന്‍" + +msgid "Urdu" +msgstr "ഉര്‍ദു" + +msgid "Uzbek" +msgstr "ഉസ്ബെൿ" + +msgid "Vietnamese" +msgstr "വിയറ്റ്നാമീസ്" + +msgid "Simplified Chinese" +msgstr "സിമ്പ്ലിഫൈഡ് ചൈനീസ്" + +msgid "Traditional Chinese" +msgstr "പരമ്പരാഗത ചൈനീസ്" + +msgid "Messages" +msgstr "സന്ദേശങ്ങൾ" + +msgid "Site Maps" +msgstr "സൈറ്റ് മാപ്പുകൾ" + +msgid "Static Files" +msgstr " സ്റ്റാറ്റിൿ ഫയലുകൾ" + +msgid "Syndication" +msgstr "വിതരണം " + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "ആ പേജ് നമ്പർ ഒരു ഇന്റിജറല്ല" + +msgid "That page number is less than 1" +msgstr "ആ പേജ് നമ്പർ 1 നെ കാൾ ചെറുതാണ് " + +msgid "That page contains no results" +msgstr "ആ പേജിൽ റിസൾട്ടുകൾ ഒന്നും ഇല്ല " + +msgid "Enter a valid value." +msgstr "ശരിയായ വാല്യു നൽകുക." + +msgid "Enter a valid URL." +msgstr "ശരിയായ URL നല്‍കുക" + +msgid "Enter a valid integer." +msgstr "ശരിയായ ഇന്റിജർ നൽകുക." + +msgid "Enter a valid email address." +msgstr "ശരിയായ ഇമെയില്‍ വിലാസം നല്‍കുക." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, അണ്ടര്‍സ്കോര്‍, ഹൈഫന്‍ എന്നിവ മാത്രം അടങ്ങിയ ശരിയായ ഒരു 'സ്ലഗ്ഗ്' നൽകുക. " + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"യൂണികോഡ് അക്ഷരങ്ങൾ, അക്കങ്ങൾ, ഹൈഫണുകൾ, അണ്ടർസ്കോറുക‌‌ൾ എന്നിവമാത്രം അടങ്ങിയ ശെരിയായ ‌ഒരു " +"“സ്ലഗ്” എഴുതുക ." + +msgid "Enter a valid IPv4 address." +msgstr "ശരിയായ IPv4 വിലാസം നൽകുക." + +msgid "Enter a valid IPv6 address." +msgstr "ശരിയായ ഒരു IPv6 വിലാസം നൽകുക." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "ശരിയായ ഒരു IPv4 വിലാസമോ IPv6 വിലാസമോ നൽകുക." + +msgid "Enter only digits separated by commas." +msgstr "കോമകൾ ഉപയോഗിച്ച് വേർതിരിച്ച രീതിയിലുള്ള അക്കങ്ങൾ മാത്രം നൽകുക." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "ഇത് %(limit_value)s ആവണം. (ഇപ്പോള്‍ %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "ഇത് %(limit_value)s-ഓ അതില്‍ കുറവോ ആവണം" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "ഇത് %(limit_value)s-ഓ അതില്‍ കൂടുതലോ ആവണം" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"ഈ വാല്യൂയിൽ %(limit_value)d ക്യാരക്ടർ എങ്കിലും ഉണ്ടെന്നു ഉറപ്പു വരുത്തുക(ഇതിൽ " +"%(show_value)d ഉണ്ട് )" +msgstr[1] "" +"ഈ വാല്യൂയിൽ %(limit_value)dക്യാരക്ടേർസ് എങ്കിലും ഉണ്ടെന്നു ഉറപ്പു വരുത്തുക(ഇതിൽ " +"%(show_value)d ഉണ്ട് )" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"ഈ വാല്യൂയിൽ %(limit_value)d ക്യാരക്ടർ 1 ഇൽ കൂടുതൽ ഇല്ലെന്നു ഉറപ്പു വരുത്തുക(ഇതിൽ 2 " +"%(show_value)d ഉണ്ട് )" +msgstr[1] "" +"ഈ വാല്യൂയിൽ %(limit_value)d ക്യാരക്ടർസ് 1 ഇൽ കൂടുതൽ ഇല്ലെന്നു ഉറപ്പു വരുത്തുക(ഇതിൽ 2 " +"%(show_value)d ഉണ്ട് )" + +msgid "Enter a number." +msgstr "ഒരു സംഖ്യ നല്കുക." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "%(max)s ഡിജിറ്റിൽ കൂടുതൽ ഇല്ല എന്ന് ഉറപ്പു വരുത്തുക ." +msgstr[1] "%(max)sഡിജിറ്റ്സിൽ കൂടുതൽ ഇല്ല എന്ന് ഉറപ്പു വരുത്തുക. " + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "%(max)sകൂടുതൽ ഡെസിമൽ പോയന്റില്ല എന്ന് ഉറപ്പു വരുത്തുക. " +msgstr[1] "%(max)sകൂടുതൽ ഡെസിമൽ പോയിന്റുകളില്ല എന്ന് ഉറപ്പു വരുത്തുക. " + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "%(max)sഡിജിറ്റ് ഡെസിമൽ പോയിന്റിനു മുൻപ് ഇല്ല എന്ന് ഉറപ്പു വരുത്തുക." +msgstr[1] "%(max)sഡിജിറ്റ്സ് ഡെസിമൽ പോയിന്റിനു മുൻപ് ഇല്ല എന്ന് ഉറപ്പു വരുത്തുക. " + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"“%(extension)s” എന്ന ഫയൽ എക്സ്റ്റൻഷൻ അനുവദനീയമല്ല. അനുവദനീയമായ എക്സ്റ്റൻഷനുകൾ ഇവയാണ്: " +"%(allowed_extensions)s" + +msgid "Null characters are not allowed." +msgstr "Null ക്യാരക്ടറുകൾ അനുവദനീയമല്ല." + +msgid "and" +msgstr "പിന്നെ" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)sഉള്ള %(model_name)sനിലവിലുണ്ട്." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r എന്ന വാല്യൂ ശെരിയായ ചോയ്സ് അല്ല. " + +msgid "This field cannot be null." +msgstr "ഈ കളം (ഫീല്‍ഡ്) ഒഴിച്ചിടരുത്." + +msgid "This field cannot be blank." +msgstr "ഈ കളം (ഫീല്‍ഡ്) ഒഴിച്ചിടരുത്." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s-ഓടു കൂടിയ %(model_name)s നിലവിലുണ്ട്." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(date_field_label)s %(lookup_type)s-നു %(field_label)s ആവര്‍ത്തിക്കാന്‍ പാടില്ല." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s എന്ന തരത്തിലുള്ള കളം (ഫീല്‍ഡ്)" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” മൂല്യം ഒന്നുകിൽ True, False എന്നിവയിലേതെങ്കിലുമേ ആവാൻ പാടുള്ളൂ." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" +"“%(value)s” മൂല്യം ഒന്നുകിൽ True, False അല്ലെങ്കിൽ None എന്നിവയിലേതെങ്കിലുമേ ആവാൻ " +"പാടുള്ളൂ." + +msgid "Boolean (Either True or False)" +msgstr "ശരിയോ തെറ്റോ (True അഥവാ False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "സ്ട്രിങ്ങ് (%(max_length)s വരെ നീളമുള്ളത്)" + +msgid "Comma-separated integers" +msgstr "കോമയിട്ട് വേര്‍തിരിച്ച സംഖ്യകള്‍" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "തീയതി (സമയം വേണ്ട)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "തീയതി (സമയത്തോടൊപ്പം)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ദശാംശസംഖ്യ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "കാലയളവ്" + +msgid "Email address" +msgstr "ഇ-മെയില്‍ വിലാസം" + +msgid "File path" +msgstr "ഫയല്‍ സ്ഥാനം" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "ദശാംശസംഖ്യ" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "പൂര്‍ണ്ണസംഖ്യ" + +msgid "Big (8 byte) integer" +msgstr "8 ബൈറ്റ് പൂര്‍ണസംഖ്യ." + +msgid "Small integer" +msgstr "ഹ്രസ്വ പൂര്‍ണസംഖ്യ" + +msgid "IPv4 address" +msgstr "IPv4 വിലാസം" + +msgid "IP address" +msgstr "IP വിലാസം" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "ശരിയോ തെറ്റോ എന്നു മാത്രം (True, False, None എന്നിവയില്‍ ഏതെങ്കിലും ഒന്ന്)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "ധന പൂര്‍ണസംഖ്യ" + +msgid "Positive small integer" +msgstr "ധന ഹ്രസ്വ പൂര്‍ണസംഖ്യ" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "സ്ലഗ് (%(max_length)s വരെ)" + +msgid "Text" +msgstr "ടെക്സ്റ്റ്" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "സമയം" + +msgid "URL" +msgstr "URL(വെബ്-വിലാസം)" + +msgid "Raw binary data" +msgstr "റോ ബൈനറി ഡാറ്റ" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "എല്ലായിടത്തും യുണീക്കായ ഐഡന്റിഫൈയർ." + +msgid "File" +msgstr "ഫയല്‍" + +msgid "Image" +msgstr "ചിത്രം" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s%(value)r ഉള്ള%(model)s ഇൻസ്റ്റൻസ് നിലവിൽ ഇല്ല." + +msgid "Foreign Key (type determined by related field)" +msgstr "ഫോറിന്‍ കീ (ടൈപ്പ് ബന്ധപ്പെട്ട ഫീല്‍ഡില്‍ നിന്നും നിര്‍ണ്ണയിക്കുന്നതാണ്)" + +msgid "One-to-one relationship" +msgstr "വണ്‍-ടു-വണ്‍ ബന്ധം" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s റിലേഷൻഷിപ്‌." + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)sറിലേഷൻഷിപ്‌സ്. " + +msgid "Many-to-many relationship" +msgstr "മെനി-ടു-മെനി ബന്ധം" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "ഈ കള്ളി(ഫീല്‍ഡ്) നിര്‍ബന്ധമാണ്." + +msgid "Enter a whole number." +msgstr "ഒരു പൂര്‍ണസംഖ്യ നല്കുക." + +msgid "Enter a valid date." +msgstr "ശരിയായ തീയതി നല്കുക." + +msgid "Enter a valid time." +msgstr "ശരിയായ സമയം നല്കുക." + +msgid "Enter a valid date/time." +msgstr "ശരിയായ തീയതിയും സമയവും നല്കുക." + +msgid "Enter a valid duration." +msgstr "സാധുതയുള്ള കാലയളവ് നല്കുക." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "ദിവസങ്ങളുടെ എണ്ണം {min_days}, {max_days} എന്നിവയുടെ ഇടയിലായിരിക്കണം." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "ഫയലൊന്നും ലഭിച്ചിട്ടില്ല. ഫോമിലെ എന്‍-കോഡിംഗ് പരിശോധിക്കുക." + +msgid "No file was submitted." +msgstr "ഫയലൊന്നും ലഭിച്ചിട്ടില്ല." + +msgid "The submitted file is empty." +msgstr "ലഭിച്ച ഫയല്‍ ശൂന്യമാണ്." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"ഈ ഫയൽ നെയ്മിൽ%(max)dക്യാരക്ടറിൽ കൂടുതലില്ല എന്ന് ഉറപ്പു വരുത്തുക (അതിൽ %(length)dഉണ്ട്) . " +msgstr[1] "" +"ഈ ഫയൽ നെയ്മിൽ%(max)dക്യാരക്ടേഴ്‌സിൽ കൂടുതലില്ല എന്ന് ഉറപ്പു വരുത്തുക (അതിൽ %(length)dഉണ്ട്)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"ഒന്നുകില്‍ ഫയല്‍ സമര്‍പ്പിക്കണം, അല്ലെങ്കില്‍ ക്ളിയര്‍ എന്ന ചെക്ബോക്സ് ടിക് ചെയ്യണം. ദയവായി രണ്ടും " +"കൂടി ചെയ്യരുത്." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"ശരിയായ ചിത്രം അപ് ലോഡ് ചെയ്യുക. നിങ്ങള്‍ നല്കിയ ഫയല്‍ ഒന്നുകില്‍ ഒരു ചിത്രമല്ല, അല്ലെങ്കില്‍ " +"വികലമാണ്." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "യോഗ്യമായത് തെരഞ്ഞെടുക്കുക. %(value)s ലഭ്യമായവയില്‍ ഉള്‍പ്പെടുന്നില്ല." + +msgid "Enter a list of values." +msgstr "മൂല്യങ്ങളുടെ പട്ടിക(ലിസ്റ്റ്) നല്കുക." + +msgid "Enter a complete value." +msgstr "പൂർണ്ണമായ വാല്യൂ നല്കുക." + +msgid "Enter a valid UUID." +msgstr "സാധുവായ യു യു ഐ ഡി നല്കുക." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(ഹിഡൻ ഫീൽഡ് %(name)s)%(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ക്രമം" + +msgid "Delete" +msgstr "ഡിലീറ്റ്" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s-നായി നല്കുന്ന വിവരം ആവര്‍ത്തിച്ചത് ദയവായി തിരുത്തുക." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "%(field)s-നായി നല്കുന്ന വിവരം ആവര്‍ത്തിക്കാന്‍ പാടില്ല. ദയവായി തിരുത്തുക." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(date_field)s ലെ %(lookup)s നു വേണ്ടി %(field_name)s നു നല്കുന്ന വിവരം ആവര്‍ത്തിക്കാന്‍ " +"പാടില്ല. ദയവായി തിരുത്തുക." + +msgid "Please correct the duplicate values below." +msgstr "താഴെ കൊടുത്തവയില്‍ ആവര്‍ത്തനം ഒഴിവാക്കുക." + +msgid "The inline value did not match the parent instance." +msgstr "ഇൻലൈൻ വാല്യൂ, പാരെന്റ് ഇൻസ്റ്റൻസുമായി ചേരുന്നില്ല." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "യോഗ്യമായത് തെരഞ്ഞെടുക്കുക. നിങ്ങള്‍ നല്കിയത് ലഭ്യമായവയില്‍ ഉള്‍പ്പെടുന്നില്ല." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "കാലിയാക്കുക" + +msgid "Currently" +msgstr "നിലവിലുള്ളത്" + +msgid "Change" +msgstr "മാറ്റുക" + +msgid "Unknown" +msgstr "അജ്ഞാതം" + +msgid "Yes" +msgstr "അതെ" + +msgid "No" +msgstr "അല്ല" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ഉണ്ട്,ഇല്ല,ഉണ്ടായേക്കാം" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ബൈറ്റ്" +msgstr[1] "%(size)d ബൈറ്റുകള്‍" + +#, python-format +msgid "%s KB" +msgstr "%s കെ.ബി" + +#, python-format +msgid "%s MB" +msgstr "%s എം.ബി" + +#, python-format +msgid "%s GB" +msgstr "%s ജി.ബി" + +#, python-format +msgid "%s TB" +msgstr "%s ടി.ബി" + +#, python-format +msgid "%s PB" +msgstr "%s പി.ബി" + +msgid "p.m." +msgstr "പി. എം (ഉച്ചയ്ക്കു ശേഷം) " + +msgid "a.m." +msgstr "എ. എം (ഉച്ചയ്ക്കു മുമ്പ്)" + +msgid "PM" +msgstr "പി. എം (ഉച്ചയ്ക്കു ശേഷം) " + +msgid "AM" +msgstr "എ. എം (ഉച്ചയ്ക്കു മുമ്പ്)" + +msgid "midnight" +msgstr "അര്‍ധരാത്രി" + +msgid "noon" +msgstr "ഉച്ച" + +msgid "Monday" +msgstr "തിങ്കളാഴ്ച" + +msgid "Tuesday" +msgstr "ചൊവ്വാഴ്ച" + +msgid "Wednesday" +msgstr "ബുധനാഴ്ച" + +msgid "Thursday" +msgstr "വ്യാഴാഴ്ച" + +msgid "Friday" +msgstr "വെള്ളിയാഴ്ച" + +msgid "Saturday" +msgstr "ശനിയാഴ്ച" + +msgid "Sunday" +msgstr "ഞായറാഴ്ച" + +msgid "Mon" +msgstr "തിങ്കള്‍" + +msgid "Tue" +msgstr "ചൊവ്വ" + +msgid "Wed" +msgstr "ബുധന്‍" + +msgid "Thu" +msgstr "വ്യാഴം" + +msgid "Fri" +msgstr "വെള്ളി" + +msgid "Sat" +msgstr "ശനി" + +msgid "Sun" +msgstr "ഞായര്‍" + +msgid "January" +msgstr "ജനുവരി" + +msgid "February" +msgstr "ഫെബ്രുവരി" + +msgid "March" +msgstr "മാര്‍ച്ച്" + +msgid "April" +msgstr "ഏപ്രില്‍" + +msgid "May" +msgstr "മേയ്" + +msgid "June" +msgstr "ജൂണ്‍" + +msgid "July" +msgstr "ജൂലൈ" + +msgid "August" +msgstr "ആഗസ്ത്" + +msgid "September" +msgstr "സെപ്തംബര്‍" + +msgid "October" +msgstr "ഒക്ടോബര്‍" + +msgid "November" +msgstr "നവംബര്‍" + +msgid "December" +msgstr "ഡിസംബര്‍" + +msgid "jan" +msgstr "ജനു." + +msgid "feb" +msgstr "ഫെബ്രു." + +msgid "mar" +msgstr "മാര്‍ച്ച്" + +msgid "apr" +msgstr "ഏപ്രില്‍" + +msgid "may" +msgstr "മേയ്" + +msgid "jun" +msgstr "ജൂണ്‍" + +msgid "jul" +msgstr "ജൂലൈ" + +msgid "aug" +msgstr "ആഗസ്ത്" + +msgid "sep" +msgstr "സെപ്ടം." + +msgid "oct" +msgstr "ഒക്ടോ." + +msgid "nov" +msgstr "നവം." + +msgid "dec" +msgstr "ഡിസം." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ജനു." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ഫെബ്രു." + +msgctxt "abbrev. month" +msgid "March" +msgstr "മാര്‍ച്ച്" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ഏപ്രില്‍" + +msgctxt "abbrev. month" +msgid "May" +msgstr "മേയ്" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ജൂണ്‍" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ജൂലൈ" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ആഗ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "സെപ്തം." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ഒക്ടോ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "നവം." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ഡിസം." + +msgctxt "alt. month" +msgid "January" +msgstr "ജനുവരി" + +msgctxt "alt. month" +msgid "February" +msgstr "ഫെബ്രുവരി" + +msgctxt "alt. month" +msgid "March" +msgstr "മാര്‍ച്ച്" + +msgctxt "alt. month" +msgid "April" +msgstr "ഏപ്രില്‍" + +msgctxt "alt. month" +msgid "May" +msgstr "മേയ്" + +msgctxt "alt. month" +msgid "June" +msgstr "ജൂണ്‍" + +msgctxt "alt. month" +msgid "July" +msgstr "ജൂലൈ" + +msgctxt "alt. month" +msgid "August" +msgstr "ആഗസ്ത്" + +msgctxt "alt. month" +msgid "September" +msgstr "സെപ്തംബര്‍" + +msgctxt "alt. month" +msgid "October" +msgstr "ഒക്ടോബര്‍" + +msgctxt "alt. month" +msgid "November" +msgstr "നവംബര്‍" + +msgctxt "alt. month" +msgid "December" +msgstr "ഡിസംബര്‍" + +msgid "This is not a valid IPv6 address." +msgstr "ഇതു സാധുവായ IPv6 വിലാസമല്ല." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "അഥവാ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "വിലക്കപ്പെട്ടത്" + +msgid "CSRF verification failed. Request aborted." +msgstr "സി എസ് ആർ എഫ് പരിശോധന പരാജയപ്പെട്ടു. റിക്വെസ്റ്റ് റദ്ദാക്കി." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"ഫോം സമർപ്പിക്കുമ്പോൾ ഒരു CSRF കുക്കി ഈ സൈറ്റിൽ ആവശ്യമാണ് എന്നതിനാലാണ് നിങ്ങൾ ഈ സന്ദേശം " +"കാണുന്നത്. മറ്റുള്ളവരാരെങ്കിലും നിങ്ങളുടെ ബ്രൗസറിനെ നിയന്ത്രിക്കുന്നില്ല എന്ന് ഉറപ്പുവരുത്താനായി ഈ " +"കുക്കി ആവശ്യമാണ്. " + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Debug=True എന്നു കൊടുത്താൽ കൂടുതൽ കാര്യങ്ങൾ അറിയാൻ കഴിയും." + +msgid "No year specified" +msgstr "വര്‍ഷം പരാമര്‍ശിച്ചിട്ടില്ല" + +msgid "Date out of range" +msgstr "ഡാറ്റ പരിധിയുടെ പുറത്താണ്" + +msgid "No month specified" +msgstr "മാസം പരാമര്‍ശിച്ചിട്ടില്ല" + +msgid "No day specified" +msgstr "ദിവസം പരാമര്‍ശിച്ചിട്ടില്ല" + +msgid "No week specified" +msgstr "ആഴ്ച പരാമര്‍ശിച്ചിട്ടില്ല" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s ഒന്നും ലഭ്യമല്ല" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future ന് False എന്നു നല്കിയിട്ടുള്ളതിനാല്‍ Future " +"%(verbose_name_plural)s ഒന്നും ലഭ്യമല്ല." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "ചോദ്യത്തിനു ചേരുന്ന് %(verbose_name)s ഇല്ല" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "ഡയറക്ടറി സൂചികകള്‍ ഇവിടെ അനുവദനീയമല്ല." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s യുടെ സൂചിക" + +msgid "The install worked successfully! Congratulations!" +msgstr "ഇൻസ്ടാൾ ഭംഗിയായി നടന്നു! അഭിനന്ദനങ്ങൾ !" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "ജാംഗോ ഡോക്യുമെന്റേഷൻ" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "പരിശീലനം: ഒരു പോളിങ്ങ് ആപ്പ്" + +msgid "Get started with Django" +msgstr "ജാംഗോയുമായി പരിചയത്തിലാവുക" + +msgid "Django Community" +msgstr "ജാംഗോ കമ്യൂണിറ്റി" + +msgid "Connect, get help, or contribute" +msgstr "കൂട്ടുകൂടൂ, സഹായം തേടൂ, അല്ലെങ്കിൽ സഹകരിക്കൂ" diff --git a/venv/Lib/site-packages/django/conf/locale/ml/__init__.py b/venv/Lib/site-packages/django/conf/locale/ml/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ml/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ml/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..578ad2814e4983925bbd50e18018887ee12327d4 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lZjOF@d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04k?6+W-In literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ml/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ml/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dae91ff201a5f972cd4541ee67730d83de678f27 GIT binary patch literal 785 zcmZXSO>f#T7{_B0Adu3IYTIF_Tyj7Ha!1{?tOOFRc~M?8#flaM91x6;^oaKgv&^fph(s^1KRe!hB&SjxI%fs1C&WDgkth}gBnsXs+IAXw`&j1%Wgut+ z!Oq{lLVaPDU!GGUJhUqd|3`b_89fQNuZ1tDEIiO1=s$t(BTe3=cUq7eN{$?i3`>(7 z$T_NZO0J4Z8MHlFvI5P}9pxx^v(JW-cO-3FF)Sx2cYXJQ&f1Ms%Pw|$fiVic$?{it z{VY>;({&F0Z210kjdR`}%D1W}-37L6N|xjp7QA*8!?h)SSYlVYt9_BJU~Cz#sp{ij zR7$?t-aJLO1K-6_ihXN?ap(_|=_ZcW8TQAEOxaBQ(IUlJ&rFkLG|l{nX#L>dEhau* zWKr)voc;*s5%$qCT+b76nyhEyDw&3>NQ_tFEJ@=q!~Og1j=hN!v{^-;067_dAckQW OP@Zg+Z801JSnv<@S;?LN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ml/formats.py b/venv/Lib/site-packages/django/conf/locale/ml/formats.py new file mode 100644 index 000000000..b1ca2ee84 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ml/formats.py @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "N j, Y" +TIME_FORMAT = "P" +DATETIME_FORMAT = "N j, Y, P" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "F j" +SHORT_DATE_FORMAT = "m/d/Y" +SHORT_DATETIME_FORMAT = "m/d/Y P" +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%m/%d/%Y", # '10/25/2006' + "%m/%d/%y", # '10/25/06' + # "%b %d %Y", # 'Oct 25 2006' + # "%b %d, %Y", # 'Oct 25, 2006' + # "%d %b %Y", # '25 Oct 2006' + # "%d %b, %Y", # '25 Oct, 2006' + # "%B %d %Y", # 'October 25 2006' + # "%B %d, %Y", # 'October 25, 2006' + # "%d %B %Y", # '25 October 2006' + # "%d %B, %Y", # '25 October, 2006' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%m/%d/%Y %H:%M:%S", # '10/25/2006 14:30:59' + "%m/%d/%Y %H:%M:%S.%f", # '10/25/2006 14:30:59.000200' + "%m/%d/%Y %H:%M", # '10/25/2006 14:30' + "%m/%d/%y %H:%M:%S", # '10/25/06 14:30:59' + "%m/%d/%y %H:%M:%S.%f", # '10/25/06 14:30:59.000200' + "%m/%d/%y %H:%M", # '10/25/06 14:30' +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..06071c937ba416e0cf934bda3e4cf20a831e43ac GIT binary patch literal 24783 zcmd6u37k~bo$rr|5OIt99xo``t#ku!(N_I<65!B^i}fKpKoQIx~rrOtqSM$t07-WTJT{CQjx#@%dineShbis=8G)ioWE1 zUdid-J^TOsxAQ;eUVn7>kh=}PbN4akMDT?Jj9J5T<_MJ<^ZVnBxg2~KRQ<%`jX4RN z3tkA`1fCCW2QL8s9aOu~Cm3@GI1T(b_-XJ+Fby6Ke$kh&^0*q@pYlx}w|jifrBzW!}c^A3fHhk^%#qVFV7`gVXC?*&lpzXPiOtDxlY15oSz6{vAU?0&%E zp!y#TN^U2E>emdO4xS6D|Mj5OnFTKbmxAi|4N&ua6FeCFCs6D8SFiy78~7FQGbbA} zAAB3U6YL6%c@%sXTn#>ia5e6Pk;YsMei6J7+zB27zU%R@Qyl*qK}2sZ0QqO;_8K$el)0g18{%vR8V|4162D7py;>~l>WDY zXM&#x)&4eLf0xJmK+(Ax90Gpb<9cu?`7NNv>-YH=K#lW~&ky+e?}3{CC!qA{O^@&T z@?obt`VR-?e@+B(QDzP}49tNVw-?m`ywd4{WFh?L5;s0#ATUBL0ph|0X!Rg9UKRqfU=ASXMpl2w}PVk36L$( zyZ}m$KL&Ae=08F4?YJ?HpC^Hu_cT!c=S)!bmw=*wlE>+w#%cBS^FYy^1I6F@py*u$ zs^3H4wcumm!Jw2w^Be+d{YQYOfyaT8!=<3~pcT9w{2VAcehq5;w?XxL57apOuz1xE z1-}gr2fq(~4^;iev)p>Nf*SuNk3aJGw#OkbQ}xGqJOdOT#)F4}pYrAH9_NEcQ2rO- z$H50dwR_5!f5YRepvHXzJQRG-Vhs!6c~l^?JO~T!j~TRq<4@k<`>@pwOI?FSTpp77;QdfWiYuDAI5ZN7XbD1Cn(lzhJfN^ZXbzqk*y zpNo!?zw0~~e;oHo=ak(xE^yQsP)VTMSmX%xn?=2_21&_SAx>JJ3-0geo%J$HBkI| z1{A%|fok_NP~*J?s@;2_=pNSMN2?-Ee$XM&@^>p)b`EC%UnHiH`XEnojG zD1AB^r*a%P4pjf?pvL_)sQ4rSYW%N)>i;w-eS8)ay)S|Cx4!|e1IH2EXq=Ux+T91r ze!mWC+>M~-+u`xMp!~{je0>uc^*;}604Mo;2AoK~50o7H!PCJK7=gbB<#*;mwCG(4 zs@(&i=w1ekJc2F_!1_yTyXfYQ?~;2Gc#LGgRo6qla>vNV$c18^Ov_TK^}pSMA#G^b8=`*8<2iu~Q+NN@*u zD)=K%db%IV{u%IGPsqK)u8&{4h{$J2UY(VD7rWL{0@(Q532nu z;BfFK9^dr%4k*6tGu_o6?(rm0@ofWmEO;>}eqIA=ybf?4m=)sP!E-!^I)TgJ+QcJUAA-6>J3i z!4Uif*bH7d)7jgN;AryO!4p&ujsW+)%FTZ&h)J7qKHm+VNPZzGy}JiI1pFGfFSs2P zJ^kRr;EUijU^vT|4d6~tdY=0fF&4N1=%4d8ZAdjA@D5coem z4x_X5@ksD^umx2898mNmLGk~K;8EZ@Q1mv7ls_qgh}3KZF9*eJT%ef-&IMP1XM?YU@<%72M3;bbKwO}?8$1(y z6%?Iv0!IPEK;=&YrDv!5{ABPL^3y@l-wvvO2HX$47Zg7p@VE{fLjD=>XmAJkIQTNC zc^2ZtG|ru%*7;Z981PY0a(fljy59jefcszP=-LX3j$NSo{j)FsDX8(@08iKl`v5Nj z55C^famD8xeOGz>EO;>O(>~wp@n(;!JU-;{>mIj(>i43@SA6+TJ-!8sj`u*(Hw0lQ ze<-N+9P9I^gQ_13ir*J{oaoD^d2I9Lb3yU513VC%2a4al9&h&Lt2{pFah=C49-sI4 zZBTmoeNgLp6V!O`dK~(BNB0q+<~#jF5fxAiH236$|aRM32f zG>(KDFt`S@k)+?-q_ll<^vvXWJLyNh>@>zX*FOi~R?W6pO7_mgb(KDq*HiCwaqfp!943X%A=m|CW*i0-&c5O^_d

    %QzH-}js3(@_ek%{{qC#n7<@_iuAup_mlK{(Sg~Yv86zF`Ft6U z=HXeNc@vyMI+J#1fjQDYlInk_QSfi1-nxo)oR3?&}^%4gPq-}cWJgJT$XD)^u;n+SfvKevG2BOOQ^+?2K7UEr@tUn2dGbToBm zk^YtE?~{%seU)?r>1L9CSCZZ(-A8(fq~C?4|0EqmU;P@v{oJGZE{JAy%{Caom>l=M7FzyBcpp7a~iailv)b4dEFCCw*2KpIZ^B55dTG3oC}za$MK>Gu=T z8+zdP4rw##Qqn`D=SWwR&LFjuZY7-#ZO4)x<9R)42dRnlzet^=b4cS!|4urJRQ`>m z&k)iQ3U2a+A0uDnS??bfmK%c0Nk1UnL;7!|$4Q6M=4+tNA%}whOuC4q-<_oYLFy-+ zNc~bU{`)$a+ez2O3h(8)fpl`LOpiY!eS$IcyMXipX*BuIgRhawznwf>>obQ@e=;dc z{t{odFF1m-Z-GaE`W+5VbB{JY|1+LnC55C>q$b~vNBjE+{x(zg=RW@j@NCk@eg1gr z-s8DIy4;r?;PEYw`_SfLo}VTiLfWSCQ4JmGFq4{_NhHHeV?O9E<_keG42s$G7m8uf zk&A*+4XH#SoLk#&R6{10n^)|aTj=Wv8}rQ?D9Uv==9@+}6mkp{g_%Sloy+FC(mn56 znWwfpm$I{`v-v_I+a3nJ=|UG1+c_C*RKxs4rWiIxK`IyKgKVx4gbUL7f~K{7=VlY# zkm33jy3*=WOK>6+g^5(3>u2fRn~r(L+`VT$y)bM{1I9l%AJJWb3Wip=+5h6eHWE*oh*U3H*r?8MU2~?abJ= z3&SXxNZ&wDGcl1z$;?DlB`W6CZ(^A3q`jG#?hG2vw;XN^(%C}T8AfJeE|&=zs$mM+ z5k^5TV%$gr|W zU5RWbJy}6yCgn1@?qr;WlXBhNiKcwmlZY_3RC&#Lnr5?Mdtr3Y85V-BFw-+yi)lwo zqI6PvG%3nKf@Ua25u(ZTnMn)7_AWEo31>3n1r64q3Tcdl@^V40SO{We%H}$P$Pzjk zEuI{+Eln8#8jft8fPMt$@Q`dq!c!r$q2hM z7ifvNl>+0sg2}n|B8pS69Q1`P0iq4A36nubgh}`2qIuQ{^@LFeli^S>dvE6{3_6p} zhFJ6DB5b3QhXPBV(v3KRL@E`9`MfEs-jr;<2!VyJ1j`m_p5CB4=ZdqKM|WZYHlOkf z?#U$DS;0r`31uIqYq~Qn=Zn)7m0^{N947GLhsysE$3nzGA%`k|6fy?si-+#OV&s;B zt^}G>KnmE66F@3x@4^t;3s`vrJW&gF9GpX;t1;CWqhYVd$$#)bc8@7jgPmG(GU@Jg zVXoVL1}7`umFq1xs3Yyej2I_yZ-?|O`{U90{sVp}5|Iodi*e8Ow#Bja33#RC;`^`q7*gX1{eGg$s!_0=2+9BOxuoLXQ9(3q~AJpTWrnQl{-&Z zZAX1N6-=8o|D3Yh8MKad(B{1NX|u<=IkT^A6srwZHb#zqw+inz>&wHq z|E#a{+i`vIVB^;@v$u;4+;1Y~?zwEHFG$Jr<%8<>m+X^7x)b7f9^aqH7IHkXJ8P$# z8YZJ+BI+|!6}xKBQWV;PX1JKo#iZ0`Li;D^Nf2C3O=oSiGBu+OGus*T$gP(5w5ho$ zX+tK%Q<(0|2Ghg7pg}|7hY>o#8ao<<*~pehJ6EHb%BIVfGc`&pDfk0yFf+ACG!#M= zkwP+;4{eY-w2MrP0VMbN+jV*GHg#2^J?9mN#yfBpl!B0>D&%C5^8N@on~_x z>een+To&e{PWKRX+k7D)hF0w1f?>DUn#&?Zlb6G|u-9D9ew{X#7m2lOSTk)_Ss_ha zgUz&dA~Tw{n`x<>nbw^kfSIPPUM%NWP~QKECMhPqvdf<4!!=>V{@htiQ0)w)harN7 zQ4PYm&W0NEjglO3Rh~i(1^c?pH1-;;>xx9yiu#HK!KPxbD~d!oR}{0MnVv}YA>rwX zY&MZffD04zy3F*hZX%ZH2$9}bCJOU4%9TWnMdBen5}8CntHiBbaRDI?p?Rk!oxyI; zI#e-(sI8CG%~KY_6sVvX-GujrM1Ul^)A_u#2$R5CgkF^ zrhFcnp(w8_O^XQCnSsvCaLdp0uz;Ad8e7jGs3A$OfXgY@~d$@ML|1q#Vm)E1QC@Ms)&T( z7PH%}aaE}+^Q#d=2Uu@AVRD#Kfwugh7jET?Nw!rRAP-&~OzH~T=h-UNW9)7QiQmW18!vdBxYlfK>M%GYfDaHtKbj0oLHY5#F z#U2b>0lHN)R*6`gqsfmBdb`r?U3EwFX7eG3`H&qdC+k7xwvoA{QN9g8X^8dW7Y4c- zcwYkD#)|oHVyH9?-2u;O3A?k^8+g%PQHpk*qg+0jTQJ%>(`2sDRT;wf9mVz#1s$Pm zUOH1H=fgFyM}+qopr#%p#hJtoma}qsj+FCdt?npWDad!@;j6{P>TY<+9kw1-jJbb4|_?(H}|1!qaEY=f3~hXKwx%~H}tUe-fk^E%Ci z6kz}}5Ij*ZX}wTtD2hv0t~VU z(q`R!mF>Y>o5y1i~)s-Dp_})Lhm(@(nKPJqMv5`m~7B}X{5N&Ih%#RsKbj96cVf@IsR^TJG%Z?wJ z&EnEy)N8^F(z;gHa@XP^u7!!Z#>$7G zwRkCwntY?#troMA`0lcN-> zPb7^2v9d%n@n0gzd1ijI3j&9@d+NHfVrP9bE;H+kI8fFXaqifyNGFfl;q5u3w#dcw z^=0)P2`}r1CyuNyY7Ki-mMPRNF;?I%+G9;Bm$tF8%7HmnRz6t8i|hicgS*vL^L}aZ z0@hW{R$}H@Svfk66=_v2B0$t8(G!_OvD0wnYC6KC!6BF%iWySYbYqm=*l2e;l}&ec z6%5v%<`rx8WGkaTClA~yJX{T;wsVj0Zfm9bim%c1+{&8PjG=sjhNd^Vs2R>IL?nrZ#)AqA+I+ zcj4*mg~WcmeZmdTX`9+~ezl$E>IkEzDgLz95}cn*7b=9d1l`%;v+UJJ(^SRbEkV}Z zgyhGcbz$Hh$2Vky5#xh#jTa6#<-45ni^+i{rS+v9mPd;QmIS5EWH-XJ^#hCa%+scq zpDt|=)S|R~U|BG*Y+&WUqJfpAO#@5#yS?UEQhDE5KDqe!m_cb5eU=U^WvZQ}_01xq z=CvmC?6PF+qUGWbsI~)bE-$4~7otw@qJXL;rA^SSWr?=(E6_6iHOr~c5`S0QR9RR2 zO=eSRTWNb~Qy^{)+-A7|e^j<}U}bE11B+>~)3a-k@%832&U0G6{4}d)q%yVTqv0S^ zxrr9TtNJPY+fu*GB`{~Vl2q`@y3*!X)(tGu>(BV}z;fo=q|)kBsUMnlik~X4&1sQt zl>_ZmbOqM1A9h;n$jxRyI3@?V%#0#HG?j8S@mNO zQ(6s!`}H=rEb~UMOIYO&@d!~=U*5j_loS=>vEQYLWXHg*T8YzUTZL}#9Jnp^zPH?E zbh!_Wd0q)=8{HhY4=fD^R)~OY1GhAaK8)9KWtCm)R!O+bwTG<}fIn^pTKg*ROSW5b zcLpkfdE_i}YxuJN^xu&653R? ziT2h?n@#CHN}UI^jK9Y=!t0sRV{~Mh%(8>O6x^rznW10H-AxZ1S*t6PSQ4LrN_}i8hx4ZtzJJwm5g{-(BQm+Wz=@WyjzWPs?@A?!nN%gX5dz- z&K)TDCProb%C2NRu+>T??#0Y2Pk8S%?yMTyfoAPVOPt1TfS;1(BD{=tBr95}dTEVJ zOfzX2kE*h)HR_4-o4YUdFvAWGcX)BI!ab>-Ewq_CNHF_Wk0H zHBn~SW$g~yww3ys_8G|1?q(;bX-6FLIK?O?G)vdCnQ9t4*=DiCT11&?A__yKT#^yP zESXkz+cbw$-rAS>&F1B&phZ;ffJCdZbt9Y7m#l7yMpkZ0_d+-uxSWOd`#W&galiDW z(SZB@qUpnStbAs{u~L^IAN*lK{AKo^;>&{4S~RgA1N1&vEU^9`S;k+B6U!(* z?N_B@)v637c+6@!imWkk1@a_rU&Tr-%bN8zE%rJ+<>EiITLJPWaaHc_{~J=`a&iZ+ z+OI!qIaB!xBrdG@Y6tyz;Qw|+Sw6c`MN=)?_d=5Ss_5dLqyZ8U zqPjV2btE4&c`IT&z^(eQMtZYzVEM~Wzx;G{>b=sMy_-*wo=o)v=Zr0vkcVhyktnNj zP_9<0h$dGQSKBCC3lnS}Sf(XVg_;L;#Ux z^5cCQz?X7VH264`*l3L1&o?#MV8cZjgO6OZaT6}1750=J4+>zcjZ+36!4uDt>o@el z+B;2BSW!MD4BpDg%&lUu7AT5u;?LZBXe7Oj&$gF}HLwiz8f5eSfRMVnWe+OmC$aM9 z>~TxsDQ6@s)(0mFdTRntf_V%JW3@q^4t@hmT#yLo=zUwT+ov(*u(K}y+^T&7Gk8>5 ziG=UqF9FzE8IVksGgLfC(X;f{9pTtz6j5#CuL`y+j$3cHA^y@x;iV}NOV5ZMIzIP{@S4Ee zu}kMAd%a*uct%clnKLqa(r-(NbN1c1e)(3IyVlBxs~uBXgP81+`Fux=b1}00l&6xj zcLA}G8rEYMtW%8S{v-Z15Am8iH`bj;6pEt|EOsa4aAw}!METOE`qdAIWX30P`sVO} z|JP03;^2e60D@L`0(IfPm;E*~E`Hp48vB3{^T}A@d9i05ne7P}M`h2?5RD?bM=3h& zybtzpB{HzclpbL)e_)WpnbQ4`x`ab0i@YCE>Jc^jGR@e|1GR@pov;z+{pj|yC?A(A z_L@wWG2Aqm(gT`@V#_m^l?=9{kVp;TF^0RneAJHD@6L{Lk2Y460?3F(n=S*yc^^kt zwV|+X}_FQ_PN?2)! z-Lzro1JX^1+FSqc5|z&w8cIjaBC7_5&~41>WiWPzQR0$S+PN< zMyvg09@uRp&L^wwTE;TPLr$RBr86-0fd?5)_hC%+pvcvd6(sYQh&fI)cS@Geru2ke zCZ};B)4MAg&#q-bop<2Y)XrNgEX*tZZB_MisW_E>!t(8cT%HXanbUemD?+w)c(UDx zdrr9i3L(C&;lp-o$oluTWgx{>oCFOFg~=jX5rY)|l!Ja5e<0Ue(AZb&_)uX*T1=#s_*3)!x*^UINH@iy3~`)1EJH&rP26 zUpoS(Oc;QtK{C1>=5w;r!}4Ibtjd>S^0v4KJEHX?m;+vhy+eBg9!HB1-)unS13!t` z-no@sZ~1^3lvc;WbKl20^SV(Pp?u1BzNhv|}PpNQm`Yc1=vUcJOFd2Y6b)~`UqxosT>rA78F z%HB4NQEMlLWZ7u#u$Q>L6e0jq4d==)~onO|yNN$Dph>v?*3$mt~P4fxbEP=C{!N1%KY|yE< zF!rU9Kk?M)1(KxFy$BS`;-3WCy;U9q&8h8FHs!(glf9dz^rXC7g@JVwSk2uWuonB$ zq}f~$_l}R)nAvi$@)&64*8dTDt>u-ucAm`~DRhPJ&j?%} z+B!cxLYG}~e0bAJ#=a#}4clnYU^Uyu8CZY(o5O&kh|V9<2B=VI=)J0qy5a#v=@F4> zseU#n+n%M72nyvOe6w$H6dTt}VXp}miQ3YRMtt31A0OfkthQLF(G>P#>(nKAG>vnd z0xH5ExeutZ7xAXFnr3>BN)sL_R~%MatvLxd2su=4qddKmQENO0f8FuWErULbF-7*s z(q=jlP}$hZI+nrW5y`G{CO|`Or5}yqrDhM0%zJwZgOm*}@W9?=qstB>}gpc+Zhs0nbp&A>p z^R8N%n6`dIAg!_AdN}D?F>D!8d9&oqv}!T2&m}!ms$Wc&4{MO4hy?c`srbdoZ^hpP z;9eXt7`crA%A0`i?c$j#oBewbS#LF@7_2R?`~0p@W(&OVc5izkS061pI{i!#OowfH zUAV{oVq@8?^+wFSmC|WP%ezG!W!diN4v!t%E7KD@l@FnH_jpdPoY)?g;^MRg2!3OY z5k1Bf99813#=Sz5s3lQ0T|B`9+HpN7s+1*&o<*#W^3|e4PG+sFU2-h#XbEsRG9$*o zUgD}!`B=21gJQp31h%)vpIUI^Mz?^n#@gW5pIe-7E^W25%8f}m$kgrgvSn*~mD+mM z@S&-b5BGa^!18O2vL}=HWK%4wd_8TInpciC5XBqBD2a3a%a#);>?2lt8Ad1SHInGS zQmuC@L+kRR`teLmq|6qJd_;vm^CJJd=*C5bWh%V3`Uf44R6mKhiw`RlNsIq%w(*yy z_QdACL6z?F)|&M#()e&upCo+bFDLi*dsaACc`c;i9}U4&q)xaV`w1l%4=VA1uCa^N zsN5R$BE%t{_zKIn-d$G6S}V3`T`+94&Rjbaick|`S^IRiidK0xyH8z9&)QP~NB%w9 zV1TM{!7V#L&Cm@S2b53k&?}p*cm=J@x`DC;15adZCI;Z!0ln6O3oKWs8hb0r%X;Y> zQ`mi)ok*O)3Nb+b!$=XL#0FPo0h{+oG>T(wLWI#8cHp0wjyLI2HGL{jcA9>!MIT)k zKJr(zv*%2)DqxL_%fbqsu!i+Hc?P9^dlRHDX0^F$Kh?E#?V7|XD+J3vcfBCNSr%(g z_i~dJFg7g5qU@ImP8(}v=Dy24ry9aF$3HOQ>>IneZjN7LQx)$NyVYwpv1`5N_}x^q ziCs=HK+Op8Q+7>IDFHh!p&0feRbstO_p{p5RmQ6hd+0GGLKL(`N`#NFw^f)wZFOxW zjiCQ3y0LZKuQ7G6B!#gRsF7tY{cM0| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..d846523da --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,1256 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ankhbayar , 2013 +# Bayarkhuu Bataa, 2014,2017-2018 +# Baskhuu Lodoikhuu , 2011 +# Jannis Leidel , 2011 +# jargalan , 2011 +# Tsolmon , 2011 +# Zorig, 2013-2014,2016,2018 +# Zorig, 2019 +# Анхбаяр Анхаа , 2013-2016,2018-2019 +# Баясгалан Цэвлээ , 2011,2015,2017 +# Ганзориг БП , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 07:28+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Африк" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "Астури" + +msgid "Azerbaijani" +msgstr "Азербажан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "Беларус" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "Бэрэйтон " + +msgid "Bosnian" +msgstr "Босни" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Уэльс" + +msgid "Danish" +msgstr "Дани" + +msgid "German" +msgstr "Герман" + +msgid "Lower Sorbian" +msgstr "Доод Сорбин" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Англи" + +msgid "Australian English" +msgstr "Австрали Англи" + +msgid "British English" +msgstr "Британи Англи" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испани" + +msgid "Argentinian Spanish" +msgstr "Аргентинийн Испани" + +msgid "Colombian Spanish" +msgstr "Колумбийн Испаниар" + +msgid "Mexican Spanish" +msgstr "Мексикийн Испани" + +msgid "Nicaraguan Spanish" +msgstr "Никрагуан Испани" + +msgid "Venezuelan Spanish" +msgstr "Венесуэлийн Спани" + +msgid "Estonian" +msgstr "Эстони" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Перс" + +msgid "Finnish" +msgstr "Финлянд" + +msgid "French" +msgstr "Франц" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирланд" + +msgid "Scottish Gaelic" +msgstr "Шотландийн Гаелик" + +msgid "Galician" +msgstr "Галици" + +msgid "Hebrew" +msgstr "Еврэй" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорват" + +msgid "Upper Sorbian" +msgstr "Дээд Сорбин" + +msgid "Hungarian" +msgstr "Унгар" + +msgid "Armenian" +msgstr "Армен" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Индонези" + +msgid "Ido" +msgstr "Идо" + +msgid "Icelandic" +msgstr "Исланд" + +msgid "Italian" +msgstr "Итали" + +msgid "Japanese" +msgstr "Япон" + +msgid "Georgian" +msgstr "Гүрж" + +msgid "Kabyle" +msgstr "Кабилэ" + +msgid "Kazakh" +msgstr "Казак" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Канад" + +msgid "Korean" +msgstr "Солонгос" + +msgid "Luxembourgish" +msgstr "Лүксенбүргиш" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латви" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малайз" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "маратхи" + +msgid "Burmese" +msgstr "Бирм" + +msgid "Norwegian Bokmål" +msgstr "Норвеги Бокмал" + +msgid "Nepali" +msgstr "Непал" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвегийн нюнорск" + +msgid "Ossetic" +msgstr "Оссетик" + +msgid "Punjabi" +msgstr "Панжаби" + +msgid "Polish" +msgstr "Польш" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилийн Португали" + +msgid "Romanian" +msgstr "Румын" + +msgid "Russian" +msgstr "Орос" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словен" + +msgid "Albanian" +msgstr "Альбани" + +msgid "Serbian" +msgstr "Серби" + +msgid "Serbian Latin" +msgstr "Серби латин" + +msgid "Swedish" +msgstr "Щвед" + +msgid "Swahili" +msgstr "Савахил" + +msgid "Tamil" +msgstr "Тамил" + +msgid "Telugu" +msgstr "Тэлүгү" + +msgid "Thai" +msgstr "Тайланд" + +msgid "Turkish" +msgstr "Турк" + +msgid "Tatar" +msgstr "Татар" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Украйн" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "Узбек" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Хятад (хялбаршуулсан) " + +msgid "Traditional Chinese" +msgstr "Хятад (уламжлалт)" + +msgid "Messages" +msgstr "Мэдээллүүд" + +msgid "Site Maps" +msgstr "Сайтын бүтэц" + +msgid "Static Files" +msgstr "Статик файлууд" + +msgid "Syndication" +msgstr "Нэгтгэл" + +msgid "That page number is not an integer" +msgstr "Хуудасны дугаар бүхэл тоо / Integer / биш байна" + +msgid "That page number is less than 1" +msgstr "Хуудасны дугаар 1-ээс байга байна" + +msgid "That page contains no results" +msgstr "Хуудас үр дүн агуулаагүй байна" + +msgid "Enter a valid value." +msgstr "Зөв утга оруулна уу." + +msgid "Enter a valid URL." +msgstr "Зөв, хүчинтэй хаяг (URL) оруулна уу." + +msgid "Enter a valid integer." +msgstr "Бүхэл тоо оруулна уу" + +msgid "Enter a valid email address." +msgstr "Зөв имэйл хаяг оруулна уу" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Зөв IPv4 хаяг оруулна уу. " + +msgid "Enter a valid IPv6 address." +msgstr "Зөв IPv6 хаяг оруулна уу." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Зөв IPv4 эсвэл IPv6 хаяг оруулна уу." + +msgid "Enter only digits separated by commas." +msgstr "Зөвхөн таслалаар тусгаарлагдсан цифр оруулна уу." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Энэ утга хамгийн ихдээ %(limit_value)s байх ёстой. (одоо %(show_value)s " +"байна)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Энэ утга %(limit_value)s -с бага эсвэл тэнцүү байх ёстой." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Энэ утга %(limit_value)s -с их эсвэл тэнцүү байх нөхцлийг хангана уу." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Хамгийн ихдээ %(limit_value)d тэмдэгт байх нөхцлийг хангана уу. " +"(%(show_value)d-ийн дагуу)" +msgstr[1] "" +"Хамгийн ихдээ %(limit_value)d тэмдэгт байх нөхцлийг хангана уу. " +"(%(show_value)d-ийн дагуу)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[1] "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Тоон утга оруулна уу." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "%(max)s -ээс ихгүй утга оруулна уу " +msgstr[1] "%(max)s -ээс ихгүй утга оруулна уу " + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Энд %(max)s -аас олонгүй бутархайн орон байх ёстой. " +msgstr[1] "Энд %(max)s -аас олонгүй бутархайн орон байх ёстой. " + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Энд бутархайн таслалаас өмнө %(max)s-аас олонгүй цифр байх ёстой." +msgstr[1] "Энд бутархайн таслалаас өмнө %(max)s-аас олонгүй цифр байх ёстой." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Хоосон тэмдэгт зөвшөөрөгдөхгүй." + +msgid "and" +msgstr "ба" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s талбар бүхий %(model_name)s аль хэдийн орсон байна." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r буруу сонголт байна." + +msgid "This field cannot be null." +msgstr "Энэ хэсгийг хоосон орхиж болохгүй." + +msgid "This field cannot be blank." +msgstr "Энэ хэсэг хоосон байж болохгүй." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s талбарт давхардахгүй байх хэрэгтэй %(date_field_label)s " +"%(lookup_type)s оруулна." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Талбарийн төрөл нь : %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Үнэн худлын аль нэг нь)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Бичвэр (%(max_length)s хүртэл)" + +msgid "Comma-separated integers" +msgstr "Таслалаар тусгаарлагдсан бүхэл тоо" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Огноо (цаггүй)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Огноо (цагтай)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Аравтын бутархайт тоо" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Үргэлжлэх хугацаа" + +msgid "Email address" +msgstr "Имэйл хаяг" + +msgid "File path" +msgstr "Файлын зам " + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” бутархай тоон утга байх ёстой." + +msgid "Floating point number" +msgstr "Хөвөгч таслалтай тоо" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Бүхэл тоо" + +msgid "Big (8 byte) integer" +msgstr "Том (8 байт) бүхэл тоо" + +msgid "IPv4 address" +msgstr "IPv4 хаяг" + +msgid "IP address" +msgstr "IP хаяг" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)" + +msgid "Positive integer" +msgstr "Бүхэл тоох утга" + +msgid "Positive small integer" +msgstr "Бага бүхэл тоон утга" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (ихдээ %(max_length)s )" + +msgid "Small integer" +msgstr "Бага тоон утна" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Цаг" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Бинари өгөгдөл" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "UUID" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Зураг" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s %(value)r утгатай %(model)s байхгүй байна." + +msgid "Foreign Key (type determined by related field)" +msgstr "Гадаад түлхүүр (тодорхой төрлийн холбоос талбар)" + +msgid "One-to-one relationship" +msgstr "Нэг-нэг холбоос" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s холбоос" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s холбоосууд" + +msgid "Many-to-many relationship" +msgstr "Олон-олон холбоос" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Энэ талбарыг бөглөх шаардлагатай." + +msgid "Enter a whole number." +msgstr "Бүхэл тоон утга оруулна уу." + +msgid "Enter a valid date." +msgstr "Зөв огноо оруулна уу." + +msgid "Enter a valid time." +msgstr "Зөв цаг оруулна уу." + +msgid "Enter a valid date/time." +msgstr "Огноо/цаг-ыг зөв оруулна уу." + +msgid "Enter a valid duration." +msgstr "Үргэлжилэх хугацааг зөв оруулна уу." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Өдөрийн утга {min_days} ээс {max_days} ийн хооронд байх ёстой." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл оруулаагүй байна. Маягтаас кодлох төрлийг чагтал. " + +msgid "No file was submitted." +msgstr "Файл оруулаагүй байна." + +msgid "The submitted file is empty." +msgstr "Оруулсан файл хоосон байна. " + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[1] "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Нэг бол сонголтын чягтыг авах эсвэл файл оруулна уу. Зэрэг хэрэгжих " +"боломжгүй." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Зөв зураг оруулна уу. Таны оруулсан файл нэг бол зургийн файл биш эсвэл " +"гэмтсэн зураг байна." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Зөв сонголт хийнэ үү. %(value)s гэсэн сонголт байхгүй байна." + +msgid "Enter a list of values." +msgstr "Өгөгдхүүний жагсаалтаа оруулна уу." + +msgid "Enter a complete value." +msgstr "Бүрэн утга оруулна уу." + +msgid "Enter a valid UUID." +msgstr "Зөв UUID оруулна уу." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Нууц талбар%(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "УдирдахФормын мэдээлэл олдсонгүй эсвэл өөрчлөгдсөн байна" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "%d ихгүй форм илгээн үү" +msgstr[1] "%d ихгүй форм илгээн үү" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "%d эсвэл их форм илгээнэ үү" +msgstr[1] "%d эсвэл их форм илгээнэ үү" + +msgid "Order" +msgstr "Эрэмбэлэх" + +msgid "Delete" +msgstr "Устгах" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s хэсэг дэх давхардсан утгыг засварлана уу. " + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s хэсэг дэх давхардсан утгыг засварлана уу. Түүний утгууд " +"давхардахгүй байх ёстой." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s хэсэг дэх давхардсан утгыг засварлана уу. %(date_field)s-н " +"%(lookup)s хувьд давхардахгүй байх ёстой." + +msgid "Please correct the duplicate values below." +msgstr "Доорх давхардсан утгуудыг засна уу." + +msgid "The inline value did not match the parent instance." +msgstr "Inline утга эцэг обекттой таарахгүй байна." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Зөв сонголт хийнэ үү. Энэ утга сонголтонд алга." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Цэвэрлэх" + +msgid "Currently" +msgstr "Одоогийн" + +msgid "Change" +msgstr "Засах" + +msgid "Unknown" +msgstr "Тодорхойгүй" + +msgid "Yes" +msgstr "Тийм" + +msgid "No" +msgstr "Үгүй" + +msgid "Year" +msgstr "Жил" + +msgid "Month" +msgstr "Сар" + +msgid "Day" +msgstr "Өдөр" + +msgid "yes,no,maybe" +msgstr "тийм,үгүй,магадгүй" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "шөнө дунд" + +msgid "noon" +msgstr "үд дунд" + +msgid "Monday" +msgstr "Даваа гариг" + +msgid "Tuesday" +msgstr "Мягмар гариг" + +msgid "Wednesday" +msgstr "Лхагва гариг" + +msgid "Thursday" +msgstr "Пүрэв гариг" + +msgid "Friday" +msgstr "Баасан гариг" + +msgid "Saturday" +msgstr "Бямба гариг" + +msgid "Sunday" +msgstr "Ням гариг" + +msgid "Mon" +msgstr "Дав" + +msgid "Tue" +msgstr "Мяг" + +msgid "Wed" +msgstr "Лха" + +msgid "Thu" +msgstr "Пүр" + +msgid "Fri" +msgstr "Баа" + +msgid "Sat" +msgstr "Бям" + +msgid "Sun" +msgstr "Ням" + +msgid "January" +msgstr "1-р сар" + +msgid "February" +msgstr "2-р сар" + +msgid "March" +msgstr "3-р сар" + +msgid "April" +msgstr "4-р сар" + +msgid "May" +msgstr "5-р сар" + +msgid "June" +msgstr "6-р сар" + +msgid "July" +msgstr "7-р сар" + +msgid "August" +msgstr "8-р сар" + +msgid "September" +msgstr "9-р сар" + +msgid "October" +msgstr "10-р сар" + +msgid "November" +msgstr "11-р сар" + +msgid "December" +msgstr "12-р сар" + +msgid "jan" +msgstr "1-р сар" + +msgid "feb" +msgstr "2-р сар" + +msgid "mar" +msgstr "3-р сар" + +msgid "apr" +msgstr "4-р сар" + +msgid "may" +msgstr "5-р сар" + +msgid "jun" +msgstr "6-р сар" + +msgid "jul" +msgstr "7-р сар" + +msgid "aug" +msgstr "8-р сар " + +msgid "sep" +msgstr "9-р сар" + +msgid "oct" +msgstr "10-р сар" + +msgid "nov" +msgstr "11-р сар" + +msgid "dec" +msgstr "12-р сар" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "1-р сар." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "2-р сар." + +msgctxt "abbrev. month" +msgid "March" +msgstr "3-р сар." + +msgctxt "abbrev. month" +msgid "April" +msgstr "4-р сар." + +msgctxt "abbrev. month" +msgid "May" +msgstr "5-р сар." + +msgctxt "abbrev. month" +msgid "June" +msgstr "6-р сар." + +msgctxt "abbrev. month" +msgid "July" +msgstr "7-р сар." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "8-р сар." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "9-р сар." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "10-р сар." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "11-р сар." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "12-р сар." + +msgctxt "alt. month" +msgid "January" +msgstr "Хулгана" + +msgctxt "alt. month" +msgid "February" +msgstr "Үхэр" + +msgctxt "alt. month" +msgid "March" +msgstr "Бар" + +msgctxt "alt. month" +msgid "April" +msgstr "Туулай" + +msgctxt "alt. month" +msgid "May" +msgstr "Луу" + +msgctxt "alt. month" +msgid "June" +msgstr "Могой" + +msgctxt "alt. month" +msgid "July" +msgstr "Морь" + +msgctxt "alt. month" +msgid "August" +msgstr "Хонь" + +msgctxt "alt. month" +msgid "September" +msgstr "Бич" + +msgctxt "alt. month" +msgid "October" +msgstr "Тахиа" + +msgctxt "alt. month" +msgid "November" +msgstr "Нохой" + +msgctxt "alt. month" +msgid "December" +msgstr "Гахай" + +msgid "This is not a valid IPv6 address." +msgstr "Энэ буруу IPv6 хаяг байна." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "буюу" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d жил" +msgstr[1] "%d жил" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d сар" +msgstr[1] "%d сар" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d долоо хоног" +msgstr[1] "%d долоо хоног" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d өдөр" +msgstr[1] "%d өдөр" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d цаг" +msgstr[1] "%d цаг" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минут" + +msgid "0 minutes" +msgstr "0 минут" + +msgid "Forbidden" +msgstr "Хориотой" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF дээр уналаа. Хүсэлт таслагдсан." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Энэ хуудсанд форм илгээхийн тулд CSRF күүки шаардлагатай учир Та энэ " +"мэдэгдлийг харж байна. Энэ күүки нь гуравдагч этгээдээс хамгаалахын тулд " +"шаардлагатай." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "DEBUG=True үед дэлгэрэнгүй мэдээлэл харах боломжтой." + +msgid "No year specified" +msgstr "Он тодорхойлоогүй байна" + +msgid "Date out of range" +msgstr "Хугацааны хязгаар хэтэрсэн байна" + +msgid "No month specified" +msgstr "Сар тодорхойлоогүй байна" + +msgid "No day specified" +msgstr "Өдөр тодорхойлоогүй байна" + +msgid "No week specified" +msgstr "Долоо хоног тодорхойлоогүй байна" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s боломжгүй" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future нь худлаа учраас %(verbose_name_plural)s нь " +"боломжгүй." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Шүүлтүүрт таарах %(verbose_name)s олдсонгүй " + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Буруу хуудас (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Файлын жагсаалтыг энд зөвшөөрөөгүй." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” хуудас байхгүй байна." + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s ийн жагсаалт" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Джанго: Чанартай бөгөөд хугацаанд нь хийхэд зориулсан Web framework." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Джанго %(version)s хувирбарын тэмдэглэл харах " + +msgid "The install worked successfully! Congratulations!" +msgstr "Амжилттай суулгалаа! Баяр хүргэе!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Таний тохиргооны файл дээр DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо хийгээгүй учраас " +"энэ хуудасыг харж байна." + +msgid "Django Documentation" +msgstr "Джанго баримтжуулалт" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Хичээл: Санал асуулга App" + +msgid "Get started with Django" +msgstr "Джанготой ажиллаж эхлэх" + +msgid "Django Community" +msgstr "Django Бүлгэм" + +msgid "Connect, get help, or contribute" +msgstr "Холбогдох, тусламж авах эсвэл хувь нэмрээ оруулах" diff --git a/venv/Lib/site-packages/django/conf/locale/mn/__init__.py b/venv/Lib/site-packages/django/conf/locale/mn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/mn/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/mn/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aa1348377cf26ebc50825d229b8c28b887d5002 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lZk~R8d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04nP=-2eap literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mn/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/mn/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00b0ed71974d7ea4248b9e5a214eb23317a2a079 GIT binary patch literal 273 zcmd1j<>g`kf;Vw@la??sFgylvkO3o*;{e3P0ze{#A&Mb|F^VyTDT*nDIha9{rHVC0 z!A&8uiZ$ITQ^B!{HA}%)A<|EiIf~oGF~l|A%|FQ3F(isR#M2kf5e)Y54+@D#l3&SC z1hNK9{7QAUiU}=FEh>%)DlINfjB&|NF3nBND=Cg~&n)pMO^R{LEGjP14JgXbN=+__ zDND^Oi}A@!iYd-4N!2Y#OwLYBPc4o~$x6&i&(}}R&r8$K$xlwqN!8EI(@)DU%1taO e)+?yI#bJ}1pHiBWY6r5pm<>p^Y112!C1Z2ap-dmxEx#yt^vEimEcZr3)l^=1rLBZZ~$Bdp3GPUsr~}E5v+lv z6KDBr;0mm7fK)e~#qWSrcQ1=4Ak{qvN#{98ecopAci?##eh-rG9+)QIz4-YPEP|WC zQ(ze!1$TiD!9T!PS^iVD{+g|qplL7iTS2Nn43f?Tko-j;`MCma18;-f;A|FuoACpf zNBj%89qhtkY2O}@{C36$e9%48SdU5XL+7MBroLM-S7TDIE=;;J8p|+Y*=VALc^kl4 zM?Z@OuE+S^1d6@ zoIw$A)ryhEXXx_)p(v(uXHW?p5v0a0HWc~+?H+6eK37z5glirUuZmjTIcmi_WkYdO zC?4v_IWANKRmYVOmz;{2l(j`(I-bsn0NTSUx+rSeJu&8<6)Kid=&>>Q^rPH}XhurA zmDrbK?qJK0-D>2q-0&%PL|m3s>K^4bkHr8+~NUNEPDIqvQQgg2y$SS30wT);B8kcbgt-sN8VSf_e8?q#Ciu!lqfq<$e9kewO!!th>xgJ^i`P z|07Lqq{-v7{ZE=aOOrQgGLt5+(`3#>795j)mbP!E$rGFY9>R|MCShx5O?uAkzL&PA zSeh&tkwSfleSO^`RD+2L`TtQ9&y;jS@bZzYqSF=v5-wMfzrOw|m&{`=*i zznA~F;~DpY3Y^m14mF%j+tbj&jUbBkQ)?bR?0Kf}I>`CXHZy*^qIRF3v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/mr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 000000000..ab6908514 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,1212 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Suraj Kawade, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Marathi (http://www.transifex.com/django/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "अफ्रिकान्स" + +msgid "Arabic" +msgstr "अरेबिक" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "अझरबैजानी" + +msgid "Bulgarian" +msgstr "बल्गेरियन" + +msgid "Belarusian" +msgstr "बेलारूसी" + +msgid "Bengali" +msgstr "बंगाली" + +msgid "Breton" +msgstr "ब्रेटन" + +msgid "Bosnian" +msgstr "बोस्नियन" + +msgid "Catalan" +msgstr "कॅटलान" + +msgid "Czech" +msgstr "झेक" + +msgid "Welsh" +msgstr "वेल्श" + +msgid "Danish" +msgstr "डॅनिश" + +msgid "German" +msgstr "जर्मन" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ग्रीक" + +msgid "English" +msgstr "इंग्रजी" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ब्रिटिश इंग्रजी" + +msgid "Esperanto" +msgstr "एस्पेरॅन्टो" + +msgid "Spanish" +msgstr "स्पॅनिश " + +msgid "Argentinian Spanish" +msgstr "अर्जेन्टिनाची स्पॅनिश" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "मेक्सिकन स्पॅनिश" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Basque" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Slovak" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "" + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "" + +msgid "Enter a whole number." +msgstr "" + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "" + +msgid "The submitted file is empty." +msgstr "" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "" + +#, python-format +msgid "%s MB" +msgstr "" + +#, python-format +msgid "%s GB" +msgstr "" + +#, python-format +msgid "%s TB" +msgstr "" + +#, python-format +msgid "%s PB" +msgstr "" + +msgid "p.m." +msgstr "" + +msgid "a.m." +msgstr "" + +msgid "PM" +msgstr "" + +msgid "AM" +msgstr "" + +msgid "midnight" +msgstr "" + +msgid "noon" +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgid "jan" +msgstr "" + +msgid "feb" +msgstr "" + +msgid "mar" +msgstr "" + +msgid "apr" +msgstr "" + +msgid "may" +msgstr "" + +msgid "jun" +msgstr "" + +msgid "jul" +msgstr "" + +msgid "aug" +msgstr "" + +msgid "sep" +msgstr "" + +msgid "oct" +msgstr "" + +msgid "nov" +msgstr "" + +msgid "dec" +msgstr "" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +msgctxt "alt. month" +msgid "January" +msgstr "" + +msgctxt "alt. month" +msgid "February" +msgstr "" + +msgctxt "alt. month" +msgid "March" +msgstr "" + +msgctxt "alt. month" +msgid "April" +msgstr "" + +msgctxt "alt. month" +msgid "May" +msgstr "" + +msgctxt "alt. month" +msgid "June" +msgstr "" + +msgctxt "alt. month" +msgid "July" +msgstr "" + +msgctxt "alt. month" +msgid "August" +msgstr "" + +msgctxt "alt. month" +msgid "September" +msgstr "" + +msgctxt "alt. month" +msgid "October" +msgstr "" + +msgctxt "alt. month" +msgid "November" +msgstr "" + +msgctxt "alt. month" +msgid "December" +msgstr "" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..90813401bb76a582b78ae78661a26c9bfddb1f1a GIT binary patch literal 27066 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..58847456c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,1286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +# Mariusz Felisiak , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-06 07:43+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Bahasa Afrikaans" + +msgid "Arabic" +msgstr "Bahasa Arab" + +msgid "Algerian Arabic" +msgstr "Bahasa Arab Algeria" + +msgid "Asturian" +msgstr "Bahasa Asturia" + +msgid "Azerbaijani" +msgstr "Bahasa Azerbaijan" + +msgid "Bulgarian" +msgstr "Bahasa Bulgaria" + +msgid "Belarusian" +msgstr "Bahasa Belarus" + +msgid "Bengali" +msgstr "Bahasa Benggali" + +msgid "Breton" +msgstr "Bahasa Breton" + +msgid "Bosnian" +msgstr "Bahasa Bosnia" + +msgid "Catalan" +msgstr "Bahasa Catalonia" + +msgid "Czech" +msgstr "Bahasa Czech" + +msgid "Welsh" +msgstr "Bahasa Wales" + +msgid "Danish" +msgstr "Bahasa Denmark" + +msgid "German" +msgstr "Bahasa Jerman" + +msgid "Lower Sorbian" +msgstr "Bahasa Sorbian Rendah" + +msgid "Greek" +msgstr "Bahasa Yunani" + +msgid "English" +msgstr "Bahasa Inggeris" + +msgid "Australian English" +msgstr "Bahasa Inggeris Australia" + +msgid "British English" +msgstr "Bahasa Inggeris British" + +msgid "Esperanto" +msgstr "Bahasa Esperanto" + +msgid "Spanish" +msgstr "Bahasa Sepanyol" + +msgid "Argentinian Spanish" +msgstr "Bahasa Sepanyol Argentina" + +msgid "Colombian Spanish" +msgstr "Bahasa Sepanyol Kolumbia" + +msgid "Mexican Spanish" +msgstr "Bahasa Sepanyol Mexico" + +msgid "Nicaraguan Spanish" +msgstr "Bahasa Sepanyol Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Bahasa Sepanyol Venezuela" + +msgid "Estonian" +msgstr "Bahasa Estonia" + +msgid "Basque" +msgstr "Bahasa Bask" + +msgid "Persian" +msgstr "Bahasa Farsi" + +msgid "Finnish" +msgstr "Bahassa Finland" + +msgid "French" +msgstr "Bahasa Perancis" + +msgid "Frisian" +msgstr "Bahasa Frisia" + +msgid "Irish" +msgstr "Bahasa Ireland" + +msgid "Scottish Gaelic" +msgstr "Bahasa Gael Scotland" + +msgid "Galician" +msgstr "Bahasa Galisia" + +msgid "Hebrew" +msgstr "Bahasa Ibrani" + +msgid "Hindi" +msgstr "Bahasa Hindi" + +msgid "Croatian" +msgstr "Bahasa Kroatia" + +msgid "Upper Sorbian" +msgstr "Bahasa Sorbia Atasan" + +msgid "Hungarian" +msgstr "Bahasa Hungary" + +msgid "Armenian" +msgstr "Bahasa Armenia" + +msgid "Interlingua" +msgstr "Bahasa Interlingua" + +msgid "Indonesian" +msgstr "Bahasa Indonesia" + +msgid "Igbo" +msgstr "Bahasa Igbo" + +msgid "Ido" +msgstr "Bahasa Ido" + +msgid "Icelandic" +msgstr "Bahasa Iceland" + +msgid "Italian" +msgstr "Bahasa Itali" + +msgid "Japanese" +msgstr "Bahasa Jepun" + +msgid "Georgian" +msgstr "Bahasa Georgia" + +msgid "Kabyle" +msgstr "Bahasa Kabylia" + +msgid "Kazakh" +msgstr "Bahasa Kazakhstan" + +msgid "Khmer" +msgstr "Bahasa Kambodia" + +msgid "Kannada" +msgstr "Bahasa Kannada" + +msgid "Korean" +msgstr "Bahasa Korea" + +msgid "Kyrgyz" +msgstr "Bahasa Kyrgyzstan" + +msgid "Luxembourgish" +msgstr "Bahasa Luxemborg" + +msgid "Lithuanian" +msgstr "Bahasa Lithuania" + +msgid "Latvian" +msgstr "Bahasa Latvia" + +msgid "Macedonian" +msgstr "Bahasa Masedonia" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Bahasa Mongol" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Bahasa Melayu" + +msgid "Burmese" +msgstr "Bahasa Burma" + +msgid "Norwegian Bokmål" +msgstr "Bahasa Bokmal Norway" + +msgid "Nepali" +msgstr "Bahasa Nepal" + +msgid "Dutch" +msgstr "Belanda" + +msgid "Norwegian Nynorsk" +msgstr "Bahasa Nynorsk Norway" + +msgid "Ossetic" +msgstr "Bahasa Ossetic" + +msgid "Punjabi" +msgstr "Bahasa Punjab" + +msgid "Polish" +msgstr "Bahasa Poland" + +msgid "Portuguese" +msgstr "Bahasa Portugal" + +msgid "Brazilian Portuguese" +msgstr "Bahasa Portugal Brazil" + +msgid "Romanian" +msgstr "Bahasa Romania" + +msgid "Russian" +msgstr "Bahasa Rusia" + +msgid "Slovak" +msgstr "Bahasa Slovakia" + +msgid "Slovenian" +msgstr "Bahasa Slovenia" + +msgid "Albanian" +msgstr "Bahasa Albania" + +msgid "Serbian" +msgstr "Bahasa Serbia" + +msgid "Serbian Latin" +msgstr "Bahasa Latin Serbia" + +msgid "Swedish" +msgstr "Bahasa Sweden" + +msgid "Swahili" +msgstr "Bahasa Swahili" + +msgid "Tamil" +msgstr "Bahasa Tamil" + +msgid "Telugu" +msgstr "Bahasa Telugu" + +msgid "Tajik" +msgstr "Bahasa Tajik" + +msgid "Thai" +msgstr "Bahasa Siam" + +msgid "Turkmen" +msgstr "Bahasa Turkmenistan" + +msgid "Turkish" +msgstr "Bahasa Turki" + +msgid "Tatar" +msgstr "Bahasa Tatar" + +msgid "Udmurt" +msgstr "Bahasa Udmurt" + +msgid "Ukrainian" +msgstr "Bahasa Ukraine" + +msgid "Urdu" +msgstr "Bahasa Urdu" + +msgid "Uzbek" +msgstr "Bahasa Uzbekistan" + +msgid "Vietnamese" +msgstr "Bahasa Vietnam" + +msgid "Simplified Chinese" +msgstr "Bahasa Cina (Dipermudahkan)" + +msgid "Traditional Chinese" +msgstr "Bahasa Cina Tradisional" + +msgid "Messages" +msgstr "Mesej" + +msgid "Site Maps" +msgstr "Peta Laman" + +msgid "Static Files" +msgstr "Fail Statik" + +msgid "Syndication" +msgstr "Sindikasi" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Nombor ruangan itu bukanlah integer" + +msgid "That page number is less than 1" +msgstr "Nombor ruangan itu kurang daripada 1" + +msgid "That page contains no results" +msgstr "Ruangan itu tiada keputusan" + +msgid "Enter a valid value." +msgstr "Masukkan nilai yang sah." + +msgid "Enter a valid URL." +msgstr "Masukkan URL yang sah." + +msgid "Enter a valid integer." +msgstr "Masukkan integer yang sah." + +msgid "Enter a valid email address." +msgstr "Masukkan alamat emel yang sah." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Masukkan \"slug\" yang sah yang mengandungi huruf, nombor, garisan atau " +"tanda sempang." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Masukkan \"slug\" yang sah yang mengandungi huruf Unicode, nombor, garisan, " +"atau tanda sempang." + +msgid "Enter a valid IPv4 address." +msgstr "Masukkan alamat IPv4 yang sah." + +msgid "Enter a valid IPv6 address." +msgstr "Masukkan alamat IPv6 yang sah." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Masukkan alamat IPv4 atau IPv6 yang sah." + +msgid "Enter only digits separated by commas." +msgstr "Hanya masukkan digit yang dipisahkan oleh koma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Pastikan nilai ini adalah %(limit_value)s (ia adalah %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Pastikan nilai ini kurang daripada atau sama dengan %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Pastikan nilai ini lebih daripada atau sama dengan %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Pastikan nilai ini mempunyai sekurang-kurangnya %(limit_value)d karater (ia " +"mempunyai %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Pastikan nilai ini mempunyai sepalingnya %(limit_value)d karakter (ia " +"mempunyai %(show_value)d)." + +msgid "Enter a number." +msgstr "Masukkan nombor." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Pastikan jumlah tidak melebihi %(max)s digit." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Pastikan titik perpuluhan tidak melebihi %(max)s." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Pastikan jumlah digit tidak melebihi %(max)s sebelum titik perpuluhan." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Sambungan fail \"%(extension)s\" tidak dibenarkan. Sambungan yang dibenarkan " +"adalah: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Karakter Null tidak dibenarkan." + +msgid "and" +msgstr "dan" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s dengan %(field_labels)s ini sudah wujud." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Nilai %(value)r bukan pilihan yang sah." + +msgid "This field cannot be null." +msgstr "Medan ini tidak boleh null." + +msgid "This field cannot be blank." +msgstr "Medan ini tidak boleh dibiarkan kosong." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s dengan %(field_label)s ini sudah wujud." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s mesti unik untuk %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Jenis medan: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Nilai \"%(value)s\" mesti samada True atau False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Nilai \"%(value)s\" mesti samada True, False, atau None." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Samada True atau False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (sehingga %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Integer dipisahkan dengan koma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Nilai \"%(value)s\" mempunyai format tarikh yang tidak sah. Format harus " +"berbentuk YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang betul (YYYY-MM-DD) tetapi ia " +"adalah tarikh yang tidak sah." + +msgid "Date (without time)" +msgstr "Tarikh (tanpa masa)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang tidak sah. Format harus berbentuk " +"YYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang betul (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ]) tetapi ia adalah tarikh/masa yang tidak sah." + +msgid "Date (with time)" +msgstr "Tarikh (dengan masa)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Nilai \"%(value)s\" mesti dalam bentuk nombor titik perpuluhan." + +msgid "Decimal number" +msgstr "Nombor titik perpuluhan" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang tidak sah. Format harus berbentuk " +"[DD] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Jangka-masa" + +msgid "Email address" +msgstr "Alama emel" + +msgid "File path" +msgstr "Laluan fail" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Nilai \"%(value)s\" mesti dalam bentuk titik terapung." + +msgid "Floating point number" +msgstr "Nombor titik terapung" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Nilai \"%(value)s\" mesti dalam bentuk integer." + +msgid "Integer" +msgstr "Integer" + +msgid "Big (8 byte) integer" +msgstr "Integer besar (8 bait)" + +msgid "Small integer" +msgstr "Integer kecil" + +msgid "IPv4 address" +msgstr "Alamat IPv4" + +msgid "IP address" +msgstr "Alamat IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Nilai \"%(value)s\" mesti samada None, True, atau False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (samada True, False, None)" + +msgid "Positive big integer" +msgstr "Integer besar positif" + +msgid "Positive integer" +msgstr "Integer positif" + +msgid "Positive small integer" +msgstr "Integer kecil positif" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (sehingga %(max_length)s)" + +msgid "Text" +msgstr "Teks" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang tidak sah. Format harus berbentuk " +"HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Nilai \"%(value)s\" mempunyai format yang betul (HH:MM[:ss[.uuuuuu]]) tetapi " +"ia mempunyai masa yang tidak sah." + +msgid "Time" +msgstr "Masa" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Data binari mentah" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "UUID \"%(value)s\" tidak sah." + +msgid "Universally unique identifier" +msgstr "Pengecam unik universal" + +msgid "File" +msgstr "Fail" + +msgid "Image" +msgstr "Imej" + +msgid "A JSON object" +msgstr "Objek JSON" + +msgid "Value must be valid JSON." +msgstr "Nilai harus dalam bentuk JSON yang sah." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s dengan %(field)s %(value)r tidak wujud." + +msgid "Foreign Key (type determined by related field)" +msgstr "Kunci Asing (jenis ditentukan oleh medan yang berkaitan)" + +msgid "One-to-one relationship" +msgstr "Hubungan satu-ke-satu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Hubungan %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Hubungan %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Hubungan banyak-ke-banyak" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Medan ini diperlukan." + +msgid "Enter a whole number." +msgstr "Masukkan nombor bulat." + +msgid "Enter a valid date." +msgstr "Masukkan tarikh yang sah." + +msgid "Enter a valid time." +msgstr "Masukkan masa yang sah." + +msgid "Enter a valid date/time." +msgstr "Masukkan tarikh/masa yang sah." + +msgid "Enter a valid duration." +msgstr "Masukkan jangka-masa yang sah." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Jumlah hari mesti diantara {min_days} ke {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Tiada fail yang dihantar. Periksa jenis encoding pada borang." + +msgid "No file was submitted." +msgstr "Tiada fail yang dihantar." + +msgid "The submitted file is empty." +msgstr "Fail yang dihantar kosong." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Pastikan nama fial ini tidak melebihi %(max)d karakter (ia mempunyai " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Sila hantar fail atau tandakan pada kotak, bukan kedua-duanya sekali. " + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Muatnaik imej yang sah. Fail yang anda muatnaik samada bukan imej atau imej " +"yang rosak." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Pilih pilihan yang sah. %(value)s bukan pilihan yang tersedia." + +msgid "Enter a list of values." +msgstr "Masukkan senarai nilai." + +msgid "Enter a complete value." +msgstr "Masukkan nilai yang lengkap." + +msgid "Enter a valid UUID." +msgstr "Masukkan UUID yang sah." + +msgid "Enter a valid JSON." +msgstr "Masukkan JSON yang sah." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "%(error)s (Medan tersorok %(name)s)" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Data ManagementForm tidak dijumpai atau telah diusik. Medan yang hilang: " +"%(field_names)s. Anda mungkin perlu menghantar laporan pepijat sekiranya " +"masalah masih berterusan." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Sila hantar tidak lebih dari %d borang." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Sila hantar sekurang-kurangnya %d borang." + +msgid "Order" +msgstr "Susunan" + +msgid "Delete" +msgstr "Padam" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Sila betulkan data duplikasi bagi %(field)s" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Sila betulkan data duplikasi bagi %(field)s, yang mana mestilah unik." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Sila betulkan data duplikasi bagi %(field_name)s yang mana mestilah unik " +"untuk %(lookup)s didalam %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Sila betulkan nilai-nilai duplikasi dibawah." + +msgid "The inline value did not match the parent instance." +msgstr "Nilai didalam barisan tidak sepadan dengan parent instance." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Pilih pilihan yang sah. Pilihan itu tidak ada didalam senarai pilihan." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" bukan nilai yang sah." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s tidak dapat diterjemahkan ke dalam zon masa " +"%(current_timezone)s; ia mungkin samar-samar atau tidak wujud." + +msgid "Clear" +msgstr "Kosongkan" + +msgid "Currently" +msgstr "Kini" + +msgid "Change" +msgstr "Tukar" + +msgid "Unknown" +msgstr "Tidak diketahui" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Tidak" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ya,tidak,mungkin" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bait" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "malam" + +msgid "a.m." +msgstr "pagi" + +msgid "PM" +msgstr "MALAM" + +msgid "AM" +msgstr "PAGI" + +msgid "midnight" +msgstr "tengah malam" + +msgid "noon" +msgstr "tengahari" + +msgid "Monday" +msgstr "Isnin" + +msgid "Tuesday" +msgstr "Selasa" + +msgid "Wednesday" +msgstr "Rabu" + +msgid "Thursday" +msgstr "Khamis" + +msgid "Friday" +msgstr "Jumaat" + +msgid "Saturday" +msgstr "Sabtu" + +msgid "Sunday" +msgstr "Ahad" + +msgid "Mon" +msgstr "Isn" + +msgid "Tue" +msgstr "Sel" + +msgid "Wed" +msgstr "Rab" + +msgid "Thu" +msgstr "Kha" + +msgid "Fri" +msgstr "Jum" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Aha" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Mac" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Jun" + +msgid "July" +msgstr "Julai" + +msgid "August" +msgstr "Ogos" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Disember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mei" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ogo" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dis" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb" + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mac" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Jun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julai" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ogo." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dis." + +msgctxt "alt. month" +msgid "January" +msgstr "Januari" + +msgctxt "alt. month" +msgid "February" +msgstr "Februari" + +msgctxt "alt. month" +msgid "March" +msgstr "Mac" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mei" + +msgctxt "alt. month" +msgid "June" +msgstr "Jun" + +msgctxt "alt. month" +msgid "July" +msgstr "Julai" + +msgctxt "alt. month" +msgid "August" +msgstr "Ogos" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Disember" + +msgid "This is not a valid IPv6 address." +msgstr "Alamat IPv6 ini tidak sah." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s ..." + +msgid "or" +msgstr "atau" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d tahun" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d bulan" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d minggu " + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d hari" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d jam" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minit" + +msgid "Forbidden" +msgstr "Dilarang" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verifikasi VSRF gagal. Permintaan dihentikan." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Anda melihat mesej ini kerana laman HTTPS ini memerlukan \"Referer header\" " +"dihantar ke pelayar sesawang anda, tetapi ia tidak dihantar. Header ini " +"diperlukan bagi tujuan keselamatan, agar dapat memastikan pelayar anda tidak " +"dirampas oleh pihak ketiga." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Sekiranya anda telah menetapkan pelayar anda untuk mematikan header \"Referer" +"\", sila hidupkannya semula, sekurang-kurangya bagi laman ini, atau bagi " +"sambungan HTTPS, atau bagi permintaan \"same-origin\"." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Sekiranya anda menggunakan tag atau memasukkan header \"Referer-Policy: no-referrer\", sila buangkan " +"ia. Perlindungan CSRF memerlukan header \"Referer\" untuk melakukan " +"penyemakan referer yang ketat. Sekiranya anda risau tentang privasi anda, " +"gunakan alternatif seperti bagi pautan laman pihak " +"ketiga." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Anda melihat mesej ini kerana laman ini memerlukan cookie CSRF apabila " +"menghantar borang. Cookie ini diperlukan bagi tujuan keselamatan, bagi " +"memastikan pelayar anda tidak dirampas oleh pihak ketiga." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Sekiranya anda telah menetapkan pelayar anda untuk tidak menerima cookie, " +"sila hidupkannya semula, sekurang-kurangnya bagi laman ini, atau bagi " +"permintaan \"same-origin\"." + +msgid "More information is available with DEBUG=True." +msgstr "Maklumat lanjut boleh didapati dengan menetapkan DEBUG=True." + +msgid "No year specified" +msgstr "Tiada tahun diberikan" + +msgid "Date out of range" +msgstr "Tarikh diluar julat" + +msgid "No month specified" +msgstr "Tiada bulan diberikan" + +msgid "No day specified" +msgstr "Tiada hari diberikan" + +msgid "No week specified" +msgstr "Tiada minggu diberikan" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s tiada" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s masa depan tiada kerana %(class_name)s.allow_future " +"adalah False. " + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"\"%(datestr)s\" tarikh yang diberikan tidak sah mengikut format \"%(format)s" +"\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Tiada %(verbose_name)s mengikut pertanyaan yang dimasukkan" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Ruangan ini bukan \"last\", dan tidak boleh ditukar kepada int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ruangan tidak sah (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Senarai kosong dan \"%(class_name)s.allow_empty\" adalah False." + +msgid "Directory indexes are not allowed here." +msgstr "Indeks Direktori tidak dibenarkan disini." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" tidak wujud" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Pemasangan berjaya dilakukan! Tahniah!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Lihat nota pelepasan bagi Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Anda melihat ruangan ini kerana DEBUG=True terdapat didalam fail tetapan anda dan anda tidak " +"menetapkan sebarang URL." + +msgid "Django Documentation" +msgstr "Dokumentasi Django" + +msgid "Topics, references, & how-to’s" +msgstr "Topik, rujukan, & bagaimana-cara" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: App Soal-Selidik" + +msgid "Get started with Django" +msgstr "Mulakan dengan Django" + +msgid "Django Community" +msgstr "Komuniti Django" + +msgid "Connect, get help, or contribute" +msgstr "Sambung, minta bantuan, atau sumbang" diff --git a/venv/Lib/site-packages/django/conf/locale/ms/__init__.py b/venv/Lib/site-packages/django/conf/locale/ms/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ms/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ms/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54bc7cc06631320ebb95029270504a7d0e04b2e5 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lZn1uRd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04tR=;s5{u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ms/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ms/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c909e39035cdf4d4e1731928772b794958a1f998 GIT binary patch literal 825 zcmZXQ&ySiw6vshOLD$`N)ArC47Y-&WchfY*1(bC85x_J|NC`SKn-k~I&jue($2jM0NxoGz@y@qpQ?x|Ku)vKoHYT>H zOC@%tPqd+I`6J7in5sVdNhCG=>qU4DZwKB4g$eSkEkc1O#j|Y`Zc^lpmg#sq^^|3T z(w>>bt8kWj58>v)yIW2@v`oX^eK7kGEJEbLRj^sa!Ytm*g>^g&)}as~VIC(@kfQ$m fZqIy*Vz^z0pGiC!eZ+yLX|lW-nqlcCO)}&^>x|P@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ms/formats.py b/venv/Lib/site-packages/django/conf/locale/ms/formats.py new file mode 100644 index 000000000..d06719fee --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ms/formats.py @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j M Y" # '25 Oct 2006' +TIME_FORMAT = "P" # '2:30 p.m.' +DATETIME_FORMAT = "j M Y, P" # '25 Oct 2006, 2:30 p.m.' +YEAR_MONTH_FORMAT = "F Y" # 'October 2006' +MONTH_DAY_FORMAT = "j F" # '25 October' +SHORT_DATE_FORMAT = "d/m/Y" # '25/10/2006' +SHORT_DATETIME_FORMAT = "d/m/Y P" # '25/10/2006 2:30 p.m.' +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' + "%d %b %Y", # '25 Oct 2006' + "%d %b, %Y", # '25 Oct, 2006' + "%d %B %Y", # '25 October 2006' + "%d %B, %Y", # '25 October, 2006' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d/%m/%Y %H:%M:%S", # '25/10/2006 14:30:59' + "%d/%m/%Y %H:%M:%S.%f", # '25/10/2006 14:30:59.000200' + "%d/%m/%Y %H:%M", # '25/10/2006 14:30' + "%d/%m/%y %H:%M:%S", # '25/10/06 14:30:59' + "%d/%m/%y %H:%M:%S.%f", # '25/10/06 14:30:59.000200' + "%d/%m/%y %H:%M", # '25/10/06 14:30' +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..06d9129bcc8b45d333bd0009ff74cbe133b0108d GIT binary patch literal 2589 zcmZ{jPi$009LGmR!1W)3fAIektpet?Tak#{V8TL68d%xXErgqo?sWU;?tAsUS4ugU zhrx?_Fe<2sHk{O05H5mPd+?wKJQ)reBFRfkID67?^7ETF+fpo(o%y_(`ThCMZ)UHo zTyj*=*3%!OH*Zm@2hQBeK>O;peEn;9JM*6{f3^J0@^{NCP+b3lcfhM~Df}BQga2Bp zB}(1Pd^r@m)ll}=K*_TnieJ(4C3rXUSD@JKg#1*ELG1QI@p~N>;4r)kzG2tjgyMGu ziv4>~bbe^}kJ@}T8$_yp@SmY1QN;~HEImmyB-=D-JF5lXy1xB-qr@t?B$vrzmmLGjP* z`ZXwbz5=n2!X7Ab_rR5~0p(r}!RO!+ScKDd{ZA-)u39d|So}Mn=-LRye}`QkwA4`c z$1UHr>nEY;JZm{?*DpfRciHkE$WN`}k}0QJMSq+wxur?$hv=eB-t)tBc{g$MD0FZA}g{I*d|F(RC+X+LQFB>5s_7HmR@F?jHJsc1^H? zE^kWC+iv&s!P79UgOReDbIKceR#rRK#{MC_uI}ucO!UH8tU6+6ds)UEW~`X8YQ|bw zZKROSZ_sE$RUU6PyhwJodWqK* z9@0Z2YMU3x_BP$r$mnf(e$(;l^+?CDYWw#2O|7=;sD;<|Nb6D6U!61RuO4`De$w(9 zTJ;BsZsWM+7?qp> zujNOfQwbxlsblto#yE#_Yuam-obq_o(y?~djwH!gsjF*ZVxlt>LVPUAe3_ zD7bO&YE5>nD^&U`z4Hg??kpCzhSV%T!Q>bc6ROiS*7W?K#~B*&qF5)J2Wx%qrg=Nb zHLN4IHy8@*e$Xg6oA&w1oXnEbnk-bCe zF^-xT@0-Mn1Ym;{pDnU&1b>vrS6O<}m>e^z`1 zYa&pHbM1o@f#k>MLVcX2Gv=_UBF7h|V6!H79`gHkNOtGboiVF~CnGu*ghVGlk`fXr zR`X#KSvHXNfk`GiCIThJRyN3hHdZ+`H)qW$1Q|$$VV;w?7%^H^=6KTt!1SiNiHSLn zLoBf60?EPaAgoo%6301}2bwoF!jQ0d!vEV*)zjHw(k$Y@5x+wPDbj^iU}Gjr-!YdZ z@+b+a=1xN>q_RQ<&asW?DRUZII_BIPCWIx9dGscnxM0u2Cj(mTQJG`Ig, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "အာဖရိကန်" + +msgid "Arabic" +msgstr "အာရပ်" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "ဘူဂေးရီယန်" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "ဘင်းဂလီ" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "ဘော့်စ်နီယန်" + +msgid "Catalan" +msgstr "ကက်တလန်" + +msgid "Czech" +msgstr "ချက်" + +msgid "Welsh" +msgstr "ဝေးလ်" + +msgid "Danish" +msgstr "ဒိန်းမတ်" + +msgid "German" +msgstr "ဂျာမန်" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ဂရိ" + +msgid "English" +msgstr "အင်္ဂလိပ်" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ဗြိတိသျှအင်္ဂလိပ်" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "စပိန်" + +msgid "Argentinian Spanish" +msgstr "" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Basque" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Slovak" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "" + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +msgid "Enter a number." +msgstr "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "နှင့်" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "အီးမေးလ်လိပ်စာ" + +msgid "File path" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "ကိန်းပြည့်" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "အိုင်ပီဗီ၄လိပ်စာ" + +msgid "IP address" +msgstr "အိုင်ပီလိပ်စာ" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "စာသား" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "" + +msgid "URL" +msgstr "ယူအာအယ်" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "ဖိုင်" + +msgid "Image" +msgstr "ပံု" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "" + +msgid "Enter a whole number." +msgstr "" + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "" + +msgid "The submitted file is empty." +msgstr "" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "မှာကြား" + +msgid "Delete" +msgstr "ပယ်ဖျက်" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Unknown" +msgstr "အမည်မသိ" + +msgid "Yes" +msgstr "ဟုတ်" + +msgid "No" +msgstr "မဟုတ်" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ဘိုက်များ" + +#, python-format +msgid "%s KB" +msgstr "%s ကီလိုဘိုက်" + +#, python-format +msgid "%s MB" +msgstr "%s မက်ဂါဘိုက်" + +#, python-format +msgid "%s GB" +msgstr "%s ဂစ်ဂါဘိုက်" + +#, python-format +msgid "%s TB" +msgstr "%s တီရာဘိုက်" + +#, python-format +msgid "%s PB" +msgstr "%s ပီတာဘိုက်" + +msgid "p.m." +msgstr "ညနေ" + +msgid "a.m." +msgstr "မနက်" + +msgid "PM" +msgstr "ညနေ" + +msgid "AM" +msgstr "မနက်" + +msgid "midnight" +msgstr "သန်းခေါင်" + +msgid "noon" +msgstr "မွန်းတည့်" + +msgid "Monday" +msgstr "တနင်္လာနေ့" + +msgid "Tuesday" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgid "jan" +msgstr "" + +msgid "feb" +msgstr "" + +msgid "mar" +msgstr "" + +msgid "apr" +msgstr "" + +msgid "may" +msgstr "" + +msgid "jun" +msgstr "" + +msgid "jul" +msgstr "" + +msgid "aug" +msgstr "" + +msgid "sep" +msgstr "" + +msgid "oct" +msgstr "" + +msgid "nov" +msgstr "" + +msgid "dec" +msgstr "" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +msgctxt "alt. month" +msgid "January" +msgstr "" + +msgctxt "alt. month" +msgid "February" +msgstr "" + +msgctxt "alt. month" +msgid "March" +msgstr "" + +msgctxt "alt. month" +msgid "April" +msgstr "" + +msgctxt "alt. month" +msgid "May" +msgstr "" + +msgctxt "alt. month" +msgid "June" +msgstr "" + +msgctxt "alt. month" +msgid "July" +msgstr "" + +msgctxt "alt. month" +msgid "August" +msgstr "" + +msgctxt "alt. month" +msgid "September" +msgstr "" + +msgctxt "alt. month" +msgid "October" +msgstr "" + +msgctxt "alt. month" +msgid "November" +msgstr "" + +msgctxt "alt. month" +msgid "December" +msgstr "" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..46a9be66aa5246587c477ab8009d5f33ee25406b GIT binary patch literal 26572 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 X{=4%XAP!qL^TiJ5h, 2014 +# Eirik Krogstad , 2014 +# Jannis Leidel , 2011 +# jensadne , 2014-2015 +# Jon, 2015-2016 +# Jon, 2014 +# Jon, 2017-2021 +# Jon, 2013 +# Jon, 2011 +# Sigurd Gartmann , 2012 +# Tommy Strand , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 14:23+0000\n" +"Last-Translator: Jon\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabisk" + +msgid "Algerian Arabic" +msgstr "Algerisk arabisk" + +msgid "Asturian" +msgstr "Asturiansk" + +msgid "Azerbaijani" +msgstr "Aserbajdsjansk" + +msgid "Bulgarian" +msgstr "Bulgarsk" + +msgid "Belarusian" +msgstr "Hviterussisk" + +msgid "Bengali" +msgstr "Bengalsk" + +msgid "Breton" +msgstr "Bretonsk" + +msgid "Bosnian" +msgstr "Bosnisk" + +msgid "Catalan" +msgstr "Katalansk" + +msgid "Czech" +msgstr "Tsjekkisk" + +msgid "Welsh" +msgstr "Walisisk" + +msgid "Danish" +msgstr "Dansk" + +msgid "German" +msgstr "Tysk" + +msgid "Lower Sorbian" +msgstr "Lavsorbisk" + +msgid "Greek" +msgstr "Gresk" + +msgid "English" +msgstr "Engelsk" + +msgid "Australian English" +msgstr "Engelsk (australsk)" + +msgid "British English" +msgstr "Engelsk (britisk)" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spansk" + +msgid "Argentinian Spanish" +msgstr "Argentinsk spansk" + +msgid "Colombian Spanish" +msgstr "Colombiansk spansk" + +msgid "Mexican Spanish" +msgstr "Meksikansk spansk" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguansk spansk" + +msgid "Venezuelan Spanish" +msgstr "Venezuelanske spansk" + +msgid "Estonian" +msgstr "Estisk" + +msgid "Basque" +msgstr "Baskisk" + +msgid "Persian" +msgstr "Persisk" + +msgid "Finnish" +msgstr "Finsk" + +msgid "French" +msgstr "Fransk" + +msgid "Frisian" +msgstr "Frisisk" + +msgid "Irish" +msgstr "Irsk" + +msgid "Scottish Gaelic" +msgstr "Skotsk-gælisk" + +msgid "Galician" +msgstr "Galisisk" + +msgid "Hebrew" +msgstr "Hebraisk" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatisk" + +msgid "Upper Sorbian" +msgstr "Høysorbisk" + +msgid "Hungarian" +msgstr "Ungarsk" + +msgid "Armenian" +msgstr "Armensk" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesisk" + +msgid "Igbo" +msgstr "Ibo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandsk" + +msgid "Italian" +msgstr "Italiensk" + +msgid "Japanese" +msgstr "Japansk" + +msgid "Georgian" +msgstr "Georgisk" + +msgid "Kabyle" +msgstr "Kabylsk" + +msgid "Kazakh" +msgstr "Kasakhisk" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreansk" + +msgid "Kyrgyz" +msgstr "Kirgisisk" + +msgid "Luxembourgish" +msgstr "Luxembourgsk" + +msgid "Lithuanian" +msgstr "Litauisk" + +msgid "Latvian" +msgstr "Latvisk" + +msgid "Macedonian" +msgstr "Makedonsk" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolsk" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmesisk" + +msgid "Norwegian Bokmål" +msgstr "Norsk (bokmål)" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Nederlandsk" + +msgid "Norwegian Nynorsk" +msgstr "Norsk (nynorsk)" + +msgid "Ossetic" +msgstr "Ossetisk" + +msgid "Punjabi" +msgstr "Panjabi" + +msgid "Polish" +msgstr "Polsk" + +msgid "Portuguese" +msgstr "Portugisisk" + +msgid "Brazilian Portuguese" +msgstr "Brasiliansk portugisisk" + +msgid "Romanian" +msgstr "Rumensk" + +msgid "Russian" +msgstr "Russisk" + +msgid "Slovak" +msgstr "Slovakisk" + +msgid "Slovenian" +msgstr "Slovensk" + +msgid "Albanian" +msgstr "Albansk" + +msgid "Serbian" +msgstr "Serbisk" + +msgid "Serbian Latin" +msgstr "Serbisk latin" + +msgid "Swedish" +msgstr "Svensk" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tadsjikisk" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "Turkmensk" + +msgid "Turkish" +msgstr "Tyrkisk" + +msgid "Tatar" +msgstr "Tatarisk" + +msgid "Udmurt" +msgstr "Udmurtisk" + +msgid "Ukrainian" +msgstr "Ukrainsk" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Usbekisk" + +msgid "Vietnamese" +msgstr "Vietnamesisk" + +msgid "Simplified Chinese" +msgstr "Forenklet kinesisk" + +msgid "Traditional Chinese" +msgstr "Tradisjonell kinesisk" + +msgid "Messages" +msgstr "Meldinger" + +msgid "Site Maps" +msgstr "Sidekart" + +msgid "Static Files" +msgstr "Statiske filer" + +msgid "Syndication" +msgstr "Syndikering" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Sidenummeret er ikke et heltall" + +msgid "That page number is less than 1" +msgstr "Sidenummeret er mindre enn 1" + +msgid "That page contains no results" +msgstr "Siden inneholder ingen resultater" + +msgid "Enter a valid value." +msgstr "Oppgi en gyldig verdi." + +msgid "Enter a valid URL." +msgstr "Oppgi en gyldig nettadresse." + +msgid "Enter a valid integer." +msgstr "Skriv inn et gyldig heltall." + +msgid "Enter a valid email address." +msgstr "Oppgi en gyldig e-postadresse" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Oppgi en gyldig \"slug\" bestående av bokstaver, nummer, understreker eller " +"bindestreker." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Oppgi en gyldig \"slug\" bestående av Unicode-bokstaver, nummer, " +"understreker eller bindestreker." + +msgid "Enter a valid IPv4 address." +msgstr "Oppgi en gyldig IPv4-adresse." + +msgid "Enter a valid IPv6 address." +msgstr "Oppgi en gyldig IPv6-adresse." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Oppgi en gyldig IPv4- eller IPv6-adresse." + +msgid "Enter only digits separated by commas." +msgstr "Oppgi kun tall adskilt med komma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Verdien må være mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Verdien må være større enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sørg for denne verdien har minst %(limit_value)d tegn (den har " +"%(show_value)d)." +msgstr[1] "" +"Sørg for at denne verdien har minst %(limit_value)d tegn (den har " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sørg for denne verdien har %(limit_value)d tegn (den har nå %(show_value)d)." +msgstr[1] "" +"Sørg for at denne verdien har %(limit_value)d eller færre tegn (den har nå " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Oppgi et tall." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Sørg for at det er kun %(max)s tall." +msgstr[1] "Sørg for at det er %(max)s eller færre tall totalt." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Sørg for at det er kun %(max)s desimal." +msgstr[1] "Sørg for at det er %(max)s eller færre desimaler." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Sørg for at det kun %(max)s tall før desimalpunkt." +msgstr[1] "Sørg for at det er %(max)s eller færre tall før desimalpunkt." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Filendelsen \"%(extension)s\" er ikke tillatt. Tillatte filendelser er: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null-tegn er ikke tillatt." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s med denne %(field_labels)s finnes allerede." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Verdien %(value)r er ikke et gyldig valg." + +msgid "This field cannot be null." +msgstr "Feltet kan ikke være tomt." + +msgid "This field cannot be blank." +msgstr "Feltet kan ikke være blankt." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s med %(field_label)s finnes allerede." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s må være unik for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Felt av typen: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "\"%(value)s\"-verdien må være enten True eller False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\"-verdien må være enten True, False, eller None." + +msgid "Boolean (Either True or False)" +msgstr "Boolsk (True eller False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Tekst (opp til %(max_length)s tegn)" + +msgid "Comma-separated integers" +msgstr "Heltall adskilt med komma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"\"%(value)s\"-verdien har et ugyldig datoformat. Det må være på formen YYYY-" +"MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"\"%(value)s\"-verdien er på den korrekte formen (YYYY-MM-DD), men det er en " +"ugyldig dato." + +msgid "Date (without time)" +msgstr "Dato (uten tid)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"\"%(value)s\"-verdien har et ugyldig datoformat. Det må være på formen YYYY-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"\"%(value)s\"-verdien er på den korrekte formen (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ]), men er ugyldig dato/tid." + +msgid "Date (with time)" +msgstr "Dato (med tid)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "\"%(value)s\"-verdien må være et desimaltall." + +msgid "Decimal number" +msgstr "Desimaltall" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"\"%(value)s\"-verdien har et ugyldig format. Det må være på formen [DD] [HH:" +"[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Varighet" + +msgid "Email address" +msgstr "E-postadresse" + +msgid "File path" +msgstr "Filsti" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Verdien \"%(value)s\" må være et flyttall." + +msgid "Floating point number" +msgstr "Flyttall" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "\"%(value)s\"-verdien må være et heltall." + +msgid "Integer" +msgstr "Heltall" + +msgid "Big (8 byte) integer" +msgstr "Stort (8 byte) heltall" + +msgid "Small integer" +msgstr "Lite heltall" + +msgid "IPv4 address" +msgstr "IPv4-adresse" + +msgid "IP address" +msgstr "IP-adresse" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Verdien \"%(value)s\" må være enten None, True eller False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolsk (True, False eller None)" + +msgid "Positive big integer" +msgstr "Positivt stort heltall" + +msgid "Positive integer" +msgstr "Positivt heltall" + +msgid "Positive small integer" +msgstr "Positivt lite heltall" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (opp til %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"\"%(value)s\"-verdien har et ugyldig format. Det må være på formen HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Verdien \"%(value)s\" har riktig format (HH:MM[:ss[.uuuuuu]]), men er ikke " +"et gyldig klokkeslett." + +msgid "Time" +msgstr "Tid" + +msgid "URL" +msgstr "Nettadresse" + +msgid "Raw binary data" +msgstr "Rå binærdata" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" er ikke en gyldig UUID." + +msgid "Universally unique identifier" +msgstr "Universelt unik identifikator" + +msgid "File" +msgstr "Fil" + +msgid "Image" +msgstr "Bilde" + +msgid "A JSON object" +msgstr "Et JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Verdi må være gyldig JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-instansen med %(field)s %(value)r finnes ikke." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremmednøkkel (type bestemmes av relatert felt)" + +msgid "One-to-one relationship" +msgstr "En-til-en-relasjon" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-relasjon" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-relasjoner" + +msgid "Many-to-many relationship" +msgstr "Mange-til-mange-relasjon" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Feltet er påkrevet." + +msgid "Enter a whole number." +msgstr "Oppgi et heltall." + +msgid "Enter a valid date." +msgstr "Oppgi en gyldig dato." + +msgid "Enter a valid time." +msgstr "Oppgi et gyldig tidspunkt." + +msgid "Enter a valid date/time." +msgstr "Oppgi gyldig dato og tidspunkt." + +msgid "Enter a valid duration." +msgstr "Oppgi en gyldig varighet." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Antall dager må være mellom {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ingen fil ble sendt. Sjekk «encoding»-typen på skjemaet." + +msgid "No file was submitted." +msgstr "Ingen fil ble sendt." + +msgid "The submitted file is empty." +msgstr "Filen er tom." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "Sørg for at filnavnet har %(max)d tegn (det har nå %(length)d)." +msgstr[1] "" +"Sørg for at filnavnet har færre enn %(max)d tegn (det har nå %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Vennligst last opp en ny fil eller marker fjern-boksen, ikke begge." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et " +"bilde." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene." + +msgid "Enter a list of values." +msgstr "Oppgi en liste med verdier." + +msgid "Enter a complete value." +msgstr "Skriv inn en fullstendig verdi." + +msgid "Enter a valid UUID." +msgstr "Oppgi en gyldig UUID." + +msgid "Enter a valid JSON." +msgstr "Oppgi gyldig JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skjult felt %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm-data mangler eller har blitt tuklet med. Felt som mangler: " +"%(field_names)s. Du må muligens rapportere en bug hvis problemet vedvarer." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Vennligst send inn maks %d skjema." +msgstr[1] "Vennligst send inn maks %d skjemaer." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Vennligst send inn minst %d skjema." +msgstr[1] "Vennligst send inn minst %d skjemaer." + +msgid "Order" +msgstr "Rekkefølge" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Vennligst korriger dupliserte data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Vennligst korriger dupliserte data for %(field)s, som må være unike." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Vennligst korriger dupliserte data for %(field_name)s, som må være unike for " +"%(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Vennligst korriger de dupliserte verdiene nedenfor." + +msgid "The inline value did not match the parent instance." +msgstr "Inline-verdien var ikke i samsvar med foreldre-instansen." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Velg et gyldig valg. Valget er ikke av de tilgjengelige valgene." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" er ikke en gyldig verdi." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kunne ikke tolkes i tidssonen %(current_timezone)s, det kan " +"være tvetydig eller ikke eksistere." + +msgid "Clear" +msgstr "Fjern" + +msgid "Currently" +msgstr "Nåværende" + +msgid "Change" +msgstr "Endre" + +msgid "Unknown" +msgstr "Ukjent" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nei,kanskje" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnatt" + +msgid "noon" +msgstr "12:00" + +msgid "Monday" +msgstr "mandag" + +msgid "Tuesday" +msgstr "tirsdag" + +msgid "Wednesday" +msgstr "onsdag" + +msgid "Thursday" +msgstr "torsdag" + +msgid "Friday" +msgstr "fredag" + +msgid "Saturday" +msgstr "lørdag" + +msgid "Sunday" +msgstr "søndag" + +msgid "Mon" +msgstr "man" + +msgid "Tue" +msgstr "tir" + +msgid "Wed" +msgstr "ons" + +msgid "Thu" +msgstr "tor" + +msgid "Fri" +msgstr "fre" + +msgid "Sat" +msgstr "lør" + +msgid "Sun" +msgstr "søn" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "des." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Desember" + +msgid "This is not a valid IPv6 address." +msgstr "Dette er ikke en gyldig IPv6-adresse." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eller" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" + +msgid "Forbidden" +msgstr "Forbudt" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifisering feilet. Forespørsel avbrutt." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Du ser denne meldingen fordi dette HTTPS-nettstedet krever en 'Referer'-" +"header for å bli sendt av nettleseren, men ingen ble sendt. Denne headeren " +"er nødvendig av sikkerhetsmessige årsaker, for å sikre at nettleseren din " +"ikke blir kapret av tredjeparter." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Hvis du har konfigurert nettleseren din til å deaktivere 'Referer'-headers, " +"kan du aktivere dem, i hvert fall for dette nettstedet, eller for HTTPS-" +"tilkoblinger, eller for 'same-origin'-forespørsler." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Hvis du bruker -taggen eller " +"inkluderer 'Referrer-Policy: no-referrer'-header, vennligst fjern dem. CSRF-" +"beskyttelsen krever 'Referer'-headeren for å utføre streng kontroll av " +"referanser. Hvis du er bekymret for personvern, bruk alternativer som for koblinger til tredjeparts nettsteder." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Du ser denne meldingen fordi denne nettsiden krever en CSRF-cookie når du " +"sender inn skjemaer. Denne informasjonskapselen er nødvendig av " +"sikkerhetsmessige årsaker, for å sikre at nettleseren din ikke blir kapret " +"av tredjeparter." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Hvis du har konfigurert nettleseren din til å deaktivere " +"informasjonskapsler, kan du aktivere dem, i hvert fall for dette nettstedet, " +"eller for 'same-origin'-forespørsler." + +msgid "More information is available with DEBUG=True." +msgstr "Mer informasjon er tilgjengelig med DEBUG=True." + +msgid "No year specified" +msgstr "År ikke spesifisert" + +msgid "Date out of range" +msgstr "Date utenfor rekkevidde" + +msgid "No month specified" +msgstr "Måned ikke spesifisert" + +msgid "No day specified" +msgstr "Dag ikke spesifisert" + +msgid "No week specified" +msgstr "Uke ikke spesifisert" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ingen %(verbose_name_plural)s tilgjengelig" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Fremtidig %(verbose_name_plural)s ikke tilgjengelig fordi %(class_name)s." +"allow_future er False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ugyldig datostreng \"%(datestr)s\" gitt formatet \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Fant ingen %(verbose_name)s som passet spørringen" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Siden er ikke \"last\", og kan heller ikke konverteres til et heltall." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ugyldig side (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tom liste og \"%(class_name)s.allow_empty\" er False." + +msgid "Directory indexes are not allowed here." +msgstr "Mappeinnhold er ikke tillatt her." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" finnes ikke" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innhold i %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installasjonen var vellykket! Gratulerer!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Se produktmerknader for Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Du ser denne siden fordi DEBUG=True er i din Django-innstillingsfil og du ikke har konfigurert " +"noen URL-er." + +msgid "Django Documentation" +msgstr "Django-dokumentasjon" + +msgid "Topics, references, & how-to’s" +msgstr "Temaer, referanser & how-tos" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: en polling-app" + +msgid "Get started with Django" +msgstr "Kom i gang med Django" + +msgid "Django Community" +msgstr "Django nettsamfunn" + +msgid "Connect, get help, or contribute" +msgstr "Koble, få hjelp eller bidra" diff --git a/venv/Lib/site-packages/django/conf/locale/nb/__init__.py b/venv/Lib/site-packages/django/conf/locale/nb/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/nb/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nb/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bbda1bc4fbee33b3784b46e057e8352442c340f GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lUXp%%d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04a7f(f|Me literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nb/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nb/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..595b5a56b1737c74a44be2de8a65d80fd75525e7 GIT binary patch literal 795 zcmZXS%Wj)M6o$cogH4>oQQJjV-mtJ#$%MyLpTu!UZ^gpdwiiPKmrhu z1SD*L2BZK5X+T2;Ft7=l@C=+S2*`dT0gH1B=N4>(Hsk;Y&%rtD*hK%LY%YbK((_76 z9mQpPCwf&)Rg|tk$v`0yyt1`TRr7(wH}6v=%X#a>QCa$xeXMXP=1!K!} zCz>(-PUH-J^=){JZbrU~q8$0w8lljave`O`(gOM8xKP(qUx{;63?_NDjAn&@AEo#H zZ9Mf+TttJraP}o!M97EBFkNKBS(eU+t85moqG386&a*rT3nbiaezI?q46awvyXuER TuW_Jhnyhb@VL6(kNtXNv+sVuh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nb/formats.py b/venv/Lib/site-packages/django/conf/locale/nb/formats.py new file mode 100644 index 000000000..0ddb8fef6 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/nb/formats.py @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + # "%d. %b %Y", # '25. okt 2006' + # "%d %b %Y", # '25 okt 2006' + # "%d. %b. %Y", # '25. okt. 2006' + # "%d %b. %Y", # '25 okt. 2006' + # "%d. %B %Y", # '25. oktober 2006' + # "%d %B %Y", # '25 oktober 2006' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a10814b1be0bc91ac38226e96e535f06cf3dc94 GIT binary patch literal 27248 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, 2020 +# Jannis Leidel , 2014 +# Paras Nath Chaudhary , 2012 +# Sagar Chalise , 2011-2012,2015,2018 +# Sagar Chalise , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "अफ्रिकन" + +msgid "Arabic" +msgstr "अरबिक" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "अस्टुरियन" + +msgid "Azerbaijani" +msgstr "अजरबैजानी" + +msgid "Bulgarian" +msgstr "बुल्गेरियाली" + +msgid "Belarusian" +msgstr "बेलारुसियन" + +msgid "Bengali" +msgstr "बंगाली" + +msgid "Breton" +msgstr "ब्रेटोन" + +msgid "Bosnian" +msgstr "बोस्नियाली" + +msgid "Catalan" +msgstr "क्याटालान" + +msgid "Czech" +msgstr "चेक" + +msgid "Welsh" +msgstr "वेल्स" + +msgid "Danish" +msgstr "डेनिस" + +msgid "German" +msgstr "जर्मन" + +msgid "Lower Sorbian" +msgstr "तल्लो सोर्बियन" + +msgid "Greek" +msgstr "ग्रिक" + +msgid "English" +msgstr "अंग्रेजी" + +msgid "Australian English" +msgstr "अस्ट्रेलियाली अंग्रेजी" + +msgid "British English" +msgstr "बेलायती अंग्रेजी" + +msgid "Esperanto" +msgstr "इस्परा्न्तो" + +msgid "Spanish" +msgstr "स्पेनिस" + +msgid "Argentinian Spanish" +msgstr "अर्जेन्टिनाली स्पेनिस" + +msgid "Colombian Spanish" +msgstr "कोलम्बियाली स्पेनिस" + +msgid "Mexican Spanish" +msgstr "मेक्सिकन स्पेनिस" + +msgid "Nicaraguan Spanish" +msgstr "निकारागुँवा स्पेनिस" + +msgid "Venezuelan Spanish" +msgstr "भेनेजुएला स्पेनिस" + +msgid "Estonian" +msgstr "इस्टोनियन" + +msgid "Basque" +msgstr "बास्क" + +msgid "Persian" +msgstr "फारसी" + +msgid "Finnish" +msgstr "फिन्निस" + +msgid "French" +msgstr "फ्रान्सेली" + +msgid "Frisian" +msgstr "फ्रिसियन" + +msgid "Irish" +msgstr "आयरिस" + +msgid "Scottish Gaelic" +msgstr "स्कटीस गैलिक" + +msgid "Galician" +msgstr "ग्यलिसियन" + +msgid "Hebrew" +msgstr "हिब्रु" + +msgid "Hindi" +msgstr "हिन्दि " + +msgid "Croatian" +msgstr "क्रोषियन" + +msgid "Upper Sorbian" +msgstr "माथिल्लो सोर्बियन " + +msgid "Hungarian" +msgstr "हन्गेरियन" + +msgid "Armenian" +msgstr "अर्मेनियन" + +msgid "Interlingua" +msgstr "ईन्टरलिन्गुवा" + +msgid "Indonesian" +msgstr "इन्डोनेसियाली" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "आइडु" + +msgid "Icelandic" +msgstr "आइसल्यान्डिक" + +msgid "Italian" +msgstr "ईटालियन" + +msgid "Japanese" +msgstr "जापनिज" + +msgid "Georgian" +msgstr "जर्जीयन" + +msgid "Kabyle" +msgstr "कबायल" + +msgid "Kazakh" +msgstr "कजाक" + +msgid "Khmer" +msgstr "ख्मेर" + +msgid "Kannada" +msgstr "कन्नड" + +msgid "Korean" +msgstr "कोरियाली" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "लक्जेमबर्गेली" + +msgid "Lithuanian" +msgstr "लिथुवानियाली" + +msgid "Latvian" +msgstr "लाट्भियन" + +msgid "Macedonian" +msgstr "म्यासेडोनियन" + +msgid "Malayalam" +msgstr "मलायलम" + +msgid "Mongolian" +msgstr "मंगोलियन" + +msgid "Marathi" +msgstr "मराठी" + +msgid "Burmese" +msgstr "बर्मेली" + +msgid "Norwegian Bokmål" +msgstr "नर्वे बक्मल" + +msgid "Nepali" +msgstr "नेपाली" + +msgid "Dutch" +msgstr "डच" + +msgid "Norwegian Nynorsk" +msgstr "नर्वेली न्योर्स्क" + +msgid "Ossetic" +msgstr "ओसेटिक" + +msgid "Punjabi" +msgstr "पञ्जावी" + +msgid "Polish" +msgstr "पोलिस" + +msgid "Portuguese" +msgstr "पुर्तगाली" + +msgid "Brazilian Portuguese" +msgstr "ब्राजिली पुर्तगाली" + +msgid "Romanian" +msgstr "रोमानियाली" + +msgid "Russian" +msgstr "रुसी" + +msgid "Slovak" +msgstr "सलोभाक" + +msgid "Slovenian" +msgstr "स्लोभेनियाली" + +msgid "Albanian" +msgstr "अल्बानियाली" + +msgid "Serbian" +msgstr "सर्वियाली" + +msgid "Serbian Latin" +msgstr "सर्वियाली ल्याटिन" + +msgid "Swedish" +msgstr "स्विडिस" + +msgid "Swahili" +msgstr "स्वाहिली" + +msgid "Tamil" +msgstr "तामिल" + +msgid "Telugu" +msgstr "तेलुगु" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "थाई" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "टर्किस" + +msgid "Tatar" +msgstr "टाटर" + +msgid "Udmurt" +msgstr "उद्मुर्ट" + +msgid "Ukrainian" +msgstr "युक्रेनि" + +msgid "Urdu" +msgstr "उर्दु" + +msgid "Uzbek" +msgstr "उज्बेक" + +msgid "Vietnamese" +msgstr "भियतनामी" + +msgid "Simplified Chinese" +msgstr "सरल चिनि" + +msgid "Traditional Chinese" +msgstr "प्राचिन चिनि" + +msgid "Messages" +msgstr "सुचनाहरु" + +msgid "Site Maps" +msgstr "साइट म्याप्स" + +msgid "Static Files" +msgstr "स्टेेटिक फाइलहरु" + +msgid "Syndication" +msgstr "सिन्डिकेसन" + +msgid "That page number is not an integer" +msgstr "पृष्ठ नं अंक होइन ।" + +msgid "That page number is less than 1" +msgstr "पृष्ठ नं १ भन्दा कम भयो ।" + +msgid "That page contains no results" +msgstr "पृष्ठमा नतिजा छैन ।" + +msgid "Enter a valid value." +msgstr "उपयुक्त मान राख्नुहोस ।" + +msgid "Enter a valid URL." +msgstr "उपयुक्त URL राख्नुहोस ।" + +msgid "Enter a valid integer." +msgstr "उपयुक्त अंक राख्नुहोस ।" + +msgid "Enter a valid email address." +msgstr "सही ई-मेल ठेगाना राख्नु होस ।" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "उपयुक्त IPv4 ठेगाना राख्नुहोस" + +msgid "Enter a valid IPv6 address." +msgstr "उपयुक्त IPv6 ठेगाना राख्नुहोस ।" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "उपयुक्त IPv4 वा IPv6 ठेगाना राख्नुहोस ।" + +msgid "Enter only digits separated by commas." +msgstr "कम्मा सहितका वर्ण मात्र राख्नुहोस ।" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "यो मान %(limit_value)s छ भन्ने निश्चित गर्नुहोस । (यो %(show_value)s हो ।)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "यो मान %(limit_value)s भन्दा कम अथवा बराबर छ भन्ने निश्चित गर्नुहोस ।" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "यो मान %(limit_value)s भन्दा बढी अथवा बराबर छ भन्ने निशचित गर्नुहोस ।" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"यो मान कम्तिमा पनि %(limit_value)d अक्षर छ भन्ने निश्चित गर्नुहोस । (यसमा " +"%(show_value)d छ ।)" +msgstr[1] "" +"यो मान कम्तिमा पनि %(limit_value)d अक्षरहरु छ भन्ने निश्चित गर्नुहोस । (यसमा " +"%(show_value)d छ ।)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"यो मान बढिमा पनि %(limit_value)d अक्षर छ भन्ने निश्चित गर्नुहोस । (यसमा " +"%(show_value)d छ ।)" +msgstr[1] "" +"यो मान बढिमा पनि %(limit_value)d अक्षरहरु छ भन्ने निश्चित गर्नुहोस । (यसमा " +"%(show_value)d छ ।)" + +msgid "Enter a number." +msgstr "संख्या राख्नुहोस ।" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "जम्मा %(max)s भन्दा बढी अक्षर नभएको निश्चित पार्नु होस ।" +msgstr[1] "जम्मा %(max)s भन्दा बढी अक्षरहरु नभएको निश्चित पार्नु होस ।" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "दशमलव पछि %(max)s भन्दा बढी अक्षर नभएको निश्चित पार्नु होस ।" +msgstr[1] "दशमलव पछि %(max)s भन्दा बढी अक्षरहरु नभएको निश्चित पार्नु होस ।" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "दशमलव अघि %(max)s भन्दा बढी अक्षर नभएको निश्चित पार्नु होस ।" +msgstr[1] "दशमलव अघि %(max)s भन्दा बढी अक्षरहरु नभएको निश्चित पार्नु होस ।" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "शून्य मान अनुमति छैन।" + +msgid "and" +msgstr "र" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s भएको %(model_name)s बनि सकेको छ । " + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r मान उपयुक्त छनोट होइन ।" + +msgid "This field cannot be null." +msgstr "यो फाँट शून्य हुन सक्दैन ।" + +msgid "This field cannot be blank." +msgstr "यो फाँट खाली हुन सक्दैन ।" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s भएको %(model_name)s पहिलै विद्धमान छ ।" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(date_field_label)s %(lookup_type)s को लागि %(field_label)s अनुपम हुनु पर्दछ ।" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "फाँटको प्रकार: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "बुलियन (True अथवा False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "वर्ण (%(max_length)s सम्म)" + +msgid "Comma-separated integers" +msgstr "कम्माले छुट्याइएका अंकहरु ।" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "मिति (समय रहित)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "मिति (समय सहित)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "दश्मलव संख्या" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "अवधि" + +msgid "Email address" +msgstr "ई-मेल ठेगाना" + +msgid "File path" +msgstr "फाइलको मार्ग" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "दश्मलव हुने संख्या" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "अंक" + +msgid "Big (8 byte) integer" +msgstr "ठूलो (८ बाइटको) अंक" + +msgid "IPv4 address" +msgstr "आइ.पी.भी४ ठेगाना" + +msgid "IP address" +msgstr "IP ठेगाना" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "बुलियन (True, False अथवा None)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "सकारात्मक पूर्णांक" + +msgid "Positive small integer" +msgstr "सानो जोड अङ्क" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "स्लग(%(max_length)s सम्म)" + +msgid "Small integer" +msgstr "सानो अङ्क" + +msgid "Text" +msgstr "पाठ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "समय" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "र बाइनरी डाटा" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "फाइल" + +msgid "Image" +msgstr "चित्र" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "फोरेन कि (प्रकार नातागत फाँटले जनाउछ)" + +msgid "One-to-one relationship" +msgstr "एक-देखि-एक नाता" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s सम्बन्ध" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s सम्बन्धहरु" + +msgid "Many-to-many relationship" +msgstr "अनेक-देखि-अनेक नाता" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "यो फाँट अनिवार्य छ ।" + +msgid "Enter a whole number." +msgstr "संख्या राख्नुहोस ।" + +msgid "Enter a valid date." +msgstr "उपयुक्त मिति राख्नुहोस ।" + +msgid "Enter a valid time." +msgstr "उपयुक्त समय राख्नुहोस ।" + +msgid "Enter a valid date/time." +msgstr "उपयुक्त मिति/समय राख्नुहोस ।" + +msgid "Enter a valid duration." +msgstr "उपयुक्त अवधि राख्नुहोस ।" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "दिन गन्ती {min_days} र {max_days} बीचमा हुनु पर्छ । " + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "कुनै फाईल पेश गरिएको छैन । फारममा ईनकोडिङको प्रकार जाँच गर्नुहोस । " + +msgid "No file was submitted." +msgstr "कुनै फाईल पेश गरिएको छैन ।" + +msgid "The submitted file is empty." +msgstr "पेश गरिएको फाइल खाली छ ।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"यो फाइलको नाममा बाढीमा %(max)d अङ्क भएको निश्चित गर्नु होस । (यसमा %(length)d छ " +"।)" +msgstr[1] "" +"यो फाइलको नाममा बढी मा %(max)d अङ्कहरू भएको निश्चित गर्नु होस । (यसमा %(length)d " +"छ ।)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "दुवै नछान्नुहोस, कि त फाइल पेश गर्नुहोस वा चेक बाकस मा छान्नुहोस ।" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"उपयुक्त चित्र अपलोड गर्नुहोस । तपाइले अपलोड गर्नु भएको फाइल चित्र होइन वा बिग्रेको चित्र " +"हो ।" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "उपयुक्त विकल्प छान्नुहोस । %(value)s प्रस्तावित विकल्प होइन ।" + +msgid "Enter a list of values." +msgstr "मानहरु राख्नुहोस" + +msgid "Enter a complete value." +msgstr "पुरा मान राख्नु होस ।" + +msgid "Enter a valid UUID." +msgstr "उपयुक्त UUID राख्नु होस ।" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(लुकेका %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "म्यानेजमेन्ट फारम डाटा चलाइएको वा नभरेको पाइयो ।" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "कृपया %d अथवा सो भन्दा थोरै फारम बुझाउनु होस ।" +msgstr[1] "कृपया %d अथवा सो भन्दा थोरै फारमहरु बुझाउनु होस ।" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "कृपया %d अथवा सो भन्दा धेरै फारम बुझाउनु होस ।" +msgstr[1] "कृपया %d अथवा सो भन्दा धेरै फारमहरु बुझाउनु होस ।" + +msgid "Order" +msgstr "क्रम" + +msgid "Delete" +msgstr "मेट्नुहोस" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "कृपया %(field)s का लागि दोहोरिइका तथ्याङ्कहरु सच्याउनुहोस ।" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "कृपया %(field)s का लागि दोहोरिइका तथ्याङ्कहरु नौलो तथ्याङ्क सहित सच्याउनुहोस ।" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"कृपया %(field_name)s का लागि दोहोरिइका तथ्याङ्कहरु सच्याउनुहोस जसमा " +"%(date_field)sको %(lookup)s नौलो हुनुपर्दछ ।" + +msgid "Please correct the duplicate values below." +msgstr "कृपया तलका दोहोरिइका मानहरु सच्याउनुहोस ।" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "उपयुक्त विकल्प छान्नुहोस । छानिएको विकल्प प्रस्तावित विकल्प होइन ।" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "सबै खाली गर्नु होस ।" + +msgid "Currently" +msgstr "अहिले" + +msgid "Change" +msgstr "फेर्नुहोस" + +msgid "Unknown" +msgstr "अज्ञात" + +msgid "Yes" +msgstr "हुन्छ" + +msgid "No" +msgstr "होइन" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "हो,होइन,सायद" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d बाइट" +msgstr[1] "%(size)d बाइटहरु" + +#, python-format +msgid "%s KB" +msgstr "%s किलोबाइट" + +#, python-format +msgid "%s MB" +msgstr "%s मेगाबाइट" + +#, python-format +msgid "%s GB" +msgstr "%s गिगाबाइट" + +#, python-format +msgid "%s TB" +msgstr "%s टेराबाइट" + +#, python-format +msgid "%s PB" +msgstr "%s पिटाबाइट" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "मध्यरात" + +msgid "noon" +msgstr "मध्यान्ह" + +msgid "Monday" +msgstr "सोमवार" + +msgid "Tuesday" +msgstr "मंगलवार" + +msgid "Wednesday" +msgstr "बुधवार" + +msgid "Thursday" +msgstr "बिहीवार" + +msgid "Friday" +msgstr "शुक्रवार" + +msgid "Saturday" +msgstr "शनिवार" + +msgid "Sunday" +msgstr "आइतवार" + +msgid "Mon" +msgstr "सोम" + +msgid "Tue" +msgstr "मंगल" + +msgid "Wed" +msgstr "बुध" + +msgid "Thu" +msgstr "बिहि" + +msgid "Fri" +msgstr "शुक्र" + +msgid "Sat" +msgstr "शनि" + +msgid "Sun" +msgstr "आइत" + +msgid "January" +msgstr "जनवरी" + +msgid "February" +msgstr "फेब्रुअरी" + +msgid "March" +msgstr "मार्च" + +msgid "April" +msgstr "अप्रिल" + +msgid "May" +msgstr "मई" + +msgid "June" +msgstr "जुन" + +msgid "July" +msgstr "जुलै" + +msgid "August" +msgstr "अगस्त" + +msgid "September" +msgstr "सेप्टेम्बर" + +msgid "October" +msgstr "अक्टुवर" + +msgid "November" +msgstr "नभम्वर" + +msgid "December" +msgstr "डिसम्वर" + +msgid "jan" +msgstr "जनवरी" + +msgid "feb" +msgstr "फेब्रुअरी" + +msgid "mar" +msgstr "मार्च" + +msgid "apr" +msgstr "अप्रिल" + +msgid "may" +msgstr "मई" + +msgid "jun" +msgstr "जुन" + +msgid "jul" +msgstr "जुलै" + +msgid "aug" +msgstr "अग्सत" + +msgid "sep" +msgstr "सेप्तेम्बर" + +msgid "oct" +msgstr "अक्टुवर" + +msgid "nov" +msgstr "नभम्वर" + +msgid "dec" +msgstr "डिसम्वर" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "जनवरी" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "फेब्रुअरी" + +msgctxt "abbrev. month" +msgid "March" +msgstr "मार्च" + +msgctxt "abbrev. month" +msgid "April" +msgstr "अप्रिल" + +msgctxt "abbrev. month" +msgid "May" +msgstr "मई" + +msgctxt "abbrev. month" +msgid "June" +msgstr "जुन" + +msgctxt "abbrev. month" +msgid "July" +msgstr "जुलै" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "अगस्त" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "सेप्तेम्बर" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "अक्टुवर" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "नभम्वर" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "डिसम्वर" + +msgctxt "alt. month" +msgid "January" +msgstr "जनवरी" + +msgctxt "alt. month" +msgid "February" +msgstr "फेब्रुअरी" + +msgctxt "alt. month" +msgid "March" +msgstr "मार्च" + +msgctxt "alt. month" +msgid "April" +msgstr "अप्रिल" + +msgctxt "alt. month" +msgid "May" +msgstr "मई" + +msgctxt "alt. month" +msgid "June" +msgstr "जुन" + +msgctxt "alt. month" +msgid "July" +msgstr "जुलै" + +msgctxt "alt. month" +msgid "August" +msgstr "अगस्त" + +msgctxt "alt. month" +msgid "September" +msgstr "सेप्टेम्बर" + +msgctxt "alt. month" +msgid "October" +msgstr "अक्टुवर" + +msgctxt "alt. month" +msgid "November" +msgstr "नभम्वर" + +msgctxt "alt. month" +msgid "December" +msgstr "डिसम्वर" + +msgid "This is not a valid IPv6 address." +msgstr "यो उपयुक्त IPv6 ठेगाना होइन ।" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "अथवा" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d वर्ष" +msgstr[1] "%d वर्षहरु" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d महिना" +msgstr[1] "%d महिनाहरु" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d सप्ताह" +msgstr[1] "%d सप्ताहहरु" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d दिन" +msgstr[1] "%d दिनहरु" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d घण्टा" +msgstr[1] "%d घण्टाहरु" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d मिनट" +msgstr[1] "%d मिनटहरु" + +msgid "Forbidden" +msgstr "निषेधित" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF प्रमाणीकरण भएन । अनुरोध विफल ।" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "DEBUG=True ले ज्यादा सुचना प्रदान गर्दछ ।" + +msgid "No year specified" +msgstr "साल तोकिएको छैन ।" + +msgid "Date out of range" +msgstr "मिति मिलेन ।" + +msgid "No month specified" +msgstr "महिना तोकिएको छैन ।" + +msgid "No day specified" +msgstr "दिन तोकिएको छैन ।" + +msgid "No week specified" +msgstr "साता तोकिएको छैन ।" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s उपलब्ध छैन ।" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future 'False' हुनाले आगामी %(verbose_name_plural)s उपलब्ध " +"छैन ।" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s भेटिएन ।" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "रद्द पृष्ठ (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "डाइरेक्टरी इन्डेक्सहरु यहाँ अनुमति छैन ।" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s को सूची" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "ज्याङ्गो : वेब साइट र एप्लिकेसन बनाउन सहयोगी औजार " + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"ज्याङ्गो %(version)s को परिवर्तन तथा विशेषता यहाँ हेर्नु होस" + +msgid "The install worked successfully! Congratulations!" +msgstr "बधाई छ । स्थापना भएको छ ।" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "ज्याङ्गो दस्तावेज ।" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "मतदान एप उदाहरण " + +msgid "Get started with Django" +msgstr "ज्याङ्गो सुरु गर्नु होस ।" + +msgid "Django Community" +msgstr "ज्याङ्गो समुदाय" + +msgid "Connect, get help, or contribute" +msgstr "सहयोग अथवा योगदान गरी जोडिनु होस" diff --git a/venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea4b8d6c9323a5baed005595efcf77a3e88ba8c5 GIT binary patch literal 27117 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..e8ccbca08 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,1311 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bas Peschier , 2011,2013 +# Blue , 2011-2012 +# Bouke Haarsma , 2013 +# Claude Paroz , 2014 +# Erik Romijn , 2013 +# Evelijn Saaltink , 2016 +# Harro van der Klauw , 2011-2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011-2012,2014 +# Michiel Overtoom , 2014 +# Meteor0id, 2019-2020 +# 8de006b1b0894aab6aef71979dcd8bd6_5c6b207 , 2014-2015 +# Tino de Bruijn , 2013 +# Tonnes , 2017,2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-15 08:30+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabisch" + +msgid "Algerian Arabic" +msgstr "Algerijns Arabisch" + +msgid "Asturian" +msgstr "Asturisch" + +msgid "Azerbaijani" +msgstr "Azerbeidzjaans" + +msgid "Bulgarian" +msgstr "Bulgaars" + +msgid "Belarusian" +msgstr "Wit-Russisch" + +msgid "Bengali" +msgstr "Bengaals" + +msgid "Breton" +msgstr "Bretons" + +msgid "Bosnian" +msgstr "Bosnisch" + +msgid "Catalan" +msgstr "Catalaans" + +msgid "Czech" +msgstr "Tsjechisch" + +msgid "Welsh" +msgstr "Welsh" + +msgid "Danish" +msgstr "Deens" + +msgid "German" +msgstr "Duits" + +msgid "Lower Sorbian" +msgstr "Nedersorbisch" + +msgid "Greek" +msgstr "Grieks" + +msgid "English" +msgstr "Engels" + +msgid "Australian English" +msgstr "Australisch-Engels" + +msgid "British English" +msgstr "Brits-Engels" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spaans" + +msgid "Argentinian Spanish" +msgstr "Argentijns Spaans" + +msgid "Colombian Spanish" +msgstr "Colombiaans Spaans" + +msgid "Mexican Spanish" +msgstr "Mexicaans Spaans" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguaans Spaans" + +msgid "Venezuelan Spanish" +msgstr "Venezolaans Spaans" + +msgid "Estonian" +msgstr "Ests" + +msgid "Basque" +msgstr "Baskisch" + +msgid "Persian" +msgstr "Perzisch" + +msgid "Finnish" +msgstr "Fins" + +msgid "French" +msgstr "Frans" + +msgid "Frisian" +msgstr "Fries" + +msgid "Irish" +msgstr "Iers" + +msgid "Scottish Gaelic" +msgstr "Schots-Gaelisch" + +msgid "Galician" +msgstr "Galicisch" + +msgid "Hebrew" +msgstr "Hebreeuws" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatisch" + +msgid "Upper Sorbian" +msgstr "Oppersorbisch" + +msgid "Hungarian" +msgstr "Hongaars" + +msgid "Armenian" +msgstr "Armeens" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesisch" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "IJslands" + +msgid "Italian" +msgstr "Italiaans" + +msgid "Japanese" +msgstr "Japans" + +msgid "Georgian" +msgstr "Georgisch" + +msgid "Kabyle" +msgstr "Kabylisch" + +msgid "Kazakh" +msgstr "Kazachs" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreaans" + +msgid "Kyrgyz" +msgstr "Kirgizisch" + +msgid "Luxembourgish" +msgstr "Luxemburgs" + +msgid "Lithuanian" +msgstr "Litouws" + +msgid "Latvian" +msgstr "Lets" + +msgid "Macedonian" +msgstr "Macedonisch" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongools" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Birmaans" + +msgid "Norwegian Bokmål" +msgstr "Noors Bokmål" + +msgid "Nepali" +msgstr "Nepalees" + +msgid "Dutch" +msgstr "Nederlands" + +msgid "Norwegian Nynorsk" +msgstr "Noors Nynorsk" + +msgid "Ossetic" +msgstr "Ossetisch" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Pools" + +msgid "Portuguese" +msgstr "Portugees" + +msgid "Brazilian Portuguese" +msgstr "Braziliaans Portugees" + +msgid "Romanian" +msgstr "Roemeens" + +msgid "Russian" +msgstr "Russisch" + +msgid "Slovak" +msgstr "Slovaaks" + +msgid "Slovenian" +msgstr "Sloveens" + +msgid "Albanian" +msgstr "Albanisch" + +msgid "Serbian" +msgstr "Servisch" + +msgid "Serbian Latin" +msgstr "Servisch Latijn" + +msgid "Swedish" +msgstr "Zweeds" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telegu" + +msgid "Tajik" +msgstr "Tadzjieks" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "Turkmeens" + +msgid "Turkish" +msgstr "Turks" + +msgid "Tatar" +msgstr "Tataars" + +msgid "Udmurt" +msgstr "Oedmoerts" + +msgid "Ukrainian" +msgstr "Oekraïens" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Oezbeeks" + +msgid "Vietnamese" +msgstr "Vietnamees" + +msgid "Simplified Chinese" +msgstr "Vereenvoudigd Chinees" + +msgid "Traditional Chinese" +msgstr "Traditioneel Chinees" + +msgid "Messages" +msgstr "Berichten" + +msgid "Site Maps" +msgstr "Sitemaps" + +msgid "Static Files" +msgstr "Statische bestanden" + +msgid "Syndication" +msgstr "Syndicatie" + +msgid "That page number is not an integer" +msgstr "Dat paginanummer is geen geheel getal" + +msgid "That page number is less than 1" +msgstr "Dat paginanummer is kleiner dan 1" + +msgid "That page contains no results" +msgstr "Die pagina bevat geen resultaten" + +msgid "Enter a valid value." +msgstr "Voer een geldige waarde in." + +msgid "Enter a valid URL." +msgstr "Voer een geldige URL in." + +msgid "Enter a valid integer." +msgstr "Voer een geldig geheel getal in." + +msgid "Enter a valid email address." +msgstr "Voer een geldig e-mailadres in." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Voer een geldige ‘slug’ in, bestaande uit letters, cijfers, liggende " +"streepjes en verbindingsstreepjes." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Voer een geldige ‘slug’ in, bestaande uit Unicode-letters, cijfers, liggende " +"streepjes en verbindingsstreepjes." + +msgid "Enter a valid IPv4 address." +msgstr "Voer een geldig IPv4-adres in." + +msgid "Enter a valid IPv6 address." +msgstr "Voer een geldig IPv6-adres in." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Voer een geldig IPv4- of IPv6-adres in." + +msgid "Enter only digits separated by commas." +msgstr "Voer alleen cijfers in, gescheiden door komma's." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Zorg ervoor dat deze waarde gelijk is aan %(limit_value)s (het is nu " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Zorg ervoor dat deze waarde hoogstens %(limit_value)s is." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Zorg ervoor dat deze waarde minstens %(limit_value)s is." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zorg dat deze waarde ten minste %(limit_value)d teken bevat (het zijn er nu " +"%(show_value)d)." +msgstr[1] "" +"Zorg dat deze waarde ten minste %(limit_value)d tekens bevat (het zijn er nu " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Zorg dat deze waarde niet meer dan %(limit_value)d teken bevat (het zijn er " +"nu %(show_value)d)." +msgstr[1] "" +"Zorg dat deze waarde niet meer dan %(limit_value)d tekens bevat (het zijn er " +"nu %(show_value)d)." + +msgid "Enter a number." +msgstr "Voer een getal in." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Zorg dat er niet meer dan %(max)s cijfer is." +msgstr[1] "Zorg dat er niet meer dan %(max)s cijfers zijn." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Zorg dat er niet meer dan %(max)s cijfer achter de komma staat." +msgstr[1] "Zorg dat er niet meer dan %(max)s cijfers achter de komma staan." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Zorg dat er niet meer dan %(max)s cijfer voor de komma staat." +msgstr[1] "Zorg dat er niet meer dan %(max)s cijfers voor de komma staan." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Bestandsextensie ‘%(extension)s’ is niet toegestaan. Toegestane extensies " +"zijn: ‘%(allowed_extensions)s’." + +msgid "Null characters are not allowed." +msgstr "Null-tekens zijn niet toegestaan." + +msgid "and" +msgstr "en" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s met deze %(field_labels)s bestaat al." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Waarde %(value)r is geen geldige keuze." + +msgid "This field cannot be null." +msgstr "Dit veld mag niet leeg zijn." + +msgid "This field cannot be blank." +msgstr "Dit veld kan niet leeg zijn" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Er bestaat al een %(model_name)s met eenzelfde %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s moet uniek zijn voor %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Veld van type: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Waarde van ‘%(value)s’ moet True of False zijn." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Waarde van ‘%(value)s’ moet True, False of None zijn." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True of False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Tekenreeks (hooguit %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Komma-gescheiden gehele getallen" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Waarde van ‘%(value)s’ heeft een ongeldige datumnotatie. De juiste notatie " +"is YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Waarde van ‘%(value)s’ heeft de juiste notatie (YYYY-MM-DD), maar het is een " +"ongeldige datum." + +msgid "Date (without time)" +msgstr "Datum (zonder tijd)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Waarde van ‘%(value)s’ heeft een ongeldige notatie. De juiste notatie is " +"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Waarde van ‘%(value)s’ heeft de juiste notatie (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ]), maar het is een ongeldige datum/tijd." + +msgid "Date (with time)" +msgstr "Datum (met tijd)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Waarde van ‘%(value)s’ moet een decimaal getal zijn." + +msgid "Decimal number" +msgstr "Decimaal getal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Waarde van ‘%(value)s’ heeft een ongeldige notatie. De juiste notatie is " +"[DD] [[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Tijdsduur" + +msgid "Email address" +msgstr "E-mailadres" + +msgid "File path" +msgstr "Bestandspad" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Waarde van ‘%(value)s’ moet een drijvende-kommagetal zijn." + +msgid "Floating point number" +msgstr "Drijvende-kommagetal" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Waarde van ‘%(value)s’ moet een geheel getal zijn." + +msgid "Integer" +msgstr "Geheel getal" + +msgid "Big (8 byte) integer" +msgstr "Groot (8 byte) geheel getal" + +msgid "IPv4 address" +msgstr "IPv4-adres" + +msgid "IP address" +msgstr "IP-adres" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Waarde van ‘%(value)s’ moet None, True of False zijn." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (True, False of None)" + +msgid "Positive big integer" +msgstr "Positief groot geheel getal" + +msgid "Positive integer" +msgstr "Positief geheel getal" + +msgid "Positive small integer" +msgstr "Postitief klein geheel getal" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (max. lengte %(max_length)s)" + +msgid "Small integer" +msgstr "Klein geheel getal" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Waarde van ‘%(value)s’ heeft een ongeldige notatie. De juiste notatie is HH:" +"MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Waarde van ‘%(value)s’ heeft de juiste notatie (HH:MM[:ss[.uuuuuu]]), maar " +"het is een ongeldige tijd." + +msgid "Time" +msgstr "Tijd" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Onbewerkte binaire gegevens" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "‘%(value)s’ is geen geldige UUID." + +msgid "Universally unique identifier" +msgstr "Universally unique identifier" + +msgid "File" +msgstr "Bestand" + +msgid "Image" +msgstr "Afbeelding" + +msgid "A JSON object" +msgstr "Een JSON-object" + +msgid "Value must be valid JSON." +msgstr "Waarde moet geldige JSON zijn." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-instantie met %(field)s %(value)r bestaat niet." + +msgid "Foreign Key (type determined by related field)" +msgstr "Refererende sleutel (type wordt bepaald door gerelateerde veld)" + +msgid "One-to-one relationship" +msgstr "Een-op-een-relatie" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-relatie" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-relaties" + +msgid "Many-to-many relationship" +msgstr "Veel-op-veel-relatie" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Dit veld is verplicht." + +msgid "Enter a whole number." +msgstr "Voer een geheel getal in." + +msgid "Enter a valid date." +msgstr "Voer een geldige datum in." + +msgid "Enter a valid time." +msgstr "Voer een geldige tijd in." + +msgid "Enter a valid date/time." +msgstr "Voer een geldige datum/tijd in." + +msgid "Enter a valid duration." +msgstr "Voer een geldige tijdsduur in." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Het aantal dagen moet tussen {min_days} en {max_days} liggen." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Er is geen bestand verstuurd. Controleer het coderingstype op het formulier." + +msgid "No file was submitted." +msgstr "Er is geen bestand verstuurd." + +msgid "The submitted file is empty." +msgstr "Het verstuurde bestand is leeg." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Zorg dat deze bestandsnaam niet meer dan %(max)d teken bevat (het zijn er nu " +"%(length)d)." +msgstr[1] "" +"Zorg dat deze bestandsnaam niet meer dan %(max)d tekens bevat (het zijn er " +"nu %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Upload een bestand of vink het vakje Wissen aan, niet allebei." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Upload een geldige afbeelding. Het geüploade bestand is geen of een " +"beschadigde afbeelding." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Selecteer een geldige keuze. %(value)s is geen beschikbare keuze." + +msgid "Enter a list of values." +msgstr "Voer een lijst met waarden in." + +msgid "Enter a complete value." +msgstr "Voer een volledige waarde in." + +msgid "Enter a valid UUID." +msgstr "Voer een geldige UUID in." + +msgid "Enter a valid JSON." +msgstr "Voer een geldige JSON in." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Verborgen veld %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm-gegevens ontbreken, of er is mee geknoeid" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Verstuur niet meer dan %d formulier." +msgstr[1] "Verstuur niet meer dan %d formulieren." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Verstuur %d of meer formulieren." +msgstr[1] "Verstuur %d of meer formulieren." + +msgid "Order" +msgstr "Volgorde" + +msgid "Delete" +msgstr "Verwijderen" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Corrigeer de dubbele gegevens voor %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Corrigeer de dubbele gegevens voor %(field)s, dat uniek moet zijn." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Corrigeer de dubbele gegevens voor %(field_name)s, dat uniek moet zijn voor " +"de %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Corrigeer de dubbele waarden hieronder." + +msgid "The inline value did not match the parent instance." +msgstr "De inline waarde komt niet overeen met de bovenliggende instantie." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Selecteer een geldige keuze. Deze keuze is niet beschikbaar." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "‘%(pk)s’ is geen geldige waarde." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kon niet worden geïnterpreteerd in tijdzone " +"%(current_timezone)s; mogelijk is deze dubbelzinnig of bestaat deze niet." + +msgid "Clear" +msgstr "Wissen" + +msgid "Currently" +msgstr "Huidige" + +msgid "Change" +msgstr "Wijzigen" + +msgid "Unknown" +msgstr "Onbekend" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nee" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nee,misschien" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "middernacht" + +msgid "noon" +msgstr "middag" + +msgid "Monday" +msgstr "maandag" + +msgid "Tuesday" +msgstr "dinsdag" + +msgid "Wednesday" +msgstr "woensdag" + +msgid "Thursday" +msgstr "donderdag" + +msgid "Friday" +msgstr "vrijdag" + +msgid "Saturday" +msgstr "zaterdag" + +msgid "Sunday" +msgstr "zondag" + +msgid "Mon" +msgstr "ma" + +msgid "Tue" +msgstr "di" + +msgid "Wed" +msgstr "wo" + +msgid "Thu" +msgstr "do" + +msgid "Fri" +msgstr "vr" + +msgid "Sat" +msgstr "za" + +msgid "Sun" +msgstr "zo" + +msgid "January" +msgstr "januari" + +msgid "February" +msgstr "februari" + +msgid "March" +msgstr "maart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mei" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "augustus" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mrt" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mei" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb" + +msgctxt "abbrev. month" +msgid "March" +msgstr "mrt" + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr" + +msgctxt "abbrev. month" +msgid "May" +msgstr "mei" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "jul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sep" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec" + +msgctxt "alt. month" +msgid "January" +msgstr "januari" + +msgctxt "alt. month" +msgid "February" +msgstr "februari" + +msgctxt "alt. month" +msgid "March" +msgstr "maart" + +msgctxt "alt. month" +msgid "April" +msgstr "april" + +msgctxt "alt. month" +msgid "May" +msgstr "mei" + +msgctxt "alt. month" +msgid "June" +msgstr "juni" + +msgctxt "alt. month" +msgid "July" +msgstr "juli" + +msgctxt "alt. month" +msgid "August" +msgstr "augustus" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "december" + +msgid "This is not a valid IPv6 address." +msgstr "Dit is geen geldig IPv6-adres." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "of" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jaar" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maanden" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weken" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dagen" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d uur" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minuten" + +msgid "Forbidden" +msgstr "Verboden" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verificatie mislukt. Aanvraag afgebroken." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"U ziet deze melding, omdat deze HTTPS-website vereist dat uw webbrowser een " +"‘Referer header’ meestuurt, maar deze ontbreekt. Deze header is om " +"veiligheidsredenen vereist om er zeker van te zijn dat uw browser niet door " +"derden wordt gekaapt." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Als u ‘Referer’-headers in uw browser hebt uitgeschakeld, schakel deze dan " +"weer in, op zijn minst voor deze website, of voor HTTPS-verbindingen, of " +"voor ‘same-origin’-aanvragen." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Als u de tag gebruikt of de " +"header ‘Referrer-Policy: no-referrer’ opneemt, verwijder deze dan. De CSRF-" +"bescherming vereist de ‘Referer’-header voor strenge referer-controle. Als u " +"bezorgd bent om privacy, gebruik dan alternatieven zoals voor koppelingen naar websites van derden." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"U ziet deze melding, omdat deze website vereist dat een CSRF-cookie wordt " +"meegestuurd bij het verzenden van formulieren. Dit cookie is om " +"veiligheidsredenen vereist om er zeker van te zijn dat uw browser niet door " +"derden wordt gekaapt." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Als u cookies in uw webbrowser hebt uitgeschakeld, schakel deze dan weer in, " +"op zijn minst voor deze website, of voor ‘same-origin’-aanvragen." + +msgid "More information is available with DEBUG=True." +msgstr "Meer informatie is beschikbaar met DEBUG=True." + +msgid "No year specified" +msgstr "Geen jaar opgegeven" + +msgid "Date out of range" +msgstr "Datum buiten bereik" + +msgid "No month specified" +msgstr "Geen maand opgegeven" + +msgid "No day specified" +msgstr "Geen dag opgegeven" + +msgid "No week specified" +msgstr "Geen week opgegeven" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Geen %(verbose_name_plural)s beschikbaar" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Geen toekomstige %(verbose_name_plural)s beschikbaar, omdat %(class_name)s." +"allow_future de waarde False (Onwaar) heeft." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ongeldige datumtekst ‘%(datestr)s’ op basis van notatie ‘%(format)s’" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Geen %(verbose_name)s gevonden die voldoet aan de query" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Pagina is niet ‘last’ en kan ook niet naar een geheel getal worden " +"geconverteerd." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ongeldige pagina (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lege lijst en ‘%(class_name)s.allow_empty’ is False." + +msgid "Directory indexes are not allowed here." +msgstr "Directoryindexen zijn hier niet toegestaan." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "‘%(path)s’ bestaat niet" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index van %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: het webframework voor perfectionisten met deadlines." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Uitgaveopmerkingen voor Django %(version)s " +"weergeven" + +msgid "The install worked successfully! Congratulations!" +msgstr "De installatie is gelukt! Gefeliciteerd!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"U ziet deze pagina, omdat uw instellingenbestand DEBUG=True bevat en u geen URL's hebt geconfigureerd." + +msgid "Django Documentation" +msgstr "Django-documentatie" + +msgid "Topics, references, & how-to’s" +msgstr "Onderwerpen, referenties en instructies" + +msgid "Tutorial: A Polling App" +msgstr "Handleiding: een app voor peilingen" + +msgid "Get started with Django" +msgstr "Beginnen met Django" + +msgid "Django Community" +msgstr "Django-gemeenschap" + +msgid "Connect, get help, or contribute" +msgstr "Contact met anderen, hulp verkrijgen of bijdragen" diff --git a/venv/Lib/site-packages/django/conf/locale/nl/__init__.py b/venv/Lib/site-packages/django/conf/locale/nl/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/nl/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nl/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7aec1030e60c29a7d7a341e5b53bf3206687f76 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lUXFfzd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04mBf+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nl/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nl/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfe2b3629e42a66ab08a09eb2c11ffc41ad1bfce GIT binary patch literal 1299 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Ð7hk_fD@{_d8u! z?>pJu=5S2IL9TZdwoceE+Ja<^OIGw+q1&4BMWgYed8vs}!?mUbMl!1t_wM0;1QC=O zQymMNMvi;UTeEjhOFOhqcNu1s%7zd&c5dsO48@NZ-RYhj0NvJEdmOm7w>wI?M#O}1 z?sw9NTAp|M#K=x0-xKzDI#l1gW&`bQQXPTwQqVY%_Z`}>M^F!6lUwZT0{+!I>JtmR zF}N7)MyWKWnXv~XS@E%zd1ePR8f#<~F8rlXBibfYZtA8~Tn1vxV3Zeng?}(%K4A@^ zOv;KZW!bqJ=EmHz@dT%fg=sp55hPE!W+6RVy)WZ&*I z1}>YESch}gmi!nFwtTtGY3+Dqi~VP89cr_&ZP}iQwR6U(G^@R&Uff#c2TfJ?eFyPF z;SRZil#6QHDz;jaJXBpLC=ao!roC-7pYWLcqrLE`dZcDz1I#$=W++$8>&R%SO;@9R zwjC1A?NxcVWsJnI?s(>aloQWBkDbUq?eF!;*yK;k#B3Q$Xx&DsHvU_E`TtbJo|ba5 zW;Jr>xaR)Zm;SL=q<`#X{s|NRXbGE3M|?H&uVI{i-u5m_%I?V4x|d}tPwrmk4Bl30 zJyijTCD;ne7aE<1p%VhNOo%Zk^0HUz>HPZ#}u{&dE%TY|JGM z-CT9DTfwtEaOO&C_r8sMWT4G{L!HwpDADN>MwM|mV;;AqrOYcmAdj{KQ~NmLVEG;_ z&pBMKp1jQ41@`Coj@;0myl?H_8STK|K$SAP2DJR#4rsj?+bv;}uWOZRf)LGgeta0& zAG|$!+8>Ksi>StiTblpa@9sDM{nw(UziGH4Al%{kA-*tfH|7s9wX=B+A+_}>YWt++ f8=LODe1FrfRT=yKY!8e>{&0tbM*iithuZ%IAn5?4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..04b872e30 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,1305 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# hgrimelid , 2011 +# Jannis Leidel , 2011 +# jensadne , 2013 +# Sigurd Gartmann , 2012 +# Sivert Olstad, 2021 +# velmont , 2012 +# Vibeke Uthaug, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-25 14:49+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabisk" + +msgid "Algerian Arabic" +msgstr "Arabisk (algersk)" + +msgid "Asturian" +msgstr "Asturiansk" + +msgid "Azerbaijani" +msgstr "Aserbajansk" + +msgid "Bulgarian" +msgstr "Bulgarsk" + +msgid "Belarusian" +msgstr "Kviterussisk" + +msgid "Bengali" +msgstr "Bengalsk" + +msgid "Breton" +msgstr "Bretonsk" + +msgid "Bosnian" +msgstr "Bosnisk" + +msgid "Catalan" +msgstr "Katalansk" + +msgid "Czech" +msgstr "Tsjekkisk" + +msgid "Welsh" +msgstr "Walisisk" + +msgid "Danish" +msgstr "Dansk" + +msgid "German" +msgstr "Tysk" + +msgid "Lower Sorbian" +msgstr "Lågsorbisk" + +msgid "Greek" +msgstr "Gresk" + +msgid "English" +msgstr "Engelsk" + +msgid "Australian English" +msgstr "Engelsk (australsk)" + +msgid "British English" +msgstr "Engelsk (britisk)" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spansk" + +msgid "Argentinian Spanish" +msgstr "Spansk (argentinsk)" + +msgid "Colombian Spanish" +msgstr "Spansk (kolombiansk)" + +msgid "Mexican Spanish" +msgstr "Spansk (meksikansk)" + +msgid "Nicaraguan Spanish" +msgstr "Spansk (nicaraguansk)" + +msgid "Venezuelan Spanish" +msgstr "Spansk (venezuelansk)" + +msgid "Estonian" +msgstr "Estisk" + +msgid "Basque" +msgstr "Baskisk" + +msgid "Persian" +msgstr "Persisk" + +msgid "Finnish" +msgstr "Finsk" + +msgid "French" +msgstr "Fransk" + +msgid "Frisian" +msgstr "Frisisk" + +msgid "Irish" +msgstr "Irsk" + +msgid "Scottish Gaelic" +msgstr "Skotsk-gaelisk" + +msgid "Galician" +msgstr "Galisisk" + +msgid "Hebrew" +msgstr "Hebraisk" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatisk" + +msgid "Upper Sorbian" +msgstr "Høgsorbisk" + +msgid "Hungarian" +msgstr "Ungarsk" + +msgid "Armenian" +msgstr "Armensk" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesisk" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandsk" + +msgid "Italian" +msgstr "Italiensk" + +msgid "Japanese" +msgstr "Japansk" + +msgid "Georgian" +msgstr "Georgisk" + +msgid "Kabyle" +msgstr "Kabylsk" + +msgid "Kazakh" +msgstr "Kasakhisk" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreansk" + +msgid "Kyrgyz" +msgstr "Kirgisisk" + +msgid "Luxembourgish" +msgstr "Luxembourgsk" + +msgid "Lithuanian" +msgstr "Litauisk" + +msgid "Latvian" +msgstr "Latvisk" + +msgid "Macedonian" +msgstr "Makedonsk" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolsk" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malayisk" + +msgid "Burmese" +msgstr "Burmesisk" + +msgid "Norwegian Bokmål" +msgstr "Norsk (bokmål)" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Nederlandsk" + +msgid "Norwegian Nynorsk" +msgstr "Norsk (nynorsk)" + +msgid "Ossetic" +msgstr "Ossetisk" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polsk" + +msgid "Portuguese" +msgstr "Portugisisk" + +msgid "Brazilian Portuguese" +msgstr "Brasiliansk portugisisk" + +msgid "Romanian" +msgstr "Rumensk" + +msgid "Russian" +msgstr "Russisk" + +msgid "Slovak" +msgstr "Slovakisk" + +msgid "Slovenian" +msgstr "Slovensk" + +msgid "Albanian" +msgstr "Albansk" + +msgid "Serbian" +msgstr "Serbisk" + +msgid "Serbian Latin" +msgstr "Serbisk latin" + +msgid "Swedish" +msgstr "Svensk" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tadsjikisk" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkmen" +msgstr "Turkmensk" + +msgid "Turkish" +msgstr "Tyrkisk" + +msgid "Tatar" +msgstr "Tatarisk" + +msgid "Udmurt" +msgstr "Udmurtisk" + +msgid "Ukrainian" +msgstr "Ukrainsk" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Usbekisk" + +msgid "Vietnamese" +msgstr "Vietnamesisk" + +msgid "Simplified Chinese" +msgstr "Simplifisert kinesisk" + +msgid "Traditional Chinese" +msgstr "Tradisjonell kinesisk" + +msgid "Messages" +msgstr "Meldingar" + +msgid "Site Maps" +msgstr "Sidekart" + +msgid "Static Files" +msgstr "Statiske Filer" + +msgid "Syndication" +msgstr "Syndikering" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Sidenummeret er ikkje eit heiltal" + +msgid "That page number is less than 1" +msgstr "Sidenummeret er mindre enn 1" + +msgid "That page contains no results" +msgstr "Sida har ingen resultat" + +msgid "Enter a valid value." +msgstr "Oppgje ein gyldig verdi." + +msgid "Enter a valid URL." +msgstr "Oppgje ei gyldig nettadresse." + +msgid "Enter a valid integer." +msgstr "Oppgje eit gyldig heiltal." + +msgid "Enter a valid email address." +msgstr "Oppgje ei gyldig e-postadresse." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Oppgje ein gyldig \"slug\" som består av bokstavar, nummer, understrekar " +"eller bindestrekar." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Oppgje ein gyldig \"slug\" som består av Unicode bokstavar, nummer, " +"understrekar eller bindestrekar." + +msgid "Enter a valid IPv4 address." +msgstr "Oppgje ei gyldig IPv4-adresse." + +msgid "Enter a valid IPv6 address." +msgstr "Skriv inn ei gyldig IPv6-adresse." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Skriv inn ei gyldig IPv4- eller IPv6-adresse." + +msgid "Enter only digits separated by commas." +msgstr "Oppgje berre tall skild med komma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Verdien må minimum ha %(limit_value)s teikn (den er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Verdien må vere mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Verdien må vere større enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "Verdien må ha minst %(limit_value)d teikn (den har %(show_value)d)." +msgstr[1] "Verdien må ha minst %(limit_value)d teikn (den har %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Verdien kan ikkje ha fleire enn %(limit_value)d teikn (den har " +"%(show_value)d)." +msgstr[1] "" +"Verdien kan ikkje ha fleire enn %(limit_value)d teikn (den har " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Oppgje eit tal." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Verdien kan ikkje ha meir enn %(max)s siffer totalt." +msgstr[1] "Verdien kan ikkje ha meir enn %(max)s siffer totalt." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Verdien kan ikkie ha meir enn %(max)s desimal." +msgstr[1] "Verdien kan ikkie ha meir enn %(max)s desimalar." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Verdien kan ikkje ha meir enn %(max)s siffer framanfor komma." +msgstr[1] "Verdien kan ikkje ha meir enn %(max)s siffer framanfor komma." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Filtypen “%(extension)s” er ikkje tillate. Tillate filtypar er: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null-teikn er ikkje tillate." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s med %(field_labels)s fins allereie." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Verdi %(value)r er eit ugyldig val." + +msgid "This field cannot be null." +msgstr "Feltet kan ikkje vere tomt." + +msgid "This field cannot be blank." +msgstr "Feltet kan ikkje vere tomt." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s med %(field_label)s fins allereie." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s må vere unik for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Felt av typen: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Verdien “%(value)s” må vere anten True eller False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Verdien “%(value)s” må vere anten True, False, eller None." + +msgid "Boolean (Either True or False)" +msgstr "Boolsk (True eller False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Tekst (opp til %(max_length)s teikn)" + +msgid "Comma-separated integers" +msgstr "Heiltal skild med komma" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Verdien “%(value)s” har eit ugyldig datoformat. Det må vere på formen YYYY-" +"MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Verdien “%(value)s” har rett format (YYYY-MM-DD) men er ein ugyldig dato." + +msgid "Date (without time)" +msgstr "Dato (utan tid)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Verdien “%(value)s” har eit ugyldig format. Det må vere på formen YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Verdien “%(value)s” har rett format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) men " +"er ein ugyldig dato eller klokkeslett." + +msgid "Date (with time)" +msgstr "Dato (med tid)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Verdien “%(value)s” må vere eit desimaltal." + +msgid "Decimal number" +msgstr "Desimaltal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Verdien “%(value)s” har eit ugyldig format. Det må vere på formen [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Varigskap" + +msgid "Email address" +msgstr "E-postadresse" + +msgid "File path" +msgstr "Filsti" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Verdien “%(value)s” må vere eit flyttal." + +msgid "Floating point number" +msgstr "Flyttal" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Verdien “%(value)s” må vere eit heiltal." + +msgid "Integer" +msgstr "Heiltal" + +msgid "Big (8 byte) integer" +msgstr "Stort (8 bitar) heiltal" + +msgid "Small integer" +msgstr "Lite heiltal" + +msgid "IPv4 address" +msgstr "IPv4-adresse" + +msgid "IP address" +msgstr "IP-adresse" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Verdien “%(value)s” må vere anten None, True, eller False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolsk (True, False eller None)" + +msgid "Positive big integer" +msgstr "Positivt stort heiltal" + +msgid "Positive integer" +msgstr "Positivt heiltal" + +msgid "Positive small integer" +msgstr "Positivt lite heiltal" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (opp til %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Verdien “%(value)s” har eit ugyldig format. Det må vere på formen HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Verdien “%(value)s” har rett format (HH:MM[:ss[.uuuuuu]]), men er eit " +"ugyldig klokkeslett." + +msgid "Time" +msgstr "Tid" + +msgid "URL" +msgstr "Nettadresse" + +msgid "Raw binary data" +msgstr "Rå binærdata" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” er ikkje ein gyldig UUID." + +msgid "Universally unique identifier" +msgstr "Universelt unik identifikator." + +msgid "File" +msgstr "Fil" + +msgid "Image" +msgstr "Bilete" + +msgid "A JSON object" +msgstr "Eit JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Verdi må vere gyldig JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-instans med %(field)s %(value)r eksisterer ikkje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremmednøkkel (type bestemt av relatert felt)" + +msgid "One-to-one relationship" +msgstr "Ein-til-ein-forhold" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-relasjon" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-relasjonar" + +msgid "Many-to-many relationship" +msgstr "Mange-til-mange-forhold" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Feltet er påkravd." + +msgid "Enter a whole number." +msgstr "Oppgje eit heiltal." + +msgid "Enter a valid date." +msgstr "Oppgje ein gyldig dato." + +msgid "Enter a valid time." +msgstr "Oppgje eit gyldig tidspunkt." + +msgid "Enter a valid date/time." +msgstr "Oppgje gyldig dato og tidspunkt." + +msgid "Enter a valid duration." +msgstr "Oppgje ein gyldig varigskap." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Antal dagar må vere mellom {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Inga fil vart sendt. Sjekk \"encoding\"-typen på skjemaet." + +msgid "No file was submitted." +msgstr "Inga fil vart sendt." + +msgid "The submitted file is empty." +msgstr "Fila er tom." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Filnamnet kan ikkje ha fleire enn %(max)d teikn (det har %(length)d)." +msgstr[1] "" +"Filnamnet kan ikkje ha fleire enn %(max)d teikn (det har %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Last enten opp ei fil eller huk av i avkryssingsboksen." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Last opp eit gyldig bilete. Fila du lasta opp var ødelagt eller ikkje eit " +"bilete." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Velg eit gyldig valg. %(value)s er ikkje eit av dei tilgjengelege valga." + +msgid "Enter a list of values." +msgstr "Oppgje ei liste med verdiar." + +msgid "Enter a complete value." +msgstr "Oppgje ein fullstendig verdi." + +msgid "Enter a valid UUID." +msgstr "Oppgje ein gyldig UUID." + +msgid "Enter a valid JSON." +msgstr "Oppgje gyldig JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gøymt felt %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm data manglar eller har blitt tukla med. Felt som manglar: " +"%(field_names)s. Du burde kanskje sende ein feilrapport dersom problemet " +"fortset. " + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Ver vennleg å ikkje sende inn fleire enn %d skjema. " +msgstr[1] "Ver vennleg å ikkje sende inn fleire enn %d skjema. " + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Ver vennleg å sende inn minst %d skjema. " +msgstr[1] "Ver vennleg å sende inn minst %d skjema. " + +msgid "Order" +msgstr "Rekkefølge" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Korriger dupliserte data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Korriger dupliserte data for %(field)s, som må vere unike." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Korriger dupliserte data for %(field_name)s, som må vere unike for " +"%(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korriger dei dupliserte verdiane nedanfor." + +msgid "The inline value did not match the parent instance." +msgstr "Inline verdien stemmer ikkje overeins med forelder-instansen.  " + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Velg eit gyldig valg. Valget er ikkje eit av dei tilgjengelege valga." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” er ikkje ein gyldig verdi." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kunne ikkje bli tolka i tidssona %(current_timezone)s; Verdien " +"er anten tvetydig eller ugyldig." + +msgid "Clear" +msgstr "Tøm" + +msgid "Currently" +msgstr "Noverande" + +msgid "Change" +msgstr "Endre" + +msgid "Unknown" +msgstr "Ukjend" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nei,kanskje" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnatt" + +msgid "noon" +msgstr "12:00" + +msgid "Monday" +msgstr "måndag" + +msgid "Tuesday" +msgstr "tysdag" + +msgid "Wednesday" +msgstr "onsdag" + +msgid "Thursday" +msgstr "torsdag" + +msgid "Friday" +msgstr "fredag" + +msgid "Saturday" +msgstr "laurdag" + +msgid "Sunday" +msgstr "søndag" + +msgid "Mon" +msgstr "man" + +msgid "Tue" +msgstr "tys" + +msgid "Wed" +msgstr "ons" + +msgid "Thu" +msgstr "tor" + +msgid "Fri" +msgstr "fre" + +msgid "Sat" +msgstr "lau" + +msgid "Sun" +msgstr "søn" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mars" + +msgid "apr" +msgstr "april" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "juni" + +msgid "jul" +msgstr "juli" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "april" + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "des." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Desember" + +msgid "This is not a valid IPv6 address." +msgstr "Dette er ikkje ei gyldig IPv6-adresse." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eller" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d månad" +msgstr[1] "%(num)d månader" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d veke" +msgstr[1] "%(num)d veker" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dagar" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timar" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutt" +msgstr[1] "%(num)d minutt" + +msgid "Forbidden" +msgstr "Forbydd" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifikasjon feila. Førespurnad avbrote." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Du ser denne meldinga på grunn av at det ikkje blei sendt nokon \"Referer\" " +"hovud frå din nettlesar, noko denne HTTPS-sida krev. Dette hovudet er eit " +"krav på grunn av sikkerheit, for å hindre at din nettlesar er kapra av " +"tredjepartar. " + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Dersom du har konfigurert nettlesaren din til å deaktiverere \"Referer\"-" +"hovud må du aktivere dei på nytt, i det minste for denne nettsida, eller for " +"HTTPS-tilkoplingar eller for førespurnadar av same opphav. " + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Dersom du brukar -taggen " +"eller inkludera \"Referrer-Policy: no-referrer\" hovud, ver vennleg å fjerne " +"dei. CSRF-vern krev \"Referer\" hovud for å gjennomføre strenge kontrollar " +"av referer. Dersom du har bekymringar for personvern bruk alternativ som for lenkjer til tredepartssider" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Du ser denne meldinga fordi denne nettsida krev ein CSRF informasjonskapsel " +"når du sender inn skjema. Denne informasjonskapselen er eit krav på grunn av " +"sikkerheit, for å forsikre at nettlesaren din ikkje er kapra av " +"tredjepartar. " + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Dersom du har konfigurert nettlesaren din til å deaktivere " +"informasjonskapslar, ver vennleg å aktiver dei på nytt, i det minste for " +"denne nettsida, eller for førespurnader av same opphav. " + +msgid "More information is available with DEBUG=True." +msgstr "Meir informasjon er tilgjengeleg med DEBUG=True." + +msgid "No year specified" +msgstr "Årstal ikkje spesifisert" + +msgid "Date out of range" +msgstr "Dato er utanfor rekkjevidde" + +msgid "No month specified" +msgstr "Månad ikkje spesifisert" + +msgid "No day specified" +msgstr "Dag ikkje spesifisert" + +msgid "No week specified" +msgstr "Veke ikkje spesifisert" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s tilgjengeleg" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Framtidig %(verbose_name_plural)s er ikkje tilgjengeleg fordi %(class_name)s." +"allow_future er sett til False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ugyldig datostreng \"%(datestr)s\" grunna format \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Fann ingen %(verbose_name)s som korresponderte med spørringa" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Sida er ikkje \"last\" og den kan heller ikkje konverterast til eit heiltal. " + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ugyldig side (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Tom liste og \"%(class_name)s.allow_empty\" er False." + +msgid "Directory indexes are not allowed here." +msgstr "Mappeindeksar er ikkje tillate her." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" eksisterer ikkje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks for %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installasjonen var vellykka! Gratulerer!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Sjå utgjevingsnotat for Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Du ser denne sida fordi DEBUG=True er i innstillingsfila di og du ikkje har konfigurert noka " +"nettadresser." + +msgid "Django Documentation" +msgstr "Django-dokumentasjon" + +msgid "Topics, references, & how-to’s" +msgstr "Tema, referansar, & how-tos" + +msgid "Tutorial: A Polling App" +msgstr "Opplæring: Ein avstemmingsapp" + +msgid "Get started with Django" +msgstr "Kom i gang med Django" + +msgid "Django Community" +msgstr "Django Nettsamfunn" + +msgid "Connect, get help, or contribute" +msgstr "Koble, få hjelp, eller bidra" diff --git a/venv/Lib/site-packages/django/conf/locale/nn/__init__.py b/venv/Lib/site-packages/django/conf/locale/nn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/nn/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nn/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c590fb46f0bb6ed787cf3c02d01879692cf23e GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lUY>q@d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04okO-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nn/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/nn/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..062fc7a18a7e0e556ce1a2011092451c009cb069 GIT binary patch literal 795 zcmZXS%Wj)M6o$cogH4>oQQJjV-mtJ#$%MyLpTu!UZ^gpdwiiPKmrhu z1SD*L2BZK5X+T2;Ft7=l@C=+S2*`dT0gH1B=N4>(Hsk;Y&%rtD*hK%LY%YbK((_76 z9mQpPCwf&)Rg|tk$v`0yyt1`TRr7(wH}6v=%X#a>QCa$xeXMXP=1!K!} zCz>(-PUH-J^=){JZbrU~q8$0w8lljave`O`(gOM8xKP(qUx{;63?_NDjAn&@AEo#H zZ9Mf+TttJraP}o!M97EBFkNKBS(eU+t85moqG6g2=UJYF1rqKyKiRiQ2G^_TUG+nu T*ErBLP1ZNdupG_NBuoAS-gV3x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/nn/formats.py b/venv/Lib/site-packages/django/conf/locale/nn/formats.py new file mode 100644 index 000000000..0ddb8fef6 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/nn/formats.py @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-10-25' + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + # "%d. %b %Y", # '25. okt 2006' + # "%d %b %Y", # '25 okt 2006' + # "%d. %b. %Y", # '25. okt. 2006' + # "%d %b. %Y", # '25 okt. 2006' + # "%d. %B %Y", # '25. oktober 2006' + # "%d %B %Y", # '25 oktober 2006' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59' + "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200' + "%Y-%m-%d %H:%M", # '2006-10-25 14:30' + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b17907efa70fd70adbe6bfe55bc996928fc02dee GIT binary patch literal 17994 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..f3badb7c3 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,1235 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Африкаанс" + +msgid "Arabic" +msgstr "Араббаг" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Тӕтӕйраг" + +msgid "Bulgarian" +msgstr "Болгайраг" + +msgid "Belarusian" +msgstr "Беларусаг" + +msgid "Bengali" +msgstr "Бенгалаг" + +msgid "Breton" +msgstr "Бретойнаг" + +msgid "Bosnian" +msgstr "Босниаг" + +msgid "Catalan" +msgstr "Каталайнаг" + +msgid "Czech" +msgstr "Чехаг" + +msgid "Welsh" +msgstr "Уельсаг" + +msgid "Danish" +msgstr "Даниаг" + +msgid "German" +msgstr "Немыцаг" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грекъаг" + +msgid "English" +msgstr "Англисаг" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Бритайнаг англисаг" + +msgid "Esperanto" +msgstr "Есперанто" + +msgid "Spanish" +msgstr "Испайнаг" + +msgid "Argentinian Spanish" +msgstr "Аргентинаг испайнаг" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикайнаг Испайнаг" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуайаг испайнаг" + +msgid "Venezuelan Spanish" +msgstr "Венесуелаг испайнаг" + +msgid "Estonian" +msgstr "Эстойнаг" + +msgid "Basque" +msgstr "Баскаг" + +msgid "Persian" +msgstr "Персайнаг" + +msgid "Finnish" +msgstr "Финнаг" + +msgid "French" +msgstr "Францаг" + +msgid "Frisian" +msgstr "Фризаг" + +msgid "Irish" +msgstr "Ирландиаг" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галициаг" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорватаг" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгриаг" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонезиаг" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исландаг" + +msgid "Italian" +msgstr "Италиаг" + +msgid "Japanese" +msgstr "Япойнаг" + +msgid "Georgian" +msgstr "Гуырдзиаг" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Казахаг" + +msgid "Khmer" +msgstr "Хмераг" + +msgid "Kannada" +msgstr "Каннадаг" + +msgid "Korean" +msgstr "Корейаг" + +msgid "Luxembourgish" +msgstr "Люксембургаг" + +msgid "Lithuanian" +msgstr "Литвайаг" + +msgid "Latvian" +msgstr "Латвийаг" + +msgid "Macedonian" +msgstr "Мӕчъидон" + +msgid "Malayalam" +msgstr "Малайаг" + +msgid "Mongolian" +msgstr "Монголиаг" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Бурмизаг" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Непалаг" + +msgid "Dutch" +msgstr "Нидерландаг" + +msgid "Norwegian Nynorsk" +msgstr "Норвегийаг Нинорск" + +msgid "Ossetic" +msgstr "Ирон" + +msgid "Punjabi" +msgstr "Пенджабаг" + +msgid "Polish" +msgstr "Полаг" + +msgid "Portuguese" +msgstr "Португалаг" + +msgid "Brazilian Portuguese" +msgstr "Бразилаг португалаг" + +msgid "Romanian" +msgstr "Румынаг" + +msgid "Russian" +msgstr "Уырыссаг" + +msgid "Slovak" +msgstr "Словакиаг" + +msgid "Slovenian" +msgstr "Словенаг" + +msgid "Albanian" +msgstr "Албайнаг" + +msgid "Serbian" +msgstr "Сербаг" + +msgid "Serbian Latin" +msgstr "Латинаг Сербаг" + +msgid "Swedish" +msgstr "Шведаг" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамилаг" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тайаг" + +msgid "Turkish" +msgstr "Туркаг" + +msgid "Tatar" +msgstr "Тӕтӕйраг" + +msgid "Udmurt" +msgstr "Удмуртаг" + +msgid "Ukrainian" +msgstr "Украинаг" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Вьетнамаг" + +msgid "Simplified Chinese" +msgstr "Ӕнцонгонд Китайаг" + +msgid "Traditional Chinese" +msgstr "Традицион Китайаг" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Раст бӕрц бафысс." + +msgid "Enter a valid URL." +msgstr "Раст URL бафысс." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Раст email адрис бафысс." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Раст IPv4 адрис бафысс." + +msgid "Enter a valid IPv6 address." +msgstr "Раст IPv6 адрис бафысс." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Раст IPv4 кӕнӕ IPv6 адрис бафысс." + +msgid "Enter only digits separated by commas." +msgstr "Бафысс ӕрмӕст нымӕцтӕ, къӕдзгуытӕй дихгонд." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s (у %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s, кӕнӕ цъусдӕр." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s, кӕнӕ цъусдӕр." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕ уӕддӕр уа (ис дзы " +"%(show_value)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйы уӕддӕр уа (ис дзы " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйӕ фылдӕр ма уа (ис дзы " +"%(show_value)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйӕ фылдӕр ма уа (ис дзы " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Бафысс нымӕц." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Дӕ хъус бадар цӕмӕй иууыл иумӕ %(max)s цифрӕйӕ фылдӕр уой." +msgstr[1] "Дӕ хъус бадар цӕмӕй иууыл иумӕ %(max)s цифрӕйӕ фылдӕр уой." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Дӕ хъус бадар цӕмӕй дӕсон бынӕттӕ %(max)s-ӕй фылдӕр ма уой." +msgstr[1] "Дӕ хъус бадар цӕмӕй дӕсон бынӕттӕ %(max)s-ӕй фылдӕр ма уой." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй дӕсон стъӕлфы размӕ %(max)s цифрӕйӕ фылдӕр ма уа." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй дӕсон стъӕлфы размӕ %(max)s цифрӕйӕ фылдӕр ма уа." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ӕмӕ" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ацы быдыр нул ма хъуамӕ уа." + +msgid "This field cannot be blank." +msgstr "Ацы быдыр афтид ма хъуамӕ уа." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s ацы %(field_label)s-имӕ нырид ис." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Быдыры хуыз: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Булон (Бӕлвырд кӕнӕ Мӕнг)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Рӕнхъ (%(max_length)s-ы йонг)" + +msgid "Comma-separated integers" +msgstr "Къӕдзыгӕй хицӕнгонд ӕгас нымӕцтӕ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Бон (ӕнӕ рӕстӕг)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Бон (ӕд рӕстӕг)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Дӕсон нымӕц" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Электрон посты адрис" + +msgid "File path" +msgstr "Файлы фӕт" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Уӕгъд стъӕлфимӕ нымӕц" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Ӕгас нымӕц" + +msgid "Big (8 byte) integer" +msgstr "Стыр (8 байты) ӕгас нымӕц" + +msgid "IPv4 address" +msgstr "IPv4 адрис" + +msgid "IP address" +msgstr "IP адрис" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Булон (Бӕлвырд, Мӕнг кӕнӕ Ницы)" + +msgid "Positive integer" +msgstr "Позитивон ӕгас нымӕц" + +msgid "Positive small integer" +msgstr "Позитивон гыццыл ӕгас нымӕц" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (ӕппӕты фылдӕр %(max_length)s)" + +msgid "Small integer" +msgstr "Гыццыл ӕгас нымӕц" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Рӕстӕг" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Хом бинарон рардтӕ" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Ныв" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Ӕттагон Амонӕн (хӕстӕг быдырӕй бӕрӕггонд хуыз)" + +msgid "One-to-one relationship" +msgstr "Иуӕн-иу бастдзинад" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Бирӕйӕн-бирӕ бастдзинад" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ацы быдыр ӕнӕмӕнг у." + +msgid "Enter a whole number." +msgstr "Бафысс ӕнӕхъӕн нымӕц." + +msgid "Enter a valid date." +msgstr "Раст бон бафысс." + +msgid "Enter a valid time." +msgstr "Раст рӕстӕг бафысс." + +msgid "Enter a valid date/time." +msgstr "Раст бон/рӕстӕг бафысс." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ницы файл уыд лӕвӕрд. Абӕрӕг кӕн формӕйы кодкӕнынады хуыз." + +msgid "No file was submitted." +msgstr "Ницы файл уыд лӕвӕрд." + +msgid "The submitted file is empty." +msgstr "Лӕвӕрд файл афтид у." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ацы файлы номы %(max)d дамгъӕйӕ фылдӕр ма уа(ис дзы " +"%(length)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ацы файлы номы %(max)d дамгъӕйӕ фылдӕр ма уа(ис дзы " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Дӕ хорзӕхӕй, кӕнӕ бадӕтт файл, кӕнӕ банысан кӕн сыгъдӕг чекбокс. Дыууӕ иумӕ " +"нӕ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Раст ныв бавгӕн. Ды цы файл бавгӕдтай, уый кӕнӕ ныв нӕ уыд, кӕнӕ хӕлд ныв " +"уыд." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Раст фадат равзар. %(value)s фадӕтты ӕхсӕн нӕй." + +msgid "Enter a list of values." +msgstr "Бафысс мидисты номхыгъд." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Ӕмбӕхст быдыр %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Рад" + +msgid "Delete" +msgstr "Схафын" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Дӕ хорзӕхӕй, %(field)s-ы дывӕр рардтӕ сраст кӕн." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Дӕ хорзӕхӕй, %(field)s-ы дывӕр рардтӕ сраст кӕн. Хъуамӕ уникалон уа." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Дӕ хорзӕхӕй, %(field_name)s-ы дывӕр рардтӕ сраст кӕн. Хъуамӕ %(date_field)s-" +"ы %(lookup)s-ӕн уникалон уа. " + +msgid "Please correct the duplicate values below." +msgstr "Дӕ хорзӕхӕй, бындӕр цы дывӕр рардтӕ ис, уыдон сраст кӕн." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Раст фадат равзар. УКыцы фадат фадӕтты ӕхсӕн нӕй." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Сыгъдӕг" + +msgid "Currently" +msgstr "Ныр" + +msgid "Change" +msgstr "Фӕивын" + +msgid "Unknown" +msgstr "Ӕнӕбӕрӕг" + +msgid "Yes" +msgstr "О" + +msgid "No" +msgstr "Нӕ" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "о,нӕ,гӕнӕн ис" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байты" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "ӕ.ф." + +msgid "a.m." +msgstr "ӕ.р." + +msgid "PM" +msgstr "ӔФ" + +msgid "AM" +msgstr "ӔР" + +msgid "midnight" +msgstr "ӕмбисӕхсӕв" + +msgid "noon" +msgstr "ӕмбисбон" + +msgid "Monday" +msgstr "Къуырисӕр" + +msgid "Tuesday" +msgstr "Дыццӕг" + +msgid "Wednesday" +msgstr "Ӕртыццӕг" + +msgid "Thursday" +msgstr "Цыппӕрӕм" + +msgid "Friday" +msgstr "Майрӕмбон" + +msgid "Saturday" +msgstr "Сабат" + +msgid "Sunday" +msgstr "Хуыцаубон" + +msgid "Mon" +msgstr "Крс" + +msgid "Tue" +msgstr "Дцг" + +msgid "Wed" +msgstr "Ӕрт" + +msgid "Thu" +msgstr "Цпр" + +msgid "Fri" +msgstr "Мрб" + +msgid "Sat" +msgstr "Сбт" + +msgid "Sun" +msgstr "Хцб" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Мартъи" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Мартъи" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "Январь" + +msgctxt "alt. month" +msgid "February" +msgstr "Февраль" + +msgctxt "alt. month" +msgid "March" +msgstr "Мартъи" + +msgctxt "alt. month" +msgid "April" +msgstr "Апрель" + +msgctxt "alt. month" +msgid "May" +msgstr "Май" + +msgctxt "alt. month" +msgid "June" +msgstr "Июнь" + +msgctxt "alt. month" +msgid "July" +msgstr "Июль" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Сентябрь" + +msgctxt "alt. month" +msgid "October" +msgstr "Октябрь" + +msgctxt "alt. month" +msgid "November" +msgstr "Ноябрь" + +msgctxt "alt. month" +msgid "December" +msgstr "Декабрь" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "кӕнӕ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d аз" +msgstr[1] "%d азы" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d мӕй" +msgstr[1] "%d мӕйы" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d къуыри" +msgstr[1] "%d къуырийы" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d бон" +msgstr[1] "%d боны" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сахат" +msgstr[1] "%d сахаты" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минуты" + +msgid "0 minutes" +msgstr "0 минуты" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Аз амынд нӕ уыд" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Мӕй амынд нӕ уыд" + +msgid "No day specified" +msgstr "Бон амынд нӕ уыд" + +msgid "No week specified" +msgstr "Къуыри амынд нӕ уыд" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ницы %(verbose_name_plural)s ис" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Фидӕн %(verbose_name_plural)s-мӕ бавналӕн нӕй, уымӕн ӕмӕ %(class_name)s." +"allow_future Мӕнг у." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Домӕнӕн ницы %(verbose_name)s ӕмбӕлы" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Мӕнг фарс (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Ам директориты индекстӕ нӕй гӕнӕн." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-ы индекс" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a8fa88b4edae2b660b2ccf5d1c5c893083a0d026 GIT binary patch literal 11253 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 B%@P0r literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..d71b5f7b0 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,1213 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2011,2013,2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "ਅਫਰੀਕੀ" + +msgid "Arabic" +msgstr "ਅਰਬੀ" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "ਅਜ਼ਰਬਾਈਜਾਨੀ" + +msgid "Bulgarian" +msgstr "ਬੁਲਗਾਰੀਆਈ" + +msgid "Belarusian" +msgstr "ਬੇਲਾਰੂਸੀ" + +msgid "Bengali" +msgstr "ਬੰਗਾਲੀ" + +msgid "Breton" +msgstr "ਬਰੇਟੋਨ" + +msgid "Bosnian" +msgstr "ਬੋਸਨੀਆਈ" + +msgid "Catalan" +msgstr "ਕਾਟਾਲਾਨ" + +msgid "Czech" +msgstr "ਚੈੱਕ" + +msgid "Welsh" +msgstr "ਵੈਲਸ਼" + +msgid "Danish" +msgstr "ਡੈਨਿਸ਼" + +msgid "German" +msgstr "ਜਰਮਨ" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ਗਰੀਕ" + +msgid "English" +msgstr "ਅੰਗਰੇਜ਼ੀ" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ਬਰਤਾਨੀਵੀਂ ਅੰਗਰੇਜ਼ੀ" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ਸਪੇਨੀ" + +msgid "Argentinian Spanish" +msgstr "ਅਰਜਨਟੀਨੀ ਸਪੇਨੀ" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "ਮੈਕਸੀਕਨ ਸਪੇਨੀ" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "ਈਸਟੋਨੀਆਈ" + +msgid "Basque" +msgstr "ਬਸਕਿਊ" + +msgid "Persian" +msgstr "ਪਰਸ਼ੀਆਈ" + +msgid "Finnish" +msgstr "ਫੈਨਿਸ਼" + +msgid "French" +msgstr "ਫਰੈਂਚ" + +msgid "Frisian" +msgstr "ਫ਼ਾਰਸੀ" + +msgid "Irish" +msgstr "ਆਈਰਸ਼" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "ਗਲੀਸੀਆਈ" + +msgid "Hebrew" +msgstr "ਹੈਬਰਿਊ" + +msgid "Hindi" +msgstr "ਹਿੰਦੀ" + +msgid "Croatian" +msgstr "ਕਰੋਆਟੀਆਈ" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ਹੰਗਰੀਆਈ" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "ਇੰਡੋਨੇਸ਼ੀਆਈ" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ਆਈਸਲੈਂਡਿਕ" + +msgid "Italian" +msgstr "ਇਤਾਲਵੀ" + +msgid "Japanese" +msgstr "ਜਾਪਾਨੀ" + +msgid "Georgian" +msgstr "ਜਾਰਜੀਆਈ" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "ਕਜ਼ਾਖ" + +msgid "Khmer" +msgstr "ਖਮੀਰ" + +msgid "Kannada" +msgstr "ਕੰਨੜ" + +msgid "Korean" +msgstr "ਕੋਰੀਆਈ" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "ਲੀਥੁਨੀਆਈ" + +msgid "Latvian" +msgstr "ਲਾਟਵੀਅਨ" + +msgid "Macedonian" +msgstr "ਮੈਕਡੋਨੀਆਈ" + +msgid "Malayalam" +msgstr "ਮਲਿਆਲਮ" + +msgid "Mongolian" +msgstr "ਮੰਗੋਲੀਆਈ" + +msgid "Marathi" +msgstr "ਮਰਾਠੀ" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "ਨੇਪਾਲੀ" + +msgid "Dutch" +msgstr "ਡੱਚ" + +msgid "Norwegian Nynorsk" +msgstr "ਨਾਰਵੇਗੀਅਨ ਨਯਨੋਰਸਕ" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "ਪੰਜਾਬੀ" + +msgid "Polish" +msgstr "ਪੋਲੈਂਡੀ" + +msgid "Portuguese" +msgstr "ਪੁਰਤਗਾਲੀ" + +msgid "Brazilian Portuguese" +msgstr "ਬਰਾਜ਼ੀਲੀ ਪੁਰਤਗਾਲੀ" + +msgid "Romanian" +msgstr "ਰੋਮਾਨੀਆਈ" + +msgid "Russian" +msgstr "ਰੂਸੀ" + +msgid "Slovak" +msgstr "ਸਲੋਵਾਕ" + +msgid "Slovenian" +msgstr "ਸਲੋਵੀਨੀਆਈ" + +msgid "Albanian" +msgstr "ਅਲਬੀਨੀਆਈ" + +msgid "Serbian" +msgstr "ਸਰਬੀਆਈ" + +msgid "Serbian Latin" +msgstr "ਸਰਬੀਆਈ ਲੈਟਿਨ" + +msgid "Swedish" +msgstr "ਸਵੀਡਨੀ" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "ਤਾਮਿਲ" + +msgid "Telugu" +msgstr "ਤੇਲਗੂ" + +msgid "Thai" +msgstr "ਥਾਈ" + +msgid "Turkish" +msgstr "ਤੁਰਕ" + +msgid "Tatar" +msgstr "ਤਤਾਰ" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ਯੂਕਰੇਨੀ" + +msgid "Urdu" +msgstr "ਉਰਦੂ" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "ਵੀਅਤਨਾਮੀ" + +msgid "Simplified Chinese" +msgstr "ਸਧਾਰਨ ਚੀਨੀ" + +msgid "Traditional Chinese" +msgstr "ਮੂਲ ਚੀਨੀ" + +msgid "Messages" +msgstr "ਸੁਨੇਹੇ" + +msgid "Site Maps" +msgstr "ਸਾਈਟ ਖਾਕੇ" + +msgid "Static Files" +msgstr "ਸਥਿਰ ਫਾਈਲਾਂ" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "ਠੀਕ ਮੁੱਲ ਦਿਓ" + +msgid "Enter a valid URL." +msgstr "ਠੀਕ URL ਦਿਉ।" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "ਢੁੱਕਵਾਂ ਈਮੇਲ ਸਿਰਨਾਵਾਂ ਦਿਉ ਜੀ।" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "ਨੰਬਰ ਦਿਓ।" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ਅਤੇ" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "ਇਹ ਖੇਤਰ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ਖੇਤਰ ਦੀ ਕਿਸਮ: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "ਮਿਤੀ (ਬਿਨਾਂ ਸਮਾਂ)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "ਮਿਤੀ (ਸਮੇਂ ਨਾਲ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ਦਸ਼ਮਲਵ ਅੰਕ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "ਅੰਤਰਾਲ" + +msgid "Email address" +msgstr "ਈਮੇਲ ਐਡਰੈੱਸ" + +msgid "File path" +msgstr "ਫਾਇਲ ਪਾਥ" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "ਅੰਕ" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "IPv4 ਸਿਰਨਾਵਾਂ" + +msgid "IP address" +msgstr "IP ਐਡਰੈੱਸ" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "ਟੈਕਸਟ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "ਸਮਾਂ" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "ਫਾਇਲ" + +msgid "Image" +msgstr "ਚਿੱਤਰ" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "ਇੱਕ-ਤੋਂ-ਇੱਕ ਸਬੰਧ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ਕਈ-ਤੋਂ-ਕਈ ਸਬੰਧ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ਇਹ ਖੇਤਰ ਲਾਜ਼ਮੀ ਹੈ।" + +msgid "Enter a whole number." +msgstr "ਪੂਰਨ ਨੰਬਰ ਦਿਉ।" + +msgid "Enter a valid date." +msgstr "ਠੀਕ ਮਿਤੀ ਦਿਓ।" + +msgid "Enter a valid time." +msgstr "ਠੀਕ ਸਮਾਂ ਦਿਓ।" + +msgid "Enter a valid date/time." +msgstr "ਠੀਕ ਮਿਤੀ/ਸਮਾਂ ਦਿਓ।" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "ਕੋਈ ਫਾਇਲ ਨਹੀਂ ਭੇਜੀ।" + +msgid "The submitted file is empty." +msgstr "ਦਿੱਤੀ ਫਾਇਲ ਖਾਲੀ ਹੈ।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "ਮੁੱਲ ਦੀ ਲਿਸਟ ਦਿਓ।" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ਲੜੀ" + +msgid "Delete" +msgstr "ਹਟਾਓ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "ਸਾਫ਼ ਕਰੋ" + +msgid "Currently" +msgstr "ਮੌਜੂਦਾ" + +msgid "Change" +msgstr "ਬਦਲੋ" + +msgid "Unknown" +msgstr "ਅਣਜਾਣ" + +msgid "Yes" +msgstr "ਹਾਂ" + +msgid "No" +msgstr "ਨਹੀਂ" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "ਹਾਂ,ਨਹੀਂ,ਸ਼ਾਇਦ" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ਬਾਈਟ" +msgstr[1] "%(size)d ਬਾਈਟ" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "ਸ਼ਾਮ" + +msgid "AM" +msgstr "ਸਵੇਰ" + +msgid "midnight" +msgstr "ਅੱਧੀ-ਰਾਤ" + +msgid "noon" +msgstr "ਨੂਨ" + +msgid "Monday" +msgstr "ਸੋਮਵਾਰ" + +msgid "Tuesday" +msgstr "ਮੰਗਲਵਾਰ" + +msgid "Wednesday" +msgstr "ਬੁੱਧਵਾਰ" + +msgid "Thursday" +msgstr "ਵੀਰਵਾਰ" + +msgid "Friday" +msgstr "ਸ਼ੁੱਕਰਵਾਰ" + +msgid "Saturday" +msgstr "ਸ਼ਨਿੱਚਰਵਾਰ" + +msgid "Sunday" +msgstr "ਐਤਵਾਰ" + +msgid "Mon" +msgstr "ਸੋਮ" + +msgid "Tue" +msgstr "ਮੰਗ" + +msgid "Wed" +msgstr "ਬੁੱਧ" + +msgid "Thu" +msgstr "ਵੀਰ" + +msgid "Fri" +msgstr "ਸ਼ੁੱਕ" + +msgid "Sat" +msgstr "ਸ਼ਨਿੱ" + +msgid "Sun" +msgstr "ਐਤ" + +msgid "January" +msgstr "ਜਨਵਰੀ" + +msgid "February" +msgstr "ਫਰਵਰੀ" + +msgid "March" +msgstr "ਮਾਰਚ" + +msgid "April" +msgstr "ਅਪਰੈਲ" + +msgid "May" +msgstr "ਮਈ" + +msgid "June" +msgstr "ਜੂਨ" + +msgid "July" +msgstr "ਜੁਲਾਈ" + +msgid "August" +msgstr "ਅਗਸਤ" + +msgid "September" +msgstr "ਸਤੰਬਰ" + +msgid "October" +msgstr "ਅਕਤੂਬਰ" + +msgid "November" +msgstr "ਨਵੰਬਰ" + +msgid "December" +msgstr "ਦਸੰਬਰ" + +msgid "jan" +msgstr "ਜਨ" + +msgid "feb" +msgstr "ਫਰ" + +msgid "mar" +msgstr "ਮਾਰ" + +msgid "apr" +msgstr "ਅਪ" + +msgid "may" +msgstr "ਮਈ" + +msgid "jun" +msgstr "ਜੂਨ" + +msgid "jul" +msgstr "ਜੁਲ" + +msgid "aug" +msgstr "ਅਗ" + +msgid "sep" +msgstr "ਸਤੰ" + +msgid "oct" +msgstr "ਅਕ" + +msgid "nov" +msgstr "ਨਵੰ" + +msgid "dec" +msgstr "ਦਸੰ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ਜਨ" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ਫਰ" + +msgctxt "abbrev. month" +msgid "March" +msgstr "ਮਾਰ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ਅਪ" + +msgctxt "abbrev. month" +msgid "May" +msgstr "ਮਈ" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ਜੂਨ" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ਜੁਲ" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ਅਗ" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ਸਤੰ" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ਅਕਤੂ" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "ਨਵੰ" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ਦਸੰ" + +msgctxt "alt. month" +msgid "January" +msgstr "ਜਨਵਰੀ" + +msgctxt "alt. month" +msgid "February" +msgstr "ਫਰਵਰੀ" + +msgctxt "alt. month" +msgid "March" +msgstr "ਮਾਰਚ" + +msgctxt "alt. month" +msgid "April" +msgstr "ਅਪਰੈਲ" + +msgctxt "alt. month" +msgid "May" +msgstr "ਮਈ" + +msgctxt "alt. month" +msgid "June" +msgstr "ਜੂਨ" + +msgctxt "alt. month" +msgid "July" +msgstr "ਜੁਲਾਈ" + +msgctxt "alt. month" +msgid "August" +msgstr "ਅਗਸਤ" + +msgctxt "alt. month" +msgid "September" +msgstr "ਸਤੰਬਰ" + +msgctxt "alt. month" +msgid "October" +msgstr "ਅਕਤੂਬਰ" + +msgctxt "alt. month" +msgid "November" +msgstr "ਨਵੰਬਰ" + +msgctxt "alt. month" +msgid "December" +msgstr "ਦਸੰਬਰ" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ਜਾਂ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ਸਾਲ" +msgstr[1] "%d ਸਾਲ" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ਮਹੀਨਾ" +msgstr[1] "%d ਮਹੀਨੇ" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d ਹਫ਼ਤਾ" +msgstr[1] "%d ਹਫ਼ਤੇ" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ਦਿਨ" +msgstr[1] "%d ਦਿਨ" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ਘੰਟਾ" +msgstr[1] "%d ਘੰਟੇ" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d ਮਿੰਟ" +msgstr[1] "%d ਮਿੰਟ" + +msgid "0 minutes" +msgstr "0 ਮਿੰਟ" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "ਕੋਈ ਸਾਲ ਨਹੀਂ ਦਿੱਤਾ" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "ਕੋਈ ਮਹੀਨਾ ਨਹੀਂ ਦਿੱਤਾ" + +msgid "No day specified" +msgstr "ਕੋਈ ਦਿਨ ਨਹੀਂ ਦਿੱਤਾ" + +msgid "No week specified" +msgstr "ਕੋਈ ਹਫ਼ਤਾ ਨਹੀਂ ਦਿੱਤਾ" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s ਦਾ ਇੰਡੈਕਸ" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d574324613253171fb7c4a1a94941a85401d188 GIT binary patch literal 29785 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..fba6dfbbc --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,1383 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# sidewinder , 2014 +# Adam Stachowicz , 2015 +# angularcircle, 2011,2013 +# angularcircle, 2011,2013 +# angularcircle, 2014 +# Dariusz Paluch , 2015 +# Jannis Leidel , 2011 +# Janusz Harkot , 2014-2015 +# Kacper Krupa , 2013 +# Karol , 2012 +# 0d5641585fd67fbdb97037c19ab83e4c_18c98b0 , 2011 +# 0d5641585fd67fbdb97037c19ab83e4c_18c98b0 , 2011 +# Łukasz Rekucki (lqc) , 2011 +# m_aciek , 2016-2021 +# m_aciek , 2015 +# Mariusz Felisiak , 2020-2021 +# Michał Pasternak , 2013 +# c10516f0462e552b4c3672569f0745a7_cc5cca2 <841826256cd8f47d0e443806a8e56601_19204>, 2012 +# Piotr Meuś , 2014 +# c10516f0462e552b4c3672569f0745a7_cc5cca2 <841826256cd8f47d0e443806a8e56601_19204>, 2012 +# Quadric , 2014 +# Radek Czajka , 2013 +# Radek Czajka , 2013 +# Roman Barczyński, 2012 +# sidewinder , 2014 +# Tomasz Kajtoch , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 23:25+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "afrykanerski" + +msgid "Arabic" +msgstr "arabski" + +msgid "Algerian Arabic" +msgstr "algierski arabski" + +msgid "Asturian" +msgstr "asturyjski" + +msgid "Azerbaijani" +msgstr "azerski" + +msgid "Bulgarian" +msgstr "bułgarski" + +msgid "Belarusian" +msgstr "białoruski" + +msgid "Bengali" +msgstr "bengalski" + +msgid "Breton" +msgstr "bretoński" + +msgid "Bosnian" +msgstr "bośniacki" + +msgid "Catalan" +msgstr "kataloński" + +msgid "Czech" +msgstr "czeski" + +msgid "Welsh" +msgstr "walijski" + +msgid "Danish" +msgstr "duński" + +msgid "German" +msgstr "niemiecki" + +msgid "Lower Sorbian" +msgstr "dolnołużycki" + +msgid "Greek" +msgstr "grecki" + +msgid "English" +msgstr "angielski" + +msgid "Australian English" +msgstr "australijski angielski" + +msgid "British English" +msgstr "brytyjski angielski" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "hiszpański" + +msgid "Argentinian Spanish" +msgstr "hiszpański argentyński" + +msgid "Colombian Spanish" +msgstr "hiszpański kolumbijski" + +msgid "Mexican Spanish" +msgstr "hiszpański meksykański" + +msgid "Nicaraguan Spanish" +msgstr "hiszpański nikaraguański" + +msgid "Venezuelan Spanish" +msgstr "hiszpański wenezuelski" + +msgid "Estonian" +msgstr "estoński" + +msgid "Basque" +msgstr "baskijski" + +msgid "Persian" +msgstr "perski" + +msgid "Finnish" +msgstr "fiński" + +msgid "French" +msgstr "francuski" + +msgid "Frisian" +msgstr "fryzyjski" + +msgid "Irish" +msgstr "irlandzki" + +msgid "Scottish Gaelic" +msgstr "Szkocki gaelicki" + +msgid "Galician" +msgstr "galicyjski" + +msgid "Hebrew" +msgstr "hebrajski" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "chorwacki" + +msgid "Upper Sorbian" +msgstr "górnołużycki" + +msgid "Hungarian" +msgstr "węgierski" + +msgid "Armenian" +msgstr "ormiański" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonezyjski" + +msgid "Igbo" +msgstr "igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandzki" + +msgid "Italian" +msgstr "włoski" + +msgid "Japanese" +msgstr "japoński" + +msgid "Georgian" +msgstr "gruziński" + +msgid "Kabyle" +msgstr "kabylski" + +msgid "Kazakh" +msgstr "kazachski" + +msgid "Khmer" +msgstr "khmerski" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "koreański" + +msgid "Kyrgyz" +msgstr "kirgiski" + +msgid "Luxembourgish" +msgstr "luksemburski" + +msgid "Lithuanian" +msgstr "litewski" + +msgid "Latvian" +msgstr "łotewski" + +msgid "Macedonian" +msgstr "macedoński" + +msgid "Malayalam" +msgstr "malajski" + +msgid "Mongolian" +msgstr "mongolski" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "malajski" + +msgid "Burmese" +msgstr "birmański" + +msgid "Norwegian Bokmål" +msgstr "norweski (bokmål)" + +msgid "Nepali" +msgstr "nepalski" + +msgid "Dutch" +msgstr "holenderski" + +msgid "Norwegian Nynorsk" +msgstr "norweski (nynorsk)" + +msgid "Ossetic" +msgstr "osetyjski" + +msgid "Punjabi" +msgstr "pendżabski" + +msgid "Polish" +msgstr "polski" + +msgid "Portuguese" +msgstr "portugalski" + +msgid "Brazilian Portuguese" +msgstr "portugalski brazylijski" + +msgid "Romanian" +msgstr "rumuński" + +msgid "Russian" +msgstr "rosyjski" + +msgid "Slovak" +msgstr "słowacki" + +msgid "Slovenian" +msgstr "słoweński" + +msgid "Albanian" +msgstr "albański" + +msgid "Serbian" +msgstr "serbski" + +msgid "Serbian Latin" +msgstr "serbski (łaciński)" + +msgid "Swedish" +msgstr "szwedzki" + +msgid "Swahili" +msgstr "suahili" + +msgid "Tamil" +msgstr "tamilski" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "tadżycki" + +msgid "Thai" +msgstr "tajski" + +msgid "Turkmen" +msgstr "turkmeński" + +msgid "Turkish" +msgstr "turecki" + +msgid "Tatar" +msgstr "tatarski" + +msgid "Udmurt" +msgstr "udmurcki" + +msgid "Ukrainian" +msgstr "ukraiński" + +msgid "Urdu" +msgstr "urdu" + +msgid "Uzbek" +msgstr "uzbecki" + +msgid "Vietnamese" +msgstr "wietnamski" + +msgid "Simplified Chinese" +msgstr "chiński uproszczony" + +msgid "Traditional Chinese" +msgstr "chiński tradycyjny" + +msgid "Messages" +msgstr "Wiadomości" + +msgid "Site Maps" +msgstr "Mapy stron" + +msgid "Static Files" +msgstr "Pliki statyczne" + +msgid "Syndication" +msgstr "Syndykacja treści" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Ten numer strony nie jest liczbą całkowitą" + +msgid "That page number is less than 1" +msgstr "Ten numer strony jest mniejszy niż 1" + +msgid "That page contains no results" +msgstr "Ta strona nie zawiera wyników" + +msgid "Enter a valid value." +msgstr "Wpisz poprawną wartość." + +msgid "Enter a valid URL." +msgstr "Wpisz poprawny URL." + +msgid "Enter a valid integer." +msgstr "Wprowadź poprawną liczbę całkowitą." + +msgid "Enter a valid email address." +msgstr "Wprowadź poprawny adres email." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Wpisz poprawny „slug” zawierający litery, cyfry, podkreślenia i myślniki." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Wpisz poprawny „slug” zawierający litery Unicode, cyfry, podkreślenia i " +"myślniki." + +msgid "Enter a valid IPv4 address." +msgstr "Wprowadź poprawny adres IPv4." + +msgid "Enter a valid IPv6 address." +msgstr "Wprowadź poprawny adres IPv6." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Wprowadź poprawny adres IPv4 lub IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Wpisz tylko cyfry oddzielone przecinkami." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Upewnij się, że ta wartość jest %(limit_value)s (jest %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Upewnij się, że ta wartość jest większa lub równa %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znak (obecnie ma " +"%(show_value)d)." +msgstr[1] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaki (obecnie ma " +"%(show_value)d)." +msgstr[2] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaków (obecnie " +"ma %(show_value)d)." +msgstr[3] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaków (obecnie " +"ma %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znak (obecnie ma " +"%(show_value)d)." +msgstr[1] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaki (obecnie ma " +"%(show_value)d)." +msgstr[2] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (obecnie ma " +"%(show_value)d)." +msgstr[3] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (obecnie ma " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Wpisz liczbę." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfry." +msgstr[1] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfry." +msgstr[2] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfr." +msgstr[3] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfr." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfrę po przecinku." +msgstr[1] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfry po przecinku." +msgstr[2] "Upewnij się, że liczba ma nie więcej niż %(max)s cyfr po przecinku." +msgstr[3] "Upewnij się, że liczba ma nie więcej niż %(max)s cyfr po przecinku." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfrę przed przecinkiem." +msgstr[1] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfry przed przecinkiem." +msgstr[2] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfr przed przecinkiem." +msgstr[3] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfr przed przecinkiem." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Rozszerzenie pliku „%(extension)s” jest niedozwolone. Dozwolone rozszerzenia " +"to: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Znaki null są niedozwolone." + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s z tymi %(field_labels)s już istnieje." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Wartość %(value)r nie jest poprawnym wyborem." + +msgid "This field cannot be null." +msgstr "To pole nie może być puste." + +msgid "This field cannot be blank." +msgstr "To pole nie może być puste." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Istnieje już %(model_name)s z tą wartością pola %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Wartość pola %(field_label)s musi być unikatowa dla %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Pole typu: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Wartością „%(value)s” musi być True albo False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Wartością „%(value)s” musi być True, False lub None." + +msgid "Boolean (Either True or False)" +msgstr "Wartość logiczna (True lub False – prawda lub fałsz)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Ciąg znaków (do %(max_length)s znaków)" + +msgid "Comma-separated integers" +msgstr "Liczby całkowite rozdzielone przecinkami" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Wartość „%(value)s” ma nieprawidłowy format daty. Musi być ona w formacie " +"YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Wartość „%(value)s” ma prawidłowy format (YYYY-MM-DD), ale jest " +"nieprawidłową datą." + +msgid "Date (without time)" +msgstr "Data (bez godziny)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Wartość „%(value)s” ma nieprawidłowy format. Musi być ona w formacie YYYY-MM-" +"DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Wartość „%(value)s” ma prawidłowy format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), ale jest nieprawidłową datą/godziną." + +msgid "Date (with time)" +msgstr "Data (z godziną)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Wartością „%(value)s” musi być liczba dziesiętna." + +msgid "Decimal number" +msgstr "Liczba dziesiętna" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Wartość „%(value)s” ma błędny format. Poprawny format to [DD] [HH:[MM:]]ss[." +"uuuuuu]." + +msgid "Duration" +msgstr "Czas trwania" + +msgid "Email address" +msgstr "Adres e-mail" + +msgid "File path" +msgstr "Ścieżka do pliku" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Wartością „%(value)s” musi być liczba zmiennoprzecinkowa." + +msgid "Floating point number" +msgstr "Liczba zmiennoprzecinkowa" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Wartością „%(value)s” musi być liczba całkowita." + +msgid "Integer" +msgstr "Liczba całkowita" + +msgid "Big (8 byte) integer" +msgstr "Duża liczba całkowita (8 bajtów)" + +msgid "Small integer" +msgstr "Mała liczba całkowita" + +msgid "IPv4 address" +msgstr "adres IPv4" + +msgid "IP address" +msgstr "Adres IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Wartością „%(value)s” musi być None, True lub False." + +msgid "Boolean (Either True, False or None)" +msgstr "Wartość logiczna (True, False, None – prawda, fałsz lub nic)" + +msgid "Positive big integer" +msgstr "Dodatnia duża liczba całkowita" + +msgid "Positive integer" +msgstr "Dodatnia liczba całkowita" + +msgid "Positive small integer" +msgstr "Dodatnia mała liczba całkowita" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (do %(max_length)s znaków)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Wartość „%(value)s” ma nieprawidłowy format. Musi być ona w formacie HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Wartość „%(value)s” ma prawidłowy format (HH:MM[:ss[.uuuuuu]]), ale jest " +"nieprawidłową wartością czasu." + +msgid "Time" +msgstr "Czas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dane w postaci binarnej" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "Wartość „%(value)s” nie jest poprawnym UUID-em." + +msgid "Universally unique identifier" +msgstr "Uniwersalnie unikalny identyfikator" + +msgid "File" +msgstr "Plik" + +msgid "Image" +msgstr "Plik graficzny" + +msgid "A JSON object" +msgstr "Obiekt JSON" + +msgid "Value must be valid JSON." +msgstr "Wartość musi być poprawnym JSON-em." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s z polem %(field)s o wartości %(value)r nie istnieje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Klucz obcy (typ określony przez pole powiązane)" + +msgid "One-to-one relationship" +msgstr "Powiązanie jeden do jednego" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "powiązanie %(from)s do %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "powiązania %(from)s do %(to)s" + +msgid "Many-to-many relationship" +msgstr "Powiązanie wiele-do-wielu" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "To pole jest wymagane." + +msgid "Enter a whole number." +msgstr "Wpisz liczbę całkowitą." + +msgid "Enter a valid date." +msgstr "Wpisz poprawną datę." + +msgid "Enter a valid time." +msgstr "Wpisz poprawną godzinę." + +msgid "Enter a valid date/time." +msgstr "Wpisz poprawną datę/godzinę." + +msgid "Enter a valid duration." +msgstr "Wpisz poprawny czas trwania." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Liczba dni musi wynosić między {min_days} a {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza." + +msgid "No file was submitted." +msgstr "Żaden plik nie został przesłany." + +msgid "The submitted file is empty." +msgstr "Wysłany plik jest pusty." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znak (obecnie ma " +"%(length)d)." +msgstr[1] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaki (obecnie ma " +"%(length)d)." +msgstr[2] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaków (obecnie ma " +"%(length)d)." +msgstr[3] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaków (obecnie ma " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Prześlij plik lub zaznacz by usunąć, ale nie oba na raz." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Prześlij poprawny plik graficzny. Aktualnie przesłany plik nie jest " +"grafiką lub jest uszkodzony." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Wybierz poprawną wartość. %(value)s nie jest żadną z dostępnych opcji." + +msgid "Enter a list of values." +msgstr "Podaj listę wartości." + +msgid "Enter a complete value." +msgstr "Wprowadź kompletną wartość." + +msgid "Enter a valid UUID." +msgstr "Wpisz poprawny UUID." + +msgid "Enter a valid JSON." +msgstr "Wpisz poprawny JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Ukryte pole %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Brakuje danych ManagementForm lub zostały one naruszone. Brakujące pola: " +"%(field_names)s. Złóż zgłoszenie błędu, jeśli problem się powtarza." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Proszę wysłać co najwyżej %d formularz." +msgstr[1] "Proszę wysłać co najwyżej %d formularze." +msgstr[2] "Proszę wysłać co najwyżej %d formularzy." +msgstr[3] "Proszę wysłać co najwyżej %d formularzy." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Proszę wysłać co najmniej %d formularz." +msgstr[1] "Proszę wysłać co najmniej %d formularze." +msgstr[2] "Proszę wysłać co najmniej %d formularzy." +msgstr[3] "Proszę wysłać co najmniej %d formularzy." + +msgid "Order" +msgstr "Kolejność" + +msgid "Delete" +msgstr "Usuń" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Popraw zduplikowane dane w %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Popraw zduplikowane dane w %(field)s, które muszą być unikalne." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla " +"%(lookup)s w polu %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Popraw poniższe zduplikowane wartości." + +msgid "The inline value did not match the parent instance." +msgstr "Wartość inline nie pasuje do obiektu rodzica." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "„%(pk)s” nie jest poprawną wartością." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s nie mógł zostać zinterpretowany w strefie czasowej " +"%(current_timezone)s; może być niejednoznaczny lub może nie istnieć." + +msgid "Clear" +msgstr "Wyczyść" + +msgid "Currently" +msgstr "Teraz" + +msgid "Change" +msgstr "Zmień" + +msgid "Unknown" +msgstr "Nieznany" + +msgid "Yes" +msgstr "Tak" + +msgid "No" +msgstr "Nie" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "tak,nie,może" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtów" +msgstr[3] "%(size)d bajtów" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "po południu" + +msgid "a.m." +msgstr "rano" + +msgid "PM" +msgstr "po południu" + +msgid "AM" +msgstr "rano" + +msgid "midnight" +msgstr "północ" + +msgid "noon" +msgstr "południe" + +msgid "Monday" +msgstr "Poniedziałek" + +msgid "Tuesday" +msgstr "Wtorek" + +msgid "Wednesday" +msgstr "Środa" + +msgid "Thursday" +msgstr "Czwartek" + +msgid "Friday" +msgstr "Piątek" + +msgid "Saturday" +msgstr "Sobota" + +msgid "Sunday" +msgstr "Niedziela" + +msgid "Mon" +msgstr "Pon" + +msgid "Tue" +msgstr "Wt" + +msgid "Wed" +msgstr "Śr" + +msgid "Thu" +msgstr "Czw" + +msgid "Fri" +msgstr "Pt" + +msgid "Sat" +msgstr "So" + +msgid "Sun" +msgstr "Nd" + +msgid "January" +msgstr "Styczeń" + +msgid "February" +msgstr "Luty" + +msgid "March" +msgstr "Marzec" + +msgid "April" +msgstr "Kwiecień" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Czerwiec" + +msgid "July" +msgstr "Lipiec" + +msgid "August" +msgstr "Sierpień" + +msgid "September" +msgstr "Wrzesień" + +msgid "October" +msgstr "Październik" + +msgid "November" +msgstr "Listopad" + +msgid "December" +msgstr "Grudzień" + +msgid "jan" +msgstr "sty" + +msgid "feb" +msgstr "lut" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "kwi" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "cze" + +msgid "jul" +msgstr "lip" + +msgid "aug" +msgstr "sie" + +msgid "sep" +msgstr "wrz" + +msgid "oct" +msgstr "paź" + +msgid "nov" +msgstr "lis" + +msgid "dec" +msgstr "gru" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Sty." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Lut." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Kwi." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Cze." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Lip." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Sie." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Wrz." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Paź." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Lis." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Gru" + +msgctxt "alt. month" +msgid "January" +msgstr "stycznia" + +msgctxt "alt. month" +msgid "February" +msgstr "lutego" + +msgctxt "alt. month" +msgid "March" +msgstr "marca" + +msgctxt "alt. month" +msgid "April" +msgstr "kwietnia" + +msgctxt "alt. month" +msgid "May" +msgstr "maja" + +msgctxt "alt. month" +msgid "June" +msgstr "czerwca" + +msgctxt "alt. month" +msgid "July" +msgstr "lipca" + +msgctxt "alt. month" +msgid "August" +msgstr "sierpnia" + +msgctxt "alt. month" +msgid "September" +msgstr "września" + +msgctxt "alt. month" +msgid "October" +msgstr "października" + +msgctxt "alt. month" +msgid "November" +msgstr "listopada" + +msgctxt "alt. month" +msgid "December" +msgstr "grudnia" + +msgid "This is not a valid IPv6 address." +msgstr "To nie jest poprawny adres IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "lub" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rok" +msgstr[1] "%(num)d lata" +msgstr[2] "%(num)d lat" +msgstr[3] "%(num)d roku" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d miesiąc" +msgstr[1] "%(num)d miesiące" +msgstr[2] "%(num)d miesięcy" +msgstr[3] "%(num)d miesiąca" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydzień" +msgstr[1] "%(num)d tygodnie" +msgstr[2] "%(num)d tygodni" +msgstr[3] "%(num)d tygodnia" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dzień" +msgstr[1] "%(num)d dni" +msgstr[2] "%(num)d dni" +msgstr[3] "%(num)d dnia" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d godzina" +msgstr[1] "%(num)d godziny" +msgstr[2] "%(num)d godzin" +msgstr[3] "%(num)d godziny" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuty" +msgstr[2] "%(num)d minut" +msgstr[3] "%(num)d minut" + +msgid "Forbidden" +msgstr "Dostęp zabroniony" + +msgid "CSRF verification failed. Request aborted." +msgstr "Weryfikacja CSRF nie powiodła się. Żądanie zostało przerwane." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Widzisz tę wiadomość, ponieważ ta witryna HTTPS wymaga, aby przeglądarka " +"wysłała „nagłówek Referer”, a żaden nie został wysłany. Nagłówek ten jest " +"wymagany ze względów bezpieczeństwa, aby upewnić się, że twoja przeglądarka " +"nie została przechwycona przez osoby trzecie." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Jeżeli nagłówki „Referer” w Twojej przeglądarce są wyłączone, to proszę " +"włącz je ponownie. Przynajmniej dla tej strony, połączeń HTTPS lub zapytań " +"typu „same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jeśli używasz taga lub " +"umieszczasz nagłówek „Referrer-Policy: no-referrer”, prosimy je usunąć. " +"Ochrona przed atakami CSRF wymaga nagłówka „Referer”, aby wykonać ścisłe " +"sprawdzenie referera HTTP. Jeśli zależy ci na prywatności, użyj alternatyw " +"takich jak dla linków do stron osób trzecich." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Widzisz tą wiadomość, ponieważ ta witryna wymaga ciasteczka CSRF do " +"przesyłania formularza. Ciasteczko to jest wymagane ze względów " +"bezpieczeństwa, aby upewnić się, że Twoja przeglądarka nie została " +"przechwycona przez osoby trzecie." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Jeżeli ciasteczka w Twojej przeglądarce są wyłączone, to proszę włącz je " +"ponownie. Przynajmniej dla tej strony lub żądań typu „same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "Więcej informacji jest dostępnych po ustawieniu DEBUG=True." + +msgid "No year specified" +msgstr "Nie określono roku" + +msgid "Date out of range" +msgstr "Data poza zakresem" + +msgid "No month specified" +msgstr "Nie określono miesiąca" + +msgid "No day specified" +msgstr "Nie określono dnia" + +msgid "No week specified" +msgstr "Nie określono tygodnia" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nie są dostępne" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Wyświetlanie %(verbose_name_plural)s z datą przyszłą jest niedostępne, gdyż " +"atrybut '%(class_name)s.allow_future' ma wartość 'False'." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Ciąg znaków „%(datestr)s” jest niezgodny z podanym formatem daty „%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nie znaleziono %(verbose_name)s spełniających wybrane kryteria" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Podanego numeru strony nie można przekształcić na liczbę całkowitą, nie " +"przyjął on również wartości „last” oznaczającej ostatnią stronę z dostępnego " +"zakresu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nieprawidłowy numer strony (%(page_number)s): %(message)s " + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" +"Lista nie zawiera żadnych elementów, a atrybut „%(class_name)s.allow_empty” " +"ma wartość False." + +msgid "Directory indexes are not allowed here." +msgstr "Wyświetlanie zawartości katalogu jest tu niedozwolone." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s” nie istnieje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Zawartość %(directory)s " + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalacja przebiegła pomyślnie! Gratulacje!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Zobacz informacje o wydaniu dla Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Widzisz tę stronę, ponieważ w swoim pliku ustawień masz DEBUG=True i nie skonfigurowałeś żadnych URL-i." + +msgid "Django Documentation" +msgstr "Dokumentacja Django" + +msgid "Topics, references, & how-to’s" +msgstr "Przewodniki tematyczne, podręczniki i przewodniki „jak to zrobić”" + +msgid "Tutorial: A Polling App" +msgstr "Samouczek: Aplikacja ankietowa" + +msgid "Get started with Django" +msgstr "Pierwsze kroki z Django" + +msgid "Django Community" +msgstr "Społeczność Django" + +msgid "Connect, get help, or contribute" +msgstr "Nawiąż kontakt, uzyskaj pomoc lub wnieś swój wkład" diff --git a/venv/Lib/site-packages/django/conf/locale/pl/__init__.py b/venv/Lib/site-packages/django/conf/locale/pl/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/pl/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/pl/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99aa15859dee348cf9f2407757372bf5fd7b6609 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lL5_ZWd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04oqQ-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pl/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/pl/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6b790cfe7d9dbeef2b52a9cc91c8d4a7b2a4deb GIT binary patch literal 679 zcmZWm&ySNp6ovv@+HQC4Mm>1q!l8+@_r@4;fkIrM;YSP;BB9K*p_bAxbd&Pe7;pX? z{uw5oJZ<9D%bpyntu(&Ly!XEEoA+j3ChzyV6tSNlzR!7 ztvZKXs8dF(NrEd5N|_W?-9r#+@qs2+51EP=;YiFzVsOg#B-=}3CW(;fgQG5p`b0D* zqFX)vj~a=K>gt?*q+kB3$Nc)~fg!;f_CZgPJvGv7$CN$L^9=I@u4|=93<6blBGa}! z{aEni4^rgd$P8TFcD$(B_1Qn_tes{!ZhbO{Y%O}Ps_($fq0F#mzW2AE3!a~zan27E z_0}-uyU0~%vLk!818zLs_FdUh8r-$zn{QPonmV>WGpy+ss^G}z2lt3>C!vo~fkS79 zaU3dnvdhq>#Njk8_1!$w(gK&#tjJd=DZ_iTxexEsd5F^zN!vL27%veH;VRxN^Kp`I w7UOlE#A`I(uE&eK$l?-@w)=1Vt1O4RHF{ltFMdHB%d&KH@hsnFIhN+>-)o|>JLk-qGw1a=&pFTCCy$zQgTvLcpX0m=zUffM`2hD%9Hm&taZhxdRd7Dk^Ud%S z_)fSK-U`o$Pr(b|Nhjs$#^4czuYs?CZ-K|a4?t!8F&lrk<(J`s#6NENl;w9VpRxQI zoKL!6!u{dNCp!*Bc20#9+v$RH;F(a*`|b0y;UR=Cg!;}3co19zkA~~*^Kly=L6vg? z9tPiK<8Od-34aJ43~z&~*I&U?;XlCB;kWGbLufQTe+AU{7Q!Q84^+7?gvw_ao(b35 z@Dx<~w?dWoI`~TXUU&lh2z24yQ1yBYD!*?*rGEzM{hvX#|F59xc^I9id`^RUZwXXC z4M3$|4Hv;tsQ0!)mH%DvLik~*_a2A(&bQ&=@CQ)!_-~j(HO8NS3{Jp#r#a61;oIRY z@EF%|ZiaV5<$D#K`a1Zha4GyZcsx92LCzkic3TcO2fJ-hKj=?&nbL z@B&mm2QwHHe+uk_i=f*1a(Do|+J-%-_bTx9unzUT`z;@VdhZ)h_4qba`~Swq@4qk) z9}4xoBcaCWiEth~-NrA0`tDMAAiNl=9acc4zY3}xWvFoGs~1Y&oCi@k zP95s~cf$kW^-%S@5vp7tf*Los+W5QRL4@yy%I{vNe)+PE|0Oi4Z&9v4j)pxvKMvB= z&JfhRs6e&b6x4WqKh%5w3^l*LY5A<>0bP0gu~6k&1YNio9tenlw>T!*YpM?7p z{sS9+8yqJ5Znzl!D~#a&-MRjV;UM9g;4=8{@M5^&%)H(OsP+t?>XAa#;}4 zsPDc2rElgi==A&qsPezc@^q+tdhGM%P~~0))voKH(q9R$gdRK`eg-Q4``{Vy0jT!= zIh+d*>1XYLM?-!0W~lr=2Gvft+xSnxe<6Gi{5rgjL8g2QG=j=qhRXL^%lBGtx4hHx zpDZ7PdhZ$dO1R(I`TIv(o&ojz0;usg0+sHKHok884tNytH^L*~Us`?!>b?8n5%3A9 z{C)_Jf-gYn^`p+o>%GYGEX#h&b1cuZTxxl-<&fn{%QaB_x(=#+e%HodZRtVHTi-sf z*!UWpNBlMLs{I`2_u-|4A3rxAS6#2k$Kwj9^{@y@;@k{L;yenqejWDOyuMvf^*;}) zo~vy5Y8wur+U4y~{d~RUjg}v_yv6e4P~-P@sPaDyHBP<(b1`p?nU93}xqdsQ6Vj{xYcYya65!3lNjVnSlDv4fgrpL6xfk zRn7;X`tcE{@%WVGvrzr8AI7l0a~xFvoCa0i#gM7soDVh5H^UR)o1pBV8=%Vju;mj_ z<$4?AE1VA>geSshq4eEhEGp7}XFwMYS{9++dk0(yKM9rY5zC*zQwY!d9mip6 zI%h)F_iCv2D%)@!D&01y_#2_xVLMd%yP%$b9_slwAXRssw&4X-T6*p*sPWYg)qYFi z8{iOBK7V1k!#=+Q>N}r->gNZc^8cz0KWW3?hU))kpyt=Fpz=GE#aG`w8fsh}57ob? zLXDsEpvo}__5LMLp7oG-x4=UfcK;?5C)ck)RRCzxLHI6?F4}iBr z<$EVo`Y*t9;C(jyTd4M(vpmn|1gQF-0$JLfweWbj4QiZS4@consCIlFYCIjkB2RY? z)O=q9mG2v&+AoG@z-yt(e=}6RABP9RFWC4m!Tkw8WaGaA*AV_XRJj)p=lhu}Axon3 z0K5b~53hi$S7J-R?eHM@3#j&d9;%%WU6s#|li;DN9J=fDb7x*Alw zW^fF?6J7?NfQP`o)p@$}pxXOlD7`ac!v&~xb;~KJ_Iw+ZzPicA?}U2qQ&9Tges}=< z9#lDgWceIaIe!B+pZ2E_6h6Z87^wQ3WW)2J>az%*4twAtcp22ZpMvMYPeAqmQxMhW z97W?R-K9|DFNLSV4?^|(9rpQyQ04pu)I9n%)b|d#G#>|tLp`4l^?V^zdC!Jw|MQ`q zk3!XR3?2%vg7e@wEWiY+A0LIv|GTgc{s^kwP9Dkodolbo!b_p@eH6}vk3qG|cWwNC z!p8~!6g~|fSexg2*SfrX_dtE;Udu09e%bOt%SSA~4we6tHvApSA6Wj_@;Rvb{}L+w z3sB?ZASRdUeI!&noCuX}zU3mQ^u18!Iv47_3!u^u+VCZCKf)WJ>c7$QO3SM)Jxkv* zu&h~LW0}FZ_oIQ>~$_-5|Ej{GBXAbB2v z9FNQ={8>cT=aD0c(=~{k%KdxcZxzAyQRFn@O7I0lee`8y4sjaK4dgS(s}WsqMphy_ z6yUlQc_Z@2$U70~lEaX*kSCGfAiqYQMrK~yY{bLx705NnP8;_Oyd1d#S%!QEc|X#; zzQj$<23|>7ALD+D4JVebhYOL-$mfs;5M8fBPU4;BHO!54;<3ct4W+M88?EbKxGN&v z2-DNKA7PlA>kQtxk-I;&;hFeDB7R{b4ED8+&PfTx{>(1|LOENB%GJZ^&F^5%L$vw~$XFe}udbIULc|kIX}UjGT!y zuhraCkgJflB7I2nx{sU42L2B`nezUL4Id55$O*`N;#2r%h|7He>N=Wx>DG53Hz8*d z9*2iOT_4Y3{{9Dl|DY|rp8MZH{vByvo^E*ehu{Es4(x`14a}LgeSjp?pKvUC62C&T;+;UW8nUd;?j6Jd5ah4f1Z} zRlGL<&qwOW7m$BObp8Jv&Zpp=$S;xKM@~e34>_E7pMYbCuKz;5Y3}krzq0o({5J9v zz-`ru_!Z#t;BOgKj75OgGyw2sO zi+BH@jd%t3Mfg0DP+RN-2(4L7Lkvx-W<+f!RL@8 zZ1^kCxA#|DegfWr{1mwkc^=t_Y(UJluxmWfEDWy6e0MyG z-GyBxFZDNdrd!xmjiN1CeN#GB_q&rmhm7K=)}8b&>`Egtiv6mW22q$)g8CjGCOoZ0 zCG+(lOj0i_`tD?qR`{^_CYdeln((Tb-yOT9$WPobN?m_zkfi#od3RIj)hI^(URnwC zN@sz+YV3QZsr)@t-o1G-As0CrB z7fWt_mq$inS}}3DF;SDgzeO>kiJ0;|laok9;;tOj-!K z86k0&=)FNdER)_D49afT`KDpJ-5^Z;vL8ExQB?KGs%r&o~hPg7T1(;Xv6wp zcfyZ@@t|l1w>$0yRln5duJ@@CGsi2CEfLO;mwHudHdOJ#GH+6Y*cpndQLWJ4azjzA z=Jh6i-HVxHrDmNIl7^vQOncn2pSl&lTJKS1iVTi8C}{W$#Sul&7qU2}N2*iK&^EtV zahB(OvYh7ACL1fbOlkt$7lxnZ2(G{*&D#d=1IL%?V zB1|$0m{vThtfJZSy0s{e4w(@(Z!6QhWGh^+dPQpRQs1Ox`|@f~4y138n{k271OiQJ0E$Vur1=1krJCAU~%5)@Nrco%J=6f80* zhP2XM>TWB;Ugwj%ct&PfX_kgLYKl`0YC*awUvXwHR#J&3n+awVZC`S1FW}y0X`Afj zE90Is+@~VaGjv&7>*a5o=(hSLvo;y2$}G|9f2M0Fb%#<#1EtZ-TssFt-r~GoW#;eI zyZVNQGOg96)LfH+^33B|uZ%)8(Pld5@wq0PPRH}0GW_?CINb}k~q}lDW zjq5L+ndQcftMQpNi<%cf=Gkm<{ZjI~Jg{nWX1w37KW9F)OYzL;+47&!n3EM2Z@Y*z zUys7-lv|SKOWf(DuP~(^sd;Mg1l{k2X~Z2XvsSrbzYu3$Jmn0_T-ACd!*hUYpRJc>vK8tc$|;UI$5|~3%kTk`5fv_y47>oR0)yFisq|0t66JQ zuS>kpboC`3_NDBuOERpROR~^+)_8>}dU%Z&hF-~o+q^9mXHBJs#j=J@>=u^+7Cu%{G zXcRG}wLBGk4D8gaF<5QW>&2HbjGec9#o)%37s)*CbJk)~VoZ^2d0WId_DhP;V((7UPDxf^ zK{aOa?9uK}#V>9#-(+G%B~t*+!ie^zAgVM~im(^h9Cdz0yQ9t+ZI3!);z?ig#T|^c z)Ec)|$*38#b}EeGWD7A9xz)Qit5&BCkzK6YK4%@)ugv3hp|5^s0(9UInxt0(zcx(jS@DJ6Pm60 z2DTNE)X?qI(OI~eEw!`Wn{*37$l_+kfwMkBdq^Lx&rmmTgO^IOSQ=qNF-pxgb*1Ms zdYlb@RpZH%6@xiatV99Z7tL>TVnQF~%Z^5>R!usvHEnHbnrSz=jA`GLXSuie)YE(> zZD0X3h0p1tmIJC1U~?G_!JOAV&L@fqFyhq{XG1lb@U|HErU5ooGtL9DdTs);P1|Jm z14*~Dp`$IEClMR8vn;wY1IUlPGOBEM8Dta(ou@XP^eUVRK)e^JPy>IBlaYnf1A`5W?0N z8Kb*`P&?k-O2up{nc;5~wdqZc4p^s1l^>n;k*(e##8}g2nzbp(ibYnNakSgie0Jqw znZ+ox2Xynz8@7lH5n5#W9I)W0XxPxb7F%eOp1j$`JRnGCm|*_BmWt13FBSD`^>j)P zxi>n^WrV0Tk5%ZP3P)|~*f9)X zXDs$gOvor?FVP%yW1K%Bd7>=dqFx`%IM@ih>VUh<9gV6oW87u+x`P$&Y%JBXICVB| ziRokw>y6=-Fq(vQOv_Sh`f+4ZX7;HIj2fGYG8ZjR5?KhWg;v=$yIIMlv$PwDSBCy2}GU)yA9o#_gngq32d& zfBd2al{Bp<1O5G_sF?JX%&AR1jy9uG`mo0P{jlFy3JJ~Eo%CY|YZXiS7hv~r5SU)H zV3X<01zH6!S`bE2osY*0UT0IPqx|H;e(!Z=`LM@AZCN^3U@Rc00(ICGewCiMlF54| zEvK`k#P@T1gkHA>W6N+h2fZj;t-)r5uwc99kgmw#bb$3yVd&bisa$fMPWO&;6zzV4Co@!O7(=+f9N#L;9z_t>FWFlDT8yjj$AW5+7we|?=H63i3vu$xr!?i6+waOQ3y4vyTvEyZBhjUP8+%Guj0%vnpMM9^> z;#XsO)`C(Plq;#jL=X8h;Y7vMiDIX&QNUi_nevmKFzO+3!FNV;P13u%)O)$i;3yn$ za~(5xyjC%d#Y-;eU9zNi@oU`0 ziwDj*|E$Gab1&tjt{24~CM;r6Jm9WpnT{iuU6RKV%X95P%YN^e@6`rS=gq@@w@Vri zg*Q1l*@u%NOoDNLtI>6N$@(qOo+gL>dfMMTcVzX*is?Em>03OPMKopI?Hx165Gf`> zKPSgQxD&6AI&=Z>!A)B=4OyN!FopcqN}cpdh6%gfg^;alFj z^{f_++ZrEb8>a=P!Kg-i)#@J}w9CA33KW}>TSU{AQ4s5!0GMHPWu^Z|; z#(&2~b%p~^@8C!=h3IfhZfwKxrQO9T7LdLsR3Osq+fC*L@NeYW5!Z_<9 zthjDJxffu#hcHEUYi08NmXB{tM0lLP8*VxX{gR`vV zx{KtxEAp3~iE!N|+#1iFzNWJuO+idc&Wl=ZylMa3C{A88JaY$Lwu=L=BSFiBm$}x3 z*SG^8Uew%ashoK85-febYJ7MMt5y}{%%eG&2F_sP9y#(4dz0G3QG)CfIblww!w^glUTA>1HWPICzZRi6Aax zbj!DgedXi!!>Lz5i&Q+<+nmwrthOw&#>Gc6dH87lltXYGMd9;fM;zgUV^nzYHJNIH zlJwjz%^D3<5mF*E-c zZaE7Fy8kilf zbqlt?$KZ%??3Il2W`Zw+cXcT{_DPC>WG*N37|hje)QUXE<>Jnb=G zQ%n{lre$8nIx39~1}a*GY4c&tQr0$KmOPW~<$X!{whFs18Fw`5%UIyO$#)+MocNn% zh_n}SwjAUa+)Z1W9GJCq7dnzn2z&WmvV4)Z>DxWOjoOZ*Qnt-=vzpEpNRDEy<0E7R zXn*Lr@(~(q$0XAZul+fS#^}`~{*=+(mUAexWHHWquqSta& zJ$pHtZHRT5+ZD4`gky}|7RGkrtnbaty}h0uM;I(?whwn%#2Y)!Do&SoxG5WV$T%7H zSv`$Gk{fa;`ZTDsvuRrEEk9+hATcbkD=RDn@|V~+PA~1k)?A;_kQ4U1?syf?pcVja zuL2yH5q5#L=qvQ2D}HRG5z?ivqKtDVCMFCEHu|k-tV_;jyrRy-N|Ah-m;_oxH~3p6 zsnua%f6d716GfA1SZaPRdE?J&$epd?M%08Wpz zYHq_>hiI;GG*qS!xB5DKpmbQ~F-7uC5QZ=9wie49RoXeg*)>uXkKnwv+56K08y zV-8+j4dQ$#=WbPvYGYZpJgRECk`y!}Y5JH1C*nTmweRmVJ*%^qAwQ}yzjHFbs%8+H zqO%m+A70~HT`+q=tp(EbCac;WzqH*-|FtAZXsm7tqiS+#QFY=jJQi@9yoyZ#A|T%pXnh6`YZ1Np)9xjUD)C zrPgrLvf|3fW2DwQEhK3m>#Q|R&d&t&GYG6v&y^)&(woz_wuRREYh$B(q!Dw*bz^lsx6K4wuYHOBT%iT6W8do5q_j&mJj)Hsk(f))Y#mpeR3bJm$K-a zyb2DE}|Kh&f z2!|ogTpA2rZ&!BHWa@*)jvBK>4qc4{CDJ*9JvQ-M>8W0G*=05@*=;(LFNs-qnz>j5 z*I8$KimJ80`ROZ5c|N4ZGmc@Skcp|K3%9S& zA>Dj;lx4Wk*byf4`AYM!x|W1qt=q;Xp_^mEan9jy{UG6jELk{O;j5DfRyGSg=8m5k{ zckT7OKDVtAwG>c9lQ_tvOs8wsdXZQeV%zCY{%@mJH-3SJx6*PqG+paS;#T+a+ej3XeqEx`M{7|}{2;WPrxi-(X05q1A(CV0 zrqh^IOhxMpHfO;6=9nKg+996*_RJboNuNvZGP;a&nTE~X&h&{g=RYX6HLQ~)!BS#$ zP?w&3ZD)hRo-K&YIV8FJS<8oPdYw|4V#_XB5PNlLn*}CUOzomJ3TDG;>o(mrrix9a zMIkh(bnx|(yKMY_>rZA)Rqa|CT?lD`d4>BKCa(!i, 2012 +# Claudio Fernandes , 2015 +# Jannis Leidel , 2011 +# José Durães , 2014 +# jorgecarleitao , 2014-2015 +# Nuno Mariz , 2011-2013,2015-2018 +# Paulo Köch , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Africâner" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerbaijano" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorusso" + +msgid "Bengali" +msgstr "Bengalês" + +msgid "Breton" +msgstr "Bretão" + +msgid "Bosnian" +msgstr "Bósnio" + +msgid "Catalan" +msgstr "Catalão" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galês" + +msgid "Danish" +msgstr "Dinamarquês" + +msgid "German" +msgstr "Alemão" + +msgid "Lower Sorbian" +msgstr "Sorbedo inferior" + +msgid "Greek" +msgstr "Grego" + +msgid "English" +msgstr "Inglês" + +msgid "Australian English" +msgstr "Inglês da Austrália" + +msgid "British English" +msgstr "Inglês Britânico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Espanhol" + +msgid "Argentinian Spanish" +msgstr "Espanhol Argentino" + +msgid "Colombian Spanish" +msgstr "Espanhol Colombiano" + +msgid "Mexican Spanish" +msgstr "Espanhol mexicano" + +msgid "Nicaraguan Spanish" +msgstr "Nicarágua Espanhol" + +msgid "Venezuelan Spanish" +msgstr "Espanhol Venezuelano" + +msgid "Estonian" +msgstr "Estónio" + +msgid "Basque" +msgstr "Basco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Filandês" + +msgid "French" +msgstr "Francês" + +msgid "Frisian" +msgstr "Frisão" + +msgid "Irish" +msgstr "Irlandês" + +msgid "Scottish Gaelic" +msgstr "Escocês Gaélico" + +msgid "Galician" +msgstr "Galaciano" + +msgid "Hebrew" +msgstr "Hebraico" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Sorbedo superior" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlíngua" + +msgid "Indonesian" +msgstr "Indonésio" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandês" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonês" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Cazaque" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Canarês" + +msgid "Korean" +msgstr "Coreano" + +msgid "Luxembourgish" +msgstr "Luxemburguês" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letão" + +msgid "Macedonian" +msgstr "Macedónio" + +msgid "Malayalam" +msgstr "Malaiala" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Birmanês" + +msgid "Norwegian Bokmål" +msgstr "Norueguês Bokmål" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Holandês" + +msgid "Norwegian Nynorsk" +msgstr "Norueguês (Nynors)" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "Panjabi" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Português" + +msgid "Brazilian Portuguese" +msgstr "Português Brasileiro" + +msgid "Romanian" +msgstr "Romeno" + +msgid "Russian" +msgstr "Russo" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanês" + +msgid "Serbian" +msgstr "Sérvio" + +msgid "Serbian Latin" +msgstr "Sérvio Latim" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suaíli" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurte" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chinês Simplificado" + +msgid "Traditional Chinese" +msgstr "Chinês Tradicional" + +msgid "Messages" +msgstr "Mensagens" + +msgid "Site Maps" +msgstr "Mapas do Site" + +msgid "Static Files" +msgstr "Ficheiros Estáticos" + +msgid "Syndication" +msgstr "Syndication" + +msgid "That page number is not an integer" +msgstr "Esse número de página não é um número inteiro" + +msgid "That page number is less than 1" +msgstr "Esse número de página é inferior a 1" + +msgid "That page contains no results" +msgstr "Essa página não contém resultados" + +msgid "Enter a valid value." +msgstr "Introduza um valor válido." + +msgid "Enter a valid URL." +msgstr "Introduza um URL válido." + +msgid "Enter a valid integer." +msgstr "Introduza um número inteiro válido." + +msgid "Enter a valid email address." +msgstr "Introduza um endereço de e-mail válido." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Introduza um endereço IPv4 válido." + +msgid "Enter a valid IPv6 address." +msgstr "Insira um endereço IPv6 válido." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Digite um endereço válido IPv4 ou IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Introduza apenas números separados por vírgulas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Garanta que este valor seja %(limit_value)s (tem %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Garanta que este valor seja menor ou igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Garanta que este valor seja maior ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Garanta que este valor tenha pelo menos %(limit_value)d caractere (tem " +"%(show_value)d)." +msgstr[1] "" +"Garanta que este valor tenha pelo menos %(limit_value)d caracteres (tem " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Garanta que este valor tenha no máximo %(limit_value)d caractere (tem " +"%(show_value)d)." +msgstr[1] "" +"Garanta que este valor tenha no máximo %(limit_value)d caracteres (tem " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Introduza um número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Garanta que não tem mais de %(max)s dígito no total." +msgstr[1] "Garanta que não tem mais de %(max)s dígitos no total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Garanta que não tem mais %(max)s casa decimal." +msgstr[1] "Garanta que não tem mais %(max)s casas decimais." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Garanta que não tem mais de %(max)s dígito antes do ponto decimal." +msgstr[1] "Garanta que não tem mais de %(max)s dígitos antes do ponto decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Não são permitidos caracteres nulos." + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s com este %(field_labels)s já existe." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "O valor %(value)r não é uma escolha válida." + +msgid "This field cannot be null." +msgstr "Este campo não pode ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo não pode ser vazio." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s com este %(field_label)s já existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s tem de ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo do tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Pode ser True ou False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (até %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Inteiros separados por virgula" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Data (sem hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Data (com hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Número décimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Duração" + +msgid "Email address" +msgstr "Endereço de e-mail" + +msgid "File path" +msgstr "Caminho do ficheiro" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Número em vírgula flutuante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Inteiro" + +msgid "Big (8 byte) integer" +msgstr "Inteiro grande (8 byte)" + +msgid "IPv4 address" +msgstr "Endereço IPv4" + +msgid "IP address" +msgstr "Endereço IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Pode ser True, False ou None)" + +msgid "Positive integer" +msgstr "Inteiro positivo" + +msgid "Positive small integer" +msgstr "Pequeno número inteiro positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (até %(max_length)s)" + +msgid "Small integer" +msgstr "Inteiro pequeno" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dados binários simples" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Ficheiro" + +msgid "Image" +msgstr "Imagem" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "A instância de %(model)s com %(field)s %(value)r não existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relação de um-para-um" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relação de %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relações de %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relação de muitos-para-muitos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo é obrigatório." + +msgid "Enter a whole number." +msgstr "Introduza um número inteiro." + +msgid "Enter a valid date." +msgstr "Introduza uma data válida." + +msgid "Enter a valid time." +msgstr "Introduza uma hora válida." + +msgid "Enter a valid date/time." +msgstr "Introduza uma data/hora válida." + +msgid "Enter a valid duration." +msgstr "Introduza uma duração válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "O número de dias deve ser entre {min_days} e {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Nenhum ficheiro foi submetido. Verifique o tipo de codificação do formulário." + +msgid "No file was submitted." +msgstr "Nenhum ficheiro submetido." + +msgid "The submitted file is empty." +msgstr "O ficheiro submetido encontra-se vazio." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Garanta que o nome deste ficheiro tenha no máximo %(max)d caractere (tem " +"%(length)d)." +msgstr[1] "" +"Garanta que o nome deste ficheiro tenha no máximo %(max)d caracteres (tem " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Por favor, submeta um ficheiro ou remova a seleção da caixa, não ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Introduza uma imagem válida. O ficheiro que introduziu ou não é uma imagem " +"ou está corrompido." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selecione uma opção válida. %(value)s não se encontra nas opções disponíveis." + +msgid "Enter a list of values." +msgstr "Introduza uma lista de valores." + +msgid "Enter a complete value." +msgstr "Introduza um valor completo." + +msgid "Enter a valid UUID." +msgstr "Introduza um UUID válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Os dados do ManagementForm estão em falta ou foram adulterados" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor submeta %d ou menos formulários." +msgstr[1] "Por favor submeta %d ou menos formulários." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Por favor submeta %d ou mais formulários." +msgstr[1] "Por favor submeta %d ou mais formulários." + +msgid "Order" +msgstr "Ordem" + +msgid "Delete" +msgstr "Remover" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor corrija os dados duplicados em %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija os dados duplicados em %(field)s, que deverá ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija os dados duplicados em %(field_name)s que deverá ser único " +"para o %(lookup)s em %(date_field)s.\"" + +msgid "Please correct the duplicate values below." +msgstr "Por favor corrija os valores duplicados abaixo." + +msgid "The inline value did not match the parent instance." +msgstr "O valor em linha não corresponde à instância pai." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Selecione uma opção válida. Esse valor não se encontra opções disponíveis." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Limpar" + +msgid "Currently" +msgstr "Atualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "sim,não,talvez" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "meia-noite" + +msgid "noon" +msgstr "meio-dia" + +msgid "Monday" +msgstr "Segunda-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Thursday" +msgstr "Quinta-feira" + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Seg" + +msgid "Tue" +msgstr "Ter" + +msgid "Wed" +msgstr "Qua" + +msgid "Thu" +msgstr "Qui" + +msgid "Fri" +msgstr "Sex" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "fev" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "out" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dez" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Março" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Jun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Out." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dez." + +msgctxt "alt. month" +msgid "January" +msgstr "Janeiro" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevereiro" + +msgctxt "alt. month" +msgid "March" +msgstr "Março" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Maio" + +msgctxt "alt. month" +msgid "June" +msgstr "Junho" + +msgctxt "alt. month" +msgid "July" +msgstr "Julho" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Setembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Outubro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Dezembro" + +msgid "This is not a valid IPv6 address." +msgstr "Este não é um endereço IPv6 válido." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ou" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ano" +msgstr[1] "%d anos" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mês" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dia" +msgstr[1] "%d dias" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "0 minutes" +msgstr "0 minutos" + +msgid "Forbidden" +msgstr "Proibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "A verificação de CSRF falhou. Pedido abortado." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Está a ver esta mensagem porque este site requer um cookie CSRF quando " +"submete formulários. Este cookie é requirido por razões de segurança, para " +"garantir que o seu browser não está a ser \"raptado\" por terceiros." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Está disponível mais informação com DEBUG=True." + +msgid "No year specified" +msgstr "Nenhum ano especificado" + +msgid "Date out of range" +msgstr "Data fora do alcance" + +msgid "No month specified" +msgstr "Nenhum mês especificado" + +msgid "No day specified" +msgstr "Nenhum dia especificado" + +msgid "No week specified" +msgstr "Nenhuma semana especificado" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nenhum %(verbose_name_plural)s disponível" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s futuros indisponíveis porque %(class_name)s." +"allow_future é False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nenhum %(verbose_name)s de acordo com a procura." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Índices de diretório não são permitidas aqui." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: the Web framework for perfectionists with deadlines." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Visualizar notas de lançamento do Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "A instalação funcionou com sucesso! Parabéns!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Está a visualizar esta página porque tem DEBUG=True no seu ficheiro settings do Django e não " +"configurou nenhum URLs." + +msgid "Django Documentation" +msgstr "Documentação do Django" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: A Polling App" + +msgid "Get started with Django" +msgstr "Comece com o Django" + +msgid "Django Community" +msgstr "Comunidade Django" + +msgid "Connect, get help, or contribute" +msgstr "Conecte-se, obtenha ajuda ou contribua" diff --git a/venv/Lib/site-packages/django/conf/locale/pt/__init__.py b/venv/Lib/site-packages/django/conf/locale/pt/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/pt/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/pt/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e9cce8f08a1e959cc3522a8155cc185ed3ff7a1 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lL5Y5Rd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04yLh<^TWy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pt/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/pt/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..deaa1ce4acb8bb42525a61bea66545445c92c124 GIT binary patch literal 826 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 PQ61Yt=GOOLA^%|_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..2815d410e --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,1334 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# Amanda Savluchinske , 2019 +# amcorreia , 2018 +# andrewsmedina , 2014-2015 +# Arthur Silva , 2017 +# bruno.devpod , 2014 +# Camilo B. Moreira , 2017 +# Carlos Leite , 2020 +# Carlos Leite , 2016,2019 +# Filipe Cifali Stangler , 2016 +# Claudio Rogerio Carvalho Filho , 2020 +# dudanogueira , 2012 +# dudanogueira , 2019 +# Elyézer Rezende , 2013 +# Fábio C. Barrionuevo da Luz , 2014-2015 +# Felipe Rodrigues , 2016 +# Filipe Cifali Stangler , 2019 +# Gladson , 2013 +# semente, 2011-2014 +# Igor Cavalcante , 2017 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Luiz Boaretto , 2017 +# Marcelo Moro Brondani , 2018 +# Mariusz Felisiak , 2021 +# Rafael Fontenelle , 2021 +# Samuel Nogueira Bacelar , 2020 +# Sandro , 2011 +# Sergio Garcia , 2015 +# Tânia Andrea , 2017 +# Wiliam Souza , 2015 +# Francisco Petry Rauber , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:29+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "Africânder" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Algerian Arabic" +msgstr "Árabe Argelino" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerbaijão" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorrussa" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Bretão" + +msgid "Bosnian" +msgstr "Bósnio" + +msgid "Catalan" +msgstr "Catalão" + +msgid "Czech" +msgstr "Tcheco" + +msgid "Welsh" +msgstr "Galês" + +msgid "Danish" +msgstr "Dinamarquês" + +msgid "German" +msgstr "Alemão" + +msgid "Lower Sorbian" +msgstr "Sorábio Baixo" + +msgid "Greek" +msgstr "Grego" + +msgid "English" +msgstr "Inglês" + +msgid "Australian English" +msgstr "Inglês Australiano" + +msgid "British English" +msgstr "Inglês Britânico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Espanhol" + +msgid "Argentinian Spanish" +msgstr "Espanhol Argentino" + +msgid "Colombian Spanish" +msgstr "Espanhol Colombiano" + +msgid "Mexican Spanish" +msgstr "Espanhol Mexicano" + +msgid "Nicaraguan Spanish" +msgstr "Espanhol Nicaraguense" + +msgid "Venezuelan Spanish" +msgstr "Espanhol Venuzuelano" + +msgid "Estonian" +msgstr "Estoniano" + +msgid "Basque" +msgstr "Basco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finlandês" + +msgid "French" +msgstr "Francês" + +msgid "Frisian" +msgstr "Frísia" + +msgid "Irish" +msgstr "Irlandês" + +msgid "Scottish Gaelic" +msgstr "Gaélico Escocês" + +msgid "Galician" +msgstr "Galiciano" + +msgid "Hebrew" +msgstr "Hebraico" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Sorábio Alto" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "Armênio" + +msgid "Interlingua" +msgstr "Interlíngua" + +msgid "Indonesian" +msgstr "Indonésio" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandês" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonês" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Cabila" + +msgid "Kazakh" +msgstr "Cazaque" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Canarês" + +msgid "Korean" +msgstr "Coreano" + +msgid "Kyrgyz" +msgstr "Quirguiz" + +msgid "Luxembourgish" +msgstr "Luxemburguês" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letão" + +msgid "Macedonian" +msgstr "Macedônio" + +msgid "Malayalam" +msgstr "Malaiala" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Birmanês" + +msgid "Norwegian Bokmål" +msgstr "Dano-norueguês" + +msgid "Nepali" +msgstr "Nepalês" + +msgid "Dutch" +msgstr "Neerlandês" + +msgid "Norwegian Nynorsk" +msgstr "Novo Norueguês" + +msgid "Ossetic" +msgstr "Osseto" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polonês" + +msgid "Portuguese" +msgstr "Português" + +msgid "Brazilian Portuguese" +msgstr "Português Brasileiro" + +msgid "Romanian" +msgstr "Romeno" + +msgid "Russian" +msgstr "Russo" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanesa" + +msgid "Serbian" +msgstr "Sérvio" + +msgid "Serbian Latin" +msgstr "Sérvio Latino" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suaíli" + +msgid "Tamil" +msgstr "Tâmil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tadjique" + +msgid "Thai" +msgstr "Tailandês" + +msgid "Turkmen" +msgstr "Turcomano" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbeque" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chinês Simplificado" + +msgid "Traditional Chinese" +msgstr "Chinês Tradicional" + +msgid "Messages" +msgstr "Mensagens" + +msgid "Site Maps" +msgstr "Site Maps" + +msgid "Static Files" +msgstr "Arquivos Estáticos" + +msgid "Syndication" +msgstr "Syndication" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Esse número de página não é um número inteiro" + +msgid "That page number is less than 1" +msgstr "Esse número de página é menor que 1" + +msgid "That page contains no results" +msgstr "Essa página não contém resultados" + +msgid "Enter a valid value." +msgstr "Informe um valor válido." + +msgid "Enter a valid URL." +msgstr "Informe uma URL válida." + +msgid "Enter a valid integer." +msgstr "Insira um número inteiro válido." + +msgid "Enter a valid email address." +msgstr "Informe um endereço de email válido." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Informe um “slug” válido tendo letras, números, \"underscores\" e hífens." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Informe um “slug” válido tendo letras em Unicode, números, \"underscores\" e " +"hífens." + +msgid "Enter a valid IPv4 address." +msgstr "Insira um endereço IPv4 válido." + +msgid "Enter a valid IPv6 address." +msgstr "Insira um endereço IPv6 válido." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Insira um endereço IPv4 ou IPv6 válido." + +msgid "Enter only digits separated by commas." +msgstr "Insira apenas dígitos separados por vírgulas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Certifique-se de que o valor é %(limit_value)s (ele é %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Certifique-se que este valor seja menor ou igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Certifique-se que este valor seja maior ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certifique-se de que o valor tenha no mínimo %(limit_value)d caractere (ele " +"possui %(show_value)d)." +msgstr[1] "" +"Certifique-se de que o valor tenha no mínimo %(limit_value)d caracteres (ele " +"possui %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certifique-se de que o valor tenha no máximo %(limit_value)d caractere (ele " +"possui %(show_value)d)." +msgstr[1] "" +"Certifique-se de que o valor tenha no máximo %(limit_value)d caracteres (ele " +"possui %(show_value)d)." + +msgid "Enter a number." +msgstr "Informe um número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Certifique-se de que não tenha mais de %(max)s dígito no total." +msgstr[1] "Certifique-se de que não tenha mais de %(max)s dígitos no total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Certifique-se de que não tenha mais de %(max)s casa decimal." +msgstr[1] "Certifique-se de que não tenha mais de %(max)s casas decimais." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Certifique-se de que não tenha mais de %(max)s dígito antes do ponto decimal." +msgstr[1] "" +"Certifique-se de que não tenha mais de %(max)s dígitos antes do ponto " +"decimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"A extensão de arquivo “%(extension)s” não é permitida. As extensões válidas " +"são: %(allowed_extensions)s ." + +msgid "Null characters are not allowed." +msgstr "Caracteres nulos não são permitidos." + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s com este %(field_labels)s já existe." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r não é uma opção válida." + +msgid "This field cannot be null." +msgstr "Este campo não pode ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo não pode estar vazio." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s com este %(field_label)s já existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s deve ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo do tipo: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "o valor “%(value)s” deve ser True ou False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "o valor “%(value)s” deve ser True, False ou None." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadeiro ou Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (até %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Inteiros separados por vírgula" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"O valor \"%(value)s\" tem um formato de data inválido. Deve ser no formato " +"YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"O valor “%(value)s” tem o formato correto (YYYY-MM-DD) mas uma data inválida." + +msgid "Date (without time)" +msgstr "Data (sem hora)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"O valor “%(value)s” tem um formato inválido. Deve estar no formato YYYY-MM-" +"DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"O valor “%(value)s” está no formato correto. (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) mas é uma data/hora inválida" + +msgid "Date (with time)" +msgstr "Data (com hora)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "O valor “%(value)s” deve ser um número decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"O valor “%(value)s” está em um formato inválido. Deve ser no formato [DD] " +"[[HH:]MM:]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duração" + +msgid "Email address" +msgstr "Endereço de e-mail" + +msgid "File path" +msgstr "Caminho do arquivo" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "O valor “%(value)s” deve ser um float." + +msgid "Floating point number" +msgstr "Número de ponto flutuante" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "O valor “%(value)s” deve ser inteiro." + +msgid "Integer" +msgstr "Inteiro" + +msgid "Big (8 byte) integer" +msgstr "Inteiro grande (8 byte)" + +msgid "Small integer" +msgstr "Inteiro curto" + +msgid "IPv4 address" +msgstr "Endereço IPv4" + +msgid "IP address" +msgstr "Endereço IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "O valor “%(value)s” deve ser None, True ou False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadeiro, Falso ou Nada)" + +msgid "Positive big integer" +msgstr "Inteiro grande positivo" + +msgid "Positive integer" +msgstr "Inteiro positivo" + +msgid "Positive small integer" +msgstr "Inteiro curto positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (até %(max_length)s)" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"O valor “%(value)s” tem um formato inválido. Deve estar no formato HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"O valor “%(value)s” está no formato correto (HH:MM[:ss[.uuuuuu]]) mas é uma " +"hora inválida." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dados binários bruto" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "O valor “%(value)s” não é um UUID válido" + +msgid "Universally unique identifier" +msgstr "Identificador único universal" + +msgid "File" +msgstr "Arquivo" + +msgid "Image" +msgstr "Imagem" + +msgid "A JSON object" +msgstr "Um objeto JSON" + +msgid "Value must be valid JSON." +msgstr "o Valor deve ser um JSON válido" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "A instância de %(model)s com %(field)s %(value)r não existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relacionamento um-para-um" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relacionamento %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relacionamentos %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relacionamento muitos-para-muitos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo é obrigatório." + +msgid "Enter a whole number." +msgstr "Informe um número inteiro." + +msgid "Enter a valid date." +msgstr "Informe uma data válida." + +msgid "Enter a valid time." +msgstr "Informe uma hora válida." + +msgid "Enter a valid date/time." +msgstr "Informe uma data/hora válida." + +msgid "Enter a valid duration." +msgstr "Insira uma duração válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "O número de dias deve ser entre {min_days} e {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nenhum arquivo enviado. Verifique o tipo de codificação do formulário." + +msgid "No file was submitted." +msgstr "Nenhum arquivo foi enviado." + +msgid "The submitted file is empty." +msgstr "O arquivo enviado está vazio." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Certifique-se de que o arquivo tenha no máximo %(max)d caractere (ele possui " +"%(length)d)." +msgstr[1] "" +"Certifique-se de que o arquivo tenha no máximo %(max)d caracteres (ele " +"possui %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor, envie um arquivo ou marque o checkbox, mas não ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está " +"corrompido." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Faça uma escolha válida. %(value)s não é uma das escolhas disponíveis." + +msgid "Enter a list of values." +msgstr "Informe uma lista de valores." + +msgid "Enter a complete value." +msgstr "Insira um valor completo." + +msgid "Enter a valid UUID." +msgstr "Insira um UUID válido." + +msgid "Enter a valid JSON." +msgstr "Insira um JSON válido" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Dados de ManagementForm estão faltando ou foram adulterados. Campos " +"ausentes: %(field_names)s. Você pode precisar enviar um relatório de bug se " +"o problema persistir." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Por favor, envie no máximo %d formulário." +msgstr[1] "Por favor, envie no máximo %d formulários." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Por favor, envie no mínimo %d formulário." +msgstr[1] "Por favor, envie no mínimo %d formulários." + +msgid "Order" +msgstr "Ordem" + +msgid "Delete" +msgstr "Remover" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija o valor duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor, corrija o valor duplicado para %(field)s, o qual deve ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor, corrija o dado duplicado para %(field_name)s, o qual deve ser " +"único para %(lookup)s em %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija os valores duplicados abaixo." + +msgid "The inline value did not match the parent instance." +msgstr "O valor na linha não correspondeu com a instância pai." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Faça uma escolha válida. Sua escolha não é uma das disponíveis." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” não é um valor válido." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s não pode ser interpretada dentro da fuso horário " +"%(current_timezone)s; está ambíguo ou não existe." + +msgid "Clear" +msgstr "Limpar" + +msgid "Currently" +msgstr "Atualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "sim,não,talvez" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "meia-noite" + +msgid "noon" +msgstr "meio-dia" + +msgid "Monday" +msgstr "Segunda-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Thursday" +msgstr "Quinta-feira" + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Seg" + +msgid "Tue" +msgstr "Ter" + +msgid "Wed" +msgstr "Qua" + +msgid "Thu" +msgstr "Qui" + +msgid "Fri" +msgstr "Sex" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "fev" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "out" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dez" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Março" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junho" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julho" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Out." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dez." + +msgctxt "alt. month" +msgid "January" +msgstr "Janeiro" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevereiro" + +msgctxt "alt. month" +msgid "March" +msgstr "Março" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Maio" + +msgctxt "alt. month" +msgid "June" +msgstr "Junho" + +msgctxt "alt. month" +msgid "July" +msgstr "Julho" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Setembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Outubro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Dezembro" + +msgid "This is not a valid IPv6 address." +msgstr "Este não é um endereço IPv6 válido." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr " %(truncated_text)s…" + +msgid "or" +msgstr "ou" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Proibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificação CSRF falhou. Pedido cancelado." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Se você configurou seu browser para desabilitar os cabeçalhos “Referer”, por " +"favor reabilite-os, ao menos para este site, ou para conexões HTTPS, ou para " +"requisições “same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Se estiver usando a tag ou " +"incluindo o cabeçalho “Referrer-Policy: no-referrer”, por favor remova-os. A " +"proteção CSRF requer o cabeçalho “Referer” para fazer a checagem de " +"referência. Se estiver preocupado com privacidade, use alternativas como para links de sites de terceiros." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Você está vendo esta mensagem, porque este site requer um cookie CSRF no " +"envio de formulários. Este cookie é necessário por razões de segurança, para " +"garantir que o seu browser não está sendo sequestrado por terceiros." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Se você configurou seu browser para desabilitar cookies, por favor reabilite-" +"os, ao menos para este site ou para requisições do tipo \"same-origin\"." + +msgid "More information is available with DEBUG=True." +msgstr "Mais informações estão disponíveis com DEBUG=True." + +msgid "No year specified" +msgstr "Ano não especificado" + +msgid "Date out of range" +msgstr "Data fora de alcance" + +msgid "No month specified" +msgstr "Mês não especificado" + +msgid "No day specified" +msgstr "Dia não especificado" + +msgid "No week specified" +msgstr "Semana não especificada" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nenhum(a) %(verbose_name_plural)s disponível" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s futuros não disponíveis pois %(class_name)s." +"allow_future é False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"String de data com formato inválido “%(datestr)s” dado o formato “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s não encontrado de acordo com a consulta" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Página não é “last”, e também não pode ser convertida para um int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Lista vazia e o \"%(class_name)s.allow_empty\" está como False." + +msgid "Directory indexes are not allowed here." +msgstr "Índices de diretório não são permitidos aqui." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" não existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s " + +msgid "The install worked successfully! Congratulations!" +msgstr "A instalação foi com sucesso! Parabéns!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ver as notas de lançamento do Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Você está vendo esta página pois possui DEBUG=True no seu arquivo de configurações e não configurou nenhuma " +"URL." + +msgid "Django Documentation" +msgstr "Documentação do Django" + +msgid "Topics, references, & how-to’s" +msgstr "Tópicos, referências, & how-to’s" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Um aplicativo de votação" + +msgid "Get started with Django" +msgstr "Comece a usar Django" + +msgid "Django Community" +msgstr "Comunidade Django" + +msgid "Connect, get help, or contribute" +msgstr "Conecte-se, obtenha ajuda ou contribua" diff --git a/venv/Lib/site-packages/django/conf/locale/pt_BR/__init__.py b/venv/Lib/site-packages/django/conf/locale/pt_BR/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/pt_BR/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/pt_BR/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24ec0d3ac7fc6c73b75e50f418473efb3628c76f GIT binary patch literal 198 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lK}oz*kbZo8W?p7Ve7s&k)T{C3jR!OG_Zpngr#KrdZaZfCCEyf^brae447a zeU5#LN;~aTX`i5nX-O$*SZ(>W-{1Q_k9}~|Y}To4{Q3H8%yAU;J5S1k$&ydmB6+|R zq%aL>%s>WLU~#T?{t6;|;PJi-9iW())~3fFIGSi=oi$H%aNoA4N)SX8H#w&py- zDBuUX%}pyxFHGKL=KmG=pEro`Suq7gFWC2_92S?No7Nt;yz4%5pi&@UQCNzCTb#C? zYTDjYUQl|1))TDs^$XM$rs>HcEri>b!e>+#KG6sI!yVnduVhcsJ5AW=OSbF{3{#VA z*sxWtNLqQN4BDY9WIOOfVe5q>Em1oH#$&_rvgr~M*IF_XMORS|k+J$U-L(_0Zsy_Td zZL+Vl3lHBed&nWdh9EN`#7F&Tk}QK&Owcflm1K+t;fBO#qfImqCNa7WR@dk%93v9O z!P(lMeD`MoL3r-3W|26FR#R~iP5eb5u4C`Q6sOT<>BpqI-rj-pWrUMO@R80gC-1Ys TvMgPm49C#yUjSIZ(t!R419-?` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/pt_BR/formats.py b/venv/Lib/site-packages/django/conf/locale/pt_BR/formats.py new file mode 100644 index 000000000..96a49b48c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/pt_BR/formats.py @@ -0,0 +1,34 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j \d\e F \d\e Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"j \d\e F \d\e Y à\s H:i" +YEAR_MONTH_FORMAT = r"F \d\e Y" +MONTH_DAY_FORMAT = r"j \d\e F" +SHORT_DATE_FORMAT = "d/m/Y" +SHORT_DATETIME_FORMAT = "d/m/Y H:i" +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # '25/10/2006' + "%d/%m/%y", # '25/10/06' + # "%d de %b de %Y", # '24 de Out de 2006' + # "%d de %b, %Y", # '25 Out, 2006' + # "%d de %B de %Y", # '25 de Outubro de 2006' + # "%d de %B, %Y", # '25 de Outubro, 2006' +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", # '25/10/2006 14:30:59' + "%d/%m/%Y %H:%M:%S.%f", # '25/10/2006 14:30:59.000200' + "%d/%m/%Y %H:%M", # '25/10/2006 14:30' + "%d/%m/%y %H:%M:%S", # '25/10/06 14:30:59' + "%d/%m/%y %H:%M:%S.%f", # '25/10/06 14:30:59.000200' + "%d/%m/%y %H:%M", # '25/10/06 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d863c2974bf824f357995729142b85754f89b1e GIT binary patch literal 22141 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, 2017 +# Bogdan Mateescu, 2018-2019 +# mihneasim , 2011 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2011,2014 +# Ionel Cristian Mărieș , 2012 +# Jannis Leidel , 2011 +# Răzvan Ionescu , 2015 +# Razvan Stefanescu , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 05:57+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabă" + +msgid "Asturian" +msgstr "Asturiană" + +msgid "Azerbaijani" +msgstr "Azeră" + +msgid "Bulgarian" +msgstr "Bulgară" + +msgid "Belarusian" +msgstr "Bielorusă" + +msgid "Bengali" +msgstr "Bengaleză" + +msgid "Breton" +msgstr "Bretonă" + +msgid "Bosnian" +msgstr "Bosniacă" + +msgid "Catalan" +msgstr "Catalană" + +msgid "Czech" +msgstr "Cehă" + +msgid "Welsh" +msgstr "Galeză" + +msgid "Danish" +msgstr "Daneză" + +msgid "German" +msgstr "Germană" + +msgid "Lower Sorbian" +msgstr "Soraba Inferioară" + +msgid "Greek" +msgstr "Greacă" + +msgid "English" +msgstr "Engleză" + +msgid "Australian English" +msgstr "Engleză australiană" + +msgid "British English" +msgstr "Engleză britanică" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spaniolă" + +msgid "Argentinian Spanish" +msgstr "Spaniolă Argentiniană" + +msgid "Colombian Spanish" +msgstr "Spaniolă Columbiană" + +msgid "Mexican Spanish" +msgstr "Spaniolă Mexicană" + +msgid "Nicaraguan Spanish" +msgstr "Spaniolă Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Spaniolă venezueleană" + +msgid "Estonian" +msgstr "Estonă" + +msgid "Basque" +msgstr "Bască" + +msgid "Persian" +msgstr "Persană" + +msgid "Finnish" +msgstr "Finlandeză" + +msgid "French" +msgstr "Franceză" + +msgid "Frisian" +msgstr "Frizian" + +msgid "Irish" +msgstr "Irlandeză" + +msgid "Scottish Gaelic" +msgstr "Galeză Scoțiană" + +msgid "Galician" +msgstr "Galiciană" + +msgid "Hebrew" +msgstr "Ebraică" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croată" + +msgid "Upper Sorbian" +msgstr "Soraba Superioară" + +msgid "Hungarian" +msgstr "Ungară" + +msgid "Armenian" +msgstr "Armeană" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneză" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeză" + +msgid "Italian" +msgstr "Italiană" + +msgid "Japanese" +msgstr "Japoneză" + +msgid "Georgian" +msgstr "Georgiană" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Kazahă" + +msgid "Khmer" +msgstr "Khmeră" + +msgid "Kannada" +msgstr "Limba kannada" + +msgid "Korean" +msgstr "Koreană" + +msgid "Luxembourgish" +msgstr "Luxemburgheză" + +msgid "Lithuanian" +msgstr "Lituaniană" + +msgid "Latvian" +msgstr "Letonă" + +msgid "Macedonian" +msgstr "Macedoneană" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolă" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmeză" + +msgid "Norwegian Bokmål" +msgstr "Norvegiana modernă" + +msgid "Nepali" +msgstr "Nepaleză" + +msgid "Dutch" +msgstr "Olandeză" + +msgid "Norwegian Nynorsk" +msgstr "Norvegiană Nynorsk" + +msgid "Ossetic" +msgstr "Osețiană" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Poloneză" + +msgid "Portuguese" +msgstr "Portugheză" + +msgid "Brazilian Portuguese" +msgstr "Portugheză braziliană" + +msgid "Romanian" +msgstr "Română" + +msgid "Russian" +msgstr "Rusă" + +msgid "Slovak" +msgstr "Slovacă" + +msgid "Slovenian" +msgstr "Slovenă" + +msgid "Albanian" +msgstr "Albaneză" + +msgid "Serbian" +msgstr "Sârbă" + +msgid "Serbian Latin" +msgstr "Sârbă latină" + +msgid "Swedish" +msgstr "Suedeză" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Limba tamila" + +msgid "Telugu" +msgstr "Limba telugu" + +msgid "Thai" +msgstr "Tailandeză" + +msgid "Turkish" +msgstr "Turcă" + +msgid "Tatar" +msgstr "Tătară" + +msgid "Udmurt" +msgstr "Udmurtă" + +msgid "Ukrainian" +msgstr "Ucraineană" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbecă" + +msgid "Vietnamese" +msgstr "Vietnameză" + +msgid "Simplified Chinese" +msgstr "Chineză simplificată" + +msgid "Traditional Chinese" +msgstr "Chineză tradițională" + +msgid "Messages" +msgstr "Mesaje" + +msgid "Site Maps" +msgstr "Harta sit-ului" + +msgid "Static Files" +msgstr "Fișiere statice" + +msgid "Syndication" +msgstr "Sindicalizare" + +msgid "That page number is not an integer" +msgstr "Numărul de pagină nu este întreg" + +msgid "That page number is less than 1" +msgstr "Numărul de pagină este mai mic decât 1" + +msgid "That page contains no results" +msgstr "Această pagină nu conține nici un rezultat" + +msgid "Enter a valid value." +msgstr "Introduceți o valoare validă." + +msgid "Enter a valid URL." +msgstr "Introduceți un URL valid." + +msgid "Enter a valid integer." +msgstr "Introduceți un întreg valid." + +msgid "Enter a valid email address." +msgstr "Introduceți o adresă de email validă." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Introduceți un “slug” valid care constă în litere, numere, underscore sau " +"cratime." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Introduceţi o adresă IPv4 validă." + +msgid "Enter a valid IPv6 address." +msgstr "Intoduceți o adresă IPv6 validă." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Introduceți o adresă IPv4 sau IPv6 validă." + +msgid "Enter only digits separated by commas." +msgstr "Introduceţi numai numere separate de virgule." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Asiguraţi-vă că această valoare este %(limit_value)s (este %(show_value)s )." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Asiguraţi-vă că această valoare este mai mică sau egală cu %(limit_value)s ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Asiguraţi-vă că această valoare este mai mare sau egală cu %(limit_value)s ." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asigurați-vă că această valoare are cel puțin %(limit_value)d caracter (are " +"%(show_value)d)." +msgstr[1] "" +"Asigurați-vă că această valoare are cel puțin %(limit_value)d caractere (are " +"%(show_value)d)." +msgstr[2] "" +"Asigurați-vă că această valoare are cel puțin %(limit_value)d de caractere " +"(are %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asigurați-vă că această valoare are cel mult %(limit_value)d caracter (are " +"%(show_value)d)." +msgstr[1] "" +"Asigurați-vă că această valoare are cel mult %(limit_value)d caractere (are " +"%(show_value)d)." +msgstr[2] "" +"Asigurați-vă că această valoare are cel mult %(limit_value)d de caractere " +"(are %(show_value)d)." + +msgid "Enter a number." +msgstr "Introduceţi un număr." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asigurați-vă că nu este mai mult de %(max)s cifră în total." +msgstr[1] "Asigurați-vă că nu sunt mai mult de %(max)s cifre în total." +msgstr[2] "Asigurați-vă că nu sunt mai mult de %(max)s de cifre în total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asigurați-vă că nu este mai mult de %(max)s zecimală în total." +msgstr[1] "Asigurați-vă că nu sunt mai mult de %(max)s zecimale în total." +msgstr[2] "Asigurați-vă că nu sunt mai mult de %(max)s de zecimale în total." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asigurați-vă că nu este mai mult de %(max)s cifră înainte de punctul zecimal." +msgstr[1] "" +"Asigurați-vă că nu sunt mai mult de %(max)s cifre înainte de punctul zecimal." +msgstr[2] "" +"Asigurați-vă că nu sunt mai mult de %(max)s de cifre înainte de punctul " +"zecimal." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Caracterele Null nu sunt permise." + +msgid "and" +msgstr "și" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s cu acest %(field_labels)s există deja." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valoarea %(value)r nu este o opțiune validă." + +msgid "This field cannot be null." +msgstr "Acest câmp nu poate fi nul." + +msgid "This field cannot be blank." +msgstr "Acest câmp nu poate fi gol." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s cu %(field_label)s deja există." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s trebuie să fie unic(e) pentru %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Câmp de tip: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (adevărat sau fals)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Şir de caractere (cel mult %(max_length)s caractere)" + +msgid "Comma-separated integers" +msgstr "Numere întregi separate de virgule" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dată (fară oră)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dată (cu oră)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Număr zecimal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Durată" + +msgid "Email address" +msgstr "Adresă e-mail" + +msgid "File path" +msgstr "Calea fisierului" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Număr cu virgulă" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Întreg" + +msgid "Big (8 byte) integer" +msgstr "Întreg mare (8 octeți)" + +msgid "IPv4 address" +msgstr "Adresă IPv4" + +msgid "IP address" +msgstr "Adresă IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (adevărat, fals sau niciuna)" + +msgid "Positive integer" +msgstr "Întreg pozitiv" + +msgid "Positive small integer" +msgstr "Întreg pozitiv mic" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (până la %(max_length)s)" + +msgid "Small integer" +msgstr "Întreg mic" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Timp" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Date binare brute" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "Identificator unic universal" + +msgid "File" +msgstr "Fișier" + +msgid "Image" +msgstr "Imagine" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Instanța %(model)s cu %(field)s %(value)r inexistentă." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (tip determinat de câmpul aferent)" + +msgid "One-to-one relationship" +msgstr "Relaţie unul-la-unul" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relație %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relații %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relație multe-la-multe" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Acest câmp este obligatoriu." + +msgid "Enter a whole number." +msgstr "Introduceţi un număr întreg." + +msgid "Enter a valid date." +msgstr "Introduceți o dată validă." + +msgid "Enter a valid time." +msgstr "Introduceți o oră validă." + +msgid "Enter a valid date/time." +msgstr "Introduceți o dată/oră validă." + +msgid "Enter a valid duration." +msgstr "Introduceți o durată validă." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Numărul de zile trebuie să fie cuprins între {min_days} și {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nici un fișier nu a fost trimis. Verificați tipul fișierului." + +msgid "No file was submitted." +msgstr "Nici un fișier nu a fost trimis." + +msgid "The submitted file is empty." +msgstr "Fișierul încărcat este gol." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asigurați-vă că numele fișierului are cel mult %(max)d caracter (are " +"%(length)d)." +msgstr[1] "" +"Asigurați-vă că numele fișierului are cel mult %(max)d caractere (are " +"%(length)d)." +msgstr[2] "" +"Asigurați-vă că numele fișierului are cel mult %(max)d de caractere (are " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Fie indicați un fişier, fie bifaţi caseta de selectare, nu ambele." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Încărcaţi o imagine validă. Fişierul încărcat nu era o imagine sau era o " +"imagine coruptă." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selectați o opțiune validă. %(value)s nu face parte din opțiunile " +"disponibile." + +msgid "Enter a list of values." +msgstr "Introduceți o listă de valori." + +msgid "Enter a complete value." +msgstr "Introduceți o valoare completă." + +msgid "Enter a valid UUID." +msgstr "Introduceți un UUID valid." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Câmp ascuns %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Datele pentru ManagementForm lipsesc sau au fost alterate" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Trimiteți maxim %d formular." +msgstr[1] "Trimiteți maxim %d formulare." +msgstr[2] "Trimiteți maxim %d de formulare." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Trimiteți minim %d formular." +msgstr[1] "Trimiteți minim %d formulare." +msgstr[2] "Trimiteți minim %d de formulare." + +msgid "Order" +msgstr "Ordine" + +msgid "Delete" +msgstr "Șterge" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Corectaţi datele duplicate pentru %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Corectaţi datele duplicate pentru %(field)s , ce trebuie să fie unic." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Corectaţi datele duplicate pentru %(field_name)s , care trebuie să fie unice " +"pentru %(lookup)s în %(date_field)s ." + +msgid "Please correct the duplicate values below." +msgstr "Corectaţi valorile duplicate de mai jos." + +msgid "The inline value did not match the parent instance." +msgstr "Valoarea în linie nu s-a potrivit cu instanța părinte." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Selectați o opțiune validă. Această opțiune nu face parte din opțiunile " +"disponibile." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Șterge" + +msgid "Currently" +msgstr "În prezent" + +msgid "Change" +msgstr "Schimbă" + +msgid "Unknown" +msgstr "Necunoscut" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Nu" + +msgid "Year" +msgstr "Anul" + +msgid "Month" +msgstr "Luna" + +msgid "Day" +msgstr "Ziua" + +msgid "yes,no,maybe" +msgstr "da,nu,poate" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d octet" +msgstr[1] "%(size)d octeţi" +msgstr[2] "%(size)d de octeţi" + +#, python-format +msgid "%s KB" +msgstr "%s KO" + +#, python-format +msgid "%s MB" +msgstr "%s MO" + +#, python-format +msgid "%s GB" +msgstr "%s GO" + +#, python-format +msgid "%s TB" +msgstr "%s TO" + +#, python-format +msgid "%s PB" +msgstr "%s PO" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "miezul nopții" + +msgid "noon" +msgstr "amiază" + +msgid "Monday" +msgstr "Luni" + +msgid "Tuesday" +msgstr "Marți" + +msgid "Wednesday" +msgstr "Miercuri" + +msgid "Thursday" +msgstr "Joi" + +msgid "Friday" +msgstr "Vineri" + +msgid "Saturday" +msgstr "Sâmbătă" + +msgid "Sunday" +msgstr "Duminică" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mie" + +msgid "Thu" +msgstr "Joi" + +msgid "Fri" +msgstr "Vin" + +msgid "Sat" +msgstr "Sâm" + +msgid "Sun" +msgstr "Dum" + +msgid "January" +msgstr "Ianuarie" + +msgid "February" +msgstr "Februarie" + +msgid "March" +msgstr "Martie" + +msgid "April" +msgstr "Aprilie" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Iunie" + +msgid "July" +msgstr "Iulie" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "Septembrie" + +msgid "October" +msgstr "Octombrie" + +msgid "November" +msgstr "Noiembrie" + +msgid "December" +msgstr "Decembrie" + +msgid "jan" +msgstr "ian" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "iun" + +msgid "jul" +msgstr "iul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "noi" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ian." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Martie" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprilie" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Iunie" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Iulie" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Noie." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Ianuarie" + +msgctxt "alt. month" +msgid "February" +msgstr "Februarie" + +msgctxt "alt. month" +msgid "March" +msgstr "Martie" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprilie" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Iunie" + +msgctxt "alt. month" +msgid "July" +msgstr "Iulie" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembrie" + +msgctxt "alt. month" +msgid "October" +msgstr "Octombrie" + +msgctxt "alt. month" +msgid "November" +msgstr "Noiembrie" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembrie" + +msgid "This is not a valid IPv6 address." +msgstr "Aceasta nu este o adresă IPv6 validă." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "sau" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d an" +msgstr[1] "%d ani" +msgstr[2] "%d de ani" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d lună" +msgstr[1] "%d luni" +msgstr[2] "%d de luni" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d săptămână" +msgstr[1] "%d săptămâni" +msgstr[2] "%d de săptămâni" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d zi" +msgstr[1] "%d zile" +msgstr[2] "%d de zile" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d oră" +msgstr[1] "%d ore" +msgstr[2] "%d de ore" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minute" +msgstr[2] "%d de minute" + +msgid "0 minutes" +msgstr "0 minute" + +msgid "Forbidden" +msgstr "Interzis" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificarea CSRF nereușită. Cerere eșuată." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Vedeți acest mesaj deoarece această pagină web necesită un cookie CSRF la " +"trimiterea formularelor. Acest cookie este necesar din motive de securitate, " +"pentru a se asigura că browserul nu este deturnat de terți." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Mai multe informații sunt disponibile pentru DEBUG=True." + +msgid "No year specified" +msgstr "Niciun an specificat" + +msgid "Date out of range" +msgstr "Dată în afara intervalului" + +msgid "No month specified" +msgstr "Nicio lună specificată" + +msgid "No day specified" +msgstr "Nicio zi specificată" + +msgid "No week specified" +msgstr "Nicio săptămîna specificată" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nu e disponibil" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Viitorul %(verbose_name_plural)s nu e disponibil deoarece %(class_name)s ." +"allow_future este Fals." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Niciun rezultat pentru %(verbose_name)s care se potrivesc interogării" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Pagină invalidă (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Aici nu sunt permise indexuri la directoare" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index pentru %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: Framework-ul web pentru perfecționiști cu termene limită." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Vezi notele de lansare pentru Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalarea a funcționat cu succes! Felicitări!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Vedeți această pagină deoarece DEBUG=True este în fișierul de setări și nu ați configurat niciun URL." + +msgid "Django Documentation" +msgstr "Documentația Django" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: O aplicație de votare" + +msgid "Get started with Django" +msgstr "Începeți cu Django" + +msgid "Django Community" +msgstr "Comunitatea Django" + +msgid "Connect, get help, or contribute" +msgstr "Conectați-vă, obțineți ajutor sau contribuiți" diff --git a/venv/Lib/site-packages/django/conf/locale/ro/__init__.py b/venv/Lib/site-packages/django/conf/locale/ro/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ro/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ro/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aae9f74994be82782bde468efb1d926c1f7b99e1 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lQNDhBd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04uyS;{X5v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ro/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ro/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d029df41400ab01d9c57b7f48d9d8699707971f6 GIT binary patch literal 769 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 Bm1O_` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..7c202fe6e --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1385 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mingun , 2014 +# Anton Bazhanov , 2017 +# Denis Darii , 2011 +# Dimmus , 2011 +# eigrad , 2012 +# Eugene , 2013 +# Eugene Morozov , 2021 +# eXtractor , 2015 +# crazyzubr , 2020 +# Igor Melnyk, 2014 +# Ivan Khomutov , 2017 +# Jannis Leidel , 2011 +# lilo.panic, 2016 +# Mikhail Zholobov , 2013 +# Nikolay Korotkiy , 2018 +# Panasoft, 2021 +# Вася Аникин , 2017 +# SeryiMysh , 2020 +# Алексей Борискин , 2013-2017,2019-2020 +# Дмитрий Шатера , 2016,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Бурский" + +msgid "Arabic" +msgstr "Арабский" + +msgid "Algerian Arabic" +msgstr "Алжирский арабский" + +msgid "Asturian" +msgstr "Астурийский" + +msgid "Azerbaijani" +msgstr "Азербайджанский" + +msgid "Bulgarian" +msgstr "Болгарский" + +msgid "Belarusian" +msgstr "Белоруский" + +msgid "Bengali" +msgstr "Бенгальский" + +msgid "Breton" +msgstr "Бретонский" + +msgid "Bosnian" +msgstr "Боснийский" + +msgid "Catalan" +msgstr "Каталанский" + +msgid "Czech" +msgstr "Чешский" + +msgid "Welsh" +msgstr "Уэльский" + +msgid "Danish" +msgstr "Датский" + +msgid "German" +msgstr "Немецкий" + +msgid "Lower Sorbian" +msgstr "Нижнелужицкий" + +msgid "Greek" +msgstr "Греческий" + +msgid "English" +msgstr "Английский" + +msgid "Australian English" +msgstr "Австралийский английский" + +msgid "British English" +msgstr "Британский английский" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испанский" + +msgid "Argentinian Spanish" +msgstr "Аргентинский испанский" + +msgid "Colombian Spanish" +msgstr "Колумбийский испанский" + +msgid "Mexican Spanish" +msgstr "Мексиканский испанский" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуанский испанский" + +msgid "Venezuelan Spanish" +msgstr "Венесуэльский Испанский" + +msgid "Estonian" +msgstr "Эстонский" + +msgid "Basque" +msgstr "Баскский" + +msgid "Persian" +msgstr "Персидский" + +msgid "Finnish" +msgstr "Финский" + +msgid "French" +msgstr "Французский" + +msgid "Frisian" +msgstr "Фризский" + +msgid "Irish" +msgstr "Ирландский" + +msgid "Scottish Gaelic" +msgstr "Шотландский гэльский" + +msgid "Galician" +msgstr "Галисийский" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорватский" + +msgid "Upper Sorbian" +msgstr "Верхнелужицкий" + +msgid "Hungarian" +msgstr "Венгерский" + +msgid "Armenian" +msgstr "Армянский" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонезийский" + +msgid "Igbo" +msgstr "Игбо" + +msgid "Ido" +msgstr "Идо" + +msgid "Icelandic" +msgstr "Исландский" + +msgid "Italian" +msgstr "Итальянский" + +msgid "Japanese" +msgstr "Японский" + +msgid "Georgian" +msgstr "Грузинский" + +msgid "Kabyle" +msgstr "Кабильский" + +msgid "Kazakh" +msgstr "Казахский" + +msgid "Khmer" +msgstr "Кхмерский" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Korean" +msgstr "Корейский" + +msgid "Kyrgyz" +msgstr "Киргизский" + +msgid "Luxembourgish" +msgstr "Люксембургский" + +msgid "Lithuanian" +msgstr "Литовский" + +msgid "Latvian" +msgstr "Латвийский" + +msgid "Macedonian" +msgstr "Македонский" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монгольский" + +msgid "Marathi" +msgstr "Маратхи" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Бирманский" + +msgid "Norwegian Bokmål" +msgstr "Норвежский (Букмол)" + +msgid "Nepali" +msgstr "Непальский" + +msgid "Dutch" +msgstr "Голландский" + +msgid "Norwegian Nynorsk" +msgstr "Норвежский (Нюнорск)" + +msgid "Ossetic" +msgstr "Осетинский" + +msgid "Punjabi" +msgstr "Панджаби" + +msgid "Polish" +msgstr "Польский" + +msgid "Portuguese" +msgstr "Португальский" + +msgid "Brazilian Portuguese" +msgstr "Бразильский португальский" + +msgid "Romanian" +msgstr "Румынский" + +msgid "Russian" +msgstr "Русский" + +msgid "Slovak" +msgstr "Словацкий" + +msgid "Slovenian" +msgstr "Словенский" + +msgid "Albanian" +msgstr "Албанский" + +msgid "Serbian" +msgstr "Сербский" + +msgid "Serbian Latin" +msgstr "Сербский (латиница)" + +msgid "Swedish" +msgstr "Шведский" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамильский" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Tajik" +msgstr "Таджикский" + +msgid "Thai" +msgstr "Тайский" + +msgid "Turkmen" +msgstr "Туркменский" + +msgid "Turkish" +msgstr "Турецкий" + +msgid "Tatar" +msgstr "Татарский" + +msgid "Udmurt" +msgstr "Удмуртский" + +msgid "Ukrainian" +msgstr "Украинский" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "Узбекский" + +msgid "Vietnamese" +msgstr "Вьетнамский" + +msgid "Simplified Chinese" +msgstr "Упрощенный китайский" + +msgid "Traditional Chinese" +msgstr "Традиционный китайский" + +msgid "Messages" +msgstr "Сообщения" + +msgid "Site Maps" +msgstr "Карта сайта" + +msgid "Static Files" +msgstr "Статические файлы" + +msgid "Syndication" +msgstr "Ленты новостей" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Номер страницы не является натуральным числом" + +msgid "That page number is less than 1" +msgstr "Номер страницы меньше 1" + +msgid "That page contains no results" +msgstr "Страница не содержит результатов" + +msgid "Enter a valid value." +msgstr "Введите правильное значение." + +msgid "Enter a valid URL." +msgstr "Введите правильный URL." + +msgid "Enter a valid integer." +msgstr "Введите правильное число." + +msgid "Enter a valid email address." +msgstr "Введите правильный адрес электронной почты." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Значение должно состоять только из латинских букв, цифр, знаков " +"подчеркивания или дефиса." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Значение должно состоять только из символов входящих в стандарт Юникод, " +"цифр, символов подчёркивания или дефисов." + +msgid "Enter a valid IPv4 address." +msgstr "Введите правильный IPv4 адрес." + +msgid "Enter a valid IPv6 address." +msgstr "Введите действительный IPv6 адрес." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Введите действительный IPv4 или IPv6 адрес." + +msgid "Enter only digits separated by commas." +msgstr "Введите цифры, разделенные запятыми." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Убедитесь, что это значение — %(limit_value)s (сейчас оно — %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Убедитесь, что это значение меньше либо равно %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Убедитесь, что это значение больше либо равно %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символ (сейчас " +"%(show_value)d)." +msgstr[1] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[2] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[3] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символ (сейчас " +"%(show_value)d)." +msgstr[1] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[2] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[3] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." + +msgid "Enter a number." +msgstr "Введите число." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры после запятой." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры перед запятой." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Расширение файлов “%(extension)s” не поддерживается. Разрешенные расширения: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Данные содержат запрещённый символ: ноль-байт" + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" +"%(model_name)s с такими значениями полей %(field_labels)s уже существует." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Значения %(value)r нет среди допустимых вариантов." + +msgid "This field cannot be null." +msgstr "Это поле не может иметь значение NULL." + +msgid "This field cannot be blank." +msgstr "Это поле не может быть пустым." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s с таким %(field_label)s уже существует." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Значение в поле «%(field_label)s» должно быть уникальным для фрагмента " +"«%(lookup_type)s» даты в поле %(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поле типа %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Значение “%(value)s” должно быть True или False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Значение “%(value)s” должно быть True, False или None." + +msgid "Boolean (Either True or False)" +msgstr "Логическое (True или False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Строка (до %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Целые, разделенные запятыми" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Значение “%(value)s” имеет неверный формат даты. Оно должно быть в формате " +"YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Значение “%(value)s” имеет корректный формат (YYYY-MM-DD), но это " +"недействительная дата." + +msgid "Date (without time)" +msgstr "Дата (без указания времени)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Значение “%(value)s” имеет неверный формат. Оно должно быть в формате YYYY-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Значение “%(value)s” имеет корректный формат (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), но это недействительные дата/время." + +msgid "Date (with time)" +msgstr "Дата (с указанием времени)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Значение “%(value)s” должно быть десятичным числом." + +msgid "Decimal number" +msgstr "Число с фиксированной запятой" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Значение “%(value)s” имеет неверный формат. Оно должно быть в формате [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Продолжительность" + +msgid "Email address" +msgstr "Адрес электронной почты" + +msgid "File path" +msgstr "Путь к файлу" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Значение “%(value)s” должно быть числом с плавающей точкой." + +msgid "Floating point number" +msgstr "Число с плавающей запятой" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Значение “%(value)s” должно быть целым числом." + +msgid "Integer" +msgstr "Целое" + +msgid "Big (8 byte) integer" +msgstr "Длинное целое (8 байт)" + +msgid "Small integer" +msgstr "Малое целое число" + +msgid "IPv4 address" +msgstr "IPv4 адрес" + +msgid "IP address" +msgstr "IP-адрес" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Значение “%(value)s” должно быть None, True или False." + +msgid "Boolean (Either True, False or None)" +msgstr "Логическое (True, False или None)" + +msgid "Positive big integer" +msgstr "Положительное большое целое число" + +msgid "Positive integer" +msgstr "Положительное целое число" + +msgid "Positive small integer" +msgstr "Положительное малое целое число" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (до %(max_length)s)" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Значение “%(value)s” имеет неверный формат. Оно должно быть в формате HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Значение “%(value)s” имеет корректный формат (HH:MM[:ss[.uuuuuu]]), но это " +"недействительное время." + +msgid "Time" +msgstr "Время" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Необработанные двоичные данные" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "Значение “%(value)s” не является верным UUID-ом." + +msgid "Universally unique identifier" +msgstr "Поле для UUID, универсального уникального идентификатора" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Изображение" + +msgid "A JSON object" +msgstr "JSON-объект" + +msgid "Value must be valid JSON." +msgstr "Значение должно быть корректным JSON-ом." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Объект модели %(model)s со значением поля %(field)s, равным %(value)r, не " +"существует." + +msgid "Foreign Key (type determined by related field)" +msgstr "Внешний Ключ (тип определен по связанному полю)" + +msgid "One-to-one relationship" +msgstr "Связь \"один к одному\"" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Связь %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Связи %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Связь \"многие ко многим\"" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Обязательное поле." + +msgid "Enter a whole number." +msgstr "Введите целое число." + +msgid "Enter a valid date." +msgstr "Введите правильную дату." + +msgid "Enter a valid time." +msgstr "Введите правильное время." + +msgid "Enter a valid date/time." +msgstr "Введите правильную дату и время." + +msgid "Enter a valid duration." +msgstr "Введите правильную продолжительность." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Количество дней должно быть в диапазоне от {min_days} до {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ни одного файла не было отправлено. Проверьте тип кодировки формы." + +msgid "No file was submitted." +msgstr "Ни одного файла не было отправлено." + +msgid "The submitted file is empty." +msgstr "Отправленный файл пуст." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Убедитесь, что это имя файла содержит не более %(max)d символ (сейчас " +"%(length)d)." +msgstr[1] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." +msgstr[2] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." +msgstr[3] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Пожалуйста, загрузите файл или поставьте флажок \"Очистить\", но не " +"совершайте оба действия одновременно." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Загрузите правильное изображение. Файл, который вы загрузили, поврежден или " +"не является изображением." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Выберите корректный вариант. %(value)s нет среди допустимых значений." + +msgid "Enter a list of values." +msgstr "Введите список значений." + +msgid "Enter a complete value." +msgstr "Введите весь список значений." + +msgid "Enter a valid UUID." +msgstr "Введите правильный UUID." + +msgid "Enter a valid JSON." +msgstr "Введите корректный JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скрытое поле %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Данные ManagementForm отсутствуют или были подделаны. Отсутствующие поля: " +"%(field_names)s. Если проблема не исчезнет, вам может потребоваться " +"отправить отчет об ошибке." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Пожалуйста, отправляйте не больше %d формы." +msgstr[1] "Пожалуйста, отправляйте не больше %d форм." +msgstr[2] "Пожалуйста, отправляйте не больше %d форм." +msgstr[3] "Пожалуйста, отправляйте не больше %d форм." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Пожалуйста, отправьте хотя бы %d форму." +msgstr[1] "Пожалуйста, отправьте хотя бы %d форм." +msgstr[2] "Пожалуйста, отправьте хотя бы %d форм." +msgstr[3] "Пожалуйста, отправьте хотя бы %d форм." + +msgid "Order" +msgstr "Порядок" + +msgid "Delete" +msgstr "Удалить" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Пожалуйста, измените повторяющееся значение в поле \"%(field)s\"." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Пожалуйста, измените значение в поле %(field)s, оно должно быть уникальным." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Пожалуйста, измените значение в поле %(field_name)s, оно должно быть " +"уникальным для %(lookup)s в поле %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Пожалуйста, измените повторяющиеся значения ниже." + +msgid "The inline value did not match the parent instance." +msgstr "Значение во вложенной форме не совпадает со значением в базовой форме." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Выберите корректный вариант. Вашего варианта нет среди допустимых значений." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” является неверным значением." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s не может быть интерпретирована в часовом поясе " +"%(current_timezone)s; дата может быть неоднозначной или оказаться " +"несуществующей." + +msgid "Clear" +msgstr "Очистить" + +msgid "Currently" +msgstr "На данный момент" + +msgid "Change" +msgstr "Изменить" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Нет" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "да,нет,может быть" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байта" +msgstr[2] "%(size)d байт" +msgstr[3] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "п.п." + +msgid "a.m." +msgstr "д.п." + +msgid "PM" +msgstr "ПП" + +msgid "AM" +msgstr "ДП" + +msgid "midnight" +msgstr "полночь" + +msgid "noon" +msgstr "полдень" + +msgid "Monday" +msgstr "Понедельник" + +msgid "Tuesday" +msgstr "Вторник" + +msgid "Wednesday" +msgstr "Среда" + +msgid "Thursday" +msgstr "Четверг" + +msgid "Friday" +msgstr "Пятница" + +msgid "Saturday" +msgstr "Суббота" + +msgid "Sunday" +msgstr "Воскресенье" + +msgid "Mon" +msgstr "Пн" + +msgid "Tue" +msgstr "Вт" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Чт" + +msgid "Fri" +msgstr "Пт" + +msgid "Sat" +msgstr "Сб" + +msgid "Sun" +msgstr "Вс" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "января" + +msgctxt "alt. month" +msgid "February" +msgstr "февраля" + +msgctxt "alt. month" +msgid "March" +msgstr "марта" + +msgctxt "alt. month" +msgid "April" +msgstr "апреля" + +msgctxt "alt. month" +msgid "May" +msgstr "мая" + +msgctxt "alt. month" +msgid "June" +msgstr "июня" + +msgctxt "alt. month" +msgid "July" +msgstr "июля" + +msgctxt "alt. month" +msgid "August" +msgstr "августа" + +msgctxt "alt. month" +msgid "September" +msgstr "сентября" + +msgctxt "alt. month" +msgid "October" +msgstr "октября" + +msgctxt "alt. month" +msgid "November" +msgstr "ноября" + +msgctxt "alt. month" +msgid "December" +msgstr "декабря" + +msgid "This is not a valid IPv6 address." +msgstr "Значение не является корректным адресом IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Forbidden" +msgstr "Ошибка доступа" + +msgid "CSRF verification failed. Request aborted." +msgstr "Ошибка проверки CSRF. Запрос отклонён." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Если вы настроили свой браузер таким образом, чтобы запретить ему передавать " +"заголовок “Referer”, пожалуйста, разрешите ему отсылать данный заголовок по " +"крайней мере для данного сайта, или для всех HTTPS-соединений, или для " +"запросов, домен и порт назначения совпадают с доменом и портом текущей " +"страницы." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Если Вы используете HTML-тэг или добавили HTTP-заголовок “Referrer-Policy: no-referrer”, пожалуйста " +"удалите их. CSRF защите необходим заголовок “Referer” для строгой проверки " +"адреса ссылающейся страницы. Если Вы беспокоитесь о приватности, используйте " +"альтернативы, например , для ссылок на сайты третьих " +"лиц." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Вы видите это сообщение, потому что данный сайт требует, чтобы при отправке " +"форм была отправлена и CSRF-cookie. Данный тип cookie необходим по " +"соображениям безопасности, чтобы убедиться, что ваш браузер не был взломан и " +"не выполняет от вашего лица действий, запрограммированных третьими лицами." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Если в вашем браузере отключены cookie, пожалуйста, включите эту функцию " +"вновь, по крайней мере для этого сайта, или для \"same-orign\" запросов." + +msgid "More information is available with DEBUG=True." +msgstr "" +"В отладочном режиме доступно больше информации. Включить отладочный режим " +"можно, установив значение переменной DEBUG=True." + +msgid "No year specified" +msgstr "Не указан год" + +msgid "Date out of range" +msgstr "Дата выходит за пределы диапазона" + +msgid "No month specified" +msgstr "Не указан месяц" + +msgid "No day specified" +msgstr "Не указан день" + +msgid "No week specified" +msgstr "Не указана неделя" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s не доступен" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Будущие %(verbose_name_plural)s недоступны, потому что %(class_name)s." +"allow_future выставлен в значение \"Ложь\"." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"Не удалось распознать строку с датой “%(datestr)s”, в заданном формате " +"“%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Не найден ни один %(verbose_name)s, соответствующий запросу" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Номер страницы не содержит особое значение “last” и его не удалось " +"преобразовать к целому числу." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Неправильная страница (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" +"Список пуст, но “%(class_name)s.allow_empty” выставлено в значение \"Ложь\", " +"что запрещает показывать пустые списки." + +msgid "Directory indexes are not allowed here." +msgstr "Просмотр списка файлов директории здесь не разрешен." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” не существует" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Список файлов директории %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Установка прошла успешно! Поздравляем!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Посмотреть примечания к выпуску для Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Вы видите данную страницу, потому что указали DEBUG=True в файле настроек и не настроили ни одного " +"обработчика URL-адресов." + +msgid "Django Documentation" +msgstr "Документация Django" + +msgid "Topics, references, & how-to’s" +msgstr "Разделы, справочник, & примеры" + +msgid "Tutorial: A Polling App" +msgstr "Руководство: Приложение для голосования" + +msgid "Get started with Django" +msgstr "Начало работы с Django" + +msgid "Django Community" +msgstr "Сообщество Django" + +msgid "Connect, get help, or contribute" +msgstr "Присоединяйтесь, получайте помощь или помогайте в разработке" diff --git a/venv/Lib/site-packages/django/conf/locale/ru/__init__.py b/venv/Lib/site-packages/django/conf/locale/ru/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ru/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ru/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2428ffd1a08e7ececa0be31974f32b64a5150235 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lQK^1>d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04#_!=>Px# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ru/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ru/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf14e3271b856a967c43ea37a18463b1e3a689e3 GIT binary patch literal 748 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, 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2013 +# Marian Andre , 2013,2015,2017-2018 +# Martin Kosír, 2011 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +# Peter Stríž , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 21:19+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Afrikaans" +msgstr "afrikánsky" + +msgid "Arabic" +msgstr "arabský" + +msgid "Algerian Arabic" +msgstr "alžírsky arabsky" + +msgid "Asturian" +msgstr "astúrsky" + +msgid "Azerbaijani" +msgstr "azerbajdžansky" + +msgid "Bulgarian" +msgstr "bulharsky" + +msgid "Belarusian" +msgstr "bielorusky" + +msgid "Bengali" +msgstr "bengálsky" + +msgid "Breton" +msgstr "bretónsky" + +msgid "Bosnian" +msgstr "bosniansky" + +msgid "Catalan" +msgstr "katalánsky" + +msgid "Czech" +msgstr "česky" + +msgid "Welsh" +msgstr "walesky" + +msgid "Danish" +msgstr "dánsky" + +msgid "German" +msgstr "nemecky" + +msgid "Lower Sorbian" +msgstr "dolnolužická srbčina" + +msgid "Greek" +msgstr "grécky" + +msgid "English" +msgstr "anglicky" + +msgid "Australian English" +msgstr "austrálskou angličtinou" + +msgid "British English" +msgstr "britskou angličtinou" + +msgid "Esperanto" +msgstr "esperantsky" + +msgid "Spanish" +msgstr "španielsky" + +msgid "Argentinian Spanish" +msgstr "argentínska španielčina" + +msgid "Colombian Spanish" +msgstr "kolumbijská španielčina" + +msgid "Mexican Spanish" +msgstr "mexická španielčina" + +msgid "Nicaraguan Spanish" +msgstr "nikaragujská španielčina" + +msgid "Venezuelan Spanish" +msgstr "venezuelská španielčina" + +msgid "Estonian" +msgstr "estónsky" + +msgid "Basque" +msgstr "baskicky" + +msgid "Persian" +msgstr "perzsky" + +msgid "Finnish" +msgstr "fínsky" + +msgid "French" +msgstr "francúzsky" + +msgid "Frisian" +msgstr "frízsky" + +msgid "Irish" +msgstr "írsky" + +msgid "Scottish Gaelic" +msgstr "škótska gaelčina" + +msgid "Galician" +msgstr "galícijsky" + +msgid "Hebrew" +msgstr "hebrejsky" + +msgid "Hindi" +msgstr "hindsky" + +msgid "Croatian" +msgstr "chorvátsky" + +msgid "Upper Sorbian" +msgstr "hornolužická srbčina" + +msgid "Hungarian" +msgstr "maďarsky" + +msgid "Armenian" +msgstr "arménsky" + +msgid "Interlingua" +msgstr "interlinguánsky" + +msgid "Indonesian" +msgstr "indonézsky" + +msgid "Igbo" +msgstr "igbožsky" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandsky" + +msgid "Italian" +msgstr "taliansky" + +msgid "Japanese" +msgstr "japonsky" + +msgid "Georgian" +msgstr "gruzínsky" + +msgid "Kabyle" +msgstr "kabylsky" + +msgid "Kazakh" +msgstr "kazašsky" + +msgid "Khmer" +msgstr "kmérsky" + +msgid "Kannada" +msgstr "kannadsky" + +msgid "Korean" +msgstr "kórejsky" + +msgid "Kyrgyz" +msgstr "kirgizsky" + +msgid "Luxembourgish" +msgstr "luxembursky" + +msgid "Lithuanian" +msgstr "litovsky" + +msgid "Latvian" +msgstr "lotyšsky" + +msgid "Macedonian" +msgstr "macedónsky" + +msgid "Malayalam" +msgstr "malajalámsky" + +msgid "Mongolian" +msgstr "mongolsky" + +msgid "Marathi" +msgstr "maráthsky" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "barmsky" + +msgid "Norwegian Bokmål" +msgstr "nórsky (Bokmål)" + +msgid "Nepali" +msgstr "nepálsky" + +msgid "Dutch" +msgstr "holandsky" + +msgid "Norwegian Nynorsk" +msgstr "nórsky (Nynorsk)" + +msgid "Ossetic" +msgstr "osetsky" + +msgid "Punjabi" +msgstr "pandžábsky" + +msgid "Polish" +msgstr "poľsky" + +msgid "Portuguese" +msgstr "portugalsky" + +msgid "Brazilian Portuguese" +msgstr "portugalsky (Brazília)" + +msgid "Romanian" +msgstr "rumunsky" + +msgid "Russian" +msgstr "rusky" + +msgid "Slovak" +msgstr "slovensky" + +msgid "Slovenian" +msgstr "slovinsky" + +msgid "Albanian" +msgstr "albánsky" + +msgid "Serbian" +msgstr "srbsky" + +msgid "Serbian Latin" +msgstr "srbsky (Latin)" + +msgid "Swedish" +msgstr "švédsky" + +msgid "Swahili" +msgstr "svahilsky" + +msgid "Tamil" +msgstr "tamilsky" + +msgid "Telugu" +msgstr "telugsky" + +msgid "Tajik" +msgstr "tadžiksky" + +msgid "Thai" +msgstr "thajsky" + +msgid "Turkmen" +msgstr "turkménsky" + +msgid "Turkish" +msgstr "turecky" + +msgid "Tatar" +msgstr "tatársky" + +msgid "Udmurt" +msgstr "udmurtsky" + +msgid "Ukrainian" +msgstr "ukrajinsky" + +msgid "Urdu" +msgstr "urdsky" + +msgid "Uzbek" +msgstr "uzbecky" + +msgid "Vietnamese" +msgstr "vietnamsky" + +msgid "Simplified Chinese" +msgstr "čínsky (zjednodušene)" + +msgid "Traditional Chinese" +msgstr "čínsky (tradične)" + +msgid "Messages" +msgstr "Správy" + +msgid "Site Maps" +msgstr "Mapy Sídla" + +msgid "Static Files" +msgstr "Statické Súbory" + +msgid "Syndication" +msgstr "Syndikácia" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Číslo stránky nie je celé číslo" + +msgid "That page number is less than 1" +msgstr "Číslo stránky je menšie ako 1" + +msgid "That page contains no results" +msgstr "Stránka neobsahuje žiadne výsledky" + +msgid "Enter a valid value." +msgstr "Zadajte platnú hodnotu." + +msgid "Enter a valid URL." +msgstr "Zadajte platnú URL adresu." + +msgid "Enter a valid integer." +msgstr "Zadajte platné celé číslo." + +msgid "Enter a valid email address." +msgstr "Zadajte platnú e-mailovú adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Zadajte platnú skratku pozostávajúcu z písmen, čísel, podčiarkovníkov alebo " +"pomlčiek." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Zadajte platnú skratku pozostávajúcu z písmen Unicode, čísel, " +"podčiarkovníkov alebo pomlčiek." + +msgid "Enter a valid IPv4 address." +msgstr "Zadajte platnú IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Zadajte platnú IPv6 adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Zadajte platnú IPv4 alebo IPv6 adresu." + +msgid "Enter only digits separated by commas." +msgstr "Zadajte len číslice oddelené čiarkami." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Uistite sa, že táto hodnota je %(limit_value)s (je to %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Uistite sa, že táto hodnota je menšia alebo rovná %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Uistite sa, že hodnota je väčšia alebo rovná %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Uistite sa, že zadaná hodnota má najmenej %(limit_value)d znak (má " +"%(show_value)d)." +msgstr[1] "" +"Uistite sa, že zadaná hodnota má najmenej %(limit_value)d znaky (má " +"%(show_value)d)." +msgstr[2] "" +"Uistite sa, že zadaná hodnota má najmenej %(limit_value)d znakov (má " +"%(show_value)d)." +msgstr[3] "" +"Uistite sa, že zadaná hodnota má najmenej %(limit_value)d znakov (má " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Uistite sa, že táto hodnota má najviac %(limit_value)d znak (má " +"%(show_value)d)." +msgstr[1] "" +"Uistite sa, že táto hodnota má najviac %(limit_value)d znaky (má " +"%(show_value)d)." +msgstr[2] "" +"Uistite sa, že táto hodnota má najviac %(limit_value)d znakov (má " +"%(show_value)d)." +msgstr[3] "" +"Uistite sa, že táto hodnota má najviac %(limit_value)d znakov (má " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Zadajte číslo." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Uistite sa, že nie je zadaných celkovo viac ako %(max)s číslica." +msgstr[1] "Uistite sa, že nie je zadaných celkovo viac ako %(max)s číslice." +msgstr[2] "Uistite sa, že nie je zadaných celkovo viac ako %(max)s číslic." +msgstr[3] "Uistite sa, že nie je zadaných celkovo viac ako %(max)s číslic." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Uistite sa, že nie je zadané viac ako %(max)s desatinné miesto." +msgstr[1] "Uistite sa, že nie sú zadané viac ako %(max)s desatinné miesta." +msgstr[2] "Uistite sa, že nie je zadaných viac ako %(max)s desatinných miest." +msgstr[3] "Uistite sa, že nie je zadaných viac ako %(max)s desatinných miest." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Uistite sa, že nie je zadaných viac ako %(max)s číslica pred desatinnou " +"čiarkou." +msgstr[1] "" +"Uistite sa, že nie sú zadané viac ako %(max)s číslice pred desatinnou " +"čiarkou." +msgstr[2] "" +"Uistite sa, že nie je zadaných viac ako %(max)s číslic pred desatinnou " +"čiarkou." +msgstr[3] "" +"Uistite sa, že nie je zadaných viac ako %(max)s číslic pred desatinnou " +"čiarkou." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Prípona súboru '%(extension)s' nie je povolená. Povolené prípony sú: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Znaky NULL nie sú povolené." + +msgid "and" +msgstr "a" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s s týmto %(field_labels)s už existuje." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Hodnota %(value)r nie je platná možnosť." + +msgid "This field cannot be null." +msgstr "Toto pole nemôže byť prázdne." + +msgid "This field cannot be blank." +msgstr "Toto pole nemôže byť prázdne." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s s týmto %(field_label)s už existuje." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s musí byť unikátne pre %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Pole typu: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "'%(value)s' value musí byť True alebo False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "'%(value)s' musí byť True, False alebo None." + +msgid "Boolean (Either True or False)" +msgstr "Logická hodnota (buď True alebo False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Reťazec (až do %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Celé čísla oddelené čiarkou" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "'%(value)s' má neplatný tvar dátumu. Musí byť v tvare YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' je v správnom tvare (YYYY-MM-DD), ale je to neplatný dátum." + +msgid "Date (without time)" +msgstr "Dátum (bez času)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Hodnota “%(value)s” má neplatný tvar. Musí byť v tvare RRRR-MM-DD HH:MM[:" +"ss[.uuuuuu]][ČZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Hodnota “%(value)s” má byť v tvare (RRRR-MM-DD HH:MM[:ss[.uuuuuu]][ČZ]), ale " +"toto je neplatný dátum/čas." + +msgid "Date (with time)" +msgstr "Dátum (a čas)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "'%(value)s' musí byť desatinné číslo." + +msgid "Decimal number" +msgstr "Desatinné číslo" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Hodnota “%(value)s” má neplatný tvar. Musí byť v tvare [DD] [[HH:]MM:]ss[." +"uuuuuu]." + +msgid "Duration" +msgstr "Doba trvania" + +msgid "Email address" +msgstr "E-mailová adresa" + +msgid "File path" +msgstr "Cesta k súboru" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Hodnota “%(value)s” musí byť desatinné číslo." + +msgid "Floating point number" +msgstr "Číslo s plávajúcou desatinnou čiarkou" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "'%(value)s' musí byť celé číslo." + +msgid "Integer" +msgstr "Celé číslo" + +msgid "Big (8 byte) integer" +msgstr "Veľké celé číslo (8 bajtov)" + +msgid "Small integer" +msgstr "Malé celé číslo" + +msgid "IPv4 address" +msgstr "IPv4 adresa" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Hodnota “%(value)s” musí byť buď None, True alebo False." + +msgid "Boolean (Either True, False or None)" +msgstr "Logická hodnota (buď True, False alebo None)" + +msgid "Positive big integer" +msgstr "Kladné veľké celé číslo" + +msgid "Positive integer" +msgstr "Kladné celé číslo" + +msgid "Positive small integer" +msgstr "Malé kladné celé číslo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Identifikátor (najviac %(max_length)s)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Hodnota “%(value)s” má neplatný tvar. Musí byť v tvare HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Hodnota “%(value)s” má mať správny tvar (HH:MM[:ss[.uuuuuu]]), ale toto je " +"neplatný čas." + +msgid "Time" +msgstr "Čas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Binárne údaje" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” nie je platné UUID." + +msgid "Universally unique identifier" +msgstr "Úplne všade jedinečný identifikátor" + +msgid "File" +msgstr "Súbor" + +msgid "Image" +msgstr "Obrázok" + +msgid "A JSON object" +msgstr "Objekt typu JSON" + +msgid "Value must be valid JSON." +msgstr "Hodnota musí byť v platnom formáte JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Inštancia modelu %(model)s s %(field)s %(value)r neexistuje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Cudzí kľúč (typ určuje pole v relácii)" + +msgid "One-to-one relationship" +msgstr "Typ relácie: jedna k jednej" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "vzťah: %(from)s-%(to)s " + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "vzťahy: %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Typ relácie: M ku N" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Toto pole je povinné." + +msgid "Enter a whole number." +msgstr "Zadajte celé číslo." + +msgid "Enter a valid date." +msgstr "Zadajte platný dátum." + +msgid "Enter a valid time." +msgstr "Zadajte platný čas." + +msgid "Enter a valid date/time." +msgstr "Zadajte platný dátum/čas." + +msgid "Enter a valid duration." +msgstr "Zadajte platnú dobu trvania." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Počet dní musí byť medzi {min_days} a {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Súbor nebol odoslaný. Skontrolujte typ kódovania vo formulári." + +msgid "No file was submitted." +msgstr "Žiaden súbor nebol odoslaný." + +msgid "The submitted file is empty." +msgstr "Odoslaný súbor je prázdny." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Uistite sa, že názov súboru má najviac %(max)d znak (má %(length)d)." +msgstr[1] "" +"Uistite sa, že názov súboru má najviac %(max)d znaky (má %(length)d)." +msgstr[2] "" +"Uistite sa, že názov súboru má najviac %(max)d znakov (má %(length)d)." +msgstr[3] "" +"Uistite sa, že názov súboru má najviac %(max)d znakov (má %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Odošlite prosím súbor alebo zaškrtnite políčko pre vymazanie vstupného poľa, " +"nie oboje." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázok alebo bol " +"poškodený." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Vyberte platnú voľbu. %(value)s nepatrí medzi dostupné možnosti." + +msgid "Enter a list of values." +msgstr "Zadajte zoznam hodnôt." + +msgid "Enter a complete value." +msgstr "Zadajte úplnú hodnotu." + +msgid "Enter a valid UUID." +msgstr "Zadajte platné UUID." + +msgid "Enter a valid JSON." +msgstr "Zadajte platný JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skryté pole %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Dáta ManagementForm chýbajú alebo boli zmanipulované. Chýbajúce polia: " +"%(field_names)s. Možno budete musieť túto chybu nahlásiť, ak sa bude naďalej " +"vyskytovať." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Prosím odošlite najviac %d formulár." +msgstr[1] "Prosím odošlite najviac %d formulárov." +msgstr[2] "Prosím odošlite najviac %d formulárov." +msgstr[3] "Prosím odošlite najviac %d formulárov." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Prosím odošlite aspoň %d formulár." +msgstr[1] "Prosím odošlite aspoň %d formulárov." +msgstr[2] "Prosím odošlite aspoň %d formulárov." +msgstr[3] "Prosím odošlite aspoň %d formulárov." + +msgid "Order" +msgstr "Poradie" + +msgid "Delete" +msgstr "Odstrániť" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Prosím, opravte duplicitné údaje pre %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Údaje pre %(field)s musia byť unikátne, prosím, opravte duplikáty." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Údaje pre %(field_name)s musia byť unikátne pre %(lookup)s v %(date_field)s, " +"prosím, opravte duplikáty." + +msgid "Please correct the duplicate values below." +msgstr "Prosím, opravte nižšie uvedené duplicitné hodnoty. " + +msgid "The inline value did not match the parent instance." +msgstr "Vnorená hodnota sa nezhoduje s nadradenou inštanciou." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Vyberte platnú možnosť. Vybraná položka nepatrí medzi dostupné možnosti." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" nie je platná hodnota." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Hodnota %(datetime)s v časovej zóne %(current_timezone)s sa nedá " +"interpretovať; môže byť nejednoznačná alebo nemusí existovať." + +msgid "Clear" +msgstr "Vymazať" + +msgid "Currently" +msgstr "Súčasne" + +msgid "Change" +msgstr "Zmeniť" + +msgid "Unknown" +msgstr "Neznámy" + +msgid "Yes" +msgstr "Áno" + +msgid "No" +msgstr "Nie" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "áno,nie,možno" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtov" +msgstr[3] "%(size)d bajtov" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "popoludní" + +msgid "a.m." +msgstr "predpoludním" + +msgid "PM" +msgstr "popoludní" + +msgid "AM" +msgstr "predpoludním" + +msgid "midnight" +msgstr "polnoc" + +msgid "noon" +msgstr "poludnie" + +msgid "Monday" +msgstr "pondelok" + +msgid "Tuesday" +msgstr "utorok" + +msgid "Wednesday" +msgstr "streda" + +msgid "Thursday" +msgstr "štvrtok" + +msgid "Friday" +msgstr "piatok" + +msgid "Saturday" +msgstr "sobota" + +msgid "Sunday" +msgstr "nedeľa" + +msgid "Mon" +msgstr "po" + +msgid "Tue" +msgstr "ut" + +msgid "Wed" +msgstr "st" + +msgid "Thu" +msgstr "št" + +msgid "Fri" +msgstr "pi" + +msgid "Sat" +msgstr "so" + +msgid "Sun" +msgstr "ne" + +msgid "January" +msgstr "január" + +msgid "February" +msgstr "február" + +msgid "March" +msgstr "marec" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "máj" + +msgid "June" +msgstr "jún" + +msgid "July" +msgstr "júl" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "máj" + +msgid "jun" +msgstr "jún" + +msgid "jul" +msgstr "júl" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "máj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jún" + +msgctxt "abbrev. month" +msgid "July" +msgstr "júl" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec." + +msgctxt "alt. month" +msgid "January" +msgstr "január" + +msgctxt "alt. month" +msgid "February" +msgstr "február" + +msgctxt "alt. month" +msgid "March" +msgstr "marec" + +msgctxt "alt. month" +msgid "April" +msgstr "apríl" + +msgctxt "alt. month" +msgid "May" +msgstr "máj" + +msgctxt "alt. month" +msgid "June" +msgstr "jún" + +msgctxt "alt. month" +msgid "July" +msgstr "júl" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "október" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "december" + +msgid "This is not a valid IPv6 address." +msgstr "Toto nieje platná IPv6 adresa." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "alebo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Forbidden" +msgstr "Zakázané (Forbidden)" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifikázia zlyhala. Požiadavka bola prerušená." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ak ste vo vašom prehliadači vypli hlavičky “Referer”, tak ich prosím " +"zapnite, alebo aspoň pre túto stránku, alebo pre HTTPS pripojenia, alebo pre " +"požiadavky “same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ak používate tag , alebo " +"vkladáte hlavičku 'Referrer-Policy: no-referrer', prosím odstránte ich. " +"Ochrana CSRF vyžaduje hlavičku “Referer” na striktnú kontrolu. Ak máte obavy " +"o súkromie, použite alternatívy ako pre linky na " +"iné stránky." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Túto správu vidíte, pretože táto lokalita vyžaduje CSRF cookie pri " +"odosielaní formulárov. Toto cookie je potrebné na zabezpečenie toho, že váš " +"prehliadač nie je zneužitý - \"hijack\"." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ak ste vypli cookies vo vašom prehliadači, tak ich prosím zapnite, aspoň pre " +"túto stránku, alebo pre požiadavky “same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "Viac informácií bude dostupných s DEBUG=True." + +msgid "No year specified" +msgstr "Nešpecifikovaný rok" + +msgid "Date out of range" +msgstr "Dátum je mimo rozsahu" + +msgid "No month specified" +msgstr "Nešpecifikovaný mesiac" + +msgid "No day specified" +msgstr "Nešpecifikovaný deň" + +msgid "No week specified" +msgstr "Nešpecifikovaný týždeň" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nie sú dostupné" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Budúce %(verbose_name_plural)s nie sú dostupné pretože %(class_name)s." +"allow_future má hodnotu False. " + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Neplatný dátumový reťazec “%(datestr)s” pre formát “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" +"Nebol nájdený žiadny %(verbose_name)s zodpovedajúci databázovému dopytu" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" +"Stránka nemá hodnotu “last” a taktiež nie je možné prekonvertovať hodnotu na " +"celé číslo." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nesprávna stránka (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Zoznam je prázdny a hodnota “%(class_name)s.allow_empty” je False." + +msgid "Directory indexes are not allowed here." +msgstr "Výpis adresárov tu nieje povolený." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" neexistuje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Výpis %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Inštalácia prebehla úspešne! Gratulujeme!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Zobraziť poznámky k vydaniu pre Django " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Táto stránka sa zobrazuje pretože máte DEBUG=True v súbore s nastaveniami a nie sú nakonfigurované žiadne " +"URL." + +msgid "Django Documentation" +msgstr "Dokumentácia Django" + +msgid "Topics, references, & how-to’s" +msgstr "Témy, referencie a návody" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriál: Aplikácia \"Hlasovania\"" + +msgid "Get started with Django" +msgstr "Začíname s Django" + +msgid "Django Community" +msgstr "Komunita Django" + +msgid "Connect, get help, or contribute" +msgstr "Spojte sa, získajte pomoc, alebo prispejte" diff --git a/venv/Lib/site-packages/django/conf/locale/sk/__init__.py b/venv/Lib/site-packages/django/conf/locale/sk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sk/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sk/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1236d6c078be80efe258bfc3b43464f1c31dbb0a GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lakhSZd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04rBC-~a#s literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sk/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sk/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fcce9dd899839d598e7c9c06a70e0a9e794dda7c GIT binary patch literal 681 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 bb!M&8YV2jMx&-YTCnc{Z^n1{Mbj<$;ZO0mo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ff3cbc5a6 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,1297 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# iElectric , 2011-2012 +# Jannis Leidel , 2011 +# Jure Cuhalev , 2012-2013 +# Marko Zabreznik , 2016 +# Primož Verdnik , 2017 +# zejn , 2013,2016-2017 +# zejn , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Afrikanščina" + +msgid "Arabic" +msgstr "Arabščina" + +msgid "Asturian" +msgstr "Asturijski jezik" + +msgid "Azerbaijani" +msgstr "Azerbajdžanščina" + +msgid "Bulgarian" +msgstr "Bolgarščina" + +msgid "Belarusian" +msgstr "Belorusko" + +msgid "Bengali" +msgstr "Bengalščina" + +msgid "Breton" +msgstr "Bretonščina" + +msgid "Bosnian" +msgstr "Bosanščina" + +msgid "Catalan" +msgstr "Katalonščina" + +msgid "Czech" +msgstr "Češčina" + +msgid "Welsh" +msgstr "Valežanski jezik" + +msgid "Danish" +msgstr "Danščina" + +msgid "German" +msgstr "Nemščina" + +msgid "Lower Sorbian" +msgstr "Dolnjelužiška srbščina" + +msgid "Greek" +msgstr "Grščina" + +msgid "English" +msgstr "Angleščina" + +msgid "Australian English" +msgstr "Avstralska angleščina" + +msgid "British English" +msgstr "Britanska Angleščina" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Španščina" + +msgid "Argentinian Spanish" +msgstr "Argentinska španščina" + +msgid "Colombian Spanish" +msgstr "Kolumbijska španščina" + +msgid "Mexican Spanish" +msgstr "Mehiška španščina" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvijska španščina" + +msgid "Venezuelan Spanish" +msgstr "Španščina (Venezuela)" + +msgid "Estonian" +msgstr "Estonščina" + +msgid "Basque" +msgstr "Baskovščina" + +msgid "Persian" +msgstr "Perzijščina" + +msgid "Finnish" +msgstr "Finščina" + +msgid "French" +msgstr "Francoščina" + +msgid "Frisian" +msgstr "Frizijščina" + +msgid "Irish" +msgstr "Irščina" + +msgid "Scottish Gaelic" +msgstr "Škotska gelščina" + +msgid "Galician" +msgstr "Galičanski jezik" + +msgid "Hebrew" +msgstr "Hebrejski jezik" + +msgid "Hindi" +msgstr "Hindujščina" + +msgid "Croatian" +msgstr "Hrvaščina" + +msgid "Upper Sorbian" +msgstr "Gornjelužiška srbščina" + +msgid "Hungarian" +msgstr "Madžarščina" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezijski" + +msgid "Ido" +msgstr "Jezik Ido" + +msgid "Icelandic" +msgstr "Islandski jezik" + +msgid "Italian" +msgstr "Italijanščina" + +msgid "Japanese" +msgstr "Japonščina" + +msgid "Georgian" +msgstr "Gruzijščina" + +msgid "Kabyle" +msgstr "Kabilski jezik" + +msgid "Kazakh" +msgstr "Kazaščina" + +msgid "Khmer" +msgstr "Kmerščina" + +msgid "Kannada" +msgstr "Kanareščina" + +msgid "Korean" +msgstr "Korejščina" + +msgid "Luxembourgish" +msgstr "Luksemburščina" + +msgid "Lithuanian" +msgstr "Litvanščina" + +msgid "Latvian" +msgstr "Latvijščina" + +msgid "Macedonian" +msgstr "Makedonščina" + +msgid "Malayalam" +msgstr "Malajalščina" + +msgid "Mongolian" +msgstr "Mongolščina" + +msgid "Marathi" +msgstr "Jezik Marathi" + +msgid "Burmese" +msgstr "Burmanski jezik" + +msgid "Norwegian Bokmål" +msgstr "Norveški jezik" + +msgid "Nepali" +msgstr "Nepalščina" + +msgid "Dutch" +msgstr "Nizozemščina" + +msgid "Norwegian Nynorsk" +msgstr "Norveščina Nynorsk" + +msgid "Ossetic" +msgstr "Osetski jezik" + +msgid "Punjabi" +msgstr "Pandžabščina" + +msgid "Polish" +msgstr "Poljščina" + +msgid "Portuguese" +msgstr "Portugalščina" + +msgid "Brazilian Portuguese" +msgstr "Brazilska portugalščina" + +msgid "Romanian" +msgstr "Romunščina" + +msgid "Russian" +msgstr "Ruščina" + +msgid "Slovak" +msgstr "Slovaščina" + +msgid "Slovenian" +msgstr "Slovenščina" + +msgid "Albanian" +msgstr "Albanščina" + +msgid "Serbian" +msgstr "Srbščina" + +msgid "Serbian Latin" +msgstr "Srbščina v latinici" + +msgid "Swedish" +msgstr "Švedščina" + +msgid "Swahili" +msgstr "Svahili" + +msgid "Tamil" +msgstr "Tamilščina" + +msgid "Telugu" +msgstr "Teluščina" + +msgid "Thai" +msgstr "Tajski jezik" + +msgid "Turkish" +msgstr "Turščina" + +msgid "Tatar" +msgstr "Tatarščina" + +msgid "Udmurt" +msgstr "Udmurski jezik" + +msgid "Ukrainian" +msgstr "Ukrajinščina" + +msgid "Urdu" +msgstr "Jezik Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Vietnamščina" + +msgid "Simplified Chinese" +msgstr "Poenostavljena kitajščina" + +msgid "Traditional Chinese" +msgstr "Tradicionalna kitajščina" + +msgid "Messages" +msgstr "Sporočila" + +msgid "Site Maps" +msgstr "Zemljevid spletnega mesta" + +msgid "Static Files" +msgstr "Statične datoteke" + +msgid "Syndication" +msgstr "Sindiciranje" + +msgid "That page number is not an integer" +msgstr "Število te strani ni naravno število" + +msgid "That page number is less than 1" +msgstr "Število te strani je manj kot 1" + +msgid "That page contains no results" +msgstr "Ta stran nima zadetkov" + +msgid "Enter a valid value." +msgstr "Vnesite veljavno vrednost." + +msgid "Enter a valid URL." +msgstr "Vnesite veljaven URL naslov." + +msgid "Enter a valid integer." +msgstr "Vnesite veljavno celo število." + +msgid "Enter a valid email address." +msgstr "Vnesite veljaven e-poštni naslov." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Vnesite veljaven IPv4 naslov." + +msgid "Enter a valid IPv6 address." +msgstr "Vnesite veljaven IPv6 naslov." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Vnesite veljaven IPv4 ali IPv6 naslov." + +msgid "Enter only digits separated by commas." +msgstr "Vnesite samo števila, ločena z vejicami." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Poskrbite, da bo ta vrednost %(limit_value)s. Trenutno je %(show_value)s." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Poskrbite, da bo ta vrednost manj kot ali natanko %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Poskrbite, da bo ta vrednost večja ali enaka %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Preverite, da ima ta vrednost vsaj %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Preverite, da ima ta vrednost vsaj %(limit_value)d znaka (trenutno ima " +"%(show_value)d)." +msgstr[2] "" +"Preverite, da ima ta vrednost vsaj %(limit_value)d znake (trenutno ima " +"%(show_value)d)." +msgstr[3] "" +"Preverite, da ima ta vrednost vsaj %(limit_value)d znakov (trenutno ima " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Preverite, da ima ta vrednost največ %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Preverite, da ima ta vrednost največ %(limit_value)d znaka (trenutno ima " +"%(show_value)d)." +msgstr[2] "" +"Preverite, da ima ta vrednost največ %(limit_value)d znake (trenutno ima " +"%(show_value)d)." +msgstr[3] "" +"Preverite, da ima ta vrednost največ %(limit_value)d znakov (trenutno ima " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Vnesite število." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Poskrbite, da skupno ne bo več kot %(max)s števka." +msgstr[1] "Poskrbite, da skupno ne bosta več kot %(max)s števki." +msgstr[2] "Poskrbite, da skupno ne bojo več kot %(max)s števke." +msgstr[3] "Poskrbite, da skupno ne bo več kot %(max)s števk." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Poskrbite, da skupno ne bo več kot %(max)s decimalnih mesto." +msgstr[1] "Poskrbite, da skupno ne bosta več kot %(max)s decimalnih mesti." +msgstr[2] "Poskrbite, da skupno ne bo več kot %(max)s decimalnih mest." +msgstr[3] "Poskrbite, da skupno ne bo več kot %(max)s decimalnih mest." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Poskrbite, da skupno ne bo več kot %(max)s števka pred decimalno vejico." +msgstr[1] "" +"Poskrbite, da skupno ne bosta več kot %(max)s števki pred decimalno vejico." +msgstr[2] "" +"Poskrbite, da skupno ne bo več kot %(max)s števk pred decimalno vejico." +msgstr[3] "" +"Poskrbite, da skupno ne bo več kot %(max)s števk pred decimalno vejico." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Znak null ni dovoljen." + +msgid "and" +msgstr "in" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s s tem %(field_labels)s že obstaja." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vrednost %(value)r ni veljavna izbira." + +msgid "This field cannot be null." +msgstr "To polje ne more biti prazno." + +msgid "This field cannot be blank." +msgstr "To polje ne more biti prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s s tem %(field_label)s že obstaja." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s mora biti enolična za %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolova vrednost (True ali False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Niz znakov (vse do %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Z vejico ločena cela števila (integer)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (brez ure)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (z uro)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimalno število" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Trajanje" + +msgid "Email address" +msgstr "E-poštni naslov" + +msgid "File path" +msgstr "Pot do datoteke" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Število s plavajočo vejico" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Celo število (integer)" + +msgid "Big (8 byte) integer" +msgstr "Velika (8 bajtna) cela števila " + +msgid "IPv4 address" +msgstr "IPv4 naslov" + +msgid "IP address" +msgstr "IP naslov" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Boolova vrednost (True, False ali None)" + +msgid "Positive integer" +msgstr "Pozitivno celo število" + +msgid "Positive small integer" +msgstr "Pozitivno celo število (do 64 tisoč)" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Okrajšava naslova (do največ %(max_length)s znakov)" + +msgid "Small integer" +msgstr "Celo število" + +msgid "Text" +msgstr "Besedilo" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Čas" + +msgid "URL" +msgstr "URL (spletni naslov)" + +msgid "Raw binary data" +msgstr "Surovi binarni podatki" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Datoteka" + +msgid "Image" +msgstr "Slika" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Instanca %(model)s s poljem %(field)s, ki ustreza %(value)r, ne obstaja." + +msgid "Foreign Key (type determined by related field)" +msgstr "Tuji ključ (tip odvisen od povezanega polja)" + +msgid "One-to-one relationship" +msgstr "Relacija ena-na-ena" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relacija %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relacija %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relacija več-na-več" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "To polje je obvezno." + +msgid "Enter a whole number." +msgstr "Vnesite celo število." + +msgid "Enter a valid date." +msgstr "Vnesite veljaven datum." + +msgid "Enter a valid time." +msgstr "Vnesite veljaven čas." + +msgid "Enter a valid date/time." +msgstr "Vnesite veljaven datum/čas." + +msgid "Enter a valid duration." +msgstr "Vnesite veljavno obdobje trajanja." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Datoteka ni bila poslana. Preverite nabor znakov v formi." + +msgid "No file was submitted." +msgstr "Poslali niste nobene datoteke." + +msgid "The submitted file is empty." +msgstr "Poslana datoteka je prazna." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Poskrbite, da bo imelo to ime datoteke največ %(max)d znak (trenutno ima " +"%(length)d)." +msgstr[1] "" +"Poskrbite, da bo imelo to ime datoteke največ %(max)d znaka (trenutno ima " +"%(length)d)." +msgstr[2] "" +"Poskrbite, da bo imelo to ime datoteke največ %(max)d znake (trenutno ima " +"%(length)d)." +msgstr[3] "" +"Poskrbite, da bo imelo to ime datoteke največ %(max)d znakov (trenutno ima " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Prosim oddaj datoteko ali izberi počisti okvir, ampak ne oboje hkrati." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Naložite veljavno sliko. Naložena datoteka ni bila slika ali pa je bila le-" +"ta okvarjena." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Izberite veljavno možnost. %(value)s ni med ponujenimi izbirami." + +msgid "Enter a list of values." +msgstr "Vnesite seznam vrednosti." + +msgid "Enter a complete value." +msgstr "Vnesite popolno vrednost." + +msgid "Enter a valid UUID." +msgstr "Vnesite veljaven UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skrito polje %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Podatki iz ManagementForm manjkajo ali pa so bili spreminjani." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Pošljite največ %d obrazec." +msgstr[1] "Pošljite največ %d obrazca." +msgstr[2] "Pošljite največ %d obrazce." +msgstr[3] "Pošljite največ %d obrazcev." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Prosimo vnesite %d ali več vnosov." +msgstr[1] "Prosimo vnesite %d ali več vnosov." +msgstr[2] "Prosimo vnesite %d ali več vnosov." +msgstr[3] "Prosimo vnesite %d ali več vnosov." + +msgid "Order" +msgstr "Razvrsti" + +msgid "Delete" +msgstr "Izbriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Prosimo, odpravite podvojene vrednosti za %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Prosimo popravite podvojene vrednosti za %(field)s, ki morajo biti unikatne." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Prosimo popravite podvojene vrednosti za polje %(field_name)s, ki mora biti " +"edinstveno za %(lookup)s po %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Prosimo odpravite podvojene vrednosti spodaj." + +msgid "The inline value did not match the parent instance." +msgstr "Vrednost se ne ujema s povezanim vnosom." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Izberite veljavno možnost. Te možnosti ni med ponujenimi izbirami." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Počisti" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Spremeni" + +msgid "Unknown" +msgstr "Neznano" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "da,ne,morda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajta" +msgstr[2] "%(size)d bajti" +msgstr[3] "%(size)d bajtov" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "polnoč" + +msgid "noon" +msgstr "poldne" + +msgid "Monday" +msgstr "ponedeljek" + +msgid "Tuesday" +msgstr "torek" + +msgid "Wednesday" +msgstr "sreda" + +msgid "Thursday" +msgstr "četrtek" + +msgid "Friday" +msgstr "petek" + +msgid "Saturday" +msgstr "sobota" + +msgid "Sunday" +msgstr "nedelja" + +msgid "Mon" +msgstr "pon" + +msgid "Tue" +msgstr "tor" + +msgid "Wed" +msgstr "sre" + +msgid "Thu" +msgstr "čet" + +msgid "Fri" +msgstr "pet" + +msgid "Sat" +msgstr "sob" + +msgid "Sun" +msgstr "ned" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "marec" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "junij" + +msgid "July" +msgstr "julij" + +msgid "August" +msgstr "avgust" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "avg" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marec" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junij" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julij" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Avg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Marec" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Maj" + +msgctxt "alt. month" +msgid "June" +msgstr "Junij" + +msgctxt "alt. month" +msgid "July" +msgstr "Julij" + +msgctxt "alt. month" +msgid "August" +msgstr "Avgust" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "December" + +msgid "This is not a valid IPv6 address." +msgstr "To ni veljaven IPv6 naslov." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ali" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d leto" +msgstr[1] "%d leti" +msgstr[2] "%d leta" +msgstr[3] "%d let" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesec" +msgstr[1] "%d meseca" +msgstr[2] "%d mesece" +msgstr[3] "%d mesecev" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d teden" +msgstr[1] "%d tedna" +msgstr[2] "%d tedne" +msgstr[3] "%d tednov" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dan" +msgstr[1] "%d dneva" +msgstr[2] "%d dni" +msgstr[3] "%d dni" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ura" +msgstr[1] "%d uri" +msgstr[2] "%d ure" +msgstr[3] "%d ur" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuta" +msgstr[1] "%d minuti" +msgstr[2] "%d minute" +msgstr[3] "%d minut" + +msgid "0 minutes" +msgstr "0 minut" + +msgid "Forbidden" +msgstr "Prepovedano" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF preverjanje ni uspelo. Zahtevek preklican." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"To obvestilo vidite, ker ta spletna stran zahteva CSRF piškotek, ko " +"pošiljate obrazce. Piškotek je potreben zaradi varnosti, da se zagotovi, da " +"ste zahtevek res naredili vi." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Več informacij je na voljo, če nastavite DEBUG=True." + +msgid "No year specified" +msgstr "Leto ni vnešeno" + +msgid "Date out of range" +msgstr "Datum ni znotraj veljavnega obsega." + +msgid "No month specified" +msgstr "Mesec ni vnešen" + +msgid "No day specified" +msgstr "Dan ni vnešen" + +msgid "No week specified" +msgstr "Teden ni vnešen" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Na voljo ni noben %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Prihodnje %(verbose_name_plural)s niso na voljo, ker je vrednost " +"%(class_name)s.allow_future False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Noben %(verbose_name)s ne ustreza poizvedbi" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Neveljavna stran (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Prikaz vsebine mape ni dovoljen." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Vsebina mape %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: spletno ogrodje za perfekcioniste s časovnimi roki." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Oglejte si obvestila ob izdaji za Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Namestitev se je uspešno izvedla! Čestitke!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"To stran vidite, ker imate nastavljeno DEBUG=True v vaši settings.py datoteki in ker nimate nastavljenih URL-" +"jev." + +msgid "Django Documentation" +msgstr "Django Dokumentacija" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Vodič: aplikacija anketa" + +msgid "Get started with Django" +msgstr "Začnite z Djangom" + +msgid "Django Community" +msgstr "Django Skupnost" + +msgid "Connect, get help, or contribute" +msgstr "Spoznajte nove ljudi, poiščite pomoč in prispevajte " diff --git a/venv/Lib/site-packages/django/conf/locale/sl/__init__.py b/venv/Lib/site-packages/django/conf/locale/sl/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sl/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sl/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7dc08fe07863c7b966d896f10ea8b1593bddb4f1 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lagKg`d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04sSk;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sl/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sl/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d2483d29b4df4105787a2c96276c7a3df045efa GIT binary patch literal 945 zcmZvYUvHXF6u?1Hsn%NE)`vau!h^}gce5;`1%#}C0nEY;89^@^oj~KoCh~Fmwy)G= zPkU;zPtd1btO~TdgmcgN9e(!@ajVrJ@c8@V_jFYwh(B3T92H!A#V^VNBmeB zKnhTh1~jaKDy)GTtb_W3fXo947(Ach`3yEd12#buo`ZAPvWVVAT7x_*vrbAW!)4lB z?F*jG3M#{NM$$Tt8js7yijR0_-+#jU6TNE6aFFLho^wvwF3b8{*vG7ayDV|g?hMbkYe}i~#o?evcN!+~^b5s-$G!tJ=RT5vJgIJ{LyZjQldi5We$(OHr zLC?>Z=6Vjx`hh=_pB_p6iNb$d@3lZv6l}?p4O0_r(6m+URJ5~B5p*0$Fg?xCZRIFj zzEq;%97)Gg4Ab_CtA5B)X*pRnt?Wz3Gi2|(Bz*(jy{78piG5hl0#~PFlzB&#Zd6UU z^(<*Dn1XGXpld6}#1eF|z}osmyOvCEWEzvPs*ipVn<~EgK0F6ELwACL4RXybLcS}; zvuzke335lvMA=SVdAUJJf4qrT!7Op_gXrG9T~1xJOoINMKl|w~0_4J#A1&g+ERN=b vbv*Oe!2qoX^LP{b3F7Z|kId&VhTC=Ug~U6fk2ugYO%@-9W*E9llMML}3PtV4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sl/formats.py b/venv/Lib/site-packages/django/conf/locale/sl/formats.py new file mode 100644 index 000000000..c3e96bb2f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sl/formats.py @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d. F Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y. H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "j. M. Y" +SHORT_DATETIME_FORMAT = "j.n.Y. H:i" +FIRST_DAY_OF_WEEK = 0 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' + "%d-%m-%Y", # '25-10-2006' + "%d. %m. %Y", # '25. 10. 2006' + "%d. %m. %y", # '25. 10. 06' +] + +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' + "%d-%m-%Y %H:%M:%S", # '25-10-2006 14:30:59' + "%d-%m-%Y %H:%M:%S.%f", # '25-10-2006 14:30:59.000200' + "%d-%m-%Y %H:%M", # '25-10-2006 14:30' + "%d. %m. %Y %H:%M:%S", # '25. 10. 2006 14:30:59' + "%d. %m. %Y %H:%M:%S.%f", # '25. 10. 2006 14:30:59.000200' + "%d. %m. %Y %H:%M", # '25. 10. 2006 14:30' + "%d. %m. %y %H:%M:%S", # '25. 10. 06 14:30:59' + "%d. %m. %y %H:%M:%S.%f", # '25. 10. 06 14:30:59.000200' + "%d. %m. %y %H:%M", # '25. 10. 06 14:30' +] + +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b2cb851a821666cd5784954fca6c16e60f170ef3 GIT binary patch literal 27802 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, 2011-2014 +# Besnik Bleta , 2020-2021 +# Besnik Bleta , 2015-2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 09:58+0000\n" +"Last-Translator: Besnik Bleta \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabe" + +msgid "Algerian Arabic" +msgstr "Arabishte Algjeriane" + +msgid "Asturian" +msgstr "Asturiase" + +msgid "Azerbaijani" +msgstr "Azerbaixhanase" + +msgid "Bulgarian" +msgstr "Bulgare" + +msgid "Belarusian" +msgstr "Bjelloruse" + +msgid "Bengali" +msgstr "Bengaleze" + +msgid "Breton" +msgstr "Bretone" + +msgid "Bosnian" +msgstr "Boshnjake" + +msgid "Catalan" +msgstr "Katalane" + +msgid "Czech" +msgstr "Çeke" + +msgid "Welsh" +msgstr "Uellsiane" + +msgid "Danish" +msgstr "Daneze" + +msgid "German" +msgstr "Gjermane" + +msgid "Lower Sorbian" +msgstr "Sorbiane e Poshtme" + +msgid "Greek" +msgstr "Greke" + +msgid "English" +msgstr "Angleze" + +msgid "Australian English" +msgstr "Angleze Australiane" + +msgid "British English" +msgstr "Angleze Britanike" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanjolle" + +msgid "Argentinian Spanish" +msgstr "Spanjolle Argjentinase" + +msgid "Colombian Spanish" +msgstr "Spanjolle Kolumbiane" + +msgid "Mexican Spanish" +msgstr "Spanjolle Meksikane" + +msgid "Nicaraguan Spanish" +msgstr "Spanjolle Nikaraguane" + +msgid "Venezuelan Spanish" +msgstr "Spanjolle Venezuelane" + +msgid "Estonian" +msgstr "Estoneze" + +msgid "Basque" +msgstr "Baske" + +msgid "Persian" +msgstr "Persiane" + +msgid "Finnish" +msgstr "Finlandeze" + +msgid "French" +msgstr "Frënge" + +msgid "Frisian" +msgstr "Frisiane" + +msgid "Irish" +msgstr "Irlandeze" + +msgid "Scottish Gaelic" +msgstr "Skoceze Gaelike" + +msgid "Galician" +msgstr "Galike" + +msgid "Hebrew" +msgstr "Hebraishte" + +msgid "Hindi" +msgstr "Indiane" + +msgid "Croatian" +msgstr "Kroate" + +msgid "Upper Sorbian" +msgstr "Sorbiane e Sipërme" + +msgid "Hungarian" +msgstr "Hungareze" + +msgid "Armenian" +msgstr "Armenisht" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneziane" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeze" + +msgid "Italian" +msgstr "Italiane" + +msgid "Japanese" +msgstr "Japoneze" + +msgid "Georgian" +msgstr "Gjeorgjiane" + +msgid "Kabyle" +msgstr "Kabilase" + +msgid "Kazakh" +msgstr "Kazake" + +msgid "Khmer" +msgstr "Khmere" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreane" + +msgid "Kyrgyz" +msgstr "Kirgize" + +msgid "Luxembourgish" +msgstr "Luksemburgase" + +msgid "Lithuanian" +msgstr "Lituaneze" + +msgid "Latvian" +msgstr "Letoneze" + +msgid "Macedonian" +msgstr "Maqedone" + +msgid "Malayalam" +msgstr "Malajalame" + +msgid "Mongolian" +msgstr "Mongoliane" + +msgid "Marathi" +msgstr "Marati" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Burmeze" + +msgid "Norwegian Bokmål" +msgstr "Norvegjeze Bokmal" + +msgid "Nepali" +msgstr "Nepaleze" + +msgid "Dutch" +msgstr "Holandeze" + +msgid "Norwegian Nynorsk" +msgstr "Norvegjeze Nynorsk" + +msgid "Ossetic" +msgstr "Osetishte" + +msgid "Punjabi" +msgstr "Panxhabe" + +msgid "Polish" +msgstr "Polake" + +msgid "Portuguese" +msgstr "Portugeze" + +msgid "Brazilian Portuguese" +msgstr "Portugeze Braziliane" + +msgid "Romanian" +msgstr "Rumune" + +msgid "Russian" +msgstr "Ruse" + +msgid "Slovak" +msgstr "Sllovake " + +msgid "Slovenian" +msgstr "Slovene" + +msgid "Albanian" +msgstr "Shqipe" + +msgid "Serbian" +msgstr "Serbe" + +msgid "Serbian Latin" +msgstr "Serbe Latine" + +msgid "Swedish" +msgstr "Suedeze" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamileze" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Taxhike" + +msgid "Thai" +msgstr "Tajlandeze" + +msgid "Turkmen" +msgstr "Turkmene" + +msgid "Turkish" +msgstr "Turke" + +msgid "Tatar" +msgstr "Tatare" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainase" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbeke" + +msgid "Vietnamese" +msgstr "Vietnameze" + +msgid "Simplified Chinese" +msgstr "Kineze e Thjeshtuar" + +msgid "Traditional Chinese" +msgstr "Kineze Tradicionale" + +msgid "Messages" +msgstr "Mesazhe" + +msgid "Site Maps" +msgstr "Harta Sajti" + +msgid "Static Files" +msgstr "Kartela Statike" + +msgid "Syndication" +msgstr "" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Ai numër faqeje s’është numër i plotë" + +msgid "That page number is less than 1" +msgstr "Ai numër faqeje është më i vogël se 1" + +msgid "That page contains no results" +msgstr "Ajo faqe s’përmban përfundime" + +msgid "Enter a valid value." +msgstr "Jepni një vlerë të vlefshme." + +msgid "Enter a valid URL." +msgstr "Jepni një URL të vlefshme." + +msgid "Enter a valid integer." +msgstr "Jepni një numër të plotë të vlefshëm." + +msgid "Enter a valid email address." +msgstr "Jepni një adresë email të vlefshme." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Jepni një “slug” të vlefshëm, të përbërë nga shkronja, numra, nëvija ose " +"vija në mes." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Jepni një “slug” të vlefshëm, të përbërë nga shkronja, numra, nënvija ose " +"vija ndarëse Unikod." + +msgid "Enter a valid IPv4 address." +msgstr "Jepni një adresë IPv4 të vlefshme." + +msgid "Enter a valid IPv6 address." +msgstr "Jepni një adresë IPv6 të vlefshme." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Jepni një adresë IPv4 ose IPv6 të vlefshme." + +msgid "Enter only digits separated by commas." +msgstr "Jepni vetëm shifra të ndara nga presje." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Siguroni që kjo vlerë të jetë %(limit_value)s (është %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Siguroni që kjo vlerë të jetë më e vogël ose baras me %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Siguroni që kjo vlerë është më e madhe ose baras me %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sigurohuni që kjo vlerë ka të paktën %(limit_value)d shenjë (ka " +"%(show_value)d)." +msgstr[1] "" +"Sigurohuni që kjo vlerë ka të paktën %(limit_value)d shenja (ka " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sigurohuni që kjo vlerë ka të shumtën %(limit_value)d shenjë (ka " +"%(show_value)d)." +msgstr[1] "" +"Sigurohuni që kjo vlerë ka të shumtën %(limit_value)d shenja (ka " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Jepni një numër." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Sigurohuni që s’ka më tepër se %(max)s shifër gjithsej." +msgstr[1] "Sigurohuni që s’ka më tepër se %(max)s shifra gjithsej." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Sigurohuni që s’ka më shumë se %(max)s vend dhjetor." +msgstr[1] "Sigurohuni që s’ka më shumë se %(max)s vende dhjetore." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Sigurohuni që s’ka më tepër se %(max)s shifër para presjes dhjetore." +msgstr[1] "" +"Sigurohuni që s’ka më tepër se %(max)s shifra para presjes dhjetore." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Zgjatimi “%(extension)s” për kartela nuk lejohet. Zgjatime të lejuara janë: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Nuk lejohen shenja null." + +msgid "and" +msgstr "dhe " + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ka tashmë %(model_name)s me këtë %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vlera %(value)r s’është zgjedhje e vlefshme." + +msgid "This field cannot be null." +msgstr "Kjo fushë s’mund të përmbajë shenja null." + +msgid "This field cannot be blank." +msgstr "Kjo fushë s’mund të jetë e paplotësuar." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ka tashmë një %(model_name)s me këtë %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s duhet të jetë unike për %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Fushë e llojit: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Vlera “%(value)s” duhet të jetë ose True, ose False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Vlera për “%(value)s” duhet të jetë ose True, ose False, ose None." + +msgid "Boolean (Either True or False)" +msgstr "Buleane (Ose True, ose False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Varg (deri në %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Numra të plotë të ndarë me presje" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Vlera “%(value)s” ka një format të pavlefshëm datash. Duhet të jetë në " +"formatin YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Vlera “%(value)s” ka formatin e saktë (YYYY-MM-DD), por është datë e " +"pavlefshme." + +msgid "Date (without time)" +msgstr "Datë (pa kohë)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Vlera “'%(value)s” ka një format të pavlefshëm. Duhet të jetë në formatin " +"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Vlera “%(value)s” ka format të saktë (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]), " +"por është datë/kohë e pavlefshme." + +msgid "Date (with time)" +msgstr "Datë (me kohë)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Vlera “%(value)s” duhet të jetë një numër dhjetor." + +msgid "Decimal number" +msgstr "Numër dhjetor" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Vlera “%(value)s” ka format të pavlefshëm. Duhet të jetë në formatin [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Kohëzgjatje" + +msgid "Email address" +msgstr "Adresë email" + +msgid "File path" +msgstr "Shteg kartele" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Vlera “%(value)s” duhet të jetë numër i plotë." + +msgid "Integer" +msgstr "Numër i plotë" + +msgid "Big (8 byte) integer" +msgstr "Numër i plotë i madh (8 bajte)" + +msgid "Small integer" +msgstr "Numër i plotë i vogël" + +msgid "IPv4 address" +msgstr "Adresë IPv4" + +msgid "IP address" +msgstr "Adresë IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Vlera “%(value)s” duhet të jetë ose None, ose True, ose False." + +msgid "Boolean (Either True, False or None)" +msgstr "Buleane (Ose True, ose False, ose None)" + +msgid "Positive big integer" +msgstr "Numër i plotë pozitiv i madh" + +msgid "Positive integer" +msgstr "Numër i plotë pozitiv" + +msgid "Positive small integer" +msgstr "Numër i plotë pozitiv i vogël" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Identifikues (deri në %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Vlera “%(value)s” ka format të pavlefshëm. Duhet të jetë në formatin HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Vlera “%(value)s” ka formatin e saktë (HH:MM[:ss[.uuuuuu]]) por është kohë e " +"pavlefshme." + +msgid "Time" +msgstr "Kohë" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Të dhëna dyore të papërpunuara" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” s’është UUID i vlefshëm." + +msgid "Universally unique identifier" +msgstr "Identifikues universalisht unik" + +msgid "File" +msgstr "Kartelë" + +msgid "Image" +msgstr "Figurë" + +msgid "A JSON object" +msgstr "Objekt JSON" + +msgid "Value must be valid JSON." +msgstr "Vlera duhet të jetë JSON i vlefshëm." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Instanca %(model)s me %(field)s %(value)r s’ekziston." + +msgid "Foreign Key (type determined by related field)" +msgstr "Kyç i Jashtëm (lloj i përcaktuar nga fusha përkatëse)" + +msgid "One-to-one relationship" +msgstr "Marrëdhënie një-për-një" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Marrëdhënie %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Marrëdhënie %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Marrëdhënie shumë-për-shumë" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Kjo fushë është e domosdoshme." + +msgid "Enter a whole number." +msgstr "Jepni një numër të tërë." + +msgid "Enter a valid date." +msgstr "Jepni një datë të vlefshme." + +msgid "Enter a valid time." +msgstr "Jepni një kohë të vlefshme." + +msgid "Enter a valid date/time." +msgstr "Jepni një datë/kohë të vlefshme." + +msgid "Enter a valid duration." +msgstr "Jepni një kohëzgjatje të vlefshme." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Numri i ditëve duhet të jetë mes {min_days} dhe {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"S’u parashtrua ndonjë kartelë. Kontrolloni llojin e kodimit te formulari." + +msgid "No file was submitted." +msgstr "S’u parashtrua kartelë." + +msgid "The submitted file is empty." +msgstr "Kartela e parashtruar është e zbrazët." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Sigurohuni që ky emër kartele ka të shumtën %(max)d shenjë (it has " +"%(length)d)." +msgstr[1] "" +"Sigurohuni që ky emër kartele ka të shumtën %(max)d shenja (it has " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ju lutemi, ose parashtroni një kartelë, ose i vini shenjë kutizës për " +"spastrim, jo që të dyja." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Ngarkoni një figurë të vlefshme. Kartela që ngarkuat ose nuk qe figurë, ose " +"qe figurë e dëmtuar." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Përzgjidhni një zgjedhje të vlefshme. %(value)s s’është një nga zgjedhjet e " +"mundshme." + +msgid "Enter a list of values." +msgstr "Jepni një listë vlerash." + +msgid "Enter a complete value." +msgstr "Jepni një vlerë të plotë." + +msgid "Enter a valid UUID." +msgstr "Jepni një UUID të vlefshëm." + +msgid "Enter a valid JSON." +msgstr "Jepni një JSON të vlefshëm." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Fushë e fshehur %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Mungojnë të dhëna ManagementForm, ose në to janë futur hundët. Fusha që " +"mungojnë: %(field_names)s. Nëse problemi vazhdon, mund të duhet të " +"parashtroni një raport të mete." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Ju lutemi, parashtroni e shumta 1%d formular." +msgstr[1] "Ju lutemi, parashtroni e shumta %d formularë." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Ju lutemi, parashtroni të paktën 1%d formular." +msgstr[1] "Ju lutemi, parashtroni të paktën 1%d formularë." + +msgid "Order" +msgstr "Renditi" + +msgid "Delete" +msgstr "Fshije" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ju lutemi, ndreqni të dhënat e përsëdytura për %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ju lutemi, ndreqni të dhënat e përsëdytura për %(field)s, të cilat duhet të " +"jenë unike." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ju lutemi, ndreqni të dhënat e përsëdytura për %(field_name)s të cilat duhet " +"të jenë unike për %(lookup)s te %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ju lutemi, ndreqni më poshtë vlerat e përsëdytura." + +msgid "The inline value did not match the parent instance." +msgstr "Vlera e brendshme s’u përputh me instancën prind." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Përzgjidhni një zgjedhje të vlefshme. Ajo zgjedhje nuk është një nga " +"zgjedhjet e mundshme." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” s’është vlerë e vlefshme." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s s’u interpretua dot brenda zonës kohore %(current_timezone)s; " +"mund të jetë e dykuptimtë, ose mund të mos ekzistojë." + +msgid "Clear" +msgstr "Spastroje" + +msgid "Currently" +msgstr "Tani" + +msgid "Change" +msgstr "Ndryshoje" + +msgid "Unknown" +msgstr "E panjohur" + +msgid "Yes" +msgstr "Po" + +msgid "No" +msgstr "Jo" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "po,jo,ndoshta" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "mesnatë" + +msgid "noon" +msgstr "mesditë" + +msgid "Monday" +msgstr "E hënë" + +msgid "Tuesday" +msgstr "E martë" + +msgid "Wednesday" +msgstr "E mërkurë" + +msgid "Thursday" +msgstr "E enjte" + +msgid "Friday" +msgstr "E premte" + +msgid "Saturday" +msgstr "E shtunë" + +msgid "Sunday" +msgstr "E dielë" + +msgid "Mon" +msgstr "Hën" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mër" + +msgid "Thu" +msgstr "Enj" + +msgid "Fri" +msgstr "Pre" + +msgid "Sat" +msgstr "Sht" + +msgid "Sun" +msgstr "Die" + +msgid "January" +msgstr "Janar" + +msgid "February" +msgstr "Shkurt" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Prill" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Qershor" + +msgid "July" +msgstr "Korrik" + +msgid "August" +msgstr "Gusht" + +msgid "September" +msgstr "Shtator" + +msgid "October" +msgstr "Tetor" + +msgid "November" +msgstr "Nëntor" + +msgid "December" +msgstr "Dhjetor" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "shk" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "pri" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "qer" + +msgid "jul" +msgstr "kor" + +msgid "aug" +msgstr "gus" + +msgid "sep" +msgstr "sht" + +msgid "oct" +msgstr "tet" + +msgid "nov" +msgstr "nën" + +msgid "dec" +msgstr "dhj" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Shk." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Prill" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Qershor" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Korrik" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Gus." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Shta." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Tet." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nën." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dhj." + +msgctxt "alt. month" +msgid "January" +msgstr "Janar" + +msgctxt "alt. month" +msgid "February" +msgstr "Shkurt" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "Prill" + +msgctxt "alt. month" +msgid "May" +msgstr "Maj" + +msgctxt "alt. month" +msgid "June" +msgstr "Qershor" + +msgctxt "alt. month" +msgid "July" +msgstr "Korrik" + +msgctxt "alt. month" +msgid "August" +msgstr "Gusht" + +msgctxt "alt. month" +msgid "September" +msgstr "Shtator" + +msgctxt "alt. month" +msgid "October" +msgstr "Tetor" + +msgctxt "alt. month" +msgid "November" +msgstr "Nëntor" + +msgctxt "alt. month" +msgid "December" +msgstr "Dhjetor" + +msgid "This is not a valid IPv6 address." +msgstr "Kjo s’është adresë IPv6 e vlefshme." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ose" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d vit" +msgstr[1] "%(num)d vjet" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d muaj" +msgstr[1] "%(num)d muaj" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d javë" +msgstr[1] "%(num)d javë" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d ditë" +msgstr[1] "%(num)d ditë" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d orë" +msgstr[1] "%(num)d orë" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutë" +msgstr[1] "%(num)d minuta" + +msgid "Forbidden" +msgstr "E ndaluar" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verifikimi CSRF dështoi. Kërkesa u ndërpre." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Këtë mesazh po e shihni ngaqë ky sajt HTTPS e ka të domosdoshme dërgimin e " +"“Referer header” te shfletuesi juaj, por s’u dërgua ndonjë i tillë. Kjo krye " +"është e domosdoshme për arsye sigurie, për të bërë të mundur që shfletuesi " +"juaj të mos komprometohet nga palë të treta." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Nëse e keni formësuar shfletuesin tuaj të çaktivizojë kryet “Referer”, ju " +"lutemi, riaktivizojini, ose për lidhje HTTPS, ose për kërkesa “same-origin”." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Nëse përdorni etiketën " +"etiketën ose përfshini kryet “Referrer-Policy: no-referrer”, ju lutemi, " +"hiqini. Mbrojtja CSRF lyp që kryet “Referer” të kryejnë kontroll strikt " +"referuesi. Nëse shqetësoheni për privatësinë, për lidhje te sajte palësh të " +"treta përdorni alternativa si ." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Këtë mesazh po e shihni ngaqë ky sajt lyp një cookie CSRF, kur parashtrohen " +"formularë. Kjo cookie është e domosdoshme për arsye sigurie, për të bërë të " +"mundur që shfletuesi juaj të mos komprometohet nga palë të treta." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Nëse e keni formësuar shfletuesin tuaj të çaktivizojë cookie-t, ju lutemi, " +"riaktivizojini, të paktën për këtë sajt, ose për kërkesa “same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "Më tepër të dhëna mund të gjeni me DEBUG=True." + +msgid "No year specified" +msgstr "Nuk është caktuar vit" + +msgid "Date out of range" +msgstr "Datë jashtë intervali" + +msgid "No month specified" +msgstr "Nuk është caktuar muaj" + +msgid "No day specified" +msgstr "Nuk është caktuar ditë" + +msgid "No week specified" +msgstr "Nuk është caktuar javë" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nuk ka %(verbose_name_plural)s të përcaktuar" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s i ardhshëm jo i passhëm, ngaqë %(class_name)s." +"allow_future është False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"U dha varg i pavlefshëm date “%(datestr)s” formati i dhënë “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "S’u gjetën %(verbose_name)s me përputhje" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Faqja nuk është “last”, as mund të shndërrohet në një int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Faqe e pavlefshme (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Listë e zbrazët dhe “%(class_name)s.allow_empty” është False." + +msgid "Directory indexes are not allowed here." +msgstr "Këtu s’lejohen tregues drejtorish." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” s’ekziston" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Tregues i %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalimi funksionoi me sukses! Përgëzime!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Shihni shënimet për hedhjen në qarkullim të " +"Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Po e shihni këtë faqe ngaqë te kartela juaj e rregullimeve gjendet DEBUG=True dhe s’keni formësuar ndonjë URL." + +msgid "Django Documentation" +msgstr "Dokumentim i Django-s" + +msgid "Topics, references, & how-to’s" +msgstr "Tema, referenca, & how-to" + +msgid "Tutorial: A Polling App" +msgstr "Përkujdesore: Një Aplikacion Për Sondazhe" + +msgid "Get started with Django" +msgstr "Si t’ia filloni me Django-n" + +msgid "Django Community" +msgstr "Bashkësia Django" + +msgid "Connect, get help, or contribute" +msgstr "Lidhuni, merrni ndihmë, ose jepni ndihmesë" diff --git a/venv/Lib/site-packages/django/conf/locale/sq/__init__.py b/venv/Lib/site-packages/django/conf/locale/sq/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sq/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sq/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4a2d16f6e85ebe8ac66ee06efb0aa74bceb7143 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`laiM;Ed}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04yUk<^TWy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sq/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sq/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7c1fc7b1a2f976f3a611df6cf9bf4fe75136018 GIT binary patch literal 389 zcmYk2&q~8U5XQ6l(^gBx`UJTaOmY_ym!>g=rYT8!$g&vH?6#yf*_urX=8e4hJOxi) zeS)4$6}1E3$Nav5ff?58oeNEUKE5yBL_zpC!fAm9?i+EnF(M#=00fALL?R)H$Ves% zQb-H6NZS_%omwHPrG~Y#(o-GQ(y^D;s#PnYmTBYwuJ=Hn4%(<|!eA6xuIIo2b%U|< z2mNpay~uH=f&Dwb{2>#Dze(S>T`!1Em-NliaO}WI DC<17p literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sq/formats.py b/venv/Lib/site-packages/django/conf/locale/sq/formats.py new file mode 100644 index 000000000..c7ed92e12 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sq/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d F Y" +TIME_FORMAT = "g.i.A" +# DATETIME_FORMAT = +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "Y-m-d" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6743f6b07419ebdfd2688db5d779977a85e10a33 GIT binary patch literal 34059 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 T(;`vpL)F75pR~Gv%Hsb5oD#jT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..5ba534d9c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,1330 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018-2019 +# Igor Jerosimić, 2019-2021 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +# Mariusz Felisiak , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:29+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Afrikaans" +msgstr "африкански" + +msgid "Arabic" +msgstr "арапски" + +msgid "Algerian Arabic" +msgstr "Алжирски арапски" + +msgid "Asturian" +msgstr "астуријски" + +msgid "Azerbaijani" +msgstr "азербејџански" + +msgid "Bulgarian" +msgstr "бугарски" + +msgid "Belarusian" +msgstr "белоруски" + +msgid "Bengali" +msgstr "бенгалски" + +msgid "Breton" +msgstr "бретонски" + +msgid "Bosnian" +msgstr "босански" + +msgid "Catalan" +msgstr "каталонски" + +msgid "Czech" +msgstr "чешки" + +msgid "Welsh" +msgstr "велшки" + +msgid "Danish" +msgstr "дански" + +msgid "German" +msgstr "немачки" + +msgid "Lower Sorbian" +msgstr "доњолужичкосрпски" + +msgid "Greek" +msgstr "грчки" + +msgid "English" +msgstr "енглески" + +msgid "Australian English" +msgstr "аустралијски енглески" + +msgid "British English" +msgstr "британски енглески" + +msgid "Esperanto" +msgstr "есперанто" + +msgid "Spanish" +msgstr "шпански" + +msgid "Argentinian Spanish" +msgstr "аргентински шпански" + +msgid "Colombian Spanish" +msgstr "колумбијски шпански" + +msgid "Mexican Spanish" +msgstr "мексички шпански" + +msgid "Nicaraguan Spanish" +msgstr "никарагвански шпански" + +msgid "Venezuelan Spanish" +msgstr "венецуелански шпански" + +msgid "Estonian" +msgstr "естонски" + +msgid "Basque" +msgstr "баскијски" + +msgid "Persian" +msgstr "персијски" + +msgid "Finnish" +msgstr "фински" + +msgid "French" +msgstr "француски" + +msgid "Frisian" +msgstr "фризијски" + +msgid "Irish" +msgstr "ирски" + +msgid "Scottish Gaelic" +msgstr "шкотски гелски" + +msgid "Galician" +msgstr "галицијски" + +msgid "Hebrew" +msgstr "хебрејски" + +msgid "Hindi" +msgstr "хинду" + +msgid "Croatian" +msgstr "хрватски" + +msgid "Upper Sorbian" +msgstr "горњолужичкосрпски" + +msgid "Hungarian" +msgstr "мађарски" + +msgid "Armenian" +msgstr "јерменски" + +msgid "Interlingua" +msgstr "интерлингва" + +msgid "Indonesian" +msgstr "индонежански" + +msgid "Igbo" +msgstr "Игбо" + +msgid "Ido" +msgstr "идо" + +msgid "Icelandic" +msgstr "исландски" + +msgid "Italian" +msgstr "италијански" + +msgid "Japanese" +msgstr "јапански" + +msgid "Georgian" +msgstr "грузијски" + +msgid "Kabyle" +msgstr "кабилски" + +msgid "Kazakh" +msgstr "казашки" + +msgid "Khmer" +msgstr "кмерски" + +msgid "Kannada" +msgstr "канада" + +msgid "Korean" +msgstr "корејски" + +msgid "Kyrgyz" +msgstr "Киргиски" + +msgid "Luxembourgish" +msgstr "луксембуршки" + +msgid "Lithuanian" +msgstr "литвански" + +msgid "Latvian" +msgstr "латвијски" + +msgid "Macedonian" +msgstr "македонски" + +msgid "Malayalam" +msgstr "малајаламски" + +msgid "Mongolian" +msgstr "монголски" + +msgid "Marathi" +msgstr "маратхи" + +msgid "Malay" +msgstr "малајски" + +msgid "Burmese" +msgstr "бурмански" + +msgid "Norwegian Bokmål" +msgstr "норвешки књижевни" + +msgid "Nepali" +msgstr "непалски" + +msgid "Dutch" +msgstr "холандски" + +msgid "Norwegian Nynorsk" +msgstr "норвешки нови" + +msgid "Ossetic" +msgstr "осетински" + +msgid "Punjabi" +msgstr "панџаби" + +msgid "Polish" +msgstr "пољски" + +msgid "Portuguese" +msgstr "португалски" + +msgid "Brazilian Portuguese" +msgstr "бразилски португалски" + +msgid "Romanian" +msgstr "румунски" + +msgid "Russian" +msgstr "руски" + +msgid "Slovak" +msgstr "словачки" + +msgid "Slovenian" +msgstr "словеначки" + +msgid "Albanian" +msgstr "албански" + +msgid "Serbian" +msgstr "српски" + +msgid "Serbian Latin" +msgstr "српски (латиница)" + +msgid "Swedish" +msgstr "шведски" + +msgid "Swahili" +msgstr "свахили" + +msgid "Tamil" +msgstr "тамилски" + +msgid "Telugu" +msgstr "телугу" + +msgid "Tajik" +msgstr "Таџики" + +msgid "Thai" +msgstr "тајландски" + +msgid "Turkmen" +msgstr "Туркменски" + +msgid "Turkish" +msgstr "турски" + +msgid "Tatar" +msgstr "татарски" + +msgid "Udmurt" +msgstr "удмуртски" + +msgid "Ukrainian" +msgstr "украјински" + +msgid "Urdu" +msgstr "урду" + +msgid "Uzbek" +msgstr "Узбекистански" + +msgid "Vietnamese" +msgstr "вијетнамски" + +msgid "Simplified Chinese" +msgstr "поједностављени кинески" + +msgid "Traditional Chinese" +msgstr "традиционални кинески" + +msgid "Messages" +msgstr "Poruke" + +msgid "Site Maps" +msgstr "Мапе сајта" + +msgid "Static Files" +msgstr "Статички фајлови" + +msgid "Syndication" +msgstr "Удруживање садржаја" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Задати број стране није цео број" + +msgid "That page number is less than 1" +msgstr "Задати број стране је мањи од 1" + +msgid "That page contains no results" +msgstr "Тражена страна не садржи резултате" + +msgid "Enter a valid value." +msgstr "Унесите исправну вредност." + +msgid "Enter a valid URL." +msgstr "Унесите исправан URL." + +msgid "Enter a valid integer." +msgstr "Унесите исправан цео број." + +msgid "Enter a valid email address." +msgstr "Унесите исправну и-мејл адресу." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Унесите исрпаван „слаг“, који се састоји од слова, бројки, доњих црта или " +"циртица." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Унесите исправан \"слаг\", који се састоји од Уникод слова, бројки, доњих " +"црта или цртица." + +msgid "Enter a valid IPv4 address." +msgstr "Унесите исправну IPv4 адресу." + +msgid "Enter a valid IPv6 address." +msgstr "Унесите исправну IPv6 адресу." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Унесите исправну IPv4 или IPv6 адресу." + +msgid "Enter only digits separated by commas." +msgstr "Унесите само цифре раздвојене запетама." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ово поље мора да буде %(limit_value)s (тренутно има %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ова вредност мора да буде мања од %(limit_value)s. или тачно толико." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ова вредност мора бити већа од %(limit_value)s или тачно толико." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ово поље мора да има најмање %(limit_value)d карактер (тренутно има " +"%(show_value)d)." +msgstr[1] "" +"Ово поље мора да има најмање %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[2] "" +"Ово поље мора да има најмање %(limit_value)d карактера (тренутно има " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[1] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[2] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Унесите број." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Укупно не може бити више од %(max)s цифре." +msgstr[1] "Укупно не може бити више од %(max)s цифре." +msgstr[2] "Укупно не може бити више од %(max)s цифара." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Не може бити више од %(max)s децимале." +msgstr[1] "Не може бити више од %(max)s децимале." +msgstr[2] "Не може бити више од %(max)s децимала." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Не може бити више од %(max)s цифре пре децималног зареза." +msgstr[1] "Не може бити више од %(max)s цифре пре децималног зареза." +msgstr[2] "Не може бити више од %(max)s цифара пре децималног зареза." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Екстензија датотеке \"%(extension)s\" није дозвољена. Дозвољене су следеће " +"екстензије: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "'Null' карактери нису дозвољени." + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s са пољем %(field_labels)s већ постоји." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Вредност %(value)r није валидна." + +msgid "This field cannot be null." +msgstr "Ово поље не може бити 'null'." + +msgid "This field cannot be blank." +msgstr "Ово поље не може да остане празно." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s са пољем %(field_label)s већ постоји." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s мора бити јединствен(a) за %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поље типа: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Вредност \"%(value)s\" мора бити True или False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\" вредност мора бити True, False или None." + +msgid "Boolean (Either True or False)" +msgstr "Булова вредност (True или False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Стринг са макс. дужином %(max_length)s" + +msgid "Comma-separated integers" +msgstr "Цели бројеви раздвојени запетама" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Вредност \"%(value)s\" нема исправан формат датума. Мора бити у формату ГГГГ-" +"ММ-ДД." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Вредност \"%(value)s\" има исправан формат (ГГГГ-ММ-ДД) али то није исправан " +"датум." + +msgid "Date (without time)" +msgstr "Датум (без времена)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Вредност \"%(value)s\" нема исправан формат. Мора бити у формату ГГГГ-ММ-ДД " +"ЧЧ:ММ[:сс[.uuuuuu]][TZ] ." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Вредност \"%(value)s\" има исправан формат (ГГГГ-ММ-ДД ЧЧ:ММ[:сс[.uuuuuu]]" +"[TZ]) али то није исправан датум/време." + +msgid "Date (with time)" +msgstr "Датум (са временом)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "Вредност \"%(value)s\" мора бити децимални број." + +msgid "Decimal number" +msgstr "Децимални број" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"Вредност \"%(value)s\" нема исправан формат. Мора бити у формату [ДД] [ЧЧ:" +"[ММ:]]сс[.uuuuuu]." + +msgid "Duration" +msgstr "Временски интервал" + +msgid "Email address" +msgstr "Имејл адреса" + +msgid "File path" +msgstr "Путања фајла" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Вредност \"%(value)s\" мора бити број са покретним зарезом." + +msgid "Floating point number" +msgstr "Број са покретним зарезом" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Вредност \"%(value)s\" мора бити цео број." + +msgid "Integer" +msgstr "Цео број" + +msgid "Big (8 byte) integer" +msgstr "Велики (8 бајтова) цео број" + +msgid "Small integer" +msgstr "Мали цео број" + +msgid "IPv4 address" +msgstr "IPv4 адреса" + +msgid "IP address" +msgstr "IP адреса" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Вредност \"%(value)s\" мора бити None, True или False." + +msgid "Boolean (Either True, False or None)" +msgstr "Булова вредност (True, False или None)" + +msgid "Positive big integer" +msgstr "Велик позитиван цео број" + +msgid "Positive integer" +msgstr "Позитиван цео број" + +msgid "Positive small integer" +msgstr "Позитиван мали цео број" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг са макс. дужином %(max_length)s" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Вредност \"%(value)s\" нема исправан формат. Мора бити у формату ЧЧ:ММ[:сс[." +"uuuuuu]] ." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Вредност \"%(value)s\" има исправан формат (ЧЧ:ММ[:сс[.uuuuuu]]) али то није " +"исправно време." + +msgid "Time" +msgstr "Време" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Сирови бинарни подаци" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" није исправан UUID." + +msgid "Universally unique identifier" +msgstr "Универзално јединствени идентификатор" + +msgid "File" +msgstr "Фајл" + +msgid "Image" +msgstr "Слика" + +msgid "A JSON object" +msgstr "JSON објекат" + +msgid "Value must be valid JSON." +msgstr "Вредност мора бити исправан JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s инстанца са вредношћу %(value)r у пољу %(field)s не постоји." + +msgid "Foreign Key (type determined by related field)" +msgstr "Спољни кључ (тип је одређен асоцираном колоном)" + +msgid "One-to-one relationship" +msgstr "Релација један на један" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Релација %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Релације %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Релација више на више" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ово поље се мора попунити." + +msgid "Enter a whole number." +msgstr "Унесите цео број." + +msgid "Enter a valid date." +msgstr "Унесите исправан датум." + +msgid "Enter a valid time." +msgstr "Унесите исправно време" + +msgid "Enter a valid date/time." +msgstr "Унесите исправан датум/време." + +msgid "Enter a valid duration." +msgstr "Унесите исправан временски интервал." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Број дана мора бити између {min_days} и {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Фајл није пребачен. Проверите тип енкодирања на форми." + +msgid "No file was submitted." +msgstr "Фајл није пребачен." + +msgid "The submitted file is empty." +msgstr "Пребачени фајл је празан." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." +msgstr[1] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." +msgstr[2] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Може се само послати фајл или избрисати, не оба." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Пребаците исправан фајл. Фајл који је пребачен или није слика, или је " +"оштећен." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"%(value)s није међу понуђеним вредностима. Одаберите једну од понуђених." + +msgid "Enter a list of values." +msgstr "Унесите листу вредности." + +msgid "Enter a complete value." +msgstr "Унесите комплетну вредност." + +msgid "Enter a valid UUID." +msgstr "Унесите исправан UUID." + +msgid "Enter a valid JSON." +msgstr "Унесите исправан JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скривено поље %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Подаци од ManagementForm недостају или су покварени. Поља која недостају: " +"%(field_names)s. Можда ће бити потребно да пријавите грешку ако се проблем " +"настави." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Молим проследите највише %d форму." +msgstr[1] "Молим проследите највише %d форме." +msgstr[2] "Молим проследите највише %d форми." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Молим проследите најмање %d форму." +msgstr[1] "Молим проследите најмање %d форме." +msgstr[2] "Молим проследите најмање %d форми." + +msgid "Order" +msgstr "Редослед" + +msgid "Delete" +msgstr "Обриши" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Исправите вредност за поље %(field)s - оно мора бити јединствено." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Исправите вредности за поља %(field)s - њихова комбинација мора бити " +"јединствена." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Иправите вредност за поље %(field_name)s, оно мора бити јединствено за " +"%(lookup)s у %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Исправите дуплиране вредности доле." + +msgid "The inline value did not match the parent instance." +msgstr "Директно унета вредност не одговара инстанци родитеља." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Одабрана вредност није међу понуђенима. Одаберите једну од понуђених." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" није исправна вредност." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Време %(datetime)s се не може протумачити у временској зони " +"%(current_timezone)s; можда је двосмислено или не постоји." + +msgid "Clear" +msgstr "Очисти" + +msgid "Currently" +msgstr "Тренутно" + +msgid "Change" +msgstr "Измени" + +msgid "Unknown" +msgstr "Непознато" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "да,не,можда" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d бајт" +msgstr[1] "%(size)d бајта" +msgstr[2] "%(size)d бајтова" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "по п." + +msgid "a.m." +msgstr "пре п." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "поноћ" + +msgid "noon" +msgstr "подне" + +msgid "Monday" +msgstr "понедељак" + +msgid "Tuesday" +msgstr "уторак" + +msgid "Wednesday" +msgstr "среда" + +msgid "Thursday" +msgstr "четвртак" + +msgid "Friday" +msgstr "петак" + +msgid "Saturday" +msgstr "субота" + +msgid "Sunday" +msgstr "недеља" + +msgid "Mon" +msgstr "пон." + +msgid "Tue" +msgstr "уто." + +msgid "Wed" +msgstr "сре." + +msgid "Thu" +msgstr "чет." + +msgid "Fri" +msgstr "пет." + +msgid "Sat" +msgstr "суб." + +msgid "Sun" +msgstr "нед." + +msgid "January" +msgstr "јануар" + +msgid "February" +msgstr "фебруар" + +msgid "March" +msgstr "март" + +msgid "April" +msgstr "април" + +msgid "May" +msgstr "мај" + +msgid "June" +msgstr "јун" + +msgid "July" +msgstr "јул" + +msgid "August" +msgstr "август" + +msgid "September" +msgstr "септембар" + +msgid "October" +msgstr "октобар" + +msgid "November" +msgstr "новембар" + +msgid "December" +msgstr "децембар" + +msgid "jan" +msgstr "јан." + +msgid "feb" +msgstr "феб." + +msgid "mar" +msgstr "мар." + +msgid "apr" +msgstr "апр." + +msgid "may" +msgstr "мај." + +msgid "jun" +msgstr "јун." + +msgid "jul" +msgstr "јул." + +msgid "aug" +msgstr "ауг." + +msgid "sep" +msgstr "сеп." + +msgid "oct" +msgstr "окт." + +msgid "nov" +msgstr "нов." + +msgid "dec" +msgstr "дец." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Јан." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Феб." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Април" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Мај" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Јун" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Јул" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Септ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Нов." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дец." + +msgctxt "alt. month" +msgid "January" +msgstr "Јануар" + +msgctxt "alt. month" +msgid "February" +msgstr "Фебруар" + +msgctxt "alt. month" +msgid "March" +msgstr "Март" + +msgctxt "alt. month" +msgid "April" +msgstr "Април" + +msgctxt "alt. month" +msgid "May" +msgstr "Мај" + +msgctxt "alt. month" +msgid "June" +msgstr "Јун" + +msgctxt "alt. month" +msgid "July" +msgstr "Јул" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Септембар" + +msgctxt "alt. month" +msgid "October" +msgstr "Октобар" + +msgctxt "alt. month" +msgid "November" +msgstr "Новембар" + +msgctxt "alt. month" +msgid "December" +msgstr "Децембар" + +msgid "This is not a valid IPv6 address." +msgstr "Ово није валидна IPv6 адреса." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d година" +msgstr[1] "%(num)d године" +msgstr[2] "%(num)d година" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месец" +msgstr[1] "%(num)d месеца" +msgstr[2] "%(num)d месеци" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d недеља" +msgstr[1] "%(num)d недеље" +msgstr[2] "%(num)d недеља" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d дан" +msgstr[1] "%(num)d дана" +msgstr[2] "%(num)d дана" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d сат" +msgstr[1] "%(num)d сата" +msgstr[2] "%(num)d сати" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минута" +msgstr[2] "%(num)d минута" + +msgid "Forbidden" +msgstr "Забрањено" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF верификација није прошла. Захтев одбијен." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Ова порука је приказана јер овај HTTPS сајт захтева да \"Referer header\" " +"буде послат од стране вашег интернет прегледача, што тренутно није случај. " +"Поменуто заглавље је потребно из безбедоносних разлога, да би се осигурало " +"да ваш прегледач није под контролом трећих лица." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ако сте подесили интернет прегледач да не шаље \"Referer\" заглавља, поново " +"их укључите, барем за овај сајт, или за HTTPS конекције, или за \"same-origin" +"\" захтеве." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ако користите таг или " +"\"Referrer-Policy: no-referrer\" заглавље, молимо да их уклоните. CSRF " +"заштита захтева \"Referer\" заглавље да би се обавила стриктна \"referrer\" " +"провера. Уколико вас брине приватност, користите алтернативе као за линкове ка другим сајтовима." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ова порука је приказана јер овај сајт захтева CSRF куки када се прослеђују " +"подаци из форми. Овај куки је потребан из сигурносних разлога, да би се " +"осигурало да ваш претраживач није под контролом трећих лица." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ако је ваш интернет прегедач подешен да онемогући колачиће, молимо да их " +"укључите, барем за овај сајт, или за \"same-origin\" захтеве." + +msgid "More information is available with DEBUG=True." +msgstr "Више информација је доступно са DEBUG=True." + +msgid "No year specified" +msgstr "Година није назначена" + +msgid "Date out of range" +msgstr "Датум ван опсега" + +msgid "No month specified" +msgstr "Месец није назначен" + +msgid "No day specified" +msgstr "Дан није назначен" + +msgid "No week specified" +msgstr "Недеља није назначена" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Недоступни објекти %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Опција „future“ није доступна за „%(verbose_name_plural)s“ јер " +"%(class_name)s.allow_future има вредност False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Неисправан датум „%(datestr)s“ за формат „%(format)s“" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ниједан објекат класе %(verbose_name)s није нађен датим упитом." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Страница није последња, нити може бити конвертована у тип \"int\"." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Неисправна страна (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Празна листа и „%(class_name)s.allow_empty“ има вредност False." + +msgid "Directory indexes are not allowed here." +msgstr "Индекси директоријума нису дозвољени овде." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ не постоји" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Индекс директоријума %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Инсталација је прошла успешно. Честитке!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Погледајте напомене уз издање за Ђанго " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Ова страна је приказана јер је DEBUG=True у вашим подешавањима и нисте конфигурисали ниједан URL." + +msgid "Django Documentation" +msgstr "Ђанго документација" + +msgid "Topics, references, & how-to’s" +msgstr "Теме, референце, & како-да" + +msgid "Tutorial: A Polling App" +msgstr "Упутство: апликација за гласање" + +msgid "Get started with Django" +msgstr "Почните са Ђангом" + +msgid "Django Community" +msgstr "Ђанго заједница" + +msgid "Connect, get help, or contribute" +msgstr "Повежите се, потражите помоћ или дајте допринос" diff --git a/venv/Lib/site-packages/django/conf/locale/sr/__init__.py b/venv/Lib/site-packages/django/conf/locale/sr/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sr/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sr/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7a3f21c887035ff061db10e9fa00dc08f085d7a GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lagly}d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04zl`=Kufz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sr/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sr/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5a7e1fbc656398f39d736d9a82bf2881f3a8ad3 GIT binary patch literal 895 zcmZvaL64e17=}SdMbULN-8Sio3kQ?#csET`c11B=zyPLkLQ2pnsxSSxHQQJqHXW#U)%rdaClYv;G55Cuo7BEMq9Ip-j8!;|?Ywr4q#w<43WBt!mOd zI3!u?$a+V%lZ)33%Cn^Y0w26Pn*7q6VOejAlQ)@}j_!B=qs-rU)yO2Ip=|bJLWZ6u zq>V@Z!#xil^7PXgtr`-$ilcfx)6x|OiOxVjh&tKD}9+XlvP zsOf0t$X1MQhSiOcex+Jo-!ezTfzkiTMFslm`|=oEcia&PBH~(GLVULyPPgk|6BD<; zh_&s+?JXh_Uk;;i8BAmMF4)|;H;ai&7IAQS>rcP?^MJT`>2Ky?dm3(L?NvDSS3#RZ n?O7PD{g}Yp-M#Q}9pddO_{9EK@}3p|0H3`CAXLE_;0694^i<)= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sr/formats.py b/venv/Lib/site-packages/django/conf/locale/sr/formats.py new file mode 100644 index 000000000..423f86d75 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sr/formats.py @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y." +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y. H:i" +YEAR_MONTH_FORMAT = "F Y." +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "j.m.Y." +SHORT_DATETIME_FORMAT = "j.m.Y. H:i" +FIRST_DAY_OF_WEEK = 1 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y.", # '25.10.2006.' + "%d.%m.%y.", # '25.10.06.' + "%d. %m. %Y.", # '25. 10. 2006.' + "%d. %m. %y.", # '25. 10. 06.' + # "%d. %b %y.", # '25. Oct 06.' + # "%d. %B %y.", # '25. October 06.' + # "%d. %b '%y.", # '25. Oct '06.' + # "%d. %B '%y.", # '25. October '06.' + # "%d. %b %Y.", # '25. Oct 2006.' + # "%d. %B %Y.", # '25. October 2006.' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y. %H:%M:%S", # '25.10.2006. 14:30:59' + "%d.%m.%Y. %H:%M:%S.%f", # '25.10.2006. 14:30:59.000200' + "%d.%m.%Y. %H:%M", # '25.10.2006. 14:30' + "%d.%m.%y. %H:%M:%S", # '25.10.06. 14:30:59' + "%d.%m.%y. %H:%M:%S.%f", # '25.10.06. 14:30:59.000200' + "%d.%m.%y. %H:%M", # '25.10.06. 14:30' + "%d. %m. %Y. %H:%M:%S", # '25. 10. 2006. 14:30:59' + "%d. %m. %Y. %H:%M:%S.%f", # '25. 10. 2006. 14:30:59.000200' + "%d. %m. %Y. %H:%M", # '25. 10. 2006. 14:30' + "%d. %m. %y. %H:%M:%S", # '25. 10. 06. 14:30:59' + "%d. %m. %y. %H:%M:%S.%f", # '25. 10. 06. 14:30:59.000200' + "%d. %m. %y. %H:%M", # '25. 10. 06. 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2072e7a568202194014a998cfcfb8656d1328f01 GIT binary patch literal 22633 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 Nhmz0VnY3pX{tFqu$, 2020 +# Igor Jerosimić, 2019-2021 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 23:38+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Afrikaans" +msgstr "afrikanski" + +msgid "Arabic" +msgstr "arapski" + +msgid "Algerian Arabic" +msgstr "Alžirski arapski" + +msgid "Asturian" +msgstr "asturijski" + +msgid "Azerbaijani" +msgstr "azerbejdžanski" + +msgid "Bulgarian" +msgstr "bugarski" + +msgid "Belarusian" +msgstr "beloruski" + +msgid "Bengali" +msgstr "bengalski" + +msgid "Breton" +msgstr "bretonski" + +msgid "Bosnian" +msgstr "bosanski" + +msgid "Catalan" +msgstr "katalonski" + +msgid "Czech" +msgstr "češki" + +msgid "Welsh" +msgstr "velški" + +msgid "Danish" +msgstr "danski" + +msgid "German" +msgstr "nemački" + +msgid "Lower Sorbian" +msgstr "donjolužičkosrpski" + +msgid "Greek" +msgstr "grčki" + +msgid "English" +msgstr "engleski" + +msgid "Australian English" +msgstr "australijski engleski" + +msgid "British English" +msgstr "britanski engleski" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "španski" + +msgid "Argentinian Spanish" +msgstr "argentinski španski" + +msgid "Colombian Spanish" +msgstr "kolumbijski španski" + +msgid "Mexican Spanish" +msgstr "meksički španski" + +msgid "Nicaraguan Spanish" +msgstr "nikaragvanski španski" + +msgid "Venezuelan Spanish" +msgstr "venecuelanski španski" + +msgid "Estonian" +msgstr "estonski" + +msgid "Basque" +msgstr "baskijski" + +msgid "Persian" +msgstr "persijski" + +msgid "Finnish" +msgstr "finski" + +msgid "French" +msgstr "francuski" + +msgid "Frisian" +msgstr "frizijski" + +msgid "Irish" +msgstr "irski" + +msgid "Scottish Gaelic" +msgstr "škotski galski" + +msgid "Galician" +msgstr "galski" + +msgid "Hebrew" +msgstr "hebrejski" + +msgid "Hindi" +msgstr "hindu" + +msgid "Croatian" +msgstr "hrvatski" + +msgid "Upper Sorbian" +msgstr "gornjolužičkosrpski" + +msgid "Hungarian" +msgstr "mađarski" + +msgid "Armenian" +msgstr "jermenski" + +msgid "Interlingua" +msgstr "interlingva" + +msgid "Indonesian" +msgstr "indonežanski" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandski" + +msgid "Italian" +msgstr "italijanski" + +msgid "Japanese" +msgstr "japanski" + +msgid "Georgian" +msgstr "gruzijski" + +msgid "Kabyle" +msgstr "kabilski" + +msgid "Kazakh" +msgstr "kazaški" + +msgid "Khmer" +msgstr "kambodijski" + +msgid "Kannada" +msgstr "kanada" + +msgid "Korean" +msgstr "korejski" + +msgid "Kyrgyz" +msgstr "Kirgiski" + +msgid "Luxembourgish" +msgstr "luksemburški" + +msgid "Lithuanian" +msgstr "litvanski" + +msgid "Latvian" +msgstr "latvijski" + +msgid "Macedonian" +msgstr "makedonski" + +msgid "Malayalam" +msgstr "malajalamski" + +msgid "Mongolian" +msgstr "mongolski" + +msgid "Marathi" +msgstr "marathi" + +msgid "Malay" +msgstr "malajski" + +msgid "Burmese" +msgstr "burmanski" + +msgid "Norwegian Bokmål" +msgstr "norveški književni" + +msgid "Nepali" +msgstr "nepalski" + +msgid "Dutch" +msgstr "holandski" + +msgid "Norwegian Nynorsk" +msgstr "norveški novi" + +msgid "Ossetic" +msgstr "osetinski" + +msgid "Punjabi" +msgstr "Pandžabi" + +msgid "Polish" +msgstr "poljski" + +msgid "Portuguese" +msgstr "portugalski" + +msgid "Brazilian Portuguese" +msgstr "brazilski portugalski" + +msgid "Romanian" +msgstr "rumunski" + +msgid "Russian" +msgstr "ruski" + +msgid "Slovak" +msgstr "slovački" + +msgid "Slovenian" +msgstr "slovenački" + +msgid "Albanian" +msgstr "albanski" + +msgid "Serbian" +msgstr "srpski" + +msgid "Serbian Latin" +msgstr "srpski (latinica)" + +msgid "Swedish" +msgstr "švedski" + +msgid "Swahili" +msgstr "svahili" + +msgid "Tamil" +msgstr "tamilski" + +msgid "Telugu" +msgstr "telugu" + +msgid "Tajik" +msgstr "Tadžiki" + +msgid "Thai" +msgstr "tajlandski" + +msgid "Turkmen" +msgstr "Turkmenski" + +msgid "Turkish" +msgstr "turski" + +msgid "Tatar" +msgstr "tatarski" + +msgid "Udmurt" +msgstr "udmurtski" + +msgid "Ukrainian" +msgstr "ukrajinski" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbekistanski" + +msgid "Vietnamese" +msgstr "vijetnamski" + +msgid "Simplified Chinese" +msgstr "novokineski" + +msgid "Traditional Chinese" +msgstr "starokineski" + +msgid "Messages" +msgstr "Poruke" + +msgid "Site Maps" +msgstr "Mape sajta" + +msgid "Static Files" +msgstr "Statičke datoteke" + +msgid "Syndication" +msgstr "Udruživanje sadržaja" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Zadati broj strane nije ceo broj" + +msgid "That page number is less than 1" +msgstr "Zadati broj strane je manji od 1" + +msgid "That page contains no results" +msgstr "Tražena strana ne sadrži rezultate" + +msgid "Enter a valid value." +msgstr "Unesite ispravnu vrednost." + +msgid "Enter a valid URL." +msgstr "Unesite ispravan URL." + +msgid "Enter a valid integer." +msgstr "Unesite ispravan ceo broj." + +msgid "Enter a valid email address." +msgstr "Unesite ispravnu e-mail adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Unesite isrpavan „slag“, koji se sastoji od slova, brojki, donjih crta ili " +"cirtica." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Unesite ispravan \"slag\", koji se sastoji od Unikod slova, brojki, donjih " +"crta ili crtica." + +msgid "Enter a valid IPv4 address." +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Unesite ispravnu IPv6 adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Unesite ispravnu IPv4 ili IPv6 adresu." + +msgid "Enter only digits separated by commas." +msgstr "Unesite samo brojke razdvojene zapetama." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ovo polje mora da bude %(limit_value)s (trenutno ima %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ova vrednost mora da bude manja od %(limit_value)s. ili tačno toliko." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ova vrednost mora biti veća od %(limit_value)s ili tačno toliko." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ovo polje mora da ima najmanje %(limit_value)d karakter (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Ovo polje mora da ima najmanje %(limit_value)d karaktera (trenutno ima " +"%(show_value)d)." +msgstr[2] "" +"Ovo polje mora da ima %(limit_value)d najmanje karaktera (trenutno ima " +"%(show_value)d )." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ovo polje ne sme da ima više od %(limit_value)d karaktera (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Ovo polje ne sme da ima više od %(limit_value)d karaktera (trenutno ima " +"%(show_value)d)." +msgstr[2] "" +"Ovo polje ne sme da ima više od %(limit_value)d karaktera (trenutno ima " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Unesite broj." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Ukupno ne može biti više od %(max)s cifre." +msgstr[1] "Ukupno ne može biti više od %(max)s cifre." +msgstr[2] "Ukupno ne može biti više od %(max)s cifara." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Ne može biti više od %(max)s decimale." +msgstr[1] "Ne može biti više od %(max)s decimale." +msgstr[2] "Ne može biti više od %(max)s decimala." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Ne može biti više od %(max)s cifre pre decimalnog zapisa." +msgstr[1] "Ne može biti više od %(max)s cifre pre decimalnog zapisa." +msgstr[2] "Ne može biti više od %(max)s cifara pre decimalnog zapisa." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Ekstenzija datoteke \"%(extension)s\" nije dozvoljena. Dozvoljene su sledeće " +"ekstenzije: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "'Null' karakteri nisu dozvoljeni." + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s sa poljem %(field_labels)s već postoji." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vrednost %(value)r nije validna." + +msgid "This field cannot be null." +msgstr "Ovo polje ne može da ostane prazno." + +msgid "This field cannot be blank." +msgstr "Ovo polje ne može da ostane prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s sa ovom vrednošću %(field_label)s već postoji." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s mora biti jedinstven(a) za %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Vrednost \"%(value)s\" mora biti True ili False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\" vrednost mora biti True, False ili None." + +msgid "Boolean (Either True or False)" +msgstr "Bulova vrednost (True ili False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (najviše %(max_length)s znakova)" + +msgid "Comma-separated integers" +msgstr "Celi brojevi razdvojeni zapetama" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Vrednost \"%(value)s\" nema ispravan format datuma. Mora biti u formatu GGGG-" +"MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (bez vremena)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (sa vremenom)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimalni broj" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Vremenski interval" + +msgid "Email address" +msgstr "Imejl adresa" + +msgid "File path" +msgstr "Putanja fajla" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Broj sa pokrenom zapetom" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Ceo broj" + +msgid "Big (8 byte) integer" +msgstr "Veliki ceo broj" + +msgid "Small integer" +msgstr "Mali ceo broj" + +msgid "IPv4 address" +msgstr "IPv4 adresa" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Bulova vrednost (True, False ili None)" + +msgid "Positive big integer" +msgstr "Velik pozitivan celi broj" + +msgid "Positive integer" +msgstr "Pozitivan ceo broj" + +msgid "Positive small integer" +msgstr "Pozitivan mali ceo broj" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slag (ne duži od %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Vreme" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Sirovi binarni podaci" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "Univerzalno jedinstveni identifikator" + +msgid "File" +msgstr "Fajl" + +msgid "Image" +msgstr "Slika" + +msgid "A JSON object" +msgstr "JSON objekat" + +msgid "Value must be valid JSON." +msgstr "Vrednost mora biti ispravni JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Strani ključ (tip određuje referentno polje)" + +msgid "One-to-one relationship" +msgstr "Relacija jedan na jedan" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Relacija više na više" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ovo polje se mora popuniti." + +msgid "Enter a whole number." +msgstr "Unesite ceo broj." + +msgid "Enter a valid date." +msgstr "Unesite ispravan datum." + +msgid "Enter a valid time." +msgstr "Unesite ispravno vreme" + +msgid "Enter a valid date/time." +msgstr "Unesite ispravan datum/vreme." + +msgid "Enter a valid duration." +msgstr "Unesite ispravno trajanje." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Broj dana mora biti između {min_days} i {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Fajl nije prebačen. Proverite tip enkodiranja formulara." + +msgid "No file was submitted." +msgstr "Fajl nije prebačen." + +msgid "The submitted file is empty." +msgstr "Prebačen fajl je prazan." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Može se samo poslati fajl ili izbrisati, ne oba." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je " +"oštećen." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"%(value)s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih." + +msgid "Enter a list of values." +msgstr "Unesite listu vrednosti." + +msgid "Enter a complete value." +msgstr "Unesite kompletnu vrednost." + +msgid "Enter a valid UUID." +msgstr "Unesite ispravan UUID." + +msgid "Enter a valid JSON." +msgstr "Unesite ispravan JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"Podaci od ManagementForm nedostaju ili su pokvareni. Polja koja nedostaju: " +"%(field_names)s. Možda će biti potrebno da prijavite grešku ako se problem " +"nastavi." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Order" +msgstr "Redosled" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ispravite dupliran sadržaj za polja: %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ispravite dupliran sadržaj za polja: %(field)s, koji mora da bude jedinstven." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ispravite dupliran sadržaj za polja: %(field_name)s, koji mora da bude " +"jedinstven za %(lookup)s u %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ispravite duplirane vrednosti dole." + +msgid "The inline value did not match the parent instance." +msgstr "Direktno uneta vrednost ne odgovara instanci roditelja." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Odabrana vrednost nije među ponuđenima. Odaberite jednu od ponuđenih." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Očisti" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Izmeni" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "da,ne,možda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajta" +msgstr[2] "%(size)d bajtova" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "po p." + +msgid "a.m." +msgstr "pre p." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "ponoć" + +msgid "noon" +msgstr "podne" + +msgid "Monday" +msgstr "ponedeljak" + +msgid "Tuesday" +msgstr "utorak" + +msgid "Wednesday" +msgstr "sreda" + +msgid "Thursday" +msgstr "četvrtak" + +msgid "Friday" +msgstr "petak" + +msgid "Saturday" +msgstr "subota" + +msgid "Sunday" +msgstr "nedelja" + +msgid "Mon" +msgstr "pon." + +msgid "Tue" +msgstr "uto." + +msgid "Wed" +msgstr "sre." + +msgid "Thu" +msgstr "čet." + +msgid "Fri" +msgstr "pet." + +msgid "Sat" +msgstr "sub." + +msgid "Sun" +msgstr "ned." + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "jun" + +msgid "July" +msgstr "jul" + +msgid "August" +msgstr "avgust" + +msgid "September" +msgstr "septembar" + +msgid "October" +msgstr "oktobar" + +msgid "November" +msgstr "novembar" + +msgid "December" +msgstr "decembar" + +msgid "jan" +msgstr "jan." + +msgid "feb" +msgstr "feb." + +msgid "mar" +msgstr "mar." + +msgid "apr" +msgstr "apr." + +msgid "may" +msgstr "maj." + +msgid "jun" +msgstr "jun." + +msgid "jul" +msgstr "jul." + +msgid "aug" +msgstr "aug." + +msgid "sep" +msgstr "sep." + +msgid "oct" +msgstr "okt." + +msgid "nov" +msgstr "nov." + +msgid "dec" +msgstr "dec." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Jun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Jul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Avg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Maj" + +msgctxt "alt. month" +msgid "June" +msgstr "Jun" + +msgctxt "alt. month" +msgid "July" +msgstr "Jul" + +msgctxt "alt. month" +msgid "August" +msgstr "Avgust" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembar" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktobar" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembar" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembar" + +msgid "This is not a valid IPv6 address." +msgstr "Ovo nije ispravna IPv6 adresa." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "ili" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d godina" +msgstr[1] "%(num)d godine" +msgstr[2] "%(num)d godina" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Forbidden" +msgstr "Zabranjeno" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifikacija nije prošla. Zahtev odbijen." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Ako ste podesili internet pregledač da ne šalje \"Referer\" zaglavlja, " +"ponovo ih uključite, barem za ovaj sajt, ili za HTTPS konekcije, ili za " +"\"same-origin\" zahteve." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ova poruka je prikazana jer ovaj sajt zahteva CSRF kuki kada se prosleđuju " +"podaci iz formi. Ovaj kuki je potreban iz sigurnosnih razloga, da bi se " +"osiguralo da vaš pretraživač nije pod kontrolom trećih lica." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Ako je vaš internet pregedač podešen da onemogući kolačiće, molimo da ih " +"uključite, barem za ovaj sajt, ili za \"same-origin\" zahteve." + +msgid "More information is available with DEBUG=True." +msgstr "Više informacija je dostupno sa DEBUG=True." + +msgid "No year specified" +msgstr "Godina nije naznačena" + +msgid "Date out of range" +msgstr "Datum van opsega" + +msgid "No month specified" +msgstr "Mesec nije naznačen" + +msgid "No day specified" +msgstr "Dan nije naznačen" + +msgid "No week specified" +msgstr "Nedelja nije naznačena" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nedostupni objekti %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Opcija „future“ nije dostupna za „%(verbose_name_plural)s“ jer " +"%(class_name)s.allow_future ima vrednost False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Neispravan datum \"%(datestr)s\" za format \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nijedan objekat klase %(verbose_name)s nije nađen datim upitom." + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Stranica nije poslednja, niti može biti konvertovana u tip \"int\"." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Neispravna strana (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Prazna lista i „%(class_name)s.allow_empty“ ima vrednost False." + +msgid "Directory indexes are not allowed here." +msgstr "Indeksi direktorijuma nisu dozvoljeni ovde." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "„%(path)s“ ne postoji" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indeks direktorijuma %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalacija je prošla uspešno. Čestitke!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Pogledajte napomene uz izdanje za Đango " +"%(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Ova strana je prikazana jer je DEBUG=True u vašim podešavanjima i niste konfigurisali nijedan URL." + +msgid "Django Documentation" +msgstr "Đango dokumentacija" + +msgid "Topics, references, & how-to’s" +msgstr "Teme, reference, & kako-da" + +msgid "Tutorial: A Polling App" +msgstr "Uputstvo: aplikacija za glasanje" + +msgid "Get started with Django" +msgstr "Počnite sa Đangom" + +msgid "Django Community" +msgstr "Đango zajednica" + +msgid "Connect, get help, or contribute" +msgstr "Povežite se, potražite pomoć ili dajte doprinos" diff --git a/venv/Lib/site-packages/django/conf/locale/sr_Latn/__init__.py b/venv/Lib/site-packages/django/conf/locale/sr_Latn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bf889b97e843fa28dffc73c508d23f8a5f459e6 GIT binary patch literal 200 zcmYk0zY4-I7{pWQAc7C#P_v7Opr}I;QQSTZX&OuVCn@=of{)}Y2~Ms)fs^T^2lqSf zrZeO5hy=Ya&#cc^kAFp>EQ2u)$jOOJqWzuNe*WQ8t!8jWX%UVdk;B>u-$?Bcw#w~% z1{-D3B?oItDI9cCcaW+KP&t{jTvWV}2zkkMVW=?rN^2u{Eh$=-a;GU{N-M|Mw7ors Q^Ty=9mW%!b4gzBG1yFQ0+5i9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sr_Latn/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1252b104e683f7bd3e2b9fafe7e1e8e22df4d46c GIT binary patch literal 900 zcmZvaL64e17=}SdMbWjIZkzPPg@Z|Vyql&eT~SO03}6~3qy!x_T9plho5;`Ut^cCG zW0RhG+N8f=Pn~fW#oZ3!8{X%e_ss_(tko(UU4Os*p8hIw+#e>gD@VmAdJ|SKhd9h5 z9_LUF=TRO51aJWra1j-836&Nc7Jl$ZpnI9_Wn4iOEFuwCQ5Dy0u62==R#56m6PV<+ z&N307l*9x$aKKPfT)_>brz(#->)-Qqf)+^1GKTU7%Cwt4?qMQQDp4#keiD1wswT~& zLz1JWuM+@X@=c$Fv)v}x#>DL} zV{JEed&`K#SEDFg1+&<_4Ys%La5;6!G7he8{MmPZ5fB%z{Ouxa&%*7zy$)yoI%t!~ r8~X9KJrARe9}{@9zY{)eLcCiCAK6b!-q8X8;Io$igetfIyukkhp%3G` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sr_Latn/formats.py b/venv/Lib/site-packages/django/conf/locale/sr_Latn/formats.py new file mode 100644 index 000000000..007889592 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sr_Latn/formats.py @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j. F Y." +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "j. F Y. H:i" +YEAR_MONTH_FORMAT = "F Y." +MONTH_DAY_FORMAT = "j. F" +SHORT_DATE_FORMAT = "j.m.Y." +SHORT_DATETIME_FORMAT = "j.m.Y. H:i" +FIRST_DAY_OF_WEEK = 1 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y.", # '25.10.2006.' + "%d.%m.%y.", # '25.10.06.' + "%d. %m. %Y.", # '25. 10. 2006.' + "%d. %m. %y.", # '25. 10. 06.' + # "%d. %b %y.", # '25. Oct 06.' + # "%d. %B %y.", # '25. October 06.' + # "%d. %b '%y.", # '25. Oct '06.' + # "%d. %B '%y.", #'25. October '06.' + # "%d. %b %Y.", # '25. Oct 2006.' + # "%d. %B %Y.", # '25. October 2006.' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y. %H:%M:%S", # '25.10.2006. 14:30:59' + "%d.%m.%Y. %H:%M:%S.%f", # '25.10.2006. 14:30:59.000200' + "%d.%m.%Y. %H:%M", # '25.10.2006. 14:30' + "%d.%m.%y. %H:%M:%S", # '25.10.06. 14:30:59' + "%d.%m.%y. %H:%M:%S.%f", # '25.10.06. 14:30:59.000200' + "%d.%m.%y. %H:%M", # '25.10.06. 14:30' + "%d. %m. %Y. %H:%M:%S", # '25. 10. 2006. 14:30:59' + "%d. %m. %Y. %H:%M:%S.%f", # '25. 10. 2006. 14:30:59.000200' + "%d. %m. %Y. %H:%M", # '25. 10. 2006. 14:30' + "%d. %m. %y. %H:%M:%S", # '25. 10. 06. 14:30:59' + "%d. %m. %y. %H:%M:%S.%f", # '25. 10. 06. 14:30:59.000200' + "%d. %m. %y. %H:%M", # '25. 10. 06. 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..761268dfc0d91a933177bb95ab8aaa5c3308e64c GIT binary patch literal 24820 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 000000000..c648d9199 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,1308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Nordlund , 2012 +# Andreas Pelme , 2014,2021 +# Gustaf Hansen , 2015 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2015 +# Jonathan Lindén, 2014 +# Mattias Hansson , 2016 +# Mattias Benjaminsson , 2011 +# Petter Strandmark , 2019 +# Rasmus Précenth , 2014 +# Samuel Linde , 2011 +# Thomas Lundqvist, 2013,2016 +# Tomas Lööw , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-23 10:11+0000\n" +"Last-Translator: Tomas Lööw \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabiska" + +msgid "Algerian Arabic" +msgstr "Algerisk arabiska" + +msgid "Asturian" +msgstr "Asturiska" + +msgid "Azerbaijani" +msgstr "Azerbajdzjanska" + +msgid "Bulgarian" +msgstr "Bulgariska" + +msgid "Belarusian" +msgstr "Vitryska" + +msgid "Bengali" +msgstr "Bengaliska" + +msgid "Breton" +msgstr "Bretonska" + +msgid "Bosnian" +msgstr "Bosniska" + +msgid "Catalan" +msgstr "Katalanska" + +msgid "Czech" +msgstr "Tjeckiska" + +msgid "Welsh" +msgstr "Walesiska" + +msgid "Danish" +msgstr "Danska" + +msgid "German" +msgstr "Tyska" + +msgid "Lower Sorbian" +msgstr "Lågsorbiska" + +msgid "Greek" +msgstr "Grekiska" + +msgid "English" +msgstr "Engelska" + +msgid "Australian English" +msgstr "Australisk engelska" + +msgid "British English" +msgstr "Brittisk engelska" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanska" + +msgid "Argentinian Spanish" +msgstr "Argentinsk spanska" + +msgid "Colombian Spanish" +msgstr "Colombiansk spanska" + +msgid "Mexican Spanish" +msgstr "Mexikansk Spanska" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguansk spanska" + +msgid "Venezuelan Spanish" +msgstr "Spanska (Venezuela)" + +msgid "Estonian" +msgstr "Estländska" + +msgid "Basque" +msgstr "Baskiska" + +msgid "Persian" +msgstr "Persiska" + +msgid "Finnish" +msgstr "Finska" + +msgid "French" +msgstr "Franska" + +msgid "Frisian" +msgstr "Frisiska" + +msgid "Irish" +msgstr "Irländska" + +msgid "Scottish Gaelic" +msgstr "Skotsk gäliska" + +msgid "Galician" +msgstr "Galisiska" + +msgid "Hebrew" +msgstr "Hebreiska" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatiska" + +msgid "Upper Sorbian" +msgstr "Högsorbiska" + +msgid "Hungarian" +msgstr "Ungerska" + +msgid "Armenian" +msgstr "Armeniska" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesiska" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Isländska" + +msgid "Italian" +msgstr "Italienska" + +msgid "Japanese" +msgstr "Japanska" + +msgid "Georgian" +msgstr "Georgiska" + +msgid "Kabyle" +msgstr "Kabyliska" + +msgid "Kazakh" +msgstr "Kazakiska" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreanska" + +msgid "Kyrgyz" +msgstr "Kirgiziska" + +msgid "Luxembourgish" +msgstr "Luxemburgiska" + +msgid "Lithuanian" +msgstr "Lettiska" + +msgid "Latvian" +msgstr "Lettiska" + +msgid "Macedonian" +msgstr "Makedonska" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongoliska" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Malay" +msgstr "Malajiska" + +msgid "Burmese" +msgstr "Burmesiska" + +msgid "Norwegian Bokmål" +msgstr "Norskt Bokmål" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Holländska" + +msgid "Norwegian Nynorsk" +msgstr "Norska (nynorsk)" + +msgid "Ossetic" +msgstr "Ossetiska" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polska" + +msgid "Portuguese" +msgstr "Portugisiska" + +msgid "Brazilian Portuguese" +msgstr "Brasiliensk portugisiska" + +msgid "Romanian" +msgstr "Rumänska" + +msgid "Russian" +msgstr "Ryska" + +msgid "Slovak" +msgstr "Slovakiska" + +msgid "Slovenian" +msgstr "Slovenska" + +msgid "Albanian" +msgstr "Albanska" + +msgid "Serbian" +msgstr "Serbiska" + +msgid "Serbian Latin" +msgstr "Serbiska (latin)" + +msgid "Swedish" +msgstr "Svenska" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamilska" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Tadzjikiska" + +msgid "Thai" +msgstr "Thailändska" + +msgid "Turkmen" +msgstr "Turkmeniska" + +msgid "Turkish" +msgstr "Turkiska" + +msgid "Tatar" +msgstr "Tatariska" + +msgid "Udmurt" +msgstr "Udmurtiska" + +msgid "Ukrainian" +msgstr "Ukrainska" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "Uzbekiska" + +msgid "Vietnamese" +msgstr "Vietnamesiska" + +msgid "Simplified Chinese" +msgstr "Förenklad Kinesiska" + +msgid "Traditional Chinese" +msgstr "Traditionell Kinesiska" + +msgid "Messages" +msgstr "Meddelanden" + +msgid "Site Maps" +msgstr "Sidkartor" + +msgid "Static Files" +msgstr "Statiska filer" + +msgid "Syndication" +msgstr "Syndikering" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." + +msgid "That page number is not an integer" +msgstr "Sidnumret är inte ett heltal" + +msgid "That page number is less than 1" +msgstr "Sidnumret är mindre än 1" + +msgid "That page contains no results" +msgstr "Sidan innehåller inga resultat" + +msgid "Enter a valid value." +msgstr "Fyll i ett giltigt värde." + +msgid "Enter a valid URL." +msgstr "Fyll i en giltig URL." + +msgid "Enter a valid integer." +msgstr "Fyll i ett giltigt heltal." + +msgid "Enter a valid email address." +msgstr "Fyll i en giltig e-postadress." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Fyll i en giltig 'slug', beståendes av bokstäver, siffror, understreck eller " +"bindestreck i Unicode." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Fyll i en giltig 'slug', beståendes av bokstäver, siffror, understreck eller " +"bindestreck i Unicode." + +msgid "Enter a valid IPv4 address." +msgstr "Fyll i en giltig IPv4 adress." + +msgid "Enter a valid IPv6 address." +msgstr "Ange en giltig IPv6-adress." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ange en giltig IPv4 eller IPv6-adress." + +msgid "Enter only digits separated by commas." +msgstr "Fyll enbart i siffror separerade med kommatecken." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Kontrollera att detta värde är %(limit_value)s (det är %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Kontrollera att detta värde är mindre än eller lika med %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Kontrollera att detta värde är större än eller lika med %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Säkerställ att detta värde åtminstone har %(limit_value)d tecken (den har " +"%(show_value)d)." +msgstr[1] "" +"Säkerställ att detta värde åtminstone har %(limit_value)d tecken (den har " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Säkerställ att detta värde har som mest %(limit_value)d tecken (den har " +"%(show_value)d)." +msgstr[1] "" +"Säkerställ att detta värde har som mest %(limit_value)d tecken (den har " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Fyll i ett tal." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Säkerställ att det inte är mer än %(max)s siffra totalt." +msgstr[1] "Säkerställ att det inte är mer än %(max)s siffror totalt." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Säkerställ att det inte är mer än %(max)s decimal." +msgstr[1] "Säkerställ att det inte är mer än %(max)s decimaler." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Säkerställ att det inte är mer än %(max)s siffra före decimalavskiljaren." +msgstr[1] "" +"Säkerställ att det inte är mer än %(max)s siffror före decimalavskiljaren." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"Filändelsen “%(extension)s” är inte giltig. Giltiga filändelser är: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Null-tecken är inte tillåtna." + +msgid "and" +msgstr "och" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s med samma %(field_labels)s finns redan." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Värdet %(value)r är inget giltigt alternativ." + +msgid "This field cannot be null." +msgstr "Detta fält får inte vara null." + +msgid "This field cannot be blank." +msgstr "Detta fält får inte vara tomt." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s med detta %(field_label)s finns redan." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s måste vara unikt för %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Fält av typ: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Värdet \"%(value)s\" måste vara antingen True eller False." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Värdet ”%(value)s” måste vara antingen True, False eller None." + +msgid "Boolean (Either True or False)" +msgstr "Boolesk (antingen True eller False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Sträng (upp till %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Komma-separerade heltal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” värde har ett ogiltigt datumformat. Det måste vara i formatet " +"YYYY-MM-DD." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Värdet “%(value)s” har det giltiga formatet (YYYY-MM-DD) men det är ett " +"ogiltigt datum." + +msgid "Date (without time)" +msgstr "Datum (utan tid)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” har ett ogiltigt format. Det måste vara i formatet YYYY-MM-DD HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (med tid)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimaltal" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Tidsspann" + +msgid "Email address" +msgstr "E-postadress" + +msgid "File path" +msgstr "Sökväg till fil" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Värdet \"%(value)s\" måste vara ett flyttal." + +msgid "Floating point number" +msgstr "Flyttal" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Värdet \"%(value)s\" måste vara ett heltal." + +msgid "Integer" +msgstr "Heltal" + +msgid "Big (8 byte) integer" +msgstr "Stort (8 byte) heltal" + +msgid "Small integer" +msgstr "Litet heltal" + +msgid "IPv4 address" +msgstr "IPv4-adress" + +msgid "IP address" +msgstr "IP-adress" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Värdet ”%(value)s” måste vara antingen None, True eller False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolesk (antingen True, False eller None)" + +msgid "Positive big integer" +msgstr "Positivt stort heltal" + +msgid "Positive integer" +msgstr "Positivt heltal" + +msgid "Positive small integer" +msgstr "Positivt litet heltal" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (upp till %(max_length)s)" + +msgid "Text" +msgstr "Text" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” har ett ogiltigt format. Det måste vara i formatet HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Värdet “%(value)s” har det giltiga formatet (HH:MM[:ss[.uuuuuu]]) men det är " +"en ogiltig tid." + +msgid "Time" +msgstr "Tid" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Rå binärdata" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” är inget giltigt UUID." + +msgid "Universally unique identifier" +msgstr "Globalt unik identifierare" + +msgid "File" +msgstr "Fil" + +msgid "Image" +msgstr "Bild" + +msgid "A JSON object" +msgstr "Ett JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Värdet måste vara giltig JSON." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Modell %(model)s med %(field)s %(value)r finns inte." + +msgid "Foreign Key (type determined by related field)" +msgstr "Främmande nyckel (typ bestäms av relaterat fält)" + +msgid "One-to-one relationship" +msgstr "Ett-till-ett-samband" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s relation" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s relationer" + +msgid "Many-to-many relationship" +msgstr "Många-till-många-samband" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Detta fält måste fyllas i." + +msgid "Enter a whole number." +msgstr "Fyll i ett heltal." + +msgid "Enter a valid date." +msgstr "Fyll i ett giltigt datum." + +msgid "Enter a valid time." +msgstr "Fyll i en giltig tid." + +msgid "Enter a valid date/time." +msgstr "Fyll i ett giltigt datum/tid." + +msgid "Enter a valid duration." +msgstr "Fyll i ett giltigt tidsspann." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Antalet dagar måste vara mellan {min_days} och {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ingen fil skickades. Kontrollera kodningstypen i formuläret." + +msgid "No file was submitted." +msgstr "Ingen fil skickades." + +msgid "The submitted file is empty." +msgstr "Den skickade filen är tom." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Säkerställ att filnamnet har som mest %(max)d tecken (den har %(length)d)." +msgstr[1] "" +"Säkerställ att filnamnet har som mest %(max)d tecken (den har %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Var vänlig antingen skicka en fil eller markera kryssrutan för att rensa, " +"inte både och. " + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Ladda upp en giltig bild. Filen du laddade upp var antingen ingen bild eller " +"en korrupt bild." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Välj ett giltigt alternativ. %(value)s finns inte bland tillgängliga " +"alternativ." + +msgid "Enter a list of values." +msgstr "Fyll i en lista med värden." + +msgid "Enter a complete value." +msgstr "Fyll i ett fullständigt värde." + +msgid "Enter a valid UUID." +msgstr "Fyll i ett giltigt UUID." + +msgid "Enter a valid JSON." +msgstr "Fyll i ett giltigt JSON." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gömt fält %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Vänligen skicka som mest %d formulär." +msgstr[1] "Vänligen skicka som mest %d formulär." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Vänligen skicka minst %d formulär." +msgstr[1] "Vänligen skicka minst %d formulär." + +msgid "Order" +msgstr "Sortering" + +msgid "Delete" +msgstr "Radera" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Var vänlig korrigera duplikatdata för %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Var vänlig korrigera duplikatdata för %(field)s, som måste vara unik." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Var vänlig korrigera duplikatdata för %(field_name)s som måste vara unik för " +"%(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Vänligen korrigera duplikatvärdena nedan." + +msgid "The inline value did not match the parent instance." +msgstr "Värdet för InlineForeignKeyField motsvarade inte dess motpart." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga " +"alternativ." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kunde inte tolkas i tidszonen %(current_timezone)s; det kan " +"vara en ogiltig eller tvetydigt tidpunkt." + +msgid "Clear" +msgstr "Rensa" + +msgid "Currently" +msgstr "Nuvarande" + +msgid "Change" +msgstr "Ändra" + +msgid "Unknown" +msgstr "Okänt" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nej" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ja,nej,kanske" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s kB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "e.m." + +msgid "a.m." +msgstr "f.m." + +msgid "PM" +msgstr "FM" + +msgid "AM" +msgstr "EM" + +msgid "midnight" +msgstr "midnatt" + +msgid "noon" +msgstr "middag" + +msgid "Monday" +msgstr "måndag" + +msgid "Tuesday" +msgstr "tisdag" + +msgid "Wednesday" +msgstr "onsdag" + +msgid "Thursday" +msgstr "torsdag" + +msgid "Friday" +msgstr "fredag" + +msgid "Saturday" +msgstr "lördag" + +msgid "Sunday" +msgstr "söndag" + +msgid "Mon" +msgstr "mån" + +msgid "Tue" +msgstr "tis" + +msgid "Wed" +msgstr "ons" + +msgid "Thu" +msgstr "tors" + +msgid "Fri" +msgstr "fre" + +msgid "Sat" +msgstr "lör" + +msgid "Sun" +msgstr "sön" + +msgid "January" +msgstr "januari" + +msgid "February" +msgstr "februari" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "augusti" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb" + +msgctxt "abbrev. month" +msgid "March" +msgstr "mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "april" + +msgctxt "abbrev. month" +msgid "May" +msgstr "maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sep" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dec" + +msgctxt "alt. month" +msgid "January" +msgstr "januari" + +msgctxt "alt. month" +msgid "February" +msgstr "februari" + +msgctxt "alt. month" +msgid "March" +msgstr "mars" + +msgctxt "alt. month" +msgid "April" +msgstr "april" + +msgctxt "alt. month" +msgid "May" +msgstr "maj" + +msgctxt "alt. month" +msgid "June" +msgstr "juni" + +msgctxt "alt. month" +msgid "July" +msgstr "juli" + +msgctxt "alt. month" +msgid "August" +msgstr "augusti" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "december" + +msgid "This is not a valid IPv6 address." +msgstr "Detta är inte en giltig IPv6 adress." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eller" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d månad" +msgstr[1] "%(num)d månader" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d vecka" +msgstr[1] "%(num)d veckor" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dagar" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d timme" +msgstr[1] "%(num)d timmar" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minuter" + +msgid "Forbidden" +msgstr "Ottillåtet" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifikation misslyckades. Förfrågan avbröts." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Du ser detta meddelande eftersom denna HTTPS-sida kräver att en “Referer " +"header” skickas från din webbläsare, men ingen skickades. Denna header krävs " +"av säkerhetsskäl, för att säkerställa att din webbläsare inte kapats." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Du ser detta meddelande eftersom denna sida kräver en CSRF-cookie när " +"formulär skickas. Denna cookie krävs av säkerhetsskäl, för att säkerställa " +"att din webbläsare inte kapats." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Om cookies är inaktiverade i din webbläsare, vänligen återaktivera dem, " +"åtminstone för denna sida eller för “same-origin”-förfrågningar." + +msgid "More information is available with DEBUG=True." +msgstr "Mer information är tillgänglig med DEBUG=True." + +msgid "No year specified" +msgstr "Inget år angivet" + +msgid "Date out of range" +msgstr "Datum är utanför intervallet" + +msgid "No month specified" +msgstr "Ingen månad angiven" + +msgid "No day specified" +msgstr "Ingen dag angiven" + +msgid "No week specified" +msgstr "Ingen vecka angiven" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Inga %(verbose_name_plural)s är tillgängliga" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Framtida %(verbose_name_plural)s är inte tillgängliga eftersom " +"%(class_name)s.allow_future är False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Ogiltig datumsträng “%(datestr)s” med givet format “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Hittade inga %(verbose_name)s som matchar frågan" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ogiltig sida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Kataloglistningar är inte tillåtna här." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" finns inte" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innehåll i %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installationen lyckades! Grattis!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Visa release notes för Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Du ser den här sidan eftersom DEBUG=True i din settings-fil och du har inte konfigurerat några URL:" +"er." + +msgid "Django Documentation" +msgstr "Djangodokumentation" + +msgid "Topics, references, & how-to’s" +msgstr "Ämnen, referenser och how-to’s" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: En undersöknings-app" + +msgid "Get started with Django" +msgstr "Kom igång med Django" + +msgid "Django Community" +msgstr "Djangos community" + +msgid "Connect, get help, or contribute" +msgstr "Kontakta, begär hjälp eller bidra" diff --git a/venv/Lib/site-packages/django/conf/locale/sv/__init__.py b/venv/Lib/site-packages/django/conf/locale/sv/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/sv/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sv/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b36c13cb393065c781e559857d3c6659edc777 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lahZO6d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04&Wk>i_@% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/sv/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/sv/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb1f4070fe809d2f51f3aa1bb70397d720c7c9da GIT binary patch literal 792 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 pz*Mm${ME(OnQBT~7f3ZTel8b?^?;ySt$4Y tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Maelezo zaidi yanapatikana ikiwa DEBUG=True" + +msgid "No year specified" +msgstr "Hakuna mwaka maalum uliotajwa" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Hakuna mwezi maalum uliotajwa" + +msgid "No day specified" +msgstr "Hakuna siku maalum iliyitajwa" + +msgid "No week specified" +msgstr "Hakuna wiki maalum iliyotajwa" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Hakujapatikana %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s kutoka wakati ujao haiwezekani kwani `" +"%(class_name)s.allow_future` ni `False`." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "hakuna %(verbose_name)s kulingana na ulizo" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ukurasa batili (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Sahirisi za saraka haziruhusiwi hapa." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Sahirisi ya %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c684f8b7f79ee11cb777de6d4859c28deb062a1 GIT binary patch literal 7094 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 HV7LCiTJ~xA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..ad7bf714c --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,1230 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "அரபிக்" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "பெங்காலி" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "" + +msgid "Catalan" +msgstr "" + +msgid "Czech" +msgstr "செக்" + +msgid "Welsh" +msgstr "வெல்ஸ்" + +msgid "Danish" +msgstr "டேனிஷ்" + +msgid "German" +msgstr "ஜெர்மன்" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "கிரேக்கம்" + +msgid "English" +msgstr "ஆங்கிலம்" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ஸ்பானிஷ்" + +msgid "Argentinian Spanish" +msgstr "" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Basque" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "பீனீஷ்" + +msgid "French" +msgstr "ப்ரென்சு" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "கலீஷீயன்" + +msgid "Hebrew" +msgstr "ஹீப்ரு" + +msgid "Hindi" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ஹங்கேரியன்" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ஐஸ்லான்டிக்" + +msgid "Italian" +msgstr "இத்தாலியன்" + +msgid "Japanese" +msgstr "ஜப்பானிய" + +msgid "Georgian" +msgstr "" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "டச்சு" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "ரோமானியன்" + +msgid "Russian" +msgstr "ரஷ்யன்" + +msgid "Slovak" +msgstr "சுலோவாக்" + +msgid "Slovenian" +msgstr "ஸ்லோவேனியன்" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "செர்பியன்" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "சுவிடிஷ்" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "தமிழ்" + +msgid "Telugu" +msgstr "" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "துருக்கிஷ்" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "உக்ரேனியன்" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "எளிய சீன மொழி" + +msgid "Traditional Chinese" +msgstr "மரபு சீன மொழி" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "" + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "இங்கு எண்களை மட்டுமே எழுதவும் காமவாள் தனிமைபடுத்தவும் " + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "மற்றும்" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "இந்த புலம் காலியாக இருக்கக் கூடாது" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "பூலியன் (சரி அல்லது தவறு)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "கமாவாள் பிரிக்கப்பட்ட முழு எண்" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "தேதி (நேரமில்லாமல்)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "தேதி (நேரமுடன்)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "தசம எண்கள்" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "கோப்புப் பாதை" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "முழு எண்" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP விலாசம்" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "இலக்கு முறை (சரி, தவறு அல்லது ஒன்றும் இல்லை)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "உரை" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "நேரம்" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "இந்த புலத்தில் மதிப்பு தேவை" + +msgid "Enter a whole number." +msgstr "முழு எண் மட்டுமே எழுதவும்" + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "அந்த பக்கத்தின் encoding வகையைப் பரிசோதிக்க.கோப்பு சமர்பிக்கப் பட்டவில்லை " + +msgid "No file was submitted." +msgstr "" + +msgid "The submitted file is empty." +msgstr "சமர்பிக்கப் பட்ட கோப்புக் காலியாக உள்ளது" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"முறையான படம் மட்டுமே பதிவேற்றம் செய்யவும். நீங்கள் பதிவேற்றம் செய்த கோப்பு படம் அள்ளாத " +"அல்லது கெட்டுப்போன கோப்பாகும்" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "" + +msgid "Delete" +msgstr "நீக்குக" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "" + +msgid "Change" +msgstr "மாற்றுக" + +msgid "Unknown" +msgstr "தெரியாத" + +msgid "Yes" +msgstr "ஆம்" + +msgid "No" +msgstr "இல்லை" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ஆம்,இல்லை,இருக்கலாம்" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "" + +#, python-format +msgid "%s MB" +msgstr "" + +#, python-format +msgid "%s GB" +msgstr "" + +#, python-format +msgid "%s TB" +msgstr "" + +#, python-format +msgid "%s PB" +msgstr "" + +msgid "p.m." +msgstr "" + +msgid "a.m." +msgstr "" + +msgid "PM" +msgstr "" + +msgid "AM" +msgstr "" + +msgid "midnight" +msgstr "" + +msgid "noon" +msgstr "" + +msgid "Monday" +msgstr "திங்கள்" + +msgid "Tuesday" +msgstr "செவ்வாய்" + +msgid "Wednesday" +msgstr "புதன்" + +msgid "Thursday" +msgstr "வியாழன்" + +msgid "Friday" +msgstr "வெள்ளி" + +msgid "Saturday" +msgstr "சனி" + +msgid "Sunday" +msgstr "ஞாயிறு" + +msgid "Mon" +msgstr "" + +msgid "Tue" +msgstr "" + +msgid "Wed" +msgstr "" + +msgid "Thu" +msgstr "" + +msgid "Fri" +msgstr "" + +msgid "Sat" +msgstr "" + +msgid "Sun" +msgstr "" + +msgid "January" +msgstr "ஜனவரி" + +msgid "February" +msgstr "பிப்ரவரி" + +msgid "March" +msgstr "மார்ச்" + +msgid "April" +msgstr "ஏப்ரல்" + +msgid "May" +msgstr "மே" + +msgid "June" +msgstr "ஜூன்" + +msgid "July" +msgstr "ஜூலை" + +msgid "August" +msgstr "ஆகஸ்டு" + +msgid "September" +msgstr "செப்டம்பர்" + +msgid "October" +msgstr "அக்டோபர்" + +msgid "November" +msgstr "நவம்பர்" + +msgid "December" +msgstr "டிசம்பர்" + +msgid "jan" +msgstr "ஜன" + +msgid "feb" +msgstr "பிப்" + +msgid "mar" +msgstr "மார்" + +msgid "apr" +msgstr "ஏப்" + +msgid "may" +msgstr "மே" + +msgid "jun" +msgstr "ஜூன்" + +msgid "jul" +msgstr "ஜூலை" + +msgid "aug" +msgstr "ஆக" + +msgid "sep" +msgstr "செப்" + +msgid "oct" +msgstr "அக்" + +msgid "nov" +msgstr "நவ" + +msgid "dec" +msgstr "டிச" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +msgctxt "abbrev. month" +msgid "March" +msgstr "மார்ச்" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ஏப்ரல்" + +msgctxt "abbrev. month" +msgid "May" +msgstr "மே" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ஜூன்" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ஜூலை" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +msgctxt "alt. month" +msgid "January" +msgstr "ஜனவரி" + +msgctxt "alt. month" +msgid "February" +msgstr "பிப்ரவரி" + +msgctxt "alt. month" +msgid "March" +msgstr "மார்ச்" + +msgctxt "alt. month" +msgid "April" +msgstr "ஏப்ரல்" + +msgctxt "alt. month" +msgid "May" +msgstr "மே" + +msgctxt "alt. month" +msgid "June" +msgstr "ஜூன்" + +msgctxt "alt. month" +msgid "July" +msgstr "ஜூலை" + +msgctxt "alt. month" +msgid "August" +msgstr "ஆகஸ்டு" + +msgctxt "alt. month" +msgid "September" +msgstr "செப்டம்பர்" + +msgctxt "alt. month" +msgid "October" +msgstr "அக்டோபர்" + +msgctxt "alt. month" +msgid "November" +msgstr "நவம்பர்" + +msgctxt "alt. month" +msgid "December" +msgstr "டிசம்பர்" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/ta/__init__.py b/venv/Lib/site-packages/django/conf/locale/ta/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/ta/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ta/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87f479b3aad8afc44bf79a6a4a711b9e989ebf53 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNuqvyd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04gRl*8l(j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ta/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/ta/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43919f4989192ee2cf8904ca555396c7bd84d429 GIT binary patch literal 304 zcmYk0(MrQG6o%6_lj0aC_yD~fID0=tEY{kAU8SoR3&D{#S!r#Xk)#9rM*2vCSKj&r zUYQCGe>gvU|Kac-KA9W?t*@t#?9Bw=bAbOcG+gVEXWA%0fEvi4CNimoEDBd(I_i%q zCpdT3{iv9ij@Mfnhb+?BathJd_tM)<5GRqBqH(&24sa61%QW2h-uiESx(eeY)yd)F z6^P-7U;Ab^bNncokT~h2B-rP9*RWPed{?Tl%WzN%sb&v?S1ea}&)Pk{FEcDl#b!H_ yKa+wgwTMNZTtY)F;T|= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ta/formats.py b/venv/Lib/site-packages/django/conf/locale/ta/formats.py new file mode 100644 index 000000000..d023608ca --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ta/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F, Y" +TIME_FORMAT = "g:i A" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M, Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1366ff278543353a02b3c118f297216c2fd88b1e GIT binary patch literal 13259 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 TJe^oMe015NKo+nAZa4n}oo=qX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..168ffa4d4 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,1233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +# ప్రవీణ్ ఇళ్ళ , 2013 +# వీవెన్ , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "ఆఫ్రికాన్స్" + +msgid "Arabic" +msgstr "ఆరబిక్" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "అజేర్బైజని " + +msgid "Bulgarian" +msgstr "బల్గేరియన్" + +msgid "Belarusian" +msgstr "బెలారషియన్" + +msgid "Bengali" +msgstr "బెంగాలీ" + +msgid "Breton" +msgstr "బ్రిటన్" + +msgid "Bosnian" +msgstr "బోస్నియన్" + +msgid "Catalan" +msgstr "కాటలాన్" + +msgid "Czech" +msgstr "ఛెక్" + +msgid "Welsh" +msgstr "వెల్ష్" + +msgid "Danish" +msgstr "డానిష్" + +msgid "German" +msgstr "జెర్మన్" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "గ్రీక్" + +msgid "English" +msgstr "ఆంగ్లం" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "బ్రిటీష్ ఆంగ్లం" + +msgid "Esperanto" +msgstr "ఎస్పరాంటో" + +msgid "Spanish" +msgstr "స్పానిష్" + +msgid "Argentinian Spanish" +msgstr "అర్జెంటీనా స్పానిష్" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "మెక్షికన్ స్పానిష్ " + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "వెనుజులా స్పానిష్" + +msgid "Estonian" +msgstr "ఎస్టొనియన్" + +msgid "Basque" +msgstr "బాస్క్" + +msgid "Persian" +msgstr "పారసీ" + +msgid "Finnish" +msgstr "ఫీన్నిష్" + +msgid "French" +msgstr "ఫ్రెంచ్" + +msgid "Frisian" +msgstr "ఫ్రిసియన్" + +msgid "Irish" +msgstr "ఐరిష్" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "గలిసియన్" + +msgid "Hebrew" +msgstr "హీబ్రూ" + +msgid "Hindi" +msgstr "హిందీ" + +msgid "Croatian" +msgstr "క్రొయేషియన్" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "హంగేరియన్" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "ఇంటర్లింగ్వా" + +msgid "Indonesian" +msgstr "ఇండోనేషియన్" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ఐస్లాండిక్" + +msgid "Italian" +msgstr "ఇటాలియవ్" + +msgid "Japanese" +msgstr "జపనీ" + +msgid "Georgian" +msgstr "జార్జియన్" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "కజఖ్" + +msgid "Khmer" +msgstr "ఖ్మెర్" + +msgid "Kannada" +msgstr "కన్నడ" + +msgid "Korean" +msgstr "కొరియన్" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "లగ్జెంబర్గిష్" + +msgid "Lithuanian" +msgstr "లిథుయేనియన్" + +msgid "Latvian" +msgstr "లాత్వియన్" + +msgid "Macedonian" +msgstr "మెసిడోనియన్" + +msgid "Malayalam" +msgstr "మలయాళం" + +msgid "Mongolian" +msgstr "మంగోలియన్" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "బర్మీస్" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "నేపాలీ" + +msgid "Dutch" +msgstr "డచ్" + +msgid "Norwegian Nynorsk" +msgstr "నోర్వేగియన్ న్య్నోర్స్క్ " + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "పంజాబీ" + +msgid "Polish" +msgstr "పొలిష్" + +msgid "Portuguese" +msgstr "పోర్చుగీస్" + +msgid "Brazilian Portuguese" +msgstr "బ్రజీలియన్ పోర్చుగీస్" + +msgid "Romanian" +msgstr "రొమానియన్" + +msgid "Russian" +msgstr "రష్యన్" + +msgid "Slovak" +msgstr "స్లొవాక్" + +msgid "Slovenian" +msgstr "స్లొవానియన్" + +msgid "Albanian" +msgstr "అల్బేనియన్" + +msgid "Serbian" +msgstr "సెర్బియన్" + +msgid "Serbian Latin" +msgstr "సెర్బియన్ లాటిన్" + +msgid "Swedish" +msgstr "స్వీడిష్" + +msgid "Swahili" +msgstr "స్వాహిలి" + +msgid "Tamil" +msgstr "తమిళం" + +msgid "Telugu" +msgstr "తెలుగు" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "థాయి" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "టర్కిష్" + +msgid "Tatar" +msgstr "టటర్" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ఉక్రేనియన్" + +msgid "Urdu" +msgstr "ఉర్దూ" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "వియెత్నామీ" + +msgid "Simplified Chinese" +msgstr "సరళ చైనీ" + +msgid "Traditional Chinese" +msgstr "సాంప్రదాయ చైనీ" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "సరైన విలువని ఇవ్వండి." + +msgid "Enter a valid URL." +msgstr "సరైన URL ఇవ్వండి." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "దయచేసి సరైన ఈమెయిల్ చిరునామాను ప్రవేశపెట్టండి." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "దయచేసి సరైన IPv4 అడ్రస్ ఇవ్వండి" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "కామాల తో అంకెలు విడడీసి ఇవ్వండి " + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"దయచేసి దీని విలువ %(limit_value)s గ ఉండేట్లు చూసుకొనుము. ( మీరు సమర్పించిన విలువ " +"%(show_value)s )" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "దయచేసి దీని విలువ %(limit_value)s కు సమానముగా లేక తక్కువగా ఉండేట్లు చూసుకొనుము." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "దయచేసి దీని విలువ %(limit_value)s కు సమానముగా లేక ఎక్కువగా ఉండేట్లు చూసుకొనుము." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "దయచేసి పూర్ణ సంఖ్య ఇవ్వండి" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "మరియు" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "ఈ ఫీల్డ్ కాళీగా ఉందకూడడు " + +msgid "This field cannot be blank." +msgstr "ఈ ఖాళీని తప్పనిసరిగా పూరించాలి" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "బూలియన్ (అవునా లేక కాదా)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "పదబంధం (గరిష్ఠం %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "కామా తో విడడీసిన సంఖ్య" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "తేదీ (సమయం లేకుండా)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "తేది (సమయం తో)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "దశగణసంఖ్య" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "ఈమెయిలు చిరునామా" + +msgid "File path" +msgstr "ఫైల్ పాత్" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "పూర్ణసంఖ్య" + +msgid "Big (8 byte) integer" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "ఐపీ చిరునామా" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "పాఠ్యం" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "సమయం" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "దస్త్రం" + +msgid "Image" +msgstr "బొమ్మ" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ఈ ఫీల్డ్ అవసరము" + +msgid "Enter a whole number." +msgstr "పూర్ణ సంఖ్య ఇవ్వండి" + +msgid "Enter a valid date." +msgstr "దయచేసి సరైన తేది ఇవ్వండి." + +msgid "Enter a valid time." +msgstr "దయచేసి సరైన సమయం ఇవ్వండి." + +msgid "Enter a valid date/time." +msgstr "దయచేసి సరైన తెది/సమయం ఇవ్వండి." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "ఫైలు సమర్పించబడలేదు." + +msgid "The submitted file is empty." +msgstr "మీరు సమర్పించిన ఫైల్ కాళీగా ఉంది " + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "సరైన విలువల జాబితాను ఇవ్వండి." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "అంతరము" + +msgid "Delete" +msgstr "తొలగించు" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "దయచేసి %(field)s యొక్క నకలు విలువను సరిదిద్దుకోండి." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "దయచేసి %(field)s యొక్క నకలు విలువను సరిదిద్దుకోండి. దీని విలువ అద్వితీయమయినది " + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "దయచేసి క్రింద ఉన్న నకలు విలువను సరిదిద్దుకోండి." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Currently" +msgstr "ప్రస్తుతము " + +msgid "Change" +msgstr "మార్చు" + +msgid "Unknown" +msgstr "తెలియనది" + +msgid "Yes" +msgstr "అవును" + +msgid "No" +msgstr "కాదు" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "అవును,కాదు,ఏమొ" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d బైటు" +msgstr[1] "%(size)d బైట్లు" + +#, python-format +msgid "%s KB" +msgstr "%s కిబై" + +#, python-format +msgid "%s MB" +msgstr "%s మెబై" + +#, python-format +msgid "%s GB" +msgstr "%s గిబై" + +#, python-format +msgid "%s TB" +msgstr "" + +#, python-format +msgid "%s PB" +msgstr "" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "అర్ధరాత్రి" + +msgid "noon" +msgstr "మధ్యాహ్నం" + +msgid "Monday" +msgstr "సోమవారం" + +msgid "Tuesday" +msgstr "మంగళవారం" + +msgid "Wednesday" +msgstr "బుధవారం" + +msgid "Thursday" +msgstr "గురువారం" + +msgid "Friday" +msgstr "శుక్రవారం" + +msgid "Saturday" +msgstr "శనివారం" + +msgid "Sunday" +msgstr "ఆదివారం" + +msgid "Mon" +msgstr "సోమ" + +msgid "Tue" +msgstr "మంగళ" + +msgid "Wed" +msgstr "బుధ" + +msgid "Thu" +msgstr "గురు" + +msgid "Fri" +msgstr "శుక్ర" + +msgid "Sat" +msgstr "శని" + +msgid "Sun" +msgstr "ఆది" + +msgid "January" +msgstr "జనవరి" + +msgid "February" +msgstr "ఫిబ్రవరి" + +msgid "March" +msgstr "మార్చి" + +msgid "April" +msgstr "ఎప్రిల్" + +msgid "May" +msgstr "మే" + +msgid "June" +msgstr "జూన్" + +msgid "July" +msgstr "జులై" + +msgid "August" +msgstr "ఆగష్టు" + +msgid "September" +msgstr "సెప్టెంబర్" + +msgid "October" +msgstr "అక్టోబర్" + +msgid "November" +msgstr "నవంబర్" + +msgid "December" +msgstr "డిసెంబర్" + +msgid "jan" +msgstr "జన" + +msgid "feb" +msgstr "ఫిబ్ర" + +msgid "mar" +msgstr "మార్చి" + +msgid "apr" +msgstr "ఎప్రి" + +msgid "may" +msgstr "మే" + +msgid "jun" +msgstr "జూన్" + +msgid "jul" +msgstr "జూలై" + +msgid "aug" +msgstr "ఆగ" + +msgid "sep" +msgstr "సెప్టెం" + +msgid "oct" +msgstr "అక్టో" + +msgid "nov" +msgstr "నవం" + +msgid "dec" +msgstr "డిసెం" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "జన." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ఫిబ్ర." + +msgctxt "abbrev. month" +msgid "March" +msgstr "మార్చి" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ఏప్రి." + +msgctxt "abbrev. month" +msgid "May" +msgstr "మే" + +msgctxt "abbrev. month" +msgid "June" +msgstr "జూన్" + +msgctxt "abbrev. month" +msgid "July" +msgstr "జూలై" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ఆగ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "సెప్టెం." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "అక్టో." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "నవం." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "డిసెం." + +msgctxt "alt. month" +msgid "January" +msgstr "జనవరి" + +msgctxt "alt. month" +msgid "February" +msgstr "ఫిబ్రవరి" + +msgctxt "alt. month" +msgid "March" +msgstr "మార్చి" + +msgctxt "alt. month" +msgid "April" +msgstr "ఏప్రిల్" + +msgctxt "alt. month" +msgid "May" +msgstr "మే" + +msgctxt "alt. month" +msgid "June" +msgstr "జూన్" + +msgctxt "alt. month" +msgid "July" +msgstr "జూలై" + +msgctxt "alt. month" +msgid "August" +msgstr "ఆగస్ట్" + +msgctxt "alt. month" +msgid "September" +msgstr "సెప్టెంబర్" + +msgctxt "alt. month" +msgid "October" +msgstr "అక్టోబర్" + +msgctxt "alt. month" +msgid "November" +msgstr "నవంబర్" + +msgctxt "alt. month" +msgid "December" +msgstr "డిసెంబర్" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "లేదా" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/te/__init__.py b/venv/Lib/site-packages/django/conf/locale/te/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/te/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/te/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..331fd0cc6c8bafa6125cc437b3ceed74d78dd716 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNveK)d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04lCD+W-In literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/te/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/te/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18fa2a4a21a7686efd60191cccba9d375aeafb8d GIT binary patch literal 302 zcmYk0!D@p*6h%iJK^g)r^aI>xk-871RBEk-8jG|F=obAGb~EU=3A1# xk%9?KE7BI+$$7hRYMzstIg&XW-ZeyutL^?^T{oQeHM<#`g{2Has6oThegJQ2QEvbM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/te/formats.py b/venv/Lib/site-packages/django/conf/locale/te/formats.py new file mode 100644 index 000000000..bb7f2d13d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/te/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "g:i A" +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e93dc87f2299b52c7567091de1a48a2ebf081e35 GIT binary patch literal 28497 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 Lzu}Kr>PGnw?QV?i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..05a4ca96b --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,1299 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mariusz Felisiak , 2020 +# Surush Sufiew , 2020 +# Siroj Sufiew , 2020 +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-30 18:50+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Ҳолландӣ" + +msgid "Arabic" +msgstr "Арабӣ" + +msgid "Algerian Arabic" +msgstr "Арабӣ" + +msgid "Asturian" +msgstr "Астурӣ" + +msgid "Azerbaijani" +msgstr "Озарбойҷонӣ" + +msgid "Bulgarian" +msgstr "Булғорӣ" + +msgid "Belarusian" +msgstr "Белорусӣ" + +msgid "Bengali" +msgstr "Бенгалӣ" + +msgid "Breton" +msgstr "Бретонӣ" + +msgid "Bosnian" +msgstr "Боснӣ" + +msgid "Catalan" +msgstr "Каталанӣ" + +msgid "Czech" +msgstr "Чехӣ" + +msgid "Welsh" +msgstr "Уэлсӣ" + +msgid "Danish" +msgstr "Даниягӣ" + +msgid "German" +msgstr "Олмонӣ" + +msgid "Lower Sorbian" +msgstr "Сербиягӣ" + +msgid "Greek" +msgstr "Юнонӣ" + +msgid "English" +msgstr "Англисӣ" + +msgid "Australian English" +msgstr "Англисии австралиёӣ" + +msgid "British English" +msgstr "Ангилисии бритониёӣ" + +msgid "Esperanto" +msgstr "Эсперантоӣ" + +msgid "Spanish" +msgstr "Испанӣ" + +msgid "Argentinian Spanish" +msgstr "Испании аргентиноӣ" + +msgid "Colombian Spanish" +msgstr "Испании колумбигӣ" + +msgid "Mexican Spanish" +msgstr "Испании мексикоӣ" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуанский испанский" + +msgid "Venezuelan Spanish" +msgstr "Испании венесуэлӣ" + +msgid "Estonian" +msgstr "Эстонӣ" + +msgid "Basque" +msgstr "Баскувӣ" + +msgid "Persian" +msgstr "Форсӣ" + +msgid "Finnish" +msgstr "Финикӣ" + +msgid "French" +msgstr "Фаронсавӣ" + +msgid "Frisian" +msgstr "Фризӣ" + +msgid "Irish" +msgstr "Ирландӣ" + +msgid "Scottish Gaelic" +msgstr "Шотландӣ" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "Ивритӣ" + +msgid "Hindi" +msgstr "Ҳиндӣ" + +msgid "Croatian" +msgstr "Хорватӣ" + +msgid "Upper Sorbian" +msgstr "Себриягӣ" + +msgid "Hungarian" +msgstr "" + +msgid "Armenian" +msgstr "Арманӣ" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Индонезӣ" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исландӣ" + +msgid "Italian" +msgstr "Итолиёвӣ" + +msgid "Japanese" +msgstr "Японӣ" + +msgid "Georgian" +msgstr "Грузӣ" + +msgid "Kabyle" +msgstr "Кабилӣ" + +msgid "Kazakh" +msgstr "Қазоқӣ" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Korean" +msgstr "Кореӣ" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Люксембургӣ" + +msgid "Lithuanian" +msgstr "Литвигӣ" + +msgid "Latvian" +msgstr "Латвигӣ" + +msgid "Macedonian" +msgstr "Македонӣ" + +msgid "Malayalam" +msgstr "" + +msgid "Mongolian" +msgstr "Монголӣ" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "Норвежский (Букмол)" + +msgid "Nepali" +msgstr "Непалӣ" + +msgid "Dutch" +msgstr "Голландӣ" + +msgid "Norwegian Nynorsk" +msgstr "Норвегӣ" + +msgid "Ossetic" +msgstr "Осетинӣ" + +msgid "Punjabi" +msgstr "Панҷобӣ" + +msgid "Polish" +msgstr "Полякӣ" + +msgid "Portuguese" +msgstr "Португалӣ" + +msgid "Brazilian Portuguese" +msgstr "Португалии бразилиёгӣ" + +msgid "Romanian" +msgstr "Руминӣ" + +msgid "Russian" +msgstr "Руссӣ" + +msgid "Slovak" +msgstr "Словакӣ" + +msgid "Slovenian" +msgstr "Словенӣ" + +msgid "Albanian" +msgstr "Албанӣ" + +msgid "Serbian" +msgstr "Сербӣ" + +msgid "Serbian Latin" +msgstr "Сербӣ" + +msgid "Swedish" +msgstr "Шведӣ" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамилӣ" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Тайский" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Туркӣ" + +msgid "Tatar" +msgstr "Тоторӣ" + +msgid "Udmurt" +msgstr "Удмуртӣ" + +msgid "Ukrainian" +msgstr "Украинӣ" + +msgid "Urdu" +msgstr "Урдуӣ" + +msgid "Uzbek" +msgstr "Узбекӣ" + +msgid "Vietnamese" +msgstr "Вэтнамӣ" + +msgid "Simplified Chinese" +msgstr "Хитоӣ" + +msgid "Traditional Chinese" +msgstr "Хитоӣ" + +msgid "Messages" +msgstr "Маълумот" + +msgid "Site Maps" +msgstr "Харитаи сайт" + +msgid "Static Files" +msgstr "Файлҳои статикӣ" + +msgid "Syndication" +msgstr "Тасмаи хабарҳо" + +msgid "That page number is not an integer" +msgstr "Рақами саҳифа бояд адади натуралӣ бошад" + +msgid "That page number is less than 1" +msgstr "Рақами саҳифа камтар аз 1" + +msgid "That page contains no results" +msgstr "Саҳифа холӣ аст" + +msgid "Enter a valid value." +msgstr "Қимматро дуруст ворид созед." + +msgid "Enter a valid URL." +msgstr "Суроға(URL)-ро дуруст ворид созед." + +msgid "Enter a valid integer." +msgstr "Ададро дуруст ворид созед." + +msgid "Enter a valid email address." +msgstr "Суроғаи почтаи электрониро дуруст ворид созед." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Қимати “slug”-ро дуруст ворид созед, бояд аз ҳарфҳо (“a-z ва A-Z”), рақамҳо, " +"зердефисҳо(_) ва дефисҳо иборат бошад." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Қимати “slug”-ро дуруст ворид созед, бояд аз Unicode-ҳарфҳо (“a-z ва A-Z”), " +"рақамҳо, зердефисҳо(_) ва дефисҳо иборат бошад." + +msgid "Enter a valid IPv4 address." +msgstr "Шакли дурусти IPv4-суроғаро ворид созед." + +msgid "Enter a valid IPv6 address." +msgstr "Шакли ҳақиқии IPv4-суроғаро ворид кунед." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Шакли ҳақиқии IPv4 ё IPv6 -суроғаро ворид кунед." + +msgid "Enter only digits separated by commas." +msgstr "Рақамҳои бо вергул шудокардашударо ворид созед." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Боварӣ ҳосил кунед, ки қиммати — %(limit_value)s (ҳоло шакли — " +"%(show_value)s -ро дорад)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Боварӣ ҳосил кунед, ки ин қиммат хурд ё баробар аст ба %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Боварӣ ҳосил кунед, ки ин қиммат калон ё баробар аст ба %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Ададро ворид созед." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Маълумот символӣ мамнӯъро дар бар мегирад: 0-байт" + +msgid "and" +msgstr "ва" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" +"%(model_name)s бо ин гуна майдонӣ қиматдор %(field_labels)s алакай вуҷуд " +"дорад." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Қимати %(value)r дар байни вариантҳои омадашуда вуҷуд надорад." + +msgid "This field cannot be null." +msgstr "Ин майдон наметавонад қимати NULL дошта бошад." + +msgid "This field cannot be blank." +msgstr "Ин майдон наметавонад холӣ бошад." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s бо ин гуна %(field_label)s алакай вуҷуд дорад." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Қимат дар майдони «%(field_label)s» бояд барои фрагменти«%(lookup_type)s» " +"ягона бошад, санаҳо барои майдон %(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Майдони намуди %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "Қимати “%(value)s” бояд True ё False бошад." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "Қимати “%(value)s” бояд True, False ё None бошад." + +msgid "Boolean (Either True or False)" +msgstr "Мантиқан (True ё False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Сатр (то %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Яклухт, бо вергул ҷудокардашуда" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "“%(value)s” шакли нодуруст дорад. Шакли дуруст: сол.моҳ.рӯз, аст" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "“%(value)s” шакли дуруст (сол.моҳ.рӯз) дорад, аммо сана нодуруст аст" + +msgid "Date (without time)" +msgstr "Сана (бе ишораи вақт)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” шакли нодуруст дорад. Шакли дуруст: сол.моҳ.рӯз соат.дақ[:сония[." +"uuuuuu]][TZ] аст" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” шакли дуруст дорад (сол.моҳ.рӯз соат.дақ[:сония[.uuuuuu]][TZ]), " +"аммо 'сана/вақт'' нодуруст аст" + +msgid "Date (with time)" +msgstr "Сана (бо ишораи вақт)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” бояд адади даҳӣ бошад" + +msgid "Decimal number" +msgstr "Адади 'даҳӣ' ." + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” шакли нодуруст дорад. Шакли дуруст [рӯз] [[соат:]дақ:]сония[." +"uuuuuu]" + +msgid "Duration" +msgstr "Давомнокӣ" + +msgid "Email address" +msgstr "Суроғаи почтаи электронӣ" + +msgid "File path" +msgstr "Суроғаи файл" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "Қимати “%(value)s” бояд бутун бошад" + +msgid "Floating point number" +msgstr "Адади бутун." + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "Қимати “%(value)s” бояд яклухт бошад" + +msgid "Integer" +msgstr "Яклухт" + +msgid "Big (8 byte) integer" +msgstr "Адади калони яклухт (8 байт)" + +msgid "IPv4 address" +msgstr "IPv4 - суроға" + +msgid "IP address" +msgstr "IP-суроға" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "Қимати “%(value)s” бояд 'None', 'True' ё 'False' бошад" + +msgid "Boolean (Either True, False or None)" +msgstr "Мантиқӣ (True, False ё None)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Адади яклухти мусбат" + +msgid "Positive small integer" +msgstr "дади яклухти мусбати хурд" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (то %(max_length)s)" + +msgid "Small integer" +msgstr "Адади яклухти хурд" + +msgid "Text" +msgstr "Матн" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” шакли нодуруст дорад. Шакли дуруст соат:дақ[:сония[.uuuuuu]" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” шакли дуруст дорад (соат:моҳ[:сония[.uuuuuu, аммо 'вақт' " +"нодуруст қайд шудааст " + +msgid "Time" +msgstr "Вақт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Маълумоти бинари(дуи)-и коркарднашуда" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "Қимати “%(value)s” барои UUID номувофиқ аст." + +msgid "Universally unique identifier" +msgstr "Майдони UUID, идентификатори универсалии ягона" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Тасвир" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Объекти модели %(model)s бо майдони %(field)s, -и дорои қимати %(value)r, " +"вуҷқд надорад." + +msgid "Foreign Key (type determined by related field)" +msgstr "" +"Калиди беруна(Foreign Key) (Шакл муайян шудаст аз рӯи майдони алоқамандшуда.)" + +msgid "One-to-one relationship" +msgstr "Алоқаи \"як ба як\"" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Алоқаи %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Алоқаи %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Алоқаи \\'бисёр ба бисёр\\'" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Майдони ҳатмӣ." + +msgid "Enter a whole number." +msgstr "Адади яклухтро ворид кунед." + +msgid "Enter a valid date." +msgstr "Санаи дурстро ворид кунед." + +msgid "Enter a valid time." +msgstr "Вақтро дуруст ворид кунед.." + +msgid "Enter a valid date/time." +msgstr "Сана ва вақтро дуруст ворид кунед." + +msgid "Enter a valid duration." +msgstr "авомнокии дурустро ворид кунед." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" +"Миқдори рӯзҳо бояд доираи аз {min_days} то {max_days} -ро дарбар гирад." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл равон карда нашуд. Шакли кодировкаи формаро тафтиш кунед." + +msgid "No file was submitted." +msgstr "Ягон файл равон карда нашуд" + +msgid "The submitted file is empty." +msgstr "Файли равонкардашуда холӣ аст." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Хоҳиш мекунем файлро бор кунед ё байрақчаи ишоратӣ гузоред \"Тоза кардан\", " +"вале ҳарду амалро дар якҷоягӣ иҷро накунед." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Тасвири дурустро бор кунед. Файли боркардаи шумо нуқсон дорад ва ё 'тасвира' " +"нест" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Варианти дурустро интихоб кунед. %(value)s дар байни варианҳои дастрас вуҷуд " +"надорад." + +msgid "Enter a list of values." +msgstr "Рӯйхати қиматҳоро ворид кунед." + +msgid "Enter a complete value." +msgstr "Рӯйхати ҳамаи қиматҳоро ворид кунед." + +msgid "Enter a valid UUID." +msgstr "Шакли дурусти UUID -ро ворид кунед." + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Майдони махфии %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Маълумоти идоракунандаи форма вуҷуд надорад ё ин ки осеб дидааст." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Тартиб" + +msgid "Delete" +msgstr "Нест кардан" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" +"Илтимос қимати такроршудаистодаи майдони \"%(field)s\" ро тағйир диҳед." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Илтимос, қимати майдони %(field)s ро тағйир диҳед, вай бояд 'ягона' бошад." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Илтимос, қимати майдони %(field_name)s ро тағйир диҳед, вай бояд барои " +"%(lookup)s дар майдони %(date_field)s ягона бошад (Ягона будан маънои " +"такрорнашавандагиро дорад)." + +msgid "Please correct the duplicate values below." +msgstr "Хоҳиш мекунам, қимати такроршудаистодаи зеринро иваз кунед." + +msgid "The inline value did not match the parent instance." +msgstr "" +"Қимати дар форма воридкардашуда бо қимати формаи база мутобиқат намекунад." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Варианти дурустро интихоб кунед. Варианти шумо дар қатори қиматҳои " +"овардашуда вуҷуд надорад." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Тоза кардан" + +msgid "Currently" +msgstr "Дар айни замон" + +msgid "Change" +msgstr "Тағйир додан" + +msgid "Unknown" +msgstr "Номаълум" + +msgid "Yes" +msgstr "Ҳа" + +msgid "No" +msgstr "Не" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ҳа,не,шояд" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "н.ш." + +msgid "a.m." +msgstr "н.р." + +msgid "PM" +msgstr "НШ" + +msgid "AM" +msgstr "НР" + +msgid "midnight" +msgstr "нимашабӣ" + +msgid "noon" +msgstr "нисфирузӣ" + +msgid "Monday" +msgstr "Душанбе" + +msgid "Tuesday" +msgstr "Сешанбе" + +msgid "Wednesday" +msgstr "Чоршанбе" + +msgid "Thursday" +msgstr "Панҷшанбе" + +msgid "Friday" +msgstr "Ҷумъа" + +msgid "Saturday" +msgstr "Шанбе" + +msgid "Sunday" +msgstr "Якшанбе" + +msgid "Mon" +msgstr "Дш" + +msgid "Tue" +msgstr "Яш" + +msgid "Wed" +msgstr "Чш" + +msgid "Thu" +msgstr "Пш" + +msgid "Fri" +msgstr "Ҷ" + +msgid "Sat" +msgstr "Ш" + +msgid "Sun" +msgstr "Яш" + +msgid "January" +msgstr "Январ" + +msgid "February" +msgstr "Феврал" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрел" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июн" + +msgid "July" +msgstr "Июл" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябр" + +msgid "October" +msgstr "Октябр" + +msgid "November" +msgstr "Ноябр" + +msgid "December" +msgstr "Декабр" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрел" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июн" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июл" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "январ" + +msgctxt "alt. month" +msgid "February" +msgstr "феврал" + +msgctxt "alt. month" +msgid "March" +msgstr "март" + +msgctxt "alt. month" +msgid "April" +msgstr "апрел" + +msgctxt "alt. month" +msgid "May" +msgstr "май" + +msgctxt "alt. month" +msgid "June" +msgstr "июн" + +msgctxt "alt. month" +msgid "July" +msgstr "июл" + +msgctxt "alt. month" +msgid "August" +msgstr "август" + +msgctxt "alt. month" +msgid "September" +msgstr "сентябр" + +msgctxt "alt. month" +msgid "October" +msgstr "октябр" + +msgctxt "alt. month" +msgid "November" +msgstr "ноябр" + +msgctxt "alt. month" +msgid "December" +msgstr "декабр" + +msgid "This is not a valid IPv6 address." +msgstr "Қиммат суроғаи дурусти IPv6 нест." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ё" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Мушкилӣ дар воридшавӣ" + +msgid "CSRF verification failed. Request aborted." +msgstr "Мушкили дар тафтиши CSRF. Дархост рад шуд." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Шумо ин хабарро барои он мебинед, ки ин HTTPS -сомона, тавассути браузери " +"шумо дархости равон кардани 'Referer' 'header' -ро дорад. Вале ягон дархост " +"равон нашудааст.Иҷрои ин амал аз ҷиҳати бехатарӣ барои мутмаин шудани он, ки " +"браузери шумо аз тарафи шахси сеюм 'шикаста'' (взлом)нашудааст, ҳатмӣ " +"мебошад." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Агар шумо браузери худро ба таври 'Referer'-сархатҳояшон дастнорас ба танзим " +"даровада бошед,хоҳиш мекунем, ки ҳадди ақал барои сомонаи мазкур ё барои " +"пайсшавии таввассути HTTPS ё ин ки бароидархостҳои манбаашон якхела, амали " +"азнавбатанзимдарориро иҷро намоед." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Шумо ин хабарро барои он мебинед, ки сомонаи мазкур талаб менамояд, то амали " +"равонкунииформа ва CSRF cookie дар якҷоягӣ сурат гирад. Ин намуди 'cookie' " +"аз ҷиҳати бехатарӣбарои мутмаин шудани он, ки браузери шумо аз тарафи шахси " +"сеюм 'шикаста'' (взлом)нашудааст, ҳатмӣ мебошад." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Агар шумо браузери худро ба таври дастнораси ба cookies' ба танзим даровада " +"бошед,хоҳиш мекунем, ки ҳадди ақал барои сомонаи мазкур ё барои пайсшавии " +"таввассути HTTPS ё ин ки бароидархостҳои манбаашон якхела, амали " +"азнавбатанзимдарориро иҷро намоед." + +msgid "More information is available with DEBUG=True." +msgstr "" +"Маълумоти бештар дар режими 'танзимдарорӣ'(отладчика), бо фаъолсозии " +"DEBUG=True." + +msgid "No year specified" +msgstr "Сол ишора нашудааст" + +msgid "Date out of range" +msgstr "сана аз доираи муайян берун аст" + +msgid "No month specified" +msgstr "Моҳ ишора нашудааст" + +msgid "No day specified" +msgstr "Рӯз ишора нашудааст" + +msgid "No week specified" +msgstr "Ҳафта ишора нашудааст" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s дастнорас аст" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s навбатӣ дастнорасанд барои он ки %(class_name)s." +"allow_future бо қимати \" False\" гузошта шудааст." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Санаи нодурусти “%(datestr)s” шакли “%(format)s” гирифтааст" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ягон %(verbose_name)s, мувофиқ бо дархости шумо ёфт нашуд" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Саҳифа 'охирин' нест ва ё ки бо адади яклухт(int) ишора нашудааст" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Саҳифаи нодуруст (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Азназаргузаронии рӯёхати файлҳо дар директорияи зерин номумкин аст." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” вуҷуд надорад" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Рӯёхати файлҳои директорияи %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" +"Django: веб-фреймворк барои перфектсионистҳо бо дедлайнҳо. Бисёр фреймворки " +"табъи дилва хастанакунанда ҳангоми кор." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Инҷо андешаҳо оиди баромади Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Ҷобаҷогузорӣ муваффақона анҷом ёфт! Табрик!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Шумо ин хабарро барои он мебинед, ки дар ишора намудед: DEBUG=True ва дар файли " +"ҷобаҷогузорӣ(settings)ягонто танзимгари URL-суроғаҳоро ишора нанамудед." + +msgid "Django Documentation" +msgstr "Ҳуҷҷатгузории Django" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "Роҳбарият: Барнома барои овоздиҳӣ" + +msgid "Get started with Django" +msgstr "оғози кор бо Django" + +msgid "Django Community" +msgstr "Иттиҳоди Django" + +msgid "Connect, get help, or contribute" +msgstr "Бо мо ҳамкорӣ намуда имкониятҳои навро пайдо намоед." diff --git a/venv/Lib/site-packages/django/conf/locale/tg/__init__.py b/venv/Lib/site-packages/django/conf/locale/tg/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/tg/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tg/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5e27efa0a444bb5795b30fc07d15eafb3cf6ebe GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNxFV~d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04nk{-2eap literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tg/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tg/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdbec5e5b34cefca9b15664434d6e87f1bc65d41 GIT binary patch literal 758 zcmZXSv2L3{9L52kV{C`Gj@phD3xlNw?^aZm#9*ujumG##go-eS5w2|_4kDQ+$YWI9 zI`<9w1f45&>J+JKmkd=oH+HacC;oTekN@}SPLOb1iz>(O4?kzOfTDg8Q5{Sv-j)w0 z1yPVfG^7y&8B~Kc1Ry|lSVu?j2sK~>v8Wj_kc}wR`b@(nYQq*fhHb>bV{~Fsy-waN zV-~#3JN);rVo@6n;+(4@o{&aKlwHe$SBg3kSE5riw+pWh;yb!*xn~6=3M)}?_Pb4w zExJ3(3+h1727*;Qe}Y6|UYs1#l-zai-aK_bqN@9WrZsXR`t=`@^6k?dk$R7V?V)7L zo?@7qWW%;S*7l-9-c&)?ktNg94Bb|DhG+lPP;z#pYpI55d)3qzkLVyy8JiaAbUZ`x z-plekc)GQX^~uzJ$g|+f{V@)CcPL+uHR;N;he?pH!gYq-QJksy%vItPXJ?Z%S%g96-h}HL z_bQ&bIL^YeYd`qtMB7JwF@S^6J?0K`N9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tg/formats.py b/venv/Lib/site-packages/django/conf/locale/tg/formats.py new file mode 100644 index 000000000..0ab7d49ae --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/tg/formats.py @@ -0,0 +1,32 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j E Y г." +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j E Y г. G:i" +YEAR_MONTH_FORMAT = "F Y г." +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y", # '25.10.06' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d.%m.%Y", # '25.10.2006' + "%d.%m.%y %H:%M:%S", # '25.10.06 14:30:59' + "%d.%m.%y %H:%M:%S.%f", # '25.10.06 14:30:59.000200' + "%d.%m.%y %H:%M", # '25.10.06 14:30' + "%d.%m.%y", # '25.10.06' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3969ebd054816ea6ac7f971271a8a26355ae134b GIT binary patch literal 18629 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 I`Mb;e8-n-Gi2wiq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..8ab31f253 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,1208 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abhabongse Janthong, 2015 +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2014,2018-2019 +# Naowal Siripatana , 2017 +# sipp11 , 2014 +# Suteepat Damrongyingsupab , 2011-2012 +# Suteepat Damrongyingsupab , 2013 +# Vichai Vongvorakul , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "อาฟฟริกัน" + +msgid "Arabic" +msgstr "อารบิก" + +msgid "Asturian" +msgstr "อัสตูเรียน" + +msgid "Azerbaijani" +msgstr "อาเซอร์ไบจาน" + +msgid "Bulgarian" +msgstr "บัลแกเรีย" + +msgid "Belarusian" +msgstr "เบลารุส" + +msgid "Bengali" +msgstr "เบ็งกาลี" + +msgid "Breton" +msgstr "เบรตัน" + +msgid "Bosnian" +msgstr "บอสเนีย" + +msgid "Catalan" +msgstr "คาตะลาน" + +msgid "Czech" +msgstr "เช็ก" + +msgid "Welsh" +msgstr "เวลส์" + +msgid "Danish" +msgstr "เดนมาร์ก" + +msgid "German" +msgstr "เยอรมัน" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "กรีก" + +msgid "English" +msgstr "อังกฤษ" + +msgid "Australian English" +msgstr "อังกฤษ - ออสเตรเลีย" + +msgid "British English" +msgstr "อังกฤษ - สหราชอาณาจักร" + +msgid "Esperanto" +msgstr "เอสเปรันโต" + +msgid "Spanish" +msgstr "สเปน" + +msgid "Argentinian Spanish" +msgstr "สเปน - อาร์เจนติน่า" + +msgid "Colombian Spanish" +msgstr "สเปน - โคลัมเบีย" + +msgid "Mexican Spanish" +msgstr "สเปน - เม็กซิกัน" + +msgid "Nicaraguan Spanish" +msgstr "นิการากัวสเปน" + +msgid "Venezuelan Spanish" +msgstr "เวเนซุเอลาสเปน" + +msgid "Estonian" +msgstr "เอสโตเนีย" + +msgid "Basque" +msgstr "แบ็ซค์" + +msgid "Persian" +msgstr "เปอร์เชีย" + +msgid "Finnish" +msgstr "ฟินแลนด์" + +msgid "French" +msgstr "ฝรั่งเศส" + +msgid "Frisian" +msgstr "ฟริเซียน" + +msgid "Irish" +msgstr "ไอริช" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "กาลิเซีย" + +msgid "Hebrew" +msgstr "ฮีบรู" + +msgid "Hindi" +msgstr "ฮินดี" + +msgid "Croatian" +msgstr "โครเอเชีย" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ฮังการี" + +msgid "Armenian" +msgstr "อาร์เมเนียน" + +msgid "Interlingua" +msgstr "ภาษากลาง" + +msgid "Indonesian" +msgstr "อินโดนิเซีย" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ไอซ์แลนด์" + +msgid "Italian" +msgstr "อิตาลี" + +msgid "Japanese" +msgstr "ญี่ปุ่น" + +msgid "Georgian" +msgstr "จอร์เจีย" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "คาซัค" + +msgid "Khmer" +msgstr "เขมร" + +msgid "Kannada" +msgstr "กัณณาท" + +msgid "Korean" +msgstr "เกาหลี" + +msgid "Luxembourgish" +msgstr "ลักแซมเบิร์ก" + +msgid "Lithuanian" +msgstr "ลิทัวเนีย" + +msgid "Latvian" +msgstr "ลัตเวีย" + +msgid "Macedonian" +msgstr "มาซิโดเนีย" + +msgid "Malayalam" +msgstr "มลายู" + +msgid "Mongolian" +msgstr "มองโกเลีย" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "พม่า" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "เนปาล" + +msgid "Dutch" +msgstr "ดัตช์" + +msgid "Norwegian Nynorsk" +msgstr "นอร์เวย์ - Nynorsk" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "ปัญจาบี" + +msgid "Polish" +msgstr "โปแลนด์" + +msgid "Portuguese" +msgstr "โปรตุเกส" + +msgid "Brazilian Portuguese" +msgstr "โปรตุเกส (บราซิล)" + +msgid "Romanian" +msgstr "โรมาเนีย" + +msgid "Russian" +msgstr "รัสเซีย" + +msgid "Slovak" +msgstr "สโลวัก" + +msgid "Slovenian" +msgstr "สโลวีเนีย" + +msgid "Albanian" +msgstr "อัลแบเนีย" + +msgid "Serbian" +msgstr "เซอร์เบีย" + +msgid "Serbian Latin" +msgstr "เซอร์เบียละติน" + +msgid "Swedish" +msgstr "สวีเดน" + +msgid "Swahili" +msgstr "สวาฮีลี" + +msgid "Tamil" +msgstr "ทมิฬ" + +msgid "Telugu" +msgstr "เตลุคู" + +msgid "Thai" +msgstr "ไทย" + +msgid "Turkish" +msgstr "ตุรกี" + +msgid "Tatar" +msgstr "ตาตาร์" + +msgid "Udmurt" +msgstr "อัดเมิร์ท" + +msgid "Ukrainian" +msgstr "ยูเครน" + +msgid "Urdu" +msgstr "เออร์ดู" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "เวียดนาม" + +msgid "Simplified Chinese" +msgstr "จีนตัวย่อ" + +msgid "Traditional Chinese" +msgstr "จีนตัวเต็ม" + +msgid "Messages" +msgstr "ข้อความ" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "หมายเลขหน้าดังกล่าวไม่ใช่จำนวนเต็ม" + +msgid "That page number is less than 1" +msgstr "หมายเลขหน้าดังกล่าวมีค่าน้อยกว่า 1" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "กรุณาใส่ค่าที่ถูกต้อง" + +msgid "Enter a valid URL." +msgstr "ใส่ URL ที่ถูกต้อง" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "ป้อนที่อยู่อีเมลที่ถูกต้อง" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "กรุณาใส่หมายเลขไอพีที่ถูกต้อง" + +msgid "Enter a valid IPv6 address." +msgstr "กรอก IPv6 address ให้ถูกต้อง" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "กรอก IPv4 หรือ IPv6 address ให้ถูกต้อง" + +msgid "Enter only digits separated by commas." +msgstr "ใส่ตัวเลขที่คั่นด้วยจุลภาคเท่านั้น" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "ค่านี้ต้องเป็น %(limit_value)s (ปัจจุบันคือ %(show_value)s)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "ค่านี้ต้องน้อยกว่าหรือเท่ากับ %(limit_value)s" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "ค่านี้ต้องมากกว่าหรือเท่ากับ %(limit_value)s" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +msgid "Enter a number." +msgstr "กรอกหมายเลข" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "และ" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "ฟิลด์นี้ไม่สารถปล่อยว่างได้" + +msgid "This field cannot be blank." +msgstr "ฟิลด์นี้เว้นว่างไม่ได้" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s และ %(field_label)s มีอยู่แล้ว" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ฟิลด์ข้อมูล: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "ตรรกะแบบบูลหมายถึง ค่า\"จริง\" (True) หรือ \"ไม่จริง \" (False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "สตริง(ได้ถึง %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "จำนวนเต็มแบบมีจุลภาค" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "วันที่ (ไม่มีเวลา)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "วันที่ (พร้อมด้วยเวลา)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "เลขฐานสิบหรือเลขทศนิยม" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "ช่วงเวลา" + +msgid "Email address" +msgstr "อีเมล" + +msgid "File path" +msgstr "ตำแหน่งไฟล์" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "เลขทศนิยม" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "จำนวนเต็ม" + +msgid "Big (8 byte) integer" +msgstr "จำนวนเต็ม (8 byte)" + +msgid "IPv4 address" +msgstr "IPv4 address" + +msgid "IP address" +msgstr "หมายเลขไอพี" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" +"ตรรกะแบบบูลหมายถึง ค่า\"จริง\" (True) หรือ \"ไม่จริง \" (False) หรือ \"ไม่มี\" (None)" + +msgid "Positive integer" +msgstr "จํานวนเต็มบวก" + +msgid "Positive small integer" +msgstr "จํานวนเต็มบวกขนาดเล็ก" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (ถึง %(max_length)s )" + +msgid "Small integer" +msgstr "จำนวนเต็มขนาดเล็ก" + +msgid "Text" +msgstr "ข้อความ" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "เวลา" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "ไฟล์" + +msgid "Image" +msgstr "รูปภาพ" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (ชนิดของข้อมูลจะถูกกำหนดจากฟิลด์ที่เกี่ยวข้อง)" + +msgid "One-to-one relationship" +msgstr "ความสัมพันธ์แบบหนึ่งต่อหนึ่ง" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ความสัมพันธ์แบบ many-to-many" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "ฟิลด์นี้จำเป็น" + +msgid "Enter a whole number." +msgstr "กรอกหมายเลข" + +msgid "Enter a valid date." +msgstr "กรุณาใส่วัน" + +msgid "Enter a valid time." +msgstr "กรุณาใส่เวลา" + +msgid "Enter a valid date/time." +msgstr "กรุณาใส่วันเวลา" + +msgid "Enter a valid duration." +msgstr "ใส่ระยะเวลาที่ถูกต้อง" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "ไม่มีไฟล์ใดถูกส่ง. ตรวจสอบ encoding type ในฟอร์ม." + +msgid "No file was submitted." +msgstr "ไม่มีไฟล์ใดถูกส่ง" + +msgid "The submitted file is empty." +msgstr "ไฟล์ที่ส่งว่างเปล่า" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "โปรดเลือกไฟล์หรือติ๊ก clear checkbox อย่างใดอย่างหนึ่ง" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "อัพโหลดรูปที่ถูกต้อง. ไฟล์ที่อัพโหลดไปไม่ใช่รูป หรือรูปเสียหาย." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "เลือกตัวเลือกที่ถูกต้อง. %(value)s ไม่ใช่ตัวเลือกที่ใช้ได้." + +msgid "Enter a list of values." +msgstr "ใส่รายการ" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "ใส่ UUID ที่ถูกต้อง" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "เรียงลำดับ" + +msgid "Delete" +msgstr "ลบ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "โปรดแก้ไขข้อมูลที่ซ้ำซ้อนใน %(field)s" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "โปรดแก้ไขข้อมูลที่ซ้ำซ้อนใน %(field)s ซึ่งจะต้องไม่ซ้ำกัน" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"โปรดแก้ไขข้อมูลซ้ำซ้อนใน %(field_name)s ซึ่งจะต้องไม่ซ้ำกันสำหรับ %(lookup)s ใน " +"%(date_field)s" + +msgid "Please correct the duplicate values below." +msgstr "โปรดแก้ไขค่าที่ซ้ำซ้อนด้านล่าง" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "เลือกตัวเลือกที่ถูกต้อง. ตัวเลือกนั้นไม่สามารถเลือกได้." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "ล้าง" + +msgid "Currently" +msgstr "ปัจจุบัน" + +msgid "Change" +msgstr "เปลี่ยนแปลง" + +msgid "Unknown" +msgstr "ไม่รู้" + +msgid "Yes" +msgstr "ใช่" + +msgid "No" +msgstr "ไม่ใช่" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "ใช่,ไม่ใช่,อาจจะ" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ไบต์" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "เที่ยงคืน" + +msgid "noon" +msgstr "เที่ยงวัน" + +msgid "Monday" +msgstr "จันทร์" + +msgid "Tuesday" +msgstr "อังคาร" + +msgid "Wednesday" +msgstr "พุธ" + +msgid "Thursday" +msgstr "พฤหัสบดี" + +msgid "Friday" +msgstr "ศุกร์" + +msgid "Saturday" +msgstr "เสาร์" + +msgid "Sunday" +msgstr "อาทิตย์" + +msgid "Mon" +msgstr "จ." + +msgid "Tue" +msgstr "อ." + +msgid "Wed" +msgstr "พ." + +msgid "Thu" +msgstr "พฤ." + +msgid "Fri" +msgstr "ศ." + +msgid "Sat" +msgstr "ส." + +msgid "Sun" +msgstr "อา." + +msgid "January" +msgstr "มกราคม" + +msgid "February" +msgstr "กุมภาพันธ์" + +msgid "March" +msgstr "มีนาคม" + +msgid "April" +msgstr "เมษายน" + +msgid "May" +msgstr "พฤษภาคม" + +msgid "June" +msgstr "มิถุนายน" + +msgid "July" +msgstr "กรกฎาคม" + +msgid "August" +msgstr "สิงหาคม" + +msgid "September" +msgstr "กันยายน" + +msgid "October" +msgstr "ตุลาคม" + +msgid "November" +msgstr "พฤศจิกายน" + +msgid "December" +msgstr "ธันวาคม" + +msgid "jan" +msgstr "ม.ค." + +msgid "feb" +msgstr "ก.พ." + +msgid "mar" +msgstr "มี.ค." + +msgid "apr" +msgstr "เม.ย." + +msgid "may" +msgstr "พ.ค." + +msgid "jun" +msgstr "มิ.ย." + +msgid "jul" +msgstr "ก.ค." + +msgid "aug" +msgstr "ส.ค." + +msgid "sep" +msgstr "ก.ย." + +msgid "oct" +msgstr "ต.ค." + +msgid "nov" +msgstr "พ.ย." + +msgid "dec" +msgstr "ธ.ค." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ม.ค." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ก.พ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "มี.ค." + +msgctxt "abbrev. month" +msgid "April" +msgstr "เม.ย." + +msgctxt "abbrev. month" +msgid "May" +msgstr "พ.ค." + +msgctxt "abbrev. month" +msgid "June" +msgstr "มิ.ย." + +msgctxt "abbrev. month" +msgid "July" +msgstr "ก.ค." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ส.ค." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ก.ย." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ต.ค." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "พ.ย." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ธ.ค." + +msgctxt "alt. month" +msgid "January" +msgstr "มกราคม" + +msgctxt "alt. month" +msgid "February" +msgstr "กุมภาพันธ์" + +msgctxt "alt. month" +msgid "March" +msgstr "มีนาคม" + +msgctxt "alt. month" +msgid "April" +msgstr "เมษายน" + +msgctxt "alt. month" +msgid "May" +msgstr "พฤษภาคม" + +msgctxt "alt. month" +msgid "June" +msgstr "มิถุนายน" + +msgctxt "alt. month" +msgid "July" +msgstr "กรกฎาคม" + +msgctxt "alt. month" +msgid "August" +msgstr "สิงหาคม" + +msgctxt "alt. month" +msgid "September" +msgstr "กันยายน" + +msgctxt "alt. month" +msgid "October" +msgstr "ตุลาคม" + +msgctxt "alt. month" +msgid "November" +msgstr "พฤศจิกายน" + +msgctxt "alt. month" +msgid "December" +msgstr "ธันวาคม" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "หรือ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ปี" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d เดือน" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d สัปดาห์" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d วัน" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ชั่วโมง" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d นาที" + +msgid "0 minutes" +msgstr "0 นาที" + +msgid "Forbidden" +msgstr "หวงห้าม" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "ไม่ระบุปี" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "ไม่ระบุเดือน" + +msgid "No day specified" +msgstr "ไม่ระบุวัน" + +msgid "No week specified" +msgstr "ไม่ระบุสัปดาห์" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "ไม่มี %(verbose_name_plural)s ที่ใช้ได้" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s ในอนาคตไม่สามารถใช้ได้ เนื่องจาก %(class_name)s." +"allow_future มีค่าเป็น False" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "ไม่พบ %(verbose_name)s จาก query" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "หน้าไม่ถูกต้อง (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "ไม่ได้รับอนุญาตให้ใช้ Directory indexes ที่นี่" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "ดัชนีของ %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "เริ่มต้นกับ Django" + +msgid "Django Community" +msgstr "ชุมชน Django" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/th/__init__.py b/venv/Lib/site-packages/django/conf/locale/th/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/th/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/th/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b103d1b62476180f295c5624f4d24522bc044c2 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNrrxWd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04o$U-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/th/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/th/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4eaf223db8ce80212611bf9163509b28cc5be14 GIT binary patch literal 738 zcmZWlO>dh(5CsDXv12=q+Masg!ogBvdbX-6B!EE;VDX`f6)M6kcJ10GVsWJMb9(Dv ziqun2k@^dA>OkWZtBZE#&3p5P(PrIln}YNE^Uv8kmZE-DMf0?vxPnV`2$(_?rV))> zsD&BCU>32MLmWOrNB9^WFDT4^rx6eN1o8>wHsm($pbkDor?`u{xaU&Ce#xx_O$bV6 zGG3PL8ea$%W@;9Qs>6g15Fyp#BdkCTnUWW=ByJ=zsE{Deggv?jRO|X!G{>S_cEo2i z66YmX7oZRJeqk?{ul}PdNAHk*phr*i#Ule-Si>IbD6*$Un(dgfhdQ2Nz7+jRX%d4# zm7U16El=MY&i+=49PF8atJ{tjHK)G*M;(mQ49BfHgUHsRPpbM6o!2(Qn)=@JJQtnU zogv6neCA&?!El4<77W!@$YRjAym(x63rAZOqr`!ARb~y{lvPduQ;^b?* zNJ)rS@ph3(Nw%F!>nw@asZ@NC=2^ap3o^R<_Q1d2WO%nuKhW@J@)iQivUKy~S)SuL JmSbt2{sUETz25); literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/th/formats.py b/venv/Lib/site-packages/django/conf/locale/th/formats.py new file mode 100644 index 000000000..190e6d196 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/th/formats.py @@ -0,0 +1,33 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "j F Y" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = "j F Y, G:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "j M Y" +SHORT_DATETIME_FORMAT = "j M Y, G:i" +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d/%m/%Y", # 25/10/2006 + "%d %b %Y", # 25 ต.ค. 2006 + "%d %B %Y", # 25 ตุลาคม 2006 +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # 14:30:59 + "%H:%M:%S.%f", # 14:30:59.000200 + "%H:%M", # 14:30 +] +DATETIME_INPUT_FORMATS = [ + "%d/%m/%Y %H:%M:%S", # 25/10/2006 14:30:59 + "%d/%m/%Y %H:%M:%S.%f", # 25/10/2006 14:30:59.000200 + "%d/%m/%Y %H:%M", # 25/10/2006 14:30 +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "," +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4647125cc525569aef45eb2e318d9d6a69a16676 GIT binary patch literal 25628 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, 2020-2021 +# Resulkary , 2020 +# Welbeck Garli , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-24 16:30+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arapça" + +msgid "Algerian Arabic" +msgstr "Alžir Arapçasy" + +msgid "Asturian" +msgstr "Asturian" + +msgid "Azerbaijani" +msgstr "Azeri Türkçesi" + +msgid "Bulgarian" +msgstr "Bolgar" + +msgid "Belarusian" +msgstr "Belarusça" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Breton" + +msgid "Bosnian" +msgstr "Bosniýaça" + +msgid "Catalan" +msgstr "Katalan" + +msgid "Czech" +msgstr "Çehçe" + +msgid "Welsh" +msgstr "Uelsçe" + +msgid "Danish" +msgstr "Daniýaça" + +msgid "German" +msgstr "Nemesçe" + +msgid "Lower Sorbian" +msgstr "Aşaky Sorbian" + +msgid "Greek" +msgstr "Grekçe" + +msgid "English" +msgstr "Iňlisçe" + +msgid "Australian English" +msgstr "Awstraliýa Iňlisçesi" + +msgid "British English" +msgstr "Britan Iňlisçesi" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Ispança" + +msgid "Argentinian Spanish" +msgstr "Argentina Ispançasy" + +msgid "Colombian Spanish" +msgstr "Kolumbiýa Ispançasy" + +msgid "Mexican Spanish" +msgstr "Meksika Ispançasy" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragua Ispançasy" + +msgid "Venezuelan Spanish" +msgstr "Wenezuela Ispançasy" + +msgid "Estonian" +msgstr "Estonça" + +msgid "Basque" +msgstr "Baskça" + +msgid "Persian" +msgstr "Parsça" + +msgid "Finnish" +msgstr "Finçe" + +msgid "French" +msgstr "Fransuzça" + +msgid "Frisian" +msgstr "Frisça" + +msgid "Irish" +msgstr "Irlandça" + +msgid "Scottish Gaelic" +msgstr "Şotlandiýa Gaelçasy" + +msgid "Galician" +msgstr "Galisiýaça" + +msgid "Hebrew" +msgstr "Ýewreýçe" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Horwatça" + +msgid "Upper Sorbian" +msgstr "Ýokarky Sorbian" + +msgid "Hungarian" +msgstr "Wengerçe" + +msgid "Armenian" +msgstr "Ermeniçe" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezça" + +msgid "Igbo" +msgstr "Igbo" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandça" + +msgid "Italian" +msgstr "Italýança" + +msgid "Japanese" +msgstr "Ýaponça" + +msgid "Georgian" +msgstr "Gruzinçe" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "Gazakça" + +msgid "Khmer" +msgstr "Hmerçe" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreýçe" + +msgid "Kyrgyz" +msgstr "Gyrgyzça" + +msgid "Luxembourgish" +msgstr "Lýuksemburgça" + +msgid "Lithuanian" +msgstr "Litwança" + +msgid "Latvian" +msgstr "Latwiýaça" + +msgid "Macedonian" +msgstr "Makedonça" + +msgid "Malayalam" +msgstr "Malaýalam" + +msgid "Mongolian" +msgstr "Mongolça" + +msgid "Marathi" +msgstr "Marasi" + +msgid "Malay" +msgstr "" + +msgid "Burmese" +msgstr "Birma" + +msgid "Norwegian Bokmål" +msgstr "Norwegiýa Bokmaly" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Gollandça" + +msgid "Norwegian Nynorsk" +msgstr "Norwegiýa Nynorskçasy" + +msgid "Ossetic" +msgstr "Osetikçe" + +msgid "Punjabi" +msgstr "Penjebiçe" + +msgid "Polish" +msgstr "Polýakça" + +msgid "Portuguese" +msgstr "Portugalça" + +msgid "Brazilian Portuguese" +msgstr "Braziliýa Portugalçasy" + +msgid "Romanian" +msgstr "Rumynça" + +msgid "Russian" +msgstr "Rusça" + +msgid "Slovak" +msgstr "Slowakça" + +msgid "Slovenian" +msgstr "Slowençe" + +msgid "Albanian" +msgstr "Albança" + +msgid "Serbian" +msgstr "Serbçe" + +msgid "Serbian Latin" +msgstr "Serb Latynçasy" + +msgid "Swedish" +msgstr "Şwedçe" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "Täjik" + +msgid "Thai" +msgstr "Taýça" + +msgid "Turkmen" +msgstr "Türkmençe" + +msgid "Turkish" +msgstr "Türkçe" + +msgid "Tatar" +msgstr "Tatarça" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainçe" + +msgid "Urdu" +msgstr "Urduça" + +msgid "Uzbek" +msgstr "Özbekçe" + +msgid "Vietnamese" +msgstr "Wýetnamça" + +msgid "Simplified Chinese" +msgstr "Ýönekeýleşdirilen Hytaýça" + +msgid "Traditional Chinese" +msgstr "Adaty Hytaýça" + +msgid "Messages" +msgstr "Habarlar" + +msgid "Site Maps" +msgstr "Saýt Kartalary" + +msgid "Static Files" +msgstr "Statik Faýllar" + +msgid "Syndication" +msgstr "Syndikasiýa" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Ol sahypanyň sany bitewi san däl" + +msgid "That page number is less than 1" +msgstr "Ol sahypanyň belgisi 1-den az" + +msgid "That page contains no results" +msgstr "Ol sahypada hiç hili netije ýok" + +msgid "Enter a valid value." +msgstr "Dogry baha giriziň." + +msgid "Enter a valid URL." +msgstr "Dogry URL giriziň." + +msgid "Enter a valid integer." +msgstr "Dogry bitewi san giriziň." + +msgid "Enter a valid email address." +msgstr "Dogry e-poçta salgysyny giriziň." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Harplardan, sanlardan, aşaky çyzyklardan ýa-da defislerden ybarat dogry " +"“slug” giriziň." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Unikod harplaryndan, sanlardan, aşaky çyzyklardan ýa-da defislerden ybarat " +"dogry “slug” giriziň." + +msgid "Enter a valid IPv4 address." +msgstr "Dogry IPv4 salgysyny giriziň." + +msgid "Enter a valid IPv6 address." +msgstr "Dogry IPv6 salgysyny giriziň." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Dogry IPv4 ýa-da IPv6 adresi giriziň." + +msgid "Enter only digits separated by commas." +msgstr "Diňe otur bilen aýrylan sanlary giriziň." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"%(limit_value)s bahasynyň dogry bolmagyny üpjün ediň (şuwagt %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Maglumatyň %(limit_value)s bahasyndan az ýa-da deň bolmagyny üpjün ediň." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Maglumatyň %(limit_value)s bahasyndan köp ýa-da deň bolmagyny üpjün ediň." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu maglumatda iň az %(limit_value)d harp bardygyna göz ýetiriň (munda " +"%(show_value)d bar)." +msgstr[1] "" +"Bu maglumatda azyndan %(limit_value)d nyşanyň bolmagyny üpjün ediň (şuwagt " +"%(show_value)d sany bar)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu maglumatda köpünden %(limit_value)d harp bardygyna göz ýetiriň (bunda " +"%(show_value)d bar)" +msgstr[1] "" +"Bu maglumatda iň köp %(limit_value)d nyşanyň bolmagyny üpjün ediň (şuwagt " +"%(show_value)d sany bar)" + +msgid "Enter a number." +msgstr "San giriziň" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Bu ýerde jemi %(max)s'dan köp san ýokduguna göz ýetiriň." +msgstr[1] "Bu ýerde jemi %(max)s sanydan köp sifriň bolmazlygyny üpjün ediň." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Bu ýerde %(max)s'dan köp nokatly san ýokdugyna göz ýetiriň" +msgstr[1] "Bu ýerde %(max)s sanydan köp nokatly san ýoklugyny üpjün ediň." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Nokatdan öň %(max)s'dan köp san ýokdugyna göz ýetiriň" +msgstr[1] "Nokatdan öň %(max)s sanydan köp sifriň ýoklugyny üpjün ediň." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"\"%(extension)s\" faýl görnüşine rugsat edilmeýär. Rugsat berilýän faýl " +"görnüşleri şulardan ybarat: %(allowed_extensions)s" + +msgid "Null characters are not allowed." +msgstr "Null nyşanlara rugsat berilmeýär." + +msgid "and" +msgstr "we" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s bilen baglanyşykly %(model_name)s eýýäm bar." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r dogry saýlaw däl." + +msgid "This field cannot be null." +msgstr "Bu meýdan null bilmez." + +msgid "This field cannot be blank." +msgstr "Bu meýdan boş bolup bilmez." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s bilen baglanyşykly %(model_name)s eýýäm bar." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(lookup_type)s %(date_field_label)s üçin %(field_label)s özboluşly " +"bolmalydyr." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Meýdan görnüşi: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "\"%(value)s\" hökman True ýa-da False bolmalydyr." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "\"%(value)s\" hökman True, False ýa-da None bolmalydyr." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True ýa-da False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Setir (iň köp %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Otur bilen bölünen bitewi sanlar" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"\"%(value)s\" bahasynyň nädogry sene formaty bar. ÝÝÝÝ-AA-GG görnüşinde " +"bolmaly." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"\"%(value)s\" dogry yazylyş usuluna (ÝÝÝÝ-AA-GG) eýe, ýöne, sene nädogry." + +msgid "Date (without time)" +msgstr "Sene (wagtsyz)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"\"%(value)s\" ýalňyş görnüşde ýazylan. Bu baha hökmany suratda ÝÝÝÝ-AA-GG SS:" +"MM[:ss[.uuuuuu]][TZ] görnüşde bolmalydyr." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"\"%(value)s\" dogry sene görnüşine eýe (ÝÝÝÝ-AA-GG SS:MM[:ss[.uuuuuu]][TZ]). " +"Ýöne bu nädogry sene/wagt." + +msgid "Date (with time)" +msgstr "Sene (wagty bilen)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "\"%(value)s\" hökman nokatly san bolmalydyr." + +msgid "Decimal number" +msgstr "Onluk san" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"\"%(value)s\" ýalňyş sene görnüşine eýe. Bu hökman [GG] [[SS:]AA:]ss[." +"uuuuuu] görnüşinde bolmalydyr." + +msgid "Duration" +msgstr "Dowamlylyk" + +msgid "Email address" +msgstr "Email adres" + +msgid "File path" +msgstr "Faýl ýoly" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "\"%(value)s float san bolmaly." + +msgid "Floating point number" +msgstr "Float san" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "\"%(value)s\" bitewi san bolmaly." + +msgid "Integer" +msgstr "Bitewi san" + +msgid "Big (8 byte) integer" +msgstr "Uly (8 baýt) bitewi san" + +msgid "Small integer" +msgstr "Kiçi bitewi san" + +msgid "IPv4 address" +msgstr "IPv4 salgy" + +msgid "IP address" +msgstr "IP salgy" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "\"%(value)s\" None, True ýa-da False bolmaly." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (True, False ýa-da None)" + +msgid "Positive big integer" +msgstr "Pozitiw uly bitewi san" + +msgid "Positive integer" +msgstr "Pozitiw bitewi san" + +msgid "Positive small integer" +msgstr "Pozitiw kiçi bitewi san" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (iň köp %(max_length)s)" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"\"%(value)s\" bahasy nädogry formata eýe. SS:MM[:ss[.uuuuuu]] formatda " +"bolmaly." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"\"%(value)s\" bahasy dogry formata eýe (SS:MM[:ss[.uuuuuu]]) ýöne bu nädogry " +"wagt." + +msgid "Time" +msgstr "Wagt" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Çig ikilik maglumat" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" dogry UUID däl." + +msgid "Universally unique identifier" +msgstr "Ähliumumy özboluşly kesgitleýji" + +msgid "File" +msgstr "Faýl" + +msgid "Image" +msgstr "Surat" + +msgid "A JSON object" +msgstr "JSON obýekti" + +msgid "Value must be valid JSON." +msgstr "Bahasy JSON bolmaly." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s%(value)r bolan %(model)s ýok." + +msgid "Foreign Key (type determined by related field)" +msgstr "Daşary açary (baglanyşykly meýdança bilen kesgitlenýär)" + +msgid "One-to-one relationship" +msgstr "Bire-bir gatnaşyk" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s gatnaşyk" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s gatnaşyklar" + +msgid "Many-to-many relationship" +msgstr "Köp-köp gatnaşyk" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Bu meýdança hökman gerekli." + +msgid "Enter a whole number." +msgstr "Bitin san giriziň." + +msgid "Enter a valid date." +msgstr "Dogry senäni giriziň." + +msgid "Enter a valid time." +msgstr "Dogry wagt giriziň." + +msgid "Enter a valid date/time." +msgstr "Dogry senäni/wagty giriziň." + +msgid "Enter a valid duration." +msgstr "Dogry dowamlylygy giriziň." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Günleriň sany {min_days} bilen {max_days} arasynda bolmaly." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Hiç hili faýl tabşyrylmady. Formadaky enkodiň görnüşini barlaň." + +msgid "No file was submitted." +msgstr "Hiç hili faýl tabşyrylmady." + +msgid "The submitted file is empty." +msgstr "Tabşyrylan faýl boş." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bu faýl adynyň iň köp %(max)d nyşanynyň bolmagyny üpjin ediň (şuwagt " +"%(length)d sany bar)." +msgstr[1] "" +"Bu faýl adynyň iň köp %(max)d nyşanynyň bolmagyny üpjin ediň (şuwagt " +"%(length)d sany bar)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Bir faýl iberiň ýa-da arassala gutyjygyny belläň, ikisini bile däl." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Dogry surat ýükläň. Ýüklän faýlyňyz ýa surat däldi ýa-da zaýalanan suratdy." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Dogry saýlawy saýlaň. %(value)s elýeterli saýlawlaryň biri däl." + +msgid "Enter a list of values." +msgstr "Bahalaryň sanawyny giriziň." + +msgid "Enter a complete value." +msgstr "Doly bahany giriziň." + +msgid "Enter a valid UUID." +msgstr "Dogry UUID giriziň." + +msgid "Enter a valid JSON." +msgstr "Dogry JSON giriziň." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gizlin meýdan %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Tertip" + +msgid "Delete" +msgstr "Poz" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s üçin dublikat maglumatlary düzediň." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Özboluşly bolmaly %(field)s üçin dublikat maglumatlary düzediň." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(date_field)s meýdanynda %(lookup)süçin özboluşly bolmaly %(field_name)s " +"üçin dublikat maglumatlary düzediň." + +msgid "Please correct the duplicate values below." +msgstr "Aşakdaky dublikat bahalary düzediň." + +msgid "The inline value did not match the parent instance." +msgstr "Giriş bahasy esasy mysal bilen gabat gelmedi." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Dogry saýlawy saýlaň. Bu saýlaw, elýeterli saýlawlaryň biri däl." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" dogry baha däl." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s wagty %(current_timezone)s wagt zolagy bilen düşündirip " +"bolmady; garyşyk bolup biler ýa-da ýok bolmagy mümkin." + +msgid "Clear" +msgstr "Arassala" + +msgid "Currently" +msgstr "Häzirki wagtda" + +msgid "Change" +msgstr "Üýtget" + +msgid "Unknown" +msgstr "Näbelli" + +msgid "Yes" +msgstr "Hawa" + +msgid "No" +msgstr "Ýok" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "hawa,ýok,belki" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d baýt" +msgstr[1] "%(size)d baýt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m" + +msgid "a.m." +msgstr "a.m" + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "ýary gije" + +msgid "noon" +msgstr "günortan" + +msgid "Monday" +msgstr "Duşenbe" + +msgid "Tuesday" +msgstr "Sişenbe" + +msgid "Wednesday" +msgstr "Çarşenbe" + +msgid "Thursday" +msgstr "Penşenbe" + +msgid "Friday" +msgstr "Anna" + +msgid "Saturday" +msgstr "Şenbe" + +msgid "Sunday" +msgstr "Ýekşenbe" + +msgid "Mon" +msgstr "Duş" + +msgid "Tue" +msgstr "Siş" + +msgid "Wed" +msgstr "Çarş" + +msgid "Thu" +msgstr "Pen" + +msgid "Fri" +msgstr "Anna" + +msgid "Sat" +msgstr "Şen" + +msgid "Sun" +msgstr "Ýek" + +msgid "January" +msgstr "Ýanwar" + +msgid "February" +msgstr "Fewral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "Maý" + +msgid "June" +msgstr "Iýun" + +msgid "July" +msgstr "Iýul" + +msgid "August" +msgstr "Awgust" + +msgid "September" +msgstr "Sentýabr" + +msgid "October" +msgstr "Oktýabr" + +msgid "November" +msgstr "Noýabr" + +msgid "December" +msgstr "Dekabr" + +msgid "jan" +msgstr "ýan" + +msgid "feb" +msgstr "few" + +msgid "mar" +msgstr "mart" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maý" + +msgid "jun" +msgstr "iýun" + +msgid "jul" +msgstr "iýul" + +msgid "aug" +msgstr "awg" + +msgid "sep" +msgstr "sent" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "noý" + +msgid "dec" +msgstr "dek" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ýan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Few." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprel" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maý" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Iýun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Iýul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Awg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sent." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Noý." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dek." + +msgctxt "alt. month" +msgid "January" +msgstr "Ýanwar" + +msgctxt "alt. month" +msgid "February" +msgstr "Fewral" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprel" + +msgctxt "alt. month" +msgid "May" +msgstr "Maý" + +msgctxt "alt. month" +msgid "June" +msgstr "Iýun" + +msgctxt "alt. month" +msgid "July" +msgstr "Iýul" + +msgctxt "alt. month" +msgid "August" +msgstr "Awgust" + +msgctxt "alt. month" +msgid "September" +msgstr "Sentýabr" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktýabr" + +msgctxt "alt. month" +msgid "November" +msgstr "Noýabr" + +msgctxt "alt. month" +msgid "December" +msgstr "Dekabr" + +msgid "This is not a valid IPv6 address." +msgstr "Bu dogry IPv6 salgy däl." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ýa" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "\"" + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "Forbidden" +msgstr "Gadagan " + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF dogrylamak şowsuz. Talap ýatyryldy." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Brauzeriňizde \"Referer\" sözbaşylaryny öçüren bolsaňyz, iň bolmanda bu " +"sahypa ýa-da HTTPS birikmeleri ýa-da \"meňzeş\" talaplar üçin täzeden açyň." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Egerde siz diýen bellik " +"ýada \"Referrer-Policy: no-referrer\" header ulanýan bolsaňyz, olary " +"aýyrmagyňyzy haýyş edýäris. CSRF goragy üçin \"Referer\" header-i dogry " +"salgylanma üçin gereklidir. Eger siz gizlinlik üçin alada etseňiz, üçinji " +"şahs sahypalara baglanyşyklar üçin ýaly " +"alternatiwalary ulanyp bilersiňiz." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Bu sahypa formalary tabşyranda CSRF kukisini talap edýäligi sebäpli bu " +"habary görýärsiňiz. Bu kuki, brauzeriňiziň üçünji taraplar tarapyndan " +"ogurlanmazlygy üçin howpsuzlyk sebäpli talap edilýär." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Brauzeriňizde kukileri öçüren bolsaňyz, iň bolmanda şu sahypa ýa-da \"meňzeş" +"\" talaplar üçin olary täzeden açyň." + +msgid "More information is available with DEBUG=True." +msgstr "Has giňişleýin maglumat DEBUG=True bilen elýeterlidir." + +msgid "No year specified" +msgstr "Ýyl görkezilmedi" + +msgid "Date out of range" +msgstr "Sene çägiň daşynda" + +msgid "No month specified" +msgstr "Aý görkezilmedi" + +msgid "No day specified" +msgstr "Gün görkezilmedi" + +msgid "No week specified" +msgstr "Hepde görkezilmedi" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Elýeterli %(verbose_name_plural)s ýok" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Gelejek %(verbose_name_plural)s elýeterli däl sebäbi %(class_name)s." +"allow_future bahasy False" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Nädogry sene setiri \"%(datestr)s\" berlen format \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Talap bilen gabat gelýän %(verbose_name)s tapylmady" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Sahypa “iň soňky” däl, ony int-ede öwrüp bolmaz." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nädogry sahypa (%(page_number)s ): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Boş list we \"%(class_name)s.allow_empty\" bahasy False" + +msgid "Directory indexes are not allowed here." +msgstr "Bu ýerde katalog indekslerine rugsat berilmeýär." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" beýle ýol ýok" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s indeksi" + +msgid "The install worked successfully! Congratulations!" +msgstr "Üstünlikli guruldy! Gutlaýarys!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s üçin goýberiş " +"belliklerini görüň" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Bu sahypany görýärsiňiz, sebäbi sazlamalar faýlyňyzda DEBUG=True we hiç hili URL düzmediňiz." + +msgid "Django Documentation" +msgstr "Django resminamalary" + +msgid "Topics, references, & how-to’s" +msgstr "Mowzuklar, salgylanmalar, & how-to-lar" + +msgid "Tutorial: A Polling App" +msgstr "Gollanma: Ses beriş programmasy" + +msgid "Get started with Django" +msgstr "Django bilen başlaň" + +msgid "Django Community" +msgstr "Django jemgyýeti" + +msgid "Connect, get help, or contribute" +msgstr "Birikiň, kömek alyň ýa-da goşant goşuň" diff --git a/venv/Lib/site-packages/django/conf/locale/tk/__init__.py b/venv/Lib/site-packages/django/conf/locale/tk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/tk/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tk/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a94e6a94be2a8b1fb9262f077159fab5306466b9 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNw$7`d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04sVl;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tk/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tk/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..007943642b27f97e35ac0a976227ffabbb749064 GIT binary patch literal 758 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, 2013 +# BouRock, 2015-2021 +# BouRock, 2014-2015 +# Caner Başaran , 2013 +# Cihad GÜNDOĞDU , 2012 +# Cihad GÜNDOĞDU , 2013-2014 +# Gökmen Görgen , 2013 +# Jannis Leidel , 2011 +# Mesut Can Gürle , 2013 +# Murat Çorlu , 2012 +# Murat Sahin , 2011-2012 +# Türker Sezer , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 17:51+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "Afrikanca" + +msgid "Arabic" +msgstr "Arapça" + +msgid "Algerian Arabic" +msgstr "Cezayir Arapçası" + +msgid "Asturian" +msgstr "Asturyaca" + +msgid "Azerbaijani" +msgstr "Azerice" + +msgid "Bulgarian" +msgstr "Bulgarca" + +msgid "Belarusian" +msgstr "Beyaz Rusça" + +msgid "Bengali" +msgstr "Bengalce" + +msgid "Breton" +msgstr "Bretonca" + +msgid "Bosnian" +msgstr "Boşnakça" + +msgid "Catalan" +msgstr "Katalanca" + +msgid "Czech" +msgstr "Çekçe" + +msgid "Welsh" +msgstr "Galce" + +msgid "Danish" +msgstr "Danca" + +msgid "German" +msgstr "Almanca" + +msgid "Lower Sorbian" +msgstr "Aşağı Sorb dili" + +msgid "Greek" +msgstr "Yunanca" + +msgid "English" +msgstr "İngilizce" + +msgid "Australian English" +msgstr "Avusturya İngilizcesi" + +msgid "British English" +msgstr "İngiliz İngilizcesi" + +msgid "Esperanto" +msgstr "Esperanto dili" + +msgid "Spanish" +msgstr "İspanyolca" + +msgid "Argentinian Spanish" +msgstr "Arjantin İspanyolcası" + +msgid "Colombian Spanish" +msgstr "Kolomiya İspanyolcası" + +msgid "Mexican Spanish" +msgstr "Meksika İspanyolcası" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragua İspanyolcası" + +msgid "Venezuelan Spanish" +msgstr "Venezüella İspanyolcası" + +msgid "Estonian" +msgstr "Estonca" + +msgid "Basque" +msgstr "Baskça" + +msgid "Persian" +msgstr "Farsça" + +msgid "Finnish" +msgstr "Fince" + +msgid "French" +msgstr "Fransızca" + +msgid "Frisian" +msgstr "Frizce" + +msgid "Irish" +msgstr "İrlandaca" + +msgid "Scottish Gaelic" +msgstr "İskoçça Galcesi" + +msgid "Galician" +msgstr "Galiçyaca" + +msgid "Hebrew" +msgstr "İbranice" + +msgid "Hindi" +msgstr "Hintçe" + +msgid "Croatian" +msgstr "Hırvatça" + +msgid "Upper Sorbian" +msgstr "Yukarı Sorb dili" + +msgid "Hungarian" +msgstr "Macarca" + +msgid "Armenian" +msgstr "Ermenice" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Endonezce" + +msgid "Igbo" +msgstr "Igbo dili" + +msgid "Ido" +msgstr "Ido dili" + +msgid "Icelandic" +msgstr "İzlandaca" + +msgid "Italian" +msgstr "İtalyanca" + +msgid "Japanese" +msgstr "Japonca" + +msgid "Georgian" +msgstr "Gürcüce" + +msgid "Kabyle" +msgstr "Kabiliye dili" + +msgid "Kazakh" +msgstr "Kazakça" + +msgid "Khmer" +msgstr "Kmerce" + +msgid "Kannada" +msgstr "Kannada dili" + +msgid "Korean" +msgstr "Korece" + +msgid "Kyrgyz" +msgstr "Kırgızca" + +msgid "Luxembourgish" +msgstr "Lüksemburgca" + +msgid "Lithuanian" +msgstr "Litovca" + +msgid "Latvian" +msgstr "Letonca" + +msgid "Macedonian" +msgstr "Makedonca" + +msgid "Malayalam" +msgstr "Malayamca" + +msgid "Mongolian" +msgstr "Moğolca" + +msgid "Marathi" +msgstr "Marathi dili" + +msgid "Malay" +msgstr "Malayca" + +msgid "Burmese" +msgstr "Birmanca" + +msgid "Norwegian Bokmål" +msgstr "Norveççe Bokmal" + +msgid "Nepali" +msgstr "Nepalce" + +msgid "Dutch" +msgstr "Flemenkçe" + +msgid "Norwegian Nynorsk" +msgstr "Norveççe Nynorsk" + +msgid "Ossetic" +msgstr "Osetçe" + +msgid "Punjabi" +msgstr "Pencapça" + +msgid "Polish" +msgstr "Lehçe" + +msgid "Portuguese" +msgstr "Portekizce" + +msgid "Brazilian Portuguese" +msgstr "Brezilya Portekizcesi" + +msgid "Romanian" +msgstr "Romence" + +msgid "Russian" +msgstr "Rusça" + +msgid "Slovak" +msgstr "Slovakça" + +msgid "Slovenian" +msgstr "Slovence" + +msgid "Albanian" +msgstr "Arnavutça" + +msgid "Serbian" +msgstr "Sırpça" + +msgid "Serbian Latin" +msgstr "Sırpça Latin" + +msgid "Swedish" +msgstr "İsveççe" + +msgid "Swahili" +msgstr "Savahilice" + +msgid "Tamil" +msgstr "Tamilce" + +msgid "Telugu" +msgstr "Telugu dili" + +msgid "Tajik" +msgstr "Tacikçe" + +msgid "Thai" +msgstr "Tayca" + +msgid "Turkmen" +msgstr "Türkmence" + +msgid "Turkish" +msgstr "Türkçe" + +msgid "Tatar" +msgstr "Tatarca" + +msgid "Udmurt" +msgstr "Udmurtça" + +msgid "Ukrainian" +msgstr "Ukraynaca" + +msgid "Urdu" +msgstr "Urduca" + +msgid "Uzbek" +msgstr "‎Özbekçe" + +msgid "Vietnamese" +msgstr "Vietnamca" + +msgid "Simplified Chinese" +msgstr "Basitleştirilmiş Çince" + +msgid "Traditional Chinese" +msgstr "Geleneksel Çince" + +msgid "Messages" +msgstr "İletiler" + +msgid "Site Maps" +msgstr "Site Haritaları" + +msgid "Static Files" +msgstr "Sabit Dosyalar" + +msgid "Syndication" +msgstr "Dağıtım" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Bu sayfa numarası bir tamsayı değil" + +msgid "That page number is less than 1" +msgstr "Bu sayfa numarası 1’den az" + +msgid "That page contains no results" +msgstr "Bu sayfa hiç sonuç içermiyor" + +msgid "Enter a valid value." +msgstr "Geçerli bir değer girin." + +msgid "Enter a valid URL." +msgstr "Geçerli bir URL girin." + +msgid "Enter a valid integer." +msgstr "Geçerli bir tamsayı girin." + +msgid "Enter a valid email address." +msgstr "Geçerli bir e-posta adresi girin." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Harflerden, sayılardan, altçizgilerden veya tirelerden oluşan geçerli bir " +"“kısaltma” girin." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Evrensel kod harflerden, sayılardan, altçizgilerden veya tirelerden oluşan " +"geçerli bir “kısaltma” girin." + +msgid "Enter a valid IPv4 address." +msgstr "Geçerli bir IPv4 adresi girin." + +msgid "Enter a valid IPv6 address." +msgstr "Geçerli bir IPv6 adresi girin." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Geçerli bir IPv4 veya IPv6 adresi girin." + +msgid "Enter only digits separated by commas." +msgstr "Sadece virgülle ayrılmış rakamlar girin." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Bu değerin %(limit_value)s olduğuna emin olun (şu an %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Bu değerin %(limit_value)s değerinden az veya eşit olduğuna emin olun." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Bu değerin %(limit_value)s değerinden büyük veya eşit olduğuna emin olun." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu değerin en az %(limit_value)d karaktere sahip olduğuna emin olun (şu an " +"%(show_value)d)." +msgstr[1] "" +"Bu değerin en az %(limit_value)d karaktere sahip olduğuna emin olun (şu an " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu değerin en fazla %(limit_value)d karaktere sahip olduğuna emin olun (şu " +"an %(show_value)d)." +msgstr[1] "" +"Bu değerin en fazla %(limit_value)d karaktere sahip olduğuna emin olun (şu " +"an %(show_value)d)." + +msgid "Enter a number." +msgstr "Bir sayı girin." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Toplamda %(max)s rakamdan daha fazla olmadığından emin olun." +msgstr[1] "Toplamda %(max)s rakamdan daha fazla olmadığından emin olun." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "%(max)s ondalık basamaktan daha fazla olmadığından emin olun." +msgstr[1] "%(max)s ondalık basamaktan daha fazla olmadığından emin olun." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Ondalık noktasından önce %(max)s rakamdan daha fazla olmadığından emin olun." +msgstr[1] "" +"Ondalık noktasından önce %(max)s rakamdan daha fazla olmadığından emin olun." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"“%(extension)s” dosya uzantısına izin verilmiyor. İzin verilen uzantılar: " +"%(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Boş karakterlere izin verilmiyor." + +msgid "and" +msgstr "ve" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Bu %(field_labels)s alanına sahip %(model_name)s zaten mevcut." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r değeri geçerli bir seçim değil." + +msgid "This field cannot be null." +msgstr "Bu alan boş olamaz." + +msgid "This field cannot be blank." +msgstr "Bu alan boş olamaz." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Bu %(field_label)s alanına sahip %(model_name)s zaten mevcut." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s, %(date_field_label)s %(lookup_type)s için benzersiz olmak " +"zorundadır." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Alan türü: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s” değeri ya True ya da False olmak zorundadır." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s” değeri ya True, False ya da None olmak zorundadır." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Ya True ya da False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Dizgi (%(max_length)s karaktere kadar)" + +msgid "Comma-separated integers" +msgstr "Virgülle ayrılmış tamsayılar" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"“%(value)s” değeri geçersiz bir tarih biçimine sahip. Bu YYYY-MM-DD " +"biçiminde olmak zorundadır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"“%(value)s” değeri doğru bir biçime (YYYY-MM-DD) sahip ancak bu geçersiz bir " +"tarih." + +msgid "Date (without time)" +msgstr "Tarih (saat olmadan)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s” değeri geçersiz bir biçime sahip. YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] biçiminde olmak zorundadır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s” değeri doğru bir biçime (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"sahip ancak bu geçersiz bir tarih/saat." + +msgid "Date (with time)" +msgstr "Tarih (saat olan)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s” değeri bir ondalık sayı olmak zorundadır." + +msgid "Decimal number" +msgstr "Ondalık sayı" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s” değer geçersiz bir biçime sahip. [DD] [HH:[MM:]]ss[.uuuuuu] " +"biçiminde olmak zorundadır." + +msgid "Duration" +msgstr "Süre" + +msgid "Email address" +msgstr "E-posta adresi" + +msgid "File path" +msgstr "Dosya yolu" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s” değeri kayan noktalı bir sayı olmak zorundadır." + +msgid "Floating point number" +msgstr "Kayan noktalı sayı" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s” değeri bir tamsayı olmak zorundadır." + +msgid "Integer" +msgstr "Tamsayı" + +msgid "Big (8 byte) integer" +msgstr "Büyük (8 bayt) tamsayı" + +msgid "Small integer" +msgstr "Küçük tamsayı" + +msgid "IPv4 address" +msgstr "IPv4 adresi" + +msgid "IP address" +msgstr "IP adresi" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s” değeri ya None, True ya da False olmak zorundadır." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleanl (Ya True, False, ya da None)" + +msgid "Positive big integer" +msgstr "Pozitif büyük tamsayı" + +msgid "Positive integer" +msgstr "Pozitif tamsayı" + +msgid "Positive small integer" +msgstr "Pozitif küçük tamsayı" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Kısaltma (%(max_length)s karaktere kadar)" + +msgid "Text" +msgstr "Metin" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"“%(value)s” değeri geçersiz bir biçime sahip. HH:MM[:ss[.uuuuuu]] biçiminde " +"olmak zorundadır." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"“%(value)s” değeri doğru biçime (HH:MM[:ss[.uuuuuu]]) sahip ancak bu " +"geçersiz bir saat." + +msgid "Time" +msgstr "Saat" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Ham ikili veri" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s” geçerli bir UUID değil." + +msgid "Universally unique identifier" +msgstr "Evrensel benzersiz tanımlayıcı" + +msgid "File" +msgstr "Dosya" + +msgid "Image" +msgstr "Resim" + +msgid "A JSON object" +msgstr "JSON nesnesi" + +msgid "Value must be valid JSON." +msgstr "Değer geçerli JSON olmak zorundadır." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s %(value)r olan %(model)s benzeri mevcut değil." + +msgid "Foreign Key (type determined by related field)" +msgstr "Dış Anahtar (türü ilgili alana göre belirlenir)" + +msgid "One-to-one relationship" +msgstr "Bire-bir ilişki" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s ilişkisi" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s ilişkileri" + +msgid "Many-to-many relationship" +msgstr "Çoka-çok ilişki" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Bu alan zorunludur." + +msgid "Enter a whole number." +msgstr "Tam bir sayı girin." + +msgid "Enter a valid date." +msgstr "Geçerli bir tarih girin." + +msgid "Enter a valid time." +msgstr "Geçerli bir saat girin." + +msgid "Enter a valid date/time." +msgstr "Geçerli bir tarih/saat girin." + +msgid "Enter a valid duration." +msgstr "Geçerli bir süre girin." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Gün sayıları {min_days} ve {max_days} arasında olmak zorundadır." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Hiç dosya gönderilmedi. Formdaki kodlama türünü kontrol edin." + +msgid "No file was submitted." +msgstr "Hiç dosya gönderilmedi." + +msgid "The submitted file is empty." +msgstr "Gönderilen dosya boş." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bu dosya adının en fazla %(max)d karaktere sahip olduğundan emin olun (şu an " +"%(length)d)." +msgstr[1] "" +"Bu dosya adının en fazla %(max)d karaktere sahip olduğundan emin olun (şu an " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Lütfen ya bir dosya gönderin ya da temizle işaretleme kutusunu işaretleyin, " +"ikisini aynı anda işaretlemeyin." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Geçerli bir resim gönderin. Gönderdiğiniz dosya ya bir resim değildi ya da " +"bozulmuş bir resimdi." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Geçerli bir seçenek seçin. %(value)s mevcut seçeneklerden biri değil." + +msgid "Enter a list of values." +msgstr "Değerlerin bir listesini girin." + +msgid "Enter a complete value." +msgstr "Tam bir değer girin." + +msgid "Enter a valid UUID." +msgstr "Geçerli bir UUID girin." + +msgid "Enter a valid JSON." +msgstr "Geçerli bir JSON girin." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gizli alan %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm verileri eksik veya değiştirilmiş. Eksik alanlar: " +"%(field_names)s. Sorun devam ederse bir hata raporu dosyalamanız gerekebilir." + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "Lütfen en fazla %d form gönderin." +msgstr[1] "Lütfen en fazla %d form gönderin." + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "Lütfen en az %d form gönderin." +msgstr[1] "Lütfen en az %d form gönderin." + +msgid "Order" +msgstr "Sıralama" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Lütfen %(field)s için kopya veriyi düzeltin." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Lütfen %(field)s için benzersiz olmak zorunda olan, kopya veriyi düzeltin." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Lütfen %(date_field)s içindeki %(lookup)s için benzersiz olmak zorunda olan " +"%(field_name)s için kopya veriyi düzeltin." + +msgid "Please correct the duplicate values below." +msgstr "Lütfen aşağıdaki kopya değerleri düzeltin." + +msgid "The inline value did not match the parent instance." +msgstr "Satıriçi değer ana örnek ile eşleşmedi." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Geçerli bir seçenek seçin. Bu seçenek, mevcut seçeneklerden biri değil." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s” geçerli bir değer değil." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s, %(current_timezone)s saat dilimi olarak yorumlanamadı; bu " +"belirsiz olabilir ya da mevcut olmayabilir." + +msgid "Clear" +msgstr "Temizle" + +msgid "Currently" +msgstr "Şu anki" + +msgid "Change" +msgstr "Değiştir" + +msgid "Unknown" +msgstr "Bilinmiyor" + +msgid "Yes" +msgstr "Evet" + +msgid "No" +msgstr "Hayır" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "evet,hayır,olabilir" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bayt" +msgstr[1] "%(size)d bayt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ö.s." + +msgid "a.m." +msgstr "ö.ö." + +msgid "PM" +msgstr "ÖS" + +msgid "AM" +msgstr "ÖÖ" + +msgid "midnight" +msgstr "gece yarısı" + +msgid "noon" +msgstr "öğlen" + +msgid "Monday" +msgstr "Pazartesi" + +msgid "Tuesday" +msgstr "Salı" + +msgid "Wednesday" +msgstr "Çarşamba" + +msgid "Thursday" +msgstr "Perşembe" + +msgid "Friday" +msgstr "Cuma" + +msgid "Saturday" +msgstr "Cumartesi" + +msgid "Sunday" +msgstr "Pazar" + +msgid "Mon" +msgstr "Pzt" + +msgid "Tue" +msgstr "Sal" + +msgid "Wed" +msgstr "Çrş" + +msgid "Thu" +msgstr "Prş" + +msgid "Fri" +msgstr "Cum" + +msgid "Sat" +msgstr "Cmt" + +msgid "Sun" +msgstr "Paz" + +msgid "January" +msgstr "Ocak" + +msgid "February" +msgstr "Şubat" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Nisan" + +msgid "May" +msgstr "Mayıs" + +msgid "June" +msgstr "Haziran" + +msgid "July" +msgstr "Temmuz" + +msgid "August" +msgstr "Ağustos" + +msgid "September" +msgstr "Eylül" + +msgid "October" +msgstr "Ekim" + +msgid "November" +msgstr "Kasım" + +msgid "December" +msgstr "Aralık" + +msgid "jan" +msgstr "oca" + +msgid "feb" +msgstr "şub" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "nis" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "haz" + +msgid "jul" +msgstr "tem" + +msgid "aug" +msgstr "ağu" + +msgid "sep" +msgstr "eyl" + +msgid "oct" +msgstr "eki" + +msgid "nov" +msgstr "kas" + +msgid "dec" +msgstr "ara" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Oca." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Şub." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Nisan" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayıs" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Haz." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Tem." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ağu." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Eyl." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Eki." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Kas." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Ara." + +msgctxt "alt. month" +msgid "January" +msgstr "Ocak" + +msgctxt "alt. month" +msgid "February" +msgstr "Şubat" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "Nisan" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayıs" + +msgctxt "alt. month" +msgid "June" +msgstr "Haziran" + +msgctxt "alt. month" +msgid "July" +msgstr "Temmuz" + +msgctxt "alt. month" +msgid "August" +msgstr "Ağustos" + +msgctxt "alt. month" +msgid "September" +msgstr "Eylül" + +msgctxt "alt. month" +msgid "October" +msgstr "Ekim" + +msgctxt "alt. month" +msgid "November" +msgstr "Kasım" + +msgctxt "alt. month" +msgid "December" +msgstr "Aralık" + +msgid "This is not a valid IPv6 address." +msgstr "Bu, geçerli bir IPv6 adresi değil." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ya da" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d yıl" +msgstr[1] "%(num)d yıl" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ay" +msgstr[1] "%(num)d ay" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d hafta" +msgstr[1] "%(num)d hafta" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d gün" +msgstr[1] "%(num)d gün" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d saat" +msgstr[1] "%(num)d saat" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d dakika" +msgstr[1] "%(num)d dakika" + +msgid "Forbidden" +msgstr "Yasak" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF doğrulaması başarısız oldu. İstek iptal edildi." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Bu iletiyi görüyorsunuz çünkü bu HTTPS sitesi, web tarayıcınız tarafından " +"gönderilen “Referer üstbilgisi”ni gerektirir, ancak hiçbir şey gönderilmedi. " +"Bu üstbilgi güvenlik nedenleri için gerekir, tarayıcınızın üçüncü taraf " +"uygulamalar tarafından ele geçirilmediğinden emin olun." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Eğer tarayıcınızı “Referer” üstbilgilerini etkisizleştirmek için " +"yapılandırdıysanız, lütfen bunları, en azından bu site ya da HTTPS " +"bağlantıları veya “aynı-kaynakta” olan istekler için yeniden etkinleştirin." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Eğer etiketi " +"kullanıyorsanız ya da “Referrer-Policy: no-referrer” üstbilgisini dahil " +"ediyorsanız, lütfen bunları kaldırın. CSRF koruması, katı göndereni denetimi " +"yapmak için “Referer” üstbilgisi gerektirir. Gizlilik konusunda endişeniz " +"varsa, üçüncü taraf sitelere bağlantılar için gibi " +"alternatifler kullanın." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Bu iletiyi görüyorsunuz çünkü bu site, formları gönderdiğinizde bir CSRF " +"tanımlama bilgisini gerektirir. Bu tanımlama bilgisi güvenlik nedenleri için " +"gerekir, tarayıcınızın üçüncü taraf uygulamalar tarafından ele " +"geçirilmediğinden emin olun." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Eğer tarayıcınızı tanımlama bilgilerini etkisizleştirmek için " +"yapılandırdıysanız, lütfen bunları, en azından bu site ya da “aynı-kaynakta” " +"olan istekler için yeniden etkinleştirin." + +msgid "More information is available with DEBUG=True." +msgstr "Daha fazla bilgi DEBUG=True ayarı ile mevcut olur." + +msgid "No year specified" +msgstr "Yıl bilgisi belirtilmedi" + +msgid "Date out of range" +msgstr "Tarih aralık dışında" + +msgid "No month specified" +msgstr "Ay bilgisi belirtilmedi" + +msgid "No day specified" +msgstr "Gün bilgisi belirtilmedi" + +msgid "No week specified" +msgstr "Hafta bilgisi belirtilmedi" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Mevcut %(verbose_name_plural)s yok" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Gelecek %(verbose_name_plural)s mevcut değil, çünkü %(class_name)s." +"allow_future değeri False olarak tanımlı." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "Geçersiz tarih dizgisi “%(datestr)s” verilen biçim “%(format)s”" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Sorguyla eşleşen hiç %(verbose_name)s bulunamadı" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Sayfa “sonuncu” değil, ya da bir tamsayıya dönüştürülemez." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Geçersiz sayfa (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Liste boş ve “%(class_name)s.allow_empty” değeri False." + +msgid "Directory indexes are not allowed here." +msgstr "Dizin indekslerine burada izin verilmiyor." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "“%(path)s” mevcut değil" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s indeksi" + +msgid "The install worked successfully! Congratulations!" +msgstr "Yükleme başarılı olarak çalıştı! Tebrikler!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s sürümü için yayım notlarını göster" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Bu sayfayı görüyorsunuz çünkü DEBUG=True parametresi ayarlar dosyanızın içindedir ve herhangi bir " +"URL yapılandırmadınız." + +msgid "Django Documentation" +msgstr "Django Belgeleri" + +msgid "Topics, references, & how-to’s" +msgstr "Konular, kaynaklar ve nasıl yapılırlar" + +msgid "Tutorial: A Polling App" +msgstr "Eğitim: Anket Uygulaması" + +msgid "Get started with Django" +msgstr "Django ile başlayın" + +msgid "Django Community" +msgstr "Django Topluluğu" + +msgid "Connect, get help, or contribute" +msgstr "Bağlanın, yardım alın, ya da katkıda bulunun" diff --git a/venv/Lib/site-packages/django/conf/locale/tr/__init__.py b/venv/Lib/site-packages/django/conf/locale/tr/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/tr/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tr/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea632f70679eb0e070e8c5c0895a3cf9da79fe1d GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lNs)ehd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04!)U=l}o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tr/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/tr/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b119572be955249a94dbbfab7e004b1477ab1bc GIT binary patch literal 674 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 000000000..84d06ef7d --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,1211 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "Гарәп теле" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Азәрбайҗан" + +msgid "Bulgarian" +msgstr "Болгар теле" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "Бенгалия теле" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Босния теле" + +msgid "Catalan" +msgstr "Каталан теле" + +msgid "Czech" +msgstr "Чех теле" + +msgid "Welsh" +msgstr "Уэльс теле" + +msgid "Danish" +msgstr "Дания теле" + +msgid "German" +msgstr "Алман теле" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек теле" + +msgid "English" +msgstr "Инглиз теле" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британ инглиз теле" + +msgid "Esperanto" +msgstr "Эсперанто теле" + +msgid "Spanish" +msgstr "Испан теле" + +msgid "Argentinian Spanish" +msgstr "Аргентина испан теле" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикалы испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуалы испан" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Эстон теле" + +msgid "Basque" +msgstr "Баск теле" + +msgid "Persian" +msgstr "Фарсы теле" + +msgid "Finnish" +msgstr "Финн теле" + +msgid "French" +msgstr "Француз теле" + +msgid "Frisian" +msgstr "Фриз теле" + +msgid "Irish" +msgstr "Ирланд теле" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галлий теле" + +msgid "Hebrew" +msgstr "Яһүд теле" + +msgid "Hindi" +msgstr "Хинд теле" + +msgid "Croatian" +msgstr "Хорват теле" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгр теле" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Индонезия теле" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исланд теле" + +msgid "Italian" +msgstr "Итальян теле" + +msgid "Japanese" +msgstr "Япон теле" + +msgid "Georgian" +msgstr "Грузин теле" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Казах теле" + +msgid "Khmer" +msgstr "Кхмер теле" + +msgid "Kannada" +msgstr "Каннада теле" + +msgid "Korean" +msgstr "Корея теле" + +msgid "Luxembourgish" +msgstr "Люксембург теле" + +msgid "Lithuanian" +msgstr "Литвалылар теле" + +msgid "Latvian" +msgstr "Латвия теле" + +msgid "Macedonian" +msgstr "Македон теле" + +msgid "Malayalam" +msgstr "Малаялам теле" + +msgid "Mongolian" +msgstr "Монгол теле" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "Голланд теле" + +msgid "Norwegian Nynorsk" +msgstr "Норвегиялеләр (Нюнорск) теле" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Паджаби теле" + +msgid "Polish" +msgstr "Поляк теле" + +msgid "Portuguese" +msgstr "Португал теле" + +msgid "Brazilian Portuguese" +msgstr "Бразилия португал теле" + +msgid "Romanian" +msgstr "Румын теле" + +msgid "Russian" +msgstr "Рус теле" + +msgid "Slovak" +msgstr "Словак теле" + +msgid "Slovenian" +msgstr "Словен теле" + +msgid "Albanian" +msgstr "Албан теле" + +msgid "Serbian" +msgstr "Серб теле" + +msgid "Serbian Latin" +msgstr "Серб теле (латин алфавиты)" + +msgid "Swedish" +msgstr "Швед теле" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Тамиль теле" + +msgid "Telugu" +msgstr "Телугу теле" + +msgid "Thai" +msgstr "Тай теле" + +msgid "Turkish" +msgstr "Төрек теле" + +msgid "Tatar" +msgstr "Татар теле" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Украин теле" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Вьетнам теле" + +msgid "Simplified Chinese" +msgstr "Гадиләштерелгән кытай теле" + +msgid "Traditional Chinese" +msgstr "Традицион кытай теле" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Дөрес кыйммәтне кертегез." + +msgid "Enter a valid URL." +msgstr "Рөхсәт ителгән URLны кертегез." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Дөрес эл. почта адресны кертегез." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Рөхсәт ителгән IPv4 адресын кертегез." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Өтерләр белән бүленгән сан билгеләрен кертегез" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Бу кыйммәтнең %(limit_value)s булуын тикшерегез (хәзер ул - %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Бу кыйммәтнең %(limit_value)s карата кечерәк яки тигез булуын тикшерегез." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Бу кыйммәтнең %(limit_value)s карата зуррак яки тигез булуын тикшерегез." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +msgid "Enter a number." +msgstr "Сан кертегез." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "һәм" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Бу кырның кыйммәте NULL булырга тиеш түгел." + +msgid "This field cannot be blank." +msgstr "Бу кыр буш булырга тиеш түгел." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Мондый %(field_label)s белән булган %(model_name)s инде бар." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s типтагы кыр" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Логик (True яисә False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Юл (күп дигәндә %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Өтерләр белән бүленгән бөтен саннар" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (вакыт күрсәтмәсе булмаган)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата (вакыт күрсәтмәсе белән)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Унарлы вакланма" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Эл. почта" + +msgid "File path" +msgstr "Файл юлы" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Күчерелүчән өтер белән булган сан" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Бөтен сан" + +msgid "Big (8 byte) integer" +msgstr "Зур бөтен (8 байт)" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP-адрес" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Логик (True, False я None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Вакыт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Тыш ачкыч (тип бәйле кыр буенча билгеләнгән)" + +msgid "One-to-one relationship" +msgstr "\"Бергә бер\" элемтәсе" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "\"Күпкә куп\" элемтәсе" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Мәҗбүри кыр." + +msgid "Enter a whole number." +msgstr "Бөтен сан кертегез." + +msgid "Enter a valid date." +msgstr "Рөхсәт ителгән датаны кертегез." + +msgid "Enter a valid time." +msgstr "Рөхсәт ителгән вакытны кертегез." + +msgid "Enter a valid date/time." +msgstr "Рөхсәт ителгән дата һәм вакытны кертегез." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Һишбер файл җибәрелмәгән. Форма кодлавын тикшерегез." + +msgid "No file was submitted." +msgstr "Һишбер файл җибәрелмәгән." + +msgid "The submitted file is empty." +msgstr "Җибәрелгән файл буш." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Зинһар, җибәрегез файлны яисә бушайту байракчасын билгеләгез, икесен бергә " +"түгел." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Рөхсәт ителгән рәсемне йөкләгез. Сез йөкләгән файл рәсем түгел яисә бозылган." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Дөрес тәкъдимне сайлагыз. Рөхсәт ителгән кыйммәтләр арасында %(value)s юк. " + +msgid "Enter a list of values." +msgstr "Кыйммәтләр исемлеген кертегез." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "Тәртип" + +msgid "Delete" +msgstr "Бетерергә" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Зинһар, %(field)s кырындагы кабатлана торган кыйммәтне төзәтегез." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Зинһар, %(field)s кырындагы кыйммәтне төзәтегез, ул уникаль булырга тиеш." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Зинһар, %(field_name)s кырындагы кыйммәтне төзәтегез, ул %(date_field)s " +"кырындагы %(lookup)s өчен уникаль булырга тиеш." + +msgid "Please correct the duplicate values below." +msgstr "Зинһар, астагы кабатлана торган кыйммәтләрне төзәтегез." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Дөрес тәкъдимне сайлагыз. Рөхсәт ителгән кыйммәтләр арасында сезнең вариант " +"юк." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Бушайтырга" + +msgid "Currently" +msgstr "Хәзерге вакытта" + +msgid "Change" +msgstr "Үзгәртергә" + +msgid "Unknown" +msgstr "Билгесез" + +msgid "Yes" +msgstr "Әйе" + +msgid "No" +msgstr "Юк" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "әйе,юк,бәлки" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "т.с." + +msgid "a.m." +msgstr "т.к." + +msgid "PM" +msgstr "ТС" + +msgid "AM" +msgstr "ТК" + +msgid "midnight" +msgstr "төн уртасы" + +msgid "noon" +msgstr "көн уртасы" + +msgid "Monday" +msgstr "Дүшәмбе" + +msgid "Tuesday" +msgstr "Сишәмбе" + +msgid "Wednesday" +msgstr "Чәршәмбе" + +msgid "Thursday" +msgstr "Пәнҗешәмбе" + +msgid "Friday" +msgstr "Җомга" + +msgid "Saturday" +msgstr "Шимбә" + +msgid "Sunday" +msgstr "Якшәмбе" + +msgid "Mon" +msgstr "Дүш" + +msgid "Tue" +msgstr "Сиш" + +msgid "Wed" +msgstr "Чәр" + +msgid "Thu" +msgstr "Пнҗ" + +msgid "Fri" +msgstr "Җом" + +msgid "Sat" +msgstr "Шим" + +msgid "Sun" +msgstr "Якш" + +msgid "January" +msgstr "Гыйнвар" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "гый" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Гый." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "гыйнвар" + +msgctxt "alt. month" +msgid "February" +msgstr "февраль" + +msgctxt "alt. month" +msgid "March" +msgstr "март" + +msgctxt "alt. month" +msgid "April" +msgstr "апрель" + +msgctxt "alt. month" +msgid "May" +msgstr "май" + +msgctxt "alt. month" +msgid "June" +msgstr "июнь" + +msgctxt "alt. month" +msgid "July" +msgstr "июль" + +msgctxt "alt. month" +msgid "August" +msgstr "август" + +msgctxt "alt. month" +msgid "September" +msgstr "сентябрь" + +msgctxt "alt. month" +msgid "October" +msgstr "октябрь" + +msgctxt "alt. month" +msgid "November" +msgstr "ноябрь" + +msgctxt "alt. month" +msgid "December" +msgstr "декабрь" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "я" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Ел билгеләнмәгән" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Ай билгеләнмәгән" + +msgid "No day specified" +msgstr "Көн билгеләнмәгән" + +msgid "No week specified" +msgstr "Атна билгеләнмәгән" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Файдалана алырлык %(verbose_name_plural)s юк" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future False булуы сәбәпле, киләсе " +"%(verbose_name_plural)s файдалана алырлык түгел" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Таләпкә туры килгән %(verbose_name)s табылмаган" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c7ab6d1221496d3fd113e75a52f617b7f3498d3 GIT binary patch literal 12822 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po new file mode 100644 index 000000000..68c2bc7e5 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po @@ -0,0 +1,1197 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Udmurt (http://www.transifex.com/django/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Африкаанс" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Азербайджан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "Беларус" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "Бретон" + +msgid "Bosnian" +msgstr "Босниец" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Уэльс" + +msgid "Danish" +msgstr "Датчан" + +msgid "German" +msgstr "Немец" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Англи" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британиысь англи" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испан" + +msgid "Argentinian Spanish" +msgstr "Аргентинаысь испан" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикаысь испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуаысь испан" + +msgid "Venezuelan Spanish" +msgstr "Венесуэлаысь испан" + +msgid "Estonian" +msgstr "Эстон" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Перс" + +msgid "Finnish" +msgstr "Финн" + +msgid "French" +msgstr "Француз" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирланд" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галисий" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорват" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгер" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонези" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исланд" + +msgid "Italian" +msgstr "Итальян" + +msgid "Japanese" +msgstr "Япон" + +msgid "Georgian" +msgstr "Грузин" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Казах" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Korean" +msgstr "Корей" + +msgid "Luxembourgish" +msgstr "Люксембург" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латвий" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Непал" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвег (нюнорск)" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Панджаби" + +msgid "Polish" +msgstr "Поляк" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилиысь португал" + +msgid "Romanian" +msgstr "Румын" + +msgid "Russian" +msgstr "Ӟуч" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словен" + +msgid "Albanian" +msgstr "Албан" + +msgid "Serbian" +msgstr "Серб" + +msgid "Serbian Latin" +msgstr "Серб (латиницаен)" + +msgid "Swedish" +msgstr "Швед" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамиль" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тай" + +msgid "Turkish" +msgstr "Турок" + +msgid "Tatar" +msgstr "Бигер" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Украин" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Китай (капчиятэм)" + +msgid "Traditional Chinese" +msgstr "Китай (традици)" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Тазэ шонер гожтэ." + +msgid "Enter a valid URL." +msgstr "Шонер URL гожтэ." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Электорн почта адресэз шонер гожтэ" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Шонер IPv4-адрес гожтэ." + +msgid "Enter a valid IPv6 address." +msgstr "Шонер IPv6-адрес гожтэ." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Шонер IPv4 яке IPv6 адрес гожтэ." + +msgid "Enter only digits separated by commas." +msgstr "Запятойёсын висъям лыдпусъёсты гожтэ" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Эскере, та %(limit_value)s шуыса. Али татын %(show_value)s." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Талы %(limit_value)s-лэсь бадӟымгес луыны уг яра." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Талы %(limit_value)s-лэсь ӧжытгес луыны уг яра." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +msgid "Enter a number." +msgstr "Лыд гожтэ." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "но" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Та NULL луыны уг яра." + +msgid "This field cannot be blank." +msgstr "Та буш луыны уг яра." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Таӵе %(field_label)s-ен %(model_name)s вань ини." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s типъем бусы" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "True яке False" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Чур (%(max_length)s пусозь кузьда)" + +msgid "Comma-separated integers" +msgstr "Запятоен висъям быдэс лыдъёс" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (час-минут пусйытэк)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата но час-минут" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Десятичной лыд." + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Электрон почта адрес" + +msgid "File path" +msgstr "Файллэн нимыз" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Вещественной лыд" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "целой" + +msgid "Big (8 byte) integer" +msgstr "Бадӟым (8 байтъем) целой лыд" + +msgid "IPv4 address" +msgstr "IPv4 адрес" + +msgid "IP address" +msgstr "IP адрес" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "True, False яке None" + +msgid "Positive integer" +msgstr "Целой, нольлэсь бадӟым лыд" + +msgid "Positive small integer" +msgstr "Нольлэсь бадӟым пичи целой лыд" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Компьютерной ним (%(max_length)s пусозь кузьда)" + +msgid "Small integer" +msgstr "Пичи целой лыд" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Час-минут" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Суред" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Мукет моделен герӟет (тип герӟано бусыя валамын)." + +msgid "One-to-one relationship" +msgstr "Одӥг-одӥг герӟет" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Трос-трос герӟет" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Та клуэ." + +msgid "Enter a whole number." +msgstr "Целой лыд гожтэ." + +msgid "Enter a valid date." +msgstr "Шонер дата гожтэ." + +msgid "Enter a valid time." +msgstr "Шонер час-минут гожтэ." + +msgid "Enter a valid date/time." +msgstr "Шонер дата но час-минут гожтэ." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Одӥг файл но лэзьымтэ. Формалэсь код." + +msgid "No file was submitted." +msgstr "Файл лэземын ӧвӧл." + +msgid "The submitted file is empty." +msgstr "Лэзем файл буш." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Файл лэзе яке файл ӵушоно шуыса пусъе, огдыръя соиз но, таиз но уг яра." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Суред лэзе. Тӥляд файлды лэзьымтэ яке со суред ӧвӧл." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Шонер вариант быръе. %(value)s вариантъёс пӧлын ӧвӧл." + +msgid "Enter a list of values." +msgstr "Список лэзе." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "Рад" + +msgid "Delete" +msgstr "Ӵушоно" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Буш кароно" + +msgid "Currently" +msgstr "Али" + +msgid "Change" +msgstr "Тупатъяно" + +msgid "Unknown" +msgstr "Тодымтэ" + +msgid "Yes" +msgstr "Бен" + +msgid "No" +msgstr "Ӧвӧл" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "бен,ӧвӧл,уг тодӥськы" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s МБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "лымшор бере" + +msgid "a.m." +msgstr "лымшор азе" + +msgid "PM" +msgstr "лымшор бере" + +msgid "AM" +msgstr "лымшор азе" + +msgid "midnight" +msgstr "уйшор" + +msgid "noon" +msgstr "лымшор" + +msgid "Monday" +msgstr "Вордӥськон" + +msgid "Tuesday" +msgstr "Пуксён" + +msgid "Wednesday" +msgstr "Вирнунал" + +msgid "Thursday" +msgstr "Покчиарня" + +msgid "Friday" +msgstr "Удмуртарня" + +msgid "Saturday" +msgstr "Кӧснунал" + +msgid "Sunday" +msgstr "Арнянунал" + +msgid "Mon" +msgstr "врд" + +msgid "Tue" +msgstr "пкс" + +msgid "Wed" +msgstr "врн" + +msgid "Thu" +msgstr "пкч" + +msgid "Fri" +msgstr "удм" + +msgid "Sat" +msgstr "ксн" + +msgid "Sun" +msgstr "арн" + +msgid "January" +msgstr "толшор" + +msgid "February" +msgstr "тулыспал" + +msgid "March" +msgstr "южтолэзь" + +msgid "April" +msgstr "оштолэзь" + +msgid "May" +msgstr "куартолэзь" + +msgid "June" +msgstr "инвожо" + +msgid "July" +msgstr "пӧсьтолэзь" + +msgid "August" +msgstr "гудырикошкон" + +msgid "September" +msgstr "куарусён" + +msgid "October" +msgstr "коньывуон" + +msgid "November" +msgstr "шуркынмон" + +msgid "December" +msgstr "толсур" + +msgid "jan" +msgstr "тшт" + +msgid "feb" +msgstr "тпт" + +msgid "mar" +msgstr "южт" + +msgid "apr" +msgstr "ошт" + +msgid "may" +msgstr "крт" + +msgid "jun" +msgstr "ивт" + +msgid "jul" +msgstr "пст" + +msgid "aug" +msgstr "гкт" + +msgid "sep" +msgstr "кут" + +msgid "oct" +msgstr "квт" + +msgid "nov" +msgstr "шкт" + +msgid "dec" +msgstr "тст" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "тшт" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "тпт" + +msgctxt "abbrev. month" +msgid "March" +msgstr "южт" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ошт" + +msgctxt "abbrev. month" +msgid "May" +msgstr "крт" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ивт" + +msgctxt "abbrev. month" +msgid "July" +msgstr "пст" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "гкт" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "кут" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "квт" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "шкт" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "тст" + +msgctxt "alt. month" +msgid "January" +msgstr "толшоре" + +msgctxt "alt. month" +msgid "February" +msgstr "тулыспалэ" + +msgctxt "alt. month" +msgid "March" +msgstr "южтолэзе" + +msgctxt "alt. month" +msgid "April" +msgstr "оштолэзе" + +msgctxt "alt. month" +msgid "May" +msgstr "куартолэзе" + +msgctxt "alt. month" +msgid "June" +msgstr "инвожое" + +msgctxt "alt. month" +msgid "July" +msgstr "пӧсьтолэзе" + +msgctxt "alt. month" +msgid "August" +msgstr "гудырикошконэ" + +msgctxt "alt. month" +msgid "September" +msgstr "куарусёнэ" + +msgctxt "alt. month" +msgid "October" +msgstr "коньывуонэ" + +msgctxt "alt. month" +msgid "November" +msgstr "шуркынмонэ" + +msgctxt "alt. month" +msgid "December" +msgstr "толсуре" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "яке" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Папкаослэсь пуштроссэс татын учкыны уг яра." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s папкалэн пушторсэз" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f87a71131373e0acb9a83a449308abb1eaefcb8 GIT binary patch literal 26995 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 Wc>@bS4jbt9Dp_*#(-!mFu>S`EC=A~K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..5a7d4a55e --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1339 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Boryslav Larin , 2011 +# Denis Podlesniy , 2016 +# Igor Melnyk, 2014-2015,2017 +# Illia Volochii , 2019,2021 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2014 +# Max V. Stotsky , 2014 +# Mikhail Kolesnik , 2015 +# Mykola Zamkovoi , 2014 +# Alex Bolotov , 2013-2014 +# Roman Kozlovskyi , 2012 +# Sergiy Kuzmenko , 2011 +# tarasyyyk , 2018 +# tarasyyyk , 2019 +# Zoriana Zaiats, 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-02 22:16+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Afrikaans" +msgstr "Африканська" + +msgid "Arabic" +msgstr "Арабська" + +msgid "Algerian Arabic" +msgstr "Алжирська арабська" + +msgid "Asturian" +msgstr "Астурійська" + +msgid "Azerbaijani" +msgstr "Азербайджанська" + +msgid "Bulgarian" +msgstr "Болгарська" + +msgid "Belarusian" +msgstr "Білоруська" + +msgid "Bengali" +msgstr "Бенгальська" + +msgid "Breton" +msgstr "Бретонська" + +msgid "Bosnian" +msgstr "Боснійська" + +msgid "Catalan" +msgstr "Каталонська" + +msgid "Czech" +msgstr "Чеська" + +msgid "Welsh" +msgstr "Валлійська" + +msgid "Danish" +msgstr "Датська" + +msgid "German" +msgstr "Німецька" + +msgid "Lower Sorbian" +msgstr "Нижньолужицька" + +msgid "Greek" +msgstr "Грецька" + +msgid "English" +msgstr "Англійська" + +msgid "Australian English" +msgstr "Австралійська англійська" + +msgid "British English" +msgstr "Англійська (Великобританія)" + +msgid "Esperanto" +msgstr "Есперанто" + +msgid "Spanish" +msgstr "Іспанська" + +msgid "Argentinian Spanish" +msgstr "Іспанська (Аргентина)" + +msgid "Colombian Spanish" +msgstr "Колумбійська іспанська" + +msgid "Mexican Spanish" +msgstr "Мексиканська іспанська" + +msgid "Nicaraguan Spanish" +msgstr "Нікарагуанська іспанська" + +msgid "Venezuelan Spanish" +msgstr "Венесуельська іспанська" + +msgid "Estonian" +msgstr "Естонська" + +msgid "Basque" +msgstr "Баскська" + +msgid "Persian" +msgstr "Перська" + +msgid "Finnish" +msgstr "Фінська" + +msgid "French" +msgstr "Французька" + +msgid "Frisian" +msgstr "Фризька" + +msgid "Irish" +msgstr "Ірландська" + +msgid "Scottish Gaelic" +msgstr "Шотландська ґельська" + +msgid "Galician" +msgstr "Галіційська" + +msgid "Hebrew" +msgstr "Іврит" + +msgid "Hindi" +msgstr "Хінді" + +msgid "Croatian" +msgstr "Хорватська" + +msgid "Upper Sorbian" +msgstr "Верхньолужицька" + +msgid "Hungarian" +msgstr "Угорська" + +msgid "Armenian" +msgstr "Вірменська" + +msgid "Interlingua" +msgstr "Інтерлінгва" + +msgid "Indonesian" +msgstr "Індонезійська" + +msgid "Igbo" +msgstr "Ігбо" + +msgid "Ido" +msgstr "Ідо" + +msgid "Icelandic" +msgstr "Ісландська" + +msgid "Italian" +msgstr "Італійська" + +msgid "Japanese" +msgstr "Японська" + +msgid "Georgian" +msgstr "Грузинська" + +msgid "Kabyle" +msgstr "Кабіли" + +msgid "Kazakh" +msgstr "Казахська" + +msgid "Khmer" +msgstr "Кхмерська" + +msgid "Kannada" +msgstr "Каннадська" + +msgid "Korean" +msgstr "Корейська" + +msgid "Kyrgyz" +msgstr "Киргизька" + +msgid "Luxembourgish" +msgstr "Люксембурзька" + +msgid "Lithuanian" +msgstr "Литовська" + +msgid "Latvian" +msgstr "Латвійська" + +msgid "Macedonian" +msgstr "Македонська" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монгольська" + +msgid "Marathi" +msgstr "Маратхі" + +msgid "Malay" +msgstr "Малайська" + +msgid "Burmese" +msgstr "Бірманська" + +msgid "Norwegian Bokmål" +msgstr "Норвезька (Букмол)" + +msgid "Nepali" +msgstr "Непальська" + +msgid "Dutch" +msgstr "Голландська" + +msgid "Norwegian Nynorsk" +msgstr "Норвезька (Нюнорськ)" + +msgid "Ossetic" +msgstr "Осетинська" + +msgid "Punjabi" +msgstr "Панджабі" + +msgid "Polish" +msgstr "Польська" + +msgid "Portuguese" +msgstr "Португальська" + +msgid "Brazilian Portuguese" +msgstr "Бразильська португальська" + +msgid "Romanian" +msgstr "Румунська" + +msgid "Russian" +msgstr "Російська" + +msgid "Slovak" +msgstr "Словацька" + +msgid "Slovenian" +msgstr "Словенська" + +msgid "Albanian" +msgstr "Албанська" + +msgid "Serbian" +msgstr "Сербська" + +msgid "Serbian Latin" +msgstr "Сербська (латинська)" + +msgid "Swedish" +msgstr "Шведська" + +msgid "Swahili" +msgstr "Суахілі" + +msgid "Tamil" +msgstr "Тамільська" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Tajik" +msgstr "Таджицька" + +msgid "Thai" +msgstr "Тайська" + +msgid "Turkmen" +msgstr "Туркменська" + +msgid "Turkish" +msgstr "Турецька" + +msgid "Tatar" +msgstr "Татарська" + +msgid "Udmurt" +msgstr "Удмуртська" + +msgid "Ukrainian" +msgstr "Українська" + +msgid "Urdu" +msgstr "Урду" + +msgid "Uzbek" +msgstr "Узбецька" + +msgid "Vietnamese" +msgstr "В'єтнамська" + +msgid "Simplified Chinese" +msgstr "Китайська спрощена" + +msgid "Traditional Chinese" +msgstr "Китайська традиційна" + +msgid "Messages" +msgstr "Повідомлення" + +msgid "Site Maps" +msgstr "Мапи сайту" + +msgid "Static Files" +msgstr "Статичні файли" + +msgid "Syndication" +msgstr "Об'єднання" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "Номер сторінки не є цілим числом" + +msgid "That page number is less than 1" +msgstr "Номер сторінки менше 1" + +msgid "That page contains no results" +msgstr "Сторінка не містить результатів" + +msgid "Enter a valid value." +msgstr "Введіть коректне значення." + +msgid "Enter a valid URL." +msgstr "Введіть коректний URL." + +msgid "Enter a valid integer." +msgstr "Введіть коректне ціле число." + +msgid "Enter a valid email address." +msgstr "Введіть коректну email адресу." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Введіть коректну IPv4 адресу." + +msgid "Enter a valid IPv6 address." +msgstr "Введіть дійсну IPv6 адресу." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Введіть дійсну IPv4 чи IPv6 адресу." + +msgid "Enter only digits separated by commas." +msgstr "Введіть тільки цифри, що розділені комами." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Переконайтеся, що це значення дорівнює %(limit_value)s (зараз " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Переконайтеся, що це значення менше чи дорівнює %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Переконайтеся, що це значення більше чи дорівнює %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Переконайтеся, що це значення містить не менш ніж %(limit_value)d символ " +"(зараз %(show_value)d)." +msgstr[1] "" +"Переконайтеся, що це значення містить не менш ніж %(limit_value)d символів " +"(зараз %(show_value)d)." +msgstr[2] "" +"Переконайтеся, що це значення містить не менш ніж %(limit_value)d символів " +"(зараз %(show_value)d)." +msgstr[3] "" +"Переконайтеся, що це значення містить не менш ніж %(limit_value)d символів " +"(зараз %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Переконайтеся, що це значення містить не більше ніж %(limit_value)d символ " +"(зараз %(show_value)d)." +msgstr[1] "" +"Переконайтеся, що це значення містить не більше ніж %(limit_value)d символи " +"(зараз %(show_value)d)." +msgstr[2] "" +"Переконайтеся, що це значення містить не більше ніж %(limit_value)d символів " +"(зараз %(show_value)d)." +msgstr[3] "" +"Переконайтеся, що це значення містить не більше ніж %(limit_value)d символів " +"(зараз %(show_value)d)." + +msgid "Enter a number." +msgstr "Введіть число." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Переконайтеся, що загалом тут не більше ніж %(max)s цифра." +msgstr[1] "Переконайтеся, що загалом тут не більше ніж %(max)s цифер." +msgstr[2] "Переконайтеся, що загалом тут не більше ніж %(max)s цифер." +msgstr[3] "Переконайтеся, що загалом тут не більше ніж %(max)s цифер." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Переконайтеся, що тут не більше ніж %(max)s цифра після десяткової коми." +msgstr[1] "" +"Переконайтеся, що тут не більше ніж %(max)s цифри після десяткової коми." +msgstr[2] "" +"Переконайтеся, що тут не більше ніж %(max)s цифер після десяткової коми." +msgstr[3] "" +"Переконайтеся, що тут не більше ніж %(max)s цифер після десяткової коми." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Переконайтеся, що тут не більше ніж %(max)s цифра до десяткової коми." +msgstr[1] "" +"Переконайтеся, що тут не більше ніж %(max)s цифри до десяткової коми." +msgstr[2] "" +"Переконайтеся, що тут не більше ніж %(max)s цифер до десяткової коми." +msgstr[3] "" +"Переконайтеся, що тут не більше ніж %(max)s цифер до десяткової коми." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "Символи Null не дозволені." + +msgid "and" +msgstr "та" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s з таким %(field_labels)s вже існує." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Значення %(value)r не є дозволеним вибором." + +msgid "This field cannot be null." +msgstr "Це поле не може бути пустим." + +msgid "This field cannot be blank." +msgstr "Це поле не може бути порожнім." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s з таким %(field_label)s вже існує." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s повинне бути унікальним для %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Тип поля: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Булеве значення (True або False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Рядок (до %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Цілі, розділені комою" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (без часу)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата (з часом)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Десяткове число" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Тривалість" + +msgid "Email address" +msgstr "E-mail адреса" + +msgid "File path" +msgstr "Шлях до файла" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Число з плаваючою комою" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Ціле число" + +msgid "Big (8 byte) integer" +msgstr "Велике (8 байтів) ціле число" + +msgid "Small integer" +msgstr "Мале ціле число" + +msgid "IPv4 address" +msgstr "IPv4 адреса" + +msgid "IP address" +msgstr "IP адреса" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Булеве значення (включаючи True, False або None)" + +msgid "Positive big integer" +msgstr "Додатнє велике ціле число" + +msgid "Positive integer" +msgstr "Додатнє ціле число" + +msgid "Positive small integer" +msgstr "Додатнє мале ціле число" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (до %(max_length)s)" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Час" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Необроблені двійкові дані" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "Універсальний унікальний ідентифікатор" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Зображення" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Екземпляр %(model)s з %(field)s %(value)r не існує." + +msgid "Foreign Key (type determined by related field)" +msgstr "Зовнішній ключ (тип визначається відповідно поля)" + +msgid "One-to-one relationship" +msgstr "Один-до-одного" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s звязок" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s звязки" + +msgid "Many-to-many relationship" +msgstr "Багато-до-багатьох" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Це поле обов'язкове." + +msgid "Enter a whole number." +msgstr "Введіть ціле число." + +msgid "Enter a valid date." +msgstr "Введіть коректну дату." + +msgid "Enter a valid time." +msgstr "Введіть коректний час." + +msgid "Enter a valid date/time." +msgstr "Введіть коректну дату/час." + +msgid "Enter a valid duration." +msgstr "Введіть коректну тривалість." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Кількість днів повинна бути від {min_days} до {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл не надіслано. Перевірте тип кодування форми." + +msgid "No file was submitted." +msgstr "Файл не було надіслано." + +msgid "The submitted file is empty." +msgstr "Переданий файл порожній." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Переконайтеся, що це ім'я файлу містить не більше ніж з %(max)d символ " +"(зараз %(length)d)." +msgstr[1] "" +"Переконайтеся, що це ім'я файлу містить не більше ніж з %(max)d символи " +"(зараз %(length)d)." +msgstr[2] "" +"Переконайтеся, що це ім'я файлу містить не більше ніж з %(max)d символів " +"(зараз %(length)d)." +msgstr[3] "" +"Переконайтеся, що це ім'я файлу містить не більше ніж з %(max)d символів " +"(зараз %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Будь ласка, або завантажте файл, або відмітьте прапорець очищення, а не " +"обидва варіанти одразу" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Завантажте правильний малюнок. Файл, який ви завантажили, не є малюнком, або " +"є зіпсованим малюнком." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Зробить коректний вибір, %(value)s немає серед варіантів вибору." + +msgid "Enter a list of values." +msgstr "Введіть список значень." + +msgid "Enter a complete value." +msgstr "Введіть значення повністю." + +msgid "Enter a valid UUID." +msgstr "Введіть коректне значення UUID," + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Приховане поле %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Order" +msgstr "Послідовність" + +msgid "Delete" +msgstr "Видалити" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Будь ласка, виправте повторювані дані для поля %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Будь ласка, виправте повторювані дані для поля %(field)s, яке має бути " +"унікальним." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Будь ласка, виправте повторювані дані для поля %(field_name)s, яке має бути " +"унікальним для вибірки %(lookup)s на %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Будь ласка, виправте повторювані значення нижче." + +msgid "The inline value did not match the parent instance." +msgstr "Зв'язане значення не відповідає батьківському екземпляру." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Зробить коректний вибір. Такого варіанту нема серед доступних." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Очистити" + +msgid "Currently" +msgstr "Наразі" + +msgid "Change" +msgstr "Змінити" + +msgid "Unknown" +msgstr "Невідомо" + +msgid "Yes" +msgstr "Так" + +msgid "No" +msgstr "Ні" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "так,ні,можливо" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байти" +msgstr[2] "%(size)d байтів" +msgstr[3] "%(size)d байтів" + +#, python-format +msgid "%s KB" +msgstr "%s Кб" + +#, python-format +msgid "%s MB" +msgstr "%s Мб" + +#, python-format +msgid "%s GB" +msgstr "%s Гб" + +#, python-format +msgid "%s TB" +msgstr "%s Тб" + +#, python-format +msgid "%s PB" +msgstr "%s Пб" + +msgid "p.m." +msgstr "після полудня" + +msgid "a.m." +msgstr "до полудня" + +msgid "PM" +msgstr "після полудня" + +msgid "AM" +msgstr "до полудня" + +msgid "midnight" +msgstr "північ" + +msgid "noon" +msgstr "полудень" + +msgid "Monday" +msgstr "Понеділок" + +msgid "Tuesday" +msgstr "Вівторок" + +msgid "Wednesday" +msgstr "Середа" + +msgid "Thursday" +msgstr "Четвер" + +msgid "Friday" +msgstr "П'ятниця" + +msgid "Saturday" +msgstr "Субота" + +msgid "Sunday" +msgstr "Неділя" + +msgid "Mon" +msgstr "Пн" + +msgid "Tue" +msgstr "Вт" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Чт" + +msgid "Fri" +msgstr "Пт" + +msgid "Sat" +msgstr "Сб" + +msgid "Sun" +msgstr "Нд" + +msgid "January" +msgstr "Січень" + +msgid "February" +msgstr "Лютий" + +msgid "March" +msgstr "Березень" + +msgid "April" +msgstr "Квітень" + +msgid "May" +msgstr "Травень" + +msgid "June" +msgstr "Червень" + +msgid "July" +msgstr "Липень" + +msgid "August" +msgstr "Серпень" + +msgid "September" +msgstr "Вересень" + +msgid "October" +msgstr "Жовтень" + +msgid "November" +msgstr "Листопад" + +msgid "December" +msgstr "Грудень" + +msgid "jan" +msgstr "січ" + +msgid "feb" +msgstr "лют" + +msgid "mar" +msgstr "бер" + +msgid "apr" +msgstr "кві" + +msgid "may" +msgstr "тра" + +msgid "jun" +msgstr "чер" + +msgid "jul" +msgstr "лип" + +msgid "aug" +msgstr "сер" + +msgid "sep" +msgstr "вер" + +msgid "oct" +msgstr "жов" + +msgid "nov" +msgstr "лис" + +msgid "dec" +msgstr "гру" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Січ." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Лют." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Березень" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Квітень" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Травень" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Червень" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Липень" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Сер." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Вер." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Жов." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Лис." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Гру." + +msgctxt "alt. month" +msgid "January" +msgstr "січня" + +msgctxt "alt. month" +msgid "February" +msgstr "лютого" + +msgctxt "alt. month" +msgid "March" +msgstr "березня" + +msgctxt "alt. month" +msgid "April" +msgstr "квітня" + +msgctxt "alt. month" +msgid "May" +msgstr "травня" + +msgctxt "alt. month" +msgid "June" +msgstr "червня" + +msgctxt "alt. month" +msgid "July" +msgstr "липня" + +msgctxt "alt. month" +msgid "August" +msgstr "серпня" + +msgctxt "alt. month" +msgid "September" +msgstr "вересня" + +msgctxt "alt. month" +msgid "October" +msgstr "жовтня" + +msgctxt "alt. month" +msgid "November" +msgstr "листопада" + +msgctxt "alt. month" +msgid "December" +msgstr "грудня" + +msgid "This is not a valid IPv6 address." +msgstr "Це не є правильною адресою IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "або" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Forbidden" +msgstr "Заборонено" + +msgid "CSRF verification failed. Request aborted." +msgstr "Помилка перевірки CSRF. Запит відхилений." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ви бачите це повідомлення, тому що даний сайт вимагає, щоб при відправці " +"форм була відправлена ​​і CSRF-cookie. Даний тип cookie необхідний з міркувань " +"безпеки, щоб переконатися, що ваш браузер не був взламаний третьою стороною." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Більше інформації можна отримати з DEBUG=True." + +msgid "No year specified" +msgstr "Рік не вказано" + +msgid "Date out of range" +msgstr "Дата поза діапазоном" + +msgid "No month specified" +msgstr "Місяць не вказано" + +msgid "No day specified" +msgstr "День не вказано" + +msgid "No week specified" +msgstr "Тиждень не вказано" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s недоступні" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Майбутні %(verbose_name_plural)s недоступні, тому що %(class_name)s." +"allow_future має нульове значення." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Жодні %(verbose_name)s не були знайдені по запиту" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Невірна сторінка (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Перегляд вмісту каталогу не дозволено." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" не існує" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Вміст директорії %(directory)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Вітаємо, команда install завершилась успішно!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Нотатки релізу for Django %(version)s" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Ви бачите цю сторінку тому що змінна DEBUG встановлена на True у вашому файлі конфігурації і ви не " +"налаштували жодного URL." + +msgid "Django Documentation" +msgstr "Документація Django" + +msgid "Topics, references, & how-to’s" +msgstr "Статті, довідки та інструкції" + +msgid "Tutorial: A Polling App" +msgstr "Посібник: програма голосування" + +msgid "Get started with Django" +msgstr "Початок роботи з Django" + +msgid "Django Community" +msgstr "Спільнота Django" + +msgid "Connect, get help, or contribute" +msgstr "Отримати допомогу, чи допомогти" diff --git a/venv/Lib/site-packages/django/conf/locale/uk/__init__.py b/venv/Lib/site-packages/django/conf/locale/uk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/uk/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/uk/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8279f4aa8ce6f999d3608dcb37b11a0b69c8ed3 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lX|{fRd}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04tp|;s5{u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/uk/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/uk/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..915cbb4c1b0c6f15043d95fb03b7614656b094c8 GIT binary patch literal 803 zcmZXS%Wj)M6o$Dv*u-`mwOzAeVX47;tEx(3FsK16E~*%zBJ9Byi7}A}B9&DiCCaX^ z(KqO_mAdLGQn%e?QFS13irYb)bN=tle?X(jy4?_U!>sx z2|z#+kdOitqyY^Xz(5wTumxK1031LLwpSG3Rs`(alAw(k3A?$%J>^sEp zsAyN?1V!+LFCV3n*2YQEZ6X1al2!%3q@kdeER<5oFWYshdUqt=U2-Cn#8eXfsuILg zLG*_-uC=jfj76v9ca;m4^jVIBsI!!R}71<6A%XGD!;pjn4WPe8nj%L|z*qr+O zFWMWY>b6tu^g~Mx-zmyla9rDTbLP2^^Bizod-mCjr(fIWgNbsc8}fPRC^OlXUCYLH z&GH=CoHSV9^o&!*4yU%|&2)46iP*CEIO=d8pN#_##ak5E1wv6U$reQ#Z*mk&lUyt2 zftqYlelpu;7x5wwuH(&haGuNql;rWrRkXN_Rxt|TMYLIEqeZq^j@H>CTF0Z}accngRhq$K9lx&b4-#--7=~;<6iboJZ;s(uhGR&M`~%#2&E)_9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/uk/formats.py b/venv/Lib/site-packages/django/conf/locale/uk/formats.py new file mode 100644 index 000000000..0f28831af --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/uk/formats.py @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "d E Y р." +TIME_FORMAT = "H:i" +DATETIME_FORMAT = "d E Y р. H:i" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "d F" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d %B %Y", # '25 October 2006' +] +TIME_INPUT_FORMATS = [ + "%H:%M:%S", # '14:30:59' + "%H:%M:%S.%f", # '14:30:59.000200' + "%H:%M", # '14:30' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d %B %Y %H:%M:%S", # '25 October 2006 14:30:59' + "%d %B %Y %H:%M:%S.%f", # '25 October 2006 14:30:59.000200' + "%d %B %Y %H:%M", # '25 October 2006 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..706c2ce7a14dfb9c05ba8d97206e4742419620ab GIT binary patch literal 12291 zcmcJT3v?XSdB-n~fnpwMc(ma?JWN;M^#e$;Wk|4%1%3z%TZWPc?npbSbko5Gyu5_9vp-oAfbJ`?u+JrXk?|!Z8BU?z-#LC4{tD?=T=|b6Lz$nzGvLo$`qX!2`Delt$v+pK2`_;c zz`5{Jc$+J~$CYn^?cbd+Fb)@!cHi??}6`t_qz0b zQ1w3n)$gN@pLOLsq2{^QrJr``=b*-W0ZxN|;nFX=^!K3p{Sj3A*IfGNj#E%h<4uE8 z;TewahH7^{RJ-X=dSBu4uY?+}-ElFL9$oNk_Lbbmfsyq)n;CtX~cn^%>9(XxCpT-N}O;CE= z4>gbNQ0+ehHQtw8`bjALpK~OdiO)s z`y`aVdxW;j*MQo_S%`emcZe%p$0E zAA%}h2W9WOq1NRAI1hdnN{_nB{|6{NUxU)?4akz4sU9|h7eduv00|LhIn+2kQ1*?X z%2T)%egqD|<7xa+xD9IDQ!mc?y%AnPx(8kbKLKUm7vK!|D%7}VG5Oi>8Ynvy`MDKt zgRrYTnab`bwyJ^P%j!9LnAwg!1oxmwzu*{|`g8f83?N?9$ITz6iAr-*)9MyY%;= z^!g!G`~QI2H^*O=jdKoEc^>BAwNQEo@B|n^wW~UAhN}MnRK3UHZ^98+g5QC-fLZn% zncnN6+HZg!yw~M_5uQMLuS-7z?;`zm*a@#inVsdDj2C z94~+>zryiq$LnB){0{h0cnD5|^KmAz11c`x0u`r1mwz|ZIt@XM_bGTa+~LZ{9e?2X zW5@q=JaI-g&(opCIU7=BE`{x|3tkKFhqBu@;VJM{$Je3kG$o(ypOc{GccEj>aSoK< zv_t9J38n8H@Nrmn=~HHA{hjN0F;stTE`6orJScsycje1my4!J$<2opPt5AAwhU)KQ zF1;P9pU0r;ebJ@&IX(wf|4&`|+m7RoKY(iYW2pXr0agF_Sy}otsQ%A_s^__M-j&aF z>GwgkTk6uQ9Pe-pq1vZV<7|SeKkU*E!Ba_p8fv^9j{Bh6JqM@4KZ9!jk}LlkNJui@ zg~vgaU4_V(A4K%L6Dc82A-{!u7147OasZKEu0ZI*Jcs-t@L4}1vufJ^^2Oc0Jfb0wm|66^AFrQ8Vq~t% zUJmEDcVQD!L}a_w$YMnPK8Sn-(eoH`19A;Qn6mdb?Ulwe!@ay8ei0c!4k5pT=qV%e zeO$!6fP5IqA(ta7kuM`tkUu~g&;7h;|LF|SvlDqQqL{N3QOwYDJ3?r(KCwg@Jc?Jp zk8~m15Ir5p>By&$>yQs2L&#o4&klsEuK7H23vwFrJn}Sh4l<1NBL@)=X-D=Tix54% z8O#E>7P%RzA|W!0tVbHpdm1lrqkF#?ZgB64+mE>S_d)sZtw<-b4AJv@$fL-9WFGRz z$mHiXGE(GZuAr^p^$e!L;i-z5Uh!^RsNZGwx6}T1 z+28JkW`<`LbeaXF9zP2G$Smkj!jf5#_&s4S=nJAWRDrjup9+*hGJl`2-Rg^7PxSdt=Lagw4#P+{~WOwq|(9QBo?+rnz8&rdXsMSkj+#G)Vd1!fU? zBxX@uF8ldP(C;UH8Wb9OR?MO#_EX!enk3A)G-wvx74#O(4cVM;pt_gKmLp_o$ZurC z)znL~yr4HI_b}}ng5I#~m%OOzlBIw}xuKfUVMEi!QKgy$+2U^SOW4J(aw#l_=^C5C zD(Av9%dQmTfkrNe^ido4;SniDPMNXH7u;Dzhcw1_4(s(8%}YV0@|N0a4Bx}tsTZ&H ztg1NRVwPO_*_@kc%EN-Uq-(>~o?j>=3^KWF^~&XwvkFY)XnC__=*a~~%d=WFD-IO# z!%3>eQEAXCgneOJ@tPjdGwAioNu*^ZjjiW(1U*UBPX>~BN)Q_wQmij~i?YyN`_Q=v|6qsdx6!`_; zEGw4r{bkIK`pf-vgW4@;<5#o5(&_gGjH295w&oyG<}Dh`r*R&&-OR%{suaV1N)o2s z$$UFwTEvm24*FuN(9N;AImSlVe86V~t37NS%r^5F+1{dJ(7PT74?OG{7ql$a_;F-2 z*TzX%ZIgjOru1$ejN+uSo}3NYre4vT#@gH~qCg5`u56_m`mRU{ly-HRt{}07>>}h; z0^Es+(o2kBAHQrl1G=iwIu0wdGRBGIT`Q{rMKEof10_~svzl+ z(vBV*CnOb?@f1v4z;6i*Y`9gWc!R&*BCykJoX4xuM9!S6_GiJq>~CCC;#5wHZIw2& zs!DHFyLna(1O?fy+b?s%cLya7QLr&J=pXVEG`CT_ost1DdgQQx!22n*K!12 z57A@&G0LK9sdQKo?GuiqFwq|EE;4elnpCtj-2`>ho%jXL@;KtmYD~GC`vsC!swV5D zJg0?Oy*}~noy4q;)<^L`WLEbRY6}yq%jw(4;%Y|Lw+7>?$JV0?235Fl9;kV+*KKtj znZDhvRn~^Pf$hWG8V0FuW30e!K|#W5NbB2z66)L@RE$59$l>=8Z8yyH%5jtyr)HO^ zNqN=2$Gy({5_58O*DhoCw=3d5s9(lBHQW6{CXj z`xE0=`%EF|HEV+&vyOeau3ADOQ|9_uX4%VOAqxA7sfl8ar6}HD;@;H6iRqUYaFH;B zL1ji1&!BQoV7iic9dReWq>#T==RzE{djIv&`nkyFJ1c!*A-}NNSIKwB?cTJm z75SCH22S`m%IlWd?p-;1&b<7bIr-V|@n+9%ziRFkvw5a1_bX|hT@zKfF2qT@w~}q0 z#9n8d_}t|vkNT=?gM4@3m)pJ7NulcHifP*4K5N#%z`)E@O~bXp#+h7rW@S1xz`nL^ zXH}C~ZPPlJbS`dcKWFCbX^U`jZpry>dk;zpA+!2RY{~fqK|iSk>2<5SJMwdz^)%Mn zAjvOwM{m0~w5t|`P0m# z@1)vDZ9k#h#;1u-q_JJ&+r8R;%65;9diBxqP4zA0jBgs>=GC{>higwDd%dyI@$KV} z(4+f+s_mr3j{3nPb87qb4OM%>8-K*B?bQ3&uI77vYs>qn-s_{PQ$OhPYuiliX?ovd zY9sY68m2x}A08)nq&`~PH@>aD#ncYg_SJUUJYJrl!a=Le5IWcPGly;Uq1pjjjO}G+ zyNy+L|JW{G>O&{g zm`yIMZF65`wvxWfa<&6hLNjS-M@8k4+Ebc{Ogvg2CS&*5UTQo=brN4`%-Pe+*j~)Q zWOjl>w8R94Mcbx1lSK{nx|^1CQQv~KRb}ju%s5it)J*fnWVYJn)(@@6SlC^twVm}v z54|)kFk)>mf)&&y#Ruv`rY^s*1MktV(L~0E%or<_*?f1VV(m#Uhss-P2R#PeT-)6y z9j*2%%JLXoBkrsnV)FZ_!E(_A8?bhaejsb$vA|g_4ry1~&Tnj(fl*?@LUL~!rIu3rJehm!kcQku2|u=QE0xhkmP3Zy*dK>|20F+0a<&QX-|~rR%i0dllj3iK z7Pb8{6t<@Oy>I^&!SIR{JPL_5<0jt!>8MW&_oBV~``enW&+4Mb-MlSf@6kmG*MnkJ#)- z3_a1N#aG`_ty#{Y-=y+es3C7X!Xc0Bvc6SIz%<^(Qf%XWY<^ZqfefdaJX<0(X30W= zU8Bs!jvf>g9qig@#ckjr=-6mr1A{_R<6Ox;^VwY5%34<36xniF zmT-JiPX7c%vLemHMn6v>xJ^2u7mDnsGsIvgq8Qpwyr_yRR2w_&0c(%i6X=XP zQ_4hbWAxjKr8spIl{tbAYMWYv5XVOuh%WTPEOa!f8uj`AgM4*tI2+2);NjX1LW_-4 zL&QG1Ld~(^Z2C2)z~u8QYqrmxhW23Dk{zZ`U_{$D)1seIr;waNHg?LZZ-ZfnI7+d; zsXd7;_9-XRE2~F?-8O{kB(m1vD&f>}HMVB^x>%;j* z3Lk0MmsR2b8l|FaMC9kiT6jMr>7GKa!RML@*`34Fo!^8N?l3wRt@bqaCfrdshS~xA zO1GZujKH7vs((+{B4Ym|zg#ojYvk-Kz9N(hJVP298=#h##Xz@9m^hat9a9?L#z5Pc za|v2qsgf;OO&1xxVgNh|FQ6Uvw+V8GoC$e5iuu?L+&1WTr_u2$%UeA&SEoPLB)c=9 zx!coiy25G0Y(W(^4>ldQyTo&bcfm#BxG@JCUTDR(Wf`<%>?KnA)!6#aG~&j@dG-G{ zH0F~njxv$Pzj5SVEc08Rh~~cubF}_Thl$xza+bA_{x*DofAtcpJs<-wvg@Q zgqgQ$x9gHR={8Gp$c9AXw6TGj%`07O!nz!RVv~*lMZoN3VoIuNRp4TC41Jpam!g%9 z5^a~AM9yYQGPoqT1y|T_ZhyDkWis6aWX9H(#~9OI1P`nCe;9kh{TaNmpZ9Cc>>+?k z?p1qlghSEBNWvTmjtvi2Y2*+^ISO{~A;L+to&pu_4CB*p^qqEndl&fxX=0@|?iDGBlqS^jZ%-MmUD9PR6SdHZy^vl#6dSw>@mIh0>TY*c^J)b(6ck67!63sPIM9{|^ zR&g&1#&mrEb-9b7WAln?v$R8HH@jsHpG1qx?yfzpWw3`#olkfsIi{Ok<1n$IxVif^ zjH=lv!^z)lfU?|}K1He#?`(vI!cteBOv09GT`UWS)X@O3&i+JFje zypUUDU#jkdf8q;&;?uqPNvK1lKCD^E=*{bkjXjxn+3SnF8n9f=JAx`Vc310ZsVzT| zuVY$j;p-gzl*q)5&(XJgY^KGyZ<`8u23^DyGE?4spuTn}1ol&w}x5yyH% PZJYMr#Kze)zTNx}uxfxN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 000000000..6067c0055 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,1222 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "عربی" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bulgarian" +msgstr "بلغاری" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "بنگالی" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "بوسنیائی" + +msgid "Catalan" +msgstr "کیٹالانی" + +msgid "Czech" +msgstr "زیچ" + +msgid "Welsh" +msgstr "ویلش" + +msgid "Danish" +msgstr "ڈینش" + +msgid "German" +msgstr "جرمن" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "گریک" + +msgid "English" +msgstr "انگلش" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "برطانوی انگلش" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ھسپانوی" + +msgid "Argentinian Spanish" +msgstr "ارجنٹائنی سپینش" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "" + +msgid "Nicaraguan Spanish" +msgstr "" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "اسٹانین" + +msgid "Basque" +msgstr "باسک" + +msgid "Persian" +msgstr "فارسی" + +msgid "Finnish" +msgstr "فنش" + +msgid "French" +msgstr "فرانسیسی" + +msgid "Frisian" +msgstr "فریسی" + +msgid "Irish" +msgstr "آئرش" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "گیلیشین" + +msgid "Hebrew" +msgstr "عبرانی" + +msgid "Hindi" +msgstr "ھندی" + +msgid "Croatian" +msgstr "کروشن" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ھونگارین" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "انڈونیشین" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "آئس لینڈک" + +msgid "Italian" +msgstr "اطالوی" + +msgid "Japanese" +msgstr "جاپانی" + +msgid "Georgian" +msgstr "جارجیائی" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "خمر" + +msgid "Kannada" +msgstr "کناڈا" + +msgid "Korean" +msgstr "کوریائی" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "لیتھونیائی" + +msgid "Latvian" +msgstr "لتوینی" + +msgid "Macedonian" +msgstr "میسیڈونین" + +msgid "Malayalam" +msgstr "ملایالم" + +msgid "Mongolian" +msgstr "منگولین" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "ڈچ" + +msgid "Norwegian Nynorsk" +msgstr "نارویائی نینورسک" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "پنجابی" + +msgid "Polish" +msgstr "پولش" + +msgid "Portuguese" +msgstr "پورتگیز" + +msgid "Brazilian Portuguese" +msgstr "برازیلی پورتگیز" + +msgid "Romanian" +msgstr "رومانی" + +msgid "Russian" +msgstr "روسی" + +msgid "Slovak" +msgstr "سلووک" + +msgid "Slovenian" +msgstr "سلووینین" + +msgid "Albanian" +msgstr "البانوی" + +msgid "Serbian" +msgstr "سربین" + +msgid "Serbian Latin" +msgstr "سربین لاطینی" + +msgid "Swedish" +msgstr "سویڈش" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "تاملی" + +msgid "Telugu" +msgstr "تیلگو" + +msgid "Thai" +msgstr "تھائی" + +msgid "Turkish" +msgstr "ترکش" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "یوکرائنی" + +msgid "Urdu" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "ویتنامی" + +msgid "Simplified Chinese" +msgstr "سادی چینی" + +msgid "Traditional Chinese" +msgstr "روایتی چینی" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "درست قیمت (ویلیو) درج کریں۔" + +msgid "Enter a valid URL." +msgstr "درست یو آر ایل (URL) درج کریں۔" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "IPv4 کا درست پتہ درج کریں۔" + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "صرف اعداد درج کریں جو کوموں سے الگ کئے ھوئے ھوں۔" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"اس بات کا یقین کر لیں کہ یہ قیمت (ویلیو) %(limit_value)s ھے۔ (یہ " +"%(show_value)s ھے)%(show_value)s" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"اس بات کا یقین کر لیں کہ یہ قیمت (ویلیو) %(limit_value)s سے کم یا اس کے " +"برابر ھے۔" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"اس بات کا یقین کر لیں کہ یہ قیمت (ویلیو) %(limit_value)s سے زیادہ یا اس کے " +"برابر ھے۔" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "نمبر درج کریں۔" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "اور" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "یہ خانہ نامعلوم (null( نھیں رہ سکتا۔" + +msgid "This field cannot be blank." +msgstr "یہ خانہ خالی نھیں چھوڑا جا سکتا۔" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s اس %(field_label)s کے ساتھ پہلے ہی موجود ھے۔" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s قسم کا خانہ" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "بولین (True یا False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "سلسلۂ حروف (String) (%(max_length)s تک)" + +msgid "Comma-separated integers" +msgstr " کومے سے الگ کئے ھوئے صحیح اعداد" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "تاریخ (وقت کے بغیر)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "تاریخ (بمع وقت)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "اعشاری نمبر" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "فائل کا راستہ(path(" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "نقطہ اعشاریہ والا نمبر" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "صحیح عدد" + +msgid "Big (8 byte) integer" +msgstr "بڑا (8 بائٹ) صحیح عدد" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP ایڈریس" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "بولین (True، False یا None(" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "متن" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "وقت" + +msgid "URL" +msgstr "یو آر ایل" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "بیرونی کلید (FK( (قسم متعلقہ خانے سے متعین ھو گی)" + +msgid "One-to-one relationship" +msgstr "ون-ٹو-ون ریلیشن شپ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "مینی-ٹو-مینی ریلیشن شپ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "یہ خانہ درکار ھے۔" + +msgid "Enter a whole number." +msgstr "مکمل نمبر درج کریں۔" + +msgid "Enter a valid date." +msgstr "درست تاریخ درج کریں۔" + +msgid "Enter a valid time." +msgstr "درست وقت درج کریں۔" + +msgid "Enter a valid date/time." +msgstr "درست تاریخ/وقت درج کریں۔" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "کوئی فائل پیش نہیں کی گئی۔ فارم پر اینکوڈنگ کی قسم چیک کریں۔" + +msgid "No file was submitted." +msgstr "کوئی فائل پیش نہیں کی گئی تھی۔" + +msgid "The submitted file is empty." +msgstr "پیش کی گئی فائل خالی ھے۔" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "براہ مھربانی فائل پیش کریں یا Clear checkbox منتخب کریں۔ نہ کہ دونوں۔" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"درست تصویر اپ لوڈ کریں۔ جو فائل آپ نے اپ لوڈ کی تھی وہ تصویر نہیں تھی یا " +"خراب تصویر تھی۔" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "درست انتخاب منتخب کریں۔ %(value)s دستیاب انتخابات میں سے کوئی نہیں۔" + +msgid "Enter a list of values." +msgstr "قیمتوں (ویلیوز) کی لسٹ درج کریں۔" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ترتیب" + +msgid "Delete" +msgstr "مٹائیں" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "براہ کرم %(field)s کے لئے دوہرا مواد درست کریں۔" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"براہ کرم %(field)s کے لئے دوہرا مواد درست کریں جوکہ منفرد ھونا ضروری ھے۔" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"براہ کرم %(field_name)s میں دوہرا مواد درست کریں جو کہ %(date_field)s میں " +"%(lookup)s کے لئے منفرد ھونا ضروری ھے۔" + +msgid "Please correct the duplicate values below." +msgstr "براہ کرم نیچے دوہری قیمتیں (ویلیوز) درست کریں۔" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "درست انتخاب منتخب کریں۔ یہ انتخاب دستیاب انتخابات میں سے کوئی نہیں ھے۔" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "صاف کریں" + +msgid "Currently" +msgstr "فی الحال" + +msgid "Change" +msgstr "تبدیل کریں" + +msgid "Unknown" +msgstr "نامعلوم" + +msgid "Yes" +msgstr "ھاں" + +msgid "No" +msgstr "نھیں" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "ھاں،نہیں،ھوسکتاہے" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d بائٹ" +msgstr[1] "%(size)d بائٹس" + +#, python-format +msgid "%s KB" +msgstr "%s ک ۔ ب" + +#, python-format +msgid "%s MB" +msgstr "%s م ۔ ب" + +#, python-format +msgid "%s GB" +msgstr "%s ج ۔ ب" + +#, python-format +msgid "%s TB" +msgstr "%s ٹ ۔ ب" + +#, python-format +msgid "%s PB" +msgstr "%s پ ۔ پ" + +msgid "p.m." +msgstr "شام" + +msgid "a.m." +msgstr "صبح" + +msgid "PM" +msgstr "شام" + +msgid "AM" +msgstr "صبح" + +msgid "midnight" +msgstr "نصف رات" + +msgid "noon" +msgstr "دوپہر" + +msgid "Monday" +msgstr "سوموار" + +msgid "Tuesday" +msgstr "منگل" + +msgid "Wednesday" +msgstr "بدھ" + +msgid "Thursday" +msgstr "جمعرات" + +msgid "Friday" +msgstr "جمعہ" + +msgid "Saturday" +msgstr "ھفتہ" + +msgid "Sunday" +msgstr "اتوار" + +msgid "Mon" +msgstr "سوموار" + +msgid "Tue" +msgstr "منگل" + +msgid "Wed" +msgstr "بدھ" + +msgid "Thu" +msgstr "جمعرات" + +msgid "Fri" +msgstr "جمعہ" + +msgid "Sat" +msgstr "ھفتہ" + +msgid "Sun" +msgstr "اتوار" + +msgid "January" +msgstr "جنوری" + +msgid "February" +msgstr "فروری" + +msgid "March" +msgstr "مارچ" + +msgid "April" +msgstr "اپریل" + +msgid "May" +msgstr "مئی" + +msgid "June" +msgstr "جون" + +msgid "July" +msgstr "جولائی" + +msgid "August" +msgstr "اگست" + +msgid "September" +msgstr "ستمبر" + +msgid "October" +msgstr "اکتوبر" + +msgid "November" +msgstr "نومبر" + +msgid "December" +msgstr "دسمبر" + +msgid "jan" +msgstr "جنوری" + +msgid "feb" +msgstr "فروری" + +msgid "mar" +msgstr "مارچ" + +msgid "apr" +msgstr "اپریل" + +msgid "may" +msgstr "مئی" + +msgid "jun" +msgstr "جون" + +msgid "jul" +msgstr "جولائی" + +msgid "aug" +msgstr "اگست" + +msgid "sep" +msgstr "ستمبر" + +msgid "oct" +msgstr "اکتوبر" + +msgid "nov" +msgstr "نومبر" + +msgid "dec" +msgstr "دسمبر" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "جنوری" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "فروری" + +msgctxt "abbrev. month" +msgid "March" +msgstr "مارچ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "اپریل" + +msgctxt "abbrev. month" +msgid "May" +msgstr "مئی" + +msgctxt "abbrev. month" +msgid "June" +msgstr "جون" + +msgctxt "abbrev. month" +msgid "July" +msgstr "جولائی" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "اگست" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ستمبر" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "اکتوبر" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "نومبر" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "دسمبر" + +msgctxt "alt. month" +msgid "January" +msgstr "جنوری" + +msgctxt "alt. month" +msgid "February" +msgstr "فروری" + +msgctxt "alt. month" +msgid "March" +msgstr "مارچ" + +msgctxt "alt. month" +msgid "April" +msgstr "اپریل" + +msgctxt "alt. month" +msgid "May" +msgstr "مئی" + +msgctxt "alt. month" +msgid "June" +msgstr "جون" + +msgctxt "alt. month" +msgid "July" +msgstr "جولائی" + +msgctxt "alt. month" +msgid "August" +msgstr "اگست" + +msgctxt "alt. month" +msgid "September" +msgstr "ستمبر" + +msgctxt "alt. month" +msgid "October" +msgstr "اکتوبر" + +msgctxt "alt. month" +msgid "November" +msgstr "نومبر" + +msgctxt "alt. month" +msgid "December" +msgstr "دسمبر" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "یا" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "،" + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57f89e8f9306f73df275c9a56b278ec0522a8740 GIT binary patch literal 27466 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 000000000..4e9b6cfa7 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,1295 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abdulaminkhon Khaydarov , 2020 +# Bedilbek Khamidov , 2019 +# Claude Paroz , 2020 +# Sukhrobbek Ismatov , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-25 17:08+0000\n" +"Last-Translator: Abdulaminkhon Khaydarov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Afrika tili" + +msgid "Arabic" +msgstr "Arab tili" + +msgid "Algerian Arabic" +msgstr "Jazoir arab tili" + +msgid "Asturian" +msgstr "Asturiya tili" + +msgid "Azerbaijani" +msgstr "Ozarbayjon tili" + +msgid "Bulgarian" +msgstr "Bolgar tili" + +msgid "Belarusian" +msgstr "Belorus tili" + +msgid "Bengali" +msgstr "Bengal tili" + +msgid "Breton" +msgstr "Breton tili" + +msgid "Bosnian" +msgstr "Bosniya tili" + +msgid "Catalan" +msgstr "Katalon tili" + +msgid "Czech" +msgstr "Chex tili" + +msgid "Welsh" +msgstr "Uels tili" + +msgid "Danish" +msgstr "Daniya tili" + +msgid "German" +msgstr "Nemis tili" + +msgid "Lower Sorbian" +msgstr "Quyi sorbiya tili" + +msgid "Greek" +msgstr "Yunon tili" + +msgid "English" +msgstr "Ingliz tili" + +msgid "Australian English" +msgstr "Avstraliya ingliz tili" + +msgid "British English" +msgstr "Britan Ingliz tili" + +msgid "Esperanto" +msgstr "Esperanto tili" + +msgid "Spanish" +msgstr "Ispan tili" + +msgid "Argentinian Spanish" +msgstr "Argentina Ispan tili" + +msgid "Colombian Spanish" +msgstr "Kolumbiya Ispan tili" + +msgid "Mexican Spanish" +msgstr "Meksika Ispan tili " + +msgid "Nicaraguan Spanish" +msgstr "Nikaragua Ispan tili" + +msgid "Venezuelan Spanish" +msgstr "Venesuela Ispan tili" + +msgid "Estonian" +msgstr "Estoniya tili" + +msgid "Basque" +msgstr "Bask tili" + +msgid "Persian" +msgstr "Fors tili" + +msgid "Finnish" +msgstr "Fin tili" + +msgid "French" +msgstr "Fransuz tili" + +msgid "Frisian" +msgstr "Friziya tili" + +msgid "Irish" +msgstr "Irland tili" + +msgid "Scottish Gaelic" +msgstr "Shotland Gal tili" + +msgid "Galician" +msgstr "Galisiya tili" + +msgid "Hebrew" +msgstr "Ibroniy tili" + +msgid "Hindi" +msgstr "Hind tili" + +msgid "Croatian" +msgstr "Xorvat tili" + +msgid "Upper Sorbian" +msgstr "Yuqori Sorbiya tili" + +msgid "Hungarian" +msgstr "Vengriya tili" + +msgid "Armenian" +msgstr "Arman tili" + +msgid "Interlingua" +msgstr "Interlingua tili" + +msgid "Indonesian" +msgstr "Indoneziya tili" + +msgid "Igbo" +msgstr "Igbo tili" + +msgid "Ido" +msgstr "Ido tili" + +msgid "Icelandic" +msgstr "Island tili" + +msgid "Italian" +msgstr "Italyan tili" + +msgid "Japanese" +msgstr "Yapon tili" + +msgid "Georgian" +msgstr "Gruzin tili" + +msgid "Kabyle" +msgstr "Kabil tili" + +msgid "Kazakh" +msgstr "Qozoq tili" + +msgid "Khmer" +msgstr "Xmer tili" + +msgid "Kannada" +msgstr "Kannada tili" + +msgid "Korean" +msgstr "Koreys tili" + +msgid "Kyrgyz" +msgstr "Qirg'iz tili" + +msgid "Luxembourgish" +msgstr "Lyuksemburg tili" + +msgid "Lithuanian" +msgstr "Litva tili" + +msgid "Latvian" +msgstr "Latviya tili" + +msgid "Macedonian" +msgstr "Makedoniya tili" + +msgid "Malayalam" +msgstr "Malayalam tili" + +msgid "Mongolian" +msgstr "Mo'g'ul tili" + +msgid "Marathi" +msgstr "Marati tili" + +msgid "Burmese" +msgstr "Birma tili" + +msgid "Norwegian Bokmål" +msgstr "Norvegiya Bokmal tili" + +msgid "Nepali" +msgstr "Nepal tili" + +msgid "Dutch" +msgstr "Golland tili" + +msgid "Norwegian Nynorsk" +msgstr "Norvegiya Ninorsk tili" + +msgid "Ossetic" +msgstr "Osetik tili" + +msgid "Punjabi" +msgstr "Panjob tili" + +msgid "Polish" +msgstr "Polyak tili" + +msgid "Portuguese" +msgstr "Portugal tili" + +msgid "Brazilian Portuguese" +msgstr "Braziliya Portugal tili" + +msgid "Romanian" +msgstr "Rumin tili" + +msgid "Russian" +msgstr "Rus tili" + +msgid "Slovak" +msgstr "Slovak tili" + +msgid "Slovenian" +msgstr "Slovan tili" + +msgid "Albanian" +msgstr "Alban tili" + +msgid "Serbian" +msgstr "Serb tili" + +msgid "Serbian Latin" +msgstr "Serbiya Lotin tili" + +msgid "Swedish" +msgstr "Shved tili" + +msgid "Swahili" +msgstr "Suaxili tili" + +msgid "Tamil" +msgstr "Tamil tili" + +msgid "Telugu" +msgstr "Telugu tili" + +msgid "Tajik" +msgstr "Tojik tili" + +msgid "Thai" +msgstr "Tay tili" + +msgid "Turkmen" +msgstr "Turkman tili" + +msgid "Turkish" +msgstr "Turk tili" + +msgid "Tatar" +msgstr "Tatar tili" + +msgid "Udmurt" +msgstr "Udmurt tili" + +msgid "Ukrainian" +msgstr "Ukrain tili" + +msgid "Urdu" +msgstr "Urdu tili" + +msgid "Uzbek" +msgstr "O'zbek tili" + +msgid "Vietnamese" +msgstr "Vetnam tili" + +msgid "Simplified Chinese" +msgstr "Soddalashtirilgan xitoy tili" + +msgid "Traditional Chinese" +msgstr "An'anaviy xitoy tili" + +msgid "Messages" +msgstr "Xabarlar" + +msgid "Site Maps" +msgstr "Sayt xaritalari" + +msgid "Static Files" +msgstr "Statik fayllar" + +msgid "Syndication" +msgstr "Sindikatsiya" + +msgid "That page number is not an integer" +msgstr "Bu sahifa raqami butun son emas" + +msgid "That page number is less than 1" +msgstr "Bu sahifa raqami 1 dan kichik" + +msgid "That page contains no results" +msgstr "Ushbu sahifada hech qanday natija yo'q" + +msgid "Enter a valid value." +msgstr "To'g'ri qiymatni kiriting." + +msgid "Enter a valid URL." +msgstr "To'g'ri URL manzilini kiriting." + +msgid "Enter a valid integer." +msgstr "To'g'ri butun sonni kiriting." + +msgid "Enter a valid email address." +msgstr "To'g'ri elektron pochta manzilini kiriting." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Harflar, raqamlar, pastki chiziqlar yoki chiziqlardan iborat to'g'ri \"slug" +"\" ni kiriting." + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Unicode harflari, raqamlari, pastki chiziqlari yoki chiziqlardan iborat " +"to'g'ri \"slug\" ni kiriting." + +msgid "Enter a valid IPv4 address." +msgstr "To'g'ri IPv4 manzilini kiriting." + +msgid "Enter a valid IPv6 address." +msgstr "To'g'ri IPv6 manzilini kiriting." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "To'g'ri IPv4 yoki IPv6 manzilini kiriting." + +msgid "Enter only digits separated by commas." +msgstr "Faqat vergul bilan ajratilgan raqamlarni kiriting." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Ushbu qiymat %(limit_value)s ekanligiga ishonch hosil qiling (Hozir u " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Ushbu qiymat %(limit_value)s dan kichik yoki unga teng ekanligini tekshiring." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Ushbu qiymat %(limit_value)s dan katta yoki unga teng ekanligini tekshiring." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ushbu qiymat kamida %(limit_value)dga ega ekanligiga ishonch hosil qiling " +"(unda bor %(show_value)d)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ushbu qiymat eng ko'pi bilan %(limit_value)d ta belgidan iboratligiga " +"ishonch hosil qiling (hozir, %(show_value)d tadan iborat)." + +msgid "Enter a number." +msgstr "Raqamni kiriting." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +"Umumiy raqamlar soni %(max)s tadan ko'p bo'lmasligiga ishonch hosil qiling." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"O'nlik kasr xonalari %(max)s tadan ko'p bo'lmasligiga ishonch hosil qiling." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"O'nli kasr nuqtasidan oldin %(max)s tadan ko'p raqam bo'lmasligiga ishonch " +"hosil qiling." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"\"%(extension)s\" fayl kengaytmasiga ruxsat berilmagan Ruxsat berilgan " +"kengaytmalar: %(allowed_extensions)s." + +msgid "Null characters are not allowed." +msgstr "Bo'shliq belgilaridan foydalanish mumkin emas." + +msgid "and" +msgstr "va" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s bilan %(model_name)s allaqachon mavjud." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r qiymati to'g'ri tanlov emas." + +msgid "This field cannot be null." +msgstr "Bu maydon bo‘shliq belgisidan iborat bo'lishi mumkin emas." + +msgid "This field cannot be blank." +msgstr "Bu maydon bo‘sh bo‘lishi mumkin emas." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "\"%(field_label)s\" %(model_name)s allaqachon mavjud." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s %(date_field_label)s %(lookup_type)s uchun noyob bo'lishi " +"kerak." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Maydon turi: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "\"%(value)s\" qiymati rost yoki yolg'on bo'lishi kerak." + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" +"\"%(value)s\" qiymati Rost, Yolg'on yoki Bo'shliq belgisidan iborat bo'lishi " +"kerak." + +msgid "Boolean (Either True or False)" +msgstr "Mantiqiy (Rost yoki Yolg'on)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Birikma uzunligi (%(max_length)s gacha)" + +msgid "Comma-separated integers" +msgstr "Vergul bilan ajratilgan butun sonlar" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"\"%(value)s\" qiymati yaroqsiz sana formatiga ega. U YYYY-MM-DD formatida " +"bo'lishi kerak." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"\"%(value)s\" qiymati to'g'ri formatga (YYYY-MM-DD) ega, ammo bu noto'g'ri " +"sana." + +msgid "Date (without time)" +msgstr "Sana (vaqtsiz)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"\"%(value)s\" qiymati noto'g'ri formatga ega. U YYYY-MM-DD HH: MM [: ss [." +"uuuuuu]] [TZ] formatida bo'lishi kerak." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"\"%(value)s\" qiymati to'g'ri formatga ega (YYYY-MM-DD HH: MM [: ss [." +"uuuuuu]] [TZ]), lekin u noto'g'ri sana / vaqt." + +msgid "Date (with time)" +msgstr "Sana (vaqt bilan)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "\"%(value)s\" qiymati o'nlik kasr sonlardan iborat bo'lishi kerak." + +msgid "Decimal number" +msgstr "O'nli kasr son" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"\"%(value)s\" qiymati noto'g'ri formatga ega. U [DD] [[HH:] MM:] ss [." +"uuuuuu] formatida bo'lishi kerak." + +msgid "Duration" +msgstr "Davomiyligi" + +msgid "Email address" +msgstr "Elektron pochta manzili" + +msgid "File path" +msgstr "Fayl manzili" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "\"%(value)s\" qiymati haqiqiy son bo'lishi kerak." + +msgid "Floating point number" +msgstr "Haqiqiy son" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "\"%(value)s\" qiymati butun son bo'lishi kerak." + +msgid "Integer" +msgstr "Butun son" + +msgid "Big (8 byte) integer" +msgstr "Katta (8 bayt) butun son" + +msgid "IPv4 address" +msgstr "IPv4 manzili" + +msgid "IP address" +msgstr "IP manzili" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "\"%(value)s\" qiymati Yo‘q, To‘g‘ri yoki Noto'g'ri bo'lishi kerak." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (To'g'ri, Yolg'on yoki Hech biri)" + +msgid "Positive big integer" +msgstr "Musbat katta butun son" + +msgid "Positive integer" +msgstr "Ijobiy butun son" + +msgid "Positive small integer" +msgstr "Musbat kichik butun son" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug uzunligi (%(max_length)s gacha)" + +msgid "Small integer" +msgstr "Kichik butun son" + +msgid "Text" +msgstr "Matn" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"\"%(value)s\" qiymati noto'g'ri formatga ega. U HH: MM [: ss [.uuuuuu]] " +"formatida bo'lishi kerak." + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"\"%(value)s\" qiymati to'g'ri formatga ega (HH: MM [: ss [.uuuuuu]]), lekin " +"bu noto'g'ri vaqt." + +msgid "Time" +msgstr "Vaqt" + +msgid "URL" +msgstr "URL manzili" + +msgid "Raw binary data" +msgstr "Tartibsiz Ikkilik ma'lumotlar" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "\"%(value)s\" to'g'ri UUID emas." + +msgid "Universally unique identifier" +msgstr "Umum noyob aniqlovchi" + +msgid "File" +msgstr "Fayl" + +msgid "Image" +msgstr "Rasm" + +msgid "A JSON object" +msgstr "JSON ob'ekti" + +msgid "Value must be valid JSON." +msgstr "Qiymat yaroqli JSON bo'lishi kerak." + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s %(value)r lari bilan %(model)s namunasi uchun mavjud emas." + +msgid "Foreign Key (type determined by related field)" +msgstr "Tashqi kalit (turi aloqador maydon tomonidan belgilanadi)" + +msgid "One-to-one relationship" +msgstr "Birga-bir yago munosabat" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s -%(to)s gacha bo'lgan munosabat" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s -%(to)s gacha bo'lgan munosabatlar" + +msgid "Many-to-many relationship" +msgstr "Ko'pchilikka-ko'pchilik munosabatlar" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ushbu maydon to'ldirilishi shart." + +msgid "Enter a whole number." +msgstr "Butun raqamni kiriting." + +msgid "Enter a valid date." +msgstr "Sanani to‘g‘ri kiriting." + +msgid "Enter a valid time." +msgstr "Vaqtni to‘g‘ri kiriting." + +msgid "Enter a valid date/time." +msgstr "Sana/vaqtni to‘g‘ri kiriting." + +msgid "Enter a valid duration." +msgstr "Muddatni to'g'ri kiriting." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Kunlar soni {min_days} va {max_days} orasida bo'lishi kerak." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Hech qanday fayl yuborilmadi. Formadagi kodlash turini tekshiring." + +msgid "No file was submitted." +msgstr "Hech qanday fayl yuborilmadi." + +msgid "The submitted file is empty." +msgstr "Yuborilgan etilgan fayl bo'sh." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Fayl nomi maksimum %(max)d belgilardan ko'p emasligiga ishonch hosil qiling " +"(hozir %(length)d belgi ishlatilgan)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Iltimos, faylni yuboring yoki katachani belgilang, lekin ikkalasinimas." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"To'g'ri rasmni yuklang. Siz yuklagan fayl yoki rasm emas yoki buzilgan rasm " +"edi." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "To'g'ri tanlovni tanlang. %(value)s mavjud tanlovlardan biri emas." + +msgid "Enter a list of values." +msgstr "Qiymatlar ro'yxatini kiriting." + +msgid "Enter a complete value." +msgstr "To'liq qiymatni kiriting." + +msgid "Enter a valid UUID." +msgstr "To'g'ri UUID kiriting." + +msgid "Enter a valid JSON." +msgstr "Yaroqli JSONni kiriting." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Yashirilgan maydon %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm ma'lumotlari yo'q yoki o'zgartirilgan" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Iltimos, %d ta yoki kamroq forma topshiring." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Iltimos, %d ta yoki ko'proq forma topshiring." + +msgid "Order" +msgstr "Buyurtma" + +msgid "Delete" +msgstr "Yo'q qilish" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Iltimos, %(field)s uchun takroriy ma'lumotni tuzating." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Iltimos, noyob bo'lishi kerak bo'lgan %(field)s uchun takroriy ma'lumotlarni " +"to'g'rilang." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Iltimos, %(field_name)s uchun takroriy ma'lumotlarni %(date_field)s ga noyob " +"bo'la oladigan %(lookup)s ichidagi ma'lumotlarni moslab to'g'rilang." + +msgid "Please correct the duplicate values below." +msgstr "Iltimos, quyidagi takroriy qiymatlarni to'g'irlang." + +msgid "The inline value did not match the parent instance." +msgstr "Kiritilgan ichki qiymat ajdod misoliga mos kelmaydi." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "To'g'ri tanlovni tanlang. Bu tanlov mavjud tanlovlardan biri emas." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "\"%(pk)s\" to'g'ri qiymat emas." + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s vaqtni %(current_timezone)s mintaqa talqinida ifodalab " +"bo'lmadi; u noaniq yoki mavjud bo'lmasligi mumkin." + +msgid "Clear" +msgstr "Aniq" + +msgid "Currently" +msgstr "Hozirda" + +msgid "Change" +msgstr "O'zgartirish" + +msgid "Unknown" +msgstr "Noma'lum" + +msgid "Yes" +msgstr "Ha" + +msgid "No" +msgstr "Yo'q" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "ha,yo'q,ehtimol" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)dbayt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "kechqurun" + +msgid "a.m." +msgstr "ertalab" + +msgid "PM" +msgstr "Kechqurun" + +msgid "AM" +msgstr "Ertalab" + +msgid "midnight" +msgstr "yarim tunda" + +msgid "noon" +msgstr "peshin" + +msgid "Monday" +msgstr "Dushanba" + +msgid "Tuesday" +msgstr "Seshanba" + +msgid "Wednesday" +msgstr "Chorshanba" + +msgid "Thursday" +msgstr "Payshanba" + +msgid "Friday" +msgstr "Juma" + +msgid "Saturday" +msgstr "Shanba" + +msgid "Sunday" +msgstr "Yakshanba" + +msgid "Mon" +msgstr "Dush" + +msgid "Tue" +msgstr "Sesh" + +msgid "Wed" +msgstr "Chor" + +msgid "Thu" +msgstr "Pay" + +msgid "Fri" +msgstr "Jum" + +msgid "Sat" +msgstr "Shan" + +msgid "Sun" +msgstr "Yak" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "Iyun" + +msgid "July" +msgstr "Iyul" + +msgid "August" +msgstr "Avgust" + +msgid "September" +msgstr "Sentabr" + +msgid "October" +msgstr "Oktabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgid "jan" +msgstr "yan" + +msgid "feb" +msgstr "fev" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "iyn" + +msgid "jul" +msgstr "iyl" + +msgid "aug" +msgstr "avg" + +msgid "sep" +msgstr "sen" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "noy" + +msgid "dec" +msgstr "dek" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Yan," + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprel" + +msgctxt "abbrev. month" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Iyun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Iyul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Avg." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sen." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Noy." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dek." + +msgctxt "alt. month" +msgid "January" +msgstr "Yanvar" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevral" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprel" + +msgctxt "alt. month" +msgid "May" +msgstr "May" + +msgctxt "alt. month" +msgid "June" +msgstr "Iyun" + +msgctxt "alt. month" +msgid "July" +msgstr "Iyul" + +msgctxt "alt. month" +msgid "August" +msgstr "Avgust" + +msgctxt "alt. month" +msgid "September" +msgstr "Sentabr" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktabr" + +msgctxt "alt. month" +msgid "November" +msgstr "Noyabr" + +msgctxt "alt. month" +msgid "December" +msgstr "Dekabr" + +msgid "This is not a valid IPv6 address." +msgstr "Bu to'g'ri IPv6 manzili emas." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "yoki" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%dyil" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%doy" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%dhafta" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%dkun" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%dsoat" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%dminut" + +msgid "Forbidden" +msgstr "Taqiqlangan" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF tekshiruvi amalga oshmadi. So‘rov bekor qilindi." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Siz ushbu xabarni ko'rmoqdasiz, chunki bu HTTPS saytida veb-brauzeringiz " +"tomonidan \"Referer header\" yuborilishi talab qilinadi, ammo hech biri " +"yuborilmadi. Ushbu sarlavha xavfsizlik nuqtai nazaridan, brauzeringizni " +"uchinchi shaxslar tomonidan o'g'irlanmasligini ta'minlash uchun talab " +"qilinadi." + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"Agar siz \"Referer\" sarlavhalarini o'chirib qo'yish uchun brauzeringizni " +"sozlagan bo'lsangiz, iltimos, hech bo'lmasa ushbu sayt uchun, HTTPS " +"ulanishlari, yoki \"same-origin\" so'rovlari uchun ularni qayta yoqib " +"qo'ying." + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Agar siz yorlig'idan yoki " +"\"Referrer-Policy: no-referer\" sarlavhasidan foydalanayotgan bo'lsangiz, " +"iltimos ularni olib tashlang. CSRF himoyasi \"Referer\" sarlavhasini " +"havolalarni qat'iy tekshirishni talab qiladi. Agar maxfiyligingiz haqida " +"xavotirda bo'lsangiz, uchinchi tomon saytlari kabi " +"havola alternativalaridan foydalaning." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Siz ushbu xabarni ko'rmoqdasiz, chunki ushbu sayt formalarni yuborishda CSRF " +"cookie ma'lumotlarini talab qiladi. Ushbu cookie ma'lumotlari xavfsizlik " +"nuqtai nazaridan, brauzeringizni uchinchi shaxslar tomonidan " +"o'g'irlanmasligini ta'minlash uchun xizmat qilinadi." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"Agar siz cookie ma'lumotlarni o'chirib qo'yish uchun brauzeringizni " +"konfiguratsiya qilgan bo'lsangiz, iltimos, ushbu sayt yoki \"same-origin\" " +"so'rovlari uchun ularni qayta yoqib qo'ying." + +msgid "More information is available with DEBUG=True." +msgstr "Qo'shimcha ma'lumotlarni DEBUG = True ifodasi bilan ko'rish mumkin." + +msgid "No year specified" +msgstr "Yil ko‘rsatilmagan" + +msgid "Date out of range" +msgstr "Sana chegaradan tashqarida" + +msgid "No month specified" +msgstr "Oy ko'rsatilmagan" + +msgid "No day specified" +msgstr "Hech qanday kun ko‘rsatilmagan" + +msgid "No week specified" +msgstr "Hech qanday hafta belgilanmagan" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Hech qanday %(verbose_name_plural)s lar mavjud emas" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Kelajak %(verbose_name_plural)s lari mavjud emas, chunki %(class_name)s." +"allow_future yolg'ondur." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" +"\"%(datestr)s\" sana birikmasi noto'g'ri berilgan. \"%(format)s\" formati " +"tavsiya etilgan" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "So'rovga mos keladigan %(verbose_name)s topilmadi" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "Sahifa \"oxirgi\" emas va uni butun songa aylantirish mumkin emas." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Noto'g'ri sahifa (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "Bo'sh ro'yxat va \"%(class_name)s.allow_empty\" yolg'on." + +msgid "Directory indexes are not allowed here." +msgstr "Bu yerda katalog indekslaridan foydalanib bo'lmaydi." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "\"%(path)s\" mavjud emas" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s indeksi" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: muddati chegaralangan perfektsionistlar uchun veb freymvork." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s uchun chiqarilgan " +"nashrlarni ko'rish" + +msgid "The install worked successfully! Congratulations!" +msgstr "O'rnatish muvaffaqiyatli amalga oshdi! Tabriklaymiz!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Siz ushbu sahifani ko'rmoqdasiz, chunki DEBUG = True ifodasi sizning sozlamalar faylingizda ko'rsatilgan va " +"siz biron bir URL manzilini to'gri sozlamagansiz." + +msgid "Django Documentation" +msgstr "Django Hujjatlari" + +msgid "Topics, references, & how-to’s" +msgstr "Mavzular, havolalar va qanday qilish yo'llari" + +msgid "Tutorial: A Polling App" +msgstr "Qo'llanma: So'rovnoma" + +msgid "Get started with Django" +msgstr "Django bilan boshlang" + +msgid "Django Community" +msgstr "Django hamjamiyati" + +msgid "Connect, get help, or contribute" +msgstr "Bog'laning, yordam oling yoki hissa qo'shing" diff --git a/venv/Lib/site-packages/django/conf/locale/uz/__init__.py b/venv/Lib/site-packages/django/conf/locale/uz/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/uz/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/uz/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec29d55aa65d215407c40148efa30568492ab974 GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lX_bC_d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04$DB@Qhd?DV99q=N|ji)Oe4wYgQ8`rkiD{zYg@r91-ws^ zW9Y4~(Z?wC)Kj3>UUDdv+&YnHcG(%`H#2``myHFXPG#%o$M4e{mZE;-L2)rz@Gd(z zH;4ihq5+KYr&)Lk&p_eGn$_z%hAoSc*?IV&kWcE5U>=MvAKNZr%jU-|2Oy}hes z&gclBF;E=UADWh~IH2K-^@pIDXNsWZsfy+6rr~IZhG&1Hf#MxV%hpWG@r$Z2A5lqe zIJWG(((}!s|3OvXgVTN6*qFG^KRp|qJ&aN2t$}(m)|E@&Rws(3IHm9K^G99c~f~M^U1sQ#g#aIFTmX zcp1(TcpYx8;bk<1I7&k4Dwur=79oac8Eh7DZx(Ony;VF5R$(tCy?MM{2MLz1cHj6n f>lmf0@NND-@axR5EK3(R!!b1bn`c>`rFr@f8sf^4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/uz/formats.py b/venv/Lib/site-packages/django/conf/locale/uz/formats.py new file mode 100644 index 000000000..2c7ee73a1 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/uz/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"j-E, Y-\y\i\l" +TIME_FORMAT = "G:i" +DATETIME_FORMAT = r"j-E, Y-\y\i\l G:i" +YEAR_MONTH_FORMAT = r"F Y-\y\i\l" +MONTH_DAY_FORMAT = "j-E" +SHORT_DATE_FORMAT = "d.m.Y" +SHORT_DATETIME_FORMAT = "d.m.Y H:i" +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%d.%m.%Y", # '25.10.2006' + "%d-%B, %Y-yil", # '25-Oktabr, 2006-yil' +] +DATETIME_INPUT_FORMATS = [ + "%d.%m.%Y %H:%M:%S", # '25.10.2006 14:30:59' + "%d.%m.%Y %H:%M:%S.%f", # '25.10.2006 14:30:59.000200' + "%d.%m.%Y %H:%M", # '25.10.2006 14:30' + "%d-%B, %Y-yil %H:%M:%S", # '25-Oktabr, 2006-yil 14:30:59' + "%d-%B, %Y-yil %H:%M:%S.%f", # '25-Oktabr, 2006-yil 14:30:59.000200' + "%d-%B, %Y-yil %H:%M", # '25-Oktabr, 2006-yil 14:30' +] +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..43a2a61928d77bcfdb2122edf600d5c698e1f231 GIT binary patch literal 17396 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..a0e6eb43f --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1234 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Jannis Leidel , 2011 +# Anh Phan , 2013 +# Thanh Le Viet , 2013 +# Tran , 2011 +# Tran Van , 2011,2013 +# Vuong Nguyen , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-19 20:23+0200\n" +"PO-Revision-Date: 2020-07-14 21:42+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Tiếng Ả Rập" + +msgid "Algerian Arabic" +msgstr "" + +msgid "Asturian" +msgstr "Asturian" + +msgid "Azerbaijani" +msgstr "Tiếng Azerbaijan" + +msgid "Bulgarian" +msgstr "Tiếng Bun-ga-ri" + +msgid "Belarusian" +msgstr "Tiếng Bê-la-rút" + +msgid "Bengali" +msgstr "Tiếng Bengal" + +msgid "Breton" +msgstr "Tiếng Breton" + +msgid "Bosnian" +msgstr "Tiếng Bosnia" + +msgid "Catalan" +msgstr "Tiếng Catala" + +msgid "Czech" +msgstr "Tiếng Séc" + +msgid "Welsh" +msgstr "Xứ Wales" + +msgid "Danish" +msgstr "Tiếng Đan Mạch" + +msgid "German" +msgstr "Tiếng Đức" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Tiếng Hy Lạp" + +msgid "English" +msgstr "Tiếng Anh" + +msgid "Australian English" +msgstr "Tiếng Anh ở Úc" + +msgid "British English" +msgstr "British English" + +msgid "Esperanto" +msgstr "Quốc Tế Ngữ" + +msgid "Spanish" +msgstr "Tiếng Tây Ban Nha" + +msgid "Argentinian Spanish" +msgstr "Argentinian Spanish" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Mexican Spanish" + +msgid "Nicaraguan Spanish" +msgstr "Tiếng Tây Ban Nha-Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Tiếng Vê-nê-du-ê-la" + +msgid "Estonian" +msgstr "Tiếng Estonia" + +msgid "Basque" +msgstr "Tiếng Baxcơ" + +msgid "Persian" +msgstr "Tiếng Ba Tư" + +msgid "Finnish" +msgstr "Tiếng Phần Lan" + +msgid "French" +msgstr "Tiếng Pháp" + +msgid "Frisian" +msgstr "Tiếng Frisco" + +msgid "Irish" +msgstr "Tiếng Ai-len" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Tiếng Pháp cổ" + +msgid "Hebrew" +msgstr "Tiếng Do Thái cổ" + +msgid "Hindi" +msgstr "Tiếng Hindi" + +msgid "Croatian" +msgstr "Tiếng Croatia" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Tiếng Hung-ga-ri" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "Tiếng Khoa học Quốc tế" + +msgid "Indonesian" +msgstr "Tiếng In-đô-nê-xi-a" + +msgid "Igbo" +msgstr "" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Tiếng Aixơlen" + +msgid "Italian" +msgstr "Tiếng Ý" + +msgid "Japanese" +msgstr "Tiếng Nhật Bản" + +msgid "Georgian" +msgstr "Georgian" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Tiếng Kazakh" + +msgid "Khmer" +msgstr "Tiếng Khơ-me" + +msgid "Kannada" +msgstr "Tiếng Kannada" + +msgid "Korean" +msgstr "Tiếng Hàn Quốc" + +msgid "Kyrgyz" +msgstr "" + +msgid "Luxembourgish" +msgstr "Tiếng Luxembourg" + +msgid "Lithuanian" +msgstr "Tiếng Lat-vi" + +msgid "Latvian" +msgstr "Ngôn ngữ vùng Bantic" + +msgid "Macedonian" +msgstr "Tiếng Maxêđôni" + +msgid "Malayalam" +msgstr "Tiếng Malayalam" + +msgid "Mongolian" +msgstr "Tiếng Mông Cổ" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "My-an-ma" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nê-pan" + +msgid "Dutch" +msgstr "Tiếng Hà Lan" + +msgid "Norwegian Nynorsk" +msgstr "Tiếng Na Uy Nynorsk" + +msgid "Ossetic" +msgstr "Ô-sét-ti-a" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Tiếng Ba lan" + +msgid "Portuguese" +msgstr "Tiếng Bồ Đào Nha" + +msgid "Brazilian Portuguese" +msgstr "Brazilian Portuguese" + +msgid "Romanian" +msgstr "Tiếng Ru-ma-ni" + +msgid "Russian" +msgstr "Tiếng Nga" + +msgid "Slovak" +msgstr "Ngôn ngữ Slô-vac" + +msgid "Slovenian" +msgstr "Tiếng Slôven" + +msgid "Albanian" +msgstr "Tiếng Albania" + +msgid "Serbian" +msgstr "Tiếng Xéc-bi" + +msgid "Serbian Latin" +msgstr "Serbian Latin" + +msgid "Swedish" +msgstr "Tiếng Thụy Điển" + +msgid "Swahili" +msgstr "Xì-qua-hi-đi thuộc ngôn ngữ Bantu" + +msgid "Tamil" +msgstr "Tiếng Ta-min" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "Tiếng Thái" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "Tiếng Thổ Nhĩ Kỳ" + +msgid "Tatar" +msgstr "Tác-ta" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Tiếng Ukraina" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "Tiếng Việt Nam" + +msgid "Simplified Chinese" +msgstr "Tiếng Tàu giản thể" + +msgid "Traditional Chinese" +msgstr "Tiếng Tàu truyền thống" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "Bản đồ trang web" + +msgid "Static Files" +msgstr "Tập tin tĩnh" + +msgid "Syndication" +msgstr "Syndication" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Nhập một giá trị hợp lệ." + +msgid "Enter a valid URL." +msgstr "Nhập một URL hợp lệ." + +msgid "Enter a valid integer." +msgstr "Nhập một số nguyên hợp lệ." + +msgid "Enter a valid email address." +msgstr "Nhập địa chỉ email." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Nhập một địa chỉ IPv4 hợp lệ." + +msgid "Enter a valid IPv6 address." +msgstr "Nhập địa chỉ IPv6 hợp lệ" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Nhập địa chỉ IPv4 hoặc IPv6 hợp lệ" + +msgid "Enter only digits separated by commas." +msgstr "Chỉ nhập chữ số, cách nhau bằng dấu phẩy." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Đảm bảo giá trị này là %(limit_value)s (nó là %(show_value)s )." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Đảm bảo giá trị này là nhỏ hơn hoặc bằng với %(limit_value)s ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Đảm bảo giá trị này lớn hơn hoặc bằng với %(limit_value)s ." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Giá trị này phải có ít nhất %(limit_value)d kí tự (hiện có %(show_value)d)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Giá trị này chỉ có tối đa %(limit_value)d kí tự (hiện có %(show_value)d)" + +msgid "Enter a number." +msgstr "Nhập một số." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Đảm bảo rằng tối đa không có nhiều hơn %(max)s số." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Hãy chắc chắn rằng không có nhiều hơn %(max)s chữ số thập phân." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Hãy chắc chắn rằng không có nhiều hơn %(max)s chữ số trước dấu phẩy thập " +"phân." + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "và" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s với thông tin %(field_labels)s đã tồn tại" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Giá trị %(value)r không phải là lựa chọn hợp lệ." + +msgid "This field cannot be null." +msgstr "Trường này không thể để trống." + +msgid "This field cannot be blank." +msgstr "Trường này không được để trắng." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s có %(field_label)s đã tồn tại." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s phải là duy nhất %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Trường thuộc dạng: %(field_type)s " + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (hoặc là Đúng hoặc là Sai)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Chuỗi (dài đến %(max_length)s ký tự )" + +msgid "Comma-separated integers" +msgstr "Các số nguyên được phân cách bằng dấu phẩy" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Ngày (không có giờ)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Ngày (có giờ)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Số thập phân" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Địa chỉ email" + +msgid "File path" +msgstr "Đường dẫn tắt tới file" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Giá trị dấu chấm động" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "Số nguyên" + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +msgid "IPv4 address" +msgstr "Địa chỉ IPv4" + +msgid "IP address" +msgstr "Địa chỉ IP" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Luận lý (Có thể Đúng, Sai hoặc Không cái nào đúng)" + +msgid "Positive big integer" +msgstr "" + +msgid "Positive integer" +msgstr "Số nguyên dương" + +msgid "Positive small integer" +msgstr "Số nguyên dương nhỏ" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug(lên đến %(max_length)s)" + +msgid "Small integer" +msgstr "Số nguyên nhỏ" + +msgid "Text" +msgstr "Đoạn văn" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Giờ" + +msgid "URL" +msgstr "Đường dẫn URL" + +msgid "Raw binary data" +msgstr "Dữ liệu nhị phân " + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Image" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Khóa ngoại (kiểu được xác định bởi trường liên hệ)" + +msgid "One-to-one relationship" +msgstr "Mối quan hệ một-một" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Mối quan hệ nhiều-nhiều" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Trường này là bắt buộc." + +msgid "Enter a whole number." +msgstr "Nhập một số tổng thể." + +msgid "Enter a valid date." +msgstr "Nhập một ngày hợp lệ." + +msgid "Enter a valid time." +msgstr "Nhập một thời gian hợp lệ." + +msgid "Enter a valid date/time." +msgstr "Nhập một ngày/thời gian hợp lệ." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Không có tập tin nào được gửi. Hãy kiểm tra kiểu mã hóa của biểu mẫu." + +msgid "No file was submitted." +msgstr "Không có tập tin nào được gửi." + +msgid "The submitted file is empty." +msgstr "Tập tin được gửi là rỗng." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "Tên tệp tin có tối đa %(max)d kí tự (Hiện có %(length)d)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Vui lòng gửi một tập tin hoặc để ô chọn trắng, không chọn cả hai." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Hãy tải lên một hình ảnh hợp lệ. Tập tin mà bạn đã tải không phải là hình " +"ảnh hoặc đã bị hư hỏng." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Hãy chọn một lựa chọn hợp lệ. %(value)s không phải là một trong các lựa chọn " +"khả thi." + +msgid "Enter a list of values." +msgstr "Nhập một danh sách giá trị." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Trường ẩn %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Vui lòng đệ trình %d hoặc ít các mẫu đơn hơn." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "Thứ tự" + +msgid "Delete" +msgstr "Xóa" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Hãy sửa các dữ liệu trùng lặp cho %(field)s ." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Hãy sửa các dữ liệu trùng lặp cho %(field)s, mà phải là duy nhất." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Hãy sửa các dữ liệu trùng lặp cho %(field_name)s mà phải là duy nhất cho " +"%(lookup)s tại %(date_field)s ." + +msgid "Please correct the duplicate values below." +msgstr "Hãy sửa các giá trị trùng lặp dưới đây." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Hãy chọn một lựa chọn hợp lệ. Lựa chọn đó không phải là một trong các lựa " +"chọn khả thi." + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Xóa" + +msgid "Currently" +msgstr "Hiện nay" + +msgid "Change" +msgstr "Thay đổi" + +msgid "Unknown" +msgstr "Chưa xác định" + +msgid "Yes" +msgstr "Có" + +msgid "No" +msgstr "Không" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "Có,Không,Có thể" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "chiều" + +msgid "AM" +msgstr "sáng" + +msgid "midnight" +msgstr "Nửa đêm" + +msgid "noon" +msgstr "Buổi trưa" + +msgid "Monday" +msgstr "Thứ 2" + +msgid "Tuesday" +msgstr "Thứ 3" + +msgid "Wednesday" +msgstr "Thứ 4" + +msgid "Thursday" +msgstr "Thứ 5" + +msgid "Friday" +msgstr "Thứ 6" + +msgid "Saturday" +msgstr "Thứ 7" + +msgid "Sunday" +msgstr "Chủ nhật" + +msgid "Mon" +msgstr "Thứ 2" + +msgid "Tue" +msgstr "Thứ 3" + +msgid "Wed" +msgstr "Thứ 4" + +msgid "Thu" +msgstr "Thứ 5" + +msgid "Fri" +msgstr "Thứ 6" + +msgid "Sat" +msgstr "Thứ 7" + +msgid "Sun" +msgstr "Chủ nhật" + +msgid "January" +msgstr "Tháng 1" + +msgid "February" +msgstr "Tháng 2" + +msgid "March" +msgstr "Tháng 3" + +msgid "April" +msgstr "Tháng 4" + +msgid "May" +msgstr "Tháng 5" + +msgid "June" +msgstr "Tháng 6" + +msgid "July" +msgstr "Tháng 7" + +msgid "August" +msgstr "Tháng 8" + +msgid "September" +msgstr "Tháng 9" + +msgid "October" +msgstr "Tháng 10" + +msgid "November" +msgstr "Tháng 11" + +msgid "December" +msgstr "Tháng 12" + +msgid "jan" +msgstr "Tháng 1" + +msgid "feb" +msgstr "Tháng 2" + +msgid "mar" +msgstr "Tháng 3" + +msgid "apr" +msgstr "Tháng 4" + +msgid "may" +msgstr "Tháng 5" + +msgid "jun" +msgstr "Tháng 6" + +msgid "jul" +msgstr "Tháng 7" + +msgid "aug" +msgstr "Tháng 8" + +msgid "sep" +msgstr "Tháng 9" + +msgid "oct" +msgstr "Tháng 10" + +msgid "nov" +msgstr "Tháng 11" + +msgid "dec" +msgstr "Tháng 12" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Tháng 1." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Tháng 2." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Tháng ba" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Tháng tư" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Tháng năm" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Tháng sáu" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Tháng bảy" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Tháng 8." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Tháng 9." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Tháng 10." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Tháng 11." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Tháng 12." + +msgctxt "alt. month" +msgid "January" +msgstr "Tháng một" + +msgctxt "alt. month" +msgid "February" +msgstr "Tháng hai" + +msgctxt "alt. month" +msgid "March" +msgstr "Tháng ba" + +msgctxt "alt. month" +msgid "April" +msgstr "Tháng tư" + +msgctxt "alt. month" +msgid "May" +msgstr "Tháng năm" + +msgctxt "alt. month" +msgid "June" +msgstr "Tháng sáu" + +msgctxt "alt. month" +msgid "July" +msgstr "Tháng bảy" + +msgctxt "alt. month" +msgid "August" +msgstr "Tháng tám" + +msgctxt "alt. month" +msgid "September" +msgstr "Tháng Chín" + +msgctxt "alt. month" +msgid "October" +msgstr "Tháng Mười" + +msgctxt "alt. month" +msgid "November" +msgstr "Tháng mười một" + +msgctxt "alt. month" +msgid "December" +msgstr "Tháng mười hai" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "hoặc" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d năm" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d tháng" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tuần" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ngày" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d giờ" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d phút" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Không có năm xác định" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Không có tháng xác định" + +msgid "No day specified" +msgstr "Không có ngày xác định" + +msgid "No week specified" +msgstr "Không có tuần xác định" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Không có %(verbose_name_plural)s phù hợp" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s trong tương lai không có sẵn vì %(class_name)s." +"allow_future là False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Không có %(verbose_name)s tìm thấy phù hợp với truy vấn" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Trang không hợp lệ (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Tại đây không cho phép đánh số chỉ mục dành cho thư mục." + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Index của %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/Lib/site-packages/django/conf/locale/vi/__init__.py b/venv/Lib/site-packages/django/conf/locale/vi/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/vi/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/vi/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e46b930383668622cdf5559ce391f6b2464c0ec GIT binary patch literal 195 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ovsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lS*Ct`d}dx|NqoFsLFFwDo80`A(wtN~ Mkp0C>K!Sw<04sbn;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/vi/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/vi/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..999fef524f29b2cfccb878b36a431cacf7954e19 GIT binary patch literal 521 zcmah`!A`W}Er@4&Ah z@#NJn;N%vA;K{ey*`0YaFWIbLDC9U+Uk@MSU4r92V{%$NBX?}mD+ZWD9Oe;^6DWa` zD2W9m;1o*XG)m(P%3u+RINRsSxkzGm=)!dK0xJni5W?f;6+DT=&}De~~36#JTPn4{CF7f0#OI7Mx=I&yo|S9`J{o4SEYrlt@2a#uNO zZ(NXM58lI$H0m&*B%okKlv<$pcH|N-q;T(qS~P~H6VR~I3;Y?eLs$}T32kQ#)Coyt zVcAdClu*Dk%bWT&+xI55xo=x@Qd>H;i66LDNUMw0R=jb29L>pX{F$`GKoA7}WQijG E4ftx3?EnA( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/vi/formats.py b/venv/Lib/site-packages/django/conf/locale/vi/formats.py new file mode 100644 index 000000000..7b7602044 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/vi/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r"\N\gà\y d \t\há\n\g n \nă\m Y" +TIME_FORMAT = "H:i" +DATETIME_FORMAT = r"H:i \N\gà\y d \t\há\n\g n \nă\m Y" +YEAR_MONTH_FORMAT = "F Y" +MONTH_DAY_FORMAT = "j F" +SHORT_DATE_FORMAT = "d-m-Y" +SHORT_DATETIME_FORMAT = "H:i d-m-Y" +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = "," +THOUSAND_SEPARATOR = "." +# NUMBER_GROUPING = diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c61602f2fae2363717cd82830b3e99fae9bd6a81 GIT binary patch literal 26198 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..8f4468254 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,1287 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# HuanCheng Bai白宦成 , 2017-2018 +# lanbla , 2021 +# Daniel Duan , 2013 +# jamin M , 2019 +# Jannis Leidel , 2011 +# Kevin Sze , 2012 +# Lele Long , 2011,2015,2017 +# Le Yang , 2018 +# li beite , 2020 +# Liping Wang , 2016-2017 +# matthew Yip , 2020 +# mozillazg , 2016 +# Ronald White , 2014 +# Lemon Li , 2013 +# Ray Wang , 2017 +# slene , 2011 +# Sun Liwen , 2014 +# Suntravel Chris , 2019 +# Veoco , 2021 +# Liping Wang , 2016 +# Wentao Han , 2018 +# wolf ice , 2020 +# Xiang Yu , 2014 +# Jeff Yin , 2013 +# Zhengyang Wang , 2017 +# ced773123cfad7b4e8b79ca80f736af9, 2011-2012 +# Ziya Tang , 2018 +# 付峥 , 2018 +# fangjiaqi77 <370358679@qq.com>, 2020 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 03:05+0000\n" +"Last-Translator: lanbla \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "南非荷兰语" + +msgid "Arabic" +msgstr "阿拉伯语" + +msgid "Algerian Arabic" +msgstr "阿尔及利亚的阿拉伯语" + +msgid "Asturian" +msgstr "阿斯图里亚斯" + +msgid "Azerbaijani" +msgstr "阿塞拜疆语" + +msgid "Bulgarian" +msgstr "保加利亚语" + +msgid "Belarusian" +msgstr "白俄罗斯语" + +msgid "Bengali" +msgstr "孟加拉语" + +msgid "Breton" +msgstr "布雷顿" + +msgid "Bosnian" +msgstr "波斯尼亚语" + +msgid "Catalan" +msgstr "加泰罗尼亚语" + +msgid "Czech" +msgstr "捷克语" + +msgid "Welsh" +msgstr "威尔士语" + +msgid "Danish" +msgstr "丹麦语" + +msgid "German" +msgstr "德语" + +msgid "Lower Sorbian" +msgstr "下索布" + +msgid "Greek" +msgstr "希腊语" + +msgid "English" +msgstr "英语" + +msgid "Australian English" +msgstr "澳大利亚英语" + +msgid "British English" +msgstr "英国英语" + +msgid "Esperanto" +msgstr "世界语" + +msgid "Spanish" +msgstr "西班牙语" + +msgid "Argentinian Spanish" +msgstr "阿根廷西班牙语" + +msgid "Colombian Spanish" +msgstr "哥伦比亚西班牙语" + +msgid "Mexican Spanish" +msgstr "墨西哥西班牙语" + +msgid "Nicaraguan Spanish" +msgstr "尼加拉瓜西班牙语" + +msgid "Venezuelan Spanish" +msgstr "委内瑞拉西班牙语" + +msgid "Estonian" +msgstr "爱沙尼亚语" + +msgid "Basque" +msgstr "巴斯克语" + +msgid "Persian" +msgstr "波斯语" + +msgid "Finnish" +msgstr "芬兰语" + +msgid "French" +msgstr "法语" + +msgid "Frisian" +msgstr "夫里斯兰语" + +msgid "Irish" +msgstr "爱尔兰语" + +msgid "Scottish Gaelic" +msgstr "苏格兰盖尔语" + +msgid "Galician" +msgstr "加利西亚语" + +msgid "Hebrew" +msgstr "希伯来语" + +msgid "Hindi" +msgstr "北印度语" + +msgid "Croatian" +msgstr "克罗地亚语" + +msgid "Upper Sorbian" +msgstr "上索布" + +msgid "Hungarian" +msgstr "匈牙利语" + +msgid "Armenian" +msgstr "亚美尼亚语" + +msgid "Interlingua" +msgstr "国际语" + +msgid "Indonesian" +msgstr "印尼语" + +msgid "Igbo" +msgstr "伊博" + +msgid "Ido" +msgstr "简化伊多语" + +msgid "Icelandic" +msgstr "冰岛语" + +msgid "Italian" +msgstr "意大利语" + +msgid "Japanese" +msgstr "日语" + +msgid "Georgian" +msgstr "格鲁吉亚语" + +msgid "Kabyle" +msgstr "卡拜尔语" + +msgid "Kazakh" +msgstr "哈萨克语" + +msgid "Khmer" +msgstr "高棉语" + +msgid "Kannada" +msgstr "埃纳德语" + +msgid "Korean" +msgstr "韩语" + +msgid "Kyrgyz" +msgstr "吉尔吉斯坦语" + +msgid "Luxembourgish" +msgstr "卢森堡语" + +msgid "Lithuanian" +msgstr "立陶宛语" + +msgid "Latvian" +msgstr "拉脱维亚语" + +msgid "Macedonian" +msgstr "马其顿语" + +msgid "Malayalam" +msgstr "马来亚拉姆语" + +msgid "Mongolian" +msgstr "蒙古语" + +msgid "Marathi" +msgstr "马拉地语" + +msgid "Malay" +msgstr "马来语" + +msgid "Burmese" +msgstr "缅甸语" + +msgid "Norwegian Bokmål" +msgstr "挪威博克马尔" + +msgid "Nepali" +msgstr "尼泊尔语" + +msgid "Dutch" +msgstr "荷兰语" + +msgid "Norwegian Nynorsk" +msgstr "新挪威语" + +msgid "Ossetic" +msgstr "奥塞梯语" + +msgid "Punjabi" +msgstr "旁遮普语 " + +msgid "Polish" +msgstr "波兰语" + +msgid "Portuguese" +msgstr "葡萄牙语" + +msgid "Brazilian Portuguese" +msgstr "巴西葡萄牙语" + +msgid "Romanian" +msgstr "罗马尼亚语" + +msgid "Russian" +msgstr "俄语" + +msgid "Slovak" +msgstr "斯洛伐克语" + +msgid "Slovenian" +msgstr "斯洛文尼亚语" + +msgid "Albanian" +msgstr "阿尔巴尼亚语" + +msgid "Serbian" +msgstr "塞尔维亚语" + +msgid "Serbian Latin" +msgstr "塞尔维亚拉丁语" + +msgid "Swedish" +msgstr "瑞典语" + +msgid "Swahili" +msgstr "斯瓦西里语" + +msgid "Tamil" +msgstr "泰米尔语" + +msgid "Telugu" +msgstr "泰卢固语" + +msgid "Tajik" +msgstr "塔吉克语" + +msgid "Thai" +msgstr "泰语" + +msgid "Turkmen" +msgstr "土库曼人" + +msgid "Turkish" +msgstr "土耳其语" + +msgid "Tatar" +msgstr "鞑靼语" + +msgid "Udmurt" +msgstr "乌德穆尔特语" + +msgid "Ukrainian" +msgstr "乌克兰语" + +msgid "Urdu" +msgstr "乌尔都语" + +msgid "Uzbek" +msgstr "乌兹别克语" + +msgid "Vietnamese" +msgstr "越南语" + +msgid "Simplified Chinese" +msgstr "简体中文" + +msgid "Traditional Chinese" +msgstr "繁体中文" + +msgid "Messages" +msgstr "消息" + +msgid "Site Maps" +msgstr "站点地图" + +msgid "Static Files" +msgstr "静态文件" + +msgid "Syndication" +msgstr "联合" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + +msgid "That page number is not an integer" +msgstr "页码不是整数" + +msgid "That page number is less than 1" +msgstr "页码小于 1" + +msgid "That page contains no results" +msgstr "本页结果为空" + +msgid "Enter a valid value." +msgstr "输入一个有效的值。" + +msgid "Enter a valid URL." +msgstr "输入一个有效的 URL。" + +msgid "Enter a valid integer." +msgstr "输入一个有效的整数。" + +msgid "Enter a valid email address." +msgstr "输入一个有效的 Email 地址。" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "输入由字母,数字,下划线或连字符号组成的有效“字段”。" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "输入由Unicode字母,数字,下划线或连字符号组成的有效“字段”。" + +msgid "Enter a valid IPv4 address." +msgstr "输入一个有效的 IPv4 地址。" + +msgid "Enter a valid IPv6 address." +msgstr "输入一个有效的 IPv6 地址。" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "输入一个有效的 IPv4 或 IPv6 地址." + +msgid "Enter only digits separated by commas." +msgstr "只能输入用逗号分隔的数字。" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "确保该值为 %(limit_value)s (现在为 %(show_value)s)。" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "确保该值小于或等于%(limit_value)s。" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "确保该值大于或等于%(limit_value)s。" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"确保该变量至少包含 %(limit_value)d 字符(目前字符数 %(show_value)d)。" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"确保该变量包含不超过 %(limit_value)d 字符 (目前字符数 %(show_value)d)。" + +msgid "Enter a number." +msgstr "输入一个数字。" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "确认总共不超过 %(max)s 个数字." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "确认小数不超过 %(max)s 位." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "确认小数点前不超过 %(max)s 位。" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" +"文件扩展“%(extension)s”是不被允许。允许的扩展为:%(allowed_extensions)s。" + +msgid "Null characters are not allowed." +msgstr "不允许是用空字符串。" + +msgid "and" +msgstr "和" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "包含 %(field_labels)s 的 %(model_name)s 已经存在。" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "值 %(value)r 不是有效选项。" + +msgid "This field cannot be null." +msgstr "这个值不能为 null。" + +msgid "This field cannot be blank." +msgstr "此字段不能为空。" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "具有 %(field_label)s 的 %(model_name)s 已存在。" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s 必须在 %(date_field_label)s 字段查找类型为 %(lookup_type)s 中" +"唯一。" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "字段类型:%(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "“%(value)s”的值应该为True或False" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "“%(value)s”的值应该为True,False或None" + +msgid "Boolean (Either True or False)" +msgstr "布尔值( True或False )" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "字符串(最长 %(max_length)s 位)" + +msgid "Comma-separated integers" +msgstr "逗号分隔的整数" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "“%(value)s”的值有一个错误的日期格式。它的格式应该是YYYY-MM-DD" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "“%(value)s”的值有正确的格式(YYYY-MM-DD)但它是一个错误的日期" + +msgid "Date (without time)" +msgstr "日期(不带时分)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"“%(value)s”的值有一个错误的日期格式。它的格式应该是YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] " + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"“%(value)s”的值有正确的格式 (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) 但它是一个错" +"误的日期/时间" + +msgid "Date (with time)" +msgstr "日期(带时分)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "“%(value)s”的值应该是一个十进制数字。" + +msgid "Decimal number" +msgstr "小数" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" +"“%(value)s”的值有一个错误的格式。它的格式应该是[DD] [[HH:]MM:]ss[.uuuuuu] " + +msgid "Duration" +msgstr "时长" + +msgid "Email address" +msgstr "Email 地址" + +msgid "File path" +msgstr "文件路径" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "“%(value)s”的值应该是一个浮点数" + +msgid "Floating point number" +msgstr "浮点数" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "“%(value)s”的值应该是一个整型" + +msgid "Integer" +msgstr "整数" + +msgid "Big (8 byte) integer" +msgstr "大整数(8字节)" + +msgid "Small integer" +msgstr "小整数" + +msgid "IPv4 address" +msgstr "IPv4 地址" + +msgid "IP address" +msgstr "IP 地址" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "“%(value)s”的值应该是None、True或False" + +msgid "Boolean (Either True, False or None)" +msgstr "布尔值(True、False或None)" + +msgid "Positive big integer" +msgstr "正大整数" + +msgid "Positive integer" +msgstr "正整数" + +msgid "Positive small integer" +msgstr "正小整数" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (多达 %(max_length)s)" + +msgid "Text" +msgstr "文本" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "“%(value)s”的值有一个错误的格式。它的格式应该是HH:MM[:ss[.uuuuuu]]" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "“%(value)s”的值有正确的格式(HH:MM[:ss[.uuuuuu]]),但它是一个错误的时间" + +msgid "Time" +msgstr "时间" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "原始二进制数据" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "“%(value)s”不是一个有效的UUID" + +msgid "Universally unique identifier" +msgstr "通用唯一识别码" + +msgid "File" +msgstr "文件" + +msgid "Image" +msgstr "图像" + +msgid "A JSON object" +msgstr "一个JSON对象" + +msgid "Value must be valid JSON." +msgstr "值必须是有效的JSON。" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "包含%(field)s %(value)r的%(model)s实例不存在。" + +msgid "Foreign Key (type determined by related field)" +msgstr "外键(由相关字段确定)" + +msgid "One-to-one relationship" +msgstr "一对一关系" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s关系" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s关系" + +msgid "Many-to-many relationship" +msgstr "多对多关系" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "这个字段是必填项。" + +msgid "Enter a whole number." +msgstr "输入整数。" + +msgid "Enter a valid date." +msgstr "输入一个有效的日期。" + +msgid "Enter a valid time." +msgstr "输入一个有效的时间。" + +msgid "Enter a valid date/time." +msgstr "输入一个有效的日期/时间。" + +msgid "Enter a valid duration." +msgstr "请输入有效的时长。" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "天数应该在 {min_days} 和 {max_days} 之间。" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "未提交文件。请检查表单的编码类型。" + +msgid "No file was submitted." +msgstr "没有提交文件。" + +msgid "The submitted file is empty." +msgstr "所提交的是空文件。" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "确保该文件名长度不超过 %(max)d 字符(目前字符数 %(length)d)。" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "请提交文件或勾选清除复选框,两者其一即可。" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "请上传一张有效的图片。您所上传的文件不是图片或者是已损坏的图片。" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "选择一个有效的选项。 %(value)s 不在可用的选项中。" + +msgid "Enter a list of values." +msgstr "输入一系列值。" + +msgid "Enter a complete value." +msgstr "请输入完整的值。" + +msgid "Enter a valid UUID." +msgstr "请输入有效UUID。" + +msgid "Enter a valid JSON." +msgstr "输入一个有效的JSON。" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(隐藏字段 %(name)s) %(error)s" + +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm 数据缺失或被篡改。缺少的字段: %(field_names)s。如果问题持续存" +"在,你可能需要提交错误报告。" + +#, python-format +msgid "Please submit at most %d form." +msgid_plural "Please submit at most %d forms." +msgstr[0] "请最多提交 %d 个表单。" + +#, python-format +msgid "Please submit at least %d form." +msgid_plural "Please submit at least %d forms." +msgstr[0] "请至少提交 %d 个表单。" + +msgid "Order" +msgstr "排序" + +msgid "Delete" +msgstr "删除" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "请修改%(field)s的重复数据" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "请修改%(field)s的重复数据.这个字段必须唯一" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"请修正%(field_name)s的重复数据。%(date_field)s %(lookup)s 在 %(field_name)s " +"必须保证唯一." + +msgid "Please correct the duplicate values below." +msgstr "请修正重复的数据." + +msgid "The inline value did not match the parent instance." +msgstr "内联值与父实例不匹配。" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "选择一个有效的选项: 该选择不在可用的选项中。" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "“%(pk)s”不是一个有效的值" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s无法在时区%(current_timezone)s被解析;它可能是模糊的,也可能是不" +"存在的。" + +msgid "Clear" +msgstr "清除" + +msgid "Currently" +msgstr "目前" + +msgid "Change" +msgstr "修改" + +msgid "Unknown" +msgstr "未知" + +msgid "Yes" +msgstr "是" + +msgid "No" +msgstr "否" + +#. Translators: Please do not add spaces around commas. +msgid "yes,no,maybe" +msgstr "是、否、也许" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d 字节" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "午夜" + +msgid "noon" +msgstr "中午" + +msgid "Monday" +msgstr "星期一" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Thursday" +msgstr "星期四" + +msgid "Friday" +msgstr "星期五" + +msgid "Saturday" +msgstr "星期六" + +msgid "Sunday" +msgstr "星期日" + +msgid "Mon" +msgstr "星期一" + +msgid "Tue" +msgstr "星期二" + +msgid "Wed" +msgstr "星期三" + +msgid "Thu" +msgstr "星期四" + +msgid "Fri" +msgstr "星期五" + +msgid "Sat" +msgstr "星期六" + +msgid "Sun" +msgstr "星期日" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgid "jan" +msgstr "一月" + +msgid "feb" +msgstr "二月" + +msgid "mar" +msgstr "三月" + +msgid "apr" +msgstr "四月" + +msgid "may" +msgstr "五月" + +msgid "jun" +msgstr "六月" + +msgid "jul" +msgstr "七月" + +msgid "aug" +msgstr "八月" + +msgid "sep" +msgstr "九月" + +msgid "oct" +msgstr "十月" + +msgid "nov" +msgstr "十一月" + +msgid "dec" +msgstr "十二月" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "一月" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "二月" + +msgctxt "abbrev. month" +msgid "March" +msgstr "三月" + +msgctxt "abbrev. month" +msgid "April" +msgstr "四月" + +msgctxt "abbrev. month" +msgid "May" +msgstr "五月" + +msgctxt "abbrev. month" +msgid "June" +msgstr "六月" + +msgctxt "abbrev. month" +msgid "July" +msgstr "七月" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "八月" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "九月" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "十月" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "十一月" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "十二月" + +msgctxt "alt. month" +msgid "January" +msgstr "一月" + +msgctxt "alt. month" +msgid "February" +msgstr "二月" + +msgctxt "alt. month" +msgid "March" +msgstr "三月" + +msgctxt "alt. month" +msgid "April" +msgstr "四月" + +msgctxt "alt. month" +msgid "May" +msgstr "五月" + +msgctxt "alt. month" +msgid "June" +msgstr "六月" + +msgctxt "alt. month" +msgid "July" +msgstr "七月" + +msgctxt "alt. month" +msgid "August" +msgstr "八月" + +msgctxt "alt. month" +msgid "September" +msgstr "九月" + +msgctxt "alt. month" +msgid "October" +msgstr "十月" + +msgctxt "alt. month" +msgid "November" +msgstr "十一月" + +msgctxt "alt. month" +msgid "December" +msgstr "十二月" + +msgid "This is not a valid IPv6 address." +msgstr "该值不是合法的IPv6地址。" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s" + +msgid "or" +msgstr "或" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d 年" + +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d 月" + +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d 周" + +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d 日" + +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d 小时" + +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d 分钟" + +msgid "Forbidden" +msgstr "禁止访问" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF验证失败. 请求被中断." + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"您看到此消息是由于HTTPS站点需要您的浏览器发送 'Referer header',但是该信息并" +"未被发送。出于安全原因,此HTTP头是必需的,以确保您的浏览器不会被第三方劫持。" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" +"如果您已将浏览器配置为禁用“ Referer”头,请重新启用它们,至少针对此站点,或" +"HTTPS连接或“同源”请求。" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"如果您使用的是标签或包" +"含“Referrer-Policy: no-referrer”的HTTP头,请将其删除。CSRF保护要求“Referer”头" +"执行严格的Referer检查。如果你担心隐私问题,可以使用类似这样的替代方法链接到第三方网站。" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"您看到此消息是由于该站点在提交表单时需要一个CSRF cookie。此项是出于安全考虑," +"以确保您的浏览器没有被第三方劫持。" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" +"如果您已将浏览器配置为禁用cookie,请重新启用它们,至少针对此站点或“同源”请" +"求。" + +msgid "More information is available with DEBUG=True." +msgstr "更多可用信息请设置选项DEBUG=True。" + +msgid "No year specified" +msgstr "没有指定年" + +msgid "Date out of range" +msgstr "日期超出范围。" + +msgid "No month specified" +msgstr "没有指定月" + +msgid "No day specified" +msgstr "没有指定天" + +msgid "No week specified" +msgstr "没有指定周" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s 可用" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"因为 %(class_name)s.allow_future 设置为 False,所以特性 " +"%(verbose_name_plural)s 不可用。" + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "日期字符串“%(datestr)s”与格式“%(format)s”不匹配" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "没有找到符合查询的 %(verbose_name)s" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "页面不是最后一页,也不能被转为整数型" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "非法页面 (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "列表是空的并且“%(class_name)s.allow_empty”是False" + +msgid "Directory indexes are not allowed here." +msgstr "这里不允许目录索引" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "”%(path)s\"不存在" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s的索引" + +msgid "The install worked successfully! Congratulations!" +msgstr "" +"安装成功!\n" +"祝贺!" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"查看 Django %(version)s 的 release notes " + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"您现在看见这个页面,因为您设置了 DEBUG=True 并且您还没有配置任何URLs。" + +msgid "Django Documentation" +msgstr "Django 文档" + +msgid "Topics, references, & how-to’s" +msgstr "主题,参考资料和操作方法" + +msgid "Tutorial: A Polling App" +msgstr "教程:投票应用" + +msgid "Get started with Django" +msgstr "开始使用 Django" + +msgid "Django Community" +msgstr "Django 社区" + +msgid "Connect, get help, or contribute" +msgstr "联系,获取帮助,贡献代码" diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hans/__init__.py b/venv/Lib/site-packages/django/conf/locale/zh_Hans/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e6d4ba47e92104fd0ff12be121f058f5312849f GIT binary patch literal 200 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_^vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lRYtr=VqUR+e0*kJW=VX!UP0w84x8Nk Rl+v73JCGxanScZf0{~A-Hqrn9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/zh_Hans/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..581d2bf14cafe86750f17194076096a7db708860 GIT binary patch literal 912 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 j?S7-Wgfo3Ly}(=1pG(Z1iIQ, 2015 +# Eric Ho , 2013 +# ilay , 2012 +# Jannis Leidel , 2011 +# mail6543210 , 2013 +# ming hsien tzang , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016-2017 +# Yeh-Yung , 2013 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-27 22:40+0200\n" +"PO-Revision-Date: 2019-11-05 00:38+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "南非語" + +msgid "Arabic" +msgstr "阿拉伯語" + +msgid "Asturian" +msgstr "阿斯圖里亞斯語" + +msgid "Azerbaijani" +msgstr "亞塞拜然語" + +msgid "Bulgarian" +msgstr "保加利亞語" + +msgid "Belarusian" +msgstr "白俄羅斯語" + +msgid "Bengali" +msgstr "孟加拉語" + +msgid "Breton" +msgstr "布列塔尼語" + +msgid "Bosnian" +msgstr "波士尼亞語" + +msgid "Catalan" +msgstr "加泰隆語" + +msgid "Czech" +msgstr "捷克語" + +msgid "Welsh" +msgstr "威爾斯語" + +msgid "Danish" +msgstr "丹麥語" + +msgid "German" +msgstr "德語" + +msgid "Lower Sorbian" +msgstr "下索布語" + +msgid "Greek" +msgstr "希臘語" + +msgid "English" +msgstr "英語" + +msgid "Australian English" +msgstr "澳大利亞英語" + +msgid "British English" +msgstr "英國英語" + +msgid "Esperanto" +msgstr "世界語" + +msgid "Spanish" +msgstr "西班牙語" + +msgid "Argentinian Spanish" +msgstr "阿根廷西班牙語" + +msgid "Colombian Spanish" +msgstr "哥倫比亞西班牙語" + +msgid "Mexican Spanish" +msgstr "墨西哥西班牙語" + +msgid "Nicaraguan Spanish" +msgstr "尼加拉瓜西班牙語" + +msgid "Venezuelan Spanish" +msgstr "委內瑞拉西班牙語" + +msgid "Estonian" +msgstr "愛沙尼亞語" + +msgid "Basque" +msgstr "巴斯克語" + +msgid "Persian" +msgstr "波斯語" + +msgid "Finnish" +msgstr "芬蘭語" + +msgid "French" +msgstr "法語" + +msgid "Frisian" +msgstr "菲士蘭語" + +msgid "Irish" +msgstr "愛爾蘭語" + +msgid "Scottish Gaelic" +msgstr "蘇格蘭蓋爾語" + +msgid "Galician" +msgstr "加利西亞語" + +msgid "Hebrew" +msgstr "希伯來語" + +msgid "Hindi" +msgstr "印地語" + +msgid "Croatian" +msgstr "克羅埃西亞語" + +msgid "Upper Sorbian" +msgstr "上索布語" + +msgid "Hungarian" +msgstr "匈牙利語" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "國際語" + +msgid "Indonesian" +msgstr "印尼語" + +msgid "Ido" +msgstr "伊多語" + +msgid "Icelandic" +msgstr "冰島語" + +msgid "Italian" +msgstr "義大利語" + +msgid "Japanese" +msgstr "日語" + +msgid "Georgian" +msgstr "喬治亞語" + +msgid "Kabyle" +msgstr "卡拜爾語" + +msgid "Kazakh" +msgstr "哈薩克語" + +msgid "Khmer" +msgstr "高棉語" + +msgid "Kannada" +msgstr "康納達語" + +msgid "Korean" +msgstr "韓語" + +msgid "Luxembourgish" +msgstr "盧森堡語" + +msgid "Lithuanian" +msgstr "立陶宛語" + +msgid "Latvian" +msgstr "拉脫維亞語" + +msgid "Macedonian" +msgstr "馬其頓語" + +msgid "Malayalam" +msgstr "馬拉雅拉姆語" + +msgid "Mongolian" +msgstr "蒙古語" + +msgid "Marathi" +msgstr "馬拉提語" + +msgid "Burmese" +msgstr "緬甸語" + +msgid "Norwegian Bokmål" +msgstr "書面挪威語" + +msgid "Nepali" +msgstr "尼泊爾語" + +msgid "Dutch" +msgstr "荷蘭語" + +msgid "Norwegian Nynorsk" +msgstr "新挪威語" + +msgid "Ossetic" +msgstr "奧塞梯語" + +msgid "Punjabi" +msgstr "旁遮普語" + +msgid "Polish" +msgstr "波蘭語" + +msgid "Portuguese" +msgstr "葡萄牙語" + +msgid "Brazilian Portuguese" +msgstr "巴西葡萄牙語" + +msgid "Romanian" +msgstr "羅馬尼亞語" + +msgid "Russian" +msgstr "俄語" + +msgid "Slovak" +msgstr "斯洛伐克語" + +msgid "Slovenian" +msgstr "斯洛維尼亞語" + +msgid "Albanian" +msgstr "阿爾巴尼亞語" + +msgid "Serbian" +msgstr "塞爾維亞語" + +msgid "Serbian Latin" +msgstr "塞爾維亞拉丁語" + +msgid "Swedish" +msgstr "瑞典語" + +msgid "Swahili" +msgstr "斯瓦希里語" + +msgid "Tamil" +msgstr "坦米爾語" + +msgid "Telugu" +msgstr "泰盧固語" + +msgid "Thai" +msgstr "泰語" + +msgid "Turkish" +msgstr "土耳其語" + +msgid "Tatar" +msgstr "韃靼語" + +msgid "Udmurt" +msgstr "烏德穆爾特語" + +msgid "Ukrainian" +msgstr "烏克蘭語" + +msgid "Urdu" +msgstr "烏爾都語" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "越南語" + +msgid "Simplified Chinese" +msgstr "簡體中文" + +msgid "Traditional Chinese" +msgstr "繁體中文" + +msgid "Messages" +msgstr "訊息" + +msgid "Site Maps" +msgstr "網站地圖" + +msgid "Static Files" +msgstr "靜態文件" + +msgid "Syndication" +msgstr "聯播" + +msgid "That page number is not an integer" +msgstr "該頁碼並非整數" + +msgid "That page number is less than 1" +msgstr "該頁碼小於 1" + +msgid "That page contains no results" +msgstr "該頁未包含任何內容" + +msgid "Enter a valid value." +msgstr "請輸入有效的值。" + +msgid "Enter a valid URL." +msgstr "請輸入有效的 URL。" + +msgid "Enter a valid integer." +msgstr "請輸入有效的整數。" + +msgid "Enter a valid email address." +msgstr "請輸入有效的電子郵件地址。" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "請輸入有效的 IPv4 位址。" + +msgid "Enter a valid IPv6 address." +msgstr "請輸入有效的 IPv6 位址。" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "請輸入有效的 IPv4 或 IPv6 位址。" + +msgid "Enter only digits separated by commas." +msgstr "請輸入以逗號分隔的數字。" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "請確認這個值是否為 %(limit_value)s (目前是 %(show_value)s)。" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "請確認此數值是否小於或等於 %(limit_value)s。" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "請確認此數值是否大於或等於 %(limit_value)s。" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"請確認這個值至少包含 %(limit_value)d 個字 (目前為 %(show_value)d 個字)。" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"請確認這個值至多包含 %(limit_value)d 個字 (目前為 %(show_value)d 個字)。" + +msgid "Enter a number." +msgstr "輸入一個數字" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "請確認數字全長不超過 %(max)s 位。" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "請確認十進位數字不多於 %(max)s 位。" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "請確認小數點前不多於 %(max)s 位。" + +#, python-format +msgid "" +"File extension “%(extension)s” is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "不允許空(null)字元。" + +msgid "and" +msgstr "和" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "這個 %(field_labels)s 在 %(model_name)s 已經存在。" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "數值 %(value)r 不是有效的選擇。" + +msgid "This field cannot be null." +msgstr "這個值不能是 null。" + +msgid "This field cannot be blank." +msgstr "這個欄位不能留白。" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "這個 %(field_label)s 在 %(model_name)s 已經存在。" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s 在 %(date_field_label)s %(lookup_type)s 上必須唯一。" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "欄位型態: %(field_type)s" + +#, python-format +msgid "“%(value)s” value must be either True or False." +msgstr "" + +#, python-format +msgid "“%(value)s” value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "布林值 (True 或 False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "字串 (至多 %(max_length)s 個字)" + +msgid "Comma-separated integers" +msgstr "逗號分隔的整數" + +#, python-format +msgid "" +"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "日期 (不包括時間)" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "日期 (包括時間)" + +#, python-format +msgid "“%(value)s” value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "十進位數" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "時間長" + +msgid "Email address" +msgstr "電子郵件地址" + +msgid "File path" +msgstr "檔案路徑" + +#, python-format +msgid "“%(value)s” value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "浮點數" + +#, python-format +msgid "“%(value)s” value must be an integer." +msgstr "" + +msgid "Integer" +msgstr "整數" + +msgid "Big (8 byte) integer" +msgstr "大整數 (8 位元組)" + +msgid "IPv4 address" +msgstr "IPv4 地址" + +msgid "IP address" +msgstr "IP 位址" + +#, python-format +msgid "“%(value)s” value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "布林值 (True, False 或 None)" + +msgid "Positive integer" +msgstr "正整數" + +msgid "Positive small integer" +msgstr "正小整數" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "可讀網址 (長度最多 %(max_length)s)" + +msgid "Small integer" +msgstr "小整數" + +msgid "Text" +msgstr "文字" + +#, python-format +msgid "" +"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "時間" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "原始二進制數據" + +#, python-format +msgid "“%(value)s” is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "檔案" + +msgid "Image" +msgstr "影像" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s 為 %(value)r 的 %(model)s 物件不存在。" + +msgid "Foreign Key (type determined by related field)" +msgstr "外鍵 (型態由關連欄位決定)" + +msgid "One-to-one relationship" +msgstr "一對一關連" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s 關連" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s 關連" + +msgid "Many-to-many relationship" +msgstr "多對多關連" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "這個欄位是必須的。" + +msgid "Enter a whole number." +msgstr "輸入整數" + +msgid "Enter a valid date." +msgstr "輸入有效的日期" + +msgid "Enter a valid time." +msgstr "輸入有效的時間" + +msgid "Enter a valid date/time." +msgstr "輸入有效的日期/時間" + +msgid "Enter a valid duration." +msgstr "輸入有效的時間長。" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "沒有檔案被送出。請檢查表單的編碼類型。" + +msgid "No file was submitted." +msgstr "沒有檔案送出" + +msgid "The submitted file is empty." +msgstr "送出的檔案是空的。" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "請確認這個檔名至多包含 %(max)d 個字 (目前為 %(length)d)。" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "請提交一個檔案或確認清除核可項, 不能兩者都做。" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "上傳一個有效的圖檔。你上傳的檔案為非圖片,不然就是損壞的圖檔。" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "請選擇有效的項目, %(value)s 不是一個可用的選擇。" + +msgid "Enter a list of values." +msgstr "請輸入一個列表的值。" + +msgid "Enter a complete value." +msgstr "請輸入完整的值。" + +msgid "Enter a valid UUID." +msgstr "請輸入有效的 UUID。" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(隱藏欄位 %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm 資料缺失或遭竄改" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "請送出不多於 %d 個表單。" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "請送出多於 %d 個表單。" + +msgid "Order" +msgstr "排序" + +msgid "Delete" +msgstr "刪除" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "請修正 %(field)s 的重覆資料" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "請修正 %(field)s 的重覆資料, 必須為唯一值" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"請修正 %(field_name)s 重複資料, %(date_field)s 的 %(lookup)s 必須是唯一值。" + +msgid "Please correct the duplicate values below." +msgstr "請修正下方重覆的數值" + +msgid "The inline value did not match the parent instance." +msgstr "內含的外鍵無法連接到對應的上層實體。" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "選擇有效的選項: 此選擇不在可用的選項中。" + +#, python-format +msgid "“%(pk)s” is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "清除" + +msgid "Currently" +msgstr "目前" + +msgid "Change" +msgstr "變更" + +msgid "Unknown" +msgstr "未知" + +msgid "Yes" +msgstr "是" + +msgid "No" +msgstr "否" + +msgid "Year" +msgstr "" + +msgid "Month" +msgstr "" + +msgid "Day" +msgstr "" + +msgid "yes,no,maybe" +msgstr "是、否、也許" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d 位元組" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "午夜" + +msgid "noon" +msgstr "中午" + +msgid "Monday" +msgstr "星期一" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Thursday" +msgstr "星期四" + +msgid "Friday" +msgstr "星期五" + +msgid "Saturday" +msgstr "星期六" + +msgid "Sunday" +msgstr "星期日" + +msgid "Mon" +msgstr "星期一" + +msgid "Tue" +msgstr "星期二" + +msgid "Wed" +msgstr "星期三" + +msgid "Thu" +msgstr "星期四" + +msgid "Fri" +msgstr "星期五" + +msgid "Sat" +msgstr "星期六" + +msgid "Sun" +msgstr "星期日" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgid "jan" +msgstr "一月" + +msgid "feb" +msgstr "二月" + +msgid "mar" +msgstr "三月" + +msgid "apr" +msgstr "四月" + +msgid "may" +msgstr "五月" + +msgid "jun" +msgstr "六月" + +msgid "jul" +msgstr "七月" + +msgid "aug" +msgstr "八月" + +msgid "sep" +msgstr "九月" + +msgid "oct" +msgstr "十月" + +msgid "nov" +msgstr "十一月" + +msgid "dec" +msgstr "十二月" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "一月" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "二月" + +msgctxt "abbrev. month" +msgid "March" +msgstr "三月" + +msgctxt "abbrev. month" +msgid "April" +msgstr "四月" + +msgctxt "abbrev. month" +msgid "May" +msgstr "五月" + +msgctxt "abbrev. month" +msgid "June" +msgstr "六月" + +msgctxt "abbrev. month" +msgid "July" +msgstr "七月" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "八月" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "九月" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "十月" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "十一月" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "十二月" + +msgctxt "alt. month" +msgid "January" +msgstr "一月" + +msgctxt "alt. month" +msgid "February" +msgstr "二月" + +msgctxt "alt. month" +msgid "March" +msgstr "三月" + +msgctxt "alt. month" +msgid "April" +msgstr "四月" + +msgctxt "alt. month" +msgid "May" +msgstr "五月" + +msgctxt "alt. month" +msgid "June" +msgstr "六月" + +msgctxt "alt. month" +msgid "July" +msgstr "七月" + +msgctxt "alt. month" +msgid "August" +msgstr "八月" + +msgctxt "alt. month" +msgid "September" +msgstr "九月" + +msgctxt "alt. month" +msgid "October" +msgstr "十月" + +msgctxt "alt. month" +msgid "November" +msgstr "十一月" + +msgctxt "alt. month" +msgid "December" +msgstr "十二月" + +msgid "This is not a valid IPv6 address." +msgstr "這是無效的 IPv6 位址。" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "或" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d 月" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 日" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 時" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" + +msgid "0 minutes" +msgstr "0 分" + +msgid "Forbidden" +msgstr "禁止" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF 驗證失敗。已中止請求。" + +msgid "" +"You are seeing this message because this HTTPS site requires a “Referer " +"header” to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable “Referer” headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin” requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the “Referrer-Policy: no-referrer” header, please remove them. The " +"CSRF protection requires the “Referer” header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"你看到這個訊息,是因為這個網站要求在送出表單包含一個 CSRF cookie。這個 " +"cookie 是用於安全用途,保護你的瀏覽器不被第三方挾持。" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin” requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "設定 DEBUG=True 以獲得更多資訊。" + +msgid "No year specified" +msgstr "不指定年份" + +msgid "Date out of range" +msgstr "日期超過範圍" + +msgid "No month specified" +msgstr "不指定月份" + +msgid "No day specified" +msgstr "不指定日期" + +msgid "No week specified" +msgstr "不指定週數" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s 無法使用" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"未來的 %(verbose_name_plural)s 不可用,因 %(class_name)s.allow_future 為 " +"False." + +#, python-format +msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "無 %(verbose_name)s 符合本次搜尋" + +msgid "Page is not “last”, nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "無效的頁面 (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty” is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "這裡不允許目錄索引。" + +#, python-format +msgid "“%(path)s” does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s 的索引" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django:為有時間壓力的完美主義者設計的網站框架。" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"查看 Django %(version)s 的發行筆記" + +msgid "The install worked successfully! Congratulations!" +msgstr "安裝成功!恭喜!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"你看到這個訊息,是因為你在 Django 設定檔中包含 DEBUG = True,且尚未配置任何網址。開始工作吧!" + +msgid "Django Documentation" +msgstr "Django 文件" + +msgid "Topics, references, & how-to’s" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "教學:投票應用" + +msgid "Get started with Django" +msgstr "初學 Django" + +msgid "Django Community" +msgstr "Django 社群" + +msgid "Connect, get help, or contribute" +msgstr "聯繫、求助、貢獻" diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hant/__init__.py b/venv/Lib/site-packages/django/conf/locale/zh_Hant/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e5c4da54525de3d5f0351ce4717dd74f37432d2 GIT binary patch literal 200 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_^vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-T#eolUJVos`lRYtr=VqS@Ue0*kJW=VX!UP0w84x8Nk Rl+v73JCGxanScZf0{~BKHq!tA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/formats.cpython-310.pyc b/venv/Lib/site-packages/django/conf/locale/zh_Hant/__pycache__/formats.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13c8cd1f7cf7a842866c80431562c8a1294c94ea GIT binary patch literal 912 zcmZ`%%Wj)M6a^bQ_!Y-dQ&nmg+04QVo4pl9r7<>E16Y7nd4!6v2fMfiA_I}?FX$h1 z(^aJ|y6>jHVyUaDks|dAy6PQ2Qk*D*xOdLE=bRZK!b+vc!20v{=jc4oFuy2BuMB{f z@J2Ee!eEB5m?asUAz7Ry9Oi(_0nU>gKA18j|Aoao^aJPx=sffyDc}+*;xZ}W3Mm^* zy^@q6ZutAh_u%I9$Jx!Nugk35@{*%_>?tMr6uAce)^p3kq@G>!Xec0GK!olZ$ZsH$ zRAGeZ0f?S}=n2*%?2uM z1}b^>n4jvOJcxixQTAR6u*vgBf&vJF`HF3>m|G4+YW)zG+M+4h9Zgq66PL`MatEq( zk|t_HNz`pcQ%!kiING4LINUKcL)LWDPN$yyr}pAHJ>8(np{;f7HOgrV>2_Dw2K}De{l+YE z@Hy7y@9d&w4I+0DS$Yyhj@1swiSGt+WOcn*PDWP8TSRfAzX)gUIJU0c;M%(MMpop- zZsW=szjvl?WRaN@OhaKD1`}Z(j-9zHEZ^C(6U4$KT=-5LHLpIb_%lBw$=p4sKWp>? T3deD5`r$b~&*!-^$MWnyR2~Du literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/locale/zh_Hant/formats.py b/venv/Lib/site-packages/django/conf/locale/zh_Hant/formats.py new file mode 100644 index 000000000..79936f8a3 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/locale/zh_Hant/formats.py @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = "Y年n月j日" # 2016年9月5日 +TIME_FORMAT = "H:i" # 20:45 +DATETIME_FORMAT = "Y年n月j日 H:i" # 2016年9月5日 20:45 +YEAR_MONTH_FORMAT = "Y年n月" # 2016年9月 +MONTH_DAY_FORMAT = "m月j日" # 9月5日 +SHORT_DATE_FORMAT = "Y年n月j日" # 2016年9月5日 +SHORT_DATETIME_FORMAT = "Y年n月j日 H:i" # 2016年9月5日 20:45 +FIRST_DAY_OF_WEEK = 1 # 星期一 (Monday) + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y/%m/%d", # '2016/09/05' + "%Y-%m-%d", # '2016-09-05' + "%Y年%n月%j日", # '2016年9月5日' +] + +TIME_INPUT_FORMATS = [ + "%H:%M", # '20:45' + "%H:%M:%S", # '20:45:29' + "%H:%M:%S.%f", # '20:45:29.000200' +] + +DATETIME_INPUT_FORMATS = [ + "%Y/%m/%d %H:%M", # '2016/09/05 20:45' + "%Y-%m-%d %H:%M", # '2016-09-05 20:45' + "%Y年%n月%j日 %H:%M", # '2016年9月5日 14:45' + "%Y/%m/%d %H:%M:%S", # '2016/09/05 20:45:29' + "%Y-%m-%d %H:%M:%S", # '2016-09-05 20:45:29' + "%Y年%n月%j日 %H:%M:%S", # '2016年9月5日 20:45:29' + "%Y/%m/%d %H:%M:%S.%f", # '2016/09/05 20:45:29.000200' + "%Y-%m-%d %H:%M:%S.%f", # '2016-09-05 20:45:29.000200' + "%Y年%n月%j日 %H:%n:%S.%f", # '2016年9月5日 20:45:29.000200' +] + +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "" +NUMBER_GROUPING = 4 diff --git a/venv/Lib/site-packages/django/conf/project_template/manage.py-tpl b/venv/Lib/site-packages/django/conf/project_template/manage.py-tpl new file mode 100644 index 000000000..a628884dc --- /dev/null +++ b/venv/Lib/site-packages/django/conf/project_template/manage.py-tpl @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/django/conf/project_template/project_name/__init__.py-tpl b/venv/Lib/site-packages/django/conf/project_template/project_name/__init__.py-tpl new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/conf/project_template/project_name/asgi.py-tpl b/venv/Lib/site-packages/django/conf/project_template/project_name/asgi.py-tpl new file mode 100644 index 000000000..a82723819 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/project_template/project_name/asgi.py-tpl @@ -0,0 +1,16 @@ +""" +ASGI config for {{ project_name }} project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings') + +application = get_asgi_application() diff --git a/venv/Lib/site-packages/django/conf/project_template/project_name/settings.py-tpl b/venv/Lib/site-packages/django/conf/project_template/project_name/settings.py-tpl new file mode 100644 index 000000000..3b6caab33 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/project_template/project_name/settings.py-tpl @@ -0,0 +1,123 @@ +""" +Django settings for {{ project_name }} project. + +Generated by 'django-admin startproject' using Django {{ django_version }}. + +For more information on this file, see +https://docs.djangoproject.com/en/{{ docs_version }}/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '{{ secret_key }}' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = '{{ project_name }}.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = '{{ project_name }}.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/{{ docs_version }}/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/{{ docs_version }}/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/venv/Lib/site-packages/django/conf/project_template/project_name/urls.py-tpl b/venv/Lib/site-packages/django/conf/project_template/project_name/urls.py-tpl new file mode 100644 index 000000000..e23d6a92b --- /dev/null +++ b/venv/Lib/site-packages/django/conf/project_template/project_name/urls.py-tpl @@ -0,0 +1,21 @@ +"""{{ project_name }} URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/{{ docs_version }}/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/venv/Lib/site-packages/django/conf/project_template/project_name/wsgi.py-tpl b/venv/Lib/site-packages/django/conf/project_template/project_name/wsgi.py-tpl new file mode 100644 index 000000000..1ee28d0e8 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/project_template/project_name/wsgi.py-tpl @@ -0,0 +1,16 @@ +""" +WSGI config for {{ project_name }} project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings') + +application = get_wsgi_application() diff --git a/venv/Lib/site-packages/django/conf/urls/__init__.py b/venv/Lib/site-packages/django/conf/urls/__init__.py new file mode 100644 index 000000000..302f68dd0 --- /dev/null +++ b/venv/Lib/site-packages/django/conf/urls/__init__.py @@ -0,0 +1,9 @@ +from django.urls import include +from django.views import defaults + +__all__ = ["handler400", "handler403", "handler404", "handler500", "include"] + +handler400 = defaults.bad_request +handler403 = defaults.permission_denied +handler404 = defaults.page_not_found +handler500 = defaults.server_error diff --git a/venv/Lib/site-packages/django/conf/urls/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/conf/urls/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9afb0188c0caacf91b958a7cee4d782b61beae3 GIT binary patch literal 466 zcmYk3&uSYn5XPlld+qv9pzqL&53vn(FC~OPLYhMrrq$t|z6 z&{I!^K0!~NO`v!{KYjCQn2}JJPDhO5&-b6}H=MCwU2+@+B^R{f8No2a9c#GYywim% zno^XUZJ8+_x#&T;>x+sw5JTcCF(Qt|#Pq(hS^qb6U^Cthtgl@*Kyqkcqq9qK)^A5Y zv^NfLwOk(Qw?}&QU%y)}vAfx)*;I_pPWx?`XLRw|qaW4ChXCXc)bT~Y>YN|Wx!i7*zf$4z21WIA*oHs-eA@BnMA+?paR5zI3VkZ;h45( z{MDE5?4(cQi;1BYnUCU?_obGjfOCzIv tx&ERKezWLawNT1>o0OXGAKKwr6HIn+PQS(C31Pw}d{|UP#VbDI{{S1VgEs&G literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/conf/urls/__pycache__/i18n.cpython-310.pyc b/venv/Lib/site-packages/django/conf/urls/__pycache__/i18n.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0182561975937b573ace3688fb219f19d6d0b1b5 GIT binary patch literal 1334 zcmZux&2HN`5Eg0Kl5N@j!=iiSp@#_AChe^#7DbD;X%`5JAU_vDT~`)qTV9EDNh)cA z>?ytG4SMLc&#-SIU{8BmV4q+QO=oDkO@R{Nh{K=ZH}idz8Vq_KwEuqpd;HP&ynoQS z+S=eehHfMn?r~Cj34UowDw@xA>}oM7-tA`A3N4%d;oi=kFseKfx{0R3j`Z5|7nz+wj0j?k%1ln{Y$^^uk>>Wo zg&1)$$?EdkT8_73BhV>ysEhXky14_!dUIj|OV7wTV6-jkpFveF$a3bKP7ygh{m^63 zo^a0WOtAH}ELU8x<-N=*CIIdU1MCbyVj}Fgu(LwKp~A39EpuBax#?mZ;8c~JFeS?q zHWsWlf-|>QFs+ouIJuIOUzh|37BUGoFKZ6_R%^>pI)p^xw#MX=@Nob6=(qb1UNwGM z7^^W`-NFr2cj43cwJyykPeylW`Kjysu%`gnjx4@ zJ0z5bq(kUu|5D==Fd9_ZJ5!vB9En=DHDOO-!rTL6y)%&5oILYhU;oq5GzZeoss4$R zGcs?@+Y?HG>wWKSn^PdKb^4bp_@1yeFp@D_FG|7GgxO=o#!8hUljb4YaJ!J^HwU^F zZ&)#5-@)IA*~SmV8Z#jBDtT+(eh?4Ev(o1`5t*5)OO6s)DoJp6GIsVLrrXupK!``d7|5-j`+oF&jYt^%;#;PiRfp2-CWa zmB+uzFpS7`LN9%)Z-RS@uNYs#mJYxL0)3fPA|5tfr*tT+N%~7^Y$A-MKG!p-lO6W@4J=+$*58Kq)FMh{q*OS!EONVo2g>?C{c_N{{V- zfMfsCNrY zmI*Z+26+wVJDh3}mmX1$#tP2qXR7Ie1rxf`Bj@zMhDMic6J3oh?OfD)ZNN3WXj@$FzZS$!g82Ma|s$f2L=Dv$TO|+ln%9sZXL?gASnJGqEKv}eJo=boR693 zc}(wf23%<-JM2^zU{IH-yAna}bKu6Tbo#`eu|b;Y8$jOsmF2ZpE%bTLVi^@F&vXl< z)bsyXY;A1pG|MPwk5Wa=H zlg{CB2uS+~*vJ_e7W>uZmDjtgVA$)U6y~@mN`uIomA*5`*SC)Z zKL!^KzY}QScGX&X5$qyGD%dKN3WMcgIVxBc`fbq;-Uv{7W)tKAk92Uvv!h^Lv;!qH zpUK1MFzj*_49J@`9h^11%nlmn<)?jTAeuL&Oh$Xur44FZmNiN3Yx^4Rqp~>$qqz0Q z&^ZxpFAo7Rnd.*)$" % re.escape(prefix.lstrip("/")), view, kwargs=kwargs + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/__init__.py b/venv/Lib/site-packages/django/contrib/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57367d7ab89fdc0fd65bbc764572d43fb04786ad GIT binary patch literal 188 zcmd1j<>g`kf;Vw@lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_~vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~Ue0*kJW=VX!UP0w84x8Nkl+v73JCMc2OhAH# F0RXM`GI#(0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__init__.py b/venv/Lib/site-packages/django/contrib/admin/__init__.py new file mode 100644 index 000000000..ef5c64ffe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/__init__.py @@ -0,0 +1,50 @@ +from django.contrib.admin.decorators import action, display, register +from django.contrib.admin.filters import ( + AllValuesFieldListFilter, + BooleanFieldListFilter, + ChoicesFieldListFilter, + DateFieldListFilter, + EmptyFieldListFilter, + FieldListFilter, + ListFilter, + RelatedFieldListFilter, + RelatedOnlyFieldListFilter, + SimpleListFilter, +) +from django.contrib.admin.options import ( + HORIZONTAL, + VERTICAL, + ModelAdmin, + StackedInline, + TabularInline, +) +from django.contrib.admin.sites import AdminSite, site +from django.utils.module_loading import autodiscover_modules + +__all__ = [ + "action", + "display", + "register", + "ModelAdmin", + "HORIZONTAL", + "VERTICAL", + "StackedInline", + "TabularInline", + "AdminSite", + "site", + "ListFilter", + "SimpleListFilter", + "FieldListFilter", + "BooleanFieldListFilter", + "RelatedFieldListFilter", + "ChoicesFieldListFilter", + "DateFieldListFilter", + "AllValuesFieldListFilter", + "EmptyFieldListFilter", + "RelatedOnlyFieldListFilter", + "autodiscover", +] + + +def autodiscover(): + autodiscover_modules("admin", register_to=site) diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..528e9e23f70685c9c5732fdace6b213083eb4562 GIT binary patch literal 1213 zcmZ{j&2AGh5XW~nUz@KsZPK(Ul{oLADO?dkl(eOlN{f=xgSBF{S)1TuuOr)AsduhO z@Cw{`rIk2wLgEQH;c*HHDOmDPp4qX-`=7CBHfxRi1H~T^HYLSUOPS? zo}lxyi~ZBwzdRgXoD9sW_CjF7_A#ev-W=&Tc}MU`%4kaR=0!ZtSS)8|;N?{tHlmv3 zMP(Scc_+@aFghmUn#hO?oH3$;4GFCv3jot7j$8w*0$PA|KpW5jYyj$j6#z7uECU*V z3cv@H098QKAa5+@PK@WT0eJ^zD#)l!Gin!mA3SIj(+q_(REpuJ0~ghQmp{@X@MPD- z+bex>Nnort|eq*~JPp1r|d6w#FGDC$pd&`bpawp?qU1v}{eY-j&= zXW#DZW0D9NYa!K=;ArQc@o#J=tC^5i;kme0S1Y}(gq0p-wl(?Bd149=Ni9^?7Wz+l z%?q?YymW2QM9oWY-sdbT)0CGY^o&W#< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/actions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/actions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36482084fba0079c95aa4316f9fef50a76962117 GIT binary patch literal 2434 zcmai0-ESL35Wn3!+voGyandv`rG-AJK#3MpL>lBJ8Y1O0%9fs5Sc4MD&AMWlt zZLIT4!z-^mRU&!l1OL)VJn@9YD?)+_nB6-kMXKmIw>LXGGdnZ;o7tqzrlrC2+qXXt zezZ017dd(PF<|mBy!&gp^3$E{!LVFX#ixC$IqpUhPc9E=e!) zXNP$e3{pX7*S6Hx;qVCrCC>Ww1Ih*|r(WX6)SE<8=0_dg!EOWmD);1hgHRr@a3Vtq zbQwtbEWsBJOY6bQ-$R;~X=81S=6a@&@!ZI?V?DzeI>CKoUYS?twYiz0v2k1>=mfFt z%;eiyja?Ddrzpe6wG(Y#&+6=MhPSkDnsZB-nRSHb4X{(sP-bO~6CG)f)?seJ9G}3^ z1Kr4wun9gwSzR>2gH~2Q!bE?D*EF#-Zc80v>}aqCGIKkt@h>xzd7x8)qpfCkh}N`u zGckZu1BqrR<5)gk0ngEMlr_N*8?0A`NSw>6N9cIX`u0?-rB57HfQ9CK@mgYB{lx;ZSp4xlLDRV|XcaqdO1Ba6))JY2oMkOGLvK5TNh;Zln zUdm`VO!ny^?`(iKS6@;k3d~oXvLec0wgL38Da4?_TDW+M*wQn{Pl&@P37JfTGw_3b zN2JQnVB|yXI8n$&SGkfKlaz~DXJ;A&PxgW@9pg7IxMj&bQ0EtA=kNJt{tVrLLAWRE|puKX38$1<4JJl$YT|$z9t7O zZPa!i_IkH>c3exj?r}Iz*QS0jlBtmGH8)5Y2-cD+va`9XH+#FE-P`thcW(DSzjf~` zZ~NvKx7h``F1wxE2&RnDM0gMrt4YrK|0To&OsPKYT4i6C$XP09%B#G_C`1I|uF74M z_m?EKB8PKw3%fu>LMfqyod;Hql3WKIxeXY+vfSCS)M(4)S{dI@8e50?pQQJG{~;ua z_a98*{^@U}!8C?2c>mK-+?fvgpUA$kd7q`SvGfmUa?rmU4*D`XeT``b>O!bT(U7=i| z+`U*XE)ddX YX#6q^hGrW!B>U`#bpsM;{M|DC1!Z#EHUIzs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22637353cc57c54aa5e0d3c93624e7aee53b4249 GIT binary patch literal 1480 zcmZuxOK%iM5bmDW&MvdYwiZE>%O1F_6voFW2q7#-zyVoNY^10)N^5qycRkCz=2NRMlNw&#$H)k4FU7KYx9iKX(cFjKcQvKzIUM z{|Q78K?_n+Mk(@6;gl|OOOJV0b_>4@SYUat7?dF!Qu2%lUj$b~1d?95Yy|Q^gdm4< z1oAC0JR!5u7qCudv>P5a%~4$~^5x9wZf9pQd&N^x<`qwyrrYligluFbWR>Mo!<)dK zA{Q;CG4ie9MY_Jo(B$@VKzIUM{|rPDMg?Jxpv)Bx^MuQM;justgnvm{C;~CKB5Wu^ z2yfW!o#bUx$U_XJk8k};e>D9+;^~{SJUg3;TIy+48(^ksYw9vJc{UZf&gyfiF5>l% zVwG0QIu`S|tc5Ied{morgS4QRY*ybMV+(^(u=O@6fC*RXzJ60jrMuEq= z$|$6Hy^zON9>Lc4ff(|h8pn{8yYfCbw3q#_vLGkqBR!r4$_MQ(RB{QHrBY~xd8g@8 zGv7w105+i7d0G~Wk3>Zv{+k{>OkQfKbn-{5b(;KEXKg7fqmyU3dEU;Gr@7MR!SAYG z$;>3@vN}&*>yuYZ&-AFhCy~7 zKItfD5p;E4YiX^k9SFsiV2h0LYybqeMvaho)N^3dkVcNZy8%}$D=yovZ{hlmEU0jW zcNH@K9dwoj08_uaWg)Nu=&z?|a=M9m3#E%%O>HH&@rr4Fh3M%G?BMKRK>8jKLoNY5 z9|$FXla=${MGo*+Sv7A7It(_j5K-*m$*zWDm(ckZ!Qaws$?=SkGipTzf!pD$GGyUw43;z}6Uf-;{}? z@bq{V!M~{=R79M@3b3EPH+XUX|FLt>kH_`HtX9&_54*Q{*qR*X9VWEWg`H9rfL(<# hSQJ>_ThOubVyIpCsITN>9A%B?5nw)oZ`YlS{{z>1d!qmV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/checks.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/checks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1d3983db9ffee24e7e00ab61b6ed610a2a8ea9a GIT binary patch literal 34473 zcmd6Qdz4)Feb>yLJI|ecX!W%G&_uSp8e1MqD_MTTv8`v~*j_u9VkcucquIT)t69y? zNWXhm^4_iz7df>4Qq4{ln)#Xw%ZtltKtl3iOadPYYaHD2DC>Nz>jcJd2_dSRhhFD{hoCApXD z3@w!FWjW7xh8ITaBXVBoj4q7T$K<@&*|0EPAD8n|XXC=A`X)Ia>TF)vQs1($wZ3&> zTYa0{D|c>L*k0c*=fj;_7jCQHCg&ra+ZXPrqtVu=HTGJnzQfvJjpJCcHd>o-{D8ID z+JfWG52viH*0$GD*0#$={Z3rnVr|FO_ST)3GxfW0eXDgFu5Xj;UDoZ^9Vm6TwZp35 zIAMLj+KJw!1hno9E8iI2P=dGb1Udu);$6jgM z4j(V{tX7AQOHV)h>{B0qu5senbG$mzTbOQlo70^Z-aCA_X}6wX&f`6`;Eg3NPqZ9w ztRb)OsaAWg+c?`=LKXQ|cdp%SvF_2M^UdyD?__J?9GWY)hT9A0ddg|ojzZ^V4EEpu z<9PwUBly`nk+?Z0wVYZ`Up8J$ok*D}C%uH}=Km)FRwq&yQ&q$LM5%(mwrwv?&vcr$ zy}Meu&{XYa*Qq#Xnoh++$Ga0wMK#-YtJ3UNTCdEs&T%9w?b*sq$3|H`Z%REv%%AcKPSqU3IOXM1m@)D|@O?U^Hwocg%kQue9m7j3(F>S%9f zaiP_9>{B0ZJ0Dq`K6SjUZ0Ek`RBygDRveYbbI=g-F8~{oomjVZO*mqQuMV=69b#YjUs+Bu*Y%2 zVZEHbWGttTre5BDDI)`&!5#C(RJSMty)_u<^SO&D$5=L(jmw6rV0B>N&*v-y(3^3W zWu%^OIg6@Wxp=1KoN1{_PgS}-3@C;kAZlTZF)bCsWo0*>H7mhXReG~}jwDAF6Cu^j z_7=NVrQJo&4xp8}W}02AZ2^R&8e31$$>Y_G;sAI{5 ztv0ii$tKl@qi2{?nMR##WuEZ{X8|kIZUn8q9rta{b|G6x8yNI*+BA&!N*NBmX{cNA zXa=Y+{NwQF@OuhByN1L{0~w|kFahb*Tgfw24Tgnn%;H|CN&>SY62!Td8*h(FV}hn7{VfI0V=?d3<0&UKeO#Q z+smE3*i>_Nkd<(4dnSwbkHM&vZ%F+ORKYF?%(3Hz^my7#tGjS-2EXu+@Rr9 z%6A{LhL-d5=lV9d@ewhuVAz_(eYb)M3e%Y|U7}mKB)Fh~L*xK$te=B?r+7f$yyZ`*F z;qyC4XRHsriP24`mbprIy2oW%9U&Cx^@e3yk?EYUD^}|qfTY!(X}9c3Q?)8HJ*9x0 zI!joBwgZT3S$e$*6sp@WsqUshuvg6h9pBpbgwP2D=m2-x?JochkY{6Gp5~%+ru}33 z+19>i3oYPLAjS5N%zz(G#0 zvIuk^cC-Sx?X+ivg4W!kUMt6TSs+qI+nRDOAF53FZ+3iYRhtGr#?aU`|H08DF`Lli z)17IB4bp3CQ32_pB`1$P^W4*iP99r#vr2xm4(#3U-rF}093xrkSk#SksyBmi!HTW% zzFQrXIc&ZV@WZ+@?#~6?4AI6K6-Pte5|%)^)i(^4-C;k0!Dlh-pzAX5R%^Do*a0EH z8!CQl);mMdP)xe}`+66E#Gv5_p1D8T-_PL5TBUBjzw3jys5b`^lz|)%e>Q(4DL)Lt z{BrJ6dO1CxdI5aSdBXyNd@BtOu|BTnpwVq!01dEO(@ioWMs2UU6D9kRcJa}D+pEa-|q95vS;=ob&{+vh&m2R5>T7TT88X@T;!YKH)pz)U_;cqV+{UI_Y= zSR(5v8Fdb;|CuL`9)0@Qi-(>+cJna*kb9u7@gelan(>TAjj@*7{ViWtu|KnBKfI#Z zHkt@d+pfi$eL~+`tJ&)+_NQ$2XP)eWQFlVLA58W--#y)$h19d6^m>78B81gr2lnm7 zIyTR=!R_zDGOcb@cW^lcgf4Y*i>Dh z^?E6S>S|Ga03~%ZDXrDV$X><~OTEB5-R458UTTrS1oH{vd_Obaq5-@S;0(WqXm)+n zU(OAm==7tu@s%j-K~!mf4N2K7873G~GhNP>W?5j7xlv24-AJJ-!`lwcC)W>{9#s*)J zG43leHd=RDcOm~KYnOF5j+?CsYd4Nttg3Ynj$5sJtvxtyv+lEMINoC2Z|%i#yS2}n z#PL>ZzjXk|+pGtygE-!9JqV`tA#YQtY&b;uSGZR@A=Ywj5O_tz_z|4UfqGs63w|~I zr8Le!Mg21fy8c-vJTt?yY@PoB}2E zW_r+ow49c&sqr@X&s6hbqiqFuhyA-+ode~Hu0UV59NQc5??8poS+rWv1o%0qo!Jsx zv^$XD8W(`vK-)Urw&eXYJ=Jz8({{X#{u9--+P$C=L9@@P*16ufMe1$B25$8WTxhp0 zHhNtVMH`E%@KEcvy+m4S%a>de+P2j1vS&uc6~<|h)nRRx#7 zfS-L3iIIk!eI1MKy+X!#w_qCY6tcz-3OVELLf-g(pwuV z7&foD+Xn$qO$IChMr6P!o)es|9Yx}#-bl@-9mC1YLg!(RIVP9d8_-%>=9}gTNUu)z zO78X4>*-lT7G1%~v&3bQ{jTB&0M5HFh|~q$ROLt{d7T~r4X2^_s06wWh%So&6)HVM zMOV?YuO%>6_V#FBR&V2gIs;DV*xvmIG3dFTXuP}(2b@GE!G^Nuq$V5j6U7@B(#yk; z#G#^iBYg$qu?$9ZIlU!yHS-1IJf+ICyLG^8U)p8843TPw4-NxzG@xKucq^kO@GdXg zhUEE*SCT#op?J$sAHfrKn27*|s9{QvQWL~g^w@8+k!2*gRL(TtEfKk2caIF5?A4nQ z<9WlHs|7{XhB}7CGkM#~%4B$XN}P@9mLjZp!=h)UqJ(Nvuh{BB$EUDP(0FOL^gtT_ z4C`YL)Bz-4$IqtxJZ6H1`2V?gj6A4Sx?q~`K!0@Iz5gb=GD92~{1K2tRo}nBg$t}T z58#Am2`Up&@NIyCFS7&%IR70e_LhMa3F2>>IcQd?S6w#ev-Tb*w`@B3`2rTf9;awQ zL4$mtGh76ywKP9;rHq`z^Uzma$}WTcET+^mRH9gUeSdz;*#P}*dVXxy*upa7R>3O1 znVG{9S)MMnH8wgrJa=pwCp~ocOQ=$7sRT1NF7JH zDfbhHpe!YoWO*NN?A&GVtg!7+g+N!LT5|yC7F83$jagiQ-?A#xOO;)sN$96j5tF)i z|HHx3WK-SeciCF&p?g}{ndtw{J$U6zlNy+|109oU-PF4d?5%F{vV#7+Y-6G2G`(VI z=1>H0Z;MpfaC(geD8oT<^vHWm|$GuWC|LS9ML&i%em{)A*(NRlY2Ji98 zsvzo8IZ^Kz<}n!xc-TGJy+)4 zT;E-@>>jvD#3HDARZ^*rpnV{7^*D7)@H3|?r2Nn)Y6ZH6-U`J503}T`)HV{$wyba& z!74+Yoy>hrks5o$iAp2r-@8wse+4C@)_FgE*X~9l3YC$;l+0JKkXjq=hQwP)$7q$i z#it;NhcYheqo`d8eh<3@KFUy8Gx_qo1fhMw+6(7*kW%Xe}Y}DWoCrm}4M1xpzQvs_SlBg4kqHTS#m! z;Ntxgn`Pr{M(s`#BajGlK4(AdfS5Ri`69^B!%itlhJ-NW+@I1w7?1)mPp1<@dU{W# zU2D}U!u@IB6AUcS7(w6Zh!HsrJ0U<5*1@iiP)`d`o)!ur3|oX!)+8x0B)WG}eH_E2 zUgTH>O2NH*_X{9bhtwzeu+HQqCLCLJ3W;ZO)u@+wEi4Lgn)(zIg1}qZK6Inz_=w1+ zAG^%s9?ab-n+VOw#<5EY_#^lyb_vdjYs|b`TQ`iX#2aKV$(itI{{#}S%PW`(2r5eguttRjSHY$`&?_LjSN;CG9OT%z`VGVCxLx0G&_sZvanc)!^8gQp6|A+ z@k$ORkTIEM&N`8?O_i1)VetMY>95OQS+lX*7 zEYy)m!0z><=7YHR2phi_Cne~R#_$ha5lA?-N7P!C@|zOZMqv!sx%Ys$ciy;*s}gXV z6Hee?|3aKgeU5UmFa5r5%x0{dm48jkzgR-CWmIsVk1+<}xKY%F_3B(pfinQJxe4g5->;W5a6aBV)oCRG;D8}<1BBQDXtk-loifzTZe8yj!|o8#b!>4mNm z0tcpc0yQhDpS(g)2%;^;KX1rxwYt7Ipg}-rvdDsLP@8ieXA{8Y5ojN}@rtjfL;p5WXuNP#ak+bP*^-^~ILUCUKvWnTLH%&UY0uEzsi{IFrQg1+WVsvHSK24lP zrQAzFj+fots1^i`L~SKuBIgEo0kkJ(Y}vbSas`bF1O|I2IwXjq3>rlw0S&SR6iKyL z0!8=@35M|HDRmA-eHv9C4dyLWdTM@*cwrDK_-kBt5$zfy8u-w<7MkFpLAYRKAR4gI z0M8^i^pme0Y#LXoa+q-5MWm?4IZJZ*x+kyjOz_zyo(Te3#MycF>6rQl?VbE4IVxzAzlq4K>d{#Wi-LKe+F(_4g=2nvQ(zBZ~i z8!pEH8~}+C?24v_I-QW=1HT6iR*=~~U8_9lRATQ-)~6S^xYLCSV=1cz>{7XkdamZ4qYWrBG-Hb)hutpJ|`-RW&h`zh97bb;KL(GyV(|Z$oj`8|`b9 zn#K^;^UfL7Tbw&nFVmRNm_eOj82j;87g_s7-B)q%%bZ@aTd)O#rKY$`8xlm_>m}He zOiX%?N7{UU0Q+mny?1>Rzf#5}7!v2m>{B%7+{amKUiZtmkv<)Bj_2Sjve3HA88{15 z-ADa9oF3Ej#YpOvxh}c~Vhpx#5!4)kO~)MirBOrOTZ9jEB!&9&W8NSy8>?75F zK0r~R#tSPOBm(Z!a%8onUc(TqN`*9;;bIZZs+OT5%~ga%9zvGi;v~{+Qp!YZ={8W5 zNJKIV?wxB*oZpLqvJfZiS_KJ+M4EO#Fqb334r2KRHa{8itXqu@Ii;7-l^H6{@cqyW zE!5O7YV=HIijDC>=>Bu(z^}m9ytZq%Nb{k#@PGHBMo!62mwG`kPQJDW5r_rV!B#5nEIDhjYc z2}5*j7;Yf3sWw_cKheG#gbG1D0H&u>Lf~RIoR|JBg9J;mkd}_6Ahs>Y)Q4ZionGDdLr-4TGbUm?->57`S#)SQa_cvi5M6vG^ zc;3W`d*4m9W(8XiYRSpAynijZeYXQqIBtd&yp(fa)e}yIqS!2{0PkBo!kq>;qk;29 z%aFO0m8CW0b8W<@_zT-thEqc+LT4YXjtgrKi;mmf)LhecIk{IWz4HUP0xG?=x?4;f zgUI{mk);S|5ru_e#x>bFkaZsmPOM|zIAW_VscTQ*J%L9^L>XemO7gIByiWDrRR_9P_)d(tV+YtvXD8w`o{B$5qs?&o75 z*wh{dVke8{?Q~pMgmq4<6IDxrxg*39n%XCPCG;&p4q$*{z83UBI6ZTw*G9+!Uf_F1 z#2{K5#aw%(rF%s0MRl^|JJY-XX}vPx zH(^3Ip-q)o3~f#NVoP~-d=!c*VtMoOeue9iMgB5odJlnVCr*;cYCJ3E`lJ-HXT8A1 zC71v(iXaq3MGPVLOvfGxHZvEDOW8DqQgb;wYd}T1-O0?Gq$eUwW>)~reji}q>mUlo z$S~B0!Q#jZBon-wSNh1a&p%mzb_&rsUg3pf&(pK`Y4_;LISzt(T98!`xFc>EwWzS@ zROs4L3o40E+5s(V=Dgeb{N;5u+Uw0$e;sX7Uu2RLITC&vKgQ>xCy25On;r4me+5~N zavFJSEK@c(b@)fvA7l|&(#_(H?4;3R(@1g!;Rz>?;HE{A%V~QvLNFH5w zfHUg~x*JHiRE}eGdKY7EDH^#+5Sve)Hx8&WhSLrXwn+t4T77|y%&4En!M$ZbRT1I6 z!xwf2WD@#YS>w6Pr~0dS$sp2uHh^Ryy?OI(31H0#`F$5ky2EQBp#jZVg9@{st5RY0 z<9r%P{}B!T5FSjkm1GdgP|}2cEBV~_Z{#XDpoIxc$%Pj3rS>8TF2>J3BsHt)0Jntt&=?@{$oK# ztBV$s4{3Biybc=e4JTf$oni2Q^69{pQ2Thi`!WK7-ytzaxePC60ExZiK~FnB42b2*?+_EKZqffc4>vm_qf# zc$fQ;o1Gj@30DS2R(Q1Hj|5WSHRbP=@@d4i`?FCtz>cGbuP7Ko(#U0{vCHV>Z!bG-`OK-Jvr&?V}J zcG{iAxt)(xcJFlBPN%hVPxaEC5PD8WGbM!A&lBS{_U{!$1B>HoUT|;4tvcce6j^m5 z9^)#ydX>XU9)t3lnJfQ*l!G3$?j!FD5LVarXYdmHc_cUINE12HAcSOf7n%>oc$grx zCWdwcvCLnFt7JH6x@&5{syS>zKTh> zMy0f{7lxR%A6#qrgK7u!5q}dk4YViVHQHFcy7KjLWce~-f?yJNZV`E2+nVoMPty_% zL}G>gN7Ni3?0E?sLL?7_EytKA&pyr#8m?la3*MW@_7?LwunBkYd_I54=o(y$RLq=( z&Cfy18QfhVxWNnNpk^g3#H+#jhZu`DO^Ke+c^_ptXL#9wmGQ8y;|jK{xSCeapfBiGU+j&+l%p#VliLoGlU0ixu<7nOgBy%F~Xoxm1p zS1z_Xotis&OpA~7+=sYN)@JA92t&Y{S)h5POF??D`+loWhmMF$Dtkr_zBmWL+k{cc?Eue3G9?zdep~G^aH0C zM4FxvEIpr@FU@KtRw2-cgxm{sA}5l_hq6ncLktxmR2s&iXO_NWz&!w?K@Z~C!&j0F zsh>noy*%`tgu;Pqxo`c?pnz66eTip%>-%rv-rJm_JvhPo<=Tb=1J1$Ah28&*mEo7^=dC!q&pR!g%41!p_3x!X8}T zQP@-{7RK;Dj;n3>4dc$OxE{uxiSkCpS~v!Yzl?un{}N7u$otn*vl1`)TH*iS==;}G zCSvaq+En$%p5YFDF{5`vcg7x)lOZj#e+tPQR_o>eN73_$+8+)h>PNz}(PV7>n3uH| z;X*Dj83x7M(DOH%cIX`-*9cN~dgsDC?QVx#6NZuRj6Q2vZ5!JYMwYDj%?9$Hjp~#~ z+OQhN_scy5wPVjL#1TrAXc*rw&(KnAJ2%$~Bk|?#Li3ddy!$RTxNAqiS<91_)pjJZ zIJldLE%X9!bZ&>&IMaqyj=<9;FVF)v#o4!kmr7(L1^@w+XL^<$TIzHTyRq19(@zM@ ziaLaOe=DusaH4fp!QHKZ51T905WC#XMd2IQ3M0n13!~<@+%5e;xJD%Y5xh=)7D+Yh z-m0m;Ke^iY?5nG5Zx=(=wU_sEgyemnA0G%|Tnsl~XQhO1Z3v9ijZuHUf~WVOzt^Zs zE@yyb4R^0qxQq0GPtw#^vM3!-g1ssH+d`!RgYr{oooCW?J4mg4gx&u+c7JlU?)#Mv=Bfl*{wW7w zO(oAjg*B~wUD_gH2Ez`a8ZQ9kc;{nE+DxX^eNm*84{^P^KXU^sj;-f z=Z$F4gQdtf=yAgeScd{$h|*&xw~(h95HhB*%s7e%#Rv$aV6qIQ(fOi%T%IBT(|=mf zHA3b@`FTV~%nzZC7o9S9o6)(r-wb0h#QT-}+3;oK%E(nnp4DOZb`4D8sImf>YF@hL z-b21i$CmrPZx#B!RVJR4{Lz%gy!!X;)rLUXp%7uaWBqyEJEK|yd+-9O;zY#rMJ(OE zy$`tgrVjOY3kZ#utTC9@)}898`Z8ukGfpFi0?9+~$kfN_{RA`qOD5Zxh>A<3$E>3RglE(l3q^3hVY5?vc72OaB`_o@K=Pyegoy71PF>$Xc(KwF^0bP^b+ zLA-cAel-Fvk{rF5&s+~tItuq5eck9vsW3vBly{0MY6hVCI+!k787hU32c*H`iRChE)5R8^d?U$ zc$!~2=HntrXWCmGd4MN;Nv%AqaY-pIsRbD7lc{bR+YJxH|6Omz`Vs@bq5IO(T?rU0 zZtu=b-MrVx%}adPQA0Q=K&%LbaYUglQtsZB5@ym4wyIHU-`=ZA7+{1JyC=U;UZE|myskwcYZU>^a9WNP{ucK@6!M&`!G%dL6hMS+B5u)aI%0MRA8STCD#yA2&sCacfD?^r90(+nZ!aeaQ@e`rz3ie5c zejUCJh#1#e14M_<8;HS!BMa!y?Qn~P0Sr!g(4~|1;3@p(L80;}aS-{6S4w`&H(~~1 zC>vt=c+3xV57m-;XccUwaMJ>M8Y5@%@MT0QqZqs`<(EuvZI-*yY z0u}Veo(5*jbAR%L_R0Wy>|_|LsV3K#5rfw+Nt*5ADZ9;M7oTzUjQ`yM31@1)>Xwb21i z)R@nY)5!$5j+RyqLm zz(FFS}PP zP&uClmy>ZwQrECELOiUdmJK)^=Pu<@D`W=L|1@f)WFYh#l7Z|U#x<~vd~VT!W@mnE z87+y~p*A?{^7 z5le6C6BI9B%F{%aAfozs%KN42CujYp(PgL%^uL7k*({9gb^8!-FX6&h)>tP?N zX++9hydP!>sDb z0k~qTcE5U^Hy&Au(n2OEDa!TLoxowfB=>JoqgqbB=Yf9j#?`%$Lhs*j%NDpEu}3lH zZQsG_Mr>OuySgX8qM+pM?4{<+Le9#|N+nu|`y8KdWYULepW{722sEi{mX4%CHuS+( zP7wi%__FAYnVvP+tsqwfG2$TPE2<%e9KF51|jz z7ydntJoo@{H5rGtC-|2QlkQz}2$TIw@WBDq%yxB|`S@8dmQhTBhnjBgy&(_h7d+tE|;=Lj4z5oEY)%{~TizG3g~ z?eAS&Io{Vp^&i+=y*}dEV%^j3XF>P=6Fc<>Ojhk4#o!5aPtl9x2I5QnodY|DH5o8F z?tFj80^Pm_=rB;1F&4hoUt@S%lwKh|mx&A%CqY#2EWagGf#HE)81facddh>kqA~Hq zt!~I!>2VFp2fS6V4W2Y3c(^uq^+68jSq|qzYr;rS+Zz1UA96tZmLu0lBoxG8HWCDW z4O#ZF6&;-108)ciB={+!?2w=OAFSm4?WIc3{Ve2yn(Pw8@V&q(7}`{DMB=}XJVkX_ z>rCm(BYEM@DSB7#coyZ$T7_G{Kf%pnnx$+>t<+*#O-rew*v2K7&ogoVv!J|*odj&j zHHC@@i|?`nMrAFbWpYw)?()pa+Wn0S;7E)Lre$BV z1O!5Pi+IF@IHV=$I75NJ9&m>#_tPuuk6Q1*Uq~;fS=j}4MT5bbf!V0;!AGtbf)uq3 zdz@O8#cl^yw1F+*LWi0l#&%2|a6h_MTeROnBGf4WPxv*-W(eZnq(fX{)AYa^I|vSx z2q}(xg`jfP#brO2@t<+;2o{k&jgvqnqP?#K_@J%N!+XvtC~ffv9b0o09nm7 z@L@lO8bn6_KJqPbG^wQ<^UXtRkCm+;k<~ALZFt`=oNb-fT z3HMp1Vf9BCYc+tc?-v3>nW0_`yRELUFxilV8jBo%|HAuq+`CLr*@F{qd||+?j}~d! z^uk|YWYxz@0oMuUo*Q-Ey&Anu_ALQTgrpFf6fTz2S5kCW4L?s;JC)&g+3=OM^fLCt z2P?nvd;y`S2EM(v<5C_heSS;oQh`vn%nidIz{l(WX$Vv!birk7nYr`6o0h0+^*74S zZ$UlWW+~@h3HhBv;=};wPB=x1|CNr%ig`6ec00h=`NcN203#BQ`VOD;usVEmQgca= z9N?bSc$D4|kHu=kMB z_O2K~kUc*hcqJnr0^AM_6aW>w(PyxK&YtkYc=Vs9O#sNxM|Je2me1s!hj%sr5PRIl z*!31Zpt0o7k9a9JLFVZ&QweqfudU#wF-|F)zwJmQ2)}@3gWYNIMK8nOK@Pev`9g?{ zG0?ySvZ`+~SzyvP{JU}Q*E#&G+IV$a%3W0*?@xBjt!DsFt-Y~N1YL+$5maEB_iL3YMuqQ^SOdm+`L`oniAau5ptaSaH#F13=L2=6Uj7Ka>j_nvqH0pd z{H+Sb@%_^Uc(e3Ev^Df*XIN4HNc}_9`c;k;^P9#t>i7cyrDz`8Asqn;<<&WjmE&05 zCN_R;?f*M$eTB(anEWD>Ut;nbOlX}|-(d2~On!&SuQ2&NCR7+G%F>Dwr=oXAQDC=GIT6t_oyY^bpQj}3_%VhM|D)Z5bUl%a7# zV#yQADRvFvXTN}ioXMpOToTi8NrWJEH7%d^0Zm!XTs7nz3p+et*Qb1fPxKVMvfhe` zF0a^}{}=E+nc47jHh~`33#@4VK2nX|EIj(Si<2%2SJ@fakq94WRL#)akg5WF8zj1J zcN5p3H4Bgppr|0uu9tk@j_{*6-(rKl#zZDxro4j7-zJ#zgvvaI>vAu%(u!~6nBRAA z8$9N|?_DtCs7XehBhP#G1tgIZD3PlwiPB!?0FK#)8kg(zdkE;;S>f9H$UjDw3|6D>#kqFt z2yIy)+2(AvHI4)P75x1wC8sKcFO;d;Ak?SA`jUbW}yJ=6=SBGDI(fmiE`ej4k` z1A+f-8akx)^yRyF=Vs0vOqWnP-k=BieXIB2v+O}O2)pyig)~0gc#v${VaN!=Y99wd zIRRyp;u-)J)$}FSpMzql!`y5`1_h&QO0ufY@$w`Sp)?V>`5x}=V1Gn2euMt_?}Hj@ zhE;u;NyIJ@?P=Uf@K&64#o_@o9DU_LCqHVQ@UjL-;voczz1P zg5Pn3^;@VD18CvUw}oS@`O@-_A&nXtc6SmK8Mq5)X7)e0z=AANVLtF$a> zOC>#%Rw|Rz`8wMbjiWS#vwMJ(2*2Ny%=M}-x9>vUXvjdS8C?b29f&nzRg**a_{s)G zD%AmMOy7DX`>Rn)ZZzaI-po#)slYT zyO)7M8Q&NN-_p{~1Y-Ne$2avuYg)&S25+*awU4n)J2dySa%>3>#aA(d0zrl-zSLF( zta|V@bymG1YhU-R=M4xqLttAL!I&rT?s-(P5n) zcBkvksd3b!k;$z*BlM_ACi|KEJQFTaZF&Nl+XNYRN!lSzG#{i@{mp{zapz4O9vXu6Jj4{xb+=Pa7`-ROaYzF8AX0tB{bJ*N7bJt|X zL!&vr-89qr0T=y1${>zpI?uT5h+v>#)*&Dt9}|WR!^(%e1|KKJ3F(@QF!P!7#2OjQ zN(`|uvK|^Em^~#R-u8#EwMyZ+8%Kvc3V5W#W9lj#mWaWo1tE|qlO{JK6!+F>B~>ffwSF_moEtl#s+0hK)D9mN@yDi#6g z;7gis=B$3UyIII#yi5E30rv{F1_M zmB`Kdpx(?Z+}R5xg+GuJ9Qq-+2t5LVR1o#3jQhOotj1BG_Ndz96cq0Tksq$pFphd$ z=u;!V&t;Q>Bavm|Ov(ZQ_J+r0ul^?%p~d)2yUO*$Fh1hUD}{@0(o(<*m%Xx4?!`iR zr2xXV*9oDPS0pf`tAWXkiM#?sQh1G_A`&8I$7E!9#u%yvW{YD3Wy)H6di&HAc!$Y%;3^Rjg$1{KI-*Dv zE4m#={Qt+6f6Wr~BtB(*9^)${ROM$L}8i zW(N{Ehm_hFE?a<>nu2TkDfyA)^py;1#+F`P8^f*XnK>xEuR+PmcQ(c*tl0=kO>=wr zXa}HuV!t0TS}HB-i(ZB>c!}U0ur*2kqUM2z(|)27fVN}Gzwd;J3=X;5tfbYius%N$ zA{GK#4`cW8IUfov*4>rTnO=T^sKCmptv6->atR1x5nl)u8bAbs$_5O%2CpSz!q0x` z*cn!pFl#NB`uCtUBj!;m>X{v)kyoF2hFq6%RU_AIF7O&qG;}Rrah5c6EdvDs98tFe z-}*s>!-fZqLio$NEogT_qfed_0>NZfX!fn=aJ9g<4d3>2lN9)MVs|UL_i~&*Gq~bz{rw5*oXg_8=Y{13c34JNCAAztQ34btv9_1b`-oX|qTc+3oXh}La z6xGhVr7e-mZrn)}T%8%VXrVNtXgLkN(LEDf!j}OkFaZxvAEWTc^xz2c3gHDCHLVHK zF~t(eX%K-qKBIA0n*@!8pMkg? oBw!aJ(3Fg-C7iu94mh{K1xd(n>mCL-EF0!E^QA*-FPGiF0J_YyxBvhE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/exceptions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/exceptions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53d261db6d1d197ceee8d848089e7b5242c701a0 GIT binary patch literal 708 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/forms.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/forms.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bef290183f22095f0ef1724221b2defa4cf1012 GIT binary patch literal 1409 zcmZ`(L2n#26t-t(XD6%O5Yn`15JJ8nv4?CVjul0X3N42!ia>A}t+2e~w~3dT@z(Zi znpcG5*TR*R#{k`u!j~tK@v%8($JDNNtw{#Cw1CnWftdY-D~o)Psw8Hest9C@-YY5-$Ypv?6@5j^p3KVr zOERajC-WCYS-d0}Dc6u|-*4~BMzuGYp57lY9Q&;5tkVq>|H*~TkvQutNTynbSuzoh zVPd(Q#5g}v?J6Y2Ykj2JQ+HT{u)t6bFfpLg#z5uR$DiOarWFm0EfcL|%PWP#9ZWFm z#C*;~Rq3vE6Lz2-V7zc_rrj}{E2yPqjW}U5U=?1mYoWEusTE9oVc=<}49F^pa$Q20 z_t3B{i2W47k#q7hJ)^%+O3vsavD+>^Ba2MZ9c&Dl;JmlU6_x2v>5nKi3YQ(2K1TZD zE&0S}m6qW1r7)tgC~ePnOECU+rQ5kO&7~4t)U|#FvMiM4F*g&6>DM6?o;P5vI09R) zzd4x46wBcX%uHM0Q7OF4LOu6c*!7zFHO{LVb>sXs`E&O0-t=2sx6`jXJZ<`guDS+= zx6{YUebvpTkCd@)_t5AC7GS!9b~SyXW>ZuRc9)|1ArP3#1vaSOL-Nk3*3sQ3Ilwv&a1&?`g?gyMVT6Q(ye8~CJPShb| z^!l7jU2$$g{meRor`&J8DKW1w{U|~t=SNqPR8ZF#bSnf!ct6YncatLovv&{*lF=kX zyU3CRG5rWB3GZ_f%X6tuXzudP+f4>0@VtU$_z>CH zapm2sKRc&tJ8?#|wvL}56CQ`z2@uqYSH6p#FFw00)#pJE8@{(2*b76tk#61n2L}#+ AoB#j- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/helpers.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/helpers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1652b21a54a6bc1a0ce447475e4c0911221883af GIT binary patch literal 14951 zcma)DTaX;rS?=5P^z_co&R(>-+0t6FWN&P*>?A;NWFcG9+AiB`M^+rCkuxiNcGFxe;sg~n7cC1q~C z*q9EcC7rF$G-iX@##}Hbd9S{&F(1q~_6PeVpQ|5e91IRN4h4rK@7E7E?hEdd^hEvs z#*yHNr1MB04Hl4|3?6va2n*rVEhC(YtlF_HJ2)O$+Yg4taJp)SGvVwlGu+mGBs$Q=j|B6kqEhmkuJ9!Bmka*N2_7v7KD{m6X=xg+6GGWE?oFq|GXX7Y|)7dLgy#f$+jdrh@%(abH5}~h|mse|1B{|=U;+0l%;YKx17VWgS+)`0>y{TVbjOyv+OXcRx zOD)EdeYqK3Y9U(YsL)Q96q zDMjV$fpKnz*8c{QeFF#vNp4(Wxyv)sg>=o4_ z$xPnyBjPsdCt;HcydK(eP6HrrMAG z?nj7=h&-ccI;JK6@}~chyj6$rrZcJM@|a$~3fHv%FwJldA$AavkKVIZmSrB?itFY2 zMl_t7dJvUT?{vM~SPjc(9^!XgK*vx_@1hhNg=Z1s6-0eX$(cD5!o>>hTV@~>a?1!D zQV4!CksEqp?v}A-23e&2a6-}^()n;w(m7%GsWkUA*M#J=QgP8i|6!UvGsMpz`j*kP zEURmj3{u`ZY*{YTJKulv94KY%pPk?FJP~&xqe&jrm5S} z-wgNQJu9`A9#74+_srBGgX>qaGyds1ExDLa?s3l}Sj}TK{ zxQ1&Ty6fKUocwfS(LK59F?^fmq$iQp8SqF0BD<}kcB{PsnF%?iU#Ambafoc;lynMG zGi){Mko}af)CLY%U`<+7pGC8ZgHylCh>N91E_2XS-e0Om@KTtp;Q6L&d7rqB2WIol z&dlz)jO{FWD~oWBEwIrLgjO?Z=J$aHkg|Gd8)^IdR_Od73+l+Md|;mLWS?B%=04S# zSQyOysSnIEi%yy=l|&|%N@@X(4rlb9seX+G#|Ke=CRi<1Dm{hrIFBfAVFq^{%l*W< zJ3b3tacmZSTCebHF4s3e>ou^=8*`f86VA%&nroaB=i-FsyH?lwq4{m|H3*n%U@6SY zT3NJ)%e|P9O-Q|E*`6rT(->^Wd$!CabttFPY^zOGqzQ0HW0de92u$rf2S=4)y_nvk(Kd3baqTre>67DQDOK#NtTnWQ6QQexDcWnDb-T3I*r#mR#{y@8O7ZD zWIE646o@;3L zr02PbO~jUFH?fgjt7h&uHqC2p7xNz*S*8(%)pBoh)N}YewbpiSiq%?hn` zGqi7m$`X^hSTt?mRa*6WxgAHHxw62XS_~Ydi?JO(xJQiH+1u7o>xCPSfrJah04TBZ!MVdf$Q$ zBIepM^8kNfAqR1`YYVh{G;}uYu8k5;m@2a(3$lv{IEK%09K-}9f;XliB+)0;!gZrH zty9E$(B!s|fyEZJz;yJE3v&^tr@3lex*{hCY(5D~$>tAr3AZ54onDWc(T%n`a|_wn zM`XS27#7fzf46gDKu-g98$ojYFJ(s;b6RI*uask)D^==O<7zWb%FRlY+Hs;Zh1%tM zJ(xzF(sjIF#R+MR3VB3mWJZLBjF_TiL`uj6gnTF^zRppTd|Y!5^1-zr`mOv3X4*Z2 zv6bhl57_TDWWHe}R8iPVsHbBZaX@fl%^^hYPXuou4@iHNr5PMQHA}h)glNs_zk`_3 zd*sTlJ1cU$1km-cFLK=0oNKDzM6Zk4G#52-Y*Rp(vQi=|Qw{kp_OPYQMej4Y9w%Bk zk;sw0hhNO9-sa)t5#$^5#hz*;pBJxP4qzGLhr zav=s$C6!r*SKA}~3`voL`7VN%p^%>hyRPGW*eUMpO1*%3i|(E>liQ?$$8i57B{QP@+GHox z@1EhC-c(*owF(Nx9Kqh_opibZuv@1+ZB3G|7qHq#3NIH4$N>sVJ z+PWboj&uTyQR$UPrhlZuP7HCxur*m2iDY#s4elVw>Oc~RJm}00S!5u>#%Pk0q#BS( zQktv-iE0s0v$k-&#uRN;?3&v+X52AN5e_x8mQjbK%<7f7@iEEUk~h^Ov_)-ayZEMR zHqEL5B>>v4c}cE|cDaCP_lvYc+_qn(kyd^ey_KMFy}vLo(kQ47V^pbIZHiu}kwv}4 z=pZ84{(xSZFfhWfn4#Q_VZ{?uV!W}oR=okhJHyJdYzLSM5y9fr<}q8E76Bw=p62wY zNqJppzrXMT*4Fv)6-GN2{wm6TgdphN5vb;yzQrx@&3V(cUC0{GbU(Ii_v6mo$c7Ah z8{3gF3|Bg2m3#0br*?0C zB*Sd8UCoc4>ACq?%|<94du-&+A_yA|_|d;7U=f>C59Uv(H}K^+aLJ*B5?QGBCrDt8 zKvimrXDO&ATjiN*g5x(cO@NrqOc(eU6n6}ECrLq_fnr(K%^Wl~-KL+2@tfD%azQkXOi(0PcZ+cCb8#X=EbaBeC zx?Y%hm-ep-Iho|e@--fE=-0>}tT5P=oWy8m$YWOG>oGCt=`WKK(z{Mu{QJcN8_A7*VQ8L*$b zWv+Af*_v0&0Vl%5oA{v(Vz;*JuK>9_Mlx}8$%M_yG!iiEmgyQ_MfsZqPo0@E(cP0L z;u8K>uE0DW0X{lqwH^l(l?|mJ^h=QAo!Qgng)1srd+OL*o5!$@r%#p7EKaI6MyZ;J zf*fkW+k$ltd~LK8(wb%kPAaw9R|Sm*zVun5Yd|xWEPjy{zlsR##wAblDr&$VrLlY9 z_j0Y(THtM{y4Yw_8>t+IWl_lFp-NycT-ale z#+n&Z9z4J>$UeOSRYKEy-DsGbT6F`i62a8qJ|bP(wqx#dtT{gM@ox3YE5@D zwV7lV_1-~!W5ZPMgx>aCvM-tMX1Di4Wdfo=03S|t%>&87H4C-B*Q@=#uCaZHZE$3$ zmrV{sL_;{&{4E>(7CFmd|BJcaNybbkORL&nRjLAmh;R&Y1Z^c6!k5!*?{xsPDSd*a zQpb99Ve$UpQSEG6>N%U1gd&z;X@~PPfoxunby11F0(BGHIh4FOKlM(P`b@~fTUvM; z$fvrxkwh10F-`r~=tz>ZqN-Gi5kb7bPw_^|A=L#Fg}?w`;j1Y|uQR&NXoAtph*G;z zZVUaZfMujFm1lH=5yganEMP4WNP_{VHdsOr^AS`6?_!whB$B~|isFrWQlbG|L*nCX zMxqCqBHW_4EIyClyy*c&!3prOm6e%D7l(YH1nN53QIgna72 zrxC;NkJ)2V+9f3@hWcDPr(R)7D1L?(nsOMHurQ5k9K#us?qiwOL%WLM2#cT(MrzM$ z8&CA+Na5myW)Q&u@36Da4*Hf+$asF6W#44*eKh4)j=c7k_$#331==v)&Qj3A zWONuNBPbMkXtf7?zQWGEn!U7MzU-PynHjYEAQOo1|SpcXV^+N$y`~n~% zEA^j5Zc?rFYVz9xO4ut10I{^+uT7E=vasn{5`qAXnqNaWo6JDIs>n?lY zpg{Y~><+9R+^%4n;f{@5UHD_s9UTt$D*B$r&BxjK*%kaz>7 zdg^PS%+`BQBRJf*0`wfKazzH#_oUif*A_>wrK;;y+(S{n%OUR|m1j`)0!if}64u)! z5Z3~U+_fA?&%1eGV|wr4xkIee{x92Fd^-W^owwdRqTnH(M*zrjUojN55~s3SH0drhx?z z!v>BcAdX`m?qI=n)T_0c%=T+-Sv|Z7THUN1vRqanIcp3}!JyA!!%lmu{`dKcody#;RBDhN2UC(6IZV=-rJi6t zpTyk*&P9E9s5G$D>t1$HFh_Wu6wCzu&D8gKSXStHE+Pf3kAD^{E~H>mC@A$Km)=Oc z^?&A1k?QHyA=Q(Lg`z)ne%v{@gE65Om)68XK8C6-^gKBIoJ9uoAwn^MnO0nEu>Z}o z6u*fZ;v^H=pjJ?7)tom_;-Dn+t{uAX0*yi?XIDD*@e?smU{tv+C|0#_;$d7iTW!UW zoFEoq${NiF?nRtBu1BzWxwwx3<5rM`in;_T68KsHF%1#N5vr#V!TKoM_#LEErxrtt zWx|a{JJ!_l2duY`QGu0vJ~CF`Aw|+z4GFZYf`kikd2X9~asZX(dIp@oSY==?pf1?d zolhVePVTX~do(n*)M%8jPr$>Nr(Wor8?mR2i!c5b-)ZOkfjv4Fk^SkrN~grFPh!giN{@sAR7D#-vAk3AOOL!LZJ1q2Rwp0pR72JX$`p`~Ia-{krMlUjw z-Qkkl`^vx;-Y#-DCz0@Am4Lfn*jC5>|9JO%k9eQ4io86)fC~itrh+i`P@wUNUq`eX zMTgVko}{HeH)`qcT_4DWK0E-~a3aj(*9#}Z0)BJhR9M8X|4o=Cf(fwcjQTw^-&y`N zQ2A5fI6<{mGp%!JffL%CVw~X!HQ5|X|dnd!| z#C@x9R#O5&j`}vD)QhjQ-Xy{a^5xaIRmT~Txik}R0IkYi_DylZVPf4I!cw-OuPsQE zL>Tb7f03of89m5|1o1E2)FKk@gto3RhAHE2XD6-gjXt>w)H~eh_(?<>eL~UCYbRvy zE&x#;p@Opp^oZX~6;7F5SDyss!KlrNqy^2E;)o(p8_rWSpiJyHP;n>gJcF`-W+bueTtX{L*M>Ok84mu=nw2we*0C(K# z2?f3($ku*#kfuF;MUuS75HnDgaQ)txqHmF^sy!vYyaESsmEYxA%m`{o{qjcA(%M<; z{tdL0dc>PFAoo1!&_88b-*zt8YpDF+Trgri?Q)!_8~w>0a&f5{MPXcm+r3_`;Cf{H zs_t?xFJ$lbO%pBZ5xvV4hoydiD7A6JJD4Ks)??B(lRexZ>Hd54`V)@0fVK*D5e7HU zE%2h=FFFr>%2AJr^s!y0-BmkpM5JTkajOE(F6|l2h^s`~b4ijxZmKTxL$4eHOtFeEZ&^FsG9zg7Ybe&^ zKZ{f!KL{oi;V_U8skheK;-7Qa9%{oy4DjYyy9eK|de6bXPktnC^zEAcVTU#c%>i>8 zaBpe${Dl`UTzdZHmD2L_7hXJHT6y}V3(L6Dxvyt{6HKrqG5#_^{SaRbH>E!xDcv!j zg5WJ!1vKG)jQ-x|+U8+)>KxfgIOCP?IWP6+9QDZPU%q($!o}xTo*f^(`U?*8ul5|P zlaUIbIPG2A7+5!T|Nh?05(Pwwb-d=+7AaC8PHc!8)q1 z%~qm1ET1Ey;!j!SK}OWA|4f27fP{d73BrKF|9W%Ygg52cUbdK#S`}0nd+c6r%)vjr zYCd%Giz?56Dl+Q(_@+WG=s(;shA9Lw#A^+lm|H+#U8@Q=KQ+s!ezmps_#VE{y0hn- z7oC!zGS!g_7LI zi==7}tPATq+@A~DI3q?Eo@sIR?cLMS7BX8iwKjWrBRsu=KD79`#FW5+ftu{QoP@=pX@bf(UkY_KeIXY*W>*R$%p&tu`}WZ54=}& z^d2KS_Sn5#ynw_gRvcbo3!DL=I54Nv^Caf;7h!?#{Q9d2{=R5Ip92Ku(GE(najGvn zXdH#*6z8#1+C;cOBhXT%-!(^&LEunX76*tD15nPqgYypd%~Ff-L;&2>obAjVL#|P9 zXAjVrhH`t`?Uh20pgac)Da!}7uN}E2ZsJieIH1#j*RED+;7wf|5_$LG0!EO!;;D@l zQG3tiBzqoARmEc5Kk>yuVZ0#Nr^fEsr2?w5F#j?dG)F0v}b+zEve};5uPdCg)Qmx0@sXBJsa$H6>!@1W(tRSQJdyRn!)ZnqBFGK6Q1)>|-W=yg6s`CJ zDXcU8*z62ci4ha>Ll{^KX5O2_4ca0|jaDN5bF3MA&M(-7&lipsju(y;t{T5pJWzb@ HK;i!Y)7rBk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd9495c6e6cfb3f8f791e36981a4fa3c7fc2d2d4 GIT binary patch literal 5449 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/tests.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/tests.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4054184364a41c42fe389923a59d423014422386 GIT binary patch literal 8149 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 Jg{rkn|1XdXb~FG0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c80756477bf32c91834cc46fce84d2d95525d2f6 GIT binary patch literal 16056 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 W?u%}<^5Dz?*LF+pL+)Jl%l{jR_?mYB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/__pycache__/widgets.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/__pycache__/widgets.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d993c0c46811aa7afb3ab8dbb42deea5ec0ed04 GIT binary patch literal 18566 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 z len(set(obj.exclude)): + return [ + checks.Error( + "The value of 'exclude' contains duplicate field(s).", + obj=obj.__class__, + id="admin.E015", + ) + ] + else: + return [] + + def _check_form(self, obj): + """Check that form subclasses BaseModelForm.""" + if not _issubclass(obj.form, BaseModelForm): + return must_inherit_from( + parent="BaseModelForm", option="form", obj=obj, id="admin.E016" + ) + else: + return [] + + def _check_filter_vertical(self, obj): + """Check that filter_vertical is a sequence of field names.""" + if not isinstance(obj.filter_vertical, (list, tuple)): + return must_be( + "a list or tuple", option="filter_vertical", obj=obj, id="admin.E017" + ) + else: + return list( + chain.from_iterable( + self._check_filter_item( + obj, field_name, "filter_vertical[%d]" % index + ) + for index, field_name in enumerate(obj.filter_vertical) + ) + ) + + def _check_filter_horizontal(self, obj): + """Check that filter_horizontal is a sequence of field names.""" + if not isinstance(obj.filter_horizontal, (list, tuple)): + return must_be( + "a list or tuple", option="filter_horizontal", obj=obj, id="admin.E018" + ) + else: + return list( + chain.from_iterable( + self._check_filter_item( + obj, field_name, "filter_horizontal[%d]" % index + ) + for index, field_name in enumerate(obj.filter_horizontal) + ) + ) + + def _check_filter_item(self, obj, field_name, label): + """Check one item of `filter_vertical` or `filter_horizontal`, i.e. + check that given field exists and is a ManyToManyField.""" + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E019" + ) + else: + if not field.many_to_many: + return must_be( + "a many-to-many field", option=label, obj=obj, id="admin.E020" + ) + else: + return [] + + def _check_radio_fields(self, obj): + """Check that `radio_fields` is a dictionary.""" + if not isinstance(obj.radio_fields, dict): + return must_be( + "a dictionary", option="radio_fields", obj=obj, id="admin.E021" + ) + else: + return list( + chain.from_iterable( + self._check_radio_fields_key(obj, field_name, "radio_fields") + + self._check_radio_fields_value( + obj, val, 'radio_fields["%s"]' % field_name + ) + for field_name, val in obj.radio_fields.items() + ) + ) + + def _check_radio_fields_key(self, obj, field_name, label): + """Check that a key of `radio_fields` dictionary is name of existing + field and that the field is a ForeignKey or has `choices` defined.""" + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E022" + ) + else: + if not (isinstance(field, models.ForeignKey) or field.choices): + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not an " + "instance of ForeignKey, and does not have a 'choices' " + "definition." % (label, field_name), + obj=obj.__class__, + id="admin.E023", + ) + ] + else: + return [] + + def _check_radio_fields_value(self, obj, val, label): + """Check type of a value of `radio_fields` dictionary.""" + + from django.contrib.admin.options import HORIZONTAL, VERTICAL + + if val not in (HORIZONTAL, VERTICAL): + return [ + checks.Error( + "The value of '%s' must be either admin.HORIZONTAL or " + "admin.VERTICAL." % label, + obj=obj.__class__, + id="admin.E024", + ) + ] + else: + return [] + + def _check_view_on_site_url(self, obj): + if not callable(obj.view_on_site) and not isinstance(obj.view_on_site, bool): + return [ + checks.Error( + "The value of 'view_on_site' must be a callable or a boolean " + "value.", + obj=obj.__class__, + id="admin.E025", + ) + ] + else: + return [] + + def _check_prepopulated_fields(self, obj): + """Check that `prepopulated_fields` is a dictionary containing allowed + field types.""" + if not isinstance(obj.prepopulated_fields, dict): + return must_be( + "a dictionary", option="prepopulated_fields", obj=obj, id="admin.E026" + ) + else: + return list( + chain.from_iterable( + self._check_prepopulated_fields_key( + obj, field_name, "prepopulated_fields" + ) + + self._check_prepopulated_fields_value( + obj, val, 'prepopulated_fields["%s"]' % field_name + ) + for field_name, val in obj.prepopulated_fields.items() + ) + ) + + def _check_prepopulated_fields_key(self, obj, field_name, label): + """Check a key of `prepopulated_fields` dictionary, i.e. check that it + is a name of existing field and the field is one of the allowed types. + """ + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E027" + ) + else: + if isinstance( + field, (models.DateTimeField, models.ForeignKey, models.ManyToManyField) + ): + return [ + checks.Error( + "The value of '%s' refers to '%s', which must not be a " + "DateTimeField, a ForeignKey, a OneToOneField, or a " + "ManyToManyField." % (label, field_name), + obj=obj.__class__, + id="admin.E028", + ) + ] + else: + return [] + + def _check_prepopulated_fields_value(self, obj, val, label): + """Check a value of `prepopulated_fields` dictionary, i.e. it's an + iterable of existing fields.""" + + if not isinstance(val, (list, tuple)): + return must_be("a list or tuple", option=label, obj=obj, id="admin.E029") + else: + return list( + chain.from_iterable( + self._check_prepopulated_fields_value_item( + obj, subfield_name, "%s[%r]" % (label, index) + ) + for index, subfield_name in enumerate(val) + ) + ) + + def _check_prepopulated_fields_value_item(self, obj, field_name, label): + """For `prepopulated_fields` equal to {"slug": ("title",)}, + `field_name` is "title".""" + + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E030" + ) + else: + return [] + + def _check_ordering(self, obj): + """Check that ordering refers to existing fields or is random.""" + + # ordering = None + if obj.ordering is None: # The default value is None + return [] + elif not isinstance(obj.ordering, (list, tuple)): + return must_be( + "a list or tuple", option="ordering", obj=obj, id="admin.E031" + ) + else: + return list( + chain.from_iterable( + self._check_ordering_item(obj, field_name, "ordering[%d]" % index) + for index, field_name in enumerate(obj.ordering) + ) + ) + + def _check_ordering_item(self, obj, field_name, label): + """Check that `ordering` refers to existing fields.""" + if isinstance(field_name, (Combinable, models.OrderBy)): + if not isinstance(field_name, models.OrderBy): + field_name = field_name.asc() + if isinstance(field_name.expression, models.F): + field_name = field_name.expression.name + else: + return [] + if field_name == "?" and len(obj.ordering) != 1: + return [ + checks.Error( + "The value of 'ordering' has the random ordering marker '?', " + "but contains other fields as well.", + hint='Either remove the "?", or remove the other fields.', + obj=obj.__class__, + id="admin.E032", + ) + ] + elif field_name == "?": + return [] + elif LOOKUP_SEP in field_name: + # Skip ordering in the format field1__field2 (FIXME: checking + # this format would be nice, but it's a little fiddly). + return [] + else: + if field_name.startswith("-"): + field_name = field_name[1:] + if field_name == "pk": + return [] + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E033" + ) + else: + return [] + + def _check_readonly_fields(self, obj): + """Check that readonly_fields refers to proper attribute or field.""" + + if obj.readonly_fields == (): + return [] + elif not isinstance(obj.readonly_fields, (list, tuple)): + return must_be( + "a list or tuple", option="readonly_fields", obj=obj, id="admin.E034" + ) + else: + return list( + chain.from_iterable( + self._check_readonly_fields_item( + obj, field_name, "readonly_fields[%d]" % index + ) + for index, field_name in enumerate(obj.readonly_fields) + ) + ) + + def _check_readonly_fields_item(self, obj, field_name, label): + if callable(field_name): + return [] + elif hasattr(obj, field_name): + return [] + elif hasattr(obj.model, field_name): + return [] + else: + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return [ + checks.Error( + "The value of '%s' is not a callable, an attribute of " + "'%s', or an attribute of '%s'." + % ( + label, + obj.__class__.__name__, + obj.model._meta.label, + ), + obj=obj.__class__, + id="admin.E035", + ) + ] + else: + return [] + + +class ModelAdminChecks(BaseModelAdminChecks): + def check(self, admin_obj, **kwargs): + return [ + *super().check(admin_obj), + *self._check_save_as(admin_obj), + *self._check_save_on_top(admin_obj), + *self._check_inlines(admin_obj), + *self._check_list_display(admin_obj), + *self._check_list_display_links(admin_obj), + *self._check_list_filter(admin_obj), + *self._check_list_select_related(admin_obj), + *self._check_list_per_page(admin_obj), + *self._check_list_max_show_all(admin_obj), + *self._check_list_editable(admin_obj), + *self._check_search_fields(admin_obj), + *self._check_date_hierarchy(admin_obj), + *self._check_action_permission_methods(admin_obj), + *self._check_actions_uniqueness(admin_obj), + ] + + def _check_save_as(self, obj): + """Check save_as is a boolean.""" + + if not isinstance(obj.save_as, bool): + return must_be("a boolean", option="save_as", obj=obj, id="admin.E101") + else: + return [] + + def _check_save_on_top(self, obj): + """Check save_on_top is a boolean.""" + + if not isinstance(obj.save_on_top, bool): + return must_be("a boolean", option="save_on_top", obj=obj, id="admin.E102") + else: + return [] + + def _check_inlines(self, obj): + """Check all inline model admin classes.""" + + if not isinstance(obj.inlines, (list, tuple)): + return must_be( + "a list or tuple", option="inlines", obj=obj, id="admin.E103" + ) + else: + return list( + chain.from_iterable( + self._check_inlines_item(obj, item, "inlines[%d]" % index) + for index, item in enumerate(obj.inlines) + ) + ) + + def _check_inlines_item(self, obj, inline, label): + """Check one inline model admin.""" + try: + inline_label = inline.__module__ + "." + inline.__name__ + except AttributeError: + return [ + checks.Error( + "'%s' must inherit from 'InlineModelAdmin'." % obj, + obj=obj.__class__, + id="admin.E104", + ) + ] + + from django.contrib.admin.options import InlineModelAdmin + + if not _issubclass(inline, InlineModelAdmin): + return [ + checks.Error( + "'%s' must inherit from 'InlineModelAdmin'." % inline_label, + obj=obj.__class__, + id="admin.E104", + ) + ] + elif not inline.model: + return [ + checks.Error( + "'%s' must have a 'model' attribute." % inline_label, + obj=obj.__class__, + id="admin.E105", + ) + ] + elif not _issubclass(inline.model, models.Model): + return must_be( + "a Model", option="%s.model" % inline_label, obj=obj, id="admin.E106" + ) + else: + return inline(obj.model, obj.admin_site).check() + + def _check_list_display(self, obj): + """Check that list_display only contains fields or usable attributes.""" + + if not isinstance(obj.list_display, (list, tuple)): + return must_be( + "a list or tuple", option="list_display", obj=obj, id="admin.E107" + ) + else: + return list( + chain.from_iterable( + self._check_list_display_item(obj, item, "list_display[%d]" % index) + for index, item in enumerate(obj.list_display) + ) + ) + + def _check_list_display_item(self, obj, item, label): + if callable(item): + return [] + elif hasattr(obj, item): + return [] + try: + field = obj.model._meta.get_field(item) + except FieldDoesNotExist: + try: + field = getattr(obj.model, item) + except AttributeError: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not a " + "callable, an attribute of '%s', or an attribute or " + "method on '%s'." + % ( + label, + item, + obj.__class__.__name__, + obj.model._meta.label, + ), + obj=obj.__class__, + id="admin.E108", + ) + ] + if isinstance(field, models.ManyToManyField): + return [ + checks.Error( + "The value of '%s' must not be a ManyToManyField." % label, + obj=obj.__class__, + id="admin.E109", + ) + ] + return [] + + def _check_list_display_links(self, obj): + """Check that list_display_links is a unique subset of list_display.""" + from django.contrib.admin.options import ModelAdmin + + if obj.list_display_links is None: + return [] + elif not isinstance(obj.list_display_links, (list, tuple)): + return must_be( + "a list, a tuple, or None", + option="list_display_links", + obj=obj, + id="admin.E110", + ) + # Check only if ModelAdmin.get_list_display() isn't overridden. + elif obj.get_list_display.__func__ is ModelAdmin.get_list_display: + return list( + chain.from_iterable( + self._check_list_display_links_item( + obj, field_name, "list_display_links[%d]" % index + ) + for index, field_name in enumerate(obj.list_display_links) + ) + ) + return [] + + def _check_list_display_links_item(self, obj, field_name, label): + if field_name not in obj.list_display: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not defined in " + "'list_display'." % (label, field_name), + obj=obj.__class__, + id="admin.E111", + ) + ] + else: + return [] + + def _check_list_filter(self, obj): + if not isinstance(obj.list_filter, (list, tuple)): + return must_be( + "a list or tuple", option="list_filter", obj=obj, id="admin.E112" + ) + else: + return list( + chain.from_iterable( + self._check_list_filter_item(obj, item, "list_filter[%d]" % index) + for index, item in enumerate(obj.list_filter) + ) + ) + + def _check_list_filter_item(self, obj, item, label): + """ + Check one item of `list_filter`, i.e. check if it is one of three options: + 1. 'field' -- a basic field filter, possibly w/ relationships (e.g. + 'field__rel') + 2. ('field', SomeFieldListFilter) - a field-based list filter class + 3. SomeListFilter - a non-field list filter class + """ + from django.contrib.admin import FieldListFilter, ListFilter + + if callable(item) and not isinstance(item, models.Field): + # If item is option 3, it should be a ListFilter... + if not _issubclass(item, ListFilter): + return must_inherit_from( + parent="ListFilter", option=label, obj=obj, id="admin.E113" + ) + # ... but not a FieldListFilter. + elif issubclass(item, FieldListFilter): + return [ + checks.Error( + "The value of '%s' must not inherit from 'FieldListFilter'." + % label, + obj=obj.__class__, + id="admin.E114", + ) + ] + else: + return [] + elif isinstance(item, (tuple, list)): + # item is option #2 + field, list_filter_class = item + if not _issubclass(list_filter_class, FieldListFilter): + return must_inherit_from( + parent="FieldListFilter", + option="%s[1]" % label, + obj=obj, + id="admin.E115", + ) + else: + return [] + else: + # item is option #1 + field = item + + # Validate the field string + try: + get_fields_from_path(obj.model, field) + except (NotRelationField, FieldDoesNotExist): + return [ + checks.Error( + "The value of '%s' refers to '%s', which does not refer to a " + "Field." % (label, field), + obj=obj.__class__, + id="admin.E116", + ) + ] + else: + return [] + + def _check_list_select_related(self, obj): + """Check that list_select_related is a boolean, a list or a tuple.""" + + if not isinstance(obj.list_select_related, (bool, list, tuple)): + return must_be( + "a boolean, tuple or list", + option="list_select_related", + obj=obj, + id="admin.E117", + ) + else: + return [] + + def _check_list_per_page(self, obj): + """Check that list_per_page is an integer.""" + + if not isinstance(obj.list_per_page, int): + return must_be( + "an integer", option="list_per_page", obj=obj, id="admin.E118" + ) + else: + return [] + + def _check_list_max_show_all(self, obj): + """Check that list_max_show_all is an integer.""" + + if not isinstance(obj.list_max_show_all, int): + return must_be( + "an integer", option="list_max_show_all", obj=obj, id="admin.E119" + ) + else: + return [] + + def _check_list_editable(self, obj): + """Check that list_editable is a sequence of editable fields from + list_display without first element.""" + + if not isinstance(obj.list_editable, (list, tuple)): + return must_be( + "a list or tuple", option="list_editable", obj=obj, id="admin.E120" + ) + else: + return list( + chain.from_iterable( + self._check_list_editable_item( + obj, item, "list_editable[%d]" % index + ) + for index, item in enumerate(obj.list_editable) + ) + ) + + def _check_list_editable_item(self, obj, field_name, label): + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field( + field=field_name, option=label, obj=obj, id="admin.E121" + ) + else: + if field_name not in obj.list_display: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not " + "contained in 'list_display'." % (label, field_name), + obj=obj.__class__, + id="admin.E122", + ) + ] + elif obj.list_display_links and field_name in obj.list_display_links: + return [ + checks.Error( + "The value of '%s' cannot be in both 'list_editable' and " + "'list_display_links'." % field_name, + obj=obj.__class__, + id="admin.E123", + ) + ] + # If list_display[0] is in list_editable, check that + # list_display_links is set. See #22792 and #26229 for use cases. + elif ( + obj.list_display[0] == field_name + and not obj.list_display_links + and obj.list_display_links is not None + ): + return [ + checks.Error( + "The value of '%s' refers to the first field in 'list_display' " + "('%s'), which cannot be used unless 'list_display_links' is " + "set." % (label, obj.list_display[0]), + obj=obj.__class__, + id="admin.E124", + ) + ] + elif not field.editable: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not editable " + "through the admin." % (label, field_name), + obj=obj.__class__, + id="admin.E125", + ) + ] + else: + return [] + + def _check_search_fields(self, obj): + """Check search_fields is a sequence.""" + + if not isinstance(obj.search_fields, (list, tuple)): + return must_be( + "a list or tuple", option="search_fields", obj=obj, id="admin.E126" + ) + else: + return [] + + def _check_date_hierarchy(self, obj): + """Check that date_hierarchy refers to DateField or DateTimeField.""" + + if obj.date_hierarchy is None: + return [] + else: + try: + field = get_fields_from_path(obj.model, obj.date_hierarchy)[-1] + except (NotRelationField, FieldDoesNotExist): + return [ + checks.Error( + "The value of 'date_hierarchy' refers to '%s', which " + "does not refer to a Field." % obj.date_hierarchy, + obj=obj.__class__, + id="admin.E127", + ) + ] + else: + if not isinstance(field, (models.DateField, models.DateTimeField)): + return must_be( + "a DateField or DateTimeField", + option="date_hierarchy", + obj=obj, + id="admin.E128", + ) + else: + return [] + + def _check_action_permission_methods(self, obj): + """ + Actions with an allowed_permission attribute require the ModelAdmin to + implement a has__permission() method for each permission. + """ + actions = obj._get_base_actions() + errors = [] + for func, name, _ in actions: + if not hasattr(func, "allowed_permissions"): + continue + for permission in func.allowed_permissions: + method_name = "has_%s_permission" % permission + if not hasattr(obj, method_name): + errors.append( + checks.Error( + "%s must define a %s() method for the %s action." + % ( + obj.__class__.__name__, + method_name, + func.__name__, + ), + obj=obj.__class__, + id="admin.E129", + ) + ) + return errors + + def _check_actions_uniqueness(self, obj): + """Check that every action has a unique __name__.""" + errors = [] + names = collections.Counter(name for _, name, _ in obj._get_base_actions()) + for name, count in names.items(): + if count > 1: + errors.append( + checks.Error( + "__name__ attributes of actions defined in %s must be " + "unique. Name %r is not unique." + % ( + obj.__class__.__name__, + name, + ), + obj=obj.__class__, + id="admin.E130", + ) + ) + return errors + + +class InlineModelAdminChecks(BaseModelAdminChecks): + def check(self, inline_obj, **kwargs): + parent_model = inline_obj.parent_model + return [ + *super().check(inline_obj), + *self._check_relation(inline_obj, parent_model), + *self._check_exclude_of_parent_model(inline_obj, parent_model), + *self._check_extra(inline_obj), + *self._check_max_num(inline_obj), + *self._check_min_num(inline_obj), + *self._check_formset(inline_obj), + ] + + def _check_exclude_of_parent_model(self, obj, parent_model): + # Do not perform more specific checks if the base checks result in an + # error. + errors = super()._check_exclude(obj) + if errors: + return [] + + # Skip if `fk_name` is invalid. + if self._check_relation(obj, parent_model): + return [] + + if obj.exclude is None: + return [] + + fk = _get_foreign_key(parent_model, obj.model, fk_name=obj.fk_name) + if fk.name in obj.exclude: + return [ + checks.Error( + "Cannot exclude the field '%s', because it is the foreign key " + "to the parent model '%s'." + % ( + fk.name, + parent_model._meta.label, + ), + obj=obj.__class__, + id="admin.E201", + ) + ] + else: + return [] + + def _check_relation(self, obj, parent_model): + try: + _get_foreign_key(parent_model, obj.model, fk_name=obj.fk_name) + except ValueError as e: + return [checks.Error(e.args[0], obj=obj.__class__, id="admin.E202")] + else: + return [] + + def _check_extra(self, obj): + """Check that extra is an integer.""" + + if not isinstance(obj.extra, int): + return must_be("an integer", option="extra", obj=obj, id="admin.E203") + else: + return [] + + def _check_max_num(self, obj): + """Check that max_num is an integer.""" + + if obj.max_num is None: + return [] + elif not isinstance(obj.max_num, int): + return must_be("an integer", option="max_num", obj=obj, id="admin.E204") + else: + return [] + + def _check_min_num(self, obj): + """Check that min_num is an integer.""" + + if obj.min_num is None: + return [] + elif not isinstance(obj.min_num, int): + return must_be("an integer", option="min_num", obj=obj, id="admin.E205") + else: + return [] + + def _check_formset(self, obj): + """Check formset is a subclass of BaseModelFormSet.""" + + if not _issubclass(obj.formset, BaseModelFormSet): + return must_inherit_from( + parent="BaseModelFormSet", option="formset", obj=obj, id="admin.E206" + ) + else: + return [] + + +def must_be(type, option, obj, id): + return [ + checks.Error( + "The value of '%s' must be %s." % (option, type), + obj=obj.__class__, + id=id, + ), + ] + + +def must_inherit_from(parent, option, obj, id): + return [ + checks.Error( + "The value of '%s' must inherit from '%s'." % (option, parent), + obj=obj.__class__, + id=id, + ), + ] + + +def refer_to_missing_field(field, option, obj, id): + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not a field of '%s'." + % (option, field, obj.model._meta.label), + obj=obj.__class__, + id=id, + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/admin/decorators.py b/venv/Lib/site-packages/django/contrib/admin/decorators.py new file mode 100644 index 000000000..d3ff56a59 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/decorators.py @@ -0,0 +1,111 @@ +def action(function=None, *, permissions=None, description=None): + """ + Conveniently add attributes to an action function:: + + @admin.action( + permissions=['publish'], + description='Mark selected stories as published', + ) + def make_published(self, request, queryset): + queryset.update(status='p') + + This is equivalent to setting some attributes (with the original, longer + names) on the function directly:: + + def make_published(self, request, queryset): + queryset.update(status='p') + make_published.allowed_permissions = ['publish'] + make_published.short_description = 'Mark selected stories as published' + """ + + def decorator(func): + if permissions is not None: + func.allowed_permissions = permissions + if description is not None: + func.short_description = description + return func + + if function is None: + return decorator + else: + return decorator(function) + + +def display( + function=None, *, boolean=None, ordering=None, description=None, empty_value=None +): + """ + Conveniently add attributes to a display function:: + + @admin.display( + boolean=True, + ordering='-publish_date', + description='Is Published?', + ) + def is_published(self, obj): + return obj.publish_date is not None + + This is equivalent to setting some attributes (with the original, longer + names) on the function directly:: + + def is_published(self, obj): + return obj.publish_date is not None + is_published.boolean = True + is_published.admin_order_field = '-publish_date' + is_published.short_description = 'Is Published?' + """ + + def decorator(func): + if boolean is not None and empty_value is not None: + raise ValueError( + "The boolean and empty_value arguments to the @display " + "decorator are mutually exclusive." + ) + if boolean is not None: + func.boolean = boolean + if ordering is not None: + func.admin_order_field = ordering + if description is not None: + func.short_description = description + if empty_value is not None: + func.empty_value_display = empty_value + return func + + if function is None: + return decorator + else: + return decorator(function) + + +def register(*models, site=None): + """ + Register the given model(s) classes and wrapped ModelAdmin class with + admin site: + + @register(Author) + class AuthorAdmin(admin.ModelAdmin): + pass + + The `site` kwarg is an admin site to use instead of the default admin site. + """ + from django.contrib.admin import ModelAdmin + from django.contrib.admin.sites import AdminSite + from django.contrib.admin.sites import site as default_site + + def _model_admin_wrapper(admin_class): + if not models: + raise ValueError("At least one model must be passed to register.") + + admin_site = site or default_site + + if not isinstance(admin_site, AdminSite): + raise ValueError("site must subclass AdminSite") + + if not issubclass(admin_class, ModelAdmin): + raise ValueError("Wrapped class must subclass ModelAdmin.") + + admin_site.register(models, admin_class=admin_class) + + return admin_class + + return _model_admin_wrapper diff --git a/venv/Lib/site-packages/django/contrib/admin/exceptions.py b/venv/Lib/site-packages/django/contrib/admin/exceptions.py new file mode 100644 index 000000000..2ee8f625c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/exceptions.py @@ -0,0 +1,13 @@ +from django.core.exceptions import SuspiciousOperation + + +class DisallowedModelAdminLookup(SuspiciousOperation): + """Invalid filter was passed to admin view via URL querystring""" + + pass + + +class DisallowedModelAdminToField(SuspiciousOperation): + """Invalid to_field was passed to admin view via URL query string""" + + pass diff --git a/venv/Lib/site-packages/django/contrib/admin/filters.py b/venv/Lib/site-packages/django/contrib/admin/filters.py new file mode 100644 index 000000000..011346464 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/filters.py @@ -0,0 +1,547 @@ +""" +This encapsulates the logic for displaying filters in the Django admin. +Filters are specified in models with the "list_filter" option. + +Each filter subclass knows how to display a filter for a field that passes a +certain test -- e.g. being a DateField or ForeignKey. +""" +import datetime + +from django.contrib.admin.options import IncorrectLookupParameters +from django.contrib.admin.utils import ( + get_model_from_relation, + prepare_lookup_value, + reverse_field_path, +) +from django.core.exceptions import ImproperlyConfigured, ValidationError +from django.db import models +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + + +class ListFilter: + title = None # Human-readable title to appear in the right sidebar. + template = "admin/filter.html" + + def __init__(self, request, params, model, model_admin): + # This dictionary will eventually contain the request's query string + # parameters actually used by this filter. + self.used_parameters = {} + if self.title is None: + raise ImproperlyConfigured( + "The list filter '%s' does not specify a 'title'." + % self.__class__.__name__ + ) + + def has_output(self): + """ + Return True if some choices would be output for this filter. + """ + raise NotImplementedError( + "subclasses of ListFilter must provide a has_output() method" + ) + + def choices(self, changelist): + """ + Return choices ready to be output in the template. + + `changelist` is the ChangeList to be displayed. + """ + raise NotImplementedError( + "subclasses of ListFilter must provide a choices() method" + ) + + def queryset(self, request, queryset): + """ + Return the filtered queryset. + """ + raise NotImplementedError( + "subclasses of ListFilter must provide a queryset() method" + ) + + def expected_parameters(self): + """ + Return the list of parameter names that are expected from the + request's query string and that will be used by this filter. + """ + raise NotImplementedError( + "subclasses of ListFilter must provide an expected_parameters() method" + ) + + +class SimpleListFilter(ListFilter): + # The parameter that should be used in the query string for that filter. + parameter_name = None + + def __init__(self, request, params, model, model_admin): + super().__init__(request, params, model, model_admin) + if self.parameter_name is None: + raise ImproperlyConfigured( + "The list filter '%s' does not specify a 'parameter_name'." + % self.__class__.__name__ + ) + if self.parameter_name in params: + value = params.pop(self.parameter_name) + self.used_parameters[self.parameter_name] = value + lookup_choices = self.lookups(request, model_admin) + if lookup_choices is None: + lookup_choices = () + self.lookup_choices = list(lookup_choices) + + def has_output(self): + return len(self.lookup_choices) > 0 + + def value(self): + """ + Return the value (in string format) provided in the request's + query string for this filter, if any, or None if the value wasn't + provided. + """ + return self.used_parameters.get(self.parameter_name) + + def lookups(self, request, model_admin): + """ + Must be overridden to return a list of tuples (value, verbose value) + """ + raise NotImplementedError( + "The SimpleListFilter.lookups() method must be overridden to " + "return a list of tuples (value, verbose value)." + ) + + def expected_parameters(self): + return [self.parameter_name] + + def choices(self, changelist): + yield { + "selected": self.value() is None, + "query_string": changelist.get_query_string(remove=[self.parameter_name]), + "display": _("All"), + } + for lookup, title in self.lookup_choices: + yield { + "selected": self.value() == str(lookup), + "query_string": changelist.get_query_string( + {self.parameter_name: lookup} + ), + "display": title, + } + + +class FieldListFilter(ListFilter): + _field_list_filters = [] + _take_priority_index = 0 + + def __init__(self, field, request, params, model, model_admin, field_path): + self.field = field + self.field_path = field_path + self.title = getattr(field, "verbose_name", field_path) + super().__init__(request, params, model, model_admin) + for p in self.expected_parameters(): + if p in params: + value = params.pop(p) + self.used_parameters[p] = prepare_lookup_value(p, value) + + def has_output(self): + return True + + def queryset(self, request, queryset): + try: + return queryset.filter(**self.used_parameters) + except (ValueError, ValidationError) as e: + # Fields may raise a ValueError or ValidationError when converting + # the parameters to the correct type. + raise IncorrectLookupParameters(e) + + @classmethod + def register(cls, test, list_filter_class, take_priority=False): + if take_priority: + # This is to allow overriding the default filters for certain types + # of fields with some custom filters. The first found in the list + # is used in priority. + cls._field_list_filters.insert( + cls._take_priority_index, (test, list_filter_class) + ) + cls._take_priority_index += 1 + else: + cls._field_list_filters.append((test, list_filter_class)) + + @classmethod + def create(cls, field, request, params, model, model_admin, field_path): + for test, list_filter_class in cls._field_list_filters: + if test(field): + return list_filter_class( + field, request, params, model, model_admin, field_path=field_path + ) + + +class RelatedFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + other_model = get_model_from_relation(field) + self.lookup_kwarg = "%s__%s__exact" % (field_path, field.target_field.name) + self.lookup_kwarg_isnull = "%s__isnull" % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + super().__init__(field, request, params, model, model_admin, field_path) + self.lookup_choices = self.field_choices(field, request, model_admin) + if hasattr(field, "verbose_name"): + self.lookup_title = field.verbose_name + else: + self.lookup_title = other_model._meta.verbose_name + self.title = self.lookup_title + self.empty_value_display = model_admin.get_empty_value_display() + + @property + def include_empty_choice(self): + """ + Return True if a "(None)" choice should be included, which filters + out everything except empty relationships. + """ + return self.field.null or (self.field.is_relation and self.field.many_to_many) + + def has_output(self): + if self.include_empty_choice: + extra = 1 + else: + extra = 0 + return len(self.lookup_choices) + extra > 1 + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def field_admin_ordering(self, field, request, model_admin): + """ + Return the model admin's ordering for related field, if provided. + """ + related_admin = model_admin.admin_site._registry.get(field.remote_field.model) + if related_admin is not None: + return related_admin.get_ordering(request) + return () + + def field_choices(self, field, request, model_admin): + ordering = self.field_admin_ordering(field, request, model_admin) + return field.get_choices(include_blank=False, ordering=ordering) + + def choices(self, changelist): + yield { + "selected": self.lookup_val is None and not self.lookup_val_isnull, + "query_string": changelist.get_query_string( + remove=[self.lookup_kwarg, self.lookup_kwarg_isnull] + ), + "display": _("All"), + } + for pk_val, val in self.lookup_choices: + yield { + "selected": self.lookup_val == str(pk_val), + "query_string": changelist.get_query_string( + {self.lookup_kwarg: pk_val}, [self.lookup_kwarg_isnull] + ), + "display": val, + } + if self.include_empty_choice: + yield { + "selected": bool(self.lookup_val_isnull), + "query_string": changelist.get_query_string( + {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg] + ), + "display": self.empty_value_display, + } + + +FieldListFilter.register(lambda f: f.remote_field, RelatedFieldListFilter) + + +class BooleanFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = "%s__exact" % field_path + self.lookup_kwarg2 = "%s__isnull" % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val2 = params.get(self.lookup_kwarg2) + super().__init__(field, request, params, model, model_admin, field_path) + if ( + self.used_parameters + and self.lookup_kwarg in self.used_parameters + and self.used_parameters[self.lookup_kwarg] in ("1", "0") + ): + self.used_parameters[self.lookup_kwarg] = bool( + int(self.used_parameters[self.lookup_kwarg]) + ) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg2] + + def choices(self, changelist): + field_choices = dict(self.field.flatchoices) + for lookup, title in ( + (None, _("All")), + ("1", field_choices.get(True, _("Yes"))), + ("0", field_choices.get(False, _("No"))), + ): + yield { + "selected": self.lookup_val == lookup and not self.lookup_val2, + "query_string": changelist.get_query_string( + {self.lookup_kwarg: lookup}, [self.lookup_kwarg2] + ), + "display": title, + } + if self.field.null: + yield { + "selected": self.lookup_val2 == "True", + "query_string": changelist.get_query_string( + {self.lookup_kwarg2: "True"}, [self.lookup_kwarg] + ), + "display": field_choices.get(None, _("Unknown")), + } + + +FieldListFilter.register( + lambda f: isinstance(f, models.BooleanField), BooleanFieldListFilter +) + + +class ChoicesFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = "%s__exact" % field_path + self.lookup_kwarg_isnull = "%s__isnull" % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def choices(self, changelist): + yield { + "selected": self.lookup_val is None, + "query_string": changelist.get_query_string( + remove=[self.lookup_kwarg, self.lookup_kwarg_isnull] + ), + "display": _("All"), + } + none_title = "" + for lookup, title in self.field.flatchoices: + if lookup is None: + none_title = title + continue + yield { + "selected": str(lookup) == self.lookup_val, + "query_string": changelist.get_query_string( + {self.lookup_kwarg: lookup}, [self.lookup_kwarg_isnull] + ), + "display": title, + } + if none_title: + yield { + "selected": bool(self.lookup_val_isnull), + "query_string": changelist.get_query_string( + {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg] + ), + "display": none_title, + } + + +FieldListFilter.register(lambda f: bool(f.choices), ChoicesFieldListFilter) + + +class DateFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.field_generic = "%s__" % field_path + self.date_params = { + k: v for k, v in params.items() if k.startswith(self.field_generic) + } + + now = timezone.now() + # When time zone support is enabled, convert "now" to the user's time + # zone so Django's definition of "Today" matches what the user expects. + if timezone.is_aware(now): + now = timezone.localtime(now) + + if isinstance(field, models.DateTimeField): + today = now.replace(hour=0, minute=0, second=0, microsecond=0) + else: # field is a models.DateField + today = now.date() + tomorrow = today + datetime.timedelta(days=1) + if today.month == 12: + next_month = today.replace(year=today.year + 1, month=1, day=1) + else: + next_month = today.replace(month=today.month + 1, day=1) + next_year = today.replace(year=today.year + 1, month=1, day=1) + + self.lookup_kwarg_since = "%s__gte" % field_path + self.lookup_kwarg_until = "%s__lt" % field_path + self.links = ( + (_("Any date"), {}), + ( + _("Today"), + { + self.lookup_kwarg_since: str(today), + self.lookup_kwarg_until: str(tomorrow), + }, + ), + ( + _("Past 7 days"), + { + self.lookup_kwarg_since: str(today - datetime.timedelta(days=7)), + self.lookup_kwarg_until: str(tomorrow), + }, + ), + ( + _("This month"), + { + self.lookup_kwarg_since: str(today.replace(day=1)), + self.lookup_kwarg_until: str(next_month), + }, + ), + ( + _("This year"), + { + self.lookup_kwarg_since: str(today.replace(month=1, day=1)), + self.lookup_kwarg_until: str(next_year), + }, + ), + ) + if field.null: + self.lookup_kwarg_isnull = "%s__isnull" % field_path + self.links += ( + (_("No date"), {self.field_generic + "isnull": "True"}), + (_("Has date"), {self.field_generic + "isnull": "False"}), + ) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + params = [self.lookup_kwarg_since, self.lookup_kwarg_until] + if self.field.null: + params.append(self.lookup_kwarg_isnull) + return params + + def choices(self, changelist): + for title, param_dict in self.links: + yield { + "selected": self.date_params == param_dict, + "query_string": changelist.get_query_string( + param_dict, [self.field_generic] + ), + "display": title, + } + + +FieldListFilter.register(lambda f: isinstance(f, models.DateField), DateFieldListFilter) + + +# This should be registered last, because it's a last resort. For example, +# if a field is eligible to use the BooleanFieldListFilter, that'd be much +# more appropriate, and the AllValuesFieldListFilter won't get used for it. +class AllValuesFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = field_path + self.lookup_kwarg_isnull = "%s__isnull" % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + self.empty_value_display = model_admin.get_empty_value_display() + parent_model, reverse_path = reverse_field_path(model, field_path) + # Obey parent ModelAdmin queryset when deciding which options to show + if model == parent_model: + queryset = model_admin.get_queryset(request) + else: + queryset = parent_model._default_manager.all() + self.lookup_choices = ( + queryset.distinct().order_by(field.name).values_list(field.name, flat=True) + ) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def choices(self, changelist): + yield { + "selected": self.lookup_val is None and self.lookup_val_isnull is None, + "query_string": changelist.get_query_string( + remove=[self.lookup_kwarg, self.lookup_kwarg_isnull] + ), + "display": _("All"), + } + include_none = False + for val in self.lookup_choices: + if val is None: + include_none = True + continue + val = str(val) + yield { + "selected": self.lookup_val == val, + "query_string": changelist.get_query_string( + {self.lookup_kwarg: val}, [self.lookup_kwarg_isnull] + ), + "display": val, + } + if include_none: + yield { + "selected": bool(self.lookup_val_isnull), + "query_string": changelist.get_query_string( + {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg] + ), + "display": self.empty_value_display, + } + + +FieldListFilter.register(lambda f: True, AllValuesFieldListFilter) + + +class RelatedOnlyFieldListFilter(RelatedFieldListFilter): + def field_choices(self, field, request, model_admin): + pk_qs = ( + model_admin.get_queryset(request) + .distinct() + .values_list("%s__pk" % self.field_path, flat=True) + ) + ordering = self.field_admin_ordering(field, request, model_admin) + return field.get_choices( + include_blank=False, limit_choices_to={"pk__in": pk_qs}, ordering=ordering + ) + + +class EmptyFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + if not field.empty_strings_allowed and not field.null: + raise ImproperlyConfigured( + "The list filter '%s' cannot be used with field '%s' which " + "doesn't allow empty strings and nulls." + % ( + self.__class__.__name__, + field.name, + ) + ) + self.lookup_kwarg = "%s__isempty" % field_path + self.lookup_val = params.get(self.lookup_kwarg) + super().__init__(field, request, params, model, model_admin, field_path) + + def queryset(self, request, queryset): + if self.lookup_kwarg not in self.used_parameters: + return queryset + if self.lookup_val not in ("0", "1"): + raise IncorrectLookupParameters + + lookup_conditions = [] + if self.field.empty_strings_allowed: + lookup_conditions.append((self.field_path, "")) + if self.field.null: + lookup_conditions.append((f"{self.field_path}__isnull", True)) + lookup_condition = models.Q(*lookup_conditions, _connector=models.Q.OR) + if self.lookup_val == "1": + return queryset.filter(lookup_condition) + return queryset.exclude(lookup_condition) + + def expected_parameters(self): + return [self.lookup_kwarg] + + def choices(self, changelist): + for lookup, title in ( + (None, _("All")), + ("1", _("Empty")), + ("0", _("Not empty")), + ): + yield { + "selected": self.lookup_val == lookup, + "query_string": changelist.get_query_string( + {self.lookup_kwarg: lookup} + ), + "display": title, + } diff --git a/venv/Lib/site-packages/django/contrib/admin/forms.py b/venv/Lib/site-packages/django/contrib/admin/forms.py new file mode 100644 index 000000000..bbb072bdb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/forms.py @@ -0,0 +1,31 @@ +from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + + +class AdminAuthenticationForm(AuthenticationForm): + """ + A custom authentication form used in the admin app. + """ + + error_messages = { + **AuthenticationForm.error_messages, + "invalid_login": _( + "Please enter the correct %(username)s and password for a staff " + "account. Note that both fields may be case-sensitive." + ), + } + required_css_class = "required" + + def confirm_login_allowed(self, user): + super().confirm_login_allowed(user) + if not user.is_staff: + raise ValidationError( + self.error_messages["invalid_login"], + code="invalid_login", + params={"username": self.username_field.verbose_name}, + ) + + +class AdminPasswordChangeForm(PasswordChangeForm): + required_css_class = "required" diff --git a/venv/Lib/site-packages/django/contrib/admin/helpers.py b/venv/Lib/site-packages/django/contrib/admin/helpers.py new file mode 100644 index 000000000..2e7a20a49 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/helpers.py @@ -0,0 +1,545 @@ +import json + +from django import forms +from django.contrib.admin.utils import ( + display_for_field, + flatten_fieldsets, + help_text_for_field, + label_for_field, + lookup_field, + quote, +) +from django.core.exceptions import ObjectDoesNotExist +from django.db.models.fields.related import ( + ForeignObjectRel, + ManyToManyRel, + OneToOneField, +) +from django.forms.utils import flatatt +from django.template.defaultfilters import capfirst, linebreaksbr +from django.urls import NoReverseMatch, reverse +from django.utils.html import conditional_escape, format_html +from django.utils.safestring import mark_safe +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ + +ACTION_CHECKBOX_NAME = "_selected_action" + + +class ActionForm(forms.Form): + action = forms.ChoiceField(label=_("Action:")) + select_across = forms.BooleanField( + label="", + required=False, + initial=0, + widget=forms.HiddenInput({"class": "select-across"}), + ) + + +checkbox = forms.CheckboxInput({"class": "action-select"}, lambda value: False) + + +class AdminForm: + def __init__( + self, + form, + fieldsets, + prepopulated_fields, + readonly_fields=None, + model_admin=None, + ): + self.form, self.fieldsets = form, fieldsets + self.prepopulated_fields = [ + {"field": form[field_name], "dependencies": [form[f] for f in dependencies]} + for field_name, dependencies in prepopulated_fields.items() + ] + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + + def __repr__(self): + return ( + f"<{self.__class__.__qualname__}: " + f"form={self.form.__class__.__qualname__} " + f"fieldsets={self.fieldsets!r}>" + ) + + def __iter__(self): + for name, options in self.fieldsets: + yield Fieldset( + self.form, + name, + readonly_fields=self.readonly_fields, + model_admin=self.model_admin, + **options, + ) + + @property + def errors(self): + return self.form.errors + + @property + def non_field_errors(self): + return self.form.non_field_errors + + @property + def media(self): + media = self.form.media + for fs in self: + media = media + fs.media + return media + + +class Fieldset: + def __init__( + self, + form, + name=None, + readonly_fields=(), + fields=(), + classes=(), + description=None, + model_admin=None, + ): + self.form = form + self.name, self.fields = name, fields + self.classes = " ".join(classes) + self.description = description + self.model_admin = model_admin + self.readonly_fields = readonly_fields + + @property + def media(self): + if "collapse" in self.classes: + return forms.Media(js=["admin/js/collapse.js"]) + return forms.Media() + + def __iter__(self): + for field in self.fields: + yield Fieldline( + self.form, field, self.readonly_fields, model_admin=self.model_admin + ) + + +class Fieldline: + def __init__(self, form, field, readonly_fields=None, model_admin=None): + self.form = form # A django.forms.Form instance + if not hasattr(field, "__iter__") or isinstance(field, str): + self.fields = [field] + else: + self.fields = field + self.has_visible_field = not all( + field in self.form.fields and self.form.fields[field].widget.is_hidden + for field in self.fields + ) + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + + def __iter__(self): + for i, field in enumerate(self.fields): + if field in self.readonly_fields: + yield AdminReadonlyField( + self.form, field, is_first=(i == 0), model_admin=self.model_admin + ) + else: + yield AdminField(self.form, field, is_first=(i == 0)) + + def errors(self): + return mark_safe( + "\n".join( + self.form[f].errors.as_ul() + for f in self.fields + if f not in self.readonly_fields + ).strip("\n") + ) + + +class AdminField: + def __init__(self, form, field, is_first): + self.field = form[field] # A django.forms.BoundField instance + self.is_first = is_first # Whether this field is first on the line + self.is_checkbox = isinstance(self.field.field.widget, forms.CheckboxInput) + self.is_readonly = False + + def label_tag(self): + classes = [] + contents = conditional_escape(self.field.label) + if self.is_checkbox: + classes.append("vCheckboxLabel") + + if self.field.field.required: + classes.append("required") + if not self.is_first: + classes.append("inline") + attrs = {"class": " ".join(classes)} if classes else {} + # checkboxes should not have a label suffix as the checkbox appears + # to the left of the label. + return self.field.label_tag( + contents=mark_safe(contents), + attrs=attrs, + label_suffix="" if self.is_checkbox else None, + ) + + def errors(self): + return mark_safe(self.field.errors.as_ul()) + + +class AdminReadonlyField: + def __init__(self, form, field, is_first, model_admin=None): + # Make self.field look a little bit like a field. This means that + # {{ field.name }} must be a useful class name to identify the field. + # For convenience, store other field-related data here too. + if callable(field): + class_name = field.__name__ if field.__name__ != "" else "" + else: + class_name = field + + if form._meta.labels and class_name in form._meta.labels: + label = form._meta.labels[class_name] + else: + label = label_for_field(field, form._meta.model, model_admin, form=form) + + if form._meta.help_texts and class_name in form._meta.help_texts: + help_text = form._meta.help_texts[class_name] + else: + help_text = help_text_for_field(class_name, form._meta.model) + + if field in form.fields: + is_hidden = form.fields[field].widget.is_hidden + else: + is_hidden = False + + self.field = { + "name": class_name, + "label": label, + "help_text": help_text, + "field": field, + "is_hidden": is_hidden, + } + self.form = form + self.model_admin = model_admin + self.is_first = is_first + self.is_checkbox = False + self.is_readonly = True + self.empty_value_display = model_admin.get_empty_value_display() + + def label_tag(self): + attrs = {} + if not self.is_first: + attrs["class"] = "inline" + label = self.field["label"] + return format_html( + "{}{}", + flatatt(attrs), + capfirst(label), + self.form.label_suffix, + ) + + def get_admin_url(self, remote_field, remote_obj): + url_name = "admin:%s_%s_change" % ( + remote_field.model._meta.app_label, + remote_field.model._meta.model_name, + ) + try: + url = reverse( + url_name, + args=[quote(remote_obj.pk)], + current_app=self.model_admin.admin_site.name, + ) + return format_html('{}', url, remote_obj) + except NoReverseMatch: + return str(remote_obj) + + def contents(self): + from django.contrib.admin.templatetags.admin_list import _boolean_icon + + field, obj, model_admin = ( + self.field["field"], + self.form.instance, + self.model_admin, + ) + try: + f, attr, value = lookup_field(field, obj, model_admin) + except (AttributeError, ValueError, ObjectDoesNotExist): + result_repr = self.empty_value_display + else: + if field in self.form.fields: + widget = self.form[field].field.widget + # This isn't elegant but suffices for contrib.auth's + # ReadOnlyPasswordHashWidget. + if getattr(widget, "read_only", False): + return widget.render(field, value) + if f is None: + if getattr(attr, "boolean", False): + result_repr = _boolean_icon(value) + else: + if hasattr(value, "__html__"): + result_repr = value + else: + result_repr = linebreaksbr(value) + else: + if isinstance(f.remote_field, ManyToManyRel) and value is not None: + result_repr = ", ".join(map(str, value.all())) + elif ( + isinstance(f.remote_field, (ForeignObjectRel, OneToOneField)) + and value is not None + ): + result_repr = self.get_admin_url(f.remote_field, value) + else: + result_repr = display_for_field(value, f, self.empty_value_display) + result_repr = linebreaksbr(result_repr) + return conditional_escape(result_repr) + + +class InlineAdminFormSet: + """ + A wrapper around an inline formset for use in the admin system. + """ + + def __init__( + self, + inline, + formset, + fieldsets, + prepopulated_fields=None, + readonly_fields=None, + model_admin=None, + has_add_permission=True, + has_change_permission=True, + has_delete_permission=True, + has_view_permission=True, + ): + self.opts = inline + self.formset = formset + self.fieldsets = fieldsets + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + if prepopulated_fields is None: + prepopulated_fields = {} + self.prepopulated_fields = prepopulated_fields + self.classes = " ".join(inline.classes) if inline.classes else "" + self.has_add_permission = has_add_permission + self.has_change_permission = has_change_permission + self.has_delete_permission = has_delete_permission + self.has_view_permission = has_view_permission + + def __iter__(self): + if self.has_change_permission: + readonly_fields_for_editing = self.readonly_fields + else: + readonly_fields_for_editing = self.readonly_fields + flatten_fieldsets( + self.fieldsets + ) + + for form, original in zip( + self.formset.initial_forms, self.formset.get_queryset() + ): + view_on_site_url = self.opts.get_view_on_site_url(original) + yield InlineAdminForm( + self.formset, + form, + self.fieldsets, + self.prepopulated_fields, + original, + readonly_fields_for_editing, + model_admin=self.opts, + view_on_site_url=view_on_site_url, + ) + for form in self.formset.extra_forms: + yield InlineAdminForm( + self.formset, + form, + self.fieldsets, + self.prepopulated_fields, + None, + self.readonly_fields, + model_admin=self.opts, + ) + if self.has_add_permission: + yield InlineAdminForm( + self.formset, + self.formset.empty_form, + self.fieldsets, + self.prepopulated_fields, + None, + self.readonly_fields, + model_admin=self.opts, + ) + + def fields(self): + fk = getattr(self.formset, "fk", None) + empty_form = self.formset.empty_form + meta_labels = empty_form._meta.labels or {} + meta_help_texts = empty_form._meta.help_texts or {} + for i, field_name in enumerate(flatten_fieldsets(self.fieldsets)): + if fk and fk.name == field_name: + continue + if not self.has_change_permission or field_name in self.readonly_fields: + form_field = empty_form.fields.get(field_name) + widget_is_hidden = False + if form_field is not None: + widget_is_hidden = form_field.widget.is_hidden + yield { + "name": field_name, + "label": meta_labels.get(field_name) + or label_for_field( + field_name, + self.opts.model, + self.opts, + form=empty_form, + ), + "widget": {"is_hidden": widget_is_hidden}, + "required": False, + "help_text": meta_help_texts.get(field_name) + or help_text_for_field(field_name, self.opts.model), + } + else: + form_field = empty_form.fields[field_name] + label = form_field.label + if label is None: + label = label_for_field( + field_name, self.opts.model, self.opts, form=empty_form + ) + yield { + "name": field_name, + "label": label, + "widget": form_field.widget, + "required": form_field.required, + "help_text": form_field.help_text, + } + + def inline_formset_data(self): + verbose_name = self.opts.verbose_name + return json.dumps( + { + "name": "#%s" % self.formset.prefix, + "options": { + "prefix": self.formset.prefix, + "addText": gettext("Add another %(verbose_name)s") + % { + "verbose_name": capfirst(verbose_name), + }, + "deleteText": gettext("Remove"), + }, + } + ) + + @property + def forms(self): + return self.formset.forms + + @property + def non_form_errors(self): + return self.formset.non_form_errors + + @property + def media(self): + media = self.opts.media + self.formset.media + for fs in self: + media = media + fs.media + return media + + +class InlineAdminForm(AdminForm): + """ + A wrapper around an inline form for use in the admin system. + """ + + def __init__( + self, + formset, + form, + fieldsets, + prepopulated_fields, + original, + readonly_fields=None, + model_admin=None, + view_on_site_url=None, + ): + self.formset = formset + self.model_admin = model_admin + self.original = original + self.show_url = original and view_on_site_url is not None + self.absolute_url = view_on_site_url + super().__init__( + form, fieldsets, prepopulated_fields, readonly_fields, model_admin + ) + + def __iter__(self): + for name, options in self.fieldsets: + yield InlineFieldset( + self.formset, + self.form, + name, + self.readonly_fields, + model_admin=self.model_admin, + **options, + ) + + def needs_explicit_pk_field(self): + return ( + # Auto fields are editable, so check for auto or non-editable pk. + self.form._meta.model._meta.auto_field + or not self.form._meta.model._meta.pk.editable + or + # Also search any parents for an auto field. (The pk info is + # propagated to child models so that does not need to be checked + # in parents.) + any( + parent._meta.auto_field or not parent._meta.model._meta.pk.editable + for parent in self.form._meta.model._meta.get_parent_list() + ) + ) + + def pk_field(self): + return AdminField(self.form, self.formset._pk_field.name, False) + + def fk_field(self): + fk = getattr(self.formset, "fk", None) + if fk: + return AdminField(self.form, fk.name, False) + else: + return "" + + def deletion_field(self): + from django.forms.formsets import DELETION_FIELD_NAME + + return AdminField(self.form, DELETION_FIELD_NAME, False) + + def ordering_field(self): + from django.forms.formsets import ORDERING_FIELD_NAME + + return AdminField(self.form, ORDERING_FIELD_NAME, False) + + +class InlineFieldset(Fieldset): + def __init__(self, formset, *args, **kwargs): + self.formset = formset + super().__init__(*args, **kwargs) + + def __iter__(self): + fk = getattr(self.formset, "fk", None) + for field in self.fields: + if not fk or fk.name != field: + yield Fieldline( + self.form, field, self.readonly_fields, model_admin=self.model_admin + ) + + +class AdminErrorList(forms.utils.ErrorList): + """Store errors for the form/formsets in an add/change view.""" + + def __init__(self, form, inline_formsets): + super().__init__() + + if form.is_bound: + self.extend(form.errors.values()) + for inline_formset in inline_formsets: + self.extend(inline_formset.non_form_errors()) + for errors_in_inline_form in inline_formset.errors: + self.extend(errors_in_inline_form.values()) diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb14776e9b0ede13ae0533076bf66b16b3c194aa GIT binary patch literal 16216 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, 2019-2020 +# Pi Delport , 2012 +# Pi Delport , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-20 17:06+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Het %(count)d %(items)s suksesvol geskrap." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan %(name)s nie skrap nie" + +msgid "Are you sure?" +msgstr "Is u seker?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Skrap gekose %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administrasie" + +msgid "All" +msgstr "Almal" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nee" + +msgid "Unknown" +msgstr "Onbekend" + +msgid "Any date" +msgstr "Enige datum" + +msgid "Today" +msgstr "Vandag" + +msgid "Past 7 days" +msgstr "Vorige 7 dae" + +msgid "This month" +msgstr "Hierdie maand" + +msgid "This year" +msgstr "Hierdie jaar" + +msgid "No date" +msgstr "Geen datum" + +msgid "Has date" +msgstr "Het datum" + +msgid "Empty" +msgstr "Leeg" + +msgid "Not empty" +msgstr "Nie leeg nie" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Gee die korrekte %(username)s en wagwoord vir ’n personeelrekening. Let op " +"dat altwee velde dalk hooflettersensitief is." + +msgid "Action:" +msgstr "Aksie:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Voeg nog ’n %(verbose_name)s by" + +msgid "Remove" +msgstr "Verwyder" + +msgid "Addition" +msgstr "Byvoeging" + +msgid "Change" +msgstr "" + +msgid "Deletion" +msgstr "Verwydering" + +msgid "action time" +msgstr "aksietyd" + +msgid "user" +msgstr "gebruiker" + +msgid "content type" +msgstr "inhoudtipe" + +msgid "object id" +msgstr "objek-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objek-repr" + +msgid "action flag" +msgstr "aksievlag" + +msgid "change message" +msgstr "veranderingboodskap" + +msgid "log entry" +msgstr "log-inskrywing" + +msgid "log entries" +msgstr "log-inskrywingings" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Het “%(object)s” bygevoeg." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Het “%(object)s” gewysig — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Het “%(object)s” geskrap." + +msgid "LogEntry Object" +msgstr "LogEntry-objek" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Het {name} “{object}” bygevoeg." + +msgid "Added." +msgstr "Bygevoeg." + +msgid "and" +msgstr "en" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Het {fields} vir {name} “{object}” bygevoeg." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Het {fields} verander." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Het {name} “{object}” geskrap." + +msgid "No fields changed." +msgstr "Geen velde het verander nie." + +msgid "None" +msgstr "Geen" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Hou “Control” in (of “Command” op ’n Mac) om meer as een te kies." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Die {name} “{obj}” is suksesvol bygevoeg." + +msgid "You may edit it again below." +msgstr "Dit kan weer hieronder gewysig word." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Die {name} “{obj}” is suksesvol bygevoeg. Voeg gerus nog ’n {name} onder by." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Die {name} “{obj}” is suksesvol gewysig. Redigeer dit gerus weer onder." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Die {name} “{obj}” is suksesvol bygevoeg. Redigeer dit gerus weer onder." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Die {name} “{obj}” is suksesvol bygevoeg. Voeg gerus nog ’n {name} onder by." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Die {name} “{obj}” is suksesvol gewysig." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Items moet gekies word om aksies op hulle uit te voer. Geen items is " +"verander nie." + +msgid "No action selected." +msgstr "Geen aksie gekies nie." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Die %(name)s “%(obj)s” is suksesvol geskrap." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s met ID “%(key)s” bestaan nie. Is dit dalk geskrap?" + +#, python-format +msgid "Add %s" +msgstr "Voeg %s by" + +#, python-format +msgid "Change %s" +msgstr "Wysig %s" + +#, python-format +msgid "View %s" +msgstr "Beskou %s" + +msgid "Database error" +msgstr "Databasisfout" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s is suksesvol verander." +msgstr[1] "%(count)s %(name)s is suksesvol verander." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s gekies" +msgstr[1] "Al %(total_count)s gekies" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 uit %(cnt)s gekies" + +#, python-format +msgid "Change history: %s" +msgstr "Verander geskiedenis: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Om %(class_name)s %(instance)s te skrap sal vereis dat die volgende " +"beskermde verwante objekte geskrap word: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django-werfadmin" + +msgid "Django administration" +msgstr "Django-administrasie" + +msgid "Site administration" +msgstr "Werfadministrasie" + +msgid "Log in" +msgstr "Meld aan" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-administrasie" + +msgid "Page not found" +msgstr "Bladsy nie gevind nie" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Jammer! Die aangevraagde bladsy kon nie gevind word nie." + +msgid "Home" +msgstr "Tuis" + +msgid "Server error" +msgstr "Bedienerfout" + +msgid "Server error (500)" +msgstr "Bedienerfout (500)" + +msgid "Server Error (500)" +msgstr "Bedienerfout (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"’n Fout het voorgekom Dit is via e-pos aan die werfadministrateurs " +"gerapporteer en behoort binnekort reggestel te word. Dankie vir u geduld." + +msgid "Run the selected action" +msgstr "Voer die gekose aksie uit" + +msgid "Go" +msgstr "Gaan" + +msgid "Click here to select the objects across all pages" +msgstr "Kliek hier om die objekte oor alle bladsye te kies." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Kies al %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Verwyder keuses" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelle in die %(name)s-toepassing" + +msgid "Add" +msgstr "Voeg by" + +msgid "View" +msgstr "Bekyk" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Gee eerstens ’n gebruikernaam en wagwoord. Daarna kan meer gebruikervelde " +"geredigeer word." + +msgid "Enter a username and password." +msgstr "Vul ’n gebruikersnaam en wagwoord in." + +msgid "Change password" +msgstr "Verander wagwoord" + +msgid "Please correct the error below." +msgstr "Maak die onderstaande fout asb. reg." + +msgid "Please correct the errors below." +msgstr "Maak die onderstaande foute asb. reg." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Vul ’n nuwe wagwoord vir gebruiker %(username)s in." + +msgid "Welcome," +msgstr "Welkom," + +msgid "View site" +msgstr "Besoek werf" + +msgid "Documentation" +msgstr "Dokumentasie" + +msgid "Log out" +msgstr "Meld af" + +#, python-format +msgid "Add %(name)s" +msgstr "Voeg %(name)s by" + +msgid "History" +msgstr "Geskiedenis" + +msgid "View on site" +msgstr "Bekyk op werf" + +msgid "Filter" +msgstr "Filtreer" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Verwyder uit sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteerprioriteit: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Wissel sortering" + +msgid "Delete" +msgstr "Skrap" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Om die %(object_name)s %(escaped_object)s te skrap sou verwante objekte " +"skrap, maar jou rekening het nie toestemming om die volgende tipes objekte " +"te skrap nie:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Om die %(object_name)s “%(escaped_object)s” te skrap vereis dat die volgende " +"beskermde verwante objekte geskrap word:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Wil u definitief die %(object_name)s “%(escaped_object)s” skrap? Al die " +"volgende verwante items sal geskrap word:" + +msgid "Objects" +msgstr "Objekte" + +msgid "Yes, I’m sure" +msgstr "Ja, ek is seker" + +msgid "No, take me back" +msgstr "Nee, ek wil teruggaan" + +msgid "Delete multiple objects" +msgstr "Skrap meerdere objekte" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Om die gekose %(objects_name)s te skrap sou verwante objekte skrap, maar u " +"rekening het nie toestemming om die volgende tipes objekte te skrap nie:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Om die gekose %(objects_name)s te skrap vereis dat die volgende beskermde " +"verwante objekte geskrap word:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Wil u definitief die gekose %(objects_name)s skrap? Al die volgende objekte " +"en hul verwante items sal geskrap word:" + +msgid "Delete?" +msgstr "Skrap?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Volgens %(filter_title)s " + +msgid "Summary" +msgstr "Opsomming" + +msgid "Recent actions" +msgstr "Onlangse aksies" + +msgid "My actions" +msgstr "My aksies" + +msgid "None available" +msgstr "Niks beskikbaar nie" + +msgid "Unknown content" +msgstr "Onbekende inhoud" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Iets is fout met die databasisinstallasie. Maak seker die gepaste " +"databasistabelle is geskep en maak seker die databasis is leesbaar deur die " +"gepaste gebruiker." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"U is aangemeld as %(username)s, maar het nie toegang tot hierdie bladsy nie. " +"Wil u met ’n ander rekening aanmeld?" + +msgid "Forgotten your password or username?" +msgstr "Wagwoord of gebruikersnaam vergeet?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Datum/tyd" + +msgid "User" +msgstr "Gebruiker" + +msgid "Action" +msgstr "Aksie" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dié objek het nie 'n wysigingsgeskiedenis. Dit is waarskynlik nie deur dié " +"adminwerf bygevoeg nie." + +msgid "Show all" +msgstr "Wys almal" + +msgid "Save" +msgstr "Stoor" + +msgid "Popup closing…" +msgstr "Opspringer sluit tans…" + +msgid "Search" +msgstr "Soek" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultaat" +msgstr[1] "%(counter)s resultate" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s in totaal" + +msgid "Save as new" +msgstr "Stoor as nuwe" + +msgid "Save and add another" +msgstr "Stoor en voeg ’n ander by" + +msgid "Save and continue editing" +msgstr "Stoor en wysig verder" + +msgid "Save and view" +msgstr "Stoor en bekyk" + +msgid "Close" +msgstr "Sluit" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Wysig gekose %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Voeg nog ’n %(model)s by" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Skrap gekose %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" +"Dankie vir die kwaliteittyd wat u met die webwerf deurgebring het vandag." + +msgid "Log in again" +msgstr "Meld weer aan" + +msgid "Password change" +msgstr "Wagwoordverandering" + +msgid "Your password was changed." +msgstr "Die wagwoord is verander." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Gee asb. die ou wagwoord t.w.v. sekuriteit, en gee dan die nuwe wagwoord " +"twee keer sodat ons kan verifieer dat dit korrek getik is." + +msgid "Change my password" +msgstr "Verander my wagwoord" + +msgid "Password reset" +msgstr "Wagwoordherstel" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Jou wagwoord is gestel. Jy kan nou voortgaan en aanmeld." + +msgid "Password reset confirmation" +msgstr "Bevestig wagwoordherstel" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Tik die nuwe wagwoord twee keer in so ons kan seker wees dat dit korrek " +"ingetik is." + +msgid "New password:" +msgstr "Nuwe wagwoord:" + +msgid "Confirm password:" +msgstr "Bevestig wagwoord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Die skakel vir wagwoordherstel was ongeldig, dalk omdat dit reeds gebruik " +"is. Vra gerus ’n nuwe een aan." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ons het instruksies gestuur om ’n wagwoord in te stel as ’n rekening bestaan " +"met die gegewe e-posadres. Dit behoort binnekort afgelewer te word." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"As u geen e-pos ontvang nie, kontroleer dat die e-posadres waarmee " +"geregistreer is, gegee is, en kontroleer die gemorspos." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"U ontvang hierdie e-pos omdat u ’n wagwoordherstel vir u rekening by " +"%(site_name)s aangevra het." + +msgid "Please go to the following page and choose a new password:" +msgstr "Gaan asseblief na die volgende bladsy en kies ’n nuwe wagwoord:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "U gebruikernaam vir ingeval u vergeet het:" + +msgid "Thanks for using our site!" +msgstr "Dankie vir die gebruik van ons webwerf!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Die %(site_name)s span" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Die wagwoord vergeet? Tik u e-posadres hieronder en ons sal instruksies vir " +"die instel van ’n nuwe wagwoord stuur." + +msgid "Email address:" +msgstr "E-posadres:" + +msgid "Reset my password" +msgstr "Herstel my wagwoord" + +msgid "All dates" +msgstr "Alle datums" + +#, python-format +msgid "Select %s" +msgstr "Kies %s" + +#, python-format +msgid "Select %s to change" +msgstr "Kies %s om te verander" + +#, python-format +msgid "Select %s to view" +msgstr "Kies %s om te bekyk" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Tyd:" + +msgid "Lookup" +msgstr "Soek" + +msgid "Currently:" +msgstr "Tans:" + +msgid "Change:" +msgstr "Wysig:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..896cad2d697eaaa2528ab34e858019649ae7fd4d GIT binary patch literal 4477 zcmbuBPmCN#6^9FKNZ3F~3<(5GQZcN(#_rx(d;KTl7-8>vH?}ig%RB2O5|^6kH#42- zsT!)QXLdj$J|O`@2ofY45pjqjt^ol`B&0+_a6m|$xdh}0aX}mqaNvOWz3Q6XS-f^u zO7B*GQ&q2Cy?XVkUcbF>?+*l?d6fMqzj~h#%ix#y;Du*nuMnre5%@vyr-847A3*)h zQ2!11Vbp&g>VFLUGx!m-|26PmfqO7`3hfVr9|HG-Pk;x(gWwW)KiCT#fIR;TAXJEN zfcJsl4)qrUZ-V$2FXP2acm-rVKLL5%Yv7l_Ux0P+K`7<^Cdl#`$a?!A{>27fZ08Fg z+xab!^}GbW1l|I_2gVo#mEtXs_5Bt+1O5TzaSx#Jhu|Y1k9!U5gBQ^GG4PjxzXKmZ z{q0cyXQhC;I&i@!Tf$exAa2jNLj)1%m^B{(Z^B}LI z27VO07Wx~3eURn84#EWSO>i1~5j+gO0kYnALjT`DELHqFwEs8oK1|B?JQVn7;C_(( zeE?+r2SK<}RKPXx6u1t42jqGF0At|33I*@D}(g_|!u}d>8x^2saD!aLKO(=7B}vFmM$3wZKneEI-Fe z_&2u7KX8$VQ9glk5ame}ejY2~_lNhKAGY}r3e<|nQQnWj&yf;-4g50-b>2IEK99ow z`V3d_U^)I_pYB7MK{<+Y9Ocs}aFgF(3Bna(4u$W9X%v1cD4#`{M>&AP&!j>J-$In#KAqw83MWu`0%_5T^JnE)r*ltlD^$ANxq&oH=uNuEw zKFVZbhUJQO^rv`^a>OF5p#U$pb6ZmM$X>PkIYu%tMyBEFcb@>pf=bW}MJ&7G2SbJY`- zBb8&73IwBTG)P(JmfTZOWiG1B%em9l`Qt|_c&46Jxr^#n={!@;*s5HT>n3Zpc42G%b8%&A!DvSscHwANrK1fu+s{<0&u~oIoZQ*9`ciayOO8!! zk&Q0srb%!=RpseM>NX9nO4XXWniW=M(UP&fyef6ySM#&S&dBoT*%>XLJS*o8pPAas zrUS&-IMuePn^JzSuFA=3r6S;5yeG44k&E+`chhd8%st{V%%v7;4Wj68#w8t$-?A#2T@#uyA|cM-sWSzJGFO_y@GEN|J`xL6k?@YW?-z{ zJBXd&f573q5nFk9eU#(N1StVa!YUcr2uWpf`(x?%yG^!$1i{`;fneaY>rFP@9K$-$ zf;$Q8!2b2fb|rFaf_P+^+c$p1I&R;1IqGWD@1w~TIe$BCX~1^?HXeZy?_?38xs07y zZZ76MS~S+PTdS_)vx39p*FU!;>Ih&sfLHC8keM!mmSdW$cleOk#wpt348>v@A3F%m zHQ7Oo`E#Va56dIVj^hr*Cw``Fgc9MxfNOD6AP>W*?|sojEZ#Sc1pJ2-@6G zR}K;1d3U7wylLfaTZZW7F2Ee#GF5K`{KLVcNE_P%1UkgR9@#U48&&xYcH+y z=U?TGn6of^2JiUZST3dxIT@)K_hK984;Kyk!SZ~Rekve@Ap_&jJ{yDBHT-45Q@|VB z>@odq{<1i^ZRqotn|B^&<*3&9;+fctiAj!nlkPeJX3Gptd>fvP#dT2=tN2^Q-@5o8 D2))bs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..816ef6e7f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po @@ -0,0 +1,219 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# F Wolff , 2019 +# Pi Delport , 2013 +# Pi Delport , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-01-04 18:43+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Beskikbare %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Hierdie is die lys beskikbare %s. Kies gerus deur hulle in die boksie " +"hieronder te merk en dan die “Kies”-knoppie tussen die boksies te klik." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Tik in hierdie blokkie om die lys beskikbare %s te filtreer." + +msgid "Filter" +msgstr "Filteer" + +msgid "Choose all" +msgstr "Kies almal" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klik om al die %s gelyktydig te kies." + +msgid "Choose" +msgstr "Kies" + +msgid "Remove" +msgstr "Verwyder" + +#, javascript-format +msgid "Chosen %s" +msgstr "Gekose %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Hierdie is die lys gekose %s. Verwyder gerus deur hulle in die boksie " +"hieronder te merk en dan die “Verwyder”-knoppie tussen die boksies te klik." + +msgid "Remove all" +msgstr "Verwyder almal" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik om al die %s gelyktydig te verwyder." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s van %(cnt)s gekies" +msgstr[1] "%(sel)s van %(cnt)s gekies" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Daar is ongestoorde veranderinge op individuele redigeerbare velde. Deur nou " +"’n aksie uit te voer, sal ongestoorde veranderinge verlore gaan." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"U het ’n aksie gekies, maar nog nie die veranderinge aan individuele velde " +"gestoor nie. Klik asb. OK om te stoor. Dit sal nodig wees om weer die aksie " +"uit te voer." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"U het ’n aksie gekies en het nie enige veranderinge aan individuele velde " +"aangebring nie. U soek waarskynlik na die Gaan-knoppie eerder as die Stoor-" +"knoppie." + +msgid "Now" +msgstr "Nou" + +msgid "Midnight" +msgstr "Middernag" + +msgid "6 a.m." +msgstr "06:00" + +msgid "Noon" +msgstr "Middag" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Let wel: U is %s uur voor die bedienertyd." +msgstr[1] "Let wel: U is %s ure voor die bedienertyd." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Let wel: U is %s uur agter die bedienertyd." +msgstr[1] "Let wel: U is %s ure agter die bedienertyd." + +msgid "Choose a Time" +msgstr "Kies ’n tyd" + +msgid "Choose a time" +msgstr "Kies ‘n tyd" + +msgid "Cancel" +msgstr "Kanselleer" + +msgid "Today" +msgstr "Vandag" + +msgid "Choose a Date" +msgstr "Kies ’n datum" + +msgid "Yesterday" +msgstr "Gister" + +msgid "Tomorrow" +msgstr "Môre" + +msgid "January" +msgstr "Januarie" + +msgid "February" +msgstr "Februarie" + +msgid "March" +msgstr "Maart" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Junie" + +msgid "July" +msgstr "Julie" + +msgid "August" +msgstr "Augustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "D" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "D" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Wys" + +msgid "Hide" +msgstr "Versteek" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37fd72aa7a85819584cb17e5bd89e5f84e77ae28 GIT binary patch literal 8309 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\n" +"Language-Team: Amharic (http://www.transifex.com/django/django/language/" +"am/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: am\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s በተሳካ ሁኔታ ተወግድዋል:: " + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ማስወገድ አይቻልም" + +msgid "Are you sure?" +msgstr "እርግጠኛ ነህ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "የተመረጡትን %(verbose_name_plural)s አስወግድ" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "ሁሉም" + +msgid "Yes" +msgstr "አዎ" + +msgid "No" +msgstr "አይደለም" + +msgid "Unknown" +msgstr "ያልታወቀ" + +msgid "Any date" +msgstr "ማንኛውም ቀን" + +msgid "Today" +msgstr "ዛሬ" + +msgid "Past 7 days" +msgstr "ያለፉት 7 ቀናት" + +msgid "This month" +msgstr "በዚህ ወር" + +msgid "This year" +msgstr "በዚህ አመት" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "ተግባር:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "ሌላ %(verbose_name)s ጨምር" + +msgid "Remove" +msgstr "አጥፋ" + +msgid "action time" +msgstr "ተግባሩ የተፈፀመበት ጊዜ" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "መልዕክት ለውጥ" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" ተጨምሯል::" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s ተቀይሯል" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s.\" ተወግድዋል" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "እና" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "ምንም \"ፊልድ\" አልተቀየረም::" + +msgid "None" +msgstr "ምንም" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "ምንም ተግባር አልተመረጠም::" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" በተሳካ ሁኔታ ተወግድዋል:: " + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s ጨምር" + +#, python-format +msgid "Change %s" +msgstr "%s ቀይር" + +msgid "Database error" +msgstr "የ(ዳታቤዝ) ችግር" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s በተሳካ ሁኔታ ተቀይሯል::" +msgstr[1] "%(count)s %(name)s በተሳካ ሁኔታ ተቀይረዋል::" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s ተመርጠዋል" +msgstr[1] "ሁሉም %(total_count)s ተመርጠዋል" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s ተመርጠዋል" + +#, python-format +msgid "Change history: %s" +msgstr "ታሪኩን ቀይር: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ጃንጎ ድህረ-ገጽ አስተዳዳሪ" + +msgid "Django administration" +msgstr "ጃንጎ አስተዳደር" + +msgid "Site administration" +msgstr "ድህረ-ገጽ አስተዳደር" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "ድህረ-ገጹ የለም" + +msgid "We're sorry, but the requested page could not be found." +msgstr "ይቅርታ! የፈለጉት ድህረ-ገጽ የለም::" + +msgid "Home" +msgstr "ሆም" + +msgid "Server error" +msgstr "የሰርቨር ችግር" + +msgid "Server error (500)" +msgstr "የሰርቨር ችግር (500)" + +msgid "Server Error (500)" +msgstr "የሰርቨር ችግር (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "የተመረጡትን ተግባሮች አስጀምር" + +msgid "Go" +msgstr "ስራ" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "ሁሉንም %(total_count)s %(module_name)s ምረጥ" + +msgid "Clear selection" +msgstr "የተመረጡትን ባዶ ኣድርግ" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "መለያስም(ዩዘርኔም) እና የይለፍቃል(ፓስወርድ) ይስገቡ::" + +msgid "Change password" +msgstr "የይለፍቃል(ፓስወርድ) ቅየር" + +msgid "Please correct the error below." +msgstr "ከታች ያሉትን ችግሮች ያስተካክሉ::" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "ለ %(username)s መለያ አዲስ የይለፍቃል(ፓስወርድ) ያስገቡ::" + +msgid "Welcome," +msgstr "እንኳን በደህና መጡ," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "መረጃ" + +msgid "Log out" +msgstr "ጨርሰህ ውጣ" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ጨምር" + +msgid "History" +msgstr "ታሪክ" + +msgid "View on site" +msgstr "ድህረ-ገጹ ላይ ይመልከቱ" + +msgid "Filter" +msgstr "አጣራ" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "አዎ,እርግጠኛ ነኝ" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "ቀይር" + +msgid "Delete?" +msgstr "ላስወግድ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "በ %(filter_title)s" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "ጨምር" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "ምንም የለም" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "የእርሶን መለያስም (ዩዘርኔም) ወይም የይለፍቃል(ፓስወርድ)ዘነጉት?" + +msgid "Date/time" +msgstr "ቀን/ጊዜ" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "ሁሉንም አሳይ" + +msgid "Save" +msgstr "" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "ፈልግ" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] " %(counter)s ውጤት" +msgstr[1] "%(counter)s ውጤቶች" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "በአጠቃላይ %(full_result_count)s" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ዛሬ ድህረ-ገዓችንን ላይ ጥሩ ጊዜ ስላሳለፉ እናመሰግናለን::" + +msgid "Log in again" +msgstr "በድጋሜ ይግቡ" + +msgid "Password change" +msgstr "የይለፍቃል(ፓስወርድ) ቅየራ" + +msgid "Your password was changed." +msgstr "የይለፍቃልዎን(ፓስወርድ) ተቀይሯል::" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "የይለፍቃል(ፓስወርድ) ቀይር" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "አዲስ የይለፍቃል(ፓስወርድ):" + +msgid "Confirm password:" +msgstr "የይለፍቃልዎን(ፓስወርድ) በድጋሜ በማስገባት ያረጋግጡ:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"ኢ-ሜል ካልደረስዎት እባክዎን የተመዘገቡበትን የኢ-ሜል አድራሻ ትክክለኛነት ይረጋግጡእንዲሁም ኢ-ሜል (ስፓም) ማህደር " +"ውስጥ ይመልከቱ::" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"ይህ ኢ-ሜል የደረስዎት %(site_name)s ላይ እንደ አዲስ የይለፍቃል(ፓስወርድ) ለ ለመቀየር ስለጠየቁ ነው::" + +msgid "Please go to the following page and choose a new password:" +msgstr "እባክዎን ወደሚከተለው ድህረ-ገዕ በመሄድ አዲስ የይለፍቃል(ፓስወርድ) ያውጡ:" + +msgid "Your username, in case you've forgotten:" +msgstr "ድንገት ከዘነጉት ይኌው የእርሶ መለያስም (ዩዘርኔም):" + +msgid "Thanks for using our site!" +msgstr "ድህረ-ገዓችንን ስለተጠቀሙ እናመሰግናለን!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s ቡድን" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"የይለፍቃልዎን(ፓስወርድ)ረሱት? ከታች የኢ-ሜል አድራሻዎን ይስገቡ እና አዲስ ፓስወርድ ለማውጣት የሚያስችል መረጃ " +"እንልክልዎታለን::" + +msgid "Email address:" +msgstr "ኢ-ሜል አድራሻ:" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "ሁሉም ቀናት" + +#, python-format +msgid "Select %s" +msgstr "%sን ምረጥ" + +#, python-format +msgid "Select %s to change" +msgstr "ለመቀየር %sን ምረጥ" + +msgid "Date:" +msgstr "ቀን:" + +msgid "Time:" +msgstr "ጊዜ" + +msgid "Lookup" +msgstr "አፈላልግ" + +msgid "Currently:" +msgstr "በዚህ ጊዜ:" + +msgid "Change:" +msgstr "ቀይር:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e0d68032d413a27ddde691bbe35ecfefb219401 GIT binary patch literal 19890 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, 2013 +# Jannis Leidel , 2011 +# Muaaz Alsaied, 2020 +# Tony xD , 2020 +# صفا الفليج , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-15 21:11+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "احذف %(verbose_name_plural)s المحدّدة" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "نجح حذف %(count)d من %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "تعذّر حذف %(name)s" + +msgid "Are you sure?" +msgstr "هل أنت متأكد؟" + +msgid "Administration" +msgstr "الإدارة" + +msgid "All" +msgstr "الكل" + +msgid "Yes" +msgstr "نعم" + +msgid "No" +msgstr "لا" + +msgid "Unknown" +msgstr "مجهول" + +msgid "Any date" +msgstr "أي تاريخ" + +msgid "Today" +msgstr "اليوم" + +msgid "Past 7 days" +msgstr "الأيام السبعة الماضية" + +msgid "This month" +msgstr "هذا الشهر" + +msgid "This year" +msgstr "هذه السنة" + +msgid "No date" +msgstr "لا يوجد أي تاريخ" + +msgid "Has date" +msgstr "به تاريخ" + +msgid "Empty" +msgstr "فارغ" + +msgid "Not empty" +msgstr "غير فارغ" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"من فضلك أدخِل قيمة %(username)s الصحيحة وكلمة السر لحساب الطاقم الإداري. " +"الحقلين حسّاسين لحالة الأحرف." + +msgid "Action:" +msgstr "الإجراء:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "أضِف %(verbose_name)s آخر" + +msgid "Remove" +msgstr "أزِل" + +msgid "Addition" +msgstr "إضافة" + +msgid "Change" +msgstr "تعديل" + +msgid "Deletion" +msgstr "حذف" + +msgid "action time" +msgstr "وقت الإجراء" + +msgid "user" +msgstr "المستخدم" + +msgid "content type" +msgstr "نوع المحتوى" + +msgid "object id" +msgstr "معرّف الكائن" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "التمثيل البصري للكائن" + +msgid "action flag" +msgstr "راية الإجراء" + +msgid "change message" +msgstr "رسالة التغيير" + +msgid "log entry" +msgstr "مدخلة سجلات" + +msgid "log entries" +msgstr "مدخلات السجلات" + +#, python-format +msgid "Added “%(object)s”." +msgstr "أُضيف ”%(object)s“." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "عُدّل ”%(object)s“ — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "حُذف ”%(object)s“." + +msgid "LogEntry Object" +msgstr "كائن LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "أُضيف {name} ‏”{object}“." + +msgid "Added." +msgstr "أُضيف." + +msgid "and" +msgstr "و" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "تغيّرت {fields} ‏{name} ‏”{object}“." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "تغيّرت {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "حُذف {name} ‏”{object}“." + +msgid "No fields changed." +msgstr "لم يتغيّر أي حقل." + +msgid "None" +msgstr "بلا" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"اضغط مفتاح ”Contrl“ (أو ”Command“ على أجهزة ماك) مطوّلًا لتحديد أكثر من عنصر." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "نجحت إضافة {name} ‏”{obj}“." + +msgid "You may edit it again below." +msgstr "يمكنك تعديله ثانيةً أسفله." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "نجحت إضافة {name} ‏”{obj}“. يمكنك إضافة {name} آخر أسفله." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "نجح تعديل {name} ‏”{obj}“. يمكنك تعديله ثانيةً أسفله." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "نجحت إضافة {name} ‏”{obj}“. يمكنك تعديله ثانيةً أسفله." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "تمت إضافة {name} “{obj}” بنجاح، يمكنك إضافة {name} أخر بالأسفل." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "نجحت إضافة {name} ‏”{obj}“." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "عليك تحديد العناصر لتطبيق الإجراءات عليها. لم يتغيّر أيّ عنصر." + +msgid "No action selected." +msgstr "لا إجراء محدّد." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "نجح حذف %(name)s ‏”%(obj)s“." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "ما من %(name)s له المعرّف ”%(key)s“. لربّما حُذف أساسًا؟" + +#, python-format +msgid "Add %s" +msgstr "إضافة %s" + +#, python-format +msgid "Change %s" +msgstr "تعديل %s" + +#, python-format +msgid "View %s" +msgstr "عرض %s" + +msgid "Database error" +msgstr "خطـأ في قاعدة البيانات" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "لم يتم تغيير أي شيء" +msgstr[1] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[2] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[3] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[4] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[5] "تم تغيير %(count)s %(name)s بنجاح." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "لم يتم تحديد أي شيء" +msgstr[1] "تم تحديد %(total_count)s" +msgstr[2] "تم تحديد %(total_count)s" +msgstr[3] "تم تحديد %(total_count)s" +msgstr[4] "تم تحديد %(total_count)s" +msgstr[5] "تم تحديد %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "لا شيء محدد من %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "تاريخ التغيير: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"حذف %(class_name)s %(instance)s سيتسبب أيضاً بحذف العناصر المرتبطة التالية: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "إدارة موقع جانغو" + +msgid "Django administration" +msgstr "إدارة جانغو" + +msgid "Site administration" +msgstr "إدارة الموقع" + +msgid "Log in" +msgstr "ادخل" + +#, python-format +msgid "%(app)s administration" +msgstr "إدارة %(app)s " + +msgid "Page not found" +msgstr "تعذر العثور على الصفحة" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "نحن آسفون، لكننا لم نعثر على الصفحة المطلوبة." + +msgid "Home" +msgstr "الرئيسية" + +msgid "Server error" +msgstr "خطأ في المزود" + +msgid "Server error (500)" +msgstr "خطأ في المزود (500)" + +msgid "Server Error (500)" +msgstr "خطأ في المزود (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"لقد حدث خطأ. تم إبلاغ مسؤولي الموقع عبر البريد الإلكتروني وسيتم إصلاحه " +"قريبًا. شكرا لصبرك." + +msgid "Run the selected action" +msgstr "نفذ الإجراء المحدّد" + +msgid "Go" +msgstr "نفّذ" + +msgid "Click here to select the objects across all pages" +msgstr "اضغط هنا لتحديد جميع العناصر في جميع الصفحات" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "اختيار %(total_count)s %(module_name)s جميعها" + +msgid "Clear selection" +msgstr "إزالة الاختيار" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "النماذج في تطبيق %(name)s" + +msgid "Add" +msgstr "أضف" + +msgid "View" +msgstr "استعراض" + +msgid "You don’t have permission to view or edit anything." +msgstr "ليست لديك الصلاحية لاستعراض أو لتعديل أي شيء." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"أولاً ، أدخل اسم المستخدم وكلمة المرور. بعد ذلك ، ستتمكن من تعديل المزيد من " +"خيارات المستخدم." + +msgid "Enter a username and password." +msgstr "أدخل اسم مستخدم وكلمة مرور." + +msgid "Change password" +msgstr "غيّر كلمة المرور" + +msgid "Please correct the error below." +msgstr "الرجاء تصحيح الأخطاء أدناه." + +msgid "Please correct the errors below." +msgstr "الرجاء تصحيح الأخطاء أدناه." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "أدخل كلمة مرور جديدة للمستخدم %(username)s." + +msgid "Welcome," +msgstr "أهلا، " + +msgid "View site" +msgstr "عرض الموقع" + +msgid "Documentation" +msgstr "الوثائق" + +msgid "Log out" +msgstr "تسجيل الخروج" + +#, python-format +msgid "Add %(name)s" +msgstr "أضف %(name)s" + +msgid "History" +msgstr "تاريخ" + +msgid "View on site" +msgstr "مشاهدة على الموقع" + +msgid "Filter" +msgstr "مرشّح" + +msgid "Clear all filters" +msgstr "مسح جميع المرشحات" + +msgid "Remove from sorting" +msgstr "إزالة من الترتيب" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "أولوية الترتيب: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "عكس الترتيب" + +msgid "Delete" +msgstr "احذف" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"حذف العنصر %(object_name)s '%(escaped_object)s' سيتسبب بحذف العناصر المرتبطة " +"به، إلا أنك لا تملك صلاحية حذف العناصر التالية:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"حذف %(object_name)s '%(escaped_object)s' سيتسبب أيضاً بحذف العناصر المرتبطة، " +"إلا أن حسابك ليس لديه صلاحية حذف أنواع العناصر التالية:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"متأكد أنك تريد حذف العنصر %(object_name)s \"%(escaped_object)s\"؟ سيتم حذف " +"جميع العناصر التالية المرتبطة به:" + +msgid "Objects" +msgstr "عناصر" + +msgid "Yes, I’m sure" +msgstr "نعم، أنا متأكد" + +msgid "No, take me back" +msgstr "لا, تراجع للخلف" + +msgid "Delete multiple objects" +msgstr "حذف عدّة عناصر" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"حذف عناصر %(objects_name)s المُحدّدة سيتسبب بحذف العناصر المرتبطة، إلا أن " +"حسابك ليس له صلاحية حذف أنواع العناصر التالية:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"حذف عناصر %(objects_name)s المحدّدة قد يتطلب حذف العناصر المحميّة المرتبطة " +"التالية:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"أأنت متأكد أنك تريد حذف عناصر %(objects_name)s المحددة؟ جميع العناصر التالية " +"والعناصر المرتبطة بها سيتم حذفها:" + +msgid "Delete?" +msgstr "احذفه؟" + +#, python-format +msgid " By %(filter_title)s " +msgstr " حسب %(filter_title)s " + +msgid "Summary" +msgstr "ملخص" + +msgid "Recent actions" +msgstr "آخر الإجراءات" + +msgid "My actions" +msgstr "إجراءاتي" + +msgid "None available" +msgstr "لا يوجد" + +msgid "Unknown content" +msgstr "مُحتوى مجهول" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"هنالك أمر خاطئ في تركيب قاعدة بياناتك، تأكد من أنه تم انشاء جداول قاعدة " +"البيانات الملائمة، وأن قاعدة البيانات قابلة للقراءة من قبل المستخدم الملائم." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"أنت مسجل الدخول بإسم المستخدم %(username)s, ولكنك غير مخول للوصول لهذه " +"الصفحة. هل ترغب بتسجيل الدخول بحساب آخر؟" + +msgid "Forgotten your password or username?" +msgstr "نسيت كلمة المرور أو اسم المستخدم الخاص بك؟" + +msgid "Toggle navigation" +msgstr "تغيير التصفّح" + +msgid "Start typing to filter…" +msgstr "ابدأ الكتابة للتصفية ..." + +msgid "Filter navigation items" +msgstr "تصفية عناصر التصفح" + +msgid "Date/time" +msgstr "التاريخ/الوقت" + +msgid "User" +msgstr "المستخدم" + +msgid "Action" +msgstr "إجراء" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"ليس لهذا العنصر سجلّ تغييرات، على الأغلب أنه لم يُنشأ من خلال نظام إدارة " +"الموقع." + +msgid "Show all" +msgstr "أظهر الكل" + +msgid "Save" +msgstr "احفظ" + +msgid "Popup closing…" +msgstr "جاري إغلاق النافذة المنبثقة..." + +msgid "Search" +msgstr "ابحث" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "لا نتائج" +msgstr[1] "نتيجة واحدة" +msgstr[2] "نتيجتان" +msgstr[3] "%(counter)s نتائج" +msgstr[4] "%(counter)s نتيجة" +msgstr[5] "%(counter)s نتيجة" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "المجموع %(full_result_count)s" + +msgid "Save as new" +msgstr "احفظ كجديد" + +msgid "Save and add another" +msgstr "احفظ وأضف آخر" + +msgid "Save and continue editing" +msgstr "احفظ واستمر بالتعديل" + +msgid "Save and view" +msgstr "احفظ واستعرض" + +msgid "Close" +msgstr "إغلاق" + +#, python-format +msgid "Change selected %(model)s" +msgstr "تغيير %(model)s المختارة" + +#, python-format +msgid "Add another %(model)s" +msgstr "أضف %(model)s آخر" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "حذف %(model)s المختارة" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "شكرا لقضاء بعض الوقت الجيد في الموقع اليوم." + +msgid "Log in again" +msgstr "ادخل مجدداً" + +msgid "Password change" +msgstr "غيّر كلمة مرورك" + +msgid "Your password was changed." +msgstr "تمّ تغيير كلمة مرورك." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"رجاءً أدخل كلمة المرور القديمة، للأمان، ثم أدخل كلمة المرور الجديدة مرتين " +"لنتأكد بأنك قمت بإدخالها بشكل صحيح." + +msgid "Change my password" +msgstr "غيّر كلمة مروري" + +msgid "Password reset" +msgstr "استعادة كلمة المرور" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "تم تعيين كلمة مرورك. يمكن الاستمرار وتسجيل دخولك الآن." + +msgid "Password reset confirmation" +msgstr "تأكيد استعادة كلمة المرور" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "رجاءً أدخل كلمة مرورك الجديدة مرتين كي تتأكّد من كتابتها بشكل صحيح." + +msgid "New password:" +msgstr "كلمة المرور الجديدة:" + +msgid "Confirm password:" +msgstr "أكّد كلمة المرور:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"رابط استعادة كلمة المرور غير صحيح، ربما لأنه استُخدم من قبل. رجاءً اطلب " +"استعادة كلمة المرور مرة أخرى." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"تم إرسال بريد إلكتروني بالتعليمات لضبط كلمة المرور الخاصة بك، وذلك في حال " +"تواجد حساب بنفس البريد الإلكتروني الذي أدخلته. سوف تستقبل البريد الإلكتروني " +"قريباً" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"في حال عدم إستقبال البريد الإلكتروني، الرجاء التأكد من إدخال عنوان بريدك " +"الإلكتروني الخاص بحسابك ومراجعة مجلد الرسائل غير المرغوب بها." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"لقد قمت بتلقى هذه الرسالة لطلبك بإعادة تعين كلمة المرور لحسابك الشخصي على " +"%(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "رجاءً اذهب إلى الصفحة التالية واختر كلمة مرور جديدة:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "اسم المستخدم الخاص بك، في حال كنت قد نسيته:" + +msgid "Thanks for using our site!" +msgstr "شكراً لاستخدامك موقعنا!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "فريق %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"هل نسيت كلمة المرور؟ أدخل عنوان بريدك الإلكتروني أدناه وسوف نقوم بإرسال " +"تعليمات للحصول على كلمة مرور جديدة." + +msgid "Email address:" +msgstr "عنوان البريد الإلكتروني:" + +msgid "Reset my password" +msgstr "استعد كلمة مروري" + +msgid "All dates" +msgstr "كافة التواريخ" + +#, python-format +msgid "Select %s" +msgstr "اختر %s" + +#, python-format +msgid "Select %s to change" +msgstr "اختر %s لتغييره" + +#, python-format +msgid "Select %s to view" +msgstr "اختر %s للاستعراض" + +msgid "Date:" +msgstr "التاريخ:" + +msgid "Time:" +msgstr "الوقت:" + +msgid "Lookup" +msgstr "ابحث" + +msgid "Currently:" +msgstr "حالياً:" + +msgid "Change:" +msgstr "تغيير:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..00605736e24c6043c55bf63eca504554e4e0f630 GIT binary patch literal 6545 zcmeH}TWlOx8OIN0DZ!-_8d_*c;WRWMrQP)<&23XRb&agpm4xD)IYfj@Rpr zNeb-)4;}5<|2g0J&UZiG%*!`to>DvyGFHjBPN@Te8UA<pxliD|jRHzgv9G;tdFEgMJ(MF7Ph!BVZ0(3+@J2fHjL>1o^2+{=~Ge zg6{;sY1iMg_(KpCY8reycp4Nr^LGCt_-WQZ1^dBU5hD8sLE(=;k$Z?gSkz%q?3@I} z&ToLC|NG##z!Tut!HozJy}t%U-tYL^3jPt4b1V7#0eA=a9q=dM5coL4KLGv`{2=%; zcsuy2#hY&+My#{ot>7aTKL^UW8h8u%6;RHd1cm=+;D^8%TnYZu;tG-^{Hs8rciD9> z_v@;QK%i6nhSXo562`JHX$Aa{iY0rnnjueeIyg&)ap6#a$NngA)IO#e<;8kL>;w z_#%EiWpV$_sr=h8QqHXfMQ^)Z-w%qtJ1qTxr4N9=f$oDZf?H4`_WcVKIoA`!z2Hrt z*!y|#x8NZ73V0vMn*nbp>2mHD7GDBIe{As;OaF((*DS6e$)aba#Z{o3TVt`y;x@a# z3lu$%gNZ#B2kpKG%J~tC;~-&5p1Umy2+wM}?gZs7NFCnE_!xt*s{0ssFmjBKGUWb0 zz>s>(GQ$*Mp1b(ZGuAOAU-D40jpso-rjlpPy3kba4z)j^*Q_gg5mN}J7@3l~+TKR(te zs3Tt&6LH$9R3K|7(mq;pYWu=|V5K8@FoEhdg`nmHqpH`fM65sI zmWxo$>m?!z{vrIR_#@iE z6?Qybl%!ccy*e$F)kHLasbHcJ1CMBrMtse26XupRs*&eKi)8ewr(bCP8CLUBrOOAzl-ww3Qwx!KbRaQV#5DyvvA9*z zh>HmYu7n>(Ipq`zff>%}s_#W*oixJ?|E=_-J!a^VEgK8{D8r;>YoSABn6zx!K9vDm zcj#Oh+Se6i&p>YFPP$u${}y)o9n{el>Tdd~^v(>EmMz;;GGNP2qo-t;Dc>V*CZfo7 zZ{SksncikvpYI8+ubH;biE45sGW(WLYYFEPT7S6~gu>b1%-LTvR}%M|l9!VAtG$8$ z1TVepqowSpOb~Lz^1Ac{*T`>s%nbQKlqX4n;UVB5yGVI>CRj1Q#ue-ZLZ_^!`-R|yArk&}ui)oik z*K~GtJkY&fuU(tY@9*xE6YCfEIy;*-w`^haJ~lUOZBzB}ct*$1)~9rRB0d|>$McQP zmHI^eSmR^n&Df1ky&>5fb^M%sDPhWmcqTqk|B{MN#frkA0=5MNMyLBuol zaroxy$LnM9c@)Pd@$|Cd+&QRI;CU5K%OXCn`C|?BoL(ey^hi8sPr#I}5scbIiX0R* zN73F;S^ruh6LF$+CVn2PUeFTdMa4QkLu{wwOY*Ig%*W$X$cINVa4NUt;B@?qsDWe2 zvDCpNV+&hXNSQ~;1;Rj#6mbBMG$o$T#n08pm?k!!tB)ySc+74xJ&s%a3-x&YSUR1+ zyz@jCc?gkB>LV4D#zBsd2eI{HeNt3TBz~WbFUF_xnhe0MldK$x=j#(Xo~<8FLLlk9 zgcnK0rEyL~60#ZL%)KS*|14JAwsTVdZ$bv&62+}ZZq2o;{eOtnG49it?E#6FAJvaZ zH#{28(Q%|RaL3NZPtyb9rdG4i*l4MBkl;zgNZb#Ngbb-)*)Rc z?XB@8n$?qW5c1t6ME)N_%UODI^-pRXnlHb*UdsFN<T3DLI{sFJmb$AWm@DCQi&c%Mnf|HYU|0udY)>UcNyR z59RBGIussWBvMiM2ko@TvAKOlTGB}=OO=6oya53=WC1IFK<8>*S%C`v7Cl#WWxQc3dM>jH(6n1Lw z5|`w<&mxdFwb(X?evv(nebeLsPsXS;WGC5PtPRK)@NP`(JcldfpmA1=sUPK&XPSgv z@hK, 2011 +# Omar Lajam, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-15 21:27+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s المتوفرة" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المتوفرة. يمكنك اختيار بعضها بانتقائها في الصندوق أدناه ثم " +"الضغط على سهم الـ\"اختيار\" بين الصندوقين." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "اكتب في هذا الصندوق لتصفية قائمة %s المتوفرة." + +msgid "Filter" +msgstr "تصفية" + +msgid "Choose all" +msgstr "اختر الكل" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "اضغط لاختيار جميع %s جملة واحدة." + +msgid "Choose" +msgstr "اختيار" + +msgid "Remove" +msgstr "احذف" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s المُختارة" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المحددة. يمكنك إزالة بعضها باختيارها في الصندوق أدناه ثم اضغط " +"على سهم الـ\"إزالة\" بين الصندوقين." + +msgid "Remove all" +msgstr "إزالة الكل" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "اضغط لإزالة جميع %s المحددة جملة واحدة." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "لا شي محدد" +msgstr[1] "%(sel)s من %(cnt)s محدد" +msgstr[2] "%(sel)s من %(cnt)s محدد" +msgstr[3] "%(sel)s من %(cnt)s محددة" +msgstr[4] "%(sel)s من %(cnt)s محدد" +msgstr[5] "%(sel)s من %(cnt)s محدد" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"لديك تعديلات غير محفوظة على بعض الحقول القابلة للتعديل. إن نفذت أي إجراء " +"فسوف تخسر تعديلاتك." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"لقد حددت إجراءً ، لكنك لم تحفظ تغييراتك في الحقول الفردية حتى الآن. يرجى " +"النقر فوق موافق للحفظ. ستحتاج إلى إعادة تشغيل الإجراء." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"لقد حددت إجراء ، ولم تقم بإجراء أي تغييرات على الحقول الفردية. من المحتمل " +"أنك تبحث عن الزر أذهب بدلاً من الزر حفظ." + +msgid "Now" +msgstr "الآن" + +msgid "Midnight" +msgstr "منتصف الليل" + +msgid "6 a.m." +msgstr "6 ص." + +msgid "Noon" +msgstr "الظهر" + +msgid "6 p.m." +msgstr "6 مساءً" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." + +msgid "Choose a Time" +msgstr "إختر وقت" + +msgid "Choose a time" +msgstr "اختر وقتاً" + +msgid "Cancel" +msgstr "ألغ" + +msgid "Today" +msgstr "اليوم" + +msgid "Choose a Date" +msgstr "إختر تاريخ " + +msgid "Yesterday" +msgstr "أمس" + +msgid "Tomorrow" +msgstr "غداً" + +msgid "January" +msgstr "يناير" + +msgid "February" +msgstr "فبراير" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "أبريل" + +msgid "May" +msgstr "مايو" + +msgid "June" +msgstr "يونيو" + +msgid "July" +msgstr "يوليو" + +msgid "August" +msgstr "أغسطس" + +msgid "September" +msgstr "سبتمبر" + +msgid "October" +msgstr "أكتوبر" + +msgid "November" +msgstr "نوفمبر" + +msgid "December" +msgstr "ديسمبر" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "يناير" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "فبراير" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "مارس" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "إبريل" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "مايو" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "يونيو" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "يوليو" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "أغسطس" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "سبتمبر" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "أكتوبر" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "نوفمبر" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "ديسمبر" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "أحد" + +msgctxt "one letter Monday" +msgid "M" +msgstr "إثنين" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "ثلاثاء" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "أربعاء" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "خميس" + +msgctxt "one letter Friday" +msgid "F" +msgstr "جمعة" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "سبت" + +msgid "Show" +msgstr "أظهر" + +msgid "Hide" +msgstr "اخف" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af3d2aa3819aed4f2ad5b3643c82b2379407818b GIT binary patch literal 19657 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..5be946351 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "تم حذف %(count)d %(items)s بنجاح." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "لا يمكن حذف %(name)s" + +msgid "Are you sure?" +msgstr "هل أنت متأكد؟" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "حذف سجلات %(verbose_name_plural)s المحددة" + +msgid "Administration" +msgstr "الإدارة" + +msgid "All" +msgstr "الكل" + +msgid "Yes" +msgstr "نعم" + +msgid "No" +msgstr "لا" + +msgid "Unknown" +msgstr "مجهول" + +msgid "Any date" +msgstr "أي تاريخ" + +msgid "Today" +msgstr "اليوم" + +msgid "Past 7 days" +msgstr "الأيام السبعة الماضية" + +msgid "This month" +msgstr "هذا الشهر" + +msgid "This year" +msgstr "هذه السنة" + +msgid "No date" +msgstr "لا يوجد أي تاريخ" + +msgid "Has date" +msgstr "به تاريخ" + +msgid "Empty" +msgstr "فارغة" + +msgid "Not empty" +msgstr "ليست فارغة" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"الرجاء إدخال ال%(username)s و كلمة المرور الصحيحين لحساب الطاقم. الحقلين " +"حساسين وضعية الاحرف." + +msgid "Action:" +msgstr "إجراء:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "إضافة سجل %(verbose_name)s آخر" + +msgid "Remove" +msgstr "أزل" + +msgid "Addition" +msgstr "إضافة" + +msgid "Change" +msgstr "عدّل" + +msgid "Deletion" +msgstr "حذف" + +msgid "action time" +msgstr "وقت الإجراء" + +msgid "user" +msgstr "المستخدم" + +msgid "content type" +msgstr "نوع المحتوى" + +msgid "object id" +msgstr "معرف العنصر" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ممثل العنصر" + +msgid "action flag" +msgstr "علامة الإجراء" + +msgid "change message" +msgstr "غيّر الرسالة" + +msgid "log entry" +msgstr "مُدخل السجل" + +msgid "log entries" +msgstr "مُدخلات السجل" + +#, python-format +msgid "Added “%(object)s”." +msgstr "تم إضافة العناصر \\\"%(object)s\\\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "تم تعديل العناصر \\\"%(object)s\\\" - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "تم حذف العناصر \\\"%(object)s.\\\"" + +msgid "LogEntry Object" +msgstr "كائن LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "تم إضافة {name} \\\"{object}\\\"." + +msgid "Added." +msgstr "تمت الإضافة." + +msgid "and" +msgstr "و" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "تم تغيير {fields} لـ {name} \\\"{object}\\\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "تم تغيير {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "تم حذف {name} \\\"{object}\\\"." + +msgid "No fields changed." +msgstr "لم يتم تغيير أية حقول." + +msgid "None" +msgstr "لاشيء" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"استمر بالضغط على مفتاح \\\"Control\\\", او \\\"Command\\\" على أجهزة الماك, " +"لإختيار أكثر من أختيار واحد." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "تمت إضافة {name} \\\"{obj}\\\" بنجاح." + +msgid "You may edit it again below." +msgstr "يمكن تعديله مرة أخرى أدناه." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "تمت إضافة {name} \\\"{obj}\\\" بنجاح. يمكنك إضافة {name} آخر أدناه." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "تم تغيير {name} \\\"{obj}\\\" بنجاح. يمكنك تعديله مرة أخرى أدناه." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "تمت إضافة {name} \\\"{obj}\\\" بنجاح. يمكنك تعديله مرة أخرى أدناه." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "تم تغيير {name} \\\"{obj}\\\" بنجاح. يمكنك إضافة {name} آخر أدناه." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "تم تغيير {name} \\\"{obj}\\\" بنجاح." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "يجب تحديد العناصر لتطبيق الإجراءات عليها. لم يتم تغيير أية عناصر." + +msgid "No action selected." +msgstr "لم يحدد أي إجراء." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "تم حذف %(name)s \\\"%(obj)s\\\" بنجاح." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s ب ID \\\"%(key)s\\\" غير موجود. ربما تم حذفه؟" + +#, python-format +msgid "Add %s" +msgstr "أضف %s" + +#, python-format +msgid "Change %s" +msgstr "عدّل %s" + +#, python-format +msgid "View %s" +msgstr "عرض %s" + +msgid "Database error" +msgstr "خطـأ في قاعدة البيانات" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[1] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[2] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[3] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[4] "تم تغيير %(count)s %(name)s بنجاح." +msgstr[5] "تم تغيير %(count)s %(name)s بنجاح." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "تم تحديد %(total_count)s" +msgstr[1] "تم تحديد %(total_count)s" +msgstr[2] "تم تحديد %(total_count)s" +msgstr[3] "تم تحديد %(total_count)s" +msgstr[4] "تم تحديد %(total_count)s" +msgstr[5] "تم تحديد %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "لا شيء محدد من %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "تاريخ التغيير: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"حذف %(class_name)s %(instance)s سيتسبب أيضاً بحذف العناصر المرتبطة التالية: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "إدارة موقع جانغو" + +msgid "Django administration" +msgstr "إدارة جانغو" + +msgid "Site administration" +msgstr "إدارة الموقع" + +msgid "Log in" +msgstr "ادخل" + +#, python-format +msgid "%(app)s administration" +msgstr "إدارة %(app)s " + +msgid "Page not found" +msgstr "تعذر العثور على الصفحة" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "نحن آسفون، لكننا لم نعثر على الصفحة المطلوبة.\"" + +msgid "Home" +msgstr "الرئيسية" + +msgid "Server error" +msgstr "خطأ في المزود" + +msgid "Server error (500)" +msgstr "خطأ في المزود (500)" + +msgid "Server Error (500)" +msgstr "خطأ في المزود (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"كان هناك خطأ. تم إعلام المسؤولين عن الموقع عبر البريد الإلكتروني وسوف يتم " +"إصلاح الخطأ قريباً. شكراً على صبركم." + +msgid "Run the selected action" +msgstr "نفذ الإجراء المحدّد" + +msgid "Go" +msgstr "نفّذ" + +msgid "Click here to select the objects across all pages" +msgstr "اضغط هنا لتحديد جميع العناصر في جميع الصفحات" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "اختيار %(total_count)s %(module_name)s جميعها" + +msgid "Clear selection" +msgstr "إزالة الاختيار" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "النماذج في تطبيق %(name)s" + +msgid "Add" +msgstr "أضف" + +msgid "View" +msgstr "عرض" + +msgid "You don’t have permission to view or edit anything." +msgstr "ليس لديك الصلاحية لعرض أو تعديل أي شيء." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"أولاً، أدخل اسم مستخدم وكلمة مرور. ومن ثم تستطيع تعديل المزيد من خيارات " +"المستخدم." + +msgid "Enter a username and password." +msgstr "أدخل اسم مستخدم وكلمة مرور." + +msgid "Change password" +msgstr "غيّر كلمة المرور" + +msgid "Please correct the error below." +msgstr "يرجى تصحيح الخطأ أدناه." + +msgid "Please correct the errors below." +msgstr "الرجاء تصحيح الأخطاء أدناه." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "أدخل كلمة مرور جديدة للمستخدم %(username)s." + +msgid "Welcome," +msgstr "أهلا، " + +msgid "View site" +msgstr "عرض الموقع" + +msgid "Documentation" +msgstr "الوثائق" + +msgid "Log out" +msgstr "اخرج" + +#, python-format +msgid "Add %(name)s" +msgstr "أضف %(name)s" + +msgid "History" +msgstr "تاريخ" + +msgid "View on site" +msgstr "مشاهدة على الموقع" + +msgid "Filter" +msgstr "مرشّح" + +msgid "Clear all filters" +msgstr "مسح جميع المرشحات" + +msgid "Remove from sorting" +msgstr "إزالة من الترتيب" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "أولوية الترتيب: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "عكس الترتيب" + +msgid "Delete" +msgstr "احذف" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"حذف العنصر %(object_name)s '%(escaped_object)s' سيتسبب بحذف العناصر المرتبطة " +"به، إلا أنك لا تملك صلاحية حذف العناصر التالية:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"حذف %(object_name)s '%(escaped_object)s' سيتسبب أيضاً بحذف العناصر المرتبطة، " +"إلا أن حسابك ليس لديه صلاحية حذف أنواع العناصر التالية:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"متأكد أنك تريد حذف العنصر %(object_name)s \\\"%(escaped_object)s\\\"؟ سيتم " +"حذف جميع العناصر التالية المرتبطة به:" + +msgid "Objects" +msgstr "عناصر" + +msgid "Yes, I’m sure" +msgstr "نعم، أنا متأكد" + +msgid "No, take me back" +msgstr "لا, تراجع للخلف" + +msgid "Delete multiple objects" +msgstr "حذف عدّة عناصر" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"حذف عناصر %(objects_name)s المُحدّدة سيتسبب بحذف العناصر المرتبطة، إلا أن " +"حسابك ليس له صلاحية حذف أنواع العناصر التالية:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"حذف عناصر %(objects_name)s المحدّدة قد يتطلب حذف العناصر المحميّة المرتبطة " +"التالية:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"أأنت متأكد أنك تريد حذف عناصر %(objects_name)s المحددة؟ جميع العناصر التالية " +"والعناصر المرتبطة بها سيتم حذفها:" + +msgid "Delete?" +msgstr "احذفه؟" + +#, python-format +msgid " By %(filter_title)s " +msgstr " حسب %(filter_title)s " + +msgid "Summary" +msgstr "ملخص" + +msgid "Recent actions" +msgstr "آخر الإجراءات" + +msgid "My actions" +msgstr "إجراءاتي" + +msgid "None available" +msgstr "لا يوجد" + +msgid "Unknown content" +msgstr "مُحتوى مجهول" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"هنالك أمر خاطئ في تركيب قاعدة بياناتك، تأكد من أنه تم انشاء جداول قاعدة " +"البيانات الملائمة، وأن قاعدة البيانات قابلة للقراءة من قبل المستخدم الملائم." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"أنت مسجل الدخول بإسم المستخدم %(username)s, ولكنك غير مخول للوصول لهذه " +"الصفحة. هل ترغب بتسجيل الدخول بحساب آخر؟" + +msgid "Forgotten your password or username?" +msgstr "نسيت كلمة المرور أو اسم المستخدم الخاص بك؟" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "التاريخ/الوقت" + +msgid "User" +msgstr "المستخدم" + +msgid "Action" +msgstr "إجراء" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"ليس لهذا العنصر سجلّ تغييرات، على الأغلب أنه لم يُنشأ من خلال نظام إدارة " +"الموقع." + +msgid "Show all" +msgstr "أظهر الكل" + +msgid "Save" +msgstr "احفظ" + +msgid "Popup closing…" +msgstr "إغلاق المنبثقة ..." + +msgid "Search" +msgstr "ابحث" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s نتيجة" +msgstr[1] "%(counter)s نتيجة" +msgstr[2] "%(counter)s نتيجة" +msgstr[3] "%(counter)s نتائج" +msgstr[4] "%(counter)s نتيجة" +msgstr[5] "%(counter)s نتيجة" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "المجموع %(full_result_count)s" + +msgid "Save as new" +msgstr "احفظ كجديد" + +msgid "Save and add another" +msgstr "احفظ وأضف آخر" + +msgid "Save and continue editing" +msgstr "احفظ واستمر بالتعديل" + +msgid "Save and view" +msgstr "احفظ ثم اعرض" + +msgid "Close" +msgstr "أغلق" + +#, python-format +msgid "Change selected %(model)s" +msgstr "تغيير %(model)s المختارة" + +#, python-format +msgid "Add another %(model)s" +msgstr "أضف %(model)s آخر" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "حذف %(model)s المختارة" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "شكراً لك على قضائك بعض الوقت مع الموقع اليوم." + +msgid "Log in again" +msgstr "ادخل مجدداً" + +msgid "Password change" +msgstr "غيّر كلمة مرورك" + +msgid "Your password was changed." +msgstr "تمّ تغيير كلمة مرورك." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"رجاءً أدخل كلمة مرورك القديمة، للأمان، ثم أدخل كلمة مرور الجديدة مرتين كي " +"تتأكّد من كتابتها بشكل صحيح." + +msgid "Change my password" +msgstr "غيّر كلمة مروري" + +msgid "Password reset" +msgstr "استعادة كلمة المرور" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "تم تعيين كلمة مرورك. يمكن الاستمرار وتسجيل دخولك الآن." + +msgid "Password reset confirmation" +msgstr "تأكيد استعادة كلمة المرور" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "رجاءً أدخل كلمة مرورك الجديدة مرتين كي تتأكّد من كتابتها بشكل صحيح." + +msgid "New password:" +msgstr "كلمة المرور الجديدة:" + +msgid "Confirm password:" +msgstr "أكّد كلمة المرور:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"رابط استعادة كلمة المرور غير صحيح، ربما لأنه استُخدم من قبل. رجاءً اطلب " +"استعادة كلمة المرور مرة أخرى." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"تم إرسال بريد إلكتروني بالتعليمات لضبط كلمة المرور الخاصة بك, في حال تواجد " +"حساب بنفس البريد الإلكتروني الذي ادخلته. سوف تستقبل البريد الإلكتروني قريباً" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"في حال عدم إستقبال البريد الإلكتروني، الرجاء التأكد من إدخال عنوان بريدك " +"الإلكتروني بشكل صحيح ومراجعة مجلد الرسائل غير المرغوب فيها." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"لقد قمت بتلقى هذه الرسالة لطلبك بإعادة تعين كلمة المرور لحسابك الشخصي على " +"%(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "رجاءً اذهب إلى الصفحة التالية واختر كلمة مرور جديدة:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "اسم المستخدم الخاص بك، في حال كنت قد نسيته:" + +msgid "Thanks for using our site!" +msgstr "شكراً لاستخدامك موقعنا!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "فريق %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"هل فقدت كلمة المرور؟ أدخل عنوان بريدك الإلكتروني أدناه وسوف نقوم بإرسال " +"تعليمات للحصول على كلمة مرور جديدة." + +msgid "Email address:" +msgstr "عنوان البريد الإلكتروني:" + +msgid "Reset my password" +msgstr "استعد كلمة مروري" + +msgid "All dates" +msgstr "كافة التواريخ" + +#, python-format +msgid "Select %s" +msgstr "اختر %s" + +#, python-format +msgid "Select %s to change" +msgstr "اختر %s لتغييره" + +#, python-format +msgid "Select %s to view" +msgstr "حدد %s للعرض" + +msgid "Date:" +msgstr "التاريخ:" + +msgid "Time:" +msgstr "الوقت:" + +msgid "Lookup" +msgstr "ابحث" + +msgid "Currently:" +msgstr "حالياً:" + +msgid "Change:" +msgstr "تغيير:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ar_DZ/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..135c8e2d14276807cddbbda12e9c8d3a5eb5b862 GIT binary patch literal 5721 zcmeH}TWlOx8OIMa(BML8OTsmTLm+NKyX#AWNjG&%Na8dpZmig}6a}I2?y+~u?2MV2 z_2mII7dsBl6QW411V|xD?YMEAkftON;wq3(kt*>t!vjJf;H3`;i8m1ZzBA+Xx-lWp zKJd_y&;HNlJKyDhzVjXb_MSE0RD9cM8)!dxi&Fc*!?*FnH@-%xPk|HQ+rdjYUIpLA z_(%Ep=ioaT|0*A+IsOiO7xRD4@ozca#^x60?*`uiZU8?5wt}r-54aYrt#^nJy7(Hfc&X(e#FnG zLGg126g|&?&w$T?Uk8h9LZ$jKDEfW@?gU=}W#1i4eg|9+J`27Gj)1)^z6bnaj=u)i zGyYRP{(C;Y3n$hw-wM7L+zGzSSseoB8E=GqvHweuDfLQ@zX5Sk{Sg#9ujXSp6uRnm zQ1q???*g~xSOV{6{3s~_JqUR4_ANVRLesn{^SHV4C3jP$F1;2%JZ2^uM= zJ}d)1Ib->R1E^73WWcwL_8}UytF1ImdpE6vCUs#mO}=*8$7tJWn`rWVFay;FlCJh1 z$(hOrz4l&9|Kl`hvGqW0-VzyaYovoAy?IO7kLfaD%CV{3bgfG}#adBy=@EflBcbc5 zUG?F56sujMj_Wytp3$2lwcGK_##6hiK@gc7w4?VpanoqPtu>9}=8)oI7`nAT3L1FRI)?xpq6)PhlC*AdNjFN^IlWm6k8q3SV%VciKQRFCV$j303; zMjdc`J9nV&O{fEP->6v7EX&|xf-7?zcO@g`d<-rPNe^h)<4_EuyrY&ZxfH#n##OkC7`o^c|R<%T}^ zsIVvdm%QiR`vz@Hho%tLGw(8LnjEY9nbFk=F%>tqWon6;{X^DeQP)JY_4u`###~$& z|gCdKii1K(pjP z-P}0&gsJ%1^b@Kt44$Hl7xq^QkDD+eXG*&A6p0bE95N$87#Dh@VYgEFOno>i3R@VsC9?TxNL39{9OVs*VE>NU)uA9wyiC_`+N5;2iH+-Z`mFAvGMVa`&ZJj8IRjW zJjeBSO3Hh9X9vu?NF-QBJq*6o_r?(Pn{9a*=NZl`oNceJ-Z)V)o&wr2eYyE|mZw&k^s zj;6&29$;}hi=X6Q%ycrD)ya$Lj83PLg=8^VY`o3sRC=QEa=#I)$+_31yGtimWPY^?t3$Slk>l81HYoZ~B?f1cmy+wr_qA}lY*Z)bVRRr=_JEv@BxeG8D`aXnGWSEJ_HulrAJkA zUS>szE@49@ZQ2fGMWIH5x@Fu9X)!ouqh3g^Cg(~T?h)7a zJdP!c>6A|9(j%4tIl^l~fMi+DxYcuk1tg1as`@|UDmgk#pB%nleR8!#}<-{QURI@ja+CcYLwSGB(n;F`TS;2vte4>0`feI z=j=7k3R0um7B%%_3N0tn;{@1T{pPstFQwD++|1$BQZ0JkPDu&M2)V+_qSOP52b~j$ zPV3|aDIHQ}vdWrV!_}{8%G`9mkRCa_soCD)O_HcH)E2v~p;e|REjNiJFRm*iX<}(* z9Lo{@7jfJ?iiWM5#~^VL&B=61@!BjhJf-;IjFUNS`IIPyZsDy#fV@h!fb&XFedRg$ z_opdI!)uFPiIazbtUb%4afyl3=_zeb3X12G>$ox_)!~dB, 2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-06-23 12:16+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s المتوفرة" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المتوفرة. يمكنك اختيار بعضها بانتقائها في الصندوق أدناه ثم " +"الضغط على سهم الـ\\\"اختيار\\\" بين الصندوقين." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "اكتب في هذا الصندوق لتصفية قائمة %s المتوفرة." + +msgid "Filter" +msgstr "انتقاء" + +msgid "Choose all" +msgstr "اختر الكل" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "اضغط لاختيار جميع %s جملة واحدة." + +msgid "Choose" +msgstr "اختيار" + +msgid "Remove" +msgstr "احذف" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s المختارة" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المحددة. يمكنك إزالة بعضها باختيارها في الصندوق أدناه ثم اضغط " +"على سهم الـ\\\"إزالة\\\" بين الصندوقين." + +msgid "Remove all" +msgstr "إزالة الكل" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "اضغط لإزالة جميع %s المحددة جملة واحدة." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "لا شي محدد" +msgstr[1] "%(sel)s من %(cnt)s محدد" +msgstr[2] "%(sel)s من %(cnt)s محدد" +msgstr[3] "%(sel)s من %(cnt)s محددة" +msgstr[4] "%(sel)s من %(cnt)s محدد" +msgstr[5] "%(sel)s من %(cnt)s محدد" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"لديك تعديلات غير محفوظة على بعض الحقول القابلة للتعديل. إن نفذت أي إجراء " +"فسوف تخسر تعديلاتك." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"اخترت إجراءً لكن دون أن تحفظ تغييرات التي قمت بها. رجاء اضغط زر الموافقة " +"لتحفظ تعديلاتك. ستحتاج إلى إعادة تنفيذ الإجراء." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "اخترت إجراءً دون تغيير أي حقل. لعلك تريد زر التنفيذ بدلاً من زر الحفظ." + +msgid "Now" +msgstr "الآن" + +msgid "Midnight" +msgstr "منتصف الليل" + +msgid "6 a.m." +msgstr "6 ص." + +msgid "Noon" +msgstr "الظهر" + +msgid "6 p.m." +msgstr "6 مساء" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." + +msgid "Choose a Time" +msgstr "إختر وقت " + +msgid "Choose a time" +msgstr "إختر وقت " + +msgid "Cancel" +msgstr "ألغ" + +msgid "Today" +msgstr "اليوم" + +msgid "Choose a Date" +msgstr "إختر تاريخ " + +msgid "Yesterday" +msgstr "أمس" + +msgid "Tomorrow" +msgstr "غداً" + +msgid "January" +msgstr "جانفي" + +msgid "February" +msgstr "فيفري" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "أفريل" + +msgid "May" +msgstr "ماي" + +msgid "June" +msgstr "جوان" + +msgid "July" +msgstr "جويليه" + +msgid "August" +msgstr "أوت" + +msgid "September" +msgstr "سبتمبر" + +msgid "October" +msgstr "أكتوبر" + +msgid "November" +msgstr "نوفمبر" + +msgid "December" +msgstr "ديسمبر" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "ح" + +msgctxt "one letter Monday" +msgid "M" +msgstr "ن" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "ث" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "ع" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "خ" + +msgctxt "one letter Friday" +msgid "F" +msgstr "ج" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "س" + +msgid "Show" +msgstr "أظهر" + +msgid "Hide" +msgstr "اخف" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e35811bbb20c8f4b764be230b4449c4bc9482617 GIT binary patch literal 2476 zcmaKs-)~e!6vu}jimpFU6n~>5v1u#4+ue#nx7JeH0>uIiT|^TSGQD?pcVOc)->2`mhmA^kQv`UG-6jTVZx~2 zUuCmevsu&QnFx~2I>~!Bavzt8yzkt_-&>la2?=yVA9+%eg2b_S_mCIx?^F)0V5k zyd$nkm`lUcjxcSRRoRkl!wEZW@hdI2yjR(>XiH8Bv}`mPI~xm^TN6qHwo-`2h1N(h z*dX-96b7W@&`55xsO7~n^OcyU()(7_8iEzFK-ZDMbh;}d9rab#>_{hv{UBapxOC3C zDqjqn@0{#fhZ0flNR)e+a*^fAC?A{%)_Hza2`+P?G#4i0zGI`#NWhj_hasLFM6dED z`dgklmWl8Qk_zIM!4-YSgru=&^I=vaxH1otML?ytmHv#`tOs zMMzFwiPBSyT~ZQRVtLY&LLf=2u+yo{tVdBg)&pLnVpwm`dsr^a`^5%TC62qvS3o1DbsH7!>cN6 z1=`?Psj{r26FNDDgX0_Abc;tnJu$@xx6>nrzdX(Bqf-^O;8&H_!g^lA)}>ubTb#|R zRP}FBi^x%HoNH`fdot*uADKp2>kiacihTZqQA`(L8bz)?iEDL|9@*KRD%boPRaCd zq9Mfp?ky+es^y3oJtbB-9jnm4g_MP+E}|l25_+?dWY$3+bXT}_u75Lf>RhYR^*012 zDpUcc(6)=FO*-dYI6dw}s>seFS?bR8Xi(ECvI>f0gWyJSR4}p=)}esM`(H`L=A}pY zHtlajG*%P(8@ct`j!^`bn?h+Q8S%-9dz3`)(GW0*3`-ovT3X9C#2CkmF}Bj*U_JIX DFNc!E literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..437b080ac --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,636 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "desanciáu con ésitu %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nun pue desaniciase %(name)s" + +msgid "Are you sure?" +msgstr "¿De xuru?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Too" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "Non" + +msgid "Unknown" +msgstr "Desconocíu" + +msgid "Any date" +msgstr "Cualaquier data" + +msgid "Today" +msgstr "Güei" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "Esti mes" + +msgid "This year" +msgstr "Esi añu" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Aición:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Amestáu \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Los oxetos tienen d'usase pa faer aiciones con ellos. Nun se camudó dengún " +"oxetu." + +msgid "No action selected." +msgstr "Nun s'esbilló denguna aición." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Amestar %s" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Esbillaos 0 de %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "Aniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Nun s'alcontró la páxina" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Sentímoslo, pero nun s'alcuentra la páxina solicitada." + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Hebo un erru. Repotóse al sitiu d'alministradores per corréu y debería " +"d'iguase en pocu tiempu. Gracies pola to paciencia." + +msgid "Run the selected action" +msgstr "Executar l'aición esbillada" + +msgid "Go" +msgstr "Dir" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Esbillar too %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Llimpiar esbilla" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Bienllegáu/ada," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "Anguaño:" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b7e49b7a39d6d0b72da2e955791f8e312296439 GIT binary patch literal 2137 zcmaKsJ&YSg6vsCZATi$|Knf%t63JbZtj{(dNgNJg?vfDTk|VhwMWPw+KHHOwXRMi7 z-?^frqC!wWgHodtLNpWkNrRC1zxCc36eT0i{`_XI4Sohn%0-jJ7p)JY%34L=6R22P8RH-* z<#E(UQ6-*~$53VN17cJ~)-F1vNZv&wQn*`W-^+4%F|aur$o1&(VrC=$qJgu>d2*+| z&RA)qx`yd+NLG~1*d!|h=K@zCMNtpumMQxK+tR`4>^en9S?NN`7&McLJ~A=*(=!6h)JdAvM8DL)$c3~gZ?Kiz_S$V zcf}#ow}_(&$2zSWR)Hxi6Mpdx*%R@fDaWo@Ml3XXPJJ;`HcLr8S@-T54oZ4HPv2%A zkft`}*N_cYyTl{sW4adlI!|9M`XSwLZK|zb+(=hED@kd(sv@_k)o8w$HeN`ZC#dyY zyV*L{Xf+xbm|o(smYDN#C(_2LwAG+StNncQSOcZ@rV26L@X7|GqVsKfU0JIGy~#Kd zhF*din6H@9tZUnIFT=<73)SazgVnH2oe&GJk@UqujHC9_(&px7JxWO3-;dZ$&N}hEVoY6?Co{lZLUi)N? zbFIi0oDJ{x`*zu<_6#4Q-= zx`@EEsy*RJ%nF4wgY4kYRz2qmg;&YfZ!2lU9*MGXdZW~aGwqQ^2#0(uvs5%w3H!DR z*YObb)Y$psc%)>@IvE!c`+%)0LqY;w;EaPt>-0t--r}qrfzyS=j}aXys4|uO3(Z|s ANB{r; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..53705c703 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po @@ -0,0 +1,211 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-20 02:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponible %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Choose all" +msgstr "Escoyer too" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Primi pa escoyer too %s d'una vegada" + +msgid "Choose" +msgstr "Escoyer" + +msgid "Remove" +msgstr "Desaniciar" + +#, javascript-format +msgid "Chosen %s" +msgstr "Escoyíu %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "Desaniciar too" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Primi pa desaniciar tolo escoyío %s d'una vegada" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s esbilláu" +msgstr[1] "%(sel)s de %(cnt)s esbillaos" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Esbillesti una aición, pero entá nun guardesti les tos camudancies nos " +"campos individuales. Por favor, primi Aceutar pa guardar. Necesitarás " +"executar de nueves la aición" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Esbillesti una aición, y nun fixesti camudancia dala nos campos " +"individuales. Quiciabes teas guetando'l botón Dir en cuantes del botón " +"Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Agora" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Escueyi una hora" + +msgid "Midnight" +msgstr "Media nueche" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "Meudía" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Encaboxar" + +msgid "Today" +msgstr "Güei" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Ayeri" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Amosar" + +msgid "Hide" +msgstr "Anubrir" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..509db8d49228a065875b6b61207c33c33a961e0f GIT binary patch literal 14807 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 WvU#&T)R%KO7Kuas(yNnvsQ(3dPL#0# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..f9644291e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,704 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Emin Mastizada , 2018,2020 +# Emin Mastizada , 2016 +# Konul Allahverdiyeva , 2016 +# Zulfugar Ismayilzadeh , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s uğurla silindi." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s silinmir" + +msgid "Are you sure?" +msgstr "Əminsiniz?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Seçilmiş %(verbose_name_plural)s-ləri sil" + +msgid "Administration" +msgstr "Administrasiya" + +msgid "All" +msgstr "Hamısı" + +msgid "Yes" +msgstr "Hə" + +msgid "No" +msgstr "Yox" + +msgid "Unknown" +msgstr "Bilinmir" + +msgid "Any date" +msgstr "İstənilən tarix" + +msgid "Today" +msgstr "Bu gün" + +msgid "Past 7 days" +msgstr "Son 7 gündə" + +msgid "This month" +msgstr "Bu ay" + +msgid "This year" +msgstr "Bu il" + +msgid "No date" +msgstr "Tarixi yoxdur" + +msgid "Has date" +msgstr "Tarixi mövcuddur" + +msgid "Empty" +msgstr "Boş" + +msgid "Not empty" +msgstr "Boş deyil" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Lütfən, istifadəçi hesabı üçün doğru %(username)s və parol daxil olun. " +"Nəzərə alın ki, hər iki sahə böyük/kiçik hərflərə həssasdırlar." + +msgid "Action:" +msgstr "Əməliyyat:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Daha bir %(verbose_name)s əlavə et" + +msgid "Remove" +msgstr "Yığışdır" + +msgid "Addition" +msgstr "Əlavə" + +msgid "Change" +msgstr "Dəyiş" + +msgid "Deletion" +msgstr "Silmə" + +msgid "action time" +msgstr "əməliyyat vaxtı" + +msgid "user" +msgstr "istifadəçi" + +msgid "content type" +msgstr "məzmun növü" + +msgid "object id" +msgstr "obyekt id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "obyekt repr" + +msgid "action flag" +msgstr "bayraq" + +msgid "change message" +msgstr "dəyişmə mesajı" + +msgid "log entry" +msgstr "loq yazısı" + +msgid "log entries" +msgstr "loq yazıları" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” əlavə edildi." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” dəyişdirildi — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "“%(object)s” silindi." + +msgid "LogEntry Object" +msgstr "LogEntry obyekti" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” əlavə edildi." + +msgid "Added." +msgstr "Əlavə edildi." + +msgid "and" +msgstr "və" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} “{object}” üçün {fields} dəyişdirildi." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} dəyişdirildi." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}” silindi." + +msgid "No fields changed." +msgstr "Heç bir sahə dəyişmədi." + +msgid "None" +msgstr "Heç nə" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Birdən çox seçmək üçün “Control” və ya Mac üçün “Command” düyməsini basılı " +"tutun." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” uğurla əlavə edildi." + +msgid "You may edit it again below." +msgstr "Bunu aşağıda təkrar redaktə edə bilərsiz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” uğurla əlavə edildi. Aşağıdan başqa bir {name} əlavə edə " +"bilərsiz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” uğurla dəyişdirildi. Təkrar aşağıdan dəyişdirə bilərsiz." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” uğurla əlavə edildi. Bunu təkrar aşağıdan dəyişdirə bilərsiz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” uğurla dəyişdirildi. Aşağıdan başqa bir {name} əlavə edə " +"bilərsiz." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” uğurla dəyişdirildi." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Biz elementlər üzərində nəsə əməliyyat aparmaq üçün siz onları seçməlisiniz. " +"Heç bir element dəyişmədi." + +msgid "No action selected." +msgstr "Heç bir əməliyyat seçilmədi." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” uğurla silindi." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "“%(key)s” ID nömrəli %(name)s mövcud deyil. Silinmiş ola bilər?" + +#, python-format +msgid "Add %s" +msgstr "%s əlavə et" + +#, python-format +msgid "Change %s" +msgstr "%s dəyiş" + +#, python-format +msgid "View %s" +msgstr "%s gör" + +msgid "Database error" +msgstr "Bazada xəta" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s uğurlu dəyişdirildi." +msgstr[1] "%(count)s %(name)s uğurlu dəyişdirildi." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seçili" +msgstr[1] "Bütün %(total_count)s seçili" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-dan 0 seçilib" + +#, python-format +msgid "Change history: %s" +msgstr "Dəyişmə tarixi: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s silmə əlaqəli qorunmalı obyektləri silməyi tələb " +"edir: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django sayt administratoru" + +msgid "Django administration" +msgstr "Django administrasiya" + +msgid "Site administration" +msgstr "Sayt administrasiyası" + +msgid "Log in" +msgstr "Daxil ol" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administrasiyası" + +msgid "Page not found" +msgstr "Səhifə tapılmadı" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Üzr istəyirik, amma sorğulanan səhifə tapılmadı." + +msgid "Home" +msgstr "Ev" + +msgid "Server error" +msgstr "Serverdə xəta" + +msgid "Server error (500)" +msgstr "Serverdə xəta (500)" + +msgid "Server Error (500)" +msgstr "Serverdə xəta (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Seçdiyim əməliyyatı yerinə yetir" + +msgid "Go" +msgstr "Getdik" + +msgid "Click here to select the objects across all pages" +msgstr "Bütün səhifələr üzrə obyektləri seçmək üçün bura tıqlayın" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Bütün %(total_count)s sayda %(module_name)s seç" + +msgid "Clear selection" +msgstr "Seçimi təmizlə" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s proqramındakı modellər" + +msgid "Add" +msgstr "Əlavə et" + +msgid "View" +msgstr "Gör" + +msgid "You don’t have permission to view or edit anything." +msgstr "Nəyi isə görmək və ya redaktə etmək icazəniz yoxdur." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "İstifadəçi adını və parolu daxil edin." + +msgid "Change password" +msgstr "Parolu dəyiş" + +msgid "Please correct the error below." +msgstr "Lütfən aşağıdakı xətanı düzəldin." + +msgid "Please correct the errors below." +msgstr "Lütfən aşağıdakı səhvləri düzəldin." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s üçün yeni parol daxil edin." + +msgid "Welcome," +msgstr "Xoş gördük," + +msgid "View site" +msgstr "Saytı ziyarət et" + +msgid "Documentation" +msgstr "Sənədləşdirmə" + +msgid "Log out" +msgstr "Çıx" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s əlavə et" + +msgid "History" +msgstr "Tarix" + +msgid "View on site" +msgstr "Saytda göstər" + +msgid "Filter" +msgstr "Süzgəc" + +msgid "Clear all filters" +msgstr "Bütün filterləri təmizlə" + +msgid "Remove from sorting" +msgstr "Sıralamadan çıxar" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sıralama prioriteti: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sıralamanı çevir" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini sildikdə onun bağlı olduğu " +"obyektlər də silinməlidir. Ancaq sizin hesabın aşağıdakı tip obyektləri " +"silməyə səlahiyyəti çatmır:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini silmək üçün aşağıdakı " +"qorunan obyektlər də silinməlidir:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini silməkdə əminsiniz? Ona " +"bağlı olan aşağıdakı obyektlər də silinəcək:" + +msgid "Objects" +msgstr "Obyektlər" + +msgid "Yes, I’m sure" +msgstr "Bəli, əminəm" + +msgid "No, take me back" +msgstr "Xeyr, məni geri götür" + +msgid "Delete multiple objects" +msgstr "Bir neçə obyekt sil" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s obyektini silmək üçün ona bağlı obyektlər də silinməlidir. " +"Ancaq sizin hesabınızın aşağıdakı tip obyektləri silmək səlahiyyətinə malik " +"deyil:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s obyektini silmək üçün aşağıdakı qorunan obyektlər də " +"silinməlidir:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Seçdiyiniz %(objects_name)s obyektini silməkdə əminsiniz? Aşağıdakı bütün " +"obyektlər və ona bağlı digər obyektlər də silinəcək:" + +msgid "Delete?" +msgstr "Silək?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s görə " + +msgid "Summary" +msgstr "İcmal" + +msgid "Recent actions" +msgstr "Son əməliyyatlar" + +msgid "My actions" +msgstr "Mənim əməliyyatlarım" + +msgid "None available" +msgstr "Heç nə yoxdur" + +msgid "Unknown content" +msgstr "Naməlum" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s olaraq daxil olmusunuz, amma bu səhifəyə icazəniz yoxdur. Başqa " +"bir hesaba daxil olmaq istərdiniz?" + +msgid "Forgotten your password or username?" +msgstr "Parol və ya istifadəçi adını unutmusan?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Tarix/vaxt" + +msgid "User" +msgstr "İstifadəçi" + +msgid "Action" +msgstr "Əməliyyat" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Hamısını göstər" + +msgid "Save" +msgstr "Yadda saxla" + +msgid "Popup closing…" +msgstr "Qəfil pəncərə qapatılır…" + +msgid "Search" +msgstr "Axtar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s nəticə" +msgstr[1] "%(counter)s nəticə" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Hamısı birlikdə %(full_result_count)s" + +msgid "Save as new" +msgstr "Yenisi kimi yadda saxla" + +msgid "Save and add another" +msgstr "Yadda saxla və yenisini əlavə et" + +msgid "Save and continue editing" +msgstr "Yadda saxla və redaktəyə davam et" + +msgid "Save and view" +msgstr "Saxla və gör" + +msgid "Close" +msgstr "Qapat" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Seçilmiş %(model)s dəyişdir" + +#, python-format +msgid "Add another %(model)s" +msgstr "Başqa %(model)s əlavə et" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Seçilmiş %(model)s sil" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Sayt ilə səmərəli vaxt keçirdiyiniz üçün təşəkkür." + +msgid "Log in again" +msgstr "Yenidən daxil ol" + +msgid "Password change" +msgstr "Parol dəyişmək" + +msgid "Your password was changed." +msgstr "Sizin parolunuz dəyişdi." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Mənim parolumu dəyiş" + +msgid "Password reset" +msgstr "Parolun sıfırlanması" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Yeni parol artıq qüvvədədir. Yenidən daxil ola bilərsiniz." + +msgid "Password reset confirmation" +msgstr "Parolun sıfırlanması üçün təsdiq" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Yeni parolu iki dəfə daxil edin ki, səhv etmədiyinizə əmin olaq." + +msgid "New password:" +msgstr "Yeni parol:" + +msgid "Confirm password:" +msgstr "Yeni parol (bir daha):" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Parolun sıfırlanması üçün olan keçid, yəqin ki, artıq istifadə olunub. " +"Parolu sıfırlamaq üçün yenə müraciət edin." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"%(site_name)s saytında parolu yeniləmək istədiyinizə görə bu məktubu " +"göndərdik." + +msgid "Please go to the following page and choose a new password:" +msgstr "Növbəti səhifəyə keçid alın və yeni parolu seçin:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "İstifadəçi adınız, əgər unutmusunuzsa:" + +msgid "Thanks for using our site!" +msgstr "Bizim saytdan istifadə etdiyiniz üçün təşəkkür edirik!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s komandası" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "E-poçt:" + +msgid "Reset my password" +msgstr "Parolumu sıfırla" + +msgid "All dates" +msgstr "Bütün tarixlərdə" + +#, python-format +msgid "Select %s" +msgstr "%s seç" + +#, python-format +msgid "Select %s to change" +msgstr "%s dəyişmək üçün seç" + +#, python-format +msgid "Select %s to view" +msgstr "Görmək üçün %s seçin" + +msgid "Date:" +msgstr "Tarix:" + +msgid "Time:" +msgstr "Vaxt:" + +msgid "Lookup" +msgstr "Sorğu" + +msgid "Currently:" +msgstr "Hazırda:" + +msgid "Change:" +msgstr "Dəyişdir:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..b3088a5fc3dc99d3755c8b1747228db93a5fa008 GIT binary patch literal 4598 zcmcJSUu+yl9mfZn0Ci|dLtCJfFf};X)VFrhw1i88@c$A_+xF{ zNayn)>HG#reqI7!0=wXgpodOy$$kowzt_R@;4eVxcMOfMf)9YNfIk46Uv+d zFTn>;|5ILnJFg#yi2Kog3VaYe4;rl1Rq%1te|9X>`;VOe1WC_PED9vDV<4K?2@o#X zNs#6-3F40xaHID{kk)G%JPwxgx&&#Q2wVie50c+EbG`-Ayx#^fWp)%!=>0t)>9{}V zLm-XIL5lYTcrQ2wQvY+H1m{2jZh_?IZWxiD;~@Ee5X38X68r!-4O0Inb1s43LH#mF z@%{@){k{rg^78_?1ilDT`>#Q=`yKczu#L&T3|_vEF@%}@G3OiLyHWphUjJ*(H}m$t z<@|fz{$beOdQqI|La3OB@*$K{D374f^^pu|oM_D-MIp_fLV;U$5`{F-btXd^qiH-B z@;cHYy*`aQ&F^DbHC-*j)xeKbrmQWur5jd|#BlM74*Zw#-} zqUCmcJWG^uMAX8lBHgBh4UO(LLyqn;@(vYsbDj4Tjo@N>M!_90)hsKj#lM!-}+)-xL1@d_KMIvZiRGkXVbQ-@TH!y$r zO4so~_(*v}DePsV>CGCc$=-Rlmj@%hUtWa1KDF7K0uhq~0(l~x$FFE9BAMj|U;P3_kNOYQ zkvA3F(W!N zQ)8uzrKP=Do%UwO7DD5sfh>G@MebzV%`~-8<~-$^jikHq#qx6D+@2kcwJvR8$y7rh zyHAmyt0;F(SxpI*Mw;a%lbExSf_VGM=(Ny zJ#j@=2VI^Bo62P?(1%RWd~iY{6RNTMs>XZ zQY>GM2<-W-GndA~)z- zHXl#(U@w10mWdpAeAQ@y&BySHve-y_TbW+IA?z;3p`7tW18LJ1MkInGV+4Z7H^L+k z8@z=_)llhM9ModZew>nWT;&-9TP@OTOfwa5R+`ecD$7%J zD2&&TO>9k6L>)4RlTSn^o51NPf2#o%zzHSG0oA_7_^3DS@z zA7Gb-K^n<*nEMJTT89Ze!wE`)psNNo;JZifyo<-@d#@$Eod%b6{IbNkz9!m;vftZD zU==BxpH^W|z9QXTD>YCDD5$180>-A*cn4wlc@YGHA0iFQz9%lzm(C;;Pw((?`Zxt5 zl7--C{5I@wSG-IorO$9%(b#}6g5hNmh+x0ghE9Da%6NQ4BVvsNZ&+a|ClMTqj8+^g zSQQ)DUWYGxe$egQ5>e@V1#gJ?0r@=FKB60X=ySuqN5f-tvK%WgTtcY8=$L6FbVPIP gOds$HdySC{uSo!VRs;W@uz9xoDsBs`_jUUF7Y}NZ^8f$< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..e49194db9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011-2012 +# Emin Mastizada , 2016,2020 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-14 20:39+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mümkün %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Bu, mümkün %s siyahısıdır. Onlardan bir neçəsini qarşısındakı xanaya işarə " +"qoymaq və iki xana arasındakı \"Seç\"i tıqlamaqla seçmək olar." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Bu xanaya yazmaqla mümkün %s siyahısını filtrləyə bilərsiniz." + +msgid "Filter" +msgstr "Süzgəc" + +msgid "Choose all" +msgstr "Hamısını seç" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bütün %s siyahısını seçmək üçün tıqlayın." + +msgid "Choose" +msgstr "Seç" + +msgid "Remove" +msgstr "Yığışdır" + +#, javascript-format +msgid "Chosen %s" +msgstr "Seçilmiş %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Bu, seçilmiş %s siyahısıdır. Onlardan bir neçəsini aşağıdakı xanaya işarə " +"qoymaq və iki xana arasındakı \"Sil\"i tıqlamaqla silmək olar." + +msgid "Remove all" +msgstr "Hamısını sil" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Seçilmiş %s siyahısının hamısını silmək üçün tıqlayın." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s / %(cnt)s seçilib" +msgstr[1] "%(sel)s / %(cnt)s seçilib" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bəzi sahələrdə etdiyiniz dəyişiklikləri hələ yadda saxlamamışıq. Əgər " +"əməliyyatı işə salsanız, dəyişikliklər əldən gedəcək." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Əməliyyat seçmisiniz, amma fərdi sahələrdəki dəyişiklikləriniz hələ də yadda " +"saxlanılmayıb. Saxlamaq üçün lütfən Tamam düyməsinə klikləyin. Əməliyyatı " +"təkrar işlətməli olacaqsınız." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Əməliyyat seçmisiniz və fərdi sahələrdə dəyişiklər etməmisiniz. Böyük " +"ehtimal Saxla düyməsi yerinə Get düyməsinə ehtiyyacınız var." + +msgid "Now" +msgstr "İndi" + +msgid "Midnight" +msgstr "Gecə yarısı" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Günorta" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Diqqət: Server vaxtından %s saat irəlidəsiniz." +msgstr[1] "Diqqət: Server vaxtından %s saat irəlidəsiniz." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Diqqət: Server vaxtından %s saat geridəsiniz." +msgstr[1] "Diqqət: Server vaxtından %s saat geridəsiniz." + +msgid "Choose a Time" +msgstr "Vaxt Seçin" + +msgid "Choose a time" +msgstr "Vaxtı seçin" + +msgid "Cancel" +msgstr "Ləğv et" + +msgid "Today" +msgstr "Bu gün" + +msgid "Choose a Date" +msgstr "Tarix Seçin" + +msgid "Yesterday" +msgstr "Dünən" + +msgid "Tomorrow" +msgstr "Sabah" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "İyun" + +msgid "July" +msgstr "İyul" + +msgid "August" +msgstr "Avqust" + +msgid "September" +msgstr "Sentyabr" + +msgid "October" +msgstr "Oktyabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "B" + +msgctxt "one letter Monday" +msgid "M" +msgstr "B" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ç" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ç" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "C" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Ş" + +msgid "Show" +msgstr "Göstər" + +msgid "Hide" +msgstr "Gizlət" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..16720dc54f9f4bade3e72c1edfdb23e912cb5c6e GIT binary patch literal 21347 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 EKepYLasU7T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..472f7e963 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,726 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016-2017,2019-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 16:42+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Выдаліць абраныя %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Выдалілі %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не ўдаецца выдаліць %(name)s" + +msgid "Are you sure?" +msgstr "Ці ўпэўненыя вы?" + +msgid "Administration" +msgstr "Адміністрацыя" + +msgid "All" +msgstr "Усе" + +msgid "Yes" +msgstr "Так" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Невядома" + +msgid "Any date" +msgstr "Хоць-якая дата" + +msgid "Today" +msgstr "Сёньня" + +msgid "Past 7 days" +msgstr "Апошні тыдзень" + +msgid "This month" +msgstr "Гэты месяц" + +msgid "This year" +msgstr "Гэты год" + +msgid "No date" +msgstr "Няма даты" + +msgid "Has date" +msgstr "Мае дату" + +msgid "Empty" +msgstr "Пусты" + +msgid "Not empty" +msgstr "Не пусты" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Калі ласка, увядзіце правільны %(username)s і пароль для службовага рахунку. " +"Адзначым, што абодва палі могуць быць адчувальныя да рэгістра." + +msgid "Action:" +msgstr "Дзеяньне:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Дадаць яшчэ %(verbose_name)s" + +msgid "Remove" +msgstr "Прыбраць" + +msgid "Addition" +msgstr "Дапаўненьне" + +msgid "Change" +msgstr "Зьмяніць" + +msgid "Deletion" +msgstr "Выдалленне" + +msgid "action time" +msgstr "час дзеяньня" + +msgid "user" +msgstr "карыстальнік" + +msgid "content type" +msgstr "від змесціва" + +msgid "object id" +msgstr "нумар аб’екта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "прадстаўленьне аб’екта" + +msgid "action flag" +msgstr "від дзеяньня" + +msgid "change message" +msgstr "паведамленьне пра зьмену" + +msgid "log entry" +msgstr "запіс у справаздачы" + +msgid "log entries" +msgstr "запісы ў справаздачы" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Дадалі “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Зьмянілі «%(object)s» — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Выдалілі «%(object)s»." + +msgid "LogEntry Object" +msgstr "Запіс у справаздачы" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Дадалі {name} “{object}”." + +msgid "Added." +msgstr "Дадалі." + +msgid "and" +msgstr "і" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Змянілі {fields} для {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Зьмянілі {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Выдалілі {name} “{object}”." + +msgid "No fields changed." +msgstr "Палі не зьмяняліся." + +msgid "None" +msgstr "Няма" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Утрымлівайце націснутай кнопку“Control”, або “Command” на Mac, каб вылучыць " +"больш за адзін." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Пасьпяхова дадалі {name} “{obj}”." + +msgid "You may edit it again below." +msgstr "Вы можаце зноўку правіць гэта ніжэй." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "Пасьпяхова дадалі {name} \"{obj}\". Ніжэй можна дадаць іншы {name}." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "Пасьпяхова зьмянілі {name} \"{obj}\". Ніжэй яго можна зноўку правіць." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "Пасьпяхова дадалі {name} \"{obj}\". Ніжэй яго можна зноўку правіць." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "Пасьпяхова зьмянілі {name} \"{obj}\". Ніжэй можна дадаць іншы {name}." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Пасьпяхова зьмянілі {name} \"{obj}\"." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Каб нешта рабіць, трэба спачатку абраць, з чым гэта рабіць. Нічога не " +"зьмянілася." + +msgid "No action selected." +msgstr "Не абралі дзеяньняў." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Пасьпяхова выдалілі %(name)s «%(obj)s»." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s з ID \"%(key)s\" не існуе. Магчыма гэта было выдалена раней?" + +#, python-format +msgid "Add %s" +msgstr "Дадаць %s" + +#, python-format +msgid "Change %s" +msgstr "Зьмяніць %s" + +#, python-format +msgid "View %s" +msgstr "Праглядзець %s" + +msgid "Database error" +msgstr "База зьвестак дала хібу" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Зьмянілі %(count)s %(name)s." +msgstr[1] "Зьмянілі %(count)s %(name)s." +msgstr[2] "Зьмянілі %(count)s %(name)s." +msgstr[3] "Зьмянілі %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Абралі %(total_count)s" +msgstr[1] "Абралі ўсе %(total_count)s" +msgstr[2] "Абралі ўсе %(total_count)s" +msgstr[3] "Абралі ўсе %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Абралі 0 аб’ектаў з %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Гісторыя зьменаў: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Каб выдаліць %(class_name)s %(instance)s, трэба выдаліць і зьвязаныя " +"абароненыя аб’екты: %(related_objects)s" + +msgid "Django site admin" +msgstr "Кіраўнічая пляцоўка «Джэнґа»" + +msgid "Django administration" +msgstr "Кіраваць «Джэнґаю»" + +msgid "Site administration" +msgstr "Кіраваць пляцоўкаю" + +msgid "Log in" +msgstr "Увайсьці" + +#, python-format +msgid "%(app)s administration" +msgstr "Адміністрацыя %(app)s" + +msgid "Page not found" +msgstr "Бачыну не знайшлі" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "На жаль, запытаную бачыну немагчыма знайсьці." + +msgid "Home" +msgstr "Пачатак" + +msgid "Server error" +msgstr "Паслужнік даў хібу" + +msgid "Server error (500)" +msgstr "Паслужнік даў хібу (памылка 500)" + +msgid "Server Error (500)" +msgstr "Паслужнік даў хібу (памылка 500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Адбылася памылка. Паведамленне пра памылку было адаслана адміністратарам " +"сайту па электроннай пошце і яна павінна быць выпраўлена ў бліжэйшы час. " +"Дзякуй за ваша цярпенне." + +msgid "Run the selected action" +msgstr "Выканаць абранае дзеяньне" + +msgid "Go" +msgstr "Выканаць" + +msgid "Click here to select the objects across all pages" +msgstr "Каб абраць аб’екты на ўсіх бачынах, націсьніце сюды" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Абраць усе %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Не абіраць нічога" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Мадэлі ў %(name)s праграме" + +msgid "Add" +msgstr "Дадаць" + +msgid "View" +msgstr "Праглядзець" + +msgid "You don’t have permission to view or edit anything." +msgstr "Вы ня маеце дазволу праглядаць ці нешта зьмяняць." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Спачатку пазначце імя карыстальніка ды пароль. Потым можна будзе наставіць " +"іншыя можнасьці." + +msgid "Enter a username and password." +msgstr "Пазначце імя карыстальніка ды пароль." + +msgid "Change password" +msgstr "Зьмяніць пароль" + +msgid "Please correct the error below." +msgstr "Калі ласка, выпраўце памылкі, адзначаныя ніжэй." + +msgid "Please correct the errors below." +msgstr "Калі ласка, выпраўце памылкі, адзначаныя ніжэй." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Пазначце пароль для карыстальніка «%(username)s»." + +msgid "Welcome," +msgstr "Вітаем," + +msgid "View site" +msgstr "Адкрыць сайт" + +msgid "Documentation" +msgstr "Дакумэнтацыя" + +msgid "Log out" +msgstr "Выйсьці" + +#, python-format +msgid "Add %(name)s" +msgstr "Дадаць %(name)s" + +msgid "History" +msgstr "Гісторыя" + +msgid "View on site" +msgstr "Зірнуць на пляцоўцы" + +msgid "Filter" +msgstr "Прасеяць" + +msgid "Clear all filters" +msgstr "Ачысьціць усе фільтры" + +msgid "Remove from sorting" +msgstr "Прыбраць з упарадкаванага" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Парадак: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Парадкаваць наадварот" + +msgid "Delete" +msgstr "Выдаліць" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Калі выдаліць %(object_name)s «%(escaped_object)s», выдаляцца зьвязаныя " +"аб’екты, але ваш рахунак ня мае дазволу выдаляць наступныя віды аб’ектаў:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Каб выдаліць %(object_name)s «%(escaped_object)s», трэба выдаліць і " +"зьвязаныя абароненыя аб’екты:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ці выдаліць %(object_name)s «%(escaped_object)s»? Усе наступныя зьвязаныя " +"складнікі выдаляцца:" + +msgid "Objects" +msgstr "Аб'екты" + +msgid "Yes, I’m sure" +msgstr "Так, я ўпэўнены" + +msgid "No, take me back" +msgstr "Не, вярнуцца назад" + +msgid "Delete multiple objects" +msgstr "Выдаліць некалькі аб’ектаў" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Калі выдаліць абранае (%(objects_name)s), выдаляцца зьвязаныя аб’екты, але " +"ваш рахунак ня мае дазволу выдаляць наступныя віды аб’ектаў:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Каб выдаліць абранае (%(objects_name)s), трэба выдаліць і зьвязаныя " +"абароненыя аб’екты:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ці выдаліць абранае (%(objects_name)s)? Усе наступныя аб’екты ды зьвязаныя " +"зь імі складнікі выдаляцца:" + +msgid "Delete?" +msgstr "Ці выдаліць?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Рэзюмэ" + +msgid "Recent actions" +msgstr "Нядаўнія дзеянні" + +msgid "My actions" +msgstr "Мае дзеяньні" + +msgid "None available" +msgstr "Недаступнае" + +msgid "Unknown content" +msgstr "Невядомае зьмесьціва" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Нешта ня так з усталяванаю базаю зьвестак. Упэўніцеся, што ў базе стварылі " +"патрэбныя табліцы, і што базу можа чытаць адпаведны карыстальнік." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Вы апазнаны як %(username)s але не аўтарызаваны для доступу гэтай бачыны. Не " +"жадаеце лі вы ўвайсці пад іншым карыстальнікам?" + +msgid "Forgotten your password or username?" +msgstr "Забыліся на імя ці пароль?" + +msgid "Toggle navigation" +msgstr "Пераключыць навігацыю" + +msgid "Start typing to filter…" +msgstr "Пачніце ўводзіць, каб адфільтраваць..." + +msgid "Filter navigation items" +msgstr "Фільтраваць элементы навігацыі" + +msgid "Date/time" +msgstr "Час, дата" + +msgid "User" +msgstr "Карыстальнік" + +msgid "Action" +msgstr "Дзеяньне" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Аб’ект ня мае гісторыі зьменаў. Мажліва, яго дадавалі не праз кіраўнічую " +"пляцоўку." + +msgid "Show all" +msgstr "Паказаць усё" + +msgid "Save" +msgstr "Захаваць" + +msgid "Popup closing…" +msgstr "Усплывальнае акно зачыняецца..." + +msgid "Search" +msgstr "Шукаць" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s вынік" +msgstr[1] "%(counter)s вынікі" +msgstr[2] "%(counter)s вынікаў" +msgstr[3] "%(counter)s вынікаў" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Разам %(full_result_count)s" + +msgid "Save as new" +msgstr "Захаваць як новы" + +msgid "Save and add another" +msgstr "Захаваць і дадаць іншы" + +msgid "Save and continue editing" +msgstr "Захаваць і працягваць правіць" + +msgid "Save and view" +msgstr "Захаваць і праглядзець" + +msgid "Close" +msgstr "Закрыць" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Змяніць абраныя %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Дадаць яшчэ %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Выдаліць абраныя %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Дзякуем за час, які вы сёньня правялі на гэтай пляцоўцы." + +msgid "Log in again" +msgstr "Увайсьці зноўку" + +msgid "Password change" +msgstr "Зьмяніць пароль" + +msgid "Your password was changed." +msgstr "Ваш пароль зьмяніўся." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Дзеля бясьпекі пазначце стары пароль, а потым набярыце новы пароль двойчы — " +"каб упэўніцца, што набралі без памылак." + +msgid "Change my password" +msgstr "Зьмяніць пароль" + +msgid "Password reset" +msgstr "Узнавіць пароль" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Вам усталявалі пароль. Можаце вярнуцца ды ўвайсьці зноўку." + +msgid "Password reset confirmation" +msgstr "Пацьвердзіце, што трэба ўзнавіць пароль" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Набярыце новы пароль двойчы — каб упэўніцца, што набралі без памылак." + +msgid "New password:" +msgstr "Новы пароль:" + +msgid "Confirm password:" +msgstr "Пацьвердзіце пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Спасылка ўзнавіць пароль хібная: мажліва таму, што ёю ўжо скарысталіся. " +"Запытайцеся ўзнавіць пароль яшчэ раз." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Мы адаслалі па электроннай пошце інструкцыі па ўстаноўцы пароля. Калі існуе " +"рахунак з электроннай поштай, што вы ўвялі, то Вы павінны атрымаць іх у " +"бліжэйшы час." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Калі вы не атрымліваеце электронную пошту, калі ласка, пераканайцеся, што вы " +"ўвялі адрас з якім вы зарэгістраваліся, а таксама праверце тэчку са спамам." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Вы атрымалі гэты ліст, таму што вы прасілі скінуць пароль для ўліковага " +"запісу карыстальніка на %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Перайдзіце да наступнае бачыны ды абярыце новы пароль:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Імя карыстальніка, калі раптам вы забыліся:" + +msgid "Thanks for using our site!" +msgstr "Дзякуем, што карыстаецеся нашаю пляцоўкаю!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Каманда «%(site_name)s»" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Забыліся пароль? Калі ласка, увядзіце свой адрас электроннай пошты ніжэй, і " +"мы вышлем інструкцыі па электроннай пошце для ўстаноўкі новага." + +msgid "Email address:" +msgstr "Адрас электроннай пошты:" + +msgid "Reset my password" +msgstr "Узнавіць пароль" + +msgid "All dates" +msgstr "Усе даты" + +#, python-format +msgid "Select %s" +msgstr "Абраць %s" + +#, python-format +msgid "Select %s to change" +msgstr "Абярыце %s, каб зьмяніць" + +#, python-format +msgid "Select %s to view" +msgstr "Абярыце %s, каб праглядзець" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Час:" + +msgid "Lookup" +msgstr "Шукаць" + +msgid "Currently:" +msgstr "У цяперашні час:" + +msgid "Change:" +msgstr "Зьмяніць:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..d854574f7eb4a1f9944d4d4679d76aa6921e90be GIT binary patch literal 6558 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 F{{|pdjI96w literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..96a4413c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po @@ -0,0 +1,272 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:10+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Даступныя %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Сьпіс даступных %s. Каб нешта абраць, пазначце патрэбнае ў полі ніжэй і " +"пстрыкніце па стрэлцы «Абраць» між двума палямі." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Каб прасеяць даступныя %s, друкуйце ў гэтым полі." + +msgid "Filter" +msgstr "Прасеяць" + +msgid "Choose all" +msgstr "Абраць усе" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Каб абраць усе %s, пстрыкніце тут." + +msgid "Choose" +msgstr "Абраць" + +msgid "Remove" +msgstr "Прыбраць" + +#, javascript-format +msgid "Chosen %s" +msgstr "Абралі %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Сьпіс абраных %s. Каб нешта прыбраць, пазначце патрэбнае ў полі ніжэй і " +"пстрыкніце па стрэлцы «Прыбраць» між двума палямі." + +msgid "Remove all" +msgstr "Прыбраць усё" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Каб прыбраць усе %s, пстрыкніце тут." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Абралі %(sel)s з %(cnt)s" +msgstr[1] "Абралі %(sel)s з %(cnt)s" +msgstr[2] "Абралі %(sel)s з %(cnt)s" +msgstr[3] "Абралі %(sel)s з %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"У пэўных палях засталіся незахаваныя зьмены. Калі выканаць дзеяньне, " +"незахаванае страціцца." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Абралі дзеяньне, але не захавалі зьмены ў пэўных палях. Каб захаваць, " +"націсьніце «Добра». Дзеяньне потым трэба будзе запусьціць нанова." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Абралі дзеяньне, а ў палях нічога не зьмянялі. Мажліва, вы хацелі націснуць " +"кнопку «Выканаць», а ня кнопку «Захаваць»." + +msgid "Now" +msgstr "Цяпер" + +msgid "Midnight" +msgstr "Поўнач" + +msgid "6 a.m." +msgstr "6 папоўначы" + +msgid "Noon" +msgstr "Поўдзень" + +msgid "6 p.m." +msgstr "6 папаўдні" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Заўвага: Ваш час спяшаецца на %s г адносна часу на серверы." +msgstr[1] "Заўвага: Ваш час спяшаецца на %s г адносна часу на серверы." +msgstr[2] "Заўвага: Ваш час спяшаецца на %s г адносна часу на серверы." +msgstr[3] "Заўвага: Ваш час спяшаецца на %s г адносна часу на серверы." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Заўвага: Ваш час адстае на %s г ад часу на серверы." +msgstr[1] "Заўвага: Ваш час адстае на %s г ад часу на серверы." +msgstr[2] "Заўвага: Ваш час адстае на %s г ад часу на серверы." +msgstr[3] "Заўвага: Ваш час адстае на %s г ад часу на серверы." + +msgid "Choose a Time" +msgstr "Абярыце час" + +msgid "Choose a time" +msgstr "Абярыце час" + +msgid "Cancel" +msgstr "Скасаваць" + +msgid "Today" +msgstr "Сёньня" + +msgid "Choose a Date" +msgstr "Абярыце дату" + +msgid "Yesterday" +msgstr "Учора" + +msgid "Tomorrow" +msgstr "Заўтра" + +msgid "January" +msgstr "Студзень" + +msgid "February" +msgstr "Люты" + +msgid "March" +msgstr "Сакавік" + +msgid "April" +msgstr "Красавік" + +msgid "May" +msgstr "Травень" + +msgid "June" +msgstr "Чэрвень" + +msgid "July" +msgstr "Ліпень" + +msgid "August" +msgstr "Жнівень" + +msgid "September" +msgstr "Верасень" + +msgid "October" +msgstr "Кастрычнік" + +msgid "November" +msgstr "Лістапад" + +msgid "December" +msgstr "Снежань" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Сту" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Лют" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Сак" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Кра" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Чэр" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Ліп" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Жні" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Вер" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Кас" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Ліс" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Сне" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "А" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Паказаць" + +msgid "Hide" +msgstr "Схаваць" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..340a88042e58c499d630f9a104adc40739575261 GIT binary patch literal 21397 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, 2022 +# Boris Chervenkov , 2012 +# Claude Paroz , 2014 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2020 +# Todor Lubenov , 2014-2015 +# Venelin Stoykov , 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-14 09:41+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Изтриване на избраните %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно изтрити %(count)d %(items)s ." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не можете да изтриете %(name)s" + +msgid "Are you sure?" +msgstr "Сигурни ли сте?" + +msgid "Administration" +msgstr "Администрация" + +msgid "All" +msgstr "Всички" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Any date" +msgstr "Коя-да-е дата" + +msgid "Today" +msgstr "Днес" + +msgid "Past 7 days" +msgstr "Последните 7 дни" + +msgid "This month" +msgstr "Този месец" + +msgid "This year" +msgstr "Тази година" + +msgid "No date" +msgstr "Няма дата" + +msgid "Has date" +msgstr "Има дата" + +msgid "Empty" +msgstr "Празно" + +msgid "Not empty" +msgstr "Не е празно" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Моля въведете правилния %(username)s и парола за администраторски акаунт. " +"Моля забележете, че и двете полета могат да са с главни и малки букви." + +msgid "Action:" +msgstr "Действие:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Добави друг %(verbose_name)s" + +msgid "Remove" +msgstr "Премахване" + +msgid "Addition" +msgstr "Добавка" + +msgid "Change" +msgstr "Промени" + +msgid "Deletion" +msgstr "Изтриване" + +msgid "action time" +msgstr "време на действие" + +msgid "user" +msgstr "потребител" + +msgid "content type" +msgstr "тип на съдържанието" + +msgid "object id" +msgstr "id на обекта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr на обекта" + +msgid "action flag" +msgstr "флаг за действие" + +msgid "change message" +msgstr "промени съобщение" + +msgid "log entry" +msgstr "записка в журнала" + +msgid "log entries" +msgstr "записки в журнала" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Добавен “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Променени “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Изтрити “%(object)s.”" + +msgid "LogEntry Object" +msgstr "LogEntry обект" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Добавен {name} “{object}”." + +msgid "Added." +msgstr "Добавено." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Променени {fields} за {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Променени {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Изтрит {name} “{object}”." + +msgid "No fields changed." +msgstr "Няма променени полета." + +msgid "None" +msgstr "Празно" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Задръжте “Control”, или “Command” на Mac, за да изберете повече от едно." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Обектът {name} “{obj}” бе успешно добавен." + +msgid "You may edit it again below." +msgstr "Можете отново да го промените по-долу." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Обектът {name} “{obj}” бе успешно добавен. Можете да добавите друг {name} по-" +"долу." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Обектът {name} “{obj}” бе успешно променен. Можете да го промените отново по-" +"долу." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Обектът {name} “{obj}” бе успешно добавен. Можете да го промените отново по-" +"долу." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Обектът {name} “{obj}” бе успешно променен. Можете да добавите друг {name} " +"по-долу." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Обектът {name} “{obj}” бе успешно променен." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Елементите трябва да бъдат избрани, за да се извършат действия по тях. Няма " +"променени елементи." + +msgid "No action selected." +msgstr "Няма избрано действие." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” беше успешно изтрит." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s с ID “%(key)s” не съществува. Може би е изтрит?" + +#, python-format +msgid "Add %s" +msgstr "Добави %s" + +#, python-format +msgid "Change %s" +msgstr "Промени %s" + +#, python-format +msgid "View %s" +msgstr "Изглед %s" + +msgid "Database error" +msgstr "Грешка в базата данни" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s беше променено успешно." +msgstr[1] "%(count)s %(name)s бяха успешно променени." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s е избран" +msgstr[1] "Избрани са всички %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Избрани са 0 от %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "История на промените: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Изтриването на избраните %(class_name)s %(instance)s ще наложи изтриването " +"на следните защитени и свързани обекти: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django административен сайт" + +msgid "Django administration" +msgstr "Администрация на Django" + +msgid "Site administration" +msgstr "Администрация на сайта" + +msgid "Log in" +msgstr "Вход" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s администрация" + +msgid "Page not found" +msgstr "Страница не е намерена" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Съжаляваме, но поисканата страница не може да бъде намерена." + +msgid "Home" +msgstr "Начало" + +msgid "Server error" +msgstr "Сървърна грешка" + +msgid "Server error (500)" +msgstr "Сървърна грешка (500)" + +msgid "Server Error (500)" +msgstr "Сървърна грешка (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Получи се грешка. Администраторите на сайта са уведомени за това чрез " +"електронна поща и грешката трябва да бъде поправена скоро. Благодарим ви за " +"търпението." + +msgid "Run the selected action" +msgstr "Изпълни избраното действие" + +msgid "Go" +msgstr "Напред" + +msgid "Click here to select the objects across all pages" +msgstr "Щракнете тук, за да изберете обектите във всички страници" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Избери всички %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Изчисти избраното" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Модели в приложението %(name)s " + +msgid "Add" +msgstr "Добави" + +msgid "View" +msgstr "Изглед" + +msgid "You don’t have permission to view or edit anything." +msgstr "Нямате права да разглеждате или редактирате каквото и да е." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Първо въведете потребител и парола. След това ще можете да редактирате " +"повече детайли. " + +msgid "Enter a username and password." +msgstr "Въведете потребителско име и парола." + +msgid "Change password" +msgstr "Промени парола" + +msgid "Please correct the error below." +msgstr "Моля, поправете грешката по-долу" + +msgid "Please correct the errors below." +msgstr "Моля поправете грешките по-долу." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Въведете нова парола за потребител %(username)s." + +msgid "Welcome," +msgstr "Добре дошли," + +msgid "View site" +msgstr "Виж сайта" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Изход" + +#, python-format +msgid "Add %(name)s" +msgstr "Добави %(name)s" + +msgid "History" +msgstr "История" + +msgid "View on site" +msgstr "Разгледай в сайта" + +msgid "Filter" +msgstr "Филтър" + +msgid "Clear all filters" +msgstr "Изчисти всички филтри" + +msgid "Remove from sorting" +msgstr "Премахни от подреждането" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ред на подреждане: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Превключи подреждането" + +msgid "Delete" +msgstr "Изтрий" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Изтриването на %(object_name)s '%(escaped_object)s' би причинило изтриване " +"на свързани обекти, но вашият потребител няма право да изтрива следните " +"видове обекти:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Изтриването на %(object_name)s '%(escaped_object)s' изисква изтриването на " +"следните защитени свързани обекти:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Наистина ли искате да изтриете %(object_name)s \"%(escaped_object)s\"? " +"Следните свързани елементи също ще бъдат изтрити:" + +msgid "Objects" +msgstr "Обекти" + +msgid "Yes, I’m sure" +msgstr "Да, сигурен съм" + +msgid "No, take me back" +msgstr "Не, върни ме обратно" + +msgid "Delete multiple objects" +msgstr "Изтриване на множество обекти" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Изтриването на избраните %(objects_name)s ще доведе до изтриване на свързани " +"обекти, но вашият потребител няма право да изтрива следните типове обекти:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Изтриването на избраните %(objects_name)s изисква изтриването на следните " +"защитени свързани обекти:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Наистина ли искате да изтриете избраните %(objects_name)s? Всички изброени " +"обекти и свързаните с тях ще бъдат изтрити:" + +msgid "Delete?" +msgstr "Изтриване?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " По %(filter_title)s " + +msgid "Summary" +msgstr "Резюме" + +msgid "Recent actions" +msgstr "Последни действия" + +msgid "My actions" +msgstr "Моите действия" + +msgid "None available" +msgstr "Няма налични" + +msgid "Unknown content" +msgstr "Неизвестно съдържание" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Проблем с вашата база данни. Убедете се, че необходимите таблици в базата са " +"създадени и че съответния потребител има необходимите права за достъп. " + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Вие сте се удостоверен като %(username)s, но не сте оторизиран да достъпите " +"тази страница. Бихте ли желали да влезе с друг профил?" + +msgid "Forgotten your password or username?" +msgstr "Забравена парола или потребителско име?" + +msgid "Toggle navigation" +msgstr "Превключи навигацията" + +msgid "Start typing to filter…" +msgstr "Започнете да пишете за филтър..." + +msgid "Filter navigation items" +msgstr "Филтриране на навигационните елементи" + +msgid "Date/time" +msgstr "Дата/час" + +msgid "User" +msgstr "Потребител" + +msgid "Action" +msgstr "Действие" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Този обект няма история на промените. Вероятно не е бил добавен чрез този " +"административен сайт." + +msgid "Show all" +msgstr "Покажи всички" + +msgid "Save" +msgstr "Запис" + +msgid "Popup closing…" +msgstr "Изскачащият прозорец се затваря..." + +msgid "Search" +msgstr "Търсене" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s резултат" +msgstr[1] "%(counter)s резултати" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s общо" + +msgid "Save as new" +msgstr "Запиши като нов" + +msgid "Save and add another" +msgstr "Запиши и добави нов" + +msgid "Save and continue editing" +msgstr "Запиши и продължи" + +msgid "Save and view" +msgstr "Запиши и прегледай" + +msgid "Close" +msgstr "Затвори" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Променете избрания %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Добавяне на друг %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Изтриване на избрания %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Благодарим ви за добре прекараното време с този сайт днес." + +msgid "Log in again" +msgstr "Влез пак" + +msgid "Password change" +msgstr "Промяна на парола" + +msgid "Your password was changed." +msgstr "Паролата ви е променена." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Въведете старата си парола /от съображения за сигурност/. След това въведете " +"желаната нова парола два пъти, за да сверим дали е написана правилно." + +msgid "Change my password" +msgstr "Промяна на паролата ми" + +msgid "Password reset" +msgstr "Нова парола" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Паролата е променена. Вече можете да се впишете." + +msgid "Password reset confirmation" +msgstr "Потвърждение за смяна на паролата" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Моля, въведете новата парола два пъти, за да се уверим, че сте я написали " +"правилно." + +msgid "New password:" +msgstr "Нова парола:" + +msgid "Confirm password:" +msgstr "Потвърдете паролата:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Връзката за възстановяване на паролата е невалидна, може би защото вече е " +"използвана. Моля, поискайте нова промяна на паролата." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"По имейл изпратихме инструкции за смяна на паролата, ако съществува профил с " +"въведения от вас адрес. Би трябвало скоро да ги получите. " + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ако не получите имейл, моля уверете се, че сте попълнили правилно адреса, с " +"който сте се регистрирали, също проверете спам папката във вашата поща." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Вие получавати този имейл, защото сте поискали да промените паролата за " +"вашия потребителски акаунт в %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Моля, отидете на следната страница и изберете нова парола:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Вашето потребителско име, в случай че сте го забравили:" + +msgid "Thanks for using our site!" +msgstr "Благодарим, че ползвате сайта ни!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Екипът на %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Забравили сте си паролата? Въведете своя имейл адрес по-долу, и ние ще ви " +"изпратим инструкции как да я смените с нова." + +msgid "Email address:" +msgstr "Имейл адреси:" + +msgid "Reset my password" +msgstr "Задай новата ми парола" + +msgid "All dates" +msgstr "Всички дати" + +#, python-format +msgid "Select %s" +msgstr "Изберете %s" + +#, python-format +msgid "Select %s to change" +msgstr "Изберете %s за промяна" + +#, python-format +msgid "Select %s to view" +msgstr "Избери %s за преглед" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Час:" + +msgid "Lookup" +msgstr "Търсене" + +msgid "Currently:" +msgstr "Сега:" + +msgid "Change:" +msgstr "Промяна:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a8686389307e9b1aa903f6000c309d4843a0dff GIT binary patch literal 6230 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, 2022 +# Jannis Leidel , 2011 +# Venelin Stoykov , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2022-01-14 09:49+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Налични %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Това е списък на наличните %s . Можете да изберете някои, като ги изберете в " +"полето по-долу и след това кликнете върху стрелката \"Избери\" между двете " +"полета." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Въведете в това поле, за да филтрирате списъка на наличните %s." + +msgid "Filter" +msgstr "Филтър" + +msgid "Choose all" +msgstr "Избери всички" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Кликнете, за да изберете всички %s наведнъж." + +msgid "Choose" +msgstr "Избери" + +msgid "Remove" +msgstr "Премахни" + +#, javascript-format +msgid "Chosen %s" +msgstr "Избрахме %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Това е списък на избраните %s. Можете да премахнете някои, като ги изберете " +"в полето по-долу и след това щракнете върху стрелката \"Премахни\" между " +"двете полета." + +msgid "Remove all" +msgstr "Премахване на всички" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Кликнете, за да премахнете всички избрани %s наведнъж." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s на %(cnt)s е избран" +msgstr[1] "%(sel)s на %(cnt)s са избрани" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Имате незапазени промени по отделни полета за редактиране. Ако изпълните " +"действие, незаписаните промени ще бъдат загубени." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Вие сте избрали действие, но не сте записали промените по полета. Моля, " +"кликнете ОК, за да се запишат. Трябва отново да изпълните действието." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Вие сте избрали действие, но не сте направили промени по полетата. Вероятно " +"търсите Изпълни бутона, а не бутона Запис." + +msgid "Now" +msgstr "Сега" + +msgid "Midnight" +msgstr "Полунощ" + +msgid "6 a.m." +msgstr "6 сутринта" + +msgid "Noon" +msgstr "По обяд" + +msgid "6 p.m." +msgstr "6 след обяд" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Бележка: Вие сте %s час напред от времето на сървъра." +msgstr[1] "Бележка: Вие сте с %s часа напред от времето на сървъра" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Внимание: Вие сте %s час назад от времето на сървъра." +msgstr[1] "Внимание: Вие сте с %s часа назад от времето на сървъра." + +msgid "Choose a Time" +msgstr "Изберете време" + +msgid "Choose a time" +msgstr "Изберете време" + +msgid "Cancel" +msgstr "Отказ" + +msgid "Today" +msgstr "Днес" + +msgid "Choose a Date" +msgstr "Изберете дата" + +msgid "Yesterday" +msgstr "Вчера" + +msgid "Tomorrow" +msgstr "Утре" + +msgid "January" +msgstr "Януари" + +msgid "February" +msgstr "Февруари" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Юни" + +msgid "July" +msgstr "Юли" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Септември" + +msgid "October" +msgstr "Октомври" + +msgid "November" +msgstr "Ноември" + +msgid "December" +msgstr "Декември" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "ян." + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "февр." + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "март" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "апр." + +msgctxt "abbrev. month May" +msgid "May" +msgstr "май" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "юни" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "юли" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "авг." + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "септ." + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "окт." + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "ноем." + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "дек." + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Покажи" + +msgid "Hide" +msgstr "Скрий" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ab1d7ee1b792a7cc7e35860388367c6cfb5ecf9c GIT binary patch literal 15247 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..e36fb6167 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,652 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Anubhab Baksi, 2013 +# Jannis Leidel , 2011 +# Tahmid Rafi , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d টি %(items)s সফলভাবে মুছে ফেলা হয়েছে" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ডিলিট করা সম্ভব নয়" + +msgid "Are you sure?" +msgstr "আপনি কি নিশ্চিত?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "চিহ্নিত অংশটি %(verbose_name_plural)s মুছে ফেলুন" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "সকল" + +msgid "Yes" +msgstr "হ্যাঁ" + +msgid "No" +msgstr "না" + +msgid "Unknown" +msgstr "অজানা" + +msgid "Any date" +msgstr "যে কোন তারিখ" + +msgid "Today" +msgstr "‍আজ" + +msgid "Past 7 days" +msgstr "শেষ ৭ দিন" + +msgid "This month" +msgstr "এ মাসে" + +msgid "This year" +msgstr "এ বছরে" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "কাজ:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "আরো একটি %(verbose_name)s যোগ করুন" + +msgid "Remove" +msgstr "মুছে ফেলুন" + +msgid "action time" +msgstr "কার্য সময়" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "অবজেক্ট আইডি" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "অবজেক্ট উপস্থাপক" + +msgid "action flag" +msgstr "কার্যচিহ্ন" + +msgid "change message" +msgstr "বার্তা পরিবর্তন করুন" + +msgid "log entry" +msgstr "লগ এন্ট্রি" + +msgid "log entries" +msgstr "লগ এন্ট্রিসমূহ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "%(object)s অ্যাড করা হয়েছে" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" ডিলিট করা হয়েছে" + +msgid "LogEntry Object" +msgstr "লগ-এন্ট্রি দ্রব্য" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "এবং" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "কোন ফিল্ড পরিবর্তন হয়নি।" + +msgid "None" +msgstr "কিছু না" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "কাজ করার আগে বস্তুগুলিকে অবশ্যই চিহ্নিত করতে হবে। কোনো বস্তু পরিবর্তিত হয়নি।" + +msgid "No action selected." +msgstr "কোনো কাজ " + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" সফলতার সাথে মুছে ফেলা হয়েছে।" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s যোগ করুন" + +#, python-format +msgid "Change %s" +msgstr "%s পরিবর্তন করুন" + +msgid "Database error" +msgstr "ডাটাবেস সমস্যা" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s টি থেকে ০ টি সিলেক্ট করা হয়েছে" + +#, python-format +msgid "Change history: %s" +msgstr "ইতিহাস পরিবর্তনঃ %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "জ্যাঙ্গো সাইট প্রশাসক" + +msgid "Django administration" +msgstr "জ্যাঙ্গো প্রশাসন" + +msgid "Site administration" +msgstr "সাইট প্রশাসন" + +msgid "Log in" +msgstr "প্রবেশ করুন" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "পৃষ্ঠা পাওয়া যায়নি" + +msgid "We're sorry, but the requested page could not be found." +msgstr "দুঃখিত, অনুরোধকৃত পাতাটি পাওয়া যায়নি।" + +msgid "Home" +msgstr "নীড়পাতা" + +msgid "Server error" +msgstr "সার্ভার সমস্যা" + +msgid "Server error (500)" +msgstr "সার্ভার সমস্যা (৫০০)" + +msgid "Server Error (500)" +msgstr "সার্ভার সমস্যা (৫০০)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "চিহ্নিত কাজটি শুরু করুন" + +msgid "Go" +msgstr "যান" + +msgid "Click here to select the objects across all pages" +msgstr "সকল পৃষ্ঠার দ্রব্য পছন্দ করতে এখানে ক্লিক করুন" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s টি %(module_name)s এর সবগুলোই সিলেক্ট করুন" + +msgid "Clear selection" +msgstr "চিহ্নিত অংশের চিহ্ন মুছে ফেলুন" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"প্রথমে একটি সদস্যনাম ও পাসওয়ার্ড প্রবেশ করান। তারপরে আপনি ‍আরও সদস্য-অপশন যুক্ত করতে " +"পারবেন।" + +msgid "Enter a username and password." +msgstr "ইউজার নেইম এবং পাসওয়ার্ড টাইপ করুন।" + +msgid "Change password" +msgstr "পাসওয়ার্ড বদলান" + +msgid "Please correct the error below." +msgstr "অনুগ্রহ করে নিচের ভুলগুলো সংশোধন করুন।" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s সদস্যের জন্য নতুন পাসওয়ার্ড দিন।" + +msgid "Welcome," +msgstr "স্বাগতম," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "সহায়িকা" + +msgid "Log out" +msgstr "প্রস্থান" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s যোগ করুন" + +msgid "History" +msgstr "ইতিহাস" + +msgid "View on site" +msgstr "সাইটে দেখুন" + +msgid "Filter" +msgstr "ফিল্টার" + +msgid "Remove from sorting" +msgstr "ক্রমানুসারে সাজানো থেকে বিরত হোন" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "সাজানোর ক্রম: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "ক্রমানুসারে সাজানো চালু করুন/ বন্ধ করুন" + +msgid "Delete" +msgstr "মুছুন" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' মুছে ফেললে এর সম্পর্কিত অবজেক্টগুলোও মুছে " +"যাবে, কিন্তু আপনার নিম্নবর্ণিত অবজেক্টগুলো মোছার অধিকার নেইঃ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"আপনি কি %(object_name)s \"%(escaped_object)s\" মুছে ফেলার ব্যাপারে নিশ্চিত? " +"নিম্নে বর্ণিত সকল আইটেম মুছে যাবেঃ" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "হ্যা়ঁ, আমি নিশ্চিত" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "একাধিক জিনিস মুছে ফেলুন" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "পরিবর্তন" + +msgid "Delete?" +msgstr "মুছে ফেলুন?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s অনুযায়ী " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s এপ্লিকেশন এর মডেল গুলো" + +msgid "Add" +msgstr "যোগ করুন" + +msgid "You don't have permission to edit anything." +msgstr "কোন কিছু পরিবর্তনে আপনার অধিকার নেই।" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "কিছুই পাওয়া যায়নি" + +msgid "Unknown content" +msgstr "অজানা বিষয়" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"আপনার ডাটাবেস ইনস্টলে সমস্যা হয়েছে। নিশ্চিত করুন যে, ডাটাবেস টেবিলগুলো সঠিকভাবে " +"তৈরী হয়েছে, এবং যথাযথ সদস্যের ডাটাবেস পড়ার অধিকার রয়েছে।" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "ইউজার নেইম অথবা পাসওয়ার্ড ভুলে গেছেন?" + +msgid "Date/time" +msgstr "তারিখ/সময়" + +msgid "User" +msgstr "সদস্য" + +msgid "Action" +msgstr "কার্য" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "এই অবজেক্টের কোন ইতিহাস নেই। সম্ভবত এটি প্রশাসন সাইট দিয়ে তৈরী করা হয়নি।" + +msgid "Show all" +msgstr "সব দেখান" + +msgid "Save" +msgstr "সংরক্ষণ করুন" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "সার্চ" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "মোট %(full_result_count)s" + +msgid "Save as new" +msgstr "নতুনভাবে সংরক্ষণ করুন" + +msgid "Save and add another" +msgstr "সংরক্ষণ করুন এবং আরেকটি যোগ করুন" + +msgid "Save and continue editing" +msgstr "সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ওয়েবসাইটে কিছু সময় কাটানোর জন্য আপনাকে আন্তরিক ধন্যবাদ।" + +msgid "Log in again" +msgstr "পুনরায় প্রবেশ করুন" + +msgid "Password change" +msgstr "পাসওয়ার্ড বদলান" + +msgid "Your password was changed." +msgstr "আপনার পাসওয়ার্ড বদলানো হয়েছে।" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"অনুগ্রহ করে আপনার পুরনো পাসওয়ার্ড প্রবেশ করান, নিরাপত্তার কাতিরে, এবং পরপর দু’বার " +"নতুন পাসওয়ার্ড প্রবেশ করান, যাচাই করার জন্য।" + +msgid "Change my password" +msgstr "আমার পাসওয়ার্ড পরিবর্তন করুন" + +msgid "Password reset" +msgstr "পাসওয়ার্ড রিসেট করুন" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "আপনার পাসওয়ার্ড দেয়া হয়েছে। আপনি এখন প্রবেশ (লগইন) করতে পারেন।" + +msgid "Password reset confirmation" +msgstr "পাসওয়ার্ড রিসেট নিশ্চিত করুন" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"অনুগ্রহ করে আপনার পাসওয়ার্ড দুবার প্রবেশ করান, যাতে আমরা যাচাই করতে পারি আপনি " +"সঠিকভাবে টাইপ করেছেন।" + +msgid "New password:" +msgstr "নতুন পাসওয়ার্ডঃ" + +msgid "Confirm password:" +msgstr "পাসওয়ার্ড নিশ্চিতকরণঃ" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"পাসওয়ার্ড রিসেট লিঙ্কটি ঠিক নয়, হয়তো এটা ইতোমধ্যে ব্যবহৃত হয়েছে। পাসওয়ার্ড " +"রিসেটের জন্য অনুগ্রহ করে নতুনভাবে আবেদন করুন।" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"আপনি এই ই-মেইলটি পেয়েছেন কারন আপনি %(site_name)s এ আপনার ইউজার একাউন্টের " +"পাসওয়ার্ড রিসেট এর জন্য অনুরোধ করেছেন।" + +msgid "Please go to the following page and choose a new password:" +msgstr "অনুগ্রহ করে নিচের পাতাটিতে যান এবং নতুন পাসওয়ার্ড বাছাই করুনঃ" + +msgid "Your username, in case you've forgotten:" +msgstr "আপনার সদস্যনাম, যদি ভুলে গিয়ে থাকেনঃ" + +msgid "Thanks for using our site!" +msgstr "আমাদের সাইট ব্যবহারের জন্য ধন্যবাদ!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s দল" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"পাসওয়ার্ড ভুলে গেছেন? নিচে আপনার ইমেইল এড্রেস দিন, এবং আমরা নতুন পাসওয়ার্ড সেট " +"করার নিয়ম-কানুন আপনাকে ই-মেইল করব।" + +msgid "Email address:" +msgstr "ইমেইল ঠিকানা:" + +msgid "Reset my password" +msgstr "আমার পাসওয়ার্ড রিসেট করুন" + +msgid "All dates" +msgstr "সকল তারিখ" + +#, python-format +msgid "Select %s" +msgstr "%s বাছাই করুন" + +#, python-format +msgid "Select %s to change" +msgstr "%s পরিবর্তনের জন্য বাছাই করুন" + +msgid "Date:" +msgstr "তারিখঃ" + +msgid "Time:" +msgstr "সময়ঃ" + +msgid "Lookup" +msgstr "খুঁজুন" + +msgid "Currently:" +msgstr "বর্তমান অবস্থা:" + +msgid "Change:" +msgstr "পরিবর্তন:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..b3f7f973e1a33688eed57f0c33f699ad9564300a GIT binary patch literal 2313 zcmds$ON7`4Az=eOFJWPOT_3D$fUvq5MY`6{=e#;U1P?`&BRWsfBk*+y{r1C zUE7u!o+q%L#`+%X8Lap2!VAwY;Jx6l;7;(jOx}KXs^1Ad2>os_2krrPfCs_nz)6t& z&w$&&cfk9>S|* zhVfJ24j4ZS?gOd6!(aidfP2A3@F19gP4EZsanMI{@>>8&em9f*;2)4LWn8>3&Hp}% zq4*zx6!$tv{~*abUPk)-tnP6U zQEuMWy@-pp6b-JMJeE;kMlN%Hye+caxiPQFcAy$}6n4DnfK_Bi_hkm^l)c&316I`y zaS`v1jv|O>WsHtVwGioZvTnSS4eyMM;y^2(H_i#w(z%N4>d1KWaVuze$9k>Ut7@O; z7T&0Ovyl`Aw%%)k22?JVCcWZeuXKc$U+_!i1I2Q&2t%(T`vJw=vOD4xr@Yb>FHQP~ zN(YK~a;HUXylNy=915c&pPv#+1u;J@aUdao5!FC^C3IpwP)+?3d{nC^TGFdZ(ee2) zsahfo`2MyrUB6Hm3sThn|x`9i#A!e!%u9oW|Lbs`PO}}GF(Nc z`pzbaQ{A-5*Un;%@)vG@369Gy=!Z5T<8R1wxB~U6bNFkzD^QNHr`pnb z#>N~KhkF0EpWK2cdRVc;CE6S=F;~DE{aZHq)RmS-Mj2G<*fcbWb!=XxnrS#UAuPME z4cEi6lWB6)q`iKP+2n@X*>F}XZWQa#LWT(jf{-)~3~@Lb=(^LAFJ=rY90%Uyg{&Xj zWX0z;xkP$5ItZ90mF5C`m42sMny~Ac%DzHhPEOnY+yz7%RMut`RDv`#1Eio)k?cD8 zKWE2`-Oc!KdjGfVxS*GD49xv9xC?YFIG`J@==3UOzZCr, 2011 +# Tahmid Rafi , 2013 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s বিদ্যমান" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ফিল্টার" + +msgid "Choose all" +msgstr "সব বাছাই করুন" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "সব %s একবারে বাছাই করার জন্য ক্লিক করুন।" + +msgid "Choose" +msgstr "বাছাই করুন" + +msgid "Remove" +msgstr "মুছে ফেলুন" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s বাছাই করা হয়েছে" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "সব মুছে ফেলুন" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা সামনে আছেন।" +msgstr[1] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা সামনে আছেন।" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা পেছনে আছেন।" +msgstr[1] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা পেছনে আছেন।" + +msgid "Now" +msgstr "এখন" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "সময় নির্বাচন করুন" + +msgid "Midnight" +msgstr "মধ্যরাত" + +msgid "6 a.m." +msgstr "৬ পূর্বাহ্ন" + +msgid "Noon" +msgstr "দুপুর" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "বাতিল" + +msgid "Today" +msgstr "আজ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "গতকাল" + +msgid "Tomorrow" +msgstr "আগামীকাল" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "দেখান" + +msgid "Hide" +msgstr "লুকান" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..296f113a522fdf4cca94482910e053bd82d7767b GIT binary patch literal 6489 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..cbdc3593a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +# Irriep Nala Novram , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "Ha sur oc'h?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Dilemel %(verbose_name_plural)s diuzet" + +msgid "Administration" +msgstr "Melestradurezh" + +msgid "All" +msgstr "An holl" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Ket" + +msgid "Unknown" +msgstr "Dianav" + +msgid "Any date" +msgstr "Forzh pegoulz" + +msgid "Today" +msgstr "Hiziv" + +msgid "Past 7 days" +msgstr "Er 7 devezh diwezhañ" + +msgid "This month" +msgstr "Ar miz-mañ" + +msgid "This year" +msgstr "Ar bloaz-mañ" + +msgid "No date" +msgstr "Deiziad ebet" + +msgid "Has date" +msgstr "D'an deiziad" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Ober:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ouzhpennañ %(verbose_name)s all" + +msgid "Remove" +msgstr "Lemel kuit" + +msgid "Addition" +msgstr "Sammañ" + +msgid "Change" +msgstr "Cheñch" + +msgid "Deletion" +msgstr "Diverkadur" + +msgid "action time" +msgstr "eur an ober" + +msgid "user" +msgstr "implijer" + +msgid "content type" +msgstr "doare endalc'had" + +msgid "object id" +msgstr "id an objed" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "ober banniel" + +msgid "change message" +msgstr "Kemennadenn cheñchamant" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ouzhpennet \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cheñchet \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Dilamet \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Ouzhpennet {name} \"{object}\"." + +msgid "Added." +msgstr "Ouzhpennet." + +msgid "and" +msgstr "ha" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Cheñchet {fields} evit {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Cheñchet {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Dilamet {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Maezienn ebet cheñchet." + +msgid "None" +msgstr "Hini ebet" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Rankout a rit ec'h aozañ adarre dindan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "Ober ebet diuzet." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ouzhpennañ %s" + +#, python-format +msgid "Change %s" +msgstr "Cheñch %s" + +#, python-format +msgid "View %s" +msgstr "Gwelet %s" + +msgid "Database error" +msgstr "Fazi diaz-roadennoù" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s a zo bet cheñchet mat." +msgstr[1] "%(count)s %(name)s a zo bet cheñchet mat. " +msgstr[2] "%(count)s %(name)s a zo bet cheñchet mat. " +msgstr[3] "%(count)s %(name)s a zo bet cheñchet mat." +msgstr[4] "%(count)s %(name)s a zo bet cheñchet mat." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s diuzet" +msgstr[1] "%(total_count)s diuzet" +msgstr[2] "%(total_count)s diuzet" +msgstr[3] "%(total_count)s diuzet" +msgstr[4] "Pep %(total_count)s diuzet" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 diwar %(cnt)s diuzet" + +#, python-format +msgid "Change history: %s" +msgstr "Istor ar cheñchadurioù: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Lec'hienn verañ Django" + +msgid "Django administration" +msgstr "Merañ Django" + +msgid "Site administration" +msgstr "Merañ al lec'hienn" + +msgid "Log in" +msgstr "Kevreañ" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "N'eo ket bet kavet ar bajenn" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Degemer" + +msgid "Server error" +msgstr "Fazi servijer" + +msgid "Server error (500)" +msgstr "Fazi servijer (500)" + +msgid "Server Error (500)" +msgstr "Fazi servijer (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "Mont" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "Riñsañ an diuzadenn" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Merkit un anv implijer hag ur ger-tremen." + +msgid "Change password" +msgstr "Cheñch ger-tremen" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Degemer mat," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Teulioù" + +msgid "Log out" +msgstr "Digevreañ" + +#, python-format +msgid "Add %(name)s" +msgstr "Ouzhpennañ %(name)s" + +msgid "History" +msgstr "Istor" + +msgid "View on site" +msgstr "Gwelet war al lec'hienn" + +msgid "Filter" +msgstr "Sil" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "Eilpennañ an diuzadenn" + +msgid "Delete" +msgstr "Diverkañ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Ya, sur on" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Diverkañ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " dre %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Ouzhpennañ" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "Endalc'had dianav" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Disoñjet ho ker-tremen pe hoc'h anv implijer ganeoc'h ?" + +msgid "Date/time" +msgstr "Deiziad/eur" + +msgid "User" +msgstr "Implijer" + +msgid "Action" +msgstr "Ober" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Diskouez pep tra" + +msgid "Save" +msgstr "Enrollañ" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Klask" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "Enrollañ evel nevez" + +msgid "Save and add another" +msgstr "Enrollañ hag ouzhpennañ unan all" + +msgid "Save and continue editing" +msgstr "Enrollañ ha derc'hel da gemmañ" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "Kevreañ en-dro" + +msgid "Password change" +msgstr "Cheñch ho ker-tremen" + +msgid "Your password was changed." +msgstr "Cheñchet eo bet ho ker-tremen." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Cheñch ma ger-tremen" + +msgid "Password reset" +msgstr "Adderaouekaat ar ger-tremen" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "Kadarnaat eo bet cheñchet ar ger-tremen" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "Ger-tremen nevez :" + +msgid "Confirm password:" +msgstr "Kadarnaat ar ger-tremen :" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Ho trugarekaat da ober gant hol lec'hienn !" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "An holl zeiziadoù" + +#, python-format +msgid "Select %s" +msgstr "Diuzañ %s" + +#, python-format +msgid "Select %s to change" +msgstr "" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Deiziad :" + +msgid "Time:" +msgstr "Eur :" + +msgid "Lookup" +msgstr "Klask" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..58664d0728fe6a5f19c156c0cf1cdb38ac2d07c1 GIT binary patch literal 1658 zcmZ9LzjGT!6vr152#B8vq+litk0QnN=9XyT#1KmnmOB=6tHG3;7 z)}(@hA{ER~LP14AlL}@i;qPEb$3H-qg6}(@BS$;)_Oox_d*6F|cl-CH^FIiT%dji3 zzhLje%yXD9{sCVEAA_%g{}%p#1)qSgVgKCoLX^OZ;LG3@@I7z_oB=mM*6D-i!2rGl z9vA-C;5qo;f}HmdWWDc;_>bTV@P7um?iY}s^9cMM_6IE2MH25HgBQSWK(2d;iTnQ! zPgzBHbHr@r8`RO>Wt|+fCPz$C&%hd$?b! z3>v((=iNQk4$-Yn^ttkxb~dHXJ!!kHw66xvhiEtJ>P~cH*v+D*OR2Q?Su<*QB?EG! z4H;BQ^Kr5g#Y<6Ar6ft0;%o7I93wH>S4WyPCwbK6q4XvRYxF4C^Eo*z=uA|0whq9}prjq@XZg>@(rP*ExgS1i^jYj3b zg8D$+FSlL4a&n|on4-GU@|C&L?ycRMlfx(FxYTeqD2t|!2RL0&_d{i1q_(U0bkb)k z)bBPoqm@Y>KkGpG=%#JEj<(&DR$4kd?J}j7FYTG3mnPbDzMrLJ2f3TomsaUyS)ZM? zSCg3PbxP)FW`=S%ruX4bZB(cH8vJ#NDSfIiKdmseQJwN@@YgAsC@j!}2gLo<>x+|R z?X2t?q1!wQim%`n^z9FNPL6wGLt!QU2P-6dssI20 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..3f8195616 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po @@ -0,0 +1,217 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Hegerz %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Sil" + +msgid "Choose all" +msgstr "Dibab an holl" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikañ evit dibab an holl %s war un dro." + +msgid "Choose" +msgstr "Dibab" + +msgid "Remove" +msgstr "Lemel kuit" + +#, javascript-format +msgid "Chosen %s" +msgstr "Dibabet %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "Lemel kuit pep tra" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikañ evit dilemel an holl %s dibabet war un dro." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "Bremañ" + +msgid "Midnight" +msgstr "Hanternoz" + +msgid "6 a.m." +msgstr "6e00" + +msgid "Noon" +msgstr "Kreisteiz" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Dibab un eur" + +msgid "Cancel" +msgstr "Nullañ" + +msgid "Today" +msgstr "Hiziv" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Dec'h" + +msgid "Tomorrow" +msgstr "Warc'hoazh" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Diskouez" + +msgid "Hide" +msgstr "Kuzhat" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f920c9bbcaae13a4185937772d1e831d41236c16 GIT binary patch literal 8845 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 E0AsPq=>Px# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..1d7eb6e64 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,657 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Dupanović , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspješno izbrisano %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "Da li ste sigurni?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Izbriši odabrane %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Svi" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Any date" +msgstr "Svi datumi" + +msgid "Today" +msgstr "Danas" + +msgid "Past 7 days" +msgstr "Poslednjih 7 dana" + +msgid "This month" +msgstr "Ovaj mesec" + +msgid "This year" +msgstr "Ova godina" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Radnja:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj još jedan %(verbose_name)s" + +msgid "Remove" +msgstr "Obriši" + +msgid "action time" +msgstr "vrijeme radnje" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr objekta" + +msgid "action flag" +msgstr "oznaka radnje" + +msgid "change message" +msgstr "opis izmjene" + +msgid "log entry" +msgstr "zapis u logovima" + +msgid "log entries" +msgstr "zapisi u logovima" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nije bilo izmjena polja." + +msgid "None" +msgstr "Nijedan" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Predmeti moraju biti izabrani da bi se mogla obaviti akcija nad njima. " +"Nijedan predmet nije bio izmjenjen." + +msgid "No action selected." +msgstr "Nijedna akcija nije izabrana." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Objekat „%(obj)s“ klase %(name)s obrisan je uspješno." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Dodaj objekat klase %s" + +#, python-format +msgid "Change %s" +msgstr "Izmjeni objekat klase %s" + +msgid "Database error" +msgstr "Greška u bazi podataka" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s izabrani" + +#, python-format +msgid "Change history: %s" +msgstr "Historijat izmjena: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django administracija sajta" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija sistema" + +msgid "Log in" +msgstr "Prijava" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Stranica nije pronađena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Žao nam je, tražena stranica nije pronađena." + +msgid "Home" +msgstr "Početna" + +msgid "Server error" +msgstr "Greška na serveru" + +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +msgid "Server Error (500)" +msgstr "Greška na serveru (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Pokreni odabranu radnju" + +msgid "Go" +msgstr "Počni" + +msgid "Click here to select the objects across all pages" +msgstr "Kliknite ovdje da izaberete objekte preko svih stranica" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izaberite svih %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Izbrišite izbor" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Prvo unesite korisničko ime i lozinku. Potom ćete moći da mijenjate još " +"korisničkih podešavanja." + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "Promjena lozinke" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Unesite novu lozinku za korisnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj objekat klase %(name)s" + +msgid "History" +msgstr "Historijat" + +msgid "View on site" +msgstr "Pregled na sajtu" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih " +"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za " +"brisanje slijedećih tipova objekata:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Da li ste sigurni da želite da obrišete %(object_name)s " +"„%(escaped_object)s“? Slijedeći objekti koji su u vezi sa ovim objektom će " +"također biti obrisani:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Da, siguran sam" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Brisanje više objekata" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "Izmjeni" + +msgid "Delete?" +msgstr "Brisanje?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Dodaj" + +msgid "You don't have permission to edit anything." +msgstr "Nemate dozvole da unosite bilo kakve izmjene." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nema podataka" + +msgid "Unknown content" +msgstr "Nepoznat sadržaj" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nešto nije uredu sa vašom bazom podataka. Provjerite da li postoje " +"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Datum/vrijeme" + +msgid "User" +msgstr "Korisnik" + +msgid "Action" +msgstr "Radnja" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ovaj objekat nema zabilježen historijat izmjena. Vjerovatno nije dodan kroz " +"ovaj sajt za administraciju." + +msgid "Show all" +msgstr "Prikaži sve" + +msgid "Save" +msgstr "Sačuvaj" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Pretraga" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ukupno %(full_result_count)s" + +msgid "Save as new" +msgstr "Sačuvaj kao novi" + +msgid "Save and add another" +msgstr "Sačuvaj i dodaj slijedeći" + +msgid "Save and continue editing" +msgstr "Sačuvaj i nastavi sa izmjenama" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala što ste danas proveli vrijeme na ovom sajtu." + +msgid "Log in again" +msgstr "Ponovna prijava" + +msgid "Password change" +msgstr "Izmjena lozinke" + +msgid "Your password was changed." +msgstr "Vaša lozinka je izmjenjena." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Iz bezbjednosnih razloga prvo unesite svoju staru lozinku, a novu zatim " +"unesite dva puta da bismo mogli da provjerimo da li ste je pravilno unijeli." + +msgid "Change my password" +msgstr "Izmijeni moju lozinku" + +msgid "Password reset" +msgstr "Resetovanje lozinke" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaša lozinka je postavljena. Možete se prijaviti." + +msgid "Password reset confirmation" +msgstr "Potvrda resetovanja lozinke" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Unesite novu lozinku dva puta kako bismo mogli da provjerimo da li ste je " +"pravilno unijeli." + +msgid "New password:" +msgstr "Nova lozinka:" + +msgid "Confirm password:" +msgstr "Potvrda lozinke:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link za resetovanje lozinke nije važeći, vjerovatno zato što je već " +"iskorišćen. Ponovo zatražite resetovanje lozinke." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Idite na slijedeću stranicu i postavite novu lozinku." + +msgid "Your username, in case you've forgotten:" +msgstr "Ukoliko ste zaboravili, vaše korisničko ime:" + +msgid "Thanks for using our site!" +msgstr "Hvala što koristite naš sajt!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Uredništvo sajta %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Resetuj moju lozinku" + +msgid "All dates" +msgstr "Svi datumi" + +#, python-format +msgid "Select %s" +msgstr "Odaberi objekat klase %s" + +#, python-format +msgid "Select %s to change" +msgstr "Odaberi objekat klase %s za izmjenu" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Vrijeme:" + +msgid "Lookup" +msgstr "Pretraži" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0a373ec447c7e2b239185dad14f206bb7ca543b0 GIT binary patch literal 1183 zcmb7C&2AJq5caabva@jE#7aoi9ug%Yp6MQbLOL0CNkXJq5haQSB#xfxnu#YKyJfp4 z3F5xzJ?sN;--p-(`x*$|fd}C8WI~XTkSO)1ugX2ano0tC)u%Ch3KndIc{soe~ z2UdX(z;)o)AB1Rt7r{xBgRg?u=e!BNg18H=z@!&M)eKTLJ(Vr&IKlAOmYL;w78>9WG@bQ;-)Nmu2iSurK{;sO_^#NKqUUr@E|_Aue^C^&VBj+|Tc3u*NeLqU?EPgHh4>g8o$2>Ojv}muzSQ zr$P9KnT1Vlhwd>nc2uho%O0yqL7OgEjf*cG##j}t*75OiGp3Gu$S2K#o3zgEbWUb2 zZ}mfKxv|^beR^^GyqPt&oQ-U8s?!SBi+mDWl~LNRr}yxIW9NBqM?Si!OM4C3%cpkW zN^M64J?iWD`IrUuLu236UKzRL{3H})t63O2_txpm?JU`aJnM9FT3n>$X1{gvoPMW_ zP>%R-n?LF|>P&t6l&2qzy~=`V)+`H^u}i*0395Zwu;g)E0k{r`q7lYTWBC$@?zj3IuU zo>1-i?cbcd%9*jAs3tu*atMw*YSF+=Yf?u8J+4>qG@qNi{fi0zTw`HW_f2Zt6rTVa C@, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +#, javascript-format +msgid "Available %s" +msgstr "Dostupno %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Odaberi sve" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "Ukloni" + +#, javascript-format +msgid "Chosen %s" +msgstr "Odabrani %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Izabran %(sel)s od %(cnt)s" +msgstr[1] "Izabrano %(sel)s od %(cnt)s" +msgstr[2] "Izabrano %(sel)s od %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Imate nespašene izmjene na pojedinim uređenim poljima. Ako pokrenete ovu " +"akciju, te izmjene će biti izgubljene." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Now" +msgstr "" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "Danas" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ff5ca15c40b2d6c23880f62a7249fbf267e3a2b3 GIT binary patch literal 17411 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..642be3187 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,738 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2014-2015,2017,2021 +# Carles Barrobés , 2011-2012,2014 +# duub qnnp, 2015 +# GerardoGa , 2018 +# Gil Obradors Via , 2019 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +# Marc Compte , 2021 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-27 08:45+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar els %(verbose_name_plural)s seleccionats" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminat/s %(count)d %(items)s satisfactòriament." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No es pot esborrar %(name)s" + +msgid "Are you sure?" +msgstr "N'esteu segur?" + +msgid "Administration" +msgstr "Administració" + +msgid "All" +msgstr "Tots" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconegut" + +msgid "Any date" +msgstr "Qualsevol data" + +msgid "Today" +msgstr "Avui" + +msgid "Past 7 days" +msgstr "Últims 7 dies" + +msgid "This month" +msgstr "Aquest mes" + +msgid "This year" +msgstr "Aquest any" + +msgid "No date" +msgstr "Sense data" + +msgid "Has date" +msgstr "Té data" + +msgid "Empty" +msgstr "Buit" + +msgid "Not empty" +msgstr "No buit" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Si us plau, introduïu un %(username)s i contrasenya correctes per un compte " +"de personal. Observeu que ambdós camps són sensibles a majúscules." + +msgid "Action:" +msgstr "Acció:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Afegir un/a altre/a %(verbose_name)s." + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Afegeix" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Supressió" + +msgid "action time" +msgstr "moment de l'acció" + +msgid "user" +msgstr "usuari" + +msgid "content type" +msgstr "tipus de contingut" + +msgid "object id" +msgstr "id de l'objecte" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "'repr' de l'objecte" + +msgid "action flag" +msgstr "indicador de l'acció" + +msgid "change message" +msgstr "missatge del canvi" + +msgid "log entry" +msgstr "entrada del registre" + +msgid "log entries" +msgstr "entrades del registre" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Afegit \"1%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Modificat \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Eliminat \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objecte entrada del registre" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Afegit {name} \"{object}\"." + +msgid "Added." +msgstr "Afegit." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Canviat {fields} per {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Canviats {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Eliminat {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Cap camp modificat." + +msgid "None" +msgstr "cap" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Premeu la tecla \"Control\", o \"Command\" en un Mac, per seleccionar més " +"d'un valor." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "El {name} \"{obj}\" fou afegit amb èxit." + +msgid "You may edit it again below." +msgstr "Podeu editar-lo de nou a sota." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"El {name} \"{obj}\" s'ha afegit amb èxit. Podeu afegir un altre {name} a " +"sota." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fou canviat amb èxit. Podeu editar-lo de nou a sota." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" s'ha afegit amb èxit. Podeu editar-lo de nou a sota." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fou canviat amb èxit. Podeu afegir un altre {name} a " +"sota." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "El {name} \"{obj}\" fou canviat amb èxit." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Heu de seleccionar els elements per poder realitzar-hi accions. No heu " +"seleccionat cap element." + +msgid "No action selected." +msgstr "No heu seleccionat cap acció." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "El/la %(name)s \"%(obj)s\" s'ha eliminat amb èxit." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s amb ID \"%(key)s\" no existeix. Potser va ser eliminat?" + +#, python-format +msgid "Add %s" +msgstr "Afegir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Visualitza %s" + +msgid "Database error" +msgstr "Error de base de dades" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s s'ha modificat amb èxit." +msgstr[1] "%(count)s %(name)s s'han modificat amb èxit." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionat(s)" +msgstr[1] "Tots %(total_count)s seleccionat(s)" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionats" + +#, python-format +msgid "Change history: %s" +msgstr "Modificar històric: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Esborrar %(class_name)s %(instance)s requeriria esborrar els següents " +"objectes relacionats protegits: %(related_objects)s" + +msgid "Django site admin" +msgstr "Lloc administratiu de Django" + +msgid "Django administration" +msgstr "Administració de Django" + +msgid "Site administration" +msgstr "Administració del lloc" + +msgid "Log in" +msgstr "Iniciar sessió" + +#, python-format +msgid "%(app)s administration" +msgstr "Administració de %(app)s" + +msgid "Page not found" +msgstr "No s'ha pogut trobar la pàgina" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Ho sentim, però no s'ha pogut trobar la pàgina sol·licitada" + +msgid "Home" +msgstr "Inici" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error del servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"S'ha produït un error. Se n'ha informat els administradors del lloc per " +"correu electrònic, i hauria d'arreglar-se en breu. Gràcies per la vostra " +"paciència." + +msgid "Run the selected action" +msgstr "Executar l'acció seleccionada" + +msgid "Go" +msgstr "Anar" + +msgid "Click here to select the objects across all pages" +msgstr "Feu clic aquí per seleccionar els objectes a totes les pàgines" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccioneu tots %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Netejar la selecció" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Models en l'aplicació %(name)s" + +msgid "Add" +msgstr "Afegir" + +msgid "View" +msgstr "Visualitza" + +msgid "You don’t have permission to view or edit anything." +msgstr "No teniu permisos per veure o editar" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Primer, entreu un nom d'usuari i una contrasenya. Després podreu editar més " +"opcions de l'usuari." + +msgid "Enter a username and password." +msgstr "Introduïu un nom d'usuari i contrasenya." + +msgid "Change password" +msgstr "Canviar contrasenya" + +msgid "Please correct the error below." +msgstr "Si us plau, corregiu l'error de sota." + +msgid "Please correct the errors below." +msgstr "Si us plau, corregiu els errors mostrats a sota." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Introduïu una contrasenya per l'usuari %(username)s" + +msgid "Welcome," +msgstr "Benvingut/da," + +msgid "View site" +msgstr "Veure lloc" + +msgid "Documentation" +msgstr "Documentació" + +msgid "Log out" +msgstr "Finalitzar sessió" + +#, python-format +msgid "Add %(name)s" +msgstr "Afegir %(name)s" + +msgid "History" +msgstr "Històric" + +msgid "View on site" +msgstr "Veure al lloc" + +msgid "Filter" +msgstr "Filtre" + +msgid "Clear all filters" +msgstr "Netejar tots els filtres" + +msgid "Remove from sorting" +msgstr "Treure de la ordenació" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritat d'ordenació: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Commutar ordenació" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el/la %(object_name)s '%(escaped_object)s' provocaria l'eliminació " +"d'objectes relacionats, però el vostre compte no te permisos per esborrar " +"els tipus d'objecte següents:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Esborrar %(object_name)s '%(escaped_object)s' requeriria esborrar els " +"següents objectes relacionats protegits:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Esteu segurs de voler esborrar els/les %(object_name)s \"%(escaped_object)s" +"\"? S'esborraran els següents elements relacionats:" + +msgid "Objects" +msgstr "Objectes" + +msgid "Yes, I’m sure" +msgstr "Sí, n'estic segur" + +msgid "No, take me back" +msgstr "No, torna endarrere" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objectes" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Esborrar els %(objects_name)s seleccionats faria que s'esborréssin objectes " +"relacionats, però el vostre compte no té permisos per esborrar els següents " +"tipus d'objectes:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Esborrar els %(objects_name)s seleccionats requeriria esborrar els següents " +"objectes relacionats protegits:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"N'esteu segur de voler esborrar els %(objects_name)s seleccionats? " +"S'esborraran tots els objects següents i els seus elements relacionats:" + +msgid "Delete?" +msgstr "Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Per %(filter_title)s " + +msgid "Summary" +msgstr "Resum" + +msgid "Recent actions" +msgstr "Accions recents" + +msgid "My actions" +msgstr "Les meves accions" + +msgid "None available" +msgstr "Cap disponible" + +msgid "Unknown content" +msgstr "Contingut desconegut" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hi ha algun problema a la instal·lació de la vostra base de dades. Assegureu-" +"vos que s'han creat les taules adients, i que la base de dades és llegible " +"per l'usuari apropiat." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Esteu identificats com a %(username)s, però no esteu autoritzats a accedir a " +"aquesta pàgina. Voleu identificar-vos amb un compte d'usuari diferent?" + +msgid "Forgotten your password or username?" +msgstr "Heu oblidat la vostra contrasenya o nom d'usuari?" + +msgid "Toggle navigation" +msgstr "Canviar mode de navegació" + +msgid "Start typing to filter…" +msgstr "Comença a teclejar per filtrar ..." + +msgid "Filter navigation items" +msgstr "Filtrar els items de navegació" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usuari" + +msgid "Action" +msgstr "Acció" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Aquest objecte no té historial de canvis. Probablement no es va afegir " +"utilitzant aquest lloc administratiu." + +msgid "Show all" +msgstr "Mostrar tots" + +msgid "Save" +msgstr "Desar" + +msgid "Popup closing…" +msgstr "Tancant finestra emergent..." + +msgid "Search" +msgstr "Cerca" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultats" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s en total" + +msgid "Save as new" +msgstr "Desar com a nou" + +msgid "Save and add another" +msgstr "Desar i afegir-ne un de nou" + +msgid "Save and continue editing" +msgstr "Desar i continuar editant" + +msgid "Save and view" +msgstr "Desa i visualitza" + +msgid "Close" +msgstr "Tanca" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Canvieu el %(model)s seleccionat" + +#, python-format +msgid "Add another %(model)s" +msgstr "Afegeix un altre %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Esborra el %(model)s seleccionat" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Gràcies per dedicar temps de qualitat avui a aquesta web." + +msgid "Log in again" +msgstr "Iniciar sessió de nou" + +msgid "Password change" +msgstr "Canvi de contrasenya" + +msgid "Your password was changed." +msgstr "La seva contrasenya ha estat canviada." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Si us plau, introduïu la vostra contrasenya antiga, per seguretat, i tot " +"seguit introduïu la vostra contrasenya nova dues vegades per verificar que " +"l'heu escrita correctament." + +msgid "Change my password" +msgstr "Canviar la meva contrasenya:" + +msgid "Password reset" +msgstr "Restablir contrasenya" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"S'ha canviat la vostra contrasenya. Ara podeu continuar i iniciar sessió." + +msgid "Password reset confirmation" +msgstr "Confirmació de restabliment de contrasenya" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Si us plau, introduïu la vostra nova contrasenya dues vegades, per verificar " +"que l'heu escrita correctament." + +msgid "New password:" +msgstr "Contrasenya nova:" + +msgid "Confirm password:" +msgstr "Confirmar contrasenya:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"L'enllaç de restabliment de contrasenya era invàlid, potser perquè ja s'ha " +"utilitzat. Si us plau, sol·liciteu un nou reestabliment de contrasenya." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Li hem enviat instruccions per establir la seva contrasenya, donat que hi " +"hagi un compte associat al correu introduït. L'hauríeu de rebre en breu." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no rebeu un correu, assegureu-vos que heu introduït l'adreça amb la que " +"us vau registrar, i comproveu la vostra carpeta de \"spam\"." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Heu rebut aquest correu perquè vau sol·licitar restablir la contrasenya per " +"al vostre compte d'usuari a %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Si us plau, aneu a la pàgina següent i escolliu una nova contrasenya:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "El vostre nom d'usuari, en cas que l'hagueu oblidat:" + +msgid "Thanks for using our site!" +msgstr "Gràcies per fer ús del nostre lloc!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "L'equip de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Heu oblidat la vostra contrasenya? Introduïu la vostra adreça de correu " +"electrònic a sota, i us enviarem instruccions per canviar-la." + +msgid "Email address:" +msgstr "Adreça de correu electrònic:" + +msgid "Reset my password" +msgstr "Restablir la meva contrasenya" + +msgid "All dates" +msgstr "Totes les dates" + +#, python-format +msgid "Select %s" +msgstr "Seleccioneu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccioneu %s per modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Selecciona %s per a veure" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Cercar" + +msgid "Currently:" +msgstr "Actualment:" + +msgid "Change:" +msgstr "Canviar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..4381bffb94b0b44a3f540eae350d586fdad85d99 GIT binary patch literal 5150 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 YMLCu7mxp>-J*ejS&&5eK$N$Ox4J-_GyZ`_I literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..b06cf6c0c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po @@ -0,0 +1,269 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2017,2021 +# Carles Barrobés , 2011-2012,2014 +# Jannis Leidel , 2011 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-27 08:48+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s Disponibles" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Aquesta és la llista de %s disponibles. En podeu escollir alguns " +"seleccionant-los a la caixa de sota i fent clic a la fletxa \"Escollir\" " +"entre les dues caixes." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriviu en aquesta caixa per a filtrar la llista de %s disponibles." + +msgid "Filter" +msgstr "Filtre" + +msgid "Choose all" +msgstr "Escollir-los tots" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Feu clic per escollir tots els %s d'un cop." + +msgid "Choose" +msgstr "Escollir" + +msgid "Remove" +msgstr "Eliminar" + +#, javascript-format +msgid "Chosen %s" +msgstr "Escollit %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Aquesta és la llista de %s escollits. En podeu eliminar alguns seleccionant-" +"los a la caixa de sota i fent clic a la fletxa \"Eliminar\" entre les dues " +"caixes." + +msgid "Remove all" +msgstr "Esborrar-los tots" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Feu clic per eliminar tots els %s escollits d'un cop." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionat" +msgstr[1] "%(sel)s of %(cnt)s seleccionats" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Teniu canvis sense desar a camps editables individuals. Si executeu una " +"acció, es perdran aquests canvis no desats." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Has seleccionat una acció, però encara no l'has desat els canvis dels camps " +"individuals. Si us plau clica OK per desar. Necessitaràs tornar a executar " +"l'acció." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Has seleccionat una acció i no has fet cap canvi als camps individuals. " +"Probablement estàs cercant el botó Anar enlloc del botó de Desar." + +msgid "Now" +msgstr "Ara" + +msgid "Midnight" +msgstr "Mitjanit" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Migdia" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Aneu %s hora avançats respecte la hora del servidor." +msgstr[1] "Nota: Aneu %s hores avançats respecte la hora del servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Aneu %s hora endarrerits respecte la hora del servidor." +msgstr[1] "Nota: Aneu %s hores endarrerits respecte la hora del servidor." + +msgid "Choose a Time" +msgstr "Escolliu una hora" + +msgid "Choose a time" +msgstr "Escolliu una hora" + +msgid "Cancel" +msgstr "Cancel·lar" + +msgid "Today" +msgstr "Avui" + +msgid "Choose a Date" +msgstr "Escolliu una data" + +msgid "Yesterday" +msgstr "Ahir" + +msgid "Tomorrow" +msgstr "Demà" + +msgid "January" +msgstr "Gener" + +msgid "February" +msgstr "Febrer" + +msgid "March" +msgstr "Març" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maig" + +msgid "June" +msgstr "Juny" + +msgid "July" +msgstr "Juliol" + +msgid "August" +msgstr "Agost" + +msgid "September" +msgstr "Setembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Desembre" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Gen" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Abr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ago" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Oct" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Des" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "X" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0dd0b0c3f55935535b2fb1b825d5584f23c5076a GIT binary patch literal 17659 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..ce5d6f8a8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,738 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jirka Vejrazka , 2011 +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2013-2014 +# Vláďa Macek , 2015-2020,2022 +# yedpodtrzitko , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-04 18:54+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Odstranit vybrané položky typu %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Úspěšně odstraněno: %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nelze smazat %(name)s" + +msgid "Are you sure?" +msgstr "Jste si jisti?" + +msgid "Administration" +msgstr "Správa" + +msgid "All" +msgstr "Vše" + +msgid "Yes" +msgstr "Ano" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Neznámé" + +msgid "Any date" +msgstr "Libovolné datum" + +msgid "Today" +msgstr "Dnes" + +msgid "Past 7 days" +msgstr "Posledních 7 dní" + +msgid "This month" +msgstr "Tento měsíc" + +msgid "This year" +msgstr "Tento rok" + +msgid "No date" +msgstr "Bez data" + +msgid "Has date" +msgstr "Má datum" + +msgid "Empty" +msgstr "Prázdná hodnota" + +msgid "Not empty" +msgstr "Neprázdná hodnota" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Zadejte správné %(username)s a heslo pro personál. Obě pole mohou rozlišovat " +"velká a malá písmena." + +msgid "Action:" +msgstr "Operace:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Přidat %(verbose_name)s" + +msgid "Remove" +msgstr "Odebrat" + +msgid "Addition" +msgstr "Přidání" + +msgid "Change" +msgstr "Změnit" + +msgid "Deletion" +msgstr "Odstranění" + +msgid "action time" +msgstr "čas operace" + +msgid "user" +msgstr "uživatel" + +msgid "content type" +msgstr "typ obsahu" + +msgid "object id" +msgstr "id položky" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "reprez. položky" + +msgid "action flag" +msgstr "příznak operace" + +msgid "change message" +msgstr "zpráva o změně" + +msgid "log entry" +msgstr "položka protokolu" + +msgid "log entries" +msgstr "položky protokolu" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Přidán objekt \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Změněn objekt \"%(object)s\" — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Odstraněna položka \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "Objekt záznam v protokolu" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Přidáno: {name} \"{object}\"." + +msgid "Added." +msgstr "Přidáno." + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Změněno: {fields} pro {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Změněno: {fields}" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Odstraněno: {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nebyla změněna žádná pole." + +msgid "None" +msgstr "Žádný" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Výběr více než jedné položky je možný přidržením klávesy \"Control\", na " +"Macu \"Command\"." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Položka typu {name} \"{obj}\" byla úspěšně přidána." + +msgid "You may edit it again below." +msgstr "Níže můžete údaje znovu upravovat." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Položka typu {name} \"{obj}\" byla úspěšně přidána. Níže můžete přidat další " +"položku {name}." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Položka typu {name} \"{obj}\" byla úspěšně změněna. Níže ji můžete dále " +"upravovat." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Položka \"{obj}\" typu {name} byla úspěšně přidána. Níže ji můžete dále " +"upravovat." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Položka \"{obj}\" typu {name} byla úspěšně změněna. Níže můžete přidat další " +"položku {name}." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Položka \"{obj}\" typu {name} byla úspěšně změněna." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"K provedení hromadných operací je třeba vybrat nějaké položky. Nedošlo k " +"žádným změnám." + +msgid "No action selected." +msgstr "Nebyla vybrána žádná operace." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně odstraněna." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "Objekt %(name)s s klíčem \"%(key)s\" neexistuje. Možná byl odstraněn." + +#, python-format +msgid "Add %s" +msgstr "%s: přidat" + +#, python-format +msgid "Change %s" +msgstr "%s: změnit" + +#, python-format +msgid "View %s" +msgstr "Zobrazit %s" + +msgid "Database error" +msgstr "Chyba databáze" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Položka %(name)s byla úspěšně změněna." +msgstr[1] "%(count)s položky %(name)s byly úspěšně změněny." +msgstr[2] "%(count)s položek %(name)s bylo úspěšně změněno." +msgstr[3] "%(count)s položek %(name)s bylo úspěšně změněno." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s položka vybrána." +msgstr[1] "Všechny %(total_count)s položky vybrány." +msgstr[2] "Vybráno všech %(total_count)s položek." +msgstr[3] "Vybráno všech %(total_count)s položek." + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Vybraných je 0 položek z celkem %(cnt)s." + +#, python-format +msgid "Change history: %s" +msgstr "Historie změn: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s: %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Odstranění položky \"%(instance)s\" typu %(class_name)s by vyžadovalo " +"odstranění těchto souvisejících chráněných položek: %(related_objects)s" + +msgid "Django site admin" +msgstr "Správa webu Django" + +msgid "Django administration" +msgstr "Správa systému Django" + +msgid "Site administration" +msgstr "Správa webu" + +msgid "Log in" +msgstr "Přihlášení" + +#, python-format +msgid "%(app)s administration" +msgstr "Správa aplikace %(app)s" + +msgid "Page not found" +msgstr "Stránka nenalezena" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Požadovaná stránka nebyla bohužel nalezena." + +msgid "Home" +msgstr "Domů" + +msgid "Server error" +msgstr "Chyba serveru" + +msgid "Server error (500)" +msgstr "Chyba serveru (500)" + +msgid "Server Error (500)" +msgstr "Chyba serveru (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"V systému došlo k chybě. Byla e-mailem nahlášena správcům, kteří by ji měli " +"v krátké době opravit. Děkujeme za trpělivost." + +msgid "Run the selected action" +msgstr "Provést vybranou operaci" + +msgid "Go" +msgstr "Provést" + +msgid "Click here to select the objects across all pages" +msgstr "Klepnutím zde vyberete položky ze všech stránek." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Vybrat všechny položky typu %(module_name)s, celkem %(total_count)s." + +msgid "Clear selection" +msgstr "Zrušit výběr" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modely v aplikaci %(name)s" + +msgid "Add" +msgstr "Přidat" + +msgid "View" +msgstr "Zobrazit" + +msgid "You don’t have permission to view or edit anything." +msgstr "Nemáte oprávnění k zobrazení ani úpravám." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Nejdříve zadejte uživatelské jméno a heslo. Poté budete moci upravovat více " +"uživatelských nastavení." + +msgid "Enter a username and password." +msgstr "Zadejte uživatelské jméno a heslo." + +msgid "Change password" +msgstr "Změnit heslo" + +msgid "Please correct the error below." +msgstr "Opravte níže uvedenou chybu." + +msgid "Please correct the errors below." +msgstr "Opravte níže uvedené chyby." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Zadejte nové heslo pro uživatele %(username)s." + +msgid "Welcome," +msgstr "Vítejte, uživateli" + +msgid "View site" +msgstr "Zobrazení webu" + +msgid "Documentation" +msgstr "Dokumentace" + +msgid "Log out" +msgstr "Odhlásit se" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s: přidat" + +msgid "History" +msgstr "Historie" + +msgid "View on site" +msgstr "Zobrazení na webu" + +msgid "Filter" +msgstr "Filtr" + +msgid "Clear all filters" +msgstr "Zrušit všechny filtry" + +msgid "Remove from sorting" +msgstr "Přestat řadit" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Priorita řazení: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Přehodit řazení" + +msgid "Delete" +msgstr "Odstranit" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Odstranění položky \"%(escaped_object)s\" typu %(object_name)s by vyústilo v " +"odstranění souvisejících položek. Nemáte však oprávnění k odstranění položek " +"následujících typů:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Odstranění položky '%(escaped_object)s' typu %(object_name)s by vyžadovalo " +"odstranění souvisejících chráněných položek:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Opravdu má být odstraněna položka \"%(escaped_object)s\" typu " +"%(object_name)s? Následující související položky budou všechny odstraněny:" + +msgid "Objects" +msgstr "Objekty" + +msgid "Yes, I’m sure" +msgstr "Ano, jsem si jist(a)" + +msgid "No, take me back" +msgstr "Ne, beru zpět" + +msgid "Delete multiple objects" +msgstr "Odstranit vybrané položky" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Odstranění položky typu %(objects_name)s by vyústilo v odstranění " +"souvisejících položek. Nemáte však oprávnění k odstranění položek " +"následujících typů:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Odstranění vybrané položky typu %(objects_name)s by vyžadovalo odstranění " +"následujících souvisejících chráněných položek:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Opravdu má být odstraněny vybrané položky typu %(objects_name)s? Všechny " +"vybrané a s nimi související položky budou odstraněny:" + +msgid "Delete?" +msgstr "Odstranit?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Dle: %(filter_title)s " + +msgid "Summary" +msgstr "Shrnutí" + +msgid "Recent actions" +msgstr "Nedávné akce" + +msgid "My actions" +msgstr "Moje akce" + +msgid "None available" +msgstr "Nic" + +msgid "Unknown content" +msgstr "Neznámý obsah" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Potíže s nainstalovanou databází. Ujistěte se, že byly vytvořeny " +"odpovídající tabulky a že databáze je přístupná pro čtení příslušným " +"uživatelem." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jste přihlášeni jako uživatel %(username)s, ale k této stránce nemáte " +"oprávnění. Chcete se přihlásit k jinému účtu?" + +msgid "Forgotten your password or username?" +msgstr "Zapomněli jste heslo nebo uživatelské jméno?" + +msgid "Toggle navigation" +msgstr "Přehodit navigaci" + +msgid "Start typing to filter…" +msgstr "Filtrovat začnete vepsáním textu..." + +msgid "Filter navigation items" +msgstr "Filtrace položek navigace" + +msgid "Date/time" +msgstr "Datum a čas" + +msgid "User" +msgstr "Uživatel" + +msgid "Action" +msgstr "Operace" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Tato položka nemá historii změn. Pravděpodobně nebyla přidána tímto " +"administračním rozhraním." + +msgid "Show all" +msgstr "Zobrazit vše" + +msgid "Save" +msgstr "Uložit" + +msgid "Popup closing…" +msgstr "Vyskakovací okno se zavírá..." + +msgid "Search" +msgstr "Hledat" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s výsledek" +msgstr[1] "%(counter)s výsledky" +msgstr[2] "%(counter)s výsledků" +msgstr[3] "%(counter)s výsledků" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Celkem %(full_result_count)s" + +msgid "Save as new" +msgstr "Uložit jako novou položku" + +msgid "Save and add another" +msgstr "Uložit a přidat další položku" + +msgid "Save and continue editing" +msgstr "Uložit a pokračovat v úpravách" + +msgid "Save and view" +msgstr "Uložit a zobrazit" + +msgid "Close" +msgstr "Zavřít" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Změnit vybrané položky typu %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Přidat další %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Odstranit vybrané položky typu %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Děkujeme za dnešní čas strávený s tímto neobyčejným webem." + +msgid "Log in again" +msgstr "Přihlaste se znovu" + +msgid "Password change" +msgstr "Změna hesla" + +msgid "Your password was changed." +msgstr "Vaše heslo bylo změněno." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Zadejte svoje současné heslo a poté dvakrát heslo nové. Omezíme tak možnost " +"překlepu." + +msgid "Change my password" +msgstr "Změnit heslo" + +msgid "Password reset" +msgstr "Obnovení hesla" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaše heslo bylo nastaveno. Nyní se můžete přihlásit." + +msgid "Password reset confirmation" +msgstr "Potvrzení obnovy hesla" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Zadejte dvakrát nové heslo. Tak ověříme, že bylo zadáno správně." + +msgid "New password:" +msgstr "Nové heslo:" + +msgid "Confirm password:" +msgstr "Potvrdit heslo:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Odkaz pro obnovení hesla byl neplatný, možná již byl použit. Požádejte o " +"obnovení hesla znovu." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Návod na nastavení hesla byl odeslán na zadanou e-mailovou adresu, pokud " +"účet s takovou adresou existuje. Měl by za okamžik dorazit." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Pokud e-mail neobdržíte, ujistěte se, že zadaná e-mailová adresa je stejná " +"jako ta registrovaná u vašeho účtu a zkontrolujte složku nevyžádané pošty, " +"tzv. spamu." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Tento e-mail vám byl zaslán na základě vyžádání obnovy hesla vašeho " +"uživatelskému účtu na systému %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Přejděte na následující stránku a zadejte nové heslo:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Pro jistotu vaše uživatelské jméno:" + +msgid "Thanks for using our site!" +msgstr "Děkujeme za používání našeho webu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tým aplikace %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Zapomněli jste heslo? Zadejte níže e-mailovou adresu a systém vám odešle " +"postup k nastavení nového." + +msgid "Email address:" +msgstr "E-mailová adresa:" + +msgid "Reset my password" +msgstr "Obnovit heslo" + +msgid "All dates" +msgstr "Všechna data" + +#, python-format +msgid "Select %s" +msgstr "%s: vybrat" + +#, python-format +msgid "Select %s to change" +msgstr "Vyberte položku %s ke změně" + +#, python-format +msgid "Select %s to view" +msgstr "Vyberte položku %s k zobrazení" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Čas:" + +msgid "Lookup" +msgstr "Hledat" + +msgid "Currently:" +msgstr "Aktuálně:" + +msgid "Change:" +msgstr "Změna:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..39c441e7db9e2d4c0cfe843637def590ed8aaaba GIT binary patch literal 5679 zcmd6rUu+yl9mfZ_LUAdD1X2PGoj7&sw7&D7q-nUsX%ahb{@F3{#UT|S=61)v_3h3q zyR+xq385f_%0ohFX{Dw?2!nWtkd;R$B2m%#fEN%CNbppNJ`}`5kq}ZJ5Qy(@ch0_? z-6l{Z*m(A{GxM97-~8q`znROcn{qEOJcp1Tp!9CW&J%NZ;kkGhV~>Mh0pAP0Z21a^ zKlTfo{}uQFunegM7){2@sFT(|W<20w%R4X^}mK_^sS1xen3)b9nnAi^$! zr03Hh>G>Q;<9{1`9$W&S1^1#88uynV_4jMM_Jh9zsoiG0z5{LpUj%;&hTvIren0qg z@MGYs;K#u?EjQf*8zG+uw}4MtejcQD3HVX)GDz*d50d;%@Dt$g!Oh^`Ebqo5k^BQ7 zm5#4`%bq-IvYhUXbQ{zvVWN+U)?zZbi$(Ag%u~ z5M8lZO9zBXECgxXFM$WaXTf9OZ$Pr+)(>Ul^jh|V)PKR|9|Ot0`#~%PJ8C&;dDilC zmJ<9Yjx@{89%((jMp zIq(gepTHz(-6uivgV(_?fM3I6kl(#-`De>FKh^L`2nuX3 z4+)3E$n)9ZWIl-vJ6scul0Et~a}USy{oqsaniQbSpgz1WNlO(r)}fncfP z#Tk7^EE++mEX|^X42^CUHAiz97dBLCb)DBVvR?2GHOfqMJB_pp_bBN=lisXU z4<)7yPc>venl--XQZM7KUd(2+p*`7o8N(N;JMyfGfFHMaB#g#|V?3<}Qv21dfO_rX z6~hDJ!sQjMgi!Mmds;yU*QFgP%T0)}!`q z?XmBbL~kgLWIjqV?K0DJD3+*f(2WfuUC*Rps%@F$bE(SIU5BAljk|kV^q@i+TSCXC zz(lzm$y$L2TA2z@gJBNu?(#G|<`5;jD%$ZVhmWqRc7)2|qpQlssT|l{gUFRb_*z%2 zB#OJG)99ANyGtDL4yE<3(kaAMik&%pbXD1yk^{SHR%1#IUra05O&T~kpNKp-dTye# zY*H&Ko9rx`5hkH6k(;@tG)X0IDJxZyC??5Lr(`LS>kH3GS7pWL*mR^9aOmZayZKoe z#n@p*?k->(>7Fw()RDKi>X*M3+v!7?5qy37Hj`Cr?b0^0^jt}I9cJU|p5HE669vtN(S>=II zzGuDIa4JO&x1%AamLq7ndw&m`t(T+bk`jCYN3gxjgxc4wn^nOZ9G8zOjvsrsDYV7w zd?7~g>}pVdiv~h9Z(t49jezyrc!Yne!QKj|8EA%&nq0YzW7$p0Qn5G+@g7HrNkY}U z#_hD~MY;>kz?sm7rY{UZMn-ZM8zorHty~uIx(vj5t+gbxrk(w!SFDO7jm-NVS7HGh z1V*Z*L!@n-3XYey8W11gRbPf`zivAw=6qm+CJ^CYut4m;c$vQg?QNf ziPE^K;pmLmOf_oWFwB=O>_UdBNfNPNtlYXH8>p$)NFl|hTi1Q19X74e0{6IS-B8V? zpenEln@g=FPWItCySc%)6CR=mH#S}+!CI%aaIEYemlST>9;W%9w*QZY$0^%sfkud( zv+@khzadf+VE5eK2)FctZS;TB%k5R6TbK@o%ckn8xy)Kun#&7tp3|AzwwZ022HXbq z>?sYGZg>W_<%SXgu5{TRr6`eY4}^w3T((Zo7BapEkEHP7H)MM|8BrbJt(%gJiw(qU z6a)fn|7wzLDr`giPzptLEep}sk{3dvH{18UJdh1+c;d?CEXag$bICvuH@}L;?GMJrkE>aV z0D>K<`yw@OdLHNyWsby68NWoaK#7YxqpMp>zUEb)&

    2;Jgv6Tvb>cyHIJQN4L#o z+(Lzk(zU54t()Egt%&iV3uaT*9CwCV^BR5<#bI+90Ttc1ZgvWsr7=9*5C7|mr9DFn znfXRyn#<`f?a=P@Nz%WH+d6&~7{sNr;F(E0D2(6f9&E344RLLDquJAWM@OWRZBt## zOjSp$#@!9)5xRyz11sxDh2l_GVdVB8h~T*J!)66Go|M^46w)n=HDAK1bqfExuyUz} m(0!?<*b!*QPGXC&Q(nwkFJc42W3bcMH2%%7DTtvRzWxQpY>74i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..39d02b613 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po @@ -0,0 +1,274 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jirka Vejrazka , 2011 +# Vláďa Macek , 2012,2014 +# Vláďa Macek , 2015-2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 23:23+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Dostupné položky: %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Seznam dostupných položek %s. Jednotlivě je lze vybrat tak, že na ně v " +"rámečku klepnete a pak klepnete na šipku \"Vybrat\" mezi rámečky." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Chcete-li filtrovat ze seznamu dostupných položek %s, začněte psát do tohoto " +"pole." + +msgid "Filter" +msgstr "Filtr" + +msgid "Choose all" +msgstr "Vybrat vše" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Chcete-li najednou vybrat všechny položky %s, klepněte sem." + +msgid "Choose" +msgstr "Vybrat" + +msgid "Remove" +msgstr "Odebrat" + +#, javascript-format +msgid "Chosen %s" +msgstr "Vybrané položky %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Seznam vybraných položek %s. Jednotlivě je lze odebrat tak, že na ně v " +"rámečku klepnete a pak klepnete na šipku \"Odebrat mezi rámečky." + +msgid "Remove all" +msgstr "Odebrat vše" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Chcete-li najednou odebrat všechny vybrané položky %s, klepněte sem." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Vybrána je %(sel)s položka z celkem %(cnt)s." +msgstr[1] "Vybrány jsou %(sel)s položky z celkem %(cnt)s." +msgstr[2] "Vybraných je %(sel)s položek z celkem %(cnt)s." +msgstr[3] "Vybraných je %(sel)s položek z celkem %(cnt)s." + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"V jednotlivých polích jsou neuložené změny, které budou ztraceny, pokud " +"operaci provedete." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Byla vybrána operace, ale dosud nedošlo k uložení změn jednotlivých polí. " +"Uložíte klepnutím na tlačítko OK. Pak bude třeba operaci spustit znovu." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Byla vybrána operace, ale dosud nedošlo k uložení změn jednotlivých polí. " +"Patrně využijete tlačítko Provést spíše než tlačítko Uložit." + +msgid "Now" +msgstr "Nyní" + +msgid "Midnight" +msgstr "Půlnoc" + +msgid "6 a.m." +msgstr "6h ráno" + +msgid "Noon" +msgstr "Poledne" + +msgid "6 p.m." +msgstr "6h večer" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Poznámka: Váš čas o %s hodinu předstihuje čas na serveru." +msgstr[1] "Poznámka: Váš čas o %s hodiny předstihuje čas na serveru." +msgstr[2] "Poznámka: Váš čas o %s hodiny předstihuje čas na serveru." +msgstr[3] "Poznámka: Váš čas o %s hodin předstihuje čas na serveru." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Poznámka: Váš čas se o %s hodinu zpožďuje za časem na serveru." +msgstr[1] "Poznámka: Váš čas se o %s hodiny zpožďuje za časem na serveru." +msgstr[2] "Poznámka: Váš čas se o %s hodiny zpožďuje za časem na serveru." +msgstr[3] "Poznámka: Váš čas se o %s hodin zpožďuje za časem na serveru." + +msgid "Choose a Time" +msgstr "Vyberte čas" + +msgid "Choose a time" +msgstr "Vyberte čas" + +msgid "Cancel" +msgstr "Storno" + +msgid "Today" +msgstr "Dnes" + +msgid "Choose a Date" +msgstr "Vyberte datum" + +msgid "Yesterday" +msgstr "Včera" + +msgid "Tomorrow" +msgstr "Zítra" + +msgid "January" +msgstr "leden" + +msgid "February" +msgstr "únor" + +msgid "March" +msgstr "březen" + +msgid "April" +msgstr "duben" + +msgid "May" +msgstr "květen" + +msgid "June" +msgstr "červen" + +msgid "July" +msgstr "červenec" + +msgid "August" +msgstr "srpen" + +msgid "September" +msgstr "září" + +msgid "October" +msgstr "říjen" + +msgid "November" +msgstr "listopad" + +msgid "December" +msgstr "prosinec" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Led" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Úno" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Bře" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Dub" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Kvě" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Čvn" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Čvc" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Srp" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Zář" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Říj" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Lis" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Pro" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "N" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ú" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "S" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Č" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Zobrazit" + +msgid "Hide" +msgstr "Skrýt" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e20f6a4a95f229ea5177d28eaa491dfcf3525235 GIT binary patch literal 12521 zcmd6teT*Duea9aNgv10AUP2RS%M+8!-I2TXos*DcW5Dv)`F#o_U_%^Lu}Odp~^Ti+WUxF;9cPc@bZHMlUty za_|B0HQ-0V*MX0N_kmvruK_Q=#P{z4Z{YqOQ13koUI_jc_!96*@B;8_Ab;lf`O@=0 z2DSd5g0BMq9(+0YAE3s+^kv3e3|nHz|0VcJ@ULt9 zXYf+)FJN-f^D1yV_&QMiw}PwS5%3k@2f%IMV<3O#Gkj^@FM=-yp8>VrH^F)E45)d3 z3~K-X0zL>{%;XP%4}njCKLvZ>6PNjM+gMENS-v3A>;!q$+y>qT-Ua?V_{*Ty`x1Bp zdiacN`g06KbxaDr9()&Q!CwbU z@EhP!a0MoQ6#O9A1}{d)qI(~x_1^-*0&^1l8Snv6bbK6S3iBvXUzaiX9`JRb=qf?!*ZXRG7?eId0!mJw2F2IUf!gm^K+*dQ zcq4cQ6utir%6?wNrX;_Mz-z(RfcJxY!QJ5RfebZ21{c5!F-GxgM~%0Dn&$v0I^I(E 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..82e82f78c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,675 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2014 +# pjrobertson, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Dilëwyd %(count)d %(items)s yn llwyddiannus." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ni ellir dileu %(name)s" + +msgid "Are you sure?" +msgstr "Ydych yn sicr?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Dileu y %(verbose_name_plural)s â ddewiswyd" + +msgid "Administration" +msgstr "Gweinyddu" + +msgid "All" +msgstr "Pob un" + +msgid "Yes" +msgstr "Ie" + +msgid "No" +msgstr "Na" + +msgid "Unknown" +msgstr "Anhysybys" + +msgid "Any date" +msgstr "Unrhyw ddyddiad" + +msgid "Today" +msgstr "Heddiw" + +msgid "Past 7 days" +msgstr "7 diwrnod diwethaf" + +msgid "This month" +msgstr "Mis yma" + +msgid "This year" +msgstr "Eleni" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Teipiwch yr %(username)s a chyfrinair cywir ar gyfer cyfrif staff. Noder y " +"gall y ddau faes fod yn sensitif i lythrennau bach a llythrennau bras." + +msgid "Action:" +msgstr "Gweithred:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ychwanegu %(verbose_name)s arall" + +msgid "Remove" +msgstr "Gwaredu" + +msgid "action time" +msgstr "amser y weithred" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id gwrthrych" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr gwrthrych" + +msgid "action flag" +msgstr "fflag gweithred" + +msgid "change message" +msgstr "neges y newid" + +msgid "log entry" +msgstr "cofnod" + +msgid "log entries" +msgstr "cofnodion" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ychwanegwyd \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Newidwyd \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Dilëwyd \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Gwrthrych LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ni newidwyd unrhwy feysydd." + +msgid "None" +msgstr "Dim" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Rhaid dewis eitemau er mwyn gweithredu arnynt. Ni ddewiswyd unrhyw eitemau." + +msgid "No action selected." +msgstr "Ni ddewiswyd gweithred." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Dilëwyd %(name)s \"%(obj)s\" yn llwyddiannus." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ychwanegu %s" + +#, python-format +msgid "Change %s" +msgstr "Newid %s" + +msgid "Database error" +msgstr "Gwall cronfa ddata" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[1] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[2] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[3] "Newidwyd %(count)s %(name)s yn llwyddiannus" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Dewiswyd %(total_count)s" +msgstr[1] "Dewiswyd %(total_count)s" +msgstr[2] "Dewiswyd %(total_count)s" +msgstr[3] "Dewiswyd %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Dewiswyd 0 o %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Hanes newid: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Byddai dileu %(class_name)s %(instance)s yn golygu dileu'r gwrthrychau " +"gwarchodedig canlynol sy'n perthyn: %(related_objects)s" + +msgid "Django site admin" +msgstr "Adran weinyddol safle Django" + +msgid "Django administration" +msgstr "Gweinyddu Django" + +msgid "Site administration" +msgstr "Gweinyddu'r safle" + +msgid "Log in" +msgstr "Mewngofnodi" + +#, python-format +msgid "%(app)s administration" +msgstr "Gweinyddu %(app)s" + +msgid "Page not found" +msgstr "Ni ddarganfyddwyd y dudalen" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Mae'n ddrwg gennym, ond ni ddarganfuwyd y dudalen" + +msgid "Home" +msgstr "Hafan" + +msgid "Server error" +msgstr "Gwall gweinydd" + +msgid "Server error (500)" +msgstr "Gwall gweinydd (500)" + +msgid "Server Error (500)" +msgstr "Gwall Gweinydd (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Mae gwall ac gyrrwyd adroddiad ohono i weinyddwyr y wefan drwy ebost a dylai " +"gael ei drwsio yn fuan. Diolch am fod yn amyneddgar." + +msgid "Run the selected action" +msgstr "Rhedeg y weithred a ddewiswyd" + +msgid "Go" +msgstr "Ffwrdd â ni" + +msgid "Click here to select the objects across all pages" +msgstr "" +"Cliciwch fan hyn i ddewis yr holl wrthrychau ar draws yr holl dudalennau" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Dewis y %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Clirio'r dewis" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Yn gyntaf, rhowch enw defnyddiwr a chyfrinair. Yna byddwch yn gallu golygu " +"mwy o ddewisiadau." + +msgid "Enter a username and password." +msgstr "Rhowch enw defnyddiwr a chyfrinair." + +msgid "Change password" +msgstr "Newid cyfrinair" + +msgid "Please correct the error below." +msgstr "Cywirwch y gwall isod." + +msgid "Please correct the errors below." +msgstr "Cywirwch y gwallau isod." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Rhowch gyfrinair newydd i'r defnyddiwr %(username)s." + +msgid "Welcome," +msgstr "Croeso," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dogfennaeth" + +msgid "Log out" +msgstr "Allgofnodi" + +#, python-format +msgid "Add %(name)s" +msgstr "Ychwanegu %(name)s" + +msgid "History" +msgstr "Hanes" + +msgid "View on site" +msgstr "Gweld ar y safle" + +msgid "Filter" +msgstr "Hidl" + +msgid "Remove from sorting" +msgstr "Gwaredu o'r didoli" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Blaenoriaeth didoli: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toglio didoli" + +msgid "Delete" +msgstr "Dileu" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Byddai dileu %(object_name)s '%(escaped_object)s' yn golygu dileu'r " +"gwrthrychau sy'n perthyn, ond nid oes ganddoch ganiatâd i ddileu y mathau " +"canlynol o wrthrychau:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Byddai dileu %(object_name)s '%(escaped_object)s' yn golygu dileu'r " +"gwrthrychau gwarchodedig canlynol sy'n perthyn:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Ydw, rwy'n sicr" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Byddai dileu %(objects_name)s yn golygu dileu'r gwrthrychau gwarchodedig " +"canlynol sy'n perthyn:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ydych yn sicr eich bod am ddileu'r %(objects_name)s a ddewiswyd? Dilëir yr " +"holl wrthrychau canlynol a'u heitemau perthnasol:" + +msgid "Change" +msgstr "Newid" + +msgid "Delete?" +msgstr "Dileu?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Wrth %(filter_title)s" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelau yn y rhaglen %(name)s " + +msgid "Add" +msgstr "Ychwanegu" + +msgid "You don't have permission to edit anything." +msgstr "Does gennych ddim hawl i olygu unrhywbeth." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Dim ar gael" + +msgid "Unknown content" +msgstr "Cynnwys anhysbys" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Mae rhywbeth o'i le ar osodiad y gronfa ddata. Sicrhewch fod y tablau " +"cronfa ddata priodol wedi eu creu, a sicrhewch fod y gronfa ddata yn " +"ddarllenadwy gan y defnyddiwr priodol." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Anghofioch eich cyfrinair neu enw defnyddiwr?" + +msgid "Date/time" +msgstr "Dyddiad/amser" + +msgid "User" +msgstr "Defnyddiwr" + +msgid "Action" +msgstr "Gweithred" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Does dim hanes newid gan y gwrthrych yma. Mae'n debyg nad ei ychwanegwyd " +"drwy'r safle gweinydd yma." + +msgid "Show all" +msgstr "Dangos pob canlyniad" + +msgid "Save" +msgstr "Cadw" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Chwilio" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s canlyniad" +msgstr[1] "%(counter)s canlyniad" +msgstr[2] "%(counter)s canlyniad" +msgstr[3] "%(counter)s canlyniad" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Cyfanswm o %(full_result_count)s" + +msgid "Save as new" +msgstr "Cadw fel newydd" + +msgid "Save and add another" +msgstr "Cadw ac ychwanegu un arall" + +msgid "Save and continue editing" +msgstr "Cadw a pharhau i olygu" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Diolch am dreulio amser o ansawdd gyda'r safle we yma heddiw." + +msgid "Log in again" +msgstr "Mewngofnodi eto" + +msgid "Password change" +msgstr "Newid cyfrinair" + +msgid "Your password was changed." +msgstr "Newidwyd eich cyfrinair." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Rhowch eich hen gyfrinair, er mwyn diogelwch, ac yna rhowch eich cyfrinair " +"newydd ddwywaith er mwyn gwirio y'i teipiwyd yn gywir." + +msgid "Change my password" +msgstr "Newid fy nghyfrinair" + +msgid "Password reset" +msgstr "Ailosod cyfrinair" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Mae'ch cyfrinair wedi ei osod. Gallwch fewngofnodi nawr." + +msgid "Password reset confirmation" +msgstr "Cadarnhad ailosod cyfrinair" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Rhowch eich cyfrinair newydd ddwywaith er mwyn gwirio y'i teipiwyd yn gywir." + +msgid "New password:" +msgstr "Cyfrinair newydd:" + +msgid "Confirm password:" +msgstr "Cadarnhewch y cyfrinair:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Roedd y ddolen i ailosod y cyfrinair yn annilys, o bosib oherwydd ei fod " +"wedi ei ddefnyddio'n barod. Gofynnwch i ailosod y cyfrinair eto." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Os na dderbyniwch ebost, sicrhewych y rhoddwyd y cyfeiriad sydd wedi ei " +"gofrestru gyda ni, ac edrychwch yn eich ffolder sbam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Derbyniwch yr ebost hwn oherwydd i chi ofyn i ailosod y cyfrinair i'ch " +"cyfrif yn %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ewch i'r dudalen olynol a dewsiwch gyfrinair newydd:" + +msgid "Your username, in case you've forgotten:" +msgstr "Eich enw defnyddiwr, rhag ofn eich bod wedi anghofio:" + +msgid "Thanks for using our site!" +msgstr "Diolch am ddefnyddio ein safle!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tîm %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Anghofioch eich cyfrinair? Rhowch eich cyfeiriad ebost isod ac fe ebostiwn " +"gyfarwyddiadau ar osod un newydd." + +msgid "Email address:" +msgstr "Cyfeiriad ebost:" + +msgid "Reset my password" +msgstr "Ailosod fy nghyfrinair" + +msgid "All dates" +msgstr "Holl ddyddiadau" + +#, python-format +msgid "Select %s" +msgstr "Dewis %s" + +#, python-format +msgid "Select %s to change" +msgstr "Dewis %s i newid" + +msgid "Date:" +msgstr "Dyddiad:" + +msgid "Time:" +msgstr "Amser:" + +msgid "Lookup" +msgstr "Archwilio" + +msgid "Currently:" +msgstr "Cyfredol:" + +msgid "Change:" +msgstr "Newid:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee9a9ca285922ad1ded77923b371da06f6b93b1f GIT binary patch literal 3801 zcmd5;%a0tz885(ru;vX3kMQ`gVvjB8-kCMnn=wlWyMAn77@vngk zz-zC<1H27*AMjq_A>gAx-bVxX0WI*yz!%#7?}5*u{}ONj{0NAjNFdDXdO+TP8OZBb z@%Jk54DgS@Pk=uHdi?ReGvEo}i$Lb{9`Fs|-+{dDci40a{1W(AoLOHZ#0B&_5N3UU z0^SIG1BfZ{7a*33w}3YQ-v#oy{{g%S_#yD;z|Vop!2KW#N@5Mj`>g{pB{qThiQnSy zeV_)u1H6BKBmXgw^?eFt{htGQ{a3)3f&T=)0(=S1;PHJR!Fu)s*Har-PF#w3?x(j#@chHyzw_6(!P#w>3Cy=>uV_W|O58GhgZpRD4 zLHx8GV7uMizH$8{0=5JX~sfq$EG4gNH{h;1vUU6tueJ+%b}A zo{C>>Nn_>EYC2eoRq00Biq*{fQnx^og2{J!HqMvY#Rb-kE>Q3^ic3gZi(!(1Ja$UO z>U_S?x!=-p9-__a9kEl!23?3VMrpBOlrxhoh~Iec@E3HS&ifh3f+cvdy7`$Ts&zDd|>fZ<|{GCOiB2KOp`Sw3^XRW%l2tJ zWG?HuDNCPg8rH2djhpb&oQ#WG4E;rrwZ0+=zL;?|Vq3RzbfEF!0hq0T&`^g;Lx#17 z$`h9BGToEZwtIFMwa)tw88wFacZ|G}wHWx^GjB1dry55_fCaW6pBnGu7%rrI)tqQg zdy4bAL{RZ|96p&u_{|doMk6^2#=8fj{pwc0bpqv5Ax<6pLAr@XVmUBSX3MCVw9u`s zDx+;Wh{$Q-hsd6qtoPCQV~=ozl~2RSvk2_sCJLLrR-g%ThN{L1&*}yYc#lInvZ=?1jNXC&jE`)|g}$shMk3?rjRKOo%tf z+$QVeNSC+UW#Gv7yE|0|6oyCzUxrj{7XEqMSjoCdp3y}Kzw}8x5A*wlb9(BFkZhC_ zqmsvGlQJ3jJ}qpX9VDxTmh8i1P4XqN)a@Nhx(_G4 zSmP!$Inl{L%e+s|YFlP>I16FgUtFxJDh<4!8S9Jb$mfgAiRNJ2#fzhQ@yNo)`o_tf zv-i^O!m4*cJ8(h@^eO0zVR34uaVOaKMXAHe(}PpV@{Szq8tWoC=|*1R9_Z8Z(1dN0 zeHzsZn|4-6o1F4RUiQgNW4By+=ma&dD~H|6O795$lDgCq2 z?*Cmp%;;}#+smc?zmbNG#p%Y8bL`+^jRCU8cTXwS>RjT2ECalOx$i_=N_1LVYYK{S zL`5dy{-Ub&tR1Nx{5G^Puu6|m9Z~IMyps)YSV|o-IuMiR0M=Ki@--q*&ft5jO7~zO zcfvNE>z}moxXplmD23J#dy_b$5xSMYt%1_4%`_&#?z2&b2W` zldxWg=d9J>)sC)8Rdv!!((w44+LMPiP!TB^$qq6o?1pk($L!a^gB^eFM&oqWW#u}M znLr~Z9_NdSy`wNT$_(M7JHe?n`+IJJRBT9%6;3JtZC#ljvPVbQ3>xv(GgmwDwq_MI Zbet{O{ECBZXHObqM{i>Y*1PDZ;$O?5S=ayo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..fa7ad2ac0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po @@ -0,0 +1,222 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s sydd ar gael" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dyma restr o'r %s sydd ar gael. Gellir dewis rhai drwyeu dewis yn y blwch " +"isod ac yna clicio'r saeth \"Dewis\" rhwng y ddau flwch." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Teipiwch yn y blwch i hidlo'r rhestr o %s sydd ar gael." + +msgid "Filter" +msgstr "Hidl" + +msgid "Choose all" +msgstr "Dewis y cyfan" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Cliciwch i ddewis pob %s yr un pryd." + +msgid "Choose" +msgstr "Dewis" + +msgid "Remove" +msgstr "Gwaredu" + +#, javascript-format +msgid "Chosen %s" +msgstr "Y %s a ddewiswyd" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dyma restr o'r %s a ddewiswyd. Gellir gwaredu rhai drwy eu dewis yn y blwch " +"isod ac yna clicio'r saeth \"Gwaredu\" rhwng y ddau flwch." + +msgid "Remove all" +msgstr "Gwaredu'r cyfan" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Cliciwch i waredu pob %s sydd wedi ei ddewis yr un pryd." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Dewiswyd %(sel)s o %(cnt)s" +msgstr[1] "Dewiswyd %(sel)s o %(cnt)s" +msgstr[2] "Dewiswyd %(sel)s o %(cnt)s" +msgstr[3] "Dewiswyd %(sel)s o %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Mae ganddoch newidiadau heb eu cadw mewn meysydd golygadwy. Os rhedwch y " +"weithred fe gollwch y newidiadau." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Rydych wedi dewis gweithred ond nid ydych wedi newid eich newidiadau i rai " +"meysydd eto. Cliciwch 'Iawn' i gadw. Bydd rhaid i chi ail-redeg y weithred." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Rydych wedi dewis gweithred ac nid ydych wedi newid unrhyw faes. Rydych " +"siwr o fod yn edrych am y botwm 'Ewch' yn lle'r botwm 'Cadw'." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Noder: Rydych %s awr o flaen amser y gweinydd." +msgstr[1] "Noder: Rydych %s awr o flaen amser y gweinydd." +msgstr[2] "Noder: Rydych %s awr o flaen amser y gweinydd." +msgstr[3] "Noder: Rydych %s awr o flaen amser y gweinydd." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Noder: Rydych %s awr tu ôl amser y gweinydd." +msgstr[1] "Noder: Rydych %s awr tu ôl amser y gweinydd." +msgstr[2] "Noder: Rydych %s awr tu ôl amser y gweinydd." +msgstr[3] "Noder: Rydych %s awr tu ôl amser y gweinydd." + +msgid "Now" +msgstr "Nawr" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Dewiswch amser" + +msgid "Midnight" +msgstr "Canol nos" + +msgid "6 a.m." +msgstr "6 y.b." + +msgid "Noon" +msgstr "Canol dydd" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Diddymu" + +msgid "Today" +msgstr "Heddiw" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Ddoe" + +msgid "Tomorrow" +msgstr "Fory" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Dangos" + +msgid "Hide" +msgstr "Cuddio" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..985a5e5e65f193df3a72f4241520ffbb4ed7ee85 GIT binary patch literal 16680 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..1435a3619 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,722 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Christian Joergensen , 2012 +# Dimitris Glezos , 2012 +# Erik Ramsgaard Wognsen , 2020 +# Erik Ramsgaard Wognsen , 2013,2015-2020 +# Finn Gruwier Larsen, 2011 +# Jannis Leidel , 2011 +# valberg , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-15 08:56+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s blev slettet." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan ikke slette %(name)s " + +msgid "Are you sure?" +msgstr "Er du sikker?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Slet valgte %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nej" + +msgid "Unknown" +msgstr "Ukendt" + +msgid "Any date" +msgstr "Når som helst" + +msgid "Today" +msgstr "I dag" + +msgid "Past 7 days" +msgstr "De sidste 7 dage" + +msgid "This month" +msgstr "Denne måned" + +msgid "This year" +msgstr "Dette år" + +msgid "No date" +msgstr "Ingen dato" + +msgid "Has date" +msgstr "Har dato" + +msgid "Empty" +msgstr "Tom" + +msgid "Not empty" +msgstr "Ikke tom" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Indtast venligst det korrekte %(username)s og adgangskode for en " +"personalekonto. Bemærk at begge felter kan være versalfølsomme." + +msgid "Action:" +msgstr "Handling" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Tilføj endnu en %(verbose_name)s" + +msgid "Remove" +msgstr "Fjern" + +msgid "Addition" +msgstr "Tilføjelse" + +msgid "Change" +msgstr "Ret" + +msgid "Deletion" +msgstr "Sletning" + +msgid "action time" +msgstr "handlingstid" + +msgid "user" +msgstr "bruger" + +msgid "content type" +msgstr "indholdstype" + +msgid "object id" +msgstr "objekt-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekt repr" + +msgid "action flag" +msgstr "handlingsflag" + +msgid "change message" +msgstr "ændringsmeddelelse" + +msgid "log entry" +msgstr "logmeddelelse" + +msgid "log entries" +msgstr "logmeddelelser" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Tilføjede “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Ændrede “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Slettede “%(object)s”." + +msgid "LogEntry Object" +msgstr "LogEntry-objekt" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Tilføjede {name} “{object}”." + +msgid "Added." +msgstr "Tilføjet." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Ændrede {fields} for {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Ændrede {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Slettede {name} “{object}”." + +msgid "No fields changed." +msgstr "Ingen felter ændret." + +msgid "None" +msgstr "Ingen" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Hold “Ctrl”, eller “Æbletasten” på Mac, nede for at vælge mere end én." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” blev tilføjet." + +msgid "You may edit it again below." +msgstr "Du kan redigere den/det igen herunder." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” blev tilføjet. Du kan tilføje endnu en/et {name} herunder." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” blev ændret. Du kan redigere den/det igen herunder." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” blev tilføjet. Du kan redigere den/det igen herunder." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” blev ændret. Du kan tilføje endnu en/et {name} herunder." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” blev ændret." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Der skal være valgt nogle emner for at man kan udføre handlinger på dem. " +"Ingen emner er blev ændret." + +msgid "No action selected." +msgstr "Ingen handling valgt." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” blev slettet." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s med ID “%(key)s” findes ikke. Måske er objektet blevet slettet?" + +#, python-format +msgid "Add %s" +msgstr "Tilføj %s" + +#, python-format +msgid "Change %s" +msgstr "Ret %s" + +#, python-format +msgid "View %s" +msgstr "Vis %s" + +msgid "Database error" +msgstr "Databasefejl" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s blev ændret." +msgstr[1] "%(count)s %(name)s blev ændret." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valgt" +msgstr[1] "Alle %(total_count)s valgt" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 af %(cnt)s valgt" + +#, python-format +msgid "Change history: %s" +msgstr "Ændringshistorik: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Sletning af %(class_name)s %(instance)s vil kræve sletning af følgende " +"beskyttede relaterede objekter: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django website-administration" + +msgid "Django administration" +msgstr "Django administration" + +msgid "Site administration" +msgstr "Website-administration" + +msgid "Log in" +msgstr "Log ind" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administration" + +msgid "Page not found" +msgstr "Siden blev ikke fundet" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Vi beklager, men den ønskede side kunne ikke findes" + +msgid "Home" +msgstr "Hjem" + +msgid "Server error" +msgstr "Serverfejl" + +msgid "Server error (500)" +msgstr "Serverfejl (500)" + +msgid "Server Error (500)" +msgstr "Serverfejl (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Der opstod en fejl. Fejlen er rapporteret til website-administratoren via e-" +"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed." + +msgid "Run the selected action" +msgstr "Udfør den valgte handling" + +msgid "Go" +msgstr "Udfør" + +msgid "Click here to select the objects across all pages" +msgstr "Klik her for at vælge objekter på tværs af alle sider" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Vælg alle %(total_count)s %(module_name)s " + +msgid "Clear selection" +msgstr "Ryd valg" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeller i applikationen %(name)s" + +msgid "Add" +msgstr "Tilføj" + +msgid "View" +msgstr "Vis" + +msgid "You don’t have permission to view or edit anything." +msgstr "Du har ikke rettigheder til at se eller redigere noget." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Indtast først et brugernavn og en adgangskode. Derefter får du yderligere " +"redigeringsmuligheder." + +msgid "Enter a username and password." +msgstr "Indtast et brugernavn og en adgangskode." + +msgid "Change password" +msgstr "Skift adgangskode" + +msgid "Please correct the error below." +msgstr "Ret venligst fejlen herunder." + +msgid "Please correct the errors below." +msgstr "Ret venligst fejlene herunder." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Indtast en ny adgangskode for brugeren %(username)s." + +msgid "Welcome," +msgstr "Velkommen," + +msgid "View site" +msgstr "Se side" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Log out" +msgstr "Log ud" + +#, python-format +msgid "Add %(name)s" +msgstr "Tilføj %(name)s" + +msgid "History" +msgstr "Historik" + +msgid "View on site" +msgstr "Se på website" + +msgid "Filter" +msgstr "Filtrer" + +msgid "Clear all filters" +msgstr "Nulstil alle filtre" + +msgid "Remove from sorting" +msgstr "Fjern fra sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteringsprioritet: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Skift sortering" + +msgid "Delete" +msgstr "Slet" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Hvis du sletter %(object_name)s '%(escaped_object)s', vil du også slette " +"relaterede objekter, men din konto har ikke rettigheder til at slette " +"følgende objekttyper:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Sletning af %(object_name)s ' %(escaped_object)s ' vil kræve sletning af " +"følgende beskyttede relaterede objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Er du sikker på du vil slette %(object_name)s \"%(escaped_object)s\"? Alle " +"de følgende relaterede objekter vil blive slettet:" + +msgid "Objects" +msgstr "Objekter" + +msgid "Yes, I’m sure" +msgstr "Ja, jeg er sikker" + +msgid "No, take me back" +msgstr "Nej, tag mig tilbage" + +msgid "Delete multiple objects" +msgstr "Slet flere objekter" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Sletning af de valgte %(objects_name)s ville resultere i sletning af " +"relaterede objekter, men din konto har ikke tilladelse til at slette " +"følgende typer af objekter:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Sletning af de valgte %(objects_name)s vil kræve sletning af følgende " +"beskyttede relaterede objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Er du sikker på du vil slette de valgte %(objects_name)s? Alle de følgende " +"objekter og deres relaterede emner vil blive slettet:" + +msgid "Delete?" +msgstr "Slet?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Efter %(filter_title)s " + +msgid "Summary" +msgstr "Sammendrag" + +msgid "Recent actions" +msgstr "Seneste handlinger" + +msgid "My actions" +msgstr "Mine handlinger" + +msgid "None available" +msgstr "Ingen tilgængelige" + +msgid "Unknown content" +msgstr "Ukendt indhold" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Der er noget galt med databaseinstallationen. Kontroller om " +"databasetabellerne er blevet oprettet og at databasen er læsbar for den " +"pågældende bruger." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Du er logget ind som %(username)s, men du har ikke tilladelse til at tilgå " +"denne site. Vil du logge ind med en anden brugerkonto?" + +msgid "Forgotten your password or username?" +msgstr "Har du glemt dit password eller brugernavn?" + +msgid "Toggle navigation" +msgstr "Vis/skjul navigation" + +msgid "Date/time" +msgstr "Dato/tid" + +msgid "User" +msgstr "Bruger" + +msgid "Action" +msgstr "Funktion" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dette objekt har ingen ændringshistorik. Det blev formentlig ikke tilføjet " +"via dette administrations-site" + +msgid "Show all" +msgstr "Vis alle" + +msgid "Save" +msgstr "Gem" + +msgid "Popup closing…" +msgstr "Popup lukker…" + +msgid "Search" +msgstr "Søg" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultater" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s i alt" + +msgid "Save as new" +msgstr "Gem som ny" + +msgid "Save and add another" +msgstr "Gem og tilføj endnu en" + +msgid "Save and continue editing" +msgstr "Gem og fortsæt med at redigere" + +msgid "Save and view" +msgstr "Gem og vis" + +msgid "Close" +msgstr "Luk" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Redigér valgte %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Tilføj endnu en %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Slet valgte %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Tak for den kvalitetstid du brugte på websitet i dag." + +msgid "Log in again" +msgstr "Log ind igen" + +msgid "Password change" +msgstr "Skift adgangskode" + +msgid "Your password was changed." +msgstr "Din adgangskode blev ændret." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Indtast venligst din gamle adgangskode for en sikkerheds skyld og indtast så " +"din nye adgangskode to gange, så vi kan være sikre på, at den er indtastet " +"korrekt." + +msgid "Change my password" +msgstr "Skift min adgangskode" + +msgid "Password reset" +msgstr "Nulstil adgangskode" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Din adgangskode er blevet sat. Du kan logge ind med den nu." + +msgid "Password reset confirmation" +msgstr "Bekræftelse for nulstilling af adgangskode" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Indtast venligst din nye adgangskode to gange, så vi kan være sikre på, at " +"den er indtastet korrekt." + +msgid "New password:" +msgstr "Ny adgangskode:" + +msgid "Confirm password:" +msgstr "Bekræft ny adgangskode:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Linket for nulstilling af adgangskoden er ugyldigt, måske fordi det allerede " +"har været brugt. Anmod venligst påny om nulstilling af adgangskoden." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Vi har sendt dig en e-mail med instruktioner for at indstille din " +"adgangskode, hvis en konto med den angivne e-mail-adresse findes. Du burde " +"modtage den snarest." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Hvis du ikke modtager en e-mail, så tjek venligst, at du har indtastet den e-" +"mail-adresse, du registrerede dig med, og tjek din spam-mappe." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Du modtager denne e-mail, fordi du har anmodet om en nulstilling af " +"adgangskoden til din brugerkonto ved %(site_name)s ." + +msgid "Please go to the following page and choose a new password:" +msgstr "Gå venligst til denne side og vælg en ny adgangskode:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Hvis du skulle have glemt dit brugernavn er det:" + +msgid "Thanks for using our site!" +msgstr "Tak fordi du brugte vores website!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Med venlig hilsen %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Har du glemt din adgangskode? Skriv din e-mail-adresse herunder, så sender " +"vi dig instruktioner i at vælge en ny adgangskode." + +msgid "Email address:" +msgstr "E-mail-adresse:" + +msgid "Reset my password" +msgstr "Nulstil min adgangskode" + +msgid "All dates" +msgstr "Alle datoer" + +#, python-format +msgid "Select %s" +msgstr "Vælg %s" + +#, python-format +msgid "Select %s to change" +msgstr "Vælg %s, der skal ændres" + +#, python-format +msgid "Select %s to view" +msgstr "Vælg %s, der skal vises" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Tid:" + +msgid "Lookup" +msgstr "Slå op" + +msgid "Currently:" +msgstr "Nuværende:" + +msgid "Change:" +msgstr "Ændring:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..88014485495e1fd0026974d962e8091ceba219c0 GIT binary patch literal 5098 zcmb`LO^h5z6~_x0AZ++_Lik8bDoZx3iM#hB_Oi@ogU#COteyRkcf7_DM5>vt>FJ&B zs-e1i)^mx>DM$!JfJl6aBm!GPAi{xzBLx&`QOE%hhe+grEC>kYg1AKD0uujMU9&qo z-ZzME)Xkt;kooy#y$al0el~2!fVY9CJRb&WUID%z{4z-Mz7Nv)Ux2rRFM+p!uX^4DBhmOfKx&`% z^+oVj)IST-KA#8kH!=1_a0>N*!iaQ^@ZF_8W$6!9CS`M=J0D1LE`cOx4WxA+2A=}!;J3lb`^xc8fVAFa z@B#2AAnpG*@JryUAdSBSWqcL99Y&z_e(d>E&!2f-^?cUzInQ5uzTo+5&)<2z==l-| zGqOK;Ui18;=gXdd@%*djE1sC@>_Vgm?!ZRfuhK6__vD9np?nMl>R?Au4x)r8A4MVi zlP<^~0~FFHJy3=7Rr-B5N)=@sh5VBqxa`hz%>N=A&~tAI=d0ZRCQuB!4~1+wgEEUk z_Uu0}H~Ss)$p!A}S~P^%@`K+O);Qa3l3$}N^AjW)NM zH{5buq$!%Yuv}x8kS+B4jm&gcx_%5TXYUR>AsaHQOT!jr-4w#~*kY1e)E`VD$xaL9 z+D;c~kDV@*WXr-dT6p)^auTT|ZdtaXwZhBFD!-r$E({%(w{&5+Xh{)~K67ch(r`LX zxc^v){>BIMx@;vXdPB?ZKeSt(dPQ%s)rQrifwN9g9;7d}E<3gyx8B0QS}Vyp{%lL~ zG|8dqCKm$+4&C`P(d*kJ*O}z?p7)|e#WXeJiE>NS^+lW`)mvQPDCkkVK}PfA_-N@U zqtK|qpt`hM5@Tq0yQMj%%RJmys2w}+O60xZf0U?H(d$X1Be+LRXPV?@wO&W!$naE4 z`lD0hchh+pkMve~qJ8zrF323dNXwCDwFLaQeaf#a&ks;9U;38inTX)> ziYy^iEODn5WQdY(5)~rF?lO&XryUH3!*-0WLQ9RZ<}>jdOIX+yr2N|DRbH~8uq(jLw4OOJc6BvwPS zk%1{n=}OfM2v(?a)BP19qr|!})z{2Y(}_&W4Jg`4JiO9Y0uk!C5<0gb6ZN{0-H>Nm z*%o)fu!8q+y9b){Nf7M=w~4f(>bM+^{N-HgS#g z$XVIZ#sY5`Q+}=rozdQ1vslz zkPWe_%B{R;CpxJ})Er$;lS?~)uC^G=?vA6qn$iR(RYOMz*i}ATPwbAAP?#85OA8~? zU{RYauX5FK)qH+>j+Z~@#}&V8o=+W`8`()O#BS=*6=`f=yW>o%+imD-hV_3<&F;-T zYDpSzUqSRsli1}S$CWD56kocH?JH?qzB!hF$#lPFc`b?ZPNCX%x5*AQ;oB(L2Fd5v zJ(I$U6flu|bZKdqZMZBTLtu)eMZn7F%Re}>xhW02pVs2;tou#qhl754;<6L7{X@gn z+nc!6<;6#8k|va&B$S`n9Pdq+p9o8cM9fy}u)&FfrU!NAGT7k)pnV}ERs%{dppGrWH1{^&Q4IIAr;Wq7KTUs zqMU56n}npMHiEu4WrU1Hsiljr=p-pdXA+jrFp$1nZUqzWFX4`N?1<)l=l>|0)7cG0Tf&`=*%Cf% zCYB2RXOb??4)2Cen@~^x3Q%feNI721xYO6^80*B_mkooe5nxLHr>ltMB1#cY4m%x| zolbv6)ZD&mELR$vb6o4lU>NjEilyD9aoWkZuTm?lkRhPq=JRuIX3$om)4|k)!}N3| z$xx?c*6)DsUsDz=#iIdXVwqWvuqOuvq3eTX$*R~NuTm={m%H{|sUQxrW~4B*H@pbz z;2y$ToU4(~sO>8l(bocri{tKyR?xTr|K@3yGAni_>66Mi&J~g?|s66, 2012 +# Erik Ramsgaard Wognsen , 2021 +# Erik Ramsgaard Wognsen , 2012,2015-2016,2020 +# Finn Gruwier Larsen, 2011 +# Jannis Leidel , 2011 +# Mathias Rav , 2017 +# valberg , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:53+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Tilgængelige %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dette er listen over tilgængelige %s. Du kan vælge dem enkeltvis ved at " +"markere dem i kassen nedenfor og derefter klikke på \"Vælg\"-pilen mellem de " +"to kasser." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skriv i dette felt for at filtrere listen af tilgængelige %s." + +msgid "Filter" +msgstr "Filtrér" + +msgid "Choose all" +msgstr "Vælg alle" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klik for at vælge alle %s med det samme." + +msgid "Choose" +msgstr "Vælg" + +msgid "Remove" +msgstr "Fjern" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valgte %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dette er listen over valgte %s. Du kan fjerne dem enkeltvis ved at markere " +"dem i kassen nedenfor og derefter klikke på \"Fjern\"-pilen mellem de to " +"kasser." + +msgid "Remove all" +msgstr "Fjern alle" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik for at fjerne alle valgte %s med det samme." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s af %(cnt)s valgt" +msgstr[1] "%(sel)s af %(cnt)s valgt" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Du har ugemte ændringer af et eller flere redigerbare felter. Hvis du " +"udfører en handling fra drop-down-menuen, vil du miste disse ændringer." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Du har valgt en handling, men du har ikke gemt dine ændringer til et eller " +"flere felter. Klik venligst OK for at gemme og vælg dernæst handlingen igen." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Du har valgt en handling, og du har ikke udført nogen ændringer på felter. " +"Du søger formentlig Udfør-knappen i stedet for Gem-knappen." + +msgid "Now" +msgstr "Nu" + +msgid "Midnight" +msgstr "Midnat" + +msgid "6 a.m." +msgstr "Klokken 6" + +msgid "Noon" +msgstr "Middag" + +msgid "6 p.m." +msgstr "Klokken 18" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Obs: Du er %s time forud i forhold til servertiden." +msgstr[1] "Obs: Du er %s timer forud i forhold til servertiden." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Obs: Du er %s time bagud i forhold til servertiden." +msgstr[1] "Obs: Du er %s timer bagud i forhold til servertiden." + +msgid "Choose a Time" +msgstr "Vælg et Tidspunkt" + +msgid "Choose a time" +msgstr "Vælg et tidspunkt" + +msgid "Cancel" +msgstr "Annuller" + +msgid "Today" +msgstr "I dag" + +msgid "Choose a Date" +msgstr "Vælg en Dato" + +msgid "Yesterday" +msgstr "I går" + +msgid "Tomorrow" +msgstr "I morgen" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Marts" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "maj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "dec" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "O" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Vis" + +msgid "Hide" +msgstr "Skjul" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b6bae067f85f57a3520c49baf886d9f38bf935a GIT binary patch literal 17714 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, 2011 +# Dimitris Glezos , 2012 +# Florian Apolloner , 2020-2022 +# Jannis Vajen, 2013 +# Jannis Leidel , 2013-2018,2020 +# Jannis Vajen, 2016 +# Markus Holtermann , 2020 +# Markus Holtermann , 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-15 11:22+0000\n" +"Last-Translator: Florian Apolloner \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ausgewählte %(verbose_name_plural)s löschen" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Erfolgreich %(count)d %(items)s gelöscht." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kann %(name)s nicht löschen" + +msgid "Are you sure?" +msgstr "Sind Sie sicher?" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nein" + +msgid "Unknown" +msgstr "Unbekannt" + +msgid "Any date" +msgstr "Alle Daten" + +msgid "Today" +msgstr "Heute" + +msgid "Past 7 days" +msgstr "Letzte 7 Tage" + +msgid "This month" +msgstr "Diesen Monat" + +msgid "This year" +msgstr "Dieses Jahr" + +msgid "No date" +msgstr "Kein Datum" + +msgid "Has date" +msgstr "Besitzt Datum" + +msgid "Empty" +msgstr "Leer" + +msgid "Not empty" +msgstr "Nicht leer" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Bitte %(username)s und Passwort für einen Staff-Account eingeben. Beide " +"Felder berücksichtigen die Groß-/Kleinschreibung." + +msgid "Action:" +msgstr "Aktion:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "%(verbose_name)s hinzufügen" + +msgid "Remove" +msgstr "Entfernen" + +msgid "Addition" +msgstr "Hinzugefügt" + +msgid "Change" +msgstr "Ändern" + +msgid "Deletion" +msgstr "Gelöscht" + +msgid "action time" +msgstr "Zeitpunkt der Aktion" + +msgid "user" +msgstr "Benutzer" + +msgid "content type" +msgstr "Inhaltstyp" + +msgid "object id" +msgstr "Objekt-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "Objekt Darst." + +msgid "action flag" +msgstr "Aktionskennzeichen" + +msgid "change message" +msgstr "Änderungsmeldung" + +msgid "log entry" +msgstr "Logeintrag" + +msgid "log entries" +msgstr "Logeinträge" + +#, python-format +msgid "Added “%(object)s”." +msgstr "„%(object)s“ hinzufügt." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "„%(object)s“ geändert – %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "„%(object)s“ gelöscht." + +msgid "LogEntry Object" +msgstr "LogEntry Objekt" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} „{object}“ hinzugefügt." + +msgid "Added." +msgstr "Hinzugefügt." + +msgid "and" +msgstr "und" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} für {name} „{object}“ geändert." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} geändert." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} „{object}“ gelöscht." + +msgid "No fields changed." +msgstr "Keine Felder geändert." + +msgid "None" +msgstr "-" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um " +"mehrere Einträge auszuwählen." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}“ wurde erfolgreich hinzugefügt." + +msgid "You may edit it again below." +msgstr "Es kann unten erneut geändert werden." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} „{obj}“ wurde erfolgreich hinzugefügt und kann nun unten um ein " +"Weiteres ergänzt werden." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ wurde erfolgreich geändert und kann unten erneut geändert " +"werden." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ wurde erfolgreich hinzugefügt und kann unten geändert werden." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} „{obj}“ wurde erfolgreich geändert und kann nun unten erneut ergänzt " +"werden." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}“ wurde erfolgreich geändert." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Es müssen Objekte aus der Liste ausgewählt werden, um Aktionen " +"durchzuführen. Es wurden keine Objekte geändert." + +msgid "No action selected." +msgstr "Keine Aktion ausgewählt." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s“ wurde erfolgreich gelöscht." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s mit ID „%(key)s“ existiert nicht. Eventuell gelöscht?" + +#, python-format +msgid "Add %s" +msgstr "%s hinzufügen" + +#, python-format +msgid "Change %s" +msgstr "%s ändern" + +#, python-format +msgid "View %s" +msgstr "%s ansehen" + +msgid "Database error" +msgstr "Datenbankfehler" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s wurde erfolgreich geändert." +msgstr[1] "%(count)s %(name)s wurden erfolgreich geändert." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s ausgewählt" +msgstr[1] "Alle %(total_count)s ausgewählt" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 von %(cnt)s ausgewählt" + +#, python-format +msgid "Change history: %s" +msgstr "Änderungsgeschichte: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Das Löschen des %(class_name)s-Objekts „%(instance)s“ würde ein Löschen der " +"folgenden geschützten verwandten Objekte erfordern: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django-Systemverwaltung" + +msgid "Django administration" +msgstr "Django-Verwaltung" + +msgid "Site administration" +msgstr "Website-Verwaltung" + +msgid "Log in" +msgstr "Anmelden" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-Administration" + +msgid "Page not found" +msgstr "Seite nicht gefunden" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" +"Es tut uns leid, aber die angeforderte Seite konnte nicht gefunden werden." + +msgid "Home" +msgstr "Start" + +msgid "Server error" +msgstr "Serverfehler" + +msgid "Server error (500)" +msgstr "Serverfehler (500)" + +msgid "Server Error (500)" +msgstr "Serverfehler (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ein Fehler ist aufgetreten und wurde an die Administratoren per E-Mail " +"gemeldet. Danke für die Geduld, der Fehler sollte in Kürze behoben sein." + +msgid "Run the selected action" +msgstr "Ausgewählte Aktion ausführen" + +msgid "Go" +msgstr "Ausführen" + +msgid "Click here to select the objects across all pages" +msgstr "Hier klicken, um die Objekte aller Seiten auszuwählen" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Alle %(total_count)s %(module_name)s auswählen" + +msgid "Clear selection" +msgstr "Auswahl widerrufen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelle der %(name)s-Anwendung" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "View" +msgstr "Ansehen" + +msgid "You don’t have permission to view or edit anything." +msgstr "" +"Das Benutzerkonto besitzt nicht die nötigen Rechte, um etwas anzusehen oder " +"zu ändern." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Bitte zuerst einen Benutzernamen und ein Passwort eingeben. Danach können " +"weitere Optionen für den Benutzer geändert werden." + +msgid "Enter a username and password." +msgstr "Bitte einen Benutzernamen und ein Passwort eingeben." + +msgid "Change password" +msgstr "Passwort ändern" + +msgid "Please correct the error below." +msgstr "Bitte den unten aufgeführten Fehler korrigieren." + +msgid "Please correct the errors below." +msgstr "Bitte die unten aufgeführten Fehler korrigieren." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Bitte geben Sie ein neues Passwort für den Benutzer %(username)s ein." + +msgid "Welcome," +msgstr "Willkommen," + +msgid "View site" +msgstr "Website anzeigen" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Log out" +msgstr "Abmelden" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s hinzufügen" + +msgid "History" +msgstr "Geschichte" + +msgid "View on site" +msgstr "Auf der Website anzeigen" + +msgid "Filter" +msgstr "Filter" + +msgid "Clear all filters" +msgstr "Alle Filter zurücksetzen" + +msgid "Remove from sorting" +msgstr "Aus der Sortierung entfernen" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sortierung: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sortierung ein-/ausschalten" + +msgid "Delete" +msgstr "Löschen" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Das Löschen des %(object_name)s „%(escaped_object)s“ hätte das Löschen davon " +"abhängiger Daten zur Folge, aber Sie haben nicht die nötigen Rechte, um die " +"folgenden davon abhängigen Daten zu löschen:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Das Löschen von %(object_name)s „%(escaped_object)s“ würde ein Löschen der " +"folgenden geschützten verwandten Objekte erfordern:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Sind Sie sicher, dass Sie %(object_name)s „%(escaped_object)s“ löschen " +"wollen? Es werden zusätzlich die folgenden davon abhängigen Daten gelöscht:" + +msgid "Objects" +msgstr "Objekte" + +msgid "Yes, I’m sure" +msgstr "Ja, ich bin sicher" + +msgid "No, take me back" +msgstr "Nein, bitte abbrechen" + +msgid "Delete multiple objects" +msgstr "Mehrere Objekte löschen" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Das Löschen der ausgewählten %(objects_name)s würde im Löschen geschützter " +"verwandter Objekte resultieren, allerdings besitzt Ihr Benutzerkonto nicht " +"die nötigen Rechte, um diese zu löschen:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Das Löschen der ausgewählten %(objects_name)s würde ein Löschen der " +"folgenden geschützten verwandten Objekte erfordern:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Sind Sie sicher, dass Sie die ausgewählten %(objects_name)s löschen wollen? " +"Alle folgenden Objekte und ihre verwandten Objekte werden gelöscht:" + +msgid "Delete?" +msgstr "Löschen?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Nach %(filter_title)s " + +msgid "Summary" +msgstr "Zusammenfassung" + +msgid "Recent actions" +msgstr "Neueste Aktionen" + +msgid "My actions" +msgstr "Meine Aktionen" + +msgid "None available" +msgstr "Keine vorhanden" + +msgid "Unknown content" +msgstr "Unbekannter Inhalt" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Etwas stimmt nicht mit der Datenbankkonfiguration. Bitte sicherstellen, dass " +"die richtigen Datenbanktabellen angelegt wurden und die Datenbank vom " +"verwendeten Datenbankbenutzer auch lesbar ist." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Sie sind als %(username)s angemeldet, aber nicht autorisiert, auf diese " +"Seite zuzugreifen. Wollen Sie sich mit einem anderen Account anmelden?" + +msgid "Forgotten your password or username?" +msgstr "Benutzername oder Passwort vergessen?" + +msgid "Toggle navigation" +msgstr "Navigation ein-/ausblenden" + +msgid "Start typing to filter…" +msgstr "Eingabe beginnen um zu filtern…" + +msgid "Filter navigation items" +msgstr "Navigationselemente filtern" + +msgid "Date/time" +msgstr "Datum/Zeit" + +msgid "User" +msgstr "Benutzer" + +msgid "Action" +msgstr "Aktion" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht " +"über diese Verwaltungsseiten angelegt." + +msgid "Show all" +msgstr "Zeige alle" + +msgid "Save" +msgstr "Sichern" + +msgid "Popup closing…" +msgstr "Popup wird geschlossen..." + +msgid "Search" +msgstr "Suchen" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s Ergebnis" +msgstr[1] "%(counter)s Ergebnisse" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s gesamt" + +msgid "Save as new" +msgstr "Als neu sichern" + +msgid "Save and add another" +msgstr "Sichern und neu hinzufügen" + +msgid "Save and continue editing" +msgstr "Sichern und weiter bearbeiten" + +msgid "Save and view" +msgstr "Sichern und ansehen" + +msgid "Close" +msgstr "Schließen" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ausgewählte %(model)s ändern" + +#, python-format +msgid "Add another %(model)s" +msgstr "%(model)s hinzufügen" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Ausgewählte %(model)s löschen" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" +"Vielen Dank, dass Sie heute ein paar nette Minuten auf dieser Webseite " +"verbracht haben." + +msgid "Log in again" +msgstr "Erneut anmelden" + +msgid "Password change" +msgstr "Passwort ändern" + +msgid "Your password was changed." +msgstr "Ihr Passwort wurde geändert." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Aus Sicherheitsgründen bitte zuerst das alte Passwort und darunter dann " +"zweimal das neue Passwort eingeben, um sicherzustellen, dass es es korrekt " +"eingegeben wurde." + +msgid "Change my password" +msgstr "Mein Passwort ändern" + +msgid "Password reset" +msgstr "Passwort zurücksetzen" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ihr Passwort wurde zurückgesetzt. Sie können sich nun anmelden." + +msgid "Password reset confirmation" +msgstr "Zurücksetzen des Passworts bestätigen" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Bitte geben Sie Ihr neues Passwort zweimal ein, damit wir überprüfen können, " +"ob es richtig eingetippt wurde." + +msgid "New password:" +msgstr "Neues Passwort:" + +msgid "Confirm password:" +msgstr "Passwort wiederholen:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Der Link zum Zurücksetzen Ihres Passworts ist ungültig, wahrscheinlich weil " +"er schon einmal benutzt wurde. Bitte setzen Sie Ihr Passwort erneut zurück." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Wir haben eine E-Mail zum Zurücksetzen des Passwortes an die angegebene E-" +"Mail-Adresse gesendet, sofern ein entsprechendes Konto existiert. Sie sollte " +"in Kürze ankommen." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Falls die E-Mail nicht angekommen sein sollte, bitte die E-Mail-Adresse auf " +"Richtigkeit und gegebenenfalls den Spam-Ordner überprüfen." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Diese E-Mail wurde aufgrund einer Anfrage zum Zurücksetzen des Passworts auf " +"der Website %(site_name)s versendet." + +msgid "Please go to the following page and choose a new password:" +msgstr "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Der Benutzername, falls vergessen:" + +msgid "Thanks for using our site!" +msgstr "Vielen Dank, dass Sie unsere Website benutzen!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Das Team von %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Passwort vergessen? Einfach die E-Mail-Adresse unten eingeben und den " +"Anweisungen zum Zurücksetzen des Passworts in der E-Mail folgen." + +msgid "Email address:" +msgstr "E-Mail-Adresse:" + +msgid "Reset my password" +msgstr "Mein Passwort zurücksetzen" + +msgid "All dates" +msgstr "Alle Daten" + +#, python-format +msgid "Select %s" +msgstr "%s auswählen" + +#, python-format +msgid "Select %s to change" +msgstr "%s zur Änderung auswählen" + +#, python-format +msgid "Select %s to view" +msgstr "%s zum Ansehen auswählen" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Zeit:" + +msgid "Lookup" +msgstr "Suchen" + +msgid "Currently:" +msgstr "Aktuell:" + +msgid "Change:" +msgstr "Ändern:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..871b20579373f3ce561ac5cc19256eac8b5a6ac5 GIT binary patch literal 5203 zcmbuCU2I%O6~_lyXmO!{3js=7rlAf_+r5rWaotUw#KhTrZfs>Ygh+g7cJJ)oTi-jg z%$>U%`vDmVC=wqMAC*8Y1w{G;hzBGDQd%Kd0$$(=37(3`6XJyzB*X)P|Cu}2Ua#FG zqF0{%-T6Lq&Y5$MU!ANx$MBp$d4S3r8M{iX;0MpI{2Jy#!>+8P< z--h}hef_VVe*@o+_J4T($MYU6Hi7o{gKq^N0Y3-^;34oLcsH1Peh$PRdlo+=+SkFm zz;F5b^PWEdu?2exd=vO%kkBJqVW%a)IR6y zb@1J&e-fm9J`48Wz}T0;@RzJ3A3A8X==&f5lY1eSng{~`De z@QWZ+#-8)_?|J?dd>rjBgEjE)An9=mlW2SZl0D`@T6fXc&wyl)70(t(a$N<gU3c~#EIqXS*JFtVkJ`0lW$qye!`7jF9!Ja^Q5G6qQ5DMA< z7z+7g6@~Oi4^-lOmEIpgA-hkbkblxcb}OF~{)KEp&tnCguX6uRpcwWM6gu-f$^r`M zzkFbB_7n=;&8K}MOyO)iCmiYNKhhvkvZ4HuCVA?Y)dW*`lx;{^MU zh3I!an73sVtMHDN-GAtyIQ2z6WGfx3NduRhqC7}ntSS4p7}tz2uocA_$DfTPPvQ)k z?s73=;J}?f73-xrNc4~k90fg!cgSdd96wk%%0Xz< zU{G7yp~M*4-3~R!beRSF3bk$L9f`abyiSP<72QrE9l||YI@KgMYpwSsjtoz=q(3?} z-n-7rc&LZPiT2eeyDBsIA}vRr6$$upc_X1TE;=^W>T##Pbw5De-2ATPsR-fniYy^i zPvTB1$PmVZILt+Y-DMJHPCFP5hwU5P#x-5%iPp{lT@7!ArcXoBxwV*X1nSg?jj5+e z(iDBct;NG2zFWKub3IhOu>Fs?^Nct`nJ-8&R~AczmT{3=!J65<0U16YaK~sZWa8F4M)5~ z>-t#hMZ{H#ofW){b@`Z50mpi_V@d^YOe^S3S~xkcn;4E>sgJfbw4%1gXj@a*oUTNr zxvMpIBX_m6qTFOOvNbxgmCL=2S7fM)<|}N~=x6ZJtDX(3AD1S>4Xg3+8C)YhaY^>I zvDHS_i^J;2@?KVL=^CF{U8!D@gP4X^>1$Twb4TW8tFyD!xdlG^WNr3|$By8cxF9lH zZ5g4mL|AQV{F3NLLMFTscOu~F6kp2|rf5uETM)`)n5TNV=*enJinPX0OOwJWrz30o zwV9dWa2QxxH15i4K}V-Eg|sCSKYJ#WGlwS{XB($>&NUkxnK%hgl?s9(P}R7V*X&F` z5wSW-chh9jE?#ccs|!2hXs@m`)l;gYLqzKuUueg6TS{n4POK)m5lOYKO`6rX>bq*T zICqp6uZz=)KfK6i4l8LJcl7c)0HOg)?K$fInZ%LIPzcz)-);7JjX7mdV&|mYuxw?mNN!G*Dl9Cyt2~y>oelEr(=OLhjQlXd zs)~9gUs|IahtyJ@8Tk%AI(*G_Z+!vU##b6b(TBP%g=ypd(v2@{0C(qbT=eTS#Xio@ zhdM!$ulP_zCPP4o6|QgOZe3v)m^s1

    8dfLa!~mn|(>4*|^@d;@$^$EcRKfJ1P*Q z7(GL=6EZfx3GyEwEu7#h=Us$>gDDMx5gW>ZIN7qGo6Xa$8yWqZLy9E-^%|rAf, 2020-2021 +# Jannis Leidel , 2011,2013-2016 +# Jannis Vajen, 2016 +# Markus Holtermann , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-28 17:14+0000\n" +"Last-Translator: Raphael Michel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Verfügbare %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dies ist die Liste der verfügbaren %s. Einfach im unten stehenden Feld " +"markieren und mithilfe des „Auswählen“-Pfeils auswählen." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Durch Eingabe in diesem Feld lässt sich die Liste der verfügbaren %s " +"eingrenzen." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Alle auswählen" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klicken, um alle %s auf einmal auszuwählen." + +msgid "Choose" +msgstr "Auswählen" + +msgid "Remove" +msgstr "Entfernen" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ausgewählte %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dies ist die Liste der ausgewählten %s. Einfach im unten stehenden Feld " +"markieren und mithilfe des „Entfernen“-Pfeils wieder entfernen." + +msgid "Remove all" +msgstr "Alle entfernen" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klicken, um alle ausgewählten %s auf einmal zu entfernen." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s von %(cnt)s ausgewählt" +msgstr[1] "%(sel)s von %(cnt)s ausgewählt" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Sie haben Änderungen an bearbeitbaren Feldern vorgenommen und nicht " +"gespeichert. Wollen Sie die Aktion trotzdem ausführen und Ihre Änderungen " +"verwerfen?" + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Sie haben eine Aktion ausgewählt, aber Ihre vorgenommenen Änderungen nicht " +"gespeichert. Klicken Sie OK, um dennoch zu speichern. Danach müssen Sie die " +"Aktion erneut ausführen." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Sie haben eine Aktion ausgewählt, aber keine Änderungen an bearbeitbaren " +"Feldern vorgenommen. Sie wollten wahrscheinlich auf „Ausführen“ und nicht " +"auf „Speichern“ klicken." + +msgid "Now" +msgstr "Jetzt" + +msgid "Midnight" +msgstr "Mitternacht" + +msgid "6 a.m." +msgstr "6 Uhr" + +msgid "Noon" +msgstr "Mittag" + +msgid "6 p.m." +msgstr "18 Uhr" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Achtung: Sie sind %s Stunde der Serverzeit vorraus." +msgstr[1] "Achtung: Sie sind %s Stunden der Serverzeit vorraus." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Achtung: Sie sind %s Stunde hinter der Serverzeit." +msgstr[1] "Achtung: Sie sind %s Stunden hinter der Serverzeit." + +msgid "Choose a Time" +msgstr "Uhrzeit wählen" + +msgid "Choose a time" +msgstr "Uhrzeit" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Today" +msgstr "Heute" + +msgid "Choose a Date" +msgstr "Datum wählen" + +msgid "Yesterday" +msgstr "Gestern" + +msgid "Tomorrow" +msgstr "Morgen" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mrz" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dez" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "So" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Mo" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Di" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Mi" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Do" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Fr" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Sa" + +msgid "Show" +msgstr "Einblenden" + +msgid "Hide" +msgstr "Ausblenden" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..03060dcdd54ddcd61843d3e13c886dcf8ea91071 GIT binary patch literal 17570 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, 2016-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-21 12:54+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s su se wulašowali." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s njedajo se lašowaś" + +msgid "Are you sure?" +msgstr "Sćo se wěsty?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Wubrane %(verbose_name_plural)s lašowaś" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Wšykne" + +msgid "Yes" +msgstr "Jo" + +msgid "No" +msgstr "Ně" + +msgid "Unknown" +msgstr "Njeznaty" + +msgid "Any date" +msgstr "Někaki datum" + +msgid "Today" +msgstr "Źinsa" + +msgid "Past 7 days" +msgstr "Zachadne 7 dnjow" + +msgid "This month" +msgstr "Toś ten mjasec" + +msgid "This year" +msgstr "W tom lěśe" + +msgid "No date" +msgstr "Žeden datum" + +msgid "Has date" +msgstr "Ma datum" + +msgid "Empty" +msgstr "Prozny" + +msgid "Not empty" +msgstr "Njeprozny" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Pšosym zapódajśo korektne %(username)s a gronidło za personalne konto. " +"Źiwajśo na to, až wobej póli móžotej mjazy wjeliko- a małopisanim rozeznawaś." + +msgid "Action:" +msgstr "Akcija:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dalšne %(verbose_name)s pśidaś" + +msgid "Remove" +msgstr "Wótpóraś" + +msgid "Addition" +msgstr "Pśidanje" + +msgid "Change" +msgstr "Změniś" + +msgid "Deletion" +msgstr "Wulašowanje" + +msgid "action time" +msgstr "akciski cas" + +msgid "user" +msgstr "wužywaŕ" + +msgid "content type" +msgstr "wopśimjeśowy typ" + +msgid "object id" +msgstr "objektowy id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objektowa reprezentacija" + +msgid "action flag" +msgstr "akciske markěrowanje" + +msgid "change message" +msgstr "změnowa powěźeńka" + +msgid "log entry" +msgstr "protokolowy zapisk" + +msgid "log entries" +msgstr "protokolowe zapiski" + +#, python-format +msgid "Added “%(object)s”." +msgstr "„%(object)s“ pśidane." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "„%(object)s“ změnjone - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "„%(object)s“ wulašowane." + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} „{object}“ pśidany." + +msgid "Added." +msgstr "Pśidany." + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} za {name} „{object}“ změnjone." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} změnjone." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Deleted {name} „{object}“ wulašowane." + +msgid "No fields changed." +msgstr "Žedne póla změnjone." + +msgid "None" +msgstr "Žeden" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "´Źaržćo „ctrl“ abo „cmd“ na Mac tłocony, aby wusej jadnogo wubrał." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}“ jo se wuspěšnje pśidał." + +msgid "You may edit it again below." +msgstr "Móźośo dołojce znowego wobźěłaś." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} „{obj}“ jo se wuspěšnje pśidał. Móžośo dołojce dalšne {name} pśidaś." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ jo se wuspěšnje změnił. Móžośo jen dołojce znowego wobźěłowaś." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ jo se wuspěšnje pśidał. Móžośo jen dołojce znowego wobźěłowaś." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} „{obj}“ jo se wuspěšnje změnił. Móžośo dołojce dalšne {name} pśidaś." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}“ jo se wuspěšnje změnił." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Zapiski muse se wubraś, aby akcije na nje nałožowało. Zapiski njejsu se " +"změnili." + +msgid "No action selected." +msgstr "Žedna akcija wubrana." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s“ jo se wuspěšnje wulašował." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s z ID „%(key)s“ njeeksistěrujo. Jo se snaź wulašowało?" + +#, python-format +msgid "Add %s" +msgstr "%s pśidaś" + +#, python-format +msgid "Change %s" +msgstr "%s změniś" + +#, python-format +msgid "View %s" +msgstr "%s pokazaś" + +msgid "Database error" +msgstr "Zmólka datoweje banki" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s jo se wuspěšnje změnił." +msgstr[1] "%(count)s %(name)s stej se wuspěšnje změniłej." +msgstr[2] "%(count)s %(name)s su se wuspěšnje změnili." +msgstr[3] "%(count)s %(name)s jo se wuspěšnje změniło." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s wubrany" +msgstr[1] "Wšykne %(total_count)s wubranej" +msgstr[2] "Wšykne %(total_count)s wubrane" +msgstr[3] "Wšykne %(total_count)s wubranych" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 z %(cnt)s wubranych" + +#, python-format +msgid "Change history: %s" +msgstr "Změnowa historija: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Aby se %(class_name)s %(instance)s lašowało, muse se slědujuce šćitane " +"objekty lašowaś: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administrator sedła Django" + +msgid "Django administration" +msgstr "Administracija Django" + +msgid "Site administration" +msgstr "Sedłowa administracija" + +msgid "Log in" +msgstr "Pśizjawiś" + +#, python-format +msgid "%(app)s administration" +msgstr "Administracija %(app)s" + +msgid "Page not found" +msgstr "Bok njejo se namakał" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Jo nam luto, ale pominany bok njedajo se namakaś." + +msgid "Home" +msgstr "Startowy bok" + +msgid "Server error" +msgstr "Serwerowa zmólka" + +msgid "Server error (500)" +msgstr "Serwerowa zmólka (500)" + +msgid "Server Error (500)" +msgstr "Serwerowa zmólka (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Zmólka jo nastała. Jo se sedłowym administratoram pśez e-mail k wěsći dała a " +"by dejała se skóro wótpóraś. Źěkujom se za wašu sćerpmosć." + +msgid "Run the selected action" +msgstr "Wubranu akciju wuwjasć" + +msgid "Go" +msgstr "Start" + +msgid "Click here to select the objects across all pages" +msgstr "Klikniśo how, aby objekty wšych bokow wubrał" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Wubjeŕśo wšykne %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Wuběrk lašowaś" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele w nałoženju %(name)s" + +msgid "Add" +msgstr "Pśidaś" + +msgid "View" +msgstr "Pokazaś" + +msgid "You don’t have permission to view or edit anything." +msgstr "Njamaśo pšawo něco pokazaś abo wobźěłaś" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Zapódajśo nejpjerwjej wužywarske mě a gronidło. Pótom móžośo dalšne " +"wužywarske nastajenja wobźěłowaś." + +msgid "Enter a username and password." +msgstr "Zapódajśo wužywarske mě a gronidło." + +msgid "Change password" +msgstr "Gronidło změniś" + +msgid "Please correct the error below." +msgstr "Pšosym korigěrujśo slědujucu zmólku." + +msgid "Please correct the errors below." +msgstr "Pšosym skorigěrujśo slědujuce zmólki." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Zapódajśo nowe gronidło za wužywarja %(username)s." + +msgid "Welcome," +msgstr "Witajśo," + +msgid "View site" +msgstr "Sedło pokazaś" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Wótzjawiś" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s pśidaś" + +msgid "History" +msgstr "Historija" + +msgid "View on site" +msgstr "Na sedle pokazaś" + +msgid "Filter" +msgstr "Filtrowaś" + +msgid "Clear all filters" +msgstr "Wšykne filtry lašowaś" + +msgid "Remove from sorting" +msgstr "Ze sortěrowanja wótpóraś" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sortěrowański rěd: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sortěrowanje pśešaltowaś" + +msgid "Delete" +msgstr "Lašowaś" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Gaž se %(object_name)s '%(escaped_object)s' lašujo, se pśisłušne objekty " +"wulašuju, ale wašo konto njama pšawo slědujuce typy objektow lašowaś: " + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Aby se %(object_name)s '%(escaped_object)s' lašujo, muse se slědujuce " +"šćitane pśisłušne objekty lašowaś:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Cośo napšawdu %(object_name)s „%(escaped_object)s“ lašowaś? Wšykne slědujuce " +"pśisłušne zapiski se wulašuju: " + +msgid "Objects" +msgstr "Objekty" + +msgid "Yes, I’m sure" +msgstr "Jo, som se wěsty" + +msgid "No, take me back" +msgstr "Ně, pšosym slědk" + +msgid "Delete multiple objects" +msgstr "Někotare objekty lašowaś" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Gaž lašujośo wubrany %(objects_name)s, se pśisłušne objekty wulašuju, ale " +"wašo konto njama pšawo slědujuce typy objektow lašowaś: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Aby wubrany %(objects_name)s lašowało, muse se slědujuce šćitane pśisłušne " +"objekty lašowaś:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Cośo napšawdu wubrany %(objects_name)s lašowaś? Wšykne slědujuce objekty a " +"jich pśisłušne zapiski se wulašuju:" + +msgid "Delete?" +msgstr "Lašowaś?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pó %(filter_title)s " + +msgid "Summary" +msgstr "Zespominanje" + +msgid "Recent actions" +msgstr "Nejnowše akcije" + +msgid "My actions" +msgstr "Móje akcije" + +msgid "None available" +msgstr "Žeden k dispoziciji" + +msgid "Unknown content" +msgstr "Njeznate wopśimjeśe" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Něco jo z wašeju instalaciju datoweje banki kśiwje šło. Pśeznańśo se, až " +"wótpowědne tabele datoweje banki su se napórali a pótom, až datowa banka " +"dajo se wót wótpówědnego wužywarja cytaś." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Sćo ako %(username)s awtentificěrowany, ale njamaśo pśistup na toś ten bok. " +"Cośo se pla drugego konta pśizjawiś?" + +msgid "Forgotten your password or username?" +msgstr "Sćo swójo gronidło abo wužywarske mě zabył?" + +msgid "Toggle navigation" +msgstr "Nawigaciju pśešaltowaś" + +msgid "Date/time" +msgstr "Datum/cas" + +msgid "User" +msgstr "Wužywaŕ" + +msgid "Action" +msgstr "Akcija" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Toś ten objekt njama změnowu historiju. Jo se nejskerjej pśez toś to " +"administratorowe sedło pśidał." + +msgid "Show all" +msgstr "Wšykne pokazaś" + +msgid "Save" +msgstr "Składowaś" + +msgid "Popup closing…" +msgstr "Wuskokujuce wokno se zacynja…" + +msgid "Search" +msgstr "Pytaś" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s wuslědk" +msgstr[1] "%(counter)s wuslědka" +msgstr[2] "%(counter)s wuslědki" +msgstr[3] "%(counter)s wuslědkow" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s dogromady" + +msgid "Save as new" +msgstr "Ako nowy składowaś" + +msgid "Save and add another" +msgstr "Składowaś a dalšny pśidaś" + +msgid "Save and continue editing" +msgstr "Składowaś a dalej wobźěłowaś" + +msgid "Save and view" +msgstr "Składowaś a pokazaś" + +msgid "Close" +msgstr "Zacyniś" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Wubrane %(model)s změniś" + +#, python-format +msgid "Add another %(model)s" +msgstr "Dalšny %(model)s pśidaś" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Wubrane %(model)s lašowaś" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Źěkujomy se, až sćo źinsa wěsty cas na websedle pśebywał." + +msgid "Log in again" +msgstr "Hyšći raz pśizjawiś" + +msgid "Password change" +msgstr "Gronidło změniś" + +msgid "Your password was changed." +msgstr "Wašo gronidło jo se změniło." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Pšosym zapódajśo k swójej wěstośe swójo stare gronidło a pótom swójo nowe " +"gronidło dwójcy, aby my mógli pśeglědowaś, lěc sćo jo korektnje zapisał." + +msgid "Change my password" +msgstr "Mójo gronidło změniś" + +msgid "Password reset" +msgstr "Gronidło jo se slědk stajiło" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Wašo gronidło jo se póstajiło. Móžośo pókšacowaś a se něnto pśizjawiś." + +msgid "Password reset confirmation" +msgstr "Wobkšuśenje slědkstajenja gronidła" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Pšosym zapódajśo swójo nowe gronidło dwójcy, aby my mógli pśeglědowaś, lěc " +"sći jo korektnje zapisał." + +msgid "New password:" +msgstr "Nowe gronidło:" + +msgid "Confirm password:" +msgstr "Gronidło wobkšuśiś:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Wótkaz za slědkstajenje gronidła jo njepłaśiwy był, snaź dokulaž jo se južo " +"wužył. Pšosym pšosćo wó nowe slědkstajenje gronidła." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Smy wam instrukcije za nastajenje wašogo gronidła pśez e-mail pósłali, jolic " +"konto ze zapódaneju e-mailoweju adresu eksistěrujo. Wy by dejał ju skóro " +"dostaś." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jolic mejlku njedostawaśo, pśeznańśo se, až sćo adresu zapódał, z kótarejuž " +"sćo zregistrěrował, a pśeglědajśo swój spamowy zarědnik." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Dostawaśo toś tu mejlku, dokulaž sćo za swójo wužywarske konto na " +"%(site_name)s wó slědkstajenje gronidła pšosył." + +msgid "Please go to the following page and choose a new password:" +msgstr "Pšosym źiśo k slědujucemu bokoju a wubjeŕśo nowe gronidło:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Wašo wužywarske mě, jolic sćo jo zabył:" + +msgid "Thanks for using our site!" +msgstr "Wjeliki źěk za wužywanje našogo sedła!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Team %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Sćo swójo gronidło zabył? Zapódajśo dołojce swóju e-mailowu adresu a " +"pósćelomy wam instrukcije za nastajenje nowego gronidła pśez e-mail." + +msgid "Email address:" +msgstr "E-mailowa adresa:" + +msgid "Reset my password" +msgstr "Mójo gronidło slědk stajiś" + +msgid "All dates" +msgstr "Wšykne daty" + +#, python-format +msgid "Select %s" +msgstr "%s wubraś" + +#, python-format +msgid "Select %s to change" +msgstr "%s wubraś, aby se změniło" + +#, python-format +msgid "Select %s to view" +msgstr "%s wubraś, kótaryž ma se pokazaś" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Cas:" + +msgid "Lookup" +msgstr "Pytanje" + +msgid "Currently:" +msgstr "Tuchylu:" + +msgid "Change:" +msgstr "Změniś:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c1742a695bc7b8a28927cee565d9275f080c43f5 GIT binary patch literal 5609 zcmb`KZHya78ONt!pj^va0;NC;)6gpy8t?fo;ToJ?laTg8lHTPMyBtNR(%3s^uf3iz zyR)}ht3u(vgbz@}OL>t?)d=-N0I3q`2NLln-MRDw?FT577g5n50TM`jXeES1CH~Lu z*ylKxHsV-$_O~E zK>XOxZT%VWdeon@^%pJw2EGOD|FnF?@;WFRL;HKcH-oo=9{?TjHgEyF7K|)E3*yI4 z<3^@E1ilIUs;ze|9|Q3U_Bi-@@OvQXdBXPp5d0+SKL*R-4NyY;O_1abNP17=1`&1& zBs))oWan2vdjBKf*T6I2m%$k*q4z!wlD=ng+Xp@m(zxxoJqq3oeiQr=*aq)|@^^zz zfj5FLfbRwWWx4G-_z3kpcmsIY@&S;>Mc})@FM>4gJ0Qvb1biR(TW~x0vgNf{B$B@g zr1oiBp99~C`lms9&u751*D&^Zut9Qf&Dy^Wz613qL7MMVAo=MRAld&b5JT8MK)8ne z8+&D$8mBim+q3y2>p;D)KP1KN$!Ge?}7B*XF;;#*Oq^< zd=aGe{3}S~{|=JAm#7`{`VaUL>NFW@e;FiwuYe?<+r}7N#;ym+Pd9?Jj=MmTp8>xC z?gzgFJ`d9P8ia`od;p9nC0V^-?eL zhfrv(Y5i_SaZo;pLi_(N6pF_@3aukuaCI81^n5Ey5oH1euTC%WfB!mQA7~Bex;;Z0 ztK2>lD2MGvp*hZ=>_wsV>|a=R_E8ktn|InqEL|F#`-0nP+D-o?-pjLR`yy$ zH8WiE)3KpcsWRWIHo4KfnyTZ%_tDIS;Tmso*r9%ZAX|Dxru`7jMsJASEvvFskpY{N zl^_y9!sa~Rp#E{smF%ccY1`4rPuS5&Nj5KnY9054&3mr$YIVaFv{twoS>*TYh>L(G z%j-G{xTs6vl0QQktjK`Vbezp)Vfxhz^NOr{%DpPJn~SbwvtH0KJ6<)KJa8g)lm+>V zm1Nswa-}*1%XKg0_?f!oz8AvN%UldCu#?WeC6fM{gt{epC9zTDsTvJ!aZjZxD*7bm z;p>(3(Wd@n_sbBmNa`rE>H=}x-;r<{7gghF zwJY^sVg=O2Q{OVYC0vBOqLmP;Cb6d#Y;e65&y9qSw@cp*Q|~|=0ox9A1=}>?zSiji zENet7Jbf6Bj*P+ZK%h>Icro>q$eOIrd3Ez3#4j~3#8{Wwf`NhX$z=xeL>h-L`ci~4 ziw%DK7o%Hd(8tDm8Aco^xjc`65v z_8@cRkiIT!Ruavl(rI?f;XWdce23O#q;&y#m2zhe4s6;^sdggAhBc$lV6EksdoC+d44$`LO1>`Hw}lFkjY1KDKx~e?qQ!B$}tMS&>f{ zrl<0S>3m^|Pfr)83bz+c5!ktj$_A=UT;~RbgH^FnHk)NZG9_ncfGK!J6_dmcsw)|Sm{w{vDcLd`kIP* zUA9Cn=?3nL0l?O%mHsJdkTS**C zln6w}4q0`sB$&A|J;&GqG{v=ZFcX9NIjVnVN{>wV)X^MD`1Ym`SxUm8$@dy`bi#dp zy&F_!D8!aLgB-*@CE6ZM5-A4b0i(d?}XoU}36xe8%he$}xe(t5)qZ3nMKgh5Qoo4VL}tKzUe6J z1~@;C;)Z}<9OO#shMNY%kl!~oDAtwU1-xf9YUm1tQa3vMsK!64zJAgxdl#_C_%7f? z4Tqdb7hyB)wWxyiO8?H|7T40W?@-Ej=x;G@kxw@~QC=ro8~A4%JG6)4X4!Vw;(C`Y TuAO5g%@!K0WY`jdAz=Rng~o>g literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..bfdb386d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po @@ -0,0 +1,273 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 22:10+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "K dispoziciji stojece %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"To jo lisćina k dispoziciji stojecych %s. Klikniśo na šypku „Wubraś“ mjazy " +"kašćikoma, aby někotare z nich w slědujucem kašćiku wubrał. " + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Zapišćo do toś togo póla, aby zapiski z lisćiny k dispoziciji stojecych %s " +"wufiltrował. " + +msgid "Filter" +msgstr "Filtrowaś" + +msgid "Choose all" +msgstr "Wšykne wubraś" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikniśo, aby wšykne %s naraz wubrał." + +msgid "Choose" +msgstr "Wubraś" + +msgid "Remove" +msgstr "Wótpóraś" + +#, javascript-format +msgid "Chosen %s" +msgstr "Wubrane %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"To jo lisćina wubranych %s. Klikniśo na šypku „Wótpóraś“ mjazy kašćikoma, " +"aby někotare z nich w slědujucem kašćiku wótpórał." + +msgid "Remove all" +msgstr "Wšykne wótpóraś" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikniśo, aby wšykne wubrane %s naraz wótpórał." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s z %(cnt)s wubrany" +msgstr[1] "%(sel)s z %(cnt)s wubranej" +msgstr[2] "%(sel)s z %(cnt)s wubrane" +msgstr[3] "%(sel)s z %(cnt)s wubranych" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Maśo njeskładowane změny za jadnotliwe wobźěłujobne póla. Jolic akciju " +"wuwjeźośo, se waše njeskładowane změny zgubiju." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Sćo akciju wubrał, ale njejsćo hyšći swóje změny za jadnotliwe póla " +"składował, Pšosym klikniśo na W pórěźe, aby składował. Musyśo akciju znowego " +"wuwjasć." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Sćo akciju wubrał, ale njejsćo jadnotliwe póla změnił. Nejskerjej pytaśo " +"skerjej za tłocaškom Start ako za tłocaškom Składowaś." + +msgid "Now" +msgstr "Něnto" + +msgid "Midnight" +msgstr "Połnoc" + +msgid "6 a.m." +msgstr "6:00 góź. dopołdnja" + +msgid "Noon" +msgstr "Połdnjo" + +msgid "6 p.m." +msgstr "6:00 wótpołdnja" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Glědajśo: Waš cas jo wó %s góźinu pśéd serwerowym casom." +msgstr[1] "Glědajśo: Waš cas jo wó %s góźinje pśéd serwerowym casom." +msgstr[2] "Glědajśo: Waš cas jo wó %s góźiny pśéd serwerowym casom." +msgstr[3] "Glědajśo: Waš cas jo wó %s góźin pśéd serwerowym casom." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Glědajśo: Waš cas jo wó %s góźinu za serwerowym casom." +msgstr[1] "Glědajśo: Waš cas jo wó %s góźinje za serwerowym casom." +msgstr[2] "Glědajśo: Waš cas jo wó %s góźiny za serwerowym casom." +msgstr[3] "Glědajśo: Waš cas jo wó %s góźin za serwerowym casom." + +msgid "Choose a Time" +msgstr "Wubjeŕśo cas" + +msgid "Choose a time" +msgstr "Wubjeŕśo cas" + +msgid "Cancel" +msgstr "Pśetergnuś" + +msgid "Today" +msgstr "Źinsa" + +msgid "Choose a Date" +msgstr "Wubjeŕśo datum" + +msgid "Yesterday" +msgstr "Cora" + +msgid "Tomorrow" +msgstr "Witśe" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Měrc" + +msgid "April" +msgstr "Apryl" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Junij" + +msgid "July" +msgstr "Julij" + +msgid "August" +msgstr "Awgust" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "Nowember" + +msgid "December" +msgstr "December" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan." + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb." + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Měr." + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr." + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun." + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul." + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Awg." + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep." + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt." + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Now." + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dec." + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Nj" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Pó" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Wa" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Sr" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "St" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pě" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "So" + +msgid "Show" +msgstr "Pokazaś" + +msgid "Hide" +msgstr "Schowaś" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f888163e61af48439318dfe68d6bebae40b8594 GIT binary patch literal 22968 zcmdU$3zXbdeaEj)G`_(XYV{v#$gb>eLJ+~_5iki5B_xm_4Qp4i$T2~2RDPafLDME zVCEF~esB;x4k6wL-U^C;Z=rMXdpRh&F9gM(Ay9OUfud(Scm{YQsPX;|6n#GhF9M$g z-w3XLwR1(V2tE`1HmGsF2a4XGfaiiwg3ks|hv=)p6`=b09H@R@`x>to$AD_L1Qb6{ z0`>lE@EGtsP<*@s6y5I!HSUcdEOWa+wf_W&sN91fs^s>A8vje6=J{1n{Qo|v`u`lB z{~Xk~&qV1}??_PkzmPvNk<-98fUCg>%!5_%MsOYYYj6j+4rT5KzX@vmSNxIh?^sat zIS~}Sr-G8hIuMq+0Z??l4@9KyYEW{%4b*(6K+&-uR6kz?HIF$^{e1&efBy=;3H&t( zN$yPuQFeD0D88%*C8t49?MmP@xD8wcp2#G-!FPe;&$Zy`;4TmrxxWYB4E`9DpLkt_ z?tmwNec*$j`0)?mJHYOR*a|oXUI2ayTm$|R6u-_!xRUEvz;}b+0yVF<{;}7`6#-X+ zn%`Pb^2varZxoc=HiP2d4FPwB_qT$Y|DB-veE`(_r@^;^kAb_u{{Wu_ZhfQg?>cZR z_a6pN1doO}@>6TU%fSM88u)cke0jyOp6^RR$?07Ihd}jP0YÐ37?>_{Ju6qJL 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..ec1dc945a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,737 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antonis Christofides , 2021 +# Dimitris Glezos , 2011 +# Giannis Meletakis , 2015 +# Jannis Leidel , 2011 +# Nick Mavrakis , 2016-2018,2021 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +# Pãnoș , 2014,2016,2019-2020 +# Yorgos Pagles , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-30 03:21+0000\n" +"Last-Translator: Antonis Christofides \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "%(verbose_name_plural)s: Διαγραφή επιλεγμένων" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Επιτυχώς διεγράφησαν %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Αδύνατη η διαγραφή του %(name)s" + +msgid "Are you sure?" +msgstr "Είστε σίγουρος;" + +msgid "Administration" +msgstr "Διαχείριση" + +msgid "All" +msgstr "Όλα" + +msgid "Yes" +msgstr "Ναι" + +msgid "No" +msgstr "Όχι" + +msgid "Unknown" +msgstr "Άγνωστο" + +msgid "Any date" +msgstr "Οποιαδήποτε ημερομηνία" + +msgid "Today" +msgstr "Σήμερα" + +msgid "Past 7 days" +msgstr "Τελευταίες 7 ημέρες" + +msgid "This month" +msgstr "Αυτό το μήνα" + +msgid "This year" +msgstr "Αυτό το χρόνο" + +msgid "No date" +msgstr "Καθόλου ημερομηνία" + +msgid "Has date" +msgstr "Έχει ημερομηνία" + +msgid "Empty" +msgstr "Χωρίς τιμή" + +msgid "Not empty" +msgstr "Με τιμή" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Παρακαλώ δώστε το σωστό %(username)s και συνθηματικό για λογαριασμό " +"προσωπικού. Και στα δύο πεδία μπορεί να έχει σημασία η διάκριση κεφαλαίων/" +"μικρών." + +msgid "Action:" +msgstr "Ενέργεια:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Να προστεθεί %(verbose_name)s" + +msgid "Remove" +msgstr "Αφαίρεση" + +msgid "Addition" +msgstr "Προσθήκη" + +msgid "Change" +msgstr "Αλλαγή" + +msgid "Deletion" +msgstr "Διαγραφή" + +msgid "action time" +msgstr "ώρα ενέργειας" + +msgid "user" +msgstr "χρήστης" + +msgid "content type" +msgstr "τύπος περιεχομένου" + +msgid "object id" +msgstr "ταυτότητα αντικειμένου" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "αναπαράσταση αντικειμένου" + +msgid "action flag" +msgstr "σημαία ενέργειας" + +msgid "change message" +msgstr "μήνυμα τροποποίησης" + +msgid "log entry" +msgstr "καταχώριση αρχείου καταγραφής" + +msgid "log entries" +msgstr "καταχωρίσεις αρχείου καταγραφής" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Προστέθηκε «%(object)s»." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Τροποποιήθηκε «%(object)s» — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Διαγράφηκε «%(object)s»." + +msgid "LogEntry Object" +msgstr "Αντικείμενο LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Προστέθηκε {name} “{object}”." + +msgid "Added." +msgstr "Προστέθηκε." + +msgid "and" +msgstr "και" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} «{object}»: Αλλαγή {fields}." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Αλλαγή {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Διεγράφη {name} «{object}»." + +msgid "No fields changed." +msgstr "Δεν άλλαξε κανένα πεδίο." + +msgid "None" +msgstr "Κανένα" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Κρατήστε πατημένο το «Control» («Command» σε Mac) για να επιλέξετε " +"περισσότερα από ένα αντικείμενα." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Προστέθηκε {name} «{obj}»." + +msgid "You may edit it again below." +msgstr "Μπορεί να πραγματοποιηθεί περαιτέρω επεξεργασία παρακάτω." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Προστέθηκε {name} «{obj}». Μπορεί να πραγματοποιηθεί νέα πρόσθεση παρακάτω." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Το αντικείμενο ({name}) «{obj}» τροποποιήθηκε. Μπορεί να πραγματοποιηθεί " +"περαιτέρω επεξεργασία παρακάτω." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Προστέθηκε {name} «{obj}». Μπορεί να πραγματοποιηθεί περαιτέρω επεξεργασία " +"παρακάτω." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Το αντικείμενο ({name}) «{obj}» τροποποιήθηκε. Μπορεί να προστεθεί επιπλέον " +"{name} παρακάτω." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Το αντικείμενο ({name}) «{obj}» τροποποιήθηκε." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Καμία αλλαγή δεν πραγματοποιήθηκε γιατί δεν έχετε επιλέξει αντικείμενο. " +"Επιλέξτε ένα ή περισσότερα αντικείμενα για να πραγματοποιήσετε ενέργειες σ' " +"αυτά." + +msgid "No action selected." +msgstr "Δεν έχει επιλεγεί ενέργεια." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Διεγράφη το αντικείμενο (%(name)s) «%(obj)s»" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "Δεν υπάρχει %(name)s με ID «%(key)s». Ίσως να έχει διαγραφεί." + +#, python-format +msgid "Add %s" +msgstr "Να προστεθεί %s" + +#, python-format +msgid "Change %s" +msgstr "%s: Τροποποίηση" + +#, python-format +msgid "View %s" +msgstr "%s: Προβολή" + +msgid "Database error" +msgstr "Σφάλμα στη βάση δεδομένων" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s άλλαξε επιτυχώς." +msgstr[1] "%(count)s %(name)s άλλαξαν επιτυχώς." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Επιλέχθηκε %(total_count)s" +msgstr[1] "Επιλέχθηκαν και τα %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Επιλέχθηκαν 0 από %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Ιστορικό αλλαγών: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Η διαγραφή του αντικειμένου (%(class_name)s) %(instance)s θα απαιτούσε τη " +"διαγραφή των παρακάτω προστατευόμενων συσχετισμένων αντικειμένων: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Ιστότοπος διαχείρισης Django" + +msgid "Django administration" +msgstr "Διαχείριση Django" + +msgid "Site administration" +msgstr "Διαχείριση του ιστότοπου" + +msgid "Log in" +msgstr "Σύνδεση" + +#, python-format +msgid "%(app)s administration" +msgstr "Διαχείριση %(app)s" + +msgid "Page not found" +msgstr "Η σελίδα δεν βρέθηκε" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Λυπούμαστε, αλλά η σελίδα που ζητήθηκε δεν βρέθηκε." + +msgid "Home" +msgstr "Αρχική" + +msgid "Server error" +msgstr "Σφάλμα στο server" + +msgid "Server error (500)" +msgstr "Σφάλμα στο server (500)" + +msgid "Server Error (500)" +msgstr "Σφάλμα στο server (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Παρουσιάστηκε σφάλμα. Εστάλη στους διαχειριστές με email και πιθανότατα θα " +"διορθωθεί σύντομα. Ευχαριστούμε για την υπομονή σας." + +msgid "Run the selected action" +msgstr "Εκτέλεση της επιλεγμένης ενέργειας" + +msgid "Go" +msgstr "Μετάβαση" + +msgid "Click here to select the objects across all pages" +msgstr "Κάντε κλικ εδώ για να επιλέξετε τα αντικείμενα σε όλες τις σελίδες" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Επιλέξτε και τα %(total_count)s αντικείμενα (%(module_name)s)" + +msgid "Clear selection" +msgstr "Καθαρισμός επιλογής" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Μοντέλα στην εφαρμογή %(name)s" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "View" +msgstr "Προβολή" + +msgid "You don’t have permission to view or edit anything." +msgstr "Δεν έχετε δικαίωμα να δείτε ή να επεξεργαστείτε κάτι." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Καταρχήν προσδιορίστε όνομα χρήστη και συνθηματικό. Κατόπιν θα σας δοθεί η " +"δυνατότητα να εισαγάγετε περισσότερες πληροφορίες για το χρήστη." + +msgid "Enter a username and password." +msgstr "Προσδιορίστε όνομα χρήστη και συνθηματικό." + +msgid "Change password" +msgstr "Αλλαγή συνθηματικού" + +msgid "Please correct the error below." +msgstr "Παρακαλούμε διορθώστε το παρακάτω λάθος." + +msgid "Please correct the errors below." +msgstr "Παρακαλοϋμε διορθώστε τα παρακάτω λάθη." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Προσδιορίστε νέο συνθηματικό για το χρήστη %(username)s." + +msgid "Welcome," +msgstr "Καλώς ήρθατε," + +msgid "View site" +msgstr "Μετάβαση στην εφαρμογή" + +msgid "Documentation" +msgstr "Τεκμηρίωση" + +msgid "Log out" +msgstr "Αποσύνδεση" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s: προσθήκη" + +msgid "History" +msgstr "Ιστορικό" + +msgid "View on site" +msgstr "Προβολή στον ιστότοπο" + +msgid "Filter" +msgstr "Φίλτρο" + +msgid "Clear all filters" +msgstr "Καθαρισμός όλων των φίλτρων" + +msgid "Remove from sorting" +msgstr "Αφαίρεση από την ταξινόμηση" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Προτεραιότητα ταξινόμησης: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Εναλλαγή ταξινόμησης" + +msgid "Delete" +msgstr "Διαγραφή" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Επιλέξατε τη διαγραφή του αντικειμένου '%(escaped_object)s' τύπου " +"%(object_name)s. Αυτό συνεπάγεται τη διαγραφή συσχετισμένων αντικειμενων για " +"τα οποία δεν έχετε δικάιωμα διαγραφής. Οι τύποι των αντικειμένων αυτών είναι:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Η διαγραφή του αντικειμένου (%(object_name)s) «%(escaped_object)s» απαιτεί " +"τη διαγραφή των παρακάτω προστατευόμενων αντικειμένων:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Επιβεβαιώστε ότι επιθυμείτε τη διαγραφή των επιλεγμένων αντικειμένων " +"(%(object_name)s \"%(escaped_object)s\"). Αν προχωρήσετε με τη διαγραφή, όλα " +"τα παρακάτω συσχετισμένα αντικείμενα θα διαγραφούν επίσης:" + +msgid "Objects" +msgstr "Αντικείμενα" + +msgid "Yes, I’m sure" +msgstr "Ναι" + +msgid "No, take me back" +msgstr "Όχι" + +msgid "Delete multiple objects" +msgstr "Διαγραφή πολλαπλών αντικειμένων" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Η διαγραφή των επιλεγμένων αντικειμένων τύπου «%(objects_name)s» θα είχε " +"αποτέλεσμα τη διαγραφή των ακόλουθων συσχετισμένων αντικειμένων για τα οποία " +"δεν έχετε το διακαίωμα διαγραφής:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Η διαγραφή των επιλεγμένων αντικειμένων τύπου «%(objects_name)s» απαιτεί τη " +"διαγραφή των παρακάτω προστατευμένων συσχετισμένων αντικειμένων:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Επιβεβαιώστε ότι επιθυμείτε τη διαγραφή των επιλεγμένων αντικειμένων τύπου " +"«%(objects_name)s». Αν προχωρήσετε με τη διαγραφή, όλα τα παρακάτω " +"συσχετισμένα αντικείμενα θα διαγραφούν επίσης:" + +msgid "Delete?" +msgstr "Διαγραφή;" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Ανά %(filter_title)s " + +msgid "Summary" +msgstr "Περίληψη" + +msgid "Recent actions" +msgstr "Πρόσφατες ενέργειες" + +msgid "My actions" +msgstr "Οι ενέργειές μου" + +msgid "None available" +msgstr "Κανένα διαθέσιμο" + +msgid "Unknown content" +msgstr "Άγνωστο περιεχόμενο" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Υπάρχει κάποιο πρόβλημα στη βάση δεδομένων. Βεβαιωθείτε πως οι κατάλληλοι " +"πίνακες έχουν δημιουργηθεί και πως υπάρχουν τα κατάλληλα δικαιώματα " +"πρόσβασης." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Έχετε ταυτοποιηθεί ως %(username)s, αλλά δεν έχετε δικαίωμα πρόσβασης σ' " +"αυτή τη σελίδα. Θέλετε να συνδεθείτε με άλλο λογαριασμό;" + +msgid "Forgotten your password or username?" +msgstr "Ξεχάσατε το συνθηματικό ή το όνομα χρήστη σας;" + +msgid "Toggle navigation" +msgstr "Εναλλαγή προβολής πλοήγησης" + +msgid "Date/time" +msgstr "Ημερομηνία/ώρα" + +msgid "User" +msgstr "Χρήστης" + +msgid "Action" +msgstr "Ενέργεια" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Αυτό το αντικείμενο δεν έχει ιστορικό αλλαγών. Πιθανότατα δεν προστέθηκε " +"μέσω του παρόντος διαχειριστικού ιστότοπου." + +msgid "Show all" +msgstr "Εμφάνιση όλων" + +msgid "Save" +msgstr "Αποθήκευση" + +msgid "Popup closing…" +msgstr "Κλείσιμο popup..." + +msgid "Search" +msgstr "Αναζήτηση" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s αποτέλεσμα" +msgstr[1] "%(counter)s αποτελέσματα" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s συνολικά" + +msgid "Save as new" +msgstr "Αποθήκευση ως νέου" + +msgid "Save and add another" +msgstr "Αποθήκευση και προσθήκη καινούργιου" + +msgid "Save and continue editing" +msgstr "Αποθήκευση και συνέχεια επεξεργασίας" + +msgid "Save and view" +msgstr "Αποθήκευση και προβολή" + +msgid "Close" +msgstr "Κλείσιμο" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Να τροποποιηθεί το επιλεγμένο αντικείμενο (%(model)s)" + +#, python-format +msgid "Add another %(model)s" +msgstr "Να προστεθεί %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Να διαγραφεί το επιλεγμένο αντικείμενο (%(model)s)" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Ευχαριστούμε που διαθέσατε χρόνο στον ιστότοπο." + +msgid "Log in again" +msgstr "Επανασύνδεση" + +msgid "Password change" +msgstr "Αλλαγή συνθηματικού" + +msgid "Your password was changed." +msgstr "Το συνθηματικό σας αλλάχθηκε." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Δώστε το παλιό σας συνθηματικό και ακολούθως το νέο σας συνθηματικό δύο " +"φορές ώστε να ελέγξουμε ότι το πληκτρολογήσατε σωστά." + +msgid "Change my password" +msgstr "Αλλαγή του συνθηματικού μου" + +msgid "Password reset" +msgstr "Επαναφορά συνθηματικού" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Το συνθηματικό σας ορίστηκε. Μπορείτε τώρα να συνδεθείτε." + +msgid "Password reset confirmation" +msgstr "Επιβεβαίωση επαναφοράς συνθηματικού" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Δώστε το νέο συνθηματικό σας δύο φορές ώστε να ελέγξουμε ότι το " +"πληκτρολογήσατε σωστά." + +msgid "New password:" +msgstr "Νέο συνθηματικό:" + +msgid "Confirm password:" +msgstr "Επιβεβαίωση συνθηματικού:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Ο σύνδεσμος που χρησιμοποιήσατε για την επαναφορά του συνθηματικού δεν είναι " +"σωστός, ίσως γιατί έχει ήδη χρησιμοποιηθεί. Πραγματοποιήστε εξαρχής τη " +"διαδικασία αίτησης επαναφοράς του συνθηματικού." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Σας στείλαμε email με οδηγίες ορισμού συνθηματικού. Θα πρέπει να το λάβετε " +"σύντομα." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Εάν δεν λάβετε email, παρακαλούμε σιγουρευτείτε ότι έχετε εισαγάγει τη " +"διεύθυνση με την οποία έχετε εγγραφεί, και ελέγξτε το φάκελο ανεπιθύμητης " +"αλληλογραφίας." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Λαμβάνετε αυτό το email επειδή ζητήσατε επαναφορά συνθηματικού για το " +"λογαριασμό σας στον ιστότοπο %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Παρακαλούμε επισκεφθείτε την ακόλουθη σελίδα και επιλέξτε νέο συνθηματικό: " + +msgid "Your username, in case you’ve forgotten:" +msgstr "Το όνομα χρήστη, σε περίπτωση που δεν το θυμάστε:" + +msgid "Thanks for using our site!" +msgstr "Ευχαριστούμε που χρησιμοποιήσατε τον ιστότοπό μας!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Η ομάδα του ιστότοπου %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Ξεχάσατε το συνθηματικό σας; Εισαγάγετε το email σας και θα σας στείλουμε " +"οδηγίες για να ορίσετε καινούργιο." + +msgid "Email address:" +msgstr "Διεύθυνση email:" + +msgid "Reset my password" +msgstr "Επαναφορά του συνθηματικού μου" + +msgid "All dates" +msgstr "Όλες οι ημερομηνίες" + +#, python-format +msgid "Select %s" +msgstr "Επιλέξτε αντικείμενο (%s)" + +#, python-format +msgid "Select %s to change" +msgstr "Επιλέξτε αντικείμενο (%s) προς αλλαγή" + +#, python-format +msgid "Select %s to view" +msgstr "Επιλέξτε αντικείμενο (%s) για προβολή" + +msgid "Date:" +msgstr "Ημ/νία:" + +msgid "Time:" +msgstr "Ώρα:" + +msgid "Lookup" +msgstr "Αναζήτηση" + +msgid "Currently:" +msgstr "Τώρα:" + +msgid "Change:" +msgstr "Επεξεργασία:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5548ab048a952eb4f1b3ecb408b56110a887f8ce GIT binary patch literal 6509 zcmchaZH!!18OIMe3NDBUf^Sq0g<>n6*=>bVrxd7##a6czx=@G)y}NUEXJF>u_1-(X z-7jYQ0&Qd4qzd81swG8$KQHI@t!pyRDt`CSZjg4VQjZB{c<>whs8V-;d%=%^Qx1O(@~3|1 z`o9OSr2nSt|Ha|o!A~&$4~PG8cm>Kj82=pjaqwpFOJEMX1>6B%4ptrh0OU^{@vd{Oy$|Xu20(aB@H%^pu?YJt%-Qd;qzXx6;@}THF0P?3^boeW9E&U6i*z-4s zmwYm{e}%)_!EMar zb-3N(gCHrb9(DL_hmSk-92Oi7I(!1eO#55oP(aSO()HJYk_!@tH`2aL6V7gNqvytS7>+B)=P(<^&fbL?J3m> zN-dDMzlA1#>!L}1N{y4Buo}f`%dl4}dwpf2S4C>8=l7ek+FA^P$T-lRzSoOedcCDeOD}HimF?Qd z_*PlD)c>T81Kn@cX|G&nSbMP!*d?d7Hs(W935JcGM>Ji%Aa<|mH;6^&OAJ|hzjn^4Pfa?8tN`o#K(y|dZ0fJgn@@FQ4WMJ zwaW~}sobt2g1yC3r1^`BMwd$wOb=+U#lbmy{)#u+@JSR@jP4tCQB?8=Wobp1e5;}_ z*uy!>!HD)a3Nya$7pFNny)q4yl`tA2)Mw%mgN*DRj|7_KCdw^qRMXE37P%<+kQSvB zy_ZEnf$-=JDuLLodPj#0Mc{6Rxb``Az@4VMa4ugvbIT!<_?h!e0wVbDjK zj_Ps{SO*LQL@P|+57E^)W_jq*mq9j`nO$N{I+uHQ^AOUD&5KxDkg>37Ae<~QP>-58 zr+1c(7nw9R^aI}%_GEp-dh*^kXk$1u*|3^gmr~PWSk+HAU7iqAD8;r+HJI5pU`-Zv zEks+3+ck}pFrkl>2%Ul&dKjux+MUQ!>1% zz=t;z6Xd!(ED`9L?$)uMz?ZR}*0Eh)T$Pl_>{>KhwUUd*dW+RC63O0H$=<42I=I^u z{B(G?+8G8D z;gX1EE9EJL}|e6$@K@7yIAE9R=q)!?KNH{ukR0yc~Y+~#_>?TvvXu*B)3SuGc~mV zWw*G~lsngS^la<7Z{bkua$Ox;2~*=^6;&#)W3wmj94dPyf0HC;7@2tU!@b?vjSF&O z+kgqP_xb%nfl{5<8~aLe)5yFw<&K@@YUq`--9cE1^4cG=-DvarO*(zuyxP|{Zr1D8 zZ0cx!SR|A6vHFqbheuMYk0n#dOj1kEC9}!tWGxzwZvtBbYh`TKyVKB742w@Y+bW;bO z&?tWzo~Afmjcw;4a?TpX9IFv%?9}4FchLU~DyH%9Y;qQL&NaVeP`WrL8E+lNeOSvx z>dzy1W-ksrBz}1TlOS^Ok{7IXO`oUTxyC*xL^~F{ZRsw&*6{XtGKcnqawe6W;8X+v zmYx=qRC3C8YRNEsAqE$-Ht^={#JF%Lk&X~S(U75s-Oxr1Jw)g`3ChQ4fEB^IZIKKEx)F_ES=?Ev{ZpeWH?|6F3Lz$690V zxQ*!v%e>9=wt<$cJ03$ zO)5Fb1{C_V42p~78nT)w-B2O^=R9eRS@4MX)LjD-MFczdt5qTeHYE^i-cNw4TYg^Ab;dtfY=j^}wjqJSl#J zD$f}l+)UKhg=!Lt8My_SUKAUP8Rhed6D-;tr{T;we6S21t`Z<3iF(+HiYe&eh6N=G z2^-=AP8J8v)2Thn82yfMOx=|zzZfgWCH%!`;u6lF!F@hSit~MHGd(${68l-C68j, 2011 +# Fotis Athineos , 2021 +# glogiotatidis , 2011 +# Jannis Leidel , 2011 +# Nikolas Demiridis , 2014 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-08-04 06:47+0000\n" +"Last-Translator: Fotis Athineos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Διαθέσιμο %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Αυτή είναι η λίστα των διαθέσιμων %s. Μπορείτε να επιλέξετε κάποια, από το " +"παρακάτω πεδίο και πατώντας το βέλος \"Επιλογή\" μεταξύ των δύο πεδίων." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Πληκτρολογήστε σε αυτό το πεδίο για να φιλτράρετε τη λίστα των διαθέσιμων %s." + +msgid "Filter" +msgstr "Φίλτρο" + +msgid "Choose all" +msgstr "Επιλογή όλων" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Πατήστε για επιλογή όλων των %s με τη μία." + +msgid "Choose" +msgstr "Επιλογή" + +msgid "Remove" +msgstr "Αφαίρεση" + +#, javascript-format +msgid "Chosen %s" +msgstr "Επιλέχθηκε %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Αυτή είναι η λίστα των επιλεγμένων %s. Μπορείτε να αφαιρέσετε μερικά " +"επιλέγοντας τα απο το κουτί παρακάτω και μετά κάνοντας κλίκ στο βελάκι " +"\"Αφαίρεση\" ανάμεσα στα δύο κουτιά." + +msgid "Remove all" +msgstr "Αφαίρεση όλων" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Κλίκ για να αφαιρεθούν όλα τα επιλεγμένα %s με τη μία." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s από %(cnt)s επιλεγμένα" +msgstr[1] "%(sel)s από %(cnt)s επιλεγμένα" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Έχετε μη αποθηκευμένες αλλαγές σε μεμονωμένα επεξεργάσιμα πεδία. Άν " +"εκτελέσετε μια ενέργεια, οι μη αποθηκευμένες αλλάγες θα χαθούν" + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Έχετε επιλέξει μια ενέργεια, αλλά δεν έχετε αποθηκεύσει τις αλλαγές στα " +"εκάστωτε πεδία ακόμα. Παρακαλώ πατήστε ΟΚ για να τις αποθηκεύσετε. Θα " +"χρειαστεί να εκτελέσετε ξανά την ενέργεια." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Έχετε επιλέξει μια ενέργεια, και δεν έχετε κάνει καμία αλλαγή στα εκάστοτε " +"πεδία. Πιθανών θέλετε το κουμπί Go αντί του κουμπιού Αποθήκευσης." + +msgid "Now" +msgstr "Τώρα" + +msgid "Midnight" +msgstr "Μεσάνυχτα" + +msgid "6 a.m." +msgstr "6 π.μ." + +msgid "Noon" +msgstr "Μεσημέρι" + +msgid "6 p.m." +msgstr "6 μ.μ." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Σημείωση: Είστε %s ώρα μπροστά από την ώρα του εξυπηρετητή." +msgstr[1] "Σημείωση: Είστε %s ώρες μπροστά από την ώρα του εξυπηρετητή." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Σημείωση: Είστε %s ώρα πίσω από την ώρα του εξυπηρετητή" +msgstr[1] "Σημείωση: Είστε %s ώρες πίσω από την ώρα του εξυπηρετητή." + +msgid "Choose a Time" +msgstr "Επιλέξτε Χρόνο" + +msgid "Choose a time" +msgstr "Επιλέξτε χρόνο" + +msgid "Cancel" +msgstr "Ακύρωση" + +msgid "Today" +msgstr "Σήμερα" + +msgid "Choose a Date" +msgstr "Επιλέξτε μια Ημερομηνία" + +msgid "Yesterday" +msgstr "Χθές" + +msgid "Tomorrow" +msgstr "Αύριο" + +msgid "January" +msgstr "Ιανουάριος" + +msgid "February" +msgstr "Φεβρουάριος" + +msgid "March" +msgstr "Μάρτιος" + +msgid "April" +msgstr "Απρίλιος" + +msgid "May" +msgstr "Μάιος" + +msgid "June" +msgstr "Ιούνιος" + +msgid "July" +msgstr "Ιούλιος" + +msgid "August" +msgstr "Αύγουστος" + +msgid "September" +msgstr "Σεπτέμβριος" + +msgid "October" +msgstr "Οκτώβριος" + +msgid "November" +msgstr "Νοέμβριος" + +msgid "December" +msgstr "Δεκέμβριος" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Ιαν" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Φεβ" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Μάρ" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Απρ" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Μάι" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Ιούν" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Ιούλ" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Αύγ" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Σεπ" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Οκτ" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Νοέ" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Δεκ" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Κ" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Δ" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Τ" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Τ" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Π" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Π" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Σ" + +msgid "Show" +msgstr "Προβολή" + +msgid "Hide" +msgstr "Απόκρυψη" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..ee8c3cf4d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,908 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/admin/actions.py:16 +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +#: contrib/admin/actions.py:46 +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#: contrib/admin/actions.py:55 contrib/admin/options.py:1897 +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +#: contrib/admin/actions.py:57 contrib/admin/options.py:1899 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/apps.py:13 +msgid "Administration" +msgstr "" + +#: contrib/admin/filters.py:108 contrib/admin/filters.py:213 +#: contrib/admin/filters.py:249 contrib/admin/filters.py:284 +#: contrib/admin/filters.py:403 contrib/admin/filters.py:469 +msgid "All" +msgstr "" + +#: contrib/admin/filters.py:250 +msgid "Yes" +msgstr "" + +#: contrib/admin/filters.py:251 +msgid "No" +msgstr "" + +#: contrib/admin/filters.py:262 +msgid "Unknown" +msgstr "" + +#: contrib/admin/filters.py:332 +msgid "Any date" +msgstr "" + +#: contrib/admin/filters.py:333 +msgid "Today" +msgstr "" + +#: contrib/admin/filters.py:337 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filters.py:341 +msgid "This month" +msgstr "" + +#: contrib/admin/filters.py:345 +msgid "This year" +msgstr "" + +#: contrib/admin/filters.py:353 +msgid "No date" +msgstr "" + +#: contrib/admin/filters.py:354 +msgid "Has date" +msgstr "" + +#: contrib/admin/filters.py:470 +msgid "Empty" +msgstr "" + +#: contrib/admin/filters.py:471 +msgid "Not empty" +msgstr "" + +#: contrib/admin/forms.py:13 +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +#: contrib/admin/helpers.py:23 +msgid "Action:" +msgstr "" + +#: contrib/admin/helpers.py:350 +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +#: contrib/admin/helpers.py:353 +msgid "Remove" +msgstr "" + +#: contrib/admin/models.py:17 +msgid "Addition" +msgstr "" + +#: contrib/admin/models.py:18 contrib/admin/templates/admin/app_list.html:28 +#: contrib/admin/templates/admin/edit_inline/stacked.html:16 +#: contrib/admin/templates/admin/edit_inline/tabular.html:36 +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:11 +msgid "Change" +msgstr "" + +#: contrib/admin/models.py:19 +msgid "Deletion" +msgstr "" + +#: contrib/admin/models.py:41 +msgid "action time" +msgstr "" + +#: contrib/admin/models.py:48 +msgid "user" +msgstr "" + +#: contrib/admin/models.py:53 +msgid "content type" +msgstr "" + +#: contrib/admin/models.py:56 +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation (https://docs.python.org/library/functions.html#repr) +#: contrib/admin/models.py:58 +msgid "object repr" +msgstr "" + +#: contrib/admin/models.py:59 +msgid "action flag" +msgstr "" + +#: contrib/admin/models.py:61 +msgid "change message" +msgstr "" + +#: contrib/admin/models.py:66 +msgid "log entry" +msgstr "" + +#: contrib/admin/models.py:67 +msgid "log entries" +msgstr "" + +#: contrib/admin/models.py:76 +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#: contrib/admin/models.py:78 +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#: contrib/admin/models.py:83 +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +#: contrib/admin/models.py:85 +msgid "LogEntry Object" +msgstr "" + +#: contrib/admin/models.py:111 +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +#: contrib/admin/models.py:113 +msgid "Added." +msgstr "" + +#: contrib/admin/models.py:117 contrib/admin/options.py:2132 +msgid "and" +msgstr "" + +#: contrib/admin/models.py:121 +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#: contrib/admin/models.py:125 +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#: contrib/admin/models.py:129 +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +#: contrib/admin/models.py:132 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/options.py:202 contrib/admin/options.py:234 +msgid "None" +msgstr "" + +#: contrib/admin/options.py:280 +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#: contrib/admin/options.py:1232 contrib/admin/options.py:1256 +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +#: contrib/admin/options.py:1234 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/options.py:1246 +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#: contrib/admin/options.py:1296 +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/options.py:1306 +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/options.py:1319 +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#: contrib/admin/options.py:1331 +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +#: contrib/admin/options.py:1408 contrib/admin/options.py:1738 +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +#: contrib/admin/options.py:1427 +msgid "No action selected." +msgstr "" + +#: contrib/admin/options.py:1452 +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#: contrib/admin/options.py:1538 +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#: contrib/admin/options.py:1633 +#, python-format +msgid "Add %s" +msgstr "" + +#: contrib/admin/options.py:1635 +#, python-format +msgid "Change %s" +msgstr "" + +#: contrib/admin/options.py:1637 +#, python-format +msgid "View %s" +msgstr "" + +#: contrib/admin/options.py:1716 +msgid "Database error" +msgstr "" + +#: contrib/admin/options.py:1785 +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/options.py:1816 +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/options.py:1824 +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#: contrib/admin/options.py:1944 +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#: contrib/admin/options.py:2125 +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#: contrib/admin/options.py:2134 +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +#: contrib/admin/sites.py:48 contrib/admin/templates/admin/base_site.html:3 +msgid "Django site admin" +msgstr "" + +#: contrib/admin/sites.py:51 contrib/admin/templates/admin/base_site.html:6 +msgid "Django administration" +msgstr "" + +#: contrib/admin/sites.py:54 +msgid "Site administration" +msgstr "" + +#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:63 +#: contrib/admin/templates/registration/password_reset_complete.html:15 +#: contrib/admin/tests.py:135 +msgid "Log in" +msgstr "" + +#: contrib/admin/sites.py:547 +#, python-format +msgid "%(app)s administration" +msgstr "" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +#: contrib/admin/templates/admin/500.html:6 +#: contrib/admin/templates/admin/app_index.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:10 +#: contrib/admin/templates/admin/base.html:66 +#: contrib/admin/templates/admin/change_form.html:18 +#: contrib/admin/templates/admin/change_list.html:31 +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#: contrib/admin/templates/admin/delete_selected_confirmation.html:14 +#: contrib/admin/templates/admin/invalid_setup.html:6 +#: contrib/admin/templates/admin/object_history.html:6 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_form.html:7 +#: contrib/admin/templates/registration/password_reset_complete.html:6 +#: contrib/admin/templates/registration/password_reset_confirm.html:7 +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:7 +msgid "Home" +msgstr "" + +#: contrib/admin/templates/admin/500.html:7 +msgid "Server error" +msgstr "" + +#: contrib/admin/templates/admin/500.html:11 +msgid "Server error (500)" +msgstr "" + +#: contrib/admin/templates/admin/500.html:14 +msgid "Server Error (500)" +msgstr "" + +#: contrib/admin/templates/admin/500.html:15 +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +#: contrib/admin/templates/admin/actions.html:8 +msgid "Run the selected action" +msgstr "" + +#: contrib/admin/templates/admin/actions.html:8 +msgid "Go" +msgstr "" + +#: contrib/admin/templates/admin/actions.html:16 +msgid "Click here to select the objects across all pages" +msgstr "" + +#: contrib/admin/templates/admin/actions.html:16 +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +#: contrib/admin/templates/admin/actions.html:18 +msgid "Clear selection" +msgstr "" + +#: contrib/admin/templates/admin/app_list.html:8 +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +#: contrib/admin/templates/admin/app_list.html:19 +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:18 +msgid "Add" +msgstr "" + +#: contrib/admin/templates/admin/app_list.html:26 +#: contrib/admin/templates/admin/edit_inline/stacked.html:16 +#: contrib/admin/templates/admin/edit_inline/tabular.html:36 +msgid "View" +msgstr "" + +#: contrib/admin/templates/admin/app_list.html:39 +msgid "You don’t have permission to view or edit anything." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:8 +msgid "Enter a username and password." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/change_password.html:14 +#: contrib/admin/templates/admin/auth/user/change_password.html:52 +#: contrib/admin/templates/admin/base.html:53 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:4 +msgid "Change password" +msgstr "" + +#: contrib/admin/templates/admin/auth/user/change_password.html:25 +#: contrib/admin/templates/admin/change_form.html:43 +#: contrib/admin/templates/admin/change_list.html:51 +#: contrib/admin/templates/admin/login.html:23 +#: contrib/admin/templates/registration/password_change_form.html:18 +msgid "Please correct the error below." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/change_password.html:25 +#: contrib/admin/templates/admin/change_form.html:43 +#: contrib/admin/templates/admin/change_list.html:51 +#: contrib/admin/templates/admin/login.html:23 +#: contrib/admin/templates/registration/password_change_form.html:18 +msgid "Please correct the errors below." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/change_password.html:29 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +#: contrib/admin/templates/admin/base.html:39 +msgid "Welcome," +msgstr "" + +#: contrib/admin/templates/admin/base.html:44 +msgid "View site" +msgstr "" + +#: contrib/admin/templates/admin/base.html:49 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:4 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin/base.html:55 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:4 +msgid "Log out" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/change_list_object_tools.html:8 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: contrib/admin/templates/admin/change_form_object_tools.html:5 +#: contrib/admin/templates/admin/object_history.html:10 +msgid "History" +msgstr "" + +#: contrib/admin/templates/admin/change_form_object_tools.html:7 +#: contrib/admin/templates/admin/edit_inline/stacked.html:18 +#: contrib/admin/templates/admin/edit_inline/tabular.html:38 +msgid "View on site" +msgstr "" + +#: contrib/admin/templates/admin/change_list.html:76 +msgid "Filter" +msgstr "" + +#: contrib/admin/templates/admin/change_list.html:78 +msgid "Clear all filters" +msgstr "" + +#: contrib/admin/templates/admin/change_list_results.html:17 +msgid "Remove from sorting" +msgstr "" + +#: contrib/admin/templates/admin/change_list_results.html:18 +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +#: contrib/admin/templates/admin/change_list_results.html:19 +msgid "Toggle sorting" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:18 +#: contrib/admin/templates/admin/submit_line.html:7 +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:25 +msgid "Delete" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:24 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:31 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:38 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:40 +#: contrib/admin/templates/admin/delete_selected_confirmation.html:39 +msgid "Objects" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:47 +#: contrib/admin/templates/admin/delete_selected_confirmation.html:50 +msgid "Yes, I’m sure" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:48 +#: contrib/admin/templates/admin/delete_selected_confirmation.html:51 +msgid "No, take me back" +msgstr "" + +#: contrib/admin/templates/admin/delete_selected_confirmation.html:17 +msgid "Delete multiple objects" +msgstr "" + +#: contrib/admin/templates/admin/delete_selected_confirmation.html:23 +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_selected_confirmation.html:30 +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_selected_confirmation.html:37 +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +#: contrib/admin/templates/admin/edit_inline/tabular.html:22 +msgid "Delete?" +msgstr "" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +#: contrib/admin/templates/admin/includes/object_delete_summary.html:2 +msgid "Summary" +msgstr "" + +#: contrib/admin/templates/admin/index.html:23 +msgid "Recent actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:24 +msgid "My actions" +msgstr "" + +#: contrib/admin/templates/admin/index.html:28 +msgid "None available" +msgstr "" + +#: contrib/admin/templates/admin/index.html:42 +msgid "Unknown content" +msgstr "" + +#: contrib/admin/templates/admin/invalid_setup.html:12 +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#: contrib/admin/templates/admin/login.html:39 +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +#: contrib/admin/templates/admin/login.html:59 +msgid "Forgotten your password or username?" +msgstr "" + +#: contrib/admin/templates/admin/nav_sidebar.html:2 +msgid "Toggle navigation" +msgstr "" + +#: contrib/admin/templates/admin/nav_sidebar.html:5 +msgid "Start typing to filter…" +msgstr "" + +#: contrib/admin/templates/admin/nav_sidebar.html:6 +msgid "Filter navigation items" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:22 +msgid "Date/time" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:23 +msgid "User" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:24 +msgid "Action" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:38 +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +#: contrib/admin/templates/admin/pagination.html:10 +#: contrib/admin/templates/admin/search_form.html:9 +msgid "Show all" +msgstr "" + +#: contrib/admin/templates/admin/pagination.html:11 +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save" +msgstr "" + +#: contrib/admin/templates/admin/popup_response.html:3 +msgid "Popup closing…" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:7 +msgid "Search" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:9 +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/search_form.html:9 +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:9 +msgid "Save as new" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:10 +msgid "Save and add another" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:11 +msgid "Save and continue editing" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:11 +msgid "Save and view" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:12 +msgid "Close" +msgstr "" + +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:10 +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:17 +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#: contrib/admin/templates/admin/widgets/related_widget_wrapper.html:24 +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +#: contrib/admin/templates/registration/logged_out.html:12 +msgid "Log in again" +msgstr "" + +#: contrib/admin/templates/registration/password_change_done.html:7 +#: contrib/admin/templates/registration/password_change_form.html:8 +msgid "Password change" +msgstr "" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +#: contrib/admin/templates/registration/password_change_form.html:51 +#: contrib/admin/templates/registration/password_reset_confirm.html:31 +msgid "Change my password" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_complete.html:7 +#: contrib/admin/templates/registration/password_reset_done.html:7 +#: contrib/admin/templates/registration/password_reset_form.html:8 +msgid "Password reset" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_complete.html:13 +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_confirm.html:8 +msgid "Password reset confirmation" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_confirm.html:16 +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_confirm.html:23 +msgid "New password:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_confirm.html:28 +msgid "Confirm password:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_confirm.html:37 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:13 +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_done.html:15 +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:4 +msgid "Please go to the following page and choose a new password:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:8 +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:10 +msgid "Thanks for using our site!" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:14 +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:20 +msgid "Email address:" +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:23 +msgid "Reset my password" +msgstr "" + +#: contrib/admin/templatetags/admin_list.py:391 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/main.py:103 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:105 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:107 +#, python-format +msgid "Select %s to view" +msgstr "" + +#: contrib/admin/widgets.py:87 +msgid "Date:" +msgstr "" + +#: contrib/admin/widgets.py:88 +msgid "Time:" +msgstr "" + +#: contrib/admin/widgets.py:150 +msgid "Lookup" +msgstr "" + +#: contrib/admin/widgets.py:340 +msgid "Currently:" +msgstr "" + +#: contrib/admin/widgets.py:341 +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..bca964aa4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po @@ -0,0 +1,316 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/static/admin/js/SelectFilter2.js:38 +#, javascript-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:44 +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:60 +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:65 +msgid "Filter" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:69 +msgid "Choose all" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:69 +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:75 +msgid "Choose" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:77 +msgid "Remove" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:83 +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:89 +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:99 +msgid "Remove all" +msgstr "" + +#: contrib/admin/static/admin/js/SelectFilter2.js:99 +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +#: contrib/admin/static/admin/js/actions.js:64 +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/static/admin/js/actions.js:130 +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +#: contrib/admin/static/admin/js/actions.js:143 +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +#: contrib/admin/static/admin/js/actions.js:144 +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:13 +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:111 +msgid "Now" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:14 +msgid "Midnight" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:15 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:16 +msgid "Noon" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:17 +msgid "6 p.m." +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:78 +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:86 +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:129 +msgid "Choose a Time" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:159 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:176 +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:334 +msgid "Cancel" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:239 +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:319 +msgid "Today" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:256 +msgid "Choose a Date" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:313 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/static/admin/js/admin/DateTimeShortcuts.js:325 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:11 +msgid "January" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:12 +msgid "February" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:13 +msgid "March" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:14 +msgid "April" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:15 +msgid "May" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:16 +msgid "June" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:17 +msgid "July" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:18 +msgid "August" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:19 +msgid "September" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:20 +msgid "October" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:21 +msgid "November" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:22 +msgid "December" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:25 +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:26 +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:27 +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:28 +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:29 +msgctxt "abbrev. month May" +msgid "May" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:30 +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:31 +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:32 +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:33 +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:34 +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:35 +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:36 +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:39 +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:40 +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:41 +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:42 +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:43 +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:44 +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +#: contrib/admin/static/admin/js/calendar.js:45 +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +#: contrib/admin/static/admin/js/collapse.js:16 +#: contrib/admin/static/admin/js/collapse.js:34 +msgid "Show" +msgstr "" + +#: contrib/admin/static/admin/js/collapse.js:30 +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c86ec5d03092a83b47ec0c7ec5130725697ff585 GIT binary patch literal 16191 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 B!k_>E literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..dfe62a07c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,724 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2014 +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 07:21+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Delete selected %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Successfully deleted %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Cannot delete %(name)s" + +msgid "Are you sure?" +msgstr "Are you sure?" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "All" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Any date" +msgstr "Any date" + +msgid "Today" +msgstr "Today" + +msgid "Past 7 days" +msgstr "Past 7 days" + +msgid "This month" +msgstr "This month" + +msgid "This year" +msgstr "This year" + +msgid "No date" +msgstr "No date" + +msgid "Has date" +msgstr "Has date" + +msgid "Empty" +msgstr "Empty" + +msgid "Not empty" +msgstr "Not empty" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." + +msgid "Action:" +msgstr "Action:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Add another %(verbose_name)s" + +msgid "Remove" +msgstr "Remove" + +msgid "Addition" +msgstr "Addition" + +msgid "Change" +msgstr "Change" + +msgid "Deletion" +msgstr "Deletion" + +msgid "action time" +msgstr "action time" + +msgid "user" +msgstr "user" + +msgid "content type" +msgstr "content type" + +msgid "object id" +msgstr "object id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "object repr" + +msgid "action flag" +msgstr "action flag" + +msgid "change message" +msgstr "change message" + +msgid "log entry" +msgstr "log entry" + +msgid "log entries" +msgstr "log entries" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Added “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Changed “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Deleted “%(object)s.”" + +msgid "LogEntry Object" +msgstr "LogEntry Object" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Added {name} “{object}”." + +msgid "Added." +msgstr "Added." + +msgid "and" +msgstr "and" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Changed {fields} for {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Changed {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Deleted {name} “{object}”." + +msgid "No fields changed." +msgstr "No fields changed." + +msgid "None" +msgstr "None" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Hold down “Control”, or “Command” on a Mac, to select more than one." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "The {name} “{obj}” was added successfully." + +msgid "You may edit it again below." +msgstr "You may edit it again below." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"The {name} “{obj}” was added successfully. You may add another {name} below." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"The {name} “{obj}” was changed successfully. You may edit it again below." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"The {name} “{obj}” was added successfully. You may edit it again below." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "The {name} “{obj}” was changed successfully." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." + +msgid "No action selected." +msgstr "No action selected." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "The %(name)s “%(obj)s” was deleted successfully." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" + +#, python-format +msgid "Add %s" +msgstr "Add %s" + +#, python-format +msgid "Change %s" +msgstr "Change %s" + +#, python-format +msgid "View %s" +msgstr "View %s" + +msgid "Database error" +msgstr "Database error" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s was changed successfully." +msgstr[1] "%(count)s %(name)s were changed successfully." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selected" +msgstr[1] "All %(total_count)s selected" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s selected" + +#, python-format +msgid "Change history: %s" +msgstr "Change history: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django site admin" + +msgid "Django administration" +msgstr "Django administration" + +msgid "Site administration" +msgstr "Site administration" + +msgid "Log in" +msgstr "Log in" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administration" + +msgid "Page not found" +msgstr "Page not found" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "We’re sorry, but the requested page could not be found." + +msgid "Home" +msgstr "Home" + +msgid "Server error" +msgstr "Server error" + +msgid "Server error (500)" +msgstr "Server error (500)" + +msgid "Server Error (500)" +msgstr "Server Error (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." + +msgid "Run the selected action" +msgstr "Run the selected action" + +msgid "Go" +msgstr "Go" + +msgid "Click here to select the objects across all pages" +msgstr "Click here to select the objects across all pages" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Select all %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Clear selection" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Models in the %(name)s application" + +msgid "Add" +msgstr "Add" + +msgid "View" +msgstr "View" + +msgid "You don’t have permission to view or edit anything." +msgstr "You don’t have permission to view or edit anything." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." + +msgid "Enter a username and password." +msgstr "Enter a username and password." + +msgid "Change password" +msgstr "Change password" + +msgid "Please correct the error below." +msgstr "Please correct the error below." + +msgid "Please correct the errors below." +msgstr "Please correct the errors below." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Enter a new password for the user %(username)s." + +msgid "Welcome," +msgstr "Welcome," + +msgid "View site" +msgstr "View site" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Log out" + +#, python-format +msgid "Add %(name)s" +msgstr "Add %(name)s" + +msgid "History" +msgstr "History" + +msgid "View on site" +msgstr "View on site" + +msgid "Filter" +msgstr "Filter" + +msgid "Clear all filters" +msgstr "Clear all filters" + +msgid "Remove from sorting" +msgstr "Remove from sorting" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorting priority: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toggle sorting" + +msgid "Delete" +msgstr "Delete" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" + +msgid "Objects" +msgstr "Objects" + +msgid "Yes, I’m sure" +msgstr "Yes, I’m sure" + +msgid "No, take me back" +msgstr "No, take me back" + +msgid "Delete multiple objects" +msgstr "Delete multiple objects" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" + +msgid "Delete?" +msgstr "Delete?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " By %(filter_title)s " + +msgid "Summary" +msgstr "Summary" + +msgid "Recent actions" +msgstr "Recent actions" + +msgid "My actions" +msgstr "My actions" + +msgid "None available" +msgstr "None available" + +msgid "Unknown content" +msgstr "Unknown content" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"You are authenticated as %(username)s, but are not authorised to access this " +"page. Would you like to login to a different account?" + +msgid "Forgotten your password or username?" +msgstr "Forgotten your password or username?" + +msgid "Toggle navigation" +msgstr "Toggle navigation" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Date/time" + +msgid "User" +msgstr "User" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." + +msgid "Show all" +msgstr "Show all" + +msgid "Save" +msgstr "Save" + +msgid "Popup closing…" +msgstr "Popup closing…" + +msgid "Search" +msgstr "Search" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s result" +msgstr[1] "%(counter)s results" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Save as new" + +msgid "Save and add another" +msgstr "Save and add another" + +msgid "Save and continue editing" +msgstr "Save and continue editing" + +msgid "Save and view" +msgstr "Save and view" + +msgid "Close" +msgstr "Close" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Change selected %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Add another %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Delete selected %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Log in again" + +msgid "Password change" +msgstr "Password change" + +msgid "Your password was changed." +msgstr "Your password was changed." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." + +msgid "Change my password" +msgstr "Change my password" + +msgid "Password reset" +msgstr "Password reset" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Your password has been set. You may go ahead and log in now." + +msgid "Password reset confirmation" +msgstr "Password reset confirmation" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." + +msgid "New password:" +msgstr "New password:" + +msgid "Confirm password:" +msgstr "Confirm password:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Please go to the following page and choose a new password:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Your username, in case you’ve forgotten:" + +msgid "Thanks for using our site!" +msgstr "Thanks for using our site!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "The %(site_name)s team" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." + +msgid "Email address:" +msgstr "Email address:" + +msgid "Reset my password" +msgstr "Reset my password" + +msgid "All dates" +msgstr "All dates" + +#, python-format +msgid "Select %s" +msgstr "Select %s" + +#, python-format +msgid "Select %s to change" +msgstr "Select %s to change" + +#, python-format +msgid "Select %s to view" +msgstr "Select %s to view" + +msgid "Date:" +msgstr "Date:" + +msgid "Time:" +msgstr "Time:" + +msgid "Lookup" +msgstr "Lookup" + +msgid "Currently:" +msgstr "Currently:" + +msgid "Change:" +msgstr "Change:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..077e7840fa67c8b268dc4b0fbc583f23e00c9619 GIT binary patch literal 5001 zcmeH}O^g&p6vs;$6bJkQ1ys-iS=v6AXs<5f8?L2QL~w;z_;eMH7t&5s()Qo zuc}_X_o}+iFHF78khUT(qkJu6hlwdXkWS8J>;do;cpdnO<(DA->}y;87F>Yx54QY^ z`Ovn13_gnT=U@q3j6taVI7spaq;aS4fCxJYlAfnQ((@IN=6@4>4SXAX z863eNH19VcjrScMo4_AI>bD4wbKr9D4EPz?1P@~HCE!=!Qt&)@C-|4;!uhZf$_}^~ z+-3PVNc|%4cJKv|`n?O1{1@O|;7{Np@K4Kma1zNc1F3%4mh<3kC?5f7o+rQ)*D&@x zNdCX>ro{gAo>5SZT|x#`M*IL_X0@% zpL`rAoV)~lKFgyqwgr!1efe9rQ;CAzW!de}rhUTNR6 zAlZWAa0T*x$S?!jfV>)E1!dNr#d^Q%`UGkvh6}uq|dh3wGO2P7kq~> zU8R!O=qj1+k{|aCrHTjhy~=TJG_SY*=7aLRbH)b*nX`Q9!BQ) zVI6T1&|-OAM*$agDO|E=D1%8Ea9U1gW?86y^}@U?>z;D2YS@`YCzDn0*DW?)F`6te z5gW>a?8S<*X%e|&9fGC07jpbfU2@+GVd*LtT@KE~>u-p5$0wm~NM3H+DDqT|x;D6{ z;vvd<3hVH7iwi6TEs9sjX;zM}Oaf&kEE+(lEKN&7hGsV{&Cy+knHiOu_VY!JY!v)Y zjS>_6mqyw}c$9QQlisYrwxX_SpAIVl-3-(g~tOyTmkIibX1!bY_D{*E8`k)v?U(YOFF1 z*JbEfOyQL5Y3Q6sDZKPFbxx=h zUV57BIh6u?TX1rvaC}`>tt6^@rQ_2rg=ddA&O6k$dusRNT&1%!g_oWtd#0qoo|fq| zC51Pp73?Mrf}H0A4}qS_ch?oPqPjwNT~U~bwnVCUNo^EMUQ$=8M?pxErEbYmBrmT# zBwdwMA7TdreGDHxXSeG-B7+b+EXUnr*hV@%A)7idP9dy$uCpzwg-%K5c>2J&Ga)BE z5_RZnmgB=i!&zr&gOknj?D|}G{n{a<^ga<9rxXYk`oicS$8kvTycfqD-)wYaD{?g{ zXOuKs&_mTCQIk$dibjs_R5ctFb>2UQk82=&PYm$>x-re%;9#rO%Aih#UR6$ID!MV4 zDBXc?hZ>aX=-9!*fplSaVdupaW-~+S?TA^apdyZ}95-^x3^sk?sZF#?gHW2$gQdK) z@uD0}SCxUYQ&qH!b34a3mOV4Ab&kh#r4RTKly&ktXoNYgnsG549p1!~*U^5(SB&!P zz^3#SFB-F#kl9Pf>?LIO5;A)U;a9$d(1nBU7IcZA+XCGS=n_C*eEPc6x12uO^m(Sw OaGn)d5x)|ChuFV9^)a9T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..c4e52eb14 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po @@ -0,0 +1,266 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2014 +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-11 13:13+0000\n" +"Last-Translator: Tom Fifield \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Available %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Type into this box to filter down the list of available %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Choose all" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click to choose all %s at once." + +msgid "Choose" +msgstr "Choose" + +msgid "Remove" +msgstr "Remove" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chosen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." + +msgid "Remove all" +msgstr "Remove all" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click to remove all chosen %s at once." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s of %(cnt)s selected" +msgstr[1] "%(sel)s of %(cnt)s selected" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." + +msgid "Now" +msgstr "Now" + +msgid "Midnight" +msgstr "Midnight" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Noon" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Note: You are %s hour ahead of server time." +msgstr[1] "Note: You are %s hours ahead of server time." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Note: You are %s hour behind server time." +msgstr[1] "Note: You are %s hours behind server time." + +msgid "Choose a Time" +msgstr "Choose a Time" + +msgid "Choose a time" +msgstr "Choose a time" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Today" +msgstr "Today" + +msgid "Choose a Date" +msgstr "Choose a Date" + +msgid "Yesterday" +msgstr "Yesterday" + +msgid "Tomorrow" +msgstr "Tomorrow" + +msgid "January" +msgstr "January" + +msgid "February" +msgstr "February" + +msgid "March" +msgstr "March" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "June" + +msgid "July" +msgstr "July" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "October" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Oct" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dec" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Show" + +msgid "Hide" +msgstr "Hide" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b20f7bd18c6a2d364ec554baa8332a1464055d2f GIT binary patch literal 11159 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

    MRTUnUNmm zc$Vt@uy(jryEn|V?QGbV+c}M$2>Z;s+R?ldwQ9EyI(cm&ZP>Bn$7(0S6w_L-@%qlb?kTpj85`s~>LGO}t5*so!W@S$R+AG1f, 2019 +# jon_atkinson , 2011-2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-04-05 10:37+0000\n" +"Last-Translator: Adam Forster \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Successfully deleted %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Cannot delete %(name)s" + +msgid "Are you sure?" +msgstr "Are you sure?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Delete selected %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "All" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Any date" +msgstr "Any date" + +msgid "Today" +msgstr "Today" + +msgid "Past 7 days" +msgstr "Past 7 days" + +msgid "This month" +msgstr "This month" + +msgid "This year" +msgstr "This year" + +msgid "No date" +msgstr "No date" + +msgid "Has date" +msgstr "Has date" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." + +msgid "Action:" +msgstr "Action:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Add another %(verbose_name)s" + +msgid "Remove" +msgstr "Remove" + +msgid "Addition" +msgstr "Addition" + +msgid "Change" +msgstr "Change" + +msgid "Deletion" +msgstr "Deletion" + +msgid "action time" +msgstr "action time" + +msgid "user" +msgstr "user" + +msgid "content type" +msgstr "content type" + +msgid "object id" +msgstr "object id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "object repr" + +msgid "action flag" +msgstr "action flag" + +msgid "change message" +msgstr "change message" + +msgid "log entry" +msgstr "log entry" + +msgid "log entries" +msgstr "log entries" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Added \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Changed \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Deleted \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "LogEntry Object" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Added {name} \"{object}\"." + +msgid "Added." +msgstr "Added." + +msgid "and" +msgstr "and" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "No fields changed." + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." + +msgid "No action selected." +msgstr "No action selected." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "The %(name)s \"%(obj)s\" was deleted successfully." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Add %s" + +#, python-format +msgid "Change %s" +msgstr "Change %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Database error" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s was changed successfully." +msgstr[1] "%(count)s %(name)s were changed successfully." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selected" +msgstr[1] "All %(total_count)s selected" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s selected" + +#, python-format +msgid "Change history: %s" +msgstr "Change history: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django site admin" + +msgid "Django administration" +msgstr "Django administration" + +msgid "Site administration" +msgstr "Site administration" + +msgid "Log in" +msgstr "Log in" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Page not found" + +msgid "We're sorry, but the requested page could not be found." +msgstr "We're sorry, but the requested page could not be found." + +msgid "Home" +msgstr "Home" + +msgid "Server error" +msgstr "Server error" + +msgid "Server error (500)" +msgstr "Server error (500)" + +msgid "Server Error (500)" +msgstr "Server Error (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Run the selected action" + +msgid "Go" +msgstr "Go" + +msgid "Click here to select the objects across all pages" +msgstr "Click here to select the objects across all pages" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Select all %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Clear selection" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." + +msgid "Enter a username and password." +msgstr "Enter a username and password." + +msgid "Change password" +msgstr "Change password" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Enter a new password for the user %(username)s." + +msgid "Welcome," +msgstr "Welcome," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Log out" + +#, python-format +msgid "Add %(name)s" +msgstr "Add %(name)s" + +msgid "History" +msgstr "History" + +msgid "View on site" +msgstr "View on site" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Remove from sorting" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorting priority: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toggle sorting" + +msgid "Delete" +msgstr "Delete" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Yes, I'm sure" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Delete multiple objects" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Delete?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " By %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Add" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "None available" + +msgid "Unknown content" +msgstr "Unknown content" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Forgotten your password or username?" + +msgid "Date/time" +msgstr "Date/time" + +msgid "User" +msgstr "User" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." + +msgid "Show all" +msgstr "Show all" + +msgid "Save" +msgstr "Save" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Search" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s result" +msgstr[1] "%(counter)s results" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Save as new" + +msgid "Save and add another" +msgstr "Save and add another" + +msgid "Save and continue editing" +msgstr "Save and continue editing" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Thanks for spending some quality time with the Web site today." + +msgid "Log in again" +msgstr "Log in again" + +msgid "Password change" +msgstr "Password change" + +msgid "Your password was changed." +msgstr "Your password was changed." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." + +msgid "Change my password" +msgstr "Change my password" + +msgid "Password reset" +msgstr "Password reset" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Your password has been set. You may go ahead and log in now." + +msgid "Password reset confirmation" +msgstr "Password reset confirmation" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." + +msgid "New password:" +msgstr "New password:" + +msgid "Confirm password:" +msgstr "Confirm password:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Please go to the following page and choose a new password:" + +msgid "Your username, in case you've forgotten:" +msgstr "Your username, in case you've forgotten:" + +msgid "Thanks for using our site!" +msgstr "Thanks for using our site!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "The %(site_name)s team" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Reset my password" + +msgid "All dates" +msgstr "All dates" + +#, python-format +msgid "Select %s" +msgstr "Select %s" + +#, python-format +msgid "Select %s to change" +msgstr "Select %s to change" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Date:" + +msgid "Time:" +msgstr "Time:" + +msgid "Lookup" +msgstr "Lookup" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0967a3893dd597f760a560f9d6b02cdd63e4a267 GIT binary patch literal 3147 zcmeH{O>7)B6vqc>`B)%83oT!QN2Roh%1m|xN!m$+XhTxcHY7?mNQDFP?s#_{JoYl< z&1R21!3|XcAt5342uMhXJ14kt;|8iYA&%UUkl_D3lWc$}9Jry3_U&(MKR^H9v&TOj zJMv+G=jqaZ2S;JI@4z3P?wvs}1HJ>^4Sohb0Df7vzb^SL_#pbf11sPU;C%%Yv0!v8mwG%W+oI92rg3;hhip2T95^;jB1)s+ z;+9ZaG_<7AJeU`zDRnU4u{M__NRU(Mu%-QYE{&g{Rr76fmYRMF39Zph!jVO!D45?F z&tz)1q#uWCF?;B?sI-$=@Ty8=u&ffJ+8r0XX05?rKUni~OK^x_y@T$0N9BZ{>qycn z$C51)d$Nh>y6sUa20P+%n@Va7%JL}F=BX(u<3lv;HZ`QSeG(?&9z#u5U;5FhqAI6I zWEq?q()A^Lcy-segy}Mm_7%08@K8}%j{m5rD9pbpvWXZ3b(>n&9n=S1iIlNrj_b!+ zZX-wj;2iJ4X#gBhhrqn&*A}2Bm{JUQ%9l~(o^zO-2~?dsu_)Jnos|@0 z(ZSN-M0=&>n3-@-wkrzOdQ7S3idT@l9M$X%28%r#wr z8Z=+lz8NXgvM*tdY4=21hIJ{@m=;VMC$U3g8%E(iqpSEB6Pu3HSjV|;JTcMl_anzk zsFvK0nl_y%lH7qV<4s8O*5ykR0Cp(UFk9TwJNK+mkAv%+APguGF{)y=O$;Vc%2(F e^xPcP#%C)B-qQ!&?}vBz;T?W>hyP#i@IL_>&5wHk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..03cf67991 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Available %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Type into this box to filter down the list of available %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Choose all" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click to choose all %s at once." + +msgid "Choose" +msgstr "Choose" + +msgid "Remove" +msgstr "Remove" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chosen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." + +msgid "Remove all" +msgstr "Remove all" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click to remove all chosen %s at once." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s of %(cnt)s selected" +msgstr[1] "%(sel)s of %(cnt)s selected" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Now" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Choose a time" + +msgid "Midnight" +msgstr "Midnight" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Noon" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Today" +msgstr "Today" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Yesterday" + +msgid "Tomorrow" +msgstr "Tomorrow" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Show" + +msgid "Hide" +msgstr "Hide" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9a3fd95be53c9771edfb3e13d3fc91e4a5a450b GIT binary patch literal 13656 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..5a74272df --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,711 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Batist D 🐍 , 2012-2013 +# Batist D 🐍 , 2013-2019 +# Claude Paroz , 2016 +# Dinu Gherman , 2011 +# kristjan , 2012 +# Matthieu Desplantes , 2021 +# Nikolay Korotkiy , 2017 +# Adamo Mesha , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-13 08:23+0000\n" +"Last-Translator: Matthieu Desplantes \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Forigi elektitajn %(verbose_name_plural)sn" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sukcese forigis %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ne povas forigi %(name)s" + +msgid "Are you sure?" +msgstr "Ĉu vi certas?" + +msgid "Administration" +msgstr "Administrado" + +msgid "All" +msgstr "Ĉio" + +msgid "Yes" +msgstr "Jes" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nekonata" + +msgid "Any date" +msgstr "Ajna dato" + +msgid "Today" +msgstr "Hodiaŭ" + +msgid "Past 7 days" +msgstr "Lastaj 7 tagoj" + +msgid "This month" +msgstr "Ĉi tiu monato" + +msgid "This year" +msgstr "Ĉi tiu jaro" + +msgid "No date" +msgstr "Neniu dato" + +msgid "Has date" +msgstr "Havas daton" + +msgid "Empty" +msgstr "Malplena" + +msgid "Not empty" +msgstr "Ne malplena" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Bonvolu eniri la ĝustan %(username)s-n kaj pasvorton por personara konto. " +"Notu, ke ambaŭ kampoj povas esti usklecodistinga." + +msgid "Action:" +msgstr "Ago:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Aldoni alian %(verbose_name)sn" + +msgid "Remove" +msgstr "Forigu" + +msgid "Addition" +msgstr "Aldono" + +msgid "Change" +msgstr "Ŝanĝi" + +msgid "Deletion" +msgstr "Forviŝo" + +msgid "action time" +msgstr "aga tempo" + +msgid "user" +msgstr "uzanto" + +msgid "content type" +msgstr "enhava tipo" + +msgid "object id" +msgstr "objekta identigaĵo" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekta prezento" + +msgid "action flag" +msgstr "aga marko" + +msgid "change message" +msgstr "ŝanĝmesaĝo" + +msgid "log entry" +msgstr "protokolero" + +msgid "log entries" +msgstr "protokoleroj" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Aldonis “%(object)s”" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Protokolera objekto" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Aldonita." + +msgid "and" +msgstr "kaj" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Ŝanĝita {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Neniu kampo ŝanĝita." + +msgid "None" +msgstr "Neniu" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Eblas redakti ĝin sube." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Elementoj devas esti elektitaj por elfari agojn sur ilin. Neniu elemento " +"estis ŝanĝita." + +msgid "No action selected." +msgstr "Neniu ago elektita." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Aldoni %sn" + +#, python-format +msgid "Change %s" +msgstr "Ŝanĝi %s" + +#, python-format +msgid "View %s" +msgstr "Vidi %sn" + +msgid "Database error" +msgstr "Datumbaza eraro" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s estis sukcese ŝanĝita." +msgstr[1] "%(count)s %(name)s estis sukcese ŝanĝitaj." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s elektitaj" +msgstr[1] "Ĉiuj %(total_count)s elektitaj" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 el %(cnt)s elektita" + +#, python-format +msgid "Change history: %s" +msgstr "Ŝanĝa historio: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Forigi la %(class_name)s-n “%(instance)s” postulus forigi la sekvajn " +"protektitajn rilatajn objektojn: %(related_objects)s" + +msgid "Django site admin" +msgstr "Djanga reteja administrado" + +msgid "Django administration" +msgstr "Djanga administrado" + +msgid "Site administration" +msgstr "Reteja administrado" + +msgid "Log in" +msgstr "Ensaluti" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administrado" + +msgid "Page not found" +msgstr "Paĝo ne trovita" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Bedaŭrinde la petita paĝo ne estis trovita." + +msgid "Home" +msgstr "Ĉefpaĝo" + +msgid "Server error" +msgstr "Servila eraro" + +msgid "Server error (500)" +msgstr "Servila eraro (500)" + +msgid "Server Error (500)" +msgstr "Servila eraro (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Lanĉi la elektita agon" + +msgid "Go" +msgstr "Ek" + +msgid "Click here to select the objects across all pages" +msgstr "Klaku ĉi-tie por elekti la objektojn trans ĉiuj paĝoj" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Elekti ĉiuj %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Viŝi elekton" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeloj en la %(name)s aplikaĵo" + +msgid "Add" +msgstr "Aldoni" + +msgid "View" +msgstr "Vidi" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Enigu salutnomon kaj pasvorton." + +msgid "Change password" +msgstr "Ŝanĝi pasvorton" + +msgid "Please correct the error below." +msgstr "Bonvolu ĝustigi la eraron sube." + +msgid "Please correct the errors below." +msgstr "Bonvolu ĝustigi la erarojn sube." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Enigu novan pasvorton por la uzanto %(username)s." + +msgid "Welcome," +msgstr "Bonvenon," + +msgid "View site" +msgstr "Vidi retejon" + +msgid "Documentation" +msgstr "Dokumentaro" + +msgid "Log out" +msgstr "Elsaluti" + +#, python-format +msgid "Add %(name)s" +msgstr "Aldoni %(name)sn" + +msgid "History" +msgstr "Historio" + +msgid "View on site" +msgstr "Vidi sur retejo" + +msgid "Filter" +msgstr "Filtri" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Forigi el ordigado" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ordiga prioritato: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Ŝalti ordigadon" + +msgid "Delete" +msgstr "Forigi" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Foriganti la %(object_name)s '%(escaped_object)s' rezultus en foriganti " +"rilatajn objektojn, sed via konto ne havas permeson por forigi la sekvantajn " +"tipojn de objektoj:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Forigi la %(object_name)s '%(escaped_object)s' postulus forigi la sekvajn " +"protektitajn rilatajn objektojn:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ĉu vi certas, ke vi volas forigi %(object_name)s \"%(escaped_object)s\"? " +"Ĉiuj el la sekvaj rilataj eroj estos forigitaj:" + +msgid "Objects" +msgstr "Objektoj" + +msgid "Yes, I’m sure" +msgstr "Jes, mi certas" + +msgid "No, take me back" +msgstr "Ne, reen" + +msgid "Delete multiple objects" +msgstr "Forigi plurajn objektojn" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Forigi la %(objects_name)s rezultus en forigi rilatajn objektojn, sed via " +"konto ne havas permeson por forigi la sekvajn tipojn de objektoj:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Forigi la %(objects_name)s postulus forigi la sekvajn protektitajn rilatajn " +"objektojn:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ĉu vi certas, ke vi volas forigi la elektitajn %(objects_name)s? Ĉiuj el la " +"sekvaj objektoj kaj iliaj rilataj eroj estos forigita:" + +msgid "Delete?" +msgstr "Forviŝi?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Laŭ %(filter_title)s " + +msgid "Summary" +msgstr "Resumo" + +msgid "Recent actions" +msgstr "Lastaj agoj" + +msgid "My actions" +msgstr "Miaj agoj" + +msgid "None available" +msgstr "Neniu disponebla" + +msgid "Unknown content" +msgstr "Nekonata enhavo" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Vi estas aŭtentikigita kiel %(username)s, sed ne havas permeson aliri tiun " +"paĝon. Ĉu vi ŝatus ensaluti per alia konto?" + +msgid "Forgotten your password or username?" +msgstr "Ĉu vi forgesis vian pasvorton aŭ salutnomo?" + +msgid "Toggle navigation" +msgstr "Ŝalti navigadon" + +msgid "Date/time" +msgstr "Dato/horo" + +msgid "User" +msgstr "Uzanto" + +msgid "Action" +msgstr "Ago" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Ĉi tiu objekto ne havas historion de ŝanĝoj. Ĝi verŝajne ne estis aldonita " +"per ĉi tiu administrejo." + +msgid "Show all" +msgstr "Montri ĉion" + +msgid "Save" +msgstr "Konservi" + +msgid "Popup closing…" +msgstr "Ŝprucfenesto fermiĝas…" + +msgid "Search" +msgstr "Serĉu" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resulto" +msgstr[1] "%(counter)s rezultoj" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s entute" + +msgid "Save as new" +msgstr "Konservi kiel novan" + +msgid "Save and add another" +msgstr "Konservi kaj aldoni alian" + +msgid "Save and continue editing" +msgstr "Konservi kaj daŭre redakti" + +msgid "Save and view" +msgstr "Konservi kaj vidi" + +msgid "Close" +msgstr "Fermi" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Redaktu elektitan %(model)sn" + +#, python-format +msgid "Add another %(model)s" +msgstr "Aldoni alian %(model)sn" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Forigi elektitan %(model)sn" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Dankon pro pasigo de kvalita tempon kun la retejo hodiaŭ." + +msgid "Log in again" +msgstr "Ensaluti denove" + +msgid "Password change" +msgstr "Pasvorta ŝanĝo" + +msgid "Your password was changed." +msgstr "Via pasvorto estis sukcese ŝanĝita." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Bonvolu entajpi vian malnovan pasvorton pro sekureco, kaj entajpi vian novan " +"pasvorton dufoje, por ke ni estu certaj, ke vi tajpis ĝin ĝuste." + +msgid "Change my password" +msgstr "Ŝanĝi mian passvorton" + +msgid "Password reset" +msgstr "Pasvorta rekomencigo" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Via pasvorto estis ŝanĝita. Vi povas iri antaŭen kaj ensaluti nun." + +msgid "Password reset confirmation" +msgstr "Konfirmo de restarigo de pasvorto" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Bonvolu entajpi vian novan pasvorton dufoje, tiel ni povas konfirmi ke vi " +"ĝuste tajpis ĝin." + +msgid "New password:" +msgstr "Nova pasvorto:" + +msgid "Confirm password:" +msgstr "Konfirmi pasvorton:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"La ligilo por restarigi pasvorton estis malvalida, eble ĉar ĝi jam estis " +"uzita. Bonvolu denove peti restarigon de pasvorto." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ni sendis al vi instrukciojn por starigi vian pasvorton, se ekzistas konto " +"kun la retadreso, kiun vi provizis. Vi devus ricevi ilin post mallonge." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se vi ne ricevas retmesaĝon, bonvolu certiĝi, ke vi entajpis la adreson, per " +"kiu vi registriĝis, kaj kontrolu en via spamujo." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vi ricevis ĉi tiun retpoŝton ĉar vi petis pasvortan rekomencigon por via " +"uzanta konto ĉe %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Bonvolu iri al la sekvanta paĝo kaj elekti novan pasvorton:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Via uzantnomo, se vi forgesis ĝin:" + +msgid "Thanks for using our site!" +msgstr "Dankon pro uzo de nia retejo!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "La %(site_name)s teamo" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Ĉu vi forgesis vian pasvorton? Entajpu vian retpoŝtadreson sube kaj ni " +"sendos al vi retpoŝte instrukciojn por ŝanĝi ĝin." + +msgid "Email address:" +msgstr "Retpoŝto:" + +msgid "Reset my password" +msgstr "Rekomencigi mian pasvorton" + +msgid "All dates" +msgstr "Ĉiuj datoj" + +#, python-format +msgid "Select %s" +msgstr "Elekti %sn" + +#, python-format +msgid "Select %s to change" +msgstr "Elekti %sn por ŝanĝi" + +#, python-format +msgid "Select %s to view" +msgstr "Elektu %sn por vidi" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Horo:" + +msgid "Lookup" +msgstr "Trarigardo" + +msgid "Currently:" +msgstr "Nuntempe:" + +msgid "Change:" +msgstr "Ŝanĝo:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b6aa8f21ec04911ba7ba4797c09b7aa2d7afde5 GIT binary patch literal 4452 zcmcJR&yO5O6~`;YK(Yao1Y&+Arn1ELI_vJ8ar`UeY`|XcI=0!hsPN{)$8}3-1B{gat!rp)L%cu*m>}^hw(sJ-^18Ra0Gq`{6*lezz?GRo6z0@ zKZ5q1(Ed~4U%`)}|8Ifs2R@9+Q|NyJd=z{d{2X`?JP0mH8gc8vG+j^BzOzTi{b5&3gyT!9@&y9QwLPdw?e`z6-Wy{R$c~dBOk?vPRIqa(?ZXO4_PrLyC5V5P z297|IyBXTIL8xXw2KR$+gU^F^K+^M%K$=AFdlaPiKMrE)Y+q>a4}320d64{A1IfPQ zAjy9L{5p6Z{0jI}klypq-fDlQK$6=F();#-5Mj@Nq-Qqt9|t$kehK^`_-Byj4L?@# zTj0xR-wf?7@Y`tr0lWoXdz`Tn{0j&-vujUOydHQX@T=elF#fgB{zhOc@KYG0a-O#fcjZfxQQJ`<*0B4tE1ArZ~&D`4fXS=$55wHseGman*(VN=p0cD zQ=!;%sVXL74jcBbr> zg=1%iLZzaWN`9bV3qrSL$`*RY6f%GdeonZFR#RmYEjQUp{oF!ouPjyV0e6PCy*e(^ z6y01nZt#|vEsV#l%*;^wafnv4cf`)gw#-`6vL)HFrLZHmq*90WD=LxfqR_tYVwsNE z#ZpVQENr`n=ZGzLZ~I( znuH9!-K`mp>9UA-HEMgGcPt7~@IP8qx#&MxWDcGlO$zUuLkQN~nih`eh^NMQ=XVSu6<$6MCzsA)vK44kCtgY;t7J(v7T@1A z2=PhN3d~HX$8H-3Z`@-XA4wPUE2$KPtfGQnzC?bb`IY53?^;3^I<1UsSy@)OWWuOY zSFhaN6*5uIUr%G7TBQG zq;Xrk)CzsGjs#Ulu75EZkH#JQGPLM!DY`OhN|81AVv$QoV&`Xi&gG4{xwW;mczbf( zHrZUY&N0%UU{0F3!&A!_mKS$CQjcp>3r0JsVJQx4gFCtI=JHf1eVU@w7ShdMYc55n zcI3#=jJw# zsv4#w9^{?q>zE}z6I;VNRVFq*6Wfwq5?dQ3L)an}8`dvVMNf@qh9IG5-yo+B9J0+f z4Qq<7Co(c3`c=hohl-*~$=2XhJF)dPhdU@IUux8jndBt!`wD5#4ugMo6(n!{@n`xRE3`DUEFXNZD*W7~gA0fz(;q zv9$q7STa<18-g!|?YulTg>P;^QkOdBXN?}3wDeI>^0Sv$&UnvM+Puk$9GZe#l}q}D zfKB89vIL%j`C3-8bo?jQ-``ojm5CU*%Bf>ltV%K)zJuz@qh$A_vTa=)St3#JDlVcS OOIg7Zw)rm0@b^#Jx6s)D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..f101319a4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po @@ -0,0 +1,220 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2012 +# Baptiste Darthenay , 2014-2016 +# Jaffa McNeill , 2011 +# Adamo Mesha , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponebla %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Tio ĉi estas la listo de disponeblaj %s. Vi povas forigi kelkajn elektante " +"ilin en la suba skatolo kaj tiam klakante la \"Elekti\" sagon inter la du " +"skatoloj." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Entipu en ĉi-tiu skatolo por filtri la liston de haveblaj %s." + +msgid "Filter" +msgstr "Filtru" + +msgid "Choose all" +msgstr "Elekti ĉiuj" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klaku por tuj elekti ĉiuj %s." + +msgid "Choose" +msgstr "Elekti" + +msgid "Remove" +msgstr "Forigu" + +#, javascript-format +msgid "Chosen %s" +msgstr "Elektita %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Tio ĉi estas la listo de elektitaj %s. Vi povas forigi kelkajn elektante " +"ilin en la suba skatolo kaj tiam klakante la \"Forigi\" sagon inter la du " +"skatoloj." + +msgid "Remove all" +msgstr "Forigu ĉiujn" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klaku por tuj forigi ĉiujn %s elektitajn." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s elektita" +msgstr[1] "%(sel)s de %(cnt)s elektitaj" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Vi havas neŝirmitajn ŝanĝojn je unuopaj redakteblaj kampoj. Se vi faros " +"agon, viaj neŝirmitaj ŝanĝoj perdiĝos." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Vi elektas agon, sed vi ne ŝirmis viajn ŝanĝojn al individuaj kampoj ĝis " +"nun. Bonvolu klaku BONA por ŝirmi. Vi devos ripeton la agon" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Vi elektas agon, kaj vi ne faris ajnajn ŝanĝojn ĉe unuopaj kampoj. Vi " +"verŝajne serĉas la Iru-butonon prefere ol la Ŝirmu-butono." + +msgid "Now" +msgstr "Nun" + +msgid "Midnight" +msgstr "Noktomezo" + +msgid "6 a.m." +msgstr "6 a.t.m." + +msgid "Noon" +msgstr "Tagmezo" + +msgid "6 p.m." +msgstr "6 ptm" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Noto: Vi estas %s horo antaŭ la servila horo." +msgstr[1] "Noto: Vi estas %s horoj antaŭ la servila horo." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Noto: Vi estas %s horo post la servila horo." +msgstr[1] "Noto: Vi estas %s horoj post la servila horo." + +msgid "Choose a Time" +msgstr "Elektu horon" + +msgid "Choose a time" +msgstr "Elektu tempon" + +msgid "Cancel" +msgstr "Malmendu" + +msgid "Today" +msgstr "Hodiaŭ" + +msgid "Choose a Date" +msgstr "Elektu daton" + +msgid "Yesterday" +msgstr "Hieraŭ" + +msgid "Tomorrow" +msgstr "Morgaŭ" + +msgid "January" +msgstr "januaro" + +msgid "February" +msgstr "februaro" + +msgid "March" +msgstr "marto" + +msgid "April" +msgstr "aprilo" + +msgid "May" +msgstr "majo" + +msgid "June" +msgstr "junio" + +msgid "July" +msgstr "julio" + +msgid "August" +msgstr "aŭgusto" + +msgid "September" +msgstr "septembro" + +msgid "October" +msgstr "oktobro" + +msgid "November" +msgstr "novembro" + +msgid "December" +msgstr "decembro" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "d" + +msgctxt "one letter Monday" +msgid "M" +msgstr "l" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "m" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "m" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "ĵ" + +msgctxt "one letter Friday" +msgid "F" +msgstr "v" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "s" + +msgid "Show" +msgstr "Montru" + +msgid "Hide" +msgstr "Kaŝu" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72401f35257fbde50e4898792f943874ec4da4ad GIT binary patch literal 17696 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, 2014 +# Antoni Aloy , 2011-2014 +# Claude Paroz , 2014 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015-2016 +# 8cb2d5a716c3c9a99b6d20472609a4d5_6d03802 , 2011 +# guillem , 2012 +# Ignacio José Lizarán Rus , 2019 +# Igor Támara , 2013 +# Jannis Leidel , 2011 +# Jorge Puente Sarrín , 2014-2015 +# José Luis , 2016 +# Josue Naaman Nistal Guerra , 2014 +# Luigy, 2019 +# Marc Garcia , 2011 +# Miguel Angel Tribaldos , 2017 +# Pablo, 2015 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-10 03:53+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionado/s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +msgid "Empty" +msgstr "Vacío" + +msgid "Not empty" +msgstr "No vacío" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor introduzca el %(username)s y la clave correctos para una cuenta de " +"personal. Observe que ambos campos pueden ser sensibles a mayúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar %(verbose_name)s adicional." + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Añadido" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Borrado" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id del objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr del objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Agregado “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Modificado “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Eliminado “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Objeto de registro de Log" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Agregado {name} “{object}”." + +msgid "Added." +msgstr "Añadido." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Cambios en {fields} para {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificado {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Eliminado {name} “{object}”." + +msgid "No fields changed." +msgstr "No ha cambiado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Mantenga presionado \"Control\" o \"Comando\" en una Mac, para seleccionar " +"más de uno." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "El {name} “{obj}” fue agregado correctamente." + +msgid "You may edit it again below." +msgstr "Puede volverlo a editar otra vez a continuación." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"El {name} “{obj}” se agregó correctamente. Puede agregar otro {name} a " +"continuación." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"El {name} “{obj}” se cambió correctamente. Puede editarlo nuevamente a " +"continuación." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"El {name} “{obj}” se agregó correctamente. Puede editarlo nuevamente a " +"continuación." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"El {name} “{obj}” se cambió correctamente. Puede agregar otro {name} a " +"continuación." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "El {name} “{obj}” se cambió correctamente." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " +"se han modificado elementos." + +msgid "No action selected." +msgstr "No se seleccionó ninguna acción." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "El%(name)s “%(obj)s” fue eliminado con éxito." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s con el ID “%(key)s” no existe. ¿Quizás fue eliminado?" + +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Vista %s" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s fué modificado con éxito." +msgstr[1] "%(count)s %(name)s fueron modificados con éxito." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado" +msgstr[1] "%(total_count)s seleccionados en total" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "seleccionados 0 de %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s requeriría eliminar los " +"siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Sitio administrativo" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se pudo encontrar la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Hubo un error. Se ha informado a los administradores del sitio por correo " +"electrónico y debería solucionarse en breve. Gracias por su paciencia." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos los %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpiar selección" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Añadir" + +msgid "View" +msgstr "Vista" + +msgid "You don’t have permission to view or edit anything." +msgstr "No cuenta con permiso para ver ni editar nada." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Primero, ingrese un nombre de usuario y contraseña. Luego, podrá editar más " +"opciones del usuario." + +msgid "Enter a username and password." +msgstr "Introduzca un nombre de usuario y contraseña" + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor corrija el siguiente error." + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduzca una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenidos," + +msgid "View site" +msgstr "Ver el sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Cerrar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Clear all filters" +msgstr "Borrar todos los filtros" + +msgid "Remove from sorting" +msgstr "Eliminar del ordenación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la ordenación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la ordenación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"La eliminación de %(object_name)s %(escaped_object)s requeriría eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s" +"\"? Se borrarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I’m sure" +msgstr "Si, estoy seguro" + +msgid "No, take me back" +msgstr "No, llévame atrás" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"La eliminación del %(objects_name)s seleccionado resultaría en el borrado de " +"objetos relacionados, pero su cuenta no tiene permisos para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"La eliminación de %(objects_name)s seleccionado requeriría el borrado de los " +"siguientes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está usted seguro que quiere eliminar el %(objects_name)s seleccionado? " +"Todos los siguientes objetos y sus elementos relacionados serán borrados:" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +msgid "Recent actions" +msgstr "Acciones recientes" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguno disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Algo anda mal con la instalación de su base de datos. Asegúrese de que se " +"hayan creado las tablas de base de datos adecuadas y asegúrese de que el " +"usuario adecuado pueda leer la base de datos." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Se ha autenticado como %(username)s, pero no está autorizado a acceder a " +"esta página. ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado la contraseña o el nombre de usuario?" + +msgid "Toggle navigation" +msgstr "Activar navegación" + +msgid "Start typing to filter…" +msgstr "Empiece a escribir para filtrar…" + +msgid "Filter navigation items" +msgstr "Filtrar elementos de navegación" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Este objeto no tiene un historial de cambios. Probablemente no se agregó a " +"través de este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todo" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing…" +msgstr "Cerrando ventana emergente..." + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y añadir otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Save and view" +msgstr "Guardar y ver" + +msgid "Close" +msgstr "Cerrar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Cambiar %(model)s seleccionados" + +#, python-format +msgid "Add another %(model)s" +msgstr "Añadir otro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionada/o" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Gracias por pasar un buen rato con el sitio web hoy." + +msgid "Log in again" +msgstr "Iniciar sesión de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Ingrese su contraseña anterior, por razones de seguridad, y luego ingrese su " +"nueva contraseña dos veces para que podamos verificar que la ingresó " +"correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Su contraseña ha sido establecida. Ahora puede continuar e iniciar sesión." + +msgid "Password reset confirmation" +msgstr "Confirmación de restablecimiento de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, introduzca su contraseña nueva dos veces para verificar que la ha " +"escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de restablecimiento de contraseña era inválido, seguramente porque " +"se haya usado antes. Por favor, solicite un nuevo restablecimiento de " +"contraseña." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Le enviamos instrucciones por correo electrónico para configurar su " +"contraseña, si existe una cuenta con el correo electrónico que ingresó. " +"Debería recibirlos en breve." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no recibe un correo electrónico, asegúrese de haber ingresado la " +"dirección con la que se registró y verifique su carpeta de correo no deseado." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ha recibido este correo electrónico porque ha solicitado restablecer la " +"contraseña para su cuenta en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña." + +msgid "Your username, in case you’ve forgotten:" +msgstr "Su nombre de usuario, en caso de que lo haya olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"¿Olvidaste tu contraseña? Ingrese su dirección de correo electrónico a " +"continuación y le enviaremos las instrucciones para configurar una nueva." + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Restablecer mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Seleccione %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s a modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Seleccione %s para ver" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..d732ed0c9de5d3cc3a02a66fc7144fa1cd734a97 GIT binary patch literal 5203 zcmb`KTZ|k>6+jCzkgx#)4haO}P&RSACZ5?x@M|0=Uc9@0Wo*YgjaxTeoiAzVq_7%9j++QPP8w-mKImVTBjZjkhRu06qub3V-SOTgboqy)XX}zMb-) zefe*m|A6nH{uR&vc;3xq6VyKd-v%FsAA~jd2s{Jtg1P4>A^+-mULxA(;GOUbzWi0s zZ$g$(-+_0)A3&MsC%*j`@MDyJ1Do)ECXx0lQ2J+3=Do&?F6sspIiH6j=L=BQ{~G)v zya_)K_cMvC`v)lV{fXCM_!lVS?&bA$xE+2O{u=h-1txzl{2hEBd>OtUzUsN{ZgfPs z3h#%F8C~};E-+)W-yYOG| zI{XTUAa-{j$`?N1x!rSz=Pu7Zo>k8o&wZYUJdb$JL5@)^cpmpW>3Q0-;d$2cX-|f# zJ@WDo=Ad@^{0x-6i5>1B?IxiP^%2r`QjPQ>lH7mMh1g@2Bzlwwl@+!s`G-k$(j-aj zQy#I4;d9hyU!D56@MOgmPosbjtt21JcqD|MDK=hf~WW^?0wo}`>FQUKx&bnp0VH~`!X}9jW zQttYUTUBSsP%K+kjPuX8?md6qFeF_fi}g{5Ulq$%5Kw-=92db4;b zV*{y6)&)c-w+N^QHmm7#ku|9;Z9|_uE!vauL+QEqv1K-@6I)I4Qo2$#BZB2|x#-pk zu|b#>ZfdBRlgow3GTn%x3yH^PS`87Q#g%YrR#T?cO6*Ea_gtKHb>R#vyvOSc_gKM8 zjx`MZQH9J{)6hdz$c#04KUIO_EqJa9?(3H7*it>-yYOxm-ecYIchnBXYR}+T#dlW7 zj5T?mQh{SF>prDIPPrJp*$gAsi%E!~R~AR>8ZMT)#%SG=$#S_8m8DI!dC_xIU9+1f zsq}1)_H5?%*2;@Eh|B7W>RjS3^U+4z^GrNt(yZD{Oq@n0b4gua zNVtf)f%U~kKb|Li9$IGK%*@eFkMCx!?RrlzDDLE@W2;STdUd_jH*uJD^<+28`t_-) z)z#HnCR2vX_L_{CDrFra^24WWI<;q_ak89-V2fKgo5z0(K*Urv}|{ze8MH8#jX^WBp52h!r25amD#Dn7RaA49aH!y-8YFT z-E`3xmnogaJxE-@Hf6mPdz~TIM@HBv>|q9D-Ph-z58ENPEwM$UViQ*cD&TB8k22X( zER|gKP~I_b?(ubb4|ri>CU)&E5e!)uto_JH9AdCRJ~07@mKkC(1eC3&8aqc+j3=`q za%75nsVagFwwx4!%=!c?Z)EW1)n&oNV$`XVY{tI(MNXoq*Ryh#tlca${lCOs@v59F z&J`z>i(;{c;sn++{+PvO`2h{ADiLLix-5rkib%+aoN~Auw#IiWx6~E~NF*3_@)!#! zKHp*&Yd7P-iA@mFFiYEDh+)jd3eh~@;oNo{UwjUoex;d|J(n@UuF*Re3KQO`ujZD1 z1Ln#2kVl-ISewj8bhMS6-VleDwIL{*FAVViAnO&stqoyI)xL(fCmeCLS^KGpxqN9m z30r767USgmpPL|YnI4)VQ{m!r`2w z+TXir6YOueIk_RS^FYLk`8C-})Lh3Y+@Cl;@p9th#KVby6Yqu}Tah0z@^eK!qn=Vr LYF?dE4gUTM;zofT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..bdfacec6b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po @@ -0,0 +1,273 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2011-2012 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015-2016 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Leonardo J. Caballero G. , 2011 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-11 05:37+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s Disponibles" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta es la lista de %s disponibles. Puede elegir algunos seleccionándolos en " +"la caja inferior y luego haciendo clic en la flecha \"Elegir\" que hay entre " +"las dos cajas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba en este cuadro para filtrar la lista de %s disponibles" + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Selecciona todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Haga clic para seleccionar todos los %s de una vez" + +msgid "Choose" +msgstr "Elegir" + +msgid "Remove" +msgstr "Eliminar" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s elegidos" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta es la lista de los %s elegidos. Puede elmininar algunos " +"seleccionándolos en la caja inferior y luego haciendo click en la flecha " +"\"Eliminar\" que hay entre las dos cajas." + +msgid "Remove all" +msgstr "Eliminar todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Haz clic para eliminar todos los %s elegidos" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionado" +msgstr[1] "%(sel)s de %(cnt)s seleccionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tiene cambios sin guardar en campos editables individuales. Si ejecuta una " +"acción, los cambios no guardados se perderán." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Ha seleccionado una acción, pero aún no ha guardado los cambios en los " +"campos individuales. Haga clic en Aceptar para guardar. Deberá volver a " +"ejecutar la acción." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ha seleccionado una acción y no ha realizado ningún cambio en campos " +"individuales. Probablemente esté buscando el botón 'Ir' en lugar del botón " +"'Guardar'." + +msgid "Now" +msgstr "Ahora" + +msgid "Midnight" +msgstr "Medianoche" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Usted esta a %s horas por delante de la hora del servidor." +msgstr[1] "Nota: Usted va %s horas por delante de la hora del servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Usted esta a %s hora de retraso de tiempo de servidor." +msgstr[1] "Nota: Usted va %s horas por detrás de la hora del servidor." + +msgid "Choose a Time" +msgstr "Elija una Hora" + +msgid "Choose a time" +msgstr "Elija una hora" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoy" + +msgid "Choose a Date" +msgstr "Elija una Fecha" + +msgid "Yesterday" +msgstr "Ayer" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Ene" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Abr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ago" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Oct" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dic" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..808d19248e7cbfeabb62d778469c6ed710e45df4 GIT binary patch literal 17847 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..c3327e7db --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,736 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leonardo José Guzmán , 2013 +# Ramiro Morales, 2013-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 14:47+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionados/as" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Se eliminaron con éxito %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todos/as" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +msgid "Empty" +msgstr "Vacío/a" + +msgid "Not empty" +msgstr "No vacío/a" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor introduza %(username)s y contraseña correctos de una cuenta de " +"staff. Note que puede que ambos campos sean estrictos en relación a " +"diferencias entre mayúsculas y minúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar otro/a %(verbose_name)s" + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Agregado" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Borrado" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id de objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr de objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Se agrega \"%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Se modifica \"%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Se elimina \"%(object)s”." + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Se agrega {name} \"{object}”." + +msgid "Added." +msgstr "Agregado." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Se modifican {fields} en {name} \"{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificación de {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Se elimina {name} \"{object}”." + +msgid "No fields changed." +msgstr "No ha modificado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Mantenga presionada \"Control” (\"Command” en una Mac) para seleccionar más " +"de uno." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Se agregó con éxito {name} \"{obj}”." + +msgid "You may edit it again below." +msgstr "Puede modificarlo/a nuevamente mas abajo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Se agregó con éxito {name} \"{obj}”. Puede agregar otro/a {name} abajo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Se modificó con éxito {name} \"{obj}”. Puede modificarlo/a nuevamente abajo." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "Se agregó con éxito {name} \"{obj}”. Puede modificarlo/a abajo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Se modificó con éxito {name} \"{obj}”. Puede agregar otro {name} abajo." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Se modificó con éxito {name} \"{obj}”." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Deben existir ítems seleccionados para poder realizar acciones sobre los " +"mismos. No se modificó ningún ítem." + +msgid "No action selected." +msgstr "No se ha seleccionado ninguna acción." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Se eliminó con éxito %(name)s \"%(obj)s”." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "No existe %(name)s con ID \"%(key)s”. ¿Quizá fue eliminado/a?" + +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Ver %s" + +msgid "Database error" +msgstr "Error de base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Se ha modificado con éxito %(count)s %(name)s." +msgstr[1] "Se han modificado con éxito %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionados/as" +msgstr[1] "Todos/as (%(total_count)s en total) han sido seleccionados/as" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionados/as" + +#, python-format +msgid "Change history: %s" +msgstr "Historia de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s provocaría la eliminación de " +"los siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administración de sitio Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Administración de sitio" + +msgid "Log in" +msgstr "Identificarse" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s" + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Lo lamentamos, no se encontró la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha ocurrido un error. Se ha reportado el mismo a los administradores del " +"sitio vía email y debería ser solucionado en breve. Le agradecemos por su " +"paciencia." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ejecutar" + +msgid "Click here to select the objects across all pages" +msgstr "Haga click aquí para seleccionar los objetos de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar lo(s)/a(s) %(total_count)s %(module_name)s existentes" + +msgid "Clear selection" +msgstr "Borrar selección" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Agregar" + +msgid "View" +msgstr "Ver" + +msgid "You don’t have permission to view or edit anything." +msgstr "No tiene permiso para ver o modificar nada." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá " +"configurar opciones adicionales para el usuario." + +msgid "Enter a username and password." +msgstr "Introduzca un nombre de usuario y una contraseña." + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija el error detallado mas abajo." + +msgid "Please correct the errors below." +msgstr "Por favor corrija los errores detallados abajo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduzca una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido/a," + +msgid "View site" +msgstr "Ver sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Cerrar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Clear all filters" +msgstr "Limpiar todos los filtros" + +msgid "Remove from sorting" +msgstr "Remover de ordenamiento" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de ordenamiento: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "(des)activar ordenamiento" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar los %(object_name)s '%(escaped_object)s' requeriría eliminar " +"también los siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que desea eliminar los %(object_name)s \"%(escaped_object)s" +"\"? Se eliminarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objectos" + +msgid "Yes, I’m sure" +msgstr "Si, estoy seguro" + +msgid "No, take me back" +msgstr "No, volver" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar el/los objetos %(objects_name)s seleccionados provocaría la " +"eliminación de objetos relacionados a los mismos, pero su cuenta de usuario " +"no tiene los permisos necesarios para eliminar los siguientes tipos de " +"objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar el/los objetos %(objects_name)s seleccionados requeriría eliminar " +"también los siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está seguro de que desea eliminar el/los objetos %(objects_name)s?. Todos " +"los siguientes objetos e ítems relacionados a los mismos también serán " +"eliminados:" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +msgid "Recent actions" +msgstr "Acciones recientes" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguna disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hay algún problema con su instalación de base de datos. Asegúrese de que las " +"tablas de la misma hayan sido creadas, y asegúrese de que el usuario " +"apropiado tenga permisos de lectura en la base de datos." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Ud. se halla autenticado como %(username)s, pero no está autorizado a " +"acceder a esta página ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Olvidó su contraseña o nombre de usuario?" + +msgid "Toggle navigation" +msgstr "(des)activar navegación" + +msgid "Start typing to filter…" +msgstr "Empiece a escribir para filtrar…" + +msgid "Filter navigation items" +msgstr "Filtrar elementos de navegación" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Este objeto no tiene historia de modificaciones. Probablemente no fue " +"añadido usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todos/as" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing…" +msgstr "Cerrando ventana amergente…" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "total: %(full_result_count)s" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y agregar otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Save and view" +msgstr "Guardar y ver" + +msgid "Close" +msgstr "Cerrar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Modificar %(model)s seleccionados/as" + +#, python-format +msgid "Add another %(model)s" +msgstr "Agregar otro/a %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionados/as" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." + +msgid "Log in again" +msgstr "Identificarse de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, por razones de seguridad, introduzca primero su contraseña " +"antigua y luego introduzca la nueva contraseña dos veces para verificar que " +"la ha escrito correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Recuperar contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Su contraseña ha sido cambiada. Ahora puede continuar e ingresar." + +msgid "Password reset confirmation" +msgstr "Confirmación de reincialización de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor introduzca su nueva contraseña dos veces de manera que podamos " +"verificar que la ha escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de reinicialización de contraseña es inválido, posiblemente debido " +"a que ya ha sido usado. Por favor solicite una nueva reinicialización de " +"contraseña." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Se le han enviado instrucciones sobre cómo establecer su contraseña. Si la " +"dirección de email que proveyó existe, debería recibir las mismas pronto." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no ha recibido un email, por favor asegúrese de que ha introducido la " +"dirección de correo con la que se había registrado y verifique su carpeta de " +"Correo no deseado." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Le enviamos este email porque Ud. ha solicitado que se reestablezca la " +"contraseña para su cuenta de usuario en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Por favor visite la página que se muestra a continuación y elija una nueva " +"contraseña:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Su nombre de usuario en caso de que lo haya olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"¿Olvidó su contraseña? Introduzca su dirección de email abajo y le " +"enviaremos instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Dirección de email:" + +msgid "Reset my password" +msgstr "Recuperar mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Seleccione %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s a modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Seleccione %s que desea ver" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..abd7d3601aba741d5042629900e94a4dcfefcacb GIT binary patch literal 5409 zcmcJSU2I%O6@Ul2w8a4m32j>1&`D?-hj!Po+lH_qG$yf=m^e1}rXf=KncX|yy~*7> z+xxSQ^8n?kfCLhM5(rcgA)ZhL2nhiy2oVH*p$`ZF;-M1o01^*Nm*KOp2hTG2PWTIWCwu|E4ZiHT zeH%8SU4?hR6P_Q2@?H*aho6D+-Z!Ag{{-F*e-C%SmppI9Ng{s_l>RB-o`r9v{Wz3) zo`4r$qtqwi4DFY2qO80Arjn0BS?_TucAA6ys}E4g`acSpQiV{)&7sWqX~@5N+V?-> z`+o)}=>M(f&9{|yI|wncItpc;lfJzGW&U%XAM$K@hEVi%5L2oQiXT1>pM#%*KZi?i zF8g=Br5tZJl==2SS;qwAUmc>7_vfHIZ@}-v$Kj9Qj_qaqJP+mhui+8+2Pk^n$>IzD z!|%|37Ur;vaU|~k?D-eZzj?ms`FGEkJ^$hPFVCBBs*H1s=QhvVAZ}DUJa6~h>3Nsu z-JZKV@Ac$WwO=ZK5e{mPzn_G%Hi^UClzkM;sUD{6qSPqwpveAzFGb?9N)dm^h3Se| zmHYcBb;>w}sf$bEXK)?$H{t`i9w<@7s`mE+$zcysNMq_CuF}QHMdN)P(=6if6 zE-GSjuWyUr9-+M5w`E^q=EA zh5O5E?|5pX{i${HS!*t)1Qr(4Bv+C&lE+GN@> zOHCacJWp)b^=mnYhEtO>-PsZIJe(XyP{*0QL6sTFyDVAQ*X2`*{ zV*OpSHth&Wd=!OoTVCzzFfN8@x=XAha;w^~6rRMoB~J5ldQTZBd$4GNP}63s z78#j6TXmY(ZCcw>sdYbZXyl{d|J0~7(e*TP0pZbbT_<|0##+y^WFj>a`^l=gUn!zY z2X3`o(U$g9=WR+X%5V}{9YY)sb|gmArj>;*ez36Lniq)w^yF7E-8BIrAB!hU+_voL z7#)JJ9|pOJnB7J}T382h0=Ad9CfjsPN6r-vSaC!vmOg=@^DN`_#L$*bCYC45qD}d% z_R8uZq&KUV@@^n~$-08rd-V>g=-CS9 zrrx}e+|<|TUwN(p}J)Ip@>%HYgX4&2c{;g2Og?UP3p<1`XdiNaDZ#rOk`7@$L-v-ZM9)dx2~6aCJxh%9-mIyHqOG>?APO+EbG-L zCRSHhYnhA`uGmYpmg`QGDh?3&p(bqlk?Ez0{bTc|=4Uq6Gg&(@c8myR*s3I`y3XvS zY@!#LFg`4MGD&TA5-|!y1YFy9_!sl^yL1-W9!EXvel*|M+;M$z)hIzNu(1d<>WCvPqjF&rklm# zqs>-yimz}Grac#j96$!g4`O>+4mHILL-$tavC*@ZwQmTNohNaRnu)>-rjY4Kb7%}Q zPv8nYn6OCCUi+f&q-h(UyLu)uLjvSd|DvQ0*1@r%rq<K{j@N^M*q|{v8O+a=@2{_o_tcMf9nfX`d*$8+_ z&7>I)OvMj!(hzTm$A-2C-`U*K%id^*oLr-J9+y$M9@1B@#DVjnN-*HhR&E0Fmz*`4 z=7Q6lA9CAvoKy%(gni&6%)~3~x{lF%hPKWgoj1dl7+FG$PXU{Ny;SPRX7~?kuWLk# z;1p9T?srPLuLt^zYBoaW;;hsktUzLU*cAVT_5*8QPxX_Ip9tpacTG(0NLxwREOro^ zg>+y@CB^oZV<7(7q|At4)byI==g4s8z_79t4N2_k_hPIbi^zQl6{i3 zh7#L|dOh-w#HQ(!T)e7nc@eoZPerF@h*J1uOZ65ximsSGb!Q`&BD`?1v|%w;f{$zZ zbP;_qzv)uWa|vmQBcbJMp3@Q|dz10Af%vpT_TeBx^5&NbA7D-wEPY*@ff3~+GGe*q zQ2Wt0IYh#^8>U@A24($$MVFZ0#?3@cx1AzsOS+caESXvIvSek+$z# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..782aa17f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po @@ -0,0 +1,276 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2014-2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-21 12:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibles" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta es la lista de %s disponibles. Puede elegir algunos/as seleccionándolos/" +"as en el cuadro de abajo y luego haciendo click en la flecha \"Seleccionar\" " +"ubicada entre las dos listas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba en esta caja para filtrar la lista de %s disponibles." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Seleccionar todos/as" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Haga click para seleccionar todos/as los/as %s." + +msgid "Choose" +msgstr "Seleccionar" + +msgid "Remove" +msgstr "Eliminar" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s seleccionados/as" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta es la lista de %s seleccionados. Puede deseleccionar algunos de ellos " +"activándolos en la lista de abajo y luego haciendo click en la flecha " +"\"Eliminar\" ubicada entre las dos listas." + +msgid "Remove all" +msgstr "Eliminar todos/as" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Haga clic para deselecionar todos/as los/as %s." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionado/a" +msgstr[1] "%(sel)s de %(cnt)s seleccionados/as" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tiene modificaciones sin guardar en campos modificables individuales. Si " +"ejecuta una acción las mismas se perderán." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Ha seleccionado una acción pero todavía no ha grabado sus cambios en campos " +"individuales. Por favor haga click en Ok para grabarlos. Luego necesitará re-" +"ejecutar la acción." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ha seleccionado una acción y no ha realizado ninguna modificación de campos " +"individuales. Es probable que deba usar el botón 'Ir' y no el botón " +"'Grabar'." + +msgid "Now" +msgstr "Ahora" + +msgid "Midnight" +msgstr "Medianoche" + +msgid "6 a.m." +msgstr "6 AM" + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "6 PM" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Nota: Ud. se encuentra en una zona horaria que está %s hora adelantada " +"respecto a la del servidor." +msgstr[1] "" +"Nota: Ud. se encuentra en una zona horaria que está %s horas adelantada " +"respecto a la del servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Nota: Ud. se encuentra en una zona horaria que está %s hora atrasada " +"respecto a la del servidor." +msgstr[1] "" +"Nota: Ud. se encuentra en una zona horaria que está %s horas atrasada " +"respecto a la del servidor." + +msgid "Choose a Time" +msgstr "Seleccione una Hora" + +msgid "Choose a time" +msgstr "Elija una hora" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoy" + +msgid "Choose a Date" +msgstr "Seleccione una Fecha" + +msgid "Yesterday" +msgstr "Ayer" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Ene" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Abr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ago" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Set" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Oct" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dic" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f806074309e28c3c5941ca8f446be4a56f18652e GIT binary patch literal 15156 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, 2014 +# Axel Díaz , 2015 +# Claude Paroz , 2014 +# Ernesto Avilés Vázquez , 2015 +# franchukelly , 2011 +# guillem , 2012 +# Igor Támara , 2013 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Marc Garcia , 2011 +# Pablo, 2015 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionado/s" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor ingrese el %(username)s y la clave correctos para obtener cuenta " +"de personal. Observe que ambos campos pueden ser sensibles a mayúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar %(verbose_name)s adicional." + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id del objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr del objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Añadidos \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cambiados \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eliminado/a \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto de registro de Log" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "Añadido." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "No ha cambiado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionado \"Control\" o \"Command\" en un Mac, para seleccionar " +"más de una opción." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " +"se han modificado elementos." + +msgid "No action selected." +msgstr "No se seleccionó ninguna acción." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s fué modificado con éxito." +msgstr[1] "%(count)s %(name)s fueron modificados con éxito." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado" +msgstr[1] "%(total_count)s seleccionados en total" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "seleccionados 0 de %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s requeriría eliminar los " +"siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Sitio administrativo" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha habido un error. Ha sido comunicado al administrador del sitio por correo " +"electrónico y debería solucionarse a la mayor brevedad. Gracias por su " +"paciencia y comprensión." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos los %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpiar selección" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar " +"el resto de opciones del usuario." + +msgid "Enter a username and password." +msgstr "Ingrese un nombre de usuario y contraseña" + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija los siguientes errores." + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Ingrese una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido/a," + +msgid "View site" +msgstr "Ver el sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Terminar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Elimina de la ordenación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la ordenación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la ordenación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"La eliminación de %(object_name)s %(escaped_object)s requeriría eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s" +"\"? Se borrarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I'm sure" +msgstr "Sí, estoy seguro" + +msgid "No, take me back" +msgstr "No, llévame atrás" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"La eliminación del %(objects_name)s seleccionado resultaría en el borrado de " +"objetos relacionados, pero su cuenta no tiene permisos para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"La eliminación de %(objects_name)s seleccionado requeriría el borrado de los " +"siguientes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está usted seguro que quiere eliminar el %(objects_name)s seleccionado? " +"Todos los siguientes objetos y sus elementos relacionados serán borrados:" + +msgid "Change" +msgstr "Modificar" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Añadir" + +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Ninguno disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Algo va mal con la instalación de la base de datos. Asegúrese de que las " +"tablas necesarias han sido creadas, y de que la base de datos puede ser " +"leída por el usuario apropiado." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Se ha autenticado como %(username)s, pero no está autorizado a acceder a " +"esta página. ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado la contraseña o el nombre de usuario?" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene histórico de cambios. Probablemente no fue añadido " +"usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todo" + +msgid "Save" +msgstr "Grabar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Cambiar %(model)s seleccionado" + +#, python-format +msgid "Add another %(model)s" +msgstr "Añadir otro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionada/o" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Grabar como nuevo" + +msgid "Save and add another" +msgstr "Grabar y añadir otro" + +msgid "Save and continue editing" +msgstr "Grabar y continuar editando" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web." + +msgid "Log in again" +msgstr "Iniciar sesión de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, ingrese su contraseña antigua, por seguridad, y después " +"introduzca la nueva contraseña dos veces para verificar que la ha escrito " +"correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Su contraseña ha sido establecida. Ahora puede seguir adelante e iniciar " +"sesión." + +msgid "Password reset confirmation" +msgstr "Confirmación de restablecimiento de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, ingrese su contraseña nueva dos veces para verificar que la ha " +"escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de restablecimiento de contraseña era inválido, seguramente porque " +"se haya usado antes. Por favor, solicite un nuevo restablecimiento de " +"contraseña." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Le hemos enviado por email las instrucciones para restablecer la contraseña, " +"si es que existe una cuenta con la dirección electrónica que indicó. Debería " +"recibirlas en breve." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no recibe un correo, por favor asegúrese de que ha introducido la " +"dirección de correo con la que se registró y verifique su carpeta de spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ha recibido este correo electrónico porque ha solicitado restablecer la " +"contraseña para su cuenta en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña." + +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"¿Ha olvidado su clave? Ingrese su dirección de correo electrónico a " +"continuación y le enviaremos las instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Restablecer mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Escoja %s" + +#, python-format +msgid "Select %s to change" +msgstr "Escoja %s a modificar" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d428a045b0f62ef970e57827873c5afbee80bb1 GIT binary patch literal 3895 zcmb_eTZMvvro;|# z4*dam3Gij$oxoRscLP5Jvj3C7^MOAAF9!ZpwtodagZ7`mCa?h`Jc>7gJnkJJ`~Lul zpZExWuLC~?z6xBqKnVQAkN9K1zW{dw{{S+dZE*57unOdH-vS4~=PnZBI5as4+>7>6 z81sBzl=wC93belgvfm%d{$GGsqWxR>{;v`*1j(z=e?9P0;N8F_;1X~FsDSMMH6Z(Y z3y7b1AAfKmP5@s5ehwT1?}HOw*T+D%{|v}{z5;@>_zrj+_&x9h@FfI|b=!d;@%t+9 zA>b|`>ox?w3w#myKJaEZI|lp`2pPm3xCuAUaWigC6OQ9exUa{}9Qooo_<|d8LwqXu zm5(uZKq+24FJCtnAg%`TnplU~>vlA*!+i~I*5nr4oU^d-6#qKzLdJ^e3**g%8 zWIJeU7NUOR(!ksks4r9Gso^+C(^c4e1`JX?)M+j=%&oH2M{VvwMh={9VP}mgvo?y~ zu}DX#{1`;eL%?7s(dJG}%5T<~N%5|7W@<2^S!y05Q|@sa-SfBRJHO{b};FavpK1Q+fpQ+quJPU|mR7eOIT+BYD>+OcS_tqDecGQ+?H5ev`)ljp~sok!m_CT^!quRao+TxBHuDJu! zhotGG@tF+P)#-6*3{viZ!l9JWgJ6T^!&z)rwCUJ~FvfIq*;PqX$$p*I1`;Mcns3<5 z_FGzRr}AtUEkNq3}VyoS=vp-9B@s7SMg3FrBv z+7GPJC{B~oB%N5!R97?TBa(6>siUySnRd^*e>B&)Fh(Xw>(qJy@909_;CV%MW!wui zkWLl{LA1rjWMfW5E-zRa&o@-ZFyz?G2$ku+Hu5y{4gXxhoE6KyZB442SjFa$#Hk3W`EpfLu7&S^ zVY_0-VpXnxA`Lc-Z#&(B$cEDowIP?Ov&D|!nu;i#L4C1zjKp4<-8@i{cZ, 2015 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Leonardo J. Caballero G. , 2011 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s Disponibles" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta es la lista de %s disponibles. Puede elegir algunos seleccionándolos en " +"la caja inferior y luego haciendo clic en la flecha \"Elegir\" que hay entre " +"las dos cajas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba en este cuadro para filtrar la lista de %s disponibles" + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Selecciona todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Haga clic para seleccionar todos los %s de una vez" + +msgid "Choose" +msgstr "Elegir" + +msgid "Remove" +msgstr "Eliminar" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s elegidos" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta es la lista de los %s elegidos. Puede eliminar algunos seleccionándolos " +"en la caja inferior y luego haciendo click en la flecha \"Eliminar\" que hay " +"entre las dos cajas." + +msgid "Remove all" +msgstr "Eliminar todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Haz clic para eliminar todos los %s elegidos" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionado" +msgstr[1] "%(sel)s de %(cnt)s seleccionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tiene cambios sin guardar en campos editables individuales. Si ejecuta una " +"acción, los cambios no guardados se perderán." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ha seleccionado una acción, pero no ha guardado los cambios en los campos " +"individuales todavía. Pulse OK para guardar. Tendrá que volver a ejecutar la " +"acción." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ha seleccionado una acción y no ha hecho ningún cambio en campos " +"individuales. Probablemente esté buscando el botón Ejecutar en lugar del " +"botón Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Usted esta a %s horas por delante de la hora del servidor." +msgstr[1] "Nota: Usted va %s horas por delante de la hora del servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Usted esta a %s hora de retraso de tiempo de servidor." +msgstr[1] "Nota: Usted va %s horas por detrás de la hora del servidor." + +msgid "Now" +msgstr "Ahora" + +msgid "Choose a Time" +msgstr "Elija una hora" + +msgid "Choose a time" +msgstr "Elija una hora" + +msgid "Midnight" +msgstr "Medianoche" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoy" + +msgid "Choose a Date" +msgstr "Elija una fecha" + +msgid "Yesterday" +msgstr "Ayer" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Esconder" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f141d32b08b2f5d6a70b065c6e2fdf979dc9bc37 GIT binary patch literal 11628 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..fd4d403e8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,702 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abe Estrada, 2011-2013 +# Alex Dzul , 2015 +# Gustavo Jimenez , 2020 +# Jesús Bautista , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Se eliminaron con éxito %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s " + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionados/as" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todos/as" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +msgid "Empty" +msgstr "" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor introduza %(username)s y contraseña correctos de una cuenta de " +"staff. Note que puede que ambos campos sean estrictos en relación a " +"diferencias entre mayúsculas y minúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar otro/a %(verbose_name)s" + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Adición" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Eliminación" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id de objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr de objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Objeto de registro de Log" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Agregado." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "No ha modificado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "El {name} \"{obj}\" se agregó correctamente." + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Deben existir items seleccionados para poder realizar acciones sobre los " +"mismos. No se modificó ningún item." + +msgid "No action selected." +msgstr "No se ha seleccionado ninguna acción." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Se ha modificado con éxito %(count)s %(name)s." +msgstr[1] "Se han modificado con éxito %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionados/as" +msgstr[1] "Todos/as (%(total_count)s en total) han sido seleccionados/as" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionados/as" + +#, python-format +msgid "Change history: %s" +msgstr "Historia de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s provocaría la eliminación de " +"los siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Administración del sitio" + +msgid "Log in" +msgstr "Identificarse" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ejecutar" + +msgid "Click here to select the objects across all pages" +msgstr "Haga click aquí para seleccionar los objetos de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar lo(s)/a(s) %(total_count)s de %(module_name)s" + +msgid "Clear selection" +msgstr "Borrar selección" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Agregar" + +msgid "View" +msgstr "Vista" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Introduzca un nombre de usuario y una contraseña." + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduzca una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido," + +msgid "View site" +msgstr "Ver sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Cerrar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Elimina de la clasificación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la clasificación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la clasificación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Para eliminar %(object_name)s '%(escaped_object)s' requiere eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s" +"\"? Se eliminarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Para eliminar %(objects_name)s requiere eliminar los objetos relacionado, " +"pero tu cuenta no tiene permisos para eliminar los siguientes tipos de " +"objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar el seleccionado %(objects_name)s requiere eliminar los siguientes " +"objetos relacionados protegidas:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está seguro que desea eliminar el seleccionado %(objects_name)s ? Todos los " +"objetos siguientes y sus elementos asociados serán eliminados:" + +msgid "Delete?" +msgstr "Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Por %(filter_title)s" + +msgid "Summary" +msgstr "Resúmen" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguna disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado su contraseña o nombre de usuario?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Mostrar todos/as" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s results" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "total: %(full_result_count)s" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y agregar otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "Cerrar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." + +msgid "Log in again" +msgstr "Identificarse de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Recuperar contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Se le ha enviado su contraseña. Ahora puede continuar e ingresar." + +msgid "Password reset confirmation" +msgstr "Confirmación de reincialización de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor introduzca su nueva contraseña dos veces de manera que podamos " +"verificar que la ha escrito correctamente." + +msgid "New password:" +msgstr "Nueva contraseña:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de reinicialización de contraseña es inválido, posiblemente debido " +"a que ya ha sido usado. Por favor solicite una nueva reinicialización de " +"contraseña." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Usted está recibiendo este correo electrónico porque ha solicitado un " +"restablecimiento de contraseña para la cuenta de usuario en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Por favor visite la página que se muestra a continuación y elija una nueva " +"contraseña:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Recuperar mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Seleccione %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s a modificar" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Modificar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..fbd765aecdb53e931c6ce6062543138b4a3208f5 GIT binary patch literal 3380 zcmb_eOK)5?6gF=N@Ap%}R4Ppb_vQh#FeRuVO&`ECp&1acL1*su%sAY!r?zjV(-o{> zTM2}OgaiwO5FmkA(@og1fGtvmSRlj(egP7E$8#q$38gIHD!$)b`}p`f-#NDP<1LrJ zBkdsWPMXFDdP&Vri3fLCr$RyWhGu+%r^Vk0j?{)KsCbV8g42zLl7+e0o7r+X0UmRdW1CMnhr#jgif1 zAR4x7nYU;RdI}*UWr6kMsPVfM6CiWjA4YURJ;lq)BTej%mF*A`Ix01YCMgTrnunu) zgUZ0{3rInZ%p1-FnYKcy8ZgN9rp`+$u(m34AGO)%l%Y!ShGXf)sliB2QuCOZbC2652Q~giP7YK^~2Ef$alA=z6OORwu1E`6>H9J z;0#EP=gEu8dE})g^9{&vr%tM#bs?$yw$78M%eGG%wkD_6RvXE(Q^Yw;4pUGyxiB}s zKbdWtr=g5bo;mG)c zf^{|d3>kxxdro1S7xGE4!RMhOex};A>{FOy+9kDB(ooc`$@Lz=q$8*6>a@=6jGXR- z(5ubP_WS)buxs5?r_;=KXNSR!ps4)JD*tNzrP-OO`tkb8Sc&;`Zfe<@pbQvdL)2tY zr^9ToAZ-qEB{;9b;tP!<$>U=?UaqBFvSKou<5Z~0$D2BAQ?ALl*3?>2Ix3PQ)^&YN znqK_$iwg(k@aN*Rkq<1&`I&=L+vhX($Bwf*gSM30S^75%KTBRzC;4IRd)DY3M>#pM z&X+-S=)_8)H%OL-WXC$1975gZ)(f27aYt7Kyf{o%z4yq`#29uTPvC0f10Mmf*G+XM z-8DrOx~mQCvfr`Dj@f(_I4f4OvIt;b$Ce;tvkoo>{IvPj=OmUQ`{zq+mKf8-0-}!c zciim*AtSP&csUR+G9tSz6i%HNaHQq3S1OD{skU~wVcMlZT-zkKJ~X-I$vE#(xmiiM zv+R(Xv|;4{M`5NFY$~l_hGkpOy+d-(L<07}L%CM1R=EOka62N20vCw!eC2|L8+Dwz;oEDaQH{K=Yv zeq2O^YTf$E$ex18#zI`2s8r}P*b&lT2u5Yf>wuc|Ac@J*e@;14j)-uK+Q4pCaD?|K^R;B;}EPtp)$W6q5e})Yq$?vw260z+N13We;4V1Ck&CKIJB%I0|@`TbO`Z#ZP%f7Bh3++f~3|jjx PV#hU#^yUhjOe+2Y?Wgqt literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..76af2f30e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po @@ -0,0 +1,219 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponible %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta es la lista de los %s disponibles. Usted puede elegir algunos " +"seleccionándolos en el cuadro de abajo y haciendo click en la flecha " +"\"Seleccionar\" entre las dos cajas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba en esta casilla para filtrar la lista de %s disponibles." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Seleccionar todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Da click para seleccionar todos los %s de una vez." + +msgid "Choose" +msgstr "Seleccionar" + +msgid "Remove" +msgstr "Quitar" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s seleccionados" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta es la lista de los %s elegidos. Usted puede eliminar algunos " +"seleccionándolos en el cuadro de abajo y haciendo click en la flecha " +"\"Eliminar\" entre las dos cajas." + +msgid "Remove all" +msgstr "Eliminar todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Da click para eliminar todos los %s seleccionados de una vez." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionado/a" +msgstr[1] "%(sel)s de %(cnt)s seleccionados/as" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tiene modificaciones sin guardar en campos modificables individuales. Si " +"ejecuta una acción las mismas se perderán." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ha seleccionado una acción, pero todavía no ha grabado las modificaciones " +"que ha realizado en campos individuales. Por favor haga click en Aceptar " +"para grabarlas. Necesitará ejecutar la acción nuevamente." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ha seleccionado una acción pero no ha realizado ninguna modificación en " +"campos individuales. Es probable que lo que necesite usar en realidad sea el " +"botón Ejecutar y no el botón Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Ahora" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Elija una hora" + +msgid "Midnight" +msgstr "Medianoche" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoy" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Ayer" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ab04e3f34e64fd576de9bdaf0cf1c72dedd1305e GIT binary patch literal 16837 zcmc(m50G6|eaEjsIMz-(%Cxr5IOMmxCOi)d?xs>;1Tdg;ML$k7Ek>yfLiar1=a4KLGkT7{`-$W@%O(#@$F2Q zA$rdNHSYN!Qw=Tz)qXn&i-OmJEOF2PHGUV={0@Vv_cs507pU>>^Ut3KCC{G+p9g*u zJR5uhG~mfFI|qlsN$>;U9pHa}rsPV4?)qX!HIk_HGKQrL(fJZ>O2tEpmkB@1;;`0zwR*s z)!z|N^xXoAj<@^o?*m2810Emp?>`GZllNZ+?|TOHgW_lFT(@qwdAtvN1MeRN#mASg zcHgf8Mc*{I8T<$+`S<~NGI$ciYQ8H#J)aIr{>}o$?-5YrT?Ddp!7fm8*8(Lsw}Ybl zC@4OE0u;TU1=Y_N{QJkjTX_C1cn=t^arJ)+B09mz2!;9?0>ziLpaIu|8vlAwa+rgn zjNCw{rN5N;o+~_>#54v!1y2P}y}-R+398)~h{y*QgQtMkfv179pvFDozuyd6IRLeu zp8!t>zXD3Gz6Gk?_x88UbjG~iD_)j$1W$Io*?@oU0A?*Jd>IRZ7mGcR#|{VGu7zY(O1;5Kk2_$VlO z`!*wYz}4XS;8(!cgFp9p-KFmRBjEMC|94Q|U%lSh?T>@v!?hTL1gwLa&p&{& zpWgyypS}l*4^M!S^Iw3P?~2PDod$dX&%>bRcQMG6g00{e!J9#~yL`g+w*!0;&y(O= zzzCE){SfSeFSwkT3cMXO;5R_c@4rE<|Hwwi*A3t^c%B4b2=4aS0M-8-csh6|_V_phd$O_46{r4(0>oBN9ga1R9$vSS_qGYU%(yq3aJ z*|7jCo03OeqC;yg`sOJ&Q*^zH(xlw22d;Z4_fghRq@%jDR=QsAAb15hL=i8iDIcWh z`a{ZlDYCud-|ta$ZKwQ^y>s#FoWI`zvb2_0TKC+)e~(AOo&Fw^Wo1P2E?aw$vWcSW zO3M2vr%^7TNOmN*x^AP~MLCzUl~P=9=H{dRAqL-0d4TdE%C(f+DZ2Jiw%I#p^S5x{ zp}f++6UTdKu*-_Rjse#@}zQyj#otTm7?S&`{n;L1pZ9wMW5ADG}v0l*=i_ zC0&x77uQR;xr1^QMe=zIOgV|tro4@!3)Qo+k$vFLA5gBN+)G(aIZSySrMQOu%|+mI{ryo;`uu*% z2<0rwB;`hm?C-}Yx?WD%NZCzUMY(~po-#rC6UrMXEsCx~4y+yB&;1cSn@v44G&~(Q z^C&%#$9XealbK*>IP7$|2^+1r9cOtO=5f;Ib-fv8*@1T0QnjJsxSi!;yUv5YCEa#z zU;FR#VP@*HVS6TOn51^1^Oq?6h--wz~9yKQD z!S+=4oAIH}mtbSFX_o!C&Lq=(ty{+Qo762kH(D4EHa6&`(V(6q(miAr!gi9+Mk(J~ z3ADgy)$G5Wi_)nii~N%4Bg|%U$2K!4c5d>-bI3p?M7quk0fCMvtB0MaaiFAU!iZsTMGdBtW;2?Zh~ngN2av|cUP+>FB1xY4Ego11a{pg|BLExCJdSFmJaJxwxr$+~sI z83bo@(w>gfRyjim?xtzf&YQjQU`v>XQ(+dFC{2@8kI~vZZbkNv&sOO?m=+2jcbbv$ zV-@cQ@WwUt^dU_{!&Ut_&}nwlP&(x5O?X_y!`iCy?Ep^MhLYDOF@kZ8J#ETOp@nO+euk5s=@pfBTOt;X~MXvTltKt zOu-}Jtw!ub<|C2fJ}U}JyVjX!mPJ{VTa9w$-YHiu?*^&xQ{nWhZ zs;bnBG}j7vXo&l#rwj9~g~X~Ll*j<_YQd^j*pp1u5x&tZYGZnk%aSTLs1>M1Mkb$+ z>j+X}=GC-qaN+TE&kCl@zG6fzv8Pn&gl9vgLupo_^&?&<>)kZYd#f{(v1m@FnK4RY zZO^Zf4s0(%FK+f7mVzS7$NFqSyuQS+jt7%Tr`s|0W|9#q)M~Y0H(E@9?Nx@yRx%fP zFw<$$f@u58Cvi{}NH7(=Kv^X;trPW3XH- zQLu-gus#bY^-&;O-f6;4bBlM11ec~oHi_vr%WP#&l(M*HtAaqYK5AVyeBruvYu2yj zj&AHX7a&$2jI9*xnN8*uZU%cwhlb7aiRvDVVm=G`toFQ|l(l2dc%jZN_O!`sle7b$ zQNzj>#!(B0$w-q<8e^`d|E>YhBRG9%b}n~R z3--9BG>n)?NEHJX_XpbD)|3+6U{587E>a^Zx=dHWu1%iS;Q#h?aUf|g*o&Ju=zUTr zYB%5rVuQW9u^ToS$0+D_yb;k?M^nbe2YG^dsa2bIC6`7an<}j2lhQqJU|qhcWV(_v zFG=}b12rx}u{;V}wx2>#VU#4f8MhDGj^g$lRKng4sYN{1lrgD?a7-3p7MTp2Vy#}I z#=LLTjPbTW(RYNQToS<85j3%AQ66-Yqa2OEye!_TIPt3H8q#B#yozEKqu9vd>5N-; zWGZ%+G3{xJT&Dz`xr!yTN(pt{a0WQK+G{IW>4r(8l2mwyv=T!X}<=iuc2K)tp2Q5l}28p zO(VA~MPy1%+?QV(Xld55Nh85EQKm9twy)+h`%Hn_hD_hpC6uKquLZTM#j$X0Eo}5QWVci%*?qGNXu*%BB%dPZRc9ziZ9vgeAen)dO-< zE7oDVXMIggb+sIBnzENx5FAem)1{I73lx@7iZ_1Rp`nV)Q%W`yR}BqUY^NP6?YEUN zv|5Dy#0El#HADm=;Vc%?x_hRnun7@c+Pbn&>p#gW$+olH1X>{$7n&q7kmnMs@xa9t zX1W>96!&%u2Q>_wF(5F`GMFBCNj3`K0?`47)0ovR?t6jPy0}r?q5EkdI)ceG(O%~0 z_QvS`DAl&WxM|pAcExUMAVzm)GjU^dQ+FmC-J6V?6_c;oJGxoEnYyD}keP9F{<^V? zM%Rsvj$LBLUN!#8OU_$2wr(92M|VeavHDz8?-E<@lJT*z^VV^#*g?!ax;G8m8R0^b zj+?EGZkRR_f|f>-oj-Q@j5Mi+7+*%+_Dq*qkM704jhj84kR9|{GrT`)M~Ay?bFMMN zvw7YbU%PgGe!fP?LSQ@{9a8JHZe9g6eOGIv?7;r5YuBvUxqau>J`=`j>sD-bMq+d? ztQ|LbbSPijX_6{kDvOmO4jcCEy<+s@emxC`jE`<@*AvA9nw?(BD_C#|sZ@JBUi|Tp@Up z?K6E_dXg~RU3d^1je24NU^@b379Knl=gGjcgz0WX&{t`|ImGcTDu)O3Sq!`Q?FpVL zsP{#O3T^f#be@30dF=Ch!zM}0VFOtvYR2rg6AvzPqEJT^9W?`v8~n!%{lQ-8Tw|T% zYUO;P=wM^ray{_K7W%?NVIxipWG!6u)_=inzpG;sHY2D|Y&kD^UENbvwCO&h2ulwh zX4pv3at+u>E!tF%9~{B>#>6_v%y8IbrXvKI?PLO0_EX6g?2F*B&u`80g`;HZGhJv! zwutvA)F2zjAF_Q-GQ}jEWhsKr!ABB%iZ%;J+qPL2&(IbAmrX{t7;<{jCT6h!W)ArQD!)aW%Y%R1-yME4pys2m#Q2c0N-hS8OyL{3J0jln9tgFxK%P_g&R9vHhID2>yFV`V$X z@&Q^<)jh@CIUAG`cxHC|QAsh4s_GT$fBZqouZ50+F^kl_7<1t143n5k>Y<%I^01U~ zh1gXmP9BU~!ycG=7l|UXB`d;66$d8lvr2+1#;?LjPSCI(NSyDvFJe_T4YW{8I8>M$ zb+(Mr>aWlet2tl6l1QEM)z<%gpz@cMPP-rn%U8f$SgWZ1Mg$^ z39+e=%4|rYv^*W>EVwTxP{Y1#3r*6TiyK-+WWLg;5p#|od}2u>iGGv)$O%)-mp8;T zve-Vtw7bHKSxsK2q1e^Lf2&&0kab6GGWC>QRcFY3`s)d|lEQSfYgZ@cDA$PN4(0Gt zIv0oZon^3-A4Ej$8B#hp;ljB7!45O*AM0qhs_o8oj&nM#g`-waHKZ5`!3>JX#0ioo zooBi+nLItX$!dR$uqd2MQg$M7{R@v+!D1y8kj#d~8rQLzV*Egk!6JQA3xv|003oX| z3*SL-U_ZeBFzrOx9y<4|hN1>?tVP8*aWcgAqr`8DSysJiKZdb$Mtoo_Nm?^LjQo(O z+W>>T3`wsqohM!*5WvC62}J3`V3Hl^$V&6?1y5?gmM_VW-T5lhC@tW-D^Z z6#9wKdH2bTaHtviR1P-K1 zrfR8du&2m=B?iUQ;}i?Av!g;aa=`DUH~>(FYmf9;b&Sf1jDYbWX9=A#u<^ePEr;gP z&JOvr&P7X8&tS*

      uhb72oL*BbcPxU$|oO)o(TN_$#mQY~PMgr5__1U%D>CT=jk zY*;iBoro!uRSseepuT2h*j3y}A{ki+&uu5SIvp#`_>zQWE89w4VhlC$irH6MQuN?T zZSr6hJi^Pck|0-JYpLa5@PiziiQw`hyE=(CLf*z~bvzh?{NfIV6$UQFdiGNgG7V%# z+VE6oX)e29{*q%1{c#6sMFkYl*YFvMymax(AFl08bd;vEduFm+yu+^q2?K~*TI_GY z0kP4Ysr5|;uNI{`HM8+J2ctR#lBSKq>ZEGJkF-s3Z>IRSCKgV ztR}cJg%8Zc6GNzuMYj_`&pBvvTUoOSQYE9PpmIK%B2YS7ZP|q%k{=cXXQ)~$Y>Y5A{9Ck*jN0HH*w(P&;!~J+thLs6Zs90ra(E?c zW89oIMISiKO8uc3ekmNnhgVE?mhd|a4loqESik&KE`?taH5aA#9MowSt@M_I_&>Nw zSZqcOXksSq4vDLhy4^3oXSF1DteIsfI)U!3X-J#S8hFN?X!rkz2|rnrr!nDW=6eFY zpV)l2$?Z)^(Gd#k=WB*{PW6*km&n%&QC7PhmwBd(jY!r?2x2OH3 zc+NSns?XaZH``7W@7oA9YKyE)en<2Ko7BWAaml})l3dbuT%%^#3?m6k{r-KmJ*P{i!SFv?m{x4~{> z2_MmUCsfIADgxnho0uO#)E6GEnJpwJRyJ%p6{jKvPFRVk1)Es?Im@<@V9&xal@X5B zv_{x#Yx)wIVJtZZj$)EOm%!OqqtQO!Xi2tAWgSjhiB`-(Y^fhv^0DNkP7GMUsM52f zR&!I>R0OXa8R?*s|H!qg5I*<2S-%bBw9n|MfgcHmHfXYH##lZwwy9LPBT*P}rsVCk zs9b(2TuiMv*X>5ZyhYAMzd{k!WqzcNC5M`<@@l*=;ed8MO9#%TJM2KU->76Ki0R-b*?68tZ0 Cqxp0I literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..c9e1509bd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eduardo , 2017 +# Hotellook, 2014 +# Leonardo J. Caballero G. , 2016 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminado %(count)d %(items)s satisfactoriamente." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionado" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor, ingrese el %(username)s y la clave correctos para obtener cuenta " +"de personal. Observe que ambos campos pueden ser sensibles a mayúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Añadir otro %(verbose_name)s." + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id del objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr del objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Añadidos \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cambiados \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eliminado \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Agregado {name} \"{object}\"." + +msgid "Added." +msgstr "Añadido." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Modificado {fields} por {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificado {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Eliminado {name} \"{object}\"." + +msgid "No fields changed." +msgstr "No ha cambiado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionado \"Control\" o \"Command\" en un Mac, para seleccionar " +"más de una opción." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fue agregado satisfactoriamente. Puede editarlo " +"nuevamente a continuación. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fue agregado satisfactoriamente. Puede agregar otro " +"{name} a continuación. " + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "El {name} \"{obj}\" fue cambiado satisfactoriamente." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fue cambiado satisfactoriamente. Puede editarlo " +"nuevamente a continuación. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fue cambiado satisfactoriamente. Puede agregar otro " +"{name} a continuación." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "El {name} \"{obj}\" fue cambiado satisfactoriamente." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " +"se han modificado elementos." + +msgid "No action selected." +msgstr "No se seleccionó ninguna acción." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s con ID \"%(key)s\" no existe. ¿Tal vez fue eliminada?" + +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s fué modificado con éxito." +msgstr[1] "%(count)s %(name)s fueron modificados con éxito." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado" +msgstr[1] "%(total_count)s seleccionados en total" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionado" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s requeriría eliminar los " +"siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Sitio de administración" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha habido un error. Ha sido comunicado al administrador del sitio por correo " +"electrónico y debería solucionarse a la mayor brevedad. Gracias por su " +"paciencia y comprensión." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos los %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpiar selección" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar " +"el resto de opciones del usuario." + +msgid "Enter a username and password." +msgstr "Ingrese un nombre de usuario y contraseña" + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija el siguiente error." + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Ingrese una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido," + +msgid "View site" +msgstr "Ver el sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Terminar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Elimina de la ordenación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la ordenación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la ordenación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar el %(object_name)s %(escaped_object)s requeriría eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s" +"\"? Se borrarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I'm sure" +msgstr "Sí, Yo estoy seguro" + +msgid "No, take me back" +msgstr "No, llévame atrás" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar el %(objects_name)s seleccionado resultaría en el borrado de " +"objetos relacionados, pero su cuenta no tiene permisos para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar el %(objects_name)s seleccionado requeriría el borrado de los " +"siguientes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está usted seguro que quiere eliminar el %(objects_name)s seleccionado? " +"Todos los siguientes objetos y sus elementos relacionados serán borrados:" + +msgid "Change" +msgstr "Modificar" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Añadir" + +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." + +msgid "Recent actions" +msgstr "Acciones recientes" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguno disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Algo va mal con la instalación de la base de datos. Asegúrese de que las " +"tablas necesarias han sido creadas, y de que la base de datos puede ser " +"leída por el usuario apropiado." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Se ha autenticado como %(username)s, pero no está autorizado a acceder a " +"esta página. ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado la contraseña o el nombre de usuario?" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene histórico de cambios. Probablemente no fue añadido " +"usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todo" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing..." +msgstr "Ventana emergente cerrando..." + +#, python-format +msgid "Change selected %(model)s" +msgstr "Cambiar %(model)s seleccionado" + +#, python-format +msgid "Add another %(model)s" +msgstr "Añadir otro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionado" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y añadir otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web." + +msgid "Log in again" +msgstr "Iniciar sesión de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, ingrese su contraseña antigua, por seguridad, y después " +"introduzca la nueva contraseña dos veces para verificar que la ha escrito " +"correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Su contraseña ha sido establecida. Ahora puede seguir adelante e iniciar " +"sesión." + +msgid "Password reset confirmation" +msgstr "Confirmación de restablecimiento de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, ingrese su contraseña nueva dos veces para verificar que la ha " +"escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de restablecimiento de contraseña era inválido, seguramente porque " +"se haya usado antes. Por favor, solicite un nuevo restablecimiento de " +"contraseña." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Le hemos enviado por correo electrónico las instrucciones para restablecer " +"la contraseña, si es que existe una cuenta con la dirección electrónica que " +"indicó. Debería recibirlas en breve." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no recibe un correo, por favor, asegúrese de que ha introducido la " +"dirección de correo con la que se registró y verifique su carpeta de correo " +"no deseado o spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ha recibido este correo electrónico porque ha solicitado restablecer la " +"contraseña para su cuenta en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña." + +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"¿Ha olvidado su clave? Ingrese su dirección de correo electrónico a " +"continuación y le enviaremos las instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Restablecer mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Escoja %s" + +#, python-format +msgid "Select %s to change" +msgstr "Escoja %s a modificar" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6cc0519829712fbc1408f893f18a3d985f285a5d GIT binary patch literal 4635 zcmcJRO^h5z6@Uw3AZ-3{5)%T!R1CJ)*fTr34t5yFV8`C|+IVf_nK(p3L^ad3Gi`dR zhVJUw9Un+8AOWXZ>#d} z;oX$~RF(fy@vrb6>i=HxKNatw^AzL6P?dcntm-O250Pd9U@x&2p)zvU>*JqqMCY;#bt_WHjt-{K*1UWD@fHTXLG3H&K+G0DQEnUs9r0Y4A# zhN8!L_%i$={2}}oyavC!Qz^`>?zz9@eHC|Be4yg4iVszMxZ+3XD`~Do@f3SX!i0q_ zAA)Nb;7$&wD1C~PmUwW=((ko0M?%=hC`ATg~XiS1BP zO_L9iWo?KQTkUvR&jJ$^|>7ymo43sq#JBtrX65p16E$LHa z@m-b_fzz2y4rJOd>%G%m7kH(@c7u&>`R#}{^+8=7(L=$>VHzjuWZuiOpiYiVoS05x z_1;XKGOlYAb*k@uW-Dl;Pn$4NYR7|#QkX0yMc>T2LRb=azp8`R-9nr;NkX+YL3>82 zt5fUWQ#ySa)nc zcF{W$yM5D9IqM64MP2L$FBZ657^;HUOSSAUl1Ayu7Pwx_ ze_+PzYm)ha)tzzWMX~Ei*MW{*A)@0~nMdMRv|%cIak?vuR<+Z6N=Mm)MN=AeY*?|h zkh*l%1laQlNEm$5XNL8H}8VKFj=?cozyK& z*0oH?WpQ`3w$$cD%Pn>7ex7F1vOU?do!hroK5ZjcRzIySrT!|%ckOIcyJFJ}Uuo*- zDlXxtF596`Lv1PR#Zm3ayqDG5zNx1!U2NA*rPhdF)#PAq>bb`3ky_(3wb`S3?r?K< z?qFlC(V$`NvK_@DbF8QHb_(FO%`hH)VM4$!KY0QGNHz82oj7c0-PFZcQh%ZA4YJ>z0Vy#jGasxBH$EbGL-vP7!*0IHXsn<80_%Ozh1zgRe=| zd}4dCAiipJ?u=fxOn9Qa=+nt!Uy3cc2Z&ajy`F_DrSKx67fsI;n^X@?YRVI;m;on- zG?pDAA(2_icq4nQesdq2#DmzGn>sKk?&&$@PsiPuNR-+lPTSNMVH(V5U3M1HYu-sM zfjX9_<4LH#CeJYs_PKGs+b4kY>Z7%v841Itsh{G6jaa&1xQd{pOjolv&=w~ORf`|33{M(zRC$tG}K8qspcyi#6sRkc)-!jAAV| zUaBRR+d$P}2@gxfm&9!N7XwHDGoq|4^rq`^i078tVkx;0CB59?4Mh|aA6a|VMPB@a z$c~h*!6{?MHj7yTLQ-yfp1{ZI)2?)~vgI-k**AJm>CSuf*K$j{F>(SiEiq_;RFQ}K zY^P`Clp8*_p=jla{|{A5(YH}{(Q~;pYd4Hz8)n@!?qFjlE=nlOO_cg_pUD-1MYxsm z)yXkiV{vj%Vnx}6hTXjObBBqY*jM+lrq_;RZSB|G!_1%)dl{9tA$Hsh(A>E+aYb$n zc7U;2+AOU7nAIXN;zp=w{a, 2017 +# FIRST AUTHOR , 2012 +# Hotellook, 2014 +# Leonardo J. Caballero G. , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponibles %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta es la lista de %s disponibles. Puede elegir algunos seleccionándolos en " +"la caja inferior y luego haciendo clic en la flecha \"Elegir\" que hay entre " +"las dos cajas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba en este cuadro para filtrar la lista de %s disponibles." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Seleccione todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Haga clic para seleccionar todos los %s de una vez." + +msgid "Choose" +msgstr "Elegir" + +msgid "Remove" +msgstr "Eliminar" + +#, javascript-format +msgid "Chosen %s" +msgstr "Elegidos %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta es la lista de los %s elegidos. Puede eliminar algunos seleccionándolos " +"en la caja inferior y luego haciendo clic en la flecha \"Eliminar\" que hay " +"entre las dos cajas." + +msgid "Remove all" +msgstr "Eliminar todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Haga clic para eliminar todos los %s elegidos." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seleccionado" +msgstr[1] "%(sel)s de %(cnt)s seleccionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tiene cambios sin guardar en campos editables individuales. Si ejecuta una " +"acción, los cambios no guardados se perderán." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ha seleccionado una acción, pero no ha guardado los cambios en los campos " +"individuales todavía. Pulse OK para guardar. Tendrá que volver a ejecutar la " +"acción." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ha seleccionado una acción y no ha hecho ningún cambio en campos " +"individuales. Probablemente esté buscando el botón Ejecutar en lugar del " +"botón Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Usted esta a %s hora por delante de la hora del servidor." +msgstr[1] "Nota: Usted esta a %s horas por delante de la hora del servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Usted esta a %s hora de retraso de la hora de servidor." +msgstr[1] "Nota: Usted esta a %s horas por detrás de la hora del servidor." + +msgid "Now" +msgstr "Ahora" + +msgid "Choose a Time" +msgstr "Elija una Hora" + +msgid "Choose a time" +msgstr "Elija una hora" + +msgid "Midnight" +msgstr "Medianoche" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoy" + +msgid "Choose a Date" +msgstr "Elija una fecha" + +msgid "Yesterday" +msgstr "Ayer" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Esconder" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dbfc3b8c0b5350384e0d8d4b537bf9c606ec9520 GIT binary patch literal 16555 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 TOQ}thoWK5w%fPZtO`Z8)H7LOw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..18a4e1874 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# eallik , 2011 +# Erlend Eelmets , 2020 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# Martin Pajuste , 2015 +# Martin Pajuste , 2016,2019-2020 +# Marti Raudsepp , 2016 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-09-03 15:38+0000\n" +"Last-Translator: Erlend Eelmets \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s kustutamine õnnestus." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ei saa kustutada %(name)s" + +msgid "Are you sure?" +msgstr "Kas olete kindel?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Kustuta valitud %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administreerimine" + +msgid "All" +msgstr "Kõik" + +msgid "Yes" +msgstr "Jah" + +msgid "No" +msgstr "Ei" + +msgid "Unknown" +msgstr "Tundmatu" + +msgid "Any date" +msgstr "Suvaline kuupäev" + +msgid "Today" +msgstr "Täna" + +msgid "Past 7 days" +msgstr "Viimased 7 päeva" + +msgid "This month" +msgstr "Käesolev kuu" + +msgid "This year" +msgstr "Käesolev aasta" + +msgid "No date" +msgstr "Kuupäev puudub" + +msgid "Has date" +msgstr "Kuupäev olemas" + +msgid "Empty" +msgstr "Tühi" + +msgid "Not empty" +msgstr "Mitte tühi" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Palun sisestage personali kontole õige %(username)s ja parool. Teadke, et " +"mõlemad väljad võivad olla tõstutundlikud." + +msgid "Action:" +msgstr "Toiming:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Lisa veel üks %(verbose_name)s" + +msgid "Remove" +msgstr "Eemalda" + +msgid "Addition" +msgstr "Lisamine" + +msgid "Change" +msgstr "Muuda" + +msgid "Deletion" +msgstr "Kustutamine" + +msgid "action time" +msgstr "toimingu aeg" + +msgid "user" +msgstr "kasutaja" + +msgid "content type" +msgstr "sisutüüp" + +msgid "object id" +msgstr "objekti id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekti esitus" + +msgid "action flag" +msgstr "toimingu lipp" + +msgid "change message" +msgstr "muudatuse tekst" + +msgid "log entry" +msgstr "logisissekanne" + +msgid "log entries" +msgstr "logisissekanded" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Lisati “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Muudeti “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Kustutati “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Lisati {name} “{object}”." + +msgid "Added." +msgstr "Lisatud." + +msgid "and" +msgstr "ja" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Muudeti {fields} -> {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Muudetud {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Kustutati {name} “{object}”." + +msgid "No fields changed." +msgstr "Ühtegi välja ei muudetud." + +msgid "None" +msgstr "Puudub" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Hoia all “Control” või “Command” Macil, et valida rohkem kui üks." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” lisamine õnnestus." + +msgid "You may edit it again below." +msgstr "Võite seda uuesti muuta." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” lisamine õnnestus. Allpool saate lisada järgmise {name}." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” muutmine õnnestus. Allpool saate seda uuesti muuta." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” lisamine õnnestus. Allpool saate seda uuesti muuta." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} ”{obj}” muutmine õnnestus. Allpool saate lisada uue {name}." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” muutmine õnnestus." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Palun märgistage elemendid, millega soovite toiminguid sooritada. Ühtegi " +"elementi ei muudetud." + +msgid "No action selected." +msgstr "Toiming valimata." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” kustutamine õnnestus." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s ID-ga “%(key)s” ei eksisteeri. Võib-olla on see kustutatud?" + +#, python-format +msgid "Add %s" +msgstr "Lisa %s" + +#, python-format +msgid "Change %s" +msgstr "Muuda %s" + +#, python-format +msgid "View %s" +msgstr "Vaata %s" + +msgid "Database error" +msgstr "Andmebaasi viga" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s muutmine õnnestus." +msgstr[1] "%(count)s %(name)s muutmine õnnestus." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valitud" +msgstr[1] "Kõik %(total_count)s valitud" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "valitud 0/%(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Muudatuste ajalugu: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Et kustutada %(class_name)s %(instance)s, on vaja kustutada järgmised " +"kaitstud seotud objektid: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administreerimisliides" + +msgid "Django administration" +msgstr "Django administreerimisliides" + +msgid "Site administration" +msgstr "Saidi administreerimine" + +msgid "Log in" +msgstr "Sisene" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administreerimine" + +msgid "Page not found" +msgstr "Lehte ei leitud" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Vabandame, kuid soovitud lehte ei leitud." + +msgid "Home" +msgstr "Kodu" + +msgid "Server error" +msgstr "Serveri viga" + +msgid "Server error (500)" +msgstr "Serveri viga (500)" + +msgid "Server Error (500)" +msgstr "Serveri Viga (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ilmnes viga. Sellest on e-posti teel teavitatud lehe administraatorit ja " +"viga parandatakse esimesel võimalusel. Täname kannatlikkuse eest." + +msgid "Run the selected action" +msgstr "Käivita valitud toiming" + +msgid "Go" +msgstr "Mine" + +msgid "Click here to select the objects across all pages" +msgstr "Kliki siin, et märgistada objektid üle kõigi lehekülgede" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Märgista kõik %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Tühjenda valik" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Rakenduse %(name)s moodulid" + +msgid "Add" +msgstr "Lisa" + +msgid "View" +msgstr "Vaata" + +msgid "You don’t have permission to view or edit anything." +msgstr "Teil pole õigust midagi vaadata ega muuta." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Kõigepealt sisestage kasutajatunnus ja salasõna. Seejärel saate muuta " +"täiendavaid kasutajaandmeid." + +msgid "Enter a username and password." +msgstr "Sisestage kasutajanimi ja salasõna." + +msgid "Change password" +msgstr "Muuda salasõna" + +msgid "Please correct the error below." +msgstr "Palun parandage allolev viga." + +msgid "Please correct the errors below." +msgstr "Palun parandage allolevad vead." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Sisestage uus salasõna kasutajale %(username)s" + +msgid "Welcome," +msgstr "Tere tulemast," + +msgid "View site" +msgstr "Vaata saiti" + +msgid "Documentation" +msgstr "Dokumentatsioon" + +msgid "Log out" +msgstr "Logi välja" + +#, python-format +msgid "Add %(name)s" +msgstr "Lisa %(name)s" + +msgid "History" +msgstr "Ajalugu" + +msgid "View on site" +msgstr "Näita lehel" + +msgid "Filter" +msgstr "Filtreeri" + +msgid "Clear all filters" +msgstr "Tühjenda kõik filtrid" + +msgid "Remove from sorting" +msgstr "Eemalda sorteerimisest" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteerimisjärk: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sorteerimine" + +msgid "Delete" +msgstr "Kustuta" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Selleks, et kustutada %(object_name)s '%(escaped_object)s', on vaja " +"kustutada lisaks ka kõik seotud objecktid, aga teil puudub õigus järgnevat " +"tüüpi objektide kustutamiseks:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Et kustutada %(object_name)s '%(escaped_object)s', on vaja kustutada " +"järgmised kaitstud seotud objektid:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Kas olete kindel, et soovite kustutada objekti %(object_name)s " +"\"%(escaped_object)s\"? Kõik järgnevad seotud objektid kustutatakse koos " +"sellega:" + +msgid "Objects" +msgstr "Objektid" + +msgid "Yes, I’m sure" +msgstr "Jah, olen kindel" + +msgid "No, take me back" +msgstr "Ei, mine tagasi" + +msgid "Delete multiple objects" +msgstr "Kustuta mitu objekti" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Kui kustutada valitud %(objects_name)s, peaks kustutama ka seotud objektid, " +"aga sinu kasutajakontol pole õigusi järgmiste objektitüüpide kustutamiseks:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Et kustutada valitud %(objects_name)s, on vaja kustutada ka järgmised " +"kaitstud seotud objektid:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Kas oled kindel, et soovid kustutada valitud %(objects_name)s? Kõik " +"järgnevad objektid ja seotud objektid kustutatakse:" + +msgid "Delete?" +msgstr "Kustutan?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Kokkuvõte" + +msgid "Recent actions" +msgstr "Hiljutised toimingud" + +msgid "My actions" +msgstr "Minu toimingud" + +msgid "None available" +msgstr "Ei leitud ühtegi" + +msgid "Unknown content" +msgstr "Tundmatu sisu" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"On tekkinud viga seoses andmebaasiga. Veenduge, et kõik vajalikud " +"andmebaasitabelid on loodud ja andmebaas on loetav vastava kasutaja poolt." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Olete sisse logitud kasutajana %(username)s, kuid teil puudub ligipääs " +"lehele. Kas te soovite teise kontoga sisse logida?" + +msgid "Forgotten your password or username?" +msgstr "Unustasite oma parooli või kasutajanime?" + +msgid "Toggle navigation" +msgstr "Lülita navigeerimine sisse" + +msgid "Date/time" +msgstr "Kuupäev/kellaaeg" + +msgid "User" +msgstr "Kasutaja" + +msgid "Action" +msgstr "Toiming" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Sellel objektil puudub muudatuste ajalugu. Tõenäoliselt ei lisatud objekti " +"läbi selle administreerimisliidese." + +msgid "Show all" +msgstr "Näita kõiki" + +msgid "Save" +msgstr "Salvesta" + +msgid "Popup closing…" +msgstr "Hüpikaken sulgub…" + +msgid "Search" +msgstr "Otsing" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s tulemus" +msgstr[1] "%(counter)s tulemust" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Kokku %(full_result_count)s" + +msgid "Save as new" +msgstr "Salvesta uuena" + +msgid "Save and add another" +msgstr "Salvesta ja lisa uus" + +msgid "Save and continue editing" +msgstr "Salvesta ja jätka muutmist" + +msgid "Save and view" +msgstr "Salvesta ja vaata" + +msgid "Close" +msgstr "Sulge" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Muuda valitud %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Lisa veel üks %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Kustuta valitud %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Tänan, et veetsite aega meie lehel." + +msgid "Log in again" +msgstr "Logi uuesti sisse" + +msgid "Password change" +msgstr "Salasõna muutmine" + +msgid "Your password was changed." +msgstr "Teie salasõna on vahetatud." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Turvalisuse tagamiseks palun sisestage oma praegune salasõna ja seejärel uus " +"salasõna. Veendumaks, et uue salasõna sisestamisel ei tekkinud vigu, palun " +"sisestage see kaks korda." + +msgid "Change my password" +msgstr "Muuda salasõna" + +msgid "Password reset" +msgstr "Uue parooli loomine" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Teie salasõna on määratud. Võite nüüd sisse logida." + +msgid "Password reset confirmation" +msgstr "Uue salasõna loomise kinnitamine" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Palun sisestage uus salasõna kaks korda, et saaksime veenduda, et " +"sisestamisel ei tekkinud vigu." + +msgid "New password:" +msgstr "Uus salasõna:" + +msgid "Confirm password:" +msgstr "Kinnita salasõna:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Uue salasõna loomise link ei olnud korrektne. Võimalik, et seda on varem " +"kasutatud. Esitage uue salasõna taotlus uuesti." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Saatsime teile meilile parooli muutmise juhendi. Kui teie poolt sisestatud e-" +"posti aadressiga konto on olemas, siis jõuab kiri peagi kohale." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Kui te ei saa kirja kätte siis veenduge, et sisestasite just selle e-posti " +"aadressi, millega registreerisite. Kontrollige ka oma rämpsposti kausta." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Saite käesoleva kirja kuna soovisite muuta lehel %(site_name)s oma " +"kasutajakontoga seotud parooli." + +msgid "Please go to the following page and choose a new password:" +msgstr "Palun minge järmisele lehele ning sisestage uus salasõna" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Teie kasutajatunnus juhuks, kui olete unustanud:" + +msgid "Thanks for using our site!" +msgstr "Täname meie lehte külastamast!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s meeskond" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Unustasite oma salasõna? Sisestage oma e-posti aadress ja saadame meilile " +"juhised uue saamiseks." + +msgid "Email address:" +msgstr "E-posti aadress:" + +msgid "Reset my password" +msgstr "Reseti parool" + +msgid "All dates" +msgstr "Kõik kuupäevad" + +#, python-format +msgid "Select %s" +msgstr "Vali %s" + +#, python-format +msgid "Select %s to change" +msgstr "Vali %s mida muuta" + +#, python-format +msgid "Select %s to view" +msgstr "Vali %s vaatamiseks" + +msgid "Date:" +msgstr "Kuupäev:" + +msgid "Time:" +msgstr "Aeg:" + +msgid "Lookup" +msgstr "Otsi" + +msgid "Currently:" +msgstr "Hetkel:" + +msgid "Change:" +msgstr "Muuda:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..d14d67660d491be7794d7f748a06d98f8e65a203 GIT binary patch literal 4965 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..0c0600493 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po @@ -0,0 +1,270 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# eallik , 2011 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# Martin , 2021 +# Martin , 2016,2020 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-22 11:55+0000\n" +"Last-Translator: Martin \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Saadaval %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Nimekiri välja \"%s\" võimalikest väärtustest. Saad valida ühe või mitu " +"kirjet allolevast kastist ning vajutades noolt \"Vali\" liigutada neid ühest " +"kastist teise." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Filtreeri selle kasti abil välja \"%s\" nimekirja." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Vali kõik" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kliki, et valida kõik %s korraga." + +msgid "Choose" +msgstr "Vali" + +msgid "Remove" +msgstr "Eemalda" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valitud %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Nimekiri välja \"%s\" valitud väärtustest. Saad valida ühe või mitu kirjet " +"allolevast kastist ning vajutades noolt \"Eemalda\" liigutada neid ühest " +"kastist teise." + +msgid "Remove all" +msgstr "Eemalda kõik" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kliki, et eemaldada kõik valitud %s korraga." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s %(cnt)sst valitud" +msgstr[1] "%(sel)s %(cnt)sst valitud" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Muudetavates lahtrites on salvestamata muudatusi. Kui sooritate mõne " +"toimingu, lähevad salvestamata muudatused kaotsi." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Valisite toimingu, kuid pole salvestanud muudatusi lahtrites. Salvestamiseks " +"palun vajutage OK. Peate toimingu uuesti käivitama." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Valisite toimingu, kuid ei muutnud ühtegi lahtrit. Tõenäoliselt otsite Mine " +"mitte Salvesta nuppu." + +msgid "Now" +msgstr "Praegu" + +msgid "Midnight" +msgstr "Kesköö" + +msgid "6 a.m." +msgstr "6 hommikul" + +msgid "Noon" +msgstr "Keskpäev" + +msgid "6 p.m." +msgstr "6 õhtul" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Märkus: Olete %s tund serveri ajast ees." +msgstr[1] "Märkus: Olete %s tundi serveri ajast ees." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Märkus: Olete %s tund serveri ajast maas." +msgstr[1] "Märkus: Olete %s tundi serveri ajast maas." + +msgid "Choose a Time" +msgstr "Vali aeg" + +msgid "Choose a time" +msgstr "Vali aeg" + +msgid "Cancel" +msgstr "Tühista" + +msgid "Today" +msgstr "Täna" + +msgid "Choose a Date" +msgstr "Vali kuupäev" + +msgid "Yesterday" +msgstr "Eile" + +msgid "Tomorrow" +msgstr "Homme" + +msgid "January" +msgstr "jaanuar" + +msgid "February" +msgstr "veebruar" + +msgid "March" +msgstr "märts" + +msgid "April" +msgstr "aprill" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juuni" + +msgid "July" +msgstr "juuli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktoober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "detsember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jaan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "veebr" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "märts" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "juuni" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "juuli" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "sept" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "dets" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "P" + +msgctxt "one letter Monday" +msgid "M" +msgstr "E" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "K" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "N" + +msgctxt "one letter Friday" +msgid "F" +msgstr "R" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Näita" + +msgid "Hide" +msgstr "Varja" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7274559449924473e3804368bdc800a2b22cee82 GIT binary patch literal 13665 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 _@RE-mBS2HWp0op{a;t} zPo?}&ytdZtk_}Sl7-=@@5vJlt4t_H5e}l);89_;uJg1Ho8sJ{l&Nap3z^;`qlP=Y> zFxaum@`DCiOi^Ci9hP=E?fBk10GAR@jIf%kRGzp;c_x&vK2EKwS=I@vxt0Iqpo|zn z$q^tiY5M9a=Gvo9^|7yP&Y|v#i>MS?FEvCLPqoO%Do9@S(i>z?;mfPi+I7zQz&cUV z9J$8&JmCB)Kg&coQJ-xWoC2NKC=lUNO-16}HosWU$K}atsGt(3^O4RzAZxrshAn5Wr69ih3C*HF+1JTh<}HRM9K1+DU^t z2KCsOnwTGhLgK2>+OW0^IObQt7`HK}oJrwDCd1EJYxzCA!yf(SqyKrriNxGQuy8jB zqQbxLW`1+zBn6|$O(sQlhQhIB=sg2>?W&u=@X_;R24nU*t=>Rg*WJ`|$DOTs4vz=Z z4pUL-$&)E+<&+b>HzT&!xv$Fw{XxUW*EpO7p;d99VQ!UF#`_(o4jc&BR-HJE(+1o_ za8U~VsVdK6&?y<3>6-TRStYb39H%jygIxe>#RxaF0Z|ow!*p-YC$u1M(mn;%7Jb}wjJeA19 zM+4EyEG|#cx!I3FTKULHkn`cq#(7_Tj=*R7!*evs0ZC;z(8xjHO(Dv=vB<>-9?>B@ z%^FHim>CO1D#^ALc)fX{reb_g@lXtOPY;o!J|UD-kh1QO>y=*?Dxwq;>SPQPfxL%I z0QY1Oeh;cx`Bi_@% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..5853594fd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,709 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2013,2016 +# Eneko Illarramendi , 2017-2019 +# Jannis Leidel , 2011 +# julen, 2012-2013 +# julen, 2013 +# Urtzi Odriozola , 2017 +# Yoaira García , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-22 12:29+0000\n" +"Last-Translator: Yoaira García \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ezabatu aukeratutako %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s elementu ezabatu dira." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ezin da %(name)s ezabatu" + +msgid "Are you sure?" +msgstr "Ziur al zaude?" + +msgid "Administration" +msgstr "Kudeaketa" + +msgid "All" +msgstr "Dena" + +msgid "Yes" +msgstr "Bai" + +msgid "No" +msgstr "Ez" + +msgid "Unknown" +msgstr "Ezezaguna" + +msgid "Any date" +msgstr "Edozein data" + +msgid "Today" +msgstr "Gaur" + +msgid "Past 7 days" +msgstr "Aurreko 7 egunak" + +msgid "This month" +msgstr "Hilabete hau" + +msgid "This year" +msgstr "Urte hau" + +msgid "No date" +msgstr "Datarik ez" + +msgid "Has date" +msgstr "Data dauka" + +msgid "Empty" +msgstr "Hutsik" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Idatzi kudeaketa gunerako %(username)s eta pasahitz zuzena. Kontuan izan " +"biek maiuskula/minuskulak desberdintzen dituztela." + +msgid "Action:" +msgstr "Ekintza:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Gehitu beste %(verbose_name)s bat" + +msgid "Remove" +msgstr "Kendu" + +msgid "Addition" +msgstr "Gehitzea" + +msgid "Change" +msgstr "Aldatu" + +msgid "Deletion" +msgstr "Ezabatzea" + +msgid "action time" +msgstr "Ekintza hordua" + +msgid "user" +msgstr "erabiltzailea" + +msgid "content type" +msgstr "eduki mota" + +msgid "object id" +msgstr "objetuaren id-a" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objeturaren adierazpena" + +msgid "action flag" +msgstr "Ekintza botoia" + +msgid "change message" +msgstr "Mezua aldatu" + +msgid "log entry" +msgstr "Log sarrera" + +msgid "log entries" +msgstr "log sarrerak" + +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "LogEntry objetua" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Gehituta" + +msgid "and" +msgstr "eta" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} aldatuta." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Ez da eremurik aldatu." + +msgid "None" +msgstr "Bat ere ez" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Aldaketa gehiago egin ditzazkezu jarraian." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Elementuak aukeratu behar dira beraien gain ekintzak burutzeko. Ez da " +"elementurik aldatu." + +msgid "No action selected." +msgstr "Ez dago ekintzarik aukeratuta." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Gehitu %s" + +#, python-format +msgid "Change %s" +msgstr "Aldatu %s" + +#, python-format +msgid "View %s" +msgstr "%s ikusi" + +msgid "Database error" +msgstr "Errorea datu-basean" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(name)s %(count)s ondo aldatu da." +msgstr[1] "%(count)s %(name)s ondo aldatu dira." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Guztira %(total_count)s aukeratuta" +msgstr[1] "Guztira %(total_count)s aukeratuta" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Guztira %(cnt)s, 0 aukeratuta" + +#, python-format +msgid "Change history: %s" +msgstr "Aldaketen historia: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s klaseko %(instance)s instantziak ezabatzeak erlazionatutako " +"objektu hauek ezabatzea eragingo du:\n" +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Django kudeaketa gunea" + +msgid "Django administration" +msgstr "Django kudeaketa" + +msgid "Site administration" +msgstr "Webgunearen kudeaketa" + +msgid "Log in" +msgstr "Sartu" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s kudeaketa" + +msgid "Page not found" +msgstr "Ez da orririk aurkitu" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Sentitzen dugu, baina eskatutako orria ezin da aurkitu." + +msgid "Home" +msgstr "Hasiera" + +msgid "Server error" +msgstr "Zerbitzariaren errorea" + +msgid "Server error (500)" +msgstr "Zerbitzariaren errorea (500)" + +msgid "Server Error (500)" +msgstr "Zerbitzariaren errorea (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Burutu aukeratutako ekintza" + +msgid "Go" +msgstr "Joan" + +msgid "Click here to select the objects across all pages" +msgstr "Egin klik hemen orri guztietako objektuak aukeratzeko" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Hautatu %(total_count)s %(module_name)s guztiak" + +msgid "Clear selection" +msgstr "Garbitu hautapena" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s aplikazioaren modeloak" + +msgid "Add" +msgstr "Gehitu" + +msgid "View" +msgstr "Ikusi" + +msgid "You don’t have permission to view or edit anything." +msgstr "Ez duzu ezer ikusteko edo editatzeko baimenik." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Lehenik, sartu erabiltzailea eta pasahitza bat. Gero, editatzeko aukera " +"gehiago izango dituzu. " + +msgid "Enter a username and password." +msgstr "Sartu erabiltzaile izen eta pasahitz bat." + +msgid "Change password" +msgstr "Aldatu pasahitza" + +msgid "Please correct the error below." +msgstr "Mesedez zuzendu erroreak behean." + +msgid "Please correct the errors below." +msgstr "Mesedez zuzendu erroreak behean." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Idatzi pasahitz berria %(username)s erabiltzailearentzat." + +msgid "Welcome," +msgstr "Ongi etorri," + +msgid "View site" +msgstr "Webgunea ikusi" + +msgid "Documentation" +msgstr "Dokumentazioa" + +msgid "Log out" +msgstr "Irten" + +#, python-format +msgid "Add %(name)s" +msgstr "Gehitu %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Webgunean ikusi" + +msgid "Filter" +msgstr "Iragazkia" + +msgid "Clear all filters" +msgstr "Garbitu filtro guztiak." + +msgid "Remove from sorting" +msgstr "Kendu ordenaziotik" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ordenatzeko lehentasuna: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Txandakatu ordenazioa" + +msgid "Delete" +msgstr "Ezabatu" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s ezabatzean bere '%(escaped_object)s' ere ezabatzen dira, " +"baina zure kontuak ez dauka baimenik objetu mota hauek ezabatzeko:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' ezabatzeak erlazionatutako objektu " +"babestu hauek ezabatzea eskatzen du:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ziur zaude %(object_name)s \"%(escaped_object)s\" ezabatu nahi dituzula? " +"Erlazionaturik dauden hurrengo elementuak ere ezabatuko dira:" + +msgid "Objects" +msgstr "Objetuak" + +msgid "Yes, I’m sure" +msgstr "bai, ziur nago " + +msgid "No, take me back" +msgstr "Ez, itzuli atzera" + +msgid "Delete multiple objects" +msgstr "Ezabatu hainbat objektu" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Aukeratutako %(objects_name)s ezabatzeak erlazionatutako objektuak ezabatzea " +"eskatzen du baina zure kontuak ez dauka baimen nahikorik objektu mota hauek " +"ezabatzeko: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Aukeratutako %(objects_name)s ezabatzeak erlazionatutako objektu babestu " +"hauek ezabatzea eskatzen du:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ziur zaude aukeratutako %(objects_name)s ezabatu nahi duzula? Objektu guzti " +"hauek eta erlazionatutako elementu guztiak ezabatuko dira:" + +msgid "Delete?" +msgstr "Ezabatu?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Irizpidea: %(filter_title)s" + +msgid "Summary" +msgstr "Laburpena" + +msgid "Recent actions" +msgstr "Azken ekintzak" + +msgid "My actions" +msgstr "Nire ekintzak" + +msgid "None available" +msgstr "Ez dago ezer" + +msgid "Unknown content" +msgstr "Eduki ezezaguna" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s bezala autentikatu zara, baina ez daukazu orrialde honetara " +"sarbidea. Nahi al duzu kontu ezberdin batez sartu?" + +msgid "Forgotten your password or username?" +msgstr "Pasahitza edo erabiltzaile-izena ahaztu duzu?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Data/ordua" + +msgid "User" +msgstr "Erabiltzailea" + +msgid "Action" +msgstr "Ekintza" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Erakutsi dena" + +msgid "Save" +msgstr "Gorde" + +msgid "Popup closing…" +msgstr "Popup leihoa ixten..." + +msgid "Search" +msgstr "Bilatu" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "Emaitza %(counter)s " +msgstr[1] "%(counter)s emaitza" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s guztira" + +msgid "Save as new" +msgstr "Gorde berri gisa" + +msgid "Save and add another" +msgstr "Gorde eta beste bat gehitu" + +msgid "Save and continue editing" +msgstr "Gorde eta editatzen jarraitu" + +msgid "Save and view" +msgstr "Gorde eta ikusi" + +msgid "Close" +msgstr "Itxi" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Aldatu aukeratutako %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Gehitu beste %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Ezabatu aukeratutako %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Eskerrik asko webguneari zure probetxuzko denbora eskaintzeagatik." + +msgid "Log in again" +msgstr "Hasi saioa berriro" + +msgid "Password change" +msgstr "Aldatu pasahitza" + +msgid "Your password was changed." +msgstr "Zure pasahitza aldatu egin da." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Mesedez, sartu zure pasahitza zaharra segurtasunagatik, gero sartu berria bi " +"aldiz, ondo idatzita dagoela ziurtatzeko. " + +msgid "Change my password" +msgstr "Nire pasahitza aldatu" + +msgid "Password reset" +msgstr "Berrezarri pasahitza" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Zure pasahitza ezarri da. Orain aurrera egin eta sartu zaitezke." + +msgid "Password reset confirmation" +msgstr "Pasahitza berrezartzeko berrespena" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Idatzi pasahitz berria birritan ondo idatzita dagoela ziurta dezagun." + +msgid "New password:" +msgstr "Pasahitz berria:" + +msgid "Confirm password:" +msgstr "Berretsi pasahitza:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Pasahitza berrezartzeko loturak baliogabea dirudi. Baliteke lotura aurretik " +"erabilita egotea. Eskatu berriro pasahitza berrezartzea." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Zure pasahitza jartzeko aginduak bidali dizkizugu... sartu duzun posta " +"elektronikoarekin konturen bat baldin badago. Laster jasoko dituzu." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Posta elektronikorik jasotzen ez baduzu, ziurtatu erregistratu duzun " +"helbidean sartu zarela, eta zure spam horria begiratu. " + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Mezu hau %(site_name)s webgunean pasahitza berrezartzea eskatu duzulako jaso " +"duzu." + +msgid "Please go to the following page and choose a new password:" +msgstr "Zoaz hurrengo orrira eta aukeratu pasahitz berria:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Mila esker gure webgunea erabiltzeagatik!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s webguneko taldea" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Pasahitza ahaztu zaizu? Sartu zure helbidea behean, eta berria jartzeko " +"argibideak bidaliko dizkizugu " + +msgid "Email address:" +msgstr "Helbide elektronikoa:" + +msgid "Reset my password" +msgstr "Berrezarri pasahitza" + +msgid "All dates" +msgstr "Data guztiak" + +#, python-format +msgid "Select %s" +msgstr "Aukeratu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Aukeratu %s aldatzeko" + +#, python-format +msgid "Select %s to view" +msgstr "Aukeratu %s ikusteko" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Ordua:" + +msgid "Lookup" +msgstr "Lookup" + +msgid "Currently:" +msgstr "Oraingoa:" + +msgid "Change:" +msgstr "Aldatu:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b9adaa92c9b5488f4deee9e5814fdb6c7612da0 GIT binary patch literal 4522 zcmbuB&yO5O6~_x~z}Y~+fdGLJo=t48;4 z`_XB>L8wq)2j2&N zE3{tcBkkYoN$~7nJzD22O&%1doA#1x5co7!>Xgd=M192SAvv9u55`K(Xub&|V0<1d9Ax z;B(**Z3e#r{tc9QUxG2>-#D-vn1K*c9u&E+f}-ym;EUjkpv33U2kW@~1{6JSfKPyb z2>p9Lq|~?3-Uq$}z5-fs3eJI>)%OE`82F>W9|!(4@U_672YwuLrOef+{t>FGz=bM8 z{TS+D)B~te9;{L2nZ#U**n9*PYSqK2??#m(v5+Erm(r+F<*YnDiYoE>lr&JVt*VHR z?nj+OokBg1`bku{OC3ceRJcaXqRM;W5UP|J)X$)vKs|^md<7)>Cv3*Ivtv9XC9B};I`-FwqqwrNBu~hq=8_5;7qFKi%yYyHNT-v zs^gUDP_7nq*5*_#bgj)ffHa-geyr6p{jruGZ>81ToU=+<=nNJlX2T?fPO&zp zNnZKp2$FT+Y>Xp1q}1BV`Rf*$3NK%PlMC-L*=e+;6N}2onpjegMYlH%LNsn#j+u${ zxNYO$ja!VPA^V7~q^xtUvw~JHiQi;?Z8^?+#?XaM#|>B1menp9GpfkyC3klPC&pK= zr;$&V*DG^H-I#+bdvDgXX<$N(qhNC%DVyPmJ;Fsx&LCuam&W^6Y$kmx<9%z|7ZTjP zYd7>3mE;Y5t#09Rk!+1iwhF$r^Jz}9y8CH$#o6n4eK(eq#uwS;$dx7~*O3x-;wlfU z^Np3fW0Jv$D6Zr$7becW+2$O z${R*>?#P{L%zU;ncbsNVHy=B3YzAfGvd(>@<#d*(+FRG8#f*EFmeUlcTK5@QNsqJi zJpp%0U(~k!&tYEHDRhS$E!O=eozwZ33#Q4g_k-s2^ycPf2z%Twv|odV&Y0#IGr|@tn24Z$_7<4KRb7Z>c_K_867xFvq#TN;5x1D*9Lpj z!)06FySnHxPFmsh9mj9Jat-cWt>)vR^aW<;1Vyn)J8-B`^S(qAS8}a>`+*YeHN_g& zbQmJ*lHwhD&U2=FG_q0F7(MHrTI}GZ-b-aOIdx!#fh;s*-H}*{7)N7*quE{~AI4_& z5SUtaK1O%2nt_3rF-{E`9Utd2AGJS#|IdyoXJzOXB1De-t>ijBz-1(P=n3H|j}UAXh>l z;UsZ_e1wVj;I%|Y1QD(xS;B+b_#jMpzm~ekCBBQwf%tTyr?>EC?dmFogh_-&wxAC& zV~iy5Gg=2nIeCyeTpA2i>BUGiE~6Vwk|R?m(QORkQpfsMdt~vO?1{}gn6xM=e6hPl z$T6qR8RV5(#=$CUB^n=s88(@XpU5!}+W0#6aAtdCkYKv>)hWS=wQ3QUF`OsIXxm*$ zQ5I9^L6Q@fBu!kN7H@QXuqALb4g?ONcnJ$~UxJcFblE^JKAy0DJ%xMS;rk%A-Wq6U zISJzU`8rX, 2011 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +# julen , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s erabilgarri" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Hau da aukeran dauden %s zerrenda. Hauetako zenbait aukera ditzakezu " +"azpiko \n" +"kaxan hautatu eta kutxen artean dagoen \"Aukeratu\" gezian klik eginez." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Idatzi kutxa honetan erabilgarri dauden %s objektuak iragazteko." + +msgid "Filter" +msgstr "Filtroa" + +msgid "Choose all" +msgstr "Denak aukeratu" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Egin klik %s guztiak batera aukeratzeko." + +msgid "Choose" +msgstr "Aukeratu" + +msgid "Remove" +msgstr "Kendu" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s aukeratuak" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Hau da aukeratutako %s zerrenda. Hauetako zenbait ezaba ditzakezu azpiko " +"kutxan hautatu eta bi kutxen artean dagoen \"Ezabatu\" gezian klik eginez." + +msgid "Remove all" +msgstr "Kendu guztiak" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Egin klik aukeratutako %s guztiak kentzeko." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-etik %(sel)s aukeratuta" +msgstr[1] "%(cnt)s-etik %(sel)s aukeratuta" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Gorde gabeko aldaketak dauzkazu eremuetan. Ekintza bat exekutatzen baduzu, " +"gorde gabeko aldaketak galduko dira." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ekintza bat hautatu duzu, baina oraindik ez duzu eremuetako aldaketak gorde. " +"Mesedez, sakatu OK gordetzeko. Ekintza berriro exekutatu beharko duzu." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ekintza bat hautatu duzu, baina ez duzu inongo aldaketarik egin eremuetan. " +"Litekeena da, Gorde botoia beharrean Aurrera botoiaren bila aritzea." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Oharra: zerbitzariaren denborarekiko ordu %s aurrerago zaude" +msgstr[1] "Oharra: zerbitzariaren denborarekiko %s ordu aurrerago zaude" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Oharra: zerbitzariaren denborarekiko ordu %s atzerago zaude. " +msgstr[1] "Oharra: zerbitzariaren denborarekiko %s ordu atzerago zaude. " + +msgid "Now" +msgstr "Orain" + +msgid "Choose a Time" +msgstr "Aukeratu ordu bat" + +msgid "Choose a time" +msgstr "Aukeratu ordu bat" + +msgid "Midnight" +msgstr "Gauerdia" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Eguerdia" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Atzera" + +msgid "Today" +msgstr "Gaur" + +msgid "Choose a Date" +msgstr "Aukeratu data bat" + +msgid "Yesterday" +msgstr "Atzo" + +msgid "Tomorrow" +msgstr "Bihar" + +msgid "January" +msgstr "Urtarrila" + +msgid "February" +msgstr "Otsaila" + +msgid "March" +msgstr "Martxoa" + +msgid "April" +msgstr "Apirila" + +msgid "May" +msgstr "Maiatza" + +msgid "June" +msgstr "Ekaina" + +msgid "July" +msgstr "Uztaila" + +msgid "August" +msgstr "Abuztua" + +msgid "September" +msgstr "Iraila" + +msgid "October" +msgstr "Urria" + +msgid "November" +msgstr "Azaroa" + +msgid "December" +msgstr "Abendua" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "I" + +msgctxt "one letter Monday" +msgid "M" +msgstr "A" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "A" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "A" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "O" + +msgctxt "one letter Friday" +msgid "F" +msgstr "O" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Erakutsi" + +msgid "Hide" +msgstr "Izkutatu" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2cc581a5bd8e3f68d0798278eadaf97eaa7c6d3f GIT binary patch literal 20345 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ℜF?3PcCBQ<72SL?Vla#Ob|Q+h@-B z|CI5*2_YgA69^gWn`4PwUxl)htP|2`15vJ3CYF@RgN+@UEeL#_f=*+5YknV!_E}L6HCc9%B`&)Hry0QAbL#EiyeUxr*yvB z;u?WYp(`;DTb7%Bf9mulT*z)J3yAm1l$(rDa=I)@$vvrLa?XlAi4K>xMYd^8nJ777 z8!Y0FyHV0w>B@w$_Z-bMqqx>(EALpPLuQDYKI}0mK47&9{vj>_TmvzA1|}h=J!?c%Xc@TG#mzf??rE-7ww9gQpfvera;_>k*P6F24Pp>TpYhwx z7+80zcJ6$1o{G1d@Ofb0oY`Yg<nwziStD$70#S;^!e*zdie${XR9 zBt#N~9o*Dw^dHdNN1dF_`H%< zFwU3i2t~>brZ4K{t_gAN!OEGrU>8axom;IW*J$|TcILFNPA{@imYzv6>k_%HrhE@h zX63#33Y%#{ie&awV>85V&KNZHRQn+0CSAVjftW;c63dwf0kfU4mh^2}OPXnc=hLS7 z%|t17idB-Ekg&9dXwA-L$ttxi7n|3$onk>h>cVy~Tt?!$YvseRWRE!0!4AaWX30;r zzb`kbBWz}KzR9f^A!0v)tJJZW8>%p_RI-vb$L^dct|Us6pDo+i+0joq-X?8(;mvrr-*?GLg2807%QVhKv!o~D zc6wn^Dz)!c6n&K=plK&v$MAmKX~I?7p5m4&BUJNto@jUej}(7iBEjvju*-I${lBH` z)j^q-BbMwC{~uIZvWuEy619U0)L|tQRZDj3<82U&drC&LUer%;PLtG^;vacxQ^zd+ zz~3S#fl0^xIL)06PIuMc`v$#{6l!8-c7xtPwPo2gQB-PKkvBN2$`vnJ4tZ;O0*tCI zme5htQ%spCSQm%>r&&c3(b4!Y z?hs{gH_;g!ZsPwwL+SY}GmtkFO*{drV<`}^5tvDAvb9MIk$Fv|FpzvoD)^|M{-+va z7c!7-`avl<{1Np=@fJJMc&a%D@k-}@56&Q>I|E^H4C+Y>X|~|l$;%kFCHHM4H46Vs z@tP7W0~7-!6ztZ#mJt#R%(2*0T&xnuRwDCCA=70R_cZy9yH2%mErrhXpn#y3HCV~K z^+n3Q3~+#DA2memWTMC^;VK=g!pwX_<|G#StswTay+WuAH9wUpQP%5|QkX&z$~Omh z=YZ3;A*_{1XE!Pcy9lfd8}nUE9k!up;~(xrgppowtZX(4ar%`qj&i-3v8EszH^(G+ zj-Qd;d`+Y$gJY8uKN^z1feJxxMyjzN;_xxvmL z`-*`b6{zwx;aq=hZATY{%C%Uk>ZM^jUKEpARKk>!_lj4=&d7i^CvMHz%dO5$X2Xv z58hsXO5MtwG7WF8K1=FWMx}&h>dAD$60OQ%MKgtvSjCD)Z~)HI+ThV4Q=Vlvw(5z_ z{gCytvzCpsGz3k+69o>^Sr;YS(#&aGD-=-g6c3Zhs$!GWY zDRZ(*5opAc2G?5U3Fn(=`gqW81*zs%(UUk}Q5(I|+0Gc{)an02kkqMTgES;Z3DjIT z>|DGQy_l1FR-ek#$|O)hwbDihlXhl{^bn|%BsO?Hns|TkNk!9bf^6CBU2x5WjN@rCu~m}k*;J-$Y8lLe*bt1yd{?3u#G1UN&$-yWrs529!;!W;2J#&|3fG(nA86%8T&_=Zw_Qp5Uu9?@x`0v5%d4zC_{Et7Wt3%x-8 A>i_@% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..ae3144bcc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,739 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmad Hosseini , 2020 +# Ali Nikneshan , 2015,2020 +# Ali Vakilzade , 2015 +# Amir Ajorloo , 2020 +# Arash Fazeli , 2012 +# Farshad Asadpour, 2021 +# Jannis Leidel , 2011 +# MJafar Mashhadi , 2018 +# Mohammad Hossein Mojtahedi , 2017,2019 +# Pouya Abbassi, 2016 +# rahim agh , 2021 +# Reza Mohammadi , 2013-2014 +# Sajad Rahimi , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-23 18:10+0000\n" +"Last-Translator: Farshad Asadpour\n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "حذف %(verbose_name_plural)s های انتخاب شده" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d تا %(items)s با موفقیت حذف شدند." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "امکان حذف %(name)s نیست." + +msgid "Are you sure?" +msgstr "آیا مطمئن هستید؟" + +msgid "Administration" +msgstr "مدیریت" + +msgid "All" +msgstr "همه" + +msgid "Yes" +msgstr "بله" + +msgid "No" +msgstr "خیر" + +msgid "Unknown" +msgstr "ناشناخته" + +msgid "Any date" +msgstr "هر تاریخی" + +msgid "Today" +msgstr "امروز" + +msgid "Past 7 days" +msgstr "۷ روز اخیر" + +msgid "This month" +msgstr "این ماه" + +msgid "This year" +msgstr "امسال" + +msgid "No date" +msgstr "بدون تاریخ" + +msgid "Has date" +msgstr "دارای تاریخ" + +msgid "Empty" +msgstr "خالی" + +msgid "Not empty" +msgstr "غیر خالی" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"لطفا %(username)s و گذرواژه را برای یک حساب کارمند وارد کنید.\n" +"توجه داشته باشید که ممکن است هر دو به کوچکی و بزرگی حروف حساس باشند." + +msgid "Action:" +msgstr "اقدام:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "افزودن یک %(verbose_name)s دیگر" + +msgid "Remove" +msgstr "حذف" + +msgid "Addition" +msgstr "افزودن" + +msgid "Change" +msgstr "تغییر" + +msgid "Deletion" +msgstr "کاستن" + +msgid "action time" +msgstr "زمان اقدام" + +msgid "user" +msgstr "کاربر" + +msgid "content type" +msgstr "نوع محتوی" + +msgid "object id" +msgstr "شناسهٔ شیء" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "صورت شیء" + +msgid "action flag" +msgstr "نشانه عمل" + +msgid "change message" +msgstr "پیغام تغییر" + +msgid "log entry" +msgstr "مورد اتفاقات" + +msgid "log entries" +msgstr "موارد اتفاقات" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\" افروده شد." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "تغییر یافت \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" حدف شد." + +msgid "LogEntry Object" +msgstr "شئ LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "اضافه شد {name} \"{object}\"." + +msgid "Added." +msgstr "اضافه شد" + +msgid "and" +msgstr "و" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} برای {name} \"{object}\" تغییر یافتند." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} تغییر یافتند." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} \"{object}\" حذف شد." + +msgid "No fields changed." +msgstr "فیلدی تغییر نیافته است." + +msgid "None" +msgstr "هیچ" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"برای انتخاب بیش از یکی \"Control\"، یا \"Command\" روی Mac، را پایین نگه " +"دارید." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" با موفقیت اضافه شد." + +msgid "You may edit it again below." +msgstr "می‌توانید مجدداً ویرایش کنید." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} \"{obj}\" با موفقیت اضافه شد. شما میتوانید {name} دیگری در قسمت پایین " +"اضافه کنید." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" با موفقیت تغییر یافت. شما میتوانید دوباره آنرا در قسمت " +"پایین ویرایش کنید." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +" {name} \"{obj}\" به موفقیت اضافه شد. شما میتوانید در قسمت پایین، دوباره آن " +"را ویرایش کنید." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" با موفقیت تغییر یافت. شما میتوانید {name} دیگری در قسمت " +"پایین اضافه کنید." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" با موفقیت تغییر یافت." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"آیتم ها باید به منظور انجام عملیات بر روی آنها انتخاب شوند. هیچ آیتمی با " +"تغییر نیافته است." + +msgid "No action selected." +msgstr "فعالیتی انتخاب نشده" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s·\"%(obj)s\" با موفقیت حذف شد." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s با کلید «%(key)s» وجود ندارد. ممکن است حذف شده باشد." + +#, python-format +msgid "Add %s" +msgstr "اضافه کردن %s" + +#, python-format +msgid "Change %s" +msgstr "تغییر %s" + +#, python-format +msgid "View %s" +msgstr "مشاهده %s" + +msgid "Database error" +msgstr "خطا در بانک اطلاعاتی" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s با موفقیت تغییر کرد." +msgstr[1] "%(count)s %(name)s با موفقیت تغییر کرد." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "همه موارد %(total_count)s انتخاب شده" +msgstr[1] "همه موارد %(total_count)s انتخاب شده" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 از %(cnt)s انتخاب شده‌اند" + +#, python-format +msgid "Change history: %s" +msgstr "تاریخچهٔ تغییر: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"برای حذف %(class_name)s %(instance)s لازم است اشیای حفاظت شدهٔ زیر هم حذف " +"شوند: %(related_objects)s" + +msgid "Django site admin" +msgstr "مدیریت وب‌گاه Django" + +msgid "Django administration" +msgstr "مدیریت Django" + +msgid "Site administration" +msgstr "مدیریت وب‌گاه" + +msgid "Log in" +msgstr "ورود" + +#, python-format +msgid "%(app)s administration" +msgstr "مدیریت ‎%(app)s‎" + +msgid "Page not found" +msgstr "صفحه یافت نشد" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "شرمنده، صفحه مورد تقاضا یافت نشد." + +msgid "Home" +msgstr "شروع" + +msgid "Server error" +msgstr "خطای سرور" + +msgid "Server error (500)" +msgstr "خطای سرور (500)" + +msgid "Server Error (500)" +msgstr "خطای سرور (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"مشکلی پیش آمده. این مشکل از طریق ایمیل به مدیران وب‌گاه اطلاع داده شد و به " +"زودی اصلاح می‌گردد. از صبر شما متشکریم." + +msgid "Run the selected action" +msgstr "اجرای حرکت انتخاب شده" + +msgid "Go" +msgstr "برو" + +msgid "Click here to select the objects across all pages" +msgstr "برای انتخاب موجودیت‌ها در تمام صفحات اینجا را کلیک کنید" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "انتخاب تمامی %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "لغو انتخاب‌ها" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "مدلها در برنامه %(name)s " + +msgid "Add" +msgstr "اضافه کردن" + +msgid "View" +msgstr "مشاهده" + +msgid "You don’t have permission to view or edit anything." +msgstr "شما اجازهٔ مشاهده یا ویرایش چیزی را ندارید." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"ابتدا یک نام کاربری و گذرواژه وارد کنید. سپس می توانید مشخصات دیگر کاربر را " +"ویرایش کنید." + +msgid "Enter a username and password." +msgstr "یک نام کاربری و رمز عبور را وارد کنید." + +msgid "Change password" +msgstr "تغییر گذرواژه" + +msgid "Please correct the error below." +msgstr "لطفاً خطای زیر را تصحیح کنید." + +msgid "Please correct the errors below." +msgstr "لطفاً خطاهای زیر را تصحیح کنید." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "برای کابر %(username)s یک گذرنامهٔ جدید وارد کنید." + +msgid "Welcome," +msgstr "خوش آمدید،" + +msgid "View site" +msgstr "نمایش وبگاه" + +msgid "Documentation" +msgstr "مستندات" + +msgid "Log out" +msgstr "خروج" + +#, python-format +msgid "Add %(name)s" +msgstr "اضافه‌کردن %(name)s" + +msgid "History" +msgstr "تاریخچه" + +msgid "View on site" +msgstr "مشاهده در وب‌گاه" + +msgid "Filter" +msgstr "فیلتر" + +msgid "Clear all filters" +msgstr "پاک کردن همه فیلترها" + +msgid "Remove from sorting" +msgstr "حذف از مرتب سازی" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "اولویت مرتب‌سازی: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "تعویض مرتب سازی" + +msgid "Delete" +msgstr "حذف" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"حذف %(object_name)s·'%(escaped_object)s' می تواند باعث حذف اشیاء مرتبط شود. " +"اما حساب شما دسترسی لازم برای حذف اشیای از انواع زیر را ندارد:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"حذف %(object_name)s '%(escaped_object)s' نیاز به حذف موجودیت‌های مرتبط محافظت " +"شده ذیل دارد:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"آیا مطمئنید که می‌خواهید %(object_name)s·\"%(escaped_object)s\" را حذف کنید؟ " +"کلیهٔ اشیای مرتبط زیر حذف خواهند شد:" + +msgid "Objects" +msgstr "اشیاء" + +msgid "Yes, I’m sure" +msgstr "بله، مطمئن هستم." + +msgid "No, take me back" +msgstr "نه، من را برگردان" + +msgid "Delete multiple objects" +msgstr "حذف اشیاء متعدد" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"حذف %(objects_name)s انتخاب شده منجر به حذف موجودیت‌های مرتبط خواهد شد، ولی " +"شناسه شما اجازه حذف اینگونه از موجودیت‌های ذیل را ندارد:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"حذف %(objects_name)s انتخاب شده نیاز به حذف موجودیت‌های مرتبط محافظت شده ذیل " +"دارد:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"آیا در خصوص حذف %(objects_name)s انتخاب شده اطمینان دارید؟ تمام موجودیت‌های " +"ذیل به همراه موارد مرتبط با آنها حذف خواهند شد:" + +msgid "Delete?" +msgstr "حذف؟" + +#, python-format +msgid " By %(filter_title)s " +msgstr "براساس %(filter_title)s " + +msgid "Summary" +msgstr "خلاصه" + +msgid "Recent actions" +msgstr "فعالیتهای اخیر" + +msgid "My actions" +msgstr "فعالیتهای من" + +msgid "None available" +msgstr "چیزی در دسترس نیست" + +msgid "Unknown content" +msgstr "محتوا ناشناخته" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"در نصب بانک اطلاعاتی شما مشکلی وجود دارد. مطمئن شوید که جداول مربوطه به " +"درستی ایجاد شده‌اند و اطمینان حاصل کنید که بانک اطلاعاتی توسط کاربر مربوطه " +"قابل خواندن می باشد." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"شما به عنوان %(username)sوارد شده اید. ولی اجازه مشاهده صفحه فوق را نداریدو " +"آیا مایلید با کاربر دیگری وارد شوید؟" + +msgid "Forgotten your password or username?" +msgstr "گذرواژه یا نام کاربری خود را فراموش کرده‌اید؟" + +msgid "Toggle navigation" +msgstr "تعویض جهت یابی" + +msgid "Start typing to filter…" +msgstr "آغار به کار نوشتن برای فیلترکردن ..." + +msgid "Filter navigation items" +msgstr "فیلتر کردن آیتم های مسیریابی" + +msgid "Date/time" +msgstr "تاریخ/ساعت" + +msgid "User" +msgstr "کاربر" + +msgid "Action" +msgstr "عمل" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"این شیء هنوز تاریخچه تغییرات ندارد. ممکن است توسط این وب‌گاه مدیر ساخته نشده " +"باشد." + +msgid "Show all" +msgstr "نمایش همه" + +msgid "Save" +msgstr "ذخیره" + +msgid "Popup closing…" +msgstr "در حال بستن پنجره..." + +msgid "Search" +msgstr "جستجو" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s نتیجه" +msgstr[1] "%(counter)s نتیجه" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "در مجموع %(full_result_count)s تا" + +msgid "Save as new" +msgstr "ذخیره به عنوان جدید" + +msgid "Save and add another" +msgstr "ذخیره و ایجاد یکی دیگر" + +msgid "Save and continue editing" +msgstr "ذخیره و ادامهٔ ویرایش" + +msgid "Save and view" +msgstr "ذخیره و نمایش" + +msgid "Close" +msgstr "بستن" + +#, python-format +msgid "Change selected %(model)s" +msgstr "تغییر دادن %(model)s انتخاب شده" + +#, python-format +msgid "Add another %(model)s" +msgstr "افزدون %(model)s دیگر" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "حذف کردن %(model)s انتخاب شده" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" +"از شما ممنون هستیم که زمان با ارزش خود را برای این تارنما امروز صرف کرده اید" + +msgid "Log in again" +msgstr "ورود دوباره" + +msgid "Password change" +msgstr "تغییر گذرواژه" + +msgid "Your password was changed." +msgstr "گذرواژهٔ شما تغییر یافت." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"برای امنیت بیشتر٬ لطفا گذرواژه قدیمی خود را وارد کنید٬ سپس گذرواژه جدیدتان " +"را دوبار وارد کنید تا ما بتوانیم چک کنیم که به درستی تایپ کرده‌اید. " + +msgid "Change my password" +msgstr "تغییر گذرواژهٔ من" + +msgid "Password reset" +msgstr "ایجاد گذرواژهٔ جدید" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "گذرواژهٔ جدیدتان تنظیم شد. اکنون می‌توانید وارد وب‌گاه شوید." + +msgid "Password reset confirmation" +msgstr "تأیید گذرواژهٔ جدید" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"گذرواژهٔ جدیدتان را دوبار وارد کنید تا ما بتوانیم چک کنیم که به درستی تایپ " +"کرده‌اید." + +msgid "New password:" +msgstr "گذرواژهٔ جدید:" + +msgid "Confirm password:" +msgstr "تکرار گذرواژه:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"پیوند ایجاد گذرواژهٔ جدید نامعتبر بود، احتمالاً به این علت که قبلاً از آن " +"استفاده شده است. لطفاً برای یک گذرواژهٔ جدید درخواست دهید." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"دستورالعمل تنظیم گذرواژه را برایتان ایمیل کردیم. اگر با ایمیلی که وارد کردید " +"اکانتی وجود داشته باشد باید به زودی این دستورالعمل‌ها را دریافت کنید." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"اگر ایمیلی دریافت نمی‌کنید، لطفاً بررسی کنید که آدرسی که وارد کرده‌اید همان است " +"که با آن ثبت نام کرده‌اید، و پوشهٔ اسپم خود را نیز چک کنید." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"شما این ایمیل را بخاطر تقاضای تغییر رمز حساب در %(site_name)s. دریافت کرده " +"اید." + +msgid "Please go to the following page and choose a new password:" +msgstr "لطفاً به صفحهٔ زیر بروید و یک گذرواژهٔ جدید انتخاب کنید:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "نام کاربری‌تان، چنانچه احیاناً یادتان رفته است:" + +msgid "Thanks for using our site!" +msgstr "ممنون از استفادهٔ شما از وب‌گاه ما" + +#, python-format +msgid "The %(site_name)s team" +msgstr "گروه %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"گذرواژه خود را فراموش کرده اید؟ آدرس ایمیل خود را وارد کنید و ما مراحل تعیین " +"کلمه عبور جدید را برای شما ایمیل می‌کنیم." + +msgid "Email address:" +msgstr "آدرس ایمیل:" + +msgid "Reset my password" +msgstr "ایجاد گذرواژهٔ جدید" + +msgid "All dates" +msgstr "همهٔ تاریخ‌ها" + +#, python-format +msgid "Select %s" +msgstr "%s انتخاب کنید" + +#, python-format +msgid "Select %s to change" +msgstr "%s را برای تغییر انتخاب کنید" + +#, python-format +msgid "Select %s to view" +msgstr "%s را برای مشاهده انتخاب کنید" + +msgid "Date:" +msgstr "تاریخ:" + +msgid "Time:" +msgstr "زمان:" + +msgid "Lookup" +msgstr "جستجو" + +msgid "Currently:" +msgstr "در حال حاضر:" + +msgid "Change:" +msgstr "تغییر یافته:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2add5c779c5c97c958d439b7647cf4d3e3dfdadf GIT binary patch literal 6050 zcmc(he~esJ700hSB5uVWpcN71S}C-`%(evzPARswEEe6iwu?|hjBj@C?mU=zZ+-90 zZr2#nHQSvUTZ6V5h(r)0yR2=O{s3vCjfsi+kNjogdu>7#|IvTcM5BKg6F=v^JG-;f z<%eS8%iQ<9Kh8bp+;hJ7ym{&J!nYL9Cfe1~-mKIf!2&OyeQ#CjHgE#G1U%#LryxJ| z3pf51_zuRucH`eU`~!Fy^M7{uFNe!e*2DYQEr4E3G@!v_Joa2Fa=KF>~TvT6jxF38M<3~WYs3#pB16MLW3w{Lr zt-}JsVt*AV_U-^b4(Vhm3l9GTik&aNC)e{;hetq>e*zT#J`Li!I_=hf24;+31pf-oT%PZL9OuN3 zY4CI4v!M95jNtweTn>JQxJnYv0=qc8tY1bl#om>m_;W2N^EbKiZEn036#Y9K-Ve$- zJy7-yfwC_K#ovcPuCzMj@DYcH9e&&4V-6p8_yj0!%CkBL`xYB3+;}Z0wh>hyrrkgz zoaz?ZHM9~v{%UE~Im*@~HCAFo!9+^fsYV10q`R)a=t!B_PDkf5W zrV=&1Xk7LA^@Q;!{i;#-c!8a}r&%9Y_cQ~e`n_nd#(P}#`_;f7t|e-F7zVr&Q`URJ zruHH^tgeO4NP9KoRVALWiAGJNraxp^rmNvtexfDgsrHx{E{Zx~R?UOQ z?HftZv^SXeVQ`a;-?$S9Uf%auq8nZn$_J7OFBmr5=>Q+9{-|GVdUdRudNsDuK^(%4 zL}7(%ITMP@lyXS3rEKnu87TWcwK&NY| zU7-qex|Up>DuCT9RIUQ$>!RtvFx@R}t6PD0mpJu~+3~K~?bKDNodr5wORlCAz^;|~ zno^*r!hpD$1d{8%$cN~KzRtP+Fp#6#L_0zgql6b2u&zgk{~c zb4PKP8TCc9C||R(Ubkl5+Txm9ifeAxYi};!y8gyBJUyTG;-okbc|lzFk}xWBr)qvf zd&4z-hwYZ=^8Ki68gB62EDeT@JJ}QrH@#s~957y^tapk_P;yl*Nk+=Oy<=lzr9@Qv zLuRk+=*@j?L)~rf9rAit_w;Y;ziZ)CYfEc-w!l*p;1*@7tP`_0=^d$iey~AqW)z!b zo(}T zyKz;Z@6>BoZ|G6{)yV&Kq|@oi`Trg1bT*aFrpK9_(dp@QE^EEK@1UKX`){^fcwVQ^ zr8DU(8Yp zz=?d|98?z$o_|K;?zAXLkLyL=pMNHsVs_3+oy_*j@*9v@q&;ilVGCauE6hWt(iw4= zV=USu?xsiWe7-$9BL7%$bkd%r?QyAN|FQJhY(g)+vs-^|d`W$CM0T18;FroK2&+WB zrP8zbIm61N%Fbm|Bt=4mmnX>llsf;YjI#r|EZN8=#e3$_@H7GvQ)ExkVOruXQ4z+R zPG?j*%d=QymQAAfB&Otc zE>sR=tv`}EO&+bgSR}b9T+u1J0z=kg7>D3dSTU2emL#z|*#v&zKjc|BT&G4?xBkQP zb-Mq`ht1E*kq91lM8DQSZSFWC^cS*A@goOI9XL;Om+#7ESgyoLuB}*1rov?J82+azuqzGkS zBZ|<(l~Yb2e4oqz9Oo+(Fd~Jt;}Wa$n#k zR%b0K19I!0l^aM#S}-jy@AIGI5_dfP5v-74%m;w~>70xkD!12?WI=^91QQnJMPyGp z28d27vLxD82T{y9y7MoeYGP|01CCmgh_-2zM|827cKX?PCVgJ=y*MyXj6WTuYhjxh zo{|)cKXP~A40DocA%r9m2gMIj-YJ{4L, 2011-2012 +# Alireza Savand , 2012 +# Ali Vakilzade , 2015 +# Jannis Leidel , 2011 +# Pouya Abbassi, 2016 +# rahim agh , 2020-2021 +# Reza Mohammadi , 2014 +# Sina Cheraghi , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-03 13:56+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%sی موجود" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"این لیست%s های در دسترس است. شما ممکن است برخی از آنها را در محل زیرانتخاب " +"نمایید و سپس روی \"انتخاب\" بین دو جعبه کلیک کنید." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "برای غربال فهرست %sی موجود درون این جعبه تایپ کنید." + +msgid "Filter" +msgstr "غربال" + +msgid "Choose all" +msgstr "انتخاب همه" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "برای انتخاب یکجای همهٔ %s کلیک کنید." + +msgid "Choose" +msgstr "انتخاب" + +msgid "Remove" +msgstr "حذف" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s انتخاب شده" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"این فهرست %s های انتخاب شده است. شما ممکن است برخی از انتخاب آنها را در محل " +"زیر وارد نمایید و سپس روی \"حذف\" جهت دار بین دو جعبه حذف شده است." + +msgid "Remove all" +msgstr "حذف همه" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "برای حذف یکجای همهٔ %sی انتخاب شده کلیک کنید." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] " %(sel)s از %(cnt)s انتخاب شده‌اند" +msgstr[1] " %(sel)s از %(cnt)s انتخاب شده‌اند" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"شما تغییراتی در بعضی فیلدهای قابل تغییر انجام داده اید. اگر کاری انجام " +"دهید، تغییرات از دست خواهند رفت" + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"شما یک اقدام را انتخاب کرده‌اید، ولی تغییراتی که در فیلدهای شخصی وارد کرده‌اید " +"هنوز ذخیره نشده‌اند. لطفاً کلید OK را برای ذخیره کردن تغییرات بزنید. لازم است " +"که اقدام را دوباره اجرا کنید." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"شما یک اقدام را انتخاب کرده‌اید، ولی تغییراتی در فیلدهای شخصی وارد نکرده‌اید. " +"احتمالاً به جای کلید Save به دنبال کلید Go می‌گردید." + +msgid "Now" +msgstr "اکنون" + +msgid "Midnight" +msgstr "نیمه‌شب" + +msgid "6 a.m." +msgstr "۶ صبح" + +msgid "Noon" +msgstr "ظهر" + +msgid "6 p.m." +msgstr "۶ بعدازظهر" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "توجه: شما %s ساعت از زمان سرور جلو هستید." +msgstr[1] "توجه: شما %s ساعت از زمان سرور جلو هستید." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "توجه: شما %s ساعت از زمان سرور عقب هستید." +msgstr[1] "توجه: شما %s ساعت از زمان سرور عقب هستید." + +msgid "Choose a Time" +msgstr "یک زمان انتخاب کنید" + +msgid "Choose a time" +msgstr "یک زمان انتخاب کنید" + +msgid "Cancel" +msgstr "انصراف" + +msgid "Today" +msgstr "امروز" + +msgid "Choose a Date" +msgstr "یک تاریخ انتخاب کنید" + +msgid "Yesterday" +msgstr "دیروز" + +msgid "Tomorrow" +msgstr "فردا" + +msgid "January" +msgstr "ژانویه" + +msgid "February" +msgstr "فوریه" + +msgid "March" +msgstr "مارس" + +msgid "April" +msgstr "آوریل" + +msgid "May" +msgstr "می" + +msgid "June" +msgstr "ژوئن" + +msgid "July" +msgstr "جولای" + +msgid "August" +msgstr "آگوست" + +msgid "September" +msgstr "سپتامبر" + +msgid "October" +msgstr "اکتبر" + +msgid "November" +msgstr "نوامبر" + +msgid "December" +msgstr "دسامبر" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "ژانویه" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "فوریه" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "مارس" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "آوریل" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "می" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "ژوئن" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "ژوئیه" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "اوت" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "سپتامبر" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "اکتبر" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "نوامبر" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "دسامبر" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "ی" + +msgctxt "one letter Monday" +msgid "M" +msgstr "د" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "س" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "چ" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "پ" + +msgctxt "one letter Friday" +msgid "F" +msgstr "ج" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "ش" + +msgid "Show" +msgstr "نمایش" + +msgid "Hide" +msgstr "پنهان کردن" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3eaee9bad199fb83d3d3fb43b724834a6dbb9f38 GIT binary patch literal 16810 zcmc(m36Nz~dB?8;q9fo2f{J=(aGW0LezO1~k7XEU24)y$VY(SaG2`uixBK0G%YEFX zd!8_WxNDTSfRc!!OfV?oLNb+TnM6BUp~|JS)JilfF)@;|j9XbLtunv=Ip@B2yJrc6 zROJa6Js}8w4c_#0{_tx)BM43dWAM4)E#M2l zJHc0hp9NnEp8QPLe=c|h_q)OKzz=|W|LfpWz#o7og8u;?2mTy93H+6Re*ClC_@{%S zXSv5qz|*;ZHK=(q@TuVIz*E3CfST_;;M2f6{quXk1Ki&az7bsYY-j}^0JWdbftv4| zpx*l%kpF^5JpK}7i@{T$69mr#&j3aLdhl$p4l;Ex4UT~O{ryKkz4s8f4qO0XZSYI~ z{MXDj_#*Hg|NJk&{oMa8cmucx z=06Dj6*vuMZ2DgCd!YDtGm}d`ZvnNByFu~iQ=s_z1yJ;S6}%Mu7O3@}bB3dDJxEt@ z0eCHVHTV+ney|IE9egr)F~n=VOF_}S4ZI4x8ay8S5O@oCFQ|FWdcK?gMo{{38>shg z2gTR-`{y46S8)FzD1Lqu6#ah(YTZXcSRMQr)ca3Dc_rVcfv8+?CaCqtK<#%uC^>8d zHGaGA9|yJWq`yx={tI5uADPPC;ETcgK?6Pv=HR2?Zg3yU{5J5@U>&T#(5+v9TKCPM zPOu9e z2mS`sd}7LNz%#+~!1sdkTMvV?;J<+vgIB-Q@#S_<{Qo#8d40#@KZBb0$Dru`DJXhm z>>776D7v2K@hsmz1|CoU1z_(<$N-caKQ-d`@Fh@k{x*0e_@5x82N$k(`ubW>^xX=+ z9Q<<-5d^;kp9Y=|vBKrxiQw6w?B*PB8Mqn5#DiTRDiAb5t@l1h+x zdbfenyLW)%&*wl?A@~|7dHocW-kdV#SXxZexP{;mi0UJh!Vw}9Hu`$6&l!=Uza z5Y)au0g5kQ0;SjA2Q~gAh|qecf|_?7cr&;Syb1hk@WbGiH9^n@{}sFs+`}ZA|Gz-d zsi30$JsZ@#qoC~dTu|e-f*ZkI;7h@GgW|)Vf|zpfMQ{@QCy*tAP3wbT4$MH!_b90S z{tT47PdLZf<8whhZ-CPKHmG@i0zM1egV9U=4e(^}R`5CCyFl^jqaZFT_!uZYei=Lk z{0{hJ@CTsy@zD1CkqJPrIa@C@)9ASx03JE-+fzrgYJTu}2|28w@s zL9G{oZvgj$m`v~+Q0tG>oxk1$YMlsS`ioruPEh^t1K$pQ3lv?ip)&^Cp!DIpp!WL%P;&bbDE<05sC^$#5D|UP2POZN zpyXT!CEv^a^PQmfdmSh~wn2@%3B=Tbw}PVo5GXm-H@NW|!CSbW0AXqHZBY9^`BF#c z8W5EW?gGXCuY(K;eh6xvRT!1_bv`J4y&M!>+dw_P+CL9L?Y9SNe>eO7+d`MEd~k0PT%5$>NV`ucT!({ZLW+yMw>i`D^Lkr)ZM>AJRTU z`!Egjv_JWd^7s4Yg~xlr_gDI4ubXLa^?lM~*`j_Y&>o<@UN`w%=fJUQ`#1P|8DSB+M8(WX!`AU#|ww^w%Mn&J^9p#1^uL7IL~p5sXrZ&r>>$L%~y_vLZkj#g(TSUD2*dR&B!PTY;NJPq?W>C!#b z4zp}uH|%KG%8|I6hAJ~v`tNll*QVVh?qO>y2d+cuj=ZvEiOkyg}Sojr2v-KLR5 zS@)4!@5)WIpY7Jn?kH`Bz0Ab9(JmTMJIbTR2IjHz4Q9`HFvXK#W4mpR`f#mDrg=JL z*)x1)$})AMg?g~D!7Pmi;~c5(CbJNBle`(FJnJOT0=qSG*gF@clSvkN!RR3@zftoX z&`xhmCTAh@09&p3hj#z2+p@s-TZkQ9i)GIS?Is&x95uk5K*2sd-xzk&3p48M`3D0UCBuXt?j)Pw2ZDdJu`GJeIf z{|MZ3FM2A`x0NGRliJs77ilQ7bK^F6JgSYkVGZYHN*%9Ze(ptS_Az{^nNNy#1GT%M zh~ZvCo6;+bO{144x%E8*{q);JmqxtZc>9vTEJ@`oOD%HM;TE~-iBjj+)6Lm)k)Dr>vuQ9(+}9n&DhzdQsYmvkWa<;)#ZiCGYp5O#Y^1+G27mD&hx} z&g%)v=J77`|Huk#c=IgLJ6W0r_}&bs>>dT1lc}PEiMljlODBxmJZTV$vwEz8A*5Ml9eO6bwTi=HNLYpn4o-U9dzj!Yr*9+{saFNHAn?I3Fc^NO?rxv8OtW= zOp@nO*QsMkkHP7dYiu~$pbf?`#VT@CWg0<_061#5I3GD;+yG@zRP(ouuwm8b56t!R)QuocEwDd1%#daovS zt~8o~Tp~t;P@gy5{->G|am4Z{>xCU92aPDL1>0;&&?&N9DZ#*CaT^3qgpAPe14O?L zPQpq{TVu&i&FoBkMq%B>WQ6!!XlvAhtCAUfj|UUZg#IQea&;oIv~PCVgo^v5RrG=# zO3FwU?eutGpKFps69b)1?C6(N1UoAhP!Dz{{O6wyc2QHGl^^H=`H;Y!38E2GJCT_T zr&^5dM)r>h=de7fEVtyc*6ZJBJo3_HZ(g8t{wGxwq$@aOub%CRdoZ4Y~8ATXsA4ZU| zQM7?vxnx==>`ObQP{gq;>f*A{(E(L%QL9>u+)_RtPoYwYnb)gbLoN_c_pOR5ZYUj< zusx+JXgnJ#6UyF7Z!qdDb*f0?ypIiJCPRQuzu7Y;WBt zgiLFRGp+}_lU~s?Q)FS}36I=*U$6(8CY$%>!)+&-i#(X=H0i*jRNjX^l*Uvu*FA-^ zhJj(aS%Pr_wEbf#!TLd4+zdNWHYP35B%H2h*E@FjTpZ2&yG)TJ7$*yzY62?5ltT}$ zw0&pOi~HOZZoE>@rA3=9v5NMfmKu*z#Ba7J-!vCRol8c}Tf27kMQgZXV*AYHqSYH? z2Lwtm2=xFZ#7YMydWH<{a}KS z)ADhy7j+w&GJ|jCh9Yc3fl==7xTfvQN0Y{8C3%8#s#RYvq|-(jqXsPJk?KE$M2fxJz*+`@V-V-#@?+o45nmWA|G(PLv8O!Rj#4FVigO57S&=+Q&1}nu zy=m0Lq?8CbS8a8-a^{w#nVE}2mrz*;m^E!_NJyKG_e;i2CLjQrilx{n(!*gyoXkm1 z719~ZqFK~?P(}(`gM#$y&#Zc%t=jrsF`amBScy|Ca5r`oy;hO zWw2?))6?YPHuziryup%CCi_RIvK3cVOjv6OyL}tlYW6Mpks}%jyIKXcjtw?kNU0pp zN;fG2hawCIIhA*`I^AN3tF{JWAPZbMQt{K4j&%609Iv%Yd^P?SI;^uJX$qToV{2+~ zLrEUWx%BPIxwe0#_^4QdI*=BIcz0+*dgv4cx&pBtxD3clx5Jt8+MZoecm>YIkkV%v z(h0m3D2zsdC_xlyjAE46{lMFC+$gW`CTSo_g57DN^WL#-jj_E^s&kOKY1mSJ*&ge1 z#&%>gabxVVVkR4#Na|+U?py7}ki`QRBVXM=?i$}U<`Nd}4>I;_zXxmXfp^Ww0?S+HAI8TCO zocQV4(yu3Yx=xX_!aOgkA51trcUjAdu~yP-Q2mFhYY!W0KaC_=(Fx1Rhdp7?Z{~!h zY~i3NKm4l+ulUp`FC;1klY$!7wx3K^m|jspS5Y(LoUT$JC2?Mm;xIA{MeX9RBuar8 z9&8WeRx4)7BR^hi{J?I=827cL6E+)s4Tv)mp)i;Tdto!zo+gr*Pg8kP53Y*Y#=^l8 zdDD?T?8pX}c@lSt#>3Aj{$-q=e^5R4C7HF)a}rJeF=a*hDP;u*1zK3oV2d-x)mf$6 z51>ZgN(lh1q2GVWhTg)#c#au@9dQdm!Sc9KDun3_qoe zyO+y3Lt(p~O&L$D>5Vl`liQ!LdR zUbZ{1j8+&19+e)r%OZ0LOdQ%zDtp7Y$pl%*cgwIF221aEpvPgUcF;D|3_o+7c?&VA z7=BT4x*+qjb`hDXRvb3GW+{^yFH#gU#$wLv>v(>m-<*xQUG%`SEi1^MINGB~tUQze ztR@k&*}usb4rVmBgRq5_#3eWFL>!8;`*^O<1!YxxmedJ-lA)S{qG-Sx61Ihd@>P7Y z$y=EF0{`}AB93xg5G&5bX)_9T&vn+c+KEud1)9Z!N|%^9EmOECyN4Q6eyDPHz6T*0kOGi6bp~xS#MF@rzb?v1ox<8mf7b@hDM8;fK!f6ZTH+9HZkb?D&B-uR6Gq*W$$7UEu8T95b@5grn(Zo1|WtS=&B}Xl=p33?P=I&z-ERRF6&H)+WX=eGzHb@=N0c$v#oEYd+L4B$X*VX7Sol8PpknOuIbDcYnU>QYl9Y+H!x7rJb`i(w^>n>ALM8sav zQ=(&~w=2OEobnFFxgLy2uQaJ4Q7evTU>I&*---NA*unM$8H6$#YL<31$DWl|Nd8M6 zYTm;5_#36XRw^)> zD;H7PQ%RKF7Jf}klu=2p<+O8Qw>fmN%;;Y(U^xpgGfzDU9C_$d^kbofGm4zg9F7)S zUX%;(u>MCg!TF_ACH#vhKIw=dXbz~5)$LNHq1-LR!Gi)%U8p*&)k;NR*Glv&#$W^8 zAWg)*r?a>qJg6=8P?nwI^l;QpH++P1 zYdb;1LXy0e0*b9Gtg{;q_j{HxJ4B-DUmelf1btJ zlspge;6&L6?W4WzO%MSePW#~56QXa)EXSm8Tt%c87uI8?W=nUZ(o}%*rwme{MMjAZ zpo-*Fl_W~eMs7bM4N_V|j)W)g#bK+(K^AF{Q)7&c(_gtc1b}$0gXK$&k9jR*opF@r z>wZcRd!Av_0i}O7+ZdduVDsaS@vh8^+cv`MV5-yv9Y5@Y&zEG*r8G{1lw&#H8Lm_nIPixg@6*Ma*0a7o_4-)DA+C^2OYc@cz;)- z9B%0X+exnn+mzjvU7qv7gud$QQ8H2IibsUIg>)6Gf$jPl#gl}s*FDaAtt9bOy=BuT)_^^H z91vLy+2FY|&@RP;@|eI%OtVtalvdPnML(I4bs=T9Gk&DYoOlvv{Adw+hc8qWV`C5e z;$Q4r_B)}BVk(p!VizZ$eFbx5#-^EY@HxNq!1$v|#n!|9vK{O6OIM6c;JpOLBAkQo zWG>, 2011 +# Jannis Leidel , 2011 +# Jiri Grönroos , 2021 +# Klaus Dahlén , 2012 +# Nikolay Korotkiy , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 15:46+0000\n" +"Last-Translator: Jiri Grönroos \n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Poista valitut \"%(verbose_name_plural)s\"-kohteet" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d \"%(items)s\"-kohdetta poistettu." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ei voida poistaa: %(name)s" + +msgid "Are you sure?" +msgstr "Oletko varma?" + +msgid "Administration" +msgstr "Hallinta" + +msgid "All" +msgstr "Kaikki" + +msgid "Yes" +msgstr "Kyllä" + +msgid "No" +msgstr "Ei" + +msgid "Unknown" +msgstr "Tuntematon" + +msgid "Any date" +msgstr "Mikä tahansa päivä" + +msgid "Today" +msgstr "Tänään" + +msgid "Past 7 days" +msgstr "Viimeiset 7 päivää" + +msgid "This month" +msgstr "Tässä kuussa" + +msgid "This year" +msgstr "Tänä vuonna" + +msgid "No date" +msgstr "Ei päivämäärää" + +msgid "Has date" +msgstr "On päivämäärä" + +msgid "Empty" +msgstr "Tyhjä" + +msgid "Not empty" +msgstr "Ei tyhjä" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ole hyvä ja syötä henkilökuntatilin %(username)s ja salasana. Huomaa että " +"kummassakin kentässä isoilla ja pienillä kirjaimilla saattaa olla merkitystä." + +msgid "Action:" +msgstr "Toiminto:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Lisää toinen %(verbose_name)s" + +msgid "Remove" +msgstr "Poista" + +msgid "Addition" +msgstr "Lisäys" + +msgid "Change" +msgstr "Muokkaa" + +msgid "Deletion" +msgstr "Poisto" + +msgid "action time" +msgstr "tapahtumahetki" + +msgid "user" +msgstr "käyttäjä" + +msgid "content type" +msgstr "sisältötyyppi" + +msgid "object id" +msgstr "kohteen tunniste" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "kohteen tiedot" + +msgid "action flag" +msgstr "tapahtumatyyppi" + +msgid "change message" +msgstr "selitys" + +msgid "log entry" +msgstr "lokimerkintä" + +msgid "log entries" +msgstr "lokimerkinnät" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Lisätty \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Muokattu \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Poistettu \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Lokimerkintätietue" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Lisätty {name} \"{object}\"." + +msgid "Added." +msgstr "Lisätty." + +msgid "and" +msgstr "ja" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Muutettu {fields} {name}-kohteelle \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Muutettu {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Poistettu {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ei muutoksia kenttiin." + +msgid "None" +msgstr "Ei arvoa" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +" Pidä \"Ctrl\" (tai Macin \"Command\") pohjassa valitaksesi useita " +"vaihtoehtoja." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" on lisätty." + +msgid "You may edit it again below." +msgstr "Voit muokata sitä jälleen alla." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "{name} \"{obj}\" on lisätty. Voit lisätä toisen {name}-kohteen alla." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" on muokattu. Voit muokata sitä edelleen alla." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" on lisätty. Voit muokata sitä edelleen alla." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" on muokattu. Voit lisätä toisen {name}-kohteen alla." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" on muokattu." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Kohteiden täytyy olla valittuna, jotta niihin voi kohdistaa toimintoja. " +"Kohteita ei ole muutettu." + +msgid "No action selected." +msgstr "Ei toimintoa valittuna." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\" on poistettu." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s tunnisteella \"%(key)s\" puuttuu. Se on voitu poistaa." + +#, python-format +msgid "Add %s" +msgstr "Lisää %s" + +#, python-format +msgid "Change %s" +msgstr "Muokkaa %s" + +#, python-format +msgid "View %s" +msgstr "Näytä %s" + +msgid "Database error" +msgstr "Tietokantavirhe" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s on muokattu." +msgstr[1] "%(count)s \"%(name)s\"-kohdetta on muokattu." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valittu" +msgstr[1] "Kaikki %(total_count)s valittu" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 valittuna %(cnt)s mahdollisesta" + +#, python-format +msgid "Change history: %s" +msgstr "Muokkaushistoria: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s poistaminen vaatisi myös seuraavien suojattujen " +"liittyvien kohteiden poiston: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django-sivuston ylläpito" + +msgid "Django administration" +msgstr "Djangon ylläpito" + +msgid "Site administration" +msgstr "Sivuston ylläpito" + +msgid "Log in" +msgstr "Kirjaudu sisään" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-ylläpito" + +msgid "Page not found" +msgstr "Sivua ei löydy" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Pahoittelemme, pyydettyä sivua ei löytynyt." + +msgid "Home" +msgstr "Etusivu" + +msgid "Server error" +msgstr "Palvelinvirhe" + +msgid "Server error (500)" +msgstr "Palvelinvirhe (500)" + +msgid "Server Error (500)" +msgstr "Palvelinvirhe (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Sattui virhe. Virheestä on huomautettu sivuston ylläpitäjille sähköpostitse " +"ja se korjautunee piakkoin. Kiitos kärsivällisyydestä." + +msgid "Run the selected action" +msgstr "Suorita valittu toiminto" + +msgid "Go" +msgstr "Suorita" + +msgid "Click here to select the objects across all pages" +msgstr "Klikkaa tästä valitaksesi kohteet kaikilta sivuilta" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Valitse kaikki %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Tyhjennä valinta" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s -applikaation mallit" + +msgid "Add" +msgstr "Lisää" + +msgid "View" +msgstr "Näytä" + +msgid "You don’t have permission to view or edit anything." +msgstr "Sinulla ei ole oikeutta näyttää tai muokata mitään." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Syötä ensin käyttäjätunnus ja salasana. Sen jälkeen voit muokata muita " +"käyttäjän tietoja." + +msgid "Enter a username and password." +msgstr "Syötä käyttäjätunnus ja salasana." + +msgid "Change password" +msgstr "Vaihda salasana" + +msgid "Please correct the error below." +msgstr "Korjaa alla oleva virhe." + +msgid "Please correct the errors below." +msgstr "Korjaa alla olevat virheet." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Syötä käyttäjän %(username)s uusi salasana." + +msgid "Welcome," +msgstr "Tervetuloa," + +msgid "View site" +msgstr "Näytä sivusto" + +msgid "Documentation" +msgstr "Ohjeita" + +msgid "Log out" +msgstr "Kirjaudu ulos" + +#, python-format +msgid "Add %(name)s" +msgstr "Lisää %(name)s" + +msgid "History" +msgstr "Muokkaushistoria" + +msgid "View on site" +msgstr "Näytä lopputulos" + +msgid "Filter" +msgstr "Suodatin" + +msgid "Clear all filters" +msgstr "Tyhjennä kaikki suodattimet" + +msgid "Remove from sorting" +msgstr "Poista järjestämisestä" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Järjestysprioriteetti: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Kytke järjestäminen" + +msgid "Delete" +msgstr "Poista" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Kohteen '%(escaped_object)s' (%(object_name)s) poisto poistaisi myös siihen " +"liittyviä kohteita, mutta sinulla ei ole oikeutta näiden kohteiden " +"poistamiseen:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s': poistettaessa joudutaan poistamaan " +"myös seuraavat suojatut siihen liittyvät kohteet:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Haluatko varmasti poistaa kohteen \"%(escaped_object)s\" (%(object_name)s)? " +"Myös seuraavat kohteet poistettaisiin samalla:" + +msgid "Objects" +msgstr "Kohteet" + +msgid "Yes, I’m sure" +msgstr "Kyllä, olen varma" + +msgid "No, take me back" +msgstr "Ei, mennään takaisin" + +msgid "Delete multiple objects" +msgstr "Poista useita kohteita" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Jos valitut %(objects_name)s poistettaisiin, jouduttaisiin poistamaan niihin " +"liittyviä kohteita. Sinulla ei kuitenkaan ole oikeutta poistaa seuraavia " +"kohdetyyppejä:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Jos valitut %(objects_name)s poistetaan, pitää poistaa myös seuraavat " +"suojatut niihin liittyvät kohteet:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Haluatko varmasti poistaa valitut %(objects_name)s? Samalla poistetaan " +"kaikki alla mainitut ja niihin liittyvät kohteet:" + +msgid "Delete?" +msgstr "Poista?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Yhteenveto" + +msgid "Recent actions" +msgstr "Viimeisimmät tapahtumat" + +msgid "My actions" +msgstr "Omat tapahtumat" + +msgid "None available" +msgstr "Ei yhtään" + +msgid "Unknown content" +msgstr "Tuntematon sisältö" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Tietokanta-asennuksessa on jotain vialla. Varmista, että sopivat taulut on " +"luotu ja että oikea käyttäjä voi lukea tietokantaa." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Olet kirjautunut käyttäjänä %(username)s, mutta sinulla ei ole pääsyä tälle " +"sivulle. Haluaisitko kirjautua eri tilille?" + +msgid "Forgotten your password or username?" +msgstr "Unohditko salasanasi tai käyttäjätunnuksesi?" + +msgid "Toggle navigation" +msgstr "Kytke navigaatio" + +msgid "Start typing to filter…" +msgstr "Kirjoita suodattaaksesi..." + +msgid "Filter navigation items" +msgstr "Suodata navigaatiovaihtoehtoja" + +msgid "Date/time" +msgstr "Pvm/klo" + +msgid "User" +msgstr "Käyttäjä" + +msgid "Action" +msgstr "Tapahtuma" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Tällä kohteella ei ole muutoshistoriaa. Sitä ei ole ilmeisesti lisätty tämän " +"ylläpitosivun avulla." + +msgid "Show all" +msgstr "Näytä kaikki" + +msgid "Save" +msgstr "Tallenna ja poistu" + +msgid "Popup closing…" +msgstr "Ponnahdusikkuna sulkeutuu..." + +msgid "Search" +msgstr "Haku" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s osuma" +msgstr[1] "%(counter)s osumaa" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "yhteensä %(full_result_count)s" + +msgid "Save as new" +msgstr "Tallenna uutena" + +msgid "Save and add another" +msgstr "Tallenna ja lisää toinen" + +msgid "Save and continue editing" +msgstr "Tallenna välillä ja jatka muokkaamista" + +msgid "Save and view" +msgstr "Tallenna ja näytä" + +msgid "Close" +msgstr "Sulje" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Muuta valittuja %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Lisää toinen %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Poista valitut %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Kiitos sivuillamme viettämästäsi ajasta." + +msgid "Log in again" +msgstr "Kirjaudu uudelleen sisään" + +msgid "Password change" +msgstr "Salasanan vaihtaminen" + +msgid "Your password was changed." +msgstr "Salasanasi on vaihdettu." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Syötä vanha salasanasi varmistukseksi, ja syötä sitten uusi salasanasi kaksi " +"kertaa, jotta se tulee varmasti oikein." + +msgid "Change my password" +msgstr "Vaihda salasana" + +msgid "Password reset" +msgstr "Salasanan nollaus" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Salasanasi on asetettu. Nyt voit kirjautua sisään." + +msgid "Password reset confirmation" +msgstr "Salasanan nollauksen vahvistus" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Syötä uusi salasanasi kaksi kertaa, jotta voimme varmistaa että syötit sen " +"oikein." + +msgid "New password:" +msgstr "Uusi salasana:" + +msgid "Confirm password:" +msgstr "Varmista uusi salasana:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Salasanan nollauslinkki oli virheellinen, mahdollisesti siksi että se on jo " +"käytetty. Ole hyvä ja pyydä uusi salasanan nollaus." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Sinulle on lähetetty sähköpostitse ohjeet salasanasi asettamiseen, mikäli " +"antamallasi sähköpostiosoitteella on olemassa tili." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jos viestiä ei näy, ole hyvä ja varmista syöttäneesi oikea sähköpostiosoite " +"sekä tarkista sähköpostisi roskapostikansio." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Tämä viesti on lähetetty sinulle, koska olet pyytänyt %(site_name)s -" +"sivustolla salasanan palautusta." + +msgid "Please go to the following page and choose a new password:" +msgstr "Määrittele uusi salasanasi oheisella sivulla:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Käyttäjätunnuksesi siltä varalta, että olet unohtanut sen:" + +msgid "Thanks for using our site!" +msgstr "Kiitos vierailustasi sivuillamme!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s -sivuston ylläpitäjät" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Unohditko salasanasi? Syötä sähköpostiosoitteesi alle ja lähetämme sinulle " +"ohjeet uuden salasanan asettamiseksi." + +msgid "Email address:" +msgstr "Sähköpostiosoite:" + +msgid "Reset my password" +msgstr "Nollaa salasanani" + +msgid "All dates" +msgstr "Kaikki päivät" + +#, python-format +msgid "Select %s" +msgstr "Valitse %s" + +#, python-format +msgid "Select %s to change" +msgstr "Valitse muokattava %s" + +#, python-format +msgid "Select %s to view" +msgstr "Valitse näytettävä %s" + +msgid "Date:" +msgstr "Pvm:" + +msgid "Time:" +msgstr "Klo:" + +msgid "Lookup" +msgstr "Etsi" + +msgid "Currently:" +msgstr "Tällä hetkellä:" + +msgid "Change:" +msgstr "Muokkaa:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d6a1db12971cbf9244a8e4876c5bd7c2826a7cc GIT binary patch literal 5200 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, 2011 +# Jannis Leidel , 2011 +# Jiri Grönroos , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-22 15:49+0000\n" +"Last-Translator: Jiri Grönroos \n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mahdolliset %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Tämä on lista saatavilla olevista %s. Valitse alla olevasta laatikosta " +"haluamasi ja siirrä ne valittuihin klikkamalla \"Valitse\"-nuolta " +"laatikoiden välillä." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Kirjoita tähän listaan suodattaaksesi %s-listaa." + +msgid "Filter" +msgstr "Suodatin" + +msgid "Choose all" +msgstr "Valitse kaikki" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikkaa valitaksesi kaikki %s kerralla." + +msgid "Choose" +msgstr "Valitse" + +msgid "Remove" +msgstr "Poista" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valitut %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Tämä on lista valituista %s. Voit poistaa valintoja valitsemalla ne " +"allaolevasta laatikosta ja siirtämällä ne takaisin valitsemattomiin " +"klikkamalla \"Poista\"-nuolta laatikoiden välillä." + +msgid "Remove all" +msgstr "Poista kaikki" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikkaa poistaaksesi kaikki valitut %s kerralla." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s valittuna %(cnt)s mahdollisesta" +msgstr[1] "%(sel)s valittuna %(cnt)s mahdollisesta" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Sinulla on tallentamattomia muutoksia yksittäisissä muokattavissa kentissä. " +"Jos suoritat toiminnon, tallentamattomat muutoksesi katoavat." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Olet valinnut toiminnon, mutta et ole vielä tallentanut muutoksiasi " +"yksittäisiin kenttiin. Paina OK tallentaaksesi. Sinun pitää suorittaa " +"toiminto uudelleen." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Olet valinnut toiminnon etkä ole tehnyt yhtään muutosta yksittäisissä " +"kentissä. Etsit todennäköisesti Suorita-painiketta Tallenna-painikkeen " +"sijaan." + +msgid "Now" +msgstr "Nyt" + +msgid "Midnight" +msgstr "24" + +msgid "6 a.m." +msgstr "06" + +msgid "Noon" +msgstr "12" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Huom: Olet %s tunnin palvelinaikaa edellä." +msgstr[1] "Huom: Olet %s tuntia palvelinaikaa edellä." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Huom: Olet %s tunnin palvelinaikaa jäljessä." +msgstr[1] "Huom: Olet %s tuntia palvelinaikaa jäljessä." + +msgid "Choose a Time" +msgstr "Valitse kellonaika" + +msgid "Choose a time" +msgstr "Valitse kellonaika" + +msgid "Cancel" +msgstr "Peruuta" + +msgid "Today" +msgstr "Tänään" + +msgid "Choose a Date" +msgstr "Valitse päivämäärä" + +msgid "Yesterday" +msgstr "Eilen" + +msgid "Tomorrow" +msgstr "Huomenna" + +msgid "January" +msgstr "tammikuu" + +msgid "February" +msgstr "helmikuu" + +msgid "March" +msgstr "maaliskuu" + +msgid "April" +msgstr "huhtikuu" + +msgid "May" +msgstr "toukokuu" + +msgid "June" +msgstr "kesäkuu" + +msgid "July" +msgstr "heinäkuu" + +msgid "August" +msgstr "elokuu" + +msgid "September" +msgstr "syyskuu" + +msgid "October" +msgstr "lokakuu" + +msgid "November" +msgstr "marraskuu" + +msgid "December" +msgstr "joulukuu" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Tammi" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Helmi" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Maalis" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Huhti" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Touko" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Kesä" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Heinä" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Elo" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Syys" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Loka" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Marras" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Joulu" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Su" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Ma" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ti" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ke" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "To" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pe" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "La" + +msgid "Show" +msgstr "Näytä" + +msgid "Hide" +msgstr "Piilota" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c701c72e76ab967526306c9fe0e93763a69be9ef GIT binary patch literal 18497 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..22347107f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,744 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bruno Brouard , 2021 +# Claude Paroz , 2013-2021 +# Claude Paroz , 2011,2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-09 07:39+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Supprimer les %(verbose_name_plural)s sélectionnés" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "La suppression de %(count)d %(items)s a réussi." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Impossible de supprimer %(name)s" + +msgid "Are you sure?" +msgstr "Êtes-vous sûr ?" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "Tout" + +msgid "Yes" +msgstr "Oui" + +msgid "No" +msgstr "Non" + +msgid "Unknown" +msgstr "Inconnu" + +msgid "Any date" +msgstr "Toutes les dates" + +msgid "Today" +msgstr "Aujourd’hui" + +msgid "Past 7 days" +msgstr "Les 7 derniers jours" + +msgid "This month" +msgstr "Ce mois-ci" + +msgid "This year" +msgstr "Cette année" + +msgid "No date" +msgstr "Aucune date" + +msgid "Has date" +msgstr "Possède une date" + +msgid "Empty" +msgstr "Vide" + +msgid "Not empty" +msgstr "Non vide" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Veuillez compléter correctement les champs « %(username)s » et « mot de " +"passe » d'un compte autorisé. Sachez que les deux champs peuvent être " +"sensibles à la casse." + +msgid "Action:" +msgstr "Action :" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ajouter un objet %(verbose_name)s supplémentaire" + +msgid "Remove" +msgstr "Enlever" + +msgid "Addition" +msgstr "Ajout" + +msgid "Change" +msgstr "Modification" + +msgid "Deletion" +msgstr "Suppression" + +msgid "action time" +msgstr "date de l’action" + +msgid "user" +msgstr "utilisateur" + +msgid "content type" +msgstr "type de contenu" + +msgid "object id" +msgstr "id de l’objet" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "représentation de l’objet" + +msgid "action flag" +msgstr "indicateur de l’action" + +msgid "change message" +msgstr "message de modification" + +msgid "log entry" +msgstr "entrée d’historique" + +msgid "log entries" +msgstr "entrées d’historique" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Ajout de « %(object)s »." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Modification de « %(object)s » — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Suppression de « %(object)s »." + +msgid "LogEntry Object" +msgstr "Objet de journal" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Ajout de {name} « {object} »." + +msgid "Added." +msgstr "Ajout." + +msgid "and" +msgstr "et" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Modification de {fields} pour l'objet {name} « {object} »." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modification de {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Suppression de {name} « {object} »." + +msgid "No fields changed." +msgstr "Aucun champ modifié." + +msgid "None" +msgstr "Aucun(e)" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Maintenez appuyé « Ctrl », ou « Commande (touche pomme) » sur un Mac, pour " +"en sélectionner plusieurs." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "L'objet {name} « {obj} » a été ajouté avec succès." + +msgid "You may edit it again below." +msgstr "Vous pouvez l’éditer à nouveau ci-dessous." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"L’objet {name} « {obj} » a été ajouté avec succès. Vous pouvez ajouter un " +"autre objet « {name} » ci-dessous." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"L’objet {name} « {obj} » a été modifié avec succès. Vous pouvez l’éditer à " +"nouveau ci-dessous." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"L’objet {name} « {obj} » a été ajouté avec succès. Vous pouvez l’éditer à " +"nouveau ci-dessous." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"L’objet {name} « {obj} » a été modifié avec succès. Vous pouvez ajouter un " +"autre objet {name} ci-dessous." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "L’objet {name} « {obj} » a été modifié avec succès." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Des éléments doivent être sélectionnés afin d’appliquer les actions. Aucun " +"élément n’a été modifié." + +msgid "No action selected." +msgstr "Aucune action sélectionnée." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "L’objet %(name)s « %(obj)s » a été supprimé avec succès." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s avec l’identifiant « %(key)s » n’existe pas. Peut-être a-t-il été " +"supprimé ?" + +#, python-format +msgid "Add %s" +msgstr "Ajout de %s" + +#, python-format +msgid "Change %s" +msgstr "Modification de %s" + +#, python-format +msgid "View %s" +msgstr "Affichage de %s" + +msgid "Database error" +msgstr "Erreur de base de données" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s objet %(name)s a été modifié avec succès." +msgstr[1] "%(count)s objets %(name)s ont été modifiés avec succès." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s sélectionné" +msgstr[1] "Tous les %(total_count)s sélectionnés" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 sur %(cnt)s sélectionné" + +#, python-format +msgid "Change history: %s" +msgstr "Historique des changements : %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Supprimer l’objet %(class_name)s « %(instance)s » provoquerait la " +"suppression des objets liés et protégés suivants : %(related_objects)s" + +msgid "Django site admin" +msgstr "Site d’administration de Django" + +msgid "Django administration" +msgstr "Administration de Django" + +msgid "Site administration" +msgstr "Site d’administration" + +msgid "Log in" +msgstr "Connexion" + +#, python-format +msgid "%(app)s administration" +msgstr "Administration de %(app)s" + +msgid "Page not found" +msgstr "Page non trouvée" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Nous sommes désolés, mais la page demandée est introuvable." + +msgid "Home" +msgstr "Accueil" + +msgid "Server error" +msgstr "Erreur du serveur" + +msgid "Server error (500)" +msgstr "Erreur du serveur (500)" + +msgid "Server Error (500)" +msgstr "Erreur du serveur (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Une erreur est survenue. Elle a été transmise par courriel aux " +"administrateurs du site et sera corrigée dans les meilleurs délais. Merci " +"pour votre patience." + +msgid "Run the selected action" +msgstr "Exécuter l’action sélectionnée" + +msgid "Go" +msgstr "Envoyer" + +msgid "Click here to select the objects across all pages" +msgstr "Cliquez ici pour sélectionner tous les objets sur l’ensemble des pages" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Sélectionner tous les %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Effacer la sélection" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modèles de l’application %(name)s" + +msgid "Add" +msgstr "Ajouter" + +msgid "View" +msgstr "Afficher" + +msgid "You don’t have permission to view or edit anything." +msgstr "Vous n’avez pas la permission de voir ou de modifier quoi que ce soit." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Saisissez tout d’abord un nom d’utilisateur et un mot de passe. Vous pourrez " +"ensuite modifier plus d’options." + +msgid "Enter a username and password." +msgstr "Saisissez un nom d’utilisateur et un mot de passe." + +msgid "Change password" +msgstr "Modifier le mot de passe" + +msgid "Please correct the error below." +msgstr "Corrigez l’erreur ci-dessous." + +msgid "Please correct the errors below." +msgstr "Corrigez les erreurs ci-dessous." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Saisissez un nouveau mot de passe pour l’utilisateur %(username)s." + +msgid "Welcome," +msgstr "Bienvenue," + +msgid "View site" +msgstr "Voir le site" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Déconnexion" + +#, python-format +msgid "Add %(name)s" +msgstr "Ajouter %(name)s" + +msgid "History" +msgstr "Historique" + +msgid "View on site" +msgstr "Voir sur le site" + +msgid "Filter" +msgstr "Filtre" + +msgid "Clear all filters" +msgstr "Effacer tous les filtres" + +msgid "Remove from sorting" +msgstr "Enlever du tri" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Priorité de tri : %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Inverser le tri" + +msgid "Delete" +msgstr "Supprimer" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Supprimer l’objet %(object_name)s « %(escaped_object)s » provoquerait la " +"suppression des objets qui lui sont liés, mais votre compte ne possède pas " +"la permission de supprimer les types d’objets suivants :" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Supprimer l’objet %(object_name)s « %(escaped_object)s » provoquerait la " +"suppression des objets liés et protégés suivants :" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Voulez-vous vraiment supprimer l’objet %(object_name)s " +"« %(escaped_object)s » ? Les éléments suivants sont liés à celui-ci et " +"seront aussi supprimés :" + +msgid "Objects" +msgstr "Objets" + +msgid "Yes, I’m sure" +msgstr "Oui, je suis sûr" + +msgid "No, take me back" +msgstr "Non, revenir à la page précédente" + +msgid "Delete multiple objects" +msgstr "Supprimer plusieurs objets" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"La suppression des objets %(objects_name)s sélectionnés provoquerait la " +"suppression d’objets liés, mais votre compte n’est pas autorisé à supprimer " +"les types d’objet suivants :" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"La suppression des objets %(objects_name)s sélectionnés provoquerait la " +"suppression des objets liés et protégés suivants :" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Voulez-vous vraiment supprimer les objets %(objects_name)s sélectionnés ? " +"Tous les objets suivants et les éléments liés seront supprimés :" + +msgid "Delete?" +msgstr "Supprimer ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Par %(filter_title)s " + +msgid "Summary" +msgstr "Résumé" + +msgid "Recent actions" +msgstr "Actions récentes" + +msgid "My actions" +msgstr "Mes actions" + +msgid "None available" +msgstr "Aucun(e) disponible" + +msgid "Unknown content" +msgstr "Contenu inconnu" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"L’installation de votre base de données est incorrecte. Vérifiez que les " +"tables utiles ont été créées, et que la base est accessible par " +"l’utilisateur concerné." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Vous êtes authentifié sous le nom %(username)s, mais vous n’êtes pas " +"autorisé à accéder à cette page. Souhaitez-vous vous connecter avec un autre " +"compte utilisateur ?" + +msgid "Forgotten your password or username?" +msgstr "Mot de passe ou nom d’utilisateur oublié ?" + +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +msgid "Start typing to filter…" +msgstr "Écrivez ici pour filtrer…" + +msgid "Filter navigation items" +msgstr "Filtrer les éléments de navigation" + +msgid "Date/time" +msgstr "Date/heure" + +msgid "User" +msgstr "Utilisateur" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Cet objet n’a pas d’historique de modification. Il n’a probablement pas été " +"ajouté au moyen de ce site d’administration." + +msgid "Show all" +msgstr "Tout afficher" + +msgid "Save" +msgstr "Enregistrer" + +msgid "Popup closing…" +msgstr "Fenêtre en cours de fermeture…" + +msgid "Search" +msgstr "Rechercher" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s résultat" +msgstr[1] "%(counter)s résultats" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s résultats" + +msgid "Save as new" +msgstr "Enregistrer en tant que nouveau" + +msgid "Save and add another" +msgstr "Enregistrer et ajouter un nouveau" + +msgid "Save and continue editing" +msgstr "Enregistrer et continuer les modifications" + +msgid "Save and view" +msgstr "Enregistrer et afficher" + +msgid "Close" +msgstr "Fermer" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Modifier l’objet %(model)s sélectionné" + +#, python-format +msgid "Add another %(model)s" +msgstr "Ajouter un autre objet %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Supprimer l’objet %(model)s sélectionné" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Merci pour le temps que vous avez accordé à ce site aujourd’hui." + +msgid "Log in again" +msgstr "Connectez-vous à nouveau" + +msgid "Password change" +msgstr "Modification du mot de passe" + +msgid "Your password was changed." +msgstr "Votre mot de passe a été modifié." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Pour des raisons de sécurité, saisissez votre ancien mot de passe puis votre " +"nouveau mot de passe à deux reprises afin de vérifier qu’il est correctement " +"saisi." + +msgid "Change my password" +msgstr "Modifier mon mot de passe" + +msgid "Password reset" +msgstr "Réinitialisation du mot de passe" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Votre mot de passe a été défini. Vous pouvez maintenant vous authentifier." + +msgid "Password reset confirmation" +msgstr "Confirmation de mise à jour du mot de passe" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Saisissez deux fois votre nouveau mot de passe afin de vérifier qu’il est " +"correctement saisi." + +msgid "New password:" +msgstr "Nouveau mot de passe :" + +msgid "Confirm password:" +msgstr "Confirmation du mot de passe :" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Le lien de mise à jour du mot de passe n’était pas valide, probablement en " +"raison de sa précédente utilisation. Veuillez renouveler votre demande de " +"mise à jour de mot de passe." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Nous vous avons envoyé par courriel les instructions pour changer de mot de " +"passe, pour autant qu’un compte existe avec l’adresse que vous avez " +"indiquée. Vous devriez recevoir rapidement ce message." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si vous ne recevez pas de message, vérifiez que vous avez saisi l’adresse " +"avec laquelle vous vous êtes enregistré et contrôlez votre dossier de " +"pourriels." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vous recevez ce message en réponse à votre demande de réinitialisation du " +"mot de passe de votre compte sur %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Veuillez vous rendre sur cette page et choisir un nouveau mot de passe :" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Votre nom d’utilisateur, en cas d’oubli :" + +msgid "Thanks for using our site!" +msgstr "Merci d’utiliser notre site !" + +#, python-format +msgid "The %(site_name)s team" +msgstr "L’équipe %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Mot de passe perdu ? Saisissez votre adresse électronique ci-dessous et nous " +"vous enverrons les instructions pour en créer un nouveau." + +msgid "Email address:" +msgstr "Adresse électronique :" + +msgid "Reset my password" +msgstr "Réinitialiser mon mot de passe" + +msgid "All dates" +msgstr "Toutes les dates" + +#, python-format +msgid "Select %s" +msgstr "Sélectionnez %s" + +#, python-format +msgid "Select %s to change" +msgstr "Sélectionnez l’objet %s à changer" + +#, python-format +msgid "Select %s to view" +msgstr "Sélectionnez l’objet %s à afficher" + +msgid "Date:" +msgstr "Date :" + +msgid "Time:" +msgstr "Heure :" + +msgid "Lookup" +msgstr "Recherche" + +msgid "Currently:" +msgstr "Actuellement :" + +msgid "Change:" +msgstr "Modifier :" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e4d5c35ffc3f2d3a00057924d436080da626288 GIT binary patch literal 5324 zcmb`LTWlOx8GsM4KybOHrQBLLgr>1+c716Y!lnr^P8?$DB*fd4AVAE{ob`@7JF}h3 z+8Y5%c?qbZ&O=5;_&WGA%jY3K^(&kIEqo*S z-`o73E&mGNMETz=|8034gN;!BF8Bs`3w$4}z+2&QxD95OUxfVBd0ryggYfn65u5*x zLPp%d+vAVaH*P~>Z4Qb)Yf#4hjHR(`S!Ph=`-0_{pzP;)DEs(;Eq@q(p8Pj0Z$M}n{~?IV)wiL{ zbJ6mLP~`jxlzm)-(*8H_S@;L|4E#EaL&fUo_F}#TI7j|dP~^G@pMaO(CHM&z{UH1o z6geM2`O@xdmXBIK2BrRS%kNu0VR^~&N0v`pK4bYTWE<6Umd{(RS^m=UiscKIzqX{S z8k3iOL>D{k_aqdV#SY(3+C@SgY7gmVQib#ZlAQm8B(cXbN%Sm_*n`-rJhzalq*0RC zr#zz1{&UEF$R5aZTY=nGwfz=|54)X&8&i8p`$)2%{fBK=A12A!yweu4B?_}sJ8k{| zyo2;!o0oHmI`Vyxq7RZjLYk5ckJy(y;wR-9Cy6iEO}dpN_A)_|^C><~91Q!<0`7jGG!yy;R*^?NnM7wO6+V)9u&~)O5C(C8?V3IDX*N1EY5)YQ_m& z6R4SH6eY$&JNmGb4&-WnYao{n=7PL$V#0i|z<2M}X{6nJIPC-h#o9@A#4Hsx)31+B zE9#iMo~A|bjb?|9Yg%;^t65WzGbiqNyA#xPc*-@X>{NxXu6@Dfeo(Y>u)*T z{+=XJ%jkO7T9F?vO4pY5!+eN(w8A=qXjwZfg_=;ivT3%R-ccCJ4m29msBY3_LmQbr zU5+%}O;XuXsP%o`kjPrW|0q$RqL-5>@-UBD)QUuIRqM75OU6=D(VwiE??!HA+KZNp z6>X_cb;cyvq6{aN)pW4q{)t3s+Hq4q3U}xF>)Hn4U(P+2>XzeS@}ca66D}IgbchU| z-|@Z737FjkUXp8v<``@{j_MrKt`4Fo-+)GhwW8^xC^}11y2lQADP&@)SrBQ8y2?w7 zMM{!!7 zPZoWz{LySNDc7Q^9yxiUe9CluXkDLs$*a^zBQQS(Z zI&A0J1nVJ3Z&hLrbQ$(mU%o}6_Esk*)Z{*SPj~Xz zBkEmF6?d@bC+#To2|q@YF*O~AS-?HVwZc}dQ**6r&&D89kry;g7UyxuP)RMqnQ_0Y zkFcUW-0Rv?YZsVs?Xtuj_hsg+ZWqoiZ-{To670O+ZtcR_WzAJ4GbaY2bky#x;$T^H z9=U9cV8X!Uk;8v8!r|VkL^Uj6wzrB(ShPenF`Rc229G7O=}7rphW9e5FqGgX;pG$C zgqfd8h~wwc%G!mh4tC`_(Oy=B9c)=UW}@DcSa2s|bZr|H@sB95h;?3RZ*F%9tEBtj z_#3lsAri9eB>37q`77z2PcHrqEus=RCr+3a!4gGBihbdl#~$n^_2VU~ryC95<+@Ze z#`QI~c)r(i$zy9~lO1drDHrl-*=9_qg9S-ER2Z6kiuEKLM*~?f+7PR9^jYzuu3u*0 zg#NpAJ0sAL?qZA5QqC6*8$s_$q{^+;o&sx%vU@UvXR?)iJeI#MIz6|PypV3xj9o2w z-)#Tyf@`aIjv6c6O6=)uiKFN3YG%GVY+7uc>V3tHeNkzyF<0)JLTULSl~9bMAqv`Z znS&d|KMUB@e3uA8&JONKZ#CcJeoSUkjF!y|cjXNmj-P5LbLGglaGjV(e%$k|5sSd# zw%UC~is_K>B1K$gTC9}~B6`du7CRDlqAnscNl13EA~uUy8SANBlbGly*(7M&5z}!a z48nwVFqY<;I7O9xIqe#Ht4Q4Ucw%IPXSq(-yCO$n)Sl_YEC`R`wA;ClMB}^qVcLd9 zMHhn#LW8U@aX1o-PVDtosh63C1?sKZ5DtkJ{9;L5e=c*1&imWqUNwA&J5cv7i7B;- zwTTW0;yOe?+#-tkT-CsdDgpqtgh?$CG_?qjP@D>hdm, 2014-2017,2020-2021 +# Claude Paroz , 2011-2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 14:34+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponible(s)" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ceci est une liste des « %s » disponibles. Vous pouvez en choisir en les " +"sélectionnant dans la zone ci-dessous, puis en cliquant sur la flèche " +"« Choisir » entre les deux zones." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Écrivez dans cette zone pour filtrer la liste des « %s » disponibles." + +msgid "Filter" +msgstr "Filtrer" + +msgid "Choose all" +msgstr "Tout choisir" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Cliquez pour choisir tous les « %s » en une seule opération." + +msgid "Choose" +msgstr "Choisir" + +msgid "Remove" +msgstr "Enlever" + +#, javascript-format +msgid "Chosen %s" +msgstr "Choix des « %s »" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ceci est la liste des « %s » choisi(e)s. Vous pouvez en enlever en les " +"sélectionnant dans la zone ci-dessous, puis en cliquant sur la flèche « " +"Enlever » entre les deux zones." + +msgid "Remove all" +msgstr "Tout enlever" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Cliquez pour enlever tous les « %s » en une seule opération." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s sur %(cnt)s sélectionné" +msgstr[1] "%(sel)s sur %(cnt)s sélectionnés" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Vous avez des modifications non sauvegardées sur certains champs éditables. " +"Si vous lancez une action, ces modifications vont être perdues." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Vous avez sélectionné une action, mais vous n'avez pas encore enregistré " +"certains champs modifiés. Cliquez sur OK pour enregistrer. Vous devrez " +"réappliquer l'action." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Vous avez sélectionné une action, et vous n'avez fait aucune modification " +"sur des champs. Vous cherchez probablement le bouton Envoyer et non le " +"bouton Enregistrer." + +msgid "Now" +msgstr "Maintenant" + +msgid "Midnight" +msgstr "Minuit" + +msgid "6 a.m." +msgstr "6:00" + +msgid "Noon" +msgstr "Midi" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Note : l'heure du serveur précède votre heure de %s heure." +msgstr[1] "Note : l'heure du serveur précède votre heure de %s heures." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Note : votre heure précède l'heure du serveur de %s heure." +msgstr[1] "Note : votre heure précède l'heure du serveur de %s heures." + +msgid "Choose a Time" +msgstr "Choisir une heure" + +msgid "Choose a time" +msgstr "Choisir une heure" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Today" +msgstr "Aujourd'hui" + +msgid "Choose a Date" +msgstr "Choisir une date" + +msgid "Yesterday" +msgstr "Hier" + +msgid "Tomorrow" +msgstr "Demain" + +msgid "January" +msgstr "Janvier" + +msgid "February" +msgstr "Février" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Avril" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juin" + +msgid "July" +msgstr "Juillet" + +msgid "August" +msgstr "Août" + +msgid "September" +msgstr "Septembre" + +msgid "October" +msgstr "Octobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Décembre" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "fév" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "avr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "jui" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "aoû" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "oct" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "déc" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Afficher" + +msgid "Hide" +msgstr "Masquer" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdea1d8a470a81eee89bd56a68dfdceacb631dfa GIT binary patch literal 476 zcmZ8d%Sr<=6jgLJOV=*0;KHJ55=AVg^X|c$t>)5$7MyAP-q}G0jKj4S?E#7IR z1rHpOL(YAi{OoLhZ4fqzyTpCs7V(JKASHg&;~AZeXN8e>?>LU^E@#i^gK<_t{;qB5 zl1Hqak8Bu9le4R78Cd2NB%_CnU3=7#yzE9tRB$ZhDHD>(4oIm)=TJx?$jBb?!!$kr z`%)08I+2HhkPLK)Ec4oiN=N4v+-qx1fB~8uD>$cZNM2S8**3Ot7gS@*sVUgizF=F6D8`fJ6DId3JyyW#EnCuCbB z*Um8pvWl@%28WK>PP du2|psNl;+xg$%vpE-bIT0}FdSkgaaA@e9v~jIsa# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..52310d3d4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,609 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:31+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Any date" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "" + +msgid "This year" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "object id" +msgstr "" + +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-format +msgid "Changed %s." +msgstr "" + +msgid "and" +msgstr "" + +#, python-format +msgid "Added %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed %(list)s for %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Deleted %(name)s \"%(object)s\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may edit it again " +"below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Log out" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent Actions" +msgstr "" + +msgid "My Actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +msgid "(None)" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "" + +msgid "Time:" +msgstr "" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..ba09badf8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po @@ -0,0 +1,145 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8c029af57b53832163a22c957cdb819f8fad363d GIT binary patch literal 15075 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

      f+zGRaL6 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..06e63dc49 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,639 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "ಖಚಿತಪಡಿಸುವಿರಾ? " + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "ಎಲ್ಲಾ" + +msgid "Yes" +msgstr "ಹೌದು" + +msgid "No" +msgstr "ಇಲ್ಲ" + +msgid "Unknown" +msgstr "ಗೊತ್ತಿಲ್ಲ(ದ/ದ್ದು)" + +msgid "Any date" +msgstr "ಯಾವುದೇ ದಿನಾಂಕ" + +msgid "Today" +msgstr "ಈದಿನ" + +msgid "Past 7 days" +msgstr "ಕಳೆದ ೭ ದಿನಗಳು" + +msgid "This month" +msgstr "ಈ ತಿಂಗಳು" + +msgid "This year" +msgstr "ಈ ವರ್ಷ" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "ತೆಗೆದು ಹಾಕಿ" + +msgid "action time" +msgstr "ಕ್ರಮದ(ಕ್ರಿಯೆಯ) ಸಮಯ" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "ವಸ್ತುವಿನ ಐಡಿ" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "ವಸ್ತು ಪ್ರಾತಿನಿಧ್ಯ" + +msgid "action flag" +msgstr "ಕ್ರಮದ(ಕ್ರಿಯೆಯ) ಪತಾಕೆ" + +msgid "change message" +msgstr "ಬದಲಾವಣೆಯ ಸಂದೇಶ/ಸಂದೇಶ ಬದಲಿಸಿ" + +msgid "log entry" +msgstr "ಲಾಗ್ ದಾಖಲೆ" + +msgid "log entries" +msgstr "ಲಾಗ್ ದಾಖಲೆಗಳು" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "ಮತ್ತು" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "ಯಾವುದೇ ಅಂಶಗಳು ಬದಲಾಗಲಿಲ್ಲ." + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಯಿತು." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s ಸೇರಿಸಿ" + +#, python-format +msgid "Change %s" +msgstr "%s ಅನ್ನು ಬದಲಿಸು" + +msgid "Database error" +msgstr "ದತ್ತಸಂಚಯದ ದೋಷ" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ಜಾಂಗೋ ತಾಣದ ಆಡಳಿತಗಾರರು" + +msgid "Django administration" +msgstr "ಜಾಂಗೋ ಆಡಳಿತ" + +msgid "Site administration" +msgstr "ತಾಣ ನಿರ್ವಹಣೆ" + +msgid "Log in" +msgstr "ಒಳಗೆ ಬನ್ನಿ" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "ಪುಟ ಸಿಗಲಿಲ್ಲ" + +msgid "We're sorry, but the requested page could not be found." +msgstr "ಕ್ಷಮಿಸಿ, ನೀವು ಕೇಳಿದ ಪುಟ ಸಿಗಲಿಲ್ಲ" + +msgid "Home" +msgstr "ಪ್ರಾರಂಭಸ್ಥಳ(ಮನೆ)" + +msgid "Server error" +msgstr "ಸರ್ವರ್ ದೋಷ" + +msgid "Server error (500)" +msgstr "ಸರ್ವರ್ ದೋಷ(೫೦೦)" + +msgid "Server Error (500)" +msgstr "ಸರ್ವರ್ ದೋಷ(೫೦೦)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "ಹೋಗಿ" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"ಮೊದಲು ಬಳಕೆದಾರ-ಹೆಸರು ಮತ್ತು ಪ್ರವೇಶಪದವನ್ನು ಕೊಡಿರಿ. ನಂತರ, ನೀವು ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳನ್ನು " +"ಬದಲಿಸಬಹುದಾಗಿದೆ." + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "ಪ್ರವೇಶಪದ ಬದಲಿಸಿ" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "ಸುಸ್ವಾಗತ." + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "ವಿವರಮಾಹಿತಿ" + +msgid "Log out" +msgstr "ಹೊರಕ್ಕೆ ಹೋಗಿ" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ಸೇರಿಸಿ" + +msgid "History" +msgstr "ಚರಿತ್ರೆ" + +msgid "View on site" +msgstr "ತಾಣದಲ್ಲಿ ನೋಡಿ" + +msgid "Filter" +msgstr "ಸೋಸಕ" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "ಅಳಿಸಿಹಾಕಿ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"'%(escaped_object)s' %(object_name)s ಅನ್ನು ತೆಗೆದುಹಾಕುವುದರಿಂದ ಸಂಬಂಧಿತ ವಸ್ತುಗಳೂ " +"ಕಳೆದುಹೋಗುತ್ತವೆ. ಆದರೆ ನಿಮ್ಮ ಖಾತೆಗೆ ಕೆಳಕಂಡ ಬಗೆಗಳ ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕಲು " +"ಅನುಮತಿಯಿಲ್ಲ." + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "ಹೌದು,ನನಗೆ ಖಚಿತವಿದೆ" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "ಬದಲಿಸಿ/ಬದಲಾವಣೆ" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s ಇಂದ" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "ಸೇರಿಸಿ" + +msgid "You don't have permission to edit anything." +msgstr "ಯಾವುದನ್ನೂ ತಿದ್ದಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ ." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "ಯಾವುದೂ ಲಭ್ಯವಿಲ್ಲ" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"ಡಾಟಾಬೇಸನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡುವಾಗ ಏನೋ ತಪ್ಪಾಗಿದೆ. ಸೂಕ್ತ ಡಾಟಾಬೇಸ್ ಕೋಷ್ಟಕಗಳು ರಚನೆಯಾಗಿ ಅರ್ಹ " +"ಬಳಕೆದಾರರು ಅವುಗಳನ್ನು ಓದಬಹುದಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಾತರಿ ಪಡಿಸಿಕೊಳ್ಳಿ." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "ದಿನಾಂಕ/ಸಮಯ" + +msgid "User" +msgstr "ಬಳಕೆದಾರ" + +msgid "Action" +msgstr "ಕ್ರಮ(ಕ್ರಿಯೆ)" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"ಈ ವಸ್ತುವಿಗೆ ಬದಲಾವಣೆಯ ಇತಿಹಾಸವಿಲ್ಲ. ಅದು ಬಹುಶಃ ಈ ಆಡಳಿತತಾಣದ ಮೂಲಕ ಸೇರಿಸಲ್ಪಟ್ಟಿಲ್ಲ." + +msgid "Show all" +msgstr "ಎಲ್ಲವನ್ನೂ ತೋರಿಸು" + +msgid "Save" +msgstr "ಉಳಿಸಿ" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ಒಟ್ಟು %(full_result_count)s" + +msgid "Save as new" +msgstr "ಹೊಸದರಂತೆ ಉಳಿಸಿ" + +msgid "Save and add another" +msgstr "ಉಳಿಸಿ ಮತ್ತು ಇನ್ನೊಂದನ್ನು ಸೇರಿಸಿ" + +msgid "Save and continue editing" +msgstr "ಉಳಿಸಿ ಮತ್ತು ತಿದ್ದುವುದನ್ನು ಮುಂದುವರಿಸಿರಿ." + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ಈದಿನ ತಮ್ಮ ಅತ್ಯಮೂಲ್ಯವಾದ ಸಮಯವನ್ನು ನಮ್ಮ ತಾಣದಲ್ಲಿ ಕಳೆದುದಕ್ಕಾಗಿ ಧನ್ಯವಾದಗಳು." + +msgid "Log in again" +msgstr "ಮತ್ತೆ ಒಳಬನ್ನಿ" + +msgid "Password change" +msgstr "ಪ್ರವೇಶಪದ ಬದಲಾವಣೆ" + +msgid "Your password was changed." +msgstr "ನಿಮ್ಮ ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಲಾಗಿದೆ" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"ಭದ್ರತೆಯ ದೃಷ್ಟಿಯಿಂದ ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹಳೆಯ ಪ್ರವೇಶಪದವನ್ನು ಸೂಚಿಸಿರಿ. ಆನಂತರ ನೀವು ಸರಿಯಾಗಿ " +"ಬರೆದಿದ್ದೀರೆಂದು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಹೊಸ ಪ್ರವೇಶಪದವನ್ನು ಎರಡು ಬಾರಿ ಬರೆಯಿರಿ." + +msgid "Change my password" +msgstr "ನನ್ನ ಪ್ರವೇಶಪದ ಬದಲಿಸಿ" + +msgid "Password reset" +msgstr "ಪ್ರವೇಶಪದವನ್ನು ಬದಲಿಸುವಿಕೆ" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "ಹೊಸ ಪ್ರವೇಶಪದ:" + +msgid "Confirm password:" +msgstr "ಪ್ರವೇಶಪದವನ್ನು ಖಚಿತಪಡಿಸಿ:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "ನೀವು ಮರೆತಿದ್ದಲ್ಲಿ , ನಿಮ್ಮ ಬಳಕೆದಾರ-ಹೆಸರು" + +msgid "Thanks for using our site!" +msgstr "ನಮ್ಮ ತಾಣವನ್ನು ಬಳಸಿದ್ದಕ್ದಾಗಿ ಧನ್ಯವಾದಗಳು!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s ತಂಡ" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "ನನ್ನ ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೆ ನಿರ್ಧರಿಸಿ " + +msgid "All dates" +msgstr "ಎಲ್ಲಾ ದಿನಾಂಕಗಳು" + +#, python-format +msgid "Select %s" +msgstr "%s ಆಯ್ದುಕೊಳ್ಳಿ" + +#, python-format +msgid "Select %s to change" +msgstr "ಬದಲಾಯಿಸಲು %s ಆಯ್ದುಕೊಳ್ಳಿ" + +msgid "Date:" +msgstr "ದಿನಾಂಕ:" + +msgid "Time:" +msgstr "ಸಮಯ:" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..988728ce948e9b30ce32b6a4d3e64fdf60a452d1 GIT binary patch literal 1872 zcmaKqU1%Id9KhFFqh8f&6;!l3LIq3R`$%irZcI^QgRw~s@f3sVGB;fFNnPbk075X=;JVfFTsyt1+Kv}@OO9|K26Yr z@Em*wegt2DX;1zVntC?ii?9QW@YkMxA4=2jbI{D;C_Ds5;1KmpLSTD)0-9X+T4v7u z^%#F1>bgoqq(z|pU?K3^G8D=WQd{bLph7<> ziphDgglpW^Lh`GnL8M zmyQ;uC#TQubYCf!3*(Vam8Pnt7VV|#a$0JIGSH*uJ>o>AV;@u}+*3PtCfB@*-LtwD z`GKx`;?!J_4$AbzC0&>a+p!GYi70L+p3p5TCS#RR(fvDC9xXU|wvl&M@~o3*U**|$ zo~?_#vmvZ>CC|P_DKN_N?EAd)S)SeC8#EU;^K8vta4s9`&ZjmA5q=~N7GM+mJiBdm z1Y0Az_2FD51!)Phl)XZc zcTAYhYMx!svsGj&zKO>E!S)+l(Q;RD-KM7@ibi+Mil%`*YIJw4ZXLx{5(10~%9J?G z#DuXiQAln4celQUa, 2011 +# karthikbgl , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "ಲಭ್ಯ %s " + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ಶೋಧಕ" + +msgid "Choose all" +msgstr "ಎಲ್ಲವನ್ನೂ ಆಯ್ದುಕೊಳ್ಳಿ" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "ತೆಗೆದು ಹಾಕಿ" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ಆಯ್ದುಕೊಳ್ಳಲಾಗಿದೆ" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "ಎಲ್ಲಾ ತೆಗೆದುಹಾಕಿ" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"ನೀವು ಪ್ರತ್ಯೇಕ ತಿದ್ದಬಲ್ಲ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಬದಲಾವಣೆ ಉಳಿಸಿಲ್ಲ. ನಿಮ್ಮ ಉಳಿಸದ ಬದಲಾವಣೆಗಳು " +"ನಾಶವಾಗುತ್ತವೆ" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "ಈಗ" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ಸಮಯವೊಂದನ್ನು ಆರಿಸಿ" + +msgid "Midnight" +msgstr "ಮಧ್ಯರಾತ್ರಿ" + +msgid "6 a.m." +msgstr "ಬೆಳಗಿನ ೬ ಗಂಟೆ " + +msgid "Noon" +msgstr "ಮಧ್ಯಾಹ್ನ" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "ರದ್ದುಗೊಳಿಸಿ" + +msgid "Today" +msgstr "ಈ ದಿನ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "ನಿನ್ನೆ" + +msgid "Tomorrow" +msgstr "ನಾಳೆ" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ಪ್ರದರ್ಶನ" + +msgid "Hide" +msgstr "ಮರೆಮಾಡಲು" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..61fe9bb8097bc503e36ff94f2732cff574eaa280 GIT binary patch literal 17829 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..e41f87806 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,740 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jiyoon, Ha , 2016 +# DONGHO JEONG , 2020 +# 코딩 영, 2021 +# Geonho Kim / Leo Kim , 2019 +# Gihun Ham , 2018 +# Hang Park , 2019 +# Hoseok Lee , 2016 +# Ian Y. Choi , 2015,2019 +# Jaehong Kim , 2011 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# Le Tartuffe , 2014,2016 +# Seho Noh , 2018 +# Seacbyul Lee , 2017 +# Taesik Yoon , 2015 +# Yang Chan Woo , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-04 03:40+0000\n" +"Last-Translator: 코딩 영\n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "선택된 %(verbose_name_plural)s 을/를 삭제합니다." + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d개의 %(items)s 을/를 성공적으로 삭제하였습니다." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s를 삭제할 수 없습니다." + +msgid "Are you sure?" +msgstr "확실합니까?" + +msgid "Administration" +msgstr "관리" + +msgid "All" +msgstr "모두" + +msgid "Yes" +msgstr "예" + +msgid "No" +msgstr "아니오" + +msgid "Unknown" +msgstr "알 수 없습니다." + +msgid "Any date" +msgstr "언제나" + +msgid "Today" +msgstr "오늘" + +msgid "Past 7 days" +msgstr "지난 7일" + +msgid "This month" +msgstr "이번 달" + +msgid "This year" +msgstr "이번 해" + +msgid "No date" +msgstr "날짜 없음" + +msgid "Has date" +msgstr "날짜 있음" + +msgid "Empty" +msgstr "비어 있음" + +msgid "Not empty" +msgstr "비어 있지 않음" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"관리자 계정의 %(username)s 와 비밀번호를 입력해주세요. 대소문자를 구분해서 입" +"력해주세요." + +msgid "Action:" +msgstr "액션:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "%(verbose_name)s 더 추가하기" + +msgid "Remove" +msgstr "삭제하기" + +msgid "Addition" +msgstr "추가" + +msgid "Change" +msgstr "변경" + +msgid "Deletion" +msgstr "삭제" + +msgid "action time" +msgstr "액션 타임" + +msgid "user" +msgstr "사용자" + +msgid "content type" +msgstr "콘텐츠 타입" + +msgid "object id" +msgstr "오브젝트 아이디" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "오브젝트 표현" + +msgid "action flag" +msgstr "액션 플래그" + +msgid "change message" +msgstr "메시지 변경" + +msgid "log entry" +msgstr "로그 엔트리" + +msgid "log entries" +msgstr "로그 엔트리" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\"이/가 추가되었습니다." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "\"%(object)s\"이/가 \"%(changes)s\"(으)로 변경되었습니다." + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "%(object)s를 삭제했습니다." + +msgid "LogEntry Object" +msgstr "로그 엔트리 객체" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}개체”를 추가했습니다." + +msgid "Added." +msgstr "추가되었습니다." + +msgid "and" +msgstr "또한" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} “{object}개체”의 {fields}필드를 변경했습니다." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields}가 변경되었습니다." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}개체”를 삭제했습니다." + +msgid "No fields changed." +msgstr "변경된 필드가 없습니다." + +msgid "None" +msgstr "없음" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"하나 이상을 선택하려면 \"Control\" 키를 누른 채로 선택해주세요. Mac의 경우에" +"는 \"Command\" 키를 눌러주세요." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\"가 성공적으로 추가되었습니다." + +msgid "You may edit it again below." +msgstr "아래 내용을 수정해야 합니다." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} \"{obj}\"가 성공적으로 추가되었습니다. 아래에서 다른 {name}을 추가할 " +"수 있습니다." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\"가 성공적으로 변경되었습니다. 아래에서 다시 수정할 수 있습니" +"다." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\"가 성공적으로 추가되었습니다. 아래에서 다시 수정할 수 있습니" +"다." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\"가 성공적으로 변경되었습니다. 아래에서 다른 {name}을 추가할 " +"수 있습니다." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\"가 성공적으로 변경되었습니다." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"항목들에 액션을 적용하기 위해선 먼저 항목들이 선택되어 있어야 합니다. 아무 항" +"목도 변경되지 않았습니다." + +msgid "No action selected." +msgstr "액션이 선택되지 않았습니다." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\"이/가 성공적으로 삭제되었습니다." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"ID \"%(key)s\"을/를 지닌%(name)s이/가 존재하지 않습니다. 삭제된 값이 아닌지 " +"확인해주세요." + +#, python-format +msgid "Add %s" +msgstr "%s 추가" + +#, python-format +msgid "Change %s" +msgstr "%s 변경" + +#, python-format +msgid "View %s" +msgstr "뷰 %s" + +msgid "Database error" +msgstr "데이터베이스 오류" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s개의 %(name)s이/가 변경되었습니다." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "총 %(total_count)s개가 선택되었습니다." + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s 중 아무것도 선택되지 않았습니다." + +#, python-format +msgid "Change history: %s" +msgstr "변경 히스토리: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s 을/를 삭제하려면 다음 보호상태의 연관된 오브젝트" +"들을 삭제해야 합니다: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django 사이트 관리" + +msgid "Django administration" +msgstr "Django 관리" + +msgid "Site administration" +msgstr "사이트 관리" + +msgid "Log in" +msgstr "로그인" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 관리" + +msgid "Page not found" +msgstr "페이지를 찾을 수 없습니다." + +msgid "We’re sorry, but the requested page could not be found." +msgstr "죄송합니다, 요청한 페이지를 찾을 수 없습니다." + +msgid "Home" +msgstr "홈" + +msgid "Server error" +msgstr "서버 오류" + +msgid "Server error (500)" +msgstr "서버 오류 (500)" + +msgid "Server Error (500)" +msgstr "서버 오류 (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"오류가 발생했습니다. 사이트 관리자들에게 이메일로 보고되었고 단시일 내에 수정" +"될 것입니다. 기다려주셔서 감사합니다." + +msgid "Run the selected action" +msgstr "선택한 액션을 실행합니다." + +msgid "Go" +msgstr "실행" + +msgid "Click here to select the objects across all pages" +msgstr "모든 페이지의 항목들을 선택하려면 여기를 클릭하세요." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s개의 %(module_name)s 모두를 선택합니다." + +msgid "Clear selection" +msgstr "선택 해제" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s 애플리케이션의 모델" + +msgid "Add" +msgstr "추가" + +msgid "View" +msgstr "보기" + +msgid "You don’t have permission to view or edit anything." +msgstr "독자는 뷰 및 수정 권한이 없습니다." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"첫 번째로, 사용자명과 비밀번호를 입력하세요. 그 후, 독자는 더 많은 사용자 옵" +"션을 수정할 수 있습니다. " + +msgid "Enter a username and password." +msgstr "사용자 이름과 비밀번호를 입력하세요." + +msgid "Change password" +msgstr "비밀번호 변경" + +msgid "Please correct the error below." +msgstr "아래 오류를 해결해주세요." + +msgid "Please correct the errors below." +msgstr "아래의 오류들을 수정하십시오." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s 새로운 비밀번호를 입력하세요." + +msgid "Welcome," +msgstr "환영합니다," + +msgid "View site" +msgstr "사이트 보기" + +msgid "Documentation" +msgstr "문서" + +msgid "Log out" +msgstr "로그아웃" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s 추가" + +msgid "History" +msgstr "히스토리" + +msgid "View on site" +msgstr "사이트에서 보기" + +msgid "Filter" +msgstr "필터" + +msgid "Clear all filters" +msgstr "모든 필터 삭제" + +msgid "Remove from sorting" +msgstr "정렬에서 " + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "정렬 조건 : %(priority_number)s" + +msgid "Toggle sorting" +msgstr "정렬 " + +msgid "Delete" +msgstr "삭제" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" 을/를 삭제하면서관련 오브젝트를 제거하" +"고자 했으나, 지금 사용하시는 계정은 다음 타입의 오브젝트를 제거할 권한이 없습" +"니다. :" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s'를 삭제하려면 다음 보호상태의 연관된 오브" +"젝트들을 삭제해야 합니다." + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"정말로 %(object_name)s \"%(escaped_object)s\"을/를 삭제하시겠습니까? 다음의 " +"관련 항목들이 모두 삭제됩니다. :" + +msgid "Objects" +msgstr "오브젝트" + +msgid "Yes, I’m sure" +msgstr "네, 확신합니다. " + +msgid "No, take me back" +msgstr "아뇨, 돌려주세요." + +msgid "Delete multiple objects" +msgstr "여러 개의 오브젝트 삭제" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"연관 오브젝트 삭제로 선택한 %(objects_name)s의 삭제 중, 그러나 당신의 계정은 " +"다음 오브젝트의 삭제 권한이 없습니다. " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s를 삭제하려면 다음 보호상태의 연관된 오브젝트들을 삭제해야 합" +"니다." + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"선택한 %(objects_name)s를 정말 삭제하시겠습니까? 다음의 오브젝트와 연관 아이" +"템들이 모두 삭제됩니다:" + +msgid "Delete?" +msgstr "삭제" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s (으)로" + +msgid "Summary" +msgstr "개요" + +msgid "Recent actions" +msgstr "최근 활동" + +msgid "My actions" +msgstr "나의 활동" + +msgid "None available" +msgstr "이용할 수 없습니다." + +msgid "Unknown content" +msgstr "알 수 없는 형식입니다." + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"당신의 데이터베이스 설치, 설치본에 오류가 있습니다. \n" +"적합한 데이터베이스 테이블이 생성되었는지 확인하고, 데이터베이스가 적합한 사" +"용자가 열람할 수 있는 지 확인하십시오. " + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s 로 인증되어 있지만, 이 페이지에 접근 가능한 권한이 없습니다. 다" +"른 계정으로 로그인하시겠습니까?" + +msgid "Forgotten your password or username?" +msgstr "아이디 또는 비밀번호를 분실하였습니까?" + +msgid "Toggle navigation" +msgstr "토글 메뉴" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "날짜/시간" + +msgid "User" +msgstr "사용자" + +msgid "Action" +msgstr "액션" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"이 개체는 변경 기록이 없습니다. 아마도 이 관리자 사이트를 통해 추가되지 않았" +"을 것입니다. " + +msgid "Show all" +msgstr "모두 표시" + +msgid "Save" +msgstr "저장" + +msgid "Popup closing…" +msgstr "팝업 닫는중..." + +msgid "Search" +msgstr "검색" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "결과 %(counter)s개 나옴" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "총 %(full_result_count)s건" + +msgid "Save as new" +msgstr "새로 저장" + +msgid "Save and add another" +msgstr "저장 및 다른 이름으로 추가" + +msgid "Save and continue editing" +msgstr "저장 및 편집 계속" + +msgid "Save and view" +msgstr "저장하고 조회하기" + +msgid "Close" +msgstr "닫기" + +#, python-format +msgid "Change selected %(model)s" +msgstr "선택된 %(model)s 변경" + +#, python-format +msgid "Add another %(model)s" +msgstr "%(model)s 추가" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "선택된 %(model)s 제거" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "사이트를 이용해 주셔서 고맙습니다." + +msgid "Log in again" +msgstr "다시 로그인하기" + +msgid "Password change" +msgstr "비밀번호 변경" + +msgid "Your password was changed." +msgstr "비밀번호가 변경되었습니다." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"독자의 과거 비밀번호를 입력한 후, 보안을 위해 새로운 비밀번호을 두 번 입력하" +"여 옳은 입력인 지 확인할 수 있도록 하십시오." + +msgid "Change my password" +msgstr "비밀번호 변경" + +msgid "Password reset" +msgstr "비밀번호 초기화" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "비밀번호가 설정되었습니다. 이제 로그인하세요." + +msgid "Password reset confirmation" +msgstr "비밀번호 초기화 확인" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"새로운 비밀번호를 정확히 입력했는지 확인할 수 있도록 두 번 입력하시기 바랍니" +"다." + +msgid "New password:" +msgstr "새로운 비밀번호:" + +msgid "Confirm password:" +msgstr "새로운 비밀번호 (확인):" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"비밀번호 초기화 링크가 이미 사용되어 올바르지 않습니다. 비밀번호 초기화를 다" +"시 해주세요." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"계정이 존재한다면, 독자가 입력한 이메일로 비밀번호 설정 안내문을 발송했습니" +"다. 곧 수신할 수 있을 것입니다. " + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"만약 이메일을 받지 못하였다면, 등록하신 이메일을 다시 확인하시거나 스팸 메일" +"함을 확인해주세요." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"%(site_name)s의 계정 비밀번호를 초기화하기 위한 요청으로 이 이메일이 전송되었" +"습니다." + +msgid "Please go to the following page and choose a new password:" +msgstr "다음 페이지에서 새 비밀번호를 선택하세요." + +msgid "Your username, in case you’ve forgotten:" +msgstr "사용자명:" + +msgid "Thanks for using our site!" +msgstr "사이트를 이용해 주셔서 고맙습니다." + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s 팀" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"비밀번호를 잊어버렸나요? 이메일 주소를 아래에 입력하시면 새로운 비밀번호를 설" +"정하는 절차를 이메일로 보내드리겠습니다." + +msgid "Email address:" +msgstr "이메일 주소:" + +msgid "Reset my password" +msgstr "비밀번호 초기화" + +msgid "All dates" +msgstr "언제나" + +#, python-format +msgid "Select %s" +msgstr "%s 선택" + +#, python-format +msgid "Select %s to change" +msgstr "변경할 %s 선택" + +#, python-format +msgid "Select %s to view" +msgstr "보기위한 1%s 를(을) 선택" + +msgid "Date:" +msgstr "날짜:" + +msgid "Time:" +msgstr "시각:" + +msgid "Lookup" +msgstr "찾아보기" + +msgid "Currently:" +msgstr "현재:" + +msgid "Change:" +msgstr "변경:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..d7ab7ddd416a6c7f827322fcfa7836040779d9b9 GIT binary patch literal 5092 zcmb`Je{fV+700i2wKer8)mpXal|lu}ZhjO(SPF%vO$!)cU=f*N9N+HVWFNeJFTVFS zVg17iu!S_VOn@u|NYZ7R5KtIb5@|XUI?m{5|Im(qFk?rZj`gq3zPI|1qklNg_&xXC z%`Qt!JEM1U@8_NSUz~whlZ3ejI#5@#i4^ z*sqoRTkw;R?f2`4?_u!9|CE<3zFW$XfTEKgJkCk zknB7I(*C31FnAd}4YooF?fVu;`rbyf0sK8k>mEWg4lV^pz&Wr7+zaJj1b+oS0=^4= z8T_Z>k_X`<$YJnd@Oj1Wg0wCJegS+1q;;=>H2+QTE8sieL*U;PA3%_3{-YrEwS22EcDZE+dFg!5;Z^z~vzMp-FKqNcy56`E7^dUXbE{K=GjBVa4Mh zwqV0x8+aLf2K)m^{#^Q*V4uf8(z_BQe>STA^@^Jm+ZA6>>;!4uZpHmzGvx1q6rVF7 z?en%8zoX^gJMtRi2yQJx%wv18}=kBo-x*nN;!oqI$sbrwjPyY|CH)Q z2pH0htx)nta4qUrl}z`N?gsgh3f+gNQCmnrp}13_calmYD#cf@;N9yFoS{iHXJ z3fvo%6)PQKta7;3#aFCMm@YoiArh`gvc<+)xfV%BSS#-#Z0WIegKf!lXB?Mp>D6>Y ziyMNka9F!$CWOJ-QFFBDt(6S9))A&uX6T7S+_iW@s^gkrpqpzh zx3EiuwO7V%k+yn;9LLmPb#>aaA|cXoVY3bqw=fI@q?XWBpjVq#jzm?&dO^4+vD`RslCA1{@(-C&BusIzkvhZA( z{^2L{xJc<{@K#@e+nI1J^1yECCb|7cO*q7SmjN+LaCR@x%FSuEQlaAahv zOa7x%2|^~E6N*o?F{c0y*f<|)2~^Sw=}gh zhnv=gTh{ZYw&>b5Pc)%4d`olOaLm?B$Ix8M#_t8R@^-pW`z(t;W$8c2I?ZjHyVLm9 zj3lh|CM+?#Gg`L@$Ap%S^6i!_FneXnb$giC(6wpDLNaQH}K$dW7CF)%KsCk;%KSZU-@?f z689%g`{#$apDUD)jd?>?Bg`L}@C!NK>Yp5?@A4(}y~e*Z%-X2&$7cMC*ElqJgOla_ zDE)unzkby}{xS>nFsv;Vb4u%?lJ}#l-s#HzYPmNgRYJ3ObAYU)NoNc6Gw)5#DXr!F zh*y~KuFdfBks0sG4ak0O*1tF$Vbz6|V~y6UD2$eVT3kd$a|<0*HsyS-oGY?Yamc?l zT$(MiW*S;YO)E7|QnQvCe|*R<VAYXe;1{s49xAMgi%R`F3aqLdB)Z$qVz7Bkcz zoAYi3M#{OooL|t&kqK{bgn38dfVlPR&s;k&AzWgH5)YV#@XpPQlB z;s$%uIT(@i&W_4^jIZl6-m69KP4|~>-j-_4ANK}_Nn82YsCOA5%U||iL?kO0w0y3{ z!`v_Q`{R=wSz8{Qlk1@q89IiWHx*wvT1?MWuHM}SA^4@@8Sm_b+)L`E zGfW|W^MjNxi(9gDJ2}T2$a#}9bkPILyrB{AT5)yFT6%);QgH7Tobu!ZOf2VT{5*0j zf31=?6~j)=`ctPV*VNNh<2q>{v@84Qn!$SMf!Y+T*%;|5H-kYn*4@3na{BROh#8!U yz?W{m%)Oy`)2a_^&8zcYADQ5y2RB?^=F;o{qf1>rUck#dhx>kw;ifSd$NmFsh2s?f literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..b7d12dac8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po @@ -0,0 +1,266 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# DaHae Sung , 2016 +# Hoseok Lee , 2016 +# Jaehong Kim , 2011 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# Le Tartuffe , 2014 +# minsung kang, 2015 +# Yang Chan Woo , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-29 08:54+0000\n" +"Last-Translator: Yang Chan Woo \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "이용 가능한 %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"사용 가능한 %s 의 리스트 입니다. 아래의 상자에서 선택하고 두 상자 사이의 " +"\"선택\" 화살표를 클릭하여 몇 가지를 선택할 수 있습니다." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "사용 가능한 %s 리스트를 필터링하려면 이 상자에 입력하세요." + +msgid "Filter" +msgstr "필터" + +msgid "Choose all" +msgstr "모두 선택" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "한번에 모든 %s 를 선택하려면 클릭하세요." + +msgid "Choose" +msgstr "선택" + +msgid "Remove" +msgstr "삭제" + +#, javascript-format +msgid "Chosen %s" +msgstr "선택된 %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"선택된 %s 리스트 입니다. 아래의 상자에서 선택하고 두 상자 사이의 \"제거\" 화" +"살표를 클릭하여 일부를 제거 할 수 있습니다." + +msgid "Remove all" +msgstr "모두 제거" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "한번에 선택된 모든 %s 를 제거하려면 클릭하세요." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s개가 %(cnt)s개 중에 선택됨." + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"개별 편집 가능한 필드에 저장되지 않은 값이 있습니다. 액션을 수행하면 저장되" +"지 않은 값들을 잃어버리게 됩니다." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"개별 필드의 값들을 저장하지 않고 액션을 선택했습니다. OK를 누르면 저장되며, " +"액션을 한 번 더 실행해야 합니다." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"개별 필드에 아무런 변경이 없는 상태로 액션을 선택했습니다. 저장 버튼이 아니" +"라 진행 버튼을 찾아보세요." + +msgid "Now" +msgstr "현재" + +msgid "Midnight" +msgstr "자정" + +msgid "6 a.m." +msgstr "오전 6시" + +msgid "Noon" +msgstr "정오" + +msgid "6 p.m." +msgstr "오후 6시" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Note: 서버 시간보다 %s 시간 빠릅니다." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Note: 서버 시간보다 %s 시간 늦은 시간입니다." + +msgid "Choose a Time" +msgstr "시간 선택" + +msgid "Choose a time" +msgstr "시간 선택" + +msgid "Cancel" +msgstr "취소" + +msgid "Today" +msgstr "오늘" + +msgid "Choose a Date" +msgstr "시간 선택" + +msgid "Yesterday" +msgstr "어제" + +msgid "Tomorrow" +msgstr "내일" + +msgid "January" +msgstr "1월" + +msgid "February" +msgstr "2월" + +msgid "March" +msgstr "3월" + +msgid "April" +msgstr "4월" + +msgid "May" +msgstr "5월" + +msgid "June" +msgstr "6월" + +msgid "July" +msgstr "7월" + +msgid "August" +msgstr "8월" + +msgid "September" +msgstr "9월" + +msgid "October" +msgstr "10월" + +msgid "November" +msgstr "11월" + +msgid "December" +msgstr "12월" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "1월" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "2월" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "3월" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "4월" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "5월" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "6월" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "7월" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "8월" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "9월" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "10월" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "11월" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "12월" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "일" + +msgctxt "one letter Monday" +msgid "M" +msgstr "월" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "화" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "수" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "목" + +msgctxt "one letter Friday" +msgid "F" +msgstr "금" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "토" + +msgid "Show" +msgstr "보기" + +msgid "Hide" +msgstr "감추기" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..71d5e5b3caad6ab29577cd92f87ed616d8455e4b GIT binary patch literal 20129 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 VS8!Uk@g9}=d%A8t8b^`tzX4RnC9MDe literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..683480cf1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,711 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Belek , 2016 +# Chyngyz Monokbaev , 2016 +# Soyuzbek Orozbek uulu , 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-27 14:12+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Тандалган %(verbose_name_plural)s элементтерин өчүрүү" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s ийгиликтүү өчүрүлдү." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s өчүрүү мүмкүн эмес" + +msgid "Are you sure?" +msgstr "Чечимиңиз аныкпы?" + +msgid "Administration" +msgstr "Башкаруу" + +msgid "All" +msgstr "Баары" + +msgid "Yes" +msgstr "Ооба" + +msgid "No" +msgstr "Жок" + +msgid "Unknown" +msgstr "Такталбаган" + +msgid "Any date" +msgstr "Кааалаган бир күн" + +msgid "Today" +msgstr "Бүгүн" + +msgid "Past 7 days" +msgstr "Өткөн 7 күн" + +msgid "This month" +msgstr "Бул айда" + +msgid "This year" +msgstr "Бул жылда" + +msgid "No date" +msgstr "Күн белгиленген эмес" + +msgid "Has date" +msgstr "Күн белгиленген" + +msgid "Empty" +msgstr "Бош" + +msgid "Not empty" +msgstr "Бош эмес" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Сураныч кызматкердин %(username)s жана сыр сөзүн туура жазыңыз. Эки " +"талаага тең баш тамга же кичүү тамга менен жазганыңыз маанилүү экенин эске " +"тутуңуз." + +msgid "Action:" +msgstr "Аракет" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Дагы %(verbose_name)s кошуу" + +msgid "Remove" +msgstr "Алып таштоо" + +msgid "Addition" +msgstr "Кошумча" + +msgid "Change" +msgstr "Өзгөртүү" + +msgid "Deletion" +msgstr "Өчүрүү" + +msgid "action time" +msgstr "аракет убактысы" + +msgid "user" +msgstr "колдонуучу" + +msgid "content type" +msgstr "Контент тиби" + +msgid "object id" +msgstr "объекттин id-си" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "объекттин repr-и" + +msgid "action flag" +msgstr "аракет белгиси" + +msgid "change message" +msgstr "билдирүүнү өзгөртүү" + +msgid "log entry" +msgstr "Жазуу журналы" + +msgid "log entries" +msgstr "Жазуу журналдары" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” кошулду" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” — %(changes)s өзгөрдү" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "“%(object)s.” өчүрүлдү" + +msgid "LogEntry Object" +msgstr "LogEntry обектиси" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” кошулду" + +msgid "Added." +msgstr "Кошулду." + +msgid "and" +msgstr "жана" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} “{object}” үчүн {fields} өзгөртүлдү." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} өзгөртүлдү." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}” өчүрүлдү." + +msgid "No fields changed." +msgstr "Эч бир талаа өзгөртүлгөн жок" + +msgid "None" +msgstr "Эчбир" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Көбүрөөк тандоо үчүн “CTRL”, же макбук үчүн “Cmd” кармап туруңуз." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" ийгиликтүү кошулду." + +msgid "You may edit it again below." +msgstr "Сиз муну төмөндө кайра өзгөртүшүңүз мүмкүн." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "{name} \"{obj}\" ийгиликтүү кошулду. Сиз башка {name} кошо аласыз." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” ийгиликтүү өзгөрдү. Сиз аны төмөндө өзгөртө аласыз." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” ийгиликтүү кошулду. Сиз аны төмөндө өзгөртө аласыз." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” ийгиликтүү өзгөрдү. Төмөндө башка {name} кошсоңуз болот." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" ийгиликтүү өзгөрдү." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Нерселердин үстүнөн аракет кылуудан мурда алар тандалуусу керек. Эч " +"нерсеөзгөргөн жок." + +msgid "No action selected." +msgstr "Аракет тандалган жок." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\" ийгиликтүү өчүрүлдү" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"ID си %(key)s\" болгон %(name)s табылган жок. Ал өчүрүлгөн болуп жүрбөсүн?" + +#, python-format +msgid "Add %s" +msgstr "%s кошуу" + +#, python-format +msgid "Change %s" +msgstr "%s өзгөртүү" + +#, python-format +msgid "View %s" +msgstr "%s көрүү" + +msgid "Database error" +msgstr "Берилиштер базасында ката" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s%(name)s ийгиликтүү өзгөртүлдү." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Бүт %(total_count)s тандалды" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s нерседен эчтемке тандалган жок" + +#, python-format +msgid "Change history: %s" +msgstr "%s тарыхын өзгөртүү" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s өчүрүлүүсү үчүн %(related_objects)s да " +"өчүрүлүүсү талап кылынат." + +msgid "Django site admin" +msgstr "Жанго башкарма сайты" + +msgid "Django administration" +msgstr "Жанго башкармасы" + +msgid "Site administration" +msgstr "Сайт башкармасы" + +msgid "Log in" +msgstr "Кирүү" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s башкармасы" + +msgid "Page not found" +msgstr "Барак табылган жок" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Кечирим сурайбыз, сиз сураган барак табылбады." + +msgid "Home" +msgstr "Башкы" + +msgid "Server error" +msgstr "Сервер катасы" + +msgid "Server error (500)" +msgstr "Сервер (500) катасы" + +msgid "Server Error (500)" +msgstr "Сервер (500) катасы" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ката кетти. Сайт башкармасына экат менен кайрылсаңыз тез арада маселе " +"чечилиши мүмкүн. Түшүнгөнүңүз үчүн рахмат." + +msgid "Run the selected action" +msgstr "Тандалган аракетти иштетиңиз" + +msgid "Go" +msgstr "Жөнө" + +msgid "Click here to select the objects across all pages" +msgstr "Барак боюнча бүт обекттерди тандоо үчүн чыкылдатыңыз" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Бүт %(total_count)s %(module_name)s тандаңыз" + +msgid "Clear selection" +msgstr "Тандоону бошотуу" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s колдонмосундагы моделдер" + +msgid "Add" +msgstr "Кошуу" + +msgid "View" +msgstr "Көрүү" + +msgid "You don’t have permission to view or edit anything." +msgstr "Сиз эчнерсени көрүүгө же өзгөртүүгө жеткиңиз жок." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Оболу колдонуучу атыңызды жана сырсөздү териңиз. Ошондо гана башка " +"маалыматтарын өзгөртө аласыз." + +msgid "Enter a username and password." +msgstr "колдонуучу атыңызды жана сырсөз киргизиңиз." + +msgid "Change password" +msgstr "Сырсөз өзгөртүү" + +msgid "Please correct the error below." +msgstr "Төмөнкү катаны оңдоңуз." + +msgid "Please correct the errors below." +msgstr "Төмөнкү каталарды оңдоңуз" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s үчүн жаңы сырсөз териңиз." + +msgid "Welcome," +msgstr "Кош келиңиз," + +msgid "View site" +msgstr "Сайтты ачуу" + +msgid "Documentation" +msgstr "Түшүндүрмө" + +msgid "Log out" +msgstr "Чыгуу" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s кошуу" + +msgid "History" +msgstr "Тарых" + +msgid "View on site" +msgstr "Сайтта көрүү" + +msgid "Filter" +msgstr "Чыпкалоо" + +msgid "Clear all filters" +msgstr "Бүт чыпкаларды алып салуу" + +msgid "Remove from sorting" +msgstr "Ирээттөөдөн алып салуу" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ирээттөө абзелдүүлүгү: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Ирээтти алмаштыруу" + +msgid "Delete" +msgstr "Өчүрүү" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s өчүрүү үчүн башка байланышкан " +"обекттерди өчүрүү да талап кылынат. Бирок сиздин буга жеткиңиз жок:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s өчүрүү үчүн башка байланышкан " +"обекттерди өчүрүү да талап кылат:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Сиз чындап эле %(object_name)s \"%(escaped_object)s\" өчүрүүнү каалайсызбы? " +"Бүт байланышкан нерселер өчүрүлөт:" + +msgid "Objects" +msgstr "Обекттер" + +msgid "Yes, I’m sure" +msgstr "Ооба, мен чындап эле" + +msgid "No, take me back" +msgstr "Жок, мени аркага кайтар" + +msgid "Delete multiple objects" +msgstr "обекттерди өчүр" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s өчүрүү үчүн башка байланышкан обекттерди өчүрүү да талап " +"кылат. Бирок сиздин буга жеткиңиз жок:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s өчүрүү үчүн башка байланышкан обекттерди өчүрүү да талап " +"кылат:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"чындап эле %(objects_name)s өчүрүүнү каалайсызбы? Бүт байланышкан нерселер " +"өчүрүлөт:" + +msgid "Delete?" +msgstr "Өчүрөлүбү?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s боюнча" + +msgid "Summary" +msgstr "Жалпысынан" + +msgid "Recent actions" +msgstr "Акыркы аракеттер" + +msgid "My actions" +msgstr "Менин аракеттерим" + +msgid "None available" +msgstr "Мүмкүн эмес" + +msgid "Unknown content" +msgstr "Белгисиз мазмун" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Сиздин базаңызды орнотуу боюнча ката кетти. Керектүү база жадыбалдары " +"түзүлгөндүгүн жана тиешелүү колдонуучунун жеткиси барлыгын текшериңиз." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Сиз %(username)s катары киргенсиз, бирок сиздин бул баракка жеткиңиз жок. " +"Сиз башка колдонуучу катары киресизби?" + +msgid "Forgotten your password or username?" +msgstr "Колдонуучу атыңыз же сырсөздү унутуп калдыңызбы?" + +msgid "Toggle navigation" +msgstr "Навигацияны алмаштыруу" + +msgid "Start typing to filter…" +msgstr "чыпкалоо үчүн жазып башта" + +msgid "Filter navigation items" +msgstr "Навигация элементтерин чыпкалоо" + +msgid "Date/time" +msgstr "Күн/убакыт" + +msgid "User" +msgstr "Колдонуучу" + +msgid "Action" +msgstr "Аракет" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "Бул обекттин өзгөрүү тарыхы жок." + +msgid "Show all" +msgstr "Баарын көрсөтүү" + +msgid "Save" +msgstr "Сактоо" + +msgid "Popup closing…" +msgstr "Жалтаң жабылуу..." + +msgid "Search" +msgstr "Издөө" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "жыйынтыгы:%(counter)s" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "жалпысынан %(full_result_count)s" + +msgid "Save as new" +msgstr "Жаңы катары сактоо" + +msgid "Save and add another" +msgstr "Сакта жана башкасын кош" + +msgid "Save and continue editing" +msgstr "Сакта жана өзгөртүүнү улант" + +msgid "Save and view" +msgstr "Сактап туруп көрүү" + +msgid "Close" +msgstr "Жабуу" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Тандалган %(model)s өзгөртүү" + +#, python-format +msgid "Add another %(model)s" +msgstr "Башка %(model)s кошуу" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Тандалган %(model)s обеттерин өчүрүү" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Сайтта бираз убакыт өткөргөн үчүн ыраазычылык." + +msgid "Log in again" +msgstr "Кайрадан кирүү" + +msgid "Password change" +msgstr "Сырсөз өзгөрт" + +msgid "Your password was changed." +msgstr "Сиздин сырсөз өзгөрдү." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Коопсуздуктан улам эски сырсөздү териңиз, жана биз коошкондугун текшерүү " +"үчүн жаңы сырсөздү эки жолу териңиз." + +msgid "Change my password" +msgstr "Сырсөздү өзгөрт" + +msgid "Password reset" +msgstr "Сырсөздү кыйратуу" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Сиздин сырсөз орнотулду. Эми сиз алдыга карай жылып, кирүү аткарсаңыз болот." + +msgid "Password reset confirmation" +msgstr "Сырсөздү кыйратуу тастыктамасы" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Тууралыгын жана коошкондугун текшере алышыбыз үчүн сырсөздү эки жолу териңиз." + +msgid "New password:" +msgstr "Жаңы сырсөз" + +msgid "Confirm password:" +msgstr "Сырсөз тастыктоосу:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Сырсөз кыйратуу шилтемеси жараксыз, мурдатан эле колдонулган болушу мүмкүн. " +"Башка шилтеме сурап көрүңүз." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Сырсөз тууралуу сизге кат жөнөттүк. Эгер мындай аккаунт бар болсо аны тез " +"арада ала аласыз." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Эгер сиз екат албасаңыз даректин тууралыган текшериңиз жана спам папкасын " +"текшериңиз." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "Сиз %(site_name)s боюнча сырсөз сураган үчүн бул экат келди." + +msgid "Please go to the following page and choose a new password:" +msgstr "Төмөнкү баракка кириңиз да жаңы сырсөз тандаңыз." + +msgid "Your username, in case you’ve forgotten:" +msgstr "Сиздин колдонуучу атыңыз, унутуп калсаңыз керек болот." + +msgid "Thanks for using our site!" +msgstr "Биздин сайтты колдонгонуңуз үчүн рахмат!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s жамааты" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "Сырсөз унуттуңузбу? едарек териңиз сизге сырсөз боюнча экат жөнөтөбүз." + +msgid "Email address:" +msgstr "едарек:" + +msgid "Reset my password" +msgstr "Сырсөзүмдү кыйрат" + +msgid "All dates" +msgstr "Бүт күндөр" + +#, python-format +msgid "Select %s" +msgstr "%s тандоо" + +#, python-format +msgid "Select %s to change" +msgstr "%s обекттерин өзгөртүү үчүн тандоо" + +#, python-format +msgid "Select %s to view" +msgstr "%s обекттерин көрүү үчүн тандоо" + +msgid "Date:" +msgstr "Күн:" + +msgid "Time:" +msgstr "Убак:" + +msgid "Lookup" +msgstr "Көз чаптыруу" + +msgid "Currently:" +msgstr "Азыркы:" + +msgid "Change:" +msgstr "Өзгөртүү:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ky/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..037e5fd78e1b45344f1eaf8b22343be4aa311799 GIT binary patch literal 5888 zcmbuBZH!!18OM)0DlWc);v49(w%7_YyIbo5Q;O8WBH*?ST`Wxu$(^0EJHyW0yWV?e zw}Xk4%`R64Lt4e=OF*;c{hI% zd?)i?x%uxL{t0{+>wk9mFNc>RtcUdvgYN*>f*%KS;ML%E@Di}*@M|FdYL1(j_5k>H z@Y`nHiIvL^4{g#9tW=i9|6yR6X4wl{~-7r_#yCR@FU>g z9bR@RF=CztuK;gzcrPgL)xZyc2SIu7C@ANb!HhKbhBa7tN7UaOX5On5|LSsXghs6eMSm|S@xIaFtq!+?lE2-coV(Y} z$3e+^=BewTR{!(205zsf+Fwh;7j0P@C@i*mfCd0&NhYJqRIeZQjzg~3n zUpxG*!&e->>hLcP{{fPIdu?ziAil40^L|ijL3sEH#-|t(qfLyf7&*o#8B+f@F@%p< zhQvoMLT5Q3&%&KNV?9ISE*F$-T{pWY%En&TIK)hwA2+o<>@!SgV`_kLJ%bW$UC>G0 zz>wO!(XEm?oAY&Uz6Ja&L-;C})TPvh^ar^<&G;N+qfEFYZ*pCif~^9uZsWGWjX9gOOA>qq>UM;6RTY>Mi&_6D?SfxBNuH!(D zSaI5`R9MzttOK;<)VAh+XsW@avHKiN-)&RPGfUcH%{9=Q3&?pMk&zsJEzyAL|H>bLk<;8JY_f|+T*D}^SX(0s~XkHbK4@vg8$Q^G(@jwQBZ^)!$CC= zyVY=g!r(GYjU|5KHP54#Wx5zlr5>#sPqoKHa8bkwvq~O3ZdN2g)80s24*Y9v{Oaz2 z|NH6h#=7bip}a4d@cc1DP5anTEKin;HLrqpQz=F^Ivj_v6Jb!GOzXN51U3Pq0c<7G zw-M-C9P@hUF_%RY%g!#bCf&=uws{=VE6s~|wHr0&G?W5LY5!VrDYjL-vsWK)M zD2X77bIL0eLNl4u)xeKS+BU-s_wIGu9y4^wu8n3t%J9&&)$C9i9=f(%pUQyUJ9MrL z?dzgt->}?$+IF`L_pamgJ67vmtJ~?T(mOLebZxnwk^#GRT0JGhlL~y|W@1RL2g5Q% z&kT014F$fe4Rx;V^5UA5L}u5D)tWuIVr{ro3nMu>+<9`iW-eabZHj)nyj$%IgZudC zWp6KLzhuIQ3d`%_eUwqqbC;P2!Z~N6RJv(<~?=q8RIhvKPSzd4K z+t{D&+m!9wsQdf#n>Jn3$JO&iFN(9nq31^xFAl=I-WAkq_ZQ5#-Vp{CYqd&E-x#^& z{u>5z<6}3ERr!eKMuO^1NbtvM-k8Y_8?TzzchYfjR$j+uZ`?ak@yh;YsnReq@s_)X z2ea3=&xx*46J~GqM}i`KJFl-Vl;f6_c|Bh5*;%QDUL`vigw-go{Rumbw)Ah->Eo8Z z%{~0Qu)jBwv&qTEbYov~GI^G9mfs=vCrM)_nP=}=?n}wDjRT4!^T~W;n(2IUPP^%h z9#F}V#=*wiij@bGbDTVxEH%ENk_VG#k`s;D#=gdk;xlb!itKrv{0!wY$zrmA)P-cR zF?0Ud`C}?MoGi1rm@MnYT;o7;LiDQS2hO79WEq|3k6~=vO4(jU-)yp|xgF;$4=pFe z$OG8Ch}KoN52fCrtwXA4T4`}xq6yr|f0Ws&oVe4DKLL=;M7m1}i`G-ZV-3IXl*nyNOBCBmDhSo1LAwrqr*F<4aQ7NLW!lEgwXbFv{j#jAp?urEgirH(t}vH5Z;t3*rs?(ySnfS*o7G zu^gk$lM_N{p&RT?PM$w1#j#2QTj@_%#w1`;^&K_VF4Ycq7AfIY+6a^IVP06+>JUfJ zJtv72K1mJPVA1!)CJbEY%nY^DOo_;m?h89ki9?OK)Z5e2u23mdmKsb?BquC2ZM8}c zgfS;91y9)QV;0R?SV5SY^uwT35mh z`mg*<*^P0p=PBJ9nmgB%)4Fj`YC@b6Kdn, 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-02 11:44+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s даана жеткиликтүү" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Бул жеткиликтүү тизмеси %s даана . Сиз төмөндө кутудан кээ бирлерин \"Тандоо" +"\" баскычын басуу менен тандап алсаңыз болот." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Жеткиликтүү %s даана тизмесин чыпкалоо үчүн төмөнкү кутуга жазыңыз." + +msgid "Filter" +msgstr "Чыпкалоо" + +msgid "Choose all" +msgstr "Баарын тандоо" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Бүт %s даананы заматта тандоо үчүн чыкылдатыңыз." + +msgid "Choose" +msgstr "Тандоо" + +msgid "Remove" +msgstr "Алып таштоо" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s даана тандалды" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Бул тандалган %s даана. Сиз алардын каалаганын төмөндө кутудан \"Өчүр\" " +"баскычын басуу менен өчүрө аласыз." + +msgid "Remove all" +msgstr "Баарын алып ташта" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Тандалган %s даананын баарын өчүрүү үчүн басыңыз" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)sнерседен %(sel)sтандалды" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Сиз өзүнчө аймактарда сакталбаган өзгөртүүлөргө ээсиз. Эгер сиз бул аракетти " +"жасасаңыз сакталбаган өзгөрүүлөр текке кетет." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Сиз аракетти тандадыңыз бирок өзүнчө аймактарды сактай элексиз. Сактоо үчүн " +"ОК ту басыңыз. Сиз аракетти кайталашыңыз керек." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Сиз аракетти тандадыңыз жана өзүнчө аймактарда өзгөртүү киргизген жоксуз. " +"Сиз Сактоонун ордуна Жөнө баскычын басууңуз керек." + +msgid "Now" +msgstr "Азыр" + +msgid "Midnight" +msgstr "Түнүчү" + +msgid "6 a.m." +msgstr "саарлап саат 6" + +msgid "Noon" +msgstr "Түш" + +msgid "6 p.m." +msgstr "Кэч саат 6" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Эскертүү: Сиз серверден %s саат алдыда жүрөсүз." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Эскертүү: Сиз серверден %s саат аркада жүрөсүз." + +msgid "Choose a Time" +msgstr "Толук убак танда" + +msgid "Choose a time" +msgstr "Кыска убак танда" + +msgid "Cancel" +msgstr "Жокко чыгар" + +msgid "Today" +msgstr "Бүгүн" + +msgid "Choose a Date" +msgstr "Күн танда" + +msgid "Yesterday" +msgstr "Кечээ" + +msgid "Tomorrow" +msgstr "Эртең" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Янв" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Фев" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Мар" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Апр" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Июн" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Июл" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Авг" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Сен" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Окт" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Ноя" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Дек" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Жек" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Дүй" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Шей" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Шар" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Бей" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Жума" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Ише" + +msgid "Show" +msgstr "Көрсөт" + +msgid "Hide" +msgstr "Жашыр" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f989aedbeabc7e3124110249418e3ee8bd1b63c4 GIT binary patch literal 913 zcmY+C&2G~`5XToNU*-q+w#ca>VSLSnl-G^|0-<#Lzd-}S5 zF1R`~ubZ_7uFxuGt+He-HRY*v#I|y&GGc8i3DLf0J!u_Z$KlknBrhxmh ziN+Z_QfEq!6+0%&dPbkpz=_>dyeDIQ6P});t_}`qq>U3@n-!^eTV+-xI_5#|AQ4-J zq!%RG&=K>MFj^O3B%%h7*5cL1au|gn62&2XEPT!X@)}op;c^HII#4YVBb673xI4#vPSaG9!_Y9LBs;O=#HHmB|X5^Tph`QCzQ&$K#sw zb&C_4)CPK3zkIVRl=C9>vR_{cy1U)&>ls9~FxbNMNI~0lgqL(QarIFt3$@7yxipqs z^C;O78`pWh*9jT1tp++RR2K7%e&PO!jd|G*dSzu~DR#6O+L)`+EVRv)O@6s-E-L<_ z$)lysfVIvr, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/django/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "All" + +msgid "Yes" +msgstr "Jo" + +msgid "No" +msgstr "Nee" + +msgid "Unknown" +msgstr "Onbekannt" + +msgid "Any date" +msgstr "Iergendeen Datum" + +msgid "Today" +msgstr "Haut" + +msgid "Past 7 days" +msgstr "Läscht 7 Deeg" + +msgid "This month" +msgstr "Dëse Mount" + +msgid "This year" +msgstr "Dëst Joer" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Aktioun:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Log out" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Läschen" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "Änner" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "" + +msgid "Time:" +msgstr "" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..e1c4a6abe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po @@ -0,0 +1,145 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b225f663d4ec37c05d8fe81c6e46d6d2a0da01ba GIT binary patch literal 17033 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..0c93418a6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# lauris , 2011 +# Matas Dailyda , 2015-2019 +# Nikolajus Krauklis , 2013 +# Simonas Kazlauskas , 2012-2013 +# sirex , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 10:32+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sėkmingai ištrinta %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ištrinti %(name)s negalima" + +msgid "Are you sure?" +msgstr "Ar esate tikras?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ištrinti pasirinktus %(verbose_name_plural)s " + +msgid "Administration" +msgstr "Administravimas" + +msgid "All" +msgstr "Visi" + +msgid "Yes" +msgstr "Taip" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nežinomas" + +msgid "Any date" +msgstr "Betkokia data" + +msgid "Today" +msgstr "Šiandien" + +msgid "Past 7 days" +msgstr "Paskutinės 7 dienos" + +msgid "This month" +msgstr "Šį mėnesį" + +msgid "This year" +msgstr "Šiais metais" + +msgid "No date" +msgstr "Nėra datos" + +msgid "Has date" +msgstr "Turi datą" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Prašome įvesti tinkamą personalo paskyros %(username)s ir slaptažodį. " +"Atminkite, kad abu laukeliai yra jautrūs raidžių dydžiui." + +msgid "Action:" +msgstr "Veiksmas:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Pridėti dar viena %(verbose_name)s" + +msgid "Remove" +msgstr "Pašalinti" + +msgid "Addition" +msgstr "Pridėjimas" + +msgid "Change" +msgstr "Pakeisti" + +msgid "Deletion" +msgstr "Pašalinimas" + +msgid "action time" +msgstr "veiksmo laikas" + +msgid "user" +msgstr "vartotojas" + +msgid "content type" +msgstr "turinio tipas" + +msgid "object id" +msgstr "objekto id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekto repr" + +msgid "action flag" +msgstr "veiksmo žymė" + +msgid "change message" +msgstr "pakeisti žinutę" + +msgid "log entry" +msgstr "log įrašas" + +msgid "log entries" +msgstr "log įrašai" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "„%(object)s“ pridėti." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Pakeisti „%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "„%(object)s“ ištrinti." + +msgid "LogEntry Object" +msgstr "LogEntry objektas" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Pridėtas {name} \"{object}\"." + +msgid "Added." +msgstr "Pridėta." + +msgid "and" +msgstr "ir" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Pakeisti {fields} arba {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Pakeisti {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Pašalintas {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nei vienas laukas nepakeistas" + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Nuspauskite \"Control\", arba \"Command\" Mac kompiuteriuose, kad pasirinkti " +"daugiau nei vieną." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" buvo sėkmingai pridėtas." + +msgid "You may edit it again below." +msgstr "Galite tai dar kartą redaguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite pridėti kitą {name} žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas. Galite jį koreguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite jį vėl redaguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pakeistas. Galite pridėti kitą {name} žemiau." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Įrašai turi būti pasirinkti, kad būtų galima atlikti veiksmus. Įrašai " +"pakeisti nebuvo." + +msgid "No action selected." +msgstr "Veiksmai atlikti nebuvo." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" sėkmingai ištrintas." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s su ID \"%(key)s\" neegzistuoja. Gal tai buvo ištrinta?" + +#, python-format +msgid "Add %s" +msgstr "Pridėti %s" + +#, python-format +msgid "Change %s" +msgstr "Pakeisti %s" + +#, python-format +msgid "View %s" +msgstr "Peržiūrėti %s" + +msgid "Database error" +msgstr "Duomenų bazės klaida" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s sėkmingai pakeistas." +msgstr[1] "%(count)s %(name)s sėkmingai pakeisti." +msgstr[2] "%(count)s %(name)s " +msgstr[3] "%(count)s %(name)s " + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s pasirinktas" +msgstr[1] "%(total_count)s pasirinkti" +msgstr[2] "Visi %(total_count)s pasirinkti" +msgstr[3] "Visi %(total_count)s pasirinkti" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 iš %(cnt)s pasirinkta" + +#, python-format +msgid "Change history: %s" +msgstr "Pakeitimų istorija: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s šalinimas reikalautų pašalinti apsaugotus " +"susijusius objektus: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django tinklalapio administravimas" + +msgid "Django administration" +msgstr "Django administravimas" + +msgid "Site administration" +msgstr "Tinklalapio administravimas" + +msgid "Log in" +msgstr "Prisijungti" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administravimas" + +msgid "Page not found" +msgstr "Puslapis nerastas" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Atsiprašome, bet prašytas puslapis nerastas." + +msgid "Home" +msgstr "Pradinis" + +msgid "Server error" +msgstr "Serverio klaida" + +msgid "Server error (500)" +msgstr "Serverio klaida (500)" + +msgid "Server Error (500)" +msgstr "Serverio klaida (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Netikėta klaida. Apie ją buvo pranešta administratoriams el. paštu ir ji " +"turėtų būti greitai sutvarkyta. Dėkui už kantrybę." + +msgid "Run the selected action" +msgstr "Vykdyti pasirinktus veiksmus" + +msgid "Go" +msgstr "Vykdyti" + +msgid "Click here to select the objects across all pages" +msgstr "Spauskite čia norėdami pasirinkti visus įrašus" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Pasirinkti visus %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Atstatyti į pradinę būseną" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Pirmiausia įveskite naudotojo vardą ir slaptažodį. Tada galėsite keisti " +"daugiau naudotojo nustatymų." + +msgid "Enter a username and password." +msgstr "Įveskite naudotojo vardą ir slaptažodį." + +msgid "Change password" +msgstr "Keisti slaptažodį" + +msgid "Please correct the error below." +msgstr "Prašome ištaisyti žemiau esančią klaidą." + +msgid "Please correct the errors below." +msgstr "Ištaisykite žemiau esančias klaidas." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Įveskite naują slaptažodį naudotojui %(username)s." + +msgid "Welcome," +msgstr "Sveiki," + +msgid "View site" +msgstr "Peržiūrėti tinklalapį" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Atsijungti" + +#, python-format +msgid "Add %(name)s" +msgstr "Naujas %(name)s" + +msgid "History" +msgstr "Istorija" + +msgid "View on site" +msgstr "Matyti tinklalapyje" + +msgid "Filter" +msgstr "Filtras" + +msgid "Remove from sorting" +msgstr "Pašalinti iš rikiavimo" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Rikiavimo prioritetas: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Perjungti rikiavimą" + +msgid "Delete" +msgstr "Ištrinti" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Trinant %(object_name)s '%(escaped_object)s' turi būti ištrinti ir susiję " +"objektai, bet tavo vartotojas neturi teisių ištrinti šių objektų:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Ištrinant %(object_name)s '%(escaped_object)s' būtų ištrinti šie apsaugoti " +"ir susiję objektai:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ar este tikri, kad norite ištrinti %(object_name)s \"%(escaped_object)s\"? " +"Visi susiję objektai bus ištrinti:" + +msgid "Objects" +msgstr "Objektai" + +msgid "Yes, I'm sure" +msgstr "Taip, esu tikras" + +msgid "No, take me back" +msgstr "Ne, grįžti atgal" + +msgid "Delete multiple objects" +msgstr "Ištrinti kelis objektus" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Ištrinant pasirinktą %(objects_name)s būtų ištrinti susiję objektai, tačiau " +"jūsų vartotojas neturi reikalingų teisių ištrinti šiuos objektų tipus:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Ištrinant pasirinktus %(objects_name)s būtų ištrinti šie apsaugoti ir susiję " +"objektai:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ar esate tikri, kad norite ištrinti pasirinktus %(objects_name)s? Sekantys " +"pasirinkti bei susiję objektai bus ištrinti:" + +msgid "View" +msgstr "Peržiūrėti" + +msgid "Delete?" +msgstr "Ištrinti?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pagal %(filter_title)s " + +msgid "Summary" +msgstr "Santrauka" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s aplikacijos modeliai" + +msgid "Add" +msgstr "Pridėti" + +msgid "You don't have permission to view or edit anything." +msgstr "Jūs neturite teisių peržiūrai ir redagavimui." + +msgid "Recent actions" +msgstr "Paskutiniai veiksmai" + +msgid "My actions" +msgstr "Mano veiksmai" + +msgid "None available" +msgstr "Nėra prieinamų" + +msgid "Unknown content" +msgstr "Nežinomas turinys" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Kažkas yra negerai su jūsų duomenų bazės instaliacija. Įsitikink, kad visos " +"reikalingos lentelės sukurtos ir vartotojas turi teises skaityti duomenų " +"bazę." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jūs esate prisijungęs kaip %(username)s, bet neturite teisių patekti į šį " +"puslapį. Ar norėtumete prisijungti su kitu vartotoju?" + +msgid "Forgotten your password or username?" +msgstr "Pamiršote slaptažodį ar vartotojo vardą?" + +msgid "Date/time" +msgstr "Data/laikas" + +msgid "User" +msgstr "Naudotojas" + +msgid "Action" +msgstr "Veiksmas" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Šis objektas neturi pakeitimų istorijos. Tikriausiai jis buvo pridėtas ne " +"per administravimo puslapį." + +msgid "Show all" +msgstr "Rodyti visus" + +msgid "Save" +msgstr "Išsaugoti" + +msgid "Popup closing…" +msgstr "Iškylantysis langas užsidaro..." + +msgid "Search" +msgstr "Ieškoti" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultatas" +msgstr[1] "%(counter)s rezultatai" +msgstr[2] "%(counter)s rezultatai" +msgstr[3] "%(counter)s rezultatai" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s iš viso" + +msgid "Save as new" +msgstr "Išsaugoti kaip naują" + +msgid "Save and add another" +msgstr "Išsaugoti ir pridėti naują" + +msgid "Save and continue editing" +msgstr "Išsaugoti ir tęsti redagavimą" + +msgid "Save and view" +msgstr "Išsaugoti ir peržiūrėti" + +msgid "Close" +msgstr "Uždaryti" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Keisti pasirinktus %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Pridėti dar vieną %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Pašalinti pasirinktus %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Dėkui už šiandien tinklalapyje turiningai praleistą laiką." + +msgid "Log in again" +msgstr "Prisijungti dar kartą" + +msgid "Password change" +msgstr "Slaptažodžio keitimas" + +msgid "Your password was changed." +msgstr "Jūsų slaptažodis buvo pakeistas." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Saugumo sumetimais įveskite seną slaptažodį ir tada du kartus naują, kad " +"įsitikinti, jog nesuklydote rašydamas" + +msgid "Change my password" +msgstr "Keisti mano slaptažodį" + +msgid "Password reset" +msgstr "Slaptažodžio atstatymas" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Jūsų slaptažodis buvo išsaugotas. Dabas galite prisijungti." + +msgid "Password reset confirmation" +msgstr "Slaptažodžio atstatymo patvirtinimas" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Įveskite naująjį slaptažodį du kartus, taip užtikrinant, jog nesuklydote " +"rašydami." + +msgid "New password:" +msgstr "Naujasis slaptažodis:" + +msgid "Confirm password:" +msgstr "Slaptažodžio patvirtinimas:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Slaptažodžio atstatymo nuoroda buvo negaliojanti, nes ji tikriausiai jau " +"buvo panaudota. Prašykite naujo slaptažodžio pakeitimo." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Jei egzistuoja vartotojas su jūsų įvestu elektroninio pašto adresu, " +"išsiųsime jums slaptažodžio nustatymo instrukcijas . Instrukcijas turėtumėte " +"gauti netrukus." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jei el. laiško negavote, prašome įsitikinti ar įvedėte tą el. pašto adresą " +"kuriuo registravotės ir patikrinkite savo šlamšto aplanką." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Jūs gaunate šį laišką nes prašėte paskyros slaptažodžio atkūrimo " +"%(site_name)s svetainėje." + +msgid "Please go to the following page and choose a new password:" +msgstr "Prašome eiti į šį puslapį ir pasirinkti naują slaptažodį:" + +msgid "Your username, in case you've forgotten:" +msgstr "Jūsų naudotojo vardas, jei netyčia jį užmiršote:" + +msgid "Thanks for using our site!" +msgstr "Dėkui, kad naudojatės mūsų tinklalapiu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s komanda" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Pamiršote slaptažodį? Įveskite savo el. pašto adresą ir mes išsiųsime laišką " +"su instrukcijomis kaip nustatyti naują slaptažodį." + +msgid "Email address:" +msgstr "El. pašto adresas:" + +msgid "Reset my password" +msgstr "Atstatyti slaptažodį" + +msgid "All dates" +msgstr "Visos datos" + +#, python-format +msgid "Select %s" +msgstr "Pasirinkti %s" + +#, python-format +msgid "Select %s to change" +msgstr "Pasirinkite %s kurį norite keisti" + +#, python-format +msgid "Select %s to view" +msgstr "Pasirinkti %s peržiūrai" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Laikas:" + +msgid "Lookup" +msgstr "Paieška" + +msgid "Currently:" +msgstr "Šiuo metu:" + +msgid "Change:" +msgstr "Pakeisti:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..77922d36b36361a7b19065faf5983f39435c9102 GIT binary patch literal 5183 zcmd6rO^h5z6~_zWK-dsN0){|LcyaK@;+@%<_4;ep>#+XVjn`g#wL3UOaH*NDovEGf zu2EI>tVdXiFXjLO36W?q0+ba84iQQK@gWfmhZ!UglFwX16b?u^Awdotkodpup51Y5 z919GhwAH_^>Q}E`y?XV!XJ30{+Y16^5_Ko)tM3wG4*bG>xS(9xCd6T|3%&>ZVa}g} z_oMx*yxj-ikM{5L_8)S-4nBnbKj(Za=Y1GFg8qlW_klaXPl9{EJ>V?(02t-$fIRLg;+$-Scz@LCsa66Rp^E$}#A;@~$ApXQ9 zT-eU%K(_PCAnSP^d>*_8ejO}g5LAj^gRJj2;1qZRM}4{kOdR0F3xB`X2{B0v-S#d$$nt;AON|;Cz@O{sgieZ-Q*cUqFb6zk^UE zwqY}v+d=Ms6nq$b5_|+anDc4ygJ^#q+zy7|A@Gaf3GhcCmL}fH`H!6ULzw#?0@6nMeiU^N>JzA3K9(VkGpI=m+q@T*_v&#}wt>t3 z45?4}wve~kH(WlA%KPyNZlJ&&X<;8>sbU}M80rDk$57#RF^Wp4aJ?v_a$eYt%B6(* zBtcb&mhJ@_A#F$j$tkw+kCFMd=4OfR1}A(&6sIh9g3NxkvK1AI#P$S7Ao59#7P;~RVYq2jd3amNjfF{P^+q=p_U(R zh3QzQ;#66v>n-wz>Zv-CVTf*$o(yIwij#xqRz;?x(&rG(MsJCoQgs#8lohk8W)o?< zVpfM9?Wc91#Jr5tzWF5Viuoi~VnNz^6W6X-&_S#lO)t(H6XW7lg`PDDNz03+rb#Tx zrjh~s(<$3gmUubE+snfAyBDUKYU((+E48;5?PRMyZ`QvFu0N99!Jar1DXMkzDAI9*heo91R7K5P!a72;MiNWG zlbGtfX}KKj$^vB>Y;%$xE+~+Ne@+kNZEy`T}=2T995k}z`8 zu8fbbt*sS3>(ndi5)T^BRy9DFYZwpx_~^*OnT69^>n|5eBPUJlRSdguG%MuQB|qK{ zrH-dKCaqI``m@#9!jUaGo@+(f!s)nf0_3L(9jR%*X=#N*Ke8AmR)&RHVv*gjlqjw_csP_{;lWwzwkK!VkjS}luF`+ z#C`?ZiKV2`UhTi+aXTkN9bslCW_*7`CM~bU;=tmqTkRDE()X@zKI9&3W$VseUK3(B zaht#z%_^d+ROe8KV|n-t3c>w8%1>9!sL$I;KfAz{KJ^4Z{LLyZ~+*wxta2 zhl)9yAhMjeD4nz*e}z~Hi(pI}i(i(BL-#qY+ESd*wtrpWl_AcW4us}ZBk5o7t&59D z@HUq47BumFpjC|fMVvxelNFlpzvTKqPCaCKKEl=T=SnBt1PN~@4J{L-R-J!cXtO0= zylYJ+g7SN%3>N<%s*-rm_OIVFXWc7haMu4&)j8R2Sl0wU9~Lk@KK_bj%9?^;CRrf-g^If;xSASLO)`!x8eOR zj$$B@DO&iUf;^BO*HsMCmd|S&rzU;;#+C2l3}gvUzj5W;9QWN;*tZ&t+; zyx-;IN4=M+zoFsL%qPBgZ8IP8w=2@sAfer~Rf8?;T`eM)A#rlXNPUMNNYqif<)Yrz zG5(t8&o_rp40yMtG$ufvNm}rkg;akd!X^~cghdVXU{g2+!r5B&H(IPM>Nb4RGIX)q z;wTy;1C^V-$e0b|b(*sNg#m%In?@kdJ07tLJ2Hbbg0D#DlQfD_pUf$X`D0`Apc{, 2011 +# Kostas , 2011 +# Matas Dailyda , 2015-2016 +# Povilas Balzaravičius , 2011 +# Simonas Kazlauskas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Galimi %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Tai yra sąrašas prieinamų %s. Dėžutėje žemiau pažymėdami keletą iš jų ir " +"paspausdami „Pasirinkti“ rodyklę tarp dviejų dėžučių jūs galite pasirinkti " +"keletą iš jų." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Rašykite į šią dėžutę, kad išfiltruotumėte prieinamų %s sąrašą." + +msgid "Filter" +msgstr "Filtras" + +msgid "Choose all" +msgstr "Pasirinkti visus" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Spustelėkite, kad iš karto pasirinktumėte visus %s." + +msgid "Choose" +msgstr "Pasirinkti" + +msgid "Remove" +msgstr "Pašalinti" + +#, javascript-format +msgid "Chosen %s" +msgstr "Pasirinktas %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Tai yra sąrašas pasirinktų %s. Dėžutėje žemiau pažymėdami keletą iš jų ir " +"paspausdami „Pašalinti“ rodyklę tarp dviejų dėžučių jūs galite pašalinti " +"keletą iš jų." + +msgid "Remove all" +msgstr "Pašalinti visus" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Spustelėkite, kad iš karto pašalintumėte visus pasirinktus %s." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "pasirinktas %(sel)s iš %(cnt)s" +msgstr[1] "pasirinkti %(sel)s iš %(cnt)s" +msgstr[2] "pasirinkti %(sel)s iš %(cnt)s" +msgstr[3] "pasirinkti %(sel)s iš %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Turite neišsaugotų pakeitimų. Jeigu tęsite, Jūsų pakeitimai bus prarasti." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Pasirinkote veiksmą, bet dar neesate išsaugoję pakeitimų. Nuspauskite Gerai " +"norėdami išsaugoti. Jus reikės iš naujo paleisti veiksmą." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Pasirinkote veiksmą, bet neesate pakeitę laukų reikšmių. Jūs greičiausiai " +"ieškote mygtuko Vykdyti, o ne mygtuko Saugoti." + +msgid "Now" +msgstr "Dabar" + +msgid "Midnight" +msgstr "Vidurnaktis" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Vidurdienis" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Pastaba: Jūsų laikrodis rodo %s valanda daugiau nei serverio laikrodis." +msgstr[1] "" +"Pastaba: Jūsų laikrodis rodo %s valandomis daugiau nei serverio laikrodis." +msgstr[2] "" +"Pastaba: Jūsų laikrodis rodo %s valandų daugiau nei serverio laikrodis." +msgstr[3] "" +"Pastaba: Jūsų laikrodis rodo %s valandų daugiau nei serverio laikrodis." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Pastaba: Jūsų laikrodis rodo %s valanda mažiau nei serverio laikrodis." +msgstr[1] "" +"Pastaba: Jūsų laikrodis rodo %s valandomis mažiau nei serverio laikrodis." +msgstr[2] "" +"Pastaba: Jūsų laikrodis rodo %s valandų mažiau nei serverio laikrodis." +msgstr[3] "" +"Pastaba: Jūsų laikrodis rodo %s valandų mažiau nei serverio laikrodis." + +msgid "Choose a Time" +msgstr "Pasirinkite laiką" + +msgid "Choose a time" +msgstr "Pasirinkite laiką" + +msgid "Cancel" +msgstr "Atšaukti" + +msgid "Today" +msgstr "Šiandien" + +msgid "Choose a Date" +msgstr "Pasirinkite datą" + +msgid "Yesterday" +msgstr "Vakar" + +msgid "Tomorrow" +msgstr "Rytoj" + +msgid "January" +msgstr "Sausis" + +msgid "February" +msgstr "Vasaris" + +msgid "March" +msgstr "Kovas" + +msgid "April" +msgstr "Balandis" + +msgid "May" +msgstr "Gegužė" + +msgid "June" +msgstr "Birželis" + +msgid "July" +msgstr "Liepa" + +msgid "August" +msgstr "Rugpjūtis" + +msgid "September" +msgstr "Rugsėjis" + +msgid "October" +msgstr "Spalis" + +msgid "November" +msgstr "Lapkritis" + +msgid "December" +msgstr "Gruodis" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "A" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "T" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "K" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pn" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Š" + +msgid "Show" +msgstr "Parodyti" + +msgid "Hide" +msgstr "Slėpti" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f2a081acae3be6ba530c5a2ca24d6fcdb43035e0 GIT binary patch literal 17086 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 ujELc)cIwT4K2L0t9+5lpIy(GO>S, 2011 +# NullIsNot0 , 2017 +# NullIsNot0 , 2018 +# Jannis Leidel , 2011 +# Māris Nartišs , 2016 +# NullIsNot0 , 2019-2021 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-06 05:10+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Izdzēst izvēlēto %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Veiksmīgi izdzēsti %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nevar izdzēst %(name)s" + +msgid "Are you sure?" +msgstr "Vai esat pārliecināts?" + +msgid "Administration" +msgstr "Administrācija" + +msgid "All" +msgstr "Visi" + +msgid "Yes" +msgstr "Jā" + +msgid "No" +msgstr "Nē" + +msgid "Unknown" +msgstr "Nezināms" + +msgid "Any date" +msgstr "Jebkurš datums" + +msgid "Today" +msgstr "Šodien" + +msgid "Past 7 days" +msgstr "Pēdējās 7 dienas" + +msgid "This month" +msgstr "Šomēnes" + +msgid "This year" +msgstr "Šogad" + +msgid "No date" +msgstr "Nav datums" + +msgid "Has date" +msgstr "Ir datums" + +msgid "Empty" +msgstr "Tukšs" + +msgid "Not empty" +msgstr "Nav tukšs" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Lūdzu ievadi korektu %(username)s un paroli personāla kontam. Ņem vērā, ka " +"abi ievades lauki ir reģistr jūtīgi." + +msgid "Action:" +msgstr "Darbība:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Pievienot vēl %(verbose_name)s" + +msgid "Remove" +msgstr "Dzēst" + +msgid "Addition" +msgstr "Pievienošana" + +msgid "Change" +msgstr "Izmainīt" + +msgid "Deletion" +msgstr "Dzēšana" + +msgid "action time" +msgstr "darbības laiks" + +msgid "user" +msgstr "lietotājs" + +msgid "content type" +msgstr "satura tips" + +msgid "object id" +msgstr "objekta id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekta attēlojums" + +msgid "action flag" +msgstr "darbības atzīme" + +msgid "change message" +msgstr "izmaiņas teksts" + +msgid "log entry" +msgstr "žurnāla ieraksts" + +msgid "log entries" +msgstr "žurnāla ieraksti" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Pievienots “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Labots “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Dzēsts “%(object)s.”" + +msgid "LogEntry Object" +msgstr "LogEntry Objekts" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Pievienots {name} “{object}”." + +msgid "Added." +msgstr "Pievienots." + +msgid "and" +msgstr "un" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Laboti {fields} {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Mainīts {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Dzēsts {name} “{object}”." + +msgid "No fields changed." +msgstr "Lauki nav izmainīti" + +msgid "None" +msgstr "nekas" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Turiet nospiestu “Control”, vai “Command” uz Mac, lai iezīmētu vairāk par " +"vienu." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” veiksmīgi pievienots." + +msgid "You may edit it again below." +msgstr "Jūs varat to atkal labot zemāk. " + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "{name} “{obj}” veiksmīgi pievienots. Zemāk varat pievienot vēl {name}." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” veiksmīgi labots. Zemāk to varat atkal labot." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” veiksmīgi pievienots. Zemāk to varat atkal labot." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} “{obj}” veiksmīgi labots. Zemāk varat pievienot vēl {name}." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” veiksmīgi labots." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "Lai veiktu darbību, jāizvēlas rindas. Rindas nav izmainītas." + +msgid "No action selected." +msgstr "Nav izvēlēta darbība." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” veiksmīgi dzēsts." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s ar ID “%(key)s” neeksistē. Varbūt tas ir dzēsts?" + +#, python-format +msgid "Add %s" +msgstr "Pievienot %s" + +#, python-format +msgid "Change %s" +msgstr "Labot %s" + +#, python-format +msgid "View %s" +msgstr "Apskatīt %s" + +msgid "Database error" +msgstr "Datubāzes kļūda" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ir laboti sekmīgi" +msgstr[1] "%(count)s %(name)s ir sekmīgi rediģēts" +msgstr[2] "%(count)s %(name)s ir sekmīgi rediģēti." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s izvēlēti" +msgstr[1] "%(total_count)s izvēlēts" +msgstr[2] "%(total_count)s izvēlēti" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 no %(cnt)s izvēlēti" + +#, python-format +msgid "Change history: %s" +msgstr "Izmaiņu vēsture: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s dzēšanai ir nepieciešams izdzēst sekojošus " +"aizsargātus saistītos objektus: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administrācijas lapa" + +msgid "Django administration" +msgstr "Django administrācija" + +msgid "Site administration" +msgstr "Lapas administrācija" + +msgid "Log in" +msgstr "Pieslēgties" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administrācija" + +msgid "Page not found" +msgstr "Lapa nav atrasta" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Atvainojiet, pieprasītā lapa neeksistē." + +msgid "Home" +msgstr "Sākums" + +msgid "Server error" +msgstr "Servera kļūda" + +msgid "Server error (500)" +msgstr "Servera kļūda (500)" + +msgid "Server Error (500)" +msgstr "Servera kļūda (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Notika kļūda. Lapas administratoriem ir nosūtīts e-pasts un kļūda tuvākajā " +"laikā tiks novērsta. Paldies par pacietību." + +msgid "Run the selected action" +msgstr "Izpildīt izvēlēto darbību" + +msgid "Go" +msgstr "Aiziet!" + +msgid "Click here to select the objects across all pages" +msgstr "Spiest šeit, lai iezīmētu objektus no visām lapām" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izvēlēties visus %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Atcelt iezīmēto" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeļi %(name)s lietotnē" + +msgid "Add" +msgstr "Pievienot" + +msgid "View" +msgstr "Apskatīt" + +msgid "You don’t have permission to view or edit anything." +msgstr "Jums nav tiesību neko skatīt vai labot." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Vispirms ievadiet lietotāja vārdu un paroli. Tad varēsiet labot pārējos " +"lietotāja uzstādījumus." + +msgid "Enter a username and password." +msgstr "Ievadi lietotājvārdu un paroli." + +msgid "Change password" +msgstr "Paroles maiņa" + +msgid "Please correct the error below." +msgstr "Lūdzu izlabojiet zemāk redzamo kļūdu." + +msgid "Please correct the errors below." +msgstr "Lūdzu labo kļūdas zemāk." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Ievadiet jaunu paroli lietotājam %(username)s." + +msgid "Welcome," +msgstr "Sveicināti," + +msgid "View site" +msgstr "Apskatīt lapu" + +msgid "Documentation" +msgstr "Dokumentācija" + +msgid "Log out" +msgstr "Atslēgties" + +#, python-format +msgid "Add %(name)s" +msgstr "Pievienot %(name)s" + +msgid "History" +msgstr "Vēsture" + +msgid "View on site" +msgstr "Apskatīt lapā" + +msgid "Filter" +msgstr "Filtrs" + +msgid "Clear all filters" +msgstr "Notīrīt visus filtrus" + +msgid "Remove from sorting" +msgstr "Izņemt no kārtošanas" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Kārtošanas prioritāte: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Pārslēgt kārtošanu" + +msgid "Delete" +msgstr "Dzēst" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Izdzēšot objektu %(object_name)s '%(escaped_object)s', tiks dzēsti visi " +"saistītie objekti, bet jums nav tiesību dzēst sekojošus objektu tipus:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' dzēšanai ir nepieciešams izdzēst " +"sekojošus aizsargātus saistītos objektus:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Vai esat pārliecināts, ka vēlaties dzēst %(object_name)s \"%(escaped_object)s" +"\"? Tiks dzēsti arī sekojoši saistītie objekti:" + +msgid "Objects" +msgstr "Objekti" + +msgid "Yes, I’m sure" +msgstr "Jā, esmu pārliecināts" + +msgid "No, take me back" +msgstr "Nē, ved mani atpakaļ" + +msgid "Delete multiple objects" +msgstr "Dzēst vairākus objektus" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Izdzēšot izvēlēto %(objects_name)s, tiks dzēsti visi saistītie objekti, bet " +"jums nav tiesību dzēst sekojošus objektu tipus:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Izvēlēto %(objects_name)s objektu dzēšanai ir nepieciešams izdzēst sekojošus " +"aizsargātus saistītos objektus:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Vai esat pārliecināts, ka vēlaties dzēst izvēlētos %(objects_name)s " +"objektus? Visi sekojošie objekti un tiem piesaistītie objekti tiks izdzēsti:" + +msgid "Delete?" +msgstr "Dzēst?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pēc %(filter_title)s " + +msgid "Summary" +msgstr "Kopsavilkums" + +msgid "Recent actions" +msgstr "Nesenās darbības" + +msgid "My actions" +msgstr "Manas darbības" + +msgid "None available" +msgstr "Nav pieejams" + +msgid "Unknown content" +msgstr "Nezināms saturs" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Problēma ar datubāzes instalāciju. Pārliecinieties, ka attiecīgās tabulas ir " +"izveidotas un attiecīgajam lietotājam ir tiesības tai piekļūt." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jūs esat autentificējies kā %(username)s, bet jums nav tiesību piekļūt šai " +"lapai. Vai vēlaties pieteikties citā kontā?" + +msgid "Forgotten your password or username?" +msgstr "Aizmirsi paroli vai lietotājvārdu?" + +msgid "Toggle navigation" +msgstr "Pārslēgt navigāciju" + +msgid "Start typing to filter…" +msgstr "Sāciet rakstīt, lai atlasītu…" + +msgid "Filter navigation items" +msgstr "Atlasīt navigācijas vienības" + +msgid "Date/time" +msgstr "Datums/laiks" + +msgid "User" +msgstr "Lietotājs" + +msgid "Action" +msgstr "Darbība" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Objektam nav izmaiņu vēstures. Tas visdrīzāk netika pievienots, izmantojot " +"šo administrācijas rīku." + +msgid "Show all" +msgstr "Rādīt visu" + +msgid "Save" +msgstr "Saglabāt" + +msgid "Popup closing…" +msgstr "Logs aizveras..." + +msgid "Search" +msgstr "Meklēt" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultāti" +msgstr[1] "%(counter)s rezultāts" +msgstr[2] "%(counter)s rezultāti" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "kopā - %(full_result_count)s" + +msgid "Save as new" +msgstr "Saglabāt kā jaunu" + +msgid "Save and add another" +msgstr "Saglabāt un pievienot vēl vienu" + +msgid "Save and continue editing" +msgstr "Saglabāt un turpināt labošanu" + +msgid "Save and view" +msgstr "Saglabāt un apskatīt" + +msgid "Close" +msgstr "Aizvērt" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Mainīt izvēlēto %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Pievienot citu %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Dzēst izvēlēto %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Paldies, ka šodien vietnei veltījāt kvalitatīvu laiku." + +msgid "Log in again" +msgstr "Pieslēgties vēlreiz" + +msgid "Password change" +msgstr "Paroles maiņa" + +msgid "Your password was changed." +msgstr "Jūsu parole tika nomainīta." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Drošības nolūkos ievadiet veco paroli un pēc tam divreiz jauno paroli, lai " +"mēs varētu pārbaudīt, ka tā ir ievadīta pareizi." + +msgid "Change my password" +msgstr "Nomainīt manu paroli" + +msgid "Password reset" +msgstr "Paroles pārstatīšana(reset)" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Jūsu parole ir uzstādīta. Varat pieslēgties." + +msgid "Password reset confirmation" +msgstr "Paroles pārstatīšanas apstiprinājums" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Lūdzu ievadiet jauno paroli divreiz, lai varētu pārbaudīt, ka tā ir " +"uzrakstīta pareizi." + +msgid "New password:" +msgstr "Jaunā parole:" + +msgid "Confirm password:" +msgstr "Apstiprināt paroli:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Paroles pārstatīšanas saite bija nekorekta, iespējams, tā jau ir izmantota. " +"Lūdzu pieprasiet paroles pārstatīšanu vēlreiz." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ja sistēmā ir konts ar jūsu e-pasta adresi, tad mēs jums tikko nosūtījām e-" +"pasta ziņojumu ar paroles iestatīšanas instrukciju. Jums to tūlīt vajadzētu " +"saņemt." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ja nesaņemat e-pastu, lūdzu, pārliecinieties, vai esat ievadījis reģistrētu " +"adresi un pārbaudiet savu mēstuļu mapi." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Jūs saņemat šo e-pasta ziņojumu, jo pieprasījāt atiestatīt lietotāja konta " +"paroli vietnē %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Lūdzu apmeklējiet sekojošo lapu un ievadiet jaunu paroli:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Jūsu lietotājvārds, gadījumā ja tas ir aizmirsts:" + +msgid "Thanks for using our site!" +msgstr "Paldies par mūsu lapas lietošanu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s komanda" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Aizmirsāt savu paroli? Ievadiet jūsu e-pasta adresi un jums tiks nosūtīta " +"instrukcija, kā iestatīt jaunu paroli." + +msgid "Email address:" +msgstr "E-pasta adrese:" + +msgid "Reset my password" +msgstr "Paroles pārstatīšana" + +msgid "All dates" +msgstr "Visi datumi" + +#, python-format +msgid "Select %s" +msgstr "Izvēlēties %s" + +#, python-format +msgid "Select %s to change" +msgstr "Izvēlēties %s, lai izmainītu" + +#, python-format +msgid "Select %s to view" +msgstr "Izvēlēties %s, lai apskatītu" + +msgid "Date:" +msgstr "Datums:" + +msgid "Time:" +msgstr "Laiks:" + +msgid "Lookup" +msgstr "Pārlūkot" + +msgid "Currently:" +msgstr "Valūta:" + +msgid "Change:" +msgstr "Izmaiņa:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6fa404d64a9a501a9fa2869b1563135f4809c024 GIT binary patch literal 5491 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, 2017 +# Jannis Leidel , 2011 +# NullIsNot0 , 2020-2021 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-25 22:47+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Pieejams %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Šis ir saraksts ar pieejamajiem %s. Tev ir jāizvēlas atbilstošās vērtības " +"atzīmējot izvēlēs zemāk esošajā sarakstā un pēc tam spiežot pogu \"Izvēlēties" +"\", lai pārvietotu starp izvēļu sarakstiem." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Raksti šajā logā, lai filtrētu zemāk esošo sarakstu ar pieejamajiem %s." + +msgid "Filter" +msgstr "Filtrs" + +msgid "Choose all" +msgstr "Izvēlēties visu" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Izvēlies, lai pievienotu visas %s izvēles vienā reizē." + +msgid "Choose" +msgstr "Izvēlies" + +msgid "Remove" +msgstr "Izņemt" + +#, javascript-format +msgid "Chosen %s" +msgstr "Izvēlies %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Šis ir saraksts ar izvēlētajiem %s. Tev ir jāizvēlas atbilstošās vērtības " +"atzīmējot izvēlēs zemāk esošajā sarakstā un pēc tam spiežot pogu \"Izņemt\", " +"lai izņemtu no izvēlēto ierakstu saraksta." + +msgid "Remove all" +msgstr "Izņemt visu" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Izvēlies, lai izņemtu visas %s izvēles vienā reizē." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s no %(cnt)s izvēlēts" +msgstr[1] "%(sel)s no %(cnt)s izvēlēti" +msgstr[2] "%(sel)s no %(cnt)s izvēlēti" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Jūs neesat saglabājis izmaiņas rediģējamiem laukiem. Ja jūs tagad " +"izpildīsiet izvēlēto darbību, šīs izmaiņas netiks saglabātas." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Jūs esiet izvēlējies veikt darbību, bet neesiet saglabājis veiktās izmaiņas. " +"Lūdzu nospiediet OK, lai saglabātu. Šo darbību jums nāksies izpildīt vēlreiz." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Jūs esiet izvēlējies veikt darbību un neesiet mainījis nevienu lauku. Jūs " +"droši vien meklējiet pogu 'Aiziet' nevis 'Saglabāt'." + +msgid "Now" +msgstr "Tagad" + +msgid "Midnight" +msgstr "Pusnakts" + +msgid "6 a.m." +msgstr "06.00" + +msgid "Noon" +msgstr "Pusdienas laiks" + +msgid "6 p.m." +msgstr "6:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Piezīme: Tavs laiks ir %s stundas pirms servera laika." +msgstr[1] "Piezīme: Tavs laiks ir %s stundu pirms servera laika." +msgstr[2] "Piezīme: Tavs laiks ir %s stundas pirms servera laika." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Piezīme: Tavs laiks ir %s stundas pēc servera laika." +msgstr[1] "Piezīme: Tavs laiks ir %s stundu pēc servera laika." +msgstr[2] "Piezīme: Tavs laiks ir %s stundas pēc servera laika." + +msgid "Choose a Time" +msgstr "Izvēlies laiku" + +msgid "Choose a time" +msgstr "Izvēlieties laiku" + +msgid "Cancel" +msgstr "Atcelt" + +msgid "Today" +msgstr "Šodien" + +msgid "Choose a Date" +msgstr "Izvēlies datumu" + +msgid "Yesterday" +msgstr "Vakar" + +msgid "Tomorrow" +msgstr "Rīt" + +msgid "January" +msgstr "janvāris" + +msgid "February" +msgstr "februāris" + +msgid "March" +msgstr "marts" + +msgid "April" +msgstr "aprīlis" + +msgid "May" +msgstr "maijs" + +msgid "June" +msgstr "jūnijs" + +msgid "July" +msgstr "jūlijs" + +msgid "August" +msgstr "augusts" + +msgid "September" +msgstr "septembris" + +msgid "October" +msgstr "oktobris" + +msgid "November" +msgstr "novembris" + +msgid "December" +msgstr "decembris" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jūn" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jūl" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dec" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Sv" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Pr" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "O" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "T" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pk" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Se" + +msgid "Show" +msgstr "Parādīt" + +msgid "Hide" +msgstr "Slēpt" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0acf0fec229b7e46c9be1aee0c685eae201dbebc GIT binary patch literal 15611 zcmc(ldyt)Fea9aW5CV8XydbDg#K1^bl59&#?rx$Lq^ zGz0}|y%0c&NKn+uI8*78WX(`+J`E+;%sH zaXP+}=X~Gyd7sPg{`)=e=I_rv^|OxaG1`T+pPcI4--6Gc$q&~V=Q#Ho@J#Tv;G4k< zz{|n+f!o20!EeO=zXLDh`DdW!UHo$AP6yY5F9SD%F9qKXo(L{|&f|=O2KO;C=#%zW)R@?lczB z{%3*W?_5y(ybZhr+yrXBBKRh-9^XF<-o^7bz&pWo<0I1 zO1B@>zF!8#&r_hreKS7Kf!gmo@%j6p?Di+%S>PE6|IOfepa?gyFTz5t}yEubQg)axi_j#b!y9ktAF9pTtRS~a_?>B>@b1SIz-Uo`#JScxH zf&0KaLHYT=gLiLEzx|->cmoJ4ZW|~$l|ZdC0ZI;^1fKz)0)GhJ&LYy| z`iqec(Y*`}{e$9{d$3x-N&POTaB4OS>}ob?{;EAh?c~ z11~`z;2-gP7RvcA@EK6+KaDeJ{&V1E;6H<+|AI?{{a+4B4(|eYfwzI{z@xGMm*D$( zK4n$#yAOimBLSs{NiYjO07?%(2EPXW0z4ahtUt*0DNxUU4N5-W14Z9|fYQgAnXvAa zATI9S4W0_-!PQ^^l)ruf)c8LEJ@^mcGEkkU%AEy@t^p9z-PNE6i=gEEDezkGo1pCM z*WmTw`3QdtI1Ii3ejR)c{3M$f!FR0*apEW_yZ=6@eSQsU-DPigj(_g${D|IBP;`AB z6kT5hF9-hu^x*%3vR{vJXxuvR)!_9Ys&^j%waz|p2s{#>e+tSUmZMDVy9v}fB@orR zPkdZxR&R?x+3g<#yf-EUI?B={~GY+;Cc{I zyRG24;N773`V1&J9FF)cP<(tB6rKM9O5bN+8RT{;D7{_>{v&uJDEarp$S%cnbJ$pw|C+>^~1Ca0$0M;(I|}xsQUP`#2~%e+jSvo zkNAOzDcsG?9@?$3L$bS%Hc1<%$yaZqjnZU4zel@^R-ipfOE2kC7ixE(wY$KdWQ(iX zbpyX=(5m6l=$CAC)oAaxyHKB97w-kI)xkqTSYhAKG zUDE3qZ6i%FLRW?MdD<%4owNsOx;{fo>@NJQ1KvlI4sHxx?o;3e@qQb)Io>}U@spr* zGERGl_J_3XG+pnZokNq4zLfR=O?JJXR;KCN7r%Nw?(_z{Fy6lkl>OgK`w;CFG}+(BX{XV2 z;d1VCG}-SOnyyo5TkS6VoC)B%?wZ*5K`>AIDD7Re9kc=3c{EQ;uLd_Sqg@$0c7gJ@ zO|;k14$!WpeS&s2?JU|wwEJm)K&#U}Leq6RZ8>d34_xxYA==e6T{r2+UpwVj^os=*uV(9oN}29lFU91nU| zX_V{M9p6u8Yd$xYEsrL7Uu)!YNv$^0C>EzOiw;hz$%#iNRTi%%wMMa?F3`~>3bgvJ zFk)9qO}$dj7I|mb>a8WkBv()J?wVrJFZpuNS4Mc7Gq&1Oawd#x42Ik_c~;5i85h_N z4>f~qxl$iXs=O;z@<|afX=J;1BB>5nYDpBRULvX&_CCI%uQGfG1g@;Tu=ijl^cxhy z*4=7>2je53ttaeIp7OeL*C5cTN(0fyo5^gs?&}o~B}qN;PzGUPqg17DS<#o&a@p}D zzbmESEgQUqgd{X!q*5$aCJW_JG*M)iyf4&~Qq4~m7&Dy2weyJOBz8|l+9D%0ttGY$ zBw?22yof1OUkni&+{SDfeWdKS^tI7U)CKS>YU$k=hF_^p4Rv&tru;Y#Fj=YQ(^0+8 z9XzEv4=WGF8F~NVkwQ|;*Y;%G#$uAK`Y=Tfwy{{q?eR7)-5*sD>kCgpl@YRGNM*0aOeTH=#xwNlk%GEgs+61(HISwjS0 z!n+FN#l*)Q)BZ)+3KJuh7{ZFaPIKNhUTjpeGWjrWLqyn@pX`yDe>iNi$BaA->oNZf zufjx`+zH~3pR6>BdFTLEfsB67jw=N?x?Wn3*|QFseeWeSNY*aUGbpmvpEZnK3_>{*EIX0-@uXTR z)M{8^Pl#xHe0^#>sVNYoLhB~C!$jhMG^+fTx_PnN{0>Ed4{y4Ij92MRow2t@v<$D@ zrb@0+!bL-B-CW8RioD5_zG_2mb7{OjPC%sYst-(^62^% zeR>QDXzf7k%(NCrUs~i$BUZ+3v9#~DRH~zudOaxz^GM%&HcBUMaMxAb_2hHQEZ2v~ z=&rBea{0<+Syr&Jgq($)hU0oLiN|P(G!iDrKi+6FF$?uO($XsW5@rM5@E47T&tN zr9N56VMrA}si|d8iYkmuSzV-Xrt(E9j+Cl4jSJ$!7@N3g2SBAx=D;V0kSk2nO$V z5UuUUC?R5iR%Nz3Q89})&|e-YvAX8i@QFe)8J}tjD{cn`NNx;JJ*-Nnbtm?N|8)0- zCBk^sA-&bJ)w+#htEkR!_1e>mE;?(45W}3+3Hj2cSZEB3mrvSNU-Y zx598yMx4tMS7mu)49FI%Nj9%;0v7%GjQ7z7Rm~(gXio;P9Wu6ScP*tt$~MI+FzxO$ z*G}qLU&1oRn91!Fns+;?1Bcws3ITxM(NPM&)FN*w?=BPCT|~tVQbgU|LZWfE%8v9S zlQAR=OD^HT?ruwpIb!-McY9KEw{sB567RDOTng(Xf1l? zq-Y^C;*gLoKg{^stm4xNr&u6xGNxD=Rk&ub&lg5UD5K5!OxGKX1O*W}g@kWeAdOwn zcM1Cv`I5qflx`a(mX%Y5X{)Fb(cVtULFG!!3<*gyjb@%G)@3mn(NS&Bl?j;Y@qaYW zOD`f-L5yJ+=C$ypAcZ=5XLlU2GcE)OKT^z&ruSColY?FGWU@=GhVWcerdJGfS{_MN z3+O4mpK_sw^M!nRS53yNP6dJ6R;}oC+J8g7|JJ0cnsLbIt?XI0JsHO>`?uCc3;F(Q z8>6-Uos}WKY}?KK+mnfchW6_KGUV3`u36nbcxC^ZHGc4lp*5>79pqYeBl)O*XEj@{ zak#8hhrHbvMv}YywV1@(^^7QwHejKDC!RN?nj*@?I*sa2{C`EocM)z+=K%7@!^ zePzGGuO9U4*7?=`;){KF9Q4b1UcJ(9@PmHHufA%T^UWul&o}4h_cmvmN3gBlZ#T^c zn@5_@HfNj9HD~AVncv62>G}J(KhT`^bWStJzV5ga9H;coB4o{LjplUoQ1h5gjb%{t zndZ#=1I-yffA9P~(4&Xvnsc6gkFxs=4>OwA`K_m8rCEsRSc#QSyv}TE9sA^C%paY< zw|QK9%qR`Ueg#A zJ{g%X;u@mjL8yqD=z17(%|~p%Y4&7X#{+8xIra3`x}TBW1ChY=t3%f+9q&62>Ey?b zVN%-MBA=gnhh*B54k7)=nls{NNuz5?uXW=YjMmTycIuk@k<)S6&N0mTK*vj)&^!$B zdu31F3}{9JX3QF~ylLGS=UUS@4>xDMsclx)8ATF8S(>t6*!#r7qdUiy4ZfvjlyL~6 z;*P=iXZ`%+^kDe2f&5_WQm^*HOq#Q%$Z42iu-rxqFg)b|(oRTvbf0v|KtA)2riRG< z-26UlB5>6HT(*#MSa@dsfCL2{Y|Otokth}jAI(G1eKb%lBH3Cm51ky7xI+h1fz=JJ zc~FZ#%i`bEjr76F+@&0tPC6|5Kr2>Y1sxA6Dw+puS;e`I&}B=7@G@&3=9*t*z+8+t zNZo=QB^;!%!VN$aAG;~55-)mDM*v|m;z=^>^DMStxL&L;Zd_Wdo2kvHV{tW zam`0fDu--W9=|AaGE*S#^oR;}9#199AXzoxf!>F0`v(GTEG3ti7LghiGK^W6`8XTc z#*gT=9DZQ_es1qk2#GyWZmHErQ)oR#bA@BMpBY7T$RO{IfhVV~lbO&NB->vyO~0+_ z7`*hIJ|pF&K5h1nLuSOA)QdTL=qqP)KXMIGi-?LW%_Wtsm;9rPNnQ%>40%irO2GGy zt45GxvmCwBk1G( z5Rn&Wq00v_rY<@De^S>QM}v^N$XTWR=VE|WvLsP3%mO1}j9c??e4Y@dH?VjF9pF~M z-_VfE!qSnniHS>Ximi*~x&=CC$=N`srm6bt(eR@3QW$CH93v}LaGG;otnKyYoNh8K z_d{XG7Ypokajl*Vl_8%Y!jrbSUaj^BENT={cBo9XqV&F(2p3DDP93GvY}X{6dNRZA z)>D@a^)m08pRtf`NkkRn62<-ri?V17?UkTtdj5bCk*ZHs%a&%Lt95$dtF%5+v-uGT zR5PGW30UDDJ9o{8Bo`^sY({;OM^9#n8BNumBHld=Q{q!)^BcZr_paZy1c`-b&stCp z^z2I2`c>ZP#6SXdO+3*EA$y4qX2dCTzm$@l#XQCoN*)$ z#hwsqlrTbMf=L{)bGYo7x{)BpJ1Xz=FylitDVsus8BZZdoykI+D0)`a7&cB%j~3n1 z@(n3K??Kt2sRNqZ4?#qM><~-HkPvQWhrHW!9%b_LvMb1vJtzUraBEg(HIE7wq0=?!EtS^-|j~H223gEL)7;d9(*okNs z3oSb`2Pf~a4A*?JtFjC^O>#CW*#~u)`ek^kk^<2%Wpe0pDcAfG+=Q56^}u{9|9AUd z@T&!JRz?b=C%J@5-rmCK3URE{FT_419(0D0=1pp{HYH(2h-ig&$~bJBS{;mxVNC;- z2aeC*iwZgxnr=QD-gYk&5_o%=SfwqwOr%GaoH7foDtg&}ju?c6TOjHDrn)c?2DfIo z>IwW)8bKr${aI!o{;M#q-NbU}pTV4tv;<(RA|N!Cp7A7ANk?KMl14?7qih>elo6sO z8KHVrhZ_biBB^c$u_R>M6_J-pDSY6A?NqXovw~3Y5-nubByHU%-VjGO%i2(^^kgt4TVBAQ`>JGZ{!?RHu!5CRnUiw0eTwJ1AJtVM#$N6I@xg<&X=#^gtBGiB8*c{WN0) z(WSMJMLRZt$&RS#noq*KOb=39wO)n8zzBDXIW3;JRv74I<+#DqhG7My8klwn`d-?2v~g4@K-!55iO0T zUq7tSH_}g{NM&h@K_Lt23)tSkwn~;5yn2jv@jnGNzrs=-pQ_QDxu4W!YsRm5I&v@k z^I-E!4A+MwG^psVAcn4O{P|#w<=WgB|G2Q>24nHiF_@0%`e+jslgcP z`hyXB;feQPf-%d!n0&{sI9RLNQq)q2RFJlaWTzRV+cE^g8*{9hNWl!!c?6~M zZPTe_L!0yXlm2WN{*GZ5XTdan%tKR5l^EDV5zS=P2{L+ePp#(ktUR$D2Nk~P8haL>uEd2BRuuu~|EUJwk3@H*QCS-x(Z_VaiDj=fQX?}E-AoLTtN|$$tk(jtzK}d8p zk1Y~ptd3dA&pHAKAt zZqQlB+%s?|*4u|Re50LvF;FYw#0wRZ#H1}8KYS`{IY_tnwYWYeC$V!SG++!}-!ELp zFa)yXFg8NR&F8e`{Kt3_4SXj@fC|wR<#ITSOUPJ;-ule%jL%Rb9F1$Vj;E3L&f)Sv JrnJa({|AQb+U5WN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..861cde4fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,705 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dimce Grozdanoski , 2021 +# dekomote , 2015 +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017,2019,2021 +# Vasil Vangelovski , 2013-2015 +# Vasil Vangelovski , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 07:21+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Избриши ги избраните %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно беа избришани %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не може да се избрише %(name)s" + +msgid "Are you sure?" +msgstr "Сигурни сте?" + +msgid "Administration" +msgstr "Администрација" + +msgid "All" +msgstr "Сите" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Непознато" + +msgid "Any date" +msgstr "Било кој датум" + +msgid "Today" +msgstr "Денеска" + +msgid "Past 7 days" +msgstr "Последните 7 дена" + +msgid "This month" +msgstr "Овој месец" + +msgid "This year" +msgstr "Оваа година" + +msgid "No date" +msgstr "Нема датум" + +msgid "Has date" +msgstr "Има датум" + +msgid "Empty" +msgstr "Празно" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ве молиме внесете ги точните %(username)s и лозинка за член на сајтот. " +"Внимавајте, двете полиња се осетливи на големи и мали букви." + +msgid "Action:" +msgstr "Акција:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Додади уште %(verbose_name)s" + +msgid "Remove" +msgstr "Отстрани" + +msgid "Addition" +msgstr "Додавање" + +msgid "Change" +msgstr "Измени" + +msgid "Deletion" +msgstr "Бришење" + +msgid "action time" +msgstr "време на акција" + +msgid "user" +msgstr "корисник" + +msgid "content type" +msgstr "тип на содржина" + +msgid "object id" +msgstr "идентификационен број на објект" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "репрезентација на објект" + +msgid "action flag" +msgstr "знакче за акција" + +msgid "change message" +msgstr "измени ја пораката" + +msgid "log entry" +msgstr "ставка во записникот" + +msgid "log entries" +msgstr "ставки во записникот" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Додадено “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Избришано “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Запис во дневник" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Додадено." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Изменети {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Избришан {name} “{object}”." + +msgid "No fields changed." +msgstr "Не е изменето ниедно поле." + +msgid "None" +msgstr "Ништо" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Држете “Control” или “Command” на Mac за да изберете повеќе." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Успешно беше додадено {name} “{obj}”." + +msgid "You may edit it again below." +msgstr "Можете повторно да го промените подолу." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Мора да се одберат предмети за да се изврши акција врз нив. Ниеден предмет " +"не беше променет." + +msgid "No action selected." +msgstr "Ниедна акција не е одбрана." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Додади %s" + +#, python-format +msgid "Change %s" +msgstr "Измени %s" + +#, python-format +msgid "View %s" +msgstr "Погледни %s" + +msgid "Database error" +msgstr "Грешка во базата на податоци" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s ставка %(name)s беше успешно изменета." +msgstr[1] "%(count)s ставки %(name)s беа успешно изменети." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s одбран" +msgstr[1] "Сите %(total_count)s одбрани" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 од %(cnt)s избрани" + +#, python-format +msgid "Change history: %s" +msgstr "Историја на измени: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Бришењето на %(class_name)s %(instance)s бара бришење на следните заштитени " +"поврзани објекти: %(related_objects)s" + +msgid "Django site admin" +msgstr "Администрација на Џанго сајт" + +msgid "Django administration" +msgstr "Џанго администрација" + +msgid "Site administration" +msgstr "Администрација на сајт" + +msgid "Log in" +msgstr "Најава" + +#, python-format +msgid "%(app)s administration" +msgstr "Администрација на %(app)s" + +msgid "Page not found" +msgstr "Страницата не е најдена" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Дома" + +msgid "Server error" +msgstr "Грешка со серверот" + +msgid "Server error (500)" +msgstr "Грешка со серверот (500)" + +msgid "Server Error (500)" +msgstr "Грешка со серверот (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Изврши ја избраната акција" + +msgid "Go" +msgstr "Оди" + +msgid "Click here to select the objects across all pages" +msgstr "Кликнете тука за да изберете објекти низ сите страници" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Избери ги сите %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Откажи го изборот" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Модели во %(name)s апликација" + +msgid "Add" +msgstr "Додади" + +msgid "View" +msgstr "Погледни" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Внесете корисничко име и лозинка." + +msgid "Change password" +msgstr "Промени лозинка" + +msgid "Please correct the error below." +msgstr "Ве молиме поправете ја грешката подолу." + +msgid "Please correct the errors below." +msgstr "Ве молам поправете ги грешките подолу." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Внесете нова лозинка за корисникот %(username)s." + +msgid "Welcome," +msgstr "Добредојдовте," + +msgid "View site" +msgstr "Посети го сајтот" + +msgid "Documentation" +msgstr "Документација" + +msgid "Log out" +msgstr "Одјава" + +#, python-format +msgid "Add %(name)s" +msgstr "Додади %(name)s" + +msgid "History" +msgstr "Историја" + +msgid "View on site" +msgstr "Погледни на сајтот" + +msgid "Filter" +msgstr "Филтер" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Отстрани од сортирање" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Приоритет на сортирање: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Вклучи/исклучи сортирање" + +msgid "Delete" +msgstr "Избриши" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Бришење на %(object_name)s '%(escaped_object)s' ќе резултира со бришење на " +"поврзаните објекти, но со вашата сметка немате доволно привилегии да ги " +"бришете следните типови на објекти:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Бришење на %(object_name)s '%(escaped_object)s' ќе резултира со бришење на " +"следниве заштитени објекти:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Сигурне сте дека сакате да ги бришете %(object_name)s „%(escaped_object)s“? " +"Сите овие ставки ќе бидат избришани:" + +msgid "Objects" +msgstr "Предмети" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "Не, врати ме назад" + +msgid "Delete multiple objects" +msgstr "Избриши повеќе ставки" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Бришење на избраните %(objects_name)s ќе резултира со бришење на поврзани " +"објекти, но немате одобрување да ги избришете следниве типови објекти:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Бришење на избраните %(objects_name)s бара бришење на следните поврзани " +"објекти кои се заштитени:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Дали сте сигурни дека сакате да го избришете избраниот %(objects_name)s? " +"Сите овие објекти и оние поврзани со нив ќе бидат избришани:" + +msgid "Delete?" +msgstr "Избриши?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Според %(filter_title)s " + +msgid "Summary" +msgstr "Резиме" + +msgid "Recent actions" +msgstr "Последни акции" + +msgid "My actions" +msgstr "Мои акции" + +msgid "None available" +msgstr "Ништо не е достапно" + +msgid "Unknown content" +msgstr "Непозната содржина" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Најавени сте како %(username)s, но не сте авторизирани да пристапите до " +"оваа страна. Сакате ли да се најавите како друг корисник?" + +msgid "Forgotten your password or username?" +msgstr "Ја заборавивте вашата лозинка или корисничко име?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Датум/час" + +msgid "User" +msgstr "Корисник" + +msgid "Action" +msgstr "Акција" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Прикажи ги сите" + +msgid "Save" +msgstr "Сними" + +msgid "Popup closing…" +msgstr "Попапот се затвара..." + +msgid "Search" +msgstr "Барај" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s резултат" +msgstr[1] "%(counter)s резултати" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "вкупно %(full_result_count)s" + +msgid "Save as new" +msgstr "Сними како нова" + +msgid "Save and add another" +msgstr "Сними и додади уште" + +msgid "Save and continue editing" +msgstr "Сними и продолжи со уредување" + +msgid "Save and view" +msgstr "Сними и прегледај" + +msgid "Close" +msgstr "Затвори" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Промени ги избраните %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Додади уште %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Избриши ги избраните %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Најавете се повторно" + +msgid "Password change" +msgstr "Измена на лозинка" + +msgid "Your password was changed." +msgstr "Вашата лозинка беше сменета." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Промени ја мојата лозинка" + +msgid "Password reset" +msgstr "Ресетирање на лозинка" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Вашата лозинка беше поставена. Сега можете да се најавите." + +msgid "Password reset confirmation" +msgstr "Одобрување за ресетирање на лозинка" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Ве молам внесете ја вашата нова лозинка двапати за да може да бидете сигурни " +"дека правилно сте ја внеле." + +msgid "New password:" +msgstr "Нова лозинка:" + +msgid "Confirm password:" +msgstr "Потврди лозинка:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Врската за ресетирање на лозинката беше невалидна, најверојатно бидејќи веќе " +"била искористена. Ве молам повторно побарајте ресетирање на вашата лозинката." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Го примате овој email бидејќи побаравте ресетирање на лозинка како корисник " +"на %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ве молам одете на следната страница и внесете нова лозинка:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Ви благодариме што го користите овој сајт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Тимот на %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Email адреса:" + +msgid "Reset my password" +msgstr "Ресетирај ја мојата лозинка" + +msgid "All dates" +msgstr "Сите датуми" + +#, python-format +msgid "Select %s" +msgstr "Изберете %s" + +#, python-format +msgid "Select %s to change" +msgstr "Изберете %s за измена" + +#, python-format +msgid "Select %s to view" +msgstr "Изберете %s за прегледување" + +msgid "Date:" +msgstr "Датум:" + +msgid "Time:" +msgstr "Време:" + +msgid "Lookup" +msgstr "Побарај" + +msgid "Currently:" +msgstr "Моментално:" + +msgid "Change:" +msgstr "Измени:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c87ddf6d38087f458e431ae5e43c61d77e969d69 GIT binary patch literal 4719 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..bd7201027 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016 +# Vasil Vangelovski , 2014 +# Vasil Vangelovski , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 11:28+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Достапно %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ова е листа на достапни %s. Можете да изберете неколку кликајќи на нив во " +"полето подолу и со кликање на стрелката \"Одбери\" помеѓу двете полиња." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Пишувајте во ова поле за да ја филтрирате листата на достапни %s." + +msgid "Filter" +msgstr "Филтер" + +msgid "Choose all" +msgstr "Одбери ги сите ги сите" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Кликнете за да ги одберете сите %s од еднаш." + +msgid "Choose" +msgstr "Одбери" + +msgid "Remove" +msgstr "Отстрани" + +#, javascript-format +msgid "Chosen %s" +msgstr "Одбрано %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ова е листа на избрани %s. Можете да отстраните неколку кликајќи на нив во " +"полето подолу и со кликање на стрелката \"Отстрани\" помеѓу двете полиња." + +msgid "Remove all" +msgstr "Отстрани ги сите" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Кликнете за да ги отстраните сите одбрани %s одеднаш." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "избрано %(sel)s од %(cnt)s" +msgstr[1] "одбрани %(sel)s од %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Имате незачувани промени на поединечни полиња. Ако извршите акција вашите " +"незачувани промени ќе бидат изгубени." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "Сега" + +msgid "Midnight" +msgstr "Полноќ" + +msgid "6 a.m." +msgstr "6 наутро" + +msgid "Noon" +msgstr "Пладне" + +msgid "6 p.m." +msgstr "6 попладне" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Забелешка: Вие сте %s час понапред од времето на серверот." +msgstr[1] "Забелешка: Вие сте %s часа понапред од времето на серверот." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Забелешка: Вие сте %s час поназад од времето на серверот." +msgstr[1] "Забелешка: Вие сте %s часа поназад од времето на серверот." + +msgid "Choose a Time" +msgstr "Одбери време" + +msgid "Choose a time" +msgstr "Одбери време" + +msgid "Cancel" +msgstr "Откажи" + +msgid "Today" +msgstr "Денеска" + +msgid "Choose a Date" +msgstr "Одбери датум" + +msgid "Yesterday" +msgstr "Вчера" + +msgid "Tomorrow" +msgstr "Утре" + +msgid "January" +msgstr "Јануари" + +msgid "February" +msgstr "Февруари" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Мај" + +msgid "June" +msgstr "Јуни" + +msgid "July" +msgstr "Јули" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Септември" + +msgid "October" +msgstr "Октомври" + +msgid "November" +msgstr "Ноември" + +msgid "December" +msgstr "Декември" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Прикажи" + +msgid "Hide" +msgstr "Сокриј" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f75d3d6ae29bd43cee3e22dd03f7309c8eec04f4 GIT binary patch literal 20830 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, 2014 +# Hrishikesh , 2019-2020 +# Jannis Leidel , 2011 +# JOMON THOMAS LOBO , 2019 +# Junaid , 2012 +# MUHAMMED RAMEEZ , 2019 +# Rajeesh Nair , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)sവിജയകയരമായി നീക്കം ചെയ്തു." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s നീക്കം ചെയ്യാന്‍ കഴിയില്ല." + +msgid "Are you sure?" +msgstr "തീര്‍ച്ചയാണോ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "തെരഞ്ഞെടുത്ത %(verbose_name_plural)s നീക്കം ചെയ്യുക." + +msgid "Administration" +msgstr "കാര്യനിർവഹണം" + +msgid "All" +msgstr "മുഴുവനും" + +msgid "Yes" +msgstr "അതെ" + +msgid "No" +msgstr "അല്ല" + +msgid "Unknown" +msgstr "അറിയില്ല" + +msgid "Any date" +msgstr "ഏതെങ്കിലും തീയ്യതി" + +msgid "Today" +msgstr "ഇന്ന്" + +msgid "Past 7 days" +msgstr "കഴിഞ്ഞ 7 ദിവസങ്ങൾ" + +msgid "This month" +msgstr "ഈ മാസം" + +msgid "This year" +msgstr "ഈ വര്‍ഷം" + +msgid "No date" +msgstr "തിയ്യതിയില്ല " + +msgid "Has date" +msgstr "തിയ്യതിയുണ്ട്" + +msgid "Empty" +msgstr "കാലി" + +msgid "Not empty" +msgstr "കാലിയല്ല" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"ദയവായി സ്റ്റാഫ് അക്കൗണ്ടിനുവേണ്ടിയുള്ള ശരിയായ %(username)s പാസ്‌വേഡ് എന്നിവ നൽകുക. രണ്ടു " +"കള്ളികളിലും അക്ഷരങ്ങള്‍ വലിയക്ഷരമോ ചെറിയക്ഷരമോ എന്നത് പ്രധാനമാണെന്നത് ശ്രദ്ധിയ്ക്കുക." + +msgid "Action:" +msgstr "ആക്ഷന്‍" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "മറ്റൊരു %(verbose_name)s കൂടി ചേര്‍ക്കുക" + +msgid "Remove" +msgstr "കളയുക" + +msgid "Addition" +msgstr "ചേർക്കുക" + +msgid "Change" +msgstr "മാറ്റുക" + +msgid "Deletion" +msgstr "കളയുക" + +msgid "action time" +msgstr "നടന്ന സമയം" + +msgid "user" +msgstr "ഉപയോക്താവ്" + +msgid "content type" +msgstr "കണ്ടന്റ് ടൈപ്പ്" + +msgid "object id" +msgstr "ഒബ്ജക്റ്റിന്റെ ഐഡി" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ഒബ്ജെക്ട് റെപ്രസന്റേഷൻ" + +msgid "action flag" +msgstr "ആക്ഷന്‍ ഫ്ളാഗ്" + +msgid "change message" +msgstr "സന്ദേശം മാറ്റുക" + +msgid "log entry" +msgstr "ലോഗ് എൻട്രി" + +msgid "log entries" +msgstr "ലോഗ് എൻട്രികള്‍" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” ചേർത്തു." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” മാറ്റം വരുത്തി — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "ലോഗ്‌എന്‍ട്രി ഒബ്ജെക്റ്റ്" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "ചേര്‍ത്തു." + +msgid "and" +msgstr "കൂടാതെ" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "ഒരു മാറ്റവുമില്ല." + +msgid "None" +msgstr "ഒന്നുമില്ല" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "താഴെ നിങ്ങൾക്കിത് വീണ്ടും എഡിറ്റുചെയ്യാം" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "ആക്ഷന്‍ നടപ്പിലാക്കേണ്ട വകകള്‍ തെരഞ്ഞെടുക്കണം. ഒന്നിലും മാറ്റങ്ങൾ വരുത്തിയിട്ടില്ല." + +msgid "No action selected." +msgstr "ആക്ഷനൊന്നും തെരഞ്ഞെടുത്തിട്ടില്ല." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s ചേര്‍ക്കുക" + +#, python-format +msgid "Change %s" +msgstr "%s മാറ്റാം" + +#, python-format +msgid "View %s" +msgstr "%s കാണുക" + +msgid "Database error" +msgstr "ഡേറ്റാബേസ് എറർ." + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ല്‍ മാറ്റം വരുത്തി." +msgstr[1] "%(count)s %(name)s വിജയകരമായി മാറ്റി" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s തെരഞ്ഞെടുത്തു." +msgstr[1] "%(total_count)sമൊത്തമായി തെരഞ്ഞെടുത്തു." + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s ല്‍ 0 തിരഞ്ഞെടുത്തിരിക്കുന്നു" + +#, python-format +msgid "Change history: %s" +msgstr "%s ലെ മാറ്റങ്ങള്‍." + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +" %(class_name)s %(instance)s നീക്കം ചെയ്യണമെങ്കിൽ അതിനോട് ബന്ധപ്പെട്ടതായ താഴെപ്പറയുന്ന " +"എല്ലാ വസ്തുക്കളും നീക്കം ചെയ്യുന്നതാണ്: %(related_objects)s" + +msgid "Django site admin" +msgstr "ജാംഗോ സൈറ്റ് അഡ്മിന്‍" + +msgid "Django administration" +msgstr "ജാംഗോ കാര്യനിർവഹണം" + +msgid "Site administration" +msgstr "സൈറ്റ് കാര്യനിർവഹണം" + +msgid "Log in" +msgstr "ലോഗിൻ" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s കാര്യനിർവഹണം" + +msgid "Page not found" +msgstr "പേജ് കണ്ടെത്താനായില്ല" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "ക്ഷമിക്കണം, ആവശ്യപ്പെട്ട പേജ് കണ്ടെത്താന്‍ കഴിഞ്ഞില്ല." + +msgid "Home" +msgstr "പൂമുഖം" + +msgid "Server error" +msgstr "സെര്‍വറിൽ എന്തോ പ്രശ്നം" + +msgid "Server error (500)" +msgstr "സെര്‍വറിൽ എന്തോ പ്രശ്നം (500)" + +msgid "Server Error (500)" +msgstr "സെര്‍വറിൽ എന്തോ പ്രശ്നം (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "തെരഞ്ഞെടുത്ത ആക്ഷന്‍ നടപ്പിലാക്കുക" + +msgid "Go" +msgstr "തുടരുക" + +msgid "Click here to select the objects across all pages" +msgstr "എല്ലാ പേജിലേയും ഒബ്ജക്റ്റുകൾ തെരഞ്ഞെടുക്കാന്‍ ഇവിടെ ക്ലിക് ചെയ്യുക." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "മുഴുവന്‍ %(total_count)s %(module_name)s ഉം തെരഞ്ഞെടുക്കുക" + +msgid "Clear selection" +msgstr "തെരഞ്ഞെടുത്തത് റദ്ദാക്കുക." + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s മാതൃകയിലുള്ള" + +msgid "Add" +msgstr "ചേര്‍ക്കുക" + +msgid "View" +msgstr "കാണുക" + +msgid "You don’t have permission to view or edit anything." +msgstr "നിങ്ങൾക്ക് ഒന്നും കാണാനോ തിരുത്താനോ ഉള്ള അനുമതിയില്ല." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"ആദ്യമായി ഒരു യൂസർനെയിമും പാസ്‌‌വേഡും നൽകുക. തുടർന്ന്, നിങ്ങൾക്ക് കൂടുതൽ കാര്യങ്ങളിൽ മാറ്റം " +"വരുത്താവുന്നതാണ്" + +msgid "Enter a username and password." +msgstr "Enter a username and password." + +msgid "Change password" +msgstr "പാസ് വേര്‍ഡ് മാറ്റുക." + +msgid "Please correct the error below." +msgstr "താഴെ പറയുന്ന തെറ്റുകൾ തിരുത്തുക " + +msgid "Please correct the errors below." +msgstr "ദയവായി താഴെയുള്ള തെറ്റുകള്‍ പരിഹരിക്കുക." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s ന് പുതിയ പാസ് വേര്‍ഡ് നല്കുക." + +msgid "Welcome," +msgstr "സ്വാഗതം, " + +msgid "View site" +msgstr "സൈറ്റ് കാണുക " + +msgid "Documentation" +msgstr "സഹായക്കുറിപ്പുകള്‍" + +msgid "Log out" +msgstr "പുറത്ത് കടക്കുക." + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ചേര്‍ക്കുക" + +msgid "History" +msgstr "ചരിത്രം" + +msgid "View on site" +msgstr "View on site" + +msgid "Filter" +msgstr "അരിപ്പ" + +msgid "Clear all filters" +msgstr "എല്ലാ ഫിൽറ്ററുകളും ഒഴിവാക്കുക" + +msgid "Remove from sorting" +msgstr "ക്രമീകരണത്തില്‍ നിന്നും ഒഴിവാക്കുക" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "ക്രമീകരണത്തിനുള്ള മുന്‍ഗണന: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "ക്രമീകരണം വിപരീത ദിശയിലാക്കുക." + +msgid "Delete" +msgstr "നീക്കം ചെയ്യുക" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s ഡിലീറ്റ് ചെയ്യുമ്പോള്‍ അതുമായി ബന്ധമുള്ള " +"വസ്തുക്കളുംഡിലീറ്റ് ആവും. പക്ഷേ നിങ്ങള്‍ക്ക് താഴെ പറഞ്ഞ തരം വസ്തുക്കള്‍ ഡിലീറ്റ് ചെയ്യാനുള്ള അനുമതി " +"ഇല്ല:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"തിരഞ്ഞെടുക്കപ്പെട്ട %(object_name)s '%(escaped_object)s' നീക്കം ചെയ്യണമെങ്കിൽ അതിനോട് " +"ബന്ധപ്പെട്ടതായ താഴെപ്പറയുന്ന എല്ലാ വസ്തുക്കളും നീക്കം ചെയ്യുന്നതാണ്:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?അതുമായി ബന്ധമുള്ള " +"താഴെപ്പറയുന്ന വസ്തുക്കളെല്ലാം നീക്കം ചെയ്യുന്നതാണ്:" + +msgid "Objects" +msgstr "വസ്തുക്കൾ" + +msgid "Yes, I’m sure" +msgstr "അതെ, എനിക്കുറപ്പാണ്" + +msgid "No, take me back" +msgstr "ഇല്ല, എന്നെ തിരിച്ചെടുക്കൂ" + +msgid "Delete multiple objects" +msgstr "ഒന്നിലേറെ വസ്തുക്കള്‍ നീക്കം ചെയ്യുക" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"തിരഞ്ഞെടുക്കപ്പെട്ട %(objects_name)s നീക്കം ചെയ്താൽ അതിനോട് ബന്ധപ്പെട്ടതായ താഴെപ്പറയുന്ന " +"എല്ലാ വസ്തുക്കളും നീക്കം ചെയ്യുന്നതാണ്, പക്ഷെ അതിനുളള അവകാശം അക്കൗണ്ടിനില്ല:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"തിരഞ്ഞെടുക്കപ്പെട്ട %(objects_name)s നീക്കം ചെയ്യണമെങ്കിൽ അതിനോട് ബന്ധപ്പെട്ടതായ " +"താഴെപ്പറയുന്ന എല്ലാ വസ്തുക്കളും നീക്കം ചെയ്യുന്നതാണ്:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"തിരഞ്ഞെടുക്കപ്പെട്ട %(objects_name)s നീക്കം ചെയ്യണമെന്നു ഉറപ്പാണോ ? തിരഞ്ഞെടുക്കപ്പെട്ടതും " +"അതിനോട് ബന്ധപ്പെട്ടതും ആയ എല്ലാ താഴെപ്പറയുന്ന വസ്തുക്കളും നീക്കം ചെയ്യുന്നതാണ്:" + +msgid "Delete?" +msgstr "ഡിലീറ്റ് ചെയ്യട്ടെ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s ആൽ" + +msgid "Summary" +msgstr "ചുരുക്കം" + +msgid "Recent actions" +msgstr "സമീപകാല പ്രവൃത്തികൾ" + +msgid "My actions" +msgstr "എന്റെ പ്രവർത്തനം" + +msgid "None available" +msgstr "ഒന്നും ലഭ്യമല്ല" + +msgid "Unknown content" +msgstr "ഉള്ളടക്കം അറിയില്ല." + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്ന %(username)s, നു ഈ പേജ് കാണാൻ അനുവാദം ഇല്ല . താങ്കൾ " +"മറ്റൊരു അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്യാന് ആഗ്രഹിക്കുന്നുവോ ?" + +msgid "Forgotten your password or username?" +msgstr "രഹസ്യവാക്കോ ഉപയോക്തൃനാമമോ മറന്നുപോയോ?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "തീയതി/സമയം" + +msgid "User" +msgstr "ഉപയോക്താവ്" + +msgid "Action" +msgstr "പ്രവർത്തി" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "എല്ലാം കാണട്ടെ" + +msgid "Save" +msgstr "സേവ് ചെയ്യണം" + +msgid "Popup closing…" +msgstr "പോപ്പ് അപ്പ് അടക്കുക " + +msgid "Search" +msgstr "പരതുക" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s results" +msgstr[1] "%(counter)s ഫലം" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ആകെ %(full_result_count)s" + +msgid "Save as new" +msgstr "പുതിയതായി സേവ് ചെയ്യണം" + +msgid "Save and add another" +msgstr "സേവ് ചെയ്ത ശേഷം വേറെ ചേര്‍ക്കണം" + +msgid "Save and continue editing" +msgstr "സേവ് ചെയ്ത ശേഷം മാറ്റം വരുത്താം" + +msgid "Save and view" +msgstr "സേവ് ചെയ്‌തതിന്‌ ശേഷം കാണുക " + +msgid "Close" +msgstr "അടയ്ക്കുക" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "തിരഞ്ഞെടുത്തത് ഇല്ലാതാക്കുക%(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ഈ വെബ് സൈറ്റില്‍ കുറെ നല്ല സമയം ചെലവഴിച്ചതിനു നന്ദി." + +msgid "Log in again" +msgstr "വീണ്ടും ലോഗ്-ഇന്‍ ചെയ്യുക." + +msgid "Password change" +msgstr "പാസ് വേര്‍ഡ് മാറ്റം" + +msgid "Your password was changed." +msgstr "നിങ്ങളുടെ പാസ് വേര്‍ഡ് മാറ്റിക്കഴിഞ്ഞു." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "എന്റെ പാസ് വേര്‍ഡ് മാറ്റണം" + +msgid "Password reset" +msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "നിങ്ങളുടെ പാസ് വേര്‍ഡ് തയ്യാര്‍. ഇനി ലോഗ്-ഇന്‍ ചെയ്യാം." + +msgid "Password reset confirmation" +msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍ ഉറപ്പാക്കല്‍" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"ദയവായി നിങ്ങളുടെ പുതിയ പാസ് വേര്‍ഡ് രണ്ടു തവണ നല്കണം. ശരിയായാണ് ടൈപ്പു ചെയ്തത് എന്നു " +"ഉറപ്പിക്കാനാണ്." + +msgid "New password:" +msgstr "പുതിയ പാസ് വേര്‍ഡ്:" + +msgid "Confirm password:" +msgstr "പാസ് വേര്‍ഡ് ഉറപ്പാക്കൂ:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കാന്‍ നല്കിയ ലിങ്ക് യോഗ്യമല്ല. ഒരു പക്ഷേ, അതു മുന്പ് തന്നെ ഉപയോഗിച്ചു " +"കഴിഞ്ഞതാവാം. പുതിയ ഒരു ലിങ്കിന് അപേക്ഷിക്കൂ." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"നിങ്ങളുൾ പാസ് വേർഡ്‌ മാറ്റാനുള്ള നിർദേശങ്ങൾ %(site_name)s ഇൽ ആവശ്യപ്പെട്ടതുകൊണ്ടാണ് ഈ " +"ഇമെയിൽ സന്ദേശം ലഭിച്ചദ്." + +msgid "Please go to the following page and choose a new password:" +msgstr "ദയവായി താഴെ പറയുന്ന പേജ് സന്ദര്‍ശിച്ച് പുതിയ പാസ് വേര്‍ഡ് തെരഞ്ഞെടുക്കുക:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "ഞങ്ങളുടെ സൈറ്റ് ഉപയോഗിച്ചതിന് നന്ദി!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s പക്ഷം" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "ഇമെയിൽ വിലാസം:" + +msgid "Reset my password" +msgstr "എന്റെ പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കൂ" + +msgid "All dates" +msgstr "എല്ലാ തീയതികളും" + +#, python-format +msgid "Select %s" +msgstr "%s തെരഞ്ഞെടുക്കൂ" + +#, python-format +msgid "Select %s to change" +msgstr "മാറ്റാനുള്ള %s തെരഞ്ഞെടുക്കൂ" + +#, python-format +msgid "Select %s to view" +msgstr "%s കാണാൻ തിരഞ്ഞെടുക്കുക" + +msgid "Date:" +msgstr "തിയ്യതി:" + +msgid "Time:" +msgstr "സമയം:" + +msgid "Lookup" +msgstr "തിരയുക" + +msgid "Currently:" +msgstr "നിലവിൽ:" + +msgid "Change:" +msgstr "മാറ്റം:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0abc5e79c0de9a00e92dabdd34bd9e9343e9ae20 GIT binary patch literal 6200 zcmeH~Uu+yl9mfYqp|}A`L(891m>N=&Hg|TCrc{?0ktVg02scr3q!fh2`flvou(xaN z?%DARN+LCcKcOY6fmT%`)KUTsP52HFQ{r{AR1HgL;Z=y-OlQ0n90PVlYZ;R26= zS22E|7|($#89!Q#e^B5v;5(QI^I{#Eep;NQRxgZ~6?0dIi$)!;~hqoAC> z8-zsd2j2#Mt{688Y=Qh#n@&_nK;bh3%DzM3XTbZxI(VU2-w1P|-vSEXPl9sZ4my!@ zHz;y`78E{B@FCC#zX`qu!b&~JW;yR$;AZe7DEoc~PJw>{SAqK>5GgU7(1gV*Ckk@FQ$`27Qv^H;vp&94IG{Iwuk)D}?m-dU{g zE9QOhX6C1h@pr%>^!gsS3HqKxpFwG}Q`!!%S>@2A~LlSj^xSdzSx2hnW~Ad0n-%!v#VC-MwA zu)X-`wqpDNP;4#FpaUB-^16m5xm`ZES*@obzO@ggvhgjtRcT_IkI>|)&^}7T)#_TB z*m*5Y{2-6mUmh*p>NSZ8)+Rcd(5u%p!jxAgOd~bTMc3}oUbS6ScjzgBty8fdsI8sJ zPLisv)1DuAMduiXO?zj6!Y5yp&dlM5{W`W=MqD~{- zuA)6(IIf`^;48==QZBthf9` z^GjPs2Y!O3C$!h+;HuTX?ah`xNusvV5PF!PEThd&32Pi7Zj@J=Zg{*QSb&Oawb|zqNquD)T4GJa;y66 zltE=8H5L1b*1S*HDAUbo#%Z*mJ=J|CAr^(5L{`fqjyqujG%>LkP8yOmgn84S_M06q z(5C69Hr*zC6Eu^m-Z`OX*&263tgO98>PO)^nTjvtG~<&(Qvuq*b>o9$T2d2{tvCr*U2-cMQYn9C>cHOde-(E-X) zWoNUp-^2;3)O7Ozc8CV{nyDyGD`Ux|->lr#nM^A6sHO+@?5^xJ)4q^aq|VgzhT#pv zmEld5^&9o@aBb7Z+lF}tKIJ88r5<}>5_oA8*R*~2C(J>8SCr~4pMWBq?0A!=Qa4_^ zrpLU%o29k&npT=l)rN*Kf}GF0 zKV=FrzMW?;+SzA&Jqyp}*^lh_OrAZRXXoo?fYIhS>_saWTb(^#@4hQKrgxrbhW*8>)-Kp$2^aLX z7NRa<7na2RVp}e~1rNenr!3Veaa;C?eV5+aYf1UVcd}n163f}$co$Cc&J?T&gEMx4 zUSzJSWjV75CxXg_Gn$-~yZcINh|{gtE>#2h4wbUaIrGk!>h&t|U8^XeawN}A+o(H^ zYEM~#Pg{+hOkEpv=gW^5DQ!}{V$%9|=?ECh7Jmum+5)_KB^tLlNkqf(dp;gm1caPeYF1;Pg**2qWWLX1X zUp!Rq6=ObcT_JJoqUvF*CjB|*zjw#|++aO-xf@1*-l{s&VWR*EmRW2x-=S3lXq)Y|L zSV-LZf>(Th-bqlnO6;V`(1qQ|{Ct`Gm!9Mjw2UUHppv$>Hi$@&+hQX*-(|sBhk$d( ziZ0Cdm(wR0zhJ#~*6~7W_jLiW+{#XxvLr~Y5SdGk@I?mB{%1CzSVxa5keI~D%xx7DRCw@SGfLN#%45d@?LR(9%MAr4ODS!PL~g+ByCL~Oj;rdIRP9#Wp(2Mt%PGReNlE1LRe?Ab%^PYvJ zPLVw}!tDJ`BrPxL#m_b|pX&EVUuEF4p%(zh^t~^(iW!AM$xZ$hps%;;Yi~J_8F^AbPd((#(c}ssY39t|$Nr2VtSn z;<_M&FqB^Q6kj)IOWB, 2014 +# Jannis Leidel , 2011 +# MUHAMMED RAMEEZ , 2019 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-13 00:53+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "ലഭ്യമായ %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"ഇതാണ് ലഭ്യമായ %s പട്ടിക. അതില്‍ ചിലത് തിരഞ്ഞെടുക്കാന്‍ താഴെ കളത്തില്‍ നിന്നും ഉചിതമായവ സെലക്ട് " +"ചെയ്ത ശേഷം രണ്ടു കളങ്ങള്‍ക്കുമിടയിലെ \"തെരഞ്ഞെടുക്കൂ\" അടയാളത്തില്‍ ക്ലിക് ചെയ്യുക." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "ലഭ്യമായ %s പട്ടികയെ ഫില്‍ട്ടര്‍ ചെയ്തെടുക്കാന്‍ ഈ ബോക്സില്‍ ടൈപ്പ് ചെയ്യുക." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "എല്ലാം തെരഞ്ഞെടുക്കുക" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "%s എല്ലാം ഒന്നിച്ച് തെരഞ്ഞെടുക്കാന്‍ ക്ലിക് ചെയ്യുക." + +msgid "Choose" +msgstr "തെരഞ്ഞെടുക്കൂ" + +msgid "Remove" +msgstr "നീക്കം ചെയ്യൂ" + +#, javascript-format +msgid "Chosen %s" +msgstr "തെരഞ്ഞെടുത്ത %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"തെരഞ്ഞെടുക്കപ്പെട്ട %s പട്ടികയാണിത്. അവയില്‍ ചിലത് ഒഴിവാക്കണമെന്നുണ്ടെങ്കില്‍ താഴെ കളത്തില്‍ " +"നിന്നും അവ സെലക്ട് ചെയ്ത് കളങ്ങള്‍ക്കിടയിലുള്ള \"നീക്കം ചെയ്യൂ\" എന്ന അടയാളത്തില്‍ ക്ലിക് ചെയ്യുക." + +msgid "Remove all" +msgstr "എല്ലാം നീക്കം ചെയ്യുക" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "തെരഞ്ഞെടുക്കപ്പെട്ട %s എല്ലാം ഒരുമിച്ച് നീക്കം ചെയ്യാന്‍ ക്ലിക് ചെയ്യുക." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)sല്‍ %(sel)s തെരഞ്ഞെടുത്തു" +msgstr[1] "%(cnt)sല്‍ %(sel)s എണ്ണം തെരഞ്ഞെടുത്തു" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"വരുത്തിയ മാറ്റങ്ങള്‍ സേവ് ചെയ്തിട്ടില്ല. ഒരു ആക്ഷന്‍ പ്രയോഗിച്ചാല്‍ സേവ് ചെയ്യാത്ത മാറ്റങ്ങളെല്ലാം " +"നഷ്ടപ്പെടും." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "ഇപ്പോള്‍" + +msgid "Midnight" +msgstr "അര്‍ധരാത്രി" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "ഉച്ച" + +msgid "6 p.m." +msgstr "6 p.m" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "ഒർക്കുക: സെർവർ സമയത്തിനെക്കാളും നിങ്ങൾ %s സമയം മുൻപിലാണ്." +msgstr[1] "ഒർക്കുക: സെർവർ സമയത്തിനെക്കാളും നിങ്ങൾ %s സമയം മുൻപിലാണ്." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "ഒർക്കുക: സെർവർ സമയത്തിനെക്കാളും നിങ്ങൾ %s സമയം പിന്നിലാണ്." +msgstr[1] "ഒർക്കുക: സെർവർ സമയത്തിനെക്കാളും നിങ്ങൾ %s സമയം പിന്നിലാണ്." + +msgid "Choose a Time" +msgstr "സമയം തിരഞ്ഞെടുക്കുക" + +msgid "Choose a time" +msgstr "സമയം തെരഞ്ഞെടുക്കൂ" + +msgid "Cancel" +msgstr "റദ്ദാക്കൂ" + +msgid "Today" +msgstr "ഇന്ന്" + +msgid "Choose a Date" +msgstr "ഒരു തീയതി തിരഞ്ഞെടുക്കുക" + +msgid "Yesterday" +msgstr "ഇന്നലെ" + +msgid "Tomorrow" +msgstr "നാളെ" + +msgid "January" +msgstr "ജനുവരി" + +msgid "February" +msgstr "ഫെബ്രുവരി" + +msgid "March" +msgstr "മാർച്ച്" + +msgid "April" +msgstr "ഏപ്രിൽ" + +msgid "May" +msgstr "മെയ്" + +msgid "June" +msgstr "ജൂൺ" + +msgid "July" +msgstr "ജൂലൈ" + +msgid "August" +msgstr "ആഗസ്റ്റ്" + +msgid "September" +msgstr "സെപ്റ്റംബർ" + +msgid "October" +msgstr "ഒക്ടോബർ" + +msgid "November" +msgstr "നവംബർ" + +msgid "December" +msgstr "ഡിസംബര്" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "ഞ്ഞ‍" + +msgctxt "one letter Monday" +msgid "M" +msgstr "തി" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "ചൊ" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "ബു" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "വ്യാ" + +msgctxt "one letter Friday" +msgid "F" +msgstr "വെ" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "ശ" + +msgid "Show" +msgstr "കാണട്ടെ" + +msgid "Hide" +msgstr "മറയട്ടെ" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..82cb0bbb8e254c85e24c878d66ed16e4dac097ae GIT binary patch literal 14812 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 X@fXrV`kamX^9Y&Xg6WUd&cXi=?ttF` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..48c2e133d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,703 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ankhbayar , 2013 +# Jannis Leidel , 2011 +# jargalan , 2011 +# Zorig, 2016 +# Анхбаяр Анхаа , 2013-2016,2018-2019,2021 +# Баясгалан Цэвлээ , 2011,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-16 17:18+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Сонгосон %(verbose_name_plural)s-ийг устга" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(items)s ээс %(count)d-ийг амжилттай устгалаа." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s устгаж чадахгүй." + +msgid "Are you sure?" +msgstr "Итгэлтэй байна уу?" + +msgid "Administration" +msgstr "Удирдлага" + +msgid "All" +msgstr "Бүгд " + +msgid "Yes" +msgstr "Тийм" + +msgid "No" +msgstr "Үгүй" + +msgid "Unknown" +msgstr "Тодорхойгүй" + +msgid "Any date" +msgstr "Бүх өдөр" + +msgid "Today" +msgstr "Өнөөдөр" + +msgid "Past 7 days" +msgstr "Өнгөрсөн долоо хоног" + +msgid "This month" +msgstr "Энэ сар" + +msgid "This year" +msgstr "Энэ жил" + +msgid "No date" +msgstr "Огноогүй" + +msgid "Has date" +msgstr "Огноотой" + +msgid "Empty" +msgstr "" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ажилтан хэрэглэгчийн %(username)s ба нууц үгийг зөв оруулна уу. Хоёр талбарт " +"том жижигээр үсгээр бичих ялгаатай." + +msgid "Action:" +msgstr "Үйлдэл:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Өөр %(verbose_name)s нэмэх " + +msgid "Remove" +msgstr "Хасах" + +msgid "Addition" +msgstr "Нэмэгдсэн" + +msgid "Change" +msgstr "Өөрчлөх" + +msgid "Deletion" +msgstr "Устгагдсан" + +msgid "action time" +msgstr "үйлдлийн хугацаа" + +msgid "user" +msgstr "хэрэглэгч" + +msgid "content type" +msgstr "агуулгын төрөл" + +msgid "object id" +msgstr "обектийн id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "обектийн хамаарал" + +msgid "action flag" +msgstr "үйлдэлийн тэмдэг" + +msgid "change message" +msgstr "өөрчлөлтийн мэдээлэл" + +msgid "log entry" +msgstr "лог өгөгдөл" + +msgid "log entries" +msgstr "лог өгөгдөлүүд" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Нэмэгдсэн \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Өөрчлөгдсөн \"%(object)s\"— %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Устгагдсан \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "Лог бүртгэлийн обект" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Нэмэгдсэн." + +msgid "and" +msgstr "ба" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Өөрчлөгдсөн {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Өөрчилсөн талбар алга байна." + +msgid "None" +msgstr "Хоосон" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Та дараахийг дахин засах боломжтой" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Үйлдэл хийхийн тулд Та ядаж 1-ийг сонгох хэрэгтэй. Өөрчилөлт хийгдсэнгүй." + +msgid "No action selected." +msgstr "Үйлдэл сонгоогүй." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s-ийг нэмэх" + +#, python-format +msgid "Change %s" +msgstr "%s-ийг өөрчлөх" + +#, python-format +msgid "View %s" +msgstr "%s харах " + +msgid "Database error" +msgstr "Өгөгдлийн сангийн алдаа" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s-ийг амжилттай өөрчиллөө." +msgstr[1] "%(count)s %(name)s-ийг амжилттай өөрчиллөө." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Бүгд %(total_count)s сонгогдсон" +msgstr[1] "Бүгд %(total_count)s сонгогдсон" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s оос 0 сонгосон" + +#, python-format +msgid "Change history: %s" +msgstr "Өөрчлөлтийн түүх: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(instance)s %(class_name)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +" %(class_name)s төрлийн %(instance)s-ийг устгах гэж байна. Эхлээд дараах " +"холбоотой хамгаалагдсан обектуудыг устгах шаардлагатай: %(related_objects)s" + +msgid "Django site admin" +msgstr "Сайтын удирдлага" + +msgid "Django administration" +msgstr "Удирдлага" + +msgid "Site administration" +msgstr "Сайтын удирдлага" + +msgid "Log in" +msgstr "Нэвтрэх" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s удирдлага" + +msgid "Page not found" +msgstr "Хуудас олдсонгүй." + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Нүүр" + +msgid "Server error" +msgstr "Серверийн алдаа" + +msgid "Server error (500)" +msgstr "Серверийн алдаа (500)" + +msgid "Server Error (500)" +msgstr "Серверийн алдаа (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Сонгосон үйлдэлийг ажилуулах" + +msgid "Go" +msgstr "Гүйцэтгэх" + +msgid "Click here to select the objects across all pages" +msgstr "Бүх хуудаснууд дээрх объектуудыг сонгох" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Бүгдийг сонгох %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Сонгосонг цэвэрлэх" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s хэрэглүүр дэх моделууд." + +msgid "Add" +msgstr "Нэмэх" + +msgid "View" +msgstr "Харах" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Хэрэглэгчийн нэр ба нууц үгээ оруулна." + +msgid "Change password" +msgstr "Нууц үг өөрчлөх" + +msgid "Please correct the error below." +msgstr "Доорх алдааг засна уу" + +msgid "Please correct the errors below." +msgstr "Доор гарсан алдаануудыг засна уу." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s.хэрэглэгчид шинэ нууц үг оруулна уу." + +msgid "Welcome," +msgstr "Тавтай морилно уу" + +msgid "View site" +msgstr "Сайтаас харах" + +msgid "Documentation" +msgstr "Баримтжуулалт" + +msgid "Log out" +msgstr "Гарах" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s нэмэх" + +msgid "History" +msgstr "Түүх" + +msgid "View on site" +msgstr "Сайтаас харах" + +msgid "Filter" +msgstr "Шүүлтүүр" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Эрэмблэлтээс хасах" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Эрэмблэх урьтамж: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Эрэмбэлэлтийг харуул" + +msgid "Delete" +msgstr "Устгах" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах " +"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +" %(object_name)s обектийг устгаж байна. '%(escaped_object)s' холбоотой " +"хамгаалагдсан обектуудыг заавал утсгах хэрэгтэй :" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? " +"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:" + +msgid "Objects" +msgstr "Бичлэгүүд" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "Үгүй, намайг буцаа" + +msgid "Delete multiple objects" +msgstr "Олон обектууд устгах" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Сонгосон %(objects_name)s обектуудыг устгасанаар хамаатай бүх обкетууд устах " +"болно. Гэхдээ таньд эрх эдгээр төрлийн обектуудыг утсгах эрх байхгүй байна: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s обектуудыг утсгаж байна дараах холбоотой хамгаалагдсан " +"обектуудыг устгах шаардлагатай:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Та %(objects_name)s ийг устгах гэж байна итгэлтэй байна? Дараах обектууд " +"болон холбоотой зүйлс хамт устагдах болно:" + +msgid "Delete?" +msgstr "Устгах уу?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s -ээр" + +msgid "Summary" +msgstr "Нийт" + +msgid "Recent actions" +msgstr "Сүүлд хийсэн үйлдлүүд" + +msgid "My actions" +msgstr "Миний үйлдлүүд" + +msgid "None available" +msgstr "Үйлдэл алга" + +msgid "Unknown content" +msgstr "Тодорхойгүй агуулга" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Та %(username)s нэрээр нэвтэрсэн байна гэвч энэ хуудасхуу хандах эрх " +"байхгүй байна. Та өөр эрхээр логин хийх үү?" + +msgid "Forgotten your password or username?" +msgstr "Таны мартсан нууц үг эсвэл нэрвтэр нэр?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Огноо/цаг" + +msgid "User" +msgstr "Хэрэглэгч" + +msgid "Action" +msgstr "Үйлдэл" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Бүгдийг харуулах" + +msgid "Save" +msgstr "Хадгалах" + +msgid "Popup closing…" +msgstr "Хааж байна..." + +msgid "Search" +msgstr "Хайлт" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s үр дүн" +msgstr[1] "%(counter)s үр дүн" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Нийт %(full_result_count)s" + +msgid "Save as new" +msgstr "Шинээр хадгалах" + +msgid "Save and add another" +msgstr "Хадгалаад өөрийг нэмэх" + +msgid "Save and continue editing" +msgstr "Хадгалаад нэмж засах" + +msgid "Save and view" +msgstr "Хадгалаад харах." + +msgid "Close" +msgstr "Хаах" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Сонгосон %(model)s-ийг өөрчлөх" + +#, python-format +msgid "Add another %(model)s" +msgstr "Өөр %(model)s нэмэх" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Сонгосон %(model)s устгах" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Ахин нэвтрэх " + +msgid "Password change" +msgstr "Нууц үгийн өөрчлөлт" + +msgid "Your password was changed." +msgstr "Нууц үг тань өөрчлөгдлөө." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Нууц үгээ солих" + +msgid "Password reset" +msgstr "Нууц үг шинэчилэх" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Та нууц үгтэй боллоо. Одоо бүртгэлд нэвтрэх боломжтой." + +msgid "Password reset confirmation" +msgstr "Нууц үг шинэчилэхийг баталгаажуулах" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Шинэ нууц үгээ хоёр удаа оруулна уу. Ингэснээр нууц үгээ зөв бичиж байгаа " +"эсэхийг тань шалгах юм. " + +msgid "New password:" +msgstr "Шинэ нууц үг:" + +msgid "Confirm password:" +msgstr "Нууц үгээ батлах:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Нууц үг авах холбоос болохгүй байна. Үүнийг аль хэдийнэ хэрэглэснээс болсон " +"байж болзошгүй. Шинэ нууц үг авахаар хүсэлт гаргана уу. " + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"%(site_name)s сайтанд бүртгүүлсэн эрхийн нууц үгийг сэргээх хүсэлт гаргасан " +"учир энэ имэйл ийг та хүлээн авсан болно. " + +msgid "Please go to the following page and choose a new password:" +msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s баг" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Имэйл хаяг:" + +msgid "Reset my password" +msgstr "Нууц үгээ шинэчлэх" + +msgid "All dates" +msgstr "Бүх огноо" + +#, python-format +msgid "Select %s" +msgstr "%s-г сонго" + +#, python-format +msgid "Select %s to change" +msgstr "Өөрчлөх %s-г сонгоно уу" + +#, python-format +msgid "Select %s to view" +msgstr "Харахын тулд %s сонгоно уу" + +msgid "Date:" +msgstr "Огноо:" + +msgid "Time:" +msgstr "Цаг:" + +msgid "Lookup" +msgstr "Хайх" + +msgid "Currently:" +msgstr "Одоогийнх:" + +msgid "Change:" +msgstr "Өөрчилөлт:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f58362d57dbe0934779cd5a9ea9aae87f892c61 GIT binary patch literal 5228 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 BV4DB{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..5fda29750 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tsolmon , 2012 +# Zorig, 2014,2018 +# Анхбаяр Анхаа , 2011-2012,2015,2019 +# Ганзориг БП , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-02-13 09:19+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Боломжтой %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Энэ %s жагсаалт нь боломжит утгын жагсаалт. Та аль нэгийг нь сонгоод \"Сонгох" +"\" дээр дарж нөгөө хэсэгт оруулах боломжтой." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Энэ нүдэнд бичээд дараах %s жагсаалтаас шүүнэ үү. " + +msgid "Filter" +msgstr "Шүүлтүүр" + +msgid "Choose all" +msgstr "Бүгдийг нь сонгох" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Бүгдийг сонгох бол %s дарна уу" + +msgid "Choose" +msgstr "Сонгох" + +msgid "Remove" +msgstr "Хас" + +#, javascript-format +msgid "Chosen %s" +msgstr "Сонгогдсон %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Энэ %s сонгогдсон утгуудыг жагсаалт. Та аль нэгийг нь хасахыг хүсвэл сонгоох " +"\"Хас\" дээр дарна уу." + +msgid "Remove all" +msgstr "Бүгдийг арилгах" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "%s ийн сонгоод бүгдийг нь арилгана" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s ээс %(cnt)s сонгосон" +msgstr[1] "%(sel)s ээс %(cnt)s сонгосон" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Хадгалаагүй өөрчлөлтүүд байна. Энэ үйлдэлийг хийвэл өөрчлөлтүүд устах болно." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Та 1 үйлдлийг сонгосон байна, гэвч та өөрийн өөрчлөлтүүдээ тодорхой " +"талбаруудад нь оруулагүй байна. OK дарж сануулна уу. Энэ үйлдлийг та дахин " +"хийх шаардлагатай." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Та 1 үйлдлийг сонгосон байна бас та ямарваа өөрчлөлт оруулсангүй. Та Save " +"товчлуур биш Go товчлуурыг хайж байгаа бололтой." + +msgid "Now" +msgstr "Одоо" + +msgid "Midnight" +msgstr "Шөнө дунд" + +msgid "6 a.m." +msgstr "06 цаг" + +msgid "Noon" +msgstr "Үд дунд" + +msgid "6 p.m." +msgstr "18 цаг" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Та серверийн цагаас %s цагийн түрүүнд явж байна" +msgstr[1] "Та серверийн цагаас %s цагийн түрүүнд явж байна" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Та серверийн цагаас %s цагаар хоцорч байна" +msgstr[1] "Та серверийн цагаас %s цагаар хоцорч байна" + +msgid "Choose a Time" +msgstr "Цаг сонгох" + +msgid "Choose a time" +msgstr "Цаг сонгох" + +msgid "Cancel" +msgstr "Болих" + +msgid "Today" +msgstr "Өнөөдөр" + +msgid "Choose a Date" +msgstr "Өдөр сонгох" + +msgid "Yesterday" +msgstr "Өчигдөр" + +msgid "Tomorrow" +msgstr "Маргааш" + +msgid "January" +msgstr "1-р сар" + +msgid "February" +msgstr "2-р сар" + +msgid "March" +msgstr "3-р сар" + +msgid "April" +msgstr "4-р сар" + +msgid "May" +msgstr "5-р сар" + +msgid "June" +msgstr "6-р сар" + +msgid "July" +msgstr "7-р сар" + +msgid "August" +msgstr "8-р сар" + +msgid "September" +msgstr "9-р сар" + +msgid "October" +msgstr "10-р сар" + +msgid "November" +msgstr "11-р сар" + +msgid "December" +msgstr "12-р сар" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Д" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "М" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Л" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "П" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Ба" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Бя" + +msgid "Show" +msgstr "Үзэх" + +msgid "Hide" +msgstr "Нуух" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d847b48ad67ec0416debfc5c01e7c64ab36f6563 GIT binary patch literal 468 zcmZ8d!A=4(6x8TxkDfg|6Aut9Z83(mh%q807>IYaC2z`kZH<6*DNSah zsVc1tWb8AYlE+o%Nn!;=lb3|_oRR^xd4nOMk@SHiP8y%fV4Z+xX^i$TQaV*R++i9VAM)+k)Mjq)@s7z>GE*c`vJfzq zPKJes+9HHfP`X~Po1t>lbG2#CY(dLiPfts_t4H%c3tBi@kH*7s|L_C6$)cV$K^aW; zSz^VYHi4G8)TRTog>+tp?rSn2@j+L;H&>4I&CI6SWCG%M9rjTL6fTx7C5&wp%lB(FI=bL`T0OD2bc^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 000000000..c02c72b1e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,609 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:31+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Any date" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "" + +msgid "This year" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "object id" +msgstr "" + +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-format +msgid "Changed %s." +msgstr "" + +msgid "and" +msgstr "" + +#, python-format +msgid "Added %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed %(list)s for %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Deleted %(name)s \"%(object)s\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may edit it again " +"below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Log out" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent Actions" +msgstr "" + +msgid "My Actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +msgid "(None)" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "" + +msgid "Time:" +msgstr "" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f558c1be6eb481d8ef1c94cdf501dbc2959c0985 GIT binary patch literal 16840 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..e69439eb6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,721 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +# Mariusz Felisiak , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-06 07:41+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Padam pilihan %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s berjaya dipadamkan" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s tidak boleh dipadamkan" + +msgid "Are you sure?" +msgstr "Adakah anda pasti?" + +msgid "Administration" +msgstr "Pentadbiran" + +msgid "All" +msgstr "Semua" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Tidak" + +msgid "Unknown" +msgstr "Tidak diketahui" + +msgid "Any date" +msgstr "Sebarang tarikh" + +msgid "Today" +msgstr "Hari ini" + +msgid "Past 7 days" +msgstr "7 hari lalu" + +msgid "This month" +msgstr "Bulan ini" + +msgid "This year" +msgstr "Tahun ini" + +msgid "No date" +msgstr "Tiada tarikh" + +msgid "Has date" +msgstr "Mempunyai tarikh" + +msgid "Empty" +msgstr "Kosong" + +msgid "Not empty" +msgstr "Tidak kosong" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Sila masukkan %(username)s dan kata-laluan bagi akaun staf. Kedua-dua medan " +"berkemungkinan kes-sensitif." + +msgid "Action:" +msgstr "Tindakan" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Tambah %(verbose_name)s" + +msgid "Remove" +msgstr "Buang" + +msgid "Addition" +msgstr "Tambahan" + +msgid "Change" +msgstr "Tukar" + +msgid "Deletion" +msgstr "Pemadaman" + +msgid "action time" +msgstr "masa tindakan" + +msgid "user" +msgstr "pengguna" + +msgid "content type" +msgstr "jenis kandungan" + +msgid "object id" +msgstr "id objek" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr objek" + +msgid "action flag" +msgstr "bendera tindakan" + +msgid "change message" +msgstr "tukar mesej" + +msgid "log entry" +msgstr "entri log" + +msgid "log entries" +msgstr "entri log" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\" ditambah" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "\"%(object)s\" ditukar - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" dipadam." + +msgid "LogEntry Object" +msgstr "Objek EntriLog" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” ditambah." + +msgid "Added." +msgstr "Ditambah." + +msgid "and" +msgstr "dan" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "“{object}” {name} untuk {fields} telah ditukar." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} telah ditukar." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "“{object}” {name} telah dipadamkan" + +msgid "No fields changed." +msgstr "Tiada medan diubah." + +msgid "None" +msgstr "Tiada" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Tekan \"Control\", atau \"Command pada Mac untuk memilih lebih daripada satu." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" telah berjaya ditambah." + +msgid "You may edit it again below." +msgstr "Anda boleh edit semula dibawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} \"{obj}\" telah berjaya ditambah. Anda boleh menambah {name} lain " +"dibawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" berjaya diubah. Anda boleh edit semula dibawah." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" berjaya ditambah. Anda boleh edit semula dibawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" berjaya diubah. Anda boleh tambah {name} lain dibawah" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" berjaya diubah." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Item-item perlu dipilih mengikut turutan untuk tindakan lanjut. Tiada item-" +"item yang diubah." + +msgid "No action selected." +msgstr "Tiada tindakan dipilih." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\" berjaya dipadam." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s dengan ID \"%(key)s\" tidak wujud. Mungkin ia telah dipadamkan?" + +#, python-format +msgid "Add %s" +msgstr "Tambah %s" + +#, python-format +msgid "Change %s" +msgstr "Tukar %s" + +#, python-format +msgid "View %s" +msgstr "Lihat %s" + +msgid "Database error" +msgstr "Masalah pangkalan data" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s berjaya ditukar." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Kesemua %(total_count)s dipilih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 daripada %(cnt)s dipilih" + +#, python-format +msgid "Change history: %s" +msgstr "Sejarah penukaran: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Memadam %(class_name)s %(instance)s memerlukan pemadaman objek berkaitan " +"yang dilindungi: %(related_objects)s" + +msgid "Django site admin" +msgstr "Pentadbiran laman Django" + +msgid "Django administration" +msgstr "Pentadbiran Django" + +msgid "Site administration" +msgstr "Pentadbiran laman" + +msgid "Log in" +msgstr "Log masuk" + +#, python-format +msgid "%(app)s administration" +msgstr "Pentadbiran %(app)s" + +msgid "Page not found" +msgstr "Laman tidak dijumpai" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Maaf, tetapi laman yang diminta tidak dijumpai." + +msgid "Home" +msgstr "Utama" + +msgid "Server error" +msgstr "Masalah pelayan" + +msgid "Server error (500)" +msgstr "Masalah pelayan (500)" + +msgid "Server Error (500)" +msgstr "Masalah pelayan (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Terdapat masalah. Ia telah dilaporkan kepada pentadbir laman melalui emel " +"dan sepatutnya dibaiki sebentar lagi. Kesabaran anda amat dihargai." + +msgid "Run the selected action" +msgstr "Jalankan tindakan yang dipilih" + +msgid "Go" +msgstr "Teruskan" + +msgid "Click here to select the objects across all pages" +msgstr "Klik disini untuk memilih objek-objek disemua laman" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Pilih kesemua %(total_count)s%(module_name)s" + +msgid "Clear selection" +msgstr "Padam pilihan" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Model didalam aplikasi %(name)s" + +msgid "Add" +msgstr "Tambah" + +msgid "View" +msgstr "Lihat" + +msgid "You don’t have permission to view or edit anything." +msgstr "Anda tidak mempunyai kebenaran untuk melihat atau edit apa-apa." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Pertama sekali, masukkan nama pengguna dan kata laluan. Selepas itu, anda " +"boleh edit pilihan pengguna yang lain" + +msgid "Enter a username and password." +msgstr "Masukkan nama pengguna dan kata laluan." + +msgid "Change password" +msgstr "Tukar kata laluan" + +msgid "Please correct the error below." +msgstr "Sila betulkan ralat di bawah." + +msgid "Please correct the errors below." +msgstr "Sila betulkan ralat-ralat di bawah." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Masukkan kata lalauan bagi pengguna %(username)s" + +msgid "Welcome," +msgstr "Selamat datang," + +msgid "View site" +msgstr "Lihat laman" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Log out" +msgstr "Log keluar" + +#, python-format +msgid "Add %(name)s" +msgstr "Tambah %(name)s" + +msgid "History" +msgstr "Sejarah" + +msgid "View on site" +msgstr "Lihat di laman" + +msgid "Filter" +msgstr "Tapis" + +msgid "Clear all filters" +msgstr "Kosongkan kesemua tapisan" + +msgid "Remove from sorting" +msgstr "Buang daripada penyusunan" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Keutamaan susunan: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Togol penyusunan" + +msgid "Delete" +msgstr "Buang" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Memadam %(object_name)s '%(escaped_object)s' akan menyebabkan pembuangan " +"objek-objek yang berkaitan, tetapi akaun anda tidak mempunyai kebenaran " +"untuk memadam jenis-jenis objek-objek berikut:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Membuang %(object_name)s '%(escaped_object)s' memerlukan pembuangan objek-" +"objek berkaitan yang dilindungi:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Adakah anda pasti anda ingin membuang %(object_name)s \"%(escaped_object)s" +"\"? Semua item-item berkaitan berikut akan turut dibuang:" + +msgid "Objects" +msgstr "Objek-objek" + +msgid "Yes, I’m sure" +msgstr "Ya, saya pasti" + +msgid "No, take me back" +msgstr "Tidak, bawa saya kembali" + +msgid "Delete multiple objects" +msgstr "Buang pelbagai objek" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Membuang %(objects_name)s akan menyebabkan pembuangan objek-objek yang " +"berkaitan, tetapi akaun anda tidak mempunyai kebenaran to membuang jenis " +"objek-objek berikut:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Membuang %(objects_name)s memerlukan pembuangan objek-objek berkaitan yang " +"dilindungi:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Adakah anda pasti untuk membuang %(objects_name)s yang dipilih? Segala objek-" +"objek berikut dan item-item yang berkaitan akan turut dibuang:" + +msgid "Delete?" +msgstr "Buang?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Daripada %(filter_title)s" + +msgid "Summary" +msgstr "Rumusan" + +msgid "Recent actions" +msgstr "Tindakan terkini" + +msgid "My actions" +msgstr "Tindakan saya" + +msgid "None available" +msgstr "Tiada yang tersedia" + +msgid "Unknown content" +msgstr "Kandungan tidak diketahui" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nampaknya ada masalah dengan pemasangan pangkalan data anda. Pastikan jadual " +"pangkalan yang bersesuaian telah di cipta, dan pastikan pangkalan data " +"tersebut boleh dibaca oleh pengguna yang bersesuaian." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Anda telah disahkan sebagai %(username)s, tetapi anda tidak dibenarkan untuk " +"mengakses ruangan ini. Adakah anda ingin log masuk menggunakan akaun lain?" + +msgid "Forgotten your password or username?" +msgstr "Terlupa kata laluan atau nama pengguna anda?" + +msgid "Toggle navigation" +msgstr "Togol navigasi" + +msgid "Start typing to filter…" +msgstr "Mulakan menaip untuk menapis..." + +msgid "Filter navigation items" +msgstr "Tapis item-item navigasi" + +msgid "Date/time" +msgstr "Tarikh/masa" + +msgid "User" +msgstr "Pengguna" + +msgid "Action" +msgstr "Tindakan" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Objek ini tidak mempunyai sejarah penukaran. Ini mungkin bermaksud ia tidak " +"ditambah menggunakan laman admin ini." + +msgid "Show all" +msgstr "Tunjuk semua" + +msgid "Save" +msgstr "Simpan" + +msgid "Popup closing…" +msgstr "Popup sedang ditutup..." + +msgid "Search" +msgstr "Cari" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s keputusan" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s jumlah" + +msgid "Save as new" +msgstr "Simpan sebagai baru" + +msgid "Save and add another" +msgstr "Simpan dan tambah lagi" + +msgid "Save and continue editing" +msgstr "Simpan dan teruskan mengedit" + +msgid "Save and view" +msgstr "Simpan dan lihat" + +msgid "Close" +msgstr "Tutup" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Tukar %(model)s yang dipilih" + +#, python-format +msgid "Add another %(model)s" +msgstr "Tambah %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Buang %(model)s pilihan" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Terima kasih kerana meluangkan masa di laman sesawang ini hari ini." + +msgid "Log in again" +msgstr "Log masuk semula" + +msgid "Password change" +msgstr "Pertukaran kata laluan" + +msgid "Your password was changed." +msgstr "Kata laluan anda telah ditukarkan" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Untuk tujuan keselamatan, sila masukkan kata laluan lama, kemudian masukkan " +"kata laluan baru dua kali supaya kami dapat memastikan anda memasukkannya " +"dengan betul." + +msgid "Change my password" +msgstr "Tukar kata laluan saya" + +msgid "Password reset" +msgstr "Tetap semula kata laluan" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Kata laluan anda telah ditetapkan. Sila log masuk." + +msgid "Password reset confirmation" +msgstr "Pengesahan tetapan semula kata laluan" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Sila masukkan kata laluan baru anda dua kali supaya kami adpat memastikan " +"anda memasukkannya dengan betul." + +msgid "New password:" +msgstr "Kata laluan baru:" + +msgid "Confirm password:" +msgstr "Sahkan kata laluan:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Pautan tetapan semula kata laluan tidak sah, mungkin kerana ia telah " +"digunakan. Sila minta tetapan semula kata laluan yang baru." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Kami telah menghantar panduan untuk menetapkan kata laluan anda melalui " +"emel, sekiranya emel yang anda masukkan itu wujud. Anda sepatutnya " +"menerimanya sebentar lagi." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jika anda tidak menerima emel, sila pastikan anda telah memasukkan alamat " +"emel yang telah didaftarkan, dan semak folder spam anda." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Anda menerima emel ini kerana anda telah memohon untuk menetapkan semula " +"kata laluan bagi akaun pengguna di %(site_name)s" + +msgid "Please go to the following page and choose a new password:" +msgstr "Sila ke ruangan berikut dan pilih kata laluan baru:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Nama pengguna anda, sekiranya anda terlupa:" + +msgid "Thanks for using our site!" +msgstr "Terima kasih kerana menggunakan laman kami!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Pasukan %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Lupa kata laluan anda? Masukkan alamat emel anda dibawah, dan kami akan " +"menghantar cara untuk menetapkan kata laluan baru." + +msgid "Email address:" +msgstr "Alamat emel:" + +msgid "Reset my password" +msgstr "Tetap semula kata laluan saya" + +msgid "All dates" +msgstr "Semua tarikh" + +#, python-format +msgid "Select %s" +msgstr "Pilih %s" + +#, python-format +msgid "Select %s to change" +msgstr "Pilih %s untuk diubah" + +#, python-format +msgid "Select %s to view" +msgstr "Pilih %s untuk lihat" + +msgid "Date:" +msgstr "Tarikh:" + +msgid "Time:" +msgstr "Masa:" + +msgid "Lookup" +msgstr "Carian" + +msgid "Currently:" +msgstr "Kini:" + +msgid "Change:" +msgstr "Tukar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..65e0050970c461715fa270eec9f60bdca3666597 GIT binary patch literal 5018 zcmbuCU94P19l!@&0dK{RqWA?k))rgn?(J={)U8$eb?JwQjHN}kOYtfqahGuLc#;_4HGoJ`0*l7Bp4q^{te-3{F zpM#IXy$mAr{t3!>uW;KBUxU)`W^T{G+u+miWjKQOGx*2hAK)k8>+nJg}^zeW(nAOC`wto{wf-Wxtx`{O3a6lyb+_S*xuLWWRxLQGQk1RjDSzXZiU=ipY@ zgL~j3Q2h9E;P0V~`%2)eQ1tj~sJ{Uves2c;J@6k;=6@T?JlB0lsRg(R-VF~xnI{YU zE|hV90A;>Mq3HPpl>W~^@x$}*1^6O-4u12)^*HZ9$&c$lqEs7hf->GBd={R9FTuCq zui*2WYrVfgFhu_c1G|AMf#(B#U>3L<_?^Iq0>2;lLr56aj{+ZsEOGT%s6QU~WN3dX z)SnJSRPB&kxWt!R!t(+YTO|)aOZhwn^DDpJ23wTRQDpspnIievq(~mfg$t@&m1l{) z_-i{w@>4GH`{cSeJV*@Wx~oQ&t2#UjWDnaz5gYeX_EE(DlZ$YvFH&S}ekn8(0!4bL zZJ~Yuet~j(sLQ&PwIT75>rTp7D7&S?CHWwi?2~fMQzUnGQtqHge(j>j`jkCRF5FvR z+qUO6-jVBcMQ_{Q^97GI*j`~Hb**=MwP__SwO5Y>2S=HU)xok~=7l=AYFuo(vDMph zb=dfxjn&~nn&vh@8-2tSQ?-surfS7>Ew1|J)>nhYt~b<0s(aON+Qc!<+7vovmXF|ayzIi6n8W-7p~%KpTR zCo##>#Om%iWRdfI>6&Qgt0B7S1?-5^HEl43H(vK7XhBYIsS{-j9?cNy+G5QjBeNH4 zsiwQlTUS(SJR9U8@bgj1N zivCpRY)&r9aFSUALmp37Bu>+&SGd>o%0)0{)GQKP_}(B2wNT=ILa&UAWp)Lvb4)G9qTwvs{pK|WGkM&4@Z|pLHEp1mqsR*H_M_;{jPOw^$^mR zs+ZF@lD2GJL40zVf_iL=mOc|(liNBs^y!o0J?THuo^|gnqtTq%W>(hP)vlRRtn~Gy zS9XYvTv2UP6VDu9sZ^HXrW{>qJUh~wLxnC&BF&4IGTm-wS6ezseKFA0X4v39+g@#t z4R*&48G=#9ncwx!fd+tPH~vMEYg5{>0cTFXlE zlD5vE%yNE>Cx>O{0DU$eH}y=(VEbAjJpy|AZ!_wKuPam{_zrZBNOQ}w9sy2F6OLEVJ6 zauXhtjmO+3rIBH(xd!TF?1sAZMLE=oO_-eR6bboW^M%GgX4sk$>XvwR{q2VQSek2#Tv)#U%PhLta`uHi8v#0Su+qd5uFF>Zu0)6SS=t(UyIy2puASVodO1qra> z`P}9unLP{-A>Q3usYs_Lxz598}aC;$Ke literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..6d8650286 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ms/LC_MESSAGES/djangojs.po @@ -0,0 +1,264 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-16 13:42+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s tersedia" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ini adalah senarai %s yang tersedia. Anda boleh memilih beberapa dengan " +"memilihnya di dalam kotak dibawah dan kemudian klik pada anak panah \"Pilih" +"\" diantara dua kotak itu." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Taip didalam kotak untuk menapis senarai %s yang tersedia." + +msgid "Filter" +msgstr "Tapis" + +msgid "Choose all" +msgstr "Pilih semua" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klik untuk memlih semua %s serentak." + +msgid "Choose" +msgstr "Pilih" + +msgid "Remove" +msgstr "Buang" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s dipilh" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ini adalah senarai %s yang dipilih. Anda boleh membuangnya dengan memilihnya " +"pada kotak dibawah dan kemudian klik pada anak panah \"Buang\" diantara dua " +"kotak itu." + +msgid "Remove all" +msgstr "Buang semua" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik untuk membuang serentak semua %s yang dipilih." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s daripada %(cnt)s dipilih" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Anda mempunyai perubahan yang belum disimpan pada medan-medan individu yang " +"boleh di-edit. Sekiranya anda melakukan sebarang tindakan, penukaran yang " +"tidak disimpan akan hilang." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Anda telah memlih tindakan, tetapi anda belum menyimpan perubahan yang " +"dilakukan pada medan-medan individu. Sila klik OK to untuk simpan. Anda " +"perlu melakukan semula tindakan tersebut." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Anda telah memilih sesuatu tindakan, dan belum membuat perubahan pada medan-" +"medan individu. Anda mungkin sedang mencari butang Pergi dan bukannya butang " +"Simpan." + +msgid "Now" +msgstr "Sekarang" + +msgid "Midnight" +msgstr "Tengah malam" + +msgid "6 a.m." +msgstr "6 pagi" + +msgid "Noon" +msgstr "Tengahari" + +msgid "6 p.m." +msgstr "6 malam" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Anda %s jam ke depan daripada masa pelayan." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Anda %s jam ke belakang daripada masa pelayan." + +msgid "Choose a Time" +msgstr "Pilih Masa" + +msgid "Choose a time" +msgstr "Pilih masa" + +msgid "Cancel" +msgstr "Batal" + +msgid "Today" +msgstr "Hari ini" + +msgid "Choose a Date" +msgstr "Pilih Tarikh" + +msgid "Yesterday" +msgstr "Semalam" + +msgid "Tomorrow" +msgstr "Esok" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Mac" + +msgid "April" +msgstr "Arpil" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Jun" + +msgid "July" +msgstr "Julai" + +msgid "August" +msgstr "Ogos" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Disember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ogo" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dis" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "A" + +msgctxt "one letter Monday" +msgid "M" +msgstr "I" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Se" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "R" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "K" + +msgctxt "one letter Friday" +msgid "F" +msgstr "J" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Sa" + +msgid "Show" +msgstr "Tunjuk" + +msgid "Hide" +msgstr "Sorok" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c22fe6cd049bf318295dc51d1c2bf7a9d76d5f4f GIT binary patch literal 3677 zcmb7_S&tpX6@bf_EyE6hu+v~e#!Jt=W7cUe*w|y^$P*mTH6$StY37z^8hRPJ`+9r@ zLOlo&HXy)Y5K9t)5CRDYV=3TZXL(5;c!=^ADN-V}#18-=@tp5e)t!woF|Dcl)u}pl zwmRMO--}N_q}29XTmN#3sz9Jo^k8X!Sj({cI)rJA0WR6 z&xS{!od2U+|0}#0`E$qrzzdMSgkoQvp;R9@8;adapxCF8}IlmsFsDIq+>t8{s*I6{%74Rk~=Qcu#Zv=8ZiZD$)%b?`Tb$#pcSXs%qfpHUK6=RSgeb9R( zwgyA)PWl4#rcawt9;wBT%uK24pwxZ^gX@}ke#lIEt>3L&30E`Z{%8Y}uf#6-N-m^m zo{JnWgx4@6?==jcG52ww4AU1}x9JzD%>YBbFLFOK&!(|5%2H(!s7>v*4DZGQBvBd_ zWgc3MI98kD*lUNSW;5-Ync6%NrsLW{j@boof|FU^4dyH*U2ifhim5Db_p}zsf!f^3 zbDfrPH&9!`GJG&Bw5Rht%SF_UGD@_Wv8`iWA{gAMwmd`}nHSCvdP_FeNw8;A7*4_{ zMx~wWq6pO1C@yubwq@#W8?3rJ!~BkH+>26!tW(15;m)M`X~tiw)h?Z6d$k%3P73&(z&^LQF!MTEGl+V+wd zc9JB_yQ)Qny(CM^2|Mi)jA~JzK((@V*j2mJhtq5-Rl5t4yidntB)3}qg3Aljw%VCz z4-vJ$z3tzt^MW1-ytb)f-!46w<)uGTj7M$%uFiPjx3a+N+j&pR-<)exN?&dx@YXa3 zZ}*#n{@{=|cw2DG(5mKOvx%a=OYe=u<~+Tjo?dfRlc#S-Sd@M%57QzJ>6O6yNtn`b z-VPnLb?mJp8pMsU5eK4lPqu+G>3Am`*M3WfN#Nbp$rDYB^iP!KWYB0#O-&8ZuxSzP z(fbC-xM6eZA$G?bNw=}0Z)E$(@ND*j1I@n8)RT7cTir?0EA_szF&T$Zx>jy8FLb$n zcWbME$E=?C+M{!SI33H{Q92%YcRU!CGhqf^((T(Bck(dyw`O@#1YSC6#A5y6TF*|` zH`n&5x_YawKB}ujb@f?YJzZBH*VTu0^`sG}>*{!2Rm@LSFF^67x;kKve_B_+t*bxv ztR4HVJ!#{*daAB|Ustc!)hBg@^H+Lim}BOs+4?i_qWZRp^H?u_4v76XZMepgJ+ZhR zma&67k|xH=OgK#H3r%2^;+&XY8SD4xckS7X$OT6)8vFbr;*rxQHEF(FCNzQ~9CUwU zY}gnVIY$sA@;$T{v0=)1RBn%Uu%4&`ksp>dYRC;7@9iMYXfek*4aCIeDlv0rVHq29 z%pA5?yNH%}BfK|EnO>dox%ldxEFUx-^Mui~?ZO=UMD#tH2~~UZ^h{-Z+m+cH!xb6Q zoZJU_@|M^Z;5MlR4vCt%9FrWZZ+`h>*;Yo{mS)3;tC3w^*c@nK%)WuIBTxp8SeaLf zZjkx6H+b({_|^g~Yb#Qj_I2+hd$|3bsgQU^1~$xTvudMSs6-U@R%~Cm3`mFE(IrU= z!uP|vaUDPdp=cBM7*CufL|Z(Z(NSX4z9}c|N^?vyLC-sx4UFR)XRn#xdEIE=Hv3Po zo_?yHuK08R3jgo1Q!v~=Yt(An{;Nz?Y$s5mPfq2N#uncGtYAw`pJ, 2013-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "စီမံခန့်ခွဲမှု" + +msgid "All" +msgstr "အားလုံး" + +msgid "Yes" +msgstr "ဟုတ်" + +msgid "No" +msgstr "မဟုတ်" + +msgid "Unknown" +msgstr "အမည်မသိ" + +msgid "Any date" +msgstr "နှစ်သက်ရာရက်စွဲ" + +msgid "Today" +msgstr "ယနေ့" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "ယခုလ" + +msgid "This year" +msgstr "ယခုနှစ်" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "လုပ်ဆောင်ချက်:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "ဖယ်ရှား" + +msgid "action time" +msgstr "" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "နှင့်" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "တစ်ခုမှမဟုတ်" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "ထည့်သွင်း %s" + +#, python-format +msgid "Change %s" +msgstr "ပြောင်းလဲ %s" + +msgid "Database error" +msgstr "အချက်အလက်အစုအမှား" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "မှတ်တမ်းပြောင်းလဲ: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "ဒီဂျန်ဂိုစီမံခန့်ခွဲမှု" + +msgid "Site administration" +msgstr "ဆိုက်စီမံခန့်ခွဲမှု" + +msgid "Log in" +msgstr "ဖွင့်ဝင်" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "ပင်မ" + +msgid "Server error" +msgstr "ဆာဗာအမှားပြ" + +msgid "Server error (500)" +msgstr "ဆာဗာအမှားပြ (၅၀၀)" + +msgid "Server Error (500)" +msgstr "ဆာဗာအမှားပြ (၅၀၀)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "သွား" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "စကားဝှက်ပြောင်း" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "ကြိုဆို၊ " + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "စာရွက်စာတမ်း" + +msgid "Log out" +msgstr "ဖွင့်ထွက်" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "History" +msgstr "မှတ်တမ်း" + +msgid "View on site" +msgstr "" + +msgid "Filter" +msgstr "စီစစ်မှု" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "ပယ်ဖျက်" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "ပြောင်းလဲ" + +msgid "Delete?" +msgstr "ပယ်ဖျက်?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "အကျဉ်းချုပ်" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "ထည့်သွင်း" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "ရက်စွဲ/အချိန်" + +msgid "User" +msgstr "အသုံးပြုသူ" + +msgid "Action" +msgstr "လုပ်ဆောင်ချက်" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "သိမ်းဆည်း" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "ရှာဖွေ" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "စကားဝှက်ပြောင်း" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "အီးမေးလ်လိပ်စာ:" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "ရက်စွဲအားလုံး" + +#, python-format +msgid "Select %s" +msgstr "ရွေးချယ် %s" + +#, python-format +msgid "Select %s to change" +msgstr "ပြောင်းလဲရန် %s ရွေးချယ်" + +msgid "Date:" +msgstr "ရက်စွဲ:" + +msgid "Time:" +msgstr "အချိန်:" + +msgid "Lookup" +msgstr "ပြန်ကြည့်" + +msgid "Currently:" +msgstr "လက်ရှိ:" + +msgid "Change:" +msgstr "ပြောင်းလဲ:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..000b8bcb2dd32a1ec40f47d057804348251ae5c6 GIT binary patch literal 3268 zcmdUvTaOe)6vtZyF9Tk{`z4_S*KkSC&a85q6$7kn#IU--k%Y(IncCUL?ygODFT=bw z1~riwA%amc1Ro6xUShxi^5O^Z$wVI{X=3~gCcgNqs-Bq@CW4U{JJbEII_K0m|8uFi zvV75Thv#wLr+9zk9pat8jStV(+Z|^kxDC7$?0`$btk}O_;4$!C6?_bg z2&(a2Q2RYq;3ZJU{~6T&uYzmAKMMIOlzZUif|KAOlGO2kT4McO1uwGy6V&qad@ytF zb$B{#Ha1-HfIaaE}YkA5Z7n?MDR;zqzL?kkki6jkWE?aRdXWr zI$d&!3Zzl9$Sw7^ze@xRv#8b)y)0u2vmcR~e~PFm!jz{l50ux7+AeHoMi$qPn5> ze05!gr?ksUQnwy^Q4)BmifiH(FN(-$mt=|p@d9kvZVk+~>_^k;Mb1R6Ij<$%y7a=D z*ghABGLd5SOq$NthKJkjb~)7^{b_li+)&}L&8Z7PaeO%J46i9o?3~!q&%Ro&l*Uw) z$_Q4}xF%A0ARV3!JU<#`0=+nq>6SO@lVpnnjNo2D9*o5Ic`CjZ+oMg$}x+WKLMP&z#!NH+j6Mo, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s ကိုရယူနိုင်" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"%s သည်ရယူနိုင်သောစာရင်းဖြစ်။ အောက်ဖော်ပြပါဘူးများတွင်အချို့ကိုရွေးချယ်နိုင်ပြီးဘူးနှစ်ခုကြားရှိ\"ရွေး" +"\"များကိုကလစ်နှိပ်။" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "ယခုဘူးထဲတွင်စာသားရိုက်ထည့်ပြီး %s ရယူနိုင်သောစာရင်းကိုစိစစ်နိုင်။" + +msgid "Filter" +msgstr "စီစစ်မှု" + +msgid "Choose all" +msgstr "အားလံုးရွေး" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "%s အားလံုးကိုတစ်ကြိမ်တည်းဖြင့်ရွေးချယ်ရန်ကလစ်နှိပ်။" + +msgid "Choose" +msgstr "ရွေး" + +msgid "Remove" +msgstr "ဖယ်ရှား" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ရွေးပြီး" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"%s သည်ရယူနိုင်သောစာရင်းဖြစ်။ အောက်ဖော်ပြပါဘူးများတွင်အချို့ကိုဖယ်ရှားနိုင်ပြီးဘူးနှစ်ခုကြားရှိ\"ဖယ်ရှား" +"\"ကိုကလစ်နှိပ်။" + +msgid "Remove all" +msgstr "အားလံုးဖယ်ရှား" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "%s အားလံုးကိုတစ်ကြိမ်တည်းဖြင့်ဖယ်ရှားရန်ကလစ်နှိပ်။" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s မှ %(sel)s ရွေးချယ်ပြီး" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "ယခု" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "အချိန်ရွေးပါ" + +msgid "Midnight" +msgstr "သန်းခေါင်" + +msgid "6 a.m." +msgstr "မနက်၆နာရီ" + +msgid "Noon" +msgstr "မွန်းတည့်" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "ပယ်ဖျက်" + +msgid "Today" +msgstr "ယနေ့" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "မနေ့" + +msgid "Tomorrow" +msgstr "မနက်ဖြန်" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ပြသ" + +msgid "Hide" +msgstr "ဖုံးကွယ်" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea77ddde43fddf5181704344e043d6a5e49b6909 GIT binary patch literal 16244 zcmc(l3y>T~dB@x4Y4NtfU~FI{EbC<7tz;Qt`y^RdIz7(T3+ZGbuu*u4iAH!n1C^F^E5Iz4kiRDrC=8%KB$6%RDdc1q?`b*R1ruVVn|Vy%7gs=-95W| zr<3p_Rhhcp|MW~x_t)RMyYC-Pf9m@T*Ow^gP#$=iF^_^*KZ_r(;CaTp2wV!D30@4I z4ekP84;}{31HbN{{|mT{`ZJ$z%vx{{sPAtEpAOy$J_Ec9d+RuTa z=SLoY1HPF0882}CTmU|k`Wo=L;5tzKT>+j3?(*+n2i{0M1m6b!7<>*`JKfDE14Y*@ zpuT%I$e;PJ$IpRG$^0dF7Wf@d^#2090Q?n5m*(YX7&8Q}230=@>bnMbA$UCqYt85U z`!9k^sDB+4{oesK{*OVm`#C7OehF&czX3J=b6;r83UCM%9eco+gRcYieil3ez6ZP( zTmm!i18)GQzzY!KUEuAY`1fi$7r!@xqI*9m{?tLy)d5A%+rZa=w}Kk)TcGIs1$Y2_ z6g(Fke~B>(n1H8(e-CP$pMawG=imzcMK5#xod;?@ zYeCVw9+VvRfUwj|f}-;}5RsZUgOc+dpyqoYC^{Yh)z3FT&Es!C_4gxC{XGJn5B?T} zBy&DOl-+Fw#g~1ccs2MCsCixbN~e#TJ&uE# z-)>Oy2|>}<1|_#6p!oMrkGJ{vw}YDhhe7rG8Bp{80(dF-W$-re-@&JVZ#mcXcQg1F z>hA~Ff@i@T`KjIDVXz5q0Dl0AFE2XJ@qINYIlaMS9aO(LD7t4s(Q~tZ|6WjZecaQZa5H$yO2_{#pyWRTJ`=nJ zJPo|v*Y53McJ)r3O0I2al0jk}fd;FSz{yp&NJpU&U)|g*{vbQsb zjX{)V1t@*F5)@t6fER;JQ1pEo)I9D1pACM+_Go0@-qGbp;>4{F>`gPPZ8LDBgY@O1E-;2GdUp!oc6 zzWy6f<1TrX!!tmQcMhn2hrt(sqoBs!;om1bbr`NzR`Q2#6N3UGX_F&_l)0A=?h zuXg>`!RJ$-1x3d@LDBUt@J#Sip!EMQK)wH4@P*(*ATHKC3O);b9?JD>@N7`}H3W)Z zBcSYbEhze53t~d%5GZ@P1r%TI0!7DtpyvNo@WtRaK+WSP;1D={iKFK|pvJoo6o2jq z#gA`+xMuSRC_10RWRHN$K+WSL;23xel;8MoQ2MrR)R;}+Rp2`CL!id}J}CXWhKDKG z1jUDkK+W@EU;h~>xjX{C1pF;1`+UiI_x&qC)hpns;95}qTmov|mw}qkZczNV8e9d| z!H6Y;@y3A5_0f zLCNP_P;{&TCD)A}uLNZ`2YfvQHJ=uE3iwHiF3}>sV_r6XtN>q65e>TDNU2e7RE0~n zf$Orec!M5r9i*I1d6Oz!qU&XpY0BM{Wt2aqpnB$g6kW3AO_YzS;xAO+Uf1#~UXN3l zzWEc%%PBWgK0}dQ|B&*>6!GX?l*=hol+RKsl)-B?70K)_igw3yIdq->lKSG(I+(xNWzDOyr`?%Ro zxs&orisblC%G)WQqv-lPWvjh2rt4AmuIn5JHXqXMJ(N9^P!+DLC~viQ_&0FG-(Ldm zph$1;pnQc7r$h z`zyhXln+y`rW6!inFH$|R{Hx-gMa4le-B(kIgiqzoJldkrf#r&Xew?NQFf?^i)OSk z56tqRu-)b+thM4K&WkK8;xyrLwHfC5p(Jdn+47+{$%`QODoJJo8G=Tn_#vs+oTag;?TZyjZHo<(`5S(F_NJQ4-!{g7*MsHCPyi?GSNlBT$r z4#vlVhi|%b`A{S3uFN04>7zj{jq>E-n?6(o(GjLw3HC(UblA>=xCk_hTGWh+sJ4-Q zY=6Dpb6!+=V=iwtgA=}79i&sdty=cT8(y&R9DF@gh^UVM;Y&0 zDYU?Dwd_BgiL%KwkGx>?5|&@Des0uEuTLirL*|W4wc=me`MbxK1^&5(*wHm#_Ds-D zvKAH*!zbN9cjj`W)=fLe*Wb*BNf8vOXITK*Q0)dP^=8@fp(wA0?WlIBq+r>`Kpcck z`d}(;Hq+TSsUz+tqtuW?)XIa|m^PD9DGqq{7)CGo-6Nya-xCb!NJ96Mnuv+B$3w(M zvpGx>q*)*$_trpe?=2R+#>v`0Ff%K>1 zs9DQzgqhiiRKb1IZ(Heoy-+>SqB~$<)y^VE|28+HFbhKD;e1E=#8D<^vAG#n8v$Ay zNgdpCE8QN0t67@EXZmP|b(Csz6CF02(_|{nT0I^xrB0SbNzv?%nz675C&N4nqAW`@ zRijl!+=}cSudSVW2wHfGxZR8bKVtcO5$?GUJ(cL&@}WVKI@E48OSl`prPd`m`X~^4+w=W6I zl2rDx&>~kHZ;>mWEEP{;M7j7NPWm%1-GHCra4^{^2M|r+ELbu z^BgT);EDQhqH+I(^cRKzzZo!66;&Ep;B|B)5g@YrFZce*eQ@K1A`vU_F5 z(rTxLiMljlODl|pVz#Gvj#@gK$oJq%VQCY;Gb}>wlU9qs zrkn@k2!owrb$Gx%+ld!AdEPR>_7u-LK4k-ZEp-V}7FDAd8>5Y-bU47n$|JYJM$}6K zmzx5Ji_fLfGQ%(xBxtxjGj^!E%C z_dtL|$OsL4C(5;O23A^{8bh`!!LHP24%RJ9Mu^Xauv*3JNbC3*4?$QDeI@M_dWguf zZm`=XPSn#zr)_pB`64N_-Q#6_PD!pztaG}*vs+SOb`5CysM(eB=il{aQPDFiKhOp2 zK7qSZL?foQqF^$tHfWnf_9qBuurR4CRdQBqV2;$>>>-v0N*D=nh zSWpeBF8I2+@M#fT41HaCbwaMDgyJd*9ul=7*lBR(gzxhO4V+=>^RlZ!bDw9^R_()p z6~@$5>E|Uoh&Z8*gziS2+-*_bH-$>U;00!1n-Oi zh@bt~rfkY`vO1lTQ7v$~qh?Rq?zDp{*%tZ0!#CY+_F~gy?cRK-w$ho%Lok)4EqIj4 z`|u2<2?jINy&Y!_J;QXpn0*9d`(r7=`a!#h=|4o-=(K|-;dIrzzOl_`;%L^_azzZY zk8HC#4QRQgT)B6r={uXA|IBsa+AGCexHz**sZO)EX4)5Jh(Fk(yfRoHwJsZ4yL$D? z^{cp}WBbnKoP(9XHZuFB(^=)QW?wHP;@|wDc^^)+n6{ioA7&Netk-j{4&!$TtzAkt zS?v&SD){BnnM$-cm@I8)F^*o|!hHZVNnr*&TNY`pD6|>I?J7C0AimZgPyg!t5T9aCKn|%W-`f^1^L$~f$25r}DD~X-^Is~1pYbFRR z4IjGxB+D_PHoIshp2pmpv>)xC~VojN`r=3()VVZH0(Y=oXkKeEN-)Mi6@(KI@J)a$x}=d zi^HbatH&5S&uf(+@IFK7e1t+QUHwUj^U?RQ&t}mNdc!}V`JBAV6U``7dZuWGV3qsGPgH{O zqW?6D+8B<~9p{j(?hfprrCA=##Gy-@teeZH?Lv>hH5DI`jHl^Z+Yo=1?TCp=cq;BoWuMBlX$S|2;wMO_ zJ$qe_G#tca8pzi#D(z;Vww*{cG`LI6)t`;yvhIW0`*LC|Gh>VTZQFKypXu#C;6rLT=7#rs=6E&iFdopYteF)(wPdi?5GGw4z$*4D`H@A9gjubCTE_XQi7IfqfB%z0AowTJ2TQ#I31%Vj$OBJ~ZH`Egf0^TRC29m-uS@Ep%9CM`{#K za>@!H5$QKnsu(V%7* z=1cZkmou_6ugA5KO`Uo^GLeo3OZMy@*&EHoYC1B8ZjAVfYCOLUWnvDimV36w%r^#y?X){gYuvtmc%V?I=JIrHbg7`Q}2A<8b zfWuBUrH$6y(Pl6-T@>xnRjX!aXDg&Vq~BA~kqUOa%F$Uu(|5EgnOwDU$Nwqp?$#~*r-1Jw&11}N#8e;(pqt!9DBD|g=E9&N`g zNTcfPSh$-}vm>hGBjRT7Cg4z^q<8+qe15fe3Q~6Az8u`LB|+UmSYsc`AA>9_4?&i( z^mlLIg)_UAxqVn?T^l!veH=4D8z&{@>6ewZChTTSI-SD!U2{iCKv^A4vnx=TEm=?_ z7>JoTr@5m6ev1b)(BN3fb8Y8Ewa}cr%yI@EQEpNWtjI{>Ys8FS+q zo3Ww}T|apYf6b0gqhYokCMK{n=oTbuY}qhz_KfC^&dl9S;I5H@;mGa6Zz{rMsH7Zx z)a=cu*(XzVzXT*5xs-$Xhdt4k46|SKHDb_o`llVXQMA$Z0e==TCD&v=>saxL9;E=z z4-6g}OXvH?#t+^fG_ptw?|k5szTQtpc>|V2i)^3W?v(VXUG*<6&CX>*gAsAtV2M6{NHiD(eK55 z!6J(-?t1AB+zCg<4y88A?1-2NhaGm{#Xkwg7}%yXiUerV6e`21Xk4F$Qm;aI7bM}l zhUof;NNOLlF%`)%oxiBS*-0?w*8Gk;75TY$v@I zM-}Z^j~4~Q_UL9(#Lz|%*YWB;4UpodVg(Mqrl(GWtbx?5;9t!NMsLCV-6Vm_2kpCG8Ag;FVyuPUKp~s7!qJU zRqpEs$ZcG4EFiJuKa6I4l8h6|>scp}U29y-$xTx3gl<~|rP8+huFN*EneOq_*bfIt z%GnGNDL9q}8L2pc@!JHcPoQLD3G0ii4mEO*{X|46BF4xcEOhfMWk}(eL|X?dl?wTf zRfJNV(FB`3x?h|AX}`?5^1hz6H0x5?_FGG~p2FvDz1}d;uul4Ee?^lPE0)}(+kc2O z3RcX8oEQhKQoeyt_&*!>xt1?{wr}oO18rn(%h{T9D0$2sV@=4+=){^`?;Q{5!?v_3 z@xq1R!sC?*ERj=Mw145@O8<@N-}-}J;`|^|77l1Z3aFln^!{{ zNBPzrnOJ$|{-7i(PH<{s6Gd%kEpkwTk>#9~IK`Lv#fJOy-y{^uS(Pe-RV241*C3TEL2qb2P)U8@nq2B{ew!w**3? zuU&RAgDI&HWw||1Ft!6(p5U*$O-tV{4ytU;Nbjcz@!yPuG!V+jjNdZszY zH=AsZ%W*G%?u;V0-;wfK@54ETj-$&;)NGJCM#->J1ISho)RN8FBsQA2aXCZ_Ts>T6 zCT@yE_1FqfX|Lks6Ha-DgK6=NF>P=!2hm(*sSA^C7hglzkN*&9HgUC02?NAIX$dDN zSA_fx2Zu$Nj#w4k4Bt>;$GVQ}n2g=|8q7o7K9rM@F4$-V zg~--2s}jt8&;=T}Ml(B#9Yju@nV=@+B>CsdlP-y22+rK*_ST}<^T$E+jeLfCqQt@F z=6!RgfluQdU5K&gOb236;3Ym*9LFl*V<>t9r{&Qr$9~56h+@M4u!ji#RL+(H> zV4b)n9IxqA)Gxy{7Kaq#CYdp+UvpG)M#qYcS&o`AYshs@Q8$R!#+350N$bY(q{V*= kW3I;ALSCL#aEO%H-B8J-ymu>rk?}F(@9b%X3zz190h-3&cK`qY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..3f6445ee4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2013-2014 +# Jon , 2015-2016 +# Jon , 2017-2020 +# Jon , 2013 +# Jon , 2011,2013 +# Sigurd Gartmann , 2012 +# Tommy Strand , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-09-04 13:37+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Slettet %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan ikke slette %(name)s" + +msgid "Are you sure?" +msgstr "Er du sikker?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Slett valgte %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administrasjon" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +msgid "Unknown" +msgstr "Ukjent" + +msgid "Any date" +msgstr "Når som helst" + +msgid "Today" +msgstr "I dag" + +msgid "Past 7 days" +msgstr "Siste syv dager" + +msgid "This month" +msgstr "Denne måneden" + +msgid "This year" +msgstr "I år" + +msgid "No date" +msgstr "Ingen dato" + +msgid "Has date" +msgstr "Har dato" + +msgid "Empty" +msgstr "Tom" + +msgid "Not empty" +msgstr "Ikke tom" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Vennligst oppgi gyldig %(username)s og passord til en " +"administrasjonsbrukerkonto. Merk at det er forskjell på små og store " +"bokstaver." + +msgid "Action:" +msgstr "Handling:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Legg til ny %(verbose_name)s" + +msgid "Remove" +msgstr "Fjern" + +msgid "Addition" +msgstr "Tillegg" + +msgid "Change" +msgstr "Endre" + +msgid "Deletion" +msgstr "Sletting" + +msgid "action time" +msgstr "tid for handling" + +msgid "user" +msgstr "bruker" + +msgid "content type" +msgstr "innholdstype" + +msgid "object id" +msgstr "objekt-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekt-repr" + +msgid "action flag" +msgstr "handlingsflagg" + +msgid "change message" +msgstr "endre melding" + +msgid "log entry" +msgstr "logginnlegg" + +msgid "log entries" +msgstr "logginnlegg" + +#, python-format +msgid "Added “%(object)s”." +msgstr "La til \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Endret \"%(object)s\" — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Slettet \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "LogEntry-objekt" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "La til {name} \"{object}\"." + +msgid "Added." +msgstr "Lagt til." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Endret {fields} for {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Endret {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Slettet {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ingen felt endret." + +msgid "None" +msgstr "Ingen" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Hold nede «Control», eller «Command» på en Mac, for å velge mer enn én." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" ble lagt til." + +msgid "You may edit it again below." +msgstr "Du kan endre det igjen nedenfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "{name} \"{obj}\" ble lagt til. Du kan legge til en ny {name} nedenfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" ble endret. Du kan redigere videre nedenfor." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" ble lagt til. Du kan redigere videre nedenfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" ble endret. Du kan legge til en ny {name} nedenfor." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" ble endret." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Du må velge objekter for å utføre handlinger på dem. Ingen objekter har " +"blitt endret." + +msgid "No action selected." +msgstr "Ingen handling valgt." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\" ble slettet." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s med ID \"%(key)s\" eksisterer ikke. Kanskje det ble slettet?" + +#, python-format +msgid "Add %s" +msgstr "Legg til ny %s" + +#, python-format +msgid "Change %s" +msgstr "Endre %s" + +#, python-format +msgid "View %s" +msgstr "Se %s" + +msgid "Database error" +msgstr "Databasefeil" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ble endret." +msgstr[1] "%(count)s %(name)s ble endret." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valgt" +msgstr[1] "Alle %(total_count)s valgt" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 av %(cnt)s valgt" + +#, python-format +msgid "Change history: %s" +msgstr "Endringshistorikk: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Sletting av %(class_name)s «%(instance)s» krever sletting av følgende " +"beskyttede relaterte objekter: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administrasjonsside" + +msgid "Django administration" +msgstr "Django-administrasjon" + +msgid "Site administration" +msgstr "Nettstedsadministrasjon" + +msgid "Log in" +msgstr "Logg inn" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-administrasjon" + +msgid "Page not found" +msgstr "Fant ikke siden" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Beklager, men siden du spør etter finnes ikke." + +msgid "Home" +msgstr "Hjem" + +msgid "Server error" +msgstr "Tjenerfeil" + +msgid "Server error (500)" +msgstr "Tjenerfeil (500)" + +msgid "Server Error (500)" +msgstr "Tjenerfeil (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-" +"post, og vil bli fikset snart. Takk for din tålmodighet." + +msgid "Run the selected action" +msgstr "Utfør den valgte handlingen" + +msgid "Go" +msgstr "Gå" + +msgid "Click here to select the objects across all pages" +msgstr "Trykk her for å velge samtlige objekter fra alle sider" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Velg alle %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Nullstill valg" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeller i %(name)s-applikasjonen" + +msgid "Add" +msgstr "Legg til" + +msgid "View" +msgstr "Se" + +msgid "You don’t have permission to view or edit anything." +msgstr "Du har ikke tillatelse til å vise eller endre noe." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å " +"endre flere brukerinnstillinger." + +msgid "Enter a username and password." +msgstr "Skriv inn brukernavn og passord." + +msgid "Change password" +msgstr "Endre passord" + +msgid "Please correct the error below." +msgstr "Vennligst korriger feilen under." + +msgid "Please correct the errors below." +msgstr "Vennligst korriger feilene under." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Skriv inn et nytt passord for brukeren %(username)s." + +msgid "Welcome," +msgstr "Velkommen," + +msgid "View site" +msgstr "Vis nettsted" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Log out" +msgstr "Logg ut" + +#, python-format +msgid "Add %(name)s" +msgstr "Legg til ny %(name)s" + +msgid "History" +msgstr "Historikk" + +msgid "View on site" +msgstr "Vis på nettsted" + +msgid "Filter" +msgstr "Filtrering" + +msgid "Clear all filters" +msgstr "Fjern alle filtre" + +msgid "Remove from sorting" +msgstr "Fjern fra sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteringsprioritet: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Slå av og på sortering" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Om du sletter %(object_name)s «%(escaped_object)s», vil også relaterte " +"objekter slettes, men du har ikke tillatelse til å slette følgende " +"objekttyper:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Sletting av %(object_name)s «%(escaped_object)s» krever sletting av følgende " +"beskyttede relaterte objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Er du sikker på at du vil slette %(object_name)s «%(escaped_object)s»? Alle " +"de følgende relaterte objektene vil bli slettet:" + +msgid "Objects" +msgstr "Objekter" + +msgid "Yes, I’m sure" +msgstr "Ja, jeg er sikker" + +msgid "No, take me back" +msgstr "Nei, ta meg tilbake" + +msgid "Delete multiple objects" +msgstr "Slett flere objekter" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Sletting av det valgte %(objects_name)s ville resultere i sletting av " +"relaterte objekter, men kontoen din har ikke tillatelse til å slette " +"følgende objekttyper:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Sletting av det valgte %(objects_name)s ville kreve sletting av følgende " +"beskyttede relaterte objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Er du sikker på vil slette det valgte %(objects_name)s? De følgende " +"objektene og deres relaterte objekter vil bli slettet:" + +msgid "Delete?" +msgstr "Slette?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Etter %(filter_title)s " + +msgid "Summary" +msgstr "Oppsummering" + +msgid "Recent actions" +msgstr "Siste handlinger" + +msgid "My actions" +msgstr "Mine handlinger" + +msgid "None available" +msgstr "Ingen tilgjengelige" + +msgid "Unknown content" +msgstr "Ukjent innhold" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Noe er galt med databaseinstallasjonen din. Sørg for at databasetabellene er " +"opprettet og at brukeren har de nødvendige rettighetene." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Du er logget inn som %(username)s, men er ikke autorisert til å få tilgang " +"til denne siden. Ønsker du å logge inn med en annen konto?" + +msgid "Forgotten your password or username?" +msgstr "Glemt brukernavnet eller passordet ditt?" + +msgid "Toggle navigation" +msgstr "Veksle navigasjon" + +msgid "Date/time" +msgstr "Dato/tid" + +msgid "User" +msgstr "Bruker" + +msgid "Action" +msgstr "Handling" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dette objektet har ingen endringshistorikk. Det ble sannsynligvis ikke lagt " +"til på denne administrasjonssiden." + +msgid "Show all" +msgstr "Vis alle" + +msgid "Save" +msgstr "Lagre" + +msgid "Popup closing…" +msgstr "Lukker popup..." + +msgid "Search" +msgstr "Søk" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultater" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totalt" + +msgid "Save as new" +msgstr "Lagre som ny" + +msgid "Save and add another" +msgstr "Lagre og legg til ny" + +msgid "Save and continue editing" +msgstr "Lagre og fortsett å redigere" + +msgid "Save and view" +msgstr "Lagre og se" + +msgid "Close" +msgstr "Lukk" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Endre valgt %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Legg til ny %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Slett valgte %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Takk for i dag." + +msgid "Log in again" +msgstr "Logg inn igjen" + +msgid "Password change" +msgstr "Endre passord" + +msgid "Your password was changed." +msgstr "Ditt passord ble endret." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Av sikkerhetsgrunner må du oppgi ditt gamle passord. Deretter oppgir du det " +"nye passordet ditt to ganger, slik at vi kan kontrollere at det er korrekt." + +msgid "Change my password" +msgstr "Endre passord" + +msgid "Password reset" +msgstr "Nullstill passord" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Passordet ditt er satt. Du kan nå logge inn." + +msgid "Password reset confirmation" +msgstr "Bekreftelse på nullstilt passord" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Oppgi det nye passordet to ganger, for å sikre at det er skrevet korrekt." + +msgid "New password:" +msgstr "Nytt passord:" + +msgid "Confirm password:" +msgstr "Gjenta nytt passord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Nullstillingslenken er ugyldig, kanskje fordi den allerede har vært brukt. " +"Vennligst nullstill passordet ditt på nytt." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Vi har sendt deg en e-post med instruksjoner for nullstilling av passord, " +"hvis en konto finnes på den e-postadressen du oppga. Du bør motta den om " +"kort tid." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Hvis du ikke mottar en e-post, sjekk igjen at du har oppgitt den adressen du " +"er registrert med og sjekk spam-mappen din." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Du mottar denne e-posten fordi du har bedt om nullstilling av passordet ditt " +"på %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Vennligst gå til følgende side og velg et nytt passord:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Brukernavnet ditt, i tilfelle du har glemt det:" + +msgid "Thanks for using our site!" +msgstr "Takk for at du bruker siden vår!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Hilsen %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Glemt passordet ditt? Oppgi e-postadressen din under, så sender vi deg en e-" +"post med instruksjoner for nullstilling av passord." + +msgid "Email address:" +msgstr "E-postadresse:" + +msgid "Reset my password" +msgstr "Nullstill mitt passord" + +msgid "All dates" +msgstr "Alle datoer" + +#, python-format +msgid "Select %s" +msgstr "Velg %s" + +#, python-format +msgid "Select %s to change" +msgstr "Velg %s du ønsker å endre" + +#, python-format +msgid "Select %s to view" +msgstr "Velg %s å se" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Tid:" + +msgid "Lookup" +msgstr "Oppslag" + +msgid "Currently:" +msgstr "Nåværende:" + +msgid "Change:" +msgstr "Endre:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b1d74e4a1d00c82f941b997012a64d09c923632 GIT binary patch literal 4939 zcmbuDQEVJX8OH}WXmMIf5*kQo=)|pyO|xg8+Zy+RXBtRe`A@Toa=Pu`q zlSVMQ+2790H?!Y-^UXJ7zkQ_eEr#?Y@_m%w&)5}W0S}~WA7t#a;0xe~z#n`548)JU z<;%YU??U;vzWk2opTN6O|5wldcpk!F6R1B9ei(cZydNxr4}lxtonYqqJcu8A5f4)B zW$+I08@~J<&+mcw1lt8a0R8}^aenCA-vFOO`KMqNJcdE2y#%?ctC_*14+*p zLDKUTkiP$2@SEW4;Mc(g3_{=i1xVxl8jmyJ??CEz6pz=yli;i1PrwfN3X(7{f?oxx-}gb1e-r#9_wzoQ??dEE1UknA)CeiS_I%S#~HX%)l}Yz?IE zZF}y3WS8eXUjiRM`4#YC@JAro@m&xmW`73hJAVgBkAM3zyC?t79iDf29tLSWkAc+x z1W5fR!HeKDcpl6^`p%mm$-f1X{4YV0{|$(xV1EEf-#>yR_ZRSG@NeK(z!xxil0S4f zAMY@@it-7N^!^g~HLwA`4*nCg;HyXS@$QCkXxzh|_j(@pJn4DLbINnZGw>{VKIZv2 zh-G9;o=a$W{jJMz(cVx^{@>y|0U{%DQaVq+u0VGnp`bR*4gf^7%NF?1E6P z?n0LI*@a9=wk}M)iD#d!$DxX&rezyiD?F?$^D8>z!q8-SQ)h;YrW7IBGnJ+*4X5c8 z50-`Mw=c|VvKg!JwuU`ew42X*L-*Kb-D&IuM7$c8soJoA!C4wOfFOhPT4f=V0i}T68x8Wvax7 zsb!0_$=iyzRu4jazj`V9hE!*U3c@BgD9HQL7Wt(_id5#l!8e~K>rwxK_SpAIVl-46 z8JH~BE;r4HVwuW6dayxc7+V*n29{ZCIF)I*5kotT$4BbLP@#q`p;KFAqE<7qTjXu6 zY?HfSSip0<-i5~kqU2b^ARZO)GS)PRPzAhTzio-3oY) zi6h>jwm(+8fw)Ssvw)YeCLdD@;8@ErrWEkTw1VBFg_HA&iQ(vl%4prXR#dk>TDK)^ zMq8q=wXZgFlKbka&CH}ESsj(EX7a|$XJx4J>Sx&{qjzxV1#4ljElr9YR_5UjwvnE= zEIZoRU_FiEFnB79(x9r#eB#n(a9MU^5)J4yEA#oe`BE_VNKjhjrAN#2a}UoUOO;1KKobD;zYVYkPe7b3Er#w5`>-CD3I>!xp zwOH5f*<7mu5<$I5)8ZkCX}uARv{wl~?U-ClRqaLwnGq(k?wy ztptnL<>*@tX@aw=u0urSGGDC4cBpWftJ=h+Br_rjD%!MDRCHW1U7A0`^Vg+m#ZN8q z(#)BO;T=MBhxd!FNFsalhPj3E+#D+{(sSRvq8caBjznZj;>g`Cmb*36w`^M`k$Z5Q z6d{c43zoMM-D=5{obBdyIP@gjCY{`%PbYD!#VHi-?eZ>$cGn1Zyr-gV<1micKAFaj zH1KE|hP$clmtB?VzRSkouCdkH!4AzgF|HX&Om~f#?iwi`c)?XeK=0B#8Dd?UR++D6 z9GeCg4Z2g1j_{cLmJvX);z3g8_QZHiwBCEDaiKvlU>ke8Y_pYLDYl%sD`XXCl#v_7 zcAT@H$DZF&T8?1VU|@B)U!gaBAcoaW6Yio#8SL_3(@QKP%$QacfQ1;JXo9 z!y#fKsn}M_#9d4=boOdUTu|-6E$Jd*$OsBH@pi-pyTOVWE!x{P493K6&%Kj236AqH z!R9_qHlr42v1kWzj=L#J6&kd|sPXWGhWX%gq=#{4f#boZxDlp8skE=KD|sH(&+Y97 zEhRb~iF=A0`l5(%PWw6-{igb~pvq(qT#OGUas zF>CtR%D6rF-RuT)x+BK&%r^GkfDH%6z?aEqRNvx6_Znud3tVQPz)cNu9!CLb?ngEI z&D@QXT=4@2#0qgMI`}AE8R&L^kU@W%P;j8gK!Jhcf(r|D>|&?UreYPgj(;X>;U7s= Hw#ohr_@^H2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..1e6ddb658 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po @@ -0,0 +1,269 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eirik Krogstad , 2014 +# Jannis Leidel , 2011 +# Jon, 2015-2016 +# Jon, 2014 +# Jon, 2020-2021 +# Jon, 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 14:20+0000\n" +"Last-Translator: Jon\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Tilgjengelige %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dette er listen over tilgjengelige %s. Du kan velge noen ved å markere de i " +"boksen under og så klikke på \"Velg\"-pilen mellom de to boksene." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skriv i dette feltet for å filtrere ned listen av tilgjengelige %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Velg alle" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikk for å velge alle %s samtidig" + +msgid "Choose" +msgstr "Velg" + +msgid "Remove" +msgstr "Slett" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valgte %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dette er listen over valgte %s. Du kan fjerne noen ved å markere de i boksen " +"under og så klikke på \"Fjern\"-pilen mellom de to boksene." + +msgid "Remove all" +msgstr "Fjern alle" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikk for å fjerne alle valgte %s samtidig" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s av %(cnt)s valgt" +msgstr[1] "%(sel)s av %(cnt)s valgt" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Du har ulagrede endringer i individuelle felter. Hvis du utfører en " +"handling, vil dine ulagrede endringer gå tapt." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Du har valgt en handling, men du har ikke lagret endringene dine i " +"individuelle felter enda. Vennligst trykk OK for å lagre. Du må utføre " +"handlingen på nytt." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Du har valgt en handling, og har ikke gjort noen endringer i individuelle " +"felter. Du ser mest sannsynlig etter Gå-knappen, ikke Lagre-knappen." + +msgid "Now" +msgstr "Nå" + +msgid "Midnight" +msgstr "Midnatt" + +msgid "6 a.m." +msgstr "06:00" + +msgid "Noon" +msgstr "12:00" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Merk: Du er %s time foran server-tid." +msgstr[1] "Merk: Du er %s timer foran server-tid." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Merk: Du er %s time bak server-tid." +msgstr[1] "Merk: Du er %s timer bak server-tid." + +msgid "Choose a Time" +msgstr "Velg et klokkeslett" + +msgid "Choose a time" +msgstr "Velg et klokkeslett" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Today" +msgstr "I dag" + +msgid "Choose a Date" +msgstr "Velg en dato" + +msgid "Yesterday" +msgstr "I går" + +msgid "Tomorrow" +msgstr "I morgen" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Des" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "O" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Vis" + +msgid "Hide" +msgstr "Skjul" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d10471430acb2bdcae906a6074a3c53bd473bf64 GIT binary patch literal 15772 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 jh`1a4SUwc`0Q=ykWJZwac literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 000000000..ab9e55a06 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,688 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Sagar Chalise , 2011 +# Santosh Purbey , 2020 +# Shrawan Poudel , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 06:50+0000\n" +"Last-Translator: Shrawan Poudel \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "%(verbose_name_plural)s छानिएको मेट्नुहोस" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "सफलतापूर्वक मेटियो %(count)d %(items)s ।" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s मेट्न सकिएन " + +msgid "Are you sure?" +msgstr "के तपाई पक्का हुनुहुन्छ ?" + +msgid "Administration" +msgstr "प्रशासन " + +msgid "All" +msgstr "सबै" + +msgid "Yes" +msgstr "हो" + +msgid "No" +msgstr "होइन" + +msgid "Unknown" +msgstr "अज्ञात" + +msgid "Any date" +msgstr "कुनै मिति" + +msgid "Today" +msgstr "आज" + +msgid "Past 7 days" +msgstr "पूर्व ७ दिन" + +msgid "This month" +msgstr "यो महिना" + +msgid "This year" +msgstr "यो साल" + +msgid "No date" +msgstr "मिति छैन" + +msgid "Has date" +msgstr "मिति छ" + +msgid "Empty" +msgstr "खाली" + +msgid "Not empty" +msgstr "खाली छैन" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"कृपया स्टाफ खाताको लागि सही %(username)s र पासवर्ड राख्नु होस । दुवै खाली ठाउँ केस " +"सेन्सिटिव हुन सक्छन् ।" + +msgid "Action:" +msgstr "कार्य:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "अर्को %(verbose_name)s थप्नुहोस ।" + +msgid "Remove" +msgstr "हटाउनुहोस" + +msgid "Addition" +msgstr "थप" + +msgid "Change" +msgstr "फेर्नुहोस" + +msgid "Deletion" +msgstr "हटाइयो" + +msgid "action time" +msgstr "कार्य समय" + +msgid "user" +msgstr "प्रयोग कर्ता" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "वस्तु परिचय" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "एक्सन फ्ल्याग" + +msgid "change message" +msgstr "सन्देश परिवर्तन गर्नुहोस" + +msgid "log entry" +msgstr "लग" + +msgid "log entries" +msgstr "लगहरु" + +#, python-format +msgid "Added “%(object)s”." +msgstr "थपियो “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "बदलियो “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "हटाईयो “%(object)s.”" + +msgid "LogEntry Object" +msgstr "लग ईन्ट्री वस्तु" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "थपियो  {name} “{object}”." + +msgid "Added." +msgstr "थपिएको छ ।" + +msgid "and" +msgstr "र" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "कुनै फाँट फेरिएन ।" + +msgid "None" +msgstr "शुन्य" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "तपाईं तल फेरि सम्पादन गर्न सक्नुहुन्छ।" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "कार्य गर्नका निम्ति वस्तु छान्नु पर्दछ । कुनैपनि छस्तु छानिएको छैन । " + +msgid "No action selected." +msgstr "कार्य छानिएको छैन ।" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s थप्नुहोस" + +#, python-format +msgid "Change %s" +msgstr "%s परिवर्तित ।" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "डाटाबेस त्रुटि" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s सफलतापूर्वक परिवर्तन भयो ।" +msgstr[1] "%(count)s %(name)sहरु सफलतापूर्वक परिवर्तन भयो ।" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s चयन भयो" +msgstr[1] "सबै %(total_count)s चयन भयो" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s को ० चयन गरियो" + +#, python-format +msgid "Change history: %s" +msgstr "इतिहास फेर्नुहोस : %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ज्याङ्गो साइट प्रशासन" + +msgid "Django administration" +msgstr "ज्याङ्गो प्रशासन" + +msgid "Site administration" +msgstr "साइट प्रशासन" + +msgid "Log in" +msgstr "लगिन" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "पृष्ठ भेटिएन" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "हामी क्षमाप्रार्थी छौं, तर अनुरोध गरिएको पृष्ठ फेला पार्न सकिएन।" + +msgid "Home" +msgstr "गृह" + +msgid "Server error" +msgstr "सर्भर त्रुटि" + +msgid "Server error (500)" +msgstr "सर्भर त्रुटि (५००)" + +msgid "Server Error (500)" +msgstr "सर्भर त्रुटि (५००)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"त्यहाँ त्रुटि रहेको छ। यो ईमेल मार्फत साइट प्रशासकहरूलाई सूचित गरिएको छ र तुरुन्तै ठिक " +"गर्नुपर्नेछ। तपाईको धैर्यताको लागि धन्यबाद।" + +msgid "Run the selected action" +msgstr "छानिएको कार्य गर्नुहोस ।" + +msgid "Go" +msgstr "बढ्नुहोस" + +msgid "Click here to select the objects across all pages" +msgstr "सबै पृष्ठभरमा वस्तु छान्न यहाँ थिच्नुहोस ।" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s %(module_name)s सबै छान्नुहोस " + +msgid "Clear selection" +msgstr "चुनेको कुरा हटाउनुहोस ।" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s एप्लिकेसनमा भएको मोडेलहरु" + +msgid "Add" +msgstr "थप्नुहोस " + +msgid "View" +msgstr "" + +msgid "You don’t have permission to view or edit anything." +msgstr "तपाईंसँग केहि पनि हेर्न वा सम्पादन गर्न अनुमति छैन।" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"पहिले, प्रयोगकर्ता नाम र पासवर्ड प्रविष्ट गर्नुहोस्। त्यसो भए, तपाई बढि उपयोगकर्ता " +"विकल्पहरू सम्पादन गर्न सक्षम हुनुहुनेछ।" + +msgid "Enter a username and password." +msgstr "प्रयोगकर्ता नाम र पासवर्ड राख्नुहोस।" + +msgid "Change password" +msgstr "पासवर्ड फेर्नुहोस " + +msgid "Please correct the error below." +msgstr "कृपया तल त्रुटि सुधार गर्नुहोस्।" + +msgid "Please correct the errors below." +msgstr "कृपया तलका त्रुटी सुधार्नु होस ।" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "प्रयोगकर्ता %(username)s को लागि नयाँ पासवर्ड राख्नुहोस ।" + +msgid "Welcome," +msgstr "स्वागतम्" + +msgid "View site" +msgstr "साइट हेर्नु होस ।" + +msgid "Documentation" +msgstr "विस्तृत विवरण" + +msgid "Log out" +msgstr "लग आउट" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s थप्नुहोस" + +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "साइटमा हेर्नुहोस" + +msgid "Filter" +msgstr "छान्नुहोस" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "मेट्नुहोस" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "वहु वस्तुहरु मेट्नुहोस ।" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "%(objects_name)s " + +msgid "Delete?" +msgstr "मेट्नुहुन्छ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s द्वारा" + +msgid "Summary" +msgstr "" + +msgid "Recent actions" +msgstr "भर्खरका कार्यहरू" + +msgid "My actions" +msgstr "मेरो कार्यहरू" + +msgid "None available" +msgstr "कुनै पनि उपलब्ध छैन ।" + +msgid "Unknown content" +msgstr "अज्ञात सामग्री" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"तपाईंको डाटाबेस स्थापनामा केहि गलत छ। निश्चित गर्नुहोस् कि उपयुक्त डाटाबेस टेबलहरू सिर्जना " +"गरिएको छ, र यो सुनिश्चित गर्नुहोस् कि उपयुक्त डाटाबेस उपयुक्त प्रयोगकर्ताद्वारा पढ्न योग्य " +"छ।" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"तपाईं यस %(username)s रूपमा प्रमाणिकरण हुनुहुन्छ, तर यस पृष्ठ पहुँच गर्न अधिकृत हुनुहुन्न। के " +"तपाइँ बिभिन्न खातामा लगईन गर्न चाहानुहुन्छ?" + +msgid "Forgotten your password or username?" +msgstr "पासवर्ड अथवा प्रयोगकर्ता नाम भुल्नुभयो ।" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "मिति/समय" + +msgid "User" +msgstr "प्रयोगकर्ता" + +msgid "Action" +msgstr "कार्य:" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "सबै देखाउनुहोस" + +msgid "Save" +msgstr "बचत गर्नुहोस" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "खोज्नुहोस" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s नतिजा" +msgstr[1] "%(counter)s नतिजाहरु" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "जम्मा %(full_result_count)s" + +msgid "Save as new" +msgstr "नयाँ रुपमा बचत गर्नुहोस" + +msgid "Save and add another" +msgstr "बचत गरेर अर्को थप्नुहोस" + +msgid "Save and continue editing" +msgstr "बचत गरेर संशोधन जारी राख्नुहोस" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "पुन: लगिन गर्नुहोस" + +msgid "Password change" +msgstr "पासवर्ड फेरबदल" + +msgid "Your password was changed." +msgstr "तपाइको पासवर्ड फेरिएको छ ।" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "मेरो पासवर्ड फेर्नुहोस " + +msgid "Password reset" +msgstr "पासवर्डपून: राख्नुहोस । " + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "तपाइको पासवर्ड राखियो । कृपया लगिन गर्नुहोस ।" + +msgid "Password reset confirmation" +msgstr "पासवर्ड पुनर्स्थापना पुष्टि" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "ठीक तरिकाले राखिएको पुष्टि गर्न कृपया नयाँ पासवर्ड दोहोर्याएर राख्नुहोस ।" + +msgid "New password:" +msgstr "नयाँ पासवर्ड :" + +msgid "Confirm password:" +msgstr "पासवर्ड पुष्टि:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "पासवर्ड पुनर्स्थापना प्रयोग भइसकेको छ । कृपया नयाँ पासवर्ड रिसेट माग्नुहोस ।" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +" %(site_name)s को लागि तपाइले पासवर्ड पुन: राख्न आग्रह गरेको हुनाले ई-मेल पाउनुहुदैंछ । " + +msgid "Please go to the following page and choose a new password:" +msgstr "कृपया उक्त पृष्ठमा जानुहोस र नयाँ पासवर्ड राख्नुहोस :" + +msgid "Your username, in case you’ve forgotten:" +msgstr "तपाईंको प्रयोगकर्ता नाम, यदि तपाईंले बिर्सनुभयो भने:" + +msgid "Thanks for using our site!" +msgstr "हाम्रो साइट प्रयोग गरेकोमा धन्यवाद" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s टोली" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"तपाईँको पासवर्ड बिर्सनुभयो? तल तपाईंको ईमेल ठेगाना राख्नुहोस् र हामी नयाँ सेट गर्न ईमेल " +"निर्देशनहरू दिनेछौं।" + +msgid "Email address:" +msgstr "ई-मेल ठेगाना :" + +msgid "Reset my password" +msgstr "मेरो पासवर्ड पुन: राख्नुहोस ।" + +msgid "All dates" +msgstr "सबै मिति" + +#, python-format +msgid "Select %s" +msgstr "%s छान्नुहोस" + +#, python-format +msgid "Select %s to change" +msgstr "%s परिवर्तन गर्न छान्नुहोस ।" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "मिति:" + +msgid "Time:" +msgstr "समय:" + +msgid "Lookup" +msgstr "खोज तलास" + +msgid "Currently:" +msgstr "अहिले :" + +msgid "Change:" +msgstr "फेर्नु होस :" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..820885722a24f51b798ec671a28202510a97f65e GIT binary patch literal 5362 zcmd^>O^h5z6~_w_KC%V^CVU1+t%Z|y?4F%nz-!Ig2v}llz=`DyC^<#FJGDD)db(HL zJv&};AmPi2EI=qYF?N&)(&HHC%K{B>I+g5PDn`H5WiQ|^R+u!*2)1S zS~K(Ss(SV6U;p>&)%<1W&1V(QB;Swm{p4Geng;j1l^>p0!8!0X@a^E_O%A8PchR0M z+XqWr0N+jjmrH!0#AR@T{tUbY{1$iz_!xL6_zO_{zXIM2{sDX^_~)|ySMUMauY+}P z0V7`3IZ)<31&aS?K|bmwetrV}3j8s6Hp??+`J!x;{P%z^M4P{VgGk< z9^CU@rHb#cs0YulJ-(t(!yXho*BbP!n=i}5MQhH*#x@MR>@OQLmYr+2yd?n1T% zqeYW-3^uZQ)`>OKO63oFvx8{bU&?|w+Gq7!FAbu*GTrhUv@S_#O z*^6M%2-bo|+YedWgpJf{a~B!8n#7BotaTm6u@!$gCLK}vONiXgGA1WJZRuoD8M$AW zxUtIC)G*S+)KX?Pq$lZ#n3xp)&lW4u$%K{s$O+YS7&RV-oLlXGx1eF&AfWzM``G1aZ)2pD}JIE znm*ZO^g$$$msEN`x6-1ZR+i${XPFnRwEY$1)s5e(>3hv8c6zFrWvjL6=}xCp$;4@} zY);99X}7H&gyrn%$V~5k75QZ`5X&DF`EznFSxOge`(lrx3|_Ks zu0gcOuWHOLxK*v?roopiv7BFgY_z1S=cnlAxVl>8OnCXmOgG55iKFw&&K@1(cfbI% z9zTi1k9y$}C0s-16GAjVDNN20n`&)MJMB@Va z?6T+ohYiQo#rc0in;T_Ac1cMn@+WL%x}vtoYQ}oUYYQtmTNEqG+!Ho!$0fHESJG-s zv7^`4W}DIE)%l`Jk#xnWoAWlD*JM1$=rp}J6tltcpn)Gqkg76533dg;?m&*yGxTmO zSfiG9TK8c~g5j-Io^38zDxU>%d)&azZZ@UG5M57}@+` zkDM6Eq%o7+fv|VTFfFc*bB-Xhe{L_8Q3c$M@n-fd$DAt?{~PzVCE+*PC5Pxcb_di( zIl<$c(A~cS-MyE0Z5XLnn_}$5+Ze{n?hci^n)H3z&O=>7O?di$MF-x9w95hHW5d0x xc38Ob_-~B%$R4%`??#5sv`nFa3glbQiPdM!ayGkUE3WuUqH=5`L+l@fe*+UY5ySuh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..d55bd9fb5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po @@ -0,0 +1,213 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-10-07 02:46+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "उपलब्ध %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"यो उपलब्ध %s को सुची हो। तपाईंले यी मध्य केही बक्सबाट चयन गरी बक्स बीच्को \"छान्नुहोस " +"\" तीरमा क्लिक गरी छान्नसक्नुहुन्छ । " + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr " उपलब्ध %s को सुचिबाट छान्न यो बक्समा टाइप गर्नुहोस " + +msgid "Filter" +msgstr "छान्नुहोस" + +msgid "Choose all" +msgstr "सबै छान्नुहोस " + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "एकै क्लिकमा सबै %s छान्नुहोस " + +msgid "Choose" +msgstr "छान्नुहोस " + +msgid "Remove" +msgstr "हटाउनुहोस" + +#, javascript-format +msgid "Chosen %s" +msgstr "छानिएको %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"यो छानिएका %s को सुची हो । तपाईंले यी मध्य केही बक्सबाट चयन गरी बक्स बीच्को " +"\"हटाउनुहोस\" तीरमा क्लिक गरी हटाउन सक्नुहुन्छ । " + +msgid "Remove all" +msgstr "सबै हटाउनुहोस " + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "एकै क्लिकमा सबै छानिएका %s हटाउनुहोस ।" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s को %(sel)s चयन गरियो" +msgstr[1] "%(cnt)s को %(sel)s चयन गरियो" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "तपाइको फेरबदल बचत भएको छैन । कार्य भएमा बचत नभएका फेरबदल हराउने छन् ।" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"तपाइले कार्य छाने पनि फेरबदलहरु बचत गर्नु भएको छैन । कृपया बचत गर्न हुन्छ थिच्नुहोस । कार्य " +"पुन: सञ्चालन गर्नुपर्नेछ ।" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"तपाइले कार्य छाने पनि फाँटहरुमा फेरबदलहरु गर्नु भएको छैन । बचत गर्नु भन्दा पनि अघि बढ्नुहोस " +"।" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "सूचना: तपाईँ सर्भर समय भन्दा %s घण्टा अगाडि हुनुहुन्छ ।" +msgstr[1] "सूचना: तपाईँ सर्भर समय भन्दा %s घण्टा अगाडि हुनुहुन्छ ।" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "सूचना: तपाईँ सर्भर समय भन्दा %s घण्टा पछाडि हुनुहुन्छ ।" +msgstr[1] "सूचना: तपाईँ सर्भर समय भन्दा %s घण्टा पछाडि हुनुहुन्छ ।" + +msgid "Now" +msgstr "यतिखेर" + +msgid "Choose a Time" +msgstr "समय छान्नु होस ।" + +msgid "Choose a time" +msgstr "समय चयन गर्नुहोस" + +msgid "Midnight" +msgstr "मध्यरात" + +msgid "6 a.m." +msgstr "बिहान ६ बजे" + +msgid "Noon" +msgstr "मध्यान्ह" + +msgid "6 p.m." +msgstr "बेलुकी ६ बजे" + +msgid "Cancel" +msgstr "रद्द गर्नुहोस " + +msgid "Today" +msgstr "आज" + +msgid "Choose a Date" +msgstr "मिति छान्नु होस ।" + +msgid "Yesterday" +msgstr "हिजो" + +msgid "Tomorrow" +msgstr "भोलि" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "देखाउनुहोस " + +msgid "Hide" +msgstr "लुकाउनुहोस " diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0564585d5cd3a25e2f8699bc00deef95108c12f8 GIT binary patch literal 17070 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 ixw2dxDR{L$V-b;vhi5BVzM%>M(il^f## literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..34f1d16b9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,735 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bas Peschier , 2013 +# Claude Paroz , 2017 +# Evelijn Saaltink , 2016 +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011-2012 +# dokterbob , 2015 +# Meteor0id, 2019-2020 +# 8de006b1b0894aab6aef71979dcd8bd6_5c6b207 , 2014-2015 +# Tino de Bruijn , 2011 +# Tonnes , 2017,2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-15 08:30+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s met succes verwijderd." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s kan niet worden verwijderd " + +msgid "Are you sure?" +msgstr "Weet u het zeker?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Geselecteerde %(verbose_name_plural)s verwijderen" + +msgid "Administration" +msgstr "Beheer" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nee" + +msgid "Unknown" +msgstr "Onbekend" + +msgid "Any date" +msgstr "Elke datum" + +msgid "Today" +msgstr "Vandaag" + +msgid "Past 7 days" +msgstr "Afgelopen zeven dagen" + +msgid "This month" +msgstr "Deze maand" + +msgid "This year" +msgstr "Dit jaar" + +msgid "No date" +msgstr "Geen datum" + +msgid "Has date" +msgstr "Heeft datum" + +msgid "Empty" +msgstr "Leeg" + +msgid "Not empty" +msgstr "Niet leeg" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Voer de correcte %(username)s en wachtwoord voor een stafaccount in. Let op " +"dat beide velden hoofdlettergevoelig zijn." + +msgid "Action:" +msgstr "Actie:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Nog een %(verbose_name)s toevoegen" + +msgid "Remove" +msgstr "Verwijderen" + +msgid "Addition" +msgstr "Toevoeging" + +msgid "Change" +msgstr "Wijzigen" + +msgid "Deletion" +msgstr "Verwijdering" + +msgid "action time" +msgstr "actietijd" + +msgid "user" +msgstr "gebruiker" + +msgid "content type" +msgstr "inhoudstype" + +msgid "object id" +msgstr "object-id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "object-repr" + +msgid "action flag" +msgstr "actievlag" + +msgid "change message" +msgstr "wijzigingsbericht" + +msgid "log entry" +msgstr "logboekvermelding" + +msgid "log entries" +msgstr "logboekvermeldingen" + +#, python-format +msgid "Added “%(object)s”." +msgstr "‘%(object)s’ toegevoegd." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "‘%(object)s’ gewijzigd - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "‘%(object)s’ verwijderd." + +msgid "LogEntry Object" +msgstr "LogEntry-object" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} ‘{object}’ toegevoegd." + +msgid "Added." +msgstr "Toegevoegd." + +msgid "and" +msgstr "en" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} voor {name} ‘{object}’ gewijzigd." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} gewijzigd." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} ‘{object}’ verwijderd." + +msgid "No fields changed." +msgstr "Geen velden gewijzigd." + +msgid "None" +msgstr "Geen" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Houd ‘Control’, of ‘Command’ op een Mac, ingedrukt om meerdere items te " +"selecteren." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "De {name} ‘{obj}’ is met succes toegevoegd." + +msgid "You may edit it again below." +msgstr "U kunt deze hieronder weer bewerken." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"De {name} ‘{obj}’ is met succes toegevoegd. U kunt hieronder nog een {name} " +"toevoegen." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"De {name} ‘{obj}’ is met succes gewijzigd. U kunt deze hieronder nogmaals " +"bewerken." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"De {name} ‘{obj}’ is met succes toegevoegd. U kunt deze hieronder nogmaals " +"bewerken." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"De {name} ‘{obj}’ is met succes gewijzigd. U kunt hieronder nog een {name} " +"toevoegen." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "De {name} ‘{obj}’ is met succes gewijzigd." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Er moeten items worden geselecteerd om acties op uit te voeren. Er zijn geen " +"items gewijzigd." + +msgid "No action selected." +msgstr "Geen actie geselecteerd." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "De %(name)s ‘%(obj)s’ is met succes verwijderd." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s met ID ‘%(key)s’ bestaat niet. Misschien is deze verwijderd?" + +#, python-format +msgid "Add %s" +msgstr "%s toevoegen" + +#, python-format +msgid "Change %s" +msgstr "%s wijzigen" + +#, python-format +msgid "View %s" +msgstr "%s weergeven" + +msgid "Database error" +msgstr "Databasefout" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s is met succes gewijzigd." +msgstr[1] "%(count)s %(name)s zijn met succes gewijzigd." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s geselecteerd" +msgstr[1] "Alle %(total_count)s geselecteerd" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 van de %(cnt)s geselecteerd" + +#, python-format +msgid "Change history: %s" +msgstr "Wijzigingsgeschiedenis: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Het verwijderen van %(class_name)s %(instance)s vereist het verwijderen van " +"de volgende beschermde gerelateerde objecten: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django-websitebeheer" + +msgid "Django administration" +msgstr "Django-beheer" + +msgid "Site administration" +msgstr "Websitebeheer" + +msgid "Log in" +msgstr "Aanmelden" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-beheer" + +msgid "Page not found" +msgstr "Pagina niet gevonden" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Het spijt ons, maar de opgevraagde pagina kon niet worden gevonden." + +msgid "Home" +msgstr "Voorpagina" + +msgid "Server error" +msgstr "Serverfout" + +msgid "Server error (500)" +msgstr "Serverfout (500)" + +msgid "Server Error (500)" +msgstr "Serverfout (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Er heeft zich een fout voorgedaan. Dit is via e-mail bij de " +"websitebeheerders gemeld en zou snel verholpen moeten zijn. Bedankt voor uw " +"geduld." + +msgid "Run the selected action" +msgstr "De geselecteerde actie uitvoeren" + +msgid "Go" +msgstr "Uitvoeren" + +msgid "Click here to select the objects across all pages" +msgstr "Klik hier om alle objecten op alle pagina's te selecteren" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Alle %(total_count)s %(module_name)s selecteren" + +msgid "Clear selection" +msgstr "Selectie wissen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modellen in de %(name)s-toepassing" + +msgid "Add" +msgstr "Toevoegen" + +msgid "View" +msgstr "Weergeven" + +msgid "You don’t have permission to view or edit anything." +msgstr "U hebt geen rechten om iets te bekijken of te bewerken." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Vul allereerst een gebruikersnaam en wachtwoord in. Daarna kunt u meer " +"gebruikersopties bewerken." + +msgid "Enter a username and password." +msgstr "Voer een gebruikersnaam en wachtwoord in." + +msgid "Change password" +msgstr "Wachtwoord wijzigen" + +msgid "Please correct the error below." +msgstr "Corrigeer de fout hieronder." + +msgid "Please correct the errors below." +msgstr "Corrigeer de fouten hieronder." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Voer een nieuw wachtwoord in voor de gebruiker %(username)s." + +msgid "Welcome," +msgstr "Welkom," + +msgid "View site" +msgstr "Website bekijken" + +msgid "Documentation" +msgstr "Documentatie" + +msgid "Log out" +msgstr "Afmelden" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s toevoegen" + +msgid "History" +msgstr "Geschiedenis" + +msgid "View on site" +msgstr "Weergeven op website" + +msgid "Filter" +msgstr "Filter" + +msgid "Clear all filters" +msgstr "Alle filters wissen" + +msgid "Remove from sorting" +msgstr "Verwijderen uit sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteerprioriteit: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sortering aan/uit" + +msgid "Delete" +msgstr "Verwijderen" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Het verwijderen van %(object_name)s '%(escaped_object)s' zou ook " +"gerelateerde objecten verwijderen, maar uw account heeft geen rechten om de " +"volgende typen objecten te verwijderen:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Het verwijderen van %(object_name)s '%(escaped_object)s' vereist het " +"verwijderen van de volgende gerelateerde objecten:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Weet u zeker dat u %(object_name)s '%(escaped_object)s' wilt verwijderen? " +"Alle volgende gerelateerde objecten worden verwijderd:" + +msgid "Objects" +msgstr "Objecten" + +msgid "Yes, I’m sure" +msgstr "Ja, ik weet het zeker" + +msgid "No, take me back" +msgstr "Nee, teruggaan" + +msgid "Delete multiple objects" +msgstr "Meerdere objecten verwijderen" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Het verwijderen van de geselecteerde %(objects_name)s zou ook gerelateerde " +"objecten verwijderen, maar uw account heeft geen rechten om de volgende " +"typen objecten te verwijderen:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Het verwijderen van de geselecteerde %(objects_name)s vereist het " +"verwijderen van de volgende beschermde gerelateerde objecten:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Weet u zeker dat u de geselecteerde %(objects_name)s wilt verwijderen? Alle " +"volgende objecten en hun aanverwante items zullen worden verwijderd:" + +msgid "Delete?" +msgstr "Verwijderen?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Op %(filter_title)s " + +msgid "Summary" +msgstr "Samenvatting" + +msgid "Recent actions" +msgstr "Recente acties" + +msgid "My actions" +msgstr "Mijn acties" + +msgid "None available" +msgstr "Geen beschikbaar" + +msgid "Unknown content" +msgstr "Onbekende inhoud" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Er is iets mis met de installatie van uw database. Zorg ervoor dat de juiste " +"databasetabellen zijn aangemaakt en dat de database voor de juiste gebruiker " +"leesbaar is." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"U bent geverifieerd als %(username)s, maar niet bevoegd om deze pagina te " +"bekijken. Wilt u zich aanmelden bij een andere account?" + +msgid "Forgotten your password or username?" +msgstr "Wachtwoord of gebruikersnaam vergeten?" + +msgid "Toggle navigation" +msgstr "Navigatie aan/uit" + +msgid "Date/time" +msgstr "Datum/tijd" + +msgid "User" +msgstr "Gebruiker" + +msgid "Action" +msgstr "Actie" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dit object heeft geen wijzigingsgeschiedenis. Het is mogelijk niet via de " +"beheerwebsite toegevoegd." + +msgid "Show all" +msgstr "Alles tonen" + +msgid "Save" +msgstr "Opslaan" + +msgid "Popup closing…" +msgstr "Pop-up sluiten…" + +msgid "Search" +msgstr "Zoeken" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultaat" +msgstr[1] "%(counter)s resultaten" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totaal" + +msgid "Save as new" +msgstr "Opslaan als nieuw item" + +msgid "Save and add another" +msgstr "Opslaan en nieuwe toevoegen" + +msgid "Save and continue editing" +msgstr "Opslaan en opnieuw bewerken" + +msgid "Save and view" +msgstr "Opslaan en weergeven" + +msgid "Close" +msgstr "Sluiten" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Geselecteerde %(model)s wijzigen" + +#, python-format +msgid "Add another %(model)s" +msgstr "Nog een %(model)s toevoegen" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Geselecteerde %(model)s verwijderen" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Bedankt voor de aanwezigheid op de site vandaag." + +msgid "Log in again" +msgstr "Opnieuw aanmelden" + +msgid "Password change" +msgstr "Wachtwoordwijziging" + +msgid "Your password was changed." +msgstr "Uw wachtwoord is gewijzigd." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Voer omwille van beveiliging uw oude en twee keer uw nieuwe wachtwoord in, " +"zodat we kunnen controleren of u geen typefouten hebt gemaakt." + +msgid "Change my password" +msgstr "Mijn wachtwoord wijzigen" + +msgid "Password reset" +msgstr "Wachtwoord hersteld" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Uw wachtwoord is ingesteld. U kunt nu verdergaan en zich aanmelden." + +msgid "Password reset confirmation" +msgstr "Bevestiging wachtwoord herstellen" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Voer het nieuwe wachtwoord twee keer in, zodat we kunnen controleren of er " +"geen typefouten zijn gemaakt." + +msgid "New password:" +msgstr "Nieuw wachtwoord:" + +msgid "Confirm password:" +msgstr "Bevestig wachtwoord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"De link voor het herstellen van het wachtwoord is ongeldig, waarschijnlijk " +"omdat de link al eens is gebruikt. Vraag opnieuw een wachtwoord aan." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"We hebben u instructies gestuurd voor het instellen van uw wachtwoord, als " +"er een account bestaat met het door u ingevoerde e-mailadres. U zou deze " +"straks moeten ontvangen." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Als u geen e-mail ontvangt, controleer dan of u het e-mailadres hebt " +"ingevoerd waarmee u zich hebt geregistreerd, en controleer uw spam-map." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"U ontvangt deze e-mail, omdat u een aanvraag voor opnieuw instellen van het " +"wachtwoord voor uw account op %(site_name)s hebt gedaan." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ga naar de volgende pagina en kies een nieuw wachtwoord:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Uw gebruikersnaam, mocht u deze vergeten zijn:" + +msgid "Thanks for using our site!" +msgstr "Bedankt voor het gebruik van onze website!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Het %(site_name)s-team" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Wachtwoord vergeten? Vul hieronder uw e-mailadres in, en we sturen " +"instructies voor het instellen van een nieuw wachtwoord." + +msgid "Email address:" +msgstr "E-mailadres:" + +msgid "Reset my password" +msgstr "Mijn wachtwoord opnieuw instellen" + +msgid "All dates" +msgstr "Alle datums" + +#, python-format +msgid "Select %s" +msgstr "Selecteer %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selecteer %s om te wijzigen" + +#, python-format +msgid "Select %s to view" +msgstr "Selecteer %s om te bekijken" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Tijd:" + +msgid "Lookup" +msgstr "Opzoeken" + +msgid "Currently:" +msgstr "Huidig:" + +msgid "Change:" +msgstr "Wijzigen:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..814d1e8b0aff1191088ff4913ffd07031c8595d6 GIT binary patch literal 4592 zcmb`JL5v(n6+jDO0&E}zhmZg!R1CJ)#M8U$1QW(F^2VE8Y-ep_k8OfDP%~XS(>py? zLwEIzXAdMN4!{KwM1lkt4v{zo1Sk>+xWEa7gv0>}Arw$RDB_k|4!qypW6wH^vm(@P z&FiYJ`t|GoU-kPhd-r@xQ68r5qyGFYO0B^!+{O>(+8(7o2`BJ&_`{kn!ne`>W!?TY zd>8HC*6lyl{40Dn{r{->YR%i2JV*a~;XC0z_z`#z9)zp#9dJ-{1ZDlFAR^RP;M?KX z>h?ElJ`4F*-{nWP@O>z9o`*8;1^7Am6WD@xB2?aYpo~wU$Q?rd)ir)Z&!?d1`Bf-# zo`KK6=ioPB#3V$jUqO-g8+aW49?HBs==>hM2R;jb42N)?mv_To)cgayhxW^L`?b1# z7fQU3{)6!S@Hn*i>LOgD{o)== zgVYD8Qa(_jw43<+L8|QO5EZfNeyZ3)%Fznto{sR`sN3Q*DIcfGzCSDt3fn4+?0GMB zzG|w6;D@M~OC6?aDyC6ORJj)pP^BzVKT3U=x}PdV;zG&-ReT_Rl^B*Hu`TCX%Ezb@ zySNmA^SMnA=h|=R1M?jhc%;L2f{kza?wB^wAX3NlP_R7Al2k1h-69Wad1R8*v{S1O z9foS$r5*!Yy(HKCho04Gl4I!&ZDt%CmHQu< z$1#FZl2{u=v8{a72e!W*YM;(#x#7SiJ3~@X?kr+*zPDs2vQrd4)4{$F%{anxk6BF`IJYihda;6GVhM|iPn4THh(#gW|=8|Yry^C(G9)t9D z^>XIM(wALV5SzSCK|Qe{(ic)|a$CiQK7UrMC-bM;bMBo*8r_*~WJRT2Wtthq3Rf+< zvq5Z}gz}o2TITddsj`ThF?6Z%&636mDzrHgJ`a)djwc&%n_kTlT(@U+wr|}#>06)e zyJSKkPTq5ATW?X0+}79X6MK-`Ax3z#_70m#b!A%)70@M zf#K&a+M&-vV?FOCapSR~n>Sj%spl@7Z(OvaM20rxes1cci$@n5i=SvLJ*1bGnoElh zE>h;6FnMUSGUM{p1fMl^%R83Uj}kF38njP#2c&?g;|HH+wCfh8Ya1Wa&R`$4baZN*0llW1t0yd( zY1q^SNvazp7mM{qUT!qD;)h#_7*^MQs#3GqBKrSN6&2;u{GZm{yvlj^@V_YDOR6#-# z!?atH+&BSrKh1F%})pvqy zeT^@!@>E~O%57YMX(Y>8J$u6(5fgXi9sb`+y4-6#v!vPBDjg!{QBGqT%Y6AbXlD{= zk-my!-#OnrI%T~X`m^Zc#wcUAod DHX{40 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..8ed513cce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po @@ -0,0 +1,227 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bouke Haarsma , 2013 +# Evelijn Saaltink , 2016 +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011-2012 +# Meteor0id, 2019-2020 +# 8de006b1b0894aab6aef71979dcd8bd6_5c6b207 , 2015 +# Tonnes , 2019-2020 +# wunki , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-13 11:10+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Beschikbare %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dit is de lijst met beschikbare %s. U kunt er een aantal kiezen door ze in " +"het vak hieronder te selecteren en daarna op de pijl 'Kiezen' tussen de twee " +"vakken te klikken." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Typ in dit vak om de lijst met beschikbare %s te filteren." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Alle kiezen" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klik om alle %s te kiezen." + +msgid "Choose" +msgstr "Kiezen" + +msgid "Remove" +msgstr "Verwijderen" + +#, javascript-format +msgid "Chosen %s" +msgstr "Gekozen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dit is de lijst met gekozen %s. U kunt er een aantal verwijderen door ze in " +"het vak hieronder te selecteren en daarna op de pijl 'Verwijderen' tussen de " +"twee vakken te klikken." + +msgid "Remove all" +msgstr "Alle verwijderen" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik om alle gekozen %s tegelijk te verwijderen." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s van de %(cnt)s geselecteerd" +msgstr[1] "%(sel)s van de %(cnt)s geselecteerd" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"U hebt niet-opgeslagen wijzigingen op afzonderlijke bewerkbare velden. Als u " +"een actie uitvoert, gaan uw wijzigingen verloren." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"U hebt een actie geselecteerd, maar uw wijzigingen in afzonderlijke velden " +"nog niet opgeslagen. Klik op OK om deze op te slaan. U dient de actie " +"opnieuw uit te voeren." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"U hebt een actie geselecteerd, en geen wijzigingen in afzonderlijke velden " +"aangebracht. Waarschijnlijk zoekt u de knop Gaan in plaats van de knop " +"Opslaan." + +msgid "Now" +msgstr "Nu" + +msgid "Midnight" +msgstr "Middernacht" + +msgid "6 a.m." +msgstr "6 uur 's ochtends" + +msgid "Noon" +msgstr "12 uur 's middags" + +msgid "6 p.m." +msgstr "6 uur 's avonds" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Let op: u ligt %s uur voor ten opzichte van de servertijd." +msgstr[1] "Let op: u ligt %s uur voor ten opzichte van de servertijd." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Let op: u ligt %s uur achter ten opzichte van de servertijd." +msgstr[1] "Let op: u ligt %s uur achter ten opzichte van de servertijd." + +msgid "Choose a Time" +msgstr "Kies een tijdstip" + +msgid "Choose a time" +msgstr "Kies een tijd" + +msgid "Cancel" +msgstr "Annuleren" + +msgid "Today" +msgstr "Vandaag" + +msgid "Choose a Date" +msgstr "Kies een datum" + +msgid "Yesterday" +msgstr "Gisteren" + +msgid "Tomorrow" +msgstr "Morgen" + +msgid "January" +msgstr "januari" + +msgid "February" +msgstr "februari" + +msgid "March" +msgstr "maart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mei" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "augustus" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Z" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "D" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "D" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Z" + +msgid "Show" +msgstr "Tonen" + +msgid "Hide" +msgstr "Verbergen" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..315dffc7eee05ce9c7105a04c187c95a670ecbd6 GIT binary patch literal 16502 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, 2011-2012 +# Jannis Leidel , 2011 +# jensadne , 2013 +# Sigurd Gartmann , 2012 +# Sivert Olstad, 2021 +# velmont , 2012 +# Vibeke Uthaug, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-18 12:44+0000\n" +"Last-Translator: Vibeke Uthaug\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Slett valgte %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sletta %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan ikkje slette %(name)s" + +msgid "Are you sure?" +msgstr "Er du sikker?" + +msgid "Administration" +msgstr "Administrasjon" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +msgid "Unknown" +msgstr "Ukjend" + +msgid "Any date" +msgstr "Når som helst" + +msgid "Today" +msgstr "I dag" + +msgid "Past 7 days" +msgstr "Siste sju dagar" + +msgid "This month" +msgstr "Denne månaden" + +msgid "This year" +msgstr "I år" + +msgid "No date" +msgstr "Ingen dato" + +msgid "Has date" +msgstr "Har dato" + +msgid "Empty" +msgstr "Tom" + +msgid "Not empty" +msgstr "Ikkje tom" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Oppgje korrekt %(username)s og passord for ein administrasjonsbrukarkonto. " +"Merk at det er skilnad på små og store bokstavar." + +msgid "Action:" +msgstr "Handling:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Opprett ny %(verbose_name)s." + +msgid "Remove" +msgstr "Fjern" + +msgid "Addition" +msgstr "Tillegg" + +msgid "Change" +msgstr "Endre" + +msgid "Deletion" +msgstr "Sletting" + +msgid "action time" +msgstr "tid for handling" + +msgid "user" +msgstr "brukar" + +msgid "content type" +msgstr "innhaldstype" + +msgid "object id" +msgstr "objekt-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekt repr" + +msgid "action flag" +msgstr "handlingsflagg" + +msgid "change message" +msgstr "endre melding" + +msgid "log entry" +msgstr "logginnlegg" + +msgid "log entries" +msgstr "logginnlegg" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Oppretta “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Endra “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Sletta “%(object)s”." + +msgid "LogEntry Object" +msgstr "LogEntry-objekt" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Oppretta {name} “{object}”." + +msgid "Added." +msgstr "Oppretta." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Endra {fields} for {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Endra {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Sletta {name} “{object}”." + +msgid "No fields changed." +msgstr "Ingen felt endra." + +msgid "None" +msgstr "Ingen" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Hald nede “Control”, eller “Command” på ein Mac, for å velge meir enn éin." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” vart oppretta." + +msgid "You may edit it again below." +msgstr "Du kan endre det att nedanfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” vart oppretta. Du kan opprette enda ein {name} nedanfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” vart endra. Du kan redigere vidare nedanfor." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” vart oppretta. Du kan redigere vidare nedanfor." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} “{obj}” vart endra. Du kan opprette enda ein {name} nedanfor." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” vart endra." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Objekt må vere valde for at dei skal kunne utførast handlingar på. Ingen " +"object er endra." + +msgid "No action selected." +msgstr "Inga valt handling." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” vart sletta." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s med ID “%(key)s” eksisterer ikkje. Kanskje den har vorte sletta?" + +#, python-format +msgid "Add %s" +msgstr "Opprett %s" + +#, python-format +msgid "Change %s" +msgstr "Rediger %s" + +#, python-format +msgid "View %s" +msgstr "Sjå %s" + +msgid "Database error" +msgstr "Databasefeil" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s vart endra." +msgstr[1] "%(count)s %(name)s vart endra." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valde" +msgstr[1] "Alle %(total_count)s valde" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Ingen av %(cnt)s valde" + +#, python-format +msgid "Change history: %s" +msgstr "Endringshistorikk: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Sletting av %(class_name)s «%(instance)s» krev sletting av følgande beskytta " +"relaterte objekt: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administrasjonsside" + +msgid "Django administration" +msgstr "Django-administrasjon" + +msgid "Site administration" +msgstr "Nettstadsadministrasjon" + +msgid "Log in" +msgstr "Logg inn" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-administrasjon" + +msgid "Page not found" +msgstr "Fann ikkje sida" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Sida du spør etter finst ikkje." + +msgid "Home" +msgstr "Heim" + +msgid "Server error" +msgstr "Tenarfeil" + +msgid "Server error (500)" +msgstr "Tenarfeil (500)" + +msgid "Server Error (500)" +msgstr "Tenarfeil (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Det har oppstått ein feil. Det er rapportert til dei som administrerer " +"nettsida med e-mail og burde bli fiksa snarast. Takk for tolmodigheita." + +msgid "Run the selected action" +msgstr "Utfør den valde handlinga" + +msgid "Go" +msgstr "Gå" + +msgid "Click here to select the objects across all pages" +msgstr "Klikk her for å velje objekt på tvers av alle sider" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Velg alle %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Nullstill utval" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modellar i %(name)s-applikasjonen" + +msgid "Add" +msgstr "Opprett" + +msgid "View" +msgstr "Sjå" + +msgid "You don’t have permission to view or edit anything." +msgstr "Du har ikkje løyve til å sjå eller redigere noko." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Skriv først inn brukernamn og passord. Deretter vil du få høve til å endre " +"fleire brukarinnstillingar." + +msgid "Enter a username and password." +msgstr "Skriv inn nytt brukarnamn og passord." + +msgid "Change password" +msgstr "Endre passord" + +msgid "Please correct the error below." +msgstr "Korriger feilen under." + +msgid "Please correct the errors below." +msgstr "Korriger feila under." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Skriv inn eit nytt passord for brukaren %(username)s." + +msgid "Welcome," +msgstr "Velkommen," + +msgid "View site" +msgstr "Vis nettstad" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Log out" +msgstr "Logg ut" + +#, python-format +msgid "Add %(name)s" +msgstr "Opprett %(name)s" + +msgid "History" +msgstr "Historikk" + +msgid "View on site" +msgstr "Vis på nettstad" + +msgid "Filter" +msgstr "Filtrering" + +msgid "Clear all filters" +msgstr "Fjern alle filter" + +msgid "Remove from sorting" +msgstr "Fjern frå sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteringspriorite: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Slår av eller på sortering" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Dersom du slettar %(object_name)s '%(escaped_object)s', vil også slette " +"relaterte objekt, men du har ikkje løyve til å slette følgande objekttypar:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Sletting av %(object_name)s '%(escaped_object)s' krevar sletting av " +"følgjande beskytta relaterte objekt:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? " +"Alle dei følgjande relaterte objekta vil bli sletta:" + +msgid "Objects" +msgstr "Objekt" + +msgid "Yes, I’m sure" +msgstr "Ja, eg er sikker" + +msgid "No, take me back" +msgstr "Nei, ta meg attende" + +msgid "Delete multiple objects" +msgstr "Slett fleire objekt" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Sletting av %(objects_name)s vil føre til at relaterte objekt blir sletta, " +"men kontoen din manglar løyve til å slette følgjande objekttypar:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Sletting av %(objects_name)s krevar sletting av følgjande beskytta relaterte " +"objekt:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Er du sikker på at du vil slette dei valgte objekta %(objects_name)s? " +"Følgjande objekt og deira relaterte objekt vil bli sletta:" + +msgid "Delete?" +msgstr "Slette?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Etter %(filter_title)s " + +msgid "Summary" +msgstr "Oppsummering" + +msgid "Recent actions" +msgstr "Siste handlingar" + +msgid "My actions" +msgstr "Mine handlingar" + +msgid "None available" +msgstr "Ingen tilgjengelege" + +msgid "Unknown content" +msgstr "Ukjent innhald" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +" match \n" +"Noko er gale med databaseinstallasjonen din. Syt for at databasetabellane er " +"oppretta og at brukaren har dei naudsynte løyve." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Du er stadfesta som %(username)s, men er ikkje autentisert til å få tilgang " +"til denne sida . Ynskjer du å logge inn med ein annan konto?" + +msgid "Forgotten your password or username?" +msgstr "Gløymd brukarnamn eller passord?" + +msgid "Toggle navigation" +msgstr "Veksl navigasjon" + +msgid "Start typing to filter…" +msgstr "Begynn å skrive for å filtrere..." + +msgid "Filter navigation items" +msgstr "Filtrer navigasjonselement" + +msgid "Date/time" +msgstr "Dato/tid" + +msgid "User" +msgstr "Brukar" + +msgid "Action" +msgstr "Handling" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Dette objektet har ingen endringshistorikk. Det blei sannsynlegvis ikkje " +"oppretta av denne administratoren. " + +msgid "Show all" +msgstr "Vis alle" + +msgid "Save" +msgstr "Lagre" + +msgid "Popup closing…" +msgstr "Lukkar popup…" + +msgid "Search" +msgstr "Søk" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultat" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totalt" + +msgid "Save as new" +msgstr "Lagre som ny" + +msgid "Save and add another" +msgstr "Lagre og opprett ny" + +msgid "Save and continue editing" +msgstr "Lagre og hald fram å redigere" + +msgid "Save and view" +msgstr "Lagre og sjå" + +msgid "Close" +msgstr "Lukk" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Endre valt %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Opprett ny %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Slett valde %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Takk for at du brukte litt kvalitetstid på nettsida i dag. " + +msgid "Log in again" +msgstr "Logg inn att" + +msgid "Password change" +msgstr "Endre passord" + +msgid "Your password was changed." +msgstr "Passordet ditt vart endret." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Av sikkerheitsgrunnar må du oppgje det gamle passordet ditt. Oppgje så det " +"nye passordet ditt to gongar, sånn at vi kan kontrollere at det er korrekt." + +msgid "Change my password" +msgstr "Endre passord" + +msgid "Password reset" +msgstr "Nullstill passord" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Passordet ditt er sett. Du kan logge inn." + +msgid "Password reset confirmation" +msgstr "Stadfesting på nullstilt passord" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Oppgje det nye passordet ditt to gonger, for å sikre at du oppgjev det " +"korrekt." + +msgid "New password:" +msgstr "Nytt passord:" + +msgid "Confirm password:" +msgstr "Gjenta nytt passord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Nullstillingslinken er ugyldig, kanskje fordi den allereie har vore brukt. " +"Nullstill passordet ditt på nytt." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Dersom det eksisterer ein brukarkonto med e-postadressa du skreiv inn vil " +"det bli sendt ein e-post med instruksjonar for å nullstille passordet til " +"den e-postadressa. Du burde motta den snart. " + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Om du ikkje mottar ein e-post, ver vennleg og sørg for at du skreiv inn e-" +"postadressa du er registrert med og sjekk spam-filteret. " + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Du får denne e-posten fordi du har bedt om å nullstille passordet for " +"brukarkontoen din på %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Gå til følgjande side og velg eit nytt passord:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Brukarnamnet ditt, i tilfelle du har gløymt det:" + +msgid "Thanks for using our site!" +msgstr "Takk for at du brukar sida vår!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Helsing %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Gløymt passordet ditt? Oppgje e-postadressa di under, så sender me deg ein e-" +"post med instruksjonar for nullstilling av passord." + +msgid "Email address:" +msgstr "E-postadresse:" + +msgid "Reset my password" +msgstr "Nullstill passordet" + +msgid "All dates" +msgstr "Alle datoar" + +#, python-format +msgid "Select %s" +msgstr "Velg %s" + +#, python-format +msgid "Select %s to change" +msgstr "Velg %s du ønskar å redigere" + +#, python-format +msgid "Select %s to view" +msgstr "Velg %s du ønskar å sjå" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Tid:" + +msgid "Lookup" +msgstr "Oppslag" + +msgid "Currently:" +msgstr "Noverande:" + +msgid "Change:" +msgstr "Endre:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..d94421cf9de32e00d1a0220ae894f22f0902ca9b GIT binary patch literal 4939 zcmbuDUyK_^9mfZ7p~#zF%Kv_wIESZ+Dag*3WW012VSZ8BWNYy1tcUS5E7L@LPDw#FQ`0$`2KdsKA&SH zkvj71XXpQKfAgE){O;a7SbB*eJ&t^c^1B(kOf2DnboDmI9s$1wz88GW@fRR|?ANaR zTksB)|KQ4hb^Hf-C+h#@_+Q5Zm~0O9_k-^T9|9i$eef8#4c-oBj$Z}wW6$70qCE$` z4}8IuzvuXU5KFLY;CsMVL7L}BuKma0=TZI{*Z}XvB-GvoslNqj-Ya;Z3%d%EoX>zH z=eI#x|7Gw+@CV@Y;3_7eb$L%Mi?L_HGRkjZ6Y2X7eW2h`#|4n|0 z8s~wu?hH$1O(;WsCH13Fg3#y7y&}bWe781o;!lPy_oE@?m5j`9Wmb|IZ+k zJ$lHbPfAclZmaZ8dtX6bKqmX71d|=7$K4z40VT2#N@S~?UR)v{b^@99auxX$GVSLm zVf)yl$aFS8?JBVa3}(gVU3m>WiTrU_rgKTQOZ!9VlgN)DuTTMr_Lma*NlHt|WDCcU zk0FzNm67Rul8>VV^%iMY2QqST0ziISZx#rfD&s(i9IYIV8Qyp>PK zMI57=3(GZD@!7_x-N;1uW!{di#pu0mo3bU7rZlW7nfkwKwJ1`b?$iOT+1N{MmgW z`mJ~7P1%W5a7)w9?%FTDdRq_JPRnZ2z{Olq4x}$umpxnbt9Q_`(TP%ypY2ErUxJ><-LXG!%Pa5sk| z@9o^mc%TQx7tPcsyDU@KB27n@)e*4c(TRl8xMeOJ9&4R%KwHCFq3N?wbY?Av8-X%aVqt2j zlQcz}e`E2`iSHLL#n^!A%veC^Sf7 z?@&9Os@;ZPCEr=X%T$x|DJ5{KW$aT*cw<^YZ_>iZdDTQP^ip-QuBH{$)h6re!e(?N zO7(rUS>AJBU89qklzKKMdp0t8edW_KP(}6A?1Is|xb(cOz`G<(iW64h!7h%Gp1UY} z+E}lahEd>sHVad)p(}ju!j5-Q_9N=*(QQ`YE9I4CZyCQbUpY}(dF0_T(%gBGTCZV* zN@HQQsqlJ)Tfy?3IJF``vkEg2O0OYBQsLX$3}hI={I-Wmo3zUpI@b0oOG|^nz_&C_ z)RtHLmQI!m`9_G{L`zC7EzZ@pYG?MoWZ5szZNN6Af+%oJ6>jAfyVQ$Cq)yXmG^w;} zPc^FEsl9%*R$ChHjB4os{<*?WH6uF~xWbj1yAWqa#9mdKBt=CpFQ#iNr+M+ZwxIZt zHNL!fdTty|i2gXz=!&-fxyvTR?Q(L8Z(QSj8Se_ZAoGhp6^V_4 zDD>IBPVHT3lmfwtiHu{Nc_~4Q@pb%TdTc(E, 2011 +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +# velmont , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-10 23:27+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Tilgjengelege %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dette er lista over tilgjengelege %s. Du kan velja nokon ved å markera dei i " +"boksen under og so klikka på «Velg»-pila mellom dei to boksane." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skriv i dette feltet for å filtrera ned lista av tilgjengelege %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Velg alle" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikk for å velja alle %s samtidig." + +msgid "Choose" +msgstr "Vel" + +msgid "Remove" +msgstr "Slett" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valde %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dette er lista over valte %s. Du kan fjerna nokon ved å markera dei i boksen " +"under og so klikka på «Fjern»-pila mellom dei to boksane." + +msgid "Remove all" +msgstr "Fjern alle" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikk for å fjerna alle valte %s samtidig." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s av %(cnt)s vald" +msgstr[1] "%(sel)s av %(cnt)s valde" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Det er endringar som ikkje er lagra i individuelt redigerbare felt. " +"Endringar som ikkje er lagra vil gå tapt." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Du har vald ei handling, men du har framleis ikkje lagra endringar for " +"individuelle felt. Klikk OK for å lagre. Du må gjere handlinga på nytt." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Du har vald ei handling og du har ikkje gjort endringar i individuelle felt. " +"Du ser sannsynlegvis etter Gå vidare-knappen - ikkje Lagre-knappen." + +msgid "Now" +msgstr "No" + +msgid "Midnight" +msgstr "Midnatt" + +msgid "6 a.m." +msgstr "06:00" + +msgid "Noon" +msgstr "12:00" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Merk: Du er %s time framanfor tjenar-tid." +msgstr[1] "Merk: Du er %s timar framanfor tjenar-tid." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Merk: Du er %s time bak tjenar-tid." +msgstr[1] "Merk: Du er %s timar bak tjenar-tid." + +msgid "Choose a Time" +msgstr "Velg eit klokkeslett" + +msgid "Choose a time" +msgstr "Velg eit klokkeslett" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Today" +msgstr "I dag" + +msgid "Choose a Date" +msgstr "Velg ein dato" + +msgid "Yesterday" +msgstr "I går" + +msgid "Tomorrow" +msgstr "I morgon" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Des" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "O" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Vis" + +msgid "Hide" +msgstr "Skjul" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dbf509f59e4f8bed8737727995a50431dd2ef9ea GIT binary patch literal 14978 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 VdVh!@q;d}TP6&g2vR9Mle*x&7ET8}Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..aae9d9c22 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,665 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s хафт ӕрцыдысты." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Нӕ уайы схафын %(name)s" + +msgid "Are you sure?" +msgstr "Ӕцӕг дӕ фӕнды?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Схафын ӕвзӕрст %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Иууылдӕр" + +msgid "Yes" +msgstr "О" + +msgid "No" +msgstr "Нӕ" + +msgid "Unknown" +msgstr "Ӕнӕбӕрӕг" + +msgid "Any date" +msgstr "Цыфӕнды бон" + +msgid "Today" +msgstr "Абон" + +msgid "Past 7 days" +msgstr "Фӕстаг 7 бон" + +msgid "This month" +msgstr "Ацы мӕй" + +msgid "This year" +msgstr "Ацы аз" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Дӕ хорзӕхӕй, раст кусӕджы аккаунты %(username)s ӕмӕ пароль бафысс. Дӕ сӕры " +"дар уый, ӕмӕ дыууӕ дӕр гӕнӕн ис стыр ӕмӕ гыццыл дамгъӕ ӕвзарой." + +msgid "Action:" +msgstr "Ми:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Бафтауын ӕндӕр %(verbose_name)s" + +msgid "Remove" +msgstr "Схафын" + +msgid "action time" +msgstr "мийы рӕстӕг" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "объекты бӕрӕггӕнӕн" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "объекты хуыз" + +msgid "action flag" +msgstr "мийы флаг" + +msgid "change message" +msgstr "фыстӕг фӕивын" + +msgid "log entry" +msgstr "логы иуӕг" + +msgid "log entries" +msgstr "логы иуӕгтӕ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ӕфтыд ӕрцыд \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Ивд ӕрцыд \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Хафт ӕрцыд \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "ЛогыИуӕг Объект" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "ӕмӕ" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ивд бынат нӕй." + +msgid "None" +msgstr "Никӕцы" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Иуӕгтӕ хъуамӕ ӕвзӕрст уой, цӕмӕй цын исты ми бакӕнай. Ницы иуӕг ӕрцыд ивд." + +msgid "No action selected." +msgstr "Ницы ми у ӕвзӕрст." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" хафт ӕрцыд." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Бафтауын %s" + +#, python-format +msgid "Change %s" +msgstr "Фӕивын %s" + +msgid "Database error" +msgstr "Бӕрӕгдоны рӕдыд" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ивд ӕрцыд." +msgstr[1] "%(count)s %(name)s ивд ӕрцыдысты." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s у ӕвзӕрст" +msgstr[1] "%(total_count)s дӕр иууылдӕр сты ӕвзӕрст" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-ӕй 0 у ӕвзӕрст" + +#, python-format +msgid "Change history: %s" +msgstr "Ивынты истори: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django сайты админ" + +msgid "Django administration" +msgstr "Django администраци" + +msgid "Site administration" +msgstr "Сайты администраци" + +msgid "Log in" +msgstr "Бахизын" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Фарс нӕ зыны" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Хатыр, фӕлӕ домд фарс нӕ зыны." + +msgid "Home" +msgstr "Хӕдзар" + +msgid "Server error" +msgstr "Серверы рӕдыд" + +msgid "Server error (500)" +msgstr "Серверы рӕдыд (500)" + +msgid "Server Error (500)" +msgstr "Серверы Рӕдыд (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Рӕдыд разынд. Уый тыххӕй сайты администратормӕ электрон фыстӕг ӕрвыст ӕрцыд " +"ӕмӕ йӕ тагъд сраст кӕндзысты. Бузныг кӕй лӕууыс." + +msgid "Run the selected action" +msgstr "Бакӕнын ӕвзӕрст ми" + +msgid "Go" +msgstr "Бацӕуын" + +msgid "Click here to select the objects across all pages" +msgstr "Ам ныххӕц цӕмӕй алы фарсы объекттӕ равзарын" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Равзарын %(total_count)s %(module_name)s иууылдӕр" + +msgid "Clear selection" +msgstr "Ӕвзӕрст асыгъдӕг кӕнын" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Фыццаг бафысс фӕсномыг ӕмӕ пароль. Стӕй дӕ бон уыдзӕн фылдӕр архайӕджы " +"фадӕттӕ ивын." + +msgid "Enter a username and password." +msgstr "Бафысс фӕсномыг ӕмӕ пароль." + +msgid "Change password" +msgstr "Пароль фӕивын" + +msgid "Please correct the error below." +msgstr "Дӕ хорзӕхӕй, бындӕр цы рӕдыдтытӕ ис, уыдон сраст кӕн." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Бафысс ног пароль архайӕг %(username)s-ӕн." + +msgid "Welcome," +msgstr "Ӕгас цу," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Документаци" + +msgid "Log out" +msgstr "Рахизын" + +#, python-format +msgid "Add %(name)s" +msgstr "Бафтауын %(name)s" + +msgid "History" +msgstr "Истори" + +msgid "View on site" +msgstr "Сайты фенын" + +msgid "Filter" +msgstr "Фӕрсудзӕн" + +msgid "Remove from sorting" +msgstr "Радӕй айсын" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Рады приоритет: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Рад аивын" + +msgid "Delete" +msgstr "Схафын" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' хафыны тыххӕй баст объекттӕ дӕр хафт " +"ӕрцӕудзысты, фӕлӕ дӕ аккаунтӕн нӕй бар ацы объекты хуызтӕ хафын:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' хафын домы ацы хъахъхъӕд баст объекттӕ " +"хафын дӕр:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ӕцӕг дӕ фӕнды %(object_name)s \"%(escaped_object)s\" схафын? Ацы баст иуӕгтӕ " +"иууылдӕр хафт ӕрцӕудзысты:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "О, ӕцӕг мӕ фӕнды" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Цалдӕр объекты схафын" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Ӕвзӕрст %(objects_name)s хафыны тыххӕй йемӕ баст объекттӕ дӕр схафт " +"уыдзысты, фӕлӕ дӕ аккаунтӕн нӕй бар ацы объекты хуызтӕ хафын:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Ӕвзӕрст %(objects_name)s хафын домы ацы хъахъхъӕд баст объекттӕ хафын дӕр:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ӕцӕг дӕ фӕнды ӕвзӕрст %(objects_name)s схафын? ацы объекттӕ иууылдӕр, ӕмӕ " +"семӕ баст иуӕгтӕ хафт ӕрцӕудзысты:" + +msgid "Change" +msgstr "Фӕивын" + +msgid "Delete?" +msgstr "Хъӕуы схафын?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s-мӕ гӕсгӕ" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Моделтӕ %(name)s ӕфтуаны" + +msgid "Add" +msgstr "Бафтауын" + +msgid "You don't have permission to edit anything." +msgstr "Нӕй дын бар исты ивын." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Ницы ис" + +msgid "Unknown content" +msgstr "Ӕнӕбӕрӕг мидис" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Дӕ бӕрӕгдоны цыдӕр раст ӕвӕрд нӕу. Сбӕрӕг кӕн, хъӕугӕ бӕрӕгдоны таблицӕтӕ " +"конд кӕй сты ӕмӕ амынд архайӕгӕн бӕрӕгдон фӕрсыны бар кӕй ис, уый." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Дӕ пароль кӕнӕ дӕ фӕсномыг ферох кодтай?" + +msgid "Date/time" +msgstr "Бон/рӕстӕг" + +msgid "User" +msgstr "Архайӕг" + +msgid "Action" +msgstr "Ми" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "Ацы объектӕн ивдтыты истори нӕй. Уӕццӕгӕн ацы админӕй ӕфтыд нӕ уыд." + +msgid "Show all" +msgstr "Иууылдӕр равдисын" + +msgid "Save" +msgstr "Нывӕрын" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Агурын" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s фӕстиуӕг" +msgstr[1] "%(counter)s фӕстиуӕджы" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s иумӕ" + +msgid "Save as new" +msgstr "Нывӕрын куыд ног" + +msgid "Save and add another" +msgstr "Нывӕрын ӕмӕ ног бафтауын" + +msgid "Save and continue editing" +msgstr "Нывӕрын ӕмӕ дарддӕр ивын" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Бузныг дӕ рӕстӕг абон ацы веб сайтимӕ кӕй арвыстай." + +msgid "Log in again" +msgstr "Ногӕй бахизын" + +msgid "Password change" +msgstr "Пароль ивын" + +msgid "Your password was changed." +msgstr "Дӕ пароль ивд ӕрцыд." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Дӕ хорзӕхӕй, ӕдасдзинады тыххӕй, бафысс дӕ зӕронд пароль ӕмӕ стӕй та дыууӕ " +"хатт дӕ нӕуӕг пароль, цӕмӕй мах сбӕлвырд кӕнӕм раст ӕй кӕй ныффыстай, уый." + +msgid "Change my password" +msgstr "Мӕ пароль фӕивын" + +msgid "Password reset" +msgstr "Пароль рацаразын" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Дӕ пароль ӕвӕрд ӕрцыд. Дӕ бон у дарддӕр ацӕуын ӕмӕ бахизын." + +msgid "Password reset confirmation" +msgstr "Пароль ӕвӕрыны бӕлвырдгӕнӕн" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Дӕ хорзӕхӕй, дӕ ног пароль дыууӕ хатт бафысс, цӕмӕй мах сбӕрӕг кӕнӕм раст ӕй " +"кӕй ныффыстай, уый." + +msgid "New password:" +msgstr "Ног пароль:" + +msgid "Confirm password:" +msgstr "Бӕлвырд пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Парол ӕвӕрыны ӕрвитӕн раст нӕ уыд. Уӕццӕгӕн уый тыххӕй, ӕмӕ нырид пайдагонд " +"ӕрцыд. Дӕ хорзӕхӕй, ӕрдом ног пароль ӕвӕрын." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Кӕд ницы фыстӕг райстай, уӕд, дӕ хорзӕхӕй, сбӕрӕг кӕн цы электрон постимӕ " +"срегистраци кодтай, уый бацамыдтай, ӕви нӕ, ӕмӕ абӕрӕг кӕн дӕ спамтӕ." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ды райстай ацы фыстӕг, уымӕн ӕмӕ %(site_name)s-ы дӕ архайӕджы аккаунтӕн " +"пароль сӕвӕрын ӕрдомдтай." + +msgid "Please go to the following page and choose a new password:" +msgstr "Дӕ хорзӕхӕй, ацу ацы фарсмӕ ӕмӕ равзар дӕ ног пароль:" + +msgid "Your username, in case you've forgotten:" +msgstr "Дӕ фӕсномыг, кӕд дӕ ферох ис:" + +msgid "Thanks for using our site!" +msgstr "Бузныг нӕ сайтӕй нын кӕй пайда кӕныс!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s-ы бал" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Ферох дӕ ис дӕ пароль? Дӕ пароль бындӕр бафысс, ӕмӕ дӕм мах email-ӕй ног " +"пароль сывӕрыны амынд арвитдзыстӕм." + +msgid "Email address:" +msgstr "Email адрис:" + +msgid "Reset my password" +msgstr "Мӕ пароль ногӕй сӕвӕрын" + +msgid "All dates" +msgstr "Бонтӕ иууылдӕр" + +#, python-format +msgid "Select %s" +msgstr "Равзарын %s" + +#, python-format +msgid "Select %s to change" +msgstr "Равзарын %s ивынӕн" + +msgid "Date:" +msgstr "Бон:" + +msgid "Time:" +msgstr "Рӕстӕг:" + +msgid "Lookup" +msgstr "Акӕсын" + +msgid "Currently:" +msgstr "Нырыккон:" + +msgid "Change:" +msgstr "Ивд:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7af0f7931e4e5d102314e82d76aeba18447da8ba GIT binary patch literal 3806 zcmbtVTWl0n7#~@cvcw19e3`KiMng=9#z$X#GBMHbKWFw<3L4#X_S-q2YO;19ri zfxiHs0saPj4!GtH6=y4O72bCO?*ZG6Cjqd^X;{9njlYb6hREGdQ2z)of4}cr+ z{weTTUPk^N3IUwmXAMJk!TnAo1 z1HZ@m9|(fbTDV&I{Rn&u@7IB}z6(LV2JQ!LfZuA6FXO#^jiylx0kR&LOFjUZmymR$ z7{rf0597I8{%Zb0>m=v(z$frfeUMXo6wi}**5RQKTA@9Fhje)i4@!_VKMtf1&6w8O z=5f2-Vdjy(hf@B2q=VhXb8)xAO(%cp$W;$6~aae}fM|P}5snWts*M(7<`y~z=%I=p0gFE+( z6-m_!t}}|{_@9iFF#p6zWX(}6CGvuJYpKx!N6BcJPx?{S_??ptU|CU86|JbJc9?r; z6NMvXhfFlII%*J&nHk>_&K9ZPXk_4Q^3j4UI`2>)OlOc|R2?wLTEkYhXxhll?W`xY z+2nFoa77yPILd4xr1&}EN|pCQ%BYV8j}!dGO5Aid!QG zHEtlsM!9dW0h^m1S5v|IUnAYfUopqvI~=jF=yKgHDrQQO22w>wrCeDGp0#{=7OR@< z%SpNvu0deQcX_0e1qx{#1>yOIHsFe*xC8WkS^Z7!dgx1%WsgFB5j)5W!u9n&Z_vu> zFBbL~qH}Y+GaiSbevl7a6tix( zO^@%;6FXRa&qED z_&9?_bCByPZswD$-}AU{Wmwyg?-!CC9i>vq@F}8|<0D2!89?x$kp>kYLC9XZb!Lt+|_qG8Ii?JkYwA_ zmS3ZpWWtLL*hSa0^*zGPdr9UL|u%a?iem)c|+?Jw>b|$ImH0$WI1kvZeAq3@%}T3InYx!TDez9Ea63eFyUmi`cqK4wQUM z3uf!Vn_gBbSc*E2oQSP7Y}8y2Cs1urLHH|D^b6tfplq<<)Y1%7Sy?#A$hj&csn4he zIFd%;B*-peVGct)=kn(akNj4~^NlayUp2(=CkmYfy&V;0c5LaXlR69xGZ#0NB zs<4)*zS@km=*Wo(R0v6b0eKdyT!Koy*NUWMUq)Zi3#t?z&8@ttLbFs>Qd-s< z1!dVgVvXY^uLnwfkuGjZgISY(q}o+enmY_uXAp~`R81*6t{mL^GLXDa)KOJUCaO12 SA5H~d%A0gb-BT*6q5TcX$#mra literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..ec6c9c459 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po @@ -0,0 +1,217 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Уӕвӕг %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Уӕвӕг %s-ты номхыгъд. Дӕ бон у искӕцытӕ дзы рауӕлдай кӕнай, куы сӕ равзарай " +"бындӕр къӕртты ӕмӕ дыууӕ къӕртты ӕхсӕн \"Равзарын\"-ы ӕгънӕгыл куы ныххӕцай, " +"уӕд." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Бафысс ацы къӕртты, уӕвӕг %s-ты номхыгъд фӕрсудзынӕн." + +msgid "Filter" +msgstr "Фӕрсудзӕн" + +msgid "Choose all" +msgstr "Равзарын алкӕцыдӕр" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Ныххӕц, алы %s равзарынӕн." + +msgid "Choose" +msgstr "Равзарын" + +msgid "Remove" +msgstr "Схафын" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ӕвзӕрст %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ай у ӕвзӕрст %s-ты номхыгъд. Сӕ хафынӕн сӕ дӕ бон у бындӕр къӕртты равзарын " +"ӕмӕ дыууӕ ӕгънӕджы ӕхсӕн \"Схфын\"-ыл ныххӕцын." + +msgid "Remove all" +msgstr "Схафын алкӕцыдӕр" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Ныххӕц, алы ӕвзӕрст %s схафынӕн." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-ӕй %(sel)s ӕвзӕрст" +msgstr[1] "%(cnt)s-ӕй %(sel)s ӕвзӕрст" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ӕнӕвӕрд ивдтытӕ баззадысты ивыны бынӕтты. Кӕд исты ми саразай, уӕд дӕ " +"ӕнӕвӕрд ивдтытӕ фесӕфдзысты." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ды равзӕрстай цыдӕр ми, фӕлӕ ивӕн бынӕтты цы фӕивтай, уыдон нӕ бавӕрдтай. Дӕ " +"хорзӕхӕй, ныххӕц Хорзыл цӕмӕй бавӕрд уой. Стӕй дын хъӕудзӕн ацы ми ногӕй " +"бакӕнын." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ды равзӕртай цыдӕр ми, фӕлӕ ивӕн бынӕтты ницы баивтай. Уӕццӕгӕн дӕ Ацӕуыны " +"ӕгънӕг хъӕуы, Бавӕрыны нӕ фӕлӕ." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Ныр" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Рӕстӕг равзарын" + +msgid "Midnight" +msgstr "Ӕмбисӕхсӕв" + +msgid "6 a.m." +msgstr "6 ӕ.р." + +msgid "Noon" +msgstr "Ӕмбисбон" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Раздӕхын" + +msgid "Today" +msgstr "Абон" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Знон" + +msgid "Tomorrow" +msgstr "Сом" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Равдисын" + +msgid "Hide" +msgstr "Айсын" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..710af1d28c2646b5287ef5f6c534b6b1dbbf4cb0 GIT binary patch literal 8556 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 Rz^MCQmu_;o`rUDW`5zUz7Q6re literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..bcdec1af6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,678 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2018 +# Jannis Leidel , 2011 +# Satnam S Virdi , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 07:21+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "ਚੁਣੇ %(verbose_name_plural)s ਹਟਾਓ" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s ਠੀਕ ਤਰ੍ਹਾਂ ਹਟਾਈਆਂ ਗਈਆਂ।" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ਨੂੰ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +msgid "Are you sure?" +msgstr "ਕੀ ਤੁਸੀਂ ਇਹ ਚਾਹੁੰਦੇ ਹੋ?" + +msgid "Administration" +msgstr "ਪ੍ਰਸ਼ਾਸਨ" + +msgid "All" +msgstr "ਸਭ" + +msgid "Yes" +msgstr "ਹਾਂ" + +msgid "No" +msgstr "ਨਹੀਂ" + +msgid "Unknown" +msgstr "ਅਣਜਾਣ" + +msgid "Any date" +msgstr "ਕੋਈ ਵੀ ਮਿਤੀ" + +msgid "Today" +msgstr "ਅੱਜ" + +msgid "Past 7 days" +msgstr "ਪਿਛਲੇ ੭ ਦਿਨ" + +msgid "This month" +msgstr "ਇਹ ਮਹੀਨੇ" + +msgid "This year" +msgstr "ਇਹ ਸਾਲ" + +msgid "No date" +msgstr "ਕੋਈ ਮਿਤੀ ਨਹੀਂ" + +msgid "Has date" +msgstr "ਮਿਤੀ ਹੈ" + +msgid "Empty" +msgstr "" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "ਕਾਰਵਾਈ:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "%(verbose_name)s ਹੋਰ ਸ਼ਾਮਲ" + +msgid "Remove" +msgstr "ਹਟਾਓ" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "ਬਦਲੋ" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "ਕਾਰਵਾਈ ਸਮਾਂ" + +msgid "user" +msgstr "ਵਰਤੋਂਕਾਰ" + +msgid "content type" +msgstr "ਸਮੱਗਰੀ ਕਿਸਮ" + +msgid "object id" +msgstr "ਆਬਜੈਕਟ id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ਆਬਜੈਕਟ repr" + +msgid "action flag" +msgstr "ਕਾਰਵਾਈ ਫਲੈਗ" + +msgid "change message" +msgstr "ਸੁਨੇਹਾ ਬਦਲੋ" + +msgid "log entry" +msgstr "ਲਾਗ ਐਂਟਰੀ" + +msgid "log entries" +msgstr "ਲਾਗ ਐਂਟਰੀਆਂ" + +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "ਅਤੇ" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "ਕੋਈ ਖੇਤਰ ਨਹੀਂ ਬਦਲਿਆ।" + +msgid "None" +msgstr "ਕੋਈ ਨਹੀਂ" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "ਕੋਈ ਕਾਰਵਾਈ ਨਹੀਂ ਚੁਣੀ ਗਈ।" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s ਸ਼ਾਮਲ" + +#, python-format +msgid "Change %s" +msgstr "%s ਬਦਲੋ" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "ਡਾਟਾਬੇਸ ਗਲਤੀ" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲਿਆ ਗਿਆ।" +msgstr[1] "%(count)s %(name)s ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲੇ ਗਏ ਹਨ।" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s ਚੁਣਿਆ।" +msgstr[1] "%(total_count)s ਚੁਣੇ" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "ਅਤੀਤ ਬਦਲੋ: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ਡੀਜਾਂਗੋ ਸਾਈਟ ਐਡਮਿਨ" + +msgid "Django administration" +msgstr "ਡੀਜਾਂਗੋ ਪਰਸ਼ਾਸ਼ਨ" + +msgid "Site administration" +msgstr "ਸਾਈਟ ਪਰਬੰਧ" + +msgid "Log in" +msgstr "ਲਾਗ ਇਨ" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "ਸਫ਼ਾ ਨਹੀਂ ਲੱਭਿਆ" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "ਘਰ" + +msgid "Server error" +msgstr "ਸਰਵਰ ਗਲਤੀ" + +msgid "Server error (500)" +msgstr "ਸਰਵਰ ਗਲਤੀ (500)" + +msgid "Server Error (500)" +msgstr "ਸਰਵਰ ਗਲਤੀ (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "ਚੁਣੀ ਕਾਰਵਾਈ ਕਰੋ" + +msgid "Go" +msgstr "ਜਾਓ" + +msgid "Click here to select the objects across all pages" +msgstr "ਸਭ ਸਫ਼ਿਆਂ ਵਿੱਚੋਂ ਆਬਜੈਕਟ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "ਸਭ %(total_count)s %(module_name)s ਚੁਣੋ" + +msgid "Clear selection" +msgstr "ਚੋਣ ਸਾਫ਼ ਕਰੋ" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "ਸ਼ਾਮਲ" + +msgid "View" +msgstr "" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "ਪਾਸਵਰਡ ਬਦਲੋ" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "ਯੂਜ਼ਰ %(username)s ਲਈ ਨਵਾਂ ਪਾਸਵਰਡ ਦਿਓ।" + +msgid "Welcome," +msgstr "ਜੀ ਆਇਆਂ ਨੂੰ, " + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "ਡੌਕੂਮੈਂਟੇਸ਼ਨ" + +msgid "Log out" +msgstr "ਲਾਗ ਆਉਟ" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ਸ਼ਾਮਲ" + +msgid "History" +msgstr "ਅਤੀਤ" + +msgid "View on site" +msgstr "ਸਾਈਟ ਉੱਤੇ ਜਾਓ" + +msgid "Filter" +msgstr "ਫਿਲਟਰ" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "ਹਟਾਓ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "ਕਈ ਆਬਜੈਕਟ ਹਟਾਓ" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Delete?" +msgstr "ਹਟਾਉਣਾ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s ਵਲੋਂ " + +msgid "Summary" +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "ਕੋਈ ਉਪਲੱਬਧ ਨਹੀਂ" + +msgid "Unknown content" +msgstr "ਅਣਜਾਣ ਸਮੱਗਰੀ" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "ਮਿਤੀ/ਸਮਾਂ" + +msgid "User" +msgstr "ਯੂਜ਼ਰ" + +msgid "Action" +msgstr "ਕਾਰਵਾਈ" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "ਸਭ ਵੇਖੋ" + +msgid "Save" +msgstr "ਸੰਭਾਲੋ" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "ਖੋਜ" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s ਕੁੱਲ" + +msgid "Save as new" +msgstr "ਨਵੇਂ ਵਜੋਂ ਵੇਖੋ" + +msgid "Save and add another" +msgstr "ਸੰਭਾਲੋ ਤੇ ਹੋਰ ਸ਼ਾਮਲ" + +msgid "Save and continue editing" +msgstr "ਸੰਭਾਲੋ ਤੇ ਸੋਧਣਾ ਜਾਰੀ ਰੱਖੋ" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "ਫੇਰ ਲਾਗਇਨ ਕਰੋ" + +msgid "Password change" +msgstr "ਪਾਸਵਰਡ ਬਦਲੋ" + +msgid "Your password was changed." +msgstr "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਿਆ ਗਿਆ ਹੈ।" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "ਮੇਰਾ ਪਾਸਵਰਡ ਬਦਲੋ" + +msgid "Password reset" +msgstr "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਤੁਸੀਂ ਜਾਰੀ ਰੱਖ ਕੇ ਹੁਣੇ ਲਾਗਇਨ ਕਰ ਸਕਦੇ ਹੋ।" + +msgid "Password reset confirmation" +msgstr "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਪੁਸ਼ਟੀ" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"ਆਪਣਾ ਨਵਾਂ ਪਾਸਵਰਡ ਦੋ ਵਾਰ ਦਿਉ ਤਾਂ ਕਿ ਅਸੀਂ ਜਾਂਚ ਕਰ ਸਕੀਏ ਕਿ ਤੁਸੀਂ ਠੀਕ ਤਰ੍ਹਾਂ ਲਿਖਿਆ ਹੈ।" + +msgid "New password:" +msgstr "ਨਵਾਂ ਪਾਸਵਰਡ:" + +msgid "Confirm password:" +msgstr "ਪਾਸਵਰਡ ਪੁਸ਼ਟੀ:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"ਪਾਸਵਰਡ ਰੀ-ਸੈੱਟ ਲਿੰਕ ਗਲਤ ਹੈ, ਸੰਭਵ ਤੌਰ ਉੱਤੇ ਇਹ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਚੁੱਕਾ ਹੈ। ਨਵਾਂ ਪਾਸਵਰਡ ਰੀ-" +"ਸੈੱਟ ਲਈ ਬੇਨਤੀ ਭੇਜੋ ਜੀ।" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "ਅੱਗੇ ਦਿੱਤੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਉ ਤੇ ਨਵਾਂ ਪਾਸਵਰਡ ਚੁਣੋ:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "ਸਾਡੀ ਸਾਈਟ ਵਰਤਣ ਲਈ ਧੰਨਵਾਦ ਜੀ!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s ਟੀਮ" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "ਮੇਰਾ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ" + +msgid "All dates" +msgstr "ਸਭ ਮਿਤੀਆਂ" + +#, python-format +msgid "Select %s" +msgstr "%s ਚੁਣੋ" + +#, python-format +msgid "Select %s to change" +msgstr "ਬਦਲਣ ਲਈ %s ਚੁਣੋ" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "ਮਿਤੀ:" + +msgid "Time:" +msgstr "ਸਮਾਂ:" + +msgid "Lookup" +msgstr "ਖੋਜ" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..08925e49507be2976a080ed9cc8a45ecc0626210 GIT binary patch literal 1148 zcmY+BJ7^R^7{^zQuk{^K5iQ0dkf3`nP{N)kn3#}&r$@X9Rx-Jp+-=yKS$5}gN#z41 z1`&i13sEc#$(|a~fS`q1SlHQE*ocgU*w|R5^*?)i2^pCA&HtP4x%;!TW8T0zfPEZ$ z0s9E{sZBVr?t;DZ-58EdGILMjP+-5AN2Q_e?Z;$DtH*|KvSLI zF;LqRF|#p;KwWn<*4IIu&jry&w6^2ikFERBv+u&zz3X|jZ+jsms?pYHAzC`W{@xfV znpJ;C;|!sRTEaL#NgbDtxr}rLMnB~x<{JG~Ap%Aykxq@RDK~lu7}uVIjw_jO3^`?H z%*iIDYIX2$vC>1_Ry|mQ!?qf)ZtlD zs!~5-GB;Wrw0hV5bggmbTLZi#$_}sCq<74bYYp4Pqh`Ua`_#1tgT+}3SS#4oK@j-6|Sh}8x_7(;gbHFc!~5PoaZBP4>p9o zQsGAx-iG;+YTi=eGu4b=mN(kEf{j{*FI4zR*9o7t>dvX~eN=Y_sqaMPmQ?emrOW9e y3otK6MbI8R5v<#N->$2}U`94L&q1_Cdf4iymGCjl%TdvJ%nJcvObmM;!Nz~abZQO& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..ed55c46ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po @@ -0,0 +1,253 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 11:28+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "ਉਪਲੱਬਧ %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ਫਿਲਟਰ" + +msgid "Choose all" +msgstr "ਸਭ ਚੁਣੋ" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "ਹਟਾਓ" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ਚੁਣੋ" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "ਹੁਣੇ" + +msgid "Midnight" +msgstr "ਅੱਧੀ-ਰਾਤ" + +msgid "6 a.m." +msgstr "6 ਸਵੇਰ" + +msgid "Noon" +msgstr "ਦੁਪਹਿਰ" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ਸਮਾਂ ਚੁਣੋ" + +msgid "Cancel" +msgstr "ਰੱਦ ਕਰੋ" + +msgid "Today" +msgstr "ਅੱਜ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "ਕੱਲ੍ਹ" + +msgid "Tomorrow" +msgstr "ਭਲਕੇ" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ਵੇਖੋ" + +msgid "Hide" +msgstr "ਓਹਲੇ" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd170335be3097fc7fa03b6c8cae98bd37d98ce4 GIT binary patch literal 18021 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, 2011 +# Janusz Harkot , 2014-2015 +# Karol , 2012 +# 0d5641585fd67fbdb97037c19ab83e4c_18c98b0 , 2011 +# 0d5641585fd67fbdb97037c19ab83e4c_18c98b0 , 2011 +# m_aciek , 2016-2021 +# m_aciek , 2015 +# Mariusz Felisiak , 2020 +# Ola Sitarska , 2013 +# Ola Sitarska , 2013 +# Roman Barczyński, 2014 +# Tomasz Kajtoch , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 11:13+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Usuń wybrane(-nych) %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Pomyślnie usunięto %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nie można usunąć %(name)s" + +msgid "Are you sure?" +msgstr "Jesteś pewien?" + +msgid "Administration" +msgstr "Administracja" + +msgid "All" +msgstr "Wszystko" + +msgid "Yes" +msgstr "Tak" + +msgid "No" +msgstr "Nie" + +msgid "Unknown" +msgstr "Nieznany" + +msgid "Any date" +msgstr "Dowolna data" + +msgid "Today" +msgstr "Dzisiaj" + +msgid "Past 7 days" +msgstr "Ostatnie 7 dni" + +msgid "This month" +msgstr "Ten miesiąc" + +msgid "This year" +msgstr "Ten rok" + +msgid "No date" +msgstr "Brak daty" + +msgid "Has date" +msgstr "Posiada datę" + +msgid "Empty" +msgstr "Puste" + +msgid "Not empty" +msgstr "Niepuste" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Wprowadź poprawne dane w polach „%(username)s” i „hasło” dla konta " +"należącego do zespołu. Uwaga: wielkość liter może mieć znaczenie." + +msgid "Action:" +msgstr "Akcja:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj kolejne(go)(-ną)(-ny) %(verbose_name)s" + +msgid "Remove" +msgstr "Usuń" + +msgid "Addition" +msgstr "Dodanie" + +msgid "Change" +msgstr "Zmień" + +msgid "Deletion" +msgstr "Usunięcie" + +msgid "action time" +msgstr "czas akcji" + +msgid "user" +msgstr "użytkownik" + +msgid "content type" +msgstr "typ zawartości" + +msgid "object id" +msgstr "id obiektu" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "reprezentacja obiektu" + +msgid "action flag" +msgstr "flaga akcji" + +msgid "change message" +msgstr "zmień wiadomość" + +msgid "log entry" +msgstr "log" + +msgid "log entries" +msgstr "logi" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Dodano „%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Zmieniono „%(object)s” — %(changes)s " + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Usunięto „%(object)s”." + +msgid "LogEntry Object" +msgstr "Obiekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Dodano {name} „{object}”." + +msgid "Added." +msgstr "Dodano." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Zmodyfikowano {fields} w {name} „{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Zmodyfikowano {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Usunięto {name} „{object}”." + +msgid "No fields changed." +msgstr "Żadne pole nie zostało zmienione." + +msgid "None" +msgstr "Brak" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Przytrzymaj wciśnięty klawisz „Ctrl” lub „Command” na Macu, aby zaznaczyć " +"więcej niż jeden wybór." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}” został(a)(-ło) dodany(-na)(-ne) pomyślnie." + +msgid "You may edit it again below." +msgstr "Poniżej możesz ponownie edytować." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} „{obj}” został(a)(-ło) dodany(-na)(-ne) pomyślnie. Można dodać " +"kolejne(go)(-ną)(-ny) {name} poniżej." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} „{obj}” został(a)(-ło) pomyślnie zmieniony(-na)(-ne). Można edytować " +"go/ją/je ponownie poniżej." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} „{obj}” został(a)(-ło) dodany(-na)(-ne) pomyślnie. Można edytować go/" +"ją/je ponownie poniżej." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} „{obj}” został(a)(-ło) pomyślnie zmieniony(-na)(-ne). Można dodać " +"kolejny(-nego)(-ną)(-ne) {name} poniżej." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}” został(a)(-ło) pomyślnie zmieniony(-na)(-ne)." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Wykonanie akcji wymaga wybrania obiektów. Żaden obiekt nie został zmieniony." + +msgid "No action selected." +msgstr "Nie wybrano akcji." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s” usunięty(-ta)(-te) pomyślnie." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s z ID „%(key)s” nie istnieje. Może został(a)(-ło) usunięty(-ta)(-te)?" + +#, python-format +msgid "Add %s" +msgstr "Dodaj %s" + +#, python-format +msgid "Change %s" +msgstr "Zmień %s" + +#, python-format +msgid "View %s" +msgstr "Zobacz %s" + +msgid "Database error" +msgstr "Błąd bazy danych" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s został(a)(-ło) pomyślnie zmieniony(-na)(-ne)." +msgstr[1] "" +"%(count)s %(name)s zostały(-ło)(-li) pomyślnie zmienione(-nych)(-nieni)." +msgstr[2] "%(count)s %(name)s zostało pomyślnie zmienionych." +msgstr[3] "%(count)s %(name)s zostało pomyślnie zmienione." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Wybrano %(total_count)s" +msgstr[1] "Wybrano %(total_count)s" +msgstr[2] "Wybrano %(total_count)s" +msgstr[3] "Wybrano wszystkie %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Wybrano 0 z %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Historia zmian: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Usunięcie %(class_name)s %(instance)s może wiązać się z usunięciem " +"następujących chronionych obiektów pokrewnych: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administracja stroną Django" + +msgid "Django administration" +msgstr "Administracja Django" + +msgid "Site administration" +msgstr "Administracja stroną" + +msgid "Log in" +msgstr "Zaloguj się" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s: administracja" + +msgid "Page not found" +msgstr "Strona nie została znaleziona" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Przykro nam, ale żądana strona nie została znaleziona." + +msgid "Home" +msgstr "Strona główna" + +msgid "Server error" +msgstr "Błąd serwera" + +msgid "Server error (500)" +msgstr "Błąd serwera (500)" + +msgid "Server Error (500)" +msgstr "Błąd Serwera (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Niestety wystąpił błąd. Zostało to zgłoszone administratorom strony poprzez " +"email i niebawem powinno zostać naprawione. Dziękujemy za cierpliwość." + +msgid "Run the selected action" +msgstr "Wykonaj wybraną akcję" + +msgid "Go" +msgstr "Wykonaj" + +msgid "Click here to select the objects across all pages" +msgstr "Kliknij by wybrać obiekty na wszystkich stronach" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Wybierz wszystkie(-kich) %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Wyczyść wybór" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele w aplikacji %(name)s" + +msgid "Add" +msgstr "Dodaj" + +msgid "View" +msgstr "Zobacz" + +msgid "You don’t have permission to view or edit anything." +msgstr "Nie masz uprawnień do oglądania ani edycji niczego." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Najpierw podaj nazwę użytkownika i hasło. Następnie będziesz mógł edytować " +"więcej opcji użytkownika." + +msgid "Enter a username and password." +msgstr "Podaj nazwę użytkownika i hasło." + +msgid "Change password" +msgstr "Zmień hasło" + +msgid "Please correct the error below." +msgstr "Prosimy poprawić poniższy błąd." + +msgid "Please correct the errors below." +msgstr "Proszę, popraw poniższe błędy." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Podaj nowe hasło dla użytkownika %(username)s." + +msgid "Welcome," +msgstr "Witaj," + +msgid "View site" +msgstr "Pokaż stronę" + +msgid "Documentation" +msgstr "Dokumentacja" + +msgid "Log out" +msgstr "Wyloguj się" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Pokaż na stronie" + +msgid "Filter" +msgstr "Filtruj" + +msgid "Clear all filters" +msgstr "Wyczyść wszystkie filtry" + +msgid "Remove from sorting" +msgstr "Usuń z sortowania" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Priorytet sortowania: %(priority_number)s " + +msgid "Toggle sorting" +msgstr "Przełącz sortowanie" + +msgid "Delete" +msgstr "Usuń" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Usunięcie %(object_name)s „%(escaped_object)s” wiązałoby się z usunięciem " +"obiektów z nim/nią powiązanych, ale niestety nie posiadasz uprawnień do " +"usunięcia obiektów następujących typów:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Usunięcie %(object_name)s „%(escaped_object)s” wymagałoby skasowania " +"następujących chronionych obiektów, które są z nim/nią powiązane:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Czy chcesz skasować %(object_name)s „%(escaped_object)s”? Następujące " +"obiekty powiązane zostaną usunięte:" + +msgid "Objects" +msgstr "Obiekty" + +msgid "Yes, I’m sure" +msgstr "Tak, na pewno" + +msgid "No, take me back" +msgstr "Nie, zabierz mnie stąd" + +msgid "Delete multiple objects" +msgstr "Usuwanie wielu obiektów" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Usunięcie wybranych(-nego)(-nej) %(objects_name)s spowoduje skasowanie " +"obiektów, które są z nim(i)/nią powiązane. Niestety nie posiadasz uprawnień " +"do usunięcia następujących typów obiektów:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Usunięcie wybranych(-nego)(-nej) %(objects_name)s wymaga skasowania " +"następujących chronionych obiektów, które są z nim(i)/nią powiązane:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Czy chcesz skasować zaznaczone(go)(-ną)(-ny)(-nych) %(objects_name)s? " +"Następujące obiekty oraz obiekty od nich zależne zostaną skasowane:" + +msgid "Delete?" +msgstr "Usunąć?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Według pola %(filter_title)s " + +msgid "Summary" +msgstr "Podsumowanie" + +msgid "Recent actions" +msgstr "Ostatnie działania" + +msgid "My actions" +msgstr "Moje działania" + +msgid "None available" +msgstr "Brak dostępnych" + +msgid "Unknown content" +msgstr "Zawartość nieznana" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Instalacja Twojej bazy danych jest niepoprawna. Upewnij się, że odpowiednie " +"tabele zostały utworzone i odpowiedni użytkownik jest uprawniony do ich " +"odczytu." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jesteś uwierzytelniony jako %(username)s, ale nie jesteś upoważniony do " +"dostępu do tej strony. Czy chciałbyś zalogować się na inne konto?" + +msgid "Forgotten your password or username?" +msgstr "Nie pamiętasz swojego hasła lub nazwy użytkownika?" + +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +msgid "Start typing to filter…" +msgstr "Zacznij pisać, aby odfiltrować…" + +msgid "Filter navigation items" +msgstr "Filtruj elementy nawigacji" + +msgid "Date/time" +msgstr "Data/czas" + +msgid "User" +msgstr "Użytkownik" + +msgid "Action" +msgstr "Akcja" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Ten obiekt nie ma historii zmian. Najprawdopodobniej nie został on dodany " +"poprzez panel administracyjny." + +msgid "Show all" +msgstr "Pokaż wszystko" + +msgid "Save" +msgstr "Zapisz" + +msgid "Popup closing…" +msgstr "Zamykanie okna..." + +msgid "Search" +msgstr "Szukaj" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s wynik" +msgstr[1] "%(counter)s wyniki" +msgstr[2] "%(counter)s wyników" +msgstr[3] "%(counter)s wyników" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s łącznie" + +msgid "Save as new" +msgstr "Zapisz jako nowy" + +msgid "Save and add another" +msgstr "Zapisz i dodaj nowy" + +msgid "Save and continue editing" +msgstr "Zapisz i kontynuuj edycję" + +msgid "Save and view" +msgstr "Zapisz i obejrzyj" + +msgid "Close" +msgstr "Zamknij" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Zmień wybraną(-ne)(-nego)(-ny) %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Dodaj kolejne(go)(-ną)(-ny) %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Usuń wybraną(-ne)(-nego)(-ny) %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Dzięki za spędzenie cennego czasu ze stroną." + +msgid "Log in again" +msgstr "Zaloguj się ponownie" + +msgid "Password change" +msgstr "Zmiana hasła" + +msgid "Your password was changed." +msgstr "Twoje hasło zostało zmienione." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Podaj swoje stare hasło, ze względów bezpieczeństwa, a później wpisz " +"dwukrotnie Twoje nowe hasło, abyśmy mogli zweryfikować, że zostało wpisane " +"poprawnie." + +msgid "Change my password" +msgstr "Zmień hasło" + +msgid "Password reset" +msgstr "Zresetuj hasło" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Twoje hasło zostało ustawione. Możesz się teraz zalogować." + +msgid "Password reset confirmation" +msgstr "Potwierdzenie zresetowania hasła" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Podaj dwukrotnie nowe hasło, by można było zweryfikować, czy zostało wpisane " +"poprawnie." + +msgid "New password:" +msgstr "Nowe hasło:" + +msgid "Confirm password:" +msgstr "Potwierdź hasło:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link pozwalający na reset hasła jest niepoprawny - być może dlatego, że " +"został już raz użyty. Możesz ponownie zażądać zresetowania hasła." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Instrukcja pozwalająca ustawić nowe hasło dla podanego adresu e-mail została " +"wysłana. Niebawem powinna się pojawić na twoim koncie pocztowym." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"W przypadku nieotrzymania wiadomości e-mail: upewnij się czy adres " +"wprowadzony jest zgodny z tym podanym podczas rejestracji i sprawdź " +"zawartość folderu SPAM na swoim koncie." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Otrzymujesz tę wiadomość, gdyż skorzystano z opcji resetu hasła dla Twojego " +"konta na stronie %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Aby wprowadzić nowe hasło, proszę przejść na stronę, której adres widnieje " +"poniżej:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Twoja nazwa użytkownika, na wypadek, gdybyś zapomniał(a):" + +msgid "Thanks for using our site!" +msgstr "Dzięki za korzystanie z naszej strony!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Zespół %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Nie pamiętasz swojego hasła? Wprowadź w poniższym polu swój adres e-mail, a " +"wyślemy ci instrukcję opisującą sposób ustawienia nowego hasła." + +msgid "Email address:" +msgstr "Adres e-mail:" + +msgid "Reset my password" +msgstr "Zresetuj moje hasło" + +msgid "All dates" +msgstr "Wszystkie daty" + +#, python-format +msgid "Select %s" +msgstr "Wybierz %s" + +#, python-format +msgid "Select %s to change" +msgstr "Wybierz %s do zmiany" + +#, python-format +msgid "Select %s to view" +msgstr "Wybierz %s do obejrzenia" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Czas:" + +msgid "Lookup" +msgstr "Szukaj" + +msgid "Currently:" +msgstr "Aktualny:" + +msgid "Change:" +msgstr "Zmień:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..8cb35016feb653dd706831e1dcaefc967cb17129 GIT binary patch literal 5702 zcmdUyUu+yl9ml6|Ev*yUlC}YowoF4D>?XIqbJ8@q#7i(6<;tZ2x)G2e7ARd zGso_%FSn|y5H(6)ibQE8OrWAdJRlx;sDuE83aLKe1)h-LsSV#FAynT0sl5S7?q$5tgk1qi z&+8!R`5H*$e;a%qd<*vCU_HUffphCli)AG zPl4}&JHWqLZrcJIA)g1ggQqON3{t-sd<=XQq<-H6sr@_PPVf)lBj8^x@5drh`^P~l zAGi4#@KNNy1kyNP0Uv-byaHB{f9=7{9`A$rv3nlM=Jl}U4iHV*ZjkI&1YsI>2&DBt zZtLePzX*N;NkIJ5H>kj8t|=6BlsZjjb< zuPq+~N!}rF=^n6M6^r13Z-J!eeK0z4$nrtUZI;_DcUV4Yxyy2o<SDNMn&7K85r-B$$;QKzahn zLHaBbt^Xtv`C}f5)|(z$fAUp&b|aOLMv%xq>4D3xJ;&`AtpPoIGo-%C?Kgp9*nT9M z!$G7&NM!%sLu*OvLVNS5E!+l@PY>Jt1o#ZnlQvKL63dpZ4;4L)bPQ>nGI+=z=%F}C z&lnQm@!s;wpnr6iC-dkKL*6AQw*4VF!7O zFx3kEfKA2KI5KQ%S@?md1dfbtEmg;3tIX%a#3RU(WRBg0ycWRVpm- z-3B+ByQw%Xf&j%_7_Kpj!=`)np=|19nbxCe)_c9#3F*paMTTrfR>D|>9X8_!2KncG zPqH&YrDbR0pu^6@O0roIx;4BzY}WUbU#%H7r?tY%$P&M#V=h9PEU)P}R~l&#?orlFO?tC( zrzJ6Ec&Z`$(X8>klzJKWbUT~TruJl)WCUL%apYMw0YC2TNEnR^*Z5lPOYPUO4b-hG zD~30P2bWj05<*oa_OyZyp1rq*_rXXx`n}WO}jl<^yDI%Hq20wq6tVjKO z+GF1<327(}Wj>5E?K0E!DHf}2(9I1ZJ>R5Zs%M$gOR35vuFue^#)FdDK2)e+OX$cr zOjIhNTy}Uay3{=@Tl>-NB5V>*)U$+%2 ziQ>W5X>`lsJSK)Wk%QAL9jH;v;IfSeTp`=X>^W`aC*uV3fYo z^1{*LIDhfQw4yLsM9nc?L?`tW`u7@5P88NV7e}eR75dD2`Qi0)j0UN8IErQ#s2lP;)FdZhc*>dIPfIuX%Y#_i9vqofm=hA*ia3Zyd627W{Nb(|?U zx7$>{dY#v?JG7g~?hWNjzSa*qIBY|QIEvNkwLA1kC8i@e>{J+gNjj@@vB~aTA-mWJ zJ9V~TIyBtN?3|BzyKFjpfyVw?0QQ|aZMB|1CZ~)eE zgyMKhBvkWPS4@XvJtJP#7+bBb-~^^x?Zv#!Bcsu(5mOwA$cl8dLi zX&#>6y@?BGdPx_UNft9YZjE*1c>iF%sIWeY9X1Ov2nR4WHG)jn7ayoV zI^_=-{zO6tXdVBgnNYLEmXA}_)!iH1#73-zGrD!-PEIk66i@wfgK^lRo9Ga7FxfQp zi-ucYUD=0A3XDV1&(jU9=uqh16rQ4KCQTn##5Rl)2)Bm&YAD*CZfQ?fs6&**4FPQs zWjd}OA-bftBq?=F29Y+Ei^3NKsf{vc^WoiOb)|a)x^EmY?Vezfu~Y&JiT{4uLJ5c4 z(2P5C7S0orkGc0;fK-6A-V~JxWcMZ_=IS-fMd3daXdj0$2%7|Bzuabj?+ns9L$#Cg*8>Aa)Uf#F=B iqkv8UIsz#ABh`_Q(k($w&*t&Bz~, 2011 +# Janusz Harkot , 2014-2015 +# 0d5641585fd67fbdb97037c19ab83e4c_18c98b0 , 2011 +# m_aciek , 2016,2018,2020 +# Mariusz Felisiak , 2021 +# Roman Barczyński, 2012 +# Tomasz Kajtoch , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-19 11:03+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Dostępne %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"To lista dostępnych %s. Aby wybrać pozycje, zaznacz je i kliknij strzałkę " +"„Wybierz” pomiędzy listami." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Wpisz coś tutaj, aby wyfiltrować listę dostępnych %s." + +msgid "Filter" +msgstr "Filtr" + +msgid "Choose all" +msgstr "Wybierz wszystkie" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kliknij, aby wybrać jednocześnie wszystkie %s." + +msgid "Choose" +msgstr "Wybierz" + +msgid "Remove" +msgstr "Usuń" + +#, javascript-format +msgid "Chosen %s" +msgstr "Wybrane %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"To lista wybranych %s. Aby usunąć, zaznacz pozycje wybrane do usunięcia i " +"kliknij strzałkę „Usuń” pomiędzy listami." + +msgid "Remove all" +msgstr "Usuń wszystkie" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kliknij, aby usunąć jednocześnie wszystkie wybrane %s." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Wybrano %(sel)s z %(cnt)s" +msgstr[1] "Wybrano %(sel)s z %(cnt)s" +msgstr[2] "Wybrano %(sel)s z %(cnt)s" +msgstr[3] "Wybrano %(sel)s z %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Zmiany w niektórych polach nie zostały zachowane. Po wykonaniu akcji, zmiany " +"te zostaną utracone." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Wybrano akcję, lecz część zmian w polach nie została zachowana. Kliknij OK, " +"aby zapisać. Aby wykonać akcję, należy ją ponownie uruchomić." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Wybrano akcję, lecz nie dokonano żadnych zmian w polach. Prawdopodobnie " +"szukasz przycisku „Wykonaj”, a nie „Zapisz”." + +msgid "Now" +msgstr "Teraz" + +msgid "Midnight" +msgstr "Północ" + +msgid "6 a.m." +msgstr "6 rano" + +msgid "Noon" +msgstr "Południe" + +msgid "6 p.m." +msgstr "6 po południu" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzinę do przodu w stosunku do " +"czasu serwera." +msgstr[1] "" +"Uwaga: Czas lokalny jest przesunięty o %s godziny do przodu w stosunku do " +"czasu serwera." +msgstr[2] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzin do przodu w stosunku do " +"czasu serwera." +msgstr[3] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzin do przodu w stosunku do " +"czasu serwera." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzinę do tyłu w stosunku do " +"czasu serwera." +msgstr[1] "" +"Uwaga: Czas lokalny jest przesunięty o %s godziny do tyłu w stosunku do " +"czasu serwera." +msgstr[2] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzin do tyłu w stosunku do czasu " +"serwera." +msgstr[3] "" +"Uwaga: Czas lokalny jest przesunięty o %s godzin do tyłu w stosunku do czasu " +"serwera." + +msgid "Choose a Time" +msgstr "Wybierz Czas" + +msgid "Choose a time" +msgstr "Wybierz czas" + +msgid "Cancel" +msgstr "Anuluj" + +msgid "Today" +msgstr "Dzisiaj" + +msgid "Choose a Date" +msgstr "Wybierz Datę" + +msgid "Yesterday" +msgstr "Wczoraj" + +msgid "Tomorrow" +msgstr "Jutro" + +msgid "January" +msgstr "Styczeń" + +msgid "February" +msgstr "Luty" + +msgid "March" +msgstr "Marzec" + +msgid "April" +msgstr "Kwiecień" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Czerwiec" + +msgid "July" +msgstr "Lipiec" + +msgid "August" +msgstr "Sierpień" + +msgid "September" +msgstr "Wrzesień" + +msgid "October" +msgstr "Październik" + +msgid "November" +msgstr "Listopad" + +msgid "December" +msgstr "Grudzień" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Sty" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Lut" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Kwi" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Cze" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Lip" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Sie" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Wrz" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Paź" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Lis" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Gru" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "N" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "W" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ś" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Pokaż" + +msgid "Hide" +msgstr "Ukryj" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d7ec87d28b83d286507998c4aea5a9650bd712b0 GIT binary patch literal 16912 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, 2018 +# Jannis Leidel , 2011 +# jorgecarleitao , 2015 +# Nuno Mariz , 2013,2015,2017-2018 +# Paulo Köch , 2011 +# Raúl Pedro Fernandes Santos, 2014 +# Rui Dinis Silva, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Foram removidos com sucesso %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Não é possível remover %(name)s " + +msgid "Are you sure?" +msgstr "Tem a certeza?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Remover %(verbose_name_plural)s selecionados" + +msgid "Administration" +msgstr "Administração" + +msgid "All" +msgstr "Todos" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Any date" +msgstr "Qualquer data" + +msgid "Today" +msgstr "Hoje" + +msgid "Past 7 days" +msgstr "Últimos 7 dias" + +msgid "This month" +msgstr "Este mês" + +msgid "This year" +msgstr "Este ano" + +msgid "No date" +msgstr "Sem data" + +msgid "Has date" +msgstr "Tem data" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor introduza o %(username)s e password corretos para a conta de " +"equipa. Tenha em atenção às maiúsculas e minúsculas." + +msgid "Action:" +msgstr "Ação:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Adicionar outro %(verbose_name)s" + +msgid "Remove" +msgstr "Remover" + +msgid "Addition" +msgstr "Adição" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Eliminação" + +msgid "action time" +msgstr "hora da ação" + +msgid "user" +msgstr "utilizador" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "object id" +msgstr "id do objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr do objeto" + +msgid "action flag" +msgstr "flag de ação" + +msgid "change message" +msgstr "modificar mensagem" + +msgid "log entry" +msgstr "entrada de log" + +msgid "log entries" +msgstr "entradas de log" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Adicionado \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Foram modificados \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Foram removidos \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Foi adicionado {name} \"{object}\"." + +msgid "Added." +msgstr "Adicionado." + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Foram modificados os {fields} para {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Foi modificado {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Foi removido {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nenhum campo foi modificado." + +msgid "None" +msgstr "Nenhum" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenha pressionado o \"Control\", ou \"Command\" no Mac, para selecionar " +"mais do que um." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "O {name} \"{obj}\" foi adicionado com sucesso." + +msgid "You may edit it again below." +msgstr "Pode editar novamente abaixo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"O {name} \"{obj}\" foi adicionado com sucesso. Pode adicionar um novo {name} " +"abaixo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"O {name} \"{obj}\" foi modificado com sucesso. Pode voltar a editar " +"novamente abaixo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"O {name} \"{obj}\" foi adicionado com sucesso. Pode voltar a editar " +"novamente abaixo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"O {name} \"{obj}\" foi modificado com sucesso. Pode adicionar um novo {name} " +"abaixo." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "O {name} \"{obj}\" foi modificado com sucesso." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Os itens devem ser selecionados de forma a efectuar ações sobre eles. Nenhum " +"item foi modificado." + +msgid "No action selected." +msgstr "Nenhuma ação selecionada." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "O(A) %(name)s \"%(obj)s\" foi removido(a) com sucesso." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s com ID \"%(key)s\" não existe. Talvez foi removido?" + +#, python-format +msgid "Add %s" +msgstr "Adicionar %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "View %s " + +msgid "Database error" +msgstr "Erro de base de dados" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s foi modificado com sucesso." +msgstr[1] "%(count)s %(name)s foram modificados com sucesso." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selecionado" +msgstr[1] "Todos %(total_count)s selecionados" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s selecionados" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificações: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Remover %(class_name)s %(instance)s exigiria a remoção dos seguintes objetos " +"relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Site de administração do Django" + +msgid "Django administration" +msgstr "Administração do Django" + +msgid "Site administration" +msgstr "Administração do site" + +msgid "Log in" +msgstr "Entrar" + +#, python-format +msgid "%(app)s administration" +msgstr "Administração de %(app)s" + +msgid "Page not found" +msgstr "Página não encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Pedimos desculpa, mas a página solicitada não foi encontrada." + +msgid "Home" +msgstr "Início" + +msgid "Server error" +msgstr "Erro do servidor" + +msgid "Server error (500)" +msgstr "Erro do servidor (500)" + +msgid "Server Error (500)" +msgstr "Erro do servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ocorreu um erro. Foi enviada uma notificação para os administradores do " +"site, devendo o mesmo ser corrigido em breve. Obrigado pela atenção." + +msgid "Run the selected action" +msgstr "Executar a acção selecionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Clique aqui para selecionar os objetos em todas as páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Selecionar todos %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Remover seleção" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primeiro introduza o nome do utilizador e palavra-passe. Depois poderá " +"editar mais opções do utilizador." + +msgid "Enter a username and password." +msgstr "Introduza o utilizador e palavra-passe." + +msgid "Change password" +msgstr "Modificar palavra-passe" + +msgid "Please correct the error below." +msgstr "Por favor corrija o erro abaixo." + +msgid "Please correct the errors below." +msgstr "Por favor corrija os erros abaixo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduza uma nova palavra-passe para o utilizador %(username)s." + +msgid "Welcome," +msgstr "Bem-vindo," + +msgid "View site" +msgstr "Ver site" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Log out" +msgstr "Sair" + +#, python-format +msgid "Add %(name)s" +msgstr "Adicionar %(name)s" + +msgid "History" +msgstr "História" + +msgid "View on site" +msgstr "Ver no site" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Remover da ordenação" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridade de ordenação: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Altenar ordenação" + +msgid "Delete" +msgstr "Remover" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"A remoção de %(object_name)s '%(escaped_object)s' resultará na remoção dos " +"objetos relacionados, mas a sua conta não tem permissão de remoção dos " +"seguintes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Remover o %(object_name)s ' %(escaped_object)s ' exigiria a remoção dos " +"seguintes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Tem a certeza que deseja remover %(object_name)s \"%(escaped_object)s\"? " +"Todos os items relacionados seguintes irão ser removidos:" + +msgid "Objects" +msgstr "Objectos" + +msgid "Yes, I'm sure" +msgstr "Sim, tenho a certeza" + +msgid "No, take me back" +msgstr "Não, retrocede" + +msgid "Delete multiple objects" +msgstr "Remover múltiplos objetos." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Remover o %(objects_name)s selecionado poderia resultar na remoção de " +"objetos relacionados, mas a sua conta não tem permissão para remover os " +"seguintes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Remover o %(objects_name)s selecionado exigiria remover os seguintes objetos " +"protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Tem certeza de que deseja remover %(objects_name)s selecionado? Todos os " +"objetos seguintes e seus itens relacionados serão removidos:" + +msgid "View" +msgstr "View" + +msgid "Delete?" +msgstr "Remover?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Sumário" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos na aplicação %(name)s" + +msgid "Add" +msgstr "Adicionar" + +msgid "You don't have permission to view or edit anything." +msgstr "Não tem permissão para ver ou editar nada." + +msgid "Recent actions" +msgstr "Ações recentes" + +msgid "My actions" +msgstr "As minhas ações" + +msgid "None available" +msgstr "Nenhum disponível" + +msgid "Unknown content" +msgstr "Conteúdo desconhecido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Passa-se algo de errado com a instalação da sua base de dados. Verifique se " +"as tabelas da base de dados foram criadas apropriadamente e verifique se a " +"base de dados pode ser lida pelo utilizador definido." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Está autenticado como %(username)s, mas não está autorizado a aceder a esta " +"página. Deseja autenticar-se com uma conta diferente?" + +msgid "Forgotten your password or username?" +msgstr "Esqueceu-se da sua palavra-passe ou utilizador?" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Utilizador" + +msgid "Action" +msgstr "Ação" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto não tem histórico de modificações. Provavelmente não foi " +"modificado via site de administração." + +msgid "Show all" +msgstr "Mostrar todos" + +msgid "Save" +msgstr "Gravar" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Pesquisar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s no total" + +msgid "Save as new" +msgstr "Gravar como novo" + +msgid "Save and add another" +msgstr "Gravar e adicionar outro" + +msgid "Save and continue editing" +msgstr "Gravar e continuar a editar" + +msgid "Save and view" +msgstr "Gravar e ver" + +msgid "Close" +msgstr "Fechar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Alterar %(model)s selecionado." + +#, python-format +msgid "Add another %(model)s" +msgstr "Adicionar outro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Remover %(model)s seleccionado" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Obrigado pela sua visita." + +msgid "Log in again" +msgstr "Entrar novamente" + +msgid "Password change" +msgstr "Modificação da palavra-passe" + +msgid "Your password was changed." +msgstr "A sua palavra-passe foi modificada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por razões de segurança, por favor introduza a sua palavra-passe antiga e " +"depois introduza a nova duas vezes para que possamos verificar se introduziu " +"corretamente." + +msgid "Change my password" +msgstr "Modificar a minha palavra-passe" + +msgid "Password reset" +msgstr "Palavra-passe de reinicialização" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "A sua palavra-passe foi atribuída. Pode entrar agora." + +msgid "Password reset confirmation" +msgstr "Confirmação da reinicialização da palavra-passe" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, introduza a sua nova palavra-passe duas vezes para verificarmos " +"se está correcta." + +msgid "New password:" +msgstr "Nova palavra-passe:" + +msgid "Confirm password:" +msgstr "Confirmação da palavra-passe:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"O endereço de reinicialização da palavra-passe é inválido, possivelmente " +"porque já foi usado. Por favor requisite uma nova reinicialização da palavra-" +"passe." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Foram enviadas para o email indicado as instruções de configuração da " +"palavra-passe, se existir uma conta com o email que indicou. Deverá recebê-" +"las brevemente." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se não receber um email, por favor assegure-se de que introduziu o endereço " +"com o qual se registou e verifique a sua pasta de correio electrónico não " +"solicitado." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Está a receber este email porque pediu para redefinir a palavra-chave para o " +"seu utilizador no site %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor siga a seguinte página e escolha a sua nova palavra-passe:" + +msgid "Your username, in case you've forgotten:" +msgstr "O seu nome de utilizador, no caso de se ter esquecido:" + +msgid "Thanks for using our site!" +msgstr "Obrigado pela sua visita ao nosso site!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "A equipa do %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Esqueceu-se da sua palavra-chave? Introduza o seu endereço de email e enviar-" +"lhe-emos instruções para definir uma nova." + +msgid "Email address:" +msgstr "Endereço de email:" + +msgid "Reset my password" +msgstr "Reinicializar a minha palavra-passe" + +msgid "All dates" +msgstr "Todas as datas" + +#, python-format +msgid "Select %s" +msgstr "Selecionar %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selecione %s para modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Selecione %s para ver" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Procurar" + +msgid "Currently:" +msgstr "Atualmente:" + +msgid "Change:" +msgstr "Modificar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..bc7ae616897aa76769d489c4252d485db16607f7 GIT binary patch literal 4579 zcmb`LU2I%O6~_k}XmO#Rl#f!v)WwO@_^#J>$j636HU3CqaO}ieN)aGt?;Y<>xp!un znY-)FOW!~Ogg_0YMe0Kop{Ng)$^#V=NFZ&?15~0f6{=9bo{)Iq1=Lsm=iXWGn!1Tm z8SmWRov(AxoH;XRk~i+!_cMlc1o=MX-+h3wGvGIF!UJh*A7jVB9{6GKSAo9)KZNq{ zL-{4}qbR=|%C7~!1%3?me-He3;7u4jhWb0fkAU}qp92qo2f$_U7BCC!fb{*xL5N`A z18)X@7|KrsJ_X{(p235ra1|su*FYNgJoq*6*I*sI4MM3s2C07vlH4|kAKSu%^n4s7 zJ%0d_oXg;4@M-X;UYN&UZYSZn^JlZndbXh zDj;E6MIu|>g*=Hog*=D+8DyA?9YW^FFb$hQrgLEenNk(`0pugd!54)eDb-arQu3pvv>5B8E`+5j{tows$Avg9 z(iGKPcy92O3R@VoTbY@TEZWhv96ju|C}Wv5q-D#pVRK=7Y+0oq<+Cc0Y(?mzZY589 zY$ex{tqL2r@a(Zwm1xy$d3N3yjfa;t{;0{huryiTGP&iVB}GE^bkcUDdAgIYrJn3 zUd9vCEoZc=J=vqu!52v!c~(onj|V#vM&ly(%IK-We!b8^AM`vE2^?P2ItbmA*wGpq zB&ws5T%`E6OcPhw<{+H4ZA}APw8v9p3gd4Ycq*)X21d@k$6zZ^rb>L2S~f_NvaND` z)zFELs^%~CZ8;vhD$9~rmvQTMdWb;z9(j+5F z<+}Xj?xv85^2PBqu*td2LR}I!V&FpG|CZEMP@#dXV4SZoqwyv^mWwZ2g(cg!JX*JE zG}Wz+)@=x%)8g*i*ioAoJ$KaATe)@Avp(9hp38SvJ|YucRzJelt$7T`cXTd^zACMQ zuhe+*7+k`PU6gHOeYEPDDv7?7H(gXWH9oe!R*x2}6y#SC9n3X8Tb(%?Rlg9;9OJWd zwVBz&)!Awl9ixk~qe$kk-?3a0r@P&5#gja>DYt0QbUC8| z(jZ~F?WYfot)5$58qR&DQXN|`+Di?cuq|uc%Pl|MPKDAZ$setg{?x>gZAAM_6 z+Gt6~Cc)WM&cXON^!U`^f^s*l}j-nqXmuG@^R%%$JfsqlHVXF(yqYLc zf`YH8@im;IIp55kL7=w%D^?jy#P_e1p&Qc@=&U_fgd<{EnTr0k{#C;Tjv&NxXlsi= zz86^t?f-+Y9L|1S#b5%rH@$8kif&7LkVRJo7=OM=Ua^+@oJwUR99$X(PO>5CzJTUc zI3%sqlJkQ1pM}R!fD_~wsgsm(1_`ui4IW{?ho50s{Jc@z1F6^$*&;^I;3|#g7XcMgTUdo)s@yzBk zp#!GY0<`&p$7Yy4&bLHxO%9CX z)h2XJbv(-xq5Id!M6hlwvNo_Cii@SOrh|Z+W-zAY*u}P3DY|@l5_S%1QS|QgpCuuK z>NE5WferHi*JuHkL5YY!yAn5o!a_}pTd2j#Sxnzy|6d_Li*fzJ>4i6KI@q|u9=I`L z=y2)?gQZPiV*MUw*uZH9xg%D^oeTdsBFEZY63z&+PaBsv+y&rw8^zxuyMX`VxWN7c DNIeV# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..17379945a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po @@ -0,0 +1,222 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nuno Mariz , 2011-2012,2015,2017 +# Paulo Köch , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-11-30 23:49+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponível %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s disponíveis. Poderá escolher alguns, selecionando-os na " +"caixa abaixo e clicando na seta \"Escolher\" entre as duas caixas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Digite nesta caixa para filtrar a lista de %s disponíveis." + +msgid "Filter" +msgstr "Filtrar" + +msgid "Choose all" +msgstr "Escolher todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Clique para escolher todos os %s de uma vez." + +msgid "Choose" +msgstr "Escolher" + +msgid "Remove" +msgstr "Remover" + +#, javascript-format +msgid "Chosen %s" +msgstr "Escolhido %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s escolhidos. Poderá remover alguns, selecionando-os na " +"caixa abaixo e clicando na seta \"Remover\" entre as duas caixas." + +msgid "Remove all" +msgstr "Remover todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Clique para remover todos os %s escolhidos de uma vez." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s selecionado" +msgstr[1] "%(sel)s de %(cnt)s selecionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tem mudanças por guardar nos campos individuais. Se usar uma ação, as suas " +"mudanças por guardar serão perdidas." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Selecionou uma ação mas ainda não guardou as mudanças dos campos " +"individuais. Carregue em OK para gravar. Precisará de correr de novo a ação." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Selecionou uma ação mas ainda não guardou as mudanças dos campos " +"individuais. Provavelmente quererá o botão Ir ao invés do botão Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Nota: O seu fuso horário está %s hora adiantado em relação ao servidor." +msgstr[1] "" +"Nota: O seu fuso horário está %s horas adiantado em relação ao servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Nota: O use fuso horário está %s hora atrasado em relação ao servidor." +msgstr[1] "" +"Nota: O use fuso horário está %s horas atrasado em relação ao servidor." + +msgid "Now" +msgstr "Agora" + +msgid "Choose a Time" +msgstr "Escolha a Hora" + +msgid "Choose a time" +msgstr "Escolha a hora" + +msgid "Midnight" +msgstr "Meia-noite" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Meio-dia" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoje" + +msgid "Choose a Date" +msgstr "Escolha a Data" + +msgid "Yesterday" +msgstr "Ontem" + +msgid "Tomorrow" +msgstr "Amanhã" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "S" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Q" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Q" + +msgctxt "one letter Friday" +msgid "F" +msgstr "S" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfc9541851e9c2b2618dfe993ea78e793cd146a2 GIT binary patch literal 17151 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, 2014 +# Bruce de Sá , 2019 +# bruno.devpod , 2014 +# Carlos C. Leite , 2019 +# Carlos C. Leite , 2019 +# Filipe Cifali Stangler , 2016 +# dudanogueira , 2012 +# Elyézer Rezende , 2013 +# Fábio C. Barrionuevo da Luz , 2015 +# Fabio Cerqueira , 2019 +# Xico Petry , 2016 +# Gladson , 2013 +# Guilherme Ferreira , 2017 +# semente, 2012-2013 +# Jannis Leidel , 2011 +# João Paulo Andrade , 2018 +# Lucas Infante , 2015 +# Luiz Boaretto , 2017 +# Marcelo Moro Brondani , 2018 +# Marco Rougeth , 2015 +# Otávio Reis , 2018 +# Raysa Dutra, 2016 +# R.J Lelis , 2019 +# Samuel Nogueira Bacelar , 2020 +# Sergio Garcia , 2015 +# Vinícius Damaceno , 2019 +# Vinícius Muniz de Melo , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-09-22 14:07+0000\n" +"Last-Translator: Samuel Nogueira Bacelar \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Removido %(count)d %(items)s com sucesso." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Não é possível excluir %(name)s " + +msgid "Are you sure?" +msgstr "Tem certeza?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Remover %(verbose_name_plural)s selecionados" + +msgid "Administration" +msgstr "Administração" + +msgid "All" +msgstr "Todos" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Any date" +msgstr "Qualquer data" + +msgid "Today" +msgstr "Hoje" + +msgid "Past 7 days" +msgstr "Últimos 7 dias" + +msgid "This month" +msgstr "Este mês" + +msgid "This year" +msgstr "Este ano" + +msgid "No date" +msgstr "Sem data" + +msgid "Has date" +msgstr "Tem data" + +msgid "Empty" +msgstr "Vazio" + +msgid "Not empty" +msgstr "Não está vazio" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor, insira um %(username)s e senha corretos para uma conta de equipe. " +"Note que ambos campos são sensíveis a maiúsculas e minúsculas." + +msgid "Action:" +msgstr "Ação:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Adicionar outro(a) %(verbose_name)s" + +msgid "Remove" +msgstr "Remover" + +msgid "Addition" +msgstr "Adição" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Eliminação" + +msgid "action time" +msgstr "hora da ação" + +msgid "user" +msgstr "usuário" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "object id" +msgstr "id do objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr do objeto" + +msgid "action flag" +msgstr "flag de ação" + +msgid "change message" +msgstr "modificar mensagem" + +msgid "log entry" +msgstr "entrada de log" + +msgid "log entries" +msgstr "entradas de log" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Adicionado “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Alterado “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Deletado “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Adicionado {name} “{object}”." + +msgid "Added." +msgstr "Adicionado." + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Alterado {fields} para {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Alterado {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Deletado {name} “{object}”." + +msgid "No fields changed." +msgstr "Nenhum campo modificado." + +msgid "None" +msgstr "Nenhum" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Pressione “Control”, ou “Command” no Mac, para selecionar mais de um." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "O {name} “{obj}” foi adicionado com sucesso." + +msgid "You may edit it again below." +msgstr "Você pode editá-lo novamente abaixo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"O {name} “{obj}” foi adicionado com sucesso. Você pode adicionar outro " +"{name} abaixo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"O {name} “{obj}” foi alterado com sucesso. Você pode alterá-lo novamente " +"abaixo." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"O {name} “{obj}” foi adicionado com sucesso. Você pode editá-lo novamente " +"abaixo." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"O {name} “{obj}” foi alterado com sucesso. Você talvez adicione outro " +"{name} abaixo." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "O {name} “{obj}” foi alterado com sucesso." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Os itens devem ser selecionados em ordem a fim de executar ações sobre eles. " +"Nenhum item foi modificado." + +msgid "No action selected." +msgstr "Nenhuma ação selecionada." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "O %(name)s “%(obj)s” foi deletado com sucesso." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "O %(name)s com ID “%(key)s” não existe. Talvez tenha sido deletado." + +#, python-format +msgid "Add %s" +msgstr "Adicionar %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Visualizar %s" + +msgid "Database error" +msgstr "Erro no banco de dados" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s modificado com sucesso." +msgstr[1] "%(count)s %(name)s modificados com sucesso." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selecionado" +msgstr[1] "Todos %(total_count)s selecionados" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s selecionados" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificações: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Excluir o %(class_name)s %(instance)s exigiria excluir os seguintes objetos " +"protegidos relacionados: %(related_objects)s" + +msgid "Django site admin" +msgstr "Site de administração do Django" + +msgid "Django administration" +msgstr "Administração do Django" + +msgid "Site administration" +msgstr "Administração do Site" + +msgid "Log in" +msgstr "Acessar" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administração" + +msgid "Page not found" +msgstr "Página não encontrada" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Lamentamos, mas a página requisitada não pode ser encontrada." + +msgid "Home" +msgstr "Início" + +msgid "Server error" +msgstr "Erro no servidor" + +msgid "Server error (500)" +msgstr "Erro no servidor (500)" + +msgid "Server Error (500)" +msgstr "Erro no Servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ocorreu um erro. Este foi reportado para os administradores do site via " +"email e deve ser corrigido logo. Obirgado por sua paciência." + +msgid "Run the selected action" +msgstr "Executar ação selecionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Clique aqui para selecionar os objetos de todas as páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Selecionar todos %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpar seleção" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos na aplicação %(name)s" + +msgid "Add" +msgstr "Adicionar" + +msgid "View" +msgstr "Visualizar" + +msgid "You don’t have permission to view or edit anything." +msgstr "Você não tem permissão para ver ou editar nada." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Primeiro, informe seu nome de usuário e senha. Então, você poderá editar " +"outras opções do usuário." + +msgid "Enter a username and password." +msgstr "Digite um nome de usuário e senha." + +msgid "Change password" +msgstr "Alterar senha" + +msgid "Please correct the error below." +msgstr "Por favor corrija o erro abaixo " + +msgid "Please correct the errors below." +msgstr "Por favor, corrija os erros abaixo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Informe uma nova senha para o usuário %(username)s." + +msgid "Welcome," +msgstr "Bem-vindo(a)," + +msgid "View site" +msgstr "Ver o site" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Log out" +msgstr "Encerrar sessão" + +#, python-format +msgid "Add %(name)s" +msgstr "Adicionar %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver no site" + +msgid "Filter" +msgstr "Filtro" + +msgid "Clear all filters" +msgstr "Limpar todos os filtros" + +msgid "Remove from sorting" +msgstr "Remover da ordenação" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridade da ordenação: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Alternar ordenção" + +msgid "Delete" +msgstr "Apagar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"A remoção de '%(object_name)s' %(escaped_object)s pode resultar na remoção " +"de objetos relacionados, mas sua conta não tem a permissão para remoção dos " +"seguintes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Excluir o %(object_name)s ' %(escaped_object)s ' exigiria excluir os " +"seguintes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Você tem certeza que quer remover %(object_name)s \"%(escaped_object)s\"? " +"Todos os seguintes itens relacionados serão removidos:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I’m sure" +msgstr "Sim, eu tenho certeza" + +msgid "No, take me back" +msgstr "Não, me leve de volta" + +msgid "Delete multiple objects" +msgstr "Remover múltiplos objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Excluir o %(objects_name)s selecionado pode resultar na remoção de objetos " +"relacionados, mas sua conta não tem permissão para excluir os seguintes " +"tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Excluir o %(objects_name)s selecionado exigiria excluir os seguintes objetos " +"relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Tem certeza de que deseja apagar o %(objects_name)s selecionado? Todos os " +"seguintes objetos e seus itens relacionados serão removidos:" + +msgid "Delete?" +msgstr "Apagar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumo" + +msgid "Recent actions" +msgstr "Ações recentes" + +msgid "My actions" +msgstr "Minhas Ações" + +msgid "None available" +msgstr "Nenhum disponível" + +msgid "Unknown content" +msgstr "Conteúdo desconhecido" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Alguma coisa está errada com sua estalação do banco de dados. Certifique-se " +"que as tabelas apropriadas foram criadas, e certifique-se que o banco de " +"dados pode ser acessado pelo usuário apropriado." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Você está autenticado como %(username)s, mas não está autorizado a acessar " +"esta página. Você gostaria de realizar login com uma conta diferente?" + +msgid "Forgotten your password or username?" +msgstr "Esqueceu sua senha ou nome de usuário?" + +msgid "Toggle navigation" +msgstr "Alternar navegação" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usuário" + +msgid "Action" +msgstr "Ação" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Este objeto não tem histórico de alterações. Provavelmente não adicionado " +"por este site de administração." + +msgid "Show all" +msgstr "Mostrar tudo" + +msgid "Save" +msgstr "Salvar" + +msgid "Popup closing…" +msgstr "Popup fechando…" + +msgid "Search" +msgstr "Pesquisar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Salvar como novo" + +msgid "Save and add another" +msgstr "Salvar e adicionar outro(a)" + +msgid "Save and continue editing" +msgstr "Salvar e continuar editando" + +msgid "Save and view" +msgstr "Salvar e visualizar" + +msgid "Close" +msgstr "Fechar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Alterar %(model)s selecionado" + +#, python-format +msgid "Add another %(model)s" +msgstr "Adicionar outro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Excluir %(model)s selecionado" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Obrigado por visitar nosso Web site hoje." + +msgid "Log in again" +msgstr "Acessar novamente" + +msgid "Password change" +msgstr "Alterar senha" + +msgid "Your password was changed." +msgstr "Sua senha foi alterada." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Informe sua senha antiga por favor, por motivos de segurança, e então " +"informe sua nova senha duas vezes para que possamos verificar se você " +"digitou tudo corretamente." + +msgid "Change my password" +msgstr "Alterar minha senha" + +msgid "Password reset" +msgstr "Recuperar senha" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Sua senha foi definida. Você pode prosseguir e se autenticar agora." + +msgid "Password reset confirmation" +msgstr "Confirmação de recuperação de senha" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, informe sua nova senha duas vezes para que possamos verificar se " +"você a digitou corretamente." + +msgid "New password:" +msgstr "Nova senha:" + +msgid "Confirm password:" +msgstr "Confirme a senha:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"O link para a recuperação de senha era inválido, possivelmente porque já foi " +"utilizado. Por favor, solicite uma nova recuperação de senha." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Nos te enviamos um email com instruções para configurar sua senha, se uma " +"conta existe com o email fornecido. Você receberá a mensagem em breve." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se você não recebeu um email, por favor certifique-se que você forneceu o " +"endereço que você está cadastrado, e verifique sua pasta de spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Você está recebendo este email porque solicitou a redefinição da senha da " +"sua conta em %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, acesse a seguinte página e escolha uma nova senha:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Seu nome de usuário, caso tenha esquecido:" + +msgid "Thanks for using our site!" +msgstr "Obrigado por usar nosso site!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Equipe %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Esqueceu sua senha? Forneça seu endereço de email abaixo, e nos te " +"enviaremos um email com instruções para configurar uma nova." + +msgid "Email address:" +msgstr "Endereço de email:" + +msgid "Reset my password" +msgstr "Reinicializar minha senha" + +msgid "All dates" +msgstr "Todas as datas" + +#, python-format +msgid "Select %s" +msgstr "Selecione %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selecione %s para modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Selecione %s para visualizar" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Procurar" + +msgid "Currently:" +msgstr "Atualmente:" + +msgid "Change:" +msgstr "Alterar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..813a169a6dc0bf44282521d6d46eb214a6c7b901 GIT binary patch literal 5208 zcmbuDZH!!18Gw&EDlRHo6a@i~mDXM8%yx?{bxLcu9}BH)TXu(HjUPEP_w3B2ckY?q zkJ;V+&}yP+P@;$tqcN-vX@D4Fj8PIbCKEqmBEO929}@kgzf6n?zl=Wby=S(w(^49_ zopYaizTfkn_q^xbzOuVt_a%5Q{kfw#f;!y4QQkHKqT?)h2BPd&^_M0*sz8Gh5} zzw7xVWD4~Zd;@$I$~e#Y`k%p%lm7*5z#AAu>Q6&ypFtUSg%?fKIVf^I3`Nezpv?b0 z_&8jH-+;RqMCSb+l<{8RwFkZkrQh|uz7KDKPr#qU9(;ho-vfUG-wR)YH^G-ZH(iU4 z$XDSF@E*@kL+O{pcf+qi>31GV`(MKM!9T<6;lDkvVUwi&%}~mB`1~Av7x_;@ndc1r z((9D^GTcZ0y0$OnybQ)d<6DaHdg6AXf9poQ}GT&1^|2*WUe$Pw# z{RK|Lf51AtkwO`#0Y!hGf-+Crm&Xv*t7Ry1e9rTWP})5LWuG2{BJa1MjQ0b07CsBl zz^w=;jdAn!LbBE_H&${P6&jX%wkZn{)J@4~8=6S+% z!L#9c(vz-gN?!iK9Moq2Jp)C@Vuv3feTalQ)Q3s8kZPn4l0<)ELt>9rlI({(sHU)0 z`M!-L`#wn$`;A7Tsg+)<*iRqek8;=}GF;l|W1(r%LM$M9j>)kjFOH+TC& zwxY1bEk3^&?j+sn^KvdxN3lOrbUW#zq#css5qpzI{G>e7B-!(Aq^%^eo9!eypW@@> zk+V=dTP9N*O{Ll`=`EA3IOCH7+sbU9u2i>6n_9P~cIlpAwwHvFn$6pJnyJ~o2_w^t ztlpBUgC=g-NFD4rms$^P^dXatl52`eOuJiwCsJc*&*Aq-KI^{oNXq#NmkWd7-i(|4Fju=nz$%Cnn$bZXdYWN zZ<1Dr_o|u?gE(w=GIh+km{(@&`jpGHNo29QQkMvDYhuXiDh*Rc04?hC{3GI7P@#_p}$q%ApYCA?_|1b0!%)ZoiK6R za;9Ts2*Q3CVdr)+qWpqyrc`0OKsaX_h z%DUQ>#iNnlC|*k6K+2MJ0ny1N0_s(p)%1zTn$(uIp^tw|v?u+C(sS-(%V-oQwwmOn zbfs!W1k2-c(#tEv24PmXsi9_$EEOWla3hK?Bpx4WIYfjeN5Z99O_^phvHhCvx;X3T z!WmY0kCzwjv4WQzs~GyD3Lj%tLl0HqW30;isR|sg!E;q`UzZfemg4c&g?Fp)9&3)j zqjYtw^ca3sd}oD^u`2IVDsZf3-KSLeQZ7bsHp9sEToPjFmATQfc^6CB{Ak&t$#OXo zmBkIEdC_u1S)-FDskCg2wru3~(!vLA5SPUdsuPKOh)b_}B&eRWNy-VU>);`dk(*es zJ(pzF`LrDd)dP7utu|a;Pn1-v%L>A=Bm3dwv*|WY*IZOw_Jb+uj}2- zFk6?pu8X-QPDFWPqUxMWx@ld(t%3Dd!k zb>E)d(7wFKlCdV`M85a>T-=U_>{*Uz;s|euKWr#p+&n;*7zZp7pHYiVQ>4W3~I*xq; zE})Z`)7CPW3Q_GaHVTP~%5eyZ`h*!#x3K2Y$|-B%z(nIcB3FXBOa>=NG7`S@2TvFF z=Zhsms$EH{Z8)e@_lskMbH!oBg{&s(BYi6SX5^0%S;J54D+|nJz~cJ6382Nb5G57f zC1oU&)ch2^#J0keqrE0pm=LBW=%8=P6%JK3lo*YU%|4V3v8eN!lgMeXChl{i5*MwX z)vnl9j`Q8H8<#F^WN=)C literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..565b6ac70 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po @@ -0,0 +1,272 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# andrewsmedina , 2016 +# Eduardo Cereto Carvalho, 2011 +# semente, 2012 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Rafael Fontenelle , 2021 +# Renata Barbosa Almeida , 2016 +# Samuel Nogueira Bacelar , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-17 05:53+0000\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponíveis" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s disponíveis. Você pode escolhê-los(as) selecionando-" +"os(as) abaixo e clicando na seta \"Escolher\" entre as duas caixas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Digite nessa caixa para filtrar a lista de %s disponíveis." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Escolher todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Clique para escolher todos os %s de uma só vez" + +msgid "Choose" +msgstr "Escolher" + +msgid "Remove" +msgstr "Remover" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s escolhido(s)" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s disponíveis. Você pode removê-los(as) selecionando-" +"os(as) abaixo e clicando na seta \"Remover\" entre as duas caixas." + +msgid "Remove all" +msgstr "Remover todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Clique para remover de uma só vez todos os %s escolhidos." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s selecionado" +msgstr[1] "%(sel)s de %(cnt)s selecionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Você tem alterações não salvas em campos editáveis individuais. Se você " +"executar uma ação suas alterações não salvas serão perdidas." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Você selecionou uma ação, mas você ainda não salvou suas alterações nos " +"campos individuais. Por favor clique OK para salvar. você precisará de rodar " +"novamente a ação." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Você selecionou uma ação sem fazer mudanças nos campos individuais. Você " +"provavelmente está procurando pelo botão Go ao invés do botão Save." + +msgid "Now" +msgstr "Agora" + +msgid "Midnight" +msgstr "Meia-noite" + +msgid "6 a.m." +msgstr "6 da manhã" + +msgid "Noon" +msgstr "Meio-dia" + +msgid "6 p.m." +msgstr "6 da tarde" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Você está %s hora à frente do horário do servidor." +msgstr[1] "Nota: Você está %s horas à frente do horário do servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Você está %s hora atrás do tempo do servidor." +msgstr[1] "Nota: Você está %s horas atrás do horário do servidor." + +msgid "Choose a Time" +msgstr "Escolha um horário" + +msgid "Choose a time" +msgstr "Escolha uma hora" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoje" + +msgid "Choose a Date" +msgstr "Escolha uma data" + +msgid "Yesterday" +msgstr "Ontem" + +msgid "Tomorrow" +msgstr "Amanhã" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Fev" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Abr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mai" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ago" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Set" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Out" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dez" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "S" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Q" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Q" + +msgctxt "one letter Friday" +msgid "F" +msgstr "S" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Esconder" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78e6b31f4b1906add4cbf556f957c64f778201c1 GIT binary patch literal 14387 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 Y|B0jHo~7gUV>_ImjY{YB{eU#{-#9DUYybcN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..db64193b3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,717 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2018-2019 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2011,2014 +# Eugenol Man , 2020 +# Ionel Cristian Mărieș , 2012 +# Jannis Leidel , 2011 +# Mihai Fotea , 2020 +# Razvan Stefanescu , 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-15 11:07+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s șterse cu succes." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nu se poate șterge %(name)s" + +msgid "Are you sure?" +msgstr "Ești sigur?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Elimină %(verbose_name_plural)s selectate" + +msgid "Administration" +msgstr "Administrare" + +msgid "All" +msgstr "Toate" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Nu" + +msgid "Unknown" +msgstr "Necunoscut" + +msgid "Any date" +msgstr "Orice dată" + +msgid "Today" +msgstr "Astăzi" + +msgid "Past 7 days" +msgstr "Ultimele 7 zile" + +msgid "This month" +msgstr "Luna aceasta" + +msgid "This year" +msgstr "Anul acesta" + +msgid "No date" +msgstr "Fără dată" + +msgid "Has date" +msgstr "Are o dată" + +msgid "Empty" +msgstr "Gol" + +msgid "Not empty" +msgstr "Nu este gol" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Introduceți vă rog un %(username)s și parola corectă pentru un cont de " +"membru. De remarcat că ambele pot conține majuscule." + +msgid "Action:" +msgstr "Acțiune:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Adăugati încă un/o %(verbose_name)s" + +msgid "Remove" +msgstr "Elimină" + +msgid "Addition" +msgstr "Adăugare" + +msgid "Change" +msgstr "Schimbă" + +msgid "Deletion" +msgstr "Ștergere" + +msgid "action time" +msgstr "timp acțiune" + +msgid "user" +msgstr "utilizator" + +msgid "content type" +msgstr "tip de conținut" + +msgid "object id" +msgstr "id obiect" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr obiect" + +msgid "action flag" +msgstr "marcaj acțiune" + +msgid "change message" +msgstr "schimbă mesaj" + +msgid "log entry" +msgstr "intrare jurnal" + +msgid "log entries" +msgstr "intrări jurnal" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Adăugat %(object)s" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Schimbat “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Șters “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Obiect LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Adăugat {name} “{object}”." + +msgid "Added." +msgstr "Adăugat." + +msgid "and" +msgstr "și" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} schimbat pentru {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "S-au schimbat {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Șters {name} “{object}”." + +msgid "No fields changed." +msgstr "Niciun câmp modificat." + +msgid "None" +msgstr "Nimic" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "O poți edita din nou mai jos." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Itemii trebuie selectați pentru a putea îndeplini sarcini asupra lor. Niciun " +"item nu a fost modificat." + +msgid "No action selected." +msgstr "Nicio acțiune selectată." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Adaugă %s" + +#, python-format +msgid "Change %s" +msgstr "Schimbă %s" + +#, python-format +msgid "View %s" +msgstr "Vizualizează %s" + +msgid "Database error" +msgstr "Eroare de bază de date" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s s-a modificat cu succes." +msgstr[1] "%(count)s %(name)s s-au modificat cu succes." +msgstr[2] "%(count)s de %(name)s s-au modificat cu succes." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selectat(ă)" +msgstr[1] "Toate %(total_count)s selectate" +msgstr[2] "Toate %(total_count)s selectate" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 din %(cnt)s selectat" + +#, python-format +msgid "Change history: %s" +msgstr "Istoric schimbări: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Ștergerea %(class_name)s %(instance)s ar necesita ștergerea următoarelor " +"obiecte asociate protejate: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administrare site Django" + +msgid "Django administration" +msgstr "Administrare Django" + +msgid "Site administration" +msgstr "Administrare site" + +msgid "Log in" +msgstr "Autentificare" + +#, python-format +msgid "%(app)s administration" +msgstr "administrare %(app)s" + +msgid "Page not found" +msgstr "Pagină inexistentă" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Din păcate nu am găsit pagina solicitată" + +msgid "Home" +msgstr "Acasă" + +msgid "Server error" +msgstr "Eroare de server" + +msgid "Server error (500)" +msgstr "Eroare de server (500)" + +msgid "Server Error (500)" +msgstr "Eroare server (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Pornește acțiunea selectată" + +msgid "Go" +msgstr "Start" + +msgid "Click here to select the objects across all pages" +msgstr "Clic aici pentru a selecta obiectele la nivelul tuturor paginilor" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Selectați toate %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Deselectați" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele în aplicația %(name)s" + +msgid "Add" +msgstr "Adaugă" + +msgid "View" +msgstr "Vizualizează" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Introduceți un nume de utilizator și o parolă." + +msgid "Change password" +msgstr "Schimbă parola" + +msgid "Please correct the error below." +msgstr "Corectați eroarea de mai jos." + +msgid "Please correct the errors below." +msgstr "Corectați erorile de mai jos." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduceți o parolă nouă pentru utilizatorul %(username)s." + +msgid "Welcome," +msgstr "Bun venit," + +msgid "View site" +msgstr "Vizualizare site" + +msgid "Documentation" +msgstr "Documentație" + +msgid "Log out" +msgstr "Deconectează-te" + +#, python-format +msgid "Add %(name)s" +msgstr "Adaugă %(name)s" + +msgid "History" +msgstr "Istoric" + +msgid "View on site" +msgstr "Vizualizează pe site" + +msgid "Filter" +msgstr "Filtru" + +msgid "Clear all filters" +msgstr "Șterge toate filtrele" + +msgid "Remove from sorting" +msgstr "Elimină din sortare" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritate sortare: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Alternează sortarea" + +msgid "Delete" +msgstr "Șterge" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Ștergerea %(object_name)s '%(escaped_object)s' va duce și la ștergerea " +"obiectelor asociate, însă contul dumneavoastră nu are permisiunea de a " +"șterge următoarele tipuri de obiecte:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Ștergerea %(object_name)s '%(escaped_object)s' ar putea necesita și " +"ștergerea următoarelor obiecte protejate asociate:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Sigur doriți ștergerea %(object_name)s \"%(escaped_object)s\"? Următoarele " +"itemuri asociate vor fi șterse:" + +msgid "Objects" +msgstr "Obiecte" + +msgid "Yes, I’m sure" +msgstr "Da, sunt sigur" + +msgid "No, take me back" +msgstr "Nu, vreau să mă întorc" + +msgid "Delete multiple objects" +msgstr "Ștergeți obiecte multiple" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Ștergerea %(objects_name)s conform selecției ar putea duce la ștergerea " +"obiectelor asociate, însă contul dvs. de utilizator nu are permisiunea de a " +"șterge următoarele tipuri de obiecte:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Ştergerea %(objects_name)s conform selecției ar necesita și ștergerea " +"următoarelor obiecte protejate asociate:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Sigur doriţi să ștergeți %(objects_name)s conform selecției? Toate obiectele " +"următoare alături de cele asociate lor vor fi șterse:" + +msgid "Delete?" +msgstr "Elimină?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "După %(filter_title)s " + +msgid "Summary" +msgstr "Sumar" + +msgid "Recent actions" +msgstr "Acțiuni recente" + +msgid "My actions" +msgstr "Acțiunile mele" + +msgid "None available" +msgstr "Niciuna" + +msgid "Unknown content" +msgstr "Conținut necunoscut" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Sunteți autentificat ca %(username)s, dar nu sunteți autorizat să accesați " +"această pagină. Doriți să vă autentificați cu un alt cont?" + +msgid "Forgotten your password or username?" +msgstr "Ați uitat parola sau utilizatorul ?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Dată/oră" + +msgid "User" +msgstr "Utilizator" + +msgid "Action" +msgstr "Acțiune" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Arată totul" + +msgid "Save" +msgstr "Salvează" + +msgid "Popup closing…" +msgstr "Fereastra se închide..." + +msgid "Search" +msgstr "Caută" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultat" +msgstr[1] "%(counter)s rezultate" +msgstr[2] "%(counter)s de rezultate" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s în total" + +msgid "Save as new" +msgstr "Salvați ca nou" + +msgid "Save and add another" +msgstr "Salvați și mai adăugați" + +msgid "Save and continue editing" +msgstr "Salvați și continuați editarea" + +msgid "Save and view" +msgstr "Salvează și vizualizează" + +msgid "Close" +msgstr "Închide" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Modifică %(model)s selectat" + +#, python-format +msgid "Add another %(model)s" +msgstr "Adaugă alt %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Șterge %(model)s selectat" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Mulţumiri pentru timpul petrecut astăzi pe sit." + +msgid "Log in again" +msgstr "Reautentificare" + +msgid "Password change" +msgstr "Schimbare parolă" + +msgid "Your password was changed." +msgstr "Parola a fost schimbată." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vă rog introduceți parola veche, pentru securitate, apoi introduceți parola " +"nouă de doua ori pentru a verifica dacă a fost scrisă corect. " + +msgid "Change my password" +msgstr "Schimbă-mi parola" + +msgid "Password reset" +msgstr "Resetare parolă" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Parola dumneavoastră a fost stabilită. Acum puteți continua să vă " +"autentificați." + +msgid "Password reset confirmation" +msgstr "Confirmare resetare parolă" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Introduceți parola de două ori, pentru a putea verifica dacă ați scris-o " +"corect." + +msgid "New password:" +msgstr "Parolă nouă:" + +msgid "Confirm password:" +msgstr "Confirmare parolă:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link-ul de resetare a parolei a fost nevalid, probabil din cauză că acesta a " +"fost deja utilizat. Solicitați o nouă resetare a parolei." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Am trimis instrucțiuni pentru a seta parola, daca există un cont cu email-ul " +"introdus. O sa-l primiți cât de curând." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Dacă nu ați primit un email, verificați vă rog dacă ați introdus adresa cu " +"care v-ați înregistrat și verificați si folderul Spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Primiți acest email deoarece ați cerut o resetare a parolei pentru contul de " +"utilizator de la %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Mergeți la următoarea pagină și alegeți o parolă nouă:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Numele tău de utilizator, în caz că l-ai uitat:" + +msgid "Thanks for using our site!" +msgstr "Mulțumiri pentru utilizarea sitului nostru!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Echipa %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Ați uitat parola ? Introduceți adresa de email mai jos și vă vom trimite " +"instrucțiuni pentru o parolă nouă." + +msgid "Email address:" +msgstr "Adresă e-mail:" + +msgid "Reset my password" +msgstr "Resetează-mi parola" + +msgid "All dates" +msgstr "Toate datele" + +#, python-format +msgid "Select %s" +msgstr "Selectează %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selectează %s pentru schimbare" + +#, python-format +msgid "Select %s to view" +msgstr "Selecteză %s pentru a vizualiza" + +msgid "Date:" +msgstr "Dată:" + +msgid "Time:" +msgstr "Oră:" + +msgid "Lookup" +msgstr "Căutare" + +msgid "Currently:" +msgstr "În prezent:" + +msgid "Change:" +msgstr "Schimbă:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..59f694e3a8c4764e634e4683ed36109f3231dd18 GIT binary patch literal 4639 zcmbuBL2O({8OH}23U#404WX1aFg1-?)9iXTZIiOb4JL_Or`g7`mz0QJX5X9Lo%Fq# z)x3GT-Y8NlS<0bsK?JE$1c+3ETLco75JD8mF3JH3i3{R_P!1q2NF2Cv;Q!5=^{x|R z8u9FTznytA-+c3Z-^@3Eeq`VG7@lWQo^L|C?+1St_zUnO zsJ|EL?}Hyl{db}Mr@+5}pFsQH0{<0w9|ljMeLwgB_yqWQa0Z+Km%xvKX<#3u`QHE` zf?WYW3VtipzZ>{Ah=2Bdyl4sUfF$Q9AdUMe_zmz~un9f{q4Yfhseb~J+#ZO3wvHF+ z`36XOz6Fw;tKe1e8u%Tsf(AR2!F9t7V8e-8G*20k7De;xP- z@F41c4fTJA`omD-Q)r(7KMl@<*Ws&G@HN!`@nE6v%WwizVyhsgW*0(TfaHfR2$8H0 zlD=<-_A4O%+10=wfe^`Vg0!Arf}aC7!5Q#2NOB&4P~riQ<~;<`yib8N?g&WpJQp|* zQoluz?EMn>5O@}(ao+@QfD!mZ@P2$G`9B7||3dv;kmSDy;-B5Z3#MRy1WEpFkmURw zybgZ*lZE`!!^QV1cmnOmL6SQF9e5ce|NIlY0=~7MF_@X{f281nz=MI020j+}c;KPH z&tUAG580I-n2=Ra9z~f!c@l-5#|n78$mdU^kPW|x0(HC}J`B=xw18jp5&SNPI@yAr zFQJfK4^agVmgOI^9aLncqRO5DA4h??*enW1fyr16h0cY;DD+fOzJT&9$}|c+pDn=V zK=Kv&m13A4if!80^gM+^u?yEiU@4QyY{pHSA1+1O;U^ko?$g*)x;2FD<9# zRCezR)jxP=-jZFV;}0Zu_pbe7)vuTVI~O@a7FhL$3Lty2HQ94TzqKwpHoGe0_;+2& z6P3ZzZ7wDpT=DBq#c<@4%%qaHh9QcS?$FSbEA2(J%sSSQm;o193chF_k<&syK3xRL zG%RY-sU_V&q7TjP28Ls}%qqJowe9DzMj;CRPmKx_{V$D7jPPih)R5k+IqXR+8IkJ9 zeza=*Zu=;~mg8h*ntoMHo7F4#TZLof(Tg;_SpAYLK>Q_ zEZe-$t}xAnV!19R-Q6HER?Z(&Bg-tey~-qR!q8shJ0%SiRA^yKn9Nm}(fB1D+{Txz zg6sAzO|~_Rrnbgp+nR7WIeFjOj@I1w+|kzT<~F0A&B>n4T;ARIs*H8f{3=_q<|2;q z@^V~0FKvdHsq^?E0>ezL%AT>V+{ijAE`KfWWaXx*^Qo0{oTT)An5&Jy8_t@G1)M{1Ms2CViKEwQppw$Mol{nbv2WKfAr z`U1x3PA)pK+>|1%^Hq}yjV`>@b*@*Rn;Q%U6-Q!KTdvcPxkBF&k}!VGnz`Aj#&YBI zcxAOpb?T(iPHL!z%~$76uDiKjB9xw|c(a*w3tw+8m7gE?qq*ABmQU-*#5jTK{P~u0 z+j`cyHB&1|ZbedFGB(ZXT=#r6TX<%k7e5zDdSRhmEB5%_9d^mgN{(_fl2oj+p3$mB30vpb zXP34%*kU3(=tOUBcr4tg4K-tTuQ=niMG{LS<#wNZd+>loLZn8>@_mpRN4a_XvrJT~ zwAk)Y2&u3lH(O{Nk~96nxoLB@m_^tgk}dlLjrQd{@o$YcagpoOJMVa8=u(A}J_HG-3sMWYBCSs5J^< z+QlShtYBV7bx+kqM)#i`ij7RSw{B#vONjB!8%j&I7QwU>QMeYsqG1h?8#W=`IIQqi z9xYy_jyeoz z<*jQ@(bd4f>*fk#>R8#zp@G2lL1D*_7A>GyU%vki!fU)( zTr~=1M)TghYhGU5B~$_pP6;xJT$iw!AW>tR9+?!2<%|XQarJ7$S_(Hmgja=~XJ^?O LJH^hh2LAp7A@e7o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..e681dde5b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po @@ -0,0 +1,228 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2018-2019 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2011 +# Eugenol Man , 2020 +# Ionel Cristian Mărieș , 2012 +# Jannis Leidel , 2011 +# razvan ionescu , 2015 +# Razvan Stefanescu , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-07-15 11:16+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibil" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Aceasta este o listă cu %s disponibile. Le puteți alege selectând mai multe " +"in chenarul de mai jos și apăsând pe săgeata \"Alege\" dintre cele două " +"chenare." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Scrie în acest chenar pentru a filtra lista de %s disponibile." + +msgid "Filter" +msgstr "Filtru" + +msgid "Choose all" +msgstr "Alege toate" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click pentru a alege toate %s." + +msgid "Choose" +msgstr "Alege" + +msgid "Remove" +msgstr "Elimină" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s alese" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Aceasta este lista de %s alese. Puteți elimina din ele selectându-le in " +"chenarul de mai jos și apasand pe săgeata \"Elimină\" dintre cele două " +"chenare." + +msgid "Remove all" +msgstr "Elimină toate" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click pentru a elimina toate %s alese." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s din %(cnt)s selectate" +msgstr[1] "%(sel)s din %(cnt)s selectate" +msgstr[2] "de %(sel)s din %(cnt)s selectate" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Aveţi modificări nesalvate în cîmpuri individuale editabile. Dacă executaţi " +"o acțiune, modificările nesalvate vor fi pierdute." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Ai selectat o acțiune dar nu ai salvat modificările făcute în câmpuri " +"individuale. Te rugăm apasa Ok pentru a salva. Va trebui sa reiei acțiunea." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ai selectat o acțiune și nu ai făcut modificări. Probabil că dorești butonul " +"de Go mai putin cel de Salvează." + +msgid "Now" +msgstr "Acum" + +msgid "Midnight" +msgstr "Miezul nopții" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Amiază" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Notă: Sunteți cu %s oră înaintea orei serverului." +msgstr[1] "Notă: Sunteți cu %s ore înaintea orei serverului." +msgstr[2] "Notă: Sunteți cu %s de ore înaintea orei serverului." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Notă: Sunteți cu %s oră în urma orei serverului." +msgstr[1] "Notă: Sunteți cu %s ore în urma orei serverului." +msgstr[2] "Notă: Sunteți cu %s de ore în urma orei serverului." + +msgid "Choose a Time" +msgstr "Alege o oră" + +msgid "Choose a time" +msgstr "Alege o oră" + +msgid "Cancel" +msgstr "Anulează" + +msgid "Today" +msgstr "Astăzi" + +msgid "Choose a Date" +msgstr "Alege o dată" + +msgid "Yesterday" +msgstr "Ieri" + +msgid "Tomorrow" +msgstr "Mâine" + +msgid "January" +msgstr "Ianuarie" + +msgid "February" +msgstr "Februarie" + +msgid "March" +msgstr "Martie" + +msgid "April" +msgstr "Aprilie" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Iunie" + +msgid "July" +msgstr "Iulie" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "Septembrie" + +msgid "October" +msgstr "Octombrie" + +msgid "November" +msgstr "Noiembrie" + +msgid "December" +msgstr "Decembrie" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Arată" + +msgid "Hide" +msgstr "Ascunde" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72c8ce616afc6126a6e53a98939a03fc470709c4 GIT binary patch literal 22080 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..f9e671dcf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,738 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ivan Ivaschenko , 2013 +# Denis Darii , 2011 +# Dimmus , 2011 +# Eugene , 2016-2017 +# crazyzubr , 2020 +# Sergey , 2016 +# Jannis Leidel , 2011 +# SeryiMysh , 2020 +# Алексей Борискин , 2012-2015 +# Дмитрий , 2019 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-21 09:32+0000\n" +"Last-Translator: crazyzubr \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно удалены %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не удается удалить %(name)s" + +msgid "Are you sure?" +msgstr "Вы уверены?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Удалить выбранные %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Администрирование" + +msgid "All" +msgstr "Все" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Нет" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Any date" +msgstr "Любая дата" + +msgid "Today" +msgstr "Сегодня" + +msgid "Past 7 days" +msgstr "Последние 7 дней" + +msgid "This month" +msgstr "Этот месяц" + +msgid "This year" +msgstr "Этот год" + +msgid "No date" +msgstr "Дата не указана" + +msgid "Has date" +msgstr "Дата указана" + +msgid "Empty" +msgstr "Пусто" + +msgid "Not empty" +msgstr "Не пусто" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Пожалуйста, введите корректные %(username)s и пароль учётной записи. Оба " +"поля могут быть чувствительны к регистру." + +msgid "Action:" +msgstr "Действие:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Добавить еще один %(verbose_name)s" + +msgid "Remove" +msgstr "Удалить" + +msgid "Addition" +msgstr "Добавление" + +msgid "Change" +msgstr "Изменить" + +msgid "Deletion" +msgstr "Удаление" + +msgid "action time" +msgstr "время действия" + +msgid "user" +msgstr "пользователь" + +msgid "content type" +msgstr "тип содержимого" + +msgid "object id" +msgstr "идентификатор объекта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "представление объекта" + +msgid "action flag" +msgstr "тип действия" + +msgid "change message" +msgstr "сообщение об изменении" + +msgid "log entry" +msgstr "запись в журнале" + +msgid "log entries" +msgstr "записи в журнале" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Добавлено “%(object)s“." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Изменено “%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Удалено “%(object)s.“" + +msgid "LogEntry Object" +msgstr "Запись в журнале" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Добавлен {name} “{object}“." + +msgid "Added." +msgstr "Добавлено." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Изменено {fields} у {name} “{object}“." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Изменено {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Удален {name} “{object}“." + +msgid "No fields changed." +msgstr "Ни одно поле не изменено." + +msgid "None" +msgstr "Нет" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Удерживайте “Control“ (или “Command“ на Mac), чтобы выбрать несколько " +"значений." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} \"{obj}\" был успешно добавлен." + +msgid "You may edit it again below." +msgstr "Вы можете снова изменить этот объект ниже." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}“ был успешно добавлен. Вы можете добавить еще один {name} ниже." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}“ был изменен успешно. Вы можете отредактировать его снова ниже." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} “{obj}“ был успешно добавлен. Вы можете отредактировать его еще раз " +"ниже." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} “{obj}“ был изменен. Вы можете добавить еще один {name} ниже." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}“ был успешно изменен." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Чтобы произвести действия над объектами, необходимо их выбрать. Объекты не " +"были изменены." + +msgid "No action selected." +msgstr "Действие не выбрано." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s“ был успешно удален." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s с ID “%(key)s“ не существует. Возможно оно было удалено?" + +#, python-format +msgid "Add %s" +msgstr "Добавить %s" + +#, python-format +msgid "Change %s" +msgstr "Изменить %s" + +#, python-format +msgid "View %s" +msgstr "Просмотреть %s" + +msgid "Database error" +msgstr "Ошибка базы данных" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s был успешно изменен." +msgstr[1] "%(count)s %(name)s были успешно изменены." +msgstr[2] "%(count)s %(name)s были успешно изменены." +msgstr[3] "%(count)s %(name)s были успешно изменены." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Выбран %(total_count)s" +msgstr[1] "Выбраны все %(total_count)s" +msgstr[2] "Выбраны все %(total_count)s" +msgstr[3] "Выбраны все %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Выбрано 0 объектов из %(cnt)s " + +#, python-format +msgid "Change history: %s" +msgstr "История изменений: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Удаление объекта %(instance)s типа %(class_name)s будет требовать удаления " +"следующих связанных объектов: %(related_objects)s" + +msgid "Django site admin" +msgstr "Административный сайт Django" + +msgid "Django administration" +msgstr "Администрирование Django" + +msgid "Site administration" +msgstr "Администрирование сайта" + +msgid "Log in" +msgstr "Войти" + +#, python-format +msgid "%(app)s administration" +msgstr "Администрирование приложения «%(app)s»" + +msgid "Page not found" +msgstr "Страница не найдена" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "К сожалению, запрашиваемая вами страница не найдена." + +msgid "Home" +msgstr "Начало" + +msgid "Server error" +msgstr "Ошибка сервера" + +msgid "Server error (500)" +msgstr "Ошибка сервера (500)" + +msgid "Server Error (500)" +msgstr "Ошибка сервера (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Произошла ошибка. О ней сообщено администраторам сайта по электронной почте, " +"ошибка должна быть вскоре исправлена. Благодарим вас за терпение." + +msgid "Run the selected action" +msgstr "Выполнить выбранное действие" + +msgid "Go" +msgstr "Выполнить" + +msgid "Click here to select the objects across all pages" +msgstr "Нажмите здесь, чтобы выбрать объекты на всех страницах" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Выбрать все %(module_name)s (%(total_count)s)" + +msgid "Clear selection" +msgstr "Снять выделение" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Модели в приложении %(name)s" + +msgid "Add" +msgstr "Добавить" + +msgid "View" +msgstr "Просмотреть" + +msgid "You don’t have permission to view or edit anything." +msgstr "У вас недостаточно полномочий для просмотра или изменения чего либо." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Сначала введите имя пользователя и пароль. Затем вы сможете ввести больше " +"информации о пользователе." + +msgid "Enter a username and password." +msgstr "Введите имя пользователя и пароль." + +msgid "Change password" +msgstr "Изменить пароль" + +msgid "Please correct the error below." +msgstr "Пожалуйста, исправьте ошибку ниже." + +msgid "Please correct the errors below." +msgstr "Пожалуйста, исправьте ошибки ниже." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Введите новый пароль для пользователя %(username)s." + +msgid "Welcome," +msgstr "Добро пожаловать," + +msgid "View site" +msgstr "Открыть сайт" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Выйти" + +#, python-format +msgid "Add %(name)s" +msgstr "Добавить %(name)s" + +msgid "History" +msgstr "История" + +msgid "View on site" +msgstr "Смотреть на сайте" + +msgid "Filter" +msgstr "Фильтр" + +msgid "Clear all filters" +msgstr "Сбросить все фильтры" + +msgid "Remove from sorting" +msgstr "Удалить из сортировки" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Приоритет сортировки: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Сортировать в другом направлении" + +msgid "Delete" +msgstr "Удалить" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Удаление %(object_name)s '%(escaped_object)s' приведет к удалению связанных " +"объектов, но ваша учетная запись не имеет прав для удаления следующих типов " +"объектов:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Удаление %(object_name)s '%(escaped_object)s' потребует удаления следующих " +"связанных защищенных объектов:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Вы уверены, что хотите удалить %(object_name)s \"%(escaped_object)s\"? Все " +"следующие связанные объекты также будут удалены:" + +msgid "Objects" +msgstr "Объекты" + +msgid "Yes, I’m sure" +msgstr "Да, я уверен" + +msgid "No, take me back" +msgstr "Нет, отменить и вернуться к выбору" + +msgid "Delete multiple objects" +msgstr "Удалить несколько объектов" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Удаление выбранной %(objects_name)s приведет к удалению связанных объектов, " +"но ваша учетная запись не имеет прав на удаление следующих типов объектов:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Удаление %(objects_name)s потребует удаления следующих связанных защищенных " +"объектов:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Вы уверены, что хотите удалить %(objects_name)s? Все следующие объекты и " +"связанные с ними элементы будут удалены:" + +msgid "Delete?" +msgstr "Удалить?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s" + +msgid "Summary" +msgstr "Краткая статистика" + +msgid "Recent actions" +msgstr "Последние действия" + +msgid "My actions" +msgstr "Мои действия" + +msgid "None available" +msgstr "Недоступно" + +msgid "Unknown content" +msgstr "Неизвестный тип" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ваша база данных неправильно настроена. Убедитесь, что соответствующие " +"таблицы были созданы, и что соответствующему пользователю разрешен к ним " +"доступ." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Вы вошли в систему как %(username)s, однако у вас недостаточно прав для " +"просмотра данной страницы. Возможно, вы хотели бы войти в систему, используя " +"другую учётную запись?" + +msgid "Forgotten your password or username?" +msgstr "Забыли свой пароль или имя пользователя?" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "Date/time" +msgstr "Дата и время" + +msgid "User" +msgstr "Пользователь" + +msgid "Action" +msgstr "Действие" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Данный объект не имеет истории изменений. Возможно, он был добавлен не через " +"данный административный сайт." + +msgid "Show all" +msgstr "Показать все" + +msgid "Save" +msgstr "Сохранить" + +msgid "Popup closing…" +msgstr "Всплывающее окно закрывается..." + +msgid "Search" +msgstr "Найти" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s результат" +msgstr[1] "%(counter)s результата" +msgstr[2] "%(counter)s результатов" +msgstr[3] "%(counter)s результатов" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s всего" + +msgid "Save as new" +msgstr "Сохранить как новый объект" + +msgid "Save and add another" +msgstr "Сохранить и добавить другой объект" + +msgid "Save and continue editing" +msgstr "Сохранить и продолжить редактирование" + +msgid "Save and view" +msgstr "Сохранить и просмотреть" + +msgid "Close" +msgstr "Закрыть" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Изменить выбранный объект типа \"%(model)s\"" + +#, python-format +msgid "Add another %(model)s" +msgstr "Добавить ещё один объект типа \"%(model)s\"" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Удалить выбранный объект типа \"%(model)s\"" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Благодарим вас за время, проведенное на этом сайте." + +msgid "Log in again" +msgstr "Войти снова" + +msgid "Password change" +msgstr "Изменение пароля" + +msgid "Your password was changed." +msgstr "Ваш пароль был изменен." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"В целях безопасности, пожалуйста, введите свой старый пароль, затем введите " +"новый пароль дважды, чтобы мы могли убедиться в правильности написания." + +msgid "Change my password" +msgstr "Изменить мой пароль" + +msgid "Password reset" +msgstr "Восстановление пароля" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ваш пароль был сохранен. Теперь вы можете войти." + +msgid "Password reset confirmation" +msgstr "Подтверждение восстановления пароля" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Пожалуйста, введите новый пароль дважды, чтобы мы могли убедиться в " +"правильности написания." + +msgid "New password:" +msgstr "Новый пароль:" + +msgid "Confirm password:" +msgstr "Подтвердите пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Неверная ссылка для восстановления пароля. Возможно, ей уже воспользовались. " +"Пожалуйста, попробуйте восстановить пароль еще раз." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Мы отправили вам инструкцию по установке нового пароля на указанный адрес " +"электронной почты (если в нашей базе данных есть такой адрес). Вы должны " +"получить ее в ближайшее время." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Если вы не получили письмо, пожалуйста, убедитесь, что вы ввели адрес с " +"которым Вы зарегистрировались, и проверьте папку со спамом." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Вы получили это письмо, потому что вы (или кто-то другой) запросили " +"восстановление пароля от учётной записи на сайте %(site_name)s, которая " +"связана с этим адресом электронной почты." + +msgid "Please go to the following page and choose a new password:" +msgstr "Пожалуйста, перейдите на эту страницу и введите новый пароль:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Ваше имя пользователя (на случай, если вы его забыли):" + +msgid "Thanks for using our site!" +msgstr "Спасибо, что используете наш сайт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Команда сайта %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Забыли пароль? Введите свой адрес электронной почты ниже, и мы вышлем вам " +"инструкцию, как установить новый пароль." + +msgid "Email address:" +msgstr "Адрес электронной почты:" + +msgid "Reset my password" +msgstr "Восстановить мой пароль" + +msgid "All dates" +msgstr "Все даты" + +#, python-format +msgid "Select %s" +msgstr "Выберите %s" + +#, python-format +msgid "Select %s to change" +msgstr "Выберите %s для изменения" + +#, python-format +msgid "Select %s to view" +msgstr "Выберите %s для просмотра" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Время:" + +msgid "Lookup" +msgstr "Поиск" + +msgid "Currently:" +msgstr "Сейчас:" + +msgid "Change:" +msgstr "Изменить:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe63491eb9231a3dd4807e0e1291d1806215ef43 GIT binary patch literal 7149 zcmdUydyHIF9mlUYDlUo&iYTCmN^2{f*#~WbX{UgNMZj&Fb`degc4ww5 zmQ+H#nRCDQob&tr&hK@8=gg}Y62v-7jym+8-e{oq9ik@>qpp^rh4yMq@b&IBlW z?gK^71E8#b2z(ek3_b*|Lx`;V3sB^}#A`kHYf$(uNB?DTBY5$LGyXd)4uP^>-Qq5blc4zfkj1AhJ_}0xj)J1cyu}y6 z*Rboi;NQUc3o^M!Fka;U7!>-KEWQGYo__^lan7M5cp>;_@CxvE;Q2UB_+AG^&OgCD z;CTdzP&yBS6Rh_bI0RlQP62llG|_Vp&Jo;i@qoogEk0@S8H>+aoUwS);!iF9(qam- zrJa{8{>I{~7GJaY2aA8S_!kiM%(Kd(fY`Ro_PasZ3zCPI(>_ZR->jisMk~-hLzDe4 zF-4@4r-?u0`3OziAkP)FB5fs2{4EbDyYO6Zzt}eBxzeKKsZt`56fzt^}Em%!k zL6iLKqRIZ08YhqJJ@YJI8R_b(NCiV``N}~*=92+E80)h0W^?P5Tc{PBb!tT5hLO;# zIycmZ>rw37FzR|$cc7}(^2pib`h&XaY^nr7q%9~{-RQR=N0Rsx-+ONHxy%4C8&qW zt!TF_{)}`uszW8_6qcq%^)n|{1G?h*u5cXHRNb!p+T2;LWPY)@#DZm9|f6X0l#3Tx8S`CcbEb{zeVXZ08HzEdt9oSI~ z#*~XG%=l_hf@bN|vMf=S;n5JH0UeKNXk_(xEKsoPsIa6`3vpi5$Y#M=YLvO?ziAYd zNss=Z7Kq+X|M-Z;WHL1t|B2On51A}e`0uZ+`-rj z{ME*PiM!j;~t+KkVmLuaG$Vu3dFc@H)j;m@A zm;ej~WGkM&8AsRS81~SmFM}*BGuuU*Y_9O;>OrJh)r;UQ%UHOeAU-)wK{c-9g4$Zu zZltr^P+M*j?+JfHd-lDrk;ZVS^I<*HE^|$jVs$@TbZLj^vKN~&)$q(MLq=s0*W_rU zal5234;2R35d*zD^tVHN)-Hrn=>Lw~Yp?9$>G+}>#rgiw^`ojA2Vqfdb$vGqhGJ&?;krAl z^ZnYb71g$S6nW&`%1RuM6gxY|#>NV<@OeXeM`19ib!G}RplaDW!+Phcj=o#^Zdz2m zyU^9KiDcA1Yg3DgD%LyV&XKC?`Rir-g^`X+xA*tvuUVv%wT5(uhI z#9+Vh*boN^p8f-b)JE?qGazN|Yd z9|)LmlEcYyi1v##CwUGdrZLcP9ZVm{=;dQhrVp7Z!of#!%t^k3O($TP$3CXB?hy%y zbPq5yix0>;aHgmjnM&`KSe$@S^g|0_m!X9qDEg;N;AU{)6kofVXT|H7B6)*B3ic^u z{yt>y#B=Y!s>#$lwC;Q|{eQYL>Be>@WDiMn=bJ)ow(~5z;q40Z*)4sRu|CVi&oLUXzW|a+r7>qk^;fsK?ZjU5j&1HJ2(UY3a(AHuX~k%r$dK6_MI-6q%+d{XlA` zB*ZC--cFgd%;{dK>MaKYL(943OZ8Wjo_Q(=^&_hQCvZF@zK1VuBUk__bp%rZ`; zdreB3v=gD^c4i{y*6D$^*O(*4CYq>2g82}8#2MVcdCHbC_I?-g=k^xC4#oa;;v4kkQx5@ryO#CSp zn_CgP-ncZK%!wlYVul~Wh$lI6LtySnX37`R7c526Hc3klcFvTF#kI2{|))4K?c|>v%L`G lBe@D^FlVp93zuMX9NM!_uG2V-tFZYUCW)Qo8S_5u{2O5GOeO#T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..478d770bb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po @@ -0,0 +1,287 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2020 +# Denis Darii , 2011 +# Dimmus , 2011 +# Eugene , 2012 +# Eugene , 2016 +# crazyzubr , 2020 +# Jannis Leidel , 2011 +# Panasoft, 2021 +# Алексей Борискин , 2012,2014-2015 +# Андрей Щуров , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-16 22:55+0000\n" +"Last-Translator: Panasoft\n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Доступные %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Это список всех доступных %s. Вы можете выбрать некоторые из них, выделив их " +"в поле ниже и кликнув \"Выбрать\", либо двойным щелчком." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Начните вводить текст в этом поле, чтобы отфитровать список доступных %s." + +msgid "Filter" +msgstr "Фильтр" + +msgid "Choose all" +msgstr "Выбрать все" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Нажмите, чтобы выбрать все %s сразу." + +msgid "Choose" +msgstr "Выбрать" + +msgid "Remove" +msgstr "Удалить" + +#, javascript-format +msgid "Chosen %s" +msgstr "Выбранные %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Это список выбранных %s. Вы можете удалить некоторые из них, выделив их в " +"поле ниже и кликнув \"Удалить\", либо двойным щелчком." + +msgid "Remove all" +msgstr "Удалить все" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Нажмите чтобы удалить все %s сразу." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Выбран %(sel)s из %(cnt)s" +msgstr[1] "Выбрано %(sel)s из %(cnt)s" +msgstr[2] "Выбрано %(sel)s из %(cnt)s" +msgstr[3] "Выбрано %(sel)s из %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Имеются несохраненные изменения в отдельных полях для редактирования. Если " +"вы запустите действие, несохраненные изменения будут потеряны." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Вы выбрали действие, но еще не сохранили изменения, внесенные в некоторых " +"полях для редактирования. Нажмите OK, чтобы сохранить изменения. После " +"сохранения вам придется запустить действие еще раз." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Вы выбрали действие и не внесли изменений в данные. Возможно, вы хотели " +"воспользоваться кнопкой \"Выполнить\", а не кнопкой \"Сохранить\". Если это " +"так, то нажмите \"Отмена\", чтобы вернуться в интерфейс редактирования." + +msgid "Now" +msgstr "Сейчас" + +msgid "Midnight" +msgstr "Полночь" + +msgid "6 a.m." +msgstr "6 утра" + +msgid "Noon" +msgstr "Полдень" + +msgid "6 p.m." +msgstr "6 вечера" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Внимание: Ваше локальное время опережает время сервера на %s час." +msgstr[1] "Внимание: Ваше локальное время опережает время сервера на %s часа." +msgstr[2] "Внимание: Ваше локальное время опережает время сервера на %s часов." +msgstr[3] "Внимание: Ваше локальное время опережает время сервера на %s часов." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Внимание: Ваше локальное время отстаёт от времени сервера на %s час." +msgstr[1] "" +"Внимание: Ваше локальное время отстаёт от времени сервера на %s часа." +msgstr[2] "" +"Внимание: Ваше локальное время отстаёт от времени сервера на %s часов." +msgstr[3] "" +"Внимание: Ваше локальное время отстаёт от времени сервера на %s часов." + +msgid "Choose a Time" +msgstr "Выберите время" + +msgid "Choose a time" +msgstr "Выберите время" + +msgid "Cancel" +msgstr "Отмена" + +msgid "Today" +msgstr "Сегодня" + +msgid "Choose a Date" +msgstr "Выберите дату" + +msgid "Yesterday" +msgstr "Вчера" + +msgid "Tomorrow" +msgstr "Завтра" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Янв" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Фев" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Мар" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Апр" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Июн" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Июл" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Авг" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Сен" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Окт" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Ноя" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Дек" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "В" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Показать" + +msgid "Hide" +msgstr "Скрыть" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2d9fe827956536f30121c3070afe78bb12fcc27b GIT binary patch literal 17090 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e405930b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,740 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2013 +# Marian Andre , 2013-2015,2017 +# Martin Kosír, 2011 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +# Peter Stríž , 2020 +# Zbynek Drlik , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 07:21+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Zmazať označené %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Úspešne zmazaných %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nedá sa vymazať %(name)s" + +msgid "Are you sure?" +msgstr "Ste si istý?" + +msgid "Administration" +msgstr "Správa" + +msgid "All" +msgstr "Všetko" + +msgid "Yes" +msgstr "Áno" + +msgid "No" +msgstr "Nie" + +msgid "Unknown" +msgstr "Neznámy" + +msgid "Any date" +msgstr "Ľubovoľný dátum" + +msgid "Today" +msgstr "Dnes" + +msgid "Past 7 days" +msgstr "Posledných 7 dní" + +msgid "This month" +msgstr "Tento mesiac" + +msgid "This year" +msgstr "Tento rok" + +msgid "No date" +msgstr "Bez dátumu" + +msgid "Has date" +msgstr "S dátumom" + +msgid "Empty" +msgstr "Prázdny" + +msgid "Not empty" +msgstr "Obsadený" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Zadajte prosím správne %(username)s a heslo pre účet personálu - \"staff " +"account\". Obe polia môžu obsahovať veľké a malé písmená." + +msgid "Action:" +msgstr "Akcia:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Pridať ďalší %(verbose_name)s" + +msgid "Remove" +msgstr "Odstrániť" + +msgid "Addition" +msgstr "Pridávanie" + +msgid "Change" +msgstr "Zmeniť" + +msgid "Deletion" +msgstr "Mazanie" + +msgid "action time" +msgstr "čas akcie" + +msgid "user" +msgstr "používateľ" + +msgid "content type" +msgstr "typ obsahu" + +msgid "object id" +msgstr "identifikátor objektu" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "reprezentácia objektu" + +msgid "action flag" +msgstr "príznak akcie" + +msgid "change message" +msgstr "zmeniť správu" + +msgid "log entry" +msgstr "položka záznamu" + +msgid "log entries" +msgstr "položky záznamu" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Pridané \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Zmenené \"%(object)s\" - %(changes)s " + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Zmazaný %(object)s" + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Pridaný {name} \"{object}\"." + +msgid "Added." +msgstr "Pridaný." + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Zmenený {fields} pre {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Zmenené {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Zmazaný {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Polia nezmenené." + +msgid "None" +msgstr "Žiadne" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Ak chcete vybrať viac ako jednu položku na Mac, podržte \"Control\", alebo " +"\"Command\"" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Objekt {name} \"{obj}\" bol úspešne pridaný." + +msgid "You may edit it again below." +msgstr "Nižšie môžete začať znovu editovať " + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Objekt {name} \"{obj}\" bol úspešne pridaný. Môžete pridať ďaľší {name} " +"nižšie." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Objekt {name} \"{obj}\" bol úspešne zmenený. Ďalšie zmeny môžete urobiť " +"nižšie." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Objekt {name} \"{obj}\" bol úspešne pridaný. Ďalšie zmeny môžete urobiť " +"nižšie." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Objekt {name} \"{obj}\" bol úspešne zmenený. Môžete pridať ďaľší {name} " +"nižšie." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Objekt {name} \"{obj}\" bol úspešne zmenený." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Položky musia byť vybrané, ak chcete na nich vykonať akcie. Neboli vybrané " +"žiadne položky." + +msgid "No action selected." +msgstr "Nebola vybraná žiadna akcia." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne vymazaný." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "Objekt %(name)s s ID \"%(key)s\" neexistuje. Možno bol vymazaný?" + +#, python-format +msgid "Add %s" +msgstr "Pridať %s" + +#, python-format +msgid "Change %s" +msgstr "Zmeniť %s" + +#, python-format +msgid "View %s" +msgstr "Zobraziť%s" + +msgid "Database error" +msgstr "Chyba databázy" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s bola úspešne zmenená." +msgstr[1] "%(count)s %(name)s boli úspešne zmenené." +msgstr[2] "%(count)s %(name)s bolo úspešne zmenených." +msgstr[3] "%(count)s %(name)s bolo úspešne zmenených." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s vybraná" +msgstr[1] "Všetky %(total_count)s vybrané" +msgstr[2] "Všetkých %(total_count)s vybraných" +msgstr[3] "Všetkých %(total_count)s vybraných" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 z %(cnt)s vybraných" + +#, python-format +msgid "Change history: %s" +msgstr "Zoznam zmien: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Vymazanie %(class_name)s %(instance)s vyžaduje vymazanie nasledovných " +"súvisiacich chránených objektov: %(related_objects)s" + +msgid "Django site admin" +msgstr "Správa Django stránky" + +msgid "Django administration" +msgstr "Správa Django" + +msgid "Site administration" +msgstr "Správa stránky" + +msgid "Log in" +msgstr "Prihlásenie" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s správa" + +msgid "Page not found" +msgstr "Stránka nenájdená" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená." + +msgid "Home" +msgstr "Domov" + +msgid "Server error" +msgstr "Chyba servera" + +msgid "Server error (500)" +msgstr "Chyba servera (500)" + +msgid "Server Error (500)" +msgstr "Chyba servera (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Došlo k chybe. Chyba bola nahlásená správcovi webu prostredníctvom e-mailu a " +"zanedlho by mala byť odstránená. Ďakujeme za vašu trpezlivosť." + +msgid "Run the selected action" +msgstr "Vykonať vybranú akciu" + +msgid "Go" +msgstr "Vykonať" + +msgid "Click here to select the objects across all pages" +msgstr "Kliknite sem pre výber objektov na všetkých stránkach" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Vybrať všetkých %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Zrušiť výber" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modely v %(name)s aplikácii" + +msgid "Add" +msgstr "Pridať" + +msgid "View" +msgstr "Zobraziť" + +msgid "You don’t have permission to view or edit anything." +msgstr "Nemáte právo na zobrazenie alebo vykonávanie zmien." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Najskôr zadajte používateľské meno a heslo. Potom budete môcť upraviť viac " +"používateľských nastavení." + +msgid "Enter a username and password." +msgstr "Zadajte používateľské meno a heslo." + +msgid "Change password" +msgstr "Zmeniť heslo" + +msgid "Please correct the error below." +msgstr "Prosím, opravte chybu uvedenú nižšie." + +msgid "Please correct the errors below." +msgstr "Prosím, opravte chyby uvedené nižšie." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Zadajte nové heslo pre používateľa %(username)s." + +msgid "Welcome," +msgstr "Vitajte," + +msgid "View site" +msgstr "Pozrieť stránku" + +msgid "Documentation" +msgstr "Dokumentácia" + +msgid "Log out" +msgstr "Odhlásiť" + +#, python-format +msgid "Add %(name)s" +msgstr "Pridať %(name)s" + +msgid "History" +msgstr "Zmeny" + +msgid "View on site" +msgstr "Pozrieť na stránke" + +msgid "Filter" +msgstr "Filtrovať" + +msgid "Clear all filters" +msgstr "Zrušiť všetky filtre" + +msgid "Remove from sorting" +msgstr "Odstrániť z triedenia" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Triedenie priority: %(priority_number)s " + +msgid "Toggle sorting" +msgstr "Prepnúť triedenie" + +msgid "Delete" +msgstr "Odstrániť" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Odstránenie objektu %(object_name)s '%(escaped_object)s' by malo za následok " +"aj odstránenie súvisiacich objektov. Váš účet však nemá oprávnenie na " +"odstránenie nasledujúcich typov objektov:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Vymazanie %(object_name)s '%(escaped_object)s' vyžaduje vymazanie " +"nasledovných súvisiacich chránených objektov:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ste si istý, že chcete odstrániť objekt %(object_name)s \"%(escaped_object)s" +"\"? Všetky nasledujúce súvisiace objekty budú odstránené:" + +msgid "Objects" +msgstr "Objekty" + +msgid "Yes, I’m sure" +msgstr "Áno, som si istý" + +msgid "No, take me back" +msgstr "Nie, chcem sa vrátiť" + +msgid "Delete multiple objects" +msgstr "Zmazať viacero objektov" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Vymazanie označených %(objects_name)s by spôsobilo vymazanie súvisiacich " +"objektov, ale váš účet nemá oprávnenie na vymazanie nasledujúcich typov " +"objektov:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Vymazanie označených %(objects_name)s vyžaduje vymazanie nasledujúcich " +"chránených súvisiacich objektov:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ste si isty, že chcete vymazať označené %(objects_name)s? Vymažú sa všetky " +"nasledujúce objekty a ich súvisiace položky:" + +msgid "Delete?" +msgstr "Zmazať?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Podľa %(filter_title)s " + +msgid "Summary" +msgstr "Súhrn" + +msgid "Recent actions" +msgstr "Posledné akcie" + +msgid "My actions" +msgstr "Moje akcie" + +msgid "None available" +msgstr "Nedostupné" + +msgid "Unknown content" +msgstr "Neznámy obsah" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Niečo nie je v poriadku s vašou inštaláciou databázy. Zabezpečte, aby boli " +"vytvorené potrebné databázové tabuľky a taktiež zabezpečte, aby príslušný " +"používateľ mohol čítať databázu." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Ste prihlásený ako %(username)s, ale nemáte práva k tejto stránke. Chcete sa " +"prihlásiť do iného účtu?" + +msgid "Forgotten your password or username?" +msgstr "Zabudli ste heslo alebo používateľské meno?" + +msgid "Toggle navigation" +msgstr "Zameniť navigáciu" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Dátum a čas" + +msgid "User" +msgstr "Používateľ" + +msgid "Action" +msgstr "Akcia" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Tento objekt nemá zoznam zmien. Pravdepodobne nebol pridaný prostredníctvom " +"tejto správcovskej stránky." + +msgid "Show all" +msgstr "Zobraziť všetky" + +msgid "Save" +msgstr "Uložiť" + +msgid "Popup closing…" +msgstr "Vyskakovacie okno sa zatvára..." + +msgid "Search" +msgstr "Vyhľadávanie" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s výsledok" +msgstr[1] "%(counter)s výsledky" +msgstr[2] "%(counter)s výsledkov" +msgstr[3] "%(counter)s výsledkov" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s spolu" + +msgid "Save as new" +msgstr "Uložiť ako nový" + +msgid "Save and add another" +msgstr "Uložiť a pridať ďalší" + +msgid "Save and continue editing" +msgstr "Uložiť a pokračovať v úpravách" + +msgid "Save and view" +msgstr "Uložiť a zobraziť" + +msgid "Close" +msgstr "Zatvoriť" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Zmeniť vybrané %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Pridať ďalší %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Zmazať vybrané %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Znova sa prihlásiť" + +msgid "Password change" +msgstr "Zmena hesla" + +msgid "Your password was changed." +msgstr "Vaše heslo bolo zmenené." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Z bezpečnostných dôvodov zadajte staré heslo a potom nové heslo dvakrát, aby " +"sme mohli overiť, že ste ho zadali správne." + +msgid "Change my password" +msgstr "Zmeniť moje heslo" + +msgid "Password reset" +msgstr "Obnovenie hesla" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaše heslo bolo nastavené. Môžete pokračovať a prihlásiť sa." + +msgid "Password reset confirmation" +msgstr "Potvrdenie obnovenia hesla" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Zadajte nové heslo dvakrát, aby sme mohli overiť, že ste ho zadali správne." + +msgid "New password:" +msgstr "Nové heslo:" + +msgid "Confirm password:" +msgstr "Potvrdenie hesla:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Odkaz na obnovenie hesla je neplatný, pretože už bol pravdepodobne raz " +"použitý. Prosím, požiadajte znovu o obnovu hesla." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Poslali sme vám e-mailom inštrukcie pre nastavenie hesla, ak existuje konto " +"so zadanou emailovou adresou. Čoskoro by ste ich mali dostať." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ak vám nepríde e-mail, uistite sa, že ste zadali adresu, s ktorou ste sa " +"registrovali a skontrolujte svoj spamový priečinok." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Tento e-mail ste dostali preto, lebo ste požiadali o obnovenie hesla pre " +"užívateľský účet na %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Prosím, choďte na túto stránku a zvoľte si nové heslo:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Ak ste náhodou zabudli, vaše používateľské meno je:" + +msgid "Thanks for using our site!" +msgstr "Ďakujeme, že používate našu stránku!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tím %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Zabudli ste heslo? Zadajte vašu e-mailovú adresu nižšie a my vám pošleme " +"inštrukcie pre nastavenie nového hesla." + +msgid "Email address:" +msgstr "E-mailová adresa:" + +msgid "Reset my password" +msgstr "Obnova môjho hesla" + +msgid "All dates" +msgstr "Všetky dátumy" + +#, python-format +msgid "Select %s" +msgstr "Vybrať %s" + +#, python-format +msgid "Select %s to change" +msgstr "Vybrať \"%s\" na úpravu" + +#, python-format +msgid "Select %s to view" +msgstr "Pre zobrazenie %s zvolte" + +msgid "Date:" +msgstr "Dátum:" + +msgid "Time:" +msgstr "Čas:" + +msgid "Lookup" +msgstr "Vyhľadanie" + +msgid "Currently:" +msgstr "Aktuálne:" + +msgid "Change:" +msgstr "Zmeniť:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9880b3a7cd984a61f20e7ab77789a32d40e75246 GIT binary patch literal 5291 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..866afea56 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dimitris Glezos , 2012 +# Jannis Leidel , 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012 +# Marian Andre , 2012,2015 +# Martin Kosír, 2011 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-24 21:14+0000\n" +"Last-Translator: Peter Kuma\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Dostupné %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Toto je zoznam dostupných %s. Pre výber je potrebné označiť ich v poli a " +"následne kliknutím na šípku \"Vybrať\" presunúť." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Píšte do tohto poľa pre vyfiltrovanie dostupných %s." + +msgid "Filter" +msgstr "Filtrovať" + +msgid "Choose all" +msgstr "Vybrať všetko" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kliknite sem pre vybratie všetkých %s naraz." + +msgid "Choose" +msgstr "Vybrať" + +msgid "Remove" +msgstr "Odstrániť" + +#, javascript-format +msgid "Chosen %s" +msgstr "Vybrané %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Toto je zoznam dostupných %s. Pre vymazanie je potrebné označiť ich v poli a " +"následne kliknutím na šípku \"Vymazať\" vymazať." + +msgid "Remove all" +msgstr "Odstrániť všetky" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kliknite sem pre vymazanie vybratých %s naraz." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s z %(cnt)s vybrané" +msgstr[1] "%(sel)s z %(cnt)s vybrané" +msgstr[2] "%(sel)s z %(cnt)s vybraných" +msgstr[3] "%(sel)s z %(cnt)s vybraných" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Vrámci jednotlivých editovateľných polí máte neuložené zmeny. Ak vykonáte " +"akciu, vaše zmeny budú stratené." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Vybrali ste akciu, ale neuložili ste jednotlivé polia. Prosím, uložte zmeny " +"kliknutím na OK. Akciu budete musieť vykonať znova." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Vybrali ste akciu, ale neurobili ste žiadne zmeny v jednotlivých poliach. " +"Pravdepodobne ste chceli použiť tlačidlo Vykonať namiesto Uložiť." + +msgid "Now" +msgstr "Teraz" + +msgid "Midnight" +msgstr "Polnoc" + +msgid "6 a.m." +msgstr "6:00" + +msgid "Noon" +msgstr "Poludnie" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Poznámka: Ste %s hodinu pred časom servera." +msgstr[1] "Poznámka: Ste %s hodiny pred časom servera." +msgstr[2] "Poznámka: Ste %s hodín pred časom servera." +msgstr[3] "Poznámka: Ste %s hodín pred časom servera." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Poznámka: Ste %s hodinu za časom servera." +msgstr[1] "Poznámka: Ste %s hodiny za časom servera." +msgstr[2] "Poznámka: Ste %s hodín za časom servera." +msgstr[3] "Poznámka: Ste %s hodín za časom servera." + +msgid "Choose a Time" +msgstr "Vybrať Čas" + +msgid "Choose a time" +msgstr "Vybrať čas" + +msgid "Cancel" +msgstr "Zrušiť" + +msgid "Today" +msgstr "Dnes" + +msgid "Choose a Date" +msgstr "Vybrať Dátum" + +msgid "Yesterday" +msgstr "Včera" + +msgid "Tomorrow" +msgstr "Zajtra" + +msgid "January" +msgstr "január" + +msgid "February" +msgstr "február" + +msgid "March" +msgstr "marec" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "máj" + +msgid "June" +msgstr "jún" + +msgid "July" +msgstr "júl" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jan." + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "feb." + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "mar." + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "apr." + +msgctxt "abbrev. month May" +msgid "May" +msgstr "máj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "jún" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "júl" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "aug." + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "sep." + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "okt." + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov." + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "dec." + +msgctxt "one letter Sunday" +msgid "S" +msgstr "N" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "U" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "S" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Š" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Zobraziť" + +msgid "Hide" +msgstr "Skryť" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0085a30fb2ca2dd7adb987d92028e1f80e679764 GIT binary patch literal 16136 zcmc(l36NYzdB+=Lj1f-2oaTz#!a^&&JCb~Re8{pSWBHJUSCX+Yh_^Fucizs-d*k=s z%z9Ti=Dv&|T;VVn3ou7jfH;97RD!8sD^w*w;tCX0kw7IRg#!t$3L!~V2+r@{-EU@g zwQ^*fs!XZ%e@DOWufO~2-XA>e`1cuppQb&ZcGDA#`4RZxHT=hK;x~|6J$zr5BMDLPeIZBeQ+)KBXB)<0v~Z{YM}aG3T_5>hv%;Y#me`BqW7bq z=KCB7tIZ#QqT^oh+2CPN^ZhNT@&5zVyr;qh@nt>uT<~J>7Vu@@&ENyz=fG{xFlH9~ zSMcND4Sb~U{+s_q=hG3Q_^=KXJ!gTJf|r561->2>Js$)2f}a6T2OkDI;OP)~9QZC! ze10z|`aS|~2k!=t2Y&({03QOc2ipiwGeMSW&H?rPP7oHEmx74cG(pYZ2erN>Q2pK-?%xG!zPrNx?}O6kuYykozYm@Y z{us326Jd4oYz z^E{BL%qCFtUkU2_eW3K@6`;nM178dt02#u35)>c525S9(2}&M+532u9!Ow#agX_T0 zzW^HszXOUN4}+J0PekY}#as?<0wWMnn|FhK@H3$1Jr$;04PFVp1bja@3H}h=1)gM) z1^9CCjo{s&v;PE{FI{59!K|d(_JM<#Y*DryR-?zZ~z@LE9tIw_X z{_bJ$QtqD*Q7!NlpuYbzQ2hBD@I>$*K=JWkK+*T}@cg(9UeBHkB4YDGQ2MYn-0uZ7 zP66t>1EALVHc;|<2lyoLgWv)1<6r@viV{fA-vesgPk^H1YoPe{7oha!yP)R#8L07( zgZa|$lfgCM8KCs>Tu}OU6DWQh1SR*+fbyST1~uPLLDBO|5SL(1KD?O@IG+A?rW?O{6kRuf7wRwA5&2J zbr6(Y-vM346?h7WXv`uQgC7GWw-Z^U*7chKPXV`czZTT{IdB2& zf-eXE5j+XpdZy>oE>QElGTg_Y#_NOP=WU?+-vK@u{4{tR_yth(el8<>-BBm z1>8RfO0H|q@#9_yN}gANlH(pweli6m-`9g$_lH2ya|pymnJwDq-gP_*^5GZ~7 zFA$Y9r=9ERyBgHEJy3q&jiC5-7x+x@v)~_q_kpN{8Q^p(fa_WGPOuN6D(0);9`GS>7r4DnOaQbKL9?9`#V9&>5HKF@D)({@J;Zk;CDf-??I3ynO}hK2PZG`&+iAN9}j?%>$kxY z{4uxzya}h7f^PyL)%*gq;6|7r{oV~qe-=T_b33T#}%Ujaquw?NtF z4?xM|pFq+5EAVlkejlN|&RzMOror`9G(wNlRq?O-Epl;pbpuY*v|f!ZyDn(3*1VLa zb%DVchdAb zNc#{?vc%-fYiRoIr2US&^7-o^Twe{sa>v8RgJpRB!GMC>!!<6;=?W_Ea9?15g}d@Lxt;4C z?di29e-b}laCcV9l_8gjQ@SU{h(_|m7py~Ho+S}Zf|L+XocWHTeCY|0)dpB(+ zJd+*B=B3}yq#Z|-4ZW47A1dy0BX`4pZ>PPS_EFk;+7j(1TJ@U<7w3Ub3fG4~T#NZI zZIbpp+HTs-v=`GpP1ElMw5_!3XlrTnw2Nq4Xdj@xiq@s+cZ&z-XZLY^K=<~tMZ0cd zHtCdczQ0V$PQ0P8X5B>8>v0h^yGfc9WgeADmh!mKiHc%>8gUv9G5EN>f*F{4i!j-6W_)Xml=qcofJ^F;ca!a5k z*Ug{>Myu!O=^)N$vLX&5(My=k;N=sX2fkPH5A<_?CDF}4LMI-9P&HY1qwpcL?uIPi=tkcOB zl5`Hac9^9J+v9Fw7ZUo+#1;2p(J{wyJ&lu(?XUvt6nSb$JSKI-;Z1mUo024onrCc9 zcWv4Ovq{`(7PrFh+^(VsEBn>VwoV-7*3T}>-_}VQZHpqt61jiwBsgSZBhLzWiQIb8 z9E!6oOJ|e3J6s_I_wzhX%g$omY>&!lCMseZ=XsXvHr`k!-Pm36+8JE{+r{9MUMIF; zuIl+Jyzw6f`p~9z6XW)=zt`#Kk!;BK+Y)dY4{K|OPgmiT`%wD&2(HjBWc^MPWxBba zz^|qjqfeGAd@s*R=Rk&97nX;HOayBPRwGdkCtl6Y)*oqS>mMr>k6}i6Xq%*?l~=|c zRyb*A`lXynZli|t(?ciRiUzUm#d$X=3iNJ;e;K)pax|j|7aS%^i7f2}Mi@4H}LI2ILg=`7xJFH7T^c}ZrjP&%PddW8=K=86nA(aaW7 zyB2Q=GdpW1MIv|IE>UT%#R4LGP1Kki^SW-iB~gaA417g~+uS+pVskT7B9q6BIKhnQ z;pm&RI8Qm-Zq$y4@q0Zz9M^G^5@`^;8z+zFAQ5NZBodb`zv4zKCImRH6uqdc*xiit zn%U_hcDG-Yir7QT!~ThD2o*75&_tdt*6!q^Wie&9W_M*F;5)mYi4mBOUd@`hI-A3Z z1hCOu6mGJ9sfP$DU$ob{G>7}F-S3%elp>M3x#4l6A?G8PC46};zh<$b!t5H;?7G>N z@h`j^uA-)APG+DFq9X!#Wr#&A?Z$Q{YP9K_#_m5G4X`CCsqq9BW;a36Dqol-OKx)O z<9--zbdT}H<%(O|@UhgdfKN+%9#kzdsuye{BeFKg#*m|ns9sZRM}1$c=-|yypI1YT z8}%~FbqXF?^8VS`%6&_acomcq9Uxz=Sk;Xdr4tR5Z>oq>Tn~CVq{>g~6l$51DHoCk zij>&}eVSTAcrv@_6jN?rIif@yC{;NT*f2JrEUU8m$zYR>ex8(z>kC^TG_TXF7$b4M z=l_rnd@o8bZjJ($k|M{)Mk^y_iUq+6{HHaTFqRC6_a2Gli{|T4dMWH zHqW|nD3_Pv87gDPlgaD)-U5ck=tnWrL|6BpqXdfwU3oEjh^jGYA3eggYIJ>L@mz?= zOp_EgT7XI)C9=aSE!bOb^-P)I%Cg86G5yZ4TA7Y>gll&w3A7i*-Ag9U*|cfHMH{(d z828R6h~qcbbu!bfY(eR!nH~l-d{!t_r*Vp93-Xcnf`XLuW8QgT&OY~a#cPMMgP2jn z%T~@&g2QFxSuam;*Rp^A0nj1q81q$mtfIy1(#X4NfZ<1pYSyUfBG$~J(~9xI6^?3V z+KbXMViBRcv@SIMp`o;DEwruzhte9`P7OteEx>cwdj zj-WR9tDE~#hk2}$ZqFMLeSJJ*U4BqzxR=`a=Y8p=Rm!Fgr}0YVUU0C!-c&I?Rx+|xTCEikFiiEK4mNN12wy|te)j@55rJ`;@zp! z&9ObHEHCUJi9#BtI=*PR+KZqwo7^H5$|dCU~qM_NA|`4b93ael^@@m zwo{Tp6Hrl~47N0TaS>);LbgKQBo_D^cXfTdp5&Ji@A#tTHusM+fsH$-74!Q<1Xlg%k(q_b@%v$LeVF77(Fy2X*;^XgSWHZ zy69p}O?@Q}zfAc{rwE=WmFv>XBLPLjEG0NU?aq81tQOs(kdVoT0NK z{3kvTI-DaS5s6xONEhx|rqU)VlHV;UDlr~ruJlYyJq*bd#1K2Hq&=%J33RhXKvbj-qfbe zQ=2cao6oJEeZd) z<#oF|PrBLRdo2Vt)1+-LB3gH|r5fps?k}B_Wz|sYOZYaO>%)bqJ;b}Zo$ipwr3p4P z(JIScedET3g@qc43+eG}e2c!>=vP-kCk(K$=xp4u=9-=^N3b8XX_ZQf5z?SZ>> zTgJDP8+#q9r3>Y>ax~)Ny?ZX7I)BtpbD`!_JJLp`l%Q_UpGnFgp>D|h6hk5ETwlexfFFt%IWxKMM$Lw>=$LXpk z50oe2JJ|ZWkf{$!qXR zPe}aZ$m}Z;yZXC?cX8`zFI$Gw6Q#BO^u!OBwAg~f_~+Rx_Q-ZI(RAMbPjA1t>Xw~T zy|srA5u8$9hi!Db@;R0}evqQC*q5nJG~7Xoe>O<7qDt$=PgC66Z2UMyI;<5s4p0#E zyNS7qQXp?NM@|B^2dNc3Oe}6OL0*UQ*#z=JQ-09p#M9P?pajs@jaKh%%qFvccH2 z;?R+Eu2}CDvnwI(n#<6?iZr+0AirsEwD2ihsNTGBj)e@8l>GXWV<9z1i#r4qRqZ!#{&IKXlM+gb{W?0vPBT)xOU41dMj}~ta zAA;><*GX$=Ev?~VS3iLnn|irPu6p|Nm}v;SV4=r0TaOevCF&*4%2!#{Boa+=J~mCd zZd)T8puB{|C@30?8aWZt`2;^Q;)xlqUo+rcn{%i4kG`gKUzC6*%E&kTi~s3E>cBRD(Jnf5cPv zIWe^X`7g;Jk*4j>SzPBGQ@!l)p_2DnXf~*ueLYzoHlHFA@4iG$pW-)~VSwm=J8IdN z#;!E3zBqiS4O7_J!8<$mH#~0H70u%~=k1`H@~EFoLLM~{F%iN#QHv3&$mZFQvCX{C zW+s0Lf|HT!s>W!OEjcfrEk!Ora&xmwGwM=Nwq=!$TWqxsC!%--pR^c>T*D1Gf0)U- z88i+^VaeT`KETitSq^=n-0OTZF*j;EuHVhNqX1&I=ZEhV&xc1Zc0wbM&R+1doV-l+ zHw4YVJA0qlrpk=dc#hR>hlYW<|Lx=!o?2w6lM@B@c|ti`R~(B|8R!8S1{1nCuPy_G z#)MA$I@*R_ZN1f3Y`@~P$PQxiS*Jf_8uFIZI6456LCa?{d`i97=AMEi84K_OcEb{z zaTF7whMBhPXPDJFT7?B%N8w_s&yy)|<{c|J3xSJhCj1~*;bCO1r9c6;r!i`dND&Bg z(=AyV#Lbz=AH)!Ms%(t?RN|T@PI!mMX}a7kGP{NvPqd2h0r67xt`_bjIdz0uEghEy zk45izVh=ZVvGzgEEA&2%mdFU*Xai2MoSG`%Q0!!c%pJ>+zMzG2Wg4(bMbcuCgp(NFt;kxHxzbg>eANW-B5=arSaDi8)l+9z8uA5`OX}1K?F!jp8 z#*Xd%2lIB#45z_OGWk$GwmFE}=$Y4FrEJ+;%AZClPP8dA+ez1x8g*9=f>B~S-Wg0R zMS0Ye1?NsG8(an{PowF=9B$fUnrOr}>>Oeca9}OkA=zqp0+utqvDMVgjZrVjaU(s{ zQQXYfe6u=u*%dc=FjCQLn{J>4t@js<2ZxsixsnJfk!YkHXwfhM-6>mec^zcv&!l|S zGToBKaeUzv59*p@^$BU~@HuuIQJ&4)CGU9Ag>Lm)E=Zy=J6$3pPvBQbjy!ffX)(>Y zQCSfToP(XvOPM5kw7hOxc}f$qNU^rewpr4BiWH> z)`1pBIr!2eGh?ZXFL|4oMAkz(WHS=78{gvZUByBu(m37zDERed#P0Ye#;TSn$m+*A zd#n8k^wTA&GU-(gb9QHgB@C@?t{|a}kZH^zjC=@@mNi0Go z=-?=EIXH0Vdt`kqiWoNBYH$i07^@5w7gpJM$m{1tw_MYazE{p?MS;%g&dNo|=+Z~i z)n4sVAbrQ&VK*VvdWE!b{?`}{(_CU1q(1qX9KsTugmcmAZ zM54{Z?o3U4z4OkV&~{mb(;@soOlmCIc}fVsBVt{qWv-4(vZK8@wfS}#EPf(xcd{OP zFk@kaKOKpeQbI*Qtb_Q?UWeIR6#|$Q2S)QQ%DLI92X1b2txFv!Y+w);O+F<1bA>Q0 z4)m=|b!sks4O@Oy<{)27^rE2bj`C8)cNHvIchVM2pd?(Yw`{^Io4^=-c0QhzkEKS= zW1}8Q1e{5eB9oFzW~53=VwKrfvQu(Ble67}(j=2G&RmI`U_O#igP!-69(^t=`oeJ%rjWNqHN$Toqp{l}ixpq~%YJYs$nb1BL z5`CWKEl35DN+PK{DgTYy31ykSoP&`t54VGM!A`9 zsGB99CO1a;lOj@;(;NPVD~t=jQETmfu~|3Zj{qxuk4, 2011 +# Primož Verdnik , 2017 +# zejn , 2013,2016 +# zejn , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspešno izbrisano %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ni mogoče izbrisati %(name)s" + +msgid "Are you sure?" +msgstr "Ste prepričani?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Izbriši izbrano: %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Vse" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Neznano" + +msgid "Any date" +msgstr "Kadarkoli" + +msgid "Today" +msgstr "Danes" + +msgid "Past 7 days" +msgstr "Zadnjih 7 dni" + +msgid "This month" +msgstr "Ta mesec" + +msgid "This year" +msgstr "Letos" + +msgid "No date" +msgstr "Brez datuma" + +msgid "Has date" +msgstr "Z datumom" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Vnesite veljavno %(username)s in geslo za račun osebja. Opomba: obe polji " +"upoštevata velikost črk." + +msgid "Action:" +msgstr "Dejanje:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj še en %(verbose_name)s" + +msgid "Remove" +msgstr "Odstrani" + +msgid "action time" +msgstr "čas dejanja" + +msgid "user" +msgstr "uporabnik" + +msgid "content type" +msgstr "vrsta vsebine" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "predstavitev objekta" + +msgid "action flag" +msgstr "zastavica dejanja" + +msgid "change message" +msgstr "spremeni sporočilo" + +msgid "log entry" +msgstr "dnevniški vnos" + +msgid "log entries" +msgstr "dnevniški vnosi" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Dodan \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Spremenjen \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Izbrisan \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Dnevniški vnos" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Dodan vnos {name} \"{object}\"." + +msgid "Added." +msgstr "Dodano." + +msgid "and" +msgstr "in" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Spremenjena polja {fields} za {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Spremenjena polja {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Izbrisan vnos {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nobeno polje ni bilo spremenjeno." + +msgid "None" +msgstr "Brez vrednosti" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Držite \"Control\" (ali \"Command\" na Mac-u) za izbiro več kot enega." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"Vnos {name} \"{obj}\" je bil uspešno dodan. Lahko ga znova uredite spodaj." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"Vnos {name} \"{obj}\" je bil uspešno dodan. Lahko dodate še en {name} spodaj." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "Vnos {name} \"{obj}\" je bil uspešno dodan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"Vnos {name} \"{obj}\" je bil uspešno spremenjen. Lahko ga znova uredite " +"spodaj." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"Vnos {name} \"{obj}\" je bil uspešno spremenjen. Spodaj lahko dodate nov " +"vnos {name}." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "Vnos {name} \"{obj}\" je bil uspešno spremenjen." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Izbrati morate vnose, nad katerimi želite izvesti operacijo. Noben vnos ni " +"bil spremenjen." + +msgid "No action selected." +msgstr "Brez dejanja." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" je bil uspešno izbrisan." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s s ključem \"%(key)s\" ne obstaja. Morda je bil izbrisan?" + +#, python-format +msgid "Add %s" +msgstr "Dodaj %s" + +#, python-format +msgid "Change %s" +msgstr "Spremeni %s" + +msgid "Database error" +msgstr "Napaka v podatkovni bazi" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s je bil uspešno spremenjen." +msgstr[1] "%(count)s %(name)s sta bila uspešno spremenjena." +msgstr[2] "%(count)s %(name)s so bili uspešno spremenjeni." +msgstr[3] "%(count)s %(name)s je bilo uspešno spremenjenih." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s izbran" +msgstr[1] "%(total_count)s izbrana" +msgstr[2] "Vsi %(total_count)s izbrani" +msgstr[3] "Vseh %(total_count)s izbranih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s izbranih" + +#, python-format +msgid "Change history: %s" +msgstr "Zgodovina sprememb: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Brisanje %(class_name)s %(instance)s bi zahtevalo brisanje naslednjih " +"zaščitenih povezanih objektov: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administrativni vmesnik" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija strani" + +msgid "Log in" +msgstr "Prijavite se" + +#, python-format +msgid "%(app)s administration" +msgstr "Administracija %(app)s" + +msgid "Page not found" +msgstr "Strani ni mogoče najti" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Opravičujemo se, a zahtevane strani ni mogoče najti." + +msgid "Home" +msgstr "Domov" + +msgid "Server error" +msgstr "Napaka na strežniku" + +msgid "Server error (500)" +msgstr "Napaka na strežniku (500)" + +msgid "Server Error (500)" +msgstr "Napaka na strežniku (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Prišlo je do nepričakovane napake. Napaka je bila javljena administratorjem " +"spletne strani in naj bi jo v kratkem odpravili. Hvala za potrpljenje." + +msgid "Run the selected action" +msgstr "Izvedi izbrano dejanje" + +msgid "Go" +msgstr "Pojdi" + +msgid "Click here to select the objects across all pages" +msgstr "Kliknite tu za izbiro vseh vnosov na vseh straneh" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izberi vse %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Počisti izbiro" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Najprej vpišite uporabniško ime in geslo, nato boste lahko urejali druge " +"lastnosti uporabnika." + +msgid "Enter a username and password." +msgstr "Vnesite uporabniško ime in geslo." + +msgid "Change password" +msgstr "Spremeni geslo" + +msgid "Please correct the error below." +msgstr "Prosimo, odpravite sledeče napake." + +msgid "Please correct the errors below." +msgstr "Prosimo popravite spodnje napake." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Vpišite novo geslo za uporabnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "Poglej stran" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj %(name)s" + +msgid "History" +msgstr "Zgodovina" + +msgid "View on site" +msgstr "Poglej na strani" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Odstrani iz razvrščanja" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioriteta razvrščanja: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Preklopi razvrščanje" + +msgid "Delete" +msgstr "Izbriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Izbris %(object_name)s '%(escaped_object)s' bi pomenil izbris povezanih " +"objektov, vendar nimate dovoljenja za izbris naslednjih tipov objektov:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Brisanje %(object_name)s '%(escaped_object)s' bi zahtevalo brisanje " +"naslednjih zaščitenih povezanih objektov:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ste prepričani, da želite izbrisati %(object_name)s \"%(escaped_object)s\"? " +"Vsi naslednji povezani elementi bodo izbrisani:" + +msgid "Objects" +msgstr "Objekti" + +msgid "Yes, I'm sure" +msgstr "Ja, prepričan sem" + +msgid "No, take me back" +msgstr "Ne, vrni me nazaj" + +msgid "Delete multiple objects" +msgstr "Izbriši več objektov" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Brisanje naslendjih %(objects_name)s bi imelo za posledico izbris naslednjih " +"povezanih objektov, vendar vaš račun nima pravic za izbris naslednjih tipov " +"objektov:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Brisanje izbranih %(objects_name)s zahteva brisanje naslednjih zaščitenih " +"povezanih objektov:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ali res želite izbrisati izbrane %(objects_name)s? Vsi naslednji objekti in " +"njihovi povezani vnosi bodo izbrisani:" + +msgid "Change" +msgstr "Spremeni" + +msgid "Delete?" +msgstr "Izbrišem?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Po %(filter_title)s " + +msgid "Summary" +msgstr "Povzetek" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Model v %(name)s aplikaciji" + +msgid "Add" +msgstr "Dodaj" + +msgid "You don't have permission to edit anything." +msgstr "Nimate dovoljenja za urejanje česarkoli." + +msgid "Recent actions" +msgstr "Nedavna dejanja" + +msgid "My actions" +msgstr "Moja dejanja" + +msgid "None available" +msgstr "Ni na voljo" + +msgid "Unknown content" +msgstr "Neznana vsebina" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nekaj je narobe z namestitvijo vaše podatkovne baze. Preverite, da so bile " +"ustvarjene prave tabele v podatkovni bazi in da je dostop do branja baze " +"omogočen pravemu uporabniku." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Prijavljeni ste kot %(username)s in nimate pravic za dostop do te strani. Bi " +"se želeli prijaviti z drugim računom?" + +msgid "Forgotten your password or username?" +msgstr "Ste pozabili geslo ali uporabniško ime?" + +msgid "Date/time" +msgstr "Datum/čas" + +msgid "User" +msgstr "Uporabnik" + +msgid "Action" +msgstr "Dejanje" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ta objekt nima zgodovine sprememb. Verjetno ni bil dodan preko te strani za " +"administracijo." + +msgid "Show all" +msgstr "Prikaži vse" + +msgid "Save" +msgstr "Shrani" + +msgid "Popup closing..." +msgstr "Zapiram pojavno okno ..." + +#, python-format +msgid "Change selected %(model)s" +msgstr "Spremeni izbran %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Dodaj še en %(model)s " + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Izbriši izbran %(model)s" + +msgid "Search" +msgstr "Išči" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s zadetkov" +msgstr[1] "%(counter)s zadetek" +msgstr[2] "%(counter)s zadetka" +msgstr[3] "%(counter)s zadetki" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s skupno" + +msgid "Save as new" +msgstr "Shrani kot novo" + +msgid "Save and add another" +msgstr "Shrani in dodaj še eno" + +msgid "Save and continue editing" +msgstr "Shrani in nadaljuj z urejanjem" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala, ker ste si danes vzeli nekaj časa za to spletno stran." + +msgid "Log in again" +msgstr "Ponovna prijava" + +msgid "Password change" +msgstr "Sprememba gesla" + +msgid "Your password was changed." +msgstr "Vaše geslo je bilo spremenjeno." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vnesite vaše staro geslo (zaradi varnosti) in nato še dvakrat novo, da se " +"izognete tipkarskim napakam." + +msgid "Change my password" +msgstr "Spremeni moje geslo" + +msgid "Password reset" +msgstr "Ponastavitev gesla" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaše geslo je bilo nastavljeno. Zdaj se lahko prijavite." + +msgid "Password reset confirmation" +msgstr "Potrdite ponastavitev gesla" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Vnesite vaše novo geslo dvakrat, da se izognete tipkarskim napakam." + +msgid "New password:" +msgstr "Novo geslo:" + +msgid "Confirm password:" +msgstr "Potrditev gesla:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Povezava za ponastavitev gesla ni bila veljavna, morda je bila že " +"uporabljena. Prosimo zahtevajte novo ponastavitev gesla." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Če obstaja račun z navedenim e-poštnim naslovom, smo vam prek epošte poslali " +"navodila za nastavitev vašega gesla. Prejeti bi jih morali v kratkem." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Če e-pošte niste prejeli, prosimo preverite, da ste vnesli pravilen e-poštni " +"naslov in preverite nezaželeno pošto." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"To e-pošto ste prejeli, ker je ste zahtevali ponastavitev gesla za vaš " +"uporabniški račun na %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Prosimo pojdite na sledečo stran in izberite novo geslo:" + +msgid "Your username, in case you've forgotten:" +msgstr "Vaše uporabniško ime (za vsak primer):" + +msgid "Thanks for using our site!" +msgstr "Hvala, ker uporabljate našo stran!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Ekipa strani %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Ste pozabili geslo? Vnesite vaš e-poštni naslov in poslali vam bomo navodila " +"za ponastavitev gesla." + +msgid "Email address:" +msgstr "E-poštni naslov:" + +msgid "Reset my password" +msgstr "Ponastavi moje geslo" + +msgid "All dates" +msgstr "Vsi datumi" + +#, python-format +msgid "Select %s" +msgstr "Izberite %s" + +#, python-format +msgid "Select %s to change" +msgstr "Izberite %s, ki ga želite spremeniti" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Ura:" + +msgid "Lookup" +msgstr "Poizvedba" + +msgid "Currently:" +msgstr "Trenutno:" + +msgid "Change:" +msgstr "Spremembe:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..255885ed28a0ba5bcc5cb0a579ce2d5d9ba90660 GIT binary patch literal 4724 zcmbuDUu+yl9mfZnLUEzcLit<%B#@|hL%f$)#P_$mXJ3dNlCZhi z&;Dk9GxM9@{N|7I=0itbVtD3}9zlBLZHzq$e)S%_@N6Do>?Ak<-vR!z;%~uwA^*OT zuY>P~{HIF(OU1u~??L`QD*mhDJ*Yf}{0G5zfscTXfk(lk;4*k07+1_e>i;T;CfIY} zJHh8G`Fj;YCCEDM;=79He?LgI@-J4Yt4s&?uF6K+=yuYBvG#W1D!9omWA! z^IIUb^CI{n_yh0-&_^XS$zB7gy+42p;OijOyC0c91Rn;e-pgPDo<-sN!QWK;Bls}n zH!JzAO1=+9d;s~6f*%Cuz&9{g=fOVY$KZVG|9KE5u@@@&S|$G&L{sc%6@O9X{|1&i0$u|b9%Ssh;2R*^%;ZBQyA@T%KKOQ&$CaE^v=u*$GJ0l9 z6mRk`J!H3!^dY39NaSC7K2oBHGn#XH$fuJ?Fo!*gM19gjW1xq8O^;Wim^=FXG!l*P z<0Rn0@QR0g2NT&8(lpW>(#Mb}7LFltB)E>%k!W9-K%%FH^hu<7q;VvAK3am!fHVg* zuN1@dP;Aq>rsq>g6uX#OG&q&Y=vd0lI-i*8XopW^$c~f2Ez3@D;m1BZ!4tyi#Hxs$ z&bnFZ*y&uTNVFr#CsMW~bVo*PDKsXP6}aGMgd34sDjt#Cs1y}-Q>lx_BGu`0XLzS* zj*BQlHW!W?^y0InVY!vD$z@Rv)w1@!+8NoAaa&rpEZa5{cEFZZV}S8Fh=9$WP@KZ85foY%R`e{E@vE=PR6-7#SscOuXE}CeYO^hQl8(d&0DABw_lUC{R@iI`x;ZX~v zwsad3I@G({FdWro>K|y--aPMHR7Ju6X;JB-|7DR05FRZP8?u|V28qOw5vh*+N2A8~ zdJ$zjFdOBF4)iCxB2&a7HAj&Z3dHenMZ#%ZbeuAJy71qiQqYr*$09($Ynlh4yAmr} z!-7END#%2HzGW1og>NPitcf*kEYSgvj47PIZV;*P@{@3K<{T(8BmVhGY;Ok$v8fc&gW~96satug0DVJexv%ODjEbtaQnU zQJF5gJlGX7P_EdXhCVsBUYJYGjX1cl_rF`(P%xp5rC?I$Go$e(9j1#fTZJh*vOJo% zVl?HgjOI0k%V=_sG;hew3e6kxT482W(rk@twlaBh=4Bb^GW#-Hv!;jb+dCI{m!wS* zD-9m>5E5qWqD+i+-b&h4f%in#O}&weNm*&YgwVwNH}8~e9fxZTz{3r zAnc!g{#hIsvDxymJ(B!|Zj2Md@0j>=sH?k~=t{38Mcm-c2>ZBJn3k!~xuh{Ov$3(^ zJ8E04%T1~?Q;u$ksA^y)jb@IGt(;pqyYGj(UmII8+DQ%jutXc&$xSztL_+BWicOnJ zxA>*jvUh40NULp=J zQf#%&PlWWYp9+~M4t9|j2m1=<5D`C-BFJPvQoB2fo!i1OGK7;nKzzqlF2vm(k&=Yn zg+4`9!gE{(kc|;gb5BRAuNBm{1jo3bjPkHJQTy12lz)SU2~r9G=;t@-1;e9#y*%2B zlieySdaT*Es>iSraJsWz7Lkx?yknf+9lU#N%|zPl?y%LwL|9S8xGfsI8%b=gS`=d- z!Th7wMId{?9-PJOfm_Xe5$nK^V1;L&7HLRquT@+Wl zmgt)vGyU?Kvs#4=8-5f4nC@M5utD|3^;Z>6aNeWyc1w$x)1HMDhB)+j8LZguMcBvL zMNuy)VChp~?sJ|dCeS@xbxc23wwKYBC*@cseG|j&Jjt&A1S_Uv_&6HFq8aBgj-`mvF-fvdL-eXt=-8D2C1W{7gB@Dj#<~8h&CBd}Q-h4*Ou(1%b;-ALpsv z8`?DQ_oSr|!%eY^twy3khE1b%T8ceH7TxqDW_xHZE, 2011 +# zejn , 2016 +# zejn , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Možne %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"To je seznam možnih %s. Izbrane lahko izberete z izbiro v spodnjem okvirju " +"in s klikom na puščico \"Izberi\" med okvirjema." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Z vpisom niza v to polje, zožite izbor %s." + +msgid "Filter" +msgstr "Filtriraj" + +msgid "Choose all" +msgstr "Izberi vse" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kliknite za izbor vseh %s hkrati." + +msgid "Choose" +msgstr "Izberi" + +msgid "Remove" +msgstr "Odstrani" + +#, javascript-format +msgid "Chosen %s" +msgstr "Izbran %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"To je seznam možnih %s. Odvečne lahko odstranite z izbiro v okvirju in " +"klikom na puščico \"Odstrani\" med okvirjema." + +msgid "Remove all" +msgstr "Odstrani vse" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kliknite za odstranitev vseh %s hkrati." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s od %(cnt)s izbranih" +msgstr[1] "%(sel)s od %(cnt)s izbran" +msgstr[2] "%(sel)s od %(cnt)s izbrana" +msgstr[3] "%(sel)s od %(cnt)s izbrani" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Na nekaterih poljih, kjer je omogočeno urejanje, so neshranjene spremembe. V " +"primeru nadaljevanja bodo neshranjene spremembe trajno izgubljene." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Izbrali ste dejanje, vendar niste shranili sprememb na posameznih poljih. " +"Kliknite na 'V redu', da boste shranili. Dejanje boste morali ponovno " +"izvesti." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Izbrali ste dejanje, vendar niste naredili nobenih sprememb na posameznih " +"poljih. Verjetno iščete gumb Pojdi namesto Shrani." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Opomba: glede na čas na strežniku ste %s uro naprej." +msgstr[1] "Opomba: glede na čas na strežniku ste %s uri naprej." +msgstr[2] "Opomba: glede na čas na strežniku ste %s ure naprej." +msgstr[3] "Opomba: glede na čas na strežniku ste %s ur naprej." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Opomba: glede na čas na strežniku ste %s uro zadaj." +msgstr[1] "Opomba: glede na čas na strežniku ste %s uri zadaj." +msgstr[2] "Opomba: glede na čas na strežniku ste %s ure zadaj." +msgstr[3] "Opomba: glede na čas na strežniku ste %s ur zadaj." + +msgid "Now" +msgstr "Takoj" + +msgid "Choose a Time" +msgstr "Izberite čas" + +msgid "Choose a time" +msgstr "Izbor časa" + +msgid "Midnight" +msgstr "Polnoč" + +msgid "6 a.m." +msgstr "Ob 6h" + +msgid "Noon" +msgstr "Opoldne" + +msgid "6 p.m." +msgstr "Ob 18h" + +msgid "Cancel" +msgstr "Prekliči" + +msgid "Today" +msgstr "Danes" + +msgid "Choose a Date" +msgstr "Izberite datum" + +msgid "Yesterday" +msgstr "Včeraj" + +msgid "Tomorrow" +msgstr "Jutri" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "marec" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "junij" + +msgid "July" +msgstr "julij" + +msgid "August" +msgstr "avgust" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "N" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "S" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Č" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Prikaži" + +msgid "Hide" +msgstr "Skrij" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e9ea005a66239e0dafa44686a95d7c90f5886478 GIT binary patch literal 17324 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..aac5afe52 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,724 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik Bleta , 2011,2015 +# Besnik Bleta , 2020 +# Besnik Bleta , 2015,2018-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "U fshinë me sukses %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "S’mund të fshijë %(name)s" + +msgid "Are you sure?" +msgstr "Jeni i sigurt?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Fshiji %(verbose_name_plural)s e përzgjedhur" + +msgid "Administration" +msgstr "Administrim" + +msgid "All" +msgstr "Krejt" + +msgid "Yes" +msgstr "Po" + +msgid "No" +msgstr "Jo" + +msgid "Unknown" +msgstr "E panjohur" + +msgid "Any date" +msgstr "Çfarëdo date" + +msgid "Today" +msgstr "Sot" + +msgid "Past 7 days" +msgstr "7 ditët e shkuara" + +msgid "This month" +msgstr "Këtë muaj" + +msgid "This year" +msgstr "Këtë vit" + +msgid "No date" +msgstr "Pa datë" + +msgid "Has date" +msgstr "Ka datë" + +msgid "Empty" +msgstr "E zbrazët" + +msgid "Not empty" +msgstr "Jo e zbrazët" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ju lutemi, jepni %(username)s dhe fjalëkalimin e saktë për një llogari " +"ekipi. Kini parasysh se që të dy fushat mund të jenë të ndjeshme ndaj " +"shkrimit me shkronja të mëdha ose të vogla." + +msgid "Action:" +msgstr "Veprim:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Shtoni një tjetër %(verbose_name)s" + +msgid "Remove" +msgstr "Hiqe" + +msgid "Addition" +msgstr "Shtim" + +msgid "Change" +msgstr "Ndryshoje" + +msgid "Deletion" +msgstr "Fshirje" + +msgid "action time" +msgstr "kohë veprimi" + +msgid "user" +msgstr "përdorues" + +msgid "content type" +msgstr "lloj lënde" + +msgid "object id" +msgstr "id objekti" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "paraqitje objekti" + +msgid "action flag" +msgstr "shenjë veprimi" + +msgid "change message" +msgstr "mesazh ndryshimi" + +msgid "log entry" +msgstr "zë regjistrimi" + +msgid "log entries" +msgstr "zëra regjistrimi" + +#, python-format +msgid "Added “%(object)s”." +msgstr "U shtua “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "U ndryshua “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "U fshi “%(object)s.”" + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "U shtua {name} “{object}”." + +msgid "Added." +msgstr "U shtua." + +msgid "and" +msgstr "dhe " + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "U ndryshuan {fields} për {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "U ndryshuan {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "U fshi {name} “{object}”." + +msgid "No fields changed." +msgstr "S’u ndryshua ndonjë fushë." + +msgid "None" +msgstr "Asnjë" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Që të përzgjidhni më shumë se një, mbani të shtypur “Control”, ose “Command” " +"në një Mac." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” u shtua me sukses." + +msgid "You may edit it again below." +msgstr "Mund ta ripërpunoni më poshtë." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” u shtua me sukses. Mund të shtoni {name} tjetër më poshtë." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” u ndryshua me sukses. Mund ta përpunoni sërish më poshtë." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” u shtua me sukses. Mund ta përpunoni sërish më poshtë." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” u ndryshua me sukses. Mund të shtoni {name} tjetër më poshtë." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” u ndryshua me sukses." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Duhen përzgjedhur objekte që të kryhen veprime mbi ta. S’u ndryshua ndonjë " +"objekt." + +msgid "No action selected." +msgstr "S’u përzgjodh ndonjë veprim." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” u fshi me sukses." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s me “%(key)s” ID s’ekziston. Mos qe fshirë vallë?" + +#, python-format +msgid "Add %s" +msgstr "Shtoni %s" + +#, python-format +msgid "Change %s" +msgstr "Ndrysho %s" + +#, python-format +msgid "View %s" +msgstr "Shiheni %s" + +msgid "Database error" +msgstr "Gabim baze të dhënash" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s u ndryshua me sukses." +msgstr[1] "%(count)s %(name)s u ndryshuan me sukses." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s i përzgjedhur" +msgstr[1] "Krejt %(total_count)s të përzgjedhurat" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 nga %(cnt)s të përzgjedhur" + +#, python-format +msgid "Change history: %s" +msgstr "Ndryshoni historikun: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Fshirja e %(class_name)s %(instance)s do të lypte fshirjen e objekteve " +"vijuese të mbrojtura që kanë lidhje me ta: %(related_objects)s" + +msgid "Django site admin" +msgstr "Përgjegjës sajti Django" + +msgid "Django administration" +msgstr "Administrim i Django-s" + +msgid "Site administration" +msgstr "Administrim sajti" + +msgid "Log in" +msgstr "Hyni" + +#, python-format +msgid "%(app)s administration" +msgstr "Administrim %(app)s" + +msgid "Page not found" +msgstr "S’u gjet faqe" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Na ndjeni, por faqja e kërkuar s’u gjet dot." + +msgid "Home" +msgstr "Hyrje" + +msgid "Server error" +msgstr "Gabim shërbyesi" + +msgid "Server error (500)" +msgstr "Gabim shërbyesi (500)" + +msgid "Server Error (500)" +msgstr "Gabim Shërbyesi (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Pati një gabim. U është njoftuar përgjegjësve të sajtit përmes email-i dhe " +"do të duhej ndrequr pa humbur kohë. Faleminderit për durimin." + +msgid "Run the selected action" +msgstr "Xhiro veprimin e përzgjedhur" + +msgid "Go" +msgstr "Shko tek" + +msgid "Click here to select the objects across all pages" +msgstr "Klikoni këtu që të përzgjidhni objektet nëpër krejt faqet" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Përzgjidhni krejt %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Spastroje përzgjedhjen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele te aplikacioni %(name)s" + +msgid "Add" +msgstr "Shtoni" + +msgid "View" +msgstr "Shiheni" + +msgid "You don’t have permission to view or edit anything." +msgstr "S’keni leje të shihni apo të përpunoni gjë." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Së pari, jepni një emër përdoruesi dhe një fjalëkalim. Mandej, do të jeni në " +"gjendje të përpunoni më tepër mundësi përdoruesi." + +msgid "Enter a username and password." +msgstr "Jepni emër përdoruesi dhe fjalëkalim." + +msgid "Change password" +msgstr "Ndryshoni fjalëkalimin" + +msgid "Please correct the error below." +msgstr "Ju lutemi, ndreqni gabimin më poshtë." + +msgid "Please correct the errors below." +msgstr "Ju lutemi, ndreqni gabimet më poshtë." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Jepni një fjalëkalim të ri për përdoruesin %(username)s." + +msgid "Welcome," +msgstr "Mirë se vini," + +msgid "View site" +msgstr "Shihni sajtin" + +msgid "Documentation" +msgstr "Dokumentim" + +msgid "Log out" +msgstr "Dilni" + +#, python-format +msgid "Add %(name)s" +msgstr "Shto %(name)s" + +msgid "History" +msgstr "Historik" + +msgid "View on site" +msgstr "Shiheni në sajt" + +msgid "Filter" +msgstr "Filtër" + +msgid "Clear all filters" +msgstr "Spastroji krejt filtrat" + +msgid "Remove from sorting" +msgstr "Hiqe prej renditjeje" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Përparësi renditjesh: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Shfaq/fshih renditjen" + +msgid "Delete" +msgstr "Fshije" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Fshirja e %(object_name)s '%(escaped_object)s' do të shpinte në fshirjen e " +"objekteve të lidhur me të, por llogaria juaj nuk ka leje për fshirje të " +"objekteve të llojeve të mëposhtëm:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Fshirja e %(object_name)s '%(escaped_object)s' do të kërkonte fshirjen e " +"objekteve të mbrojtur vijues, të lidhur me të:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Jeni i sigurt se doni të fshihet %(object_name)s \"%(escaped_object)s\"? " +"Krejt objektet vijues të lidhur me të do të fshihen:" + +msgid "Objects" +msgstr "Objekte" + +msgid "Yes, I’m sure" +msgstr "Po, jam i sigurt" + +msgid "No, take me back" +msgstr "Jo, kthemëni mbrapsht" + +msgid "Delete multiple objects" +msgstr "Fshini disa objekte njëherësh" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Fshirja e %(objects_name)s të përzgjedhur do të shpjerë në fshirjen e " +"objekteve të lidhur me të, por llogaria juaj nuk ka leje të fshijë llojet " +"vijuese të objekteve:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Fshirja e %(objects_name)s të përzgjedhur do të kërkonte fshirjen e " +"objekteve të mbrojtur vijues, të lidhur me të:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Jeni i sigurt se doni të fshihen %(objects_name)s e përzgjedhur? Krejt " +"objektet vijues dhe gjëra të lidhura me ta do të fshihen:" + +msgid "Delete?" +msgstr "Të fshihet?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Nga %(filter_title)s " + +msgid "Summary" +msgstr "Përmbledhje" + +msgid "Recent actions" +msgstr "Veprime së fundi" + +msgid "My actions" +msgstr "Veprimet e mia" + +msgid "None available" +msgstr "Asnjë i passhëm" + +msgid "Unknown content" +msgstr "Lëndë e panjohur" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Diç është gabim me instalimin tuaj të bazës së të dhënave. Sigurohuni që " +"janë krijuar tabelat e duhura të bazës së të dhënave dhe sigurohuni që baza " +"e të dhënave është e lexueshme nga përdoruesi i duhur." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jeni mirëfilltësuar si %(username)s, por s’jeni i autorizuar të hyni në këtë " +"faqe. Do të donit të hyni në një llogari tjetër?" + +msgid "Forgotten your password or username?" +msgstr "Harruat fjalëkalimin ose emrin tuaj të përdoruesit?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Datë/kohë" + +msgid "User" +msgstr "Përdorues" + +msgid "Action" +msgstr "Veprim" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Ky objekt nuk ka historik ndryshimesh. Gjasat janë të mos ketë qenë shtuar " +"përmes këtij sajti admin." + +msgid "Show all" +msgstr "Shfaqi krejt" + +msgid "Save" +msgstr "Ruaje" + +msgid "Popup closing…" +msgstr "Mbyllje flluske…" + +msgid "Search" +msgstr "Kërko" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s përfundim" +msgstr[1] "%(counter)s përfundime" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s gjithsej" + +msgid "Save as new" +msgstr "Ruaje si të ri" + +msgid "Save and add another" +msgstr "Ruajeni dhe shtoni një tjetër" + +msgid "Save and continue editing" +msgstr "Ruajeni dhe vazhdoni përpunimin" + +msgid "Save and view" +msgstr "Ruajeni dhe shiheni" + +msgid "Close" +msgstr "Mbylle" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ndryshoni %(model)s e përzgjedhur" + +#, python-format +msgid "Add another %(model)s" +msgstr "Shtoni një %(model)s tjetër" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Fshije %(model)s e përzgjedhur" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Faleminderit që shpenzoni sot pak kohë të çmuar me sajtin Web." + +msgid "Log in again" +msgstr "Hyni sërish" + +msgid "Password change" +msgstr "Ndryshim fjalëkalimi" + +msgid "Your password was changed." +msgstr "Fjalëkalimi juaj u ndryshua." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Ju lutemi, për hir të sigurisë, jepni fjalëkalimin tuaj të vjetër,dhe mandej " +"jepeni dy herë fjalëkalimin tuaj të ri, që të mund të verifikojmë se i keni " +"shtypur saktë." + +msgid "Change my password" +msgstr "Ndrysho fjalëkalimin tim" + +msgid "Password reset" +msgstr "Ricaktim fjalëkalimi" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Fjalëkalimi juaj u caktua. Mund të vazhdoni më tej dhe të bëni hyrjen tani." + +msgid "Password reset confirmation" +msgstr "Ripohim ricaktimi fjalëkalimi" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Ju lutemi, jepeni fjalëkalimin tuaj dy herë, që kështu të mund të " +"verifikojmë që e shtypët saktë." + +msgid "New password:" +msgstr "Fjalëkalim i ri:" + +msgid "Confirm password:" +msgstr "Ripohoni fjalëkalimin:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Lidhja për ricaktimin e fjalëkalimit qe e pavlefshme, ndoshta ngaqë është " +"përdorur tashmë një herë. Ju lutemi, kërkoni një ricaktim të ri fjalëkalimi." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ju kemi dërguar me email udhëzime për caktimin e fjalëkalimit tuaj, nëse " +"ekziston një llogari me email-in që dhatë. Duhet t’ju vijnë pas pak." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Nëse s’merrni ndonjë email, ju lutemi, sigurohuni se keni dhënë adresën me " +"të cilën u regjistruat, dhe kontrolloni edhe te dosja e mesazheve të " +"padëshiruar." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Këtë email po e merrni ngaqë kërkuat ricaktim fjalëkalimi për llogarinë tuaj " +"si përdorues te %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ju lutemi, shkoni te faqja vijuese dhe zgjidhni një fjalëkalim të ri:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Emri juaj i përdoruesit, në rast se e keni harruar:" + +msgid "Thanks for using our site!" +msgstr "Faleminderit që përdorni sajtin tonë!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Ekipi i %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Harruat fjalëkalimin tuaj? Jepni më poshtë adresën tuaj email, dhe do t’ju " +"dërgojmë me email udhëzime për caktimin e një të riu." + +msgid "Email address:" +msgstr "Adresë email:" + +msgid "Reset my password" +msgstr "Ricakto fjalëkalimin tim" + +msgid "All dates" +msgstr "Krejt datat" + +#, python-format +msgid "Select %s" +msgstr "Përzgjidhni %s" + +#, python-format +msgid "Select %s to change" +msgstr "Përzgjidhni %s për ta ndryshuar" + +#, python-format +msgid "Select %s to view" +msgstr "Përzgjidhni %s për parje" + +msgid "Date:" +msgstr "Datë:" + +msgid "Time:" +msgstr "Kohë:" + +msgid "Lookup" +msgstr "Kërkim" + +msgid "Currently:" +msgstr "Tani:" + +msgid "Change:" +msgstr "Ndryshim:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..3feecc2edeae6b53c9c3225fe894bb90a53dbde3 GIT binary patch literal 5179 zcmb`LON<;x8GtKffUpS=l8^-AK*hwtPCT<-n>g_}4qiVtj?LPOcbo?Vq?+m4>7ME7 zn(fD~#|UJQLbwo#mjnVK9zq=Uz>SAQ5R#<;hj2iV;1mf?9FVvmaR3D0-(9nw9WQwZ zI$QH~RsB`<*Z=?ZcR8=zQu~_XIZD|fe$RPcfa2$mLrkI~D0Wzdvd$&X=RLm%-%0zAA*!ht zVFUgSO1xc1r_6H*mg{<+@;nD+{U?0=87T4{DE{d~@#heV9=YeIp{4$L*nxk6GH&VS zYTQ#$=KX}PcOb4%Ar!d`iawu$KZKuy;@A7%Rjv0MDE%+NWAJ6)e#b4u3iZ3-Pv8si zSy*5k(eodk|AwOf^*BS?Z}7ay^JdT6Jn!_}0cD)_^!$zca5q%n1n@-RjGHhyroIz*AP`G{}C6^gJ^ zyL|l!e30@!Uzc-)BThWQ}#=RNBk|1#H~ED6p5j|l=~5dot}-^se2VB-oV|6@qF0&rm=o2QNsI{WOL@l4J#pT${Cgo&t)amQo=}tMFHgQa|Ho11J(oo08 z{iz+eHCy&0T8+LccEWb-plwsNVB2Y7(vez-;+*=aD6s0ZNy@ga24KKe=t{r(K~ds$R}{ldC!!zc+} z*R(Ze1I;LQkSQ;xsR(cUFP26N{z@wQas`k&)H& zb*C9_v&ObcZTk7DMm`GuM~x~Iy_QBUAUs-b;6!iL8VxO5CQ@^;pX{3Vl`_h7;MS`h zZEH{Uw9SY`nNA`rG{o`vL}D~;I(g)hy`}v|ULg6?SemD$%j{O;cS@XmN9$;+^(=W+ za%YW~sV<*WYH+G&GpE#eQ!c@7HYdpSLK+e1wS~#HMVCn1;$+*h$qP9WwdF0XMJc(Z ztrZq&CX%g5$yQ;nZG6%ON!9$MT1s7yk6!)pp#FqSGfr4j2R)9Fn>lZXF3szUSvLym z$BJ%NZ@H$PSvprgZ`UFbt;^S}srT>OKUd#3SD$-O&mCwUIPkzeo|%uBEU&jxlVq{U zUE0*gY?efQeGC&A{Ybm49px-`Q!}txxEc)`F6}T<#9@ zeAt|wU0+{sP#H<9X+ee%AC@}f_%eDQMo0^f@IYz8(G-6Mm&sGCuOaS zw*f(IwvIay_AKF~mcxFL=H&$@b!s6Cqp-ZfaGcNZEsFZ;qr`KFBqu!Mr>7PPxpKR_ zkOJA`G8;`Ig6y>H2^AgM>7ilKa>LvSsf!`g_Q+-tDewO{Bzwb){Pz)O*@&2>#aU6U z(n6=OC^x&+v9p%LTn-{TSTXdR={YT~5MRj$+34~rC)IKAH1r~wX2P2oDTp$ogQCx8 zejLW7n>a|iU*ypxqX%L`SItZW@O@4K+p7lki4ty^deDxrYlM$kFwr}!@U%NMsXzxK zKNTOo*VL0s=2bO`qBpMN>(fxoxs7_uj!Us6Ov;etR?Yf+6iLw49x(Cdk&t^(>Oz}O z8+>T8ER@^w2~O%6iAA3wD$|xHb=#ftk(*;uV8)bf1B8T=Q}zx!O=kG^fh#)d^Fsu?6m5Tf5H}rYA0Wbq)D!=!~mY zsUa5W@eR{Vhu&U4EFftD?Iql{SN3$F, 2011-2012,2015 +# Besnik Bleta , 2020-2021 +# Besnik Bleta , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 13:33+0000\n" +"Last-Translator: Besnik Bleta \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s i gatshëm" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Kjo është lista e %s të gatshëm. Mund të zgjidhni disa duke i përzgjedhur te " +"kutiza më poshtë dhe mandej duke klikuar mbi shigjetën \"Zgjidhe\" mes dy " +"kutizave." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Shkruani brenda kutizës që të filtrohet lista e %s të passhme." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Zgjidheni krejt" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikoni që të zgjidhen krejt %s njëherësh." + +msgid "Choose" +msgstr "Zgjidhni" + +msgid "Remove" +msgstr "Hiqe" + +#, javascript-format +msgid "Chosen %s" +msgstr "U zgjodh %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Kjo është lista e %s të gatshme. Mund të hiqni disa duke i përzgjedhur te " +"kutiza më poshtë e mandej duke klikuar mbi shigjetën \"Hiqe\" mes dy " +"kutizave." + +msgid "Remove all" +msgstr "Hiqi krejt" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikoni që të hiqen krejt %s e zgjedhura njëherësh." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "U përzgjodh %(sel)s nga %(cnt)s" +msgstr[1] "U përzgjodhën %(sel)s nga %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Keni ndryshime të paruajtura te fusha individuale të ndryshueshme. Nëse " +"kryeni një veprim, ndryshimet e paruajtura do të humbin." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Keni përzgjedhur një veprim, por s’keni ruajtur ende ndryshimet që bëtë te " +"fusha individuale. Ju lutemi, klikoni OK që të bëhet ruajtja. Do t’ju duhet " +"ta ribëni veprimin." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Keni përzgjedhur një veprim, dhe nuk keni bërë ndonjë ndryshim te fusha " +"individuale. Ndoshta po kërkonit për butonin Shko, në vend se për butonin " +"Ruaje." + +msgid "Now" +msgstr "Tani" + +msgid "Midnight" +msgstr "Mesnatë" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mesditë" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Shënim: Jeni %s orë para kohës së shërbyesit." +msgstr[1] "Shënim: Jeni %s orë para kohës së shërbyesit." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Shënim: Jeni %s orë pas kohës së shërbyesit." +msgstr[1] "Shënim: Jeni %s orë pas kohës së shërbyesit." + +msgid "Choose a Time" +msgstr "Zgjidhni një Kohë" + +msgid "Choose a time" +msgstr "Zgjidhni një kohë" + +msgid "Cancel" +msgstr "Anuloje" + +msgid "Today" +msgstr "Sot" + +msgid "Choose a Date" +msgstr "Zgjidhni një Datë" + +msgid "Yesterday" +msgstr "Dje" + +msgid "Tomorrow" +msgstr "Nesër" + +msgid "January" +msgstr "Janar" + +msgid "February" +msgstr "Shkurt" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Prill" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Qershor" + +msgid "July" +msgstr "Korrik" + +msgid "August" +msgstr "Gusht" + +msgid "September" +msgstr "Shtator" + +msgid "October" +msgstr "Tetor" + +msgid "November" +msgstr "Nëntor" + +msgid "December" +msgstr "Dhjetor" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Shk" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Pri" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Qer" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Kor" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Gus" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sht" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Tet" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nën" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dhje" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "H" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "E" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Shfaqe" + +msgid "Hide" +msgstr "Fshihe" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae2b979943de15c7e0a049bc222d3b4af89bea5a GIT binary patch literal 15414 zcmc(k3zS_|dB?X1f&oN90ma7-CCNlHuLuG|9zqi26-bi+1-0p&d(X_=o@ik0vhf}-)=*18hOU>YDvWm!{8II=7;N~Q;m58_-gP>@NM8Z z;Jd(^!L{Ig@DD=&cfkvI{&!IG=D)_6SAk2w6TubWE5WP5Q^4!O`}ctwp9e+9WaxhY zJc;K|gZ!B<@uT_Eph)~fQ18D9ehB;v@FU<=rx^nY=C44}{XWJB555k3f4~^jxUJwIcn^32_|5SCDR2(Y-v=SZ{4=Qi{u9)=pM#>~ z1QtCDJO$K#=Yb2rWuW#Q0dEB>;4R>@;Mc&LAbJEm=?r5&55}PQKjZaYes2aDY8Hdy zeXvO1r$Bs2G0Zk55bo~jaeGY@LV7>=x{!c*Z<#`ZMnG;Z+_B|66ALoFQ z=i5PzKR@&@0k!Yd;rYFw>~te|GI%HWHgG3s!LNgL@G!UryaHtmfe(S&_q(9>`w=KU zUjRkti=gCt+Sy)zb3xH}F^GuFGEn+l2a3-!sQqsPwa#`>^nU`>dQ+g*`zrW$@E|C< zp93Y=6Ie|0I31Ke=7E~m2hIa80~dm0pyaU=Tn6p}-vs_02#e+gumPS-r}VHD6dfN2 zWfu&wZ{TV2FkB1rg>#3mTzYg36 z&IRS?UjR3Pe*`WC7tzU7vk{cs?g)4fsC7OKimu(D_S+NQKM88zrve@h{XYan?{nZ6 zUSZ6?fs*IF82@?Tmq4~Q-vM`n&w@9DAH`T?x6go8@I>qF=L4YRw+j?~UkuNC!Cs!9 z02hEi0SCd;=VDvnN>KK2Hz@mh7=#q_RZw>E6eztW0iOY%cvETJQ>EhMDxc zJm1CQXYqVKPN4m-d55R-yzJud;Z&JEyez!C_F<~C4#eg%}iz6DCIKL$nLIRnOA z1YQinx~YQS10MlD3pOym-vrNO5+-CCpyoXYimz!Em$Q0ra+ zik~_td-(l;e-6Hu=jT9;`x&?toPWNLO9fDNe-{YJ<}hf%S6<-vI}a4!SA&|L1Bbx7 zLH^92@gsTsFL)z(DnzJ10ws@!!NcGo@C@+Y3q5`rJelXmLFxV5p!oc25EYpJ22Tg) zBRu7Ui$U>m6R7<*g0hoIQ2c%jl%9SMd;|C`Pe=0^Udgp<-i@AZO>nsmW z=eoT)Jg0CQH}}%kg$~7@J7^8sZ_y;v>uC{f1?|1G&9qV4gS7Ojha1ex+#l{S9Va`* z2VIxbPNI$LfeVqCRqoE$GLnm~+i5G^o&S;keBqwTIRUqT@{?<5leE)lvg41? zPN3;JpY{N4F0Dw@C7Zs=-T9wa1Mj3Q4}I?ghiM<8y@$4j)=!fU%OBIL#?6Ve3q!~I zLHXTfv@>Z_w0F}!N;`#iGVNU2owOaaD(!CpsvGLXdMR31vu0jTZhV}ZT%la76l?Wru3n5QbmvRCT5UrmSJtq3J;h3`o~z_} z(7U)%sk`p*ej-=1`LSGOG%DCyBcG3IwUI`tG}$-f;HVnSK02zhcr~guO7(PsOqVFo z>Kpus4JkGCxSlKV&S9&!7L}rWJt~+>OC@{MmjgB);cecr)t-`f!noAIkh!$LDun{$ zJlp=E<{(#z>tj)scjdScl@OCgwtF{6)#11n1%c{iROk~F{T7|#hgL^#AylW_wPhntC9rEcr7Wyh!Z-5UQblZ=fP@zc%oPtMdBrPDcE8?D%b2pkuk$jSi1oG$FO@Ux)vF!2_0oiPZH)=DTtV2^%o&x zxml5`AorC0mR?pkQ#2mzyjprUhJnY`$)QYFdD4z!=o4|ZkdEqp&hV7#)~`GiW)$pg zBgLpxsC}rgC=hzSN)y1-s;)anZCEhE4b34f4CJi@l1 zx{To|FJVI1*jQBVv)9HUFE|q%jvygq{62F{Jc>OBu({D(c!(Qybt0SUq`l6iC7$C= zjd8PDS+XWC@a_`|35pTIqnGpQ$&?CnZAPj?=GvIQ@UF#0pZXljpby7w0wbHgP))@|gJ=}E1bHH2TQ1T#XxQ{d4jim-0`8AFKbU5_^J z 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 OTl;tQr;#r8<^KbRA#U&h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..246d8b1c0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,702 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2019,2021 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:04+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Бриши означене објекте класе %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно обрисано: %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Несуспело брисање %(name)s" + +msgid "Are you sure?" +msgstr "Да ли сте сигурни?" + +msgid "Administration" +msgstr "Администрација" + +msgid "All" +msgstr "Сви" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Непознато" + +msgid "Any date" +msgstr "Сви датуми" + +msgid "Today" +msgstr "Данас" + +msgid "Past 7 days" +msgstr "Последњих 7 дана" + +msgid "This month" +msgstr "Овај месец" + +msgid "This year" +msgstr "Ова година" + +msgid "No date" +msgstr "Нема датума" + +msgid "Has date" +msgstr "Има датум" + +msgid "Empty" +msgstr "Празно" + +msgid "Not empty" +msgstr "Није празно" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Молим вас унесите исправно %(username)s и лозинку. Обратите пажњу да мала и " +"велика слова представљају различите карактере." + +msgid "Action:" +msgstr "Радња:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Додај још један објекат класе %(verbose_name)s." + +msgid "Remove" +msgstr "Обриши" + +msgid "Addition" +msgstr "Додавања" + +msgid "Change" +msgstr "Измени" + +msgid "Deletion" +msgstr "Брисања" + +msgid "action time" +msgstr "време радње" + +msgid "user" +msgstr "корисник" + +msgid "content type" +msgstr "тип садржаја" + +msgid "object id" +msgstr "id објекта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "опис објекта" + +msgid "action flag" +msgstr "ознака радње" + +msgid "change message" +msgstr "опис измене" + +msgid "log entry" +msgstr "запис у логовима" + +msgid "log entries" +msgstr "записи у логовима" + +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Објекат уноса лога" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Додато." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Измењена поља {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Без измена у пољима." + +msgid "None" +msgstr "Ништа" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Можете га изменити опет испод" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Потребно је изабрати објекте да би се извршила акција над њима. Ниједан " +"објекат није промењен." + +msgid "No action selected." +msgstr "Није изабрана ниједна акција." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Додај објекат класе %s" + +#, python-format +msgid "Change %s" +msgstr "Измени објекат класе %s" + +#, python-format +msgid "View %s" +msgstr "Преглед %s" + +msgid "Database error" +msgstr "Грешка у бази података" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Успешно промењен %(count)s %(name)s." +msgstr[1] "Успешно промењена %(count)s %(name)s." +msgstr[2] "Успешно промењених %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s изабран" +msgstr[1] "Сва %(total_count)s изабрана" +msgstr[2] "Свих %(total_count)s изабраних" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 од %(cnt)s изабрано" + +#, python-format +msgid "Change history: %s" +msgstr "Историјат измена: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Да би избрисали %(class_name)s%(instance)s потребно је брисати и следеће " +"заштићене повезане објекте: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django администрација сајта" + +msgid "Django administration" +msgstr "Django администрација" + +msgid "Site administration" +msgstr "Администрација система" + +msgid "Log in" +msgstr "Пријава" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s администрација" + +msgid "Page not found" +msgstr "Страница није пронађена" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Почетна" + +msgid "Server error" +msgstr "Грешка на серверу" + +msgid "Server error (500)" +msgstr "Грешка на серверу (500)" + +msgid "Server Error (500)" +msgstr "Грешка на серверу (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Покрени одабрану радњу" + +msgid "Go" +msgstr "Почни" + +msgid "Click here to select the objects across all pages" +msgstr "Изабери све објекте на овој страници." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Изабери све %(module_name)s од %(total_count)s укупно." + +msgid "Clear selection" +msgstr "Поништи избор" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Модели у апликацији %(name)s" + +msgid "Add" +msgstr "Додај" + +msgid "View" +msgstr "Преглед" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Унесите корисничко име и лозинку" + +msgid "Change password" +msgstr "Промена лозинке" + +msgid "Please correct the error below." +msgstr "Молимо исправите грешку испод." + +msgid "Please correct the errors below." +msgstr "Исправите грешке испод." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Унесите нову лозинку за корисника %(username)s." + +msgid "Welcome," +msgstr "Добродошли," + +msgid "View site" +msgstr "Погледај сајт" + +msgid "Documentation" +msgstr "Документација" + +msgid "Log out" +msgstr "Одјава" + +#, python-format +msgid "Add %(name)s" +msgstr "Додај објекат класе %(name)s" + +msgid "History" +msgstr "Историјат" + +msgid "View on site" +msgstr "Преглед на сајту" + +msgid "Filter" +msgstr "Филтер" + +msgid "Clear all filters" +msgstr "Обриши све филтере" + +msgid "Remove from sorting" +msgstr "Избаци из сортирања" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Приоритет сортирања: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Укључи/искључи сортирање" + +msgid "Delete" +msgstr "Обриши" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Уклањање %(object_name)s „%(escaped_object)s“ повлачи уклањање свих објеката " +"који су повезани са овим објектом, али ваш налог нема дозволе за брисање " +"следећих типова објеката:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Да би избрисали изабран %(object_name)s „%(escaped_object)s“ потребно је " +"брисати и следеће заштићене повезане објекте:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Да сигурни да желите да обришете %(object_name)s „%(escaped_object)s“? " +"Следећи објекти који су у вези са овим објектом ће такође бити обрисани:" + +msgid "Objects" +msgstr "Објекти" + +msgid "Yes, I’m sure" +msgstr "Да, сигуран сам" + +msgid "No, take me back" +msgstr "Не, хоћу назад" + +msgid "Delete multiple objects" +msgstr "Брисање више објеката" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Да би избрисали изабране %(objects_name)s потребно је брисати и заштићене " +"повезане објекте, међутим ваш налог нема дозволе за брисање следећих типова " +"објеката:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Да би избрисали изабране %(objects_name)s потребно је брисати и следеће " +"заштићене повезане објекте:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Да ли сте сигурни да желите да избришете изабране %(objects_name)s? Сви " +"следећи објекти и објекти са њима повезани ће бити избрисани:" + +msgid "Delete?" +msgstr "Брисање?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Сумарно" + +msgid "Recent actions" +msgstr "Скорашње акције" + +msgid "My actions" +msgstr "Моје акције" + +msgid "None available" +msgstr "Нема података" + +msgid "Unknown content" +msgstr "Непознат садржај" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Пријављени сте као %(username)s, али немате овлашћења да приступите овој " +"страни. Да ли желите да се пријавите под неким другим налогом?" + +msgid "Forgotten your password or username?" +msgstr "Заборавили сте лозинку или корисничко име?" + +msgid "Toggle navigation" +msgstr "Укључи/искључи мени" + +msgid "Date/time" +msgstr "Датум/време" + +msgid "User" +msgstr "Корисник" + +msgid "Action" +msgstr "Радња" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Прикажи све" + +msgid "Save" +msgstr "Сачувај" + +msgid "Popup closing…" +msgstr "Попуп се затвара..." + +msgid "Search" +msgstr "Претрага" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s резултат" +msgstr[1] "%(counter)s резултата" +msgstr[2] "%(counter)s резултата" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "укупно %(full_result_count)s" + +msgid "Save as new" +msgstr "Сачувај као нови" + +msgid "Save and add another" +msgstr "Сачувај и додај следећи" + +msgid "Save and continue editing" +msgstr "Сачувај и настави са изменама" + +msgid "Save and view" +msgstr "Сними и погледај" + +msgid "Close" +msgstr "Затвори" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Измени одабрани модел %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Додај још један модел %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Обриши одабрани модел %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Хвала што сте данас провели време на овом сајту." + +msgid "Log in again" +msgstr "Поновна пријава" + +msgid "Password change" +msgstr "Измена лозинке" + +msgid "Your password was changed." +msgstr "Ваша лозинка је измењена." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Измени моју лозинку" + +msgid "Password reset" +msgstr "Ресетовање лозинке" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ваша лозинка је постављена. Можете се пријавити." + +msgid "Password reset confirmation" +msgstr "Потврда ресетовања лозинке" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Унесите нову лозинку два пута како бисмо могли да проверимо да ли сте је " +"правилно унели." + +msgid "New password:" +msgstr "Нова лозинка:" + +msgid "Confirm password:" +msgstr "Потврда лозинке:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Линк за ресетовање лозинке није важећи, вероватно зато што је већ " +"искоришћен. Поново затражите ресетовање лозинке." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Примате ову поруку зато што сте затражили ресетовање лозинке за кориснички " +"налог на сајту %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Идите на следећу страницу и поставите нову лозинку." + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Хвала што користите наш сајт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Екипа сајта %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Адреса е-поште:" + +msgid "Reset my password" +msgstr "Ресетуј моју лозинку" + +msgid "All dates" +msgstr "Сви датуми" + +#, python-format +msgid "Select %s" +msgstr "Одабери објекат класе %s" + +#, python-format +msgid "Select %s to change" +msgstr "Одабери објекат класе %s за измену" + +#, python-format +msgid "Select %s to view" +msgstr "Одабери %s за преглед" + +msgid "Date:" +msgstr "Датум:" + +msgid "Time:" +msgstr "Време:" + +msgid "Lookup" +msgstr "Претражи" + +msgid "Currently:" +msgstr "Тренутно:" + +msgid "Change:" +msgstr "Измена:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7c332517921a44984fa01e9640b6ffeead3c476 GIT binary patch literal 6125 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, 2018 +# Igor Jerosimić, 2021 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 16:56+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +#, javascript-format +msgid "Available %s" +msgstr "Доступни %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ово је листа доступних „%s“. Можете изабрати елементе тако што ћете их " +"изабрати у листи и кликнути на „Изабери“." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Филтрирајте листу доступних елемената „%s“." + +msgid "Filter" +msgstr "Филтер" + +msgid "Choose all" +msgstr "Изабери све" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Изаберите све „%s“ одједном." + +msgid "Choose" +msgstr "Изабери" + +msgid "Remove" +msgstr "Уклони" + +#, javascript-format +msgid "Chosen %s" +msgstr "Изабрано „%s“" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ово је листа изабраних „%s“. Можете уклонити елементе тако што ћете их " +"изабрати у листи и кликнути на „Уклони“." + +msgid "Remove all" +msgstr "Уклони све" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Уклоните све изабране „%s“ одједном." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s од %(cnt)s изабран" +msgstr[1] "%(sel)s од %(cnt)s изабрана" +msgstr[2] "%(sel)s од %(cnt)s изабраних" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Имате несачиване измене. Ако покренете акцију, измене ће бити изгубљене." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Изабрали сте акцију, али нисте сачували ваше промене у појединачна поља. " +"Кликните на OK да сачувате промене. Биће неопходно да поново покренете " +"акцију." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Изабрали сте акцију и нисте направили ниједну промену на појединачним " +"пољима. Вероватно тражите Крени дугме уместо Сачувај." + +msgid "Now" +msgstr "Тренутно време" + +msgid "Midnight" +msgstr "Поноћ" + +msgid "6 a.m." +msgstr "18ч" + +msgid "Noon" +msgstr "Подне" + +msgid "6 p.m." +msgstr "18ч" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Обавештење: %s сат сте испред серверског времена." +msgstr[1] "Обавештење: %s сата сте испред серверског времена." +msgstr[2] "Обавештење: %s сати сте испред серверског времена." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Обавештење: %s сат сте иза серверског времена." +msgstr[1] "Обавештење: %s сата сте иза серверског времена." +msgstr[2] "Обавештење: %s сати сте иза серверског времена." + +msgid "Choose a Time" +msgstr "Одаберите време" + +msgid "Choose a time" +msgstr "Одабир времена" + +msgid "Cancel" +msgstr "Поништи" + +msgid "Today" +msgstr "Данас" + +msgid "Choose a Date" +msgstr "Одаберите датум" + +msgid "Yesterday" +msgstr "Јуче" + +msgid "Tomorrow" +msgstr "Сутра" + +msgid "January" +msgstr "Јануар" + +msgid "February" +msgstr "Фебруар" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Мај" + +msgid "June" +msgstr "Јун" + +msgid "July" +msgstr "Јул" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Септембар" + +msgid "October" +msgstr "Октобар" + +msgid "November" +msgstr "Новембар" + +msgid "December" +msgstr "Децембар" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "јан" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "феб" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "март" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "апр" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "мај" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "јун" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "јул" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "авг" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "сеп" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "окт" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "нов" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "дец" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "У" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Покажи" + +msgid "Hide" +msgstr "Сакриј" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65c851bf901564118d2b2c80243e6ed5ceea9753 GIT binary patch literal 12383 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 U5jDL(C0lUwINjo-B%x*g7n7_efB*mh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 000000000..4c3d304a3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,694 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-27 12:37+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspešno obrisano: %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nesuspelo brisanje %(name)s" + +msgid "Are you sure?" +msgstr "Da li ste sigurni?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Briši označene objekte klase %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Svi" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Any date" +msgstr "Svi datumi" + +msgid "Today" +msgstr "Danas" + +msgid "Past 7 days" +msgstr "Poslednjih 7 dana" + +msgid "This month" +msgstr "Ovaj mesec" + +msgid "This year" +msgstr "Ova godina" + +msgid "No date" +msgstr "Nema datuma" + +msgid "Has date" +msgstr "Ima datum" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Molim vas unesite ispravno %(username)s i lozinku. Obratite pažnju da mala i " +"velika slova predstavljaju različite karaktere." + +msgid "Action:" +msgstr "Radnja:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj još jedan objekat klase %(verbose_name)s." + +msgid "Remove" +msgstr "Obriši" + +msgid "Addition" +msgstr "Dodavanja" + +msgid "Change" +msgstr "Izmeni" + +msgid "Deletion" +msgstr "Brisanja" + +msgid "action time" +msgstr "vreme radnje" + +msgid "user" +msgstr "korisnik" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "opis objekta" + +msgid "action flag" +msgstr "oznaka radnje" + +msgid "change message" +msgstr "opis izmene" + +msgid "log entry" +msgstr "zapis u logovima" + +msgid "log entries" +msgstr "zapisi u logovima" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Dodat objekat klase „%(object)s“." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Promenjen objekat klase „%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Uklonjen objekat klase „%(object)s“." + +msgid "LogEntry Object" +msgstr "Objekat unosa loga" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Dodat objekat {name} \"{object}\"." + +msgid "Added." +msgstr "Dodato." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Izmenjena polja {fields} za {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Izmenjena polja {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Obrisan objekat {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Bez izmena u poljima." + +msgid "None" +msgstr "Ništa" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Potrebno je izabrati objekte da bi se izvršila akcija nad njima. Nijedan " +"objekat nije promenjen." + +msgid "No action selected." +msgstr "Nije izabrana nijedna akcija." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Objekat „%(obj)s“ klase %(name)s uspešno je obrisan." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Dodaj objekat klase %s" + +#, python-format +msgid "Change %s" +msgstr "Izmeni objekat klase %s" + +#, python-format +msgid "View %s" +msgstr "Pregled %s" + +msgid "Database error" +msgstr "Greška u bazi podataka" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Uspešno promenjen %(count)s %(name)s." +msgstr[1] "Uspešno promenjena %(count)s %(name)s." +msgstr[2] "Uspešno promenjenih %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s izabran" +msgstr[1] "Sva %(total_count)s izabrana" +msgstr[2] "Svih %(total_count)s izabranih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s izabrano" + +#, python-format +msgid "Change history: %s" +msgstr "Istorijat izmena: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django administracija sajta" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija sistema" + +msgid "Log in" +msgstr "Prijava" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Stranica nije pronađena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Žao nam je, tražena stranica nije pronađena." + +msgid "Home" +msgstr "Početna" + +msgid "Server error" +msgstr "Greška na serveru" + +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +msgid "Server Error (500)" +msgstr "Greška na serveru (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Pokreni odabranu radnju" + +msgid "Go" +msgstr "Počni" + +msgid "Click here to select the objects across all pages" +msgstr "Izaberi sve objekte na ovoj stranici." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izaberi sve %(module_name)s od %(total_count)s ukupno." + +msgid "Clear selection" +msgstr "Poništi izbor" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Prvo unesite korisničko ime i lozinku. Potom ćete moći da menjate još " +"korisničkih podešavanja." + +msgid "Enter a username and password." +msgstr "Unesite korisničko ime i lozinku" + +msgid "Change password" +msgstr "Promena lozinke" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Unesite novu lozinku za korisnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "Pogledaj sajt" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj objekat klase %(name)s" + +msgid "History" +msgstr "Istorijat" + +msgid "View on site" +msgstr "Pregled na sajtu" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Izbaci iz sortiranja" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritet sortiranja: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Uključi/isključi sortiranje" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih " +"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za " +"brisanje sledećih tipova objekata:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Da bi izbrisali izabran %(object_name)s „%(escaped_object)s“ potrebno je " +"brisati i sledeće zaštićene povezane objekte:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Da sigurni da želite da obrišete %(object_name)s „%(escaped_object)s“? " +"Sledeći objekti koji su u vezi sa ovim objektom će takođe biti obrisani:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Da, siguran sam" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Brisanje više objekata" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Da bi izbrisali izabrane %(objects_name)s potrebno je brisati i zaštićene " +"povezane objekte, međutim vaš nalog nema dozvole za brisanje sledećih tipova " +"objekata:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Da bi izbrisali izabrane %(objects_name)s potrebno je brisati i sledeće " +"zaštićene povezane objekte:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Da li ste sigurni da želite da izbrišete izabrane %(objects_name)s? Svi " +"sledeći objekti i objekti sa njima povezani će biti izbrisani:" + +msgid "View" +msgstr "Pregled" + +msgid "Delete?" +msgstr "Brisanje?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Dodaj" + +msgid "You don't have permission to view or edit anything." +msgstr "Nemate dozvolu da pogledate ili izmenite bilo šta." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nema podataka" + +msgid "Unknown content" +msgstr "Nepoznat sadržaj" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nešto nije uredu sa vašom bazom podataka. Proverite da li postoje " +"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Zaboravili ste lozinku ili korisničko ime?" + +msgid "Date/time" +msgstr "Datum/vreme" + +msgid "User" +msgstr "Korisnik" + +msgid "Action" +msgstr "Radnja" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ovaj objekat nema zabeležen istorijat izmena. Verovatno nije dodat kroz ovaj " +"sajt za administraciju." + +msgid "Show all" +msgstr "Prikaži sve" + +msgid "Save" +msgstr "Sačuvaj" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Pretraga" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultat" +msgstr[1] "%(counter)s rezultata" +msgstr[2] "%(counter)s rezultata" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ukupno %(full_result_count)s" + +msgid "Save as new" +msgstr "Sačuvaj kao novi" + +msgid "Save and add another" +msgstr "Sačuvaj i dodaj sledeći" + +msgid "Save and continue editing" +msgstr "Sačuvaj i nastavi sa izmenama" + +msgid "Save and view" +msgstr "Snimi i pogledaj" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala što ste danas proveli vreme na ovom sajtu." + +msgid "Log in again" +msgstr "Ponovna prijava" + +msgid "Password change" +msgstr "Izmena lozinke" + +msgid "Your password was changed." +msgstr "Vaša lozinka je izmenjena." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Iz bezbednosnih razloga prvo unesite svoju staru lozinku, a novu zatim " +"unesite dva puta da bismo mogli da proverimo da li ste je pravilno uneli." + +msgid "Change my password" +msgstr "Izmeni moju lozinku" + +msgid "Password reset" +msgstr "Resetovanje lozinke" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaša lozinka je postavljena. Možete se prijaviti." + +msgid "Password reset confirmation" +msgstr "Potvrda resetovanja lozinke" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Unesite novu lozinku dva puta kako bismo mogli da proverimo da li ste je " +"pravilno uneli." + +msgid "New password:" +msgstr "Nova lozinka:" + +msgid "Confirm password:" +msgstr "Potvrda lozinke:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link za resetovanje lozinke nije važeći, verovatno zato što je već " +"iskorišćen. Ponovo zatražite resetovanje lozinke." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Idite na sledeću stranicu i postavite novu lozinku." + +msgid "Your username, in case you've forgotten:" +msgstr "Ukoliko ste zaboravili, vaše korisničko ime:" + +msgid "Thanks for using our site!" +msgstr "Hvala što koristite naš sajt!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Ekipa sajta %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Resetuj moju lozinku" + +msgid "All dates" +msgstr "Svi datumi" + +#, python-format +msgid "Select %s" +msgstr "Odaberi objekat klase %s" + +#, python-format +msgid "Select %s to change" +msgstr "Odaberi objekat klase %s za izmenu" + +#, python-format +msgid "Select %s to view" +msgstr "Odaberi %sza pregled" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Vreme:" + +msgid "Lookup" +msgstr "Pretraži" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..af577b2432ab03ea15c6351df0cfa38228d83422 GIT binary patch literal 5136 zcmbuBe{38_6~`y^N*lM7l0x{=7N#K%cAHz@xor|IaT_TiQ2Z$X-O5if|aWsvk- z0ZGr#gS7th;1|I2;OD@7n1t5-IY{&U3a^9UZ$KJ%8(!zYJHao3KLk7AX-xi3@TcIr zz?Z@IfdBN|aT9EWdJ)_SKH~XNkj7=;JHSib2Ao5E@|Jwx&v||Yr2T#!Bs;wTVhQ#=koJE8glX7Mz_)_G z@cb=^fA%U~B>yk)ZD0XH9NYF=4NB3t?I2viZUxDYw}aF_41NqOf@i_+fHeQ^ z9Xam?$51c%`V-*OsLzA6?w`Qp;3we((*M_pgD(apc){U%%P&7Eg4sQF{3Y;lOtJ?=na_P#oTc@&Oc>kKKoI zCrW_weiS#y7E#Ea^uS~;R_S{;N(F^{Pw`0)#YgWs>_5l{^xTuf#VYsT1j=Fe zqR^i9p&URVfAt=?oqZ66&gLQC2v<1Y5BvHAct6T}eVxuF%;Ee*O?RU_h%!zUJQOGN zP@bfR{7$j37iA9$#c>IR&L`zKdf=A)86HVxG@5cV&xc3q+Ts%pvTkL_w(8r*MGyyU zAMX$*JBf!)r3V-MsIYyts*3w+w!ap+v8mK< zvPjk2+!|hY({T|+Xy(FlgH-}{q}QLw*mR}qhiE=}L+q%m%eW>JHYICGCXyvKr6P;^ zhg2xpF`-@Cu`F6*$1*M1j7aKDyqDOF3bkr9EjwY1#>>hIKVvd3651?pnk?a>DMd*3 zOl8uQ38(D@o6AD=*DuU#vZ-|Vx~AP+w43kxgjrxG>(-D3PB}w)kiFQP?ATmxt_i_v zQ>7gLwkdg}QdoMPi#`VjZvU}Z>iHx!vE;QSA4N(xXlTrpc2m^MBK8rP1un1^^k`lu zr+GQPD-V=iuxJ9InzRcNGPJr~FdV~W8f>c6x}P^R@=@>xHOfu&zcex-!lP(4OB4IQx>Q))O*V%8$3+T(s zU$#6JAwpi0CxmWDoM{amLe*7aCL*jZqcC;Wfj9!Tlb9Ng=@O5OaSoU_h*nto5g0nN z7Q+*PIyGWp>X{>L^1fhe^&rHrR4>KYklK=U1!0q`6y!_N27ES>B9(b;@RP^MdNjVL zJW!EIH88%SQ!#40QD}Q~@6YT|Q40z`-75t^(56Rn1zW zc~IJAw*uY+;>dSsT^eXTfxJq&vw)9*E}v5h;6TrMPATAv84bHhiy-Gyi9(?#s1(yv*CkC(>F#ZtLgzMq%( zS4yRON_d7I6{#&&6QR>cSd&!vbOXoim`qHnVzssc0o}+%Ll&!2#1%d#lbS;KjXWx> z(xZH&X>F%6Hny;^5LlW<&CA80ZsM_AzaAn#%~+Zo#!5<$jSkIB&pf=bpK?$dI)Vt5 z8VVsnRk)RlcB~T#r4Q1XOj2nlPFJUj2R7tr#d(<&AJ%mfB1>2Jfts@GN>_MqxuMx8 zOGH$hGD)0PxbC=WI&tqoo_|h^=;3l{Vxr9V?BVoTx@)3b<`41`hdAmFOpN!s4o%!g zpKe6yP`SjPdMY0RnbIi6lrd&}^x)9O9VJ}9zo@gK2DP{75?l1CCMzFUTg_koUek5= znxi=DSw}0niOd?UE}gfEO=B^cD0VV*w33I2)wr+T#m|s*b(L^e(V{nur(Nm3p|9bW zm(LBSmzSUK^#+DVXy^Q%tUHjUm6gRO>% zYaFMpaU6$FN5;D2}e{DsWS_2`?zT1B8KMNqaH3Se9}bUtZ9o&7ZGD! z!&~_^OyCxgM`Lq6J_0^tE?tyxP970faopr%9CuuvMB8xq(D1btC(+yx%G|{cs`GZF z+E7k$Eoj#1Jhl;$@Mizo`TSaKwsw|><{Mo*w})H$sLa~ZOq3*ST~qJ=%t^(pJK zL%vyIo$l@+1&Hdk)!qq<^2inKx@u+Et;TqXt#%U8Rp``;j#ozaA{Z?rBXsbqfUGCh zR<(*zi&`oc0mn~-=?Zcpbb@Cv&2hL@@i1%P_M64H!Wmqa)>gBwXa)X+U$H(eaBfLb zA=GlpKo4fxmZi81%;Im3onUL9VW;u&AHN2N3;+NC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..4414514c1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po @@ -0,0 +1,269 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019,2021 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:00+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +#, javascript-format +msgid "Available %s" +msgstr "Dostupni %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ovo je lista dostupnih „%s“. Možete izabrati elemente tako što ćete ih " +"izabrati u listi i kliknuti na „Izaberi“." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Filtrirajte listu dostupnih elemenata „%s“." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Izaberi sve" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Izaberite sve „%s“ odjednom." + +msgid "Choose" +msgstr "Izaberi" + +msgid "Remove" +msgstr "Ukloni" + +#, javascript-format +msgid "Chosen %s" +msgstr "Izabrano „%s“" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ovo je lista izabranih „%s“. Možete ukloniti elemente tako što ćete ih " +"izabrati u listi i kliknuti na „Ukloni“." + +msgid "Remove all" +msgstr "Ukloni sve" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Uklonite sve izabrane „%s“ odjednom." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s od %(cnt)s izabran" +msgstr[1] "%(sel)s od %(cnt)s izabrana" +msgstr[2] "%(sel)s od %(cnt)s izabranih" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Imate nesačivane izmene. Ako pokrenete akciju, izmene će biti izgubljene." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Izabrali ste akciju, ali niste sačuvali vaše promene u pojedinačna polja. " +"Kliknite na OK da sačuvate promene. Biće neophodno da ponovo pokrenete " +"akciju." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Izabrali ste akciju i niste napravili nijednu promenu na pojedinačnim " +"poljima. Verovatno tražite Kreni dugme umesto Sačuvaj." + +msgid "Now" +msgstr "Trenutno vreme" + +msgid "Midnight" +msgstr "Ponoć" + +msgid "6 a.m." +msgstr "18č" + +msgid "Noon" +msgstr "Podne" + +msgid "6 p.m." +msgstr "18č" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Obaveštenje: Vi ste %s sat ispred serverskog vremena." +msgstr[1] "Obaveštenje: Vi ste %s sata ispred serverskog vremena." +msgstr[2] "Obaveštenje: Vi ste %s sati ispred serverskog vremena." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Obaveštenje: Vi ste %s sat iza serverskog vremena." +msgstr[1] "Obaveštenje: Vi ste %s sata iza serverskog vremena." +msgstr[2] "Obaveštenje: Vi ste %s sati iza serverskog vremena." + +msgid "Choose a Time" +msgstr "Odaberite vreme" + +msgid "Choose a time" +msgstr "Odabir vremena" + +msgid "Cancel" +msgstr "Poništi" + +msgid "Today" +msgstr "Danas" + +msgid "Choose a Date" +msgstr "Odaberite datum" + +msgid "Yesterday" +msgstr "Juče" + +msgid "Tomorrow" +msgstr "Sutra" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Jun" + +msgid "July" +msgstr "Jul" + +msgid "August" +msgstr "Avgust" + +msgid "September" +msgstr "Septembar" + +msgid "October" +msgstr "Oktobar" + +msgid "November" +msgstr "Novembar" + +msgid "December" +msgstr "Decembar" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "mart" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "maj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "avg" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "dec" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "N" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "U" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "S" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Č" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Pokaži" + +msgid "Hide" +msgstr "Sakrij" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3acb958de6c400ca0d712c4559717ec31401a852 GIT binary patch literal 16436 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, 2012 +# Andreas Pelme , 2014 +# d7bcbd5f5cbecdc2b959899620582440, 2011 +# Cybjit , 2012 +# Henrik Palmlund Wahlgren , 2019 +# Jannis Leidel , 2011 +# Johan Rohdin, 2021 +# Jonathan Lindén, 2015 +# Jonathan Lindén, 2014 +# metteludwig , 2019 +# Mattias Hansson , 2016 +# Mikko Hellsing , 2011 +# Thomas Lundqvist, 2013,2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 12:33+0000\n" +"Last-Translator: Johan Rohdin\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ta bort markerade %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Tog bort %(count)d %(items)s" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan inte ta bort %(name)s" + +msgid "Are you sure?" +msgstr "Är du säker?" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "Alla" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nej" + +msgid "Unknown" +msgstr "Okänt" + +msgid "Any date" +msgstr "Alla datum" + +msgid "Today" +msgstr "Idag" + +msgid "Past 7 days" +msgstr "Senaste 7 dagarna" + +msgid "This month" +msgstr "Denna månad" + +msgid "This year" +msgstr "Detta år" + +msgid "No date" +msgstr "Inget datum" + +msgid "Has date" +msgstr "Har datum" + +msgid "Empty" +msgstr "" + +msgid "Not empty" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ange %(username)s och lösenord för ett personalkonto. Notera att båda fälten " +"är skiftlägeskänsliga." + +msgid "Action:" +msgstr "Åtgärd:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Lägg till ytterligare %(verbose_name)s" + +msgid "Remove" +msgstr "Ta bort" + +msgid "Addition" +msgstr "Tillägg" + +msgid "Change" +msgstr "Ändra" + +msgid "Deletion" +msgstr "Borttagning" + +msgid "action time" +msgstr "händelsetid" + +msgid "user" +msgstr "användare" + +msgid "content type" +msgstr "innehållstyp" + +msgid "object id" +msgstr "objektets id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objektets beskrivning" + +msgid "action flag" +msgstr "händelseflagga" + +msgid "change message" +msgstr "ändra meddelande" + +msgid "log entry" +msgstr "loggpost" + +msgid "log entries" +msgstr "loggposter" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Lade till \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Ändrade “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Tog bort “%(object)s.”" + +msgid "LogEntry Object" +msgstr "LogEntry-Objekt" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Lade till {name} “{object}”." + +msgid "Added." +msgstr "Lagt till." + +msgid "and" +msgstr "och" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Ändrade {fields} för {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Ändrade {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Tog bort {name} “{object}”." + +msgid "No fields changed." +msgstr "Inga fält ändrade." + +msgid "None" +msgstr "Inget" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Håll inne “Control”, eller “Command” på en Mac, för att välja fler än en." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Lade till {name} “{obj}”." + +msgid "You may edit it again below." +msgstr "Du kan redigera det igen nedan" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "Lade till {name} “{obj}”. Du kan lägga till ytterligare {name} nedan." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "Ändrade {name} “{obj}”. Du kan göra ytterligare förändringar nedan." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "Lade till {name} “{obj}”. Du kan göra ytterligare förändringar nedan." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "Ändrade {name} “{obj}”. Du kan lägga till ytterligare {name} nedan." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Ändrade {name} “{obj}”." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Poster måste väljas för att genomföra åtgärder. Inga poster har ändrats." + +msgid "No action selected." +msgstr "Inga åtgärder valda." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Tog bort %(name)s “%(obj)s”." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s med ID “%(key)s” finns inte. Kan den ha blivit borttagen?" + +#, python-format +msgid "Add %s" +msgstr "Lägg till %s" + +#, python-format +msgid "Change %s" +msgstr "Ändra %s" + +#, python-format +msgid "View %s" +msgstr "Visa %s" + +msgid "Database error" +msgstr "Databasfel" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ändrades." +msgstr[1] "%(count)s %(name)s ändrades." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s vald" +msgstr[1] "Alla %(total_count)s valda" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 av %(cnt)s valda" + +#, python-format +msgid "Change history: %s" +msgstr "Ändringshistorik: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Borttagning av %(class_name)s %(instance)s kräver borttagning av följande " +"skyddade relaterade objekt: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django webbplatsadministration" + +msgid "Django administration" +msgstr "Django-administration" + +msgid "Site administration" +msgstr "Webbplatsadministration" + +msgid "Log in" +msgstr "Logga in" + +#, python-format +msgid "%(app)s administration" +msgstr "Administration av %(app)s" + +msgid "Page not found" +msgstr "Sidan kunde inte hittas" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Tyvärr kunde inte den begärda sidan hittas." + +msgid "Home" +msgstr "Hem" + +msgid "Server error" +msgstr "Serverfel" + +msgid "Server error (500)" +msgstr "Serverfel (500)" + +msgid "Server Error (500)" +msgstr "Serverfel (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ett fel har inträffat. Felet är rapporterat till sidans administratörer via " +"e-post och bör vara åtgärdat inom kort. Tack för ditt tålamod." + +msgid "Run the selected action" +msgstr "Kör markerade operationer" + +msgid "Go" +msgstr "Utför" + +msgid "Click here to select the objects across all pages" +msgstr "Klicka här för att välja alla objekt från alla sidor" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Välj alla %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Rensa urval" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeller i applikationen %(name)s" + +msgid "Add" +msgstr "Lägg till" + +msgid "View" +msgstr "Visa" + +msgid "You don’t have permission to view or edit anything." +msgstr "Du har inte tillåtelse att se eller ändra någonting." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Ange först ett användarnamn och ett lösenord. Därefter kan du ändra fler " +"egenskaper för användaren." + +msgid "Enter a username and password." +msgstr "Mata in användarnamn och lösenord." + +msgid "Change password" +msgstr "Ändra lösenord" + +msgid "Please correct the error below." +msgstr "Vänligen rätta nedanstående fel" + +msgid "Please correct the errors below." +msgstr "Vänligen rätta till felen nedan." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Ange nytt lösenord för användare %(username)s." + +msgid "Welcome," +msgstr "Välkommen," + +msgid "View site" +msgstr "Visa sida" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Log out" +msgstr "Logga ut" + +#, python-format +msgid "Add %(name)s" +msgstr "Lägg till %(name)s" + +msgid "History" +msgstr "Historik" + +msgid "View on site" +msgstr "Visa på webbplats" + +msgid "Filter" +msgstr "Filtrera" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Ta bort från sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteringsprioritet: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Ändra sorteringsordning" + +msgid "Delete" +msgstr "Radera" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Att ta bort %(object_name)s '%(escaped_object)s' skulle innebära att " +"relaterade objekt togs bort, men ditt konto har inte rättigheter att ta bort " +"följande objekttyper:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Borttagning av %(object_name)s '%(escaped_object)s' kräver borttagning av " +"följande skyddade relaterade objekt:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Är du säker på att du vill ta bort %(object_name)s \"%(escaped_object)s\"? " +"Följande relaterade objekt kommer att tas bort:" + +msgid "Objects" +msgstr "Objekt" + +msgid "Yes, I’m sure" +msgstr "Ja, jag är säker" + +msgid "No, take me back" +msgstr "Nej, ta mig tillbaka" + +msgid "Delete multiple objects" +msgstr "Ta bort flera objekt" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Borttagning av valda %(objects_name)s skulle resultera i borttagning av " +"relaterade objekt, men ditt konto har inte behörighet att ta bort följande " +"typer av objekt:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Borttagning av valda %(objects_name)s skulle kräva borttagning av följande " +"skyddade objekt:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Är du säker på att du vill ta bort valda %(objects_name)s? Alla följande " +"objekt samt relaterade objekt kommer att tas bort: " + +msgid "Delete?" +msgstr "Radera?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " På %(filter_title)s " + +msgid "Summary" +msgstr "Översikt" + +msgid "Recent actions" +msgstr "Senaste Händelser" + +msgid "My actions" +msgstr "Mina händelser" + +msgid "None available" +msgstr "Inga tillgängliga" + +msgid "Unknown content" +msgstr "Okänt innehåll" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Någonting är fel med din databas-installation. Kontrollera att relevanta " +"tabeller i databasen är skapta, och kontrollera även att databasen är läsbar " +"av rätt användare." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Du är autentiserad som %(username)s men är inte behörig att komma åt denna " +"sida. Vill du logga in med ett annat konto?" + +msgid "Forgotten your password or username?" +msgstr "Har du glömt lösenordet eller användarnamnet?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Datum tid" + +msgid "User" +msgstr "Användare" + +msgid "Action" +msgstr "Händelse" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Det här objektet har ingen förändringshistorik. Det var antagligen inte " +"tillagt via den här admin-sidan." + +msgid "Show all" +msgstr "Visa alla" + +msgid "Save" +msgstr "Spara" + +msgid "Popup closing…" +msgstr "Popup stängs..." + +msgid "Search" +msgstr "Sök" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultat" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totalt" + +msgid "Save as new" +msgstr "Spara som ny" + +msgid "Save and add another" +msgstr "Spara och lägg till ny" + +msgid "Save and continue editing" +msgstr "Spara och fortsätt redigera" + +msgid "Save and view" +msgstr "Spara och visa" + +msgid "Close" +msgstr "Stäng" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ändra markerade %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Lägg till %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Ta bort markerade %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Tack för att du spenderade lite kvalitetstid med webbplatsen idag." + +msgid "Log in again" +msgstr "Logga in igen" + +msgid "Password change" +msgstr "Ändra lösenord" + +msgid "Your password was changed." +msgstr "Ditt lösenord har ändrats." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vänligen ange ditt gamla lösenord, för säkerhets skull, och ange därefter " +"ditt nya lösenord två gånger så att vi kan kontrollera att du skrivit rätt." + +msgid "Change my password" +msgstr "Ändra mitt lösenord" + +msgid "Password reset" +msgstr "Nollställ lösenord" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ditt lösenord har ändrats. Du kan nu logga in." + +msgid "Password reset confirmation" +msgstr "Bekräftelse av lösenordsnollställning" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Var god fyll i ditt nya lösenord två gånger så vi kan kontrollera att du " +"skrev det rätt." + +msgid "New password:" +msgstr "Nytt lösenord:" + +msgid "Confirm password:" +msgstr "Bekräfta lösenord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Länken för lösenordsnollställning var felaktig, möjligen därför att den " +"redan använts. Var god skicka en ny nollställningsförfrågan." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Vi har via e-post skickat dig instruktioner för hur du ställer in ditt " +"lösenord, om ett konto finns med e-posten du angav. Du borde få " +"instruktionerna inom kort." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Om du inte fick ett e-postmeddelande; kontrollera att e-postadressen är " +"densamma som du registrerade dig med, och kolla i din skräppost." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Du får detta e-postmeddelande för att du har begärt återställning av ditt " +"lösenord av ditt konto på %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Var god gå till följande sida och välj ett nytt lösenord:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Ditt användarnamn, utifall du glömt det:" + +msgid "Thanks for using our site!" +msgstr "Tack för att du använder vår webbplats!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s-teamet" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Har du glömt ditt lösenord? Ange din e-postadress nedan, så skickar vi dig " +"instruktioner för hur du ställer in ett nytt." + +msgid "Email address:" +msgstr "E-postadress:" + +msgid "Reset my password" +msgstr "Nollställ mitt lösenord" + +msgid "All dates" +msgstr "Alla datum" + +#, python-format +msgid "Select %s" +msgstr "Välj %s" + +#, python-format +msgid "Select %s to change" +msgstr "Välj %s att ändra" + +#, python-format +msgid "Select %s to view" +msgstr "Välj %s för visning" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Tid:" + +msgid "Lookup" +msgstr "Uppslag" + +msgid "Currently:" +msgstr "Nuvarande:" + +msgid "Change:" +msgstr "Ändra:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5d202074ed27d7a770681a2376a8702a80ba2fff GIT binary patch literal 4500 zcmbuDUu+yl9mfY^N^xju0s#W0Obkh!HoLadC}}PPH6(Frw~npcH6;=+bGLJQ>)V|< z&CK5Uo+4f8c--h<@1K$E4LjRuw{~5Rslc&*t0DK?#DELY67X1AZNhF$p5sFF=y_Yw$eyJCNq>N9U{HA&}<10rtQvc=w>hOK6nzm1wIM>AoRZ#_!p4m{tYDi{2Qco-wy2u5Cqh} zKkyNd?0pENafd;ge*`4|%m#iDr1k#*z8m}_NaOz$_*W21uz!It72Ef4wa!D}_s~8F zehd5&NcLF9W=Y-}_%wJEq;+2fUj|i`Ml~Wb`6E5ya`=f3*>W=3^W7OP;v!~ec#m+g zXR@4KEYs3DcCjzATr_jZk6Ly~sFuvxrH=f7G=|v!VKABmOHec$r8zy zh4OvNWjXHjXo8=u{8ZJ6gBxFx3OBH~Epl2I$7iZQ znSn(O1~sJ{NQ|M?-9U3pmp0y2sZBp`X%wR19comW=znRX6NE=Y7n<~DjbTq>%ZOA* z_M=_nciTr9PxPSL(XRGnH>E`^k~oU2jzAobPb7@SMayMco%Hq_h5_oh2UaR=x@&m(F3b5ol8<7Ns|J z(xiG9@2wgJ@k!MzW+v2QHkE@lb|}Y((#3o&m%_>_D){QNWH*{$X^!)*BxIq}$jFqH zW|c`MlqyxVhsa$8@cQyNPn8}lho6`N*B^tm#%QA5}G^xA54UG_5?8qvL6oDrktaSL04@xVc^~GIgGU&RFR#Jl|N1p4u8mYqh0`uBetyZ~@i$Q_ak6 zs#)Whz;naCv{k$-%_>l{I;l%mr&2%aHo2j%ArYj9j=H4&o z&(!AU$GKGaTq=An%~%5gmyT|$G|y5&Iq+h?X@-v77~Rg-t0zYU@&s{JjN3RCS<)+2 zH;m(Sg>LV`RWHJD2z{3BV8Pp?yU1UV)+gzL@&T>Md!sufA|2gPX}n{w6S&}vt48-l zp6oIw8K>NKm2$Ij%DpW8G(5Xhcjz>eHwZHGa9|quYjb zLwZHRAQVmGpSPU&auM$AA=>AZ93ieDR{TR3Lhf=W8+%Mbhpa7jmlyy&|8k# z&BS{nvw~fQSB2jsr3u_i1>Jl1L_s#q}A zOw`MA1mk~GYY9goWlJ2HIK?+wy=$^QHl9d@z0mfzqMY)v!SVDTHrOH#?hXS(62jgv z*crD7vaCPQj*f%wVJ;DT6TrZfNVVdn`bVAxVVaRq6 ziv)sKLODTa9CE8Ddfrh?SAIaJRl?9$CZzE?977J+L#30j4}3PElch, 2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2014 +# Mattias Hansson , 2016 +# Mattias Benjaminsson , 2011 +# Samuel Linde , 2011 +# Thomas Lundqvist, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Mattias Hansson \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Tillgängliga %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Detta är listan med tillgängliga %s. Du kan välja ut vissa genom att markera " +"dem i rutan nedan och sedan klicka på \"Välj\"-knapparna mellan de två " +"rutorna." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skriv i denna ruta för att filtrera listan av tillgängliga %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Välj alla" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klicka för att välja alla %s på en gång." + +msgid "Choose" +msgstr "Välj" + +msgid "Remove" +msgstr "Ta bort" + +#, javascript-format +msgid "Chosen %s" +msgstr "Välj %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Detta är listan med utvalda %s. Du kan ta bort vissa genom att markera dem i " +"rutan nedan och sedan klicka på \"Ta bort\"-pilen mellan de två rutorna." + +msgid "Remove all" +msgstr "Ta bort alla" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klicka för att ta bort alla valda %s på en gång." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s av %(cnt)s markerade" +msgstr[1] "%(sel)s av %(cnt)s markerade" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Du har ändringar som inte sparats i enskilda redigerbara fält. Om du kör en " +"operation kommer de ändringar som inte sparats att gå förlorade." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Du har markerat en operation, men du har inte sparat sparat dina ändringar " +"till enskilda fält ännu. Var vänlig klicka OK för att spara. Du kommer att " +"behöva köra operationen på nytt." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Du har markerat en operation och du har inte gjort några ändringar i " +"enskilda fält. Du letar antagligen efter Utför-knappen snarare än Spara." + +msgid "Now" +msgstr "Nu" + +msgid "Midnight" +msgstr "Midnatt" + +msgid "6 a.m." +msgstr "06:00" + +msgid "Noon" +msgstr "Middag" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Notera: Du är %s timme före serverns tid." +msgstr[1] "Notera: Du är %s timmar före serverns tid." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Notera: Du är %s timme efter serverns tid." +msgstr[1] "Notera: Du är %s timmar efter serverns tid." + +msgid "Choose a Time" +msgstr "Välj en tidpunkt" + +msgid "Choose a time" +msgstr "Välj en tidpunkt" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Today" +msgstr "I dag" + +msgid "Choose a Date" +msgstr "Välj ett datum" + +msgid "Yesterday" +msgstr "I går" + +msgid "Tomorrow" +msgstr "I morgon" + +msgid "January" +msgstr "januari" + +msgid "February" +msgstr "februari" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "augusti" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "O" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Visa" + +msgid "Hide" +msgstr "Göm" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6e917f5d949f4f2bff1081e2eb531a09b6af94ba GIT binary patch literal 14353 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 IwF@-=1(RJ&ZvX%Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..1271dff51 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,676 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +# Machaku , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Umefanikiwa kufuta %(items)s %(count)d." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Huwezi kufuta %(name)s" + +msgid "Are you sure?" +msgstr "Una uhakika?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Futa %(verbose_name_plural)s teule" + +msgid "Administration" +msgstr "Utawala" + +msgid "All" +msgstr "yote" + +msgid "Yes" +msgstr "Ndiyo" + +msgid "No" +msgstr "Hapana" + +msgid "Unknown" +msgstr "Haijulikani" + +msgid "Any date" +msgstr "Tarehe yoyote" + +msgid "Today" +msgstr "Leo" + +msgid "Past 7 days" +msgstr "Siku 7 zilizopita" + +msgid "This month" +msgstr "mwezi huu" + +msgid "This year" +msgstr "Mwaka huu" + +msgid "No date" +msgstr "Hakuna tarehe" + +msgid "Has date" +msgstr "Kuna tarehe" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Tafadhali ingiza %(username)s na nywila sahihi kwa akaunti ya msimamizi. " +"Kumbuka kuzingatia herufi kubwa na ndogo." + +msgid "Action:" +msgstr "Tendo" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ongeza %(verbose_name)s" + +msgid "Remove" +msgstr "Ondoa" + +msgid "action time" +msgstr "muda wa tendo" + +msgid "user" +msgstr "mtumiaji" + +msgid "content type" +msgstr "aina ya maudhui" + +msgid "object id" +msgstr "Kitambulisho cha kitu" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "`repr` ya kitu" + +msgid "action flag" +msgstr "bendera ya tendo" + +msgid "change message" +msgstr "badilisha ujumbe" + +msgid "log entry" +msgstr "ingizo kwenye kumbukumbu" + +msgid "log entries" +msgstr "maingizo kwenye kumbukumbu" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Kuongezwa kwa \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Kubadilishwa kwa \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Kufutwa kwa \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "Kitu cha Ingizo la Kumbukumbu" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Kumeongezeka {name} \"{object}\"." + +msgid "Added." +msgstr "Imeongezwa" + +msgid "and" +msgstr "na" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Mabadiliko ya {fields} yamefanyika katika {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Mabadiliko yamefanyika katika {fields} " + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Futa {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Hakuna uga uliobadilishwa." + +msgid "None" +msgstr "Hakuna" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"Ingizo la {name} \"{obj}\" limefanyika kwa mafanikio. Unaweza kuhariri tena" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Nilazima kuchagua vitu ili kufanyia kitu fulani. Hakuna kitu " +"kilichochaguliwa." + +msgid "No action selected." +msgstr "Hakuna tendo lililochaguliwa" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Ufutaji wa \"%(obj)s\" %(name)s umefanikiwa." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ongeza %s" + +#, python-format +msgid "Change %s" +msgstr "Badilisha %s" + +msgid "Database error" +msgstr "Hitilafu katika hifadhidata" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "mabadiliko ya %(name)s %(count)s yamefanikiwa." +msgstr[1] "mabadiliko ya %(name)s %(count)s yamefanikiwa." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s kuchaguliwa" +msgstr[1] "%(total_count)s (kila kitu) kuchaguliwa" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Vilivyo chaguliwa ni 0 kati ya %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Badilisha historia: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(instance)s %(class_name)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Kufutwa kwa ingizo la %(instance)s %(class_name)s kutahitaji kufutwa kwa " +"vitu vifuatavyo vyenye mahusiano vilivyokingwa: %(related_objects)s" + +msgid "Django site admin" +msgstr "Utawala wa tovuti ya django" + +msgid "Django administration" +msgstr "Utawala wa Django" + +msgid "Site administration" +msgstr "Utawala wa tovuti" + +msgid "Log in" +msgstr "Ingia" + +#, python-format +msgid "%(app)s administration" +msgstr "Utawala wa %(app)s" + +msgid "Page not found" +msgstr "Ukurasa haujapatikana" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Samahani, ukurasa uliohitajika haukupatikana." + +msgid "Home" +msgstr "Sebule" + +msgid "Server error" +msgstr "Hitilafu ya seva" + +msgid "Server error (500)" +msgstr "Hitilafu ya seva (500)" + +msgid "Server Error (500)" +msgstr "Hitilafu ya seva (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Kumekuwa na hitilafu. Imeripotiwa kwa watawala kupitia barua pepe na " +"inatakiwa kurekebishwa mapema." + +msgid "Run the selected action" +msgstr "Fanya tendo lililochaguliwa." + +msgid "Go" +msgstr "Nenda" + +msgid "Click here to select the objects across all pages" +msgstr "Bofya hapa kuchagua viumbile katika kurasa zote" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Chagua kila %(module_name)s, (%(total_count)s). " + +msgid "Clear selection" +msgstr "Safisha chaguo" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Kwanza, ingiza jina lamtumiaji na nywila. Kisha, utaweza kuhariri zaidi " +"machaguo ya mtumiaji." + +msgid "Enter a username and password." +msgstr "Ingiza jina la mtumiaji na nywila." + +msgid "Change password" +msgstr "Badilisha nywila" + +msgid "Please correct the error below." +msgstr "Tafadhali sahihisha makosa yafuatayo " + +msgid "Please correct the errors below." +msgstr "Tafadhali sahihisha makosa yafuatayo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "ingiza nywila ya mtumiaji %(username)s." + +msgid "Welcome," +msgstr "Karibu" + +msgid "View site" +msgstr "Tazama tovuti" + +msgid "Documentation" +msgstr "Nyaraka" + +msgid "Log out" +msgstr "Toka" + +#, python-format +msgid "Add %(name)s" +msgstr "Ongeza %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Ona kwenye tovuti" + +msgid "Filter" +msgstr "Chuja" + +msgid "Remove from sorting" +msgstr "Ondoa katika upangaji" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Kipaumbele katika mpangilio: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Geuza mpangilio" + +msgid "Delete" +msgstr "Futa" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Kufutwa kwa '%(escaped_object)s' %(object_name)s kutasababisha kufutwa kwa " +"vitu vinavyohuisana, lakini akaunti yako haina ruhusa ya kufuta vitu vya " +"aina zifuatazo:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Kufuta '%(escaped_object)s' %(object_name)s kutahitaji kufuta vitu " +"vifuatavyo ambavyo vinavyohuisana na vimelindwa:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Una uhakika kuwa unataka kufuta \"%(escaped_object)s\" %(object_name)s ? " +"Vitu vyote vinavyohuisana kati ya vifuatavyo vitafutwa:" + +msgid "Objects" +msgstr "Viumbile" + +msgid "Yes, I'm sure" +msgstr "Ndiyo, Nina uhakika" + +msgid "No, take me back" +msgstr "Hapana, nirudishe" + +msgid "Delete multiple objects" +msgstr "Futa viumbile mbalimbali" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Kufutwa kwa %(objects_name)s chaguliwa kutasababisha kufutwa kwa " +"vituvinavyohusiana, lakini akaunti yako haina ruhusa ya kufuta vitu vya " +"vifuatavyo:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Kufutwa kwa %(objects_name)s kutahitaji kufutwa kwa vitu vifuatavyo vyenye " +"uhusiano na vilivyolindwa:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Una uhakika kuwa unataka kufuta %(objects_name)s chaguliwa ? Vitu vyote kati " +"ya vifuatavyo vinavyohusiana vitafutwa:" + +msgid "Change" +msgstr "Badilisha" + +msgid "Delete?" +msgstr "Futa?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Kwa %(filter_title)s" + +msgid "Summary" +msgstr "Muhtasari" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Models katika application %(name)s" + +msgid "Add" +msgstr "Ongeza" + +msgid "You don't have permission to edit anything." +msgstr "Huna ruhusa ya kuhariri chochote" + +msgid "Recent actions" +msgstr "Matendo ya karibuni" + +msgid "My actions" +msgstr "Matendo yangu" + +msgid "None available" +msgstr "Hakuna kilichopatikana" + +msgid "Unknown content" +msgstr "Maudhui hayajulikani" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Kuna tatizo limetokea katika usanikishaji wako wa hifadhidata. Hakikisha " +"kuwa majedwali sahihi ya hifadhidata yameundwa, na hakikisha hifadhidata " +"inaweza kusomwana mtumiaji sahihi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Umesahau jina na nenosiri lako?" + +msgid "Date/time" +msgstr "Tarehe/saa" + +msgid "User" +msgstr "Mtumiaji" + +msgid "Action" +msgstr "Tendo" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Kiumbile hiki hakina historia ya kubadilika. Inawezekana hakikuwekwa kupitia " +"hii tovuti ya utawala." + +msgid "Show all" +msgstr "Onesha yotee" + +msgid "Save" +msgstr "Hifadhi" + +msgid "Popup closing..." +msgstr "Udukizi unafunga" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Badili %(model)s husika" + +#, python-format +msgid "Add another %(model)s" +msgstr "Ongeza %(model)s tena" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Futa %(model)s husika" + +msgid "Search" +msgstr "Tafuta" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "tokeo %(counter)s" +msgstr[1] "matokeo %(counter)s" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "jumla %(full_result_count)s" + +msgid "Save as new" +msgstr "Hifadhi kama mpya" + +msgid "Save and add another" +msgstr "Hifadhi na ongeza" + +msgid "Save and continue editing" +msgstr "Hifadhi na endelea kuhariri" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Ahsante kwa kutumia muda wako katika Tovuti yetu leo. " + +msgid "Log in again" +msgstr "ingia tena" + +msgid "Password change" +msgstr "Badilisha nywila" + +msgid "Your password was changed." +msgstr "Nywila yako imebadilishwa" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Tafadhali ingiza nywila yako ya zamani, kwa ajili ya usalama, kisha ingiza " +"nywila mpya mara mbili ili tuweze kuthibitisha kuwa umelichapisha kwa " +"usahihi." + +msgid "Change my password" +msgstr "Badilisha nywila yangu" + +msgid "Password reset" +msgstr "Kuseti nywila upya" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Nywila yako imesetiwa. Unaweza kuendelea na kuingia sasa." + +msgid "Password reset confirmation" +msgstr "Uthibitisho wa kuseti nywila upya" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Tafadhali ingiza nywila mpya mara mbili ili tuweze kuthibitisha kuwa " +"umelichapisha kwa usahihi." + +msgid "New password:" +msgstr "Nywila mpya:" + +msgid "Confirm password:" +msgstr "Thibitisha nywila" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Kiungo cha kuseti nywila upya ni batili, inawezekana ni kwa sababu kiungo " +"hicho tayari kimetumika. tafadhali omba upya kuseti nywila." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ikiwa hujapata barua pepe, tafadhali hakikisha umeingiza anuani ya barua " +"pepe uliyoitumia kujisajili na angalia katika folda la spam" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Umepata barua pepe hii kwa sababu ulihitaji ku seti upya nywila ya akaunti " +"yako ya %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Tafadhali nenda ukurasa ufuatao na uchague nywila mpya:" + +msgid "Your username, in case you've forgotten:" +msgstr "Jina lako la mtumiaji, ikiwa umesahau:" + +msgid "Thanks for using our site!" +msgstr "Ahsante kwa kutumia tovui yetu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "timu ya %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Umesahau nywila yako? Ingiza anuani yako ya barua pepe hapo chini, nasi " +"tutakutumia maelekezo ya kuseti nenosiri jipya. " + +msgid "Email address:" +msgstr "Anuani ya barua pepe:" + +msgid "Reset my password" +msgstr "Seti nywila yangu upya" + +msgid "All dates" +msgstr "Tarehe zote" + +#, python-format +msgid "Select %s" +msgstr "Chagua %s" + +#, python-format +msgid "Select %s to change" +msgstr "Chaguo %s kwa mabadilisho" + +msgid "Date:" +msgstr "Tarehe" + +msgid "Time:" +msgstr "Saa" + +msgid "Lookup" +msgstr "`Lookup`" + +msgid "Currently:" +msgstr "Kwa sasa:" + +msgid "Change:" +msgstr "Badilisha:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..12f1466cf36601c7aa3d6d866e8772ed1a6391d1 GIT binary patch literal 3647 zcmb_eNsrt_6fPia!@lp~5h)~r*t4)CbO=fq2pO^snI1%h5PIFNZr8M3)!5~BoC8Qm za7Qc$#DRz(fVd)#{0NW$Ax>Plpd2ER1K+bf3or^{vBv(omiOv=-+NUxKis)CB>5S+wn>)QUmhbi1%K+ z5{EpHq<(H|QTTwix(BbsB9Fv!2i}{d(LQ$pQ4Z?Pwk`Z_X@7%G&HFy!t$6RoTgL}n zeGsxz+jr(V*_D$U(Dt2u>+usEy6<&#(Xl6q!!%R}Cu|b#C7QP9YMyOhCu%-+F4rv( zlQ-#lE2+nGZEJ(X^he|!^=lL2BtbW^CkIcVnqM8ybm}I$9>>(idVSgBhfcYII1`E#yCNfwHAfP0uCs~GYJ%bBb3x|PCsR+y#zvRqcJryF zI$1~Bf&{FVVppneY;wY%k2NJGhd=}34cdowkSSNIQsyqz)T`QL8aouzl#H!i^xSEX zOcQw5`eEHprG?QcwF*V~(uuOGhx*dAKR5we+krYLoXL88yQE9U~WU zrMfP4!drE#u|~)!FfaN^)c8H9%Y`CWHW6*Ar#hu`6qUG>@`)Mcx4JPP8gbtnXLr~7 zRqX`3!&Ax;>eNae*bX%|mIZ^zOiWa8g0*!L<+V0DP?6)z^{{&?N}Q|3A2^gFRDJ;> z7v94-W3;6ci^|B7FlolZi&MiS+DI*jWh6b>8ab%(7jjf-AJSr?IoC~9(1|0Wo7gwZ zu}!UpFLY))$clzpBgqC*g>9DHTnZf-U!NSSnk)=zy5eqwz%}1Ldnyem^sp6N?nAYh zxfPsP!9o=}@!+`Q6k>J$9K7j^#rW1}R?5`>zn2hW-Kw&>>SR)0k4?Ms8gJn3fsFQ z*T)MnOW%CGNDEZ5tg_mgRJZ|}hNA>4=jvHE0EJPp$}Oi+$u#EFt#H_mN*+dqvyl@M z5o}l_2Gcf9osWwZR)-8m)pBk|1=hy?w`{dK7{x_gfZUNH?G+>L(DF!jQ0*?o(W|K# zVHG=M)J4o>#S|g3=#%RS|Isq#e{b7b+NwzTU#@y-wo4$XPKapDmm2j?Sd9pAJsYxy zT;?LgD^-vaM6Fzth>(^om-@_x)byC6*wDoIq85HsOhjy{D9P~%U~*hw1*DI8EdNFr ztbk4|Fe-X=qEj@WHd2F2O>DQ-#zFx5y0xAdoG2#zCmfsN_`fOE>RpWCQSH5)!hSJ*_bxQ2UA4}5>hOr*Nm`3*EHA={uyKW vjKi6V!$@RU7|BV2$Q!4PH`(gO>fIZCaN6SvDs#naI>WMpaAO=>IE{V>)l@t2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..5806dd939 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po @@ -0,0 +1,217 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Yaliyomo: %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Hii ni orodha ya %s uliyochagua. Unaweza kuchagua baadhi vitu kwa kuvichagua " +"katika kisanduku hapo chini kisha kubofya mshale wa \"Chagua\" kati ya " +"visanduku viwili." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Chapisha katika kisanduku hiki ili kuchuja orodha ya %s iliyopo." + +msgid "Filter" +msgstr "Chuja" + +msgid "Choose all" +msgstr "Chagua vyote" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bofya kuchagua %s kwa pamoja." + +msgid "Choose" +msgstr "Chagua" + +msgid "Remove" +msgstr "Ondoa" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chaguo la %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Hii ni orodha ya %s uliyochagua. Unaweza kuondoa baadhi vitu kwa kuvichagua " +"katika kisanduku hapo chini kisha kubofya mshale wa \"Ondoa\" kati ya " +"visanduku viwili." + +msgid "Remove all" +msgstr "Ondoa vyote" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Bofya ili kuondoa %s chaguliwa kwa pamoja." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "umechagua %(sel)s kati ya %(cnt)s" +msgstr[1] "umechagua %(sel)s kati ya %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Umeacha kuhifadhi mabadiliko katika uga zinazoharirika. Ikiwa utafanya tendo " +"lingine, mabadiliko ambayo hayajahifadhiwa yatapotea." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Umechagua tendo, lakini bado hujahifadhi mabadiliko yako katika uga husika. " +"Tafadali bofya Sawa ukitaka kuhifadhi. Utahitajika kufanya upya kitendo " + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Umechagua tendo, lakini bado hujahifadhi mabadiliko yako katika uga husika. " +"Inawezekana unatafuta kitufe cha Nenda badala ya Hifadhi" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Kumbuka: Uko saa %s mbele ukilinganisha na majira ya seva" +msgstr[1] "Kumbuka: Uko masaa %s mbele ukilinganisha na majira ya seva" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Kumbuka: Uko saa %s nyuma ukilinganisha na majira ya seva" +msgstr[1] "Kumbuka: Uko masaa %s nyuma ukilinganisha na majira ya seva" + +msgid "Now" +msgstr "Sasa" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Chagua wakati" + +msgid "Midnight" +msgstr "Usiku wa manane" + +msgid "6 a.m." +msgstr "Saa 12 alfajiri" + +msgid "Noon" +msgstr "Adhuhuri" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Ghairi" + +msgid "Today" +msgstr "Leo" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Jana" + +msgid "Tomorrow" +msgstr "Kesho" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Onesha" + +msgid "Hide" +msgstr "Ficha" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..398f1f2850e8e8e7b35426612c95e4a23cd6c773 GIT binary patch literal 10179 zcmb7|eT-b^RmN{yH%%8BAhZMsls5@xZL%}FYZ5zN$4Q*TPF&*D#OsDYB=_#l-Q7uM z?%mvb$J14yWGf|U9b#2!t*Rejq*!VkmD!XefC_CSK2)Ln0pgD$Ar(yv3PK>EO6B7Z zK>VKbzIQ&>6DJ+{&NKJ@IPW>ndCs}l`wv&|I2Z9b$@Mc_fAP*JdJJs6n=d|d?}?%h zfb-zB;630K;4=6w@DcEb!8D9N9>zZbzL)W*z$?K|gTD!W9(*5o4TG|?6V$pH@M>^x zz@y-gaQ`s)V_*xs3j8>z_0NKG@pGW;{0`UyFM#s*1dFt<3F^GZL9P1~s8~M@5^D4Y zh)dDGfIGnNfm-*UpyK-9Fh4cr?OY9Np9AIZ4WRtm8}KkFzZb)O1Ne=RXSgbx?f$IVgW$2X+46 zfcwC2gF62MkRpA25M(I29=s8p19kqx;4ZKW;#%~30lxxj-yehgi~cl>zYfZuzYF-C zF#fOLXWv15pzQwkkHRJRWl(we7AQTu0e%qtA5eL?7ShGv0Z{871b2c@f&UDC1v~_P z7E-nUTcGOW-@sY$y^yQ<{on%lIM@RJ5WE?@fh7Jc_zFQd7KL*x8#qk^A{yFd-?)#wl+eOgI z>;2#@U>E!)@Fh^Z{}cF&;0}U42+o4q*9O1Kd7lBl&i!c@MbCjZUFUiICMY{MUGMX- z2JT?}lc4OLxgm;3ZS*3jxc>x{pRb4e?|?ezd*EM!*ZjQa@7ths^?gwB{~wrwGc0}> z{37^q@V`OnrTYv1yw8BL|1v0D{}m`+{{s}SbJKo&3A~B>vmox;=LFw`WBSk@@uah% z+CJ~&Td~~F^&u{(HSPiXKvA@t>pfh^%|3hiKF%dA>!VuMx%wR7A}q_R?%%Di@R3&J zzci!|ZbtWV&2cG?ySNC+KGFd+M0fk!=+=OD1QfiBOZBYJ&0Na$=;tIi;!&DZp2Xo1 zu034JpEGyAyS$+e&BDz1CD9^g`4Am8XtF4e~Sx%8Rgy3Kx3mmnn* z{W6#1Qtl6P=_B1Dr|3Seqg+>V>2n2_w6{Yy?#>OjbJt39ks> z@}%gr%2Uf(CoLH+vodZ)hnCA`mPUsf4P9(b<2IZ84bWmqtK}MTnQ)hG*sthNp16&y z{Hhk}`4ST7s!;>5*i)JmoFA>v!%-isg7cX`J#CyNl~@cQT%>*oKv? z)ylffbk*fai}M<;Stjkmb(^eNN`mdi!r1AzM|Z8o>1qOoFVih26dn5SJg z>$DogsBE}q>f;&>+tX9bxTQ`hnsXN~Th?47ONw;5bZhbH#H}ZJyIB;ZZyWPNBFl~S zq!7QsBwjxPTbYX+?Pdx=d2HzqqXmTfsp#%(xzkS4($60;MMX!Nc~Qap`p2Z0Y3ac)XgpG%MW-!f$Zv z1rXK`?@35f>b7+IQ29m?9d9K{|8kb+=-3i$Qb3FdwO-A8IxJ5aiLDeh!-2UglI2d` zEH|bLSHzDdGsYECNdt?vEggxB~-ysqYvf){=ZUxSXYBGwmR9vV#c2OyTe;I)TIqoSGW^QX)Om zjOF;|4y!uctx5Z~T{q9o?Y?!EU)7wioUqVyXN#f}YgyODG?xsA_0eGirHtvCt{WFsHzerg<)kRo;mwvdXmize%Oq}N zhd|n-dd>gz?O?o}#38RPG|sv^S~_@KBKQp*sm6nbP~hoi3>BEPHe$Xi33JQvA!*@DylP8aLl0v>sLm1UAHM6o?Q-AXH7t$y1Bf_@lzYpzXhh$L#!)MylW6Q`@+8&SwZ zvr+xZll440o@aV+){Zu6A4zgG_yyOnzCHCovYzE-?O3teY}D@TtQNJ!Y{5+(|L|h% zF3Fj-H9e>n+@87leYLsy+WdYuzjxuL{Ws3d&&{#0_CRvFDVt;K_E+oXZk*#Ybsuf8 zwwT9hL4{@cg8NXM^1N{OB~2dj?pD0v_Kud_)|=@{b{l)r)ef=N7LnY7Ta4SymfN*f zmg@_%v)yjD&eJ9>nk&i2>LhU1M^r&8Y@RLS+1*pejvhNajD5a7H+2`{g}>S&EpWk= z$;Zms^%hTt15#~H<2!hA@ks5K;X0kQlH|3+>2juuTyVE6HOqmM*odc&w>o*;svXJl zcCp~nb-OJN?m6K6&x5;CcillZzx%*cbjfQ~zxPzX_Xqv0XEin9{i@&V^|x5^jehR} ztMsjrXQO`a3pTM8w%h&F{oYHq>YV?^Xej$PnJ!$vx7FYJB!Ia~w)cBa_InqZAD+Io zIdEXY9CmOMJGl9pnI0}b+wZ;LL%7^3mORn#eLh6ddzl|B$6~d2(iKEiI#P+^%yG3xO-#cG%`J(MU-xmv8>|@neZPQm}(?)HD z(qd*6Ky`4B-PnIo_A2V?F6#F_Wma&jVoE7K$9^2*bonSNVv*CZSS1!p@DdC1cIb+X zpNn>mBy{^cTcF@2*&f@d`E6tU6V#__rzCz>lGJGpPLgDPe8B(+g>S`m+e5p zZ=v6zW~0iLEc0ko`u!pD{;th-Uy7R8z{MPYB#h-i4h+eBq?3%TzgF)DGZ04XGd})+6ky zZR%U6;)~xP8tNfyRsDE5)5(l!^A*lQarvx{CPtoNe)|wwtDM(~VLP;N!#BAe-66ri z33J41{K(l07PRhhm^mIx{FcvA)ilH(H{Rl)i*4GFTBKSmHzV-ACmN5@DOr;fzWjWcdTLxQb7~LU6@J!=D)8cs z5wRDPNWr8RqdkR0*swtA*keDn34=p-y%($`dY)zHj0yaL&#~?7MiztVL8A2C|S~jNKMsFIbUV_?Y9Og`5HSxjW)DLnz{f|IMwMCSCC)!pa34N>cMS}Co0ed0QU%#-7-7F+ zeuQDa{19wRrJ^94KGx^SYGgxBaDPxJRqQ^Jlnvz|jPorU`3B{*Ou~fU1{@fLBMJ#Huwb z``{3VvBLKmi`p{CGbR)z%V5Yqs(fC9EXE63w6i^I!XxZ*toLG6D^*|7f{|=O%?qYt zb=0Z}U;s;`Qf62|dFX~;!;tNy@PDk)!o>FGuq$Ad45Qwl&=8-+e$m@|D~D|>#a2EUR}?QJ*z6OE*q2iQsrZq3~@5>hm+x+ zY>#Q`?YK1fQwDzk2!Fvec@Vj`CC3$)9s<7M=)cq38@w?~%=lSpQ4S8CD|ou8>_Kz& zLNWfQ(AuC$>ybt7*-b~%JKxBj$^{~oc(+gb?0OM}^7AfNp;)G1n^*=fx_Iql37$qOHwE%jYr87 z|M8Rz_^1X&;oYA^f`upg&JRc$=v(WQ*D>Oog!Tlj66OS7{2Z{E)56Bb zH-PbRSCpHoprsOtWjq!eWgiQ1`~hHzE7wQU}W+ yrfPU90eG{eHW+F7546?qATeIBp`ZDOz0W$Nz;p;=Lhm!3=u9;1HC|Ph-}L_jl%{b2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..3a3cf1bb9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,643 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "உறுதியாக சொல்கிறீர்களா?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "அனைத்தும்" + +msgid "Yes" +msgstr "ஆம்" + +msgid "No" +msgstr "இல்லை" + +msgid "Unknown" +msgstr "தெரியாத" + +msgid "Any date" +msgstr "எந்த தேதியும்" + +msgid "Today" +msgstr "இன்று" + +msgid "Past 7 days" +msgstr "கடந்த 7 நாட்களில்" + +msgid "This month" +msgstr "இந்த மாதம்" + +msgid "This year" +msgstr "இந்த வருடம்" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "அழிக்க" + +msgid "action time" +msgstr "செயல் நேரம்" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "பொருள் அடையாளம்" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "பொருள் உருவகித்தம்" + +msgid "action flag" +msgstr "செயர்குறி" + +msgid "change message" +msgstr "செய்தியை மாற்று" + +msgid "log entry" +msgstr "புகுபதிவு உள்ளீடு" + +msgid "log entries" +msgstr "புகுபதிவு உள்ளீடுகள்" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "மற்றும்" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "எந்த புலமும் மாறவில்லை." + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக அழிக்கப்பட்டுள்ளது." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s யை சேர்க்க" + +#, python-format +msgid "Change %s" +msgstr "%s யை மாற்று" + +msgid "Database error" +msgstr "தகவல்சேமிப்பு பிழை" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "வரலாற்றை மாற்று: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "டிஜாங்ஙோ தள நிர்வாகி" + +msgid "Django administration" +msgstr "டிஜாங்ஙோ நிர்வாகம் " + +msgid "Site administration" +msgstr "இணைய மேலான்மை" + +msgid "Log in" +msgstr "உள்ளே போ" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "பக்கத்தைக் காணவில்லை" + +msgid "We're sorry, but the requested page could not be found." +msgstr "நீங்கள் விரும்பிய பக்கத்தை காண இயலவில்லை,அதற்காக நாங்கள் வருந்துகிறோம்." + +msgid "Home" +msgstr "வீடு" + +msgid "Server error" +msgstr "சேவகன் பிழை" + +msgid "Server error (500)" +msgstr "சேவையகம் தவறு(500)" + +msgid "Server Error (500)" +msgstr "சேவையகம் பிழை(500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "செல்" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"முதலில்,பயனர்ப்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.அதன் பிறகு தான் நீங்கள் உங்கள் பெயரின் " +"விவரங்களை திருத்த முடியும்" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "கடவுச்சொல்லை மாற்று" + +msgid "Please correct the error below." +msgstr "கீழே உள்ள தவறுகளைத் திருத்துக" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "நல்வரவு," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "ஆவனமாக்கம்" + +msgid "Log out" +msgstr "வெளியேறு" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s சேர்க்க" + +msgid "History" +msgstr "வரலாறு" + +msgid "View on site" +msgstr "தளத்தில் பார்" + +msgid "Filter" +msgstr "வடிகட்டி" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "நீக்குக" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"நீக்கும் '%(escaped_object)s' ஆனது %(object_name)s தொடர்புடைய மற்றவற்றையும் நீக்கும். " +"ஆனால் அதை நீக்குவதற்குரிய உரிமை உங்களுக்கு இல்லை" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"நீங்கள் இந்த \"%(escaped_object)s\" %(object_name)s நீக்குவதில் நிச்சயமா?தொடர்புடைய " +"மற்றவையும் நீக்கப்படும். " + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "ஆம், எனக்கு உறுதி" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "மாற்றுக" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s ஆல்" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "சேர்க்க" + +msgid "You don't have permission to edit anything." +msgstr "உங்களுக்கு மாற்றுவதற்குரிய உரிமையில்லை" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "எதுவும் கிடைக்கவில்லை" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"உங்களுடைய தகவல்சேமிப்பகத்தை நிறுவுவதில் சில தவறுகள் உள்ளது. அதற்கு இணையான " +"தகவல்சேமிப்பு அட்டவணையைதயாரிக்கவும். மேலும் பயனர் படிக்கும் படியான தகவல்சேமிப்பகத்தை " +"உருவாக்கவும்." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "தேதி/நேரம் " + +msgid "User" +msgstr "பயனர்" + +msgid "Action" +msgstr "செயல்" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"இந்த பொருள் மாற்று வரலாற்றில் இல்லைஒரு வேளை நிர்வாகத்தளத்தின் மூலம் சேர்க்கப்படாமலிருக்கலாம்" + +msgid "Show all" +msgstr "எல்லாவற்றையும் காட்டு" + +msgid "Save" +msgstr "சேமிக்க" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s மொத்தம்" + +msgid "Save as new" +msgstr "புதியதாக சேமி" + +msgid "Save and add another" +msgstr "சேமித்து இன்னுமொன்றைச் சேர்" + +msgid "Save and continue editing" +msgstr "சேமித்து மாற்றத்தை தொடருக" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "வலைத்தளத்தில் உங்களது பொன்னான நேரத்தை செலவழித்தமைக்கு மிகுந்த நன்றி" + +msgid "Log in again" +msgstr "மீண்டும் உள்ளே பதிவு செய்யவும்" + +msgid "Password change" +msgstr "கடவுச்சொல் மாற்று" + +msgid "Your password was changed." +msgstr "உங்களுடைய கடவுச்சொல் மாற்றபட்டது" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"பாதுகாப்பு காரணங்களுக்காக , முதலில் உங்களது பழைய கடவுச்சொல்லை உள்ளிடுக. அதன் பிறகு " +"புதிய கடவுச்சொல்லை இரு முறை உள்ளிடுக. இது உங்களது உள்ளிடுதலை சரிபார்க்க உதவும். " + +msgid "Change my password" +msgstr "கடவுச் சொல்லை மாற்றவும்" + +msgid "Password reset" +msgstr "கடவுச்சொல்லை மாற்றியமை" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "புதிய கடவுச்சொல்:" + +msgid "Confirm password:" +msgstr "கடவுச்சொலின் மாற்றத்தை உறுதிப்படுத்து:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "உங்களது பயனாளர் பெயர், நீங்கள் மறந்திருந்தால்:" + +msgid "Thanks for using our site!" +msgstr "எங்களது வலைத்தளத்தை பயன் படுத்தியதற்கு மிகுந்த நன்றி" + +#, python-format +msgid "The %(site_name)s team" +msgstr "இந்த %(site_name)s -இன் குழு" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "எனது கடவுச்சொல்லை மாற்றியமை" + +msgid "All dates" +msgstr "அனைத்து தேதியும்" + +#, python-format +msgid "Select %s" +msgstr "%s யை தேர்ந்தெடு" + +#, python-format +msgid "Select %s to change" +msgstr "%s யை மாற்ற தேர்ந்தெடு" + +msgid "Date:" +msgstr "தேதி:" + +msgid "Time:" +msgstr "நேரம்:" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..339311151934df01a30f236f83be8e2226fe6124 GIT binary patch literal 1379 zcmb7>%WD)d9LGnkuk}ei_`pXLgqD)somKmoTG3VuinXPzqQ|(K?xxHp%S`$@cqsVj zMUm1Tr3VFT53@cIL991VUOae|oc$xjZ!+E1tAXS*zvTOS&ac*%MGtEq_EGEw?1R|5 zH{rmlg4;j=?gr~?_C0V9?E7E_oCkM;&(_{wf;(U*U<>#W+yZ`Hd;bbR% z{|PQ&8|)*nC*X7ndhsTiHtC2{J^OB}l%k&nHVxeR}%HvE{RA!XdRix=qToGm3KT(Nk zQ3WJ3GF+qs5oa1&dYNe+kV4+?r1^8y?;?dWfnVsz7xH-s=_sERHs*$|i{^W%-$VS) z;H=+~$I4u1v8Kg{$v9+MMFF|Sq!cl^&PADr(1R0Y0)a!77{yio*3iP*^;W|(vF%4*PL^j<=QhtSBI`_^zLW#nE@p=m#Ar` zj^;F<*13AfgzP1yDvM&S`)(EoY4?WC<{IM>y&_AhEMz4h-FJmvFA_0WW+a@5SV#v| zREq;5>&}e(3cV!#>}!+cWFPU{do!L%7ESWSByUY)j&u@}Bqn)ol2t;y(=p6PCV6cd zvsTu4?8K`kd1I0n@FMX3U>cA-caKXhQi5;$GM{=P#eRYkv^p7 zLz681n-s;EhSR&;{}npz@;_=Z$%;$6;%Y?xCDevu&^#uC zVWM(-3lk5^&YnfPu2(y*S=$Vzj0wV_VZYOXLD3A|zy$D9-n*tyob!2LFVZA7!y>}K X, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s இருக்கிறதா " + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "வடிகட்டி" + +msgid "Choose all" +msgstr "எல்லாவற்றையும் தேர்ந்த்தெடுக்க" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "அழிக்க" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s தேர்ந்த்தெடுக்கப்பட்ட" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "இப்பொழுது " + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ஒரு நேரத்தை தேர்ந்த்தெடுக்க " + +msgid "Midnight" +msgstr "நடு இரவு " + +msgid "6 a.m." +msgstr "காலை 6 மணி " + +msgid "Noon" +msgstr "மதியம் " + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "வேண்டாம் " + +msgid "Today" +msgstr "இன்று " + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "நேற்று " + +msgid "Tomorrow" +msgstr "நாளை" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..17e7dc6bd4fa0bf83cccedb63d8aba406f754ac3 GIT binary patch literal 10590 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, 2011 +# Jannis Leidel , 2011 +# ప్రవీణ్ ఇళ్ళ , 2011,2013 +# వీవెన్ , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s జయప్రదముగా తీసేవేయబడినది." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s తొలగించుట వీలుకాదు" + +msgid "Are you sure?" +msgstr "మీరు ఖచ్చితంగా ఇలా చేయాలనుకుంటున్నారా?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "ఎంచుకోన్న %(verbose_name_plural)s తీసివేయుము " + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "అన్నీ" + +msgid "Yes" +msgstr "అవును" + +msgid "No" +msgstr "కాదు" + +msgid "Unknown" +msgstr "తెలియనది" + +msgid "Any date" +msgstr "ఏ రోజైన" + +msgid "Today" +msgstr "ఈ రోజు" + +msgid "Past 7 days" +msgstr "గత 7 రోజుల గా" + +msgid "This month" +msgstr "ఈ నెల" + +msgid "This year" +msgstr "ఈ సంవత్సరం" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "చర్య:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "తొలగించు" + +msgid "action time" +msgstr "పని సమయము " + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "వస్తువు" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "వస్తువు" + +msgid "action flag" +msgstr "పని ఫ్లాగ్" + +msgid "change message" +msgstr "సందేశము ని మార్చంది" + +msgid "log entry" +msgstr "లాగ్ ఎంట్రీ" + +msgid "log entries" +msgstr "లాగ్ ఎంట్రీలు" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "మరియు" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "క్షేత్రములు ఏమి మార్చబడలేదు" + +msgid "None" +msgstr "వొకటీ లేదు" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"అంశములపయి తదుపరి చర్య తీసుకోనటకు వాటిని ఎంపిక చేసుకోవలెను. ప్రస్తుతం ఎటువంటి అంశములు " +"మార్చబడలేదు." + +msgid "No action selected." +msgstr "మీరు ఎటువంటి చర్య తీసుకొనలేదు " + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" జయప్రదంగా తీసివేయబడ్డడి" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%sని జత చేయండి " + +#, python-format +msgid "Change %s" +msgstr "%sని మార్చుము" + +msgid "Database error" +msgstr "దత్తాంశస్థానము పొరబాటు " + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s జయప్రదముగా మార్చబడినవి." +msgstr[1] "%(count)s %(name)s జయప్రదముగా మార్చబడినవి." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s ఎంపికయినది." +msgstr[1] "అన్ని %(total_count)s ఎంపికయినవి." + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s ఎంపికయినవి." + +#, python-format +msgid "Change history: %s" +msgstr "చరిత్రం మార్చు: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "జాంగొ యొక్క నిర్వాహణదారులు" + +msgid "Django administration" +msgstr "జాంగొ నిర్వాహణ" + +msgid "Site administration" +msgstr "సైట్ నిర్వాహణ" + +msgid "Log in" +msgstr "ప్రవేశించండి" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "పుట దొరకలేదు" + +msgid "We're sorry, but the requested page could not be found." +msgstr "క్షమించండి మీరు కోరిన పుట దొరకలేడు" + +msgid "Home" +msgstr "నివాసము" + +msgid "Server error" +msgstr "సర్వర్ పొరబాటు" + +msgid "Server error (500)" +msgstr "సర్వర్ పొరబాటు (500)" + +msgid "Server Error (500)" +msgstr "సర్వర్ పొరబాటు (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "ఎంచుకున్న చర్యను నడుపు" + +msgid "Go" +msgstr "వెళ్లు" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "ఎంపికను తుడిచివేయి" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "ఒక వాడుకరిపేరు మరియు సంకేతపదాన్ని ప్రవేశపెట్టండి." + +msgid "Change password" +msgstr "సంకేతపదాన్ని మార్చుకోండి" + +msgid "Please correct the error below." +msgstr "క్రింద ఉన్న తప్పులు సరిదిద్దుకోండి" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "సుస్వాగతం" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "పత్రీకరణ" + +msgid "Log out" +msgstr "నిష్క్రమించండి" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s జత చేయు" + +msgid "History" +msgstr "చరిత్ర" + +msgid "View on site" +msgstr "సైట్ లో చూడండి" + +msgid "Filter" +msgstr "వడపోత" + +msgid "Remove from sorting" +msgstr "క్రమీకరణ నుండి తొలగించు" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "తొలగించు" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "అవును " + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "మార్చు" + +msgid "Delete?" +msgstr "తొలగించాలా?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "చేర్చు" + +msgid "You don't have permission to edit anything." +msgstr "మీకు ఏది మార్చటానికి అధికారము లేదు" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "ఏమి దొరకలేదు" + +msgid "Unknown content" +msgstr "తెలియని విషయం" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "మీ సంకేతపదం లేదా వాడుకరిపేరును మర్చిపోయారా?" + +msgid "Date/time" +msgstr "తేదీ/సమయం" + +msgid "User" +msgstr "వాడుకరి" + +msgid "Action" +msgstr "చర్య" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "అన్నీ చూపించు" + +msgid "Save" +msgstr "భద్రపరుచు" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "వెతుకు" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s ఫలితం" +msgstr[1] "%(counter)s ఫలితాలు" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s మొత్తము" + +msgid "Save as new" +msgstr "కొత్త దాని లా దాచు" + +msgid "Save and add another" +msgstr "దాచి కొత్త దానిని కలపండి" + +msgid "Save and continue editing" +msgstr "దాచి మార్చుటా ఉందండి" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "మళ్ళీ ప్రవేశించండి" + +msgid "Password change" +msgstr "అనుమతి పదం మార్పు" + +msgid "Your password was changed." +msgstr "మీ అనుమతి పదం మార్చబడిండి" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"దయచేసి రక్షన కోసము, మీ పాత అనుమతి పదం ఇవ్వండి , కొత్త అనుమతి పదం రెండు సార్లు ఇవ్వండి , " +"ఎం దుకంటే మీరు తప్పు ఇస్తే సరిచేయటానికి " + +msgid "Change my password" +msgstr "నా సంకేతపదాన్ని మార్చు" + +msgid "Password reset" +msgstr "అనుమతి పదం తిరిగి అమర్చు" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "మీ అనుమతి పదం మర్చుబడినది. మీరు ఇప్పుదు లాగ్ ఇన్ అవ్వచ్చు." + +msgid "Password reset confirmation" +msgstr "అనుమతి పదం తిరిగి మార్చు ఖాయం చెయండి" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"దయచేసి రక్షన కోసము, మీ పాత అనుమతి పదం ఇవ్వండి , కొత్త అనుమతి పదం రెండు సార్లు ఇవ్వండి , " +"ఎం దుకంటే మీరు తప్పు ఇస్తే సరిచేయటానికి " + +msgid "New password:" +msgstr "కొత్త సంకేతపదం:" + +msgid "Confirm password:" +msgstr "సంకేతపదాన్ని నిర్ధారించండి:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "మీ వాడుకరిపేరు, ఒక వేళ మీరు మర్చిపోయివుంటే:" + +msgid "Thanks for using our site!" +msgstr "మా సైటుని ఉపయోగిస్తున్నందుకు ధన్యవాదములు!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s జట్టు" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "ఈమెయిలు చిరునామా:" + +msgid "Reset my password" +msgstr "అనుమతిపదం తిరిగి అమర్చు" + +msgid "All dates" +msgstr "అన్నీ తేదీలు" + +#, python-format +msgid "Select %s" +msgstr "%s ని ఎన్నుకోండి" + +#, python-format +msgid "Select %s to change" +msgstr "%s ని మార్చటానికి ఎన్నుకోండి" + +msgid "Date:" +msgstr "తారీఖు:" + +msgid "Time:" +msgstr "సమయం:" + +msgid "Lookup" +msgstr "అంశ శోధన." + +msgid "Currently:" +msgstr "ప్రస్తుతం" + +msgid "Change:" +msgstr "మార్చు:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..92b65f1794ac8a4d3d74093edea919f0946ac91b GIT binary patch literal 1362 zcmah{J7^R^7+y8L*0&%Qii|}dAv~Cn4n@b#8a`H+)eH_?9CjzbBXCxP!mKE zAr^w55Tc0aMi8{nly)|1Co&c`Vxx_%-^^|j!NP%=Z@>9p-#6@+txeMo))wrY*fZGM zvG**)fi($S1)Kt|2i{Kkec%T08K4V%0bC1wlg8fxo50@#*8o4H{4;O`_*bCm`z^iy z0bB|G6KL{(15H0?x#LXZ+Xb5V0~BX~vp}Qw6R;ilE4^>Q(B0tYft!F6K%;vKxC?kU z#h1Ws;2%@|9k>I0Eryu7W}vBSPx%obWZ1PD=Vt7U*v9)hY=o^JQ@gOx()L*3kZ70j zW!@W>tXK1nP6uI`TE;m%#{7T{2b?rVPA?NB9yq;KDI-o8QGSgtvcLu+E=*>>A1EF= z$NVyP2K=({D^=y3l2YIpcZPUPj&bKq72ic!W)nDTG7Ld4@Cb$GYA}?eyrk&yGCjw` z$d|$+dkwPxtL38ai-$@F4 zy?mi9SIFg%NQd~CZ+b4}b<*5^n%__I9p1itTMo-T$s$FIArn!+lngy`f(hYAvs{T=kqS_S3GVJTq&A zhqO;SL6kkOj0~hPB8eqHbx_Q|KniXHSbDyL(8!wcAa83rEM- zbbLj}vwH5bj-TrIt&V5x_X|CDL&sA(eyrzi;>6EDkRIDyT$l=?<9mAUx{jZNAb3Z| z)3|%3<7eg$r_H&w*u-|8ww*Ebp^oQKb@i|CC6xas{ogQ@FNs9Mm$vm2J7xxa*4lzn zqY-{%>*$d+llX-n7&BrZ{E-bqK4PyE^NAIN;T3(6juT@aCOz?Dm#po1Gdy_^^Qx&q gOa^&^0rstpki~|RM!T7mwt}`~hS7=$N>XpmAAXDQy#N3J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..cfa35a1e0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po @@ -0,0 +1,205 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "ఆందుబాతులోఉన్న %s " + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "వడపోత" + +msgid "Choose all" +msgstr "అన్నీ ఎన్నుకోండి" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "తీసివేయండి" + +#, javascript-format +msgid "Chosen %s" +msgstr "ఎన్నుకున్న %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "ఇప్పుడు" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ఒక సమయము ఎన్నుకోండి" + +msgid "Midnight" +msgstr "ఆర్ధరాత్రి" + +msgid "6 a.m." +msgstr "6 a.m" + +msgid "Noon" +msgstr "మధ్యాహ్నము" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "రద్దు చేయు" + +msgid "Today" +msgstr "ఈనాడు" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "నిన్న" + +msgid "Tomorrow" +msgstr "రేపు" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "చూపించుము" + +msgid "Hide" +msgstr "దాచు" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..34085cb0f09a4c173aea86d153067c41fa1565ed GIT binary patch literal 15463 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..dee287266 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,699 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mariusz Felisiak , 2020 +# Surush Sufiew , 2020 +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-30 18:53+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Муваффақона нест сохтед %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Нест карда нашуд %(name)s" + +msgid "Are you sure?" +msgstr "Шумо рози ҳастед ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Нест сохтани интихобшудаҳо %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Маъмурият" + +msgid "All" +msgstr "Ҳама" + +msgid "Yes" +msgstr "Ҳа" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Номуайян" + +msgid "Any date" +msgstr "Санаи бефарқ" + +msgid "Today" +msgstr "Имрӯз" + +msgid "Past 7 days" +msgstr "7 рӯзи охир" + +msgid "This month" +msgstr "Моҳи ҷорӣ" + +msgid "This year" +msgstr "Соли ҷорӣ" + +msgid "No date" +msgstr "Сана ишора нашудааст" + +msgid "Has date" +msgstr "Сана ишора шудааст" + +msgid "Empty" +msgstr "Холӣ" + +msgid "Not empty" +msgstr "Холӣ нест" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Хоҳиш менамоем %(username)s ва рамзро дуруст ворид созед. Ҳарду майдон " +"метавонанд духура бошанд." + +msgid "Action:" +msgstr "Амал:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Боз якто %(verbose_name)s илова кардан" + +msgid "Remove" +msgstr "Нест кардан" + +msgid "Addition" +msgstr "Иловакунӣ" + +msgid "Change" +msgstr "Тағйир додан" + +msgid "Deletion" +msgstr "Несткунӣ" + +msgid "action time" +msgstr "вақти амал" + +msgid "user" +msgstr "истифодабаранда" + +msgid "content type" +msgstr "намуди контент" + +msgid "object id" +msgstr "идентификатори объект" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "намоиши объект" + +msgid "action flag" +msgstr "намуди амал" + +msgid "change message" +msgstr "хабар оиди тағйирот" + +msgid "log entry" +msgstr "қайд дар дафтар" + +msgid "log entries" +msgstr "қайдҳо дар дафтар" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Илова шуд \"%(object)s\"" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Қайд дар дафтар" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Илова шуд." + +msgid "and" +msgstr "ва" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Тағйир ёфт {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Ягон майдон тағйир наёфт." + +msgid "None" +msgstr "Не" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Шумо метавонед ин объектро дар поён аз нав тағйир диҳед." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Барои иҷрои амал лозим аст, ки объектро интихоб намоед. Тағйирот барои " +"объектҳо ворид нашуданд " + +msgid "No action selected." +msgstr "Ҳеҷ амал инихоб нашудааст." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Илова кардан %s" + +#, python-format +msgid "Change %s" +msgstr "Тағйир додан %s" + +#, python-format +msgid "View %s" +msgstr "Азназаргузаронӣ %s" + +msgid "Database error" +msgstr "Мушкилӣ дар базаи додаҳо" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Интихоб карда шуд 0 аз %(cnt)s " + +#, python-format +msgid "Change history: %s" +msgstr "Таърихи вориди тағйирот: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Несткунии объекти %(instance)s намуди %(class_name)s талаб мекунад, ки " +"объектҳои алоқамандшудаизерин низ нест карда шаванд: %(related_objects)s" + +msgid "Django site admin" +msgstr "Сомонаи маъмурии Django" + +msgid "Django administration" +msgstr "Маъмурияти Django" + +msgid "Site administration" +msgstr "Маъмурияти сомона" + +msgid "Log in" +msgstr "Ворид шудан" + +#, python-format +msgid "%(app)s administration" +msgstr "Маъмурияти барномаи «%(app)s»" + +msgid "Page not found" +msgstr "Саҳифа ёфт нашуд" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Асосӣ" + +msgid "Server error" +msgstr "Мушкилӣ дар сервер" + +msgid "Server error (500)" +msgstr "Мушкилӣ дар сервер (500)" + +msgid "Server Error (500)" +msgstr "Мушкилӣ дар сервер (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Иҷрои амалҳои ихтихобшуда" + +msgid "Go" +msgstr "Иҷро кардан" + +msgid "Click here to select the objects across all pages" +msgstr "Барои интихоби объектҳо дар ҳамаи саҳифаҳо, инҷоро пахш намоед" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Интихоби ҳамаи %(module_name)s (%(total_count)s)" + +msgid "Clear selection" +msgstr "Бекоркунии интихоб" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Моелҳои барномаи %(name)s" + +msgid "Add" +msgstr "Илова кардан" + +msgid "View" +msgstr "Азназаргузаронӣ" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Ном ва рамзро ворид созед." + +msgid "Change password" +msgstr "Тағйир додани рамз" + +msgid "Please correct the error below." +msgstr "Хоҳишмандем, хатогии зеринро ислоҳ кунед." + +msgid "Please correct the errors below." +msgstr "Хоҳишмандем, хатогиҳои зеринро ислоҳ кунед." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Рамзи навро ворид созед %(username)s." + +msgid "Welcome," +msgstr "Марҳамат," + +msgid "View site" +msgstr "Гузариш ба сомона" + +msgid "Documentation" +msgstr "Ҳуҷҷатнигорӣ" + +msgid "Log out" +msgstr "Баромад" + +#, python-format +msgid "Add %(name)s" +msgstr "Дохил кардани %(name)s" + +msgid "History" +msgstr "Таърих" + +msgid "View on site" +msgstr "Дар сомона дидан" + +msgid "Filter" +msgstr "Поло(Filter)" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Аз қайди навъҳо баровардан" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Бартарии навъҳо: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Навъҷудокунӣ дар дигар раванд" + +msgid "Delete" +msgstr "Нест кардан" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Нест кардани %(object_name)s '%(escaped_object)s' ба нестсозии объектҳои ба " +"он алоқаманд оварда мерасонад, аммо'ҳисоби корбарӣ'-и (аккаунт) шумо иҷозати " +"нестсозии объектҳои зеринро надорад:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Нестсозии %(object_name)s '%(escaped_object)s' талаб менамояд, ки " +"объектҳоиалоқаманди муҳофизатии зерин нест карда шаванд:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Шумо боварӣ доред, ки ин элементҳо нест карда шаванд: %(object_name)s " +"\"%(escaped_object)s\"? Ҳамаи объектҳои алоқаманди зерин низ нест карда " +"мешаванд:" + +msgid "Objects" +msgstr "Объектҳо" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "Не, баргаштан" + +msgid "Delete multiple objects" +msgstr "Нестсозии якчанд объектҳо" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Нест кардани %(objects_name)s ба нестсозии объектҳои ба он алоқаманд оварда " +"мерасонад, аммо'ҳисоби корбарӣ'-и (аккаунт) шумо иҷозати нестсозии объектҳои " +"зеринро надорад:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Нестсозии %(objects_name)s талаб менамояд, ки объектҳоиалоқаманди " +"муҳофизатии зерин нест карда шаванд:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Шумо боварӣ доред, ки ин элементҳо нест карда шаванд: %(objects_name)s? " +"Ҳамаи объектҳои алоқаманди зерин низ нест карда мешаванд:" + +msgid "Delete?" +msgstr "Нест кардан?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s" + +msgid "Summary" +msgstr "Мухтасар" + +msgid "Recent actions" +msgstr "Амалҳои охирин" + +msgid "My actions" +msgstr "Амалҳои ман" + +msgid "None available" +msgstr "Дастнорас" + +msgid "Unknown content" +msgstr "Шакли номуайян" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Шумо ба система ҳамчун %(username)s, ворид шудед, вале салоҳияти шумобарои " +"азназаргузарониисаҳифаи мазкур нокифоя аст. Шояд шумо мехоҳед бо истифода аз " +"дигар 'ҳисоби корбарӣ' вориди система шавед." + +msgid "Forgotten your password or username?" +msgstr "Рамз ё номро фаромӯш кардед?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Сана ва вақт" + +msgid "User" +msgstr "Истифодабар" + +msgid "Action" +msgstr "Амал" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Ҳамаро нишон додан" + +msgid "Save" +msgstr "Ҳифз кардан" + +msgid "Popup closing…" +msgstr "Равзанаи иловагӣ пӯшида мешавад..." + +msgid "Search" +msgstr "Ёфтан" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s ҳамаги" + +msgid "Save as new" +msgstr "Ҳамчун объекти нав ҳифз кардан" + +msgid "Save and add another" +msgstr "Ҳифз кардан ва объекти дигар илова кардан" + +msgid "Save and continue editing" +msgstr "Ҳифз кардан ва танзимотро давом додан" + +msgid "Save and view" +msgstr "Ҳифз кардан ва аз назар гузаронидан" + +msgid "Close" +msgstr "Пӯшидан" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Объекти интихобшударо тағйир додан: \"%(model)s\"" + +#, python-format +msgid "Add another %(model)s" +msgstr "Воридсозии боз як объекти \"%(model)s\"" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Объекти зерини интихобшударо нест кардан \"%(model)s\"" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Барои вақти дар ин сомона сарф кардаатон миннатдорем." + +msgid "Log in again" +msgstr "Аз нав ворид шудан" + +msgid "Password change" +msgstr "Тағйири рамз" + +msgid "Your password was changed." +msgstr "Рамзи шумо тағйир дода шуд." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Тағйири рамзи ман" + +msgid "Password reset" +msgstr "Барқароркунии рамз" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Рамзи шумо ҳифз шуд. Акнун шумо метавонед ворид шавед." + +msgid "Password reset confirmation" +msgstr "Барқароркунии рамз тасдиқ карда шуд." + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Хоҳиш мекунем рамзи нави худро ду маротиба(бояд ҳарду мувофиқат кунанд) " +"дохил кунед." + +msgid "New password:" +msgstr "Рамзи нав:" + +msgid "Confirm password:" +msgstr "Рамзи тасдиқӣ:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Суроға барои барқароркунии рамз нодуруст аст. Эҳтимол алакай як маротиба " +"истифода шудааст.Амали барқароркунии рамзро такрор намоед." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Шумо ин матубро гирифтед барои он, ки аз сомонаи %(site_name)s, ки бо ин " +"почтаи электронӣ алоқаманд аст,ба мо дархост барои барқароркунии рамз қабул " +"шуд." + +msgid "Please go to the following page and choose a new password:" +msgstr "Хоҳишмандем ба ин саҳифа гузаред ва рамзи навро ворид созед:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Барои аз сомонаи мо истифода карданатон сипосгузорем!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Гурӯҳи ташкили %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Суроғаи почтаи электронӣ:" + +msgid "Reset my password" +msgstr "Барқароркунии рамзи ман" + +msgid "All dates" +msgstr "Ҳама санаҳо" + +#, python-format +msgid "Select %s" +msgstr "Интихоб кунед %s" + +#, python-format +msgid "Select %s to change" +msgstr "Интихоби %s барои тағйирот ворид сохтан " + +#, python-format +msgid "Select %s to view" +msgstr "Интихоби %s барои азназаргузаронӣ" + +msgid "Date:" +msgstr "Сана:" + +msgid "Time:" +msgstr "Вақт:" + +msgid "Lookup" +msgstr "Ҷустуҷӯ" + +msgid "Currently:" +msgstr "Ҷорӣ:" + +msgid "Change:" +msgstr "Тағйир додан:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2c0655198bdb9c02abcbc3a8dcf7867058d9f539 GIT binary patch literal 5154 zcmc&#U2Ggz6}~{AjiEm@X`!@`8$;@(@veWQM(GBlrf%IP;3l#csz?E8ynDSn>Fmrh zKi>Eul9RM*RHU{k0n$>^zes>osADJCO>CzxJRl)-*G7Fp2!TL|7akBiBEIj=-M`qP zNFXuV*>CQdd(S=RJKwqU+dDRWN8lR3eJ}2d9};31*!vOu;o7@Nh>rmuwD=J4qZmJC z$D_bcV4SyO$6^_H3+#c#6BfS(?1KGe;AY@O;5Oh-f%gG_1-u#fcZ>f7a{rsKDIUeG zz?*eQt#_!qj`*!>n;8xh_ z>@L8azyLMr1>T17s|fOwz_)>ncLjgs{}y$AI_4DgBpASDt>P9mq5;2v*X_Y@4)yE7XJa{ zy3G&=aVroeu?-vB8@7sxurcD(s^A+CeB zt-vDi*C1^T?;k`FJ`B7CBolA9xW(dK7Voxruf=UZxG|alh~2nZ&(CvUFY4(txXDK! z?oZ?9)suqR&$gAZAT-l+tn=sW9MEt0;*dNvt}o!>emfxlmxI0K}XByL{4xVPg5#YSsL*=VO5$cuW~iTkr0?2%5kk_A)=`>Ubr ziTz0_iDI#T%5gns!c%fbB!(Topgb{L4uVKokdA!BiQ7hbx6(F>+ee;R8!6v7^W4Hy zG7eejSJR6$iHR47K&M3^|?v>0){7~{v? zq7nxk-`EZ&-n2NF_)3gAVWEuwX))>+eYaGO#S=l`<8LbU^F&Y+hYE2(pJQfg3yeUF zt7@Fi8!uyGzU)R4zqqWV=SGNqQaWvvW#y3|krijUk!2KAl$@BBk@8d_cKs5UR;242 z7Zbs8Iib9uCLO;>i!TeL!OoN2DfQjb2}4YpP;pIR4tI}hfy8nZWj73}$y_TU%jo2IGt-eV6_B;bD^O3@^gkB5h$aKyb1yKsl}A ztUT-~CsL_4>AU8O;yB}BASDYx$GI`}xax(86bDxqs%W+)I z_4U86mk6I$svA(3Q=y|=eI=}Xo&@bxi^%)qh z@o`Si*H70^)=vq24h!&rcR+qQ^m)Ckuj&=J(TjSyeo8OapV2G&l7tn`^<_P)mxX?V zU<@mA-NgE7yt|?=3;hy;`o8i1znF&DS^*(veHA-hLsB~;nL+X^v~@&XKZ6+vS?IHA zuw?25q;iQV>e(BnOXj4P(lvN)ZGlH@Lg%XsW-0Qy4wui=&)7xS9Vuspeyw3)ai$$$tmAn8ZTrCEVNyw&u}m5re&I0dq*#%rWNGCNLJ^t+XAM; z^99u6l(l2k`mE?{z11)yQPf$JQj2dY>^2xAFc9#KGhERk=4yX0IQ0Xki!7^n? zpb-P6we+2p`bU_$q*1#i1Y>rkOBT))rv5AfS=N{F3Ug-lLRxV+WA!9=tqdn{_2Dm{x^&H(;hu9#M)CZ-B(zjeUH2;52ccXGM zQLt?!j{}S9X(YH*HwvS?*(xBny=R*ZWQ3enpA>UVd+D>SbD*R2y{XX92dv~GDxB`V z2q&x%*fZUZR-&S5lH`#a)SpWa8Y2_-A_UK75Zx^~rQLdsDxp9+>d}6vAX|ijB+#^1 zjP6&z4JpAR7UCFa#%C5WNSrXI3`yNx-TEi1^Q<$%L)V)C`IxF1r!;vrS|(kR2i1BR zqG=b=<4|_ndERprQBm&eG`qUM&~BKF1kF}-WLmNF2xO!$Liy~K`m^Q`1R)iX#cH)ex7a+N#+kyV0FIqHH1f9kt&nx@2r%@T}I!Y_uYyl%Hi0TES*{kf7Hkq5G!LLy~ z!v=8;v9xU^^qU)U)5rawxhIZ+2^pO`M?|6WJ7kwkLe5>(~ZHK6NI0y rC2qBdXwuGX^4UD4&{lYB%90X=PyFi7a11~`__pH1i%*r%KNSB0rJvFS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..b5f4fdb42 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/tg/LC_MESSAGES/djangojs.po @@ -0,0 +1,222 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Surush Sufiew , 2020 +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-15 01:22+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Дастрас %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ин руйхати %s - ҳои дастрас. Шумо метавонед якчандто аз инҳоро дар " +"майдонипоён бо пахши тугмаи \\'Интихоб кардан'\\ интихоб намоед." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Барои баровардани рӯйхати %s. -ҳои дастрас, ба воридсозии матни лозима шурӯъ " +"кунед" + +msgid "Filter" +msgstr "Поло" + +msgid "Choose all" +msgstr "Интихоби кулл" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Барои якбора интихоб намудани кулли %s инҷоро пахш намоед." + +msgid "Choose" +msgstr "интихоб кардан" + +msgid "Remove" +msgstr "Нест кардан" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s -ҳои интихобшуда" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ин руйхати %s - ҳои интихобшуда. Шумо метавонед якчандто аз инҳоро дар " +"майдонипоён бо пахши тугмаи \\'Нест кардан'\\ нест созед." + +msgid "Remove all" +msgstr "Нест кардан ба таври кулл" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Пахш кунед барои якбора нест кардани ҳамаи %s." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Тағйиротҳои ҳифзнакардашуда дар майдони таҳрир мавҷуданд. Агаршумо иҷрои " +"амалро давом диҳед, онҳо нест хоҳанд шуд." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Шумо амалро интихоб намудед, вале ҳануз тағйиротҳои ворид кардашуда ҳифз " +"нашудаанд.\"\n" +"\"Барои ҳифз намудани онҳо ба тугмаи 'ОК' пахш намоед.\"\n" +"\"Сипас шуморо лозим меояд, ки амалро такроран иҷро намоед" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"\"Шумо амалрор интихоб намудед, вале тағйирот ворид насохтед.\"\n" +"\"Эҳтимол шумо мехостед ба ҷои тугмаи \\'Ҳифз кардан'\\, аз тугмаи \\'Иҷро " +"кардан'\\ истифода намоед.\"\n" +"\"Агар чунин бошад, он гоҳ тугмаи \\'Инкор'\\ пахш кунед, то ки ба майдони " +"таҳриркунӣ баргардед.\"" + +msgid "Now" +msgstr "Ҳозир" + +msgid "Midnight" +msgstr "Нисфишабӣ" + +msgid "6 a.m." +msgstr "6-и саҳар" + +msgid "Noon" +msgstr "Нисфирӯзӣ" + +msgid "6 p.m." +msgstr "6-и бегоҳӣ" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Choose a Time" +msgstr "Вақтро интихоб кунед" + +msgid "Choose a time" +msgstr "Вақтро интихоб кунед" + +msgid "Cancel" +msgstr "Инкор" + +msgid "Today" +msgstr "Имрӯз" + +msgid "Choose a Date" +msgstr "Санаро интихоб кунед" + +msgid "Yesterday" +msgstr "Дирӯз" + +msgid "Tomorrow" +msgstr "Фардо" + +msgid "January" +msgstr "Январ" + +msgid "February" +msgstr "Феврал" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрел" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июн" + +msgid "July" +msgstr "Июл" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябр" + +msgid "October" +msgstr "Октябр" + +msgid "November" +msgstr "Ноябр" + +msgid "December" +msgstr "Декабр" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Я" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Д" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "С" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ч" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "П" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Ҷ" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Ш" + +msgid "Show" +msgstr "Нишон додан" + +msgid "Hide" +msgstr "Пинҳон кардан" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5beeadd17229f310c2706a2980fc0655d26906cb GIT binary patch literal 16394 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, 2011 +# Kowit Charoenratchatabhan , 2013-2014,2017-2019 +# piti118 , 2012 +# Suteepat Damrongyingsupab , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 01:31+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s ถูกลบเรียบร้อยแล้ว" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "ไม่สามารถลบ %(name)s" + +msgid "Are you sure?" +msgstr "แน่ใจหรือ" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "ลบ %(verbose_name_plural)s ที่เลือก" + +msgid "Administration" +msgstr "การจัดการ" + +msgid "All" +msgstr "ทั้งหมด" + +msgid "Yes" +msgstr "ใช่" + +msgid "No" +msgstr "ไม่ใช่" + +msgid "Unknown" +msgstr "ไม่รู้" + +msgid "Any date" +msgstr "วันไหนก็ได้" + +msgid "Today" +msgstr "วันนี้" + +msgid "Past 7 days" +msgstr "สัปดาห์ที่แล้ว" + +msgid "This month" +msgstr "เดือนนี้" + +msgid "This year" +msgstr "ปีนี้" + +msgid "No date" +msgstr "ไม่รวมวันที่" + +msgid "Has date" +msgstr "รวมวันที่" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "กรุณาใส่ %(username)s และรหัสผ่านให้ถูกต้อง มีการแยกแยะตัวพิมพ์ใหญ่-เล็ก" + +msgid "Action:" +msgstr "คำสั่ง :" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "เพิ่ม %(verbose_name)s อีก" + +msgid "Remove" +msgstr "ถอดออก" + +msgid "Addition" +msgstr "เพิ่ม" + +msgid "Change" +msgstr "เปลี่ยนแปลง" + +msgid "Deletion" +msgstr "ลบ" + +msgid "action time" +msgstr "เวลาลงมือ" + +msgid "user" +msgstr "ผู้ใช้" + +msgid "content type" +msgstr "content type" + +msgid "object id" +msgstr "อ็อบเจ็กต์ไอดี" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "object repr" + +msgid "action flag" +msgstr "action flag" + +msgid "change message" +msgstr "เปลี่ยนข้อความ" + +msgid "log entry" +msgstr "log entry" + +msgid "log entries" +msgstr "log entries" + +#, python-format +msgid "Added “%(object)s”." +msgstr "" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "อ็อบเจ็กต์ LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "เพิ่มแล้ว" + +msgid "and" +msgstr "และ" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "เปลี่ยน {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "ไม่มีฟิลด์ใดถูกเปลี่ยน" + +msgid "None" +msgstr "ไม่มี" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "คุณสามารถแก้ไขได้อีกครั้งด้านล่าง" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"ไม่มีรายการใดถูกเปลี่ยน\n" +"รายการจะต้องถูกเลือกก่อนเพื่อที่จะทำตามคำสั่งได้" + +msgid "No action selected." +msgstr "ไม่มีคำสั่งที่ถูกเลือก" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "เพิ่ม %s" + +#, python-format +msgid "Change %s" +msgstr "เปลี่ยน %s" + +#, python-format +msgid "View %s" +msgstr "ดู %s" + +msgid "Database error" +msgstr "เกิดความผิดพลาดที่ฐานข้อมูล" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(name)s จำนวน %(count)s อันได้ถูกเปลี่ยนแปลงเรียบร้อยแล้ว." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s ได้ถูกเลือก" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "เลือก 0 จาก %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "เปลี่ยนแปลงประวัติ: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"กำลังลบ %(class_name)s %(instance)s จะต้องมีการลบอ็อบเจ็คต์ป้องกันที่เกี่ยวข้อง : " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "ผู้ดูแลระบบ Django" + +msgid "Django administration" +msgstr "การจัดการ Django" + +msgid "Site administration" +msgstr "การจัดการไซต์" + +msgid "Log in" +msgstr "เข้าสู่ระบบ" + +#, python-format +msgid "%(app)s administration" +msgstr "การจัดการ %(app)s" + +msgid "Page not found" +msgstr "ไม่พบหน้านี้" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "หน้าหลัก" + +msgid "Server error" +msgstr "เซิร์ฟเวอร์ขัดข้อง" + +msgid "Server error (500)" +msgstr "เซิร์ฟเวอร์ขัดข้อง (500)" + +msgid "Server Error (500)" +msgstr "เซิร์ฟเวอร์ขัดข้อง (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "รันคำสั่งที่ถูกเลือก" + +msgid "Go" +msgstr "ไป" + +msgid "Click here to select the objects across all pages" +msgstr "คลิกที่นี่เพื่อเลือกอ็อบเจ็กต์จากหน้าทั้งหมด" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "เลือกทั้งหมด %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "เคลียร์ตัวเลือก" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "กรุณาใส่ชื่อผู้ใช้และรหัสผ่าน" + +msgid "Change password" +msgstr "เปลี่ยนรหัสผ่าน" + +msgid "Please correct the error below." +msgstr "กรุณาแก้ไขข้อผิดพลาดด้านล่าง" + +msgid "Please correct the errors below." +msgstr "กรุณาแก้ไขข้อผิดพลาดด้านล่าง" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "ใส่รหัสผ่านใหม่สำหรับผู้ใช้ %(username)s." + +msgid "Welcome," +msgstr "ยินดีต้อนรับ," + +msgid "View site" +msgstr "ดูที่หน้าเว็บ" + +msgid "Documentation" +msgstr "เอกสารประกอบ" + +msgid "Log out" +msgstr "ออกจากระบบ" + +#, python-format +msgid "Add %(name)s" +msgstr "เพิ่ม %(name)s" + +msgid "History" +msgstr "ประวัติ" + +msgid "View on site" +msgstr "ดูที่หน้าเว็บ" + +msgid "Filter" +msgstr "ตัวกรอง" + +msgid "Remove from sorting" +msgstr "เอาออกจาก sorting" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "ลำดับการ sorting: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "เปิด/ปิด sorting" + +msgid "Delete" +msgstr "ลบ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"กำลังดำเนินการลบ %(object_name)s '%(escaped_object)s'และจะแสดงผลการลบ " +"แต่บัญชีของคุณไม่สามารถทำการลบข้อมูลชนิดนี้ได้" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"การลบ %(object_name)s '%(escaped_object)s' จำเป็นจะต้องลบอ็อบเจ็กต์ที่เกี่ยวข้องต่อไปนี้:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"คุณแน่ใจหรือที่จะลบ %(object_name)s \"%(escaped_object)s\"?" +"ข้อมูลที่เกี่ยวข้องทั้งหมดจะถูกลบไปด้วย:" + +msgid "Objects" +msgstr "อ็อบเจ็กต์" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "ไม่ พาฉันกลับ" + +msgid "Delete multiple objects" +msgstr "ลบหลายอ็อบเจ็กต์" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"การลบ %(objects_name)s ที่เลือก จะทำให้อ็อบเจ็กต์ที่เกี่ยวข้องถูกลบไปด้วย " +"แต่บัญชีของคุณไม่มีสิทธิ์ที่จะลบอ็อบเจ็กต์ชนิดนี้" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "การลบ %(objects_name)s ที่ถูกเลือก จำเป็นจะต้องลบอ็อบเจ็กต์ที่เกี่ยวข้องต่อไปนี้:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"คุณแน่ใจหรือว่า ต้องการลบ %(objects_name)s ที่ถูกเลือก? เนื่องจากอ็อบเจ็กต์ " +"และรายการที่เกี่ยวข้องทั้งหมดต่อไปนี้จะถูกลบด้วย" + +msgid "View" +msgstr "ดู:" + +msgid "Delete?" +msgstr "ลบ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " โดย %(filter_title)s " + +msgid "Summary" +msgstr "สรุป" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "โมเดลในแอป %(name)s" + +msgid "Add" +msgstr "เพิ่ม" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "การกระทำล่าสุด" + +msgid "My actions" +msgstr "การกระทำของฉัน" + +msgid "None available" +msgstr "ไม่ว่าง" + +msgid "Unknown content" +msgstr "ไม่ทราบเนื้อหา" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"คุณได้ลงชื่อเป็น %(username)s แต่ไม่ได้รับอนุญาตให้เข้าถึงหน้านี้ " +"คุณต้องการลงชื่อเข้าใช้บัญชีอื่นหรือไม่?" + +msgid "Forgotten your password or username?" +msgstr "ลืมรหัสผ่านหรือชื่อผู้ใช้ของคุณหรือไม่" + +msgid "Date/time" +msgstr "วันที่/เวลา" + +msgid "User" +msgstr "ผู้ใช้" + +msgid "Action" +msgstr "คำสั่ง" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "แสดงทั้งหมด" + +msgid "Save" +msgstr "บันทึก" + +msgid "Popup closing…" +msgstr "ปิดป๊อปอัป ..." + +msgid "Search" +msgstr "ค้นหา" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s ผลลัพธ์" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s ทั้งหมด" + +msgid "Save as new" +msgstr "บันทึกใหม่" + +msgid "Save and add another" +msgstr "บันทึกและเพิ่ม" + +msgid "Save and continue editing" +msgstr "บันทึกและกลับมาแก้ไข" + +msgid "Save and view" +msgstr "บันทึกและดู" + +msgid "Close" +msgstr "ปิด" + +#, python-format +msgid "Change selected %(model)s" +msgstr "เปลี่ยนแปลง %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "เพิ่ม %(model)sอีก" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "ลบ %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ขอบคุณที่สละเวลาอันมีค่าให้กับเว็บไซต์ของเราในวันนี้" + +msgid "Log in again" +msgstr "เข้าสู่ระบบอีกครั้ง" + +msgid "Password change" +msgstr "เปลี่ยนรหัสผ่าน" + +msgid "Your password was changed." +msgstr "รหัสผ่านของคุณถูกเปลี่ยนไปแล้ว" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "เปลี่ยนรหัสผ่านของฉัน" + +msgid "Password reset" +msgstr "ตั้งค่ารหัสผ่านใหม่" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "รหัสผ่านของคุณได้รับการตั้งค่าแล้ว คุณสามารถเข้าสู่ระบบได้ทันที" + +msgid "Password reset confirmation" +msgstr "การยืนยันตั้งค่ารหัสผ่านใหม่" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "กรุณาใส่รหัสผ่านใหม่สองครั้ง เพื่อตรวจสอบว่าคุณได้พิมพ์รหัสอย่างถูกต้อง" + +msgid "New password:" +msgstr "รหัสผ่านใหม่:" + +msgid "Confirm password:" +msgstr "ยืนยันรหัสผ่าน:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"การตั้งรหัสผ่านใหม่ไม่สำเร็จ เป็นเพราะว่าหน้านี้ได้ถูกใช้งานไปแล้ว กรุณาทำการตั้งรหัสผ่านใหม่อีกครั้ง" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"คุณได้รับอีเมล์ฉบับนี้ เนื่องจากคุณส่งคำร้องขอเปลี่ยนรหัสผ่านสำหรับบัญชีผู้ใช้ของคุณที่ %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "กรุณาไปที่หน้านี้และเลือกรหัสผ่านใหม่:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "ขอบคุณสำหรับการใช้งานเว็บไซต์ของเรา" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s ทีม" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "อีเมล:" + +msgid "Reset my password" +msgstr "ตั้งรหัสผ่านของฉันใหม่" + +msgid "All dates" +msgstr "ทุกวัน" + +#, python-format +msgid "Select %s" +msgstr "เลือก %s" + +#, python-format +msgid "Select %s to change" +msgstr "เลือก %s เพื่อเปลี่ยนแปลง" + +#, python-format +msgid "Select %s to view" +msgstr "เลือก %s เพื่อดู" + +msgid "Date:" +msgstr "วันที่ :" + +msgid "Time:" +msgstr "เวลา :" + +msgid "Lookup" +msgstr "ดูที่" + +msgid "Currently:" +msgstr "ปัจจุบัน:" + +msgid "Change:" +msgstr "เปลี่ยนเป็น:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..71eff638706d0be66e2132078894b7ca48f1b3cd GIT binary patch literal 6250 zcmd6qU2Ggz6~_k}XmO#CLR&rxy`z9O(l>R?_PT+ot?2} zX8rM$CRB00R0-m=NvqO2p`;(Glmt>{C8Qz{JXAb06`8Y50kR@CICC)`q=3N30fLFl^co#wCeH9dcAC$NgARlL%hwwZE z3eOXu#F+!HHp)cz*`Bf`0{N-klg<1n&W5-X(AX+{w$&gYV?{9(WJq zYx($J`S=b)Rj{7hkAk0N zd=C5~_y#ER{*dD}@EeT(4L%4yKoQ5mLGU2>7ASG=y$ep@22jR(K&Ch@DEWijei)QI zFXZ-1x&4ozo1CAaAPac;RDvS4~uz83N^ zZDFo&@)Vv@d%2LqT+*YW$2#r}+z)e$&dBeq=T_XJ?*O-)3#+;1Dsf9cJi;w~C)bxP zIQ<~)YW9)TLN4Sr`&zzBKS}S>Is{x7Ykz&L!ZEdaT{TGfia}QsUAykPP0B4ciq0lA zA+UWS@_c7|bG#WR&h|;y^W9NjtJSeH=mu5oJA?HwjCBsmRXg0IYgF+XU8AIX~;fV+uihMoZZbpJHu{Nt@E65hP_(gjn@?gz(D!Y(nF<Mh$C31t*`4|QSR@bnwlym65AWo)8gK5SJwtVpWC0*``7mk?;75@pu<41 z)HfIgi4Ne$7A>npPbd8ozUu{Br8lEkC)<8d87gd9@RM9)Ix6f8s$q?Ds;st*dP#>P zG3tFIelv3Y!cZ7B;<5@R%rM?IuvOWw+e%yeIzOjbdMrz?Wa;6hzqncY7WS-lBunSB zbT(@}lcguJ)^Yru<=&moTC-Vt&M}V6c*6ufZ%pZ%S^66ZA~8w#EHRzcahAT2rB|~S z9GGx5OW)2?CbY1Sf^VcJ>uYB6VH=sjZ;j)Uah6`p(#stR3yvlT@325UkC+F!?mMA( z*(}*IhveL1+RqEy1)3dZvcjCU$?ywdE$e){C%^nu8yR}@WUZgF6eHDz1r|bn&Pati z7ZK_DdC>EU&A>N4hi@g-S*xy*xm`mOGBxFU)l`;+N(r*`Y}PsjzcXfx_@rhXaG1q< zGS@=dMM`g9E((e>*5?-5#W>PLNKQgB;GTCE5ojK3GOd-R@c5i< zpUTo#+CJ!HEqsBf>#(u=f> zZ3x>61f=z>uO-T`-59bb%^BFjdCr^+@Mp@btqxYx0b(M=F;mX2gGd&EoxWR=L#hcQ zc($`jb9Bv>l+@~YCL|z@+iUG@L_o`i;JmVSlStOekW-spBtrX8>MSXJNjRG$Sgq>e zyGj|N6o-y)_ldAaJy~=QiJKHtc5+KX^ei;}Xi2TSA1-F6E&hL0wUl}CIehcNQa#(q zwq0eLu&d}ITRTdz=mooMUOePbq2#merlEPwkC4{5bsDw3t2U;BIT3Nyz+ew3RfA<8S}KxPJ8>XhnAYD, 2011 +# Kowit Charoenratchatabhan , 2011-2012,2018 +# Perry Roper , 2017 +# Suteepat Damrongyingsupab , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2018-05-06 07:50+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%sที่มีอยู่" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"นี่คือรายการที่ใช้ได้ของ %s คุณอาจเลือกบางรายการโดยการเลือกไว้ในกล่องด้านล่างแล้วคลิกที่ปุ่ม " +"\"เลือก\" ระหว่างสองกล่อง" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "พิมพ์ลงในช่องนี้เพื่อกรองรายการที่ใช้ได้ของ %s" + +msgid "Filter" +msgstr "ตัวกรอง" + +msgid "Choose all" +msgstr "เลือกทั้งหมด" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "คลิกเพื่อเลือก %s ทั้งหมดในครั้งเดียว" + +msgid "Choose" +msgstr "เลือก" + +msgid "Remove" +msgstr "ลบออก" + +#, javascript-format +msgid "Chosen %s" +msgstr "%sที่ถูกเลือก" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"นี่คือรายการที่ถูกเลือกของ %s คุณอาจเอาบางรายการออกโดยการเลือกไว้ในกล่องด้านล่างแล้วคลิกที่ปุ่ม " +"\"เอาออก\" ระหว่างสองกล่อง" + +msgid "Remove all" +msgstr "เอาออกทั้งหมด" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "คลิกเพื่อเอา %s ออกทั้งหมดในครั้งเดียว" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s จาก %(cnt)s selected" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"คุณยังไม่ได้บันทึกการเปลี่ยนแปลงในแต่ละฟิลด์ ถ้าคุณเรียกใช้คำสั่ง " +"ข้อมูลที่ไม่ได้บันทึกการเปลี่ยนแปลงของคุณจะหายไป" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"คุณได้เลือกคำสั่ง แต่คุณยังไม่ได้บันทึกการเปลี่ยนแปลงของคุณไปยังฟิลด์ กรุณาคลิก OK เพื่อบันทึก " +"คุณจะต้องเรียกใช้คำสั่งใหม่อีกครั้ง" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"คุณได้เลือกคำสั่งและคุณยังไม่ได้ทำการเปลี่ยนแปลงใด ๆ ในฟิลด์ คุณอาจมองหาปุ่มไปมากกว่าปุ่มบันทึก" + +msgid "Now" +msgstr "ขณะนี้" + +msgid "Midnight" +msgstr "เที่ยงคืน" + +msgid "6 a.m." +msgstr "หกโมงเช้า" + +msgid "Noon" +msgstr "เที่ยงวัน" + +msgid "6 p.m." +msgstr "หกโมงเย็น" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "หมายเหตุ: เวลาคุณเร็วกว่าเวลาบนเซิร์ฟเวอร์อยู่ %s ชั่วโมง." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "หมายเหตุ: เวลาคุณช้ากว่าเวลาบนเซิร์ฟเวอร์อยู่ %s ชั่วโมง." + +msgid "Choose a Time" +msgstr "เลือกเวลา" + +msgid "Choose a time" +msgstr "เลือกเวลา" + +msgid "Cancel" +msgstr "ยกเลิก" + +msgid "Today" +msgstr "วันนี้" + +msgid "Choose a Date" +msgstr "เลือกวัน" + +msgid "Yesterday" +msgstr "เมื่อวาน" + +msgid "Tomorrow" +msgstr "พรุ่งนี้" + +msgid "January" +msgstr "มกราคม" + +msgid "February" +msgstr "กุมภาพันธ์" + +msgid "March" +msgstr "มีนาคม" + +msgid "April" +msgstr "เมษายน" + +msgid "May" +msgstr "พฤษภาคม" + +msgid "June" +msgstr "มิถุนายน" + +msgid "July" +msgstr "กรกฎาคม" + +msgid "August" +msgstr "สิงหาคม" + +msgid "September" +msgstr "กันยายน" + +msgid "October" +msgstr "ตุลาคม" + +msgid "November" +msgstr "พฤศจิกายน" + +msgid "December" +msgstr "ธันวาคม" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "อา." + +msgctxt "one letter Monday" +msgid "M" +msgstr "จ." + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "อ." + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "พ." + +msgctxt "one letter Thursday" +msgid "T" +msgstr "พฤ." + +msgctxt "one letter Friday" +msgid "F" +msgstr "ศ." + +msgctxt "one letter Saturday" +msgid "S" +msgstr "ส." + +msgid "Show" +msgstr "แสดง" + +msgid "Hide" +msgstr "ซ่อน" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1a96bdbcfc7651538790177ce9462c6e7753c47 GIT binary patch literal 17266 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 YX3s%4>`t7i&WHkknYFq>ji%s#0CQH>1ONa4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..f7b9195ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,729 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2015-2020 +# BouRock, 2014-2015 +# Caner Başaran , 2013 +# Cihad GÜNDOĞDU , 2012 +# Cihad GÜNDOĞDU , 2014 +# Cihan Okyay , 2014 +# Jannis Leidel , 2011 +# Mesut Can Gürle , 2013 +# Murat Sahin , 2011 +# Yigit Guler , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-15 08:30+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d adet %(items)s başarılı olarak silindi." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s silinemiyor" + +msgid "Are you sure?" +msgstr "Emin misiniz?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Seçili %(verbose_name_plural)s nesnelerini sil" + +msgid "Administration" +msgstr "Yönetim" + +msgid "All" +msgstr "Tümü" + +msgid "Yes" +msgstr "Evet" + +msgid "No" +msgstr "Hayır" + +msgid "Unknown" +msgstr "Bilinmiyor" + +msgid "Any date" +msgstr "Herhangi bir tarih" + +msgid "Today" +msgstr "Bugün" + +msgid "Past 7 days" +msgstr "Son 7 gün" + +msgid "This month" +msgstr "Bu ay" + +msgid "This year" +msgstr "Bu yıl" + +msgid "No date" +msgstr "Tarih yok" + +msgid "Has date" +msgstr "Tarih var" + +msgid "Empty" +msgstr "Boş" + +msgid "Not empty" +msgstr "Boş değil" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Lütfen görevli hesabı için %(username)s ve parolanızı doğru girin. İki " +"alanın da büyük küçük harfe duyarlı olabildiğini unutmayın." + +msgid "Action:" +msgstr "Eylem:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Başka bir %(verbose_name)s ekle" + +msgid "Remove" +msgstr "Kaldır" + +msgid "Addition" +msgstr "Ekleme" + +msgid "Change" +msgstr "Değiştir" + +msgid "Deletion" +msgstr "Silme" + +msgid "action time" +msgstr "eylem zamanı" + +msgid "user" +msgstr "kullanıcı" + +msgid "content type" +msgstr "içerik türü" + +msgid "object id" +msgstr "nesne kimliği" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "nesne kodu" + +msgid "action flag" +msgstr "eylem işareti" + +msgid "change message" +msgstr "iletiyi değiştir" + +msgid "log entry" +msgstr "günlük girdisi" + +msgid "log entries" +msgstr "günlük girdisi" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” eklendi." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” değiştirildi — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "“%(object)s” silindi." + +msgid "LogEntry Object" +msgstr "LogEntry Nesnesi" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” eklendi." + +msgid "Added." +msgstr "Eklendi." + +msgid "and" +msgstr "ve" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} “{object}” için {fields} değiştirildi." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} değiştirildi." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}” silindi." + +msgid "No fields changed." +msgstr "Değiştirilen alanlar yok." + +msgid "None" +msgstr "Hiçbiri" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Birden fazla seçmek için “Ctrl” veya Mac’teki “Command” tuşuna basılı tutun." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” başarılı olarak eklendi." + +msgid "You may edit it again below." +msgstr "Aşağıdan bunu tekrar düzenleyebilirsiniz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” başarılı olarak eklendi. Aşağıda başka bir {name} " +"ekleyebilirsiniz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” başarılı olarak değiştirildi. Aşağıda tekrar " +"düzenleyebilirsiniz." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” başarılı olarak eklendi. Aşağıda tekrar düzenleyebilirsiniz." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” başarılı olarak değiştirildi. Aşağıda başka bir {name} " +"ekleyebilirsiniz." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” başarılı olarak değiştirildi." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Bunlar üzerinde eylemlerin uygulanması için öğeler seçilmek zorundadır. Hiç " +"öğe değiştirilmedi." + +msgid "No action selected." +msgstr "Seçilen eylem yok." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” başarılı olarak silindi." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "“%(key)s” kimliği olan %(name)s mevcut değil. Belki silinmiş midir?" + +#, python-format +msgid "Add %s" +msgstr "%s ekle" + +#, python-format +msgid "Change %s" +msgstr "%s değiştir" + +#, python-format +msgid "View %s" +msgstr "%s göster" + +msgid "Database error" +msgstr "Veritabanı hatası" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s adet %(name)s başarılı olarak değiştirildi." +msgstr[1] "%(count)s adet %(name)s başarılı olarak değiştirildi." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s nesne seçildi" +msgstr[1] "Tüm %(total_count)s nesne seçildi" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 / %(cnt)s nesne seçildi" + +#, python-format +msgid "Change history: %s" +msgstr "Değişiklik geçmişi: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s silinmesi aşağıda korunan ilgili nesnelerin de " +"silinmesini gerektirecektir: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django site yöneticisi" + +msgid "Django administration" +msgstr "Django yönetimi" + +msgid "Site administration" +msgstr "Site yönetimi" + +msgid "Log in" +msgstr "Oturum aç" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s yönetimi" + +msgid "Page not found" +msgstr "Sayfa bulunamadı" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Üzgünüz, istediğiniz sayfa bulunamadı." + +msgid "Home" +msgstr "Giriş" + +msgid "Server error" +msgstr "Sunucu hatası" + +msgid "Server error (500)" +msgstr "Sunucu hatası (500)" + +msgid "Server Error (500)" +msgstr "Sunucu Hatası (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Bir hata oluştu. Site yöneticilerine e-posta yoluyla bildirildi ve kısa süre " +"içinde düzeltilecektir. Sabrınız için teşekkür ederiz." + +msgid "Run the selected action" +msgstr "Seçilen eylemi çalıştır" + +msgid "Go" +msgstr "Git" + +msgid "Click here to select the objects across all pages" +msgstr "Tüm sayfalardaki nesneleri seçmek için buraya tıklayın" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Tüm %(total_count)s %(module_name)s nesnelerini seç" + +msgid "Clear selection" +msgstr "Seçimi temizle" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s uygulamasındaki modeller" + +msgid "Add" +msgstr "Ekle" + +msgid "View" +msgstr "Göster" + +msgid "You don’t have permission to view or edit anything." +msgstr "Hiçbir şeyi düzenlemek ve göstermek için izne sahip değilsiniz." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Önce, bir kullanıcı adı ve parola girin. Ondan sonra, daha fazla kullanıcı " +"seçeneğini düzenleyebileceksiniz." + +msgid "Enter a username and password." +msgstr "Kullanıcı adı ve parola girin." + +msgid "Change password" +msgstr "Parolayı değiştir" + +msgid "Please correct the error below." +msgstr "Lütfen aşağıdaki hataları düzeltin." + +msgid "Please correct the errors below." +msgstr "Lütfen aşağıdaki hataları düzeltin." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s kullanıcısı için yeni bir parola girin." + +msgid "Welcome," +msgstr "Hoş Geldiniz," + +msgid "View site" +msgstr "Siteyi göster" + +msgid "Documentation" +msgstr "Belgeler" + +msgid "Log out" +msgstr "Oturumu kapat" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s ekle" + +msgid "History" +msgstr "Geçmiş" + +msgid "View on site" +msgstr "Sitede görüntüle" + +msgid "Filter" +msgstr "Süz" + +msgid "Clear all filters" +msgstr "Tüm süzgeçleri temizle" + +msgid "Remove from sorting" +msgstr "Sıralamadan kaldır" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sıralama önceliği: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sıralamayı değiştir" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' nesnesinin silinmesi, ilgili nesnelerin " +"silinmesi ile sonuçlanacak, ancak hesabınız aşağıdaki nesnelerin türünü " +"silmek için izine sahip değil." + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' nesnesinin silinmesi, aşağıda korunan " +"ilgili nesnelerin silinmesini gerektirecek:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" nesnesini silmek istediğinize emin " +"misiniz? Aşağıdaki ilgili öğelerin tümü silinecektir:" + +msgid "Objects" +msgstr "Nesneler" + +msgid "Yes, I’m sure" +msgstr "Evet, eminim" + +msgid "No, take me back" +msgstr "Hayır, beni geri götür" + +msgid "Delete multiple objects" +msgstr "Birden fazla nesneyi sil" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Seçilen %(objects_name)s nesnelerinin silinmesi, ilgili nesnelerin silinmesi " +"ile sonuçlanacak, ancak hesabınız aşağıdaki nesnelerin türünü silmek için " +"izine sahip değil." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Seçilen %(objects_name)s nesnelerinin silinmesi, aşağıda korunan ilgili " +"nesnelerin silinmesini gerektirecek:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Seçilen %(objects_name)s nesnelerini silmek istediğinize emin misiniz? " +"Aşağıdaki nesnelerin tümü ve onların ilgili öğeleri silinecektir:" + +msgid "Delete?" +msgstr "Silinsin mi?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s süzgecine göre" + +msgid "Summary" +msgstr "Özet" + +msgid "Recent actions" +msgstr "Son eylemler" + +msgid "My actions" +msgstr "Eylemlerim" + +msgid "None available" +msgstr "Mevcut değil" + +msgid "Unknown content" +msgstr "Bilinmeyen içerik" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Veritabanı kurulumunuz ile ilgili birşeyler yanlış. Uygun veritabanı " +"tablolarının oluşturulduğundan ve veritabanının uygun kullanıcı tarafından " +"okunabilir olduğundan emin olun." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s olarak kimlik doğrulamanız yapıldı, ancak bu sayfaya erişmek " +"için yetkili değilsiniz. Farklı bir hesapla oturum açmak ister misiniz?" + +msgid "Forgotten your password or username?" +msgstr "Kullanıcı adınızı veya parolanızı mı unuttunuz?" + +msgid "Toggle navigation" +msgstr "Gezinmeyi aç/kapat" + +msgid "Date/time" +msgstr "Tarih/saat" + +msgid "User" +msgstr "Kullanıcı" + +msgid "Action" +msgstr "Eylem" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Bu nesne değişme geçmişine sahip değil. Muhtemelen bu yönetici sitesi " +"aracılığıyla eklenmedi." + +msgid "Show all" +msgstr "Tümünü göster" + +msgid "Save" +msgstr "Kaydet" + +msgid "Popup closing…" +msgstr "Açılır pencere kapanıyor…" + +msgid "Search" +msgstr "Ara" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s sonuç" +msgstr[1] "%(counter)s sonuç" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "toplam %(full_result_count)s" + +msgid "Save as new" +msgstr "Yeni olarak kaydet" + +msgid "Save and add another" +msgstr "Kaydet ve başka birini ekle" + +msgid "Save and continue editing" +msgstr "Kaydet ve düzenlemeye devam et" + +msgid "Save and view" +msgstr "Kaydet ve göster" + +msgid "Close" +msgstr "Kapat" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Seçilen %(model)s değiştir" + +#, python-format +msgid "Add another %(model)s" +msgstr "Başka bir %(model)s ekle" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Seçilen %(model)s sil" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Bugün Web sitesine ayırdığınız kaliteli zaman için teşekkür ederiz." + +msgid "Log in again" +msgstr "Tekrar oturum aç" + +msgid "Password change" +msgstr "Parola değiştime" + +msgid "Your password was changed." +msgstr "Parolanız değiştirildi." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Güvenliğiniz için, lütfen eski parolanızı girin, ve ondan sonra yeni " +"parolanızı iki kere girin böylece doğru olarak yazdığınızı doğrulayabilelim." + +msgid "Change my password" +msgstr "Parolamı değiştir" + +msgid "Password reset" +msgstr "Parolayı sıfırla" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Parolanız ayarlandı. Şimdi devam edebilir ve oturum açabilirsiniz." + +msgid "Password reset confirmation" +msgstr "Parola sıfırlama onayı" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Lütfen yeni parolanızı iki kere girin böylece böylece doğru olarak " +"yazdığınızı doğrulayabilelim." + +msgid "New password:" +msgstr "Yeni parola:" + +msgid "Confirm password:" +msgstr "Parolayı onayla:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Parola sıfırlama bağlantısı geçersiz olmuş, çünkü zaten kullanılmış. Lütfen " +"yeni bir parola sıfırlama isteyin." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Eğer girdiğiniz e-posta ile bir hesabınız varsa, parolanızın ayarlanması " +"için size talimatları e-posta ile gönderdik. En kısa sürede almalısınız." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Eğer bir e-posta almadıysanız, lütfen kayıt olurken girdiğiniz adresi " +"kullandığınızdan emin olun ve istenmeyen mesajlar klasörünü kontrol edin." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Bu e-postayı alıyorsunuz çünkü %(site_name)s sitesindeki kullanıcı hesabınız " +"için bir parola sıfırlama istediniz." + +msgid "Please go to the following page and choose a new password:" +msgstr "Lütfen şurada belirtilen sayfaya gidin ve yeni bir parola seçin:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Unutma ihtimalinize karşı, kullanıcı adınız:" + +msgid "Thanks for using our site!" +msgstr "Sitemizi kullandığınız için teşekkürler!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s ekibi" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Parolanızı mı unuttunuz? Aşağıya e-posta adresinizi girin ve yeni bir tane " +"ayarlamak için talimatları e-posta ile gönderelim." + +msgid "Email address:" +msgstr "E-posta adresi:" + +msgid "Reset my password" +msgstr "Parolamı sıfırla" + +msgid "All dates" +msgstr "Tüm tarihler" + +#, python-format +msgid "Select %s" +msgstr "%s seç" + +#, python-format +msgid "Select %s to change" +msgstr "Değiştirmek için %s seçin" + +#, python-format +msgid "Select %s to view" +msgstr "Göstermek için %s seçin" + +msgid "Date:" +msgstr "Tarih:" + +msgid "Time:" +msgstr "Saat:" + +msgid "Lookup" +msgstr "Arama" + +msgid "Currently:" +msgstr "Şu anda:" + +msgid "Change:" +msgstr "Değiştir:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..aff5543d9cefb5bdb905e8b3fa20b392c34345ae GIT binary patch literal 5121 zcmcJSU2I%O6~_m(o?|GtQF%RM7l;MC@LYNWV;=-R4ZaclQQ%KN z{IQ>f`Y*t@p#JMn|3l!P!M8&Ga^OD#cVVy*$ZrAP4BiF42P}bO;5>Lem<4_c#2>qi z7n$}2@J-;CLjCK3PlA|&eFwY_{4Pl2d@r>B5PS&rXTU0WGX|md7D)OIq;W6e1r>G) zBs(vIWak$_n*ST%m%(p>kAhPegy#J@NaOtyuOr|KAoaTmuP4CU!N_+-VDwKegdR^8Td}{5s>lphicrWU|#U^5@?8dj{+yl~jIY{dr18JS(Ao=ZZ;4$z< z)aSq(z=r~xL4Fa0Y3y_0IQSTN6ubh`eAl59jkgP=d3J*|@2w#1!=0gh3?%(xkl!2R zWe`hX)1f{Oehl^VAjSE5kne(#G|z63#=Qlk@$LZM4vvNPLqUE&_%+Dqz$d|%Li=Z+ zOyhhWJOn-p(s<8-bkLp$e*ntejC~v2gH52gdj=%EpN9Igq5fQ`KOgw3z!w647x??Y zKL-9O@Gl^?k-ZG!XtTctz7piGhWg(^{qLdv&rnAfwx3?%Az$tdzb8Smnd0zHl=q>) z4eSFbx1*F$-it!#|2`Co$07OH#u-)u13Z2al1tGSAA>7z#s8jq=%-<2}bS~*^&_2=gew6!B z4pIdV?KeG?C+QhSp%^`YGKNBNJAp#ylX4tAaBu#M?n`C7KjmhLkM65$ho2D0x|0#R zR@)R8rKH5Bc$+ZYwkl@RStCmwn_dyU6(PNX&RHt0513m;Rb3|l?>F} zU@i82Q>p!6v8uPYGraDH<06hB=E8A4G2`7@PvSz1oZDebHa(_gzXugRv;(Q6uZXVv9=)$?YBovk}V9ysS66+r%Ci?Z!< zy~QRJt4)=1{JEy&u}b0TB`yXwxa8NLh)#b`Qjx3v$xUeitp-Hx;@izj(KjNQ-82wBxynG^k*>rSVkuIY#|A%p zhP+4p`_|*!Yl+bywz6om+`8N~1BPWfpLA!3$VfS#ruv>awd75v;RYP-Egl|eMZts` zj)X~FiHTax%HEvqoC1nlc|*I9og?mldfN>1$Tz2PY0r7AGc) zlT&>1aQU8zyC?9Bd|0HeShYf@v2ezg`Eiq-GxZi4bR!cDS*%KtlzBC?EtNL;zNT~S z^7#15%1X&mH?<@$mg*)M&+X|W4&BF{9p67vIaN8iW%*=jVq^xfC^e==Dk^g)FS_w| zER;S%r_ZL+9X(&2Egss^qq&x(EuPeM6Cod$`JtL}n`UARJF*aGR>Z|wW0SPZb=z0d zqX&=h{O8eqn%~DK_a7PAygZB#+$*|IsW?*CYFZRE(d1LOS9G5)A=A&R6yZJHTf@b| zq^u&B>qso4DeHZ|?F42hSxq>$*xgudz(_WyR%3||wP>-bOp#Us)5qwcdIp zT8g(amqp0zHL;5QAg5{C5vW+{V%fo#w>UmB@9v%Q)CIkR>=mRwfG9 z8;$=mH19q|$NtJ1RBR#;h^rhYLbh<8Ti#^Z!L^S@Ta_AX&w~nA^uGJNQISGYO5nI{ z4h$>d%K}H>WN!^$TJmweGlLUjZsb?YeIQ@swTHuuH4_W$CK>IMvro+oDa@xY%2t%D hC{t0E^8Yj8T+?Z$Bg, 2011 +# Metin Amiroff , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-16 19:30+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mevcut %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Bu mevcut %s listesidir. Aşağıdaki kutudan bazılarını işaretleyerek ve ondan " +"sonra iki kutu arasındaki \"Seçin\" okuna tıklayarak seçebilirsiniz." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Mevcut %s listesini süzmek için bu kutu içine yazın." + +msgid "Filter" +msgstr "Süzgeç" + +msgid "Choose all" +msgstr "Tümünü seçin" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bir kerede tüm %s seçilmesi için tıklayın." + +msgid "Choose" +msgstr "Seçin" + +msgid "Remove" +msgstr "Kaldır" + +#, javascript-format +msgid "Chosen %s" +msgstr "Seçilen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Bu seçilen %s listesidir. Aşağıdaki kutudan bazılarını işaretleyerek ve " +"ondan sonra iki kutu arasındaki \"Kaldır\" okuna tıklayarak " +"kaldırabilirsiniz." + +msgid "Remove all" +msgstr "Tümünü kaldır" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Bir kerede tüm seçilen %s kaldırılması için tıklayın." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s / %(cnt)s seçildi" +msgstr[1] "%(sel)s / %(cnt)s seçildi" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bireysel düzenlenebilir alanlarda kaydedilmemiş değişiklikleriniz var. Eğer " +"bir eylem çalıştırırsanız, kaydedilmemiş değişiklikleriniz kaybolacaktır." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Bir eylem seçtiniz, ancak değişikliklerinizi tek tek alanlara kaydetmediniz. " +"Kaydetmek için lütfen TAMAM düğmesine tıklayın. Eylemi yeniden çalıştırmanız " +"gerekecek." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Bir eylem seçtiniz, ancak tek tek alanlarda herhangi bir değişiklik " +"yapmadınız. Muhtemelen Kaydet düğmesi yerine Git düğmesini arıyorsunuz." + +msgid "Now" +msgstr "Şimdi" + +msgid "Midnight" +msgstr "Geceyarısı" + +msgid "6 a.m." +msgstr "Sabah 6" + +msgid "Noon" +msgstr "Öğle" + +msgid "6 p.m." +msgstr "6 ö.s." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Not: Sunucu saatinin %s saat ilerisindesiniz." +msgstr[1] "Not: Sunucu saatinin %s saat ilerisindesiniz." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Not: Sunucu saatinin %s saat gerisindesiniz." +msgstr[1] "Not: Sunucu saatinin %s saat gerisindesiniz." + +msgid "Choose a Time" +msgstr "Bir Saat Seçin" + +msgid "Choose a time" +msgstr "Bir saat seçin" + +msgid "Cancel" +msgstr "İptal" + +msgid "Today" +msgstr "Bugün" + +msgid "Choose a Date" +msgstr "Bir Tarih Seçin" + +msgid "Yesterday" +msgstr "Dün" + +msgid "Tomorrow" +msgstr "Yarın" + +msgid "January" +msgstr "Ocak" + +msgid "February" +msgstr "Şubat" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Nisan" + +msgid "May" +msgstr "Mayıs" + +msgid "June" +msgstr "Haziran" + +msgid "July" +msgstr "Temmuz" + +msgid "August" +msgstr "Ağustos" + +msgid "September" +msgstr "Eylül" + +msgid "October" +msgstr "Ekim" + +msgid "November" +msgstr "Kasım" + +msgid "December" +msgstr "Aralık" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Oca" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Şub" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Nis" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Haz" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Tem" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ağu" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Eyl" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Eki" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Kas" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Ara" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "P" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Pt" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "S" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ç" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Pe" + +msgctxt "one letter Friday" +msgid "F" +msgstr "C" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Ct" + +msgid "Show" +msgstr "Göster" + +msgid "Hide" +msgstr "Gizle" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6bfde60aa116c04fa307a7b732fb9f8aaa7b01c7 GIT binary patch literal 12952 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, 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s уңышлы рәвештә бетерелгән." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s бетереп булмады" + +msgid "Are you sure?" +msgstr "Сез инанып карар кылдыгызмы?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Сайланган %(verbose_name_plural)s бетерергә" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Барысы" + +msgid "Yes" +msgstr "Әйе" + +msgid "No" +msgstr "Юк" + +msgid "Unknown" +msgstr "Билгесез" + +msgid "Any date" +msgstr "Теләсә нинди көн һәм вакыт" + +msgid "Today" +msgstr "Бүген" + +msgid "Past 7 days" +msgstr "Соңгы 7 көн" + +msgid "This month" +msgstr "Бу ай" + +msgid "This year" +msgstr "Бу ел" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Гамәл:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Тагын бер %(verbose_name)s өстәргә" + +msgid "Remove" +msgstr "Бетерергә" + +msgid "action time" +msgstr "гамәл вакыты" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "объект идентификаторы" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "объект фаразы" + +msgid "action flag" +msgstr "гамәл тибы" + +msgid "change message" +msgstr "үзгәрү белдерүе" + +msgid "log entry" +msgstr "журнал язмасы" + +msgid "log entries" +msgstr "журнал язмалары" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "һәм" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Үзгәртелгән кырлар юк." + +msgid "None" +msgstr "Юк" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Элементар өстеннән гамәл кылу өчен алар сайланган булырга тиеш. Элементлар " +"үзгәртелмәгән." + +msgid "No action selected." +msgstr "Гамәл сайланмаган." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" уңышлы рәвештә бетерелгән." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s өстәргә" + +#, python-format +msgid "Change %s" +msgstr "%s үзгәртергә" + +msgid "Database error" +msgstr "Бирелмәләр базасы хатасы" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s уңышлы рәвештә үзгәртелгән." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s сайланган" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Барлык %(cnt)s объектан 0 сайланган" + +#, python-format +msgid "Change history: %s" +msgstr "Үзгәртү тарихы: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django сайты идарәсе" + +msgid "Django administration" +msgstr "Django идарәсе" + +msgid "Site administration" +msgstr "Сайт идарәсе" + +msgid "Log in" +msgstr "Керергә" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Сәхифә табылмаган" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Кызганычка каршы, соралган сәхифә табылмады." + +msgid "Home" +msgstr "Башбит" + +msgid "Server error" +msgstr "Сервер хатасы" + +msgid "Server error (500)" +msgstr "Сервер хатасы (500)" + +msgid "Server Error (500)" +msgstr "Сервер хатасы (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Сайланган гамәлне башкарырга" + +msgid "Go" +msgstr "Башкарырга" + +msgid "Click here to select the objects across all pages" +msgstr "Барлык сәхифәләрдә булган объектларны сайлау өчен монда чирттерегез" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Бөтен %(total_count)s %(module_name)s сайларга" + +msgid "Clear selection" +msgstr "Сайланганлыкны алырга" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Баштан логин һәм серсүзне кертегез. Аннан соң сез кулланучы турында күбрәк " +"мәгълүматне төзәтә алырсыз." + +msgid "Enter a username and password." +msgstr "Логин һәм серсүзне кертегез." + +msgid "Change password" +msgstr "Серсүзне үзгәртергә" + +msgid "Please correct the error below." +msgstr "Зинһар, биредәге хаталарны төзәтегез." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s кулланучы өчен яңа серсүзне кертегез." + +msgid "Welcome," +msgstr "Рәхим итегез," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Чыгарга" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s өстәргә" + +msgid "History" +msgstr "Тарих" + +msgid "View on site" +msgstr "Сайтта карарга" + +msgid "Filter" +msgstr "Филтер" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Бетерергә" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' бетереүе аның белән бәйләнгән " +"объектларның бетерелүенә китерә ала, әмма сезнең хисап язмагызның киләсе " +"объект тибларын бетерү өчен хокуклары җитми:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' бетерүе киләсе сакланган объектларның " +"бетерелүен таләп итә:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Сез инанып %(object_name)s \"%(escaped_object)s\" бетерергә телисезме? " +"Барлык киләсе бәйләнгән объектлар да бетерелер:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Әйе, мин инандым" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Берничә объектны бетерергә" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Сайланган %(objects_name)s бетерүе аның белән бәйләнгән объектларның " +"бетерелүенә китерә ала, әмма сезнең хисап язмагызның киләсе объект тибларын " +"бетерү өчен хокуклары җитми:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s бетерүе киләсе аның белән бәйләнгән сакланган объектларның " +"бетерелүен таләп итә:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Сез инанып %(objects_name)s бетерергә телисезме? Барлык киләсе объектлар һәм " +"алар белән бәйләнгән элементлар да бетерелер:" + +msgid "Change" +msgstr "Үзгәртергә" + +msgid "Delete?" +msgstr "Бетерергә?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s буенча" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Өстәргә" + +msgid "You don't have permission to edit anything." +msgstr "Төзәтү өчен хокукларыгыз җитми." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Тарих юк" + +msgid "Unknown content" +msgstr "Билгесез тип" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Сезнең бирелмәләр базасы дөрес итем көйләнмәгән. Тиешле җәдвәлләр төзелгәнен " +"һәм тиешле кулланучының хокуклары җитәрлек булуын тикшерегез." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Көн һәм вакыт" + +msgid "User" +msgstr "Кулланучы" + +msgid "Action" +msgstr "Гамәл" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Әлеге объектның үзгәртү тарихы юк. Бу идарә итү сайты буенча өстәлмәгән " +"булуы ихтимал." + +msgid "Show all" +msgstr "Бөтенесен күрсәтергә" + +msgid "Save" +msgstr "Сакларга" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Эзләргә" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s нәтиҗә" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "барлыгы %(full_result_count)s" + +msgid "Save as new" +msgstr "Яңа объект итеп сакларга" + +msgid "Save and add another" +msgstr "Сакларга һәм бүтән объектны өстәргә" + +msgid "Save and continue editing" +msgstr "Сакларга һәм төзәтүне дәвам итәргә" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Сайтыбызда үткәргән вакыт өчен рәхмәт." + +msgid "Log in again" +msgstr "Тагын керергә" + +msgid "Password change" +msgstr "Серсүзне үзгәртү" + +msgid "Your password was changed." +msgstr "Серсүзегез үзгәртелгән." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Хәвефсезлек сәбәпле, зинһар, үзегезнең иске серсүзне кертегез, аннан яңа " +"серсүзне ике тапкыр кертегез (дөрес язылышын тикшерү өчен)." + +msgid "Change my password" +msgstr "Серсүземне үзгәртергә" + +msgid "Password reset" +msgstr "Серсүзне торгызу" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Серсүзегез үзгәртелгән. Сез хәзер керә аласыз." + +msgid "Password reset confirmation" +msgstr "Серсүзне торгызу раслау" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Зинһар, тикшерү өчен яңа серсүзегезне ике тапкыр кертегез." + +msgid "New password:" +msgstr "Яңа серсуз:" + +msgid "Confirm password:" +msgstr "Серсүзне раслагыз:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Серсүзне торгызу өчен сылтама хаталы. Бәлки аның белән инде кулланганнар. " +"Зинһар, серсүзне тагын бер тапкыр торгызып карагыз." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Зинһар, бу сәхифәгә юнәлегез һәм яңа серсүзне кертегез:" + +msgid "Your username, in case you've forgotten:" +msgstr "Сезнең кулланучы исемегез (оныткан булсагыз):" + +msgid "Thanks for using our site!" +msgstr "Безнең сайтны куллану өчен рәхмәт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s сайтының төркеме" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Эл. почта адресы:" + +msgid "Reset my password" +msgstr "Серсүземне торгызырга" + +msgid "All dates" +msgstr "Бөтен көннәр" + +#, python-format +msgid "Select %s" +msgstr "%s сайлагыз" + +#, python-format +msgid "Select %s to change" +msgstr "Үзгәртү өчен %s сайлагыз" + +msgid "Date:" +msgstr "Көн:" + +msgid "Time:" +msgstr "Вакыт:" + +msgid "Lookup" +msgstr "Эзләү" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..16af5a0237f0815d2689f5dc2bd5d16e01743128 GIT binary patch literal 2607 zcmb7E-ES0C6dx5oSicbQ!T5E=G=MO(yA=v-#V8dNq0+#r;f3UO=kD&n?94iIx21^> z{fH?EYQShBO-#g(2Yiqc*c2$$7hm+nJ8j~lk^jL5-}HCx?6%t$Nt|}(H|O4a&iS3+ zIkSJPU-P+z>j~UX zhJ@#fL0?i=Z1sttBz>!|8iuhXLCUMiMawrEu?+a+e$Q7jvflJuY4v+<;8m*1dOHjQ zJcg|!vK9_W>u444#n2Tac-F!wf_Y5FaO9<9VS}n-NG{SP5s)Y;FATQf)uoZvfnbxO zns7lV7@<;C1Qm&L1M&jb8}i(S@Tu%c-;EtY%uSJ`dK3<#rV;YP@T3=1s2oP5s*>Ia zX|SOboFf677m<{Ajxv*U&$%--99l*#hNmGLEs|5=YH~Cpl|uu*6p*&$d!>_f_#ojV z`=`u(p8|c&wEH3{xQF)Z zLdgPk=kh&vZik)UN!>3M^4(i=-MJhN+DGJ&$1#`A?X+{d?fh=a_Y}70x8`tV4vARV z#YhCPFH{&6=q(WhUQCB12G6IL!3O55zA+syD2K1WC#W<;McPFvY6U6^B_i5fRjOXd zW`~D|9mVmyvOMLK!df=1s11J0IjdB5OQ!!o|GuT#^G+_)7Y0fO;51T4aY~+2*}5;h zpqG0e#Zv8gr?}tVwRDbim1Sh_3reAjQ7q7|K~F7`L=2S~@Eeiv?fqd?iwhLgjT!IB z_fq=0C)b<7x14_5dO8`!J(ir&bNHLqbNKGlpMYcx=5;;Gi~0&bE&W9@nv5@;Hw#Vb zvGi997n2W@v4!)=IO%K2xNgGX3ZLNbTK}ML;BT6eNhClFxSv5nyjl8FguDTBoH{aH z!MPbrpKBd8ygK&Vz86+fGugh?*Ys@iQ8J#4TKZCQS~qc?ZxFKd*9#ZHDw*IC(vr}a&bB4H7eG}nlp;@z| z5`C2w;c97q7W+2|!d}!ftRzBX2^82xUk2IJtRfa}BHE&(L;9SFd_!O3$eeE@@Po~GYLME3V?1SHTn$)*18qH-JF$9&<(AcKvXjg?PCbd{RW4tKvrYM`5%RE zBd(ikLUhy6%d9V_;vq>(xQY$P^k3?rq*l4Bv^m>~fJ#%{Q&lDiBRdJMbNq{GL|+s~ z&n=u!1?Ryt-GRtwAyoQlAlr}g->hmX#>pIpN@)c=VEU)Dj%5w(P|ghE8Lk{d%XLG# zDY#v4#aO9AM-5=ZgMjYxK(88`R87bS?zf%7&XF<#no75E2DA{-n<&z37|E8U!)(s* X_rzaOdrm3&#E{{RO@dTw{2c3FJ%44c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..36e7c72eb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po @@ -0,0 +1,208 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Рөхсәт ителгән %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Фильтр" + +msgid "Choose all" +msgstr "Барысын сайларга" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "Бетерергә" + +#, javascript-format +msgid "Chosen %s" +msgstr "Сайланган %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s арасыннан %(sel)s сайланган" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Кайбер кырларда сакланмаган төзәтүләр кала. Сез гамәлне башкарсагыз, сезнең " +"сакланмаган үзгәртүләр югалачаклар." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Сез гамәлне сайладыгыз, әмма кайбер кырлардагы төзәтүләрне сакламадыгыз. " +"Аларны саклау өчен OK төймәсенә басыгыз. Аннан соң гамәлне тагын бер тапкыр " +"башкарырга туры килер." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Сез гамәлне сайладыгыз һәм төзәтүләрне башкармадыгыз. Бәлки сез \"Сакларга\" " +"төймәсе урынына \"Башкарырга\" төймәсен кулланырга теләдегез." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "Хәзер" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Вакыт сайлагыз" + +msgid "Midnight" +msgstr "Төн уртасы" + +msgid "6 a.m." +msgstr "Иртәнге 6" + +msgid "Noon" +msgstr "Төш" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Юкка чыгарырга" + +msgid "Today" +msgstr "Бүген" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Кичә" + +msgid "Tomorrow" +msgstr "Иртәгә" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Күрсәтергә" + +msgid "Hide" +msgstr "Яшерергә" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d51b11a4aa85e6eee5a332d21fe6d8f20315b151 GIT binary patch literal 622 zcmZ9IL2J}N6vs!c3PC*d>|u^dnN6ZdmswZD-4?1{TuN5-IBwo%rzSIDX5!YXy;Mb1 zP&^9t3wWqETff2t?|v3vvc-ZAe)-Q!{_o9u`Lnw6nP6N*t|3F@GLj=r93YpF*Qfdc zwfX)9xqy5{KAj`v8|o_3Jx|CL)Q6~7QJUO7k4dh01^oAqNL! zqMj?gP~<6CGB$b_rjBi;>@gTCwc<40MYj%ipwz~(kUkHk>{X zN=Zw%L8g$?J2(xd_wqLFNHx=Uu|{Q;$bcmv3Qi|!Q5i?C&z&oI7%mozj%ymq8SHhY zx(LhVnl>!M<#u6y+99mcBD@idwniIge<1Ee!9Xhq3MYG6;))LTTv+Bpsve!rg|XoJ zlVp>1&wR~=GcasJO?4_&#%cGNbpJ->6mJT~d1XY-Hnk}%r>bmI+mCy6dF)5MfcV3D r-~aO8>sR%g`n^B)C*=20yrlQ!{(csQ!x`k&}{NBl?s!yl8sF+;lc literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.po new file mode 100644 index 000000000..df03f5f74 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.po @@ -0,0 +1,606 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:31+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "" + +msgid "Yes" +msgstr "Бен" + +msgid "No" +msgstr "" + +msgid "Unknown" +msgstr "Тодымтэ" + +msgid "Any date" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "" + +msgid "This year" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "object id" +msgstr "" + +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-format +msgid "Changed %s." +msgstr "" + +msgid "and" +msgstr "" + +#, python-format +msgid "Added %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed %(list)s for %(name)s \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Deleted %(name)s \"%(object)s\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may edit it again " +"below." +msgstr "" + +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was changed successfully. You may add another " +"%(name)s below." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Log out" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Ӵушоно" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "Тупатъяно" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent Actions" +msgstr "" + +msgid "My Actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +msgid "(None)" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "" + +msgid "Time:" +msgstr "" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..86babad6c57d67617964f806e61df42e5b370495 GIT binary patch literal 15623 zcmc(l3zS_|dB?ZPL!t;O3MlFhFl16QlbOi#k_QmNqdZKL5I~FZ&b?=5F1h!f>wU~H z0umAmy0GoJec9Gl6kAuT%XTem7u7D;>hHhzIrpA> zxfuest7m23|Jmp4$G5-l|9$)0XY$=Q9ruXg`W)pf%Fm87<}bl-ox~5<87CX_7Vu2) zt>8lN?ci15`@j+KJn)(L`9FadP&aSz{VoJgpn5%cBDflS4fuZW_29breG$|=HBfSV z96TNTa{PVKV)3u?W$ftt4g&I7lCntva72Y3Yh5O^^{KLvgT90hNEvoTMCUj?Oy z{ApgFC6F#=6DU1A0!of2LCwDlybRnAz7za8D0$An80UiT0$&YY32NM{LCLccgevA1 z@MiEfQ2q9Rvg=_`?Y;?0Kh604_rbHN{|hL+ybhyCuD61k=Uk8_n0cW3Ukb`T%Ry9Y z)`FUM4AeS`p!9hssP>!V=br>M@1t@3_d)UY5coRq+u*yvAAlBo4a%>B=YlK2&wv^5 zN1*2IJHyX+A*gk(043-3p!EAekfx>zO1@8ksM2f&WzR2xTIUR?`M(8foWBJn|8tG(#H?Lw}C$fS*kgKN&|cc zDE&VSYW~MT@!@x4d!9@cEU5K;C&ur^@BbN;d_Ms--Y-DOcO1fB0-g-Y zU#|u=&UN5M@cp3t{k!1p;D3Wlz)>DDg!vLEeI1GMSy1DA8-l=kTzrW7dJt8be+Om1 zlOVJ7b1En~&Hy!TAEHp+;-fvC^2dMXh{4;C$xd8kK zC^>h7d%!;iw}W@})9+Qxi!i@Uy$>gN74>I9>FH13?dAU-I7t131z!FOK>5LqpyV6@ zbKr--rQlzKP{W*tFqeVD;OoIED7o(e)o*KzkAt6}{s*AiUCd-!?+S1ZcpE6akH_^- zgDk;337!l-3reql2ObCh6qG(+05#tm=?n$UTu}X%f%2CzP~%rXt@ln)<81*^t$7rb z9A5_!&3p&E20UrVkG~4Mf_f2L3H~AYb5NVp5#SeK1w6RO82*`ezsK|S1K_FD>mVjD zn?bsor$E{Jx%mBY=X;*K1zg7SWgw<8_kiN>S3t@CO;GmzD^R@pA&AM$sTiN3%wiCe zmo&(kI1#mGq_d;VB!h8UfJst*EfS(5??+?LK;K?Z$`Tp;^*z@5c z@I>BU2Wow*LCv3!>z@WS|L=jPf!_e%3jPBqd;JG!!ILlX^+E6y>eqnRg13MtfL{dN zIN(#%zX2`*Co+r$?grlrK6t5L_xC}q^9?Lc_B{_2PtFI$hfBaWgIQ2|ZGdNi+d!>j zCy43I*FeerQ;_AGTPV8D@L)a|<8Q{8z+K#IqudlfknEc&lavvPY<@Fkj3PbXM!ADh zpnRH=Todt)bUGd1%T8~g$lkid&(~6_s&KJ%bG5r8-vi$t-){o1ithz1$$W~^M>&%s zo_&HM-Y1uIb$eWqJ|3YI@NBJ zTjKj$!7SxYN{+IYvVo#&tB2O_#oWoq@1e+-N)-9r8p;$!*J_IR{yA0R>({{t;`_5= zlrO)TawFx#lv5}}l#f!5r|7znvYm1^Wj#gLt0~vJJO6VMfJ>Xp<7XcL^OTQJbiQNUJT~ftm*5|Rw~?N^QA($P^(w7^+H(YajuxH z)z+1>B{l2oFO+NbY&l0o@4`m8?jFbQC$lx18_$-)9gj9JZd;f?|-X2YGXOv1pI_a>$0Gyv?~~ zwY%h;GA?(JF_-5VC7-9AU$(E*9AwL3eLSf0t`z2jB5G30_S1==Iuh1`SfP4}s-EBQ zXkULgaytUfuRXuvu|fabLBUVmX%^Pt){)QF17;{sS>2h-QRr0IK=tv>WVT$l_0S?o zP!BAUA()>iG3nWT{Xs34tpxdXi3Ddavr-b8P>0d5SPUl%?+wo(o2&huN;iKWHN z{V}Cu>PzoVfMk?zXPNh6XPNh_O7SbqsK96o<@U-G4~YNPiU<%X=fb1She548 zuWrY)6M?M+)l#8WgG^mPqV4nbsY*~&C`gpnDQ?Qraf2kT{ED`DxzqeVssdNM@^<#T zuzT~2pVo+%{*}2h%r#1Qn%`Vkl(K~)Z}MzlwTxL&s??{+44|gaMiK8 zQRCfWcIU7>wzRKbRlfx-UKl?dYz>gSbg?suS%c;(xAB{+!s=L9uLosMkL0~&qNL+8 zb9HF0VMlj+%QZeWnrlLW!L@D&C^c$z?EozjKtX}UeuadN%*zeiAKqo@>Knf5|7)iLxiB-Rkb-Eul-u+TDKP=-xQ;= zMG&cTA<;X>KF|7H)W#<4*n>xXU+ZcBA!ReVCqt#F)xjUf#H=L;934$!icIQ~i!5v) z`$?2m%1((LIb~E7@cxyjbf3q4;ed_ zRH?xY`KG{zFAGEbw5rL+#PgDV*4Q`X3z%q%cCVmS0C4W zq7Y2RwVGmrSxs7y8wZrmDp6_OY5CrhI-mI=e0${r-N~;@RU5@tPP#g%qIA1L34mQ3 zl$Q2iFf=rO@j~tx*uC?~LAqjHBeQxuoK(VLR=0v)`!KQEtIk%cg|J$vE6?gr?$?zY zr4c3fW_9Y^kR+Eh^x3@<2bX@%uMN_&RLWMT%o@_U^)*M$h74)7;VJ6Q<&|QB?vs6~ z9%M`IaV2p==XADMD6h9VzZA+7*Il}b-avX9aSUSX`XSISMK! zol=;>ZC#`qG`9vdl?C=%Mu7dCEX=JOF|v%7Z7>MLCCoAenn{NZKZ}}aKsCkYAEq5F zB^hDI!&lLVW*)RRyQy_{DHe#Xv?+#Tis>}A`NHTZS+4U-M}uWf1jQHmi|pdI3dDAC z5BcUXFF`RVOo$I|qQLF8i7ho%d->V+R_ocI4VNZr(u}u-&~=hvz}#V}~6rX2+6ymxgl?GTzDAf@(FCXJT4dg-4^| z(Nwj7-IDt$<8w1x$R~Hzpi(v3=*`M%sB`DQwfTXyK~=e6#^zl*GiOy$!D9z*sErl! z16MT0Y6EM+jGeRcy#uR)iGrFA=zNf|i-r~r4-79F7+Pc(Ey^q!e)ka9oa@=D2G&%w zGvu$r;g7K??fT^km|+<2j27ju9tWCthW`ekD>&>)0eO4ssOgS8E;!CN!-ru9`a zfdach|9HJ#$t+wrIXOAVHwreD(cljCS?Fa>pcoIZu(5vO{5dyVd&7$M>V^l0<}CNF zG_VGpWo$jTqrR|GWR6P}L93W=$xUmn8o0RKPIE!RffeOkn1@ptd+|u2-V!up8|&w+ zbcdJ$QmaxeW6SiG@-yF(;q&c$&9EqA-!uQxIVRd3?Z8z!KQfuNyBGu(`g_W7BjJyiEc2YP;i za$OHa`)BLioSv=g%xqnwng5Nh?u%D*0}I*5LJu_`Xl{&lG&d%yILhm2|4TH$47-l4 zNw05g(Jl=5Kr|CQ9nCOG=chIv??hnP70u7`x;bs4CmCqk&N9TzF|`@O;*8=y+@%Dd z_clneHHHkx+uhP2DoR)A9e>X2d|K;l)%OuV^2w*8lWWxZiG$20Y2paV zcQ+rE=hx02?0A)`wVdN6e8)r&NsTes_WB-#GP|1(3^cb!2XV>x#SR+6dVKE)wAzI{ zcu8}5fkkc@y*Zj`-WTmbL#%WcHbh+!ZX%VjVlQ@*PxbzO=;g7DKNIbm$L#w=2Mq0Q zjxg4}(f)Wo3E}vC2tzTi7sdJJZoGP9^MSM!?loq7#S3sNiuvi7=hxHz5ShrnODby% z4yorgw?zk?7WhG%JyvHO=?_c0d(hdQ=&)OmH1|qYw9G`0c`Jyr+oTK(y)~_n#4HJU zx5t6cJy#@l5jU|OEc_TFY{bMH*2;_Ze3o?V`sa4xEy0oPAt;nzqf466RdUM1I`;3z&32 z{DM`U|NAk@baR8W>>>iR)aE44@k2Au(P*dFxTB5l+d&5w0v!|+r<%C$+Y_WP9+_y+RwYo>xGz|5GVnzQLp*6hBRTU~iw*P@>Haa&zc%sB_aw z2!m;MFpxaUTS-oJEOtshxzl}?Gey#hu)ZTY(A+5Q&DPvyXa|W3$*%1PN%rVJ)vLGT zE5rFXOl>CGt35+ja_*7Da`v`FJ*oY(r3>`rfr@zicl;>_k!6dj1t{iL*=$_rBl%TeN_i9k&{t`#acV`tjw)F82x?Cxl8^SAU& zJ4ahfE)Qd6E&*jEm&3#&Xxsx%CET?WLzikNDd-ld&>t9-a4CQ|v$$+KCQY05YAwpp zF3z>0y$ITB_i_e$yfq#E&L3e!Fvi}6YOyEBEQ<`}68S&XN{k2)K-t%00%M9A;@%PH;^H619bBnS|ZPb_<3T&h5bA%pwoOchm z;X=#(M4Z+N*h%J^=(Dgyr;%qgee0!5CenZP^ep0=n|7$wpmC%|u4CCt{U@wL5;wgO z`KWT35U+%0ZyY&D7}?}WuN02-T@f;9JK#pSmm5WH#JNt|!Cn_#$ zci1JPwcO<8ErcNZ<>d1<$4Y_)AJqt@Thq@GXU6AWzXQkg;pGcSACyhl<3T!<#Wcjz zT?}zcca~EYfUytz!4x?aNEJp{hYzLg2X51FuB#o*893344=~O9WXzs{q~~M(eVF{3 zEz?IVE!BzDW{c9st_BIsh%k!6D8TV_fy8B>-ir}P8RBiy#YKfp#WaSM;hl4l-T6ER zLn(W1XLtN*B>EzCvS0^r1gSbcNF&h!7vMO6xKOF#3Ayh4;!_WZ!tNtS>PTD=tNo2Z zyR=I$HNAY)Q4sA*PE>j%&LjBp(A?JC-X%U8@*JJIFqq5tkufo_vy@J+gdxU3wq>!n zq9?>gSdm+{#)KWagx0~{t@o`{1sWl~bFM)wWh8QIoyF8l+n@GOMAmmeZ+-UCR35d@ z@m0B$Iw>yVq{M!2YwmrgWAJkfamt>J`mz%t=Bs4b-gU)F@5VS gDM92`uqM`2q9u1KPB*mtFV;$RzDbAB#1`g%0LCs+=l}o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..a654e4099 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,724 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abbl Kto , 2021 +# Oleksandr Chernihov , 2014 +# Andriy Sokolovskiy , 2015 +# Boryslav Larin , 2011 +# Denis Podlesniy , 2016 +# Igor Melnyk, 2014,2017 +# Illia Volochii , 2021 +# Ivan Dmytrenko , 2019 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2015 +# Max V. Stotsky , 2014 +# Mikhail Kolesnik , 2015 +# Mykola Zamkovoi , 2014 +# Sergiy Kuzmenko , 2011 +# tarasyyyk , 2018 +# Zoriana Zaiats, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-02 22:21+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Видалити обрані %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успішно видалено %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не вдається видалити %(name)s" + +msgid "Are you sure?" +msgstr "Ви впевнені?" + +msgid "Administration" +msgstr "Адміністрування" + +msgid "All" +msgstr "Всі" + +msgid "Yes" +msgstr "Так" + +msgid "No" +msgstr "Ні" + +msgid "Unknown" +msgstr "Невідомо" + +msgid "Any date" +msgstr "Будь-яка дата" + +msgid "Today" +msgstr "Сьогодні" + +msgid "Past 7 days" +msgstr "Останні 7 днів" + +msgid "This month" +msgstr "Цього місяця" + +msgid "This year" +msgstr "Цього року" + +msgid "No date" +msgstr "Без дати" + +msgid "Has date" +msgstr "Має дату" + +msgid "Empty" +msgstr "Порожні" + +msgid "Not empty" +msgstr "Непорожні" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Будь ласка, введіть правильні %(username)s і пароль для облікового запису " +"персоналу. Зауважте, що обидва поля можуть бути чутливі до регістру." + +msgid "Action:" +msgstr "Дія:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Додати ще %(verbose_name)s" + +msgid "Remove" +msgstr "Видалити" + +msgid "Addition" +msgstr "Додавання" + +msgid "Change" +msgstr "Змінити" + +msgid "Deletion" +msgstr "Видалення" + +msgid "action time" +msgstr "час дії" + +msgid "user" +msgstr "користувач" + +msgid "content type" +msgstr "тип вмісту" + +msgid "object id" +msgstr "id об'єкта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "представлення об'єкта (repr)" + +msgid "action flag" +msgstr "позначка дії" + +msgid "change message" +msgstr "змінити повідомлення" + +msgid "log entry" +msgstr "запис у журналі" + +msgid "log entries" +msgstr "записи в журналі" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Додано \"%(object)s\"." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Змінено \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Об'єкт журнального запису" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Додано." + +msgid "and" +msgstr "та" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Змінені {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Поля не змінені." + +msgid "None" +msgstr "Ніщо" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Ви можете відредагувати це знову." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Для виконання дії необхідно обрати елемент. Жодний елемент не був змінений." + +msgid "No action selected." +msgstr "Дія не обрана." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Додати %s" + +#, python-format +msgid "Change %s" +msgstr "Змінити %s" + +#, python-format +msgid "View %s" +msgstr "Переглянути %s" + +msgid "Database error" +msgstr "Помилка бази даних" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s був успішно змінений." +msgstr[1] "%(count)s %(name)s були успішно змінені." +msgstr[2] "%(count)s %(name)s було успішно змінено." +msgstr[3] "%(count)s %(name)s було успішно змінено." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s обраний" +msgstr[1] "%(total_count)s обрані" +msgstr[2] "Усі %(total_count)s обрано" +msgstr[3] "Усі %(total_count)s обрано" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 з %(cnt)s обрано" + +#, python-format +msgid "Change history: %s" +msgstr "Історія змін: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Видалення %(class_name)s %(instance)s вимагатиме видалення наступних " +"захищених пов'язаних об'єктів: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django сайт адміністрування" + +msgid "Django administration" +msgstr "Django адміністрування" + +msgid "Site administration" +msgstr "Адміністрування сайта" + +msgid "Log in" +msgstr "Увійти" + +#, python-format +msgid "%(app)s administration" +msgstr "Адміністрування %(app)s" + +msgid "Page not found" +msgstr "Сторінка не знайдена" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "На жаль, запрошену сторінку не знайдено." + +msgid "Home" +msgstr "Домівка" + +msgid "Server error" +msgstr "Помилка сервера" + +msgid "Server error (500)" +msgstr "Помилка сервера (500)" + +msgid "Server Error (500)" +msgstr "Помилка сервера (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Виконати обрану дію" + +msgid "Go" +msgstr "Вперед" + +msgid "Click here to select the objects across all pages" +msgstr "Натисніть тут, щоб вибрати об'єкти на всіх сторінках" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Обрати всі %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Скинути вибір" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Моделі у %(name)s додатку" + +msgid "Add" +msgstr "Додати" + +msgid "View" +msgstr "Переглянути" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Введіть ім'я користувача і пароль." + +msgid "Change password" +msgstr "Змінити пароль" + +msgid "Please correct the error below." +msgstr "Будь ласка, виправіть помилку нижче." + +msgid "Please correct the errors below." +msgstr "Будь ласка, виправте помилки, вказані нижче." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Введіть новий пароль для користувача %(username)s." + +msgid "Welcome," +msgstr "Вітаємо," + +msgid "View site" +msgstr "Дивитися сайт" + +msgid "Documentation" +msgstr "Документація" + +msgid "Log out" +msgstr "Вийти" + +#, python-format +msgid "Add %(name)s" +msgstr "Додати %(name)s" + +msgid "History" +msgstr "Історія" + +msgid "View on site" +msgstr "Дивитися на сайті" + +msgid "Filter" +msgstr "Відфільтрувати" + +msgid "Clear all filters" +msgstr "Очистити всі фільтри" + +msgid "Remove from sorting" +msgstr "Видалити з сортування" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Пріорітет сортування: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Сортувати в іншому напрямку" + +msgid "Delete" +msgstr "Видалити" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Видалення %(object_name)s '%(escaped_object)s' призведе до видалення " +"пов'язаних об'єктів, але ваш реєстраційний запис не має дозволу видаляти " +"наступні типи об'єктів:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Видалення %(object_name)s '%(escaped_object)s' вимагатиме видалення " +"наступних пов'язаних об'єктів:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ви впевнені, що хочете видалити %(object_name)s \"%(escaped_object)s\"? Всі " +"пов'язані записи, що перелічені, будуть видалені:" + +msgid "Objects" +msgstr "Об'єкти" + +msgid "Yes, I’m sure" +msgstr "Так, я впевнений" + +msgid "No, take me back" +msgstr "Ні, повернутись назад" + +msgid "Delete multiple objects" +msgstr "Видалити кілька об'єктів" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Видалення обраних %(objects_name)s вимагатиме видалення пов'язаних об'єктів, " +"але ваш обліковий запис не має прав для видалення таких типів об'єктів:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Видалення обраних %(objects_name)s вимагатиме видалення наступних захищених " +"пов'язаних об'єктів:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ви впевнені, що хочете видалити вибрані %(objects_name)s? Всі вказані " +"об'єкти та пов'язані з ними елементи будуть видалені:" + +msgid "Delete?" +msgstr "Видалити?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "За %(filter_title)s" + +msgid "Summary" +msgstr "Резюме" + +msgid "Recent actions" +msgstr "Недавні дії" + +msgid "My actions" +msgstr "Мої дії" + +msgid "None available" +msgstr "Немає" + +msgid "Unknown content" +msgstr "Невідомий зміст" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Ви аутентифіковані як %(username)s, але вам не надано доступ до цієї " +"сторінки.\n" +"Ввійти в інший аккаунт?" + +msgid "Forgotten your password or username?" +msgstr "Забули пароль або ім'я користувача?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Дата/час" + +msgid "User" +msgstr "Користувач" + +msgid "Action" +msgstr "Дія" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Показати всі" + +msgid "Save" +msgstr "Зберегти" + +msgid "Popup closing…" +msgstr "Закриття спливаючого вікна" + +msgid "Search" +msgstr "Пошук" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s результат" +msgstr[1] "%(counter)s результати" +msgstr[2] "%(counter)s результатів" +msgstr[3] "%(counter)s результатів" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s всього" + +msgid "Save as new" +msgstr "Зберегти як нове" + +msgid "Save and add another" +msgstr "Зберегти і додати інше" + +msgid "Save and continue editing" +msgstr "Зберегти і продовжити редагування" + +msgid "Save and view" +msgstr "Зберегти і переглянути" + +msgid "Close" +msgstr "Закрити" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Змінити обрану %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Додати ще одну %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Видалити обрану %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Увійти знову" + +msgid "Password change" +msgstr "Зміна паролю" + +msgid "Your password was changed." +msgstr "Ваш пароль було змінено." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Змінити мій пароль" + +msgid "Password reset" +msgstr "Перевстановлення паролю" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Пароль встановлено. Ви можете увійти зараз." + +msgid "Password reset confirmation" +msgstr "Підтвердження перевстановлення паролю" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Будь ласка, введіть ваш старий пароль, задля безпеки, потім введіть ваш " +"новий пароль двічі для перевірки." + +msgid "New password:" +msgstr "Новий пароль:" + +msgid "Confirm password:" +msgstr "Підтвердіть пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Посилання на перевстановлення паролю було помилковим. Можливо тому, що воно " +"було вже використано. Будь ласка, замовте нове перевстановлення паролю." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ви отримали цей лист через те, що зробили запит на перевстановлення пароля " +"для облікового запису користувача на %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Будь ласка, перейдіть на цю сторінку, та оберіть новий пароль:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Дякуємо за користування нашим сайтом!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Команда сайту %(site_name)s " + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Email адреса:" + +msgid "Reset my password" +msgstr "Перевстановіть мій пароль" + +msgid "All dates" +msgstr "Всі дати" + +#, python-format +msgid "Select %s" +msgstr "Вибрати %s" + +#, python-format +msgid "Select %s to change" +msgstr "Виберіть %s щоб змінити" + +#, python-format +msgid "Select %s to view" +msgstr "Вибрати %s для перегляду" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Час:" + +msgid "Lookup" +msgstr "Пошук" + +msgid "Currently:" +msgstr "На даний час:" + +msgid "Change:" +msgstr "Змінено:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..20523fffac9b7666266af5b12e1c92fc67d79fb8 GIT binary patch literal 5787 zcmdUxZH!b`8OKlS)R(ndty=3#^%Mo!mYJPdD5V37EwmdTUBEJ>t&NFyXYTIYGIQ_d z-aEUjX(F&t+Jvwc3vIL(sYYWoaoGa9;We7@K|kFalbUF3;s?J~jVAiZ7=O>XXO>~u zU=t489xOYw>xI zpPIJwqu{N~U$yfeS)2hs0DaElWsAQ8d!YXwd>{BW_*wAp;4<(I4tp;+U~v%Sr?&CQ zfjhzXfKS_b)nXk)gld9vg$NWm6Lx(M_$2cKU)=Pg{T5#Vh5sjZ{&PEj6Z|Ojw?R4QruSnH ze19kSb>>Z+b`$tVQ110-Q2hHhi#LBT)BiT`cIeANSzil^o|`~9_p27iLDB0FcpLa# z@Ii0}{1W&VQ1)+RQEHo~&i$*U--PnNWPUq%8T=h6{NKZfvi}r#5d0Y^ayN7N zIj{oaI&~{X7QDlv1_>E;kHvnAWxKus#1-mMJAV?y^lI47$L#voK-{LDv-pC=Ll&nk z9(A5s>0C*zqf0(W z%zlnex|xO>)xCDy2JxFT@k_gj&!tH{BxFoYydM-_OI!@lrHOC8K)+ii(v~id+(vJt zgAu)SdDV{@LU60GTf6SsYV8!71+`j_2|P3wdJXkZYqS-`>Y;JRYdFIVS1*m!M#rzZ z4Yjcz1d(e&JNjWK?wD1)X2&e{SZxggpHJ+T^;1DhJE2@w*MnB5ox1DP#Ga8Gj=Q0j>l7B}MfG>itcTsY z=hxnm*u`1Lvs-TsCe*fS9Eb%TGlsGt_EJ0Cu{h(~QHQZo_aeG4FM+3rS#MU`6c^A(M36#R!8WhVM}8U;1NqY^X&(OXp}$6T&Vq{d=Dxi#Yv z6J@#%SH}2J1PD8sjFE;5m;<=4l zRM4A8^dwuumXDRSQ;ogAUm>LM8c7o#DKw00gD5U2XLvYt#|yd{_;FpEq|Wi}rkga+ zk?maz?Yzn{=vr!LT8=^2lFhdq*u6pq=19Y9$i54?o7-e*j&Bz`c?)&2i@KHiAT=Pz zpliwIMh@&+S;&nXBNh1A&5d!E9t=GkmK*G(4F$f?hB|3GoVX>f&F#2~+A^G1(JJ*; z7zt;kle5xtuO&X=*8Gh8gxVek&rrPcn``-kG7mqH(zm`W?4VJD|9^HBQ%%S z<9Mvx*EcaSQHVvfH{$M=J$;$ZZD?2leXU)6y*)#lhaS0dyHcUpvypgpebgiE$~ty; z$9-cB&R8oM6Gm=4@OWh~zvc>`oHgQx`A7U}P^0#g^_pQXUQo2GTf2I;H(H_7$PWf# zGb(F;%uJ(!Rcm!N99Yhqq)U2WKo|A0W!lV&GA&)17WLiCOZtoOAY`!(>j!lIl?{5` zfLKbzXkm{ zZ=keF_sR+VWxcX@ZI4P`OHQVHl9}W}a*=-t*&l{vuKkDMhOe(y#9^_hlC#NddMw?S zTu7%?x;HtEQkTpmIigW+CY?@ZMagt;x-UH@{}_@Z>9OQga-Q#nWS*__3)(JBM2?6} z4{2Cu7)%+a4tjbJ`rhkM#XKTVqv784*uo*1$~rZM zEU`x=C(;AZXEXgVJL(^_dpJ0=KNN8W#ur&9&E#}4XQmwQc0m`B8JiJqylP}Wc*wYwlO51>#H6(&SuA(!?83Vpk z*>d2GlKuZExozt?oOmPb{NI+F+4z4eRZ@`}WFi!+B{M2{nFNwNm{Z9a=(DVvWFf#i zvzLl>HNm8Fa$1o!Ce}>_A;~0nND-3E6dslQAUQ2La7m7qHCqSL15(wpk~qbxl)(dJ zQ^Dred3ettdLP>vcGRL%P^Xi#R1a!>wr>SOMLnqx;B5Ll*^<7Dz;=|J6L!u>&PYwr z+01BY6rYkk={}9>lA@OoKc$zn9~hLFUqY?B_9|Af>uYaR!z2rZ@P^$$YQ)ty=<=G} z;zW9gD`qu|f@eZN{4QZ&{AcQ@eRyUutSN3{11;XbG=vZa*XeUc()mssw_lI!nbVVEnq6A`vQl;sA6P b?qeV)GdhxSr+XP6H@_3S&d6hlQ`ElzgLmjs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..40e60de09 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Boryslav Larin , 2011 +# Denis Podlesniy , 2016 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Panasoft, 2016 +# Sergey Lysach , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-21 18:50+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "В наявності %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Це список всіх доступних %s. Ви можете обрати деякі з них, виділивши їх у " +"полі нижче і натиснувшт кнопку \"Обрати\"." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Почніть вводити текст в цьому полі щоб відфільтрувати список доступних %s." + +msgid "Filter" +msgstr "Фільтр" + +msgid "Choose all" +msgstr "Обрати всі" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Натисніть щоб обрати всі %s відразу." + +msgid "Choose" +msgstr "Обрати" + +msgid "Remove" +msgstr "Видалити" + +#, javascript-format +msgid "Chosen %s" +msgstr "Обрано %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Це список обраних %s. Ви можете видалити деякі з них, виділивши їх у полі " +"нижче і натиснувши кнопку \"Видалити\"." + +msgid "Remove all" +msgstr "Видалити все" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Натисніть щоб видалити всі обрані %s відразу." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Обрано %(sel)s з %(cnt)s" +msgstr[1] "Обрано %(sel)s з %(cnt)s" +msgstr[2] "Обрано %(sel)s з %(cnt)s" +msgstr[3] "Обрано %(sel)s з %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ви зробили якісь зміни у деяких полях. Якщо Ви виконаєте цю дію, всі " +"незбережені зміни буде втрачено." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "Зараз" + +msgid "Midnight" +msgstr "Північ" + +msgid "6 a.m." +msgstr "6" + +msgid "Noon" +msgstr "Полудень" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Примітка: Ви на %s годину попереду серверного часу." +msgstr[1] "Примітка: Ви на %s години попереду серверного часу." +msgstr[2] "Примітка: Ви на %s годин попереду серверного часу." +msgstr[3] "Примітка: Ви на %s годин попереду серверного часу." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Примітка: Ви на %s годину позаду серверного часу." +msgstr[1] "Примітка: Ви на %s години позаду серверного часу." +msgstr[2] "Примітка: Ви на %s годин позаду серверного часу." +msgstr[3] "Примітка: Ви на %s годин позаду серверного часу." + +msgid "Choose a Time" +msgstr "Оберіть час" + +msgid "Choose a time" +msgstr "Оберіть час" + +msgid "Cancel" +msgstr "Відмінити" + +msgid "Today" +msgstr "Сьогодні" + +msgid "Choose a Date" +msgstr "Оберіть дату" + +msgid "Yesterday" +msgstr "Вчора" + +msgid "Tomorrow" +msgstr "Завтра" + +msgid "January" +msgstr "січня" + +msgid "February" +msgstr "лютого" + +msgid "March" +msgstr "березня" + +msgid "April" +msgstr "квітня" + +msgid "May" +msgstr "травня" + +msgid "June" +msgstr "червня" + +msgid "July" +msgstr "липня" + +msgid "August" +msgstr "серпня" + +msgid "September" +msgstr "вересня" + +msgid "October" +msgstr "жовтня" + +msgid "November" +msgstr "листопада" + +msgid "December" +msgstr "грудня" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Січ." + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Лют." + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Берез." + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Квіт." + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Трав." + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Черв." + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Лип." + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Серп." + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Верес." + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Жовт." + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Листоп." + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Груд." + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Показати" + +msgid "Hide" +msgstr "Сховати" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0735f5d6d9169ddfe833ec6e9b7227eb7588f6a0 GIT binary patch literal 13106 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, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s کو کامیابی سے مٹا دیا گیا۔" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s نہیں مٹایا جا سکتا" + +msgid "Are you sure?" +msgstr "آپ کو یقین ھے؟" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "منتخب شدہ %(verbose_name_plural)s مٹائیں" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "تمام" + +msgid "Yes" +msgstr "ھاں" + +msgid "No" +msgstr "نھیں" + +msgid "Unknown" +msgstr "نامعلوم" + +msgid "Any date" +msgstr "کوئی تاریخ" + +msgid "Today" +msgstr "آج" + +msgid "Past 7 days" +msgstr "گزشتہ سات دن" + +msgid "This month" +msgstr "یہ مھینہ" + +msgid "This year" +msgstr "یہ سال" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "کاروائی:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "دوسرا %(verbose_name)s درج کریں" + +msgid "Remove" +msgstr "خارج کریں" + +msgid "action time" +msgstr "کاروائی کا وقت" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "شے کا شناختی نمبر" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "شے کا نمائندہ" + +msgid "action flag" +msgstr "کاروائی کا پرچم" + +msgid "change message" +msgstr "پیغام تبدیل کریں" + +msgid "log entry" +msgstr "لاگ کا اندراج" + +msgid "log entries" +msgstr "لاگ کے اندراج" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "اور" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "کوئی خانہ تبدیل نھیں کیا گیا۔" + +msgid "None" +msgstr "کوئی نھیں" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"اشیاء پر کاروائی سرانجام دینے کے لئے ان کا منتخب ھونا ضروری ھے۔ کوئی شے " +"تبدیل نھیں کی گئی۔" + +msgid "No action selected." +msgstr "کوئی کاروائی منتخب نھیں کی گئی۔" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" کامیابی سے مٹایا گیا تھا۔" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s کا اضافہ کریں" + +#, python-format +msgid "Change %s" +msgstr "%s تبدیل کریں" + +msgid "Database error" +msgstr "ڈیٹا بیس کی خرابی" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s کامیابی سے تبدیل کیا گیا تھا۔" +msgstr[1] "%(count)s %(name)s کامیابی سے تبدیل کیے گئے تھے۔" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s منتخب کیا گیا۔" +msgstr[1] "تمام %(total_count)s منتخب کئے گئے۔" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s میں سے 0 منتخب کیا گیا۔" + +#, python-format +msgid "Change history: %s" +msgstr "%s کی تبدیلی کا تاریخ نامہ" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "منتظم برائے جینگو سائٹ" + +msgid "Django administration" +msgstr "انتظامیہ برائے جینگو سائٹ" + +msgid "Site administration" +msgstr "سائٹ کی انتظامیہ" + +msgid "Log in" +msgstr "اندر جائیں" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "صفحہ نھیں ملا" + +msgid "We're sorry, but the requested page could not be found." +msgstr "ھم معذرت خواہ ھیں، مطلوبہ صفحہ نھیں مل سکا۔" + +msgid "Home" +msgstr "گھر" + +msgid "Server error" +msgstr "سرور کی خرابی" + +msgid "Server error (500)" +msgstr "سرور کی خرابی (500)" + +msgid "Server Error (500)" +msgstr "سرور کی خرابی (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "منتخب شدہ کاروائیاں چلائیں" + +msgid "Go" +msgstr "جاؤ" + +msgid "Click here to select the objects across all pages" +msgstr "تمام صفحات میں سے اشیاء منتخب کرنے کے لئے یہاں کلک کریں۔" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "تمام %(total_count)s %(module_name)s منتخب کریں" + +msgid "Clear selection" +msgstr "انتخاب صاف کریں" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"پہلے نام صارف اور لفظ اجازت درج کریں۔ پھر آپ مزید صارف کے حقوق مدوّن کرنے کے " +"قابل ھوں گے۔" + +msgid "Enter a username and password." +msgstr "نام صارف اور لفظ اجازت درج کریں۔" + +msgid "Change password" +msgstr "لفظ اجازت تبدیل کریں" + +msgid "Please correct the error below." +msgstr "براہ کرم نیچے غلطیاں درست کریں۔" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "صارف %(username)s کے لئے نیا لفظ اجازت درج کریں۔" + +msgid "Welcome," +msgstr "خوش آمدید،" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "طریق استعمال" + +msgid "Log out" +msgstr "باہر جائیں" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s کا اضافہ کریں" + +msgid "History" +msgstr "تاریخ نامہ" + +msgid "View on site" +msgstr "سائٹ پر مشاھدہ کریں" + +msgid "Filter" +msgstr "چھانٹیں" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "مٹائیں" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' کو مٹانے کے نتیجے میں معتلقہ اشیاء مٹ " +"سکتی ھیں، مگر آپ کے کھاتے کو اشیاء کی مندرجہ ذیل اقسام مٹانے کا حق حاصل نھیں " +"ھے۔" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' کو مٹانے کے لئے مندرجہ ذیل محفوظ متعلقہ " +"اشیاء کو مٹانے کی ضرورت پڑ سکتی ھے۔" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"واقعی آپ %(object_name)s \"%(escaped_object)s\" کو مٹانا چاہتے ھیں۔ مندرجہ " +"ذیل تمام متعلقہ اجزاء مٹ جائیں گے۔" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "ھاں، مجھے یقین ھے" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "متعدد اشیاء مٹائیں" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"منتخب شدہ %(objects_name)s کو مٹانے کے نتیجے میں متعلقہ اشیاء مٹ سکتی ھیں، " +"لیکن آپ کے کھاتے کو اشیاء کی مندرجہ ذیل اقسام کو مٹانے کا حق حاصل نھیں ھے۔" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"منتخب شدہ %(objects_name)s کو مٹانے کے لئے مندرجہ ذیل محفوظ شدہ اشیاء کو " +"مٹانے کی ضرورت پڑ سکتی ھے۔" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"واقعی آپ منتخب شدہ %(objects_name)s مٹانا چاھتے ھیں؟ مندرجہ ذیل اور ان سے " +"متعلقہ تمام اشیاء حذف ھو جائیں گی۔" + +msgid "Change" +msgstr "تدوین" + +msgid "Delete?" +msgstr "مٹاؤں؟" + +#, python-format +msgid " By %(filter_title)s " +msgstr "از %(filter_title)s" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "اضافہ" + +msgid "You don't have permission to edit anything." +msgstr "آپ کو کوئی چیز مدوّن کرنے کا حق نھیں ھے۔" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "کچھ دستیاب نھیں" + +msgid "Unknown content" +msgstr "نامعلوم مواد" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"آپ کی ڈیٹا بیس کی تنصیب میں کوئی چیز خراب ھے۔ یقین کر لیں کہ موزون ڈیٹا بیس " +"ٹیبل بنائے گئے تھے، اور یقین کر لیں کہ ڈیٹ بیس مناسب صارف کے پڑھے جانے کے " +"قابل ھے۔" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "تاریخ/وقت" + +msgid "User" +msgstr "صارف" + +msgid "Action" +msgstr "کاروائی" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"اس شے کا تبدیلی کا تاریخ نامہ نھیں ھے۔ اس کا غالباً بذریعہ اس منتظم سائٹ کے " +"اضافہ نھیں کیا گیا۔" + +msgid "Show all" +msgstr "تمام دکھائیں" + +msgid "Save" +msgstr "محفوظ کریں" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "تلاش کریں" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s نتیجہ" +msgstr[1] "%(counter)s نتائج" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "کل %(full_result_count)s" + +msgid "Save as new" +msgstr "بطور نیا محفوظ کریں" + +msgid "Save and add another" +msgstr "محفوظ کریں اور مزید اضافہ کریں" + +msgid "Save and continue editing" +msgstr "محفوظ کریں اور تدوین جاری رکھیں" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ویب سائٹ پر آج کچھ معیاری وقت خرچ کرنے کے لئے شکریہ۔" + +msgid "Log in again" +msgstr "دوبارہ اندر جائیں" + +msgid "Password change" +msgstr "لفظ اجازت کی تبدیلی" + +msgid "Your password was changed." +msgstr "آپ کا لفظ اجازت تبدیل کر دیا گیا تھا۔" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"براہ کرم سیکیورٹی کی خاطر اپنا پرانا لفظ اجازت درج کریں اور پھر اپنا نیا لفظ " +"اجازت دو مرتبہ درج کریں تاکہ ھم توثیق کر سکیں کہ آپ نے اسے درست درج کیا ھے۔" + +msgid "Change my password" +msgstr "میرا لفظ تبدیل کریں" + +msgid "Password reset" +msgstr "لفظ اجازت کی دوبارہ ترتیب" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"آپ کا لفظ اجازت مرتب کر دیا گیا ھے۔ آپ کو آگے بڑھنے اور اندر جانے کی اجازت " +"ھے۔" + +msgid "Password reset confirmation" +msgstr "لفظ اجازت دوبارہ مرتب کرنے کی توثیق" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"براہ مھربانی اپنا نیا لفظ اجازت دو مرتبہ درج کریں تاکہ تاکہ ھم تصدیق کر سکیں " +"کہ تم نے اسے درست درج کیا ھے۔" + +msgid "New password:" +msgstr "نیا لفظ اجازت:" + +msgid "Confirm password:" +msgstr "لفظ اجازت کی توثیق:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"لفظ اجازت دوبارہ مرتب کرنے کا رابطہ (لنک) غلط تھا، غالباً یہ پہلے ھی استعمال " +"کیا چکا تھا۔ براہ مھربانی نیا لفظ اجازت مرتب کرنے کی درخواست کریں۔" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "براہ مھربانی مندرجہ ذیل صفحے پر جائیں اور نیا لفظ اجازت پسند کریں:" + +msgid "Your username, in case you've forgotten:" +msgstr "نام صارف، بھول جانے کی صورت میں:" + +msgid "Thanks for using our site!" +msgstr "ھماری سائٹ استعمال کرنے کے لئے شکریہ" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s کی ٹیم" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "میرا لفظ اجازت دوبارہ مرتب کریں" + +msgid "All dates" +msgstr "تمام تاریخیں" + +#, python-format +msgid "Select %s" +msgstr "%s منتخب کریں" + +#, python-format +msgid "Select %s to change" +msgstr "تبدیل کرنے کے لئے %s منتخب کریں" + +msgid "Date:" +msgstr "تاریخ:" + +msgid "Time:" +msgstr "وقت:" + +msgid "Lookup" +msgstr "ڈھونڈیں" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..65de1984ff62879a8ed018bd10e4dbb0ea8e7abb GIT binary patch literal 2678 zcmb7EO>Y}j6dj;IF&~8j5+IOn7gbV~aqQ5htwSnkXiK4Kqc#O~gEa9x+e621%zPw` z1dE`=SRxCQ1{VDRbrM2@NegWjS+Ri)OWxQL0yg{x#D;Tc#&+G70wa%)-+TAt+;i{q zFFUt=uHktW?~8c9$NLgq`#yZ(`4xBo_#5yc;Pdxu+G9Wh@>&Nz4%`P!0gnJ50gff- z?*g}B{T^^TFrTb#-~(8H0OUA9vi~9QL9AziZ2t+6<9!Ca47?0n0`7-%1^6TI61WW` ziG}q~aOQl65OfFdFz{*MDc}phN#Jw9kATkrzW_b~{4&8!AlLH)kn8yw$nky$J_Y;( z$o78%@zJ(F9PjS{a=u-_zkpfbaq!Z)2w;FB08uQCgED#^=E!`w5ABEJu{%GH;zh_P zC+qekUe<|w!TPix=EnS)`%d26-R}u|k4H{{cK7F{kDu5Od0&|KJR2e-T~2GSPZ^eN zOxl8Wd)lZW^TO6fOOE3SGRU{eqO-E215Ze{JZ9OxaJ4rrQ)pwBDXn73*G@T(#MiWT zMwFc?p`9(^_k?2_Gx#n$u8ZY);lYu&&N~5>j49EfONJyP?^}+189z;$NepD4Pi4ad zAvr_&k|B!%Gnv|7AQ;#$maQJ zZQOO<#~kS=O#L06;&xk3DV|MKh=$S)$_7G)>8b z2BxQ{(>{l@3gTiq@017Pg4$pwz5{_fuqQQkV(e(Q^lUnl8g-;EBq+^PP@69<`U4f) zu;ehe-t~k(a&F?7ez0rDxeCJ7kIKAbViI$7aMJQS9CH-7sc}1S4O>6vxMeR#vJx%5 zk-=e#e~$D^+BHJiJ;N#7==h3<^R0#ECaI0qBCdV>4-n3WRkf*`8tQ5zz4T~q67L#=WU1jV(FQf!1ZbrmU8gE?qnE&N!mQcw2e2+qrQJ-EeK zT~q6=Sq|Q;Hn&tgtcEwExV#Lp0X9*Zs=6M|l4@XQ6~vHs3-%3-xoN1nj-$0MEw$cU z;dqHV0$);VFa}(KPMov363%HT_Zx6nZLirP+@i1wDO4S)S2!kuqv|MFZ$YgEYHqa_ z)dGxR(O~HMe+?JNM@$ce)zGq}bI4s|YJ`q0gUv!XhXu0Eamrk ztzlUUm-GxOu0^FoAEv{cqWM^6bL3g1zHnY$4QG+{Mr6t7oft^B*jmyM zxy$`O*G^0w^?(Xm!I{Acvh_s!XC+{^g}Qr{Q1wVE^;N>SSC~X3D1&K0O&P)>4}?HylF6?dDPA(3okAOqIoMM+E0@ zqrqt40$^HeeBrt}#yNQgH%PSwz-56-;T$&}k, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "دستیاب %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "چھانٹیں" + +msgid "Choose all" +msgstr "سب منتخب کریں" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "خارج کریں" + +#, javascript-format +msgid "Chosen %s" +msgstr "منتخب شدہ %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s میں سے %(sel)s منتخب کیا گیا" +msgstr[1] "%(cnt)s میں سے %(sel)s منتخب کیے گئے" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"آپ کے پاس ذاتی قابل تدوین خانوں میں غیر محفوظ تبدیلیاں موجود ھیں۔ اگر آپ " +"کوئی کاروائی کریں گے تو آپ کی غیر محفوظ تبدیلیاں ضائع ھو جائیں گی۔" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"آپ نے ایک کاروائی منتخب کی ھے لیکن ابھی تک آپ نے ذاتی خانوں میں اپنی " +"تبدیلیاں محفوظ نہیں کی ہیں براہ مھربانی محفوط کرنے کے لئے OK پر کلک کریں۔ آپ " +"کاوائی دوبارہ چلانے کی ضرورت ھوگی۔" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"آپ نے ایک کاروائی منتخب کی ھے، اور آپ نے ذاتی خانوں میں کوئی تبدیلی نہیں کی " +"غالباً آپ 'جاؤ' بٹن تلاش کر رھے ھیں بجائے 'مخفوظ کریں' بٹن کے۔" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "اب" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "وقت منتخب کریں" + +msgid "Midnight" +msgstr "نصف رات" + +msgid "6 a.m." +msgstr "6 ص" + +msgid "Noon" +msgstr "دوپھر" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "منسوخ کریں" + +msgid "Today" +msgstr "آج" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "گزشتہ کل" + +msgid "Tomorrow" +msgstr "آئندہ کل" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "دکھائیں" + +msgid "Hide" +msgstr "چھپائیں" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..67c6d07e41c1907ecf3954af2808ed41927634f3 GIT binary patch literal 4610 zcmZ{mYlvJ|9l(z^rn+j?Y9Cgur`xWx+wROhv}v3qP4n2;*z9(@yQwJ(@yyJbnUlHq zp56P{&1`512o`D}2#xeZD~SDIQ1FFcq==OwXbXN*Kd2vqRzWBQABdIW?|&b=n?^75 zzrSM%pY#tbxH9oARk38yj`gQ{Le04Jm1=_)b;Q(ybgXJz6bsY@>4(KCF6bp zZ-KAEcfvQ}4e)vf%eb52yWnk5+V6tzg>`r{+y@z=mZ0=|489MxAwQMy8i(iL2z(yO z{NIJ|fIopU{v}w0FGGInZ@fMX-+;32O}u2?+o6n`gtx<4DB~Z2{M0F4GTxN+4$8W# z5ErR)W&0CQT=iurdVdAJ8(xAb{00;~Z>CY^AA=u+lkfxZ0VsZ3f-=t;DE&O-r`CCW z1fGZD_h;da@G_i$FF?`rRro3R8k~lAqO9nfMVxQOTJRp{}zh9zk@RVuVwqcpv<$2LBboLjK7tata}$+d>b}F zS!a{M!Y{%1!wXRQKLL9ypeD0=KB*c8=G@FqA4Z-aZw`ei77 z_#*rej3GbuB(HnmB`A8l2*=)f>s^PFWu6fz`{5QyliCBtZ^vLAegR7Vr{FmJDx8ErhGNg3q1gR8 z6g~f4QWh7#?}pOv4k+v24aJUGi0bM<$rB|%4`sidflQ@BD0V$j)?a`Uw~J8x^E{M( z--FWcMJW3J3d;O{D(n9aNw@qFJ*r21RXqz7B$hJ&XON>v_1s?;WUVPgbi4zRHDtfe zA!5JyP$N5^CLi}9dy$Wq4G)&AAh8fXSC8yD$wxUW_aowCdG;WOkpqb2$!8IXM-7oU zehd-6$Rp>5JQ4?qf#jF$B{?4(h~y=1QFkKqh{WY?WFI0qv-5dq$HzG3S>yyFIU>&? z(JTjr3 zNQ#dFCh}?D#5xaAXjdb^M9=qu-+9UJ$pGq#;hBv;Nq*O0MJrlkG1~#?Z`W)$-sAp9HJ(g6ZRg)weKJJv? z&63xug`Q6{T|1vA!NMb19NQ=jhD~+Uq^4yOt8EOBY_53s=*jnu}6gY;=~`Slp{k)X|l34Ry=~w5tbA zQuyqI?`fZ<>V)@$Y*ozf`i3g_x>V0u+KWhF&YszN&*;v>V3Y@?AxH65;66_A#E#EvZ_C4otO+|-8xdsZKB z#ir*-INGCLh5_{zYr>{Jx!JME~#)#lXH#>Pg2Q;W>)+OrM(GF2#5At(n=Wt&qI zBlE}S=eE_KX-tnCDV$PY!6{9h+Oz4@YG7QnPvgCq+&*w}VXek5W0g~x@upeEp{!Am0A#*j#CfUHhYHC zA55#f?Gc1#u+xl%eDT745rZC9gYYU%@r0|yceyh*nE zmV`3EE~mpR9Jq*6+Sf?39hRww0}?C6AGzf#l2t7!N>(u68ph+8JfmF5#3@UN_g1Rt z>8@dsp-E|^D{H11OXkCt&05~M^y`>pY94kbC~ups1p41MQ`LM;_u_uqx{9`LB1~Q9 zRyJ#*QXm^6Ppdp*PGx~l%+|)r_rOH*e+Q`YN*c{Cq|s|K9-l?v5f-RY?<9+pCMWt<0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 000000000..80dd7971a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,678 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Ibragimov, 2021 +# Anvar Ulugov , 2020 +# Bedilbek Khamidov , 2019 +# Claude Paroz , 2019 +# Nuriddin Islamov, 2021 +# Shukrullo Turgunov , 2021 +# Sukhrobbek Ismatov , 2019 +# Yet Sum , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-16 12:06+0000\n" +"Last-Translator: Alex Ibragimov\n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "%(verbose_name_plural)s tanlanganlarni o'chirish" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d%(items)s muvaffaqiyatli o'chirildi." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s o'chirib bo'lmadi" + +msgid "Are you sure?" +msgstr "Ishonchingiz komilmi?" + +msgid "Administration" +msgstr "Administratsiya" + +msgid "All" +msgstr "Hammasi" + +msgid "Yes" +msgstr "Ha" + +msgid "No" +msgstr "Yo'q" + +msgid "Unknown" +msgstr "Noma'lum" + +msgid "Any date" +msgstr "Istalgan kun" + +msgid "Today" +msgstr "Bugun" + +msgid "Past 7 days" +msgstr "O'tgan 7 kun" + +msgid "This month" +msgstr "Shu oyda" + +msgid "This year" +msgstr "Shu yilda" + +msgid "No date" +msgstr "Sanasi yo'q" + +msgid "Has date" +msgstr "Sanasi bor" + +msgid "Empty" +msgstr "Bo'sh" + +msgid "Not empty" +msgstr "Bo'sh emas" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Xodimlar akkaunti uchun to'g'ri %(username)s va parolni kiriting. E'tibor " +"bering, har ikkala maydon ham harf katta-kichikligini hisobga olishi mumkin." + +msgid "Action:" +msgstr "Harakat:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Boshqa %(verbose_name)s qo‘shish" + +msgid "Remove" +msgstr "Olib tashlash" + +msgid "Addition" +msgstr " Qo'shish" + +msgid "Change" +msgstr "O'zgartirish" + +msgid "Deletion" +msgstr "O'chirish" + +msgid "action time" +msgstr "harakat vaqti" + +msgid "user" +msgstr "foydalanuvchi" + +msgid "content type" +msgstr "tarkib turi" + +msgid "object id" +msgstr "obyekt identifikatori" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "obyekt taqdimi" + +msgid "action flag" +msgstr "harakat bayrog'i" + +msgid "change message" +msgstr "xabarni o'zgartirish" + +msgid "log entry" +msgstr "jurnal yozuvi" + +msgid "log entries" +msgstr "jurnal yozuvlari" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\" qo'shildi." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "%(object)s dan %(changes)sga o'zgartirildi." + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" o'chirildi." + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "va" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "Bo'sh" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" muvaffaqiyatli o'zgartirildi." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s%(obj)smuvaffaqiyatli o'chirildi" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Qo'shish %s" + +#, python-format +msgid "Change %s" +msgstr "%sni o'zgartirish" + +#, python-format +msgid "View %s" +msgstr "Ko'rish %s" + +msgid "Database error" +msgstr "Ma'lumotlar bazasi xatoligi yuz berdi" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "Server xatoligi" + +msgid "Server error (500)" +msgstr "Server xatoligi (500)" + +msgid "Server Error (500)" +msgstr "Server xatoligi (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Tanlangan faoliyatni ishga tushirish" + +msgid "Go" +msgstr "" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Qo'shish" + +msgid "View" +msgstr "Ko'rish" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Username va parolni kiritish" + +msgid "Change password" +msgstr "Parolni o'zgartirish" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Xush kelibsiz," + +msgid "View site" +msgstr "Saytni ko'rish" + +msgid "Documentation" +msgstr "Qo'llanma" + +msgid "Log out" +msgstr "Chiqish" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)sqo'shish" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "Saytda ko'rish" + +msgid "Filter" +msgstr "Saralash" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Tartiblashdan chiqarish" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "O'chirish" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Delete?" +msgstr "O'chirasizmi?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "Xulosa" + +msgid "Recent actions" +msgstr "So'ngi harakatlar" + +msgid "My actions" +msgstr "Mening harakatlarim" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Toggle navigation" +msgstr "Navigatsiyani almashtirish" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "Saqlash" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Izlash" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Parolimni tiklash" + +msgid "All dates" +msgstr "Barcha sanalar" + +#, python-format +msgid "Select %s" +msgstr "%sni tanlash" + +#, python-format +msgid "Select %s to change" +msgstr "" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Sana:" + +msgid "Time:" +msgstr "Vaqt:" + +msgid "Lookup" +msgstr "Izlash" + +msgid "Currently:" +msgstr "Hozirda:" + +msgid "Change:" +msgstr "O'zgartirish:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/uz/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c922f69173f5f96c983a7a856ed85df6f4bf2a4 GIT binary patch literal 3783 zcmchZ%ZnUE9LGzI8dr_)_p4lulW3;*p+=cx!ObRXHgR`DcCs;whwACt?#gsm%~n^> zWESypP(%b367e7?=)u=P1yK+LLH_{Jn;=B+BAz^W6u-ajnq(5A1_Ya}{&dy+>Q}#4 zRqc;gt~^zJCn71pPOB|2@x- zz)Laynddj2-+?0-KMr05{tDg({tn&+UJK>x!70yKkk(%WA;Oly3&F>IzvY>L_+uGf zU`~!q4 z_6jD`dar@oz&Amf_XF4ge+I7tmmx$v3|<31<@-l{|6TBEjDHDU3w{UgM{a%rDNj={ z3QMxbJOxPWC%&&iTDJfxFHeJ5n!N;W0FQdU?fD6KCC0x3N&b6q3wRuS2;6Y7kH66YY^$Ebb(vY$gaE4=(z=r;&Kxj*-1WP3cCUAZZvu*9uzCeCp}l7(H^)C?RGSJ z;6_;|^iA;@JT-jW<2yHk6dQU*E0i@upPSHVZx0@XmrbBuk9HXv`A+ep7zJol19za& zQ%AcK4IyKfqfwo1M%#!+&#e_0CvM!7%XD+j%?jVRsihr0F(6w`M*sNRRxW}pU|V^I zFx{~#Wz$7m{ug-S)3O1?2?GeWmy%4QN{a_PYZ-znTsuc@-3o*V9^<=kBAQdz26 zZSD+jmFl=iQw($AxWOs`n;HCWWoEjv{2ijz?2}?UWlLtEv}{&}wh*?@W>xCY->o9a z_6S{$?J3ee+f!)C=7nt~c=y@7inNLo#}qO^*w>f?qUmQPR8|AFT>y z6cM!$3Z?5w$k6JpXE>(IJUF9KC-QvKB3}jn(V{9u|7MYiP##T_8M2!-`yC0FQK^pN zM_%K5rK~a@nO^158RN+g$sDyv>Zr03fjTa94nzpC(6Pj3)leR(u8Ingav3RCZnqUB z(N|=!uQyGDkL+8l@0VRgqIEiF8hmnma-u#lS)aI{Pi$@6KY7nM zo{>jH?&?h|be;-lY=bWpa5_Sz&S3-x2qbh|h*;K}Qe+K&U@eqwzA168(-<4;^?HG$ z*=j`|30fu_tIQf8^^?bnwXw}3^K$_(xOYp*jZVzY`h;M+zsp3k)6XE@+nrJ5KNEZh5fJi|*kfqJwycY#Ym06)HGk zO_~ZW2`#kZm8O_2i&gjc-5qqMid+pO26}W%Mq!2WcREy4VIdSMR2jBSwH7a03936Z zP!Ii6Aiwk)&?hb7XiVhBKLT1=+a7&#t7nT!C6kQ ztHR4Km_Av&+pHmR{*P#Rqz z?qqBzYHPU8EoEx8=)-|nVNyTBm7BmCI?iLd@3+9I8jgF_Zi`fS5lrO9!o_mhs4taK z-mYwDE951H4kQvuG4L<-6_n$$ixIr6$Z$I#$HkzsstEoM)}Dyxzu0>s#HU*vqbhcx zAYy@1DfdojYH3yBzCZ_VAi8utlx63Ov&fT>^5a8|Ftt&`uB`aI62WIwTp~3IqKn`p zR#nrhkRhnmT9t+}ojez-*yb55LaqMv%, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-12-15 16:52+0000\n" +"Last-Translator: Nuriddin Islamov\n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mavjud %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Bu mavjud %s ro'yxati. Siz ulardan ba'zilarini quyidagi maydonchada " +"belgilab, so'ng ikkala maydonlar orasidagi \"Tanlash\" ko'rsatkichiga bosish " +"orqali tanlashingiz mumkin." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Mavjud bo'lgan %s larni ro'yxatini filtrlash uchun ushbu maydonchaga " +"kiriting." + +msgid "Filter" +msgstr "Filtrlash" + +msgid "Choose all" +msgstr "Barchasini tanlash" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Barcha %s larni birdan tanlash uchun bosing." + +msgid "Choose" +msgstr "Tanlash" + +msgid "Remove" +msgstr "O'chirish" + +#, javascript-format +msgid "Chosen %s" +msgstr "Tanlangan %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Bu tanlangan %s ro'yxati. Siz ulardan ba'zilarini quyidagi maydonchada " +"belgilab, so'ng ikkala maydonlar orasidagi \"O'chirish\" ko'rsatkichiga " +"bosish orqali o'chirishingiz mumkin." + +msgid "Remove all" +msgstr "Barchasini o'chirish" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Barcha tanlangan %s larni birdan o'chirib tashlash uchun bosing." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s dan %(sel)s tanlandi" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Siz alohida tahrirlash mumkin bo'lgan maydonlarda saqlanmagan " +"o‘zgarishlaringiz mavjud. Agar siz harakatni ishga tushirsangiz, saqlanmagan " +"o'zgarishlaringiz yo'qotiladi." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "Hozir" + +msgid "Midnight" +msgstr "Yarim tun" + +msgid "6 a.m." +msgstr "6 t.o." + +msgid "Noon" +msgstr "Kun o'rtasi" + +msgid "6 p.m." +msgstr "6 t.k." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Eslatma: Siz server vaqtidan %s soat oldindasiz." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Eslatma: Siz server vaqtidan %s soat orqadasiz." + +msgid "Choose a Time" +msgstr "Vaqtni tanlang" + +msgid "Choose a time" +msgstr "Vaqtni tanlang" + +msgid "Cancel" +msgstr "Bekor qilish" + +msgid "Today" +msgstr "Bugun" + +msgid "Choose a Date" +msgstr "Sanani tanlang" + +msgid "Yesterday" +msgstr "Kecha" + +msgid "Tomorrow" +msgstr "Ertaga" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "Iyun" + +msgid "July" +msgstr "Iyul" + +msgid "August" +msgstr "Avgust" + +msgid "September" +msgstr "Sentabr" + +msgid "October" +msgstr "Oktabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Ya" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Du" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Se" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ch" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Pa" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Ju" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Sh" + +msgid "Show" +msgstr "Ko'rsatish" + +msgid "Hide" +msgstr "Bekitish" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1091b6fcd50b0d8a1b6abb73a19f7bbfb5ee4fb2 GIT binary patch literal 18077 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 Sw|ma{y9PevXEmawrT+y}Br&xB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..60fe2ce82 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,726 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dimitris Glezos , 2012 +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran , 2011 +# Tran Van , 2011-2013,2016,2018 +# tinnguyen121221, 2021 +# Vuong Nguyen , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-23 17:57+0000\n" +"Last-Translator: tinnguyen121221\n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Xóa các %(verbose_name_plural)s đã chọn" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Đã xóa thành công %(count)d %(items)s ." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Không thể xóa %(name)s" + +msgid "Are you sure?" +msgstr "Bạn có chắc chắn không?" + +msgid "Administration" +msgstr "Quản trị website" + +msgid "All" +msgstr "Tất cả" + +msgid "Yes" +msgstr "Có" + +msgid "No" +msgstr "Không" + +msgid "Unknown" +msgstr "Chưa xác định" + +msgid "Any date" +msgstr "Bất kì ngày nào" + +msgid "Today" +msgstr "Hôm nay" + +msgid "Past 7 days" +msgstr "7 ngày trước" + +msgid "This month" +msgstr "Tháng này" + +msgid "This year" +msgstr "Năm nay" + +msgid "No date" +msgstr "Không có ngày" + +msgid "Has date" +msgstr "Có ngày" + +msgid "Empty" +msgstr "Rỗng" + +msgid "Not empty" +msgstr "Không rỗng" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Bạn hãy nhập đúng %(username)s và mật khẩu. (Có phân biệt chữ hoa, thường)" + +msgid "Action:" +msgstr "Hoạt động:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Thêm một %(verbose_name)s " + +msgid "Remove" +msgstr "Gỡ bỏ" + +msgid "Addition" +msgstr "Thêm" + +msgid "Change" +msgstr "Thay đổi" + +msgid "Deletion" +msgstr "Xóa" + +msgid "action time" +msgstr "Thời gian tác động" + +msgid "user" +msgstr "người dùng" + +msgid "content type" +msgstr "kiểu nội dung" + +msgid "object id" +msgstr "Mã đối tượng" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "đối tượng repr" + +msgid "action flag" +msgstr "hiệu hành động" + +msgid "change message" +msgstr "thay đổi tin nhắn" + +msgid "log entry" +msgstr "đăng nhập" + +msgid "log entries" +msgstr "mục đăng nhập" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Đã thêm “%(object)s”." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Đã thay đổi “%(object)s” — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Đã xóa “%(object)s.”" + +msgid "LogEntry Object" +msgstr "LogEntry Object" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Đã thêm {name} “{object}”." + +msgid "Added." +msgstr "Được thêm." + +msgid "and" +msgstr "và" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Đã thay đổi {fields} cho {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Đã thay đổi {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Đã xóa {name} “{object}”." + +msgid "No fields changed." +msgstr "Không có trường nào thay đổi" + +msgid "None" +msgstr "Không" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Nhấn giữ phím “Control”, hoặc “Command” trên máy Mac, để chọn nhiều hơn một." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” được thêm vào thành công." + +msgid "You may edit it again below." +msgstr "Bạn có thể chỉnh sửa lại bên dưới." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” được thêm vào thành công. Bạn có thể thêm một {name} khác bên " +"dưới." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” được chỉnh sửa thành công. Bạn có thể chỉnh sửa lại bên dưới." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” được thêm vào thành công. Bạn có thể chỉnh sửa lại bên dưới." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” được chỉnh sửa thành công. Bạn có thể thêm một {name} khác " +"bên dưới." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” đã được thay đổi thành công." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Mục tiêu phải được chọn mới có thể thực hiện hành động trên chúng. Không có " +"mục tiêu nào đã được thay đổi." + +msgid "No action selected." +msgstr "Không có hoạt động nào được lựa chọn." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” đã được xóa thành công." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s với ID “%(key)s” không tồn tại. Có lẽ nó đã bị xóa?" + +#, python-format +msgid "Add %s" +msgstr "Thêm %s" + +#, python-format +msgid "Change %s" +msgstr "Thay đổi %s" + +#, python-format +msgid "View %s" +msgstr "Xem %s" + +msgid "Database error" +msgstr "Cơ sở dữ liệu bị lỗi" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] " %(count)s %(name)s đã được thay đổi thành công." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Tất cả %(total_count)s đã được chọn" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 của %(cnt)s được chọn" + +#, python-format +msgid "Change history: %s" +msgstr "Lịch sử thay đổi: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Xóa %(class_name)s %(instance)s sẽ tự động xóa các đối tượng liên quan sau: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Trang web admin Django" + +msgid "Django administration" +msgstr "Trang quản trị cho Django" + +msgid "Site administration" +msgstr "Site quản trị hệ thống." + +msgid "Log in" +msgstr "Đăng nhập" + +#, python-format +msgid "%(app)s administration" +msgstr "Quản lý %(app)s" + +msgid "Page not found" +msgstr "Không tìm thấy trang nào" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Rất tiếc, không thể tìm thấy trang được yêu cầu." + +msgid "Home" +msgstr "Trang chủ" + +msgid "Server error" +msgstr "Lỗi máy chủ" + +msgid "Server error (500)" +msgstr "Lỗi máy chủ (500)" + +msgid "Server Error (500)" +msgstr "Lỗi máy chủ (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Có lỗi xảy ra. Lỗi sẽ được gửi đến quản trị website qua email và sẽ được " +"khắc phục sớm. Cám ơn bạn." + +msgid "Run the selected action" +msgstr "Bắt đầu hành động lựa chọn" + +msgid "Go" +msgstr "Đi đến" + +msgid "Click here to select the objects across all pages" +msgstr "Click vào đây để lựa chọn các đối tượng trên tất cả các trang" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Hãy chọn tất cả %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Xóa lựa chọn" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Các mô models trong %(name)s" + +msgid "Add" +msgstr "Thêm vào" + +msgid "View" +msgstr "Xem" + +msgid "You don’t have permission to view or edit anything." +msgstr "Bạn không có quyền xem hoặc chỉnh sửa bất cứ gì." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Đầu tiên, điền tên đăng nhập và mật khẩu. Sau đó, bạn mới có thể chỉnh sửa " +"nhiều hơn lựa chọn của người dùng." + +msgid "Enter a username and password." +msgstr "Điền tên đăng nhập và mật khẩu." + +msgid "Change password" +msgstr "Đổi mật khẩu" + +msgid "Please correct the error below." +msgstr "Hãy sửa lỗi sai dưới đây" + +msgid "Please correct the errors below." +msgstr "Hãy chỉnh sửa lại các lỗi sau." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Hãy nhập mật khẩu mới cho người sử dụng %(username)s." + +msgid "Welcome," +msgstr "Chào mừng bạn," + +msgid "View site" +msgstr "Xem trang web" + +msgid "Documentation" +msgstr "Tài liệu" + +msgid "Log out" +msgstr "Thoát" + +#, python-format +msgid "Add %(name)s" +msgstr "Thêm vào %(name)s" + +msgid "History" +msgstr "Bản ghi nhớ" + +msgid "View on site" +msgstr "Xem trên trang web" + +msgid "Filter" +msgstr "Bộ lọc" + +msgid "Clear all filters" +msgstr "Xóa tất cả bộ lọc" + +msgid "Remove from sorting" +msgstr "Bỏ khỏi sắp xếp" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sắp xếp theo:%(priority_number)s" + +msgid "Toggle sorting" +msgstr "Hoán đổi sắp xếp" + +msgid "Delete" +msgstr "Xóa" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Xóa %(object_name)s '%(escaped_object)s' sẽ làm mất những dữ liệu có liên " +"quan. Tài khoản của bạn không được cấp quyển xóa những dữ liệu đi kèm theo." + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Xóa các %(object_name)s ' %(escaped_object)s ' sẽ bắt buộc xóa các đối " +"tượng được bảo vệ sau đây:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Bạn có chắc là muốn xóa %(object_name)s \"%(escaped_object)s\"?Tất cả những " +"dữ liệu đi kèm dưới đây cũng sẽ bị mất:" + +msgid "Objects" +msgstr "Đối tượng" + +msgid "Yes, I’m sure" +msgstr "Có, tôi chắc chắn" + +msgid "No, take me back" +msgstr "Không, đưa tôi trở lại" + +msgid "Delete multiple objects" +msgstr "Xóa nhiều đối tượng" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Xóa các %(objects_name)s sẽ bắt buộc xóa các đối tượng liên quan, nhưng tài " +"khoản của bạn không có quyền xóa các loại đối tượng sau đây:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Xóa các %(objects_name)s sẽ bắt buộc xóa các đối tượng đã được bảo vệ sau " +"đây:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Bạn chắc chắn muốn xóa những lựa chọn %(objects_name)s? Tất cả những đối " +"tượng sau và những đối tượng liên quan sẽ được xóa:" + +msgid "Delete?" +msgstr "Bạn muốn xóa?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Bởi %(filter_title)s " + +msgid "Summary" +msgstr "Tóm tắt" + +msgid "Recent actions" +msgstr "Hoạt động gần đây" + +msgid "My actions" +msgstr "Hoạt động của tôi" + +msgid "None available" +msgstr "Không có sẵn" + +msgid "Unknown content" +msgstr "Không biết nội dung" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Một vài lỗi với cơ sở dữ liệu cài đặt của bạn. Hãy chắc chắn bảng biểu dữ " +"liệu được tạo phù hợp và dữ liệu có thể được đọc bởi những người sử dụng phù " +"hợp." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Bạn đã xác thực bằng tài khoản %(username)s, nhưng không đủ quyền để truy " +"cập trang này. Bạn có muốn đăng nhập bằng một tài khoản khác?" + +msgid "Forgotten your password or username?" +msgstr "Bạn quên mật khẩu hoặc tài khoản?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "Nhập để lọc..." + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Ngày/giờ" + +msgid "User" +msgstr "Người dùng" + +msgid "Action" +msgstr "Hành động" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Đối tượng này không có một lịch sử thay đổi. Nó có lẽ đã không được thêm vào " +"qua trang web admin." + +msgid "Show all" +msgstr "Hiện tất cả" + +msgid "Save" +msgstr "Lưu lại" + +msgid "Popup closing…" +msgstr "Đang đóng cửa sổ popup ..." + +msgid "Search" +msgstr "Tìm kiếm" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s kết quả" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "tổng số %(full_result_count)s" + +msgid "Save as new" +msgstr "Lưu mới" + +msgid "Save and add another" +msgstr "Lưu và thêm mới" + +msgid "Save and continue editing" +msgstr "Lưu và tiếp tục chỉnh sửa" + +msgid "Save and view" +msgstr "Lưu lại và xem" + +msgid "Close" +msgstr "Đóng" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Thay đổi %(model)s đã chọn" + +#, python-format +msgid "Add another %(model)s" +msgstr "Thêm %(model)s khác" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Xóa %(model)s đã chọn" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Cảm ơn bạn đã dành thời gian với trang web." + +msgid "Log in again" +msgstr "Đăng nhập lại" + +msgid "Password change" +msgstr "Thay đổi mật khẩu" + +msgid "Your password was changed." +msgstr "Mật khẩu của bạn đã được thay đổi" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Hãy nhập lại mật khẩu cũ và sau đó nhập mật khẩu mới hai lần để chúng tôi có " +"thể kiểm tra lại xem bạn đã gõ chính xác hay chưa." + +msgid "Change my password" +msgstr "Thay đổi mật khẩu" + +msgid "Password reset" +msgstr "Lập lại mật khẩu" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Mật khẩu của bạn đã được lập lại. Bạn hãy thử đăng nhập." + +msgid "Password reset confirmation" +msgstr "Xác nhận việc lập lại mật khẩu" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Hãy nhập mật khẩu mới hai lần để chúng tôi có thể kiểm tra xem bạn đã gõ " +"chính xác chưa" + +msgid "New password:" +msgstr "Mật khẩu mới" + +msgid "Confirm password:" +msgstr "Nhập lại mật khẩu:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Liên kết đặt lại mật khẩu không hợp lệ, có thể vì nó đã được sử dụng. Xin " +"vui lòng yêu cầu đặt lại mật khẩu mới." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Chúng tôi đã gửi cho bạn hướng dẫn thiết lập mật khẩu của bạn qua email, nếu " +"tài khoản tồn tại với email bạn đã nhập. Bạn sẽ nhận được chúng sớm." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Nếu bạn không nhận được email, hãy đảm bảo rằng bạn đã nhập địa chỉ mà bạn " +"đã đăng ký và kiểm tra thư mục spam của mình." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Bạn nhận được email này vì bạn đã yêu cầu làm mới lại mật khẩu cho tài khoản " +"của bạn tại %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Hãy vào đường link dưới đây và chọn một mật khẩu mới" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Tên đăng nhập của bạn, trường hợp bạn quên nó:" + +msgid "Thanks for using our site!" +msgstr "Cảm ơn bạn đã sử dụng website của chúng tôi!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Đội của %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Quên mật khẩu? Nhập địa chỉ email vào ô dưới đây. Chúng tôi sẽ email cho bạn " +"hướng dẫn cách thiết lập mật khẩu mới." + +msgid "Email address:" +msgstr "Địa chỉ Email:" + +msgid "Reset my password" +msgstr "Làm lại mật khẩu" + +msgid "All dates" +msgstr "Tất cả các ngày" + +#, python-format +msgid "Select %s" +msgstr "Chọn %s" + +#, python-format +msgid "Select %s to change" +msgstr "Chọn %s để thay đổi" + +#, python-format +msgid "Select %s to view" +msgstr "Chọn %s để xem" + +msgid "Date:" +msgstr "Ngày:" + +msgid "Time:" +msgstr "Giờ:" + +msgid "Lookup" +msgstr "Tìm" + +msgid "Currently:" +msgstr "Hiện nay:" + +msgid "Change:" +msgstr "Thay đổi:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c9d57cda5cf7ba98faa34c97f47471a6b8276552 GIT binary patch literal 5302 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, 2011 +# Tran , 2011 +# Tran Van , 2013 +# tinnguyen121221, 2021 +# Vuong Nguyen , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-12-23 17:25+0000\n" +"Last-Translator: tinnguyen121221\n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Có sẵn %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Danh sách các lựa chọn đang có %s. Bạn có thể chọn bằng bách click vào mũi " +"tên \"Chọn\" nằm giữa hai hộp." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Bạn hãy nhập vào ô này để lọc các danh sách sau %s." + +msgid "Filter" +msgstr "Lọc" + +msgid "Choose all" +msgstr "Chọn tất cả" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click để chọn tất cả %s ." + +msgid "Choose" +msgstr "Chọn" + +msgid "Remove" +msgstr "Xóa" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chọn %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Danh sách bạn đã chọn %s. Bạn có thể bỏ chọn bằng cách click vào mũi tên " +"\"Xoá\" nằm giữa hai ô." + +msgid "Remove all" +msgstr "Xoá tất cả" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click để bỏ chọn tất cả %s" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] " %(sel)s của %(cnt)s được chọn" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bạn chưa lưu những trường đã chỉnh sửa. Nếu bạn chọn hành động này, những " +"chỉnh sửa chưa được lưu sẽ bị mất." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Bạn đã chọn một hành động, nhưng bạn chưa lưu các thay đổi trên các trường. " +"Vui lòng bấm OK để lưu lại. Bạn sẽ cần chạy lại hành dộng." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Bạn đã chọn một hành động và bạn đã không thực hiện bất kỳ thay đổi nào trên " +"các trường. Có lẽ bạn nên bấm nút Đi đến hơn là nút Lưu lại." + +msgid "Now" +msgstr "Bây giờ" + +msgid "Midnight" +msgstr "Nửa đêm" + +msgid "6 a.m." +msgstr "6 giờ sáng" + +msgid "Noon" +msgstr "Buổi trưa" + +msgid "6 p.m." +msgstr "6 giờ chiều" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Lưu ý: Hiện tại bạn đang thấy thời gian trước %s giờ so với thời gian máy " +"chủ." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Lưu ý: Hiện tại bạn đang thấy thời gian sau %s giờ so với thời gian máy chủ." + +msgid "Choose a Time" +msgstr "Chọn Thời gian" + +msgid "Choose a time" +msgstr "Chọn giờ" + +msgid "Cancel" +msgstr "Hủy bỏ" + +msgid "Today" +msgstr "Hôm nay" + +msgid "Choose a Date" +msgstr "Chọn Ngày" + +msgid "Yesterday" +msgstr "Hôm qua" + +msgid "Tomorrow" +msgstr "Ngày mai" + +msgid "January" +msgstr "Tháng Một" + +msgid "February" +msgstr "Tháng Hai" + +msgid "March" +msgstr "Tháng Ba" + +msgid "April" +msgstr "Tháng Tư" + +msgid "May" +msgstr "Tháng Năm" + +msgid "June" +msgstr "Tháng Sáu" + +msgid "July" +msgstr "Tháng Bảy" + +msgid "August" +msgstr "Tháng Tám" + +msgid "September" +msgstr "Tháng Chín" + +msgid "October" +msgstr "Tháng Mười" + +msgid "November" +msgstr "Tháng Mười Một" + +msgid "December" +msgstr "Tháng Mười Hai" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Tháng Một" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Tháng Hai" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Tháng Ba" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Tháng Tư" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Tháng Năm" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Tháng Sáu" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Tháng Bảy" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Tháng Tám" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Tháng Chín" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Tháng Mười" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Tháng Mười Một" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Tháng Mười Hai" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "CN" + +msgctxt "one letter Monday" +msgid "M" +msgstr "2" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "3" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "4" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "5" + +msgctxt "one letter Friday" +msgid "F" +msgstr "6" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "7" + +msgid "Show" +msgstr "Hiện ra" + +msgid "Hide" +msgstr "Dấu đi" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..98b5a7fc1022a1c8508a8b084fb418d65d17afd6 GIT binary patch literal 16014 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..ad7fd6c8e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,717 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# lanbla , 2021 +# Brian Wang , 2018 +# Fulong Sun , 2016 +# Jannis Leidel , 2011 +# Kevin Sze , 2012 +# Lele Long , 2011,2015 +# Le Yang , 2018 +# li beite , 2020 +# Liping Wang , 2016-2017 +# mozillazg , 2016 +# Ronald White , 2013-2014 +# Sean Lee , 2013 +# Sean Lee , 2013 +# slene , 2011 +# Suntravel Chris , 2019 +# Wentao Han , 2018,2020 +# xuyi wang , 2018 +# yf zhan , 2018 +# dykai , 2019 +# ced773123cfad7b4e8b79ca80f736af9, 2012 +# fangjiaqi77 <370358679@qq.com>, 2020 +# Kevin Sze , 2012 +# 考证 李 , 2020 +# 雨翌 , 2016 +# Ronald White , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 03:10+0000\n" +"Last-Translator: lanbla \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "删除所选的 %(verbose_name_plural)s" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "成功删除了 %(count)d 个 %(items)s" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "无法删除 %(name)s" + +msgid "Are you sure?" +msgstr "你确定吗?" + +msgid "Administration" +msgstr "管理" + +msgid "All" +msgstr "全部" + +msgid "Yes" +msgstr "是" + +msgid "No" +msgstr "否" + +msgid "Unknown" +msgstr "未知" + +msgid "Any date" +msgstr "任意日期" + +msgid "Today" +msgstr "今天" + +msgid "Past 7 days" +msgstr "过去7天" + +msgid "This month" +msgstr "本月" + +msgid "This year" +msgstr "今年" + +msgid "No date" +msgstr "没有日期" + +msgid "Has date" +msgstr "具有日期" + +msgid "Empty" +msgstr "空" + +msgid "Not empty" +msgstr "非空" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "请输入一个正确的 %(username)s 和密码. 注意他们都是区分大小写的." + +msgid "Action:" +msgstr "动作" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "添加另一个 %(verbose_name)s" + +msgid "Remove" +msgstr "删除" + +msgid "Addition" +msgstr "添加" + +msgid "Change" +msgstr "修改" + +msgid "Deletion" +msgstr "删除" + +msgid "action time" +msgstr "操作时间" + +msgid "user" +msgstr "用户" + +msgid "content type" +msgstr "内容类型" + +msgid "object id" +msgstr "对象id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "对象表示" + +msgid "action flag" +msgstr "动作标志" + +msgid "change message" +msgstr "修改消息" + +msgid "log entry" +msgstr "日志记录" + +msgid "log entries" +msgstr "日志记录" + +#, python-format +msgid "Added “%(object)s”." +msgstr "添加了“%(object)s”。" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "修改了“%(object)s”—%(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "删除了“%(object)s”。" + +msgid "LogEntry Object" +msgstr "LogEntry对象" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "添加了 {name}“{object}”。" + +msgid "Added." +msgstr "已添加。" + +msgid "and" +msgstr "和" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "修改了 {name}“{object}”的 {fields}。" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "已修改{fields}。" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "删除了 {name}“{object}”。" + +msgid "No fields changed." +msgstr "没有字段被修改。" + +msgid "None" +msgstr "无" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "按住 Control 键或 Mac 上的 Command 键来选择多项。" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "成功添加了 {name}“{obj}”。" + +msgid "You may edit it again below." +msgstr "您可以在下面再次编辑它." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "成功添加了 {name}“{obj}”。你可以在下面添加另一个 {name}。" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "成功修改了 {name}“{obj}”。你可以在下面再次编辑它。" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "成功添加了 {name}“{obj}”。你可以在下面再次编辑它。" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "成功修改了 {name}“{obj}”。你可以在下面添加另一个 {name}。" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "成功修改了 {name}“{obj}”。" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "条目必须选中以对其进行操作。没有任何条目被更改。" + +msgid "No action selected." +msgstr "未选择动作" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "成功删除了 %(name)s“%(obj)s”。" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "ID 为“%(key)s”的 %(name)s 不存在。可能已经被删除了?" + +#, python-format +msgid "Add %s" +msgstr "增加 %s" + +#, python-format +msgid "Change %s" +msgstr "修改 %s" + +#, python-format +msgid "View %s" +msgstr "查看 %s" + +msgid "Database error" +msgstr "数据库错误" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "总共 %(count)s 个 %(name)s 变更成功。" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "选中了 %(total_count)s 个" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s 个中 0 个被选" + +#, python-format +msgid "Change history: %s" +msgstr "变更历史: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"删除 %(class_name)s %(instance)s 将需要删除以下受保护的相关对象: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Django 站点管理员" + +msgid "Django administration" +msgstr "Django 管理" + +msgid "Site administration" +msgstr "站点管理" + +msgid "Log in" +msgstr "登录" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 管理" + +msgid "Page not found" +msgstr "页面没有找到" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "非常抱歉,请求的页面不存在。" + +msgid "Home" +msgstr "首页" + +msgid "Server error" +msgstr "服务器错误" + +msgid "Server error (500)" +msgstr "服务器错误(500)" + +msgid "Server Error (500)" +msgstr "服务器错误 (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"发生了错误,已经通过电子邮件报告给了网站管理员。我们会尽快修复,感谢您的耐心" +"等待。" + +msgid "Run the selected action" +msgstr "运行选中的动作" + +msgid "Go" +msgstr "执行" + +msgid "Click here to select the objects across all pages" +msgstr "点击此处选择所有页面中包含的对象。" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "选中所有的 %(total_count)s 个 %(module_name)s" + +msgid "Clear selection" +msgstr "清除选中" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "在应用程序 %(name)s 中的模型" + +msgid "Add" +msgstr "增加" + +msgid "View" +msgstr "查看" + +msgid "You don’t have permission to view or edit anything." +msgstr "你没有查看或编辑的权限。" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "输入用户名和密码后,你将能够编辑更多的用户选项。" + +msgid "Enter a username and password." +msgstr "输入用户名和密码" + +msgid "Change password" +msgstr "修改密码" + +msgid "Please correct the error below." +msgstr "请更正下列错误。" + +msgid "Please correct the errors below." +msgstr "请更正下列错误。" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "为用户 %(username)s 输入一个新的密码。" + +msgid "Welcome," +msgstr "欢迎," + +msgid "View site" +msgstr "查看站点" + +msgid "Documentation" +msgstr "文档" + +msgid "Log out" +msgstr "注销" + +#, python-format +msgid "Add %(name)s" +msgstr "增加 %(name)s" + +msgid "History" +msgstr "历史" + +msgid "View on site" +msgstr "在站点上查看" + +msgid "Filter" +msgstr "过滤器" + +msgid "Clear all filters" +msgstr "清除所有过滤器" + +msgid "Remove from sorting" +msgstr "删除排序" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "排序优先级: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "正逆序切换" + +msgid "Delete" +msgstr "删除" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"删除 %(object_name)s '%(escaped_object)s' 会导致删除相关的对象,但你的帐号无" +"权删除下列类型的对象:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"要删除 %(object_name)s '%(escaped_object)s', 将要求删除以下受保护的相关对象:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"你确认想要删除 %(object_name)s \"%(escaped_object)s\"? 下列所有相关的项目都" +"将被删除:" + +msgid "Objects" +msgstr "对象" + +msgid "Yes, I’m sure" +msgstr "是的,我确定" + +msgid "No, take me back" +msgstr "不,返回" + +msgid "Delete multiple objects" +msgstr "删除多个对象" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"要删除所选的 %(objects_name)s 结果会删除相关对象, 但你的账户没有权限删除这类" +"对象:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "要删除所选的 %(objects_name)s, 将要求删除以下受保护的相关对象:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"请确认要删除选中的 %(objects_name)s 吗?以下所有对象和余它们相关的条目将都会" +"被删除:" + +msgid "Delete?" +msgstr "删除?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " 以 %(filter_title)s" + +msgid "Summary" +msgstr "概览" + +msgid "Recent actions" +msgstr "最近动作" + +msgid "My actions" +msgstr "我的动作" + +msgid "None available" +msgstr "无可用的" + +msgid "Unknown content" +msgstr "未知内容" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"数据库设置有误。请检查所需的数据库表格是否已经创建,以及数据库用户是否具有正" +"确的权限。" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"您当前以%(username)s登录,但是没有这个页面的访问权限。您想使用另外一个账号登" +"录吗?" + +msgid "Forgotten your password or username?" +msgstr "忘记了您的密码或用户名?" + +msgid "Toggle navigation" +msgstr "切换导航" + +msgid "Start typing to filter…" +msgstr "开始输入以筛选..." + +msgid "Filter navigation items" +msgstr "筛选导航项目" + +msgid "Date/time" +msgstr "日期/时间" + +msgid "User" +msgstr "用户" + +msgid "Action" +msgstr "动作" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "此对象没有修改历史。它可能不是通过管理站点添加的。" + +msgid "Show all" +msgstr "显示全部" + +msgid "Save" +msgstr "保存" + +msgid "Popup closing…" +msgstr "弹窗关闭中..." + +msgid "Search" +msgstr "搜索" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s 条结果。" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "总共 %(full_result_count)s" + +msgid "Save as new" +msgstr "保存为新的" + +msgid "Save and add another" +msgstr "保存并增加另一个" + +msgid "Save and continue editing" +msgstr "保存并继续编辑" + +msgid "Save and view" +msgstr "保存并查看" + +msgid "Close" +msgstr "关闭" + +#, python-format +msgid "Change selected %(model)s" +msgstr "更改选中的%(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "增加另一个 %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "取消选中 %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "感谢您今天与本网站共度一段高品质时光。" + +msgid "Log in again" +msgstr "重新登录" + +msgid "Password change" +msgstr "密码修改" + +msgid "Your password was changed." +msgstr "你的密码已修改。" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "安全起见请输入你的旧密码。然后输入两次你的新密码以确保输入正确。" + +msgid "Change my password" +msgstr "修改我的密码" + +msgid "Password reset" +msgstr "密码重设" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "你的密码己经设置完成,现在你可以继续进行登录。" + +msgid "Password reset confirmation" +msgstr "密码重设确认" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "请输入两遍新密码,以便我们校验你输入的是否正确。" + +msgid "New password:" +msgstr "新密码:" + +msgid "Confirm password:" +msgstr "确认密码:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "密码重置链接无效,可能是因为它已使用。可以请求一次新的密码重置。" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"如果你所输入的电子邮箱存在对应的用户,我们将通过电子邮件向你发送设置密码的操" +"作步骤说明。你应该很快就会收到。" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"如果你没有收到电子邮件,请检查输入的是你注册的电子邮箱地址。另外,也请检查你" +"的垃圾邮件文件夹。" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "你收到这封邮件是因为你请求重置你在网站 %(site_name)s上的用户账户密码。" + +msgid "Please go to the following page and choose a new password:" +msgstr "请访问该页面并选择一个新密码:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "提醒一下,你的用户名是:" + +msgid "Thanks for using our site!" +msgstr "感谢使用我们的站点!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s 团队" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"忘记密码?在下面输入你的电子邮箱地址,我们将会把设置新密码的操作步骤说明通过" +"电子邮件发送给你。" + +msgid "Email address:" +msgstr "电子邮件地址:" + +msgid "Reset my password" +msgstr "重设我的密码" + +msgid "All dates" +msgstr "所有日期" + +#, python-format +msgid "Select %s" +msgstr "选择 %s" + +#, python-format +msgid "Select %s to change" +msgstr "选择 %s 来修改" + +#, python-format +msgid "Select %s to view" +msgstr "选择%s查看" + +msgid "Date:" +msgstr "日期:" + +msgid "Time:" +msgstr "时间:" + +msgid "Lookup" +msgstr "查询" + +msgid "Currently:" +msgstr "当前:" + +msgid "Change:" +msgstr "更改:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..505b8e1a368875e760a4a30ef272b557a31046b8 GIT binary patch literal 4831 zcmcJRe{fV+700i3ZELVN+`4ehHQ(Bj?UZNo9ruZ-;3|P z&9eT{Stx`AvIH!I01J|K>7>PwhzulzfHR#@r;g6}vvwRiiu+zR|HwZ&{-ZN~&wF>5 zWyv5jjxV|I^X|Flo_o%@=icPQ*@43h&nmP>sC|^Nt;7Icc(Na3Y#F!%yc-;s{4t1M z_EXva1^5Z{e=GZckt~7tL4IBG-;%RntPb+efgcAS2Ok4N;5={xcrTced=`Bp3l7gb^Cw29mxFlHKiiL4{>O@^cSJ zetr+6_4D8%a1cBQE`KJ# zGw6R4q;yJ)56OQ?-t{S8zfSUg$%iE$1DC+wJjri>w9WxJ zeoS&uatI{;7Ew*We<^Kal;q?`NzN{rkW!a2L1@oQ332 zd}+y7LGov}?Dt9bOP-J{NS={A2hzN8*?(8^JrLW-ekJ)E$=^x7FZqGwA0_`JiK%QM zz2rl=m?OUzgLD>X-@b%Kb%Joc{L&tV(7udD=l^Lms>dK2)e${Nfmf^a{Ww|}Z2=n9 zCp{?H%Cky-QH=CF;lry{F24zMhkX?d*BD!hwj2#dwDMrP*w@hLY(6EW2$i9H*j(9P z2|kJTMcJowNoRxZ2YSAO_6%Ahb@0&s(X-44s|V>Wp#7hRhAV(IpwaoHJB}VYd)_m5 zfhDws7B|}X+yyb+#wP?KW{Wtx-PlsDgpwh)ly?wTcbKZiR;Suimd#doDypVLHNodv ztVz*hLSsz{!?1(|SNL;^UDb=I$*P`R-P63eme4(8ni|{2ZG*==b6n9hh`C~O1FM8s zQ+eDJNuyJE<52Zy-%xu_#6&VGOx7%-W=b(LtXb7;^q*Jbf~{9{Pqsd#W!UE)lNU^4Mv)6jM)ZdV6&Gf3Cb616&<#(*P4K0B%xXyzji`!O|_8eHm+1{ zaL9{4sbtD~Vi`%nqZwI6s@_ghlU&t36H#M3;?RsVR}czDbRMHklX`rPUnp~sQ4>m0 zVW$OjXmvYna7-6gXhx?h`+UPASq1;2M}CU_n@2_*fNkD|tR zn^$E#ZlwK)X3QtsDlF6@nWM@|D5&G|iA2)460=o9U*zR4BNg;(*`qd3Dshy&PCKFK z?E+_7hYxYJQ;nw-4XX<+Zh6^(ItsSKG@>}B8LkcGFO#o&*NH4X%#L+aU=}O4lyMfHAQEL zCk@?BaPKk<;9V>CuEzjw$(n)keH6e)%~1J<3gDw=NZwNcuyzDDR{+=7En;0jT&wNf zZUMY&)N$WInyHa)z`aU$X8<2HL-I}ufHfnPJ0*ZGX6VS9uuvk__`E z-1GwVzkoiJg?vH6wmZW0_33mvWRoqmO<~aQO{ATCPo)!8Ll!h~u6P^W{<1 zu6P{g-dc5=w3Ml6!DhouT4AntcwKAd;uYNgT-mUqj!kEKietmYOI?+JHi~2KKr(e~ z7bO0FB9O4+*j^{sy>x2lI6n84Kb_;p-F!E5cAxRkH!^i-i2f~b`ug1q-DKR|_qIfF zEDJ;Kk<)Je`!%8q(?`zFByx5S!32$zJ+c@)aQ002mTCO8p}E#yvpbp7eQNq>!R^Vq z`5x!uIbQ)$$kE)6;-y}4QlfNqk2_Id)5i{!j`SfUOvBjNYkoMxey_)$aL5zpx}8Fv zxx;TFc;^0S$lcX<{qnKmq;vAV+rFVNxX zLuZ}cr;z}^3~tF0<_yssO4P-3QxkoDn0^U6dxwgXc_gPe*@XnV=LV_da)+n({h)aD ztb1s@I5AP2JPc*0u&X-TzLEKBjrneG4_qi^dy8W^n3zw0#ih`5{0^3-!t+)xUOnLq z50Ix-E>Obrqi+8=%#}ti`Wv|M1z*?qX*!=Ry|u&X%1!Udx&5Q1iwCiBRIgrmWj98T zx%qeG65au(TwU%jT{-BU>MKs>XraCV_xSk`ci!6Rp3K9M@;;oQLC@MEUa?Y{;EZ+^ nael_$a0)*Rv6`Et_PE~B0WBXCc|zoAXl5;}6+aRDY+?TaS>1f5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..32dfa619c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po @@ -0,0 +1,270 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# HuanCheng Bai白宦成 , 2018 +# Jannis Leidel , 2011 +# Kewei Ma , 2016 +# Lele Long , 2011,2015 +# Liping Wang , 2016 +# matthew Yip , 2020 +# mozillazg , 2016 +# slene , 2011 +# Veoco , 2021 +# spaceoi , 2016 +# ced773123cfad7b4e8b79ca80f736af9, 2012 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-07 04:25+0000\n" +"Last-Translator: Veoco \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "可用 %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"这是可用的%s列表。你可以在选择框下面进行选择,然后点击两选框之间的“选择”箭" +"头。" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "在此框中键入以过滤可用的%s列表" + +msgid "Filter" +msgstr "过滤" + +msgid "Choose all" +msgstr "全选" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "点击选择全部%s。" + +msgid "Choose" +msgstr "选择" + +msgid "Remove" +msgstr "删除" + +#, javascript-format +msgid "Chosen %s" +msgstr "选中的 %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"这是选中的 %s 的列表。你可以在选择框下面进行选择,然后点击两选框之间的“删" +"除”箭头进行删除。" + +msgid "Remove all" +msgstr "删除全部" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "删除所有已选择的%s。" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "选中了 %(cnt)s 个中的 %(sel)s 个" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"你尚未保存一个可编辑栏位的变更. 如果你进行别的动作, 未保存的变更将会丢失." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"你已经选择一个动作,但是你没有保存你单独修改的地方。请点击OK保存。你需要再重" +"新跑这个动作。" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"你已经选择一个动作,但是没有单独修改任何一处。你可以选择'Go'按键而不" +"是'Save'按键。" + +msgid "Now" +msgstr "现在" + +msgid "Midnight" +msgstr "午夜" + +msgid "6 a.m." +msgstr "上午6点" + +msgid "Noon" +msgstr "正午" + +msgid "6 p.m." +msgstr "下午6点" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "注意:你比服务器时间超前 %s 个小时。" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "注意:你比服务器时间滞后 %s 个小时。" + +msgid "Choose a Time" +msgstr "选择一个时间" + +msgid "Choose a time" +msgstr "选择一个时间" + +msgid "Cancel" +msgstr "取消" + +msgid "Today" +msgstr "今天" + +msgid "Choose a Date" +msgstr "选择一个日期" + +msgid "Yesterday" +msgstr "昨天" + +msgid "Tomorrow" +msgstr "明天" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "一月" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "二月" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "三月" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "四月" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "五月" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "六月" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "七月" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "八月" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "九月" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "十月" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "十一月" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "十二月" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "显示" + +msgid "Hide" +msgstr "隐藏" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a96ef9a02bff60ed71cb96ee9e665b7e161f2b89 GIT binary patch literal 15152 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 EU%_slaR2}S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2a1d9a3a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,660 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# ilay , 2012 +# Jannis Leidel , 2011 +# mail6543210 , 2013-2014 +# ming hsien tzang , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016-2017 +# Yeh-Yung , 2013 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "成功的刪除了 %(count)d 個 %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "無法刪除 %(name)s" + +msgid "Are you sure?" +msgstr "你確定嗎?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "刪除所選的 %(verbose_name_plural)s" + +msgid "Administration" +msgstr "管理" + +msgid "All" +msgstr "全部" + +msgid "Yes" +msgstr "是" + +msgid "No" +msgstr "否" + +msgid "Unknown" +msgstr "未知" + +msgid "Any date" +msgstr "任何日期" + +msgid "Today" +msgstr "今天" + +msgid "Past 7 days" +msgstr "過去 7 天" + +msgid "This month" +msgstr "本月" + +msgid "This year" +msgstr "今年" + +msgid "No date" +msgstr "沒有日期" + +msgid "Has date" +msgstr "有日期" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "請輸入正確的工作人員%(username)s及密碼。請注意兩者皆區分大小寫。" + +msgid "Action:" +msgstr "動作:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "新增其它 %(verbose_name)s" + +msgid "Remove" +msgstr "移除" + +msgid "action time" +msgstr "動作時間" + +msgid "user" +msgstr "使用者" + +msgid "content type" +msgstr "內容類型" + +msgid "object id" +msgstr "物件 id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "物件 repr" + +msgid "action flag" +msgstr "動作旗標" + +msgid "change message" +msgstr "變更訊息" + +msgid "log entry" +msgstr "紀錄項目" + +msgid "log entries" +msgstr "紀錄項目" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" 已新增。" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s 已變更。" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" 已刪除。" + +msgid "LogEntry Object" +msgstr "紀錄項目" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" 已新增。" + +msgid "Added." +msgstr "已新增。" + +msgid "and" +msgstr "和" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{name} \"{object}\" 的 {fields} 已變更。" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} 已變更。" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} \"{object}\" 已刪除。" + +msgid "No fields changed." +msgstr "沒有欄位被變更。" + +msgid "None" +msgstr "無" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "按住 \"Control\" 或 \"Command\" (Mac),可選取多個值" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" 新增成功。你可以在下面再次編輯它。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" 新增成功。你可以在下方加入其他 {name}。" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" 已成功新增。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" 變更成功。你可以在下方再次編輯。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" 變更成功。你可以在下方加入其他 {name}。" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" 已成功變更。" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "必須要有項目被選到才能對它們進行動作。沒有項目變更。" + +msgid "No action selected." +msgstr "沒有動作被選。" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" 已成功刪除。" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "不存在 ID 為「%(key)s」的 %(name)s。或許它已被刪除?" + +#, python-format +msgid "Add %s" +msgstr "新增 %s" + +#, python-format +msgid "Change %s" +msgstr "變更 %s" + +msgid "Database error" +msgstr "資料庫錯誤" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "共 %(count)s %(name)s 已變更成功。" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "全部 %(total_count)s 個被選" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s 中 0 個被選" + +#, python-format +msgid "Change history: %s" +msgstr "變更歷史: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"刪除 %(class_name)s %(instance)s 將會同時刪除下面受保護的相關物件:" +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Django 網站管理" + +msgid "Django administration" +msgstr "Django 管理" + +msgid "Site administration" +msgstr "網站管理" + +msgid "Log in" +msgstr "登入" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 管理" + +msgid "Page not found" +msgstr "頁面沒有找到" + +msgid "We're sorry, but the requested page could not be found." +msgstr "很抱歉,請求頁面無法找到。" + +msgid "Home" +msgstr "首頁" + +msgid "Server error" +msgstr "伺服器錯誤" + +msgid "Server error (500)" +msgstr "伺服器錯誤 (500)" + +msgid "Server Error (500)" +msgstr "伺服器錯誤 (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"存在一個錯誤。已透過電子郵件回報給網站管理員,並且應該很快就會被修正。謝謝你" +"的關心。" + +msgid "Run the selected action" +msgstr "執行選擇的動作" + +msgid "Go" +msgstr "去" + +msgid "Click here to select the objects across all pages" +msgstr "點選這裡可選取全部頁面的物件" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "選擇全部 %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "清除選擇" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "首先,輸入一個使用者名稱和密碼。然後你可以編輯更多使用者選項。" + +msgid "Enter a username and password." +msgstr "輸入一個使用者名稱和密碼。" + +msgid "Change password" +msgstr "變更密碼" + +msgid "Please correct the error below." +msgstr "請更正下面的錯誤。" + +msgid "Please correct the errors below." +msgstr "請修正以下錯誤" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "為使用者%(username)s輸入一個新的密碼。" + +msgid "Welcome," +msgstr "歡迎," + +msgid "View site" +msgstr "檢視網站" + +msgid "Documentation" +msgstr "文件" + +msgid "Log out" +msgstr "登出" + +#, python-format +msgid "Add %(name)s" +msgstr "新增 %(name)s" + +msgid "History" +msgstr "歷史" + +msgid "View on site" +msgstr "在網站上檢視" + +msgid "Filter" +msgstr "過濾器" + +msgid "Remove from sorting" +msgstr "從排序中移除" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "優先排序:%(priority_number)s" + +msgid "Toggle sorting" +msgstr "切換排序" + +msgid "Delete" +msgstr "刪除" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"刪除 %(object_name)s '%(escaped_object)s' 會把相關的物件也刪除,不過你的帳號" +"並沒有刪除以下型態物件的權限:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"要刪除 %(object_name)s '%(escaped_object)s', 將要求刪除下面受保護的相關物件:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"你確定想要刪除 %(object_name)s \"%(escaped_object)s\"?以下所有的相關項目都會" +"被刪除:" + +msgid "Objects" +msgstr "物件" + +msgid "Yes, I'm sure" +msgstr "是的,我確定" + +msgid "No, take me back" +msgstr "不,請帶我回去" + +msgid "Delete multiple objects" +msgstr "刪除多個物件" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"要刪除所選的 %(objects_name)s, 結果會刪除相關物件, 但你的帳號無權刪除下面物件" +"型態:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "要刪除所選的 %(objects_name)s, 將要求刪除下面受保護的相關物件:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"你是否確定要刪除已選的 %(objects_name)s? 下面全部物件及其相關項目都將被刪除:" + +msgid "Change" +msgstr "變更" + +msgid "Delete?" +msgstr "刪除?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " 以 %(filter_title)s" + +msgid "Summary" +msgstr "總結" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s 應用程式中的Model" + +msgid "Add" +msgstr "新增" + +msgid "You don't have permission to edit anything." +msgstr "你沒有編輯任何東西的權限。" + +msgid "Recent actions" +msgstr "最近的動作" + +msgid "My actions" +msgstr "我的動作" + +msgid "None available" +msgstr "無可用的" + +msgid "Unknown content" +msgstr "未知內容" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"你的資料庫安裝有錯誤。確定資料庫表格已經建立,並確定資料庫可被合適的使用者讀" +"取。" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"您已認證為 %(username)s,但並沒有瀏覽此頁面的權限。您是否希望以其他帳號登入?" + +msgid "Forgotten your password or username?" +msgstr "忘了你的密碼或是使用者名稱?" + +msgid "Date/time" +msgstr "日期/時間" + +msgid "User" +msgstr "使用者" + +msgid "Action" +msgstr "動作" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "這個物件沒有變更的歷史。它可能不是透過這個管理網站新增的。" + +msgid "Show all" +msgstr "顯示全部" + +msgid "Save" +msgstr "儲存" + +msgid "Popup closing..." +msgstr "關閉彈出視窗中⋯⋯" + +#, python-format +msgid "Change selected %(model)s" +msgstr "變更所選的 %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "新增其它 %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "刪除所選的 %(model)s" + +msgid "Search" +msgstr "搜尋" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s 結果" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "總共 %(full_result_count)s" + +msgid "Save as new" +msgstr "儲存為新的" + +msgid "Save and add another" +msgstr "儲存並新增另一個" + +msgid "Save and continue editing" +msgstr "儲存並繼續編輯" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "感謝你今天花了重要的時間停留在本網站。" + +msgid "Log in again" +msgstr "重新登入" + +msgid "Password change" +msgstr "密碼變更" + +msgid "Your password was changed." +msgstr "你的密碼已變更。" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"為了安全上的考量,請輸入你的舊密碼,再輸入新密碼兩次,讓我們核驗你已正確地輸" +"入。" + +msgid "Change my password" +msgstr "變更我的密碼" + +msgid "Password reset" +msgstr "密碼重設" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "你的密碼已設置,現在可以繼續登入。" + +msgid "Password reset confirmation" +msgstr "密碼重設確認" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "請輸入你的新密碼兩次, 這樣我們才能檢查你的輸入是否正確。" + +msgid "New password:" +msgstr "新密碼:" + +msgid "Confirm password:" +msgstr "確認密碼:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "密碼重設連結無效,可能因為他已使用。請重新請求密碼重設。" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"若您提交的電子郵件地址存在對應帳號,我們已寄出重設密碼的相關指示。您應該很快" +"就會收到。" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"如果您未收到電子郵件,請確認您輸入的電子郵件地址與您註冊時輸入的一致,並檢查" +"您的垃圾郵件匣。" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "這封電子郵件來自 %(site_name)s,因為你要求為帳號重新設定密碼。" + +msgid "Please go to the following page and choose a new password:" +msgstr "請到該頁面選擇一個新的密碼:" + +msgid "Your username, in case you've forgotten:" +msgstr "你的使用者名稱,萬一你已經忘記的話:" + +msgid "Thanks for using our site!" +msgstr "感謝使用本網站!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s 團隊" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"忘記你的密碼? 請在下面輸入你的電子郵件位址, 然後我們會寄出設定新密碼的操作指" +"示。" + +msgid "Email address:" +msgstr "電子信箱:" + +msgid "Reset my password" +msgstr "重設我的密碼" + +msgid "All dates" +msgstr "所有日期" + +#, python-format +msgid "Select %s" +msgstr "選擇 %s" + +#, python-format +msgid "Select %s to change" +msgstr "選擇 %s 來變更" + +msgid "Date:" +msgstr "日期" + +msgid "Time:" +msgstr "時間" + +msgid "Lookup" +msgstr "查詢" + +msgid "Currently:" +msgstr "目前:" + +msgid "Change:" +msgstr "變動:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9368f692a2e63dfb4e8736381543d660202c83aa GIT binary patch literal 4230 zcmb`IU2Igx6~`wDX^E4jO;Y-irs>2j*c5iX1`5eis!#_f&^RExEsa{Ky1P5xz4Y$A ztNUSN9va(Vu#F9BFdv3Z2&sXk#IZqXF#dqPG!OkyrM^X~qDtL+y<4fuORK(B{hvEy zdm$D@YDYWww`bTmz`i}8_=IZpSh2*7r`GtfCt*XWsGeCJHbzZR~0A0 z2O-~5@^8RLApc&;A1eL@{0zqD6#uFC02bF^{4ww$@G0kCB!-M>M z4J1DYK(aFo4ud1$&%r1b!6f@NNcKJeH-mo!Y2CvZJOi!(Y25^v2e)DJ3GjWz--0V3 zf28DpD0w-Y_&mm+2EPEV2hSl_JHW3({@cSc{>zaB%EJmg;2Nt{Tn)k$izzv-xD|XH z<1Z=xNYPaD-5{;&1D^q32kXH1)cBu4+9y!*-d{Xfl#d?tH ztwAvZ(*Ebv{AI-n#p@upU^kWgJH(qkjb*;b5!L zIXXhX8qw*!uo9hG4E^iq6uVkr`knIV6fg1#%hOK zZG2^Y%5?D;10v;$^j+sRaxI#RvW+}X*qXO>gKhOPp5wBu?V4_ANkj0J4r|iPlrUIR z*0LO-z%~AY=2l4wJy#{U)shjeb%YrjGxXF?xoh!MXpU=!fnlz>+`=wV)-*qFi=5Ri z!g;95)r)E`h?K}Bh0U5p()KjFlQrvx3;88IE!Ymt499kOMkm|hnS!-wb}EZ!Cu`Bu zrk=^V>=ny0@o+_)ziN40v+1xrYk4-;vO-H!JRM=T3!Bq%qD$+-^?O(5Ns-mf^gWqf zTD4uC`W35#?M%5AMPPRrCa}K}n8@l5$Is0QZs-mo-Nv=51V_X3=d{lG zoH$la@MNc|BHhf;(j3>#&_vSOhjSQK2iI^E%$PhyNmF{fRu)PvB5Fe^DclYL9opUP zusD_rC%U9l3wd7jNL9iA=#dQ3fAh#nqdXE;&LY2AqBAdWWK^n4@uO4Ye_L2(JZ*Kz z6D=7}_Ns7Di)4-}E32W7=Wir}#SQzRM7rBV<+Zo!_Il(R%4Q?z<^q3xl?Z*q-!EhNQ|V z&y-s(9SV`w-SG7^ACv8Ep}S~EQ`W=t+aBgTXRrNyCWlW&G-c(!gGFY>(=sBG5Lzw{O&v!Pygs4n9h$kC z*JoWfA8%;r=;(;LWLs|&`)Fx{Jl#ADWv5|(_9uxw4XbNfwzq6s3`Ju!R?}pet}x*u zZfTsmVxQZPH#FVcOyy}i!rk)yM04cXMLpWCP1uobX39$A9C7|^Qg;_zj`MJ@nq3AC zW<;7TJLkl?nGZ#0OXFrP|89wGuE9rDeq~FOWBB6AkFVc#r2O`kO7|oyO%C`&eS9OY zOuq@?$fDq%JsTAInBRLP#IfLTSsncU z>z49>i(5*Wwk%B#_@kFuaQY~rJTvL{Uhw-SDqSOsZj*~)-j|FB))r|kMdtc79HBII zNS3jG, 2012 +# mail6543210 , 2013 +# tcc , 2011 +# Tzu-ping Chung , 2016 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "可用 %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"可用的 %s 列表。你可以在下方的方框內選擇後,點擊兩個方框中的\"選取\"箭頭以選" +"取。" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "輸入到這個方框以過濾可用的 %s 列表。" + +msgid "Filter" +msgstr "過濾器" + +msgid "Choose all" +msgstr "全選" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "點擊以一次選取所有的 %s" + +msgid "Choose" +msgstr "選取" + +msgid "Remove" +msgstr "移除" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s 被選" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"選取的 %s 列表。你可以在下方的方框內選擇後,點擊兩個方框中的\"移除\"箭頭以移" +"除。" + +msgid "Remove all" +msgstr "全部移除" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "點擊以一次移除所有選取的 %s" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s 中 %(sel)s 個被選" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "你尚未儲存一個可編輯欄位的變更。如果你執行動作, 未儲存的變更將會遺失。" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"你已選了一個動作, 但有一個可編輯欄位的變更尚未儲存。請點選 OK 進行儲存。你需" +"要重新執行該動作。" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"你已選了一個動作, 但沒有任何改變。你可能動到 '去' 按鈕, 而不是 '儲存' 按鈕。" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "備註:您的電腦時間比伺服器快 %s 小時。" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "備註:您的電腦時間比伺服器慢 %s 小時。" + +msgid "Now" +msgstr "現在" + +msgid "Choose a Time" +msgstr "選擇一個時間" + +msgid "Choose a time" +msgstr "選擇一個時間" + +msgid "Midnight" +msgstr "午夜" + +msgid "6 a.m." +msgstr "上午 6 點" + +msgid "Noon" +msgstr "中午" + +msgid "6 p.m." +msgstr "下午 6 點" + +msgid "Cancel" +msgstr "取消" + +msgid "Today" +msgstr "今天" + +msgid "Choose a Date" +msgstr "選擇一個日期" + +msgid "Yesterday" +msgstr "昨天" + +msgid "Tomorrow" +msgstr "明天" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "日" + +msgctxt "one letter Monday" +msgid "M" +msgstr "一" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "二" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "三" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "四" + +msgctxt "one letter Friday" +msgid "F" +msgstr "五" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "六" + +msgid "Show" +msgstr "顯示" + +msgid "Hide" +msgstr "隱藏" diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/admin/migrations/0001_initial.py new file mode 100644 index 000000000..d02e12849 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/migrations/0001_initial.py @@ -0,0 +1,76 @@ +import django.contrib.admin.models +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("contenttypes", "__first__"), + ] + + operations = [ + migrations.CreateModel( + name="LogEntry", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "action_time", + models.DateTimeField(auto_now=True, verbose_name="action time"), + ), + ( + "object_id", + models.TextField(null=True, verbose_name="object id", blank=True), + ), + ( + "object_repr", + models.CharField(max_length=200, verbose_name="object repr"), + ), + ( + "action_flag", + models.PositiveSmallIntegerField(verbose_name="action flag"), + ), + ( + "change_message", + models.TextField(verbose_name="change message", blank=True), + ), + ( + "content_type", + models.ForeignKey( + on_delete=models.SET_NULL, + blank=True, + null=True, + to="contenttypes.ContentType", + verbose_name="content type", + ), + ), + ( + "user", + models.ForeignKey( + to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + verbose_name="user", + ), + ), + ], + options={ + "ordering": ["-action_time"], + "db_table": "django_admin_log", + "verbose_name": "log entry", + "verbose_name_plural": "log entries", + }, + bases=(models.Model,), + managers=[ + ("objects", django.contrib.admin.models.LogEntryManager()), + ], + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/0002_logentry_remove_auto_add.py b/venv/Lib/site-packages/django/contrib/admin/migrations/0002_logentry_remove_auto_add.py new file mode 100644 index 000000000..4e83978e2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/migrations/0002_logentry_remove_auto_add.py @@ -0,0 +1,22 @@ +from django.db import migrations, models +from django.utils import timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin", "0001_initial"), + ] + + # No database changes; removes auto_add and adds default/editable. + operations = [ + migrations.AlterField( + model_name="logentry", + name="action_time", + field=models.DateTimeField( + verbose_name="action time", + default=timezone.now, + editable=False, + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py b/venv/Lib/site-packages/django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py new file mode 100644 index 000000000..59b22314d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py @@ -0,0 +1,20 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin", "0002_logentry_remove_auto_add"), + ] + + # No database changes; adds choices to action_flag. + operations = [ + migrations.AlterField( + model_name="logentry", + name="action_flag", + field=models.PositiveSmallIntegerField( + choices=[(1, "Addition"), (2, "Change"), (3, "Deletion")], + verbose_name="action flag", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/admin/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30e5531714d7e362a95015aae338db8877d1efc5 GIT binary patch literal 1668 zcmYjROK%%D5ZH3cz2wk8&_~iCcNJ?FoShlYk{`dBVY;$X*Wmf<+usMjdYbl! zG?pI=j7KoULl9J>dZZy8zD8ukCNg#DGb1auksUk8(Y41KwW$4rMr~$~Yu}rwM)j`d zJ8$5B?abE;SFk(}lR)@JQIErblRQilQ8;l*StN!sZux0}@d$?a69iMcBZHZ*ELh)p zty4WPP>q>mmm1V$-ncIJrw+WexivDV3%&+e9<9#}up3}E!IooXZh~hOJS%jKw&)EN zaTDxSx=uIdI?Ucu@tY8RTg`5Py#}KN9*5qcAJFZ&4RLpsA27l92E9u^lxqhry%*^8 zK5f$n^rIgwn7cXB>Bnq+yfMBt_Fiqi)*wo!pUmw*N4M#xz}07kce>!kH&An!COJ#; ze3~(VJd8&n7dghrJxPP3B3TF&8$s|wl zkTa4qiW(UYW5TESl1)*A3}q5<9>#1|8Et96_OALZNndam5`esPFlNIXhjdn{?U4Fr zVI`9&QXz#sh)8mY8dW4`8GrK&{5z{WZRt_jCogftk|4h**IvLFMI?9+LmIwb2CNP* zND?p{Ga*R8W|iHpY~N5}yaAgP3)-;cZML;c;%=v8v?pg4acvpr+l2=_Kq0c6sdc#Q zkHW~)@@&=w2=z@atCFutAz7I;Vx_CT>g;V2Fz| zf2(k@Dh7;;I>yjulZb)d#Q3`jiR3aEa}$n%HpB~(WfB8Wkg)ii z-J|FD^qa$@lcM=P0uF*29aUGSvWL06G>~@y<#sI5p_M}@xgL~LX?i{OGOyIm1>vQ7 z=UFPkJiKDvm_*T2D0zTiPSuZ7&cY!18cNme9`*3q`N;{Ybq>0ngTo_at6dAHWWA`# zRP%6vY{frXTeQh(Nl8&pGgjR?KWY3PfK}q}yz{Vs4(S#B=M$)}{$V-6e;npd zCWHR5Y`mRkJe3{LzhcQ%|0Epr0XEyo$nX*f7yS~&UIk)LVc5IA=l1sZ_dmyB0!Jm$ zZZ_pM?C-!383iF9_h3G z1M4^Ii^W=w(=v>A*3a%cwY%@4?Gp8Fg?d+^-Ysurz74=o<2qtgR)kl1=s*>Z%DP(b dn$l9c5C0eLmu2C7rOUI*rg62V-qJVC{{bPg=7j(N literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e10124ee78c5baa54a01f0a47db19b3b3efcf35 GIT binary patch literal 749 zcmYjOO>fjN5ViBQ*>o$F3kObIgVgTQBSNT%YRdsC#K*;ou$;_v}Gb z!LO>t%G2&f>cEN1K^O_6Kv)2DL0O2=GKK&`OqL@jmoCQ;Lvj_u=qhyg8Kh2l+>c-H z6!U<^0vg$}$!s=z%w;RB6g5k0wZPWuOSUH}KN=s#*@A~2%=3^<)~HKmkhh}2egt?S zy4vOP;3XAXkOheDVOdq!DOP{F~Zms=E^nvRS<=>ANPl^u)wJF|q z#)#rnRbAuuHN}~9nr2NhYbIH!SH13^ z@aA6%c=FVPe?ZXsW_HW&z&z%?@6EjTzHjvQc0_Rf{`fO}%n12qoz3N=bAa1CL!*eI zC8;Q<72}MOQ=*viz7gdCoqAtA?kWF*#Dg2mB{A!xs>mDJ7P>ZlP-z9F$t<+FhUgsN zHv4FRaHm2K9H&^YW`$0 zne2;F=TNuJwP>Kya}cs?wUA2j@DAbkWM=ylm!-^OFJ?Cs+u-4$QiY9U09heCIJ%N` z4(NIgKZX)4{$+Llsk_hmVRog93=H3zLz8L)qLvlJ9*^Ak&g*>}>j#$wl z@IKNrSSj&?G&?whGk+FGFOm-i8k4;5jFHK)&bkUYGs$VuzV6cGq-adLd*0|NWNk8s zdY-&3(gf?k?o4K%WDX`#QzS=^GmT^y>DWmyUTZ%_F`lo*Kmo)C>taRO-t4-uzs+v* z5KTy!=imAPqm24Au=bz-H@tOOXR*&m%es3ib%Zz)9Jn5EdAg6U_2J7UwXdwg##Y%O G54`_}3fJlY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48165fb7bbcb229e477a3c2738da285eab40e408 GIT binary patch literal 205 zcmYk0u?oU47=%;lAc7C#P_v7Ops0h0C~iN7v<>C2CMo%of{)}Y2~N(wfRpK@2lpL! z)7jy0z@pygXWr$j!@rVP=FyZ!l" + ) + + def get_inline_instances(self, request, obj=None): + inline_instances = [] + for inline_class in self.get_inlines(request, obj): + inline = inline_class(self.model, self.admin_site) + if request: + if not ( + inline.has_view_or_change_permission(request, obj) + or inline.has_add_permission(request, obj) + or inline.has_delete_permission(request, obj) + ): + continue + if not inline.has_add_permission(request, obj): + inline.max_num = 0 + inline_instances.append(inline) + + return inline_instances + + def get_urls(self): + from django.urls import path + + def wrap(view): + def wrapper(*args, **kwargs): + return self.admin_site.admin_view(view)(*args, **kwargs) + + wrapper.model_admin = self + return update_wrapper(wrapper, view) + + info = self.model._meta.app_label, self.model._meta.model_name + + return [ + path("", wrap(self.changelist_view), name="%s_%s_changelist" % info), + path("add/", wrap(self.add_view), name="%s_%s_add" % info), + path( + "/history/", + wrap(self.history_view), + name="%s_%s_history" % info, + ), + path( + "/delete/", + wrap(self.delete_view), + name="%s_%s_delete" % info, + ), + path( + "/change/", + wrap(self.change_view), + name="%s_%s_change" % info, + ), + # For backwards compatibility (was the change url before 1.9) + path( + "/", + wrap( + RedirectView.as_view( + pattern_name="%s:%s_%s_change" + % ((self.admin_site.name,) + info) + ) + ), + ), + ] + + @property + def urls(self): + return self.get_urls() + + @property + def media(self): + extra = "" if settings.DEBUG else ".min" + js = [ + "vendor/jquery/jquery%s.js" % extra, + "jquery.init.js", + "core.js", + "admin/RelatedObjectLookups.js", + "actions.js", + "urlify.js", + "prepopulate.js", + "vendor/xregexp/xregexp%s.js" % extra, + ] + return forms.Media(js=["admin/js/%s" % url for url in js]) + + def get_model_perms(self, request): + """ + Return a dict of all perms for this model. This dict has the keys + ``add``, ``change``, ``delete``, and ``view`` mapping to the True/False + for each of those actions. + """ + return { + "add": self.has_add_permission(request), + "change": self.has_change_permission(request), + "delete": self.has_delete_permission(request), + "view": self.has_view_permission(request), + } + + def _get_form_for_get_fields(self, request, obj): + return self.get_form(request, obj, fields=None) + + def get_form(self, request, obj=None, change=False, **kwargs): + """ + Return a Form class for use in the admin add view. This is used by + add_view and change_view. + """ + if "fields" in kwargs: + fields = kwargs.pop("fields") + else: + fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + excluded = self.get_exclude(request, obj) + exclude = [] if excluded is None else list(excluded) + readonly_fields = self.get_readonly_fields(request, obj) + exclude.extend(readonly_fields) + # Exclude all fields if it's a change form and the user doesn't have + # the change permission. + if ( + change + and hasattr(request, "user") + and not self.has_change_permission(request, obj) + ): + exclude.extend(fields) + if excluded is None and hasattr(self.form, "_meta") and self.form._meta.exclude: + # Take the custom ModelForm's Meta.exclude into account only if the + # ModelAdmin doesn't define its own. + exclude.extend(self.form._meta.exclude) + # if exclude is an empty list we pass None to be consistent with the + # default on modelform_factory + exclude = exclude or None + + # Remove declared form fields which are in readonly_fields. + new_attrs = dict.fromkeys( + f for f in readonly_fields if f in self.form.declared_fields + ) + form = type(self.form.__name__, (self.form,), new_attrs) + + defaults = { + "form": form, + "fields": fields, + "exclude": exclude, + "formfield_callback": partial(self.formfield_for_dbfield, request=request), + **kwargs, + } + + if defaults["fields"] is None and not modelform_defines_fields( + defaults["form"] + ): + defaults["fields"] = forms.ALL_FIELDS + + try: + return modelform_factory(self.model, **defaults) + except FieldError as e: + raise FieldError( + "%s. Check fields/fieldsets/exclude attributes of class %s." + % (e, self.__class__.__name__) + ) + + def get_changelist(self, request, **kwargs): + """ + Return the ChangeList class for use on the changelist page. + """ + from django.contrib.admin.views.main import ChangeList + + return ChangeList + + def get_changelist_instance(self, request): + """ + Return a `ChangeList` instance based on `request`. May raise + `IncorrectLookupParameters`. + """ + list_display = self.get_list_display(request) + list_display_links = self.get_list_display_links(request, list_display) + # Add the action checkboxes if any actions are available. + if self.get_actions(request): + list_display = ["action_checkbox", *list_display] + sortable_by = self.get_sortable_by(request) + ChangeList = self.get_changelist(request) + return ChangeList( + request, + self.model, + list_display, + list_display_links, + self.get_list_filter(request), + self.date_hierarchy, + self.get_search_fields(request), + self.get_list_select_related(request), + self.list_per_page, + self.list_max_show_all, + self.list_editable, + self, + sortable_by, + self.search_help_text, + ) + + def get_object(self, request, object_id, from_field=None): + """ + Return an instance matching the field and value provided, the primary + key is used if no field is provided. Return ``None`` if no match is + found or the object_id fails validation. + """ + queryset = self.get_queryset(request) + model = queryset.model + field = ( + model._meta.pk if from_field is None else model._meta.get_field(from_field) + ) + try: + object_id = field.to_python(object_id) + return queryset.get(**{field.name: object_id}) + except (model.DoesNotExist, ValidationError, ValueError): + return None + + def get_changelist_form(self, request, **kwargs): + """ + Return a Form class for use in the Formset on the changelist page. + """ + defaults = { + "formfield_callback": partial(self.formfield_for_dbfield, request=request), + **kwargs, + } + if defaults.get("fields") is None and not modelform_defines_fields( + defaults.get("form") + ): + defaults["fields"] = forms.ALL_FIELDS + + return modelform_factory(self.model, **defaults) + + def get_changelist_formset(self, request, **kwargs): + """ + Return a FormSet class for use on the changelist page if list_editable + is used. + """ + defaults = { + "formfield_callback": partial(self.formfield_for_dbfield, request=request), + **kwargs, + } + return modelformset_factory( + self.model, + self.get_changelist_form(request), + extra=0, + fields=self.list_editable, + **defaults, + ) + + def get_formsets_with_inlines(self, request, obj=None): + """ + Yield formsets and the corresponding inlines. + """ + for inline in self.get_inline_instances(request, obj): + yield inline.get_formset(request, obj), inline + + def get_paginator( + self, request, queryset, per_page, orphans=0, allow_empty_first_page=True + ): + return self.paginator(queryset, per_page, orphans, allow_empty_first_page) + + def log_addition(self, request, obj, message): + """ + Log that an object has been successfully added. + + The default implementation creates an admin LogEntry object. + """ + from django.contrib.admin.models import ADDITION, LogEntry + + return LogEntry.objects.log_action( + user_id=request.user.pk, + content_type_id=get_content_type_for_model(obj).pk, + object_id=obj.pk, + object_repr=str(obj), + action_flag=ADDITION, + change_message=message, + ) + + def log_change(self, request, obj, message): + """ + Log that an object has been successfully changed. + + The default implementation creates an admin LogEntry object. + """ + from django.contrib.admin.models import CHANGE, LogEntry + + return LogEntry.objects.log_action( + user_id=request.user.pk, + content_type_id=get_content_type_for_model(obj).pk, + object_id=obj.pk, + object_repr=str(obj), + action_flag=CHANGE, + change_message=message, + ) + + def log_deletion(self, request, obj, object_repr): + """ + Log that an object will be deleted. Note that this method must be + called before the deletion. + + The default implementation creates an admin LogEntry object. + """ + from django.contrib.admin.models import DELETION, LogEntry + + return LogEntry.objects.log_action( + user_id=request.user.pk, + content_type_id=get_content_type_for_model(obj).pk, + object_id=obj.pk, + object_repr=object_repr, + action_flag=DELETION, + ) + + @display(description=mark_safe('')) + def action_checkbox(self, obj): + """ + A list_display column containing a checkbox widget. + """ + return helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk)) + + @staticmethod + def _get_action_description(func, name): + return getattr(func, "short_description", capfirst(name.replace("_", " "))) + + def _get_base_actions(self): + """Return the list of actions, prior to any request-based filtering.""" + actions = [] + base_actions = (self.get_action(action) for action in self.actions or []) + # get_action might have returned None, so filter any of those out. + base_actions = [action for action in base_actions if action] + base_action_names = {name for _, name, _ in base_actions} + + # Gather actions from the admin site first + for (name, func) in self.admin_site.actions: + if name in base_action_names: + continue + description = self._get_action_description(func, name) + actions.append((func, name, description)) + # Add actions from this ModelAdmin. + actions.extend(base_actions) + return actions + + def _filter_actions_by_permissions(self, request, actions): + """Filter out any actions that the user doesn't have access to.""" + filtered_actions = [] + for action in actions: + callable = action[0] + if not hasattr(callable, "allowed_permissions"): + filtered_actions.append(action) + continue + permission_checks = ( + getattr(self, "has_%s_permission" % permission) + for permission in callable.allowed_permissions + ) + if any(has_permission(request) for has_permission in permission_checks): + filtered_actions.append(action) + return filtered_actions + + def get_actions(self, request): + """ + Return a dictionary mapping the names of all actions for this + ModelAdmin to a tuple of (callable, name, description) for each action. + """ + # If self.actions is set to None that means actions are disabled on + # this page. + if self.actions is None or IS_POPUP_VAR in request.GET: + return {} + actions = self._filter_actions_by_permissions(request, self._get_base_actions()) + return {name: (func, name, desc) for func, name, desc in actions} + + def get_action_choices(self, request, default_choices=models.BLANK_CHOICE_DASH): + """ + Return a list of choices for use in a form object. Each choice is a + tuple (name, description). + """ + choices = [] + default_choices + for func, name, description in self.get_actions(request).values(): + choice = (name, description % model_format_dict(self.opts)) + choices.append(choice) + return choices + + def get_action(self, action): + """ + Return a given action from a parameter, which can either be a callable, + or the name of a method on the ModelAdmin. Return is a tuple of + (callable, name, description). + """ + # If the action is a callable, just use it. + if callable(action): + func = action + action = action.__name__ + + # Next, look for a method. Grab it off self.__class__ to get an unbound + # method instead of a bound one; this ensures that the calling + # conventions are the same for functions and methods. + elif hasattr(self.__class__, action): + func = getattr(self.__class__, action) + + # Finally, look for a named method on the admin site + else: + try: + func = self.admin_site.get_action(action) + except KeyError: + return None + + description = self._get_action_description(func, action) + return func, action, description + + def get_list_display(self, request): + """ + Return a sequence containing the fields to be displayed on the + changelist. + """ + return self.list_display + + def get_list_display_links(self, request, list_display): + """ + Return a sequence containing the fields to be displayed as links + on the changelist. The list_display parameter is the list of fields + returned by get_list_display(). + """ + if ( + self.list_display_links + or self.list_display_links is None + or not list_display + ): + return self.list_display_links + else: + # Use only the first item in list_display as link + return list(list_display)[:1] + + def get_list_filter(self, request): + """ + Return a sequence containing the fields to be displayed as filters in + the right sidebar of the changelist page. + """ + return self.list_filter + + def get_list_select_related(self, request): + """ + Return a list of fields to add to the select_related() part of the + changelist items query. + """ + return self.list_select_related + + def get_search_fields(self, request): + """ + Return a sequence containing the fields to be searched whenever + somebody submits a search query. + """ + return self.search_fields + + def get_search_results(self, request, queryset, search_term): + """ + Return a tuple containing a queryset to implement the search + and a boolean indicating if the results may contain duplicates. + """ + # Apply keyword searches. + def construct_search(field_name): + if field_name.startswith("^"): + return "%s__istartswith" % field_name[1:] + elif field_name.startswith("="): + return "%s__iexact" % field_name[1:] + elif field_name.startswith("@"): + return "%s__search" % field_name[1:] + # Use field_name if it includes a lookup. + opts = queryset.model._meta + lookup_fields = field_name.split(LOOKUP_SEP) + # Go through the fields, following all relations. + prev_field = None + for path_part in lookup_fields: + if path_part == "pk": + path_part = opts.pk.name + try: + field = opts.get_field(path_part) + except FieldDoesNotExist: + # Use valid query lookups. + if prev_field and prev_field.get_lookup(path_part): + return field_name + else: + prev_field = field + if hasattr(field, "get_path_info"): + # Update opts to follow the relation. + opts = field.get_path_info()[-1].to_opts + # Otherwise, use the field with icontains. + return "%s__icontains" % field_name + + may_have_duplicates = False + search_fields = self.get_search_fields(request) + if search_fields and search_term: + orm_lookups = [ + construct_search(str(search_field)) for search_field in search_fields + ] + for bit in smart_split(search_term): + if bit.startswith(('"', "'")) and bit[0] == bit[-1]: + bit = unescape_string_literal(bit) + or_queries = models.Q( + *((orm_lookup, bit) for orm_lookup in orm_lookups), + _connector=models.Q.OR, + ) + queryset = queryset.filter(or_queries) + may_have_duplicates |= any( + lookup_spawns_duplicates(self.opts, search_spec) + for search_spec in orm_lookups + ) + return queryset, may_have_duplicates + + def get_preserved_filters(self, request): + """ + Return the preserved filters querystring. + """ + match = request.resolver_match + if self.preserve_filters and match: + opts = self.model._meta + current_url = "%s:%s" % (match.app_name, match.url_name) + changelist_url = "admin:%s_%s_changelist" % ( + opts.app_label, + opts.model_name, + ) + if current_url == changelist_url: + preserved_filters = request.GET.urlencode() + else: + preserved_filters = request.GET.get("_changelist_filters") + + if preserved_filters: + return urlencode({"_changelist_filters": preserved_filters}) + return "" + + def construct_change_message(self, request, form, formsets, add=False): + """ + Construct a JSON structure describing changes from a changed object. + """ + return construct_change_message(form, formsets, add) + + def message_user( + self, request, message, level=messages.INFO, extra_tags="", fail_silently=False + ): + """ + Send a message to the user. The default implementation + posts a message using the django.contrib.messages backend. + + Exposes almost the same API as messages.add_message(), but accepts the + positional arguments in a different order to maintain backwards + compatibility. For convenience, it accepts the `level` argument as + a string rather than the usual level number. + """ + if not isinstance(level, int): + # attempt to get the level if passed a string + try: + level = getattr(messages.constants, level.upper()) + except AttributeError: + levels = messages.constants.DEFAULT_TAGS.values() + levels_repr = ", ".join("`%s`" % level for level in levels) + raise ValueError( + "Bad message level string: `%s`. Possible values are: %s" + % (level, levels_repr) + ) + + messages.add_message( + request, level, message, extra_tags=extra_tags, fail_silently=fail_silently + ) + + def save_form(self, request, form, change): + """ + Given a ModelForm return an unsaved instance. ``change`` is True if + the object is being changed, and False if it's being added. + """ + return form.save(commit=False) + + def save_model(self, request, obj, form, change): + """ + Given a model instance save it to the database. + """ + obj.save() + + def delete_model(self, request, obj): + """ + Given a model instance delete it from the database. + """ + obj.delete() + + def delete_queryset(self, request, queryset): + """Given a queryset, delete it from the database.""" + queryset.delete() + + def save_formset(self, request, form, formset, change): + """ + Given an inline formset save it to the database. + """ + formset.save() + + def save_related(self, request, form, formsets, change): + """ + Given the ``HttpRequest``, the parent ``ModelForm`` instance, the + list of inline formsets and a boolean value based on whether the + parent is being added or changed, save the related objects to the + database. Note that at this point save_form() and save_model() have + already been called. + """ + form.save_m2m() + for formset in formsets: + self.save_formset(request, form, formset, change=change) + + def render_change_form( + self, request, context, add=False, change=False, form_url="", obj=None + ): + opts = self.model._meta + app_label = opts.app_label + preserved_filters = self.get_preserved_filters(request) + form_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, form_url + ) + view_on_site_url = self.get_view_on_site_url(obj) + has_editable_inline_admin_formsets = False + for inline in context["inline_admin_formsets"]: + if ( + inline.has_add_permission + or inline.has_change_permission + or inline.has_delete_permission + ): + has_editable_inline_admin_formsets = True + break + context.update( + { + "add": add, + "change": change, + "has_view_permission": self.has_view_permission(request, obj), + "has_add_permission": self.has_add_permission(request), + "has_change_permission": self.has_change_permission(request, obj), + "has_delete_permission": self.has_delete_permission(request, obj), + "has_editable_inline_admin_formsets": ( + has_editable_inline_admin_formsets + ), + "has_file_field": context["adminform"].form.is_multipart() + or any( + admin_formset.formset.is_multipart() + for admin_formset in context["inline_admin_formsets"] + ), + "has_absolute_url": view_on_site_url is not None, + "absolute_url": view_on_site_url, + "form_url": form_url, + "opts": opts, + "content_type_id": get_content_type_for_model(self.model).pk, + "save_as": self.save_as, + "save_on_top": self.save_on_top, + "to_field_var": TO_FIELD_VAR, + "is_popup_var": IS_POPUP_VAR, + "app_label": app_label, + } + ) + if add and self.add_form_template is not None: + form_template = self.add_form_template + else: + form_template = self.change_form_template + + request.current_app = self.admin_site.name + + return TemplateResponse( + request, + form_template + or [ + "admin/%s/%s/change_form.html" % (app_label, opts.model_name), + "admin/%s/change_form.html" % app_label, + "admin/change_form.html", + ], + context, + ) + + def response_add(self, request, obj, post_url_continue=None): + """ + Determine the HttpResponse for the add_view stage. + """ + opts = obj._meta + preserved_filters = self.get_preserved_filters(request) + obj_url = reverse( + "admin:%s_%s_change" % (opts.app_label, opts.model_name), + args=(quote(obj.pk),), + current_app=self.admin_site.name, + ) + # Add a link to the object's change form if the user can edit the obj. + if self.has_change_permission(request, obj): + obj_repr = format_html('{}', urlquote(obj_url), obj) + else: + obj_repr = str(obj) + msg_dict = { + "name": opts.verbose_name, + "obj": obj_repr, + } + # Here, we distinguish between different save types by checking for + # the presence of keys in request.POST. + + if IS_POPUP_VAR in request.POST: + to_field = request.POST.get(TO_FIELD_VAR) + if to_field: + attr = str(to_field) + else: + attr = obj._meta.pk.attname + value = obj.serializable_value(attr) + popup_response_data = json.dumps( + { + "value": str(value), + "obj": str(obj), + } + ) + return TemplateResponse( + request, + self.popup_response_template + or [ + "admin/%s/%s/popup_response.html" + % (opts.app_label, opts.model_name), + "admin/%s/popup_response.html" % opts.app_label, + "admin/popup_response.html", + ], + { + "popup_response_data": popup_response_data, + }, + ) + + elif "_continue" in request.POST or ( + # Redirecting after "Save as new". + "_saveasnew" in request.POST + and self.save_as_continue + and self.has_change_permission(request, obj) + ): + msg = _("The {name} “{obj}” was added successfully.") + if self.has_change_permission(request, obj): + msg += " " + _("You may edit it again below.") + self.message_user(request, format_html(msg, **msg_dict), messages.SUCCESS) + if post_url_continue is None: + post_url_continue = obj_url + post_url_continue = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, + post_url_continue, + ) + return HttpResponseRedirect(post_url_continue) + + elif "_addanother" in request.POST: + msg = format_html( + _( + "The {name} “{obj}” was added successfully. You may add another " + "{name} below." + ), + **msg_dict, + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = request.path + redirect_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, redirect_url + ) + return HttpResponseRedirect(redirect_url) + + else: + msg = format_html( + _("The {name} “{obj}” was added successfully."), **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + return self.response_post_save_add(request, obj) + + def response_change(self, request, obj): + """ + Determine the HttpResponse for the change_view stage. + """ + + if IS_POPUP_VAR in request.POST: + opts = obj._meta + to_field = request.POST.get(TO_FIELD_VAR) + attr = str(to_field) if to_field else opts.pk.attname + value = request.resolver_match.kwargs["object_id"] + new_value = obj.serializable_value(attr) + popup_response_data = json.dumps( + { + "action": "change", + "value": str(value), + "obj": str(obj), + "new_value": str(new_value), + } + ) + return TemplateResponse( + request, + self.popup_response_template + or [ + "admin/%s/%s/popup_response.html" + % (opts.app_label, opts.model_name), + "admin/%s/popup_response.html" % opts.app_label, + "admin/popup_response.html", + ], + { + "popup_response_data": popup_response_data, + }, + ) + + opts = self.model._meta + preserved_filters = self.get_preserved_filters(request) + + msg_dict = { + "name": opts.verbose_name, + "obj": format_html('{}', urlquote(request.path), obj), + } + if "_continue" in request.POST: + msg = format_html( + _( + "The {name} “{obj}” was changed successfully. You may edit it " + "again below." + ), + **msg_dict, + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = request.path + redirect_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, redirect_url + ) + return HttpResponseRedirect(redirect_url) + + elif "_saveasnew" in request.POST: + msg = format_html( + _( + "The {name} “{obj}” was added successfully. You may edit it again " + "below." + ), + **msg_dict, + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = reverse( + "admin:%s_%s_change" % (opts.app_label, opts.model_name), + args=(obj.pk,), + current_app=self.admin_site.name, + ) + redirect_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, redirect_url + ) + return HttpResponseRedirect(redirect_url) + + elif "_addanother" in request.POST: + msg = format_html( + _( + "The {name} “{obj}” was changed successfully. You may add another " + "{name} below." + ), + **msg_dict, + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = reverse( + "admin:%s_%s_add" % (opts.app_label, opts.model_name), + current_app=self.admin_site.name, + ) + redirect_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, redirect_url + ) + return HttpResponseRedirect(redirect_url) + + else: + msg = format_html( + _("The {name} “{obj}” was changed successfully."), **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + return self.response_post_save_change(request, obj) + + def _response_post_save(self, request, obj): + opts = self.model._meta + if self.has_view_or_change_permission(request): + post_url = reverse( + "admin:%s_%s_changelist" % (opts.app_label, opts.model_name), + current_app=self.admin_site.name, + ) + preserved_filters = self.get_preserved_filters(request) + post_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, post_url + ) + else: + post_url = reverse("admin:index", current_app=self.admin_site.name) + return HttpResponseRedirect(post_url) + + def response_post_save_add(self, request, obj): + """ + Figure out where to redirect after the 'Save' button has been pressed + when adding a new object. + """ + return self._response_post_save(request, obj) + + def response_post_save_change(self, request, obj): + """ + Figure out where to redirect after the 'Save' button has been pressed + when editing an existing object. + """ + return self._response_post_save(request, obj) + + def response_action(self, request, queryset): + """ + Handle an admin action. This is called if a request is POSTed to the + changelist; it returns an HttpResponse if the action was handled, and + None otherwise. + """ + + # There can be multiple action forms on the page (at the top + # and bottom of the change list, for example). Get the action + # whose button was pushed. + try: + action_index = int(request.POST.get("index", 0)) + except ValueError: + action_index = 0 + + # Construct the action form. + data = request.POST.copy() + data.pop(helpers.ACTION_CHECKBOX_NAME, None) + data.pop("index", None) + + # Use the action whose button was pushed + try: + data.update({"action": data.getlist("action")[action_index]}) + except IndexError: + # If we didn't get an action from the chosen form that's invalid + # POST data, so by deleting action it'll fail the validation check + # below. So no need to do anything here + pass + + action_form = self.action_form(data, auto_id=None) + action_form.fields["action"].choices = self.get_action_choices(request) + + # If the form's valid we can handle the action. + if action_form.is_valid(): + action = action_form.cleaned_data["action"] + select_across = action_form.cleaned_data["select_across"] + func = self.get_actions(request)[action][0] + + # Get the list of selected PKs. If nothing's selected, we can't + # perform an action on it, so bail. Except we want to perform + # the action explicitly on all objects. + selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) + if not selected and not select_across: + # Reminder that something needs to be selected or nothing will happen + msg = _( + "Items must be selected in order to perform " + "actions on them. No items have been changed." + ) + self.message_user(request, msg, messages.WARNING) + return None + + if not select_across: + # Perform the action only on the selected objects + queryset = queryset.filter(pk__in=selected) + + response = func(self, request, queryset) + + # Actions may return an HttpResponse-like object, which will be + # used as the response from the POST. If not, we'll be a good + # little HTTP citizen and redirect back to the changelist page. + if isinstance(response, HttpResponseBase): + return response + else: + return HttpResponseRedirect(request.get_full_path()) + else: + msg = _("No action selected.") + self.message_user(request, msg, messages.WARNING) + return None + + def response_delete(self, request, obj_display, obj_id): + """ + Determine the HttpResponse for the delete_view stage. + """ + opts = self.model._meta + + if IS_POPUP_VAR in request.POST: + popup_response_data = json.dumps( + { + "action": "delete", + "value": str(obj_id), + } + ) + return TemplateResponse( + request, + self.popup_response_template + or [ + "admin/%s/%s/popup_response.html" + % (opts.app_label, opts.model_name), + "admin/%s/popup_response.html" % opts.app_label, + "admin/popup_response.html", + ], + { + "popup_response_data": popup_response_data, + }, + ) + + self.message_user( + request, + _("The %(name)s “%(obj)s” was deleted successfully.") + % { + "name": opts.verbose_name, + "obj": obj_display, + }, + messages.SUCCESS, + ) + + if self.has_change_permission(request, None): + post_url = reverse( + "admin:%s_%s_changelist" % (opts.app_label, opts.model_name), + current_app=self.admin_site.name, + ) + preserved_filters = self.get_preserved_filters(request) + post_url = add_preserved_filters( + {"preserved_filters": preserved_filters, "opts": opts}, post_url + ) + else: + post_url = reverse("admin:index", current_app=self.admin_site.name) + return HttpResponseRedirect(post_url) + + def render_delete_form(self, request, context): + opts = self.model._meta + app_label = opts.app_label + + request.current_app = self.admin_site.name + context.update( + to_field_var=TO_FIELD_VAR, + is_popup_var=IS_POPUP_VAR, + media=self.media, + ) + + return TemplateResponse( + request, + self.delete_confirmation_template + or [ + "admin/{}/{}/delete_confirmation.html".format( + app_label, opts.model_name + ), + "admin/{}/delete_confirmation.html".format(app_label), + "admin/delete_confirmation.html", + ], + context, + ) + + def get_inline_formsets(self, request, formsets, inline_instances, obj=None): + # Edit permissions on parent model are required for editable inlines. + can_edit_parent = ( + self.has_change_permission(request, obj) + if obj + else self.has_add_permission(request) + ) + inline_admin_formsets = [] + for inline, formset in zip(inline_instances, formsets): + fieldsets = list(inline.get_fieldsets(request, obj)) + readonly = list(inline.get_readonly_fields(request, obj)) + if can_edit_parent: + has_add_permission = inline.has_add_permission(request, obj) + has_change_permission = inline.has_change_permission(request, obj) + has_delete_permission = inline.has_delete_permission(request, obj) + else: + # Disable all edit-permissions, and overide formset settings. + has_add_permission = ( + has_change_permission + ) = has_delete_permission = False + formset.extra = formset.max_num = 0 + has_view_permission = inline.has_view_permission(request, obj) + prepopulated = dict(inline.get_prepopulated_fields(request, obj)) + inline_admin_formset = helpers.InlineAdminFormSet( + inline, + formset, + fieldsets, + prepopulated, + readonly, + model_admin=self, + has_add_permission=has_add_permission, + has_change_permission=has_change_permission, + has_delete_permission=has_delete_permission, + has_view_permission=has_view_permission, + ) + inline_admin_formsets.append(inline_admin_formset) + return inline_admin_formsets + + def get_changeform_initial_data(self, request): + """ + Get the initial form data from the request's GET params. + """ + initial = dict(request.GET.items()) + for k in initial: + try: + f = self.model._meta.get_field(k) + except FieldDoesNotExist: + continue + # We have to special-case M2Ms as a list of comma-separated PKs. + if isinstance(f, models.ManyToManyField): + initial[k] = initial[k].split(",") + return initial + + def _get_obj_does_not_exist_redirect(self, request, opts, object_id): + """ + Create a message informing the user that the object doesn't exist + and return a redirect to the admin index page. + """ + msg = _("%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?") % { + "name": opts.verbose_name, + "key": unquote(object_id), + } + self.message_user(request, msg, messages.WARNING) + url = reverse("admin:index", current_app=self.admin_site.name) + return HttpResponseRedirect(url) + + @csrf_protect_m + def changeform_view(self, request, object_id=None, form_url="", extra_context=None): + with transaction.atomic(using=router.db_for_write(self.model)): + return self._changeform_view(request, object_id, form_url, extra_context) + + def _changeform_view(self, request, object_id, form_url, extra_context): + to_field = request.POST.get(TO_FIELD_VAR, request.GET.get(TO_FIELD_VAR)) + if to_field and not self.to_field_allowed(request, to_field): + raise DisallowedModelAdminToField( + "The field %s cannot be referenced." % to_field + ) + + model = self.model + opts = model._meta + + if request.method == "POST" and "_saveasnew" in request.POST: + object_id = None + + add = object_id is None + + if add: + if not self.has_add_permission(request): + raise PermissionDenied + obj = None + + else: + obj = self.get_object(request, unquote(object_id), to_field) + + if request.method == "POST": + if not self.has_change_permission(request, obj): + raise PermissionDenied + else: + if not self.has_view_or_change_permission(request, obj): + raise PermissionDenied + + if obj is None: + return self._get_obj_does_not_exist_redirect(request, opts, object_id) + + fieldsets = self.get_fieldsets(request, obj) + ModelForm = self.get_form( + request, obj, change=not add, fields=flatten_fieldsets(fieldsets) + ) + if request.method == "POST": + form = ModelForm(request.POST, request.FILES, instance=obj) + formsets, inline_instances = self._create_formsets( + request, + form.instance if add else obj, + change=not add, + ) + form_validated = form.is_valid() + if form_validated: + new_object = self.save_form(request, form, change=not add) + else: + new_object = form.instance + if all_valid(formsets) and form_validated: + self.save_model(request, new_object, form, not add) + self.save_related(request, form, formsets, not add) + change_message = self.construct_change_message( + request, form, formsets, add + ) + if add: + self.log_addition(request, new_object, change_message) + return self.response_add(request, new_object) + else: + self.log_change(request, new_object, change_message) + return self.response_change(request, new_object) + else: + form_validated = False + else: + if add: + initial = self.get_changeform_initial_data(request) + form = ModelForm(initial=initial) + formsets, inline_instances = self._create_formsets( + request, form.instance, change=False + ) + else: + form = ModelForm(instance=obj) + formsets, inline_instances = self._create_formsets( + request, obj, change=True + ) + + if not add and not self.has_change_permission(request, obj): + readonly_fields = flatten_fieldsets(fieldsets) + else: + readonly_fields = self.get_readonly_fields(request, obj) + adminForm = helpers.AdminForm( + form, + list(fieldsets), + # Clear prepopulated fields on a view-only form to avoid a crash. + self.get_prepopulated_fields(request, obj) + if add or self.has_change_permission(request, obj) + else {}, + readonly_fields, + model_admin=self, + ) + media = self.media + adminForm.media + + inline_formsets = self.get_inline_formsets( + request, formsets, inline_instances, obj + ) + for inline_formset in inline_formsets: + media = media + inline_formset.media + + if add: + title = _("Add %s") + elif self.has_change_permission(request, obj): + title = _("Change %s") + else: + title = _("View %s") + context = { + **self.admin_site.each_context(request), + "title": title % opts.verbose_name, + "subtitle": str(obj) if obj else None, + "adminform": adminForm, + "object_id": object_id, + "original": obj, + "is_popup": IS_POPUP_VAR in request.POST or IS_POPUP_VAR in request.GET, + "to_field": to_field, + "media": media, + "inline_admin_formsets": inline_formsets, + "errors": helpers.AdminErrorList(form, formsets), + "preserved_filters": self.get_preserved_filters(request), + } + + # Hide the "Save" and "Save and continue" buttons if "Save as New" was + # previously chosen to prevent the interface from getting confusing. + if ( + request.method == "POST" + and not form_validated + and "_saveasnew" in request.POST + ): + context["show_save"] = False + context["show_save_and_continue"] = False + # Use the change template instead of the add template. + add = False + + context.update(extra_context or {}) + + return self.render_change_form( + request, context, add=add, change=not add, obj=obj, form_url=form_url + ) + + def add_view(self, request, form_url="", extra_context=None): + return self.changeform_view(request, None, form_url, extra_context) + + def change_view(self, request, object_id, form_url="", extra_context=None): + return self.changeform_view(request, object_id, form_url, extra_context) + + def _get_edited_object_pks(self, request, prefix): + """Return POST data values of list_editable primary keys.""" + pk_pattern = re.compile( + r"{}-\d+-{}$".format(re.escape(prefix), self.model._meta.pk.name) + ) + return [value for key, value in request.POST.items() if pk_pattern.match(key)] + + def _get_list_editable_queryset(self, request, prefix): + """ + Based on POST data, return a queryset of the objects that were edited + via list_editable. + """ + object_pks = self._get_edited_object_pks(request, prefix) + queryset = self.get_queryset(request) + validate = queryset.model._meta.pk.to_python + try: + for pk in object_pks: + validate(pk) + except ValidationError: + # Disable the optimization if the POST data was tampered with. + return queryset + return queryset.filter(pk__in=object_pks) + + @csrf_protect_m + def changelist_view(self, request, extra_context=None): + """ + The 'change list' admin view for this model. + """ + from django.contrib.admin.views.main import ERROR_FLAG + + opts = self.model._meta + app_label = opts.app_label + if not self.has_view_or_change_permission(request): + raise PermissionDenied + + try: + cl = self.get_changelist_instance(request) + except IncorrectLookupParameters: + # Wacky lookup parameters were given, so redirect to the main + # changelist page, without parameters, and pass an 'invalid=1' + # parameter via the query string. If wacky parameters were given + # and the 'invalid=1' parameter was already in the query string, + # something is screwed up with the database, so display an error + # page. + if ERROR_FLAG in request.GET: + return SimpleTemplateResponse( + "admin/invalid_setup.html", + { + "title": _("Database error"), + }, + ) + return HttpResponseRedirect(request.path + "?" + ERROR_FLAG + "=1") + + # If the request was POSTed, this might be a bulk action or a bulk + # edit. Try to look up an action or confirmation first, but if this + # isn't an action the POST will fall through to the bulk edit check, + # below. + action_failed = False + selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) + + actions = self.get_actions(request) + # Actions with no confirmation + if ( + actions + and request.method == "POST" + and "index" in request.POST + and "_save" not in request.POST + ): + if selected: + response = self.response_action( + request, queryset=cl.get_queryset(request) + ) + if response: + return response + else: + action_failed = True + else: + msg = _( + "Items must be selected in order to perform " + "actions on them. No items have been changed." + ) + self.message_user(request, msg, messages.WARNING) + action_failed = True + + # Actions with confirmation + if ( + actions + and request.method == "POST" + and helpers.ACTION_CHECKBOX_NAME in request.POST + and "index" not in request.POST + and "_save" not in request.POST + ): + if selected: + response = self.response_action( + request, queryset=cl.get_queryset(request) + ) + if response: + return response + else: + action_failed = True + + if action_failed: + # Redirect back to the changelist page to avoid resubmitting the + # form if the user refreshes the browser or uses the "No, take + # me back" button on the action confirmation page. + return HttpResponseRedirect(request.get_full_path()) + + # If we're allowing changelist editing, we need to construct a formset + # for the changelist given all the fields to be edited. Then we'll + # use the formset to validate/process POSTed data. + formset = cl.formset = None + + # Handle POSTed bulk-edit data. + if request.method == "POST" and cl.list_editable and "_save" in request.POST: + if not self.has_change_permission(request): + raise PermissionDenied + FormSet = self.get_changelist_formset(request) + modified_objects = self._get_list_editable_queryset( + request, FormSet.get_default_prefix() + ) + formset = cl.formset = FormSet( + request.POST, request.FILES, queryset=modified_objects + ) + if formset.is_valid(): + changecount = 0 + for form in formset.forms: + if form.has_changed(): + obj = self.save_form(request, form, change=True) + self.save_model(request, obj, form, change=True) + self.save_related(request, form, formsets=[], change=True) + change_msg = self.construct_change_message(request, form, None) + self.log_change(request, obj, change_msg) + changecount += 1 + + if changecount: + msg = ngettext( + "%(count)s %(name)s was changed successfully.", + "%(count)s %(name)s were changed successfully.", + changecount, + ) % { + "count": changecount, + "name": model_ngettext(opts, changecount), + } + self.message_user(request, msg, messages.SUCCESS) + + return HttpResponseRedirect(request.get_full_path()) + + # Handle GET -- construct a formset for display. + elif cl.list_editable and self.has_change_permission(request): + FormSet = self.get_changelist_formset(request) + formset = cl.formset = FormSet(queryset=cl.result_list) + + # Build the list of media to be used by the formset. + if formset: + media = self.media + formset.media + else: + media = self.media + + # Build the action form and populate it with available actions. + if actions: + action_form = self.action_form(auto_id=None) + action_form.fields["action"].choices = self.get_action_choices(request) + media += action_form.media + else: + action_form = None + + selection_note_all = ngettext( + "%(total_count)s selected", "All %(total_count)s selected", cl.result_count + ) + + context = { + **self.admin_site.each_context(request), + "module_name": str(opts.verbose_name_plural), + "selection_note": _("0 of %(cnt)s selected") % {"cnt": len(cl.result_list)}, + "selection_note_all": selection_note_all % {"total_count": cl.result_count}, + "title": cl.title, + "subtitle": None, + "is_popup": cl.is_popup, + "to_field": cl.to_field, + "cl": cl, + "media": media, + "has_add_permission": self.has_add_permission(request), + "opts": cl.opts, + "action_form": action_form, + "actions_on_top": self.actions_on_top, + "actions_on_bottom": self.actions_on_bottom, + "actions_selection_counter": self.actions_selection_counter, + "preserved_filters": self.get_preserved_filters(request), + **(extra_context or {}), + } + + request.current_app = self.admin_site.name + + return TemplateResponse( + request, + self.change_list_template + or [ + "admin/%s/%s/change_list.html" % (app_label, opts.model_name), + "admin/%s/change_list.html" % app_label, + "admin/change_list.html", + ], + context, + ) + + def get_deleted_objects(self, objs, request): + """ + Hook for customizing the delete process for the delete view and the + "delete selected" action. + """ + return get_deleted_objects(objs, request, self.admin_site) + + @csrf_protect_m + def delete_view(self, request, object_id, extra_context=None): + with transaction.atomic(using=router.db_for_write(self.model)): + return self._delete_view(request, object_id, extra_context) + + def _delete_view(self, request, object_id, extra_context): + "The 'delete' admin view for this model." + opts = self.model._meta + app_label = opts.app_label + + to_field = request.POST.get(TO_FIELD_VAR, request.GET.get(TO_FIELD_VAR)) + if to_field and not self.to_field_allowed(request, to_field): + raise DisallowedModelAdminToField( + "The field %s cannot be referenced." % to_field + ) + + obj = self.get_object(request, unquote(object_id), to_field) + + if not self.has_delete_permission(request, obj): + raise PermissionDenied + + if obj is None: + return self._get_obj_does_not_exist_redirect(request, opts, object_id) + + # Populate deleted_objects, a data structure of all related objects that + # will also be deleted. + ( + deleted_objects, + model_count, + perms_needed, + protected, + ) = self.get_deleted_objects([obj], request) + + if request.POST and not protected: # The user has confirmed the deletion. + if perms_needed: + raise PermissionDenied + obj_display = str(obj) + attr = str(to_field) if to_field else opts.pk.attname + obj_id = obj.serializable_value(attr) + self.log_deletion(request, obj, obj_display) + self.delete_model(request, obj) + + return self.response_delete(request, obj_display, obj_id) + + object_name = str(opts.verbose_name) + + if perms_needed or protected: + title = _("Cannot delete %(name)s") % {"name": object_name} + else: + title = _("Are you sure?") + + context = { + **self.admin_site.each_context(request), + "title": title, + "subtitle": None, + "object_name": object_name, + "object": obj, + "deleted_objects": deleted_objects, + "model_count": dict(model_count).items(), + "perms_lacking": perms_needed, + "protected": protected, + "opts": opts, + "app_label": app_label, + "preserved_filters": self.get_preserved_filters(request), + "is_popup": IS_POPUP_VAR in request.POST or IS_POPUP_VAR in request.GET, + "to_field": to_field, + **(extra_context or {}), + } + + return self.render_delete_form(request, context) + + def history_view(self, request, object_id, extra_context=None): + "The 'history' admin view for this model." + from django.contrib.admin.models import LogEntry + + # First check if the user can see this history. + model = self.model + obj = self.get_object(request, unquote(object_id)) + if obj is None: + return self._get_obj_does_not_exist_redirect( + request, model._meta, object_id + ) + + if not self.has_view_or_change_permission(request, obj): + raise PermissionDenied + + # Then get the history for this object. + opts = model._meta + app_label = opts.app_label + action_list = ( + LogEntry.objects.filter( + object_id=unquote(object_id), + content_type=get_content_type_for_model(model), + ) + .select_related() + .order_by("action_time") + ) + + context = { + **self.admin_site.each_context(request), + "title": _("Change history: %s") % obj, + "subtitle": None, + "action_list": action_list, + "module_name": str(capfirst(opts.verbose_name_plural)), + "object": obj, + "opts": opts, + "preserved_filters": self.get_preserved_filters(request), + **(extra_context or {}), + } + + request.current_app = self.admin_site.name + + return TemplateResponse( + request, + self.object_history_template + or [ + "admin/%s/%s/object_history.html" % (app_label, opts.model_name), + "admin/%s/object_history.html" % app_label, + "admin/object_history.html", + ], + context, + ) + + def get_formset_kwargs(self, request, obj, inline, prefix): + formset_params = { + "instance": obj, + "prefix": prefix, + "queryset": inline.get_queryset(request), + } + if request.method == "POST": + formset_params.update( + { + "data": request.POST.copy(), + "files": request.FILES, + "save_as_new": "_saveasnew" in request.POST, + } + ) + return formset_params + + def _create_formsets(self, request, obj, change): + "Helper function to generate formsets for add/change_view." + formsets = [] + inline_instances = [] + prefixes = {} + get_formsets_args = [request] + if change: + get_formsets_args.append(obj) + for FormSet, inline in self.get_formsets_with_inlines(*get_formsets_args): + prefix = FormSet.get_default_prefix() + prefixes[prefix] = prefixes.get(prefix, 0) + 1 + if prefixes[prefix] != 1 or not prefix: + prefix = "%s-%s" % (prefix, prefixes[prefix]) + formset_params = self.get_formset_kwargs(request, obj, inline, prefix) + formset = FormSet(**formset_params) + + def user_deleted_form(request, obj, formset, index): + """Return whether or not the user deleted the form.""" + return ( + inline.has_delete_permission(request, obj) + and "{}-{}-DELETE".format(formset.prefix, index) in request.POST + ) + + # Bypass validation of each view-only inline form (since the form's + # data won't be in request.POST), unless the form was deleted. + if not inline.has_change_permission(request, obj if change else None): + for index, form in enumerate(formset.initial_forms): + if user_deleted_form(request, obj, formset, index): + continue + form._errors = {} + form.cleaned_data = form.initial + formsets.append(formset) + inline_instances.append(inline) + return formsets, inline_instances + + +class InlineModelAdmin(BaseModelAdmin): + """ + Options for inline editing of ``model`` instances. + + Provide ``fk_name`` to specify the attribute name of the ``ForeignKey`` + from ``model`` to its parent. This is required if ``model`` has more than + one ``ForeignKey`` to its parent. + """ + + model = None + fk_name = None + formset = BaseInlineFormSet + extra = 3 + min_num = None + max_num = None + template = None + verbose_name = None + verbose_name_plural = None + can_delete = True + show_change_link = False + checks_class = InlineModelAdminChecks + classes = None + + def __init__(self, parent_model, admin_site): + self.admin_site = admin_site + self.parent_model = parent_model + self.opts = self.model._meta + self.has_registered_model = admin_site.is_registered(self.model) + super().__init__() + if self.verbose_name_plural is None: + if self.verbose_name is None: + self.verbose_name_plural = self.model._meta.verbose_name_plural + else: + self.verbose_name_plural = format_lazy("{}s", self.verbose_name) + if self.verbose_name is None: + self.verbose_name = self.model._meta.verbose_name + + @property + def media(self): + extra = "" if settings.DEBUG else ".min" + js = ["vendor/jquery/jquery%s.js" % extra, "jquery.init.js", "inlines.js"] + if self.filter_vertical or self.filter_horizontal: + js.extend(["SelectBox.js", "SelectFilter2.js"]) + if self.classes and "collapse" in self.classes: + js.append("collapse.js") + return forms.Media(js=["admin/js/%s" % url for url in js]) + + def get_extra(self, request, obj=None, **kwargs): + """Hook for customizing the number of extra inline forms.""" + return self.extra + + def get_min_num(self, request, obj=None, **kwargs): + """Hook for customizing the min number of inline forms.""" + return self.min_num + + def get_max_num(self, request, obj=None, **kwargs): + """Hook for customizing the max number of extra inline forms.""" + return self.max_num + + def get_formset(self, request, obj=None, **kwargs): + """Return a BaseInlineFormSet class for use in admin add/change views.""" + if "fields" in kwargs: + fields = kwargs.pop("fields") + else: + fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + excluded = self.get_exclude(request, obj) + exclude = [] if excluded is None else list(excluded) + exclude.extend(self.get_readonly_fields(request, obj)) + if excluded is None and hasattr(self.form, "_meta") and self.form._meta.exclude: + # Take the custom ModelForm's Meta.exclude into account only if the + # InlineModelAdmin doesn't define its own. + exclude.extend(self.form._meta.exclude) + # If exclude is an empty list we use None, since that's the actual + # default. + exclude = exclude or None + can_delete = self.can_delete and self.has_delete_permission(request, obj) + defaults = { + "form": self.form, + "formset": self.formset, + "fk_name": self.fk_name, + "fields": fields, + "exclude": exclude, + "formfield_callback": partial(self.formfield_for_dbfield, request=request), + "extra": self.get_extra(request, obj, **kwargs), + "min_num": self.get_min_num(request, obj, **kwargs), + "max_num": self.get_max_num(request, obj, **kwargs), + "can_delete": can_delete, + **kwargs, + } + + base_model_form = defaults["form"] + can_change = self.has_change_permission(request, obj) if request else True + can_add = self.has_add_permission(request, obj) if request else True + + class DeleteProtectedModelForm(base_model_form): + def hand_clean_DELETE(self): + """ + We don't validate the 'DELETE' field itself because on + templates it's not rendered using the field information, but + just using a generic "deletion_field" of the InlineModelAdmin. + """ + if self.cleaned_data.get(DELETION_FIELD_NAME, False): + using = router.db_for_write(self._meta.model) + collector = NestedObjects(using=using) + if self.instance._state.adding: + return + collector.collect([self.instance]) + if collector.protected: + objs = [] + for p in collector.protected: + objs.append( + # Translators: Model verbose name and instance + # representation, suitable to be an item in a + # list. + _("%(class_name)s %(instance)s") + % {"class_name": p._meta.verbose_name, "instance": p} + ) + params = { + "class_name": self._meta.model._meta.verbose_name, + "instance": self.instance, + "related_objects": get_text_list(objs, _("and")), + } + msg = _( + "Deleting %(class_name)s %(instance)s would require " + "deleting the following protected related objects: " + "%(related_objects)s" + ) + raise ValidationError( + msg, code="deleting_protected", params=params + ) + + def is_valid(self): + result = super().is_valid() + self.hand_clean_DELETE() + return result + + def has_changed(self): + # Protect against unauthorized edits. + if not can_change and not self.instance._state.adding: + return False + if not can_add and self.instance._state.adding: + return False + return super().has_changed() + + defaults["form"] = DeleteProtectedModelForm + + if defaults["fields"] is None and not modelform_defines_fields( + defaults["form"] + ): + defaults["fields"] = forms.ALL_FIELDS + + return inlineformset_factory(self.parent_model, self.model, **defaults) + + def _get_form_for_get_fields(self, request, obj=None): + return self.get_formset(request, obj, fields=None).form + + def get_queryset(self, request): + queryset = super().get_queryset(request) + if not self.has_view_or_change_permission(request): + queryset = queryset.none() + return queryset + + def _has_any_perms_for_target_model(self, request, perms): + """ + This method is called only when the ModelAdmin's model is for an + ManyToManyField's implicit through model (if self.opts.auto_created). + Return True if the user has any of the given permissions ('add', + 'change', etc.) for the model that points to the through model. + """ + opts = self.opts + # Find the target model of an auto-created many-to-many relationship. + for field in opts.fields: + if field.remote_field and field.remote_field.model != self.parent_model: + opts = field.remote_field.model._meta + break + return any( + request.user.has_perm( + "%s.%s" % (opts.app_label, get_permission_codename(perm, opts)) + ) + for perm in perms + ) + + def has_add_permission(self, request, obj): + if self.opts.auto_created: + # Auto-created intermediate models don't have their own + # permissions. The user needs to have the change permission for the + # related model in order to be able to do anything with the + # intermediate model. + return self._has_any_perms_for_target_model(request, ["change"]) + return super().has_add_permission(request) + + def has_change_permission(self, request, obj=None): + if self.opts.auto_created: + # Same comment as has_add_permission(). + return self._has_any_perms_for_target_model(request, ["change"]) + return super().has_change_permission(request) + + def has_delete_permission(self, request, obj=None): + if self.opts.auto_created: + # Same comment as has_add_permission(). + return self._has_any_perms_for_target_model(request, ["change"]) + return super().has_delete_permission(request, obj) + + def has_view_permission(self, request, obj=None): + if self.opts.auto_created: + # Same comment as has_add_permission(). The 'change' permission + # also implies the 'view' permission. + return self._has_any_perms_for_target_model(request, ["view", "change"]) + return super().has_view_permission(request) + + +class StackedInline(InlineModelAdmin): + template = "admin/edit_inline/stacked.html" + + +class TabularInline(InlineModelAdmin): + template = "admin/edit_inline/tabular.html" diff --git a/venv/Lib/site-packages/django/contrib/admin/sites.py b/venv/Lib/site-packages/django/contrib/admin/sites.py new file mode 100644 index 000000000..ae166ceed --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/sites.py @@ -0,0 +1,607 @@ +import re +from functools import update_wrapper +from weakref import WeakSet + +from django.apps import apps +from django.conf import settings +from django.contrib.admin import ModelAdmin, actions +from django.contrib.admin.views.autocomplete import AutocompleteJsonView +from django.contrib.auth import REDIRECT_FIELD_NAME +from django.core.exceptions import ImproperlyConfigured +from django.db.models.base import ModelBase +from django.http import Http404, HttpResponsePermanentRedirect, HttpResponseRedirect +from django.template.response import TemplateResponse +from django.urls import NoReverseMatch, Resolver404, resolve, reverse +from django.utils.decorators import method_decorator +from django.utils.functional import LazyObject +from django.utils.module_loading import import_string +from django.utils.text import capfirst +from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy +from django.views.decorators.cache import never_cache +from django.views.decorators.common import no_append_slash +from django.views.decorators.csrf import csrf_protect +from django.views.i18n import JavaScriptCatalog + +all_sites = WeakSet() + + +class AlreadyRegistered(Exception): + pass + + +class NotRegistered(Exception): + pass + + +class AdminSite: + """ + An AdminSite object encapsulates an instance of the Django admin application, ready + to be hooked in to your URLconf. Models are registered with the AdminSite using the + register() method, and the get_urls() method can then be used to access Django view + functions that present a full admin interface for the collection of registered + models. + """ + + # Text to put at the end of each page's . + site_title = gettext_lazy("Django site admin") + + # Text to put in each page's <h1>. + site_header = gettext_lazy("Django administration") + + # Text to put at the top of the admin index page. + index_title = gettext_lazy("Site administration") + + # URL for the "View site" link at the top of each admin page. + site_url = "/" + + enable_nav_sidebar = True + + empty_value_display = "-" + + login_form = None + index_template = None + app_index_template = None + login_template = None + logout_template = None + password_change_template = None + password_change_done_template = None + + final_catch_all_view = True + + def __init__(self, name="admin"): + self._registry = {} # model_class class -> admin_class instance + self.name = name + self._actions = {"delete_selected": actions.delete_selected} + self._global_actions = self._actions.copy() + all_sites.add(self) + + def __repr__(self): + return f"{self.__class__.__name__}(name={self.name!r})" + + def check(self, app_configs): + """ + Run the system checks on all ModelAdmins, except if they aren't + customized at all. + """ + if app_configs is None: + app_configs = apps.get_app_configs() + app_configs = set(app_configs) # Speed up lookups below + + errors = [] + modeladmins = ( + o for o in self._registry.values() if o.__class__ is not ModelAdmin + ) + for modeladmin in modeladmins: + if modeladmin.model._meta.app_config in app_configs: + errors.extend(modeladmin.check()) + return errors + + def register(self, model_or_iterable, admin_class=None, **options): + """ + Register the given model(s) with the given admin class. + + The model(s) should be Model classes, not instances. + + If an admin class isn't given, use ModelAdmin (the default admin + options). If keyword arguments are given -- e.g., list_display -- + apply them as options to the admin class. + + If a model is already registered, raise AlreadyRegistered. + + If a model is abstract, raise ImproperlyConfigured. + """ + admin_class = admin_class or ModelAdmin + if isinstance(model_or_iterable, ModelBase): + model_or_iterable = [model_or_iterable] + for model in model_or_iterable: + if model._meta.abstract: + raise ImproperlyConfigured( + "The model %s is abstract, so it cannot be registered with admin." + % model.__name__ + ) + + if model in self._registry: + registered_admin = str(self._registry[model]) + msg = "The model %s is already registered " % model.__name__ + if registered_admin.endswith(".ModelAdmin"): + # Most likely registered without a ModelAdmin subclass. + msg += "in app %r." % re.sub(r"\.ModelAdmin$", "", registered_admin) + else: + msg += "with %r." % registered_admin + raise AlreadyRegistered(msg) + + # Ignore the registration if the model has been + # swapped out. + if not model._meta.swapped: + # If we got **options then dynamically construct a subclass of + # admin_class with those **options. + if options: + # For reasons I don't quite understand, without a __module__ + # the created class appears to "live" in the wrong place, + # which causes issues later on. + options["__module__"] = __name__ + admin_class = type( + "%sAdmin" % model.__name__, (admin_class,), options + ) + + # Instantiate the admin class to save in the registry + self._registry[model] = admin_class(model, self) + + def unregister(self, model_or_iterable): + """ + Unregister the given model(s). + + If a model isn't already registered, raise NotRegistered. + """ + if isinstance(model_or_iterable, ModelBase): + model_or_iterable = [model_or_iterable] + for model in model_or_iterable: + if model not in self._registry: + raise NotRegistered("The model %s is not registered" % model.__name__) + del self._registry[model] + + def is_registered(self, model): + """ + Check if a model class is registered with this `AdminSite`. + """ + return model in self._registry + + def add_action(self, action, name=None): + """ + Register an action to be available globally. + """ + name = name or action.__name__ + self._actions[name] = action + self._global_actions[name] = action + + def disable_action(self, name): + """ + Disable a globally-registered action. Raise KeyError for invalid names. + """ + del self._actions[name] + + def get_action(self, name): + """ + Explicitly get a registered global action whether it's enabled or + not. Raise KeyError for invalid names. + """ + return self._global_actions[name] + + @property + def actions(self): + """ + Get all the enabled actions as an iterable of (name, func). + """ + return self._actions.items() + + def has_permission(self, request): + """ + Return True if the given HttpRequest has permission to view + *at least one* page in the admin site. + """ + return request.user.is_active and request.user.is_staff + + def admin_view(self, view, cacheable=False): + """ + Decorator to create an admin view attached to this ``AdminSite``. This + wraps the view and provides permission checking by calling + ``self.has_permission``. + + You'll want to use this from within ``AdminSite.get_urls()``: + + class MyAdminSite(AdminSite): + + def get_urls(self): + from django.urls import path + + urls = super().get_urls() + urls += [ + path('my_view/', self.admin_view(some_view)) + ] + return urls + + By default, admin_views are marked non-cacheable using the + ``never_cache`` decorator. If the view can be safely cached, set + cacheable=True. + """ + + def inner(request, *args, **kwargs): + if not self.has_permission(request): + if request.path == reverse("admin:logout", current_app=self.name): + index_path = reverse("admin:index", current_app=self.name) + return HttpResponseRedirect(index_path) + # Inner import to prevent django.contrib.admin (app) from + # importing django.contrib.auth.models.User (unrelated model). + from django.contrib.auth.views import redirect_to_login + + return redirect_to_login( + request.get_full_path(), + reverse("admin:login", current_app=self.name), + ) + return view(request, *args, **kwargs) + + if not cacheable: + inner = never_cache(inner) + # We add csrf_protect here so this function can be used as a utility + # function for any view, without having to repeat 'csrf_protect'. + if not getattr(view, "csrf_exempt", False): + inner = csrf_protect(inner) + return update_wrapper(inner, view) + + def get_urls(self): + # Since this module gets imported in the application's root package, + # it cannot import models from other applications at the module level, + # and django.contrib.contenttypes.views imports ContentType. + from django.contrib.contenttypes import views as contenttype_views + from django.urls import include, path, re_path + + def wrap(view, cacheable=False): + def wrapper(*args, **kwargs): + return self.admin_view(view, cacheable)(*args, **kwargs) + + wrapper.admin_site = self + return update_wrapper(wrapper, view) + + # Admin-site-wide views. + urlpatterns = [ + path("", wrap(self.index), name="index"), + path("login/", self.login, name="login"), + path("logout/", wrap(self.logout), name="logout"), + path( + "password_change/", + wrap(self.password_change, cacheable=True), + name="password_change", + ), + path( + "password_change/done/", + wrap(self.password_change_done, cacheable=True), + name="password_change_done", + ), + path("autocomplete/", wrap(self.autocomplete_view), name="autocomplete"), + path("jsi18n/", wrap(self.i18n_javascript, cacheable=True), name="jsi18n"), + path( + "r/<int:content_type_id>/<path:object_id>/", + wrap(contenttype_views.shortcut), + name="view_on_site", + ), + ] + + # Add in each model's views, and create a list of valid URLS for the + # app_index + valid_app_labels = [] + for model, model_admin in self._registry.items(): + urlpatterns += [ + path( + "%s/%s/" % (model._meta.app_label, model._meta.model_name), + include(model_admin.urls), + ), + ] + if model._meta.app_label not in valid_app_labels: + valid_app_labels.append(model._meta.app_label) + + # If there were ModelAdmins registered, we should have a list of app + # labels for which we need to allow access to the app_index view, + if valid_app_labels: + regex = r"^(?P<app_label>" + "|".join(valid_app_labels) + ")/$" + urlpatterns += [ + re_path(regex, wrap(self.app_index), name="app_list"), + ] + + if self.final_catch_all_view: + urlpatterns.append(re_path(r"(?P<url>.*)$", wrap(self.catch_all_view))) + + return urlpatterns + + @property + def urls(self): + return self.get_urls(), "admin", self.name + + def each_context(self, request): + """ + Return a dictionary of variables to put in the template context for + *every* page in the admin site. + + For sites running on a subpath, use the SCRIPT_NAME value if site_url + hasn't been customized. + """ + script_name = request.META["SCRIPT_NAME"] + site_url = ( + script_name if self.site_url == "/" and script_name else self.site_url + ) + return { + "site_title": self.site_title, + "site_header": self.site_header, + "site_url": site_url, + "has_permission": self.has_permission(request), + "available_apps": self.get_app_list(request), + "is_popup": False, + "is_nav_sidebar_enabled": self.enable_nav_sidebar, + } + + def password_change(self, request, extra_context=None): + """ + Handle the "change password" task -- both form display and validation. + """ + from django.contrib.admin.forms import AdminPasswordChangeForm + from django.contrib.auth.views import PasswordChangeView + + url = reverse("admin:password_change_done", current_app=self.name) + defaults = { + "form_class": AdminPasswordChangeForm, + "success_url": url, + "extra_context": {**self.each_context(request), **(extra_context or {})}, + } + if self.password_change_template is not None: + defaults["template_name"] = self.password_change_template + request.current_app = self.name + return PasswordChangeView.as_view(**defaults)(request) + + def password_change_done(self, request, extra_context=None): + """ + Display the "success" page after a password change. + """ + from django.contrib.auth.views import PasswordChangeDoneView + + defaults = { + "extra_context": {**self.each_context(request), **(extra_context or {})}, + } + if self.password_change_done_template is not None: + defaults["template_name"] = self.password_change_done_template + request.current_app = self.name + return PasswordChangeDoneView.as_view(**defaults)(request) + + def i18n_javascript(self, request, extra_context=None): + """ + Display the i18n JavaScript that the Django admin requires. + + `extra_context` is unused but present for consistency with the other + admin views. + """ + return JavaScriptCatalog.as_view(packages=["django.contrib.admin"])(request) + + def logout(self, request, extra_context=None): + """ + Log out the user for the given HttpRequest. + + This should *not* assume the user is already logged in. + """ + from django.contrib.auth.views import LogoutView + + defaults = { + "extra_context": { + **self.each_context(request), + # Since the user isn't logged out at this point, the value of + # has_permission must be overridden. + "has_permission": False, + **(extra_context or {}), + }, + } + if self.logout_template is not None: + defaults["template_name"] = self.logout_template + request.current_app = self.name + return LogoutView.as_view(**defaults)(request) + + @method_decorator(never_cache) + def login(self, request, extra_context=None): + """ + Display the login form for the given HttpRequest. + """ + if request.method == "GET" and self.has_permission(request): + # Already logged-in, redirect to admin index + index_path = reverse("admin:index", current_app=self.name) + return HttpResponseRedirect(index_path) + + # Since this module gets imported in the application's root package, + # it cannot import models from other applications at the module level, + # and django.contrib.admin.forms eventually imports User. + from django.contrib.admin.forms import AdminAuthenticationForm + from django.contrib.auth.views import LoginView + + context = { + **self.each_context(request), + "title": _("Log in"), + "app_path": request.get_full_path(), + "username": request.user.get_username(), + } + if ( + REDIRECT_FIELD_NAME not in request.GET + and REDIRECT_FIELD_NAME not in request.POST + ): + context[REDIRECT_FIELD_NAME] = reverse("admin:index", current_app=self.name) + context.update(extra_context or {}) + + defaults = { + "extra_context": context, + "authentication_form": self.login_form or AdminAuthenticationForm, + "template_name": self.login_template or "admin/login.html", + } + request.current_app = self.name + return LoginView.as_view(**defaults)(request) + + def autocomplete_view(self, request): + return AutocompleteJsonView.as_view(admin_site=self)(request) + + @no_append_slash + def catch_all_view(self, request, url): + if settings.APPEND_SLASH and not url.endswith("/"): + urlconf = getattr(request, "urlconf", None) + try: + match = resolve("%s/" % request.path_info, urlconf) + except Resolver404: + pass + else: + if getattr(match.func, "should_append_slash", True): + return HttpResponsePermanentRedirect("%s/" % request.path) + raise Http404 + + def _build_app_dict(self, request, label=None): + """ + Build the app dictionary. The optional `label` parameter filters models + of a specific app. + """ + app_dict = {} + + if label: + models = { + m: m_a + for m, m_a in self._registry.items() + if m._meta.app_label == label + } + else: + models = self._registry + + for model, model_admin in models.items(): + app_label = model._meta.app_label + + has_module_perms = model_admin.has_module_permission(request) + if not has_module_perms: + continue + + perms = model_admin.get_model_perms(request) + + # Check whether user has any perm for this module. + # If so, add the module to the model_list. + if True not in perms.values(): + continue + + info = (app_label, model._meta.model_name) + model_dict = { + "model": model, + "name": capfirst(model._meta.verbose_name_plural), + "object_name": model._meta.object_name, + "perms": perms, + "admin_url": None, + "add_url": None, + } + if perms.get("change") or perms.get("view"): + model_dict["view_only"] = not perms.get("change") + try: + model_dict["admin_url"] = reverse( + "admin:%s_%s_changelist" % info, current_app=self.name + ) + except NoReverseMatch: + pass + if perms.get("add"): + try: + model_dict["add_url"] = reverse( + "admin:%s_%s_add" % info, current_app=self.name + ) + except NoReverseMatch: + pass + + if app_label in app_dict: + app_dict[app_label]["models"].append(model_dict) + else: + app_dict[app_label] = { + "name": apps.get_app_config(app_label).verbose_name, + "app_label": app_label, + "app_url": reverse( + "admin:app_list", + kwargs={"app_label": app_label}, + current_app=self.name, + ), + "has_module_perms": has_module_perms, + "models": [model_dict], + } + + if label: + return app_dict.get(label) + return app_dict + + def get_app_list(self, request): + """ + Return a sorted list of all the installed apps that have been + registered in this site. + """ + app_dict = self._build_app_dict(request) + + # Sort the apps alphabetically. + app_list = sorted(app_dict.values(), key=lambda x: x["name"].lower()) + + # Sort the models alphabetically within each app. + for app in app_list: + app["models"].sort(key=lambda x: x["name"]) + + return app_list + + def index(self, request, extra_context=None): + """ + Display the main admin index page, which lists all of the installed + apps that have been registered in this site. + """ + app_list = self.get_app_list(request) + + context = { + **self.each_context(request), + "title": self.index_title, + "subtitle": None, + "app_list": app_list, + **(extra_context or {}), + } + + request.current_app = self.name + + return TemplateResponse( + request, self.index_template or "admin/index.html", context + ) + + def app_index(self, request, app_label, extra_context=None): + app_dict = self._build_app_dict(request, app_label) + if not app_dict: + raise Http404("The requested admin page does not exist.") + # Sort the models alphabetically within each app. + app_dict["models"].sort(key=lambda x: x["name"]) + context = { + **self.each_context(request), + "title": _("%(app)s administration") % {"app": app_dict["name"]}, + "subtitle": None, + "app_list": [app_dict], + "app_label": app_label, + **(extra_context or {}), + } + + request.current_app = self.name + + return TemplateResponse( + request, + self.app_index_template + or ["admin/%s/app_index.html" % app_label, "admin/app_index.html"], + context, + ) + + +class DefaultAdminSite(LazyObject): + def _setup(self): + AdminSiteClass = import_string(apps.get_app_config("admin").default_site) + self._wrapped = AdminSiteClass() + + def __repr__(self): + return repr(self._wrapped) + + +# This global object represents the default admin site, for the common case. +# You can provide your own AdminSite using the (Simple)AdminConfig.default_site +# attribute. You can also instantiate AdminSite in your own code to create a +# custom admin site. +site = DefaultAdminSite() diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/autocomplete.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/autocomplete.css new file mode 100644 index 000000000..69c94e734 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/autocomplete.css @@ -0,0 +1,275 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: var(--body-quiet-color); + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: var(--body-fg); + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 10px 5px 5px; + width: 100%; + display: flex; + flex-wrap: wrap; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: var(--body-quiet-color); + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; + position: absolute; + right: 0; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: var(--body-quiet-color); + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: var(--body-fg); +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid var(--body-quiet-color) 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown { + background: var(--darkened-bg); +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + color: var(--body-fg); + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/base.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/base.css new file mode 100644 index 000000000..1cb3acdbe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/base.css @@ -0,0 +1,1052 @@ +/* + DJANGO Admin styles +*/ + +@import url(fonts.css); + +/* VARIABLE DEFINITIONS */ +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --body-loud-color: #000; + + --header-color: #ffc; + --header-branding-color: var(--accent); + --header-bg: var(--secondary); + --header-link-color: var(--primary-fg); + + --breadcrumbs-fg: #c4dce8; + --breadcrumbs-link-fg: var(--body-bg); + --breadcrumbs-bg: var(--primary); + + --link-fg: #447e9b; + --link-hover-color: #036; + --link-selected-fg: #5b80b2; + + --hairline-color: #e8e8e8; + --border-color: #ccc; + + --error-fg: #ba2121; + + --message-success-bg: #dfd; + --message-warning-bg: #ffc; + --message-error-bg: #ffefef; + + --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ + --selected-bg: #e4e4e4; /* E.g. selected table cells */ + --selected-row: #ffc; + + --button-fg: #fff; + --button-bg: var(--primary); + --button-hover-bg: #609ab6; + --default-button-bg: var(--secondary); + --default-button-hover-bg: #205067; + --close-button-bg: #888; /* Previously #bbb, contrast 1.92 */ + --close-button-hover-bg: #747474; + --delete-button-bg: #ba2121; + --delete-button-hover-bg: #a41515; + + --object-tools-fg: var(--button-fg); + --object-tools-bg: var(--close-button-bg); + --object-tools-hover-bg: var(--close-button-hover-bg); +} + +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #eee; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + } +} + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 14px; + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; + color: var(--body-fg); + background: var(--body-bg); +} + +/* LINKS */ + +a:link, a:visited { + color: var(--link-fg); + text-decoration: none; + transition: color 0.15s, background 0.15s; +} + +a:focus, a:hover { + color: var(--link-hover-color); +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: var(--header-link-color); + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 20px; + color: var(--body-quiet-color); +} + +h2 { + font-size: 16px; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 14px; + margin: .8em 0 .3em 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +h4 { + font-size: 12px; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 10px; + margin: 1.5em 0 .5em 0; + color: var(--body-quiet-color); + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 13px; + line-height: 20px; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +blockquote { + font-size: 11px; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; + color: var(--body-quiet-color); + font-size: 12px; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + font-size: 1px; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 11px; +} + +.mini { + font-size: 10px; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 11px; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 11px; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + color: var(--body-loud-color); +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 18px; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + font-size: 13px; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 30px; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + float: right; + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 13px; + text-align: left; + background: var(--primary); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 12px; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 13px; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: var(--body-fg); +} + +ul.messagelist li.warning { + background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 14px; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 13px; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 12px; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 10px; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 16px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +table#change-history { + width: 100%; +} + +table#change-history tbody th { + width: 16em; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); + overflow: hidden; +} + +#header a:link, #header a:visited { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + float: left; +} + +#branding h1 { + padding: 0; + margin: 0 20px 0 0; + font-weight: 300; + font-size: 24px; + color: var(--accent); +} + +#branding h1, #branding h1 a:link, #branding h1 a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 14px; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#user-tools { + float: right; + padding: 0; + margin: 0 0 0 20px; + font-weight: 300; + font-size: 11px; + letter-spacing: 0.5px; + text-transform: uppercase; + text-align: right; +} + +#user-tools a { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover { + text-decoration: none; + border-bottom-color: var(--primary); + color: var(--primary); +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 13px; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 18px; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 15px; + line-height: 15px; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/changelists.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/changelists.css new file mode 100644 index 000000000..a4baf3295 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/changelists.css @@ -0,0 +1,355 @@ +/* CHANGELISTS */ + +#changelist { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +#changelist .changelist-form-container { + flex: 1 1 auto; + min-width: 0; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: var(--body-quiet-color); +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +#toolbar form input { + border-radius: 4px; + font-size: 14px; + padding: 5px; + color: var(--body-fg); +} + +#toolbar #searchbar { + height: 19px; + border: 1px solid var(--border-color); + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 13px; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: var(--body-quiet-color); +} + +#toolbar form input[type="submit"] { + border: 1px solid var(--border-color); + font-size: 13px; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: var(--body-fg); +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: var(--body-quiet-color); +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +#changelist-search .help { + word-break: break-word; +} + +/* FILTER COLUMN */ + +#changelist-filter { + flex: 0 0 240px; + order: 1; + background: var(--darkened-bg); + border-left: none; + margin: 0 0 0 30px; +} + +#changelist-filter h2 { + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3 { + font-weight: 400; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + text-overflow: ellipsis; + overflow-x: hidden; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-clear a { + font-size: 13px; + padding-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list ul.toplinks { + display: block; + float: left; + padding: 0; + margin: 0; + width: 100%; +} + +.change-list ul.toplinks li { + padding: 3px 6px; + font-weight: bold; + list-style-type: none; + display: inline-block; +} + +.change-list ul.toplinks .date-back a { + color: var(--body-quiet-color); +} + +.change-list ul.toplinks .date-back a:focus, +.change-list ul.toplinks .date-back a:hover { + color: var(--link-hover-color); +} + +/* PAGINATOR */ + +.paginator { + font-size: 13px; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a.showall { + border: none; + background: none; + color: var(--link-fg); +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: var(--link-hover-color); +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 13px; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +#changelist table tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 24px; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions.selected { /* XXX Probably unused? */ + background: var(--body-bg); + border-top: 1px solid var(--body-bg); + border-bottom: 1px solid #edecd6; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 13px; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 24px; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 14px; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +#changelist .actions .button { + font-size: 13px; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 24px; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/dashboard.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/dashboard.css new file mode 100644 index 000000000..91d6efde8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/dashboard.css @@ -0,0 +1,26 @@ +/* DASHBOARD */ + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/fonts.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/fonts.css new file mode 100644 index 000000000..c837e017c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/fonts.css @@ -0,0 +1,20 @@ +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Bold-webfont.woff'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Regular-webfont.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Light-webfont.woff'); + font-weight: 300; + font-style: normal; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/forms.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/forms.css new file mode 100644 index 000000000..bb44be7fa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/forms.css @@ -0,0 +1,527 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 13px; + border-bottom: 1px solid var(--hairline-color); +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 13px; +} + +.required label, label.required { + font-weight: bold; + color: var(--body-fg); +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + float: left; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 26px; +} + +.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 170px; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + clear: left; + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned label + p.help, +form .aligned label + div.help { + margin-left: 0; + padding-left: 0; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +.checkbox-row p.help, +.checkbox-row div.help { + margin-left: 0; + padding-left: 0; +} + +fieldset .fieldBox { + float: left; + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 38px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +fieldset .collapse-toggle { + color: var(--header-link-color); +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: var(--link-fg); +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + text-align: right; + overflow: hidden; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 35px; + line-height: 15px; + margin: 0 0 0 5px; +} + +.submit-row input.default { + margin: 0 0 0 8px; + text-transform: uppercase; +} + +.submit-row p { + margin: 0.3em; +} + +.submit-row p.deletelink-box { + float: left; + margin: 0; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: var(--body-quiet-color); + padding: 5px; + font-size: 13px; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 11px; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 11px; + text-align: left; + font-weight: bold; + background: #bcd; + color: var(--body-bg); +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 9px; + font-weight: bold; + color: var(--body-quiet-color); + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 12px; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 16px; + height: 16px; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/login.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/login.css new file mode 100644 index 000000000..bf4ba8d3d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/login.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 18px; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css new file mode 100644 index 000000000..0c590ff2f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css @@ -0,0 +1,139 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 20px; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive.css new file mode 100644 index 000000000..5779c5a94 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive.css @@ -0,0 +1,1004 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 14px; + } + + .small { + font-size: 12px; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 20px 30px 30px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #branding h1 { + margin: 0 0 8px; + font-size: 20px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 13px; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 22px; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 22px; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions.selected { + border: none; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 11px; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 14px; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 36px; + font-size: 14px; + } + + .form-row select { + height: 36px; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox { + float: none; + margin: 0 -10px; + padding: 0 10px; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + form .form-row p.datetime { + width: 100%; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 13px; + } + + .datetime .timezonewarning { + display: block; + font-size: 11px; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 16px; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + display: flex; + flex-wrap: wrap; + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + margin-left: 0; + font-size: 13px; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 13px; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px 10px 0; + margin: 0 0 15px; + display: flex; + flex-direction: column; + } + + .submit-row > * { + width: 100%; + } + + .submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink { + float: none; + margin: 0 0 10px; + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + } + + .submit-row p.deletelink-box { + order: 4; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 13px; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 12px; + line-height: 12px; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 13px; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 13px; + word-break: break-word; + } +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css new file mode 100644 index 000000000..66d3c2f9b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css @@ -0,0 +1,80 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions, + [dir="rtl"] #changelist-filter { + margin-left: 0; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul { + margin-right: 0; + } + + [dir="rtl"] #changelist-filter { + margin-left: 0; + margin-right: 0; + } +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/rtl.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/rtl.css new file mode 100644 index 000000000..0447f8938 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/rtl.css @@ -0,0 +1,227 @@ +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid var(--hairline-color); + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; + float: right; +} + +.submit-row { + text-align: left +} + +.submit-row p.deletelink-box { + float: right; +} + +.submit-row input.default { + margin-left: 0; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned p.help, form .aligned div.help { + clear: right; +} + +form .aligned ul { + margin-right: 163px; + margin-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +input[type=submit].default, .submit-row input.default { + float: left; +} + +fieldset .fieldBox { + float: right; + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 000000000..8cb8a2b12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css new file mode 100644 index 000000000..750b3207a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css new file mode 100644 index 000000000..7c18ad59d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/css/widgets.css b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/widgets.css new file mode 100644 index 000000000..c7d64566d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/css/widgets.css @@ -0,0 +1,574 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; +} + +.selector select { + width: 380px; + height: 17.2em; +} + +.selector-available, .selector-chosen { + float: left; + width: 380px; + text-align: center; + margin-bottom: 5px; +} + +.selector-chosen select { + border-top: none; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid var(--border-color); + border-radius: 4px 4px 0 0; +} + +.selector-chosen h2 { + background: var(--primary); + color: var(--header-link-color); +} + +.selector .selector-available h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +.selector .selector-filter { + border: 1px solid var(--border-color); + border-width: 0 1px; + padding: 8px; + color: var(--body-quiet-color); + font-size: 10px; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; +} + +.selector .selector-available input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + float: left; + width: 22px; + background-color: var(--selected-bg); + border-radius: 10px; + margin: 10em 5px 0 5px; + padding: 0; +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.55; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: var(--body-quiet-color); + text-decoration: none; + opacity: 0.55; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: var(--link-fg); +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -32px; + cursor: pointer; +} + +.stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 0px; + cursor: pointer; +} + +.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 18px; + width: 18px; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 11px; + color: var(--body-quiet-color); +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 11px; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 11px; + color: var(--body-quiet-color); +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 11px; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 11px; + font-weight: bold; +} + +.aligned p.file-upload { + margin-left: 170px; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: var(--body-fg); + font-size: 11px; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 12px; + width: 19em; + text-align: center; + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + font-weight: 700; + font-size: 12px; + color: #333; + background: var(--accent); +} + +.calendar th { + padding: 8px 5px; + background: var(--darkened-bg); + border-bottom: 1px solid var(--border-color); + font-weight: 400; + font-size: 12px; + text-align: center; + color: var(--body-quiet-color); +} + +.calendar td { + font-weight: 400; + font-size: 12px; + text-align: center; + padding: 0; + border-top: 1px solid var(--hairline-color); + border-bottom: none; +} + +.calendar td.selected a { + background: var(--primary); + color: var(--button-fg); +} + +.calendar td.nonday { + background: var(--darkened-bg); +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: var(--body-quiet-color); +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: var(--primary); + color: white; +} + +.calendar td a:active, .timelist a:active { + background: var(--header-bg); + color: white; +} + +.calendarnav { + font-size: 10px; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: var(--body-quiet-color); +} + +.calendar-shortcuts { + background: var(--body-bg); + color: var(--body-quiet-color); + font-size: 11px; + line-height: 11px; + border-top: 1px solid var(--hairline-color); + padding: 8px 0; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 12px; + background: #eee; + border-top: 1px solid var(--border-color); + color: var(--body-fg); +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/README.txt b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/README.txt new file mode 100644 index 000000000..b247bef33 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/README.txt @@ -0,0 +1,3 @@ +Roboto webfont source: https://www.google.com/fonts/specimen/Roboto +WOFF files extracted using https://github.com/majodev/google-webfonts-helper +Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e0f56267035c2321ca6b590adcfc0fc93b7dc51 GIT binary patch literal 86184 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 I3*a(Q$S^tF@Bjb+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..b9e99185c8300c786fa77a0490fefdd26ab2e99e GIT binary patch literal 85692 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ŐfpB|})B55Bx+ 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff b/venv/Lib/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..96c1986f01459bc3b7ca8e18fc06785e5e35dc45 GIT binary patch literal 85876 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 YL6htZCcLmfC1Z!aXXnWeQyf*20Ac;`*Z=?k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/LICENSE b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/LICENSE new file mode 100644 index 000000000..a4faaa1df --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/README.txt b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/README.txt new file mode 100644 index 000000000..4eb2e492a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- https://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg new file mode 100644 index 000000000..dbf21c39d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg @@ -0,0 +1,14 @@ +<svg width="15" height="60" viewBox="0 0 1792 7168" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="previous"> + <path d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="next"> + <path d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#previous" x="0" y="0" fill="#333333" /> + <use xlink:href="#previous" x="0" y="1792" fill="#000000" /> + <use xlink:href="#next" x="0" y="3584" fill="#333333" /> + <use xlink:href="#next" x="0" y="5376" fill="#000000" /> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 000000000..228854f3b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#EBECE6" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9C9C9" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 000000000..96b87fdd7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F1C02A" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9A741" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg new file mode 100644 index 000000000..e004fb162 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg new file mode 100644 index 000000000..e51ea83f5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M1024 1375v-190q0-14-9.5-23.5t-22.5-9.5h-192q-13 0-22.5 9.5t-9.5 23.5v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11h-220q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17h-1536q-34 0-63.5-17t-46.5-46q-37-63-2-126l768-1408q17-31 47-49t65-18 65 18 47 49z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg new file mode 100644 index 000000000..97910a994 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M192 1664h288v-288h-288v288zm352 0h320v-288h-320v288zm-352-352h288v-320h-288v320zm352 0h320v-320h-320v320zm-352-384h288v-288h-288v288zm736 736h320v-288h-320v288zm-384-736h320v-288h-320v288zm768 736h288v-288h-288v288zm-384-352h320v-320h-320v320zm-352-864v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm736 864h288v-320h-288v320zm-384-384h320v-288h-320v288zm384 0h288v-288h-288v288zm32-480v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm384-64v1280q0 52-38 90t-90 38h-1408q-52 0-90-38t-38-90v-1280q0-52 38-90t90-38h128v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h384v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h128q52 0 90 38t38 90z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg new file mode 100644 index 000000000..bbb137aa0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg new file mode 100644 index 000000000..bf9985d3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M1024 544v448q0 14-9 23t-23 9h-320q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224v-352q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg new file mode 100644 index 000000000..4059b1554 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-no.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-no.svg new file mode 100644 index 000000000..2e0d3832c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-no.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 000000000..1c6b99fc0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg new file mode 100644 index 000000000..50b4f9727 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#666666" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg new file mode 100644 index 000000000..a1ca1d3f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#2b70bf" d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg new file mode 100644 index 000000000..5883d877e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg new file mode 100644 index 000000000..17d1ad67c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/search.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/search.svg new file mode 100644 index 000000000..c8c69b2ac --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/search.svg @@ -0,0 +1,3 @@ +<svg width="15" height="15" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#555555" d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg new file mode 100644 index 000000000..926b8e21b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ +<svg width="16" height="192" viewBox="0 0 1792 21504" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="up"> + <path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="down"> + <path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="left"> + <path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="right"> + <path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="clearall"> + <path transform="translate(336, 336) scale(0.75)" d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="chooseall"> + <path transform="translate(336, 336) scale(0.75)" d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#up" x="0" y="0" fill="#666666" /> + <use xlink:href="#up" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#down" x="0" y="3584" fill="#666666" /> + <use xlink:href="#down" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#left" x="0" y="7168" fill="#666666" /> + <use xlink:href="#left" x="0" y="8960" fill="#447e9b" /> + <use xlink:href="#right" x="0" y="10752" fill="#666666" /> + <use xlink:href="#right" x="0" y="12544" fill="#447e9b" /> + <use xlink:href="#clearall" x="0" y="14336" fill="#666666" /> + <use xlink:href="#clearall" x="0" y="16128" fill="#447e9b" /> + <use xlink:href="#chooseall" x="0" y="17920" fill="#666666" /> + <use xlink:href="#chooseall" x="0" y="19712" fill="#447e9b" /> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg new file mode 100644 index 000000000..7c31ec911 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ +<svg width="14" height="84" viewBox="0 0 1792 10752" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="sort"> + <path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="ascending"> + <path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="descending"> + <path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/> + </g> + </defs> + <use xlink:href="#sort" x="0" y="0" fill="#999999" /> + <use xlink:href="#sort" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#ascending" x="0" y="3584" fill="#999999" /> + <use xlink:href="#ascending" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#descending" x="0" y="7168" fill="#999999" /> + <use xlink:href="#descending" x="0" y="8960" fill="#447e9b" /> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg new file mode 100644 index 000000000..1ca64ae5b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg new file mode 100644 index 000000000..b664d6193 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"/> +</svg> diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectBox.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectBox.js new file mode 100644 index 000000000..ace6d9dfb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectBox.js @@ -0,0 +1,112 @@ +'use strict'; +{ + const SelectBox = { + cache: {}, + init: function(id) { + const box = document.getElementById(id); + SelectBox.cache[id] = []; + const cache = SelectBox.cache[id]; + for (const node of box.options) { + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + const box = document.getElementById(id); + const scroll_value_from_top = box.scrollTop; + box.innerHTML = ''; + for (const node of SelectBox.cache[id]) { + if (node.displayed) { + const new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.title = node.text; + box.appendChild(new_option); + } + } + box.scrollTop = scroll_value_from_top; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + const tokens = text.toLowerCase().split(/\s+/); + for (const node of SelectBox.cache[id]) { + node.displayed = 1; + const node_text = node.text.toLowerCase(); + for (const token of tokens) { + if (!node_text.includes(token)) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + delete_from_cache: function(id, value) { + let delete_index = null; + const cache = SelectBox.cache[id]; + for (const [i, node] of cache.entries()) { + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + for (const node of SelectBox.cache[id]) { + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } ); + }, + select_all: function(id) { + const box = document.getElementById(id); + for (const option of box.options) { + option.selected = true; + } + } + }; + window.SelectBox = SelectBox; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js new file mode 100644 index 000000000..6c709a08c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js @@ -0,0 +1,236 @@ +/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js and SelectBox.js. +*/ +'use strict'; +{ + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + const from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + for (const p of from_box.parentNode.getElementsByTagName('p')) { + if (p.classList.contains("info")) { + // Remove <p class="info">, because it just gets in the way. + from_box.parentNode.removeChild(p); + } else if (p.classList.contains("help")) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); + } + } + + // <div class="selector"> or <div class="selector stacked"> + const selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + // <div class="selector-available"> + const selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + const choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + // <ul class="selector-chooser"> + const selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + // <div class="selector-chosen"> + const selector_chosen = quickElement('div', selector_div); + selector_chosen.className = 'selector-chosen'; + const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); + to_box.className = 'filtered'; + const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.name = from_box.name + '_old'; + + // Set up the JavaScript event handlers for the select box filter interface + const move_selection = function(e, elem, move_func, from, to) { + if (elem.classList.contains('active')) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + from_box.closest('form').addEventListener('submit', function() { + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + if (!is_stacked) { + // In horizontal mode, give the same height to the two boxes. + const j_from_box = document.getElementById(field_id + '_from'); + const j_to_box = document.getElementById(field_id + '_to'); + let height = filter_p.offsetHeight + j_from_box.offsetHeight; + + const j_to_box_style = window.getComputedStyle(j_to_box); + if (j_to_box_style.getPropertyValue('box-sizing') === 'border-box') { + // Add the padding and border to the final height. + height += parseInt(j_to_box_style.getPropertyValue('padding-top'), 10) + + parseInt(j_to_box_style.getPropertyValue('padding-bottom'), 10) + + parseInt(j_to_box_style.getPropertyValue('border-top-width'), 10) + + parseInt(j_to_box_style.getPropertyValue('border-bottom-width'), 10); + } + + j_to_box.style.height = height + 'px'; + } + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + // Temporarily add the required attribute and check validity. + field.required = true; + const any_selected = field.checkValidity(); + field.required = false; + return any_selected; + }, + refresh_icons: function(field_id) { + const from = document.getElementById(field_id + '_from'); + const to = document.getElementById(field_id + '_to'); + // Active if at least one item is selected + document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from)); + document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to)); + // Active if the corresponding box isn't empty + document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); + document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); + }, + filter_key_press: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + from.selectedIndex = 0; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = 0; + event.preventDefault(); + } + }, + filter_key_up: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + const temp = from.selectedIndex; + SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); + from.selectedIndex = temp; + }, + filter_key_down: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + // right arrow -- move across + if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { + const old_index = from.selectedIndex; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; + return; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; + } + } + }; + + window.addEventListener('load', function(e) { + document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { + const data = el.dataset; + SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); + }); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/actions.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/actions.js new file mode 100644 index 000000000..20a5c1435 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/actions.js @@ -0,0 +1,201 @@ +/*global gettext, interpolate, ngettext*/ +'use strict'; +{ + function show(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.remove('hidden'); + }); + } + + function hide(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.add('hidden'); + }); + } + + function showQuestion(options) { + hide(options.acrossClears); + show(options.acrossQuestions); + hide(options.allContainer); + } + + function showClear(options) { + show(options.acrossClears); + hide(options.acrossQuestions); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + show(options.allContainer); + hide(options.counterContainer); + } + + function reset(options) { + hide(options.acrossClears); + hide(options.acrossQuestions); + hide(options.allContainer); + show(options.counterContainer); + } + + function clearAcross(options) { + reset(options); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 0; + }); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + } + + function checker(actionCheckboxes, options, checked) { + if (checked) { + showQuestion(options); + } else { + reset(options); + } + actionCheckboxes.forEach(function(el) { + el.checked = checked; + el.closest('tr').classList.toggle(options.selectedClass, checked); + }); + } + + function updateCounter(actionCheckboxes, options) { + const sel = Array.from(actionCheckboxes).filter(function(el) { + return el.checked; + }).length; + const counter = document.querySelector(options.counterContainer); + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + const actions_icnt = Number(counter.dataset.actionsIcnt); + counter.textContent = interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true); + const allToggle = document.getElementById(options.allToggleId); + allToggle.checked = sel === actionCheckboxes.length; + if (allToggle.checked) { + showQuestion(options); + } else { + clearAcross(options); + } + } + + const defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggleId: "action-toggle", + selectedClass: "selected" + }; + + window.Actions = function(actionCheckboxes, options) { + options = Object.assign({}, defaults, options); + let list_editable_changed = false; + let lastChecked = null; + let shiftPressed = false; + + document.addEventListener('keydown', (event) => { + shiftPressed = event.shiftKey; + }); + + document.addEventListener('keyup', (event) => { + shiftPressed = event.shiftKey; + }); + + document.getElementById(options.allToggleId).addEventListener('click', function(event) { + checker(actionCheckboxes, options, this.checked); + updateCounter(actionCheckboxes, options); + }); + + document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 1; + }); + showClear(options); + }); + }); + + document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + document.getElementById(options.allToggleId).checked = false; + clearAcross(options); + checker(actionCheckboxes, options, false); + updateCounter(actionCheckboxes, options); + }); + }); + + function affectedCheckboxes(target, withModifier) { + const multiSelect = (lastChecked && withModifier && lastChecked !== target); + if (!multiSelect) { + return [target]; + } + const checkboxes = Array.from(actionCheckboxes); + const targetIndex = checkboxes.findIndex(el => el === target); + const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); + const startIndex = Math.min(targetIndex, lastCheckedIndex); + const endIndex = Math.max(targetIndex, lastCheckedIndex); + const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); + return filtered; + }; + + Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { + el.addEventListener('change', function(event) { + const target = event.target; + if (target.classList.contains('action-select')) { + const checkboxes = affectedCheckboxes(target, shiftPressed); + checker(checkboxes, options, target.checked); + updateCounter(actionCheckboxes, options); + lastChecked = target; + } else { + list_editable_changed = true; + } + }); + }); + + document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { + if (list_editable_changed) { + const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + if (!confirmed) { + event.preventDefault(); + } + } + }); + + const el = document.querySelector('#changelist-form input[name=_save]'); + // The button does not exist if no fields are editable. + if (el) { + el.addEventListener('click', function(event) { + if (document.querySelector('[name=action]').value) { + const text = list_editable_changed + ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") + : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); + if (!confirm(text)) { + event.preventDefault(); + } + } + }); + } + }; + + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + const actionsEls = document.querySelectorAll('tr input.action-select'); + if (actionsEls.length > 0) { + Actions(actionsEls); + } + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 000000000..9bad0f54c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,415 @@ +/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ +// Inserts shortcut buttons after all of the following: +// <input type="text" class="vDateField"> +// <input type="text" class="vTimeField"> +'use strict'; +{ + const DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled + calendarDivName2: 'calendarin', // name of <div> that contains calendar + calendarLinkName: 'calendarlink', // name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock <div> that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + for (const inp of document.getElementsByTagName('input')) { + if (inp.type === 'text' && inp.classList.contains('vTimeField')) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.type === 'text' && inp.classList.contains('vDateField')) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localNow = new Date(); + const localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + const warningClass = DateTimeShortcuts.timezoneWarningClass; + let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + return; + } + + let message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + const warning = document.createElement('span'); + warning.className = warningClass; + warning.textContent = message; + inp.parentNode.appendChild(document.createElement('br')); + inp.parentNode.appendChild(warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + const num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const now_link = document.createElement('a'); + now_link.href = "#"; + now_link.textContent = gettext('Now'); + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + const clock_link = document.createElement('a'); + clock_link.href = '#'; + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + // <div id="clockbox1" class="clockbox module"> + // <h2>Choose a time</h2> + // <ul class="timelist"> + // <li><a href="#">Now</a></li> + // <li><a href="#">Midnight</a></li> + // <li><a href="#">6 a.m.</a></li> + // <li><a href="#">Noon</a></li> + // <li><a href="#">6 p.m.</a></li> + // </ul> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + + const clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.id = DateTimeShortcuts.clockDivName + num; + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + const time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the <input>. + const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + const cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + let d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + const num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const today_link = document.createElement('a'); + today_link.href = '#'; + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + const cal_link = document.createElement('a'); + cal_link.href = '#'; + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + // <div id="calendarbox3" class="calendarbox module"> + // <h2> + // <a href="#" class="link-previous">‹</a> + // <a href="#" class="link-next">›</a> February 2003 + // </h2> + // <div class="calendar" id="calendarin3"> + // <!-- (cal) --> + // </div> + // <div class="calendar-shortcuts"> + // <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a> + // </div> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + const cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.id = DateTimeShortcuts.calendarDivName1 + num; + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + const cal_nav = quickElement('div', cal_box); + const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + const shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + const cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + const inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + const selected = inp.value.strptime(format); + const year = selected.getUTCFullYear(); + const month = selected.getUTCMonth() + 1; + const re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + let format = get_format('DATE_INPUT_FORMATS')[0]; + // the format needs to be escaped a little + format = format.replace('\\', '\\\\') + .replace('\r', '\\r') + .replace('\n', '\\n') + .replace('\t', '\\t') + .replace("'", "\\'"); + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + const d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 000000000..289e1cee2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,155 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. +'use strict'; +{ + const $ = django.jQuery; + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + const name = triggeringLink.id.replace(name_regexp, ''); + const href = new URL(triggeringLink.href); + if (add_popup) { + href.searchParams.set('_popup', 1); + } + const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + const name = win.name; + const elem = document.getElementById(name); + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + const $this = $(triggeringLink); + const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + const value = $this.val(); + if (value) { + siblings.each(function() { + const elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + const name = win.name; + const elem = document.getElementById(name); + if (elem) { + const elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + } else if (elemName === 'INPUT') { + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + const toId = name + "_to"; + const o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + const id = win.name.replace(/^edit_/, ''); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + const id = win.name.replace(/^delete_/, ''); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + win.close(); + } + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + $(document).ready(function() { + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link', function(e) { + e.preventDefault(); + if (this.href) { + const event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + const event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + const event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/autocomplete.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/autocomplete.js new file mode 100644 index 000000000..6095abe23 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/autocomplete.js @@ -0,0 +1,35 @@ +'use strict'; +{ + const $ = django.jQuery; + + $.fn.djangoAdminSelect2 = function() { + $.each(this, function(i, element) { + $(element).select2({ + ajax: { + data: (params) => { + return { + term: params.term, + page: params.page, + app_label: element.dataset.appLabel, + model_name: element.dataset.modelName, + field_name: element.dataset.fieldName + }; + } + } + }); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + $(document).on('formset:added', (function() { + return function(event, $newFormset) { + return $newFormset.find('.admin-autocomplete').djangoAdminSelect2(); + }; + })(this)); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/calendar.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/calendar.js new file mode 100644 index 000000000..a62d10a75 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/calendar.js @@ -0,0 +1,221 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ +'use strict'; +{ + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + const CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + monthsOfYearAbbrev: [ + pgettext('abbrev. month January', 'Jan'), + pgettext('abbrev. month February', 'Feb'), + pgettext('abbrev. month March', 'Mar'), + pgettext('abbrev. month April', 'Apr'), + pgettext('abbrev. month May', 'May'), + pgettext('abbrev. month June', 'Jun'), + pgettext('abbrev. month July', 'Jul'), + pgettext('abbrev. month August', 'Aug'), + pgettext('abbrev. month September', 'Sep'), + pgettext('abbrev. month October', 'Oct'), + pgettext('abbrev. month November', 'Nov'), + pgettext('abbrev. month December', 'Dec') + ], + daysOfWeek: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + let days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + const today = new Date(); + const todayDay = today.getDate(); + const todayMonth = today.getMonth() + 1; + const todayYear = today.getFullYear(); + let todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + let isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + const calDiv = document.getElementById(div_id); + removeChildren(calDiv); + const calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + const tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + let tableRow = quickElement('tr', tableBody); + for (let i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + const days = CalendarNamespace.getDaysInMonth(month, year); + + let nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (let i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + let currentDay = 1; + for (let i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + const cell = quickElement('td', tableRow, '', 'class', todayClass); + const link = quickElement('a', cell, currentDay, 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/cancel.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/cancel.js new file mode 100644 index 000000000..3069c6f27 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/cancel.js @@ -0,0 +1,29 @@ +'use strict'; +{ + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + function handleClick(event) { + event.preventDefault(); + const params = new URLSearchParams(window.location.search); + if (params.has('_popup')) { + window.close(); // Close the popup. + } else { + window.history.back(); // Otherwise, go back. + } + } + + document.querySelectorAll('.cancel-link').forEach(function(el) { + el.addEventListener('click', handleClick); + }); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/change_form.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/change_form.js new file mode 100644 index 000000000..96a4c62ef --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/change_form.js @@ -0,0 +1,16 @@ +'use strict'; +{ + const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + const form = document.getElementById(modelName + '_form'); + for (const element of form.elements) { + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } + } + } +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/collapse.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/collapse.js new file mode 100644 index 000000000..c6c7b0f68 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/collapse.js @@ -0,0 +1,43 @@ +/*global gettext*/ +'use strict'; +{ + window.addEventListener('load', function() { + // Add anchor tag for Show/Hide link + const fieldsets = document.querySelectorAll('fieldset.collapse'); + for (const [i, elem] of fieldsets.entries()) { + // Don't hide if fields in this fieldset have errors + if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) { + elem.classList.add('collapsed'); + const h2 = elem.querySelector('h2'); + const link = document.createElement('a'); + link.id = 'fieldsetcollapser' + i; + link.className = 'collapse-toggle'; + link.href = '#'; + link.textContent = gettext('Show'); + h2.appendChild(document.createTextNode(' (')); + h2.appendChild(link); + h2.appendChild(document.createTextNode(')')); + } + } + // Add toggle to hide/show anchor tag + const toggleFunc = function(ev) { + if (ev.target.matches('.collapse-toggle')) { + ev.preventDefault(); + ev.stopPropagation(); + const fieldset = ev.target.closest('fieldset'); + if (fieldset.classList.contains('collapsed')) { + // Show + ev.target.textContent = gettext('Hide'); + fieldset.classList.remove('collapsed'); + } else { + // Hide + ev.target.textContent = gettext('Show'); + fieldset.classList.add('collapsed'); + } + } + }; + document.querySelectorAll('fieldset.module').forEach(function(el) { + el.addEventListener('click', toggleFunc); + }); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/core.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/core.js new file mode 100644 index 000000000..afdae281c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/core.js @@ -0,0 +1,170 @@ +// Core JavaScript helper functions +'use strict'; + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + const obj = document.createElement(arguments[0]); + if (arguments[2]) { + const textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + const len = arguments.length; + for (let i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + let curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - obj.scrollLeft; + obj = obj.offsetParent; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + let curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - obj.scrollTop; + obj = obj.offsetParent; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +{ + Date.prototype.getTwelveHours = function() { + return this.getHours() % 12 || 12; + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getAbbrevMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()]; + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + const fields = { + b: this.getAbbrevMonthName(), + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + let result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result = result + fields[format.charAt(i + 1)]; + ++i; + } + else { + result = result + format.charAt(i); + } + ++i; + } + return result; + }; + + // ---------------------------------------------------------------------------- + // String object extensions + // ---------------------------------------------------------------------------- + String.prototype.strptime = function(format) { + const split_format = format.split(/[.\-/]/); + const date = this.split(/[.\-/]/); + let i = 0; + let day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + // A %y value in the range of [00, 68] is in the current + // century, while [69, 99] is in the previous century, + // according to the Open Group Specification. + if (parseInt(date[i], 10) >= 69) { + year = date[i]; + } else { + year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; + } + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/inlines.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/inlines.js new file mode 100644 index 000000000..d9a9032c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/inlines.js @@ -0,0 +1,344 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +'use strict'; +{ + const $ = django.jQuery; + $.fn.formset = function(opts) { + const options = $.extend({}, $.fn.formset.defaults, opts); + const $this = $(this); + const $parent = $this.parent(); + const updateElementIndex = function(el, prefix, ndx) { + const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + const replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + let nextIndex = parseInt(totalForms.val(), 10); + const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); + let addButton; + + /** + * The "Add another MyModel" button below the inline forms. + */ + const addInlineAddButton = function() { + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + const numCols = $this.eq(-1).children().length; + $parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="#">' + options.addText + "</a></tr>"); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="#">' + options.addText + "</a></div>"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', addInlineClickHandler); + }; + + const addInlineClickHandler = function(e) { + e.preventDefault(); + const template = $("#" + options.prefix + "-empty"); + const row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + addInlineDeleteButton(row); + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited. + row.insertBefore($(template)); + // Update number of total forms. + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide the add button if there's a limit and it's been reached. + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // Show the remove buttons if there are more than min_num. + toggleDeleteButtonVisibility(row.closest('.inline-group')); + + // Pass the new form to the post-add callback, if provided. + if (options.added) { + options.added(row); + } + $(document).trigger('formset:added', [row, options.prefix]); + }; + + /** + * The "X" button that is part of every unsaved inline. + * (When saved, it is replaced with a "Delete" checkbox.) + */ + const addInlineDeleteButton = function(row) { + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an <li> after the last list item: + row.append('<li><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>"); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>"); + } + // Add delete handler for each row. + row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); + }; + + const inlineDeleteHandler = function(e1) { + e1.preventDefault(); + const deleteButton = $(e1.target); + const row = deleteButton.closest('.' + options.formCssClass); + const inlineGroup = row.closest('.inline-group'); + // Remove the parent form containing this button, + // and also remove the relevant row with non-field errors: + const prevRow = row.prev(); + if (prevRow.length && prevRow.hasClass('row-form-errors')) { + prevRow.remove(); + } + row.remove(); + nextIndex -= 1; + // Pass the deleted form to the post-delete callback, if provided. + if (options.removed) { + options.removed(row); + } + $(document).trigger('formset:removed', [row, options.prefix]); + // Update the TOTAL_FORMS form count. + const forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once below maximum number. + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Hide the remove buttons if at min_num. + toggleDeleteButtonVisibility(inlineGroup); + // Also, update names and ids for all remaining form controls so + // they remain in sequence: + let i, formCount; + const updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }; + + const toggleDeleteButtonVisibility = function(inlineGroup) { + if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { + inlineGroup.find('.inline-deletelink').hide(); + } else { + inlineGroup.find('.inline-deletelink').show(); + } + }; + + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + + // Create the delete buttons for all unsaved inlines: + $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { + addInlineDeleteButton($(this)); + }); + toggleDeleteButtonVisibility($this); + + // Create the add button, initially hidden. + addButton = options.addButton; + addInlineAddButton(); + + // Show the add button if allowed to add more items. + // Note that max_num = None translates to a blank string. + const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + if ($this.length && showAddButton) { + addButton.parent().show(); + } else { + addButton.parent().hide(); + } + + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + const $rows = $(this); + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $('.selectfilterstacked').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + const $rows = $(this); + const updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + const count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $(".selectfilterstacked").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + const data = $(this).data(), + inlineOptions = data.inlineFormset; + let selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/jquery.init.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/jquery.init.js new file mode 100644 index 000000000..f40b27f47 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global jQuery:false*/ +'use strict'; +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js new file mode 100644 index 000000000..261a9d499 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js @@ -0,0 +1,102 @@ +'use strict'; +{ + const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); + if (toggleNavSidebar !== null) { + const navLinks = document.querySelectorAll('#nav-sidebar a'); + function disableNavLinkTabbing() { + for (const navLink of navLinks) { + navLink.tabIndex = -1; + } + } + function enableNavLinkTabbing() { + for (const navLink of navLinks) { + navLink.tabIndex = 0; + } + } + function disableNavFilterTabbing() { + document.getElementById('nav-filter').tabIndex = -1; + } + function enableNavFilterTabbing() { + document.getElementById('nav-filter').tabIndex = 0; + } + + const main = document.getElementById('main'); + let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); + if (navSidebarIsOpen === null) { + navSidebarIsOpen = 'true'; + } + if (navSidebarIsOpen === 'false') { + disableNavLinkTabbing(); + disableNavFilterTabbing(); + } + main.classList.toggle('shifted', navSidebarIsOpen === 'true'); + + toggleNavSidebar.addEventListener('click', function() { + if (navSidebarIsOpen === 'true') { + navSidebarIsOpen = 'false'; + disableNavLinkTabbing(); + disableNavFilterTabbing(); + } else { + navSidebarIsOpen = 'true'; + enableNavLinkTabbing(); + enableNavFilterTabbing(); + } + localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); + main.classList.toggle('shifted'); + }); + } + + function initSidebarQuickFilter() { + const options = []; + const navSidebar = document.getElementById('nav-sidebar'); + if (!navSidebar) { + return; + } + navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => { + options.push({title: container.innerHTML, node: container}); + }); + + function checkValue(event) { + let filterValue = event.target.value; + if (filterValue) { + filterValue = filterValue.toLowerCase(); + } + if (event.key === 'Escape') { + filterValue = ''; + event.target.value = ''; // clear input + } + let matches = false; + for (const o of options) { + let displayValue = ''; + if (filterValue) { + if (o.title.toLowerCase().indexOf(filterValue) === -1) { + displayValue = 'none'; + } else { + matches = true; + } + } + // show/hide parent <TR> + o.node.parentNode.parentNode.style.display = displayValue; + } + if (!filterValue || matches) { + event.target.classList.remove('no-results'); + } else { + event.target.classList.add('no-results'); + } + sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue); + } + + const nav = document.getElementById('nav-filter'); + nav.addEventListener('change', checkValue, false); + nav.addEventListener('input', checkValue, false); + nav.addEventListener('keyup', checkValue, false); + + const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue'); + if (storedValue) { + nav.value = storedValue; + checkValue({target: nav, key: ''}); + } + } + window.initSidebarQuickFilter = initSidebarQuickFilter; + initSidebarQuickFilter(); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/popup_response.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/popup_response.js new file mode 100644 index 000000000..2b1d3dd31 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +'use strict'; +{ + const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate.js new file mode 100644 index 000000000..89e95ab44 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate.js @@ -0,0 +1,43 @@ +/*global URLify*/ +'use strict'; +{ + const $ = django.jQuery; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + const prepopulatedField = $(this); + + const populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + const values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js new file mode 100644 index 000000000..72ebdcf5d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js @@ -0,0 +1,11 @@ +'use strict'; +{ + const $ = django.jQuery; + const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); + $.each(fields, function(index, field) { + $('.empty-form .form-row .field-' + field.name + ', .empty-form.form-row .field-' + field.name).addClass('prepopulated_field'); + $(field.id).data('dependency_list', field.dependency_list).prepopulate( + field.dependency_ids, field.maxLength, field.allowUnicode + ); + }); +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/urlify.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/urlify.js new file mode 100644 index 000000000..61dedb23e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/urlify.js @@ -0,0 +1,170 @@ +/*global XRegExp*/ +'use strict'; +{ + const LATIN_MAP = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + const LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + const GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', + 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', + 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', + 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + const TURKISH_MAP = { + 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' + }; + const ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', + 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' + }; + const RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', + 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', + 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + const UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', + 'ї': 'yi', 'ґ': 'g' + }; + const CZECH_MAP = { + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', + 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', + 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' + }; + const SLOVAK_MAP = { + 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', + 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', + 'ú': 'u', 'ý': 'y', 'ž': 'z', + 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', + 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', + 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' + }; + const POLISH_MAP = { + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', + 'ź': 'z', 'ż': 'z', + 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', + 'Ź': 'Z', 'Ż': 'Z' + }; + const LATVIAN_MAP = { + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', + 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', + 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + const ARABIC_MAP = { + 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', + 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' + }; + const LITHUANIAN_MAP = { + 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', + 'ū': 'u', 'ž': 'z', + 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + const SERBIAN_MAP = { + 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', + 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Џ': 'Dz', 'Đ': 'Dj' + }; + const AZERBAIJANI_MAP = { + 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', + 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' + }; + const GEORGIAN_MAP = { + 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', + 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', + 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', + 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', + 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' + }; + + const ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + SLOVAK_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP, + GEORGIAN_MAP + ]; + + const Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + for (const lookup of ALL_DOWNCODE_MAPS) { + Object.assign(Downcoder.map, lookup); + } + Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + if (!allowUnicode) { + s = downcode(s); + } + s = s.toLowerCase(); // convert to lowercase + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.substring(0, num_chars); // trim to first num_chars chars + s = s.replace(/-+$/g, ''); // trim any trailing hyphens + return s; + } + window.URLify = URLify; +} diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt new file mode 100644 index 000000000..f642c3f7a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML <object> elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "<a href='' disabled='disabled'></a>" + + "<select disabled='disabled'><option/></select>"; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = "<a href='#'></a>"; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = "<input/>"; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // <object> elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces <option> tags with their contents when inserted outside of + // the select element. + div.innerHTML = "<option></option>"; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG <use> instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ) + .attr( s.scriptAttrs || {} ) + .prop( { charset: s.scriptCharset, src: s.url } ) + .on( "load error", callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); + this[ callback ] = true; + return callback; + } +} ); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } +} ); + + + + +// Support: Safari 8 only +// In Safari 8 documents created via document.implementation.createHTMLDocument +// collapse sibling forms: the second one becomes a child of the first one. +// Because of that, this security measure has to be disabled in Safari 8. +// https://bugs.webkit.org/show_bug.cgi?id=137337 +support.createHTMLDocument = ( function() { + var body = document.implementation.createHTMLDocument( "" ).body; + body.innerHTML = "<form></form><form></form>"; + return body.childNodes.length === 2; +} )(); + + +// Argument "data" should be string of html +// context (optional): If specified, the fragment will be created in this context, +// defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( typeof data !== "string" ) { + return []; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + + var base, parsed, scripts; + + if ( !context ) { + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation + if ( support.createHTMLDocument ) { + context = document.implementation.createHTMLDocument( "" ); + + // Set the base href for the created document + // so any parsed elements with URLs + // are based on the document's URL (gh-2965) + base = context.createElement( "base" ); + base.href = document.location.href; + context.head.appendChild( base ); + } else { + context = document; + } + } + + parsed = rsingleTag.exec( data ); + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = stripAndCollapse( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + + + + +jQuery.expr.pseudos.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; +}; + + + + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend( { + + // offset() relates an element's border box to the document origin + offset: function( options ) { + + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var rect, win, + elem = this[ 0 ]; + + if ( !elem ) { + return; + } + + // Return zeros for disconnected and hidden (display: none) elements (gh-2310) + // Support: IE <=11 only + // Running getBoundingClientRect on a + // disconnected node in IE throws an error + if ( !elem.getClientRects().length ) { + return { top: 0, left: 0 }; + } + + // Get document-relative position by adding viewport scroll to viewport-relative gBCR + rect = elem.getBoundingClientRect(); + win = elem.ownerDocument.defaultView; + return { + top: rect.top + win.pageYOffset, + left: rect.left + win.pageXOffset + }; + }, + + // position() relates an element's margin box to its offset parent's padding box + // This corresponds to the behavior of CSS absolute positioning + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, doc, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // position:fixed elements are offset from the viewport, which itself always has zero offset + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume position:fixed implies availability of getBoundingClientRect + offset = elem.getBoundingClientRect(); + + } else { + offset = this.offset(); + + // Account for the *real* offset parent, which can be the document or its root element + // when a statically positioned element is identified + doc = elem.ownerDocument; + offsetParent = elem.offsetParent || doc.documentElement; + while ( offsetParent && + ( offsetParent === doc.body || offsetParent === doc.documentElement ) && + jQuery.css( offsetParent, "position" ) === "static" ) { + + offsetParent = offsetParent.parentNode; + } + if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { + + // Incorporate borders into its offset, since they are outside its content origin + parentOffset = jQuery( offsetParent ).offset(); + parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); + } + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + + // Coalesce documents and windows + var win; + if ( isWindow( elem ) ) { + win = elem; + } else if ( elem.nodeType === 9 ) { + win = elem.defaultView; + } + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari <=7 - 9.1, Chrome <=37 - 49 +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( _i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +} ); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { + padding: "inner" + name, + content: type, + "": "outer" + name + }, function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( isWindow( elem ) ) { + + // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) + return funcName.indexOf( "outer" ) === 0 ? + elem[ "inner" + name ] : + elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable ); + }; + } ); +} ); + + +jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( _i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +} ); + + + + +jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + +jQuery.each( + ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( _i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } +); + + + + +// Support: Android <=4.0 only +// Make sure we trim BOM and NBSP +var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +// Bind a function to a context, optionally partially applying any +// arguments. +// jQuery.proxy is deprecated to promote standards (specifically Function#bind) +// However, it is not slated for removal any time soon +jQuery.proxy = function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; +}; + +jQuery.holdReady = function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } +}; +jQuery.isArray = Array.isArray; +jQuery.parseJSON = JSON.parse; +jQuery.nodeName = nodeName; +jQuery.isFunction = isFunction; +jQuery.isWindow = isWindow; +jQuery.camelCase = camelCase; +jQuery.type = toType; + +jQuery.now = Date.now; + +jQuery.isNumeric = function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); +}; + +jQuery.trim = function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); +}; + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + } ); +} + + + + +var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( typeof noGlobal === "undefined" ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; +} ); diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js new file mode 100644 index 000000000..c4c6022f2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md new file mode 100644 index 000000000..8cb8a2b12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js new file mode 100644 index 000000000..32e5ac7de --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js new file mode 100644 index 000000000..64e1caad3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js new file mode 100644 index 000000000..1d52c260f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js new file mode 100644 index 000000000..73b730a70 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js new file mode 100644 index 000000000..2d17b9d8e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js new file mode 100644 index 000000000..46b084d75 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum,t="Obrišite "+r+" simbol";return t+=e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length,t="Ukucajte bar još "+r+" simbol";return t+=e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){var r="Možete izabrati samo "+n.maximum+" stavk";return r+=e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js new file mode 100644 index 000000000..82dbbb7a2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js new file mode 100644 index 000000000..7116d6c1d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js new file mode 100644 index 000000000..cda32c34a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js new file mode 100644 index 000000000..c2e61e580 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js new file mode 100644 index 000000000..02f283aba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js new file mode 100644 index 000000000..d4922a1df --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js new file mode 100644 index 000000000..3b1928573 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js new file mode 100644 index 000000000..68afd6d25 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js new file mode 100644 index 000000000..070b61a26 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js new file mode 100644 index 000000000..90d5e73f8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js new file mode 100644 index 000000000..e1ffdbed0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js new file mode 100644 index 000000000..ffed1247d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js new file mode 100644 index 000000000..dd02f973f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js new file mode 100644 index 000000000..208a00570 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js new file mode 100644 index 000000000..25a8805aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js new file mode 100644 index 000000000..f3ed79843 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js new file mode 100644 index 000000000..cb3268db1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js new file mode 100644 index 000000000..3d5bf09db --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js new file mode 100644 index 000000000..4893aa2f7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js new file mode 100644 index 000000000..823000714 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js new file mode 100644 index 000000000..4a0b3bf00 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js new file mode 100644 index 000000000..cca5bbecf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+=" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js new file mode 100644 index 000000000..507c7d9f2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Per favore cancella "+n+" caratter";return t+=1!==n?"i":"e"},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js new file mode 100644 index 000000000..451025e2c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js new file mode 100644 index 000000000..60c593b70 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js new file mode 100644 index 000000000..4dca94f41 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js new file mode 100644 index 000000000..f2880fb00 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js new file mode 100644 index 000000000..f6a42155a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t="Pašalinkite "+i+" simbol";return t+=n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length,t="Įrašykite dar "+i+" simbol";return t+=n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){var i="Jūs galite pasirinkti tik "+e.maximum+" element";return i+=n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js new file mode 100644 index 000000000..806dc5c43 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length,i="Lūdzu ievadiet vēl "+u;return i+=" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){var u="Jūs varat izvēlēties ne vairāk kā "+n.maximum;return u+=" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js new file mode 100644 index 000000000..cb7b84a26 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js new file mode 100644 index 000000000..6bd7eaa3e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js new file mode 100644 index 000000000..25d89c687 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js new file mode 100644 index 000000000..1c39f6721 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ne",[],function(){return{errorLoading:function(){return"नतिजाहरु देखाउन सकिएन।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="कृपया "+e+" अक्षर मेटाउनुहोस्।";return 1!=e&&(u+="कृपया "+e+" अक्षरहरु मेटाउनुहोस्।"),u},inputTooShort:function(n){return"कृपया बाँकी रहेका "+(n.minimum-n.input.length)+" वा अरु धेरै अक्षरहरु भर्नुहोस्।"},loadingMore:function(){return"अरु नतिजाहरु भरिँदैछन् …"},maximumSelected:function(n){var e="तँपाई "+n.maximum+" वस्तु मात्र छान्न पाउँनुहुन्छ।";return 1!=n.maximum&&(e="तँपाई "+n.maximum+" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।"),e},noResults:function(){return"कुनै पनि नतिजा भेटिएन।"},searching:function(){return"खोजि हुँदैछ…"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js new file mode 100644 index 000000000..2b74058d2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n=1==e.maximum?"kan":"kunnen",r="Er "+n+" maar "+e.maximum+" item";return 1!=e.maximum&&(r+="s"),r+=" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js new file mode 100644 index 000000000..4ca5748c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js new file mode 100644 index 000000000..9b008e4c1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js new file mode 100644 index 000000000..c991e2550 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js new file mode 100644 index 000000000..b5da1a6b4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum,n="Por favor apague "+r+" ";return n+=1!=r?"caracteres":"caractere"},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var r="Apenas pode seleccionar "+e.maximum+" ";return r+=1!=e.maximum?"itens":"item"},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js new file mode 100644 index 000000000..1ba7b40be --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js new file mode 100644 index 000000000..63a7d66c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ru",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Пожалуйста, введите на "+r+" символ";return u+=n(r,"","a","ов"),u+=" меньше"},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Пожалуйста, введите ещё хотя бы "+r+" символ";return u+=n(r,"","a","ов")},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(e){var r="Вы можете выбрать не более "+e.maximum+" элемент";return r+=n(e.maximum,"","a","ов")},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"},removeAllItems:function(){return"Удалить все элементы"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js new file mode 100644 index 000000000..5049528ad --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadajte o jeden znak menej":t>=2&&t<=4?"Prosím, zadajte o "+e[t](!0)+" znaky menej":"Prosím, zadajte o "+t+" znakov menej"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadajte ešte jeden znak":t<=4?"Prosím, zadajte ešte ďalšie "+e[t](!0)+" znaky":"Prosím, zadajte ešte ďalších "+t+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(n){return 1==n.maximum?"Môžete zvoliť len jednu položku":n.maximum>=2&&n.maximum<=4?"Môžete zvoliť najviac "+e[n.maximum](!1)+" položky":"Môžete zvoliť najviac "+n.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"},removeAllItems:function(){return"Odstráňte všetky položky"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js new file mode 100644 index 000000000..4d0b7d3e3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js new file mode 100644 index 000000000..59162024e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js new file mode 100644 index 000000000..ce13ce8f9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr-Cyrl",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Обришите "+r+" симбол";return u+=n(r,"","а","а")},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Укуцајте бар још "+r+" симбол";return u+=n(r,"","а","а")},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(e){var r="Можете изабрати само "+e.maximum+" ставк";return r+=n(e.maximum,"у","е","и")},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js new file mode 100644 index 000000000..dd407a06d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(e){var r=e.input.length-e.maximum,t="Obrišite "+r+" simbol";return t+=n(r,"","a","a")},inputTooShort:function(e){var r=e.minimum-e.input.length,t="Ukucajte bar još "+r+" simbol";return t+=n(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(e){var r="Možete izabrati samo "+e.maximum+" stavk";return r+=n(e.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js new file mode 100644 index 000000000..1bc8724a7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js new file mode 100644 index 000000000..63eab7114 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js new file mode 100644 index 000000000..30255ff37 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js new file mode 100644 index 000000000..fc4c0bf05 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js new file mode 100644 index 000000000..63697e388 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/uk",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(e){return"Будь ласка, видаліть "+(e.input.length-e.maximum)+" "+n(e.maximum,"літеру","літери","літер")},inputTooShort:function(n){return"Будь ласка, введіть "+(n.minimum-n.input.length)+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(e){return"Ви можете вибрати лише "+e.maximum+" "+n(e.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"},removeAllItems:function(){return"Видалити всі елементи"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js new file mode 100644 index 000000000..24f3bc2d6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js new file mode 100644 index 000000000..2c5649d31 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js new file mode 100644 index 000000000..570a56693 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),n.define,n.require}(); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js new file mode 100644 index 000000000..358572a65 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js @@ -0,0 +1,6820 @@ +/*! + * Select2 4.0.13 + * https://select2.github.io + * + * Released under the MIT license + * https://github.com/select2/select2/blob/master/LICENSE.md + */ +;(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = function (root, jQuery) { + if (jQuery === undefined) { + // require('jQuery') returns a factory that requires window to + // build a jQuery instance, we normalize how we use modules + // that require this pattern but the window provided is a noop + // if it's defined (how jquery works) + if (typeof window !== 'undefined') { + jQuery = require('jquery'); + } + else { + jQuery = require('jquery')(root); + } + } + factory(jQuery); + return jQuery; + }; + } else { + // Browser globals + factory(jQuery); + } +} (function (jQuery) { + // This is needed so we can catch the AMD loader configuration and use it + // The inner file should be wrapped (by `banner.start.js`) in a function that + // returns the AMD loader references. + var S2 =(function () { + // Restore the Select2 AMD loader so it can be used + // Needed mostly in the language files, where the loader is not inserted + if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { + var S2 = jQuery.fn.select2.amd; + } +var S2;(function () { if (!S2 || !S2.requirejs) { +if (!S2) { S2 = {}; } else { require = S2; } +/** + * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. + * Released under MIT license, http://github.com/requirejs/almond/LICENSE + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var main, req, makeMap, handlers, + defined = {}, + waiting = {}, + config = {}, + defining = {}, + hasOwn = Object.prototype.hasOwnProperty, + aps = [].slice, + jsSuffixRegExp = /\.js$/; + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var nameParts, nameSegment, mapValue, foundMap, lastIndex, + foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, + baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}; + + //Adjust any relative paths. + if (name) { + name = name.split('/'); + lastIndex = name.length - 1; + + // If wanting node ID compatibility, strip .js from end + // of IDs. Have to do this here, and not in nameToUrl + // because node allows either .js or non .js to map + // to same file. + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + // Starts with a '.' so need the baseName + if (name[0].charAt(0) === '.' && baseParts) { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + name = normalizedBaseParts.concat(name); + } + + //start trimDots + for (i = 0; i < name.length; i++) { + part = name[i]; + if (part === '.') { + name.splice(i, 1); + i -= 1; + } else if (part === '..') { + // If at the start, or previous value is still .., + // keep them so that when converted to a path it may + // still work when converted to a path, even though + // as an ID it is less than ideal. In larger point + // releases, may be better to just kick out an error. + if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { + continue; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join('/'); + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + var args = aps.call(arguments, 0); + + //If first arg is not require('string'), and there is only + //one arg, it is the array form without a callback. Insert + //a null so that the following concat is correct. + if (typeof args[0] !== 'string' && args.length === 1) { + args.push(null); + } + return req.apply(undef, args.concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (hasProp(waiting, name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!hasProp(defined, name) && !hasProp(defining, name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + //Creates a parts array for a relName where first part is plugin ID, + //second part is resource ID. Assumes relName has already been normalized. + function makeRelParts(relName) { + return relName ? splitPrefix(relName) : []; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + makeMap = function (name, relParts) { + var plugin, + parts = splitPrefix(name), + prefix = parts[0], + relResourceName = relParts[1]; + + name = parts[1]; + + if (prefix) { + prefix = normalize(prefix, relResourceName); + plugin = callDep(prefix); + } + + //Normalize according + if (prefix) { + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relResourceName)); + } else { + name = normalize(name, relResourceName); + } + } else { + name = normalize(name, relResourceName); + parts = splitPrefix(name); + prefix = parts[0]; + name = parts[1]; + if (prefix) { + plugin = callDep(prefix); + } + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + pr: prefix, + p: plugin + }; + }; + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + handlers = { + require: function (name) { + return makeRequire(name); + }, + exports: function (name) { + var e = defined[name]; + if (typeof e !== 'undefined') { + return e; + } else { + return (defined[name] = {}); + } + }, + module: function (name) { + return { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } + }; + + main = function (name, deps, callback, relName) { + var cjsModule, depName, ret, map, i, relParts, + args = [], + callbackType = typeof callback, + usingExports; + + //Use name if no relName + relName = relName || name; + relParts = makeRelParts(relName); + + //Call the callback to define the module, if necessary. + if (callbackType === 'undefined' || callbackType === 'function') { + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i += 1) { + map = makeMap(deps[i], relParts); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = handlers.require(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = handlers.exports(name); + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = handlers.module(name); + } else if (hasProp(defined, depName) || + hasProp(waiting, depName) || + hasProp(defining, depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback ? callback.apply(defined[name], args) : undefined; + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync, alt) { + if (typeof deps === "string") { + if (handlers[deps]) { + //callback in this case is really relName + return handlers[deps](callback); + } + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, makeRelParts(callback)).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (config.deps) { + req(config.deps, config.callback); + } + if (!callback) { + return; + } + + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //If relName is a function, it is an errback handler, + //so remove it. + if (typeof relName === 'function') { + relName = forceSync; + forceSync = alt; + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + //Using a non-zero value because of concern for what old browsers + //do, and latest browsers "upgrade" to 4 if lower value is used: + //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: + //If want a value immediately, use require('id') instead -- something + //that works in almond on the global level, but not guaranteed and + //unlikely to work in other AMD implementations. + setTimeout(function () { + main(undef, deps, callback, relName); + }, 4); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + return req(cfg); + }; + + /** + * Expose module registry for debugging and tooling + */ + requirejs._defined = defined; + + define = function (name, deps, callback) { + if (typeof name !== 'string') { + throw new Error('See almond README: incorrect module build, no module name'); + } + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (!hasProp(defined, name) && !hasProp(waiting, name)) { + waiting[name] = [name, deps, callback]; + } + }; + + define.amd = { + jQuery: true + }; +}()); + +S2.requirejs = requirejs;S2.require = require;S2.define = define; +} +}()); +S2.define("almond", function(){}); + +/* global jQuery:false, $:false */ +S2.define('jquery',[],function () { + var _$ = jQuery || $; + + if (_$ == null && console && console.error) { + console.error( + 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + + 'found. Make sure that you are including jQuery before Select2 on your ' + + 'web page.' + ); + } + + return _$; +}); + +S2.define('select2/utils',[ + 'jquery' +], function ($) { + var Utils = {}; + + Utils.Extend = function (ChildClass, SuperClass) { + var __hasProp = {}.hasOwnProperty; + + function BaseConstructor () { + this.constructor = ChildClass; + } + + for (var key in SuperClass) { + if (__hasProp.call(SuperClass, key)) { + ChildClass[key] = SuperClass[key]; + } + } + + BaseConstructor.prototype = SuperClass.prototype; + ChildClass.prototype = new BaseConstructor(); + ChildClass.__super__ = SuperClass.prototype; + + return ChildClass; + }; + + function getMethods (theClass) { + var proto = theClass.prototype; + + var methods = []; + + for (var methodName in proto) { + var m = proto[methodName]; + + if (typeof m !== 'function') { + continue; + } + + if (methodName === 'constructor') { + continue; + } + + methods.push(methodName); + } + + return methods; + } + + Utils.Decorate = function (SuperClass, DecoratorClass) { + var decoratedMethods = getMethods(DecoratorClass); + var superMethods = getMethods(SuperClass); + + function DecoratedClass () { + var unshift = Array.prototype.unshift; + + var argCount = DecoratorClass.prototype.constructor.length; + + var calledConstructor = SuperClass.prototype.constructor; + + if (argCount > 0) { + unshift.call(arguments, SuperClass.prototype.constructor); + + calledConstructor = DecoratorClass.prototype.constructor; + } + + calledConstructor.apply(this, arguments); + } + + DecoratorClass.displayName = SuperClass.displayName; + + function ctr () { + this.constructor = DecoratedClass; + } + + DecoratedClass.prototype = new ctr(); + + for (var m = 0; m < superMethods.length; m++) { + var superMethod = superMethods[m]; + + DecoratedClass.prototype[superMethod] = + SuperClass.prototype[superMethod]; + } + + var calledMethod = function (methodName) { + // Stub out the original method if it's not decorating an actual method + var originalMethod = function () {}; + + if (methodName in DecoratedClass.prototype) { + originalMethod = DecoratedClass.prototype[methodName]; + } + + var decoratedMethod = DecoratorClass.prototype[methodName]; + + return function () { + var unshift = Array.prototype.unshift; + + unshift.call(arguments, originalMethod); + + return decoratedMethod.apply(this, arguments); + }; + }; + + for (var d = 0; d < decoratedMethods.length; d++) { + var decoratedMethod = decoratedMethods[d]; + + DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); + } + + return DecoratedClass; + }; + + var Observable = function () { + this.listeners = {}; + }; + + Observable.prototype.on = function (event, callback) { + this.listeners = this.listeners || {}; + + if (event in this.listeners) { + this.listeners[event].push(callback); + } else { + this.listeners[event] = [callback]; + } + }; + + Observable.prototype.trigger = function (event) { + var slice = Array.prototype.slice; + var params = slice.call(arguments, 1); + + this.listeners = this.listeners || {}; + + // Params should always come in as an array + if (params == null) { + params = []; + } + + // If there are no arguments to the event, use a temporary object + if (params.length === 0) { + params.push({}); + } + + // Set the `_type` of the first object to the event + params[0]._type = event; + + if (event in this.listeners) { + this.invoke(this.listeners[event], slice.call(arguments, 1)); + } + + if ('*' in this.listeners) { + this.invoke(this.listeners['*'], arguments); + } + }; + + Observable.prototype.invoke = function (listeners, params) { + for (var i = 0, len = listeners.length; i < len; i++) { + listeners[i].apply(this, params); + } + }; + + Utils.Observable = Observable; + + Utils.generateChars = function (length) { + var chars = ''; + + for (var i = 0; i < length; i++) { + var randomChar = Math.floor(Math.random() * 36); + chars += randomChar.toString(36); + } + + return chars; + }; + + Utils.bind = function (func, context) { + return function () { + func.apply(context, arguments); + }; + }; + + Utils._convertData = function (data) { + for (var originalKey in data) { + var keys = originalKey.split('-'); + + var dataLevel = data; + + if (keys.length === 1) { + continue; + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k]; + + // Lowercase the first letter + // By default, dash-separated becomes camelCase + key = key.substring(0, 1).toLowerCase() + key.substring(1); + + if (!(key in dataLevel)) { + dataLevel[key] = {}; + } + + if (k == keys.length - 1) { + dataLevel[key] = data[originalKey]; + } + + dataLevel = dataLevel[key]; + } + + delete data[originalKey]; + } + + return data; + }; + + Utils.hasScroll = function (index, el) { + // Adapted from the function created by @ShadowScripter + // and adapted by @BillBarry on the Stack Exchange Code Review website. + // The original code can be found at + // http://codereview.stackexchange.com/q/13338 + // and was designed to be used with the Sizzle selector engine. + + var $el = $(el); + var overflowX = el.style.overflowX; + var overflowY = el.style.overflowY; + + //Check both x and y declarations + if (overflowX === overflowY && + (overflowY === 'hidden' || overflowY === 'visible')) { + return false; + } + + if (overflowX === 'scroll' || overflowY === 'scroll') { + return true; + } + + return ($el.innerHeight() < el.scrollHeight || + $el.innerWidth() < el.scrollWidth); + }; + + Utils.escapeMarkup = function (markup) { + var replaceMap = { + '\\': '\', + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''', + '/': '/' + }; + + // Do not try to escape the markup if it's not a string + if (typeof markup !== 'string') { + return markup; + } + + return String(markup).replace(/[&<>"'\/\\]/g, function (match) { + return replaceMap[match]; + }); + }; + + // Append an array of jQuery nodes to a given element. + Utils.appendMany = function ($element, $nodes) { + // jQuery 1.7.x does not support $.fn.append() with an array + // Fall back to a jQuery object collection using $.fn.add() + if ($.fn.jquery.substr(0, 3) === '1.7') { + var $jqNodes = $(); + + $.map($nodes, function (node) { + $jqNodes = $jqNodes.add(node); + }); + + $nodes = $jqNodes; + } + + $element.append($nodes); + }; + + // Cache objects in Utils.__cache instead of $.data (see #4346) + Utils.__cache = {}; + + var id = 0; + Utils.GetUniqueElementId = function (element) { + // Get a unique element Id. If element has no id, + // creates a new unique number, stores it in the id + // attribute and returns the new id. + // If an id already exists, it simply returns it. + + var select2Id = element.getAttribute('data-select2-id'); + if (select2Id == null) { + // If element has id, use it. + if (element.id) { + select2Id = element.id; + element.setAttribute('data-select2-id', select2Id); + } else { + element.setAttribute('data-select2-id', ++id); + select2Id = id.toString(); + } + } + return select2Id; + }; + + Utils.StoreData = function (element, name, value) { + // Stores an item in the cache for a specified element. + // name is the cache key. + var id = Utils.GetUniqueElementId(element); + if (!Utils.__cache[id]) { + Utils.__cache[id] = {}; + } + + Utils.__cache[id][name] = value; + }; + + Utils.GetData = function (element, name) { + // Retrieves a value from the cache by its key (name) + // name is optional. If no name specified, return + // all cache items for the specified element. + // and for a specified element. + var id = Utils.GetUniqueElementId(element); + if (name) { + if (Utils.__cache[id]) { + if (Utils.__cache[id][name] != null) { + return Utils.__cache[id][name]; + } + return $(element).data(name); // Fallback to HTML5 data attribs. + } + return $(element).data(name); // Fallback to HTML5 data attribs. + } else { + return Utils.__cache[id]; + } + }; + + Utils.RemoveData = function (element) { + // Removes all cached items for a specified element. + var id = Utils.GetUniqueElementId(element); + if (Utils.__cache[id] != null) { + delete Utils.__cache[id]; + } + + element.removeAttribute('data-select2-id'); + }; + + return Utils; +}); + +S2.define('select2/results',[ + 'jquery', + './utils' +], function ($, Utils) { + function Results ($element, options, dataAdapter) { + this.$element = $element; + this.data = dataAdapter; + this.options = options; + + Results.__super__.constructor.call(this); + } + + Utils.Extend(Results, Utils.Observable); + + Results.prototype.render = function () { + var $results = $( + '<ul class="select2-results__options" role="listbox"></ul>' + ); + + if (this.options.get('multiple')) { + $results.attr('aria-multiselectable', 'true'); + } + + this.$results = $results; + + return $results; + }; + + Results.prototype.clear = function () { + this.$results.empty(); + }; + + Results.prototype.displayMessage = function (params) { + var escapeMarkup = this.options.get('escapeMarkup'); + + this.clear(); + this.hideLoading(); + + var $message = $( + '<li role="alert" aria-live="assertive"' + + ' class="select2-results__option"></li>' + ); + + var message = this.options.get('translations').get(params.message); + + $message.append( + escapeMarkup( + message(params.args) + ) + ); + + $message[0].className += ' select2-results__message'; + + this.$results.append($message); + }; + + Results.prototype.hideMessages = function () { + this.$results.find('.select2-results__message').remove(); + }; + + Results.prototype.append = function (data) { + this.hideLoading(); + + var $options = []; + + if (data.results == null || data.results.length === 0) { + if (this.$results.children().length === 0) { + this.trigger('results:message', { + message: 'noResults' + }); + } + + return; + } + + data.results = this.sort(data.results); + + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; + + var $option = this.option(item); + + $options.push($option); + } + + this.$results.append($options); + }; + + Results.prototype.position = function ($results, $dropdown) { + var $resultsContainer = $dropdown.find('.select2-results'); + $resultsContainer.append($results); + }; + + Results.prototype.sort = function (data) { + var sorter = this.options.get('sorter'); + + return sorter(data); + }; + + Results.prototype.highlightFirstItem = function () { + var $options = this.$results + .find('.select2-results__option[aria-selected]'); + + var $selected = $options.filter('[aria-selected=true]'); + + // Check if there are any selected options + if ($selected.length > 0) { + // If there are selected options, highlight the first + $selected.first().trigger('mouseenter'); + } else { + // If there are no selected options, highlight the first option + // in the dropdown + $options.first().trigger('mouseenter'); + } + + this.ensureHighlightVisible(); + }; + + Results.prototype.setClasses = function () { + var self = this; + + this.data.current(function (selected) { + var selectedIds = $.map(selected, function (s) { + return s.id.toString(); + }); + + var $options = self.$results + .find('.select2-results__option[aria-selected]'); + + $options.each(function () { + var $option = $(this); + + var item = Utils.GetData(this, 'data'); + + // id needs to be converted to a string when comparing + var id = '' + item.id; + + if ((item.element != null && item.element.selected) || + (item.element == null && $.inArray(id, selectedIds) > -1)) { + $option.attr('aria-selected', 'true'); + } else { + $option.attr('aria-selected', 'false'); + } + }); + + }); + }; + + Results.prototype.showLoading = function (params) { + this.hideLoading(); + + var loadingMore = this.options.get('translations').get('searching'); + + var loading = { + disabled: true, + loading: true, + text: loadingMore(params) + }; + var $loading = this.option(loading); + $loading.className += ' loading-results'; + + this.$results.prepend($loading); + }; + + Results.prototype.hideLoading = function () { + this.$results.find('.loading-results').remove(); + }; + + Results.prototype.option = function (data) { + var option = document.createElement('li'); + option.className = 'select2-results__option'; + + var attrs = { + 'role': 'option', + 'aria-selected': 'false' + }; + + var matches = window.Element.prototype.matches || + window.Element.prototype.msMatchesSelector || + window.Element.prototype.webkitMatchesSelector; + + if ((data.element != null && matches.call(data.element, ':disabled')) || + (data.element == null && data.disabled)) { + delete attrs['aria-selected']; + attrs['aria-disabled'] = 'true'; + } + + if (data.id == null) { + delete attrs['aria-selected']; + } + + if (data._resultId != null) { + option.id = data._resultId; + } + + if (data.title) { + option.title = data.title; + } + + if (data.children) { + attrs.role = 'group'; + attrs['aria-label'] = data.text; + delete attrs['aria-selected']; + } + + for (var attr in attrs) { + var val = attrs[attr]; + + option.setAttribute(attr, val); + } + + if (data.children) { + var $option = $(option); + + var label = document.createElement('strong'); + label.className = 'select2-results__group'; + + var $label = $(label); + this.template(data, label); + + var $children = []; + + for (var c = 0; c < data.children.length; c++) { + var child = data.children[c]; + + var $child = this.option(child); + + $children.push($child); + } + + var $childrenContainer = $('<ul></ul>', { + 'class': 'select2-results__options select2-results__options--nested' + }); + + $childrenContainer.append($children); + + $option.append(label); + $option.append($childrenContainer); + } else { + this.template(data, option); + } + + Utils.StoreData(option, 'data', data); + + return option; + }; + + Results.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-results'; + + this.$results.attr('id', id); + + container.on('results:all', function (params) { + self.clear(); + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + self.highlightFirstItem(); + } + }); + + container.on('results:append', function (params) { + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + } + }); + + container.on('query', function (params) { + self.hideMessages(); + self.showLoading(params); + }); + + container.on('select', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + + if (self.options.get('scrollAfterSelect')) { + self.highlightFirstItem(); + } + }); + + container.on('unselect', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + + if (self.options.get('scrollAfterSelect')) { + self.highlightFirstItem(); + } + }); + + container.on('open', function () { + // When the dropdown is open, aria-expended="true" + self.$results.attr('aria-expanded', 'true'); + self.$results.attr('aria-hidden', 'false'); + + self.setClasses(); + self.ensureHighlightVisible(); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expended="false" + self.$results.attr('aria-expanded', 'false'); + self.$results.attr('aria-hidden', 'true'); + self.$results.removeAttr('aria-activedescendant'); + }); + + container.on('results:toggle', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + $highlighted.trigger('mouseup'); + }); + + container.on('results:select', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var data = Utils.GetData($highlighted[0], 'data'); + + if ($highlighted.attr('aria-selected') == 'true') { + self.trigger('close', {}); + } else { + self.trigger('select', { + data: data + }); + } + }); + + container.on('results:previous', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + // If we are already at the top, don't move further + // If no options, currentIndex will be -1 + if (currentIndex <= 0) { + return; + } + + var nextIndex = currentIndex - 1; + + // If none are highlighted, highlight the first + if ($highlighted.length === 0) { + nextIndex = 0; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top; + var nextTop = $next.offset().top; + var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextTop - currentOffset < 0) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:next', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var nextIndex = currentIndex + 1; + + // If we are at the last option, stay there + if (nextIndex >= $options.length) { + return; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var nextBottom = $next.offset().top + $next.outerHeight(false); + var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextBottom > currentOffset) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:focus', function (params) { + params.element.addClass('select2-results__option--highlighted'); + }); + + container.on('results:message', function (params) { + self.displayMessage(params); + }); + + if ($.fn.mousewheel) { + this.$results.on('mousewheel', function (e) { + var top = self.$results.scrollTop(); + + var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; + + var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; + var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); + + if (isAtTop) { + self.$results.scrollTop(0); + + e.preventDefault(); + e.stopPropagation(); + } else if (isAtBottom) { + self.$results.scrollTop( + self.$results.get(0).scrollHeight - self.$results.height() + ); + + e.preventDefault(); + e.stopPropagation(); + } + }); + } + + this.$results.on('mouseup', '.select2-results__option[aria-selected]', + function (evt) { + var $this = $(this); + + var data = Utils.GetData(this, 'data'); + + if ($this.attr('aria-selected') === 'true') { + if (self.options.get('multiple')) { + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } else { + self.trigger('close', {}); + } + + return; + } + + self.trigger('select', { + originalEvent: evt, + data: data + }); + }); + + this.$results.on('mouseenter', '.select2-results__option[aria-selected]', + function (evt) { + var data = Utils.GetData(this, 'data'); + + self.getHighlightedResults() + .removeClass('select2-results__option--highlighted'); + + self.trigger('results:focus', { + data: data, + element: $(this) + }); + }); + }; + + Results.prototype.getHighlightedResults = function () { + var $highlighted = this.$results + .find('.select2-results__option--highlighted'); + + return $highlighted; + }; + + Results.prototype.destroy = function () { + this.$results.remove(); + }; + + Results.prototype.ensureHighlightVisible = function () { + var $highlighted = this.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var $options = this.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var currentOffset = this.$results.offset().top; + var nextTop = $highlighted.offset().top; + var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); + + var offsetDelta = nextTop - currentOffset; + nextOffset -= $highlighted.outerHeight(false) * 2; + + if (currentIndex <= 2) { + this.$results.scrollTop(0); + } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { + this.$results.scrollTop(nextOffset); + } + }; + + Results.prototype.template = function (result, container) { + var template = this.options.get('templateResult'); + var escapeMarkup = this.options.get('escapeMarkup'); + + var content = template(result, container); + + if (content == null) { + container.style.display = 'none'; + } else if (typeof content === 'string') { + container.innerHTML = escapeMarkup(content); + } else { + $(container).append(content); + } + }; + + return Results; +}); + +S2.define('select2/keys',[ + +], function () { + var KEYS = { + BACKSPACE: 8, + TAB: 9, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + ESC: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + DELETE: 46 + }; + + return KEYS; +}); + +S2.define('select2/selection/base',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function BaseSelection ($element, options) { + this.$element = $element; + this.options = options; + + BaseSelection.__super__.constructor.call(this); + } + + Utils.Extend(BaseSelection, Utils.Observable); + + BaseSelection.prototype.render = function () { + var $selection = $( + '<span class="select2-selection" role="combobox" ' + + ' aria-haspopup="true" aria-expanded="false">' + + '</span>' + ); + + this._tabindex = 0; + + if (Utils.GetData(this.$element[0], 'old-tabindex') != null) { + this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex'); + } else if (this.$element.attr('tabindex') != null) { + this._tabindex = this.$element.attr('tabindex'); + } + + $selection.attr('title', this.$element.attr('title')); + $selection.attr('tabindex', this._tabindex); + $selection.attr('aria-disabled', 'false'); + + this.$selection = $selection; + + return $selection; + }; + + BaseSelection.prototype.bind = function (container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + this.container = container; + + this.$selection.on('focus', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('blur', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', function (evt) { + self.trigger('keypress', evt); + + if (evt.which === KEYS.SPACE) { + evt.preventDefault(); + } + }); + + container.on('results:focus', function (params) { + self.$selection.attr('aria-activedescendant', params.data._resultId); + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expanded="true" + self.$selection.attr('aria-expanded', 'true'); + self.$selection.attr('aria-owns', resultsId); + + self._attachCloseHandler(container); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expanded="false" + self.$selection.attr('aria-expanded', 'false'); + self.$selection.removeAttr('aria-activedescendant'); + self.$selection.removeAttr('aria-owns'); + + self.$selection.trigger('focus'); + + self._detachCloseHandler(container); + }); + + container.on('enable', function () { + self.$selection.attr('tabindex', self._tabindex); + self.$selection.attr('aria-disabled', 'false'); + }); + + container.on('disable', function () { + self.$selection.attr('tabindex', '-1'); + self.$selection.attr('aria-disabled', 'true'); + }); + }; + + BaseSelection.prototype._handleBlur = function (evt) { + var self = this; + + // This needs to be delayed as the active element is the body when the tab + // key is pressed, possibly along with others. + window.setTimeout(function () { + // Don't trigger `blur` if the focus is still in the selection + if ( + (document.activeElement == self.$selection[0]) || + ($.contains(self.$selection[0], document.activeElement)) + ) { + return; + } + + self.trigger('blur', evt); + }, 1); + }; + + BaseSelection.prototype._attachCloseHandler = function (container) { + + $(document.body).on('mousedown.select2.' + container.id, function (e) { + var $target = $(e.target); + + var $select = $target.closest('.select2'); + + var $all = $('.select2.select2-container--open'); + + $all.each(function () { + if (this == $select[0]) { + return; + } + + var $element = Utils.GetData(this, 'element'); + + $element.select2('close'); + }); + }); + }; + + BaseSelection.prototype._detachCloseHandler = function (container) { + $(document.body).off('mousedown.select2.' + container.id); + }; + + BaseSelection.prototype.position = function ($selection, $container) { + var $selectionContainer = $container.find('.selection'); + $selectionContainer.append($selection); + }; + + BaseSelection.prototype.destroy = function () { + this._detachCloseHandler(this.container); + }; + + BaseSelection.prototype.update = function (data) { + throw new Error('The `update` method must be defined in child classes.'); + }; + + /** + * Helper method to abstract the "enabled" (not "disabled") state of this + * object. + * + * @return {true} if the instance is not disabled. + * @return {false} if the instance is disabled. + */ + BaseSelection.prototype.isEnabled = function () { + return !this.isDisabled(); + }; + + /** + * Helper method to abstract the "disabled" state of this object. + * + * @return {true} if the disabled option is true. + * @return {false} if the disabled option is false. + */ + BaseSelection.prototype.isDisabled = function () { + return this.options.get('disabled'); + }; + + return BaseSelection; +}); + +S2.define('select2/selection/single',[ + 'jquery', + './base', + '../utils', + '../keys' +], function ($, BaseSelection, Utils, KEYS) { + function SingleSelection () { + SingleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(SingleSelection, BaseSelection); + + SingleSelection.prototype.render = function () { + var $selection = SingleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--single'); + + $selection.html( + '<span class="select2-selection__rendered"></span>' + + '<span class="select2-selection__arrow" role="presentation">' + + '<b role="presentation"></b>' + + '</span>' + ); + + return $selection; + }; + + SingleSelection.prototype.bind = function (container, $container) { + var self = this; + + SingleSelection.__super__.bind.apply(this, arguments); + + var id = container.id + '-container'; + + this.$selection.find('.select2-selection__rendered') + .attr('id', id) + .attr('role', 'textbox') + .attr('aria-readonly', 'true'); + this.$selection.attr('aria-labelledby', id); + + this.$selection.on('mousedown', function (evt) { + // Only respond to left clicks + if (evt.which !== 1) { + return; + } + + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on('focus', function (evt) { + // User focuses on the container + }); + + this.$selection.on('blur', function (evt) { + // User exits the container + }); + + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.trigger('focus'); + } + }); + }; + + SingleSelection.prototype.clear = function () { + var $rendered = this.$selection.find('.select2-selection__rendered'); + $rendered.empty(); + $rendered.removeAttr('title'); // clear tooltip on empty + }; + + SingleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + SingleSelection.prototype.selectionContainer = function () { + return $('<span></span>'); + }; + + SingleSelection.prototype.update = function (data) { + if (data.length === 0) { + this.clear(); + return; + } + + var selection = data[0]; + + var $rendered = this.$selection.find('.select2-selection__rendered'); + var formatted = this.display(selection, $rendered); + + $rendered.empty().append(formatted); + + var title = selection.title || selection.text; + + if (title) { + $rendered.attr('title', title); + } else { + $rendered.removeAttr('title'); + } + }; + + return SingleSelection; +}); + +S2.define('select2/selection/multiple',[ + 'jquery', + './base', + '../utils' +], function ($, BaseSelection, Utils) { + function MultipleSelection ($element, options) { + MultipleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(MultipleSelection, BaseSelection); + + MultipleSelection.prototype.render = function () { + var $selection = MultipleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--multiple'); + + $selection.html( + '<ul class="select2-selection__rendered"></ul>' + ); + + return $selection; + }; + + MultipleSelection.prototype.bind = function (container, $container) { + var self = this; + + MultipleSelection.__super__.bind.apply(this, arguments); + + this.$selection.on('click', function (evt) { + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on( + 'click', + '.select2-selection__choice__remove', + function (evt) { + // Ignore the event if it is disabled + if (self.isDisabled()) { + return; + } + + var $remove = $(this); + var $selection = $remove.parent(); + + var data = Utils.GetData($selection[0], 'data'); + + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } + ); + }; + + MultipleSelection.prototype.clear = function () { + var $rendered = this.$selection.find('.select2-selection__rendered'); + $rendered.empty(); + $rendered.removeAttr('title'); + }; + + MultipleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + MultipleSelection.prototype.selectionContainer = function () { + var $container = $( + '<li class="select2-selection__choice">' + + '<span class="select2-selection__choice__remove" role="presentation">' + + '×' + + '</span>' + + '</li>' + ); + + return $container; + }; + + MultipleSelection.prototype.update = function (data) { + this.clear(); + + if (data.length === 0) { + return; + } + + var $selections = []; + + for (var d = 0; d < data.length; d++) { + var selection = data[d]; + + var $selection = this.selectionContainer(); + var formatted = this.display(selection, $selection); + + $selection.append(formatted); + + var title = selection.title || selection.text; + + if (title) { + $selection.attr('title', title); + } + + Utils.StoreData($selection[0], 'data', selection); + + $selections.push($selection); + } + + var $rendered = this.$selection.find('.select2-selection__rendered'); + + Utils.appendMany($rendered, $selections); + }; + + return MultipleSelection; +}); + +S2.define('select2/selection/placeholder',[ + '../utils' +], function (Utils) { + function Placeholder (decorated, $element, options) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options); + } + + Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { + var $placeholder = this.selectionContainer(); + + $placeholder.html(this.display(placeholder)); + $placeholder.addClass('select2-selection__placeholder') + .removeClass('select2-selection__choice'); + + return $placeholder; + }; + + Placeholder.prototype.update = function (decorated, data) { + var singlePlaceholder = ( + data.length == 1 && data[0].id != this.placeholder.id + ); + var multipleSelections = data.length > 1; + + if (multipleSelections || singlePlaceholder) { + return decorated.call(this, data); + } + + this.clear(); + + var $placeholder = this.createPlaceholder(this.placeholder); + + this.$selection.find('.select2-selection__rendered').append($placeholder); + }; + + return Placeholder; +}); + +S2.define('select2/selection/allowClear',[ + 'jquery', + '../keys', + '../utils' +], function ($, KEYS, Utils) { + function AllowClear () { } + + AllowClear.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + if (this.placeholder == null) { + if (this.options.get('debug') && window.console && console.error) { + console.error( + 'Select2: The `allowClear` option should be used in combination ' + + 'with the `placeholder` option.' + ); + } + } + + this.$selection.on('mousedown', '.select2-selection__clear', + function (evt) { + self._handleClear(evt); + }); + + container.on('keypress', function (evt) { + self._handleKeyboardClear(evt, container); + }); + }; + + AllowClear.prototype._handleClear = function (_, evt) { + // Ignore the event if it is disabled + if (this.isDisabled()) { + return; + } + + var $clear = this.$selection.find('.select2-selection__clear'); + + // Ignore the event if nothing has been selected + if ($clear.length === 0) { + return; + } + + evt.stopPropagation(); + + var data = Utils.GetData($clear[0], 'data'); + + var previousVal = this.$element.val(); + this.$element.val(this.placeholder.id); + + var unselectData = { + data: data + }; + this.trigger('clear', unselectData); + if (unselectData.prevented) { + this.$element.val(previousVal); + return; + } + + for (var d = 0; d < data.length; d++) { + unselectData = { + data: data[d] + }; + + // Trigger the `unselect` event, so people can prevent it from being + // cleared. + this.trigger('unselect', unselectData); + + // If the event was prevented, don't clear it out. + if (unselectData.prevented) { + this.$element.val(previousVal); + return; + } + } + + this.$element.trigger('input').trigger('change'); + + this.trigger('toggle', {}); + }; + + AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { + if (container.isOpen()) { + return; + } + + if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { + this._handleClear(evt); + } + }; + + AllowClear.prototype.update = function (decorated, data) { + decorated.call(this, data); + + if (this.$selection.find('.select2-selection__placeholder').length > 0 || + data.length === 0) { + return; + } + + var removeAll = this.options.get('translations').get('removeAllItems'); + + var $remove = $( + '<span class="select2-selection__clear" title="' + removeAll() +'">' + + '×' + + '</span>' + ); + Utils.StoreData($remove[0], 'data', data); + + this.$selection.find('.select2-selection__rendered').prepend($remove); + }; + + return AllowClear; +}); + +S2.define('select2/selection/search',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function Search (decorated, $element, options) { + decorated.call(this, $element, options); + } + + Search.prototype.render = function (decorated) { + var $search = $( + '<li class="select2-search select2-search--inline">' + + '<input class="select2-search__field" type="search" tabindex="-1"' + + ' autocomplete="off" autocorrect="off" autocapitalize="none"' + + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + + '</li>' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + var $rendered = decorated.call(this); + + this._transferTabIndex(); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + decorated.call(this, container, $container); + + container.on('open', function () { + self.$search.attr('aria-controls', resultsId); + self.$search.trigger('focus'); + }); + + container.on('close', function () { + self.$search.val(''); + self.$search.removeAttr('aria-controls'); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); + }); + + container.on('enable', function () { + self.$search.prop('disabled', false); + + self._transferTabIndex(); + }); + + container.on('disable', function () { + self.$search.prop('disabled', true); + }); + + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + if (params.data._resultId) { + self.$search.attr('aria-activedescendant', params.data._resultId); + } else { + self.$search.removeAttr('aria-activedescendant'); + } + }); + + this.$selection.on('focusin', '.select2-search--inline', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('focusout', '.select2-search--inline', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', '.select2-search--inline', function (evt) { + evt.stopPropagation(); + + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + + var key = evt.which; + + if (key === KEYS.BACKSPACE && self.$search.val() === '') { + var $previousChoice = self.$searchContainer + .prev('.select2-selection__choice'); + + if ($previousChoice.length > 0) { + var item = Utils.GetData($previousChoice[0], 'data'); + + self.searchRemoveChoice(item); + + evt.preventDefault(); + } + } + }); + + this.$selection.on('click', '.select2-search--inline', function (evt) { + if (self.$search.val()) { + evt.stopPropagation(); + } + }); + + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } + + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); + }; + + Search.prototype.createPlaceholder = function (decorated, placeholder) { + this.$search.attr('placeholder', placeholder.text); + }; + + Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + + this.$search.attr('placeholder', ''); + + decorated.call(this, data); + + this.$selection.find('.select2-selection__rendered') + .append(this.$searchContainer); + + this.resizeSearch(); + if (searchHadFocus) { + this.$search.trigger('focus'); + } + }; + + Search.prototype.handleSearch = function () { + this.resizeSearch(); + + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.searchRemoveChoice = function (decorated, item) { + this.trigger('unselect', { + data: item + }); + + this.$search.val(item.text); + this.handleSearch(); + }; + + Search.prototype.resizeSearch = function () { + this.$search.css('width', '25px'); + + var width = ''; + + if (this.$search.attr('placeholder') !== '') { + width = this.$selection.find('.select2-selection__rendered').width(); + } else { + var minimumWidth = this.$search.val().length + 1; + + width = (minimumWidth * 0.75) + 'em'; + } + + this.$search.css('width', width); + }; + + return Search; +}); + +S2.define('select2/selection/eventRelay',[ + 'jquery' +], function ($) { + function EventRelay () { } + + EventRelay.prototype.bind = function (decorated, container, $container) { + var self = this; + var relayEvents = [ + 'open', 'opening', + 'close', 'closing', + 'select', 'selecting', + 'unselect', 'unselecting', + 'clear', 'clearing' + ]; + + var preventableEvents = [ + 'opening', 'closing', 'selecting', 'unselecting', 'clearing' + ]; + + decorated.call(this, container, $container); + + container.on('*', function (name, params) { + // Ignore events that should not be relayed + if ($.inArray(name, relayEvents) === -1) { + return; + } + + // The parameters should always be an object + params = params || {}; + + // Generate the jQuery event for the Select2 event + var evt = $.Event('select2:' + name, { + params: params + }); + + self.$element.trigger(evt); + + // Only handle preventable events if it was one + if ($.inArray(name, preventableEvents) === -1) { + return; + } + + params.prevented = evt.isDefaultPrevented(); + }); + }; + + return EventRelay; +}); + +S2.define('select2/translation',[ + 'jquery', + 'require' +], function ($, require) { + function Translation (dict) { + this.dict = dict || {}; + } + + Translation.prototype.all = function () { + return this.dict; + }; + + Translation.prototype.get = function (key) { + return this.dict[key]; + }; + + Translation.prototype.extend = function (translation) { + this.dict = $.extend({}, translation.all(), this.dict); + }; + + // Static functions + + Translation._cache = {}; + + Translation.loadPath = function (path) { + if (!(path in Translation._cache)) { + var translations = require(path); + + Translation._cache[path] = translations; + } + + return new Translation(Translation._cache[path]); + }; + + return Translation; +}); + +S2.define('select2/diacritics',[ + +], function () { + var diacritics = { + '\u24B6': 'A', + '\uFF21': 'A', + '\u00C0': 'A', + '\u00C1': 'A', + '\u00C2': 'A', + '\u1EA6': 'A', + '\u1EA4': 'A', + '\u1EAA': 'A', + '\u1EA8': 'A', + '\u00C3': 'A', + '\u0100': 'A', + '\u0102': 'A', + '\u1EB0': 'A', + '\u1EAE': 'A', + '\u1EB4': 'A', + '\u1EB2': 'A', + '\u0226': 'A', + '\u01E0': 'A', + '\u00C4': 'A', + '\u01DE': 'A', + '\u1EA2': 'A', + '\u00C5': 'A', + '\u01FA': 'A', + '\u01CD': 'A', + '\u0200': 'A', + '\u0202': 'A', + '\u1EA0': 'A', + '\u1EAC': 'A', + '\u1EB6': 'A', + '\u1E00': 'A', + '\u0104': 'A', + '\u023A': 'A', + '\u2C6F': 'A', + '\uA732': 'AA', + '\u00C6': 'AE', + '\u01FC': 'AE', + '\u01E2': 'AE', + '\uA734': 'AO', + '\uA736': 'AU', + '\uA738': 'AV', + '\uA73A': 'AV', + '\uA73C': 'AY', + '\u24B7': 'B', + '\uFF22': 'B', + '\u1E02': 'B', + '\u1E04': 'B', + '\u1E06': 'B', + '\u0243': 'B', + '\u0182': 'B', + '\u0181': 'B', + '\u24B8': 'C', + '\uFF23': 'C', + '\u0106': 'C', + '\u0108': 'C', + '\u010A': 'C', + '\u010C': 'C', + '\u00C7': 'C', + '\u1E08': 'C', + '\u0187': 'C', + '\u023B': 'C', + '\uA73E': 'C', + '\u24B9': 'D', + '\uFF24': 'D', + '\u1E0A': 'D', + '\u010E': 'D', + '\u1E0C': 'D', + '\u1E10': 'D', + '\u1E12': 'D', + '\u1E0E': 'D', + '\u0110': 'D', + '\u018B': 'D', + '\u018A': 'D', + '\u0189': 'D', + '\uA779': 'D', + '\u01F1': 'DZ', + '\u01C4': 'DZ', + '\u01F2': 'Dz', + '\u01C5': 'Dz', + '\u24BA': 'E', + '\uFF25': 'E', + '\u00C8': 'E', + '\u00C9': 'E', + '\u00CA': 'E', + '\u1EC0': 'E', + '\u1EBE': 'E', + '\u1EC4': 'E', + '\u1EC2': 'E', + '\u1EBC': 'E', + '\u0112': 'E', + '\u1E14': 'E', + '\u1E16': 'E', + '\u0114': 'E', + '\u0116': 'E', + '\u00CB': 'E', + '\u1EBA': 'E', + '\u011A': 'E', + '\u0204': 'E', + '\u0206': 'E', + '\u1EB8': 'E', + '\u1EC6': 'E', + '\u0228': 'E', + '\u1E1C': 'E', + '\u0118': 'E', + '\u1E18': 'E', + '\u1E1A': 'E', + '\u0190': 'E', + '\u018E': 'E', + '\u24BB': 'F', + '\uFF26': 'F', + '\u1E1E': 'F', + '\u0191': 'F', + '\uA77B': 'F', + '\u24BC': 'G', + '\uFF27': 'G', + '\u01F4': 'G', + '\u011C': 'G', + '\u1E20': 'G', + '\u011E': 'G', + '\u0120': 'G', + '\u01E6': 'G', + '\u0122': 'G', + '\u01E4': 'G', + '\u0193': 'G', + '\uA7A0': 'G', + '\uA77D': 'G', + '\uA77E': 'G', + '\u24BD': 'H', + '\uFF28': 'H', + '\u0124': 'H', + '\u1E22': 'H', + '\u1E26': 'H', + '\u021E': 'H', + '\u1E24': 'H', + '\u1E28': 'H', + '\u1E2A': 'H', + '\u0126': 'H', + '\u2C67': 'H', + '\u2C75': 'H', + '\uA78D': 'H', + '\u24BE': 'I', + '\uFF29': 'I', + '\u00CC': 'I', + '\u00CD': 'I', + '\u00CE': 'I', + '\u0128': 'I', + '\u012A': 'I', + '\u012C': 'I', + '\u0130': 'I', + '\u00CF': 'I', + '\u1E2E': 'I', + '\u1EC8': 'I', + '\u01CF': 'I', + '\u0208': 'I', + '\u020A': 'I', + '\u1ECA': 'I', + '\u012E': 'I', + '\u1E2C': 'I', + '\u0197': 'I', + '\u24BF': 'J', + '\uFF2A': 'J', + '\u0134': 'J', + '\u0248': 'J', + '\u24C0': 'K', + '\uFF2B': 'K', + '\u1E30': 'K', + '\u01E8': 'K', + '\u1E32': 'K', + '\u0136': 'K', + '\u1E34': 'K', + '\u0198': 'K', + '\u2C69': 'K', + '\uA740': 'K', + '\uA742': 'K', + '\uA744': 'K', + '\uA7A2': 'K', + '\u24C1': 'L', + '\uFF2C': 'L', + '\u013F': 'L', + '\u0139': 'L', + '\u013D': 'L', + '\u1E36': 'L', + '\u1E38': 'L', + '\u013B': 'L', + '\u1E3C': 'L', + '\u1E3A': 'L', + '\u0141': 'L', + '\u023D': 'L', + '\u2C62': 'L', + '\u2C60': 'L', + '\uA748': 'L', + '\uA746': 'L', + '\uA780': 'L', + '\u01C7': 'LJ', + '\u01C8': 'Lj', + '\u24C2': 'M', + '\uFF2D': 'M', + '\u1E3E': 'M', + '\u1E40': 'M', + '\u1E42': 'M', + '\u2C6E': 'M', + '\u019C': 'M', + '\u24C3': 'N', + '\uFF2E': 'N', + '\u01F8': 'N', + '\u0143': 'N', + '\u00D1': 'N', + '\u1E44': 'N', + '\u0147': 'N', + '\u1E46': 'N', + '\u0145': 'N', + '\u1E4A': 'N', + '\u1E48': 'N', + '\u0220': 'N', + '\u019D': 'N', + '\uA790': 'N', + '\uA7A4': 'N', + '\u01CA': 'NJ', + '\u01CB': 'Nj', + '\u24C4': 'O', + '\uFF2F': 'O', + '\u00D2': 'O', + '\u00D3': 'O', + '\u00D4': 'O', + '\u1ED2': 'O', + '\u1ED0': 'O', + '\u1ED6': 'O', + '\u1ED4': 'O', + '\u00D5': 'O', + '\u1E4C': 'O', + '\u022C': 'O', + '\u1E4E': 'O', + '\u014C': 'O', + '\u1E50': 'O', + '\u1E52': 'O', + '\u014E': 'O', + '\u022E': 'O', + '\u0230': 'O', + '\u00D6': 'O', + '\u022A': 'O', + '\u1ECE': 'O', + '\u0150': 'O', + '\u01D1': 'O', + '\u020C': 'O', + '\u020E': 'O', + '\u01A0': 'O', + '\u1EDC': 'O', + '\u1EDA': 'O', + '\u1EE0': 'O', + '\u1EDE': 'O', + '\u1EE2': 'O', + '\u1ECC': 'O', + '\u1ED8': 'O', + '\u01EA': 'O', + '\u01EC': 'O', + '\u00D8': 'O', + '\u01FE': 'O', + '\u0186': 'O', + '\u019F': 'O', + '\uA74A': 'O', + '\uA74C': 'O', + '\u0152': 'OE', + '\u01A2': 'OI', + '\uA74E': 'OO', + '\u0222': 'OU', + '\u24C5': 'P', + '\uFF30': 'P', + '\u1E54': 'P', + '\u1E56': 'P', + '\u01A4': 'P', + '\u2C63': 'P', + '\uA750': 'P', + '\uA752': 'P', + '\uA754': 'P', + '\u24C6': 'Q', + '\uFF31': 'Q', + '\uA756': 'Q', + '\uA758': 'Q', + '\u024A': 'Q', + '\u24C7': 'R', + '\uFF32': 'R', + '\u0154': 'R', + '\u1E58': 'R', + '\u0158': 'R', + '\u0210': 'R', + '\u0212': 'R', + '\u1E5A': 'R', + '\u1E5C': 'R', + '\u0156': 'R', + '\u1E5E': 'R', + '\u024C': 'R', + '\u2C64': 'R', + '\uA75A': 'R', + '\uA7A6': 'R', + '\uA782': 'R', + '\u24C8': 'S', + '\uFF33': 'S', + '\u1E9E': 'S', + '\u015A': 'S', + '\u1E64': 'S', + '\u015C': 'S', + '\u1E60': 'S', + '\u0160': 'S', + '\u1E66': 'S', + '\u1E62': 'S', + '\u1E68': 'S', + '\u0218': 'S', + '\u015E': 'S', + '\u2C7E': 'S', + '\uA7A8': 'S', + '\uA784': 'S', + '\u24C9': 'T', + '\uFF34': 'T', + '\u1E6A': 'T', + '\u0164': 'T', + '\u1E6C': 'T', + '\u021A': 'T', + '\u0162': 'T', + '\u1E70': 'T', + '\u1E6E': 'T', + '\u0166': 'T', + '\u01AC': 'T', + '\u01AE': 'T', + '\u023E': 'T', + '\uA786': 'T', + '\uA728': 'TZ', + '\u24CA': 'U', + '\uFF35': 'U', + '\u00D9': 'U', + '\u00DA': 'U', + '\u00DB': 'U', + '\u0168': 'U', + '\u1E78': 'U', + '\u016A': 'U', + '\u1E7A': 'U', + '\u016C': 'U', + '\u00DC': 'U', + '\u01DB': 'U', + '\u01D7': 'U', + '\u01D5': 'U', + '\u01D9': 'U', + '\u1EE6': 'U', + '\u016E': 'U', + '\u0170': 'U', + '\u01D3': 'U', + '\u0214': 'U', + '\u0216': 'U', + '\u01AF': 'U', + '\u1EEA': 'U', + '\u1EE8': 'U', + '\u1EEE': 'U', + '\u1EEC': 'U', + '\u1EF0': 'U', + '\u1EE4': 'U', + '\u1E72': 'U', + '\u0172': 'U', + '\u1E76': 'U', + '\u1E74': 'U', + '\u0244': 'U', + '\u24CB': 'V', + '\uFF36': 'V', + '\u1E7C': 'V', + '\u1E7E': 'V', + '\u01B2': 'V', + '\uA75E': 'V', + '\u0245': 'V', + '\uA760': 'VY', + '\u24CC': 'W', + '\uFF37': 'W', + '\u1E80': 'W', + '\u1E82': 'W', + '\u0174': 'W', + '\u1E86': 'W', + '\u1E84': 'W', + '\u1E88': 'W', + '\u2C72': 'W', + '\u24CD': 'X', + '\uFF38': 'X', + '\u1E8A': 'X', + '\u1E8C': 'X', + '\u24CE': 'Y', + '\uFF39': 'Y', + '\u1EF2': 'Y', + '\u00DD': 'Y', + '\u0176': 'Y', + '\u1EF8': 'Y', + '\u0232': 'Y', + '\u1E8E': 'Y', + '\u0178': 'Y', + '\u1EF6': 'Y', + '\u1EF4': 'Y', + '\u01B3': 'Y', + '\u024E': 'Y', + '\u1EFE': 'Y', + '\u24CF': 'Z', + '\uFF3A': 'Z', + '\u0179': 'Z', + '\u1E90': 'Z', + '\u017B': 'Z', + '\u017D': 'Z', + '\u1E92': 'Z', + '\u1E94': 'Z', + '\u01B5': 'Z', + '\u0224': 'Z', + '\u2C7F': 'Z', + '\u2C6B': 'Z', + '\uA762': 'Z', + '\u24D0': 'a', + '\uFF41': 'a', + '\u1E9A': 'a', + '\u00E0': 'a', + '\u00E1': 'a', + '\u00E2': 'a', + '\u1EA7': 'a', + '\u1EA5': 'a', + '\u1EAB': 'a', + '\u1EA9': 'a', + '\u00E3': 'a', + '\u0101': 'a', + '\u0103': 'a', + '\u1EB1': 'a', + '\u1EAF': 'a', + '\u1EB5': 'a', + '\u1EB3': 'a', + '\u0227': 'a', + '\u01E1': 'a', + '\u00E4': 'a', + '\u01DF': 'a', + '\u1EA3': 'a', + '\u00E5': 'a', + '\u01FB': 'a', + '\u01CE': 'a', + '\u0201': 'a', + '\u0203': 'a', + '\u1EA1': 'a', + '\u1EAD': 'a', + '\u1EB7': 'a', + '\u1E01': 'a', + '\u0105': 'a', + '\u2C65': 'a', + '\u0250': 'a', + '\uA733': 'aa', + '\u00E6': 'ae', + '\u01FD': 'ae', + '\u01E3': 'ae', + '\uA735': 'ao', + '\uA737': 'au', + '\uA739': 'av', + '\uA73B': 'av', + '\uA73D': 'ay', + '\u24D1': 'b', + '\uFF42': 'b', + '\u1E03': 'b', + '\u1E05': 'b', + '\u1E07': 'b', + '\u0180': 'b', + '\u0183': 'b', + '\u0253': 'b', + '\u24D2': 'c', + '\uFF43': 'c', + '\u0107': 'c', + '\u0109': 'c', + '\u010B': 'c', + '\u010D': 'c', + '\u00E7': 'c', + '\u1E09': 'c', + '\u0188': 'c', + '\u023C': 'c', + '\uA73F': 'c', + '\u2184': 'c', + '\u24D3': 'd', + '\uFF44': 'd', + '\u1E0B': 'd', + '\u010F': 'd', + '\u1E0D': 'd', + '\u1E11': 'd', + '\u1E13': 'd', + '\u1E0F': 'd', + '\u0111': 'd', + '\u018C': 'd', + '\u0256': 'd', + '\u0257': 'd', + '\uA77A': 'd', + '\u01F3': 'dz', + '\u01C6': 'dz', + '\u24D4': 'e', + '\uFF45': 'e', + '\u00E8': 'e', + '\u00E9': 'e', + '\u00EA': 'e', + '\u1EC1': 'e', + '\u1EBF': 'e', + '\u1EC5': 'e', + '\u1EC3': 'e', + '\u1EBD': 'e', + '\u0113': 'e', + '\u1E15': 'e', + '\u1E17': 'e', + '\u0115': 'e', + '\u0117': 'e', + '\u00EB': 'e', + '\u1EBB': 'e', + '\u011B': 'e', + '\u0205': 'e', + '\u0207': 'e', + '\u1EB9': 'e', + '\u1EC7': 'e', + '\u0229': 'e', + '\u1E1D': 'e', + '\u0119': 'e', + '\u1E19': 'e', + '\u1E1B': 'e', + '\u0247': 'e', + '\u025B': 'e', + '\u01DD': 'e', + '\u24D5': 'f', + '\uFF46': 'f', + '\u1E1F': 'f', + '\u0192': 'f', + '\uA77C': 'f', + '\u24D6': 'g', + '\uFF47': 'g', + '\u01F5': 'g', + '\u011D': 'g', + '\u1E21': 'g', + '\u011F': 'g', + '\u0121': 'g', + '\u01E7': 'g', + '\u0123': 'g', + '\u01E5': 'g', + '\u0260': 'g', + '\uA7A1': 'g', + '\u1D79': 'g', + '\uA77F': 'g', + '\u24D7': 'h', + '\uFF48': 'h', + '\u0125': 'h', + '\u1E23': 'h', + '\u1E27': 'h', + '\u021F': 'h', + '\u1E25': 'h', + '\u1E29': 'h', + '\u1E2B': 'h', + '\u1E96': 'h', + '\u0127': 'h', + '\u2C68': 'h', + '\u2C76': 'h', + '\u0265': 'h', + '\u0195': 'hv', + '\u24D8': 'i', + '\uFF49': 'i', + '\u00EC': 'i', + '\u00ED': 'i', + '\u00EE': 'i', + '\u0129': 'i', + '\u012B': 'i', + '\u012D': 'i', + '\u00EF': 'i', + '\u1E2F': 'i', + '\u1EC9': 'i', + '\u01D0': 'i', + '\u0209': 'i', + '\u020B': 'i', + '\u1ECB': 'i', + '\u012F': 'i', + '\u1E2D': 'i', + '\u0268': 'i', + '\u0131': 'i', + '\u24D9': 'j', + '\uFF4A': 'j', + '\u0135': 'j', + '\u01F0': 'j', + '\u0249': 'j', + '\u24DA': 'k', + '\uFF4B': 'k', + '\u1E31': 'k', + '\u01E9': 'k', + '\u1E33': 'k', + '\u0137': 'k', + '\u1E35': 'k', + '\u0199': 'k', + '\u2C6A': 'k', + '\uA741': 'k', + '\uA743': 'k', + '\uA745': 'k', + '\uA7A3': 'k', + '\u24DB': 'l', + '\uFF4C': 'l', + '\u0140': 'l', + '\u013A': 'l', + '\u013E': 'l', + '\u1E37': 'l', + '\u1E39': 'l', + '\u013C': 'l', + '\u1E3D': 'l', + '\u1E3B': 'l', + '\u017F': 'l', + '\u0142': 'l', + '\u019A': 'l', + '\u026B': 'l', + '\u2C61': 'l', + '\uA749': 'l', + '\uA781': 'l', + '\uA747': 'l', + '\u01C9': 'lj', + '\u24DC': 'm', + '\uFF4D': 'm', + '\u1E3F': 'm', + '\u1E41': 'm', + '\u1E43': 'm', + '\u0271': 'm', + '\u026F': 'm', + '\u24DD': 'n', + '\uFF4E': 'n', + '\u01F9': 'n', + '\u0144': 'n', + '\u00F1': 'n', + '\u1E45': 'n', + '\u0148': 'n', + '\u1E47': 'n', + '\u0146': 'n', + '\u1E4B': 'n', + '\u1E49': 'n', + '\u019E': 'n', + '\u0272': 'n', + '\u0149': 'n', + '\uA791': 'n', + '\uA7A5': 'n', + '\u01CC': 'nj', + '\u24DE': 'o', + '\uFF4F': 'o', + '\u00F2': 'o', + '\u00F3': 'o', + '\u00F4': 'o', + '\u1ED3': 'o', + '\u1ED1': 'o', + '\u1ED7': 'o', + '\u1ED5': 'o', + '\u00F5': 'o', + '\u1E4D': 'o', + '\u022D': 'o', + '\u1E4F': 'o', + '\u014D': 'o', + '\u1E51': 'o', + '\u1E53': 'o', + '\u014F': 'o', + '\u022F': 'o', + '\u0231': 'o', + '\u00F6': 'o', + '\u022B': 'o', + '\u1ECF': 'o', + '\u0151': 'o', + '\u01D2': 'o', + '\u020D': 'o', + '\u020F': 'o', + '\u01A1': 'o', + '\u1EDD': 'o', + '\u1EDB': 'o', + '\u1EE1': 'o', + '\u1EDF': 'o', + '\u1EE3': 'o', + '\u1ECD': 'o', + '\u1ED9': 'o', + '\u01EB': 'o', + '\u01ED': 'o', + '\u00F8': 'o', + '\u01FF': 'o', + '\u0254': 'o', + '\uA74B': 'o', + '\uA74D': 'o', + '\u0275': 'o', + '\u0153': 'oe', + '\u01A3': 'oi', + '\u0223': 'ou', + '\uA74F': 'oo', + '\u24DF': 'p', + '\uFF50': 'p', + '\u1E55': 'p', + '\u1E57': 'p', + '\u01A5': 'p', + '\u1D7D': 'p', + '\uA751': 'p', + '\uA753': 'p', + '\uA755': 'p', + '\u24E0': 'q', + '\uFF51': 'q', + '\u024B': 'q', + '\uA757': 'q', + '\uA759': 'q', + '\u24E1': 'r', + '\uFF52': 'r', + '\u0155': 'r', + '\u1E59': 'r', + '\u0159': 'r', + '\u0211': 'r', + '\u0213': 'r', + '\u1E5B': 'r', + '\u1E5D': 'r', + '\u0157': 'r', + '\u1E5F': 'r', + '\u024D': 'r', + '\u027D': 'r', + '\uA75B': 'r', + '\uA7A7': 'r', + '\uA783': 'r', + '\u24E2': 's', + '\uFF53': 's', + '\u00DF': 's', + '\u015B': 's', + '\u1E65': 's', + '\u015D': 's', + '\u1E61': 's', + '\u0161': 's', + '\u1E67': 's', + '\u1E63': 's', + '\u1E69': 's', + '\u0219': 's', + '\u015F': 's', + '\u023F': 's', + '\uA7A9': 's', + '\uA785': 's', + '\u1E9B': 's', + '\u24E3': 't', + '\uFF54': 't', + '\u1E6B': 't', + '\u1E97': 't', + '\u0165': 't', + '\u1E6D': 't', + '\u021B': 't', + '\u0163': 't', + '\u1E71': 't', + '\u1E6F': 't', + '\u0167': 't', + '\u01AD': 't', + '\u0288': 't', + '\u2C66': 't', + '\uA787': 't', + '\uA729': 'tz', + '\u24E4': 'u', + '\uFF55': 'u', + '\u00F9': 'u', + '\u00FA': 'u', + '\u00FB': 'u', + '\u0169': 'u', + '\u1E79': 'u', + '\u016B': 'u', + '\u1E7B': 'u', + '\u016D': 'u', + '\u00FC': 'u', + '\u01DC': 'u', + '\u01D8': 'u', + '\u01D6': 'u', + '\u01DA': 'u', + '\u1EE7': 'u', + '\u016F': 'u', + '\u0171': 'u', + '\u01D4': 'u', + '\u0215': 'u', + '\u0217': 'u', + '\u01B0': 'u', + '\u1EEB': 'u', + '\u1EE9': 'u', + '\u1EEF': 'u', + '\u1EED': 'u', + '\u1EF1': 'u', + '\u1EE5': 'u', + '\u1E73': 'u', + '\u0173': 'u', + '\u1E77': 'u', + '\u1E75': 'u', + '\u0289': 'u', + '\u24E5': 'v', + '\uFF56': 'v', + '\u1E7D': 'v', + '\u1E7F': 'v', + '\u028B': 'v', + '\uA75F': 'v', + '\u028C': 'v', + '\uA761': 'vy', + '\u24E6': 'w', + '\uFF57': 'w', + '\u1E81': 'w', + '\u1E83': 'w', + '\u0175': 'w', + '\u1E87': 'w', + '\u1E85': 'w', + '\u1E98': 'w', + '\u1E89': 'w', + '\u2C73': 'w', + '\u24E7': 'x', + '\uFF58': 'x', + '\u1E8B': 'x', + '\u1E8D': 'x', + '\u24E8': 'y', + '\uFF59': 'y', + '\u1EF3': 'y', + '\u00FD': 'y', + '\u0177': 'y', + '\u1EF9': 'y', + '\u0233': 'y', + '\u1E8F': 'y', + '\u00FF': 'y', + '\u1EF7': 'y', + '\u1E99': 'y', + '\u1EF5': 'y', + '\u01B4': 'y', + '\u024F': 'y', + '\u1EFF': 'y', + '\u24E9': 'z', + '\uFF5A': 'z', + '\u017A': 'z', + '\u1E91': 'z', + '\u017C': 'z', + '\u017E': 'z', + '\u1E93': 'z', + '\u1E95': 'z', + '\u01B6': 'z', + '\u0225': 'z', + '\u0240': 'z', + '\u2C6C': 'z', + '\uA763': 'z', + '\u0386': '\u0391', + '\u0388': '\u0395', + '\u0389': '\u0397', + '\u038A': '\u0399', + '\u03AA': '\u0399', + '\u038C': '\u039F', + '\u038E': '\u03A5', + '\u03AB': '\u03A5', + '\u038F': '\u03A9', + '\u03AC': '\u03B1', + '\u03AD': '\u03B5', + '\u03AE': '\u03B7', + '\u03AF': '\u03B9', + '\u03CA': '\u03B9', + '\u0390': '\u03B9', + '\u03CC': '\u03BF', + '\u03CD': '\u03C5', + '\u03CB': '\u03C5', + '\u03B0': '\u03C5', + '\u03CE': '\u03C9', + '\u03C2': '\u03C3', + '\u2019': '\'' + }; + + return diacritics; +}); + +S2.define('select2/data/base',[ + '../utils' +], function (Utils) { + function BaseAdapter ($element, options) { + BaseAdapter.__super__.constructor.call(this); + } + + Utils.Extend(BaseAdapter, Utils.Observable); + + BaseAdapter.prototype.current = function (callback) { + throw new Error('The `current` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.query = function (params, callback) { + throw new Error('The `query` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.bind = function (container, $container) { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.destroy = function () { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.generateResultId = function (container, data) { + var id = container.id + '-result-'; + + id += Utils.generateChars(4); + + if (data.id != null) { + id += '-' + data.id.toString(); + } else { + id += '-' + Utils.generateChars(4); + } + return id; + }; + + return BaseAdapter; +}); + +S2.define('select2/data/select',[ + './base', + '../utils', + 'jquery' +], function (BaseAdapter, Utils, $) { + function SelectAdapter ($element, options) { + this.$element = $element; + this.options = options; + + SelectAdapter.__super__.constructor.call(this); + } + + Utils.Extend(SelectAdapter, BaseAdapter); + + SelectAdapter.prototype.current = function (callback) { + var data = []; + var self = this; + + this.$element.find(':selected').each(function () { + var $option = $(this); + + var option = self.item($option); + + data.push(option); + }); + + callback(data); + }; + + SelectAdapter.prototype.select = function (data) { + var self = this; + + data.selected = true; + + // If data.element is a DOM node, use it instead + if ($(data.element).is('option')) { + data.element.selected = true; + + this.$element.trigger('input').trigger('change'); + + return; + } + + if (this.$element.prop('multiple')) { + this.current(function (currentData) { + var val = []; + + data = [data]; + data.push.apply(data, currentData); + + for (var d = 0; d < data.length; d++) { + var id = data[d].id; + + if ($.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + self.$element.trigger('input').trigger('change'); + }); + } else { + var val = data.id; + + this.$element.val(val); + this.$element.trigger('input').trigger('change'); + } + }; + + SelectAdapter.prototype.unselect = function (data) { + var self = this; + + if (!this.$element.prop('multiple')) { + return; + } + + data.selected = false; + + if ($(data.element).is('option')) { + data.element.selected = false; + + this.$element.trigger('input').trigger('change'); + + return; + } + + this.current(function (currentData) { + var val = []; + + for (var d = 0; d < currentData.length; d++) { + var id = currentData[d].id; + + if (id !== data.id && $.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + + self.$element.trigger('input').trigger('change'); + }); + }; + + SelectAdapter.prototype.bind = function (container, $container) { + var self = this; + + this.container = container; + + container.on('select', function (params) { + self.select(params.data); + }); + + container.on('unselect', function (params) { + self.unselect(params.data); + }); + }; + + SelectAdapter.prototype.destroy = function () { + // Remove anything added to child elements + this.$element.find('*').each(function () { + // Remove any custom data set by Select2 + Utils.RemoveData(this); + }); + }; + + SelectAdapter.prototype.query = function (params, callback) { + var data = []; + var self = this; + + var $options = this.$element.children(); + + $options.each(function () { + var $option = $(this); + + if (!$option.is('option') && !$option.is('optgroup')) { + return; + } + + var option = self.item($option); + + var matches = self.matches(params, option); + + if (matches !== null) { + data.push(matches); + } + }); + + callback({ + results: data + }); + }; + + SelectAdapter.prototype.addOptions = function ($options) { + Utils.appendMany(this.$element, $options); + }; + + SelectAdapter.prototype.option = function (data) { + var option; + + if (data.children) { + option = document.createElement('optgroup'); + option.label = data.text; + } else { + option = document.createElement('option'); + + if (option.textContent !== undefined) { + option.textContent = data.text; + } else { + option.innerText = data.text; + } + } + + if (data.id !== undefined) { + option.value = data.id; + } + + if (data.disabled) { + option.disabled = true; + } + + if (data.selected) { + option.selected = true; + } + + if (data.title) { + option.title = data.title; + } + + var $option = $(option); + + var normalizedData = this._normalizeItem(data); + normalizedData.element = option; + + // Override the option's data with the combined data + Utils.StoreData(option, 'data', normalizedData); + + return $option; + }; + + SelectAdapter.prototype.item = function ($option) { + var data = {}; + + data = Utils.GetData($option[0], 'data'); + + if (data != null) { + return data; + } + + if ($option.is('option')) { + data = { + id: $option.val(), + text: $option.text(), + disabled: $option.prop('disabled'), + selected: $option.prop('selected'), + title: $option.prop('title') + }; + } else if ($option.is('optgroup')) { + data = { + text: $option.prop('label'), + children: [], + title: $option.prop('title') + }; + + var $children = $option.children('option'); + var children = []; + + for (var c = 0; c < $children.length; c++) { + var $child = $($children[c]); + + var child = this.item($child); + + children.push(child); + } + + data.children = children; + } + + data = this._normalizeItem(data); + data.element = $option[0]; + + Utils.StoreData($option[0], 'data', data); + + return data; + }; + + SelectAdapter.prototype._normalizeItem = function (item) { + if (item !== Object(item)) { + item = { + id: item, + text: item + }; + } + + item = $.extend({}, { + text: '' + }, item); + + var defaults = { + selected: false, + disabled: false + }; + + if (item.id != null) { + item.id = item.id.toString(); + } + + if (item.text != null) { + item.text = item.text.toString(); + } + + if (item._resultId == null && item.id && this.container != null) { + item._resultId = this.generateResultId(this.container, item); + } + + return $.extend({}, defaults, item); + }; + + SelectAdapter.prototype.matches = function (params, data) { + var matcher = this.options.get('matcher'); + + return matcher(params, data); + }; + + return SelectAdapter; +}); + +S2.define('select2/data/array',[ + './select', + '../utils', + 'jquery' +], function (SelectAdapter, Utils, $) { + function ArrayAdapter ($element, options) { + this._dataToConvert = options.get('data') || []; + + ArrayAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(ArrayAdapter, SelectAdapter); + + ArrayAdapter.prototype.bind = function (container, $container) { + ArrayAdapter.__super__.bind.call(this, container, $container); + + this.addOptions(this.convertToOptions(this._dataToConvert)); + }; + + ArrayAdapter.prototype.select = function (data) { + var $option = this.$element.find('option').filter(function (i, elm) { + return elm.value == data.id.toString(); + }); + + if ($option.length === 0) { + $option = this.option(data); + + this.addOptions($option); + } + + ArrayAdapter.__super__.select.call(this, data); + }; + + ArrayAdapter.prototype.convertToOptions = function (data) { + var self = this; + + var $existing = this.$element.find('option'); + var existingIds = $existing.map(function () { + return self.item($(this)).id; + }).get(); + + var $options = []; + + // Filter out all items except for the one passed in the argument + function onlyItem (item) { + return function () { + return $(this).val() == item.id; + }; + } + + for (var d = 0; d < data.length; d++) { + var item = this._normalizeItem(data[d]); + + // Skip items which were pre-loaded, only merge the data + if ($.inArray(item.id, existingIds) >= 0) { + var $existingOption = $existing.filter(onlyItem(item)); + + var existingData = this.item($existingOption); + var newData = $.extend(true, {}, item, existingData); + + var $newOption = this.option(newData); + + $existingOption.replaceWith($newOption); + + continue; + } + + var $option = this.option(item); + + if (item.children) { + var $children = this.convertToOptions(item.children); + + Utils.appendMany($option, $children); + } + + $options.push($option); + } + + return $options; + }; + + return ArrayAdapter; +}); + +S2.define('select2/data/ajax',[ + './array', + '../utils', + 'jquery' +], function (ArrayAdapter, Utils, $) { + function AjaxAdapter ($element, options) { + this.ajaxOptions = this._applyDefaults(options.get('ajax')); + + if (this.ajaxOptions.processResults != null) { + this.processResults = this.ajaxOptions.processResults; + } + + AjaxAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(AjaxAdapter, ArrayAdapter); + + AjaxAdapter.prototype._applyDefaults = function (options) { + var defaults = { + data: function (params) { + return $.extend({}, params, { + q: params.term + }); + }, + transport: function (params, success, failure) { + var $request = $.ajax(params); + + $request.then(success); + $request.fail(failure); + + return $request; + } + }; + + return $.extend({}, defaults, options, true); + }; + + AjaxAdapter.prototype.processResults = function (results) { + return results; + }; + + AjaxAdapter.prototype.query = function (params, callback) { + var matches = []; + var self = this; + + if (this._request != null) { + // JSONP requests cannot always be aborted + if ($.isFunction(this._request.abort)) { + this._request.abort(); + } + + this._request = null; + } + + var options = $.extend({ + type: 'GET' + }, this.ajaxOptions); + + if (typeof options.url === 'function') { + options.url = options.url.call(this.$element, params); + } + + if (typeof options.data === 'function') { + options.data = options.data.call(this.$element, params); + } + + function request () { + var $request = options.transport(options, function (data) { + var results = self.processResults(data, params); + + if (self.options.get('debug') && window.console && console.error) { + // Check to make sure that the response included a `results` key. + if (!results || !results.results || !$.isArray(results.results)) { + console.error( + 'Select2: The AJAX results did not return an array in the ' + + '`results` key of the response.' + ); + } + } + + callback(results); + }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ('status' in $request && + ($request.status === 0 || $request.status === '0')) { + return; + } + + self.trigger('results:message', { + message: 'errorLoading' + }); + }); + + self._request = $request; + } + + if (this.ajaxOptions.delay && params.term != null) { + if (this._queryTimeout) { + window.clearTimeout(this._queryTimeout); + } + + this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); + } else { + request(); + } + }; + + return AjaxAdapter; +}); + +S2.define('select2/data/tags',[ + 'jquery' +], function ($) { + function Tags (decorated, $element, options) { + var tags = options.get('tags'); + + var createTag = options.get('createTag'); + + if (createTag !== undefined) { + this.createTag = createTag; + } + + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + + decorated.call(this, $element, options); + + if ($.isArray(tags)) { + for (var t = 0; t < tags.length; t++) { + var tag = tags[t]; + var item = this._normalizeItem(tag); + + var $option = this.option(item); + + this.$element.append($option); + } + } + } + + Tags.prototype.query = function (decorated, params, callback) { + var self = this; + + this._removeOldTags(); + + if (params.term == null || params.page != null) { + decorated.call(this, params, callback); + return; + } + + function wrapper (obj, child) { + var data = obj.results; + + for (var i = 0; i < data.length; i++) { + var option = data[i]; + + var checkChildren = ( + option.children != null && + !wrapper({ + results: option.children + }, true) + ); + + var optionText = (option.text || '').toUpperCase(); + var paramsTerm = (params.term || '').toUpperCase(); + + var checkText = optionText === paramsTerm; + + if (checkText || checkChildren) { + if (child) { + return false; + } + + obj.data = data; + callback(obj); + + return; + } + } + + if (child) { + return true; + } + + var tag = self.createTag(params); + + if (tag != null) { + var $option = self.option(tag); + $option.attr('data-select2-tag', true); + + self.addOptions([$option]); + + self.insertTag(data, tag); + } + + obj.results = data; + + callback(obj); + } + + decorated.call(this, params, wrapper); + }; + + Tags.prototype.createTag = function (decorated, params) { + var term = $.trim(params.term); + + if (term === '') { + return null; + } + + return { + id: term, + text: term + }; + }; + + Tags.prototype.insertTag = function (_, data, tag) { + data.unshift(tag); + }; + + Tags.prototype._removeOldTags = function (_) { + var $options = this.$element.find('option[data-select2-tag]'); + + $options.each(function () { + if (this.selected) { + return; + } + + $(this).remove(); + }); + }; + + return Tags; +}); + +S2.define('select2/data/tokenizer',[ + 'jquery' +], function ($) { + function Tokenizer (decorated, $element, options) { + var tokenizer = options.get('tokenizer'); + + if (tokenizer !== undefined) { + this.tokenizer = tokenizer; + } + + decorated.call(this, $element, options); + } + + Tokenizer.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + this.$search = container.dropdown.$search || container.selection.$search || + $container.find('.select2-search__field'); + }; + + Tokenizer.prototype.query = function (decorated, params, callback) { + var self = this; + + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + + function select (data) { + self.trigger('select', { + data: data + }); + } + + params.term = params.term || ''; + + var tokenData = this.tokenizer(params, this.options, createAndSelect); + + if (tokenData.term !== params.term) { + // Replace the search term if we have the search box + if (this.$search.length) { + this.$search.val(tokenData.term); + this.$search.trigger('focus'); + } + + params.term = tokenData.term; + } + + decorated.call(this, params, callback); + }; + + Tokenizer.prototype.tokenizer = function (_, params, options, callback) { + var separators = options.get('tokenSeparators') || []; + var term = params.term; + var i = 0; + + var createTag = this.createTag || function (params) { + return { + id: params.term, + text: params.term + }; + }; + + while (i < term.length) { + var termChar = term[i]; + + if ($.inArray(termChar, separators) === -1) { + i++; + + continue; + } + + var part = term.substr(0, i); + var partParams = $.extend({}, params, { + term: part + }); + + var data = createTag(partParams); + + if (data == null) { + i++; + continue; + } + + callback(data); + + // Reset the term to not include the tokenized portion + term = term.substr(i + 1) || ''; + i = 0; + } + + return { + term: term + }; + }; + + return Tokenizer; +}); + +S2.define('select2/data/minimumInputLength',[ + +], function () { + function MinimumInputLength (decorated, $e, options) { + this.minimumInputLength = options.get('minimumInputLength'); + + decorated.call(this, $e, options); + } + + MinimumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (params.term.length < this.minimumInputLength) { + this.trigger('results:message', { + message: 'inputTooShort', + args: { + minimum: this.minimumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MinimumInputLength; +}); + +S2.define('select2/data/maximumInputLength',[ + +], function () { + function MaximumInputLength (decorated, $e, options) { + this.maximumInputLength = options.get('maximumInputLength'); + + decorated.call(this, $e, options); + } + + MaximumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (this.maximumInputLength > 0 && + params.term.length > this.maximumInputLength) { + this.trigger('results:message', { + message: 'inputTooLong', + args: { + maximum: this.maximumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MaximumInputLength; +}); + +S2.define('select2/data/maximumSelectionLength',[ + +], function (){ + function MaximumSelectionLength (decorated, $e, options) { + this.maximumSelectionLength = options.get('maximumSelectionLength'); + + decorated.call(this, $e, options); + } + + MaximumSelectionLength.prototype.bind = + function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function () { + self._checkIfMaximumSelected(); + }); + }; + + MaximumSelectionLength.prototype.query = + function (decorated, params, callback) { + var self = this; + + this._checkIfMaximumSelected(function () { + decorated.call(self, params, callback); + }); + }; + + MaximumSelectionLength.prototype._checkIfMaximumSelected = + function (_, successCallback) { + var self = this; + + this.current(function (currentData) { + var count = currentData != null ? currentData.length : 0; + if (self.maximumSelectionLength > 0 && + count >= self.maximumSelectionLength) { + self.trigger('results:message', { + message: 'maximumSelected', + args: { + maximum: self.maximumSelectionLength + } + }); + return; + } + + if (successCallback) { + successCallback(); + } + }); + }; + + return MaximumSelectionLength; +}); + +S2.define('select2/dropdown',[ + 'jquery', + './utils' +], function ($, Utils) { + function Dropdown ($element, options) { + this.$element = $element; + this.options = options; + + Dropdown.__super__.constructor.call(this); + } + + Utils.Extend(Dropdown, Utils.Observable); + + Dropdown.prototype.render = function () { + var $dropdown = $( + '<span class="select2-dropdown">' + + '<span class="select2-results"></span>' + + '</span>' + ); + + $dropdown.attr('dir', this.options.get('dir')); + + this.$dropdown = $dropdown; + + return $dropdown; + }; + + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + + Dropdown.prototype.position = function ($dropdown, $container) { + // Should be implemented in subclasses + }; + + Dropdown.prototype.destroy = function () { + // Remove the dropdown from the DOM + this.$dropdown.remove(); + }; + + return Dropdown; +}); + +S2.define('select2/dropdown/search',[ + 'jquery', + '../utils' +], function ($, Utils) { + function Search () { } + + Search.prototype.render = function (decorated) { + var $rendered = decorated.call(this); + + var $search = $( + '<span class="select2-search select2-search--dropdown">' + + '<input class="select2-search__field" type="search" tabindex="-1"' + + ' autocomplete="off" autocorrect="off" autocapitalize="none"' + + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + + '</span>' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + $rendered.prepend($search); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + decorated.call(this, container, $container); + + this.$search.on('keydown', function (evt) { + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + }); + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$search.on('input', function (evt) { + // Unbind the duplicated `keyup` event + $(this).off('keyup'); + }); + + this.$search.on('keyup input', function (evt) { + self.handleSearch(evt); + }); + + container.on('open', function () { + self.$search.attr('tabindex', 0); + self.$search.attr('aria-controls', resultsId); + + self.$search.trigger('focus'); + + window.setTimeout(function () { + self.$search.trigger('focus'); + }, 0); + }); + + container.on('close', function () { + self.$search.attr('tabindex', -1); + self.$search.removeAttr('aria-controls'); + self.$search.removeAttr('aria-activedescendant'); + + self.$search.val(''); + self.$search.trigger('blur'); + }); + + container.on('focus', function () { + if (!container.isOpen()) { + self.$search.trigger('focus'); + } + }); + + container.on('results:all', function (params) { + if (params.query.term == null || params.query.term === '') { + var showSearch = self.showSearch(params); + + if (showSearch) { + self.$searchContainer.removeClass('select2-search--hide'); + } else { + self.$searchContainer.addClass('select2-search--hide'); + } + } + }); + + container.on('results:focus', function (params) { + if (params.data._resultId) { + self.$search.attr('aria-activedescendant', params.data._resultId); + } else { + self.$search.removeAttr('aria-activedescendant'); + } + }); + }; + + Search.prototype.handleSearch = function (evt) { + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.showSearch = function (_, params) { + return true; + }; + + return Search; +}); + +S2.define('select2/dropdown/hidePlaceholder',[ + +], function () { + function HidePlaceholder (decorated, $element, options, dataAdapter) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options, dataAdapter); + } + + HidePlaceholder.prototype.append = function (decorated, data) { + data.results = this.removePlaceholder(data.results); + + decorated.call(this, data); + }; + + HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + HidePlaceholder.prototype.removePlaceholder = function (_, data) { + var modifiedData = data.slice(0); + + for (var d = data.length - 1; d >= 0; d--) { + var item = data[d]; + + if (this.placeholder.id === item.id) { + modifiedData.splice(d, 1); + } + } + + return modifiedData; + }; + + return HidePlaceholder; +}); + +S2.define('select2/dropdown/infiniteScroll',[ + 'jquery' +], function ($) { + function InfiniteScroll (decorated, $element, options, dataAdapter) { + this.lastParams = {}; + + decorated.call(this, $element, options, dataAdapter); + + this.$loadingMore = this.createLoadingMore(); + this.loading = false; + } + + InfiniteScroll.prototype.append = function (decorated, data) { + this.$loadingMore.remove(); + this.loading = false; + + decorated.call(this, data); + + if (this.showLoadingMore(data)) { + this.$results.append(this.$loadingMore); + this.loadMoreIfNeeded(); + } + }; + + InfiniteScroll.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('query', function (params) { + self.lastParams = params; + self.loading = true; + }); + + container.on('query:append', function (params) { + self.lastParams = params; + self.loading = true; + }); + + this.$results.on('scroll', this.loadMoreIfNeeded.bind(this)); + }; + + InfiniteScroll.prototype.loadMoreIfNeeded = function () { + var isLoadMoreVisible = $.contains( + document.documentElement, + this.$loadingMore[0] + ); + + if (this.loading || !isLoadMoreVisible) { + return; + } + + var currentOffset = this.$results.offset().top + + this.$results.outerHeight(false); + var loadingMoreOffset = this.$loadingMore.offset().top + + this.$loadingMore.outerHeight(false); + + if (currentOffset + 50 >= loadingMoreOffset) { + this.loadMore(); + } + }; + + InfiniteScroll.prototype.loadMore = function () { + this.loading = true; + + var params = $.extend({}, {page: 1}, this.lastParams); + + params.page++; + + this.trigger('query:append', params); + }; + + InfiniteScroll.prototype.showLoadingMore = function (_, data) { + return data.pagination && data.pagination.more; + }; + + InfiniteScroll.prototype.createLoadingMore = function () { + var $option = $( + '<li ' + + 'class="select2-results__option select2-results__option--load-more"' + + 'role="option" aria-disabled="true"></li>' + ); + + var message = this.options.get('translations').get('loadingMore'); + + $option.html(message(this.lastParams)); + + return $option; + }; + + return InfiniteScroll; +}); + +S2.define('select2/dropdown/attachBody',[ + 'jquery', + '../utils' +], function ($, Utils) { + function AttachBody (decorated, $element, options) { + this.$dropdownParent = $(options.get('dropdownParent') || document.body); + + decorated.call(this, $element, options); + } + + AttachBody.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('open', function () { + self._showDropdown(); + self._attachPositioningHandler(container); + + // Must bind after the results handlers to ensure correct sizing + self._bindContainerResultHandlers(container); + }); + + container.on('close', function () { + self._hideDropdown(); + self._detachPositioningHandler(container); + }); + + this.$dropdownContainer.on('mousedown', function (evt) { + evt.stopPropagation(); + }); + }; + + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + + AttachBody.prototype.position = function (decorated, $dropdown, $container) { + // Clone all of the container classes + $dropdown.attr('class', $container.attr('class')); + + $dropdown.removeClass('select2'); + $dropdown.addClass('select2-container--open'); + + $dropdown.css({ + position: 'absolute', + top: -999999 + }); + + this.$container = $container; + }; + + AttachBody.prototype.render = function (decorated) { + var $container = $('<span></span>'); + + var $dropdown = decorated.call(this); + $container.append($dropdown); + + this.$dropdownContainer = $container; + + return $container; + }; + + AttachBody.prototype._hideDropdown = function (decorated) { + this.$dropdownContainer.detach(); + }; + + AttachBody.prototype._bindContainerResultHandlers = + function (decorated, container) { + + // These should only be bound once + if (this._containerResultsHandlersBound) { + return; + } + + var self = this; + + container.on('results:all', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:append', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:message', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('select', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('unselect', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + this._containerResultsHandlersBound = true; + }; + + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { + var self = this; + + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.each(function () { + Utils.StoreData(this, 'select2-scroll-position', { + x: $(this).scrollLeft(), + y: $(this).scrollTop() + }); + }); + + $watchers.on(scrollEvent, function (ev) { + var position = Utils.GetData(this, 'select2-scroll-position'); + $(this).scrollTop(position.y); + }); + + $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, + function (e) { + self._positionDropdown(); + self._resizeDropdown(); + }); + }; + + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.off(scrollEvent); + + $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); + }; + + AttachBody.prototype._positionDropdown = function () { + var $window = $(window); + + var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above'); + var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below'); + + var newDirection = null; + + var offset = this.$container.offset(); + + offset.bottom = offset.top + this.$container.outerHeight(false); + + var container = { + height: this.$container.outerHeight(false) + }; + + container.top = offset.top; + container.bottom = offset.top + container.height; + + var dropdown = { + height: this.$dropdown.outerHeight(false) + }; + + var viewport = { + top: $window.scrollTop(), + bottom: $window.scrollTop() + $window.height() + }; + + var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); + var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); + + var css = { + left: offset.left, + top: container.bottom + }; + + // Determine what the parent element is to use for calculating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positioned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = { + top: 0, + left: 0 + }; + + if ( + $.contains(document.body, $offsetParent[0]) || + $offsetParent[0].isConnected + ) { + parentOffset = $offsetParent.offset(); + } + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + + if (!isCurrentlyAbove && !isCurrentlyBelow) { + newDirection = 'below'; + } + + if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { + newDirection = 'above'; + } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { + newDirection = 'below'; + } + + if (newDirection == 'above' || + (isCurrentlyAbove && newDirection !== 'below')) { + css.top = container.top - parentOffset.top - dropdown.height; + } + + if (newDirection != null) { + this.$dropdown + .removeClass('select2-dropdown--below select2-dropdown--above') + .addClass('select2-dropdown--' + newDirection); + this.$container + .removeClass('select2-container--below select2-container--above') + .addClass('select2-container--' + newDirection); + } + + this.$dropdownContainer.css(css); + }; + + AttachBody.prototype._resizeDropdown = function () { + var css = { + width: this.$container.outerWidth(false) + 'px' + }; + + if (this.options.get('dropdownAutoWidth')) { + css.minWidth = css.width; + css.position = 'relative'; + css.width = 'auto'; + } + + this.$dropdown.css(css); + }; + + AttachBody.prototype._showDropdown = function (decorated) { + this.$dropdownContainer.appendTo(this.$dropdownParent); + + this._positionDropdown(); + this._resizeDropdown(); + }; + + return AttachBody; +}); + +S2.define('select2/dropdown/minimumResultsForSearch',[ + +], function () { + function countResults (data) { + var count = 0; + + for (var d = 0; d < data.length; d++) { + var item = data[d]; + + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + } + + return count; + } + + function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { + this.minimumResultsForSearch = options.get('minimumResultsForSearch'); + + if (this.minimumResultsForSearch < 0) { + this.minimumResultsForSearch = Infinity; + } + + decorated.call(this, $element, options, dataAdapter); + } + + MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { + return false; + } + + return decorated.call(this, params); + }; + + return MinimumResultsForSearch; +}); + +S2.define('select2/dropdown/selectOnClose',[ + '../utils' +], function (Utils) { + function SelectOnClose () { } + + SelectOnClose.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('close', function (params) { + self._handleSelectOnClose(params); + }); + }; + + SelectOnClose.prototype._handleSelectOnClose = function (_, params) { + if (params && params.originalSelect2Event != null) { + var event = params.originalSelect2Event; + + // Don't select an item if the close event was triggered from a select or + // unselect event + if (event._type === 'select' || event._type === 'unselect') { + return; + } + } + + var $highlightedResults = this.getHighlightedResults(); + + // Only select highlighted results + if ($highlightedResults.length < 1) { + return; + } + + var data = Utils.GetData($highlightedResults[0], 'data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + + this.trigger('select', { + data: data + }); + }; + + return SelectOnClose; +}); + +S2.define('select2/dropdown/closeOnSelect',[ + +], function () { + function CloseOnSelect () { } + + CloseOnSelect.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function (evt) { + self._selectTriggered(evt); + }); + + container.on('unselect', function (evt) { + self._selectTriggered(evt); + }); + }; + + CloseOnSelect.prototype._selectTriggered = function (_, evt) { + var originalEvent = evt.originalEvent; + + // Don't close if the control key is being held + if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) { + return; + } + + this.trigger('close', { + originalEvent: originalEvent, + originalSelect2Event: evt + }); + }; + + return CloseOnSelect; +}); + +S2.define('select2/i18n/en',[],function () { + // English + return { + errorLoading: function () { + return 'The results could not be loaded.'; + }, + inputTooLong: function (args) { + var overChars = args.input.length - args.maximum; + + var message = 'Please delete ' + overChars + ' character'; + + if (overChars != 1) { + message += 's'; + } + + return message; + }, + inputTooShort: function (args) { + var remainingChars = args.minimum - args.input.length; + + var message = 'Please enter ' + remainingChars + ' or more characters'; + + return message; + }, + loadingMore: function () { + return 'Loading more results…'; + }, + maximumSelected: function (args) { + var message = 'You can only select ' + args.maximum + ' item'; + + if (args.maximum != 1) { + message += 's'; + } + + return message; + }, + noResults: function () { + return 'No results found'; + }, + searching: function () { + return 'Searching…'; + }, + removeAllItems: function () { + return 'Remove all items'; + } + }; +}); + +S2.define('select2/defaults',[ + 'jquery', + 'require', + + './results', + + './selection/single', + './selection/multiple', + './selection/placeholder', + './selection/allowClear', + './selection/search', + './selection/eventRelay', + + './utils', + './translation', + './diacritics', + + './data/select', + './data/array', + './data/ajax', + './data/tags', + './data/tokenizer', + './data/minimumInputLength', + './data/maximumInputLength', + './data/maximumSelectionLength', + + './dropdown', + './dropdown/search', + './dropdown/hidePlaceholder', + './dropdown/infiniteScroll', + './dropdown/attachBody', + './dropdown/minimumResultsForSearch', + './dropdown/selectOnClose', + './dropdown/closeOnSelect', + + './i18n/en' +], function ($, require, + + ResultsList, + + SingleSelection, MultipleSelection, Placeholder, AllowClear, + SelectionSearch, EventRelay, + + Utils, Translation, DIACRITICS, + + SelectData, ArrayData, AjaxData, Tags, Tokenizer, + MinimumInputLength, MaximumInputLength, MaximumSelectionLength, + + Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, + AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, + + EnglishTranslation) { + function Defaults () { + this.reset(); + } + + Defaults.prototype.apply = function (options) { + options = $.extend(true, {}, this.defaults, options); + + if (options.dataAdapter == null) { + if (options.ajax != null) { + options.dataAdapter = AjaxData; + } else if (options.data != null) { + options.dataAdapter = ArrayData; + } else { + options.dataAdapter = SelectData; + } + + if (options.minimumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MinimumInputLength + ); + } + + if (options.maximumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumInputLength + ); + } + + if (options.maximumSelectionLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumSelectionLength + ); + } + + if (options.tags) { + options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); + } + + if (options.tokenSeparators != null || options.tokenizer != null) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Tokenizer + ); + } + + if (options.query != null) { + var Query = require(options.amdBase + 'compat/query'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); + } + + if (options.initSelection != null) { + var InitSelection = require(options.amdBase + 'compat/initSelection'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); + } + } + + if (options.resultsAdapter == null) { + options.resultsAdapter = ResultsList; + + if (options.ajax != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + InfiniteScroll + ); + } + + if (options.placeholder != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + HidePlaceholder + ); + } + + if (options.selectOnClose) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + SelectOnClose + ); + } + } + + if (options.dropdownAdapter == null) { + if (options.multiple) { + options.dropdownAdapter = Dropdown; + } else { + var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); + + options.dropdownAdapter = SearchableDropdown; + } + + if (options.minimumResultsForSearch !== 0) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + MinimumResultsForSearch + ); + } + + if (options.closeOnSelect) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + CloseOnSelect + ); + } + + if ( + options.dropdownCssClass != null || + options.dropdownCss != null || + options.adaptDropdownCssClass != null + ) { + var DropdownCSS = require(options.amdBase + 'compat/dropdownCss'); + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + DropdownCSS + ); + } + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + AttachBody + ); + } + + if (options.selectionAdapter == null) { + if (options.multiple) { + options.selectionAdapter = MultipleSelection; + } else { + options.selectionAdapter = SingleSelection; + } + + // Add the placeholder mixin if a placeholder was specified + if (options.placeholder != null) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + Placeholder + ); + } + + if (options.allowClear) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + AllowClear + ); + } + + if (options.multiple) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + SelectionSearch + ); + } + + if ( + options.containerCssClass != null || + options.containerCss != null || + options.adaptContainerCssClass != null + ) { + var ContainerCSS = require(options.amdBase + 'compat/containerCss'); + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + ContainerCSS + ); + } + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + EventRelay + ); + } + + // If the defaults were not previously applied from an element, it is + // possible for the language option to have not been resolved + options.language = this._resolveLanguage(options.language); + + // Always fall back to English since it will always be complete + options.language.push('en'); + + var uniqueLanguages = []; + + for (var l = 0; l < options.language.length; l++) { + var language = options.language[l]; + + if (uniqueLanguages.indexOf(language) === -1) { + uniqueLanguages.push(language); + } + } + + options.language = uniqueLanguages; + + options.translations = this._processTranslations( + options.language, + options.debug + ); + + return options; + }; + + Defaults.prototype.reset = function () { + function stripDiacritics (text) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return text.replace(/[^\u0000-\u007E]/g, match); + } + + function matcher (params, data) { + // Always return the object if there is nothing to compare + if ($.trim(params.term) === '') { + return data; + } + + // Do a recursive check for options with children + if (data.children && data.children.length > 0) { + // Clone the data object if there are children + // This is required as we modify the object to remove any non-matches + var match = $.extend(true, {}, data); + + // Check each child of the option + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + var matches = matcher(params, child); + + // If there wasn't a match, remove the object in the array + if (matches == null) { + match.children.splice(c, 1); + } + } + + // If any children matched, return the new object + if (match.children.length > 0) { + return match; + } + + // If there were no matching children, check just the plain object + return matcher(params, match); + } + + var original = stripDiacritics(data.text).toUpperCase(); + var term = stripDiacritics(params.term).toUpperCase(); + + // Check if the text contains the term + if (original.indexOf(term) > -1) { + return data; + } + + // If it doesn't contain the term, don't return anything + return null; + } + + this.defaults = { + amdBase: './', + amdLanguageBase: './i18n/', + closeOnSelect: true, + debug: false, + dropdownAutoWidth: false, + escapeMarkup: Utils.escapeMarkup, + language: {}, + matcher: matcher, + minimumInputLength: 0, + maximumInputLength: 0, + maximumSelectionLength: 0, + minimumResultsForSearch: 0, + selectOnClose: false, + scrollAfterSelect: false, + sorter: function (data) { + return data; + }, + templateResult: function (result) { + return result.text; + }, + templateSelection: function (selection) { + return selection.text; + }, + theme: 'default', + width: 'resolve' + }; + }; + + Defaults.prototype.applyFromElement = function (options, $element) { + var optionLanguage = options.language; + var defaultLanguage = this.defaults.language; + var elementLanguage = $element.prop('lang'); + var parentLanguage = $element.closest('[lang]').prop('lang'); + + var languages = Array.prototype.concat.call( + this._resolveLanguage(elementLanguage), + this._resolveLanguage(optionLanguage), + this._resolveLanguage(defaultLanguage), + this._resolveLanguage(parentLanguage) + ); + + options.language = languages; + + return options; + }; + + Defaults.prototype._resolveLanguage = function (language) { + if (!language) { + return []; + } + + if ($.isEmptyObject(language)) { + return []; + } + + if ($.isPlainObject(language)) { + return [language]; + } + + var languages; + + if (!$.isArray(language)) { + languages = [language]; + } else { + languages = language; + } + + var resolvedLanguages = []; + + for (var l = 0; l < languages.length; l++) { + resolvedLanguages.push(languages[l]); + + if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) { + // Extract the region information if it is included + var languageParts = languages[l].split('-'); + var baseLanguage = languageParts[0]; + + resolvedLanguages.push(baseLanguage); + } + } + + return resolvedLanguages; + }; + + Defaults.prototype._processTranslations = function (languages, debug) { + var translations = new Translation(); + + for (var l = 0; l < languages.length; l++) { + var languageData = new Translation(); + + var language = languages[l]; + + if (typeof language === 'string') { + try { + // Try to load it with the original name + languageData = Translation.loadPath(language); + } catch (e) { + try { + // If we couldn't load it, check if it wasn't the full path + language = this.defaults.amdLanguageBase + language; + languageData = Translation.loadPath(language); + } catch (ex) { + // The translation could not be loaded at all. Sometimes this is + // because of a configuration problem, other times this can be + // because of how Select2 helps load all possible translation files + if (debug && window.console && console.warn) { + console.warn( + 'Select2: The language file for "' + language + '" could ' + + 'not be automatically loaded. A fallback will be used instead.' + ); + } + } + } + } else if ($.isPlainObject(language)) { + languageData = new Translation(language); + } else { + languageData = language; + } + + translations.extend(languageData); + } + + return translations; + }; + + Defaults.prototype.set = function (key, value) { + var camelKey = $.camelCase(key); + + var data = {}; + data[camelKey] = value; + + var convertedData = Utils._convertData(data); + + $.extend(true, this.defaults, convertedData); + }; + + var defaults = new Defaults(); + + return defaults; +}); + +S2.define('select2/options',[ + 'require', + 'jquery', + './defaults', + './utils' +], function (require, $, Defaults, Utils) { + function Options (options, $element) { + this.options = options; + + if ($element != null) { + this.fromElement($element); + } + + if ($element != null) { + this.options = Defaults.applyFromElement(this.options, $element); + } + + this.options = Defaults.apply(this.options); + + if ($element && $element.is('input')) { + var InputCompat = require(this.get('amdBase') + 'compat/inputData'); + + this.options.dataAdapter = Utils.Decorate( + this.options.dataAdapter, + InputCompat + ); + } + } + + Options.prototype.fromElement = function ($e) { + var excludedData = ['select2']; + + if (this.options.multiple == null) { + this.options.multiple = $e.prop('multiple'); + } + + if (this.options.disabled == null) { + this.options.disabled = $e.prop('disabled'); + } + + if (this.options.dir == null) { + if ($e.prop('dir')) { + this.options.dir = $e.prop('dir'); + } else if ($e.closest('[dir]').prop('dir')) { + this.options.dir = $e.closest('[dir]').prop('dir'); + } else { + this.options.dir = 'ltr'; + } + } + + $e.prop('disabled', this.options.disabled); + $e.prop('multiple', this.options.multiple); + + if (Utils.GetData($e[0], 'select2Tags')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-select2-tags` attribute has been changed to ' + + 'use the `data-data` and `data-tags="true"` attributes and will be ' + + 'removed in future versions of Select2.' + ); + } + + Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags')); + Utils.StoreData($e[0], 'tags', true); + } + + if (Utils.GetData($e[0], 'ajaxUrl')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-ajax-url` attribute has been changed to ' + + '`data-ajax--url` and support for the old attribute will be removed' + + ' in future versions of Select2.' + ); + } + + $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl')); + Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl')); + } + + var dataset = {}; + + function upperCaseLetter(_, letter) { + return letter.toUpperCase(); + } + + // Pre-load all of the attributes which are prefixed with `data-` + for (var attr = 0; attr < $e[0].attributes.length; attr++) { + var attributeName = $e[0].attributes[attr].name; + var prefix = 'data-'; + + if (attributeName.substr(0, prefix.length) == prefix) { + // Get the contents of the attribute after `data-` + var dataName = attributeName.substring(prefix.length); + + // Get the data contents from the consistent source + // This is more than likely the jQuery data helper + var dataValue = Utils.GetData($e[0], dataName); + + // camelCase the attribute name to match the spec + var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); + + // Store the data attribute contents into the dataset since + dataset[camelDataName] = dataValue; + } + } + + // Prefer the element's `dataset` attribute if it exists + // jQuery 1.x does not correctly handle data attributes with multiple dashes + if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { + dataset = $.extend(true, {}, $e[0].dataset, dataset); + } + + // Prefer our internal data cache if it exists + var data = $.extend(true, {}, Utils.GetData($e[0]), dataset); + + data = Utils._convertData(data); + + for (var key in data) { + if ($.inArray(key, excludedData) > -1) { + continue; + } + + if ($.isPlainObject(this.options[key])) { + $.extend(this.options[key], data[key]); + } else { + this.options[key] = data[key]; + } + } + + return this; + }; + + Options.prototype.get = function (key) { + return this.options[key]; + }; + + Options.prototype.set = function (key, val) { + this.options[key] = val; + }; + + return Options; +}); + +S2.define('select2/core',[ + 'jquery', + './options', + './utils', + './keys' +], function ($, Options, Utils, KEYS) { + var Select2 = function ($element, options) { + if (Utils.GetData($element[0], 'select2') != null) { + Utils.GetData($element[0], 'select2').destroy(); + } + + this.$element = $element; + + this.id = this._generateId($element); + + options = options || {}; + + this.options = new Options(options, $element); + + Select2.__super__.constructor.call(this); + + // Set up the tabindex + + var tabindex = $element.attr('tabindex') || 0; + Utils.StoreData($element[0], 'old-tabindex', tabindex); + $element.attr('tabindex', '-1'); + + // Set up containers and adapters + + var DataAdapter = this.options.get('dataAdapter'); + this.dataAdapter = new DataAdapter($element, this.options); + + var $container = this.render(); + + this._placeContainer($container); + + var SelectionAdapter = this.options.get('selectionAdapter'); + this.selection = new SelectionAdapter($element, this.options); + this.$selection = this.selection.render(); + + this.selection.position(this.$selection, $container); + + var DropdownAdapter = this.options.get('dropdownAdapter'); + this.dropdown = new DropdownAdapter($element, this.options); + this.$dropdown = this.dropdown.render(); + + this.dropdown.position(this.$dropdown, $container); + + var ResultsAdapter = this.options.get('resultsAdapter'); + this.results = new ResultsAdapter($element, this.options, this.dataAdapter); + this.$results = this.results.render(); + + this.results.position(this.$results, this.$dropdown); + + // Bind events + + var self = this; + + // Bind the container to all of the adapters + this._bindAdapters(); + + // Register any DOM event handlers + this._registerDomEvents(); + + // Register any internal event handlers + this._registerDataEvents(); + this._registerSelectionEvents(); + this._registerDropdownEvents(); + this._registerResultsEvents(); + this._registerEvents(); + + // Set the initial state + this.dataAdapter.current(function (initialData) { + self.trigger('selection:update', { + data: initialData + }); + }); + + // Hide the original select + $element.addClass('select2-hidden-accessible'); + $element.attr('aria-hidden', 'true'); + + // Synchronize any monitored attributes + this._syncAttributes(); + + Utils.StoreData($element[0], 'select2', this); + + // Ensure backwards compatibility with $element.data('select2'). + $element.data('select2', this); + }; + + Utils.Extend(Select2, Utils.Observable); + + Select2.prototype._generateId = function ($element) { + var id = ''; + + if ($element.attr('id') != null) { + id = $element.attr('id'); + } else if ($element.attr('name') != null) { + id = $element.attr('name') + '-' + Utils.generateChars(2); + } else { + id = Utils.generateChars(4); + } + + id = id.replace(/(:|\.|\[|\]|,)/g, ''); + id = 'select2-' + id; + + return id; + }; + + Select2.prototype._placeContainer = function ($container) { + $container.insertAfter(this.$element); + + var width = this._resolveWidth(this.$element, this.options.get('width')); + + if (width != null) { + $container.css('width', width); + } + }; + + Select2.prototype._resolveWidth = function ($element, method) { + var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; + + if (method == 'resolve') { + var styleWidth = this._resolveWidth($element, 'style'); + + if (styleWidth != null) { + return styleWidth; + } + + return this._resolveWidth($element, 'element'); + } + + if (method == 'element') { + var elementWidth = $element.outerWidth(false); + + if (elementWidth <= 0) { + return 'auto'; + } + + return elementWidth + 'px'; + } + + if (method == 'style') { + var style = $element.attr('style'); + + if (typeof(style) !== 'string') { + return null; + } + + var attrs = style.split(';'); + + for (var i = 0, l = attrs.length; i < l; i = i + 1) { + var attr = attrs[i].replace(/\s/g, ''); + var matches = attr.match(WIDTH); + + if (matches !== null && matches.length >= 1) { + return matches[1]; + } + } + + return null; + } + + if (method == 'computedstyle') { + var computedStyle = window.getComputedStyle($element[0]); + + return computedStyle.width; + } + + return method; + }; + + Select2.prototype._bindAdapters = function () { + this.dataAdapter.bind(this, this.$container); + this.selection.bind(this, this.$container); + + this.dropdown.bind(this, this.$container); + this.results.bind(this, this.$container); + }; + + Select2.prototype._registerDomEvents = function () { + var self = this; + + this.$element.on('change.select2', function () { + self.dataAdapter.current(function (data) { + self.trigger('selection:update', { + data: data + }); + }); + }); + + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + + this._syncA = Utils.bind(this._syncAttributes, this); + this._syncS = Utils.bind(this._syncSubtree, this); + + if (this.$element[0].attachEvent) { + this.$element[0].attachEvent('onpropertychange', this._syncA); + } + + var observer = window.MutationObserver || + window.WebKitMutationObserver || + window.MozMutationObserver + ; + + if (observer != null) { + this._observer = new observer(function (mutations) { + self._syncA(); + self._syncS(null, mutations); + }); + this._observer.observe(this.$element[0], { + attributes: true, + childList: true, + subtree: false + }); + } else if (this.$element[0].addEventListener) { + this.$element[0].addEventListener( + 'DOMAttrModified', + self._syncA, + false + ); + this.$element[0].addEventListener( + 'DOMNodeInserted', + self._syncS, + false + ); + this.$element[0].addEventListener( + 'DOMNodeRemoved', + self._syncS, + false + ); + } + }; + + Select2.prototype._registerDataEvents = function () { + var self = this; + + this.dataAdapter.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerSelectionEvents = function () { + var self = this; + var nonRelayEvents = ['toggle', 'focus']; + + this.selection.on('toggle', function () { + self.toggleDropdown(); + }); + + this.selection.on('focus', function (params) { + self.focus(params); + }); + + this.selection.on('*', function (name, params) { + if ($.inArray(name, nonRelayEvents) !== -1) { + return; + } + + self.trigger(name, params); + }); + }; + + Select2.prototype._registerDropdownEvents = function () { + var self = this; + + this.dropdown.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerResultsEvents = function () { + var self = this; + + this.results.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerEvents = function () { + var self = this; + + this.on('open', function () { + self.$container.addClass('select2-container--open'); + }); + + this.on('close', function () { + self.$container.removeClass('select2-container--open'); + }); + + this.on('enable', function () { + self.$container.removeClass('select2-container--disabled'); + }); + + this.on('disable', function () { + self.$container.addClass('select2-container--disabled'); + }); + + this.on('blur', function () { + self.$container.removeClass('select2-container--focus'); + }); + + this.on('query', function (params) { + if (!self.isOpen()) { + self.trigger('open', {}); + } + + this.dataAdapter.query(params, function (data) { + self.trigger('results:all', { + data: data, + query: params + }); + }); + }); + + this.on('query:append', function (params) { + this.dataAdapter.query(params, function (data) { + self.trigger('results:append', { + data: data, + query: params + }); + }); + }); + + this.on('keypress', function (evt) { + var key = evt.which; + + if (self.isOpen()) { + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(evt); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); + + evt.preventDefault(); + } else if ((key === KEYS.SPACE && evt.ctrlKey)) { + self.trigger('results:toggle', {}); + + evt.preventDefault(); + } else if (key === KEYS.UP) { + self.trigger('results:previous', {}); + + evt.preventDefault(); + } else if (key === KEYS.DOWN) { + self.trigger('results:next', {}); + + evt.preventDefault(); + } + } else { + if (key === KEYS.ENTER || key === KEYS.SPACE || + (key === KEYS.DOWN && evt.altKey)) { + self.open(); + + evt.preventDefault(); + } + } + }); + }; + + Select2.prototype._syncAttributes = function () { + this.options.set('disabled', this.$element.prop('disabled')); + + if (this.isDisabled()) { + if (this.isOpen()) { + this.close(); + } + + this.trigger('disable', {}); + } else { + this.trigger('enable', {}); + } + }; + + Select2.prototype._isChangeMutation = function (evt, mutations) { + var changed = false; + var self = this; + + // Ignore any mutation events raised for elements that aren't options or + // optgroups. This handles the case when the select element is destroyed + if ( + evt && evt.target && ( + evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP' + ) + ) { + return; + } + + if (!mutations) { + // If mutation events aren't supported, then we can only assume that the + // change affected the selections + changed = true; + } else if (mutations.addedNodes && mutations.addedNodes.length > 0) { + for (var n = 0; n < mutations.addedNodes.length; n++) { + var node = mutations.addedNodes[n]; + + if (node.selected) { + changed = true; + } + } + } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { + changed = true; + } else if ($.isArray(mutations)) { + $.each(mutations, function(evt, mutation) { + if (self._isChangeMutation(evt, mutation)) { + // We've found a change mutation. + // Let's escape from the loop and continue + changed = true; + return false; + } + }); + } + return changed; + }; + + Select2.prototype._syncSubtree = function (evt, mutations) { + var changed = this._isChangeMutation(evt, mutations); + var self = this; + + // Only re-pull the data if we think there is a change + if (changed) { + this.dataAdapter.current(function (currentData) { + self.trigger('selection:update', { + data: currentData + }); + }); + } + }; + + /** + * Override the trigger method to automatically trigger pre-events when + * there are events that can be prevented. + */ + Select2.prototype.trigger = function (name, args) { + var actualTrigger = Select2.__super__.trigger; + var preTriggerMap = { + 'open': 'opening', + 'close': 'closing', + 'select': 'selecting', + 'unselect': 'unselecting', + 'clear': 'clearing' + }; + + if (args === undefined) { + args = {}; + } + + if (name in preTriggerMap) { + var preTriggerName = preTriggerMap[name]; + var preTriggerArgs = { + prevented: false, + name: name, + args: args + }; + + actualTrigger.call(this, preTriggerName, preTriggerArgs); + + if (preTriggerArgs.prevented) { + args.prevented = true; + + return; + } + } + + actualTrigger.call(this, name, args); + }; + + Select2.prototype.toggleDropdown = function () { + if (this.isDisabled()) { + return; + } + + if (this.isOpen()) { + this.close(); + } else { + this.open(); + } + }; + + Select2.prototype.open = function () { + if (this.isOpen()) { + return; + } + + if (this.isDisabled()) { + return; + } + + this.trigger('query', {}); + }; + + Select2.prototype.close = function (evt) { + if (!this.isOpen()) { + return; + } + + this.trigger('close', { originalEvent : evt }); + }; + + /** + * Helper method to abstract the "enabled" (not "disabled") state of this + * object. + * + * @return {true} if the instance is not disabled. + * @return {false} if the instance is disabled. + */ + Select2.prototype.isEnabled = function () { + return !this.isDisabled(); + }; + + /** + * Helper method to abstract the "disabled" state of this object. + * + * @return {true} if the disabled option is true. + * @return {false} if the disabled option is false. + */ + Select2.prototype.isDisabled = function () { + return this.options.get('disabled'); + }; + + Select2.prototype.isOpen = function () { + return this.$container.hasClass('select2-container--open'); + }; + + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + + Select2.prototype.enable = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("enable")` method has been deprecated and will' + + ' be removed in later Select2 versions. Use $element.prop("disabled")' + + ' instead.' + ); + } + + if (args == null || args.length === 0) { + args = [true]; + } + + var disabled = !args[0]; + + this.$element.prop('disabled', disabled); + }; + + Select2.prototype.data = function () { + if (this.options.get('debug') && + arguments.length > 0 && window.console && console.warn) { + console.warn( + 'Select2: Data can no longer be set using `select2("data")`. You ' + + 'should consider setting the value instead using `$element.val()`.' + ); + } + + var data = []; + + this.dataAdapter.current(function (currentData) { + data = currentData; + }); + + return data; + }; + + Select2.prototype.val = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("val")` method has been deprecated and will be' + + ' removed in later Select2 versions. Use $element.val() instead.' + ); + } + + if (args == null || args.length === 0) { + return this.$element.val(); + } + + var newVal = args[0]; + + if ($.isArray(newVal)) { + newVal = $.map(newVal, function (obj) { + return obj.toString(); + }); + } + + this.$element.val(newVal).trigger('input').trigger('change'); + }; + + Select2.prototype.destroy = function () { + this.$container.remove(); + + if (this.$element[0].detachEvent) { + this.$element[0].detachEvent('onpropertychange', this._syncA); + } + + if (this._observer != null) { + this._observer.disconnect(); + this._observer = null; + } else if (this.$element[0].removeEventListener) { + this.$element[0] + .removeEventListener('DOMAttrModified', this._syncA, false); + this.$element[0] + .removeEventListener('DOMNodeInserted', this._syncS, false); + this.$element[0] + .removeEventListener('DOMNodeRemoved', this._syncS, false); + } + + this._syncA = null; + this._syncS = null; + + this.$element.off('.select2'); + this.$element.attr('tabindex', + Utils.GetData(this.$element[0], 'old-tabindex')); + + this.$element.removeClass('select2-hidden-accessible'); + this.$element.attr('aria-hidden', 'false'); + Utils.RemoveData(this.$element[0]); + this.$element.removeData('select2'); + + this.dataAdapter.destroy(); + this.selection.destroy(); + this.dropdown.destroy(); + this.results.destroy(); + + this.dataAdapter = null; + this.selection = null; + this.dropdown = null; + this.results = null; + }; + + Select2.prototype.render = function () { + var $container = $( + '<span class="select2 select2-container">' + + '<span class="selection"></span>' + + '<span class="dropdown-wrapper" aria-hidden="true"></span>' + + '</span>' + ); + + $container.attr('dir', this.options.get('dir')); + + this.$container = $container; + + this.$container.addClass('select2-container--' + this.options.get('theme')); + + Utils.StoreData($container[0], 'element', this.$element); + + return $container; + }; + + return Select2; +}); + +S2.define('select2/compat/utils',[ + 'jquery' +], function ($) { + function syncCssClasses ($dest, $src, adapter) { + var classes, replacements = [], adapted; + + classes = $.trim($dest.attr('class')); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each(function () { + // Save all Select2 classes + if (this.indexOf('select2-') === 0) { + replacements.push(this); + } + }); + } + + classes = $.trim($src.attr('class')); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each(function () { + // Only adapt non-Select2 classes + if (this.indexOf('select2-') !== 0) { + adapted = adapter(this); + + if (adapted != null) { + replacements.push(adapted); + } + } + }); + } + + $dest.attr('class', replacements.join(' ')); + } + + return { + syncCssClasses: syncCssClasses + }; +}); + +S2.define('select2/compat/containerCss',[ + 'jquery', + './utils' +], function ($, CompatUtils) { + // No-op CSS adapter that discards all classes by default + function _containerAdapter (clazz) { + return null; + } + + function ContainerCSS () { } + + ContainerCSS.prototype.render = function (decorated) { + var $container = decorated.call(this); + + var containerCssClass = this.options.get('containerCssClass') || ''; + + if ($.isFunction(containerCssClass)) { + containerCssClass = containerCssClass(this.$element); + } + + var containerCssAdapter = this.options.get('adaptContainerCssClass'); + containerCssAdapter = containerCssAdapter || _containerAdapter; + + if (containerCssClass.indexOf(':all:') !== -1) { + containerCssClass = containerCssClass.replace(':all:', ''); + + var _cssAdapter = containerCssAdapter; + + containerCssAdapter = function (clazz) { + var adapted = _cssAdapter(clazz); + + if (adapted != null) { + // Append the old one along with the adapted one + return adapted + ' ' + clazz; + } + + return clazz; + }; + } + + var containerCss = this.options.get('containerCss') || {}; + + if ($.isFunction(containerCss)) { + containerCss = containerCss(this.$element); + } + + CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter); + + $container.css(containerCss); + $container.addClass(containerCssClass); + + return $container; + }; + + return ContainerCSS; +}); + +S2.define('select2/compat/dropdownCss',[ + 'jquery', + './utils' +], function ($, CompatUtils) { + // No-op CSS adapter that discards all classes by default + function _dropdownAdapter (clazz) { + return null; + } + + function DropdownCSS () { } + + DropdownCSS.prototype.render = function (decorated) { + var $dropdown = decorated.call(this); + + var dropdownCssClass = this.options.get('dropdownCssClass') || ''; + + if ($.isFunction(dropdownCssClass)) { + dropdownCssClass = dropdownCssClass(this.$element); + } + + var dropdownCssAdapter = this.options.get('adaptDropdownCssClass'); + dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter; + + if (dropdownCssClass.indexOf(':all:') !== -1) { + dropdownCssClass = dropdownCssClass.replace(':all:', ''); + + var _cssAdapter = dropdownCssAdapter; + + dropdownCssAdapter = function (clazz) { + var adapted = _cssAdapter(clazz); + + if (adapted != null) { + // Append the old one along with the adapted one + return adapted + ' ' + clazz; + } + + return clazz; + }; + } + + var dropdownCss = this.options.get('dropdownCss') || {}; + + if ($.isFunction(dropdownCss)) { + dropdownCss = dropdownCss(this.$element); + } + + CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter); + + $dropdown.css(dropdownCss); + $dropdown.addClass(dropdownCssClass); + + return $dropdown; + }; + + return DropdownCSS; +}); + +S2.define('select2/compat/initSelection',[ + 'jquery' +], function ($) { + function InitSelection (decorated, $element, options) { + if (options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `initSelection` option has been deprecated in favor' + + ' of a custom data adapter that overrides the `current` method. ' + + 'This method is now called multiple times instead of a single ' + + 'time when the instance is initialized. Support will be removed ' + + 'for the `initSelection` option in future versions of Select2' + ); + } + + this.initSelection = options.get('initSelection'); + this._isInitialized = false; + + decorated.call(this, $element, options); + } + + InitSelection.prototype.current = function (decorated, callback) { + var self = this; + + if (this._isInitialized) { + decorated.call(this, callback); + + return; + } + + this.initSelection.call(null, this.$element, function (data) { + self._isInitialized = true; + + if (!$.isArray(data)) { + data = [data]; + } + + callback(data); + }); + }; + + return InitSelection; +}); + +S2.define('select2/compat/inputData',[ + 'jquery', + '../utils' +], function ($, Utils) { + function InputData (decorated, $element, options) { + this._currentData = []; + this._valueSeparator = options.get('valueSeparator') || ','; + + if ($element.prop('type') === 'hidden') { + if (options.get('debug') && console && console.warn) { + console.warn( + 'Select2: Using a hidden input with Select2 is no longer ' + + 'supported and may stop working in the future. It is recommended ' + + 'to use a `<select>` element instead.' + ); + } + } + + decorated.call(this, $element, options); + } + + InputData.prototype.current = function (_, callback) { + function getSelected (data, selectedIds) { + var selected = []; + + if (data.selected || $.inArray(data.id, selectedIds) !== -1) { + data.selected = true; + selected.push(data); + } else { + data.selected = false; + } + + if (data.children) { + selected.push.apply(selected, getSelected(data.children, selectedIds)); + } + + return selected; + } + + var selected = []; + + for (var d = 0; d < this._currentData.length; d++) { + var data = this._currentData[d]; + + selected.push.apply( + selected, + getSelected( + data, + this.$element.val().split( + this._valueSeparator + ) + ) + ); + } + + callback(selected); + }; + + InputData.prototype.select = function (_, data) { + if (!this.options.get('multiple')) { + this.current(function (allData) { + $.map(allData, function (data) { + data.selected = false; + }); + }); + + this.$element.val(data.id); + this.$element.trigger('input').trigger('change'); + } else { + var value = this.$element.val(); + value += this._valueSeparator + data.id; + + this.$element.val(value); + this.$element.trigger('input').trigger('change'); + } + }; + + InputData.prototype.unselect = function (_, data) { + var self = this; + + data.selected = false; + + this.current(function (allData) { + var values = []; + + for (var d = 0; d < allData.length; d++) { + var item = allData[d]; + + if (data.id == item.id) { + continue; + } + + values.push(item.id); + } + + self.$element.val(values.join(self._valueSeparator)); + self.$element.trigger('input').trigger('change'); + }); + }; + + InputData.prototype.query = function (_, params, callback) { + var results = []; + + for (var d = 0; d < this._currentData.length; d++) { + var data = this._currentData[d]; + + var matches = this.matches(params, data); + + if (matches !== null) { + results.push(matches); + } + } + + callback({ + results: results + }); + }; + + InputData.prototype.addOptions = function (_, $options) { + var options = $.map($options, function ($option) { + return Utils.GetData($option[0], 'data'); + }); + + this._currentData.push.apply(this._currentData, options); + }; + + return InputData; +}); + +S2.define('select2/compat/matcher',[ + 'jquery' +], function ($) { + function oldMatcher (matcher) { + function wrappedMatcher (params, data) { + var match = $.extend(true, {}, data); + + if (params.term == null || $.trim(params.term) === '') { + return match; + } + + if (data.children) { + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + // Check if the child object matches + // The old matcher returned a boolean true or false + var doesMatch = matcher(params.term, child.text, child); + + // If the child didn't match, pop it off + if (!doesMatch) { + match.children.splice(c, 1); + } + } + + if (match.children.length > 0) { + return match; + } + } + + if (matcher(params.term, data.text, data)) { + return match; + } + + return null; + } + + return wrappedMatcher; + } + + return oldMatcher; +}); + +S2.define('select2/compat/query',[ + +], function () { + function Query (decorated, $element, options) { + if (options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `query` option has been deprecated in favor of a ' + + 'custom data adapter that overrides the `query` method. Support ' + + 'will be removed for the `query` option in future versions of ' + + 'Select2.' + ); + } + + decorated.call(this, $element, options); + } + + Query.prototype.query = function (_, params, callback) { + params.callback = callback; + + var query = this.options.get('query'); + + query.call(null, params); + }; + + return Query; +}); + +S2.define('select2/dropdown/attachContainer',[ + +], function () { + function AttachContainer (decorated, $element, options) { + decorated.call(this, $element, options); + } + + AttachContainer.prototype.position = + function (decorated, $dropdown, $container) { + var $dropdownContainer = $container.find('.dropdown-wrapper'); + $dropdownContainer.append($dropdown); + + $dropdown.addClass('select2-dropdown--below'); + $container.addClass('select2-container--below'); + }; + + return AttachContainer; +}); + +S2.define('select2/dropdown/stopPropagation',[ + +], function () { + function StopPropagation () { } + + StopPropagation.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + var stoppedEvents = [ + 'blur', + 'change', + 'click', + 'dblclick', + 'focus', + 'focusin', + 'focusout', + 'input', + 'keydown', + 'keyup', + 'keypress', + 'mousedown', + 'mouseenter', + 'mouseleave', + 'mousemove', + 'mouseover', + 'mouseup', + 'search', + 'touchend', + 'touchstart' + ]; + + this.$dropdown.on(stoppedEvents.join(' '), function (evt) { + evt.stopPropagation(); + }); + }; + + return StopPropagation; +}); + +S2.define('select2/selection/stopPropagation',[ + +], function () { + function StopPropagation () { } + + StopPropagation.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + var stoppedEvents = [ + 'blur', + 'change', + 'click', + 'dblclick', + 'focus', + 'focusin', + 'focusout', + 'input', + 'keydown', + 'keyup', + 'keypress', + 'mousedown', + 'mouseenter', + 'mouseleave', + 'mousemove', + 'mouseover', + 'mouseup', + 'search', + 'touchend', + 'touchstart' + ]; + + this.$selection.on(stoppedEvents.join(' '), function (evt) { + evt.stopPropagation(); + }); + }; + + return StopPropagation; +}); + +/*! + * jQuery Mousewheel 3.1.13 + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + */ + +(function (factory) { + if ( typeof S2.define === 'function' && S2.define.amd ) { + // AMD. Register as an anonymous module. + S2.define('jquery-mousewheel',['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS style for Browserify + module.exports = factory; + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], + toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? + ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], + slice = Array.prototype.slice, + nullLowestDeltaTimeout, lowestDelta; + + if ( $.event.fixHooks ) { + for ( var i = toFix.length; i; ) { + $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; + } + } + + var special = $.event.special.mousewheel = { + version: '3.1.12', + + setup: function() { + if ( this.addEventListener ) { + for ( var i = toBind.length; i; ) { + this.addEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + // Store the line height and page height for this particular element + $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); + $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i = toBind.length; i; ) { + this.removeEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + // Clean up the data we added to the element + $.removeData(this, 'mousewheel-line-height'); + $.removeData(this, 'mousewheel-page-height'); + }, + + getLineHeight: function(elem) { + var $elem = $(elem), + $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent'](); + if (!$parent.length) { + $parent = $('body'); + } + return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16; + }, + + getPageHeight: function(elem) { + return $(elem).height(); + }, + + settings: { + adjustOldDeltas: true, // see shouldAdjustOldDeltas() below + normalizeOffset: true // calls getBoundingClientRect for each event + } + }; + + $.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); + }, + + unmousewheel: function(fn) { + return this.unbind('mousewheel', fn); + } + }); + + + function handler(event) { + var orgEvent = event || window.event, + args = slice.call(arguments, 1), + delta = 0, + deltaX = 0, + deltaY = 0, + absDelta = 0, + offsetX = 0, + offsetY = 0; + event = $.event.fix(orgEvent); + event.type = 'mousewheel'; + + // Old school scrollwheel delta + if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } + if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } + if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } + if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } + + // Firefox < 17 horizontal scrolling related to DOMMouseScroll event + if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaX = deltaY * -1; + deltaY = 0; + } + + // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy + delta = deltaY === 0 ? deltaX : deltaY; + + // New school wheel delta (wheel event) + if ( 'deltaY' in orgEvent ) { + deltaY = orgEvent.deltaY * -1; + delta = deltaY; + } + if ( 'deltaX' in orgEvent ) { + deltaX = orgEvent.deltaX; + if ( deltaY === 0 ) { delta = deltaX * -1; } + } + + // No change actually happened, no reason to go any further + if ( deltaY === 0 && deltaX === 0 ) { return; } + + // Need to convert lines and pages to pixels if we aren't already in pixels + // There are three delta modes: + // * deltaMode 0 is by pixels, nothing to do + // * deltaMode 1 is by lines + // * deltaMode 2 is by pages + if ( orgEvent.deltaMode === 1 ) { + var lineHeight = $.data(this, 'mousewheel-line-height'); + delta *= lineHeight; + deltaY *= lineHeight; + deltaX *= lineHeight; + } else if ( orgEvent.deltaMode === 2 ) { + var pageHeight = $.data(this, 'mousewheel-page-height'); + delta *= pageHeight; + deltaY *= pageHeight; + deltaX *= pageHeight; + } + + // Store lowest absolute delta to normalize the delta values + absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); + + if ( !lowestDelta || absDelta < lowestDelta ) { + lowestDelta = absDelta; + + // Adjust older deltas if necessary + if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { + lowestDelta /= 40; + } + } + + // Adjust older deltas if necessary + if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { + // Divide all the things by 40! + delta /= 40; + deltaX /= 40; + deltaY /= 40; + } + + // Get a whole, normalized value for the deltas + delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); + deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); + deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); + + // Normalise offsetX and offsetY properties + if ( special.settings.normalizeOffset && this.getBoundingClientRect ) { + var boundingRect = this.getBoundingClientRect(); + offsetX = event.clientX - boundingRect.left; + offsetY = event.clientY - boundingRect.top; + } + + // Add information to the event object + event.deltaX = deltaX; + event.deltaY = deltaY; + event.deltaFactor = lowestDelta; + event.offsetX = offsetX; + event.offsetY = offsetY; + // Go ahead and set deltaMode to 0 since we converted to pixels + // Although this is a little odd since we overwrite the deltaX/Y + // properties with normalized deltas. + event.deltaMode = 0; + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + // Clearout lowestDelta after sometime to better + // handle multiple device types that give different + // a different lowestDelta + // Ex: trackpad = 3 and mouse wheel = 120 + if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } + nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); + + return ($.event.dispatch || $.event.handle).apply(this, args); + } + + function nullLowestDelta() { + lowestDelta = null; + } + + function shouldAdjustOldDeltas(orgEvent, absDelta) { + // If this is an older event and the delta is divisable by 120, + // then we are assuming that the browser is treating this as an + // older mouse wheel event and that we should divide the deltas + // by 40 to try and get a more usable deltaFactor. + // Side note, this actually impacts the reported scroll distance + // in older browsers and can cause scrolling to be slower than native. + // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. + return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; + } + +})); + +S2.define('jquery.select2',[ + 'jquery', + 'jquery-mousewheel', + + './select2/core', + './select2/defaults', + './select2/utils' +], function ($, _, Select2, Defaults, Utils) { + if ($.fn.select2 == null) { + // All methods that should return the element + var thisMethods = ['open', 'close', 'destroy']; + + $.fn.select2 = function (options) { + options = options || {}; + + if (typeof options === 'object') { + this.each(function () { + var instanceOptions = $.extend(true, {}, options); + + var instance = new Select2($(this), instanceOptions); + }); + + return this; + } else if (typeof options === 'string') { + var ret; + var args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var instance = Utils.GetData(this, 'select2'); + + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } + + ret = instance[options].apply(instance, args); + }); + + // Check if we should be returning `this` + if ($.inArray(options, thisMethods) > -1) { + return this; + } + + return ret; + } else { + throw new Error('Invalid arguments for Select2: ' + options); + } + }; + } + + if ($.fn.select2.defaults == null) { + $.fn.select2.defaults = Defaults; + } + + return Select2; +}); + + // Return the AMD loader configuration so it can be used outside of this file + return { + define: S2.define, + require: S2.require + }; +}()); + + // Autoload the jQuery bindings + // We know that all of the modules exist above this, so we're safe + var select2 = S2.require('jquery.select2'); + + // Hold the AMD module references on the jQuery function that was just loaded + // This allows Select2 to use the internal loader outside of this file, such + // as in the language files. + jQuery.fn.select2.amd = S2; + + // Return the Select2 instance for anyone who is importing it. + return select2; +})); diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js new file mode 100644 index 000000000..fa781916e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js @@ -0,0 +1,2 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ +!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u<e.length;u++)if("."===(p=e[u]))e.splice(u,1),u-=1;else if(".."===p){if(0===u||1===u&&".."===e[2]||".."===e[u-1])continue;0<u&&(e.splice(u-1,2),u-=2)}e=e.join("/")}if((h||g)&&f){for(u=(n=e.split("/")).length;0<u;u-=1){if(i=n.slice(0,u).join("/"),h)for(d=h.length;0<d;d-=1)if(r=(r=f[h.slice(0,d).join("/")])&&r[i]){o=r,a=u;break}if(o)break;!l&&g&&g[i]&&(l=g[i],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join("/"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return"string"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!b(m,e)&&!b(_,e))throw new Error("No "+e);return m[e]}function u(e){var t,n=e?e.indexOf("!"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?u(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},r=Object.prototype.hasOwnProperty,a=[].slice,w=/\.js$/,f=function(e,t){var n,i=u(e),r=i[0],o=t[1];return e=i[1],r&&(n=D(r=c(r,o))),r?e=n&&n.normalize?n.normalize(e,function(t){return function(e){return c(e,t)}}(o)):c(e,o):(r=(i=u(e=c(e,o)))[0],e=i[1],r&&(n=D(r))),{f:r?r+"!"+e:e,n:e,pr:r,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:"",exports:m[e],config:function(e){return function(){return y&&y.config&&y.config[e]||{}}}(e)}}},o=function(e,t,n,i){var r,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(i=i||e),"undefined"==p||"function"==p){for(t=!t.length&&n.length?["require","exports","module"]:t,l=0;l<t.length;l+=1)if("require"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if("exports"===o)d[l]=g.exports(e),u=!0;else if("module"===o)r=d[l]=g.module(e);else if(b(m,o)||b(v,o)||b(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+" missing "+o);a.p.load(a.n,A(i,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(r&&r.exports!==h&&r.exports!==m[e]?m[e]=r.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,i,r){if("string"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},"function"==typeof n&&(n=i,i=r),i?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(i=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),b(m,e)||b(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=i),e.define("almond",function(){}),e.define("jquery",[],function(){var e=d||$;return null==e&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),e}),e.define("select2/utils",["jquery"],function(o){var r={};function u(e){var t=e.prototype,n=[];for(var i in t){"function"==typeof t[i]&&"constructor"!==i&&n.push(i)}return n}r.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},r.Decorate=function(i,r){var e=u(r),t=u(i);function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.length,n=i.prototype.constructor;0<t&&(e.call(arguments,i.prototype.constructor),n=r.prototype.constructor),n.apply(this,arguments)}r.displayName=i.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n<t.length;n++){var s=t[n];o.prototype[s]=i.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=r.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l<e.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,i=e.length;n<i;n++)e[n].apply(this,t)},r.Observable=e,r.generateChars=function(e){for(var t="",n=0;n<e;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},r.bind=function(e,t){return function(){e.apply(t,arguments)}},r._convertData=function(e){for(var t in e){var n=t.split("-"),i=e;if(1!==n.length){for(var r=0;r<n.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},r.hasScroll=function(e,t){var n=o(t),i=t.style.overflowX,r=t.style.overflowY;return(i!==r||"hidden"!==r&&"visible"!==r)&&("scroll"===i||"scroll"===r||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},r.escapeMarkup=function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},r.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute("data-select2-id")},r}),e.define("select2/results",["jquery","./utils"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('<ul class="select2-results__options" role="listbox"></ul>');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h('<li role="alert" aria-live="assertive" class="select2-results__option"></li>'),i=this.options.get("translations").get(e.message);n.append(t(i(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},i.prototype.position=function(e,t){t.find(".select2-results").append(e)},i.prototype.sort=function(e){return this.options.get("sorter")(e)},i.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option[aria-selected]"),t=e.filter("[aria-selected=true]");0<t.length?t.first().trigger("mouseenter"):e.first().trigger("mouseenter"),this.ensureHighlightVisible()},i.prototype.setClasses=function(){var t=this;this.data.current(function(e){var i=h.map(e,function(e){return e.id.toString()});t.$results.find(".select2-results__option[aria-selected]").each(function(){var e=h(this),t=f.GetData(this,"data"),n=""+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<h.inArray(n,i)?e.attr("aria-selected","true"):e.attr("aria-selected","false")})})},i.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},n=this.option(t);n.className+=" loading-results",this.$results.prepend(n)},i.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},i.prototype.option=function(e){var t=document.createElement("li");t.className="select2-results__option";var n={role:"option","aria-selected":"false"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var r in(null!=e.element&&i.call(e.element,":disabled")||null==e.element&&e.disabled)&&(delete n["aria-selected"],n["aria-disabled"]="true"),null==e.id&&delete n["aria-selected"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role="group",n["aria-label"]=e.text,delete n["aria-selected"]),n){var o=n[r];t.setAttribute(r,o)}if(e.children){var s=h(t),a=document.createElement("strong");a.className="select2-results__group";h(a);this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger("mouseenter");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):r<o&&l.$results.scrollTop(s)}}),t.on("results:focus",function(e){e.element.addClass("select2-results__option--highlighted")}),t.on("results:message",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,i=0<e.deltaY&&t-e.deltaY<=0,r=e.deltaY<0&&n<=l.$results.height();i?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):r&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(e){var t=h(this),n=f.GetData(this,"data");"true"!==t.attr("aria-selected")?l.trigger("select",{originalEvent:e,data:n}):l.options.get("multiple")?l.trigger("unselect",{originalEvent:e,data:n}):l.trigger("close",{})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(e){var t=f.GetData(this,"data");l.getHighlightedResults().removeClass("select2-results__option--highlighted"),l.trigger("results:focus",{data:t,element:h(this)})})},i.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},i.prototype.destroy=function(){this.$results.remove()},i.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find("[aria-selected]").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get("templateResult"),i=this.options.get("escapeMarkup"),r=n(e,t);null==r?t.style.display="none":"string"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=i.GetData(this.$element[0],"old-tabindex")?this._tabindex=i.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===r.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",i),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&i.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("<span></span>")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr("title",r):n.removeAttr("title")}else this.clear()},r}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){i.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],"data");i.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return r('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n<e.length;n++){var i=e[n],r=this.selectionContainer(),o=this.display(i,r);r.append(o);var s=i.title||i.text;s&&r.attr("title",s),l.StoreData(r[0],"data",i),t.push(r)}var a=this.$selection.find(".select2-selection__rendered");l.appendMany(a,t)}},n}),e.define("select2/selection/placeholder",["../utils"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(i)},t}),e.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(r,i,a){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(e){i._handleClear(e)}),t.on("keypress",function(e){i._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){t.stopPropagation();var i=a.GetData(n[0],"data"),r=this.$element.val();this.$element.val(this.placeholder.id);var o={data:i};if(this.trigger("clear",o),o.prevented)this.$element.val(r);else{for(var s=0;s<i.length;s++)if(o={data:i[s]},this.trigger("unselect",o),o.prevented)return void this.$element.val(r);this.$element.trigger("input").trigger("change"),this.trigger("toggle",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=i.DELETE&&t.which!=i.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0<this.$selection.find(".select2-selection__placeholder").length||0===t.length)){var n=this.options.get("translations").get("removeAllItems"),i=r('<span class="select2-selection__clear" title="'+n()+'">×</span>');a.StoreData(i[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(i)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></li>');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),t.on("open",function(){i.$search.attr("aria-controls",r),i.$search.trigger("focus")}),t.on("close",function(){i.$search.val(""),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.trigger("focus")}),t.on("enable",function(){i.$search.prop("disabled",!1),i._transferTabIndex()}),t.on("disable",function(){i.$search.prop("disabled",!0)}),t.on("focus",function(e){i.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){i.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){i._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===i.$search.val()){var t=i.$searchContainer.prev(".select2-selection__choice");if(0<t.length){var n=a.GetData(t[0],"data");i.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on("click",".select2-search--inline",function(e){i.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){s?i.$selection.off("input.search input.searchcheck"):i.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){if(s&&"input"===e.type)i.$selection.off("input.search input.searchcheck");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&i.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="";""!==this.$search.attr("placeholder")?e=this.$selection.find(".select2-selection__rendered").width():e=.75*(this.$search.val().length+1)+"em";this.$search.css("width",e)},e}),e.define("select2/selection/eventRelay",["jquery"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var i=this,r=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],o=["opening","closing","selecting","unselecting","clearing"];e.call(this,t,n),t.on("*",function(e,t){if(-1!==s.inArray(e,r)){t=t||{};var n=s.Event("select2:"+e,{params:t});i.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define("select2/translation",["jquery","require"],function(t,n){function i(e){this.dict=e||{}}return i.prototype.all=function(){return this.dict},i.prototype.get=function(e){return this.dict[e]},i.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},i._cache={},i.loadPath=function(e){if(!(e in i._cache)){var t=n(e);i._cache[e]=t}return new i(i._cache[e])},i}),e.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),e.define("select2/data/base",["../utils"],function(i){function n(e,t){n.__super__.constructor.call(this)}return i.Extend(n,i.Observable),n.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},n.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+"-result-";return n+=i.generateChars(4),null!=t.id?n+="-"+t.id.toString():n+="-"+i.generateChars(4),n},n}),e.define("select2/data/select",["./base","../utils","jquery"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],i=this;this.$element.find(":selected").each(function(){var e=l(this),t=i.item(e);n.push(t)}),e(n)},n.prototype.select=function(r){var o=this;if(r.selected=!0,l(r.element).is("option"))return r.element.selected=!0,void this.$element.trigger("input").trigger("change");if(this.$element.prop("multiple"))this.current(function(e){var t=[];(r=[r]).push.apply(r,e);for(var n=0;n<r.length;n++){var i=r[n].id;-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger("input").trigger("change")});else{var e=r.id;this.$element.val(e),this.$element.trigger("input").trigger("change")}},n.prototype.unselect=function(r){var o=this;if(this.$element.prop("multiple")){if(r.selected=!1,l(r.element).is("option"))return r.element.selected=!1,void this.$element.trigger("input").trigger("change");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n].id;i!==r.id&&-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger("input").trigger("change")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find("*").each(function(){a.RemoveData(this)})},n.prototype.query=function(i,e){var r=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is("option")||e.is("optgroup")){var t=o.item(e),n=o.matches(i,t);null!==n&&r.push(n)}}),e({results:r})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement("optgroup")).label=e.text:void 0!==(t=document.createElement("option")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),i=this._normalizeItem(e);return i.element=t,a.StoreData(t,"data",i),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],"data")))return t;if(e.is("option"))t={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if(e.is("optgroup")){t={text:e.prop("label"),children:[],title:e.prop("title")};for(var n=e.children("option"),i=[],r=0;r<n.length;r++){var o=l(n[r]),s=this.item(o);i.push(s)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],"data",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},n}),e.define("select2/data/array",["./select","../utils","jquery"],function(e,f,g){function i(e,t){this._dataToConvert=t.get("data")||[],i.__super__.constructor.call(this,e,t)}return f.Extend(i,e),i.prototype.bind=function(e,t){i.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},i.prototype.select=function(n){var e=this.$element.find("option").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),i.__super__.select.call(this,n)},i.prototype.convertToOptions=function(e){var t=this,n=this.$element.find("option"),i=n.map(function(){return t.item(g(this)).id}).get(),r=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s<e.length;s++){var a=this._normalizeItem(e[s]);if(0<=g.inArray(a.id,i)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}r.push(p)}}return r},i}),e.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var i=o.ajax(e);return i.then(t),i.fail(n),i}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,i){var r=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:"GET"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n);r.options.get("debug")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),i(t)},function(){"status"in e&&(0===e.status||"0"===e.status)||r.trigger("results:message",{message:"errorLoading"})});r._request=e}"function"==typeof t.url&&(t.url=t.url.call(this.$element,n)),"function"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define("select2/data/tags",["jquery"],function(u){function e(e,t,n){var i=n.get("tags"),r=n.get("createTag");void 0!==r&&(this.createTag=r);var o=n.get("insertTag");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(i))for(var s=0;s<i.length;s++){var a=i[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var i=t.results,r=0;r<i.length;r++){var o=i[r],s=null!=o.children&&!e({results:o.children},!0);if((o.text||"").toUpperCase()===(c.term||"").toUpperCase()||s)return!n&&(t.data=i,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr("data-select2-tag",!0),d.addOptions([l]),d.insertTag(i,a)}t.results=i,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return""===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find("option[data-select2-tag]").each(function(){this.selected||u(this).remove()})},e}),e.define("select2/data/tokenizer",["jquery"],function(d){function e(e,t,n){var i=n.get("tokenizer");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||"";var r=this.tokenizer(t,this.options,function(e){var t=i._normalizeItem(e);if(!i.$element.find("option").filter(function(){return d(this).val()===t.id}).length){var n=i.option(t);n.attr("data-select2-tag",!0),i._removeOldTags(),i.addOptions([n])}!function(e){i.trigger("select",{data:e})}(t)});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger("focus")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,i){for(var r=n.get("tokenSeparators")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s<o.length;){var l=o[s];if(-1!==d.inArray(l,r)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(i(u),o=o.substr(s+1)||"",s=0):s++}else s++}return{term:o}},e}),e.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0<i.maximumSelectionLength&&t>=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class="select2-dropdown"><span class="select2-results"></span></span>');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){i.handleSearch(e)}),t.on("open",function(){i.$search.attr("tabindex",0),i.$search.attr("aria-controls",r),i.$search.trigger("focus"),window.setTimeout(function(){i.$search.trigger("focus")},0)}),t.on("close",function(){i.$search.attr("tabindex",-1),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.val(""),i.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||i.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass("select2-search--hide"):i.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0<=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("query",function(e){i.lastParams=e,i.loading=!0}),t.on("query:append",function(e){i.lastParams=e,i.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f("<span></span>"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i="scroll.select2."+t.id,r="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(i+" "+r+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+i+" "+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<r.top-s,u=l>r.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i="below"),u||!c||t?!c&&u&&t&&(i="below"):i="above",("above"==i||t&&"below"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+i),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i<t.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),e.define("select2/dropdown/selectOnClose",["../utils"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("close",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if("select"===n._type||"unselect"===n._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var r=o.GetData(i[0],"data");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger("select",{data:r})}},e}),e.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(e){i._selectTriggered(e)}),t.on("unselect",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return 1!=t&&(n+="s"),n},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,w,$,b,A,x,D,S,C,E,O,T,q,j,L,I,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=$:null!=e.data?e.dataAdapter=w:e.dataAdapter=_,0<e.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0<e.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0<e.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,b)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+"compat/query");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+"compat/initSelection");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,L))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=C;else{var i=y.Decorate(C,E);e.dropdownAdapter=i}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,I)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var r=u(e.amdBase+"compat/dropdownCss");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,r)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+"compat/containerCss");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push("en");for(var s=[],a=0;a<e.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return t[e]||e})}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(""===c.trim(t.term))return n;if(n.children&&0<n.children.length){for(var i=c.extend(!0,{},n),r=n.children.length-1;0<=r;r--)null==e(t,n.children[r])&&i.children.splice(r,1);return 0<i.children.length?i:e(t,i)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1<o.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},n.prototype.applyFromElement=function(e,t){var n=e.language,i=this.defaults.language,r=t.prop("lang"),o=t.closest("[lang]").prop("lang"),s=Array.prototype.concat.call(this._resolveLanguage(r),this._resolveLanguage(n),this._resolveLanguage(i),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],i=0;i<t.length;i++)if(n.push(t[i]),"string"==typeof t[i]&&0<t[i].indexOf("-")){var r=t[i].split("-")[0];n.push(r)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,i=0;i<e.length;i++){var r=new s,o=e[i];if("string"==typeof o)try{r=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,r=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for "'+o+'" could not be automatically loaded. A fallback will be used instead.')}}else r=c.isPlainObject(o)?new s(o):o;n.extend(r)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var i=y._convertData(n);c.extend(!0,this.defaults,i)},new n}),e.define("select2/options",["require","jquery","./defaults","./utils"],function(i,d,r,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=r.applyFromElement(this.options,t)),this.options=r.apply(this.options),t&&t.is("input")){var n=i(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),p.GetData(e[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],"data",p.GetData(e[0],"select2Tags")),p.StoreData(e[0],"tags",!0)),p.GetData(e[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),e.attr("ajax--url",p.GetData(e[0],"ajaxUrl")),p.StoreData(e[0],"ajax-Url",p.GetData(e[0],"ajaxUrl")));var n={};function i(e,t){return t.toUpperCase()}for(var r=0;r<e[0].attributes.length;r++){var o=e[0].attributes[r].name,s="data-";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(/-([a-z])/g,i)]=l}}d.fn.jquery&&"1."==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1<d.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define("select2/core",["jquery","./options","./utils","./keys"],function(o,c,u,i){var d=function(e,t){null!=u.GetData(e[0],"select2")&&u.GetData(e[0],"select2").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr("tabindex")||0;u.StoreData(e[0],"old-tabindex",n),e.attr("tabindex","-1");var i=this.options.get("dataAdapter");this.dataAdapter=new i(e,this.options);var r=this.render();this._placeContainer(r);var o=this.options.get("selectionAdapter");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,r);var s=this.options.get("dropdownAdapter");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,r);var a=this.options.get("resultsAdapter");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger("selection:update",{data:e})}),e.addClass("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),u.StoreData(e[0],"select2",this),e.data("select2",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return"select2-"+(null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+u.generateChars(2):u.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},d.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var i=this._resolveWidth(e,"style");return null!=i?i:this._resolveWidth(e,"element")}if("element"==t){var r=e.outerWidth(!1);return r<=0?"auto":r+"px"}if("style"!=t)return"computedstyle"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr("style");if("string"!=typeof o)return null;for(var s=o.split(";"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\s/g,"").match(n);if(null!==c&&1<=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",t._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",t._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,i=["toggle","focus"];this.selection.on("toggle",function(){n.toggleDropdown()}),this.selection.on("focus",function(e){n.focus(e)}),this.selection.on("*",function(e,t){-1===o.inArray(e,i)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on("open",function(){n.$container.addClass("select2-container--open")}),this.on("close",function(){n.$container.removeClass("select2-container--open")}),this.on("enable",function(){n.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){n.$container.addClass("select2-container--disabled")}),this.on("blur",function(){n.$container.removeClass("select2-container--focus")}),this.on("query",function(t){n.isOpen()||n.trigger("open",{}),this.dataAdapter.query(t,function(e){n.trigger("results:all",{data:e,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(e){n.trigger("results:append",{data:e,query:t})})}),this.on("keypress",function(e){var t=e.which;n.isOpen()?t===i.ESC||t===i.TAB||t===i.UP&&e.altKey?(n.close(e),e.preventDefault()):t===i.ENTER?(n.trigger("results:select",{}),e.preventDefault()):t===i.SPACE&&e.ctrlKey?(n.trigger("results:toggle",{}),e.preventDefault()):t===i.UP?(n.trigger("results:previous",{}),e.preventDefault()):t===i.DOWN&&(n.trigger("results:next",{}),e.preventDefault()):(t===i.ENTER||t===i.SPACE||t===i.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,i=this;if(!e||!e.target||"OPTION"===e.target.nodeName||"OPTGROUP"===e.target.nodeName){if(t)if(t.addedNodes&&0<t.addedNodes.length)for(var r=0;r<t.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&0<t.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(i._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),i=this;n&&this.dataAdapter.current(function(e){i.trigger("selection:update",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,i={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===t&&(t={}),e in i){var r=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,r,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger("query",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger("close",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get("disabled")},d.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},d.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},d.prototype.enable=function(e){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop("disabled",t)},d.prototype.data=function(){this.options.get("debug")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger("input").trigger("change")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",u.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),u.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("select2/compat/utils",["jquery"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0===this.indexOf("select2-")&&o.push(this)}),(i=s.trim(t.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(r=n(this))&&o.push(r)}),e.attr("class",o.join(" "))}}}),e.define("select2/compat/containerCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("containerCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptContainerCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("containerCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/dropdownCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("dropdownCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptDropdownCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("dropdownCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/initSelection",["jquery"],function(i){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=n.get("initSelection"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define("select2/compat/inputData",["jquery","../utils"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get("valueSeparator")||",","hidden"===t.prop("type")&&n.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),e.call(this,t,n)}return e.prototype.current=function(e,t){function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.selected=!0,n.push(e)):e.selected=!1,e.children&&n.push.apply(n,i(e.children,t)),n}for(var n=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r];n.push.apply(n,i(o,this.$element.val().split(this._valueSeparator)))}t(n)},e.prototype.select=function(e,t){if(this.options.get("multiple")){var n=this.$element.val();n+=this._valueSeparator+t.id,this.$element.val(n),this.$element.trigger("input").trigger("change")}else this.current(function(e){s.map(e,function(e){e.selected=!1})}),this.$element.val(t.id),this.$element.trigger("input").trigger("change")},e.prototype.unselect=function(e,r){var o=this;r.selected=!1,this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];r.id!=i.id&&t.push(i.id)}o.$element.val(t.join(o._valueSeparator)),o.$element.trigger("input").trigger("change")})},e.prototype.query=function(e,t,n){for(var i=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},e.prototype.addOptions=function(e,t){var n=s.map(t,function(e){return i.GetData(e[0],"data")});this._currentData.push.apply(this._currentData,n)},e}),e.define("select2/compat/matcher",["jquery"],function(s){return function(o){return function(e,t){var n=s.extend(!0,{},t);if(null==e.term||""===s.trim(e.term))return n;if(t.children){for(var i=t.children.length-1;0<=i;i--){var r=t.children[i];o(e.term,r.text,r)||n.children.splice(i,1)}if(0<n.children.length)return n}return o(e.term,t.text,t)?n:null}}}),e.define("select2/compat/query",[],function(){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get("query").call(null,t)},e}),e.define("select2/dropdown/attachContainer",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(".dropdown-wrapper").append(t),t.addClass("select2-dropdown--below"),n.addClass("select2-container--below")},e}),e.define("select2/dropdown/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),e.define("select2/selection/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),l=function(p){var h,f,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],t="onwheel"in document||9<=document.documentMode?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],g=Array.prototype.slice;if(p.event.fixHooks)for(var n=e.length;n;)p.event.fixHooks[e[--n]]=p.event.mouseHooks;var m=p.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],i,!1);else this.onmousewheel=i;p.data(this,"mousewheel-line-height",m.getLineHeight(this)),p.data(this,"mousewheel-page-height",m.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],i,!1);else this.onmousewheel=null;p.removeData(this,"mousewheel-line-height"),p.removeData(this,"mousewheel-page-height")},getLineHeight:function(e){var t=p(e),n=t["offsetParent"in p.fn?"offsetParent":"parent"]();return n.length||(n=p("body")),parseInt(n.css("fontSize"),10)||parseInt(t.css("fontSize"),10)||16},getPageHeight:function(e){return p(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,a=0,l=0;if((e=p.event.fix(n)).type="mousewheel","detail"in n&&(s=-1*n.detail),"wheelDelta"in n&&(s=n.wheelDelta),"wheelDeltaY"in n&&(s=n.wheelDeltaY),"wheelDeltaX"in n&&(o=-1*n.wheelDeltaX),"axis"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*s,s=0),r=0===s?o:s,"deltaY"in n&&(r=s=-1*n.deltaY),"deltaX"in n&&(o=n.deltaX,0===s&&(r=-1*o)),0!==s||0!==o){if(1===n.deltaMode){var c=p.data(this,"mousewheel-line-height");r*=c,s*=c,o*=c}else if(2===n.deltaMode){var u=p.data(this,"mousewheel-page-height");r*=u,s*=u,o*=u}if(t=Math.max(Math.abs(s),Math.abs(o)),(!f||t<f)&&y(n,f=t)&&(f/=40),y(n,t)&&(r/=40,o/=40,s/=40),r=Math[1<=r?"floor":"ceil"](r/f),o=Math[1<=o?"floor":"ceil"](o/f),s=Math[1<=s?"floor":"ceil"](s/f),m.settings.normalizeOffset&&this.getBoundingClientRect){var d=this.getBoundingClientRect();a=e.clientX-d.left,l=e.clientY-d.top}return e.deltaX=o,e.deltaY=s,e.deltaFactor=f,e.offsetX=a,e.offsetY=l,e.deltaMode=0,i.unshift(e,r,o,s),h&&clearTimeout(h),h=setTimeout(v,200),(p.event.dispatch||p.event.handle).apply(this,i)}}function v(){f=null}function y(e,t){return m.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}p.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})},"function"==typeof e.define&&e.define.amd?e.define("jquery-mousewheel",["jquery"],l):"object"==typeof exports?module.exports=l:l(d),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(r,e,o,t,s){if(null==r.fn.select2){var a=["open","close","destroy"];r.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new o(r(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,i)}),-1<r.inArray(t,a)?this:n}}return null==r.fn.select2.defaults&&(r.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require("jquery.select2");return d.fn.select2.amd=e,t}); \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt new file mode 100644 index 000000000..43f08b4c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js new file mode 100644 index 000000000..ded6f6faa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js @@ -0,0 +1,4652 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.XRegExp = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +/*! + * XRegExp.build 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2012-2017 MIT License + * Inspired by Lea Verou's RegExp.create <lea.verou.me> + */ + +module.exports = function(XRegExp) { + 'use strict'; + + var REGEX_DATA = 'xregexp'; + var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g', { + conjunction: 'or' + }); + + /** + * Strips a leading `^` and trailing unescaped `$`, if both are present. + * + * @private + * @param {String} pattern Pattern to process. + * @returns {String} Pattern with edge anchors removed. + */ + function deanchor(pattern) { + // Allow any number of empty noncapturing groups before/after anchors, because regexes + // built/generated by XRegExp sometimes include them + var leadingAnchor = /^(?:\(\?:\))*\^/; + var trailingAnchor = /\$(?:\(\?:\))*$/; + + if ( + leadingAnchor.test(pattern) && + trailingAnchor.test(pattern) && + // Ensure that the trailing `$` isn't escaped + trailingAnchor.test(pattern.replace(/\\[\s\S]/g, '')) + ) { + return pattern.replace(leadingAnchor, '').replace(trailingAnchor, ''); + } + + return pattern; + } + + /** + * Converts the provided value to an XRegExp. Native RegExp flags are not preserved. + * + * @private + * @param {String|RegExp} value Value to convert. + * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not + * already a regex generated by XRegExp + * @returns {RegExp} XRegExp object with XRegExp syntax applied. + */ + function asXRegExp(value, addFlagX) { + var flags = addFlagX ? 'x' : ''; + return XRegExp.isRegExp(value) ? + (value[REGEX_DATA] && value[REGEX_DATA].captureNames ? + // Don't recompile, to preserve capture names + value : + // Recompile as XRegExp + XRegExp(value.source, flags) + ) : + // Compile string as XRegExp + XRegExp(value, flags); + } + + /** + * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in + * the outer pattern and provided subpatterns are automatically renumbered to work correctly. + * Native flags used by provided subpatterns are ignored in favor of the `flags` argument. + * + * @memberOf XRegExp + * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows + * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within + * character classes. + * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A + * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Regex with interpolated subpatterns. + * @example + * + * var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { + * hours: XRegExp.build('{{h12}} : | {{h24}}', { + * h12: /1[0-2]|0?[1-9]/, + * h24: /2[0-3]|[01][0-9]/ + * }, 'x'), + * minutes: /^[0-5][0-9]$/ + * }); + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + XRegExp.build = function(pattern, subs, flags) { + flags = flags || ''; + // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how + // some browsers convert `RegExp('\n')` to a regex that contains the literal characters `\` + // and `n`. See more details at <https://github.com/slevithan/xregexp/pull/163>. + var addFlagX = flags.indexOf('x') > -1; + var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern); + // Add flags within a leading mode modifier to the overall pattern's flags + if (inlineFlags) { + flags = XRegExp._clipDuplicates(flags + inlineFlags[1]); + } + + var data = {}; + for (var p in subs) { + if (subs.hasOwnProperty(p)) { + // Passing to XRegExp enables extended syntax and ensures independent validity, + // lest an unescaped `(`, `)`, `[`, or trailing `\` breaks the `(?:)` wrapper. For + // subpatterns provided as native regexes, it dies on octals and adds the property + // used to hold extended regex instance data, for simplicity. + var sub = asXRegExp(subs[p], addFlagX); + data[p] = { + // Deanchoring allows embedding independently useful anchored regexes. If you + // really need to keep your anchors, double them (i.e., `^^...$$`). + pattern: deanchor(sub.source), + names: sub[REGEX_DATA].captureNames || [] + }; + } + } + + // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid; + // helps keep this simple. Named captures will be put back. + var patternAsRegex = asXRegExp(pattern, addFlagX); + + // 'Caps' is short for 'captures' + var numCaps = 0; + var numPriorCaps; + var numOuterCaps = 0; + var outerCapsMap = [0]; + var outerCapNames = patternAsRegex[REGEX_DATA].captureNames || []; + var output = patternAsRegex.source.replace(parts, function($0, $1, $2, $3, $4) { + var subName = $1 || $2; + var capName; + var intro; + var localCapIndex; + // Named subpattern + if (subName) { + if (!data.hasOwnProperty(subName)) { + throw new ReferenceError('Undefined property ' + $0); + } + // Named subpattern was wrapped in a capturing group + if ($1) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + // If it's a named group, preserve the name. Otherwise, use the subpattern name + // as the capture name + intro = '(?<' + (capName || subName) + '>'; + } else { + intro = '(?:'; + } + numPriorCaps = numCaps; + return intro + data[subName].pattern.replace(subParts, function(match, paren, backref) { + // Capturing group + if (paren) { + capName = data[subName].names[numCaps - numPriorCaps]; + ++numCaps; + // If the current capture has a name, preserve the name + if (capName) { + return '(?<' + capName + '>'; + } + // Backreference + } else if (backref) { + localCapIndex = +backref - 1; + // Rewrite the backreference + return data[subName].names[localCapIndex] ? + // Need to preserve the backreference name in case using flag `n` + '\\k<' + data[subName].names[localCapIndex] + '>' : + '\\' + (+backref + numPriorCaps); + } + return match; + }) + ')'; + } + // Capturing group + if ($3) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + // If the current capture has a name, preserve the name + if (capName) { + return '(?<' + capName + '>'; + } + // Backreference + } else if ($4) { + localCapIndex = +$4 - 1; + // Rewrite the backreference + return outerCapNames[localCapIndex] ? + // Need to preserve the backreference name in case using flag `n` + '\\k<' + outerCapNames[localCapIndex] + '>' : + '\\' + outerCapsMap[+$4]; + } + return $0; + }); + + return XRegExp(output, flags); + }; + +}; + +},{}],2:[function(require,module,exports){ +/*! + * XRegExp.matchRecursive 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2009-2017 MIT License + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Returns a match detail object composed of the provided values. + * + * @private + */ + function row(name, value, start, end) { + return { + name: name, + value: value, + start: start, + end: end + }; + } + + /** + * Returns an array of match strings between outermost left and right delimiters, or an array of + * objects with detailed match parts and position data. An error is thrown if delimiters are + * unbalanced within the data. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {String} left Left delimiter as an XRegExp pattern. + * @param {String} right Right delimiter as an XRegExp pattern. + * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters. + * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. + * @returns {Array} Array of matches, or an empty array. + * @example + * + * // Basic usage + * var str = '(t((e))s)t()(ing)'; + * XRegExp.matchRecursive(str, '\\(', '\\)', 'g'); + * // -> ['t((e))s', '', 'ing'] + * + * // Extended information mode with valueNames + * str = 'Here is <div> <div>an</div></div> example'; + * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', { + * valueNames: ['between', 'left', 'match', 'right'] + * }); + * // -> [ + * // {name: 'between', value: 'Here is ', start: 0, end: 8}, + * // {name: 'left', value: '<div>', start: 8, end: 13}, + * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27}, + * // {name: 'right', value: '</div>', start: 27, end: 33}, + * // {name: 'between', value: ' example', start: 33, end: 41} + * // ] + * + * // Omitting unneeded parts with null valueNames, and using escapeChar + * str = '...{1}.\\{{function(x,y){return {y:x}}}'; + * XRegExp.matchRecursive(str, '{', '}', 'g', { + * valueNames: ['literal', null, 'value', null], + * escapeChar: '\\' + * }); + * // -> [ + * // {name: 'literal', value: '...', start: 0, end: 3}, + * // {name: 'value', value: '1', start: 4, end: 5}, + * // {name: 'literal', value: '.\\{', start: 6, end: 9}, + * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37} + * // ] + * + * // Sticky mode via flag y + * str = '<1><<<2>>><3>4<5>'; + * XRegExp.matchRecursive(str, '<', '>', 'gy'); + * // -> ['1', '<<2>>', '3'] + */ + XRegExp.matchRecursive = function(str, left, right, flags, options) { + flags = flags || ''; + options = options || {}; + var global = flags.indexOf('g') > -1; + var sticky = flags.indexOf('y') > -1; + // Flag `y` is controlled internally + var basicFlags = flags.replace(/y/g, ''); + var escapeChar = options.escapeChar; + var vN = options.valueNames; + var output = []; + var openTokens = 0; + var delimStart = 0; + var delimEnd = 0; + var lastOuterEnd = 0; + var outerStart; + var innerStart; + var leftMatch; + var rightMatch; + var esc; + left = XRegExp(left, basicFlags); + right = XRegExp(right, basicFlags); + + if (escapeChar) { + if (escapeChar.length > 1) { + throw new Error('Cannot use more than one escape character'); + } + escapeChar = XRegExp.escape(escapeChar); + // Example of concatenated `esc` regex: + // `escapeChar`: '%' + // `left`: '<' + // `right`: '>' + // Regex is: /(?:%[\S\s]|(?:(?!<|>)[^%])+)+/ + esc = new RegExp( + '(?:' + escapeChar + '[\\S\\s]|(?:(?!' + + // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`. + // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax + // transformation resulting from those flags was already applied to `left` and + // `right` when they were passed through the XRegExp constructor above. + XRegExp.union([left, right], '', {conjunction: 'or'}).source + + ')[^' + escapeChar + '])+)+', + // Flags `gy` not needed here + flags.replace(/[^imu]+/g, '') + ); + } + + while (true) { + // If using an escape character, advance to the delimiter's next starting position, + // skipping any escaped characters in between + if (escapeChar) { + delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length; + } + leftMatch = XRegExp.exec(str, left, delimEnd); + rightMatch = XRegExp.exec(str, right, delimEnd); + // Keep the leftmost match only + if (leftMatch && rightMatch) { + if (leftMatch.index <= rightMatch.index) { + rightMatch = null; + } else { + leftMatch = null; + } + } + // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens): + // LM | RM | OT | Result + // 1 | 0 | 1 | loop + // 1 | 0 | 0 | loop + // 0 | 1 | 1 | loop + // 0 | 1 | 0 | throw + // 0 | 0 | 1 | throw + // 0 | 0 | 0 | break + // The paths above don't include the sticky mode special case. The loop ends after the + // first completed match if not `global`. + if (leftMatch || rightMatch) { + delimStart = (leftMatch || rightMatch).index; + delimEnd = delimStart + (leftMatch || rightMatch)[0].length; + } else if (!openTokens) { + break; + } + if (sticky && !openTokens && delimStart > lastOuterEnd) { + break; + } + if (leftMatch) { + if (!openTokens) { + outerStart = delimStart; + innerStart = delimEnd; + } + ++openTokens; + } else if (rightMatch && openTokens) { + if (!--openTokens) { + if (vN) { + if (vN[0] && outerStart > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart)); + } + if (vN[1]) { + output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart)); + } + if (vN[2]) { + output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart)); + } + if (vN[3]) { + output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd)); + } + } else { + output.push(str.slice(innerStart, delimStart)); + } + lastOuterEnd = delimEnd; + if (!global) { + break; + } + } + } else { + throw new Error('Unbalanced delimiter found in string'); + } + // If the delimiter matched an empty string, avoid an infinite loop + if (delimStart === delimEnd) { + ++delimEnd; + } + } + + if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length)); + } + + return output; + }; + +}; + +},{}],3:[function(require,module,exports){ +/*! + * XRegExp Unicode Base 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2008-2017 MIT License + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Adds base support for Unicode matching: + * - Adds syntax `\p{..}` for matching Unicode tokens. Tokens can be inverted using `\P{..}` or + * `\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the + * braces for token names that are a single letter (e.g. `\pL` or `PL`). + * - Adds flag A (astral), which enables 21-bit Unicode support. + * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data. + * + * Unicode Base relies on externally provided Unicode character data. Official addons are + * available to provide data for Unicode categories, scripts, blocks, and properties. + * + * @requires XRegExp + */ + + // ==--------------------------== + // Private stuff + // ==--------------------------== + + // Storage for Unicode data + var unicode = {}; + + // Reuse utils + var dec = XRegExp._dec; + var hex = XRegExp._hex; + var pad4 = XRegExp._pad4; + + // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed + function normalize(name) { + return name.replace(/[- _]+/g, '').toLowerCase(); + } + + // Gets the decimal code of a literal code unit, \xHH, \uHHHH, or a backslash-escaped literal + function charCode(chr) { + var esc = /^\\[xu](.+)/.exec(chr); + return esc ? + dec(esc[1]) : + chr.charCodeAt(chr.charAt(0) === '\\' ? 1 : 0); + } + + // Inverts a list of ordered BMP characters and ranges + function invertBmp(range) { + var output = ''; + var lastEnd = -1; + + XRegExp.forEach( + range, + /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, + function(m) { + var start = charCode(m[1]); + if (start > (lastEnd + 1)) { + output += '\\u' + pad4(hex(lastEnd + 1)); + if (start > (lastEnd + 2)) { + output += '-\\u' + pad4(hex(start - 1)); + } + } + lastEnd = charCode(m[2] || m[1]); + } + ); + + if (lastEnd < 0xFFFF) { + output += '\\u' + pad4(hex(lastEnd + 1)); + if (lastEnd < 0xFFFE) { + output += '-\\uFFFF'; + } + } + + return output; + } + + // Generates an inverted BMP range on first use + function cacheInvertedBmp(slug) { + var prop = 'b!'; + return ( + unicode[slug][prop] || + (unicode[slug][prop] = invertBmp(unicode[slug].bmp)) + ); + } + + // Combines and optionally negates BMP and astral data + function buildAstral(slug, isNegated) { + var item = unicode[slug]; + var combined = ''; + + if (item.bmp && !item.isBmpLast) { + combined = '[' + item.bmp + ']' + (item.astral ? '|' : ''); + } + if (item.astral) { + combined += item.astral; + } + if (item.isBmpLast && item.bmp) { + combined += (item.astral ? '|' : '') + '[' + item.bmp + ']'; + } + + // Astral Unicode tokens always match a code point, never a code unit + return isNegated ? + '(?:(?!' + combined + ')(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))' : + '(?:' + combined + ')'; + } + + // Builds a complete astral pattern on first use + function cacheAstral(slug, isNegated) { + var prop = isNegated ? 'a!' : 'a='; + return ( + unicode[slug][prop] || + (unicode[slug][prop] = buildAstral(slug, isNegated)) + ); + } + + // ==--------------------------== + // Core functionality + // ==--------------------------== + + /* + * Add astral mode (flag A) and Unicode token syntax: `\p{..}`, `\P{..}`, `\p{^..}`, `\pC`. + */ + XRegExp.addToken( + // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}` + /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, + function(match, scope, flags) { + var ERR_DOUBLE_NEG = 'Invalid double negation '; + var ERR_UNKNOWN_NAME = 'Unknown Unicode token '; + var ERR_UNKNOWN_REF = 'Unicode token missing data '; + var ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token '; + var ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes'; + // Negated via \P{..} or \p{^..} + var isNegated = match[1] === 'P' || !!match[2]; + // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A + var isAstralMode = flags.indexOf('A') > -1; + // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}` + var slug = normalize(match[4] || match[3]); + // Token data object + var item = unicode[slug]; + + if (match[1] === 'P' && match[2]) { + throw new SyntaxError(ERR_DOUBLE_NEG + match[0]); + } + if (!unicode.hasOwnProperty(slug)) { + throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]); + } + + // Switch to the negated form of the referenced Unicode token + if (item.inverseOf) { + slug = normalize(item.inverseOf); + if (!unicode.hasOwnProperty(slug)) { + throw new ReferenceError(ERR_UNKNOWN_REF + match[0] + ' -> ' + item.inverseOf); + } + item = unicode[slug]; + isNegated = !isNegated; + } + + if (!(item.bmp || isAstralMode)) { + throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]); + } + if (isAstralMode) { + if (scope === 'class') { + throw new SyntaxError(ERR_ASTRAL_IN_CLASS); + } + + return cacheAstral(slug, isNegated); + } + + return scope === 'class' ? + (isNegated ? cacheInvertedBmp(slug) : item.bmp) : + (isNegated ? '[^' : '[') + item.bmp + ']'; + }, + { + scope: 'all', + optionalFlags: 'A', + leadChar: '\\' + } + ); + + /** + * Adds to the list of Unicode tokens that XRegExp regexes can match via `\p` or `\P`. + * + * @memberOf XRegExp + * @param {Array} data Objects with named character ranges. Each object may have properties + * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are + * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If + * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent, + * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are + * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and + * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan + * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and + * `astral` data should be a combination of literal characters and `\xHH` or `\uHHHH` escape + * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be + * escaped, apart from range-creating hyphens. The `astral` data can additionally use + * character classes and alternation, and should use surrogate pairs to represent astral code + * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is + * defined as the exact inverse of another token. + * @example + * + * // Basic use + * XRegExp.addUnicodeData([{ + * name: 'XDigit', + * alias: 'Hexadecimal', + * bmp: '0-9A-Fa-f' + * }]); + * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true + */ + XRegExp.addUnicodeData = function(data) { + var ERR_NO_NAME = 'Unicode token requires name'; + var ERR_NO_DATA = 'Unicode token has no character data '; + var item; + + for (var i = 0; i < data.length; ++i) { + item = data[i]; + if (!item.name) { + throw new Error(ERR_NO_NAME); + } + if (!(item.inverseOf || item.bmp || item.astral)) { + throw new Error(ERR_NO_DATA + item.name); + } + unicode[normalize(item.name)] = item; + if (item.alias) { + unicode[normalize(item.alias)] = item; + } + } + + // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and + // flags might now produce different results + XRegExp.cache.flush('patterns'); + }; + + /** + * @ignore + * + * Return a reference to the internal Unicode definition structure for the given Unicode + * Property if the given name is a legal Unicode Property for use in XRegExp `\p` or `\P` regex + * constructs. + * + * @memberOf XRegExp + * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive), + * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode + * Properties and Property Aliases. + * @returns {Object} Reference to definition structure when the name matches a Unicode Property. + * + * @note + * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories. + * + * @note + * This method is *not* part of the officially documented API and may change or be removed in + * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode + * structures set up by XRegExp. + */ + XRegExp._getUnicodeProperty = function(name) { + var slug = normalize(name); + return unicode[slug]; + }; + +}; + +},{}],4:[function(require,module,exports){ +/*! + * XRegExp Unicode Blocks 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2010-2017 MIT License + * Unicode data by Mathias Bynens <mathiasbynens.be> + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., + * `\p{InBasicLatin}`. Token names are case insensitive, and any spaces, hyphens, and + * underscores are ignored. + * + * Uses Unicode 9.0.0. + * + * @requires XRegExp, Unicode Base + */ + + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks'); + } + + XRegExp.addUnicodeData([ + { + name: 'InAdlam', + astral: '\uD83A[\uDD00-\uDD5F]' + }, + { + name: 'InAegean_Numbers', + astral: '\uD800[\uDD00-\uDD3F]' + }, + { + name: 'InAhom', + astral: '\uD805[\uDF00-\uDF3F]' + }, + { + name: 'InAlchemical_Symbols', + astral: '\uD83D[\uDF00-\uDF7F]' + }, + { + name: 'InAlphabetic_Presentation_Forms', + bmp: '\uFB00-\uFB4F' + }, + { + name: 'InAnatolian_Hieroglyphs', + astral: '\uD811[\uDC00-\uDE7F]' + }, + { + name: 'InAncient_Greek_Musical_Notation', + astral: '\uD834[\uDE00-\uDE4F]' + }, + { + name: 'InAncient_Greek_Numbers', + astral: '\uD800[\uDD40-\uDD8F]' + }, + { + name: 'InAncient_Symbols', + astral: '\uD800[\uDD90-\uDDCF]' + }, + { + name: 'InArabic', + bmp: '\u0600-\u06FF' + }, + { + name: 'InArabic_Extended_A', + bmp: '\u08A0-\u08FF' + }, + { + name: 'InArabic_Mathematical_Alphabetic_Symbols', + astral: '\uD83B[\uDE00-\uDEFF]' + }, + { + name: 'InArabic_Presentation_Forms_A', + bmp: '\uFB50-\uFDFF' + }, + { + name: 'InArabic_Presentation_Forms_B', + bmp: '\uFE70-\uFEFF' + }, + { + name: 'InArabic_Supplement', + bmp: '\u0750-\u077F' + }, + { + name: 'InArmenian', + bmp: '\u0530-\u058F' + }, + { + name: 'InArrows', + bmp: '\u2190-\u21FF' + }, + { + name: 'InAvestan', + astral: '\uD802[\uDF00-\uDF3F]' + }, + { + name: 'InBalinese', + bmp: '\u1B00-\u1B7F' + }, + { + name: 'InBamum', + bmp: '\uA6A0-\uA6FF' + }, + { + name: 'InBamum_Supplement', + astral: '\uD81A[\uDC00-\uDE3F]' + }, + { + name: 'InBasic_Latin', + bmp: '\0-\x7F' + }, + { + name: 'InBassa_Vah', + astral: '\uD81A[\uDED0-\uDEFF]' + }, + { + name: 'InBatak', + bmp: '\u1BC0-\u1BFF' + }, + { + name: 'InBengali', + bmp: '\u0980-\u09FF' + }, + { + name: 'InBhaiksuki', + astral: '\uD807[\uDC00-\uDC6F]' + }, + { + name: 'InBlock_Elements', + bmp: '\u2580-\u259F' + }, + { + name: 'InBopomofo', + bmp: '\u3100-\u312F' + }, + { + name: 'InBopomofo_Extended', + bmp: '\u31A0-\u31BF' + }, + { + name: 'InBox_Drawing', + bmp: '\u2500-\u257F' + }, + { + name: 'InBrahmi', + astral: '\uD804[\uDC00-\uDC7F]' + }, + { + name: 'InBraille_Patterns', + bmp: '\u2800-\u28FF' + }, + { + name: 'InBuginese', + bmp: '\u1A00-\u1A1F' + }, + { + name: 'InBuhid', + bmp: '\u1740-\u175F' + }, + { + name: 'InByzantine_Musical_Symbols', + astral: '\uD834[\uDC00-\uDCFF]' + }, + { + name: 'InCJK_Compatibility', + bmp: '\u3300-\u33FF' + }, + { + name: 'InCJK_Compatibility_Forms', + bmp: '\uFE30-\uFE4F' + }, + { + name: 'InCJK_Compatibility_Ideographs', + bmp: '\uF900-\uFAFF' + }, + { + name: 'InCJK_Compatibility_Ideographs_Supplement', + astral: '\uD87E[\uDC00-\uDE1F]' + }, + { + name: 'InCJK_Radicals_Supplement', + bmp: '\u2E80-\u2EFF' + }, + { + name: 'InCJK_Strokes', + bmp: '\u31C0-\u31EF' + }, + { + name: 'InCJK_Symbols_and_Punctuation', + bmp: '\u3000-\u303F' + }, + { + name: 'InCJK_Unified_Ideographs', + bmp: '\u4E00-\u9FFF' + }, + { + name: 'InCJK_Unified_Ideographs_Extension_A', + bmp: '\u3400-\u4DBF' + }, + { + name: 'InCJK_Unified_Ideographs_Extension_B', + astral: '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]' + }, + { + name: 'InCJK_Unified_Ideographs_Extension_C', + astral: '\uD869[\uDF00-\uDFFF]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF3F]' + }, + { + name: 'InCJK_Unified_Ideographs_Extension_D', + astral: '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]' + }, + { + name: 'InCJK_Unified_Ideographs_Extension_E', + astral: '\uD86E[\uDC20-\uDFFF]|[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]' + }, + { + name: 'InCarian', + astral: '\uD800[\uDEA0-\uDEDF]' + }, + { + name: 'InCaucasian_Albanian', + astral: '\uD801[\uDD30-\uDD6F]' + }, + { + name: 'InChakma', + astral: '\uD804[\uDD00-\uDD4F]' + }, + { + name: 'InCham', + bmp: '\uAA00-\uAA5F' + }, + { + name: 'InCherokee', + bmp: '\u13A0-\u13FF' + }, + { + name: 'InCherokee_Supplement', + bmp: '\uAB70-\uABBF' + }, + { + name: 'InCombining_Diacritical_Marks', + bmp: '\u0300-\u036F' + }, + { + name: 'InCombining_Diacritical_Marks_Extended', + bmp: '\u1AB0-\u1AFF' + }, + { + name: 'InCombining_Diacritical_Marks_Supplement', + bmp: '\u1DC0-\u1DFF' + }, + { + name: 'InCombining_Diacritical_Marks_for_Symbols', + bmp: '\u20D0-\u20FF' + }, + { + name: 'InCombining_Half_Marks', + bmp: '\uFE20-\uFE2F' + }, + { + name: 'InCommon_Indic_Number_Forms', + bmp: '\uA830-\uA83F' + }, + { + name: 'InControl_Pictures', + bmp: '\u2400-\u243F' + }, + { + name: 'InCoptic', + bmp: '\u2C80-\u2CFF' + }, + { + name: 'InCoptic_Epact_Numbers', + astral: '\uD800[\uDEE0-\uDEFF]' + }, + { + name: 'InCounting_Rod_Numerals', + astral: '\uD834[\uDF60-\uDF7F]' + }, + { + name: 'InCuneiform', + astral: '\uD808[\uDC00-\uDFFF]' + }, + { + name: 'InCuneiform_Numbers_and_Punctuation', + astral: '\uD809[\uDC00-\uDC7F]' + }, + { + name: 'InCurrency_Symbols', + bmp: '\u20A0-\u20CF' + }, + { + name: 'InCypriot_Syllabary', + astral: '\uD802[\uDC00-\uDC3F]' + }, + { + name: 'InCyrillic', + bmp: '\u0400-\u04FF' + }, + { + name: 'InCyrillic_Extended_A', + bmp: '\u2DE0-\u2DFF' + }, + { + name: 'InCyrillic_Extended_B', + bmp: '\uA640-\uA69F' + }, + { + name: 'InCyrillic_Extended_C', + bmp: '\u1C80-\u1C8F' + }, + { + name: 'InCyrillic_Supplement', + bmp: '\u0500-\u052F' + }, + { + name: 'InDeseret', + astral: '\uD801[\uDC00-\uDC4F]' + }, + { + name: 'InDevanagari', + bmp: '\u0900-\u097F' + }, + { + name: 'InDevanagari_Extended', + bmp: '\uA8E0-\uA8FF' + }, + { + name: 'InDingbats', + bmp: '\u2700-\u27BF' + }, + { + name: 'InDomino_Tiles', + astral: '\uD83C[\uDC30-\uDC9F]' + }, + { + name: 'InDuployan', + astral: '\uD82F[\uDC00-\uDC9F]' + }, + { + name: 'InEarly_Dynastic_Cuneiform', + astral: '\uD809[\uDC80-\uDD4F]' + }, + { + name: 'InEgyptian_Hieroglyphs', + astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]' + }, + { + name: 'InElbasan', + astral: '\uD801[\uDD00-\uDD2F]' + }, + { + name: 'InEmoticons', + astral: '\uD83D[\uDE00-\uDE4F]' + }, + { + name: 'InEnclosed_Alphanumeric_Supplement', + astral: '\uD83C[\uDD00-\uDDFF]' + }, + { + name: 'InEnclosed_Alphanumerics', + bmp: '\u2460-\u24FF' + }, + { + name: 'InEnclosed_CJK_Letters_and_Months', + bmp: '\u3200-\u32FF' + }, + { + name: 'InEnclosed_Ideographic_Supplement', + astral: '\uD83C[\uDE00-\uDEFF]' + }, + { + name: 'InEthiopic', + bmp: '\u1200-\u137F' + }, + { + name: 'InEthiopic_Extended', + bmp: '\u2D80-\u2DDF' + }, + { + name: 'InEthiopic_Extended_A', + bmp: '\uAB00-\uAB2F' + }, + { + name: 'InEthiopic_Supplement', + bmp: '\u1380-\u139F' + }, + { + name: 'InGeneral_Punctuation', + bmp: '\u2000-\u206F' + }, + { + name: 'InGeometric_Shapes', + bmp: '\u25A0-\u25FF' + }, + { + name: 'InGeometric_Shapes_Extended', + astral: '\uD83D[\uDF80-\uDFFF]' + }, + { + name: 'InGeorgian', + bmp: '\u10A0-\u10FF' + }, + { + name: 'InGeorgian_Supplement', + bmp: '\u2D00-\u2D2F' + }, + { + name: 'InGlagolitic', + bmp: '\u2C00-\u2C5F' + }, + { + name: 'InGlagolitic_Supplement', + astral: '\uD838[\uDC00-\uDC2F]' + }, + { + name: 'InGothic', + astral: '\uD800[\uDF30-\uDF4F]' + }, + { + name: 'InGrantha', + astral: '\uD804[\uDF00-\uDF7F]' + }, + { + name: 'InGreek_Extended', + bmp: '\u1F00-\u1FFF' + }, + { + name: 'InGreek_and_Coptic', + bmp: '\u0370-\u03FF' + }, + { + name: 'InGujarati', + bmp: '\u0A80-\u0AFF' + }, + { + name: 'InGurmukhi', + bmp: '\u0A00-\u0A7F' + }, + { + name: 'InHalfwidth_and_Fullwidth_Forms', + bmp: '\uFF00-\uFFEF' + }, + { + name: 'InHangul_Compatibility_Jamo', + bmp: '\u3130-\u318F' + }, + { + name: 'InHangul_Jamo', + bmp: '\u1100-\u11FF' + }, + { + name: 'InHangul_Jamo_Extended_A', + bmp: '\uA960-\uA97F' + }, + { + name: 'InHangul_Jamo_Extended_B', + bmp: '\uD7B0-\uD7FF' + }, + { + name: 'InHangul_Syllables', + bmp: '\uAC00-\uD7AF' + }, + { + name: 'InHanunoo', + bmp: '\u1720-\u173F' + }, + { + name: 'InHatran', + astral: '\uD802[\uDCE0-\uDCFF]' + }, + { + name: 'InHebrew', + bmp: '\u0590-\u05FF' + }, + { + name: 'InHigh_Private_Use_Surrogates', + bmp: '\uDB80-\uDBFF' + }, + { + name: 'InHigh_Surrogates', + bmp: '\uD800-\uDB7F' + }, + { + name: 'InHiragana', + bmp: '\u3040-\u309F' + }, + { + name: 'InIPA_Extensions', + bmp: '\u0250-\u02AF' + }, + { + name: 'InIdeographic_Description_Characters', + bmp: '\u2FF0-\u2FFF' + }, + { + name: 'InIdeographic_Symbols_and_Punctuation', + astral: '\uD81B[\uDFE0-\uDFFF]' + }, + { + name: 'InImperial_Aramaic', + astral: '\uD802[\uDC40-\uDC5F]' + }, + { + name: 'InInscriptional_Pahlavi', + astral: '\uD802[\uDF60-\uDF7F]' + }, + { + name: 'InInscriptional_Parthian', + astral: '\uD802[\uDF40-\uDF5F]' + }, + { + name: 'InJavanese', + bmp: '\uA980-\uA9DF' + }, + { + name: 'InKaithi', + astral: '\uD804[\uDC80-\uDCCF]' + }, + { + name: 'InKana_Supplement', + astral: '\uD82C[\uDC00-\uDCFF]' + }, + { + name: 'InKanbun', + bmp: '\u3190-\u319F' + }, + { + name: 'InKangxi_Radicals', + bmp: '\u2F00-\u2FDF' + }, + { + name: 'InKannada', + bmp: '\u0C80-\u0CFF' + }, + { + name: 'InKatakana', + bmp: '\u30A0-\u30FF' + }, + { + name: 'InKatakana_Phonetic_Extensions', + bmp: '\u31F0-\u31FF' + }, + { + name: 'InKayah_Li', + bmp: '\uA900-\uA92F' + }, + { + name: 'InKharoshthi', + astral: '\uD802[\uDE00-\uDE5F]' + }, + { + name: 'InKhmer', + bmp: '\u1780-\u17FF' + }, + { + name: 'InKhmer_Symbols', + bmp: '\u19E0-\u19FF' + }, + { + name: 'InKhojki', + astral: '\uD804[\uDE00-\uDE4F]' + }, + { + name: 'InKhudawadi', + astral: '\uD804[\uDEB0-\uDEFF]' + }, + { + name: 'InLao', + bmp: '\u0E80-\u0EFF' + }, + { + name: 'InLatin_Extended_Additional', + bmp: '\u1E00-\u1EFF' + }, + { + name: 'InLatin_Extended_A', + bmp: '\u0100-\u017F' + }, + { + name: 'InLatin_Extended_B', + bmp: '\u0180-\u024F' + }, + { + name: 'InLatin_Extended_C', + bmp: '\u2C60-\u2C7F' + }, + { + name: 'InLatin_Extended_D', + bmp: '\uA720-\uA7FF' + }, + { + name: 'InLatin_Extended_E', + bmp: '\uAB30-\uAB6F' + }, + { + name: 'InLatin_1_Supplement', + bmp: '\x80-\xFF' + }, + { + name: 'InLepcha', + bmp: '\u1C00-\u1C4F' + }, + { + name: 'InLetterlike_Symbols', + bmp: '\u2100-\u214F' + }, + { + name: 'InLimbu', + bmp: '\u1900-\u194F' + }, + { + name: 'InLinear_A', + astral: '\uD801[\uDE00-\uDF7F]' + }, + { + name: 'InLinear_B_Ideograms', + astral: '\uD800[\uDC80-\uDCFF]' + }, + { + name: 'InLinear_B_Syllabary', + astral: '\uD800[\uDC00-\uDC7F]' + }, + { + name: 'InLisu', + bmp: '\uA4D0-\uA4FF' + }, + { + name: 'InLow_Surrogates', + bmp: '\uDC00-\uDFFF' + }, + { + name: 'InLycian', + astral: '\uD800[\uDE80-\uDE9F]' + }, + { + name: 'InLydian', + astral: '\uD802[\uDD20-\uDD3F]' + }, + { + name: 'InMahajani', + astral: '\uD804[\uDD50-\uDD7F]' + }, + { + name: 'InMahjong_Tiles', + astral: '\uD83C[\uDC00-\uDC2F]' + }, + { + name: 'InMalayalam', + bmp: '\u0D00-\u0D7F' + }, + { + name: 'InMandaic', + bmp: '\u0840-\u085F' + }, + { + name: 'InManichaean', + astral: '\uD802[\uDEC0-\uDEFF]' + }, + { + name: 'InMarchen', + astral: '\uD807[\uDC70-\uDCBF]' + }, + { + name: 'InMathematical_Alphanumeric_Symbols', + astral: '\uD835[\uDC00-\uDFFF]' + }, + { + name: 'InMathematical_Operators', + bmp: '\u2200-\u22FF' + }, + { + name: 'InMeetei_Mayek', + bmp: '\uABC0-\uABFF' + }, + { + name: 'InMeetei_Mayek_Extensions', + bmp: '\uAAE0-\uAAFF' + }, + { + name: 'InMende_Kikakui', + astral: '\uD83A[\uDC00-\uDCDF]' + }, + { + name: 'InMeroitic_Cursive', + astral: '\uD802[\uDDA0-\uDDFF]' + }, + { + name: 'InMeroitic_Hieroglyphs', + astral: '\uD802[\uDD80-\uDD9F]' + }, + { + name: 'InMiao', + astral: '\uD81B[\uDF00-\uDF9F]' + }, + { + name: 'InMiscellaneous_Mathematical_Symbols_A', + bmp: '\u27C0-\u27EF' + }, + { + name: 'InMiscellaneous_Mathematical_Symbols_B', + bmp: '\u2980-\u29FF' + }, + { + name: 'InMiscellaneous_Symbols', + bmp: '\u2600-\u26FF' + }, + { + name: 'InMiscellaneous_Symbols_and_Arrows', + bmp: '\u2B00-\u2BFF' + }, + { + name: 'InMiscellaneous_Symbols_and_Pictographs', + astral: '\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF]' + }, + { + name: 'InMiscellaneous_Technical', + bmp: '\u2300-\u23FF' + }, + { + name: 'InModi', + astral: '\uD805[\uDE00-\uDE5F]' + }, + { + name: 'InModifier_Tone_Letters', + bmp: '\uA700-\uA71F' + }, + { + name: 'InMongolian', + bmp: '\u1800-\u18AF' + }, + { + name: 'InMongolian_Supplement', + astral: '\uD805[\uDE60-\uDE7F]' + }, + { + name: 'InMro', + astral: '\uD81A[\uDE40-\uDE6F]' + }, + { + name: 'InMultani', + astral: '\uD804[\uDE80-\uDEAF]' + }, + { + name: 'InMusical_Symbols', + astral: '\uD834[\uDD00-\uDDFF]' + }, + { + name: 'InMyanmar', + bmp: '\u1000-\u109F' + }, + { + name: 'InMyanmar_Extended_A', + bmp: '\uAA60-\uAA7F' + }, + { + name: 'InMyanmar_Extended_B', + bmp: '\uA9E0-\uA9FF' + }, + { + name: 'InNKo', + bmp: '\u07C0-\u07FF' + }, + { + name: 'InNabataean', + astral: '\uD802[\uDC80-\uDCAF]' + }, + { + name: 'InNew_Tai_Lue', + bmp: '\u1980-\u19DF' + }, + { + name: 'InNewa', + astral: '\uD805[\uDC00-\uDC7F]' + }, + { + name: 'InNumber_Forms', + bmp: '\u2150-\u218F' + }, + { + name: 'InOgham', + bmp: '\u1680-\u169F' + }, + { + name: 'InOl_Chiki', + bmp: '\u1C50-\u1C7F' + }, + { + name: 'InOld_Hungarian', + astral: '\uD803[\uDC80-\uDCFF]' + }, + { + name: 'InOld_Italic', + astral: '\uD800[\uDF00-\uDF2F]' + }, + { + name: 'InOld_North_Arabian', + astral: '\uD802[\uDE80-\uDE9F]' + }, + { + name: 'InOld_Permic', + astral: '\uD800[\uDF50-\uDF7F]' + }, + { + name: 'InOld_Persian', + astral: '\uD800[\uDFA0-\uDFDF]' + }, + { + name: 'InOld_South_Arabian', + astral: '\uD802[\uDE60-\uDE7F]' + }, + { + name: 'InOld_Turkic', + astral: '\uD803[\uDC00-\uDC4F]' + }, + { + name: 'InOptical_Character_Recognition', + bmp: '\u2440-\u245F' + }, + { + name: 'InOriya', + bmp: '\u0B00-\u0B7F' + }, + { + name: 'InOrnamental_Dingbats', + astral: '\uD83D[\uDE50-\uDE7F]' + }, + { + name: 'InOsage', + astral: '\uD801[\uDCB0-\uDCFF]' + }, + { + name: 'InOsmanya', + astral: '\uD801[\uDC80-\uDCAF]' + }, + { + name: 'InPahawh_Hmong', + astral: '\uD81A[\uDF00-\uDF8F]' + }, + { + name: 'InPalmyrene', + astral: '\uD802[\uDC60-\uDC7F]' + }, + { + name: 'InPau_Cin_Hau', + astral: '\uD806[\uDEC0-\uDEFF]' + }, + { + name: 'InPhags_pa', + bmp: '\uA840-\uA87F' + }, + { + name: 'InPhaistos_Disc', + astral: '\uD800[\uDDD0-\uDDFF]' + }, + { + name: 'InPhoenician', + astral: '\uD802[\uDD00-\uDD1F]' + }, + { + name: 'InPhonetic_Extensions', + bmp: '\u1D00-\u1D7F' + }, + { + name: 'InPhonetic_Extensions_Supplement', + bmp: '\u1D80-\u1DBF' + }, + { + name: 'InPlaying_Cards', + astral: '\uD83C[\uDCA0-\uDCFF]' + }, + { + name: 'InPrivate_Use_Area', + bmp: '\uE000-\uF8FF' + }, + { + name: 'InPsalter_Pahlavi', + astral: '\uD802[\uDF80-\uDFAF]' + }, + { + name: 'InRejang', + bmp: '\uA930-\uA95F' + }, + { + name: 'InRumi_Numeral_Symbols', + astral: '\uD803[\uDE60-\uDE7F]' + }, + { + name: 'InRunic', + bmp: '\u16A0-\u16FF' + }, + { + name: 'InSamaritan', + bmp: '\u0800-\u083F' + }, + { + name: 'InSaurashtra', + bmp: '\uA880-\uA8DF' + }, + { + name: 'InSharada', + astral: '\uD804[\uDD80-\uDDDF]' + }, + { + name: 'InShavian', + astral: '\uD801[\uDC50-\uDC7F]' + }, + { + name: 'InShorthand_Format_Controls', + astral: '\uD82F[\uDCA0-\uDCAF]' + }, + { + name: 'InSiddham', + astral: '\uD805[\uDD80-\uDDFF]' + }, + { + name: 'InSinhala', + bmp: '\u0D80-\u0DFF' + }, + { + name: 'InSinhala_Archaic_Numbers', + astral: '\uD804[\uDDE0-\uDDFF]' + }, + { + name: 'InSmall_Form_Variants', + bmp: '\uFE50-\uFE6F' + }, + { + name: 'InSora_Sompeng', + astral: '\uD804[\uDCD0-\uDCFF]' + }, + { + name: 'InSpacing_Modifier_Letters', + bmp: '\u02B0-\u02FF' + }, + { + name: 'InSpecials', + bmp: '\uFFF0-\uFFFF' + }, + { + name: 'InSundanese', + bmp: '\u1B80-\u1BBF' + }, + { + name: 'InSundanese_Supplement', + bmp: '\u1CC0-\u1CCF' + }, + { + name: 'InSuperscripts_and_Subscripts', + bmp: '\u2070-\u209F' + }, + { + name: 'InSupplemental_Arrows_A', + bmp: '\u27F0-\u27FF' + }, + { + name: 'InSupplemental_Arrows_B', + bmp: '\u2900-\u297F' + }, + { + name: 'InSupplemental_Arrows_C', + astral: '\uD83E[\uDC00-\uDCFF]' + }, + { + name: 'InSupplemental_Mathematical_Operators', + bmp: '\u2A00-\u2AFF' + }, + { + name: 'InSupplemental_Punctuation', + bmp: '\u2E00-\u2E7F' + }, + { + name: 'InSupplemental_Symbols_and_Pictographs', + astral: '\uD83E[\uDD00-\uDDFF]' + }, + { + name: 'InSupplementary_Private_Use_Area_A', + astral: '[\uDB80-\uDBBF][\uDC00-\uDFFF]' + }, + { + name: 'InSupplementary_Private_Use_Area_B', + astral: '[\uDBC0-\uDBFF][\uDC00-\uDFFF]' + }, + { + name: 'InSutton_SignWriting', + astral: '\uD836[\uDC00-\uDEAF]' + }, + { + name: 'InSyloti_Nagri', + bmp: '\uA800-\uA82F' + }, + { + name: 'InSyriac', + bmp: '\u0700-\u074F' + }, + { + name: 'InTagalog', + bmp: '\u1700-\u171F' + }, + { + name: 'InTagbanwa', + bmp: '\u1760-\u177F' + }, + { + name: 'InTags', + astral: '\uDB40[\uDC00-\uDC7F]' + }, + { + name: 'InTai_Le', + bmp: '\u1950-\u197F' + }, + { + name: 'InTai_Tham', + bmp: '\u1A20-\u1AAF' + }, + { + name: 'InTai_Viet', + bmp: '\uAA80-\uAADF' + }, + { + name: 'InTai_Xuan_Jing_Symbols', + astral: '\uD834[\uDF00-\uDF5F]' + }, + { + name: 'InTakri', + astral: '\uD805[\uDE80-\uDECF]' + }, + { + name: 'InTamil', + bmp: '\u0B80-\u0BFF' + }, + { + name: 'InTangut', + astral: '[\uD81C-\uD821][\uDC00-\uDFFF]' + }, + { + name: 'InTangut_Components', + astral: '\uD822[\uDC00-\uDEFF]' + }, + { + name: 'InTelugu', + bmp: '\u0C00-\u0C7F' + }, + { + name: 'InThaana', + bmp: '\u0780-\u07BF' + }, + { + name: 'InThai', + bmp: '\u0E00-\u0E7F' + }, + { + name: 'InTibetan', + bmp: '\u0F00-\u0FFF' + }, + { + name: 'InTifinagh', + bmp: '\u2D30-\u2D7F' + }, + { + name: 'InTirhuta', + astral: '\uD805[\uDC80-\uDCDF]' + }, + { + name: 'InTransport_and_Map_Symbols', + astral: '\uD83D[\uDE80-\uDEFF]' + }, + { + name: 'InUgaritic', + astral: '\uD800[\uDF80-\uDF9F]' + }, + { + name: 'InUnified_Canadian_Aboriginal_Syllabics', + bmp: '\u1400-\u167F' + }, + { + name: 'InUnified_Canadian_Aboriginal_Syllabics_Extended', + bmp: '\u18B0-\u18FF' + }, + { + name: 'InVai', + bmp: '\uA500-\uA63F' + }, + { + name: 'InVariation_Selectors', + bmp: '\uFE00-\uFE0F' + }, + { + name: 'InVariation_Selectors_Supplement', + astral: '\uDB40[\uDD00-\uDDEF]' + }, + { + name: 'InVedic_Extensions', + bmp: '\u1CD0-\u1CFF' + }, + { + name: 'InVertical_Forms', + bmp: '\uFE10-\uFE1F' + }, + { + name: 'InWarang_Citi', + astral: '\uD806[\uDCA0-\uDCFF]' + }, + { + name: 'InYi_Radicals', + bmp: '\uA490-\uA4CF' + }, + { + name: 'InYi_Syllables', + bmp: '\uA000-\uA48F' + }, + { + name: 'InYijing_Hexagram_Symbols', + bmp: '\u4DC0-\u4DFF' + } + ]); + +}; + +},{}],5:[function(require,module,exports){ +/*! + * XRegExp Unicode Categories 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2010-2017 MIT License + * Unicode data by Mathias Bynens <mathiasbynens.be> + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Adds support for Unicode's general categories. E.g., `\p{Lu}` or `\p{Uppercase Letter}`. See + * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token + * names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 9.0.0. + * + * @requires XRegExp, Unicode Base + */ + + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Categories'); + } + + XRegExp.addUnicodeData([ + { + name: 'C', + alias: 'Other', + isBmpLast: true, + bmp: '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5\u08BE-\u08D3\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E45-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + astral: '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5E-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE1-\uDFFF]|\uD821[\uDFED-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD83D[\uDED3-\uDEDF\uDEED-\uDEEF\uDEF7-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD1F\uDD28-\uDD2F\uDD31\uDD32\uDD3F\uDD4C-\uDD4F\uDD5F-\uDD7F\uDD92-\uDDBF\uDDC1-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + name: 'Cc', + alias: 'Control', + bmp: '\0-\x1F\x7F-\x9F' + }, + { + name: 'Cf', + alias: 'Format', + bmp: '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + astral: '\uD804\uDCBD|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + name: 'Cn', + alias: 'Unassigned', + bmp: '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5\u08BE-\u08D3\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E45-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + astral: '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5E-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE1-\uDFFF]|\uD821[\uDFED-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD83D[\uDED3-\uDEDF\uDEED-\uDEEF\uDEF7-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD1F\uDD28-\uDD2F\uDD31\uDD32\uDD3F\uDD4C-\uDD4F\uDD5F-\uDD7F\uDD92-\uDDBF\uDDC1-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + name: 'Co', + alias: 'Private_Use', + bmp: '\uE000-\uF8FF', + astral: '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + name: 'Cs', + alias: 'Surrogate', + bmp: '\uD800-\uDFFF' + }, + { + name: 'L', + alias: 'Letter', + bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' + }, + { + name: 'Ll', + alias: 'Lowercase_Letter', + bmp: 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + astral: '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + name: 'Lm', + alias: 'Modifier_Letter', + bmp: '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E\uFF9F', + astral: '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0]' + }, + { + name: 'Lo', + alias: 'Other_Letter', + bmp: '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' + }, + { + name: 'Lt', + alias: 'Titlecase_Letter', + bmp: '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + name: 'Lu', + alias: 'Uppercase_Letter', + bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A', + astral: '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + name: 'M', + alias: 'Mark', + bmp: '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + astral: '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDCA-\uDDCC\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + name: 'Mc', + alias: 'Spacing_Mark', + bmp: '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF2\u1CF3\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + astral: '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4]|\uD81B[\uDF51-\uDF7E]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + name: 'Me', + alias: 'Enclosing_Mark', + bmp: '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + name: 'Mn', + alias: 'Nonspacing_Mark', + bmp: '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D01\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + astral: '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDCA-\uDDCC\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + name: 'N', + alias: 'Number', + bmp: '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + astral: '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2]|\uD807[\uDC50-\uDC6C]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD834[\uDF60-\uDF71]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83C[\uDD00-\uDD0C]' + }, + { + name: 'Nd', + alias: 'Decimal_Number', + bmp: '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + astral: '\uD801[\uDCA0-\uDCA9]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9]|\uD807[\uDC50-\uDC59]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDD50-\uDD59]' + }, + { + name: 'Nl', + alias: 'Letter_Number', + bmp: '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + astral: '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + name: 'No', + alias: 'Other_Number', + bmp: '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + astral: '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C]|\uD81A[\uDF5B-\uDF61]|\uD834[\uDF60-\uDF71]|\uD83A[\uDCC7-\uDCCF]|\uD83C[\uDD00-\uDD0C]' + }, + { + name: 'P', + alias: 'Punctuation', + bmp: '\x21-\x23\x25-\\x2A\x2C-\x2F\x3A\x3B\\x3F\x40\\x5B-\\x5D\x5F\\x7B\x7D\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E44\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + astral: '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD807[\uDC41-\uDC45\uDC70\uDC71]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + name: 'Pc', + alias: 'Connector_Punctuation', + bmp: '\x5F\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + name: 'Pd', + alias: 'Dash_Punctuation', + bmp: '\\x2D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D' + }, + { + name: 'Pe', + alias: 'Close_Punctuation', + bmp: '\\x29\\x5D\x7D\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + name: 'Pf', + alias: 'Final_Punctuation', + bmp: '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + name: 'Pi', + alias: 'Initial_Punctuation', + bmp: '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + name: 'Po', + alias: 'Other_Punctuation', + bmp: '\x21-\x23\x25-\x27\\x2A\x2C\\x2E\x2F\x3A\x3B\\x3F\x40\\x5C\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166D\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43\u2E44\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + astral: '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD807[\uDC41-\uDC45\uDC70\uDC71]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + name: 'Ps', + alias: 'Open_Punctuation', + bmp: '\\x28\\x5B\\x7B\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + name: 'S', + alias: 'Symbol', + bmp: '\\x24\\x2B\x3C-\x3E\\x5E\x60\\x7C\x7E\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BE\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u23FE\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + astral: '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83B[\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]' + }, + { + name: 'Sc', + alias: 'Currency_Symbol', + bmp: '\\x24\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BE\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6' + }, + { + name: 'Sk', + alias: 'Modifier_Symbol', + bmp: '\\x5E\x60\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + astral: '\uD83C[\uDFFB-\uDFFF]' + }, + { + name: 'Sm', + alias: 'Math_Symbol', + bmp: '\\x2B\x3C-\x3E\\x7C\x7E\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + astral: '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + name: 'So', + alias: 'Other_Symbol', + bmp: '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u23FE\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + astral: '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]' + }, + { + name: 'Z', + alias: 'Separator', + bmp: '\x20\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + name: 'Zl', + alias: 'Line_Separator', + bmp: '\u2028' + }, + { + name: 'Zp', + alias: 'Paragraph_Separator', + bmp: '\u2029' + }, + { + name: 'Zs', + alias: 'Space_Separator', + bmp: '\x20\xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } + ]); + +}; + +},{}],6:[function(require,module,exports){ +/*! + * XRegExp Unicode Properties 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2012-2017 MIT License + * Unicode data by Mathias Bynens <mathiasbynens.be> + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See + * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from + * UAX #44 <http://unicode.org/reports/tr44/>: + * + * - Alphabetic + * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + + * Lo + Nl + Other_Alphabetic. + * + * - Default_Ignorable_Code_Point + * For programmatic determination of default ignorable code points. New characters that should + * be ignored in rendering (unless explicitly supported) will be assigned in these ranges, + * permitting programs to correctly handle the default rendering of such characters when not + * otherwise supported. + * + * - Lowercase + * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase. + * + * - Noncharacter_Code_Point + * Code points permanently reserved for internal use. + * + * - Uppercase + * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase. + * + * - White_Space + * Spaces, separator characters and other control characters which should be treated by + * programming languages as "white space" for the purpose of parsing elements. + * + * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS + * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are + * included in XRegExp's Unicode Categories and Unicode Scripts addons. + * + * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 9.0.0. + * + * @requires XRegExp, Unicode Base + */ + + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Properties'); + } + + var unicodeData = [ + { + name: 'ASCII', + bmp: '\0-\x7F' + }, + { + name: 'Alphabetic', + bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u1062\u1065-\u1068\u106E-\u1086\u108E\u109C\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4B\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C35\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A\uAA7E-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC45\uDC82-\uDCB8\uDCD0-\uDCE8\uDD00-\uDD32\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDF00-\uDF19\uDF1D-\uDF2A]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF36\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' + }, + { + name: 'Any', + isBmpLast: true, + bmp: '\0-\uFFFF', + astral: '[\uD800-\uDBFF][\uDC00-\uDFFF]' + }, + { + name: 'Default_Ignorable_Code_Point', + bmp: '\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8', + astral: '\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]' + }, + { + name: 'Lowercase', + bmp: 'a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + astral: '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + name: 'Noncharacter_Code_Point', + bmp: '\uFDD0-\uFDEF\uFFFE\uFFFF', + astral: '[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + name: 'Uppercase', + bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A', + astral: '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]' + }, + { + name: 'White_Space', + bmp: '\x09-\x0D\x20\x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + } + ]; + + // Add non-generated data + unicodeData.push({ + name: 'Assigned', + // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode + // Categories addon is required to use this property + inverseOf: 'Cn' + }); + + XRegExp.addUnicodeData(unicodeData); + +}; + +},{}],7:[function(require,module,exports){ +/*! + * XRegExp Unicode Scripts 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2010-2017 MIT License + * Unicode data by Mathias Bynens <mathiasbynens.be> + */ + +module.exports = function(XRegExp) { + 'use strict'; + + /** + * Adds support for all Unicode scripts. E.g., `\p{Latin}`. Token names are case insensitive, + * and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 9.0.0. + * + * @requires XRegExp, Unicode Base + */ + + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts'); + } + + XRegExp.addUnicodeData([ + { + name: 'Adlam', + astral: '\uD83A[\uDD00-\uDD4A\uDD50-\uDD59\uDD5E\uDD5F]' + }, + { + name: 'Ahom', + astral: '\uD805[\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF3F]' + }, + { + name: 'Anatolian_Hieroglyphs', + astral: '\uD811[\uDC00-\uDE46]' + }, + { + name: 'Arabic', + bmp: '\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u08FF\uFB50-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE70-\uFE74\uFE76-\uFEFC', + astral: '\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]' + }, + { + name: 'Armenian', + bmp: '\u0531-\u0556\u0559-\u055F\u0561-\u0587\u058A\u058D-\u058F\uFB13-\uFB17' + }, + { + name: 'Avestan', + astral: '\uD802[\uDF00-\uDF35\uDF39-\uDF3F]' + }, + { + name: 'Balinese', + bmp: '\u1B00-\u1B4B\u1B50-\u1B7C' + }, + { + name: 'Bamum', + bmp: '\uA6A0-\uA6F7', + astral: '\uD81A[\uDC00-\uDE38]' + }, + { + name: 'Bassa_Vah', + astral: '\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]' + }, + { + name: 'Batak', + bmp: '\u1BC0-\u1BF3\u1BFC-\u1BFF' + }, + { + name: 'Bengali', + bmp: '\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FB' + }, + { + name: 'Bhaiksuki', + astral: '\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]' + }, + { + name: 'Bopomofo', + bmp: '\u02EA\u02EB\u3105-\u312D\u31A0-\u31BA' + }, + { + name: 'Brahmi', + astral: '\uD804[\uDC00-\uDC4D\uDC52-\uDC6F\uDC7F]' + }, + { + name: 'Braille', + bmp: '\u2800-\u28FF' + }, + { + name: 'Buginese', + bmp: '\u1A00-\u1A1B\u1A1E\u1A1F' + }, + { + name: 'Buhid', + bmp: '\u1740-\u1753' + }, + { + name: 'Canadian_Aboriginal', + bmp: '\u1400-\u167F\u18B0-\u18F5' + }, + { + name: 'Carian', + astral: '\uD800[\uDEA0-\uDED0]' + }, + { + name: 'Caucasian_Albanian', + astral: '\uD801[\uDD30-\uDD63\uDD6F]' + }, + { + name: 'Chakma', + astral: '\uD804[\uDD00-\uDD34\uDD36-\uDD43]' + }, + { + name: 'Cham', + bmp: '\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F' + }, + { + name: 'Cherokee', + bmp: '\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF' + }, + { + name: 'Common', + bmp: '\0-\x40\\x5B-\x60\\x7B-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0589\u0605\u060C\u061B\u061C\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BE\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u23FE\u2400-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2E00-\u2E44\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD', + astral: '\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9B\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDF00-\uDF56\uDF60-\uDF71]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDD0C\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + name: 'Coptic', + bmp: '\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF' + }, + { + name: 'Cuneiform', + astral: '\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]' + }, + { + name: 'Cypriot', + astral: '\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]' + }, + { + name: 'Cyrillic', + bmp: '\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F' + }, + { + name: 'Deseret', + astral: '\uD801[\uDC00-\uDC4F]' + }, + { + name: 'Devanagari', + bmp: '\u0900-\u0950\u0953-\u0963\u0966-\u097F\uA8E0-\uA8FD' + }, + { + name: 'Duployan', + astral: '\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]' + }, + { + name: 'Egyptian_Hieroglyphs', + astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]' + }, + { + name: 'Elbasan', + astral: '\uD801[\uDD00-\uDD27]' + }, + { + name: 'Ethiopic', + bmp: '\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E' + }, + { + name: 'Georgian', + bmp: '\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u2D00-\u2D25\u2D27\u2D2D' + }, + { + name: 'Glagolitic', + bmp: '\u2C00-\u2C2E\u2C30-\u2C5E', + astral: '\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]' + }, + { + name: 'Gothic', + astral: '\uD800[\uDF30-\uDF4A]' + }, + { + name: 'Grantha', + astral: '\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]' + }, + { + name: 'Greek', + bmp: '\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65', + astral: '\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]' + }, + { + name: 'Gujarati', + bmp: '\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9' + }, + { + name: 'Gurmukhi', + bmp: '\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75' + }, + { + name: 'Han', + bmp: '\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FD5\uF900-\uFA6D\uFA70-\uFAD9', + astral: '[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' + }, + { + name: 'Hangul', + bmp: '\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + }, + { + name: 'Hanunoo', + bmp: '\u1720-\u1734' + }, + { + name: 'Hatran', + astral: '\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]' + }, + { + name: 'Hebrew', + bmp: '\u0591-\u05C7\u05D0-\u05EA\u05F0-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F' + }, + { + name: 'Hiragana', + bmp: '\u3041-\u3096\u309D-\u309F', + astral: '\uD82C\uDC01|\uD83C\uDE00' + }, + { + name: 'Imperial_Aramaic', + astral: '\uD802[\uDC40-\uDC55\uDC57-\uDC5F]' + }, + { + name: 'Inherited', + bmp: '\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951\u0952\u1AB0-\u1ABE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D', + astral: '\uD800[\uDDFD\uDEE0]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]' + }, + { + name: 'Inscriptional_Pahlavi', + astral: '\uD802[\uDF60-\uDF72\uDF78-\uDF7F]' + }, + { + name: 'Inscriptional_Parthian', + astral: '\uD802[\uDF40-\uDF55\uDF58-\uDF5F]' + }, + { + name: 'Javanese', + bmp: '\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF' + }, + { + name: 'Kaithi', + astral: '\uD804[\uDC80-\uDCC1]' + }, + { + name: 'Kannada', + bmp: '\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2' + }, + { + name: 'Katakana', + bmp: '\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D', + astral: '\uD82C\uDC00' + }, + { + name: 'Kayah_Li', + bmp: '\uA900-\uA92D\uA92F' + }, + { + name: 'Kharoshthi', + astral: '\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F-\uDE47\uDE50-\uDE58]' + }, + { + name: 'Khmer', + bmp: '\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF' + }, + { + name: 'Khojki', + astral: '\uD804[\uDE00-\uDE11\uDE13-\uDE3E]' + }, + { + name: 'Khudawadi', + astral: '\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]' + }, + { + name: 'Lao', + bmp: '\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF' + }, + { + name: 'Latin', + bmp: 'A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A' + }, + { + name: 'Lepcha', + bmp: '\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F' + }, + { + name: 'Limbu', + bmp: '\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F' + }, + { + name: 'Linear_A', + astral: '\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]' + }, + { + name: 'Linear_B', + astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]' + }, + { + name: 'Lisu', + bmp: '\uA4D0-\uA4FF' + }, + { + name: 'Lycian', + astral: '\uD800[\uDE80-\uDE9C]' + }, + { + name: 'Lydian', + astral: '\uD802[\uDD20-\uDD39\uDD3F]' + }, + { + name: 'Mahajani', + astral: '\uD804[\uDD50-\uDD76]' + }, + { + name: 'Malayalam', + bmp: '\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F' + }, + { + name: 'Mandaic', + bmp: '\u0840-\u085B\u085E' + }, + { + name: 'Manichaean', + astral: '\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]' + }, + { + name: 'Marchen', + astral: '\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]' + }, + { + name: 'Meetei_Mayek', + bmp: '\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9' + }, + { + name: 'Mende_Kikakui', + astral: '\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]' + }, + { + name: 'Meroitic_Cursive', + astral: '\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]' + }, + { + name: 'Meroitic_Hieroglyphs', + astral: '\uD802[\uDD80-\uDD9F]' + }, + { + name: 'Miao', + astral: '\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]' + }, + { + name: 'Modi', + astral: '\uD805[\uDE00-\uDE44\uDE50-\uDE59]' + }, + { + name: 'Mongolian', + bmp: '\u1800\u1801\u1804\u1806-\u180E\u1810-\u1819\u1820-\u1877\u1880-\u18AA', + astral: '\uD805[\uDE60-\uDE6C]' + }, + { + name: 'Mro', + astral: '\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]' + }, + { + name: 'Multani', + astral: '\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]' + }, + { + name: 'Myanmar', + bmp: '\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F' + }, + { + name: 'Nabataean', + astral: '\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]' + }, + { + name: 'New_Tai_Lue', + bmp: '\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF' + }, + { + name: 'Newa', + astral: '\uD805[\uDC00-\uDC59\uDC5B\uDC5D]' + }, + { + name: 'Nko', + bmp: '\u07C0-\u07FA' + }, + { + name: 'Ogham', + bmp: '\u1680-\u169C' + }, + { + name: 'Ol_Chiki', + bmp: '\u1C50-\u1C7F' + }, + { + name: 'Old_Hungarian', + astral: '\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]' + }, + { + name: 'Old_Italic', + astral: '\uD800[\uDF00-\uDF23]' + }, + { + name: 'Old_North_Arabian', + astral: '\uD802[\uDE80-\uDE9F]' + }, + { + name: 'Old_Permic', + astral: '\uD800[\uDF50-\uDF7A]' + }, + { + name: 'Old_Persian', + astral: '\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]' + }, + { + name: 'Old_South_Arabian', + astral: '\uD802[\uDE60-\uDE7F]' + }, + { + name: 'Old_Turkic', + astral: '\uD803[\uDC00-\uDC48]' + }, + { + name: 'Oriya', + bmp: '\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77' + }, + { + name: 'Osage', + astral: '\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]' + }, + { + name: 'Osmanya', + astral: '\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]' + }, + { + name: 'Pahawh_Hmong', + astral: '\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]' + }, + { + name: 'Palmyrene', + astral: '\uD802[\uDC60-\uDC7F]' + }, + { + name: 'Pau_Cin_Hau', + astral: '\uD806[\uDEC0-\uDEF8]' + }, + { + name: 'Phags_Pa', + bmp: '\uA840-\uA877' + }, + { + name: 'Phoenician', + astral: '\uD802[\uDD00-\uDD1B\uDD1F]' + }, + { + name: 'Psalter_Pahlavi', + astral: '\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]' + }, + { + name: 'Rejang', + bmp: '\uA930-\uA953\uA95F' + }, + { + name: 'Runic', + bmp: '\u16A0-\u16EA\u16EE-\u16F8' + }, + { + name: 'Samaritan', + bmp: '\u0800-\u082D\u0830-\u083E' + }, + { + name: 'Saurashtra', + bmp: '\uA880-\uA8C5\uA8CE-\uA8D9' + }, + { + name: 'Sharada', + astral: '\uD804[\uDD80-\uDDCD\uDDD0-\uDDDF]' + }, + { + name: 'Shavian', + astral: '\uD801[\uDC50-\uDC7F]' + }, + { + name: 'Siddham', + astral: '\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]' + }, + { + name: 'SignWriting', + astral: '\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]' + }, + { + name: 'Sinhala', + bmp: '\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4', + astral: '\uD804[\uDDE1-\uDDF4]' + }, + { + name: 'Sora_Sompeng', + astral: '\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]' + }, + { + name: 'Sundanese', + bmp: '\u1B80-\u1BBF\u1CC0-\u1CC7' + }, + { + name: 'Syloti_Nagri', + bmp: '\uA800-\uA82B' + }, + { + name: 'Syriac', + bmp: '\u0700-\u070D\u070F-\u074A\u074D-\u074F' + }, + { + name: 'Tagalog', + bmp: '\u1700-\u170C\u170E-\u1714' + }, + { + name: 'Tagbanwa', + bmp: '\u1760-\u176C\u176E-\u1770\u1772\u1773' + }, + { + name: 'Tai_Le', + bmp: '\u1950-\u196D\u1970-\u1974' + }, + { + name: 'Tai_Tham', + bmp: '\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD' + }, + { + name: 'Tai_Viet', + bmp: '\uAA80-\uAAC2\uAADB-\uAADF' + }, + { + name: 'Takri', + astral: '\uD805[\uDE80-\uDEB7\uDEC0-\uDEC9]' + }, + { + name: 'Tamil', + bmp: '\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA' + }, + { + name: 'Tangut', + astral: '\uD81B\uDFE0|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]' + }, + { + name: 'Telugu', + bmp: '\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7F' + }, + { + name: 'Thaana', + bmp: '\u0780-\u07B1' + }, + { + name: 'Thai', + bmp: '\u0E01-\u0E3A\u0E40-\u0E5B' + }, + { + name: 'Tibetan', + bmp: '\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA' + }, + { + name: 'Tifinagh', + bmp: '\u2D30-\u2D67\u2D6F\u2D70\u2D7F' + }, + { + name: 'Tirhuta', + astral: '\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]' + }, + { + name: 'Ugaritic', + astral: '\uD800[\uDF80-\uDF9D\uDF9F]' + }, + { + name: 'Vai', + bmp: '\uA500-\uA62B' + }, + { + name: 'Warang_Citi', + astral: '\uD806[\uDCA0-\uDCF2\uDCFF]' + }, + { + name: 'Yi', + bmp: '\uA000-\uA48C\uA490-\uA4C6' + } + ]); + +}; + +},{}],8:[function(require,module,exports){ +var XRegExp = require('./xregexp'); + +require('./addons/build')(XRegExp); +require('./addons/matchrecursive')(XRegExp); +require('./addons/unicode-base')(XRegExp); +require('./addons/unicode-blocks')(XRegExp); +require('./addons/unicode-categories')(XRegExp); +require('./addons/unicode-properties')(XRegExp); +require('./addons/unicode-scripts')(XRegExp); + +module.exports = XRegExp; + +},{"./addons/build":1,"./addons/matchrecursive":2,"./addons/unicode-base":3,"./addons/unicode-blocks":4,"./addons/unicode-categories":5,"./addons/unicode-properties":6,"./addons/unicode-scripts":7,"./xregexp":9}],9:[function(require,module,exports){ +/*! + * XRegExp 3.2.0 + * <xregexp.com> + * Steven Levithan (c) 2007-2017 MIT License + */ + +'use strict'; + +/** + * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and + * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to + * make your client-side grepping simpler and more powerful, while freeing you from related + * cross-browser inconsistencies. + */ + +// ==--------------------------== +// Private stuff +// ==--------------------------== + +// Property name used for extended regex instance data +var REGEX_DATA = 'xregexp'; +// Optional features that can be installed and uninstalled +var features = { + astral: false, + natives: false +}; +// Native methods to use and restore ('native' is an ES3 reserved keyword) +var nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split +}; +// Storage for fixed/extended native methods +var fixed = {}; +// Storage for regexes cached by `XRegExp.cache` +var regexCache = {}; +// Storage for pattern details cached by the `XRegExp` constructor +var patternCache = {}; +// Storage for regex syntax tokens added internally or by `XRegExp.addToken` +var tokens = []; +// Token scopes +var defaultScope = 'default'; +var classScope = 'class'; +// Regexes that match native regex syntax, including octals +var nativeTokens = { + // Any native multicharacter token in default scope, or any single character + 'default': /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, + // Any native multicharacter token in character class scope, or any single character + 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ +}; +// Any backreference or dollar-prefixed character in replacement strings +var replacementToken = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g; +// Check for correct `exec` handling of nonparticipating capturing groups +var correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; +// Check for ES6 `flags` prop support +var hasFlagsProp = /x/.flags !== undefined; +// Shortcut to `Object.prototype.toString` +var toString = {}.toString; + +function hasNativeFlag(flag) { + // Can't check based on the presence of properties/getters since browsers might support such + // properties even when they don't support the corresponding flag in regex construction (tested + // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u` + // throws an error) + var isSupported = true; + try { + // Can't use regex literals for testing even in a `try` because regex literals with + // unsupported flags cause a compilation error in IE + new RegExp('', flag); + } catch (exception) { + isSupported = false; + } + return isSupported; +} +// Check for ES6 `u` flag support +var hasNativeU = hasNativeFlag('u'); +// Check for ES6 `y` flag support +var hasNativeY = hasNativeFlag('y'); +// Tracker for known flags, including addon flags +var registeredFlags = { + g: true, + i: true, + m: true, + u: hasNativeU, + y: hasNativeY +}; + +/** + * Attaches extended data and `XRegExp.prototype` properties to a regex object. + * + * @private + * @param {RegExp} regex Regex to augment. + * @param {Array} captureNames Array with capture names, or `null`. + * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A. + * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A. + * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * @returns {RegExp} Augmented regex. + */ +function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { + var p; + + regex[REGEX_DATA] = { + captureNames: captureNames + }; + + if (isInternalOnly) { + return regex; + } + + // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value + if (regex.__proto__) { + regex.__proto__ = XRegExp.prototype; + } else { + for (p in XRegExp.prototype) { + // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this + // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype` + // extensions exist on `regex.prototype` anyway + regex[p] = XRegExp.prototype[p]; + } + } + + regex[REGEX_DATA].source = xSource; + // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order + regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags; + + return regex; +} + +/** + * Removes any duplicate characters from the provided string. + * + * @private + * @param {String} str String to remove duplicate characters from. + * @returns {String} String with any duplicate characters removed. + */ +function clipDuplicates(str) { + return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, ''); +} + +/** + * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype` + * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing + * flags g and y while copying the regex. + * + * @private + * @param {RegExp} regex Regex to copy. + * @param {Object} [options] Options object with optional properties: + * - `addG` {Boolean} Add flag g while copying the regex. + * - `addY` {Boolean} Add flag y while copying the regex. + * - `removeG` {Boolean} Remove flag g while copying the regex. + * - `removeY` {Boolean} Remove flag y while copying the regex. + * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * - `source` {String} Overrides `<regex>.source`, for special cases. + * @returns {RegExp} Copy of the provided regex, possibly with modified flags. + */ +function copyRegex(regex, options) { + if (!XRegExp.isRegExp(regex)) { + throw new TypeError('Type RegExp expected'); + } + + var xData = regex[REGEX_DATA] || {}; + var flags = getNativeFlags(regex); + var flagsToAdd = ''; + var flagsToRemove = ''; + var xregexpSource = null; + var xregexpFlags = null; + + options = options || {}; + + if (options.removeG) {flagsToRemove += 'g';} + if (options.removeY) {flagsToRemove += 'y';} + if (flagsToRemove) { + flags = nativ.replace.call(flags, new RegExp('[' + flagsToRemove + ']+', 'g'), ''); + } + + if (options.addG) {flagsToAdd += 'g';} + if (options.addY) {flagsToAdd += 'y';} + if (flagsToAdd) { + flags = clipDuplicates(flags + flagsToAdd); + } + + if (!options.isInternalOnly) { + if (xData.source !== undefined) { + xregexpSource = xData.source; + } + // null or undefined; don't want to add to `flags` if the previous value was null, since + // that indicates we're not tracking original precompilation flags + if (xData.flags != null) { + // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never + // removed for non-internal regexes, so don't need to handle it + xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags; + } + } + + // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid + // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and + // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the + // translation to native regex syntax + regex = augment( + new RegExp(options.source || regex.source, flags), + hasNamedCapture(regex) ? xData.captureNames.slice(0) : null, + xregexpSource, + xregexpFlags, + options.isInternalOnly + ); + + return regex; +} + +/** + * Converts hexadecimal to decimal. + * + * @private + * @param {String} hex + * @returns {Number} + */ +function dec(hex) { + return parseInt(hex, 16); +} + +/** + * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an + * inline comment or whitespace with flag x. This is used directly as a token handler function + * passed to `XRegExp.addToken`. + * + * @private + * @param {String} match Match arg of `XRegExp.addToken` handler + * @param {String} scope Scope arg of `XRegExp.addToken` handler + * @param {String} flags Flags arg of `XRegExp.addToken` handler + * @returns {String} Either '' or '(?:)', depending on which is needed in the context of the match. + */ +function getContextualTokenSeparator(match, scope, flags) { + if ( + // No need to separate tokens if at the beginning or end of a group + match.input.charAt(match.index - 1) === '(' || + match.input.charAt(match.index + match[0].length) === ')' || + // Avoid separating tokens when the following token is a quantifier + isPatternNext(match.input, match.index + match[0].length, flags, '[?*+]|{\\d+(?:,\\d*)?}') + ) { + return ''; + } + // Keep tokens separated. This avoids e.g. inadvertedly changing `\1 1` or `\1(?#)1` to `\11`. + // This also ensures all tokens remain as discrete atoms, e.g. it avoids converting the syntax + // error `(? :` into `(?:`. + return '(?:)'; +} + +/** + * Returns native `RegExp` flags used by a regex object. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {String} Native flags in use. + */ +function getNativeFlags(regex) { + return hasFlagsProp ? + regex.flags : + // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation + // with an empty string) allows this to continue working predictably when + // `XRegExp.proptotype.toString` is overridden + nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1]; +} + +/** + * Determines whether a regex has extended instance data used to track capture names. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {Boolean} Whether the regex uses named capture. + */ +function hasNamedCapture(regex) { + return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames); +} + +/** + * Converts decimal to hexadecimal. + * + * @private + * @param {Number|String} dec + * @returns {String} + */ +function hex(dec) { + return parseInt(dec, 10).toString(16); +} + +/** + * Returns the first index at which a given value can be found in an array. + * + * @private + * @param {Array} array Array to search. + * @param {*} value Value to locate in the array. + * @returns {Number} Zero-based index at which the item is found, or -1. + */ +function indexOf(array, value) { + var len = array.length; + var i; + + for (i = 0; i < len; ++i) { + if (array[i] === value) { + return i; + } + } + + return -1; +} + +/** + * Checks whether the next nonignorable token after the specified position matches the + * `needlePattern` + * + * @private + * @param {String} pattern Pattern to search within. + * @param {Number} pos Index in `pattern` to search at. + * @param {String} flags Flags used by the pattern. + * @param {String} needlePattern Pattern to match the next token against. + * @returns {Boolean} Whether the next nonignorable token matches `needlePattern` + */ +function isPatternNext(pattern, pos, flags, needlePattern) { + var inlineCommentPattern = '\\(\\?#[^)]*\\)'; + var lineCommentPattern = '#[^#\\n]*'; + var patternsToIgnore = flags.indexOf('x') > -1 ? + // Ignore any leading whitespace, line comments, and inline comments + ['\\s', lineCommentPattern, inlineCommentPattern] : + // Ignore any leading inline comments + [inlineCommentPattern]; + return nativ.test.call( + new RegExp('^(?:' + patternsToIgnore.join('|') + ')*(?:' + needlePattern + ')'), + pattern.slice(pos) + ); +} + +/** + * Determines whether a value is of the specified type, by resolving its internal [[Class]]. + * + * @private + * @param {*} value Object to check. + * @param {String} type Type to check for, in TitleCase. + * @returns {Boolean} Whether the object matches the type. + */ +function isType(value, type) { + return toString.call(value) === '[object ' + type + ']'; +} + +/** + * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values. + * + * @private + * @param {String} str + * @returns {String} + */ +function pad4(str) { + while (str.length < 4) { + str = '0' + str; + } + return str; +} + +/** + * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads + * the flag preparation logic from the `XRegExp` constructor. + * + * @private + * @param {String} pattern Regex pattern, possibly with a leading mode modifier. + * @param {String} flags Any combination of flags. + * @returns {Object} Object with properties `pattern` and `flags`. + */ +function prepareFlags(pattern, flags) { + var i; + + // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags + if (clipDuplicates(flags) !== flags) { + throw new SyntaxError('Invalid duplicate regex flag ' + flags); + } + + // Strip and apply a leading mode modifier with any combination of flags except g or y + pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function($0, $1) { + if (nativ.test.call(/[gy]/, $1)) { + throw new SyntaxError('Cannot use flag g or y in mode modifier ' + $0); + } + // Allow duplicate flags within the mode modifier + flags = clipDuplicates(flags + $1); + return ''; + }); + + // Throw on unknown native or nonnative flags + for (i = 0; i < flags.length; ++i) { + if (!registeredFlags[flags.charAt(i)]) { + throw new SyntaxError('Unknown regex flag ' + flags.charAt(i)); + } + } + + return { + pattern: pattern, + flags: flags + }; +} + +/** + * Prepares an options object from the given value. + * + * @private + * @param {String|Object} value Value to convert to an options object. + * @returns {Object} Options object. + */ +function prepareOptions(value) { + var options = {}; + + if (isType(value, 'String')) { + XRegExp.forEach(value, /[^\s,]+/, function(match) { + options[match] = true; + }); + + return options; + } + + return value; +} + +/** + * Registers a flag so it doesn't throw an 'unknown flag' error. + * + * @private + * @param {String} flag Single-character flag to register. + */ +function registerFlag(flag) { + if (!/^[\w$]$/.test(flag)) { + throw new Error('Flag must be a single character A-Za-z0-9_$'); + } + + registeredFlags[flag] = true; +} + +/** + * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified + * position, until a match is found. + * + * @private + * @param {String} pattern Original pattern from which an XRegExp object is being built. + * @param {String} flags Flags being used to construct the regex. + * @param {Number} pos Position to search for tokens within `pattern`. + * @param {Number} scope Regex scope to apply: 'default' or 'class'. + * @param {Object} context Context object to use for token handler functions. + * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`. + */ +function runTokens(pattern, flags, pos, scope, context) { + var i = tokens.length; + var leadChar = pattern.charAt(pos); + var result = null; + var match; + var t; + + // Run in reverse insertion order + while (i--) { + t = tokens[i]; + if ( + (t.leadChar && t.leadChar !== leadChar) || + (t.scope !== scope && t.scope !== 'all') || + (t.flag && flags.indexOf(t.flag) === -1) + ) { + continue; + } + + match = XRegExp.exec(pattern, t.regex, pos, 'sticky'); + if (match) { + result = { + matchLength: match[0].length, + output: t.handler.call(context, match, scope, flags), + reparse: t.reparse + }; + // Finished with token tests + break; + } + } + + return result; +} + +/** + * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to + * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if + * the Unicode Base addon is not available, since flag A is registered by that addon. + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ +function setAstral(on) { + features.astral = on; +} + +/** + * Enables or disables native method overrides. + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ +function setNatives(on) { + RegExp.prototype.exec = (on ? fixed : nativ).exec; + RegExp.prototype.test = (on ? fixed : nativ).test; + String.prototype.match = (on ? fixed : nativ).match; + String.prototype.replace = (on ? fixed : nativ).replace; + String.prototype.split = (on ? fixed : nativ).split; + + features.natives = on; +} + +/** + * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow + * the ES5 abstract operation `ToObject`. + * + * @private + * @param {*} value Object to check and return. + * @returns {*} The provided object. + */ +function toObject(value) { + // null or undefined + if (value == null) { + throw new TypeError('Cannot convert null or undefined to object'); + } + + return value; +} + +// ==--------------------------== +// Constructor +// ==--------------------------== + +/** + * Creates an extended regular expression object for matching text with a pattern. Differs from a + * native regular expression in that additional syntax and flags are supported. The returned object + * is in fact a native `RegExp` and works with all native methods. + * + * @class XRegExp + * @constructor + * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy. + * @param {String} [flags] Any combination of flags. + * Native flags: + * - `g` - global + * - `i` - ignore case + * - `m` - multiline anchors + * - `u` - unicode (ES6) + * - `y` - sticky (Firefox 3+, ES6) + * Additional XRegExp flags: + * - `n` - explicit capture + * - `s` - dot matches all (aka singleline) + * - `x` - free-spacing and line comments (aka extended) + * - `A` - astral (requires the Unicode Base addon) + * Flags cannot be provided when constructing one `RegExp` from another. + * @returns {RegExp} Extended regular expression object. + * @example + * + * // With named capture and flag x + * XRegExp('(?<year> [0-9]{4} ) -? # year \n\ + * (?<month> [0-9]{2} ) -? # month \n\ + * (?<day> [0-9]{2} ) # day ', 'x'); + * + * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp) + * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and + * // have fresh `lastIndex` properties (set to zero). + * XRegExp(/regex/); + */ +function XRegExp(pattern, flags) { + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) { + throw new TypeError('Cannot supply flags when copying a RegExp'); + } + return copyRegex(pattern); + } + + // Copy the argument behavior of `RegExp` + pattern = pattern === undefined ? '' : String(pattern); + flags = flags === undefined ? '' : String(flags); + + if (XRegExp.isInstalled('astral') && flags.indexOf('A') === -1) { + // This causes an error to be thrown if the Unicode Base addon is not available + flags += 'A'; + } + + if (!patternCache[pattern]) { + patternCache[pattern] = {}; + } + + if (!patternCache[pattern][flags]) { + var context = { + hasNamedCapture: false, + captureNames: [] + }; + var scope = defaultScope; + var output = ''; + var pos = 0; + var result; + + // Check for flag-related errors, and strip/apply flags in a leading mode modifier + var applied = prepareFlags(pattern, flags); + var appliedPattern = applied.pattern; + var appliedFlags = applied.flags; + + // Use XRegExp's tokens to translate the pattern to a native regex pattern. + // `appliedPattern.length` may change on each iteration if tokens use `reparse` + while (pos < appliedPattern.length) { + do { + // Check for custom tokens at the current position + result = runTokens(appliedPattern, appliedFlags, pos, scope, context); + // If the matched token used the `reparse` option, splice its output into the + // pattern before running tokens again at the same position + if (result && result.reparse) { + appliedPattern = appliedPattern.slice(0, pos) + + result.output + + appliedPattern.slice(pos + result.matchLength); + } + } while (result && result.reparse); + + if (result) { + output += result.output; + pos += (result.matchLength || 1); + } else { + // Get the native token at the current position + var token = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky')[0]; + output += token; + pos += token.length; + if (token === '[' && scope === defaultScope) { + scope = classScope; + } else if (token === ']' && scope === classScope) { + scope = defaultScope; + } + } + } + + patternCache[pattern][flags] = { + // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty + // groups are sometimes inserted during regex transpilation in order to keep tokens + // separated. However, more than one empty group in a row is never needed. + pattern: nativ.replace.call(output, /(?:\(\?:\))+/g, '(?:)'), + // Strip all but native flags + flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''), + // `context.captureNames` has an item for each capturing group, even if unnamed + captures: context.hasNamedCapture ? context.captureNames : null + }; + } + + var generated = patternCache[pattern][flags]; + return augment( + new RegExp(generated.pattern, generated.flags), + generated.captures, + pattern, + flags + ); +} + +// Add `RegExp.prototype` to the prototype chain +XRegExp.prototype = new RegExp(); + +// ==--------------------------== +// Public properties +// ==--------------------------== + +/** + * The XRegExp version number as a string containing three dot-separated parts. For example, + * '2.0.0-beta-3'. + * + * @static + * @memberOf XRegExp + * @type String + */ +XRegExp.version = '3.2.0'; + +// ==--------------------------== +// Public methods +// ==--------------------------== + +// Intentionally undocumented; used in tests and addons +XRegExp._clipDuplicates = clipDuplicates; +XRegExp._hasNativeFlag = hasNativeFlag; +XRegExp._dec = dec; +XRegExp._hex = hex; +XRegExp._pad4 = pad4; + +/** + * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to + * create XRegExp addons. If more than one token can match the same string, the last added wins. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex object that matches the new token. + * @param {Function} handler Function that returns a new pattern string (using native regex syntax) + * to replace the matched token within all future XRegExp regexes. Has access to persistent + * properties of the regex being built, through `this`. Invoked with three arguments: + * - The match array, with named backreference properties. + * - The regex scope where the match was found: 'default' or 'class'. + * - The flags used by the regex, including any flags in a leading mode modifier. + * The handler function becomes part of the XRegExp construction process, so be careful not to + * construct XRegExps within the function or you will trigger infinite recursion. + * @param {Object} [options] Options object with optional properties: + * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'. + * - `flag` {String} Single-character flag that triggers the token. This also registers the + * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used. + * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are + * not required to trigger the token. This registers the flags, to prevent XRegExp from + * throwing an 'unknown flag' error when any of the flags are used. + * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as + * final, and instead be reparseable by other tokens (including the current token). Allows + * token chaining or deferring. + * - `leadChar` {String} Single character that occurs at the beginning of any successful match + * of the token (not always applicable). This doesn't change the behavior of the token unless + * you provide an erroneous value. However, providing it can increase the token's performance + * since the token can be skipped at any positions where this character doesn't appear. + * @example + * + * // Basic usage: Add \a for the ALERT control code + * XRegExp.addToken( + * /\\a/, + * function() {return '\\x07';}, + * {scope: 'all'} + * ); + * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true + * + * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers. + * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of + * // character classes only) + * XRegExp.addToken( + * /([?*+]|{\d+(?:,\d*)?})(\??)/, + * function(match) {return match[1] + (match[2] ? '' : '?');}, + * {flag: 'U'} + * ); + * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a' + * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa' + */ +XRegExp.addToken = function(regex, handler, options) { + options = options || {}; + var optionalFlags = options.optionalFlags; + var i; + + if (options.flag) { + registerFlag(options.flag); + } + + if (optionalFlags) { + optionalFlags = nativ.split.call(optionalFlags, ''); + for (i = 0; i < optionalFlags.length; ++i) { + registerFlag(optionalFlags[i]); + } + } + + // Add to the private list of syntax tokens + tokens.push({ + regex: copyRegex(regex, { + addG: true, + addY: hasNativeY, + isInternalOnly: true + }), + handler: handler, + scope: options.scope || defaultScope, + flag: options.flag, + reparse: options.reparse, + leadChar: options.leadChar + }); + + // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and flags + // might now produce different results + XRegExp.cache.flush('patterns'); +}; + +/** + * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with + * the same pattern and flag combination, the cached copy of the regex is returned. + * + * @memberOf XRegExp + * @param {String} pattern Regex pattern string. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Cached XRegExp object. + * @example + * + * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * // The regex is compiled once only + * } + */ +XRegExp.cache = function(pattern, flags) { + if (!regexCache[pattern]) { + regexCache[pattern] = {}; + } + return regexCache[pattern][flags] || ( + regexCache[pattern][flags] = XRegExp(pattern, flags) + ); +}; + +// Intentionally undocumented; used in tests +XRegExp.cache.flush = function(cacheName) { + if (cacheName === 'patterns') { + // Flush the pattern cache used by the `XRegExp` constructor + patternCache = {}; + } else { + // Flush the regex cache populated by `XRegExp.cache` + regexCache = {}; + } +}; + +/** + * Escapes any regular expression metacharacters, for use when matching literal strings. The result + * can safely be used at any point within a regex that uses any flags. + * + * @memberOf XRegExp + * @param {String} str String to escape. + * @returns {String} String with regex metacharacters escaped. + * @example + * + * XRegExp.escape('Escaped? <.>'); + * // -> 'Escaped\?\ <\.>' + */ +XRegExp.escape = function(str) { + return nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +}; + +/** + * Executes a regex search in a specified string. Returns a match array or `null`. If the provided + * regex uses named capture, named backreference properties are included on the match array. + * Optional `pos` and `sticky` arguments specify the search start position, and whether the match + * must start at the specified position only. The `lastIndex` property of the provided regex is not + * used, but is updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.exec` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Array} Match array with named backreference properties, or `null`. + * @example + * + * // Basic use, with named backreference + * var match = XRegExp.exec('U+2620', XRegExp('U\\+(?<hex>[0-9A-F]{4})')); + * match.hex; // -> '2620' + * + * // With pos and sticky, in a loop + * var pos = 2, result = [], match; + * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { + * result.push(match[1]); + * pos = match.index + match[0].length; + * } + * // result -> ['2', '3', '4'] + */ +XRegExp.exec = function(str, regex, pos, sticky) { + var cacheKey = 'g'; + var addY = false; + var fakeY = false; + var match; + var r2; + + addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false)); + if (addY) { + cacheKey += 'y'; + } else if (sticky) { + // Simulate sticky matching by appending an empty capture to the original regex. The + // resulting regex will succeed no matter what at the current index (set with `lastIndex`), + // and will not search the rest of the subject string. We'll know that the original regex + // has failed if that last capture is `''` rather than `undefined` (i.e., if that last + // capture participated in the match). + fakeY = true; + cacheKey += 'FakeY'; + } + + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; + + // Shares cached copies with `XRegExp.match`/`replace` + r2 = regex[REGEX_DATA][cacheKey] || ( + regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: true, + addY: addY, + source: fakeY ? regex.source + '|()' : undefined, + removeY: sticky === false, + isInternalOnly: true + }) + ); + + pos = pos || 0; + r2.lastIndex = pos; + + // Fixed `exec` required for `lastIndex` fix, named backreferences, etc. + match = fixed.exec.call(r2, str); + + // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means + // the original regexp failed (see above). + if (fakeY && match && match.pop() === '') { + match = null; + } + + if (regex.global) { + regex.lastIndex = match ? r2.lastIndex : 0; + } + + return match; +}; + +/** + * Executes a provided function once per regex match. Searches always start at the beginning of the + * string and continue until the end, regardless of the state of the regex's `global` property and + * initial `lastIndex`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Function} callback Function to execute for each match. Invoked with four arguments: + * - The match array, with named backreference properties. + * - The zero-based match index. + * - The string being traversed. + * - The regex object being used to traverse the string. + * @example + * + * // Extracts every other digit from a string + * var evens = []; + * XRegExp.forEach('1a2345', /\d/, function(match, i) { + * if (i % 2) evens.push(+match[0]); + * }); + * // evens -> [2, 4] + */ +XRegExp.forEach = function(str, regex, callback) { + var pos = 0; + var i = -1; + var match; + + while ((match = XRegExp.exec(str, regex, pos))) { + // Because `regex` is provided to `callback`, the function could use the deprecated/ + // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec` + // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop, + // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of + // regexes, mutating the regex will not have any effect on the iteration or matched strings, + // which is a nice side effect that brings extra safety. + callback(match, ++i, str, regex); + + pos = match.index + (match[0].length || 1); + } +}; + +/** + * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with + * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native + * regexes are not recompiled using XRegExp syntax. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex to globalize. + * @returns {RegExp} Copy of the provided regex with flag `g` added. + * @example + * + * var globalCopy = XRegExp.globalize(/regex/); + * globalCopy.global; // -> true + */ +XRegExp.globalize = function(regex) { + return copyRegex(regex, {addG: true}); +}; + +/** + * Installs optional features according to the specified options. Can be undone using + * `XRegExp.uninstall`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.install({ + * // Enables support for astral code points in Unicode addons (implicitly sets flag A) + * astral: true, + * + * // DEPRECATED: Overrides native regex methods with fixed/extended versions + * natives: true + * }); + * + * // With an options string + * XRegExp.install('astral natives'); + */ +XRegExp.install = function(options) { + options = prepareOptions(options); + + if (!features.astral && options.astral) { + setAstral(true); + } + + if (!features.natives && options.natives) { + setNatives(true); + } +}; + +/** + * Checks whether an individual optional feature is installed. + * + * @memberOf XRegExp + * @param {String} feature Name of the feature to check. One of: + * - `astral` + * - `natives` + * @returns {Boolean} Whether the feature is installed. + * @example + * + * XRegExp.isInstalled('astral'); + */ +XRegExp.isInstalled = function(feature) { + return !!(features[feature]); +}; + +/** + * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes + * created in another frame, when `instanceof` and `constructor` checks would fail. + * + * @memberOf XRegExp + * @param {*} value Object to check. + * @returns {Boolean} Whether the object is a `RegExp` object. + * @example + * + * XRegExp.isRegExp('string'); // -> false + * XRegExp.isRegExp(/regex/i); // -> true + * XRegExp.isRegExp(RegExp('^', 'm')); // -> true + * XRegExp.isRegExp(XRegExp('(?s).')); // -> true + */ +XRegExp.isRegExp = function(value) { + return toString.call(value) === '[object RegExp]'; + //return isType(value, 'RegExp'); +}; + +/** + * Returns the first matched string, or in global mode, an array containing all matched strings. + * This is essentially a more convenient re-implementation of `String.prototype.match` that gives + * the result types you actually want (string instead of `exec`-style array in match-first mode, + * and an empty array instead of `null` when no matches are found in match-all mode). It also lets + * you override flag g and ignore `lastIndex`, and fixes browser bugs. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to + * return an array of all matched strings. If not explicitly specified and `regex` uses flag g, + * `scope` is 'all'. + * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all + * mode: Array of all matched strings, or an empty array. + * @example + * + * // Match first + * XRegExp.match('abc', /\w/); // -> 'a' + * XRegExp.match('abc', /\w/g, 'one'); // -> 'a' + * XRegExp.match('abc', /x/g, 'one'); // -> null + * + * // Match all + * XRegExp.match('abc', /\w/g); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /\w/, 'all'); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /x/, 'all'); // -> [] + */ +XRegExp.match = function(str, regex, scope) { + var global = (regex.global && scope !== 'one') || scope === 'all'; + var cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY'; + var result; + var r2; + + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; + + // Shares cached copies with `XRegExp.exec`/`replace` + r2 = regex[REGEX_DATA][cacheKey] || ( + regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + }) + ); + + result = nativ.match.call(toObject(str), r2); + + if (regex.global) { + regex.lastIndex = ( + (scope === 'one' && result) ? + // Can't use `r2.lastIndex` since `r2` is nonglobal in this case + (result.index + result[0].length) : 0 + ); + } + + return global ? (result || []) : (result && result[0]); +}; + +/** + * Retrieves the matches from searching a string using a chain of regexes that successively search + * within previous matches. The provided `chain` array can contain regexes and or objects with + * `regex` and `backref` properties. When a backreference is specified, the named or numbered + * backreference is passed forward to the next regex or returned. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} chain Regexes that each search for matches within preceding results. + * @returns {Array} Matches by the last regex in the chain, or an empty array. + * @example + * + * // Basic usage; matches numbers within <b> tags + * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [ + * XRegExp('(?is)<b>.*?</b>'), + * /\d+/ + * ]); + * // -> ['2', '4', '56'] + * + * // Passing forward and returning specific backreferences + * html = '<a href="http://xregexp.com/api/">XRegExp</a>\ + * <a href="http://www.google.com/">Google</a>'; + * XRegExp.matchChain(html, [ + * {regex: /<a href="([^"]+)">/i, backref: 1}, + * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'} + * ]); + * // -> ['xregexp.com', 'www.google.com'] + */ +XRegExp.matchChain = function(str, chain) { + return (function recurseChain(values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}; + var matches = []; + + function addMatch(match) { + if (item.backref) { + // Safari 4.0.5 (but not 5.0.5+) inappropriately uses sparse arrays to hold the + // `undefined`s for backreferences to nonparticipating capturing groups. In such + // cases, a `hasOwnProperty` or `in` check on its own would inappropriately throw + // the exception, so also check if the backreference is a number that is within the + // bounds of the array. + if (!(match.hasOwnProperty(item.backref) || +item.backref < match.length)) { + throw new ReferenceError('Backreference to undefined group: ' + item.backref); + } + + matches.push(match[item.backref] || ''); + } else { + matches.push(match[0]); + } + } + + for (var i = 0; i < values.length; ++i) { + XRegExp.forEach(values[i], item.regex, addMatch); + } + + return ((level === chain.length - 1) || !matches.length) ? + matches : + recurseChain(matches, level + 1); + }([str], 0)); +}; + +/** + * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string + * or regex, and the replacement can be a string or a function to be called for each match. To + * perform a global search and replace, use the optional `scope` argument or include flag g if using + * a regex. Replacement strings can use `${n}` for named and numbered backreferences. Replacement + * functions can use named backreferences via `arguments[0].name`. Also fixes browser bugs compared + * to the native `String.prototype.replace` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * Replacement strings can include special replacement syntax: + * - $$ - Inserts a literal $ character. + * - $&, $0 - Inserts the matched substring. + * - $` - Inserts the string that precedes the matched substring (left context). + * - $' - Inserts the string that follows the matched substring (right context). + * - $n, $nn - Where n/nn are digits referencing an existent capturing group, inserts + * backreference n/nn. + * - ${n} - Where n is a name or any number of digits that reference an existent capturing + * group, inserts backreference n. + * Replacement functions are invoked with three or more arguments: + * - The matched substring (corresponds to $& above). Named backreferences are accessible as + * properties of this first argument. + * - 0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). + * - The zero-based index of the match within the total search string. + * - The total string being searched. + * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not + * explicitly specified and using a regex with flag g, `scope` is 'all'. + * @returns {String} New string with one or all matches replaced. + * @example + * + * // Regex search, using named backreferences in replacement string + * var name = XRegExp('(?<first>\\w+) (?<last>\\w+)'); + * XRegExp.replace('John Smith', name, '${last}, ${first}'); + * // -> 'Smith, John' + * + * // Regex search, using named backreferences in replacement function + * XRegExp.replace('John Smith', name, function(match) { + * return match.last + ', ' + match.first; + * }); + * // -> 'Smith, John' + * + * // String search, with replace-all + * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all'); + * // -> 'XRegExp builds XRegExps' + */ +XRegExp.replace = function(str, search, replacement, scope) { + var isRegex = XRegExp.isRegExp(search); + var global = (search.global && scope !== 'one') || scope === 'all'; + var cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY'; + var s2 = search; + var result; + + if (isRegex) { + search[REGEX_DATA] = search[REGEX_DATA] || {}; + + // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s + // `lastIndex` isn't updated *during* replacement iterations + s2 = search[REGEX_DATA][cacheKey] || ( + search[REGEX_DATA][cacheKey] = copyRegex(search, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + }) + ); + } else if (global) { + s2 = new RegExp(XRegExp.escape(String(search)), 'g'); + } + + // Fixed `replace` required for named backreferences, etc. + result = fixed.replace.call(toObject(str), s2, replacement); + + if (isRegex && search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } + + return result; +}; + +/** + * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an + * array of replacement details. Later replacements operate on the output of earlier replacements. + * Replacement details are accepted as an array with a regex or string to search for, the + * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp + * replacement text syntax, which supports named backreference properties via `${name}`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} replacements Array of replacement detail arrays. + * @returns {String} New string with all replacements. + * @example + * + * str = XRegExp.replaceEach(str, [ + * [XRegExp('(?<name>a)'), 'z${name}'], + * [/b/gi, 'y'], + * [/c/g, 'x', 'one'], // scope 'one' overrides /g + * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g + * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings + * [/f/g, function($0) { + * return $0.toUpperCase(); + * }] + * ]); + */ +XRegExp.replaceEach = function(str, replacements) { + var i; + var r; + + for (i = 0; i < replacements.length; ++i) { + r = replacements[i]; + str = XRegExp.replace(str, r[0], r[1], r[2]); + } + + return str; +}; + +/** + * Splits a string into an array of strings using a regex or string separator. Matches of the + * separator are not included in the result array. However, if `separator` is a regex that contains + * capturing groups, backreferences are spliced into the result each time `separator` is matched. + * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably + * cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to split. + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + * @example + * + * // Basic use + * XRegExp.split('a b c', ' '); + * // -> ['a', 'b', 'c'] + * + * // With limit + * XRegExp.split('a b c', ' ', 2); + * // -> ['a', 'b'] + * + * // Backreferences in result array + * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); + * // -> ['..', 'word', '1', '..'] + */ +XRegExp.split = function(str, separator, limit) { + return fixed.split.call(toObject(str), separator, limit); +}; + +/** + * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and + * `sticky` arguments specify the search start position, and whether the match must start at the + * specified position only. The `lastIndex` property of the provided regex is not used, but is + * updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.test` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Boolean} Whether the regex matched the provided value. + * @example + * + * // Basic use + * XRegExp.test('abc', /c/); // -> true + * + * // With pos and sticky + * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false + * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true + */ +XRegExp.test = function(str, regex, pos, sticky) { + // Do this the easy way :-) + return !!XRegExp.exec(str, regex, pos, sticky); +}; + +/** + * Uninstalls optional features according to the specified options. All optional features start out + * uninstalled, so this is used to undo the actions of `XRegExp.install`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.uninstall({ + * // Disables support for astral code points in Unicode addons + * astral: true, + * + * // DEPRECATED: Restores native regex methods + * natives: true + * }); + * + * // With an options string + * XRegExp.uninstall('astral natives'); + */ +XRegExp.uninstall = function(options) { + options = prepareOptions(options); + + if (features.astral && options.astral) { + setAstral(false); + } + + if (features.natives && options.natives) { + setNatives(false); + } +}; + +/** + * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as + * regex objects or strings. Metacharacters are escaped in patterns provided as strings. + * Backreferences in provided regex objects are automatically renumbered to work correctly within + * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the + * `flags` argument. + * + * @memberOf XRegExp + * @param {Array} patterns Regexes and strings to combine. + * @param {String} [flags] Any combination of XRegExp flags. + * @param {Object} [options] Options object with optional properties: + * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'. + * @returns {RegExp} Union of the provided regexes and strings. + * @example + * + * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); + * // -> /a\+b\*c|(dogs)\1|(cats)\2/i + * + * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'}); + * // -> /manbearpig/i + */ +XRegExp.union = function(patterns, flags, options) { + options = options || {}; + var conjunction = options.conjunction || 'or'; + var numCaptures = 0; + var numPriorCaptures; + var captureNames; + + function rewrite(match, paren, backref) { + var name = captureNames[numCaptures - numPriorCaptures]; + + // Capturing group + if (paren) { + ++numCaptures; + // If the current capture has a name, preserve the name + if (name) { + return '(?<' + name + '>'; + } + // Backreference + } else if (backref) { + // Rewrite the backreference + return '\\' + (+backref + numPriorCaptures); + } + + return match; + } + + if (!(isType(patterns, 'Array') && patterns.length)) { + throw new TypeError('Must provide a nonempty array of patterns to merge'); + } + + var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var output = []; + var pattern; + for (var i = 0; i < patterns.length; ++i) { + pattern = patterns[i]; + + if (XRegExp.isRegExp(pattern)) { + numPriorCaptures = numCaptures; + captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || []; + + // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are + // independently valid; helps keep this simple. Named captures are put back + output.push(nativ.replace.call(XRegExp(pattern.source).source, parts, rewrite)); + } else { + output.push(XRegExp.escape(pattern)); + } + } + + var separator = conjunction === 'none' ? '' : '|'; + return XRegExp(output.join(separator), flags); +}; + +// ==--------------------------== +// Fixed/extended native methods +// ==--------------------------== + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to + * override the native method. Use via `XRegExp.exec` without overriding natives. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {Array} Match array with named backreference properties, or `null`. + */ +fixed.exec = function(str) { + var origLastIndex = this.lastIndex; + var match = nativ.exec.apply(this, arguments); + var name; + var r2; + var i; + + if (match) { + // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing + // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9 + // in standards mode follows the spec. + if (!correctExecNpcg && match.length > 1 && indexOf(match, '') > -1) { + r2 = copyRegex(this, { + removeG: true, + isInternalOnly: true + }); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call(String(str).slice(match.index), r2, function() { + var len = arguments.length; + var i; + // Skip index 0 and the last 2 + for (i = 1; i < len - 2; ++i) { + if (arguments[i] === undefined) { + match[i] = undefined; + } + } + }); + } + + // Attach named capture properties + if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { + // Skip index 0 + for (i = 1; i < match.length; ++i) { + name = this[REGEX_DATA].captureNames[i - 1]; + if (name) { + match[name] = match[i]; + } + } + } + + // Fix browsers that increment `lastIndex` after zero-length matches + if (this.global && !match[0].length && (this.lastIndex > match.index)) { + this.lastIndex = match.index; + } + } + + if (!this.global) { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + this.lastIndex = origLastIndex; + } + + return match; +}; + +/** + * Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')` + * uses this to override the native method. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {Boolean} Whether the regex matched the provided value. + */ +fixed.test = function(str) { + // Do this the easy way :-) + return !!fixed.exec.call(this, str); +}; + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to + * override the native method. + * + * @memberOf String + * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`. + * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g, + * the result of calling `regex.exec(this)`. + */ +fixed.match = function(regex) { + var result; + + if (!XRegExp.isRegExp(regex)) { + // Use the native `RegExp` rather than `XRegExp` + regex = new RegExp(regex); + } else if (regex.global) { + result = nativ.match.apply(this, arguments); + // Fixes IE bug + regex.lastIndex = 0; + + return result; + } + + return fixed.exec.call(regex, toObject(this)); +}; + +/** + * Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and + * provides named backreferences to replacement functions as `arguments[0].name`. Also fixes browser + * bugs in replacement text syntax when performing a replacement using a nonregex search value, and + * the value of a replacement regex's `lastIndex` property during replacement iterations and upon + * completion. Calling `XRegExp.install('natives')` uses this to override the native method. Note + * that this doesn't support SpiderMonkey's proprietary third (`flags`) argument. Use via + * `XRegExp.replace` without overriding natives. + * + * @memberOf String + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * @returns {String} New string with one or all matches replaced. + */ +fixed.replace = function(search, replacement) { + var isRegex = XRegExp.isRegExp(search); + var origLastIndex; + var captureNames; + var result; + + if (isRegex) { + if (search[REGEX_DATA]) { + captureNames = search[REGEX_DATA].captureNames; + } + // Only needed if `search` is nonglobal + origLastIndex = search.lastIndex; + } else { + search += ''; // Type-convert + } + + // Don't use `typeof`; some older browsers return 'function' for regex objects + if (isType(replacement, 'Function')) { + // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement + // functions isn't type-converted to a string + result = nativ.replace.call(String(this), search, function() { + var args = arguments; + var i; + if (captureNames) { + // Change the `arguments[0]` string primitive to a `String` object that can store + // properties. This really does need to use `String` as a constructor + args[0] = new String(args[0]); + // Store named backreferences on the first argument + for (i = 0; i < captureNames.length; ++i) { + if (captureNames[i]) { + args[0][captureNames[i]] = args[i + 1]; + } + } + } + // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox, Safari + // bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1) + if (isRegex && search.global) { + search.lastIndex = args[args.length - 2] + args[0].length; + } + // ES6 specs the context for replacement functions as `undefined` + return replacement.apply(undefined, args); + }); + } else { + // Ensure that the last value of `args` will be a string when given nonstring `this`, + // while still throwing on null or undefined context + result = nativ.replace.call(this == null ? this : String(this), search, function() { + // Keep this function's `arguments` available through closure + var args = arguments; + return nativ.replace.call(String(replacement), replacementToken, function($0, $1, $2) { + var n; + // Named or numbered backreference with curly braces + if ($1) { + // XRegExp behavior for `${n}`: + // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for the + // entire match. Any number of leading zeros may be used. + // 2. Backreference to named capture `n`, if it exists and is not an integer + // overridden by numbered capture. In practice, this does not overlap with + // numbered capture since XRegExp does not allow named capture to use a bare + // integer as the name. + // 3. If the name or number does not refer to an existing capturing group, it's + // an error. + n = +$1; // Type-convert; drop leading zeros + if (n <= args.length - 3) { + return args[n] || ''; + } + // Groups with the same name is an error, else would need `lastIndexOf` + n = captureNames ? indexOf(captureNames, $1) : -1; + if (n < 0) { + throw new SyntaxError('Backreference to undefined group ' + $0); + } + return args[n + 1] || ''; + } + // Else, special variable or numbered backreference without curly braces + if ($2 === '$') { // $$ + return '$'; + } + if ($2 === '&' || +$2 === 0) { // $&, $0 (not followed by 1-9), $00 + return args[0]; + } + if ($2 === '`') { // $` (left context) + return args[args.length - 1].slice(0, args[args.length - 2]); + } + if ($2 === "'") { // $' (right context) + return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + } + // Else, numbered backreference without curly braces + $2 = +$2; // Type-convert; drop leading zero + // XRegExp behavior for `$n` and `$nn`: + // - Backrefs end after 1 or 2 digits. Use `${..}` for more digits. + // - `$1` is an error if no capturing groups. + // - `$10` is an error if less than 10 capturing groups. Use `${1}0` instead. + // - `$01` is `$1` if at least one capturing group, else it's an error. + // - `$0` (not followed by 1-9) and `$00` are the entire match. + // Native behavior, for comparison: + // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+. + // - `$1` is a literal `$1` if no capturing groups. + // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups. + // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`. + // - `$0` is a literal `$0`. + if (!isNaN($2)) { + if ($2 > args.length - 3) { + throw new SyntaxError('Backreference to undefined group ' + $0); + } + return args[$2] || ''; + } + // `$` followed by an unsupported char is an error, unlike native JS + throw new SyntaxError('Invalid token ' + $0); + }); + }); + } + + if (isRegex) { + if (search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } else { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + search.lastIndex = origLastIndex; + } + } + + return result; +}; + +/** + * Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')` + * uses this to override the native method. Use via `XRegExp.split` without overriding natives. + * + * @memberOf String + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + */ +fixed.split = function(separator, limit) { + if (!XRegExp.isRegExp(separator)) { + // Browsers handle nonregex split correctly, so use the faster native method + return nativ.split.apply(this, arguments); + } + + var str = String(this); + var output = []; + var origLastIndex = separator.lastIndex; + var lastLastIndex = 0; + var lastLength; + + // Values for `limit`, per the spec: + // If undefined: pow(2,32) - 1 + // If 0, Infinity, or NaN: 0 + // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32); + // If negative number: pow(2,32) - floor(abs(limit)) + // If other: Type-convert, then use the above rules + // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless + // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+ + limit = (limit === undefined ? -1 : limit) >>> 0; + + XRegExp.forEach(str, separator, function(match) { + // This condition is not the same as `if (match[0].length)` + if ((match.index + match[0].length) > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, match.slice(1)); + } + lastLength = match[0].length; + lastLastIndex = match.index + lastLength; + } + }); + + if (lastLastIndex === str.length) { + if (!nativ.test.call(separator, '') || lastLength) { + output.push(''); + } + } else { + output.push(str.slice(lastLastIndex)); + } + + separator.lastIndex = origLastIndex; + return output.length > limit ? output.slice(0, limit) : output; +}; + +// ==--------------------------== +// Built-in syntax/flag tokens +// ==--------------------------== + +/* + * Letter escapes that natively match literal characters: `\a`, `\A`, etc. These should be + * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser + * consistency and to reserve their syntax, but lets them be superseded by addons. + */ +XRegExp.addToken( + /\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, + function(match, scope) { + // \B is allowed in default scope only + if (match[1] === 'B' && scope === defaultScope) { + return match[0]; + } + throw new SyntaxError('Invalid escape ' + match[0]); + }, + { + scope: 'all', + leadChar: '\\' + } +); + +/* + * Unicode code point escape with curly braces: `\u{N..}`. `N..` is any one or more digit + * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag + * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to + * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior + * if you follow a `\u{N..}` token that references a code point above U+FFFF with a quantifier, or + * if you use the same in a character class. + */ +XRegExp.addToken( + /\\u{([\dA-Fa-f]+)}/, + function(match, scope, flags) { + var code = dec(match[1]); + if (code > 0x10FFFF) { + throw new SyntaxError('Invalid Unicode code point ' + match[0]); + } + if (code <= 0xFFFF) { + // Converting to \uNNNN avoids needing to escape the literal character and keep it + // separate from preceding tokens + return '\\u' + pad4(hex(code)); + } + // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling + if (hasNativeU && flags.indexOf('u') > -1) { + return match[0]; + } + throw new SyntaxError('Cannot use Unicode code point above \\u{FFFF} without flag u'); + }, + { + scope: 'all', + leadChar: '\\' + } +); + +/* + * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency. + * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because + * character class endings can't be determined. + */ +XRegExp.addToken( + /\[(\^?)\]/, + function(match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in some versions of Firefox + return match[1] ? '[\\s\\S]' : '\\b\\B'; + }, + {leadChar: '['} +); + +/* + * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in + * free-spacing mode (flag x). + */ +XRegExp.addToken( + /\(\?#[^)]*\)/, + getContextualTokenSeparator, + {leadChar: '('} +); + +/* + * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only. + */ +XRegExp.addToken( + /\s+|#[^\n]*\n?/, + getContextualTokenSeparator, + {flag: 'x'} +); + +/* + * Dot, in dotall mode (aka singleline mode, flag s) only. + */ +XRegExp.addToken( + /\./, + function() { + return '[\\s\\S]'; + }, + { + flag: 's', + leadChar: '.' + } +); + +/* + * Named backreference: `\k<name>`. Backreference names can use the characters A-Z, a-z, 0-9, _, + * and $ only. Also allows numbered backreferences as `\k<n>`. + */ +XRegExp.addToken( + /\\k<([\w$]+)>/, + function(match) { + // Groups with the same name is an error, else would need `lastIndexOf` + var index = isNaN(match[1]) ? (indexOf(this.captureNames, match[1]) + 1) : +match[1]; + var endIndex = match.index + match[0].length; + if (!index || index > this.captureNames.length) { + throw new SyntaxError('Backreference to undefined group ' + match[0]); + } + // Keep backreferences separate from subsequent literal numbers. This avoids e.g. + // inadvertedly changing `(?<n>)\k<n>1` to `()\11`. + return '\\' + index + ( + endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ? + '' : '(?:)' + ); + }, + {leadChar: '\\'} +); + +/* + * Numbered backreference or octal, plus any following digits: `\0`, `\11`, etc. Octals except `\0` + * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches + * are returned unaltered. IE < 9 doesn't support backreferences above `\99` in regex syntax. + */ +XRegExp.addToken( + /\\(\d+)/, + function(match, scope) { + if ( + !( + scope === defaultScope && + /^[1-9]/.test(match[1]) && + +match[1] <= this.captureNames.length + ) && + match[1] !== '0' + ) { + throw new SyntaxError('Cannot use octal escape or backreference to undefined group ' + + match[0]); + } + return match[0]; + }, + { + scope: 'all', + leadChar: '\\' + } +); + +/* + * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the + * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style + * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively + * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to + * Python-style named capture as octals. + */ +XRegExp.addToken( + /\(\?P?<([\w$]+)>/, + function(match) { + // Disallow bare integers as names because named backreferences are added to match arrays + // and therefore numeric properties may lead to incorrect lookups + if (!isNaN(match[1])) { + throw new SyntaxError('Cannot use integer as capture name ' + match[0]); + } + if (match[1] === 'length' || match[1] === '__proto__') { + throw new SyntaxError('Cannot use reserved word as capture name ' + match[0]); + } + if (indexOf(this.captureNames, match[1]) > -1) { + throw new SyntaxError('Cannot use same name for multiple groups ' + match[0]); + } + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return '('; + }, + {leadChar: '('} +); + +/* + * Capturing group; match the opening parenthesis only. Required for support of named capturing + * groups. Also adds explicit capture mode (flag n). + */ +XRegExp.addToken( + /\((?!\?)/, + function(match, scope, flags) { + if (flags.indexOf('n') > -1) { + return '(?:'; + } + this.captureNames.push(null); + return '('; + }, + { + optionalFlags: 'n', + leadChar: '(' + } +); + +module.exports = XRegExp; + +},{}]},{},[8])(8) +}); diff --git a/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js new file mode 100644 index 000000000..6d56b1bd8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js @@ -0,0 +1,160 @@ +/* + XRegExp.build 3.2.0 + <xregexp.com> + Steven Levithan (c) 2012-2017 MIT License + Inspired by Lea Verou's RegExp.create <lea.verou.me> + XRegExp.matchRecursive 3.2.0 + <xregexp.com> + Steven Levithan (c) 2009-2017 MIT License + XRegExp Unicode Base 3.2.0 + <xregexp.com> + Steven Levithan (c) 2008-2017 MIT License + XRegExp Unicode Blocks 3.2.0 + <xregexp.com> + Steven Levithan (c) 2010-2017 MIT License + Unicode data by Mathias Bynens <mathiasbynens.be> + XRegExp Unicode Categories 3.2.0 + <xregexp.com> + Steven Levithan (c) 2010-2017 MIT License + Unicode data by Mathias Bynens <mathiasbynens.be> + XRegExp Unicode Properties 3.2.0 + <xregexp.com> + Steven Levithan (c) 2012-2017 MIT License + Unicode data by Mathias Bynens <mathiasbynens.be> + XRegExp Unicode Scripts 3.2.0 + <xregexp.com> + Steven Levithan (c) 2010-2017 MIT License + Unicode data by Mathias Bynens <mathiasbynens.be> + XRegExp 3.2.0 + <xregexp.com> + Steven Levithan (c) 2007-2017 MIT License +*/ +(function(H){"object"===typeof exports&&"undefined"!==typeof module?module.exports=H():"function"===typeof define&&define.amd?define([],H):("undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:this).XRegExp=H()})(function(){return function c(d,g,p){function A(l,b){if(!g[l]){if(!d[l]){var k="function"==typeof require&&require;if(!b&&k)return k(l,!0);if(B)return B(l,!0);b=Error("Cannot find module '"+l+"'");throw b.code="MODULE_NOT_FOUND",b;}b=g[l]={exports:{}}; +d[l][0].call(b.exports,function(b){var c=d[l][1][b];return A(c?c:b)},b,b.exports,c,d,g,p)}return g[l].exports}for(var B="function"==typeof require&&require,z=0;z<p.length;z++)A(p[z]);return A}({1:[function(d,g,p){g.exports=function(c){function A(b){var c=/^(?:\(\?:\))*\^/,l=/\$(?:\(\?:\))*$/;return c.test(b)&&l.test(b)&&l.test(b.replace(/\\[\s\S]/g,""))?b.replace(c,"").replace(l,""):b}function B(b,l){l=l?"x":"";return c.isRegExp(b)?b.xregexp&&b.xregexp.captureNames?b:c(b.source,l):c(b,l)}var z=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g, +l=c.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,z],"g",{conjunction:"or"});c.build=function(b,k,g){g=g||"";var y=-1<g.indexOf("x"),m=/^\(\?([\w$]+)\)/.exec(b);m&&(g=c._clipDuplicates(g+m[1]));var h={},w;for(w in k)k.hasOwnProperty(w)&&(m=B(k[w],y),h[w]={pattern:A(m.source),names:m.xregexp.captureNames||[]});b=B(b,y);var x=0,v,q=0,f=[0],d=b.xregexp.captureNames||[];b=b.source.replace(l,function(b,c,m,l,y){var n=c||m;if(n){if(!h.hasOwnProperty(n))throw new ReferenceError("Undefined property "+b);if(c){var k= +d[q];f[++q]=++x;b="(?<"+(k||n)+">"}else b="(?:";v=x;return b+h[n].pattern.replace(z,function(f,b,c){if(b){if(k=h[n].names[x-v],++x,k)return"(?<"+k+">"}else if(c)return g=+c-1,h[n].names[g]?"\\k<"+h[n].names[g]+">":"\\"+(+c+v);return f})+")"}if(l){if(k=d[q],f[++q]=++x,k)return"(?<"+k+">"}else if(y){var g=+y-1;return d[g]?"\\k<"+d[g]+">":"\\"+f[+y]}return b});return c(b,g)}}},{}],2:[function(d,g,p){g.exports=function(c){function g(c,g,l,b){return{name:c,value:g,start:l,end:b}}c.matchRecursive=function(d, +p,l,b,k){b=b||"";k=k||{};var A=-1<b.indexOf("g"),y=-1<b.indexOf("y"),m=b.replace(/y/g,""),h=k.escapeChar;k=k.valueNames;var w=[],x=0,v=0,q=0,f=0;p=c(p,m);l=c(l,m);if(h){if(1<h.length)throw Error("Cannot use more than one escape character");h=c.escape(h);var z=new RegExp("(?:"+h+"[\\S\\s]|(?:(?!"+c.union([p,l],"",{conjunction:"or"}).source+")[^"+h+"])+)+",b.replace(/[^imu]+/g,""))}for(;;){h&&(q+=(c.exec(d,z,q,"sticky")||[""])[0].length);b=c.exec(d,p,q);m=c.exec(d,l,q);b&&m&&(b.index<=m.index?m=null: +b=null);if(b||m)v=(b||m).index,q=v+(b||m)[0].length;else if(!x)break;if(y&&!x&&v>f)break;if(b){if(!x){var n=v;var r=q}++x}else if(m&&x){if(!--x&&(k?(k[0]&&n>f&&w.push(g(k[0],d.slice(f,n),f,n)),k[1]&&w.push(g(k[1],d.slice(n,r),n,r)),k[2]&&w.push(g(k[2],d.slice(r,v),r,v)),k[3]&&w.push(g(k[3],d.slice(v,q),v,q))):w.push(d.slice(r,v)),f=q,!A))break}else throw Error("Unbalanced delimiter found in string");v===q&&++q}A&&!y&&k&&k[0]&&d.length>f&&w.push(g(k[0],d.slice(f),f,d.length));return w}}},{}],3:[function(d, +g,p){g.exports=function(c){function g(b){return b.replace(/[- _]+/g,"").toLowerCase()}function d(c){var m=/^\\[xu](.+)/.exec(c);return m?b(m[1]):c.charCodeAt("\\"===c.charAt(0)?1:0)}function p(b){var m="",h=-1;c.forEach(b,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,function(b){var c=d(b[1]);c>h+1&&(m+="\\u"+C(k(h+1)),c>h+2&&(m+="-\\u"+C(k(c-1))));h=d(b[2]||b[1])});65535>h&&(m+="\\u"+C(k(h+1)),65534>h&&(m+="-\\uFFFF"));return m}var l={},b=c._dec,k=c._hex,C=c._pad4;c.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, +function(b,c,h){var m="P"===b[1]||!!b[2],d=-1<h.indexOf("A");h=g(b[4]||b[3]);var k=l[h];if("P"===b[1]&&b[2])throw new SyntaxError("Invalid double negation "+b[0]);if(!l.hasOwnProperty(h))throw new SyntaxError("Unknown Unicode token "+b[0]);if(k.inverseOf){h=g(k.inverseOf);if(!l.hasOwnProperty(h))throw new ReferenceError("Unicode token missing data "+b[0]+" -> "+k.inverseOf);k=l[h];m=!m}if(!k.bmp&&!d)throw new SyntaxError("Astral mode required for Unicode token "+b[0]);if(d){if("class"===c)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes"); +b=m?"a!":"a=";(c=l[h][b])||(c=l[h],h=l[h],d="",h.bmp&&!h.isBmpLast&&(d="["+h.bmp+"]"+(h.astral?"|":"")),h.astral&&(d+=h.astral),h.isBmpLast&&h.bmp&&(d+=(h.astral?"|":"")+"["+h.bmp+"]"),c=c[b]=m?"(?:(?!"+d+")(?:[\ud800-\udbff][\udc00-\udfff]|[\x00-\uffff]))":"(?:"+d+")");return c}return"class"===c?m?l[h]["b!"]||(l[h]["b!"]=p(l[h].bmp)):k.bmp:(m?"[^":"[")+k.bmp+"]"},{scope:"all",optionalFlags:"A",leadChar:"\\"});c.addUnicodeData=function(b){for(var d,h=0;h<b.length;++h){d=b[h];if(!d.name)throw Error("Unicode token requires name"); +if(!(d.inverseOf||d.bmp||d.astral))throw Error("Unicode token has no character data "+d.name);l[g(d.name)]=d;d.alias&&(l[g(d.alias)]=d)}c.cache.flush("patterns")};c._getUnicodeProperty=function(b){b=g(b);return l[b]}}},{}],4:[function(d,g,p){g.exports=function(c){if(!c.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks");c.addUnicodeData([{name:"InAdlam",astral:"\ud83a[\udd00-\udd5f]"},{name:"InAegean_Numbers",astral:"\ud800[\udd00-\udd3f]"},{name:"InAhom", +astral:"\ud805[\udf00-\udf3f]"},{name:"InAlchemical_Symbols",astral:"\ud83d[\udf00-\udf7f]"},{name:"InAlphabetic_Presentation_Forms",bmp:"\ufb00-\ufb4f"},{name:"InAnatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude7f]"},{name:"InAncient_Greek_Musical_Notation",astral:"\ud834[\ude00-\ude4f]"},{name:"InAncient_Greek_Numbers",astral:"\ud800[\udd40-\udd8f]"},{name:"InAncient_Symbols",astral:"\ud800[\udd90-\uddcf]"},{name:"InArabic",bmp:"\u0600-\u06ff"},{name:"InArabic_Extended_A",bmp:"\u08a0-\u08ff"},{name:"InArabic_Mathematical_Alphabetic_Symbols", +astral:"\ud83b[\ude00-\udeff]"},{name:"InArabic_Presentation_Forms_A",bmp:"\ufb50-\ufdff"},{name:"InArabic_Presentation_Forms_B",bmp:"\ufe70-\ufeff"},{name:"InArabic_Supplement",bmp:"\u0750-\u077f"},{name:"InArmenian",bmp:"\u0530-\u058f"},{name:"InArrows",bmp:"\u2190-\u21ff"},{name:"InAvestan",astral:"\ud802[\udf00-\udf3f]"},{name:"InBalinese",bmp:"\u1b00-\u1b7f"},{name:"InBamum",bmp:"\ua6a0-\ua6ff"},{name:"InBamum_Supplement",astral:"\ud81a[\udc00-\ude3f]"},{name:"InBasic_Latin",bmp:"\x00-\u007f"}, +{name:"InBassa_Vah",astral:"\ud81a[\uded0-\udeff]"},{name:"InBatak",bmp:"\u1bc0-\u1bff"},{name:"InBengali",bmp:"\u0980-\u09ff"},{name:"InBhaiksuki",astral:"\ud807[\udc00-\udc6f]"},{name:"InBlock_Elements",bmp:"\u2580-\u259f"},{name:"InBopomofo",bmp:"\u3100-\u312f"},{name:"InBopomofo_Extended",bmp:"\u31a0-\u31bf"},{name:"InBox_Drawing",bmp:"\u2500-\u257f"},{name:"InBrahmi",astral:"\ud804[\udc00-\udc7f]"},{name:"InBraille_Patterns",bmp:"\u2800-\u28ff"},{name:"InBuginese",bmp:"\u1a00-\u1a1f"},{name:"InBuhid", +bmp:"\u1740-\u175f"},{name:"InByzantine_Musical_Symbols",astral:"\ud834[\udc00-\udcff]"},{name:"InCJK_Compatibility",bmp:"\u3300-\u33ff"},{name:"InCJK_Compatibility_Forms",bmp:"\ufe30-\ufe4f"},{name:"InCJK_Compatibility_Ideographs",bmp:"\uf900-\ufaff"},{name:"InCJK_Compatibility_Ideographs_Supplement",astral:"\ud87e[\udc00-\ude1f]"},{name:"InCJK_Radicals_Supplement",bmp:"\u2e80-\u2eff"},{name:"InCJK_Strokes",bmp:"\u31c0-\u31ef"},{name:"InCJK_Symbols_and_Punctuation",bmp:"\u3000-\u303f"},{name:"InCJK_Unified_Ideographs", +bmp:"\u4e00-\u9fff"},{name:"InCJK_Unified_Ideographs_Extension_A",bmp:"\u3400-\u4dbf"},{name:"InCJK_Unified_Ideographs_Extension_B",astral:"[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\udedf]"},{name:"InCJK_Unified_Ideographs_Extension_C",astral:"\ud869[\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf3f]"},{name:"InCJK_Unified_Ideographs_Extension_D",astral:"\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1f]"},{name:"InCJK_Unified_Ideographs_Extension_E",astral:"\ud86e[\udc20-\udfff]|[\ud86f-\ud872][\udc00-\udfff]|\ud873[\udc00-\udeaf]"}, +{name:"InCarian",astral:"\ud800[\udea0-\udedf]"},{name:"InCaucasian_Albanian",astral:"\ud801[\udd30-\udd6f]"},{name:"InChakma",astral:"\ud804[\udd00-\udd4f]"},{name:"InCham",bmp:"\uaa00-\uaa5f"},{name:"InCherokee",bmp:"\u13a0-\u13ff"},{name:"InCherokee_Supplement",bmp:"\uab70-\uabbf"},{name:"InCombining_Diacritical_Marks",bmp:"\u0300-\u036f"},{name:"InCombining_Diacritical_Marks_Extended",bmp:"\u1ab0-\u1aff"},{name:"InCombining_Diacritical_Marks_Supplement",bmp:"\u1dc0-\u1dff"},{name:"InCombining_Diacritical_Marks_for_Symbols", +bmp:"\u20d0-\u20ff"},{name:"InCombining_Half_Marks",bmp:"\ufe20-\ufe2f"},{name:"InCommon_Indic_Number_Forms",bmp:"\ua830-\ua83f"},{name:"InControl_Pictures",bmp:"\u2400-\u243f"},{name:"InCoptic",bmp:"\u2c80-\u2cff"},{name:"InCoptic_Epact_Numbers",astral:"\ud800[\udee0-\udeff]"},{name:"InCounting_Rod_Numerals",astral:"\ud834[\udf60-\udf7f]"},{name:"InCuneiform",astral:"\ud808[\udc00-\udfff]"},{name:"InCuneiform_Numbers_and_Punctuation",astral:"\ud809[\udc00-\udc7f]"},{name:"InCurrency_Symbols",bmp:"\u20a0-\u20cf"}, +{name:"InCypriot_Syllabary",astral:"\ud802[\udc00-\udc3f]"},{name:"InCyrillic",bmp:"\u0400-\u04ff"},{name:"InCyrillic_Extended_A",bmp:"\u2de0-\u2dff"},{name:"InCyrillic_Extended_B",bmp:"\ua640-\ua69f"},{name:"InCyrillic_Extended_C",bmp:"\u1c80-\u1c8f"},{name:"InCyrillic_Supplement",bmp:"\u0500-\u052f"},{name:"InDeseret",astral:"\ud801[\udc00-\udc4f]"},{name:"InDevanagari",bmp:"\u0900-\u097f"},{name:"InDevanagari_Extended",bmp:"\ua8e0-\ua8ff"},{name:"InDingbats",bmp:"\u2700-\u27bf"},{name:"InDomino_Tiles", +astral:"\ud83c[\udc30-\udc9f]"},{name:"InDuployan",astral:"\ud82f[\udc00-\udc9f]"},{name:"InEarly_Dynastic_Cuneiform",astral:"\ud809[\udc80-\udd4f]"},{name:"InEgyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2f]"},{name:"InElbasan",astral:"\ud801[\udd00-\udd2f]"},{name:"InEmoticons",astral:"\ud83d[\ude00-\ude4f]"},{name:"InEnclosed_Alphanumeric_Supplement",astral:"\ud83c[\udd00-\uddff]"},{name:"InEnclosed_Alphanumerics",bmp:"\u2460-\u24ff"},{name:"InEnclosed_CJK_Letters_and_Months", +bmp:"\u3200-\u32ff"},{name:"InEnclosed_Ideographic_Supplement",astral:"\ud83c[\ude00-\udeff]"},{name:"InEthiopic",bmp:"\u1200-\u137f"},{name:"InEthiopic_Extended",bmp:"\u2d80-\u2ddf"},{name:"InEthiopic_Extended_A",bmp:"\uab00-\uab2f"},{name:"InEthiopic_Supplement",bmp:"\u1380-\u139f"},{name:"InGeneral_Punctuation",bmp:"\u2000-\u206f"},{name:"InGeometric_Shapes",bmp:"\u25a0-\u25ff"},{name:"InGeometric_Shapes_Extended",astral:"\ud83d[\udf80-\udfff]"},{name:"InGeorgian",bmp:"\u10a0-\u10ff"},{name:"InGeorgian_Supplement", +bmp:"\u2d00-\u2d2f"},{name:"InGlagolitic",bmp:"\u2c00-\u2c5f"},{name:"InGlagolitic_Supplement",astral:"\ud838[\udc00-\udc2f]"},{name:"InGothic",astral:"\ud800[\udf30-\udf4f]"},{name:"InGrantha",astral:"\ud804[\udf00-\udf7f]"},{name:"InGreek_Extended",bmp:"\u1f00-\u1fff"},{name:"InGreek_and_Coptic",bmp:"\u0370-\u03ff"},{name:"InGujarati",bmp:"\u0a80-\u0aff"},{name:"InGurmukhi",bmp:"\u0a00-\u0a7f"},{name:"InHalfwidth_and_Fullwidth_Forms",bmp:"\uff00-\uffef"},{name:"InHangul_Compatibility_Jamo",bmp:"\u3130-\u318f"}, +{name:"InHangul_Jamo",bmp:"\u1100-\u11ff"},{name:"InHangul_Jamo_Extended_A",bmp:"\ua960-\ua97f"},{name:"InHangul_Jamo_Extended_B",bmp:"\ud7b0-\ud7ff"},{name:"InHangul_Syllables",bmp:"\uac00-\ud7af"},{name:"InHanunoo",bmp:"\u1720-\u173f"},{name:"InHatran",astral:"\ud802[\udce0-\udcff]"},{name:"InHebrew",bmp:"\u0590-\u05ff"},{name:"InHigh_Private_Use_Surrogates",bmp:"\udb80-\udbff"},{name:"InHigh_Surrogates",bmp:"\ud800-\udb7f"},{name:"InHiragana",bmp:"\u3040-\u309f"},{name:"InIPA_Extensions",bmp:"\u0250-\u02af"}, +{name:"InIdeographic_Description_Characters",bmp:"\u2ff0-\u2fff"},{name:"InIdeographic_Symbols_and_Punctuation",astral:"\ud81b[\udfe0-\udfff]"},{name:"InImperial_Aramaic",astral:"\ud802[\udc40-\udc5f]"},{name:"InInscriptional_Pahlavi",astral:"\ud802[\udf60-\udf7f]"},{name:"InInscriptional_Parthian",astral:"\ud802[\udf40-\udf5f]"},{name:"InJavanese",bmp:"\ua980-\ua9df"},{name:"InKaithi",astral:"\ud804[\udc80-\udccf]"},{name:"InKana_Supplement",astral:"\ud82c[\udc00-\udcff]"},{name:"InKanbun",bmp:"\u3190-\u319f"}, +{name:"InKangxi_Radicals",bmp:"\u2f00-\u2fdf"},{name:"InKannada",bmp:"\u0c80-\u0cff"},{name:"InKatakana",bmp:"\u30a0-\u30ff"},{name:"InKatakana_Phonetic_Extensions",bmp:"\u31f0-\u31ff"},{name:"InKayah_Li",bmp:"\ua900-\ua92f"},{name:"InKharoshthi",astral:"\ud802[\ude00-\ude5f]"},{name:"InKhmer",bmp:"\u1780-\u17ff"},{name:"InKhmer_Symbols",bmp:"\u19e0-\u19ff"},{name:"InKhojki",astral:"\ud804[\ude00-\ude4f]"},{name:"InKhudawadi",astral:"\ud804[\udeb0-\udeff]"},{name:"InLao",bmp:"\u0e80-\u0eff"},{name:"InLatin_Extended_Additional", +bmp:"\u1e00-\u1eff"},{name:"InLatin_Extended_A",bmp:"\u0100-\u017f"},{name:"InLatin_Extended_B",bmp:"\u0180-\u024f"},{name:"InLatin_Extended_C",bmp:"\u2c60-\u2c7f"},{name:"InLatin_Extended_D",bmp:"\ua720-\ua7ff"},{name:"InLatin_Extended_E",bmp:"\uab30-\uab6f"},{name:"InLatin_1_Supplement",bmp:"\u0080-\u00ff"},{name:"InLepcha",bmp:"\u1c00-\u1c4f"},{name:"InLetterlike_Symbols",bmp:"\u2100-\u214f"},{name:"InLimbu",bmp:"\u1900-\u194f"},{name:"InLinear_A",astral:"\ud801[\ude00-\udf7f]"},{name:"InLinear_B_Ideograms", +astral:"\ud800[\udc80-\udcff]"},{name:"InLinear_B_Syllabary",astral:"\ud800[\udc00-\udc7f]"},{name:"InLisu",bmp:"\ua4d0-\ua4ff"},{name:"InLow_Surrogates",bmp:"\udc00-\udfff"},{name:"InLycian",astral:"\ud800[\ude80-\ude9f]"},{name:"InLydian",astral:"\ud802[\udd20-\udd3f]"},{name:"InMahajani",astral:"\ud804[\udd50-\udd7f]"},{name:"InMahjong_Tiles",astral:"\ud83c[\udc00-\udc2f]"},{name:"InMalayalam",bmp:"\u0d00-\u0d7f"},{name:"InMandaic",bmp:"\u0840-\u085f"},{name:"InManichaean",astral:"\ud802[\udec0-\udeff]"}, +{name:"InMarchen",astral:"\ud807[\udc70-\udcbf]"},{name:"InMathematical_Alphanumeric_Symbols",astral:"\ud835[\udc00-\udfff]"},{name:"InMathematical_Operators",bmp:"\u2200-\u22ff"},{name:"InMeetei_Mayek",bmp:"\uabc0-\uabff"},{name:"InMeetei_Mayek_Extensions",bmp:"\uaae0-\uaaff"},{name:"InMende_Kikakui",astral:"\ud83a[\udc00-\udcdf]"},{name:"InMeroitic_Cursive",astral:"\ud802[\udda0-\uddff]"},{name:"InMeroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"InMiao",astral:"\ud81b[\udf00-\udf9f]"}, +{name:"InMiscellaneous_Mathematical_Symbols_A",bmp:"\u27c0-\u27ef"},{name:"InMiscellaneous_Mathematical_Symbols_B",bmp:"\u2980-\u29ff"},{name:"InMiscellaneous_Symbols",bmp:"\u2600-\u26ff"},{name:"InMiscellaneous_Symbols_and_Arrows",bmp:"\u2b00-\u2bff"},{name:"InMiscellaneous_Symbols_and_Pictographs",astral:"\ud83c[\udf00-\udfff]|\ud83d[\udc00-\uddff]"},{name:"InMiscellaneous_Technical",bmp:"\u2300-\u23ff"},{name:"InModi",astral:"\ud805[\ude00-\ude5f]"},{name:"InModifier_Tone_Letters",bmp:"\ua700-\ua71f"}, +{name:"InMongolian",bmp:"\u1800-\u18af"},{name:"InMongolian_Supplement",astral:"\ud805[\ude60-\ude7f]"},{name:"InMro",astral:"\ud81a[\ude40-\ude6f]"},{name:"InMultani",astral:"\ud804[\ude80-\udeaf]"},{name:"InMusical_Symbols",astral:"\ud834[\udd00-\uddff]"},{name:"InMyanmar",bmp:"\u1000-\u109f"},{name:"InMyanmar_Extended_A",bmp:"\uaa60-\uaa7f"},{name:"InMyanmar_Extended_B",bmp:"\ua9e0-\ua9ff"},{name:"InNKo",bmp:"\u07c0-\u07ff"},{name:"InNabataean",astral:"\ud802[\udc80-\udcaf]"},{name:"InNew_Tai_Lue", +bmp:"\u1980-\u19df"},{name:"InNewa",astral:"\ud805[\udc00-\udc7f]"},{name:"InNumber_Forms",bmp:"\u2150-\u218f"},{name:"InOgham",bmp:"\u1680-\u169f"},{name:"InOl_Chiki",bmp:"\u1c50-\u1c7f"},{name:"InOld_Hungarian",astral:"\ud803[\udc80-\udcff]"},{name:"InOld_Italic",astral:"\ud800[\udf00-\udf2f]"},{name:"InOld_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"InOld_Permic",astral:"\ud800[\udf50-\udf7f]"},{name:"InOld_Persian",astral:"\ud800[\udfa0-\udfdf]"},{name:"InOld_South_Arabian",astral:"\ud802[\ude60-\ude7f]"}, +{name:"InOld_Turkic",astral:"\ud803[\udc00-\udc4f]"},{name:"InOptical_Character_Recognition",bmp:"\u2440-\u245f"},{name:"InOriya",bmp:"\u0b00-\u0b7f"},{name:"InOrnamental_Dingbats",astral:"\ud83d[\ude50-\ude7f]"},{name:"InOsage",astral:"\ud801[\udcb0-\udcff]"},{name:"InOsmanya",astral:"\ud801[\udc80-\udcaf]"},{name:"InPahawh_Hmong",astral:"\ud81a[\udf00-\udf8f]"},{name:"InPalmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"InPau_Cin_Hau",astral:"\ud806[\udec0-\udeff]"},{name:"InPhags_pa",bmp:"\ua840-\ua87f"}, +{name:"InPhaistos_Disc",astral:"\ud800[\uddd0-\uddff]"},{name:"InPhoenician",astral:"\ud802[\udd00-\udd1f]"},{name:"InPhonetic_Extensions",bmp:"\u1d00-\u1d7f"},{name:"InPhonetic_Extensions_Supplement",bmp:"\u1d80-\u1dbf"},{name:"InPlaying_Cards",astral:"\ud83c[\udca0-\udcff]"},{name:"InPrivate_Use_Area",bmp:"\ue000-\uf8ff"},{name:"InPsalter_Pahlavi",astral:"\ud802[\udf80-\udfaf]"},{name:"InRejang",bmp:"\ua930-\ua95f"},{name:"InRumi_Numeral_Symbols",astral:"\ud803[\ude60-\ude7f]"},{name:"InRunic", +bmp:"\u16a0-\u16ff"},{name:"InSamaritan",bmp:"\u0800-\u083f"},{name:"InSaurashtra",bmp:"\ua880-\ua8df"},{name:"InSharada",astral:"\ud804[\udd80-\udddf]"},{name:"InShavian",astral:"\ud801[\udc50-\udc7f]"},{name:"InShorthand_Format_Controls",astral:"\ud82f[\udca0-\udcaf]"},{name:"InSiddham",astral:"\ud805[\udd80-\uddff]"},{name:"InSinhala",bmp:"\u0d80-\u0dff"},{name:"InSinhala_Archaic_Numbers",astral:"\ud804[\udde0-\uddff]"},{name:"InSmall_Form_Variants",bmp:"\ufe50-\ufe6f"},{name:"InSora_Sompeng", +astral:"\ud804[\udcd0-\udcff]"},{name:"InSpacing_Modifier_Letters",bmp:"\u02b0-\u02ff"},{name:"InSpecials",bmp:"\ufff0-\uffff"},{name:"InSundanese",bmp:"\u1b80-\u1bbf"},{name:"InSundanese_Supplement",bmp:"\u1cc0-\u1ccf"},{name:"InSuperscripts_and_Subscripts",bmp:"\u2070-\u209f"},{name:"InSupplemental_Arrows_A",bmp:"\u27f0-\u27ff"},{name:"InSupplemental_Arrows_B",bmp:"\u2900-\u297f"},{name:"InSupplemental_Arrows_C",astral:"\ud83e[\udc00-\udcff]"},{name:"InSupplemental_Mathematical_Operators",bmp:"\u2a00-\u2aff"}, +{name:"InSupplemental_Punctuation",bmp:"\u2e00-\u2e7f"},{name:"InSupplemental_Symbols_and_Pictographs",astral:"\ud83e[\udd00-\uddff]"},{name:"InSupplementary_Private_Use_Area_A",astral:"[\udb80-\udbbf][\udc00-\udfff]"},{name:"InSupplementary_Private_Use_Area_B",astral:"[\udbc0-\udbff][\udc00-\udfff]"},{name:"InSutton_SignWriting",astral:"\ud836[\udc00-\udeaf]"},{name:"InSyloti_Nagri",bmp:"\ua800-\ua82f"},{name:"InSyriac",bmp:"\u0700-\u074f"},{name:"InTagalog",bmp:"\u1700-\u171f"},{name:"InTagbanwa", +bmp:"\u1760-\u177f"},{name:"InTags",astral:"\udb40[\udc00-\udc7f]"},{name:"InTai_Le",bmp:"\u1950-\u197f"},{name:"InTai_Tham",bmp:"\u1a20-\u1aaf"},{name:"InTai_Viet",bmp:"\uaa80-\uaadf"},{name:"InTai_Xuan_Jing_Symbols",astral:"\ud834[\udf00-\udf5f]"},{name:"InTakri",astral:"\ud805[\ude80-\udecf]"},{name:"InTamil",bmp:"\u0b80-\u0bff"},{name:"InTangut",astral:"[\ud81c-\ud821][\udc00-\udfff]"},{name:"InTangut_Components",astral:"\ud822[\udc00-\udeff]"},{name:"InTelugu",bmp:"\u0c00-\u0c7f"},{name:"InThaana", +bmp:"\u0780-\u07bf"},{name:"InThai",bmp:"\u0e00-\u0e7f"},{name:"InTibetan",bmp:"\u0f00-\u0fff"},{name:"InTifinagh",bmp:"\u2d30-\u2d7f"},{name:"InTirhuta",astral:"\ud805[\udc80-\udcdf]"},{name:"InTransport_and_Map_Symbols",astral:"\ud83d[\ude80-\udeff]"},{name:"InUgaritic",astral:"\ud800[\udf80-\udf9f]"},{name:"InUnified_Canadian_Aboriginal_Syllabics",bmp:"\u1400-\u167f"},{name:"InUnified_Canadian_Aboriginal_Syllabics_Extended",bmp:"\u18b0-\u18ff"},{name:"InVai",bmp:"\ua500-\ua63f"},{name:"InVariation_Selectors", +bmp:"\ufe00-\ufe0f"},{name:"InVariation_Selectors_Supplement",astral:"\udb40[\udd00-\uddef]"},{name:"InVedic_Extensions",bmp:"\u1cd0-\u1cff"},{name:"InVertical_Forms",bmp:"\ufe10-\ufe1f"},{name:"InWarang_Citi",astral:"\ud806[\udca0-\udcff]"},{name:"InYi_Radicals",bmp:"\ua490-\ua4cf"},{name:"InYi_Syllables",bmp:"\ua000-\ua48f"},{name:"InYijing_Hexagram_Symbols",bmp:"\u4dc0-\u4dff"}])}},{}],5:[function(d,g,p){g.exports=function(c){if(!c.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Categories"); +c.addUnicodeData([{name:"C",alias:"Other",isBmpLast:!0,bmp:"\x00-\u001f\u007f-\u009f\u00ad\u0378\u0379\u0380-\u0383\u038b\u038d\u03a2\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u0605\u061c\u061d\u06dd\u070e\u070f\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08b5\u08be-\u08d3\u08e2\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0af8\u0afa-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04\u0c0d\u0c11\u0c29\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5b-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d00\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d50-\u0d53\u0d64\u0d65\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0de5\u0df0\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f6\u13f7\u13fe\u13ff\u169d-\u169f\u16f9-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180e\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c89-\u1cbf\u1cc8-\u1ccf\u1cf7\u1cfa-\u1cff\u1df6-\u1dfa\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u200b-\u200f\u202a-\u202e\u2060-\u206f\u2072\u2073\u208f\u209d-\u209f\u20bf-\u20cf\u20f1-\u20ff\u218c-\u218f\u23ff\u2427-\u243f\u244b-\u245f\u2b74\u2b75\u2b96\u2b97\u2bba-\u2bbc\u2bc9\u2bd2-\u2beb\u2bf0-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e45-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fd6-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua6f8-\ua6ff\ua7af\ua7b8-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c6-\ua8cd\ua8da-\ua8df\ua8fe\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f\uab66-\uab6f\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\uf8ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd-\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufffb\ufffe\uffff", +astral:"\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8f\udd9c-\udd9f\udda1-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udedf\udefc-\udeff\udf24-\udf2f\udf4b-\udf4f\udf7b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udcaf\udcd4-\udcd7\udcfc-\udcff\udd28-\udd2f\udd64-\udd6e\udd70-\uddff\udf37-\udf3f\udf56-\udf5f\udf68-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc9f-\udca6\udcb0-\udcdf\udcf3\udcf6-\udcfa\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbb\uddd0\uddd1\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\udea0-\udebf\udee7-\udeea\udef7-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf92-\udf98\udf9d-\udfa8\udfb0-\udfff]|\ud803[\udc49-\udc7f\udcb3-\udcbf\udcf3-\udcf9\udd00-\ude5f\ude7f-\udfff]|\ud804[\udc4e-\udc51\udc70-\udc7e\udcbd\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd4f\udd77-\udd7f\uddce\uddcf\udde0\uddf5-\uddff\ude12\ude3f-\ude7f\ude87\ude89\ude8e\ude9e\udeaa-\udeaf\udeeb-\udeef\udefa-\udeff\udf04\udf0d\udf0e\udf11\udf12\udf29\udf31\udf34\udf3a\udf3b\udf45\udf46\udf49\udf4a\udf4e\udf4f\udf51-\udf56\udf58-\udf5c\udf64\udf65\udf6d-\udf6f\udf75-\udfff]|\ud805[\udc5a\udc5c\udc5e-\udc7f\udcc8-\udccf\udcda-\udd7f\uddb6\uddb7\uddde-\uddff\ude45-\ude4f\ude5a-\ude5f\ude6d-\ude7f\udeb8-\udebf\udeca-\udeff\udf1a-\udf1c\udf2c-\udf2f\udf40-\udfff]|\ud806[\udc00-\udc9f\udcf3-\udcfe\udd00-\udebf\udef9-\udfff]|\ud807[\udc09\udc37\udc46-\udc4f\udc6d-\udc6f\udc90\udc91\udca8\udcb7-\udfff]|\ud808[\udf9a-\udfff]|\ud809[\udc6f\udc75-\udc7f\udd44-\udfff]|[\ud80a\ud80b\ud80e-\ud810\ud812-\ud819\ud823-\ud82b\ud82d\ud82e\ud830-\ud833\ud837\ud839\ud83f\ud874-\ud87d\ud87f-\udb3f\udb41-\udbff][\udc00-\udfff]|\ud80d[\udc2f-\udfff]|\ud811[\ude47-\udfff]|\ud81a[\ude39-\ude3f\ude5f\ude6a-\ude6d\ude70-\udecf\udeee\udeef\udef6-\udeff\udf46-\udf4f\udf5a\udf62\udf78-\udf7c\udf90-\udfff]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfdf\udfe1-\udfff]|\ud821[\udfed-\udfff]|\ud822[\udef3-\udfff]|\ud82c[\udc02-\udfff]|\ud82f[\udc6b-\udc6f\udc7d-\udc7f\udc89-\udc8f\udc9a\udc9b\udca0-\udfff]|\ud834[\udcf6-\udcff\udd27\udd28\udd73-\udd7a\udde9-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud836[\ude8c-\ude9a\udea0\udeb0-\udfff]|\ud838[\udc07\udc19\udc1a\udc22\udc25\udc2b-\udfff]|\ud83a[\udcc5\udcc6\udcd7-\udcff\udd4b-\udd4f\udd5a-\udd5d\udd60-\udfff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcc0\udcd0\udcf6-\udcff\udd0d-\udd0f\udd2f\udd6c-\udd6f\uddad-\udde5\ude03-\ude0f\ude3c-\ude3f\ude49-\ude4f\ude52-\udeff]|\ud83d[\uded3-\udedf\udeed-\udeef\udef7-\udeff\udf74-\udf7f\udfd5-\udfff]|\ud83e[\udc0c-\udc0f\udc48-\udc4f\udc5a-\udc5f\udc88-\udc8f\udcae-\udd0f\udd1f\udd28-\udd2f\udd31\udd32\udd3f\udd4c-\udd4f\udd5f-\udd7f\udd92-\uddbf\uddc1-\udfff]|\ud869[\uded7-\udeff]|\ud86d[\udf35-\udf3f]|\ud86e[\udc1e\udc1f]|\ud873[\udea2-\udfff]|\ud87e[\ude1e-\udfff]|\udb40[\udc00-\udcff\uddf0-\udfff]"}, +{name:"Cc",alias:"Control",bmp:"\x00-\u001f\u007f-\u009f"},{name:"Cf",alias:"Format",bmp:"\u00ad\u0600-\u0605\u061c\u06dd\u070f\u08e2\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff\ufff9-\ufffb",astral:"\ud804\udcbd|\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|\udb40[\udc01\udc20-\udc7f]"},{name:"Cn",alias:"Unassigned",bmp:"\u0378\u0379\u0380-\u0383\u038b\u038d\u03a2\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u05ff\u061d\u070e\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08b5\u08be-\u08d3\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0af8\u0afa-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04\u0c0d\u0c11\u0c29\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5b-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d00\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d50-\u0d53\u0d64\u0d65\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0de5\u0df0\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f6\u13f7\u13fe\u13ff\u169d-\u169f\u16f9-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c89-\u1cbf\u1cc8-\u1ccf\u1cf7\u1cfa-\u1cff\u1df6-\u1dfa\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2065\u2072\u2073\u208f\u209d-\u209f\u20bf-\u20cf\u20f1-\u20ff\u218c-\u218f\u23ff\u2427-\u243f\u244b-\u245f\u2b74\u2b75\u2b96\u2b97\u2bba-\u2bbc\u2bc9\u2bd2-\u2beb\u2bf0-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e45-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fd6-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua6f8-\ua6ff\ua7af\ua7b8-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c6-\ua8cd\ua8da-\ua8df\ua8fe\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f\uab66-\uab6f\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\ud7ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufff8\ufffe\uffff", +astral:"\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8f\udd9c-\udd9f\udda1-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udedf\udefc-\udeff\udf24-\udf2f\udf4b-\udf4f\udf7b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udcaf\udcd4-\udcd7\udcfc-\udcff\udd28-\udd2f\udd64-\udd6e\udd70-\uddff\udf37-\udf3f\udf56-\udf5f\udf68-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc9f-\udca6\udcb0-\udcdf\udcf3\udcf6-\udcfa\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbb\uddd0\uddd1\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\udea0-\udebf\udee7-\udeea\udef7-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf92-\udf98\udf9d-\udfa8\udfb0-\udfff]|\ud803[\udc49-\udc7f\udcb3-\udcbf\udcf3-\udcf9\udd00-\ude5f\ude7f-\udfff]|\ud804[\udc4e-\udc51\udc70-\udc7e\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd4f\udd77-\udd7f\uddce\uddcf\udde0\uddf5-\uddff\ude12\ude3f-\ude7f\ude87\ude89\ude8e\ude9e\udeaa-\udeaf\udeeb-\udeef\udefa-\udeff\udf04\udf0d\udf0e\udf11\udf12\udf29\udf31\udf34\udf3a\udf3b\udf45\udf46\udf49\udf4a\udf4e\udf4f\udf51-\udf56\udf58-\udf5c\udf64\udf65\udf6d-\udf6f\udf75-\udfff]|\ud805[\udc5a\udc5c\udc5e-\udc7f\udcc8-\udccf\udcda-\udd7f\uddb6\uddb7\uddde-\uddff\ude45-\ude4f\ude5a-\ude5f\ude6d-\ude7f\udeb8-\udebf\udeca-\udeff\udf1a-\udf1c\udf2c-\udf2f\udf40-\udfff]|\ud806[\udc00-\udc9f\udcf3-\udcfe\udd00-\udebf\udef9-\udfff]|\ud807[\udc09\udc37\udc46-\udc4f\udc6d-\udc6f\udc90\udc91\udca8\udcb7-\udfff]|\ud808[\udf9a-\udfff]|\ud809[\udc6f\udc75-\udc7f\udd44-\udfff]|[\ud80a\ud80b\ud80e-\ud810\ud812-\ud819\ud823-\ud82b\ud82d\ud82e\ud830-\ud833\ud837\ud839\ud83f\ud874-\ud87d\ud87f-\udb3f\udb41-\udb7f][\udc00-\udfff]|\ud80d[\udc2f-\udfff]|\ud811[\ude47-\udfff]|\ud81a[\ude39-\ude3f\ude5f\ude6a-\ude6d\ude70-\udecf\udeee\udeef\udef6-\udeff\udf46-\udf4f\udf5a\udf62\udf78-\udf7c\udf90-\udfff]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfdf\udfe1-\udfff]|\ud821[\udfed-\udfff]|\ud822[\udef3-\udfff]|\ud82c[\udc02-\udfff]|\ud82f[\udc6b-\udc6f\udc7d-\udc7f\udc89-\udc8f\udc9a\udc9b\udca4-\udfff]|\ud834[\udcf6-\udcff\udd27\udd28\udde9-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud836[\ude8c-\ude9a\udea0\udeb0-\udfff]|\ud838[\udc07\udc19\udc1a\udc22\udc25\udc2b-\udfff]|\ud83a[\udcc5\udcc6\udcd7-\udcff\udd4b-\udd4f\udd5a-\udd5d\udd60-\udfff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcc0\udcd0\udcf6-\udcff\udd0d-\udd0f\udd2f\udd6c-\udd6f\uddad-\udde5\ude03-\ude0f\ude3c-\ude3f\ude49-\ude4f\ude52-\udeff]|\ud83d[\uded3-\udedf\udeed-\udeef\udef7-\udeff\udf74-\udf7f\udfd5-\udfff]|\ud83e[\udc0c-\udc0f\udc48-\udc4f\udc5a-\udc5f\udc88-\udc8f\udcae-\udd0f\udd1f\udd28-\udd2f\udd31\udd32\udd3f\udd4c-\udd4f\udd5f-\udd7f\udd92-\uddbf\uddc1-\udfff]|\ud869[\uded7-\udeff]|\ud86d[\udf35-\udf3f]|\ud86e[\udc1e\udc1f]|\ud873[\udea2-\udfff]|\ud87e[\ude1e-\udfff]|\udb40[\udc00\udc02-\udc1f\udc80-\udcff\uddf0-\udfff]|[\udbbf\udbff][\udffe\udfff]"}, +{name:"Co",alias:"Private_Use",bmp:"\ue000-\uf8ff",astral:"[\udb80-\udbbe\udbc0-\udbfe][\udc00-\udfff]|[\udbbf\udbff][\udc00-\udffd]"},{name:"Cs",alias:"Surrogate",bmp:"\ud800-\udfff"},{name:"L",alias:"Letter",bmp:"A-Za-z\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u1884\u1887-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2183\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u3006\u3031-\u3035\u303b\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6e5\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc", +astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udf00-\udf19]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud83a[\udc00-\udcc4\udd00-\udd43]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"}, +{name:"Ll",alias:"Lowercase_Letter",bmp:"a-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7fa\uab30-\uab5a\uab60-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a", +astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Lm",alias:"Modifier_Letter", +bmp:"\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5\u06e6\u07f4\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua69c\ua69d\ua717-\ua71f\ua770\ua788\ua7f8\ua7f9\ua9cf\ua9e6\uaa70\uaadd\uaaf3\uaaf4\uab5c-\uab5f\uff70\uff9e\uff9f",astral:"\ud81a[\udf40-\udf43]|\ud81b[\udf93-\udf9f\udfe0]"}, +{name:"Lo",alias:"Other_Letter",bmp:"\u00aa\u00ba\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05f0-\u05f2\u0620-\u063f\u0641-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u0800-\u0815\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10d0-\u10fa\u10fd-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u1884\u1887-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c77\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u2135-\u2138\u2d30-\u2d67\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua014\ua016-\ua48c\ua4d0-\ua4f7\ua500-\ua60b\ua610-\ua61f\ua62a\ua62b\ua66e\ua6a0-\ua6e5\ua78f\ua7f7\ua7fb-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9e0-\ua9e4\ua9e7-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa6f\uaa71-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb\uaadc\uaae0-\uaaea\uaaf2\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc", +astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc50-\udc9d\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udf00-\udf19]|\ud806[\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud83a[\udc00-\udcc4]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"}, +{name:"Lt",alias:"Titlecase_Letter",bmp:"\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc"},{name:"Lu",alias:"Uppercase_Letter",bmp:"A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a", +astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]"},{name:"M", +alias:"Mark",bmp:"\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d4-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u180b-\u180d\u1885\u1886\u18a9\u1920-\u192b\u1930-\u193b\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1ab0-\u1abe\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9e5\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f", +astral:"\ud800[\uddfd\udee0\udf76-\udf7a]|\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f\udee5\udee6]|\ud804[\udc00-\udc02\udc38-\udc46\udc7f-\udc82\udcb0-\udcba\udd00-\udd02\udd27-\udd34\udd73\udd80-\udd82\uddb3-\uddc0\uddca-\uddcc\ude2c-\ude37\ude3e\udedf-\udeea\udf00-\udf03\udf3c\udf3e-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf62\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc35-\udc46\udcb0-\udcc3\uddaf-\uddb5\uddb8-\uddc0\udddc\udddd\ude30-\ude40\udeab-\udeb7\udf1d-\udf2b]|\ud807[\udc2f-\udc36\udc38-\udc3f\udc92-\udca7\udca9-\udcb6]|\ud81a[\udef0-\udef4\udf30-\udf36]|\ud81b[\udf51-\udf7e\udf8f-\udf92]|\ud82f[\udc9d\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udcd0-\udcd6\udd44-\udd4a]|\udb40[\udd00-\uddef]"}, +{name:"Mc",alias:"Spacing_Mark",bmp:"\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e\u094f\u0982\u0983\u09be-\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102b\u102c\u1031\u1038\u103b\u103c\u1056\u1057\u1062-\u1064\u1067-\u106d\u1083\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7\u17c8\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u1a19\u1a1a\u1a55\u1a57\u1a61\u1a63\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43\u1b44\u1b82\u1ba1\u1ba6\u1ba7\u1baa\u1be7\u1bea-\u1bec\u1bee\u1bf2\u1bf3\u1c24-\u1c2b\u1c34\u1c35\u1ce1\u1cf2\u1cf3\u302e\u302f\ua823\ua824\ua827\ua880\ua881\ua8b4-\ua8c3\ua952\ua953\ua983\ua9b4\ua9b5\ua9ba\ua9bb\ua9bd-\ua9c0\uaa2f\uaa30\uaa33\uaa34\uaa4d\uaa7b\uaa7d\uaaeb\uaaee\uaaef\uaaf5\uabe3\uabe4\uabe6\uabe7\uabe9\uabea\uabec", +astral:"\ud804[\udc00\udc02\udc82\udcb0-\udcb2\udcb7\udcb8\udd2c\udd82\uddb3-\uddb5\uddbf\uddc0\ude2c-\ude2e\ude32\ude33\ude35\udee0-\udee2\udf02\udf03\udf3e\udf3f\udf41-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf62\udf63]|\ud805[\udc35-\udc37\udc40\udc41\udc45\udcb0-\udcb2\udcb9\udcbb-\udcbe\udcc1\uddaf-\uddb1\uddb8-\uddbb\uddbe\ude30-\ude32\ude3b\ude3c\ude3e\udeac\udeae\udeaf\udeb6\udf20\udf21\udf26]|\ud807[\udc2f\udc3e\udca9\udcb1\udcb4]|\ud81b[\udf51-\udf7e]|\ud834[\udd65\udd66\udd6d-\udd72]"}, +{name:"Me",alias:"Enclosing_Mark",bmp:"\u0488\u0489\u1abe\u20dd-\u20e0\u20e2-\u20e4\ua670-\ua672"},{name:"Mn",alias:"Nonspacing_Mark",bmp:"\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d4-\u08e1\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62\u0b63\u0b82\u0bc0\u0bcd\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c81\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0ce2\u0ce3\u0d01\u0d41-\u0d44\u0d4d\u0d62\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u1885\u1886\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1bab-\u1bad\u1be6\u1be8\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099\u309a\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8c5\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaec\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f", +astral:"\ud800[\uddfd\udee0\udf76-\udf7a]|\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f\udee5\udee6]|\ud804[\udc01\udc38-\udc46\udc7f-\udc81\udcb3-\udcb6\udcb9\udcba\udd00-\udd02\udd27-\udd2b\udd2d-\udd34\udd73\udd80\udd81\uddb6-\uddbe\uddca-\uddcc\ude2f-\ude31\ude34\ude36\ude37\ude3e\udedf\udee3-\udeea\udf00\udf01\udf3c\udf40\udf66-\udf6c\udf70-\udf74]|\ud805[\udc38-\udc3f\udc42-\udc44\udc46\udcb3-\udcb8\udcba\udcbf\udcc0\udcc2\udcc3\uddb2-\uddb5\uddbc\uddbd\uddbf\uddc0\udddc\udddd\ude33-\ude3a\ude3d\ude3f\ude40\udeab\udead\udeb0-\udeb5\udeb7\udf1d-\udf1f\udf22-\udf25\udf27-\udf2b]|\ud807[\udc30-\udc36\udc38-\udc3d\udc3f\udc92-\udca7\udcaa-\udcb0\udcb2\udcb3\udcb5\udcb6]|\ud81a[\udef0-\udef4\udf30-\udf36]|\ud81b[\udf8f-\udf92]|\ud82f[\udc9d\udc9e]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udcd0-\udcd6\udd44-\udd4a]|\udb40[\udd00-\uddef]"}, +{name:"N",alias:"Number",bmp:"0-9\u00b2\u00b3\u00b9\u00bc-\u00be\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u09f4-\u09f9\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0b72-\u0b77\u0be6-\u0bf2\u0c66-\u0c6f\u0c78-\u0c7e\u0ce6-\u0cef\u0d58-\u0d5e\u0d66-\u0d78\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f33\u1040-\u1049\u1090-\u1099\u1369-\u137c\u16ee-\u16f0\u17e0-\u17e9\u17f0-\u17f9\u1810-\u1819\u1946-\u194f\u19d0-\u19da\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3007\u3021-\u3029\u3038-\u303a\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua620-\ua629\ua6e6-\ua6ef\ua830-\ua835\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19", +astral:"\ud800[\udd07-\udd33\udd40-\udd78\udd8a\udd8b\udee1-\udefb\udf20-\udf23\udf41\udf4a\udfd1-\udfd5]|\ud801[\udca0-\udca9]|\ud802[\udc58-\udc5f\udc79-\udc7f\udca7-\udcaf\udcfb-\udcff\udd16-\udd1b\uddbc\uddbd\uddc0-\uddcf\uddd2-\uddff\ude40-\ude47\ude7d\ude7e\ude9d-\ude9f\udeeb-\udeef\udf58-\udf5f\udf78-\udf7f\udfa9-\udfaf]|\ud803[\udcfa-\udcff\ude60-\ude7e]|\ud804[\udc52-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udde1-\uddf4\udef0-\udef9]|\ud805[\udc50-\udc59\udcd0-\udcd9\ude50-\ude59\udec0-\udec9\udf30-\udf3b]|\ud806[\udce0-\udcf2]|\ud807[\udc50-\udc6c]|\ud809[\udc00-\udc6e]|\ud81a[\ude60-\ude69\udf50-\udf59\udf5b-\udf61]|\ud834[\udf60-\udf71]|\ud835[\udfce-\udfff]|\ud83a[\udcc7-\udccf\udd50-\udd59]|\ud83c[\udd00-\udd0c]"}, +{name:"Nd",alias:"Decimal_Number",bmp:"0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19", +astral:"\ud801[\udca0-\udca9]|\ud804[\udc66-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udef0-\udef9]|\ud805[\udc50-\udc59\udcd0-\udcd9\ude50-\ude59\udec0-\udec9\udf30-\udf39]|\ud806[\udce0-\udce9]|\ud807[\udc50-\udc59]|\ud81a[\ude60-\ude69\udf50-\udf59]|\ud835[\udfce-\udfff]|\ud83a[\udd50-\udd59]"},{name:"Nl",alias:"Letter_Number",bmp:"\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef",astral:"\ud800[\udd40-\udd74\udf41\udf4a\udfd1-\udfd5]|\ud809[\udc00-\udc6e]"}, +{name:"No",alias:"Other_Number",bmp:"\u00b2\u00b3\u00b9\u00bc-\u00be\u09f4-\u09f9\u0b72-\u0b77\u0bf0-\u0bf2\u0c78-\u0c7e\u0d58-\u0d5e\u0d70-\u0d78\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u19da\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215f\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua830-\ua835",astral:"\ud800[\udd07-\udd33\udd75-\udd78\udd8a\udd8b\udee1-\udefb\udf20-\udf23]|\ud802[\udc58-\udc5f\udc79-\udc7f\udca7-\udcaf\udcfb-\udcff\udd16-\udd1b\uddbc\uddbd\uddc0-\uddcf\uddd2-\uddff\ude40-\ude47\ude7d\ude7e\ude9d-\ude9f\udeeb-\udeef\udf58-\udf5f\udf78-\udf7f\udfa9-\udfaf]|\ud803[\udcfa-\udcff\ude60-\ude7e]|\ud804[\udc52-\udc65\udde1-\uddf4]|\ud805[\udf3a\udf3b]|\ud806[\udcea-\udcf2]|\ud807[\udc5a-\udc6c]|\ud81a[\udf5b-\udf61]|\ud834[\udf60-\udf71]|\ud83a[\udcc7-\udccf]|\ud83c[\udd00-\udd0c]"}, +{name:"P",alias:"Punctuation",bmp:"!-#%-\\x2A,-/:;\\x3F@\\x5B-\\x5D_\\x7B}\u00a1\u00a7\u00ab\u00b6\u00b7\u00bb\u00bf\u037e\u0387\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u2308-\u230b\u2329\u232a\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30-\u2e44\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua8fc\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65", +astral:"\ud800[\udd00-\udd02\udf9f\udfd0]|\ud801\udd6f|\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udef0-\udef6\udf39-\udf3f\udf99-\udf9c]|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\udd74\udd75\uddc5-\uddc9\uddcd\udddb\udddd-\udddf\ude38-\ude3d\udea9]|\ud805[\udc4b-\udc4f\udc5b\udc5d\udcc6\uddc1-\uddd7\ude41-\ude43\ude60-\ude6c\udf3c-\udf3e]|\ud807[\udc41-\udc45\udc70\udc71]|\ud809[\udc70-\udc74]|\ud81a[\ude6e\ude6f\udef5\udf37-\udf3b\udf44]|\ud82f\udc9f|\ud836[\ude87-\ude8b]|\ud83a[\udd5e\udd5f]"}, +{name:"Pc",alias:"Connector_Punctuation",bmp:"_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f"},{name:"Pd",alias:"Dash_Punctuation",bmp:"\\x2D\u058a\u05be\u1400\u1806\u2010-\u2015\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d"},{name:"Pe",alias:"Close_Punctuation",bmp:"\\x29\\x5D}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u2309\u230b\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u27ed\u27ef\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u2e23\u2e25\u2e27\u2e29\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3e\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63"}, +{name:"Pf",alias:"Final_Punctuation",bmp:"\u00bb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d\u2e21"},{name:"Pi",alias:"Initial_Punctuation",bmp:"\u00ab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c\u2e20"},{name:"Po",alias:"Other_Punctuation",bmp:"!-#%-'\\x2A,\\x2E/:;\\x3F@\\x5C\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u2e3c-\u2e3f\u2e41\u2e43\u2e44\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua8fc\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65", +astral:"\ud800[\udd00-\udd02\udf9f\udfd0]|\ud801\udd6f|\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udef0-\udef6\udf39-\udf3f\udf99-\udf9c]|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\udd74\udd75\uddc5-\uddc9\uddcd\udddb\udddd-\udddf\ude38-\ude3d\udea9]|\ud805[\udc4b-\udc4f\udc5b\udc5d\udcc6\uddc1-\uddd7\ude41-\ude43\ude60-\ude6c\udf3c-\udf3e]|\ud807[\udc41-\udc45\udc70\udc71]|\ud809[\udc70-\udc74]|\ud81a[\ude6e\ude6f\udef5\udf37-\udf3b\udf44]|\ud82f\udc9f|\ud836[\ude87-\ude8b]|\ud83a[\udd5e\udd5f]"}, +{name:"Ps",alias:"Open_Punctuation",bmp:"\\x28\\x5B\\x7B\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2308\u230a\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u27ec\u27ee\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u2e22\u2e24\u2e26\u2e28\u2e42\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3f\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62"},{name:"S", +alias:"Symbol",bmp:"\\x24\\x2B<->\\x5E`\\x7C~\u00a2-\u00a6\u00a8\u00a9\u00ac\u00ae-\u00b1\u00b4\u00b8\u00d7\u00f7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd", +astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"}, +{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\u00a2-\u00a5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\u00a8\u00af\u00b4\u00b8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"}, +{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\u00ac\u00b1\u00d7\u00f7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec", +astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\u00a6\u00a9\u00ae\u00b0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd", +astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"}, +{name:"Z",alias:"Separator",bmp:" \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \u00a0\u1680\u2000-\u200a\u202f\u205f\u3000"}])}},{}],6:[function(d,g,p){g.exports=function(c){if(!c.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var d=[{name:"ASCII",bmp:"\x00-\u007f"},{name:"Alphabetic",bmp:"A-Za-z\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc", +astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"}, +{name:"Any",isBmpLast:!0,bmp:"\x00-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\u00ad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\u00aa\u00b5\u00ba\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a", +astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point", +bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a", +astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"}, +{name:"White_Space",bmp:"\t-\r \u0085\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];d.push({name:"Assigned",inverseOf:"Cn"});c.addUnicodeData(d)}},{}],7:[function(d,g,p){g.exports=function(c){if(!c.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");c.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"}, +{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"}, +{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"}, +{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"}, +{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\x00-@\\x5B-`\\x7B-\u00a9\u00ab-\u00b9\u00bb-\u00bf\u00d7\u00f7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd", +astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"}, +{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan", +astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"}, +{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek", +bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"}, +{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"}, +{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"}, +{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"}, +{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"}, +{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"}, +{name:"Latin",bmp:"A-Za-z\u00aa\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"}, +{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"}, +{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"}, +{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"}, +{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"}, +{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"}, +{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian", +astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"}, +{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"}, +{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"}, +{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])}},{}],8:[function(d,g,p){p=d("./xregexp");d("./addons/build")(p);d("./addons/matchrecursive")(p);d("./addons/unicode-base")(p);d("./addons/unicode-blocks")(p);d("./addons/unicode-categories")(p); +d("./addons/unicode-properties")(p);d("./addons/unicode-scripts")(p);g.exports=p},{"./addons/build":1,"./addons/matchrecursive":2,"./addons/unicode-base":3,"./addons/unicode-blocks":4,"./addons/unicode-categories":5,"./addons/unicode-properties":6,"./addons/unicode-scripts":7,"./xregexp":9}],9:[function(d,g,p){function c(a){var e=!0;try{RegExp("",a)}catch(u){e=!1}return e}function A(a,e,u,b,c){var J;a.xregexp={captureNames:e};if(c)return a;if(a.__proto__)a.__proto__=f.prototype;else for(J in f.prototype)a[J]= +f.prototype[J];a.xregexp.source=u;a.xregexp.flags=b?b.split("").sort().join(""):b;return a}function B(a){return n.replace.call(a,/([\s\S])(?=[\s\S]*\1)/g,"")}function z(a,e){if(!f.isRegExp(a))throw new TypeError("Type RegExp expected");var u=a.xregexp||{},b=Q?a.flags:n.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(a))[1],c="",d="",E=null,h=null;e=e||{};e.removeG&&(d+="g");e.removeY&&(d+="y");d&&(b=n.replace.call(b,new RegExp("["+d+"]+","g"),""));e.addG&&(c+="g");e.addY&&(c+="y");c&&(b=B(b+ +c));e.isInternalOnly||(void 0!==u.source&&(E=u.source),null!=u.flags&&(h=c?B(u.flags+c):u.flags));return a=A(new RegExp(e.source||a.source,b),a.xregexp&&a.xregexp.captureNames?u.captureNames.slice(0):null,E,h,e.isInternalOnly)}function l(a){return parseInt(a,16)}function b(a,e,b){(e="("===a.input.charAt(a.index-1)||")"===a.input.charAt(a.index+a[0].length))||(e=a.input,a=a.index+a[0].length,b=-1<b.indexOf("x")?["\\s","#[^#\\n]*","\\(\\?#[^)]*\\)"]:["\\(\\?#[^)]*\\)"],e=n.test.call(new RegExp("^(?:"+ +b.join("|")+")*(?:[?*+]|{\\d+(?:,\\d*)?})"),e.slice(a)));return e?"":"(?:)"}function k(a){return parseInt(a,10).toString(16)}function C(a,e){var b=a.length,c;for(c=0;c<b;++c)if(a[c]===e)return c;return-1}function y(a,e){return L.call(a)==="[object "+e+"]"}function m(a){for(;4>a.length;)a="0"+a;return a}function h(a,e){var b;if(B(e)!==e)throw new SyntaxError("Invalid duplicate regex flag "+e);a=n.replace.call(a,/^\(\?([\w$]+)\)/,function(a,b){if(n.test.call(/[gy]/,b))throw new SyntaxError("Cannot use flag g or y in mode modifier "+ +a);e=B(e+b);return""});for(b=0;b<e.length;++b)if(!N[e.charAt(b)])throw new SyntaxError("Unknown regex flag "+e.charAt(b));return{pattern:a,flags:e}}function w(a){var e={};return y(a,"String")?(f.forEach(a,/[^\s,]+/,function(a){e[a]=!0}),e):a}function x(a){if(!/^[\w$]$/.test(a))throw Error("Flag must be a single character A-Za-z0-9_$");N[a]=!0}function v(a){RegExp.prototype.exec=(a?r:n).exec;RegExp.prototype.test=(a?r:n).test;String.prototype.match=(a?r:n).match;String.prototype.replace=(a?r:n).replace; +String.prototype.split=(a?r:n).split;D.natives=a}function q(a){if(null==a)throw new TypeError("Cannot convert null or undefined to object");return a}function f(a,e){if(f.isRegExp(a)){if(void 0!==e)throw new TypeError("Cannot supply flags when copying a RegExp");return z(a)}a=void 0===a?"":String(a);e=void 0===e?"":String(e);f.isInstalled("astral")&&-1===e.indexOf("A")&&(e+="A");F[a]||(F[a]={});if(!F[a][e]){var b={hasNamedCapture:!1,captureNames:[]},c="default",d="",g=0,E=h(a,e),k=E.pattern;for(E= +E.flags;g<k.length;){do{for(var l,m=k,p=E,q=g,r=c,v=b,w=I.length,x=m.charAt(q),y=null;w--;){var t=I[w];if(!(t.leadChar&&t.leadChar!==x||t.scope!==r&&"all"!==t.scope||t.flag&&-1===p.indexOf(t.flag))&&(l=f.exec(m,t.regex,q,"sticky"))){y={matchLength:l[0].length,output:t.handler.call(v,l,r,p),reparse:t.reparse};break}}(t=y)&&t.reparse&&(k=k.slice(0,g)+t.output+k.slice(g+t.matchLength))}while(t&&t.reparse);t?(d+=t.output,g+=t.matchLength||1):(t=f.exec(k,O[c],g,"sticky")[0],d+=t,g+=t.length,"["===t&&"default"=== +c?c="class":"]"===t&&"class"===c&&(c="default"))}F[a][e]={pattern:n.replace.call(d,/(?:\(\?:\))+/g,"(?:)"),flags:n.replace.call(E,/[^gimuy]+/g,""),captures:b.hasNamedCapture?b.captureNames:null}}b=F[a][e];return A(new RegExp(b.pattern,b.flags),b.captures,a,e)}var D={astral:!1,natives:!1},n={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},G={},F={},I=[],O={"default":/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, +"class":/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},P=/\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,R=void 0===n.exec.call(/()??/,"")[1],Q=void 0!==/x/.flags,L={}.toString,M=c("u"),K=c("y"),N={g:!0,i:!0,m:!0,u:M,y:K};f.prototype=RegExp();f.version="3.2.0";f._clipDuplicates=B;f._hasNativeFlag=c;f._dec=l;f._hex=k;f._pad4=m;f.addToken=function(a,e,b){b=b||{};var c=b.optionalFlags,d;b.flag&&x(b.flag);if(c)for(c=n.split.call(c,""),d=0;d<c.length;++d)x(c[d]); +I.push({regex:z(a,{addG:!0,addY:K,isInternalOnly:!0}),handler:e,scope:b.scope||"default",flag:b.flag,reparse:b.reparse,leadChar:b.leadChar});f.cache.flush("patterns")};f.cache=function(a,b){G[a]||(G[a]={});return G[a][b]||(G[a][b]=f(a,b))};f.cache.flush=function(a){"patterns"===a?F={}:G={}};f.escape=function(a){return n.replace.call(q(a),/[-\[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};f.exec=function(a,b,c,d){var e="g",f,u=!1;(f=K&&!!(d||b.sticky&&!1!==d))?e+="y":d&&(u=!0,e+="FakeY");b.xregexp=b.xregexp||{}; +d=b.xregexp[e]||(b.xregexp[e]=z(b,{addG:!0,addY:f,source:u?b.source+"|()":void 0,removeY:!1===d,isInternalOnly:!0}));d.lastIndex=c||0;a=r.exec.call(d,a);u&&a&&""===a.pop()&&(a=null);b.global&&(b.lastIndex=a?d.lastIndex:0);return a};f.forEach=function(a,b,c){for(var e=0,d=-1;e=f.exec(a,b,e);)c(e,++d,a,b),e=e.index+(e[0].length||1)};f.globalize=function(a){return z(a,{addG:!0})};f.install=function(a){a=w(a);!D.astral&&a.astral&&(D.astral=!0);!D.natives&&a.natives&&v(!0)};f.isInstalled=function(a){return!!D[a]}; +f.isRegExp=function(a){return"[object RegExp]"===L.call(a)};f.match=function(a,b,c){var e=b.global&&"one"!==c||"all"===c,d=(e?"g":"")+(b.sticky?"y":"")||"noGY";b.xregexp=b.xregexp||{};d=b.xregexp[d]||(b.xregexp[d]=z(b,{addG:!!e,removeG:"one"===c,isInternalOnly:!0}));a=n.match.call(q(a),d);b.global&&(b.lastIndex="one"===c&&a?a.index+a[0].length:0);return e?a||[]:a&&a[0]};f.matchChain=function(a,b){return function S(a,e){function c(a){if(d.backref){if(!(a.hasOwnProperty(d.backref)||+d.backref<a.length))throw new ReferenceError("Backreference to undefined group: "+ +d.backref);g.push(a[d.backref]||"")}else g.push(a[0])}for(var d=b[e].regex?b[e]:{regex:b[e]},g=[],h=0;h<a.length;++h)f.forEach(a[h],d.regex,c);return e!==b.length-1&&g.length?S(g,e+1):g}([a],0)};f.replace=function(a,b,c,d){var e=f.isRegExp(b),g=b.global&&"one"!==d||"all"===d,h=(g?"g":"")+(b.sticky?"y":"")||"noGY",u=b;e?(b.xregexp=b.xregexp||{},u=b.xregexp[h]||(b.xregexp[h]=z(b,{addG:!!g,removeG:"one"===d,isInternalOnly:!0}))):g&&(u=new RegExp(f.escape(String(b)),"g"));a=r.replace.call(q(a),u,c);e&& +b.global&&(b.lastIndex=0);return a};f.replaceEach=function(a,b){var c;for(c=0;c<b.length;++c){var e=b[c];a=f.replace(a,e[0],e[1],e[2])}return a};f.split=function(a,b,c){return r.split.call(q(a),b,c)};f.test=function(a,b,c,d){return!!f.exec(a,b,c,d)};f.uninstall=function(a){a=w(a);D.astral&&a.astral&&(D.astral=!1);D.natives&&a.natives&&v(!1)};f.union=function(a,b,c){function d(a,b,c){var d=m[e-u];if(b){if(++e,d)return"(?<"+d+">"}else if(c)return"\\"+(+c+u);return a}c=c||{};c=c.conjunction||"or";var e= +0;if(!y(a,"Array")||!a.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var g=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,h=[],k,l=0;l<a.length;++l)if(k=a[l],f.isRegExp(k)){var u=e;var m=k.xregexp&&k.xregexp.captureNames||[];h.push(n.replace.call(f(k.source).source,g,d))}else h.push(f.escape(k));return f(h.join("none"===c?"":"|"),b)};r.exec=function(a){var b=this.lastIndex,c=n.exec.apply(this,arguments),d;if(c){if(!R&&1<c.length&&-1<C(c,"")){var f= +z(this,{removeG:!0,isInternalOnly:!0});n.replace.call(String(a).slice(c.index),f,function(){var a=arguments.length,b;for(b=1;b<a-2;++b)void 0===arguments[b]&&(c[b]=void 0)})}if(this.xregexp&&this.xregexp.captureNames)for(d=1;d<c.length;++d)(f=this.xregexp.captureNames[d-1])&&(c[f]=c[d]);this.global&&!c[0].length&&this.lastIndex>c.index&&(this.lastIndex=c.index)}this.global||(this.lastIndex=b);return c};r.test=function(a){return!!r.exec.call(this,a)};r.match=function(a){if(!f.isRegExp(a))a=new RegExp(a); +else if(a.global){var b=n.match.apply(this,arguments);a.lastIndex=0;return b}return r.exec.call(a,q(this))};r.replace=function(a,b){var c=f.isRegExp(a);if(c){if(a.xregexp)var d=a.xregexp.captureNames;var e=a.lastIndex}else a+="";var g=y(b,"Function")?n.replace.call(String(this),a,function(){var e=arguments,f;if(d)for(e[0]=new String(e[0]),f=0;f<d.length;++f)d[f]&&(e[0][d[f]]=e[f+1]);c&&a.global&&(a.lastIndex=e[e.length-2]+e[0].length);return b.apply(void 0,e)}):n.replace.call(null==this?this:String(this), +a,function(){var a=arguments;return n.replace.call(String(b),P,function(b,c,e){if(c){e=+c;if(e<=a.length-3)return a[e]||"";e=d?C(d,c):-1;if(0>e)throw new SyntaxError("Backreference to undefined group "+b);return a[e+1]||""}if("$"===e)return"$";if("&"===e||0===+e)return a[0];if("`"===e)return a[a.length-1].slice(0,a[a.length-2]);if("'"===e)return a[a.length-1].slice(a[a.length-2]+a[0].length);e=+e;if(!isNaN(e)){if(e>a.length-3)throw new SyntaxError("Backreference to undefined group "+b);return a[e]|| +""}throw new SyntaxError("Invalid token "+b);})});c&&(a.lastIndex=a.global?0:e);return g};r.split=function(a,b){if(!f.isRegExp(a))return n.split.apply(this,arguments);var c=String(this),d=[],e=a.lastIndex,g=0,h;b=(void 0===b?-1:b)>>>0;f.forEach(c,a,function(a){a.index+a[0].length>g&&(d.push(c.slice(g,a.index)),1<a.length&&a.index<c.length&&Array.prototype.push.apply(d,a.slice(1)),h=a[0].length,g=a.index+h)});g===c.length?(!n.test.call(a,"")||h)&&d.push(""):d.push(c.slice(g));a.lastIndex=e;return d.length> +b?d.slice(0,b):d};f.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,function(a,b){if("B"===a[1]&&"default"===b)return a[0];throw new SyntaxError("Invalid escape "+a[0]);},{scope:"all",leadChar:"\\"});f.addToken(/\\u{([\dA-Fa-f]+)}/,function(a,b,c){b=l(a[1]);if(1114111<b)throw new SyntaxError("Invalid Unicode code point "+a[0]);if(65535>=b)return"\\u"+m(k(b));if(M&&-1<c.indexOf("u"))return a[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u"); +},{scope:"all",leadChar:"\\"});f.addToken(/\[(\^?)\]/,function(a){return a[1]?"[\\s\\S]":"\\b\\B"},{leadChar:"["});f.addToken(/\(\?#[^)]*\)/,b,{leadChar:"("});f.addToken(/\s+|#[^\n]*\n?/,b,{flag:"x"});f.addToken(/\./,function(){return"[\\s\\S]"},{flag:"s",leadChar:"."});f.addToken(/\\k<([\w$]+)>/,function(a){var b=isNaN(a[1])?C(this.captureNames,a[1])+1:+a[1],c=a.index+a[0].length;if(!b||b>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+a[0]);return"\\"+b+(c===a.input.length|| +isNaN(a.input.charAt(c))?"":"(?:)")},{leadChar:"\\"});f.addToken(/\\(\d+)/,function(a,b){if(!("default"===b&&/^[1-9]/.test(a[1])&&+a[1]<=this.captureNames.length)&&"0"!==a[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+a[0]);return a[0]},{scope:"all",leadChar:"\\"});f.addToken(/\(\?P?<([\w$]+)>/,function(a){if(!isNaN(a[1]))throw new SyntaxError("Cannot use integer as capture name "+a[0]);if("length"===a[1]||"__proto__"===a[1])throw new SyntaxError("Cannot use reserved word as capture name "+ +a[0]);if(-1<C(this.captureNames,a[1]))throw new SyntaxError("Cannot use same name for multiple groups "+a[0]);this.captureNames.push(a[1]);this.hasNamedCapture=!0;return"("},{leadChar:"("});f.addToken(/\((?!\?)/,function(a,b,c){if(-1<c.indexOf("n"))return"(?:";this.captureNames.push(null);return"("},{optionalFlags:"n",leadChar:"("});g.exports=f},{}]},{},[8])(8)}); diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html new file mode 100644 index 000000000..19f07492c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/404.html @@ -0,0 +1,12 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Page not found' %}{% endblock %} + +{% block content %} + +<h2>{% translate 'Page not found' %}</h2> + +<p>{% translate 'We’re sorry, but the requested page could not be found.' %}</p> + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html new file mode 100644 index 000000000..b5ac5c3b6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/500.html @@ -0,0 +1,17 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a> +› {% translate 'Server error' %} +</div> +{% endblock %} + +{% block title %}{% translate 'Server error (500)' %}{% endblock %} + +{% block content %} +<h1>{% translate 'Server Error <em>(500)</em>' %}</h1> +<p>{% translate 'There’s been an error. It’s been reported to the site administrators via email and should be fixed shortly. Thanks for your patience.' %}</p> + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html new file mode 100644 index 000000000..cbb25bfbd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/actions.html @@ -0,0 +1,23 @@ +{% load i18n %} +<div class="actions"> + {% block actions %} + {% block actions-form %} + {% for field in action_form %}{% if field.label %}<label>{{ field.label }} {% endif %}{{ field }}{% if field.label %}</label>{% endif %}{% endfor %} + {% endblock %} + {% block actions-submit %} + <button type="submit" class="button" title="{% translate "Run the selected action" %}" name="index" value="{{ action_index|default:0 }}">{% translate "Go" %}</button> + {% endblock %} + {% block actions-counter %} + {% if actions_selection_counter %} + <span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">{{ selection_note }}</span> + {% if cl.result_count != cl.result_list|length %} + <span class="all hidden">{{ selection_note_all }}</span> + <span class="question hidden"> + <a href="#" title="{% translate "Click here to select the objects across all pages" %}">{% blocktranslate with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktranslate %}</a> + </span> + <span class="clear hidden"><a href="#">{% translate "Clear selection" %}</a></span> + {% endif %} + {% endif %} + {% endblock %} + {% endblock %} +</div> diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_index.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_index.html new file mode 100644 index 000000000..886bf6ca0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_index.html @@ -0,0 +1,18 @@ +{% extends "admin/index.html" %} +{% load i18n %} + +{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a> +› +{% for app in app_list %} +{{ app.name }} +{% endfor %} +</div> +{% endblock %} +{% endif %} + +{% block sidebar %}{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html new file mode 100644 index 000000000..00c4178bd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/app_list.html @@ -0,0 +1,40 @@ +{% load i18n %} + +{% if app_list %} + {% for app in app_list %} + <div class="app-{{ app.app_label }} module{% if app.app_url in request.path|urlencode %} current-app{% endif %}"> + <table> + <caption> + <a href="{{ app.app_url }}" class="section" title="{% blocktranslate with name=app.name %}Models in the {{ name }} application{% endblocktranslate %}">{{ app.name }}</a> + </caption> + {% for model in app.models %} + <tr class="model-{{ model.object_name|lower }}{% if model.admin_url in request.path|urlencode %} current-model{% endif %}"> + {% if model.admin_url %} + <th scope="row"><a href="{{ model.admin_url }}"{% if model.admin_url in request.path|urlencode %} aria-current="page"{% endif %}>{{ model.name }}</a></th> + {% else %} + <th scope="row">{{ model.name }}</th> + {% endif %} + + {% if model.add_url %} + <td><a href="{{ model.add_url }}" class="addlink">{% translate 'Add' %}</a></td> + {% else %} + <td></td> + {% endif %} + + {% if model.admin_url and show_changelinks %} + {% if model.view_only %} + <td><a href="{{ model.admin_url }}" class="viewlink">{% translate 'View' %}</a></td> + {% else %} + <td><a href="{{ model.admin_url }}" class="changelink">{% translate 'Change' %}</a></td> + {% endif %} + {% elif show_changelinks %} + <td></td> + {% endif %} + </tr> + {% endfor %} + </table> + </div> + {% endfor %} +{% else %} + <p>{% translate 'You don’t have permission to view or edit anything.' %}</p> +{% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html new file mode 100644 index 000000000..61cf5b1b4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html @@ -0,0 +1,10 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block form_top %} + {% if not is_popup %} + <p>{% translate 'First, enter a username and password. Then, you’ll be able to edit more user options.' %}</p> + {% else %} + <p>{% translate "Enter a username and password." %}</p> + {% endif %} +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html new file mode 100644 index 000000000..730e4c575 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -0,0 +1,57 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} +{% load admin_urls %} + +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} +{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} +{% if not is_popup %} +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a> +› <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a> +› <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a> +› <a href="{% url opts|admin_urlname:'change' original.pk|admin_urlquote %}">{{ original|truncatewords:"18" }}</a> +› {% translate 'Change password' %} +</div> +{% endblock %} +{% endif %} +{% block content %}<div id="content-main"> +<form{% if form_url %} action="{{ form_url }}"{% endif %} method="post" id="{{ opts.model_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %} +<input type="text" name="username" value="{{ original.get_username }}" class="hidden"> +<div> +{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %} +{% if form.errors %} + <p class="errornote"> + {% if form.errors.items|length == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %} + </p> +{% endif %} + +<p>{% blocktranslate with username=original %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktranslate %}</p> + +<fieldset class="module aligned"> + +<div class="form-row"> + {{ form.password1.errors }} + {{ form.password1.label_tag }} {{ form.password1 }} + {% if form.password1.help_text %} + <div class="help">{{ form.password1.help_text|safe }}</div> + {% endif %} +</div> + +<div class="form-row"> + {{ form.password2.errors }} + {{ form.password2.label_tag }} {{ form.password2 }} + {% if form.password2.help_text %} + <div class="help">{{ form.password2.help_text|safe }}</div> + {% endif %} +</div> + +</fieldset> + +<div class="submit-row"> +<input type="submit" value="{% translate 'Change password' %}" class="default"> +</div> + +</div> +</form></div> +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html new file mode 100644 index 000000000..271f774fd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/base.html @@ -0,0 +1,105 @@ +{% load i18n static %}<!DOCTYPE html> +{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} +<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" dir="{{ LANGUAGE_BIDI|yesno:'rtl,ltr,auto' }}"> +<head> +<title>{% block title %}{% endblock %} + +{% if not is_popup and is_nav_sidebar_enabled %} + + +{% endif %} +{% block extrastyle %}{% endblock %} +{% if LANGUAGE_BIDI %}{% endif %} +{% block extrahead %}{% endblock %} +{% block responsive %} + + + {% if LANGUAGE_BIDI %}{% endif %} +{% endblock %} +{% block blockbots %}{% endblock %} + + + + + +

      + + {% if not is_popup %} + + {% block header %} + + {% endblock %} + + {% block breadcrumbs %} + + {% endblock %} + {% endif %} + +
      + {% if not is_popup and is_nav_sidebar_enabled %} + {% block nav-sidebar %} + {% include "admin/nav_sidebar.html" %} + {% endblock %} + {% endif %} +
      + {% block messages %} + {% if messages %} +
        {% for message in messages %} + {{ message|capfirst }} + {% endfor %}
      + {% endif %} + {% endblock messages %} + +
      + {% block pretitle %}{% endblock %} + {% block content_title %}{% if title %}

      {{ title }}

      {% endif %}{% endblock %} + {% block content_subtitle %}{% if subtitle %}

      {{ subtitle }}

      {% endif %}{% endblock %} + {% block content %} + {% block object-tools %}{% endblock %} + {{ content }} + {% endblock %} + {% block sidebar %}{% endblock %} +
      +
      + + {% block footer %}{% endblock %} +
      +
      +
      + + + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html new file mode 100644 index 000000000..9e8cc604c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html @@ -0,0 +1,9 @@ +{% extends "admin/base.html" %} + +{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %} + +{% block branding %} +

      {{ site_header|default:_('Django administration') }}

      +{% endblock %} + +{% block nav-global %}{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html new file mode 100644 index 000000000..21b1c9bce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form.html @@ -0,0 +1,81 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_modify %} + +{% block extrahead %}{{ block.super }} + +{{ media }} +{% endblock %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colM{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block content %}
      +{% block object-tools %} +{% if change %}{% if not is_popup %} +
        + {% block object-tools-items %} + {% change_form_object_tools %} + {% endblock %} +
      +{% endif %}{% endif %} +{% endblock %} +
      {% csrf_token %}{% block form_top %}{% endblock %} +
      +{% if is_popup %}{% endif %} +{% if to_field %}{% endif %} +{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} +{% if errors %} +

      + {% if errors|length == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %} +

      + {{ adminform.form.non_field_errors }} +{% endif %} + +{% block field_sets %} +{% for fieldset in adminform %} + {% include "admin/includes/fieldset.html" %} +{% endfor %} +{% endblock %} + +{% block after_field_sets %}{% endblock %} + +{% block inline_field_sets %} +{% for inline_admin_formset in inline_admin_formsets %} + {% include inline_admin_formset.opts.template %} +{% endfor %} +{% endblock %} + +{% block after_related_objects %}{% endblock %} + +{% block submit_buttons_bottom %}{% submit_row %}{% endblock %} + +{% block admin_change_form_document_ready %} + +{% endblock %} + +{# JavaScript for prepopulated fields #} +{% prepopulated_fields_js %} + +
      +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html new file mode 100644 index 000000000..067ae8376 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html @@ -0,0 +1,8 @@ +{% load i18n admin_urls %} +{% block object-tools-items %} +
    1. + {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} + {% translate "History" %} +
    2. +{% if has_absolute_url %}
    3. {% translate "View on site" %}
    4. {% endif %} +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html new file mode 100644 index 000000000..15508a9a9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list.html @@ -0,0 +1,86 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_list %} + +{% block extrastyle %} + {{ block.super }} + + {% if cl.formset %} + + {% endif %} + {% if cl.formset or action_form %} + + {% endif %} + {{ media.css }} + {% if not actions_on_top and not actions_on_bottom %} + + {% endif %} +{% endblock %} + +{% block extrahead %} +{{ block.super }} +{{ media.js }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block coltype %}{% endblock %} + +{% block content %} +
      + {% block object-tools %} +
        + {% block object-tools-items %} + {% change_list_object_tools %} + {% endblock %} +
      + {% endblock %} + {% if cl.formset and cl.formset.errors %} +

      + {% if cl.formset.total_error_count == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %} +

      + {{ cl.formset.non_form_errors }} + {% endif %} +
      +
      + {% block search %}{% search_form cl %}{% endblock %} + {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %} + +
      {% csrf_token %} + {% if cl.formset %} +
      {{ cl.formset.management_form }}
      + {% endif %} + + {% block result_list %} + {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% result_list cl %} + {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% endblock %} + {% block pagination %}{% pagination cl %}{% endblock %} +
      +
      + {% block filters %} + {% if cl.has_filters %} +
      +

      {% translate 'Filter' %}

      + {% if cl.has_active_filters %}

      + ✖ {% translate "Clear all filters" %} +

      {% endif %} + {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %} +
      + {% endif %} + {% endblock %} +
      +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html new file mode 100644 index 000000000..11cc6fa4b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html @@ -0,0 +1,12 @@ +{% load i18n admin_urls %} + +{% block object-tools-items %} + {% if has_add_permission %} +
    5. + {% url cl.opts|admin_urlname:'add' as add_url %} + + {% blocktranslate with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktranslate %} + +
    6. + {% endif %} +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html new file mode 100644 index 000000000..399d1d36f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/change_list_results.html @@ -0,0 +1,38 @@ +{% load i18n %} +{% if result_hidden_fields %} +
      {# DIV for HTML validation #} +{% for item in result_hidden_fields %}{{ item }}{% endfor %} +
      +{% endif %} +{% if results %} +
      + + + +{% for header in result_headers %} +{% endfor %} + + + +{% for result in results %} +{% if result.form and result.form.non_field_errors %} + +{% endif %} +{% for item in result %}{{ item }}{% endfor %} +{% endfor %} + +
      + {% if header.sortable %} + {% if header.sort_priority > 0 %} +
      + + {% if num_sorted_fields > 1 %}{{ header.sort_priority }}{% endif %} + +
      + {% endif %} + {% endif %} +
      {% if header.sortable %}{{ header.text|capfirst }}{% else %}{{ header.text|capfirst }}{% endif %}
      +
      +
      {{ result.form.non_field_errors }}
      +
      +{% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html new file mode 100644 index 000000000..65ae80013 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html @@ -0,0 +1,16 @@ +{% if show %} +
      +
      +
      +{% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html new file mode 100644 index 000000000..d4c9b295a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html @@ -0,0 +1,52 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +{% if perms_lacking %} +

      {% blocktranslate with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktranslate %}

      +
        + {% for obj in perms_lacking %} +
      • {{ obj }}
      • + {% endfor %} +
      +{% elif protected %} +

      {% blocktranslate with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktranslate %}

      +
        + {% for obj in protected %} +
      • {{ obj }}
      • + {% endfor %} +
      +{% else %} +

      {% blocktranslate with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktranslate %}

      + {% include "admin/includes/object_delete_summary.html" %} +

      {% translate "Objects" %}

      +
        {{ deleted_objects|unordered_list }}
      +
      {% csrf_token %} +
      + + {% if is_popup %}{% endif %} + {% if to_field %}{% endif %} + + {% translate "No, take me back" %} +
      +
      +{% endif %} +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html new file mode 100644 index 000000000..a49b6adee --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -0,0 +1,55 @@ +{% extends "admin/base_site.html" %} +{% load i18n l10n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +{% if perms_lacking %} +

      {% blocktranslate %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktranslate %}

      +
        + {% for obj in perms_lacking %} +
      • {{ obj }}
      • + {% endfor %} +
      +{% elif protected %} +

      {% blocktranslate %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktranslate %}

      +
        + {% for obj in protected %} +
      • {{ obj }}
      • + {% endfor %} +
      +{% else %} +

      {% blocktranslate %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktranslate %}

      + {% include "admin/includes/object_delete_summary.html" %} +

      {% translate "Objects" %}

      + {% for deletable_object in deletable_objects %} +
        {{ deletable_object|unordered_list }}
      + {% endfor %} +
      {% csrf_token %} +
      + {% for obj in queryset %} + + {% endfor %} + + + + {% translate "No, take me back" %} +
      +
      +{% endif %} +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html new file mode 100644 index 000000000..ccc7134c7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -0,0 +1,29 @@ +{% load i18n admin_urls %} +
      +
      + {% if inline_admin_formset.formset.max_num == 1 %} +

      {{ inline_admin_formset.opts.verbose_name|capfirst }}

      + {% else %} +

      {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

      + {% endif %} +{{ inline_admin_formset.formset.management_form }} +{{ inline_admin_formset.formset.non_form_errors }} + +{% for inline_admin_form in inline_admin_formset %}
      +

      {{ inline_admin_formset.opts.verbose_name|capfirst }}: {% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} {% if inline_admin_formset.has_change_permission %}{% translate "Change" %}{% else %}{% translate "View" %}{% endif %}{% endif %} +{% else %}#{{ forloop.counter }}{% endif %} + {% if inline_admin_form.show_url %}{% translate "View on site" %}{% endif %} + {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}{% endif %} +

      + {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %} + {% for fieldset in inline_admin_form %} + {% include "admin/includes/fieldset.html" %} + {% endfor %} + {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} + {% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %} +
      {% endfor %} +
      +
      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html new file mode 100644 index 000000000..4c0a08cbf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -0,0 +1,66 @@ +{% load i18n admin_urls static admin_modify %} +
      + +
      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/filter.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/filter.html new file mode 100644 index 000000000..35dc553bd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/filter.html @@ -0,0 +1,8 @@ +{% load i18n %} +

      {% blocktranslate with filter_title=title %} By {{ filter_title }} {% endblocktranslate %}

      + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html new file mode 100644 index 000000000..218fd5a4c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html @@ -0,0 +1,29 @@ +
      + {% if fieldset.name %}

      {{ fieldset.name }}

      {% endif %} + {% if fieldset.description %} +
      {{ fieldset.description|safe }}
      + {% endif %} + {% for line in fieldset %} +
      + {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} + {% for field in line %} + + {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} + {% if field.is_checkbox %} + {{ field.field }}{{ field.label_tag }} + {% else %} + {{ field.label_tag }} + {% if field.is_readonly %} +
      {{ field.contents }}
      + {% else %} + {{ field.field }} + {% endif %} + {% endif %} + {% if field.field.help_text %} +
      {{ field.field.help_text|safe }}
      + {% endif %} +
      + {% endfor %} + + {% endfor %} +
      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html new file mode 100644 index 000000000..9ad97db2f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html @@ -0,0 +1,7 @@ +{% load i18n %} +

      {% translate "Summary" %}

      +
        + {% for model_name, object_count in model_count %} +
      • {{ model_name|capfirst }}: {{ object_count }}
      • + {% endfor %} +
      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html new file mode 100644 index 000000000..b6e84b64e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/index.html @@ -0,0 +1,50 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colMS{% endblock %} + +{% block bodyclass %}{{ block.super }} dashboard{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block nav-sidebar %}{% endblock %} + +{% block content %} +
      + {% include "admin/app_list.html" with app_list=app_list show_changelinks=True %} +
      +{% endblock %} + +{% block sidebar %} + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html new file mode 100644 index 000000000..1ef7c7143 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/invalid_setup.html @@ -0,0 +1,13 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +

      {% translate 'Something’s wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user.' %}

      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html new file mode 100644 index 000000000..7a192a4bd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/login.html @@ -0,0 +1,68 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }} +{{ form.media }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} login{% endblock %} + +{% block usertools %}{% endblock %} + +{% block nav-global %}{% endblock %} + +{% block nav-sidebar %}{% endblock %} + +{% block content_title %}{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} +{% if form.errors and not form.non_field_errors %} +

      +{% if form.errors.items|length == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %} +

      +{% endif %} + +{% if form.non_field_errors %} +{% for error in form.non_field_errors %} +

      + {{ error }} +

      +{% endfor %} +{% endif %} + +
      + +{% if user.is_authenticated %} +

      +{% blocktranslate trimmed %} + You are authenticated as {{ username }}, but are not authorized to + access this page. Would you like to login to a different account? +{% endblocktranslate %} +

      +{% endif %} + +
      {% csrf_token %} +
      + {{ form.username.errors }} + {{ form.username.label_tag }} {{ form.username }} +
      +
      + {{ form.password.errors }} + {{ form.password.label_tag }} {{ form.password }} + +
      + {% url 'admin_password_reset' as password_reset_url %} + {% if password_reset_url %} + + {% endif %} +
      + +
      +
      + +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html new file mode 100644 index 000000000..6ddff01d6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/nav_sidebar.html @@ -0,0 +1,8 @@ +{% load i18n %} + + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html new file mode 100644 index 000000000..3015f36c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/object_history.html @@ -0,0 +1,42 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +
      +
      + +{% if action_list %} + + + + + + + + + + {% for action in action_list %} + + + + + + {% endfor %} + +
      {% translate 'Date/time' %}{% translate 'User' %}{% translate 'Action' %}
      {{ action.action_time|date:"DATETIME_FORMAT" }}{{ action.user.get_username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}{{ action.get_change_message }}
      +{% else %} +

      {% translate 'This object doesn’t have a change history. It probably wasn’t added via this admin site.' %}

      +{% endif %} +
      +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html new file mode 100644 index 000000000..bc3117bfc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/pagination.html @@ -0,0 +1,12 @@ +{% load admin_list %} +{% load i18n %} +

      +{% if pagination_required %} +{% for i in page_range %} + {% paginator_number cl i %} +{% endfor %} +{% endif %} +{{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %} +{% if show_all_url %}{% translate 'Show all' %}{% endif %} +{% if cl.formset and cl.result_count %}{% endif %} +

      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/popup_response.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/popup_response.html new file mode 100644 index 000000000..57a1ae366 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/popup_response.html @@ -0,0 +1,10 @@ +{% load i18n static %} + + {% translate 'Popup closing…' %} + + + + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html new file mode 100644 index 000000000..dd6e56100 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html @@ -0,0 +1,5 @@ +{% load static %} + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html new file mode 100644 index 000000000..fd7818a9f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/search_form.html @@ -0,0 +1,20 @@ +{% load i18n static %} +{% if cl.search_fields %} +
      +{% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html new file mode 100644 index 000000000..f401f0d8a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/submit_line.html @@ -0,0 +1,14 @@ +{% load i18n admin_urls %} +
      +{% block submit-row %} +{% if show_save %}{% endif %} +{% if show_delete_link and original %} + {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} + +{% endif %} +{% if show_save_as_new %}{% endif %} +{% if show_save_and_add_another %}{% endif %} +{% if show_save_and_continue %}{% endif %} +{% if show_close %}{% translate 'Close' %}{% endif %} +{% endblock %} +
      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html new file mode 100644 index 000000000..fe71ebdb0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html @@ -0,0 +1,6 @@ +{% if widget.is_initial %}

      {{ widget.initial_text }}: {{ widget.value }}{% if not widget.required %} + + +{% endif %}
      +{{ widget.input_text }}:{% endif %} +{% if widget.is_initial %}

      {% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html new file mode 100644 index 000000000..ca25b5267 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html @@ -0,0 +1,2 @@ +{% include 'django/forms/widgets/input.html' %}{% if related_url %}{% endif %}{% if link_label %} +{% if link_url %}{% endif %}{{ link_label }}{% if link_url %}{% endif %}{% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html new file mode 100644 index 000000000..0dd0331dc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html @@ -0,0 +1 @@ +{% include 'admin/widgets/foreign_key_raw_id.html' %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/radio.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/radio.html new file mode 100644 index 000000000..780899af4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/radio.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html new file mode 100644 index 000000000..a97bec16e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html @@ -0,0 +1,31 @@ +{% load i18n static %} + diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html new file mode 100644 index 000000000..7fc7bf683 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html @@ -0,0 +1,4 @@ +

      + {{ date_label }} {% with widget=widget.subwidgets.0 %}{% include widget.template_name %}{% endwith %}
      + {{ time_label }} {% with widget=widget.subwidgets.1 %}{% include widget.template_name %}{% endwith %} +

      diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/url.html b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/url.html new file mode 100644 index 000000000..69dc401ba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/admin/widgets/url.html @@ -0,0 +1 @@ +{% if url_valid %}

      {{ current_label }} {{ widget.value }}
      {{ change_label }} {% endif %}{% include "django/forms/widgets/input.html" %}{% if url_valid %}

      {% endif %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html new file mode 100644 index 000000000..e9a554502 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/logged_out.html @@ -0,0 +1,14 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %}{% endblock %} + +{% block nav-sidebar %}{% endblock %} + +{% block content %} + +

      {% translate "Thanks for spending some quality time with the web site today." %}

      + +

      {% translate 'Log in again' %}

      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html new file mode 100644 index 000000000..e1bb982ab --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_done.html @@ -0,0 +1,13 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} +{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}{% translate 'Documentation' %} / {% endif %}{% translate 'Change password' %} / {% translate 'Log out' %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +

      {% translate 'Your password was changed.' %}

      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html new file mode 100644 index 000000000..95c84f922 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_change_form.html @@ -0,0 +1,57 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}{% translate 'Documentation' %} / {% endif %} {% translate 'Change password' %} / {% translate 'Log out' %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block content %}
      + +
      {% csrf_token %} +
      +{% if form.errors %} +

      + {% if form.errors.items|length == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %} +

      +{% endif %} + + +

      {% translate 'Please enter your old password, for security’s sake, and then enter your new password twice so we can verify you typed it in correctly.' %}

      + +
      + +
      + {{ form.old_password.errors }} + {{ form.old_password.label_tag }} {{ form.old_password }} +
      + +
      + {{ form.new_password1.errors }} + {{ form.new_password1.label_tag }} {{ form.new_password1 }} + {% if form.new_password1.help_text %} +
      {{ form.new_password1.help_text|safe }}
      + {% endif %} +
      + +
      +{{ form.new_password2.errors }} + {{ form.new_password2.label_tag }} {{ form.new_password2 }} + {% if form.new_password2.help_text %} +
      {{ form.new_password2.help_text|safe }}
      + {% endif %} +
      + +
      + +
      + +
      + +
      +
      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html new file mode 100644 index 000000000..e6a383fcf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html @@ -0,0 +1,17 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} + +

      {% translate "Your password has been set. You may go ahead and log in now." %}

      + +

      {% translate 'Log in' %}

      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html new file mode 100644 index 000000000..373e70341 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -0,0 +1,41 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} + +{% if validlink %} + +

      {% translate "Please enter your new password twice so we can verify you typed it in correctly." %}

      + +
      {% csrf_token %} +
      + +
      + {{ form.new_password1.errors }} + + {{ form.new_password1 }} +
      +
      + {{ form.new_password2.errors }} + + {{ form.new_password2 }} +
      + +
      +
      + +{% else %} + +

      {% translate "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}

      + +{% endif %} + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html new file mode 100644 index 000000000..8b1971a76 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_done.html @@ -0,0 +1,17 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} + +

      {% translate 'We’ve emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly.' %}

      + +

      {% translate 'If you don’t receive an email, please make sure you’ve entered the address you registered with, and check your spam folder.' %}

      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html new file mode 100644 index 000000000..64822091d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_email.html @@ -0,0 +1,14 @@ +{% load i18n %}{% autoescape off %} +{% blocktranslate %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktranslate %} + +{% translate "Please go to the following page and choose a new password:" %} +{% block reset_link %} +{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} +{% endblock %} +{% translate 'Your username, in case you’ve forgotten:' %} {{ user.get_username }} + +{% translate "Thanks for using our site!" %} + +{% blocktranslate %}The {{ site_name }} team{% endblocktranslate %} + +{% endautoescape %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html new file mode 100644 index 000000000..33785f7c1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templates/registration/password_reset_form.html @@ -0,0 +1,27 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} + +

      {% translate 'Forgotten your password? Enter your email address below, and we’ll email instructions for setting a new one.' %}

      + +
      {% csrf_token %} +
      +
      + {{ form.email.errors }} + + {{ form.email }} +
      + +
      +
      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/__init__.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5568764d8744d868f3d8a01aba9c897189391002 GIT binary patch literal 207 zcmYk0F$%&!6ht?YLWCT|BBmD+K~W14QS3g3&E^v}Cc9z(PrxI2CBe$t3s||SbYR{v zQ;m(Hk??w7o>`x-9{&n_S$I?Ek&BZU2m8Bl{rtnnEvIlMbOgtiNW#jhwnoDQ8_nA` zgSB?V@xj>=6+?%ngPqQRG-KRIb(IAYWZ4o$n-WP$F$FOsWm{8}*Msc=Fu*>b zo&hMVW?izuDngFsC?&g`RG12o%8Sm+m3-K7RZ`B&mB0MtYbyClm8<-bkJxcJktHGL z-k!ySpyCClr>7rxx^LgU_uSjlDV6dXe*gJ}f1f$^yr%sJJ?#Ejc=$A~@F%*a2~Frt z&8551)LVvY=#)2`X3KId&Rfk)%XaNn*3GsY*J( zTF2evy5^6rY3@V*LklOwh^SoG)^vAL91x?|HFpZ7C&j23ds`Rd;vm;OEDnjgQ1^&9 zERNv*F>$vziuNk@etE~Qk)QzsC$a*Cb@1(oaDMw;$iU!>YnDhN4V}|;!&> zJb{*<=9W)z%TI_;a@`p&dy>nZ5~sNA8KGa+YES=|q+zPucUpA0m; z8Na!!XR+DoEG{ppmLQ%zbKye$vu7?P#TPEuFTQl~<%|53d+E~IbC)>lTs-sKInL!T zpF4Bu+2<*b@eaQ=&Ce0^%A()Y#Tt&7>V~hM2W)b<+ zD2%))XdqXf?p*R$Fi-zQFKW!!j3kR$w!A1zoG57d-APiw|yRb!%j4CO|wQyFq*tZi6PCe{OeQ;+Ple-`Z?64siIcGhK0 zWcs<9-94AD;`f~2_9eJc_1e{-ErOLmEPKuBk~inmv;TUv8MGIXt$I`#w9!_eER3eO zf7g7YSM5%m3YS2j(e%Rb>4|7Q2q%fc#OXJBr%qDU>1ucMlvkaX{_N8eZ}jlbRUXQV z{ce6+Oe9*(Npk6nIx=z2UAXYV#mg^TmZRWG;tXv>b-s)w7+(a?5W=;nnAY==tTD ztLJG2Cojql$<);qzrAu5@^du|A|F#~EE3hLV!>vLMqpf;VONYR7uMh_wbF)=&GAv$)H6)ZZj zfgHr?rVRyQb)VlWB+K^ZO}S>v3EYyAlquL0 zb?Lvh97tcd#c;lJt?o6O^<~*i@gC{@1cZf)+`>5e1HlbMB)y&eRSxP#Ui#BdBIe23{7}ov=uP+ zkK;Kc;T*LphOt#KX(

      ko0H2Cy%2F+QDjjt^IqxznniEMyp7p1&MT_(*nGmp#_-k z4(zaLiqy{eTV`U-F1H&=sV{MLqV1LPXD*ZqE7xGaQ?UBd|3aDKJS2zJB_GL_AL)+APmDp`gC>LjhBg{3kmyPmqCMv8M@>ioGN^_h;{X(hVBF=^{3mf$9 za0b-MA|IP;#%_9|Ac`9UvAL;?t8a`@i5MKy(AL?gh@m()s%`23AH$+7Ms6B$?x5DoV?UN~m2nM-ia2mx>kWe5 zflckK_Ua^fGSnN6hhhUW{(d|d=i?#pU?eVWjEaGHWD~$F9@wZL2gN~|CUlB%HS^3vtVM1F=o1G#09M3STrt1Hx9<7O{EofO3M362GSDe9bM+Y z(J?WOp3WvrQ(G4$aqwnNt&}h!(ucYa?bj)!D65T5bGg;7&ikH#f>!3`3N(0uO?jQQ ztXq(Nv@F|oFN)-JGT=3657ry=eq(W_^LqDa-I5Rlw-|8k#vXqq!p=2STXrY2!1!WUBF5%F}<)MNpZ8f>kbfU z*vw-g3>*wqVhKNNV1J&XCQl>T2L((NUd9!UBZ&dbAqlo1ZkkXMkhC#WLpgBo_w-4A zFO-Z4QwWCXQKIkLa6%G zA9d#Dn!fx52-X1pNpOZEd^bCzmUvP~MrpyAh&!p@Xsw?OazKO(m)3GWrDn&gHTWJCM zIF@19C~-b8GDV|ely!^#48wHN(lXl7pJP~h86c^QKa0y8V-T(KdeH2esB7jOgGWk47aITNf|s1%L{=@_$nmbLY>ymhKxbw?Vj4_=!O8uQhb zw_2Tn|4@a}fS1?wYXk|ss)FUIm*AXgdaW7Zolb0(fgXm#q&g%{o#ne;m!HDmz>&}6 z24{=qn|IW0ERer~2H(XMQiQ{?Xx(i{2bVWYl=XiHkRh1Yz!iRtAquT7Os*-+9zhXI z7O*)3Z~|zO0+tGlu-(g|B(q_|z&pYM7|F)=nlY-)>AhUH7&&+*kds+6ubRDluh1)g zPHPt|Ey}GvsRNq8Ogp{OD_Z;2YZ`z_L1bbFAjOIE!d}+G=i~fBK`z8uL0;NR!Xdic zE+_J6R|bSB#!g&Dz7&<>VpLujz%@7vqb-9tw=pCN1OeKUsLd}7MIr@p4CP9#^D$qXm2>>#gWw?q`WBgM!<{X;KkkG8o44> zF$hRBjB%16-Xs4tnxH%OTA^*k8GtB#=mQ?0H&zbG5I6phvOoH3xJ|Et2cs@ z3INk!JOUt;VXy)C1UPaOBQ+N8UjYc^yteSb!h=}v1B+A(00)X`$w6(Q_KqGNMOhXg ztr8u=XetZG*L1qm#=y8rc+&yAr?jTPr+UjXcc60?El2m3uNgEl0mrI;)yD1wh5%j2 z1!qhIFH3llr*_dE!6qRm)x|i0d__zY0Xr-mmS*V}^@+-Wfr_W!h>F)4u z%gH`YSTmt=$g02t<{hXUBT|WK`?2d&Ab+SH0CRPk|BNc$fq7_Wb#;%i$>T_mG67TD zcw$%2D_w_oHy zVj$jRL;}imXkQpBu{ujp*gbH^SVVV>nLWAGSz2D2g!xBkgq1Yot8VGk8@)7cfg2tp zkv>M^bhm&jA}SPHaC2wT_dF?GH+KaDR5pLUBmH2m{TY9i@sj);wJj5V0}KL&Bk(9khziN1 zT%@E)Z5)i1SDDqiJ4}%SuNid7NT}sztH)BuJWp(H9!l~+lT5t@V3rU_nGb~U+llQ< z*+DGw083_Kt9Qd4MyO8CavvqVEgFMQ30V?3hXkGjA`2-rO7vOz3JQ}9OC5O?41uM; zB;`DH`66}6ZFg~V>>ZGIoS2xp3*?DyfcdjCVa&|lW}%Y7+xNjgfMWO!B!EB}E1TCV z*fJC-7$?x88(W5H!+w_mXl#^FGzf8_H_Haq+AwcL4lGz(d2?7VqSVq2tGwM8kZ8-! zpwvJw{Oyl3p}Xb{ZI&U@b;q@CXqM)3up-G{Vm4j?67D998$O3E3bd*GhU#(%KM3GJ z`EXU{kO~>GHu6QlT&_0eDdaL(L9HnXvwP`j{H`Uud-x-@Df}O zxD3^$Wx3P|{cx%}jcAT~ZOaSV5iX`QgJ9k@Pl^zJXA3dvU?yn7OR4f3e2O9y8HRY( zexN0FO7~zZ;t}a#ay~c?M4+IqMfw`zAF=UuQu)xkxAf_nDOb=a$%M;b34xxV9Ypmy zxul`roaI{iGMXS_oU1EY1twwzOuARTiDVL7hcC2@ zy;e_(bp%VjCMh61W$Sg(X@E2lOiJmi8a~2q>FfBNUqP+p7x$36pI%Hr+0iV$VoNI9 z1Eh%)#03(g@C!&N8nmFvBPtd|`31lW#5l@;S9;HgEJPa-{Q<{}HPo=-E)uuUmf95o zx-FrpHUf|%ZBwN-@=JI{%~pYWoL?knH&{ygJDG$h$&i$UJW>|$Tc%PRCbqlcHqVn2 znrD(#dLaB5&2DLK18qxh-{aw={ua*nQ30GgSvc+lCM(oYm|_tl#&wGd92JsdK{zVYn0qJ$BLR` zs#BGM4xidP;bBbKc+>g-i2Bz-V$XzWvb4<4;^GNM5O#7W$VU=b)>x+{=AfN%P?O^b z-kE$ig!KeM(XSy;jXsz%^`XVb6VNw3!Q&!TVs{_sO?p6CJ;9=@`+Y%3?OUzmoChH2uB_E@P?;_c=ngtXP$S`q*O^jw8+Z5RN zF}jn_i#s`nQ2Ri|2G$AN7Cw(5?-3Nzg%HcT$yW|=&=6=ns|~NYXHt&5N4-7sbikr##Q&RgbsHvHy#Cj4fM3$5Tk zMb<`<{0-bobQi_9;km`OC_&=BiF=vvrl4TzH8CItuWPZrQKnEUac1QY*E8~m2vz?u8rp#WwVs8yFtUySbuCwRk8qA{8+1*&6R zjLsT?7F)lse_bcPR8bGGccO86KT*7)-!N}jH!?Tu8`)W#00*Ts?xA{c z7u6h54bVC|C=R6*i5^k2#9d4+w?l0Yox{86f_;9p``o^L zP5`z#A0WUd8}qAd+_^}|pxK-h2&h!)_=DoU0F%+G+W9};!q3f7OTxaPYXdflFuIat zs4VO{$HIDj)%RpKN4XY`N#?s*$_j6_Yf)y;#=w>Vu+cOEwjm+#b!`K7X&sBR36Dxy zADu&bh`eU|$K-~xFeL`E^*M4Of`;0kY+(>4Y%fNnCurxF_3mLB9+Yu9-@V=vcKS6m zLvYc9Pexh!TS)c{ly)we<;%Fj<47PK+N(pUvC$)K0~&TymqW+_kkEl(Y`kl{Mw1}D z0a!vo5=P-35RsqcH~>s+1T-dLopb-&xI{hV@4`~rwvyJgBd#gL~ zQM20VlnlLsWBmGyFHK*0zJC6tOD~?ea?6mv2`V_H3L?aUHz_};8k{}zO4^9w5>5#d ziy&N*ZOnIq210Ho)^QJGh`|*4;T0t9H%E*a?dj_}ZN_y2TL;)Q))NyEzulBB@XB$VONiQ8{e1vLRIfhgij338^?oN$T( ziBly>Q9URhG0BryrZol5tBPG>lRrheoSFSQ#OzVL#MX?0@pB7dF9bS2Ft*BB>wo@V z)^C%bAUTPD?o6{uwiM?PAiDh{#?fjr40Zu10RK-zxtCo%`cW^E_T2>fTZQ6OFQ{ zMwuD>z|pM_?XB9Oq`Y@KNE(=eZWkywfW$4G#X@Ym-I5l;9eMfkx%%027cZTA_RN)Y zXX_VVx#IF!t_N6qky<$X4FupX4qoQwq(28DuK8lnM&iBB-ULrT@*=e9Z5KrXcXVFj^ba=eSiA$)XErqhNGhcm{O{hpJj2$r>lbAv6z%HvGJ zLTjU7{mg#PuI#QG#5;|g^>h1!{NPRxI@2)VR@)y~o03NP%W>Wab7@ES^ZEWBh(~nf z!<4X~ZA)9iYq4WCC@}Fa;EFvuOu*w|j zp{JTf(J2nRsFp*s%Wy$=7s(O^EAvQdx{{OI_)tiR(*P3^3uw28E94Zz| zf^QILQ7Ce-NkjMpB#0F(`3-zTGei$gKQuwXFnq2hRYUe;s5N>{P|xopam{FH-&s<6 z+)WD!3q+s#{TFeujP`kKD8!K9yucCMl7EAueL`iSkcDa-8T$5v4p%mDcs7P7p`SvE z8CcyF7ON`~7Mle}eFjAz5wRNKGIeCHPME4Vbj7KX-$qD>riB1br_HVCL!J{%E$mdU z`Bge%tE!VIj^$B&32`PRl?a%s4+PX9(l;H{{T{d+3f`mZJa-h> z_<|#7^H*-HLM1u->N`nNtM2G_Pw7wjuQ&W9a;ic;Z-6VsA308m83j)U(&zpJB+2B$*A?w5()! zU$dC)+AsG}lVeB{=ah=?o~GRv(z_jv4h9bEhqJ}3!a$S~LQ4M(oRXV33>eCfAk8~h jovc$FY&b*2AYmHQNoyoc;u;R@Bux<*h26C1LhfS88A(eo zcd41BWC=^afZbyb>DdSQ=>Mo#pr@XE=%FakgOgbO-YjWLvP@y$%)FU-Gw;oN-+Rhh zE#JcL-+%q*V0y~3{zZd>KO2Lq`1IdFge6#F1=R9{jd{Qs_3gwSJAs3~BWg))>;^8g zB;Tt)vI0-IqW-`N8qyp2qAt8|nP>?Afpwn+OJYehG1oM6O*7XLZ8O(0yk*1dh!cj_ z25(uM6sOFnBiJpgclrtLW!>np(#z#|l0>;gzkV%Cb9py^!Z7)ml_$SShsjjOS^Ak6 z$LWns$RSNFel9vqeAn>le}Jr8GbUJJZCR>ausy4Q=4Y)Dd&Hn6H~b!W{H%4|x_xrS z3y!umvkQB~g*~;@+h&(t?bv*Ma|IHef??GMvs&To*}^Gmq6V4HiZ$=mDqCUXk=*-a zDcJ7Cc)rdZ)h9QFpL>fj+3~(DS`S^i-{ytF+G`Xn_xF|x=MfX_hn)C@1$!;;e&=`b zyQU;e)s4DItn+TR)}1Ih$tF`Wpa|DunF!s@H=?|&H?nCWx=N-(s_yTjt?1TJ#gn|d zmMJ4D-;jrPcjvn?-yLN62E^bXvO8@VccWBv<1~p=sryDi&@i(!8JwwRLc<>#agIi+j)%-!F8_n6lSN4kGG$%av)ub{KoS~j0+6ifY*ttg(2 ztxlq|4xhMPn=!IfWhY|+1dNkLW2p!l45uP(8ZLvJ$2Y&8i|al46~;j;N|J0loTl** z;q^t&EqN>y9TT*lUug%H*TM3EF%XB^82%1LBHbf*)6I4B(w zS=PjKJkijnPLB!cMs#rcI8QB4yu?-HmFBP`rYu*E*J26l^%W4O=CKa*SQDQQ%J1=K zj^i2XD3&8b-8P9lXEDr!iK5TXf-Ip?hUbAM3pfN{u|NiT9wgV;znbA*O38&n1&BQKq`fXK*7XdPgp zC4jJxIPjPHb<=lEA6W|gI@UI@)!WR=T`C&t!-7vfExhdGf}vfSHPQd7 zu$vaB)3hd^7Yw~7K6lnK{F@lvEPQHda zQ;Il`28j$`3N%U-fst2fcVKIp=ggH3Q@O4B@HBOi z$OVwVH(Q2Dre)7AZNP>iTvcy?^iC*3Z`C96E|Fgnd5;KfJ|OFT8h${80929Z2Oiyw zjt*X1^p4s$ICE%bVP16!`%8P6-#r>_zMc-oaUQ}Cev36)fOxVU2}pnnLhsMe&_xkpLaQl#sd*uxrg#@nOmMIqsJ8B&d)4|EhE_F*KGwo-ylOKY zwoA7%I6Z%Ly!;R96L1e{PC0=Rn!)J=9l;2rQ3t<0ubR(O)r|4EnX~H_&IncZtoCOs zZ97)Zcg`~y4z(-zRBg{{f3Z@wjha~Z3Z$%$P^WJ;H@!{Z`^X+S>e7N+(0>Q^?xmYD zpQ_a0U^*QSP{INVhcZcYcd8{-qTQ$qL_y`N=4EML(G!&o0N_R}P#gAYRsQ~z*zM0y zBE$ew`MFY=3hMJBH87wuhZt9NX>DzoP1C&es)|_Vr9)2sLfBEC_UU4w+4MK;*AyZS zV$Oq4a}%j;#F|5+d;BTl(et>&)Kx44?wmtYx>ez+$YFw?RD=E^Q}-7Y48c|D3?igx zdZDt80#-$8r}UIuM@1%;N#v!Cmo~}Q#Igx0^TwsS7ALgoDs~^x!uYTWPwz4++i4=N gkl*W{fp}Jv18z8!vHf>^<~95eedfD9bNn{@KNb_o`Tzg` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cec7e906613d45d7dc3adec19e3c07cc408caa4 GIT binary patch literal 1804 zcmZt`%WfMtkmNqJTCHTsb_}QOr3W8$h@C@DLC^=1x(yIGMjkCn2;Hogw6e~wv>~}} zVysRMdTYPIKIWGQ^wg6N{ed2m&QLbu0;R;+nc;9a?|Hu;6Ig%$^5?;C9YX#>;`;J| z_y)HA1AricmZYMbR*bXC<6h-+pCX@?K^5}Q;a=IPA|5&1FS}LD!>xL)_iZPcjJv26@kGjsTu+Q`VNE;A$FQyVzZv1fZvq@I_@Qr)?I z$Bw4bq&incZPHrF!{UwYsO34_?}9ct%jZJo44=PTh-0ko!`7<+1Z~L?flXU_=xq?N zm+hSlGEo(?yIVSS|1q=Otgh2CJCLP~E6`e|v#gSE5FBS^BdwRI>3gC^pz~Z zodu2`2;T&F=PWdxQ*us4aFcA1MfW5$QQL)^@lRyd^@-`e{hAW|{Y++G{z^pH#z!&i z-XR0|p6ImxQ3AW~=%h{B-YceFh^P&YiF&boQ$&~c1Z{LSXoGV~Nz2r0(G_vIQVkb< z=$~F2wf%df_0$6R3Ghb?=%v;J{s8!Rvx7IyY8#zW^zt4tYi;QA(BHHEyf)g7ptPZs zj-^Nsi_$<*U0_5{yqzt5fjK-0wloy#$;S1P&0j+8$gd?&OFHyh-6{5VC zH%dXfx=Vv=(F2)l_F$`D>x~Gh-*6#F+`Uv)hek zPFvIy|HJOF{|0}CB~F}r;K~6Bm1oapwGw#Z=l9`{_wjpaMxz+P`1ASi#cw`Be;DER z@IZJ1Q+@`7B8oX$;S^)TJKR~hsk`!052L4uy3~7xsK?w3H}$FiBbo$n;S`!+J)Sc) z+i;$Xxm>ey;^@)0b;&ofYU-1QG99mTAsHzuB};SW_Aow}A*VnXN-;&LLviZT@HLuY z`|cq1Ebr6cRh0U#k%!U%Jc#t2n}@!jtIEE%WpM)I8C$J+u2`b-d7@tAD#8e#m(CUHM#^n*JE9QrFU}EagEnlVcF@M{Uh9J% zbQf{vbmMMcc^7Emw=U?%?LJh;{na;Bf*g1!Z!x?l41roivx>7iU$IG`N4qeIQ3wZi zq+_|}l_F(RD^@EhO!~DiHxRdu2&rl?lF5PgB;zw3*un|zt7ge+?aelIDI#;vNaaf= z`+Ht0yD?u$9iHaGz(D)JEYEaA*(~31C3UboYifR;?)NLXF<_!SgADE2gRsx6Z?GN^ zQu16%Lf)Xi>n}ggev(Yc?1zn%dG=LPZdN9O>}jRG*%aB=m5}P;_o7*_Qe~&CKFz+X zicD6DJzVGIGM_V<(M4X*n`0BbsEXs;*%E^^7H>vLfm#}rh40wll=e0SbO zu32L%8Ls~V9Q}1~xV`^hC{A|?Eluus13D2I>{zTk2d2doAEC}^odvqYfD9Kn$8uha z7w*El^r-{Y2TU!3nR^%N50c>>;H~y9n!8sRc84u`gj95aE(a~X!hjI}M0?Fz$?dq0 z_fvUnf7`uV@;2HDlUNS`_JrpJk&BJC2Gp60vhIA7%cIM6d_j~V6wy;nmF#i7K&(5w- z$Y1y~J6!m=3sbKF5k%003}`?puARgguz*n_>7jc>g33c8m~dYa;Y!-~4p>l?mA)@3 z!h1yyXfP+L>!jfygCx?Rxo_lPm_$b6`f=8~pBlB-#lzX*z|UQn`b!{^1XPf~5mY#@ zNWcnpfm^5uDusf){=FE)DTr)kLUz%Ga^M>0J(&6ukO`eQ6ULasCL|;!`h! zbw>l48r^;vn;%A<_JdeybM1-B`m$@6O|o8dxR?837^krbL$pC-ye`r4h1n1^OO7su({kV%r;P;$MNshC zX^od|Ka{4t&oPE~tYZzT=77zv3o;MCs9(vU3Pb#}`rQxp7aU!*t{kVZ=)mrT^dYTA zM9mx8cMjPR*>}?OxVz6L3{y;B1iavXne;3B47vK=gbDhZ?mH9buqqtEjsQL51J~RE z{oPqcgh{`489PZ?Gj4mJ(n!Ta480MrgZx@PzMR_&rAVxZ8QIh1< zSc|v^>EOU!Z!1oWRKX%-0%ZHiQ0v#f0|BAw}E_;Bi0& z-685T1K0`Yi2eq(CfG7LtN@ai?XElBtt=Da?J)I~-L2y8i3C^OgnJY?eBiigIp!>f zSI7feTP9Qf`5jmN2s`t@zwnx^6Hza|jm78-NWU6~@gy6L5G@|@vZ6RtcpP;S$#-M3 z&CNC(V##r+GQO25yVHxISb0}Lp#pQWW`#Y~P_MUc6+bBb*DJgyO=z!&c>S4eA{#u? z{ModTY@o~#Q-D94rbY-yAu6}qA!ObLzp`J5z5gj;`v+B@-abCY+Yly?w|?MR7hUC3y`p@?Kp zDr@vrYsaIt2A{%!iOjRDS@fn_-lOFkSYbs$^WE)COa5q$?`0#t8>OacPmeM4 z$JbX*;kUxIfn>2QoGbZ!6f5vs_WTPw#5R3Bpjw-nMwHTP{C;i<|i zdYC|`V~I=^ni!n>dHP(h?*WJ}?<3n&MPL{k!kMPk3Q2{@`Y2O z{T%M=8$fF3>eQtUb>G$5*>8E`Fpqk4iF$8g^;TVlYpq5t_llRYu<~;8(?mbu*=*Ws zXhJ8HiJrD}cxqLo;N4WR7i*~G+{G?x-N+fdtXA@j-L^v(Pu=aJr`|!lH8#>ZsZ-xs JV(x`S`Y%UIe@*}Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_list.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_list.py new file mode 100644 index 000000000..5865843dc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_list.py @@ -0,0 +1,533 @@ +import datetime + +from django.conf import settings +from django.contrib.admin.templatetags.admin_urls import add_preserved_filters +from django.contrib.admin.utils import ( + display_for_field, + display_for_value, + get_fields_from_path, + label_for_field, + lookup_field, +) +from django.contrib.admin.views.main import ( + ALL_VAR, + IS_POPUP_VAR, + ORDER_VAR, + PAGE_VAR, + SEARCH_VAR, +) +from django.core.exceptions import ObjectDoesNotExist +from django.db import models +from django.template import Library +from django.template.loader import get_template +from django.templatetags.static import static +from django.urls import NoReverseMatch +from django.utils import formats, timezone +from django.utils.html import format_html +from django.utils.safestring import mark_safe +from django.utils.text import capfirst +from django.utils.translation import gettext as _ + +from .base import InclusionAdminNode + +register = Library() + + +@register.simple_tag +def paginator_number(cl, i): + """ + Generate an individual page index link in a paginated list. + """ + if i == cl.paginator.ELLIPSIS: + return format_html("{} ", cl.paginator.ELLIPSIS) + elif i == cl.page_num: + return format_html('{} ', i) + else: + return format_html( + '{} ', + cl.get_query_string({PAGE_VAR: i}), + mark_safe(' class="end"' if i == cl.paginator.num_pages else ""), + i, + ) + + +def pagination(cl): + """ + Generate the series of links to the pages in a paginated list. + """ + pagination_required = (not cl.show_all or not cl.can_show_all) and cl.multi_page + page_range = ( + cl.paginator.get_elided_page_range(cl.page_num) if pagination_required else [] + ) + need_show_all_link = cl.can_show_all and not cl.show_all and cl.multi_page + return { + "cl": cl, + "pagination_required": pagination_required, + "show_all_url": need_show_all_link and cl.get_query_string({ALL_VAR: ""}), + "page_range": page_range, + "ALL_VAR": ALL_VAR, + "1": 1, + } + + +@register.tag(name="pagination") +def pagination_tag(parser, token): + return InclusionAdminNode( + parser, + token, + func=pagination, + template_name="pagination.html", + takes_context=False, + ) + + +def result_headers(cl): + """ + Generate the list column headers. + """ + ordering_field_columns = cl.get_ordering_field_columns() + for i, field_name in enumerate(cl.list_display): + text, attr = label_for_field( + field_name, cl.model, model_admin=cl.model_admin, return_attr=True + ) + is_field_sortable = cl.sortable_by is None or field_name in cl.sortable_by + if attr: + field_name = _coerce_field_name(field_name, i) + # Potentially not sortable + + # if the field is the action checkbox: no sorting and special class + if field_name == "action_checkbox": + yield { + "text": text, + "class_attrib": mark_safe(' class="action-checkbox-column"'), + "sortable": False, + } + continue + + admin_order_field = getattr(attr, "admin_order_field", None) + # Set ordering for attr that is a property, if defined. + if isinstance(attr, property) and hasattr(attr, "fget"): + admin_order_field = getattr(attr.fget, "admin_order_field", None) + if not admin_order_field: + is_field_sortable = False + + if not is_field_sortable: + # Not sortable + yield { + "text": text, + "class_attrib": format_html(' class="column-{}"', field_name), + "sortable": False, + } + continue + + # OK, it is sortable if we got this far + th_classes = ["sortable", "column-{}".format(field_name)] + order_type = "" + new_order_type = "asc" + sort_priority = 0 + # Is it currently being sorted on? + is_sorted = i in ordering_field_columns + if is_sorted: + order_type = ordering_field_columns.get(i).lower() + sort_priority = list(ordering_field_columns).index(i) + 1 + th_classes.append("sorted %sending" % order_type) + new_order_type = {"asc": "desc", "desc": "asc"}[order_type] + + # build new ordering param + o_list_primary = [] # URL for making this field the primary sort + o_list_remove = [] # URL for removing this field from sort + o_list_toggle = [] # URL for toggling order type for this field + + def make_qs_param(t, n): + return ("-" if t == "desc" else "") + str(n) + + for j, ot in ordering_field_columns.items(): + if j == i: # Same column + param = make_qs_param(new_order_type, j) + # We want clicking on this header to bring the ordering to the + # front + o_list_primary.insert(0, param) + o_list_toggle.append(param) + # o_list_remove - omit + else: + param = make_qs_param(ot, j) + o_list_primary.append(param) + o_list_toggle.append(param) + o_list_remove.append(param) + + if i not in ordering_field_columns: + o_list_primary.insert(0, make_qs_param(new_order_type, i)) + + yield { + "text": text, + "sortable": True, + "sorted": is_sorted, + "ascending": order_type == "asc", + "sort_priority": sort_priority, + "url_primary": cl.get_query_string({ORDER_VAR: ".".join(o_list_primary)}), + "url_remove": cl.get_query_string({ORDER_VAR: ".".join(o_list_remove)}), + "url_toggle": cl.get_query_string({ORDER_VAR: ".".join(o_list_toggle)}), + "class_attrib": format_html(' class="{}"', " ".join(th_classes)) + if th_classes + else "", + } + + +def _boolean_icon(field_val): + icon_url = static( + "admin/img/icon-%s.svg" % {True: "yes", False: "no", None: "unknown"}[field_val] + ) + return format_html('{}', icon_url, field_val) + + +def _coerce_field_name(field_name, field_index): + """ + Coerce a field_name (which may be a callable) to a string. + """ + if callable(field_name): + if field_name.__name__ == "": + return "lambda" + str(field_index) + else: + return field_name.__name__ + return field_name + + +def items_for_result(cl, result, form): + """ + Generate the actual list of data. + """ + + def link_in_col(is_first, field_name, cl): + if cl.list_display_links is None: + return False + if is_first and not cl.list_display_links: + return True + return field_name in cl.list_display_links + + first = True + pk = cl.lookup_opts.pk.attname + for field_index, field_name in enumerate(cl.list_display): + empty_value_display = cl.model_admin.get_empty_value_display() + row_classes = ["field-%s" % _coerce_field_name(field_name, field_index)] + try: + f, attr, value = lookup_field(field_name, result, cl.model_admin) + except ObjectDoesNotExist: + result_repr = empty_value_display + else: + empty_value_display = getattr( + attr, "empty_value_display", empty_value_display + ) + if f is None or f.auto_created: + if field_name == "action_checkbox": + row_classes = ["action-checkbox"] + boolean = getattr(attr, "boolean", False) + result_repr = display_for_value(value, empty_value_display, boolean) + if isinstance(value, (datetime.date, datetime.time)): + row_classes.append("nowrap") + else: + if isinstance(f.remote_field, models.ManyToOneRel): + field_val = getattr(result, f.name) + if field_val is None: + result_repr = empty_value_display + else: + result_repr = field_val + else: + result_repr = display_for_field(value, f, empty_value_display) + if isinstance( + f, (models.DateField, models.TimeField, models.ForeignKey) + ): + row_classes.append("nowrap") + row_class = mark_safe(' class="%s"' % " ".join(row_classes)) + # If list_display_links not defined, add the link tag to the first field + if link_in_col(first, field_name, cl): + table_tag = "th" if first else "td" + first = False + + # Display link to the result's change_view if the url exists, else + # display just the result's representation. + try: + url = cl.url_for_result(result) + except NoReverseMatch: + link_or_text = result_repr + else: + url = add_preserved_filters( + {"preserved_filters": cl.preserved_filters, "opts": cl.opts}, url + ) + # Convert the pk to something that can be used in JavaScript. + # Problem cases are non-ASCII strings. + if cl.to_field: + attr = str(cl.to_field) + else: + attr = pk + value = result.serializable_value(attr) + link_or_text = format_html( + '{}', + url, + format_html(' data-popup-opener="{}"', value) + if cl.is_popup + else "", + result_repr, + ) + + yield format_html( + "<{}{}>{}", table_tag, row_class, link_or_text, table_tag + ) + else: + # By default the fields come from ModelAdmin.list_editable, but if we pull + # the fields out of the form instead of list_editable custom admins + # can provide fields on a per request basis + if ( + form + and field_name in form.fields + and not ( + field_name == cl.model._meta.pk.name + and form[cl.model._meta.pk.name].is_hidden + ) + ): + bf = form[field_name] + result_repr = mark_safe(str(bf.errors) + str(bf)) + yield format_html("{}", row_class, result_repr) + if form and not form[cl.model._meta.pk.name].is_hidden: + yield format_html("{}", form[cl.model._meta.pk.name]) + + +class ResultList(list): + """ + Wrapper class used to return items in a list_editable changelist, annotated + with the form object for error reporting purposes. Needed to maintain + backwards compatibility with existing admin templates. + """ + + def __init__(self, form, *items): + self.form = form + super().__init__(*items) + + +def results(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + yield ResultList(form, items_for_result(cl, res, form)) + else: + for res in cl.result_list: + yield ResultList(None, items_for_result(cl, res, None)) + + +def result_hidden_fields(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + if form[cl.model._meta.pk.name].is_hidden: + yield mark_safe(form[cl.model._meta.pk.name]) + + +def result_list(cl): + """ + Display the headers and data list together. + """ + headers = list(result_headers(cl)) + num_sorted_fields = 0 + for h in headers: + if h["sortable"] and h["sorted"]: + num_sorted_fields += 1 + return { + "cl": cl, + "result_hidden_fields": list(result_hidden_fields(cl)), + "result_headers": headers, + "num_sorted_fields": num_sorted_fields, + "results": list(results(cl)), + } + + +@register.tag(name="result_list") +def result_list_tag(parser, token): + return InclusionAdminNode( + parser, + token, + func=result_list, + template_name="change_list_results.html", + takes_context=False, + ) + + +def date_hierarchy(cl): + """ + Display the date hierarchy for date drill-down functionality. + """ + if cl.date_hierarchy: + field_name = cl.date_hierarchy + field = get_fields_from_path(cl.model, field_name)[-1] + if isinstance(field, models.DateTimeField): + dates_or_datetimes = "datetimes" + qs_kwargs = {"is_dst": True} if settings.USE_DEPRECATED_PYTZ else {} + else: + dates_or_datetimes = "dates" + qs_kwargs = {} + year_field = "%s__year" % field_name + month_field = "%s__month" % field_name + day_field = "%s__day" % field_name + field_generic = "%s__" % field_name + year_lookup = cl.params.get(year_field) + month_lookup = cl.params.get(month_field) + day_lookup = cl.params.get(day_field) + + def link(filters): + return cl.get_query_string(filters, [field_generic]) + + if not (year_lookup or month_lookup or day_lookup): + # select appropriate start level + date_range = cl.queryset.aggregate( + first=models.Min(field_name), last=models.Max(field_name) + ) + if date_range["first"] and date_range["last"]: + if dates_or_datetimes == "datetimes": + date_range = { + k: timezone.localtime(v) if timezone.is_aware(v) else v + for k, v in date_range.items() + } + if date_range["first"].year == date_range["last"].year: + year_lookup = date_range["first"].year + if date_range["first"].month == date_range["last"].month: + month_lookup = date_range["first"].month + + if year_lookup and month_lookup and day_lookup: + day = datetime.date(int(year_lookup), int(month_lookup), int(day_lookup)) + return { + "show": True, + "back": { + "link": link({year_field: year_lookup, month_field: month_lookup}), + "title": capfirst(formats.date_format(day, "YEAR_MONTH_FORMAT")), + }, + "choices": [ + {"title": capfirst(formats.date_format(day, "MONTH_DAY_FORMAT"))} + ], + } + elif year_lookup and month_lookup: + days = getattr(cl.queryset, dates_or_datetimes)( + field_name, "day", **qs_kwargs + ) + return { + "show": True, + "back": { + "link": link({year_field: year_lookup}), + "title": str(year_lookup), + }, + "choices": [ + { + "link": link( + { + year_field: year_lookup, + month_field: month_lookup, + day_field: day.day, + } + ), + "title": capfirst(formats.date_format(day, "MONTH_DAY_FORMAT")), + } + for day in days + ], + } + elif year_lookup: + months = getattr(cl.queryset, dates_or_datetimes)( + field_name, "month", **qs_kwargs + ) + return { + "show": True, + "back": {"link": link({}), "title": _("All dates")}, + "choices": [ + { + "link": link( + {year_field: year_lookup, month_field: month.month} + ), + "title": capfirst( + formats.date_format(month, "YEAR_MONTH_FORMAT") + ), + } + for month in months + ], + } + else: + years = getattr(cl.queryset, dates_or_datetimes)( + field_name, "year", **qs_kwargs + ) + return { + "show": True, + "back": None, + "choices": [ + { + "link": link({year_field: str(year.year)}), + "title": str(year.year), + } + for year in years + ], + } + + +@register.tag(name="date_hierarchy") +def date_hierarchy_tag(parser, token): + return InclusionAdminNode( + parser, + token, + func=date_hierarchy, + template_name="date_hierarchy.html", + takes_context=False, + ) + + +def search_form(cl): + """ + Display a search form for searching the list. + """ + return { + "cl": cl, + "show_result_count": cl.result_count != cl.full_result_count, + "search_var": SEARCH_VAR, + "is_popup_var": IS_POPUP_VAR, + } + + +@register.tag(name="search_form") +def search_form_tag(parser, token): + return InclusionAdminNode( + parser, + token, + func=search_form, + template_name="search_form.html", + takes_context=False, + ) + + +@register.simple_tag +def admin_list_filter(cl, spec): + tpl = get_template(spec.template) + return tpl.render( + { + "title": spec.title, + "choices": list(spec.choices(cl)), + "spec": spec, + } + ) + + +def admin_actions(context): + """ + Track the number of times the action field has been rendered on the page, + so we know which value to use. + """ + context["action_index"] = context.get("action_index", -1) + 1 + return context + + +@register.tag(name="admin_actions") +def admin_actions_tag(parser, token): + return InclusionAdminNode( + parser, token, func=admin_actions, template_name="actions.html" + ) + + +@register.tag(name="change_list_object_tools") +def change_list_object_tools_tag(parser, token): + """Display the row of change list object tools.""" + return InclusionAdminNode( + parser, + token, + func=lambda context: context, + template_name="change_list_object_tools.html", + ) diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_modify.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_modify.py new file mode 100644 index 000000000..9df4b7aad --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_modify.py @@ -0,0 +1,150 @@ +import json + +from django import template +from django.template.context import Context + +from .base import InclusionAdminNode + +register = template.Library() + + +def prepopulated_fields_js(context): + """ + Create a list of prepopulated_fields that should render JavaScript for + the prepopulated fields for both the admin form and inlines. + """ + prepopulated_fields = [] + if "adminform" in context: + prepopulated_fields.extend(context["adminform"].prepopulated_fields) + if "inline_admin_formsets" in context: + for inline_admin_formset in context["inline_admin_formsets"]: + for inline_admin_form in inline_admin_formset: + if inline_admin_form.original is None: + prepopulated_fields.extend(inline_admin_form.prepopulated_fields) + + prepopulated_fields_json = [] + for field in prepopulated_fields: + prepopulated_fields_json.append( + { + "id": "#%s" % field["field"].auto_id, + "name": field["field"].name, + "dependency_ids": [ + "#%s" % dependency.auto_id for dependency in field["dependencies"] + ], + "dependency_list": [ + dependency.name for dependency in field["dependencies"] + ], + "maxLength": field["field"].field.max_length or 50, + "allowUnicode": getattr(field["field"].field, "allow_unicode", False), + } + ) + + context.update( + { + "prepopulated_fields": prepopulated_fields, + "prepopulated_fields_json": json.dumps(prepopulated_fields_json), + } + ) + return context + + +@register.tag(name="prepopulated_fields_js") +def prepopulated_fields_js_tag(parser, token): + return InclusionAdminNode( + parser, + token, + func=prepopulated_fields_js, + template_name="prepopulated_fields_js.html", + ) + + +def submit_row(context): + """ + Display the row of buttons for delete and save. + """ + add = context["add"] + change = context["change"] + is_popup = context["is_popup"] + save_as = context["save_as"] + show_save = context.get("show_save", True) + show_save_and_add_another = context.get("show_save_and_add_another", True) + show_save_and_continue = context.get("show_save_and_continue", True) + has_add_permission = context["has_add_permission"] + has_change_permission = context["has_change_permission"] + has_view_permission = context["has_view_permission"] + has_editable_inline_admin_formsets = context["has_editable_inline_admin_formsets"] + can_save = ( + (has_change_permission and change) + or (has_add_permission and add) + or has_editable_inline_admin_formsets + ) + can_save_and_add_another = ( + has_add_permission + and not is_popup + and (not save_as or add) + and can_save + and show_save_and_add_another + ) + can_save_and_continue = ( + not is_popup and can_save and has_view_permission and show_save_and_continue + ) + can_change = has_change_permission or has_editable_inline_admin_formsets + ctx = Context(context) + ctx.update( + { + "can_change": can_change, + "show_delete_link": ( + not is_popup + and context["has_delete_permission"] + and change + and context.get("show_delete", True) + ), + "show_save_as_new": not is_popup + and has_change_permission + and change + and save_as, + "show_save_and_add_another": can_save_and_add_another, + "show_save_and_continue": can_save_and_continue, + "show_save": show_save and can_save, + "show_close": not (show_save and can_save), + } + ) + return ctx + + +@register.tag(name="submit_row") +def submit_row_tag(parser, token): + return InclusionAdminNode( + parser, token, func=submit_row, template_name="submit_line.html" + ) + + +@register.tag(name="change_form_object_tools") +def change_form_object_tools_tag(parser, token): + """Display the row of change form object tools.""" + return InclusionAdminNode( + parser, + token, + func=lambda context: context, + template_name="change_form_object_tools.html", + ) + + +@register.filter +def cell_count(inline_admin_form): + """Return the number of cells used in a tabular inline.""" + count = 1 # Hidden cell with hidden 'id' field + for fieldset in inline_admin_form: + # Count all visible fields. + for line in fieldset: + for field in line: + try: + is_hidden = field.field.is_hidden + except AttributeError: + is_hidden = field.field["is_hidden"] + if not is_hidden: + count += 1 + if inline_admin_form.formset.can_delete: + # Delete checkbox + count += 1 + return count diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_urls.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_urls.py new file mode 100644 index 000000000..13ded0336 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templatetags/admin_urls.py @@ -0,0 +1,66 @@ +from urllib.parse import parse_qsl, unquote, urlparse, urlunparse + +from django import template +from django.contrib.admin.utils import quote +from django.urls import Resolver404, get_script_prefix, resolve +from django.utils.http import urlencode + +register = template.Library() + + +@register.filter +def admin_urlname(value, arg): + return "admin:%s_%s_%s" % (value.app_label, value.model_name, arg) + + +@register.filter +def admin_urlquote(value): + return quote(value) + + +@register.simple_tag(takes_context=True) +def add_preserved_filters(context, url, popup=False, to_field=None): + opts = context.get("opts") + preserved_filters = context.get("preserved_filters") + + parsed_url = list(urlparse(url)) + parsed_qs = dict(parse_qsl(parsed_url[4])) + merged_qs = {} + + if opts and preserved_filters: + preserved_filters = dict(parse_qsl(preserved_filters)) + + match_url = "/%s" % unquote(url).partition(get_script_prefix())[2] + try: + match = resolve(match_url) + except Resolver404: + pass + else: + current_url = "%s:%s" % (match.app_name, match.url_name) + changelist_url = "admin:%s_%s_changelist" % ( + opts.app_label, + opts.model_name, + ) + if ( + changelist_url == current_url + and "_changelist_filters" in preserved_filters + ): + preserved_filters = dict( + parse_qsl(preserved_filters["_changelist_filters"]) + ) + + merged_qs.update(preserved_filters) + + if popup: + from django.contrib.admin.options import IS_POPUP_VAR + + merged_qs[IS_POPUP_VAR] = 1 + if to_field: + from django.contrib.admin.options import TO_FIELD_VAR + + merged_qs[TO_FIELD_VAR] = to_field + + merged_qs.update(parsed_qs) + + parsed_url[4] = urlencode(merged_qs) + return urlunparse(parsed_url) diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/base.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/base.py new file mode 100644 index 000000000..23e4cfbe8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templatetags/base.py @@ -0,0 +1,45 @@ +from inspect import getfullargspec + +from django.template.library import InclusionNode, parse_bits + + +class InclusionAdminNode(InclusionNode): + """ + Template tag that allows its template to be overridden per model, per app, + or globally. + """ + + def __init__(self, parser, token, func, template_name, takes_context=True): + self.template_name = template_name + params, varargs, varkw, defaults, kwonly, kwonly_defaults, _ = getfullargspec( + func + ) + bits = token.split_contents() + args, kwargs = parse_bits( + parser, + bits[1:], + params, + varargs, + varkw, + defaults, + kwonly, + kwonly_defaults, + takes_context, + bits[0], + ) + super().__init__(func, takes_context, args, kwargs, filename=None) + + def render(self, context): + opts = context["opts"] + app_label = opts.app_label.lower() + object_name = opts.object_name.lower() + # Load template for this render call. (Setting self.filename isn't + # thread-safe.) + context.render_context[self] = context.template.engine.select_template( + [ + "admin/%s/%s/%s" % (app_label, object_name, self.template_name), + "admin/%s/%s" % (app_label, self.template_name), + "admin/%s" % self.template_name, + ] + ) + return super().render(context) diff --git a/venv/Lib/site-packages/django/contrib/admin/templatetags/log.py b/venv/Lib/site-packages/django/contrib/admin/templatetags/log.py new file mode 100644 index 000000000..098aa640d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/templatetags/log.py @@ -0,0 +1,69 @@ +from django import template +from django.contrib.admin.models import LogEntry + +register = template.Library() + + +class AdminLogNode(template.Node): + def __init__(self, limit, varname, user): + self.limit, self.varname, self.user = limit, varname, user + + def __repr__(self): + return "" + + def render(self, context): + if self.user is None: + entries = LogEntry.objects.all() + else: + user_id = self.user + if not user_id.isdigit(): + user_id = context[self.user].pk + entries = LogEntry.objects.filter(user__pk=user_id) + context[self.varname] = entries.select_related("content_type", "user")[ + : int(self.limit) + ] + return "" + + +@register.tag +def get_admin_log(parser, token): + """ + Populate a template variable with the admin log for the given criteria. + + Usage:: + + {% get_admin_log [limit] as [varname] for_user [context_var_with_user_obj] %} + + Examples:: + + {% get_admin_log 10 as admin_log for_user 23 %} + {% get_admin_log 10 as admin_log for_user user %} + {% get_admin_log 10 as admin_log %} + + Note that ``context_var_containing_user_obj`` can be a hard-coded integer + (user ID) or the name of a template context variable containing the user + object whose ID you want. + """ + tokens = token.contents.split() + if len(tokens) < 4: + raise template.TemplateSyntaxError( + "'get_admin_log' statements require two arguments" + ) + if not tokens[1].isdigit(): + raise template.TemplateSyntaxError( + "First argument to 'get_admin_log' must be an integer" + ) + if tokens[2] != "as": + raise template.TemplateSyntaxError( + "Second argument to 'get_admin_log' must be 'as'" + ) + if len(tokens) > 4: + if tokens[4] != "for_user": + raise template.TemplateSyntaxError( + "Fourth argument to 'get_admin_log' must be 'for_user'" + ) + return AdminLogNode( + limit=tokens[1], + varname=tokens[3], + user=(tokens[5] if len(tokens) > 5 else None), + ) diff --git a/venv/Lib/site-packages/django/contrib/admin/tests.py b/venv/Lib/site-packages/django/contrib/admin/tests.py new file mode 100644 index 000000000..e3def6ec5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/tests.py @@ -0,0 +1,209 @@ +from contextlib import contextmanager + +from django.contrib.staticfiles.testing import StaticLiveServerTestCase +from django.test import modify_settings +from django.test.selenium import SeleniumTestCase +from django.utils.deprecation import MiddlewareMixin +from django.utils.translation import gettext as _ + + +class CSPMiddleware(MiddlewareMixin): + """The admin's JavaScript should be compatible with CSP.""" + + def process_response(self, request, response): + response.headers["Content-Security-Policy"] = "default-src 'self'" + return response + + +@modify_settings(MIDDLEWARE={"append": "django.contrib.admin.tests.CSPMiddleware"}) +class AdminSeleniumTestCase(SeleniumTestCase, StaticLiveServerTestCase): + + available_apps = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.sites", + ] + + def wait_until(self, callback, timeout=10): + """ + Block the execution of the tests until the specified callback returns a + value that is not falsy. This method can be called, for example, after + clicking a link or submitting a form. See the other public methods that + call this function for more details. + """ + from selenium.webdriver.support.wait import WebDriverWait + + WebDriverWait(self.selenium, timeout).until(callback) + + def wait_for_and_switch_to_popup(self, num_windows=2, timeout=10): + """ + Block until `num_windows` are present and are ready (usually 2, but can + be overridden in the case of pop-ups opening other pop-ups). Switch the + current window to the new pop-up. + """ + self.wait_until(lambda d: len(d.window_handles) == num_windows, timeout) + self.selenium.switch_to.window(self.selenium.window_handles[-1]) + self.wait_page_ready() + + def wait_for(self, css_selector, timeout=10): + """ + Block until a CSS selector is found on the page. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + + self.wait_until( + ec.presence_of_element_located((By.CSS_SELECTOR, css_selector)), timeout + ) + + def wait_for_text(self, css_selector, text, timeout=10): + """ + Block until the text is found in the CSS selector. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + + self.wait_until( + ec.text_to_be_present_in_element((By.CSS_SELECTOR, css_selector), text), + timeout, + ) + + def wait_for_value(self, css_selector, text, timeout=10): + """ + Block until the value is found in the CSS selector. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + + self.wait_until( + ec.text_to_be_present_in_element_value( + (By.CSS_SELECTOR, css_selector), text + ), + timeout, + ) + + def wait_until_visible(self, css_selector, timeout=10): + """ + Block until the element described by the CSS selector is visible. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + + self.wait_until( + ec.visibility_of_element_located((By.CSS_SELECTOR, css_selector)), timeout + ) + + def wait_until_invisible(self, css_selector, timeout=10): + """ + Block until the element described by the CSS selector is invisible. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + + self.wait_until( + ec.invisibility_of_element_located((By.CSS_SELECTOR, css_selector)), timeout + ) + + def wait_page_ready(self, timeout=10): + """ + Block until the page is ready. + """ + self.wait_until( + lambda driver: driver.execute_script("return document.readyState;") + == "complete", + timeout, + ) + + @contextmanager + def wait_page_loaded(self, timeout=10): + """ + Block until a new page has loaded and is ready. + """ + from selenium.webdriver.support import expected_conditions as ec + + old_page = self.selenium.find_element_by_tag_name("html") + yield + # Wait for the next page to be loaded + self.wait_until(ec.staleness_of(old_page), timeout=timeout) + self.wait_page_ready(timeout=timeout) + + def admin_login(self, username, password, login_url="/admin/"): + """ + Log in to the admin. + """ + self.selenium.get("%s%s" % (self.live_server_url, login_url)) + username_input = self.selenium.find_element_by_name("username") + username_input.send_keys(username) + password_input = self.selenium.find_element_by_name("password") + password_input.send_keys(password) + login_text = _("Log in") + with self.wait_page_loaded(): + self.selenium.find_element_by_xpath( + '//input[@value="%s"]' % login_text + ).click() + + def select_option(self, selector, value): + """ + Select the

      W;ez{Q;)P2jgdF42&8p}^> zzFBn9Zkl z^ya589Uf`=t?i@Hr86qt*l*IW+?i^js*o>UI=9f2Y(bF*oAjb2rtYTgWdWNSyL+bQ z%&M+ui`QA%_p@g3ZAlzHoKM#Fi$ZTHOTD21Q@YFa^hcOSer$aD*C}!qdUtpHkOJDa z4F6iczyGVziv^9$&4q5bTyFh95cjU2{Z*^G&Zotl(nH-;-sEkikCay9QAFNGo_`o>V(9LcXS7t-E72!<~*37*eUmBjdx+`5xP9kyO?8&p=`u+WnA=W$Yo;~S|SpDe%#82bQ z(NQOP1ofxV13WXD?v_t{uBL|&JuEj_9gQo=Db_x%wKM;n`oai|Kv_u?Dq!<*4;`?M2b>Ux^!xCX(qx+3Nr0+=2W$$yXE! z;;ZBkV<-7eas+2&>yzB%ig=|D5X_V5K7~^Lttqn`lb(`>gLa-CPbm5|<>QRakM!+R z5S`>Pglq;7>&w7^L8V;vNwUs)R9LDRSadl3Jk+tP9fWw#C~Zo9@6BOxOsU*Ws$o53 zNRG-yZkUwit}kRrpQ@UICd7m?G0BsxV_A`Y9)Y8VQDSKdHnaHYOy~p_NIhXmo`sHt z7>ewZlc*}0V8>U{(X*DSkxr{xvJ}eYS?T2UWU0PF&Ey4^X-ppyzi|#{^Xig4=}J}9 zB|=QwOLnXo*4NxRLcoI55w(aphbRsvo>cO_i9*Z$$C*fBIkb@yLGUA6Rel{Kj{DI- zEv_$Fe+pexO}6Y2tg!1VkiMq$PW5 zc}Py+Gqx*BHYg|bm}x$qg&{B1{x~S`3CXR&akC9%yl2vekG-A?#~?C7VizvXZHNb{{a65-$(;I+C?4J(NciKZ~-;LP`-R z&e}#E68~%wDyF=qd600*)H>elmv*zGK+3?wle)hR)qr@>y@jFr$vo(v%CU$%Iu)hvT?II>o~W8IqHf@Hty4uc4_3 zClZQBYJ^2Id(mHyc855}ik_;6>BxJDjs9_?-<(eJJuM(}&QM|x!ezFOqG|TKXa;`X zvHLt>n-S}&XiMA10O`t`T;|+B?D~6L|FZu^?b_v;t~klJRk-S70}FjmBqT$$=`ykV zh6mhKi0mYFYc=GOaJotm&Rc3(BO{r%U26Y2-p6>AosMDl6lKo_>T3j3$Fu`vMgA!r z*-zmY`x#8{IVejrr5SmiM2~I%$9U5_jL;m5#?R~h^f=ql^P<6|;$#RF*e9$;Ym?=0 zSr=Nxi@PYjAq2QLMYus3*9YJWn%n7vij)k zS%*V%%?d4T=x|HNB+lo;EQM90_OhCs$qsAz4?24ovuqQ0&;0@PFw&OuxqP|%^u17r z85q!MOh#MtMF3kq)*F0+lmmyTwWsSyrKWK1jNboFv<4Nxzeo_}{Fxl4zm>LDo^e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..0da3c326c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,284 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2014-2015 +# znotdead , 2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:29+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Адміністратыўная дакументацыя" + +msgid "Home" +msgstr "Пачатак" + +msgid "Documentation" +msgstr "Дакумэнтацыя" + +msgid "Bookmarklets" +msgstr "Закладкі" + +msgid "Documentation bookmarklets" +msgstr "Закладкі дакумэнтацыі" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Каб паставіць закладку, перацягніце спасылку на паліцу закладак або " +"пстрыкніце па спасылцы праваю кнопкаю і дадайце яе да закладак. Цяпер можна " +"абраць закладку з якой пажадаеце бачыны." + +msgid "Documentation for this page" +msgstr "Дакумэнтацыя па бачыне" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Накіроўвае з хоць-якое бачыны да прагляду, які стварае гэтую бачыну." + +msgid "Tags" +msgstr "Цэтлікі" + +msgid "List of all the template tags and their functions." +msgstr "Спіс усіх тэгаў шаблонаў і іх функцый." + +msgid "Filters" +msgstr "Сіты" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Фільтры гэта дзеянні, якія могуць быць выкананы над пераменнымі ў шаблоне " +"каб змяніць вынік." + +msgid "Models" +msgstr "Мадэлі" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Мадэлі - гэта апісанне ўсіх аб'ектаў у сістэме і іх асацыіраваныя палі. " +"Кожная мадэль мае спіс палёў, якія могуць быць даступны як пераменная шаблону" + +msgid "Views" +msgstr "Прагляды" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Кожная бачына сайту генерыруеца праглядам. Прагляд вызначае які шаблон " +"выкарыстоўваць для генерацыі бачыны і якія аб'екты даступны для гэтага " +"шаблону." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Інструмент для вашага браўзэра для хуткага доступу да кіраўнічай " +"функцыянальнасці. " + +msgid "Please install docutils" +msgstr "Калі ласка, усталюйце Docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Дакументацыя кіраўнічай сістэмы патрабуе бібліятэку Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Калі ласка, спытайцу вашых адміністратараў усталяваць docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Мадэль: %(name)s" + +msgid "Fields" +msgstr "Палі" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тып" + +msgid "Description" +msgstr "Апісаньне" + +msgid "Methods with arguments" +msgstr "Метад з аргументамі" + +msgid "Method" +msgstr "Метад" + +msgid "Arguments" +msgstr "Аргументы" + +msgid "Back to Model documentation" +msgstr "Вярнуцца да дакументацыі мадэлі" + +msgid "Model documentation" +msgstr "Дакументацыя мадэлі" + +msgid "Model groups" +msgstr "Групы мадэлі" + +msgid "Templates" +msgstr "Шаблёны" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Шлях пошуку для шаблону %(name)s:" + +msgid "(does not exist)" +msgstr "(не існуе)" + +msgid "Back to Documentation" +msgstr "Вярнуцца да дакументацыі" + +msgid "Template filters" +msgstr "Фільтры шаблону" + +msgid "Template filter documentation" +msgstr "Дакументацыя фільтраў шаблону" + +msgid "Built-in filters" +msgstr "Убудаваныя фільтры" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Каб карыстаць гэтыя фільтры, трэба памясціць %(code)s у ваш " +"шаблон перад тым як карыстаць гэты фільтр." + +msgid "Template tags" +msgstr "Тэгі шаблону" + +msgid "Template tag documentation" +msgstr "Дакументацыя тэгаў шаблону" + +msgid "Built-in tags" +msgstr "Убудаваныя тэгі" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Каб карыстаць гэтыя тэгі, трэба памясціць %(code)s у ваш " +"шаблон перад тым як карыстаць гэты тэг." + +#, python-format +msgid "View: %(name)s" +msgstr "Прагляд: %(name)s" + +msgid "Context:" +msgstr "Кантэкст:" + +msgid "Templates:" +msgstr "Шаблоны:" + +msgid "Back to View documentation" +msgstr "Вярнуцца да дакументацыі прагляду" + +msgid "View documentation" +msgstr "Паглядзець дакументацыю" + +msgid "Jump to namespace" +msgstr "Перайсці да прасторы імёнаў" + +msgid "Empty namespace" +msgstr "Ачысціць прастору імёнаў" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Прагляды ў просторы імёнаў %(name)s" + +msgid "Views by empty namespace" +msgstr "Прагляды ў пустым просторы імёнаў" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Функцыя прагляду: %(full_name)s. Імя: %(url_name)s.\n" + +msgid "tag:" +msgstr "цэтлік:" + +msgid "filter:" +msgstr "сіта:" + +msgid "view:" +msgstr "прагляд:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Праграму %(app_label)r не знайшлі" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Мадэль %(model_name)r у праґраме «%(app_label)r» не знайшлі" + +msgid "model:" +msgstr "мадэль:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "залежны аб’ект «%(app_label)s.%(data_type)s»" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "залежныя аб’екты «%(app_label)s.%(object_name)s»" + +#, python-format +msgid "all %s" +msgstr "усе %s" + +#, python-format +msgid "number of %s" +msgstr "колькасьць %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не падобны да аб’екта «шаблён спасылкі» — «urlpattern»" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..035677857484d82c441d13d3cdb220f641c0f8c6 GIT binary patch literal 8236 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 Uq+@oKoXUT2s!|NO8N}NB2gLAxTL1t6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..124d84372 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# arneatec , 2022 +# Boris Chervenkov , 2012 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2011,2015 +# Venelin Stoykov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2022-01-14 10:04+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Административна документация" + +msgid "Home" +msgstr "Начало" + +msgid "Documentation" +msgstr "Документация" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet-и за документация" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"За да инсталирате bookmarklet-и, задърпайте линка в лентата с отметки " +"(bookmarks toolbar), или щракнете с десния бутон и добавете линка в " +"отметките. Сега можете да изберете bookmarklet-а от която и да е страница на " +"сайта." + +msgid "Documentation for this page" +msgstr "Документация за тази страница" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Препраща Ви от която и да е страница към документацията за изгледа, който я " +"е генерирал." + +msgid "Tags" +msgstr "Тагове" + +msgid "List of all the template tags and their functions." +msgstr "Списък на всички шаблонни тагове и техните функции." + +msgid "Filters" +msgstr "Филтри" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Филтрите са действия, които могат да се използват върху променливи в даден " +"шаблон, за да променят изхода." + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Моделите са описания на всички обекти в системата и свързаните с тях полета. " +"Всеки модел си има списък на полетата, които могат да бъдат достъпени както " +"шаблонни променливи" + +msgid "Views" +msgstr "Изгледи" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Всяка страница на публичния сайт се генерира от изглед. Изгледът определя " +"кой шаблон се използва за генериране на страницата и кои обекти са на " +"разположение за този шаблон." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Инструменти за вашия браузър за бърз достъп до администраторската " +"функционалност." + +msgid "Please install docutils" +msgstr "Моля инсталирайте docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Системата за администраторска документация изисква библиотеката за Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Моля, помолете вашите администратори да инсталират docutils ." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел: %(name)s" + +msgid "Fields" +msgstr "Полета" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Описание" + +msgid "Methods with arguments" +msgstr "Методи с аргументи" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr " Върни се в документацията за модели" + +msgid "Model documentation" +msgstr "Документация за модели" + +msgid "Model groups" +msgstr "Групи на модела" + +msgid "Templates" +msgstr "Шаблони" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Път за търсене на шаблон %(name)s:" + +msgid "(does not exist)" +msgstr "(не съществува)" + +msgid "Back to Documentation" +msgstr "Назад към Документацията" + +msgid "Template filters" +msgstr "Шаблонни филтри" + +msgid "Template filter documentation" +msgstr "Документация за шаблонни филтри" + +msgid "Built-in filters" +msgstr "Вградени филтри" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"За да използвате тези филтри, сложете %(code)s във вашия " +"шаблон, преди да използвате филтъра." + +msgid "Template tags" +msgstr "Шаблонни тагове" + +msgid "Template tag documentation" +msgstr "Документация за Шаблонни тагове" + +msgid "Built-in tags" +msgstr "Вградени тагове" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"За да използвате тези тагове, сложете %(code)s във вашия " +"шаблон, преди да използвате тага." + +#, python-format +msgid "View: %(name)s" +msgstr "Изглед: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "Обратно към документацията за Изглед" + +msgid "View documentation" +msgstr "Документация за Изглед" + +msgid "Jump to namespace" +msgstr "Прескочи към именни пространства" + +msgid "Empty namespace" +msgstr "Празни именни пространства" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Изгледи по именни пространства %(name)s" + +msgid "Views by empty namespace" +msgstr "Изгледи по празни именни пространства" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Изглед функция: %(full_name)s. Име: %(url_name)s.\n" + +msgid "tag:" +msgstr "таг:" + +msgid "filter:" +msgstr "филтър:" + +msgid "view:" +msgstr "изглед:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Приложението %(app_label)r не е намерено" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Моделът %(model_name)r не е намерен в приложение %(app_label)r" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "свързания '%(app_label)s.%(data_type)s' обект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "свързаните '%(app_label)s.%(object_name)s' обекти" + +#, python-format +msgid "all %s" +msgstr "всички %s" + +#, python-format +msgid "number of %s" +msgstr "брой %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не прилича на обект от тип urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ac735feb417e77b44919130aec61a8dac3039f3 GIT binary patch literal 3794 zcmbuATWl0n7{`x-3hNyK@qR!mEp>Lc^#V+(m(mg;R4OjKm{?|a&u#~1XC^aeDShzT zXhW3nV7NSxG)-WNfKsbbAO=FBkG}F^G?SQ^nCKHP`eOWlXJ)rEwM{XebmrIZT)z99 z{dw8qqYPs`o=5Rmw=mWPetRok7-tqS_B8k@xB|Qm-Ua>+-Ut2#-VJ6JGj=Dq3M6?g z_%PTBJ_7cG_kt#P8#n^q0lov`kB#B=I`}d83>bnBfXlI&?6rb){yFe=un&9?+yT=0 zGWZy1g5=j2NcK;F+n!dptP#zsD2b9jVJI>o+!rTpd91V zVNb@Blv5hiyVNfTpFNI;dTBi#*5dQBBYbW$X-LqUnO5xeuDee;` z$$E^^ep>EzO7)tsr6EnnW<8Fxzh-#*Eg^l@Q#UQCnKrM0!b?m@qw2F>;g>wqRp-)L zQW7sFb*7gp4qO~EeeN1n!TM^h9O1T66TWMd1lwu~tBiMK{1vAr*!FtO_4$ZX=M~SX zal;-_M=20FBoKZg7#?XC{D3Kjv1~|Q6}IpUi5w}BtY%riQx+C)X{`|l$$Xoqa#(Td zc9|o7Bopg+4_Zc1SZ!W>CS@+3t9nk|^&>&YDWxx#eKueT!xzx$OT)61ztXgPR-l9y zM9sC}U7YW9G_zL|+fj}A_NqcP^y+*~!=E)xbqOCE`({-8IxCF0g6*LUrlX~)#90!3 zMlrScEb14Xsf_B(uGfmf<4%RvJV7Cr`QBtg{cKBX)R$5I{k?IU`V0~1jA}dY!LlKZ zK?yh8n#UNGTxSEGL%ptTD{Fhuzi4osm-iWV)yeD;fwt*2h~wSuGb%)riq zw#5_bW6*lxsLng{9UHWKht{!)cRa5@yQw|jkA;a^9?A~42s%@OvN46@$)B5a^Q#S3Y&NmiK*>qFqMLRQK)jh+~wmM$T*SYN~ z(eLi;;?cj|tu|lX%{$tBU@8obguyh|6sNHCc^I4m&V-ZWEDR>X z;AlAc9!*c;5M~dD!MOVWYbB0h?>Qwy6&<_~23N3xv**>pqe>;Frqo%8(`q|uKOY8H zl}t+E0$EV{64OfE)cl*_3{FQ@k2kkLGyEYhE{4G+(lI%%jKThuxo7#!c#LFG#AlUP zry}1V&u!$KT1WE8D0U%xh!6?BsC+)F#EXm)I1}*1EE#UA#87cx#u0uH8T!-+PGI|LA&EY+2iM?1mL%WbWCB(H2PoHAR3&g{|BaJdp zRJeIl_qhssLK&Z?_6e@yM3lo%NV&?6QcePyWXU7gyg(n$-i} z2-E2enqHxFP&3y2v4Ah?JBVutcc(EG?Se7txKu~ZQcQ_dc9AA{7=H@TkZb`;2+U%3 z;jsUU!pOI|?Wdgnf0k3K=CzsnJ#5@5_%>3BNmXm^P;V;1s>gAKy^qU4S1wV8kqK&! znGa#%bjN#Be#LXM9KlD0u9&7@-8rip2BTO&z|HSsG`gE{5N;l8d{0-{LO<4x;LuO_ xrkdC6)#yI{KwYyZRo~%ez@~BDI6>)v6RCocU;nb0`ju~-zG-_f(ag~(`v>2i6C(fs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..625ef05c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Anubhab Baksi, 2013 +# Jannis Leidel , 2011 +# Tahmid Rafi , 2012 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "নীড়পাতা" + +msgid "Documentation" +msgstr "সহায়িকা" + +msgid "Bookmarklets" +msgstr "বুকমার্কলেট" + +msgid "Documentation bookmarklets" +msgstr "সহায়িকা বুকমার্কলেট" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "এই পাতার সহায়িকা" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "যেকোন পাতা থেকে ভিউ সহায়িকাতে নিয়ে যান।" + +msgid "Tags" +msgstr "ট্যাগগুলো" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "ফিল্টারগুলো" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "মডেলগুলো" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "ভিউগুলো" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "দয়া করে docutils ইনস্টল করুন" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "মডেল: %(name)s" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "ফিল্ড" + +msgid "Type" +msgstr "টাইপ" + +msgid "Description" +msgstr "বিবরন" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "মডেল ডকুমেন্টেশন" + +msgid "Model groups" +msgstr "মডেল গ্রুপ" + +msgid "Templates" +msgstr "টেমপ্লেটগুলো" + +#, python-format +msgid "Template: %(name)s" +msgstr "টেমপ্লেট: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "টেমপ্লেট: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "ডকুমেন্টেশনে ফেরত যান" + +msgid "Template filters" +msgstr "টেমপ্লেট ফিল্টার" + +msgid "Template filter documentation" +msgstr "টেমপ্লেট ফিল্টার ডকুমেন্টেশন" + +msgid "Built-in filters" +msgstr "বিল্ট-ইন ফিল্টার" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "টেমপ্লেট ট্যাগ" + +msgid "Template tag documentation" +msgstr "টেমপ্লেট ট্যাগ ডকুমেন্টেশন" + +msgid "Built-in tags" +msgstr "বিল্ট-ইন ট্যাগ" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "ভিউ: %(name)s" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "টেমপ্লেটসমূহ:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "ভিউ ডকুমেন্টেশন" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "ফাঁকা নেমস্পেস" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ট্যাগঃ" + +msgid "filter:" +msgstr "ফিল্টারঃ" + +msgid "view:" +msgstr "ভিউঃ" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r এ্যপে %(model_name)r মডেলটি পাওয়া যায়নি" + +msgid "model:" +msgstr "মডেলঃ" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` সম্পর্কিত অবজেক্ট" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` সম্পর্কিত অবজেক্ট সমূহ" + +#, python-format +msgid "all %s" +msgstr "সকল %s" + +#, python-format +msgid "number of %s" +msgstr "%s সংখ্যা" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ইউআরএল -এর মত নয়" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..56cfb09a4a743e3e9440ca37b1104ad073429f6d GIT binary patch literal 1571 zcmaKrv5y-?6vhVzyl^i(u7h=z`m2GLQ$-@y0Q=6o>}0H1>A!DnC-{Bq&{489Kk7m)LQUHHF&tn&xh0RIBH z{_?9rgy0(Z8h8x;2)hTn0RMe#R=_JD>wXBbZWFu%Zh>!sPeIOm4zlhyAm@F%*#8dX zKEDT9=TEQ>{teozZ$VXPy|9>zX5DJq_%{#FQFR<1ylR zo@A=0vzilKl@vl{C@aLE6qBN?m%>c)o_1sh9CJETUdMF*Y%uiD-N-S_ja758cG z7Q(AU3P05J(!yAIb>bh5b?vlFOjA9R;>cOn4EE#T3mgvTloUTuCb5;fdTgB!4vHj= zgPloI1YIksa`ag@xaD+tC&4Znm9!B?tssnos7=wwaR^?Mw_@L{QDR6A-B<(ww>MQt5_t1^&uLYsGKF-=>h{ zslvvp!pcT##c#vkrf8|qq$f{^`{{Hxm#^)!vNs6bmRWcS=_W-h;npHNkG58#?H8hL zM7L>!8{iX%d;x~mS(z8#O2`>alC)Xds)*y%=-B@BgXro>ma6jgIL&xxS0_5xP8{ly z_SA!o)D%zUXso=m`RerQpr_p9At}tR%dCo5$2T46SR2FQ$Qj!CBo}EW#at0{oK7*u pil-PUJfPeXX+m>(PHX==(QBfovh=Y$Eq!_2nSovt$xNe#e*ka;gyR4J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..f3e1246f2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +# Irriep Nala Novram , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-03-12 14:33+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Degemer" + +msgid "Documentation" +msgstr "Teuliadoù" + +msgid "Bookmarklets" +msgstr "Sinedoù" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "Tikedennoù" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Siloù" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "baliz:" + +msgid "filter:" +msgstr "sil:" + +msgid "view:" +msgstr "gwel:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Neket bet kavet ar patrom %(model_name)r e-barzh an arload %(app_label)r" + +msgid "model:" +msgstr "patrom:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "an objed e liamm \"%(app_label)s.%(data_type)s\"" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "an objedoù e liamm \"%(app_label)s.%(object_name)s\"" + +#, python-format +msgid "all %s" +msgstr "an holl %s" + +#, python-format +msgid "number of %s" +msgstr "niver a %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77617c027c4840584b96ea7c367bef5f66ec75cf GIT binary patch literal 1730 zcmaiz&u<$=6vqc>p%}`q3y5EONOcv{uDzQ^G}*){N}GySjR?i`z$KaWj_rweXI3+_ zP7_s#3jz)tIP}H^sWZWS@o+s}^Yy*KZ@_4lvWPTgl% zufpDjJ%GIqyZ96ySl@sb!EeDA!Jomi;BVlY;2+>y;J@H0@XXVUeF~lhFM%9<7Q7EW z2mWxde*pS?KY<+~>e^*q_FaKJI zIw!97szYCh8wu2R?4pBsK@%xo@MlJ3xGAOW#xx&BmxC}0q9uwxh!>VFgi#p6F}N)z(&wDYk>^4#GQ$?X(&jH#XLfx{umnF%IhrlOn zAtpl1d~3PkwWkEh{b43jPGhbgm)w}oXih?9<63ilxxn0M`G5I_BrWEN!HI@ z_Di;@AATpC;_MD4LOP{HW}3$MyG?z(>Sj~=B!%{+dPiBSPX7L*Aa|7cB;845E{s, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Početna" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Bookmarkleti" + +msgid "Documentation bookmarklets" +msgstr "Bookmarkleti dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranicu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vodi od bilo koje stranice do dokumentacije za pogled koji generiše tu " +"stranicu." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "pogled:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "klase `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "svi povezani objekti %s" + +#, python-format +msgid "number of %s" +msgstr "broj povezanih objekata %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne izgleda kao urlpattern objekat" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37daf4441661db6718e6a5b88bd8b762dac5a0ec GIT binary patch literal 6650 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 yOu=_J=y*D4ixyVsc-s&Z0G#WSS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..8a0984b66 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,288 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# abraham.martin , 2014 +# Antoni Aloy , 2014,2017,2021 +# Carles Barrobés , 2012 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-27 08:46+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentació Administrativa" + +msgid "Home" +msgstr "Inici" + +msgid "Documentation" +msgstr "Documentació" + +msgid "Bookmarklets" +msgstr "'Bookmarklets'" + +msgid "Documentation bookmarklets" +msgstr "'Bookmarklets' de documentació" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Per instal·lar miniaplicacions enllaçades, arrossegueu l'enllaç a la vostra " +"barra de marcados, o feu clic dret a l'enllaç i afegiu-lo als vostres " +"marcadors. Ara podeu seleccionar la miniaplicació des de qualsevol pàgina " +"del lloc." + +msgid "Documentation for this page" +msgstr "Documentació d'aquesta pàgina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Us porta des de qualsevol pàgina a la documentació de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetes" + +msgid "List of all the template tags and their functions." +msgstr "Llista d'etiquetes de plantilles i les seves funcions." + +msgid "Filters" +msgstr "Filtres" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Els filtres són accions que poden ser aplicades a variables a una plantilla " +"per alterar la seva sortida." + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Els models són descripcions de tots els objectes del sistema i els seus " +"camps associats. Cada model té una llista de camps que són accessibles com " +"variables de la plantilla." + +msgid "Views" +msgstr "Vistes" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada plana del lloc públic és generat per una vista (view). La vista " +"defineix quina plantilla es fa servir per generar la plana i quins objectes " +"estan disponibles a aquella plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Eines pel seu navegador per accedir ràpidament a la funcionalitat de l'admin." + +msgid "Please install docutils" +msgstr "Si us plau instal·leu docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"El sistema d'administració de documentació requereix de la biblioteca de " +"Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Si us plau, demani als seus administradors la instal·lació de docutils ." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Camps" + +msgid "Field" +msgstr "Camp" + +msgid "Type" +msgstr "Tipus" + +msgid "Description" +msgstr "Descripció" + +msgid "Methods with arguments" +msgstr "Mètodes amb arguments" + +msgid "Method" +msgstr "Mètode" + +msgid "Arguments" +msgstr "Arguments" + +msgid "Back to Model documentation" +msgstr "Tornar a la documentació del Model" + +msgid "Model documentation" +msgstr "Documentació del model" + +msgid "Model groups" +msgstr "Grups de model" + +msgid "Templates" +msgstr "Plantilles" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Camí de cerca per la plantilla \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(no existeix)" + +msgid "Back to Documentation" +msgstr "Tornar a la documentació" + +msgid "Template filters" +msgstr "Filtres de plantilla" + +msgid "Template filter documentation" +msgstr "Documentació dels filtres de plantilla" + +msgid "Built-in filters" +msgstr "Filtres integrats" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Per utilitzar aquests filtres, introdueixi %(code)s a la seva " +"plantilla abans d'utilitzar el filtre." + +msgid "Template tags" +msgstr "Etiquetes de plantilles" + +msgid "Template tag documentation" +msgstr "Documentació de les etiquetes de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetes integrades" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Per utilitzar aquestes etiquetes, introdueix %(code)s a la teva " +"plantilla abans d'utilitzar l'etiqueta" + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexte:" + +msgid "Templates:" +msgstr "Plantilles:" + +msgid "Back to View documentation" +msgstr "Tornar a la documentació de les Vistes" + +msgid "View documentation" +msgstr "Veure documentació" + +msgid "Jump to namespace" +msgstr "Anar a l'espai de noms" + +msgid "Empty namespace" +msgstr "Espai de noms buit" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistes de l'espai de noms %(name)s" + +msgid "Views by empty namespace" +msgstr "Vistes per l'espai de noms buit" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funció de la vista: %(full_name)s . Nom: %(url_name)s .\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtre:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicació %(app_label)r no trobada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "El model %(model_name)r no s'ha trobat a l'aplicació %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "l'objecte relacionat `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objectes relacionats `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "tots %s" + +#, python-format +msgid "number of %s" +msgstr "nombre de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no sembla ser un objecte 'urlpattern'" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49b5b866e92f3596d94ba068695edc8e57b419a9 GIT binary patch literal 6619 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, 2011 +# Vláďa Macek , 2012-2014 +# Vláďa Macek , 2015-2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 23:13+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Administrative Documentation" +msgstr "Dokumentace správy" + +msgid "Home" +msgstr "Domů" + +msgid "Documentation" +msgstr "Dokumentace" + +msgid "Bookmarklets" +msgstr "Bookmarklety" + +msgid "Documentation bookmarklets" +msgstr "Dokumentační bookmarklety" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pro nainstalování bookmarkletů, přetáhněte odkaz na vaše záložky " +"(„Oblíbené“), nebo klepněte pravým tlačítkem na odkaz a přidejte ho k vašim " +"záložkám. Nyní můžete zvolit bookmarklet z libovolné stránky jakéhokoli webu." + +msgid "Documentation for this page" +msgstr "Dokumentace k této stránce" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Z libovolné stránky otevře dokumentaci pohledu (view), který generoval tuto " +"stránku." + +msgid "Tags" +msgstr "Tagy" + +msgid "List of all the template tags and their functions." +msgstr "Seznam všech šablonových tagů a jejich funkce." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry jsou akce, které mohou být aplikovány na proměnné v šabloně za účelem " +"úpravy hodnoty." + +msgid "Models" +msgstr "Modely" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modely jsou popisy všech objektů v systému a jejich přidružených polí. Každý " +"model má seznam polí, které mohou být čteny jako proměnné v šablonách." + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Každá stránka na veřejném webu je generována pomocí pohledu. Pohled " +"definuje, která šablona bude použita ke generování stránky a které objekty " +"budou v šabloně k dispozici." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Nástroje pro prohlížeč k rychlému přístupu k funkcím administračního " +"rozhraní." + +msgid "Please install docutils" +msgstr "Nainstalujte balík docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Dokumentační systém administračního rozhraní vyžaduje pythonskou knihovnu docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Požádejte správce o instalaci balíku docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Pole" + +msgid "Field" +msgstr "Pole" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Popis" + +msgid "Methods with arguments" +msgstr "Metody s argumenty" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Zpět na popis modelů" + +msgid "Model documentation" +msgstr "Dokumentace modelů" + +msgid "Model groups" +msgstr "Skupiny modelů" + +msgid "Templates" +msgstr "Šablony" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablona: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablona: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Vyhledávací cesta pro šablonu %(name)s:" + +msgid "(does not exist)" +msgstr "(neexistuje)" + +msgid "Back to Documentation" +msgstr "Zpět na dokumentaci" + +msgid "Template filters" +msgstr "Šablonové filtry" + +msgid "Template filter documentation" +msgstr "Dokumentace šablonových filtrů" + +msgid "Built-in filters" +msgstr "Vestavěné filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Chcete-li tyto filtry používat, vložte do šablony před místo použití kód " +"%(code)s." + +msgid "Template tags" +msgstr "Šablonové tagy" + +msgid "Template tag documentation" +msgstr "Dokumentace šablonových tagů" + +msgid "Built-in tags" +msgstr "Vestavěné tagy" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Chcete-li tyto tagy používat, vložte do šablony před místo použití kód " +"%(code)s." + +#, python-format +msgid "View: %(name)s" +msgstr "Pohled: %(name)s" + +msgid "Context:" +msgstr "Kontext:" + +msgid "Templates:" +msgstr "Šablony:" + +msgid "Back to View documentation" +msgstr "Zpět na popis pohledů" + +msgid "View documentation" +msgstr "Dokumentace pohledů" + +msgid "Jump to namespace" +msgstr "Přejít na jmenný prostor" + +msgid "Empty namespace" +msgstr "Prázdný jmenný prostor" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pohledy dle jmenného prostoru %(name)s" + +msgid "Views by empty namespace" +msgstr "Pohledy dle prázdného jmenného prostoru" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funkce pohledu: %(full_name)s. Název: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtr:" + +msgid "view:" +msgstr "pohled (view):" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikace %(app_label)r nebyla nalezena" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r v aplikaci %(app_label)r nenalezen" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "související položka `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "související položky `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "Vše: %s" + +#, python-format +msgid "number of %s" +msgstr "Počet: %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Objekt %s patrně není typu urlpattern." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..64f4ab6154605ab0fe6e6f2309316d131ec46ec8 GIT binary patch literal 5401 zcmbuCU92QU6@Uu`fvfm~zo1~Ta@l*?ow@h!F0ec7U15LOWp`PYD_}G(HPbaS#qH@H zySjI_6OAuM6B9{H^hu%-V|X@EqrMqp;!k4q0iy&oQA2n!!NeDR(eG4u&(E@CAE?}# zudBQ2)Twh$Rh|2no3H(rqU@)BjQa95N<9LfeLFvtKV7TTqwvpgH{5ldQtyRNLh0|| zN8wlC2jO$@UGS$+`u!5#1pf$cfd7E+g#WDH{|DYm`}%iOa(2M)(>?_Gr2Yo4hp)jW z;p-4p)Ja}G2G7Dh@Hw~_z6jqBZ)7sj<2LvncsFFI>cH>82jMCBclcr0zEP<=;c+PP zx8ZGY3}qe9K+*HNP}cKv_yPDUcr$zj@~2+sX9@lnei~j!LwEs-zCVMT@Ft8P^E?b? z{5kk;*n_g}42r&&AWKqTs@q?MvaV;~8vHgCIlqPL@b^&0Uqh!~;LGcw`198&E#Gfp zlJ~(=@I&ykP(u$zk8eU*-}5zpT=NBpX!Qpu>wBeczXori{qLIZ#@Iiky#htAm!PcU zukds5RVex$!>H%s!*C6L2OfaGgQDLJ{D>a6LWZanD0bKnpM?*=2jDA^KXp6G?}Y16 z=6e!Kd|rTvR9}GN=dai8A3%wdpFkP^8z}yJ8Or)zg`a`{g5tk3bbbOp4^PAYL0R8v zffO{ksNzE@ zvIiw@rHDUQsC%hm%U#rIS<;lpot@}@k@RwxCLMjSmqzx`@=Cvm;|qxy*;RjVExc>% zvovQtitO?ZOKREcD79WEX|Bz9Y)z)~RCld5n(kwh=Qc}p+I`ygaRW+HCGcZU$Z*Nt4`O$~)?)^}WoE!<38S7FxPHFMRP+KV{WJ=k?eO ztU6|T!|NG*4(>_ziVZy1M#J9m77~W;mF!ybBhA@u_sFAP= z^tp%%tGPVj>M;u%*6#*cT8w?w=peP)I90oTU3npzg_ob#xbYNLlo;`)XAN_j8}HMe z3t`e1XZf}cffdx(LxXf3*H)-H)FIHgtk<(%B8Hw*>r9=e&c)VvV#IHYXEJSOJ2A}| zkzx>^i+K+kJbI0;Z?2_$OzvGY?BzH0AggMl1L^b`JkLocFgRm3wVdd5)mXTDM zYez?I$zI%QzEoRvF(fYkI@cX%zggd~#~ZmFJ)3eWZq92>znN%{W_Tr7WpRqeQ<@lW*!xEaoM^iU;E!)H* z#3h3eJ(ZBlB#Q~&nph-=%ry4FfkBCGmQK8E^HgJi-ge9x7DBByR&%kK*yXa;a%@$& zaTa%xyqfcXG`*5=TlT72O-F@L@2I30b(xUe&bQ3UaTw{R=5GeyUS6s8Q+9p~AYb!H}XW41i(Wgwpg{ey#YOZgfXluPc{y`jmx%{M=_b-cBI)=%c@+pKjgA*hMhj^5vO z`Bce{?v+dD;vzF~>v)=td`Bna(Da-8?$_1h=1Q`;xv{E0sn>N!OJk2THbO(+v8ng# zyYAA7JZ*$-d-$^V{w1|^V#3j>`~3-<)R`ooB{Nq_ca9~*WRnkFDceb0q{|6$s7vg)?YinSx*nGRQH)5sJ$FCr7$L_Or9nC8e%669@}ft$6Clu?U|C@&K7 z9p?v`>pK(8>#`_}BX2g%+?2Z1Q8k_B%u{C!$xYgAR3Lw#!^HMU8V2PswNX?AOZ5z~ zY75=V_+g1UjVFV)){Nho>4CJwfRXESdbpJIpuVyq?RJt9krRoT_~Hj=Pf)xsSmP>PR`V8Hq@5=rqTEk`0-t(OXoTv$QrN5fID~ zln{H(Eps?Yl1W>g=ibQah6^|^qu}V-8nxMp0SF-kOOUlgXjPHLONp&2g}5ve!v1fF zxp~irLFz;{8Hc!%B$nxNsOSpG4)2V8z=CobRcnBIh`}Zf}j^K1?4uK#fir*j^<49<}CBevOt4I1= zSmFFA&ku$g9P@%EfB$E>-A1-*DATrCNj-$+#^#7>!Rzc-9t$b?wiY!|9, 2011 +# Maredudd ap Gwyndaf , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Administrative Documentation" +msgstr "Dogfennaeth Gweinyddol" + +msgid "Home" +msgstr "Hafan" + +msgid "Documentation" +msgstr "Dogfennaeth" + +msgid "Bookmarklets" +msgstr "Nodau tudalen" + +msgid "Documentation bookmarklets" +msgstr "Nodau tudalen dogfennaeth" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dogfennaeth y dudalen hon" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Cymerir chi o unrhyw dudalen i'r dogfennaeth am yr olwg sy'n creu'r dudalen " +"hwnnw." + +msgid "Tags" +msgstr "Tagiau" + +msgid "List of all the template tags and their functions." +msgstr "Rhestr o holl dagiau'r templad a'u swyddogaeth." + +msgid "Filters" +msgstr "Hidlau" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Gweithredoedd yw hidlau sy'n gallu cael eu gosod ar newidynnau mewn templad " +"i newid yr allbwm." + +msgid "Models" +msgstr "Modelau" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Mae modelau yn disgrifio pob gwrthrych yn y system a'u meysydd " +"cysylltiedig. Mae gan bob model restr o feysydd y gellir eu defnyddio fel " +"newidynnau templad" + +msgid "Views" +msgstr "Golygon" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Mae pob tudalen ar y wefan gyhoeddus yn cael eu creu gan olwg. Mae'r golwg " +"yn diffunio pa templad i'w ddefnyddio i gynhyrchu'r dudalen a pa wrthrychau " +"sydd ar gael i'r templad." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Offer ar gyfer eich porwr i gael mynediad cyflym i swyddogaethau gweinyddwr." + +msgid "Please install docutils" +msgstr "Gosodwch docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Mae'r system dogfennaeth gweinyddol angen llyfrgell docutils Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Gofynnwch i'r gweinyddwr i osod docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "Maes" + +msgid "Type" +msgstr "Math" + +msgid "Description" +msgstr "Disgrifiad" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "Dogfennaeth model" + +msgid "Model groups" +msgstr "Grwpiau model" + +msgid "Templates" +msgstr "Templadau" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templad: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Templad: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Chwilio'r llwybr am dempled \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(nid yw'n bodoli)" + +msgid "Back to Documentation" +msgstr "Nôl i Dogfennaeth" + +msgid "Template filters" +msgstr "Hidlau templadau" + +msgid "Template filter documentation" +msgstr "Dogfennaeth hidlau templadau" + +msgid "Built-in filters" +msgstr "Hidlau mewnol" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"I ddefnyddio'r hildau, rhowch %(code)s yn eich templad cyn " +"defnyddio'r hidl." + +msgid "Template tags" +msgstr "Tagiau templadau" + +msgid "Template tag documentation" +msgstr "Dogfennaeth tag templad" + +msgid "Built-in tags" +msgstr "Tagiau mewnol" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"I ddefnyddio'r tagiau rhowch %(code)s yn eich templad cyn " +"defnyddio'r tag." + +#, python-format +msgid "View: %(name)s" +msgstr "Golwg: %(name)s" + +msgid "Context:" +msgstr "Cyd-destun:" + +msgid "Templates:" +msgstr "Templadau:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "Dogfennaeth golygon" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Gweld ffwythiant: %(full_name)s. Enw: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "hidl:" + +msgid "view:" +msgstr "golwg:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Ni ddarganfuwyd ap %(app_label)r" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Ni darganfyddwyd model %(model_name)r yn ap %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "y gwrthrych `%(app_label)s.%(data_type)s` cysylltiedig" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "gwrthrychau `%(app_label)s.%(object_name)s` cysylltiedig" + +#, python-format +msgid "all %s" +msgstr "pob %s" + +#, python-format +msgid "number of %s" +msgstr "nifer o %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "nid yw %s yn ymweld i fod yn wrthrych urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d0854826164043e4efd5efe48ff886a0edeaab2a GIT binary patch literal 6446 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..4544478d2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Christian Joergensen , 2012 +# Erik Ramsgaard Wognsen , 2021 +# Erik Ramsgaard Wognsen , 2013,2015-2016,2019 +# Jannis Leidel , 2011 +# valberg , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:23+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administrationsdokumentation" + +msgid "Home" +msgstr "Hjem" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Dokumentations-bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"For at installere bookmarklets, skal du trække linket til din bogmærkelinje " +"eller højreklikke linket og tilføje det til dine bogmærker. Derefter kan du " +"vælge bookmarkletten fra enhver side på websitet." + +msgid "Documentation for this page" +msgstr "Dokumentation for denne side" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Bringer dig fra en hvilken som helst side til dokumentationen for det view, " +"der genererer den pågældende side." + +msgid "Tags" +msgstr "Mærker" + +msgid "List of all the template tags and their functions." +msgstr "Liste af alle template tags og deres funktioner." + +msgid "Filters" +msgstr "Filtre" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtre er handlinger, der kan anvendes på variabler i en skabelon for at " +"ændre outputtet." + +msgid "Models" +msgstr "Modeller" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller er beskrivelser af alle objekter i systemet, og deres tilhørende " +"felter. Hver model har en liste af felter som kan tilgås som en skabelon " +"variabel." + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Hver side på den offentlige side bliver genereret af et view. Viewet " +"definerer hvilken skabelon der bruges til at generere siden og hvilke " +"objekter er tilgængelige fra skabelonen." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Værktøjer for din browser til hurtig adgang til admin funktionalitet." + +msgid "Please install docutils" +msgstr "Installer venligst docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Admin dokumentationssystemet kræver Pythons docutils bibliotek." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Venligst spørg dine administratorer om at installere docutils ." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Felter" + +msgid "Field" +msgstr "Felt" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Beskrivelse" + +msgid "Methods with arguments" +msgstr "Metode med argumenter" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Argumenter" + +msgid "Back to Model documentation" +msgstr "Tilbage til modeldokumentationen" + +msgid "Model documentation" +msgstr "Modeldokumentation" + +msgid "Model groups" +msgstr "Modelgrupper" + +msgid "Templates" +msgstr "Skabeloner" + +#, python-format +msgid "Template: %(name)s" +msgstr "Skabelon: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Skabelon: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Søgesti for skabelon %(name)s:" + +msgid "(does not exist)" +msgstr "(eksisterer ikke)" + +msgid "Back to Documentation" +msgstr "Tilbage til dokumentationen" + +msgid "Template filters" +msgstr "Skabelonfiltre" + +msgid "Template filter documentation" +msgstr "Skabelonfilterdokumentation" + +msgid "Built-in filters" +msgstr "Indbyggede filtre" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"For at bruge disse filtre, indsæt %(code)s i din skabelon, før " +"du bruger filteret." + +msgid "Template tags" +msgstr "Skabelon-tags" + +msgid "Template tag documentation" +msgstr "Skabelon-tag-dokumentation" + +msgid "Built-in tags" +msgstr "Indbyggede tags" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"For at bruge disse tags, indsæt %(code)s i din skabelon, før du " +"bruger tagget." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Skabeloner:" + +msgid "Back to View documentation" +msgstr "Tilbage til View-dokumentationen" + +msgid "View documentation" +msgstr "View dokumentation" + +msgid "Jump to namespace" +msgstr "Hop til namespace" + +msgid "Empty namespace" +msgstr "Tomt namespace" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views efter namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views efter tomt namespace" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" View funktion: %(full_name)s. Navn: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikation %(app_label)r blev ikke fundet" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modellen %(model_name)r ikke fundet i applikationen %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "det relaterede `%(app_label)s.%(data_type)s`-objekt" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "relaterede `%(app_label)s.%(object_name)s`-objekter" + +#, python-format +msgid "all %s" +msgstr "alle %s" + +#, python-format +msgid "number of %s" +msgstr "antal %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ser ikke ud til at være et urlpattern-objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae993f7b9537b5c6882943383c41b038cd5fea33 GIT binary patch literal 6567 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, 2021 +# Jannis Vajen, 2013 +# Jannis Leidel , 2013-2016,2020 +# Jannis Vajen, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-28 17:15+0000\n" +"Last-Translator: Raphael Michel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administrative Dokumentation" + +msgid "Home" +msgstr "Start" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Dokumentations-Bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Um die Bookmarklets zu installieren, muss dieser Link in die Browser-" +"Werkzeugleiste gezogen werden oder mittels rechter Maustaste in den " +"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder Seite " +"aufgerufen werden." + +msgid "Documentation for this page" +msgstr "Dokumentation für diese Seite" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Springt von jeder Seite zu der Dokumentation für den View, der diese Seite " +"erzeugt." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Alle Template-Tags und deren Funktionen auflisten." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filter sind Aktionen, die in Templates auf Variablen angewendet werden " +"können, um deren Ausgabe zu verändern." + +msgid "Models" +msgstr "Modelle" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelle sind Beschreibungen aller Objekte und ihrer Felder, die sich im " +"System befinden. Jedes Model hat eine Reihe von Feldern, auf in Form von " +"Templatevariablen zugegriffen werden kann." + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Jede öffentliche Seite wird durch einen View generiert. Dieser View " +"definiert, welches Template genutzt wird, um die Seite zu generieren und " +"welche Objekte in dem jeweiligen Template zur Verfügung stehen." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Hilfsfunktionen für den Browser, um schnell auf den Administrationsbereich " +"zugreifen zu können." + +msgid "Please install docutils" +msgstr "Bitte docutils installieren." + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Das Admin-Dokumentationssystem erfordert die Python-Bibliothek docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Bitte durch den/die Administrator/in docutils " +"installieren lassen." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Felder" + +msgid "Field" +msgstr "Feld" + +msgid "Type" +msgstr "Klasse" + +msgid "Description" +msgstr "Beschreibung" + +msgid "Methods with arguments" +msgstr "Methode mit Argumenten" + +msgid "Method" +msgstr "Methode" + +msgid "Arguments" +msgstr "Argumente" + +msgid "Back to Model documentation" +msgstr "Zurück zur Model-Dokumentation" + +msgid "Model documentation" +msgstr "Model-Dokumentation" + +msgid "Model groups" +msgstr "Model-Gruppen" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Suchpfade für Template %(name)s:" + +msgid "(does not exist)" +msgstr "(existiert nicht)" + +msgid "Back to Documentation" +msgstr "Zurück zur Dokumentation" + +msgid "Template filters" +msgstr "Template-Filter" + +msgid "Template filter documentation" +msgstr "Template-Filter-Dokumentation" + +msgid "Built-in filters" +msgstr "Mitgelieferte Filter" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Um diese Filter zu nutzen, muss sich %(code)s vor Aufruf des " +"Filters im Template befinden." + +msgid "Template tags" +msgstr "Template-Tags" + +msgid "Template tag documentation" +msgstr "Template-Tag-Dokumentation" + +msgid "Built-in tags" +msgstr "Mitgelieferte Tags" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Um diese Tags zu nutzen, muss sich %(code)s vor Aufruf des Tags " +"im Template befinden." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Kontext:" + +msgid "Templates:" +msgstr "Templates:" + +msgid "Back to View documentation" +msgstr "Zurück zur View-Dokumentation" + +msgid "View documentation" +msgstr "View Dokumentation" + +msgid "Jump to namespace" +msgstr "Zu Namespace springen" + +msgid "Empty namespace" +msgstr "Leerer Namespace" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views in Namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views ohne Namespace" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" View-Funktion: %(full_name)s. Name: %(url_name)s.\n" + +msgid "tag:" +msgstr "Tag:" + +msgid "filter:" +msgstr "Filter:" + +msgid "view:" +msgstr "View:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Anwendung %(app_label)r nicht gefunden" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modell %(model_name)r wurde nicht in Anwendung %(app_label)r gefunden" + +msgid "model:" +msgstr "Modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "Das verknüpfte `%(app_label)s.%(data_type)s` Objekt" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "verknüpfte `%(app_label)s.%(object_name)s` Objekte" + +#, python-format +msgid "all %s" +msgstr "Alle %s" + +#, python-format +msgid "number of %s" +msgstr "Anzahl von %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ist scheinbar kein urlpattern-Objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d07d1872bd829e77411f2a5dffe0a85246321d6d GIT binary patch literal 6807 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, 2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 22:06+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Administratiwna dokumentacija" + +msgid "Home" +msgstr "Startowy bok" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Skriptowe cytańske znamjenja" + +msgid "Documentation bookmarklets" +msgstr "Skriptowe cytańske znamjenja dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aby skriptowe cytańske znamjenja instalěrował, śěgniśo wótkaz do swójeje " +"rědki cytańskich znamjenjow abo klikniśo z pšaweju tastu myški a pśidajśo " +"jen swójim cytańskim znamjenjam. Něnto móžośo skriptowe cytańske znamje z " +"drugego boka na sedle wubraś." + +msgid "Documentation for this page" +msgstr "Dokumentacija za toś ten bok" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Zmóžnja wam, z někakego boka do dokumentacije naglěda skócyś, kótaryž twóri " +"ten bok." + +msgid "Tags" +msgstr "Wobznamjenja" + +msgid "List of all the template tags and their functions." +msgstr "Lisćina wšych pśedłogowych wobznamjenjow a jich funkcijow." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry su akcije, kótarež daju se na wariable w pśedłoze nałožyś, aby wudaśe " +"změnili." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele su wopisanja wšych objektow w systemje a jich pśisłušnych pólow. " +"Kuždy model ma lisćinu pólow, na kótarež maju pśistup ako pśedłogowe " +"wariable." + +msgid "Views" +msgstr "Naglědy" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kuždy bok na zjawnem sedle twóri se pśez naglěd. Naglěd definěrujo, kótara " +"pśedłoga se wužywa, aby se bok napórał a kótare objekty su tej pśedłoze k " +"dispoziciji." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Rědy za waš wobglědowak za malsny pśistup na adminstratorowu funkcionalnosć." + +msgid "Please install docutils" +msgstr "Pšosym instalěrujśo docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Administratorowy dokumentaciski system pomina se Pythonowu biblioteku docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Pšosym pšosćo swóje administratory, docutils " +"instalěrowaś." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Póla" + +msgid "Field" +msgstr "Pólo" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Wopisanje" + +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Slědk k modelowej dokumentaciji" + +msgid "Model documentation" +msgstr "Modelowa dokumentacija" + +msgid "Model groups" +msgstr "Modelowe kupki" + +msgid "Templates" +msgstr "Pśedłogi" + +#, python-format +msgid "Template: %(name)s" +msgstr "Pśedłoga: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Pśedłoga: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Pytańska sćažka za pśedłogu %(name)s:" + +msgid "(does not exist)" +msgstr "(njeeksistěrujo)" + +msgid "Back to Documentation" +msgstr "Slědk k dokumentaciji" + +msgid "Template filters" +msgstr "Pśedłogowe filtry" + +msgid "Template filter documentation" +msgstr "Dokumentacija za pśedłogowe filtry" + +msgid "Built-in filters" +msgstr "Zatwarjone filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Aby toś te filtry wužywał, zasajźćo %(code)s do wójeje " +"pśedłogi, nježli až wužywaśo filter." + +msgid "Template tags" +msgstr "Pśedłogowe wobznamjenja" + +msgid "Template tag documentation" +msgstr "Dokumentacija za pśedłogowe wobznamjenja" + +msgid "Built-in tags" +msgstr "Zatworjone wobznamjenja" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Aby toś te wobznamjenja wužywał, zasajźćo %(code)s do wójeje " +"pśedłogi, nježli až wužywaśo wobznamjenje." + +#, python-format +msgid "View: %(name)s" +msgstr "Naglěd: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Pśedłogi" + +msgid "Back to View documentation" +msgstr "Slědk k naglědowej dokumentaciji" + +msgid "View documentation" +msgstr "Naglědowa dokumentacija" + +msgid "Jump to namespace" +msgstr "K mjenjowemu rumoju skócyś" + +msgid "Empty namespace" +msgstr "Prozny mjenjowy rum" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Naglědy pó mjenjowem rumje %(name)s" + +msgid "Views by empty namespace" +msgstr "Naglědy pó proznem mjenjowem rumje" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Naglědowa funkcija: %(full_name)s. Mě: %(url_name)s.\n" + +msgid "tag:" +msgstr "wobznamjenje:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "naglěd:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Nałoženje %(app_label)r njenamakane" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r njejo se w nałoženju %(app_label)r namakał" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "pśisłušny objekt %(app_label)s.%(data_type)s“" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "pśisłušne objekty „%(app_label)s.%(object_name)s" + +#, python-format +msgid "all %s" +msgstr "wšykne %s" + +#, python-format +msgid "number of %s" +msgstr "ůicba %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "zda se, až %s njejo objekt urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9739b4108fab87aa8d1b056a9e25afcac509323a GIT binary patch literal 8581 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..bc4aebb79 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dimitris Glezos , 2011 +# Fotis Athineos , 2021 +# Jannis Leidel , 2011 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +# Yorgos Pagles , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-08-04 06:47+0000\n" +"Last-Translator: Fotis Athineos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Διαχειριστική Τεκμηρίωση" + +msgid "Home" +msgstr "Αρχική" + +msgid "Documentation" +msgstr "Τεκμηρίωση" + +msgid "Bookmarklets" +msgstr "Σελιδοδείκτες" + +msgid "Documentation bookmarklets" +msgstr "Σελιδοδείκτες τεκμηρίωσης" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Για την εγκατάσταση bookmarklets, σύρετε το link στην γραμμή εργαλείων των " +"bookmarks του browser σας ή δεξί-κλικ πάνω στο link και προσθέστε το στα " +"bookmarks. Τώρα μπορείτε να επιλέξετε το bookmarklet μέσα από κάθε σελίδα " +"του site." + +msgid "Documentation for this page" +msgstr "Τεκμηρίωση για αυτήν τη σελίδα" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Μεταπήδηση από οποιαδήποτε σελίδα στην τεκμηρίωση για το view που " +"δημιούργησε τη σελίδα αυτή." + +msgid "Tags" +msgstr "Ετικέτες" + +msgid "List of all the template tags and their functions." +msgstr "Λίστα όλωςν τον ετικετών περιγραμμάτων και των λειτουργιών τους." + +msgid "Filters" +msgstr " Φίλτρα" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Τα φίλτρα είναι ενέργειες που μπορούν να εφαρμοστούν σε μεταβλητές μέσα σε " +"ένα περίγραμμα για να αλλάξουν το αποτέλεσμα." + +msgid "Models" +msgstr "Μοντέλα" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Τα μοντέλα είναι περιγραφές όλωςν τον αντικειμένων στο σύστημα και των " +"συνδεδεμένων πεδίων. Κάθε μοντέλο έχει μια λίστα πεδιών που είναι προσβάσιμα " +"ως μεταβλητές περιγραμμάτων" + +msgid "Views" +msgstr "Οπτικές" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Κάθε σελίδα στη δημόσια ιστοσελίδα παράγεται από μια οπτική. Η οπτική ορίζει " +"ποιό περίγραμμα θα χρησιμοποιηθεί για να παραχθεί η σελίδα και ποιά " +"αντικείμενα είναι διαθέσιμα σε αυτό το περίγραμμα." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Εργαλεία για το πρόγραμμα περιήγησης για γρήγορη πρόσβαση σε διαχειριστική " +"λειτουργικότητα. " + +msgid "Please install docutils" +msgstr "Παρακαλώ εγκαταστείστε τα docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Το σύστημα διαχειριστικής τεκμηρίωσης απαιτεί την βιβλιοθήκη της Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Παρακαλώ ζητήστε απο τον διαχειριστή σας να εγκαταστήσει τα docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Μοντέλο: %(name)s" + +msgid "Fields" +msgstr "Πεδία" + +msgid "Field" +msgstr "Πεδίο" + +msgid "Type" +msgstr "Τύπος" + +msgid "Description" +msgstr "Περιγραφή" + +msgid "Methods with arguments" +msgstr "Μέθοδοι με ορίσματα" + +msgid "Method" +msgstr "Μέθοδος" + +msgid "Arguments" +msgstr "Ορίσματα" + +msgid "Back to Model documentation" +msgstr "Πίσω στην τεκμηρίωση των Μοντέλων" + +msgid "Model documentation" +msgstr "Τεκμηρίωση Μοντέλων" + +msgid "Model groups" +msgstr "Ομάδες μοντέλου" + +msgid "Templates" +msgstr "Περιγράμματα" + +#, python-format +msgid "Template: %(name)s" +msgstr "Περίγραμμα: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Περίγραμμα: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Αναζήτηση μονοπατιού για περίγραμμα %(name)s:" + +msgid "(does not exist)" +msgstr "(δεν υπάρχει)" + +msgid "Back to Documentation" +msgstr "Επιστροφή στην Τεκμηρίωση" + +msgid "Template filters" +msgstr "Φίλτρα περιγραμμάτων" + +msgid "Template filter documentation" +msgstr "Τεκμηρίωση φίλτρων περιγραμμάτων" + +msgid "Built-in filters" +msgstr "Ενσωματωμένα φίλτρα" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Για να χρησιμοποιήσετε αυτά τα φίλτρα, βάλτε %(code)s στο " +"περίγραμμα σας, προτού χρησιμοποιήσετε το φίλτρο." + +msgid "Template tags" +msgstr "Ετικέτες περιγραμμάτων" + +msgid "Template tag documentation" +msgstr "Τεκμηρίωση ετικετών περιγραμμάτων" + +msgid "Built-in tags" +msgstr "Ενσωματωμένες ετικέτες" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Για να χρησιμοποιήσετε αυτές τις ετικέτες, βάλτε %(code)s στο " +"περίγραμμα σας, προτού χρησιμοποιήσετε την ετικέτα." + +#, python-format +msgid "View: %(name)s" +msgstr "Οπτική: %(name)s" + +msgid "Context:" +msgstr "Πλαίσιο:" + +msgid "Templates:" +msgstr "Περιγράμματα:" + +msgid "Back to View documentation" +msgstr "Πίσω στην τεκμηρίωση του View" + +msgid "View documentation" +msgstr "Προβολή Τεκμηρίωσης" + +msgid "Jump to namespace" +msgstr "Μεταφερθείτε στο namespace" + +msgid "Empty namespace" +msgstr "Άδειο namespace" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Οπτικές ανά namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Οπτικές ανά κενό namespace" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Συνάρτηση οπτικής: %(full_name)s. Όνομα: %(url_name)s.\n" + +msgid "tag:" +msgstr "ετικέτα:" + +msgid "filter:" +msgstr "φίλτρο:" + +msgid "view:" +msgstr "προβολή:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Η εφαρμογή %(app_label)r δεν βρέθηκε" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Το μοντέλο %(model_name)r δεν μπορεί να βρεθεί στην εφαρμογή %(app_label)r" + +msgid "model:" +msgstr "μοντέλο:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "το συσχετισμένο `%(app_label)s.%(data_type)s` αντικείμενο" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "συσχετισμένα `%(app_label)s.%(object_name)s` αντικείμενα" + +#, python-format +msgid "all %s" +msgstr "όλα %s" + +#, python-format +msgid "number of %s" +msgstr "πλήθος number of %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Το %s δε φαίνεται να είναι ένα αντικείμενο urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..34eb48801 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,359 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admindocs/apps.py:7 +msgid "Administrative Documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:6 +#: contrib/admindocs/templates/admin_doc/index.html:6 +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:6 +#: contrib/admindocs/templates/admin_doc/model_detail.html:14 +#: contrib/admindocs/templates/admin_doc/model_index.html:8 +#: contrib/admindocs/templates/admin_doc/template_detail.html:6 +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:7 +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:7 +#: contrib/admindocs/templates/admin_doc/view_detail.html:6 +#: contrib/admindocs/templates/admin_doc/view_index.html:7 +msgid "Home" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:7 +#: contrib/admindocs/templates/admin_doc/index.html:7 +#: contrib/admindocs/templates/admin_doc/index.html:10 +#: contrib/admindocs/templates/admin_doc/index.html:14 +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:7 +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:14 +#: contrib/admindocs/templates/admin_doc/model_detail.html:15 +#: contrib/admindocs/templates/admin_doc/model_index.html:9 +#: contrib/admindocs/templates/admin_doc/template_detail.html:7 +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:8 +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:8 +#: contrib/admindocs/templates/admin_doc/view_detail.html:7 +#: contrib/admindocs/templates/admin_doc/view_index.html:8 +msgid "Documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8 +#: contrib/admindocs/templates/admin_doc/index.html:29 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:11 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:15 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:17 +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:9 +msgid "Tags" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:18 +msgid "List of all the template tags and their functions." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:20 +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:9 +msgid "Filters" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:21 +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:23 +#: contrib/admindocs/templates/admin_doc/model_detail.html:16 +#: contrib/admindocs/templates/admin_doc/model_index.html:10 +#: contrib/admindocs/templates/admin_doc/model_index.html:14 +msgid "Models" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:24 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:26 +#: contrib/admindocs/templates/admin_doc/view_detail.html:8 +#: contrib/admindocs/templates/admin_doc/view_index.html:9 +#: contrib/admindocs/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:27 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/index.html:30 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:10 +msgid "Please install docutils" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:17 +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/missing_docutils.html:19 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:21 +#, python-format +msgid "Model: %(name)s" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:30 +msgid "Fields" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:35 +msgid "Field" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:36 +msgid "Type" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:37 +#: contrib/admindocs/templates/admin_doc/model_detail.html:60 +msgid "Description" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:53 +msgid "Methods with arguments" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:58 +msgid "Method" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:59 +msgid "Arguments" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_detail.html:76 +msgid "Back to Model documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_index.html:18 +msgid "Model documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/model_index.html:43 +msgid "Model groups" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_detail.html:8 +msgid "Templates" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_detail.html:13 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_detail.html:16 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#: contrib/admindocs/templates/admin_doc/template_detail.html:19 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_detail.html:22 +msgid "(does not exist)" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_detail.html:26 +msgid "Back to Documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:12 +msgid "Template filters" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:16 +msgid "Template filter documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:22 +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:43 +msgid "Built-in filters" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_filter_index.html:23 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:12 +msgid "Template tags" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:16 +msgid "Template tag documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:22 +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:43 +msgid "Built-in tags" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/template_tag_index.html:23 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_detail.html:12 +#, python-format +msgid "View: %(name)s" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_detail.html:23 +msgid "Context:" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_detail.html:28 +msgid "Templates:" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_detail.html:32 +msgid "Back to View documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:16 +msgid "View documentation" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:22 +msgid "Jump to namespace" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:27 +msgid "Empty namespace" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:40 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:42 +msgid "Views by empty namespace" +msgstr "" + +#: contrib/admindocs/templates/admin_doc/view_index.html:49 +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +#: contrib/admindocs/views.py:72 contrib/admindocs/views.py:73 +#: contrib/admindocs/views.py:75 +msgid "tag:" +msgstr "" + +#: contrib/admindocs/views.py:103 contrib/admindocs/views.py:104 +#: contrib/admindocs/views.py:106 +msgid "filter:" +msgstr "" + +#: contrib/admindocs/views.py:162 contrib/admindocs/views.py:163 +#: contrib/admindocs/views.py:165 +msgid "view:" +msgstr "" + +#: contrib/admindocs/views.py:192 +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#: contrib/admindocs/views.py:196 +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +#: contrib/admindocs/views.py:201 contrib/admindocs/views.py:202 +#: contrib/admindocs/views.py:217 contrib/admindocs/views.py:240 +#: contrib/admindocs/views.py:245 contrib/admindocs/views.py:260 +#: contrib/admindocs/views.py:301 contrib/admindocs/views.py:306 +msgid "model:" +msgstr "" + +#: contrib/admindocs/views.py:213 +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:293 +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#: contrib/admindocs/views.py:240 contrib/admindocs/views.py:301 +#, python-format +msgid "all %s" +msgstr "" + +#: contrib/admindocs/views.py:245 contrib/admindocs/views.py:306 +#, python-format +msgid "number of %s" +msgstr "" + +#: contrib/admindocs/views.py:398 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68f8cb001372b7644cd6c7e72afaeed2b154d5f7 GIT binary patch literal 486 zcmZ8d!A=4(5Y^~ukDfh@i3f;w+eHm)5hE%j7>I z;!9rI*S^lY>DS)w#};9mxKBJJ?hucOE2P9vx;&?K<@v?P*%v(tte>+-?YyxlA%9U= z*l4UP>jE44!sP6FQFxYF3DM|2V>eE#KwfsMf|k$_$r%#~OPY`*QZ$c5A_N)PSihQ8 z&Hug>L@G~Cj|3qaC?8nn6#7yH>m=MMMB`zgO|DD0pfn_}%C(FQPVFVV!D68b%`&a# z61rHF#?PSES@_^oX;d9*vk)rD`Et38=?uM@>bH1e=e*j??0LmEqw?~n9M|~NdEoVE z*dKQPJ|u}nbYn4Sq@eE=O&s)F;8m#%wqP<-&g;;A$a*aO^Q~G=wPRhJ*xXOC lH@Sp$uV_>*C@||;H}?{-T1($\n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c3a8bf57b1445574f57e6cac2dfd82d73355cff3 GIT binary patch literal 1821 zcmeH`OK%fN5XYN07?$@#0(Mm#BH0RKj{yOh5QIV!o)Hlkj)b%a#cnIY6BOvFgkNptjx~ISvI0tfm4~F0n zy)Qu4`zOeC{sKAQKOpP<0J7e*5W{*bCSD(ctoIKPTf{>UKk*n7=Xo;rpMhNWImmk7 zfE@oGWWE1_9De{o+~Tb;9yQor80XppKjxTq>c)iD6x=cDB#3JlPht#%nL_DQ&QiWoTMIBn^=$^DCqpE z;5d(>`>9&Nvh{WfBQK;CBOK>E*H?7OL?%Oz^oQv1AS3OmHa)U*ce<__fyXK&AzEm z`@+c(qjps~A9SqL4#ze&qRUci-0xMDa_i4P4cv2CXbWoCDlo6@&?rh-WO4;wX(9(^jsqCtJP-DIXRGsmWB^f*)3bYzCwjp^FYkL}0)*ggU@)#i8r literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..e513e888b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Home" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentation for this page" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filters" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r not found in app %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "the related `%(app_label)s.%(data_type)s` object" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "related `%(app_label)s.%(object_name)s` objects" + +#, python-format +msgid "all %s" +msgstr "all %s" + +#, python-format +msgid "number of %s" +msgstr "number of %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s does not appear to be a urlpattern object" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..26e4989e57eb1784854570d01f6445d032ef9925 GIT binary patch literal 6071 zcmbuCTa08y8OIAj#nDwn@xn!m%ixSm_ss5cS$cN|7Is$`c4S!wB3^*%?wX$JK7HzN zF1F176Pj+u*yvXF%EiQ*amfTkvA=CGef#AFK7hfwE7%z2tud z_yeZ5fbRic1QA938H7~*735F-lb=t6!c0}k56XE%Q0UKqPlAtucY)W=DfK}x2Iai3fLDP}fTHJ*K+)qTpy>NM@KW#< z@WbHWL0G9vP@Y$HIrtnn4~idN1V!$f5auBGI4I}*0u(;K2Hy?742nJe0)7a56%@bh z;!u%$5fuBZRP%ixB=vE!?t*yCc1A^Khq%DK0L?+4dFq3eROZvu)v9s^NbJpszT?^O5<_%!oh zf#TOM@FQ}54HP}U3CjNOf)9aDRr3om7NV$K;630~;9hVH%DyK-(c_0;2mBexpZXU+ zV&7c|$&u|=-@Bo>;_)l9Bse2gLSehXuTA+dQq1GA{x7zY^g>}Bi^Z>2rO_8+h2 zOQ6_V{3g#r2_c{4Rs5&sG|vOhp3)md+{>MhJNiJ+_wDNZ!bTBA565O~7qbJ)VXdt{ z#dJndq&o@b)O@D<-ex-Xxi(2+O{#ORyH*dnYzRDMsno#z4huE zxqsZoPE?ktiT&y=hn>H45Gsx7PKF;mwyrT}=te3hZ$h=*O zZ8P0%GT;7b!(+Bhm+8a|tU6+Po8e9Sm}RSzq8quM&RlLaL<1XJEN1()6__M9o zp_4b=w;L|TBd0bUY;rqJB4}k_k+B6+)%#1{oTyFQujorpW!j{yPK?9!k(EvPrpc$= z+Um$S$+xtGOO}|PRY#qT`sHs1lm@G?WER4$7OQ9C5F|+wxl*W!Nu8XPX)JE0C&|%9 zxCLQ-ktapoR-g1^tL`esiF}?3AuE~Q@`c_={TQvbN;3xW?e;LxrOhj&1?_6PWTmp= zi?%vWcxu0a5K$0eYETJ+U^qPF(rH3vZMA0eP2aBoja|Np3F?3?Lvns$ETLH@TqClB z_B#V#ycu3ir`arcnp%| zV*CR}Z>DzR;5G9Lk&8!**)^+@yt#|0S7x!p^S^a=iRT zw4n;rd>gi(Egg82x>|bV!1AN3(_?1*vyNJyso1O#OS+$Ow)jNU6-xvI)ih!oA9YQ- zq$wV$8*JvS9#sO$dW&SW>G!oGad+;fw);~dRm4x3ji}FIXU(4yxFd_|2%!qKMQX~4 z?BKU5kV_P*e0rbA6*9d_B&>t@(-7!d641iL#if=dlO3GJ#&3=-9E7KjvXJqm4O4$A zlak`~qXj05D5D`v%kZ1#vWZ;2#qO=ds@J(KWU1kInP!15lfq2EZL5&svwWD=t692A ze9vd9G(ks&-0G;f7o!z(Iu);HU++=xcJvDKLHa_j>H9CY%XA8|O z%0f42|DTtV%gAFr}C9u$=1*19$0jy{qlT!Jw!T-eO>q_ezy>eQ(= zokX0u4SQPlESECZ0QbOP+4|+hxwT_!M`qgXZm-OR3q3|WOwyrNoz9n$$i@40Z_}ii z%@5wcezdi3Mki-&*tB&dCe{h#j^5XG`Bc!3wtntJRHP*zQM)9m1${knWT zxDe~B59-~E`{&f$1Fml*_(na4QU7aW=En_+H)zaatIwY`!1Mr9|Kdit=)jm){{{LXHS^iTc7! zT4ZzxZU4GoCul$1_T{)8_{Z0w7Hg_Z2XYK9+%2Aek31pXz zQrGqBa6_EgJG`Ri8M7~56X!a21s%k>vtFJ1YW=D+t|>GLP1(qhU%4H6u`qT{Qr|B| zIZ|rElZLGC+xoclXnmA+bY>8ZToH?Bx{;6R@XDRVnXrjNYaZbcIXu=Q1ZCH-cHFSq zv}q=`8}SjFi>x(MdJq#Ok&O*K^H@4GukJSEr1~9(4z0A{QF^uTR(>a9~9NTa|FDF$hgOqn;XkMgwo)Y`*I z9l>OVEp=-IK`ds;P~49FOhvi@s;h*IxO~{wA$Wrlo{mktDjgef1, 2013-2016 +# Matthieu Desplantes , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-13 08:19+0000\n" +"Last-Translator: Matthieu Desplantes \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administra dokumentaro" + +msgid "Home" +msgstr "Ĉefpaĝo" + +msgid "Documentation" +msgstr "Dokumentaro" + +msgid "Bookmarklets" +msgstr "Legosignetoj" + +msgid "Documentation bookmarklets" +msgstr "Dokumentaraj legosignetoj" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Por instali legosignetoj, trenu la ligilon ĝis via legosignan ilobreton, aŭ " +"dekstre klaku la ligilon kaj aldoni ĝin al viaj markiloj. Nun vi povas " +"elekti la legosignetoj de ajna paĝo en la retejo." + +msgid "Documentation for this page" +msgstr "Dokumentaro por tiu paĝo" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Sendas vin el ajna paĝo, al la dokumentado de la vido kiu generis tiun paĝon." + +msgid "Tags" +msgstr "Etikedoj" + +msgid "List of all the template tags and their functions." +msgstr "Listigi ĉiujn ŝablonmarkojn kaj iliajn funkciojn." + +msgid "Filters" +msgstr "Filtriloj" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtriloj estas agoj kiuj povas esti aplikitaj al variabloj en ŝablono por " +"ŝanĝi la eligon." + +msgid "Models" +msgstr "Modeloj" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeloj estas priskriboj de ĉiuj objektoj en la sistemo kaj iliaj rilataj " +"kampoj. Ĉiu modelo havas liston de kampoj kiu povas esti alirita kiel " +"ŝablona variabloj" + +msgid "Views" +msgstr "Vidoj" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ĉiu paĝo sur la publika retejo estas produktita per vido. La vido difinas " +"kiun ŝablonon estas uzita por produkti la paĝon kaj kiuj objektoj estas " +"haveblaj en tiu ŝablono." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Iloj por via retumilo por rapide aliri la administran funkciaron." + +msgid "Please install docutils" +msgstr "Bonvolu instali docutils-n" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Bonvolu demandi al viaj administrantoj instali docutils-n." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Kampoj" + +msgid "Field" +msgstr "Kampo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Priskribo" + +msgid "Methods with arguments" +msgstr "Metodoj kun argumentoj" + +msgid "Method" +msgstr "Metodo" + +msgid "Arguments" +msgstr "Argumentoj" + +msgid "Back to Model documentation" +msgstr "Reen al la modelo dokumentaro" + +msgid "Model documentation" +msgstr "Modelo dokumentaro" + +msgid "Model groups" +msgstr "Modelaj grupoj" + +msgid "Templates" +msgstr "Ŝablonoj" + +#, python-format +msgid "Template: %(name)s" +msgstr "Ŝablono: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Ŝablono: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +msgid "(does not exist)" +msgstr "(ne ekzistas)" + +msgid "Back to Documentation" +msgstr "Reen al dokumentaro" + +msgid "Template filters" +msgstr "Ŝablonaj filtriloj" + +msgid "Template filter documentation" +msgstr "Ŝablona filtrila dokumentaro" + +msgid "Built-in filters" +msgstr "Integritaj filtriloj" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Por uzi tiujn filtrilojn, metu %(code)s en via ŝablono antaŭ " +"uzi la filtrilo." + +msgid "Template tags" +msgstr "Ŝablonaj etikedoj" + +msgid "Template tag documentation" +msgstr "Ŝablona etikeda dokumentado" + +msgid "Built-in tags" +msgstr "Integritaj etikedoj" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Por uzi tiujn etikedojn, metu %(code)s en via ŝablono antaŭ uzi " +"la etikedon." + +#, python-format +msgid "View: %(name)s" +msgstr "Vido: %(name)s" + +msgid "Context:" +msgstr "Kunteksto:" + +msgid "Templates:" +msgstr "Ŝablonoj:" + +msgid "Back to View documentation" +msgstr "Reen al vidaj dokumentaro" + +msgid "View documentation" +msgstr "Vida dokumentaro" + +msgid "Jump to namespace" +msgstr "Iri al nomspaco" + +msgid "Empty namespace" +msgstr "Malplena nomspaco" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vidoj per nomspaco %(name)s" + +msgid "Views by empty namespace" +msgstr "Vidoj per malplenaj nomspacoj" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Vida funkcio: %(full_name)s. Nomo: %(url_name)s.\n" + +msgid "tag:" +msgstr "etikedo:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vido:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikaĵo %(app_label)r ne trovita" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r netrovita en aplikaĵo %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "la rilatita `%(app_label)s.%(data_type)s` objekto" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "rilatitaj `%(app_label)s.%(object_name)s` objektoj" + +#, python-format +msgid "all %s" +msgstr "ĉiuj %s" + +#, python-format +msgid "number of %s" +msgstr "nombro da %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne ŝajnas esti URLmotiva objekto" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bf264a80ce20ca565936bc59febf7d420d2de459 GIT binary patch literal 6682 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 DnI5|A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..2747c1ab8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,293 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012-2013 +# Claude Paroz , 2014 +# Eduardo , 2017 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015 +# Herty Nava , 2013 +# Jannis Leidel , 2011 +# José Luis , 2016 +# Josue Naaman Nistal Guerra , 2014 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-11 05:39+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentación Administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a su barra de favoritos, o " +"pulse con el botón derecho el enlace y añádalo a sus favoritos. Ahora puede " +"seleccionar el bookmarklet desde cualquier página del sitio. " + +msgid "Documentation for this page" +msgstr "Documentación para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Lo lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas la etiquetas de plantillas y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son acciones que se pueden aplicar a variables en una plantilla " +"para alterar el resultado." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripciones de todos los objetos en el sistema y sus " +"campos asociados. Cada modelo tienen una lista de campos a los que se puede " +"acceder como variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página en el sitio público se genera a través de una vista. La vista " +"define que plantilla se usa para generar la página y que objetos están " +"disponibles para esa plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para el navegador para acceder a funciones de administración " +"rápidamente." + +msgid "Please install docutils" +msgstr "Por favor, instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"El sistema de documentación del administrador requiere la librería de Python " +"docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, pida al administrador que instale docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Volver a la documentación de modelos" + +msgid "Model documentation" +msgstr "Documentación de modelos" + +msgid "Model groups" +msgstr "Grupo de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Buscar ruta de la plantilla %(name)s:" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de los filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros integrados" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estos filtros, incluya %(code)s en su plantilla " +"antes de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de las etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas integradas" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas etiquetas, incluya %(code)s en su plantilla " +"antes de utilizar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "Volver a la documentación de vistas" + +msgid "View documentation" +msgstr "Documentación de vistas" + +msgid "Jump to namespace" +msgstr "Ir al espacio de nombres" + +msgid "Empty namespace" +msgstr "Espacio de nombres vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visualizaciones por espacio de nombres %(name)s" + +msgid "Views by empty namespace" +msgstr "Visualizaciones por espacio de nombres vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Visualizar función: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicación %(app_label)r no encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"El modelo %(model_name)r no se ha encontrado en la aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto relacionado `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "todo %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1bae5242321fe4e690b51b57605a73816ee5efa5 GIT binary patch literal 6658 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 H;sEtunPar{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..07e8021e4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Federico Bond , 2013 +# Jannis Leidel , 2011 +# Ramiro Morales, 2012-2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-21 12:57+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentación administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a su barra\n" +"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus " +"favoritos.\n" +"Ahora puede seleccionar el bookmarklet desde cualquier página en el sitio." + +msgid "Documentation for this page" +msgstr "Documentación de esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Le lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas las etiquetas de plantilla y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son acciones que pueden ser aplicadas a variables en una " +"plantilla para alterar el resultado final." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripciones de todos los objetos en el sistema y sus " +"campos asociados. Cada modelo contiene una lista de campos accesibles como " +"variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página en el sitio público es generada por una vista. La vista define " +"qué plantilla es utilizada para generar la página y qué objetos están " +"disponibles para esta plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para su navegador para acceder rápidamente a la funcionalidad " +"de administración." + +msgid "Please install docutils" +msgstr "Por favor instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"El sistema de documentación de admin requiere la biblioteca Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor solicite a sus administradores de sistemas que instalen docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Volver a documentación de modelos" + +msgid "Model documentation" +msgstr "Documentación de modelos" + +msgid "Model groups" +msgstr "Grupos de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Ruta de búsqueda para la plantilla %(name)s:" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros Django 'de fábrica'" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para usar estos filtros, escriba %(code)s en su plantilla antes " +"de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas Django 'de fábrica'" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para usar estas etiquetas, escriba %(code)s en su plantilla " +"antes de usar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "Volver a documentación de vistas" + +msgid "View documentation" +msgstr "Documentación de vistas" + +msgid "Jump to namespace" +msgstr "Ir a espacio de nombres" + +msgid "Empty namespace" +msgstr "Espacio de nombres vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistas por espacio de nombres %(name)s" + +msgid "Views by empty namespace" +msgstr "Vistas por espacio de nombres vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Función vista: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicación %(app_label)r no encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos los %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b4ce79b05a26a2e47dedcd150466fa41da75cfe2 GIT binary patch literal 6476 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 000000000..abe7ac262 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,281 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlos Muñoz , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentación Administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentación de Bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a tu barra de marcadores, o " +"haga clic derecho en el enlace y agregarlo a tus marcadores. Ahora puede " +"seleccionar el bookmarklet desde cualquier página en el sitio." + +msgid "Documentation for this page" +msgstr "Documentación para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Ir desde cualquier página a la documentación de vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas las etiquetas de plantillas y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son acciones que pueden ser aplicadas a variables en la " +"plantilla para cambiar el resultado." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripción de los objetos del sistema y sus campos " +"asociados. Cada modelo tiene una lista de campos a la que se puede acceder " +"como variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página del sitio es generada por una vista. En la vista se define que " +"plantilla se utilizara para generar la página y que objetos están " +"disponibles para esa plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para su navegador para acceder rápidamente a la funcionalidad " +"de administrador" + +msgid "Please install docutils" +msgstr "Por favor instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"El sistema de documentación de la administración require la biblioteca docutils de Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor pregunte a su administrador como instalar docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "Documentación del Modelo" + +msgid "Model groups" +msgstr "Grupo de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Plantilla: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Burscar ruta para la plantilla \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de los filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros incorporados" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estos filtros, incluya %(code)s en su plantilla " +"antes de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de las etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas incorporadas" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas etiquetas, incluya %(code)s en su plantilla " +"antes de utilizar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "Documentación de la vista" + +msgid "Jump to namespace" +msgstr "Ir al namespace" + +msgid "Empty namespace" +msgstr "Namespace vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistas por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Vistas por namespace vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Ver función: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicación %(app_label)r no encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en la aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto relacionado'%(app_label)s.%(data_type)s'" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objectos relacionados '%(app_label)s.%(object_name)s'" + +#, python-format +msgid "all %s" +msgstr "todo %s" + +#, python-format +msgid "number of %s" +msgstr "numero de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objecto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..164f0618fa3857984f72769a5153c3ceb3b15e95 GIT binary patch literal 1853 zcmaizJ!~9B6vqc}_&CB>_$UZOFNLK$nZ1t?h`q)rN^A>9KE+B7i_V$bojXsmJF}UY z^@kLwp+-oEjshXkfJ70A)}o`Kp-e{)Emi*Sc5R;(S&Vk}x3lx+y*F>>|LEMzHv;V~ z^mowzKz|qg!Bcpl{R6%S{tKQ3FFY;8OW+*%Hn;$u2M6GDU;)m6d*E&GbMSrePw-jr z%rn*eS?~pnUjxs8=Ruyo2(q7MJ??@W_X^knmqGR)z%IBC^7@~^ACTiO;4H?Q_{r-Y zfG>kzffvAUYd!=y&R-zMeFWYF{|2vuAK)j??|_`=7hnVY62v3E#*6)b2eRFdHGc-V zJ`cgm;O`)>{}1Fk%)prQp9i_bFQRi}-*2F^uh-GJu^&DcEER8}bK|{mTyC#csOpGs zq%O|Y|4?p$Qi$i#IUcuH_%-V(waSyRfn-rA=_ptlDw0&XtdJonXUGoksw9YO*51pd zyO*ip#j;JxT$vz)w&vuBhNl|R$RfhF_EgBR6015x053kVxe_CQnGD%~Tl8(JGMa7X%q=5x)pC=~j%;aC(uQ}9 zdAzqWIaFE8RcpK$$T40jFEVy2HWA1RnZcVEqeY{oPLJ{s7V8XGqU(RHULrxqlEdsm`vFX}B&@5A`=!d$o4?ZPm+ zrFJy?JYlzRXxE+VqBYi~57EF$C?e#G=FTz;YP|uD<-k2HshG) zhdLak9MdFLV|>FgqOL?A{Ay0jQ97lCYWhfvlOY=@A0!nA-;cGC6O}pZ#hTHHwqjjTmZ=>HI}g*O zl-d1KBdyvV+Rrd~D7Pb@_=)=fzxPXckhS1yjoBwfMhYb~IKR~56GF>$A}epx(x?T8 z{8oa7>ma?@z{v)kW%%6WkWh(Dt)~nf5@Y!}TgwkL2fyXYS>8BiS!V%;|0h7!8|q<@ apBJi*9SdCA%EOZmP6%;ox!6%I7LNh`9Qca> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..3242cb049 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011-2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentación de esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Le lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "ver:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos los %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..434fc877cdbaca5ea8bb85811f0acef4bac7d45b GIT binary patch literal 6663 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..bfbca3961 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hotellook, 2014 +# Leonardo J. Caballero G. , 2016 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Yoel Acevedo\n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentación Administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentación de Bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a tu barra de marcadores, o " +"haga clic derecho en el enlace y agregarlo a tus marcadores. Ahora puede " +"seleccionar el bookmarklet desde cualquier página en el sitio." + +msgid "Documentation for this page" +msgstr "Documentación para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Ir desde cualquier página a la documentación de vista que la genera esa " +"página." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas las etiquetas de plantillas y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son acciones que pueden ser aplicadas a variables en la " +"plantilla para cambiar el resultado." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripción de los objetos del sistema y sus campos " +"asociados. Cada modelo tiene una lista de campos a la que se puede acceder " +"como variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página del sitio es generada por una vista. En la vista se define que " +"plantilla se utilizara para generar la página y que objetos están " +"disponibles para esa plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para su navegador para acceder rápidamente a la funcionalidad " +"de administrador." + +msgid "Please install docutils" +msgstr "Por favor, instale la biblioteca docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"El sistema de documentación de la administración requiere la biblioteca docutils de Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, pregunte a su administrador como instalar la biblioteca docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Volver a la documentación de Modelos" + +msgid "Model documentation" +msgstr "Documentación del Modelo" + +msgid "Model groups" +msgstr "Grupo de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Plantilla: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Buscar ruta para la plantilla \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de los filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros incorporados" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estos filtros, incluya %(code)s en su plantilla " +"antes de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de las etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas incorporadas" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas etiquetas, incluya %(code)s en su plantilla " +"antes de utilizar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "Volver a la documentación de Vistas" + +msgid "View documentation" +msgstr "Documentación de la vista" + +msgid "Jump to namespace" +msgstr "Ir al namespace" + +msgid "Empty namespace" +msgstr "Namespace vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistas por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Vistas por namespace vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Ver función: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicación %(app_label)r no encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en la aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto relacionado '%(app_label)s.%(data_type)s'" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos relacionados '%(app_label)s.%(object_name)s'" + +#, python-format +msgid "all %s" +msgstr "todo %s" + +#, python-format +msgid "number of %s" +msgstr "numero de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..81898a8a163a0937ce6ecd05207e14fb82c0c629 GIT binary patch literal 6381 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 Qa@hslC`}4QAIsGL09lG(DF6Tf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..ade754205 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2013,2015 +# Martin , 2021 +# Martin , 2016 +# Marti Raudsepp , 2014 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-22 11:26+0000\n" +"Last-Translator: Martin \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administreerimise Dokumentatsioon" + +msgid "Home" +msgstr "Kodu" + +msgid "Documentation" +msgstr "Dokumentatsioon" + +msgid "Bookmarklets" +msgstr "Järjehoidjandid" + +msgid "Documentation bookmarklets" +msgstr "Dokumentatsiooni järjehoidjandid" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Järjehoidjandite paigaldamiseks lohista viit järjehoidjateribale või tee " +"parem-klikk viidal ning lisa see järjehoidjatesse. Seejärel võite " +"järjehoidjandi aktiveerida suvaliselt saidi lehelt." + +msgid "Documentation for this page" +msgstr "Selle lehekülje dokumentatsioon" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Suunab teid suvalisel lehel asudes selle vaate dokumentatsioonile, mis antud " +"lehe genereerib." + +msgid "Tags" +msgstr "Lipikud" + +msgid "List of all the template tags and their functions." +msgstr "Nimekiri kõikidest malli märgistustest ja nende funktsioonidest." + +msgid "Filters" +msgstr "Filtrid" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtrid on tegevused, mida saab mallides külge panna muutujatele muutmaks " +"viimaste väljundit." + +msgid "Models" +msgstr "Mudelid" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Mudelid on süsteemi kõikide objektide ja nende väljade omavaheliste seoste " +"kirjeldused. Igal mudelil on hulk väljasid, mida saab mallide muutujatena " +"kasutada" + +msgid "Views" +msgstr "Vaated" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Avaliku saidi iga leht on genereeritud vaate poolt. Vaade defineerib lehe " +"genereerimiseks kasutatava malli ning objektid mida mall kasutada saab." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Töövahendid sinu brauserile pääsemaks kiiresti ligi administraatori " +"funktsioonidele. " + +msgid "Please install docutils" +msgstr "Palun paigaldage docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Administreerimise dokumentatsioon vajab Python'i docutils teeki." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Palu administraatoril paigaldada docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Mudel: %(name)s" + +msgid "Fields" +msgstr "Väljad" + +msgid "Field" +msgstr "Väli" + +msgid "Type" +msgstr "Tüüp" + +msgid "Description" +msgstr "Kirjeldus" + +msgid "Methods with arguments" +msgstr "Meetodid parameetritega" + +msgid "Method" +msgstr "Meetod" + +msgid "Arguments" +msgstr "Parameetrid" + +msgid "Back to Model documentation" +msgstr "Tagasi Mudeli dokumentatsiooni" + +msgid "Model documentation" +msgstr "Mudeli dokumentatsioon" + +msgid "Model groups" +msgstr "Mudeligrupid" + +msgid "Templates" +msgstr "Mallid" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mall: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mall: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Otsinguteekond mallile %(name)s:" + +msgid "(does not exist)" +msgstr "(pole olemas)" + +msgid "Back to Documentation" +msgstr "Tagasi Dokumentatsiooni" + +msgid "Template filters" +msgstr "Mallifiltrid" + +msgid "Template filter documentation" +msgstr "Mallifiltrite dokumentatsioon" + +msgid "Built-in filters" +msgstr "Sisseehitatud filtrid" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Et kasutada neid filtreid, pane malli sisse %(code)s enne kui " +"kasutad filtrit." + +msgid "Template tags" +msgstr "Malli märgendid" + +msgid "Template tag documentation" +msgstr "Malli märgendite dokumentatsioon" + +msgid "Built-in tags" +msgstr "Sisseehitatud märgendid" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Et kasutada neid märgendeid pane malli %(code)s enne kui " +"kasutad märgendit." + +#, python-format +msgid "View: %(name)s" +msgstr "Vaade: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Mallid:" + +msgid "Back to View documentation" +msgstr "Tagasi Vaate dokumentatsiooni" + +msgid "View documentation" +msgstr "Vaata dokumentatsiooni" + +msgid "Jump to namespace" +msgstr "Mine nimeruumile" + +msgid "Empty namespace" +msgstr "Tühi nimeruum" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vaated nimeruumi kaupa %(name)s" + +msgid "Views by empty namespace" +msgstr "Vaated tühja nimeruumi kaupa" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Vaate funktsioon: %(full_name)s. Nimi: %(url_name)s.\n" + +msgid "tag:" +msgstr "lipik:" + +msgid "filter:" +msgstr "filtreeri:" + +msgid "view:" +msgstr "vaade:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Rakendust %(app_label)r ei leitud" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Mudelit %(model_name)r ei leitud rakendusest %(app_label)r" + +msgid "model:" +msgstr "mudel:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "seotud `%(app_label)s.%(data_type)s` objekt" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "seotud `%(app_label)s.%(object_name)s` objektid" + +#, python-format +msgid "all %s" +msgstr "kõik %s" + +#, python-format +msgid "number of %s" +msgstr "%s arv" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ei tundu olevat urlpattern objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d72319b4bf4a81310d7381730374d93e3d782541 GIT binary patch literal 6479 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 HFgof#^OtJ5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..055d056e8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,283 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2011-2013 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +# Urtzi Odriozola , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-25 09:47+0000\n" +"Last-Translator: Urtzi Odriozola \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Kudeaketa dokumentazioa" + +msgid "Home" +msgstr "Hasiera" + +msgid "Documentation" +msgstr "Dokumentazioa" + +msgid "Bookmarklets" +msgstr "Markadoreak" + +msgid "Documentation bookmarklets" +msgstr "Dokumentazio markadoreak" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Markadoreak instalatzeko eraman linka zure erreminta panelera (toolbar), edo " +"eskuineko botoiarekin klik egin eta gehitu erreminta panelera. Orain edozein " +"markadore aukera dezakezu webguneko edozein orrialdetatik." + +msgid "Documentation for this page" +msgstr "Web orri honen dokumentazioa" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Edozein orritik, orria sortzen duen bistaren dokumentaziora eramango zaitu." + +msgid "Tags" +msgstr "Etiketak" + +msgid "List of all the template tags and their functions." +msgstr "Template tag guztien eta beraien funtzioen zerrnda." + +msgid "Filters" +msgstr "Iragazkiak" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Txantiloi barneko aldagaien irteera aldatzeko aplikatzen diren ekintzak dira " +"Filter-ak." + +msgid "Models" +msgstr "Ereduak" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Sisteman definitutako objektu eta beraien eremuen zehaztapenak dira " +"modeloak. Modelo bakoitzak eremu zerrenda bat dauka eta eremu hauetako " +"bakoitza txantiloietako aldagai gisa atzitu daiteke." + +msgid "Views" +msgstr "Bistak" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Webgune publikoan agertzen den orri bakoitza bista batek sortzen du. Bistak " +"zehazten duzein txantiloi erabiliko den eta honek eskuragarri izango dituen " +"objektuak." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Adminera azkar sartzeko arakatzailearentzako tresnak" + +msgid "Please install docutils" +msgstr "Instalatu docutils mesedez" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Admin dokumentazio sostemak Pythonen docutils " +"liburutegia behar du." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Eskatu zure administratzaileari docutils " +"instalatzeko." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modeloa: %(name)s" + +msgid "Fields" +msgstr "Eremuak" + +msgid "Field" +msgstr "Eremua" + +msgid "Type" +msgstr "Mota" + +msgid "Description" +msgstr "Deskribapena" + +msgid "Methods with arguments" +msgstr "Argumentudun metodoak" + +msgid "Method" +msgstr "Metodoa" + +msgid "Arguments" +msgstr "Argumentuak" + +msgid "Back to Model documentation" +msgstr "Bueltatu Modeloaren Dokumentaziora" + +msgid "Model documentation" +msgstr "Modeloaren dokumentazioa" + +msgid "Model groups" +msgstr "Modelo taldeak" + +msgid "Templates" +msgstr "Txantiloiak" + +#, python-format +msgid "Template: %(name)s" +msgstr "Txantiloia: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Txantiloia: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "\"%(name)s\" txantiloiaren bilaketa bidea:" + +msgid "(does not exist)" +msgstr "(ez da existitzen)" + +msgid "Back to Documentation" +msgstr "Bueltatu Dokumentaziora" + +msgid "Template filters" +msgstr "Txantiloi iragazkiak" + +msgid "Template filter documentation" +msgstr "Txantiloi iragazkien dokumentazioa" + +msgid "Built-in filters" +msgstr "Iragazki integratuak" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Iragazki hauek erabiltzeko jarri %(code)s iragazkia erabili " +"aurretik zure txantiloian" + +msgid "Template tags" +msgstr "Template tags" + +msgid "Template tag documentation" +msgstr "Template tag documentazioa" + +msgid "Built-in tags" +msgstr "Etiketa integratuak" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Tag hauek erabiltzeko, jarri %(code)s txantiloian taga erabili " +"aurretik." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Kontextua:" + +msgid "Templates:" +msgstr "Txantiloia:" + +msgid "Back to View documentation" +msgstr "Bueltatu Bisten Dokumentaziora" + +msgid "View documentation" +msgstr "Bisten dokumentazioa" + +msgid "Jump to namespace" +msgstr "Joan izen-espaziora" + +msgid "Empty namespace" +msgstr "Izen-espazio hutsa" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Bistak %(name)s izen-espazio arabera" + +msgid "Views by empty namespace" +msgstr "Bistak izen-espazio hutsen arabera" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Bista funtzioa: %(full_name)s. Izena: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiketa:" + +msgid "filter:" +msgstr "filtroa:" + +msgid "view:" +msgstr "bista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r aplikazioa ez da aurkitu" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(model_name)r modeloa ez da aurkitu %(app_label)r aplikazioan" + +msgid "model:" +msgstr "modeloa:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "erlazionatutako `%(app_label)s.%(data_type)s` objektua" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "erlazionatutako `%(app_label)s.%(object_name)s` objektuak" + +#, python-format +msgid "all %s" +msgstr "%s dena" + +#, python-format +msgid "number of %s" +msgstr "%s zenbakia" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ez dirudi url heredu objetua" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5ef86837784e5c71104b054ad2debea37dad76fe GIT binary patch literal 7499 zcmbuCU5q4E6~`|hq7I^hiXaHr)sY$5?wQ>MTzfxYcUc6&$_N9ZBtlJh^-M9{T}@T> z&JIDtlHHwAH--m%fN0D@!VKeLJIu1Ml3>D{!OsUx^-Ls$Xky|63F-qeM1SYrs_N?A z-7IP))&IIx_nv#s|NQT{w_m^L+#e{eUEG&*UvsunUk7hHmmjX5y-%sHg3I7~@SO9M z`Y1RGO8*_;W#Bi#4}uSYp8yXe@1F!eMf*7TA@KL0jDH=x0DKGl0QfF=K6u{y?fZ*B z8K*(9zXg06{2KTX@LwP)aDE0#I!{9+s z_<0<>1bh+{9#=q#KSky_!202 zUrXBm1Z6#4f^p&N+5~R~MSu5#GT$`#F!(UIi}~IGpQ61DaXkUP0oK8X2u|YoD=2Zk z#SfvV^O;2KY4BQbG{Gt;eE$#>{Vjr`j}=hjdl~#9_)AdworSn1t_whEUk~DriIGRO zg zXjHBn%&+~q9uQ5*MY@gO&}Q^`4!D^+e~G>%2c*(m>-jBlOTL8D{Ph_clIJ0A;pt1< z8@YuO(GO`=JGi%V%O#v|Gf&i7P;zs1(k_6aSy^{-$@-A%bKJ5vM8|4CbKUK^GrHPp zlq1h?l=RlJUvak&4pm#V+ISO(%-nprQSV2i$U`hO(~iJ}-=h)s9NtYw#2}k+;{?H~QsP-EBm){D#`m zZ0f-wjNVssCfwR^U?!>htwu%d2qsO>Q0;We(=ui6*!1llVyod{-fsHM@X+_k_owSl zFkN#aEVsN`RPY+Q3c5k=MdVC|YM0-L+507Y-cMB@+NQiv zH=RjW?RLsj=1KbvUc0*4ny7hY9eR55zR8f0W< z%EL_L)|)l@%D7g@5U5JWTieX2okk_;Z!;BYC*bW~$AkKsD}$mbC(5i9)$V#Tn$;qg zu<4Xtb(81TD)u)7EMW;+V@7VNTVx8@s^{n60)xfV4)vTq_xbODLKwHie(oA$IFQE-qa#2*bAy4gB zaiV5i$Osh?7~;r~7i0@6EUGPX zXoy-n3_uarytdw6eY8uNP|gwx+JzfNZGT5Z5?@Vdr6JU zx*ktI+hyOYn*Oi3?&#rkeNDYc?dG!7ebwhmHci)lh z*Ld@hC&Dw4M&>30Czvg&@h;K%I<;O`0^$;72=q4KWrLxz6qJ-% z;U(2*)hF6mF>$?q>Tnhn30$PGiy^xWjGwK~&fiPI{HX&emjD823whVC?q79qwLF zx)yH4&ywCax^Y8c^qRuxCOvvxX~U+gN4W-WbHb=F9ypDVX#Ak0182&k=uJ-Pt>&@F zBRk;44U=`Yz+&02Z)Z?rvc;BA7bEh>yi>HN=;r+-VB{zTC-i&1J(LBMe{ zpH-h`N*q}`%mG+QLKTcj8NiGfBGAs9&|6d{8swuouh5BFu_$izhO8hG z^NAI+vh!-d4a1L#!1BfljnY>vkFu~3RHEeW^vm$F7{AB@l}sn`n*yI@z*tU4ChI-TPR}>7n&h|5 z2hw=5*hMbJ(-)=OcOI1~bE=n^vi0A$Qu%4AdFC~8O*RsiL`U`< z$((sK^+LQk1RcDWWkbcW`=zXN@(_e7ow3~EE+C-HT`(;f z5d{UnoFUk<6F*~gh{ijI%vfW`QEX^_RdkxY7v=u6H>ZEOK{Wk~87 z&74@rcBV+9hR$4{v5qNNnaKs&pgQ~MmX0fGsRb+o%-h;+Hr-@rk=c`lF(-~@HQ4N` zwmevt`salS215Um>>G*H#axa<-b<0oHep+U?7p5UQzC!>+1*d`-_Fp>+Fq1h&DuEG zZg;cAn5oBEndp`U>ic_lFF4<-cyY?{7;W0b8<=1ug zQZtHeF>6Z`t%%2xeeV7<1fhr^<=FJ!j7saC>X`jrcGxgi%p?YON;&(&ibN~_L=-5Y uF7QX>)t}`5CY, 2011-2012,2020 +# Ali Vakilzade , 2015 +# Eric Hamiter , 2013 +# Jannis Leidel , 2011 +# Pouya Abbassi, 2016 +# rahim agh , 2021 +# Reza Mohammadi , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-03 06:13+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "مستندات مدیریت" + +msgid "Home" +msgstr "خانه" + +msgid "Documentation" +msgstr "مستندات" + +msgid "Bookmarklets" +msgstr "Bookmarklet ها" + +msgid "Documentation bookmarklets" +msgstr "مستندات bookmarklet ها" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"برای نصب بوکمارکلت‌ها، لینک را به نوار‌ابزار بوکمارک خود بکشید، یا راست‌کلیک " +"کنید و به بوکمارکهای خود اضافه کنید. حالا شما میتوانید از هر صفحه ای در سایت " +"بوکمارکلت انتخاب کنید." + +msgid "Documentation for this page" +msgstr "مستندات این صفحه" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"شما را از هر صفحه‌ای که باشید به مستندات نمایی که صفحه را ایجاد کرده می‌برد" + +msgid "Tags" +msgstr "برچسب‌ها" + +msgid "List of all the template tags and their functions." +msgstr "لیست همه برچسب‌های قالب‌ها و توابعشان" + +msgid "Filters" +msgstr "فیلترها" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"فیلترها عملیاتی هستند که میتوان روی متغیرها و قالب‌ها اعمال شود تا خروجی را " +"تغییر دهند." + +msgid "Models" +msgstr "مدل‌ها" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"مدلها توضحاتی هستند از اشیایی در سیستم و فیلدهای مرتبط. هر مدل یک لیست از " +"فیلد یک لیست از فیلدها را دارد که میتواند از طریق متغیرهای قالب در دسترس " +"قرار بگیرد." + +msgid "Views" +msgstr "نمایش ها" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"هر صفحه در وبسایت عمومی با یک نمایش ساخته میشود. نمایش تعیین میکند کدام قالب " +"برای ساخت صفحه استفاده شود و کدام شیء برای قالب در دسترس باشد." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "ابزار مرورگر خود را به سرعت قابلیت اداری دسترسی داشته باشید." + +msgid "Please install docutils" +msgstr "لطفاً docutils نصب کنید" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"سیستم مستندات مدیر نیازمند کتابخانه‌ی docutils " +"پایتون است." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"لطفا از مدیر خود درخواست کنید تا کتابخانه‌ی docutils " +"را نصب کند." + +#, python-format +msgid "Model: %(name)s" +msgstr "مدل: %(name)s" + +msgid "Fields" +msgstr "فیلدها" + +msgid "Field" +msgstr "فیلد" + +msgid "Type" +msgstr "نوع" + +msgid "Description" +msgstr "توضیحات" + +msgid "Methods with arguments" +msgstr "متدهایی با آرگومانها" + +msgid "Method" +msgstr "متد" + +msgid "Arguments" +msgstr "آرکومانها" + +msgid "Back to Model documentation" +msgstr "برگشت به مستندات مدل" + +msgid "Model documentation" +msgstr "مستندات مدل" + +msgid "Model groups" +msgstr "گروه‌های مدل" + +msgid "Templates" +msgstr "قالب‌ها" + +#, python-format +msgid "Template: %(name)s" +msgstr "قالب: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "قالب: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "مسیر جستجو برای قالب \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(وجود ندارد)" + +msgid "Back to Documentation" +msgstr "برگشت به مستندات" + +msgid "Template filters" +msgstr "فیلترهای قالب" + +msgid "Template filter documentation" +msgstr "مستندات فیلتر قالب" + +msgid "Built-in filters" +msgstr "فیلترهای از اول موجود" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"برای استفاده از این فیلترها، کد %(code)s را قبل از استفاده از " +"فیلتر، در قالب قرار دهید." + +msgid "Template tags" +msgstr "برچسب‌های قالب" + +msgid "Template tag documentation" +msgstr "مستندات برچسب قالب" + +msgid "Built-in tags" +msgstr "برچسب‌های از اول موجود" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"برای استفاده از این تگ‌ها، کد %(code)s را قبل از استفاده از تگ، " +"در قالب قرار دهید." + +#, python-format +msgid "View: %(name)s" +msgstr "نمایش: %(name)s" + +msgid "Context:" +msgstr "زمینه:" + +msgid "Templates:" +msgstr "قالب‌ها:" + +msgid "Back to View documentation" +msgstr "برگشت به مستندات نمایش" + +msgid "View documentation" +msgstr "مشاهده مستندات" + +msgid "Jump to namespace" +msgstr "پرش به فضای نام" + +msgid "Empty namespace" +msgstr "فضای نام خالی" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "نمایشها بر اساس فضای نام %(name)s" + +msgid "Views by empty namespace" +msgstr "نمایشها بر اساس فضای نام خالی" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"نمایش تابع: %(full_name)s. نام: %(url_name)s.\n" + +msgid "tag:" +msgstr "برچسب:" + +msgid "filter:" +msgstr "فیلتر" + +msgid "view:" +msgstr "نمایش:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "برنامه‌ی %(app_label)r پیدا نشد" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "مدل %(model_name)r در برنامهٔ %(app_label)r یافت نشد" + +msgid "model:" +msgstr "مدل:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "شیء «%(app_label)s.%(data_type)s» مرتبط" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "اشیاء «%(app_label)s.%(object_name)s» مرتبط" + +#, python-format +msgid "all %s" +msgstr "همهٔ %s" + +#, python-format +msgid "number of %s" +msgstr "تعداد %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "به نظر نمی رسد %s یک شیء از نوع urlpattern باشد" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8886f15d57f673498299157c4c1f60a1c660892c GIT binary patch literal 6397 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..bec75c98d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,278 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017,2020-2021 +# Elias Luttinen , 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-14 12:19+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Hallinnan ohjeet" + +msgid "Home" +msgstr "Etusivu" + +msgid "Documentation" +msgstr "Ohjeita" + +msgid "Bookmarklets" +msgstr "Kirjanmerkkiset" + +msgid "Documentation bookmarklets" +msgstr "Ohjeiden kirjanmerkkiset" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Asenna kirjanmerkkinen raahaamalla linkki kirjanmerkkien työkalupalkkiin tai " +"napsauttamalla linkkiä oikeanpuoleisella hiiren painikkeella ja valitsemalla " +"kirjanmerkkeihin lisäämisen. Sen jälkeen voit valita kirjanmerkkisen miltä " +"tahansa sivuston sivulta." + +msgid "Documentation for this page" +msgstr "Tämän sivun ohjeita" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Näyttää ohjeet, jotka koskevat ko. sivun luonutta näkymää." + +msgid "Tags" +msgstr "Tagit" + +msgid "List of all the template tags and their functions." +msgstr "Lista kaikista mallinetunnisteista ja niiden toiminnasta." + +msgid "Filters" +msgstr "Suodattimet" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Suotimet ovat toimintoja, jotka käsittelevät mallineessa käytettävän " +"muuttujan ulostuloa." + +msgid "Models" +msgstr "Mallit" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Mallit kuvaavat järjestelmän kaikkia objekteja ja niihin liittyviä kenttiä. " +"Kenttiä pystyy käyttämään mallineista mallinemuuttujina." + +msgid "Views" +msgstr "Näkymät" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Jokainen sivuston sivu on näkymän luoma. Näkymä määrittelee mitä mallinetta " +"sivun luontiin käytetään ja mitä objekteja mallineella on käytössä." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Selaintyökaluja, joilla pääset nopeasti hallinnointitoimintoihin." + +msgid "Please install docutils" +msgstr "Ole hyvä ja asenna docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Hallinnan dokumentaatio vaatii Pythonin docutils-" +"kirjaston." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Pyydä ylläpitäjiä asentamaan docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Malli: %(name)s" + +msgid "Fields" +msgstr "Kentät" + +msgid "Field" +msgstr "Kenttä" + +msgid "Type" +msgstr "Tyyppi" + +msgid "Description" +msgstr "Selite" + +msgid "Methods with arguments" +msgstr "Metodit argumentteineen" + +msgid "Method" +msgstr "Metodi" + +msgid "Arguments" +msgstr "Argumentit" + +msgid "Back to Model documentation" +msgstr "Takaisin mallidokumentaatioon" + +msgid "Model documentation" +msgstr "Mallidokumentaatio" + +msgid "Model groups" +msgstr "Malliryhmät" + +msgid "Templates" +msgstr "Mallineet" + +#, python-format +msgid "Template: %(name)s" +msgstr "Malline: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Malline: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Mallineen %(name)s hakupolku" + +msgid "(does not exist)" +msgstr "(ei ole olemassa)" + +msgid "Back to Documentation" +msgstr "Takaisin dokumentaatioon" + +msgid "Template filters" +msgstr "Mallinesuotimet" + +msgid "Template filter documentation" +msgstr "Mallinesuodindokumentaatio" + +msgid "Built-in filters" +msgstr "Sisäänrakennetut suotimet" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Käyttääksesi näitä suotimia, sisällytä %(code)s mallineesi " +"alkuun." + +msgid "Template tags" +msgstr "Mallinetunnisteet" + +msgid "Template tag documentation" +msgstr "Mallinetunnistedokumentaatio" + +msgid "Built-in tags" +msgstr "Sisäänrakennetut tunnisteet" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Käyttääksesi näitä tunnisteita, sisällytä %(code)s mallineesi " +"alkuun." + +#, python-format +msgid "View: %(name)s" +msgstr "Näkymä: %(name)s" + +msgid "Context:" +msgstr "Konteksti:" + +msgid "Templates:" +msgstr "Mallineet:" + +msgid "Back to View documentation" +msgstr "Takaisin näkymädokumentaatioon" + +msgid "View documentation" +msgstr "Näkymädokumentaatio" + +msgid "Jump to namespace" +msgstr "Siirry nimiavaruuteen" + +msgid "Empty namespace" +msgstr "Tyhjä nimiavaruus" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Näkymät nimiavaruuden %(name)s mukaan" + +msgid "Views by empty namespace" +msgstr "Näkymät tyhjän nimiavaruuden mukaan" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Näkymäfunktio: %(full_name)s. Nimi: %(url_name)s.\n" + +msgid "tag:" +msgstr "tagi:" + +msgid "filter:" +msgstr "suodatin:" + +msgid "view:" +msgstr "näkymä:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Sovellusta %(app_label)r ei löydy" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Sovelluksesta %(app_label)r ei löydy mallia %(model_name)r" + +msgid "model:" +msgstr "malli:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "tähän liittyvä `%(app_label)s.%(data_type)s`-kohde" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "tähän liittyvät `%(app_label)s.%(object_name)s`-kohteet" + +#, python-format +msgid "all %s" +msgstr "kaikki %s" + +#, python-format +msgid "number of %s" +msgstr "%s-kohteiden lukumäärä" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ei näytä olevan urlpattern-olio" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8a47fb9f212ffc9bb27f1b7f693436cf388825de GIT binary patch literal 6755 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 ox_|k?, 2013-2016,2018-2019,2021 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 14:25+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentation technique" + +msgid "Home" +msgstr "Accueil" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Signets" + +msgid "Documentation bookmarklets" +msgstr "Documentation des signets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pour installer des signets, faites glisser le lien vers votre barre de " +"marques-pages, ou effectuez un clic droit sur le lien et ajoutez-le. " +"Maintenant, vous pouvez le sélectionner depuis n'importe quelle page du site." + +msgid "Documentation for this page" +msgstr "Documentation pour cette page" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vous envoie de n'importe quelle page vers la documentation de la vue qui a " +"généré cette page." + +msgid "Tags" +msgstr "Balises" + +msgid "List of all the template tags and their functions." +msgstr "Liste de toutes les balises de gabarit et leur fonction." + +msgid "Filters" +msgstr "Filtres" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Les filtres sont des actions qui peuvent être appliquées à des variables " +"dans un gabarit pour modifier leur valeur affichée." + +msgid "Models" +msgstr "Modèles" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Les modèles sont des descriptions de tous les objets du système avec leurs " +"champs associés. Chaque modèle possède une liste de champs auxquels on peut " +"accéder comme pour les variables de gabarit" + +msgid "Views" +msgstr "Vues" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Chaque page du site public est générée par une vue. La vue détermine le " +"gabarit utilisé pour générer la page ainsi que les objets qui sont " +"disponibles dans le gabarit." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Outils permettant au navigateur d'accéder rapidement aux fonctionnalités de " +"l'interface d'administration." + +msgid "Please install docutils" +msgstr "Veuillez installer docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Le système de documentation de l'interface d'administration nécessite la " +"bibliothèque Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Demandez à votre administrateur système d'installer docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modèle : %(name)s" + +msgid "Fields" +msgstr "Champs" + +msgid "Field" +msgstr "Champ" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Description" + +msgid "Methods with arguments" +msgstr "Méthodes avec paramètres" + +msgid "Method" +msgstr "Méthode" + +msgid "Arguments" +msgstr "Paramètres" + +msgid "Back to Model documentation" +msgstr "Retour à la documentation des modèles" + +msgid "Model documentation" +msgstr "Documentation des modèles" + +msgid "Model groups" +msgstr "Groupes de modèles" + +msgid "Templates" +msgstr "Gabarits" + +#, python-format +msgid "Template: %(name)s" +msgstr "Gabarit : %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Gabarit : %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Chemin de recherche du gabarit %(name)s :" + +msgid "(does not exist)" +msgstr "(n'existe pas)" + +msgid "Back to Documentation" +msgstr "Retour à la documentation" + +msgid "Template filters" +msgstr "Filtres de gabarit" + +msgid "Template filter documentation" +msgstr "Documentation des filtres de gabarit" + +msgid "Built-in filters" +msgstr "Filtres intégrés" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Pour utiliser ces filtres, placez %(code)s dans votre gabarit " +"avant d'utiliser un des filtres." + +msgid "Template tags" +msgstr "Balises de gabarit" + +msgid "Template tag documentation" +msgstr "Documentation des balises de gabarit" + +msgid "Built-in tags" +msgstr "Balises intégrées" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Pour utiliser ces balises, placez %(code)s dans le gabarit " +"avant d'utiliser une des balises." + +#, python-format +msgid "View: %(name)s" +msgstr "Vue : %(name)s" + +msgid "Context:" +msgstr "Contexte :" + +msgid "Templates:" +msgstr "Gabarits :" + +msgid "Back to View documentation" +msgstr "Retour à la documentation des vues" + +msgid "View documentation" +msgstr "Documentation des vues" + +msgid "Jump to namespace" +msgstr "Aller à l'espace de noms" + +msgid "Empty namespace" +msgstr "Espace de noms vide" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vues par espace de noms %(name)s" + +msgid "Views by empty namespace" +msgstr "Vues par espace de noms vide" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Fonction de vue : %(full_name)s. Nom : %(url_name)s.\n" + +msgid "tag:" +msgstr "mot-clé :" + +msgid "filter:" +msgstr "filtre :" + +msgid "view:" +msgstr "vue :" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "L'application %(app_label)r n'a pas été trouvée" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Le modèle %(model_name)r n'a pas été trouvé dans l'application %(app_label)r" + +msgid "model:" +msgstr "modèle :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "l'objet « %(app_label)s.%(data_type)s » en relation" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "les objets « %(app_label)s.%(object_name)s » en relation" + +#, python-format +msgid "all %s" +msgstr "tous les %s" + +#, python-format +msgid "number of %s" +msgstr "nombre de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne semble pas être un objet urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b1450328d4175edc018a49175a576b13da96b7d GIT binary patch literal 476 zcmZ8d%Sr<=6s_oLmabh~!G%TBWUAtrS`n*-ip5e!UB}LyF)~etB(?TK`~g4AZ}Cnm zEqLIN9CGgC|L3{ zMq{k33vB2Mow1u);aO@WM5D))^&F}|UUsVjN@$DtjER`V=McwIoF9o;2r{xUe(1XA ze_sM3kte4|f)G6@A6V*?@udpZNw`NF z5%sJIXlTPlMNtEO240m)n+{Cgl=B$6Pidbe8(%#yN5}5W#AezQ5|URP)+f*?GCK2-9rQWU5J~VsPPNZ{EW2# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..f962a4da1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ebd4321e4bf0c9fa393b9f5c4f47d2cfae88d378 GIT binary patch literal 1940 zcmai!zi%8x6vqb$5Ffu|eh3KSArZ+Z*gN|i60^w#upNt_m^kqfN@s3&Zg1k>xKPC?2Da4(@>S;9uZl z;A@YJLWu^&$r6@af4e=i_+{&W||ZDYeRzv4P}hq@<%@sjo;<>GF{bK{-RV ze_bU(ELyu+NVl1*;Ki~{%0ihSgSO`074;u@kOmeWhT79eW=gE+91gtr&=yL3R2Cyo z+qR^Evjs`BT_56r!cZa30}dy46y4Bj3t|~4Q${%%aG83^_FH1rrYffsGX-f?4im428BOr+8zMA06$70P{E>CnJ zjjke@C`U}`b!jr&xS~eZg=p1hI*k^~%tt*NQ)BH?bVc3Jd^B1{oH2D~=iZHGPeq*$ zb>`yv({Ih(L_H^s$8D^O>0-I5Xfc;YZPVGn0zFVS-_Nn#uXkICZIzqnplPxa z6^MFD7BO9L+7D@F7{VxSx3{*oTKme-DB9z2?*Nu+<#s09&Bp45)$?~RHrJYMELjuq z&x^PuF$Hxqv{58&&QLOx&a2SW;_!+4 zbSPIel<83FY>1Y^QldTTXuPswJ&~EzuG$leQs+was@qu|vZ7FWN!4w1h`mQGvy_Hv zkB!~u|FAd5o?U{kiPOg5t8&m%OMDD7oD=B~lP526ch1kf?Mj*tDV+|BB(H9{L+!c_ ztz3$wT=zNK5, 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-06-22 21:37+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Baile" + +msgid "Documentation" +msgstr "Doiciméadúchán" + +msgid "Bookmarklets" +msgstr "Leabharmharcín" + +msgid "Documentation bookmarklets" +msgstr "Leabharmharcín doiciméadúchán" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Doiciméadúchán le hadhaigh an leathanach seo" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Tógann se tusa ón aon leathanach go dtí an doiciméadúchán le hadhaigh an " +"radharc a rinne an leathanach." + +msgid "Tags" +msgstr "Clibeanna" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Scagairí" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Samhla" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Radharcanna" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "Cineál" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Teimpléid" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "clib:" + +msgid "filter:" +msgstr "scag:" + +msgid "view:" +msgstr "radharc:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Ní bhfuarthas samhail %(model_name)r i bhfeidhmclár %(app_label)r" + +msgid "model:" +msgstr "samhail:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "An oibiacht gaolmhara `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "Oibiachtí gaolmhara `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "gach %s" + +#, python-format +msgid "number of %s" +msgstr "líon %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Feiceann sé nach bhfuil %s oibiacht urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..19f0f72335739c1d2c66c49563ab8e6ed5536034 GIT binary patch literal 6941 zcmb`LTZ|-C8OM);7Y4ilig;U&s{=DK-E(0P?7hJ5>@F_Z!DVOUqKV7ts_L#{s;heI zRPF325{;J!j7Ad`U0;@%AP<MqVwaonv?me$m>R#~p#e8sm_f<;W34RZp121~DQf~wo zK$(9Kd^`A2@DlK2;G4nERO9EsxAFW#@G|h{psc?Dz7G5|_*(Fv;HBWJUsH}>0m?cJ ziu}Fcx4^r>H-P^DQAu6OVwS4QL59@T;60!Q#e_}pa_~WL75oyo1pXeBb#FoGtH530 z4d9L7m0$#lzMlYPzlT7Xe-3;Ed<485T%JM(_(gCQd=!*@p9bFv{t6U({|1UZ7h|N@ zeGPa8*aF`Q-U=d8eHdh_^1+XQDfk2Mr=Y~;Qz#{N{07_)&Ld3r8-OA&178n*78L({ z1-u$O2Z|q`0L6}{K=Icz)$;{V?EM2c5B?Ptxw{dz0A2@*ynDcNuOQyw-8}yt=e!rZ z6C=gW2l$Zvz5reaJ_@3`dJ+^~{2CNJ{sK;emk}JkB@^P_%(0^{5L3eue_<$ z_au0j=MdzT`VNTd>L(Tc0+fB82Y(0t3A_V*3S-$y?Sfn_a1oTao&v80?+3*nUk1ew z-v(K#eg?`u&w--f3!vD2IV2+_Y8SW;&Vl~|zYgZ$!#GXGFT;sxr8mmqu&yb7EFmqGDU42qs-L0SK4Q276OumgS*6#qU0z7PB@DE41TP@sj2f$X=J zTXWyUEppo2Vy9dpe>e9H+=sZOj)?6dM=p^od)AlKCel^yUeI8Srk6$Kl* zS0r8@rAbHc^HM)JFg?>N;`mfz2EnY|H}A&U`VJn)Gm32cgef&`wVwu7Cuy$Da2S|O z=c(=n+GwT^O`Zo?qSNmEftRb9(bV8utz-!hX&X99gV^@>4|wuB}H`uq{Tzrri3S^TW1RX}Ufz*?Ju0 zNG_r{Z$*jjfkD<7$W7m>0&L#Okk786gp+Y~WFc`+n zm34(>39hQwm$KPWo5Zi?myxpCWQ?9M5w4E|S(Jw+A4zMgBZFbSsf8|fXuLojje^)O zKP^x?tin>5qg$<(XA(z};V_O$rOucvlD(|P<7TvzY;8oEQ#LK~VUf4h2hu^HZZ8Hy zc|BG_My%dU3*F1o0ak66ZglDglQht!&nu@n>uSH)(pZT_TOEg{J*zR7l_) zM}(qmlu)*)r(qgBTD0;ZK{m68Oyh*M|_-rCikghmIbGaC?kPRY{I|fxlew>zMRvDTsJe> zW?QX|9o?)`bK1|aOPC=}mw31^)pI05Y1}p0oTh|jQ9sOE9<_>@^%AKq#`kqZ`Pjai z6DHko2`g-|LCh)PR@U+<#M^SY<|(z%X-!d+6?|4@dX93Lk4`l?$VLa6B$rcvM8s|Y zBLXU8l$2JMLbgek`2BBUksvbD*g6W9KFrb$D}^o91kPKJDdsL&svy@#w27l!BD6US z)DCBs3^h0!!*lVE4Cl`twTlMw${>)o;vZt*2&;ZBvV_5(X*qM7M2!U3pceEZ`6wm zojps}FK|sAH#TprWhSv$lV%-#Tahe>agchvO8NzbzqJ;a0WVAdo9FbZm*#n7Lp>Ab z`LHuTzp=5=rfo@V)Cu{Ns#Zf>$(ir_^RrVc$5xJvjaY0iOu6nMK?^MJP#DkV z^PJOBvR8Yd$!w7C|Ipge*3IL2vR5z2T1OHn4O=_<=5Caa^zG=rKXoE5G84CsrrE%D zbTV|0cK@Eey8OC-CfUD#Q9tm27F?Xwx9A1k(K5PJk1omRq8rr*^pd{zTAk>9I8w%! z7{6ifRM|%!O{2uKflFMdV@2Syro*?^kR z=p_w@ElixjPvu-`Uy@lxM`Z>m5g0#&-4r8}&`9|Tp)^I(QyEV>MOIT*67>~Gn~ryjM2S` zZzo?Yr!BI{c-C+n6u2U?{h){^jGx#9-;C5HKob)+>n$xN8~gOSaS+i8+92hi*?J5w z^~Go98_odnJHq0v^O=kf!?cSxajNczQIey!rc)$bP{9w|dS&bJ1RK~?meu3h-+D}* zbJ9x)&)GovcH0@KPd7lwB!c}yx~s(mKVxuw!tLGj!)I$P`+`>s@rI4G8|qEN>eeq zGN*hc*{JiPoRN;*Xw5)VH;AiP(PVec28Q!i87>z)=XaX4iD+ifUlRC3E9AEeC`S6$SEf)`tXSGN)BtdSKU%S5qa7)DLYR77cZtOsmtqlZKLKk2J14_pv2mEY@5oo z?NwD1!ZaVGd8b@djF?C}VMTRR=^pv)YO2sm(!g{{e|iay;Q#*f2Y2?X#=os@qdqn} zXm)n7@WVO0Z-nDgxFMkIVw-miYeq8kNN!nManKOyIGVn zKoxO?L9~@Tt_U5=KN~!Li%>B+poI53NNY=CtTqZZWR>DHJ|W9Y=u7F-JC!g=mijp2 zt0bnYOJct4*(l7MYDjAw0CS~+bu%*gGr{F=9m>-50W!VvbfRb#wY~KgrO(;4L9PG) zo>Ud$&{oG>m@v7@A?JL02iRgIIb5*hEE%6y5>iLAGN+qWf#Aml=S-Vl%3I&hteH%h z7xgf!)e+xFiE@ZqD!gw#Xw%9#+#Q=oM--Ikg`Bw&hwjdkM~7MC$4Omf>HS8Lbw5%l zpdGb!UJM(^xfV!!NGK*+gO~fk;v--nomD8mS?I3tS3c@3Ui^D!;%7@^v8|n>{sVId B45a`7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..bb8b1b4f9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,289 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015-2016 +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-15 10:42+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Administrative Documentation" +msgstr "Docamaideadh na rianachd" + +msgid "Home" +msgstr "Dhachaigh" + +msgid "Documentation" +msgstr "Docamaideadh" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets an docamaididh" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Gus bookmarklet a stàladh, slaodaich an ceangal gu bàr-inneal nan comharran-" +"lìn agad no dèan briogadh deas air a’ cheangal is cuir e ris na comharran-" +"lìn agad. ’S urrainn dhut am bookmarklet a thaghadh o duilleag sam bith san " +"làrach an uairsin." + +msgid "Documentation for this page" +msgstr "Docamaideadh airson na duilleige seo" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Gearraidh tu leum o duilleag sam bith dhan docamaideadh airson an t-" +"seallaidh a ghineas an duilleag sin." + +msgid "Tags" +msgstr "Tagaichean" + +msgid "List of all the template tags and their functions." +msgstr "" +"Liosta dhe thagaichean nan ùrlaran uile ’s dhe na foincseanan a th’ aca." + +msgid "Filters" +msgstr "Criathragan" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"’S e gnìomhan a tha sna criathragan as urrainn dhut cur an sàs air " +"caochladairean ann an teamplaid gus an t-às-chur atharrachadh." + +msgid "Models" +msgstr "Modailean" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"’S e tuairisgeulan air a h-uile oibseact san t-siostam ’s air na raointean " +"co-cheangailte riutha-san a tha sna modailean. Tha liosta dhe raointean aig " +"gach modail as urrainn dhut inntrigeadh mar chaochladairean teamplaide" + +msgid "Views" +msgstr "Seallaidhean" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Thèid gach duilleag air an làrach phoblach a ghintinn le sealladh. Mìnichidh " +"an sealladh dè an teamplaid a thèid a chleachdadh gus an duilleag a ghintinn " +"agus dè na h-oibseactan as urrainn dhan teamplaid ud a chleachdadh." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Innealan airson a’ bhrabhsair agad gus gnìomhan nan rianairean inntrigeadh " +"gu luath." + +msgid "Please install docutils" +msgstr "Stàlaich docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Tha siostam docamaideadh na rianachd feumach air an leabharlann docutils aig Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Iarr air na rianairean agad gun stàlaich iad docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modail: %(name)s" + +msgid "Fields" +msgstr "Raointean" + +msgid "Field" +msgstr "Raoin" + +msgid "Type" +msgstr "Seòrsa" + +msgid "Description" +msgstr "Tuairisgeul" + +msgid "Methods with arguments" +msgstr "Modhan le argamaidean" + +msgid "Method" +msgstr "Modh" + +msgid "Arguments" +msgstr "Argamaidean" + +msgid "Back to Model documentation" +msgstr "Till gu docamaideadh modail" + +msgid "Model documentation" +msgstr "Docamaideadh modail" + +msgid "Model groups" +msgstr "Buidhnean modail" + +msgid "Templates" +msgstr "Teamplaidean" + +#, python-format +msgid "Template: %(name)s" +msgstr "Teamplaid: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Teamplaid: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Lorg slighe airson teamplaid %(name)s:" + +msgid "(does not exist)" +msgstr "(chan eil e ann)" + +msgid "Back to Documentation" +msgstr "Till gun docamaideadh" + +msgid "Template filters" +msgstr "Criathragan teamplaid" + +msgid "Template filter documentation" +msgstr "Docamaideadh air criathragan teamplaid" + +msgid "Built-in filters" +msgstr "Criathragan ’na bhroinn" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Gus na criathragan seo a chleachdadh, cuir %(code)s san " +"teamplaid agad mus cleachd thu a’ chriathrag." + +msgid "Template tags" +msgstr "Tagaichean teamplaid" + +msgid "Template tag documentation" +msgstr "Docamaideadh air tagaichean teamplaid" + +msgid "Built-in tags" +msgstr "Tagaichean ’na bhroinn" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Gus na tagaichean seo a chleachdadh, cuir %(code)s san " +"teamplaid agad mus cleachd thu an taga." + +#, python-format +msgid "View: %(name)s" +msgstr "Sealladh: %(name)s" + +msgid "Context:" +msgstr "Co-theacsa:" + +msgid "Templates:" +msgstr "Teamplaidean:" + +msgid "Back to View documentation" +msgstr "Till gu docamaideadh nan seallaidhean" + +msgid "View documentation" +msgstr "Docamaideadh nan seallaidhean" + +msgid "Jump to namespace" +msgstr "Gearr leum dhan ainm-spàs" + +msgid "Empty namespace" +msgstr "Ainm-spàs falamh" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Seallaidhean a-rèir ainm-spàs %(name)s" + +msgid "Views by empty namespace" +msgstr "Seallaidhean a-rèir an ainm-spàis fhalaimh" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Foincsean seallaidh: %(full_name)s. Ainm: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "taga:" + +msgid "filter:" +msgstr "criathrag:" + +msgid "view:" +msgstr "sealladh:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Cha deach aplacaid %(app_label)r a lorg" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Cha deach modail %(model_name)r a lorg ann an aplacaid %(app_label)r" + +msgid "model:" +msgstr "modail:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "an t-oibseact `%(app_label)s.%(data_type)s` dàimheach" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "na h-oibseactan `%(app_label)s.%(object_name)s` dàimheach" + +#, python-format +msgid "all %s" +msgstr "a h-uile %s" + +#, python-format +msgid "number of %s" +msgstr "àireamh dhe %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Chan eil coltas oibseact urlpattern air %s" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e126f35535116fb19a67f6db2e2d27a801f1f4ad GIT binary patch literal 2265 zcmai!OK)5?7=}%02@K&DS_&-`vk1&k&Ro(9$q7Lyx00x%M(s2b0x9*(cqXUuu@AOS zE^Lrk@C&HeA@vtXfj@yyfg^bN2zVAe3tj*z{wf}ifzyNW0{A4x%OK7F9!Pm> zAg$9Ij5SDlbFc<}0^-BI!J`g-2U7lT;OD5ppI{l|Pca$geF;7f{xBH-43dstLE85p zAnEuAya0}1aSpx;(!AF|($mBPA?!9d34Q?1g7-kG?=K)e?DxU=Z;;kGfg)3#NAZ9( zb_S$6odapU*Fn7l(-qq{=)<^^=RkJO$+ zr`m=#?s(To$F=cXWSJC}d&Aq33!Yn*3Gb!V+_dk?j%VflP`RBrUtzPNvqACmrjw^q zd*KtK*{m@esjwSLddKFB_Hx_DY+kyKO|lSiIR4Oxw}-P2zv>yNTTdL%L|?MSM5->H z3KAWA*QAmy=V|8nj>&n?nv@H@6GBO%UzgbFkW608Ci!L}xA0nc-j`Zh;Zcq-q*bb{ zX}VJJ@p4LB(;}4>8_Lx)x$g2rQ{C_$&ow35QdMk`6XVAa?uxNvD@qC{k>b2iD#-DP za;zo#c*rzUv^Z<+WRk5y)zAzybd0jb9qWZX$1F&Sna@ZCUk6XK@EoQs4%Q1x@X=- zj_&6;+o&Z)8uM#HC7ncQUS9V;i)*#5t*xr3DU+Vuu69gXD>k(UHOQ~^RjpELE;Sbp zw%@4MOX13E$U@CxPPe~?lTGwA@2m^!q@TInT8t(S;%Kd&w9$g@m~Nu`F`sNFeqU$I z`>M2}aw}A{Xl&|YuCp+7GZWLi_&QV8{FNErs7#j_Os$RPPNq^R0a~7uiMMfBX2{p9 zOku&xvcgu4+C=2;{R5wLlHG5Q_p{kEbP=-e)1w)@J7m1$qG3@hxP&KowtIg&(Sps1 zG&8~4);PALaXyCK5(*(l@awF!6(q*1>7#YMfu?81e;kUc|#L~G3;l$#&LXLU9z=B yVGFhJ_3rnnw1x_Zw-i>KpbK6_NwlEk|8Y8#14S`2dov7Aa5R6|@NhcmX8!_usZaU< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..38cecb25c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fonso , 2011,2013 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentación para esta páxina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Salta á documentación para a vista que xera a páxina." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrición" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Patróns" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(non existe)" + +msgid "Back to Documentation" +msgstr "Volver á documentación" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "O modelo %(model_name)r non se atopou na aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "o obxecto relacionado `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "os obxectos relacionados `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "todos os %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s non semella ser un obxecto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd7a12dc284367445b452724ebe933474c022c89 GIT binary patch literal 6743 zcmcJTU634A8HSsPfU80TQ9;pTba59lvp)fW$!19+0YVXsuu`Td481eGJDtpSPr7?H zS*x`Csp3M)s%+Q*OEyaqVs^8){@h?8YFX-qT2@iEH|T|zY89oHH{AHVr+a34CP{H& z*{L&cpL4$Ro$u%U&gspcZ@l`X!?TC}F&7ip^ zlOF>=PX96Rec&PRW-!UezYE?<{{r{{@Moab{|@{h_!sax@E_p&!T;pro372)Z3d

      |Eu0jc~&UN5dz|Ejs@WBs(0r&*?O>i816V$qEG5RCm_24#e z5WERI0LtDuQ2Tuil>B$Wv*0552)J#)aXt!u0~`il0JZNM;BDY9LHYYvP;vM-D8FyO z*&D&zz+1pk5S7j&AR^8b_#^NjsC?XvF|t1dcYwbDwa-;3lb&n9>%m(<#bpTm7+3}s zzlT8CUj-GXLwP>}<>vx80zL~$?~lPz@HJ5S{to{3D#!UJD0|)@C}r?goKt-Ef{Mcd z@N?i1Q1&c?;=?-lN$_=0ad``r-S2?1?|PCXxjR7V+X*TT`*VB>{1p8eQ2BZm{3&=E zl%G$dO#aP-q}KU5D8HTs1Mqne)16HuS3KVgPJt!xe(>9%dN@tXt{|HnY(?`cqZspj|`C?5O(gksKX zp!oNzy#ELAZu)P5T7MJd-3HzQN^Tzr9c*pMp9;;;K2MWgabu9CM|qU*yJ@>R8Vf&fn<&L~V`fR<6BO|o;(C(oXALUCq zB~|v>%I|$NT(>c`gZa;=!Ozf!Xv)jIH04<_yq%_8?xd+k_1s09uy0xXl-oP=ehE~L zRd0HRGjKi&Dp$&%Ghle0^u42IrWI5ZKMX2nq8iq`$-$wSR-S1l! zyS6>L58oPCSk&8|vvKH~3d6&5ZgjZeC1`H>jilrUW(M@4!a(BA#?BYQAn}eR73Tpj zu10>-+T3eJPtQyjmG@4~goLf`$ENAddd?oVTDNZ|3>fxIvo+oDt0wjn&mc7G1s)Oe zYG!(YIM0*MvYA3oZ>HwW_yHL?TK7?tcyrALvRc=QSwg7V>oeW#XxyNd%V(L2jTc_9F4QF*(hu^<4mAJxnu>L_4DB@nYAuUTP56MpKI>~nSH#|3n zYVl#^Ei!KRL#6p1R`$KD>7Ol#!-p%$+Vi5Vw~(doP@gHC zZMynn%^& z-oKh#AUtY|N*Rs41}C{)+1Aft*;j9EE^%I!WifMH) zEU;z==fM^ z^zPEwJ!WjYGJfBkqdWtTx^YsPirgT^n=q=F18&51_(a{UNA9#6_+}!mmlrg+b9Ro4 zs$31{CRrBDwm7&;Q=U6lF%Nsw5qIKHJxQ9Ck&&ZEkCyq^2x5Q6JEjFAnXzqXExK5LwwZA_X=daNhYOd96j5%4`iQ*>G||zdL~^qhw$@KvTWC_q|1(-zsUG$)Ay;^-f$Jw#~plHPgm2I_+3s}sc zM-9u^HeI>W^ioOXnptud(N$~U$#g@TF0(YABAA8VEU^DZJB+WBxJ6@kus$oBYYzSA<)6UDeU<2)$y8jDgp*`NL|T!kT(~Gt ztoi9Hna#_LvG+NJ%evCGX0dCHBrjS!Pbz3jXeHBSCkywIbqfZpqGeGVtXyKfCf6)Q zzArPdCVg4^^=7HS&n(mzkUSygYInug(l}dxlKt21#HxI=nwCnPdsH{1VY!U$R=5qr zMGRa@Utv8fnd}6z(@{JKN?#r2wL$IKi>UoIi#A*Bw)jLfnVOYp@lJ{gtd{Gx&XA-$ z)>tGKTI+gd@=oD4?OjZJb6Hk2R9fIkO~+E)^|T z8aEJG7MWFM@A}n@8mqW(UFYkWc?FQNdl3+G*uGGgrtj0$o?7;7>&b5CEbLi)NqKe^ zlldM6odfd{k^CUNWIPXDktv;ca$EI&{A;glLB4UPgF~k%2&%j%xT18=dA~K!{|fcF zo@FvW=adey-<|_!nLLr@?JVP+>p~U1lD>=Ri z3!w@p*&-RUo91TpTFepBf7s+#0;fR1VQ7jVIbUSwp8IUc)&jO#+ABCRZ<+h1{a;GG zANFWy#~4Gcw~Fa`*(@6CL{lmC?sY|LI)wPY+QBZ?0%e1}|umWgWT-dVDVQp8qJFCLvJvfX}C=%+wlb=!Y5bi;O~OVLVa;kB1~ z-__avyH}}R(H{*qb7!#Q75LshWA!G&ty>9wrExdE>)#c{^HNToK;sqH_WWtlyE6ae Hs5t)x+dfr% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..8e60c4aeb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,273 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2012-2015,2017,2020 +# Yaron Shahrabani , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-05-17 12:29+0000\n" +"Last-Translator: Yaron Shahrabani \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Administrative Documentation" +msgstr "תיעוד ניהולי" + +msgid "Home" +msgstr "דף הבית" + +msgid "Documentation" +msgstr "תיעוד" + +msgid "Bookmarklets" +msgstr "ייסומניות" + +msgid "Documentation bookmarklets" +msgstr "ייסומוניות תיעוד" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות שלך, או קליק ימני " +"והוספה לסימניות. כעת ניתן לבחור את הייסומניה מכל עמוד באתר." + +msgid "Documentation for this page" +msgstr "תיעוד לדף זה" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו." + +msgid "Tags" +msgstr "תגים" + +msgid "List of all the template tags and their functions." +msgstr "רשימת כל ה-template tags והפונקציות שלהן." + +msgid "Filters" +msgstr "מסננים" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "פילטרים ופעולות אשר ניתן ליישם על משתנים בתבנית לשינוי הפלט." + +msgid "Models" +msgstr "מודלים" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"מודלים הם תיאור כל האובייקטים במערכת והשדות הקשורים אליהם. לכל מודל יש רשימת " +"שדות אשר ניתן לגשת אליהם בתור משתני תבנית" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"כל עמוד באתר הציבורי מיוצר ע\"י view. ה־view מגדיר את התבנית המשמשת ליצירת " +"העמוד ואת האובייקטים הזמינים לתבנית" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "כלים המאפשרים לדפדפן שלך גישה מהירה ליכולות הניהול." + +msgid "Please install docutils" +msgstr "נא להתקין את docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "נא לבקש ממנהל המערכת להתקין את docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "מודל: %(name)s" + +msgid "Fields" +msgstr "שדות" + +msgid "Field" +msgstr "שדה" + +msgid "Type" +msgstr "סוג" + +msgid "Description" +msgstr "תיאור" + +msgid "Methods with arguments" +msgstr "מתודות עם פרמטרים" + +msgid "Method" +msgstr "מתודות" + +msgid "Arguments" +msgstr "פרמטרים" + +msgid "Back to Model documentation" +msgstr "חזרה לתיעוד מודל" + +msgid "Model documentation" +msgstr "תיעוד מודלים" + +msgid "Model groups" +msgstr "קבוצות מודלים" + +msgid "Templates" +msgstr "תבניות" + +#, python-format +msgid "Template: %(name)s" +msgstr "תבנית: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "תבנית: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "נתיב חיפוש לתבנית %(name)s:" + +msgid "(does not exist)" +msgstr "(לא קיים)" + +msgid "Back to Documentation" +msgstr "חזרה לתיעוד" + +msgid "Template filters" +msgstr "פילטרים לתבניות" + +msgid "Template filter documentation" +msgstr "תיעוד פילטר לתבנית" + +msgid "Built-in filters" +msgstr "פילטרים מובנים" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"כדי להשתמש בפילטרים האלו יש להוסיף %(code)s בתבנית שלך לפני " +"השימוש בפילטר." + +msgid "Template tags" +msgstr "תגים לתבניות" + +msgid "Template tag documentation" +msgstr "תיעוד תגים לתבניות" + +msgid "Built-in tags" +msgstr "תגים מובנים" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"כדי להשתמש בתגים האלו יש להוסיף %(code)s בתבנית שלך לפני השימוש " +"בתג." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "קונטקסט:" + +msgid "Templates:" +msgstr "תבניות:" + +msgid "Back to View documentation" +msgstr "חזרה לתיעוד ה-View" + +msgid "View documentation" +msgstr "תיעוד View" + +msgid "Jump to namespace" +msgstr "מעבר למרחב שמות" + +msgid "Empty namespace" +msgstr "מרחב שמות ריק" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views לפי מרחב שמות %(name)s" + +msgid "Views by empty namespace" +msgstr "Views לפני מרחב שמות ריק" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" פונקציית View: %(full_name)s. שם: %(url_name)s.\n" + +msgid "tag:" +msgstr "תג:" + +msgid "filter:" +msgstr "סינון:" + +msgid "view:" +msgstr "ה־view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "יישום %(app_label)r לא נמצא" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "מודל %(model_name)r לא נמצא ביישום %(app_label)r" + +msgid "model:" +msgstr "מודל:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "עצמי `%(app_label)s.%(data_type)s` קשורים" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "עצמי `%(app_label)s.%(object_name)s` קשורים" + +#, python-format +msgid "all %s" +msgstr "כל %s" + +#, python-format +msgid "number of %s" +msgstr "מספר %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "לא נראה כי %s הוא עצם urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0233cc886c015b039f8057ce4feb4f60f5939658 GIT binary patch literal 2297 zcma)+OKcoP5QZB_cq|Ez@HixZItL3|X7&*tiN_eB_@N|D;# zErA3^Awd!H1)BqrLd0x>oPaG$fkZ;d9U&pafg73&;tD5DNc`2aUavze($efV)zw|~ zS9S0FwrkrW!*~|Yb9jEl^E{q+@52wqpWsX2U*Hb#h5H%X2@Zn0!69%DSOy;gLvR~7 z3%(7$2fhsc3_b{Me<1Vk03U(i1CoC)NOAf*b`hk!`@sS@22y+j7Qs1?_Ai5< zLgOkZV2@++Mes_8KY=5#{{~6Vt4Kz=J&<&q0e=A(z&cok2+I2d_&E40_zd_*$Ns0| z-}x|OPhfsG_!u|{(mEF$2dBUsxCD-Zm%yjM-$BS_kK&<0Yo5k~u+|UQKGV5Cl8s4o zl!J89pu99}A3>DHcF_a|+Re}khBUTcfUSe|#k{6v%#}7=grO7>H=0)@7rYhup)f{9 zitEZrSvBmS)~5myo${rL*_f`j0;!BJo>rSJUfFUXuWMvzdNB`0L$V3aM}n9g(t%`0 zT0t1|Io;y*NC#Y~IlG7inWlu!o`jt^lAreE4BW!-hEy^V2E|yD;^*0f?SBU;SrR=3M+SeL0* zP>~VWb@D}$Hq`iu-l%cDuRrTzCL%u3X===jXt<0D+;U@07%^?;LOIag#;9(WO+}hc z#yMPbj-!t_376MS3f0iLV=~l{aVF!2S91=w8nIK>F3(N9Rdz-rX-~}=gHV_6E0*>< z#gbDR;-%NzSB3_QrD72aon!K}M=>|88(Lpi94unwj*8eg!jE1?~$XQds5qfHvSDPY=r5SmrJmDPJSVy_) zGIGXMRo6V#aQT6XXSyO?-t=-)ek&5bGohm(cDV|z8ISB6=Gp5=zv6pGcxhlbNB^lb zxsfI})Asv#TS?pV`84?`O;*$7d%P{A$r|RD)AlEJE=iNy^wOTkBplaiH~EsZ{Q>N+ zvQTL<4+BBZu{5~`SDGxQ$v0_o%WlScm}_bKY?@rO+izgq<&9Xh?z(kffDUN08=&b+ ztm}%&0xTgbzxOOic>~K4%otiMPx4 z?OVHK1tBk_?eoCLTPEyy(K-ZOrsmNL6@%`eSTy?<3~HmDYo7(~qHx2xW>qfO3DS$R zp=15JTim9ak#ZGYw3yQ179cIeP!`IWXLo#y=mgs+=Mr6t-Y-Uk9cQe59CTM8F4KAR z2R>{=+v!R`AdVJ^dun67abe&_oU?sJGpNJefZ64tn}^v=-G&YMwoH80(&Te1hMI}W zT}<={ce|G!k(O-BSD=dh-#5^vz?N&MBu%c^PAB}1zW`Eo&fvx|z0 IciUzE0_^*kp8x;= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..876b764c2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "गृह" + +msgid "Documentation" +msgstr "दस्तावेज़ीकरण" + +msgid "Bookmarklets" +msgstr "बुकमार्कलेट्स" + +msgid "Documentation bookmarklets" +msgstr "प्रलेखन बुकमार्कलेट्स" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "इस पृष्ठ की प्रलेखन" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "दृश्य जो उस पृष्ठ को उत्पन्न करता है के प्रलेखन के लिए किसी भी पृष्ठ पर जा सकते है." + +msgid "Tags" +msgstr "टैग्स" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "फ़िल्टर्स" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "मॉडल" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "दृश्य" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "प्रारूप" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "टैग:" + +msgid "filter:" +msgstr "छन्नी:" + +msgid "view:" +msgstr "दृष्टि:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(model_name)r मॉडल %(app_label)r अनुप्रयोग में लापता है" + +msgid "model:" +msgstr "मॉडल :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` संबंधित वस्तु" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` संबंधित वस्तु" + +#, python-format +msgid "all %s" +msgstr "सभी %s" + +#, python-format +msgid "number of %s" +msgstr "%s संख्या" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s सही यू.आऱ.एल प्रतिरूप वस्तु नहीं है" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e789b5ab64857bc89d020809d5566564ebbed793 GIT binary patch literal 2550 zcma)+&yN&E6vs=&U*m67{DoQ|i?e~==>b$|b`X|jBZQR=j+l6Xnwgr}n(3};tEy*V zMGty2F~$QIqX+*2uNo6$4BR}Ln3yOr@gNByFo^7`=Rs(n5jtS#Wa3^>Ld>GtxN1^v3_zdJl@Nw`Act1D9qk$e@Tc>e||UsA>^3&9Y42_*Y2rpu^F3~qyb9Gj5cJK(e6 z`(PFP9DEAAH2QuSr2VdfRENJns_(xb*=@e3*gqQaAc#+F3B-@Rj!A%Tfd{~EK+5AE zFyCh+Z${Fau>Jx_^@u>q{{%?q@HUv|0g`sc-yO*xfRy(~AjSPH7=Yi8zFz}T zhI~AT`B6M{p3{TQnFjf#L3z_asFOi4($yj#PvW6mC?2W_#RoU}eR>Fd4i62wcT`&% zTMFd!Bbezrj?tzwj&<`AL@bXmVmeD&(sI+KZ&s3z4nH$}fNpN4THJ&pA9rSSF&y)v z7cr{UEe$)ui_`vGDrYBVj7k`>6>I2r1xGuJ?puUgSUykmWJ1My&-i*rhM%>mfxUWTI%no=YYKWq)+5t>(5 zy-%ZBZEbCB4u1^oR9BvzYn!B2BsE4nvahY$+H7U{=<<>4>DTAN%3-5D{!2jHzd~ZwnNt_X1wUw1Pvmy?bj7?m` zb()K=v3ox+UK@I*9yS_vzI{8V*KkXtUgxj!kV6~tfyS=!r}@SndadSa^YxIQKVO(Y zC!B>%9X7l6SD0Gw#j+zfe&{w@_2rGNWq{VAB~Oj>rmt>jD;kz&Q1q3y>I?LhSPcZd zmj6D*)~PjGT>MmO!B)%=e@ijoH*AryQlmMMDs-EYi;`68Fo7tm@^!(@Fyqt%wQ6T@ z8uw*Bi&2wNkS=~KJw;??=90d&3J1!a;4Kv!KEVASZy;|9mOOaT=cz^3>%2;Tnpv_@ zMdMLcjE%EfwH>PYq%b@~>lu|$l}lK3AO*xKF{2Iy2Yp0KU2xon%n(Ug*@?}i@5G?g zil&z*&1kgvWqV?V*Ks>?Lqu^?J8GdT&~j>qavi1pU#)21RndxWZFN&0!sRPU8?pZY D>)W36 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..0b70aa7ec --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,264 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# aljosa , 2012 +# Filip Cuk , 2016 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Administrative Documentation" +msgstr "Administrativna dokumentacija" + +msgid "Home" +msgstr "Početna" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Dokumentacija bookmarklets-a" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranicu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Preusmjeri te sa bilo koje stranice na dokumentaciju za taj prikaz (view) " +"koji generira stranicu." + +msgid "Tags" +msgstr "Tagovi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filteri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "Molimo instalirajte docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "Polja" + +msgid "Field" +msgstr "Polje" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "Opis" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Predlošci" + +#, python-format +msgid "Template: %(name)s" +msgstr "Predložak: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Predložak: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(ne postoji)" + +msgid "Back to Documentation" +msgstr "Povratak na dokumentaciju" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "Predlošci:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "prikaz:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikacija %(app_label)r nije pronađena" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani `%(app_label)s.%(data_type)s` objekt" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "povezani `%(app_label)s.%(object_name)s` objekti" + +#, python-format +msgid "all %s" +msgstr "svi %s" + +#, python-format +msgid "number of %s" +msgstr "broj %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "izgleda da %s nije urlpattern objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..734adc0176902001d94bec3b100476eabdc836b6 GIT binary patch literal 6770 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..d210e3860 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 21:47+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Administratiwna dokumentacija" + +msgid "Home" +msgstr "Startowa strona" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Skriptowe zapołožki" + +msgid "Documentation bookmarklets" +msgstr "Skriptowe zapołožki dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Zo byšće skriptowe zapołožki instalował, ćehńće wotkaz do swojeje lajsty " +"zapołožkow abo klikńće z prawej tastu myški na wotkaz a přidajće jón k " +"swojim zapołožkam. Móžeće skriptowu zapołožku nětko z kóždeje strony na " +"sydle wubrać." + +msgid "Documentation for this page" +msgstr "Dokumentacija za tutu stronu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Zmóžnja wam, wot někajkeje strony do dokumentacije napohlada skočić, kotryž " +"je tu stronu wutworił." + +msgid "Tags" +msgstr "Znački" + +msgid "List of all the template tags and their functions." +msgstr "Lisćina wšěch předłohowych značkow a jich funkcijow." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry su akcije, kotrež dadźa so na wariable w předłoze nałožić, zo bychu " +"wudaće změnili." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele su wopisanja wšěch objektow w systemje a jich přisłušnych polow. " +"Kóždy model ma lisćinu polow, na kotrež maja přistup jako předłohowe " +"wariable." + +msgid "Views" +msgstr "Napohlady" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kóžda strona na zjawnym sydle so přez napohlad twori. Napohlad definuje, " +"kotra předłoha so wužiwa, zo by stronu wutworiła a kotre objekty su tej " +"přełoze k dispoziciji." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Nastroje za waš wobhladowak za spěšny přistup na administratorowu " +"funkcionalnosć." + +msgid "Please install docutils" +msgstr "Prošu instalujće docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Administratorowy dokumentaciski system sej Pythonowu biblioteku docutils wužaduje." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Prošu prošće swojich administratorow, docutils " +"instalować." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Pola" + +msgid "Field" +msgstr "Polo" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Wopisanje" + +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Wróćo k modelowej dokumentaciji" + +msgid "Model documentation" +msgstr "Modelowa dokumentacija" + +msgid "Model groups" +msgstr "Modelowe skupiny" + +msgid "Templates" +msgstr "Předłohi" + +#, python-format +msgid "Template: %(name)s" +msgstr "Předłoha: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Předłoha: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Pytanska šćežka za předłohu %(name)s:" + +msgid "(does not exist)" +msgstr "(njeeksistuje)" + +msgid "Back to Documentation" +msgstr "Wróćo k dokumentaciji" + +msgid "Template filters" +msgstr "Předłohowe filtry" + +msgid "Template filter documentation" +msgstr "Dokumentacija předłohowych filtrow" + +msgid "Built-in filters" +msgstr "Zatwarjene filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Zo byšće tute filtry wužiwał, zasadźće %(code)s do swojeje " +"předłohi, prjedy hač filter wužiwaće." + +msgid "Template tags" +msgstr "Předłohowe znački" + +msgid "Template tag documentation" +msgstr "Dokumentacija předłohowych značkow" + +msgid "Built-in tags" +msgstr "Zatwarjene znački" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Zo byšće tute znački wužiwał, zasadźće %(code)s do swojeje " +"předłohi, prjedy hač značku wužiwaće." + +#, python-format +msgid "View: %(name)s" +msgstr "Napohlad: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Předłohi:" + +msgid "Back to View documentation" +msgstr "Wróćo k napohladowej dokumentaciji" + +msgid "View documentation" +msgstr "Napohladowa dokumentacija" + +msgid "Jump to namespace" +msgstr "K mjenowemu rumej skočić" + +msgid "Empty namespace" +msgstr "Prózdny mjenowy rum" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Napohlady po mjenowym rumje %(name)s" + +msgid "Views by empty namespace" +msgstr "Napohlady po prózdnym mjenowym rumje" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Napohladowa funkcija: %(full_name)s. Mjeno: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "značka:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "napohlad:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Nałoženje %(app_label)r njenamakane" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r njeje so w nałoženju %(app_label)r namakał" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "přisłušny objekt %(app_label)s.%(data_type)s“" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "přisłušne objekty %(app_label)s.%(object_name)s“" + +#, python-format +msgid "all %s" +msgstr "wšě %s" + +#, python-format +msgid "number of %s" +msgstr "ličba %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "zda so, zo %s objekt urlpattern njeje" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d8a25af5ec0bbeb634b35c1036aef1635a9c7670 GIT binary patch literal 6634 zcmcJTTc})D8ON8lT0QmFdaG93)#x$j*fVoZ(nRazVoxrmNt2i+C$;s~u9;b9W}m%h z@5$bKCYgbXg1#seBMRF3a!|wr1{$J4N(Et)2NAJ8R0N?&Q6GE}6nwCX{=T*Mo?8?9 zAZ}RmpS{+%zV+SLH}m4HH-1y`9AvzYvFo);JqjMXkq@3{UZ>PU;3aSgyy5jqy$xIe zg?<&h9sC^lMsNte6Z}#!{}lLM-midf0)Gw4{ujYFgMR_v0R9WS8GQXs`TVV*?9-s| z-vfRZ{3Q5R@MRE@)Xi*WtGWebO5FxN0%}lH7=X8cp9fEaUjui7e*k6QyAk?b;2q#S z;BN5kpa+V)Pk?gXS3seE3fu%Y!K2{8Ie36if{WnyK{@w%@crNmpy>NIQ1rPGB}MN$ z!CS!!_#W^+5SHpwAf&1Zej1FxAA`RD#V=n(DAD70;688}W^!H!6n-)I7VyiU*ykJI zZQxU&*zqzbdi)9$d;O+(e-RXY{|GLFe+7l_Hkhq|+d<*?2zcf-_*;@AV;Zxg6{z5aF*bmAS$a}Ag)sPfx`a?DEd4C zirvnFKLEd4tnb1IBIiL+^gIH}{*&Nmz(+x`^A%9e`5D*(UjWy@eK=p}zYa=#KMg(v z{sfe`o?{cDDh*0p>;Q#+6?_If3Z4RA2JZk*u<65K2Nb$*f#QcvQ1<^6lyiPry#Kkt ze}EEKa|EaC+Xjl%Fj%dQn)@dmB;H z?w?;+?*+kQq3PJgWbd+@tLhWHjwyQaEWwHF_Nzro2U=TJ3iA`~plL3ryVxi?KUo zJ?e!`wHmh^Wugw4hA&4>?=5GKqg#N4lYGlHXNQ@kDDpcd_5+*3x#tCG#S8U1Xyb{A z)U*uUw5&R88g2JYM2?Dz7piY!PtHm-7B{1lgn}3 z>Y&viH=`5ZPKSZcZC)77X;<1M$(0pfRMj!UQ%CCv5jYV>29+RihQmW%JW8mfs*c;V z9W@I;V=rxEf-+$9kepxWNNDB>Hxb!R``N%(*9zl&t`$eUZjuw!NS8c;^Y>ypcV=@O zrOBi|rNgnhgjzC4&~QR8lO$2YbJ4agK2ECI#itWrw+-BNP}nFZC?ctJaid`q2|OrA zwi`KHoeZo=2(`o)zs1^&D?${rBf=m_D#qVybUU`|`?k$51YYPbCfoK)@}^!uy)yf& zC99IYTvVqiN-m*rgL8VB5_`{5_Hu*mT|T?Nrq(2{*UIHQ?Wdz=c6EZBc(@*|s~08T z2``POW<(hsGv=Ql9{zFmnLelVS!~btyqE+!IUxSRm%i}rF^;dYk%Da13mT*fK2&`C{ElO22(WqOHnnT~EXxyVKrnk1JKe-wyyOGH>IqZj5{ z=1gWdi~s&Nwr~)hQINP0%xxG)=MpJwk;ZWiKcJYqWGS3nUePA-Qt{BBYt=RGESZ{! zDS1sCT_V>5!8}!`-Lfo{A zAul6E|L}Nm;U@~cYf3`lx*MA&HIJp}wwRRLR9{q5C*w%EhRTs<07w3*2IevI7{Eq6%oa-7wPDkS!1@U~k%>C?zdvv31 z;>4!=&aB;Expzz_XRX_~ayTTEiPD!iwViQ#EkK#^J(_z=WCi`~o z(fQYX3!%PipWd;!XD)96Ph?v|$*kU8~c-duXCw*Gr|Z3|JWi+;M*bF zvaOhsoqb2HD3<#v6EsQKFaPw_>C$qmBO{{5fb{EJz0~J+NUgu5jmT+z;0JEw_@8i8);wso@=3fj~^85)1B;cGfH|vRXu2j&8ru%l{(WB>qA_M)3!r(Alr=P zgxr9!n8Acjw?e6qc$kf=4L0$MrxkmpfRJFlxQXKETR6jYm?E^PDtwt;AxK#*WOXrO z^}^_Ol6z;-S)AS{8WQyceC#xy$X&#d1}xho3}`*kvq$Gwd=cN^vFV?V7s~dhcPUU6ZZ_b8gIon7gDc6x4oVQy#Ke8YoT~~`4XIcpw z>=M_Bv55qqiZ^t6rA;~_Db^^`%6L_MJWqx~#ZfpC<~gx%gHc4mG518|qvAw#Q6W>z z7`JUI{H+8LuNy>_ZLzBqxMhaTY%^WLSyaH3fR&mc?d_{IVikVW2umqxliSKBwvwuu z7O{+PsvVh?cshGF?MI;rOidjui_K}5%4IT5RWUWaM)KvfMG#IG#i>Q9Vk1Z9VifD# z5z{SoF^}hS?vY=UxG$Rg>lS@UcM6~6PPRo(qCobX&-a$@;}}zPxUXi^qIi-SqeTDhYstavS%?koLXpe-kQ(;jM0JB5l}e{QS(U10l3{8>4^<~+L4=~r z>pEM;Rf-qt6u-)cq)d7L$d9vOD9kv7@*z=J{MR$x75kKo7zu|ISSfDgL;x2et80VM zvlEPn{i_!!?`5WtC&j7d1vf$b|2_4z7?@wR&LP{2vO, 2012 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +# János R, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-02 13:45+0000\n" +"Last-Translator: János R\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Adminisztrációs dokumentáció" + +msgid "Home" +msgstr "Kezdőlap" + +msgid "Documentation" +msgstr "Dokumentáció" + +msgid "Bookmarklets" +msgstr "Könyvjelzők" + +msgid "Documentation bookmarklets" +msgstr "Dokumentum könyvjelzők" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"A könyvjelzők felvételéhez húzza a könyvjelzők linkjét az eszköztárra, vagy " +"kattintson rájuk jobb egérgombbal és úgy adja hozzá. Ezután már ki tudja " +"választani a könyvjelzőt a honlap bármely oldaláról." + +msgid "Documentation for this page" +msgstr "Az oldal dokumentációja" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Bármely oldalról annak a nézetnek a dokumentációjára ugrik, amely a kérdéses " +"oldalt generálta." + +msgid "Tags" +msgstr "Címkék" + +msgid "List of all the template tags and their functions." +msgstr "" +"Az összes sablon címke (template tags) és a hozzá tartozó függvények listája" + +msgid "Filters" +msgstr "Szűrők" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"A szűrők olyan műveletek, amelyeket változókon végrehajtva a sablon kimenete " +"módosul." + +msgid "Models" +msgstr "Modellek" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"A modellek a rendszerben található objektumok és a hozzá tartozó mezők " +"leírásai. Minden modell rendelkezik mezőkkel, amelyek a sablonokban " +"változóként érhetők el." + +msgid "Views" +msgstr "Nézetek" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"A honlapon minden oldalt egy nézet generál. A nézet definiálja, melyik " +"sablonból készül az oldal, és milyen objektumok állnak az adott nézet " +"rendelkezésére." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Segédeszközök a böngészőjébe az admin funkciók gyors eléréséhez." + +msgid "Please install docutils" +msgstr "Kérem telepítse a docutils-t" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Az adminisztrációs dokumentáció működéséhez szükség van a Python docutils könyvtárára." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Kérje meg a rendszergazdát, hogy telepítse a docutils-t." + +#, python-format +msgid "Model: %(name)s" +msgstr "%(name)s modell" + +msgid "Fields" +msgstr "Mezők" + +msgid "Field" +msgstr "Mező" + +msgid "Type" +msgstr "Típus" + +msgid "Description" +msgstr "Leírás" + +msgid "Methods with arguments" +msgstr "Metódusok és paramétereik" + +msgid "Method" +msgstr "Metódus" + +msgid "Arguments" +msgstr "Paraméterek" + +msgid "Back to Model documentation" +msgstr "Vissza a modell dokumentációhoz" + +msgid "Model documentation" +msgstr "Modell dokumentáció" + +msgid "Model groups" +msgstr "Modell csoportok" + +msgid "Templates" +msgstr "Sablonok" + +#, python-format +msgid "Template: %(name)s" +msgstr "%(name)s sablon" + +#, python-format +msgid "Template: %(name)s" +msgstr "Sablon: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "%(name)ssablon keresési útvonala:" + +msgid "(does not exist)" +msgstr "(nem létezik)" + +msgid "Back to Documentation" +msgstr "Vissza a dokumentációhoz" + +msgid "Template filters" +msgstr "Sablon szűrők" + +msgid "Template filter documentation" +msgstr "Sablon szűrő dokumentáci" + +msgid "Built-in filters" +msgstr "Beépített szűrők" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Ezen szűrők használatához a %(code)s kódrészletnek kell " +"szerepelnie használat előtt a sablonban." + +msgid "Template tags" +msgstr "Sablon címkék" + +msgid "Template tag documentation" +msgstr "Sablon címke dokumentáció" + +msgid "Built-in tags" +msgstr "Beépített címkék" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Ezen címkék használatához a %(code)s kódrészletnek kell " +"szerepelnie használat előtt a sablonban." + +#, python-format +msgid "View: %(name)s" +msgstr "%(name)s nézet" + +msgid "Context:" +msgstr "Környezet:" + +msgid "Templates:" +msgstr "Sablonok:" + +msgid "Back to View documentation" +msgstr "Vissza a nézetek dokumentációhoz" + +msgid "View documentation" +msgstr "Nézet dokumentáció" + +msgid "Jump to namespace" +msgstr "Ugrás a névtérhez" + +msgid "Empty namespace" +msgstr "Üres névtér" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s névtérhez tartozó nézetek" + +msgid "Views by empty namespace" +msgstr "Névtér nélküli nézetek" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Nézet függvény: %(full_name)s. Név: %(url_name)s.\n" + +msgid "tag:" +msgstr "címke:" + +msgid "filter:" +msgstr "szűrő:" + +msgid "view:" +msgstr "nézet:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r alkalmazás nem található" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"%(model_name)r modell nem található a következő alkalmazásban: %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "a kapcsolódó '%(app_label)s.%(data_type)s' objektum" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "kapcsolódó '%(app_label)s.%(object_name)s' objektumok" + +#, python-format +msgid "all %s" +msgstr "minden %s" + +#, python-format +msgid "number of %s" +msgstr "%s mennyisége" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nem tűnik egy urlpattern objektumnak." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5563512c506ec1836d47ede30334f6351124dc68 GIT binary patch literal 1860 zcmb`GyKfvt9LEQ6cpTvs9t8pPOJQ**vv+&uk$8;(CANh_EUe^kL*dNb&7CKiompmP z{SY8gQ9?ySLrp3~%O3y*5~88xZ-A1H?{9Z6ITJ-R8EN*jznS?x=JEaW%)&PU?FICg z(0@gL8U3>d@Im_vd=2~?JPp3`pb$@hOW=#(3V0SAfRBI$xBwo3*TB!g*TLVxhrv@1 z)$^yp$6!ALo&wK;Jbw=4IPJzxLC$*~?1Aeb$B$qN9)s+E3;Y%}{s6uT`vVNJUjVt@ zFF>yME0Fj1J;-@}208C<;K$$};Je^51|J1I*aAOo>@UHmV1M0=e+P1$Th08BAm{xF zlTZF#!dyYE|M$?B|Sw)Lq(EGZweWs@|N82h8jh2(Yc$s^f!%) zL9Dw`nJXJ*)Xtu?Xn4G%?ND##PE?44mnHPbMT}cz~a+3DATEqp# zeT6#b5;k!Z9cXokX&Gs%tnxBqGnL8lyJFjom7&FU&fK#yR~=t%cH&AqCT)4wn8$a| z$e}VFU;6|xkW+kAUKkE4c9AFuX%H=lNmX|ys<4@`Wj<7%+=S=6VuvwZpN|^4i|zUp z>mtJS=1_x(a+(R=;5{A3GRnPpT&T`%H^KYP#Ey4-Gs)IC*~K~HCNdh|kap@?S5@JB zOt!;RkCTh#G$aF;QETVJL2}8f>eiBV6q?a;+CQJ9{iMG_{kO6=R+iF!nqpycRUK%K zd1BqlY+bsPqP4Eb5R-wIHelP%XLMOwi~GHzG#~xjs0QYHrZT(QPTV{2vC|UwlMIy1 zGupCv1V-~1wfAEzvR?1-@UR;>s-CE$?#Si6dS5e`CPYumUZ=IawY_oY1p3{yb;%*9 zMP)d)jG{VJg+UxTCr7f24t<#x81r1_7uIGSN)g;E+Fs;5Gql&Vn}X@l81QzJ0r z?v|LP=-mMxSR*o{M|GrmSu|oZsC6T1, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Initio" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentation pro iste pagina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Transporta vos ab omne pagina al documentation pro le visualisation que " +"genera ille pagina." + +msgid "Tags" +msgstr "Etiquettas" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modellos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Visualisationes" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Patronos" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "etiquetta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "visualisation:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modello %(model_name)r non trovate in application %(app_label)r" + +msgid "model:" +msgstr "modello:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "le objecto `%(app_label)s.%(data_type)s` connexe" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objectos `%(app_label)s.%(object_name)s` connexe" + +#, python-format +msgid "all %s" +msgstr "tote le %s" + +#, python-format +msgid "number of %s" +msgstr "numero de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s non pare esser un objecto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d6d934d0976a4686a6371be86d0b4289d100edec GIT binary patch literal 6343 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, 2015-2016,2021 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +# rodin , 2013-2014,2016 +# sag᠎e , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-09-14 00:30+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "Dokumentasi Administrasi" + +msgid "Home" +msgstr "Beranda" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Bookmarklets" +msgstr "Bookmarklet" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet dokumentasi" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Untuk memasang bookmarklet, tarik tautan ke bilah markah, atau klik kanan " +"tautan dan tambahkan ke markah Anda. Sekarang Anda dapat memilih bookmarklet " +"dari semua halaman di situs." + +msgid "Documentation for this page" +msgstr "Dokumentasi untuk laman ini" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Buka dari laman apa saja ke laman dokumentasi untuk view yang menghasilkan " +"laman tersebut." + +msgid "Tags" +msgstr "Tag" + +msgid "List of all the template tags and their functions." +msgstr "Daftar seluruh tag templat dan fungsinya." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filter merupakan tindakan yang dapat diterapkan pada variabel dalam sebuah " +"templat untuk mengubah keluaran." + +msgid "Models" +msgstr "Model" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Model merupakan deskripsi semua objek dalam sistem dan bidang yang terkait. " +"Setiap model memiliki beberapa bidang yang dapat diakses sebagai variabel " +"templat" + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Setiap laman pada situs publik dihasilkan oleh sebuah 'view'. 'View' " +"mendefinisikan templat mana yang digunakan untuk menghasilkan laman dan " +"objek mana yang tersedia untuk templat tersebut." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Alat untuk peramban Anda untuk mempercepat akses fungsionalitas admin. " + +msgid "Please install docutils" +msgstr "Instal docutils." + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Sistem dokumentasi admin membutuhkan pustaka docutils Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Ajukan permintaan kepada administrator Anda untuk menginstal docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Bidang" + +msgid "Field" +msgstr "Bidang" + +msgid "Type" +msgstr "Tipe" + +msgid "Description" +msgstr "Deskripsi" + +msgid "Methods with arguments" +msgstr "Metode dengan argumen" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Argumen" + +msgid "Back to Model documentation" +msgstr "Kembali ke Dokumentasi Model" + +msgid "Model documentation" +msgstr "Dokumentasi model" + +msgid "Model groups" +msgstr "Grup model" + +msgid "Templates" +msgstr "Templat" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templat: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templat: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Lokasi pencarian templat %(name)s:" + +msgid "(does not exist)" +msgstr "(tidak ada)" + +msgid "Back to Documentation" +msgstr "Kembali ke Dokumentasi" + +msgid "Template filters" +msgstr "Filter templat" + +msgid "Template filter documentation" +msgstr "Dokumentasi filter templat" + +msgid "Built-in filters" +msgstr "Filter bawaan" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Untuk menggunakan filter ini, sertakan %(code)s pada templat " +"Anda sebelum menggunakan filternya." + +msgid "Template tags" +msgstr "Tag templat" + +msgid "Template tag documentation" +msgstr "Dokumentasi tag templat" + +msgid "Built-in tags" +msgstr "Tag bawaan" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Untuk menggunakan tag ini, sertakan %(code)s pada templat Anda " +"sebelum menggunakan tagnya." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Konteks:" + +msgid "Templates:" +msgstr "Templat:" + +msgid "Back to View documentation" +msgstr "Kembali ke dokumentasi Tampilan" + +msgid "View documentation" +msgstr "Dokumentasi view" + +msgid "Jump to namespace" +msgstr "Loncat ke namespace" + +msgid "Empty namespace" +msgstr "Namespace kosong" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "View berdasarkan namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "View berdasarkan namespace kosong" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Fungsi view: %(full_name)s. Nama: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikasi %(app_label)r tidak ditemukan" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r tidak ditemukan di aplikasi %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "objek `%(app_label)s.%(data_type)s` yang terkait" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "obyek `%(app_label)s.%(object_name)s` yang terkait" + +#, python-format +msgid "all %s" +msgstr "semua %s" + +#, python-format +msgid "number of %s" +msgstr "jumlah %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s bukan berupa objek urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4e88926df41817d61a26ea1454895b224af2cc5f GIT binary patch literal 464 zcmZ8c!A=4(6vXIhkDfg|6AuvVwu>6pBF2c2U?38*dat`>DOuW0TLeEuKhJOREf`3g zWYSJL?{((q^yI6CI6|HwFObK`OJs!@`HhdacvhZ0Ce|!u>d7!8Z_+wtG>2>~fWn$5rk~VmJhomxT1J6dt|gNqEVj#iAR+A`-PBia2XGS;QC`$y9!*YUh7n z3@qkX*G+~9M#6cLSfO1Zys;dfh1SZ!NUBU0aEED7J``ISDm^pzIHU8G$R$anSaKL< z2I_O~OHS!}y$*e~P0i#cOwE#(yN-^QbXScQf8$gc+6czOasSXh3R%!I+Dnb8K1;0U z<;K&p5K4C-oeS%v@4hAj5+8ike=})GU#BKhI_D6-E5DD)L78AutgI-=z}ThZpv$dv T-Bt&7*KS?Ic^9HaC#d}bwugt~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.po new file mode 100644 index 000000000..ae4bec1f9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcc3bcd1359fdec7d49f65b5fd253f53a74de351 GIT binary patch literal 1828 zcmaiz%WoV-5QiH`cr4)+9ug#=%E7``n0**T;xPu~I943l!itxOo720~JKNrw?p1e> zACeK`gg65y#KA|9j4TC(6I|wskdU}=;m8dM{sVqByLRkAL~FahsqL!js_L%a&z|~1 zV7!2N9`h&6moaxAz=H7?_!{^(cm{msK_Q+1FM=mc4 zmu`@$;KhRN7P&G(25rqri8}XHq@KkIeeG!|QzaI4h6B8~W^*O37x~cBjxDI?Y);bb zR7xCB=qto|?7*=fMVne}VOs`Dl~GOxBvXm(zb;m6qB5G8%$e&(=4#4S$@Xkv64HjV z#y-~dOmW38d^6Ef65T`{aT75m8`7k< zc0&!V3(<;CbrQ`NsgK$=rrPRz?dXbA)vZMf2sEbYX6sVaY(=dZYP}i1F>|rmYBr%5 z-B6pFeV)*pIn--jY+}@wr4LctN#l{WbunF+#^8RJmFCjFg=iqYn^j_6o1T3eHYP1_ zKT%uBJf@{CN@fz>rOAE>!?@Ad+S;lI_NjYnyWX{VW0ch)pk6s>Xy2Hstt_ovy_hW1U<)W*mYZGnKm@ap8I0`f- z?Q5%9;bayqT9^Bn%&-#u-1IDsKIbM4O;D>z7v`u%ySp?Jn=}WxH8oq~ZrjwZJkUOn z8VodT;>8|sw0>5E!io9v_5e>6ohF@F8*G$!vcepFNZ0wVeJX!c-b;rT_T_$gP>8j1 zAI`2Ror^Vv`Z}oSlw^&INn8>y*>`zn0_j!X;N$qvtBCe;b`>x6zFt7vTpMHH*bR Db_M%K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..a70aa6efd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hafsteinn Einarsson , 2012,2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Heim" + +msgid "Documentation" +msgstr "Skjölun" + +msgid "Bookmarklets" +msgstr "Bókamerklar" + +msgid "Documentation bookmarklets" +msgstr "Skjölunarbókamerklar" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Skjölun þessarar síðu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Sendir þig af hvaða síðu sem er á skjölun þess framsetningarlags sem myndar " +"hana." + +msgid "Tags" +msgstr "Tögg" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Síur" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Módel" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Ásýndir" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Sniðmát" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "merki:" + +msgid "filter:" +msgstr "sía:" + +msgid "view:" +msgstr "skoða:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Líkanið %(model_name)r finnst ekki í forritinu %(app_label)r" + +msgid "model:" +msgstr "líkan:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "tengdi `%(app_label)s.%(data_type)s` hluturinn" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "tengdir `%(app_label)s.%(object_name)s` hlutir" + +#, python-format +msgid "all %s" +msgstr "allt %s" + +#, python-format +msgid "number of %s" +msgstr "fjöldi af %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s virðist ekki vera urlpattern hlutur" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4bf8985bfb33aa2974b6ddb80e376bc7d2e51506 GIT binary patch literal 6453 zcmb`LUyLM09mh*R)I~)Q6h)ypU2j)*W_J$`aBlCo|8nH+SYScaAoR@C&KB3x)z{U% zdrRUU5=qntV~jq?ixLw;h%p$WiO-k#!UGzk4;pz;^u-5_nrK2u{QRoA=g+#Ad(cj5 zzSG@Rzxw^F-|su~+Vxj`TX7v@e28)96-s>?Jbe`(Tra;>sRzLyfeYZ3S1a`%a0!(8 zN5GrG&w=j%p9XIPzg$0m4*VeZKLy_j{t}e+uYvCZ{|dexd=tC|y!vhN`SqZz)1b&d z0Dd3*6nHK828c@P8WyuuT?g_=-2^@cYEVqr2CoCZ06q+U1KbC`4$8XsqxAd0TfjTO z{os2+3yQv<2W7vnfinL&@Okig@P6>v3^Ks4gY)1EpzQk#@WbG*L9zEApxAR2MvC3H zg4csB@B`ps5RvLLAX8Nz{4D6epMbA`5|?LCO6>R@co1AfnCv$MMP32E8+;ZN|9lI) z349I|KmHgLJ6;9FU%#pEUjxP7KY@$j-$9YP2VqO#UQpyc2KL`VyunrOFXEh!gEwHL ztiKl&yHD5n6exCm1r$5K3GM-Z0DcsF6~r|4PY{tISaN?YL6dbigK|F$%KK&TR`4*W z!6(6&z-K^-(*jNqJy&Wx3W~k=fgXGSlzA6Hwp70Y9|B(o_k(v6e3?H4Zvad16W~`t z$&-tqtotn}a{dB}AKw690Iy`xY49ab{O~XEPVhz!#g*XwpxA#Fl=bI9vF903{P#S_ z67@q+{B;o|Rn_l7@yDORKKM8A74Q+1>VdbBgpY&If)9d!1SNj^2|lW+4k-RR3(E7y zK{>x&Q1<^KDEoXD6nkE*?_UN*ub+X-;Lkx>|L^+#O;G&3h_a+bIBR0}0fuJW%@BEQ z#wIXZhtK$N zFCaN8m-s^LK<$v{5|euvlb85|bO?1!o-Z&u42g&2#^iMyHy>flF*q_ISN4IDvmav+ z26cpSh#}X0#=-C{=7pTe+w1!lD83f|$~7M$oRhtL59eb>b3JO!mR_&2UTIy{(JMXI zH-~2D)~hsqB1?v5-mff%XKj6!+wqL5*g0WF&3fH;#_P
    7. ~dB6uNY}YjmQSo+o8# zicGuiQ>Is{xzSW}!TNGu9qA8k#PVjJ**SzhktSV}&KF^m zbysD5b)*=CnO+@Ddgo-z>9x(%GuW1*;iTN=UGT$>SI(UqCdIkblt`{@TDEMa*FjTE zJSdZaSI1mdnhRw|9XGyL*gWVwt;N)x?oJAyezop!+lKWzPXFe$`e%>UWZN0`k`KJ43-DX5&Yr`U@G{Zb)uB@v(OK?@QKFVfC zon-xbevFjYNx{?2#NztY$f9y1DM!-U>clWFx3#2;&y$`}C#^~Q@zVp*VKqi!A>A6a zdPx?NB+pYDmD)@SD|>m3$CJ@cvUMWTg0ikE^QvsC``pl|`>SCtug6Nr6R)>jrPm8L z#H#J+#-P5LP6Hi%UOO#V*Z9RpV=h4*p+zidNyR+y2RMGb;!@4zTQZXuG88_aYCI*O^ACv<0bK!Ir7~o z*lIO3i6_f&S^xhTO`GHTdj>9Jz1v~ zbicqZ$qaG2#3O{MnIjQ$X*VerG$pLCgN?G)qgFAqSt7M1>G!pzeC%9JhjClsz)H4w zlhP%^%0@ngc*j|8@|0Q_w5F)Z3O?&Hy+FAvM_o-C*{Gq(;R@=H60vK@2t#GGS+p_= z*&$it_rHlng2;5K4=EUZShy`Oh0SRK*E^R|%)?=+gWR;}B((bvnG37o(~N!tu>PjJNgu*$dama8)cby78kd+ zw%V|l%-eNyK~^kA4I4=7<%_mloS!*!>dc9;Ez9ktnLr{kl)(WV>f?oSk#=pf1G=}7 z6yB5vA6Yxux@SC3_F6YZ>qJIole8UuPuG?sH9H)$nbou^lC*Ww6+_?ASsrfv!F>mG z{CaRM)3+Ve%ku|j)Xd2$dm4Yy9c^HSW4gC1A*At+XIz31X3!RIhEx_UrC-h$6mT#w zC8<7Ug=$VF8c*{u^J+whqBci{6U;E#l?&3a3b#r62pdGNth5}lB1@!KCu2ew1Wvw@ z&LGokyCI07m+m$t8O=eWoE>#^%;EyiDJ)f`mr_BbeT=?`!1~fP^e`$hZRDh^sB@!P z+;*o=a*pBo%Fqsl*4Qjj4-7I}f7iZBg&{g&i$WKjzW8E8^%C8OkK-9Jp{-BHFOe!* z-!q6!pm|L{l9iR`XlU6o(juaW3*x>yF0ge_t@bW+B#_TtX1g{Omx!k6NMc)^ZK$H& ztX%2Tv1FLXPh0y@ozf>EjyN=k3qG)%1Ng6lgs?-MP5dOlKF+r|4FVUKqwLDij#3_q_Lx;RX9Sjv%)NMyITJsrcBWV@NPV)X^4y9d_1Oq7CfZD#Xo*?V`FbzNLYF2uA@8ZA7XxORW%?s50 z#P_Iu;?F=yse7C)C@Ael^2wV)Mw9LmSEq%G;{Tq*`80ikLiu!|R))p$yJRr1RW`6B zS(6@P5o94^bH}bCIW@5#P+2A!D#g`JRAPyoRAPRTU<-wmqzZN0#(>%dF%YL<$R&ts z$lhukd7T%Q6NA^IIE;_EvCAG5k^jpE$Z4yG%Odnjs$QMLXw|Kmt2`3Q+Ls=`X;RlS z(pRa=P2CdidhvTwM<_n>(+(bMsr$#9e`KORLuZwbi3&4%#=jzQYsuO0Z$sTeWX3Kp zo8(rpyv{~OThNN@ViGv5;auTP-ZrJ_a-5bVO3i@(rXs7Qht!njzZOn$+Gd%nY3+Xi DmWopK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..e2c43bd93 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,289 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Flavio Curella , 2013 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# palmux , 2015-2016,2019,2021 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 16:05+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentazione Amministrativa" + +msgid "Home" +msgstr "Pagina iniziale" + +msgid "Documentation" +msgstr "Documentazione" + +msgid "Bookmarklets" +msgstr "Bookmarklet" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet alla documentazione" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Per installare i bookmarklets, trascina il link sulla barra dei segnalibri o " +"clicca col tasto desto sul link ed aggiungilo ai tuoi segnalibri. Ora potrai " +"selezione un bookmarklet da ogni pagina del sito." + +msgid "Documentation for this page" +msgstr "Documentazione per questa pagina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Porta da qualsiasi pagina alla documentazione della view che genera quella " +"pagina." + +msgid "Tags" +msgstr "Tag" + +msgid "List of all the template tags and their functions." +msgstr "Lista di tutti i template tags e delle loro funzioni." + +msgid "Filters" +msgstr "Filtri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"I Filtri sono azioni che possono essere applicate alle variabili all'interno " +"di un Template per alterarne l'output." + +msgid "Models" +msgstr "Modelli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"I Modelli sono descrizioni di tutti gli oggetti nel sistema e dei campi ad " +"essi associati. Ogni modello ha una lista di campi accessibili come " +"variabili nel template." + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ogni pagina sul sito pubblico è generata da una View. La View definisce " +"quale Template è usato per generare la pagina e quali oggetti sono " +"disponibili in quel Template." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Strumenti per il tuo browser per accedere velocemente a funzionalità " +"dell'admin." + +msgid "Please install docutils" +msgstr "Installa docutils, per favore" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Il sistema di documentazione dell'admin richiede la libreria Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Chiedi ai tuoi amministratori di installare docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Campi" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrizione" + +msgid "Methods with arguments" +msgstr "Metodi con argomenti" + +msgid "Method" +msgstr "Metodo" + +msgid "Arguments" +msgstr "Argomenti" + +msgid "Back to Model documentation" +msgstr "Torna alla documentzione del Model" + +msgid "Model documentation" +msgstr "Documentazione Modello" + +msgid "Model groups" +msgstr "Gruppi del Model" + +msgid "Templates" +msgstr "Template" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: \"%(name)s\"" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Percorso di ricerca per il template %(name)s:" + +msgid "(does not exist)" +msgstr "(non esiste)" + +msgid "Back to Documentation" +msgstr "Torna alla Documentazione" + +msgid "Template filters" +msgstr "Filtri Template" + +msgid "Template filter documentation" +msgstr "Documentazione del filtro template" + +msgid "Built-in filters" +msgstr "Filtri inclusi" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Per usare questi filtri, inserisci %(code)s nel tuo template " +"prima di usare il filtro." + +msgid "Template tags" +msgstr "Tag Template" + +msgid "Template tag documentation" +msgstr "Documentazione del Tag Template" + +msgid "Built-in tags" +msgstr "Tag inclusi" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Per usare questi tag, inserisci %(code)s nel tuo template prima " +"di usare il tag." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Contesto:" + +msgid "Templates:" +msgstr "Template:" + +msgid "Back to View documentation" +msgstr "Torna alla documentazione della View" + +msgid "View documentation" +msgstr "Documentazione View" + +msgid "Jump to namespace" +msgstr "Vai al namespace" + +msgid "Empty namespace" +msgstr "Namespace vuoto" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views per il namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views per il namespace vuoto" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funzione di View: %(full_name)s. Nome: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r non trovata" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modello %(model_name)r non trovato nell'app %(app_label)r" + +msgid "model:" +msgstr "modello:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "l'oggetto `%(app_label)s.%(data_type)s` collegato" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "oggetti `%(app_label)s.%(object_name)s` collegati" + +#, python-format +msgid "all %s" +msgstr "tutti %s" + +#, python-format +msgid "number of %s" +msgstr "numero di %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s non sembra essere un oggetto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..edac83ed3ed0b574a2c08ae6971f7ec51d166537 GIT binary patch literal 7358 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 TYG{pWYn_Cu-;tMFU$XJPDE9`t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..54d9c995a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,284 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fandekasp , 2012 +# Jannis Leidel , 2011 +# Shinya Okano , 2013-2016 +# Takuya N , 2020 +# Tsuboi Yuto , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-05-09 04:02+0000\n" +"Last-Translator: Tsuboi Yuto \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "管理用ドキュメント" + +msgid "Home" +msgstr "ホーム" + +msgid "Documentation" +msgstr "ドキュメント" + +msgid "Bookmarklets" +msgstr "ブックマークレット" + +msgid "Documentation bookmarklets" +msgstr "ドキュメントへのブックマークレット" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"ブックマークレットをインストールするには、リンクをブックマークツールバーにド" +"ラッグするか、 リンクを右クリックしてブックマークに追加してください。これでサ" +"イトのどのページからでもブックマークレットを選択可能になります。" + +msgid "Documentation for this page" +msgstr "このページのドキュメント" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "各ページから、ページを生成したビューのドキュメントにジャンプします。" + +msgid "Tags" +msgstr "タグ" + +msgid "List of all the template tags and their functions." +msgstr "すべてのテンプレートタグとその機能の一覧です。" + +msgid "Filters" +msgstr "フィルター" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"フィルタは、テンプレート内の変数に適用して出力を変更するためのアクションで" +"す。" + +msgid "Models" +msgstr "モデル" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"モデルは、すべてのシステム内のオブジェクトとそれに関連するフィールドの説明で" +"す。各モデルは、テンプレート変数としてアクセスできるフィールドのリストを持っ" +"ています。" + +msgid "Views" +msgstr "ビュー" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"公開サイトの各ページは、ビューによって生成されます。ビューは、ページの生成に" +"使用されるテンプレートとそのテンプレートで利用できるオブジェクトが定義されて" +"います。" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "ブラウザから管理機能にすぐにアクセスするためのツールです。" + +msgid "Please install docutils" +msgstr "docutilsをインストールして下さい" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"管理用ドキュメントシステムにはPythonのdocutilsライブ" +"ラリが必要です。" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"管理者に docutils のインストールについて問い合せて下" +"さい。" + +#, python-format +msgid "Model: %(name)s" +msgstr "モデル: %(name)s" + +msgid "Fields" +msgstr "フィールド" + +msgid "Field" +msgstr "フィールド" + +msgid "Type" +msgstr "型" + +msgid "Description" +msgstr "説明" + +msgid "Methods with arguments" +msgstr "メソッドと引数" + +msgid "Method" +msgstr "メソッド" + +msgid "Arguments" +msgstr "引数" + +msgid "Back to Model documentation" +msgstr "モデルドキュメントに戻る" + +msgid "Model documentation" +msgstr "モデルドキュメント" + +msgid "Model groups" +msgstr "モデルグループ" + +msgid "Templates" +msgstr "テンプレート" + +#, python-format +msgid "Template: %(name)s" +msgstr "テンプレート: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "テンプレート: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "テンプレートの検索パス %(name)s:" + +msgid "(does not exist)" +msgstr "(存在しません)" + +msgid "Back to Documentation" +msgstr "ドキュメントに戻る" + +msgid "Template filters" +msgstr "テンプレートフィルタ" + +msgid "Template filter documentation" +msgstr "テンプレートフィルタドキュメント" + +msgid "Built-in filters" +msgstr "組み込みフィルタ" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"これらのフィルタを使用するには、テンプレート内でのフィルタの使用箇所より前に " +"%(code)s を記述してください。" + +msgid "Template tags" +msgstr "テンプレートタグ" + +msgid "Template tag documentation" +msgstr "テンプレートタグドキュメント" + +msgid "Built-in tags" +msgstr "組み込みタグ" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"これらのタグを使用するためには、タグの使用箇所より前に %(code)s " +"をテンプレート内に記述します。" + +#, python-format +msgid "View: %(name)s" +msgstr "ビュー: %(name)s" + +msgid "Context:" +msgstr "コンテキスト:" + +msgid "Templates:" +msgstr "テンプレート:" + +msgid "Back to View documentation" +msgstr "ビュードキュメントに戻る" + +msgid "View documentation" +msgstr "ビュードキュメント" + +msgid "Jump to namespace" +msgstr "ネームスペースへ移動" + +msgid "Empty namespace" +msgstr "空のネームスペース" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "ネームスペース %(name)s のビュー" + +msgid "Views by empty namespace" +msgstr "空のネームスペースのよるビュー" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"ビュー関数: %(full_name)s. 名前: %(url_name)s.\n" + +msgid "tag:" +msgstr "タグ" + +msgid "filter:" +msgstr "フィルター" + +msgid "view:" +msgstr "ビュー" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "アプリケーション %(app_label)r が見つかりません" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"モデル %(model_name)r が %(app_label)r アプリケーションに見つかりません" + +msgid "model:" +msgstr "モデル :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` (関連オブジェクト)" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` (関連オブジェクト)" + +#, python-format +msgid "all %s" +msgstr "全ての %s" + +#, python-format +msgid "number of %s" +msgstr "%s の数" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s はurlpatternオブジェクトでは無いようです" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b8e30edf3f84a577bb65f62c647ad12987d1c59 GIT binary patch literal 4446 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 uz|>Jkvfdc&9rmQ%a3hPX5w`p1K90Yd62iR5, 2013,2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Administrative Documentation" +msgstr "ადმინისტრირების დოკუმენტაცია" + +msgid "Home" +msgstr "საწყისი გვერდი" + +msgid "Documentation" +msgstr "დოკუმენტაცია" + +msgid "Bookmarklets" +msgstr "სანიშნები" + +msgid "Documentation bookmarklets" +msgstr "დოკუმენტაციის სანიშნები" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ამ გვერდის დოკუმენტაცია" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"გადასვლა ნებისმიერი გვერდიდან იმ წარმოდგენის დოკუმენტაციაზე, რომელიც ამ " +"გვერდს აგენერირებს." + +msgid "Tags" +msgstr "ტეგები" + +msgid "List of all the template tags and their functions." +msgstr "ყველა შაბლონის ტეგის სია და მათი ფუნქციები." + +msgid "Filters" +msgstr "ფილტრები" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"ფილტრები მოქმედებებია, რომელებიც შეიძლება გამოიყენებოდეს ცვლადებზე შაბლონში " +"გამონატანის შესაცვლელად." + +msgid "Models" +msgstr "მოდელები" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "წარმოდგენები" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "გთხოვთ, დააყენოთ docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "მოდელი: %(name)s" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "ველი" + +msgid "Type" +msgstr "ტიპი" + +msgid "Description" +msgstr "აღწერა" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "მოდელის დოკუმენტაცია" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "შაბლონები" + +#, python-format +msgid "Template: %(name)s" +msgstr "შაბლონი: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "შაბლონი: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(არ არსებობს)" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "შაბლონის ფილტრები" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "შაბლონის ტეგები" + +msgid "Template tag documentation" +msgstr "შაბლონის ტეგების დოკუმენტაცია" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "ხედი: %(name)s" + +msgid "Context:" +msgstr "კონტექსტი" + +msgid "Templates:" +msgstr "შაბლონები:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "ხედების დოკუმენტაცია" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ტეგი:" + +msgid "filter:" +msgstr "ფილტრი:" + +msgid "view:" +msgstr "წარმოდგენა:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "მოდელი %(model_name)r ვერ მოიძებნა აპლიკაციაში %(app_label)r" + +msgid "model:" +msgstr "მოდელი:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` დაკავშირებული ობიექტი" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` დაკავშირებული ობიექტები" + +#, python-format +msgid "all %s" +msgstr "ყველა %s" + +#, python-format +msgid "number of %s" +msgstr "%s - რაოდენობა" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s არ არის urlpattern-ის შესაბამისი ობიექტი" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b4eb430598a8ef0acde2381f0f75f486afd404a GIT binary patch literal 1289 zcmY+Czi%8x6vu}UejVXgAXFet3M5<6_;xLblW~l2;utJAVZu66s%Y-^c|E?_*<)rd zXB#RCL800iOU*oDkx1@D%tYcm{k5JPSSo_Q6NN*TBcXOW;Xxt@Cem z_9n=BTVM~o+4*vaS}dN1eTIFQyoU$ET3yb;`S}ibJa>$CeI6@oJ%h=$aos##I7WM?oEt4^ zb8}zCT-i{RzDbhyY)tcFHB{4@e2U^q;}h*AE!HTGf}JGWc(K-u+P_U}ty^-XXx9k1 zL?Mc|nwrFb(oR!~!c*xde>;ugro+svZcB_t)eO#Eqj~q7V1i%ws5tE za5E5!FjeZ&bChZei5auVbgLrlulQkg2tN+YI*|$+?}B zCc59B&1MUUW$iZY@rM5K!S2F!yZd7^?9cZG8-uI&dXO(JC#@M*7MJDm z=gORyXIErCzuXgZQ)iU4cus}AeQ1LbtI;HbD_pIdsqrk(9cPo+3d!_KTO z@(7~c60X98VD=M4j(+}z#$$V6;k2G^ABO4ngWq^jW)>m&{+PT>cM}x0rlViJ2zDRg bW<2IsWxGtgrPE4yTf+levs(NIHR~*L literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..f404ac25c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Muḥend Belqasem , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-10-06 12:00+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Agejdan" + +msgid "Documentation" +msgstr "Tasemlit" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "Tiṛekkizin" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Imzizdigen" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Timeẓriyin" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "Urtan" + +msgid "Field" +msgstr "Urti" + +msgid "Type" +msgstr "Tawsit" + +msgid "Description" +msgstr "Aglam" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "Tarrayt" + +msgid "Arguments" +msgstr "Tiɣira" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Tineɣrufin" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(ula- it)" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "Asatal:" + +msgid "Templates:" +msgstr "Tineɣrufin:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "Sken tasemlit" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tabzimt:" + +msgid "filter:" +msgstr "imzizdig:" + +msgid "view:" +msgstr "wali:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "Taneɣruft" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "akk %s" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..050a2892eed8fee4e09460dd42d93f6b15000994 GIT binary patch literal 1587 zcma)*O>Y}T7{>=FZ-xTm0s;<$P^4I8{SpwQ8v<473x!%lmEnR!I=095#=A4C-Eos} zN&;tKj5PDxnR#CR&$GL~-hbc| zhH)R}Bbc9IK0wbmVZm4f9|zaLyTLEOgWwMM5cmW5F!&320Q?<%0{jEK4J_Zx*zMpv zNc$ro#W@KU!7508Z-FK7UGP?L2(BQ;_uw4%hhRkcUI!lp*Fp0C2wVVv1n&X=1S{Y{ z1i2S{4J5stJ+6ayVgC+z61)JCzMsM8z~4afdkkWcJ{vgt*Fc)AXE~7UAu}6P<1Ks7 zl=luy%11TdiAfqMADc;eL(7yaZMcYIDH3ipuSqU=Hwj~5j7${QwG~-6?5NhANF<$5 znv@;W^=>4U5hl>;#vQNiYsi}#8QMY0W6_fA1szFN(G3~$nc0ZAtVAU9NhYYNyQ;wh zMapoGbvYC@8RiovLU^RC8H5n%v&_|JsvFg0!gZ7G5*Z338~p6FXIhw<-K}OfQF?Z- zxRe>u@|kH%zOQ3L7_n^DW0}9^#?A$D)n`kIrVe?h8s4iiNzoCXH&%pd>D(C^>%@4K zv=ubGquo~ORkhD^OD}t81@3ai4YtJAFwnxHjTL@HBKMNn#>Y}|~Rf@>xFNrrqr_E>E#>9THxVpMp zFcdIo%C$mWN5x&GeL2kb|%q2QU2 zEZZ2qqsaxVV{R|+lgoaNRe+5B(dFbk{@lE!X?c je`)${Knr!4V0Vz|f5p4u7n_d8?C_^A-3E1mYW3M)nO#6j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..1b33c368d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nurlan Rakhimzhanov , 2011 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Негізгі" + +msgid "Documentation" +msgstr "Документация" + +msgid "Bookmarklets" +msgstr "Букмарклеттер" + +msgid "Documentation bookmarklets" +msgstr "Құжаттама букмарклеттері" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Бұл бетке арналған документация" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "тег:" + +msgid "filter:" +msgstr "сүзгіш:" + +msgid "view:" +msgstr "көрініс:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r app ішінен %(model_name)r үлгісі табылмады" + +msgid "model:" +msgstr "модель:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "байланысты `%(app_label)s.%(data_type)s` объект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "байланысты `%(app_label)s.%(object_name)s` объекттер" + +#, python-format +msgid "all %s" +msgstr "барлық %s" + +#, python-format +msgid "number of %s" +msgstr "%s саны" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s urlpattern объектке ұқсамайды" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8440d726253fbff5c6c0facce0eae01a2d166bc9 GIT binary patch literal 1476 zcmcJOO^*~s7{^OR!SRIzF1{vZA_)e1rpFlA?RAY=7Q*6g*sOyG8?Nz{!h8kC+r6z)!$||5Ljwtcl*Nr21D+*YozT>i%=r zwr?25^O&z-eulXl^FAhxqmMDRADjZ81sA~Qz_Z{>;0pLM_#?Ot{0)2`{2hD>eC=_@ zwu5^?vSX0)90bXK5_}Sz0zXI0aqvUfcb{0#I|8Sjuv_2(unUfYSHTy+KR~MY7x*GL zfn=|PAAwZwH25m`DM-400G|eLf+!b84NvNc2Au;9>X~#>4!E)%m^9E{h(~*2JcB1n zGq$JXT`fzlwB@2Gq%hoS-j-bOp~(titu%`3_DR{XY(ne#T$uSx+LBG`&M=qC3Y%)R z)#B}cb>uyb3WK!dh3HFmROgZ%8|FpHm-LYLjLx}GOJS25u>*_0kLi5|-<(%o3)Cd0QH;d$eaoKVg(6VY5b)z-X!)eIQK< zK?(1k6soUlbF$FJMl)qU?M4&Bei^lN!fUg~ThSpSgZO9?)f4_^+&mb?&8Rubn+KA& zM)$?dIEG_1Cl^x6xy5gE(=Xl^W7MWaX`_}As?3DdCgI0~QaGk*nWA<6HoAfNZWhdX zs(Shz#Hjuda-)_MdBWct(1JVxoNmv@YNabuHIXQ+n2uj+Pf>>{o>tskC=$M=G}^~PP35lTyXlB za#dJ=L6xd=*trD5JDkMz(B{QEYxpmyvyHRIaeg0mu(%dZ8op4ny!k_Ip5dx@ gx4l~p*8n+Zu?U%@~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..f6064252e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "គេហទំព័រ" + +msgid "Documentation" +msgstr "ឯកសារ" + +msgid "Bookmarklets" +msgstr "កំរងចំណាំ" + +msgid "Documentation bookmarklets" +msgstr "កំរងចំណាំអំពីឯកសារ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ឯកសារសំរាប់ទំព័រនេះ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ប្រភេទ:" + +msgid "filter:" +msgstr "ពាក្យស្វែងរក" + +msgid "view:" +msgstr "មើល" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "ទាំងអស់ %s" + +#, python-format +msgid "number of %s" +msgstr "ចំនួន​នៃ​%s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ហាក់បីដូចជា URL ដែល​ត្រឹមត្រូវទេ" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c112d5364747c4a5b875f6c1d70f5a3de208d7e GIT binary patch literal 1656 zcmbVL&uQ{H$atpKnjA{ovjcMhg1~=MAAe==~Agj@2+<+@J-+(@JGa41x~|$v7fQiz*BJg5Ga9Dz^{O3fX{%WYafFD1=fIv zfd`R<^c?|G9V0-h>-^CE5?Fzq0g)~YvPlyS>H`hZOgwN4`rZc8fIRjNCgg>22rHy8 zcD&$iqYAE#<1){cwA>lqR9y0&O>^m-vYMObb=7k0f-wu3v$U6oZ=97Zwva8q?lPNaU%kqLRn;!32lX0n+!zBrE^9uTQBpSvmzL=;bTuaBh zN-HZJiU=n0R+&swe!O6vBt-#&Wu~oC!E`TcD$7lW?wsrjMl^!WT0;d!lkMmWWeXG} zc>B84T~nD;xv?&qDY{8Jy3p$uQNsvcnZ4SGE?O0ek0y{^@Q>sA*(k0@^-*3wBTkQ= zjO%d>$7oJ1Cd9eRZ*vK98keJUul*=jN7?9-ZkcwXyMmu< zCT?4%;0wAkoA#_sqszu-h2T05W-(qLP-r)ot-9!)^@jy5wmc6Cy$ToZ;Xoeq*+o7yq!)7BeV7 zVZ(g+!}dd?2>Po-S|ob{0s(7~4HRf6eG-B`uE9G4;Dy?L+M-@Tz`da{_`WD$Tfbnh E0Am-u, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "ಪ್ರಾರಂಭಸ್ಥಳ(ಮನೆ)" + +msgid "Documentation" +msgstr "ವಿವರಮಾಹಿತಿ" + +msgid "Bookmarklets" +msgstr "ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು" + +msgid "Documentation bookmarklets" +msgstr "ಮಾಹಿತಿಯ ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ಈ ಪುಟದ ಬಗೆಗಿನ ಮಾಹಿತಿ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"ನಿಮ್ಮನ್ನು ಯಾವುದೇ ಪುಟದಿಂದ ಆ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸುವ ನೋಟದ ಮಾಹಿತಿಪುಟಕ್ಕೆ ಕೊಂಡೊಯ್ಯುವದು" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ಟ್ಯಾಗ್:" + +msgid "filter:" +msgstr "ಸೋಸಕ:" + +msgid "view:" +msgstr "ನೋಟ:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "ಮಾಡೆಲ್:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "ಎಲ್ಲಾ %s" + +#, python-format +msgid "number of %s" +msgstr "%s ಗಳ ಸಂಖ್ಯೆ" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s URL ಸ್ವರೂಪದ್ದಾಗಿ ತೋರುವದಿಲ್ಲ." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..31856703351c06cf8b07fb4bd6973ea659964859 GIT binary patch literal 6563 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 z, 2016 +# 코딩 영, 2021 +# Geonho Kim / Leo Kim , 2019 +# Ian Y. Choi , 2015 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014,2016 +# Kagami Sascha Rosylight , 2017 +# 이지현 , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-10 02:10+0000\n" +"Last-Translator: 코딩 영\n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "관리 문서" + +msgid "Home" +msgstr "홈" + +msgid "Documentation" +msgstr "문서" + +msgid "Bookmarklets" +msgstr "북마크릿" + +msgid "Documentation bookmarklets" +msgstr "문서 북마크릿" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"북마크릿을 설치하시려면 링크를 북마크 툴바로 드래그 하거나, 오른쪽 클릭으로 " +"해당 링크를 북마크에 추가하세요. 이제 사이트 내의 모든 페이지에서 북마크릿 선" +"택이 가능합니다." + +msgid "Documentation for this page" +msgstr "이 페이지의 문서" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "각 페이지로에서 해당 페이지를 생성한 뷰의 문서로 갑니다." + +msgid "Tags" +msgstr "태그" + +msgid "List of all the template tags and their functions." +msgstr "모든 템플릿 태그와 함수의 목록" + +msgid "Filters" +msgstr "필터" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "필터는 템플릿의 변수에 적용되어 출력을 바꿀 수 있는 동작입니다." + +msgid "Models" +msgstr "모델" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"모델은 모든 시스템에서 개체와 연관된 필드에 대한 설명입니다. 각 모델은 템플" +"릿 변수로 접근 할 수 있는 필드의 목록을 가지고 있습니다." + +msgid "Views" +msgstr "뷰" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"일반 사이트의 각 페이지는 뷰에 의해 생성됩니다. 뷰는 페이지를 생성하는데 사용" +"되는 템플릿과 그 템플릿을 사용할 수 있게해주는 개체를 정의합니다." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "브라우저 도구는 신속하게 관리자 기능에 접근 할 수 있습니다." + +msgid "Please install docutils" +msgstr "docutils를 설치해주세요." + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"관리자 문서 시스템은 파이썬의 docutils 라이브러리" +"를 필요로 합니다." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "관리자에게 docutils 설치를 요청해주세요." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "필드" + +msgid "Field" +msgstr "필드" + +msgid "Type" +msgstr "타입" + +msgid "Description" +msgstr "설명" + +msgid "Methods with arguments" +msgstr "아규먼트를 포함한 메소드" + +msgid "Method" +msgstr "메소드" + +msgid "Arguments" +msgstr "아규먼트" + +msgid "Back to Model documentation" +msgstr "모델문서로 돌아가기" + +msgid "Model documentation" +msgstr "모델 문서" + +msgid "Model groups" +msgstr "모델 그룹" + +msgid "Templates" +msgstr "템플릿" + +#, python-format +msgid "Template: %(name)s" +msgstr "템플릿 : %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "템플릿: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "템플릿%(name)s에 대한 검색 경로:" + +msgid "(does not exist)" +msgstr "(존재하지 않습니다)" + +msgid "Back to Documentation" +msgstr "문서로 " + +msgid "Template filters" +msgstr "템플릿 필터" + +msgid "Template filter documentation" +msgstr "템플릿 필터 문서" + +msgid "Built-in filters" +msgstr "내장 필터" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"이 필터를 사용하기 위해서는 필터를 사용하기 전에 템플릿에 <코드>%(code)s 를 입력하세요." + +msgid "Template tags" +msgstr "템플릿 태그" + +msgid "Template tag documentation" +msgstr "템플릿 태그 문서" + +msgid "Built-in tags" +msgstr "내장 태그" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"이 태그를 사용하기 위해서는 태그를 사용하기 전에 템플릿에 %(code)s 를 입력하세요." + +#, python-format +msgid "View: %(name)s" +msgstr "뷰: %(name)s" + +msgid "Context:" +msgstr "컨텍스트 :" + +msgid "Templates:" +msgstr "템플릿 :" + +msgid "Back to View documentation" +msgstr "뷰 문서로 돌아가기" + +msgid "View documentation" +msgstr "뷰 문서" + +msgid "Jump to namespace" +msgstr "네임스페이스로" + +msgid "Empty namespace" +msgstr "빈 네임스페이스" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s 네임스페이스 뷰" + +msgid "Views by empty namespace" +msgstr "빈 네임스페이스 뷰" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"뷰 함수: %(full_name)s. Name: %(url_name)s.\n" + +msgid "tag:" +msgstr "태그:" + +msgid "filter:" +msgstr "필터:" + +msgid "view:" +msgstr "뷰:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "애플리케이션 %(app_label)r 을 찾을 수 없습니다." + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"모델 %(model_name)r 을 애플리케이션 %(app_label)r 에서 찾을 수 없습니다." + +msgid "model:" +msgstr "모델:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` 관련된 개체" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` 관련된 개체들" + +#, python-format +msgid "all %s" +msgstr "모든 %s" + +#, python-format +msgid "number of %s" +msgstr "%s 의 수" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s 은/는 url 패턴의 개체가 아닙니다." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..de83cd3d98a7b38ddedb00b0e09f6f06f8060bba GIT binary patch literal 7977 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 at1LZO=^{0@{n?_WPtFi%Yd;(o)c*i7o(S*& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..ae974b63e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,281 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-02 11:59+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "Башкармалык түшүндүрмөсү" + +msgid "Home" +msgstr "Башкы" + +msgid "Documentation" +msgstr "Түшүндүрмө" + +msgid "Bookmarklets" +msgstr "Букмарклеттер" + +msgid "Documentation bookmarklets" +msgstr "букмарклет түшүндүрмөсү" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Букмарклетти орнотуу үчүн шилтемени кыстырмалар панелине сүйрөңүз же " +"шилтемени оң чыкылдатып андан соң кыстырмаларыңызга кошуп алыңыз. Азыр " +"букмарклетти сайттын бүт бетинен тандап алсаңыз болот." + +msgid "Documentation for this page" +msgstr "Бул барактын түшүндүрмөсү" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Бул баракты жараткан көрүнүш үчүн сиз каалаган барактагы түшүндүрмөдөн " +"секирип өтүңүз." + +msgid "Tags" +msgstr "Тегдер" + +msgid "List of all the template tags and their functions." +msgstr "Бүт калып тегдердин жана алардын кызматынын тизмеси" + +msgid "Filters" +msgstr "Чыпкалар" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Чыпкалар чыгуучу агымды өзгөртүү үчүн калыптагы өзгөрмөгө жасалуучу аракет " +"болуп саналат." + +msgid "Models" +msgstr "Моделдер" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Моделдер системдеги бүт обекттер жана алардын талаалардын ачыкталышы. Ар бир " +"модел өзүнө талааларды камтыйт. Алар өз учурунда калыптуу өзгөрмөлөр катары " +"жетүүнү камсыз кылат." + +msgid "Views" +msgstr "Көрүнүштөр" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ачык саттагы ар бир барак көрүнүш аркылуу чыгарылган. Көрүнүш баракты " +"чыгаруу үчүн кайсы калып колдонууларын жана кайсы обекттер жеткиликтүү " +"экендигин аныктайт." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Браузер үчүн башкаруу кызматына тез жетүү үчүн куралдар." + +msgid "Please install docutils" +msgstr "түшүндүрмө утилитасын орнотуңуз." + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Башкармалыктын түшүндүрмө системи Питондун docutils " +"китепканасын талап кылат. " + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Башкаруучудан түшүндүрмө утилитасынорнотууну " +"сураңыз." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел: %(name)s" + +msgid "Fields" +msgstr "Талаалар" + +msgid "Field" +msgstr "Талаа" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Ачыктоо" + +msgid "Methods with arguments" +msgstr "аргументүү ыкма" + +msgid "Method" +msgstr "Ыкма" + +msgid "Arguments" +msgstr "Аргумент" + +msgid "Back to Model documentation" +msgstr "Модел түшүндүрмөсүнө кайт" + +msgid "Model documentation" +msgstr "Модел түшүндүрмөсү" + +msgid "Model groups" +msgstr "Модел тайпасы" + +msgid "Templates" +msgstr "Калыптар" + +#, python-format +msgid "Template: %(name)s" +msgstr "Калып: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Калып: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "%(name)sкалыбы үчүн жолду издөө:" + +msgid "(does not exist)" +msgstr "(табылган жок)" + +msgid "Back to Documentation" +msgstr "Түшүндүрмөгө кайт" + +msgid "Template filters" +msgstr "Калып чыпкалары" + +msgid "Template filter documentation" +msgstr "Калып чыпкалары түшүндүрмөсү" + +msgid "Built-in filters" +msgstr "Бар чыпкалар" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Бул чыпкаларды колдонуудан мурда калыбыңызга %(code)sкоюңуз." + +msgid "Template tags" +msgstr "Калып тегдер" + +msgid "Template tag documentation" +msgstr "Калып тегдер түшүндүрмөсү" + +msgid "Built-in tags" +msgstr "Мурдатан бар тегдер" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Тегдерди колдонуш үчүн: тегди колдонуудан мурда калыбыңызга%(code)sкоюңуз." + +#, python-format +msgid "View: %(name)s" +msgstr "Көрүнүш: %(name)s" + +msgid "Context:" +msgstr "Мазмун:" + +msgid "Templates:" +msgstr "Калыптар:" + +msgid "Back to View documentation" +msgstr "Көрүнүш түшүндүрмөсүнө кайт" + +msgid "View documentation" +msgstr "Көрүнүш түшүндүрмөсү" + +msgid "Jump to namespace" +msgstr "ысым мейкиндигине өтүү" + +msgid "Empty namespace" +msgstr "бош ысым мейкиндиги" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)sысым мейкиндиги боюнча көрүү" + +msgid "Views by empty namespace" +msgstr "бош ысым мейкиндиги боюнча көрүү" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Көрүнүш функциасы: %(full_name)s.Аты:%(url_name)s.\n" + +msgid "tag:" +msgstr "тег:" + +msgid "filter:" +msgstr "чыпка:" + +msgid "view:" +msgstr "көрүнүш:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r колдонмосу табылган жок" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r колдонмосунда %(model_name)r модели табылбады" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "байланышкан `%(app_label)s.%(data_type)s` обектиси" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "байланышкан `%(app_label)s.%(object_name)s` обекттери" + +#, python-format +msgid "all %s" +msgstr "Бүт %s" + +#, python-format +msgid "number of %s" +msgstr "%s саны" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s урлкалып обектисине тиешеси жок" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b5507d4adb4345312034b49787a212c87f39cae1 GIT binary patch literal 474 zcmZ8d%}N6?7*zDMN6#KU!9zu}$@)Xr)D^K-P+BZy^`3UqZ6up4N!Hc}@$QrPEPmUH zf&)YHk;!BxUwgYBTZnDsKJpN`gFHdDNRgj-c!_JP`Ni1TS2+vhp&&2Pd1VcU;#HW^ zMiW_E7s$w$svx&b=}B%mMB}HN^qmv|wd76&$>EeG7lb7w=|Yll);(qkV<;pO`KDUW z|GE@d%FoV^86p}AA4u+m@md7yI6Mktl!u{Ih176`X>h#J>oHblZm;o z7&a?eO>N^!2J^kwSTx90ptTmt^kB9S&dZQJ=l3N2)3xu-r6U6~vxPDxhjgmKZ(t638jW@1 dgeLdaRi1;X*Q3u)d$8GN9Rmj$BuBky>l@|7j4J>D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..26d571b3c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4e217267887f54a42cc022839d81e208a16a0ec GIT binary patch literal 6741 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 O{)+!KJxuv;sQ&;mHVJwF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..1d392c8a9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kostas , 2014 +# lauris , 2011 +# Matas Dailyda , 2015-2016 +# Povilas Balzaravičius , 2014 +# Simonas Kazlauskas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Administrative Documentation" +msgstr "Administravimo dokumentacija" + +msgid "Home" +msgstr "Pradinis" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Greitosios žymės" + +msgid "Documentation bookmarklets" +msgstr "Doumentacijos greitosios žymės" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Greitųjų žymių įdiegimui, nutempkite nuorodą į greitųjų žymių juostą, arba " +"spauskite dešinį pelės klavišą ir pridėkite prie greitųjų žymių. Dabar " +"galite pasirinkti greitąją žymę iš bet kurio tinklalapio puslapio." + +msgid "Documentation for this page" +msgstr "Šio puslapio dokumentacija" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Pereina iš bet kurio puslapio į jo view funkcijos dokumentaciją, kuri " +"sukūria tą puslapį" + +msgid "Tags" +msgstr "Žymenos" + +msgid "List of all the template tags and their functions." +msgstr "Sąrašas visų šablono žymenų ir jų funkcijų." + +msgid "Filters" +msgstr "Filtrai" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtrai yra veiksmai, kurie gali būti pritaikyti šablono kintamiesiems, kad " +"pakeisti jų išvestį." + +msgid "Models" +msgstr "Modeliai" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeliai yra visų sistemos objektų ir su jais susijusių laukų apibūdinimai. " +"Kiekvienas modelis turi sąrašą laukų, kuriuos galima pasiekti kaip šablono " +"kintamuosius." + +msgid "Views" +msgstr "Rodiniai" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kiekvienas puslapis viešame tinklalapyje sugeneruojamas pagal rodmenis. " +"Rodmuo apibūdina kuris šablonas yra naudojamas generuojant puslapį ir kurie " +"objektai yra suteikiami tam šablonui." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Įrankiai Jūsų naršyklėi, kad greitai pasiektumėte administravimo " +"funkcionalumą." + +msgid "Please install docutils" +msgstr "Įdiekite docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administravimo dokumentacijos sistema reikalauja Python'o bibliotekos docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Prašykite kad administratorius įdiegtų docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelis: %(name)s" + +msgid "Fields" +msgstr "Laukai" + +msgid "Field" +msgstr "Laukas" + +msgid "Type" +msgstr "Tipas" + +msgid "Description" +msgstr "Aprašymas" + +msgid "Methods with arguments" +msgstr "Metodai su argumentais" + +msgid "Method" +msgstr "Metodas" + +msgid "Arguments" +msgstr "Argumentai" + +msgid "Back to Model documentation" +msgstr "Grįžti į modelio dokumentaciją" + +msgid "Model documentation" +msgstr "Modelio dokumentacija" + +msgid "Model groups" +msgstr "Modelio grupės" + +msgid "Templates" +msgstr "Šablonai" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablonas: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Šablonas: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Ieškoti kelio šablonui \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(neegzistuoja)" + +msgid "Back to Documentation" +msgstr "Grįžti į dokumentacija" + +msgid "Template filters" +msgstr "Šablono filtrai" + +msgid "Template filter documentation" +msgstr "Šablono filtro dokumentacija" + +msgid "Built-in filters" +msgstr "Standartiniai filtrai" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Kad panaudoti šiuos filtrus, prieš naudojant filtrą šablone įveskite " +"%(code)s." + +msgid "Template tags" +msgstr "Šablono žymenos" + +msgid "Template tag documentation" +msgstr "Šablono žymenos dokumentacija" + +msgid "Built-in tags" +msgstr "Standartinės žymenos" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Kad panaudoti šias žymenas, prieš naudojant žymeną šablone įveskite " +"%(code)s." + +#, python-format +msgid "View: %(name)s" +msgstr "Rodinys: %(name)s" + +msgid "Context:" +msgstr "Konstekstas:" + +msgid "Templates:" +msgstr "Šablonai:" + +msgid "Back to View documentation" +msgstr "Grįžti į rodinio dokumentaciją" + +msgid "View documentation" +msgstr "Žiūrėti dokumentaciją" + +msgid "Jump to namespace" +msgstr "Eiti į vardų plotmę" + +msgid "Empty namespace" +msgstr "Tuščia vardų plotmė" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Rodiniai pagal vardų plotmes %(name)s" + +msgid "Views by empty namespace" +msgstr "Rodiniai pagal tuščias vardų plotmes." + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Rodinio funkcija: %(full_name)s. Pavadinimas: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "žymė:" + +msgid "filter:" +msgstr "filtras:" + +msgid "view:" +msgstr "vaizdas:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r aplikacija nerasta" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelis %(model_name)r programoje %(app_label)r nerastas" + +msgid "model:" +msgstr "modelis:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "susijęs `%(app_label)s.%(data_type)s` objektas" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "susiję`%(app_label)s.%(object_name)s` objektai" + +#, python-format +msgid "all %s" +msgstr "visi %s" + +#, python-format +msgid "number of %s" +msgstr "%s skaičius" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s neatrodo kaip urlpattern objektas" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d2ef159eb4ffc0956c9089c1b2815759de3d6779 GIT binary patch literal 6449 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..b153b4dde --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,284 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# Jannis Leidel , 2011 +# Māris Nartišs , 2016 +# NullIsNot0 , 2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-25 22:44+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Administrative Documentation" +msgstr "Administrācijas dokumentācija" + +msgid "Home" +msgstr "Sākums" + +msgid "Documentation" +msgstr "Dokumentācija" + +msgid "Bookmarklets" +msgstr "Grāmatzīmes" + +msgid "Documentation bookmarklets" +msgstr "Dokumentācijas grāmatzīmes" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Lai instalētu bukmarkletu, velciet saiti uz grāmatzīmju rīkjoslu, vai ar " +"peles labo pogu noklikšķiniet uz saites un pievienojiet to savām " +"grāmatzīmēm. Tagad jūs varat izvēlēties bukmarkletu no jebkuras vietnes " +"lapas." + +msgid "Documentation for this page" +msgstr "Dokumentācija šai lapai" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Pārvieto no jebkuras lapas uz tā skata dokumentāciju, kas ģenerē šo lapu." + +msgid "Tags" +msgstr "Tagi" + +msgid "List of all the template tags and their functions." +msgstr "Visu šablonu tagu un to funkciju saraksts." + +msgid "Filters" +msgstr "Filtri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtri ir darbības, kuras var tikt pielietotas šablona mainīgajiem, lai " +"mainītu izvades rezultātu." + +msgid "Models" +msgstr "Modeļi" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeļi ir visu sistēmas objektu un to saistīto lauku apraksti. Katram " +"modelim ir saraksts ar laukiem, kuriem var piekļūt kā šablonu mainīgajiem" + +msgid "Views" +msgstr "Skati" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Katru lapu publiskajā vietnē ģenerē skats. Skats nosaka, kuru šablonu " +"izmanto lapas ģenerēšanai un kādi objekti ir pieejami šim šablonam." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Rīki Jūsu pārlūkprogrammai, lai ātri piekļūtu administratora " +"funkcionalitātei." + +msgid "Please install docutils" +msgstr "Lūdzu instalējiet 'docutils'" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Administratora dokumentācijas sistēmai ir nepieciešama Python docutils bibliotēka." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Palūdziet administratoram instalēt docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelis: %(name)s" + +msgid "Fields" +msgstr "Lauki" + +msgid "Field" +msgstr "Lauks" + +msgid "Type" +msgstr "Tips" + +msgid "Description" +msgstr "Apraksts" + +msgid "Methods with arguments" +msgstr "Metodes ar parametriem" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Parametrs" + +msgid "Back to Model documentation" +msgstr "Atpakaļ uz Modeļu dokumentāciju" + +msgid "Model documentation" +msgstr "Modeļu dokumentācija" + +msgid "Model groups" +msgstr "Modeļu grupas" + +msgid "Templates" +msgstr "Šabloni" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablons: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablons: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Šablona %(name)s ceļš:" + +msgid "(does not exist)" +msgstr "(neeksistē)" + +msgid "Back to Documentation" +msgstr "Atpakaļ pie Dokumentācijas" + +msgid "Template filters" +msgstr "Šablona filtri" + +msgid "Template filter documentation" +msgstr "Šablona filtru dokumentācija" + +msgid "Built-in filters" +msgstr "Iebūvētie filtri" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Lai izmantotu šos filtrus, ievietojiet %(code)s šablonā pirms " +"filtra izmantošanas." + +msgid "Template tags" +msgstr "Šablonu tagi" + +msgid "Template tag documentation" +msgstr "Šablonu tagu dokumentācija" + +msgid "Built-in tags" +msgstr "Iebūvētie tagi" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Lai izmantotu šos tagus, ievietojiet %(code)s šablonā pirms " +"taga izmantošanas." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Konteksts:" + +msgid "Templates:" +msgstr "Šabloni:" + +msgid "Back to View documentation" +msgstr "Atpakaļ pie Skatu dokumentācijas" + +msgid "View documentation" +msgstr "Skatu dokumentācija" + +msgid "Jump to namespace" +msgstr "Pāriet uz vārdtelpu" + +msgid "Empty namespace" +msgstr "Tukša vārdtelpa" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Skati pēc vārdtelpas %(name)s" + +msgid "Views by empty namespace" +msgstr "Skati pēc tukšas vārdtelpas" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Skata funkcija: %(full_name)s. Nosaukums: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "tags:" + +msgid "filter:" +msgstr "filtrs:" + +msgid "view:" +msgstr "skats:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Lietotne %(app_label)r netika atrasta" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelis %(model_name)r lietotnē %(app_label)r nav atrasts" + +msgid "model:" +msgstr "modelis:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "saistītais `%(app_label)s.%(data_type)s` objekts" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "saistītie `%(app_label)s.%(object_name)s` objekti" + +#, python-format +msgid "all %s" +msgstr "visi %s" + +#, python-format +msgid "number of %s" +msgstr "%s skaits" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nav urlpattern objekts" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2b663edd000b9dc2b9583599ef12158bd4f7b60 GIT binary patch literal 8290 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 MKxIj8e&K2F-{={e1ONa4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..128e4635d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017 +# Vasil Vangelovski , 2013-2014 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Administrative Documentation" +msgstr "Административна документација" + +msgid "Home" +msgstr "Дома" + +msgid "Documentation" +msgstr "Документација" + +msgid "Bookmarklets" +msgstr "Обележувачи" + +msgid "Documentation bookmarklets" +msgstr "Обележувачи на документација" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"За да инсталирате букмарклети повлечете го линкот во траката со bookmarks, " +"или кликенете со десното копче и додадете го во bookmarks. Така ќе можете да " +"го одберете букмарклетот од било која страна на сајтот." + +msgid "Documentation for this page" +msgstr "Документација за оваа страница" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Ве носи од било која страница од документацијата до погледот кој ја генерира " +"таа страница." + +msgid "Tags" +msgstr "Тагови" + +msgid "List of all the template tags and their functions." +msgstr "Листа на сите шаблонски тагови и нивните функции." + +msgid "Filters" +msgstr "Филтри" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Филтри се акции кои може да се применат на променливи во шаблон за менување " +"на излезниот резултат." + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Модели се описи на сите објекти во системот и нивните полиња. Секој модел " +"има листа на полиња до кои може да се пристапи со променливи во шаблони." + +msgid "Views" +msgstr "Погледи (вјуа)" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Секоја страна на јавниот сајт се генерира од поглед. Подгледот дефинира кој " +"шаблон се користи за да се генерира страната и кој објекти се достапни за " +"тој шаблон." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Алатки за вашиот веб прегледувач за брз пристап до администраторските " +"функционалности." + +msgid "Please install docutils" +msgstr "Ве молиме инсталирајте docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"На админ документацискиот систем му е потребна docutils Python библиотеката." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Ве молиме побарајте од вашите администратори да инсталираат docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел %(name)s" + +msgid "Fields" +msgstr "Полиња" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Опис" + +msgid "Methods with arguments" +msgstr "Методи со аргументи" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr "Назад до документација за модели." + +msgid "Model documentation" +msgstr "Документација за модели" + +msgid "Model groups" +msgstr "Групи на модели" + +msgid "Templates" +msgstr "Шаблони (темплејти)" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Шаблон: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Пребарај ја патеката за шаблонот \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(не постои)" + +msgid "Back to Documentation" +msgstr "Назад во документација" + +msgid "Template filters" +msgstr "Шаблонски филтри" + +msgid "Template filter documentation" +msgstr "Документација за шаблонски филтер" + +msgid "Built-in filters" +msgstr "Вградени филтри" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"За да ги користите овие филтри, внесете %(code)s во вашиот " +"шаблон пред да го користите филтерот." + +msgid "Template tags" +msgstr "Шаблонски тагови" + +msgid "Template tag documentation" +msgstr "Документација за шаблонски таг" + +msgid "Built-in tags" +msgstr "Вградени тагови" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"За да ги користите овие тагови, внесете %(code)s во вашиот " +"шаблон пред да го користите тагот." + +#, python-format +msgid "View: %(name)s" +msgstr "Поглед: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "Назад до документација за погледи" + +msgid "View documentation" +msgstr "Документација за поглед" + +msgid "Jump to namespace" +msgstr "Скокни до именски простор" + +msgid "Empty namespace" +msgstr "Празен именски простор" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Погледи по именски простор %(name)s" + +msgid "Views by empty namespace" +msgstr "Погледи по празен именски простор" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Погледска функција (вју функција): %(full_name)s. Име: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "таг:" + +msgid "filter:" +msgstr "филтер:" + +msgid "view:" +msgstr "поглед:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Апликацијата %(app_label)r не е пронајдена" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Моделот %(model_name)r не е најден во апликацијата %(app_label)r" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "поврзаниот `%(app_label)s.%(data_type)s` објект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "поврзани `%(app_label)s.%(object_name)s` објекти" + +#, python-format +msgid "all %s" +msgstr "сите %s" + +#, python-format +msgid "number of %s" +msgstr "број на %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не изгледа дека е url објект" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89d79cca6ddae27561b43d6adf50f654cce308d0 GIT binary patch literal 6865 zcmb`LTWlOx8OKjcpwxsyQ%bpW0)*O)cWo!ANj7yMSDFx0t1%S

      (`EUQaSRvz?i> zWA(+gM3Snc1&I(*p+=!mTQwo+Wfv0ChL=1c#8bsZNN6cSNL(IxMj(FQIWxPn>x3j# zN16HWoH^h9f4*~^KdxGFOmVH_{si}#o0QrH-uEsZTo0^JY8c!Feh{1kW!_=%R`3*f zCwLb8ICvRc3ARC*|4;D!;D5pQf-B#x)ce3YK^b2SeheG|MSeHPKQ+VSJ)jTX0>>!M}qN!xs?}xroPy!3A(V_+9W0@G>a={SM@x`U{V{z<+?EcLl~i z3Em2d|96Ap-$qdU-3v7r=YLpMx>@FK{pD-e&V~0hE0H61)fe6Sxh3R(`qTlV{LZdV^Me$r&!huuLE)YF zKuG2i9>_JsjXQ>i@-7#&P@0=EnEFXAi`-+}!b{3;cq-hH>vP<)UL;nz3fvOMFt_kh z)_`2=xTPMe<%LT)IcR=aK1%MSHAs%K3ko0<>q_XxItUZ()a$Mj=_J(Cu6A@I^6O5L zxKW_P>HTgwQG=bS?m;h3hSZiy%?tPyIf*yt>g{20T*ajLP}76yrXFe$0+Zd{JMx-s5s zs^?8l=au(LOy=r!-*YPx z@SGEQ&a_W{@!rviTdVs{;>ssSv|-EDVI!$GlA?Mbths7;qgI#Cfm3tix>L3zv0exp zdL{~M+6fknb23S!d-A5O|E`|%+<87biLSbVOL=g?yh>a}wTGJNa0VxQqonH?3B?4? z&$?cuXBvTxu&5^7WHzj%K*U}$OA4|I+ZwJJtVu2RiSt8|;nYmnK$}Eguj@5~Joov| zwCfK=>PmIDW7Q~Z)MGm#R+GN##4bAGMEsS26VH#;loWp|OR42XZ#w$F=BC4(tIai} z%JgZBUJ7Z|2fuBgK^QXhu?v=a?$=oNX@*`!eRJy{c(h@{-9 zkf=oJ+ACeuUk&FC0fb<&>$4P%WX^{^Zjf(L9eWAIp2B!+m|^us;e0IA3-zN7obVT* zaoLTjyR7C;%^lxM7LZ=3yXs+~QxDV3P^_dNYhq=SUs9(0B^5Mk(^!CDe2ZM6d__N! zuYO!yGiaNNB}@EB+GAox`b$c@zp7xxNt}HNehqcRln}n8CZkXqRbf}9@Gy;nwOP`Y z{Z3E~2Oe_kVU!dm;;L6EY;9EI!cstuN9Vaj!CB|YKz&H{H$56&h@y)-g1KR;ij z#RjoA;~o^55gStmeyU)k=8p^wOzfK2(T#qrI67b&WPn$stV9z!n2gYdykN5~&pJ`; zCgWe5+F97xohPKKqSVDUEuQ>l5S@l*mIf?mTSL3_G7Yw#Ey~`lIXa)P43?)^9)Ms$*Ad{nU6+Ja{TSAKUwF= zo-mj!J#T#eiAlJv%{e}_%&2XmcB%EqT^~i$#P|2fEF{U2XtiC2%_J*Q^Aa9hN703; zq$LdxH|>TXk|=<@B$?(yNlg2+Oi6{(NiSu5Jz=VHOqq>n(I$%*yMfp(F)f1hwmiRh zIb`-L+sFF09K#1;LjIH%Aw#@2r7!9&^|}q7OmLR(IqUaK%vO(GC)wsMwCps@9NBMp zyODk*L|!InlZd^}8Wir@^w6wN8t;Xm`E7%}6{=Ge$}F5G=H>exIVD3T`Le!5?OTiA zk-g<`ZbfBlT{?m!fBD(snD~quY}qpOxFW?iwZzsHdx)&GWzDYjI-|>7?kjMbGg;qn z&rIK*d0k4fNTu363-cX!H<$WOX6@$Q?Xudx;-2IF_LX&M-b>j_Idq{XYIvhw&KtpW{JrJa~ppI=Go)OREucH1@HVS=LcSF31awyTlnlXhkI z8t>WFB@Ft*kuJT`UMJ1oZi+G`w<#L)R%6;~4I^d0$k)~EdU*$hxt718uyd?`){OF` z1XS8^TjtSfDE5+cAPOa?FVm+fPIgGn3MOCJia4(#V2hENl31imW=p7BBx!~OWsRZ$ z)BNrRWIywP15L}EDSvABGUEt(aMW~R>rQWmm$BXGX&pDI#*C#f#!%AzLkkz!3GD8R zflKCG!XUNj6x1AkuGx+-Av+E+*er5tlDtYcB^I2qM-V<{e~*~Id3z2EX_Cc| W+p3O=pEqo==YMMY?4hrlI`u#DGrWEP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..a73c3185e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,268 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Emil Joseph , 2019 +# Jannis Leidel , 2011 +# MUHAMMED RAMEEZ , 2019 +# Rag sagar , 2016 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-03-10 07:17+0000\n" +"Last-Translator: Emil Joseph \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "കാര്യനിർവ്വാഹകർക്കായുള്ള ഡോക്യൂമെന്റേഷൻ " + +msgid "Home" +msgstr "ഹോം " + +msgid "Documentation" +msgstr "സഹായക്കുറിപ്പുകള്‍" + +msgid "Bookmarklets" +msgstr "ബുക്ക് മാര്‍ക്കുകള്‍" + +msgid "Documentation bookmarklets" +msgstr "സഹായക്കുറിപ്പുകളുടെ ബുക്ക്മാര്‍ക്കുകള്‍" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"ബുക്ക്മാർക്കുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ, നിങ്ങളുടെ ബുക്ക്മാർക്കുകൾ ടൂൾബാറിലേക്ക് ലിങ്ക് ഇഴയ്ക്കുക, " +"അല്ലെങ്കിൽ ലിങ്കിൽ വലത് ക്ലിക്കുചെയ്ത് നിങ്ങളുടെ ബുക്ക്മാർക്കുകളിൽ ചേർക്കുക. ഇപ്പോൾ നിങ്ങൾക്ക് " +"സൈറ്റിലെ ഏത് പേജിൽ നിന്നും ബുക്മാർക്കറ്റ് തിരഞ്ഞെടുക്കാം." + +msgid "Documentation for this page" +msgstr "ഈ പേജിന്റെ സഹായക്കുറിപ്പുകള്‍" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "ഏതു പേജില്‍ നിന്നും അതിന്റെ ഉദ്ഭവമായ വ്യൂവിന്റെ സഹായക്കുറിപ്പിലേക്കു ചാടാന്‍" + +msgid "Tags" +msgstr "ടാഗുകള്‍" + +msgid "List of all the template tags and their functions." +msgstr "എല്ലാ ടെംപ്ലേറ്റുകളും അവയുടെ ഫംഗ്ഷനുകളുടെ പട്ടിക" + +msgid "Filters" +msgstr "ഫില്‍ട്ടറുകള്‍" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"ഫിൽറ്ററുകൾ എന്നാൽ ഔട്പുട്ടിനു മാറ്റം വരുത്തുവാൻ ടെംപ്ലേറ്റുകൾക്കു ഉള്ളില്ലേ വാരിയബിലിസിന് " +"(variables) നൽകുന്ന ആക്ഷൻസ്സാണ് " + +msgid "Models" +msgstr "മോഡലുകള്‍" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "വ്യൂകള്‍" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"അഡ്മിൻ ഫങ്ക്ഷണാലിറ്റിയിലേക്കു പെട്ടെന്നു പ്രവേശിക്കുവാൻ നിങ്ങളുടെ ബ്രൗസെറിനുള്ള ടൂളുകൾ ." + +msgid "Please install docutils" +msgstr "ദയവായി ഡോക്യൂട്ടിൽസ്‌ ഇൻസ്റ്റാൾ ചെയ്യുക." + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "ഫീൽഡുകൾ " + +msgid "Field" +msgstr "ഫീൽഡ്." + +msgid "Type" +msgstr "ടൈപ്പ് " + +msgid "Description" +msgstr "വിവരണം" + +msgid "Methods with arguments" +msgstr "മെതോടുകൾ ഉള്ള ആർഗുമെന്റ്സ് " + +msgid "Method" +msgstr "രീതി" + +msgid "Arguments" +msgstr "വാദങ്ങൾ" + +msgid "Back to Model documentation" +msgstr "മോഡൽ ഡോക്യൂമെന്റന്റഷനിലേക്ക് തിരികെ പോവുക ." + +msgid "Model documentation" +msgstr "മോഡൽ ഡോക്യൂമെന്റേഷൻ." + +msgid "Model groups" +msgstr "മോഡൽ ഗ്രൂപ്സ്" + +msgid "Templates" +msgstr "ടെമ്പ്‌ലേറ്റുകള്‍" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(എക്സിസ്റ് ചെയ്യുന്നില്ല )" + +msgid "Back to Documentation" +msgstr "ഡോക്യൂമെന്റഷനിലേക്കു തിരികെ പോവുക ." + +msgid "Template filters" +msgstr "ടെമ്പ്ലേറ്റ് ഫിൽറ്ററുകൾ " + +msgid "Template filter documentation" +msgstr "ടെമ്പ്ലേറ്റ് ഫിൽറ്റർ ഡോക്യൂമെന്റേഷൻ " + +msgid "Built-in filters" +msgstr "ബിൽട്ടിൻ ഫിൽറ്ററുകൾ " + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "ടെമ്പ്ലേറ്റ് റ്റാഗുകൾ " + +msgid "Template tag documentation" +msgstr "ടെമ്പ്ലേറ്റ് ടാഗിന്റെ ഡോക്യൂമെന്റേഷൻ " + +msgid "Built-in tags" +msgstr "ബിൽട്ടിൻ റ്റാഗുകൾ " + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "കോണ്ടെക്സ്റ് :" + +msgid "Templates:" +msgstr "ടെമ്പ്‌ലേറ്റുകള്‍" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "ഡോക്യൂമെന്റെഷൻ കാണുക " + +msgid "Jump to namespace" +msgstr "നെയിംസ്പേസിലേക്ക് ചാടുക ." + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ടാഗ്:" + +msgid "filter:" +msgstr "അരിപ്പ:" + +msgid "view:" +msgstr "വ്യൂ" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r എന്ന Appല്‍ %(model_name)r എന്ന മാത്രുക കണ്ടില്ല." + +msgid "model:" +msgstr "മാത്രുക:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(data_type)s` വസ്തു" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(object_name)s` വസ്തുക്കള്‍" + +#, python-format +msgid "all %s" +msgstr "%s എല്ലാം" + +#, python-format +msgid "number of %s" +msgstr "%sന്റെ എണ്ണം" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s വിലാസ മാത്രുക (urlpattern object) ആണെന്ന് തോന്നുന്നില്ല." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7d0ec6a16ac954962e7d953934097a746b312b3c GIT binary patch literal 7607 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 aU{PkWH&5nE|B=M}mvvs8OiryXsec1PgSof> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..e4e4b0caf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,284 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Claude Paroz , 2014 +# Jannis Leidel , 2011 +# Zorig , 2013-2014,2016-2017 +# Анхбаяр Анхаа , 2014-2015 +# Баясгалан Цэвлээ , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Zorig \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Удирдлагын баримт" + +msgid "Home" +msgstr "Админ эхлэл" + +msgid "Documentation" +msgstr "Баримтжуулалт" + +msgid "Bookmarklets" +msgstr "Bookmarklet-ууд" + +msgid "Documentation bookmarklets" +msgstr "Мookmarklet-уудын баримтжуулалт" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Bookmarklet тэмдэглэл суулгахын тулд холбоосыг өөрийн bookmark талбар руу " +"чирэх эсвэл хулганы баруун даралт дарж bookmark -т нэмэх сонголтыг сонгоно. " +"Ингэснээр аль ч хуудаснаас bookmarklet-ээ сонгох боломжтой болно." + +msgid "Documentation for this page" +msgstr "Энэ хуудасны баримтжуулалт" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Таныг ямар ч хамаагүй хуудаснаас тухайн хуудсыг гаргаж байгаа " +"баримтжуулалтанд аваачна." + +msgid "Tags" +msgstr "Таг-ууд" + +msgid "List of all the template tags and their functions." +msgstr "Бүх загваруудын шошго мөн тэдний функц" + +msgid "Filters" +msgstr "Шүүлтүүрүүд" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "Шүүлтүүр нь тэмплэйтийн илэрцэд хувисагчаар оролцох үйлдэл" + +msgid "Models" +msgstr "Моделууд" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Model-ууд бол системтэй холбоотой талбарууд бүхий объектуудын тайлбар, Model " +"бүр тэмплэйт хувьсагч болох боломтой талбаруудтай " + +msgid "Views" +msgstr "View-үүд" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Нийтэд ил хуудас бүр view-ээс бүтнэ. View нь ямар объектийг, тухайн template-" +"д ашиглахыг тодорхойлно." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Админы ажиллагаанд хурдан нэвтрэхын тулд таны вэб хөтөчид зориулагдсан " +"хэрэгсэл." + +msgid "Please install docutils" +msgstr "docutils ийг суулгана уу" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Админ хэсгийн баримтжуулалтын ажиллуулхад Python ийн docutils санг суулгах шаардлагатай." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Админуудаас docutils санг суулгасан эсхийг асууна " +"уу." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модель: %(name)s" + +msgid "Fields" +msgstr "Талбарууд" + +msgid "Field" +msgstr "Талбар" + +msgid "Type" +msgstr "Төрөл" + +msgid "Description" +msgstr "Товчхон" + +msgid "Methods with arguments" +msgstr "Аргументтэй функцүүд" + +msgid "Method" +msgstr "Функц" + +msgid "Arguments" +msgstr "Аргументүүд" + +msgid "Back to Model documentation" +msgstr "Моделийн баримтруу буцах" + +msgid "Model documentation" +msgstr "Моделийн баримт" + +msgid "Model groups" +msgstr "Модел бүлэгүүд" + +msgid "Templates" +msgstr "Загварууд" + +#, python-format +msgid "Template: %(name)s" +msgstr "Загвар: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Загвар: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "\"%(name)s\" тэмплэйтын зам хайх" + +msgid "(does not exist)" +msgstr "(Оршдоггүй)" + +msgid "Back to Documentation" +msgstr "Баримтруу буцах" + +msgid "Template filters" +msgstr "Загвар шүүлт" + +msgid "Template filter documentation" +msgstr "Загвар шүүлтийн баримт" + +msgid "Built-in filters" +msgstr "Өгөгдмөл шүүлтүүрүүд" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Энэ шошгыг ашиглахын тулд үүнийг %(code)s шошгоны өмнө загвар " +"дотроо бич" + +msgid "Template tags" +msgstr "Загвар шошго" + +msgid "Template tag documentation" +msgstr "Template tag баримтжуулалт" + +msgid "Built-in tags" +msgstr "Өгөгдмөл шошгууд" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Энэ шошгыг ашиглахын тулд үүнийг %(code)s шошгоны өмнө загвар " +"дотроо бич" + +#, python-format +msgid "View: %(name)s" +msgstr "Харагдац: %(name)s" + +msgid "Context:" +msgstr "Уул үг: " + +msgid "Templates:" +msgstr "Загварууд:" + +msgid "Back to View documentation" +msgstr "Харагдац баримтруу буцах" + +msgid "View documentation" +msgstr "Харагдац баримт" + +msgid "Jump to namespace" +msgstr "Хоосон зай үүсгэх" + +msgid "Empty namespace" +msgstr "Хоосон нэрний зай" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s нэрсээр харах" + +msgid "Views by empty namespace" +msgstr "Хоосон зайгаар харах" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Функц харах: %(full_name)s. Нэр: %(url_name)s.\n" + +msgid "tag:" +msgstr "шошго:" + +msgid "filter:" +msgstr "шүүлтүүр:" + +msgid "view:" +msgstr "харах:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r аппликэйшн олдсонгүй" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr " %(app_label)r програмд %(model_name)r модел олдсонгүй" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "холбогдох `%(app_label)s.%(data_type)s`объект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "холбогдох `%(app_label)s.%(object_name)s` объектууд" + +#, python-format +msgid "all %s" +msgstr "бүх %s" + +#, python-format +msgid "number of %s" +msgstr "%s-ийн тоо" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s нь url хэлбэрийн объект биш байна" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a3218b02d1de6f6ceb722546289098cc637ffc2b GIT binary patch literal 468 zcmZ8d!A=4(6vXIhkDfg|6Aut9?V^UYh%q807>IFeNx42fCJ*L(yW#Y*wC2!I?Wi*F$DRgFn znJkUuAPhO{G+D?P3du}+utLr911Y_YmiLKBs7v5M7&q8bEU@TQCbGXAaI6matv8D9f+~XactwbhCEJeX# zBCPNW1@(pZC8u<~UblSZsOEChN=!k^T~9|#x~oU?KMPt|+6X42$>8tl7+BN`rd0iB+)@vy*HPZ40K{rr85rEyYl;}910su^OY4j85&zS X4!YcquGj9uZriJCIPXE&=mxc4C54Hf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e87657f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0db0e9c6abf8edab86632a71970746feae147c1d GIT binary patch literal 6557 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..13fd43e57 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,283 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-16 14:09+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "Dokumentasi Pentadbiran" + +msgid "Home" +msgstr "Utama" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Bookmarklets" +msgstr "Penanda" + +msgid "Documentation bookmarklets" +msgstr "Dokumentasi penanda" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Untuk memasang penanda, heret pautan ke palang-alat penanda-buku, atau klik-" +"kanan pada pautan dan tambahkan ke penanda-buku anda. Kini anda boleh " +"memilih penanda itu daripada mana-mana ruangan di laman." + +msgid "Documentation for this page" +msgstr "Dokumentasi untuk ruangan ini" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Membawa anda daripada mana-mana ruangan kepada dokumentasi bagi pemandangan " +"yang menjana ruang itu." + +msgid "Tags" +msgstr "Tag-tag" + +msgid "List of all the template tags and their functions." +msgstr "Senarai kesemua tag templat dan fungsiannya." + +msgid "Filters" +msgstr "Tapisan" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Tapisan adalah tindakan yang boleh digunakan pada pembolehubah didalam " +"templat untuk mengubah outputnya." + +msgid "Models" +msgstr "Model-model" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Model-model adalah penerangan bagi semua objek-objek didalam sistem dan " +"medan-medan yang berkaitan. Setiap model mempunyai senarai medan-medan yang " +"boleh diakses sebagai tempat pembolehubah." + +msgid "Views" +msgstr "Pemandangan" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Setiap ruangan pada laman awan dihasilkan daripada pemandangan. Pemandangan " +"menakrifkan templat mana yang diguna-pakai untuk menghasilkan ruangan itu " +"dan objek mana yang boleh digunakan bersama templat itu." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Alat-alat untuk pelayar anda untuk mengakses fungsian pentadbiran secara " +"pantas." + +msgid "Please install docutils" +msgstr "Sila pasang docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Sistem dokumentasi pentadbiran memerlukan perpustakaan docutils Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Sila mohon pada pentadbir-pentadbir anda untuk memasang docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Medan-medan" + +msgid "Field" +msgstr "Medan" + +msgid "Type" +msgstr "Jenis" + +msgid "Description" +msgstr "Penerangan" + +msgid "Methods with arguments" +msgstr "Kaedah dengan argumen" + +msgid "Method" +msgstr "Kaedah" + +msgid "Arguments" +msgstr "Argumen" + +msgid "Back to Model documentation" +msgstr "Patah balik ke dokumentasi Model" + +msgid "Model documentation" +msgstr "Dokumentasi Model" + +msgid "Model groups" +msgstr "Kumpulan-kumpulan Model" + +msgid "Templates" +msgstr "Templat-templat" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templat: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templat: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Cari laluan untuk templat %(name)s:" + +msgid "(does not exist)" +msgstr "(tidak wujud)" + +msgid "Back to Documentation" +msgstr "Patah balik ke Dokumentasi" + +msgid "Template filters" +msgstr "Penapisan templat" + +msgid "Template filter documentation" +msgstr "Dokumentasi penapisan templat" + +msgid "Built-in filters" +msgstr "Penapisan terbina-dalam" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Untuk menggunakan tapisan-tapisan ini, letakkan %(code)s " +"didalam templat anda sebelum menggunakan tapisan itu." + +msgid "Template tags" +msgstr "Tag-tag templat" + +msgid "Template tag documentation" +msgstr "Dokumentasi tag templat" + +msgid "Built-in tags" +msgstr "Tag-tag terbina-dalam" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Untuk menggunakan tag-tag ini, letakkan %(code)s didalam " +"templat anda sebelum menggunakan tag itu." + +#, python-format +msgid "View: %(name)s" +msgstr "Pemandagan: %(name)s" + +msgid "Context:" +msgstr "Konteks:" + +msgid "Templates:" +msgstr "Templat-templat:" + +msgid "Back to View documentation" +msgstr "Patah balik ke Dokumentasi Pemandangan" + +msgid "View documentation" +msgstr "Dokumentasi Pemandangan" + +msgid "Jump to namespace" +msgstr "Lompat ke ruangnama" + +msgid "Empty namespace" +msgstr "Ruangnama koson" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pemandangan berdasakran ruangnama %(name)s" + +msgid "Views by empty namespace" +msgstr "Pemandangan berdasarkan ruangnama kosong" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Fungsi Pemandangan: %(full_name)s. Name: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "tapis:" + +msgid "view:" +msgstr "lihat:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r tidak dijumpai" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r tidak dijumpai didalam app %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "objek `%(app_label)s.%(data_type)s` berkaitan" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objek-objek `%(app_label)s.%(object_name)s` berkaitan" + +#, python-format +msgid "all %s" +msgstr "semua %s" + +#, python-format +msgid "number of %s" +msgstr "bilangan %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nampaknya bukan objek urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa8a6a56cebdf66ca164a03b8b3a84bada6675ed GIT binary patch literal 1721 zcmb7^&u<(x6vquMPzET!1O>GRBQ+vXJG--hAaMvnO`A4VBBE&9YwGNJHxtd+%h;PA z2PC)r5cE=7HA4JqRVl{;;zC1P_%}ctKqGPH)EgZ5+D^JjlL}$U{`igG_xZgyv-|rq zyH^Ot)0hV^S26ct9)17|#>e0j;3wcC;Ah}&@GAH!xC%ZD{<{AB5Aadge}WHzf32V2 z0iFKub$i!?ggg#A0;}LY(8WCtCg23<^zVTepm`tM5Bpg-9R#bO)7QZzkb^IQzkx4+ z|9~%p&moA*a|CqH-vwU;&x6l{tDuW}3v7VDfUe$Q6m<$52c7>_5NVKIm^%%m=X>}V z_!Oq=f$Pg2OjoxXdodB-=k4x@FrUOks)QU>jczWa;U-m*jHQ_og(fFdF36;6ij4O4 z=Z-Uy=VG9sQW@G(UD>3mq`cF?Io6qs&x&lI2pUc5yp2WVos1iy$>~%qYQi%_)1>9^ zV8n-IM0WF8QBc)#XN7QrCOxw`s;>0)tJ!(cFd+$jh6Ym;!`qCQIYI9$Y;wbA%yLHz z+?A09q{GNmp7*C6Z)WzK5H?-lG97-^v39e0CFSyhwTNR9+ zR#zjn9 zVyV(lc{S9ufoxq~&6leK(d78#v0nAHN)nAKY4AD3b+n98BbH1RFEN$Fv@ypEEzHQN z`dB>J^K*B#L=hj84b@C#o6*79)Z9&z(R?|Y%DM&5;xSd^no-&DrXHyc)36;$h9gqi zYo$F~+FPZyrM>CRufiT@AC~r8zhZ;4&rADrX}|Lu2(FiQ4Nfbi{U98Z%^y%feK4Ft ziS^6Ue&faG{2sCJ{L|9@6y*1Q^8S+V{Uz|bRN61R08x+vZiYUH;d297z~1hShrK*e zDD3kg)y)S;?gyV4s>BB7?NFQ-^a5Ca5CYurMTBmkeGr5mtZmWs>Cgn%snVja;U3qu zom, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "ပင်မ" + +msgid "Documentation" +msgstr "အချက်အလက်" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "အမည်များ" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "စီစစ်မှုများ" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "မော်ဒယ်များ" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "ကြည့်ရှုခြင်းများ" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "ပံုစံပြားများ" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "အမည်:" + +msgid "filter:" +msgstr "စီစစ်မှု:" + +msgid "view:" +msgstr "ကြည့်ရှု:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r အပ်ပရိုဂရမ်တွင် %(model_name)r မော်ဒယ်ရှာမတွေ့" + +msgid "model:" +msgstr "မော်ဒယ်:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "ဆက်နွယ်သော `%(app_label)s.%(data_type)s` အရာဝတ္ထု" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ဆက်နွယ်သော `%(app_label)s.%(object_name)s` အရာဝတ္ထုများ" + +#, python-format +msgid "all %s" +msgstr "%s အားလံုး" + +#, python-format +msgid "number of %s" +msgstr "%s အရေအတွက်" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e6595dc018ba40ebd94cf7e897d942b094989dd8 GIT binary patch literal 6308 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..b7959c63c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,284 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jon, 2015-2016 +# Jon, 2014 +# Jon, 2020-2021 +# Jon, 2013 +# Jon, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 14:16+0000\n" +"Last-Translator: Jon\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administrasjons-dokumentasjon" + +msgid "Home" +msgstr "Hjem" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Bookmarklets" +msgstr "Bokmerker" + +msgid "Documentation bookmarklets" +msgstr "Dokumentasjonsbokmerker" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"For å installere bokmerker, dra linken til verktøylinjen for bokmerker, " +"eller høyreklikk og legg til i bokmerker. Nå kan du du velge bokmerket fra " +"hvilken som helst side på nettstedet." + +msgid "Documentation for this page" +msgstr "Dokumentasjon for denne siden" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Hopp fra hvilken som helst side til dokumentasjonen for visningsfunksjonen " +"som genererte den siden." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Liste over alle mal-taggene og deres funksjoner." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtre er handlinger som kan brukes på variabler i en mal for å endre output." + +msgid "Models" +msgstr "Modeller" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller er beskrivelser av alle objektene i systemet og tilhørende felter. " +"Hver modell har en liste over felt som kan brukes som mal-variabler" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Hver side på det offentlige nettstedet er generert av et view. View'et " +"definerer hvilken malen som blir brukt til å generere siden og hvilke " +"objekter som er tilgjengelige for den malen." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Verktøy for nettleseren din for å få rask tilgang til admin-funksjonalitet." + +msgid "Please install docutils" +msgstr "Vennligst installer docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Admin-verktøyets dokumentasjonssystem behøver Pythons docutils-bibliotek ." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Spør dine administratorer om å installere docutils ." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +msgid "Fields" +msgstr "Felter" + +msgid "Field" +msgstr "Felt" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Beskrivelse" + +msgid "Methods with arguments" +msgstr "Metoder med argumenter" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Argumenter" + +msgid "Back to Model documentation" +msgstr "Tilbake til modell-dokumentasjon" + +msgid "Model documentation" +msgstr "Modelldokumentasjon" + +msgid "Model groups" +msgstr "Modellgrupper" + +msgid "Templates" +msgstr "Maler" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mal: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mal: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Søkebane for mal %(name)s:" + +msgid "(does not exist)" +msgstr "(finnes ikke)" + +msgid "Back to Documentation" +msgstr "Tilbake til dokumentasjonen" + +msgid "Template filters" +msgstr "Mal-filtre" + +msgid "Template filter documentation" +msgstr "Mal-filter dokumentasjon" + +msgid "Built-in filters" +msgstr "Innebygde filtre" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"For å bruke disse filtrene, sett inn %(code)s i malen før du " +"bruker filteret." + +msgid "Template tags" +msgstr "Mal-tagger" + +msgid "Template tag documentation" +msgstr "Mal-tag-dokumentasjon" + +msgid "Built-in tags" +msgstr "Innebygde tagger" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"For å bruke disse taggene, sett inn %(code)s i malen før du " +"bruker taggen." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Maler:" + +msgid "Back to View documentation" +msgstr "Tilbake til view-dokumentasjonen" + +msgid "View documentation" +msgstr "View-dokumentasjon" + +msgid "Jump to namespace" +msgstr "Gå til navnerom" + +msgid "Empty namespace" +msgstr "Tomt navnerom" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views etter navnerom %(name)s" + +msgid "Views by empty namespace" +msgstr "Views etter tomt navnerom" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"View-funksjon: %(full_name)s. Navn: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikasjon %(app_label)r ikke funnet" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Fant ikke modellen %(model_name)r i applikasjonen %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "relaterte `%(app_label)s.%(object_name)s`-objekter" + +#, python-format +msgid "all %s" +msgstr "alle %s" + +#, python-format +msgid "number of %s" +msgstr "antall %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ser ikke ut til å være et urlpattern-objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a72f32dd3df1b42800989729c008b89dac5e8233 GIT binary patch literal 2571 zcmb7F%WoVt95zr|*zzca9(YOS5GjGo?k0d}CIm{G2C6nCge4a$rQTgq^cabA&?M9G=Bki#D&lH>?!lfXQ18}JD5 zdEi^X?ZDIN`bWSu%s&O*3w-?^yFZ>{0jTr53(NtlKppQhU>^7tQ2YG?^ughG;0u_) zhQ()rbHImz7l3e(7>{D;M|0QuHXmL4?sNi5 zCf7sh9Ho={Fi@I#KpR4o126QXikR}|I2{$GdcZ@4nFz^#A!Y*>&H7wPGRkEs@@i(I z+pKFwi(O8g@#u_*sH%FB)>ws;H$=e6xF~a<_VflCr$ZL-zKDiG!L}ZjsTWdKt6?AS zX`dCj-xpaQNeZljmw=5_%=fzz_tSF3DoDnu?}f8e3A!NaQOibRMfgP)^;2+)yh>F$ zCEqK-vgyK*o|QpCZT8O6qhel1q$L(o$$ege6+AnNr!$cVC<_-%wYm~*AU(yiWXj|7 zl4#OBl98i=#v)9T_^R1hHAa|T zHx|oDyskqwPQi4|{6dV2h}@aa+Mczm@I~@-h;Du$pI!llJIHh`X?zF|6!drNO7|+*D?f zk|bU>vRzA=rJ9+Y+pQWI?Ey7RkjsXumJLeULs{v^48?=bDI=;CVhO7d84i$rDcv(d z{da1ZgDoP!{fcoy$LPby#syP`O_vsf)iwj8+&YfIlGTLJ6xy?sR~ig02Szr`B1~|6 zI4WzXTXM^=*jvT8lcHJ`Ks|d6RyJ@=8Zly?M$H>TV~(o=s<;v8_mn-@;$9$%*4H-T z52k?gP1%;Qv8BYHo61*U(k>GdB(gHJ=-DI?<_j<+NqniJ=b@dweWsJ(i*!p=f5lCA zw0n`dq(`, 2012 +# Sandesh Rana , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-20 19:57+0000\n" +"Last-Translator: Sandesh Rana \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "प्रशासनिक दस्तावेज" + +msgid "Home" +msgstr "गृह " + +msgid "Documentation" +msgstr "प्रलेखन" + +msgid "Bookmarklets" +msgstr "बुकमार्कलेटहरू" + +msgid "Documentation bookmarklets" +msgstr "कागजातका बुकमार्कलेटहरू" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"बुकमार्कलेटहरू स्थापना गर्न, लिंकलाई तपाईंको बुकमार्क टूलबारमा ड्र्याग गर्नुहोस्, वा लिंकमा " +"दायाँ क्लिक गर्नुहोस् र तपाईंको बुकमार्कमा थप्नुहोस्। अब तपाईं साइटमा कुनै पृष्ठबाट बुकमार्क " +"चयन गर्न सक्नुहुन्छ।" + +msgid "Documentation for this page" +msgstr "यो पृस्ठको लागी प्रलेखन" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "ट्यागहरु " + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "नमुनाहरु " + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "धृस्यहरु " + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "वर्णन" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ट्याग:" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "धृस्य :" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(model_name)r नमुना %(app_label)r appमा भेटिएन" + +msgid "model:" +msgstr "नमुना :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` संबंधित बस्तु " + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` संबंधित बस्तु " + +#, python-format +msgid "all %s" +msgstr "सबै %s" + +#, python-format +msgid "number of %s" +msgstr "%sको संख्या" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b45fc29e4b46bb04ecb04d7a112f0aa58f7d7f7 GIT binary patch literal 6463 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 Kc3j@PE%iV9$y;au literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..689b5268c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bouke Haarsma , 2013 +# Evelijn Saaltink , 2016 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2012,2014 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 09:12+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Beheerdocumentatie" + +msgid "Home" +msgstr "Voorpagina" + +msgid "Documentation" +msgstr "Documentatie" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentatiebookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Om bookmarklets te installeren, sleept u de koppeling naar uw " +"bladwijzerwerkbalk, of klikt u met de rechtermuisknop op de koppeling en " +"voegt u deze toe aan uw bladwijzers. De bookmarklet kan nu vanuit elke " +"pagina op de website worden geselecteerd." + +msgid "Documentation for this page" +msgstr "Documentatie voor deze pagina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Springt vanuit elke pagina naar de documentatie voor de weergave die die " +"pagina genereert." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Overzicht van alle sjabloontags en hun functies." + +msgid "Filters" +msgstr "Filters" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filters zijn acties die op variabelen in een sjabloon kunnen worden " +"toegepast om de uitvoer aan te passen." + +msgid "Models" +msgstr "Modellen" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modellen zijn beschrijvingen van alle objecten in het systeem en hun " +"gekoppelde velden. Elk model heeft een lijst van velden die als " +"sjabloonvariabelen kunnen worden gekoppeld." + +msgid "Views" +msgstr "Weergaven" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Elke pagina op de publieke website wordt gegenereerd door een weergave. De " +"weergave bepaalt welke sjabloon wordt gebruikt om de pagina te genereren en " +"welke objecten in die sjabloon beschikbaar zijn." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Snelkoppelingen in je browser om makkelijk beheerpagina's te openen." + +msgid "Please install docutils" +msgstr "Docutils is niet geïnstalleerd" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Python's docutils is benodigd voor de documentatie." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Vraag de beheerder om docutils te installeren." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Velden" + +msgid "Field" +msgstr "Veld" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Beschrijving" + +msgid "Methods with arguments" +msgstr "Methode met argumenten" + +msgid "Method" +msgstr "Methode" + +msgid "Arguments" +msgstr "Argumenten" + +msgid "Back to Model documentation" +msgstr "Terug naar Modeldocumentatie" + +msgid "Model documentation" +msgstr "Modeldocumentatie" + +msgid "Model groups" +msgstr "Modules" + +msgid "Templates" +msgstr "Sjablonen" + +#, python-format +msgid "Template: %(name)s" +msgstr "Sjabloon: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Sjabloon: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Zoekpad voor sjabloon %(name)s:" + +msgid "(does not exist)" +msgstr "(bestaat niet)" + +msgid "Back to Documentation" +msgstr "Terug naar Documentatie" + +msgid "Template filters" +msgstr "Sjabloonfilters" + +msgid "Template filter documentation" +msgstr "Sjabloontagdocumentatie " + +msgid "Built-in filters" +msgstr "Standaardfilters" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Om deze filters te gebruiken, plaatst u %(code)s in uw sjabloon " +"voordat u het filter gebruikt." + +msgid "Template tags" +msgstr "Sjabloontags" + +msgid "Template tag documentation" +msgstr "Sjabloontagdocumentatie" + +msgid "Built-in tags" +msgstr "Standaardtags" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Om deze tags te gebruiken, plaatst u %(code)s in uw sjabloon " +"voordat u de tag gebruikt." + +#, python-format +msgid "View: %(name)s" +msgstr "Weergave: %(name)s" + +msgid "Context:" +msgstr "Contextvariabelen:" + +msgid "Templates:" +msgstr "Sjablonen:" + +msgid "Back to View documentation" +msgstr "Terug naar Weergavedocumentatie" + +msgid "View documentation" +msgstr "Weergavedocumentatie" + +msgid "Jump to namespace" +msgstr "Naar namespace springen" + +msgid "Empty namespace" +msgstr "Lege namespace" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Weergaven per namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Weergaven per lege namespace" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Weergavefunctie: %(full_name)s. Naam: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "weergave:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r niet gevonden" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r niet gevonden in module %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "het gerelateerde `%(app_label)s.%(data_type)s` object" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "gerelateerde `%(app_label)s.%(object_name)s` objecten" + +#, python-format +msgid "all %s" +msgstr "alle %s" + +#, python-format +msgid "number of %s" +msgstr "aantal %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s lijkt geen urlpattern-object te zijn" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72add0c5e2f5d8df45c579437d5c7d3c8fb39d9f GIT binary patch literal 6299 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..673f79641 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,282 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-16 23:22+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Administrasjons-dokumentasjon" + +msgid "Home" +msgstr "Heim" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Bookmarklets" +msgstr "Bokmerke" + +msgid "Documentation bookmarklets" +msgstr "Dokumentasjonsbokmerke" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"For å installere bokmerke, dra lenkja til verktøylinja for bokmerke, eller " +"høgreklikk og legg til i dine bokmerke. No kan du velje bokmerket frå kva " +"for helst side på nettstaden." + +msgid "Documentation for this page" +msgstr "Dokumentasjon for denne sida" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Hopp frå kva som helst side til dokumentasjonen for visingsfunksjonen som " +"genererte sida." + +msgid "Tags" +msgstr "Taggar" + +msgid "List of all the template tags and their functions." +msgstr "Liste over alle mal-taggar og funksjonane deira." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filter er handlingar som kan bli brukt på variablar i ein mal for å endre " +"utdata." + +msgid "Models" +msgstr "Modellar" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modellar er beskrivingar av alle objekta i eit system og tilhøyrande felt. " +"Kvar modell har ein liste over felt som kan bli brukt som mal-variablar." + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kvar side på den offentlege nettstaden er generert av ein view. Viewen " +"definerer kva for ein mal som blir brukt til å generere sida og kva for " +"nokre objekt som er tilgjengelege for den malen." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Verktøy for nettlesaren din for å få rask tilgang til admin-funksjonalitet" + +msgid "Please install docutils" +msgstr "Installer docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Admin-verktøyet sitt dokumentasjonssystem behøver Python sitt docutils-bibliotek." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Spør administratorane dine om å installere docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +msgid "Fields" +msgstr "Felt" + +msgid "Field" +msgstr "Felt" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Beskriving" + +msgid "Methods with arguments" +msgstr "Metodar med argument" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Argument" + +msgid "Back to Model documentation" +msgstr "Attende til Modelldokumentasjon" + +msgid "Model documentation" +msgstr "Modelldokumentasjon" + +msgid "Model groups" +msgstr "Modellgrupper" + +msgid "Templates" +msgstr "Malar" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mal: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mal: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Søkjebane for mal %(name)s:" + +msgid "(does not exist)" +msgstr "(finnast ikkje)" + +msgid "Back to Documentation" +msgstr "Attende til Dokumentasjon" + +msgid "Template filters" +msgstr "Malfilter" + +msgid "Template filter documentation" +msgstr "Malfilterdokumentasjon" + +msgid "Built-in filters" +msgstr "Innbygde filter" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"For å bruke desse filtera, set inn %(code)s i malen før du " +"brukar filteret." + +msgid "Template tags" +msgstr "Maltaggar" + +msgid "Template tag documentation" +msgstr "Maltagdokumentasjon" + +msgid "Built-in tags" +msgstr "Innebygde taggar" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"For å bruke desse taggane, set inn %(code)s i malen før du " +"brukar taggen." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Malar:" + +msgid "Back to View documentation" +msgstr "Attende til Viewdokumentasjon" + +msgid "View documentation" +msgstr "Viewdokumentasjon" + +msgid "Jump to namespace" +msgstr "Gå til namnerom" + +msgid "Empty namespace" +msgstr "Tomt namnerom" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views etter namnerom %(name)s" + +msgid "Views by empty namespace" +msgstr "Views etter tomt namnerom" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Viewfunksjon: %(full_name)s. Namn: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikasjon %(app_label)r ikkje funne" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Kunne ikkje finne modellen %(model_name)r i applikasjonen %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "relaterte `%(app_label)s.%(object_name)s`-objekt" + +#, python-format +msgid "all %s" +msgstr "alle %s" + +#, python-format +msgid "number of %s" +msgstr "tal på %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ser ikkje ut til å vere eit urlpattern-objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dc8f9df6c36e2aa2fb66ad37e16d6e166e853d10 GIT binary patch literal 2044 zcmai!O>Y}T7{{m3@?y$cp{SyOriWCH()CM=NVCBRwP{MLMvaQ;g+n^F$IiC9JFA^> zlSm-7ahd}W5=ev-Cscail(wmw=7mqdVOF_t;xhnOF8rTeH?>itjy(JG%semu=NYg6 zJg|3}VZ4L+9_H_u?_++o2M>(Dz+>Rw;C}Ff=NNkx90K13N5I2i6?_qlz`fus_&NAB zcmhno7r=ebXXpFDm$7~m+y@>8>HG*taq``D38cKkU=bVxDZT+q;2cQ)zk)wP;|fT6 z&tmfs*@0Bsw;<`b4d%f=y8C;Ol;R%(Z-4_}6}$t!2L21?z#K%q0UiX&{wVksc%sX* zAlZEhQh%CY1vDT&>>eJ&;5tZk{{vEsU%{k7zHeiaEybllaY#EPu!ER1NE79!L3(JU zeFRYwJ3t#4Xg5PE*h`qyFB-4YV?gtUlA4Fga1ljP#M~%elU(q2>_@^F8HZfeuFAS$ zrjb>x2-VS7Fgz;3^zv8uB4S7=`!?dS)BwCV&F55` zH)9oW5zeJXB*;ul=5}3X*o10GpAX~%;#4RCIT)wK zHdQ-pa4)2)agOJdFKW^sj58n2s-lI53?iR`vdc)MneY)!vu3K>WocNKh3%jwW3HNX z7E5wy@GHGhbzvZ%bukm6uXLNLnGr3QQGvTUHiQvVW-gM0J8q2XcG+aC=w_UA4d*iY zh?{VE`SDVD*eR8r@(3?~ zmJ4Ivm1GAR~jl|ou)$|yC*S)B8 zaWFS=ZsN?7>dS>v?z9RGewj`cEpxe%v!;kk^ukeIpB6E4RlcZ>J13vmQLd(poikxw zHN3Fp@{={s?8tPv(z!{$9Sh$XS8SB{VJ>}w?-@*@>q9vsclTZOmBNtSqW zE9oRl_Tl!jy^p2+&E8GEu@CHeGSBVS_Hxo;_WPt`*X^cVNp64}_CYeA%x^C<`vc6^ zakvSGtz;esi*{|7ZTpDA-`y?LcgZ5DS)e4zO)_15dhpxOL>3(wkZR;5DZk(=HprdX zJIPYAKxcNfCnz=^A?)@tr;_{f@od%Y1!TZ>1M${K%CXcw^?jNoyNQS-%HD(he6mzv z_9qywqA45yf3sn?0Gp0ov0MFbHC+Z8xkdu*{j~QSF<0zETn`HA37S>>Gud^E@43UQ z8`(yBio1rcPP&7dNGYQN`@85eB=3r*p9lK7M3p6rEV%{Tq*&1PtUnFJ*!cma=`%m~ R8BzNFL3(4rFRR66{{b6C=nVh> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..d7c9eaee2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Хӕдзар" + +msgid "Documentation" +msgstr "Документаци" + +msgid "Bookmarklets" +msgstr "Букмарклеттӕ" + +msgid "Documentation bookmarklets" +msgstr "Документацийы букмарклеттӕ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Ацы фарсы документаци" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Цыфӕнды фарсӕй дӕ уыцы фарс цы хуыз фӕлдисы, уый документацимӕ ӕрвиты." + +msgid "Tags" +msgstr "Тӕгтӕ" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Фӕрсудзӕнтӕ" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Моделтӕ" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Хуызтӕ" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Хуызӕгтӕ" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "тӕг:" + +msgid "filter:" +msgstr "фӕрсудзӕн:" + +msgid "view:" +msgstr "хуыз:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Модел %(model_name)r ӕфтуан %(app_label)r-ы мидӕг нӕ разынд" + +msgid "model:" +msgstr "модел" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "хӕстӕг `%(app_label)s.%(data_type)s` объект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "хӕстӕг `%(app_label)s.%(object_name)s` объекттӕ" + +#, python-format +msgid "all %s" +msgstr "%s иууылдӕр" + +#, python-format +msgid "number of %s" +msgstr "%s нымӕц" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s url-ы хуызӕгы объект нӕу" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8be0a2c6254642bcd0494e34bc061723e3aec950 GIT binary patch literal 1275 zcma))OKTKC5XalMt_qr)k3$Ovc9Geg4Wg!FRE!BK2`*t3JjLGK-p$0B?qQ}k(VH(! zK*3XthhP*%XYhdvf`aHb@Cyjic<`j(!GF&tNc4>NKm$I2 zeTVIVKfQ*KyAaH{!wrfcplsa)_JC3dIj+>jfJYa7p<{AF)!TuPnrlzVs($^-LHOWhpd^E|cZ2!h2 zpG>j<#Y2, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "ਘਰ" + +msgid "Documentation" +msgstr "ਡੌਕੂਮੈਂਟੇਸ਼ਨ" + +msgid "Bookmarklets" +msgstr "ਬੁੱਕਮਾਰਕਲਿਟ" + +msgid "Documentation bookmarklets" +msgstr "ਡੌਕੂਮੈਟੇਸ਼ਨ ਬੁੱਕਮਾਰਕਲਿਟ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ਇਹ ਸਫ਼ੇ ਲਈ ਡੌਕੂਮੈਂਟੇਸ਼ਨ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ਟੈਗ:" + +msgid "filter:" +msgstr "ਫਿਲਟਰ:" + +msgid "view:" +msgstr "ਵੇਖੋ:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "ਮਾਡਲ:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ਸਬੰਧਿਤ `%(app_label)s.%(object_name)s` ਆਬਜੈਕਟ" + +#, python-format +msgid "all %s" +msgstr "ਸਭ %s" + +#, python-format +msgid "number of %s" +msgstr "%s ਦੀ ਗਿਣਤੀ" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..69081819fab5a70d9c1f9c6cad7a5efde1627a51 GIT binary patch literal 6633 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..9a76f27e7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,294 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Adam Stachowicz , 2015 +# angularcircle, 2012 +# Jannis Leidel , 2011 +# Janusz Harkot , 2015 +# m_aciek , 2016,2019 +# m_aciek , 2014 +# Mariusz Felisiak , 2021 +# c10516f0462e552b4c3672569f0745a7_cc5cca2 <841826256cd8f47d0e443806a8e56601_19204>, 2014 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 09:45+0000\n" +"Last-Translator: Mariusz Felisiak \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Dokumentacja administracyjna" + +msgid "Home" +msgstr "Strona główna" + +msgid "Documentation" +msgstr "Dokumentacja" + +msgid "Bookmarklets" +msgstr "Zakładki" + +msgid "Documentation bookmarklets" +msgstr "Zakładki Dokumentacji" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aby zainstalować skryptozakładkę, przeciągnij jej link do paska zakładek lub " +"kliknij prawym przyciskiem na link i wybierz opcję zapisania do zakładek. Od " +"tego momentu możesz użyć tak zapisanej zakładki na dowolnej podstronie tego " +"serwisu." + +msgid "Documentation for this page" +msgstr "Dokumentacja dla tej strony" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Przekierowuje z dowolnej strony do dokumentacji dla widoku, który ją " +"generuje." + +msgid "Tags" +msgstr "Tagi" + +msgid "List of all the template tags and their functions." +msgstr "Lista wszystkich templatetagów i ich funkcji." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry to akcje, które mogą być stosowane w odniesieniu do zmiennych w " +"szablonie, aby zmienić wyjście." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele to opisy wszystkich obiektów w systemie i związanych z nimi pól. " +"Każdy model ma listę pól, które mogą być dostępne jako zmienne szablonu" + +msgid "Views" +msgstr "Widoki" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Każda strona dostępna publicznie jest generowana przez widok. Widok określa, " +"który szablon jest używany do wygenerowania strony i które obiekty są " +"dostępne dla tego szablonu." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Narzędzia do twojej przeglądarki, aby uzyskać szybki dostęp do " +"funkcjonalności admina." + +msgid "Please install docutils" +msgstr "Zainstaluj docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"System dokumentacji admina wymaga Pythonowej biblioteki docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Poproś swoich administratorów, aby zainstalowali docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Pola" + +msgid "Field" +msgstr "Pole" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Opis" + +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Powrót do dokumentacji modelu" + +msgid "Model documentation" +msgstr "Dokumentacja modelu" + +msgid "Model groups" +msgstr "Grupy modelu" + +msgid "Templates" +msgstr "Szablony" + +#, python-format +msgid "Template: %(name)s" +msgstr "Szablon: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Szablon: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Ścieżki wyszukiwania dla szablonu %(name)s:" + +msgid "(does not exist)" +msgstr "(nie istnieje)" + +msgid "Back to Documentation" +msgstr "Powrót do dokumentacji" + +msgid "Template filters" +msgstr "Filtry szablonu" + +msgid "Template filter documentation" +msgstr "Dokumentacja filtrów szablonu" + +msgid "Built-in filters" +msgstr "Wbudowane filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Aby użyć tych filtrów, umieść %(code)s w swoim szablonie przed " +"użyciem filtra." + +msgid "Template tags" +msgstr "Tagi szablonu" + +msgid "Template tag documentation" +msgstr "Dokumentacja tagów szablonu" + +msgid "Built-in tags" +msgstr "Wbudowane tagi" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Aby użyć tych tagów, umieść %(code)s w swoim szablonie przed " +"użyciem taga." + +#, python-format +msgid "View: %(name)s" +msgstr "Widok: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Szablony:" + +msgid "Back to View documentation" +msgstr "Powrót do dokumentacji widoku" + +msgid "View documentation" +msgstr "Zobacz dokumentację" + +msgid "Jump to namespace" +msgstr "Przejdź do przestrzeni nazw" + +msgid "Empty namespace" +msgstr "Pusta przestrzeń nazw" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Widoki według przestrzeni nazw %(name)s" + +msgid "Views by empty namespace" +msgstr "Widoki po pustej przestrzeni nazw" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funkcja widoku: %(full_name)s. Nazwa: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtr:" + +msgid "view:" +msgstr "widok:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Nie znaleziono aplikacji %(app_label)r" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nie został znaleziony w aplikacji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "powiązany obiekt `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "powiązane obiekty `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "wszystkie %s" + +#, python-format +msgid "number of %s" +msgstr "liczba %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nie jest obiektem urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..da299eb18fe0735527b51ddfd0f7b8978914b0f9 GIT binary patch literal 6566 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..7c0ce195b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bruno Miguel Custódio , 2012 +# Jannis Leidel , 2011 +# Nuno Mariz , 2011-2013,2015,2017 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentação Administrativa" + +msgid "Home" +msgstr "Início" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentação dos bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arraste o link da barra dos bookmarks, ou " +"pressione do lado direito no link e adicione aos bookmarks.\n" +"Agora poderá selecionar o bookmarklet de qualquer página do site." + +msgid "Documentation for this page" +msgstr "Documentação desta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vai de qualquer página para a documentação da view que gera essa página." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas as template tags e suas funções." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Os filtros são as acções que podem ser aplicadas às variáveis ​​de uma " +"template para alterar o output." + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Models são descrições de todos os objetos no sistema e seus campos " +"associados. Cada model tem uma lista de campos que podem ser acedidos como " +"variáveis ​​de template" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página no site público é gerada por uma view. A view define qual " +"template será usado para gerar a página e quais objetos estarão disponíveis " +"para esse template." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Ferramentas para o seu navegador para aceder rapidamente a funcionalidade de " +"administração." + +msgid "Please install docutils" +msgstr "Por favor, instale o docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"A documentação do sistema de admin requer a biblioteca docutils do Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, peça aos seu administradores para instalar o docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrição" + +msgid "Methods with arguments" +msgstr "Métodos com argumentos" + +msgid "Method" +msgstr "Métodos" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Voltar para a documentação dos Models" + +msgid "Model documentation" +msgstr "Documentação dos Models" + +msgid "Model groups" +msgstr "Grupos de Models" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Template: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Caminho de pesquisa para o template \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(Não existe)" + +msgid "Back to Documentation" +msgstr "Voltar para a Documentação" + +msgid "Template filters" +msgstr "Filtros de template" + +msgid "Template filter documentation" +msgstr "Documentação de filtros de template" + +msgid "Built-in filters" +msgstr "Filtros built-in" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estes filtros, coloque %(code)s na sua template " +"antes de utilizar o filtro." + +msgid "Template tags" +msgstr "Tags de template" + +msgid "Template tag documentation" +msgstr "Documentação de tags de template" + +msgid "Built-in tags" +msgstr "Tags built-in" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas tags, coloque %(code)s na sua template " +"antes de usar a tag." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Templates:" + +msgid "Back to View documentation" +msgstr "Voltar para a documentação das Views" + +msgid "View documentation" +msgstr "Ver documentação" + +msgid "Jump to namespace" +msgstr "Saltar para namespace" + +msgid "Empty namespace" +msgstr "Namespace vazio" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views por namespace vazio" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Função de view: %(full_name)s. Nome: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "A aplicação %(app_label)r não foi encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "O Model %(model_name)r não foi encontrado na aplicação %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "o objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "os objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s não parece ser um objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..28ee8c6e6892a962788731ada79c4461ae8e6c9d GIT binary patch literal 6590 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2151086c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,292 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# andrewsmedina , 2016 +# Carlos C. Leite , 2016 +# Filipe Cifali Stangler , 2016 +# Eduardo Cereto Carvalho, 2016 +# Elyézer Rezende , 2013 +# semente, 2012 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Rafael Fontenelle , 2021 +# Vinícius Muniz de Melo , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-17 05:53+0000\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentação Administrativa" + +msgid "Home" +msgstr "Início" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Bookmarklets" +msgstr "Itens de bookmark" + +msgid "Documentation bookmarklets" +msgstr "Documentação de itens de bookmark" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arraste o link para a sua barra de favoritos, ou " +"clique com o botão direito no link e o adicione aos seus favoritos. Agora " +"você pode selecionar o bookmarklet a partir de qualquer página do site." + +msgid "Documentation for this page" +msgstr "Documentação para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Leva você de qualquer página para a documentação da view que gera tal página." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas as tags de template e suas funções." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Os filtros são ações que podem ser aplicadas às variáveis ​​em um template " +"para alterar a saída." + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelos são descrições de todos os objetos no sistema e seus campos " +"associados. Cada modelo tem uma lista de campos que podem ser acessados ​​como " +"variáveis ​​no template" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página no site público é gerada por uma view. A view define qual " +"template será usado para gerar a página e quais objetos estarão disponíveis " +"para este template." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Ferramentas para o seu navegador para acessar rapidamente a funcionalidade " +"de administração." + +msgid "Please install docutils" +msgstr "Por favor, instale o docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"O sistema de documentação de administração exige a biblioteca docutils do Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, peça para os seus administradores para instalar o docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrição" + +msgid "Methods with arguments" +msgstr "Métodos com argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Voltar para Documentação do Model" + +msgid "Model documentation" +msgstr "Documentação do model" + +msgid "Model groups" +msgstr "Grupos de models" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Caminho de busca para o template %(name)s:" + +msgid "(does not exist)" +msgstr "(não existe)" + +msgid "Back to Documentation" +msgstr "Voltar para Documentação" + +msgid "Template filters" +msgstr "Filtros do template" + +msgid "Template filter documentation" +msgstr "Documentação do filtro do template" + +msgid "Built-in filters" +msgstr "Filtros built-in" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para usar esses filtros, coloque %(code)s no seu template antes " +"de usar o filtro." + +msgid "Template tags" +msgstr "Tags de template" + +msgid "Template tag documentation" +msgstr "Documentação da tag de template" + +msgid "Built-in tags" +msgstr "Tags built-in" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para usar estas tags, coloque o código %(code)s no seu template " +"antes de usar a tag." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Templates:" + +msgid "Back to View documentation" +msgstr "Voltar para a Documentação das Views" + +msgid "View documentation" +msgstr "Ver documentação" + +msgid "Jump to namespace" +msgstr "Ir para namespace" + +msgid "Empty namespace" +msgstr "Namespace vazio" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views por namespace vazio" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"View função: %(full_name)s. Nome: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r não encontrado" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r não encontrado na aplicação %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "o objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s não aparenta ser um objeto urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b7f58b689f553b70453c73f6beb4918a96829ee3 GIT binary patch literal 6755 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 k)k!PFOpC6ZO&9qH@Xfzp=n3uCoxg1O6F@, 2014 +# Eugenol Man , 2020 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-15 11:18+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Administrative Documentation" +msgstr "Documentație Administrativă" + +msgid "Home" +msgstr "Acasă" + +msgid "Documentation" +msgstr "Documentație" + +msgid "Bookmarklets" +msgstr "Semne de carte" + +msgid "Documentation bookmarklets" +msgstr "Semne de carte pentru documentație" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pentru a instala semne de carte, trageți link-ul în bara de semne de carte, " +"sau clic dreapta pe link și adăugați la semnele de carte. Acum puteți " +"selecta semnul de carte din orice pagină." + +msgid "Documentation for this page" +msgstr "Documentație pentru pagina aceasta" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vă trimite de la orice pagină către documentația pentru codul de afișare " +"care generează acea pagină." + +msgid "Tags" +msgstr "Taguri" + +msgid "List of all the template tags and their functions." +msgstr "Lista tuturor tagurilor din șabloane și funcțiile lor." + +msgid "Filters" +msgstr "Filtre" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtrele sunt acțiuni care pot fi aplicate variabilelor într-un șablon " +"pentru a altera rezultatul." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelele sunt descrieri ale tuturor obiectelor în sistem și a câmpurilor " +"asociate ale acestora. Fiecare model are o listă de câmpuri care pot fi " +"accesate ca variabile în șabloane." + +msgid "Views" +msgstr "Coduri de afișare" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Fiecare pagină din pagina web este generată de un cod de afișare. Codul de " +"afișare definește ce șablon este utlizat la generarea paginii și ce obiecte " +"sunt disponibile acelui șablon." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Instrumente pentru browser pentru accesarea rapidă a funcționalității de " +"administrare." + +msgid "Please install docutils" +msgstr "Instalați vă rugăm docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Sistemul de documentație administrativă are nevoie de librăria Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Rugați administratorii să instaleze docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Câmpuri" + +msgid "Field" +msgstr "Câmp" + +msgid "Type" +msgstr "Tip" + +msgid "Description" +msgstr "Descriere" + +msgid "Methods with arguments" +msgstr "Metode cu argumente" + +msgid "Method" +msgstr "Metodă" + +msgid "Arguments" +msgstr "Argumente" + +msgid "Back to Model documentation" +msgstr "Înapoi la Documentația Modelelor" + +msgid "Model documentation" +msgstr "Documentația modelelor" + +msgid "Model groups" +msgstr "Grupuri de modele" + +msgid "Templates" +msgstr "Șabloane" + +#, python-format +msgid "Template: %(name)s" +msgstr "Șablonul: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Calea de căutare pentru template %(name)s:" + +msgid "(does not exist)" +msgstr "(inexistent)" + +msgid "Back to Documentation" +msgstr "Înapoi la Documentație" + +msgid "Template filters" +msgstr "Filtre pentru șabloane" + +msgid "Template filter documentation" +msgstr "Documentația filtrelor pentru șabloane" + +msgid "Built-in filters" +msgstr "Filtre implicite" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Pentru a utiliza aceste filtre, puneți %(code)s în șablon " +"înainte de utilizarea acestui filtru." + +msgid "Template tags" +msgstr "Taguri pentru șabloane" + +msgid "Template tag documentation" +msgstr "Documentația tagurilor pentru șabloane" + +msgid "Built-in tags" +msgstr "Taguri implicite" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Pentru a utiliza aceste taguri, puneți %(code)s în șablon " +"înainte de a utiliza tagul." + +#, python-format +msgid "View: %(name)s" +msgstr "Cod de afișare: %(name)s" + +msgid "Context:" +msgstr "Context:" + +msgid "Templates:" +msgstr "Șablonuri:" + +msgid "Back to View documentation" +msgstr "Înapoi la Documentația Codurilor de afișare" + +msgid "View documentation" +msgstr "Vezi documentația" + +msgid "Jump to namespace" +msgstr "Mergeți la spațiul de nume" + +msgid "Empty namespace" +msgstr "Spațiu de nume gol" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Coduri de afișare după spațiul de nume %(name)s" + +msgid "Views by empty namespace" +msgstr "Coduri de afișare după spațiu de nume gol" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funcția din codul de afișare: %(full_name)s. Nume: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtru:" + +msgid "view:" +msgstr "cod de afișare:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicația %(app_label)r nu a fost găsită" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelul %(model_name)r nu a fost găsit în aplicația %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "obiectul înrudit `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "obiectele înrudite `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "toate %s" + +#, python-format +msgid "number of %s" +msgstr "numărul de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nu pare a fi un obiect urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..21931a6dbf033fbc036cc284ef926335b12dd4d6 GIT binary patch literal 8434 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 yCp8j8=Fu3i5|73azRllnK|D%6Sq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..0f7e30f5f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,292 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eugene , 2012 +# Jannis Leidel , 2011 +# Panasoft, 2021 +# SeryiMysh , 2020 +# Алексей Борискин , 2012-2015 +# Андрей Щуров , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-16 22:51+0000\n" +"Last-Translator: Panasoft\n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Документация для администраторов" + +msgid "Home" +msgstr "Начало" + +msgid "Documentation" +msgstr "Документация" + +msgid "Bookmarklets" +msgstr "Закладки" + +msgid "Documentation bookmarklets" +msgstr "Закладки документации" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Чтобы установить букмарклет, перетащите ссылку на панель закладок браузера " +"или откройте кликом по правой кнопке мышки контекстное меню и добавьте " +"ссылку в закладки. Теперь у вас есть доступ к букмарклету с любой страницы " +"сайта." + +msgid "Documentation for this page" +msgstr "Документация для данной страницы" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Перенаправляет вас с любой страницы к документации для view, который " +"генерирует эту страницу." + +msgid "Tags" +msgstr "Теги" + +msgid "List of all the template tags and their functions." +msgstr "Список всех template tag-ов и их функций." + +msgid "Filters" +msgstr "Фильтры" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Фильтры - это действия, которые могут быть выполнены над переменными в " +"шаблоне, чтобы изменить их отображение." + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Модели - это описания всех объектов, существующих в системе и связанные с " +"ними поля. Каждая модель имеет список полей, которые могут быть использованы " +"в качестве переменных в шаблонах" + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Каждая страница сайта создаётся с помощью view. View определяет, какой " +"шаблон использовать, чтобы создать страницу и какие объекты будут доступны в " +"этом шаблоне." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Инструменты для вашего браузера для быстрого доступа к функциональности " +"административного раздела сайта (букмарклеты)." + +msgid "Please install docutils" +msgstr "Пожалуйста, установите docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Для системы административной документации требуется библиотека Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Пожалуйста, попросите ваших администраторов установить docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модель: %(name)s" + +msgid "Fields" +msgstr "Поля" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Описание" + +msgid "Methods with arguments" +msgstr "Методы с аргументами" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументы" + +msgid "Back to Model documentation" +msgstr "Назад к документации моделей" + +msgid "Model documentation" +msgstr "Документация моделей" + +msgid "Model groups" +msgstr "Группы моделей" + +msgid "Templates" +msgstr "Шаблоны" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Путь к местонахождению шаблона %(name)s:" + +msgid "(does not exist)" +msgstr "(не существует)" + +msgid "Back to Documentation" +msgstr "Назад к документации" + +msgid "Template filters" +msgstr "Фильтры в шаблонах" + +msgid "Template filter documentation" +msgstr "Документация о фильтрах в шаблонах" + +msgid "Built-in filters" +msgstr "Встроенные фильтры" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Чтобы использовать эти фильтры, поместите %(code)s в ваш шаблон " +"выше строки с использованием фильтра." + +msgid "Template tags" +msgstr "Теги шаблонов" + +msgid "Template tag documentation" +msgstr "Документация по тегам шаблонов" + +msgid "Built-in tags" +msgstr "Встроенные теги" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Чтобы использовать эти теги, поместите %(code)s в ваш шаблон " +"выше строки с использованием тега." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблоны:" + +msgid "Back to View documentation" +msgstr "Назад к документации о представлений" + +msgid "View documentation" +msgstr "Документация о view" + +msgid "Jump to namespace" +msgstr "Перейти к пространству имён" + +msgid "Empty namespace" +msgstr "Глобальное пространство имён" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "View в пространстве имён %(name)s" + +msgid "Views by empty namespace" +msgstr "View в глобальном пространстве имён" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"View-функция: %(full_name)s. Имя url-шаблона: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "тег:" + +msgid "filter:" +msgstr "фильтр:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Приложение «%(app_label)r» не найдено" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Модель %(model_name)r не найдена в приложении %(app_label)r" + +msgid "model:" +msgstr "модель:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "зависимый `%(app_label)s.%(data_type)s` объект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "связанные объекты `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "все %s" + +#, python-format +msgid "number of %s" +msgstr "количество %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не похож на объект urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9af55df501d5558f3ca8211a74d38870bd25ecac GIT binary patch literal 6639 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0e41cb8d7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2013 +# Marian Andre , 2012-2013,2015,2017 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +# supowski , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-24 21:08+0000\n" +"Last-Translator: Peter Kuma\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Administrative Documentation" +msgstr "Správcovská dokumentácia" + +msgid "Home" +msgstr "Domov" + +msgid "Documentation" +msgstr "Dokumentácia" + +msgid "Bookmarklets" +msgstr "Záložky" + +msgid "Documentation bookmarklets" +msgstr "Záložky dokumentácie" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Na nainštalovanie bookmarkletov, pretiahnite odkaz váš panel so záložkami, " +"alebo kliknite pravým tlačidlom na odkaz a pridajte ho do vašich záložiek. " +"Teraz si môžete vybrať bookmarklet z ľubovoľnej stránky na sídle." + +msgid "Documentation for this page" +msgstr "Dokumentácia pre túto stránku" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Nasmeruje vás z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa " +"táto stránka generuje." + +msgid "Tags" +msgstr "Značky" + +msgid "List of all the template tags and their functions." +msgstr "Zoznam všetkých šablónových značiek a ich funkcií ." + +msgid "Filters" +msgstr "Filtre" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtre su akcie, ktoré môžu byť aplikované na premenné v šablóne, aby " +"zmenili ich výstup." + +msgid "Models" +msgstr "Modely" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modely sú popisom všetkých objektov v systéme a ich pridružených polí. Každý " +"model má zoznam polí, ktoré sú dostupné ako premenné v šablónach." + +msgid "Views" +msgstr "Zobrazenia" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Každá stránka na verejnom sídle je generovaná pomocou pohľadu. Pohľad " +"definuje, ktorá šablóna sa použije na generovanie stránky, a ktoré objekty " +"budú v šablóne k dispozícii." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Nástroje pre váš prohliadač k rýchlemu prístupu k funkciám správy stránok." + +msgid "Please install docutils" +msgstr "Prosím, nainštalujte docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Dokumentačný systém správy stránok vyžaduje Python knižnicu docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Požiadajte administrátorov o inštaláciu docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Polia" + +msgid "Field" +msgstr "Pole" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Popis" + +msgid "Methods with arguments" +msgstr "Metódy s argumentami" + +msgid "Method" +msgstr "Metódy" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Späť na dokumentáciu modelov" + +msgid "Model documentation" +msgstr "Dokumentácia modelu" + +msgid "Model groups" +msgstr "Skupiny modelov" + +msgid "Templates" +msgstr "Šablóny" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablóna: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Šablóna: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Vyhľadávacia cesta pre šablónu %(name)s:" + +msgid "(does not exist)" +msgstr "(neexistuje)" + +msgid "Back to Documentation" +msgstr "Späť na Dokumentáciu" + +msgid "Template filters" +msgstr "Filtre šablóny" + +msgid "Template filter documentation" +msgstr "Dokumentácia filtrov šablón" + +msgid "Built-in filters" +msgstr "Vstavané filtre" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Na použitie týchto filtrov, vložte %(code)s do vašej šablóny " +"pred použitím filtra." + +msgid "Template tags" +msgstr "Šablónové značky" + +msgid "Template tag documentation" +msgstr "Dokumentácia šablónových značiek" + +msgid "Built-in tags" +msgstr "Vstavané značky" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Na použitie týchto značiek, vložte %(code)s do vašej šablóny " +"pred použitím značky." + +#, python-format +msgid "View: %(name)s" +msgstr "Pohľad: %(name)s" + +msgid "Context:" +msgstr "Kontext:" + +msgid "Templates:" +msgstr "Šablóny:" + +msgid "Back to View documentation" +msgstr "Späť na dokumentáciu pohľadov" + +msgid "View documentation" +msgstr "Dokumentácia pohľadov" + +msgid "Jump to namespace" +msgstr "Prejsť na menný priestor" + +msgid "Empty namespace" +msgstr "Prázdny menný priestor" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pohľady podľa menného priestoru %(name)s" + +msgid "Views by empty namespace" +msgstr "Pohľady podľa prázdneho menného priestoru" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Funkcia pohľadu: %(full_name)s. Názov: %(url_name)s.\n" + +msgid "tag:" +msgstr "značka:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "pohľad:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikácia %(app_label)r nenájdená" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r sa v aplikácii %(app_label)r nenachádza" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "súvisiaci objekt `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "súvisiace objekty `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "všetky %s" + +#, python-format +msgid "number of %s" +msgstr "počet %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nevyzerá ako urlpattern objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc2764f20e8cb8d8422c2ed932fa000505cc3eb8 GIT binary patch literal 6508 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 000000000..1cb6abcc4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Primož Verdnik , 2017 +# zejn , 2013,2016 +# zejn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Dokumentacija o administraciji" + +msgid "Home" +msgstr "Domov" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Apleti zaznamkov" + +msgid "Documentation bookmarklets" +msgstr "Dokumentacijski apleti zaznamkov" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aplete zaznamkov je mogoče namestiti z vleko povezave v orodno vrstico z " +"zaznamki, ali pa z desnim klikom na povezavo. Zaznamek je mogoče izbrati s " +"katerekoli strani tega spletnega mesta." + +msgid "Documentation for this page" +msgstr "Dokumentacija te strani" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Skok na stran z dokumentacijo za pogled, ki gustvarja trenutno stran." + +msgid "Tags" +msgstr "Oznake" + +msgid "List of all the template tags and their functions." +msgstr "Izpiši vse značke za predloge in njihov opis." + +msgid "Filters" +msgstr "Filtri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtri so opravila, ki jih lahko uporabite na spremenljivkah v predlogah, da " +"spremenite izpis." + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeli so opisi vseh objektov v sistemu in njihovih pripadajočih polj. Vsak " +"model ima seznam polj, do katerih lahko dostopate v predlogi" + +msgid "Views" +msgstr "Pogledi" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Vsaka stran na javni strani je zgenerirana iz pogleda. Pogled definira " +"katera predloga je uporabljena za generiranje strani in kateri objekti so " +"dostopni ti predlogi." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Orodja za vaš brskalnik, da lahko hitro dostopate do administracijskih " +"funkcij." + +msgid "Please install docutils" +msgstr "Prosimo namestite paket docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Dokumentcijski sistem administracijskega vmesnika zahteva knjižnico docutils za Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Prosimo povprašajte administratorja, da namesti docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Polja" + +msgid "Field" +msgstr "Polje" + +msgid "Type" +msgstr "Tip" + +msgid "Description" +msgstr "Opis" + +msgid "Methods with arguments" +msgstr "Metode z argumenti" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenti" + +msgid "Back to Model documentation" +msgstr "Nazaj na dokumentacijo modelov" + +msgid "Model documentation" +msgstr "Dokumentacija modelov" + +msgid "Model groups" +msgstr "Skupine modelov" + +msgid "Templates" +msgstr "Predloge" + +#, python-format +msgid "Template: %(name)s" +msgstr "Predloga: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Predloga: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Poti iskanja za predlogo \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(ne obstaja)" + +msgid "Back to Documentation" +msgstr "Nazaj na dokumentacijo" + +msgid "Template filters" +msgstr "Filtri v predlogah" + +msgid "Template filter documentation" +msgstr "Dokumentacija filtrov v predlogah" + +msgid "Built-in filters" +msgstr "Vgrajeni filtri" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Če želite uporabiti te filtre, dodajte %(code)s v vašo predlogo " +"preden uporabite filter." + +msgid "Template tags" +msgstr "Značke v predlogah" + +msgid "Template tag documentation" +msgstr "Dokumentacija značk v predlogah" + +msgid "Built-in tags" +msgstr "Vgrajene značke" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Če želite uporabiti te značke, dodajte %(code)s v vašo predlogo " +"preden uporabite značko." + +#, python-format +msgid "View: %(name)s" +msgstr "Pogled: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Predloge:" + +msgid "Back to View documentation" +msgstr "Nazaj na dokumentacijo pogledov" + +msgid "View documentation" +msgstr "Dokumentacija pogledov" + +msgid "Jump to namespace" +msgstr "Skoči na imenski prostor" + +msgid "Empty namespace" +msgstr "Prazen imenski prostor" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pogledi v imenskem prostoru %(name)s" + +msgid "Views by empty namespace" +msgstr "Pogledi brez imenskega prostora" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Funkcija pogleda: %(full_name)s. Ime: %(url_name)s.\n" + +msgid "tag:" +msgstr "oznaka:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "pogled:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikacije %(app_label)r ni bilo mogoče najti" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modela %(model_name)r ni v programu %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani predmet `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "povezani predmeti `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "vse %s" + +#, python-format +msgid "number of %s" +msgstr "število %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Predmet %s ni videti veljaven predmet urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1ff898e98c37c8eefd0bf6e42f38b9cf1cdee57f GIT binary patch literal 6551 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, 2011,2015 +# Besnik Bleta , 2021 +# Besnik Bleta , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 13:31+0000\n" +"Last-Translator: Besnik Bleta \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Dokumentim Administrimi" + +msgid "Home" +msgstr "Hyrje" + +msgid "Documentation" +msgstr "Dokumentim" + +msgid "Bookmarklets" +msgstr "Bookmarklet-e" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet-e Dokumentimi" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Që të instaloni bookmarklet-e, tërhiqeni lidhjen te paneli juaj i " +"faqerojtësve, ose djathtasklikoni lidhjen dhe shtojeni te faqerojtësit tuaj. " +"Tani mund ta përzgjidhni bookmarklet-in prej cilësdo faqe te sajti." + +msgid "Documentation for this page" +msgstr "Dokumentim për këtë faqe" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Nga cilado faqe, ju kalon te dokumenti për skenën që prodhon atë faqe." + +msgid "Tags" +msgstr "Etiketa" + +msgid "List of all the template tags and their functions." +msgstr "listë e krejt etiketave të gjedheve dhe funksionet e tyre." + +msgid "Filters" +msgstr "Filtra" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtrat janë veprime që mund të zbatohen mbi ndryshoret në një gjedhe për të " +"ndryshuar përfundimet e saj." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelet janë përshkrime të krejt objekteve në sistem dhe fushave " +"përshoqëruar me to. Çdo model ka një listë fushash të cilat mund të përdoren " +"si ndryshore gjedheje" + +msgid "Views" +msgstr "Skena" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Çdo faqe në sajtin publik prodhohet nga ajo që quhet skenë. Skena përcakton " +"cila gjedhe përdoret për të prodhuar faqen dhe cilët objekte mund të kihen " +"për atë gjedhe." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Mjete që shfletuesi juaj të përdorë me shpejtësi funksione administrimi." + +msgid "Please install docutils" +msgstr "Ju lutemi, instaloni docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Sistemi i dokumentimit për përgjegjësin lyp librarinë Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Ju lutemi, kërkojuni përgjegjësve të sistemit të instalojnë docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Fusha" + +msgid "Field" +msgstr "Fushë" + +msgid "Type" +msgstr "Lloj" + +msgid "Description" +msgstr "Përshkrim" + +msgid "Methods with arguments" +msgstr "Metoda me argumente" + +msgid "Method" +msgstr "Metodë" + +msgid "Arguments" +msgstr "Argumente" + +msgid "Back to Model documentation" +msgstr "Mbrapsht te dokumentim Modeli" + +msgid "Model documentation" +msgstr "Dokumentim modeli" + +msgid "Model groups" +msgstr "Grupe modeli" + +msgid "Templates" +msgstr "Gjedhe" + +#, python-format +msgid "Template: %(name)s" +msgstr "Gjedhe: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Gjedhe: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Shteg kërkimi për gjedhen %(name)s:" + +msgid "(does not exist)" +msgstr "(nuk ekziston)" + +msgid "Back to Documentation" +msgstr "Mbrapsht te Dokumentimi" + +msgid "Template filters" +msgstr "Filtra gjedhesh" + +msgid "Template filter documentation" +msgstr "Dokumentim filtrash gjedheje" + +msgid "Built-in filters" +msgstr "Filtra të brendshëm" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Për të përdorur këta filtra, vendosni te gjedhja juaj %(code)s " +"përpara se të përdorni filtrin." + +msgid "Template tags" +msgstr "Etiketa gjedhesh" + +msgid "Template tag documentation" +msgstr "Dokumentim etiketash gjedheje" + +msgid "Built-in tags" +msgstr "Etiketa të brendshme" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Për të përdorur këto etiketa, vendosni te gjedhja juaj %(code)s " +"përpara se të përdorni etiketën." + +#, python-format +msgid "View: %(name)s" +msgstr "Skenë: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Gjedhe:" + +msgid "Back to View documentation" +msgstr "Mbrapsht te dokumentim Parjeje" + +msgid "View documentation" +msgstr "Dokumentim skenash" + +msgid "Jump to namespace" +msgstr "Kalo te emërhapësira" + +msgid "Empty namespace" +msgstr "Emërhapësirë e zbrazët" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Skena me emërhapësirë %(name)s" + +msgid "Views by empty namespace" +msgstr "Skena me emërhapësirë të zbrazët" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Funksion skene: %(full_name)s. Emër: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiketë:" + +msgid "filter:" +msgstr "filtër:" + +msgid "view:" +msgstr "skenë:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "S’u gjet dot aplikacioni %(app_label)r" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "S’u gjet modeli %(model_name)r në aplikacionin %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "objekti i afërt `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objektet e afërta `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "krejt %s" + +#, python-format +msgid "number of %s" +msgstr "numër i %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s s’duket se është objekt urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a7363f13b4bdac0f5b88a2f41a364ef26d36d0bf GIT binary patch literal 3672 zcma)-U2Ggz6@YJ{G-QEN3N)0z+y*x6(yYDfAks{-Ep5}NDOf~}8>tdfGWK4tr`erZ z&CJFL^ucLLQ-Oqv3#zI5gG!Ki;K7cws^!GCgm|cUx+CSKF9^abJRrnNC4Rm$vtI8y zc3`wK-`sodIrseCoj=}t=g$>aiTjJ(FW#Y475?=@Jh=Y!VWsxLKf`F z55v#Gqwovxd+_t{9Q-(Z6^h<3;V0k%{3u+5AA|38=WjsKy9ve4zu-sU{XFi1yWtMF z7a~$a@C4l7m0yDQG5!hM4}T3m4c~|2$KRmX`2dRk9Sp>;yWnTwE_g582PLjYU=ALG zvVN>9e-_@&xB)SxegOHY3p~WXm%HOvpzQk^9EO*n*tr4A@O>!yIg~Dw^LwD=y+d*& zpZ|ad;ZB?pzaEEDhm-JOcoE9_-$996oZSs}!7srB@Kf*^DEY2K$!`l*;E&+}xYCvX zv&(-&iEjtR5#9%1gL#NZt-u0&4?YY34u{~k33eC!K9sm;yL=mpKfi^agMWbH?_Z$U z{{Vgx?xZ09=Ym?h4ya#Q;Bl6*-`_HawCB+tDoAL&|P zBJBsUc3UmuhB^-PxY4d|hmDpS$0qc3F#epGh*hDt)SUC8xTqejH9eoV(2c#bMjr_# z+D+rfi~?Uh8rIWMq#ko8&WPDT`TFc=P%{m@=+|ABo%GD~W>FBFX}aN=hKaG<_8M`? z^YtV&Vc$gT)+6erwb10y}&Z+uWR8IYPOFVZcyZq!lFG-}y1 z0@>zI22G=$YByVvJ|DF8WEeEH>z_|GB>s5H3VIO8cd)^+0>(n(3up=>s! zMol~w)VhfDv=>ilx0l{5f%!sH5_!sZo2D411)U7qeod1dDy#Dao~Ih_xM>tawN=uy zxq2A1TT!+kQe%?FG1F`{@Tr&O^$ADs$rsWMqdmP<4qIh&y{Qcok)y`Ww~X4Nurk%B zE5k^+jfT!gDl4y}(hwcxx0~Z8)WM|4LL)I?K(dljzM~cpHl$2sy z#hM$tr()bJ_SBSA$Wh0`Ku$vGSgmxDcB9Q5U3<>;>p|{m(+a}4G#b^tTIsQNJt~a_ zj?NwbZs}=r){~{BBlzj)k#gl=sr=2-$N^nB=} zXmr(wqj0#G8$CAq#6|>_p>i%gDn2d{wxi|L3{!K@Kcpw7+%Ph6^_j7wrH3}w$zGEt zEIr{*1U1jEJNlt_|FYuhROGRa0 z!NzqguGl4+PiAB><15Ty`zltJlZ!0r*cAlx$xAGpv-4=OcCk;ir0kn`@-BDk*6s9@ zi+zhFs_nN*E)t2hZ{WyPoVbQ>*JbbS6vvmv5J4%+ zfmsRHF6rb&6s{rbFnx=hQmhg$-eaSq?CT6ANu*qI=_vb_U6Z^j`!ht_zQ_Qk0yWNp2i5=iorWc+Qa{tIz5dm)LJ2g8&3OKC2MN!eK}T_pBq4(A# z9oHp>w5LgS&q3+4ci4ClDgC;sNIH2L*@9F;Tvhfr8^eLm)}WyG>FS>r<9+IOiH?1T zVArzGn3Qw7rk!OOtgv$M$@fpt=!DFv=)1;4_a{3*zJ!eIA5i2{, 2018 +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-06-27 19:32+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Administrative Documentation" +msgstr "Административна документација" + +msgid "Home" +msgstr "Почетна" + +msgid "Documentation" +msgstr "Документација" + +msgid "Bookmarklets" +msgstr "Букмарклети" + +msgid "Documentation bookmarklets" +msgstr "Букмарклети документације" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Документација за ову страницу" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Води од било које странице до документаицје погледа који је генерисао ту " +"страницу." + +msgid "Tags" +msgstr "Тагови" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Филтери" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Вјуеви" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "Поља" + +msgid "Field" +msgstr "Поље" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Опис" + +msgid "Methods with arguments" +msgstr "Метода са аргументима" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr "Назад на документацију о Моделима" + +msgid "Model documentation" +msgstr "Документација о Моделима" + +msgid "Model groups" +msgstr "Групе модела" + +msgid "Templates" +msgstr "Шаблони" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Шаблон: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(не постоји)" + +msgid "Back to Documentation" +msgstr "Назада на документацију" + +msgid "Template filters" +msgstr "Филтери шаблона" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "Уграђени филтери" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "Уграђене ознаке" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "Види: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "Назад на документацију о View-овима" + +msgid "View documentation" +msgstr "View документација" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "таг:" + +msgid "filter:" +msgstr "филтер:" + +msgid "view:" +msgstr "вју:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Модел %(model_name)r није пронађен у апликацији %(app_label)r" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "повезани објекти класе `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "класе `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "сви повезани објекти %s" + +#, python-format +msgid "number of %s" +msgstr "број повезаних објеката %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не изгледа као „urlpattern“ објекат" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3adcd1d423b554fd54be1d261a4e9c742230d664 GIT binary patch literal 1932 zcmaiz&u<$=6vqc>3YhS#{1OzrLk!2~=5?t*u~Pr=LJui#m5 z>WSif8hje^i{KP^9(3myKW+dP0emTNIOv&VP-q>5hn~T!|gG6puwU&5P~oOm#>q zS2fP@+=_ThMAfvgF|5gZc!)TOoKv=mK!))M-VE#Jd50`_8#0x}Es>J$y0cU`gAUz2 z?$y-Fm7k@NBs#U;n(4`ocRlMFuc<>St$*C~Zlof=HE$V-hBWI3S3E!Pf_Vx)2ola>Tq)e|s*tYri^vAzwI~;BQg!tbY*a79 z{di5mPeCN0nT2rpH= zT3Wlcc5~8=pyrouXl3!GdQG%2BrA4p9hWNA0=2h!YJ_ck(p>SbPV`*Nu1LL`s;xUx z^+LMZlJ+R=kW6|l4_8``vXn>OicVt_l1g&XG%hbt@wZV?<-l(=0=jsS++Y7fBM9h2 z@(JpYmm0Ih$*vwWJN^WYEAi3X*M2FLWYkF|+o5{RB zxc7DbbqzRXHXDzu#E=e(k!{O9KYoJQnw*G}dbH0;4>L0ECS*Gs&8%eW`u-QfD$X|1 zBhnpe$w<=xALLlq&FsXrY~v)+qnveL66Abnr9lOD65_P6mCiw`6~F(bP?TYGBRSwG zM*i0XOEZmkWSjjAUo, 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr%40latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Početna" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Bukmarkleti" + +msgid "Documentation bookmarklets" +msgstr "Bukmarkleti dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranicu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vodi od bilo koje stranice do dokumentaicje pogleda koji je generisao tu " +"stranicu." + +msgid "Tags" +msgstr "Tagovi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filteri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Vjuevi" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Šabloni" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "vju:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "klase `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "svi povezani objekti %s" + +#, python-format +msgid "number of %s" +msgstr "broj povezanih objekata %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne izgleda kao „urlpattern“ objekat" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f983cc79f7e6c9692ddc4b6313d2de8a3babd2ca GIT binary patch literal 6230 zcmbuDO^h5z6@V)tBxDIm2qZv$pzLJHF4>t~+axw)uZfLq#ZF8dds&e{erl#`X4=!! zJ#_WVdZHYNkdP1}fNH1)_@j6Qrqn9rCCC$>oz!gvt~ih3|wGuzK3w#6af;TgX zcfq4j^nD!4c&DMXe;U3BpM}TZopVaP2gXpw`#ih@ei6z%zYS#`KY%jdU%;E-YY-9Y z?~p$~`A-Qj!uMbYiXZMk3DJ84uELk0jB_o*M9%f_dbkaWJyzg*;eAm2@-P&=dr<6? z7SB&ZncuT;89oO^?n`h5ZbFgwH#oRLsei#^JohlhB0LYJ|8Jm-_ZN6KyqZa4N>zt4 z{%*J(o`Ua(BPjlO9@0g9v*7ok^!qWCIQSW4NcAgt7yKg>yWT+O@4y9U4H|L{LO+d7yLPt`Md&mz~4i$$1OPZ zUU)l{aZWH+e8uM??|x1hpXvE{2kOI|;`{PAz>Vn8;FPr} zhhO`!&Phu0wwL%3-Q?Jx!(UgqN=(XuJA6E&uBvg0?)Pz4j}P!5zQ(lvxQFW=PO+o- zqIzuO;ZDxGIVBEubFOeojDC<4bNP7L2j$qsx!2$2@g-~EL&ftF6d#FyFql^G*ke zbvjNmZ3Y8tQk^BbX|>TbADAq&X{?jxY1_)w!lbD^6S{0s9SHhi%w1}-aAftNq&4i@ zIO8da)q%l4&o3bK$;dQqw3zxq+Q~2u)Pc0)TRL^nw0bh+Y~S+japo4GVO4JV&D&wi zrzGk1P1=iWhU8%wWwkKYZD`ZVi_CPK`dAWY_Dt4LhpcO*;lS%WtHsQdZdQfQerhL} zts6Q$FdeH7n^xD~=_Ka0)q`O(3R~KRnbkDv*w|t*8|da3JCE>ZU9Ztj?sQ<=VT?yM zx*=jR+aE-h#~P`A^h&#cC|8NK>;HVkxb^TKF;cBNfhK3VZaT|Gp2>ZFYl zkyl}2PzeHWI6M@llLh7K>bT9iNl<_phglaBlmVNE!itW;PM6ymP@{X^XKAq?#y5srLH=k(&1QLLd}gGGpx+ZIG40SA8l>%v8!tzpI&|4 zHAvS{VWYf35lN+sTP^D(@Mt-)-Nf1IL}ZO4)Lc*emTEK22uVth1cSItjK9z5Zfe`B z+vgXeFzzk7?fYf%W?@9WGW+YLsIqF|>axj>B%9D=Gm?ej)t>}W)3SsuSuKq7S>{5vNER>s ze`1j!GLy*poRQlwO*Wh)r9|VnRxctE`#>+8TyC!>3N!K0cwp5<_8WOsi5z)!zMYfQ zPRP#WSpQi*Ofued!OIGncPckQL;2O&Q1P(eL`%{a-%=|ZL7<GwKWaIumyH_(gQ%};)e!9h-Aql;y>n`AeN4>t{;QI%QuJM-q#N0^M!sl+#$U73RTl`&4KS5~w6aJ~#0ZJvz-vX}P>p7ezdjSIof z^s}N{?pWVVh7$*L=-i3Ij?tl4N+jD@GGc$4h}4nIvr$%Fefd{ZfnM#+a~WdNfLtUR z^_UHHJ$nsGQ1mk0vLYbpWL`4JR9{gaZHHOkWMX_7{sG&k3>*xKD4C>0bU2^3qcM?{ z>LBc}1#O`b>ZC({hNVS|%I1=P zo_xU-;^F2rq_G!45E)f#iyd>xCT-08&`n}DBZYbP(#^Bv+@kuseCgK=`9YXuwpaJz zuKAf=wMwM|qxO-d6Jb(PU6D~Ssbu(Z$4Msfkv~m`OWLx)Q;m;1G?Ica5BXAtgaY>+ ziY}j@D`Kl@mHKe#S9&niB%tWD@xH9+RxV8v7BYP1lf~Dyk>fX>tYbeh6Z`x{cYa8e zNqVWOLisO@tp#IDo?-Mt0CN&2r$jTE3>!$iU3#3{um9UP(w8Y!hoKDWW#iIjjJ{!; zP0Z-zm$r9-i%qjxq}+2-(u#E}zlW%dTs65+Yp@-X=koocx=pgFt&c0wxISjx%OxL) zBB_$Pr|&08bf&H}7ZjFJLmB={<15a*I3$kj, 2012,2014 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2014 +# Petter Strandmark , 2019 +# Thomas Lundqvist, 2013 +# Tomas Lööw , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-27 05:33+0000\n" +"Last-Translator: Tomas Lööw \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Dokumentation för admin" + +msgid "Home" +msgstr "Hem" + +msgid "Documentation" +msgstr "Dokumentation" + +msgid "Bookmarklets" +msgstr "Smarta bokmärken" + +msgid "Documentation bookmarklets" +msgstr "Smarta bokmärken för dokumentation" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"För att installera bookmarklets, dra länken till din verkygsrad för " +"bokmärken, eller högerklicka på länken och lägg till den till dina " +"bokmärken. Nu kan du välja din bookmarklet från vilken sida som helst." + +msgid "Documentation for this page" +msgstr "Dokumentation för denna sida" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Förflyttar dig från valfri sida till dokumentationen för vyn som genererar " +"den sidan." + +msgid "Tags" +msgstr "Taggar" + +msgid "List of all the template tags and their functions." +msgstr "En lista på alla malltaggar och deras funktioner." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filter är åtgärder som kan appliceras på variabler i en mall för att ändra " +"utmatningen." + +msgid "Models" +msgstr "Modeller" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller är beskrivningar av alla objekt i systemet och deras tillhörande " +"fält. Varje modell har en lista av fält som kan kommas åt som variabler i " +"mallen." + +msgid "Views" +msgstr "Vyer" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Varje sida på den publika sidan är genererad av en vy. Vyn definierar vilka " +"mallar som används för att generera sidan samt vilka objekt som är " +"tillgängliga i den mallen." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Verktyg till din webbläsare för snabb tillgång till " +"administrationsfunktioner." + +msgid "Please install docutils" +msgstr "Vänligen installera docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Administrationsdokumentationen kräver Pythons docutils bibliotek." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Vänligen be din administratör installera docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +msgid "Fields" +msgstr "Fält" + +msgid "Field" +msgstr "Fält" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Beskrivning" + +msgid "Methods with arguments" +msgstr "Metod med argument" + +msgid "Method" +msgstr "Metod" + +msgid "Arguments" +msgstr "Argument" + +msgid "Back to Model documentation" +msgstr "Tillbaka till modell-dokumentation" + +msgid "Model documentation" +msgstr "Modelldokumentation" + +msgid "Model groups" +msgstr "Modellgrupper" + +msgid "Templates" +msgstr "Mallar" + +#, python-format +msgid "Template: %(name)s" +msgstr "Mall: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +msgid "(does not exist)" +msgstr "(finns inte)" + +msgid "Back to Documentation" +msgstr "Tillbaka till dokumentation" + +msgid "Template filters" +msgstr "Mallfilter" + +msgid "Template filter documentation" +msgstr "Mallfilterdokumentation" + +msgid "Built-in filters" +msgstr "Inbyggda filter" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"För att använda dessa filter, lägg till %(code)s innan du " +"använder filtret i din mall." + +msgid "Template tags" +msgstr "Malltaggar" + +msgid "Template tag documentation" +msgstr "Malltaggdokumentation" + +msgid "Built-in tags" +msgstr "Inbyggda taggar" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"För att använda dessa taggar, lägg till %(code)s innan du " +"använder taggen i din mall." + +#, python-format +msgid "View: %(name)s" +msgstr "Vy: %(name)s" + +msgid "Context:" +msgstr "Kontext:" + +msgid "Templates:" +msgstr "Mallar:" + +msgid "Back to View documentation" +msgstr "Tillbaka till vy-dokumentation" + +msgid "View documentation" +msgstr "Titta på dokumentationen" + +msgid "Jump to namespace" +msgstr "Hoppa till namespace" + +msgid "Empty namespace" +msgstr "Tom namespace" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vyer för namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Vyer för tom namespace" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Vyfunktion: %(full_name)s. Namn: %(url_name)s.\n" + +msgid "tag:" +msgstr "tagg:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "vy:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikation %(app_label)r hittades inte" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modell %(model_name)r hittades inte i applikation %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "det relaterade `%(app_label)s.%(data_type)s`-objektet" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "relaterade `%(app_label)s.%(object_name)s`-objekt" + +#, python-format +msgid "all %s" +msgstr "alla %s" + +#, python-format +msgid "number of %s" +msgstr "antal %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s verkar inte vara ett urlpattern-objekt" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..349f77be714c1ed16401ed2d44740c8be38b5edb GIT binary patch literal 1808 zcmai!OK%)S5XT!x0xSVScpM0z3X&zS%>EGI#+TfKP%YcnUlKcfhZ}x53}QGvMhb zX8UKsr!jv4JPlp|dH*8FeirBR9>{SogI#bPWd9!Qfm4v}e*nLO#vj2p<{x3P1%3gt z-@D+;;60GQ`}6gm=KLA_9P7V;AA)bfi0u*#94`Z(0!xr}PeIms55%ANdd_daXE47H zcEImJw*MXEJpKW){TUcTZgUoBw7vwg&lhZhIDa$ zzJ_!Qq@vNx@wq+E!-Av4Do4h8l4Yr6Mc&d-k)%-NrSx7^hU{=pjl8&OZC1!C%awOx z-Ht+`jF(V%h*SnvfOYM4kbcm1?f?L#xc_m0JOW%*^I%_O>wJmMu{O7^6g*w!so+R8^; zZlaUuYM8iaU}I`+e=>;HD%HGNv<{&$UF!8ON4_hsDe)^*+S>`{-^L1$!(?(9wvkk8G#uI{#5TboFS> z0a6x|R|md}N7QD8Myafv@~fW?Hliy>=Q!3_RnavwvWYg6n63=9Ka?4ht6ST7sAL{( z*s5?bnX;L>)k`Zh`&?Z#ba9pX?Ufc+RVtA5Nm1J(^l-LVaS!(G!lEkAy^i?&5q92 zwzghDUIIb2GE+4V0Z@UWV9l0-k@icOL)ejN8tlBF^uH?#x80NYZ=qp~kj)2`m7P?w z2>(}Jn#&6VmzVNdY|XP}MW%DfWi*;ysHre5bi#shXY4$xu=cf)`%{|+r=f=HOaIsA SL``L|7^R06MVLLE75@Nb>EnC= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..3a9e2fda5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Sebule" + +msgid "Documentation" +msgstr "Waraka" + +msgid "Bookmarklets" +msgstr "Vialamisho" + +msgid "Documentation bookmarklets" +msgstr "Vialamisho vya waraka" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Nyaraka kwa ajili ya ukurasa huu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Inakurusha kutoka ukurasa wowote hadi kwenye waraka wa mounekano unaozalisha " +"ukurasa huo." + +msgid "Tags" +msgstr "Tagi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Chujio" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Mionekano" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templeti" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tagi" + +msgid "filter:" +msgstr "chujio" + +msgid "view:" +msgstr "muonekano" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modeli %(model_name)r haijapatikana katika programu %(app_label)r" + +msgid "model:" +msgstr "modeli" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` kinachohusiana" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` vinavyohusiana" + +#, python-format +msgid "all %s" +msgstr "kila %s" + +#, python-format +msgid "number of %s" +msgstr "idadi ya %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s haionekani kuwa ni kitu cha urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..acf0768dd4ffe5e702a035a2583b0b1e80912e5b GIT binary patch literal 1675 zcmaJ>&uBN#p!B#ts8#fxCf=z>k5qfO~=WfL{Qg19t#_16~3C4tyWD?>)vo z08RjD9RZ2wIFRCJfIES+!28I#1U!ZHpW7J|!2JmN3U~!b`xZC@d<`U?zkz=NcY@?| z;G1>agJR_4AdvD;0`~yF0g_J*M7c0(coG*4>H`hZOg<47^nD1V0eNf}Cgg?j5uT6$ zp#|?6Rd8(_mwB$F<<9W7;*t++noH-D)!ekNtBzx*jk%FYdm~k@U^AvO$dq={B}Q*u z@%B3ddC#E2LQ?Qt_7yvCGQ} z(#lE)6Jbfbbtco4?=M&{Nns#nndz!DW_pmdmF1>KXHNEGMl>;-w}uRg*{-;zYym?t z?_QU>Z)%rSZmbh?ML+3^(}R8?S|;YT`AaQv#;Ram%%FPAk3`MmB5I1}ByS#zk4_$n zno)#6aak=U#JMGIaugRGiZE&yW#L52N?oMV85{EpQfsv7qDmm0e+@NQo=U^Ap6H%A zi5%S@z^-U1nZ>*%vn1sc3(n=RR(DJ{(fyd8XeVw% zBsgSkJ{?$@igU(hMa*>`mc{guDPFx!PiVexnl}$j)#%d{zI^3}KaGEizI^P5cYOJa zFQ4MbmoNQr#g}WeU;bLfhvzEu<+E^x1jOO^0sZJ5PvpD|3D|s%O+MStg)=_cPGWf-Jf|E7sH$@`{LLiNnF;1%6 utiFyH>w9S2qY#9~hMcPD(1Sk)U!s*Gj^PS%;NE^1-3>k)P$G-`#_S)On#E=S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..c0ca3d985 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "வீடு" + +msgid "Documentation" +msgstr "ஆவனமாக்கம்" + +msgid "Bookmarklets" +msgstr "புத்தகக்குறிகள்" + +msgid "Documentation bookmarklets" +msgstr "ஆவணமாக்கக் குறியீடுகள்" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "இந்த பக்கத்திற்கான ஆவணம்" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"எந்த ஒரு பக்கத்திலிருந்தும் ஆவணப்பக்கத்தை பார்வையிடுதல், அந்த பக்கத்தை உருவாக்குகிறது." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ஒட்டு:" + +msgid "filter:" +msgstr "வடிகட்டி:" + +msgid "view:" +msgstr "நோற்றமிடு:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "மாதிரி:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "அனைத்து %s " + +#, python-format +msgid "number of %s" +msgstr "எண்ணிக்கை %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s -ல் urlpattern தோன்றுவதில்லை" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb8652576bace9e82d59f69c5e2e94467afb4f24 GIT binary patch literal 1684 zcmb7^%Wo4$9LI-eTSE&9Bg3<_~utB15qIcB(3)LQb;l{CterIf#q!np9((Gq`zx};u?caKK zw+Pk&>?7FsvA@9HzXK1f26zJW!TsP8_$jyo9tJnSFTr2H-Qe%wUhpmW5%{hn{{b5R zT{{UWf(Joke-?DXac~bf2ex4Q11KQ(z~~gX03HR`K@a>D902>_bO@XUKL@XY2f3w5E`u;U_fWbwR#Wp&&d6Xg(n|KR_}@Lgk5o5!nnYBBrWl-o+x|T6pwI zz86(a2fQMJzNC=vZC5rec_{jlE1g0UqIsPW-4OJHjvm*1T3?Mexsf?v%ri0-E7PrW z-g7RAI6-%edNW+sRqmpQRIHuJr0#ppNVA?eWyNT2>btTt8VfrKXAFfh+V7UWaomzq z8lF6FkvQIp#7!+bU-C0+$jqn-D%`Lr==;80n=bVA}b|zO%#Ll>^ zD$kd7Mh7as{;Nt8BR3T^V;(r?R2(LZ%E*ezaQ_f(ABTG-JvK~BeM33(p=Rl`Y~vbm zGfUHK(PwJiO)txz^yD@ zH9E32jL~K3OB-VumJh6KQfKL7dxo#|dSVsrRHy=J7tPaTUO~|9UL!8ry3?(-1$lET z|GkFW@O)w;A?va&4|SM%ZI_;O)4i}Wd)1x}v>5W5?G(>NYJP-S3Y$kZ$zAlzpui+i zIdtY0So@L?0%KmXzRzIOmY-VfkM@%A`k_6n{p%0f=6tnj;xBAtX6^{RY-`4~Aou@G XwB--rZyyJOt#-d9d@s0<>x}#f9{-#N literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..b03f0b3fa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "నివాసము" + +msgid "Documentation" +msgstr "పత్రికీకరణ" + +msgid "Bookmarklets" +msgstr "నిర్దుష్ట గుర్తులు " + +msgid "Documentation bookmarklets" +msgstr "పత్రికీకరణ యొక్క నిర్దుష్ట గుర్తులు " + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ఈ పొరటుకు పత్రికీకరణ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "టాగ్:" + +msgid "filter:" +msgstr "వడపోత:" + +msgid "view:" +msgstr "దర్శనం:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "మొడల్:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "సంబంధించిన `%(app_label)s.%(data_type)s` అంశము" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "సంబంధించిన `%(app_label)s.%(object_name)s` వస్తువులు" + +#, python-format +msgid "all %s" +msgstr "ఆన్నీ %s" + +#, python-format +msgid "number of %s" +msgstr "%s సంఖ్య" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s యు ఆర్ యల్ నిర్మాణక్రమ అంశము లా లేదు " diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f906516fee4f75992623a651f14a3c30d772cd7d GIT binary patch literal 7731 zcmbVQYit}>6~2Xphg%+PN_iCMZHt>V^{k!rLArU6mL_VWri9k50unT{yW{o5yEEIF zSvv*^IY~>Sf+$go5YSf|RjNRObz;kI(rly({uCi*Z3!fhkU$6u;!%MFLP!CFDcH;A4e%_+gXNl|Zg===bQl9}H1`Y#PfbZpt zw;B1%fmdUg2fh=y2lzhVSn~WJ@Ix4X1$Y_o1d#K80DKqlJn$XBp8_uh{ycg9TOjAX z0i^y*->%e2;6~tkfIk7k6!j}0MAUD9_^)2a*M8s|K)P@@lwS_K7kEGL0B|#K9>{rr z0A2cQ`V+ugfp-BtAoVT+`Tlia9{4ZdHNYDX9L8rizG&BeApLL> z{4(&97=H_B!Jc0LZ@_pxf<*aYAXKT_fQ-W);FG{2ki7mANINgNQmN;GBfwq27>JOo ztB|Z3cn$D=;7;HW@F^huYylyvehH-ge*==2H-WPldsuW2p98sG0mk19+y&eS{337^ z_yX{Qz!f0#?Jq#;TZf0BPHh1G40t_o2KxU2oWr;VBc20ZgW{zA^FZ?U8j$n<1Z4dF z4P;)w2_(Opkc0@GIsgP^$^){#W|Q&PfaKv>AoJsQz@5N90~vqoqu>n4xp*Y8*FgG4 zd0vAC#IEabzcU%b1mTSN&Fdz7=wo`_h8uD}f)Bai#Twy7+tGp~rZ7Ql0Z0uHd2Pdo zG2(^rs!jNSPKondfw$n3y~r191|gH{Mtn0zL9x_?JWRf>1zwL2V@LjO#fR}Dcg#EH z*baQQ;=_xa7v#?5DRbuI$#@vZ9A$iXR@Mt2ccoJgj=<`;#?0n5;SxG&kI8WVxOm z2RcFKL1b4#^(o(roI_DT-RXp-z^#kTy;k&$bTO;E_tm%$+9upk*X@dwmz{CfLqw)0T&RhhTD=Nc&TE92 z0;wX0T-W;D|!tlK3=?RK4N*?flp zLs)`FnWS54R>}4xN$T~gYmAz*1D9)s8jRbWmAJG`ZDOq7i0X|fukP||j@r|x)%m(> z1fPU@#&78Hz^}op8AGF(@ARgDHk>DdY6$g6vhp4uOW5mhmvLnxC#h(m?39Ny))njj3r0E|b~f{p!S5{nFSxs|0?d9vXoH%Ec70 z87GfTFw5O64YU5F0SD_$wQwechZ(=@F!W2VWZO7n9Okv;r*P*O() zE8MXftw zXF+cs-8^cI-ePUKMURdaMz`EJifiB=JB+Nc!1h9T;|B$Oe@ z1Ha+~J1aHpHTjZX+ktsrrGegSjX8F$pvUZk?xfC5L{YskGBQ0qoyT#(3*B+&5amaV zu_;uO$sm5!h90w;$BPg7)e%47YFIs?F{8oTsndt~U*B z9Z&NTpKBj&A8tPyH5;_u+iIm}@|5w8MgG!Zi9(jyX}{(K;E|I-U`l|eOjFypWQmJ)`Vi2NDk z!mL_81@mWh`-%7r?aj*3{4~il-Ha)F82^r9v}8`KT_4H(Li?Bzi|6y^w@Um9=xoL> zV}Wx@R0I`~TT$&@KAge%ZrMK_`e#U3T@Wf@wEl4m+*dSrS%E?v9r{d?4m@l&# zGkr8~=uP*WYr-S>lXiURTu(rnDS{b@J`0_q7q8i7v0t#>7&OBSlUC|{L1M(O_>|e?P{Y`F zs6^^DpKWMeN3p;4gj+Q9T7p&%MWzTkduEz{i5Y9khSrO5EPlzOOa-=&(>r=X^VT#f z7>?ECUAAYLM)RWVHYhZ)lq%plyTBsD*F-g=v0}Px)d@|^NMXq|0xZ0UTwv{8`ZSxFty3j8`Tzun9%slsHbT=D~M2rW0&#T_o$6IJ{SjFuA+jOxGn zo9xYOxc&R0#oXyRPhl(L9w~9au_AM}>B?ae%TpAK|i?bJ6G) zlb@#9P|2nUYngxM?8YRWLk5uylZ0J=Oqp_F<_Db8+4Cc&w0I0W1wcx|M);MSjWB_3 zO0u?Mb_nshbF!c+mUD6-F%1D)c-r7Gfr;05wP6}7WT0}7QR@*z{j?~<0Eb)kQL{+YJx2=#-}DggW-kep?wA&mNWxTV~HPj$=~>yX+#J zGX=XF36(C?jfSbd4D+k{23?W^K~f^gd30#_0zbYjIoc;3B2zN7SvsBsy-$0RR+Fhi z-93|_%3ATu)X5Wuv6u%11SFngQc4s_Gp(ItG^HRHaEE0RVkM>1g6ZYPG=bzt%p9o8 z{AOT)d)ps%X6VoL9^sjqI9xpgs(BWjPx?gPPQfFG{AD0h^!!<1{;D80;(W+-?RV&* z9o<79=XGem(3I|<7C>9NdE&1K=~*z1E}9FIPd0S9Ujid$m%?cR^3Q_i, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 00:08+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Хуччатгузории рохбарият" + +msgid "Home" +msgstr "Асосӣ" + +msgid "Documentation" +msgstr "Хуҷҷатгузорӣ" + +msgid "Bookmarklets" +msgstr "Гузориш" + +msgid "Documentation bookmarklets" +msgstr "Хуҷҷатгузорӣ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Барои ба панели гузоришот ворид сохтани сурогаи сомонаи мазкур ба равзанаи " +"гузоришот ,бо пахши тугмаи чапи муш сурогаро дохил кунед.Акнун шумо аз " +"тамоми саҳифаҳои сомона ба ин суроға дастрасӣ пайдо кардед." + +msgid "Documentation for this page" +msgstr "Хуҷҷатгузорӣ барои саҳифаи мазкур" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Аз тамоми саҳифаҳо бв ҳуҷҷатгузории view, ки ин саҳифаро табдил медиҳад, " +"раҳнамоӣ месозад" + +msgid "Tags" +msgstr "Тегҳо" + +msgid "List of all the template tags and their functions." +msgstr "Руйхати хама template -ҳо ва функқияи онхо" + +msgid "Filters" +msgstr "Поло-ҳо (Filters)" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Полоҳо(Filters) - ин амалиётест ,ки барои тағйирдиҳии инъикоси шаблонҳо иҷро " +"мешавад" + +msgid "Models" +msgstr "Моделҳо" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Моделҳо - ин рӯйхати ҳамаи объектҳо ва майдонҳои ба онҳо алоқандӣ дар " +"система мавҷудбуда аст.Ҳар як модел руйхати майдонҳои худро дорад, ки дар " +"шаблонҳо ба сифати тағйирёбанда истифода бурда мешаванд." + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ҳар як саҳифаи сомона тавассути view сохта мешавад. View муайян месозад, ки " +"кадом шаблон барои сохтанисаҳифа истифода мешавад ва кадом кадом объектҳо " +"дар он дастрасанд." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Асбобҳо барои браузери шумо, барои дастрасии зуд ба қисми маъмурияти " +"сомона(Гузоришот)" + +msgid "Please install docutils" +msgstr "Хоҳиш менамоем, docutil-ро танзим(install) кунед" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Барои фаъолияти маъмурияти системаи ҳуҷҷатгузорӣ, бояд пакетҳои docutils -b Pythonтанзим карда шуда бошанд." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Хоҳишмандем аз маъмурият дархости танзими docutils -" +"ро кунед." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел: %(name)s" + +msgid "Fields" +msgstr "Майдонҳо" + +msgid "Field" +msgstr "Майдон" + +msgid "Type" +msgstr "Намуд" + +msgid "Description" +msgstr "Тавсиф" + +msgid "Methods with arguments" +msgstr "Усулҳо бо санадҳо" + +msgid "Method" +msgstr "Усул" + +msgid "Arguments" +msgstr "Санадҳо" + +msgid "Back to Model documentation" +msgstr "Ба қафо, ба қисми ҳуҷҷатгузории моделҳо" + +msgid "Model documentation" +msgstr "Ҳуҷҷатгузории моделҳо" + +msgid "Model groups" +msgstr "Гурӯҳы моделҳо" + +msgid "Templates" +msgstr "Нусхаҳо" + +#, python-format +msgid "Template: %(name)s" +msgstr "Нусхаи: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +msgid "(does not exist)" +msgstr "(вуҷуд надорад)" + +msgid "Back to Documentation" +msgstr "Ба қафо, ба қисми ҳуҷҷатгузорӣ" + +msgid "Template filters" +msgstr "Полоҳо(Filters)-и нусхаҳо" + +msgid "Template filter documentation" +msgstr "Нусхаи ҳуҷҷатгузории полоҳо" + +msgid "Built-in filters" +msgstr "Бо полоҳо(filters) сохташуда." + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Барои истифодаи ин поло(filter), %(code)s - ро дар нусхаи худ " +"бо истифода аз полоҳо (Filters) ҷой диҳед." + +msgid "Template tags" +msgstr "Теги шаблонов" + +msgid "Template tag documentation" +msgstr "Ҳуҷатгузории нусхаи тегҳо" + +msgid "Built-in tags" +msgstr "Тегҳои сохташуда" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Нусхаҳо:" + +msgid "Back to View documentation" +msgstr "Ба қафо ба қисми намоиш(View)" + +msgid "View documentation" +msgstr "Ҳуҷҷатгузории view" + +msgid "Jump to namespace" +msgstr "Гузариш ба майдони номҳо" + +msgid "Empty namespace" +msgstr "Майдони номҳои фарох" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "View дар майдони номҳо %(name)s" + +msgid "Views by empty namespace" +msgstr "View дар майдони номҳои фарох" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"View-функсия: %(full_name)s. Номи url-нусхаҳо: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "тег:" + +msgid "filter:" +msgstr "Поло(filter):" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Барномаи «%(app_label)r» ёфт нашуд" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Модели %(model_name)r дар барномаи %(app_label)r ёфт нашуд" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "Объектҳои вобаста `%(app_label)s.%(data_type)s` " + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "Объектҳои алоқаманд `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "ҳамаи %s" + +#, python-format +msgid "number of %s" +msgstr "миқдори %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ба объекти urlpattern монанд нест." diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23adcdd19bb7d8f88a46319485ff6d973beaa8df GIT binary patch literal 2167 zcmbW1U29xL7{^C#eOYVOT1Ab@R2oQ(XZNg%?VcEsCJi<=80y+PNoKRNyQe*8=5Wqz zlYoNNLaP+78ng`vwiKlzq}A%#Z{USq_yuGxy|mxJ|1-OrWQ#H2urt4TdFFZDGk@;e zwaU<*LVphZH}vPxKfDJ6+TY;I;2m%e_`?j2&{q+fC;z@Tn66*KLTF` z{{Zg?ci-1N-vd5`_2b}fa0sOH10d-c>8*W`>>dJ3;1o#u4d{a_Al<(KUWAY9;0IVw zV3Y2xfd|3wK=Su@umb)ClARY}^l9)V@EkY^z61UW;>Y$w2%>BVB!3TpWPc2N2J}J7 z-3<5`C_u_b3f90cK+5YKZ~@%=VArk&Da8+?Q!AkFM~4`D0-YM=nRJsMPoh)Xi%xM- zBYV_b9zpVRA8nu^-3+N zE4s}asgAi&D^7?UGA#)|w;1f{k^D?3mvAf$Z%QRoVGxX4lKvu_)pZ&1;gOg)uS6_I zQx|MQw^f~oilW9j#`#FpWHg#~?_{hhniyo9M5L6RgrSUy2--5%aDE5OsSTKF$2FO9 z-Jr8n(uF!-*s3)v4v%!R*mWXX=p{8{Ml=IP0d9M-E{vErD~TN4xW*{%fX$_vD&rli zdnb`cR3hN@Q$jU$;efc?Plgxb-)XA?^eCZRJy8pQ*bokulVIdo?rIL z6<&Tlc&#$#mwg|C-U)doB%K3tmA;%m=A#vki_Cb{RHzJL>onjqLMhbuxC|-vZ@?QY z--_I_7^;ST6L(azjrw?1DdK=vTO#BmEn||PR9aeEDjHH3Hso?~QOBijKz&5LyCu^q zjTUB)%^uwhyuY$O$ikY)i_^li8PaD;{EEhcX(5dY&B%+9aW3E z9;#-*57$Do;Ujdk3Ug6A6_Gcs(>M#bO58G=D39~*biyAm(6?msOE&M=&c`y+t76r_uc%m?R@48AcWhPZ+x+XrwI1CyLFb? z{A&NsRTnnAgPUL4Ja-d__LWjP;5Ck*8VUN==0CY{V+TH6>uW)Ae-47X-U9>+SG#U>-GlW@cmz03 zR$W366VxK5(0o3CV*{RGgZ>%FJEDMSHx?45m&E2s5O$G4=tVA27EBNkCJ_A!|BIbo inH~OBRDfQEQ7w21S1?lj$+!Puf8ep&(K>xD0s99ALqi+@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..f165ce219 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vichai Vongvorakul , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "หน้าหลัก" + +msgid "Documentation" +msgstr "เอกสารประกอบ" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "เอกสารสำหรับหน้านี้" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "ย้ายจากทุกหน้าไปที่วิวที่สร้างหน้านั้นขึ้นมา" + +msgid "Tags" +msgstr "Tags:" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filters" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ป้ายกำกับ:" + +msgid "filter:" +msgstr "ตัวกรอง:" + +msgid "view:" +msgstr "ดู:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "ไม่พบโมเดล %(model_name)r ในแอป %(app_label)r" + +msgid "model:" +msgstr "โมเดล:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "ความสัมพันธ์`%(app_label)s.%(data_type)s` อ็อบเจ็กต์" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ความสัมพันธ์`%(app_label)s.%(object_name)s` อ็อบเจ็กต์" + +#, python-format +msgid "all %s" +msgstr "ทั้งหมด %s " + +#, python-format +msgid "number of %s" +msgstr "จำนวนของ %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ดูเหมือนจะไม่ใช่ urlpattern อ็อบเจ็กต์" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8752e1ec5c8f11aa78ac7caa7edbe2d09d4ce26 GIT binary patch literal 6661 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, 2013 +# BouRock, 2015-2016,2019,2021 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-16 19:32+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Yönetimsel Belgeler" + +msgid "Home" +msgstr "Giriş" + +msgid "Documentation" +msgstr "Belgeler" + +msgid "Bookmarklets" +msgstr "Kod içeren yer işaretşeri" + +msgid "Documentation bookmarklets" +msgstr "Belge kod içeren yer işaretleri" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Kod içeren yer işaretlerini yüklemek için bağlantıyı yer imleri araç " +"çubuğuna sürükleyin ya da bağlantıya sağ tıklayın ve yer imlerinize ekleyin. " +"Artık sitedeki herhangi bir sayfadan kod içeren yer işaretini seçebilirsiniz." + +msgid "Documentation for this page" +msgstr "Bu sayfa için belgeler" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Sizi, bu sayfayı oluşturan görünüm için herhangi bir sayfadan belgelere " +"atlatır." + +msgid "Tags" +msgstr "Etiketler" + +msgid "List of all the template tags and their functions." +msgstr "Tüm şablon etiketlerinin ve işlevlerinin listesi." + +msgid "Filters" +msgstr "Süzgeçler" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Süzgeçler, çıktıyı değiştirmek için bir şablondaki değişkenlere " +"uygulanabilen eylemlerdir." + +msgid "Models" +msgstr "Modeller" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller, sistemdeki nesnelerin ve ilişkilendirilmiş alanlarının tümünün " +"tanımlarıdır. Her model, şablon değişkenleri olarak erişilebilen alanların " +"bir listesine sahiptir." + +msgid "Views" +msgstr "Görünümler" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ortak sitedeki her sayfa, bir görünüm tarafından oluşturulur. Görünüm, " +"sayfayı oluşturmak için hangi şablonun kullanılacağını ve bu şablon için " +"hangi nesnelerin kullanılabilir olacağını tanımlar." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Tarayıcınızın yönetici işlevselliğine hızlıca erişebilmesi için araçlar" + +msgid "Please install docutils" +msgstr "Lütfen docutils’i yükleyin" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Yönetici belge sistemi, Python’un docutils " +"kütüphanesini gerektirir." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Lütfen yöneticilerinizden docutils yüklemesini " +"isteyin." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Alanlar" + +msgid "Field" +msgstr "Alan" + +msgid "Type" +msgstr "Tür" + +msgid "Description" +msgstr "Açıklama" + +msgid "Methods with arguments" +msgstr "Bağımsız değişkenleri olan yöntemler" + +msgid "Method" +msgstr "Yöntem" + +msgid "Arguments" +msgstr "Bağımsız değişkenler" + +msgid "Back to Model documentation" +msgstr "Model belgelerine geri dön" + +msgid "Model documentation" +msgstr "Model belgeleri" + +msgid "Model groups" +msgstr "Model grupları" + +msgid "Templates" +msgstr "Şablonlar" + +#, python-format +msgid "Template: %(name)s" +msgstr "Şablon: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Şablon: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "%(name)s şablonu için arama yolu:" + +msgid "(does not exist)" +msgstr "(mevcut değil)" + +msgid "Back to Documentation" +msgstr "Belgelere Geri Dön" + +msgid "Template filters" +msgstr "Şablon süzgeçleri" + +msgid "Template filter documentation" +msgstr "Şablon süzgeci belgeleri" + +msgid "Built-in filters" +msgstr "Yerleşik süzgeçler" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Bu süzgeçleri kullanmak için, süzgeci kullanmadan önce şablonunuzun içine " +"%(code)s yerleştirin." + +msgid "Template tags" +msgstr "Şablon etiketleri" + +msgid "Template tag documentation" +msgstr "Şablon etiketi belgeleri" + +msgid "Built-in tags" +msgstr "Yerleşik etiketler" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Bu etiketleri kullanmak için, etiketi kullanmadan önce şablonunuzun içine " +"%(code)s yerleştirin." + +#, python-format +msgid "View: %(name)s" +msgstr "Görünüm: %(name)s" + +msgid "Context:" +msgstr "Bağlam:" + +msgid "Templates:" +msgstr "Şablonlar:" + +msgid "Back to View documentation" +msgstr "Görünüm belgelerine geri dön" + +msgid "View documentation" +msgstr "Belgeleri görüntüle" + +msgid "Jump to namespace" +msgstr "İsim alanına atla" + +msgid "Empty namespace" +msgstr "Boş isim alanı" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s isim alanına göre görünümler" + +msgid "Views by empty namespace" +msgstr "Boş isim alanına göre görünümler" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Görünüm işlevi: %(full_name)s. Adı: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiket:" + +msgid "filter:" +msgstr "süzgeç:" + +msgid "view:" +msgstr "görünüm:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r uygulaması bulunamadı" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r uygulamasında %(model_name)r modeli bulunamadı" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "İlgili `%(app_label)s.%(data_type)s` nesnesi" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ilgili `%(app_label)s.%(object_name)s` nesneleri" + +#, python-format +msgid "all %s" +msgstr "tüm %s" + +#, python-format +msgid "number of %s" +msgstr "%s sayısı" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s, bir urlpattern nesnesi olarak görünmüyor" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83b6d941f885d9f9ff260e16b0618cb6a569dc1a GIT binary patch literal 1869 zcma)+O>Y}T7{>=FPz>cw;vJzm5H(S|_8JgvHUy!zsc6)QsJL)U$M)FSc6Y|ij+^EJ zPEsI{RtSj-1vsHfP;nq32~CqG7rwwuedol11N{ITkoeEqX>7m}BR%``>^$$!j(>f8 z&lQ68802}#RmfA2gLmP9H4h#HKLH;Ce+Kt~zkttz7JLr;1Kb1dy_=A?!F}M%AOr6M zuYmW1-?aBvLFexWFbA%K&i;4M2XBM-f-l@d$YuC`5zJ%%6O^6?e{1tE(8YNY%8sL; z^YcFF3Y!Dp1)o6@F7Nl+{GiRt;DdPoH8=u(*WTX-hq3#=Y1cF z-YI@QbUwTE26y!Q13p&fBulhcP)sB!TdIJLG9fU#lRR|oeGS=Q`$m**v!STS*I^^7 zb?~e>WY+CxJr5|f|I?LSAm(#B zN9{~=(S8UY7n_T;c@2@^n3~ldahl(o8^nAIrA^qumZE}n$f{ZI@?}<=i*RITpn4tW zYZO^;cB`asXPeic0OMJ-0oA$&w618cBvPMS2z~2IgkDA-jpkyO{Nu)=MceRzL=n65 z&MDWEIXjQ$-%L9=la65(gK%3+X8|@H!&pXJX4AId8rzGAxoIz9IE{ep2C, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Өй" + +msgid "Documentation" +msgstr "Документация" + +msgid "Bookmarklets" +msgstr "Кыстыргычлар" + +msgid "Documentation bookmarklets" +msgstr "Документация кыстыргычлары" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Бу сәхифә өчен документация" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Теләсә нинди сәхифәдән сезне ул сәхифәне төзи торган view документациясенә " +"җибәрә." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "билге:" + +msgid "filter:" +msgstr "фильтр:" + +msgid "view:" +msgstr "күрсәтелеш:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(model_name)r моделе %(app_label)r кушымтасында табылмаган" + +msgid "model:" +msgstr "модель:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "бәйләнгән '%(app_label)s.%(data_type)s' объект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "бәйләнгән '%(app_label)s.%(object_name)s' объектлар" + +#, python-format +msgid "all %s" +msgstr "бөтен %s" + +#, python-format +msgid "number of %s" +msgstr "%s саны" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s urlpattern объектына ошамаган" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..509c1e99467510d4bef518b4e6c9ca50f01182ed GIT binary patch literal 618 zcmZ9J&u-H|5XP5(7vJCvXbvDHsy1HJqDGqrp_W7{N<>t-Tw#gV&Q|uWwYw(mt-uWq zT;R$(aHxb360cyt0MEkMK~(TbKaFQJ{&sff*RAWH3F;bh8`(i_ATy-ZOXMyhkUPjZ z^63g8UohT8wyzR$590(QmOHgxt*}JMzA?EJ8hR7uSJFakD+$KJROC+f$yCWa0h5A1 zDF~0zJusD)PV~|wN@pB~uay5gDhE6%Smc!zIh`6?I1ak(Qa6r9u=yObQ9!y4 kHXrNn^~Gk3\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

      To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

      \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "True яке False" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s типъем бусы" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..76e5f11bd42835f349ff0eee891f25930fcba70c GIT binary patch literal 8468 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, 2014 +# Andriy Sokolovskiy , 2015 +# Denis Podlesniy , 2016 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2016 +# Max V. Stotsky , 2014 +# Sergey Lysach , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-20 00:21+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Administrative Documentation" +msgstr "Адміністративна документація" + +msgid "Home" +msgstr "Домівка" + +msgid "Documentation" +msgstr "Документація" + +msgid "Bookmarklets" +msgstr "Інтерактивні закладки" + +msgid "Documentation bookmarklets" +msgstr "Інтерактивні закладки документації" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Щоб встановити bookmarklets, перетягніть посилання на вашу bookmarklets або " +"клацніть правою кнопкою миші по посиланню і додайте його в bookmarklets. " +"Тепер ви можете вибрати bookmarklets з будь-якої сторінки сайту." + +msgid "Documentation for this page" +msgstr "Документація для цієї сторінки" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Перекидає вас з будь-якої сторінки в документацію для відображення, що " +"сгенерувало цю сторінку." + +msgid "Tags" +msgstr "Теги" + +msgid "List of all the template tags and their functions." +msgstr "Список усіх тегів шаблонів та їх функцій." + +msgid "Filters" +msgstr "Фільтри" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Фільтри - це дії, які можуть бути виконані над змінними в шаблоні, щоб " +"змінити їх відображення." + +msgid "Models" +msgstr "Моделі" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Моделі - це описання всіх об'єктів системи та пов'язаних з ними полів.\n" +"Кожна модель має список полів що можуть бути доступні у вигляді змінних в " +"шаблонах." + +msgid "Views" +msgstr "Відображення" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Кожна сторінка для відкритого сайту створена за допомогою відображення." +"Відображення визначає, який шаблон використовується для генерації сторінки " +"та об'єкти, які доступні для цього шаблону." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Інструменти для вашого браузеру для швидкого доступу до адміністративних " +"функцій." + +msgid "Please install docutils" +msgstr "Будь ласка, встановіть docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "" +"Система адміністративної документації вимагає Python-бібліотеку docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Будь ласка, попросить вашого адміністратора встановити docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модель: %(name)s" + +msgid "Fields" +msgstr "Поля" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Опис" + +msgid "Methods with arguments" +msgstr "Методи з аргументами" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr "Назад до Документація моделі" + +msgid "Model documentation" +msgstr "Документація моделі" + +msgid "Model groups" +msgstr "Групи моделей" + +msgid "Templates" +msgstr "Шаблони" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Шлях для пошуку шаблону %(name)s:" + +msgid "(does not exist)" +msgstr "(не існує)" + +msgid "Back to Documentation" +msgstr "Назад до Документації" + +msgid "Template filters" +msgstr "Фільтри у шаблонах" + +msgid "Template filter documentation" +msgstr "Документація фільтрів у шаблонах" + +msgid "Built-in filters" +msgstr "Вбудовані фільтри" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Щоб використовувати ці фільтри, помістіть %(code)s в ваш шаблон " +"перед використанням фільтру." + +msgid "Template tags" +msgstr "Теги шаблонів" + +msgid "Template tag documentation" +msgstr "Документація по тегам шаблонів" + +msgid "Built-in tags" +msgstr "Вбудовані теги" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Щоб використовувати ці теги, помістіть %(code)s в ваш шаблон " +"перед використанням тегу." + +#, python-format +msgid "View: %(name)s" +msgstr "Відображення: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "Назад до Переглянути документацію" + +msgid "View documentation" +msgstr "Переглянути документацію" + +msgid "Jump to namespace" +msgstr "Перейти до іменованої зони" + +msgid "Empty namespace" +msgstr "Порожня іменована зона" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Відображення у просторі імен %(name)s" + +msgid "Views by empty namespace" +msgstr "Відображення у глобальному просторі імен " + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Функція відображення: %(full_name)s. Им'я: %(url_name)s.\n" + +msgid "tag:" +msgstr "тег:" + +msgid "filter:" +msgstr "відфільтрувати:" + +msgid "view:" +msgstr "переглянути:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Застосунок %(app_label)r не знайдено" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Модель %(model_name)r не знайдено в прикладній системі %(app_label)r" + +msgid "model:" +msgstr "модель:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "пов'язаний `%(app_label)s.%(data_type)s` об'єкт" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "пов'язані з `%(app_label)s.%(object_name)s` об'єкти" + +#, python-format +msgid "all %s" +msgstr "всі %s" + +#, python-format +msgid "number of %s" +msgstr "кількість з %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не є об'єктом urlpattern" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d945bd10e6d26fc0b6552479156371b757195376 GIT binary patch literal 1836 zcmaiz&u<(x6vqveQWnaO9zX(AJ)}lTXlH*ERFVlnsA(%&H6jXIuBms|yP0;zUU@uC zb3kINq*_oU1Z{5|I7Dm`ilQijHXM54FW@%LN*p*L0pefa>)9mTRE=uM^BIrdd*An- z$A26-aED>Miuo4i66WieC!WFsqYa(_zXV?de*q7JzkzRnzk_dr|9}U;Lr*jIDR>xs z7v$hU@DBJK_}%t;33Ty(1PkDO(E0xb7QuhPXThV-Fm?;EkAbJ09gJQB{{vl~2VvxN zj)L!iQ=qHmbMSlcYj7MaB8eA313nLa0lK`t!s7_|4LAlafrr39!C~-k(B*v$52TR| zgv^HP!_IKIJ6)&o3MSIe2HY7^&&Er5I&D|C)5u}IjOpUDftYGa#3Yp=-fRl4$tbD_ z;*{vH$&C?OlB!%0Rl`mzbv5GpYA8(1&Zue<32C?ql-#?b%D#qFS5TM~bU zunS4ljA>3KRM#pZF6XjMmx!4W$gfXm+h5SNK+IyB8)^tCG&d+BTe`S;Hlb=Fq=CW6 zaa!_74C$=Mx=Lh?0_m#7KAzJduZVC+GakYtX7wOM(LT#ueI}ErA~dPG+tVV1QjIS6 zd&c>J!Cr@YLhcWXG;}yoiyz$YbM`HJ35UR@$cvTuPkXMG?66et>MS{3y(p`9Rjy zhwzb&1ZUut1&@5Xq-zNc&KT453x(O)*}QS#g1We#ud1lfD`*Gdwr?TPg`wQU`H8a+ zOE2Y%xp5^8emSp`-hV&R`)Q}! z!Z&-f+v+ZE{Yu@IZBx3AkDcyqmM(9tkX=YS>AHKF?=ITSbc3b$V6kX#5H>c_)pXOD z*!lgw)7DD&Tj)PN7D7<^vu&k6!DwqG?a;pAdsZ!b8^X5j1UvSYeE=^cjqD(D7b&eG z2Fl5zZFCo%@&kt*k#xgZKE4K*D@?IzTUmKz+bFf&tHI8vKV&MdNslD%J}ujuefnsi zYs?lhee_17yNgJ?|2AqgIy-{hv#<-$>#%e+Ywv=)$F^nXaRlqTw|pS(C5%Hz*Py*d rPSYL9yuHzFJ@LZ3M&i%73+0vUZ0#mq*T{cDnEva(HwNo9%xC`tK, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "صفحۂ اول" + +msgid "Documentation" +msgstr "طریق استعمال" + +msgid "Bookmarklets" +msgstr "بک مارک لیٹس" + +msgid "Documentation bookmarklets" +msgstr "طریق استعمال کے بک مارک لیٹس" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "اس صفحے کا طریق استعمال" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"آپ کو لے جاتا ہے کسی بھی صفحے سے طریق استعمال کی طرف اس ویو کے لئے جو اس " +"صفحے کو بناتا ہے۔" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ٹیگ :" + +msgid "filter:" +msgstr "فلٹر:" + +msgid "view:" +msgstr "ویو:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "ماڈل %(model_name)r ایپ %(app_label)r میں نہیں ملا" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "متعلقہ `%(app_label)s.%(data_type)s`اوبجیکٹ" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "متعلقہ `%(app_label)s.%(object_name)s` اوبجیکٹس" + +#, python-format +msgid "all %s" +msgstr "تمام %s" + +#, python-format +msgid "number of %s" +msgstr "%sکی تعداد " + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s بطور urlpattern ظاہر نہیں ہو رہا۔" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..52b21594b451e1da6a56c30c0cee15a7780e4a8d GIT binary patch literal 1306 zcmaiy&yN&E6vqn$)aHk1Vo1P*x?pw#H9uI?-C9=&KQ>@?U_%<>4QgjWfK=&)P0u+(ejDuh?7O)MeHPx7B9r&RIZ0z5vLJX@}rIB7oyP=%^BYO zTppV_+-No$xF{~_WkWvSx;G<^PVwfn{Os7_23EA7d=PQ2tVb0tm;7sGEn2&v4R!KM zWCQg?I#g@McHLKaW0L}{7qM2Ey}q)tQVZnNboGr|+hz4pS#OYz zJ=B*?eKKmDYn|C>K(p3}PB|O!^F_ScM}o`@Ea65Rg%1&10U7l9u4{b)xOJJ|c$E;PYKP~<{e&6;6f8a(K{E}g8tMx~#@Z@k( zl|SR#sme#d=IPm(Nn9^C4dpjFV=+7g-mccyX!;f?2Mi_!mdsb>ZJ5f(ifpMFJhA+G jp)3zodC%}aZ^LeQc=>Bpt|8|Cj4V6f8?0H$5LL3*eXwDR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..6219618b8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Trang chủ" + +msgid "Documentation" +msgstr "Tài liệu" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Tài liệu cho trang này" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "Thẻ" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Bộ lọc" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Xem" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "Nhãn:" + +msgid "filter:" +msgstr "Lọc:" + +msgid "view:" +msgstr "Xem:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Mẫu %(model_name)r không tìm thấy trong ứng dụng %(app_label)r" + +msgid "model:" +msgstr "mẫu:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "liên quan tới đối tượng `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "Tất cả %s" + +#, python-format +msgid "number of %s" +msgstr "số của %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..497df3e5ef6cbb2b63be2ad3866620425e0df5bd GIT binary patch literal 6075 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, 2011 +# Lele Long , 2015 +# Liping Wang , 2016 +# mozillazg , 2016 +# Ronald White , 2014 +# Veoco , 2021 +# wolf ice , 2020 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-07 04:24+0000\n" +"Last-Translator: Veoco \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "管理文档" + +msgid "Home" +msgstr "首页" + +msgid "Documentation" +msgstr "文档" + +msgid "Bookmarklets" +msgstr "书签" + +msgid "Documentation bookmarklets" +msgstr "文档书签" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"为了安装书签,将链接拖到你的书签工具条,或者鼠标右击链接然后把它添加到你的书" +"签中。现在你可以从这个站点的任何页面选择书签。" + +msgid "Documentation for this page" +msgstr "关于本页面的文档" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "从任何页面跳转到生成该页面的 view 文档。" + +msgid "Tags" +msgstr "标签" + +msgid "List of all the template tags and their functions." +msgstr "列出所有模板标签及其功能。" + +msgid "Filters" +msgstr "过滤器" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "过滤器可以应用到模板中的变量上来动态的改变输出。" + +msgid "Models" +msgstr "模型" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"模型是系统中的所有的对象字段及其关联性的描述。每个模型都有其可以被模板变量访" +"问的字段列表" + +msgid "Views" +msgstr "视图" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"由视图生成在公共站点的每个页面。视图定义了哪些模板用于生成页面和哪些对象可用" +"于该模板。" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "工具为您的浏览器提供了快速访问和管理的功能。" + +msgid "Please install docutils" +msgstr "请安装 docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python’s docutils library." +msgstr "该管理文档系统需要 Python 的 docutils 库。" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "请询问你的管理员并安装 docutils 。" + +#, python-format +msgid "Model: %(name)s" +msgstr "模型: %(name)s" + +msgid "Fields" +msgstr "字段" + +msgid "Field" +msgstr "字段" + +msgid "Type" +msgstr "类型" + +msgid "Description" +msgstr "描述" + +msgid "Methods with arguments" +msgstr "方法和参数" + +msgid "Method" +msgstr "方法" + +msgid "Arguments" +msgstr "参数" + +msgid "Back to Model documentation" +msgstr "返回到模型文档" + +msgid "Model documentation" +msgstr "模型文档" + +msgid "Model groups" +msgstr "模型组" + +msgid "Templates" +msgstr "模板" + +#, python-format +msgid "Template: %(name)s" +msgstr "模板: %(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "模板:%(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "模板%(name)s的查找路径:" + +msgid "(does not exist)" +msgstr "(不存在)" + +msgid "Back to Documentation" +msgstr "回到文档" + +msgid "Template filters" +msgstr "模板过滤器" + +msgid "Template filter documentation" +msgstr "模板过滤器文档" + +msgid "Built-in filters" +msgstr "内置过滤器" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"要使用这些过滤器, 在你使用过滤器之前需要在模板中放置 %(code)s 。" + +msgid "Template tags" +msgstr "模板标签" + +msgid "Template tag documentation" +msgstr "模板标签文档" + +msgid "Built-in tags" +msgstr "内置标签" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"要使用这些标签, 在你使用标签之前需要在模板中放置 %(code)s 。" + +#, python-format +msgid "View: %(name)s" +msgstr "视图: %(name)s" + +msgid "Context:" +msgstr "内容:" + +msgid "Templates:" +msgstr "模板:" + +msgid "Back to View documentation" +msgstr "回到视图文档" + +msgid "View documentation" +msgstr "视图文档" + +msgid "Jump to namespace" +msgstr "跳转到命名空间" + +msgid "Empty namespace" +msgstr "空命名空间" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "按命名空间 %(name)s 排序视图" + +msgid "Views by empty namespace" +msgstr "按空命名空间排序视图" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"查看函数:%(full_name)s. 名字:%(url_name)s.\n" +"\n" + +msgid "tag:" +msgstr "标签:" + +msgid "filter:" +msgstr "过滤器:" + +msgid "view:" +msgstr "视图:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "应用 %(app_label)r 没有找到" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "在应用 %(app_label)r 里找不到模型 %(model_name)r" + +msgid "model:" +msgstr "模型:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "相关的 `%(app_label)s.%(data_type)s` 对象" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "相关的 `%(app_label)s.%(object_name)s` 对象" + +#, python-format +msgid "all %s" +msgstr "所有 %s" + +#, python-format +msgid "number of %s" +msgstr "%s 的数量" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s 似乎不是一个 urlpattern 对象" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..922dd0e8b1c25845bc6a749d076217f9c97d084f GIT binary patch literal 4725 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..b4060d4a7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,267 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# Jannis Leidel , 2011 +# mail6543210 , 2013 +# 619e61dbdb61c57213f62815aaf60e01, 2011 +# Tzu-ping Chung , 2016,2019 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:05+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "管理文件" + +msgid "Home" +msgstr "首頁" + +msgid "Documentation" +msgstr "文件" + +msgid "Bookmarklets" +msgstr "書籤" + +msgid "Documentation bookmarklets" +msgstr "文件 bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"要安裝 bookmarklet,把連結拖進你的書籤工具列,或右擊該連結後新增到你的書籤" +"裡。現在你可以從網站的任何頁面來選擇 bookmarklet。" + +msgid "Documentation for this page" +msgstr "本頁面的文件" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "讓你跳到用來產生該頁面之檢視的任何一頁文件。" + +msgid "Tags" +msgstr "標籤" + +msgid "List of all the template tags and their functions." +msgstr "列出所有模板標籤與其函數" + +msgid "Filters" +msgstr "過濾器" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "模型" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "視圖" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "方便使用管理功能的瀏覽器工具。" + +msgid "Please install docutils" +msgstr "請安裝 docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "管理文件系統需要 Python 的 docutils 函式庫。" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "請要求您的管理員安裝 docutils。" + +#, python-format +msgid "Model: %(name)s" +msgstr "模型:%(name)s" + +msgid "Fields" +msgstr "欄位" + +msgid "Field" +msgstr "欄位" + +msgid "Type" +msgstr "類別" + +msgid "Description" +msgstr "描述" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "方法" + +msgid "Arguments" +msgstr "參數" + +msgid "Back to Model documentation" +msgstr "回到模型文件" + +msgid "Model documentation" +msgstr "模型文件" + +msgid "Model groups" +msgstr "模型群組" + +msgid "Templates" +msgstr "模版" + +#, python-format +msgid "Template: %(name)s" +msgstr "模版:%(name)s" + +#, python-format +msgid "Template: %(name)s" +msgstr "模板:%(name)s" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template %(name)s:" +msgstr "搜尋模板 %(name)s 的路徑:" + +msgid "(does not exist)" +msgstr "(不存在)" + +msgid "Back to Documentation" +msgstr "回到文件" + +msgid "Template filters" +msgstr "模板過濾器" + +msgid "Template filter documentation" +msgstr "模板過濾器文件" + +msgid "Built-in filters" +msgstr "內建過濾器" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "模版標籤" + +msgid "Template tag documentation" +msgstr "模板標籤文件" + +msgid "Built-in tags" +msgstr "內建標籤" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "視圖:%(name)s" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "模版:" + +msgid "Back to View documentation" +msgstr "回到視圖文件" + +msgid "View documentation" +msgstr "視圖文件" + +msgid "Jump to namespace" +msgstr "跳至名稱空間" + +msgid "Empty namespace" +msgstr "空的名稱空間" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "名稱空間 %(name)s 之視圖" + +msgid "Views by empty namespace" +msgstr "空名稱空間之視圖" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"視圖函式:%(full_name)s,名稱:%(url_name)s\n" + +msgid "tag:" +msgstr "標籤:" + +msgid "filter:" +msgstr "過濾器:" + +msgid "view:" +msgstr "視圖:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "找不到 App %(app_label)r" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "未在%(app_label)r 找到模組 %(model_name)r " + +msgid "model:" +msgstr "模型:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "有關 `%(app_label)s.%(data_type)s` 的物件" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "有關 `%(app_label)s.%(object_name)s` 的物件" + +#, python-format +msgid "all %s" +msgstr "所有 %s" + +#, python-format +msgid "number of %s" +msgstr "%s 的数量" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s 似乎不是一個 urlpattern 物件" diff --git a/venv/Lib/site-packages/django/contrib/admindocs/middleware.py b/venv/Lib/site-packages/django/contrib/admindocs/middleware.py new file mode 100644 index 000000000..5c9f08d0c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/middleware.py @@ -0,0 +1,33 @@ +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.http import HttpResponse +from django.utils.deprecation import MiddlewareMixin + +from .utils import get_view_name + + +class XViewMiddleware(MiddlewareMixin): + """ + Add an X-View header to internal HEAD requests. + """ + + def process_view(self, request, view_func, view_args, view_kwargs): + """ + If the request method is HEAD and either the IP is internal or the + user is a logged-in staff member, return a response with an x-view + header indicating the view function. This is used to lookup the view + function for an arbitrary page. + """ + if not hasattr(request, "user"): + raise ImproperlyConfigured( + "The XView middleware requires authentication middleware to " + "be installed. Edit your MIDDLEWARE setting to insert " + "'django.contrib.auth.middleware.AuthenticationMiddleware'." + ) + if request.method == "HEAD" and ( + request.META.get("REMOTE_ADDR") in settings.INTERNAL_IPS + or (request.user.is_active and request.user.is_staff) + ): + response = HttpResponse() + response.headers["X-View"] = get_view_name(view_func) + return response diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html new file mode 100644 index 000000000..adff7ed92 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html @@ -0,0 +1,26 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate "Documentation bookmarklets" %}{% endblock %} + +{% block content %} + +

      {% blocktranslate trimmed %} +To install bookmarklets, drag the link to your bookmarks toolbar, or right-click +the link and add it to your bookmarks. Now you can select the bookmarklet +from any page in the site. +{% endblocktranslate %}

      + +
      +

      {% translate "Documentation for this page" %}

      +

      {% translate "Jumps you from any page to the documentation for the view that generates that page." %}

      +
      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html new file mode 100644 index 000000000..1be787363 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/index.html @@ -0,0 +1,34 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate 'Documentation' %}{% endblock %} + +{% block content %} + +

      {% translate 'Documentation' %}

      + +
      +

      {% translate 'Tags' %}

      +

      {% translate 'List of all the template tags and their functions.' %}

      + +

      {% translate 'Filters' %}

      +

      {% translate 'Filters are actions which can be applied to variables in a template to alter the output.' %}

      + +

      {% translate 'Models' %}

      +

      {% translate 'Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables' %}.

      + +

      {% translate 'Views' %}

      +

      {% translate 'Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.' %}

      + +

      {% translate 'Bookmarklets' %}

      +

      {% translate 'Tools for your browser to quickly access admin functionality.' %}

      +
      + +{% endblock %} + diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html new file mode 100644 index 000000000..0f1b63e1d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html @@ -0,0 +1,22 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate 'Please install docutils' %}{% endblock %} + +{% block content %} + +

      {% translate 'Documentation' %}

      + +
      +

      {% blocktranslate with "https://docutils.sourceforge.io/" as link %}The admin documentation system requires Python’s docutils library.{% endblocktranslate %}

      + +

      {% blocktranslate with "https://docutils.sourceforge.io/" as link %}Please ask your administrators to install docutils.{% endblocktranslate %}

      +
      + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html new file mode 100644 index 000000000..8bde21e3e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html @@ -0,0 +1,78 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block extrahead %} +{{ block.super }} + +{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{% blocktranslate %}Model: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block content %} +
      +

      {{ name }}

      +

      {{ summary }}

      + +{{ description }} + +

      {% translate 'Fields' %}

      +
      + + + + + + + + + +{% for field in fields|dictsort:"name" %} + + + + + +{% endfor %} + +
      {% translate 'Field' %}{% translate 'Type' %}{% translate 'Description' %}
      {{ field.name }}{{ field.data_type }}{{ field.verbose }}{% if field.help_text %} - {{ field.help_text|safe }}{% endif %}
      +
      + +{% if methods %} +

      {% translate 'Methods with arguments' %}

      +
      + + + + + + + + + +{% for method in methods|dictsort:"name" %} + + + + + +{% endfor %} + +
      {% translate 'Method' %}{% translate 'Arguments' %}{% translate 'Description' %}
      {{ method.name }}{{ method.arguments }}{{ method.verbose }}
      +
      +{% endif %} + +

      ‹ {% translate 'Back to Model documentation' %}

      +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html new file mode 100644 index 000000000..2342be4ba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html @@ -0,0 +1,52 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block coltype %}colSM{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{% translate 'Models' %}{% endblock %} + +{% block content %} + +

      {% translate 'Model documentation' %}

      + +{% regroup models by app_config as grouped_models %} + +
      +{% for group in grouped_models %} +
      +

      {{ group.grouper.verbose_name }} ({{ group.grouper.name }})

      + + +{% for model in group.list %} + + + +{% endfor %} +
      {{ model.object_name }}
      +
      +{% endfor %} + +
      +{% endblock %} + +{% block sidebar %} + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html new file mode 100644 index 000000000..3e2de222a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html @@ -0,0 +1,27 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{% blocktranslate %}Template: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block content %} +

      {% blocktranslate %}Template: {{ name }}{% endblocktranslate %}

      + +{# Translators: Search is not a verb here, it qualifies path (a search path) #} +

      {% blocktranslate %}Search path for template {{ name }}:{% endblocktranslate %}

      +
        +{% for template in templates|dictsort:"order" %} +
      1. {{ template.file }}{% if not template.exists %} {% translate '(does not exist)' %}{% endif %}
      2. +{% endfor %} +
      + +

      ‹ {% translate 'Back to Documentation' %}

      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html new file mode 100644 index 000000000..c66b7ed3d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html @@ -0,0 +1,54 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block coltype %}colSM{% endblock %} +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate 'Template filters' %}{% endblock %} + +{% block content %} + +

      {% translate 'Template filter documentation' %}

      + +
      +{% regroup filters|dictsort:"library" by library as filter_libraries %} +{% for library in filter_libraries %} +
      +

      {% firstof library.grouper _("Built-in filters") %}

      + {% if library.grouper %}

      {% blocktranslate with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these filters, put {{ code }} in your template before using the filter.{% endblocktranslate %}


      {% endif %} + {% for filter in library.list|dictsort:"name" %} +

      {{ filter.name }}

      + {{ filter.title }} + {{ filter.body }} + {% if not forloop.last %}
      {% endif %} + {% endfor %} +
      +{% endfor %} +
      + +{% endblock %} + +{% block sidebar %} + + + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html new file mode 100644 index 000000000..17b930e33 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html @@ -0,0 +1,54 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block coltype %}colSM{% endblock %} +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate 'Template tags' %}{% endblock %} + +{% block content %} + +

      {% translate 'Template tag documentation' %}

      + +
      +{% regroup tags|dictsort:"library" by library as tag_libraries %} +{% for library in tag_libraries %} +
      +

      {% firstof library.grouper _("Built-in tags") %}

      + {% if library.grouper %}

      {% blocktranslate with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these tags, put {{ code }} in your template before using the tag.{% endblocktranslate %}


      {% endif %} + {% for tag in library.list|dictsort:"name" %} +

      {{ tag.name }}

      +

      {{ tag.title|striptags }}

      + {{ tag.body }} + {% if not forloop.last %}
      {% endif %} + {% endfor %} +
      +{% endfor %} +
      + +{% endblock %} + +{% block sidebar %} + + + +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html new file mode 100644 index 000000000..945f7fb69 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html @@ -0,0 +1,33 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% blocktranslate %}View: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block content %} + +

      {{ name }}

      + +

      {{ summary|striptags }}

      + +{{ body }} + +{% if meta.Context %} +

      {% translate 'Context:' %}

      +

      {{ meta.Context }}

      +{% endif %} + +{% if meta.Templates %} +

      {% translate 'Templates:' %}

      +

      {{ meta.Templates }}

      +{% endif %} + +

      ‹ {% translate 'Back to View documentation' %}

      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html new file mode 100644 index 000000000..873303f2b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html @@ -0,0 +1,59 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block coltype %}colSM{% endblock %} +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% translate 'Views' %}{% endblock %} + +{% block content %} + +

      {% translate 'View documentation' %}

      + +{% regroup views|dictsort:'namespace' by namespace as views_by_ns %} + + + +
      + +{% for ns_views in views_by_ns %} +
      +

      +{% if ns_views.grouper %} + {% blocktranslate with ns_views.grouper as name %}Views by namespace {{ name }}{% endblocktranslate %} +{% else %} + {% blocktranslate %}Views by empty namespace{% endblocktranslate %} +{% endif %} +

      + +{% for view in ns_views.list|dictsort:"url" %} +{% ifchanged %} +

      {{ view.url }}

      +

      {% blocktranslate with view.full_name as full_name and view.url_name as url_name %} + View function: {{ full_name }}. Name: {{ url_name }}. +{% endblocktranslate %}

      +

      {{ view.title }}

      +
      +{% endifchanged %} +{% endfor %} +
      +{% endfor %} +
      +{% endblock %} diff --git a/venv/Lib/site-packages/django/contrib/admindocs/urls.py b/venv/Lib/site-packages/django/contrib/admindocs/urls.py new file mode 100644 index 000000000..6ee14ac67 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/urls.py @@ -0,0 +1,50 @@ +from django.contrib.admindocs import views +from django.urls import path, re_path + +urlpatterns = [ + path( + "", + views.BaseAdminDocsView.as_view(template_name="admin_doc/index.html"), + name="django-admindocs-docroot", + ), + path( + "bookmarklets/", + views.BookmarkletsView.as_view(), + name="django-admindocs-bookmarklets", + ), + path( + "tags/", + views.TemplateTagIndexView.as_view(), + name="django-admindocs-tags", + ), + path( + "filters/", + views.TemplateFilterIndexView.as_view(), + name="django-admindocs-filters", + ), + path( + "views/", + views.ViewIndexView.as_view(), + name="django-admindocs-views-index", + ), + path( + "views//", + views.ViewDetailView.as_view(), + name="django-admindocs-views-detail", + ), + path( + "models/", + views.ModelIndexView.as_view(), + name="django-admindocs-models-index", + ), + re_path( + r"^models/(?P[^\.]+)\.(?P[^/]+)/$", + views.ModelDetailView.as_view(), + name="django-admindocs-models-detail", + ), + path( + "templates//", + views.TemplateDetailView.as_view(), + name="django-admindocs-templates", + ), +] diff --git a/venv/Lib/site-packages/django/contrib/admindocs/utils.py b/venv/Lib/site-packages/django/contrib/admindocs/utils.py new file mode 100644 index 000000000..52bedea4d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/utils.py @@ -0,0 +1,247 @@ +"Misc. utility functions/classes for admin documentation generator." + +import re +from email.errors import HeaderParseError +from email.parser import HeaderParser +from inspect import cleandoc + +from django.urls import reverse +from django.utils.regex_helper import _lazy_re_compile +from django.utils.safestring import mark_safe + +try: + import docutils.core + import docutils.nodes + import docutils.parsers.rst.roles +except ImportError: + docutils_is_available = False +else: + docutils_is_available = True + + +def get_view_name(view_func): + if hasattr(view_func, "view_class"): + klass = view_func.view_class + return f"{klass.__module__}.{klass.__qualname__}" + mod_name = view_func.__module__ + view_name = getattr(view_func, "__qualname__", view_func.__class__.__name__) + return mod_name + "." + view_name + + +def parse_docstring(docstring): + """ + Parse out the parts of a docstring. Return (title, body, metadata). + """ + if not docstring: + return "", "", {} + docstring = cleandoc(docstring) + parts = re.split(r"\n{2,}", docstring) + title = parts[0] + if len(parts) == 1: + body = "" + metadata = {} + else: + parser = HeaderParser() + try: + metadata = parser.parsestr(parts[-1]) + except HeaderParseError: + metadata = {} + body = "\n\n".join(parts[1:]) + else: + metadata = dict(metadata.items()) + if metadata: + body = "\n\n".join(parts[1:-1]) + else: + body = "\n\n".join(parts[1:]) + return title, body, metadata + + +def parse_rst(text, default_reference_context, thing_being_parsed=None): + """ + Convert the string from reST to an XHTML fragment. + """ + overrides = { + "doctitle_xform": True, + "initial_header_level": 3, + "default_reference_context": default_reference_context, + "link_base": reverse("django-admindocs-docroot").rstrip("/"), + "raw_enabled": False, + "file_insertion_enabled": False, + } + thing_being_parsed = thing_being_parsed and "<%s>" % thing_being_parsed + # Wrap ``text`` in some reST that sets the default role to ``cmsreference``, + # then restores it. + source = """ +.. default-role:: cmsreference + +%s + +.. default-role:: +""" + parts = docutils.core.publish_parts( + source % text, + source_path=thing_being_parsed, + destination_path=None, + writer_name="html", + settings_overrides=overrides, + ) + return mark_safe(parts["fragment"]) + + +# +# reST roles +# +ROLES = { + "model": "%s/models/%s/", + "view": "%s/views/%s/", + "template": "%s/templates/%s/", + "filter": "%s/filters/#%s", + "tag": "%s/tags/#%s", +} + + +def create_reference_role(rolename, urlbase): + def _role(name, rawtext, text, lineno, inliner, options=None, content=None): + if options is None: + options = {} + node = docutils.nodes.reference( + rawtext, + text, + refuri=( + urlbase + % ( + inliner.document.settings.link_base, + text.lower(), + ) + ), + **options, + ) + return [node], [] + + docutils.parsers.rst.roles.register_canonical_role(rolename, _role) + + +def default_reference_role( + name, rawtext, text, lineno, inliner, options=None, content=None +): + if options is None: + options = {} + context = inliner.document.settings.default_reference_context + node = docutils.nodes.reference( + rawtext, + text, + refuri=( + ROLES[context] + % ( + inliner.document.settings.link_base, + text.lower(), + ) + ), + **options, + ) + return [node], [] + + +if docutils_is_available: + docutils.parsers.rst.roles.register_canonical_role( + "cmsreference", default_reference_role + ) + + for name, urlbase in ROLES.items(): + create_reference_role(name, urlbase) + +# Match the beginning of a named or unnamed group. +named_group_matcher = _lazy_re_compile(r"\(\?P(<\w+>)") +unnamed_group_matcher = _lazy_re_compile(r"\(") + + +def replace_named_groups(pattern): + r""" + Find named groups in `pattern` and replace them with the group name. E.g., + 1. ^(?P\w+)/b/(\w+)$ ==> ^/b/(\w+)$ + 2. ^(?P\w+)/b/(?P\w+)/$ ==> ^/b//$ + 3. ^(?P\w+)/b/(\w+) ==> ^/b/(\w+) + 4. ^(?P\w+)/b/(?P\w+) ==> ^/b/ + """ + named_group_indices = [ + (m.start(0), m.end(0), m[1]) for m in named_group_matcher.finditer(pattern) + ] + # Tuples of (named capture group pattern, group name). + group_pattern_and_name = [] + # Loop over the groups and their start and end indices. + for start, end, group_name in named_group_indices: + # Handle nested parentheses, e.g. '^(?P(x|y))/b'. + unmatched_open_brackets, prev_char = 1, None + for idx, val in enumerate(pattern[end:]): + # Check for unescaped `(` and `)`. They mark the start and end of a + # nested group. + if val == "(" and prev_char != "\\": + unmatched_open_brackets += 1 + elif val == ")" and prev_char != "\\": + unmatched_open_brackets -= 1 + prev_char = val + # If brackets are balanced, the end of the string for the current + # named capture group pattern has been reached. + if unmatched_open_brackets == 0: + group_pattern_and_name.append( + (pattern[start : end + idx + 1], group_name) + ) + break + + # Replace the string for named capture groups with their group names. + for group_pattern, group_name in group_pattern_and_name: + pattern = pattern.replace(group_pattern, group_name) + return pattern + + +def replace_unnamed_groups(pattern): + r""" + Find unnamed groups in `pattern` and replace them with ''. E.g., + 1. ^(?P\w+)/b/(\w+)$ ==> ^(?P\w+)/b/$ + 2. ^(?P\w+)/b/((x|y)\w+)$ ==> ^(?P\w+)/b/$ + 3. ^(?P\w+)/b/(\w+) ==> ^(?P\w+)/b/ + 4. ^(?P\w+)/b/((x|y)\w+) ==> ^(?P\w+)/b/ + """ + unnamed_group_indices = [ + m.start(0) for m in unnamed_group_matcher.finditer(pattern) + ] + # Indices of the start of unnamed capture groups. + group_indices = [] + # Loop over the start indices of the groups. + for start in unnamed_group_indices: + # Handle nested parentheses, e.g. '^b/((x|y)\w+)$'. + unmatched_open_brackets, prev_char = 1, None + for idx, val in enumerate(pattern[start + 1 :]): + # Check for unescaped `(` and `)`. They mark the start and end of + # a nested group. + if val == "(" and prev_char != "\\": + unmatched_open_brackets += 1 + elif val == ")" and prev_char != "\\": + unmatched_open_brackets -= 1 + prev_char = val + + if unmatched_open_brackets == 0: + group_indices.append((start, start + 2 + idx)) + break + # Remove unnamed group matches inside other unnamed capture groups. + group_start_end_indices = [] + prev_end = None + for start, end in group_indices: + if prev_end and start > prev_end or not prev_end: + group_start_end_indices.append((start, end)) + prev_end = end + + if group_start_end_indices: + # Replace unnamed groups with . Handle the fact that replacing the + # string between indices will change string length and thus indices + # will point to the wrong substring if not corrected. + final_pattern, prev_end = [], None + for start, end in group_start_end_indices: + if prev_end: + final_pattern.append(pattern[prev_end:start]) + final_pattern.append(pattern[:start] + "") + prev_end = end + final_pattern.append(pattern[prev_end:]) + return "".join(final_pattern) + else: + return pattern diff --git a/venv/Lib/site-packages/django/contrib/admindocs/views.py b/venv/Lib/site-packages/django/contrib/admindocs/views.py new file mode 100644 index 000000000..e3c53fc7e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admindocs/views.py @@ -0,0 +1,492 @@ +import inspect +from importlib import import_module +from inspect import cleandoc +from pathlib import Path + +from django.apps import apps +from django.contrib import admin +from django.contrib.admin.views.decorators import staff_member_required +from django.contrib.admindocs import utils +from django.contrib.admindocs.utils import replace_named_groups, replace_unnamed_groups +from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist +from django.db import models +from django.http import Http404 +from django.template.engine import Engine +from django.urls import get_mod_func, get_resolver, get_urlconf +from django.utils._os import safe_join +from django.utils.decorators import method_decorator +from django.utils.functional import cached_property +from django.utils.inspect import ( + func_accepts_kwargs, + func_accepts_var_args, + get_func_full_args, + method_has_no_args, +) +from django.utils.translation import gettext as _ +from django.views.generic import TemplateView + +from .utils import get_view_name + +# Exclude methods starting with these strings from documentation +MODEL_METHODS_EXCLUDE = ("_", "add_", "delete", "save", "set_") + + +class BaseAdminDocsView(TemplateView): + """ + Base view for admindocs views. + """ + + @method_decorator(staff_member_required) + def dispatch(self, request, *args, **kwargs): + if not utils.docutils_is_available: + # Display an error message for people without docutils + self.template_name = "admin_doc/missing_docutils.html" + return self.render_to_response(admin.site.each_context(request)) + return super().dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + return super().get_context_data( + **{ + **kwargs, + **admin.site.each_context(self.request), + } + ) + + +class BookmarkletsView(BaseAdminDocsView): + template_name = "admin_doc/bookmarklets.html" + + +class TemplateTagIndexView(BaseAdminDocsView): + template_name = "admin_doc/template_tag_index.html" + + def get_context_data(self, **kwargs): + tags = [] + try: + engine = Engine.get_default() + except ImproperlyConfigured: + # Non-trivial TEMPLATES settings aren't supported (#24125). + pass + else: + app_libs = sorted(engine.template_libraries.items()) + builtin_libs = [("", lib) for lib in engine.template_builtins] + for module_name, library in builtin_libs + app_libs: + for tag_name, tag_func in library.tags.items(): + title, body, metadata = utils.parse_docstring(tag_func.__doc__) + title = title and utils.parse_rst( + title, "tag", _("tag:") + tag_name + ) + body = body and utils.parse_rst(body, "tag", _("tag:") + tag_name) + for key in metadata: + metadata[key] = utils.parse_rst( + metadata[key], "tag", _("tag:") + tag_name + ) + tag_library = module_name.split(".")[-1] + tags.append( + { + "name": tag_name, + "title": title, + "body": body, + "meta": metadata, + "library": tag_library, + } + ) + return super().get_context_data(**{**kwargs, "tags": tags}) + + +class TemplateFilterIndexView(BaseAdminDocsView): + template_name = "admin_doc/template_filter_index.html" + + def get_context_data(self, **kwargs): + filters = [] + try: + engine = Engine.get_default() + except ImproperlyConfigured: + # Non-trivial TEMPLATES settings aren't supported (#24125). + pass + else: + app_libs = sorted(engine.template_libraries.items()) + builtin_libs = [("", lib) for lib in engine.template_builtins] + for module_name, library in builtin_libs + app_libs: + for filter_name, filter_func in library.filters.items(): + title, body, metadata = utils.parse_docstring(filter_func.__doc__) + title = title and utils.parse_rst( + title, "filter", _("filter:") + filter_name + ) + body = body and utils.parse_rst( + body, "filter", _("filter:") + filter_name + ) + for key in metadata: + metadata[key] = utils.parse_rst( + metadata[key], "filter", _("filter:") + filter_name + ) + tag_library = module_name.split(".")[-1] + filters.append( + { + "name": filter_name, + "title": title, + "body": body, + "meta": metadata, + "library": tag_library, + } + ) + return super().get_context_data(**{**kwargs, "filters": filters}) + + +class ViewIndexView(BaseAdminDocsView): + template_name = "admin_doc/view_index.html" + + def get_context_data(self, **kwargs): + views = [] + url_resolver = get_resolver(get_urlconf()) + try: + view_functions = extract_views_from_urlpatterns(url_resolver.url_patterns) + except ImproperlyConfigured: + view_functions = [] + for (func, regex, namespace, name) in view_functions: + views.append( + { + "full_name": get_view_name(func), + "url": simplify_regex(regex), + "url_name": ":".join((namespace or []) + (name and [name] or [])), + "namespace": ":".join(namespace or []), + "name": name, + } + ) + return super().get_context_data(**{**kwargs, "views": views}) + + +class ViewDetailView(BaseAdminDocsView): + template_name = "admin_doc/view_detail.html" + + @staticmethod + def _get_view_func(view): + urlconf = get_urlconf() + if get_resolver(urlconf)._is_callback(view): + mod, func = get_mod_func(view) + try: + # Separate the module and function, e.g. + # 'mymodule.views.myview' -> 'mymodule.views', 'myview'). + return getattr(import_module(mod), func) + except ImportError: + # Import may fail because view contains a class name, e.g. + # 'mymodule.views.ViewContainer.my_view', so mod takes the form + # 'mymodule.views.ViewContainer'. Parse it again to separate + # the module and class. + mod, klass = get_mod_func(mod) + return getattr(getattr(import_module(mod), klass), func) + + def get_context_data(self, **kwargs): + view = self.kwargs["view"] + view_func = self._get_view_func(view) + if view_func is None: + raise Http404 + title, body, metadata = utils.parse_docstring(view_func.__doc__) + title = title and utils.parse_rst(title, "view", _("view:") + view) + body = body and utils.parse_rst(body, "view", _("view:") + view) + for key in metadata: + metadata[key] = utils.parse_rst(metadata[key], "model", _("view:") + view) + return super().get_context_data( + **{ + **kwargs, + "name": view, + "summary": title, + "body": body, + "meta": metadata, + } + ) + + +class ModelIndexView(BaseAdminDocsView): + template_name = "admin_doc/model_index.html" + + def get_context_data(self, **kwargs): + m_list = [m._meta for m in apps.get_models()] + return super().get_context_data(**{**kwargs, "models": m_list}) + + +class ModelDetailView(BaseAdminDocsView): + template_name = "admin_doc/model_detail.html" + + def get_context_data(self, **kwargs): + model_name = self.kwargs["model_name"] + # Get the model class. + try: + app_config = apps.get_app_config(self.kwargs["app_label"]) + except LookupError: + raise Http404(_("App %(app_label)r not found") % self.kwargs) + try: + model = app_config.get_model(model_name) + except LookupError: + raise Http404( + _("Model %(model_name)r not found in app %(app_label)r") % self.kwargs + ) + + opts = model._meta + + title, body, metadata = utils.parse_docstring(model.__doc__) + title = title and utils.parse_rst(title, "model", _("model:") + model_name) + body = body and utils.parse_rst(body, "model", _("model:") + model_name) + + # Gather fields/field descriptions. + fields = [] + for field in opts.fields: + # ForeignKey is a special case since the field will actually be a + # descriptor that returns the other object + if isinstance(field, models.ForeignKey): + data_type = field.remote_field.model.__name__ + app_label = field.remote_field.model._meta.app_label + verbose = utils.parse_rst( + ( + _("the related `%(app_label)s.%(data_type)s` object") + % { + "app_label": app_label, + "data_type": data_type, + } + ), + "model", + _("model:") + data_type, + ) + else: + data_type = get_readable_field_data_type(field) + verbose = field.verbose_name + fields.append( + { + "name": field.name, + "data_type": data_type, + "verbose": verbose or "", + "help_text": field.help_text, + } + ) + + # Gather many-to-many fields. + for field in opts.many_to_many: + data_type = field.remote_field.model.__name__ + app_label = field.remote_field.model._meta.app_label + verbose = _("related `%(app_label)s.%(object_name)s` objects") % { + "app_label": app_label, + "object_name": data_type, + } + fields.append( + { + "name": "%s.all" % field.name, + "data_type": "List", + "verbose": utils.parse_rst( + _("all %s") % verbose, "model", _("model:") + opts.model_name + ), + } + ) + fields.append( + { + "name": "%s.count" % field.name, + "data_type": "Integer", + "verbose": utils.parse_rst( + _("number of %s") % verbose, + "model", + _("model:") + opts.model_name, + ), + } + ) + + methods = [] + # Gather model methods. + for func_name, func in model.__dict__.items(): + if inspect.isfunction(func) or isinstance( + func, (cached_property, property) + ): + try: + for exclude in MODEL_METHODS_EXCLUDE: + if func_name.startswith(exclude): + raise StopIteration + except StopIteration: + continue + verbose = func.__doc__ + verbose = verbose and ( + utils.parse_rst( + cleandoc(verbose), "model", _("model:") + opts.model_name + ) + ) + # Show properties, cached_properties, and methods without + # arguments as fields. Otherwise, show as a 'method with + # arguments'. + if isinstance(func, (cached_property, property)): + fields.append( + { + "name": func_name, + "data_type": get_return_data_type(func_name), + "verbose": verbose or "", + } + ) + elif ( + method_has_no_args(func) + and not func_accepts_kwargs(func) + and not func_accepts_var_args(func) + ): + fields.append( + { + "name": func_name, + "data_type": get_return_data_type(func_name), + "verbose": verbose or "", + } + ) + else: + arguments = get_func_full_args(func) + # Join arguments with ', ' and in case of default value, + # join it with '='. Use repr() so that strings will be + # correctly displayed. + print_arguments = ", ".join( + [ + "=".join([arg_el[0], *map(repr, arg_el[1:])]) + for arg_el in arguments + ] + ) + methods.append( + { + "name": func_name, + "arguments": print_arguments, + "verbose": verbose or "", + } + ) + + # Gather related objects + for rel in opts.related_objects: + verbose = _("related `%(app_label)s.%(object_name)s` objects") % { + "app_label": rel.related_model._meta.app_label, + "object_name": rel.related_model._meta.object_name, + } + accessor = rel.get_accessor_name() + fields.append( + { + "name": "%s.all" % accessor, + "data_type": "List", + "verbose": utils.parse_rst( + _("all %s") % verbose, "model", _("model:") + opts.model_name + ), + } + ) + fields.append( + { + "name": "%s.count" % accessor, + "data_type": "Integer", + "verbose": utils.parse_rst( + _("number of %s") % verbose, + "model", + _("model:") + opts.model_name, + ), + } + ) + return super().get_context_data( + **{ + **kwargs, + "name": opts.label, + "summary": title, + "description": body, + "fields": fields, + "methods": methods, + } + ) + + +class TemplateDetailView(BaseAdminDocsView): + template_name = "admin_doc/template_detail.html" + + def get_context_data(self, **kwargs): + template = self.kwargs["template"] + templates = [] + try: + default_engine = Engine.get_default() + except ImproperlyConfigured: + # Non-trivial TEMPLATES settings aren't supported (#24125). + pass + else: + # This doesn't account for template loaders (#24128). + for index, directory in enumerate(default_engine.dirs): + template_file = Path(safe_join(directory, template)) + if template_file.exists(): + template_contents = template_file.read_text() + else: + template_contents = "" + templates.append( + { + "file": template_file, + "exists": template_file.exists(), + "contents": template_contents, + "order": index, + } + ) + return super().get_context_data( + **{ + **kwargs, + "name": template, + "templates": templates, + } + ) + + +#################### +# Helper functions # +#################### + + +def get_return_data_type(func_name): + """Return a somewhat-helpful data type given a function name""" + if func_name.startswith("get_"): + if func_name.endswith("_list"): + return "List" + elif func_name.endswith("_count"): + return "Integer" + return "" + + +def get_readable_field_data_type(field): + """ + Return the description for a given field type, if it exists. Fields' + descriptions can contain format strings, which will be interpolated with + the values of field.__dict__ before being output. + """ + return field.description % field.__dict__ + + +def extract_views_from_urlpatterns(urlpatterns, base="", namespace=None): + """ + Return a list of views from a list of urlpatterns. + + Each object in the returned list is a two-tuple: (view_func, regex) + """ + views = [] + for p in urlpatterns: + if hasattr(p, "url_patterns"): + try: + patterns = p.url_patterns + except ImportError: + continue + views.extend( + extract_views_from_urlpatterns( + patterns, + base + str(p.pattern), + (namespace or []) + (p.namespace and [p.namespace] or []), + ) + ) + elif hasattr(p, "callback"): + try: + views.append((p.callback, base + str(p.pattern), namespace, p.name)) + except ViewDoesNotExist: + continue + else: + raise TypeError(_("%s does not appear to be a urlpattern object") % p) + return views + + +def simplify_regex(pattern): + r""" + Clean up urlpattern regexes into something more readable by humans. For + example, turn "^(?P\w+)/athletes/(?P\w+)/$" + into "//athletes//". + """ + pattern = replace_named_groups(pattern) + pattern = replace_unnamed_groups(pattern) + # clean up any outstanding regex-y characters. + pattern = pattern.replace("^", "").replace("$", "").replace("?", "") + if not pattern.startswith("/"): + pattern = "/" + pattern + return pattern diff --git a/venv/Lib/site-packages/django/contrib/auth/__init__.py b/venv/Lib/site-packages/django/contrib/auth/__init__.py new file mode 100644 index 000000000..155330c59 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/__init__.py @@ -0,0 +1,230 @@ +import inspect +import re + +from django.apps import apps as django_apps +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured, PermissionDenied +from django.middleware.csrf import rotate_token +from django.utils.crypto import constant_time_compare +from django.utils.module_loading import import_string +from django.views.decorators.debug import sensitive_variables + +from .signals import user_logged_in, user_logged_out, user_login_failed + +SESSION_KEY = "_auth_user_id" +BACKEND_SESSION_KEY = "_auth_user_backend" +HASH_SESSION_KEY = "_auth_user_hash" +REDIRECT_FIELD_NAME = "next" + + +def load_backend(path): + return import_string(path)() + + +def _get_backends(return_tuples=False): + backends = [] + for backend_path in settings.AUTHENTICATION_BACKENDS: + backend = load_backend(backend_path) + backends.append((backend, backend_path) if return_tuples else backend) + if not backends: + raise ImproperlyConfigured( + "No authentication backends have been defined. Does " + "AUTHENTICATION_BACKENDS contain anything?" + ) + return backends + + +def get_backends(): + return _get_backends(return_tuples=False) + + +@sensitive_variables("credentials") +def _clean_credentials(credentials): + """ + Clean a dictionary of credentials of potentially sensitive info before + sending to less secure functions. + + Not comprehensive - intended for user_login_failed signal + """ + SENSITIVE_CREDENTIALS = re.compile("api|token|key|secret|password|signature", re.I) + CLEANSED_SUBSTITUTE = "********************" + for key in credentials: + if SENSITIVE_CREDENTIALS.search(key): + credentials[key] = CLEANSED_SUBSTITUTE + return credentials + + +def _get_user_session_key(request): + # This value in the session is always serialized to a string, so we need + # to convert it back to Python whenever we access it. + return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY]) + + +@sensitive_variables("credentials") +def authenticate(request=None, **credentials): + """ + If the given credentials are valid, return a User object. + """ + for backend, backend_path in _get_backends(return_tuples=True): + backend_signature = inspect.signature(backend.authenticate) + try: + backend_signature.bind(request, **credentials) + except TypeError: + # This backend doesn't accept these credentials as arguments. Try + # the next one. + continue + try: + user = backend.authenticate(request, **credentials) + except PermissionDenied: + # This backend says to stop in our tracks - this user should not be + # allowed in at all. + break + if user is None: + continue + # Annotate the user object with the path of the backend. + user.backend = backend_path + return user + + # The credentials supplied are invalid to all backends, fire signal + user_login_failed.send( + sender=__name__, credentials=_clean_credentials(credentials), request=request + ) + + +def login(request, user, backend=None): + """ + Persist a user id and a backend in the request. This way a user doesn't + have to reauthenticate on every request. Note that data set during + the anonymous session is retained when the user logs in. + """ + session_auth_hash = "" + if user is None: + user = request.user + if hasattr(user, "get_session_auth_hash"): + session_auth_hash = user.get_session_auth_hash() + + if SESSION_KEY in request.session: + if _get_user_session_key(request) != user.pk or ( + session_auth_hash + and not constant_time_compare( + request.session.get(HASH_SESSION_KEY, ""), session_auth_hash + ) + ): + # To avoid reusing another user's session, create a new, empty + # session if the existing session corresponds to a different + # authenticated user. + request.session.flush() + else: + request.session.cycle_key() + + try: + backend = backend or user.backend + except AttributeError: + backends = _get_backends(return_tuples=True) + if len(backends) == 1: + _, backend = backends[0] + else: + raise ValueError( + "You have multiple authentication backends configured and " + "therefore must provide the `backend` argument or set the " + "`backend` attribute on the user." + ) + else: + if not isinstance(backend, str): + raise TypeError( + "backend must be a dotted import path string (got %r)." % backend + ) + + request.session[SESSION_KEY] = user._meta.pk.value_to_string(user) + request.session[BACKEND_SESSION_KEY] = backend + request.session[HASH_SESSION_KEY] = session_auth_hash + if hasattr(request, "user"): + request.user = user + rotate_token(request) + user_logged_in.send(sender=user.__class__, request=request, user=user) + + +def logout(request): + """ + Remove the authenticated user's ID from the request and flush their session + data. + """ + # Dispatch the signal before the user is logged out so the receivers have a + # chance to find out *who* logged out. + user = getattr(request, "user", None) + if not getattr(user, "is_authenticated", True): + user = None + user_logged_out.send(sender=user.__class__, request=request, user=user) + request.session.flush() + if hasattr(request, "user"): + from django.contrib.auth.models import AnonymousUser + + request.user = AnonymousUser() + + +def get_user_model(): + """ + Return the User model that is active in this project. + """ + try: + return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False) + except ValueError: + raise ImproperlyConfigured( + "AUTH_USER_MODEL must be of the form 'app_label.model_name'" + ) + except LookupError: + raise ImproperlyConfigured( + "AUTH_USER_MODEL refers to model '%s' that has not been installed" + % settings.AUTH_USER_MODEL + ) + + +def get_user(request): + """ + Return the user model instance associated with the given request session. + If no user is retrieved, return an instance of `AnonymousUser`. + """ + from .models import AnonymousUser + + user = None + try: + user_id = _get_user_session_key(request) + backend_path = request.session[BACKEND_SESSION_KEY] + except KeyError: + pass + else: + if backend_path in settings.AUTHENTICATION_BACKENDS: + backend = load_backend(backend_path) + user = backend.get_user(user_id) + # Verify the session + if hasattr(user, "get_session_auth_hash"): + session_hash = request.session.get(HASH_SESSION_KEY) + session_hash_verified = session_hash and constant_time_compare( + session_hash, user.get_session_auth_hash() + ) + if not session_hash_verified: + request.session.flush() + user = None + + return user or AnonymousUser() + + +def get_permission_codename(action, opts): + """ + Return the codename of the permission for the specified action. + """ + return "%s_%s" % (action, opts.model_name) + + +def update_session_auth_hash(request, user): + """ + Updating a user's password logs out all sessions for the user. + + Take the current request and the updated user object from which the new + session hash will be derived and update the session hash appropriately to + prevent a password change from logging out the session from which the + password was changed. + """ + request.session.cycle_key() + if hasattr(user, "get_session_auth_hash") and request.user == user: + request.session[HASH_SESSION_KEY] = user.get_session_auth_hash() diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21a1e01514071f3142fbd25af21be547434994f2 GIT binary patch literal 6237 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/admin.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bde3905afed343ddbf267317142c7ffca1b9cb3e GIT binary patch literal 6708 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

      <3p*ypOJnLW)dPIc9&n0uY|Uwx0o! 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/checks.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/checks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad57791298133156a1cbbe4315086aced5ae8ddb GIT binary patch literal 4781 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/forms.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/forms.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e832dfdf4012f24b9ebdc5d025782683acd2327 GIT binary patch literal 14646 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/hashers.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/hashers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1192e401add088d4a2e00b5baf181aaf945c128f GIT binary patch literal 25488 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 NYEUAOk#87wyenWVbO3w-t8nO@A=fR<8w0 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/signals.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/signals.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0679e1746065917cbde81b41748a81e4b7ac08f GIT binary patch literal 314 zcmYk0!Ait15QdXh%d)sGzJj+Nc6%2QK~WDP;^HL)OPa)N)-)-Zq~O`7@s$=ldGh4l zlWAqaf%%4inE7YiY&JzHzMnptKGn}b{EsY&^OSI$AdtWYwU}UxBz{9A8<~&X6WI!t z`B$1lCEgY*tt>Nl*P>~gQihltJ^I6pZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/tokens.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/tokens.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff546bfe54f891d37ad37a59de66f6478e79fd6c GIT binary patch literal 3943 zcmai1&2JmW6`z^iC08UR%d)M=PFrl-BsL3~MiW$rplDOrvQxBC1W9R-1<}QFXGAWw zAMDIfstD?&^w#_ZMFHvPKcbiZ2fZ%PQ%^qiZnQ|>o8^~eM

      IJ3I5{eg59te0jM> z;P>y}|FiSA6+-@n4~stw9zKDlcA?{h(}bkNClu!_p(*p3nOljK+P@(s zYU=tfB`*kfc;#!tE9cB#5=-aAukq?WX}Yg~DrwTf<)IcjP6f`D&^pe#s>zCbQJyIs zW;(!^L6oP1P>Q0i!bA%m^wKbbUCW(NiI27dod>c$ zaq3%~`8KzF2U>;O-1(aLRbJs$7+vo2B^Z}PO}HQc^Xt6E>#)+`4ZaNHGGF1hU|iv= z{5FiY_!_?h<0`+)@44zhd5`@o9k+iQciJk};_)Dij>4``?NX#C6Oo>vNKYmr4NeO;0I!I35Ue4$ z$o487y?2AGt?7X`WJbA-%ng_rnH^30Y@fWOJ58&o21-OyXo)W7*Y>xc?rk3gzuEpu z)?vX&Ty_v?q^Jj7p(iKq!Gd9}K}Qd7WNm&XLQ$qaoX;$RAw8biLZX41RNlscNn{;t zQ!+%!H*4cx70s{XdrGXWn3`3Pg;;)?qRx7ly41VC{lkl1q9Cs%z3wY+Msv ze^2P4%)GF4Z1Cw&dr_Eq9Z^O>o<#yff#g}HK^cjt5Fmz*Z7d$3Q*GKwbqz6G7 z9tpq)h@9XAoYFuGfJ{0l8bLNpQT{yRs<4ABKbdOGMncz3Seujj{#0G-&gg@iEI2FIq6P)x~J0L=U3 zgp4YhjjeNf=FE2df$nW^4(F1M**Q~NcoNneXce@{*x4Yu+INp^`3&C~+_Fcz zGyOg-kq1q4-3Al0#mb9vDG|HS7@_wzQ#^l7A0ITA3P%l+SQoY5g~?ECO9=;27t+QK z<3ghE$akh#Mi;EKimHNi-TsxxVA*UEgWOsqM}vM`Dm-4 zLBX`TZoRs}(9#p$gH!59(7Cov8C#^lfMkr{CCU5lFOP`9E3r$r)s)u{E|2**Ze3y#u~^ z2PjF5_g5JGBj1Y z=y3_tu89r#10d$t&0z(ZBkNvMr?J&9VUt38xfY`~twDqTe{9F4_Unc_+PWz+zB@3l zXcD!Ek{M0z!DLMP;QvD+tDI$3eCktfamwv)AX>&0vF6MM&!=OXvvX_kfU`3P_St{I zvkvqYGzJake|12&PWX4w=gj3l1(lfuiy-h&c>@`zp*;0KwVR$u!#MFC#fM&a470G4 zh~}or(JD_3Zb=VRsKtyN!WvLfLutSa6Lc4{`k@vWELUL-(QY7fJ_O*q0*kSl(Tg)M zXN)Bj_fC2MdNGm*UirtfJwI)E2MZN~cNmKVcE?EqrG&YEILHxsuU-F0Ac}%;P+!c5 z0g|c^WSi~9i0|b}WSbrz8lh&d(DlGunsX5Tuw*3(l@5};8)u8m4An49l2e2DgHohp z0jgHLTxwW1T3Te}I>+;So`W^uX5bt+gC1+jO%Jk_sV-Y@hY=6u)rN=JEpz=U;{^s> zTD95xy7l9stXRuRG=EH6ev^1+zA2q>_hB)}oq)zi92{jBHoskN)7U@8v^-7AO z%x)#JZlWt3#~kZHFlL#=y;x-rAx%PUEb}x5tIt)iQxJ(o3lz!qG>#-F0&^Px<0#G! z^Jc}b&CO6$r5Ge(B>cNrWf;E>jGqJ9S*72jqs`s#E}2``G3|{KWCpsJ7yxvsrT`5L zfndXwA?J|fn$}MI55UYti%;5EQi_ zNC9aQoHv5t4-f^DH`O5Ec@zZl$3WcV8&gioTlk1|wY&=*IEBmyLh92pv)soQKg7=D zakTM5GN0F;W`>5BC^0sL*~TT1I~>d)E^{r{s#!2r-FMv;_d&xldv}_3qY?NVn|;p@v|n8b-J`0sFW7!DKsl*CeT^7RGf d$y*pN+@F`4`vp3X!Wz3l8f=xW(iN-L{U4CQ5_A9n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/urls.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bf3e430ad32b2e890905a6f9e3b33028c8c2b1a GIT binary patch literal 947 zcmZY6&u-H&90%|?f7-N3yRBU}c!VC-T+j|vRUvf(4ilP&;1ETWq&983B(7|y6L|;T zfgQQ=Je4?cf(v&f1V1}rTSKHKKY#qQ<9tgyowf$o&$nNrTT|1%$-%?Rg~3z!@h@=0 z8b*nhA|D}H>xrHkzJWAiV1uBQ`N_J~u!*gY21o;>p`=-f4boK7s-z8KD{(4uL0U>W zm2^ScO7<$*2XT}fRMG=+mGq@7Y`=pKUuna^cQ~~+L|bbUlN%0&xemp$Xe4wIXWrIQ zPsv%BlA;MinhVdD^H3D~>yYys%J6Ky46_CC{JokKgBp04X3%$7B(f zZ3>F}Wo1LTS%0^y-0QgP80RsLPM=J?v7px^n|S_Ft$R+h_c2Qg=i!#e|23uSgb4C- z*!BB(1s_XCuu!l#8il!7G97~SooXg$31^0s)`d*+4W#QgLq3x+`)x2tPhsz}N^q(I zRCcs$=a7u@gMWS{!%;NYp}WpUJ3K8vP%U^|n<>9aO*wFC`1b{28UL)Y1{`1Ae!ZKX z1+O__Jh;j^4})_$&r^~K9z2i5i#!UR#f*!SOGZ~@E`kloHo-+41w0nyWF5}0!v*0% z8I4zk=E=}JnbTrmG# G`^R5c>MFzl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/validators.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/validators.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09a14316bc9da6f776910f690cd508779e4a05e8 GIT binary patch literal 1078 zcmbVLL2uJA6tvj4=sSXk#2qSmefDn&LRacE-Bv_%odN zKan_b;>3Lyu+uUoHV$CP&(H5Y>%H%N&(-Q`ADH$1;LGGQ0^qB?Twb2JjLcSv5fo6! z0k$XNutXR^t2^8&UF^2H%e}ILyAUvU8&HpSJ_6cdXy%_eXAt*VYnS@Q>R(v<6z+jR z@0-a0#sk>&j|nd*(Unx@wnkZ238iJ7>0-i}F$Fo(nw{vBlhb)-pIu%C#-il=MqvO$ z3NWG&JItlX6ydSXtc!i>n51rV_sQPo&d$DKQjn6p{+0PWICztMh(;U3w;KsQ&9{VR zG9+PJT39c`qwv+VP}W$puq5-)RH{iK!bg$Nps;wavT zhjAKaQzA)bL!$AZ*Z65_OG(qFpQdF+Yi{)*P2bmqFFl@QIXh`!+H^~%6vx#xnhNd zEZ3~K==(yuWo@^Ou=|hB_-^YNtjJa4#4C#yM_DDAw3Ce2mzG)=Tt$~YgLJOCwIo7u wqKisM*SOol@QqzNEf=%hQqg9;uF%GRv>3X_7O=8Vd=Q`j1`s)SAnL8dpXAdQjQ{`u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/__pycache__/views.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7890965675c6d540f2893b0b37c199b8f4abca5a GIT binary patch literal 12424 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/admin.py b/venv/Lib/site-packages/django/contrib/auth/admin.py new file mode 100644 index 000000000..636e620eb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/admin.py @@ -0,0 +1,230 @@ +from django.conf import settings +from django.contrib import admin, messages +from django.contrib.admin.options import IS_POPUP_VAR +from django.contrib.admin.utils import unquote +from django.contrib.auth import update_session_auth_hash +from django.contrib.auth.forms import ( + AdminPasswordChangeForm, + UserChangeForm, + UserCreationForm, +) +from django.contrib.auth.models import Group, User +from django.core.exceptions import PermissionDenied +from django.db import router, transaction +from django.http import Http404, HttpResponseRedirect +from django.template.response import TemplateResponse +from django.urls import path, reverse +from django.utils.decorators import method_decorator +from django.utils.html import escape +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ +from django.views.decorators.csrf import csrf_protect +from django.views.decorators.debug import sensitive_post_parameters + +csrf_protect_m = method_decorator(csrf_protect) +sensitive_post_parameters_m = method_decorator(sensitive_post_parameters()) + + +@admin.register(Group) +class GroupAdmin(admin.ModelAdmin): + search_fields = ("name",) + ordering = ("name",) + filter_horizontal = ("permissions",) + + def formfield_for_manytomany(self, db_field, request=None, **kwargs): + if db_field.name == "permissions": + qs = kwargs.get("queryset", db_field.remote_field.model.objects) + # Avoid a major performance hit resolving permission names which + # triggers a content_type load: + kwargs["queryset"] = qs.select_related("content_type") + return super().formfield_for_manytomany(db_field, request=request, **kwargs) + + +@admin.register(User) +class UserAdmin(admin.ModelAdmin): + add_form_template = "admin/auth/user/add_form.html" + change_user_password_template = None + fieldsets = ( + (None, {"fields": ("username", "password")}), + (_("Personal info"), {"fields": ("first_name", "last_name", "email")}), + ( + _("Permissions"), + { + "fields": ( + "is_active", + "is_staff", + "is_superuser", + "groups", + "user_permissions", + ), + }, + ), + (_("Important dates"), {"fields": ("last_login", "date_joined")}), + ) + add_fieldsets = ( + ( + None, + { + "classes": ("wide",), + "fields": ("username", "password1", "password2"), + }, + ), + ) + form = UserChangeForm + add_form = UserCreationForm + change_password_form = AdminPasswordChangeForm + list_display = ("username", "email", "first_name", "last_name", "is_staff") + list_filter = ("is_staff", "is_superuser", "is_active", "groups") + search_fields = ("username", "first_name", "last_name", "email") + ordering = ("username",) + filter_horizontal = ( + "groups", + "user_permissions", + ) + + def get_fieldsets(self, request, obj=None): + if not obj: + return self.add_fieldsets + return super().get_fieldsets(request, obj) + + def get_form(self, request, obj=None, **kwargs): + """ + Use special form during user creation + """ + defaults = {} + if obj is None: + defaults["form"] = self.add_form + defaults.update(kwargs) + return super().get_form(request, obj, **defaults) + + def get_urls(self): + return [ + path( + "/password/", + self.admin_site.admin_view(self.user_change_password), + name="auth_user_password_change", + ), + ] + super().get_urls() + + def lookup_allowed(self, lookup, value): + # Don't allow lookups involving passwords. + return not lookup.startswith("password") and super().lookup_allowed( + lookup, value + ) + + @sensitive_post_parameters_m + @csrf_protect_m + def add_view(self, request, form_url="", extra_context=None): + with transaction.atomic(using=router.db_for_write(self.model)): + return self._add_view(request, form_url, extra_context) + + def _add_view(self, request, form_url="", extra_context=None): + # It's an error for a user to have add permission but NOT change + # permission for users. If we allowed such users to add users, they + # could create superusers, which would mean they would essentially have + # the permission to change users. To avoid the problem entirely, we + # disallow users from adding users if they don't have change + # permission. + if not self.has_change_permission(request): + if self.has_add_permission(request) and settings.DEBUG: + # Raise Http404 in debug mode so that the user gets a helpful + # error message. + raise Http404( + 'Your user does not have the "Change user" permission. In ' + "order to add users, Django requires that your user " + 'account have both the "Add user" and "Change user" ' + "permissions set." + ) + raise PermissionDenied + if extra_context is None: + extra_context = {} + username_field = self.model._meta.get_field(self.model.USERNAME_FIELD) + defaults = { + "auto_populated_fields": (), + "username_help_text": username_field.help_text, + } + extra_context.update(defaults) + return super().add_view(request, form_url, extra_context) + + @sensitive_post_parameters_m + def user_change_password(self, request, id, form_url=""): + user = self.get_object(request, unquote(id)) + if not self.has_change_permission(request, user): + raise PermissionDenied + if user is None: + raise Http404( + _("%(name)s object with primary key %(key)r does not exist.") + % { + "name": self.model._meta.verbose_name, + "key": escape(id), + } + ) + if request.method == "POST": + form = self.change_password_form(user, request.POST) + if form.is_valid(): + form.save() + change_message = self.construct_change_message(request, form, None) + self.log_change(request, user, change_message) + msg = gettext("Password changed successfully.") + messages.success(request, msg) + update_session_auth_hash(request, form.user) + return HttpResponseRedirect( + reverse( + "%s:%s_%s_change" + % ( + self.admin_site.name, + user._meta.app_label, + user._meta.model_name, + ), + args=(user.pk,), + ) + ) + else: + form = self.change_password_form(user) + + fieldsets = [(None, {"fields": list(form.base_fields)})] + adminForm = admin.helpers.AdminForm(form, fieldsets, {}) + + context = { + "title": _("Change password: %s") % escape(user.get_username()), + "adminForm": adminForm, + "form_url": form_url, + "form": form, + "is_popup": (IS_POPUP_VAR in request.POST or IS_POPUP_VAR in request.GET), + "is_popup_var": IS_POPUP_VAR, + "add": True, + "change": False, + "has_delete_permission": False, + "has_change_permission": True, + "has_absolute_url": False, + "opts": self.model._meta, + "original": user, + "save_as": False, + "show_save": True, + **self.admin_site.each_context(request), + } + + request.current_app = self.admin_site.name + + return TemplateResponse( + request, + self.change_user_password_template + or "admin/auth/user/change_password.html", + context, + ) + + def response_add(self, request, obj, post_url_continue=None): + """ + Determine the HttpResponse for the add_view stage. It mostly defers to + its superclass implementation but is customized because the User model + has a slightly different workflow. + """ + # We should allow further modification of the user just added i.e. the + # 'Save' button should behave like the 'Save and continue editing' + # button except in two scenarios: + # * The user has pressed the 'Save and add another' button + # * We are adding a user in a popup + if "_addanother" not in request.POST and IS_POPUP_VAR not in request.POST: + request.POST = request.POST.copy() + request.POST["_continue"] = 1 + return super().response_add(request, obj, post_url_continue) diff --git a/venv/Lib/site-packages/django/contrib/auth/apps.py b/venv/Lib/site-packages/django/contrib/auth/apps.py new file mode 100644 index 000000000..4882a27c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/apps.py @@ -0,0 +1,30 @@ +from django.apps import AppConfig +from django.core import checks +from django.db.models.query_utils import DeferredAttribute +from django.db.models.signals import post_migrate +from django.utils.translation import gettext_lazy as _ + +from . import get_user_model +from .checks import check_models_permissions, check_user_model +from .management import create_permissions +from .signals import user_logged_in + + +class AuthConfig(AppConfig): + default_auto_field = "django.db.models.AutoField" + name = "django.contrib.auth" + verbose_name = _("Authentication and Authorization") + + def ready(self): + post_migrate.connect( + create_permissions, + dispatch_uid="django.contrib.auth.management.create_permissions", + ) + last_login_field = getattr(get_user_model(), "last_login", None) + # Register the handler only if UserModel.last_login is a field. + if isinstance(last_login_field, DeferredAttribute): + from .models import update_last_login + + user_logged_in.connect(update_last_login, dispatch_uid="update_last_login") + checks.register(check_user_model, checks.Tags.models) + checks.register(check_models_permissions, checks.Tags.models) diff --git a/venv/Lib/site-packages/django/contrib/auth/backends.py b/venv/Lib/site-packages/django/contrib/auth/backends.py new file mode 100644 index 000000000..7cf405713 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/backends.py @@ -0,0 +1,234 @@ +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Permission +from django.db.models import Exists, OuterRef, Q + +UserModel = get_user_model() + + +class BaseBackend: + def authenticate(self, request, **kwargs): + return None + + def get_user(self, user_id): + return None + + def get_user_permissions(self, user_obj, obj=None): + return set() + + def get_group_permissions(self, user_obj, obj=None): + return set() + + def get_all_permissions(self, user_obj, obj=None): + return { + *self.get_user_permissions(user_obj, obj=obj), + *self.get_group_permissions(user_obj, obj=obj), + } + + def has_perm(self, user_obj, perm, obj=None): + return perm in self.get_all_permissions(user_obj, obj=obj) + + +class ModelBackend(BaseBackend): + """ + Authenticates against settings.AUTH_USER_MODEL. + """ + + def authenticate(self, request, username=None, password=None, **kwargs): + if username is None: + username = kwargs.get(UserModel.USERNAME_FIELD) + if username is None or password is None: + return + try: + user = UserModel._default_manager.get_by_natural_key(username) + except UserModel.DoesNotExist: + # Run the default password hasher once to reduce the timing + # difference between an existing and a nonexistent user (#20760). + UserModel().set_password(password) + else: + if user.check_password(password) and self.user_can_authenticate(user): + return user + + def user_can_authenticate(self, user): + """ + Reject users with is_active=False. Custom user models that don't have + that attribute are allowed. + """ + is_active = getattr(user, "is_active", None) + return is_active or is_active is None + + def _get_user_permissions(self, user_obj): + return user_obj.user_permissions.all() + + def _get_group_permissions(self, user_obj): + user_groups_field = get_user_model()._meta.get_field("groups") + user_groups_query = "group__%s" % user_groups_field.related_query_name() + return Permission.objects.filter(**{user_groups_query: user_obj}) + + def _get_permissions(self, user_obj, obj, from_name): + """ + Return the permissions of `user_obj` from `from_name`. `from_name` can + be either "group" or "user" to return permissions from + `_get_group_permissions` or `_get_user_permissions` respectively. + """ + if not user_obj.is_active or user_obj.is_anonymous or obj is not None: + return set() + + perm_cache_name = "_%s_perm_cache" % from_name + if not hasattr(user_obj, perm_cache_name): + if user_obj.is_superuser: + perms = Permission.objects.all() + else: + perms = getattr(self, "_get_%s_permissions" % from_name)(user_obj) + perms = perms.values_list("content_type__app_label", "codename").order_by() + setattr( + user_obj, perm_cache_name, {"%s.%s" % (ct, name) for ct, name in perms} + ) + return getattr(user_obj, perm_cache_name) + + def get_user_permissions(self, user_obj, obj=None): + """ + Return a set of permission strings the user `user_obj` has from their + `user_permissions`. + """ + return self._get_permissions(user_obj, obj, "user") + + def get_group_permissions(self, user_obj, obj=None): + """ + Return a set of permission strings the user `user_obj` has from the + groups they belong. + """ + return self._get_permissions(user_obj, obj, "group") + + def get_all_permissions(self, user_obj, obj=None): + if not user_obj.is_active or user_obj.is_anonymous or obj is not None: + return set() + if not hasattr(user_obj, "_perm_cache"): + user_obj._perm_cache = super().get_all_permissions(user_obj) + return user_obj._perm_cache + + def has_perm(self, user_obj, perm, obj=None): + return user_obj.is_active and super().has_perm(user_obj, perm, obj=obj) + + def has_module_perms(self, user_obj, app_label): + """ + Return True if user_obj has any permissions in the given app_label. + """ + return user_obj.is_active and any( + perm[: perm.index(".")] == app_label + for perm in self.get_all_permissions(user_obj) + ) + + def with_perm(self, perm, is_active=True, include_superusers=True, obj=None): + """ + Return users that have permission "perm". By default, filter out + inactive users and include superusers. + """ + if isinstance(perm, str): + try: + app_label, codename = perm.split(".") + except ValueError: + raise ValueError( + "Permission name should be in the form " + "app_label.permission_codename." + ) + elif not isinstance(perm, Permission): + raise TypeError( + "The `perm` argument must be a string or a permission instance." + ) + + if obj is not None: + return UserModel._default_manager.none() + + permission_q = Q(group__user=OuterRef("pk")) | Q(user=OuterRef("pk")) + if isinstance(perm, Permission): + permission_q &= Q(pk=perm.pk) + else: + permission_q &= Q(codename=codename, content_type__app_label=app_label) + + user_q = Exists(Permission.objects.filter(permission_q)) + if include_superusers: + user_q |= Q(is_superuser=True) + if is_active is not None: + user_q &= Q(is_active=is_active) + + return UserModel._default_manager.filter(user_q) + + def get_user(self, user_id): + try: + user = UserModel._default_manager.get(pk=user_id) + except UserModel.DoesNotExist: + return None + return user if self.user_can_authenticate(user) else None + + +class AllowAllUsersModelBackend(ModelBackend): + def user_can_authenticate(self, user): + return True + + +class RemoteUserBackend(ModelBackend): + """ + This backend is to be used in conjunction with the ``RemoteUserMiddleware`` + found in the middleware module of this package, and is used when the server + is handling authentication outside of Django. + + By default, the ``authenticate`` method creates ``User`` objects for + usernames that don't already exist in the database. Subclasses can disable + this behavior by setting the ``create_unknown_user`` attribute to + ``False``. + """ + + # Create a User object if not already in the database? + create_unknown_user = True + + def authenticate(self, request, remote_user): + """ + The username passed as ``remote_user`` is considered trusted. Return + the ``User`` object with the given username. Create a new ``User`` + object if ``create_unknown_user`` is ``True``. + + Return None if ``create_unknown_user`` is ``False`` and a ``User`` + object with the given username is not found in the database. + """ + if not remote_user: + return + user = None + username = self.clean_username(remote_user) + + # Note that this could be accomplished in one try-except clause, but + # instead we use get_or_create when creating unknown users since it has + # built-in safeguards for multiple threads. + if self.create_unknown_user: + user, created = UserModel._default_manager.get_or_create( + **{UserModel.USERNAME_FIELD: username} + ) + if created: + user = self.configure_user(request, user) + else: + try: + user = UserModel._default_manager.get_by_natural_key(username) + except UserModel.DoesNotExist: + pass + return user if self.user_can_authenticate(user) else None + + def clean_username(self, username): + """ + Perform any cleaning on the "username" prior to using it to get or + create the user object. Return the cleaned username. + + By default, return the username unchanged. + """ + return username + + def configure_user(self, request, user): + """ + Configure a user after creation and return the updated user. + + By default, return the user unmodified. + """ + return user + + +class AllowAllUsersRemoteUserBackend(RemoteUserBackend): + def user_can_authenticate(self, user): + return True diff --git a/venv/Lib/site-packages/django/contrib/auth/base_user.py b/venv/Lib/site-packages/django/contrib/auth/base_user.py new file mode 100644 index 000000000..f6de3b931 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/base_user.py @@ -0,0 +1,151 @@ +""" +This module allows importing AbstractBaseUser even when django.contrib.auth is +not in INSTALLED_APPS. +""" +import unicodedata + +from django.contrib.auth import password_validation +from django.contrib.auth.hashers import ( + check_password, + is_password_usable, + make_password, +) +from django.db import models +from django.utils.crypto import get_random_string, salted_hmac +from django.utils.translation import gettext_lazy as _ + + +class BaseUserManager(models.Manager): + @classmethod + def normalize_email(cls, email): + """ + Normalize the email address by lowercasing the domain part of it. + """ + email = email or "" + try: + email_name, domain_part = email.strip().rsplit("@", 1) + except ValueError: + pass + else: + email = email_name + "@" + domain_part.lower() + return email + + def make_random_password( + self, + length=10, + allowed_chars="abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789", + ): + """ + Generate a random password with the given length and given + allowed_chars. The default value of allowed_chars does not have "I" or + "O" or letters and digits that look similar -- just to avoid confusion. + """ + return get_random_string(length, allowed_chars) + + def get_by_natural_key(self, username): + return self.get(**{self.model.USERNAME_FIELD: username}) + + +class AbstractBaseUser(models.Model): + password = models.CharField(_("password"), max_length=128) + last_login = models.DateTimeField(_("last login"), blank=True, null=True) + + is_active = True + + REQUIRED_FIELDS = [] + + # Stores the raw password if set_password() is called so that it can + # be passed to password_changed() after the model is saved. + _password = None + + class Meta: + abstract = True + + def __str__(self): + return self.get_username() + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + if self._password is not None: + password_validation.password_changed(self._password, self) + self._password = None + + def get_username(self): + """Return the username for this User.""" + return getattr(self, self.USERNAME_FIELD) + + def clean(self): + setattr(self, self.USERNAME_FIELD, self.normalize_username(self.get_username())) + + def natural_key(self): + return (self.get_username(),) + + @property + def is_anonymous(self): + """ + Always return False. This is a way of comparing User objects to + anonymous users. + """ + return False + + @property + def is_authenticated(self): + """ + Always return True. This is a way to tell if the user has been + authenticated in templates. + """ + return True + + def set_password(self, raw_password): + self.password = make_password(raw_password) + self._password = raw_password + + def check_password(self, raw_password): + """ + Return a boolean of whether the raw_password was correct. Handles + hashing formats behind the scenes. + """ + + def setter(raw_password): + self.set_password(raw_password) + # Password hash upgrades shouldn't be considered password changes. + self._password = None + self.save(update_fields=["password"]) + + return check_password(raw_password, self.password, setter) + + def set_unusable_password(self): + # Set a value that will never be a valid hash + self.password = make_password(None) + + def has_usable_password(self): + """ + Return False if set_unusable_password() has been called for this user. + """ + return is_password_usable(self.password) + + def get_session_auth_hash(self): + """ + Return an HMAC of the password field. + """ + key_salt = "django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash" + return salted_hmac( + key_salt, + self.password, + algorithm="sha256", + ).hexdigest() + + @classmethod + def get_email_field_name(cls): + try: + return cls.EMAIL_FIELD + except AttributeError: + return "email" + + @classmethod + def normalize_username(cls, username): + return ( + unicodedata.normalize("NFKC", username) + if isinstance(username, str) + else username + ) diff --git a/venv/Lib/site-packages/django/contrib/auth/checks.py b/venv/Lib/site-packages/django/contrib/auth/checks.py new file mode 100644 index 000000000..ee8082524 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/checks.py @@ -0,0 +1,220 @@ +from itertools import chain +from types import MethodType + +from django.apps import apps +from django.conf import settings +from django.core import checks + +from .management import _get_builtin_permissions + + +def check_user_model(app_configs=None, **kwargs): + if app_configs is None: + cls = apps.get_model(settings.AUTH_USER_MODEL) + else: + app_label, model_name = settings.AUTH_USER_MODEL.split(".") + for app_config in app_configs: + if app_config.label == app_label: + cls = app_config.get_model(model_name) + break + else: + # Checks might be run against a set of app configs that don't + # include the specified user model. In this case we simply don't + # perform the checks defined below. + return [] + + errors = [] + + # Check that REQUIRED_FIELDS is a list + if not isinstance(cls.REQUIRED_FIELDS, (list, tuple)): + errors.append( + checks.Error( + "'REQUIRED_FIELDS' must be a list or tuple.", + obj=cls, + id="auth.E001", + ) + ) + + # Check that the USERNAME FIELD isn't included in REQUIRED_FIELDS. + if cls.USERNAME_FIELD in cls.REQUIRED_FIELDS: + errors.append( + checks.Error( + "The field named as the 'USERNAME_FIELD' " + "for a custom user model must not be included in 'REQUIRED_FIELDS'.", + hint=( + "The 'USERNAME_FIELD' is currently set to '%s', you " + "should remove '%s' from the 'REQUIRED_FIELDS'." + % (cls.USERNAME_FIELD, cls.USERNAME_FIELD) + ), + obj=cls, + id="auth.E002", + ) + ) + + # Check that the username field is unique + if not cls._meta.get_field(cls.USERNAME_FIELD).unique and not any( + constraint.fields == (cls.USERNAME_FIELD,) + for constraint in cls._meta.total_unique_constraints + ): + if settings.AUTHENTICATION_BACKENDS == [ + "django.contrib.auth.backends.ModelBackend" + ]: + errors.append( + checks.Error( + "'%s.%s' must be unique because it is named as the " + "'USERNAME_FIELD'." % (cls._meta.object_name, cls.USERNAME_FIELD), + obj=cls, + id="auth.E003", + ) + ) + else: + errors.append( + checks.Warning( + "'%s.%s' is named as the 'USERNAME_FIELD', but it is not unique." + % (cls._meta.object_name, cls.USERNAME_FIELD), + hint=( + "Ensure that your authentication backend(s) can handle " + "non-unique usernames." + ), + obj=cls, + id="auth.W004", + ) + ) + + if isinstance(cls().is_anonymous, MethodType): + errors.append( + checks.Critical( + "%s.is_anonymous must be an attribute or property rather than " + "a method. Ignoring this is a security issue as anonymous " + "users will be treated as authenticated!" % cls, + obj=cls, + id="auth.C009", + ) + ) + if isinstance(cls().is_authenticated, MethodType): + errors.append( + checks.Critical( + "%s.is_authenticated must be an attribute or property rather " + "than a method. Ignoring this is a security issue as anonymous " + "users will be treated as authenticated!" % cls, + obj=cls, + id="auth.C010", + ) + ) + return errors + + +def check_models_permissions(app_configs=None, **kwargs): + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable( + app_config.get_models() for app_config in app_configs + ) + + Permission = apps.get_model("auth", "Permission") + permission_name_max_length = Permission._meta.get_field("name").max_length + permission_codename_max_length = Permission._meta.get_field("codename").max_length + errors = [] + + for model in models: + opts = model._meta + builtin_permissions = dict(_get_builtin_permissions(opts)) + # Check builtin permission name length. + max_builtin_permission_name_length = ( + max(len(name) for name in builtin_permissions.values()) + if builtin_permissions + else 0 + ) + if max_builtin_permission_name_length > permission_name_max_length: + verbose_name_max_length = permission_name_max_length - ( + max_builtin_permission_name_length - len(opts.verbose_name_raw) + ) + errors.append( + checks.Error( + "The verbose_name of model '%s' must be at most %d " + "characters for its builtin permission names to be at " + "most %d characters." + % (opts.label, verbose_name_max_length, permission_name_max_length), + obj=model, + id="auth.E007", + ) + ) + # Check builtin permission codename length. + max_builtin_permission_codename_length = ( + max(len(codename) for codename in builtin_permissions.keys()) + if builtin_permissions + else 0 + ) + if max_builtin_permission_codename_length > permission_codename_max_length: + model_name_max_length = permission_codename_max_length - ( + max_builtin_permission_codename_length - len(opts.model_name) + ) + errors.append( + checks.Error( + "The name of model '%s' must be at most %d characters " + "for its builtin permission codenames to be at most %d " + "characters." + % ( + opts.label, + model_name_max_length, + permission_codename_max_length, + ), + obj=model, + id="auth.E011", + ) + ) + codenames = set() + for codename, name in opts.permissions: + # Check custom permission name length. + if len(name) > permission_name_max_length: + errors.append( + checks.Error( + "The permission named '%s' of model '%s' is longer " + "than %d characters." + % ( + name, + opts.label, + permission_name_max_length, + ), + obj=model, + id="auth.E008", + ) + ) + # Check custom permission codename length. + if len(codename) > permission_codename_max_length: + errors.append( + checks.Error( + "The permission codenamed '%s' of model '%s' is " + "longer than %d characters." + % ( + codename, + opts.label, + permission_codename_max_length, + ), + obj=model, + id="auth.E012", + ) + ) + # Check custom permissions codename clashing. + if codename in builtin_permissions: + errors.append( + checks.Error( + "The permission codenamed '%s' clashes with a builtin " + "permission for model '%s'." % (codename, opts.label), + obj=model, + id="auth.E005", + ) + ) + elif codename in codenames: + errors.append( + checks.Error( + "The permission codenamed '%s' is duplicated for " + "model '%s'." % (codename, opts.label), + obj=model, + id="auth.E006", + ) + ) + codenames.add(codename) + + return errors diff --git a/venv/Lib/site-packages/django/contrib/auth/common-passwords.txt.gz b/venv/Lib/site-packages/django/contrib/auth/common-passwords.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..e758dbe9a7b12572843ad4973f3d864d5165f2ac GIT binary patch literal 81355 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 F0s!mBNTmP( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/context_processors.py b/venv/Lib/site-packages/django/contrib/auth/context_processors.py new file mode 100644 index 000000000..0a8819922 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/context_processors.py @@ -0,0 +1,67 @@ +# PermWrapper and PermLookupDict proxy the permissions system into objects that +# the template system can understand. + + +class PermLookupDict: + def __init__(self, user, app_label): + self.user, self.app_label = user, app_label + + def __repr__(self): + return str(self.user.get_all_permissions()) + + def __getitem__(self, perm_name): + return self.user.has_perm("%s.%s" % (self.app_label, perm_name)) + + def __iter__(self): + # To fix 'item in perms.someapp' and __getitem__ interaction we need to + # define __iter__. See #18979 for details. + raise TypeError("PermLookupDict is not iterable.") + + def __bool__(self): + return self.user.has_module_perms(self.app_label) + + +class PermWrapper: + def __init__(self, user): + self.user = user + + def __repr__(self): + return f"{self.__class__.__qualname__}({self.user!r})" + + def __getitem__(self, app_label): + return PermLookupDict(self.user, app_label) + + def __iter__(self): + # I am large, I contain multitudes. + raise TypeError("PermWrapper is not iterable.") + + def __contains__(self, perm_name): + """ + Lookup by "someapp" or "someapp.someperm" in perms. + """ + if "." not in perm_name: + # The name refers to module. + return bool(self[perm_name]) + app_label, perm_name = perm_name.split(".", 1) + return self[app_label][perm_name] + + +def auth(request): + """ + Return context variables required by apps that use Django's authentication + system. + + If there is no 'user' attribute in the request, use AnonymousUser (from + django.contrib.auth). + """ + if hasattr(request, "user"): + user = request.user + else: + from django.contrib.auth.models import AnonymousUser + + user = AnonymousUser() + + return { + "user": user, + "perms": PermWrapper(user), + } diff --git a/venv/Lib/site-packages/django/contrib/auth/decorators.py b/venv/Lib/site-packages/django/contrib/auth/decorators.py new file mode 100644 index 000000000..a419068d4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/decorators.py @@ -0,0 +1,82 @@ +from functools import wraps +from urllib.parse import urlparse + +from django.conf import settings +from django.contrib.auth import REDIRECT_FIELD_NAME +from django.core.exceptions import PermissionDenied +from django.shortcuts import resolve_url + + +def user_passes_test( + test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME +): + """ + Decorator for views that checks that the user passes the given test, + redirecting to the log-in page if necessary. The test should be a callable + that takes the user object and returns True if the user passes. + """ + + def decorator(view_func): + @wraps(view_func) + def _wrapped_view(request, *args, **kwargs): + if test_func(request.user): + return view_func(request, *args, **kwargs) + path = request.build_absolute_uri() + resolved_login_url = resolve_url(login_url or settings.LOGIN_URL) + # If the login url is the same scheme and net location then just + # use the path as the "next" url. + login_scheme, login_netloc = urlparse(resolved_login_url)[:2] + current_scheme, current_netloc = urlparse(path)[:2] + if (not login_scheme or login_scheme == current_scheme) and ( + not login_netloc or login_netloc == current_netloc + ): + path = request.get_full_path() + from django.contrib.auth.views import redirect_to_login + + return redirect_to_login(path, resolved_login_url, redirect_field_name) + + return _wrapped_view + + return decorator + + +def login_required( + function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None +): + """ + Decorator for views that checks that the user is logged in, redirecting + to the log-in page if necessary. + """ + actual_decorator = user_passes_test( + lambda u: u.is_authenticated, + login_url=login_url, + redirect_field_name=redirect_field_name, + ) + if function: + return actual_decorator(function) + return actual_decorator + + +def permission_required(perm, login_url=None, raise_exception=False): + """ + Decorator for views that checks whether a user has a particular permission + enabled, redirecting to the log-in page if necessary. + If the raise_exception parameter is given the PermissionDenied exception + is raised. + """ + + def check_perms(user): + if isinstance(perm, str): + perms = (perm,) + else: + perms = perm + # First check if the user has the permission (even anon users) + if user.has_perms(perms): + return True + # In case the 403 handler should be called raise the exception + if raise_exception: + raise PermissionDenied + # As the last resort, show the login form + return False + + return user_passes_test(check_perms, login_url=login_url) diff --git a/venv/Lib/site-packages/django/contrib/auth/forms.py b/venv/Lib/site-packages/django/contrib/auth/forms.py new file mode 100644 index 000000000..9d6a9918b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/forms.py @@ -0,0 +1,486 @@ +import unicodedata + +from django import forms +from django.contrib.auth import authenticate, get_user_model, password_validation +from django.contrib.auth.hashers import UNUSABLE_PASSWORD_PREFIX, identify_hasher +from django.contrib.auth.models import User +from django.contrib.auth.tokens import default_token_generator +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ValidationError +from django.core.mail import EmailMultiAlternatives +from django.template import loader +from django.utils.encoding import force_bytes +from django.utils.http import urlsafe_base64_encode +from django.utils.text import capfirst +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ + +UserModel = get_user_model() + + +def _unicode_ci_compare(s1, s2): + """ + Perform case-insensitive comparison of two identifiers, using the + recommended algorithm from Unicode Technical Report 36, section + 2.11.2(B)(2). + """ + return ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKC", s2).casefold() + ) + + +class ReadOnlyPasswordHashWidget(forms.Widget): + template_name = "auth/widgets/read_only_password_hash.html" + read_only = True + + def get_context(self, name, value, attrs): + context = super().get_context(name, value, attrs) + summary = [] + if not value or value.startswith(UNUSABLE_PASSWORD_PREFIX): + summary.append({"label": gettext("No password set.")}) + else: + try: + hasher = identify_hasher(value) + except ValueError: + summary.append( + { + "label": gettext( + "Invalid password format or unknown hashing algorithm." + ) + } + ) + else: + for key, value_ in hasher.safe_summary(value).items(): + summary.append({"label": gettext(key), "value": value_}) + context["summary"] = summary + return context + + def id_for_label(self, id_): + return None + + +class ReadOnlyPasswordHashField(forms.Field): + widget = ReadOnlyPasswordHashWidget + + def __init__(self, *args, **kwargs): + kwargs.setdefault("required", False) + kwargs.setdefault("disabled", True) + super().__init__(*args, **kwargs) + + +class UsernameField(forms.CharField): + def to_python(self, value): + return unicodedata.normalize("NFKC", super().to_python(value)) + + def widget_attrs(self, widget): + return { + **super().widget_attrs(widget), + "autocapitalize": "none", + "autocomplete": "username", + } + + +class UserCreationForm(forms.ModelForm): + """ + A form that creates a user, with no privileges, from the given username and + password. + """ + + error_messages = { + "password_mismatch": _("The two password fields didn’t match."), + } + password1 = forms.CharField( + label=_("Password"), + strip=False, + widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}), + help_text=password_validation.password_validators_help_text_html(), + ) + password2 = forms.CharField( + label=_("Password confirmation"), + widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}), + strip=False, + help_text=_("Enter the same password as before, for verification."), + ) + + class Meta: + model = User + fields = ("username",) + field_classes = {"username": UsernameField} + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if self._meta.model.USERNAME_FIELD in self.fields: + self.fields[self._meta.model.USERNAME_FIELD].widget.attrs[ + "autofocus" + ] = True + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError( + self.error_messages["password_mismatch"], + code="password_mismatch", + ) + return password2 + + def _post_clean(self): + super()._post_clean() + # Validate the password after self.instance is updated with form data + # by super(). + password = self.cleaned_data.get("password2") + if password: + try: + password_validation.validate_password(password, self.instance) + except ValidationError as error: + self.add_error("password2", error) + + def save(self, commit=True): + user = super().save(commit=False) + user.set_password(self.cleaned_data["password1"]) + if commit: + user.save() + return user + + +class UserChangeForm(forms.ModelForm): + password = ReadOnlyPasswordHashField( + label=_("Password"), + help_text=_( + "Raw passwords are not stored, so there is no way to see this " + "user’s password, but you can change the password using " + 'this form.' + ), + ) + + class Meta: + model = User + fields = "__all__" + field_classes = {"username": UsernameField} + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + password = self.fields.get("password") + if password: + password.help_text = password.help_text.format("../password/") + user_permissions = self.fields.get("user_permissions") + if user_permissions: + user_permissions.queryset = user_permissions.queryset.select_related( + "content_type" + ) + + +class AuthenticationForm(forms.Form): + """ + Base class for authenticating users. Extend this to get a form that accepts + username/password logins. + """ + + username = UsernameField(widget=forms.TextInput(attrs={"autofocus": True})) + password = forms.CharField( + label=_("Password"), + strip=False, + widget=forms.PasswordInput(attrs={"autocomplete": "current-password"}), + ) + + error_messages = { + "invalid_login": _( + "Please enter a correct %(username)s and password. Note that both " + "fields may be case-sensitive." + ), + "inactive": _("This account is inactive."), + } + + def __init__(self, request=None, *args, **kwargs): + """ + The 'request' parameter is set for custom auth use by subclasses. + The form data comes in via the standard 'data' kwarg. + """ + self.request = request + self.user_cache = None + super().__init__(*args, **kwargs) + + # Set the max length and label for the "username" field. + self.username_field = UserModel._meta.get_field(UserModel.USERNAME_FIELD) + username_max_length = self.username_field.max_length or 254 + self.fields["username"].max_length = username_max_length + self.fields["username"].widget.attrs["maxlength"] = username_max_length + if self.fields["username"].label is None: + self.fields["username"].label = capfirst(self.username_field.verbose_name) + + def clean(self): + username = self.cleaned_data.get("username") + password = self.cleaned_data.get("password") + + if username is not None and password: + self.user_cache = authenticate( + self.request, username=username, password=password + ) + if self.user_cache is None: + raise self.get_invalid_login_error() + else: + self.confirm_login_allowed(self.user_cache) + + return self.cleaned_data + + def confirm_login_allowed(self, user): + """ + Controls whether the given User may log in. This is a policy setting, + independent of end-user authentication. This default behavior is to + allow login by active users, and reject login by inactive users. + + If the given user cannot log in, this method should raise a + ``ValidationError``. + + If the given user may log in, this method should return None. + """ + if not user.is_active: + raise ValidationError( + self.error_messages["inactive"], + code="inactive", + ) + + def get_user(self): + return self.user_cache + + def get_invalid_login_error(self): + return ValidationError( + self.error_messages["invalid_login"], + code="invalid_login", + params={"username": self.username_field.verbose_name}, + ) + + +class PasswordResetForm(forms.Form): + email = forms.EmailField( + label=_("Email"), + max_length=254, + widget=forms.EmailInput(attrs={"autocomplete": "email"}), + ) + + def send_mail( + self, + subject_template_name, + email_template_name, + context, + from_email, + to_email, + html_email_template_name=None, + ): + """ + Send a django.core.mail.EmailMultiAlternatives to `to_email`. + """ + subject = loader.render_to_string(subject_template_name, context) + # Email subject *must not* contain newlines + subject = "".join(subject.splitlines()) + body = loader.render_to_string(email_template_name, context) + + email_message = EmailMultiAlternatives(subject, body, from_email, [to_email]) + if html_email_template_name is not None: + html_email = loader.render_to_string(html_email_template_name, context) + email_message.attach_alternative(html_email, "text/html") + + email_message.send() + + def get_users(self, email): + """Given an email, return matching user(s) who should receive a reset. + + This allows subclasses to more easily customize the default policies + that prevent inactive users and users with unusable passwords from + resetting their password. + """ + email_field_name = UserModel.get_email_field_name() + active_users = UserModel._default_manager.filter( + **{ + "%s__iexact" % email_field_name: email, + "is_active": True, + } + ) + return ( + u + for u in active_users + if u.has_usable_password() + and _unicode_ci_compare(email, getattr(u, email_field_name)) + ) + + def save( + self, + domain_override=None, + subject_template_name="registration/password_reset_subject.txt", + email_template_name="registration/password_reset_email.html", + use_https=False, + token_generator=default_token_generator, + from_email=None, + request=None, + html_email_template_name=None, + extra_email_context=None, + ): + """ + Generate a one-use only link for resetting password and send it to the + user. + """ + email = self.cleaned_data["email"] + if not domain_override: + current_site = get_current_site(request) + site_name = current_site.name + domain = current_site.domain + else: + site_name = domain = domain_override + email_field_name = UserModel.get_email_field_name() + for user in self.get_users(email): + user_email = getattr(user, email_field_name) + context = { + "email": user_email, + "domain": domain, + "site_name": site_name, + "uid": urlsafe_base64_encode(force_bytes(user.pk)), + "user": user, + "token": token_generator.make_token(user), + "protocol": "https" if use_https else "http", + **(extra_email_context or {}), + } + self.send_mail( + subject_template_name, + email_template_name, + context, + from_email, + user_email, + html_email_template_name=html_email_template_name, + ) + + +class SetPasswordForm(forms.Form): + """ + A form that lets a user change set their password without entering the old + password + """ + + error_messages = { + "password_mismatch": _("The two password fields didn’t match."), + } + new_password1 = forms.CharField( + label=_("New password"), + widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}), + strip=False, + help_text=password_validation.password_validators_help_text_html(), + ) + new_password2 = forms.CharField( + label=_("New password confirmation"), + strip=False, + widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}), + ) + + def __init__(self, user, *args, **kwargs): + self.user = user + super().__init__(*args, **kwargs) + + def clean_new_password2(self): + password1 = self.cleaned_data.get("new_password1") + password2 = self.cleaned_data.get("new_password2") + if password1 and password2: + if password1 != password2: + raise ValidationError( + self.error_messages["password_mismatch"], + code="password_mismatch", + ) + password_validation.validate_password(password2, self.user) + return password2 + + def save(self, commit=True): + password = self.cleaned_data["new_password1"] + self.user.set_password(password) + if commit: + self.user.save() + return self.user + + +class PasswordChangeForm(SetPasswordForm): + """ + A form that lets a user change their password by entering their old + password. + """ + + error_messages = { + **SetPasswordForm.error_messages, + "password_incorrect": _( + "Your old password was entered incorrectly. Please enter it again." + ), + } + old_password = forms.CharField( + label=_("Old password"), + strip=False, + widget=forms.PasswordInput( + attrs={"autocomplete": "current-password", "autofocus": True} + ), + ) + + field_order = ["old_password", "new_password1", "new_password2"] + + def clean_old_password(self): + """ + Validate that the old_password field is correct. + """ + old_password = self.cleaned_data["old_password"] + if not self.user.check_password(old_password): + raise ValidationError( + self.error_messages["password_incorrect"], + code="password_incorrect", + ) + return old_password + + +class AdminPasswordChangeForm(forms.Form): + """ + A form used to change the password of a user in the admin interface. + """ + + error_messages = { + "password_mismatch": _("The two password fields didn’t match."), + } + required_css_class = "required" + password1 = forms.CharField( + label=_("Password"), + widget=forms.PasswordInput( + attrs={"autocomplete": "new-password", "autofocus": True} + ), + strip=False, + help_text=password_validation.password_validators_help_text_html(), + ) + password2 = forms.CharField( + label=_("Password (again)"), + widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}), + strip=False, + help_text=_("Enter the same password as before, for verification."), + ) + + def __init__(self, user, *args, **kwargs): + self.user = user + super().__init__(*args, **kwargs) + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError( + self.error_messages["password_mismatch"], + code="password_mismatch", + ) + password_validation.validate_password(password2, self.user) + return password2 + + def save(self, commit=True): + """Save the new password.""" + password = self.cleaned_data["password1"] + self.user.set_password(password) + if commit: + self.user.save() + return self.user + + @property + def changed_data(self): + data = super().changed_data + for name in self.fields: + if name not in data: + return [] + return ["password"] diff --git a/venv/Lib/site-packages/django/contrib/auth/handlers/__init__.py b/venv/Lib/site-packages/django/contrib/auth/handlers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7c4dbd1d1130b8bd76bae8109886de2fbe94141 GIT binary patch literal 202 zcmd1j<>g`kg71esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UVrfZ+enw(mN)FIq{rLFIyv&mLc)fzkTO2mI S`6;D2sdgY|6f*${76t&;dpGI; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/modwsgi.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/handlers/__pycache__/modwsgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92a24a91a28e4c40766b4bf805bb406d66024a85 GIT binary patch literal 1393 zcmZ`(&u<$=6rPz~uh+&&Q&b{>RJ0NYSkyR`+7pT*s)oV=B7{K|mSHvCnQYcs&$u(Y zac#LL`Va6Q#79p2KPw?2apJ_i2gG}`u}P2^X+F=7H}8Ej-?!E~J6!_puOELK|Lzm= z2TpD_29r;r+s6Qc2wIRS9a4&8REDx4p$tI9|Mc4F|_nfFbpTJ6Mai79I zCEt_h7#(1=paU`|D{s=aAKhMEc~{|zt?9q3gYBs~iP`ekZUpTK5R~5sBI#EsIoASFLPT$Q6*gA4K3SuCr;yzL1F40Bdsix z7nL-*v~}k@IQx|rvZ(hGA_L>D4SwNf%IbFCn2ZW9jUOIh!x=Q6!WX58AjHX`=xwp5q7(W(xSx8hS-hnwx% z$F*OG*#oX`il?89ke?lWQ(4PLCpxXBa4|djJTJef#-nGsvE{+nMo*yf=n@i-zRbrX zo0sxn#?uS9g&hf}$06`5O+G$ERSwVLnF>gJ2zsC#{n^621tr_i?Rx-WhfzlN=q~kX zuf^U3jM1Lg{retsaVfs#rlB*pZd}4->&8d7+{nOCS&@--qo+c7G##NV`sUpLV@_DEqq*a~g+r(D=y_8}2rf{ 0: + self.encode(password, decoded["salt"], extra_iterations) + + +class PBKDF2SHA1PasswordHasher(PBKDF2PasswordHasher): + """ + Alternate PBKDF2 hasher which uses SHA1, the default PRF + recommended by PKCS #5. This is compatible with other + implementations of PBKDF2, such as openssl's + PKCS5_PBKDF2_HMAC_SHA1(). + """ + + algorithm = "pbkdf2_sha1" + digest = hashlib.sha1 + + +class Argon2PasswordHasher(BasePasswordHasher): + """ + Secure password hashing using the argon2 algorithm. + + This is the winner of the Password Hashing Competition 2013-2015 + (https://password-hashing.net). It requires the argon2-cffi library which + depends on native C code and might cause portability issues. + """ + + algorithm = "argon2" + library = "argon2" + + time_cost = 2 + memory_cost = 102400 + parallelism = 8 + + def encode(self, password, salt): + argon2 = self._load_library() + params = self.params() + data = argon2.low_level.hash_secret( + password.encode(), + salt.encode(), + time_cost=params.time_cost, + memory_cost=params.memory_cost, + parallelism=params.parallelism, + hash_len=params.hash_len, + type=params.type, + ) + return self.algorithm + data.decode("ascii") + + def decode(self, encoded): + argon2 = self._load_library() + algorithm, rest = encoded.split("$", 1) + assert algorithm == self.algorithm + params = argon2.extract_parameters("$" + rest) + variety, *_, b64salt, hash = rest.split("$") + # Add padding. + b64salt += "=" * (-len(b64salt) % 4) + salt = base64.b64decode(b64salt).decode("latin1") + return { + "algorithm": algorithm, + "hash": hash, + "memory_cost": params.memory_cost, + "parallelism": params.parallelism, + "salt": salt, + "time_cost": params.time_cost, + "variety": variety, + "version": params.version, + "params": params, + } + + def verify(self, password, encoded): + argon2 = self._load_library() + algorithm, rest = encoded.split("$", 1) + assert algorithm == self.algorithm + try: + return argon2.PasswordHasher().verify("$" + rest, password) + except argon2.exceptions.VerificationError: + return False + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("variety"): decoded["variety"], + _("version"): decoded["version"], + _("memory cost"): decoded["memory_cost"], + _("time cost"): decoded["time_cost"], + _("parallelism"): decoded["parallelism"], + _("salt"): mask_hash(decoded["salt"]), + _("hash"): mask_hash(decoded["hash"]), + } + + def must_update(self, encoded): + decoded = self.decode(encoded) + current_params = decoded["params"] + new_params = self.params() + # Set salt_len to the salt_len of the current parameters because salt + # is explicitly passed to argon2. + new_params.salt_len = current_params.salt_len + update_salt = must_update_salt(decoded["salt"], self.salt_entropy) + return (current_params != new_params) or update_salt + + def harden_runtime(self, password, encoded): + # The runtime for Argon2 is too complicated to implement a sensible + # hardening algorithm. + pass + + def params(self): + argon2 = self._load_library() + # salt_len is a noop, because we provide our own salt. + return argon2.Parameters( + type=argon2.low_level.Type.ID, + version=argon2.low_level.ARGON2_VERSION, + salt_len=argon2.DEFAULT_RANDOM_SALT_LENGTH, + hash_len=argon2.DEFAULT_HASH_LENGTH, + time_cost=self.time_cost, + memory_cost=self.memory_cost, + parallelism=self.parallelism, + ) + + +class BCryptSHA256PasswordHasher(BasePasswordHasher): + """ + Secure password hashing using the bcrypt algorithm (recommended) + + This is considered by many to be the most secure algorithm but you + must first install the bcrypt library. Please be warned that + this library depends on native C code and might cause portability + issues. + """ + + algorithm = "bcrypt_sha256" + digest = hashlib.sha256 + library = ("bcrypt", "bcrypt") + rounds = 12 + + def salt(self): + bcrypt = self._load_library() + return bcrypt.gensalt(self.rounds) + + def encode(self, password, salt): + bcrypt = self._load_library() + password = password.encode() + # Hash the password prior to using bcrypt to prevent password + # truncation as described in #20138. + if self.digest is not None: + # Use binascii.hexlify() because a hex encoded bytestring is str. + password = binascii.hexlify(self.digest(password).digest()) + + data = bcrypt.hashpw(password, salt) + return "%s$%s" % (self.algorithm, data.decode("ascii")) + + def decode(self, encoded): + algorithm, empty, algostr, work_factor, data = encoded.split("$", 4) + assert algorithm == self.algorithm + return { + "algorithm": algorithm, + "algostr": algostr, + "checksum": data[22:], + "salt": data[:22], + "work_factor": int(work_factor), + } + + def verify(self, password, encoded): + algorithm, data = encoded.split("$", 1) + assert algorithm == self.algorithm + encoded_2 = self.encode(password, data.encode("ascii")) + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("work factor"): decoded["work_factor"], + _("salt"): mask_hash(decoded["salt"]), + _("checksum"): mask_hash(decoded["checksum"]), + } + + def must_update(self, encoded): + decoded = self.decode(encoded) + return decoded["work_factor"] != self.rounds + + def harden_runtime(self, password, encoded): + _, data = encoded.split("$", 1) + salt = data[:29] # Length of the salt in bcrypt. + rounds = data.split("$")[2] + # work factor is logarithmic, adding one doubles the load. + diff = 2 ** (self.rounds - int(rounds)) - 1 + while diff > 0: + self.encode(password, salt.encode("ascii")) + diff -= 1 + + +class BCryptPasswordHasher(BCryptSHA256PasswordHasher): + """ + Secure password hashing using the bcrypt algorithm + + This is considered by many to be the most secure algorithm but you + must first install the bcrypt library. Please be warned that + this library depends on native C code and might cause portability + issues. + + This hasher does not first hash the password which means it is subject to + bcrypt's 72 bytes password truncation. Most use cases should prefer the + BCryptSHA256PasswordHasher. + """ + + algorithm = "bcrypt" + digest = None + + +class ScryptPasswordHasher(BasePasswordHasher): + """ + Secure password hashing using the Scrypt algorithm. + """ + + algorithm = "scrypt" + block_size = 8 + maxmem = 0 + parallelism = 1 + work_factor = 2**14 + + def encode(self, password, salt, n=None, r=None, p=None): + self._check_encode_args(password, salt) + n = n or self.work_factor + r = r or self.block_size + p = p or self.parallelism + hash_ = hashlib.scrypt( + password.encode(), + salt=salt.encode(), + n=n, + r=r, + p=p, + maxmem=self.maxmem, + dklen=64, + ) + hash_ = base64.b64encode(hash_).decode("ascii").strip() + return "%s$%d$%s$%d$%d$%s" % (self.algorithm, n, salt, r, p, hash_) + + def decode(self, encoded): + algorithm, work_factor, salt, block_size, parallelism, hash_ = encoded.split( + "$", 6 + ) + assert algorithm == self.algorithm + return { + "algorithm": algorithm, + "work_factor": int(work_factor), + "salt": salt, + "block_size": int(block_size), + "parallelism": int(parallelism), + "hash": hash_, + } + + def verify(self, password, encoded): + decoded = self.decode(encoded) + encoded_2 = self.encode( + password, + decoded["salt"], + decoded["work_factor"], + decoded["block_size"], + decoded["parallelism"], + ) + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("work factor"): decoded["work_factor"], + _("block size"): decoded["block_size"], + _("parallelism"): decoded["parallelism"], + _("salt"): mask_hash(decoded["salt"]), + _("hash"): mask_hash(decoded["hash"]), + } + + def must_update(self, encoded): + decoded = self.decode(encoded) + return ( + decoded["work_factor"] != self.work_factor + or decoded["block_size"] != self.block_size + or decoded["parallelism"] != self.parallelism + ) + + def harden_runtime(self, password, encoded): + # The runtime for Scrypt is too complicated to implement a sensible + # hardening algorithm. + pass + + +class SHA1PasswordHasher(BasePasswordHasher): + """ + The SHA1 password hashing algorithm (not recommended) + """ + + algorithm = "sha1" + + def encode(self, password, salt): + self._check_encode_args(password, salt) + hash = hashlib.sha1((salt + password).encode()).hexdigest() + return "%s$%s$%s" % (self.algorithm, salt, hash) + + def decode(self, encoded): + algorithm, salt, hash = encoded.split("$", 2) + assert algorithm == self.algorithm + return { + "algorithm": algorithm, + "hash": hash, + "salt": salt, + } + + def verify(self, password, encoded): + decoded = self.decode(encoded) + encoded_2 = self.encode(password, decoded["salt"]) + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("salt"): mask_hash(decoded["salt"], show=2), + _("hash"): mask_hash(decoded["hash"]), + } + + def must_update(self, encoded): + decoded = self.decode(encoded) + return must_update_salt(decoded["salt"], self.salt_entropy) + + def harden_runtime(self, password, encoded): + pass + + +class MD5PasswordHasher(BasePasswordHasher): + """ + The Salted MD5 password hashing algorithm (not recommended) + """ + + algorithm = "md5" + + def encode(self, password, salt): + self._check_encode_args(password, salt) + hash = hashlib.md5((salt + password).encode()).hexdigest() + return "%s$%s$%s" % (self.algorithm, salt, hash) + + def decode(self, encoded): + algorithm, salt, hash = encoded.split("$", 2) + assert algorithm == self.algorithm + return { + "algorithm": algorithm, + "hash": hash, + "salt": salt, + } + + def verify(self, password, encoded): + decoded = self.decode(encoded) + encoded_2 = self.encode(password, decoded["salt"]) + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("salt"): mask_hash(decoded["salt"], show=2), + _("hash"): mask_hash(decoded["hash"]), + } + + def must_update(self, encoded): + decoded = self.decode(encoded) + return must_update_salt(decoded["salt"], self.salt_entropy) + + def harden_runtime(self, password, encoded): + pass + + +class UnsaltedSHA1PasswordHasher(BasePasswordHasher): + """ + Very insecure algorithm that you should *never* use; store SHA1 hashes + with an empty salt. + + This class is implemented because Django used to accept such password + hashes. Some older Django installs still have these values lingering + around so we need to handle and upgrade them properly. + """ + + algorithm = "unsalted_sha1" + + def salt(self): + return "" + + def encode(self, password, salt): + if salt != "": + raise ValueError("salt must be empty.") + hash = hashlib.sha1(password.encode()).hexdigest() + return "sha1$$%s" % hash + + def decode(self, encoded): + assert encoded.startswith("sha1$$") + return { + "algorithm": self.algorithm, + "hash": encoded[6:], + "salt": None, + } + + def verify(self, password, encoded): + encoded_2 = self.encode(password, "") + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("hash"): mask_hash(decoded["hash"]), + } + + def harden_runtime(self, password, encoded): + pass + + +class UnsaltedMD5PasswordHasher(BasePasswordHasher): + """ + Incredibly insecure algorithm that you should *never* use; stores unsalted + MD5 hashes without the algorithm prefix, also accepts MD5 hashes with an + empty salt. + + This class is implemented because Django used to store passwords this way + and to accept such password hashes. Some older Django installs still have + these values lingering around so we need to handle and upgrade them + properly. + """ + + algorithm = "unsalted_md5" + + def salt(self): + return "" + + def encode(self, password, salt): + if salt != "": + raise ValueError("salt must be empty.") + return hashlib.md5(password.encode()).hexdigest() + + def decode(self, encoded): + return { + "algorithm": self.algorithm, + "hash": encoded, + "salt": None, + } + + def verify(self, password, encoded): + if len(encoded) == 37 and encoded.startswith("md5$$"): + encoded = encoded[5:] + encoded_2 = self.encode(password, "") + return constant_time_compare(encoded, encoded_2) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("hash"): mask_hash(decoded["hash"], show=3), + } + + def harden_runtime(self, password, encoded): + pass + + +class CryptPasswordHasher(BasePasswordHasher): + """ + Password hashing using UNIX crypt (not recommended) + + The crypt module is not supported on all platforms. + """ + + algorithm = "crypt" + library = "crypt" + + def salt(self): + return get_random_string(2) + + def encode(self, password, salt): + crypt = self._load_library() + if len(salt) != 2: + raise ValueError("salt must be of length 2.") + hash = crypt.crypt(password, salt) + if hash is None: # A platform like OpenBSD with a dummy crypt module. + raise TypeError("hash must be provided.") + # we don't need to store the salt, but Django used to do this + return "%s$%s$%s" % (self.algorithm, "", hash) + + def decode(self, encoded): + algorithm, salt, hash = encoded.split("$", 2) + assert algorithm == self.algorithm + return { + "algorithm": algorithm, + "hash": hash, + "salt": salt, + } + + def verify(self, password, encoded): + crypt = self._load_library() + decoded = self.decode(encoded) + data = crypt.crypt(password, decoded["hash"]) + return constant_time_compare(decoded["hash"], data) + + def safe_summary(self, encoded): + decoded = self.decode(encoded) + return { + _("algorithm"): decoded["algorithm"], + _("salt"): decoded["salt"], + _("hash"): mask_hash(decoded["hash"], show=3), + } + + def harden_runtime(self, password, encoded): + pass diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8fa02deb0bd47b5d3f056fdf30ac5c346d4da7f GIT binary patch literal 7392 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, 2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-20 17:08+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Persoonlike inligting" + +msgid "Permissions" +msgstr "Toestemmings" + +msgid "Important dates" +msgstr "Belangrike datums" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-objek met primêre sleutel %(key)r bestaan nie." + +msgid "Password changed successfully." +msgstr "Wagwoord is suksesvol verander." + +#, python-format +msgid "Change password: %s" +msgstr "Verander wagwoord: %s" + +msgid "Authentication and Authorization" +msgstr "Waarmerking en magtiging" + +msgid "password" +msgstr "wagwoord" + +msgid "last login" +msgstr "laas aangemeld" + +msgid "No password set." +msgstr "Geen wagwoord gestel nie." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ongeldige wagwoordformaat of onbekende hutsalgoritme." + +msgid "The two password fields didn’t match." +msgstr "Die twee wagwoordvelde stem nie ooreen nie" + +msgid "Password" +msgstr "Wagwoord" + +msgid "Password confirmation" +msgstr "Wagwoordbevestiging" + +msgid "Enter the same password as before, for verification." +msgstr "Tik die wagwoord net soos tevore om te bevestig." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Rou wagwoorde word nie gestoor nie, dus is daar geen manier om die gebruiker " +"se wagwoord te sien nie, maar die wagwoord kan gewysig word met hierdie vorm." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Tik asb. 'n korrekte %(username)s en wagwoord. Neem kennis dat altwee velde " +"moontlik kassensitief is." + +msgid "This account is inactive." +msgstr "Dié rekening is nie aktief nie." + +msgid "Email" +msgstr "E-pos" + +msgid "New password" +msgstr "Nuwe wagwoord" + +msgid "New password confirmation" +msgstr "Bevestiging van nuwe wagwoord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Die ou wagwoord is verkeerd ingetik. Tik dit asb. weer in." + +msgid "Old password" +msgstr "Ou wagwoord" + +msgid "Password (again)" +msgstr "Wagwoord (weer)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iterasies" + +msgid "salt" +msgstr "sout" + +msgid "hash" +msgstr "hutswaarde" + +msgid "variety" +msgstr "variëteit" + +msgid "version" +msgstr "weergawe" + +msgid "memory cost" +msgstr "geheuekoste" + +msgid "time cost" +msgstr "tydkoste" + +msgid "parallelism" +msgstr "parallelisme" + +msgid "work factor" +msgstr "werkfaktor" + +msgid "checksum" +msgstr "kontrolesom" + +msgid "name" +msgstr "naam" + +msgid "content type" +msgstr "inhoudtipe" + +msgid "codename" +msgstr "kodenaam" + +msgid "permission" +msgstr "toestemming" + +msgid "permissions" +msgstr "toestemmings" + +msgid "group" +msgstr "groep" + +msgid "groups" +msgstr "groepe" + +msgid "superuser status" +msgstr "supergebruikerstatus" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Dui aan dat die gebruiker alle toestemmings het sonder om hulle eksplisiet " +"toe te ken." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Die groepe waaraan die gebruiker behoort. ’n Gebruiker sal alle toestemmings " +"hê wat aan elkeen van sy groepe gegee is." + +msgid "user permissions" +msgstr "gebruikertoestemmings" + +msgid "Specific permissions for this user." +msgstr "Spesifieke toestemmings vir dié gebruiker." + +msgid "username" +msgstr "gebruikernaam" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Vereis. Hoogstens 150 karakters. Slegs: letters, syfers en die karakters @/./" +"+/-/_" + +msgid "A user with that username already exists." +msgstr "’n Gebruiker met daardie gebruikernaam bestaan reeds." + +msgid "first name" +msgstr "naam" + +msgid "last name" +msgstr "van" + +msgid "email address" +msgstr "e-posadres" + +msgid "staff status" +msgstr "personeelstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Dui aan of die gebruiker by dié adminwerf kan aanmeld." + +msgid "active" +msgstr "aktief" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Dui aan of dié gebruiker as aktief gesien moet word. Neem merkie weg in " +"plaas van om rekeninge te skrap." + +msgid "date joined" +msgstr "datum aangesluit" + +msgid "user" +msgstr "gebruiker" + +msgid "users" +msgstr "gebruikers" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Dié wagwoord is te kort. Dit moet ten minste %(min_length)d karakter bevat." +msgstr[1] "" +"Dié wagwoord is te kort. Dit moet ten minste %(min_length)d karakters bevat." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "’n Wagwoord moet ten minste %(min_length)d karakter bevat." +msgstr[1] "’n Wagwoord moet ten minste %(min_length)d karakters bevat." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Die wagwoord is te soortgelyk aan die %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Die wagwoord mag nie soortgelyk wees aan u ander persoonlike inligting nie." + +msgid "This password is too common." +msgstr "Dié wagwoord is te algemeen." + +msgid "Your password can’t be a commonly used password." +msgstr "U wagwoord mag nie ’n algemeen gebruikte wagwoord wees nie." + +msgid "This password is entirely numeric." +msgstr "Dié wagwoord is heeltemal numeries." + +msgid "Your password can’t be entirely numeric." +msgstr "Die wagwoord mag nie geheel numeries wees nie." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Wagwoordherstel op %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Tik 'n geldige gebruikernaam. Dié waarde mag slegs alfabetletters, syfers en " +"die karakters @/./+/-/_ bevat." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Tik 'n geldige gebruikernaam. Dié waarde mag slegs letters, syfers en die " +"karakters @/./+/-/_ bevat." + +msgid "Logged out" +msgstr "Afgemeld" + +msgid "Password reset" +msgstr "Wagwoordherstel" + +msgid "Password reset sent" +msgstr "Wagwoordherstel gestuur" + +msgid "Enter new password" +msgstr "Tik nuwe wagwoord" + +msgid "Password reset unsuccessful" +msgstr "Herstel van wagwoord onsuksesvol" + +msgid "Password reset complete" +msgstr "Herstel van wagwoord is voltooi" + +msgid "Password change" +msgstr "Wagwoordverandering" + +msgid "Password change successful" +msgstr "Verandering van wagwoord was suksesvol" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..970d5e9b05e0d995df4294cdcb0b87ad109af9d2 GIT binary patch literal 10040 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, 2013,2021 +# Bashar Al-Abdulhadi, 2015-2016,2021 +# Bashar Al-Abdulhadi, 2014 +# Eyad Toma , 2013 +# Jannis Leidel , 2011 +# Omar Lajam, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-15 21:38+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Personal info" +msgstr "المعلومات الشخصية" + +msgid "Permissions" +msgstr "الصلاحيات" + +msgid "Important dates" +msgstr "تواريخ مهمة" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "العنصر من نوع %(name)s ذو الحقل الأساسي %(key)r غير موجود." + +msgid "Password changed successfully." +msgstr "تم تغيير كلمة المرور بنجاح." + +#, python-format +msgid "Change password: %s" +msgstr "غيّر كلمة المرور: %s" + +msgid "Authentication and Authorization" +msgstr "المصادقة والتفويض" + +msgid "password" +msgstr "كلمة المرور" + +msgid "last login" +msgstr "آخر دخول" + +msgid "No password set." +msgstr "لم يتم تعيين كلمة المرور." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"صيغة كلمة المرور غير صحيحة أو أن خوارزمية البعثرة (hashing) غير معروفة." + +msgid "The two password fields didn’t match." +msgstr "حقلا كلمة المرور غير متطابقين." + +msgid "Password" +msgstr "كلمة المرور" + +msgid "Password confirmation" +msgstr "تأكيد كلمة المرور" + +msgid "Enter the same password as before, for verification." +msgstr "أدخل كلمة المرور أعلاه مرة أخرى لتأكيدها." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"لا يتم حفظ كلمات المرور بصورتها الأصلية، لذلك لا يمكنك عرض كلمة مرور هذا " +"المستخدم، لكن يمكنك تغييرها باستخدام هذا النموذج" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "الرجاء إدخال %(username)s وكلمة السر الصحيحين." + +msgid "This account is inactive." +msgstr "هذا الحساب غير نشط." + +msgid "Email" +msgstr "بريد إلكتروني" + +msgid "New password" +msgstr "كلمة المرور الجديدة" + +msgid "New password confirmation" +msgstr "تأكيد كلمة المرور الجديدة" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "كلمة مرورك القديمة غير صحيحة. رجاءً أدخلها مرة أخرى." + +msgid "Old password" +msgstr "كلمة المرور القديمة" + +msgid "Password (again)" +msgstr "كلمة المرور (مجدداً)" + +msgid "algorithm" +msgstr "خوارزمية" + +msgid "iterations" +msgstr "التكرارات" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "منوّع" + +msgid "version" +msgstr "إصدار" + +msgid "memory cost" +msgstr "استهلاك الذاكرة" + +msgid "time cost" +msgstr "المدة المطلوبة" + +msgid "parallelism" +msgstr "التوازي" + +msgid "work factor" +msgstr "عامل العمل" + +msgid "checksum" +msgstr "تدقيق المجموع" + +msgid "block size" +msgstr "مقاس الكتله (البلوك)" + +msgid "name" +msgstr "الاسم" + +msgid "content type" +msgstr "نوع المحتوى" + +msgid "codename" +msgstr "الاسم الرمزي" + +msgid "permission" +msgstr "الصلاحية" + +msgid "permissions" +msgstr "الصلاحيات" + +msgid "group" +msgstr "مجموعة" + +msgid "groups" +msgstr "المجموعات" + +msgid "superuser status" +msgstr "حالة المستخدم الفائق" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"يقضي بأن هذا المستخدم يمتلك كافة الصلاحيات دون الحاجة لمنحها له تصريحاً." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"المجموعات التي ينتمي إليها هذا المستخدم. يحصل المستخدم على كافة الصلاحيات " +"الممنوحة لكل مجموعة ينتمي إليها." + +msgid "user permissions" +msgstr "صلاحيات المستخدم" + +msgid "Specific permissions for this user." +msgstr "صلاحيات خاصة بهذا المستخدم." + +msgid "username" +msgstr "اسم المستخدم" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "مطلوب. 150 رمزاً أو أقل، مكونة من حروف وأرقام و @/./+/-/_ فقط" + +msgid "A user with that username already exists." +msgstr "هناك مستخدم موجود مسبقاً بهذا الاسم." + +msgid "first name" +msgstr "الاسم الأول" + +msgid "last name" +msgstr "الاسم الأخير" + +msgid "email address" +msgstr "عنوان بريد إلكتروني" + +msgid "staff status" +msgstr "حالة الطاقم" + +msgid "Designates whether the user can log into this admin site." +msgstr "يحدد ما إذا كان يمكن للمستخدم الدخول إلى موقع الإدارة هذا." + +msgid "active" +msgstr "نشط" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"يحدد ما إذا كان المستخدم سيُعامل على أنّه نشط. أزل تحديد هذا الحقل بدلاً من حذف " +"الحسابات." + +msgid "date joined" +msgstr "تاريخ الانضمام" + +msgid "user" +msgstr "مستخدم" + +msgid "users" +msgstr "المستخدمون" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف على الأقل." +msgstr[1] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف واحد على الأقل." +msgstr[2] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرفين على الأقل." +msgstr[3] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حروف على الأقل." +msgstr[4] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف على الأقل." +msgstr[5] "" +"كلمة المرور هذه قصيرة جداً. يجب أن تتكون من %(min_length)d رمزاً على الأقل." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرف على الأقل." +msgstr[1] "" +"كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرف واحد على الأقل." +msgstr[2] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرفين على الأقل." +msgstr[3] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حروف على الأقل." +msgstr[4] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d أحرف على الأقل." +msgstr[5] "يجب أن تتكون كلمة المرور من %(min_length)d رمزاً على الأقل." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "كلمة المرور مشابهة جداً لـ %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "لا يمكن لكلمة المرور أن تكون مشابهة للمعلومات الشخصية الأخرى." + +msgid "This password is too common." +msgstr "كلمة المرور هذه شائعة جداً." + +msgid "Your password can’t be a commonly used password." +msgstr "لا يمكن أن تكون كلمة المرور شائعة الاستخدام." + +msgid "This password is entirely numeric." +msgstr "كلمة المرور هذه تتكون من أرقام فقط." + +msgid "Your password can’t be entirely numeric." +msgstr "لا يمكن أن تكون كلمة المرور مكونة من أرقام فقط." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "إعادة تعيين كلمة المرور على %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"أدخل اسم مستخدم صحيحاً. يمكن أن يتكون اسم المستخدم من أحرف إنجليزية وأرقام و " +"الرموز @/./+/-/_ فقط." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"أدخل اسم مستخدم صحيحاً. يمكن أن يتكون اسم المستخدم من حروف وأرقام و الرموز " +"@/./+/-/_ فقط." + +msgid "Logged out" +msgstr "تم الخروج" + +msgid "Password reset" +msgstr "إعادة ضبط كلمة المرور" + +msgid "Password reset sent" +msgstr " تم ارسال إعادة ضبط كلمة المرور" + +msgid "Enter new password" +msgstr "أدخل كلمة المرور الجديدة" + +msgid "Password reset unsuccessful" +msgstr "فشل عملية إعادة تعيين كلمة المرور" + +msgid "Password reset complete" +msgstr "تمت إعادة ضبط كلمة المرور" + +msgid "Password change" +msgstr "تغيير كلمة المرور" + +msgid "Password change successful" +msgstr "تم تغيير كلمة المرور بنجاح" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd61c62c71601f78e40fe2d508e419be5fda4270 GIT binary patch literal 10167 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 GTk}7n12N11 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..bed01f3f0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,316 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-14 22:38+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Personal info" +msgstr "المعلومات الشخصية" + +msgid "Permissions" +msgstr "الصلاحيات" + +msgid "Important dates" +msgstr "تواريخ مهمة" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "العنصر %(name)s الذي به الحقل الأساسي %(key)r غير موجود." + +msgid "Password changed successfully." +msgstr "تم تغيير كلمة المرور بنجاح." + +#, python-format +msgid "Change password: %s" +msgstr "غيّر كلمة المرور: %s" + +msgid "Authentication and Authorization" +msgstr "المصادقة والتخويل" + +msgid "password" +msgstr "كلمة المرور" + +msgid "last login" +msgstr "آخر دخول" + +msgid "No password set." +msgstr "لا يوجد كلمة سر حتى الآن." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "تنسيق كلمة المرور غير صالح أو خوارزمية التجزئة غير معروفة." + +msgid "The two password fields didn’t match." +msgstr "حقلا كلمتي المرور غير متطابقين." + +msgid "Password" +msgstr "كلمة المرور" + +msgid "Password confirmation" +msgstr "تأكيد كلمة المرور" + +msgid "Enter the same password as before, for verification." +msgstr "أدخل كلمة المرور أعلاه مرة أخرى لتأكيدها." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"لا يتم تخزين كلمات المرور الخام ، لذلك لا توجد طريقة لرؤية كلمة مرور هذا " +"المستخدم ، ولكن يمكنك تغيير كلمة المرور باستخدام هذا " +"النموذج." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"الرجاء إدخال %(username)s وكلمة المرور الصحيحين. لاحظ أن كلا الحقلين قد يكون " +"حساسًا لحالة الأحرف." + +msgid "This account is inactive." +msgstr "هذا الحساب غير نشط." + +msgid "Email" +msgstr "بريد إلكتروني" + +msgid "New password" +msgstr "كلمة المرور الجديدة" + +msgid "New password confirmation" +msgstr "تأكيد كلمة المرور الجديدة" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "كلمة مرورك القديمة غير صحيحة. رجاءً أدخلها مرة أخرى." + +msgid "Old password" +msgstr "كلمة المرور القديمة" + +msgid "Password (again)" +msgstr "كلمة المرور (مجدداً)" + +msgid "algorithm" +msgstr "خوارزمية" + +msgid "iterations" +msgstr "التكرارات" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "تنوع" + +msgid "version" +msgstr "إصدار" + +msgid "memory cost" +msgstr "تكلفة الذاكرة" + +msgid "time cost" +msgstr "تكلفة الوقت" + +msgid "parallelism" +msgstr "تواز" + +msgid "work factor" +msgstr "عامل العمل" + +msgid "checksum" +msgstr "تدقيق المجموع" + +msgid "name" +msgstr "الاسم" + +msgid "content type" +msgstr "نوع المحتوى" + +msgid "codename" +msgstr "الاسم الرمزي" + +msgid "permission" +msgstr "الصلاحية" + +msgid "permissions" +msgstr "الصلاحيات" + +msgid "group" +msgstr "مجموعة" + +msgid "groups" +msgstr "المجموعات" + +msgid "superuser status" +msgstr "حالة المستخدم الخارق" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"حدد بأن هذا المستخدم يمتلك كافة الصلاحيات دون الحاجة لتحديدها له تصريحا." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"المجموعات التي ينتمي إليها هذا المستخدم. ويمكن للمستخدم الحصول على كافة " +"الأذونات الممنوحة لكل من مجموعاتهم." + +msgid "user permissions" +msgstr "صلاحيات المستخدم" + +msgid "Specific permissions for this user." +msgstr "صلاحيات خاصة لهذا المستخدم." + +msgid "username" +msgstr "اسم المستخدم" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "مطلوب. 150 حرف أو أقل. الحروف والأرقام و @ /. / + / - / _ فقط." + +msgid "A user with that username already exists." +msgstr "هناك مستخدم موجود مسبقاً بهذا الاسم." + +msgid "first name" +msgstr "الاسم الأول" + +msgid "last name" +msgstr "الاسم الأخير" + +msgid "email address" +msgstr "عنوان بريد إلكتروني" + +msgid "staff status" +msgstr "حالة الطاقم" + +msgid "Designates whether the user can log into this admin site." +msgstr "يحدد ما إذا كان المستخدم يستطيع الدخول إلى موقع الإدارة هذا." + +msgid "active" +msgstr "نشط" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"يحدد ما إذا كان المستخدم سيُعامل على أنّه نشط. أزل تحديد ها الخيار بدلاً من حذف " +"الحسابات." + +msgid "date joined" +msgstr "تاريخ الانضمام" + +msgid "user" +msgstr "مستخدم" + +msgid "users" +msgstr "المستخدمين" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف على الأقل." +msgstr[1] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف واحد على الأقل." +msgstr[2] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرفين على الأقل." +msgstr[3] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حروف على الأقل." +msgstr[4] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف على الأقل." +msgstr[5] "" +"كلمة المرور هذه قصيرة جدا. يجب أن تتكون من %(min_length)d حرف على الأقل." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرف على الأقل." +msgstr[1] "" +"كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرف واحد على الأقل." +msgstr[2] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرفين على الأقل." +msgstr[3] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حروف على الأقل." +msgstr[4] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d أحرف على الأقل." +msgstr[5] "كلمة المرور الخاصة بك يجب أن تتضمن %(min_length)d حرف على الأقل." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "كلمة المرور هذه مشابة جدا لـ %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"كلمة المرور الخاصة بكم لا يمكن أن تكون مشابة لأي من المعلومات الشخصية الأخرى " +"الخاصة بك." + +msgid "This password is too common." +msgstr "كلمة المرور هذه شائعة جدا." + +msgid "Your password can’t be a commonly used password." +msgstr "كلمة المرور الخاصة بك لا يمكن أن تكون كلمة مرور مستخدمة بشكل شائع." + +msgid "This password is entirely numeric." +msgstr "كلمة المرور هذه تتكون من أرقام فقط." + +msgid "Your password can’t be entirely numeric." +msgstr "كلمة المرور الخاصة بك لا يمكن أن تكون أرقام فقط." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "إعادة تعيين كلمة المرور على %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"أدخل اسم مستخدم صالح. قد تحتوي هذه القيمة على الأحرف الإنجليزية والأرقام " +"والأحرف @ /. / + / - / _." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"أدخل اسم مستخدم صالح. قد تحتوي هذه القيمة على الأحرف والأرقام والأحرف @ /. / " +"+ / - / _." + +msgid "Logged out" +msgstr "تم الخروج" + +msgid "Password reset" +msgstr "إعادة ضبط كلمة المرور" + +msgid "Password reset sent" +msgstr "إعادة ضبط كلمة المرور تم ارسالها" + +msgid "Enter new password" +msgstr "أدخل كلمة المرور الجديدة" + +msgid "Password reset unsuccessful" +msgstr "فشل عملية إعادة تعيين كلمة المرور" + +msgid "Password reset complete" +msgstr "تم إعادة ضبط كلمة المرور بنجاح" + +msgid "Password change" +msgstr "تغيير كلمة المرور" + +msgid "Password change successful" +msgstr "تم تغيير كلمة المرور بنجاح" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e5f1ace201e93b9eee3cbfaa463c19a020e2d223 GIT binary patch literal 2250 zcmZvcOKco97{?8i*Yap-ct0IPl}2H9Hz7coG(ZWd6lg-I79=EuXFmIT`1|IM<43+^ zXtU@~qCa;FV=eIcTQQ*h3C@Ez!5MJoHpXrT=fI<21ilEag7<_ZrB-x9j&ANP0d6DK1}t3*dJko&PI{qu5^{`SUkOa{ttv!Dg7m z=0UQv36lIW_$asn(!LHzavy6jQNB?lKj>~Kuh<#xtt|OKxjuJ&;lfgjTyl|>Qlyu-+*8)sCR^(Z z-IKf!)(%XW#{7h3>$y-F+sF%3I-wm;g_D+T=v|SibS%odrp$4)DY@4dwHavM7q+i- z4@!Ebgzmh_w&Y;EgKe4doLlLdY`a!Fp712tlXB~mL|WVRS$1h6#}lKwiqtBj*|scm zWi6(b=GJJDaizP4b^4OK!IZYHl38kbs!~1YIQA#~CZv?*B1w#glb9+k5~p@$lT~D6 zKUmV2$wljPCMh;tq-hE37;LeQQ(#%IG`^@t%QAu2ndvEAO@l-jMuBF<*!ZcbW!B?E zxIF8G^On&(41BVqdK=E8&+xu97i8k1jWl{6YeXdG=>^=ZX`GjIjnSsh?Y(}~uQ3KYobO_qrR9Y- zTH_pCjyk2#HWSX2F@H;Fji8>BDwP>O4QsG`Jqybw-O{VrqkCTTWYm!&kNFwve5r)y zC;QG7ajP{L44RIPR9(5(OibRYoEjmk_qU+CHQ(6W*j%6Zzu0Uy){J&i!>&sO9CUKe zwTetAy+V0bA_Z69>zs{FP2@;fSC-MbPE3kaj`^t_<;I4_9GV*2nJ+~aokjlJnCl`e z?dsABucoUfHJ@GOi}NcD_Q7zUON&~Qs1lT+7p3x)#`KnJgOW_=>er}7k^5AX^c{X% zIs8F{id-{gIlSr_T@>ylR#6K{!-uqK4P>f6S{Z*U(QT{6#7uBzUOd zUuAOad?gt|qCmV%~-9Bs07)Co^KZdq_Vbq$NEg#D<5bC1f(MYTIGO0y$^PL`@t zswo?*IMcnLmVM#F2t$R2R0y-h#gR*i*g>T-QOGPCeh-nbY3k, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Dates importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Contraseña camudada con ésitu." + +#, python-format +msgid "Change password: %s" +msgstr "Camudar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "aniciu de sesión caberu" + +msgid "No password set." +msgstr "Nun s'afitó la contraseña." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formatu de contraseña inválidu o algoritmu hash inválidu." + +msgid "The two password fields didn't match." +msgstr "Nun concasen los dos campos de contraseña." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Confirmación de contraseña" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Esta cuenta ta inactiva" + +msgid "Email" +msgstr "Corréu" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "algoritmu" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "suma de comprobación" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "permisu" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupu" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "estáu de superusuariu" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "permisos d'usuariu" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "nome d'usuariu" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Yá esiste un usuariu con esi nome d'usuariu." + +msgid "first name" +msgstr "nome" + +msgid "last name" +msgstr "apellíos" + +msgid "email address" +msgstr "direición de corréu" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "activu" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "usuariu" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4518a35a1539af3decef935a4a477f814e1fd244 GIT binary patch literal 7448 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, 2011 +# Emin Mastizada , 2018,2020 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-12 07:30+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Şəxsi məlumat" + +msgid "Permissions" +msgstr "İcazələr" + +msgid "Important dates" +msgstr "Vacib tarixlər" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Əsas %(key)r açarı ilə %(name)s obyekti mövcud deyil." + +msgid "Password changed successfully." +msgstr "Parol uğurla dəyişdirildi" + +#, python-format +msgid "Change password: %s" +msgstr "Parolu dəyiş: %s" + +msgid "Authentication and Authorization" +msgstr "Təsdiqləmə və Səlahiyyət" + +msgid "password" +msgstr "parol" + +msgid "last login" +msgstr "son dəfə daxil olub" + +msgid "No password set." +msgstr "Parol qurulmayıb." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Xətalı parol formatı və ya bilinməyən heş alqoritması." + +msgid "The two password fields didn’t match." +msgstr "İki parol sahələrinin dəyərləri üst-üstə düşmədi." + +msgid "Password" +msgstr "Parol" + +msgid "Password confirmation" +msgstr "Parolun təsdiqi" + +msgid "Enter the same password as before, for verification." +msgstr "Təsdiqləmək üçün əvvəlki ilə eyni parolu daxil edin." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Düz parollar saxlanmadığı üçün bu istifadəçinin parolunu görmək mümkün " +"deyil, amma bu formadan istifadə edərək parolunu dəyişə " +"bilərsiz." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Lütfən düzgün %(username)s və parol daxil edin. Nəzərə alın ki, hər ikisi " +"böyük-kiçik hərflərə həssasdırlar." + +msgid "This account is inactive." +msgstr "Bu hesab qeyri-aktivdir." + +msgid "Email" +msgstr "E-poçt" + +msgid "New password" +msgstr "Yeni parol" + +msgid "New password confirmation" +msgstr "Yeni parolun təsdiqi" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Köhnə parolu səhv daxil etdiniz. Bir daha cəhd etməyinizi xahiş edirik." + +msgid "Old password" +msgstr "Köhnə parol" + +msgid "Password (again)" +msgstr "Parol (bir daha)" + +msgid "algorithm" +msgstr "alqoritm" + +msgid "iterations" +msgstr "təkrarlama" + +msgid "salt" +msgstr "duz" + +msgid "hash" +msgstr "heş" + +msgid "variety" +msgstr "müxtəliflik" + +msgid "version" +msgstr "versiya" + +msgid "memory cost" +msgstr "yaddaş xərci" + +msgid "time cost" +msgstr "vaxt xərci" + +msgid "parallelism" +msgstr "paralellik" + +msgid "work factor" +msgstr "iş faktoru" + +msgid "checksum" +msgstr "yoxlama dəyəri" + +msgid "name" +msgstr "ad" + +msgid "content type" +msgstr "məzmun növü" + +msgid "codename" +msgstr "kod adı" + +msgid "permission" +msgstr "icazə" + +msgid "permissions" +msgstr "icazələr" + +msgid "group" +msgstr "qrup" + +msgid "groups" +msgstr "qruplar" + +msgid "superuser status" +msgstr "superistifadəçi statusu" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "İstifadəçiyə bütün icazələri verir." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Bu istifadəçinin aid olduğu qruplar. İstifadə bu qruplardan hər birinə " +"verilən bütün icazələri alacaq." + +msgid "user permissions" +msgstr "səlahiyyətləri" + +msgid "Specific permissions for this user." +msgstr "Bu istifadəçiyə aid xüsusi icazələr." + +msgid "username" +msgstr "istifadəçi adı" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Tələb edilir. Ən az 150 simvol. Ancaq hərf, rəqəm və @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Bu istifadəçi adı altında başqa istifadəçi var." + +msgid "first name" +msgstr "ad" + +msgid "last name" +msgstr "soyad" + +msgid "email address" +msgstr "e-poçt ünvanı" + +msgid "staff status" +msgstr "admin statusu" + +msgid "Designates whether the user can log into this admin site." +msgstr "İstifadəçinin admin panelinə daxil olub, olmayacağını təyin edir." + +msgid "active" +msgstr "Aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"İstifadəçinin aktiv və ya qeyri-aktiv olmasını təyin edir. Hesabları silmək " +"əvəzinə bundan istifadə edin." + +msgid "date joined" +msgstr "qoşulub" + +msgid "user" +msgstr "istifadəçi" + +msgid "users" +msgstr "istifadəçilər" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Bu parol çox qısadır. Ən az %(min_length)d işarə olmalıdır." +msgstr[1] "Bu parol çox qısadır. Ən az %(min_length)d işarə olmalıdır." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Parolunuz ən az %(min_length)d işarə olmalıdır." +msgstr[1] "Parolunuz ən az %(min_length)d işarə olmalıdır." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Parolunuz %(verbose_name)s ilə çox bənzərdir." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Parolunuz digər şəxsi məlumatlarınıza çox bənzərdir." + +msgid "This password is too common." +msgstr "Bu parol çox ümumidir." + +msgid "Your password can’t be a commonly used password." +msgstr "Parolunuz çox istifadə edilən ümumişlək olmamalıdır." + +msgid "This password is entirely numeric." +msgstr "Bu parol ancaq rəqəmlərlədir." + +msgid "Your password can’t be entirely numeric." +msgstr "Parolunuz ancaq rəqəmlərlə ola bilməz." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s, parolun sıfırlanması" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Düzgün istifadəçi adı daxil edin. Bu dəyən ancaq İngiliscə hərflərdən, rəqəm " +"və @/./+/-/_ işarətlərindən ibarət ola bilər." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Düzgün istifadəçi adı daxil edin. Bu dəyən ancaq hərf, rəqəm və @/./+/-/_ " +"işarətlərindən ibarət ola bilər." + +msgid "Logged out" +msgstr "Çıxdınız" + +msgid "Password reset" +msgstr "Parol sıfırlama" + +msgid "Password reset sent" +msgstr "Parol sıfırlama göndərildi" + +msgid "Enter new password" +msgstr "Yeni parolu daxil edin" + +msgid "Password reset unsuccessful" +msgstr "Parol müvəffəqiyyətlə sıfırlandı" + +msgid "Password reset complete" +msgstr "Parol sıfırlama tamamlandı" + +msgid "Password change" +msgstr "Parol dəyişdirmə" + +msgid "Password change successful" +msgstr "Parol müvəffəqiyyətlə dəyişdirildi" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0df2cc86d1cf42f1c34cab377bca92f6c0e9c160 GIT binary patch literal 10033 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..ef91333b1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016-2017,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 16:48+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Personal info" +msgstr "Асабістыя зьвесткі" + +msgid "Permissions" +msgstr "Дазволы" + +msgid "Important dates" +msgstr "Важныя даты" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Аб'ект %(name)s з першасным ключом %(key)r не існуе." + +msgid "Password changed successfully." +msgstr "Пароль зьмянілі." + +#, python-format +msgid "Change password: %s" +msgstr "Зьмяніць пароль: %s" + +msgid "Authentication and Authorization" +msgstr "Аўтэнтыфікацыя і аўтарызацыя" + +msgid "password" +msgstr "пароль" + +msgid "last login" +msgstr "апошні раз уваходзіў" + +msgid "No password set." +msgstr "Пароль не зададзены." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Няправільны фармат паролю або невядомы алгарытм хэшавання." + +msgid "The two password fields didn’t match." +msgstr "Не супадаюць паролі ў двух палях." + +msgid "Password" +msgstr "Пароль" + +msgid "Password confirmation" +msgstr "Пацьвердзіце пароль" + +msgid "Enter the same password as before, for verification." +msgstr "Дзеля пэўнасьці набярыце такі самы пароль яшчэ раз." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Паролі не захоўваюцца ў такім выглядзе, як іх набралі, таму ўбачыць пароль " +"карыстальніка нельга, але яго можна зьмяніць выкарыстоўваючыгэту форму ." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Калі ласка, увядзіце правільны %(username)s і пароль. Адзначым, што абодва " +"палі могуць быць адчувальныя да рэгістра." + +msgid "This account is inactive." +msgstr "Рахунак ня дзейнічае." + +msgid "Email" +msgstr "Электронная пошта" + +msgid "New password" +msgstr "Новы пароль" + +msgid "New password confirmation" +msgstr "Пацьвердзіце новы пароль" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Пазначылі неадпаведны стары пароль. Набярыце яго зноўку." + +msgid "Old password" +msgstr "Стары пароль" + +msgid "Password (again)" +msgstr "Пароль (яшчэ раз)" + +msgid "algorithm" +msgstr "альґарытм" + +msgid "iterations" +msgstr "паўтарэньні" + +msgid "salt" +msgstr "соль" + +msgid "hash" +msgstr "скарот" + +msgid "variety" +msgstr "мноства" + +msgid "version" +msgstr "версія" + +msgid "memory cost" +msgstr "кошт памяці" + +msgid "time cost" +msgstr "кошт часу" + +msgid "parallelism" +msgstr "паралелізм" + +msgid "work factor" +msgstr "множнік працы" + +msgid "checksum" +msgstr "кантрольная сума" + +msgid "block size" +msgstr "памер блока" + +msgid "name" +msgstr "назва" + +msgid "content type" +msgstr "від змесціва" + +msgid "codename" +msgstr "найменьне" + +msgid "permission" +msgstr "дазвол" + +msgid "permissions" +msgstr "дазволы" + +msgid "group" +msgstr "суполка" + +msgid "groups" +msgstr "суполкі" + +msgid "superuser status" +msgstr "становішча спраўніка" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Паказвае, ці мае карыстальнік усе дазволы без таго, каб іх яўна прызначаць." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Суполкі, у якія ўваходзіць карыстальнік. Карыстальнік атрымае дазволы, якія " +"мае кожная ягоная суполка." + +msgid "user permissions" +msgstr "дазволы карыстальніка" + +msgid "Specific permissions for this user." +msgstr "Адмысловыя правы для гэтага карыстальніка." + +msgid "username" +msgstr "імя карыстальніка" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Абавязковае поле. Да 150 знакаў. Толькі літары, лічбы ды @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Карыстальнік з такім іменем ужо існуе." + +msgid "first name" +msgstr "імя" + +msgid "last name" +msgstr "прозьвішча" + +msgid "email address" +msgstr "адрас электроннай пошты" + +msgid "staff status" +msgstr "становішча" + +msgid "Designates whether the user can log into this admin site." +msgstr "Паказвае, ці можа карыстальнік ўваходзіць на кіраўнічую пляцоўку." + +msgid "active" +msgstr "дзейны" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Паказвае, ці трэба ставіцца да карыстальніка як да дзейнага. Замест таго " +"каб, каб выдаляць рахунак, зраіце карыстальніка нядзейным." + +msgid "date joined" +msgstr "калі далучылі" + +msgid "user" +msgstr "карыстальнік" + +msgid "users" +msgstr "карыстальнікі" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Гэты пароль занадта кароткі. Ён павінен мець не менш %(min_length)d сімвал." +msgstr[1] "" +"Гэты пароль занадта кароткі. Ён павінен мець не менш %(min_length)d сімвала." +msgstr[2] "" +"Гэты пароль занадта кароткі. Ён павінен мець не менш %(min_length)d сімвалаў." +msgstr[3] "" +"Гэты пароль занадта кароткі. Ён павінен мець не менш %(min_length)d сімвалаў." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваш пароль павінен мець не менш %(min_length)d сімвал." +msgstr[1] "Ваш пароль павінен мець не менш %(min_length)d сімвала." +msgstr[2] "Ваш пароль павінен мець не менш %(min_length)d сімвалаў." +msgstr[3] "Ваш пароль павінен мець не менш %(min_length)d сімвалаў." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Пароль занадта падобны да %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Ваш пароль ня можа быць занадта падобным да вашай іншай асабістай інфармацыі." + +msgid "This password is too common." +msgstr "Гэты пароль занадта распаўсюджаны." + +msgid "Your password can’t be a commonly used password." +msgstr "Ваш пароль ня можа быць адным з шырока распаўсюджаных пароляў." + +msgid "This password is entirely numeric." +msgstr "Гэты пароль цалкам лікавы." + +msgid "Your password can’t be entirely numeric." +msgstr "Ваш пароль ня можа быць цалкам лікавым." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Узнавіць пароль на %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Увядзіце імя карыстальніка. Гэта значэнне можа ўтрымліваць толькі Ангельскія " +"літары, лічбы і сімвалы @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Увядзіце імя карыстальніка. Гэта значэнне можа ўтрымліваць толькі літары, " +"лічбы і сімвалы @/./+/-/_." + +msgid "Logged out" +msgstr "Не ўвайшоў" + +msgid "Password reset" +msgstr "Аднаўленне пароля" + +msgid "Password reset sent" +msgstr "Запыт на аднаўленне пароля адасланы" + +msgid "Enter new password" +msgstr "Пазначце новы пароль" + +msgid "Password reset unsuccessful" +msgstr "Не ўдалося аднавіць пароль" + +msgid "Password reset complete" +msgstr "Аднаўленне пароля скончана" + +msgid "Password change" +msgstr "Змена пароля" + +msgid "Password change successful" +msgstr "Змена пароля прайшла паспяхова" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1d682adb8ac0ed184622ebd13c5230ee1393d837 GIT binary patch literal 9466 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..63b556eed --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,311 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# arneatec , 2022 +# Boris Chervenkov , 2012 +# Georgi Kostadinov , 2012 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2015 +# Venelin Stoykov , 2015-2016 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-14 10:14+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Лична информация" + +msgid "Permissions" +msgstr "Права" + +msgid "Important dates" +msgstr "Важни дати" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s обект с първичен ключ %(key)r не съществува." + +msgid "Password changed successfully." +msgstr "Паролата беше променена успешно. " + +#, python-format +msgid "Change password: %s" +msgstr "Промени парола: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентикация и оторизация" + +msgid "password" +msgstr "парола" + +msgid "last login" +msgstr "последно вписване" + +msgid "No password set." +msgstr "Не е зададена парола." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невалиден формат за парола или неизвестен алгоритъм за хеширане." + +msgid "The two password fields didn’t match." +msgstr "Двете полета за паролата не съвпадат. " + +msgid "Password" +msgstr "Парола" + +msgid "Password confirmation" +msgstr "Потвърждение на паролата" + +msgid "Enter the same password as before, for verification." +msgstr "Въведете същата парола като преди, за да потвърдите." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Паролите не се съхраняват в чист вид, така че е невъзможно да видите " +"паролата на този потребител, но можете да промените паролата чрез този формуляр." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Моля, въведете правилните %(username)s и парола. Имайте предвид, че и двете " +"полета могат да бъдат с малки или главни букви." + +msgid "This account is inactive." +msgstr "Този профил е неактивен." + +msgid "Email" +msgstr "Имейл" + +msgid "New password" +msgstr "Нова парола" + +msgid "New password confirmation" +msgstr "Потвърждение на новата парола" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Въвели сте погрешна стара парола. Въведете я отново. " + +msgid "Old password" +msgstr "Стара парола" + +msgid "Password (again)" +msgstr "Парола (отново)" + +msgid "algorithm" +msgstr "алгоритъм" + +msgid "iterations" +msgstr "повторения" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "разнообразие" + +msgid "version" +msgstr "версия" + +msgid "memory cost" +msgstr "разход памет" + +msgid "time cost" +msgstr "разход време" + +msgid "parallelism" +msgstr "паралелизъм" + +msgid "work factor" +msgstr "работен фактор" + +msgid "checksum" +msgstr "чексума" + +msgid "block size" +msgstr "размер на блока" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип на съдържанието" + +msgid "codename" +msgstr "код" + +msgid "permission" +msgstr "право" + +msgid "permissions" +msgstr "права" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статут на супер-потребител" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Указва, че този потребител има всички права (без да има нужда да се " +"изброяват изрично)." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групите на които този потребител принадлежи. Потребителят ще получи всички " +"разрешения, дадени на всяка една от своите групи." + +msgid "user permissions" +msgstr "права на потребител" + +msgid "Specific permissions for this user." +msgstr "Специфични права за този потребител" + +msgid "username" +msgstr "потребител" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Задължително. 150 знака или по-малко. Букви, цифри и @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Потребител с това потребителско име вече съществува. " + +msgid "first name" +msgstr "собствено име" + +msgid "last name" +msgstr "фамилно име" + +msgid "email address" +msgstr "имейл адрес" + +msgid "staff status" +msgstr "статус на персонал" + +msgid "Designates whether the user can log into this admin site." +msgstr "Указва дали този потребител има достъп до административния панел." + +msgid "active" +msgstr "активен" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Указва дали този потребител трябва да се третира като активен. Премахнете " +"тази отметката, вместо да изтривате профили." + +msgid "date joined" +msgstr "дата на регистриране" + +msgid "user" +msgstr "потребител" + +msgid "users" +msgstr "потребители" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Паролата е прекелно къса. Трябва да съдържа поне %(min_length)d символ." +msgstr[1] "" +"Паролата е прекелно къса. Трябва да съдържа поне %(min_length)d символа." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Вашата парола трябва да съдържа поне %(min_length)d символ." +msgstr[1] "Вашата парола трябва да съдържа поне %(min_length)d символа." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Паролата е много подобна на %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Вашата парола не може да прилича на останалата Ви лична информация." + +msgid "This password is too common." +msgstr "Тази парола е често срещана." + +msgid "Your password can’t be a commonly used password." +msgstr "Вашата парола не може да бъде често срещана." + +msgid "This password is entirely numeric." +msgstr "Тази парола е изцяло от цифри." + +msgid "Your password can’t be entirely numeric." +msgstr "Вашата парола не може да бъде само от цифри." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Промяна на парола за %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Въведете валидно потребителско име. То може да съдържа само букви на " +"латиница, цифри и @/./+/-/_ символи." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Въведете валидно потребителско име. То може да съдържа само букви, цифри и " +"@/./+/-/_ символи." + +msgid "Logged out" +msgstr "Извън системата" + +msgid "Password reset" +msgstr "Забравена парола" + +msgid "Password reset sent" +msgstr "Нулиране на паролата е изпратено" + +msgid "Enter new password" +msgstr "Въведете нова парола" + +msgid "Password reset unsuccessful" +msgstr "Неуспешна промяна на паролата " + +msgid "Password reset complete" +msgstr "Промяната на парола завърши" + +msgid "Password change" +msgstr "Промяна на парола" + +msgid "Password change successful" +msgstr "Паролата е сменена успешно" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9bb6607f4a6a6e07dfbbe29cd393b31a8896ffb9 GIT binary patch literal 5455 zcmbW3TZ|k>6^1JzKv+mfLV!SmQ@QWPnc0gsV2^Qxy>TKVUlwPBKnf4NGc_~q^mLEA zdpx!P2^`2p7Rm#%BL$PSWxF?ujcpd>i-c?;5%Cc5f{=JHvgQFKKp-BF5E3tZr>f`T zWq0k++UkF*>eRXX=bY-jde6bOyaIk2{401bc=Lyq`Y5;xybXLDd2&Z{P;(X{{}_hO)QGO+dzruUXak#qoACB0)!H^Cf{G1;}j@*x99s`1Nl?m;3ayh zpy=NX%K2}D!qa|G_<22FKa$T+fc&X*yu|)x@DMqB7u>=81(c41r@&e8D!2#Sh>`ce z3*ZF!J&a6(=fOkZ-@qdH5uB)5M;~#ZcunW0*-;d07cK=!R_FKByAJ8 z8+;1KlNi?xT1av%DG>HV*mFbe@fl$?A#4XoU1_bvy|g= zpyVe2rJnYIli(aEdVdG52mc7lIgJsqvyK;OvX8XZ1Y?XLy+vrY#-)xW2GJ`Il&S*b ze#WDWH4N!d(I+vDGoZ`*Sp=V82q%v-9$?5LKHX}6xi~2Y`$(P%_S0aWMi~nHu*P}QC=M!Y*9~j2Y&ex=FVsO)(|(vn ztYXQlH2hE}erlFE+4Ux=N3EcuXN^t?Dm4`hYphU z4LNnIH>gE1%oF(5s8+)*=uz7TwGU2oISQ-3D1%P5J?fiCOj=Ysh_IU-HJzua_d^eR zHO~)6`U_>7(8Y6|w8~|ZB-K{1c&jq77wjtzY!CX?wX9=jk#7Pu-0co#B>ba&V`&GYuORQO!^=X?uX3s&9fyqAPwSd@R+_SFVec z6p%}-=BFR#^`O2UwPGC&kg3~Li;>KeAwMifaZI_ufSwMFml(IF{Zw0ui^^$IUN^m} zTsP$xlU75Oql%I4Qc^2=SLBDLqD;f{1B$rC%e$eGI`Jcpp%{HWN&w}OP%a=XI}OYIoQb#v$|N2`OBT` zM~KOh6US92d&izc-48qSbN2UHtMn+cr>v0$yNZREH3k}*UiAxutM#g1-qvP-|+XFVzZL9jfv-2LYW9fbbhoTUf?T*3!3GBNa&bPu31x|pgiac7fUO%A z#6?#a=d1IN9E2YO(n^5Hr3r~UBGn3%eR6C*1rb50;h>=csg5l9fem-TMhLu}B96p>spLV%4_I_Em-@-ABb ze79hvLNKw!J-9?JQP=Od>v-TO$P@W~WS!58%azsl6aO{VoyI{HZ581Zjo7`VZ3)?C zl2rAs8%maLksI80oOCCX6RtrKdR=|E+vvRA zlNxu0LJWL7u*(&21K+L8USY06q!(b2u2`_|e$(XsE^#sUu3A#;+;(@CWZe2o_1V6A z**b_yk+R<2cpoBu#KwfypI8krCj|DsO)@8BmTaksk$!*M5^&Vn?@KR#+~Rl(V|*J1 zFK^Ou5LHxoZq}MwzUcGsf(tbN1}do&QGdody!h&6`%UXJ{&E6;PqQRnZ#y|^Q=PA# z>8^5lW2zUM&`4P^cZDn87>>IXN*384^xz#z{L{#~tiWDlj*bzF9qMpG#T?qC!`_}uvmc9Ep*~_Af7Z&hZ zY%jZkQxrDd&mrYLcFy&aS|ZFncKH&XofNltud|4Q|4Hab;e3Td;)*kH#wr<@TQcPA W(r&VG4c$!ox&~9UXoJ!?rv3{_S@k*q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..26e37cbbe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "ব্যক্তিগত তথ্য" + +msgid "Permissions" +msgstr "অনুমোদন" + +msgid "Important dates" +msgstr "গুরুত্বপূর্ণ তারিখ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "পাসওয়ার্ড বদল সফল হয়েছে।" + +#, python-format +msgid "Change password: %s" +msgstr "পাসওয়ার্ড বদলানঃ %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "পাসওয়ার্ড" + +msgid "last login" +msgstr "সর্বশেষ প্রবেশ" + +msgid "No password set." +msgstr "কোনো পাসওয়ার্ড সেট করা হয় নি।" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "অবৈধ পাসওয়ার্ড ফরম্যাট অথবা অজ্ঞাত হ্যাশিং অ্যালগরিদম।" + +msgid "The two password fields didn't match." +msgstr "পাসওয়ার্ড দুটো মেলেনি।" + +msgid "Password" +msgstr "পাসওয়ার্ড" + +msgid "Password confirmation" +msgstr "পাসওয়ার্ড নিশ্চিত করুন" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "এই একাউন্টটি কার্যকর নয়।" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "নতুন পাসওয়ার্ড" + +msgid "New password confirmation" +msgstr "নতুন পাসওয়ার্ড নিশ্চিতকরণ" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"আপনার পুরনো পাসওয়ার্ড ঠিকভাবে প্রবেশ করানো হয়নি। অনুগ্রহপূর্বক সঠিক পাসওয়ার্ড দিন।" + +msgid "Old password" +msgstr "পুরনো পাসওয়ার্ড" + +msgid "Password (again)" +msgstr "পাসওয়ার্ড (পুনরায়)" + +msgid "algorithm" +msgstr "অ্যালগরিদম" + +msgid "iterations" +msgstr "ইটারেশন" + +msgid "salt" +msgstr "সল্ট" + +msgid "hash" +msgstr "হ্যাশ" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "চেকসাম" + +msgid "name" +msgstr "নাম" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "কোডনাম" + +msgid "permission" +msgstr "অনুমোদন" + +msgid "permissions" +msgstr "অনুমোদন" + +msgid "group" +msgstr "দল" + +msgid "groups" +msgstr "দল সমূহ" + +msgid "superuser status" +msgstr "সুপারইউজার মর্যাদা" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "সদস্যকে সকল ধরণের অনুমতি প্রদান করে।" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "সদস্যের অনুমোদন সমূহ" + +msgid "Specific permissions for this user." +msgstr "এই ব্যবহারকারীর জন্য নির্দিষ্ট পারমিশন।" + +msgid "username" +msgstr "সদস্যনাম" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "এই সদস্যনামে একজন সদস্য আছেন।" + +msgid "first name" +msgstr "প্রথম নাম" + +msgid "last name" +msgstr "শেষ নাম" + +msgid "email address" +msgstr "ইমেইল অ্যাড্রেস" + +msgid "staff status" +msgstr "স্টাফ মর্যাদা" + +msgid "Designates whether the user can log into this admin site." +msgstr "সদস্যকে প্রশাসন সাইটে প্রবেশাধিকার প্রদান।" + +msgid "active" +msgstr "সচল" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "সদস্যকে সচল হিসেবে নির্ধারণ করুন। একাউন্ট মুছে ফেলার বদলে এটি ব্যবহার করুন।" + +msgid "date joined" +msgstr "যোগদানের তারিখ" + +msgid "user" +msgstr "সদস্য" + +msgid "users" +msgstr "সদস্যগণ" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "প্রস্থান সম্পন্ন" + +msgid "Password reset" +msgstr "পাসওয়ার্ড রিসেট" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "নতুন পাসওয়ার্ড দিন" + +msgid "Password reset unsuccessful" +msgstr "পাসওয়ার্ড রিসেট সফল হয়নি" + +msgid "Password reset complete" +msgstr "পাসওয়ার্ড রিসেট সম্পন্ন হয়েছে" + +msgid "Password change" +msgstr "পাসওয়ার্ড পরিবর্তন" + +msgid "Password change successful" +msgstr "পাসওয়ার্ড পরিবর্তন সফল হয়েছে" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ff11ddbedd4c0a854c1d68dcc7b83250810348f9 GIT binary patch literal 1436 zcmZvbL2naB6vwAD&~^*7qLtbrkX{c#vCzhA$F1=O6GVUtNJ@mT-W6h4^ z5an2jD;&7>8}!s091))Yu2p;ChPZMr|F?ExWA#aIfA7uw-*x9REATk@4|oE6Jz0MPeun%VxB&hK za{a=waefNqx-;NY__uJ@zl50k{|%l8--2I&0mOXXS@0`x5oCP}aESbu-4)uotEy+}BQxPaAJQux7pcdDE=?dlBzjSVfm!>*CtEXIe!*p$;O&ZgsZS9YyjA`2iTiMXbEWBx5Uc_Vu zWm>dP20w(VuYw519`L|3Rbx80mm-C+R4i-<^@)xBLB>@|h5S z8G1NX5z_32+qy4}D7>>-CX=JUzIZ0?kB6W{(!L(4{l0whS6S1Oxz73=is=YK=Yve| L;O{#Ov@+s7T8UR5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..287f92c3a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,293 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "ger-tremen" + +msgid "last login" +msgstr "kevreet da ziwezhañ" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "Ger-tremen" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Ger-tremen nevez" + +msgid "New password confirmation" +msgstr "Kadarnaat ar ger-tremen nevez" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "Ger-tremen kozh" + +msgid "Password (again)" +msgstr "Ger-tremen (adarre)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "anv" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "strollad" + +msgid "groups" +msgstr "strolladoù" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "anv-bihan" + +msgid "last name" +msgstr "anv-familh" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "implijer" + +msgid "users" +msgstr "implijerien" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Digevreet" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb49f5c8c4c5e2f8a653a84bf8116d5994440d98 GIT binary patch literal 3146 zcmZ{lO^h7H6~~JJ30`nWFdyM7eonGx7c{do8-wk!hhSqnTE%7uXKe|=rDnROr)IjV znyTs^c#xss2?} zSG}tDe^qZjzvs5M1)e38M^Ik6MTjTCt3SdEPj;&iN5GfCW$*)VANUWj1O6903Ld>p z2nBlZZt&kA+xZ$?0QcW6#9iRy;Dg{{@MqxjReu+}18rONUjl!L_GR!s@O|)3@H)5` z{42R<590Pg$DUjFifEXfP1o0EH>K}l6(DopV&~Tm}(haTR30{#5b3>ieHTp7#mJ<36j}f2;WSivIz5zh8nJ&+kCi zYag6qJstshpAC@xeFlVl;^!!fD102b|5qq{F7UZ{*cR`LpZzE>D;`F92;~3@+%Dn- z6n^m@?nmLh^7?${e~rRE@cR6)-?N8MVZHe|h{Bq&uKYYuqPRO;{Y}+ofB0dY5&q)g zGxHeN7MF}n)v_ns9jacSi4FtGoKB_Nq>Qf7w2pE!GInAJN(>4kNo*a$0x!?nIL02Jg?LU)=96z~P|upa zW@FG!JZI;l$ScHc9q!CRAv#q|<`r6!vD9XHr=wRyFCw4!ddmBLo+O*~U7vR^*4c@f zK;2s-6R6&|Vxv&KRD&R{HkF9t1)DpvyEa7=NUTgy4xVb$v(7_867b_L5m_ zHrnkb9Xv=}Z5(JfoAf(s5Qd}ubbEF7>3I7PSBn{q&gfXohoBf8mp~0 zc4n+i)1fjNXLPE~C@+%c`qap+D{?H6LnzTRDJaI&X|`TrZk z)XGozjdbKNWrWNLwU9eU3I0qJ>1h`!53<-XGIVAWY&M7M5RRAcI=y{OVH`4vjqBo~ z+`bM~aK-afBkgIQIS68A>9dpzW+9KkU4nn%e-o)hB3;KR9w$&32@-mi)1>IwFm_nh zSg2XqLek|Bpi>Xakd`wc-yeg7Q?tp{xcT^{%)$=-W0vP#xzC1b`!>B?_X$noQAyB*bQtcJeXvmCz6yRyTt2iQ3WKKVu?Mv>FV#z6Y6A BYV-gA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..672e234ff --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,296 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Arza Grbic , 2021 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-27 17:56+0000\n" +"Last-Translator: Arza Grbic \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Personal info" +msgstr "Lični podaci" + +msgid "Permissions" +msgstr "Dozvole" + +msgid "Important dates" +msgstr "Važni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objekat sa primarnim ključem %(key)r ne postoji." + +msgid "Password changed successfully." +msgstr "Lozinka uspješno izmjenjena." + +#, python-format +msgid "Change password: %s" +msgstr "Izmjeni lozinku: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "lozinka" + +msgid "last login" +msgstr "posljednja prijava" + +msgid "No password set." +msgstr "Lozinka nije postavljena." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neispravan format lozinke ili nepoznat hashing algoritam." + +msgid "The two password fields didn’t match." +msgstr "" + +msgid "Password" +msgstr "Lozinka" + +msgid "Password confirmation" +msgstr "Potvrda lozinke" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Ovaj nalog je neaktivan." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Nova lozinka" + +msgid "New password confirmation" +msgstr "Potvrda nove lozinke" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaša stara lozinka nije pravilno unesena. Unesite je ponovo." + +msgid "Old password" +msgstr "Stara lozinka" + +msgid "Password (again)" +msgstr "Lozinka (ponovite)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "block size" +msgstr "" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "šifra dozvole" + +msgid "permission" +msgstr "dozvola" + +msgid "permissions" +msgstr "dozvole" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupe" + +msgid "superuser status" +msgstr "status administratora" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Označava da li korisnik ima sve dozvole bez dodjeljivanja pojedinačnih " +"dozvola." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "korisničke dozvole" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "korisničko ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Korisnik sa tim korisničkim imenom već postoji." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "prezime" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "status člana uredništva" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Označava da li korisnik može da se prijavi na ovaj sajt za administraciju." + +msgid "active" +msgstr "aktivan" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Označava da li se korisnik smatra aktivnim. Uklnote izbor sa ovog polja " +"umjesto da brišete nalog." + +msgid "date joined" +msgstr "datum registracije" + +msgid "user" +msgstr "korisnik" + +msgid "users" +msgstr "korisnici" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can’t be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can’t be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Odjavljen" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4f72ce387f199339bd3751306a179e8ddcf54c94 GIT binary patch literal 7649 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..65e03ec16 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,315 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2015,2017,2021 +# Carles Barrobés , 2011-2012,2014-2015 +# Gil Obradors Via , 2019 +# Gil Obradors Via , 2019-2020 +# Jannis Leidel , 2011 +# Marc Compte , 2021 +# Roger Pons , 2015 +# Xavier RG , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-27 08:48+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informació personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Dates importants" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "No existeix cap objecte %(name)s amb la clau primària %(key)r." + +msgid "Password changed successfully." +msgstr "Contrasenya canviada amb èxit" + +#, python-format +msgid "Change password: %s" +msgstr "Canviar contrasenya: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticació i Autorització" + +msgid "password" +msgstr "contrasenya" + +msgid "last login" +msgstr "últim inici de sessió" + +msgid "No password set." +msgstr "No s'ha establert la clau." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Format de contrasenya incorrecte o algorisme de hash desconegut." + +msgid "The two password fields didn’t match." +msgstr "Els dos camps de contrasenya no coincideixen." + +msgid "Password" +msgstr "Contrasenya" + +msgid "Password confirmation" +msgstr "Confirmació de contrasenya" + +msgid "Enter the same password as before, for verification." +msgstr "Introduïu la mateixa contrasenya d'abans, com a verificació." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Les contrasenyes no es guarden en text clar, així que no hi ha forma de " +"conèixer-les, però pots canviar la contrasenya utilitzant " +"aquest formulari." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Si us plau, introduïu un %(username)s i clau correctes. Observeu que ambdós " +"camps poden ser sensibles a majúscules." + +msgid "This account is inactive." +msgstr "Aquest compte està inactiu" + +msgid "Email" +msgstr "Correu electrònic" + +msgid "New password" +msgstr "Contrasenya nova" + +msgid "New password confirmation" +msgstr "Confirmació de contrasenya nova" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La vostra antiga contrasenya no és correcta. Si us plau, introduïu-la de nou." + +msgid "Old password" +msgstr "Contrasenya antiga" + +msgid "Password (again)" +msgstr "Contrasenya (de nou)" + +msgid "algorithm" +msgstr "algorisme" + +msgid "iterations" +msgstr "iteracions" + +msgid "salt" +msgstr "sal" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varietat" + +msgid "version" +msgstr "versió" + +msgid "memory cost" +msgstr "cost de memòria" + +msgid "time cost" +msgstr "cost de temps" + +msgid "parallelism" +msgstr "paralelisme" + +msgid "work factor" +msgstr "factor de treball" + +msgid "checksum" +msgstr "suma de comprovació" + +msgid "block size" +msgstr "tamany de bloc" + +msgid "name" +msgstr "nom" + +msgid "content type" +msgstr "tipus de contingut" + +msgid "codename" +msgstr "nom en clau" + +msgid "permission" +msgstr "permís" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grup" + +msgid "groups" +msgstr "grups" + +msgid "superuser status" +msgstr "estat de superusuari" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Designa que aquest usuari té tots els permisos sense assignar-los " +"explícitament." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Els grups als que pertany l'usuari. Un usuari tindrà tots els permisos de " +"cadascun dels seus grups." + +msgid "user permissions" +msgstr "permisos de l'usuari" + +msgid "Specific permissions for this user." +msgstr "Permisos específics per a aquest usuari." + +msgid "username" +msgstr "nom d'usuari" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obligatori. 150 o menys caràcters. Només lletres, dígits i @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Ja existeix un usuari amb aquest nom." + +msgid "first name" +msgstr "nom propi" + +msgid "last name" +msgstr "cognoms" + +msgid "email address" +msgstr "adreça de correu electrònic" + +msgid "staff status" +msgstr "membre del personal" + +msgid "Designates whether the user can log into this admin site." +msgstr "Designa si l'usuari pot entrar al lloc administratiu." + +msgid "active" +msgstr "actiu" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Designa si aquest usuari ha de ser tractat com a actiu. Deseleccioneu-ho " +"enlloc d'esborrar comptes d'usuari." + +msgid "date joined" +msgstr "data d'incorporació" + +msgid "user" +msgstr "usuari" + +msgid "users" +msgstr "usuaris" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"La contrasenya és massa curta. Ha de tenir al menys %(min_length)d caràcter." +msgstr[1] "" +"La contrasenya és massa curta. Ha de tenir un mínim de %(min_length)d " +"caràcters." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "La contrasenya és ha de tenir al menys %(min_length)d caràcter." +msgstr[1] "La contrasenya ha de tenir un mínim de %(min_length)d caràcters." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contrasenya és massa semblant a %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"La teva contrasenya no pot ser tan similar a alguna de la teva informació " +"personal" + +msgid "This password is too common." +msgstr "Aquesta contrasenya és massa comuna." + +msgid "Your password can’t be a commonly used password." +msgstr "La teva contrasenya no pot ser la típica contrasenya comuna." + +msgid "This password is entirely numeric." +msgstr "La contrasenya està formada només per números." + +msgid "Your password can’t be entirely numeric." +msgstr "La teva contrasenya no potser únicament numèrica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Reinicialitzar la contrasenya a %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Introdueixi un nom d'usuari vàlid. Aquest valor pot contenir sols lletres, " +"números i els caràcters @/./+/-/_ " + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Introdueixi un nom d'usuari vàlid. Aquest valor pot contenir sols lletres, " +"números i els caràcters @/./+/-/_ " + +msgid "Logged out" +msgstr "Sessió finalitzada" + +msgid "Password reset" +msgstr "Restablir contrasenya" + +msgid "Password reset sent" +msgstr "Restabliment de contrasenya enviat" + +msgid "Enter new password" +msgstr "Introduïu la nova contrasenya" + +msgid "Password reset unsuccessful" +msgstr "Restabliment de contrasenya fallat" + +msgid "Password reset complete" +msgstr "Contrasenya restablerta" + +msgid "Password change" +msgstr "Canvi de contrasenya" + +msgid "Password change successful" +msgstr "Contrasenya canviada amb èxit" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..71403aec1303aa1edc4c6313e452fa701c2de854 GIT binary patch literal 7836 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

      7AGyE zy2zss`c>|JRH+-L!p)f@7w!AbCpMDN#~VCZw1+z?#BhyW5znM0B4(QgHAAQKSXGvV zb67ZrF|oioHLGQNU&^Hj{gDG%_&;!%#O_u#y6pCfeswwOr$0XJbhxX iw|CdO=hJu_I4vCBtj=(TXs{hos|1RF5y{GmPyPqknah;` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..78b6fc49e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jan Munclinger , 2013 +# Jannis Leidel , 2011 +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2013-2014 +# Vláďa Macek , 2015-2017,2019,2021-2022 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2022-01-04 18:49+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "Osobní údaje" + +msgid "Permissions" +msgstr "Oprávnění" + +msgid "Important dates" +msgstr "Důležitá data" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Položka \"%(name)s\" s primárním klíčem \"%(key)r\" neexistuje." + +msgid "Password changed successfully." +msgstr "Změna hesla byla úspěšná." + +#, python-format +msgid "Change password: %s" +msgstr "Heslo pro uživatele %s: změnit" + +msgid "Authentication and Authorization" +msgstr "Autentizace a autorizace" + +msgid "password" +msgstr "heslo" + +msgid "last login" +msgstr "poslední přihlášení" + +msgid "No password set." +msgstr "Heslo nenastaveno." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neplatný formát hesla nebo neplatný hashovací algoritmus." + +msgid "The two password fields didn’t match." +msgstr "Hesla se neshodují." + +msgid "Password" +msgstr "Heslo" + +msgid "Password confirmation" +msgstr "Potvrzení hesla" + +msgid "Enter the same password as before, for verification." +msgstr "Zadejte pro ověření stejné heslo jako předtím." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Hesla se neukládají přímo a tak je nelze zobrazit. Je ale možné je změnit " +"pomocí tohoto formuláře." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Zadejte správnou hodnotu pole %(username)s a heslo. Pozor, obě pole mohou " +"rozlišovat malá a velká písmena." + +msgid "This account is inactive." +msgstr "Tento účet je neaktivní." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nové heslo" + +msgid "New password confirmation" +msgstr "Potvrzení nového hesla" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaše současné heslo nebylo zadáno správně. Zkuste to znovu." + +msgid "Old password" +msgstr "Současné heslo" + +msgid "Password (again)" +msgstr "Heslo (znovu)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "iterace" + +msgid "salt" +msgstr "hodnota salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varieta" + +msgid "version" +msgstr "verze" + +msgid "memory cost" +msgstr "spotřeba paměti" + +msgid "time cost" +msgstr "časový náklad" + +msgid "parallelism" +msgstr "paralelismus" + +msgid "work factor" +msgstr "faktor práce" + +msgid "checksum" +msgstr "kontrolní součet" + +msgid "block size" +msgstr "velikost bloku" + +msgid "name" +msgstr "název" + +msgid "content type" +msgstr "typ obsahu" + +msgid "codename" +msgstr "kódový název" + +msgid "permission" +msgstr "oprávnění" + +msgid "permissions" +msgstr "oprávnění" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupiny" + +msgid "superuser status" +msgstr "superuživatel" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Určuje, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupiny, do kterých tento uživatel patří. Uživatel dostane všechna oprávnění " +"udělená každé z jeho skupin." + +msgid "user permissions" +msgstr "uživatelská oprávnění" + +msgid "Specific permissions for this user." +msgstr "Konkrétní oprávnění tohoto uživatele." + +msgid "username" +msgstr "uživatelské jméno" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Požadováno. 150 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uživatel s tímto jménem již existuje." + +msgid "first name" +msgstr "křestní jméno" + +msgid "last name" +msgstr "příjmení" + +msgid "email address" +msgstr "e-mailová adresa" + +msgid "staff status" +msgstr "administrační přístup" + +msgid "Designates whether the user can log into this admin site." +msgstr "Určuje, zda se uživatel může přihlásit do správy tohoto webu." + +msgid "active" +msgstr "aktivní" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Určuje, zda bude uživatel považován za aktivního. Použijte tuto možnost " +"místo odstranění účtů." + +msgid "date joined" +msgstr "datum registrace" + +msgid "user" +msgstr "uživatel" + +msgid "users" +msgstr "uživatelé" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znak." +msgstr[1] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaky." +msgstr[2] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaků." +msgstr[3] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaků." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Heslo musí mít délku aspoň %(min_length)d znak." +msgstr[1] "Heslo musí mít délku aspoň %(min_length)d znaky." +msgstr[2] "Heslo musí mít délku aspoň %(min_length)d znaků." +msgstr[3] "Heslo musí mít délku aspoň %(min_length)d znaků." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Heslo je příliš podobné obsahu pole %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Heslo nemůže být příliš podobné jinému údaji ve vašem účtu." + +msgid "This password is too common." +msgstr "Heslo je příliš běžné." + +msgid "Your password can’t be a commonly used password." +msgstr "Vaše heslo nemůže být takové, které je často používané." + +msgid "This password is entirely numeric." +msgstr "Heslo se skládá pouze z čísel." + +msgid "Your password can’t be entirely numeric." +msgstr "Vaše heslo nemůže být čistě číselné." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Obnovení hesla na webu %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zadejte platné uživatelské jméno. Hodnota může obsahovat pouze písmena bez " +"diakritiky, tj. háčků a čárek, číslice a znaky @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zadejte platné uživatelské jméno. Hodnota může obsahovat pouze písmena, " +"číslice a znaky @/./+/-/_." + +msgid "Logged out" +msgstr "Odhlášeno" + +msgid "Password reset" +msgstr "Obnovení hesla" + +msgid "Password reset sent" +msgstr "Zpráva s obnovením hesla byla odeslána" + +msgid "Enter new password" +msgstr "Zadejte nové heslo" + +msgid "Password reset unsuccessful" +msgstr "Obnovení hesla bylo neúspěšné" + +msgid "Password reset complete" +msgstr "Heslo bylo obnoveno" + +msgid "Password change" +msgstr "Změna hesla" + +msgid "Password change successful" +msgstr "Změna hesla byla úspěšná" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6221fd335738d988662c44d658261a029ece62a2 GIT binary patch literal 4338 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..ee4ea46ab --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,294 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2013-2014 +# pjrobertson, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "Gwybodaeth bersonol" + +msgid "Permissions" +msgstr "Hawliau" + +msgid "Important dates" +msgstr "Dyddiadau pwysig" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Newidwyd y gyfrinair." + +#, python-format +msgid "Change password: %s" +msgstr "Newid cyfrinair: %s" + +msgid "Authentication and Authorization" +msgstr "Dilysu ac Awdurdodi" + +msgid "password" +msgstr "cyfrinair" + +msgid "last login" +msgstr "mewngofnod diwethaf" + +msgid "No password set." +msgstr "Cyfrinair heb ei osod." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Fformat cyfrinair annilys neu algorithm hashio anhysbys." + +msgid "The two password fields didn't match." +msgstr "Nid oedd y ddau faes cyfrinair yr un peth." + +msgid "Password" +msgstr "Cyfrinair" + +msgid "Password confirmation" +msgstr "Cadarnhad cyfrinair" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Teipiwch yr %(username)s a chyfrinair cywir ar gyfer cyfrif staff. Noder y " +"gall y ddau faes fod yn sensitif i lythrennau bach a llythrennau bras." + +msgid "This account is inactive." +msgstr "Mae'r cyfrif yn anweithredol." + +msgid "Email" +msgstr "Ebost" + +msgid "New password" +msgstr "Cyfrinair newydd" + +msgid "New password confirmation" +msgstr "Cadarnhad cyfrinair newydd" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Rhoddwydd eich hen gyfrinair yn anghywir. Triwch eto." + +msgid "Old password" +msgstr "Hen gyfrinair" + +msgid "Password (again)" +msgstr "Cyfrinair (eto)" + +msgid "algorithm" +msgstr "algorithm" + +msgid "iterations" +msgstr "iteriadau" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "ffactor gwaith" + +msgid "checksum" +msgstr "prawfswm" + +msgid "name" +msgstr "enw" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "enw arwyddol" + +msgid "permission" +msgstr "hawl" + +msgid "permissions" +msgstr "hawliau" + +msgid "group" +msgstr "grŵp" + +msgid "groups" +msgstr "grwpiau" + +msgid "superuser status" +msgstr "statws uwchddefnyddiwr" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Dynoda bod gan y defnyddiwr yr holl hawliau heb eu dynodi'n benodol." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "hawliau defnyddiwr" + +msgid "Specific permissions for this user." +msgstr "Caniatâd penodol ar gyfer y defnyddiwr hwn." + +msgid "username" +msgstr "enw defnyddiwr" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Mae'r enw defnyddiwr yn bodoli'n barod." + +msgid "first name" +msgstr "enw cyntaf" + +msgid "last name" +msgstr "cyfenw" + +msgid "email address" +msgstr "cyfeiriad ebost" + +msgid "staff status" +msgstr "statws staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Dynoda os gall y defnyddiwr fewngofnodi i'r adran weinyddol." + +msgid "active" +msgstr "gweithredol" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Dynoda os ydy'r defnyddiwr yn weithredol. Dad-ddewiswch hwn yn lle dileu " +"cyfrifon." + +msgid "date joined" +msgstr "dyddiad ymuno" + +msgid "user" +msgstr "defnyddiwr" + +msgid "users" +msgstr "defnyddwyr" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ailosod cyfrinar ar %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Allgofnodwyd" + +msgid "Password reset" +msgstr "Ailosod cyfrinair" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "Rhowch gyfrinair newydd" + +msgid "Password reset unsuccessful" +msgstr "Ailosod y cyfrinair yn aflwyddiannus" + +msgid "Password reset complete" +msgstr "Cwblhawyd ailosod y cyfrinair" + +msgid "Password change" +msgstr "Newid cyfrinair" + +msgid "Password change successful" +msgstr "Newid cyfrinair yn llwyddianus" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a83b0120097cdc5f242314424a145493fd59d6b2 GIT binary patch literal 7478 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..a705d218c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Christian Joergensen , 2012 +# Erik Ramsgaard Wognsen , 2021 +# Erik Ramsgaard Wognsen , 2013-2017,2019 +# Jannis Leidel , 2011 +# 85794379431c3e0f5c85c0e72a78d45b_658ddd9, 2013 +# tiktuk , 2018 +# valberg , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-23 20:27+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personlig information" + +msgid "Permissions" +msgstr "Rettigheder" + +msgid "Important dates" +msgstr "Vigtige datoer" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Der findes ikke et %(name)s-objekt med primærnøgle %(key)r." + +msgid "Password changed successfully." +msgstr "Adgangskoden blev ændret." + +#, python-format +msgid "Change password: %s" +msgstr "Skift adgangskode: %s" + +msgid "Authentication and Authorization" +msgstr "Godkendelse og autorisation" + +msgid "password" +msgstr "adgangskode" + +msgid "last login" +msgstr "sidst logget ind" + +msgid "No password set." +msgstr "Ingen adgangskode valgt." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ugyldigt adgangskodeformat eller hashing-algoritme." + +msgid "The two password fields didn’t match." +msgstr "De to adgangskoder var ikke identiske." + +msgid "Password" +msgstr "Adgangskode" + +msgid "Password confirmation" +msgstr "Bekræftelse af adgangskode" + +msgid "Enter the same password as before, for verification." +msgstr "Indtast den samme adgangskode som før, for bekræftelse." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Rå adgangskoder gemmes ikke, så det er ikke muligt at se denne brugers " +"adgangskode, men du kan ændre adgangskoden ved hjælp af denne " +"formular." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Indtast venligst korrekt %(username)s og adgangskode. Bemærk at begge felter " +"kan være versalfølsomme." + +msgid "This account is inactive." +msgstr "Denne konto er inaktiv." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Ny adgangskode" + +msgid "New password confirmation" +msgstr "Bekræftelse af ny adgangskode" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Din gamle adgangskode blev ikke indtastet korrekt. Indtast den venligst igen." + +msgid "Old password" +msgstr "Gammel adgangskode" + +msgid "Password (again)" +msgstr "Adgangskode (igen)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iterationer" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variation" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "hukommelsesomkostning" + +msgid "time cost" +msgstr "tidsomkostning" + +msgid "parallelism" +msgstr "parallelitet" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "tjeksum" + +msgid "block size" +msgstr "blokstørrelse" + +msgid "name" +msgstr "navn" + +msgid "content type" +msgstr "indholdstype" + +msgid "codename" +msgstr "kodenavn" + +msgid "permission" +msgstr "rettighed" + +msgid "permissions" +msgstr "rettigheder" + +msgid "group" +msgstr "gruppe" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superbrugerstatus" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Bestemmer at denne bruger har alle rettigheder uden at tildele dem eksplicit." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupperne som denne bruger hører til. En bruger får alle rettigheder givet " +"til hver af hans/hendes grupper." + +msgid "user permissions" +msgstr "rettigheder" + +msgid "Specific permissions for this user." +msgstr "Specifikke rettigheder for denne bruger." + +msgid "username" +msgstr "brugernavn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Påkrævet. Højst 150 tegn. Kun bogstaver og cifre samt @/./+/-/_" + +msgid "A user with that username already exists." +msgstr "En bruger med dette brugernavn findes allerede." + +msgid "first name" +msgstr "fornavn" + +msgid "last name" +msgstr "efternavn" + +msgid "email address" +msgstr "e-mail-adresse" + +msgid "staff status" +msgstr "admin-status" + +msgid "Designates whether the user can log into this admin site." +msgstr "Bestemmer om brugeren kan logge ind på dette administrationswebsite." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Bestemmer om brugeren skal behandles som aktiv. Fravælg dette frem for at " +"slette en konto." + +msgid "date joined" +msgstr "dato for registrering" + +msgid "user" +msgstr "bruger" + +msgid "users" +msgstr "brugere" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Denne adgangskode er for kort. Den skal indeholde mindst %(min_length)d tegn." +msgstr[1] "" +"Denne adgangskode er for kort. Den skal indeholde mindst %(min_length)d tegn." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Din adgangskode skal indeholde mindst %(min_length)d tegn." +msgstr[1] "Din adgangskode skal indeholde mindst %(min_length)d tegn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Din adgangskode minder for meget om din/dit %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Din adgangskode må ikke minde om dine andre personlige oplysninger." + +msgid "This password is too common." +msgstr "Denne adgangskode er for almindelig." + +msgid "Your password can’t be a commonly used password." +msgstr "Din adgangskode må ikke være en ofte anvendt adgangskode." + +msgid "This password is entirely numeric." +msgstr "Denne adgangskode er udelukkende numerisk." + +msgid "Your password can’t be entirely numeric." +msgstr "Din adgangskode må ikke være udelukkende numerisk." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Adgangskode nulstillet på %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Indtast et gyldigt brugernavn. Dette felt må kun indeholde engelske " +"bogstaver, cifre og disse tegn: @/./+/-/_" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Indtast et gyldigt brugernavn. Dette felt må kun indeholde bogstaver og " +"cifre samt disse tegn: @/./+/-/_" + +msgid "Logged out" +msgstr "Logget ud" + +msgid "Password reset" +msgstr "Nulstilling af adgangskode" + +msgid "Password reset sent" +msgstr "Nulstilling af kodeord sendt" + +msgid "Enter new password" +msgstr "Indtast ny adgangskode" + +msgid "Password reset unsuccessful" +msgstr "Adgangskoden blev ikke nulstillet" + +msgid "Password reset complete" +msgstr "Nulstilling af adgangskode fuldført" + +msgid "Password change" +msgstr "Ændring af adgangskode" + +msgid "Password change successful" +msgstr "Adgangskoden blev ændret" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eca1f2747343b6f87825231b0934cf06d3f2c5bb GIT binary patch literal 7529 zcmb`LU5q4E6~`|h3XCH1AtHiY7FT9qx@Tu)WtshOXTN86XLj6OR)NS`-F>^ecB-q| zy0^BO5dy|XF~LMc14yF#U=$yGSzb2LWDKIw2Odyk3@XtFXoO93jo!76s{AtDYDaI{~vzIE>0mt9P57!^wt<+ZVkKh=1^A$>Ia4&d0 zXux@J5xfulIcUJkuT)A%oCaH97d!?22D}d3dX-Z5fQP|rz$d^h;8WlT_%irj@Kx|b z;OpS~!8eQft5^gnbt5SAw}C=u6L>SY3;YQ95cmOb349;;6!<~#1@JcTB~bS9Yw*M1 zU%~f)SMYN+cs=+qcsux2@Ck4~cpbvs0X_f*;A5cd=l9^9;0=5%a&HGWfG0uG?;`ju z@ay0-xCNm$gFWyr@O$7v@HOyJ@FQ#r)vISgwywSnBBFW`l>NU{;EzFAtDk|0sD1^) zLcIaX`oDu>kN^8T4({y9+S`~VcW&Vjg&I$z*VK;i!juzLx91McQ|2Im)Ka2~7@6pw+AgJP%uf?}7;AS!mg1{6Kr0*W5)ES@)k;(yyf z*~bhh_WcYf{`a}!xdn<}B%rKwpy=;QpwRnTG5s|zf?hlLiKLSOLS3vpxHBi?5 z3B(oDUqI3OTcF5!?X5Z8TR>UA5tQ%mDdwjOJOqlo$3fxu5QrOko9zW92M|hLSAe>k zf$IGwc9-j846)@dhFq62Wbbl`4z=8HLE7g6$wNmN_b}u_WOcj0%l9C+;|z%>i3Qo; zQN~V&*!C`lT$0NVF~nYC>-!jTZDY*&yZlG|W+P*&m=iyc>*EaE!s}6Hqx_Dg zx{(;GG+*!9f%A_-O9xSEg2rOL(6TafZ4!FJlHN+qg#x1@#o$4^bUfVF2%8Q(2J&1Lbv~(D|gjqNRjZPSA8#=Sjm!&keon%o% z*Nk@T+L;E7bx?QV8B^8w$JRumRZlaFtwS+7Y3c^kPGk$}^(2cOTH4nM!bt6l9fAe= zOb~^QzDle5gb2lCW^^Z5)b%8G0Rkp5JKYzzqR_TAB>C8m>p1Jw{Eeu3*F<&V?up98 zDP3;|DU$I9Zf}Fn#nX>XuW!|YrRdy>mz35Pebr1eNzJ(CSD!Iy*erads%ARfBy~aT zbVGbW&BVE8`d{-&2j}C%EMAC{UaawtwpVS`!o^%0+aF0;?1o6i$<8%M>NPvybB`a4T_uAa-{VOa;Ursi>=Bn~2?rJ1Pt z$OP7C2zbA(Cuu4Uzj0KuLy=m<4NKis^<3fz7Rea3gj~}MP1La7s|lhy#43n`uo6M) zSTOJ);wm*h1zCr?G{&`+Xf;d{9C4z1L@VFFFdwkrza(DwtXVliA3h}SqS&4p4_r&D5k^(o2F;dsy!cG_k2;!BCC5gydVoTr2KXSdH04Yq^ z2pci#cG%L@+p-RdMS>Fxg>jJ=^EbnMaUXO_E+cgj|MlYI;Uyv({@qF9bzYK*Q&-h9 z@XxI4r%3!vTvS|=lzu8Qam%&G8UxF{!{kV=4`L4q6T72y+N zK}jP8h5qhwRORDC|QbOuTdu^hJ_fE#}3l zeWe%|_cdD1ok;~{npd?bsW0HZOGee(roLdaj;bdOBUy+WB7rjE7Q04CEzzfwFg6Wk zr0!Dh8>C9Br~tT%|H4O}%HvN-QBfq&)RzaVBJn6%hA_@={TCh6N$8sDiFL|PbSbz| zWT?&^Rq9&}`j(+vt85TCWnIv0YJOeDOvX~*WEB%Gq;7iZGOPTn0X6FBedDVKQ>eNXf0t+E&=8?9N)Yaw3`1 zBlAZq$IO{fC{^~NzbUJUF zB0U>ol}K+FeeX*1$&R0^Hq1`Gi(6UHGL;i1=uGJYR2*{jXxq8&)Wk%u*Q+`q8aB-% zRr0_@E^P@>@%2Q*OpJ}p&dlx`>}#^RX=G1s{>ll=Kc$^{#7%S~LT#JR1C-Jo_n+8b z**aJ!yqYGh>?2wm)PyO$wHCU*lxWM0%tsmat?Z{Z*eM-%{iEHnd7I8}cZ|mR_8oe1 zY}<$``|Qe5`s@XA6u~}Eo4tHCwe@zieBRP3lB4own+{vY=*Hcezd2uDJQbwtOQf9Do%hY6L*>N|+r4SdQqGfs0O+#e!nX=qFy?hq(Y3#f1Bc|o3 zV%Ck*Z&}MG2mGYE7`Rj4+b(QD)kw3&(xe?5-4N-t3F9Rb#d<00nUFfpjqdo(A=VJ} zq(-1pkybK@{qwZ+-fXOhHOuBmd~t_90fGxbyoQwLJuK-0-Gk_+st>aqs)5X~a}GEr zh0HhvC8}Isog!(pd=6uX2KQBFans7Q&k9EE4r#4ra|qB{J|D4v?uIQ9%UiF0nhX?Z zAj4T8vwC+{Z^H`1Acrlwb>X6?BO;?_94-5UVH0nQy`B0Ud-WaSyDs@TlOfT3-pz7) zDt1t?#RKT2BC1Y*#S#T!H@jOtn|pvpW+UgW;>)V~w0JGr(UK!#b$?u{Yrv;$*~Ru* zTr*-(=^hW}jeBLf%;*_ee!A8&-tyAA4@=o0$9d_O|^AF%6Y619jrJh)}@0O~i;XyZb!`yIUmY@tC!Err1S(&h6M zEks>+S_f!D(nUhH82UEInxu}Q27eW`+?$!~^mo5Ii znK&Hr5xT$%HFA+pk2%5RbE&vf9_U3H4LkZUO|2w;EM~i6I>`ni#R5W0U^fEkbn>*@ z2*{;GaTJl?=zNeSra4W0-d=G$@VTd>r3hqjkVC@2Cki3RC%6Q8Cl%%7Cx-{U2pr*M zqdgN7GaMb}B*6L!W8J{z^svO~L6Q|3Tal5Q%jfxLjU?kig36V1AkDg6Nqyu$pNxhx zCb_FEimU2<#7>#nu)qR6w?A2|;Z$VZf-F497k!ILVIre0pKW`Gko&bKiM^P!CI&B} zwXhs#utsS&-Z|Oln)2sMA4dvF?8VDf?2%kf!#J`(R0t8B7tvJW4k@;y<4j-=b<1|3{)F-z`UsR=Rv{`33&TLUL+y$l!Fbr#xoN#A0^KDMQVMj{nPX zMw13+bwhD7@&6oAdGHhvD=C4L(4q+W7K^Tl;$`%-Z-AIma~$P;n@<+-X{=_%q|779 ze0k)M8qJgcm#SNls#iRaoR1^1NE@WYBAK&tJU@R7^, 2012 +# Florian Apolloner , 2021 +# Jannis Vajen, 2013 +# Jannis Leidel , 2013-2017,2020 +# Jannis Vajen, 2016 +# Jens Neuhaus , 2016 +# Markus Holtermann , 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-28 17:17+0000\n" +"Last-Translator: Raphael Michel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Persönliche Informationen" + +msgid "Permissions" +msgstr "Berechtigungen" + +msgid "Important dates" +msgstr "Wichtige Daten" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-Objekt mit Primärschlüssel %(key)r ist nicht vorhanden." + +msgid "Password changed successfully." +msgstr "Passwort erfolgreich geändert." + +#, python-format +msgid "Change password: %s" +msgstr "Passwort ändern: %s" + +msgid "Authentication and Authorization" +msgstr "Authentifizierung und Autorisierung" + +msgid "password" +msgstr "Passwort" + +msgid "last login" +msgstr "Letzte Anmeldung" + +msgid "No password set." +msgstr "Kein Passwort gesetzt." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ungültiges Passwortformat oder unbekannter Hashing-Algorithmus." + +msgid "The two password fields didn’t match." +msgstr "Die beiden Passwörter sind nicht identisch." + +msgid "Password" +msgstr "Passwort" + +msgid "Password confirmation" +msgstr "Passwort bestätigen" + +msgid "Enter the same password as before, for verification." +msgstr "Bitte das selbe Passwort zur Bestätigung erneut eingeben." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Die Passwörter werden nicht im Klartext gespeichert und können daher nicht " +"dargestellt, sondern nur mit diesem Formular geändert " +"werden." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Bitte %(username)s und Passwort eingeben. Beide Felder berücksichtigen die " +"Groß-/Kleinschreibung." + +msgid "This account is inactive." +msgstr "Dieser Benutzer ist inaktiv." + +msgid "Email" +msgstr "E-Mail-Adresse" + +msgid "New password" +msgstr "Neues Passwort" + +msgid "New password confirmation" +msgstr "Neues Passwort bestätigen" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Das alte Passwort war falsch. Bitte neu eingeben." + +msgid "Old password" +msgstr "Altes Passwort" + +msgid "Password (again)" +msgstr "Passwort (wiederholen)" + +msgid "algorithm" +msgstr "Algorithmus" + +msgid "iterations" +msgstr "Wiederholungen" + +msgid "salt" +msgstr "Salt" + +msgid "hash" +msgstr "Hash" + +msgid "variety" +msgstr "Vielfalt" + +msgid "version" +msgstr "Version" + +msgid "memory cost" +msgstr "Speicherbedarf" + +msgid "time cost" +msgstr "Zeitbedarf" + +msgid "parallelism" +msgstr "Parallelität" + +msgid "work factor" +msgstr "Arbeitsfaktor" + +msgid "checksum" +msgstr "Prüfsumme" + +msgid "block size" +msgstr "Blockgröße" + +msgid "name" +msgstr "Name" + +msgid "content type" +msgstr "Inhaltstyp" + +msgid "codename" +msgstr "Codename" + +msgid "permission" +msgstr "Berechtigung" + +msgid "permissions" +msgstr "Berechtigungen" + +msgid "group" +msgstr "Gruppe" + +msgid "groups" +msgstr "Gruppen" + +msgid "superuser status" +msgstr "Administrator-Status" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln " +"zuweisen zu müssen." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Die Gruppen, denen der Benutzer angehört. Ein Benutzer bekommt alle " +"Berechtigungen dieser Gruppen." + +msgid "user permissions" +msgstr "Berechtigungen" + +msgid "Specific permissions for this user." +msgstr "Spezifische Berechtigungen für diesen Benutzer." + +msgid "username" +msgstr "Benutzername" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Erforderlich. 150 Zeichen oder weniger. Nur Buchstaben, Ziffern und @/./+/-/" +"_." + +msgid "A user with that username already exists." +msgstr "Dieser Benutzername ist bereits vergeben." + +msgid "first name" +msgstr "Vorname" + +msgid "last name" +msgstr "Nachname" + +msgid "email address" +msgstr "E-Mail-Adresse" + +msgid "staff status" +msgstr "Mitarbeiter-Status" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann." + +msgid "active" +msgstr "Aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Legt fest, ob dieser Benutzer aktiv ist. Kann deaktiviert werden, anstatt " +"Benutzer zu löschen." + +msgid "date joined" +msgstr "Mitglied seit" + +msgid "user" +msgstr "Benutzer" + +msgid "users" +msgstr "Benutzer" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Dieses Passwort ist zu kurz. Es muss mindestens %(min_length)d Zeichen " +"enthalten." +msgstr[1] "" +"Dieses Passwort ist zu kurz. Es muss mindestens %(min_length)d Zeichen " +"enthalten." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Das Passwort muss mindestens %(min_length)d Zeichen enthalten." +msgstr[1] "Das Passwort muss mindestens %(min_length)d Zeichen enthalten." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Das Passwort ist zu ähnlich zu %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Das Passwort darf nicht zu ähnlich zu anderen persönlichen Informationen " +"sein." + +msgid "This password is too common." +msgstr "Dieses Passwort ist zu üblich." + +msgid "Your password can’t be a commonly used password." +msgstr "Das Passwort darf nicht allgemein üblich sein." + +msgid "This password is entirely numeric." +msgstr "Dieses Passwort ist komplett numerisch. " + +msgid "Your password can’t be entirely numeric." +msgstr "Das Passwort darf nicht komplett aus Ziffern bestehen." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Passwort auf %(site_name)s zurücksetzen" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Bitte einen gültigen Benutzernamen eingeben, bestehend aus Buchstaben des " +"Englischen Alphabets, Ziffern und @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Bitte einen gültigen Benutzernamen eingeben, bestehend aus Buchstaben, " +"Ziffern und @/./+/-/_." + +msgid "Logged out" +msgstr "Abgemeldet" + +msgid "Password reset" +msgstr "Passwort zurücksetzen" + +msgid "Password reset sent" +msgstr "E-Mail zum Passwort zurücksetzen abgesendet" + +msgid "Enter new password" +msgstr "Neues Passwort eingeben" + +msgid "Password reset unsuccessful" +msgstr "Passwort nicht erfolgreich zurückgesetzt" + +msgid "Password reset complete" +msgstr "Passwort zurücksetzen abgeschlossen" + +msgid "Password change" +msgstr "Passwort ändern" + +msgid "Password change successful" +msgstr "Passwort erfolgreich geändert" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..da3e844428fe97818316ddeee63a197ae056b970 GIT binary patch literal 8135 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 CoGfSn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..e30b3b815 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,318 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2017,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-28 18:51+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Wósobinske informacije" + +msgid "Permissions" +msgstr "Pšawa" + +msgid "Important dates" +msgstr "Wažne daty" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z primarnym klucom %(key)r njeeksistěrujo." + +msgid "Password changed successfully." +msgstr "Gronidło jo se změniło." + +#, python-format +msgid "Change password: %s" +msgstr "Gronidło změniś: %s" + +msgid "Authentication and Authorization" +msgstr "Awtentifikacija a awtorizacija" + +msgid "password" +msgstr "gronidło" + +msgid "last login" +msgstr "slědne pśizjawjenje" + +msgid "No password set." +msgstr "Žedno gronidło nastajone." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Njepłaśiwy gronidłowy format abo njeznaty kontrolny algoritmus." + +msgid "The two password fields didn’t match." +msgstr "Dwě gronidlowej póli njejstej jadnakej." + +msgid "Password" +msgstr "Gronidło" + +msgid "Password confirmation" +msgstr "Gronidłowe wobkšuśenje" + +msgid "Enter the same password as before, for verification." +msgstr "Zapódajśo to samske gronidło, za pśespytanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Grube gronidła se njeskładuju, togodla njejo móžno, gronidło wužywarja " +"wiźeś, ale móžośo gronidło z pomocu toś togo formulara " +"změniś." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Pšosym zapódajśo pšawe %(username)s a gronidło. Źiwajśo na to, až wobej póli " +"móžotej mjazy wjeliko- a małopisanim rozeznawaś." + +msgid "This account is inactive." +msgstr "Toś to konto jo inaktiwne." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nowe gronidło" + +msgid "New password confirmation" +msgstr "Wobkšuśenje nowego gronidła" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Wašo stare gronidło jo se wopak zapódało. Pšosym zapódajśo jo hyšći raz." + +msgid "Old password" +msgstr "Stare gronidło" + +msgid "Password (again)" +msgstr "Gronidło (znowego)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "wóspjetowanja" + +msgid "salt" +msgstr "sol" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "warianta" + +msgid "version" +msgstr "wersija" + +msgid "memory cost" +msgstr "składowa pśetrjeba" + +msgid "time cost" +msgstr "casowa pśetrjeba" + +msgid "parallelism" +msgstr "paralelizm" + +msgid "work factor" +msgstr "źěłowy faktor" + +msgid "checksum" +msgstr "kontrolna suma" + +msgid "block size" +msgstr "blokowa wjelikosć" + +msgid "name" +msgstr "mě" + +msgid "content type" +msgstr "wopśimjeśowy typ" + +msgid "codename" +msgstr "kodowe mě" + +msgid "permission" +msgstr "pšawo" + +msgid "permissions" +msgstr "pšawa" + +msgid "group" +msgstr "kupka" + +msgid "groups" +msgstr "kupki" + +msgid "superuser status" +msgstr "status superwužywarja" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Wóznamjenijo, lěc toś ten wužywaŕ ma wšykne pšawa bźez togo, aby mógał je " +"pśipokazaś." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Kupki, ku kótarymž toś ten wužywaŕ słuša. Wužywaŕ dóstanjo wšykne pšawa, " +"kótarež jomu kupki dawaju." + +msgid "user permissions" +msgstr "wužywarske pšawa" + +msgid "Specific permissions for this user." +msgstr "Wěste pšawa za toś togo wužywarja." + +msgid "username" +msgstr "wužywarske mě" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Trěbne. 150 znamuškow abo mjenjej. Jano pismiki, cyfry a @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Wužywaŕ z toś tym wužywarskim mjenim južo eksistěrujo." + +msgid "first name" +msgstr "pśedmě" + +msgid "last name" +msgstr "familijowe mě" + +msgid "email address" +msgstr "e-mailowa adresa" + +msgid "staff status" +msgstr "personalny status" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Wóznamjenijo, lěc wužywaŕ móžo se pla administratorowego sedła pśizjawiś." + +msgid "active" +msgstr "aktiwny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Wóznamjenijo, lěc deje z toś tym wužywarjom ako z aktiwnym wobchadás. " +"Znjemóžniśo to město togo, aby konta wulašował." + +msgid "date joined" +msgstr "cłonk wót" + +msgid "user" +msgstr "wužywaŕ" + +msgid "users" +msgstr "wužywarje" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuško " +"wopśimowaś." +msgstr[1] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamušce " +"wopśimowaś." +msgstr[2] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuška " +"wopśimowaś." +msgstr[3] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuškow " +"wopśimowaś." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Wašo gronidło musy nanejmjenjej %(min_length)d znamuško wopśimowaś." +msgstr[1] "Wašo gronidło musy nanejmjenjej %(min_length)d znamušce wopśimowaś." +msgstr[2] "Wašo gronidło musy nanejmjenjej %(min_length)d znamuška wopśimowaś." +msgstr[3] "" +"Wašo gronidło musy nanejmjenjej %(min_length)d znamuškow wopśimowaś." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Gronidło jo na %(verbose_name)s pśepódobne." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Wašo gronidło njesmějo na waše druge wósobinske daty pśepódobne byś." + +msgid "This password is too common." +msgstr "Toś to gronidło jo pśepowšykne." + +msgid "Your password can’t be a commonly used password." +msgstr "Wašo gronidło njesmějo cesto wužywane gronidło byś." + +msgid "This password is entirely numeric." +msgstr "Toś to gronidło jo cele numeriske." + +msgid "Your password can’t be entirely numeric." +msgstr "Wašo gronidło njesmějo cele numeriske byś." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Slědkstajenje gronidła na %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zapódajśo płaśiwe wužywarske mě. Toś ta gódnota smějo jano engelske pismiki, " +"licby a znamuška @/./+/-/_ wopśimowaś." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zapódajśo płaśiwe wužywarske mě. Toś ta gódnota smějo jano pismiki, licby a " +"znamuška @/./+/-/_ wopśimowaś." + +msgid "Logged out" +msgstr "Wótzjawjony" + +msgid "Password reset" +msgstr "Slědkstajenje gronidła" + +msgid "Password reset sent" +msgstr "Slědkstajenje gronidła wótpósłane" + +msgid "Enter new password" +msgstr "Zapódajśo nowe gronidło" + +msgid "Password reset unsuccessful" +msgstr "Slědkstajenje gronidła njejo se raźiło" + +msgid "Password reset complete" +msgstr "Slědkstajenje gronidła dokóńcone" + +msgid "Password change" +msgstr "Změnjenje gronidła" + +msgid "Password change successful" +msgstr "Gronidło jo se wuspěšnje změniło" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9d25fe61bfd57afff1103fcd3143ec0c50e06ad4 GIT binary patch literal 10072 zcmd6re~cXGS;t>On$QcOP-rO>=-V_-?i%l&eWeheW4DQ8r!KZ*r7n;^iZ!=8w>$Rk z%&{};^HC_V9mh#^iIk8E0%`541w?i6>Ebx{`FuGfeiS5_l|X{RAEiPnf1pYz68!^O z5TEZmv%9l*drngju=d<{_nr5B-si{ndERH{t8c&gGltJ$uAks~@g`%A>-$^y!{^U# zG3H+I&%rV9rdy4%;8yU5!GoaIdf*Q5WzYw|0ZPOp-)Bq>{6+96_=n)zLHkx?ej5A$ z_%^T(eh@qfj(``z?+2H`9|Qjs{6X+*`S|M~qRfBhgF#&#o;TUVHblRr=Jzry%);9r2p-)T%4ycZIP zmo@Mnu#^A(7ARg+-bHM{GobeSJU9XVJ@{Vmc7ls2GY;zaK5z?I2Y&{92HXq&2{;bk z1}U}APVfP+28u^t0(XJ0gIYHZ2~pilgPQ+I@bAFi2Oq$$Q;_J_`TfTzcLaP8lFP0a zz=y$Ul$ZQh!9C!=fu8_(*-YN=fP0biW$;ss-wrvCg7e@p@EhQh;4eV#*TJuWitAt9 znd$WppyKzhAg(h10V)sPf$_o}ATBbW0L7CNIi3O~XCAy6d;ygIJ_pKwmq93R{uab# z=AS^VH+Ng3wcY#pC?8<*10wvD}m3PN-d=A8A<{Buue*3 zLFxA)Q2aXp;wJa`Uj8b#_4y$#DCa)PXUW>irJVaHmp+qRsyX`nEY}CP2#@3MVNf5% z{KH%y;<|}TAMN`f*C^L^uHwh$KW+v0#aTJ=7A|pjAD2G2aNX&?Wwljb_i`zI z`X~;&xejsd=OWaOyB`4$a;a|UBc4HDmp}SV=-e4Ws<>EdY^VO{vt=~&n*La9qp4$l zC9$(XQnxd$py{>d>~Vk2ZW-n8Sj$!;Kel0%SpQ@YCuMWLZO48qo1fIZ#Ql^k>or=w zSDniy#>{Ldbw5mkikAdYXuYs%H59diUvVR5Pu&Y^zMb*ncs6QPC+(KlJm|+kE%XvL zb<&f15NA8qy_hW;cE)ctgE&TH?6ip5(ru;@RDz^2XAy>gAgr<8ZB?(UWW&80k_8ao5 zlNp3@f@5qnZL16?(#@+>qIQ_zrM*orXqdfWf?}RM;WdJ4&!uI1L`pH(_HEOfvy~`J zJQR#VEZrN{8bMsQh-7iR)rRfnl=~uAe|Wq+e$RMm{HU$ey%w5rhuyx5ecrtM(4Xx^ zHQ!P`kHwO1wB@fUe>!UUTP=U>3BMIg=Uge9{mq%Em3U!dtKx#$A7-BEt!7CR^0BZT z9uK40(87VwLLi#_dYQkK^ffWBsja;a+2|T)17-tGlyp`KZ;OV(E89a+Lb9l0Ohwe1>A-JPW5;TesDiK(>Y%JL$UNfp8AM*Sd{=_v1iDnW z+F04@Ge~lTk)0(oNZ{C){5(Pb@v#@;-sW5F6h&e#YO_zMd{EgDBfHv>aiY$Bo~^h1 z>0Nhx^4IRz?L>)Y_l>o^#K$SV zSE;M=U~SOKrDi+yY-fig!hJzAXm}{%oJ%Ch$f+pqawl7q%oY+P4`DT^hPXQ+mPw_q zc}UC)oFWv2d0ouz6!(Qb_>@{k=_3Ct`QqXfsRqBBQMk!XDsd|*+x_g{j+0)AglD3t zC`m~_+VI0#QXi}KBlkZnj^g@g)Na|RP%vO-oTUiC2*Nx`pn)AopMVIejN}q})&VN=(IpG3h9WtdpnPx`z_u2=KTx_wZMH@6xuXJj&7 zx6GSL-LD*v+f7r6s=i7OU!Xr{M>03#8yz6_SQLbQ)%ZGWIpnL<$JkKz;fGt{(#>Q^ zXLOPns%Fcb39)I2M)V0mn0<9Cntn5)RjNdBV%)$Cr);C)b0jxS*U6^etQ5Y+CiWVM zi4$*n+VVGPGty?N>#XvDB;c@g(lu(_t-iF_4Y+-ECpIU%R^TUdhNM+%WN4_4+i83i zwanpGq#m!dzgqhF?DnLs9-|0GBaiqxXG;g;T2L)L(5}U$BhjQCIs9wz z-=v+`HnF|5ZAWQh!fx9!IWck1Ha;T<@J#6l)h2Fu>@;cJ_h8yTX&<0vyl*!%!dly_ z`K2Si*POHuwS51$9jzzH%;fm^?Cfkg(Q2(IljY-?T3u-5i^u)O_}Iw7{Rj8<4cK1Z zHnJy+bLj|ip0tU7G8vy~kVrdSmUB?<`uLH3rF;AHwAZxXD(xi~t5p0+d+$_`^pu>m zeq-ctqfH=7`>6c!qzz}>&v@6wPMdw*H5%IY?y}p*c8-|zi|Lw8m(tbFHGndm>(naQG%{D(+Y&&N=kEIJNIHwt9 zlm2e;w@oiH?}|-dVxOhXY1=v1Ih9`QoI&~(e!Bg*akle#XWlZnW;^pzi5p7@yO1us zxoZerL*Xl(Gm>@C0knu5_MZ8dji#W?5;YwU?Z`uA%ud5@gES5K~^tTp$D3S;j0``ZLf`x3!9UAE~3DdvKCJtq{*g;g^7GU9YC6Nxp)0hEVhOoW0t^#&#= z7FljAIvRG)=AI!JxN#{DUdF>^ZO8^>NbVW5QiPrm+aNKkab1t--6tmqE6*(;E??}@ zLfHYuP*AS!^M6o=O@GUgfk`jPydFnns+ig3UwSLrFQ9FnQU7fV`kfYs_C{kwJgU=>GSZpf zI9*<|iq%USQx63L@rb2rvBj^x26nAR1b=+LlmM-=#DOOy{iD4N*PIn() z(dkL2H2x8XR8-DzWUONPWhrga&qD3Ze1PX%imtO%dB-B9&?btS^m$bS(xzK+NyL8P z+ED8|^JsbjUy=zoh~pPFo)QZ0&|y1D@ugm*3uE8eS(6*fF?SZFRfe2CZ*)YNRHybZ zM_@=UVS!Sky2p{8pQnyN`BsbW93AfIVRFTUOj((ylBSblVW}DrQX2oP3LyA#3k9l3j=G?-yE{<4J5%)#4MmV#Z+Nbo^xmvgQS5$%_yBu z<;S{n)$^{r4xI3?O(}`^rzDTaC|CKq!l|hnnN#yzz0fVmif88;Y#4q@IB{r9`wY;tARd+QgBrFVjj9uyORDZ7F5_LG_QFgj5AUZ$u9l?;d zl)gs6aI0Qb*HjYwFiSb+YF4^R&YjPC5Vn&F$hgEeS6OtU;79c#Sv$!D$_UBq_$=LA zy~Di}NKRj8f;)9LHlG~55Rk&kMDj}wl#{y1?yfh;df9IHTn4$WK*f(a>yK@Alszl3 zpEFfbUCZR8Iq6y>C*`wTKjya5*{@br?PA_C$V<#u4?OVdh7s48NP#Q1^91^zV%1Xi zCMSKCeX|o=R$S4J*;^eIYn|+BhuD)vs4teC%jXwPcJdj&d!sFeWDwB zwVu7#v4l|7Z)5xG9J{fx?VezHKQG2*9vWk**-X{xR)k(Ne(5lzL#pDDykGW-fO@TL4Lw-2`0JsB>7Lu+W3KFSK6zN(>OsFT-g zKwUB;-)Y!uFVXM+~x;ne^YU_PYy}mfkBRLtT7Y6+#}R z=W&a9iGpXlY&vU(JXGm$$s3W^I4*g@($k&Zk6oo^tm5t~*1fPbg}t0m9dS#h_Z2&` zced`~$90wj{vwC4TD8;Y#}^%5Y6|G2I1EUpfoCdOQrAqJMddYvp(F>BUC(o!tmhqx1OCRN-8D4fX`;^)|ejVep>GdIDC?532{h+hL#aO4x(K9i-*E{(8dKQ!#=o$)cSU28pEff@yLi=&8 R$nA!JUsFw!IRme#{|iE-n+^Z~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..f74a71f7b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,320 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Apostolis Bessas , 2013 +# Claude Paroz , 2017 +# Dimitris Glezos , 2011-2012 +# Giannis Meletakis , 2015 +# glogiotatidis , 2011 +# Jannis Leidel , 2011 +# Nick Mavrakis , 2018 +# Pãnoș , 2014 +# Pãnoș , 2016 +# Serafeim Papastefanos , 2021 +# Yorgos Pagles , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 09:22+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Προσωπικές πληροφορίες" + +msgid "Permissions" +msgstr "Δικαιώματα" + +msgid "Important dates" +msgstr "Σημαντικές ημερομηνίες" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Το αντικείμενο %(name)s με πρωτεύον κλειδί %(key)r δεν υπάρχει." + +msgid "Password changed successfully." +msgstr "Το συνθηματικό αλλάχτηκε με επιτυχία." + +#, python-format +msgid "Change password: %s" +msgstr "Αλλαγή συνθηματικού: %s" + +msgid "Authentication and Authorization" +msgstr "Πιστοποίηση και Εξουσιοδότηση" + +msgid "password" +msgstr "συνθηματικό" + +msgid "last login" +msgstr "τελευταία σύνδεση" + +msgid "No password set." +msgstr "Δεν έχει τεθεί συνθηματικό." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Μη έγκυρη μορφή συνθηματικού ή άγνωστος αλγόριθμος hashing." + +msgid "The two password fields didn’t match." +msgstr "Τα δύο πεδία κωδικών δεν ταιριάζουν." + +msgid "Password" +msgstr "Συνθηματικό" + +msgid "Password confirmation" +msgstr "Επιβεβαίωση συνθηματικού" + +msgid "Enter the same password as before, for verification." +msgstr "Εισάγετε το ίδιο συνθηματικό όπως πρίν, για επιβεβαίωση." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Οι ακατέργαστοι κωδικοί δεν αποθηκεύονται, οπότε δεν υπάρχει τρόπος να δείτε " +"τον κωδικό αυτού του χρήστη, αλλά μπορείτε να τον αλλάξετε χρησιμοποιώντας " +"αυτή τη φόρμα." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Παρακαλώ εισάγετε ένα σωστό %(username)s και κωδικό. Σημειωτέον ότι και τα " +"δύο πεδία κάνουν διάκριση μεταξύ πεζών-κεφαλαίων." + +msgid "This account is inactive." +msgstr "Αυτός ο λογαριασμός είναι ανενεργός." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Νέο συνθηματικό" + +msgid "New password confirmation" +msgstr "Επιβεβαίωση νέου συνθηματικού" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Το παλιό συνθηματικό σας δόθηκε λανθασμένα. Παρακαλώ δοκιμάστε ξανά." + +msgid "Old password" +msgstr "Παλιό συνθηματικό" + +msgid "Password (again)" +msgstr "Συνθηματικό (ξανά)" + +msgid "algorithm" +msgstr "αλγόριθμος" + +msgid "iterations" +msgstr "Επαναλήψεις" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "ποικιλία" + +msgid "version" +msgstr "έκδοση" + +msgid "memory cost" +msgstr "κόστος μνήμης" + +msgid "time cost" +msgstr "χρονικό κόστος" + +msgid "parallelism" +msgstr "παραλληλισμός" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "block size" +msgstr "" + +msgid "name" +msgstr "όνομα" + +msgid "content type" +msgstr "τύπος περιεχομένου" + +msgid "codename" +msgstr "κωδικό όνομα" + +msgid "permission" +msgstr "δικαίωμα" + +msgid "permissions" +msgstr "διακαιώματα" + +msgid "group" +msgstr "ομάδα" + +msgid "groups" +msgstr "ομάδες" + +msgid "superuser status" +msgstr "κατάσταση υπερχρήστη" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Υποδηλώνει ότι ο συγκεκριμένος χρήστης έχει όλα τα δικαιώματα χωρίς να " +"χρειάζεται να τα παραχωρήσετε ξεχωριστά." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Οι ομάδες που ανοίκει ο χρήστης. Ένας χρήστης θα έχει όλες τις άδειες που " +"έχουν δωθεί σε κάθε μια από τις ομάδες." + +msgid "user permissions" +msgstr "δικαιώματα χρήστη" + +msgid "Specific permissions for this user." +msgstr "Συγκεκριμένα δικαιώματα για αυτόν τον χρήστη." + +msgid "username" +msgstr "όνομα χρήστη" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Απαραίτητο. 150 ή λιγότερους χαρακτήρες. Μόνο γράμματα, ψηφία και @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Υπάρχει ήδη ένας χρήστης με αυτό το όνομα." + +msgid "first name" +msgstr "όνομα" + +msgid "last name" +msgstr "επώνυμο" + +msgid "email address" +msgstr "διεύθυνση email" + +msgid "staff status" +msgstr "Κατάσταση προσωπικού" + +msgid "Designates whether the user can log into this admin site." +msgstr "Ορίζει αν ο χρήστης μπορεί να συνδεθεί στο χώρο διαχείρισης." + +msgid "active" +msgstr "ενεργό" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Υποδηλώνει αν ο συγκεκριμένος χρήστης μπορεί να θεωρηθεί ενεργός. Προτιμήστε " +"την επεπιλογή αυτής της επιλογής αντί του να πραγματοποιήσετε διαγραφή του " +"χρήστη." + +msgid "date joined" +msgstr "ημερομηνία ένταξης" + +msgid "user" +msgstr "χρήστης" + +msgid "users" +msgstr "χρήστες" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Αυτό το συνθηματικό είναι πολύ μικρό. Πρέπει να περιέχει τουλάχιστον " +"%(min_length)d χαρακτήρα." +msgstr[1] "" +"Αυτό το συνθηματικό είναι πολύ μικρό. Πρέπει να περιέχει τουλάχιστον " +"%(min_length)d χαρακτήρες." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Το συνθηματικό σας πρέπει να έχει τουλάχιστον %(min_length)d χαρακτήρα." +msgstr[1] "" +"Το συνθηματικό σας πρέπει να έχει τουλάχιστον %(min_length)d χαρακτήρες." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Το συνθηματικό μοιάζει πολύ με το %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Ο κωδικός σας δεν μπορεί να μοιάζει τόσο με τα άλλα προσωπικά σας στοιχεία." + +msgid "This password is too common." +msgstr "Πολύ κοινό συνθηματικό." + +msgid "Your password can’t be a commonly used password." +msgstr "Ο κωδικός σας δεν μπορεί να είναι τόσο συνηθισμένος." + +msgid "This password is entirely numeric." +msgstr "Αυτό το συνθηματικό αποτελείται μόνο απο αριθμούς." + +msgid "Your password can’t be entirely numeric." +msgstr "Ο κωδικός σας δε μπορεί να αποτελείται μόνον από αριθμούς." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Επαναφορά συνθηματικού για το %(site_name)s " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Εισάγετε ένα έγκυρο όνομα χρήστη. Θα πρέπει να περιέχει μόνο Αγγλικούς " +"χαρακτήρες, αριθμούς και τους χαρακτήρες @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Εισάγετε ένα έγκυρο όνομα χρήστη. Θα πρέπει να περιέχει μόνο γράμματα, " +"αριθμούς και τους χαρακτήρες @/./+/-/_ characters." + +msgid "Logged out" +msgstr "Έγινε αποσύνδεση" + +msgid "Password reset" +msgstr "Επαναφορά συνθηματικού" + +msgid "Password reset sent" +msgstr "Η επαναφορά συνθηματικού εστάλει" + +msgid "Enter new password" +msgstr "Εισάγετε νεό συνθηματικό" + +msgid "Password reset unsuccessful" +msgstr "Ανεπιτυχής επαναφορά κωδικού" + +msgid "Password reset complete" +msgstr "Ολοκλήρωση επαναφοράς συνθηματικού" + +msgid "Password change" +msgstr "Αλλαγή συνθηματικού" + +msgid "Password change successful" +msgstr "Επιτυχής αλλαγή συνθηματικού" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ad6a0386 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,375 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/auth/admin.py:46 +msgid "Personal info" +msgstr "" + +#: contrib/auth/admin.py:47 +msgid "Permissions" +msgstr "" + +#: contrib/auth/admin.py:50 +msgid "Important dates" +msgstr "" + +#: contrib/auth/admin.py:134 +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +#: contrib/auth/admin.py:144 +msgid "Password changed successfully." +msgstr "" + +#: contrib/auth/admin.py:164 +#, python-format +msgid "Change password: %s" +msgstr "" + +#: contrib/auth/apps.py:16 +msgid "Authentication and Authorization" +msgstr "" + +#: contrib/auth/base_user.py:48 +msgid "password" +msgstr "" + +#: contrib/auth/base_user.py:49 +msgid "last login" +msgstr "" + +#: contrib/auth/forms.py:41 +msgid "No password set." +msgstr "" + +#: contrib/auth/forms.py:46 +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +#: contrib/auth/forms.py:84 contrib/auth/forms.py:325 contrib/auth/forms.py:398 +msgid "The two password fields didn’t match." +msgstr "" + +#: contrib/auth/forms.py:87 contrib/auth/forms.py:140 contrib/auth/forms.py:170 +#: contrib/auth/forms.py:402 +msgid "Password" +msgstr "" + +#: contrib/auth/forms.py:93 +msgid "Password confirmation" +msgstr "" + +#: contrib/auth/forms.py:96 contrib/auth/forms.py:411 +msgid "Enter the same password as before, for verification." +msgstr "" + +#: contrib/auth/forms.py:142 +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" + +#: contrib/auth/forms.py:177 +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +#: contrib/auth/forms.py:180 +msgid "This account is inactive." +msgstr "" + +#: contrib/auth/forms.py:243 +msgid "Email" +msgstr "" + +#: contrib/auth/forms.py:328 +msgid "New password" +msgstr "" + +#: contrib/auth/forms.py:334 +msgid "New password confirmation" +msgstr "" + +#: contrib/auth/forms.py:370 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +#: contrib/auth/forms.py:373 +msgid "Old password" +msgstr "" + +#: contrib/auth/forms.py:408 +msgid "Password (again)" +msgstr "" + +#: contrib/auth/hashers.py:302 contrib/auth/hashers.py:393 +#: contrib/auth/hashers.py:482 contrib/auth/hashers.py:573 +#: contrib/auth/hashers.py:623 contrib/auth/hashers.py:664 +#: contrib/auth/hashers.py:712 contrib/auth/hashers.py:757 +#: contrib/auth/hashers.py:805 +msgid "algorithm" +msgstr "" + +#: contrib/auth/hashers.py:303 +msgid "iterations" +msgstr "" + +#: contrib/auth/hashers.py:304 contrib/auth/hashers.py:399 +#: contrib/auth/hashers.py:484 contrib/auth/hashers.py:577 +#: contrib/auth/hashers.py:624 contrib/auth/hashers.py:665 +#: contrib/auth/hashers.py:806 +msgid "salt" +msgstr "" + +#: contrib/auth/hashers.py:305 contrib/auth/hashers.py:400 +#: contrib/auth/hashers.py:578 contrib/auth/hashers.py:625 +#: contrib/auth/hashers.py:666 contrib/auth/hashers.py:713 +#: contrib/auth/hashers.py:758 contrib/auth/hashers.py:807 +msgid "hash" +msgstr "" + +#: contrib/auth/hashers.py:394 +msgid "variety" +msgstr "" + +#: contrib/auth/hashers.py:395 +msgid "version" +msgstr "" + +#: contrib/auth/hashers.py:396 +msgid "memory cost" +msgstr "" + +#: contrib/auth/hashers.py:397 +msgid "time cost" +msgstr "" + +#: contrib/auth/hashers.py:398 contrib/auth/hashers.py:576 +msgid "parallelism" +msgstr "" + +#: contrib/auth/hashers.py:483 contrib/auth/hashers.py:574 +msgid "work factor" +msgstr "" + +#: contrib/auth/hashers.py:485 +msgid "checksum" +msgstr "" + +#: contrib/auth/hashers.py:575 +msgid "block size" +msgstr "" + +#: contrib/auth/models.py:58 contrib/auth/models.py:109 +msgid "name" +msgstr "" + +#: contrib/auth/models.py:62 +msgid "content type" +msgstr "" + +#: contrib/auth/models.py:64 +msgid "codename" +msgstr "" + +#: contrib/auth/models.py:69 +msgid "permission" +msgstr "" + +#: contrib/auth/models.py:70 contrib/auth/models.py:112 +msgid "permissions" +msgstr "" + +#: contrib/auth/models.py:119 +msgid "group" +msgstr "" + +#: contrib/auth/models.py:120 contrib/auth/models.py:247 +msgid "groups" +msgstr "" + +#: contrib/auth/models.py:238 +msgid "superuser status" +msgstr "" + +#: contrib/auth/models.py:241 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:250 +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +#: contrib/auth/models.py:258 +msgid "user permissions" +msgstr "" + +#: contrib/auth/models.py:260 +msgid "Specific permissions for this user." +msgstr "" + +#: contrib/auth/models.py:331 +msgid "username" +msgstr "" + +#: contrib/auth/models.py:334 +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +#: contrib/auth/models.py:337 +msgid "A user with that username already exists." +msgstr "" + +#: contrib/auth/models.py:340 +msgid "first name" +msgstr "" + +#: contrib/auth/models.py:341 +msgid "last name" +msgstr "" + +#: contrib/auth/models.py:342 +msgid "email address" +msgstr "" + +#: contrib/auth/models.py:344 +msgid "staff status" +msgstr "" + +#: contrib/auth/models.py:346 +msgid "Designates whether the user can log into this admin site." +msgstr "" + +#: contrib/auth/models.py:349 +msgid "active" +msgstr "" + +#: contrib/auth/models.py:352 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:356 +msgid "date joined" +msgstr "" + +#: contrib/auth/models.py:365 +msgid "user" +msgstr "" + +#: contrib/auth/models.py:366 +msgid "users" +msgstr "" + +#: contrib/auth/password_validation.py:102 +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#: contrib/auth/password_validation.py:112 +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#: contrib/auth/password_validation.py:151 +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +#: contrib/auth/password_validation.py:157 +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +#: contrib/auth/password_validation.py:188 +msgid "This password is too common." +msgstr "" + +#: contrib/auth/password_validation.py:193 +msgid "Your password can’t be a commonly used password." +msgstr "" + +#: contrib/auth/password_validation.py:203 +msgid "This password is entirely numeric." +msgstr "" + +#: contrib/auth/password_validation.py:208 +msgid "Your password can’t be entirely numeric." +msgstr "" + +#: contrib/auth/templates/registration/password_reset_subject.txt:2 +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +#: contrib/auth/validators.py:12 +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +#: contrib/auth/validators.py:22 +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +#: contrib/auth/views.py:164 +msgid "Logged out" +msgstr "" + +#: contrib/auth/views.py:221 +msgid "Password reset" +msgstr "" + +#: contrib/auth/views.py:248 +msgid "Password reset sent" +msgstr "" + +#: contrib/auth/views.py:258 +msgid "Enter new password" +msgstr "" + +#: contrib/auth/views.py:321 +msgid "Password reset unsuccessful" +msgstr "" + +#: contrib/auth/views.py:329 +msgid "Password reset complete" +msgstr "" + +#: contrib/auth/views.py:341 +msgid "Password change" +msgstr "" + +#: contrib/auth/views.py:364 +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bdd8328d3c5049948d7ff0da96ad8539bdbd52d6 GIT binary patch literal 7183 zcmeI0ON<;x8OMtx#6Sk>Z`B*-`C}R@y4qjRU9j{chbIbg;Hnb`i-18etxx5d*LtOG`!*( zr8Jy@H^F5n?;5xdJ_#*+8H$Nh*DBS955hJ0V|XLf*D3WrcsG0t?7%(nJe+{vhu6cW z;WqeF_*VFvs{bz#Q|jMU|24cMc5a2Y!72DIco@C|uERIO^Y9k<1^90GEhzK22ycha z!#BY{!yDi$@T2fLI==)v@F@Hzyb~V8NdqmE`TPv-g#Uu#_gxs-0T-ae*T8SWN8mwt z2TskwHTYimWq1t!2!0Y?&7=su`W$4c>H?H`f3@P{kfGGKq4@n2#I(8yab5iq$~wFN z#mU5wKlKnNv3CZ_ zeP8u&K(TWHieF!WNJTwX@d+s7e;0P&pwthb=9$9W}%i)vWsOhcb@` zt9}E;P6kDPpM|2o$07gJ4>_@<>NzO-`z;jx{R85f+IDlPzZ#VJFF{$y(@^vmK+)f` zQ1rKo5z*h*q3G`-l=*DGwbb7OQ2c%bivGR^MSssg(ccSD^w;O1Iruab{k;s2!CRPw z=-iFtdH<>6-=V}wl1Kc$0gB(-pu}+}ly#VcVrMTDJ={~>KT`1|6#E~B zVkd<1T(A0_LmBroQ0!i)`X7bz+!L_K11RhC6cl?usqX)(>VF=JotL2a^+zcB`)kEl zpp1Vd!9sq;aV2MotsHNoA+_R=c*5^Cv6v*_WXM;-2%q-}N2IM+|Ju&F1VI$~YaPK;;J!n*H7t{kyr97Dvq zXR~hP941}iMVgCmy*LUYA8%-kVIWG{yl=bpafAJir7x2krOCh~I!@ag@_~@Li>(hy|u|&17870mW7@f9sNVgZ?Oc11b z;)&8?*F>>eOgxSmea^&DI1FiBuZmN2=2myjh7Qui8yrj%X1bWPl%T1BGsbG|NQrlT%V1s?s7d9K^1!Po$n?k&3aNQfpd~jYC(c znj{J^R>K{fl?+m+%t%4xRc4D4lBHNG-sSd@7a<;BM)U$!;{E{*z`X72;SF3o|&eFUmHE>XH)@__7 zZF2;Fq}Ih_>}NP-6%FVQUsTkBqP^T zH_%S`lJActNVSAv6efh*vz9*S$a7e%3Y@G^lvH)GyfZ#7@*$?wGD;WuA5<@oKO(N7 z?{1pB&P^(D=IeTi@pI>gB@&&9L`9O6^tIR~ZQq#=M=SR~Hb-%ND9tmSjui})>Ba1=Nt29$9St@(H+EQ41puFAG;TeixI&sR%ceb|d+EG|L zl($`NHErsNm6Nqo_FN>EYDb7)Q_s!L?XJ!4tIf^n*?rBqxm~jy6UT{6ZIx={V#7#H zU0g>kdtM)6%XnacCz5t<+P1c8O}9DRvrHW%SBY0-ru9_E`(Crr==b||`uGO$ex00e zluiy1SEd>^Svz>TF+H)ow7fW)(eC=}#Nl$`YpX1LQ+s>fH+nIdwZBMvzMS)?SC7{A zj-Hd@S~jaKlAIx*fTrHN9{HiyO|qAA+_5BJcr, 2014 +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 09:22+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personal info" + +msgid "Permissions" +msgstr "Permissions" + +msgid "Important dates" +msgstr "Important dates" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s object with primary key %(key)r does not exist." + +msgid "Password changed successfully." +msgstr "Password changed successfully." + +#, python-format +msgid "Change password: %s" +msgstr "Change password: %s" + +msgid "Authentication and Authorization" +msgstr "Authentication and Authorisation" + +msgid "password" +msgstr "password" + +msgid "last login" +msgstr "last login" + +msgid "No password set." +msgstr "No password set." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Invalid password format or unknown hashing algorithm." + +msgid "The two password fields didn’t match." +msgstr "The two password fields didn’t match." + +msgid "Password" +msgstr "Password" + +msgid "Password confirmation" +msgstr "Password confirmation" + +msgid "Enter the same password as before, for verification." +msgstr "Enter the same password as before, for verification." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." + +msgid "This account is inactive." +msgstr "This account is inactive." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "New password" + +msgid "New password confirmation" +msgstr "New password confirmation" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Your old password was entered incorrectly. Please enter it again." + +msgid "Old password" +msgstr "Old password" + +msgid "Password (again)" +msgstr "Password (again)" + +msgid "algorithm" +msgstr "algorithm" + +msgid "iterations" +msgstr "iterations" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variety" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "memory cost" + +msgid "time cost" +msgstr "time cost" + +msgid "parallelism" +msgstr "parallelism" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "block size" +msgstr "" + +msgid "name" +msgstr "name" + +msgid "content type" +msgstr "content type" + +msgid "codename" +msgstr "codename" + +msgid "permission" +msgstr "permission" + +msgid "permissions" +msgstr "permissions" + +msgid "group" +msgstr "group" + +msgid "groups" +msgstr "groups" + +msgid "superuser status" +msgstr "superuser status" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Designates that this user has all permissions without explicitly assigning " +"them." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." + +msgid "user permissions" +msgstr "user permissions" + +msgid "Specific permissions for this user." +msgstr "Specific permissions for this user." + +msgid "username" +msgstr "username" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." + +msgid "A user with that username already exists." +msgstr "A user with that username already exists." + +msgid "first name" +msgstr "first name" + +msgid "last name" +msgstr "last name" + +msgid "email address" +msgstr "email address" + +msgid "staff status" +msgstr "staff status" + +msgid "Designates whether the user can log into this admin site." +msgstr "Designates whether the user can log into this admin site." + +msgid "active" +msgstr "active" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." + +msgid "date joined" +msgstr "date joined" + +msgid "user" +msgstr "user" + +msgid "users" +msgstr "users" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgstr[1] "" +"This password is too short. It must contain at least %(min_length)d " +"characters." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Your password must contain at least %(min_length)d character." +msgstr[1] "Your password must contain at least %(min_length)d characters." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "The password is too similar to the %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Your password can’t be too similar to your other personal information." + +msgid "This password is too common." +msgstr "This password is too common." + +msgid "Your password can’t be a commonly used password." +msgstr "Your password can’t be a commonly used password." + +msgid "This password is entirely numeric." +msgstr "This password is entirely numeric." + +msgid "Your password can’t be entirely numeric." +msgstr "Your password can’t be entirely numeric." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Password reset on %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." + +msgid "Logged out" +msgstr "Logged out" + +msgid "Password reset" +msgstr "Password reset" + +msgid "Password reset sent" +msgstr "Password reset sent" + +msgid "Enter new password" +msgstr "Enter new password" + +msgid "Password reset unsuccessful" +msgstr "Password reset unsuccessful" + +msgid "Password reset complete" +msgstr "Password reset complete" + +msgid "Password change" +msgstr "Password change" + +msgid "Password change successful" +msgstr "Password change successful" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..59ed27700f884dded075c14eb225aff7949a7429 GIT binary patch literal 3179 zcmeH|J!~9B6vqcJUuP0R_y`{%c_A3z#o6=OSdgq^AhDAuV3U(|K}uy!cIS4-*_%0b zW^=J#3IwC|H+zTEC`=A1^g7<pYIlS?5`hb$$a> z;5CqSK8RpB-Xo}Z-;*Hg(y96eEOh``=Sv{#ddHpVs^WBY#^J-M%Vby;gH$XfIV?DXtHv}JrQp<^|&v*d#MAhf_%!T7+ z?Z>%;LS=np#rLxg+XZ_F#_y8LV=&flz3fMW-*2f64<4n$shkGdr{q)V%dU|ONguP>-3oiR>jD)K|0+BlEA$#yBmu;ns(4okhuFiYXLj`dfaja`7+Lf3a4XVpTYSY*ph)UUGazzv==ek9f ztu?nyZ}q+Ij&kLcCu?Y|&g!i23vD>j-h3I{cGk!Ya(1ogKx99#8)4EY zLhMo6#8WK#Pz*v-n@U4*))qP0EveA}3M=DP4tcbRY@S16gih^DNvDQ$q&<}hH^tDC zkXd4L9LAoAQWc$d1sXP1oPc1-Y1L|@VgW&&r*b&SZP6EH?F7zUDv)wss_jH3@fc2x zHp6DQqO3Mv!sZbbn@uO2%)D@3cDsby7Z@opUtX7LfZL)R*t(Dh${o1j1TM>Y>LNXx zi*{~TAwzH~4qm|=&O=D?D(;o7Eh|1*!IDdK92_eW7j$e$wf5;wFwbWe&jt$+Af)Nm z)U!eBa4sFZ=t*DVl%S6$zhV~$SQx6%B-9`Hrc2xomx7+smN5bRhzdsI|h-i^^vky7yV>E z!_Al_T!, 2011-2012 +# Ross Poulton , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personal info" + +msgid "Permissions" +msgstr "Permissions" + +msgid "Important dates" +msgstr "Important dates" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Password changed successfully." + +#, python-format +msgid "Change password: %s" +msgstr "Change password: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "password" + +msgid "last login" +msgstr "last login" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "The two password fields didn't match." + +msgid "Password" +msgstr "Password" + +msgid "Password confirmation" +msgstr "Password confirmation" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "This account is inactive." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "New password" + +msgid "New password confirmation" +msgstr "New password confirmation" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Your old password was entered incorrectly. Please enter it again." + +msgid "Old password" +msgstr "Old password" + +msgid "Password (again)" +msgstr "Password (again)" + +msgid "algorithm" +msgstr "algorithm" + +msgid "iterations" +msgstr "iterations" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "name" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "codename" + +msgid "permission" +msgstr "permission" + +msgid "permissions" +msgstr "permissions" + +msgid "group" +msgstr "group" + +msgid "groups" +msgstr "groups" + +msgid "superuser status" +msgstr "superuser status" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Designates that this user has all permissions without explicitly assigning " +"them." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "user permissions" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "username" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "A user with that username already exists." + +msgid "first name" +msgstr "first name" + +msgid "last name" +msgstr "last name" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "staff status" + +msgid "Designates whether the user can log into this admin site." +msgstr "Designates whether the user can log into this admin site." + +msgid "active" +msgstr "active" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." + +msgid "date joined" +msgstr "date joined" + +msgid "user" +msgstr "user" + +msgid "users" +msgstr "users" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Password reset on %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Logged out" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5405971b5d8debd2e363daf39739ae824ee96926 GIT binary patch literal 7329 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 Ra8>KGixrnOF(Va>`Y#;bfwcet literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..a1d711d50 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,306 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Batist D 🐍 , 2012-2013 +# Batist D 🐍 , 2013-2019 +# Matthieu Desplantes , 2021 +# Robin van der Vliet , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-04-13 08:08+0000\n" +"Last-Translator: Matthieu Desplantes \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personaj informoj" + +msgid "Permissions" +msgstr "Permesoj" + +msgid "Important dates" +msgstr "Gravaj datoj" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objekto kun ĉefŝlosilo %(key)r ne ekzistas." + +msgid "Password changed successfully." +msgstr "Pasvorto suksese ŝanĝita." + +#, python-format +msgid "Change password: %s" +msgstr "Ŝanĝi pasvorton: %s" + +msgid "Authentication and Authorization" +msgstr "Aŭtentigo kaj rajtigo" + +msgid "password" +msgstr "pasvorto" + +msgid "last login" +msgstr "lasta ensaluto" + +msgid "No password set." +msgstr "Neniu pasvorto agordita." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Nevalida pasvorta formato, aŭ nekonata haketa algoritmo." + +msgid "The two password fields didn’t match." +msgstr "La du pasvortaj kampoj ne kongruas." + +msgid "Password" +msgstr "Pasvorto" + +msgid "Password confirmation" +msgstr "Pasvorta konfirmo" + +msgid "Enter the same password as before, for verification." +msgstr "Entajpu la saman pasvorton kiel supre, por konfirmo." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"La pasvortoj ne estas konservitaj en klara formo, do ne eblas vidi la " +"pasvorton de ĉi tiu uzanto, sed vi povas ŝanĝi la pasvorton per ĉi tiu formularo." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Bonvolu enigi ĝustan %(username)sn kaj pasvorton. Notu, ke ambaŭ kampoj " +"povas esti usklecodistingaj." + +msgid "This account is inactive." +msgstr "Ĉi tiu konto ne estas aktiva." + +msgid "Email" +msgstr "Retpoŝto" + +msgid "New password" +msgstr "Nova pasvorto" + +msgid "New password confirmation" +msgstr "Nova pasvorto por konfirmo" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Via malnova pasvorto estis tajpita malĝuste. Bonvolu denove entajpi ĝin." + +msgid "Old password" +msgstr "Malnova pasvorto" + +msgid "Password (again)" +msgstr "Pasvorto (denove)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteracioj" + +msgid "salt" +msgstr "salo" + +msgid "hash" +msgstr "haketo" + +msgid "variety" +msgstr "diverseco" + +msgid "version" +msgstr "versio" + +msgid "memory cost" +msgstr "memoria kosto" + +msgid "time cost" +msgstr "tempa kosto" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "laborfaktoro" + +msgid "checksum" +msgstr "kontrolsumo" + +msgid "name" +msgstr "nomo" + +msgid "content type" +msgstr "enhava tipo" + +msgid "codename" +msgstr "kodnomo" + +msgid "permission" +msgstr "permeso" + +msgid "permissions" +msgstr "permesoj" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupoj" + +msgid "superuser status" +msgstr "ĉefuzanta statuso" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indikas ke tiu uzanto havas ĉiujn permesojn, sen eksplicite asigni ilin." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"La grupoj en kiu tiu uzanto apartenas. Uzanto akiros ĉiuj permesoj donita al " +"ĉiuj de iliaj grupoj." + +msgid "user permissions" +msgstr "uzantaj permesoj" + +msgid "Specific permissions for this user." +msgstr "Specifaj permesoj por tiu ĉi uzanto." + +msgid "username" +msgstr "salutnomo" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Petita. 150 signoj aŭ malpli. Nur literoj, ciferoj kaj @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uzanto kun sama salutnomo jam ekzistas." + +msgid "first name" +msgstr "persona nomo" + +msgid "last name" +msgstr "familia nomo" + +msgid "email address" +msgstr "retpoŝta adreso" + +msgid "staff status" +msgstr "personara statuso" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indikas ĉu la uzanto povas saluti en ĉi-tiu administranta retejo." + +msgid "active" +msgstr "aktiva" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indikas ĉu tiu uzanto devus esti traktita kiel aktiva. Malselekti tion ĉi " +"anstataŭ forigi kontojn." + +msgid "date joined" +msgstr "dato aliĝita" + +msgid "user" +msgstr "uzanto" + +msgid "users" +msgstr "uzantoj" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tiu pasvorto estas tro mallonga. Ĝi devas enhavi almenaŭ %(min_length)d " +"signon." +msgstr[1] "" +"Tiu pasvorto estas tro mallonga. Ĝi devas enhavi almenaŭ %(min_length)d " +"signojn." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Via pasvorto devas enhavi almenaŭ %(min_length)d signon." +msgstr[1] "Via pasvorto devas enhavi almenaŭ %(min_length)d signojn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La pasvorto estas tro simila al la %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Via pasvorto ne povas esti tro simila al viaj aliaj personaj informoj." + +msgid "This password is too common." +msgstr "Tiu pasvorto estas tro kutima." + +msgid "Your password can’t be a commonly used password." +msgstr "Via pasvorto ne povas esti ofte uzata pasvorto." + +msgid "This password is entirely numeric." +msgstr "Tiu pasvorto estas tute cefera." + +msgid "Your password can’t be entirely numeric." +msgstr "Via pasvorto ne povas konsisti nur el ciferoj." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Pasvorta rekomencigo ĉe %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Enigu validan uzantnomon. Ĉi tiu valoro povas enhavi nur sensupersignajn " +"literojn, ciferojn kaj la signojn @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Enigu validan uzantnomon. Ĉi tiu valoro povas enhavi nur literojn, ciferojn " +"kaj la signojn @/./+/-/_." + +msgid "Logged out" +msgstr "Adiaŭita" + +msgid "Password reset" +msgstr "Restarigo de pasvorto" + +msgid "Password reset sent" +msgstr "Restarigo de pasvorto sendita" + +msgid "Enter new password" +msgstr "Enigu novan pasvorton" + +msgid "Password reset unsuccessful" +msgstr "Restarigo de pasvorto malsukcesa" + +msgid "Password reset complete" +msgstr "Restarigo de pasvorto plenumita" + +msgid "Password change" +msgstr "Pasvorta ŝanĝo" + +msgid "Password change successful" +msgstr "Pasvorto sukcese ŝanĝita" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4dc2c96386363fc7c649101a39ffa7fcea413966 GIT binary patch literal 7782 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, 2014 +# Antoni Aloy , 2012-2013,2015-2017 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015-2016 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2020 +# Ernesto Rico Schmidt , 2017 +# guillem , 2012 +# Igor Támara , 2015 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Leonardo J. Caballero G. , 2011 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-10 03:52+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "el objeto %(name)s con clave primaria %(key)r no existe." + +msgid "Password changed successfully." +msgstr "La contraseña se ha cambiado con éxito." + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último inicio de sesión" + +msgid "No password set." +msgstr "No se ha establecido la clave." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de clave incorrecto o algoritmo de hash desconocido." + +msgid "The two password fields didn’t match." +msgstr "Los dos campos de contraseña no coinciden." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Contraseña (confirmación)" + +msgid "Enter the same password as before, for verification." +msgstr "Para verificar, introduzca la misma contraseña anterior." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Las contraseñas no se almacenan en bruto, así que no hay manera de ver la " +"contraseña del usuario, pero se puede cambiar la contraseña mediante este formulario." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor, introduzca un %(username)s y clave correctos. Observe que ambos " +"campos pueden ser sensibles a mayúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Correo electrónico" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Contraseña nueva (confirmación)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla. " + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteraciones" + +msgid "salt" +msgstr "salto" + +msgid "hash" +msgstr "función resumen" + +msgid "variety" +msgstr "variedad" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "coste de memoria" + +msgid "time cost" +msgstr "coste de tiempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "factor trabajo" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "block size" +msgstr "tamaño de bloque" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre en código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "estado de superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario tiene todos los permisos sin asignárselos " +"explícitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Los grupos a los que pertenece este usuario. Un usuario tendrá todos los " +"permisos asignados a cada uno de sus grupos." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos para este usuario." + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Requerido. 150 carácteres como máximo. Únicamente letras, dígitos y @/./+/-/" +"_ " + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con este nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellidos" + +msgid "email address" +msgstr "dirección de correo electrónico" + +msgid "staff status" +msgstr "es staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede entrar en este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como activo. Desmarque esta opción en " +"lugar de borrar la cuenta." + +msgid "date joined" +msgstr "fecha de alta" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"caracter." +msgstr[1] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Su contraseña debe contener al menos %(min_length)d caracter." +msgstr[1] "Su contraseña debe contener al menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es demasiado similar a la de %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Su contraseña no puede asemejarse tanto a su otra información personal." + +msgid "This password is too common." +msgstr "Esta contraseña es demasiado común." + +msgid "Your password can’t be a commonly used password." +msgstr "Su contraseña no puede ser una clave utilizada comúnmente." + +msgid "This password is entirely numeric." +msgstr "Esta contraseña es completamente numérica." + +msgid "Your password can’t be entirely numeric." +msgstr "Su contraseña no puede ser completamente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Contraseña restablecida en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Introduza un nombre de usuario válido. Este valor puede contener únicamente " +"letras inglesas, números y los caracteres @/./+/-/_ " + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Introduza un nombre de usuario válido. Este valor puede contener únicamente " +"letras, números y los caracteres @/./+/-/_ " + +msgid "Logged out" +msgstr "Sesión terminada" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Password reset sent" +msgstr "Restablecimiento de contraseña enviado" + +msgid "Enter new password" +msgstr "Escriba la nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Restablecimiento de contraseñas fallido" + +msgid "Password reset complete" +msgstr "Restablecimiento de contraseña completado" + +msgid "Password change" +msgstr "Cambiar contraseña" + +msgid "Password change successful" +msgstr "Contraseña cambiada correctamente" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7d4970a1de78f5bf14ea36fcda77934b245b21b9 GIT binary patch literal 7943 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..d250b42a1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,314 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2013-2017,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 13:26+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "No existe un objeto %(name)s con una clave primaria %(key)r." + +msgid "Password changed successfully." +msgstr "Cambio de contraseña exitoso" + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y Autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último ingreso" + +msgid "No password set." +msgstr "No se ha establecido una contraseña." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de contraseña inválido o algoritmo de hashing desconocido." + +msgid "The two password fields didn’t match." +msgstr "Los dos campos de contraseñas no coinciden entre si." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Confirmación de contraseña" + +msgid "Enter the same password as before, for verification." +msgstr "" +"Introduzca la misma contraseña nuevamente, para poder verificar la misma." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"El sistema no almacena las contraseñas originales por lo cual no es posible " +"visualizar la contraseña de este usuario, pero puede modificarla usando este formulario." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor introduzca un %(username)s y una contraseña correctos. Tenga en " +"cuenta que ambos campos son sensibles a mayúsculas/minúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Confirmación de contraseña nueva" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La antigua contraseña introducida es incorrecta. Por favor introdúzcala " +"nuevamente." + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteraciones" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedad" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "costo en memoria" + +msgid "time cost" +msgstr "costo en tiempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "block size" +msgstr "tamaño de bloque" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre en código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "es superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario posee todos los permisos sin que sea necesario " +"asignarle los mismos en forma explícita." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupos a los cuales pertenece este usuario. Un usuario obtiene todos los " +"permisos otorgados a cada uno de los grupos a los cuales pertenece." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos de este usuario" + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatorio. Longitud máxima de 150 caracteres. Solo puede estar formado por " +"letras, números y los caracteres @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con ese nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellido" + +msgid "email address" +msgstr "Dirección de email" + +msgid "staff status" +msgstr "es staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede ingresar a este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como un usuario activo. Desactive este " +"campo en lugar de eliminar usuarios." + +msgid "date joined" +msgstr "fecha de creación" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"La contraseña es demasiado corta. Debe contener por lo menos %(min_length)d " +"caracter." +msgstr[1] "" +"La contraseña es demasiado corta. Debe contener por lo menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Su contraseña debe contener por lo menos %(min_length)d caracter." +msgstr[1] "Su contraseña debe contener por lo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es muy similar a %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Su contraseña no puede ser similar a otros componentes de su información " +"personal." + +msgid "This password is too common." +msgstr "La contraseña tiene un valor demasiado común." + +msgid "Your password can’t be a commonly used password." +msgstr "Su contraseña no puede ser una contraseña usada muy comúnmente." + +msgid "This password is entirely numeric." +msgstr "La contraseña está formada completamente por dígitos." + +msgid "Your password can’t be entirely numeric." +msgstr "Su contraseña no puede estar formada exclusivamente por números." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Reinicio de contraseña en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este valor solo puede contener " +"letras del alfabeto inglés, números y los caracteres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este valor solo puede contener " +"letras, números y los caracteres @/./+/-/_." + +msgid "Logged out" +msgstr "Sesión cerrada" + +msgid "Password reset" +msgstr "Reinicio de contraseña" + +msgid "Password reset sent" +msgstr "Se ha enviado un email de reinicialización de contraseña" + +msgid "Enter new password" +msgstr "Introduzca nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Reinicio de contraseña fallido" + +msgid "Password reset complete" +msgstr "Reinicio de contraseña completado" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Password change successful" +msgstr "Cambio de contraseña exitoso" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..deb2dd167cfa9834c56b918dcff34a5a973821b5 GIT binary patch literal 6529 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 GPW=~xl9|8& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 000000000..46adfb250 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,304 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# albertoalcolea , 2014 +# Ernesto Avilés Vázquez , 2015 +# guillem , 2012 +# Igor Támara , 2015 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Leonardo J. Caballero G. , 2011 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "el objeto %(name)s con clave primaria %(key)r no existe." + +msgid "Password changed successfully." +msgstr "La contraseña se ha cambiado con éxito." + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último inicio de sesión" + +msgid "No password set." +msgstr "No se ha establecido la clave." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de clave incorrecto o algoritmo de hash desconocido." + +msgid "The two password fields didn't match." +msgstr "Los dos campos de contraseña no coinciden." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Contraseña (confirmación)" + +msgid "Enter the same password as before, for verification." +msgstr "Para verificar, ingrese la misma contraseña anterior." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor, introduzca un %(username)s y clave correctos. Observe que ambos " +"campos pueden ser sensibles a mayúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Correo electrónico" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Contraseña nueva (confirmación)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla." + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteraciones" + +msgid "salt" +msgstr "sal" + +msgid "hash" +msgstr "función resumen" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "factor trabajo" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre en código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "es superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario tiene todos los permisos sin asignárselos " +"explícitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Los grupos a los que pertenece este usuario. Un usuario tendrá todos los " +"permisos asignados a cada uno de sus grupos." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos para este usuario." + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con este nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellidos" + +msgid "email address" +msgstr "dirección de correo electrónico" + +msgid "staff status" +msgstr "es staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede entrar en este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como activo. Desmarque esta opción en " +"lugar de borrar la cuenta." + +msgid "date joined" +msgstr "fecha de alta" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"carácter." +msgstr[1] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Su contraseña debe contener por lo menos %(min_length)d carácter." +msgstr[1] "Su contraseña debe contener por lo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es muy parecida a %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Su contraseña no puede asemejarse tanto a su otra información personal." + +msgid "This password is too common." +msgstr "Esta contraseña es demasiado común." + +msgid "Your password can't be a commonly used password." +msgstr "La contraseña no puede ser una contraseña de uso común." + +msgid "This password is entirely numeric." +msgstr "Esta contraseña es completamente numérica." + +msgid "Your password can't be entirely numeric." +msgstr "Su contraseña no puede ser completamente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Contraseña restablecida en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Sesión terminada" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Password reset sent" +msgstr "Restablecimiento de contraseña enviado" + +msgid "Enter new password" +msgstr "Escriba la nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Restablecimiento de contraseñas fallido" + +msgid "Password reset complete" +msgstr "Restablecimiento de contraseña completado" + +msgid "Password change" +msgstr "Cambiar contraseña" + +msgid "Password change successful" +msgstr "Contraseña cambiada correctamente" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7cccb78e703e0c02602762e2bd83295b87d33342 GIT binary patch literal 7822 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 X-P6S;u9`aP7*#cNQslPG5vTqO;>t!= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..db9be6e56 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,312 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abe Estrada, 2011-2012 +# Claude Paroz , 2017 +# Jesús Bautista , 2019 +# Juan Pablo Flores , 2016 +# zodman , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-26 17:00+0000\n" +"Last-Translator: Jesús Bautista \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "No existe un objeto %(name)s con una clave primaria %(key)r." + +msgid "Password changed successfully." +msgstr "Cambio de contraseña exitoso" + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y Autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último ingreso" + +msgid "No password set." +msgstr "No se ha establecido ninguna contraseña." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de contraseña no válido o algoritmo de hash desconocido." + +msgid "The two password fields didn’t match." +msgstr "Los dos campos de contraseña no coinciden." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Confirmación de contraseña" + +msgid "Enter the same password as before, for verification." +msgstr "Para verificar, introduzca la misma contraseña que introdujo antes." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Las contraseñas sin procesar no se almacenan, por lo que no hay forma de ver " +"la contraseña de este usuario, pero puede cambiarla usando este formulario. " + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor introduzca %(username)s y contraseña correctos. Note que puede que " +"ambos campos sean estrictos en relación a diferencias entre mayúsculas y " +"minúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Correo Electrónico" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Confirmación de contraseña nueva" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La antigua contraseña introducida es incorrecta. Por favor introdúzcala " +"nuevamente." + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "repeticiones" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedad" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "costo en memoria" + +msgid "time cost" +msgstr "costo en tiempo" + +msgid "parallelism" +msgstr "Paralelismo" + +msgid "work factor" +msgstr "factor trabajo" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "es superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario posee todos los permisos sin que sea necesario " +"asignarle los mismos en forma explícita." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Los grupos a los que pertenece este usuario. Un usuario obtendrá todos los " +"permisos concedidos para cada uno de su grupo." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos para este usuario" + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatorio. Longitud máxima 150 caracteres alfanuméricos. Letras, dígitos y " +"@/./+/-/_ únicamente." + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con ese nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellido" + +msgid "email address" +msgstr "Dirección de correo electrónico" + +msgid "staff status" +msgstr "es staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede ingresar a este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como un usuario activo. Desactive este " +"campo en lugar de eliminar usuarios." + +msgid "date joined" +msgstr "fecha de creación" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"La contraseña es muy corta. Debe contener al menos %(min_length)d caracter." +msgstr[1] "" +"La contraseña es muy corta. Debe contener al menos %(min_length)d caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Tu contraseña es muy corta. Debe contener al menos %(min_length)d caracter." +msgstr[1] "" +"Su contraseña es muy corta. Debe contener al menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es muy similar a %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Su contraseña no puede ser muy similar a su otra información personal." + +msgid "This password is too common." +msgstr "Esta contraseña es muy común." + +msgid "Your password can’t be a commonly used password." +msgstr "Su contraseña no puede ser una contraseña de uso común." + +msgid "This password is entirely numeric." +msgstr "Esta contraseña es totalmente numérica." + +msgid "Your password can’t be entirely numeric." +msgstr "Su contraseña no puede ser completamente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Restablecimiento de la contraseña en %(site_name)s " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Ingrese un nombre de usuario válido. Este sólo puede contener letras en " +"inglés, números y caracteres @ /. / + / - / _." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Ingrese un nombre de usuario válido. Este puede contener sólo letras, " +"números y caracteres @ /. / + / - / _." + +msgid "Logged out" +msgstr "Sesión cerrada" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Password reset sent" +msgstr "Restablecimiento de contraseña enviado" + +msgid "Enter new password" +msgstr "Introduzca la nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Restablecimiento de contraseña no exitosa" + +msgid "Password reset complete" +msgstr "Reinicialización de contraseña completada" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Password change successful" +msgstr "Cambio de contraseña exitoso" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11f27e404e6524352ca9d9e1104b144256c6f772 GIT binary patch literal 7415 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, 2017 +# Leonardo J. Caballero G. , 2016 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "el objeto %(name)s con clave primaria %(key)r no existe." + +msgid "Password changed successfully." +msgstr "La contraseña se ha cambiado con éxito." + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último inicio de sesión" + +msgid "No password set." +msgstr "No se ha establecido la clave." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de clave incorrecto o algoritmo de hash desconocido." + +msgid "The two password fields didn't match." +msgstr "Los dos campos de contraseña no coinciden." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Contraseña (confirmación)" + +msgid "Enter the same password as before, for verification." +msgstr "Para verificar, ingrese la misma contraseña anterior." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor, introduzca un %(username)s y clave correctos. Observe que ambos " +"campos pueden ser sensibles a mayúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Correo electrónico" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Contraseña nueva (confirmación)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla." + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteraciones" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "función resumen" + +msgid "variety" +msgstr "variedad" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "costo de memoria" + +msgid "time cost" +msgstr "costo de tiempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "factor trabajo" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre en código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "estatus de superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario tiene todos los permisos sin asignárselos " +"explícitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Los grupos a los que pertenece este usuario. Un usuario tendrá todos los " +"permisos asignados a cada uno de sus grupos." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos para este usuario." + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Requerido. 150 caracteres o menos. Letras, dígitos y @/./+/-/_ solamente. " + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con este nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellidos" + +msgid "email address" +msgstr "dirección de correo electrónico" + +msgid "staff status" +msgstr "estatus staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede entrar en este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como activo. Desmarque esta opción en " +"lugar de borrar la cuenta." + +msgid "date joined" +msgstr "fecha de alta" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"carácter." +msgstr[1] "" +"Esta contraseña es demasiado corta. Debe contener al menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Su contraseña debe contener por lo menos %(min_length)d carácter." +msgstr[1] "Su contraseña debe contener por lo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es muy parecida a %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Su contraseña no puede asemejarse tanto a su otra información personal." + +msgid "This password is too common." +msgstr "Esta contraseña es demasiado común." + +msgid "Your password can't be a commonly used password." +msgstr "La contraseña no puede ser una contraseña de uso común." + +msgid "This password is entirely numeric." +msgstr "Esta contraseña es completamente numérica." + +msgid "Your password can't be entirely numeric." +msgstr "Su contraseña no puede ser completamente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Contraseña restablecida en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este solo puede contener letras del " +"alfabeto en ingles, números y los caracteres @/./+/-/_" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este solo puede contener letras, " +"números y los caracteres @/./+/-/_" + +msgid "Logged out" +msgstr "Sesión terminada" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Password reset sent" +msgstr "Restablecimiento de contraseña enviado" + +msgid "Enter new password" +msgstr "Escriba la nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Restablecimiento de contraseñas fallido" + +msgid "Password reset complete" +msgstr "Restablecimiento de contraseña completado" + +msgid "Password change" +msgstr "Cambiar contraseña" + +msgid "Password change successful" +msgstr "Contraseña cambiada correctamente" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..20ec10571d7a2772655e37a53a232fcec85d2207 GIT binary patch literal 7393 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, 2011 +# Janno Liivak , 2013,2015 +# madisvain , 2011 +# Martin Pajuste , 2015 +# Martin Pajuste , 2016-2017 +# Marti Raudsepp , 2014,2016 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-28 01:45+0000\n" +"Last-Translator: Ragnar Rebase \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Isiklikud andmd" + +msgid "Permissions" +msgstr "Õigused" + +msgid "Important dates" +msgstr "Tähtsad kuupäevad" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objekt primaarvõtmega %(key)r ei eksisteeri." + +msgid "Password changed successfully." +msgstr "Salasõna edukalt muudetud." + +#, python-format +msgid "Change password: %s" +msgstr "Muuda salasõna: %s" + +msgid "Authentication and Authorization" +msgstr "Autentimine ja Volitamine" + +msgid "password" +msgstr "salasõna" + +msgid "last login" +msgstr "viimane sisenemine" + +msgid "No password set." +msgstr "Parool on määramata." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Lubamatu parooli formaat või tundmatu räsialgoritm." + +msgid "The two password fields didn’t match." +msgstr "Sisestatud paroolid polnud identsed." + +msgid "Password" +msgstr "Salasõna" + +msgid "Password confirmation" +msgstr "Salasõna kinnitus" + +msgid "Enter the same password as before, for verification." +msgstr "" +"Sisestage sama salasõna uuesti veendumaks, et sisestamisel ei tekkinud vigu" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Salasõnu ei salvestata töötlemata kujul, seega puudub võimalus selle " +"kasutaja salasõna nägemiseks, kuid saate seda muuta kasutades seda vormi." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Palun sisestage õige %(username)s ja parool. Teadke, et mõlemad väljad " +"võivad olla tõstutundlikud." + +msgid "This account is inactive." +msgstr "See konto ei ole aktiivne." + +msgid "Email" +msgstr "E-post" + +msgid "New password" +msgstr "Uus salasõna" + +msgid "New password confirmation" +msgstr "Uue salasõna kinnitus" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Te sisestasite oma vana parooli vigaselt. Palun sisestage see uuesti." + +msgid "Old password" +msgstr "Vana salasõna" + +msgid "Password (again)" +msgstr "Salasõna (uuesti)" + +msgid "algorithm" +msgstr "algoritm" + +msgid "iterations" +msgstr "iteratsioone" + +msgid "salt" +msgstr "sool" + +msgid "hash" +msgstr "räsi" + +msgid "variety" +msgstr "liik" + +msgid "version" +msgstr "versioon" + +msgid "memory cost" +msgstr "mälukasutus" + +msgid "time cost" +msgstr "ajakulu" + +msgid "parallelism" +msgstr "parallelism" + +msgid "work factor" +msgstr "töötegur" + +msgid "checksum" +msgstr "kontrollsumma" + +msgid "name" +msgstr "nimi" + +msgid "content type" +msgstr "sisutüüp" + +msgid "codename" +msgstr "koodnimi" + +msgid "permission" +msgstr "õigus" + +msgid "permissions" +msgstr "õigused" + +msgid "group" +msgstr "grupp" + +msgid "groups" +msgstr "grupid" + +msgid "superuser status" +msgstr "superkasutaja staatus" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Määrab, kas see kasutaja omab automaatselt ja alati kõiki õigus." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupid, millesse antud kasutaja kuulub. Kasutaja pärib kõik õigused, mis on " +"määratud igale tema grupile." + +msgid "user permissions" +msgstr "kasutajaõigused" + +msgid "Specific permissions for this user." +msgstr "Spetsiaalsed õigused sellele kasutajale." + +msgid "username" +msgstr "kasutajatunnus" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Nõutav. 150 märki või vähem. Ainult tähed, numbrid ja @/./+/-/_ tähemärgid." + +msgid "A user with that username already exists." +msgstr "Sama kasutajatunnusega kasutaja on juba olemas." + +msgid "first name" +msgstr "eesnimi" + +msgid "last name" +msgstr "perenimi" + +msgid "email address" +msgstr "e-posti aadress" + +msgid "staff status" +msgstr "personalistaatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Määrab, kas kasutaja saab sisse logida sellesse admininistreerimisliidesesse." + +msgid "active" +msgstr "aktiivne" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Määrab, kas see konto on aktiivne. Kustutamise asemel lihtsalt deaktiveerige " +"konto." + +msgid "date joined" +msgstr "liitumise kuupäev" + +msgid "user" +msgstr "kasutaja" + +msgid "users" +msgstr "kasutajad" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Salasõna on liiga lühike. Selles peab olema vähemalt %(min_length)d täht." +msgstr[1] "" +"Salasõna on liiga lühike. Selles peab olema vähemalt %(min_length)d tähte." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Salasõna peab sisaldama vähemalt %(min_length)d tähte." +msgstr[1] "Salasõna peab sisaldama vähemalt %(min_length)d tähte." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Salasõna ja %(verbose_name)s on liiga sarnased." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Salasõna ei tohi olla liialt sarnane teie isiklike andmetega." + +msgid "This password is too common." +msgstr "Salasõna on liiga teada-tuntud." + +msgid "Your password can’t be a commonly used password." +msgstr "Salasõna ei tohi olla üks enimlevinud salasõnadest." + +msgid "This password is entirely numeric." +msgstr "See salasõna koosneb ainult numbritest." + +msgid "Your password can’t be entirely numeric." +msgstr "Salasõna ei tohi koosneda ainult numbritest." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Uue salasõna loomine saidil %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Sisesta korrektne kasutajatunnus. See väärtus võib sisaldada ainult " +"ingliskeelseid tähti, numbreid ja @/./+/-/_ tähemärke." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Sisesta korrektne kasutajatunnus. See väärtus võib sisaldada ainult tähti, " +"numbreid ja @/./+/-/_ tähemärke." + +msgid "Logged out" +msgstr "Välja logitud" + +msgid "Password reset" +msgstr "Uue salasõna loomine" + +msgid "Password reset sent" +msgstr "Salasõna lähtestamine saadetud" + +msgid "Enter new password" +msgstr "Sisesta uus salasõna" + +msgid "Password reset unsuccessful" +msgstr "Uue salasõna loomine ebaõnnestus" + +msgid "Password reset complete" +msgstr "Uue salasõna loomine lõpetatud" + +msgid "Password change" +msgstr "Salasõna muutmine" + +msgid "Password change successful" +msgstr "Salasõna muutmine õnnestus" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6748e0e26ea19af1789462c2fca1b319f000c57d GIT binary patch literal 7396 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 Fe*=ADdT0Ou literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..be7b957de --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,310 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2013 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +# julen, 2015 +# Urtzi Odriozola , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-12-11 13:39+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informazio pertsonala" + +msgid "Permissions" +msgstr "Baimenak" + +msgid "Important dates" +msgstr "Data garrantzitsuak" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Ez dago %(key)r gakodun %(name)s objekturik." + +msgid "Password changed successfully." +msgstr "Ondo aldatu da pasahitza." + +#, python-format +msgid "Change password: %s" +msgstr "Pasahitza aldatu: %s" + +msgid "Authentication and Authorization" +msgstr "Autentikazio eta baimentzea" + +msgid "password" +msgstr "pasahitza" + +msgid "last login" +msgstr "azken sarrera" + +msgid "No password set." +msgstr "Pasahitza ezarri gabe." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Pasahitz formatu baliogabea edo hash algoritmo ezezaguna." + +msgid "The two password fields didn't match." +msgstr "Pasahitzak ez datoz bat." + +msgid "Password" +msgstr "Pasahitza" + +msgid "Password confirmation" +msgstr "Pasahitza berretsi" + +msgid "Enter the same password as before, for verification." +msgstr "Idatzi aurreko pasahitz bera, egiaztapenerako." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Pasahitzak zifratuta gordetzen direnez ez dago erabiltzaile pasahitza " +"ikusterik, baina pasahitza aldatu dezakezu hemen." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Mesedez idatzi %(username)s eta pasahitz egokiak. Maiskula eta minuskulak " +"ondo bereiztu." + +msgid "This account is inactive." +msgstr "Kontu hau az dago aktibo." + +msgid "Email" +msgstr "Emaila" + +msgid "New password" +msgstr "Pasahitz berria" + +msgid "New password confirmation" +msgstr "Pasahitz berria berretsi" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Zure pasahitz zaharra ez da zuzena. Idatzi ezazu berriro." + +msgid "Old password" +msgstr "Pasahitz zaharra" + +msgid "Password (again)" +msgstr "Pasahitza (berriro)" + +msgid "algorithm" +msgstr "algoritmoak" + +msgid "iterations" +msgstr "iterazioak" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "aldaera" + +msgid "version" +msgstr "bertsioa" + +msgid "memory cost" +msgstr "memoria kostua" + +msgid "time cost" +msgstr "denbora kostua" + +msgid "parallelism" +msgstr "paralelismoa" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "izena" + +msgid "content type" +msgstr "eduki mota" + +msgid "codename" +msgstr "kode izena" + +msgid "permission" +msgstr "baimena" + +msgid "permissions" +msgstr "baimenak" + +msgid "group" +msgstr "taldea" + +msgid "groups" +msgstr "taldeak" + +msgid "superuser status" +msgstr "Erabiltzaile nagusia" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Erabiltzaileari baimen guztiak esleitzeko banan-banan aukeratu behar izan " +"gabe." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Erabiltzailea zein taldetakoa den. Erabiltzaileak bere talde bakoitzari " +"emandako baimen guztiak jasoko ditu." + +msgid "user permissions" +msgstr "Erabiltzailearen baimenak" + +msgid "Specific permissions for this user." +msgstr "Erabiltzaile honentzako baimenak." + +msgid "username" +msgstr "erabiltzailea" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Beharrezkoa. 150 karaktere edo gutxiago. Hizki, zenbaki eta @/./+/-/_ " +"bakarrik." + +msgid "A user with that username already exists." +msgstr "Erabiltzaile izen hori ez dago eskuragarri." + +msgid "first name" +msgstr "izena" + +msgid "last name" +msgstr "abizena" + +msgid "email address" +msgstr "helbide elektronikoa" + +msgid "staff status" +msgstr "Arduradun egoera" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Erabiltzaileak kudeaketa gune honetan sartzeko baimena duen edo ez " +"adierazten du." + +msgid "active" +msgstr "Aktiboa" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Erabiltzaile bat aktibo gisa tratatu edo ez zehazten du. Ezgaitu hau kontuak " +"ezabatu beharrean." + +msgid "date joined" +msgstr "erregistro eguna" + +msgid "user" +msgstr "Erabiltzailea" + +msgid "users" +msgstr "Erabiltzaileak" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Pasahitz hau laburregia da. Gutxienez karaktere %(min_length)d izan behar du." +msgstr[1] "" +"Pasahitz hau laburregia da. Gutxienez %(min_length)d karaktere izan behar " +"ditu." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Zure pasahitzak gutxienez karaktere %(min_length)d eduki behar du." +msgstr[1] "" +"Zure pasahitzak gutxienez %(min_length)d karaktere eduki behar ditu." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Zure pasahitza %(verbose_name)s-(r)en oso antzekoa da." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Zure pasahitza ezin da izan zure beste informazio pertsonalaren antzekoa." + +msgid "This password is too common." +msgstr "Pasahitz hau arruntegia da." + +msgid "Your password can't be a commonly used password." +msgstr "Zure pasahitza ezin da izan normalean erabiltzen den pasahitza." + +msgid "This password is entirely numeric." +msgstr "Zure pasahitza osorik zenbakizkoa da." + +msgid "Your password can't be entirely numeric." +msgstr "Zure pasahitza ezin da izan osorik zenbakizkoa." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Pasahitza berrezarri %(site_name)s webgunean" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Idatzi baleko erabiltzaile izen bat. Eremu honetan hizki, zenbaki eta @/./" +"+/-/_ karaktereak bakarrik erabili daitezke." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Idatzi baleko erabiltzaile izen bat. Eremu honetan hizki, zenbaki eta @/./" +"+/-/_ karaktereak bakarrik erabili daitezke." + +msgid "Logged out" +msgstr "Sesiotik kanpo" + +msgid "Password reset" +msgstr "Pasahitz-berrezartzea" + +msgid "Password reset sent" +msgstr "Pasahitz-berrezartzea bidalita" + +msgid "Enter new password" +msgstr "Idatzi pasahitz berria" + +msgid "Password reset unsuccessful" +msgstr "Pasahitza ez da ondo berrezarri" + +msgid "Password reset complete" +msgstr "Pasahitz-berrezartzea burututa" + +msgid "Password change" +msgstr "Pasahitz-aldaketa" + +msgid "Password change successful" +msgstr "Pasahitza ondo aldatu da" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9fa962ef135235ce919816a67d2e73d23b4d36d5 GIT binary patch literal 8979 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 WI6e=C#=gX6vt(S^)^}V!()>3tJ&P^? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..ef4533493 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmad Hosseini , 2020 +# Ali Nikneshan , 2015 +# Eric Hamiter , 2013 +# Farshad Asadpour, 2021 +# Jannis Leidel , 2011 +# cef32bddc4c7e18de7e89af20a3a57ef_18bb97f, 2015 +# MJafar Mashhadi , 2018 +# Pouya Abbassi, 2016 +# Reza Mohammadi , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-19 17:35+0000\n" +"Last-Translator: Farshad Asadpour\n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "اطلاعات شخصی" + +msgid "Permissions" +msgstr "اجازه‌ها" + +msgid "Important dates" +msgstr "تاریخ‌های مهم" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "شیء %(name)s با کلید اصلی %(key)r وجود ندارد." + +msgid "Password changed successfully." +msgstr "گذرواژه با موفقیت تغییر یافت." + +#, python-format +msgid "Change password: %s" +msgstr "تغییر گذرواژه: %s" + +msgid "Authentication and Authorization" +msgstr "بررسی اصالت و اجازه‌ها" + +msgid "password" +msgstr "گذرواژه" + +msgid "last login" +msgstr "آخرین ورود" + +msgid "No password set." +msgstr "هیچ رمزی انتخاب نشده است." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "رمز نامعتبر یا الگوریتم رمزنگاری ناشناس" + +msgid "The two password fields didn’t match." +msgstr "دو فیلد گذرواژه با هم مطابقت ندارند." + +msgid "Password" +msgstr "گذرواژه" + +msgid "Password confirmation" +msgstr "تأیید گذرواژه" + +msgid "Enter the same password as before, for verification." +msgstr "برای تائید، رمز عبور قبلی را وارد کنید." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"گذرواژه‌ها به صورت خام نگهداری نمی‌شوند لذا راهی برای مشاهدهٔ گذرواژهٔ این کاربر " +"وجود ندارد، اما می‌توانید آن را با این فرم تغییر دهید." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"لطفا %(username)s و گذرواژه‌ای قابل قبول وارد کنید.\n" +"توجه داشته باشید که ممکن است هر دو به کوچکی و بزرگی حروف حساس باشند." + +msgid "This account is inactive." +msgstr "این حساب غیر فعال است." + +msgid "Email" +msgstr "ایمیل" + +msgid "New password" +msgstr "گذرواژهٔ جدید" + +msgid "New password confirmation" +msgstr "تأیید گذرواژهٔ جدید" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "گذرواژهٔ قدیمی‌تان اشتباه وارد شد. لطفاً دوباره وارد کنید." + +msgid "Old password" +msgstr "گذرواژهٔ قدیمی" + +msgid "Password (again)" +msgstr "گذرواژه (تکرار)" + +msgid "algorithm" +msgstr "الگوریتم" + +msgid "iterations" +msgstr "تکرار" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "تنوع" + +msgid "version" +msgstr "نسخه" + +msgid "memory cost" +msgstr "هزینه‌ی حافظه" + +msgid "time cost" +msgstr "هزینه‌ی زمان" + +msgid "parallelism" +msgstr "موازات" + +msgid "work factor" +msgstr "عامل کار" + +msgid "checksum" +msgstr "جمع کنترلی" + +msgid "block size" +msgstr "اندازه بلاک" + +msgid "name" +msgstr "نام" + +msgid "content type" +msgstr "نوع محتوی" + +msgid "codename" +msgstr "نام کد" + +msgid "permission" +msgstr "اجازه" + +msgid "permissions" +msgstr "اجازه‌ها" + +msgid "group" +msgstr "گروه" + +msgid "groups" +msgstr "گروه‌ها" + +msgid "superuser status" +msgstr "ابرکاربر" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"نشان می‌دهد که این کاربر همهٔ اجازه‌ها را دارد بدون آنکه به صراحت به او اختصاص " +"داده شده باشد." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"گروه‌هایی که این کاربر به آنها تعلق دارد. کاربر تمام اجازه‌های مرتبط با این " +"گروه‌ها را دریافت خواهد کرد." + +msgid "user permissions" +msgstr "اجازه‌های کاربر" + +msgid "Specific permissions for this user." +msgstr "اجازه‌های خاص این کاربر." + +msgid "username" +msgstr "نام کاربری" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "الزامی. 150 کاراکتر یا کمتر. فقط شامل حروف، اعداد، و علامات @/./+/-/_" + +msgid "A user with that username already exists." +msgstr "کاربری با آن نام کاربری وجود دارد." + +msgid "first name" +msgstr "نام" + +msgid "last name" +msgstr "نام خانوادگی" + +msgid "email address" +msgstr "آدرس ایمیل" + +msgid "staff status" +msgstr "وضعیت کارمندی" + +msgid "Designates whether the user can log into this admin site." +msgstr "نشان می‌دهد که آیا این کاربر می‌تواند وارد این وبگاه مدیریت شود یا خیر." + +msgid "active" +msgstr "فعال" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"نشان می‌دهد که آیا این کاربر اجازهٔ فعالیت دارد یا خیر. به جای حذف کاربر این " +"تیک را بردارید." + +msgid "date joined" +msgstr "تاریخ پیوستن" + +msgid "user" +msgstr "کاربر" + +msgid "users" +msgstr "کاربرها" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"این رمز عبور خیلی کوتاه است. رمز عبور می‌بایست حداقل از %(min_length)d حرف " +"تشکیل شده باشد." +msgstr[1] "" +"این رمز عبور خیلی کوتاه است. رمز عبور می‌بایست حداقل از %(min_length)d حرف " +"تشکیل شده باشد." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "رمز عبور شما می‌بایست حداقل از %(min_length)d حرف تشکیل شده باشد." +msgstr[1] "رمز عبور شما می‌بایست حداقل از %(min_length)d حرف تشکیل شده باشد." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "این رمز عبور بسیار شبیه %(verbose_name)s می‌باشد." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "گذرواژه شما نمی‌تواند شبیه سایر اطلاعات شخصی شما باشد." + +msgid "This password is too common." +msgstr "این رمز عبور بسیار رایج است." + +msgid "Your password can’t be a commonly used password." +msgstr "گذرواژه شما نمی تواند یک گذرواژه معمول باشد." + +msgid "This password is entirely numeric." +msgstr "رمز شما کلا عدد است" + +msgid "Your password can’t be entirely numeric." +msgstr "گذرواژه شما نمی تواند کلا عدد باشد" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "بازیابی گذرواژه در %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"یک نام کاربری معتبر وارد کنید. این مقدار میتواند فقط شامل حروف الفبای " +"انگلیسی، اعداد، و علامات @/./+/-/_ باشد." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"یک نام کاربری معتبر وارد کنید. این مقدار میتواند فقط شامل حروف، اعداد، و " +"علامات @/./+/-/_ باشد." + +msgid "Logged out" +msgstr "خارج شدید" + +msgid "Password reset" +msgstr "ایجاد گذرواژهٔ جدید" + +msgid "Password reset sent" +msgstr "تقاضای ریست رمز فرستاده شد" + +msgid "Enter new password" +msgstr "ورود گذرواژهٔ جدید" + +msgid "Password reset unsuccessful" +msgstr "گذرواژهٔ جدید ایجاد نشد." + +msgid "Password reset complete" +msgstr "گذرواژهٔ جدید ایجاد شد" + +msgid "Password change" +msgstr "تغییر گذرواژه" + +msgid "Password change successful" +msgstr "گذرواژه تغییر یافت." diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..469ab201a6ccf0c1a983450a85adfddd6648fff7 GIT binary patch literal 7537 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..a13720b9f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017-2018,2020-2021 +# Antti Kaihola , 2011 +# Jannis Leidel , 2011 +# Klaus Dahlén , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 15:17+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Henkilökohtaiset tiedot" + +msgid "Permissions" +msgstr "Oikeudet" + +msgid "Important dates" +msgstr "Tärkeät päivämäärät" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s perusavaimella %(key)r ei ole olemassa." + +msgid "Password changed successfully." +msgstr "Salasana muutettu onnistuneesti." + +#, python-format +msgid "Change password: %s" +msgstr "Vaihda salasana: %s" + +msgid "Authentication and Authorization" +msgstr "Kirjautuminen ja oikeudet" + +msgid "password" +msgstr "salasana" + +msgid "last login" +msgstr "viimeisin kirjautuminen" + +msgid "No password set." +msgstr "Salasanaa ei ole asetettu." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Tuntematon salasanamuoto tai tuntematon hajakoodausalgoritmi." + +msgid "The two password fields didn’t match." +msgstr "Salasanakentät eivät täsmänneet." + +msgid "Password" +msgstr "Salasana" + +msgid "Password confirmation" +msgstr "Salasanan vahvistaminen" + +msgid "Enter the same password as before, for verification." +msgstr "Syötä sama salasana tarkistuksen vuoksi toistamiseen." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Salasanoja ei tallenneta selkokielisinä, joten tämän käyttäjän salasanaa on " +"mahdoton nähdä, mutta voit vaihtaa salasanan käyttämällä tätä " +"lomaketta." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ole hyvä ja syötä kelvollinen %(username)s ja salasana. Huomaa että " +"kummassakin kentässä isoilla ja pienillä kirjaimilla saattaa olla merkitystä." + +msgid "This account is inactive." +msgstr "Tämä käyttäjätili ei ole voimassa." + +msgid "Email" +msgstr "Sähköposti" + +msgid "New password" +msgstr "Uusi salasana" + +msgid "New password confirmation" +msgstr "Uusi salasana uudelleen" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vanha salasana on virheellinen. Yritä uudelleen." + +msgid "Old password" +msgstr "Vanha salasana" + +msgid "Password (again)" +msgstr "Salasana toistamiseen" + +msgid "algorithm" +msgstr "algoritmi" + +msgid "iterations" +msgstr "iteraatioita" + +msgid "salt" +msgstr "suola" + +msgid "hash" +msgstr "tiiviste" + +msgid "variety" +msgstr "variaatio" + +msgid "version" +msgstr "versio" + +msgid "memory cost" +msgstr "muistihinta" + +msgid "time cost" +msgstr "aikahinta" + +msgid "parallelism" +msgstr "rinnakkaisuus" + +msgid "work factor" +msgstr "työmäärä" + +msgid "checksum" +msgstr "tarkistussumma" + +msgid "block size" +msgstr "lohkokoko" + +msgid "name" +msgstr "nimi" + +msgid "content type" +msgstr "sisältötyyppi" + +msgid "codename" +msgstr "tunniste" + +msgid "permission" +msgstr "oikeus" + +msgid "permissions" +msgstr "oikeudet" + +msgid "group" +msgstr "ryhmä" + +msgid "groups" +msgstr "ryhmät" + +msgid "superuser status" +msgstr "pääkäyttäjä" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Antaa käyttäjälle kaikki oikeudet ilman, että niitä täytyy erikseen luetella." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Käyttäjäryhmät joihin tämä käyttäjä kuuluu. Käyttäjä saa käyttöoikeudet " +"kaikista käyttäjäryhmistä, joihin hän kuuluu." + +msgid "user permissions" +msgstr "käyttäjän oikeudet" + +msgid "Specific permissions for this user." +msgstr "Tämän käyttäjän spesifit oikeudet." + +msgid "username" +msgstr "käyttäjätunnus" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Vaaditaan. Enintään 150 merkkiä. Vain kirjaimet, numerot ja @/./+/-/_ ovat " +"sallittuja." + +msgid "A user with that username already exists." +msgstr "Käyttäjätunnus on jo rekisteröity." + +msgid "first name" +msgstr "etunimi" + +msgid "last name" +msgstr "sukunimi" + +msgid "email address" +msgstr "sähköpostiosoite" + +msgid "staff status" +msgstr "ylläpitäjä" + +msgid "Designates whether the user can log into this admin site." +msgstr "Määrittää, pääseekö käyttäjä tähän sivuston ylläpito-osioon." + +msgid "active" +msgstr "voimassa" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Määrää, voiko käyttäjä kirjautua sisään. Tällä voi estää käyttäjätilin " +"käytön poistamatta sitä." + +msgid "date joined" +msgstr "liittynyt" + +msgid "user" +msgstr "käyttäjä" + +msgid "users" +msgstr "käyttäjät" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tämä salasana on liian lyhyt. Sen tulee sisältää ainakin %(min_length)d " +"merkki." +msgstr[1] "" +"Tämä salasana on liian lyhyt. Sen tulee sisältää ainakin %(min_length)d " +"merkkiä." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Salasanasi tulee sisältää ainakin %(min_length)d merkki." +msgstr[1] "Salasanasi tulee sisältää ainakin %(min_length)d merkkiä." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Salasana on liian lähellä kohdetta %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Salasanasi ei voi olla liian samankaltainen muiden tietojesi kanssa." + +msgid "This password is too common." +msgstr "Tämä salasana on liian yleinen." + +msgid "Your password can’t be a commonly used password." +msgstr "Salasanasi ei voi olla yleisesti käytetty salasana." + +msgid "This password is entirely numeric." +msgstr "Tämä salasana on kokonaan numeerinen." + +msgid "Your password can’t be entirely numeric." +msgstr "Salasanasi ei voi olla kokonaan numeerinen." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Salasanan nollaus sivustolla %(site_name)s " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Syötä kelvollinen käyttäjänimi (vain englannin kirjaimet, numerot ja merkit " +"@/./+/-/_)." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Syötä kelvollinen käyttäjänimi (vain kirjaimet, numerot ja merkit @/./+/-/_)." + +msgid "Logged out" +msgstr "Kirjautunut ulos" + +msgid "Password reset" +msgstr "Salasanan nollaus" + +msgid "Password reset sent" +msgstr "Salasanan nollausviesti lähetetty" + +msgid "Enter new password" +msgstr "Syötä uusi salasana" + +msgid "Password reset unsuccessful" +msgstr "Salasanan nollaus ei onnistunut" + +msgid "Password reset complete" +msgstr "Salasanan nollaus valmis" + +msgid "Password change" +msgstr "Salasanan vaihtaminen" + +msgid "Password change successful" +msgstr "Salasanan vaihtaminen onnistui" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d0abbd5ece9281b1b5f76a0a9efe57e58e01511 GIT binary patch literal 8155 zcmchbTa0B{S;yDtC^OAX1_T6Q7K6=HF?CK=7t`2X)7{fUUzi^HQug#TAx1j8&R*x7 zUA-@7_NA(;mz=faUAJ@P9v@wUke+B2k zx4p_33!Vhu2s&^T+yW1Se-AqF?t6?8iFI%Qj=(G6KY{mwhwe4zVemuX>%r&1gW#vZ zec<1MuK~XS{v7yi@MpmPZszahBS@JygPOk|6rCmTZQyb6o!~EnKMQVyuLC~~z6E?9 zydQiC)H%Kdz8(BG@YUd}`1e}yjo?SYcY(hNJ_nu#?}NE_gC79{@L5pj`DgG!@J%ch z-$%d)z{{ZIy9NFs_&eZZ;6a#L1~45s~aPxc& z)V@!ETK8l#|4~rit%Kqt1Nk%0@K5wU1?v6pHuHY~iq4;b;_EL!Ovn6HgMR~R|F44U zcVRc+F`iFgJoDhMf);!cl%D?q{1xzf;1l2zC^ZK^18Sdp-ek-dz&C(@0{$KNE-=A3 zJ_!B>_y+J>&GUCbo#Vip(It2c`~~nyPL`sPAro()SlY>G^A*^!~jDUyspg zei_uh7r^&`PlN9RKMOt#eiiJ3cfGYf{}Sl!2z;LT%iveQ{{%k?-sI&1cmbo|2A=^> zf&T?+{wU1Cf>{Uk{0UI|e-8W{_;v76@Z&Id2K*9u6ukEx#(Wt3Ao%Ox^Pu$9McC5& z!yqPV9t9D(IS)!-0f>p21eDyK1reqBEl~Qs0m}aVym@{Jlzn^&)cP-jlIu6Yp9H@P zYM*~^p8pq=UCVi21H29tKW_)M{ym`RFN0cl7(`U&@#cNdU;;wQY=PSEv!Lj`2#TM- z1jX+d)Oo%F-UZ4APBKn2H2;2vu7?=fN0;d8l73~Y#~Hc^t)4gCi&v`~E=22Nf%rJf zkR9lfy+~KOBuib=q4@g%Lvp{sIL4S`yqBR%v0OeNeZjVm%Yb==ab7pgwFK^GtTfLD z8k9ZC=H#!sBnR0tCS?{G2N{!Vl^f~z5JUQs54A7M+595o@z$jDb(DeWnGZ2=ZF7zx zyM2^#f+5{?8S>3#hSxc$>qre=U%Hil%f`9^7{L77?l1|v}_RPE(o{k4-3Am z%Arfks27w`mf9c)NN%!o`xRrx~S1iC}Ejw;|J| zcnf;HtV&CybSep=*qlmB7z^x15J%yzNW1oum}0VWHVL+DFH6e+2D6lto=OLCR17U7 zSzIjGv`W_ejYNHXvAg)tVrTJ+?G1w*&UnLaKgK>UpML5#ceUDVDVZ0tl8Lq@uQk`t za<^dlZ#P^X^&4C1nls5L%gZ1wZ75qXXVO|SyQ^7}V0ztvEDd73rJtGA*ad~N5b$=}%ko?Xzkg2Ap$RQA!-?#=_Iy_2EQ%Ow z8L_4xxi~DmRpUfGh;?8GX5~TVVlcHJ{3>@o1QjLb5-!+6-s+gdInvB-;u$z_;Y7c2 z(C<9=d&TbN3wDhlv6WTqlgb|yc4Uzg?(jI7&XK?lbJsumz{j3_;Fu>RGdr>v9D^hG zbQQ6C*B&^y)bc5rVBc-Jylc-+95IXrQ3=~KZYZDankPrDCp(`BW3vBU&b#IkoDK4< z8Yu=&0?wL?vvj~r*0sAam~c37Y$_X`{TMTJNxXc6KN;#1|z| z9KeVdE}Fz6*Ro<_JN2S+v*jR-3d1N&5qF6$%id7mL9q#N(omE(aj|~W-WT&hro=Kr z7yjRC7PmhUYuI;^rFVEqB+kpOJ;VN0QSOFF>`W#qlO&{HiCsDFxniGXU=rrdTAcN+V!qqX^oFi?wWt!) z%R;9p#0{Q68Y#C%&M24I^(;zVXq@sc`93667KRLfsrVJ%^Gxl3MoGmGKy#lS3KPqs zC>f%(zV#~-mt<5;y{ssWpBRyF+rkt3cFq-pDC~To8Wf#N*^1q_dZBaCZA7BfIf?vM?DEp`fzHz5&hkOKba>_9 z`yX23+IJSobS@Eiia21W6?-BMs?gchAkVh#k)D4#zI-i?)^gWPU3rWp>7WV*u5-x+ z$%;LlyOdxxH!RE1%HrbY=4Q7Py{PZ5bqN8BHKP-Vo7Ic`d~tr?xijZZO^}al`d&j3>vgUzgg% zK3>;#wp`tp*gh+D%~PqZ$_Nue=D4F@+*2A%>H^!@aJ;iVzCNw9C)JZxMySw%*2)0R zaU5cGPC&E?l{{LJRl1wkeaXF=k9T?z$^2=m%osM>`;M}r7~fz;Nfkv=9y40DM@>f= zuF1OYW|K)R?h^ctdS*hsh;AkBNXu-DlcrcDi^tb3hg8X8!v}paPSa64-w!4gW<=5P z3l!s`RzwJgjk!46h z=E(pTKxW(2n_daw9zpr~l-mDHY*XZ`lhv_@v@5}eUU(%8s%D`bq99DmYP{p9-1QR8 z;u$n#m6vDF7wzL4n!5R?H?JSRdHv=W7yNB^di&7ywxe6=USD6)1J%YW$o2mlm(_*~ zsu@FVokJ!(egU1f4cQBLBtskTgbt0T<$@h4i)~;At+qk|jDlp+T)4u>lPML@{|rHC zsMe_Tv72k8Mj8z&ND4@OL(z-vRy2#UEpNr+9lD6yoZ&>Pp0{De^4om$Sk=S6W>~?J z`%xO<=V>o;voCS&sXNa+*g0IO*(bhumjrKG{uEa+Ka>z|oD);qP0u+Jy!3_YFp(e3 z2i4j}wuK7EzouG(RG$}GNZ95_hdXkp=4kSx1ih-dhPq%-tfYWS9pymLGGmlH(<WvPc)QDWeIJ9qbl*;(;EJP6qRKZ;q4rezmE@)StHL8 z3)OV3S4FRarA6f0+|JW4>s?0Y0(GAu6v|+~)Dxn~-9X`ZyrT#5SP3AJ zyJqWt4e9xAtrbg?;98VaiGHMs5UOH@mx+GmAlC9LN)v}UiSpVj5{FynVT+N{ZC{%g zb-tSsMXd#2e)2w)@cRL|jheEIr1aUZ?FkoGQHOMvt?{0(Nz`>l4s&v%*X8ciglte< zWBb@kJQ&ram8{S134^k$GS5aBSF#od(g~s28=X%xdz-{M>&T2kS6#c+mV5_PjIxyK z+#3oRRta0l)~mkm75jd=9UuHl)E$ON|r{6T}$Y53eJf&RZ9Og2=UzQA$?6O49F4w~eE> z#-)-1?`DB`wv_I`go#97Xw4(T>=F}9v3RTF)yz=qqV`o&y`-zaR=}_ti8DCYm zsfwWda@@4GZcl670p84oyRP;cqZdY9c1, 2013-2019,2021 +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# mlorant , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-25 09:56+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "Informations personnelles" + +msgid "Permissions" +msgstr "Permissions" + +msgid "Important dates" +msgstr "Dates importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "L'objet %(name)s avec la clef primaire %(key)r n’existe pas." + +msgid "Password changed successfully." +msgstr "Mot de passe modifié avec succès" + +#, python-format +msgid "Change password: %s" +msgstr "Modifier le mot de passe : %s" + +msgid "Authentication and Authorization" +msgstr "Authentification et autorisation" + +msgid "password" +msgstr "mot de passe" + +msgid "last login" +msgstr "dernière connexion" + +msgid "No password set." +msgstr "Aucun mot de passe défini." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Format de mot de passe non valide ou algorithme de hachage non reconnu." + +msgid "The two password fields didn’t match." +msgstr "Les deux mots de passe ne correspondent pas." + +msgid "Password" +msgstr "Mot de passe" + +msgid "Password confirmation" +msgstr "Confirmation du mot de passe" + +msgid "Enter the same password as before, for verification." +msgstr "Saisissez le même mot de passe que précédemment, pour vérification." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Les mots de passe ne sont pas enregistrés en clair, ce qui ne permet pas " +"d’afficher le mot de passe de cet utilisateur, mais il est possible de le " +"changer en utilisant ce formulaire. " + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Saisissez un %(username)s et un mot de passe valides. Remarquez que chacun " +"de ces champs est sensible à la casse (différenciation des majuscules/" +"minuscules)." + +msgid "This account is inactive." +msgstr "Ce compte est inactif." + +msgid "Email" +msgstr "Courriel" + +msgid "New password" +msgstr "Nouveau mot de passe" + +msgid "New password confirmation" +msgstr "Confirmation du nouveau mot de passe" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Votre ancien mot de passe est incorrect. Veuillez le rectifier." + +msgid "Old password" +msgstr "Ancien mot de passe" + +msgid "Password (again)" +msgstr "Mot de passe (à nouveau)" + +msgid "algorithm" +msgstr "algorithme" + +msgid "iterations" +msgstr "itérations" + +msgid "salt" +msgstr "salage" + +msgid "hash" +msgstr "empreinte" + +msgid "variety" +msgstr "variété" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "coût mémoire" + +msgid "time cost" +msgstr "coût temps" + +msgid "parallelism" +msgstr "parallélisme" + +msgid "work factor" +msgstr "facteur travail" + +msgid "checksum" +msgstr "somme de contrôle" + +msgid "block size" +msgstr "taille de bloc" + +msgid "name" +msgstr "nom" + +msgid "content type" +msgstr "type de contenu" + +msgid "codename" +msgstr "nom de code" + +msgid "permission" +msgstr "permission" + +msgid "permissions" +msgstr "permissions" + +msgid "group" +msgstr "groupe" + +msgid "groups" +msgstr "groupes" + +msgid "superuser status" +msgstr "statut super-utilisateur" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Précise que l’utilisateur possède toutes les permissions sans les assigner " +"explicitement." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Les groupes dont fait partie cet utilisateur. Celui-ci obtient tous les " +"droits de tous les groupes auxquels il appartient." + +msgid "user permissions" +msgstr "permissions de l’utilisateur" + +msgid "Specific permissions for this user." +msgstr "Permissions spécifiques à cet utilisateur." + +msgid "username" +msgstr "nom d’utilisateur" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Requis. 150 caractères maximum. Uniquement des lettres, nombres et les " +"caractères « @ », « . », « + », « - » et « _ »." + +msgid "A user with that username already exists." +msgstr "Un utilisateur avec ce nom existe déjà." + +msgid "first name" +msgstr "prénom" + +msgid "last name" +msgstr "nom" + +msgid "email address" +msgstr "adresse électronique" + +msgid "staff status" +msgstr "statut équipe" + +msgid "Designates whether the user can log into this admin site." +msgstr "Précise si l’utilisateur peut se connecter à ce site d'administration." + +msgid "active" +msgstr "actif" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Précise si l’utilisateur doit être considéré comme actif. Décochez ceci " +"plutôt que de supprimer le compte." + +msgid "date joined" +msgstr "date d’inscription" + +msgid "user" +msgstr "utilisateur" + +msgid "users" +msgstr "utilisateurs" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ce mot de passe est trop court. Il doit contenir au minimum %(min_length)d " +"caractère." +msgstr[1] "" +"Ce mot de passe est trop court. Il doit contenir au minimum %(min_length)d " +"caractères." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Votre mot de passe doit contenir au minimum %(min_length)d caractère." +msgstr[1] "" +"Votre mot de passe doit contenir au minimum %(min_length)d caractères." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Le mot de passe est trop semblable au champ « %(verbose_name)s »." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Votre mot de passe ne peut pas trop ressembler à vos autres informations " +"personnelles." + +msgid "This password is too common." +msgstr "Ce mot de passe est trop courant." + +msgid "Your password can’t be a commonly used password." +msgstr "" +"Votre mot de passe ne peut pas être un mot de passe couramment utilisé." + +msgid "This password is entirely numeric." +msgstr "Ce mot de passe est entièrement numérique." + +msgid "Your password can’t be entirely numeric." +msgstr "Votre mot de passe ne peut pas être entièrement numérique." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Réinitialisation du mot de passe sur %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Saisissez un nom d’utilisateur valide. Il ne peut contenir que des lettres " +"non accentuées, des nombres ou les caractères « @ », « . », « + », « - » et " +"« _ »." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Saisissez un nom d’utilisateur valide. Il ne peut contenir que des lettres, " +"des nombres ou les caractères « @ », « . », « + », « - » et « _ »." + +msgid "Logged out" +msgstr "Déconnecté" + +msgid "Password reset" +msgstr "Réinitialisation du mot de passe" + +msgid "Password reset sent" +msgstr "Message de réinitialisation du mot de passe envoyé" + +msgid "Enter new password" +msgstr "Saisissez un nouveau mot de passe" + +msgid "Password reset unsuccessful" +msgstr "Échec lors de la mise à jour du mot de passe" + +msgid "Password reset complete" +msgstr "Mise à jour du mot de passe terminée" + +msgid "Password change" +msgstr "Modification du mot de passe" + +msgid "Password change successful" +msgstr "Mot de passe modifié avec succès" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2331e0ea34a956870aca9d3de47c7090a697d31e GIT binary patch literal 476 zcmZWl%T59@6xHZzmabh~6BiII?PxSZ5o1J1Fc66ubzPY|W6jV`+9L2F{(v9mw|EDP zEIi3cd(v|sr{4$rpF4zI;vw;vxJNuC)<}q7^w_4e_WWVu>^n{a8)oboo!8b#$ljGH zZ1jkgb%Bk2p)+)-rcEIsdDY=>WeNEznv`>= dN;a@=<|UYFEq(W_1Dk8NVc@6>akCTc`~cP7jJ5y( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..576ed79f3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,226 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 10:30+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3221b186d7cfddf0fe5e445a43f8d304e407d182 GIT binary patch literal 3572 zcmZ{lOKc=Z8GwtB1TZ0x<*|_PC=!;~+06K{8?rl&A&b{58STT`I3N^6RPL_nE~mR| z)K!z&71AEK!6gC-BqW4nDFsLL9h+Qw|7;11BEh#DVYcX?tdqP@3wm zo`3zXs(Jg=y+2WuRqAJ{uf9*IP59*d`A{z0tJD&_2tN)JxC1BfBK$qH@SgjW;-_*x zAB7cMfOp^n@CWcS@TXn>SMY=Me*-@Te+xek--4fn|A7y}2kuwu3-A#r=dZ&L!yE7; z@CA4VIwKv5)7a=C9XS?~W zjyq7~zR=BEDDwBa`2a=FJKg*bq4?nyDE9um8$ay&zlO5EfpY#IpzQw>JR&Aa$)icBfui#}C+Cq;CXBDzZvour8G z&$O+npKyoLUH=hy4^`|J-JhgN`65+(w@5upmHQ*Q_oz}%PtktA#8>>Y(v8Vof1HY0 zt$pGnDRS+_FOnmYZxU-M62m8`k`ryYq{qS5dg5ZPV{T&GtxRdPDQaud+uGi8A%?!% z%uSV9Ju)Foe4P&TnV>G);Ihg@8>X9M?!r`HZUPbtJ+gJ_LU6tc?IC^~kvJ+`;$m@I zBMbqq%Ghtq{=C3RZW*g(Vk$B*l`edyT@^i}oMh6{RXVt6|If~2Z9?wHMXL9#ju;hf z%E8(s(Y+VNAoPR*X^-6}|6WWm9D(Vq{8+`9TqZ5OupKtNnPS z+HX*#Yp!rg-G(Qq!mx~FbJeuj?r1+JQJZD9nl*z8ridy;GaPEZam>h=`SzA|1JYLQ z!2CuTXitzvP~5SX^blixt#)d^k5hWvY44lNkw62T?sFae!c8lw*t-@om-fCs&O&e3 z5A?#$josd+q&jPRmvP5HudS>;-CMcXTRX2;&kfFhDKM3@Q!uH%wI#*{jxZP4qKpL-*OD?e-;AzRI2|8=K7bcC9G~db@TZ z*Nb_Kqrvj>WHRYTk>`f?RzLCO^3Z@i(5|z0$idTPJ4?ZQa`<$5L+fKwsE%@kGgi&dkD2F|JL~yW;CI z40JVWyJ6$0bv%Dw9CaW`( zyGS{^;HB&5O%=)SDslGGuwB|L;#Go=4UGz1y@>yQBwu|b>K|L!5r&foA z@Fo#K`Pbqx$(tkoFXqoqIXAC3S03JB-fG1< z{-KhZLE_&w-%043CT@t?)KSSs+7$kPqe9HUvG11 z>$_5^c@4{OVqeX&LEd(jo06x~m12`iY;#Z;bxH0^(!8D?2VBxI9_OV(PcdHCJ+cA~ z6d6?NJtNBS(l%K!iX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..a91375aa8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,298 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Michael Thornhill , 2012,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Personal info" +msgstr "Eolas pearsantach" + +msgid "Permissions" +msgstr "Ceada" + +msgid "Important dates" +msgstr "Dáta tábhactach" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Focal faire aithraithe rathúil" + +#, python-format +msgid "Change password: %s" +msgstr "Athraigh focal faire: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "focal faire" + +msgid "last login" +msgstr "logáil deirneach" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "Níl an dá focla faire comhoiriúnigh" + +msgid "Password" +msgstr "Focal faire" + +msgid "Password confirmation" +msgstr "Focal faire deimhniú" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Tá an cuntas seo neamhghníomhach." + +msgid "Email" +msgstr "Ríomhphost" + +msgid "New password" +msgstr "Focal faire nua" + +msgid "New password confirmation" +msgstr "Deimnhiú focal faire nua" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Cuireadh do sean-focal faire isteach go mícheart. Iontráil isteach é arís." + +msgid "Old password" +msgstr "Sean-focal faire " + +msgid "Password (again)" +msgstr "Focal faire (arís)" + +msgid "algorithm" +msgstr "algartam" + +msgid "iterations" +msgstr "atriallta" + +msgid "salt" +msgstr "salann" + +msgid "hash" +msgstr "haiseáil" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "fachtóir oibre" + +msgid "checksum" +msgstr "suim sheiceála" + +msgid "name" +msgstr "ainm" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "Ainm cód" + +msgid "permission" +msgstr "cead" + +msgid "permissions" +msgstr "ceada" + +msgid "group" +msgstr "grúpa" + +msgid "groups" +msgstr "grúpa" + +msgid "superuser status" +msgstr "stádas forúsáideoir" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Sainíonn go bhfuil gach ceada ag an úsáideoir seo gan iad a cur le go " +"díreach." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ceada úsáideoira" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "Ainm úsáideoir" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "In ann do úsáideoir leis an ainm úsáideora." + +msgid "first name" +msgstr "ainm baiste" + +msgid "last name" +msgstr "sloinne" + +msgid "email address" +msgstr "seoladh r-phoist" + +msgid "staff status" +msgstr "stádas foirne" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Sainigh an bhfuil cead ag an úsáideoir logáil isteach go dtí an suíomh " +"riaracháin seo." + +msgid "active" +msgstr "gníomhach" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Sainíonn an bhfuil an úsáideoir gníomhach. Míroghnaigh seo in aineonn de " +"scriseadh cuntasí." + +msgid "date joined" +msgstr "Dáta teacht isteach" + +msgid "user" +msgstr "úsáideoir" + +msgid "users" +msgstr "úsáideora" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Athshocraigh focal faire ar %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Logáilte amach" + +msgid "Password reset" +msgstr "Pasfhocal athshocrú" + +msgid "Password reset sent" +msgstr "Pasfhocal athshocrú sheoladh" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..edc9d7b6f1125161c7f4d502f28b4c69d8c7daab GIT binary patch literal 8743 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..88834565e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,337 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015-2017,2021 +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-27 12:55+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "Fiosrachadh pearsanta" + +msgid "Permissions" +msgstr "Ceadan" + +msgid "Important dates" +msgstr "Cinn-là chudromach" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Chan eil oibseact %(name)s air a bheil prìomh-iuchair %(key)r ann." + +msgid "Password changed successfully." +msgstr "Chaidh am facal-faire atharrachadh gu soirbheachail." + +#, python-format +msgid "Change password: %s" +msgstr "Atharraich am facal-faire: %s" + +msgid "Authentication and Authorization" +msgstr "Dearbhadh is ùghdarrachadh" + +msgid "password" +msgstr "facal-faire" + +msgid "last login" +msgstr "an clàradh a-steach mu dheireadh" + +msgid "No password set." +msgstr "Cha deach facal-faire a shuidheachadh." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Tha fòrmat mì-dhligheach air an fhacal-fhaire no chan aithne dhuinn algairim " +"a’ hais." + +msgid "The two password fields didn’t match." +msgstr "Cha robh an dà fhacal-faire co-ionnann." + +msgid "Password" +msgstr "Facal-faire" + +msgid "Password confirmation" +msgstr "Dearbhadh an fhacail-fhaire" + +msgid "Enter the same password as before, for verification." +msgstr "Cuir an t-aon fhacal-faire a-steach a-rithist gus a dhearbhadh." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Cha dèid faclan-faire amh a shàbhaladh ’s mar sin chan eil dòigh ann gus " +"facal-faire a’ chleachdaiche seo a shealltainn. ’S urrainn dhut am facal-" +"faire atharrachadh co-dhiù leis an fhoirm seo." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Cuir a-steach %(username)s agus facal-faire ceart. Thoir an aire gum bi aire " +"do litrichean mòra ’s beaga air an dà raon, ma dh’fhaoidte." + +msgid "This account is inactive." +msgstr "Chan eil an cunntas seo gnìomhach." + +msgid "Email" +msgstr "Post-d" + +msgid "New password" +msgstr "Facal-faire ùr" + +msgid "New password confirmation" +msgstr "Dearbhadh an fhacail-fhaire ùir" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Cha do chuir thu an seann fhacal-faire a-steach mar bu chòir. Cuir a-steach " +"e a-rithist." + +msgid "Old password" +msgstr "An seann fhacal-faire" + +msgid "Password (again)" +msgstr "Facal-faire (a-rithist)" + +msgid "algorithm" +msgstr "algairim" + +msgid "iterations" +msgstr "ath-thriallan" + +msgid "salt" +msgstr "salann" + +msgid "hash" +msgstr "hais" + +msgid "variety" +msgstr "eug-samhail" + +msgid "version" +msgstr "tionndadh" + +msgid "memory cost" +msgstr "cosgais cuimhne" + +msgid "time cost" +msgstr "cosgais ùine" + +msgid "parallelism" +msgstr "co-shìneadh" + +msgid "work factor" +msgstr "factar obrachaidh" + +msgid "checksum" +msgstr "àireamh dhearbhaidh" + +msgid "block size" +msgstr "meud nam blocaichean" + +msgid "name" +msgstr "ainm" + +msgid "content type" +msgstr "seòrsa susbainte" + +msgid "codename" +msgstr "ainm-còd" + +msgid "permission" +msgstr "cead" + +msgid "permissions" +msgstr "ceadan" + +msgid "group" +msgstr "buidheann" + +msgid "groups" +msgstr "buidhnean" + +msgid "superuser status" +msgstr "staid superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Iomruinidh seo gu bheil a h-uile aig a’ chleachdaiche seo gun a bhith ’gan " +"iomruineadh fa leth." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Am buidheann ris a bhuineas an cleachdaiche seo. Gheibh cleachdaiche a h-" +"uile cead a chaidh a thoirt dha ghin dhe na buidhnean aige." + +msgid "user permissions" +msgstr "ceadan a’ chleachdaiche" + +msgid "Specific permissions for this user." +msgstr "Ceadan sònraichte airson a’ chleachdaiche seo." + +msgid "username" +msgstr "ainm-cleachdaiche" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Riatanach. 150 caractar air a char as motha. Litrichean, àireamhan agus @/./" +"+/-/_ a-mhàin." + +msgid "A user with that username already exists." +msgstr "Tha cleachdaiche air a bheil an t-ainm-cleachdaiche seo ann mar-tha." + +msgid "first name" +msgstr "ainm" + +msgid "last name" +msgstr "sloinneadh" + +msgid "email address" +msgstr "seòladh puist-d" + +msgid "staff status" +msgstr "inbhe luchd-obrach" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Iomruinidh seo an urrainn dhan chleachdaiche seo clàradh a-steach gu làrach " +"nan rianairean gus nach urrainn." + +msgid "active" +msgstr "staid ghnìomhach" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Iomruinidh seo an dèid dèiligeadh ris a’ cleachdaiche seo mar fhear " +"gnìomhach gus nach dèid. Neo-thagh seo seach an cunntas a sguabadh às." + +msgid "date joined" +msgstr "fhuair e ballrachd" + +msgid "user" +msgstr "cleachdaiche" + +msgid "users" +msgstr "cleachdaichean" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d charactar a bhith " +"ann air a char as lugha." +msgstr[1] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d charactar a bhith " +"ann air a char as lugha." +msgstr[2] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d caractaran a " +"bhith ann air a char as lugha." +msgstr[3] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d caractar a bhith " +"ann air a char as lugha." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Feumaidh %(min_length)d charactar a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[1] "" +"Feumaidh %(min_length)d charactar a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[2] "" +"Feumaidh %(min_length)d caractaran a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[3] "" +"Feumaidh %(min_length)d caractar a bhith san fhacal-fhaire agad air a char " +"as lugha." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Tha am facal-faire agad ro choltach ri %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Chan fhaod am facal-faire agad a bhith ro choltach ris an fhiosrachadh " +"phearsanta eile agad." + +msgid "This password is too common." +msgstr "Tha am facal-faire seo ro chumanta." + +msgid "Your password can’t be a commonly used password." +msgstr "" +"Chan fhaod thu facal-faire a chleachdadh a chleachd mòran daoine mar-thà." + +msgid "This password is entirely numeric." +msgstr "Chan eil ach àireamhan san fhacal-fhaire seo." + +msgid "Your password can’t be entirely numeric." +msgstr "" +"Feumaidh caractaran a bhith san fhacal-fhaire agad nach eil ’nan àireamhan." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ath-shuidheachadh an fhacail-fhaire air %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Cuir a-steach ainm-cleachdaiche dligheach. Chan fhaod ach litrichean gun " +"sràcan, àireamhan is caractaran @/./+/-/_ a bhith ’na bhroinn." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Cuir a-steach ainm-cleachdaiche dligheach. Chan fhaod ach litrichean, " +"àireamhan is caractaran @/./+/-/_ a bhith ’na bhroinn." + +msgid "Logged out" +msgstr "Air a clàradh a-mach" + +msgid "Password reset" +msgstr "Ath-shuidheachadh an fhacail-fhaire" + +msgid "Password reset sent" +msgstr "Chaidh ath-shuidheachadh an fhacail-fhaire a chur" + +msgid "Enter new password" +msgstr "Cuir a-steach facal-faire ùr" + +msgid "Password reset unsuccessful" +msgstr "Cha deach le ath-shuidheachadh an facail-faire" + +msgid "Password reset complete" +msgstr "Tha ath-shuidheachadh an fhacail-fhaire deiseil" + +msgid "Password change" +msgstr "Atharrachadh an facail-fhaire" + +msgid "Password change successful" +msgstr "Chaidh am facal-faire atharrachadh gu soirbheachail" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..770942be31c9ddc247fdadacfcd228dad4003563 GIT binary patch literal 4022 zcmZ{m&yO5O6~_xOfh-|`gn$VFDj3JR#54ONwquXu2xB|eO0m7N)(8*;)ppm+l-*M` zban4~EiMrUKnNrxBOwG5QBE9)6!}18kw|EWa*IJ+xIn}ofVd(NBtEaYXLmLZrK$dQ zRlj=me!uzqgZqA_7)P0pGXMBKrOt!J2Y4`kuurK4@Q2_-;4N?sd=oqY?*E`t7Q77d zQ?K%P0DK)3o^OG3;J$m5x(|E+{51F|_%ZNUyMG@1FzfYp|6AbaSbOkc@WUj@#Am6kAts) z=fFGd`eB3-ISzr3fycqe!Eb;Mf-iuOs+-`az+boDUj-$8-fq|LfQY0HVAM~5hryqK zr@_PEpTI}J|AJ@0{r5L^{w65)%s}z`2o!z42Z~%j0woT935xxG4~kv>0E(a9Z1>*+ zMb5u~5|3|#BG11-;qz}$&fm*Np}W7uM?ksnaZu>Hprpc6pxEmqD0*K2h0cOv&k@K^ zy}(1x{j|kjfMU0oK-`pu@LOUYVG559Q^seQ^Gvb33`A5UW)D_*OSaHQ^pEYd?-U~f(z9Fruac>faou=B|~gJ z9k?+0>`=QQc`M_yO!2V{&6GG0--*3syuX2zx9YU6qb>E8tA@H7nkp^58Ch+L(wcl* z+v_e?v8&DujUQM&HZg96GVkewQJuBX4ZNvrYz|jL7aN8{6X8(ku`Nd~Mi+ccmxQ{4 z(>mm%a^HpG%n@m1(UPo8i|8sIGO&o^0 z$n}QR6-re$=VEQL%5B=NzT%@TY*sZqosSiI>(JLZ+m*;>vMkhIjBsvbT%lG+<4{({ zS2`En)vDh#h0Awrqx+#8VarhJ+F$cw%WLd0OstAQC^0s=J{JZ9B*7x;qTSj#yl0`a z;QLOPVL^2<>`>`wtFF3)Qd5VhwbnB`FM8e#jPnb-8(H#Uu4A2LHpYHk6x-dI&$E|J z+3C`9mkwSZoEKAnTcTqjs+5!B>~bn zPV?$~>u>e-P?tK)SWa&d4M|$u;e0DEmeG4Oag|Q??5c*7GE-lwY-qDxiYQCoe&~C`PN*l8Wr+!OcqT0mU z5{{ICYr2myLaElua1|$aR`bqRo6kL+U!`J%xyx3vrE?(;T;BOgJ&2w4(9?5km)1LH zBpYGXIg7b^dSz+(sm{`g&dL$J{ABOQu_u;RmX;vwT(+A|uH2dk%wj)=T4KVGyZ@Xp!U!`ssec5q`H{9*8r#Sr|RT0Y9kCz;@QH8TIseayWAo znfYN=jeCoWTU%S*O8B|Hy)H)<8;zz=wC5KG#p1%;h1Cn^c6DFwF3p_@WPnGe?J>$# z_IkBAE=b6enmjB?s#90ipY0sqrIWk*w(OiE26L)KPaofK)sCD!Jt*eZiW-l1o~6RX zp7!IkjHgyk>gM&-yw{JN(#s1c=hW9sQ@tsmo*G)4(gmp~nvB*yP~>x|t!bYEZ$=x= zkQzdQ-jS3kQkh@%xyy|HPEAr%9j8Z7$?GcQA!>e2!0v@u>G-9d+b!nChm6?bM zR0nobji0*sE-?{j8c|K0-DNAB@m~EUNOw)`v{9KTi@_9Xjo#Wfo1r{R#f}d72=P4~ zX0Iz+0YmKSbvt>5#ApoCL^XOeL7bzFs5O>=mRhcJLInfXuB5ZL$?cfcRAy~8@i$%3 zh>4n+qwf(18NC2ETf+Ao#WvXyDPlEwaoU@V3I#v2wrayXRP}Y+;_D1WWyTe}! z2TiLUhvqrkx)STCCbx^qap^RU&6o~FolsdViH9tykvXFhv(&^=4-0BGQreQzHZhLV z!4xMqN_g-Gpp6BLDBVohwhb*+G}TtNo#R3<-FsK{o6@$;O>(bkY;uOk-Jr<^^*_kd BVsQWf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..0963083ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,293 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fasouto , 2011 +# fonso , 2011,2013 +# fasouto , 2019 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2011,2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2019-02-15 16:54+0000\n" +"Last-Translator: fasouto \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información persoal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Datas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "O contrasinal cambiouse correctamente." + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar o contrasinal: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "contrasinal" + +msgid "last login" +msgstr "última sesión" + +msgid "No password set." +msgstr "Non se configurou ningún contrasinal." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de contrasinal non válido ou algoritmo de hash descoñecido." + +msgid "The two password fields didn't match." +msgstr "Os dous campos de contrasinal non coinciden." + +msgid "Password" +msgstr "Contrasinal" + +msgid "Password confirmation" +msgstr "Confirmación do contrasinal" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor, insira un %(username)s e contrasinal correctos. Teña en conta que " +"ambos os dous campos poden distinguir maiúsculas e minúsculas." + +msgid "This account is inactive." +msgstr "Esta conta está inactiva." + +msgid "Email" +msgstr "Correo electrónico" + +msgid "New password" +msgstr "Novo contrasinal" + +msgid "New password confirmation" +msgstr "Confirmación do novo contrasinal" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Inseriu incorrectamente o seu contrasinal actual. Insírao de novo." + +msgid "Old password" +msgstr "Contrasinal antigo" + +msgid "Password (again)" +msgstr "Contrasinal (outra vez)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteracións" + +msgid "salt" +msgstr "sal" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "custo de memoria" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "factor de traballo" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "estatus de superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario ten todos os permisos sen asignarllos explicitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "nome de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Xa existe un usuario con ese nome de usuario." + +msgid "first name" +msgstr "nome" + +msgid "last name" +msgstr "apelidos" + +msgid "email address" +msgstr "enderezo de correo electrónico" + +msgid "staff status" +msgstr "membro do persoal" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica se o usuario pode acceder a este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Determina se este usuario se debe considerar activo. Deseleccione isto en " +"vez de borrar contas de usuario." + +msgid "date joined" +msgstr "data de rexistro" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Cambio de contrasinal en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Rematou a sesión" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7434a6bfc57202b3d484933d6c9458136824fdc0 GIT binary patch literal 8606 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..71ae0041b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,303 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Gaynor , 2011-2012 +# Jannis Leidel , 2011 +# Meir Kriheli , 2012-2015,2017,2019 +# אורי רודברג , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-19 11:14+0000\n" +"Last-Translator: אורי רודברג \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "מידע אישי" + +msgid "Permissions" +msgstr "הרשאות" + +msgid "Important dates" +msgstr "תאריכים חשובים" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "הפריט %(name)s עם המפתח הראשי %(key)r אינו קיים." + +msgid "Password changed successfully." +msgstr "הסיסמה שונתה בהצלחה." + +#, python-format +msgid "Change password: %s" +msgstr "שינוי סיסמה: %s" + +msgid "Authentication and Authorization" +msgstr "אימות והרשאות" + +msgid "password" +msgstr "סיסמה" + +msgid "last login" +msgstr "כניסה אחרונה" + +msgid "No password set." +msgstr "לא נקבעה סיסמה." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "תחביר סיסמה בלתי-חוקי או אלגוריתם גיבוב לא ידוע." + +msgid "The two password fields didn’t match." +msgstr "שני שדות הסיסמה אינם זהים." + +msgid "Password" +msgstr "סיסמה" + +msgid "Password confirmation" +msgstr "אימות סיסמה" + +msgid "Enter the same password as before, for verification." +msgstr "יש להזין את אותה סיסמה כמו קודם, לאימות." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"הסיסמאות אינן נשמרות באופן חשוף, כך שאין דרך לראות את סיסמת המשתמש, אבל ניתן " +"לשנות את הסיסמה בעזרת טופס זה." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"נא להזין %(username)s וסיסמה נכונים. נא לשים לב כי שני השדות רגישים לאותיות " +"גדולות/קטנות." + +msgid "This account is inactive." +msgstr "חשבון זה אינו פעיל." + +msgid "Email" +msgstr "דוא\"ל" + +msgid "New password" +msgstr "סיסמה חדשה" + +msgid "New password confirmation" +msgstr "אימות סיסמה חדשה" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "סיסמתך הישנה הוזנה בצורה שגויה. נא להזינה שוב." + +msgid "Old password" +msgstr "סיסמה ישנה" + +msgid "Password (again)" +msgstr "סיסמה (שוב)" + +msgid "algorithm" +msgstr "אלגוריתם" + +msgid "iterations" +msgstr "חזרות" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "גיבוב" + +msgid "variety" +msgstr "מגוון" + +msgid "version" +msgstr "גרסה" + +msgid "memory cost" +msgstr "עלות זכרון" + +msgid "time cost" +msgstr "עלות זמן" + +msgid "parallelism" +msgstr "מקבילות" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "סיכום ביקורת" + +msgid "name" +msgstr "שם" + +msgid "content type" +msgstr "סוג תוכן" + +msgid "codename" +msgstr "שם קוד" + +msgid "permission" +msgstr "הרשאה" + +msgid "permissions" +msgstr "הרשאות" + +msgid "group" +msgstr "קבוצה" + +msgid "groups" +msgstr "קבוצות" + +msgid "superuser status" +msgstr "סטטוס משתמש על" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "מציין שלמשתמש זה יש את כל ההרשאות ללא הצורך המפורש בהענקתן." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"הקבוצות שמשתמש זה שייך אליהן. משתמש יקבל את כל ההרשאות המוקצות לכל אחת " +"מהקבוצות שלו/שלה." + +msgid "user permissions" +msgstr "הרשאות משתמש" + +msgid "Specific permissions for this user." +msgstr "הרשאות ספציפיות למשתמש זה." + +msgid "username" +msgstr "שם משתמש" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "שדה חובה. 150 תווים או פחות. אותיות, ספרות ו-@/./+/-/_ בלבד." + +msgid "A user with that username already exists." +msgstr "משתמש עם שם משתמש זה קיים כבר" + +msgid "first name" +msgstr "שם פרטי" + +msgid "last name" +msgstr "שם משפחה" + +msgid "email address" +msgstr "כתובת דוא\"ל" + +msgid "staff status" +msgstr "סטטוס איש צוות" + +msgid "Designates whether the user can log into this admin site." +msgstr "מציין האם המשתמש יכול להתחבר לאתר הניהול." + +msgid "active" +msgstr "פעיל" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"מציין האם יש להתייחס למשתמש כפעיל. יש לבטל בחירה זו במקום למחוק חשבונות " +"משתמשים." + +msgid "date joined" +msgstr "תאריך הצטרפות" + +msgid "user" +msgstr "משתמש" + +msgid "users" +msgstr "משתמשים" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "סיסמה זו קצרה מדי. היא חייבת להכיל לפחות תו %(min_length)d." +msgstr[1] "סיסמה זו קצרה מדי. היא חייבת להכיל לפחות %(min_length)d תווים." +msgstr[2] "סיסמה זו קצרה מדי. היא חייבת להכיל לפחות %(min_length)d תווים." +msgstr[3] "סיסמה זו קצרה מדי. היא חייבת להכיל לפחות %(min_length)d תווים." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "הסיסמה שלך חייבת להכיל לפחות תו %(min_length)d." +msgstr[1] "הסיסמה שלך חייבת להכיל לפחות %(min_length)d תווים." +msgstr[2] "הסיסמה שלך חייבת להכיל לפחות %(min_length)d תווים." +msgstr[3] "הסיסמה שלך חייבת להכיל לפחות %(min_length)d תווים." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "סיסמה זו דומה מדי ל-%(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "הסיסמה שלך לא יכולה להיות דומה מדי למידע אישי אחר שלך." + +msgid "This password is too common." +msgstr "סיסמה זו נפוצה מדי." + +msgid "Your password can’t be a commonly used password." +msgstr "הסיסמה שלך לא יכולה להיות סיסמה שכיחה." + +msgid "This password is entirely numeric." +msgstr "סיסמה זו מכילה רק ספרות." + +msgid "Your password can’t be entirely numeric." +msgstr "הסיסמה שלך לא יכולה להכיל רק ספרות." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "החלפת הסיסמה ב-%(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"יש להזין שם משתמש חוקי. ערך זה יכול להכיל אותיות אנגליות, ספרות והתווים @/./" +"+/-/_ בלבד." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"יש להזין שם משתמש חוקי. ערך זה יכול להכיל אותיות, ספרות והתווים @/./+/-/_ " +"בלבד." + +msgid "Logged out" +msgstr "יצאת מהמערכת" + +msgid "Password reset" +msgstr "איפוס סיסמה" + +msgid "Password reset sent" +msgstr "איפוס הסיסמה נשלח." + +msgid "Enter new password" +msgstr "הזנת סיסמה חדשה" + +msgid "Password reset unsuccessful" +msgstr "איפוס הסיסמה נכשל" + +msgid "Password reset complete" +msgstr "איפוס הסיסמה הושלם" + +msgid "Password change" +msgstr "שינוי סיסמה" + +msgid "Password change successful" +msgstr "הסיסמה שונתה בהצלחה" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8966d0c07f18beaafb7df88113b98992a5fe21cc GIT binary patch literal 5364 zcma);U62%4700h85?wVBjNf8zP-It}*$>f>0jxwqWD_78YLhCp1-ZQ{g~pK;QliA`41_z8Qgdq53a4ZD>VX6f}aKxa0)yG-VeS5 z`rwL>D8*0h<8c@G4ESyE2si}31%3kj3-|@_UGP)jf86{X%ar;kJFtI1UG_Asb|2Cfd@gcbJXEUQ1qPvMc)Nb z{Cxw&HT6eO_WubaRP|T4{*J@HgQE9eZvDTY=>MNvU&cW6F9&7+N>F%M1xlQwZvFu` z-U9MdPx27^PlK}G2VWpJKL(#-ybLELFBR}E=8u5a7{7?{os6Hth~z6Is1i629s%C~ zzX(2Zr{&WJCHDuxQSb^l4E_TY-j|ciZ-8q+$>&Z`)(?Y^gRg>L0&gRjwctJA+u)<% z9&q_`yZ@))0^@Vw3UDir&x1b%QK3>$=6}XR@^=Ch|6c_^3%(5sZ|{Qq)IWI$@9%+M z1D7Ez^|2O|{f~mO?t>CX49dQPp!jF3QAQMTb&ra*cC;-Mra)ARX#n zHtITPCUy!6pQEje!QO(yg zUXskl%}PnHPSitw64W9u^%J`}tp|x!Soab%gnGtrHi9Gx;wUjj;#P{rnJ_2^X*j1* zhJqlfvEOeL`xVaCede07U{#jANQZGv2T>X`izTnp2qK*XsehB59dD9)+zKmtm#@bgR#(T}BdasE}yf9Ts>Q$?nXWC+>#ky&9HzDuJO!RN;2R&4uo#=XgwGm8QMO%eM>L)@#5If=9mhP@M&&_;8K5IIyw{5a2qsz)}(1R zJu&@oVSP_dY*qbcVGA`@;WQ}e^}B+!>tspSgQ2Og)%3!`!<-;VNk=ngm~5KZpzZ6X z;Yi=RNso_g7*ct5D9^6wJUf?X*YfNY-j3z%L%@&M;${ zwSyuk%Z%TYr@Sw+a5ZlqR(bYXo}D*yFPV)8@@#>{^LfVjGKTW(fcXp<2T*XSBh35j z=3V5E8S~DhXtr~20;ll_a8W!b-ewn#pC{Zt=bd=#LPLaDC2E4akhkY~Bam}>dp{I( zV!3Ff_Opgo)(8yK;xSW1fQLew9f)svc9emo0~0;>35vj9wu{0o`?|57H9KLKnT$0F zuc(X@7a86Vy0uRv;`J@!b*$J_9=6tvh#uQ?w8MDeCC3)U6k ziB)34^?8~5iCP*Wx&EN(BrbS%DxLec2$C&Q0meJoY^fCPNF@=vB%SUboHB!}#;>Er zJUed2R4?@{>2*30Sa91+PcS{NStk2domg>RQb1_MbDLaArO93UkYw|WQFDw*Dnlq_ z4)-u%TgEkxX*O!bw!v=^M;7kd=IJVutr%O(+hp`CB6uZz)!%H)cJl}Yy#jR1vY*C* ztQT$I$iHO9NYVqgnr+QvhX`NKGx3IqE)yYdi^ij~Je8Tl$_b<442wTEmARlVL zz)^6kbyN`s4!K^k)`*uh*)w2J1Tmi}S09|lARRO^f5D=y$j+^Qh zqspY@D%0o`?gr((r(K%DHth{&>{)sl6}?Ji03o;|ttEXy`sD+3+?0cvG^|om?t5x? z$TyU3f?2vzxcFejj3AkUE#Z>m7avLCX$It;^Tf3zF40DY@ar@9J0m9)hG zhC>u%?i(b{h3H}@<`YW>#+vvnk&|NHETLqIfGA8`J=O=?qWg`Iu=cC2A^y7XRf1w> z&#_L5$Rq=lNS8}nSVwwq1L}#LFty}=$ABrDt~?V*pbf>CC!Gt7Z7VaNLF`A(d0?wZ zSTr>!r!;$6M0U~8Kq`1Yr40qVkth4dsY`)SIzW&89`nD6%=Kh30F^h@bA6osLA~F; f9)E+)=GiZ86~Y9}*Z}3Ipn(5il5AaEU`_oW`GTpR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..b6319856e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alkuma , 2013 +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "व्यक्तिगत सूचना" + +msgid "Permissions" +msgstr "अनुमतियाँ" + +msgid "Important dates" +msgstr "महत्त्वपूर्ण तिथियाँ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "शब्दकूट बदली कामयाब" + +#, python-format +msgid "Change password: %s" +msgstr "शब्दकूट बदलें: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "शब्दकूट" + +msgid "last login" +msgstr "पिछला लॉगिन" + +msgid "No password set." +msgstr "कोई कूटशब्द नहीं।" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "अवैध कूटशब्द प्रारूप या अज्ञात द्रुतान्वेषण कलन विधि" + +msgid "The two password fields didn't match." +msgstr "यह दो शब्दकूट क्षेत्रों का मेल नहीं होता " + +msgid "Password" +msgstr "कूटशब्द" + +msgid "Password confirmation" +msgstr "कूटशब्द पुष्टि" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "कृपया सही %(username)s व कूटशब्द भरें। भरते समय लघु और दीर्घ अक्षरों का ध्यान रखें।" + +msgid "This account is inactive." +msgstr "यस खाता सुस्त है" + +msgid "Email" +msgstr "डाक पता" + +msgid "New password" +msgstr "नया शब्दकूट" + +msgid "New password confirmation" +msgstr "नया शब्दकूट पुष्टि" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "आपने पुराना शब्दकूट गलत दर्ज किया है । कृपया फिर से दर्ज करें" + +msgid "Old password" +msgstr "पुराना शब्दकूट" + +msgid "Password (again)" +msgstr "शब्दकूट (दुबारा)" + +msgid "algorithm" +msgstr "अलगोरिथम" + +msgid "iterations" +msgstr "पुनरूक्तियाँ" + +msgid "salt" +msgstr "साल्ट" + +msgid "hash" +msgstr "हैश" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "कार्य फ़ैक्टर" + +msgid "checksum" +msgstr "चेकसम" + +msgid "name" +msgstr "नाम" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "कोडनेम" + +msgid "permission" +msgstr "अनुमति" + +msgid "permissions" +msgstr "अनुमतियाँ" + +msgid "group" +msgstr "वर्ग" + +msgid "groups" +msgstr "वर्गों" + +msgid "superuser status" +msgstr "सर्वोच्च प्रयोक्ता स्थिति" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"निर्दिष्ट करता है कि जो इस उपयोगकर्ता के पास सभी अनुमतियाँ उन्हें बिना बताए स्पष्ट रूप से " +"निर्धारित है." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "प्रयोक्ता अनुमतियाँ" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "प्रयोक्ता नाम" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "इस नाम के साथ प्रवोक्ता अस्तित्व है" + +msgid "first name" +msgstr "पहला नाम" + +msgid "last name" +msgstr "आखिरी नाम" + +msgid "email address" +msgstr "डाक पता" + +msgid "staff status" +msgstr "कर्मचारी स्थिति" + +msgid "Designates whether the user can log into this admin site." +msgstr "तय करता हैं की उपयोगकर्ता इस साईट प्रशासन में प्रवेश कर सकता हैं या नहीं |" + +msgid "active" +msgstr "सक्रिय" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"निर्दिष्ट करता है कि क्या इस उपयोगकर्ता को सक्रिय माना जाना चाहिए.खातों को हटाने की " +"बजाय इस अचयनित करे." + +msgid "date joined" +msgstr "तिथि भरती" + +msgid "user" +msgstr "उपभोक्ता" + +msgid "users" +msgstr "उपभोक्ताऐं" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s पर कूटशब्द को पुनःठीक करे" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "लाग्ड आउट " + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..706a16dc72c189f156354936890e5a5ad9d49d18 GIT binary patch literal 5894 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..f6711db4f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,306 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bojan Mihelač , 2012 +# Davor Lučić , 2012 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2013,2015 +# Nino , 2013 +# senko , 2012 +# zmasek , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Personal info" +msgstr "Osobni podaci" + +msgid "Permissions" +msgstr "Privilegije" + +msgid "Important dates" +msgstr "Važni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Unos %(name)s sa primarnim ključem %(key)r ne postoji." + +msgid "Password changed successfully." +msgstr "Lozinka uspješno promijenjena." + +#, python-format +msgid "Change password: %s" +msgstr "Promijeni lozinku: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "lozinka" + +msgid "last login" +msgstr "posljednja prijava" + +msgid "No password set." +msgstr "Lozinka nije postavljena." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neispravan format lozinke ili nepoznati hashing algoritam." + +msgid "The two password fields didn't match." +msgstr "Dva polja za lozinku nisu jednaka." + +msgid "Password" +msgstr "Lozinka" + +msgid "Password confirmation" +msgstr "Potvrda lozinke" + +msgid "Enter the same password as before, for verification." +msgstr "Unesite istu lozinku, za potvrdu." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Unesite ispravno %(username)s i lozinku. Imajte na umu da oba polja mogu " +"biti velika i mala slova." + +msgid "This account is inactive." +msgstr "Ovaj korisnički račun nije aktivan." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nova lozinka" + +msgid "New password confirmation" +msgstr "Potvrda nove lozinke" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaša stara lozinka je pogrešno unesena. Molim unesite ponovo." + +msgid "Old password" +msgstr "Stara lozinka" + +msgid "Password (again)" +msgstr "Lozinka (unesi ponovo)" + +msgid "algorithm" +msgstr "algoritam" + +msgid "iterations" +msgstr "iteracije" + +msgid "salt" +msgstr "slučajna vrijednost" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "količina rada" + +msgid "checksum" +msgstr "zbroj za provjeru" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "codename" +msgstr "kodno ime" + +msgid "permission" +msgstr "privilegija" + +msgid "permissions" +msgstr "privilegije" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupe" + +msgid "superuser status" +msgstr "superuser status" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Određuje da ovaj korisnik ima sve privilegije te uklanja potrebu da se " +"privilegije unose eksplicitno/ručno." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupe kojima ovaj korisnik pripada. Korisnik će imati sve privilegije grupa " +"kojima pripada." + +msgid "user permissions" +msgstr "privilegije korisnika" + +msgid "Specific permissions for this user." +msgstr "Određene privilegije za korisnika." + +msgid "username" +msgstr "korisničko ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Korisnik sa navedenim imenom već postoji." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "prezime" + +msgid "email address" +msgstr "e-mail adresa" + +msgid "staff status" +msgstr "status osoblja" + +msgid "Designates whether the user can log into this admin site." +msgstr "Određuje može li se korisnik prijaviti na ove stranice administracije." + +msgid "active" +msgstr "aktivan" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Određuje treba li se ovaj korisnik tretirati kao aktivan korisnik. Koristite " +"ovu opciju umjesto brisanja korisničkih računa." + +msgid "date joined" +msgstr "datum učlanjenja" + +msgid "user" +msgstr "korisnik" + +msgid "users" +msgstr "korisnici" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Lozinka nije dovoljno dugačka. Mora sadržavati minimalno %(min_length)d znak." +msgstr[1] "" +"Lozinka nije dovoljno dugačka. Mora sadržavati minimalno %(min_length)d " +"znaka." +msgstr[2] "" +"Lozinka nije dovoljno dugačka. Mora sadržavati minimalno %(min_length)d " +"znakova." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Lozinka mora sadržavati minimalno %(min_length)d znak." +msgstr[1] "Lozinka mora sadržavati minimalno %(min_length)d znaka." +msgstr[2] "Lozinka mora sadržavati minimalno %(min_length)d znakova." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "Lozinka se u potpunosti sastoji od brojeva." + +msgid "Your password can't be entirely numeric." +msgstr "Lozinka se ne smije u potpunosti sastojati od brojeva." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Resetiranje lozinke na %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Niste logirani" + +msgid "Password reset" +msgstr "Resetiranje lozinke" + +msgid "Password reset sent" +msgstr "Resetiranje lozinke poslano" + +msgid "Enter new password" +msgstr "Unesite novu lozinku" + +msgid "Password reset unsuccessful" +msgstr "Resetiranje lozinke neuspješno" + +msgid "Password reset complete" +msgstr "Resetiranje lozinke završeno" + +msgid "Password change" +msgstr "Promjena lozinke" + +msgid "Password change successful" +msgstr "Promjena lozinke uspješna" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..921ff9c90d1ee1d4a584906f5f5064c57d3b8748 GIT binary patch literal 7974 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 B*3, 2016-2017,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-28 18:17+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Wosobinske informacije" + +msgid "Permissions" +msgstr "Prawa" + +msgid "Important dates" +msgstr "Wažne daty" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z primarnym klučom %(key)r njeeksistuje." + +msgid "Password changed successfully." +msgstr "Hesło je so wuspěšnje změniło." + +#, python-format +msgid "Change password: %s" +msgstr "Hesło změnić: %s" + +msgid "Authentication and Authorization" +msgstr "Awtentifikacija a awtorizacija" + +msgid "password" +msgstr "hesło" + +msgid "last login" +msgstr "poslednje přizjewjenje" + +msgid "No password set." +msgstr "Žane hesło nastajene." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Njepłaćiwy hesłowy format abo njeznaty kontrolny algoritmus." + +msgid "The two password fields didn’t match." +msgstr "Dwě heslowej poli sej njewotpowědujetej." + +msgid "Password" +msgstr "Hesło" + +msgid "Password confirmation" +msgstr "Hesłowe wobkrućenje" + +msgid "Enter the same password as before, for verification." +msgstr "Zapodajće samsne hesło kaž do toho, za přepruwowanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Hrube hesła so njeskładuja, tohodla njeda so hesło tutoho wužwarja widźeć, " +"ale móžeće hesło z pomocu tutoho formulara změnić. " + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Prošu zapodajće korektne %(username)s a hesło. Dźiwajće na to, zo wobě poli " +"móžetej mjez wulko- a małopisanjom rozeznawać." + +msgid "This account is inactive." +msgstr "Tute konto je inaktiwne." + +msgid "Email" +msgstr "E-mejl" + +msgid "New password" +msgstr "Nowe hesło" + +msgid "New password confirmation" +msgstr "Wobkrućenje noweho hesła" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Waše stare hesło je so wopak zapodało. Prošu zapodajće jo hišće raz." + +msgid "Old password" +msgstr "Stare hesło" + +msgid "Password (again)" +msgstr "Hesło (znowa)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "wospjetowanja" + +msgid "salt" +msgstr "sól" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "warianta" + +msgid "version" +msgstr "wersija" + +msgid "memory cost" +msgstr "Składowa přetrjeba" + +msgid "time cost" +msgstr "Časowa přetrjeba" + +msgid "parallelism" +msgstr "paralelizm" + +msgid "work factor" +msgstr "dźěłowy faktor" + +msgid "checksum" +msgstr "pruwowanska suma" + +msgid "block size" +msgstr "blokowa wulkosć" + +msgid "name" +msgstr "mjeno" + +msgid "content type" +msgstr "wobsahowy typ" + +msgid "codename" +msgstr "kodowe mjeno" + +msgid "permission" +msgstr "prawo" + +msgid "permissions" +msgstr "prawa" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupiny" + +msgid "superuser status" +msgstr "status superwužiwarja" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Woznamjenja, zo tutón wužiwar ma wšě prawa bjez toho, zo by móhł je " +"eksplicitnje připokazać." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupiny, ke kotrymž wužiwar słuša. Wužiwar dóstanje wšě prawa, kotrež jemu " +"skupiny dawaja." + +msgid "user permissions" +msgstr "wužiwarske prawa" + +msgid "Specific permissions for this user." +msgstr "Wěste prawa za tutoho wužiwarja." + +msgid "username" +msgstr "wužiwarske mjeno" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Trěbne. 150 znamješkow abo mjenje. Jenož pismiki, cyfry a @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Wužiwar z tutym mjenom hižo eksistuje." + +msgid "first name" +msgstr "předmjeno" + +msgid "last name" +msgstr "swójbne mjeno" + +msgid "email address" +msgstr "e-mejlowa adresa" + +msgid "staff status" +msgstr "personalny status" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Woznamjenja, hač wužiwar móže so pola administratoroweho sydła přizjewić." + +msgid "active" +msgstr "aktiwny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Woznamjenja, hač maja z wužiwarjom jako aktiwnym wobchadźeć. Znjemóžńće to " +"město toho, zo byšće konto zhašał." + +msgid "date joined" +msgstr "čłon wot" + +msgid "user" +msgstr "wužiwar" + +msgid "users" +msgstr "wužiwarjo" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješko " +"wobsahować." +msgstr[1] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješce " +"wobsahować." +msgstr[2] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješka " +"wobsahować." +msgstr[3] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješkow " +"wobsahować." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješko měć." +msgstr[1] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješce měć." +msgstr[2] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješka měć." +msgstr[3] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješkow měć." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Hesło je na %(verbose_name)s přepodobne." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Waše hesło njemóže na waše druhe wosobinske informacije podobne być." + +msgid "This password is too common." +msgstr "Tute hesło je přehuste," + +msgid "Your password can’t be a commonly used password." +msgstr "Waše hesło njemóže husto wužwane hesło być." + +msgid "This password is entirely numeric." +msgstr "Tute hesło je cyle numeriske." + +msgid "Your password can’t be entirely numeric." +msgstr "Waše hesło njemóže cyle numeriske być." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Hesło je so na %(site_name)s wróćo stajiło." + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zapodajće płaćiwe wužiwarske mjeno. Tuta hódnota smě jenož jendźelske " +"pismiki, ličby a znamješka @/./+/-/_ wobsahować." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zapodajće płaćiwe wužiwarske mjeno. Tuta hódnota smě jenož pismiki, ličby a " +"znamješka @/./+/-/_ wobsahować." + +msgid "Logged out" +msgstr "Wotzjewjeny" + +msgid "Password reset" +msgstr "Wróćostajenje hesła" + +msgid "Password reset sent" +msgstr "Wróćostajenje hesła jo se wotpósłało." + +msgid "Enter new password" +msgstr "Zapodajće nowe hesło" + +msgid "Password reset unsuccessful" +msgstr "Wróćostajenje hesła njeje so poradźiło" + +msgid "Password reset complete" +msgstr "Wróćostajenje hesła je zakónčene" + +msgid "Password change" +msgstr "Změnjenje hesła" + +msgid "Password change successful" +msgstr "Hesło je so wuspěšnje změniło" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..44c573c64f76000702db9539527ff99406399935 GIT binary patch literal 7655 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, 2019 +# Jannis Leidel , 2011 +# János R, 2014 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-18 09:27+0000\n" +"Last-Translator: Istvan Farkas \n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Személyes információ" + +msgid "Permissions" +msgstr "Jogosultságok" + +msgid "Important dates" +msgstr "Fontos dátumok" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objektum %(key)r elsődleges kulccsal nem létezik." + +msgid "Password changed successfully." +msgstr "Sikeres jelszóváltoztatás." + +#, python-format +msgid "Change password: %s" +msgstr "Jelszó megváltoztatása: %s" + +msgid "Authentication and Authorization" +msgstr "Hitelesítés és engedélyezés" + +msgid "password" +msgstr "jelszó" + +msgid "last login" +msgstr "utolsó bejelentkezés" + +msgid "No password set." +msgstr "Nincs jelszó beállítva." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Érvénytelen jelszóformátum vagy ismeretlen hash-algoritmus." + +msgid "The two password fields didn’t match." +msgstr "A beírt két jelszó nem egyezik." + +msgid "Password" +msgstr "Jelszó" + +msgid "Password confirmation" +msgstr "Jelszó megerősítése" + +msgid "Enter the same password as before, for verification." +msgstr "Írja be az előbb megadott jelszót, ellenőrzés céljából." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"A jelszavakat olvasható formában nem tároljuk, így egy felhasználó jelszavát " +"nem lehet mgnézni, de át lehet állítani ezzel az űrlappal." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Írjon be egy helyes %(username)s és jelszót. Mindkét mező kisbetű-nagybetű " +"érzékeny lehet." + +msgid "This account is inactive." +msgstr "Ez a fiók inaktív." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Új jelszó" + +msgid "New password confirmation" +msgstr "Új jelszó megerősítése" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "A régi jelszó hibásan lett megadva. Írja be újra." + +msgid "Old password" +msgstr "Régi jelszó" + +msgid "Password (again)" +msgstr "Jelszó újra" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "iterációk" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "változat" + +msgid "version" +msgstr "verzió" + +msgid "memory cost" +msgstr "memória költség" + +msgid "time cost" +msgstr "idő költség" + +msgid "parallelism" +msgstr "párhuzamosság" + +msgid "work factor" +msgstr "erősség" + +msgid "checksum" +msgstr "ellenőrző összeg" + +msgid "name" +msgstr "név" + +msgid "content type" +msgstr "tartalom típusa" + +msgid "codename" +msgstr "kódnév" + +msgid "permission" +msgstr "jogosultság" + +msgid "permissions" +msgstr "jogosultságok" + +msgid "group" +msgstr "csoport" + +msgid "groups" +msgstr "csoportok" + +msgid "superuser status" +msgstr "rendszergazda státusz" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Megadja, hogy ez a felhasználó rendelkezik-e minden jogosultsággal anélkül, " +"hogy azt külön meg kellene adni." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"A csoportok, amelyekhez a felhasználó tartozik. A felhasználó minden egyes " +"csoportja jogosultságaival rendelkezni fog." + +msgid "user permissions" +msgstr "felhasználói jogosultságok" + +msgid "Specific permissions for this user." +msgstr "A felhasználó egyedi jogosultságai." + +msgid "username" +msgstr "felhasználónév" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Kötelező. Legfeljebb 150 karakter. Betűk, számok és @/./+/-/_ karakterek." + +msgid "A user with that username already exists." +msgstr "Létezik már egy felhasználó ezzel a névvel." + +msgid "first name" +msgstr "keresztnév" + +msgid "last name" +msgstr "vezetéknév" + +msgid "email address" +msgstr "e-mail cím" + +msgid "staff status" +msgstr "személyzet státusz" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Megadja, hogy a felhasználó bejelentkezhet-e erre az adminisztrációs oldalra." + +msgid "active" +msgstr "aktív" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Megadja, hogy a felhasználó aktív-e. Állítsa át ezt az értéket a fiók " +"törlése helyett." + +msgid "date joined" +msgstr "csatlakozás dátuma" + +msgid "user" +msgstr "felhasználó" + +msgid "users" +msgstr "felhasználók" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ez a jelszó túl rövid. Legalább %(min_length)d karakter hosszú legyen." +msgstr[1] "" +"Ez a jelszó túl rövid. Legalább %(min_length)d karakter hosszú legyen." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"A jelszavának legalább %(min_length)d karakter hosszúnak kell lennie." +msgstr[1] "" +"A jelszavának legalább %(min_length)d karakter hosszúnak kell lennie." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "A jelszava túlságosan hasonlít a következőhöz: %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "A jelszó nem lehet hasonló a személyes adatok egyikéhez sem." + +msgid "This password is too common." +msgstr "Ez a jelszó túlságosan gyakori." + +msgid "Your password can’t be a commonly used password." +msgstr "A jelszó nem lehet a túl gyakran használt jelszavak közül." + +msgid "This password is entirely numeric." +msgstr "A jelszava kizárólag számjegyekből áll." + +msgid "Your password can’t be entirely numeric." +msgstr "A jelszó nem állhat csak számjegyekből." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Jelszó újragenerálása ezen az oldalon: %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Írjon be egy érvényes felhasználónevet, mely csak ékezetmentes betűket, " +"számokat és @/./+/-/_ karaktereket tartalmazhat." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Írjon be egy érvényes felhasználónevet, mely csak betűket, számokat és @/./" +"+/-/_ karaktereket tartalmazhat." + +msgid "Logged out" +msgstr "Kijelentkezve" + +msgid "Password reset" +msgstr "Jelszó újragenerálása" + +msgid "Password reset sent" +msgstr "Jelszó beállítás infók elküldve" + +msgid "Enter new password" +msgstr "Írja be az új jelszavát" + +msgid "Password reset unsuccessful" +msgstr "Jelszó beállítása sikertelen" + +msgid "Password reset complete" +msgstr "Jelszó beállítása kész" + +msgid "Password change" +msgstr "Jelszó megváltoztatása" + +msgid "Password change successful" +msgstr "Sikeres jelszóváltoztatás" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ca530aea136109075553a4ee4a9b68fa9fe38fb GIT binary patch literal 8001 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..f4c971799 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,295 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ruben Harutyunov , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2018-11-11 20:11+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Անձնական տվյալներ" + +msgid "Permissions" +msgstr "Իրավունքներ" + +msgid "Important dates" +msgstr "Կարևոր ամսաթվեր" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(key)r հիմնական բանալով %(name)s օբյեկտ գոյություն չունի։" + +msgid "Password changed successfully." +msgstr "Գաղտնաբառը հաջողությամբ փոխվեց։" + +#, python-format +msgid "Change password: %s" +msgstr "Փոխել գաղտնաբառը․ %s" + +msgid "Authentication and Authorization" +msgstr "Նույնականացում և Լիազորում" + +msgid "password" +msgstr "գաղտնաբառ" + +msgid "last login" +msgstr "վերջին մուտք" + +msgid "No password set." +msgstr "Գաղտնաբառը նշված չէ։" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Գաղտնաբառի սխալ ֆորմատ, կամ անհայտ հեշավորման ալգորիթմ։" + +msgid "The two password fields didn't match." +msgstr "Երկու գաղտնաբառերը չեն համապատասխանում իրար։" + +msgid "Password" +msgstr "Գաղտնաբառ" + +msgid "Password confirmation" +msgstr "Գաղտնաբառը նորից" + +msgid "Enter the same password as before, for verification." +msgstr "Մուտքագրեք հին գաղտնաբառը, ստուգման համար։" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Մուտքագրեք ճիշտ %(username)s և գաղտնաբառ։ Երկու դաշտերն էլ տառաշարազգայուն " +"են։" + +msgid "This account is inactive." +msgstr "Այս օգտագործողը ակտիվ չէ։" + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Նոր գաղտնաբառ" + +msgid "New password confirmation" +msgstr "Նոր գաղտնաբառը նորից" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Հին գաղտնաբառը սխալ է։ Մուտքագրեք նորից։" + +msgid "Old password" +msgstr "Հին գաղտնաբառ" + +msgid "Password (again)" +msgstr "Գաղտնաբառ (նորից)" + +msgid "algorithm" +msgstr "ալգորիթմ" + +msgid "iterations" +msgstr "իտերացիաներ" + +msgid "salt" +msgstr "աղ" + +msgid "hash" +msgstr "հեշ" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "տևողություն" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "աշխատանքային ֆակտոր" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "անուն" + +msgid "content type" +msgstr "պարունակության տիպ" + +msgid "codename" +msgstr "կոդային անուն" + +msgid "permission" +msgstr "իրավունքնե" + +msgid "permissions" +msgstr "իրավունքներ" + +msgid "group" +msgstr "խումբ" + +msgid "groups" +msgstr "խմբեր" + +msgid "superuser status" +msgstr "սուպերօգտագործողի կարգավիճակ" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Ցույց է տալիս, որ օգտագործողը ունի բոլոր իրավունքները, առանց նրանց նշման։" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Խումբը, որին պատկանում է օգտագործողը։ Օգտագործողը ստանում է իր խմբին տրված " +"բոլոր իրավունքները։" + +msgid "user permissions" +msgstr "օգտագործողի իրավունքները" + +msgid "Specific permissions for this user." +msgstr "Օգտագործողի հատուկ իրավունքները։" + +msgid "username" +msgstr "օգտագործողի անուն" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Այդ անունով օգտագործող արդեն գոյություն ունի։" + +msgid "first name" +msgstr "անուն" + +msgid "last name" +msgstr "ազգանուն" + +msgid "email address" +msgstr "email հասցե" + +msgid "staff status" +msgstr "անձնակազմի կարգավիճակ" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Ցույց է տալիս, թե արդյոք օգտագործողը կարոզ է մուտք գործել ադմինիստրավորման " +"բաժին։" + +msgid "active" +msgstr "ակտիվ" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Ցույց է տալիս, թե արդյոք օգտագործողին կարելի է համարել ակտիվ։ Ապընտրեք, " +"օգտագործողին հեռացնելու փոխարեն։" + +msgid "date joined" +msgstr "միացել է" + +msgid "user" +msgstr "օգտագործող" + +msgid "users" +msgstr "օգտագործողներ" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Գաղտնաբառը շատ կարճ է։ Այն պետք է պարունակի ամենաքիչը %(min_length)d նիշ։" +msgstr[1] "" +"Գաղտնաբառը շատ կարճ է։ Այն պետք է պարունակի ամենաքիչը %(min_length)d նիշ։" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Գաղտնաբառը պետք է պարունակի ամենաքիչը %(min_length)d նիշ։" +msgstr[1] "Գաղտնաբառը պետք է պարունակի ամենաքիչը %(min_length)d նիշ։" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Գաղտնաբառը շատ նման է %(verbose_name)s֊ին։" + +msgid "Your password can't be too similar to your other personal information." +msgstr "Գաղտնաբառը չի կարող շատ նման լինել ձեր անձնական ինֆորմացիային։" + +msgid "This password is too common." +msgstr "Գաղտնաբառը շատ տարածված է։" + +msgid "Your password can't be a commonly used password." +msgstr "Գաղտնաբառը չպետք է լինի տարածված գաղտնաբառերից մեկը։" + +msgid "This password is entirely numeric." +msgstr "Գաղտնաբառը բաղկացած է միայն թվերից։" + +msgid "Your password can't be entirely numeric." +msgstr "Գաղտնաբառը չպետք է բաղկացած լինի միայն թվերից։" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Գաղտնաբառի փոփոխում %(site_name)s կայքում։" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Դուք դուրս եք եկել" + +msgid "Password reset" +msgstr "Գաղտնաբառի փոփոխում" + +msgid "Password reset sent" +msgstr "Գաղտնաբառի փոփոխման հղումն ուղարկված է" + +msgid "Enter new password" +msgstr "Մուտքագրեք նոր գաղտնաբառը" + +msgid "Password reset unsuccessful" +msgstr "Գաղտնաբառի փոփոխումը չի ավարտվել հաջողությամբ" + +msgid "Password reset complete" +msgstr "Գաղտնաբառի փոփոխումը ավարտված է" + +msgid "Password change" +msgstr "Գաղտնաբառի փոփոխում" + +msgid "Password change successful" +msgstr "Գաղտնաբառի փոփոխումը ավարտվել է հաջողությամբ" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4566c4b3ae7e7dc4a7cc536aec704faf70082257 GIT binary patch literal 7626 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 b9&4>0r~sZ-J0z#tupz2?Az7T5Wmx?Wtu)l0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..16eeda868 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,310 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 09:22+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Information personal" + +msgid "Permissions" +msgstr "Permissiones" + +msgid "Important dates" +msgstr "Datas importante" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Le objecto %(name)s con le clave primari %(key)r non existe." + +msgid "Password changed successfully." +msgstr "Le cambio del contrasigno ha succedite." + +#, python-format +msgid "Change password: %s" +msgstr "Cambia contrasigno: %s" + +msgid "Authentication and Authorization" +msgstr "Authentication e autorisation" + +msgid "password" +msgstr "contrasigno" + +msgid "last login" +msgstr "ultime session" + +msgid "No password set." +msgstr "Nulle contrasigno definite." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Le formato del contrasigno es invalide o le algorithmo de hash es incognite." + +msgid "The two password fields didn’t match." +msgstr "Le duo campos de contrasigno non es identic." + +msgid "Password" +msgstr "Contrasigno" + +msgid "Password confirmation" +msgstr "Confirma contrasigno" + +msgid "Enter the same password as before, for verification." +msgstr "Scribe le mesme contrasigno que antea, pro verification." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Le contrasignos non es immagazinate in forma de texto simple, dunque il non " +"es possibile vider le contrasigno de iste usator, ma tu pote cambiar le " +"contrasigno con iste formulario." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Per favor entra un %(username)s e contrasigno correcte. Nota que ambe campos " +"pote distinguer inter majusculas e minusculas." + +msgid "This account is inactive." +msgstr "Iste conto es inactive." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nove contrasigno" + +msgid "New password confirmation" +msgstr "Confirma nove contrasigno" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Le ancian contrasigno non es correcte. Per favor scribe lo de novo." + +msgid "Old password" +msgstr "Ancian contrasigno" + +msgid "Password (again)" +msgstr "Contrasigno (de novo)" + +msgid "algorithm" +msgstr "algorithmo" + +msgid "iterations" +msgstr "iterationes" + +msgid "salt" +msgstr "sal" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varietate" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "costo de memoria" + +msgid "time cost" +msgstr "costo de tempore" + +msgid "parallelism" +msgstr "parallelismo" + +msgid "work factor" +msgstr "factor de labor" + +msgid "checksum" +msgstr "summa de controlo" + +msgid "block size" +msgstr "" + +msgid "name" +msgstr "nomine" + +msgid "content type" +msgstr "typo de contento" + +msgid "codename" +msgstr "nomine de codice" + +msgid "permission" +msgstr "permission" + +msgid "permissions" +msgstr "permissiones" + +msgid "group" +msgstr "gruppo" + +msgid "groups" +msgstr "gruppos" + +msgid "superuser status" +msgstr "stato de superusator" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que iste usator ha tote le permissiones sin assignar los " +"explicitemente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Le gruppos al quales iste usator pertine. Un usator recipe tote le " +"permissiones concedite a cata un de su gruppos." + +msgid "user permissions" +msgstr "permissiones de usator" + +msgid "Specific permissions for this user." +msgstr "Permissiones specific pro iste usator." + +msgid "username" +msgstr "nomine de usator" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatori. 150 characteres o minus. Litteras, cifras e @/./+/-/_ solmente." + +msgid "A user with that username already exists." +msgstr "Un usator con iste nomine de usator jam existe." + +msgid "first name" +msgstr "prenomine" + +msgid "last name" +msgstr "nomine de familia" + +msgid "email address" +msgstr "adresse de e-mail" + +msgid "staff status" +msgstr "stato de personal" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si le usator pote aperir session in iste sito administrative." + +msgid "active" +msgstr "active" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si iste usator debe esser tractate como active. Dismarca isto in vice " +"de deler contos." + +msgid "date joined" +msgstr "data de inscription" + +msgid "user" +msgstr "usator" + +msgid "users" +msgstr "usatores" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Le contrasigno es troppo curte. Debe continer al minus %(min_length)d " +"character." +msgstr[1] "" +"Le contrasigno es troppo curte. Debe continer al minus %(min_length)d " +"characteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Le contrasigno debe continer al minus %(min_length)d character." +msgstr[1] "Le contrasigno debe continer al minus %(min_length)d characteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Le contrasigno es troppo simile al %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Le contrasigno non pote esser troppo similar a tu altere informationes " +"personal." + +msgid "This password is too common." +msgstr "Iste contrasigno es troppo commun." + +msgid "Your password can’t be a commonly used password." +msgstr "Le contrasigno non pote esser un contrasigno communmente usate." + +msgid "This password is entirely numeric." +msgstr "Iste contrasigno es toto numeric." + +msgid "Your password can’t be entirely numeric." +msgstr "Le contrasigno non pote esser toto numeric." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Reinitialisation del contrasigno in %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Entra un nomine de usator valide. Pote continer solmente litteras anglese, " +"numeros e le characteres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Entra un nomine de usator valide. Pote continer solmente litteras, numeros e " +"le characteres @/./+/-/_." + +msgid "Logged out" +msgstr "Session claudite" + +msgid "Password reset" +msgstr "Reinitialisation del contrasigno" + +msgid "Password reset sent" +msgstr "Reinitialisation del contrasigno inviate" + +msgid "Enter new password" +msgstr "Scribe nove contrasigno" + +msgid "Password reset unsuccessful" +msgstr "Reinitialisation de contrasigno fallite" + +msgid "Password reset complete" +msgstr "Contrasigno reinitialisate con successo" + +msgid "Password change" +msgstr "Cambio de contrasigno" + +msgid "Password change successful" +msgstr "Contrasigno cambiate con successo" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..958b2f72c7c7f83e182e5773a94ee66a7fc63cfa GIT binary patch literal 7170 zcmb`LU5q6~6~{}&MMgwHMHG=@Wo3q)duMj}T4q1oui4#kcXlVcgFr~!)V*D|yXN-o zzV^q?jtZJ+VnRaV2ShP~AsQ1O&_pBX16f~0c`zoLsPTaiqYn}j;sYikG5$_<-;Wt~ z(KU9a?!UXb>eQ)o{^!)`dEx3yA5~mSv=7j}afwo0xqk~kT))_))DG}@a08Pr2)rFU3r>LF1Fryo z0=^G?4tyv0V%`5Y5K-!1b^m2d5;@m`?*}Kr4}u54_kb<%O7JZBUhoUx4d6FH*~dBX zI`B8(+rXE>w}bx#KMr0_=a;|;JOsW9ehA!$k_NP(?C0m;&ERXG=zSAHHiLUWv9AH2 z03QVRf!CwdcJMTK3;1R52>2}cX>b#p!u0BMAX`-rfwJ#MYJ41IDfJyt^!_1;Xmt)m zb@fY7{P25Ftt3-VBP|*}8uxDB});qQ^0i zKXo5JB5wth_eI^m28x`AK+)?fAXHJ0)%YYR>wgzqd6QB<0_S+vkVg1*KPYy66hvk9 zeehoJ9Jn967H8fM-VciWXTS%*XF=iN&UaV-{ua1L-h(3N@8Di=6J!xP9R_8e$3fxG zef(Sxrgi_rpveCkh^y2Sb^lYK==Wpr8t~U3TTp)iuL55Mg_l?GQh2fzoB~gQ!jA_) zvD?={8UJlC0-pxI3f=&D4}#BtH-WE#8F=HhN^Jul0Y%T}K$cQ}0vq6~pva#@xqHBQ za2NPEcq{k^Q1rNx;F$+^fP29QLD}ayQ1tp4DE9eP{ruY+Uj)StFM+~?e}H1YO$3$r z|Ee0Vsqs2c{H{TnHwg-F?*wK3JSg){*8TT@qK5@Vk8X`6DC0f@3U59SioL&BKR*cy z-<|@YhA-tZ3k^LZ9ff@_?#tqPdEjoeC`sv-9bA< zlS}wXCDP}pBL@++}-oVGyQLOVe_LR+MXf8`RtNsgY82d)p(Zl^&lA3K2B zDL-;;nM_R2PUSjnt=M*;rngM;JC*4mwYg5xLff-0FPdtfE_0hz z0Yt_JY&YCn3#e^z4Rh-d9`9>a+Zj7-)23R=ZMU`7HKKE^<&p|MZBgFh5(m@%(uPfxWLuO z(wE7LN@Uw4I!;6Fk|L#-l}ylciOyYNFEDeUO&+CX9O#zS1-mY6z{1+J3wOpg_1#Hs zW3j52>5{y_Fgoq%fbK$cGwpU-CIwcS?->`X`J_NGqtBSw1w)fI^|B~MXK8iMtm$@| z6b1#;gq_YOVeIlqBa+Gav`)%i%ioBp_s%qDw$3zWPV07LGBo22tNjn_T)h0mt`5Cg zFDW+9g(U-Ti@jR5lV)~W^Q+I;%ynw6G}S_{pJs(g3LOX+)Iw5OW;mNEJ;=wzGU+Di zYNFvsUcU*Ft^bC1Wq0-s+MY|4sZ0N z3Gv6&r~_le>5b1iFWYUK=bbX%_$nBC7q2zPUXSZFSXpNlwMK*dBU|Y8@zU6`RXpF@xwFH6E#Kc5PCsj+aHM!LY@VsrOStf+vGAY@iPAx*i zf$f_5cv=uFk}+B-xu)Z69ORzW1W_Ad4b(wdi6C{-j2J{*W!9&lynrsjw9X}3Eu92M zlIm3=g89lf%q83nsy|ahuylYmRhYa z+&e22DduxM7aJ7u#>JCFWGl@F+^HrNt78FDyD)G;g1HNPS+pY=hr~L;iHBTL=f&#H z_`1*so07{&UBrL8o;*H8RD<8WG`YY_GI3Tk^#bdcc`;0p@JuKwlq98}j%^Ya(Nr+< z-2Yh|$@RXp%yc@IFkoh0g$T}YNgX86K(7lQhX*B%)DnifhpgVN#D}SEfT;+uv9PKZ zJ>Qhq+t%xMzM&i3PoS_5i7;X5DCp}XxlzrFHT!xsE^anfuE?a!AkC|GWZT`m?5TDd zSV=wHK!47TVy$nL93Xlnb%_m>mBW@pJ|I8linI?u{0tv%stP(KCy63!X8ugbRV*~3 zPH;(e>u2)2SmoB}^zZyx)eTQFH-sI|x$($|L6hSMck)ojL>JGL_GqseZQsXrig2ucXoJeXM#C~&n`|S4F#_aaS>>YY`+uUup zZk^?tIEG~!%Ve88Hmo$K4_Rz-iWbNOc{1Rwm6<>JA{TCCs>BW@=(_VR3%6v2D%Si364Y z8_W2AP8arUG1HF;u$?~oIY4*cy?m&#V>C|I>e#F?PmBhf1ao>v%N0XS=d=qZmf{iz zHx6+k4Y7a9 zrl=7Ta!DALi5W~rlo@qO8E54*%gew-P}%rGTY|l7a!0w8=o7fYNLf#tzUd-hxEg$RvFkD#g*XRM&UAAr!%fl`1+utAT?$MVqC~cB_)f}CN)tEL z8wh5G2y9}#`@y+$a zz{rm<-7-nmuuxTGFNzAH{Cbo6%98qo)6c8IIg*53s%#O2>3G5%$kAQ4+?9eSFtO?B zmLXFZ2popkdz$k;?BX^S7!Dj(;q33fT)kSVmBuz2*I*#BUS|3~ujAd0l36)gyXspL zo>7e(+=yd^B9=HUdu(!=f*OX@^|)|~gVLK{KE0q*5-N!S&euvo6DeNFIpQyvTP-TA%=z-Fb*LXM_?*JB zZ<1-ff+}^V$f)uM=cRlSR4a=hpZX9yP2Mg{-$@lMLDgpzHKKT@9xdT1qa~u(RqnF= zGN#-`OjW$!V^&PH}%+N__qZ{=3FX;Ak-8bn6lo6f_~u80sAB$=zT(( z+H!azx$UO@W5E|tG{iinIp#@`UZJ_yzs&TsIdE#!SUD4nHHw!UzdwBUEBRxF1yA8k%? z>~rMCc(qfIs^!4L4ZeVudRNL5qMDMq>{mads+rly;|yU#rW?7en!pJoWDix#8Qka# zXy;!k3O$Jzsi1AFDpiIR2=#bfi}0qZo27z~@>yzVe?O?6YuT%8v{Zx090?ePWTnw? d!0@JPO#&-2QYxiQRZXi7()dE}+HA$Be*=z9AYuRj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..6af7984b7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,303 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015-2016,2018,2020 +# Jannis Leidel , 2011 +# oon arfiandwi , 2016 +# rodin , 2011,2013 +# rodin , 2013-2016 +# sage , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-06 01:43+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "Informasi pribadi" + +msgid "Permissions" +msgstr "Hak akses" + +msgid "Important dates" +msgstr "Tanggal penting" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objek %(name)s dengan primary key %(key)r tidak ditemukan." + +msgid "Password changed successfully." +msgstr "Sandi berhasil diubah." + +#, python-format +msgid "Change password: %s" +msgstr "Ganti sandi: %s" + +msgid "Authentication and Authorization" +msgstr "Autentikasi dan Otorisasi" + +msgid "password" +msgstr "sandi" + +msgid "last login" +msgstr "masuk terakhir" + +msgid "No password set." +msgstr "Belum ada sandi yang disetel." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Format sandi tidak valid atau algoritma hash yang tidak dikenal." + +msgid "The two password fields didn’t match." +msgstr "Dua bidang sandi tidak cocok." + +msgid "Password" +msgstr "Sandi" + +msgid "Password confirmation" +msgstr "Konfirmasi sandi" + +msgid "Enter the same password as before, for verification." +msgstr "Masukkan sandi yang sama seperti sebelumnya, untuk verifikasi." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Sandi mentah tidak disimpan, jadi tidak ada cara melihat sandi pengguna ini, " +"tetapi anda dapat merubah sandi menggunakan formulir ini." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Masukkan nama pengguna %(username)s dan sandi yang benar. Huruf besar/kecil " +"pada bidang ini berpengaruh." + +msgid "This account is inactive." +msgstr "Akun ini tidak aktif." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Sandi baru" + +msgid "New password confirmation" +msgstr "Konfirmasi sandi baru" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Sandi lama Anda yang dimasukkan salah. Masukkan sekali lagi." + +msgid "Old password" +msgstr "Sandi lama" + +msgid "Password (again)" +msgstr "Sandi (ulangi)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iterasi" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "keanekaragaman" + +msgid "version" +msgstr "versi" + +msgid "memory cost" +msgstr "biaya memori" + +msgid "time cost" +msgstr "biaya waktu" + +msgid "parallelism" +msgstr "sifat paralel" + +msgid "work factor" +msgstr "faktor kerja" + +msgid "checksum" +msgstr "ceksum" + +msgid "name" +msgstr "nama" + +msgid "content type" +msgstr "jenis isi" + +msgid "codename" +msgstr "namasandi" + +msgid "permission" +msgstr "hak akses" + +msgid "permissions" +msgstr "hak akses" + +msgid "group" +msgstr "grup" + +msgid "groups" +msgstr "grup" + +msgid "superuser status" +msgstr "status superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Menentukan apakah pengguna memiliki semua hak akses tanpa perlu diberikan " +"secara manual." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grup tempat pengguna ini dikelompokkan. Pengguna akan mendapatkan semua hak " +"akses yang diberikan pada grup mereka." + +msgid "user permissions" +msgstr "hak akses pengguna" + +msgid "Specific permissions for this user." +msgstr "Hak akses khusus untuk pengguna ini." + +msgid "username" +msgstr "nama pengguna" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Wajib. 150 karakter atau sedikit. Hanya huruf, angka, dan @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Seorang pengguna dengan nama pengguna tersebut sudah ada." + +msgid "first name" +msgstr "nama depan" + +msgid "last name" +msgstr "nama belakang" + +msgid "email address" +msgstr "alamat email" + +msgid "staff status" +msgstr "status staf" + +msgid "Designates whether the user can log into this admin site." +msgstr "Menentukan apakah pengguna berhak masuk ke situs administrasi ini." + +msgid "active" +msgstr "aktif" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Menentukan apakah pengguna dianggap aktif. Hapus pilihan ini tanpa perlu " +"menghapus akunnya." + +msgid "date joined" +msgstr "tanggal daftar" + +msgid "user" +msgstr "pengguna" + +msgid "users" +msgstr "pengguna" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Kata sandi terlalu singkat. Kata sandi harus memuat setidaknya " +"%(min_length)d karakter." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Kata sandi Anda harus memuat setidaknya %(min_length)d karakter." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Kata sandi terlalu mirip dengan %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Sandi anda tidak dapat terlalu mirip terhadap informasi pribadi anda." + +msgid "This password is too common." +msgstr "Kata sandi ini terlalu umum." + +msgid "Your password can’t be a commonly used password." +msgstr "Sandi anda tidak dapat berupa sandi umum digunakan." + +msgid "This password is entirely numeric." +msgstr "Kata sandi ini seluruhnya terdiri dari angka." + +msgid "Your password can’t be entirely numeric." +msgstr "Sandi anda tidak bisa sepenuhnya numerik." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Penyetelan ulang sandi di %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Masukkan nama pengguna valid. Nilai ini mungkin mengandung hanya karakter " +"dalam bahasa Inggris, angka dan karakter @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Masukkan nama pengguna valid. Nilai ini hanya boleh mengandung karakter, " +"angka, dan karakter @/./+/-/_." + +msgid "Logged out" +msgstr "Keluar" + +msgid "Password reset" +msgstr "Setel ulang sandi" + +msgid "Password reset sent" +msgstr "Penyetelan ulang kata sandi telah dikirim" + +msgid "Enter new password" +msgstr "Masukkan sandi baru" + +msgid "Password reset unsuccessful" +msgstr "Penyetelan ulang sandi gagal" + +msgid "Password reset complete" +msgstr "Penyetelan ulang sandi selesai" + +msgid "Password change" +msgstr "Ubah sandi" + +msgid "Password change successful" +msgstr "Pengubahan sandi berhasil" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e0a1631fa8862427d53ed2fa7dc778e09ce3423 GIT binary patch literal 464 zcmZWk!A=4(6vXIhkDfg|6AuvVwhPfLMT`+4!9XNr^eDLi_~lkk#5i$yntwMi5M>+tBd$s)$kNM`awRXhLt zBF5XS$q>Ob!DKWU9NR}B3;ITTsWH`OiS@kP zdRi7j=`N%TVV(57*JMcIqp$jJE-e}8)MQHM9O8H74>36?6HJS>6$Kd@yK)?Kxs$Hf R>calot82LILDc95wO_eihvWbN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.po new file mode 100644 index 000000000..031f2c48a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,226 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 10:30+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57229a4dc27820fc3a244c6e23bfce2991a93e30 GIT binary patch literal 7509 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 pD%-rF0;@K1&rVc(nw*o, 2011-2012 +# Jannis Leidel , 2011 +# Logi Ragnarsson , 2012 +# Thordur Sigurdsson , 2016-2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-20 05:04+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Personal info" +msgstr "Persónuupplýsingar" + +msgid "Permissions" +msgstr "Réttindi" + +msgid "Important dates" +msgstr "Mikilvægar dagsetningar" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s hlutur með lykilinn %(key)r er ekki til." + +msgid "Password changed successfully." +msgstr "Breyting á lykilorði tókst." + +#, python-format +msgid "Change password: %s" +msgstr "Breyta lykilorði: %s" + +msgid "Authentication and Authorization" +msgstr "Auðkenning og réttindi" + +msgid "password" +msgstr "lykilorð" + +msgid "last login" +msgstr "síðasta innskráning" + +msgid "No password set." +msgstr "Ekkert lykilorð skráð." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ógilt snið á lykilorði eða óþekkt hökkunaralgrím." + +msgid "The two password fields didn’t match." +msgstr "Lykilorðin tvö pössuðu ekki saman." + +msgid "Password" +msgstr "Lykilorð" + +msgid "Password confirmation" +msgstr "Staðfesting lykilorðs" + +msgid "Enter the same password as before, for verification." +msgstr "Settu inn sama lykilorð og áður til staðfestingar." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Lykilorð eru aðeins geymd dulkóðuð, svo ekki er hægt að sjá lykilorð þessa " +"notanda, en þú getur breytt lykilorðinu með þessu eyðublaði." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Vinsamlegast sláðu inn rétt %(username)s og lykilorð. Takið eftir að í báðum " +"reitum skipta há- og lágstafir máli." + +msgid "This account is inactive." +msgstr "Þessi reikningur er óvirkur." + +msgid "Email" +msgstr "Netfang" + +msgid "New password" +msgstr "Nýtt lykilorð" + +msgid "New password confirmation" +msgstr "Nýtt lykilorð (endurtekið)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Gamla lykilorðið var vitlaust. Vinsamlegast reyndu aftur." + +msgid "Old password" +msgstr "Gamalt lykilorð" + +msgid "Password (again)" +msgstr "Lykilorð (aftur)" + +msgid "algorithm" +msgstr "algrím" + +msgid "iterations" +msgstr "ítranir" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hashtafla" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "útgáfa" + +msgid "memory cost" +msgstr "minnisnotkun" + +msgid "time cost" +msgstr "tímalengd" + +msgid "parallelism" +msgstr "samhliða vinnsla" + +msgid "work factor" +msgstr "vinnustuðull" + +msgid "checksum" +msgstr "varsumma" + +msgid "name" +msgstr "nafn" + +msgid "content type" +msgstr "efnistag" + +msgid "codename" +msgstr "vinnuheiti" + +msgid "permission" +msgstr "réttindi" + +msgid "permissions" +msgstr "réttindi" + +msgid "group" +msgstr "hópur" + +msgid "groups" +msgstr "hópar" + +msgid "superuser status" +msgstr "staða ofurnotanda" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Til marks um að notandinn hafi öll réttindi án þess að taka þau sérstaklega " +"fram." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Hópar sem þessi notandi tilheyrir. Notandi fær allan aðgangsrétt sem fylgir " +"hverjum hóp sem hann/hún er skráð(ur) í." + +msgid "user permissions" +msgstr "réttindi" + +msgid "Specific permissions for this user." +msgstr "Sértæk réttindi fyrir þennan notanda." + +msgid "username" +msgstr "notandanafn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Nauðsynlegt að fylla út. 150 stafir eða færri. Bókstafir (ekki broddstafir), " +"tölustafir og @/./+/-/_ aðeins leyft." + +msgid "A user with that username already exists." +msgstr "Notandi með þetta notendanafn er nú þegar til." + +msgid "first name" +msgstr "skírnarnafn" + +msgid "last name" +msgstr "eftirnafn" + +msgid "email address" +msgstr "netfang" + +msgid "staff status" +msgstr "staða starfsmanns" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Segir til um hvort notandinn getur skráð sig inn á þetta stjórnunarsvæði." + +msgid "active" +msgstr "virkur" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Til marks um að notandinn sé virkur. Taktu hakið úr þessum möguleika til að " +"eyða aðgangi." + +msgid "date joined" +msgstr "skráning dags." + +msgid "user" +msgstr "notandi" + +msgid "users" +msgstr "notendur" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Þetta lykilorð er of stutt. Það verður að vera minnst %(min_length)d stafur." +msgstr[1] "" +"Þetta lykilorð er of stutt. Það verður að vera minnst %(min_length)d stafir." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Lykilorðið verður að vera minnst %(min_length)d stafur." +msgstr[1] "Lykilorðið verður að vera minnst %(min_length)d stafir." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Lykilorðið er of líkt %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Lykilorðið má ekki vera of líkt þínum persónuupplýsingum." + +msgid "This password is too common." +msgstr "Þetta lykilorð er of algengt." + +msgid "Your password can’t be a commonly used password." +msgstr "Lykilorðið má ekki vera algengt lykilorð." + +msgid "This password is entirely numeric." +msgstr "Þetta lykilorð er eingöngu tölustafir." + +msgid "Your password can’t be entirely numeric." +msgstr "Lykilorðið má ekki vera eingöngu tölustafir." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Lykilorð endursett á %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Sláðu inn gilt notandanafn. Þessi reitur má aðeins innihalda bókstafi (ekki " +"broddstafi), tölustafi og @/./+/-/_ táknin" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Sláðu inn gilt notandanafn. Þessi reitur má aðeins innihalda bókstafi, " +"tölustafi og @/./+/-/_ táknin" + +msgid "Logged out" +msgstr "Útskráð(ur)" + +msgid "Password reset" +msgstr "Lykilorð endursett" + +msgid "Password reset sent" +msgstr "Endurstilling lykilorðs send" + +msgid "Enter new password" +msgstr "Sláðu inn nýtt lykilorð" + +msgid "Password reset unsuccessful" +msgstr "Endurstilling á lykilorði mistókst" + +msgid "Password reset complete" +msgstr "Endurstilling lykilorðs tókst" + +msgid "Password change" +msgstr "Breyta lykilorði" + +msgid "Password change successful" +msgstr "Breyting á lykilorði tókst" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..53cf4f24c9f1d946bf262076dd2873186e1532ec GIT binary patch literal 7608 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 Pbo1O}_3_3`op1gFllIjM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..8319aba03 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,317 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Davide Targa , 2021 +# Federico Capoano , 2011 +# Flavio Curella , 2013-2014 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# palmux , 2015,2019 +# Mattia Procopio , 2015 +# Stefano Brentegani , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-12 12:08+0000\n" +"Last-Translator: Davide Targa \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informazioni personali" + +msgid "Permissions" +msgstr "Permessi" + +msgid "Important dates" +msgstr "Date importanti" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "L'oggetto %(name)s con chiave primaria %(key)r non esiste." + +msgid "Password changed successfully." +msgstr "La password è stata modificata correttamente." + +#, python-format +msgid "Change password: %s" +msgstr "Modifica la password: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticazione e Autorizzazione " + +msgid "password" +msgstr "password" + +msgid "last login" +msgstr "ultimo accesso" + +msgid "No password set." +msgstr "Nessuna password impostata." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato di password non valido o algoritmo di hash sconosciuto." + +msgid "The two password fields didn’t match." +msgstr "I due campi password non corrispondono." + +msgid "Password" +msgstr "Password" + +msgid "Password confirmation" +msgstr "Conferma password" + +msgid "Enter the same password as before, for verification." +msgstr "Inserisci la stessa password inserita sopra, come verifica." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Le password grezze non vengono salvate, quindi non è possibile visualizzare " +"la password di questo utente, ma è possibile modificarla utilizzando questo form." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Inserisci %(username)s e password corretti. In entrambi i campi le maiuscole " +"potrebbero essere significative." + +msgid "This account is inactive." +msgstr "Questo account non è attivo." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Nuova password" + +msgid "New password confirmation" +msgstr "Conferma nuova password" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La password attuale non è stata inserita correttamente. Riprova per favore." + +msgid "Old password" +msgstr "Password attuale" + +msgid "Password (again)" +msgstr "Password (di nuovo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iterazioni" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varietà" + +msgid "version" +msgstr "versione" + +msgid "memory cost" +msgstr "impegno di memoria" + +msgid "time cost" +msgstr "impiego di tempo" + +msgid "parallelism" +msgstr "parallelismo" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "block size" +msgstr "dimensione del blocco" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "content type" + +msgid "codename" +msgstr "nome in codice" + +msgid "permission" +msgstr "permesso" + +msgid "permissions" +msgstr "permessi" + +msgid "group" +msgstr "gruppo" + +msgid "groups" +msgstr "gruppi" + +msgid "superuser status" +msgstr "privilegi di superutente" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Attribuisce all'utente tutti i privilegi, senza che sia necessario " +"assegnarli esplicitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"I gruppi a cui appartiene l'utente. L'utente eredita tutti i permessi " +"assegnati a ciascuno dei suoi gruppi." + +msgid "user permissions" +msgstr "privilegi utente" + +msgid "Specific permissions for this user." +msgstr "Permessi specifici per questo utente." + +msgid "username" +msgstr "nome utente" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obbligatorio. 150 caratteri o meno.Solo lettere, cifre e @/./+/-/_" + +msgid "A user with that username already exists." +msgstr "Un utente con questo nome è già presente." + +msgid "first name" +msgstr "nome" + +msgid "last name" +msgstr "cognome" + +msgid "email address" +msgstr "indirizzo email" + +msgid "staff status" +msgstr "privilegi di staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Stabilisce se l'utente può accedere a questo sito di amministrazione." + +msgid "active" +msgstr "attivo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Stabilisce se l'utente debba essere considerato attivo. Deseleziona qui, " +"piuttosto che cancellare gli account." + +msgid "date joined" +msgstr "iscritto in data" + +msgid "user" +msgstr "utente" + +msgid "users" +msgstr "utenti" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Questa password è troppo corta. Deve contenere almeno %(min_length)d " +"carattere." +msgstr[1] "" +"Questa password è troppo corta. Deve contenere almeno %(min_length)d " +"caratteri." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "La tua password deve contenere almeno %(min_length)d carattere." +msgstr[1] "La tua password deve contenere almeno %(min_length)d caratteri." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La password è troppo simile a %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"La tua password non può essere troppo simile alle altre tue informazioni " +"personali." + +msgid "This password is too common." +msgstr "Questa password è troppo comune." + +msgid "Your password can’t be a commonly used password." +msgstr "La tua password non può essere una password comunemente usata." + +msgid "This password is entirely numeric." +msgstr "Questa password è interamente numerica." + +msgid "Your password can’t be entirely numeric." +msgstr "La tua password non può essere interamente numerica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Password reset su %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Immetti un nome utente valido. Questo campo può contenere solo lettere " +"dell'alfabeto inglese, numeri e caratteri @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Immetti un nome utente valido. Questo campo può contenere solo lettere " +"dell'alfabeto inglese, numeri e caratteri @/./+/-/_ ." + +msgid "Logged out" +msgstr "Accesso annullato" + +msgid "Password reset" +msgstr "Reimposta la password" + +msgid "Password reset sent" +msgstr "Istruzioni per il recupero della password inviate" + +msgid "Enter new password" +msgstr "Inserisci la nuova password" + +msgid "Password reset unsuccessful" +msgstr "Password non reimpostata" + +msgid "Password reset complete" +msgstr "Password reimpostata" + +msgid "Password change" +msgstr "Modifica password" + +msgid "Password change successful" +msgstr "Password modificata correttamente" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57820692e8fa587e86fd411af1465589b495cfad GIT binary patch literal 8085 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..85b2d4240 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,302 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# arupakan125 , 2020 +# Masashi SHIBATA , 2017 +# Nikita K , 2019 +# Shinya Okano , 2013-2016,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-13 11:35+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "個人情報" + +msgid "Permissions" +msgstr "パーミッション" + +msgid "Important dates" +msgstr "重要な日程" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "主キーが %(key)r である %(name)s オブジェクトは存在しません。" + +msgid "Password changed successfully." +msgstr "パスワードを変更しました" + +#, python-format +msgid "Change password: %s" +msgstr "パスワードの変更: %s" + +msgid "Authentication and Authorization" +msgstr "認証と認可" + +msgid "password" +msgstr "パスワード" + +msgid "last login" +msgstr "最終ログイン" + +msgid "No password set." +msgstr "パスワードは設定されませんでした。" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "無効なパスワードか不明なハッシュアルゴリズムです。" + +msgid "The two password fields didn’t match." +msgstr "確認用パスワードが一致しません。" + +msgid "Password" +msgstr "パスワード" + +msgid "Password confirmation" +msgstr "パスワード(確認用)" + +msgid "Enter the same password as before, for verification." +msgstr "確認のため、再度パスワードを入力してください。" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"生のパスワードは格納されていないため、このユーザのパスワードを確認する方法は" +"ありません。しかしこのフォームを使用してパスワードを変更で" +"きます。" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"正しい%(username)sとパスワードを入力してください。どちらのフィールドも大文字" +"と小文字は区別されます。" + +msgid "This account is inactive." +msgstr "アカウントが無効です。" + +msgid "Email" +msgstr "メールアドレス" + +msgid "New password" +msgstr "新しいパスワード" + +msgid "New password confirmation" +msgstr "新しいパスワード(確認用)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "元のパスワードが間違っています。もう一度入力してください。" + +msgid "Old password" +msgstr "元のパスワード" + +msgid "Password (again)" +msgstr "パスワード(確認用)" + +msgid "algorithm" +msgstr "アルゴリズム" + +msgid "iterations" +msgstr "イテレーション" + +msgid "salt" +msgstr "ソルト" + +msgid "hash" +msgstr "ハッシュ" + +msgid "variety" +msgstr "多様性" + +msgid "version" +msgstr "バージョン" + +msgid "memory cost" +msgstr "メモリーコスト" + +msgid "time cost" +msgstr "時間コスト" + +msgid "parallelism" +msgstr "並行性" + +msgid "work factor" +msgstr "ワークファクター" + +msgid "checksum" +msgstr "チェックサム" + +msgid "block size" +msgstr "ブロックサイズ" + +msgid "name" +msgstr "名前" + +msgid "content type" +msgstr "コンテンツタイプ" + +msgid "codename" +msgstr "コード名" + +msgid "permission" +msgstr "パーミッション" + +msgid "permissions" +msgstr "パーミッション" + +msgid "group" +msgstr "グループ" + +msgid "groups" +msgstr "グループ" + +msgid "superuser status" +msgstr "スーパーユーザー権限" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "全ての権限を持っているとみなされます。" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"このユーザーが所属するグループ。ユーザーはそれぞれのグループに付与されたすべ" +"ての権限を持ちます。" + +msgid "user permissions" +msgstr "ユーザーパーミッション" + +msgid "Specific permissions for this user." +msgstr "このユーザーの持つ権限です。" + +msgid "username" +msgstr "ユーザー名" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"この項目は必須です。半角アルファベット、半角数字、@/./+/-/_ で150文字以下にし" +"てください。" + +msgid "A user with that username already exists." +msgstr "同じユーザー名が既に登録済みです。" + +msgid "first name" +msgstr "名" + +msgid "last name" +msgstr "姓" + +msgid "email address" +msgstr "メールアドレス" + +msgid "staff status" +msgstr "スタッフ権限" + +msgid "Designates whether the user can log into this admin site." +msgstr "ユーザーが管理サイトにログイン可能かどうかを示します。" + +msgid "active" +msgstr "有効" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"ユーザーがアクティブかどうかを示します。アカウントを削除する代わりに選択を解" +"除してください。" + +msgid "date joined" +msgstr "登録日" + +msgid "user" +msgstr "ユーザー" + +msgid "users" +msgstr "ユーザー" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "このパスワードは短すぎます。最低 %(min_length)d 文字以上必要です。" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "パスワードは最低 %(min_length)d 文字以上必要です。" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "このパスワードは %(verbose_name)s と似すぎています。" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "あなたの他の個人情報と似ているパスワードにはできません。" + +msgid "This password is too common." +msgstr "このパスワードは一般的すぎます。" + +msgid "Your password can’t be a commonly used password." +msgstr "よく使われるパスワードにはできません。" + +msgid "This password is entirely numeric." +msgstr "このパスワードは数字しか使われていません。" + +msgid "Your password can’t be entirely numeric." +msgstr "数字だけのパスワードにはできません。" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s のパスワードリセット" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"有効なユーザー名を入力してください。半角英数、 @/./+/-/_ を使用できます。" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"有効なユーザー名を入力してください。半角英数、 @/./+/-/_ を使用できます。" + +msgid "Logged out" +msgstr "ログアウト" + +msgid "Password reset" +msgstr "パスワードをリセット" + +msgid "Password reset sent" +msgstr "パスワードリセットを送信しました" + +msgid "Enter new password" +msgstr "新しいパスワードを入力してください" + +msgid "Password reset unsuccessful" +msgstr "パスワードのリセットに失敗しました" + +msgid "Password reset complete" +msgstr "パスワードがリセットされました" + +msgid "Password change" +msgstr "パスワードの変更" + +msgid "Password change successful" +msgstr "パスワードを変更しました" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ebe02aece32dcd5eb857575e21ec5283a6998b11 GIT binary patch literal 10625 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 E0<$ZykN^Mx literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..347ed6603 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,300 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# Jannis Leidel , 2011 +# Tornike Beradze , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2018-02-07 12:11+0000\n" +"Last-Translator: Tornike Beradze \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Personal info" +msgstr "პირადი ინფორმაცია" + +msgid "Permissions" +msgstr "უფლებები" + +msgid "Important dates" +msgstr "მნიშვნელოვანი თარიღები" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s ობიექტი პირველადი გასაღებით %(key)r არ არსებობს." + +msgid "Password changed successfully." +msgstr "პაროლი წარმატებით შეიცვალა." + +#, python-format +msgid "Change password: %s" +msgstr "შევცვალოთ პაროლი: %s" + +msgid "Authentication and Authorization" +msgstr "იდენტიფიკაცია და ავტორიზაცია" + +msgid "password" +msgstr "პაროლი" + +msgid "last login" +msgstr "ბოლო შესვლა" + +msgid "No password set." +msgstr "არ არის დაყენებული პაროლი." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "არასწორი პაროლის ფორმატი ან უცნობი ჰეშირების ალგორითმი." + +msgid "The two password fields didn't match." +msgstr "პაროლის ორი ველი ერთმანეთს არ ემთხვევა." + +msgid "Password" +msgstr "პაროლი" + +msgid "Password confirmation" +msgstr "პაროლის დამოწმება" + +msgid "Enter the same password as before, for verification." +msgstr "გაიმეორეთ იგივე პაროლი ვერიფიკაციისთვის." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"მომხმარებლის პაროლი პირდაპ არ ინახება ბაზაში, ამიტომ მისი ნახვა შეუძლებელია, " +"მაგრამ შეგიძლიათ შეცვალოთ ამ ფორმით." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"გთხოვთ, შეიყვანოთ სწორი %(username)s და პაროლი. იქონიეთ მხედველობაში, რომ " +"ორივე ველი ითვალისწინებს მთავრულს." + +msgid "This account is inactive." +msgstr "თქვენი ანგარიში არააქტიურია." + +msgid "Email" +msgstr "ელ. ფოსტა" + +msgid "New password" +msgstr "ახალი პაროლი" + +msgid "New password confirmation" +msgstr "ახალი პაროლის დამოწმება" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "თქვენი ძველი პაროლი შეყვანილია არასწორად. გთხოვთ, შეიყვანოთ ხელახლა." + +msgid "Old password" +msgstr "ძველი პაროლი" + +msgid "Password (again)" +msgstr "პაროლი (განმეორებით)" + +msgid "algorithm" +msgstr "ალგორითმი" + +msgid "iterations" +msgstr "იტერაციები" + +msgid "salt" +msgstr "მარილი" + +msgid "hash" +msgstr "ჰეში" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "ვერსია" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "პარალელიზმი" + +msgid "work factor" +msgstr "სამუშაო ფაქტორი" + +msgid "checksum" +msgstr "საკონტროლო ჯამი" + +msgid "name" +msgstr "სახელი" + +msgid "content type" +msgstr "კონტენტის ტიპი" + +msgid "codename" +msgstr "კოდური სახელი" + +msgid "permission" +msgstr "უფლება" + +msgid "permissions" +msgstr "უფლებები" + +msgid "group" +msgstr "ჯგუფი" + +msgid "groups" +msgstr "ჯგუფები" + +msgid "superuser status" +msgstr "სუპერმომხმარებლის სტატუსი" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "განსაზღვრავს, რომ ამ მომხმარებელს აქვს ყველა უფლება." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"ჯგუფები, რომლებსაც მიეკუთვნება ეს მომხმარებელი. მომხმარებელი მიიღებს ყველა " +"უფლებას, რომელიც მინიჭებული აქვს მის თითოეულ ჯგუფს." + +msgid "user permissions" +msgstr "მომხმარებლის უფლებები" + +msgid "Specific permissions for this user." +msgstr "სპეციფიური უფლებები ამ მომხმარებლისთვის." + +msgid "username" +msgstr "მომხმარებლის სახელი" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"აუცილებელი. 150 სიმბოლ ან ნაკლები. მხოლოდ ასოები, ციფრები ან @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "მომხმარებელი ამ სახელით უკვე არსებობს." + +msgid "first name" +msgstr "სახელი" + +msgid "last name" +msgstr "გვარი" + +msgid "email address" +msgstr "ელ. ფოსტის მისამართი" + +msgid "staff status" +msgstr "თანამშრომლობის სტატუსი" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"განსაზღვრავს, აქვს თუ არა მომხმარებელს ადმინისტრირების საიტზე შესვლის უფლება." + +msgid "active" +msgstr "აქტიურია" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"განსაზღვრავს, რომ მომხმარებელი გააქტიურებულია. მომხმარებლის წაშლის მაგივრად " +"გადანიშნეთ ეს დროშა." + +msgid "date joined" +msgstr "გაწევრიანების თარიღი" + +msgid "user" +msgstr "მომხმარებელი" + +msgid "users" +msgstr "მომხმარებლები" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)dსიმბოლოს უნდა შეიცავდეს." +msgstr[1] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)dსიმბოლოს უნდა შეიცავდეს." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)d სიმბოლოს უნდა შეიცავდეს." +msgstr[1] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)d სიმბოლოს უნდა შეიცავდეს." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "პაროლი ძალიან გავს %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "პაროლი ძალიან გავს თქვენს პერსონალურ ინფორმაციას." + +msgid "This password is too common." +msgstr "ეს პაროლი ხშირად გამოიყენება." + +msgid "Your password can't be a commonly used password." +msgstr "თქვენი პაროლი არ უნდა იყოს ხშირად გამოყენებადი." + +msgid "This password is entirely numeric." +msgstr "პაროლი მხოლოდ ციფრებისგან შედგება." + +msgid "Your password can't be entirely numeric." +msgstr "თქვენი პაროლი არ შეიძლება შეიცავდეს მხოლოდ ციფრებს." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "პაროლის თავიდან დაყენება %(site_name)s-ზე" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "გამოსული ხართ" + +msgid "Password reset" +msgstr "პაროლის აღდგენა" + +msgid "Password reset sent" +msgstr "პაროლის აღდგენა გაგზავნილია" + +msgid "Enter new password" +msgstr "შეიყვანეთ ახალი პაროლი" + +msgid "Password reset unsuccessful" +msgstr "პაროლის აღდგენა წარუმატებლად დასრულდა" + +msgid "Password reset complete" +msgstr "პაროლის აღდგენა დასრულებულია" + +msgid "Password change" +msgstr "პაროლის შეცვლა" + +msgid "Password change successful" +msgstr "პაროლი წარმატებით შეიცვალა" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33333095ea6485b1794f810d98192de22644017d GIT binary patch literal 2982 zcmZ{l%WoS+9LJ|n9yO1a0tL#WQ|Ke1TE_{cElz`)rYVFrG-{nnJ^t(+uP5G}b#`Xs zIN~Ax04fy;E)|EWLV^Qu;m}@tDV4bNfVd%rhr|tW03^hL?{9aVm=Z>s{p`&C=J%SP zfBt^^<_`tN0nBGG-6kQ%!Ef%u1LNA=LJWh~!AHR#!8!0xP=T*+7UCZ83vfI56}T0= z36{X`zz4w}z^A}pi}e;9x*zKu;5Kj<$mc5Hh%A z>!%>caRcPMehu<{eG76veg--I-$0i817tmagREyWggE~@K$hDB;*%H#5vn){vitu7eUr{1w>l2T)YSt<%_r6t_1gDvMtW*FlK+SAFPAN9?boi zoRi&{>=WBNfXM@9#8CE@KRDLsiZ$O4-&KF$Cn9zhi|4^7G1+I%bARyN;7YO_?*jQw z9>d&$$?@{w`sbW;UideVjY*kWmB_AkE$Le1vZbL&NeUB1eov}pZJjNPsTP?)$qrfD zjT65r_gZm6SsfU1%I1e%OWRywi!3yRvZInnTdQMZGb3^8ps^F`hIV03LKzfj6X3jx z%7Y5KErq=VANo3ND^5dS)|GT{%_$$pB{iI0Qe`=BtO`}bi{TcAcG zP7Q}L9gz;jv~f^xRCg^VF%xy-#F25*=b*&tI0#?{PK!4OZR*-l;9l6g;*Qq3&kmw#hBu+c|(~6L=9mat+`D-STJ=SuzUNB<))e4(pm6fV>jdv+kHKQg zHZslp*@`7R_YW1hKdd!J{E9h%ed@Uanb}S1mw{qkF=>iGF+OSnVnwG!DzWsn#wQNtKo91 z(y3)P(g{(n;}TVxpaLi6YbU)U>vC+YsSWF$Fd)0~T*xR=%&rY>Xb5cY9P=UE5(X zS;rT|`7f1XLqpJ}j8Q9h%5Joa6e4}TsHI_+k_}~CmSzMmTp^bJkDTw5sO5K!atcua z=vJv8Aq!}Wlei!WudNufD*ni{w?>H#gVnlLmeto1rDt&D@}p!iHd?fqv}3|EU-us j`Y7(Oo%*7vz`i_7=Cz)w9$3OI{{)nQm-&kb7vb+eGHwy{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..7456e939e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,287 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-06 11:56+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Talɣut tudmawant" + +msgid "Permissions" +msgstr "Tisirag" + +msgid "Important dates" +msgstr "Izemzen ixataren" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "Snifel awal uffir: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "awal uffir" + +msgid "last login" +msgstr "tuqqna taneggarut" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "Awal n uɛeddi" + +msgid "Password confirmation" +msgstr "Asentem n wawal uffir" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Amidan-agi ur yermid ara." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Awal uffir amaynut" + +msgid "New password confirmation" +msgstr "Asentem n wawal uffir amaynut" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "Awal uffir aqbuṛ" + +msgid "Password (again)" +msgstr "Mot de passe (bis)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "lqem" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "tasqamt n wakud" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "isem" + +msgid "content type" +msgstr "anaw n ugbur" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "tasiregt" + +msgid "permissions" +msgstr "tisirag" + +msgid "group" +msgstr "agraw" + +msgid "groups" +msgstr "igrawen" + +msgid "superuser status" +msgstr "addad n unebdal" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Yemmal-d d akken aseqdac-agi ɣur-s akk tisirag war ma ttwanefkent-as s wudem " +"aflalay." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "tisirag n useqdac" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "isem n useqdac" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Tansa-agi imayl tella yakan." + +msgid "first name" +msgstr "isem" + +msgid "last name" +msgstr "Isem aneggaru" + +msgid "email address" +msgstr "tansa imayl" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "urmid" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Yettwag ma yella aseqdac-agi yezmer ad yettwammel d urmid neɣ ala. Kkes " +"afran deg umḍiq n tukksa n umiḍan." + +msgid "date joined" +msgstr "azemz n ujerred" + +msgid "user" +msgstr "aseqdac" + +msgid "users" +msgstr "Iseqdaceniseqdacen" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Yeffeɣ" + +msgid "Password reset" +msgstr "Awennez n wawal uffir" + +msgid "Password reset sent" +msgstr "Tulsa n wennez n wawal uffir tettwazen" + +msgid "Enter new password" +msgstr "Sekcem awal n uffir amaynut" + +msgid "Password reset unsuccessful" +msgstr "tulsa n uwennez n wawal uffir tedda" + +msgid "Password reset complete" +msgstr "Awennez n wawal uffir yemmed" + +msgid "Password change" +msgstr "Abeddel n wawal uffir" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49d95d928d54efa6acff6d4060e249de870f6785 GIT binary patch literal 3542 zcmbW1%a0sa6^Aci9GLJ*cqF{c4T;GNsC(?e2&at$#!e&?I~he26c7@rblvVQPjywR z?rpaXn|UmV0kviZ_X}V60@~B=hhle?V1x#{w2?0I`5&SRlT0yQb&WX2Dfg ze|2Byp7T5B)}QX)cUjRM>4gC5( zr9KH?fMf7w_%Zl8{5*WS?DyeE=>Hjh3jP%yfbYZ4!h1ig)K_2?-U%OvABR7N2Vo0} zyJ~OoB9NgG^q(`_wmR&!t?Dj{EPn5?&pylie3_{<`Lg0N#6+7+ZMm2obTWfjlaqx zF^a#^q;5Bx_$q!%6aVkwk$WNSb3CG%_%BWJAWhXKpNqwugS{^-L)puy~wq+ zYX#1Clb~&M5N9R`FKTlkvd&i3$ySgwjqU{2_R=h@>4R3CGB#=^firfn*|j1&FxUz# z7Gm8oSv#^eN)zi3NxKenl8m0 zzUc9w8AQp%)ikp^I$_oHRx;$> zrb!SZXCqZJi0pdl&@R0%`p~74Br?y_LvMy*eH266=<4$pB%(y=FvR7vHmZAM|```xCk%%n9vHvL59Npn7urIk~JSJP964u89H z=%LEg5q`9)Y|cjeOP5trv^MbHyc{UuS-9}gQp^zn6i;^tF+3Ry^TbF%Wpr{jM=bb5mbLgLhR_A8 z;?@6ioM^U^uVNcby-WV zc`w&B25wYU{yU`e@0`s_GA+|SpgEPl>cv~s`35TZ@cbN0RlX!U^JS8^E7|{Js$A@k zSQCN8&}D)rm=T8d)Y0C`(&LgNNell{r|T0V7NO`nGV3d0P|Z84v8;;`l{?Dg9bb15 z6?HiIrueWo3ZK*+r!A`d<=w?BqOIibN;x46)x3(TBGCc@Q5llw8@_(ILH_pbQl0R) zS-!~ehK^Lhij+e!Po4)CjUtsA;TSTE$r07JwdJ;XAx2*&_$o!a<(gb6&6V1bj~$Ds zHR8aZT~)8}X#=IWME$G7FOAyiubjrU;uE^CNl=0?AXT)c3#8+!585e4=mGV0O7c@@EivR!s literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0710977ca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Personal info" +msgstr "Жеке мағлұмат" + +msgid "Permissions" +msgstr "Рұқсаттар" + +msgid "Important dates" +msgstr "Маңызды даталар" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Құпия сөз ойдағыдай өзгертілді." + +#, python-format +msgid "Change password: %s" +msgstr "Құпия сөзді өзгерту: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "құпия сөз" + +msgid "last login" +msgstr "соңғы кіруі" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "Енгізілген құпия сөздер бірдей емес." + +msgid "Password" +msgstr "Құпия сөз" + +msgid "Password confirmation" +msgstr "Құпия сөз құптамасы" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Бұл тіркелгі белсенді емес." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Жаңа құпия сөз" + +msgid "New password confirmation" +msgstr "Жаңа құпия сөз құптамасы" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ескі құпия сөз қате енгізілді. Қайтадан енгізіңіз." + +msgid "Old password" +msgstr "Ескі құпия сөз" + +msgid "Password (again)" +msgstr "Құпия сөз (қайтадан)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "атау" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "кодтық атау" + +msgid "permission" +msgstr "рұқсат" + +msgid "permissions" +msgstr "рұқсаттар" + +msgid "group" +msgstr "топ" + +msgid "groups" +msgstr "топтар" + +msgid "superuser status" +msgstr "әкімші мәртебесі" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Бұл қолданушының бүкіл рұқсаттарымен тағайындалатындығын білдіреді." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "қолданушы рұқсаттары" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "Қолданушы атауы" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Осындай атаумен қолданушы бар." + +msgid "first name" +msgstr "аты" + +msgid "last name" +msgstr "жөні" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "қызметкер мәртебесі" + +msgid "Designates whether the user can log into this admin site." +msgstr "Қолданушының басқарушы сайтына кіре алатындығын білдіреді." + +msgid "active" +msgstr "белсенді" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Қолданушы белсенді болуын білдіреді. Тіркілгіні өшірмей мынаны алып тастаңыз." + +msgid "date joined" +msgstr "тіркелген күн-айы" + +msgid "user" +msgstr "қолданушы" + +msgid "users" +msgstr "қолданушылар" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s торапта құпия сөзді өзгерту" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Шығу орындалды" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..16287545e6265092b07a764c9752f2ffe31ef79e GIT binary patch literal 2609 zcmb7^%a0UQ6vj(M&;}Jz!B_OUFhWSp^b8Y(hA~DS2?9DHtxJ=#`*w9fbyZt+n}Ll1 z0w{ux@)$vqYBM1&-I!<$=z@)ZfX0SGL z?Efs~8=&|tLn(1qg6~t~YOsZT1?4ojoZuV48E_T&BlryXJ6MzZWre&G+=$!;Ujh4| z^yQE8{x48?6hS5bIw<#Vlo)|qk>3U%1+SL+A3%xsTd7})v)n%oR>4i6_ywTk_gN`_ z4L*l_qtrh|Q)PsY@X8!+e^#TAxjey3X|^|OKguEuq-hXG zshSK-JMI~!4|T(!5t#6>^0@M&Ao6k5ogrr);bdE*OXQ-UYzs)}c5+VR$P3|b#ZFx+ z@fwY|2P4NI@){;MNT33pM%>hq*U^rIQ~To}(oLroB&ktW?I&@s>)7wq2|d*09z?~_ zTG+4dY;J=_IfG;Bq{eHt6yK(Y(BsOsw^Yd4v5NUVqOjz0NS%o!-me?R-PLqoM`jc? z)!gqzeq7n7rD^Wo)DN2OOFchz>v2t0CSI+(+Y;>=Y~AhDS5u?ak>}m&W_NTK+|5b*Q$I4dRQT z6^CR1FW?jTJneM9?cFh`ePpOw*%n7eN91(4OL0aYGQ-`FmDr*hZ7)f+8Go(5)7><%lUOaCxH}>S z&%V~wrZ)pKmt;*H=u{@cUgCxB&N%6$H5GNOn2wKZQN?k*x~1ae*^#_|GS5E9v#Gp) zI?rbE{_#A!lxO`syO?KR=Gi-W_LZ1r=kos1ypLGu&siI;KFa%N^Nf!@<06ER%!mP; z{qz4T3~od{VL#XM?6QqV`13Z*CwcbmyfcAe48o?&xr))+6UniENDwu~|@ z2}X?b){P2ISkIGEE2P2>FK5i~JWVO2hCoJ`a&ZdPbg7a?*xr>bz)srw-xk+DT`P5p z|CDVW^$=ld9j+ie6h&uf`c*<&!&6p2Wyz&%BAuBxoD0^75^%n3yTJ6|r`T^G!tGrv z6ZN!K6?^$0D5;+W0sz1f9f4kT4(2Oa(hMG+VONe=O gzv%LpjtX-^FS>I7@;8C=EgiD|A8_5iTnokh8*=kpg8%>k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..26beb5a32 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,281 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ព័ត៌មានផ្ទាល់ខ្លួន" + +msgid "Permissions" +msgstr "ការអនុញ្ញាត" + +msgid "Important dates" +msgstr "កាលបរិច្ឆេទសំខាន់" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "ពាក្យសំងាត់" + +msgid "last login" +msgstr "ការពិនិត្យចូលកន្លងមក" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "ពាក្យសំងាត់" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ឈ្មោះសមាជិកនេះ​លែងដំណើរការ" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "ពាក្យសំងាត់ (ម្តងទៀត)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "ឈ្មោះ" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "ឈ្មោះលេខកូត" + +msgid "permission" +msgstr "អនុញ្ញាត" + +msgid "permissions" +msgstr "អនុញ្ញាត" + +msgid "group" +msgstr "ក្រុម" + +msgid "groups" +msgstr "ក្រុម" + +msgid "superuser status" +msgstr "ស្ថានភាពអ្នកគ្រងគ្រង" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "កំណត់អោយសមាជិកនេះមានសិទ្ធិទាំងអស់។" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ការអនុញ្ញាតអោយសមាជិក" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "ឈ្មោះជាសមាជិក" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "នាម" + +msgid "last name" +msgstr "គោត្តនាម" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "ស្ថានភាពបុគ្គលិក" + +msgid "Designates whether the user can log into this admin site." +msgstr "កំណត់អោយសមាជិកអាចចូលមកប្រើប្រាស់ទំព័រគ្រប់គ្រងនេះ។" + +msgid "active" +msgstr "សកម្ម" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "កាលបរិច្ឆេទចូលរួម" + +msgid "user" +msgstr "សមាជិក" + +msgid "users" +msgstr "សមាជិក" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ចាកចេញ" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be5a6deede9086f8ebf858afdf21d267fb90717e GIT binary patch literal 4024 zcma)-UyK!39mkJIt!({M+lrN{J<=i&a_|0eRk(-&*^(e28?rUw&Ed}M-GR9?w{zxl zA<+mlER6|DNRUKLjcLUV5@_ev3NexBt1;oF>5FORsp*^gU{ZYY^E+qmpIt7LlfCDA z{`~%Ye}B&Gdrz#sq!=6ceTm=9$CUa87_DMr?EJV=o55Y+li)FM7W@gg4ZH(>793m6 z4_pU+3fusG5u7Ub`@v7LKMXz&9s$1s8u0VrMes3j3H&tp7ATzl28x{zz+K>~N0j;m zI0K5keW2*gf#Uy%Ab;u@lgPbPo}U2MuzwlElsXTJ{>AeCSD@Ir0t){e6rQ(1k-t;! z-vLGMeULx(FQ%W9v;Tq@*q?n=sqNreg#H5_0=wW0&a2>u;8($oklh6C1w}qB_t(Lv z*}n@)9sUg-2EPV5(LV(~1Kue2e+N&q{~tI5{s{7a2LB2^0sfd|ik}PMdhiw~b^a$P zb-N3SzcrtsR^WQ@S@1OsSN|WFWxB)y4iu|uZ z(qwB3SPp{XOYWsMGQ@}ETZZI`^jZI30Ht3@ucGDbAT??&Kj}+pSE;x3ismPSl-L2a z{`fL0sjH0V_zCBAvSB>M?{oZww+zXb45;@9Wwt|lqgvJ?M@C+6r-3roX zXiS*I#yUyb85UbnSP!%4q{bKq!nlEc(5wy{>?{PFrE=j+*1cFqNkfNmmT-zE&u@mY zHenW2)!t?+Ni#3bv@d+r{-n_ee2qW#{h-sQy=O)rC=IvDu_vDq?A)m!LI zUc(FH&4YuwO^B~eyIv2BnQuqY$?DMcu}*uzaZEA7*e$JuoqGMD z29+OL8f7wXeqJ+YZ8mMBYy*}DvR3wBpl zhXUz>$^p{|{mOUS4O5v*YI4@U7MQTGQk+zPyCg+)Qe5zWl37o-}B;_y6g`^KZx|VVZ(N3WVcl* z^movS8*Q%po9f0o3ienM(ARZpOI_38KHs5D@A_Usx#-J-o3=>*&@GLbk7(0>qUNB zW?BEydP0bGZqKp2SXD)S)mm^GNZ}ok-!fwgx9~$AiZ`ql{4jFbe$pU-3@6AqePl}Z z>`#kVF~%vevVagCum#`S8r`L$drF*%1*k#^Db^S{!}ZUsGmeA-dm=*vyVrZcVTep} zh>%<%L_Dxx?Aa7P)@?})o22!cJ;l>9RY-I9%Q8^WbIF5uFI!{;GAl|~nwD(fmvG=D znP-nG@xIo}fGA4fS1n_zPKM4E`P)OZ$reuN2HfNI9MTWs?27Chx}@L3nQYzag(7`` zMIwjbk|jsTmuyM8_*B;QPo)GxgV|MIDrWgCI*CP_s+*V^4uw-pxoECDv>--)(Mvnw zz~4C`ja~A2<0G656X@qsypO)vROCqY>rSZGZ84Y^H(M>KnCoY*Ez=q zX?5w40N4}1V~NIZYyixXUsyu1pCPPC34mn*x+C&opPzgL1{GZPufPh*z01s~*NX@q z>0~(Nx-64;ln)b^mjUaDB;2zfe)^Q0COL-*l;I{W*<7?=G(HC|D5^oZn8g-B;h5(n zMMZWc_m%t6j}k*G+kM2*FjYyb{fMQ+zSZRbT Ylt!GQzLNVe(GePzd($*Rsx06C0qApt1ONa4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..e24561e32 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# karthikbgl , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "ವೈಯುಕ್ತಿಕ ಮಾಹಿತಿ" + +msgid "Permissions" +msgstr "ಅನುಮತಿಗಳು" + +msgid "Important dates" +msgstr "ಮಹತ್ವದ ದಿನಾಂಕಗಳು" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "ಪಾಸ್ವರ್ಡ್ ಸಫಲವಾಗಿ ಬದಲಾಯಿಸಲಾಯಿತು" + +#, python-format +msgid "Change password: %s" +msgstr "ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸಲು: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "ಪ್ರವೇಶಪದ" + +msgid "last login" +msgstr "ಕಡೇ ಸಾರಿ ಒಳಬಂದದ್ದು" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "ಎರಡು ಪ್ರವೇಶಪದ ಕ್ಷೇತ್ರಗಳ ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ" + +msgid "Password" +msgstr "ಪ್ರವೇಶಪದ" + +msgid "Password confirmation" +msgstr "ಪಾಸ್ವರ್ಡ್ ಖಚಿತತೆ" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ಈ ಖಾತೆಯು ನಿಷ್ಕ್ರಿಯವಾಗಿದೆ" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "ಹೊಸ ಪ್ರವೇಶಪದ" + +msgid "New password confirmation" +msgstr "ಹೊಸ ಪ್ರವೇಶಪದ ಖಚಿತತೆ" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "ನಿಮ್ಮ ಹಳೆಯ ಪ್ರವೇಶಪದ ತಪ್ಪಾಗಿ ಪ್ರವೇಶಿಸಲಾಗಿದೆ ಮತ್ತೆ ದಯವಿಟ್ಟು ನಮೂದಿಸಿ" + +msgid "Old password" +msgstr "ಹಳೆಯ ಪ್ರವೇಶಪದ" + +msgid "Password (again)" +msgstr "ಪ್ರವೇಶಪದ(ಇನ್ನೊಮ್ಮೆ)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "ಹೆಸರು" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "ಸಾಂಕೇತಿಕ ಹೆಸರು" + +msgid "permission" +msgstr "ಅನುಮತಿ" + +msgid "permissions" +msgstr "ಅನುಮತಿಗಳು" + +msgid "group" +msgstr "ಗುಂಪು" + +msgid "groups" +msgstr "ಗುಂಪುಗಳು" + +msgid "superuser status" +msgstr "ಮಹಾಬಳಕೆದಾರನ ಸ್ಧಿತಿ" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"ಈ ಸದಸ್ಯರು ಸುವ್ಯಕ್ತವಾಗಿ ನೀಡದಿದ್ದರೂ ಎಲ್ಲಾ ಅನುಮತಿಗಳನ್ನು ಪಡೆದಿರುವರು ಎಂಬುದನ್ನು " +"ಸೂಚಿಸುತ್ತದೆ." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ಬಳಕೆದಾರ ಅನುಮತಿಗಳು" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "ಬಳಕೆದಾರ-ಹೆಸರು" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ಆ ಬಳಕೆದಾರಹೆಸರು ಒಂದು ಬಳಕೆದಾರ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." + +msgid "first name" +msgstr "ಮೊದಲ ಹೆಸರು" + +msgid "last name" +msgstr "ಕೊನೆಯ ಹೆಸರು" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "ಸಿಬ್ಬಂದಿ ಸ್ಥಿತಿ" + +msgid "Designates whether the user can log into this admin site." +msgstr "ಬಲಕೆದಾರರು ಈ ಆಡಳಿತ ತಾಣಕ್ಕೆ ಪ್ರವೇಶಪಡೆಯಬಹುದೇ ಎಂಬುದನ್ನು ತಿಳಿಸುತ್ತದೆ." + +msgid "active" +msgstr "ಸಕ್ರಿಯ" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "ಸೇರಿದ ದಿನಾಂಕ" + +msgid "user" +msgstr "ಬಳಕೆದಾರ" + +msgid "users" +msgstr "ಬಳಕೆದಾರರು" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ಹೊರಬರಲಾಗಿದೆ" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f6dc95654c4d0af09dc0fc83d46cf18f5362f87 GIT binary patch literal 7607 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..44dc21011 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bumsoo Kim , 2017 +# Churow Park , 2020 +# Jiyoon, Ha , 2016 +# DaHae Sung , 2016 +# 코딩 영, 2021 +# Geonho Kim / Leo Kim , 2019 +# Ian Y. Choi , 2015 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014,2016 +# Jiyoon, Ha , 2016 +# JunGu Kang , 2015 +# Kagami Sascha Rosylight , 2017 +# minsung kang, 2015 +# Woo-Jing, Seok , 2016 +# seungho, kim , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-10 02:12+0000\n" +"Last-Translator: 코딩 영\n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "개인정보" + +msgid "Permissions" +msgstr "권한" + +msgid "Important dates" +msgstr "중요한 일정" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Primary key %(key)r인 개체 %(name)s이/가 존재하지 않습니다." + +msgid "Password changed successfully." +msgstr "비밀번호가 변경되었습니다." + +#, python-format +msgid "Change password: %s" +msgstr "비밀번호 변경: %s" + +msgid "Authentication and Authorization" +msgstr "인증 및 권한" + +msgid "password" +msgstr "비밀번호" + +msgid "last login" +msgstr "마지막 로그인" + +msgid "No password set." +msgstr "비밀번호가 설정되지 않습니다." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "잘못된 비밀번호 형식이거나 알 수 없는 해싱 알고리즘 입니다." + +msgid "The two password fields didn’t match." +msgstr "비밀번호가 일치하지 않습니다." + +msgid "Password" +msgstr "비밀번호" + +msgid "Password confirmation" +msgstr "비밀번호 확인" + +msgid "Enter the same password as before, for verification." +msgstr "확인을 위해 이전과 동일한 비밀번호를 입력하세요. " + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"원본 비밀번호는 저장되지 않으므로, 해당 사용자의 비밀번호를 확인할 수 없습니" +"다. 다만 이 을 사용하여 비밀번호를 변경할 수 있습니다." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"올바른 %(username)s와/과 비밀번호를 입력하십시오. 두 필드 모두 대문자와 소문" +"자를 구별합니다." + +msgid "This account is inactive." +msgstr "이 계정은 유효하지 않습니다." + +msgid "Email" +msgstr "이메일" + +msgid "New password" +msgstr "새 비밀번호" + +msgid "New password confirmation" +msgstr "새 비밀번호 (확인)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "기존 비밀번호를 잘못 입력하셨습니다. 다시 입력해 주세요." + +msgid "Old password" +msgstr "기존 비밀번호" + +msgid "Password (again)" +msgstr "비밀번호 (확인)" + +msgid "algorithm" +msgstr "알고리즘" + +msgid "iterations" +msgstr "반복" + +msgid "salt" +msgstr "솔트" + +msgid "hash" +msgstr "해시" + +msgid "variety" +msgstr "종류" + +msgid "version" +msgstr "버젼" + +msgid "memory cost" +msgstr "메모리 비용" + +msgid "time cost" +msgstr "시간비용" + +msgid "parallelism" +msgstr "병행" + +msgid "work factor" +msgstr "워크 팩터" + +msgid "checksum" +msgstr "체크섬" + +msgid "block size" +msgstr "블록 크기" + +msgid "name" +msgstr "이름" + +msgid "content type" +msgstr "콘텐츠 타입" + +msgid "codename" +msgstr "코드명" + +msgid "permission" +msgstr "허가" + +msgid "permissions" +msgstr "허가" + +msgid "group" +msgstr "그룹" + +msgid "groups" +msgstr "그룹" + +msgid "superuser status" +msgstr "최상위 사용자 권한" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "해당 사용자에게 모든 권한을 허가합니다." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"이 사용자가 속한 그룹. 사용자는 그룹에 부여된 모든 권한을 물려 받습니다." + +msgid "user permissions" +msgstr "사용자 권한" + +msgid "Specific permissions for this user." +msgstr "이 사용자를 위한 특정 권한." + +msgid "username" +msgstr "사용자 이름" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "150자 이하 문자, 숫자 그리고 @/./+/-/_만 가능합니다." + +msgid "A user with that username already exists." +msgstr "해당 사용자 이름은 이미 존재합니다." + +msgid "first name" +msgstr "이름" + +msgid "last name" +msgstr "성" + +msgid "email address" +msgstr "이메일 주소" + +msgid "staff status" +msgstr "스태프 권한" + +msgid "Designates whether the user can log into this admin site." +msgstr "사용자가 관리사이트에 로그인이 가능한지를 나타냅니다." + +msgid "active" +msgstr "활성" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"이 사용자가 활성화되어 있는지를 나타냅니다. 계정을 삭제하는 대신 이것을 선택 " +"해제하세요." + +msgid "date joined" +msgstr "등록일" + +msgid "user" +msgstr "사용자" + +msgid "users" +msgstr "사용자(들)" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"비밀번호가 너무 짧습니다. 최소 %(min_length)d 문자를 포함해야 합니다." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "비밀번호는 최소 %(min_length)d자 이상이어야 합니다." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "비밀번호가 %(verbose_name)s와 너무 유사합니다." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "다른 개인 정보와 유사한 비밀번호는 사용할 수 없습니다." + +msgid "This password is too common." +msgstr "비밀번호가 너무 일상적인 단어입니다." + +msgid "Your password can’t be a commonly used password." +msgstr "통상적으로 자주 사용되는 비밀번호는 사용할 수 없습니다." + +msgid "This password is entirely numeric." +msgstr "비밀번호가 전부 숫자로 되어 있습니다." + +msgid "Your password can’t be entirely numeric." +msgstr "숫자로만 이루어진 비밀번호는 사용할 수 없습니다." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s의 비밀번호 재설정" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"유효한 사용자 이름을 입력하세요. 이곳에는 영문자, 숫자, @/./+/-/_만 가능합니" +"다." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"유효한 사용자 이름을 입력하세요. 이곳에는 문자, 숫자, @/./+/-/_만 가능합니다." + +msgid "Logged out" +msgstr "로그아웃" + +msgid "Password reset" +msgstr "비밀번호 초기화" + +msgid "Password reset sent" +msgstr "새 비밀번호가 전송되었습니다." + +msgid "Enter new password" +msgstr "새 비밀번호 입력" + +msgid "Password reset unsuccessful" +msgstr "비밀번호 초기화를 실패하였습니다." + +msgid "Password reset complete" +msgstr "비밀번호가 초기화 완료" + +msgid "Password change" +msgstr "비밀번호 변경" + +msgid "Password change successful" +msgstr "비밀번호를 변경하였습니다." diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7742edd7b0ee3e06be8b70236d4cffd2a0f9736a GIT binary patch literal 8924 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..2c6a64071 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,299 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-27 14:11+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "Өздүк маалымат" + +msgid "Permissions" +msgstr "Жеткилер" + +msgid "Important dates" +msgstr "Маанилүү күндөр" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "ID%(key)r болгон %(name)s табылган жок." + +msgid "Password changed successfully." +msgstr "Сырсөз ийгиликтүү өзгөрдү." + +#, python-format +msgid "Change password: %s" +msgstr "сырсөздү өзгөрт: %s" + +msgid "Authentication and Authorization" +msgstr "Катталуу жана жетки алуу" + +msgid "password" +msgstr "сырсөз" + +msgid "last login" +msgstr "акыркы кирүү" + +msgid "No password set." +msgstr "сырсөз жок." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Туура эмес сырсөз калыбы же белгисиз бекитүү алгоритми" + +msgid "The two password fields didn’t match." +msgstr "Сырсөздүн эки талаасы бири бирине окшош болбой жатат." + +msgid "Password" +msgstr "Сырсөз" + +msgid "Password confirmation" +msgstr "Сырсөз тастыктоосу" + +msgid "Enter the same password as before, for verification." +msgstr "Тастыктоо үчүн жогоруга окшош сырсөз тер." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Сырсөздөр кам түрүндө сакталбайт, мындан улам сиз аны эч качан көрө " +"албайсыз. Бирок аны сиз бул формду колдонуп өзгөртсөңүз " +"болот." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Туура %(username)s жана сырсөз тер. Алар экөө тең СезГичТүү болушу мүмкүн." + +msgid "This account is inactive." +msgstr "Бул эсеп жанык эмес." + +msgid "Email" +msgstr "экат" + +msgid "New password" +msgstr "Жаңы сырсөз" + +msgid "New password confirmation" +msgstr "Жаңы сырсөз тастыктоосу" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Сиздин эски сырсөзүңүз туура эмес терилди. Кайрадан териңиз." + +msgid "Old password" +msgstr "Эски сырсөз" + +msgid "Password (again)" +msgstr "сырсөз (кайра)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "аттоолор" + +msgid "salt" +msgstr "туз" + +msgid "hash" +msgstr "бекитүү" + +msgid "variety" +msgstr "тууралык" + +msgid "version" +msgstr "муун" + +msgid "memory cost" +msgstr "эс баасы" + +msgid "time cost" +msgstr "убакыт баасы" + +msgid "parallelism" +msgstr "удаалык" + +msgid "work factor" +msgstr "жумуш фактору" + +msgid "checksum" +msgstr "текшерүү" + +msgid "block size" +msgstr "блок өлчөмү" + +msgid "name" +msgstr "аты" + +msgid "content type" +msgstr "мазмун түрү" + +msgid "codename" +msgstr "кодаты" + +msgid "permission" +msgstr "жетки" + +msgid "permissions" +msgstr "жеткилер" + +msgid "group" +msgstr "тайпа" + +msgid "groups" +msgstr "тайпалар" + +msgid "superuser status" +msgstr "супер колдонуучу акыбалы" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Бул колдонуучуга бүт жеткилер берилишин көмүскө түрдө аныктайт." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Колдонуучунун тиешелүү болгон тайпасы. Колдонуучу тайпасына берилген бүт " +"жеткилерге ээ болот." + +msgid "user permissions" +msgstr "колдонуучу жеткиси" + +msgid "Specific permissions for this user." +msgstr "Бул колдонуучу үчүн кээ бир жеткилер" + +msgid "username" +msgstr "колдонуучу аты" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Талап кылынат. 150 же аз арип, сан жана @/./+/-/_ лар гана." + +msgid "A user with that username already exists." +msgstr "Бул колдонуучу аты мурдатан эле бар" + +msgid "first name" +msgstr "аты" + +msgid "last name" +msgstr "атасынын аты" + +msgid "email address" +msgstr "эдарек" + +msgid "staff status" +msgstr "кызматкер статусу" + +msgid "Designates whether the user can log into this admin site." +msgstr "Колдонуучу башкаруу сайтына киришин же кире албашын дайындайт." + +msgid "active" +msgstr "жанык" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Бул колдонуучунун активдүүлүгүн дайындайт. Бул аккаунтту өчүрүү үчүн бул " +"жердеги тандоону алып салыңыз." + +msgid "date joined" +msgstr "кошулуу күнү" + +msgid "user" +msgstr "колдонуучу" + +msgid "users" +msgstr "колдонуучулар" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Бул сырсөз өтө эле кыска. Ал өзүнө жок дегенде %(min_length)d символ камтышы " +"керек." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Сиздин сырсөз жок дегенде %(min_length)d символ камтышы керек." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Сырсөз жана %(verbose_name)s өтө эле окшош." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Сиздин сырсөз башка жеке маалыматыңызга окшош болбоосу керек." + +msgid "This password is too common." +msgstr "Бул сырсөз өтө эле жалпы" + +msgid "Your password can’t be a commonly used password." +msgstr "Сиздин сырсөз өтө эле жалпы колдонуудагы сырсөз болбоосу керек." + +msgid "This password is entirely numeric." +msgstr "Бул сырсөз жалаң сандан турат." + +msgid "Your password can’t be entirely numeric." +msgstr "Сиздин сырсөз жалаң эле сандардан турбашы керек." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s дан сырсөздү жокко чыгырыңыз" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Туура колдонуучу атын киргизиңиз. Бул маани жалаң латын арибин, сан жана @/./" +"+/-/_ белгилерин камтый алат." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Туура колдонуучу атын киргизиңиз. Бул маани жалаң арип, сан жана @/./+/-/_ " +"белгилерин камтый алат." + +msgid "Logged out" +msgstr "Катталып чыкты" + +msgid "Password reset" +msgstr "Сырсөдү жокко чыгаруу" + +msgid "Password reset sent" +msgstr "Сырсөз жок кылууга жөнөтүлдү" + +msgid "Enter new password" +msgstr "Жаңы сырсөз киргиз" + +msgid "Password reset unsuccessful" +msgstr "Сырсөздү жокко чыгаруу ийгиликсиз" + +msgid "Password reset complete" +msgstr "Сырсөздү жокко чыгаруу аяктады" + +msgid "Password change" +msgstr "Сырсөз өзгөртүү" + +msgid "Password change successful" +msgstr "Сырсөздү жокко чыгаруу ийгиликтүү" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3adcc2c4b61f88355282a1cc1af335f21b2ef443 GIT binary patch literal 474 zcmZWlK~KUk7}e-$N6#K=;sJtPJBS8~Ge(321CfyFy<=sRbnVi1fBlSVU?t+~!k zFc+n<9#35^GyGKL4kw18VD_5effd|?7C&<@7;4k#7Sj%nx`_5zbl0L0r69y}@gZx^ z|GJ2>4sB6DFyYSQ#B%Kv_r@~x!nKwTO@z#ZLidmc#z(aqL#dbM0q*F$;<>7jsmgMN bN5&S8Azki97q|Opzl|FjUBxJB_JfmO=%kD+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..382e9e8a3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,226 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 10:30+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd83d5dc1b9d04ea004cb565e7b53db33d646374 GIT binary patch literal 8146 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..5bc0c4557 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,320 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# lauris , 2011 +# Matas Dailyda , 2015-2017 +# naktinis , 2012 +# Nikolajus Krauklis , 2013 +# Simonas Kazlauskas , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-16 08:45+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Personal info" +msgstr "Asmeninė informacija" + +msgid "Permissions" +msgstr "Leidimai" + +msgid "Important dates" +msgstr "Svarbios datos" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Įrašas %(name)s su pirminiu raktu %(key)r neegzistuoja." + +msgid "Password changed successfully." +msgstr "Slaptažodis pakeistas sėkmingai." + +#, python-format +msgid "Change password: %s" +msgstr "Pakeisti slaptažodį: %s" + +msgid "Authentication and Authorization" +msgstr "Autentifikacija ir įgaliojimai" + +msgid "password" +msgstr "slaptažodis" + +msgid "last login" +msgstr "paskutinį kartą prisijungęs" + +msgid "No password set." +msgstr "Slaptažodis nenustatytas" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neteisingas slaptažodžio formatas arba nežinomas maišos algoritmas." + +msgid "The two password fields didn't match." +msgstr "Slaptažodžio laukai nesutapo" + +msgid "Password" +msgstr "Slaptažodis" + +msgid "Password confirmation" +msgstr "Slaptažodžio patvirtinimas" + +msgid "Enter the same password as before, for verification." +msgstr "Patikrinimui įveskite tokį patį slaptažodį, kaip anksčiau." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Neužkoduoti slaptažodžiai nėra saugomi, todėl galimybės pasižiūrėti šio " +"vartotojo slaptažodį nėra, bet galite slaptažodį pakeisti naudodamiesi šia forma." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Įveskite teisingą %(username)s ir slaptažodį. Abiejuose laukuose didžiosios " +"mažosios raidės skiriasi." + +msgid "This account is inactive." +msgstr "Ši paskyra yra neaktyvi." + +msgid "Email" +msgstr "El. paštas" + +msgid "New password" +msgstr "Naujas slaptažodis" + +msgid "New password confirmation" +msgstr "Naujo slaptažodžio patvirtinimas" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Blogai įvestas senas slaptažodis. Bandykite dar kartą." + +msgid "Old password" +msgstr "Senas slaptažodis" + +msgid "Password (again)" +msgstr "Slaptažodis (dar kartą)" + +msgid "algorithm" +msgstr "algoritmas" + +msgid "iterations" +msgstr "iteracijos" + +msgid "salt" +msgstr "druska" + +msgid "hash" +msgstr "maiša" + +msgid "variety" +msgstr "įvairovė" + +msgid "version" +msgstr "versija" + +msgid "memory cost" +msgstr "atminties sąnaudos" + +msgid "time cost" +msgstr "laiko sąnaudos" + +msgid "parallelism" +msgstr "paralelizmas" + +msgid "work factor" +msgstr "darbo faktorius" + +msgid "checksum" +msgstr "kontrolinė suma" + +msgid "name" +msgstr "vardas" + +msgid "content type" +msgstr "turinio tipas" + +msgid "codename" +msgstr "kodinis vardas" + +msgid "permission" +msgstr "leidimas" + +msgid "permissions" +msgstr "leidimai" + +msgid "group" +msgstr "grupė" + +msgid "groups" +msgstr "grupės" + +msgid "superuser status" +msgstr "supervartotojo statusas" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Pažymi, kad šis vartotojas turi visas teises be specialių nustatymų." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupės, kurioms šis vartotojas priklauso. Vartotojas gaus visas teises, " +"kurios yra suteiktos jo grupėms." + +msgid "user permissions" +msgstr "vartotojo leidimai" + +msgid "Specific permissions for this user." +msgstr "Specifiniai šio vartotojo leidimai." + +msgid "username" +msgstr "vartotojo vardas" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Privalomas. 150 arba mažiau simbolių. Raidės, skaičiai bei @/./+/-/_ " +"simboliai." + +msgid "A user with that username already exists." +msgstr "Jau egzistuoja vartotojas su tokiu vardu." + +msgid "first name" +msgstr "vardas" + +msgid "last name" +msgstr "pavardė" + +msgid "email address" +msgstr "El. pašto adresas" + +msgid "staff status" +msgstr "personalo statusas" + +msgid "Designates whether the user can log into this admin site." +msgstr "Nurodo ar vartotojas gali prisijungti prie administravimo puslapio." + +msgid "active" +msgstr "aktyvus" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Nurodo ar vartotojas yra aktyvuotas. Užuot pašalinę vartotoją, galite nuimti " +"šią žymę." + +msgid "date joined" +msgstr "data, kada prisijungė" + +msgid "user" +msgstr "vartotojas" + +msgid "users" +msgstr "vartotojai" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Šis slaptažodis yra per trumpas. Jį turi sudaryti bent %(min_length)d " +"simbolis." +msgstr[1] "" +"Šis slaptažodis yra per trumpas. Jį turi sudaryti bent %(min_length)d " +"simboliai." +msgstr[2] "" +"Šis slaptažodis yra per trumpas. Jį turi sudaryti bent %(min_length)d " +"simbolių." +msgstr[3] "" +"Šis slaptažodis yra per trumpas. Jį turi sudaryti bent %(min_length)d " +"simbolių." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Jūsų slaptažodį turi sudaryti bent %(min_length)d simbolis." +msgstr[1] "Jūsų slaptažodį turi sudaryti bent %(min_length)d simboliai." +msgstr[2] "Jūsų slaptažodį turi sudaryti bent %(min_length)d simbolių." +msgstr[3] "Jūsų slaptažodį turi sudaryti bent %(min_length)d simbolių." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Slaptažodis pernelyg panašus į %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Jūsų slaptažodis negali būti pernelyg panašus į kitą jūsų asmeninę " +"informaciją." + +msgid "This password is too common." +msgstr "Šis slaptažodis yra per dažnai pasitaikantis." + +msgid "Your password can't be a commonly used password." +msgstr "Jūsų slaptažodis negali būti dažnai naudojamu slaptažodžiu." + +msgid "This password is entirely numeric." +msgstr "Šis slaptažodis sudarytas tik iš skaitmenų." + +msgid "Your password can't be entirely numeric." +msgstr "Jūsų slaptažodis negali būti sudarytas tik iš skaitmenų." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Slaptažodis atkurtas ant %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Įveskite korektišką vartotojo vardą. Ši reikšmė gali turėti tik angliško " +"alfabeto raides, skaičius ir @/./+/-/_ simbolius." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Įveskite korektišką vartotojo vardą. Ši reikšmė gali turėti tik raides, " +"skaičius ir @/./+/-/_ simbolius." + +msgid "Logged out" +msgstr "Atsijungęs" + +msgid "Password reset" +msgstr "Slaptažodžio atstatymas" + +msgid "Password reset sent" +msgstr "Slaptažodžio atstatymas išsiųstas" + +msgid "Enter new password" +msgstr "Įveskite naują slaptažodį" + +msgid "Password reset unsuccessful" +msgstr "Slaptažodžio atstatymas nesėkmingas" + +msgid "Password reset complete" +msgstr "Slaptažodžio atstatymas baigtas" + +msgid "Password change" +msgstr "Slaptažodžio keitimas" + +msgid "Password change successful" +msgstr "Slaptažodis sėkmingai pakeistas" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb9c0477d6f38bf22269373a101055c4f67764c3 GIT binary patch literal 7631 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

      Kc_#wmG F{{w1oNN)fD literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..93ac269d6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# NullIsNot0 , 2017 +# Jannis Leidel , 2011 +# NullIsNot0 , 2019,2021 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-06 05:08+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Personal info" +msgstr "Personīgā informācija" + +msgid "Permissions" +msgstr "Tiesības" + +msgid "Important dates" +msgstr "Svarīgi datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objekts ar primāro atslēgu %(key)r neeksistē." + +msgid "Password changed successfully." +msgstr "Parole nomainīta sekmīgi." + +#, python-format +msgid "Change password: %s" +msgstr "Paroles maiņa: %s" + +msgid "Authentication and Authorization" +msgstr "Autentifikācija un autorizācija" + +msgid "password" +msgstr "parole" + +msgid "last login" +msgstr "pēdējoreiz pieslēdzies" + +msgid "No password set." +msgstr "Nav norādīta parole" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Nederīgs paroles formāts vai nezināms hash algoritms." + +msgid "The two password fields didn’t match." +msgstr "Paroles lauki nesakrita." + +msgid "Password" +msgstr "Parole" + +msgid "Password confirmation" +msgstr "Paroles apstiprinājums" + +msgid "Enter the same password as before, for verification." +msgstr "Ievadi iepriekš norādīto paroli verifikācijai." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Paroles netiek glabātas brīvā tekstā, tāpēc nav iespējams apskatīt lietotāja " +"paroli, bet jūs varat to nomainīt, izmantojot šo formu." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Lūdzu ievadi korektu %(username)s un paroli personāla kontam. Ņem vērā, ka " +"abi ievades lauki ir reģistr jūtīgi." + +msgid "This account is inactive." +msgstr "Šis konts nav aktīvs." + +msgid "Email" +msgstr "E-pasts" + +msgid "New password" +msgstr "Jaunā parole" + +msgid "New password confirmation" +msgstr "Jaunās parole vēlreiz" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Jūsu iepriekšējā parole netika ievadīta korekti. Lūdzu ievadiet to atkārtoti." + +msgid "Old password" +msgstr "Vecā parole" + +msgid "Password (again)" +msgstr "Parole (vēlreiz)" + +msgid "algorithm" +msgstr "algoritms" + +msgid "iterations" +msgstr "iterācijas" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "dažādība" + +msgid "version" +msgstr "versija" + +msgid "memory cost" +msgstr "atmiņas izmaksas" + +msgid "time cost" +msgstr "laika izmaksas" + +msgid "parallelism" +msgstr "paralēlisms" + +msgid "work factor" +msgstr "darba faktors" + +msgid "checksum" +msgstr "kontrolsumma" + +msgid "block size" +msgstr "bloka izmērs" + +msgid "name" +msgstr "nosaukums" + +msgid "content type" +msgstr "satura tips" + +msgid "codename" +msgstr "kods" + +msgid "permission" +msgstr "tiesība" + +msgid "permissions" +msgstr "tiesības" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupas" + +msgid "superuser status" +msgstr "superlietotāja statuss" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Lietotājam ir visas tiesības arī bez to atsevišķas piešķiršanas." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupas, kurām lietotājs pieder. Lietotājam būs visas tiesības, kuras ir " +"piešķirtas katrai grupai, kurā viņš pieder." + +msgid "user permissions" +msgstr "lietotāja tiesības" + +msgid "Specific permissions for this user." +msgstr "Lietotāja specifiskās tiesības." + +msgid "username" +msgstr "lietotāja vārds" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obligāts. 150 vai mazāk zīmes. Tikai burti, cipari un @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Lietotājs ar šādu lietotāja vārdu jau eksistē." + +msgid "first name" +msgstr "vārds" + +msgid "last name" +msgstr "uzvārds" + +msgid "email address" +msgstr "e-pasta adrese" + +msgid "staff status" +msgstr "personāla statuss" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Atzīmējiet, ja vēlaties, lai lietotājs var pieslēgties administrācijas lapā." + +msgid "active" +msgstr "aktīvs" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "Nosaka, vai lietotājs ir aktīvs. Atceliet šo konta dzēšanas vietā." + +msgid "date joined" +msgstr "datums, kad pievienojies" + +msgid "user" +msgstr "lietotājs" + +msgid "users" +msgstr "lietotāji" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Šī parole ir pārāk īsa. Tai ir jābūt vismaz %(min_length)d zīmes garai." +msgstr[1] "" +"Šī parole ir pārāk īsa. Tai ir jābūt vismaz %(min_length)d zīmi garai.." +msgstr[2] "" +"Šī parole ir pārāk īsa. Tai ir jābūt vismaz %(min_length)d zīmēm garai." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Parolei ir jābūt vismaz %(min_length)d zīmēm garai." +msgstr[1] "Parolei ir jābūt vismaz %(min_length)d zīmi garai." +msgstr[2] "Parolei ir jābūt vismaz %(min_length)d zīmēm garai." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Parole ir pārāk līdzīga %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Parole nedrīkst būt pārāk līdzīga pārējai personīgajai informācijai." + +msgid "This password is too common." +msgstr "Parole ir pārāk bieži lietota." + +msgid "Your password can’t be a commonly used password." +msgstr "Parole nedrīkst būt no bieži lietotu paroļu saraksta." + +msgid "This password is entirely numeric." +msgstr "Parole sastāv tikai no cipariem." + +msgid "Your password can’t be entirely numeric." +msgstr "Parole nedrīkst sastāvēt tikai no cipariem." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Paroles pārstatīšana %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Ievadi derīgu lietotāja vārdu. Šī vērtība var saturēt tikai Angļu burtus, " +"ciparus un @/./+/-/_ simbolus." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Ievadi derīgu lietotāja vārdu. Šī vērtība var saturēt tikai burtus, ciparus " +"un @/./+/-/_ simbolus." + +msgid "Logged out" +msgstr "Atslēdzies" + +msgid "Password reset" +msgstr "Paroles pārstatīšana" + +msgid "Password reset sent" +msgstr "Paroles pārstatīšana nosūtīta" + +msgid "Enter new password" +msgstr "Ievadiet jauno paroli" + +msgid "Password reset unsuccessful" +msgstr "Paroles pārstatīšana nesekmīga" + +msgid "Password reset complete" +msgstr "Paroles pārstatīšana pabeigta" + +msgid "Password change" +msgstr "Paroles maiņa" + +msgid "Password change successful" +msgstr "Paroles maiņa sekmīga" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4909b2066199beb8d1ed590ffef0f2f7ae51831c GIT binary patch literal 9235 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 TE*WpJJqv;h{$ZS^i<*A|`>DwX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..a991af006 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# dekomote , 2015 +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017 +# Vasil Vangelovski , 2013-2015 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Personal info" +msgstr "Лични информации" + +msgid "Permissions" +msgstr "Привилегии" + +msgid "Important dates" +msgstr "Важни датуми" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Не постои %(name)s објект со примарен клуч %(key)r." + +msgid "Password changed successfully." +msgstr "Успешна промена на лозинката." + +#, python-format +msgid "Change password: %s" +msgstr "Промени лозинка: %s" + +msgid "Authentication and Authorization" +msgstr "Автентикација и авторизација" + +msgid "password" +msgstr "лозинка" + +msgid "last login" +msgstr "последна најава" + +msgid "No password set." +msgstr "Нема зададена лозинка." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невалиден формат на лозинка или непознат алгоритам за хеширање." + +msgid "The two password fields didn't match." +msgstr "Двете полиња со лозинките не се совпаѓаат." + +msgid "Password" +msgstr "Лозинка" + +msgid "Password confirmation" +msgstr "Потврда на лозинка" + +msgid "Enter the same password as before, for verification." +msgstr "Внесете ја истата лозинка како претходно, за верификација." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ве молиме внесете ја точно %(username)s и лозинка. Имајте на ум дека двете " +"полиња може да бидат со мали букви." + +msgid "This account is inactive." +msgstr "Оваа сметка е неактивна." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Нова лозинка" + +msgid "New password confirmation" +msgstr "Потврда за нова лозинка" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Не ја внесовте точно вашата стара лозинка. Ве молам внесете ја повторно." + +msgid "Old password" +msgstr "Стара лозинка" + +msgid "Password (again)" +msgstr "Лозинка (повторно)" + +msgid "algorithm" +msgstr "алгоритам" + +msgid "iterations" +msgstr "повторувања" + +msgid "salt" +msgstr "случаен клуч" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "верзија" + +msgid "memory cost" +msgstr "просторна (мемориска) комплексност" + +msgid "time cost" +msgstr "временска комплексност" + +msgid "parallelism" +msgstr "паралелизам" + +msgid "work factor" +msgstr "фактор на работа" + +msgid "checksum" +msgstr "проверка" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип содржина" + +msgid "codename" +msgstr "кодно име" + +msgid "permission" +msgstr "привилегија" + +msgid "permissions" +msgstr "привилегии" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статус на суперкорисник" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Означува дека овој корисник ги има сите привилегии без експлицитно да се " +"доделуваат сите." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групите на коишто припаѓа овој корисник. Корисникот ќе ги добие сите " +"пермисии на секоја од избраните групи." + +msgid "user permissions" +msgstr "кориснички привилегии" + +msgid "Specific permissions for this user." +msgstr "Специфични дозволи за овој корисник." + +msgid "username" +msgstr "корисничко име" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Задолжително. 150 или помалку знаци. Единствено букви, бројки и @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Веќе постои корисник со тоа корисничко име." + +msgid "first name" +msgstr "име" + +msgid "last name" +msgstr "презиме" + +msgid "email address" +msgstr "email адреса" + +msgid "staff status" +msgstr "статус на администраторите" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Означува дали корисникот може да се логира во сајтот за администрација." + +msgid "active" +msgstr "активен" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Означува дали корисникот треба да биде активен. Одштиклирајте го ова наместо " +"да бришете корисници." + +msgid "date joined" +msgstr "датум на зачленување" + +msgid "user" +msgstr "корисник" + +msgid "users" +msgstr "корисници" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Оваа лозинка е премногу кратка. Мора да содржи најмалку %(min_length)d " +"карактер." +msgstr[1] "" +"Оваа лозинка е премногу кратка. Мора да содржи најмалку %(min_length)d " +"карактери." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Вашата лозинка мора да содржи најмалку %(min_length)d карактер." +msgstr[1] "Вашата лозинка мора да содржи најмалку %(min_length)d карактери." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Лозинката е премногу слична со %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Вашата лозинка не смее да биде премногу слична со други лични информации." + +msgid "This password is too common." +msgstr "Оваа лозинка е премногу често користена." + +msgid "Your password can't be a commonly used password." +msgstr "Вашата лозинка не смее да биде лозинка која се користи многу често." + +msgid "This password is entirely numeric." +msgstr "Оваа лозинка содржи само цифри." + +msgid "Your password can't be entirely numeric." +msgstr "Вашата лозинка не може да содржи само цифри." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ресетирање на лозинка за %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Внесете валидно корисничко име. Оваа вредност може да содржи само латински " +"букви, бројки и @/./+/-/_ знаци." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Внесете валидно корисничко име. Оваа вредност може да содржи само букви, " +"бројки и @/./+/-/_ знаци." + +msgid "Logged out" +msgstr "Одјавен" + +msgid "Password reset" +msgstr "Ресетирање на лозинка" + +msgid "Password reset sent" +msgstr "Испратено информации за ресетирање лозинка" + +msgid "Enter new password" +msgstr "Внесете нова лозинка" + +msgid "Password reset unsuccessful" +msgstr "Неуспешно ресетирање на лозинка" + +msgid "Password reset complete" +msgstr "Ресетирањето на лозинката е завршено" + +msgid "Password change" +msgstr "Промена на лозинка" + +msgid "Password change successful" +msgstr "Успешна промена на лозинка" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d247f8eaa75e111da8d9d76f7985fba5a9c37221 GIT binary patch literal 12611 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, 2012 +# Hrishikesh , 2019 +# Jannis Leidel , 2011 +# Rag sagar , 2016 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2019-03-03 09:43+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "വ്യക്തിപരമായ വിവരങ്ങള്‍" + +msgid "Permissions" +msgstr "അനുമതികള്‍" + +msgid "Important dates" +msgstr "പ്രധാന തീയതികള്‍" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(key)r പ്രൈമറി കീയായുള്ള %(name)s ന്റെ ഒബ്ജക്റ്റ് നിലവിലില്ല." + +msgid "Password changed successfully." +msgstr "പാസ്സ്‌വേഡ് മാറ്റിയിരിക്കുന്നു." + +#, python-format +msgid "Change password: %s" +msgstr "പാസ്സ്‌വേഡ് മാറ്റുക: %s" + +msgid "Authentication and Authorization" +msgstr "ആധികാരികതയും അധികാരപ്പെടുത്തലും" + +msgid "password" +msgstr "പാസ്സ്‌വേഡ്" + +msgid "last login" +msgstr "അവസാനമായി ലോഗിന്‍ ചെയ്തത്" + +msgid "No password set." +msgstr "പാസ്സ്‌വേഡ് സജ്ജീകരിച്ചിട്ടില്ല." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"പാസ്സ്‌വേഡിന്റെ ഫോർമാറ്റ് ശെരിയല്ലാതിരിക്കുകയോ അറിയാത്ത ഹാഷിങ്ങ് അൽഗോരിതം ഉപയോഗിക്കുകയോ " +"ചെയ്തിരിക്കുന്നു." + +msgid "The two password fields didn't match." +msgstr "രണ്ട് പാസ്സ്‌വേഡ് ഫീൽഡുകളും തമ്മിൽ ചേരുന്നില്ല." + +msgid "Password" +msgstr "പാസ്സ്‌വേഡ്" + +msgid "Password confirmation" +msgstr "പാസ്സ്‌വേഡ് ഉറപ്പാക്കല്‍" + +msgid "Enter the same password as before, for verification." +msgstr "നേരത്തെ നല്കിയ രഹസ്യവാക്ക് പരിശോധിക്കനായി പിന്നെയും നല്കുക. " + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"ദയവായി ശരിയായ %(username)s ഉം രഹസ്യവാക്കും നല്കുക. രണ്ട് കള്ളികളിലും വലിയക്ഷരങ്ങളും " +"ചെറിയക്ഷരങ്ങളും വെവ്വേറെയായിരിക്കും." + +msgid "This account is inactive." +msgstr "ഈ അക്കൗണ്ട് മരവിപ്പിച്ചതാണ്." + +msgid "Email" +msgstr "ഈമെയിൽ" + +msgid "New password" +msgstr "പുതിയ പാസ്‌വേര്‍ഡ്" + +msgid "New password confirmation" +msgstr "പുതിയ പാസ്‌വേര്‍ഡ് ഉറപ്പാക്കല്‍" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "നിങ്ങളുടെ പഴയ പാസ്‌വേര്‍ഡ് തെറ്റായാണ് നല്കിയത്. തിരുത്തുക." + +msgid "Old password" +msgstr "പഴയ പാസ്‌വേര്‍ഡ്" + +msgid "Password (again)" +msgstr "പാസ്‌വേര്‍ഡ് (വീണ്ടും)" + +msgid "algorithm" +msgstr "അല്‍ഗോരിതം" + +msgid "iterations" +msgstr "പുനരാവൃത്തികള്‍" + +msgid "salt" +msgstr "സോള്‍ട്ട്" + +msgid "hash" +msgstr "ഹാഷ്" + +msgid "variety" +msgstr "തരം" + +msgid "version" +msgstr "പതിപ്പ്" + +msgid "memory cost" +msgstr "മെമ്മറി ചിലവ്" + +msgid "time cost" +msgstr "സമയത്തിന്റെ ചിലവ്" + +msgid "parallelism" +msgstr "സമാന്തരമായി" + +msgid "work factor" +msgstr "വര്‍ക്ക് ഫാക്ടര്‍" + +msgid "checksum" +msgstr "ചെക്‍സം" + +msgid "name" +msgstr "പേര്" + +msgid "content type" +msgstr "കണ്ടന്റ് ടൈപ്പ്" + +msgid "codename" +msgstr "കോഡ്-നാമം" + +msgid "permission" +msgstr "അനുമതി" + +msgid "permissions" +msgstr "അനുമതികള്‍" + +msgid "group" +msgstr "ഗ്രൂപ്പ്" + +msgid "groups" +msgstr "ഗ്രൂപ്പുകള്‍" + +msgid "superuser status" +msgstr "സൂപ്പര്‍-യൂസര്‍ പദവി" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "ഈ ഉപയോക്താവിന് എടുത്തു പറയാതെ തന്നെ എല്ലാ അനുമതികളും ലഭിക്കുന്നതാണെന്ന് വ്യക്തമാക്കുന്നു" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"ഈ ഉപയോക്താവ് ഭാഗമായിട്ടുള്ള ഗ്രൂപ്പുകൾ. ഒരു ഉപയോക്താവ് ഭാഗമായിട്ടുള്ള ഓരോ ഗ്രൂപ്പിലേ അനുമതികളും " +"ആ ഉപയോക്താവിനു ലഭിക്കുന്നതാണ്." + +msgid "user permissions" +msgstr "യൂസര്‍ (ഉപയോക്താവ്)നുള്ള അനുമതികള്‍" + +msgid "Specific permissions for this user." +msgstr "ഈ ഉപയോക്താവിനു മാത്രമായുള്ള അനുമതികൾ." + +msgid "username" +msgstr "യൂസര്‍ നാമം (ഉപയോക്ത്രു നാമം)" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"നിര്‍ബന്ധം. 150 ഓ അതില്‍ കുറവോ അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, പിന്നെ @/./+/-/_ എന്നിവയും മാത്രം." + +msgid "A user with that username already exists." +msgstr "ആ പേരുള്ള ഒരു ഉപയോക്താവ് നിലവിലുണ്ട്." + +msgid "first name" +msgstr "പേര് - ആദ്യഭാഗം" + +msgid "last name" +msgstr "പേര് - അന്ത്യഭാഗം" + +msgid "email address" +msgstr "ഈമെയിൽ വിലാസം" + +msgid "staff status" +msgstr "സ്റ്റാഫ് പദവി" + +msgid "Designates whether the user can log into this admin site." +msgstr "ഈ യൂസര്‍ക്ക് ഈ അഡ്മിന്‍ സൈറ്റിലേക്ക് പ്രവേശിക്കാമോ എന്നു വ്യക്തമാക്കാന്‍" + +msgid "active" +msgstr "സജീവം" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"ഈ യൂസര്‍ സജീവമാണോയെന്ന് വ്യക്തമാക്കുന്നു. അക്കൗണ്ട് ഡിലീറ്റ് ചെയ്യുന്നതിനു പകരം ഇത് ഒഴിവാക്കുക." + +msgid "date joined" +msgstr "ചേര്‍ന്ന തീയതി" + +msgid "user" +msgstr "യൂസര്‍ (ഉപയോക്താവ്)" + +msgid "users" +msgstr "യൂസേര്‍സ് (ഉപയോക്താക്കള്‍)" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"ഈ രഹസ്യവാക്ക് വളരെ ചെറുതാണ്. രഹസ്യവാക്കിൽ കുറഞ്ഞത് %(min_length)d അക്ഷരമെങ്കിലും വേണം." +msgstr[1] "" +"ഈ രഹസ്യവാക്ക് വളരെ ചെറുതാണ്. രഹസ്യവാക്കിൽ കുറഞ്ഞത് %(min_length)d അക്ഷരങ്ങളെങ്കിലും വേണം." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "താങ്കളുടെ രഹസ്യവാക്കിൽ കുറഞ്ഞത് %(min_length)d അക്ഷരമെങ്കിലും ഉണ്ടാവണം." +msgstr[1] "താങ്കളുടെ രഹസ്യവാക്കിൽ കുറഞ്ഞത് %(min_length)d അക്ഷരങ്ങളെങ്കിലും ഉണ്ടാവണം." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "ഈ രഹസ്യവാക്കിനു %(verbose_name)s ആയി  വളരെ സാമ്യം കാണുന്നു." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"താങ്കളുടെ മറ്റു വ്യക്തി വിവരുങ്ങളുമായി താങ്കളുടെ രഹസ്യവാക്കിനു ഒരുപാട് സാമ്യമുണ്ടാകാൻ പാടില്ല." + +msgid "This password is too common." +msgstr "ഈ രഹസ്യവാക്ക് വളരെ സാധാരണമാണ്." + +msgid "Your password can't be a commonly used password." +msgstr "താങ്കളുടെ രഹസ്യവാക്ക് വളരെ സാധാരണമായ ഒരു രഹസ്യവാക്കാകാൻ പാടില്ല." + +msgid "This password is entirely numeric." +msgstr "ഈ രഹസ്യവാക്ക് മുഴുവനും അക്കങ്ങൾ മാത്രമാണ്." + +msgid "Your password can't be entirely numeric." +msgstr "താങ്കളുടെ രഹസ്യവാക്ക് മുഴുവനായി അക്കങ്ങൾ മാത്രമാകാൻ പാടില്ല." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s ലെ പാസ്‌വേര്‍ഡ് മാറ്റിയിരിക്കുന്നു" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"ശരിയായ ഉപയോക്ത്രു നാമം നല്കുക. ഇതിൽ ഇംഗ്ഗ്ലീഷ് അക്ഷരങ്ങളും അക്കങ്ങളും പിന്നെ @/./+/-/_ " +"എന്നിവയും മാത്രമേ അനുവദനീയമായുള്ളൂ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"ശരിയായ ഉപയോക്ത്രു നാമം നല്കുക. ഇതിൽ അക്ഷരങ്ങളും അക്കങ്ങളും പിന്നെ @/./+/-/_ എന്നിവയും " +"മാത്രമേ അനുവദനീയമായുള്ളൂ." + +msgid "Logged out" +msgstr "ലോഗ്-ഔട്ട് ചെയ്തു (പുറത്തിറങ്ങി)" + +msgid "Password reset" +msgstr "രഹസ്യവാക്ക് പുനർക്രമീകരിക്കുക." + +msgid "Password reset sent" +msgstr "രഹസ്യവാക്ക് പുനർക്രമീകരിക്കാൻ അയച്ചു" + +msgid "Enter new password" +msgstr "പുതിയ രഹസ്യവാക്ക് നല്കുക" + +msgid "Password reset unsuccessful" +msgstr "രഹസ്യവാക്ക് പുനർക്രമീകരണം പരാജയപ്പെട്ടിരിക്കുന്നു." + +msgid "Password reset complete" +msgstr "രഹസ്യവാക്ക് പുനർക്രമീകരണം പൂർത്തിയായി." + +msgid "Password change" +msgstr "രഹസ്യവാക്ക് മാറ്റം" + +msgid "Password change successful" +msgstr "രഹസ്യവാക്ക് വിജയകരമായി മാറ്റിയിരിക്കുന്നു." diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c2a3c80aea848956f733fc0a29a26c72abe4f3a GIT binary patch literal 9403 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..76deb1e6c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,310 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2015,2017 +# Delgermurun Purevkhuuu , 2013 +# dolugen , 2016 +# Jannis Leidel , 2011 +# miigaa ... , 2015 +# Zorig , 2013-2014,2017 +# Анхбаяр Анхаа , 2015 +# Баясгалан Цэвлээ , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-19 13:49+0000\n" +"Last-Translator: Bayarkhuu Bataa\n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Хувийн мэдээлэл" + +msgid "Permissions" +msgstr "Эрхүүд" + +msgid "Important dates" +msgstr "Чухал огноо" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(key)r анхдагч түлхүүртэй %(name)s обьект олдсонгүй." + +msgid "Password changed successfully." +msgstr "Нууц үг амжилттай өөрчлөгдлөө." + +#, python-format +msgid "Change password: %s" +msgstr "Нууц үг өөрчлөх: %s" + +msgid "Authentication and Authorization" +msgstr "Нэвтрэлт ба зөвшөөрөл" + +msgid "password" +msgstr "нууц үг" + +msgid "last login" +msgstr "сүүлд нэвтэрсэн" + +msgid "No password set." +msgstr "Нууц үг тохируулаагүй." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Нууц үгийн буруу формат эсвэл үл мэдэгдэх хаш алгоритм байна." + +msgid "The two password fields didn't match." +msgstr "Хоёр нууц үг зөрж байна." + +msgid "Password" +msgstr "Нууц үг " + +msgid "Password confirmation" +msgstr "Нууц үгийн баталгаажуулалт" + +msgid "Enter the same password as before, for verification." +msgstr "Баталгаажуулахын тулд дээрх нууц үгээ ахин оруулна уу." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Хэрэглэгчийн нууц үгийг хувиргалгүйгээр хадгалдаггүй учир шууд харах " +"боломжгүй, гэхдээ энэ маягт ашиглан өөрчилж болно." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Зөв %(username)s, нууц үг оруулна уу. Том жижиг үсэг ялгаатай болохыг " +"анхаарна уу." + +msgid "This account is inactive." +msgstr "Энэ бүртгэл идэвхгүй байна." + +msgid "Email" +msgstr "Имэйл" + +msgid "New password" +msgstr "Шинэ нууц үг" + +msgid "New password confirmation" +msgstr "Шинэ нууц үгийн баталгаажуулалт" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Хуучин нууц үгээ буруу оруулсан байна. Ахин оруулна уу." + +msgid "Old password" +msgstr "Хуучин нууц үг" + +msgid "Password (again)" +msgstr "Нууц үг (давтан)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "давталтууд" + +msgid "salt" +msgstr "давс" + +msgid "hash" +msgstr "хаш" + +msgid "variety" +msgstr "боломж" + +msgid "version" +msgstr "хувилбар" + +msgid "memory cost" +msgstr "санах ойн өртөг" + +msgid "time cost" +msgstr "цагын зардал" + +msgid "parallelism" +msgstr "зэрэгцүүлэлт" + +msgid "work factor" +msgstr "ажлын байгуулагч" + +msgid "checksum" +msgstr "шалгах дүн" + +msgid "name" +msgstr "нэр" + +msgid "content type" +msgstr "агуулгын төрөл" + +msgid "codename" +msgstr "Код" + +msgid "permission" +msgstr "зөвшөөрөл" + +msgid "permissions" +msgstr "зөвшөөрлүүд" + +msgid "group" +msgstr "бүлэг " + +msgid "groups" +msgstr "бүлгүүд" + +msgid "superuser status" +msgstr "Удирдлагын төлөв" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Энэ хэрэглэгчид бүх зөвшөөрөл байгааг ил тод харуулалгүй тодорхойлно. " + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Хэрэглэгчийн харьяалагдах бүлгүүд. Хэрэглэгчид сонгосон бүлгийн бүх эрх " +"зөвшөөрөгдөх болно. " + +msgid "user permissions" +msgstr "хэрэглэгчийн эрхүүд" + +msgid "Specific permissions for this user." +msgstr "Хэрэглэгчид тодорхойлж өгсөн эрх" + +msgid "username" +msgstr "хэрэглэгчийн нэр" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Заавал. 150 ба түүнээс бага үсэгтэй. Зөвхөн латин үсэг, тоо болон @/./+/-/_ " +"тэмдэгтүүдийг зөвшөөрнө." + +msgid "A user with that username already exists." +msgstr "Ийм хэрэглэгчийн нэртэй хэрэглэгч өмнө нь бүртгүүлсэн байна." + +msgid "first name" +msgstr "нэр" + +msgid "last name" +msgstr "овог" + +msgid "email address" +msgstr "имэйл хаяг" + +msgid "staff status" +msgstr "Хэрэглэгчдийн төлөв" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Уг удирдлагын сайт руу хэрэглэгч нэвтрэх боломжтой эсэхийг тодорхойлно." + +msgid "active" +msgstr "идэвхтэй" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Энэ хэрэглэгчийг идэвхтэй болгох эсэхийг тодорхойлно. Бүртгэлийг нь устгахын " +"оронд сонгохгүй байхад л хангалттай." + +msgid "date joined" +msgstr "бүртгүүлсэн огноо" + +msgid "user" +msgstr "хэрэглэгч " + +msgid "users" +msgstr "хэрэглэгчид" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Нууц үг хэтэрхий богино байна. Хамгийн багадаа %(min_length)d тэмдэгтээс " +"бүрдэх ёстой." +msgstr[1] "" +"Нууц үг хэтэрхий богино байна. Хамгийн багадаа %(min_length)d тэмдэгтээс " +"бүрдэх ёстой." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Нууц хамгийн багадаа %(min_length)d тэмдэгтээс бүрдэх ёстой." +msgstr[1] "Нууц хамгийн багадаа %(min_length)d тэмдэгтээс бүрдэх ёстой." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Нууц үг %(verbose_name)s мэдээлэлтэй хэтэрхий адилхан байна." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Таны нууц үг бусад хувийн мэдээлэлтэй төстэй байж болохгүй." + +msgid "This password is too common." +msgstr "Энэ нууц үг хэтэрхий нийтлэг байна." + +msgid "Your password can't be a commonly used password." +msgstr "Таны нууц үг хүмүүсийн нийтлэг ашигладаг нууц үг байж болохгүй." + +msgid "This password is entirely numeric." +msgstr "Нууц үг дан тооноос бүрдсэн байна." + +msgid "Your password can't be entirely numeric." +msgstr "Таны нууц үг бүхэлдээ тооноос бүрдэж болохгүй." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s cайт дээрх нууц үг шинэчлэлт" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Зөв хэрэглэгчийн нэр оруулна уу. Англи хэлний үсэг, тоо болон @ . + - _ " +"тэмдэгтүүдийг ашиглаж болно." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Зөв хэрэглэгчийн нэр оруулна уу. Англи хэлний үсэг, тоо болон @ . + - _ " +"тэмдэгтүүдийг ашиглаж болно." + +msgid "Logged out" +msgstr "Гарсан" + +msgid "Password reset" +msgstr "Нууц үг шинэчлэх" + +msgid "Password reset sent" +msgstr "Нууц үг шинэчлэх хүсэлт илгээгдлээ" + +msgid "Enter new password" +msgstr "Шинэ нууц үг оруулах" + +msgid "Password reset unsuccessful" +msgstr "Нууц үг шинэчлэлт амжилтгүй боллоо" + +msgid "Password reset complete" +msgstr "Нууц үг шинэчилж дууслаа" + +msgid "Password change" +msgstr "Нууц үг солих" + +msgid "Password change successful" +msgstr "Нууц үг амжилттай солилоо" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f33dd236cb23b6d243cbe474d0e76ecd70c47c57 GIT binary patch literal 468 zcmZWl!A=4(6vXIhkDfg|6AuvVwhPffag7ln!9XNr^2x~NpYyY?8sY?bfxJSVBCnAZI>>K4?BZH!4wzcAl58|4B~QXj4lNel5Y{G92UwR!w@nr?hC(uvAFA^F zuZtLOvnE3XW8pkWtk5nO-dGOLLTlw(Ttrf)CYml~6O zmRQltt*2!!l\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ff5fb70bcf110bf8738d19cbe5e1814bbccbd58a GIT binary patch literal 7654 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 PQXQPke_Q&p1gn1o6zt51 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..b05dc590b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-16 14:43+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "Info peribadi" + +msgid "Permissions" +msgstr "Kebenaran" + +msgid "Important dates" +msgstr "Tarikh-tarikh penting" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objek %(name)s dengan kunci utama %(key)r tidak wujud." + +msgid "Password changed successfully." +msgstr "Kata laluan berjaya ditukar." + +#, python-format +msgid "Change password: %s" +msgstr "Tukar kata laluan: %s" + +msgid "Authentication and Authorization" +msgstr "Pengesahan dan Kebenaran" + +msgid "password" +msgstr "kata laluan" + +msgid "last login" +msgstr "log masuk terakhir" + +msgid "No password set." +msgstr "Kata laluan tidak ditetapkan." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Format kata laluan tidak sah atau algoritma hash yang tidak dapat dipastikan." + +msgid "The two password fields didn’t match." +msgstr "Medan kedua-dua kata laluan tidak sepadan." + +msgid "Password" +msgstr "Kata laluan" + +msgid "Password confirmation" +msgstr "Pengesahan kata laluan" + +msgid "Enter the same password as before, for verification." +msgstr "" +"Masukkan kata laluan yang sama seperti sebelumnya, bagi tujuan pengesahan." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Kata laluan mentah tidak disimpan, maka tiada cara untuk melihat kata laluan " +"pengguna, tetapi anda boleh menukar kata laluan menggunakan borang ini." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Sila masukkan %(username)s dan kata laluan yang betul. Ambil perhatian " +"bahawa kedua-dua medan berkemungkinan kes-sensitif. " + +msgid "This account is inactive." +msgstr "Akaun ini tidak aktif." + +msgid "Email" +msgstr "Emel" + +msgid "New password" +msgstr "Kata laluan baru" + +msgid "New password confirmation" +msgstr "Pengesahan kata laluan baru" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Kata laluan lama anda tidak dimasukkan dengan betul. Sila masukkan sekali " +"lagi." + +msgid "Old password" +msgstr "Kata laluan lama" + +msgid "Password (again)" +msgstr "Kata laluan (sekali lagi)" + +msgid "algorithm" +msgstr "algortima" + +msgid "iterations" +msgstr "lelaran" + +msgid "salt" +msgstr "garam" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "kepelbagaian" + +msgid "version" +msgstr "versi" + +msgid "memory cost" +msgstr "kos memori" + +msgid "time cost" +msgstr "kos masa" + +msgid "parallelism" +msgstr "parallelisma" + +msgid "work factor" +msgstr "faktor kerja" + +msgid "checksum" +msgstr "checksum" + +msgid "block size" +msgstr "saiz blok" + +msgid "name" +msgstr "nama" + +msgid "content type" +msgstr "jenis kandungan" + +msgid "codename" +msgstr "nama kod" + +msgid "permission" +msgstr "kebenaran" + +msgid "permissions" +msgstr "kebenaran" + +msgid "group" +msgstr "kumpulan" + +msgid "groups" +msgstr "kumpulan-kumpulan" + +msgid "superuser status" +msgstr "status pengguna hebat" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Menentukan bahawa pengguna ini mempunyai semua kebenaran tanpa memberikannya " +"secara eksplisit." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Pengguna ini adalah ahli kepada kumpulan-kumpulan ini. Pengguna akan " +"mewarisi semua kebenaran yang diberikan kepada kumpulan-kumpulan ini." + +msgid "user permissions" +msgstr "kebenaran penguna" + +msgid "Specific permissions for this user." +msgstr "Kebenaran-kebenaran spesifik bagi pengguna ini." + +msgid "username" +msgstr "nama pengguna" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Diperlukan. 150 karakter atau kurang. Huruf, digit dan @/./+/-/_ sahaja." + +msgid "A user with that username already exists." +msgstr "Pengguna dengan nama pengguna ini sudah wujud." + +msgid "first name" +msgstr "nama pertama" + +msgid "last name" +msgstr "nama akhir" + +msgid "email address" +msgstr "alamat emel" + +msgid "staff status" +msgstr "status staf" + +msgid "Designates whether the user can log into this admin site." +msgstr "Menentukan samada pengguna ini boleh log masuk ke laman pentadbiran." + +msgid "active" +msgstr "aktif" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Menentukan samada pengguna ini patut dilayan sebagai aktif. Padam pilihan " +"ini daripada menghapuskan terus akaun pengguna." + +msgid "date joined" +msgstr "tarikh serta" + +msgid "user" +msgstr "pengguna" + +msgid "users" +msgstr "pengguna-pengguna" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Kata laluan ini terlalu singkat. Ia harus mempunyai sekurang-kurangnya " +"%(min_length)d karakter." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Kata laluan anda harus mempunyai sekurang-kurangnya %(min_length)d karakter." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Kata laluan ini hampir sama dengan %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Kata laluan anda tidak boleh hampir sama dengan maklumat peribadi anda yang " +"lain." + +msgid "This password is too common." +msgstr "Kata laluan anda terlalu singkat." + +msgid "Your password can’t be a commonly used password." +msgstr "" +"Kata laluan anda tidak boleh sama dengan kata laluan yang terlalu biasa " +"digunakan." + +msgid "This password is entirely numeric." +msgstr "Aksara kata laluan ini kesemuanya terdiri daripada nombor." + +msgid "Your password can’t be entirely numeric." +msgstr "" +"Kata laluan anda tidak boleh terdiri daripada aksara nombor secara " +"sepenuhnya." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Penetapan semula kata laluan di %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Masukkan nama pengguna yang sah. Nilai ini hanya boleh mengandungi huruf " +"bahasa Inggeris, nombor, dan karakter-karakter @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Masukkan nama pengguna yang sah. Nilai boleh mengandungi huruf, mombor, dan " +"karakter-karakter @/./+/-/_ ." + +msgid "Logged out" +msgstr "Telah di log keluar" + +msgid "Password reset" +msgstr "Penetapan semula kata laluan" + +msgid "Password reset sent" +msgstr "Penetapan semula kata laluan telah dihantar" + +msgid "Enter new password" +msgstr "Masukkan kata laluan yang baru" + +msgid "Password reset unsuccessful" +msgstr "Penetapan semula kata laluan tidak berjaya " + +msgid "Password reset complete" +msgstr "Penetapan semula kata laluan telah lengkap" + +msgid "Password change" +msgstr "Penukaran kata laluan" + +msgid "Password change successful" +msgstr "Penukaran kata laluan berjaya dilakukan" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a08a819519b1e95c21cc49da2a244b89d2a4e12f GIT binary patch literal 1026 zcmZvXOKTKC6opHTuNG0V5)4u+QA5x4OokXc#z$fTkpzb@x-VxcoetgALsgBF>`Ks$ z8#iX*69kuP(1l8j;(ria3iS(oY}|UPCJzWHIP=ZDeb22^Kl}Su2u=VEKpAutT8G^E z4ef{iK*yke&>`sH9zu?Q$3Ztg03HU6VU$6pYu{J{#J-{;!sxjS7BcU%sa4HiNsbCzagI&T+J zGofjVX|70}Db+1xi`2QyQ>D^Epvk2w1j}eD<_p5Iq>!mz$VnoLPP_N3h+sJCB_ zt2J5~ifhAzQ8kJ%7|!uKsoS~BTrIBF1|ytchAAC3BoiuQx{xuw&V)!6o#APVXY?Y{ zpuCd#vgBTL2_BJjSi-{wXL(G=J2K~r(=!WNx8riT+wGRL+nCPtrBbuV%e^;kBHOT+ z^X2l{V0L, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ကိုယ်ရေးအချက်အလက်" + +msgid "Permissions" +msgstr "ခွင့်ပြုချက်များ" + +msgid "Important dates" +msgstr "အရေးကြီးနေ့စွဲများ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "စကားဝှက်" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "အီးမေးလ်" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "ပံုသေနည်း" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "နာမည်" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "အုပ်စု" + +msgid "groups" +msgstr "အုပ်စုများ" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ac2a4c17c3ea7ec831e2c9f119025ab79c6d84f8 GIT binary patch literal 7191 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 BM*#o; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..3d6f37fdc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,301 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2015-2016 +# Jon , 2017,2020 +# Jon , 2013 +# Sigurd Gartmann , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 12:10+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personlig informasjon" + +msgid "Permissions" +msgstr "Rettigheter" + +msgid "Important dates" +msgstr "Viktige datoer" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-objekt med primærnøkkelen %(key)r finnes ikke." + +msgid "Password changed successfully." +msgstr "Passordet er endret." + +#, python-format +msgid "Change password: %s" +msgstr "Endre passord: %s" + +msgid "Authentication and Authorization" +msgstr "Autentisering og autorisasjon" + +msgid "password" +msgstr "passord" + +msgid "last login" +msgstr "siste innlogging" + +msgid "No password set." +msgstr "Passord ikke satt." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ugyldig passordformat eller ukjent hash-algoritme." + +msgid "The two password fields didn’t match." +msgstr "De to passordfeltene er ikke like." + +msgid "Password" +msgstr "Passord" + +msgid "Password confirmation" +msgstr "Passordbekreftelse" + +msgid "Enter the same password as before, for verification." +msgstr "Skriv inn det samme passordet som tidligere, for verifisering." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Selve passordet lagres ikke, så det finnes ingen måte å se denne brukerens " +"passord på. Du kan endre passordet med dette skjemaet." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Vennligst oppgi korrekt %(username)s og passord. Merk at det kan være " +"forskjell på små og store bokstaver." + +msgid "This account is inactive." +msgstr "Denne kontoen er inaktiv." + +msgid "Email" +msgstr "E-post" + +msgid "New password" +msgstr "Nytt passord" + +msgid "New password confirmation" +msgstr "Bekreft nytt passord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ditt gamle passord er galt. Vennligst prøv igjen." + +msgid "Old password" +msgstr "Gammelt passord" + +msgid "Password (again)" +msgstr "Passord (gjenta)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iterasjoner" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variasjon" + +msgid "version" +msgstr "versjon" + +msgid "memory cost" +msgstr "minnekostnad" + +msgid "time cost" +msgstr "tidskostnad" + +msgid "parallelism" +msgstr "parallellitet" + +msgid "work factor" +msgstr "arbeidsfaktor" + +msgid "checksum" +msgstr "sjekksum" + +msgid "name" +msgstr "navn" + +msgid "content type" +msgstr "innholdstype" + +msgid "codename" +msgstr "kodenavn" + +msgid "permission" +msgstr "rettighet" + +msgid "permissions" +msgstr "rettigheter" + +msgid "group" +msgstr "gruppe" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superbruker" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Angir at denne brukeren har alle rettigheter uten å eksplisitt sette dem." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Gruppene denne brukeren er tilknyttet. En bruker vil ha alle rettigheter " +"tilhørende gruppene han/hun er medlem av." + +msgid "user permissions" +msgstr "Brukerrettigheter" + +msgid "Specific permissions for this user." +msgstr "Spesifikke tilganger for denne brukeren." + +msgid "username" +msgstr "brukernavn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Påkrevet. 150 tegn eller færre. Kun bokstaver, tall og @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Det eksisterer allerede en bruker med dette brukernavnet." + +msgid "first name" +msgstr "fornavn" + +msgid "last name" +msgstr "etternavn" + +msgid "email address" +msgstr "e-postadresse" + +msgid "staff status" +msgstr "administrasjonsstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Angir at brukeren kan logge inn på denne administrasjonssiden." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Angir at denne brukeren er aktiv. Avmerk denne i stedet for å slette kontoen." + +msgid "date joined" +msgstr "registrert" + +msgid "user" +msgstr "bruker" + +msgid "users" +msgstr "brukere" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Passordet er for kort. Det må bestå av minst %(min_length)d tegn." +msgstr[1] "Passordet er for kort. Det må bestå av minst %(min_length)d tegn." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Passordet ditt må bestå av minst %(min_length)d tegn." +msgstr[1] "Passordet ditt må bestå av minst %(min_length)d tegn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Passordet er for likt %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Passordet ditt kan ikke være for likt dine andre personopplysninger." + +msgid "This password is too common." +msgstr "Dette passordet er for vanlig." + +msgid "Your password can’t be a commonly used password." +msgstr "Passordet ditt kan ikke være et ofte brukt passord." + +msgid "This password is entirely numeric." +msgstr "Dette passordet inneholder bare tall." + +msgid "Your password can’t be entirely numeric." +msgstr "Passordet ditt kan ikke inneholde bare tall." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Passord-nullstilling på %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Oppgi et gyldig brukernavn. Denne verdien kan kun inneholde bokstaver, tall " +"og @/./+/-/_" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Oppgi et gyldig brukernavn. Denne verdien kan kun inneholde bokstaver, tall " +"og @/./+/-/_" + +msgid "Logged out" +msgstr "Logget ut" + +msgid "Password reset" +msgstr "Tilbakestilling av passord" + +msgid "Password reset sent" +msgstr "Passord-nullstilling sendt" + +msgid "Enter new password" +msgstr "Skriv inn nytt passord" + +msgid "Password reset unsuccessful" +msgstr "Tilbakestilling av passord feilet" + +msgid "Password reset complete" +msgstr "Tilbakestilling av passord fullført" + +msgid "Password change" +msgstr "Passordbytte" + +msgid "Password change successful" +msgstr "Passordbytte gjennomført" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d0eb4ab7d35dec1e10ddd4445334ada10cbae1c GIT binary patch literal 7722 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, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-15 05:39+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "व्यक्तिगत विवरण" + +msgid "Permissions" +msgstr "अनुमतिहरु" + +msgid "Important dates" +msgstr "महत्वपूर्ण मितिहरु" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "पासवर्ड सफलतापूर्वक फेरिएको छ ।" + +#, python-format +msgid "Change password: %s" +msgstr "पासवर्ड फेर्नुहोस : %s" + +msgid "Authentication and Authorization" +msgstr "प्रमाणीकरण तथा अनुमति" + +msgid "password" +msgstr "पासवर्ड" + +msgid "last login" +msgstr "पूर्व लगिन" + +msgid "No password set." +msgstr "पासवर्ड राखिएको छैन ।" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "अमान्य पासवर्ड स्वरूप वा अज्ञात ह्यासिङ अलगोरिदम ।" + +msgid "The two password fields didn’t match." +msgstr "" + +msgid "Password" +msgstr "पासवर्ड" + +msgid "Password confirmation" +msgstr "पासवर्ड पुष्टि" + +msgid "Enter the same password as before, for verification." +msgstr "प्रमाणित गर्न पुन: उही पासवर्ड राख्नु होस ।" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"पासवर्ड जस्ताको त्यस्तै राखेको हुँदैन, त्यसैले हेर्न मिल्दैन । पासवर्ड परिवर्तन गर्न यो फारम भर्नु होस ।" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "कृपया सही %(username)s र पासवर्ड राख्नु होस । " + +msgid "This account is inactive." +msgstr "यो खाता सक्रिय छैन । " + +msgid "Email" +msgstr "ई-मेल" + +msgid "New password" +msgstr "नयाँ पासवर्ड" + +msgid "New password confirmation" +msgstr "नयाँ पासवर्ड पुष्टि" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "तपाईको पुरानो पासवर्ड गलत भयो । कृपया पुन: हाल्नुहोस । " + +msgid "Old password" +msgstr "पुरानो पासवर्ड" + +msgid "Password (again)" +msgstr "पासवर्ड (पुन:)" + +msgid "algorithm" +msgstr "अल्गोरिदम" + +msgid "iterations" +msgstr "पुनरावृत्ति" + +msgid "salt" +msgstr "साल्ट" + +msgid "hash" +msgstr "ह्यास" + +msgid "variety" +msgstr "विविध" + +msgid "version" +msgstr "भर्जन" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "समय" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "वर्क फ्याक्टर" + +msgid "checksum" +msgstr "चेकसम" + +msgid "name" +msgstr "नाम" + +msgid "content type" +msgstr "कन्टेन्ट टाइप" + +msgid "codename" +msgstr "कोडनेम" + +msgid "permission" +msgstr "अनुमति" + +msgid "permissions" +msgstr "अनुमति" + +msgid "group" +msgstr "समुह" + +msgid "groups" +msgstr "समुहहरु" + +msgid "superuser status" +msgstr "प्रधान प्रयोगकर्ता प्रतिष्ठा " + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "प्रयोग कर्ताका अनुमति " + +msgid "Specific permissions for this user." +msgstr "यो प्रयोगकर्ताको लागि तोकिएको अनुमति ।" + +msgid "username" +msgstr "प्रयोगकर्ता नाम" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "आवश्यक । बढिमा १५० वटा (अक्षर, अंक तथा '@/./+/-/_ ' मात्र)" + +msgid "A user with that username already exists." +msgstr "त्यो प्रयोगकर्ता नाम भएका व्यक्ति पहिले नै छन् ।" + +msgid "first name" +msgstr "नाम" + +msgid "last name" +msgstr "थर" + +msgid "email address" +msgstr "ई-मेल ठेगाना" + +msgid "staff status" +msgstr "स्टाफ प्रतिष्ठा " + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "सक्रिय " + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "दर्ता भएको मिति" + +msgid "user" +msgstr "प्रयोगकर्ता" + +msgid "users" +msgstr "प्रयोगकर्ता" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "पासवर्ड छोटो भयो । कम्तीमा %(min_length)d लम्बाई हुनु पर्दछ ।" +msgstr[1] "पासवर्ड छोटो भयो । कम्तीमा %(min_length)d लम्बाई हुनु पर्दछ ।" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "पासवर्डमा कम्तीमा पनि %(min_length)d अक्षर हुनु पर्छ । " +msgstr[1] "पासवर्डमा कम्तीमा पनि %(min_length)d अक्षरहरू हुनु पर्छ । " + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "%(verbose_name)s संग मिल्दो पासवर्ड भयो ।" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "यो पासवर्ड साधारण भयो ।" + +msgid "Your password can’t be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "यो पासवर्डमा अंक मात्र छ ।" + +msgid "Your password can’t be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s को पासवर्ड पून: राख्नु " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"उपयुक्त प्रयोगकर्ता नाम राख्नु होस । अङ्ग्रेजी अक्षर, अङ्क र @/./+/-/_ मात्र मान्य छन् ।" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "उपयुक्त प्रयोगकर्ता नाम राख्नु होस । अक्षर, अङ्क र @/./+/-/_ मात्र मान्य छन् ।" + +msgid "Logged out" +msgstr "लग आउट " + +msgid "Password reset" +msgstr "पासवर्ड पून: दर्ता" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "नयाँ पासवर्ड राख्नु होस ।" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "पासवर्ड फेर्नु" + +msgid "Password change successful" +msgstr "पासवर्ड फेर्न सफल" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b87e16b56622cbcb69462802788f63a2f8ff4cd GIT binary patch literal 7451 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 Cf0!Wv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..900c14f7e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,314 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bas Peschier , 2013 +# Erik Romijn , 2013 +# Erik Romijn , 2013 +# Evelijn Saaltink , 2016 +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# jaap3 , 2016 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011-2012 +# Sander Steffann , 2015 +# Tino de Bruijn , 2011 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:42+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Persoonlijke gegevens" + +msgid "Permissions" +msgstr "Rechten" + +msgid "Important dates" +msgstr "Belangrijke datums" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-object met primaire sleutel %(key)r bestaat niet." + +msgid "Password changed successfully." +msgstr "Het wachtwoord is gewijzigd." + +#, python-format +msgid "Change password: %s" +msgstr "Wachtwoord wijzigen: %s" + +msgid "Authentication and Authorization" +msgstr "Authenticatie en autorisatie" + +msgid "password" +msgstr "wachtwoord" + +msgid "last login" +msgstr "laatste aanmelding" + +msgid "No password set." +msgstr "Er is geen wachtwoord ingesteld." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ongeldige wachtwoordindeling of onbekend hash-algoritme." + +msgid "The two password fields didn’t match." +msgstr "De twee wachtwoordvelden komen niet overeen." + +msgid "Password" +msgstr "Wachtwoord" + +msgid "Password confirmation" +msgstr "Bevestiging wachtwoord" + +msgid "Enter the same password as before, for verification." +msgstr "Voer ter verificatie nogmaals het wachtwoord in." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Wachtwoorden worden niet als tekst opgeslagen, dus u kunt het wachtwoord van " +"deze gebruiker niet zien. U kunt het wel wijzigen via dit " +"formulier." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Voer een juiste %(username)s en wachtwoord in. Let op dat beide velden " +"hoofdlettergevoelig zijn." + +msgid "This account is inactive." +msgstr "Deze account is inactief." + +msgid "Email" +msgstr "E-mailadres" + +msgid "New password" +msgstr "Nieuw wachtwoord" + +msgid "New password confirmation" +msgstr "Nieuw wachtwoord bevestigen" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Uw oude wachtwoord is niet juist ingevoerd. Voer het opnieuw in." + +msgid "Old password" +msgstr "Oud wachtwoord" + +msgid "Password (again)" +msgstr "Wachtwoord (nogmaals)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iteraties" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variatie" + +msgid "version" +msgstr "versie" + +msgid "memory cost" +msgstr "geheugenkosten" + +msgid "time cost" +msgstr "tijdskosten" + +msgid "parallelism" +msgstr "evenwijdigheid" + +msgid "work factor" +msgstr "arbeidsfactor" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "naam" + +msgid "content type" +msgstr "inhoudstype" + +msgid "codename" +msgstr "codenaam" + +msgid "permission" +msgstr "recht" + +msgid "permissions" +msgstr "rechten" + +msgid "group" +msgstr "groep" + +msgid "groups" +msgstr "groepen" + +msgid "superuser status" +msgstr "supergebruikerstatus" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Bepaalt dat deze gebruiker alle rechten heeft, zonder deze expliciet toe te " +"wijzen." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"De groep waartoe deze gebruiker behoort. Gebruikers krijgen alle rechten " +"behorende bij hun groepen." + +msgid "user permissions" +msgstr "gebruikersrechten" + +msgid "Specific permissions for this user." +msgstr "Specifieke rechten voor deze gebruiker." + +msgid "username" +msgstr "gebruikersnaam" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Vereist. 150 tekens of minder. Alleen letters, cijfers en de tekens @/,/+/-/" +"_ zijn toegestaan." + +msgid "A user with that username already exists." +msgstr "Er bestaat al een gebruiker met deze gebruikersnaam." + +msgid "first name" +msgstr "voornaam" + +msgid "last name" +msgstr "achternaam" + +msgid "email address" +msgstr "e-mailadres" + +msgid "staff status" +msgstr "stafstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Bepaalt of de gebruiker zich op deze beheerwebsite kan aanmelden." + +msgid "active" +msgstr "actief" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Bepaalt of deze gebruiker als actief dient te worden behandeld. U kunt dit " +"uitvinken in plaats van een gebruiker te verwijderen." + +msgid "date joined" +msgstr "datum toegetreden" + +msgid "user" +msgstr "gebruiker" + +msgid "users" +msgstr "gebruikers" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Dit wachtwoord is te kort. De minimale lengte is %(min_length)d teken." +msgstr[1] "" +"Dit wachtwoord is te kort. De minimale lengte is %(min_length)d tekens." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Uw wachtwoord moet minstens %(min_length)d teken lang zijn." +msgstr[1] "Uw wachtwoord moet minstens %(min_length)d tekens lang zijn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Het wachtwoord lijkt te veel op de %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Uw wachtwoord mag niet te veel op uw andere persoonlijke gegevens lijken." + +msgid "This password is too common." +msgstr "Dit wachtwoord is te algemeen." + +msgid "Your password can’t be a commonly used password." +msgstr "Uw wachtwoord mag geen veelgebruikt wachtwoord zijn." + +msgid "This password is entirely numeric." +msgstr "Dit wachtwoord bevat alleen cijfers." + +msgid "Your password can’t be entirely numeric." +msgstr "Uw wachtwoord mag niet volledig uit cijfers bestaan." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Wachtwoordherinitialisatie voor %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Voer een geldige gebruikersnaam in. Deze waarde mag alleen Engelse letters, " +"cijfers en de tekens @/./+/-/_ bevatten." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Voer een geldige gebruikersnaam in. Deze waarde mag alleen letters, cijfers " +"en de tekens @/./+/-/_ bevatten." + +msgid "Logged out" +msgstr "Afgemeld" + +msgid "Password reset" +msgstr "Wachtwoordherinitialisatie" + +msgid "Password reset sent" +msgstr "Wachtwoordherinitialisatie verstuurd" + +msgid "Enter new password" +msgstr "Voer nieuw wachtwoord in" + +msgid "Password reset unsuccessful" +msgstr "Wachtwoordherinitialisatie mislukt" + +msgid "Password reset complete" +msgstr "Wachtwoordherinitialisatie voltooid" + +msgid "Password change" +msgstr "Wachtwoordwijziging" + +msgid "Password change successful" +msgstr "Wachtwoordwijziging is geslaagd" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33f7a5041dbc8bd6b0340fe10c47c8c09719f026 GIT binary patch literal 7147 zcmchbU5sQ!6@UvxenvqA1Vm+v#g!SD?wMU!U1ooPWoKbwcXrraHbD|LcluU$-|5?R zn|tfd&?`g|6JHDoJ}6NPCI~(d#V6f0Ax0fSM13I<V^3b!OkV^xUs2o_lGZqCNWorMhtXLwxZ3={%)&z(2z&c=h>8X}Aww z1`S+MH94fxZ*&6ii_{uL;G`z?sc)oj8j9ZcKwhaM@B!F{&%&4B zKA7Ol;_olOL+}+S{&(e7mEYY8#SfRDtn&yI`Om;7;m_d|yq`ha;g?|z{sfBrzrcs! zG>gbNJq_hNpM|o|7oeQei%{(KODOhw6^ehn0cG4@q1fr4Q1&!xtHwR_holxW*gd*-_=ZhUzo4eYE{FIsebmRyh+)KNgCg&wN?iQLnJ82RV zgJ+g6;uCYBV{70|kYo3DlrFJ@p*&CtY82G1g2#LhctAEb$Ik3YDh`aJEfu}-n~ zZW<<4_t50L57Fjnx6t3F8qr9&>rmwe5@;R03I5UN|nbYRsq;Pe0yDkfpSL0nfa{i~t z(ove5DDGDS3r3c%ZLCWgkxMeGBO7b!%JSr-?@@QOBik~%7Zt^7mdA5?OQH6eB5B#k zv8b2s+DTEZ*p3R8NOjNT-J~cGS$Hk7QgrL3Nh5J-Un2|wiET08bnD{+SKEfZTwYWn z85r6q^^~ zC4702W(}T;cTXKaXu!NwqvtZtMQMv zH*MO&#ax@SKbW;zoD3eK7RFT?{~hO!6j9Q$> z)Tjev!NHlOi?t;bmOad>|NTgkG&q(Yp}A;4Qh=B`JZf|+vAkRmaY1Ux-FC9 z%qOZ~-#D)zJU8~0c3js{tf@sDD6>&Yv@|odn3||C8UfyK8(E%=06mxZ%Kd zb-j=|f<-dMQbw+6CMJyw@6`lR17S7PL0O3)btD>j5OI|opMna9yTsGFkZ3h@5*#+u zt3(C?To{ob0`$$tzF7#*gFuXvR^m{5T^LHt*45FTX^5Y%OJm~y zL(S{z7@D>6tn5h+93-42lV-L>Pgd8%985ZF8FxlnY~@4_j*n4H)M!iQVYf*hq*f~o z_s$9~!+c3MNh1{T#^of5$fc|p_)ay+t&RmqIKnuIE#`KdrE9ch91=rccztMT4uW97=3R5VEQYAMYc9o+Y% zQH{1~bc(X88d+>43-N_W;2LrLo>6j_=;bW2CRRr7UGDpsR9Pr)09?h-@R6sg_)~JJ zC=zJyuZKdV;!%_giLJi+8C}!OsG1sC;gs*_ap9(^;dbt-fxXqJZW;Sps3J<8DqPfT zYCc^_PsvbUWQ7iwaBq6)(yRQdk+i~h_;uw?p;n?iF|MzOU#XH5wN*zqF3ErZm`xlpa^=SDH z$i@qOo8?7EPqv-w&CSfLuCCUdh)J5};X08&Q|UKA8U)Q)J2N$L=)j@*(N4D3XD9Bc z4!m}Z1E15*JnUwADZ#bVM?RP5?)#4Iuk9F(leL;Augw#mF}J{+-m#Rpp~7?8+KI)q zi4{E7Z5Q8^dOE@()WSNAg4^kJdM;M_R&MP*rmpTpThiTdFJX)?LD64Na%%j6Gqv7Z zhp$m7j|RWkEQx<)&>tdAUwbLm99E6B|l8}9#(P>1HNF~i&@tY>jFIOA8Cnk_ce2eU5 z|9)M5@EIV;oF*4p9hW}n{aK8yCTVJ2MP22r0^jOJ##LqY!rJM0g_%jKDy)5U1utxp zGIRc%-s{72eNd*Oh{P|&#F6HtL!KBUBU~;odp$Fr-x$?qJSi8+KB1EEnrqMHRl=*p zvG(V^Rt=fUzqD1x z<9{q9yN*t6n3r8x++|l2R4tYo}LqMjqle8`(ORJ4ddS%6=HT%I#S*T!F)k@(#0xRvb6t zJFhW3V9EkY@ahKj1##BvrG5F6G0M+a^4;5Y!|LyTqIZ-*1x%4k1>E7r%JP)ENr_M8 z8JUkdxKq`^RY3 zr7*Q{ONld9Q*k6~I^4qKC#i<58dSq6b+qGGb&plmg$nRh@Wu*ZtQ@WaTDc@H2C_q! igs{njn5xgOT75-VDTk{X2*>eBH_Dd`f|{6-lK8(_`73k) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..3216de3a9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,301 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-12 08:38+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personleg informasjon" + +msgid "Permissions" +msgstr "Løyve" + +msgid "Important dates" +msgstr "Viktige datoar" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-objekt med primærnøkkelen %(key)r eksisterer ikkje." + +msgid "Password changed successfully." +msgstr "Passordet er endra." + +#, python-format +msgid "Change password: %s" +msgstr "Endre passord: %s" + +msgid "Authentication and Authorization" +msgstr "Stadfesting og Autorisasjon" + +msgid "password" +msgstr "passord" + +msgid "last login" +msgstr "siste innlogging" + +msgid "No password set." +msgstr "Passord ikkje sett." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ugyldig passordformat eller ukjend hash-algoritme." + +msgid "The two password fields didn’t match." +msgstr "Dei to passordfelta er ikkje like." + +msgid "Password" +msgstr "Passord" + +msgid "Password confirmation" +msgstr "Stadfesting av passord" + +msgid "Enter the same password as before, for verification." +msgstr "Skriv inn det samme passordet som før, for verifisering." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Sjølve passordet vert ikkje lagra, så det finnast ingen måte å sjå denne " +"brukaren sitt passord, men du kan endra passordet med dette " +"skjemaet." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Oppgje korrekt %(username)s og passord. Merk at det er skilnad på små og " +"store bokstavar." + +msgid "This account is inactive." +msgstr "Denne kontoen er inaktiv." + +msgid "Email" +msgstr "E-post" + +msgid "New password" +msgstr "Nytt passord" + +msgid "New password confirmation" +msgstr "Stadfest nytt passord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Det gamle passordet er feil. Prøv omatt." + +msgid "Old password" +msgstr "Gammalt passord" + +msgid "Password (again)" +msgstr "Passord (gjenta)" + +msgid "algorithm" +msgstr "algoritme" + +msgid "iterations" +msgstr "iterasjonar" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variasjon" + +msgid "version" +msgstr "versjon" + +msgid "memory cost" +msgstr "minnekostnad" + +msgid "time cost" +msgstr "tidskostnad" + +msgid "parallelism" +msgstr "parallellitet" + +msgid "work factor" +msgstr "arbeidsfaktor" + +msgid "checksum" +msgstr "kontrollsum" + +msgid "block size" +msgstr "blokkstorleik" + +msgid "name" +msgstr "namn" + +msgid "content type" +msgstr "innhaldstype" + +msgid "codename" +msgstr "kodenamn" + +msgid "permission" +msgstr "løyve" + +msgid "permissions" +msgstr "løyve" + +msgid "group" +msgstr "gruppe" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superbrukar" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Angir at denne brukaren har alle løyve utan å eksplisitt sette dei." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Gruppene brukaren tilhøyrer. Brukarar får løyva til gruppene dei er med i." + +msgid "user permissions" +msgstr "Brukerløyve" + +msgid "Specific permissions for this user." +msgstr "Løyva til denne brukaren." + +msgid "username" +msgstr "brukarnamn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Nødvendig. 150 teikn eller færre. Berre bokstavar, tall @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Det eksisterar allereie ein brukar med dette brukernamnet." + +msgid "first name" +msgstr "fornamn" + +msgid "last name" +msgstr "etternamn" + +msgid "email address" +msgstr "e-postadresse" + +msgid "staff status" +msgstr "administrasjonsstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Angir at brukaren kan logge inn på denne administrasjonssida." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Angir at denne brukaren er aktiv. Avmerk denne i staden for å slette kontoen." + +msgid "date joined" +msgstr "registrert" + +msgid "user" +msgstr "brukar" + +msgid "users" +msgstr "brukarar" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Dette passordet er for stutt. Det må innehalde minst %(min_length)d teikn." +msgstr[1] "" +"Dette passordet er for stutt. Det må innehalde minst %(min_length)d teikn." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Passordet ditt må innehalde minst %(min_length)d teikn." +msgstr[1] "Passordet ditt må innehalde minst %(min_length)d teikn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Passordet er for likt %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Passordet ditt kan ikkje vere for likt dine andre personopplysingar." + +msgid "This password is too common." +msgstr "Dette passordet er for vanleg." + +msgid "Your password can’t be a commonly used password." +msgstr "Passordet ditt kan ikkje vere eit ofte brukt passord." + +msgid "This password is entirely numeric." +msgstr "Dette passordet innehalder berre tal." + +msgid "Your password can’t be entirely numeric." +msgstr "Passordet ditt kan ikkje innehalde berre tal." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Passordnullstilling på %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Oppgje eit gyldig brukarnamn. Denne verdien kan berre innehalde bokstavar, " +"tal, og @/./+/-/_ teikn." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Oppgje eit gyldig brukarnamn. Denne verdien kan berre innehalde bokstavar, " +"tal, og @/./+/-/_ teikn." + +msgid "Logged out" +msgstr "Logga ut" + +msgid "Password reset" +msgstr "Nullstill passord" + +msgid "Password reset sent" +msgstr "Passordnullstilling utsendt" + +msgid "Enter new password" +msgstr "Oppgje nytt passord" + +msgid "Password reset unsuccessful" +msgstr "Passordet vart ikkje nullstilt" + +msgid "Password reset complete" +msgstr "Passord nullstilt" + +msgid "Password change" +msgstr "Endre passord" + +msgid "Password change successful" +msgstr "Passord endra" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..062d3a9c928d349daf641a0d23b482d1195839bb GIT binary patch literal 4434 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..e762d7277 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,288 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Персоналон инфо" + +msgid "Permissions" +msgstr "Бартӕ" + +msgid "Important dates" +msgstr "Ахсджиаг бонтӕ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Пароль ивд ӕрцыд." + +#, python-format +msgid "Change password: %s" +msgstr "Фӕив пароль: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "пароль" + +msgid "last login" +msgstr "фӕстаг бахызт" + +msgid "No password set." +msgstr "Ницы пароль уыд ӕвӕрд." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Паролы формат раст нӕу, кӕнӕ хӕшты алгоритм бӕрӕг нӕу." + +msgid "The two password fields didn't match." +msgstr "Дыууӕ паролы ӕмхуызӕн не сты." + +msgid "Password" +msgstr "Пароль" + +msgid "Password confirmation" +msgstr "Паролы бӕлвырдгӕнӕн" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Дӕ хорзӕхӕй, раст %(username)s ӕмӕ пароль бафысс. Дӕ сӕры дар уый, ӕмӕ дыууӕ " +"дӕр гӕнӕн ис стыр ӕмӕ гыццыл дамгъӕтӕ ӕвзарой." + +msgid "This account is inactive." +msgstr "Ацы аккаунт ницы архайы." + +msgid "Email" +msgstr "Электрон пост" + +msgid "New password" +msgstr "Ног пароль" + +msgid "New password confirmation" +msgstr "Нӕуӕг паролы бӕлвырдгӕнӕн" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Дӕ зӕронд пароль раст амынд нӕу. Дӕ хорзӕхӕй, нӕуӕгӕй йӕ бафысс." + +msgid "Old password" +msgstr "Зӕронд пароль" + +msgid "Password (again)" +msgstr "Пароль (ногӕй)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "итерацитӕ" + +msgid "salt" +msgstr "цӕхх" + +msgid "hash" +msgstr "хӕш" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "куысты фактор" + +msgid "checksum" +msgstr "бӕлвырдсуммӕ" + +msgid "name" +msgstr "ном" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "кодном" + +msgid "permission" +msgstr "бар" + +msgid "permissions" +msgstr "бартӕ" + +msgid "group" +msgstr "къорд" + +msgid "groups" +msgstr "къордтӕ" + +msgid "superuser status" +msgstr "хистӕр архайӕджы статус" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Ацы архайӕгӕн алы бар дӕр дӕтты, цӕмӕй сӕ хицӕнӕй дӕттын ма хъӕуа." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "архайӕджы бартӕ" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "фӕсномыг" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Ахӕм фӕсномыгимӕ архайӕг нырид ис." + +msgid "first name" +msgstr "ном" + +msgid "last name" +msgstr "мыггаг" + +msgid "email address" +msgstr "электрон посты адрис" + +msgid "staff status" +msgstr "куысты уавӕр" + +msgid "Designates whether the user can log into this admin site." +msgstr "Бӕрӕг кӕны архайӕгӕн йӕ бон у ацы армдарӕн сайтмӕ хизын, ӕви нӕ." + +msgid "active" +msgstr "активон" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Бӕрӕг кӕны ацы архайӕгы хъӕуы нымайын активоныл, ӕви нӕ. Йӕ нысан ын сис " +"хафыны бӕсты." + +msgid "date joined" +msgstr "баиуы бон" + +msgid "user" +msgstr "архайӕг" + +msgid "users" +msgstr "архайджытӕ" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s-ы нӕуӕг пароль ӕвӕрӕн" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Рахизын" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9a043b610a1a7201528946be83f4cd948c63faad GIT binary patch literal 3666 zcmai!U5p#W9l!^gLTf%sDIeu~piOhvVBej4(BO~?NP`GX;2I93DpIAzJGS?3y=(2R z&xus2fJ71qRJ)=EsZmcj2APKY%yFOYkcAZ+H#-Kimwj#;EA4!iV7= zcm@0&{5D*MqIacW3PsO*Q1pBN#lMdsKlL~MIA@FXUB&!yDChS>R4EtA`33kkxn6<+^PAc919%9EzEe=@@n^UM z{|Yty1B{NrN&DSU?cCY*W*?uXJ4 zZ$YVV6=%K=AAvI852X(l;WYd$6hBuBegb9RKMVdB;*u&+1le~3ya~=gS$_lGSKIM?wY%L3qr?dk?K+8x)$U-)@jZ9ARX4(@ zjp{Jc-C!{Ydx35_amx#u7-@zPw%Zl8Cu}y2tHW-ho-n=P;dK*T4}*p$%Dga8PlUr= zIyOl~J?W2(s=30^;XqF~O~(r+M+8;T(e?d$rD2_aO#P-WGd=cVK>s@ z8rOBtiM0t56Oj)usE1Kx>ItstIo~+3$z|G0v<;}Da!qQOOjU20`eNK|t9s}fsiu<3 z=!MV=jH`@PO*^g|5ws$oaiZ;}W)yZi%KpbnN~C-TnIAU2ARpRo_HWP!sxwT?nqjPB z$4^w8IE{wpKk2g4WvlJBVnN2rE{t@^rzr(~mnrKsomq&o#b&5O0`1 zVj!(;P*K~Ts71{Ch{G;V< zqkUqlVWRRbn#|=s*7UY#y=3Tcjr&!a^ShDbmmlR0$2A>v>@?m{-LCWDj)_3uy+hAT zZZD}UeJM-N>n#0a)_);O-^$YWvvietnx!9R=?lZr*)e-gW$A@1y_ltEhnp{C{pZ+u zChNZ<+C=9&%vnB?ojjqklr!i(pQY!plcmQHzRMob(LZWGQCWJ#Dmcs<2VTz)ujKsZM4X?qeQc!SCnb`f6@)r(nrd@w(b#Cn+iiP3AhFIG8+3GXB- z23u?pdAx71h94wQR4-e=9pKYNKmkCr8<-tpB{t64h8iF-OpUl+;+^mr{6M zBJ97HdqU}?3}k4Ka#2Po_(RMej!}XBFYM) z{?|7YO-+eVNUDwvO7yi=!{q1!aE0;&NDJnYBD*xlbNI;`e#%`>H2kV%+SpEcAHBKPGmrV(hHtYSoZ z^UsDTl^f0hlE%fwW%=~HX7fTvv3edMh1>Y)8JV&f#+qD+Q*7QiFYY=L+~NCzTCrZ- zYMZ8Xqj02sG}_oboEg)ZW0pu0S;5{4N0_YG`DuK}TL6iCD=8c)!wOm2_*i=3, 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "ਨਿੱਜੀ ਜਾਣਕਾਰੀ" + +msgid "Permissions" +msgstr "ਅਧਿਕਾਰ" + +msgid "Important dates" +msgstr "ਖਾਸ ਮਿਤੀਆਂ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "ਪਾਸਵਰਡ ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲਿਆ ਗਿਆ ਹੈ।" + +#, python-format +msgid "Change password: %s" +msgstr "ਪਾਸਵਰਡ ਬਦਲੋ: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "ਪਾਸਵਰਡ" + +msgid "last login" +msgstr "ਆਖਰੀ ਲਾਗਇਨ" + +msgid "No password set." +msgstr "ਕੋਈ ਪਾਸਵਰਡ ਸੈੱਟ ਨਹੀਂ।" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "ਗਲਤ ਪਾਸਵਰਡ ਫਾਰਮੈਟ ਜਾਂ ਅਣਜਾਣ ਹੈਸ਼ ਐਲੋਗਰਿਥਮ ਹੈ।" + +msgid "The two password fields didn't match." +msgstr "ਦੋਵੇਂ ਪਾਸਵਰਡ ਖੇਤਰ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।" + +msgid "Password" +msgstr "ਪਾਸਵਰਡ" + +msgid "Password confirmation" +msgstr "ਪਾਸਵਰਡ ਪੁਸ਼ਟੀ" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ਇਹ ਅਕਾਊਂਟ ਗ਼ੈਰ-ਸਰਗਰਮ ਹੈ।" + +msgid "Email" +msgstr "ਈਮੇਲ" + +msgid "New password" +msgstr "ਨਵਾਂ ਪਾਸਵਰਡ" + +msgid "New password confirmation" +msgstr "ਨਵਾਂ ਪਾਸਵਰਡ ਪੁਸ਼ਟੀ" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "ਤੁਹਾਡਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਗਲਤ ਦਿੱਤਾ ਗਿਆ ਸੀ। ਇਸ ਨੂੰ ਫੇਰ ਦਿਉ ਜੀ।" + +msgid "Old password" +msgstr "ਪੁਰਾਣਾ ਪਾਸਵਰਡ" + +msgid "Password (again)" +msgstr "ਪਾਸਵਰਡ (ਫੇਰ)" + +msgid "algorithm" +msgstr "ਐਲਗੋਰਿਥਮ" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "ਸਾਲਟ" + +msgid "hash" +msgstr "ਹੈਸ਼" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "ਵਰਕ ਫੈਕਟਰ" + +msgid "checksum" +msgstr "ਚੈਕਸਮ" + +msgid "name" +msgstr "ਨਾਂ" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "ਕੋਡ-ਨਾਂ" + +msgid "permission" +msgstr "ਅਧਿਕਾਰ" + +msgid "permissions" +msgstr "ਅਧਿਕਾਰ" + +msgid "group" +msgstr "ਗਰੁੱਪ" + +msgid "groups" +msgstr "ਗਰੁੱਪ" + +msgid "superuser status" +msgstr "ਸੁਪਰਯੂਜ਼ਰ ਹਾਲਤ" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ਯੂਜ਼ਰ ਅਧਿਕਾਰ" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "ਯੂਜ਼ਰ ਨਾਂ" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ਉਸ ਯੂਜ਼ਰ ਨਾਂ ਨਾਲ ਯੂਜ਼ਰ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।" + +msgid "first name" +msgstr "ਪਹਿਲਾਂ ਨਾਂ" + +msgid "last name" +msgstr "ਆਖਰੀ ਨਾਂ" + +msgid "email address" +msgstr "ਈਮੇਲ ਐਡਰੈਸ" + +msgid "staff status" +msgstr "ਸਟਾਫ ਹਾਲਤ" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "ਸਰਗਰਮ" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "ਜੁਆਇੰਨ ਕਰਨ ਦੀ ਮਿਤੀ" + +msgid "user" +msgstr "ਯੂਜ਼ਰ" + +msgid "users" +msgstr "ਯੂਜ਼ਰ" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ਲਾਗ ਆਉਟ ਕੀਤਾ" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b737fa7c54eb9aae075e234145d474979df815b1 GIT binary patch literal 7950 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 c8mBBYH4FWMLOK5WX1!4Cwmf_F#Z%+|0, 2011 +# Janusz Harkot , 2015 +# Karol , 2012 +# m_aciek , 2014 +# m_aciek , 2016-2017,2019,2021 +# m_aciek , 2014-2015 +# muszalski , 2016 +# c10516f0462e552b4c3672569f0745a7_cc5cca2 <841826256cd8f47d0e443806a8e56601_19204>, 2014 +# Mattia Procopio , 2014 +# Roman Barczyński, 2012 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 11:17+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Informacje osobiste" + +msgid "Permissions" +msgstr "Uprawnienia" + +msgid "Important dates" +msgstr "Ważne daty" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Obiekt %(name)s o kluczu podstawowym %(key)r nie istnieje." + +msgid "Password changed successfully." +msgstr "Hasło zostało zmienione pomyślnie." + +#, python-format +msgid "Change password: %s" +msgstr "Zmień hasło: %s" + +msgid "Authentication and Authorization" +msgstr "Uwierzytelnienie i autoryzacja" + +msgid "password" +msgstr "hasło" + +msgid "last login" +msgstr "ostatnie logowanie" + +msgid "No password set." +msgstr "Nie ustawiono hasła." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Format hasła jest niewłaściwy, bądź zastosowana została nieznana funkcja " +"skrótu (hash)." + +msgid "The two password fields didn’t match." +msgstr "Hasła w obu polach nie są zgodne." + +msgid "Password" +msgstr "Hasło" + +msgid "Password confirmation" +msgstr "Potwierdzenie hasła" + +msgid "Enter the same password as before, for verification." +msgstr "Wprowadź to samo hasło ponownie, dla weryfikacji." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Nie przechowujemy surowych haseł, więc nie da się zobaczyć hasła tego " +"użytkownika. Możesz jednak je zmienić używając tego " +"formularza." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Wprowadź poprawne wartości pól %(username)s oraz hasło. Uwaga: wielkość " +"liter ma znaczenie." + +msgid "This account is inactive." +msgstr "To konto jest nieaktywne." + +msgid "Email" +msgstr "Adres e-mail" + +msgid "New password" +msgstr "Nowe hasło" + +msgid "New password confirmation" +msgstr "Nowe hasło (powtórz)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Podane stare hasło jest niepoprawne. Proszę podać je jeszcze raz." + +msgid "Old password" +msgstr "Stare hasło" + +msgid "Password (again)" +msgstr "Hasło (powtórz)" + +msgid "algorithm" +msgstr "algorytm" + +msgid "iterations" +msgstr "iteracje" + +msgid "salt" +msgstr "sól" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "odmiana" + +msgid "version" +msgstr "wersja" + +msgid "memory cost" +msgstr "koszt pamięci" + +msgid "time cost" +msgstr "koszt czasu" + +msgid "parallelism" +msgstr "zrównoleglenie" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "suma kontrolna" + +msgid "block size" +msgstr "rozmiar bloku" + +msgid "name" +msgstr "nazwa" + +msgid "content type" +msgstr "typ zawartości" + +msgid "codename" +msgstr "nazwa kodowa" + +msgid "permission" +msgstr "uprawnienie" + +msgid "permissions" +msgstr "uprawnienia" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupy" + +msgid "superuser status" +msgstr "status superużytkownika" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Oznacza, że ten użytkownik ma wszystkie uprawnienia bez ich jawnego " +"przypisywania." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupy do których należy użytkownik. Użytkownik otrzyma wszystkie uprawnienia " +"przypisane do każdej z jego grup." + +msgid "user permissions" +msgstr "uprawnienia użytkownika" + +msgid "Specific permissions for this user." +msgstr "Szczególne uprawnienia dla tego użytkownika." + +msgid "username" +msgstr "nazwa użytkownika" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Wymagana. 150 lub mniej znaków. Jedynie litery, cyfry i @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Użytkownik o tej nazwie już istnieje." + +msgid "first name" +msgstr "imię" + +msgid "last name" +msgstr "nazwisko" + +msgid "email address" +msgstr "adres e-mail" + +msgid "staff status" +msgstr "w zespole" + +msgid "Designates whether the user can log into this admin site." +msgstr "Określa czy użytkownik może zalogować się do panelu administracyjnego." + +msgid "active" +msgstr "aktywny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Określa czy użytkownika należy uważać za aktywnego. Odznacz zamiast usuwać " +"konto." + +msgid "date joined" +msgstr "data dołączenia" + +msgid "user" +msgstr "użytkownik" + +msgid "users" +msgstr "użytkownicy" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"To hasło jest za krótkie. Musi zawierać co najmniej %(min_length)d znak." +msgstr[1] "" +"To hasło jest za krótkie. Musi zawierać co najmniej %(min_length)d znaki." +msgstr[2] "" +"To hasło jest za krótkie. Musi zawierać co najmniej %(min_length)d znaków." +msgstr[3] "" +"To hasło jest za krótkie. Musi zawierać co najmniej %(min_length)d znaków." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Twoje hasło musi zawierać co najmniej %(min_length)d znak." +msgstr[1] "Twoje hasło musi zawierać co najmniej %(min_length)d znaki." +msgstr[2] "Twoje hasło musi zawierać co najmniej %(min_length)d znaków." +msgstr[3] "Twoje hasło musi zawierać co najmniej %(min_length)d znaków." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Hasło jest zbyt podobne do %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Twoje hasło nie może być zbyt podobne do twoich innych danych osobistych." + +msgid "This password is too common." +msgstr "To hasło jest zbyt powszechne." + +msgid "Your password can’t be a commonly used password." +msgstr "Twoje hasło nie może być powszechnie używanym hasłem." + +msgid "This password is entirely numeric." +msgstr "Hasło składa się wyłącznie z cyfr." + +msgid "Your password can’t be entirely numeric." +msgstr "Twoje hasło nie może składać się tylko z cyfr." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Reset hasła dla konta na stronie %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Wprowadź poprawną nazwę użytkownika. Wartość może zawierać jedynie litery " +"angielskie, cyfry i znaki @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Wprowadź poprawną nazwę użytkownika. Wartość może zawierać jedynie litery, " +"cyfry i znaki @/./+/-/_." + +msgid "Logged out" +msgstr "Wylogowany(-na)" + +msgid "Password reset" +msgstr "Zresetowanie hasła" + +msgid "Password reset sent" +msgstr "Potwierdzenie zresetowania hasła zostało wysłane" + +msgid "Enter new password" +msgstr "Wprowadź nowe haslo" + +msgid "Password reset unsuccessful" +msgstr "Resetowanie hasła nie powiodło się" + +msgid "Password reset complete" +msgstr "Resetowanie hasła zakończone" + +msgid "Password change" +msgstr "Zmiana hasła" + +msgid "Password change successful" +msgstr "Hasło zostało zmienione pomyślnie" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..faa5bbebb58717217cdc7a01e332f07532a0b6f9 GIT binary patch literal 7756 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..1254932b2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2017 +# Jannis Leidel , 2011 +# jorgecarleitao , 2015 +# Nuno Mariz , 2013,2015,2017 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-30 23:58+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informação pessoal" + +msgid "Permissions" +msgstr "Permissões" + +msgid "Important dates" +msgstr "Datas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "O objecto %(name)s com a chave primária %(key)r não existe." + +msgid "Password changed successfully." +msgstr "Palavra-passe modificada com sucesso." + +#, python-format +msgid "Change password: %s" +msgstr "Modificar a palavra-passe: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticação e Autorização" + +msgid "password" +msgstr "palavra-passe" + +msgid "last login" +msgstr "última entrada" + +msgid "No password set." +msgstr "Nenhuma palavra-chave definida." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de palavra-chave inválido ou função de mistura desconhecida." + +msgid "The two password fields didn't match." +msgstr "Os dois campos da palavra-passe não coincidem." + +msgid "Password" +msgstr "Palavra-passe" + +msgid "Password confirmation" +msgstr "Confirmação da palavra-passe" + +msgid "Enter the same password as before, for verification." +msgstr "Introduza a palavra-passe como acima, para verificação." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Não são guardadas palavras-passe sem encriptação, portanto não é possível " +"visualizar a password deste utilizador, mas poderá modificar a palavra-passe " +"através deste formulário." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor introduza o %(username)s e password corretos. Tenha em atenção às " +"maiúsculas e minúsculas." + +msgid "This account is inactive." +msgstr "Esta conta não está activa." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Nova palavra-passe" + +msgid "New password confirmation" +msgstr "Confirmação da nova palavra-passe" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"A sua palavra-passe antiga foi introduzida incorretamente. Por favor tente " +"novamente." + +msgid "Old password" +msgstr "Palavra-passe antiga" + +msgid "Password (again)" +msgstr "Palavra-passe (novamente)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iterações" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedade" + +msgid "version" +msgstr "versão" + +msgid "memory cost" +msgstr "custo da memória" + +msgid "time cost" +msgstr "custo de tempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "fator trabalho" + +msgid "checksum" +msgstr "verificação" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "codename" +msgstr "nome de código" + +msgid "permission" +msgstr "permissão" + +msgid "permissions" +msgstr "permissões" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "Status de superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Define se este utilizador tem todas as permissões sem explicitamente as " +"atribuir." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Os grupos que este utilizador pertence. Um utilizador terá todas as " +"permissões concedidas a cada um dos seus grupos." + +msgid "user permissions" +msgstr "permissões do utilizador" + +msgid "Specific permissions for this user." +msgstr "Permissões específicas para este utilizador." + +msgid "username" +msgstr "utilizador" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obrigatório. 150 carateres ou menos. Apenas letras, dígitos @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Já existe um utilizador com esse nome." + +msgid "first name" +msgstr "primeiro nome" + +msgid "last name" +msgstr "último nome" + +msgid "email address" +msgstr "endereço de email" + +msgid "staff status" +msgstr "status de equipa" + +msgid "Designates whether the user can log into this admin site." +msgstr "Define se o utilizador pode usar a administração do site." + +msgid "active" +msgstr "ativo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Defina se este utilizador deva ser tratado como ativo. Não selecione em vez " +"de remover as contas." + +msgid "date joined" +msgstr "data de registo" + +msgid "user" +msgstr "utilizador" + +msgid "users" +msgstr "utilizadores" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta palavra-passe é muito curta. Deve conter pelo menos %(min_length)d " +"caractere." +msgstr[1] "" +"Esta palavra-passe é muito curta. Deve conter pelo menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"A sua palavra-passe deve conter pelo menos %(min_length)d caractere." +msgstr[1] "" +"A sua palavra-passe deve conter pelo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "A palavra-passe é muito semelhante ao %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Sua palavra-passe não pode ser muito semelhante a outras informações " +"pessoais." + +msgid "This password is too common." +msgstr "Esta palavra-passe é muito comum." + +msgid "Your password can't be a commonly used password." +msgstr "A sua palavra-passe não pode ser uma palavra-passe comum." + +msgid "This password is entirely numeric." +msgstr "Esta palavra-passe é inteiramente numérica." + +msgid "Your password can't be entirely numeric." +msgstr "Sua palavra-passe não pode ser inteiramente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Redefinição de palavra-passe em %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Insira um nome de utilizador válido. Este valor apenas deverá conter letras, " +"números e carateres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Insira um nome de utilizador válido. Este valor apenas deverá conter letras, " +"números e carateres @/./+/-/_." + +msgid "Logged out" +msgstr "Saiu" + +msgid "Password reset" +msgstr "Gerar nova palavra-passe" + +msgid "Password reset sent" +msgstr "Redefinição de palavra-passe enviada" + +msgid "Enter new password" +msgstr "Introduza nova palavra-passe" + +msgid "Password reset unsuccessful" +msgstr "A mudança da palavra-passe não foi bem sucedida" + +msgid "Password reset complete" +msgstr "Geração de nova palavra-passe completa" + +msgid "Password change" +msgstr "Mudança de palavra-passe" + +msgid "Password change successful" +msgstr "Mudança de palavra-passe bem sucedida" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e6f393db5b8bca6e1231cc13a78d676e5dfca08 GIT binary patch literal 7546 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, 2014 +# Amanda Savluchinske , 2019 +# amcorreia , 2018 +# Camilo B. Moreira , 2017 +# Carlos C. Leite , 2016 +# Filipe Cifali Stangler , 2016 +# Claudemiro Alves Feitosa Neto , 2015 +# dudanogueira , 2012 +# dudanogueira , 2014 +# Eduardo Cereto Carvalho, 2013 +# Elyézer Rezende , 2013 +# Fábio C. Barrionuevo da Luz , 2015 +# gilberto dos santos alves , 2013 +# semente, 2012 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Sandro , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-11 00:21+0000\n" +"Last-Translator: Amanda Savluchinske \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "Informações pessoais" + +msgid "Permissions" +msgstr "Permissões" + +msgid "Important dates" +msgstr "Datas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "objeto %(name)s com chave primária %(key)r não existe." + +msgid "Password changed successfully." +msgstr "Senha modificada com sucesso." + +#, python-format +msgid "Change password: %s" +msgstr "Alterar senha: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticação e Autorização" + +msgid "password" +msgstr "senha" + +msgid "last login" +msgstr "último login" + +msgid "No password set." +msgstr "Nenhuma senha definida." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de senha inválido ou algoritmo de hash desconhecido." + +msgid "The two password fields didn’t match." +msgstr "Os dois campos de senha não correspondem." + +msgid "Password" +msgstr "Senha" + +msgid "Password confirmation" +msgstr "Confirmação de senha" + +msgid "Enter the same password as before, for verification." +msgstr "Informe a mesma senha informada anteriormente, para verificação." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Senhas brutas não são armazenadas, então não há como visualizar a senha " +"desse usuário, porém você pode mudar a senha usandoesse form." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor, entre com um %(username)s e senha corretos. Note que ambos os " +"campos diferenciam maiúsculas e minúsculas." + +msgid "This account is inactive." +msgstr "Esta conta está inativa." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Nova senha" + +msgid "New password confirmation" +msgstr "Confirmação da nova senha" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"A senha antiga foi digitada incorretamente. Por favor, informe-a novamente." + +msgid "Old password" +msgstr "Senha antiga" + +msgid "Password (again)" +msgstr "Senha (novamente)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iterações" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedade" + +msgid "version" +msgstr "versão" + +msgid "memory cost" +msgstr "custo de memória" + +msgid "time cost" +msgstr "custo de tempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "fator de trabalho" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "codename" +msgstr "apelido" + +msgid "permission" +msgstr "permissão" + +msgid "permissions" +msgstr "permissões" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "status de superusuário" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuário tem todas as permissões sem atribuí-las " +"explicitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Os grupos que este usuário pertence. Um usuário terá todas as permissões " +"concedidas a cada um dos seus grupos." + +msgid "user permissions" +msgstr "permissões do usuário" + +msgid "Specific permissions for this user." +msgstr "Permissões específicas para este usuário." + +msgid "username" +msgstr "usuário" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obrigatório. 150 caracteres ou menos. Letras, números e @/./+/-/_ apenas." + +msgid "A user with that username already exists." +msgstr "Um usuário com este nome de usuário já existe." + +msgid "first name" +msgstr "primeiro nome" + +msgid "last name" +msgstr "último nome" + +msgid "email address" +msgstr "endereço de email" + +msgid "staff status" +msgstr "membro da equipe" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica que usuário consegue acessar este site de administração." + +msgid "active" +msgstr "ativo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica que o usuário será tratado como ativo. Ao invés de excluir contas de " +"usuário, desmarque isso." + +msgid "date joined" +msgstr "data de registro" + +msgid "user" +msgstr "usuário" + +msgid "users" +msgstr "usuários" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta senha é muito curta. Ela precisa conter pelo menos %(min_length)d " +"caracteres." +msgstr[1] "" +"Esta senha é muito curta. Ela precisa conter pelo menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Sua senha precisa conter pelo menos %(min_length)d caracteres." +msgstr[1] "Sua senha precisa conter pelo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "A senha é muito parecida com %(verbose_name)s" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Sua senha não pode ser muito parecida com o resto das suas informações " +"pessoais." + +msgid "This password is too common." +msgstr "Esta senha é muito comum." + +msgid "Your password can’t be a commonly used password." +msgstr "Sua senha não pode ser uma senha comumente utilizada." + +msgid "This password is entirely numeric." +msgstr "Esta senha é inteiramente numérica." + +msgid "Your password can’t be entirely numeric." +msgstr "Sua senha não pode ser inteiramente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Redefinição de senha em %(site_name)s " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Informe um nome de usuário válido. Este valor pode conter apenas letras, " +"números e os seguintes caracteres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Informe um nome de usuário válido. Este valor pode conter apenas letras, " +"números e os seguintes caracteres @/./+/-/_." + +msgid "Logged out" +msgstr "Sessão encerrada" + +msgid "Password reset" +msgstr "Redefinição de senha" + +msgid "Password reset sent" +msgstr "Redefinição de senha enviada" + +msgid "Enter new password" +msgstr "Digite a nova senha" + +msgid "Password reset unsuccessful" +msgstr "Redefinição de senha sem sucesso" + +msgid "Password reset complete" +msgstr "Redefinição de senha completa" + +msgid "Password change" +msgstr "Alteração de Senha" + +msgid "Password change successful" +msgstr "Mudança de senha bem sucedida" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bdaa778cf15d79fc4daccd2f524f1ad6ec92032e GIT binary patch literal 7777 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, 2011 +# Eugenol Man , 2020 +# Jannis Leidel , 2011 +# razvan ionescu , 2015 +# Razvan Stefanescu , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-15 11:11+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Personal info" +msgstr "Informații personale" + +msgid "Permissions" +msgstr "Permisiuni" + +msgid "Important dates" +msgstr "Date importante" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Obiectul %(name)s cu cheia primară %(key)r nu există." + +msgid "Password changed successfully." +msgstr "Parolă schimbată cu succes." + +#, python-format +msgid "Change password: %s" +msgstr "Schimbă parola: %s" + +msgid "Authentication and Authorization" +msgstr "Autentificare și autorizare" + +msgid "password" +msgstr "parolă" + +msgid "last login" +msgstr "ultima autentificare" + +msgid "No password set." +msgstr "Parola nu este setată." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Parolă nu are formatarea corectă sau algoritmul de criptare nu este cunoscut." + +msgid "The two password fields didn’t match." +msgstr "Cele două parole nu corespund." + +msgid "Password" +msgstr "Parolă" + +msgid "Password confirmation" +msgstr "Confirmare parolă" + +msgid "Enter the same password as before, for verification." +msgstr "Introduceți parola precedentă pentru confirmare." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Parolele nu sunt salvate în clar așa că nu poți vedea parola. O poți schimba " +"de aici." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Introduceți vă rog un %(username)s corect și o parolă. Reţineţi că ambele " +"câmpuri pot fi sensibile la litere mari şi mici." + +msgid "This account is inactive." +msgstr "Acest cont este inactiv." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Parolă nouă" + +msgid "New password confirmation" +msgstr "Confirmarea parolă nouă" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Parola veche a fost introdusă greșit. Introduceți-o din nou." + +msgid "Old password" +msgstr "Parolă veche" + +msgid "Password (again)" +msgstr "Parolă (din nou)" + +msgid "algorithm" +msgstr "algoritm" + +msgid "iterations" +msgstr "iterații" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varietate" + +msgid "version" +msgstr "versiune" + +msgid "memory cost" +msgstr "memorie necesară" + +msgid "time cost" +msgstr "timp necesar" + +msgid "parallelism" +msgstr "paralelism" + +msgid "work factor" +msgstr "factor de efort" + +msgid "checksum" +msgstr "sumă de control" + +msgid "name" +msgstr "nume" + +msgid "content type" +msgstr "tip de conținut" + +msgid "codename" +msgstr "nume de cod" + +msgid "permission" +msgstr "permisiune" + +msgid "permissions" +msgstr "permisiuni" + +msgid "group" +msgstr "grup" + +msgid "groups" +msgstr "grupuri" + +msgid "superuser status" +msgstr "stare superutilizator" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Marchează daca acest utilizator are toate permisiunile, fără a le mai " +"selecta explicit." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupurile din care face parte acest utilizator. Un utilizator va obține " +"drepturile de acces corespunzătoare grupurilor din care face parte." + +msgid "user permissions" +msgstr "permisiuni utilizator" + +msgid "Specific permissions for this user." +msgstr "Drepturile de access specifice acestui utilizator." + +msgid "username" +msgstr "nume utilizator" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatoriu. 150 de caractere sau mai puține. Numai litere, cifre și @/./+/-/" +"_." + +msgid "A user with that username already exists." +msgstr "Un utilizator cu acest nume de utilizator există deja." + +msgid "first name" +msgstr "Prenume" + +msgid "last name" +msgstr "Nume" + +msgid "email address" +msgstr "adresă de email" + +msgid "staff status" +msgstr "stare autorizare" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Marchează dacă utilizatorul se poate autentifica în acest site de " +"administrare." + +msgid "active" +msgstr "activ" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Desemnează dacă acest utilizator trebuie tratat ca activ. Deselectaţi " +"această opţiune în loc să ştergeţi conturi." + +msgid "date joined" +msgstr "data înscrierii" + +msgid "user" +msgstr "utilizator" + +msgid "users" +msgstr "utilizatori" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Parola este prea scurtă. Trebuie să conțină cel puțin %(min_length)d " +"caracter." +msgstr[1] "" +"Parola este prea scurtă. Trebuie să conțină cel puțin %(min_length)d " +"caractere." +msgstr[2] "" +"Parola este prea scurtă. Trebuie să conțină cel puțin %(min_length)d de " +"caractere." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Parola trebuie să conțină cel puțin %(min_length)d caracter." +msgstr[1] "Parola trebuie să conțină cel puțin %(min_length)d caractere." +msgstr[2] "Parola trebuie să conțină cel puțin %(min_length)d de caractere." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Parola este prea asemănătoare cu %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Nu este recomandabil ca parola sa fie asemănătoare cu celelalte date " +"personale." + +msgid "This password is too common." +msgstr "Această parolă este prea răspândită." + +msgid "Your password can’t be a commonly used password." +msgstr "Parola nu poate fi atât de comună. " + +msgid "This password is entirely numeric." +msgstr "Acestă parolă este compusă exclusiv din elemente numerice." + +msgid "Your password can’t be entirely numeric." +msgstr "Parola nu poate fi doar cu numere." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Resetează parola pentru %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Vă rugăm să folosiți un nume acceptat. Această valoare poate conține doar " +"litere, cifre și caracterele @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Vă rugăm să folosiți un nume acceptat. Această valoare poate conține doar " +"litere, cifre și caracterele @/./+/-/_" + +msgid "Logged out" +msgstr "Deautentificat" + +msgid "Password reset" +msgstr "Resetază parola" + +msgid "Password reset sent" +msgstr "Cerea de resetare a parolei trimisă cu succes" + +msgid "Enter new password" +msgstr "Introduceți noua parolă" + +msgid "Password reset unsuccessful" +msgstr "Resetarea parolei nu a avut succes." + +msgid "Password reset complete" +msgstr "Parola a fost resetată." + +msgid "Password change" +msgstr "Schimbare parolă" + +msgid "Password change successful" +msgstr "Schimbarea parolei a fost efectuată cu succes" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6fdaf745066dbecfa07fcdedf96e429bcdc60da9 GIT binary patch literal 10347 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, 2020 +# Ivan Khomutov , 2017 +# Jannis Leidel , 2011 +# Алексей Борискин , 2012-2015 +# Андрей Щуров , 2016 +# Влад Мещеряков , 2021 +# Дмитрий Шатера , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-05-02 03:02+0000\n" +"Last-Translator: Влад Мещеряков \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Personal info" +msgstr "Персональная информация" + +msgid "Permissions" +msgstr "Права доступа" + +msgid "Important dates" +msgstr "Важные даты" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s с первичным ключом %(key)r не существует." + +msgid "Password changed successfully." +msgstr "Пароль успешно изменен." + +#, python-format +msgid "Change password: %s" +msgstr "Изменить пароль: %s" + +msgid "Authentication and Authorization" +msgstr "Пользователи и группы" + +msgid "password" +msgstr "пароль" + +msgid "last login" +msgstr "последний вход" + +msgid "No password set." +msgstr "Пароль не задан." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Неизвестный формат пароля или алгоритм хеширования." + +msgid "The two password fields didn’t match." +msgstr "Введенные пароли не совпадают." + +msgid "Password" +msgstr "Пароль" + +msgid "Password confirmation" +msgstr "Подтверждение пароля" + +msgid "Enter the same password as before, for verification." +msgstr "Для подтверждения введите, пожалуйста, пароль ещё раз." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Пароли хранятся в зашифрованном виде, поэтому нет возможности посмотреть " +"пароль этого пользователя, но вы можете изменить его используя эту форму." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Пожалуйста, введите правильные %(username)s и пароль. Оба поля могут быть " +"чувствительны к регистру." + +msgid "This account is inactive." +msgstr "Эта учетная запись отключена." + +msgid "Email" +msgstr "Адрес электронной почты" + +msgid "New password" +msgstr "Новый пароль" + +msgid "New password confirmation" +msgstr "Подтверждение нового пароля" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ваш старый пароль введен неправильно. Пожалуйста, введите его снова." + +msgid "Old password" +msgstr "Старый пароль" + +msgid "Password (again)" +msgstr "Пароль (еще раз)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "итерации" + +msgid "salt" +msgstr "соль" + +msgid "hash" +msgstr "хэш" + +msgid "variety" +msgstr "множество" + +msgid "version" +msgstr "версия" + +msgid "memory cost" +msgstr "затраты памяти" + +msgid "time cost" +msgstr "затраты времени" + +msgid "parallelism" +msgstr "параллелизм" + +msgid "work factor" +msgstr "рабочий фактор" + +msgid "checksum" +msgstr "контрольная сумма" + +msgid "name" +msgstr "имя" + +msgid "content type" +msgstr "тип содержимого" + +msgid "codename" +msgstr "кодовое название" + +msgid "permission" +msgstr "право" + +msgid "permissions" +msgstr "права" + +msgid "group" +msgstr "группа" + +msgid "groups" +msgstr "группы" + +msgid "superuser status" +msgstr "статус суперпользователя" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Указывает, что пользователь имеет все права без явного их назначения." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Группы, к которым принадлежит данный пользователь. Пользователь получит все " +"права, указанные в каждой из его/её групп." + +msgid "user permissions" +msgstr "права пользователя" + +msgid "Specific permissions for this user." +msgstr "Индивидуальные права данного пользователя." + +msgid "username" +msgstr "имя пользователя" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Обязательное поле. Не более 150 символов. Только буквы, цифры и символы @/./" +"+/-/_." + +msgid "A user with that username already exists." +msgstr "Пользователь с таким именем уже существует." + +msgid "first name" +msgstr "имя" + +msgid "last name" +msgstr "фамилия" + +msgid "email address" +msgstr "адрес электронной почты" + +msgid "staff status" +msgstr "статус персонала" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Отметьте, если пользователь может входить в административную часть сайта." + +msgid "active" +msgstr "активный" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Отметьте, если пользователь должен считаться активным. Уберите эту отметку " +"вместо удаления учётной записи." + +msgid "date joined" +msgstr "дата регистрации" + +msgid "user" +msgstr "пользователь" + +msgid "users" +msgstr "пользователи" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Введённый пароль слишком короткий. Он должен содержать как минимум " +"%(min_length)d символ." +msgstr[1] "" +"Введённый пароль слишком короткий. Он должен содержать как минимум " +"%(min_length)d символа." +msgstr[2] "" +"Введённый пароль слишком короткий. Он должен содержать как минимум " +"%(min_length)d символов." +msgstr[3] "" +"Введённый пароль слишком короткий. Он должен содержать как минимум " +"%(min_length)d символов." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваш пароль должен содержать как минимум %(min_length)d символ." +msgstr[1] "Ваш пароль должен содержать как минимум %(min_length)d символа." +msgstr[2] "Ваш пароль должен содержать как минимум %(min_length)d символов." +msgstr[3] "Ваш пароль должен содержать как минимум %(min_length)d символов." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Введённый пароль слишком похож на %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Пароль не должен быть слишком похож на другую вашу личную информацию." + +msgid "This password is too common." +msgstr "Введённый пароль слишком широко распространён." + +msgid "Your password can’t be a commonly used password." +msgstr "Пароль не должен быть слишком простым и распространенным." + +msgid "This password is entirely numeric." +msgstr "Введённый пароль состоит только из цифр." + +msgid "Your password can’t be entirely numeric." +msgstr "Пароль не может состоять только из цифр." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Сброс пароля на %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Введите правильное имя пользователя. Это значение может содержать только " +"английские буквы, цифры и знаки @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Введите правильное имя пользователя. Оно может содержать только буквы, цифры " +"и знаки @/./+/-/_." + +msgid "Logged out" +msgstr "Не авторизован" + +msgid "Password reset" +msgstr "Восстановление пароля" + +msgid "Password reset sent" +msgstr "Письмо с инструкциями по восстановлению пароля отправлено" + +msgid "Enter new password" +msgstr "Введите новый пароль" + +msgid "Password reset unsuccessful" +msgstr "Ошибка восстановления пароля" + +msgid "Password reset complete" +msgstr "Восстановление пароля завершено" + +msgid "Password change" +msgstr "Изменение пароля" + +msgid "Password change successful" +msgstr "Пароль успешно изменен" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c7d2606d2edefcf57317c58af96fb68672f8d92 GIT binary patch literal 7853 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..c9ccf1351 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,314 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2014 +# Marian Andre , 2015,2017 +# Martin Tóth , 2017-2018 +# Peter Kuma, 2021 +# Richard von Kellner, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-30 09:28+0000\n" +"Last-Translator: Richard von Kellner\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Personal info" +msgstr "Osobné údaje" + +msgid "Permissions" +msgstr "Práva" + +msgid "Important dates" +msgstr "Dôležité dátumy" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s s primárnym kľúčom %(key)r neexistuje." + +msgid "Password changed successfully." +msgstr "Heslo úspešne zmenené." + +#, python-format +msgid "Change password: %s" +msgstr "Zmeniť heslo: %s" + +msgid "Authentication and Authorization" +msgstr "Autentifikácia a autorizácia" + +msgid "password" +msgstr "heslo" + +msgid "last login" +msgstr "naposledy prihlásený" + +msgid "No password set." +msgstr "Žiadne heslo." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neplatný formát hesla alebo neznámy hašovací algoritmus." + +msgid "The two password fields didn’t match." +msgstr "Heslo a jeho potvrdenie sa nezhodujú." + +msgid "Password" +msgstr "Heslo" + +msgid "Password confirmation" +msgstr "Potvrdenie hesla" + +msgid "Enter the same password as before, for verification." +msgstr "Kvôli overeniu, znovu zadajte rovnaké heslo." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Heslá v pôvodnom tvare nie sú ukladané, takže neexistuje spôsob zobraziť " +"heslo užívateľa. Môžete ho však zmeniť pomocou tohoto " +"formulára." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Zadajte prosím správne %(username)s a heslo. Všimnite si, že obe polia môžu " +"obsahovať veľké a malé písmená." + +msgid "This account is inactive." +msgstr "Tento účet je neaktívny." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nové heslo" + +msgid "New password confirmation" +msgstr "Potvrdenie nového hesla" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Nezadali ste správne svoje staré heslo. Napíšte ho znovu, prosím." + +msgid "Old password" +msgstr "Staré heslo" + +msgid "Password (again)" +msgstr "Heslo (znova)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "iterácie" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "druh" + +msgid "version" +msgstr "verzia" + +msgid "memory cost" +msgstr "pamäťová náročnosť" + +msgid "time cost" +msgstr "časová náročnosť" + +msgid "parallelism" +msgstr "paralelizmus" + +msgid "work factor" +msgstr "faktor práce" + +msgid "checksum" +msgstr "kontrolný súčet" + +msgid "block size" +msgstr "veľkosť bloku" + +msgid "name" +msgstr "meno" + +msgid "content type" +msgstr "typ obsahu" + +msgid "codename" +msgstr "kódové meno" + +msgid "permission" +msgstr "oprávnenie" + +msgid "permissions" +msgstr "oprávnenia" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupiny" + +msgid "superuser status" +msgstr "status superpoužívateľa" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Určuje, či používateľ získava automaticky všetky práva aj bez priameho " +"priradenia." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupiny do ktorých používateľ patrí. Používateľ dostane všetky oprávnenia z " +"každej z jeho skupín." + +msgid "user permissions" +msgstr "používateľské oprávnenia" + +msgid "Specific permissions for this user." +msgstr "Konkrétne oprávnenia pre tohto používateľa." + +msgid "username" +msgstr "používateľské meno" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Povinné. 150 znakov alebo menej. Iba písmená, číslice a @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Používateľ s takým používateľským menom už existuje." + +msgid "first name" +msgstr "krstné meno" + +msgid "last name" +msgstr "priezvisko" + +msgid "email address" +msgstr "e-mailová adresa" + +msgid "staff status" +msgstr "správcovský prístup" + +msgid "Designates whether the user can log into this admin site." +msgstr "Určuje, či sa používateľ môže prihlásiť do správy stránok." + +msgid "active" +msgstr "aktívny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Určuje, či je účet aktívny. Odškrtnite, ak chcete vypnúť používateľský účet." + +msgid "date joined" +msgstr "dátum registrácie" + +msgid "user" +msgstr "používateľ" + +msgid "users" +msgstr "používatelia" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Toto heslo je príliš krátke. Musí obsahovať aspoň %(min_length)d znak." +msgstr[1] "" +"Toto heslo je príliš krátke. Musí obsahovať aspoň %(min_length)d znaky." +msgstr[2] "" +"Toto heslo je príliš krátke. Musí obsahovať aspoň %(min_length)d znakov." +msgstr[3] "" +"Toto heslo je príliš krátke. Musí obsahovať aspoň %(min_length)d znakov." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Vaše heslo musí obsahovať aspoň %(min_length)d znak." +msgstr[1] "Vaše heslo musí obsahovať aspoň %(min_length)d znaky." +msgstr[2] "Vaše heslo musí obsahovať aspoň %(min_length)d znakov." +msgstr[3] "Vaše heslo musí obsahovať aspoň %(min_length)d znakov." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Heslo sa príliš podobá na %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Vaše heslo sa nesmie príliš podobať na ostatné osobné informácie." + +msgid "This password is too common." +msgstr "Toto heslo je používané príliš často." + +msgid "Your password can’t be a commonly used password." +msgstr "Vaše heslo nemôže byť jedno z často používaných hesiel." + +msgid "This password is entirely numeric." +msgstr "Toto heslo pozostáva iba z číslic." + +msgid "Your password can’t be entirely numeric." +msgstr "Vaše heslo nemôže pozostávať iba z číslic." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Obnovenie hesla pre %(site_name)s " + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zadajte platné používateľské meno. Táto hodnota môže obsahovať len písmená, " +"číslice a znaky @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zadajte platné používateľské meno. Táto hodnota môže obsahovať len písmená, " +"číslice a znaky @/./+/-/_." + +msgid "Logged out" +msgstr "Odhlásený" + +msgid "Password reset" +msgstr "Obnovenie hesla" + +msgid "Password reset sent" +msgstr "Obnovenie hesla odoslané" + +msgid "Enter new password" +msgstr "Zadajte nové heslo" + +msgid "Password reset unsuccessful" +msgstr "Obnovenie hesla sa nepodarilo" + +msgid "Password reset complete" +msgstr "Obnovenie hesla ukončené" + +msgid "Password change" +msgstr "Zmena hesla" + +msgid "Password change successful" +msgstr "Zmena hesla úspešná" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..02ff776a3789140b986a91fb86bd7c3c19772752 GIT binary patch literal 7552 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 000000000..f5d824c3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jure Cuhalev , 2012 +# Primož Verdnik , 2017 +# zejn , 2013,2016-2017 +# zejn , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-12-03 15:49+0000\n" +"Last-Translator: zejn \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Osebni podatki" + +msgid "Permissions" +msgstr "Dovoljenja" + +msgid "Important dates" +msgstr "Pomembni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z glavnim ključem %(key)r ne obstaja." + +msgid "Password changed successfully." +msgstr "Geslo je uspešno spremenjeno." + +#, python-format +msgid "Change password: %s" +msgstr "Spremeni geslo: %s" + +msgid "Authentication and Authorization" +msgstr "Avtentikacija in avtorizacija" + +msgid "password" +msgstr "geslo" + +msgid "last login" +msgstr "zadnja prijava" + +msgid "No password set." +msgstr "Geslo ni nastavljeno." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neveljavna oblika gesla ali neznan algoritem razpršila." + +msgid "The two password fields didn't match." +msgstr "Gesli se ne ujemata." + +msgid "Password" +msgstr "Geslo" + +msgid "Password confirmation" +msgstr "Potrditev gesla" + +msgid "Enter the same password as before, for verification." +msgstr "Vnesite isto geslo kot prej, za preverjanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Čitljiva gesla se ne shranjujejo, tako da ni možno videti gesla tega " +"uporabnika, lahko pa geslo spremenite z uporabo tega obrazca." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Vnesite veljavno %(username)s in geslo. Opomba: obe polji upoštevata " +"velikost črk." + +msgid "This account is inactive." +msgstr "Ta uporabniški račun ni dejaven." + +msgid "Email" +msgstr "Elektronski naslov" + +msgid "New password" +msgstr "Novo geslo" + +msgid "New password confirmation" +msgstr "Potrditev novega gesla" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaše staro geslo ni vneseno pravilno. Poskusite znova." + +msgid "Old password" +msgstr "Staro geslo" + +msgid "Password (again)" +msgstr "Geslo (znova)" + +msgid "algorithm" +msgstr "algoritem" + +msgid "iterations" +msgstr "ponovitev" + +msgid "salt" +msgstr "naključna vrednost" + +msgid "hash" +msgstr "razpršilo" + +msgid "variety" +msgstr "pestrost" + +msgid "version" +msgstr "različica" + +msgid "memory cost" +msgstr "pomnilniška zahtevnost" + +msgid "time cost" +msgstr "časovna zahtevnost" + +msgid "parallelism" +msgstr "paralelnost" + +msgid "work factor" +msgstr "faktor obremenitve" + +msgid "checksum" +msgstr "nadzorna vsota" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "vrsta vsebine" + +msgid "codename" +msgstr "kodno ime" + +msgid "permission" +msgstr "dovoljenje" + +msgid "permissions" +msgstr "dovoljenja" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupine" + +msgid "superuser status" +msgstr "stanje skrbnika" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Določi, da bo uporabnik imel vsa dovoljenja, ne da bi mu jih posebej " +"dodelili." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupine, katerih član je ta uporabnik. Uporabnik pridobi vsa dovoljenja, " +"povezana z vsako izmed skupin." + +msgid "user permissions" +msgstr "uporabniška dovoljenja" + +msgid "Specific permissions for this user." +msgstr "Dovoljenja specifična za tega uporabnika." + +msgid "username" +msgstr "uporabniško ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Zahtevano. 150 znakov ali manj. Le črke, števke in znaki @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uporabnik s tem uporabniškim imenom že obstaja." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "priimek" + +msgid "email address" +msgstr "elektronski naslov" + +msgid "staff status" +msgstr "stanje osebja" + +msgid "Designates whether the user can log into this admin site." +msgstr "Določi, ali se sme uporabnik prijaviti kot skrbnik." + +msgid "active" +msgstr "dejaven" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Določi, ali je uporabnik dejaven. Možnost je priročna in preprečuje brisanje " +"računov." + +msgid "date joined" +msgstr "vpisan od" + +msgid "user" +msgstr "uporabnik" + +msgid "users" +msgstr "uporabniki" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znak." +msgstr[1] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znaka." +msgstr[2] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znake." +msgstr[3] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znakov." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Vaše geslo mora imeti vsaj %(min_length)d znak." +msgstr[1] "Vaše geslo mora imeti vsaj %(min_length)d znaka." +msgstr[2] "Vaše geslo mora imeti vsaj %(min_length)d znake." +msgstr[3] "Vaše geslo mora imeti vsaj %(min_length)d znakov." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Geslo je preveč podobno %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Geslo ne sme biti preveč podobno ostalim vašim osebnim podatkom." + +msgid "This password is too common." +msgstr "Geslo je eno izmed preveč pogosto uporabljanih." + +msgid "Your password can't be a commonly used password." +msgstr "Vaše geslo ne sme biti eno izmed pogosto uporabljanih gesel." + +msgid "This password is entirely numeric." +msgstr "Vaše geslo je sestavljeno samo iz števk." + +msgid "Your password can't be entirely numeric." +msgstr "Vaše geslo ne sme biti sestavljeno samo iz števk." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Geslo na %(site_name)s je ponastavljeno." + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Vnesite veljavno uporabniško ime. Ta vrednost sme vsebovati le angleške " +"črke, števke in znake @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Vnesite veljavno uporabniško ime. Ta vrednost sme vsebovati le črke, števke " +"in znake @/./+/-/_." + +msgid "Logged out" +msgstr "Odjavljen" + +msgid "Password reset" +msgstr "Ponastavi geslo" + +msgid "Password reset sent" +msgstr "Navodila za ponastavitev gesla so bila poslana" + +msgid "Enter new password" +msgstr "Vnesite novo geslo" + +msgid "Password reset unsuccessful" +msgstr "Ponastavitev gesla ni uspela" + +msgid "Password reset complete" +msgstr "Ponastavitev gesla zaključena" + +msgid "Password change" +msgstr "Sprememba gesla" + +msgid "Password change successful" +msgstr "Sprememba gesla je uspela" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa98aa621d96568d5fe599b6fb3aa7663a601974 GIT binary patch literal 7813 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..f4f7d5cf8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011,2015 +# Besnik , 2015,2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:36+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Të dhëna personale" + +msgid "Permissions" +msgstr "Leje" + +msgid "Important dates" +msgstr "Të dhëna të rëndësishme" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "S’ekziston objekt %(name)s me kyç parësor %(key)r." + +msgid "Password changed successfully." +msgstr "Fjalëkalimi u ndryshua me sukses." + +#, python-format +msgid "Change password: %s" +msgstr "Ndryshoni fjalëkalimin: %s" + +msgid "Authentication and Authorization" +msgstr "Mirëfilltësim dhe Autorizim" + +msgid "password" +msgstr "fjalëkalim" + +msgid "last login" +msgstr "hyrja e fundit" + +msgid "No password set." +msgstr "S’ka fjalëkalim të caktuar." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Format i pavlefshëm fjalëkalimi ose algoritëm i panjohur hashi." + +msgid "The two password fields didn’t match." +msgstr "Dy fushat për fjalëkalim s’u përputhën." + +msgid "Password" +msgstr "Fjalëkalim" + +msgid "Password confirmation" +msgstr "Ripohim fjalëkalimi" + +msgid "Enter the same password as before, for verification." +msgstr "Jepni, për verifikim, të njëjtin fjalëkalim si më parë." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Nuk depozitohen fjalëkalime të papërpunuar, ndaj s’ka ndonjë mënyrë për të " +"parë fjalëkalimin e këtij përdoruesi, por mund ta ndryshoni fjalëkalimin " +"duke përdorur këtë formular." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ju lutemi, jepni një %(username)s dhe një fjalëkalim të saktë. Kini parasysh " +"se që të dyja fushat mund të jenë të ndjeshme ndaj shkrimit me shkronja të " +"mëdha ose të vogla." + +msgid "This account is inactive." +msgstr "Kjo llogari s’është aktive." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Fjalëkalim i ri" + +msgid "New password confirmation" +msgstr "Ripohim fjalëkalimi të ri" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Fjalëkalimi juaj i vjetër u dha pasaktësisht. Ju lutemi, jepeni sërish." + +msgid "Old password" +msgstr "Fjalëkalim i vjetër" + +msgid "Password (again)" +msgstr "Fjalëkalim (sërish)" + +msgid "algorithm" +msgstr "algoritëm" + +msgid "iterations" +msgstr "përsëritje" + +msgid "salt" +msgstr "kripë" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "larmi" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "kosto kujtese" + +msgid "time cost" +msgstr "kosto në kohë" + +msgid "parallelism" +msgstr "paralelizëm" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "emër" + +msgid "content type" +msgstr "lloj lënde" + +msgid "codename" +msgstr "emër i koduar" + +msgid "permission" +msgstr "leje" + +msgid "permissions" +msgstr "leje" + +msgid "group" +msgstr "grup" + +msgid "groups" +msgstr "grupe" + +msgid "superuser status" +msgstr "gjendje superpërdoruesi" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Përcakton që ky përdorues ka krejt lejet, pa ia akorduar ato shprehimisht." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupet te të cilët bën pjesë ky përdorues. Një përdorues do të gëzojë krejt " +"lejet e akorduara secilit te këto grupe." + +msgid "user permissions" +msgstr "leje përdoruesi" + +msgid "Specific permissions for this user." +msgstr "Leje specifike për këtë përdorues." + +msgid "username" +msgstr "emër përdoruesi" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"E domosdoshme. 150 ose më pak shenja. Vetëm shkronja, shifra, dhe @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Ka tashmë një emër të tillë përdoruesi." + +msgid "first name" +msgstr "emër" + +msgid "last name" +msgstr "mbiemër" + +msgid "email address" +msgstr "adresë email" + +msgid "staff status" +msgstr "vend në ekip" + +msgid "Designates whether the user can log into this admin site." +msgstr "Përcakton nëse mund të hyjë ose jo përdoruesi te ky sajt administrimi." + +msgid "active" +msgstr "veprues" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Përcakton nëse ky përdorues do të duhej trajtuar si aktiv. Shpërzgjidheni " +"këtë, në vend se të fshihni llogari." + +msgid "date joined" +msgstr "datë anëtarësimi" + +msgid "user" +msgstr "përdorues" + +msgid "users" +msgstr "përdorues" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ky fjalëkalim është shumë i shkurtër. Duhet të përmbajë të paktën " +"%(min_length)d shenjë." +msgstr[1] "" +"Ky fjalëkalim është shumë i shkurtër. Duhet të përmbajë të paktën " +"%(min_length)d shenja." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Fjalëkalimi juaj duhet të përmbajë të paktën %(min_length)d shenjë." +msgstr[1] "Fjalëkalimi juaj duhet të përmbajë të paktën %(min_length)d shenja." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Fjalëkalimi është shumë i ngjashëm me %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Fjalëkalimi juaj s’mund të jetë shumë i ngjashëm me të dhëna të tjera tuajat " +"personale." + +msgid "This password is too common." +msgstr "Ky fjalëkalim është shumë i rëndomtë." + +msgid "Your password can’t be a commonly used password." +msgstr "Fjalëkalimi juaj s’mund të jetë një fjalëkalim i përdorur rëndom." + +msgid "This password is entirely numeric." +msgstr "Ky fjalëkalim është tërësisht numerik." + +msgid "Your password can’t be entirely numeric." +msgstr "Fjalëkalimi juaj s’mund të jetë tërësisht numerik." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ricaktim fjalëkalimi për te %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Jepni një emër përdoruesi të vlefshëm. Kjo vlerë mund të përmbajë vetëm " +"shkronja anglishtje, numra dhe shenjat @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Jepni një emër përdoruesi të vlefshëm. Kjo vlerë mund të përmbajë vetëm " +"shkronja, numra dhe shenjat @/./+/-/_ ." + +msgid "Logged out" +msgstr "I dalë" + +msgid "Password reset" +msgstr "Ricaktim fjalëkalimi" + +msgid "Password reset sent" +msgstr "U dërgua ricaktim fjalëkalimi" + +msgid "Enter new password" +msgstr "Jepni fjalëkalimin e ri" + +msgid "Password reset unsuccessful" +msgstr "Ricaktimi i fjalëkalimit nuk pati sukses" + +msgid "Password reset complete" +msgstr "Ricaktimi i fjalëkalimit u plotësua" + +msgid "Password change" +msgstr "Ndryshim fjalëkalimi" + +msgid "Password change successful" +msgstr "Ndryshim i suksesshëm fjalëkalimi" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d6d128c216f8f4b73523d14b6dfffea8c77b11f4 GIT binary patch literal 9761 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, 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 19:36+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Personal info" +msgstr "Лични подаци" + +msgid "Permissions" +msgstr "Дозволе" + +msgid "Important dates" +msgstr "Важни датуми" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s објекат са примарним кључем %(key)r не постоји." + +msgid "Password changed successfully." +msgstr "Лозинка успешно измењена." + +#, python-format +msgid "Change password: %s" +msgstr "Измени лозинку: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентикација и Ауторизација" + +msgid "password" +msgstr "лозинка" + +msgid "last login" +msgstr "последња пријава" + +msgid "No password set." +msgstr "Лозинка није унета." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Инвалидан формат лозинке или непознат hashing алгоритам." + +msgid "The two password fields didn’t match." +msgstr "Два поља за лозинке се не поклапају." + +msgid "Password" +msgstr "Лозинка" + +msgid "Password confirmation" +msgstr "Потврда лозинке" + +msgid "Enter the same password as before, for verification." +msgstr "Унесите исту лозинку као малопре ради верификације." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Лозинке се не чувају у изворном облику па не постоји могућност приказа " +"лозинке овог корисника, али можете променити лозинку коришћењем ове форме." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Молим вас унесите исправно %(username)s и лозинку. Обратите пажњу да мала и " +"велика слова представљају различите карактере." + +msgid "This account is inactive." +msgstr "Овај налог је неактиван." + +msgid "Email" +msgstr "И-мејл" + +msgid "New password" +msgstr "Нова лозинка" + +msgid "New password confirmation" +msgstr "Потврда нове лозинке" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ваша стара лознка није правилно унесена. Унесите је поново." + +msgid "Old password" +msgstr "Стара лозинка" + +msgid "Password (again)" +msgstr "Лозинка (поновите)" + +msgid "algorithm" +msgstr "алгоритам" + +msgid "iterations" +msgstr "итерације" + +msgid "salt" +msgstr "зачин" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "варијанта" + +msgid "version" +msgstr "верзија" + +msgid "memory cost" +msgstr "меморијска захтевност" + +msgid "time cost" +msgstr "временска захтевност" + +msgid "parallelism" +msgstr "паралелизам" + +msgid "work factor" +msgstr "фактор сложености" + +msgid "checksum" +msgstr "сума за проверу" + +msgid "block size" +msgstr "величина блока" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип садржаја" + +msgid "codename" +msgstr "шифра дозволе" + +msgid "permission" +msgstr "дозвола" + +msgid "permissions" +msgstr "дозволе" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групе" + +msgid "superuser status" +msgstr "статус администратора" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Указује да корисник има све дозволе без додељивања појединачних дозвола." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групе којима припада овај корисник. Корисник ће добити све дозволе које су " +"дате групама којима припада." + +msgid "user permissions" +msgstr "корисникове дозволе" + +msgid "Specific permissions for this user." +msgstr "Дозволе које се односе на овог корисника." + +msgid "username" +msgstr "корисничко име" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Обавезан податак. 150 карактера или мање. Дозвољена су само слова, цифре и " +"карактери @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Корисник са тим корисничким именом већ постоји." + +msgid "first name" +msgstr "име" + +msgid "last name" +msgstr "презиме" + +msgid "email address" +msgstr "и-мејл адреса" + +msgid "staff status" +msgstr "статус члана посаде" + +msgid "Designates whether the user can log into this admin site." +msgstr "Указује да корисник може да се пријави на овај сајт за администрацију." + +msgid "active" +msgstr "активан" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Означава да ли се корисник сматра активним. Деселектујте ово уместо да " +"бришете налог." + +msgid "date joined" +msgstr "датум регистрације" + +msgid "user" +msgstr "корисник" + +msgid "users" +msgstr "корисници" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d карактер." +msgstr[1] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d " +"карактера." +msgstr[2] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d " +"карактера." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваша лозинка мора садржати најмање %(min_length)d карактер." +msgstr[1] "Ваша лозинка мора садржати најмање %(min_length)d карактера." +msgstr[2] "Ваша лозинка мора садржати најмање %(min_length)d карактера." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Лозинка је превише слична пољу '%(verbose_name)s'." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Ваша лозинка не може бити слична вашим личним подацима." + +msgid "This password is too common." +msgstr "Ова лозинка је међу најчешће коришћеним лозинкама." + +msgid "Your password can’t be a commonly used password." +msgstr "Ваша лозинка не може бити међу најчешће коришћеним лозинкама." + +msgid "This password is entirely numeric." +msgstr "Ова лозинка садржи само цифре." + +msgid "Your password can’t be entirely numeric." +msgstr "Ваша лозинка не може садржати само цифре." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ресетовање лозинке на сајту %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Унесите исправно корисничко име. Оно може садржати само слова енглеске " +"абецеде, цифре и карактере @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Унесите исправно корисничко име. Оно може садржати само слова, цифре и " +"карактере @/./+/-/_ ." + +msgid "Logged out" +msgstr "Одјављен" + +msgid "Password reset" +msgstr "Ресет лозинке" + +msgid "Password reset sent" +msgstr "Захтев за ресет лозинке је послат" + +msgid "Enter new password" +msgstr "Унесите нову лозинку" + +msgid "Password reset unsuccessful" +msgstr "Неуспешан ресет лозинке" + +msgid "Password reset complete" +msgstr "Ресет лозинке је завршен" + +msgid "Password change" +msgstr "Промена лозинке" + +msgid "Password change successful" +msgstr "Лозинка је успешно промењена" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..910b7e9609ae981d7384f9b6b7a07cc8699dc8a2 GIT binary patch literal 3191 zcmZ{lNo*WN6o!kP7zj()w>*{v56O&Y42NWr0kWb9CpL)_goK1D(={_S(_Ph6RgYr> zHzXub!~tt$>}X}RaC_0@ZSy?*}w zrpw*X0lW_U1!Q}Fg8RTNR|PrQX6xGvrSd49Fz2O!%!SI&P9vfVGs`L98? z`&~JI0pxgp0Xfb;%JEHC75&X1@81gY`O_fpZ-5^|^ETK*|93393EYmuS?As09QYde z4EQa`I?TXXG(`vGbDson1{XoTCk^ttmqC~ouY+v&P4F)8U6AkV3-Dp^8<5xi4f4J# z;N0!t7H}`P6Xbaf^0_a7y#GaTGx$2l_TL7PD&j+sj-IBo&t;SdMcO$a!)v$htlXa@-w|{dyYYb0mnZVgy2F!D-F$at`r5 zag3PCeY*$TiI*S#7T6Bkybtf4c-g=0csVY}lF&R0H*b>N5N+J<)rcglx- zzrX5~WdB*ihsr*c+=x0l(|B*gdn;c4R`}t&GOKe6cwUv@Z+}q=$u=Qsolu zy|%{ZhuAE@VjAnN4)HR<7z}9B$9|PGHX2+SD2zFtC`@*xq1g6Gn_w}DlVp@=LtY1U zk)4${eqggWqSJ~3f(k0a!6dsuk5z+C8n0s24TVi@d_de}dlX?fuy3;4wV7cNjwGpd zL7G4jM=j=TzYlAON*q&56LJ34p{_MO?GhQFf;eU;tH`U+5c6=X5>+ge>P{LoE&EcN z+WJ5@zlVr?*6k|qds!SWH#SUfJghQDPT?%FhPF+!T+j0j*SuI*za4ISYh(<4dsZyw z`WA5$WYngVOFU~cM|OkLv;;Ag3CckUZMxPus0pWNAy(3>Vvcm6Jd}ngED0I+twY`= zqB~ICk@?S5IVgrF-TrR8^vBWYYh&Dwt-;w`J z!`jz>-+kmZPV1keEql@YhGGEi1^zy+njCHo4f0? zv((((o}Jy%#4|OAIO~f}8XrrX)TX?xd+H4Bw}JLPh83ot$-b&DDw(wDgmR}fKA!10 zC}nCiJqRIf&&(_>Ej0q$;k}KnO=b!QE5xOl8SkFJQQFMZrj8ytdT2eMR--v}z~br+ zJX%iSa!_Z&Od2C)_YgAGA?-RR7Z2BWt*_$~d&<=hAyp!LUTxZST8D|#ZK{r&T8J|z zMEb$I=WXtPT}q z!EU1m7g8Jd@N+ga)=0qfmUQuC{f0p?CN3me`DBMMv16V zs2sM8P#uj<8iXQ`LO2T95Z|O7TgnoJ!1>72POq&h45Mz?enXs+Yo9_0e7#ws#XQn! z91j&2JqS_ABgKLZV~5SgLWW{cp^&n67}P_Qd!qtEJ`p4wskW6XCM%~?3k&%EYm=eO zr)q80SkinUI2cB%)2f4xb0vg3n63_Ixmc;}Kh^PIaYbTI^IhO#BFHD^S=c;Yf(fH? zp`^)!UxlH{=}9!H!, 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 09:22+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Personal info" +msgstr "Lični podaci" + +msgid "Permissions" +msgstr "Dozvole" + +msgid "Important dates" +msgstr "Važni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Lozinka uspešno izmenjena." + +#, python-format +msgid "Change password: %s" +msgstr "Izmeni lozinku: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "lozinka" + +msgid "last login" +msgstr "poslednja prijava" + +msgid "No password set." +msgstr "Lozinka nije uneta." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn’t match." +msgstr "" + +msgid "Password" +msgstr "Lozinka" + +msgid "Password confirmation" +msgstr "Potvrda lozinke" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Ovaj nalog je neaktivan." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Nova lozinka" + +msgid "New password confirmation" +msgstr "Potvrda nove lozinke" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaša stara loznka nije pravilno unesena. Unesite je ponovo." + +msgid "Old password" +msgstr "Stara lozinka" + +msgid "Password (again)" +msgstr "Lozinka (ponovite)" + +msgid "algorithm" +msgstr "algoritam" + +msgid "iterations" +msgstr "iteracije" + +msgid "salt" +msgstr "začin" + +msgid "hash" +msgstr "heš" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "faktor rada" + +msgid "checksum" +msgstr "suma za proveru" + +msgid "block size" +msgstr "" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "šifra dozvole" + +msgid "permission" +msgstr "dozvola" + +msgid "permissions" +msgstr "dozvole" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupe" + +msgid "superuser status" +msgstr "status administratora" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Označava da li korisnik ima sve dozvole bez dodeljivanja pojedinačnih " +"dozvola." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "korisničke dozvole" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "korisničko ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Korisnik sa tim korisničkim imenom već postoji." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "prezime" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "status člana posade" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Označava da li korisnik može da se prijavi na ovaj sajt za administraciju." + +msgid "active" +msgstr "aktivan" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Označava da li se korisnik smatra aktivnim. Deselektujte ovo umesto da " +"brišete nalog." + +msgid "date joined" +msgstr "datum registracije" + +msgid "user" +msgstr "korisnik" + +msgid "users" +msgstr "korisnici" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can’t be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can’t be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Resetovanje lozinke na sajtu %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Odjavljen" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..040a1e582951a5c144aa2076b81e65b05f0c0960 GIT binary patch literal 7416 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 G#D4&K{o!f= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 000000000..d04385e60 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Nordlund , 2012 +# Cybjit , 2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2015 +# Jonathan Lindén, 2014 +# Mattias Hansson , 2016 +# nip3o , 2014 +# Petter Strandmark , 2019 +# Samuel Linde , 2011 +# Thomas Lundqvist, 2013,2016 +# Tomas Lööw , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-05-06 05:59+0000\n" +"Last-Translator: Tomas Lööw \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personlig information" + +msgid "Permissions" +msgstr "Rättigheter" + +msgid "Important dates" +msgstr "Viktiga datum" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-objekt med primärnyckel %(key)r finns inte." + +msgid "Password changed successfully." +msgstr "Lösenordet ändrades." + +#, python-format +msgid "Change password: %s" +msgstr "Ändra lösenord: %s" + +msgid "Authentication and Authorization" +msgstr "Autentisering och auktorisering" + +msgid "password" +msgstr "lösenord" + +msgid "last login" +msgstr "senaste inloggning" + +msgid "No password set." +msgstr "Inget lösenord angivet." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ogiltigt lösenordsformat eller okänd hashalgoritm." + +msgid "The two password fields didn’t match." +msgstr "De två lösenordsfälten stämmer inte överens." + +msgid "Password" +msgstr "Lösenord" + +msgid "Password confirmation" +msgstr "Lösenordsbekräftelse" + +msgid "Enter the same password as before, for verification." +msgstr "Fyll i samma lösenord som tidigare för verifiering." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Lösenord lagras inte direkt, så det finns inget sätt att se denna användares " +"lösenord, men du kan ändra lösenorden med detta formulär." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ange ett korrekt %(username)s och lösenord. Observera att båda fälten är " +"skiftlägeskänsliga." + +msgid "This account is inactive." +msgstr "Detta konto är inaktivt." + +msgid "Email" +msgstr "E-postadress" + +msgid "New password" +msgstr "Nytt lösenord" + +msgid "New password confirmation" +msgstr "Bekräfta nytt lösenord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen." + +msgid "Old password" +msgstr "Gammalt lösenord" + +msgid "Password (again)" +msgstr "Lösenord (igen)" + +msgid "algorithm" +msgstr "algoritm" + +msgid "iterations" +msgstr "iterationer" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variation" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "minneskostnad" + +msgid "time cost" +msgstr "tidskostnad" + +msgid "parallelism" +msgstr "parallellism" + +msgid "work factor" +msgstr "arbetsfaktor" + +msgid "checksum" +msgstr "kontrollsumma" + +msgid "name" +msgstr "namn" + +msgid "content type" +msgstr "innehållstyp" + +msgid "codename" +msgstr "kodnamn" + +msgid "permission" +msgstr "rättighet" + +msgid "permissions" +msgstr "rättigheter" + +msgid "group" +msgstr "grupp" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superanvändare" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Anger att denna användare har alla rättigheter utan att uttryckligen " +"tilldela dem." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"De grupper som användaren är medlem i. Användare får tillgång till alla " +"rättigheter som deras grupper har." + +msgid "user permissions" +msgstr "användarättigheter" + +msgid "Specific permissions for this user." +msgstr "Specifika rättigheter för denna användare." + +msgid "username" +msgstr "användarnamn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatoriskt. 150 tecken eller färre. Endast bokstäver, siffror och @/./+/-/" +"_." + +msgid "A user with that username already exists." +msgstr "En användare med det användarnamnet finns redan." + +msgid "first name" +msgstr "förnamn" + +msgid "last name" +msgstr "efternamn" + +msgid "email address" +msgstr "e-postadress" + +msgid "staff status" +msgstr "personalstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Avgör om användaren kan logga in på denna adminsida." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Anger om användaren skall betraktas som aktiv. Avmarkera detta istället för " +"att ta bort konton." + +msgid "date joined" +msgstr "registreringsdatum" + +msgid "user" +msgstr "användare" + +msgid "users" +msgstr "användare" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Detta lösenord är för kort. Det måste innehålla minst %(min_length)d tecken." +msgstr[1] "" +"Detta lösenord är för kort. Det måste innehålla minst %(min_length)d tecken." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ditt lösenord måste innehålla minst %(min_length)d tecken." +msgstr[1] "Ditt lösenord måste innehålla minst %(min_length)d tecken." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Ditt lösenord är alltför likt %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" +"Ditt lösenord kan inte vara alltför likt din övriga personliga information." + +msgid "This password is too common." +msgstr "Detta lösenord är alldeles för vanligt." + +msgid "Your password can’t be a commonly used password." +msgstr "Ditt lösenord kan inte vara ett allmänt använt lösenord." + +msgid "This password is entirely numeric." +msgstr "Detta lösenord är enbart numeriskt." + +msgid "Your password can’t be entirely numeric." +msgstr "Ditt lösenord kan inte bara vara numeriskt." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Lösenord nollställt på %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Fyll i ett giltigt användarnamn. Detta värde får endast innehålla bokstäver " +"a-z, siffror och @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Fyll i ett giltigt användarnamn. Detta värde får endast innehålla bokstäver, " +"siffror och @/./+/-/_." + +msgid "Logged out" +msgstr "Utloggad" + +msgid "Password reset" +msgstr "Nollställ lösenord" + +msgid "Password reset sent" +msgstr "Lösenordsnollställning skickad" + +msgid "Enter new password" +msgstr "Nytt lösenord" + +msgid "Password reset unsuccessful" +msgstr "Lösenordsnollställning misslyckad" + +msgid "Password reset complete" +msgstr "Nollställning av lösenord klar" + +msgid "Password change" +msgstr "Ändra lösenord" + +msgid "Password change successful" +msgstr "Lösenordet ändrades" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..712fea06e34324220d2185cf3852a160d8535a0d GIT binary patch literal 5029 zcmZ{mO^h5z6~`+O0&D_=knm+lDv-sycxU#*&eu4OV>>pO#LnWZBUwm9HPbaSwbLJ? zt}c&fBOxTDCEC zN?G_Eq)Gh^-T~i)$KYG=BXIrwO5G1n!X+5sZSb4$Q}8?RcKEZp{T28D?tfRe{|Snn zzrs($f5E%q5}odXtMJ3{B>V)t2=9S?cnCfZZ-qaFAA&!JUx%;4&%;9>to%I*m$@&X z`1K?BIrvK`ak>sAX8(m7@BtRH0tfIMd=au_bsf@0y#bj*{j=tOp!o3?6hCg^hQI1g zDDk@o%J^j{saUI@Z`OPSirp{O&%X-A{xkLSXCXhe%SFatg%aoIpv3ouy8Vas{ZF8b z{{@u!UxED8Yg~SClTv?#E$$7@N}Rt7KMr4pC*iB`5%@NwyLy-;$a;=L(ZM-*AG`wT zqP_u7!*4@UsQwIPzUxr(`gbUC{vQ;750P~7Zw<=$`=Qu912udGO1>sg^8Vxc`LCep zT3Xm{L*wd;(>j7wYzx;7!~=#3}igqr)k& zIVCq7M=PjDYc4{xBJr2KL}<#j9f6{W=8*NvA#sv}DOH>Evz+3q__@I;@mS{+y)?&W z{YNw->!Xa7bw^@MNO;O&a zCb8PYxi!&L+iT7jzO7D$VrbLC^-STiRGT!?(v;Rng*eh(s|!|L*ocX>=@ss(ZR^Xax3TRN zl}(rWg23pkuOpfZ@y+ylSx6;HXA|RMbv7+8ZLX$%bMD9t9RCa%NMrFcMUiXkz3G8+t7 z5s_6F7hPJs(Y-9~J26Hk)WvK*g||gpJwWmQ|4nP;2hHW8E@$P{=&3g!ZR*8v9|FMT^` zd0$+ot4uVOYGcezvYPX(kwvDi|N8&ue^y1$rujSV`s zF4?P2Y`#OkW1X#IM>aT?o+Kcxo!q28Hn`N$UomNlbf2`2%B&y38*U$q%iFf>;YS&h z4uToj){ZqvM?XC=Ll--}GAxR5XMKG#nY0VB==%0r8+ol)YibbJ!`J;}eRb)=`3q;~ ztKV#IES<@y4k=zu$1Ja~*NXLVOldr>sfal>>%`@qbFGKw{ba7b&0A;L1`&0;qaW(J zV&-N?`^nOF9C8!4&Qa@qN2lZR)}PoquB*Q%R#JWM3B9>`d`az?smYxlh15`t%+wYk zaYnPqOz*O%b!>D}w(YvMx?Gr~8)C=n4*}})5w8xXPMe6B_@UtqmS*1Nu6&p8*f1Zf zhhZ9+WU^DqqF=sl@-h|!HR9_=|6UYePhJtiy1k4&;)1P>>6&(N8rNP1WV=6`$9(~!Ad6~@}bLYYa2|rM~q0r#oC?b$qLFctLll+o#&@C z&S!#^mwrU-NXF=3hsKnSU1FQzILE})|30&gT!tEM^t_q>33fl}s8 zTq*axn@A`LiMT+S83qXrQBO?XNGyMc(XnIi*F*8JS;4_+Zs>S0vPCVBJ#ng03C{64 z&IV`)RkPb?Z{%4O+t(x!^z, 2012-2014 +# Machaku , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Taarifa binafsi" + +msgid "Permissions" +msgstr "Ruhusa" + +msgid "Important dates" +msgstr "Tarehe muhimu" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Nenosiri limebadilishwa kwa mafanikio" + +#, python-format +msgid "Change password: %s" +msgstr "Badilisha nenosiri: %s" + +msgid "Authentication and Authorization" +msgstr "Utambulisho na Idhini" + +msgid "password" +msgstr "nenosiri" + +msgid "last login" +msgstr "kuingia kwa mara ya mwisho" + +msgid "No password set." +msgstr "Hakuna nenosiri lililowekwa." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Muundo batili wa nenosiri au algorithm ya ku-'hash' isiyotambulika" + +msgid "The two password fields didn't match." +msgstr "Sehemu mbili za nenosiri hazikufanana" + +msgid "Password" +msgstr "Nenosiri" + +msgid "Password confirmation" +msgstr "Uthibitisho wa nenosiri" + +msgid "Enter the same password as before, for verification." +msgstr "Rudia kuingiza nenosiri ili kuhakiki" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Tafadhali sahihisha %(username)s na nywila. Kumbuka kuzinazingatia herufi " +"kubwa na ndogo katika sehemu zote mbili." + +msgid "This account is inactive." +msgstr "Akaunti hii si hai." + +msgid "Email" +msgstr "Barua pepe" + +msgid "New password" +msgstr "Nywila mpya" + +msgid "New password confirmation" +msgstr "Uthibitisho wa nywila mpya" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Nywila yako ya zamani imekosewa. Tafadhali ingiza tena." + +msgid "Old password" +msgstr "Nywila ya zamani" + +msgid "Password (again)" +msgstr "Nywila (tena)" + +msgid "algorithm" +msgstr "alogarithimu" + +msgid "iterations" +msgstr "mizunguko" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "kazi inayohitajika" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "jina" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "jina la msimbo" + +msgid "permission" +msgstr "ruhusa" + +msgid "permissions" +msgstr "ruhusa" + +msgid "group" +msgstr "kundi" + +msgid "groups" +msgstr "makundi" + +msgid "superuser status" +msgstr "hadhi ya mtumiaji wa juu" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Teua mtumiaji huyu kuwa na ruhusa zote pasipo kuziainisha wazi." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ruhusa za mtumiaji" + +msgid "Specific permissions for this user." +msgstr "Ruhusa mahususi kwa mtumiaji huyu" + +msgid "username" +msgstr "jina la mtumiaji" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Tayari kuna anayetumia hilo jina la mtumiaji." + +msgid "first name" +msgstr "jina la kwanza" + +msgid "last name" +msgstr "jina la mwisho" + +msgid "email address" +msgstr "anuani ya barua pepe" + +msgid "staff status" +msgstr "hadhi ya utawala" + +msgid "Designates whether the user can log into this admin site." +msgstr "Teua kama mtumiaji anaweza kuingia katika tovuti ya utawala." + +msgid "active" +msgstr "hai" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr " " + +msgid "date joined" +msgstr "tarehe ya kujiunga" + +msgid "user" +msgstr "mtumiaji" + +msgid "users" +msgstr "watumiaji" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Neno siri hili linafanana sana na %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Nenosiri lako haliwezi kuwa linafanana sana na taarifa zako binafsi" + +msgid "This password is too common." +msgstr "Nenosiri hili ni la kawaida mno." + +msgid "Your password can't be a commonly used password." +msgstr "Nenosiri lako hairuhusiwi kuwa ambalo hutumika mara kwa mara." + +msgid "This password is entirely numeric." +msgstr "Nenosiri hili lina namba tupu." + +msgid "Your password can't be entirely numeric." +msgstr "Nenosiri lako haliwezi kuwa la namba tu." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Kuseti upya nywila ya %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Umetoka" + +msgid "Password reset" +msgstr "Kuseti nywila upya" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "Ingiza nywila mpya" + +msgid "Password reset unsuccessful" +msgstr "Imeshindikana kuseti nywila upya" + +msgid "Password reset complete" +msgstr "Kuset nywila upya kumekamilika" + +msgid "Password change" +msgstr "Kubadilisha nywila" + +msgid "Password change successful" +msgstr "Imeshindikana kubadilisha nywila" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77070958de4caca1c831fb01e713f63cf2e9061e GIT binary patch literal 2679 zcmai!ON9k$-?>%YJ<}nflB)kc&iT)O9^HR! zS%22ydA@w_fZKWhxQ`D{XPx8BfuDf8!Joj#z&l_C+;qR=JP2+BH-id%7@Pzj0cXHx zz<0q7pa+V52#Q@76rR)I1K^jS*nLx;p93FazXGlYGf@0*l=nY?!t*n@3H%)t9XTlW z|CIZGLGjzjp~Tq?eoKy9K`Fp@9DWVHMeu3xH?R(F*yuPf$T_$d{0MvwyZ~0g@4*ki zzd^B^CCC`q0$&D~!56`+py>M*6#qZLo#21v{dSU+y3T^aa}?YH8c^)dfYO(X;4bhN zQ0&)HJmJ{_N}Rpm)8L1owD2ij>BH!=l>_OEa7(?B;cVlTT9S(MEbpVdQbU=I$9bi$ zQagE`Z~GMT<|zcPUsLuY$*W-_!{; z$7m0tVrebxr_SFOxrb9fXt{59{nTy5byb;rui@@XJZ-Rb_mf{;P1Pn}cWb-d zscAL&YJK{(owcc24MX>ccRUczyVy1w-cq)g;-)$s1N<(epq^{o4QAAY_c|pqy z)f=c``(|jjRcXLpd?LTAea~%px?NWd-3~%EwqQ)BJ~6SlxL7s97tDJns?E4PQDoGI zuymdY16NjRWqkp`FB< z_Y!wDqVddYUG4ffFawcr=*nE!O?2oUh?90&S5e1q)0wF~s#wm9Me3y)H95Yg;^f(x zJiC*d+yJiD6rPUqQKd%^cKcVFe%b-TZwXSdmZnrG+w_ou`*yDff$ z!|aCT$gsisR-WBlb$7*j67GV%`f_bb?+{I|jMdhIN`qfrX;PFE8T}cttzP2@ a{otQO=48#DDEE*y^u>0x5No)GIsFe>lbsL% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..3e89f57e1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,283 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "தனிப்பட்ட விவரம்" + +msgid "Permissions" +msgstr "அனுமதிகள்" + +msgid "Important dates" +msgstr "முக்கியமான தேதிகள்" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "கடவுச்சொல்" + +msgid "last login" +msgstr "கடைசி உள்நுழைவு" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "கடவுச்சொல்" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "இந்த கணக்கு செயல்பட துவங்கவில்லை" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "கடவுச்சொல்(மறுபடியும்)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "பெயர்" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "குறிமுறை பெயர்" + +msgid "permission" +msgstr "அனுமதி" + +msgid "permissions" +msgstr "அனுமதிகள்" + +msgid "group" +msgstr "குழு" + +msgid "groups" +msgstr "குழுக்கள்" + +msgid "superuser status" +msgstr "மேலாளர் இருப்பு நிலை" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "இந்த பயனருக்கு எல்லா அங்கீகாரங்களும் வழங்கப்படவில்லை." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "பயனர் அனுமதிகள்" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "பயனர் பெயர்" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "முதல் பெயர்" + +msgid "last name" +msgstr "கடைசி பெயர்" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "பணியாளர் நிலை" + +msgid "Designates whether the user can log into this admin site." +msgstr "பயனர், 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது" + +msgid "active" +msgstr "செயல்படும்" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "சேர்ந்த தேதி" + +msgid "user" +msgstr "பயனர்" + +msgid "users" +msgstr "பயனர்கள்" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "வெளியே வந்துவீட்டீர்" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4aad473bb99ee2728bfb4d11faad923022e85e8d GIT binary patch literal 2955 zcma)+TW=Iq9KeqXi0d7^qQW7HwBYWxr3!AX;hsQRX`uLGG#Phhw}Z1Yo0-`b5)*+$ zK@Ev7g@l+8w4&ibrW%mGKzQ&2$Oq7QG12d!#^3+U?DoQXIoUbCIdlH!e?R;4s%6uP zv7YByo)_*?stjMcn~Cuo?1jI>)o}GaN<9oW!UEh1AAmdI)9^sPcHv6alkgGv0bC0| zgO9^2@P7Csd=UNwH^5(@=vlr@sTFV?6g@9OkuO8BI|P@*y-?&v^6!V>eXQSs{L}=K zoNqumHwi`02`GM_f&A2YCh_wE6!`>-{y8{JPHw`tSRcmNemDy^!$06A*mExrJOp>c z_u=#K7JLf+3PtWO_%`gtNIyIUWq%HCfw$p%a0Nj~9YQF1`y%HpD0ND6{t2ZXYY0yA zx(P}iw?oNe4N9EHq1ZVCSHVm9dJewK`ZkpFD@jfXu7%PQqwpCRK+>Raf6;i1mB`6h z$0NRoe|h^Dn;bPdfYLJML;R8<^?#CQjVu__XAhaTtTwcSsfpBCYDCB;2C2_;Jdg6= zzIuX3hU80z#3MuUpmyk1v(pgZP)fU#v0$M6D6eFNL$rv&>}!yUEiw4?xa&v8C5l~9m$oF==G7n z^&MLgTNG>axgG|srZRJ+Jd4j>P;<-L;E5TlJ_o9#nK;?7(<&7X_E1 z6n7I&MGy4#Z!Pw{S{xYE{aY%7uWarc=<7qUc+i=2MQ0be!OFnk<~~MYgm8=Fq2))O z6$fEO@3(xPB#t<)?Rfe%ykWWBGs}`x<#o>Z^_Eq4isO#esOWLWYt>u2XCjW9m2!D% zYN`~ALbv7|Emea?ISZ)`FF#$5opNtsbl>Qn`QZCYeT7|tA3Huy9cvO@>>Q2DO^@yx z(lk{VIq~q}@x8@u^KxRV=7hyPK81GudPQ%0*Nr<~ijKmV*9tAKxHkwJQAPVrvy6rZ zhIIBi+~e!@!@9qBsG!p1v`&+6(&R>(d@H}%6KOJ&&VItzQ)zNCO{TNO)ik+j1eve! zDNW9$$t80xVGHq(WqbCF5lYa5?(1z0sG3QW%k2{#IXQ<}jB|pc=Z$?#erir$M6Iozeeh=pQ}kzM*?eXy2PKnUD8kr>iKI7v(*x=;u<- zgm*GSiI}PD4IErtmb^qKN=vk7CH=3sKQyN4ER<3&Uh+y^ZPzm^6An-#9LP(N`Oq#{ za#Cx|OT&`ekMa&N8DDI`v}32)#1uymAuX9k3Ph)$HkFcy*3se~exKzPx*lWh`-W@??^ScJ2?K^f3>jf`@ZHxzZVvdCoD9+UG+ zYjMY?1@$NE++3XCFNG^l<*%D%-Xz&Yk^QgQIg>0C0eQPT>HbwO^=5(TE=rap K^$v;7>AwNnnfze@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..d50487ce6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Jannis Leidel , 2011 +# వీవెన్ , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "వ్యక్తిగత సమాచారం " + +msgid "Permissions" +msgstr "అనుమతులు" + +msgid "Important dates" +msgstr "ముఖ్యమైన తేదీలు" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "సంకేతపదాన్ని విజయవంతంగా మార్చారు." + +#, python-format +msgid "Change password: %s" +msgstr "సంకేతపదాన్ని మార్చుకోండి: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "సంకేతపదం" + +msgid "last login" +msgstr "చివరి ప్రవేశం" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "ఈ రెండు అనుమతి పదాలు అసమానమైనంగ ఉన్నాయి" + +msgid "Password" +msgstr "సంకేతపదం" + +msgid "Password confirmation" +msgstr "సంకేపదపు నిర్ధారణ" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ఈ ఖాతా అచేతనమైనది" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "కొత్త సంకేతపదం" + +msgid "New password confirmation" +msgstr "కొత్త సంకేతపదపు నిర్ధారణ" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "పాత సంకేతపదం" + +msgid "Password (again)" +msgstr "సంకేతపదం (మళ్ళీ)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "పేరు" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "సంహితనామము" + +msgid "permission" +msgstr "అనుమతి" + +msgid "permissions" +msgstr "అనుమతులు" + +msgid "group" +msgstr "గుంపు" + +msgid "groups" +msgstr "గుంపులు" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "వాడుకరి అనుమతులు" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "వాడుకరిపేరు" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ఈ నామముతొ ఇంకొ వినియొగదారి ఉన్నరు" + +msgid "first name" +msgstr "మొదటి పేరు" + +msgid "last name" +msgstr "ఇంటి పేరు" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "ఉద్యోగస్తుల స్థితి" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "క్రియాశీలం" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "చేరిన తేదీ" + +msgid "user" +msgstr "వాడుకరి" + +msgid "users" +msgstr "వాడుకరులు" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "నిష్క్రమించారు" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..301132d3189547139250765c9d496bb14a224b9f GIT binary patch literal 7932 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..984b9699e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,299 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 00:26+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Маълумоти хусусӣ" + +msgid "Permissions" +msgstr "Салоҳият" + +msgid "Important dates" +msgstr "Санаҳои муҳим" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s бо калидҳои ягонаи(pk) %(key)r вуҷуд надорад." + +msgid "Password changed successfully." +msgstr "Рамз муваффақона иваз карда шуд." + +#, python-format +msgid "Change password: %s" +msgstr "Ивазкунии рамз: %s" + +msgid "Authentication and Authorization" +msgstr "Истифодабарандагон ва гурӯҳҳо" + +msgid "password" +msgstr "рамз" + +msgid "last login" +msgstr "охирин вуруд" + +msgid "No password set." +msgstr "Рамзро ворид созед." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Формати рамз ё алгоритми ҳеш(hash) ношинос аст." + +msgid "The two password fields didn’t match." +msgstr "" + +msgid "Password" +msgstr "Рамз" + +msgid "Password confirmation" +msgstr "Тасдиқи рамз" + +msgid "Enter the same password as before, for verification." +msgstr "Барои тасдиқсозӣ хоҳишмандем, бори дигар рамзро ворид созед." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Хоҳишмандем %(username)s ва рамзро дуруст ворид созед. Ҳарду майдон " +"духӯра(case-sensitive) ҳастанд." + +msgid "This account is inactive." +msgstr "Ин ҳисоби корбарӣ хомӯш аст." + +msgid "Email" +msgstr "Суроғаи почтаи электронӣ" + +msgid "New password" +msgstr "Рамзи нав" + +msgid "New password confirmation" +msgstr "Тасдиқи рамзи нав" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Рамзи пешинаро нодуруст ворид кардед. Хоҳишмандем аз нав шакли дурусташро " +"ворид созед." + +msgid "Old password" +msgstr "Рамзи кӯҳна" + +msgid "Password (again)" +msgstr "Рамз (такроран)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "итератсияҳо" + +msgid "salt" +msgstr "намак" + +msgid "hash" +msgstr "ҳэш" + +msgid "variety" +msgstr "маҷмӯа" + +msgid "version" +msgstr "версия" + +msgid "memory cost" +msgstr "истифодаи ҳофиза" + +msgid "time cost" +msgstr "истифодаи вақт" + +msgid "parallelism" +msgstr "параллелизм" + +msgid "work factor" +msgstr "омили корӣ" + +msgid "checksum" +msgstr "натиҷаи санҷиш" + +msgid "name" +msgstr "ном" + +msgid "content type" +msgstr "намуди контент" + +msgid "codename" +msgstr "номи рамзӣ" + +msgid "permission" +msgstr "салоҳият" + +msgid "permissions" +msgstr "салоҳият" + +msgid "group" +msgstr "гурӯҳ" + +msgid "groups" +msgstr "гурӯҳҳо" + +msgid "superuser status" +msgstr "статуси истифодабарӣ аввалиндараҷа(superuser)" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Нишон медиҳад, ки истифодабаранда дорои ҳама гуна салоҳиятҳост." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Гуруҳҳое, ки истифодабарандаи мазкур ба онҳо шомил аст.Истифодабаранда ҳамаи " +"салоҳиятҳои дар гуруҳҳо мавҷудбударо дорост" + +msgid "user permissions" +msgstr "ҳуқуқҳои истифодабаранда" + +msgid "Specific permissions for this user." +msgstr "салоҳиятҳои шахсии истифодабаранда" + +msgid "username" +msgstr "номи истифодабаранда" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Майдони пуркаданаш зарурӣ. На беш аз 150 аломат. Танҳо аз ҳарфҳо, рақамҳо ва " +"аломатҳо @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Чунин номи истифодабаранда алакай вуҷуд дорад." + +msgid "first name" +msgstr "ном" + +msgid "last name" +msgstr "насаб" + +msgid "email address" +msgstr "суроғаи почтаи электронӣ" + +msgid "staff status" +msgstr "статуси шахс" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Қайд кунед, агар истифодабаранда ҳуқуқи воридшавӣ ба қисми маъмурии сомонаро " +"дошта бошад." + +msgid "active" +msgstr "фаъол" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Қайд кунед, агар истифодабаранда фаъол ҳисобида шавад. Қайдро бекор кунед, " +"дар ҳолати нест сохтани ҳисоби корбарӣ" + +msgid "date joined" +msgstr "санаи бақайдгирӣ" + +msgid "user" +msgstr "истифодабаранда" + +msgid "users" +msgstr "истифодабарандаҳо" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Рамзи воридкардашуда ба %(verbose_name)s монанд аст." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "Рамзи воридкардашуда хеле серистеъмол аст." + +msgid "Your password can’t be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "Рамзи воридкардашуда танҳо аз рақамҳо иборат аст." + +msgid "Your password can’t be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Барҳамдиҳии рамз дар сайти мазкур %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Номи истифодабарандаро дуруст ворид созед. Қимати ин майдон бояд танҳоаз " +"ҳуруфи англисӣ, рақамҳо ва аломатҳо @/./+/-/_ иборат бошад." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Номи истифодабарандаро дуруст ворид созед. Қимати ин майдон бояд танҳоаз " +"ҳарфҳо, рақамҳо ва аломатҳо @/./+/-/_ иборат бошад." + +msgid "Logged out" +msgstr "Рухсатшуда(Logged out)" + +msgid "Password reset" +msgstr "Барқарорсозии рамз" + +msgid "Password reset sent" +msgstr "Мактуби дастурамал оиди барқарорсозии рамз равон карда шуд." + +msgid "Enter new password" +msgstr "Рамзи навро ворид созед" + +msgid "Password reset unsuccessful" +msgstr "Мушкилӣ ҳангоми барқарорсозии рамз." + +msgid "Password reset complete" +msgstr "Барқарорсозии рамз ба анҷом расид." + +msgid "Password change" +msgstr "Ивази рамз" + +msgid "Password change successful" +msgstr "рамз муваффақона иваз карда шуд" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f96948f45846c8b0c0e755ce1fe138834eec09b GIT binary patch literal 6013 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..79da789b8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,282 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-29 04:33+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ข้อมูลส่วนตัว" + +msgid "Permissions" +msgstr "สิทธิ์" + +msgid "Important dates" +msgstr "วันที่ที่สำคัญ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "เปลี่ยนรหัสผ่านสำเร็จแล้ว" + +#, python-format +msgid "Change password: %s" +msgstr "เปลี่ยนรหัสผ่าน: %s " + +msgid "Authentication and Authorization" +msgstr "การตรวจสอบและอนุมัติ" + +msgid "password" +msgstr "รหัสผ่าน" + +msgid "last login" +msgstr "เข้าสู่ระบบครั้งสุดท้าย" + +msgid "No password set." +msgstr "ไม่ได้ตั้งค่ารหัสผ่าน" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "รูปแบบรหัสผ่านไม่ถูกต้อง หรือไม่รู้จักแฮชอัลกอริทึมนี้" + +msgid "The two password fields didn't match." +msgstr "รหัสผ่านไม่ตรงกัน" + +msgid "Password" +msgstr "รหัสผ่าน" + +msgid "Password confirmation" +msgstr "ยืนยันรหัสผ่าน" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "กรุณาใส่ %(username)s และรหัสผ่านที่ถูกต้อง มีการแยกแยะตัวพิมพ์ใหญ่-เล็ก" + +msgid "This account is inactive." +msgstr "บัญชีนี้ไม่ทำงาน" + +msgid "Email" +msgstr "อีเมล" + +msgid "New password" +msgstr "รหัสผ่านใหม่" + +msgid "New password confirmation" +msgstr "ยืนยันการตั้งรหัสผ่านใหม่" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "ใส่รหัสผ่านเก่าผิด กรุณาใส่รหัสผ่านอีกครั้ง" + +msgid "Old password" +msgstr "รหัสผ่านเก่า" + +msgid "Password (again)" +msgstr "รหัสผ่าน (อีกครั้ง)" + +msgid "algorithm" +msgstr "algorithm" + +msgid "iterations" +msgstr "iterations" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "ปัจจัยการทำงาน" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "ชื่อ" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "รหัสชื่อ" + +msgid "permission" +msgstr "สิทธิ์" + +msgid "permissions" +msgstr "สิทธิ์" + +msgid "group" +msgstr "กลุ่ม" + +msgid "groups" +msgstr "กลุ่ม" + +msgid "superuser status" +msgstr "สถานะผู้ใช้พิเศษ" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "กำหนดสิทธิ์ทุกอย่างให้ผู้ใช้ โดยไม่ต้องการมอบหมายอย่างเป็นทางการ" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "สิทธิ์ของผู้ใช้" + +msgid "Specific permissions for this user." +msgstr "สิทธิ์ที่เฉพาะเจาะจงสำหรับผู้ใช้นี้" + +msgid "username" +msgstr "ชื่อผู้ใช้" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ชื่อผู้ใช้นั้นได้ถูกใช้ไปแล้ว" + +msgid "first name" +msgstr "ชื่อ" + +msgid "last name" +msgstr "นามสกุล" + +msgid "email address" +msgstr "ที่อยู่อีเมล" + +msgid "staff status" +msgstr "สถานะของพนักงาน" + +msgid "Designates whether the user can log into this admin site." +msgstr "กำหนดผู้ที่จะเข้ามาใช้งานในส่วนของผู้ดูแลระบบ" + +msgid "active" +msgstr "ใช้งานได้" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "กำหนดให้ผู้ใช้มีสถานะที่สามารถเข้ามาใช้งานได้ เลือกออกแทนที่จะลบชื่อผู้ใช้ทิ้งไป " + +msgid "date joined" +msgstr "วันที่เข้าร่วม" + +msgid "user" +msgstr "ผู้ใช้" + +msgid "users" +msgstr "ผู้ใช้" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "รีเซ็ตรหัสผ่านบน %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ออกจากระบบ" + +msgid "Password reset" +msgstr "รีเซ็ตรหัสผ่าน" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "ป้อนรหัสผ่านใหม่" + +msgid "Password reset unsuccessful" +msgstr "ตั้งรหัสผ่านใหม่ไม่สำเร็จ" + +msgid "Password reset complete" +msgstr "รีเซ็ตรหัสผ่านเสร็จสมบูรณ์" + +msgid "Password change" +msgstr "เปลี่ยนรหัสผ่าน" + +msgid "Password change successful" +msgstr "เปลี่ยนรหัสผ่านสำเร็จ" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fdf3f71af85f96ab0f8b219c737295eb2302712c GIT binary patch literal 7343 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 K|1K3+U;PXIF6fc~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.po new file mode 100644 index 000000000..9b66dadd6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/tk/LC_MESSAGES/django.po @@ -0,0 +1,303 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Resulkary , 2020 +# Welbeck Garli , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-06 17:52+0000\n" +"Last-Translator: Resulkary \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Şahsy maglumat" + +msgid "Permissions" +msgstr "Rugsatlar" + +msgid "Important dates" +msgstr "Möhüm seneler" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Esasy açary %(key)r bolan %(name)s obýekt ýok." + +msgid "Password changed successfully." +msgstr "Parol üstünlikli üýtgedildi." + +#, python-format +msgid "Change password: %s" +msgstr "Paroly üýtgetmek: %s" + +msgid "Authentication and Authorization" +msgstr "Şahsyýet tanamak we Ygtyýarnama" + +msgid "password" +msgstr "parol" + +msgid "last login" +msgstr "soňky giriş" + +msgid "No password set." +msgstr "Parol goýulmady." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Nädogry parol formaty ýa-da näbelli hashing algoritmi." + +msgid "The two password fields didn’t match." +msgstr "Iki parol meýdançasy gabat gelmedi." + +msgid "Password" +msgstr "Parol" + +msgid "Password confirmation" +msgstr "Parol tassyklamasy" + +msgid "Enter the same password as before, for verification." +msgstr "Barlamak üçin öňküsi ýaly paroly giriziň." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Çig parollar saklanmaýar, şonuň üçin bu ulanyjynyň parolyny görmegiň " +"mümkinçiligi ýok, ýöne şu formany ulanyp üýtgedip " +"bilersiňiz." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Haýyş, dogry %(username)s we paroly giriziň. Iki meýdançanyň hem baş-setir " +"harpa duýgur bolup biljekdigine üns beriň." + +msgid "This account is inactive." +msgstr "Bu hasap hereketsiz." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Täze parol" + +msgid "New password confirmation" +msgstr "Täze parol tassyklamasy" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Köne parolyňyz nädogry girizildi. Gaýtadan girizmegiňizi haýyş edýäris." + +msgid "Old password" +msgstr "Köne parol" + +msgid "Password (again)" +msgstr "Parol (gaýtadan)" + +msgid "algorithm" +msgstr "algoritm" + +msgid "iterations" +msgstr "gaýtalama" + +msgid "salt" +msgstr "duz" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "dürlülik" + +msgid "version" +msgstr "wersiýa" + +msgid "memory cost" +msgstr "ýadyň bahasy" + +msgid "time cost" +msgstr "wagt bahasy" + +msgid "parallelism" +msgstr "parallellik" + +msgid "work factor" +msgstr "iş faktory" + +msgid "checksum" +msgstr "çek" + +msgid "name" +msgstr "at" + +msgid "content type" +msgstr "mazmunyň görnüşi" + +msgid "codename" +msgstr "kod ady" + +msgid "permission" +msgstr "rugsat" + +msgid "permissions" +msgstr "rugsatlar" + +msgid "group" +msgstr "topar" + +msgid "groups" +msgstr "toparlar" + +msgid "superuser status" +msgstr "superuser ýagdaýy" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Bu ulanyjynyň aç-açan bellemezden ähli rugsatlarynyň bardygyny belleýär." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Bu ulanyjynyň degişli toparlary. Ulanyjy her bir topara berlen ähli " +"rugsatlary alar." + +msgid "user permissions" +msgstr "ulanyjy rugsatlary" + +msgid "Specific permissions for this user." +msgstr "Bu ulanyjy üçin ýörite rugsatlar." + +msgid "username" +msgstr "ulanyjy ady" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Gerekli. 150 harp ýa-da azyrak. Diňe harplar, sanlar we @/./+/-/_ mümkin." + +msgid "A user with that username already exists." +msgstr "Bu ulanyjy adyny ulanýan ulanyjy eýýäm bar." + +msgid "first name" +msgstr "at" + +msgid "last name" +msgstr "familiýa" + +msgid "email address" +msgstr "email salgy" + +msgid "staff status" +msgstr "işgärleriň ýagdaýy" + +msgid "Designates whether the user can log into this admin site." +msgstr "Ulanyjynyň bu administrator sahypasyna girip biljekdigini kesgitleýär." + +msgid "active" +msgstr "işjeň" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Bu ulanyja işjeň garalmalydygyny ýa-da ýokdugyny kesgitleýär. Hasaplary " +"pozmagyň ýerine şuny saýlaň." + +msgid "date joined" +msgstr "goşulan senesi" + +msgid "user" +msgstr "ulanyjy" + +msgid "users" +msgstr "ulanyjylar" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Bu parol gaty gysga. Iň azyndan %(min_length)d nyşandan ybarat bolmaly." +msgstr[1] "" +"Bu parol gaty gysga. Iň azyndan %(min_length)d nyşandan ybarat bolmaly." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Parolyňyzda azyndan %(min_length)d nyşan bolmaly." +msgstr[1] "Parolyňyzda azyndan %(min_length)d nyşan bolmaly." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Parol %(verbose_name)s-e gaty meňzeýär." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Parolyňyz beýleki şahsy maglumatlaryňyza gaty meňzeş bolmaly däl." + +msgid "This password is too common." +msgstr "Bu parol gaty ýygy ulanylýar." + +msgid "Your password can’t be a commonly used password." +msgstr "Parolyňyz köplenç ulanylýan parol bolmaly däl." + +msgid "This password is entirely numeric." +msgstr "Bu parol diňe sanlardan ybarat." + +msgid "Your password can’t be entirely numeric." +msgstr "Parolyňyz diňe sanlardan ybarat bolup bilmez." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s-de paroly täzeden düzüldi" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Dogry ulanyjy adyny giriziň. Bu bahada diňe iňlis harplary, sanlar we @/./" +"+/-/_ nyşanlary bolup biler." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Dogry ulanyjy adyny giriziň. Bu bahada diňe harplar, sanlar we @/./+/-/_ " +"nyşanlary bolup biler." + +msgid "Logged out" +msgstr "Çykyldy" + +msgid "Password reset" +msgstr "Paroly täzeden düzmek" + +msgid "Password reset sent" +msgstr "Paroly täzeden düzmek boýunça görkezmeler iberildi" + +msgid "Enter new password" +msgstr "Täze parol giriziň" + +msgid "Password reset unsuccessful" +msgstr "Paroly täzeden düzüp bolmady" + +msgid "Password reset complete" +msgstr "Paroly täzeden düzüldi" + +msgid "Password change" +msgstr "Parol üýtgetmek" + +msgid "Password change successful" +msgstr "Parol üýtgetmek üstünlikli tamamlandy" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b867b44b5334002f3f5e75fbad4542b484ef8fdb GIT binary patch literal 7506 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, 2013 +# BouRock, 2015-2017,2019-2021 +# BouRock, 2014-2015 +# Caner Başaran , 2013 +# Cihad GÜNDOĞDU , 2014 +# Gökmen Görgen , 2013 +# Jannis Leidel , 2011 +# Metin Amiroff , 2012 +# Murat Çorlu , 2012 +# U. Ozan Basar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 17:30+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "Kişisel bilgiler" + +msgid "Permissions" +msgstr "İzinler" + +msgid "Important dates" +msgstr "Önemli tarihler" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(key)r birincil anahtarı olan %(name)s nesnesi mevcut değil." + +msgid "Password changed successfully." +msgstr "Parola başarılı olarak değiştirildi." + +#, python-format +msgid "Change password: %s" +msgstr "Parolayı değiştir: %s" + +msgid "Authentication and Authorization" +msgstr "Kimlik Doğrulama ve Yetkilendirme" + +msgid "password" +msgstr "parola" + +msgid "last login" +msgstr "son oturum açma" + +msgid "No password set." +msgstr "Ayarlı parola yok." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Geçersiz parola biçimi veya bilinmeyen adresleme algoritması." + +msgid "The two password fields didn’t match." +msgstr "İki parola alanı eşleşmedi." + +msgid "Password" +msgstr "Parola" + +msgid "Password confirmation" +msgstr "Parola onayı" + +msgid "Enter the same password as before, for verification." +msgstr "Doğrulama için önceki gibi aynı parolayı girin." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Ham parolalar saklanmaz, bu yüzden bu kullanıcının parolasını görmenin yolu " +"yoktur, fakat bu formu kullanarak parolayı " +"değiştirebilirsiniz." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Lütfen doğru %(username)s ve parola girin. Her iki alanın da büyük/küçük " +"harfe duyarlı olabileceğini unutmayın." + +msgid "This account is inactive." +msgstr "Bu hesap devre dışı." + +msgid "Email" +msgstr "E-posta" + +msgid "New password" +msgstr "Yeni parola" + +msgid "New password confirmation" +msgstr "Yeni parola onayı" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Eski parolanız yanlış girildi. Lütfen tekrar girin." + +msgid "Old password" +msgstr "Eski parola" + +msgid "Password (again)" +msgstr "Parola (tekrar)" + +msgid "algorithm" +msgstr "algoritma" + +msgid "iterations" +msgstr "yinelemeler" + +msgid "salt" +msgstr "tuz" + +msgid "hash" +msgstr "adresleme" + +msgid "variety" +msgstr "çeşitlilik" + +msgid "version" +msgstr "sürüm" + +msgid "memory cost" +msgstr "bellek maliyeti" + +msgid "time cost" +msgstr "zaman maliyeti" + +msgid "parallelism" +msgstr "paralellik" + +msgid "work factor" +msgstr "iş faktörü" + +msgid "checksum" +msgstr "sağlama" + +msgid "block size" +msgstr "blok boyutu" + +msgid "name" +msgstr "adı" + +msgid "content type" +msgstr "içerik türü" + +msgid "codename" +msgstr "kod adı" + +msgid "permission" +msgstr "izin" + +msgid "permissions" +msgstr "izinler" + +msgid "group" +msgstr "grup" + +msgid "groups" +msgstr "gruplar" + +msgid "superuser status" +msgstr "süper kullanıcı durumu" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Bu kullanıcıya ayrı ayrı izin atamadan tüm izinlerin verilip verilmeyeceğini " +"belirler." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Bu kullanıcının ait olduğu gruplar. Bir kullanıcı kendi gruplarının her " +"birine verilmiş olan tüm izinleri alacak." + +msgid "user permissions" +msgstr "kullanıcı izinleri" + +msgid "Specific permissions for this user." +msgstr "Bu kullanıcı için belirli izinler." + +msgid "username" +msgstr "kullanıcı adı" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Zorunlu. 150 karakter ya da daha az olmalı. Sadece harfler, rakamlar ve @/./" +"+/-/_ karakterleri kullanılabilir." + +msgid "A user with that username already exists." +msgstr "Bu kullanıcı adında bir kullanıcı zaten mevcut." + +msgid "first name" +msgstr "adı" + +msgid "last name" +msgstr "soyadı" + +msgid "email address" +msgstr "e-posta adresi" + +msgid "staff status" +msgstr "görev durumu" + +msgid "Designates whether the user can log into this admin site." +msgstr "Kullanıcının bu yönetici sitesine oturum açıp açamayacağını belirler." + +msgid "active" +msgstr "etkin" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Bu kullanıcının etkin olarak işlem görüp görmediğini belirler. Hesapları " +"silmek yerine bunun işaretini kaldırın." + +msgid "date joined" +msgstr "katılma tarihi" + +msgid "user" +msgstr "kullanıcı" + +msgid "users" +msgstr "kullanıcılar" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Bu parola çok kısa. En az %(min_length)d karakter içermek zorunda." +msgstr[1] "Bu parola çok kısa. En az %(min_length)d karakter içermek zorunda." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Parolanız en az %(min_length)d karakter içermek zorunda." +msgstr[1] "Parolanız en az %(min_length)d karakter içermek zorundadır." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Parolanız %(verbose_name)s ile çok benzerdir." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Parolanız diğer kişisel bilgileriniz ile çok benzer olamaz." + +msgid "This password is too common." +msgstr "Bu parola çok geneldir." + +msgid "Your password can’t be a commonly used password." +msgstr "Parolanız yaygın olarak kullanılan bir parola olamaz." + +msgid "This password is entirely numeric." +msgstr "Bu parola tamamıyla sayısaldır." + +msgid "Your password can’t be entirely numeric." +msgstr "Parolanız tamamıyla sayısal olamaz." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s sitesinde parola sıfırlama" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Geçerli bir kullanıcı adı girin. Bu değer sadece İngilizce harfleri, " +"sayıları, ve @/./+/-/_ karakterlerini içerebilir." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Geçerli bir kullanıcı adı girin. Bu değer sadece harfleri, sayıları, ve @/./" +"+/-/_ karakterlerini içerebilir." + +msgid "Logged out" +msgstr "Oturum kapatıldı" + +msgid "Password reset" +msgstr "Parolayı sıfırla" + +msgid "Password reset sent" +msgstr "Parola sıfırlama gönderildi" + +msgid "Enter new password" +msgstr "Yeni parolayı girin" + +msgid "Password reset unsuccessful" +msgstr "Parola sıfırlama başarısız" + +msgid "Password reset complete" +msgstr "Parola sıfırlama tamamlandı" + +msgid "Password change" +msgstr "Parola değiştirme" + +msgid "Password change successful" +msgstr "Parola değiştirme başarılı" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c2d43fd59a479c1368fdf0b7dfd79bff359a6e8a GIT binary patch literal 1371 zcmZvZ%}*0S7{*7%uZpM;qcIpq;{hbwE|n-Qq6Wl7142yo=3(p(WyyB8*_~QA7z-RU zAzn;OBr!3Ds|FPtj99#Rb*3cV^ndVX;>Bl{La8#zyT5s7-jC;<{n^~`j9?vvwZdM& zj_Cb1e6S|Ko!}(c3_b)K!KYQe1oyyy4eA;t@BsJ~JO+LTo4{Y-evoV@qycCGbzV!= zZ>{<#LEY~R_yjp7sOzrmAfyfa2DX5|!NXu9ifKKkKm$yGC&0VlW$;1OFN4S7{{VI0 zKcLQQKr=npAyD6+29JV$Alh#%9UJKfwI03noO-rh+QHfl+Xq7`iNSOq$RvAVdSR4k z_Q)B?GRGwYp5OuXc!B0v7#94%CO0=b!>(Ps8Cefm-_SOeVUE{MHV)Eb%**h9eH!M| zXdAD{I@Q@3_wG7H^8*WHEmgQtaNj~HO(Vys8Z$dH>_~Se+jO(^>2fpKb7PZIG z)Q{cbIX@7_P?&LSqc5Kcjg)WE*vN3o=nps(h&8SD1tZx-JI`8O=Q_-! zX(G_L#qT@1<`!{XRp7!*BA)iMiM5H=;Z~CqLL}N_L)V7} zYO{C7%~-#Wzvw~JWDdg#J|Pl07yqS);&%ji<=)$=Yesi1PWKw+fid8vecSOe7VW<0 zhz*gbAz~wLK47kK%@4AnMZH|)hP|CVbZy&f_QZ&MBbVb;evvEck(!ooiCn16%ePcb z$&xCnsmg*}l4V(<@>6s$ElY9{wzO3skDK$&vNBvClGuixF1lniNU>TuhHG^kG;D1MS OJy({txYfz3Nd5w+T, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "серсүз" + +msgid "last login" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "Серсүз" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "Эл. почта" + +msgid "New password" +msgstr "Яңа серсүз" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "Иске серсүз" + +msgid "Password (again)" +msgstr "Серсүз (тагын бер тапкыр)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "исем" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "кулланучы исеме" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "эл. почта адресы" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "кулланучы" + +msgid "users" +msgstr "кулланучылар" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "Серсүзне торгызу" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "Яңа серсүзне кертегез" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "Серсүзне үзгәртү" + +msgid "Password change successful" +msgstr "Серсүз уңышлы рәвештә үзгәртелгән" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..040fd655ffc0a218eff8971e87b9688cc37eff1f GIT binary patch literal 462 zcmZWlPfx-y9L4BqN6#L5@Swr2okTN=7$ZW0kx0n!Ubi2kWNVkU6Z{_f_53XU1_lnk z4mw+8lBfN2bzE^1(|1M zZ9TbIdS3~~*6VfXn}%uun=myct9CIRtJp3bEB-pLIxE>_Fd0vVhaZSS9t@23pmDR$ z3L|>hcvcls=^ja!(mL?{c`~B$!Pg92fTcs7noQ|jkoaBs{i=fCq+nXqRu*(*Z0Q8i Q)mFNG)FZoVpZ9{+F97$5!~g&Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.po new file mode 100644 index 000000000..c5605af6a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.po @@ -0,0 +1,226 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 10:30+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a1d8d7e898a9d150b42719712a310bcf4e96afb GIT binary patch literal 10077 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, 2012 +# Igor Melnyk, 2014-2015 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2015 +# Max V. Stotsky , 2014 +# captain_m4l , 2012 +# Mykola Zamkovoi , 2014,2021 +# Alex Bolotov , 2013 +# Vitaliy Kozlovskyi , 2015 +# Zoriana Zaiats, 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-23 17:41+0000\n" +"Last-Translator: Mykola Zamkovoi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Personal info" +msgstr "Особиста інформація" + +msgid "Permissions" +msgstr "Дозволи" + +msgid "Important dates" +msgstr "Важливі дати" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s об'єкт з первинним ключем %(key)r не існує." + +msgid "Password changed successfully." +msgstr "Пароль успішно змінено." + +#, python-format +msgid "Change password: %s" +msgstr "Змінити пароль: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентифікація та авторизація" + +msgid "password" +msgstr "пароль" + +msgid "last login" +msgstr "останній вхід" + +msgid "No password set." +msgstr "Пароль не встановлено." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невірний формат пароля або невідомий алгоритм хешування." + +msgid "The two password fields didn’t match." +msgstr "Паролі не збігаються" + +msgid "Password" +msgstr "Пароль" + +msgid "Password confirmation" +msgstr "Підтвердження пароля" + +msgid "Enter the same password as before, for verification." +msgstr "Введіть той же пароль, що і раніше, для підтвердження." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Паролі не зберігаються у відкритому вигляді, тому немає можливості " +"переглянути пароль цього користувача, але ви можете змінити пароль за " +"допомогою цієї форми." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Будь ласка, введіть правильні %(username)s та пароль. Зауважте, що обидва " +"поля чутливі до регістру." + +msgid "This account is inactive." +msgstr "Цей запис користувача не активний." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Новий пароль" + +msgid "New password confirmation" +msgstr "Новий пароль (підтвердження)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Старий пароль було введено неправильно. Будь ласка, введіть його знову." + +msgid "Old password" +msgstr "Старий пароль" + +msgid "Password (again)" +msgstr "Пароль (ще раз)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "ітерації" + +msgid "salt" +msgstr "сіль" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "різноманітність" + +msgid "version" +msgstr "версія" + +msgid "memory cost" +msgstr "витрати пам’яті" + +msgid "time cost" +msgstr "витрати часу" + +msgid "parallelism" +msgstr "паралелізм" + +msgid "work factor" +msgstr "робочий фактор" + +msgid "checksum" +msgstr "контрольна сума" + +msgid "block size" +msgstr "розмір блоку" + +msgid "name" +msgstr "ім'я" + +msgid "content type" +msgstr "тип вмісту" + +msgid "codename" +msgstr "код" + +msgid "permission" +msgstr "дозвіл" + +msgid "permissions" +msgstr "дозволи" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статус суперкористувача" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Визначає, що цей користувач має всі дозволи без їх точного зазначення." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групи, до яких належить користувач. Користувач отримає всі дозволи, що " +"вказані в кожній з його груп." + +msgid "user permissions" +msgstr "дозволи користувача" + +msgid "Specific permissions for this user." +msgstr "Особливі права доступу для цього користувача." + +msgid "username" +msgstr "ім'я користувача" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Необхідно: 150 або менше символів. тільки букви, цифри та знаки @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Користувач з таким ім'ям вже існує." + +msgid "first name" +msgstr "ім'я" + +msgid "last name" +msgstr "прізвище" + +msgid "email address" +msgstr "email адреса" + +msgid "staff status" +msgstr "статус персоналу" + +msgid "Designates whether the user can log into this admin site." +msgstr "Визначає, чи може користувач увійти до цього сайту адміністрування." + +msgid "active" +msgstr "активний" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Визначає, чи можна цього користувача вважати діючим. Заберіть галочку, " +"замість видалення запису користувача." + +msgid "date joined" +msgstr "дата приєднання" + +msgid "user" +msgstr "користувач" + +msgid "users" +msgstr "користувачі" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символ" +msgstr[1] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символи" +msgstr[2] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символів" +msgstr[3] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символів" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваш пароль повинен містити як мінімум %(min_length)d символ" +msgstr[1] "Ваш пароль повинен містити як мінімум %(min_length)d символи" +msgstr[2] "Ваш пароль повинен містити як мінімум %(min_length)d символів" +msgstr[3] "Ваш пароль повинен містити як мінімум %(min_length)d символів" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Пароль надто схожий на %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Пароль не може бути надто схожим на іншу особисту інформацію." + +msgid "This password is too common." +msgstr "Пароль надто відомий." + +msgid "Your password can’t be a commonly used password." +msgstr "Пароль не може бути одним із дуже поширених." + +msgid "This password is entirely numeric." +msgstr "Цей пароль повністю складається із цифр." + +msgid "Your password can’t be entirely numeric." +msgstr "Пароль не може складається лише із цифр." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Скидання пароля на %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Введіть коректне ім'я користувача. Значення цього поля може складатися лише " +"з англійських літер, цифр, а також з символів: @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Введіть коректне ім'я користувача. Значення цього поля може складатися лише " +"з літер, цифр, а також з символів: @/./+/-/_." + +msgid "Logged out" +msgstr "Вихід" + +msgid "Password reset" +msgstr "Перевстановлення паролю" + +msgid "Password reset sent" +msgstr "Скидання пароля відправлено" + +msgid "Enter new password" +msgstr "Введіть новий пароль" + +msgid "Password reset unsuccessful" +msgstr "Пароль не перевстановлено" + +msgid "Password reset complete" +msgstr "Пароль перевстановлено" + +msgid "Password change" +msgstr "Зміна паролю" + +msgid "Password change successful" +msgstr "Пароль успішно змінено" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cfa37dab546b2eff1feec75eacd10fdade912531 GIT binary patch literal 698 zcmZvY&ui2`6vv}hl;A;o^5Efl+ojAVn=V>sT@m{ODqXvl)cd%ZO=ro@gqew{$3kf< zcoPNB9#*6v_2fnWj)a1Li!a@77qkyPeCNG<=goWhGe7sy!MKjxLspO*NP<*xgxo^j zo$Dvmo5&aBHgb%7xZ*g!Q12oyuTJ_5QSV@Whzh8mQPFl0m^yPv_3pK*`hw?>GGlV3 zBWE*-W=U^aogSdZVkTtW>1j3OeM{CO@``ICl%x<1nT(aY#Z#p%>6%zX%oE__&yrR7JnnEo|pJqG-xgO814o$mV}x~ zlQ63^h38C4VPJ!ch$rwEr@{1Ta+WrP9H=LFN5&b8ISDx%QP|c|2DKe)Q|ftno;PgO zP7L^NqpwEZWTB}f=XbqKdv&+F-d&xo-fZ~pvXYid9O-R}yIH<#y)?m})rS5K(}vs5 zcDP2CX1?mJ0oP\n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "لفظ اجازت" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "نیا لفظ اجازت" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "پرانا لفظ اجازت" + +msgid "Password (again)" +msgstr "لفظ اجازت (دوبارہ)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f4048eeb808de6a4e87baf021dd0f76b31a164d4 GIT binary patch literal 2549 zcmZXVOK%)S5XT!xNMhdMEf6UJ);fx3{otWw6Gzy=5f(UDj)Rg5QtwRfOnYa#*WEq4 z-bIl>%7FtHgg9_Of)Bt2j&RBs;KCUR4#16TI3V$_ne}cgMw4*VHpKmP*Hf_FjQ@6}^Mtb@xS`>_x5{M#V=`8CM#{sg`P z-T_a7e}KIHACPr91}AQVFMvOQ-+=Sr&I$MgegbZSUx2*sH<0cA4Z`h8Ge{;7ZlxFd z$`{Y!i+#KIVjH|KUz|hs>EL<>FRTsg`xI_SB(RM@$dy*?58M`y;uf=WMi%OfC)?gt zaiD%o(X1Eih19uNH$geVa`M=FGJ~Y2w(3}?<_S;gE2leS`%SS?^sEcg1WII3 zUTm1Y%ylwdjU|N)goUN)8aptQNuOzxlFU=M6|$l!uByRg#i0+1t?6jCfM~>3JDEjZ zA=<5R6q6T6II2hNV4Fu}N2LP|yyMwk=ZC(JD_o6>833m z*?g)A9QUCO z>=x}fX?!jre2dmpqVu-u(z}@~bYlB-u{|DoE9C>yjBRlV>r7h8R7E>V7A?9y;w5ug z2))+A!eB6H2DYg?YMpZSD~lIq&~WO0BE9t*Ee3};}XDZ{YMBnP8jieeiUR&tm z$AI{nO|e;KxK8VuVCyFpWnXqWat|V~ ziqrV>M2}}4w!K|uUIzA;gSwWZDe$k=5P8+Fii#_G^DwY7_IYs3ms@sElua%$E}l9, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-29 16:31+0000\n" +"Last-Translator: Bedilbek Khamidov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "Shaxsiy ma'lumotlar" + +msgid "Permissions" +msgstr "Ruhsatnomalar" + +msgid "Important dates" +msgstr "Muhim sanalar" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(key)r asosiy kalitli %(name)s obyekt mavjud emas" + +msgid "Password changed successfully." +msgstr "Parol muvaffaqiyatli o'zgartirildi." + +#, python-format +msgid "Change password: %s" +msgstr "Parolni o'zgartirish: %s" + +msgid "Authentication and Authorization" +msgstr "Autentifikatsiya va Avtorizatsiya" + +msgid "password" +msgstr "parol" + +msgid "last login" +msgstr "oxirgi kirish" + +msgid "No password set." +msgstr "Hech qanday parol qo'yilmagan." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Noto'g'ri parol formati yoki noma'lum heshlash algoritmi ishlatilgan." + +msgid "The two password fields didn’t match." +msgstr "Ikkala parol maydoni bir-biriga mos kelmadi." + +msgid "Password" +msgstr "Parol" + +msgid "Password confirmation" +msgstr "Parolni tasdiqlash" + +msgid "Enter the same password as before, for verification." +msgstr "Tekshirish uchun avvalgi parolni kiriting.." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Xom parollar saqlanmaydi, shuning uchun bu foydanaluvchining parolini " +"ko'rishni iloji yo'q, lekin siz shu formadan foydalanib " +"parolni o'zgartirishingiz mumkin. " + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Iltimos, to'g'ri %(username)s va parolni kiriting. Ahamiyat bering, ikkala " +"maydonlar ham katta-kichik harfga sezgir bo'lishi mumkin." + +msgid "This account is inactive." +msgstr "Bu akkaunt nofaol" + +msgid "Email" +msgstr "Elektron pochta" + +msgid "New password" +msgstr "Yangi parol" + +msgid "New password confirmation" +msgstr "Yangi parolni tasdiqlash" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Sizning eski parolingiz noto'g'ri kiritilgan edi. Iltimos, qaytadan kiriting." + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can’t be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can’t be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb319783c9f87ef83b1d55f0f840eb54aa537553 GIT binary patch literal 7892 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..a6b540a06 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,305 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Anh Phan , 2013 +# Tran , 2011 +# Tran Van , 2012 +# tinnguyen121221, 2021 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-12-23 17:49+0000\n" +"Last-Translator: tinnguyen121221\n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "Thông tin cá nhân" + +msgid "Permissions" +msgstr "Quyền" + +msgid "Important dates" +msgstr "Những ngày quan trọng" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr " Đối tượng %(name)s với khóa chính %(key)r không tồn tại." + +msgid "Password changed successfully." +msgstr "Mật khẩu thay đổi thành công" + +#, python-format +msgid "Change password: %s" +msgstr "Thay đổi mật khẩu: %s" + +msgid "Authentication and Authorization" +msgstr "Xác thực và ủy quyền" + +msgid "password" +msgstr "Mật khẩu" + +msgid "last login" +msgstr "Lần cuối đăng nhập" + +msgid "No password set." +msgstr "Chưa đặt mật khẩu" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Định dạng của mật khẩu không đúng hoặc thuật toán hash chưa rõ ràng." + +msgid "The two password fields didn’t match." +msgstr "Hai trường mật khẩu không giống nhau." + +msgid "Password" +msgstr "Mật khẩu" + +msgid "Password confirmation" +msgstr "Xác nhận mật khẩu" + +msgid "Enter the same password as before, for verification." +msgstr "Nhập lại mật khẩu để xác nhận." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"Mật khẩu không được lưu trữ, vì vậy không có cách nào để xem mật khẩu của " +"người dùng, nhưng bạn có thể dùng biểu mẫu này để thay " +"đổi." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Vui lòng điền vào %(username)s và mật khẩu chính xác. Chú ý rằng cả hai " +"khung thông tin đều phân biệt chữ hoa và chữ thường." + +msgid "This account is inactive." +msgstr "Tài khoản này chưa được kích hoạt." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Mật khẩu mới" + +msgid "New password confirmation" +msgstr "Xác nhận mật khẩu mới" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Mật khẩu cũ không chính xác. Hãy nhập lại lần nữa" + +msgid "Old password" +msgstr "Mật khẩu cũ" + +msgid "Password (again)" +msgstr "Nhập lại mật khẩu" + +msgid "algorithm" +msgstr "thuật toán" + +msgid "iterations" +msgstr "lặp lại" + +msgid "salt" +msgstr "Mã salt" + +msgid "hash" +msgstr "băm" + +msgid "variety" +msgstr "variety" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "memory cost" + +msgid "time cost" +msgstr "time cost" + +msgid "parallelism" +msgstr "parallelism" + +msgid "work factor" +msgstr "yếu tố công việc" + +msgid "checksum" +msgstr "kiểm tra" + +msgid "block size" +msgstr "block size" + +msgid "name" +msgstr "Tên" + +msgid "content type" +msgstr "kiểu nội dung" + +msgid "codename" +msgstr "tên mã" + +msgid "permission" +msgstr "cho phép" + +msgid "permissions" +msgstr "cho phép" + +msgid "group" +msgstr "Nhóm" + +msgid "groups" +msgstr "Các nhóm" + +msgid "superuser status" +msgstr "trạng thái superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Định rằng người dùng này có tất cả các quyền mà không gán cho họ một cách cụ " +"thể." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Các nhóm người dùng này thuộc về. Người dùng sẽ nhận được tất cả các quyền " +"được cấp cho mỗi nhóm." + +msgid "user permissions" +msgstr "quyền của người sử dụng" + +msgid "Specific permissions for this user." +msgstr "Quyền hạn cụ thể cho người dùng này." + +msgid "username" +msgstr "Tên đăng nhập" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Yêu cầu. 150 ký tự hoặc ít hơn. Chỉ là chữ cái, chữ số và @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Tên đăng nhập đã được sử dụng" + +msgid "first name" +msgstr "Tên" + +msgid "last name" +msgstr "Họ" + +msgid "email address" +msgstr "địa chỉ email" + +msgid "staff status" +msgstr "tình trạng nhân viên" + +msgid "Designates whether the user can log into this admin site." +msgstr "Chỉ định người dùng nào được phép truy cập vào trang admin." + +msgid "active" +msgstr "Kích hoạt" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Chỉ định xem người dùng này phải được coi là đang hoạt động. Bạn nên bỏ chọn " +"này thay vì xóa tài khoản." + +msgid "date joined" +msgstr "Ngày tham gia" + +msgid "user" +msgstr "Người dùng" + +msgid "users" +msgstr "người sử dụng" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Mật khẩu quá ngắn. Nó phải chứa ít nhất %(min_length)d ký tự." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Mật khẩu của bạn phải chứa ít nhất %(min_length)d ký tự." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Mật khẩu quá giống với %(verbose_name)s." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "Mật khẩu của bạn không được quá giống với thông tin cá nhân khác." + +msgid "This password is too common." +msgstr "Mật khẩu này quá phổ biến." + +msgid "Your password can’t be a commonly used password." +msgstr "Mật khẩu của bạn không được là mật khẩu được dùng phổ biến." + +msgid "This password is entirely numeric." +msgstr "Mật khẩu này hoàn toàn là số." + +msgid "Your password can’t be entirely numeric." +msgstr "Mật khẩu của bạn không được hoàn toàn bằng số." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Đặt lại mật khẩu trên %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Điền tên đăng nhập hợp lệ. Giá trị này chỉ có thể chứa các chữ cái tiếng " +"Anh, số, và các ký tự @/./+/-/_" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Điền tên đăng nhập hợp lệ. Giá trị này chỉ có thể chứa các chữ cái, số, và " +"các ký tự @/./+/-/_" + +msgid "Logged out" +msgstr "Đã thoát" + +msgid "Password reset" +msgstr "Đặt lại mật khẩu" + +msgid "Password reset sent" +msgstr "Đã gửi hướng dẫn đặt lại mật khẩu" + +msgid "Enter new password" +msgstr "Nhập mật khẩu mới" + +msgid "Password reset unsuccessful" +msgstr "Đặt lại mật khẩu thành công" + +msgid "Password reset complete" +msgstr "Đặt lại mật khẩu hoàn chỉnh" + +msgid "Password change" +msgstr "Thay đổi mật khẩu" + +msgid "Password change successful" +msgstr "Thay đổi mật khẩu thành công" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b7e3053f986333492c23f482d28a6da5591253f GIT binary patch literal 6907 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, 2020 +# lanbla , 2021 +# David , 2019 +# ausaki , 2017 +# jamin M , 2019 +# Jannis Leidel , 2011 +# Kevin Sze , 2012 +# Lele Long , 2011,2015 +# Liping Wang , 2016-2017 +# mozillazg , 2016 +# Lemon Li , 2012-2013 +# Wentao Han , 2020 +# hizyn , 2016 +# ced773123cfad7b4e8b79ca80f736af9, 2011 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-22 03:12+0000\n" +"Last-Translator: lanbla \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "个人信息" + +msgid "Permissions" +msgstr "权限" + +msgid "Important dates" +msgstr "重要日期" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "具有主键 %(key)r 的对象 %(name)s 不存在。" + +msgid "Password changed successfully." +msgstr "密码修改成功。" + +#, python-format +msgid "Change password: %s" +msgstr "修改密码:%s" + +msgid "Authentication and Authorization" +msgstr "认证和授权" + +msgid "password" +msgstr "密码" + +msgid "last login" +msgstr "上次登录" + +msgid "No password set." +msgstr "密码未设置。" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "不可用的密码格式或未知的哈希算法。" + +msgid "The two password fields didn’t match." +msgstr "输入的两个密码不一致。" + +msgid "Password" +msgstr "密码" + +msgid "Password confirmation" +msgstr "密码确认" + +msgid "Enter the same password as before, for verification." +msgstr "为了校验,请输入与上面相同的密码。" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"密码原文未存储在系统中,因此无法看到该用户的密码。然而你可以通过这个表单来修改密码。" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "请输入一个正确的%(username)s和密码。注意,两者都区分大小写。" + +msgid "This account is inactive." +msgstr "该帐号未激活。" + +msgid "Email" +msgstr "电子邮件" + +msgid "New password" +msgstr "新密码" + +msgid "New password confirmation" +msgstr "新密码确认" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "你的旧密码不正确。请重新输入。" + +msgid "Old password" +msgstr "旧密码" + +msgid "Password (again)" +msgstr "密码(重复)" + +msgid "algorithm" +msgstr "算法" + +msgid "iterations" +msgstr "迭代次数" + +msgid "salt" +msgstr "盐" + +msgid "hash" +msgstr "哈希" + +msgid "variety" +msgstr "多样性" + +msgid "version" +msgstr "版本" + +msgid "memory cost" +msgstr "内存花销" + +msgid "time cost" +msgstr "时间花销" + +msgid "parallelism" +msgstr "对比" + +msgid "work factor" +msgstr "加密因子" + +msgid "checksum" +msgstr "校验和" + +msgid "block size" +msgstr "块大小" + +msgid "name" +msgstr "名称" + +msgid "content type" +msgstr "内容类型" + +msgid "codename" +msgstr "代码名称" + +msgid "permission" +msgstr "权限" + +msgid "permissions" +msgstr "权限" + +msgid "group" +msgstr "组" + +msgid "groups" +msgstr "组" + +msgid "superuser status" +msgstr "超级用户状态" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "指明该用户缺省拥有所有权限。" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "该用户归属的组。一个用户将得到其归属的组的所有权限。" + +msgid "user permissions" +msgstr "用户权限" + +msgid "Specific permissions for this user." +msgstr "这个用户的特定权限。" + +msgid "username" +msgstr "用户名" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"必填;长度为150个字符或以下;只能包含字母、数字、特殊字符“@”、“.”、“-”和“_”。" + +msgid "A user with that username already exists." +msgstr "已存在一位使用该名字的用户。" + +msgid "first name" +msgstr "名字" + +msgid "last name" +msgstr "姓氏" + +msgid "email address" +msgstr "电子邮件地址" + +msgid "staff status" +msgstr "工作人员状态" + +msgid "Designates whether the user can log into this admin site." +msgstr "指明用户是否可以登录到这个管理站点。" + +msgid "active" +msgstr "有效" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "指明用户是否被认为是活跃的。以反选代替删除帐号。" + +msgid "date joined" +msgstr "加入日期" + +msgid "user" +msgstr "用户" + +msgid "users" +msgstr "用户" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "密码长度太短。密码必须包含至少 %(min_length)d 个字符。" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "你的密码必须包含至少 %(min_length)d 个字符。" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "密码跟 %(verbose_name)s 太相似了。" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "你的密码不能与你的其他个人信息太相似。" + +msgid "This password is too common." +msgstr "这个密码太常见了。" + +msgid "Your password can’t be a commonly used password." +msgstr "你的密码不能是一个常见密码。" + +msgid "This password is entirely numeric." +msgstr "密码只包含数字。" + +msgid "Your password can’t be entirely numeric." +msgstr "你的密码不能全都是数字。" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "重置 %(site_name)s 的密码" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"请输入合法的用户名。只能包含英文字母、数字、特殊字符“@”、“.”、“-”和“_”。" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"请输入合法的用户名。只能包含英文字母、数字、特殊字符“@”、“.”、“-”和“_”。" + +msgid "Logged out" +msgstr "登出" + +msgid "Password reset" +msgstr "重置密码" + +msgid "Password reset sent" +msgstr "密码重置链接已经发送。" + +msgid "Enter new password" +msgstr "输入新密码" + +msgid "Password reset unsuccessful" +msgstr "密码重置失败" + +msgid "Password reset complete" +msgstr "密码重置完成" + +msgid "Password change" +msgstr "密码更改" + +msgid "Password change successful" +msgstr "密码更改成功" diff --git a/venv/Lib/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c127d27445997208e3c82ceb79b9ddf57e590e52 GIT binary patch literal 6728 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, 2015 +# Claude Paroz , 2016 +# ilay , 2012 +# Jannis Leidel , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016-2017,2019 +# Yeh-Yung , 2013 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:03+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "個人資訊" + +msgid "Permissions" +msgstr "權限" + +msgid "Important dates" +msgstr "重要日期" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "主鍵 %(key)r 的 %(name)s 物件不存在。" + +msgid "Password changed successfully." +msgstr "密碼修改成功" + +#, python-format +msgid "Change password: %s" +msgstr "修改密碼: %s" + +msgid "Authentication and Authorization" +msgstr "認證與授權" + +msgid "password" +msgstr "密碼" + +msgid "last login" +msgstr "上次登入" + +msgid "No password set." +msgstr "無設定密碼。" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "無效的密碼格式或不知名的雜湊演算法。" + +msgid "The two password fields didn’t match." +msgstr "兩個密碼欄位不相符。" + +msgid "Password" +msgstr "密碼" + +msgid "Password confirmation" +msgstr "密碼確認" + +msgid "Enter the same password as before, for verification." +msgstr "為檢查用,請輸入與前面相同的密碼。" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." +msgstr "" +"原始密碼尚未儲存,因此無法存取此帳號的密碼,但你可以透過這個表" +"單來變更密碼。" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "輸入正確的 %(username)s 和密碼。請注意兩者皆區分大小寫。" + +msgid "This account is inactive." +msgstr "這個帳戶未啟用" + +msgid "Email" +msgstr "電子信箱" + +msgid "New password" +msgstr "新密碼" + +msgid "New password confirmation" +msgstr "新密碼確認" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "你的舊密碼不正確。請重新輸入。" + +msgid "Old password" +msgstr "舊密碼" + +msgid "Password (again)" +msgstr "密碼(重複)" + +msgid "algorithm" +msgstr "演算法" + +msgid "iterations" +msgstr "迭代" + +msgid "salt" +msgstr "隨機值" + +msgid "hash" +msgstr "哈希碼" + +msgid "variety" +msgstr "變種" + +msgid "version" +msgstr "版本" + +msgid "memory cost" +msgstr "記憶體用量" + +msgid "time cost" +msgstr "耗時" + +msgid "parallelism" +msgstr "平行性" + +msgid "work factor" +msgstr "作用因素" + +msgid "checksum" +msgstr "校驗" + +msgid "name" +msgstr "名稱" + +msgid "content type" +msgstr "內容類型" + +msgid "codename" +msgstr "代碼" + +msgid "permission" +msgstr "權限" + +msgid "permissions" +msgstr "權限" + +msgid "group" +msgstr "群組" + +msgid "groups" +msgstr "群組" + +msgid "superuser status" +msgstr "超級使用者狀態" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "指定是否使用者可以登入到這個管理網站" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "此為帳號可加入的群組。其所屬的群組將授予該帳號對應的權限。" + +msgid "user permissions" +msgstr "使用者權限" + +msgid "Specific permissions for this user." +msgstr "本使用者的專屬權限。" + +msgid "username" +msgstr "使用者名稱" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "必要的。150 個字或更少,只包含字母、數字和 @/./+/-/_。" + +msgid "A user with that username already exists." +msgstr "一個相同名稱的使用者已經存在。" + +msgid "first name" +msgstr "名字" + +msgid "last name" +msgstr "姓氏" + +msgid "email address" +msgstr "電子信箱" + +msgid "staff status" +msgstr "工作人員狀態" + +msgid "Designates whether the user can log into this admin site." +msgstr "指定是否使用者可以登入此管理網站。" + +msgid "active" +msgstr "有效" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "指定使用者是否有效。請取消選擇而不是刪除帳號。" + +msgid "date joined" +msgstr "加入日期" + +msgid "user" +msgstr "使用者" + +msgid "users" +msgstr "使用者" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "這個密碼過短。請至少使用 %(min_length)d 個字元。" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "你的密碼必須包含至少 %(min_length)d 個字元。" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "這個密碼與%(verbose_name)s太相近。" + +msgid "Your password can’t be too similar to your other personal information." +msgstr "你的密碼不能與其他個人資訊太相近。" + +msgid "This password is too common." +msgstr "這個密碼太普通。" + +msgid "Your password can’t be a commonly used password." +msgstr "你不能使用常見的密碼。" + +msgid "This password is entirely numeric." +msgstr "這個密碼只包含數字。" + +msgid "Your password can’t be entirely numeric." +msgstr "你的密碼不能完全是數字。" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "在 %(site_name)s 進行密碼重置" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "輸入合法的使用者名稱。只能包含英語字母、數字和 @/./+/-/_ 字元。" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "輸入合法的使用者名稱。只能包含字母、數字和 @/./+/-/_ 字元。" + +msgid "Logged out" +msgstr "登出" + +msgid "Password reset" +msgstr "密碼重設" + +msgid "Password reset sent" +msgstr "已送出密碼重設" + +msgid "Enter new password" +msgstr "輸入新的密碼" + +msgid "Password reset unsuccessful" +msgstr "密碼重設失敗" + +msgid "Password reset complete" +msgstr "密碼重設成功" + +msgid "Password change" +msgstr "變更密碼" + +msgid "Password change successful" +msgstr "成功變更密碼" diff --git a/venv/Lib/site-packages/django/contrib/auth/management/__init__.py b/venv/Lib/site-packages/django/contrib/auth/management/__init__.py new file mode 100644 index 000000000..0b5a98261 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/management/__init__.py @@ -0,0 +1,170 @@ +""" +Creates permissions for all installed apps that need permissions. +""" +import getpass +import unicodedata + +from django.apps import apps as global_apps +from django.contrib.auth import get_permission_codename +from django.contrib.contenttypes.management import create_contenttypes +from django.core import exceptions +from django.db import DEFAULT_DB_ALIAS, router + + +def _get_all_permissions(opts): + """ + Return (codename, name) for all permissions in the given opts. + """ + return [*_get_builtin_permissions(opts), *opts.permissions] + + +def _get_builtin_permissions(opts): + """ + Return (codename, name) for all autogenerated permissions. + By default, this is ('add', 'change', 'delete', 'view') + """ + perms = [] + for action in opts.default_permissions: + perms.append( + ( + get_permission_codename(action, opts), + "Can %s %s" % (action, opts.verbose_name_raw), + ) + ) + return perms + + +def create_permissions( + app_config, + verbosity=2, + interactive=True, + using=DEFAULT_DB_ALIAS, + apps=global_apps, + **kwargs, +): + if not app_config.models_module: + return + + # Ensure that contenttypes are created for this app. Needed if + # 'django.contrib.auth' is in INSTALLED_APPS before + # 'django.contrib.contenttypes'. + create_contenttypes( + app_config, + verbosity=verbosity, + interactive=interactive, + using=using, + apps=apps, + **kwargs, + ) + + app_label = app_config.label + try: + app_config = apps.get_app_config(app_label) + ContentType = apps.get_model("contenttypes", "ContentType") + Permission = apps.get_model("auth", "Permission") + except LookupError: + return + + if not router.allow_migrate_model(using, Permission): + return + + # This will hold the permissions we're looking for as + # (content_type, (codename, name)) + searched_perms = [] + # The codenames and ctypes that should exist. + ctypes = set() + for klass in app_config.get_models(): + # Force looking up the content types in the current database + # before creating foreign keys to them. + ctype = ContentType.objects.db_manager(using).get_for_model( + klass, for_concrete_model=False + ) + + ctypes.add(ctype) + for perm in _get_all_permissions(klass._meta): + searched_perms.append((ctype, perm)) + + # Find all the Permissions that have a content_type for a model we're + # looking for. We don't need to check for codenames since we already have + # a list of the ones we're going to create. + all_perms = set( + Permission.objects.using(using) + .filter( + content_type__in=ctypes, + ) + .values_list("content_type", "codename") + ) + + perms = [ + Permission(codename=codename, name=name, content_type=ct) + for ct, (codename, name) in searched_perms + if (ct.pk, codename) not in all_perms + ] + Permission.objects.using(using).bulk_create(perms) + if verbosity >= 2: + for perm in perms: + print("Adding permission '%s'" % perm) + + +def get_system_username(): + """ + Return the current system user's username, or an empty string if the + username could not be determined. + """ + try: + result = getpass.getuser() + except (ImportError, KeyError): + # KeyError will be raised by os.getpwuid() (called by getuser()) + # if there is no corresponding entry in the /etc/passwd file + # (a very restricted chroot environment, for example). + return "" + return result + + +def get_default_username(check_db=True, database=DEFAULT_DB_ALIAS): + """ + Try to determine the current system user's username to use as a default. + + :param check_db: If ``True``, requires that the username does not match an + existing ``auth.User`` (otherwise returns an empty string). + :param database: The database where the unique check will be performed. + :returns: The username, or an empty string if no username can be + determined or the suggested username is already taken. + """ + # This file is used in apps.py, it should not trigger models import. + from django.contrib.auth import models as auth_app + + # If the User model has been swapped out, we can't make any assumptions + # about the default user name. + if auth_app.User._meta.swapped: + return "" + + default_username = get_system_username() + try: + default_username = ( + unicodedata.normalize("NFKD", default_username) + .encode("ascii", "ignore") + .decode("ascii") + .replace(" ", "") + .lower() + ) + except UnicodeDecodeError: + return "" + + # Run the username validator + try: + auth_app.User._meta.get_field("username").run_validators(default_username) + except exceptions.ValidationError: + return "" + + # Don't return the default username if it is already taken. + if check_db and default_username: + try: + auth_app.User._default_manager.db_manager(database).get( + username=default_username, + ) + except auth_app.User.DoesNotExist: + pass + else: + return "" + return default_username diff --git a/venv/Lib/site-packages/django/contrib/auth/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..650a5c2d134f71b9b72faef13ef1f4179afb2633 GIT binary patch literal 3948 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 Mbcj||O`BBz7uOVuQUCw| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/management/commands/changepassword.py b/venv/Lib/site-packages/django/contrib/auth/management/commands/changepassword.py new file mode 100644 index 000000000..669d8cf5d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/management/commands/changepassword.py @@ -0,0 +1,81 @@ +import getpass + +from django.contrib.auth import get_user_model +from django.contrib.auth.password_validation import validate_password +from django.core.exceptions import ValidationError +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS + +UserModel = get_user_model() + + +class Command(BaseCommand): + help = "Change a user's password for django.contrib.auth." + requires_migrations_checks = True + requires_system_checks = [] + + def _get_pass(self, prompt="Password: "): + p = getpass.getpass(prompt=prompt) + if not p: + raise CommandError("aborted") + return p + + def add_arguments(self, parser): + parser.add_argument( + "username", + nargs="?", + help=( + "Username to change password for; by default, it's the current " + "username." + ), + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help='Specifies the database to use. Default is "default".', + ) + + def handle(self, *args, **options): + if options["username"]: + username = options["username"] + else: + username = getpass.getuser() + + try: + u = UserModel._default_manager.using(options["database"]).get( + **{UserModel.USERNAME_FIELD: username} + ) + except UserModel.DoesNotExist: + raise CommandError("user '%s' does not exist" % username) + + self.stdout.write("Changing password for user '%s'" % u) + + MAX_TRIES = 3 + count = 0 + p1, p2 = 1, 2 # To make them initially mismatch. + password_validated = False + while (p1 != p2 or not password_validated) and count < MAX_TRIES: + p1 = self._get_pass() + p2 = self._get_pass("Password (again): ") + if p1 != p2: + self.stdout.write("Passwords do not match. Please try again.") + count += 1 + # Don't validate passwords that don't match. + continue + try: + validate_password(p2, u) + except ValidationError as err: + self.stderr.write("\n".join(err.messages)) + count += 1 + else: + password_validated = True + + if count == MAX_TRIES: + raise CommandError( + "Aborting password change for user '%s' after %s attempts" % (u, count) + ) + + u.set_password(p1) + u.save() + + return "Password changed successfully for user '%s'" % u diff --git a/venv/Lib/site-packages/django/contrib/auth/management/commands/createsuperuser.py b/venv/Lib/site-packages/django/contrib/auth/management/commands/createsuperuser.py new file mode 100644 index 000000000..5fffa55a2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/management/commands/createsuperuser.py @@ -0,0 +1,296 @@ +""" +Management utility to create superusers. +""" +import getpass +import os +import sys + +from django.contrib.auth import get_user_model +from django.contrib.auth.management import get_default_username +from django.contrib.auth.password_validation import validate_password +from django.core import exceptions +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS +from django.utils.text import capfirst + + +class NotRunningInTTYException(Exception): + pass + + +PASSWORD_FIELD = "password" + + +class Command(BaseCommand): + help = "Used to create a superuser." + requires_migrations_checks = True + stealth_options = ("stdin",) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.UserModel = get_user_model() + self.username_field = self.UserModel._meta.get_field( + self.UserModel.USERNAME_FIELD + ) + + def add_arguments(self, parser): + parser.add_argument( + "--%s" % self.UserModel.USERNAME_FIELD, + help="Specifies the login for the superuser.", + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help=( + "Tells Django to NOT prompt the user for input of any kind. " + "You must use --%s with --noinput, along with an option for " + "any other required field. Superusers created with --noinput will " + "not be able to log in until they're given a valid password." + % self.UserModel.USERNAME_FIELD + ), + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help='Specifies the database to use. Default is "default".', + ) + for field_name in self.UserModel.REQUIRED_FIELDS: + field = self.UserModel._meta.get_field(field_name) + if field.many_to_many: + if ( + field.remote_field.through + and not field.remote_field.through._meta.auto_created + ): + raise CommandError( + "Required field '%s' specifies a many-to-many " + "relation through model, which is not supported." % field_name + ) + else: + parser.add_argument( + "--%s" % field_name, + action="append", + help=( + "Specifies the %s for the superuser. Can be used " + "multiple times." % field_name, + ), + ) + else: + parser.add_argument( + "--%s" % field_name, + help="Specifies the %s for the superuser." % field_name, + ) + + def execute(self, *args, **options): + self.stdin = options.get("stdin", sys.stdin) # Used for testing + return super().execute(*args, **options) + + def handle(self, *args, **options): + username = options[self.UserModel.USERNAME_FIELD] + database = options["database"] + user_data = {} + verbose_field_name = self.username_field.verbose_name + try: + self.UserModel._meta.get_field(PASSWORD_FIELD) + except exceptions.FieldDoesNotExist: + pass + else: + # If not provided, create the user with an unusable password. + user_data[PASSWORD_FIELD] = None + try: + if options["interactive"]: + # Same as user_data but without many to many fields and with + # foreign keys as fake model instances instead of raw IDs. + fake_user_data = {} + if hasattr(self.stdin, "isatty") and not self.stdin.isatty(): + raise NotRunningInTTYException + default_username = get_default_username(database=database) + if username: + error_msg = self._validate_username( + username, verbose_field_name, database + ) + if error_msg: + self.stderr.write(error_msg) + username = None + elif username == "": + raise CommandError( + "%s cannot be blank." % capfirst(verbose_field_name) + ) + # Prompt for username. + while username is None: + message = self._get_input_message( + self.username_field, default_username + ) + username = self.get_input_data( + self.username_field, message, default_username + ) + if username: + error_msg = self._validate_username( + username, verbose_field_name, database + ) + if error_msg: + self.stderr.write(error_msg) + username = None + continue + user_data[self.UserModel.USERNAME_FIELD] = username + fake_user_data[self.UserModel.USERNAME_FIELD] = ( + self.username_field.remote_field.model(username) + if self.username_field.remote_field + else username + ) + # Prompt for required fields. + for field_name in self.UserModel.REQUIRED_FIELDS: + field = self.UserModel._meta.get_field(field_name) + user_data[field_name] = options[field_name] + if user_data[field_name] is not None: + user_data[field_name] = field.clean(user_data[field_name], None) + while user_data[field_name] is None: + message = self._get_input_message(field) + input_value = self.get_input_data(field, message) + user_data[field_name] = input_value + if field.many_to_many and input_value: + if not input_value.strip(): + user_data[field_name] = None + self.stderr.write("Error: This field cannot be blank.") + continue + user_data[field_name] = [ + pk.strip() for pk in input_value.split(",") + ] + + if not field.many_to_many: + fake_user_data[field_name] = user_data[field_name] + # Wrap any foreign keys in fake model instances. + if field.many_to_one: + fake_user_data[field_name] = field.remote_field.model( + user_data[field_name] + ) + + # Prompt for a password if the model has one. + while PASSWORD_FIELD in user_data and user_data[PASSWORD_FIELD] is None: + password = getpass.getpass() + password2 = getpass.getpass("Password (again): ") + if password != password2: + self.stderr.write("Error: Your passwords didn't match.") + # Don't validate passwords that don't match. + continue + if password.strip() == "": + self.stderr.write("Error: Blank passwords aren't allowed.") + # Don't validate blank passwords. + continue + try: + validate_password(password2, self.UserModel(**fake_user_data)) + except exceptions.ValidationError as err: + self.stderr.write("\n".join(err.messages)) + response = input( + "Bypass password validation and create user anyway? [y/N]: " + ) + if response.lower() != "y": + continue + user_data[PASSWORD_FIELD] = password + else: + # Non-interactive mode. + # Use password from environment variable, if provided. + if ( + PASSWORD_FIELD in user_data + and "DJANGO_SUPERUSER_PASSWORD" in os.environ + ): + user_data[PASSWORD_FIELD] = os.environ["DJANGO_SUPERUSER_PASSWORD"] + # Use username from environment variable, if not provided in + # options. + if username is None: + username = os.environ.get( + "DJANGO_SUPERUSER_" + self.UserModel.USERNAME_FIELD.upper() + ) + if username is None: + raise CommandError( + "You must use --%s with --noinput." + % self.UserModel.USERNAME_FIELD + ) + else: + error_msg = self._validate_username( + username, verbose_field_name, database + ) + if error_msg: + raise CommandError(error_msg) + + user_data[self.UserModel.USERNAME_FIELD] = username + for field_name in self.UserModel.REQUIRED_FIELDS: + env_var = "DJANGO_SUPERUSER_" + field_name.upper() + value = options[field_name] or os.environ.get(env_var) + if not value: + raise CommandError( + "You must use --%s with --noinput." % field_name + ) + field = self.UserModel._meta.get_field(field_name) + user_data[field_name] = field.clean(value, None) + if field.many_to_many and isinstance(user_data[field_name], str): + user_data[field_name] = [ + pk.strip() for pk in user_data[field_name].split(",") + ] + + self.UserModel._default_manager.db_manager(database).create_superuser( + **user_data + ) + if options["verbosity"] >= 1: + self.stdout.write("Superuser created successfully.") + except KeyboardInterrupt: + self.stderr.write("\nOperation cancelled.") + sys.exit(1) + except exceptions.ValidationError as e: + raise CommandError("; ".join(e.messages)) + except NotRunningInTTYException: + self.stdout.write( + "Superuser creation skipped due to not running in a TTY. " + "You can run `manage.py createsuperuser` in your project " + "to create one manually." + ) + + def get_input_data(self, field, message, default=None): + """ + Override this method if you want to customize data inputs or + validation exceptions. + """ + raw_value = input(message) + if default and raw_value == "": + raw_value = default + try: + val = field.clean(raw_value, None) + except exceptions.ValidationError as e: + self.stderr.write("Error: %s" % "; ".join(e.messages)) + val = None + + return val + + def _get_input_message(self, field, default=None): + return "%s%s%s: " % ( + capfirst(field.verbose_name), + " (leave blank to use '%s')" % default if default else "", + " (%s.%s)" + % ( + field.remote_field.model._meta.object_name, + field.m2m_target_field_name() + if field.many_to_many + else field.remote_field.field_name, + ) + if field.remote_field + else "", + ) + + def _validate_username(self, username, verbose_field_name, database): + """Validate username. If invalid, return a string error message.""" + if self.username_field.unique: + try: + self.UserModel._default_manager.db_manager(database).get_by_natural_key( + username + ) + except self.UserModel.DoesNotExist: + pass + else: + return "Error: That %s is already taken." % verbose_field_name + if not username: + return "%s cannot be blank." % capfirst(verbose_field_name) + try: + self.username_field.clean(username, None) + except exceptions.ValidationError as e: + return "; ".join(e.messages) diff --git a/venv/Lib/site-packages/django/contrib/auth/middleware.py b/venv/Lib/site-packages/django/contrib/auth/middleware.py new file mode 100644 index 000000000..dcc482154 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/middleware.py @@ -0,0 +1,128 @@ +from django.contrib import auth +from django.contrib.auth import load_backend +from django.contrib.auth.backends import RemoteUserBackend +from django.core.exceptions import ImproperlyConfigured +from django.utils.deprecation import MiddlewareMixin +from django.utils.functional import SimpleLazyObject + + +def get_user(request): + if not hasattr(request, "_cached_user"): + request._cached_user = auth.get_user(request) + return request._cached_user + + +class AuthenticationMiddleware(MiddlewareMixin): + def process_request(self, request): + if not hasattr(request, "session"): + raise ImproperlyConfigured( + "The Django authentication middleware requires session " + "middleware to be installed. Edit your MIDDLEWARE setting to " + "insert " + "'django.contrib.sessions.middleware.SessionMiddleware' before " + "'django.contrib.auth.middleware.AuthenticationMiddleware'." + ) + request.user = SimpleLazyObject(lambda: get_user(request)) + + +class RemoteUserMiddleware(MiddlewareMixin): + """ + Middleware for utilizing web-server-provided authentication. + + If request.user is not authenticated, then this middleware attempts to + authenticate the username passed in the ``REMOTE_USER`` request header. + If authentication is successful, the user is automatically logged in to + persist the user in the session. + + The header used is configurable and defaults to ``REMOTE_USER``. Subclass + this class and change the ``header`` attribute if you need to use a + different header. + """ + + # Name of request header to grab username from. This will be the key as + # used in the request.META dictionary, i.e. the normalization of headers to + # all uppercase and the addition of "HTTP_" prefix apply. + header = "REMOTE_USER" + force_logout_if_no_header = True + + def process_request(self, request): + # AuthenticationMiddleware is required so that request.user exists. + if not hasattr(request, "user"): + raise ImproperlyConfigured( + "The Django remote user auth middleware requires the" + " authentication middleware to be installed. Edit your" + " MIDDLEWARE setting to insert" + " 'django.contrib.auth.middleware.AuthenticationMiddleware'" + " before the RemoteUserMiddleware class." + ) + try: + username = request.META[self.header] + except KeyError: + # If specified header doesn't exist then remove any existing + # authenticated remote-user, or return (leaving request.user set to + # AnonymousUser by the AuthenticationMiddleware). + if self.force_logout_if_no_header and request.user.is_authenticated: + self._remove_invalid_user(request) + return + # If the user is already authenticated and that user is the user we are + # getting passed in the headers, then the correct user is already + # persisted in the session and we don't need to continue. + if request.user.is_authenticated: + if request.user.get_username() == self.clean_username(username, request): + return + else: + # An authenticated user is associated with the request, but + # it does not match the authorized user in the header. + self._remove_invalid_user(request) + + # We are seeing this user for the first time in this session, attempt + # to authenticate the user. + user = auth.authenticate(request, remote_user=username) + if user: + # User is valid. Set request.user and persist user in the session + # by logging the user in. + request.user = user + auth.login(request, user) + + def clean_username(self, username, request): + """ + Allow the backend to clean the username, if the backend defines a + clean_username method. + """ + backend_str = request.session[auth.BACKEND_SESSION_KEY] + backend = auth.load_backend(backend_str) + try: + username = backend.clean_username(username) + except AttributeError: # Backend has no clean_username method. + pass + return username + + def _remove_invalid_user(self, request): + """ + Remove the current authenticated user in the request which is invalid + but only if the user is authenticated via the RemoteUserBackend. + """ + try: + stored_backend = load_backend( + request.session.get(auth.BACKEND_SESSION_KEY, "") + ) + except ImportError: + # backend failed to load + auth.logout(request) + else: + if isinstance(stored_backend, RemoteUserBackend): + auth.logout(request) + + +class PersistentRemoteUserMiddleware(RemoteUserMiddleware): + """ + Middleware for web-server provided authentication on logon pages. + + Like RemoteUserMiddleware but keeps the user authenticated even if + the header (``REMOTE_USER``) is not found in the request. Useful + for setups when the external authentication via ``REMOTE_USER`` + is only expected to happen on some "logon" URL and the rest of + the application wants to use Django's authentication mechanism. + """ + + force_logout_if_no_header = False diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0001_initial.py new file mode 100644 index 000000000..3d1635f46 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0001_initial.py @@ -0,0 +1,205 @@ +import django.contrib.auth.models +from django.contrib.auth import validators +from django.db import migrations, models +from django.utils import timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ("contenttypes", "__first__"), + ] + + operations = [ + migrations.CreateModel( + name="Permission", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=50, verbose_name="name")), + ( + "content_type", + models.ForeignKey( + to="contenttypes.ContentType", + on_delete=models.CASCADE, + verbose_name="content type", + ), + ), + ("codename", models.CharField(max_length=100, verbose_name="codename")), + ], + options={ + "ordering": [ + "content_type__app_label", + "content_type__model", + "codename", + ], + "unique_together": {("content_type", "codename")}, + "verbose_name": "permission", + "verbose_name_plural": "permissions", + }, + managers=[ + ("objects", django.contrib.auth.models.PermissionManager()), + ], + ), + migrations.CreateModel( + name="Group", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField(unique=True, max_length=80, verbose_name="name"), + ), + ( + "permissions", + models.ManyToManyField( + to="auth.Permission", verbose_name="permissions", blank=True + ), + ), + ], + options={ + "verbose_name": "group", + "verbose_name_plural": "groups", + }, + managers=[ + ("objects", django.contrib.auth.models.GroupManager()), + ], + ), + migrations.CreateModel( + name="User", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + default=timezone.now, verbose_name="last login" + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text=( + "Designates that this user has all permissions without " + "explicitly assigning them." + ), + verbose_name="superuser status", + ), + ), + ( + "username", + models.CharField( + help_text=( + "Required. 30 characters or fewer. Letters, digits and " + "@/./+/-/_ only." + ), + unique=True, + max_length=30, + verbose_name="username", + validators=[validators.UnicodeUsernameValidator()], + ), + ), + ( + "first_name", + models.CharField( + max_length=30, verbose_name="first name", blank=True + ), + ), + ( + "last_name", + models.CharField( + max_length=30, verbose_name="last name", blank=True + ), + ), + ( + "email", + models.EmailField( + max_length=75, verbose_name="email address", blank=True + ), + ), + ( + "is_staff", + models.BooleanField( + default=False, + help_text=( + "Designates whether the user can log into this admin site." + ), + verbose_name="staff status", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + verbose_name="active", + help_text=( + "Designates whether this user should be treated as active. " + "Unselect this instead of deleting accounts." + ), + ), + ), + ( + "date_joined", + models.DateTimeField( + default=timezone.now, verbose_name="date joined" + ), + ), + ( + "groups", + models.ManyToManyField( + to="auth.Group", + verbose_name="groups", + blank=True, + related_name="user_set", + related_query_name="user", + help_text=( + "The groups this user belongs to. A user will get all " + "permissions granted to each of their groups." + ), + ), + ), + ( + "user_permissions", + models.ManyToManyField( + to="auth.Permission", + verbose_name="user permissions", + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + ), + ), + ], + options={ + "swappable": "AUTH_USER_MODEL", + "verbose_name": "user", + "verbose_name_plural": "users", + }, + managers=[ + ("objects", django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py new file mode 100644 index 000000000..a9ca6f51a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="permission", + name="name", + field=models.CharField(max_length=255, verbose_name="name"), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0003_alter_user_email_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0003_alter_user_email_max_length.py new file mode 100644 index 000000000..8a5754846 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0003_alter_user_email_max_length.py @@ -0,0 +1,18 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0002_alter_permission_name_max_length"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="email", + field=models.EmailField( + max_length=254, verbose_name="email address", blank=True + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py new file mode 100644 index 000000000..6930e9bcc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py @@ -0,0 +1,28 @@ +from django.contrib.auth import validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0003_alter_user_email_max_length"), + ] + + # No database changes; modifies validators and error_messages (#13147). + operations = [ + migrations.AlterField( + model_name="user", + name="username", + field=models.CharField( + error_messages={"unique": "A user with that username already exists."}, + max_length=30, + validators=[validators.UnicodeUsernameValidator()], + help_text=( + "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ " + "only." + ), + unique=True, + verbose_name="username", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py new file mode 100644 index 000000000..8407e2d82 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py @@ -0,0 +1,18 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0004_alter_user_username_opts"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="last_login", + field=models.DateTimeField( + null=True, verbose_name="last login", blank=True + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0006_require_contenttypes_0002.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0006_require_contenttypes_0002.py new file mode 100644 index 000000000..b4e816a56 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0006_require_contenttypes_0002.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0005_alter_user_last_login_null"), + ("contenttypes", "0002_remove_content_type_name"), + ] + + operations = [ + # Ensure the contenttypes migration is applied before sending + # post_migrate signals (which create ContentTypes). + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py new file mode 100644 index 000000000..3c94141e6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py @@ -0,0 +1,27 @@ +from django.contrib.auth import validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0006_require_contenttypes_0002"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="username", + field=models.CharField( + error_messages={"unique": "A user with that username already exists."}, + help_text=( + "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ " + "only." + ), + max_length=30, + unique=True, + validators=[validators.UnicodeUsernameValidator()], + verbose_name="username", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0008_alter_user_username_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0008_alter_user_username_max_length.py new file mode 100644 index 000000000..bfb844bb2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0008_alter_user_username_max_length.py @@ -0,0 +1,27 @@ +from django.contrib.auth import validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0007_alter_validators_add_error_messages"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="username", + field=models.CharField( + error_messages={"unique": "A user with that username already exists."}, + help_text=( + "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ " + "only." + ), + max_length=150, + unique=True, + validators=[validators.UnicodeUsernameValidator()], + verbose_name="username", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py new file mode 100644 index 000000000..e0665366d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py @@ -0,0 +1,18 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0008_alter_user_username_max_length"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="last_name", + field=models.CharField( + blank=True, max_length=150, verbose_name="last name" + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py new file mode 100644 index 000000000..a58e11480 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0009_alter_user_last_name_max_length"), + ] + + operations = [ + migrations.AlterField( + model_name="group", + name="name", + field=models.CharField(max_length=150, unique=True, verbose_name="name"), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0011_update_proxy_permissions.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0011_update_proxy_permissions.py new file mode 100644 index 000000000..b792141d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0011_update_proxy_permissions.py @@ -0,0 +1,76 @@ +import sys + +from django.core.management.color import color_style +from django.db import IntegrityError, migrations, transaction +from django.db.models import Q + +WARNING = """ + A problem arose migrating proxy model permissions for {old} to {new}. + + Permission(s) for {new} already existed. + Codenames Q: {query} + + Ensure to audit ALL permissions for {old} and {new}. +""" + + +def update_proxy_model_permissions(apps, schema_editor, reverse=False): + """ + Update the content_type of proxy model permissions to use the ContentType + of the proxy model. + """ + style = color_style() + Permission = apps.get_model("auth", "Permission") + ContentType = apps.get_model("contenttypes", "ContentType") + alias = schema_editor.connection.alias + for Model in apps.get_models(): + opts = Model._meta + if not opts.proxy: + continue + proxy_default_permissions_codenames = [ + "%s_%s" % (action, opts.model_name) for action in opts.default_permissions + ] + permissions_query = Q(codename__in=proxy_default_permissions_codenames) + for codename, name in opts.permissions: + permissions_query = permissions_query | Q(codename=codename, name=name) + content_type_manager = ContentType.objects.db_manager(alias) + concrete_content_type = content_type_manager.get_for_model( + Model, for_concrete_model=True + ) + proxy_content_type = content_type_manager.get_for_model( + Model, for_concrete_model=False + ) + old_content_type = proxy_content_type if reverse else concrete_content_type + new_content_type = concrete_content_type if reverse else proxy_content_type + try: + with transaction.atomic(using=alias): + Permission.objects.using(alias).filter( + permissions_query, + content_type=old_content_type, + ).update(content_type=new_content_type) + except IntegrityError: + old = "{}_{}".format(old_content_type.app_label, old_content_type.model) + new = "{}_{}".format(new_content_type.app_label, new_content_type.model) + sys.stdout.write( + style.WARNING(WARNING.format(old=old, new=new, query=permissions_query)) + ) + + +def revert_proxy_model_permissions(apps, schema_editor): + """ + Update the content_type of proxy model permissions to use the ContentType + of the concrete model. + """ + update_proxy_model_permissions(apps, schema_editor, reverse=True) + + +class Migration(migrations.Migration): + dependencies = [ + ("auth", "0010_alter_group_name_max_length"), + ("contenttypes", "0002_remove_content_type_name"), + ] + operations = [ + migrations.RunPython( + update_proxy_model_permissions, revert_proxy_model_permissions + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/0012_alter_user_first_name_max_length.py b/venv/Lib/site-packages/django/contrib/auth/migrations/0012_alter_user_first_name_max_length.py new file mode 100644 index 000000000..839c95041 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/migrations/0012_alter_user_first_name_max_length.py @@ -0,0 +1,18 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0011_update_proxy_permissions"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="first_name", + field=models.CharField( + blank=True, max_length=150, verbose_name="first name" + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/auth/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fa7cabd6c401b907dbca8f391773c7b09beac8b GIT binary patch literal 3142 zcmaJ^&2!tv6$d~N1Sv|SEk~A})JDFVFtJD_?pM+@wW1F@wVirwsfQg-F-yE9xHJgR zyMScz)S33ugZ={_lHU3^^gqE&riV@sI&?adQ<^4r-!34Di9Lmez}vTP-^cHL07@1Y z8wOtg{{5E&@rq&mLoMbn8y7e5CwK4$2AGjSOnh3AHK~w_sd$yho>WP7;t)r#?Wi_! ziEA1+4XA?iCj%T-9oPR@A$2ex7@gWN>M}m-n0aHLMjU9G2-&gn#)OB0raXyd?o1M3 zkwh6cOF}eh~}I&?FURkE>uog*oFI*vbq1s~y=x3tZ&6 zPzM(pM;5LZa9xKc-W#w8OGg#twX{qdT7^t#hX$PciwWmPCM?4RcJw{Dd;164y%%bK zReSszyjn)}IBz4~(av@XSCyjedOt_R-db!0Rw?5t4+3nbQbDxPp zBAFl43Crt}362FjW28y5H1Pw$Xv%;rOa-4%ap*r}hqPIl@GJkd55~2g?GDZ=S0p^a-B+Ur3tAgv5!r`Qda141MCrP4V1MCxmc>x%6*?s zr+!2SEF#O_-_X4!+S*02gbz)V#`F{g4C$1X9hsN~Ju&NRI!Yn2m^H z@}nf=@l4a6rZH3IYJTg==ySK$84`a-`^wJSc@y4a6w!9IQ9*rVz z4m$6Er=uiGJ@$AS@qnk%p@&YO0>l!JvPpN=K2`3?l%|=);I5#9d40s9sh_gPg(JDE ztf+j?w(qk?85az?-t~1a7*Rn3tP1HR!W*&!Cc54omMYFQ4|vE^bSwt%Mz7m@x3|{w zy(EqfyT{5(rz)=EL#(RXDc}MpDk4<$hc;Qzo}$seGeI?k^SXvo%V|=JtZK5oxWsgZtKdTyBKy+yhW_KsIYyL zIK)~@y52^C$^pkB!|r>o*zoO%^9@keV>B2kcM(c1O0C_FbJjINC$1@2q()dV;Le|{ zu)%SfseJ0P%yYdVR^(}iJnukJdv76V;%$XoYh!Qs zmcRF4`@Vnow_DqHNL5+Jjv#e;fb)zFqGI^zzW%IpId^^Sr|;(t-^an0MGWbt??1|D zq#{r&U{e<3tPD7lqM}o@sdIi;ePsyskwfYmIMR32gd+7#?5Kil>?DF=yWVDpq_(;7 zU~^+@J9l7A<1ooo?vc0&4;P2x1jouVh z^dqmt$pLA8k|YtMalzNkxVjf}HSqV!A@IACPbbpYR()3JUr^hn`n-`~%8C!FzZycl zlJxBxx%pvV$;tlxOiJ3{N`h>H??u_a$3LP2zqB)?w4Pd3+jLC(8B$+aE2!mZ zyNW0NX46?gxGyRA~TfjN5VhlEHydq5#i2g|DTnSZ91%iAMQsmIArKc6VL9=TddbJuc2;nPBmE)# zrAVAO^~4?krIAjzjqN9OtDv%l58Yi;1Se>Afer|# zits?ul5z&&I`RZCSx;4{n2K%!HMwCJi`5i~;(qq>9|O{bvU68_zFMsw3f*X@WyO;X zm|9zlJ@jECYq;GZ&(NFvBr0f1e`O0MZ!HL)kTRYOy$;AsFujjHXsFa>I_qOG91GDW zLSR}~0q*BQTz9ha*F93Ofkr`7Xs{;00z7$EIWT9wiedg>c6ud8+$SyeII8rWn0pu< z-0yFvkF&QHjLlwm*2?U8TXZ!v&SvM@U37VNrj2#SuS~m!!ev`%w%H4vXI48n-pJyk zEWu`KEt|4k7H#8<&X-=I<^EZgDApq(eRE>3)Hq`OU!cY2v+*Cno4t=NCIJg~VHD7S u&T053-VO1~G~~09aG~;H@?qK`xSwp?9b%n6ellwK6#pKvzWyOOVt)b6aJA_G literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34807c6e1b4d126157ebe5fb21d1e1ab2a6de556 GIT binary patch literal 708 zcmYjP&1)1f6i+6Z?d;HkDD><_VGivsdJ~a~+Ir9;eq6#}$V{Hw+0MtB%q;3v!BhVV zPyR~*Po8@6E@*wpsNDy71R{doPY_(BQ!?t@L^7#!fSH_>ULX-yg` zXcLKuk|Uxc%{~#$fG*ibCYa_gNEV-CFUca8Hr2wYzUo@*CQYZIwxus^T7tm=9y><| zL{Lpcr0IeR27DQN0GKSdG}p17=&duRlQV|ZL{AYabV8OT;8dcTjzY+bzPPkuJS{tzTWyX-f|9-K(22*qv z!XOtHwQ5f@CelD`OmdIm;x`r4`Z$}qM2@J^rBY(wP=l0iTgtbCs>41QX;?w4p)D)0 zCc-^Ldf)GU=%*MK5|8|nA>q;vIgO%zCFUxYgZugU!JYgSGP3#e!CI9+?8>2mwzv6F z)juAJ{ID{%-+N}dC6s->hIXAlsfyfIJ?yPid8!s*bG=mUqMMan+ncJGc|B*BuQ)?x zZ~s-+t0#kC8=~&7-W&gA{IR>}5)v_f!Q+TVl+y{t`>*68^c-hgOh>$ZT?FQVZ75z6 X8*kTemP_uA8s5X7O037YLU!37?@P(5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c1f1f87af4e4c674b170bd47e6a1bfbf05abb66 GIT binary patch literal 950 zcmYjPO>fgc5Z$#M*Kt#X#D_Q`Un6J|QBDYBVGRj-;pk@!#U5S;HFf%>(pT` zM~WL+7P|KHQb49t8+dcABH6^PEdYtBAh9Fph{i5>la_FV3;tw9c%mh#@FDox{zgVr ztcU=mw9kDJp1T+wid7WSsoQU^a-sl_S7sbXgTY{f@yvi?l}3P^%Z%mxm}O9m%((XK zbsbnNcn-B+6>?U=X?H8KchQkFlz0abu$WD6iyMBBNlqwa= zL2Et&jjjBzRymleZjT|GG6Tm(wUNi2IjCW&fmwB3Hx8SAH>~!WqFSFMWMaR&S_iDT zXRHnx!?-E~Ja-tIRXnq?mI;_bA)rVlXoW*V;&98haL4{d*@=nU+gRa(TTStU!$PKL z^Wn0OAFhU>4$CPlC*eC$cQLquKWE#|5*w|Pg9Pxn=8+ecRYx2GCn>6EbM)3T8|D*Uu3Hce4?ZYuSLURw%X`*RG zYAR@*h=h_;q7%)&5Y2!t*fkSO^S5L&_=U4%lJr?^=B@Ikv92H1jfTpVp|yQdOpegp z3>^?bH4%xXb1E3{#UKE{aIvGg9-s|xnBKWz*iChcP@{hI>OTeoa@F~d;{I$ldn8rm zp_QGxb5_+Lo27R>4>gfh%6VBeb7L<)$K*jwCamYSt17X(g0^TJ$na%9C@N(yCro6K z$GXVZtq%q&eU7`NGS;Q+GbwSds{rF&DX%(J#RV|aumr2YmIhp#AZd|3538PpTUr(h z<74IF!qgCJeby}DPR8$~-NT9K{(OD$B!7ooT>hqWPUXi<+0|gZ%TJ9z>x%ruw9X&A zZkq*^K3{=doBuXNEgx@dxsgoz9Z+aVN&L>=q)^LZqh}? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a996c2fd5724584bb97492d087239aa139df8968 GIT binary patch literal 564 zcmYjPOKTKC5bnn;Y}UhG&+x4*w2DF43vu018>PY&)&fx!`Kc#1|7O*_(4K`A*V znrZ%nXbyD4zH`BJ@tKsfzj%(6bX@eN^(q=?Lz7eYg<)`n8XlnmBB&;Kood!H!CN8< z&9PN6?tQ%NQL?d6DSj1C*6a0isk#VWrhukXA7jR9kT(^XOVX+yPRiLhmy;{yxRA1UI(2~lQp)qBx_l@{8V0Z$Y-1pd3pcg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca7c358dd0d2575a5be5922d84c38978504d6a73 GIT binary patch literal 959 zcmY*XO=}b}7*6J^v(v2ze&DGLcv`eGO9cfHX{ojzYLRL^41*y%dApl+KDJ3_+wE1a z#lN6O|I&abPd#}Q1gXjFmexRC@+8kpo;=T6t*it{k6#~t4DQ!S-=A2Pg3E8un zpx{G66|YL!ctyn^mzg16AIlnS=qXJBlwgJui{T+oY;eXdvzQIuc!@d8<(PSFiTU7v z?R-N+tfh3$JQkeUnjNrZEu`CYUSHm+1vs=;qhz(;?>{C2j%qG|WL2r4RBAQ>N%YBj zHL=^6VGCL1L#)n+Vkd`dmh@<#HycUzND)U)%zN$TV*YlDaAVeid z0aDT-$fh%bd_okQDD5ddAvu&oH4+_77nUwbcM4)qNgzgD&rX8Y?G`mo`zZI2L(cYk z%Z*RkeL|Xm5Y4M|(CaQCM>Wk2*B}NHC>fL)2Pt&Rpd{GLwf=4M7h(D(>1^p|&T*^Z z-a*MT9rD4#$M=`5&;->47Jcv?iQ7iCDSy6fJxvW;ru(&iY5Jnd>OyBD(;co})q`}K z3#r!Lh-wU(N~cgx(_KDDC0DREq1i`cPRho#99FT(Rq#Pv(v2ze&BJAF4~z@5Jf~RFHeO9P%f_2f|yq$aalwiw7GzsxW5e((2QwYC-@y?(v_F^Fx1ej0FfIT~!}Eg$N@ z5W_htaDuTpTe(%(iCs8}gV7FRHgi59=72qRKiY}Q+&8G_o$Gg~hnrwVbIz!$gzQ;O zQ1GFkidUs1lW9t+NF%?{YA7Se4xuP$?H0S>LzD7oA3_a76QD-dLT($ci|CNqfm{gYN4ToG#5bGNeIVWDjA(_@58j_0$3D2 zc+?NG5fwDknPpgs@DPqbMBy$db8|mre8`myY01KkIEwGZ>oEzdGCzsVzi2z&_PpfU ze-b+*$R|X>vC{U^W0FHTR3p*RbYba`bY~z2l>}ns_3R{Qjc-xov{ku>9CEhTTWx&O z-V@RUglJx!gFbf&nbtHnT!R=)pkz>H9Hh|GgOXs=c)4xSAfbidZkNMBT0T|lX1y2I7WdXR2&A=Ub8 zQH>!}=?uzQy2}Tt)7WNJL?fmsGTK1l9)Qx%aXpuZJ$>$yEEWWTo gYhPRQ81O~t8o*?+rMV9EL~orj9i1_ZMmok;iH)EC?|}`u8i%>KGn>usNmUQf z%h6n_Ry80S^+DFqmc!g~7qM}z%phIt_4zj(;FEXUc8-+UFt1g6ifdeziR~5id1t`a zq)a4!EsrdBWj1_QL9I{H*hbR(rL>8Zm^apd_O_JoM^*cI5NTLKtD!9_Fnxd{h~%-G z{K(zXGv|m8=W2~@(kc# zdNb_3=(`0JL$-o;l|8HS%v1yHEmd)fjN5VhlEHygDGIPeP)QV#8gBM6~ZMJ)%Y5FZyS!gAsvn5!VnEmIGviG8uSgtRU@eKgA*#zlOIx;$8D@2>pfb5jUAGXy0lG;r z0O3>-?kQSO&cI&>jsRxsx$;$@n3|n4H9u#V4ONI#i(&En9|scpvbQUKH%XEQLRJ>E z=naNS8Y>!EgQ(>PQ9)DK)escA?YqHu=NI3Q{B_K5;%&jKZ_2YC_|67&)*2W)#EeJd zCL_{wyf*~zN~qK+4ik!rMhuY@TAcz%Bp) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0011_update_proxy_permissions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/0011_update_proxy_permissions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5d4fcc2f053b816559c2dbd3d64afafe7e2af68 GIT binary patch literal 2727 zcmcIm&2JpH6({FwXJ=%fVKyr=qXp}m`nebo(c5SLy=SO1rqgDOgAPLfRGsBwLFYqw`BzX8L~w>e^))h_8=-+!+sw?|3a#7@?c50+Ewi## z?uIV3?XXR{q($5#9D1ZpydxBL?jzD6{t+TRwI}`yGxQ1m0~++chgHzd0LxBNW+jWb zm}hig%HGF?pktPb`A3YEOnP}bX0b@ig3FFzalzw6^*|GUdhmBIfO0#SvT~HsJcwDz zX>hJmjFtTPJjhEzvtUYDo^q}%1-m5+4$F+xfhdE+f1Hd%enFkE>pRt8Tpl?I%?i+P%7e@V4kq zdX+=`WBiv*j4BK4ttfkwe$}p4NcY&7tX6&aVvHUm(zB3-UYHma?sde!c?MGTd;#xc zw7+Q~u{Qr(BO@y(>($C+1Kw947OT47hkjr8*Tj{{=E*NA^W;_W>SVoIt=6hG=^vY? z_!O*u0oIGG*kd%PQLPTOdr9rv-v#5ep&j5Z(L2liDSUF8EfnEEh83bF%38e7}aX%5tPSX$*&@bA!nj_$la{G3z9hmU5Q z$HTj2GRq+Ve0V<F zy~d+u?VDMd#2LS}_0j~m4uNgXY80gfIPYHcrKQ608BAFNVu)bJ38R8W+VDMK8hggm zVhoLo+-NB59N33-bXWsxnZPB|1fGz#rhvg~OywtRkEv+PNDs^w5H8>!X~$U_^Uzz2 za%o376|uB+D8h9@cjH+mmSe(H0K(3apR!esR0hBj8AW+qK-^i_RaTWBdizXaBy?g? z=4rwp{>;l4)<*^9c@pKwx@rY*9)&``>=Uh5mka8xZ{S2s?%GTrC zk9I!Zxj$G308gh}c6qW#^EjfwbimpzMxO$HsI)b&GZ&U%>i%I0siFOeV&w3bP2PXP zSIEIRt%j>h4o5n;Y)u(bxDPiJx-O39A_A{0GPpb(t~JYDlJy~RD&Y$wVIQ)1Ny4tE znCjbVOrT&Ze3t0awqXj22_D2NT{k7mWgx!5ZU9Wd>x^h!7b%|Fmm)E1#*zX461 zcNIt%8HR?AZDHfgJ=3EDd~eWYDl*~g4KHscC8JvnXDDumKKzEAv)1_(GSb|jch>Mo ue=)M9$$@K9VpqZN%l+yVe`=%Bz1c+Kmb%Dzvs>TTP=~>(Uc5>CS!bn#p z{s4a|5))G=b|h4e6QNs6KJt0^eCPY@W@{@VxPE{5nSQ5){Bq9S#nCyyZ6Bf0MAMQ~ zRM5&39wo;_dzyVAngLz1&rC4Q-;&tB!CDe~LsS*HQC-p0c9>O-hSFv(b$12m9N@MK zG(ZH^M0lF!R50L6-vPjExuLoC^-OPEGaXzr%mz9{sAvdZ{l`E+uKMm=>?{`h`?7Df z>Oi)pxxA7sn5wXLoP_rljEK$(V>?-^3f|p(L+npe|p>}dXcJ$#b9M@lw%(_5>O7fsezPPCmI-Pp%c(Yp;y^FmBszGy(A#zvaG1J<92f;`wiIJJy`WT!a(oo=!*hBjYi- ZW;dN4V6P!~I_dZf|0%H!;~v>&{{ZCc$Xx&c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/auth/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4b8a990c9cf90a36175f1d6a25b9f349971af19 GIT binary patch literal 204 zcmYk0F$%&!6ht?YLWCT|BBmD+K~W14QS3g3O|rxv&2HHLH{g-Hl3?Wl?5*5XIxugT zsm4UnKzO}R&#cQ=hkpgW%)BY|D8xYwgY8||ZvNq8=3_XLvIKiaBw=B4S1Zi~E9AAy zV2PGE-dR(roS{{^g$-sv$SQ7RevzdjC@QH-ljKIT#VnDI&q. + """ + help_texts = password_validators_help_texts(password_validators) + help_items = format_html_join( + "", "

    8. {}
    9. ", ((help_text,) for help_text in help_texts) + ) + return format_html("
        {}
      ", help_items) if help_items else "" + + +password_validators_help_text_html = lazy(_password_validators_help_text_html, str) + + +class MinimumLengthValidator: + """ + Validate whether the password is of a minimum length. + """ + + def __init__(self, min_length=8): + self.min_length = min_length + + def validate(self, password, user=None): + if len(password) < self.min_length: + raise ValidationError( + ngettext( + "This password is too short. It must contain at least " + "%(min_length)d character.", + "This password is too short. It must contain at least " + "%(min_length)d characters.", + self.min_length, + ), + code="password_too_short", + params={"min_length": self.min_length}, + ) + + def get_help_text(self): + return ngettext( + "Your password must contain at least %(min_length)d character.", + "Your password must contain at least %(min_length)d characters.", + self.min_length, + ) % {"min_length": self.min_length} + + +def exceeds_maximum_length_ratio(password, max_similarity, value): + """ + Test that value is within a reasonable range of password. + + The following ratio calculations are based on testing SequenceMatcher like + this: + + for i in range(0,6): + print(10**i, SequenceMatcher(a='A', b='A'*(10**i)).quick_ratio()) + + which yields: + + 1 1.0 + 10 0.18181818181818182 + 100 0.019801980198019802 + 1000 0.001998001998001998 + 10000 0.00019998000199980003 + 100000 1.999980000199998e-05 + + This means a length_ratio of 10 should never yield a similarity higher than + 0.2, for 100 this is down to 0.02 and for 1000 it is 0.002. This can be + calculated via 2 / length_ratio. As a result we avoid the potentially + expensive sequence matching. + """ + pwd_len = len(password) + length_bound_similarity = max_similarity / 2 * pwd_len + value_len = len(value) + return pwd_len >= 10 * value_len and value_len < length_bound_similarity + + +class UserAttributeSimilarityValidator: + """ + Validate whether the password is sufficiently different from the user's + attributes. + + If no specific attributes are provided, look at a sensible list of + defaults. Attributes that don't exist are ignored. Comparison is made to + not only the full attribute value, but also its components, so that, for + example, a password is validated against either part of an email address, + as well as the full address. + """ + + DEFAULT_USER_ATTRIBUTES = ("username", "first_name", "last_name", "email") + + def __init__(self, user_attributes=DEFAULT_USER_ATTRIBUTES, max_similarity=0.7): + self.user_attributes = user_attributes + if max_similarity < 0.1: + raise ValueError("max_similarity must be at least 0.1") + self.max_similarity = max_similarity + + def validate(self, password, user=None): + if not user: + return + + password = password.lower() + for attribute_name in self.user_attributes: + value = getattr(user, attribute_name, None) + if not value or not isinstance(value, str): + continue + value_lower = value.lower() + value_parts = re.split(r"\W+", value_lower) + [value_lower] + for value_part in value_parts: + if exceeds_maximum_length_ratio( + password, self.max_similarity, value_part + ): + continue + if ( + SequenceMatcher(a=password, b=value_part).quick_ratio() + >= self.max_similarity + ): + try: + verbose_name = str( + user._meta.get_field(attribute_name).verbose_name + ) + except FieldDoesNotExist: + verbose_name = attribute_name + raise ValidationError( + _("The password is too similar to the %(verbose_name)s."), + code="password_too_similar", + params={"verbose_name": verbose_name}, + ) + + def get_help_text(self): + return _( + "Your password can’t be too similar to your other personal information." + ) + + +class CommonPasswordValidator: + """ + Validate whether the password is a common password. + + The password is rejected if it occurs in a provided list of passwords, + which may be gzipped. The list Django ships with contains 20000 common + passwords (lowercased and deduplicated), created by Royce Williams: + https://gist.github.com/roycewilliams/281ce539915a947a23db17137d91aeb7 + The password list must be lowercased to match the comparison in validate(). + """ + + @cached_property + def DEFAULT_PASSWORD_LIST_PATH(self): + return Path(__file__).resolve().parent / "common-passwords.txt.gz" + + def __init__(self, password_list_path=DEFAULT_PASSWORD_LIST_PATH): + if password_list_path is CommonPasswordValidator.DEFAULT_PASSWORD_LIST_PATH: + password_list_path = self.DEFAULT_PASSWORD_LIST_PATH + try: + with gzip.open(password_list_path, "rt", encoding="utf-8") as f: + self.passwords = {x.strip() for x in f} + except OSError: + with open(password_list_path) as f: + self.passwords = {x.strip() for x in f} + + def validate(self, password, user=None): + if password.lower().strip() in self.passwords: + raise ValidationError( + _("This password is too common."), + code="password_too_common", + ) + + def get_help_text(self): + return _("Your password can’t be a commonly used password.") + + +class NumericPasswordValidator: + """ + Validate whether the password is alphanumeric. + """ + + def validate(self, password, user=None): + if password.isdigit(): + raise ValidationError( + _("This password is entirely numeric."), + code="password_entirely_numeric", + ) + + def get_help_text(self): + return _("Your password can’t be entirely numeric.") diff --git a/venv/Lib/site-packages/django/contrib/auth/signals.py b/venv/Lib/site-packages/django/contrib/auth/signals.py new file mode 100644 index 000000000..ed669f9c6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/signals.py @@ -0,0 +1,5 @@ +from django.dispatch import Signal + +user_logged_in = Signal() +user_login_failed = Signal() +user_logged_out = Signal() diff --git a/venv/Lib/site-packages/django/contrib/auth/templates/auth/widgets/read_only_password_hash.html b/venv/Lib/site-packages/django/contrib/auth/templates/auth/widgets/read_only_password_hash.html new file mode 100644 index 000000000..a2a12c6f1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/templates/auth/widgets/read_only_password_hash.html @@ -0,0 +1,5 @@ + +{% for entry in summary %} +{{ entry.label }}{% if entry.value %}: {{ entry.value }}{% endif %} +{% endfor %} + diff --git a/venv/Lib/site-packages/django/contrib/auth/templates/registration/password_reset_subject.txt b/venv/Lib/site-packages/django/contrib/auth/templates/registration/password_reset_subject.txt new file mode 100644 index 000000000..eb30fcbab --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/templates/registration/password_reset_subject.txt @@ -0,0 +1,3 @@ +{% load i18n %}{% autoescape off %} +{% blocktranslate %}Password reset on {{ site_name }}{% endblocktranslate %} +{% endautoescape %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/contrib/auth/tokens.py b/venv/Lib/site-packages/django/contrib/auth/tokens.py new file mode 100644 index 000000000..de8e17a28 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/tokens.py @@ -0,0 +1,111 @@ +from datetime import datetime + +from django.conf import settings +from django.utils.crypto import constant_time_compare, salted_hmac +from django.utils.http import base36_to_int, int_to_base36 + + +class PasswordResetTokenGenerator: + """ + Strategy object used to generate and check tokens for the password + reset mechanism. + """ + + key_salt = "django.contrib.auth.tokens.PasswordResetTokenGenerator" + algorithm = None + _secret = None + + def __init__(self): + self.algorithm = self.algorithm or "sha256" + + def _get_secret(self): + return self._secret or settings.SECRET_KEY + + def _set_secret(self, secret): + self._secret = secret + + secret = property(_get_secret, _set_secret) + + def make_token(self, user): + """ + Return a token that can be used once to do a password reset + for the given user. + """ + return self._make_token_with_timestamp(user, self._num_seconds(self._now())) + + def check_token(self, user, token): + """ + Check that a password reset token is correct for a given user. + """ + if not (user and token): + return False + # Parse the token + try: + ts_b36, _ = token.split("-") + except ValueError: + return False + + try: + ts = base36_to_int(ts_b36) + except ValueError: + return False + + # Check that the timestamp/uid has not been tampered with + if not constant_time_compare(self._make_token_with_timestamp(user, ts), token): + return False + + # Check the timestamp is within limit. + if (self._num_seconds(self._now()) - ts) > settings.PASSWORD_RESET_TIMEOUT: + return False + + return True + + def _make_token_with_timestamp(self, user, timestamp): + # timestamp is number of seconds since 2001-1-1. Converted to base 36, + # this gives us a 6 digit string until about 2069. + ts_b36 = int_to_base36(timestamp) + hash_string = salted_hmac( + self.key_salt, + self._make_hash_value(user, timestamp), + secret=self.secret, + algorithm=self.algorithm, + ).hexdigest()[ + ::2 + ] # Limit to shorten the URL. + return "%s-%s" % (ts_b36, hash_string) + + def _make_hash_value(self, user, timestamp): + """ + Hash the user's primary key, email (if available), and some user state + that's sure to change after a password reset to produce a token that is + invalidated when it's used: + 1. The password field will change upon a password reset (even if the + same password is chosen, due to password salting). + 2. The last_login field will usually be updated very shortly after + a password reset. + Failing those things, settings.PASSWORD_RESET_TIMEOUT eventually + invalidates the token. + + Running this data through salted_hmac() prevents password cracking + attempts using the reset token, provided the secret isn't compromised. + """ + # Truncate microseconds so that tokens are consistent even if the + # database doesn't support microseconds. + login_timestamp = ( + "" + if user.last_login is None + else user.last_login.replace(microsecond=0, tzinfo=None) + ) + email_field = user.get_email_field_name() + email = getattr(user, email_field, "") or "" + return f"{user.pk}{user.password}{login_timestamp}{timestamp}{email}" + + def _num_seconds(self, dt): + return int((dt - datetime(2001, 1, 1)).total_seconds()) + + def _now(self): + # Used for mocking in tests + return datetime.now() + + +default_token_generator = PasswordResetTokenGenerator() diff --git a/venv/Lib/site-packages/django/contrib/auth/urls.py b/venv/Lib/site-packages/django/contrib/auth/urls.py new file mode 100644 index 000000000..699ba6179 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/urls.py @@ -0,0 +1,36 @@ +# The views used below are normally mapped in the AdminSite instance. +# This URLs file is used to provide a reliable view deployment for test purposes. +# It is also provided as a convenience to those who want to deploy these URLs +# elsewhere. + +from django.contrib.auth import views +from django.urls import path + +urlpatterns = [ + path("login/", views.LoginView.as_view(), name="login"), + path("logout/", views.LogoutView.as_view(), name="logout"), + path( + "password_change/", views.PasswordChangeView.as_view(), name="password_change" + ), + path( + "password_change/done/", + views.PasswordChangeDoneView.as_view(), + name="password_change_done", + ), + path("password_reset/", views.PasswordResetView.as_view(), name="password_reset"), + path( + "password_reset/done/", + views.PasswordResetDoneView.as_view(), + name="password_reset_done", + ), + path( + "reset///", + views.PasswordResetConfirmView.as_view(), + name="password_reset_confirm", + ), + path( + "reset/done/", + views.PasswordResetCompleteView.as_view(), + name="password_reset_complete", + ), +] diff --git a/venv/Lib/site-packages/django/contrib/auth/validators.py b/venv/Lib/site-packages/django/contrib/auth/validators.py new file mode 100644 index 000000000..55f70283c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/validators.py @@ -0,0 +1,25 @@ +import re + +from django.core import validators +from django.utils.deconstruct import deconstructible +from django.utils.translation import gettext_lazy as _ + + +@deconstructible +class ASCIIUsernameValidator(validators.RegexValidator): + regex = r"^[\w.@+-]+\Z" + message = _( + "Enter a valid username. This value may contain only English letters, " + "numbers, and @/./+/-/_ characters." + ) + flags = re.ASCII + + +@deconstructible +class UnicodeUsernameValidator(validators.RegexValidator): + regex = r"^[\w.@+-]+\Z" + message = _( + "Enter a valid username. This value may contain only letters, " + "numbers, and @/./+/-/_ characters." + ) + flags = 0 diff --git a/venv/Lib/site-packages/django/contrib/auth/views.py b/venv/Lib/site-packages/django/contrib/auth/views.py new file mode 100644 index 000000000..7749e9f1f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/auth/views.py @@ -0,0 +1,384 @@ +from urllib.parse import urlparse, urlunparse + +from django.conf import settings + +# Avoid shadowing the login() and logout() views below. +from django.contrib.auth import REDIRECT_FIELD_NAME, get_user_model +from django.contrib.auth import login as auth_login +from django.contrib.auth import logout as auth_logout +from django.contrib.auth import update_session_auth_hash +from django.contrib.auth.decorators import login_required +from django.contrib.auth.forms import ( + AuthenticationForm, + PasswordChangeForm, + PasswordResetForm, + SetPasswordForm, +) +from django.contrib.auth.tokens import default_token_generator +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ImproperlyConfigured, ValidationError +from django.http import HttpResponseRedirect, QueryDict +from django.shortcuts import resolve_url +from django.urls import reverse_lazy +from django.utils.decorators import method_decorator +from django.utils.http import url_has_allowed_host_and_scheme, urlsafe_base64_decode +from django.utils.translation import gettext_lazy as _ +from django.views.decorators.cache import never_cache +from django.views.decorators.csrf import csrf_protect +from django.views.decorators.debug import sensitive_post_parameters +from django.views.generic.base import TemplateView +from django.views.generic.edit import FormView + +UserModel = get_user_model() + + +class SuccessURLAllowedHostsMixin: + success_url_allowed_hosts = set() + + def get_success_url_allowed_hosts(self): + return {self.request.get_host(), *self.success_url_allowed_hosts} + + +class LoginView(SuccessURLAllowedHostsMixin, FormView): + """ + Display the login form and handle the login action. + """ + + form_class = AuthenticationForm + authentication_form = None + next_page = None + redirect_field_name = REDIRECT_FIELD_NAME + template_name = "registration/login.html" + redirect_authenticated_user = False + extra_context = None + + @method_decorator(sensitive_post_parameters()) + @method_decorator(csrf_protect) + @method_decorator(never_cache) + def dispatch(self, request, *args, **kwargs): + if self.redirect_authenticated_user and self.request.user.is_authenticated: + redirect_to = self.get_success_url() + if redirect_to == self.request.path: + raise ValueError( + "Redirection loop for authenticated user detected. Check that " + "your LOGIN_REDIRECT_URL doesn't point to a login page." + ) + return HttpResponseRedirect(redirect_to) + return super().dispatch(request, *args, **kwargs) + + def get_success_url(self): + return self.get_redirect_url() or self.get_default_redirect_url() + + def get_redirect_url(self): + """Return the user-originating redirect URL if it's safe.""" + redirect_to = self.request.POST.get( + self.redirect_field_name, self.request.GET.get(self.redirect_field_name, "") + ) + url_is_safe = url_has_allowed_host_and_scheme( + url=redirect_to, + allowed_hosts=self.get_success_url_allowed_hosts(), + require_https=self.request.is_secure(), + ) + return redirect_to if url_is_safe else "" + + def get_default_redirect_url(self): + """Return the default redirect URL.""" + return resolve_url(self.next_page or settings.LOGIN_REDIRECT_URL) + + def get_form_class(self): + return self.authentication_form or self.form_class + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["request"] = self.request + return kwargs + + def form_valid(self, form): + """Security check complete. Log the user in.""" + auth_login(self.request, form.get_user()) + return HttpResponseRedirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + current_site = get_current_site(self.request) + context.update( + { + self.redirect_field_name: self.get_redirect_url(), + "site": current_site, + "site_name": current_site.name, + **(self.extra_context or {}), + } + ) + return context + + +class LogoutView(SuccessURLAllowedHostsMixin, TemplateView): + """ + Log out the user and display the 'You are logged out' message. + """ + + next_page = None + redirect_field_name = REDIRECT_FIELD_NAME + template_name = "registration/logged_out.html" + extra_context = None + + @method_decorator(never_cache) + def dispatch(self, request, *args, **kwargs): + auth_logout(request) + next_page = self.get_next_page() + if next_page: + # Redirect to this page until the session has been cleared. + return HttpResponseRedirect(next_page) + return super().dispatch(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + """Logout may be done via POST.""" + return self.get(request, *args, **kwargs) + + def get_next_page(self): + if self.next_page is not None: + next_page = resolve_url(self.next_page) + elif settings.LOGOUT_REDIRECT_URL: + next_page = resolve_url(settings.LOGOUT_REDIRECT_URL) + else: + next_page = self.next_page + + if ( + self.redirect_field_name in self.request.POST + or self.redirect_field_name in self.request.GET + ): + next_page = self.request.POST.get( + self.redirect_field_name, self.request.GET.get(self.redirect_field_name) + ) + url_is_safe = url_has_allowed_host_and_scheme( + url=next_page, + allowed_hosts=self.get_success_url_allowed_hosts(), + require_https=self.request.is_secure(), + ) + # Security check -- Ensure the user-originating redirection URL is + # safe. + if not url_is_safe: + next_page = self.request.path + return next_page + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + current_site = get_current_site(self.request) + context.update( + { + "site": current_site, + "site_name": current_site.name, + "title": _("Logged out"), + **(self.extra_context or {}), + } + ) + return context + + +def logout_then_login(request, login_url=None): + """ + Log out the user if they are logged in. Then redirect to the login page. + """ + login_url = resolve_url(login_url or settings.LOGIN_URL) + return LogoutView.as_view(next_page=login_url)(request) + + +def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME): + """ + Redirect the user to the login page, passing the given 'next' page. + """ + resolved_url = resolve_url(login_url or settings.LOGIN_URL) + + login_url_parts = list(urlparse(resolved_url)) + if redirect_field_name: + querystring = QueryDict(login_url_parts[4], mutable=True) + querystring[redirect_field_name] = next + login_url_parts[4] = querystring.urlencode(safe="/") + + return HttpResponseRedirect(urlunparse(login_url_parts)) + + +# Class-based password reset views +# - PasswordResetView sends the mail +# - PasswordResetDoneView shows a success message for the above +# - PasswordResetConfirmView checks the link the user clicked and +# prompts for a new password +# - PasswordResetCompleteView shows a success message for the above + + +class PasswordContextMixin: + extra_context = None + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({"title": self.title, **(self.extra_context or {})}) + return context + + +class PasswordResetView(PasswordContextMixin, FormView): + email_template_name = "registration/password_reset_email.html" + extra_email_context = None + form_class = PasswordResetForm + from_email = None + html_email_template_name = None + subject_template_name = "registration/password_reset_subject.txt" + success_url = reverse_lazy("password_reset_done") + template_name = "registration/password_reset_form.html" + title = _("Password reset") + token_generator = default_token_generator + + @method_decorator(csrf_protect) + def dispatch(self, *args, **kwargs): + return super().dispatch(*args, **kwargs) + + def form_valid(self, form): + opts = { + "use_https": self.request.is_secure(), + "token_generator": self.token_generator, + "from_email": self.from_email, + "email_template_name": self.email_template_name, + "subject_template_name": self.subject_template_name, + "request": self.request, + "html_email_template_name": self.html_email_template_name, + "extra_email_context": self.extra_email_context, + } + form.save(**opts) + return super().form_valid(form) + + +INTERNAL_RESET_SESSION_TOKEN = "_password_reset_token" + + +class PasswordResetDoneView(PasswordContextMixin, TemplateView): + template_name = "registration/password_reset_done.html" + title = _("Password reset sent") + + +class PasswordResetConfirmView(PasswordContextMixin, FormView): + form_class = SetPasswordForm + post_reset_login = False + post_reset_login_backend = None + reset_url_token = "set-password" + success_url = reverse_lazy("password_reset_complete") + template_name = "registration/password_reset_confirm.html" + title = _("Enter new password") + token_generator = default_token_generator + + @method_decorator(sensitive_post_parameters()) + @method_decorator(never_cache) + def dispatch(self, *args, **kwargs): + if "uidb64" not in kwargs or "token" not in kwargs: + raise ImproperlyConfigured( + "The URL path must contain 'uidb64' and 'token' parameters." + ) + + self.validlink = False + self.user = self.get_user(kwargs["uidb64"]) + + if self.user is not None: + token = kwargs["token"] + if token == self.reset_url_token: + session_token = self.request.session.get(INTERNAL_RESET_SESSION_TOKEN) + if self.token_generator.check_token(self.user, session_token): + # If the token is valid, display the password reset form. + self.validlink = True + return super().dispatch(*args, **kwargs) + else: + if self.token_generator.check_token(self.user, token): + # Store the token in the session and redirect to the + # password reset form at a URL without the token. That + # avoids the possibility of leaking the token in the + # HTTP Referer header. + self.request.session[INTERNAL_RESET_SESSION_TOKEN] = token + redirect_url = self.request.path.replace( + token, self.reset_url_token + ) + return HttpResponseRedirect(redirect_url) + + # Display the "Password reset unsuccessful" page. + return self.render_to_response(self.get_context_data()) + + def get_user(self, uidb64): + try: + # urlsafe_base64_decode() decodes to bytestring + uid = urlsafe_base64_decode(uidb64).decode() + user = UserModel._default_manager.get(pk=uid) + except ( + TypeError, + ValueError, + OverflowError, + UserModel.DoesNotExist, + ValidationError, + ): + user = None + return user + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["user"] = self.user + return kwargs + + def form_valid(self, form): + user = form.save() + del self.request.session[INTERNAL_RESET_SESSION_TOKEN] + if self.post_reset_login: + auth_login(self.request, user, self.post_reset_login_backend) + return super().form_valid(form) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + if self.validlink: + context["validlink"] = True + else: + context.update( + { + "form": None, + "title": _("Password reset unsuccessful"), + "validlink": False, + } + ) + return context + + +class PasswordResetCompleteView(PasswordContextMixin, TemplateView): + template_name = "registration/password_reset_complete.html" + title = _("Password reset complete") + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["login_url"] = resolve_url(settings.LOGIN_URL) + return context + + +class PasswordChangeView(PasswordContextMixin, FormView): + form_class = PasswordChangeForm + success_url = reverse_lazy("password_change_done") + template_name = "registration/password_change_form.html" + title = _("Password change") + + @method_decorator(sensitive_post_parameters()) + @method_decorator(csrf_protect) + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super().dispatch(*args, **kwargs) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["user"] = self.request.user + return kwargs + + def form_valid(self, form): + form.save() + # Updating the password logs out all other sessions for the user + # except the current one. + update_session_auth_hash(self.request, form.user) + return super().form_valid(form) + + +class PasswordChangeDoneView(PasswordContextMixin, TemplateView): + template_name = "registration/password_change_done.html" + title = _("Password change successful") + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super().dispatch(*args, **kwargs) diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__init__.py b/venv/Lib/site-packages/django/contrib/contenttypes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d96a3c1096b0ce27f0f96a34d84fc88af030338d GIT binary patch literal 201 zcmd1j<>g`kg71esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QDzdD2AWY)S&&++A0MBYmst`YuUAlci^C>2KczG$ O)ehu}VkRKL!T(H-KLPekPa&ewHr*zYKgcm;-)J@#lj1ZPH%&J6KQJG`EJH$U-jy za`|==g$e(88t~|P5QoW)UGDG6Hp`o*CHY)0^0JI4ZZG6fAbBQ1!Q3sLa1r{Oso-Hh zxx@G2-SZ!Ll9z%)4T$4yp5<@#i|uZxzT1OkP~`SJKTE|v=rjGo0MNXNpV>&c+)A^X z4?~%OxO)BWU3c^L&AS`hz@3lLZdBq1ya(ryrENZ*boybytizCR!o-O~1LClN2JA6$ zv_K1V_|*dgykzEYov{40YkUnf96d-=7&l-@jFLXtCeP^BGt$;_U4m`7mUahu9X!sH z%vJV^S=gwie}y-$?tCJ-kUPH^N$Krur2Z&|jdJH!nEhYV2?k!$Pgngk$wb&yzn~-AA9A_s;iYzl`}rkTdDi6*{b&?$ zH|@F8M$O>~&`UZSuf5g*o!2Wm;U5DO+Ax%VTHvX|*9QCjRA7(G^Mu?j6F z`8C|lgOj?dCv^3ubfKQ|t5dovCv{D<4f5&yfj-gIckMkUeg||7-$lAl7}&N=?uE*} zm-v37LQc74mofI52cM$n1dFytFB^~r>MS~;K@xG1BKm|zq7M|O{G7ZC-? zR}E#D$jnQ8E=+g>mRRS5oc506PAtHBUR{eIsr)n^Ub}$m>oA#wF`KgIjGBkz>;F|8 z2oA6irb%ZlN_{Vq*MKVTxirk32E|2nx>-v!=rR(OEKEfz^EVqw*C$OsJHDpU4tS(J$s(Q{@?2wqqe4_zUS#lom#|{*rJ*G}2(4fv(`MEQWl-J8ZaxsvcN)bA47;K%uR>ajA7vh zHLwO6P{tGch(pwz7{jXpQSVjK8=wo&4Zm_=!mb*OI_}OIFwabApnb-GnuUGMV&4SZ zG0}maD|zx{zNC!6_)~qN{h1zE6Dyz>pv?li#@PaJ<^`x3a-1!qWQ}A?pmn)NLo%_x zq@P2rXj@yksS-hoi{Kh)6D+~+jkwG<+jY@`CGieSxsH8{?gDs4U8t$Kg=^53 za3p#?{$D460T0t7>`0ye&b3kt5y zy$7D?OXUr9BxPc5Lqq0`A~@!8W~r*9zEC>23tHqyFhOe3CVPY0j2%`PdtqzrdDF7# zJb(y70m4fa00#f6iqgMk4gIT`rb+cfTbpO&chAVCj&gc&p#t-zT@~L#>)*o(6L!jP z7P9CdmFG^qXhsW=6+guFB2S!cTvlu-j1xbGw_j<-PeJfG3a{dX+*bR1Ug?bz z_>UlsWD&|2ix#(2wz!?5Ybb6^;nZGk7F-o-XL)L+1Bk#&ORyw6^-`$PKxLS-Ful}Kjesl?5UY?1By~Z` lMX&N?Zm$(Z?i$9I>J{sx&YGB6P`K*w3zXKp(_CHD{|$u&;9vj% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3357ee259d9c255b67284f1e6d86d409bdb50860 GIT binary patch literal 1225 zcmaJ=J&zMH5VdzVn@zGg?v5)?M}rU)DF{76h|?jUKqtgUW38|@>&f2cydT)ki9~eJ z@*lX8zqAq+)m8LVjJ-KXg(Xis8Sl)zdC&EDJS4b&z5g*g^$GcDo$VE%^8~j(LnDZw zl9ZHDYR{hZN}u^k?+76DJ=A^FXMLzM`qwEZ_bDl#5s>t}fR#4;>KZliW z54%`d3y{1@OW+c!+?;7l61tei3~^Iy!^IYu2)yoHsG~4 zGX;2;XLV(uGG^6)ZtoS<0y4uDxJuhGUN?Zri@MU8#jw3Rbe`bWchLZ0R1oF~%6#Fm z0D8jzOj#%b(fdMJUxYY^e!Gw8ZQ-}Ja5stdkyxZvUQfkr>hS96@zT`K3Xo!bYZJ3Q zsbV(W?rlBZB)jdhWftP~vS-Wn32yxejUfwayidsZSC10of1@V2MBYvBTWI>Gw}=*l zOB=EN@SiUT_U)Zc5Q>IMfSQa{AM>?+Y^B1fsS$cAw8lzL^=vRwkQds3QYb>gg12d| z+pt5YY+uMvph3>R6Sar#@3WJK$vX{7C$E=Ur^(YgTb4K{ojfnhi{&hNRw!-mzf!ej zD!G8_B6(TN5?vU$-=x`jnuAWdVLjLk%l%%H{2*-_J#AKP4+S7r`&d**Xm;q3?$QIg zKHLm*i#MfUjI($@wy)>6*m z3sAFKgG-}sVqu4S%h--ojAo2m+fha&paG3&?79C>CwpwPk%I-Jtp3=Y{|IE-Jru`* zoBH4HGkj}~DR#K|{-5|XKEhP$j#5kY-#bfFNIf+wt+aG+LfHwbLwjdfrWJBvIqP)b jWMT1aVYE~$3$%?MbyIw7g{pVZ#AKJo0dBhM9r%9$`@2vE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/checks.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/checks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6ad68b39794b4edf077182c49e57492d5860630 GIT binary patch literal 1602 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 R(^l$p(>JE~quk2x`~QlZeV+gT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/forms.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/forms.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a27005d20c18c67e9525f4d5732091e1becd8818 GIT binary patch literal 3272 zcmaJ@&2!{N6<4=DM$*V*uWfd>76MAPmN0?!k_(UzLXr*MP!LxtyBtutqLtM>j>h_! z?e1}Gmwdsl$|+RAnS)Jn$v?s$z_F`1<&;Y(jx0&cd#xF-ao9-JPfy*iKi=oBn}vnY zg6E&_|6@xnTGprdbMd(XKd(cR3J9|pDXoemgdk5#TG@$hc)N5eH*qU3@yx$d_9{Q| ziFMCnF7u8p=5hbXP6F=ofc2Qq0(e8#XOZE$Zy)$*bcHRj!7)if7TmXni=V;H){yA_ z-KJK&RuA?k9Dcp3VZ4+>s)KisTW>_AS54;#Sjkm7%5v3+eGp!HGn4#W>^@gHE_(5C zWV7QeKW+jx7#15!=&6h2FWQ_=On0p)~j^RDlJN6Tod#KW}bwrXL8=zXCfd7%@ zScy?WU&j;N<24sW{;RqyYK{knlN`Jf#_+rm&rXfsc)Jsf3nLjfTVtLp8LKAF;z=gJ z3TtN8#(LhnpauHUht`KC{|2PB#@3h|`mNnsDQ*3+&B!$izRor9C2-c*9ed||4|$OE zTL)+Wqm)@wOTK{II7D8&Xx8kXM5oqaP(RmtruU_;_t0y-@d9&-*~)4#UK}ssY-m>) z{TRQn3-*k|g8r5KfgA>E`N$ftFsBV#($dyt_Me@$hhrE^5CiVUV{#kZxD2*Q^QO)P zS3EVo9y;28H05F+9IhRfsZ6`0qU2J06TwHt-Y3>@Rl7!3yJ^Kiz%Od4vO4EF$R?At z%(i%`LnD&bS;e)VL+}*5WZE(Ref;0)x)NXTvJ>meY?r5*Ol$t3rjwmyDP??=O-q$l zS)FZj0rQ)hYY$GOxDXUvqI)xM>V<8LQP9ZjECL*K<#Ynm{4_1GcUMG z2E?a6@ks>KIg4!ig?ASF2hTn&Y1ZcU$qDQ*e~?EL+tB1H5C}6%xQyJl6gjd^=qUyh z-4G}^v^yg{1H4{FYZqCG?x-NbrnMRp@jVz4H<6$L#VsV?2l65`=>Y-7NJtKT_|#*5 zecAsxFdi1$U0m?TK=8njucRfAd6=JMY@cVRGj`8;5BW|RO!#3>K=ro75|U*kD@f1= z;#)|r0)bL#=cN?SVu#V_TrItfu{aOjE^&SWViG;+)2F+So_&M%UtjY^kHtBoD|=NZt)!?*O8#LAnzc%Axba`w1a^mhB$c1a=s}7Pyvh< zI7lHXdV;vocjSB7;+yEmZmyPu{2Ce=$k)iZ7f&DG=BmHG2F1AZ8;?CmX3Si($+6QD?NuzcFC^QHc`{3^eO5fvZ zD(X0kA3pqlF#YhM0cQ09kGBh`jd53T*FrP-cg-}erc%Wd(d-tC!y4v=pI1Iz-D1H_cN$M^Db%DC=T*93)fGpBzQHf| zaz0T-Q+I{Yg^69A#H2SMJY4PM(IDcd^YO%=J5aoWeXk<<84?6J@e-1sBf+{UUPFS2 zE`EXJbtG>fc@qg%;G_qq#S7r&g7VDl@&`8nye7_!Kflbr15+jL?cE4zNa-20uOcTT z*UwXSp1PO6-oLyn9zo0!>#)GEpFG#0`PvN4&3BIGYvxuWO?^y)nIPNhEFI1M&EW*z zodp^)S-IFhUja+JDIR9q3+g_BAOF>^(7lGpEZ2ZURz#KvG@HJCS&_^CgU|m9Z+K4; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6776c914172bbe244e5ad913007e32c2327ad7f6 GIT binary patch literal 6124 zcmbVQ%a7Z}8RrZsihAyP*LLj2ZkZr%qQKq+4f;sx25#)c&BL1_cHx@XmY_7;UCLZ> zJwwHo!Yzuff%K99z4cHaUZ5!8Q&0UzdL+@klq>hqZInVzZpW^CX@kt2Qv<48klK{+D)TV{~V_q9hNslxE&1RR7AZL zLo3+dSGe1Ii3nrrHFv@^4IiX_9E?Xj+BN?(Cj+&MPH1>c7#3h;a(M|L|rrMo`qTN^)nt%{gY?#DKfDnPf}K#_>ajV>h%gf63NCdHO==t(eU`Dv$oQYxrw}N5 zhR=m@(|F7_J7!){!~Ia^j_*fVZ2Mb@d%*q~KD$RH$TQel4ff@A23X`4- z_6a{QGvkp(douHgGvkh4ec$Nt&Br{i0YgAbH;nU&rulJ266SL*y1DaiIC@jcMCK-d zmACvr2tQ3GlC~tVCD*Arskih}xk@A5oS>;S?DM-Le-NZY8N~kGa76QpR&aKjSyuDQ zHd|#D<6n+193z(}_b*6@q(w;55?VtiJpAKV@QKYiduRx#b-dBxug)4*#(T|F75 zp|9EPm<1P_fwk>K`isw(8LIh2QL>*Z_ya@PXe{P1n~l#MLw&ip$FXqwBcf@ni6*!c zp}5#KKj2UlT_zL^QyY3!b`kXuAmZbHP%M6YN%wq>$csP5a? zrQz6w=*Q1~6XCNB3o<93OH}@j$TuEoG#&wKV;dtv8oLeRH6~9Ln7m^Q*nMN%(AYHl zR%Z4q8lTo}V{qCc%-a3x=!YeO9jqu_$F%z~5Q2DBOon*s*rO@~1DSOb7x~ZYxYS9^L~wT$91bkqR#KMoLv~{&fBudxXfy}ksRADN~ zmE~3p;4L9FHxVypNX=~=7Y;;jZ$~j;nVb8`e%>e!)v;NUGn~OSuOQs+A&3{y>@*AX zUZ6!3O!KM?71AN)ofw3n2!&tLtGw1^s*r@&m<-8BYLl5k-!pqSqCrmzkgH`IXfFU) zy^eS5#SN22sV*sqfd0=SOVZFFFz2yjPuAeat3uaw+gjl)2?$*}O}6SKNRW>v^(#?WSm z7g<)NM|&Q#0@+K+Q$s&2Lbk%I6%o?5#@{}M{JEtI!J6!(f=ko?19UQuT!ZUe!_0KH z0gs79`-o@eWjq0Yyqw{E>++P(=iVM5V@{W_5e-s`eNzrMJC#{NSg=@!kC@ag@_Qhl zQ{;_#WvJkV3MD>+`6W$iH!#Ay&as+M;hE!u%3@N=ZgtvJ6;O(Vs-W(ZNe^S{H+}!! zFo=sM-ie_K;mQ2HXh$OYCj+H3b@?=rGK;v+(ePzzUZI90s3}7-T+|c2FphnHj(7rz zq$F2P6D37inu9#C$sOBqoJ!qlpL3pf+N-u+)5GJ1A1Un$F7+EU(?TsoHiXiPf5N;9 z^+Q{jhp=o46<#%T4h^q{0#cW6qH@Slk`*OfBWxB$+#&N?=u;VIpx+iv(L$-VBHCgF z_f@efPT-D0PORg;CQbt2r}D-e+&&ke2$8$K7d-IeaIll^j-T2e!OSPwl&c-NOG18v zErRbAT#1wEe^ev z;UGeqhgt~kW;c{`>en``YafdU{XLFXR8TpFgIIv5z~mbkKH+4_Duz%)PG*|=vwXD- zYY1^fp8P)6%)L{;uIl@Uz`p+}o@q~knq+-mZj@E=}Ke(Rq?SL3JLddKay=%}+yesBOp93(C#h3kn{oB)6b+9p^|QS5g#RlB1+o z{Snt3nI{*kyNzXiEQplIFT?Z;7>sKvl|+-e?g&9zhiGfGUWDj7+QaHV{PJAwq7#>i zITgi2q%_*yWP6&kZIHhu`FJ&odwRf5V(l&5>iD^Nt$)*o1+0^K zP9Y%Q#sIa*2PN-Q{X#m$s}(`_|IqM)FyuSLABjK`@(TVbqDcBew#@i>;sauzFt2p| zS#tkZ>?pXm#+_yEzj4=s2*@Hz4@&ha`EK%@+sLl9ztqLjapspd=01!4ZAuD!;)40j zt=a6XFGVh02YI!t$j0A_!gx|`UBOvJkwd{GuTG?|1CP8$Qx5C{-%rz#q|#dZyuwS~ zpy4Jp?^82_Q5o0dPw?Onm;O@g7*z1sRP5N?L}6ps8Iqi;Q)}9Kf2c#lZRfRxJp_NcU4HUXESZmLu-t9h|nc1Ya z)>1{d_Sgdw2j|cOe}i-R11t3cCr;eCgl}e@)>L9wJM(?teDB9>-fFoBp1*&1K6u_j z=ue3(KN=vPz{kIXg&=|xl;Qwm32TX#>Vd9cJuy-fg3ZK98$ly=16Scz z(oDUe1+Yz=pHR>yjXl(H{{ro(gDWE(k2&nk>v<+o4k&v{t zF9$Ilirt*@+qt;$Fyf-4RrXCG#+N_1T&+vs4&~!K6Ljk}-~PiGj=fMXRNb(9|rAxG^(9W({QA$*m=R3vAe+xp`*g2$kkB znpvea_lR?X*SfQCv_G3VFZItn@Y*#{>BJW%kbL>x zLkCYGVvjTm43cMh@xfEDFKN$96knXRM2ob_R%w^kzAp2+ht9InX;1fDAD*+?`y%(l z%+FQVT;l#Xyiff>$SLvj%n$ux-ErFjTF$?<3%ukdKM=Y~8+4F1elY!L(VxEJ-rO3B zendKaq1_*a+|R%q=lL)S1(-;4LX*l=e8m;nYPGrlQLwoMe%2}pGmFxv zVk@g=D6Rpb>}O$0UwFWMlGj3`@Q^}ua)81C&yzyXe!-Hhj-OI7%1K~@PfAvw+9Q~m zt2;YWM*>_z+Ro1H={kwS?0(*rDPqx}D<_aoUA1-h>T$G4o`z92ZEQ-pO}@!H?=m@K zm0hQtS2{QmG*u@0!vvDUEP0Om!FlOk&DP(~SznAI-j}ImrsQz%hDkwhFqX6WDp-!B zYJV!ER}fguVaRAImy3`IeiVrjvq1?n2Sc#K@fojiGX4Ttp#gcgTRnAsf>Iq zlpA0_uw}9O2fQ*QP&s3ki+q?TzasWNX!<9*ezo@vr;PXR6r6{>-F#T2aNF|U=aINs z40@l*Xtuv%xx93Hhcr9veGv_MQrq@896o?);=Q_0b{2i2cF-XU$#)JTdc?cqN#*cS z&cv_~^2X&;STwVZ9jsvsUhUL4T{Tt}1~kC5Q_XU*_aBO7x)z)oZJQNp`| vg&9vmDaIV|nytu1`mZXuv|IvO24856(j#WXpqGz^eZX#^+IW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/admin.py b/venv/Lib/site-packages/django/contrib/contenttypes/admin.py new file mode 100644 index 000000000..617d6d2e8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/admin.py @@ -0,0 +1,143 @@ +from functools import partial + +from django.contrib.admin.checks import InlineModelAdminChecks +from django.contrib.admin.options import InlineModelAdmin, flatten_fieldsets +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.forms import ( + BaseGenericInlineFormSet, + generic_inlineformset_factory, +) +from django.core import checks +from django.core.exceptions import FieldDoesNotExist +from django.forms import ALL_FIELDS +from django.forms.models import modelform_defines_fields + + +class GenericInlineModelAdminChecks(InlineModelAdminChecks): + def _check_exclude_of_parent_model(self, obj, parent_model): + # There's no FK to exclude, so no exclusion checks are required. + return [] + + def _check_relation(self, obj, parent_model): + # There's no FK, but we do need to confirm that the ct_field and + # ct_fk_field are valid, and that they are part of a GenericForeignKey. + + gfks = [ + f + for f in obj.model._meta.private_fields + if isinstance(f, GenericForeignKey) + ] + if not gfks: + return [ + checks.Error( + "'%s' has no GenericForeignKey." % obj.model._meta.label, + obj=obj.__class__, + id="admin.E301", + ) + ] + else: + # Check that the ct_field and ct_fk_fields exist + try: + obj.model._meta.get_field(obj.ct_field) + except FieldDoesNotExist: + return [ + checks.Error( + "'ct_field' references '%s', which is not a field on '%s'." + % ( + obj.ct_field, + obj.model._meta.label, + ), + obj=obj.__class__, + id="admin.E302", + ) + ] + + try: + obj.model._meta.get_field(obj.ct_fk_field) + except FieldDoesNotExist: + return [ + checks.Error( + "'ct_fk_field' references '%s', which is not a field on '%s'." + % ( + obj.ct_fk_field, + obj.model._meta.label, + ), + obj=obj.__class__, + id="admin.E303", + ) + ] + + # There's one or more GenericForeignKeys; make sure that one of them + # uses the right ct_field and ct_fk_field. + for gfk in gfks: + if gfk.ct_field == obj.ct_field and gfk.fk_field == obj.ct_fk_field: + return [] + + return [ + checks.Error( + "'%s' has no GenericForeignKey using content type field '%s' and " + "object ID field '%s'." + % ( + obj.model._meta.label, + obj.ct_field, + obj.ct_fk_field, + ), + obj=obj.__class__, + id="admin.E304", + ) + ] + + +class GenericInlineModelAdmin(InlineModelAdmin): + ct_field = "content_type" + ct_fk_field = "object_id" + formset = BaseGenericInlineFormSet + + checks_class = GenericInlineModelAdminChecks + + def get_formset(self, request, obj=None, **kwargs): + if "fields" in kwargs: + fields = kwargs.pop("fields") + else: + fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + exclude = [*(self.exclude or []), *self.get_readonly_fields(request, obj)] + if ( + self.exclude is None + and hasattr(self.form, "_meta") + and self.form._meta.exclude + ): + # Take the custom ModelForm's Meta.exclude into account only if the + # GenericInlineModelAdmin doesn't define its own. + exclude.extend(self.form._meta.exclude) + exclude = exclude or None + can_delete = self.can_delete and self.has_delete_permission(request, obj) + defaults = { + "ct_field": self.ct_field, + "fk_field": self.ct_fk_field, + "form": self.form, + "formfield_callback": partial(self.formfield_for_dbfield, request=request), + "formset": self.formset, + "extra": self.get_extra(request, obj), + "can_delete": can_delete, + "can_order": False, + "fields": fields, + "min_num": self.get_min_num(request, obj), + "max_num": self.get_max_num(request, obj), + "exclude": exclude, + **kwargs, + } + + if defaults["fields"] is None and not modelform_defines_fields( + defaults["form"] + ): + defaults["fields"] = ALL_FIELDS + + return generic_inlineformset_factory(self.model, **defaults) + + +class GenericStackedInline(GenericInlineModelAdmin): + template = "admin/edit_inline/stacked.html" + + +class GenericTabularInline(GenericInlineModelAdmin): + template = "admin/edit_inline/tabular.html" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/apps.py b/venv/Lib/site-packages/django/contrib/contenttypes/apps.py new file mode 100644 index 000000000..11dfb9101 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/apps.py @@ -0,0 +1,22 @@ +from django.apps import AppConfig +from django.contrib.contenttypes.checks import ( + check_generic_foreign_keys, + check_model_name_lengths, +) +from django.core import checks +from django.db.models.signals import post_migrate, pre_migrate +from django.utils.translation import gettext_lazy as _ + +from .management import create_contenttypes, inject_rename_contenttypes_operations + + +class ContentTypesConfig(AppConfig): + default_auto_field = "django.db.models.AutoField" + name = "django.contrib.contenttypes" + verbose_name = _("Content Types") + + def ready(self): + pre_migrate.connect(inject_rename_contenttypes_operations, sender=self) + post_migrate.connect(create_contenttypes) + checks.register(check_generic_foreign_keys, checks.Tags.models) + checks.register(check_model_name_lengths, checks.Tags.models) diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/checks.py b/venv/Lib/site-packages/django/contrib/contenttypes/checks.py new file mode 100644 index 000000000..753c5d22f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/checks.py @@ -0,0 +1,46 @@ +from itertools import chain + +from django.apps import apps +from django.core.checks import Error + + +def check_generic_foreign_keys(app_configs=None, **kwargs): + from .fields import GenericForeignKey + + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable( + app_config.get_models() for app_config in app_configs + ) + errors = [] + fields = ( + obj + for model in models + for obj in vars(model).values() + if isinstance(obj, GenericForeignKey) + ) + for field in fields: + errors.extend(field.check()) + return errors + + +def check_model_name_lengths(app_configs=None, **kwargs): + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable( + app_config.get_models() for app_config in app_configs + ) + errors = [] + for model in models: + if len(model._meta.model_name) > 100: + errors.append( + Error( + "Model names must be at most 100 characters (got %d)." + % (len(model._meta.model_name),), + obj=model, + id="contenttypes.E005", + ) + ) + return errors diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/fields.py b/venv/Lib/site-packages/django/contrib/contenttypes/fields.py new file mode 100644 index 000000000..338562e66 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/fields.py @@ -0,0 +1,763 @@ +import functools +import itertools +from collections import defaultdict + +from django.contrib.contenttypes.models import ContentType +from django.core import checks +from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist +from django.db import DEFAULT_DB_ALIAS, models, router, transaction +from django.db.models import DO_NOTHING, ForeignObject, ForeignObjectRel +from django.db.models.base import ModelBase, make_foreign_order_accessors +from django.db.models.fields.mixins import FieldCacheMixin +from django.db.models.fields.related import ( + ReverseManyToOneDescriptor, + lazy_related_operation, +) +from django.db.models.query_utils import PathInfo +from django.db.models.sql import AND +from django.db.models.sql.where import WhereNode +from django.utils.functional import cached_property + + +class GenericForeignKey(FieldCacheMixin): + """ + Provide a generic many-to-one relation through the ``content_type`` and + ``object_id`` fields. + + This class also doubles as an accessor to the related object (similar to + ForwardManyToOneDescriptor) by adding itself as a model attribute. + """ + + # Field flags + auto_created = False + concrete = False + editable = False + hidden = False + + is_relation = True + many_to_many = False + many_to_one = True + one_to_many = False + one_to_one = False + related_model = None + remote_field = None + + def __init__( + self, ct_field="content_type", fk_field="object_id", for_concrete_model=True + ): + self.ct_field = ct_field + self.fk_field = fk_field + self.for_concrete_model = for_concrete_model + self.editable = False + self.rel = None + self.column = None + + def contribute_to_class(self, cls, name, **kwargs): + self.name = name + self.model = cls + cls._meta.add_field(self, private=True) + setattr(cls, name, self) + + def get_filter_kwargs_for_object(self, obj): + """See corresponding method on Field""" + return { + self.fk_field: getattr(obj, self.fk_field), + self.ct_field: getattr(obj, self.ct_field), + } + + def get_forward_related_filter(self, obj): + """See corresponding method on RelatedField""" + return { + self.fk_field: obj.pk, + self.ct_field: ContentType.objects.get_for_model(obj).pk, + } + + def __str__(self): + model = self.model + return "%s.%s" % (model._meta.label, self.name) + + def check(self, **kwargs): + return [ + *self._check_field_name(), + *self._check_object_id_field(), + *self._check_content_type_field(), + ] + + def _check_field_name(self): + if self.name.endswith("_"): + return [ + checks.Error( + "Field names must not end with an underscore.", + obj=self, + id="fields.E001", + ) + ] + else: + return [] + + def _check_object_id_field(self): + try: + self.model._meta.get_field(self.fk_field) + except FieldDoesNotExist: + return [ + checks.Error( + "The GenericForeignKey object ID references the " + "nonexistent field '%s'." % self.fk_field, + obj=self, + id="contenttypes.E001", + ) + ] + else: + return [] + + def _check_content_type_field(self): + """ + Check if field named `field_name` in model `model` exists and is a + valid content_type field (is a ForeignKey to ContentType). + """ + try: + field = self.model._meta.get_field(self.ct_field) + except FieldDoesNotExist: + return [ + checks.Error( + "The GenericForeignKey content type references the " + "nonexistent field '%s.%s'." + % (self.model._meta.object_name, self.ct_field), + obj=self, + id="contenttypes.E002", + ) + ] + else: + if not isinstance(field, models.ForeignKey): + return [ + checks.Error( + "'%s.%s' is not a ForeignKey." + % (self.model._meta.object_name, self.ct_field), + hint=( + "GenericForeignKeys must use a ForeignKey to " + "'contenttypes.ContentType' as the 'content_type' field." + ), + obj=self, + id="contenttypes.E003", + ) + ] + elif field.remote_field.model != ContentType: + return [ + checks.Error( + "'%s.%s' is not a ForeignKey to 'contenttypes.ContentType'." + % (self.model._meta.object_name, self.ct_field), + hint=( + "GenericForeignKeys must use a ForeignKey to " + "'contenttypes.ContentType' as the 'content_type' field." + ), + obj=self, + id="contenttypes.E004", + ) + ] + else: + return [] + + def get_cache_name(self): + return self.name + + def get_content_type(self, obj=None, id=None, using=None): + if obj is not None: + return ContentType.objects.db_manager(obj._state.db).get_for_model( + obj, for_concrete_model=self.for_concrete_model + ) + elif id is not None: + return ContentType.objects.db_manager(using).get_for_id(id) + else: + # This should never happen. I love comments like this, don't you? + raise Exception("Impossible arguments to GFK.get_content_type!") + + def get_prefetch_queryset(self, instances, queryset=None): + if queryset is not None: + raise ValueError("Custom queryset can't be used for this lookup.") + + # For efficiency, group the instances by content type and then do one + # query per model + fk_dict = defaultdict(set) + # We need one instance for each group in order to get the right db: + instance_dict = {} + ct_attname = self.model._meta.get_field(self.ct_field).get_attname() + for instance in instances: + # We avoid looking for values if either ct_id or fkey value is None + ct_id = getattr(instance, ct_attname) + if ct_id is not None: + fk_val = getattr(instance, self.fk_field) + if fk_val is not None: + fk_dict[ct_id].add(fk_val) + instance_dict[ct_id] = instance + + ret_val = [] + for ct_id, fkeys in fk_dict.items(): + instance = instance_dict[ct_id] + ct = self.get_content_type(id=ct_id, using=instance._state.db) + ret_val.extend(ct.get_all_objects_for_this_type(pk__in=fkeys)) + + # For doing the join in Python, we have to match both the FK val and the + # content type, so we use a callable that returns a (fk, class) pair. + def gfk_key(obj): + ct_id = getattr(obj, ct_attname) + if ct_id is None: + return None + else: + model = self.get_content_type( + id=ct_id, using=obj._state.db + ).model_class() + return ( + model._meta.pk.get_prep_value(getattr(obj, self.fk_field)), + model, + ) + + return ( + ret_val, + lambda obj: (obj.pk, obj.__class__), + gfk_key, + True, + self.name, + False, + ) + + def __get__(self, instance, cls=None): + if instance is None: + return self + + # Don't use getattr(instance, self.ct_field) here because that might + # reload the same ContentType over and over (#5570). Instead, get the + # content type ID here, and later when the actual instance is needed, + # use ContentType.objects.get_for_id(), which has a global cache. + f = self.model._meta.get_field(self.ct_field) + ct_id = getattr(instance, f.get_attname(), None) + pk_val = getattr(instance, self.fk_field) + + rel_obj = self.get_cached_value(instance, default=None) + if rel_obj is None and self.is_cached(instance): + return rel_obj + if rel_obj is not None: + ct_match = ( + ct_id == self.get_content_type(obj=rel_obj, using=instance._state.db).id + ) + pk_match = rel_obj._meta.pk.to_python(pk_val) == rel_obj.pk + if ct_match and pk_match: + return rel_obj + else: + rel_obj = None + if ct_id is not None: + ct = self.get_content_type(id=ct_id, using=instance._state.db) + try: + rel_obj = ct.get_object_for_this_type(pk=pk_val) + except ObjectDoesNotExist: + pass + self.set_cached_value(instance, rel_obj) + return rel_obj + + def __set__(self, instance, value): + ct = None + fk = None + if value is not None: + ct = self.get_content_type(obj=value) + fk = value.pk + + setattr(instance, self.ct_field, ct) + setattr(instance, self.fk_field, fk) + self.set_cached_value(instance, value) + + +class GenericRel(ForeignObjectRel): + """ + Used by GenericRelation to store information about the relation. + """ + + def __init__( + self, + field, + to, + related_name=None, + related_query_name=None, + limit_choices_to=None, + ): + super().__init__( + field, + to, + related_name=related_query_name or "+", + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + on_delete=DO_NOTHING, + ) + + +class GenericRelation(ForeignObject): + """ + Provide a reverse to a relation created by a GenericForeignKey. + """ + + # Field flags + auto_created = False + empty_strings_allowed = False + + many_to_many = False + many_to_one = False + one_to_many = True + one_to_one = False + + rel_class = GenericRel + + mti_inherited = False + + def __init__( + self, + to, + object_id_field="object_id", + content_type_field="content_type", + for_concrete_model=True, + related_query_name=None, + limit_choices_to=None, + **kwargs, + ): + kwargs["rel"] = self.rel_class( + self, + to, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + ) + + # Reverse relations are always nullable (Django can't enforce that a + # foreign key on the related model points to this model). + kwargs["null"] = True + kwargs["blank"] = True + kwargs["on_delete"] = models.CASCADE + kwargs["editable"] = False + kwargs["serialize"] = False + + # This construct is somewhat of an abuse of ForeignObject. This field + # represents a relation from pk to object_id field. But, this relation + # isn't direct, the join is generated reverse along foreign key. So, + # the from_field is object_id field, to_field is pk because of the + # reverse join. + super().__init__(to, from_fields=[object_id_field], to_fields=[], **kwargs) + + self.object_id_field_name = object_id_field + self.content_type_field_name = content_type_field + self.for_concrete_model = for_concrete_model + + def check(self, **kwargs): + return [ + *super().check(**kwargs), + *self._check_generic_foreign_key_existence(), + ] + + def _is_matching_generic_foreign_key(self, field): + """ + Return True if field is a GenericForeignKey whose content type and + object id fields correspond to the equivalent attributes on this + GenericRelation. + """ + return ( + isinstance(field, GenericForeignKey) + and field.ct_field == self.content_type_field_name + and field.fk_field == self.object_id_field_name + ) + + def _check_generic_foreign_key_existence(self): + target = self.remote_field.model + if isinstance(target, ModelBase): + fields = target._meta.private_fields + if any(self._is_matching_generic_foreign_key(field) for field in fields): + return [] + else: + return [ + checks.Error( + "The GenericRelation defines a relation with the model " + "'%s', but that model does not have a GenericForeignKey." + % target._meta.label, + obj=self, + id="contenttypes.E004", + ) + ] + else: + return [] + + def resolve_related_fields(self): + self.to_fields = [self.model._meta.pk.name] + return [ + ( + self.remote_field.model._meta.get_field(self.object_id_field_name), + self.model._meta.pk, + ) + ] + + def _get_path_info_with_parent(self, filtered_relation): + """ + Return the path that joins the current model through any parent models. + The idea is that if you have a GFK defined on a parent model then we + need to join the parent model first, then the child model. + """ + # With an inheritance chain ChildTag -> Tag and Tag defines the + # GenericForeignKey, and a TaggedItem model has a GenericRelation to + # ChildTag, then we need to generate a join from TaggedItem to Tag + # (as Tag.object_id == TaggedItem.pk), and another join from Tag to + # ChildTag (as that is where the relation is to). Do this by first + # generating a join to the parent model, then generating joins to the + # child models. + path = [] + opts = self.remote_field.model._meta.concrete_model._meta + parent_opts = opts.get_field(self.object_id_field_name).model._meta + target = parent_opts.pk + path.append( + PathInfo( + from_opts=self.model._meta, + to_opts=parent_opts, + target_fields=(target,), + join_field=self.remote_field, + m2m=True, + direct=False, + filtered_relation=filtered_relation, + ) + ) + # Collect joins needed for the parent -> child chain. This is easiest + # to do if we collect joins for the child -> parent chain and then + # reverse the direction (call to reverse() and use of + # field.remote_field.get_path_info()). + parent_field_chain = [] + while parent_opts != opts: + field = opts.get_ancestor_link(parent_opts.model) + parent_field_chain.append(field) + opts = field.remote_field.model._meta + parent_field_chain.reverse() + for field in parent_field_chain: + path.extend(field.remote_field.get_path_info()) + return path + + def get_path_info(self, filtered_relation=None): + opts = self.remote_field.model._meta + object_id_field = opts.get_field(self.object_id_field_name) + if object_id_field.model != opts.model: + return self._get_path_info_with_parent(filtered_relation) + else: + target = opts.pk + return [ + PathInfo( + from_opts=self.model._meta, + to_opts=opts, + target_fields=(target,), + join_field=self.remote_field, + m2m=True, + direct=False, + filtered_relation=filtered_relation, + ) + ] + + def get_reverse_path_info(self, filtered_relation=None): + opts = self.model._meta + from_opts = self.remote_field.model._meta + return [ + PathInfo( + from_opts=from_opts, + to_opts=opts, + target_fields=(opts.pk,), + join_field=self, + m2m=not self.unique, + direct=False, + filtered_relation=filtered_relation, + ) + ] + + def value_to_string(self, obj): + qs = getattr(obj, self.name).all() + return str([instance.pk for instance in qs]) + + def contribute_to_class(self, cls, name, **kwargs): + kwargs["private_only"] = True + super().contribute_to_class(cls, name, **kwargs) + self.model = cls + # Disable the reverse relation for fields inherited by subclasses of a + # model in multi-table inheritance. The reverse relation points to the + # field of the base model. + if self.mti_inherited: + self.remote_field.related_name = "+" + self.remote_field.related_query_name = None + setattr(cls, self.name, ReverseGenericManyToOneDescriptor(self.remote_field)) + + # Add get_RELATED_order() and set_RELATED_order() to the model this + # field belongs to, if the model on the other end of this relation + # is ordered with respect to its corresponding GenericForeignKey. + if not cls._meta.abstract: + + def make_generic_foreign_order_accessors(related_model, model): + if self._is_matching_generic_foreign_key( + model._meta.order_with_respect_to + ): + make_foreign_order_accessors(model, related_model) + + lazy_related_operation( + make_generic_foreign_order_accessors, + self.model, + self.remote_field.model, + ) + + def set_attributes_from_rel(self): + pass + + def get_internal_type(self): + return "ManyToManyField" + + def get_content_type(self): + """ + Return the content type associated with this field's model. + """ + return ContentType.objects.get_for_model( + self.model, for_concrete_model=self.for_concrete_model + ) + + def get_extra_restriction(self, alias, remote_alias): + field = self.remote_field.model._meta.get_field(self.content_type_field_name) + contenttype_pk = self.get_content_type().pk + lookup = field.get_lookup("exact")(field.get_col(remote_alias), contenttype_pk) + return WhereNode([lookup], connector=AND) + + def bulk_related_objects(self, objs, using=DEFAULT_DB_ALIAS): + """ + Return all objects related to ``objs`` via this ``GenericRelation``. + """ + return self.remote_field.model._base_manager.db_manager(using).filter( + **{ + "%s__pk" + % self.content_type_field_name: ContentType.objects.db_manager(using) + .get_for_model(self.model, for_concrete_model=self.for_concrete_model) + .pk, + "%s__in" % self.object_id_field_name: [obj.pk for obj in objs], + } + ) + + +class ReverseGenericManyToOneDescriptor(ReverseManyToOneDescriptor): + """ + Accessor to the related objects manager on the one-to-many relation created + by GenericRelation. + + In the example:: + + class Post(Model): + comments = GenericRelation(Comment) + + ``post.comments`` is a ReverseGenericManyToOneDescriptor instance. + """ + + @cached_property + def related_manager_cls(self): + return create_generic_related_manager( + self.rel.model._default_manager.__class__, + self.rel, + ) + + +def create_generic_related_manager(superclass, rel): + """ + Factory function to create a manager that subclasses another manager + (generally the default manager of a given model) and adds behaviors + specific to generic relations. + """ + + class GenericRelatedObjectManager(superclass): + def __init__(self, instance=None): + super().__init__() + + self.instance = instance + + self.model = rel.model + self.get_content_type = functools.partial( + ContentType.objects.db_manager(instance._state.db).get_for_model, + for_concrete_model=rel.field.for_concrete_model, + ) + self.content_type = self.get_content_type(instance) + self.content_type_field_name = rel.field.content_type_field_name + self.object_id_field_name = rel.field.object_id_field_name + self.prefetch_cache_name = rel.field.attname + self.pk_val = instance.pk + + self.core_filters = { + "%s__pk" % self.content_type_field_name: self.content_type.id, + self.object_id_field_name: self.pk_val, + } + + def __call__(self, *, manager): + manager = getattr(self.model, manager) + manager_class = create_generic_related_manager(manager.__class__, rel) + return manager_class(instance=self.instance) + + do_not_call_in_templates = True + + def __str__(self): + return repr(self) + + def _apply_rel_filters(self, queryset): + """ + Filter the queryset for the instance this manager is bound to. + """ + db = self._db or router.db_for_read(self.model, instance=self.instance) + return queryset.using(db).filter(**self.core_filters) + + def _remove_prefetched_objects(self): + try: + self.instance._prefetched_objects_cache.pop(self.prefetch_cache_name) + except (AttributeError, KeyError): + pass # nothing to clear from cache + + def get_queryset(self): + try: + return self.instance._prefetched_objects_cache[self.prefetch_cache_name] + except (AttributeError, KeyError): + queryset = super().get_queryset() + return self._apply_rel_filters(queryset) + + def get_prefetch_queryset(self, instances, queryset=None): + if queryset is None: + queryset = super().get_queryset() + + queryset._add_hints(instance=instances[0]) + queryset = queryset.using(queryset._db or self._db) + # Group instances by content types. + content_type_queries = ( + models.Q( + (f"{self.content_type_field_name}__pk", content_type_id), + (f"{self.object_id_field_name}__in", {obj.pk for obj in objs}), + ) + for content_type_id, objs in itertools.groupby( + sorted(instances, key=lambda obj: self.get_content_type(obj).pk), + lambda obj: self.get_content_type(obj).pk, + ) + ) + query = models.Q(*content_type_queries, _connector=models.Q.OR) + # We (possibly) need to convert object IDs to the type of the + # instances' PK in order to match up instances: + object_id_converter = instances[0]._meta.pk.to_python + content_type_id_field_name = "%s_id" % self.content_type_field_name + return ( + queryset.filter(query), + lambda relobj: ( + object_id_converter(getattr(relobj, self.object_id_field_name)), + getattr(relobj, content_type_id_field_name), + ), + lambda obj: (obj.pk, self.get_content_type(obj).pk), + False, + self.prefetch_cache_name, + False, + ) + + def add(self, *objs, bulk=True): + self._remove_prefetched_objects() + db = router.db_for_write(self.model, instance=self.instance) + + def check_and_update_obj(obj): + if not isinstance(obj, self.model): + raise TypeError( + "'%s' instance expected, got %r" + % (self.model._meta.object_name, obj) + ) + setattr(obj, self.content_type_field_name, self.content_type) + setattr(obj, self.object_id_field_name, self.pk_val) + + if bulk: + pks = [] + for obj in objs: + if obj._state.adding or obj._state.db != db: + raise ValueError( + "%r instance isn't saved. Use bulk=False or save " + "the object first." % obj + ) + check_and_update_obj(obj) + pks.append(obj.pk) + + self.model._base_manager.using(db).filter(pk__in=pks).update( + **{ + self.content_type_field_name: self.content_type, + self.object_id_field_name: self.pk_val, + } + ) + else: + with transaction.atomic(using=db, savepoint=False): + for obj in objs: + check_and_update_obj(obj) + obj.save() + + add.alters_data = True + + def remove(self, *objs, bulk=True): + if not objs: + return + self._clear(self.filter(pk__in=[o.pk for o in objs]), bulk) + + remove.alters_data = True + + def clear(self, *, bulk=True): + self._clear(self, bulk) + + clear.alters_data = True + + def _clear(self, queryset, bulk): + self._remove_prefetched_objects() + db = router.db_for_write(self.model, instance=self.instance) + queryset = queryset.using(db) + if bulk: + # `QuerySet.delete()` creates its own atomic block which + # contains the `pre_delete` and `post_delete` signal handlers. + queryset.delete() + else: + with transaction.atomic(using=db, savepoint=False): + for obj in queryset: + obj.delete() + + _clear.alters_data = True + + def set(self, objs, *, bulk=True, clear=False): + # Force evaluation of `objs` in case it's a queryset whose value + # could be affected by `manager.clear()`. Refs #19816. + objs = tuple(objs) + + db = router.db_for_write(self.model, instance=self.instance) + with transaction.atomic(using=db, savepoint=False): + if clear: + self.clear() + self.add(*objs, bulk=bulk) + else: + old_objs = set(self.using(db).all()) + new_objs = [] + for obj in objs: + if obj in old_objs: + old_objs.remove(obj) + else: + new_objs.append(obj) + + self.remove(*old_objs) + self.add(*new_objs, bulk=bulk) + + set.alters_data = True + + def create(self, **kwargs): + self._remove_prefetched_objects() + kwargs[self.content_type_field_name] = self.content_type + kwargs[self.object_id_field_name] = self.pk_val + db = router.db_for_write(self.model, instance=self.instance) + return super().using(db).create(**kwargs) + + create.alters_data = True + + def get_or_create(self, **kwargs): + kwargs[self.content_type_field_name] = self.content_type + kwargs[self.object_id_field_name] = self.pk_val + db = router.db_for_write(self.model, instance=self.instance) + return super().using(db).get_or_create(**kwargs) + + get_or_create.alters_data = True + + def update_or_create(self, **kwargs): + kwargs[self.content_type_field_name] = self.content_type + kwargs[self.object_id_field_name] = self.pk_val + db = router.db_for_write(self.model, instance=self.instance) + return super().using(db).update_or_create(**kwargs) + + update_or_create.alters_data = True + + return GenericRelatedObjectManager diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/forms.py b/venv/Lib/site-packages/django/contrib/contenttypes/forms.py new file mode 100644 index 000000000..c0ff4f725 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/forms.py @@ -0,0 +1,133 @@ +from django.contrib.contenttypes.models import ContentType +from django.db import models +from django.forms import ModelForm, modelformset_factory +from django.forms.models import BaseModelFormSet + + +class BaseGenericInlineFormSet(BaseModelFormSet): + """ + A formset for generic inline objects to a parent. + """ + + def __init__( + self, + data=None, + files=None, + instance=None, + save_as_new=False, + prefix=None, + queryset=None, + **kwargs, + ): + opts = self.model._meta + self.instance = instance + self.rel_name = ( + opts.app_label + + "-" + + opts.model_name + + "-" + + self.ct_field.name + + "-" + + self.ct_fk_field.name + ) + self.save_as_new = save_as_new + if self.instance is None or self.instance.pk is None: + qs = self.model._default_manager.none() + else: + if queryset is None: + queryset = self.model._default_manager + qs = queryset.filter( + **{ + self.ct_field.name: ContentType.objects.get_for_model( + self.instance, for_concrete_model=self.for_concrete_model + ), + self.ct_fk_field.name: self.instance.pk, + } + ) + super().__init__(queryset=qs, data=data, files=files, prefix=prefix, **kwargs) + + def initial_form_count(self): + if self.save_as_new: + return 0 + return super().initial_form_count() + + @classmethod + def get_default_prefix(cls): + opts = cls.model._meta + return ( + opts.app_label + + "-" + + opts.model_name + + "-" + + cls.ct_field.name + + "-" + + cls.ct_fk_field.name + ) + + def save_new(self, form, commit=True): + setattr( + form.instance, + self.ct_field.get_attname(), + ContentType.objects.get_for_model(self.instance).pk, + ) + setattr(form.instance, self.ct_fk_field.get_attname(), self.instance.pk) + return form.save(commit=commit) + + +def generic_inlineformset_factory( + model, + form=ModelForm, + formset=BaseGenericInlineFormSet, + ct_field="content_type", + fk_field="object_id", + fields=None, + exclude=None, + extra=3, + can_order=False, + can_delete=True, + max_num=None, + formfield_callback=None, + validate_max=False, + for_concrete_model=True, + min_num=None, + validate_min=False, + absolute_max=None, + can_delete_extra=True, +): + """ + Return a ``GenericInlineFormSet`` for the given kwargs. + + You must provide ``ct_field`` and ``fk_field`` if they are different from + the defaults ``content_type`` and ``object_id`` respectively. + """ + opts = model._meta + # if there is no field called `ct_field` let the exception propagate + ct_field = opts.get_field(ct_field) + if ( + not isinstance(ct_field, models.ForeignKey) + or ct_field.remote_field.model != ContentType + ): + raise Exception("fk_name '%s' is not a ForeignKey to ContentType" % ct_field) + fk_field = opts.get_field(fk_field) # let the exception propagate + exclude = [*(exclude or []), ct_field.name, fk_field.name] + FormSet = modelformset_factory( + model, + form=form, + formfield_callback=formfield_callback, + formset=formset, + extra=extra, + can_delete=can_delete, + can_order=can_order, + fields=fields, + exclude=exclude, + max_num=max_num, + validate_max=validate_max, + min_num=min_num, + validate_min=validate_min, + absolute_max=absolute_max, + can_delete_extra=can_delete_extra, + ) + FormSet.ct_field = ct_field + FormSet.ct_fk_field = fk_field + FormSet.for_concrete_model = for_concrete_model + return FormSet diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..69309f8ba7e71536df00e0c1217aca4e531b8ddc GIT binary patch literal 1070 zcmah{%Wl&^6g4G0Way?ss*qS*7O07;N$jent|Q;#eaTB~7*K;ljIDu0$t4RpKStn?q3!d5 zQN_q&f250g14^{HO1y0)ElLZ$vmu(PXUT)Asz|0a=>-+a&AB> z;Kry}aEl3)D#5~wC#_wx-yGu&&uBO~j)SC zsI+B!CKCyJJjx8~sR;c2=RLNqkz0yoPpEqYD?zx%f{=yl5Qb5(z8r)>K!NN4kA~zowckDa=NyB!D{ZQr|~K;{&9WD#<-AO*sb{D=M+>5o+40=%xw)hMyT zDR6e4>2F-|qWlJEEPcQ~vj56(6J&_4zf+$Ph?;s<@~d*iw6ixmp39F_aYv*+$$9Dh E0vz`?EdT%j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..84dfccf3c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# F Wolff , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-01-04 18:49+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Inhoudtipes" + +msgid "python model class name" +msgstr "python-modelklasnaam" + +msgid "content type" +msgstr "inhoudtipe" + +msgid "content types" +msgstr "inhoudtipes" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Inhoudtipe %(ct_id)s-objek het geen geassosieerde model nie" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Inhoudtipe %(ct_id)s-objek %(obj_id)s bestaan nie" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s-objekte het nie 'n get_absolute_url()-metode nie" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..612d4a03ae5721bb9934fa01a621609c7b26e228 GIT binary patch literal 1271 zcmah{%Wf1$6s>>*XhJp-2t{IXHy~S4dwPuR*ljm?0g|OSSZK^Dl2z_5&$QLkHR`JI zV}~JQIbKAtKmsXZgA^ObU@VkGY0R9*F6PU*R=26Bz z2OIEp@c-Z+z!N=;od(|nJN*-IKllY0uKVYBS2_kh0zl0^23*|;#n`#tNY7-vA^H@_ z*?AFZMX}6Y-ng%+&KCr6stG;AXO&D_TFkWaw6~8MLf2)?zLS|2nWpM;Q>gu$#*K=& zNxUBwKM;PV_!CQ^IvK=LqVxwG>s(PLi7O?egliE~L&hRyQ8&3u_u56V<}%95I(8JL za3$9wo64o@(3^<8>mpZ)%mRw%c~+C9YoaN0?MG8znh`Gt>D`kpK8Rdb%Hlxvv>Wd5)#W`oRz{mHHX>t>tA6`$ig zool5$ng6;jb%Q5qe79KE-vO5CMhtt(7-pGNS%QYu* z?{XH&ILT@Ojm#!`zsi7kUYbfg9a~0pe7+#?B=R5LvSaBW~4s?~uA?4^Ol!H(Xjg?sOrq2j;%WRn6>?*!nowe(( zvwM59Q+yv4gD_jL*|fLKbMxpOTmACJFU&l&t9A`$&pV@Qo5yC$uGyd2UK%P4-c%pj zce7axy^Sop_KsaSy!qyDEW$3?HgaqOJ8!q~;rI{jy1nDfT$HESE88}^=xx*d#ok%m gd%8lW&urUm>nbWO3O^Kg#jX>=ZlLJj@d&Hz6(p?QH2?qr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..afebdd78b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2014 +# Jannis Leidel , 2011 +# AlMeer , 2014 +# Muaaz Alsaied, 2020 +# صفا الفليج , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-06 19:57+0000\n" +"Last-Translator: صفا الفليج \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Content Types" +msgstr "أنواع المحتوى" + +msgid "python model class name" +msgstr "اسم صنف النموذج في بايثون" + +msgid "content type" +msgstr "نوع المحتوى" + +msgid "content types" +msgstr "أنواع المحتوى" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "ليس لكائن نوع المحتوى %(ct_id)s أيّ نموذج مرتبط" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "كائن نوع المحتوى %(ct_id)s بالمعرّف %(obj_id)s غير موجود" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "ليس لكائنات %(ct_name)s الدالة التابِعة get_absolute_url()‎" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fc230cafded9a92d7193029045193f4a81aafa05 GIT binary patch literal 1233 zcmah|&rcIU6kZk4RJ|CD2R*zCq>V1^7BFRDQ4}yFHWE@j7?WnYJ8YM1cbc6kl$!`` zfOzoY!Nhnmu}CmTj2iq4H2Me3UOe!Z__ka6BO!5;FW-CfzW1v;{d>9ZwSwn7;s)Xw z;sW9=B0N746Nq1kONjncijqOTf;@_xMZSo_t2^j{*!k#~?WwSCUDtbXLv2n;J{5#iieN>K*lrpSAwL=zlXVTqc8 zgT=g~=WhfQ$ub23HWhhN;LNQEny>h7JOL#tip)~(Gfz-YKyI~6dD|1{L9?!7wX5O< zmd`hDEJk_MfmR(Z{*zcF96Sbub7ne3Pzy@TqOM}LnuqOr9IljCaXc^5f$3r@gexlZ zJ_|Qg=PdOJ^|`}59jqnd*(|m|%gh&QmfMb{-mBPL%`qKf^N-X8y6l8fbsC%NkWOi1 zs+Lx@5zsRF@aWAHp4daeg_`q;$6X?rufu{PsP9x^!toXv_ep^i@7g8exI-o@O`_hj zE5xR1j*^lNQz&puh)=mTW|0KMi$aw3WO8L?Wk`f&okdy=QCbJyR)*(}H zM0;c%n!RH4ZpA0AI?MbL*TE|{U2fbShsZQM!$`p$NC8F-Lqk)G%ru(m&>YZGsYzoP z1_vX1!qCEu;Z97`x`Jb47#zXi=y;RfrnAwL9l2sUH`f^GRp?gpE|Hps(ZBiI7D zFB=&8c+yiIQi6K0DGwo(1hrP`*2%YB&$=l;?%Vaa, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-14 18:35+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Content Types" +msgstr "نوع المحتوى" + +msgid "python model class name" +msgstr "اسم صنف النموذج في python" + +msgid "content type" +msgstr "نوع البيانات" + +msgid "content types" +msgstr "أنواع البيانات" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "لا يوجد كائن مرتبط بنوع البيانات %(ct_id)s ." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "نوع المحتوى %(ct_id)s الكائن %(obj_id)s غير موجود" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s كائن لا يحتوي على دالة get_absolute_url() ." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a91316d60bb76cecc838a21d5d3a1bb1c704d77a GIT binary patch literal 643 zcmY+B!EV$r5QYtuO9Yp4-~!TcYgKt;uRvS8-3lnJRMZtq6*zHmli94R#16K@wilj& zD+lgec?#ZxXJL{63nP8{J@$BJ?D@I9^@Wjb5f6w1;x_S~=&T{`5Fd!U#3$lD@tOE~ zgRyU<+r;5b#_o~6A$>@Sq;$+k*e#;V-&^i%L>nPqH^}~V0&A}0%2}vgffeMH4gsvL zkuAKt#60rTg10Xz%!>HS-j5pkw+aVmcP^y6^w;^ z!iD5=0#Yh5*%ML-3gqYb(R4XCaT6|{^05FhR*&VLAWP14h&=P!hDt~06}-~cngC~L zx@Hfk8*-mjy*n~?=?>|REn8h8&rsJ2o`=|aqb=;LVr*2JuGi~P>{6N~UX5~Br^BQE zNcH=EO10D7WPUn7-n?IqL~=BICC}(96-2y>X;W!qr;x9-4;W`}vlG6*iR+3j(eq=Q zyTaH~!TyDbe;ZXmm6Ao(dR_4o=j))rHoY5W<0%Zw*^Y%rGmyK}ghg*IG!zKKAb)&s Y`z;Lr?^#!4x6@Cy?ayesFwC3%0@SR!UH||9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..9e00e7bc2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 02:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "nome de modelu de clas python" + +msgid "content type" +msgstr "triba de conteníu" + +msgid "content types" +msgstr "tribes de conteníu" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cac6053dda69c3922e67f1a573792504e1640db4 GIT binary patch literal 1065 zcmaiy&ubGw6vszxtE>ttf)@`@L`aZnet;M@jrc2tg3(f z`iOGt8)^eJLtRF#ogt)wypFtw>>w{8-yz-pd*lt|C!|6hqM8`rIY-DL&-^<@{EzG=v z7)fLQV;nF8N&_=S2a;LAA=X?(Bq)lza(@JdBx7t(&Cfv)p%vT}$#$yU4e1uAuS9C3 zRzC1Orb6xQh(xEBc1$QaeVm1ccC`=Q_6xcrhSD9SPqDZU^=iFJt2J7yL-oF2Z``fo z@}4ncX*XrcM9k{chjuI#bnva5FwS5@VEizWDjTf_I(~o#6=p0Hv@2Nb!=s5v`%Gdl z5=sMW6Tec~-``)iE~VTRxvMho^#oCoqQWMXve((_v`=qUTd#V>*P-s~_+Z7zR+5NG z)r4TcQX_2ZWp|S{PS3eoyCS7+6=*J1=tH9~?V?p5*u>k8vXn)1Q>U@{qgYBq&FJN_IU9~47Vba7J2%0!Z-VBXR4 UnB})J_`3_GeB#Q$`0)Yx4b&J(IRF3v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..993c10728 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2020 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-12 07:28+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Məzmun Növləri" + +msgid "python model class name" +msgstr "python modelinin sinif (class) adı" + +msgid "content type" +msgstr "məzmun tipi" + +msgid "content types" +msgstr "məzmun tipləri" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s Məzmun növü obyektinə bağlı model yoxdur" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "%(ct_id)s məzmun növlü %(obj_id)s obyekti mövcut deyil" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s obyektlərinin get_absolute_url() metodu yoxdur" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6ffe7993eb2d6d00b890ef37484840bc0a16f3ba GIT binary patch literal 1353 zcmbVLL5~zg6fOmk40=%$gFx~;Kz3q!r+Zw?(mTBv6cQ3Qu4L2;$)={ecBZkXYSLB1 zE`$THi5C`@i<_7j4_-~ovT-C~SvKLMx9X!85Bvw>)vtPHXF*9!sO0OfUe|ly_uh2P zUvKUIj$s`Hjsh2fL%(`nAMFl+Uj>lHkW%&yX~vFE z#AZSAuBd8KtxF;{ni3_ST>sushhG-NsV&R`Z)uhFjacaC*+iAP!gN%^K2g#LX{dRn zC-gWnh^W*}ld&pZKz^ZolPIBw4q`dg=6?!1T$5D9wN`P;jYz1g5|OcZWbW*q3pDFp zL3?tTM{$NyawD?&T)7Fo^NIJB$aSh@NXaEG+p2Ow^i*!VIo(bZ?@Yg~y`~DOGXJ@E zL0nEdUzLu!f2eAdr-=ABb{SBE5fWvHX685(Y*33)v5qbQ&gC&+F6_oE=7 z)8rG<5zj{T-J?b{<+f#o-w5h-?b@(pHkhiSBp8)Mk?)SmyxHjFUiqo&_&s!Cv+LQ2 zpm3V%5cseh1Em^1Roxx86yTy?XFq z!fx+xW4G;qigi?N7b|w~FWr|BE4??1HG3bPTg5t>DF=t~ZN#g<9X9Obg?*0B+|VzW if}!CJNMj)Pqihvxm=UQvnBk^, 2015 +# znotdead , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-16 18:24+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Content Types" +msgstr "Тыпы кантэнту" + +msgid "python model class name" +msgstr "назва клясы пітонавае мадэлі" + +msgid "content type" +msgstr "від зьмесьціва" + +msgid "content types" +msgstr "віды зьмесьціва" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Аб’ект са зьмесьцівам віду %(ct_id)s не зьвязалі з мадэльлю" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Аб’ект %(obj_id)s са зьмесьцівам віду %(ct_id)s не існуе" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Аб’екты %(ct_name)s ня маюць спосабу «get_absolute_url()»" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..20e9b668ea986fa33a0e7a44035f6f2713efddc4 GIT binary patch literal 1225 zcmbVLO=}ZD7+$r05cML07Y}bip+PoZB7|)t(%M47&{Co&p-gtCn=PA}uruk$tskJ+ zi(V82>A_zROH)c~+pFGY|9}UN{tBN>(zJ!5;=sc*@4O$+`_9h(xHa(J!ny|B1zrNz zflolPz5ye^ci<*)<$`4u!MDMWz-90a@H#m0zXRU^Z-VE69bgRh;3WXe!By~Uum}DH zz6YKf==wFd0Q&yHsG{3i3cUE!?m&}cLCSrjlq zLp7}%PBy!^xR}vNxnPbjB{|t{pT`vT3S_H(Hk~R@md8&f%4c$^-j}hHFXNErOFG*K zSs;eVt+7aPU3y-bu!|>giPjvC>~Y~rFA%;%#cH7YjXG5IQ`2EHVxc`Dqq=fPG&-g# z6^5z1Ee#18EKxo^oI3Na%%S;W+Ga0aGrMFC;ttH2XM75vw2+k^!tieDUmWq5JTnjG85TTZxnG|h4>9xT7`Ej zUWaTeb6Vnm>UM`E%)4q1<5%cv7ZafWWcp, 2022 +# Boris Chervenkov , 2012 +# Georgi Kostadinov , 2012 +# Jannis Leidel , 2011 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2022-01-13 18:20+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Типове съдържание" + +msgid "python model class name" +msgstr "име на класа на модела в Python" + +msgid "content type" +msgstr "тип на съдържанието" + +msgid "content types" +msgstr "типове съдържание" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Обект с тип на съдържанието %(ct_id)s няма асоцииран модел." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Обект %(obj_id)s с тип на съдържанието %(ct_id)s не съществува." + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s обекти нямат метода get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a2a89a5bb04a8be850776414bb16affcee9e64f GIT binary patch literal 1201 zcma)4O=}cE5FJfaSoPw?i-(RNZV0_Q6O2hFS&@7}z+i}@M?>#SXLjOD_cGm^kE4R* z5Jfx$FG2{I*&q@nr{v;Kk^T|>0N>1RzCqWs5-mi$PFLPfj5=e1hlLlMigprWzMOIfb zZfU;QO5<`rNw{vvz?zgobD@d1-sI}U)9^^48U-hs5K}}*!jzJJ#54~`A_E>xsEEL6G!|QsU+{ynonikCY=rF3!bV-3YP@SOoXzuz?(AFbWVj)Kqp$EqMmd~ zY5u84CsWQeV(ApByJXOIhN$gOXP7vSYYz|Dj%_25F7TBo*F23IruHaxMv3##eP9pR zu+kHzH1$#@RLrzYUE;Au5(Q*|Ek$HJ#kZo1oyTFqqPXJA!w?+uCA_DbS@b!@wGgo+8OGY;%<7iE~@>dx!Jkt)A5~(UF!Y~n*R-#XuhVa z&6q`EjQ9G}x@4pt>612HQWvH9xRtV)&d4-TE)mVb zRkgt}(plEZg7nph(?3?S&b}m*y*1f4lYKVr4U=t|_Is0U7waFS@Hb7iXWEl zFCuqMwu4}VL1M$o)8KSvu$xQbeA{F{ac;7&COa&0-Hph>Dk|)v50rxg z{qLsz`gpD{*u{j$6Xh*rJ4Mq6IJtQH7isyg5ixRScHGq-ik++6x%Go0, 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tahmid Rafi \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "কনটেন্ট টাইপসমূহ" + +msgid "python model class name" +msgstr "পাইথন মডেল ক্লাসের নাম" + +msgid "content type" +msgstr "কনটেন্ট টাইপ" + +msgid "content types" +msgstr "কনটেন্ট টাইপ সমূহ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "কনটেন্ট টাইপ %(ct_id)s অবজেক্টের সাথে সংযুক্ত কোনো মডেল নেই" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s অবজেক্টের কোনো get_absolute_url() মেথড নেই" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ebb4b38054e57333bd589f72564c90762841593d GIT binary patch literal 1419 zcmah}&2AGh5H?VL6hJ~C#D&9fXqyPR+3gQ$woOY5MXE$gg#ss}YO?EQx81da?M+)$ zi5K9?1@RIfE?l^9ftTP}81JS{2uN5Oeg5X>^VqA|UpFV-Gg?>3?vlMCyGr(v%&i|} z0ohNo>tqw>7<)i?lW>7>lkghhTS6CqM|g+u1L3#xjD03tC;obZv0H>+2-gUI5N;4w zE;4q5aEH*vk?=NQPDrJU(im;oWiq!ekzFWujFEiNcR?qsq1~03iJAe`*%zTT5Ggrr zA;!J{gs!l=*fA>2t=P?VTCG7QY^);oNJ%TCh4yhzm@{UHL7|#NXPV?7@!i4`DPf$x zI7*EDPg#rxqyjWXg$Y^_L8c;+vT$&;JM0f)SnrsclVu)+DV2h|9^28%-HvZY{H4$) zQ8IvNA7xino{OH+mT#GE67luCYj|4)P}zCb=8v>MOS$|pogTof=Pz*2=Y9ixKkyp& zJ>T;vkv|vx#Ay!mn%tY?{w(`4gox6M*a$)U+0spxm~qRXOQ<&}xBSgQ+Pfs0a6m zk2xA+yh(f&JP6JdX2%uA9E~yFB)$s%P+<;EPQdlkYRwO~%~9E9pl*vS+IX-6{#dv% z2$#{uShV>^v`Nubm~{=f8++~nBuqMGx7@3EE@KV?n6E8W*qSWHGg9BbmeVzuSvjpB z61jl`VIh|g(?kj>|1q}gu|h3ey^s;6;dG2q=^Js3OfC*i9GzV`eR>p1@g~OapZ-=D xsiR*@G4f@Z#ViAJpmL$9+rCJt<1R|;R3g{gNFSwRtXY(OIG~9h40k!{>^F|Gg+TxS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..15a3dfde7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Irriep Nala Novram , 2018-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-03-12 14:31+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Content Types" +msgstr "Doareoù endalc'had" + +msgid "python model class name" +msgstr "anv klas model python" + +msgid "content type" +msgstr "doare endalc'had" + +msgid "content types" +msgstr "doareoù endalc'had" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Doare endalc'had an objed %(ct_id)s n'eus tamm skouer kevelet gantañ" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Doare endalc'had %(ct_id)s an objed %(obj_id)s n'eus ket anezhañ" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "An objedoù %(ct_name)s n'o deus ket un hentenn get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8206fb84da2257e40924e6fba4440c52c210d34a GIT binary patch literal 700 zcmYk4&2AGh5P%Jo%Zf^f3l|Q&a{5s@udNY~Po*hrbf#+S0v-55=k#D!c$!)P(eQmr51o<$bLm?d zlztujG`^IY|<5 zDqgki%8Hlc$vH3zvNUlo;}xh4s@m9 OW;Z_LR;cBMNb(PE^2BWb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..d8a69a559 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "ime python klase modela" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "content types" +msgstr "tipovi sadržaja" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a67471a8910ed51c13dbf8b2bc658b8c17b7f95 GIT binary patch literal 1095 zcmah{O=}ZD7#_7&i64h5c=7OB6cc2cG*}4R#;@2yp}|t3Cm~FBr<<*_Gt16wo8AQf zfEN#fc-B9lKcE-=6CV5el5&>U^th7+rVq!3h)W==LfI` z`~o{vLb_{2BZP_y#g-&aSo7fX06w#efS((wjNPk-uCGNZYnIGlPlnD?Wc2U19~}+Fz9d1h zbbT?fMiox>i(FM}lu9==5$hQ3q;}Lh%%q)p4jzr`Cef@aE>ONdzKM*qWd}J*tUDud zC@g71!deq1!pVqI6G_FwNps)sAIGxn5aa1GjzWc0@+-3K-1rUoX2f5~+$Kf`6zvHe zo63&NOzwEs#!1AV6|v<#6HsOQ1>ceTi4Wz^(LA7LquJn%hrHQ>88lWNG;k_g!aCl| zg|_CDmb@oL8c;_#p@gRD(77zA*AEU3 zmYlDb?8=ePsF#CI39;k!dMN6(N_Vrne!SB1Qlm0?8t$JaASXwzo+**&RSJh9x6-v= z_BMFyIL`Oll{sJ6p@|Y52h8>p{Q)DA{UBpm^`%s>1^!Uc5{_Vvt8A6r%lVX z)e2izQ$a~vs$rrsyd^{, 2012,2014 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-28 20:05+0000\n" +"Last-Translator: Manel Clos \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipus de Contingut" + +msgid "python model class name" +msgstr "nom de la classe del model en python" + +msgid "content type" +msgstr "tipus de contingut" + +msgid "content types" +msgstr "tipus de continguts" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "L'objecte del tipus de contingut %(ct_id)s no té un model associat" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "L'objecte %(obj_id)s del tipus de contingut %(ct_id)s no existeix" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Els objectes %(ct_name)s no tenen el mètode get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f0ac28e3ba2aa4200b9daf0ab97a99c17b9255b3 GIT binary patch literal 1108 zcmah{L2J}N6pmV}M7@aMMe%uP*+pivyRFbon<~~83NBsB+LN%%CetKsG7~bBZMP@E zAD|Zx1rhoKiZ`JLy{rrRCp>ufKlmm|w=D_|e0=lr-uK>2=KFbj>b-&MI^rJU72*cs z146Iwh$X}i#4W`1CBs-izJvT2xs7}i`3F;j6>kJFe{C5ZkGbCm>7@L#VF z6$Es^fP&9dkM^aAGR1mX8da(gGZhHWSP@(?uAnY zCb0cbs{aTBDuD~2QVKVuig^$Vk41)C4%g!@1ky-`csyRzfg7O|^c9UxD)bG>x<|HH zDnr3-@OCKog}KQRkt))be&~^BnJ-CK*kE=x$R-Ldy}iAf(%r&shUFr*iesKqREjNET2-^X-d;VsP@`5i%ZDNQVQf%rUs*{+ zL%s-ZKvT(-^Rl}}7S8JQtZkN(RqhHeQ, 2011 +# Vláďa Macek , 2012,2014 +# Vláďa Macek , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-19 09:23+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Content Types" +msgstr "Typy obsahu" + +msgid "python model class name" +msgstr "název třídy modelu v Pythonu" + +msgid "content type" +msgstr "typ obsahu" + +msgid "content types" +msgstr "typy obsahu" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Typ obsahu %(ct_id)s nemá přidružený model." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Objekt %(obj_id)s typu obsahu %(ct_id)s neexistuje." + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objektům typu %(ct_name)s chybí metoda get_absolute_url()." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d72e9756a0e4e32eb24b9aba84086a7388bbf8a5 GIT binary patch literal 1159 zcmah|%We}f6g5yD3NNV}gv8>qpiNY{nMoTOri51?s1kuv1=t`WXY9_nnz19>X*vtU z53pr}_zFIO6|mz6_!h1wY0^rSxYC*9YoGh@%$>jUb6*JB6~rCHd&E`5H-xvJhzRiu zaUC&tj*$Dv^TApCaF!8^^y! z_U9jvZzJc(7)p@HMZ{%#@Go+0cpJ&}7vb4p)^p_Xo9^#~e4*rY*7!!-!QC|Fwx!XQ8)-4ln> z=bY)*Xz+kGRv>Ie&DEsryIQK>vJ+l7L@<~ozJj>_>wsV%b1Nx@|TzKauS&(1|oZkG=BHmOL2;`mS6KEr!V J275f^, 2011 +# Maredudd ap Gwyndaf , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Content Types" +msgstr "Mathau Cynnwys" + +msgid "python model class name" +msgstr "end dosbarth model python" + +msgid "content type" +msgstr "math cynnwys" + +msgid "content types" +msgstr "mathau cynnwys" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Does dim model cysylltiedig gyda gwrthrych math cynnwys %(ct_id)s" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Nid ydy gwrthrych %(obj_id)s math cynnwys %(ct_id)s yn bodoli" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Does dim swyddogaeth get_absolute_url() gyda'r gwrthrych %(ct_name)s" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f5511b9872e7f1cca96d2c9f929abf5c9beb56e GIT binary patch literal 1038 zcmah{&1w`u5N?ivHP{e549+;?!fHrW8xi1qkp}A?;#Th z2m(^{L$T*fKJ_@9+PqeW0)1vAdup^t?O|{{K{t;)MKH^&;~iL7r;cp=}G{3TkajE+I> z3!R#12PejQ-gBvv{K+(Rd|+aT`p@|e9;k4YZ&2|VmYc0L-dy9YhtO)r&E|t9t>~F> zo)4_hE*IX|7&fgM!z+_&hZ@%HO5xBwP79&(rNk7ENTAcHNRbav6ftZFty~7R%=<~) zXdE6MF8Pp6jqoT48fBaRD6iBFDH`>tx82)3c~EPq8C8SfVK6axJo1f6E|l&-k_qe3 zcV7&)c>CmDs5L^%H+5p9(rFCsJ>}lHY;^ZotEZf#HGr4qOu=Y%J;;Jg=X;+Pumgr{r r&k@bq&?z95I6EC!HV#HYEe, 2014,2019 +# Jannis Leidel , 2011 +# Kristian Øllegaard , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 18:00+0000\n" +"Last-Translator: Erik Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Indholdstyper" + +msgid "python model class name" +msgstr "klassenavn i Python-model" + +msgid "content type" +msgstr "indholdstype" + +msgid "content types" +msgstr "indholdstyper" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Indholdstype %(ct_id)s-objekt har ingen tilhørende model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Indholdstype %(ct_id)s-objekt %(obj_id)s findes ikke" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr " %(ct_name)s-objekter har ikke en get_absolute_url()-metode" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c098e03ad0d681a657036fa518d834a3547cb342 GIT binary patch literal 1055 zcmah{O=}cE5N$PyGU`PH5j>QLu#5D5MKMgWDrzFpELpI$UbT8Ar`S2w8 z2fTO?#DCy5f540W2@l@Ad$f9H+)WU%;qkhr>s3`xzwejk-ZNU~2-gTN3FiqP34VPg ztPs8tE)o__F}6f}nfMNIkN5)dTVj9yj`#}kC*qWFMDY3>XUe=+#P=!AD*j9yQ2etx z|3!S2;`uqoNIG3-tK9Ow1bheAdUX<=7WPo>>&t< z(GA7OnsnlDILXsm9Wr!@k?fJt4z+{9;TY{Sauh*PSIKEr`atD}#TRMNmL2dwS@$1d zA}nYF!deq4;ZQ63LeSsjTezouDt}DPL+G?RE#7ML_Fd?7!rP0tTC{=>dhG4cV5EQBYRXF@|Qac&$ooBR9w z4d)B0Z9Hg1CTo_H{-Lx|HzhXfL2tdcI=fT5(F&@!;r?wxaCqRF<5VcU3{fI-i>~{8 zu*R2WdA`>+=6qF0Mk*bLuryL`Iwk!n4EpIL7b#yed1gb<<07=(&N7tSZcW4WF0|{* z0V^#~S!, 2011,2013-2014,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-17 22:43+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Inhaltstypen" + +msgid "python model class name" +msgstr "Python Modell-Klassenname" + +msgid "content type" +msgstr "Inhaltstyp" + +msgid "content types" +msgstr "Inhaltstypen" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekt des Inhaltstyps %(ct_id)s hat kein dazugehöriges Modell" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Objekt %(obj_id)s des Inhaltstyps %(ct_id)s ist nicht vorhanden" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr " %(ct_name)s Objekte haben keine get_absolute_url ()-Methode" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ecc0644725ebc445209e875c0e0d6a83b77196e GIT binary patch literal 1132 zcmah{O=}ZD7#_7&iF&Dm7Z2~HkRX$6(htg}@w&q-bd&1{J2#dfWWMZ~u4FNVU7$k7I50(EOud24R{JK zF+?y4<-ReATdNHQgQ~H0#U4MbdMd8v1D{b;6sh^TSF4oT8|}68yVa{ssrVym|HuWy z4^1tJn2=4t0aMLQ>s4o+uAIl&W_vuPYtmD`kbw&;Jz*x(;*05CX*ABPNH1NT-s9wiB5;Du&!gjoOLhlM&?N9a~oCjQj(L1Xp(e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..fa401653e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-25 16:03+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Content Types" +msgstr "Wopśimjeśowe typy" + +msgid "python model class name" +msgstr "klasowe mě pythonowe modela" + +msgid "content type" +msgstr "wopśimjeśowy typ" + +msgid "content types" +msgstr "wopśimjeśowe typy" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekt wopśimjeśowego typa %(ct_id)s njama zwězany model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Objekt %(obj_id)s wopśimjeśowego typa %(ct_id)s njeeksistěrujo" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objekty %(ct_name)s njamaju metodu get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d49b9f65db46ac49adc7d580d588adf6b606acbd GIT binary patch literal 1286 zcma)5&ubJh6dtu!S?fgvFCLzV&?3{_7K>%tim0s=ES9ngg0Q4J>Fl(#$ui0I$3f^% zyr_8bP!Lh{*di6HwzllSOTA=n9zFP%_+@vytx~ChZ@%Q^z3=6{WPYA$df{N41kM8w zfm6Usz>XcD7x)gG2AYpJPB-{0xC=Z4ZUHZV?f!G{Iq)lR1bhM>V14lz0Dc4>2fqQ& zfm@nt_Gfke08YdH1B}qdI8mQ9gO38(c8&w~+>mmdORagG6RgPF6v@$Xp4WPRF z)iUtuQ0YSg3rvxa#FUcxkZJByQTjY`^7Z64-5(3(lxA=|QS+mGgix|2I>WKF6}p4I zd!NTDl)@u_oQXiDMtDia+8t6s=({({fpW9bqtx(ScZ5%d*44d*vSn%q3EG}fyIjJzI)jLw|mde<{IO%+b{Cc4@KZn_h_gahxCX?so|&` zv&bEgaZ!0BO4X(6>+GT0w69grg+A(N>q$AuqFE!eX0|ceFq>xGyf<6;Zo|C))tQgh zNM<#8Y%0l;oo<;`^TkxKQ#s)EIp$sRG?~Tz2AS7pJ(+|4x{a;|Zd(=jAojrQmHkgK zS*%GVO9aIOrS?7L`cac5_^u>#NV#q{4oQXItNQ5wC)55`K$(&Sq*}0PY!8!#-TG{Y xD%HlWny;pUR@bYT|7R5qA1nKhN}c2hZpU^J7qR`Ry{i3S&Trbw6j1;G literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..fc107e8f0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nikolas Demiridis , 2014 +# Pãnoș , 2014 +# Pãnoș , 2016,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-04 07:05+0000\n" +"Last-Translator: Pãnoș \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Τύποι Περιεχομένου" + +msgid "python model class name" +msgstr "όνομα κλάσης μοντέλου python" + +msgid "content type" +msgstr "τύπος περιεχομένου" + +msgid "content types" +msgstr "τύποι περιεχομένου" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"Το αντικείμενο %(ct_id)s τύπου περιεχομένου δεν έχει συσχετισμένο μοντέλο" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Το αντικείμενο %(obj_id)s τύπου περιεχομένου %(ct_id)s δεν υπάρχει" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "τα αντικείμενα %(ct_name)s δεν έχουν μέθοδο get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..cee023714 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/contenttypes/apps.py:16 +msgid "Content Types" +msgstr "" + +#: contrib/contenttypes/models.py:135 +msgid "python model class name" +msgstr "" + +#: contrib/contenttypes/models.py:139 +msgid "content type" +msgstr "" + +#: contrib/contenttypes/models.py:140 +msgid "content types" +msgstr "" + +#: contrib/contenttypes/views.py:18 +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#: contrib/contenttypes/views.py:24 +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "" + +#: contrib/contenttypes/views.py:32 +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcc2fc51333228a9617e09ba1058373d60eaf7f0 GIT binary patch literal 486 zcmYLFO-lnY5LNWFN6#Kc@X(^uB%)YTD}Gf_EEZY4O6;cF$ab z*`uv}NZ601EAVn!M$Em2Z19ldRj?+p7OzdR8V;m7La9(4gHl=^?@1*k3-QsuyLr!* z?hutkdBi1JsXfWa?oCXX2Sc$k$p;O0hR8*@x2~`ioU$8E&#Oh+ay0U1Ttns5looSq zCK`HFRxXaAaWRc4n97+ZG{z~_T8P#!&}`V-uoH-KYEp+bi9C(a;x;N)7E- nm;Rk=Sj@@>)szk6jSrKkf$BvXy9XUuhTR6iP8U?Oldb&%5k-%V literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..19d5c16d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "content types" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f4b2043e6b79125f2c69c10c85b8da376680abf4 GIT binary patch literal 1053 zcmdr~&2AGh5H`?)w7`W67Y@?{B2naIx1vq!5QI`vRA@w0ZMjCy?quU?*N)aslS=Rg z9N{szae$ZM0XQRZWxOd3oVYX6=g(u!H$S$&-P`!c$ZioH5Msh@!h3?ZF9bpOO4ud* zAnXtt*BHA)EQ#+DYvTLFZ;3wdXWuI5VZ=1DmOo_vV@9u@MjqU&s8Q zMCmA&Kd0&fw!>(LhY^q35Je(vH^L|kDUhGwx$-&Jacv&%^JpKUUGX?D{1mRD|5>4|wt8lBB$hCD`D2k#-;`hGYoQ*!=(Xy>;Aqfa-$>L9gUgrXF}!o_E}*Iv4D)#@bAD*b!V1u{ Y%C+6?4y?A_nue_|MDz>% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..7e385be15 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2011 +# Ross Poulton , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "python model class name" + +msgid "content type" +msgstr "content type" + +msgid "content types" +msgstr "content types" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Content type %(ct_id)s object has no associated model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Content type %(ct_id)s object %(obj_id)s doesn't exist" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s objects don't have a get_absolute_url() method" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a209db2496fa548f4b696c8b3faa62a42fd7938d GIT binary patch literal 1087 zcmah{TWb?R6kfI7qP`Tw2YomqVnUf@x7gdZ5wWIFZD}ddC!tJtPm@VDGt17T7hinx z%{LK5{1yHR1%HFT#cwug8bS2Hx8Izdb7j6?vooIp*froD@CLX6dHQCVd z{;P%^iJ~YDm*&DK3=t^y_(=Jh=W$CS zToKU>83^((It*IchxEv)-1LGS zs28czQtJ;jaT!#`Ovw`Ex&Iadly;K%&*;%G((6z;^elCVu2bd5=d*eG(4K^P2ZmCn LTsfoVI4$@M=(IbS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..17c9e158d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Enhavaj tipoj" + +msgid "python model class name" +msgstr "klasa nomo de pitona modelo" + +msgid "content type" +msgstr "enhava tipo" + +msgid "content types" +msgstr "enhavaj tipoj" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekto kun enhava tipo %(ct_id)s ne havas asociitaj modeloj" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Objekto %(obj_id)s kun enhava tipo %(ct_id)s ne ekzistas" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr " %(ct_name)s objektoj ne havas metodon get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5bdc5a24e2424f81a752fab55ef380c06dc10df1 GIT binary patch literal 1096 zcmah{OKTKC5NNGuFQ6r=^mzg^0*29 z0WTf|@$Omh;58Th6CV5{T0OIF5+mC1@l93NtEay2i*s)oor{F)gqMU%g!cr0z7m!R z-w0O-^Jf@aBECx8B_0r8CVoxq@81w#BmO|F37-i)vTvVbY>`+HuMj)pC&ZtK7l?mO z?-%A6yGiyfVoIHz3)8Q8;yp2~+$y6(kUK)h zCfLNxYXZrre}cs8K^f3p)Jhj5L2y7#pgLq9sDLW+e?cuUD@B$A IR1#&s03ba@%>V!Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..dd7398ba6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Uriel Medina , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-09-25 17:13+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de contenido" + +msgid "python model class name" +msgstr "nombre de la clase modelo de python" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "content types" +msgstr "tipos de contenido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"El objeto de tipo de contenido %(ct_id)s no tiene ningún modelo asociado." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "El tipo de contenido %(ct_id)s del objeto %(obj_id)s no existe" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s objetos no tienen un método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..12eec9cc756804a0be1469f33a416a27edaf1465 GIT binary patch literal 1084 zcma)4&1w`u5N@PEO>fA2Oz80C!GB_;GGyL3~D#Yzp?8Zjr*tS5EJ&c`&gv^gu?;K3k zK7xW2-B?X5WtGEmRc5U=_J^uC-bU&z~#sFNkV9w4tS`o z`$ytbSuh03T8g!Dm_SYmW+I+7_w9ajtSF9nJk#8RIOA0CD~dr$enYvP$mdvEO(ue5 zPnnd0Ar@3R*|(`qxps2Tx7)>1Zkm`9ZPEzVCfd!Xj-c)p46=&Xky}*eHUd-BuI;U^L-W~d8Mx7d zu)Q9L9cl#Sm`{t0pVDbGXrSU3`ts3HLVuB%80msD6NF|NosihfYKb}mAM~+C0~|Z0 zw^KsnUbVvTKU0rqt4H%9^Rn}*, 2011 +# Ramiro Morales, 2012,2014-2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-01 10:21+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de Contenido" + +msgid "python model class name" +msgstr "nombre de la clase Python del modelo" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "content types" +msgstr "tipos de contenido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "El objeto Tipo de contenido %(ct_id)s no tiene un modelo asociado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "El objeto Tipo de contenido %(ct_id)s %(obj_id)s no existe" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Los objetos %(ct_name)s no tienen un método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..66b7631584e8098b00f6be0327826e01931a42f8 GIT binary patch literal 1158 zcma)4%Wl*#6b(=w3b3FXHY_eeh#6I$Nm`Ybw1W`SRw`oDstl|^BTwvRToT_XcKX`z z18mtKegGsEuw>f}`~)At7jT^nQ(BPVN+&1RzAxM7`}EWskL(iR2H`p3GT|M;*;hhD z_(r%&m^$NmcZsKo=ZV*euMoc?cKff1uM@u|{y_LlSSJ6)Im&VC#4E%fi60UFAihT2 znX30Uh;NZUB&Jl4$U9HCNN{$6Kq-}-rLUX2vfGW=4m8hX(*O>4WNZxx)ORe5_^t#F ziL?VgG?i{BKI;~eTZ&~X)IEaPAe?7G$if8(!zfso3Bn+tK(-}! zm8*Fix4?pXY&L*kE(*e#fXsi)jb;6UYm;(|MFd@5q-da59(}??SdOz24~61~53sZ; z;>%Wy*?mgWNy!t*`jTf6JjuCMW(18crkD*CZ$e{aZ63ATdwY8=>*}j*x$lzO^$CAb zI(!dBpqACd~^L{S(`##9DQoh?SaFI+g!lWHP6w p+c^3%mZB4})3Csn_s0m;%Bi6>y=@`gq$#g-ENe|y!`CABegb{(S62W4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 000000000..e386b5cd8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlos Muñoz , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de contenido" + +msgid "python model class name" +msgstr "nombre de la clase modelo de python" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "content types" +msgstr "tipos de contenido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"El objeto de tipo de contenido %(ct_id)s no tiene ningún modelo asociado." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "El objeto de tipo de contenido %(ct_id)s objeto %(obj_id)s no existe" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "El objeto %(ct_name)s no tiene un método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..136116864db042c0d490b79745f3b140b292a426 GIT binary patch literal 840 zcmZWn&2G~`5MH1lWI%#mxNw*XkP@Mdlc*7?(;!r6r9vX2Vi31#V^5up>|M*dA*qCT z3(j2O$_0rl@4*}J0vr&twwr<&>C?9}`sT-;`LVh2fstJy+#!qz*9h+j&OQ-t5Iz%n zgs+6_gr5W#|3$b>xO#!H_XHqplK=4{W6z1d5Z@yHP3+<~FEMtH_%1O?*LJynZ4i^R zG?J8amCh5bEGi4(X^w`Sd6qo5--zt7jGG4ZbdHgQnJ}O<2xD|4g~b>$9b?L(x`xa8 z$1yBFwKJ_M9YiUmf)W|BNugayei-xDSQx2Q0P$R?M0-b=>%#J}No36T7K!1Z4#1nd z;79mYIw^lj%>(GRJ3GA7<=q~%d%^a@2W>KMB#h-@A(Tml)kOf$(0u=9U{5TpG*-aw z9L-c@JN?H=CS=-*boPj{RI(5W@(@K9z{^}HX=czE<4Q)l35}VxdEooY<+5d6ae0C( zm+DtjpHW)Z@zETQ-}p^$d^p}e|HMwK?bZL7yFVU)#g+B*R7f>|XeJ7ScK9kh;Qe!* zYj=VL-&c{2rAh+mPo-Ut96;I2o1}|Er2Ie^nF&DUrE7-W0aVXnL&4S%I?aK{LYZp= zF+w$rj5Qlk!0p)*(?S7Lu%vRLYQH4<>m=w7tVD$h7WI1FVYs`XTK^@Mk+R{s7E?N# U7U=4yqC5?R`da9ws*BO=4, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-25 05:47+0000\n" +"Last-Translator: Jesús Bautista \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de Contenido" + +msgid "python model class name" +msgstr "nombre de la clase python del modelo" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "content types" +msgstr "tipos de contenido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"Los objetos con el tipo de contenido %(ct_id)s no tienen un modelo asociado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78ad5f81b083124abe160f4185b9a70325f366db GIT binary patch literal 1152 zcma)4yKdA#6g3bYTA&~e4aKEE*;O=Idr?SmvIvoEq#z=qWQiz{R8I;ik6Z#4g3T(pTQY>*^s1wD;*!-nfscV^K*LYy$8Dn+yPzz*MX0Kv+qC% z`~YqOQx`n%0eBib4_*h~0KWmd{kP!T;1A$Wz*k@y{`Mv0fZu^v!JolT!N0(_!1t%> z{T_G*{!1`YJ&<=9xC%JC0wATbi}<>^E4$Z>>_G8Mv<&Ito`|fWSgRRJBfc+)QzGnu z4~t`Thts`n}_Z8!NI|tbyelAICR, 2017 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de contenido" + +msgid "python model class name" +msgstr "nombre de la clase del modelo de python" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "content types" +msgstr "tipos de contenido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"El objeto de tipo de contenido %(ct_id)s no tiene ningún modelo asociado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "El objeto de tipo de contenido %(ct_id)s objeto %(obj_id)s no existe" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "El objeto %(ct_name)s no tiene un método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4ec01984e2d6810b6b6865d4aad60c84c4fae00 GIT binary patch literal 1028 zcmaiy&ubGw6vtPsRaU)-AcBV{C?v=pE+bb%FJs<<}?H z3hOiL5^Mfc5VV+An0J^R=0)afroVr~yvqE*%vm2<_t?I9X5zQWTw+@>7rh@dWPX|6 ze`Q`{`v;RlXY1T_H_trHnq!@1`M%jT2yRtk>T8)})qxpoV@wVbqrbm;M=+GT2oh4H zz8pA{m4yA$W|b=BNJEnZkBuhO1ik$N-OM7kV4PPav#fl;>HFi8#Gsp0z>#wFpTMDX zpbbdpOsphf0=Y>r3*u>UU+x#f1;swMrzd_8XB-OtiNS_7{)J*a5iij?Wpo6|w$!N! zyI2@YqT^DPh(~4WM9)MJZafoR+*RIHJmKOIH0zD~qR|x17StQj(%sv2Ug1;eNc61K zE|X+z1YMbGX`zb)=@3?|9d90{xm4LgZ1M*jqSI2QD0(RK2v!{#t)zy^kf?}iwY|N) z1@aly7LI&KZPMxyvT1w`sa6d;>z&o(M>Q7e;q-Ha|C|U2M^q~^sq`|$LunmS`$ca} zw2u9Jtu3@-RmUb#I*p(;P&Df^0;F&wE3M4Lnz6ZyKo?`vwVTT@*|sYhZnU9MT@L>k ztsPSQZ%~*F|2|VlT$h69%9V6@aCk6K$w}k4nc{ROhiaUbQ|HqCJBT|d%cLBDL*pPX dxhIv%z#UaBj<>#n$t, 2011 +# Janno Liivak , 2013 +# Marti Raudsepp , 2014 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-28 01:46+0000\n" +"Last-Translator: Ragnar Rebase \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Sisutüübid" + +msgid "python model class name" +msgstr "pythoni mudeli klassinimi" + +msgid "content type" +msgstr "sisutüüp" + +msgid "content types" +msgstr "sisutüübid" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Sisutüübi %(ct_id)s objektil puudub seos mudeliga" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Sisutüübi %(ct_id)s objekti %(obj_id)s pole olemas" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s objektidel pole get_absolute_url() meetodit" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5883d06a4a5217b600382f933d922f900fb11163 GIT binary patch literal 1077 zcmah{O>fgc5H-*OG9aN|;LyWxKqRWRu`BxJ5`am0hK$pS!Y$jnoYkFR*Dr?;m37EC{V0IT-OH1P()V1HNx{ zUOF6RGkNDPNm?F7wj7CPsh4~y+UK9Rtbnhu7*0?!?8Aw z_3Tgzwpk7>>+1x<-4}hfWsp0{WzVU50!vZ6%%YgZs}RRYw7L+*QACMs509kRoaU{v zXr0CD5U(VUqlJhp+~L--zTwK|+-Z|QM`5O+o9EmZno$V}PteDn$vU=}>f$NYsbR^7 z$oj~O1U9*SQzA4*&W)2+>-hM1(RopMfG577RUhj&<>%EcEL+X6*X?ztKOkO=!t-ln z{u&c-c;Z^)oJ+L<>4+PPuKlvV&DN%QzSjX7)={YzQVkPW+m~)KWdc}+yLoAN&bGBF zYyxUrxwgHu0rhLUq2NIq;^sye{JnyiD=`B+1HsFTe)~UGPz!Bj7IZ|JN$6?Evs$TI zGOVJ7kLrud=U1HcsjzNPZ=rN&s4lOb%mKM}WhIA()P3t|lMAoeWg93-p9jAH9q>5& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..07146e9fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2012 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Eduki Motak" + +msgid "python model class name" +msgstr "python model class izena" + +msgid "content type" +msgstr "eduki mota" + +msgid "content types" +msgstr "eduki motak" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s eduki motak ez dauka lotutako eredurik" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "%(ct_id)s eduki motako %(obj_id)s objekturik ez da existitzen" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s objektuek ez daukate get_absolute_url() metodorik" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c11cd46a30b88618faa3212ed3bcc9362619b7ee GIT binary patch literal 1130 zcmah{&ubGw6kfGfiF#0kf_Qibg#?)-jTGbd2cm7E&|oOhlMp7mlg*ahnXohI5Aaa1 zO?t?|iw8jjPpL%-)uMRuZ2yDZ7CiJX@lCQO6)O&W`@J_a-}l~Q=jXMNR|c+&h?|IK zh)ak!2)%wFrVs~+D~QoEhLK0Ujy!=}K)#Ip0$HEGL>@zai|ix5AhiD0Im5VtOpzCn zpCcEL50I}SkB#)tQ^>b5pG8LLU|oo#QRK4-JT}fFbl+%!qNJtDocb&!K~$ERr6kyb zA8))?P@^jhC^$@&X+;XJp;);Qc*zv_Ox1*KJQ7?nuAsDDXL67!%%JD%+5=bIK>KoU z#}-WXE3h?Js{aUUR00=3r4*J+6|=z?HuDTCF0RY{kw~Myj_vXOJ+M5Kf*#Q*20~9r z7HsmA1=1DV1bdlsMB?yqOeey8%{Nz&L-l&L-gM< zL9sQJse9DrlVD*hlBww@rFoJc-qW?JEFg2-61K}76Y>>T4cauJN)tt|5m1lJi@=vA z@Om$m)456Lhto+8GccZ-Oc>$*Q9FFse+lsmi?+huuzT8z3irYeM9r`pb};N3Q8U^O zza4M1qgL2CY6B`ihP$}e8Tt+$6ly-9INFM~@!L9a8I{AAi0TiB?%#F(r3iPlTkEKO z*wk0L(PqDuJse{v{Hl%iakmB7!RK%{?)rpVymRUtDDFgC5PjDJ>e-?ux*xueHnm$^ G&-eveh@Wo& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..f4bea1784 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2012 +# Jannis Leidel , 2011 +# rahim agh , 2020 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-27 09:31+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Content Types" +msgstr "نوع‌های محتوا" + +msgid "python model class name" +msgstr "نام پایتونی کلاس مدل" + +msgid "content type" +msgstr "نوع محتوا" + +msgid "content types" +msgstr "نوع‌های محتوا" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "نوع محتوای %(ct_id)s به هیچ مدلی مرتبط نشده است" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "شیء %(obj_id)s از نمونه محتوای %(ct_id)s وجود ندارد" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "شیء %(ct_name)s متد get_absolute_url() را ندارد" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af15679aa6ec46484a83d3ed30fb0366a3ad5329 GIT binary patch literal 1036 zcmaiy&1w`u5XVQ2AFPTXf(RbUgRqNq_Cu6p;vW1+An0OzNVqC&3*QMt;g|CK zcgcO>Ejj-yl+f9_Sne(e&x+PzB zag}wK|}QjJAuJPhwQ?=@sqUTDv% zn``ThW|xQXSm&1Dx${FbTCQy}(g~_A>NJEEvX=Y+ssrXMtk<`M=q^T zyE=d=!|Q#j*D9UW&hlaZ&G|;9{0CM1LkNsJT+fUqy9Cid=N`HJy1Swl4*iN+eazLe zja*DN31MM_c-CeJeX6XPQLc?zae3-Pu-U})?bZ@Zx9zHhJ8fvzmMTZ5NEK5wWF%uW zAb~S@$^, 2011 +# Klaus Dahlén , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-12-09 06:31+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Sisältötyypit" + +msgid "python model class name" +msgstr "mallin python-luokan nimi" + +msgid "content type" +msgstr "sisältötyyppi" + +msgid "content types" +msgstr "sisältötyypit" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Sisältötyypin %(ct_id)s objektiin ei ole liitetty mallia" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Sisältötyypin %(ct_id)s objektia %(obj_id)s ei ole olemassa" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s-objekteilla ei ole get_absolute_url()-metodia" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2de1e4ac0c812c688de6b6516bd14288487ba19e GIT binary patch literal 1078 zcmaiy&1w`u5XajXql}85;Kf5JNOqClkHErak_~E1Adtl+te%9WccylB!c6zj-IHuQ z3BG_A4}y3$cku=GqA%gWNAL-(o>@1Eh&KHBP0e(5RZsoD-&}mhXk8-RCA}nFCVe2e z^_8?v`bN4+S~|yAn|PbpB6f*ah;NAQ`&;52;z!~>=?m#G#rMuLc7qrYH;6g0L;Os< zM*K;^|`pky7XD;_PXOxIm)M>;lR4O{t7Ms04N(MT%7eYPgSqH4rNKPIl5h3rRNPXDWD1$Ln z#@1$jy?%IjShMcDc!ZN$pwfET=x-#m?D|O8t6q1fyLED-rwf!lYOq%2sPi5feK?8`OqH5cHX5ABklE)T#JNnE1eo2WLAWxv$6)| zW2Yiv1De$}kL_aVC$iINi@CAW+#sW&((g&9$IeLj7mu;RRBlr_=-jZ~W#>?P#!5L9 zc01X2%6YC>;V^Xd=IQ@PSQhinR5<;Vko^nWO^?|hSw&pjVb&g#Ds|l^qI4Y9EL|Ap J&WP?X_6ve#LKy%6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..2f355d129 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014,2019 +# Claude Paroz , 2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 15:50+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Content Types" +msgstr "Types de contenus" + +msgid "python model class name" +msgstr "nom de la classe python du modèle" + +msgid "content type" +msgstr "type de contenu" + +msgid "content types" +msgstr "types de contenu" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "L'objet type de contenu %(ct_id)s n'a pas de modèle associé" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "L'objet %(obj_id)s du type de contenu %(ct_id)s n’existe pas" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Les objets %(ct_name)s n’ont pas de méthode get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e549c360 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "content types" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b0363a86851977e2bdbbc9640c086784b167ea8 GIT binary patch literal 1097 zcmah|O>Yx15M7`^72rTGNWft(h(yTwq95tD0o2k;K`m5O;Di)8yY8;rU3;~5`f)32Ux6jWFRnlXeh+SePr=LJpWxfz*_qM$ zUGP1`3=F9U@~#5c0cY0$ND8}*uj{+82j#%_6i-FPknZn`z#0m*dT1%;hk`go!uELI z=wx6;Z;&VD3Z=rvI`r1HvO-zvo@ByIB8!NMsxq9^L;}ToMJCk3xccH)8v7qv%nd0` z+!!55Zbe9`4n^VxWi$|q-MjPZ#}BRN?Y7m*3G#x z3AZ};X=`vGXf5GNoY1Ou3vy2!KTDAA7ujl{tAm3lP^xIaBf+|Yr#^LZX<{nJ)@FXK zc64-9ors}GYom7036%Chq>qR$%O3_*sjLW1dtrq}Zo917?FK!i zI$^opZo+LicXbI~v+x>j{W0A6%1X(5IXp|;YsG(?G#-sc>3l$CU-BTfe0b)qOC^S1 z66z==kmE8Rl?ujrInL)7hjFaGIF4K?C!{_~ppsH#cnUwEL`Xwi(LXABc6g>UPSeB2 Yna(7IzA|jG!*A2dTm~urEvZuPH(Jz0ApigX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..864119019 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-06-22 21:48+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Content Types" +msgstr "Cineál Inneachair" + +msgid "python model class name" +msgstr "píotón samhail aicme ainm" + +msgid "content type" +msgstr "tíopa inneachar " + +msgid "content types" +msgstr "tíopaI inneachair" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Ní bhaineann samhail leis an cineál inneachar %(ct_id)s" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Níl cineál inneachar %(ct_id)s oibiacht %(obj_id)s ann" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Níl modh get_absolute_url() ag %(ct_name)s oibiachtaí" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..05d9bafebac6e5c64a4f698bbceeb574c22f36c9 GIT binary patch literal 1154 zcmah{&2AGh5MH4CXn_L=i31$wLX`;IWVci*+Xe)oMU@&TZQz6yIo|26t6e)ddz11=nR0WRx37C^MrQ< zx4saT310~p31?1t-Xif8;sxRk@de^n#4i4t_$u*x;2$7Lr?xA=fcxo){H(<$f`YH#ng7RCNwSMycSg=xr3*-H@%t>^T-j zY864e!&RdFO&sXLvW`h)%pR19VO<@8zwv}^;;wW@*+VKGLD&rLupnf?JOp915Zr9i z^4GbstXptpGH!Jd!J|^O(+stskV;CPAnPK}DZnw4;udTPZLKsZ)KY5)QKPZ9w>M{< zg51XaIid4L)!LY{kxnCt8+E_4)>%2eL@?L%N1wsmXGCCe-!=vrmud+_$_s|72hlk)e zsKY&ILIlnmj=iDt21760g%DEqLbG9! ngba&NNCQ-HqWw=n@Aq0b_WaQ}wVw~?7q~3kv$)#TaC<)is3cYh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..825730b2e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-13 12:51+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Content Types" +msgstr "Seòrsaichean susbainte" + +msgid "python model class name" +msgstr "ainm clas air modail python" + +msgid "content type" +msgstr "seòrsa susbainte" + +msgid "content types" +msgstr "seòrsaichean susbainte" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"Chan eil modail co-cheangailte ris an oibseact le seòrsa susbaint %(ct_id)s" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Chan eil an oibseact %(obj_id)s le seòrsa susbaint %(ct_id)s ann" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Chan eil am modh get_absolute_url() aig na h-oibseactan %(ct_name)s" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e26ac693b78c2fbd7f04c73b98f7b7dfb58c8346 GIT binary patch literal 1072 zcmah|O>fjN5H(OhT0X^v3y0|ev8&?Uq@}c^EGm>16}9TB3S3ui;$~eX_A2(aTZx~* z5yWpmoVdZc|AT+PjVlt*N!u+5fu)z1iRO)G;^%L-rrtBG%fKBV2Ce{a0l&Tg5%3jw z2>bx%fthoRT?Gs9HLwQX2EPG+0Nw%1i0@xutP3u{Pr;wSH^AS)H^D!_)8Ok zGQ6@&fL|ADs-EZZ^nF(AZZmOxEehGPWOnvs;w+^`-*Yq&`;r7@()GoTHTlTN{;15G zEh?lNn3Sy;?WA_(4u_JeIx0P_f)6OyufC*4T3=C)m39A-4TL3aNLXtUC7evDFsaO0 za%QvN0?USnXh+w1l;n_-ABgoz>kl<5YF=;0R>#8l8m zhK5o}-Yg2*i79>U%6{^U8kzrAz}{6W-htke-jb, 2013 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "nome en Python da clase do modelo" + +msgid "content type" +msgstr "tipo de contido" + +msgid "content types" +msgstr "tipos de contido" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "O obxecto de tipo de contido %(ct_id)s non ten un modelo asociado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "O obxecto %(obj_id)s con tipo de contido %(ct_id)s non existe" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Os obxectos %(ct_name)s non teñen un método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0bcdcd3bad8cb662d45d0f6d4aab482fa9d00185 GIT binary patch literal 1219 zcmah{&ubGw6dtwyAS$8=UOc=@OM-5*NfpAjsiL-6HCSr&B$P>Znrz+O2|JUfy%juo zld3Hk`%6KP_7Cvr+1|yydFa8v!*8-_+G@cGAK$!rZ{GJ!_Wiolx5BW_09S$Mz*%4o zFzY)o0_*_ifm6pAD}XP9Z-PtUbKsX?lV1W~0dIhJfUm$4#ET~wy9oXP9s~adKLB6v zW9$OB1vdFt;0(A8#?{_B-QAr69|w?TCjsLdtr+W1SM_wr1CdcAE3=}i6}d9pU2JQr z^EpABYC=!*ijsa)i|J)D?lf!4Dock_laH+_G3S|5>mI}%%G-I{vI~}-r`(V; zWM8wfQjfUORypFK^0}6gLnYxw^f2=3!uMz-c#-UG*8=YOgH;)f;!0R+@|v*9f(H)W z7nMk~C|%dO;bgO|R%=k3e%_3jHy5&r(LM6Jx3hJT&7?{brLp}dSEX zyv{a!?uEltt@B6;U3^*|w+j1pMr%ey)>v4Tt{2uEDpWk(bLmiBq$d4l#C>aAMuBoD zY;;0ZyfIA4wwMm7Sfm^c3{Xh@*dVeqbc<|qC`so3P3Af|l-r&9!v#q+ilph2N1vhL z6pNSQmH18E#_vn~K5i%T)}3P{+wsSEo#Itgt>M=;!A87|@Ljxp#6<5dzGm?!q~D@f zr*1Xg?4I=E14DgS|KMA={$AI}8HrXGDKduA- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..43bd82eea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2012,2014,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-08-02 13:30+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Content Types" +msgstr "סוגי תוכן" + +msgid "python model class name" +msgstr "שם ה־class של מודל פייתון" + +msgid "content type" +msgstr "סוג תוכן" + +msgid "content types" +msgstr "סוגי תוכן" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "לא משוייך מודל לאובייקט מסוג התוכן %(ct_id)s" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "סוג תוכן %(ct_id)s אובייקט %(obj_id)s אינו קיים" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "אובייקטי %(ct_name)s אינם כוללים מתודת get_absolute_url()‎" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4af5d95db5c37757e1b5cbdf393834e199b2f0c6 GIT binary patch literal 1321 zcmbtS%W4!s6m8!y>c)*57uSWDA=XT{Xc9X{#79su7-V!Op)y^WDe0*ix@t@W7wRSv zBO)q-2qM&|h^Po+1kpc{`UY|3%F{j3Jczik;Pk0meeb!Cs&6|sJ`Aw70K0%1uoajG z^0ffOz$ah;_yHUQ`qu@)HZTWo2P^PS@HOy*MO=bi-Vg*CcozHs{1dzne0O6{=QB9h z{SHQ0fZqYO!Db*|n|f4y*W;VlS*$&MbvvPWOOy@i$;+Z{4JBIbwbbNS1aWEzJHaQ7 zPCHgibh5OsOf6xXIth+zWreb2ueJphIx_jAf&<7+6eo!mCRY?Q(%655HMt?Bi5sKq zl3S5bOD7@?>dTU?Figi7W7;1^2U!@gXpo{P4hQ?gC=B7q&WkHD*Ie=& zWZ@we9inI;J`nbYSf#VvSXRrpGAXw@i|GtkN*X#VB$}ebs0QZIv@k1DP3a?uQH>67 z2v!rk71JrH5=nhcYuj zyfaqAoyBCujIFj)F4ZvAn>;hZj$EjXvY{ovJlB-S*hy8_iByf4h9;%`Q)Em{SsG6} z8Bf`$&RQlW)hZ5mWSuta1JYIVie{*)2^xI-wH;`ua1QCU!Iq$kfF)!h=qAWCk QR^Au!3;2o4%I_uk1*@1NBme*a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..aabdaf455 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "पैथॉन मॉडल क्लास नाम" + +msgid "content type" +msgstr "विषय-सूची प्रकार" + +msgid "content types" +msgstr "विषय-सूचियाँ प्रकार" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "सामग्री प्रकार के %(ct_id)s ऑब्जेक्ट कोई संबद्ध मॉडल नहीं है।" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "सामग्री प्रकार %(ct_id)s वस्तु %(obj_id)s मौजूद नहीं है." + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s वस्तुओं की get_absolute_url() विधि नहीं है." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1fa258e5ea20dde45993988064ac261dbff4d6c5 GIT binary patch literal 1167 zcmah{&1w`u5FR!DuqsF{f(Vv}#9cyXdt!bknJBIa1YBIg>PcKWGo9Jqo#`IBdo~FK zd;zasLK2gog;XYZc8`4U#oZn8;0Qt<89Rb5|I^-lesocQFS-9kJ>yhGeZd_g$- zfd~*k5qA+2S3GYKc@lX6c?K{#d0tB^_d2o_leb(Op=1DY zkI6(;wt23!B~6ovn7k+wL)t2UO6zr-G&E-xbID8W9>5&+7YOx zx?Za^x0)N{zrvrTmC*+!?t=zk`M#~^DHC!PqAt^h+we_$lPr((T(4cO$%c$nEMyYE z@{X{la|Y1Wl~!74mXb}SGZTQ!OV@-?S7CSz<&;mu(1+=1a7X$$^nG{+6fhh8^>FUw zYAu|1$7-3j=2JL497-^U)==Z4W^T3OU0mwE6(D)Wdc}X%S;d9d7P%S-Ff7)`N36$O zVC-F3>Ar=tJ1sfn%2?GCm#N$skZTd^;`oS5FT(> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..8acf7e8ca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bojan Mihelač , 2012 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Content Types" +msgstr "Tipovi sadržaja" + +msgid "python model class name" +msgstr "ime klase (class) python modela" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "content types" +msgstr "tipovi sadržaja" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Tip sadržaja %(ct_id)s objekt nema pridruženi model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Tip sadržaja %(ct_id)s objekt %(obj_id)s ne postoji" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s objekti nemaju get_absolute_url() metodu" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..349357fd780db716738dd987a78d8e9042a42df7 GIT binary patch literal 1106 zcmah{O=}ZD7#_7&i5~|kc=7Ne6cS{TY;2*~HY#ch1w%_s?L~-_-M86EcW0KJ*`_Hy z2>t;tJqY5-i+{l1pnswVe~IsOH)#dYfrn?FeLshN&hE{fGCDU24+w7ww+NpJ?))IE z5q=Wx5azEiwnDr>yiD9BzD@jr*u_5*-zWY;{EhIPutfUZHOB4|pAxr;zY@FpGh$b_ zFjvGM5(8QwzoxtAXt+kzmb$9*i)s212cVz5iq(5{C!^ zhG_d@V04^Y?B`irtwDk|(jj}Hl|^NtH%ZaVlqCh{ePuZ7N*}0w|NKj+(G(N#NE-W} z!bliU8iX-AkiudJi4HMlK{?!w`$HI(PG~(<z` z3aXK{so!Xf$K$$nedRtL)dQV0iiM{XmrWXx88m8@?q+xW;%#2NSt8`)5A39{QE5*l6EPCb zdpgYj;!3us2S!ACj6j~4lszsRZ#+$iv`Z0}T&hNh2Zr33k8oP~uXNf4j>jW$EYzel fyGlBPw@-7MH|lcq%G literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..a0f3feb5c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-21 19:25+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Content Types" +msgstr "Wobsahowe typy" + +msgid "python model class name" +msgstr "klasowe mjeno pythonoweho modela" + +msgid "content type" +msgstr "wobsahowy typ" + +msgid "content types" +msgstr "wobsahowe typy" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekt wobsahoweho typa %(ct_id)s nima zwjazany model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Objekt %(obj_id)s wobsahoweho typa %(ct_id)s njeeksistuje" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objekty %(ct_name)s nimaja metodu get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ece0a5ebe67783a83dfe2966fb8f9e3b51a195fa GIT binary patch literal 1102 zcmah{OKTKC5NNG>C8;Fr+b*L*(B>l z@GN-oAc&A-4mk-Pybg%|2@n1fYj!r9jUpC&d|lQ3)nlf9-k5vO$SxA@5MB~45k3-f z`%YLU{2*K*%%5SbMSPR^K5>WmGVvSY{Qe#BE#gnaNcck7Ab;T;W7mma5$F21#B0Rg zh_4Y}oh$Bv_%``XVv^vdwn^G`#uk2z^i%3>1nEsA*(Sm36uh$^RT!BbpU_AE3Xp|bEyB|wC^^iOm=MBASRtix1-ZzuuHWQOi$k#poLMApe z+5vAzXy25!WNZ@T9qWf4f1LW3cZ~z3%?-XKhhhGdKc(UhH0zB;-e~Yf3+jtbb8(?g zR(d8Z@@^uuRRT@oz`Dhu(6B0!0rkI3W0G6l9=i|yNQA2Dn&<%uwVw)K@~#w-18b@F zMG}&-93aL{t+uef zc5?}eW4o;3ZW|hvrP5y;Ho!D81CUfYJJg^_DmPh`!Q4H!l0^rMAktB0-@{ z1ehJgsWk)ks6497EL;)KzRs>(zS?1;bACmtDzQ9x3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..7c4a8000a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016 +# Attila Nagy <>, 2012 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-18 09:29+0000\n" +"Last-Translator: Istvan Farkas \n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tartalom típusok" + +msgid "python model class name" +msgstr "python modell osztály neve" + +msgid "content type" +msgstr "tartalom típusa" + +msgid "content types" +msgstr "tartalom típusok" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "A %(ct_id)s tartalomtípus-objektumhoz nincsenek modellek hozzárendelve" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "A(z) %(ct_id)s típusú %(obj_id)s objektum nem létezik" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "" +"%(ct_name)s objektumok esetén nincs beállítva a get_absolute_url() metódus." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a62ddff29d9be1e546b6d064d40fb48761b583bd GIT binary patch literal 1290 zcmb7D&ubGw6dtwyAnL`77Y|QFY?Vo}g=*PaQLAFnYAMl^P^Q^2S>4Qpo!PcISp+ZQ zRS)W=+JaJ15i7Nzf+zh0rbiF{C4Q5nNh^Z-;M;HC%zNK^Z+7;_zMh8+whK4_+yHh1 zPXTY=fDrf&>;-zZFm@cg4?F-K1@8gh0sH+2;Qipo;3vR4;1c{R+Za3I*TEI=SMY7{ z(H_PQfggeW{%V_lf|1HVY&)HBWl;oh>HRH7#P4C$#`vTO}SS{<=e z71NRgRivF1Q${D5m6KVT^!8Cr+NzG&h*nlAOQl9#nvQ4TQByUJI+|F3_+)b>($aW+ zIU5`Mm$a%dq%;X*bU7AQMpV<0Ojx;H+85j87*=nfIn|1za)MOy-#IMWL z#9Dtuz&Da5th3wjOC?ND3b`Q(~u^zDXHk9NHg2Wl%A%O zX|>~=u8BCwr`ajwsY)g)l9!~Yg>)vZNfir4y;W=LVWBWHGn2PoHohrm^JQHtv<6$J zq@7==HVS>YvC*;f-6II{#a#PCa{nPivU1iI>WPTe5S7u6k#_i6=>i|@#`#(|Wy;U1 zvW{X^32AUDww*phsy1@tNtTL)U(jjIgrw?C*9`X$QR{WMSJA;?3i^g}Y~v+dyXT&{ zWw+?wxG(O5TU?uSFUWm#D{FVX>puMHM!NUddFfW%0(1A>JaSs$^HA|`FQGV(R7ftl zRWJH4aT~7jhWopzLA3T9WtTfunsvMVF8ybn-^JJGULv=&Hb?F)=KMmKY93>J#`85{ kcFc|SR}5=^oBdy6n&;F0kGkp(JuIN&C;x)OY#lNC1-LT@6951J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..63b9e935e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-11-01 20:28+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Պարունակության տիպեր" + +msgid "python model class name" +msgstr "python մոդելի դասի անուն" + +msgid "content type" +msgstr "պարունակության տիպ" + +msgid "content types" +msgstr "պարունակության տիպեր" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Պարունակության տիպ %(ct_id)s օբյեկտը չունի իր հետ կապված մոդել" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Պարունակության տիպ %(ct_id)s %(obj_id)s օբյեկտը գոյություն չունի" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s օբյեկտները չունեն get_absolute_url() մեթոդ" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0fad7f2a789ae3fe0cd927f0ba6b5e14e98f775f GIT binary patch literal 1079 zcmah|&2H2%5H?Ui3Lrr*TsRC8h+VC`NhPSKz_}@Htt!Ekf!@U%q%UGah@s{9Ii4!eF<7M?ebP0X_lVz5@yH16Tom z1Is|?8e@0C0(=jw!4JV7!C!&Tz&h694aQ!96?hZ;4SXN`3;Y1g78rX1S_C77!R=k_ z7U1n>L-q4Ip1#l8p0+YK)S{GaOXlE6X3kP>^fO0eaV$yDNV=gou%?(gIh!Xj=$ps)XJNt(B!6scQVFB zZ)tkmr?}k<*j}wPV;kAb, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "nomine del classe del modello Python" + +msgid "content type" +msgstr "typo de contento" + +msgid "content types" +msgstr "typos de contento" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Le objecto del typo de contento %(ct_id)s non ha un modello associate" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Le objecto %(obj_id)s del typo de contento %(ct_id)s non existe" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Objectos %(ct_name)s non ha un methodo get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea0373efda47a1618c9a0da8b5b24f0fd7a220fc GIT binary patch literal 1031 zcmah{-D(p-6dtu!S@lK)Z@f5O2njOTZHf}MjfmPn)nKU6t3sIUoNlJsoe4XWrnwV* z0dKr0h>zhj=o5J7g+73<;F;Yur6M};@y*#izjMBC*Vo=NI+qEz2>XO9gbxINJ`=VH zUkKL->*pBj5Z@raN8BgAO8l1C|9?k(llUX?A>k7tCj0h<%5R@IBwG=8iBE`qy{|R@ zAolS;i79k-F4ebn;`4+x!bO7bn_L;Y(@5M%iyWI4%=i!!XF(eM{mqGki8w+KkfIxj zu{GJ;;b>lDjV9#iCPuQyMmy9FhRYe+mF38SGOv=Wtn`7>kIFC7psgz4v9j(zffHdt z8xYo-L|6_24EwId$2d2}D5cD%WHH=+|f7uNA%A+*he zGerzNESB&Roe~S7VLQcqjM)Om57S(ztd*Gj0R`!FE>h$}6nPB0njRjlBLBw3xmg^B zi^Zbld{%XU$37^m+Wk#gogq{*YzF<^{?6%O8?7j)7sUO7VsLou!dWJi-hyNz3X87$ zYS`nQQ$Jtp01LjO6C;&QW9W>PTXh;l)C$~ h11}?3(i76l6jPxbbEnZ~?lgjcDUy, 2020 +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2011-2012 +# rodin , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-06 02:33+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "Jenis Konten" + +msgid "python model class name" +msgstr "nama kelas model python" + +msgid "content type" +msgstr "tipe konten" + +msgid "content types" +msgstr "tipe konten" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Tipe konten objek %(ct_id)s tidak memiliki model yang terkait" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Jenis isi %(ct_id)s object %(obj_id)s tidak ada" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "objek %(ct_name)s tidak memiliki metode get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b6b12376c368602dfd8ee34ad1e986fec85fcf8 GIT binary patch literal 1051 zcmah{%W4!s6fHF>w2y@wH!iLV$qb=px&tvu#gSl4Ad+ARt=pl}Rq3frcipC|CJ*ov zT#2sz4gDGM58SvGZ*`BE2?)7x>h!I?PwM=5wD5(I-6cFBq=b8fkAz^~2!imP@SO0Q zutHe6!PtFbN&JA=5UgDnXpd&;w{DoA&z*H_$%>4;-6FgMI8G6A*K{Y#1;s5 z2*GZ*)SNfz40AU2tdsenm8I@Fz@rnLc?SyZqKA<@)gU3)ekhL|789?Ble*}1q11ka zify6w+IsL8m4>E{QI}Qdg31k>8-?11iu&9*e@)s*IBVeR?8%Z=i%Cb{D&3WyHgrhKc` z(o-ydP2B}7$H@wh6P~O>l8AV9DNf>;0{NjnHKFD#Zk5ODd^v_V5i4s;F, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "klaso nomo dil python modelo" + +msgid "content type" +msgstr "kontenajo tipo" + +msgid "content types" +msgstr "kontenajo tipi" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "La objekto kun kontenajo tipo %(ct_id)s ne havas relatita modelo" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "La objekto %(obj_id)s kun kontenajo tipo %(ct_id)s ne existas" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "La objekti %(ct_name)s ne havas get_absolute_url() metodo" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..97eb95ca1197aa6afb263bd6e15e5ae72a88153d GIT binary patch literal 1049 zcmah{&1(}u99^|mUG*Y@2p)bO3JEgFrc!LTjfmPx!CCo&&eQSHQ2q{`*_-4e&?s8{i07fL=Nm1ed_u;CtW$@Llj{uv3bx}IeDNRwSQct*Cr@Cf#I4nd1zXXkXJbx=~#WPgyR9sic9^x}3z;mi)_X1h?_QA*LD}2FqOqzYLDD z;EC5Hm6ACxQhUN~z9Kg#?Iz5qw3EfZ@, 2012 +# Jannis Leidel , 2011 +# Thordur Sigurdsson , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-20 05:05+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Content Types" +msgstr "Efnistög" + +msgid "python model class name" +msgstr "python eininga klasa nafn" + +msgid "content type" +msgstr "efnistag" + +msgid "content types" +msgstr "efnistög" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Gerð innihalds %(ct_id)s hefur ekkert tengt módel" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Gerð innihalds %(ct_id)s hlutar %(obj_id)s er ekki til" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s hlutir hafa ekki get_absolute_url () aðferð" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dcdb640489e4c53b0c3769e346c25e63bffb45de GIT binary patch literal 1075 zcmah{%W4!s6s>5CGCmd}xN&g>#Tle#IupdPlL=x>LLh@f7+ncNrMuEyp}Ou+Rh`F9 z@CV$u5X5hAdc^mLpAip;ZxMea4*x$9-zWY?YzaRI>!e#(tGJvvCS4M55Pz@l|JJ;) z$k-#gze7x^vva-vS|Ywepx^8oA(&}al3h8r9*#;Ufjfc_cM7o*sq+nWCrL(GZLFLEOn-rz1I>-~{{3VIG za9|LGbC@XMWeNqRQnRFP9@2`v}IwhK{6q)2BDT)|&ywFM*Xy)Ee;!fxI z__*yuS#=;!LPn>W_l$I%-ci2OY7BM;o98cEZbyxJLp*FK1}{&1XQG8NtB~ZvI_djw zM_asi9v6BYNXs`(f~hiD4848jXJf`dVyH_iG~Ys7xERc2DqX+33e{)7Y2aZWmRqY0 zwyhOlMi%m_@VBQLI&I>)HBZtkW mUJ{=R5IPAn1(VV4&U}X#Ja$nSEF^?*QMqj@W)+50H?n`dr#_7U literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..8984cb0d4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2020 +# Nicola Larosa , 2012 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-23 09:00+0000\n" +"Last-Translator: Mirco Grillo \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Content Type" + +msgid "python model class name" +msgstr "nome della classe del modello Python" + +msgid "content type" +msgstr "content type" + +msgid "content types" +msgstr "content type" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "L'oggetto con content type %(ct_id)s non ha alcun modello associato" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "L'oggetto %(obj_id)s con content type %(ct_id)s non esiste" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Gli oggetti %(ct_name)s non hanno un metodo get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a0ce28217a7eff9e0f92fe1be30ea5128345cbd GIT binary patch literal 1211 zcmb`F-%Aux6vwABi>+QFs0SbJOQgiOqfyDI5tV|`)*@RF1j}{iIy>v^y~EtQ{&;g{ z>=zhVks6tiMn5SZf+(VTt$(72P6qx3y>@1ITNMmny6ks9bAO!gId|rK-`j9c!?6?9 zgt~&-g_=Vp<14BQ^$oQL)wo5|I*|L2N0AxiZe)y1_NS2hk@H9&^$wMI9@?g92aprU z%gBdFh5TJx_Zq7ESCLJ)K99uE`q)u>YD8{D;kLFNmDG(Ens%_+Qh82GtVI$rP-K>p z#1{O=_R)h2-jDhU^aN+~RtDrS?Cu$iY>wd6^|TR&BHq@EKdNo6nS{cPAxj_PMHxk=iM zc0)JXb>lc`J7yY34jVX9=crVAE}&d`REfYOIXYAxqvSm4Qgn#BoQq+q&?R7!(ZDL4 zbV}6qS}jpJfx+AC5!2UazgyNYy@*o_r>gC^o9nzDHf&Nvr}5BvaiNbG>@U>bWG>APe*!ZVB7v zj!8NOTve~rBt@FadgXw6danpd(j?rkOl5alC#gPm8=a|j-38$rh+aZG4bgjuo, 2011 +# Shinya Okano , 2012,2014 +# Takuya N , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-07 16:03+0000\n" +"Last-Translator: Takuya N \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "コンテンツタイプ" + +msgid "python model class name" +msgstr "Python モデルクラス名" + +msgid "content type" +msgstr "コンテンツタイプ" + +msgid "content types" +msgstr "コンテンツタイプ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" +"コンテンツタイプ %(ct_id)s のオブジェクトは、関連付けられたモデルを持っていま" +"せん" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "コンテンツタイプ %(ct_id)s のオブジェクト %(obj_id)s は存在しません" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "" +"%(ct_name)s のオブジェクトは get_absolute_url() メソッドを持っていません" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..55454596ee3e5205795c5820bea067035b54fe8c GIT binary patch literal 1429 zcmb_b%T5$Q6m1nB8FjpsrCRn_~wJ#Q?m3y?m@W5`9w zHpHx-5Et?bav9Qd%Cc?(dx3+%8Q>-06QJ=w1zrJe0iQv>L+Y@{&sbIg_zk!M+z0Le z7kVr!5Bv=@{=T!Q3A_(Ps)cO}s&yV>);S1L({&nO(|5YA<~>~&tj_xtk(DLxX+?Y~ zu4z(ZE1WP=<+{u&N`_6%%grdv_meu;HR)TEQfMwTDXllS>R1{UNvj5arzSQ~yqxa% zk}Ff6uLVl~Bdx|15t1;aq!%#FeNvY`4=t}vZOD!o%4)2mIg!N?FGMOa<5_c&G}F-; zpFZM|3Z!s}zr;jU=H_`rMw-s5YT(m}W>wLWbV+XRVTn#goN2_;yI^<8b=w)FwnLpE z;yA87G+;ZnjX*ljR{~SB8#hGl5$cQ(=caqZ9mC-LVb{+KG**(FK*Jc&O5UZxt1y(HdFW1(-t@h%PCOpCmN!_)NcQ$KEu*5Q}mnZ=9*>I1@T`rZFX`}cFh$mjs{ApVlhj&5-B zIPgzNyk*WXJyy7Jpm3P26L)vgz>Kif{$Xj_hv^&ld4xE-BitXl$l7jS8wP;=wcFtz D@Uu*c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..e2f139688 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013,2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: André Bouatchidzé \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Content Types" +msgstr "კონტენტის ტიპები" + +msgid "python model class name" +msgstr "python-ის მოდელის კლასის სახელი" + +msgid "content type" +msgstr "კონტენტის ტიპი" + +msgid "content types" +msgstr "კონტენტის ტიპები" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "კონტენტის ტიპის %(ct_id)s ობიექტს არ გააჩნია ასოცირებული მოდელი" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "კონტენტის ტიპის %(ct_id)s ობიექტი %(obj_id)s არ არსებობს" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s ობიექტებს არ გააჩნიათ მეთოდი get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..889b0a0f7783b4b838da4c0444c2fcf8752362dc GIT binary patch literal 627 zcmZvY&u-K(5XKFZO9VnfLLA^QJs`D0-Xs-**4st=Yo$V0tg66?i%GoMY!W-fUbf|c z=w8c}z5v`?gb)b2@Cwd80MEi?w@?m@^wT$=#~zRU>*Cxyf-#3&MOKls$TOsl0y&4g zK+Yqtk;}+iq<@N#52%-r3#SRWf_e?rN4<-RWr9M^Aa(y~gi0DA4VaxmkbjLP#g6GI z3Au_y24Tjv2FY_lI;HB1(9n&DJ{6@-lw=U~xr~*wB??s<+SYLr(R+hf(?BtBI*;j= zc$w5&=>u*AgC)2ygGc-oPkXS?Gp1m!I~)!hrf!&Y#daf9xjUQmk7UQE-86L< zo%Tk1?c_~zJ~_*Jq(Q4Hg1veL^dJp@lp%ZdJ?SD<&%B&U0qSqH5sZXkuihi z=ZX0{C4)3|I@zG)8C_Rpt{KQ;YISR=3A41dAm>~DV$&h^$R64+_Gt3aj-eV&4yrfR v{{L3(cl&u(`)R*cBm2XS?YP>TyobpF);?AHV83B literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..af1c9f972 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nurlan Rakhimzhanov , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "питонның үлгі классның аты" + +msgid "content type" +msgstr "мазмұн түрі" + +msgid "content types" +msgstr "мазмұн түрлері" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6e6775c6ad7d19deef12e725d88ea0ff49092797 GIT binary patch literal 678 zcmb7?O>fjN5QYtuOH?jgxNxw6ty$H~4>sSfsJsf{B8n`Q~QI!P^wG{?d4W<)lP z6b^F9HQ^-3tCU?Nlo8g&jB(msp^Q>UBzy8f*7Tg`bqQT3Y#p;p`~qE}5W%jnjzmT% zn+vB6$Jd2YnZ>&@Ylhu`X~15|TieOhNMD8;l}m{nW2Nig zinhtxJg?bnBn{b8u}(6Ta=dmgbAN{9_@D@e`NW8vY->|kj#b%O+h;vITlQ%$K)!nC w>o>mo?5hvHe&nmyzWVB`m+i|}zIy9xcz*hiyk~9cM_)hj_0#WP{{0QmPo(VSYXATM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..674077a73 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "ឈ្មោះ python model class" + +msgid "content type" +msgstr "ប្រភេទអត្ថន័យ" + +msgid "content types" +msgstr "ប្រភេទអត្ថន័យ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..00951f1cb484efc17c0787377241d0280353a827 GIT binary patch literal 714 zcmaiwPiqu07{;U4%b*u8UIcS&DcQ+Lb=z!L#M(l27nd@6@)BpVv(wHb<0R|02L&(U zK@o)FSx_k=Dp^Fm=r@sk6yMCM>&+K_Jb98QZ~pu|vv7!@7JzfWI&c!W1Nf?dQ@}mo zH1H5O3p@p$A4BLh=y_n}I6{k{F=!9;0VpgZ5Of0Y{hLaZG(s9|4l05EH5ye1W~3x8 zRVoUc6kKa8c`4AKR=XlGWIH9dMXhrs8BTY(%v7)=DpecO*IAyDtK&?QSTP(7ZpLJz z7TiFVT;oPCe1S$635`h9#!Eq&$S6%Bhea;F0mE5Ore4v*M`J3 zm%89a)eK+fQsx@>MD8!U4z~e&rD$v`mqT?K_Q-6^GeKg(ONMVigr^)Yj*O{T7)~aW zmhm0)q1bOFstjju`Xj~f?ctsbmxBIwe{=r&s6~T~*+-HXK9XT0_Dxt7JeM7ujCieu z>E4RB$m%@j&l-xFY|2EXxy%?|y_=iA*JOB427_W;^MY)ty3`EIsl+5X literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..d4bde118f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "ಪೈಥಾನ್ ಮಾಡೆಲ್ ಕ್ಲಾಸಿನ ಹೆಸರು" + +msgid "content type" +msgstr "ಒಳವಿಷಯದ ಬಗೆ" + +msgid "content types" +msgstr "ಒಳವಿಷಯದ ಬಗೆಗಳು" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8f00ba127fc35c9909af595c4520861e575cde6 GIT binary patch literal 1089 zcmah{U279T6kWA`5EVrfAN1kA2njODMiA3&E7ICx(O@Z25ri<^oo=?>oe4XWe)tqA zEs`n}+G2$^R47=*hayo5;=BF{AAIa?{(^Y7NfS#&2M%ZM-Fwcx!`>g~I+is&ClHqr zPY@>&tBB})Lv$m)BTgfZ9n!Q6@_FRz$XVo5$TP^%_XXsO$W>$u@fp#N@uef0b{3f; z-$C|~dy&61^S_WUV0@+nYmu)YqqKF7H*d#~4_g zf+hIR@@oYJI>CT~%~YO_Na25z4 zPLjR>ddASxS9LtGdsHft^C_1uRl+ymF}gxufpT~x1au4M>9kB|ZrL7n+@vYIn<(LS ziQ0_h81)ReD}094@q$uCBbAz*oJ^|7&lzP?ks#F=bdTJoIyEj*iCA_p+uwdtI;qE+ zzlKD=#sI~pRI2Dwhj)QlpuS|P=Rt0OWZHF6uTkccer^iO;kE&p5l6MAG+ y5j5vT{Z6eMtZzc_elvKv9j?{(O?P0H1Bp1kIkC5f4HKw8s|D4Su(E-!v)XUBA%h42 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..8cef42826 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Le Tartuffe , 2014 +# Yang Chan Woo , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:01+0000\n" +"Last-Translator: Yang Chan Woo \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "콘텐츠 타입" + +msgid "python model class name" +msgstr "python 모델 클래스 명" + +msgid "content type" +msgstr "콘텐츠 타입" + +msgid "content types" +msgstr "콘텐츠 타입(들)" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "콘텐츠 타입 %(ct_id)s 객체는 관련 모델이 없습니다" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "콘텐츠 타입 %(ct_id)s객체%(obj_id)s는 존재하지 않습니다." + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s객체들은 get_absolute_url() 메소드가 없습니다." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f9cd08109cf6a7097d31342d21df01e093880a52 GIT binary patch literal 1182 zcmah{&rcIU6do0Sr0T_JJm}$FOhB^jf`Q-yhNzIBHV~|MF=?i|!*=O*r`eeW$_dKF zq!%w9Oo(?*Kq5aZ6t8-lg}Vp+M|{)P79-I~zI^j$=6&CLGxPmM*L#BF3gRx}4dN?^27`)@lYCR;d+koIC6!N;T9yOr;Hi4;OV2rQ#7}r-|ROHbHM0- z0Op`&n!P5D#0x5`KV@o>%A3Tz`j$CYG97yc!DvZ400!^s9TQ`G?q)Z;3O)$~kfAL%Y}W53l&lAI}d i)~Y%<*=V$>zF@r-lsc^l=z)HCNvnXCcvpBkRq_iBSIv?D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..9c6495aba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-23 06:00+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "Мазмун түрү" + +msgid "python model class name" +msgstr "питон модел класс ысымы" + +msgid "content type" +msgstr "мазмун түрү" + +msgid "content types" +msgstr "мазмун түрлөрү" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s мазмун түрүнүн өзүнө байланышкан модели жок." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "%(ct_id)sмазмун түрүнүн %(obj_id)sобектисинде жашабайт." + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)sобекттеринде get_absolute_url() ыкмасы жок" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..69819b76f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "content types" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8c7038264b5bba5e63194def88307e259d132853 GIT binary patch literal 1215 zcma)5%W4!s6fHGA7TrNjqKOoBHuy&hT*+85v6n61j@Fj_`2}fmXdh`(EEYF;Y+5mf~H}u%NehMdB=^T0L~o;rjwO zWWsInZL9OriLKJ)^#*i>>*$m$Y2}1+5FZu74wOR$Jy)3yJn;pZZ}r}!T3GKd4yAP$ zly$fTrGZdT1r=x2reIbmMS}{m> zxyp2HQxw`b+P0ZY>60?EG}a7i8_#08WCVAZOP6tX1`|OzMT3xrGZ2O>m>CPgAizYr zDfXrJJk6V-L5qeh2&dU(Fcx6c*12^wHeA`9J8c-Wxx)i4bD1Bd9Ok=TK2G~`Jki|+ zEKym>GeKj)yA0N)>y%tcuAts=u3*jP!NI|}^PX}?9QvYW|5PWGR}RhGH5;||T6^X6 z{NZ>|tNtSOf02O`hpt)VT&g)pI^0;{qUZ4{ojuL-d+i8AS5%@?sWJw$+tLj>Wstkt zMqV18(^YM{mVqjI(ngbW(0`2T3PvCdAc`P_(NU;$01JTM?D!b^>jBK;hiFgGY_I8aY1%dyY#`!j(q;n zC5gX(8AyF@0MO6=JpxLI>=oYrQt$GM3#Bki6vPWSJ&)Wr99(ttgq| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..8c8de9cd9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Matas Dailyda , 2015 +# Simonas Kazlauskas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Content Types" +msgstr "Turinio tipai" + +msgid "python model class name" +msgstr "python modelio klasės vardas" + +msgid "content type" +msgstr "turinio tipas" + +msgid "content types" +msgstr "turinio tipai" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Tūrinio tipo %(ct_id)s objektas neturi priskirto modelio" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Tūrinio tipo %(ct_id)s objektas %(obj_id)s neegzistuoja" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s objektai neturi get_absolute_url() metodo" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a5565f0dd2667bc95172e8f470595aa77555e74 GIT binary patch literal 1065 zcmah{PiqrF6d$!#UG*XbFM_X!mIRq(w?*1+yH?Z|3Qa9FdJ@89ceczHgW^`3i3;2d;bRcI`RkP*NBe@o40Xp*!LOoBKoh8ZT!Hk#A!B(i9{21YVQ#2)j3y5HeQ@O-r(rS2d{i0S}FaNXhTd-x=tz zk^_U7n-*(pl@x}ziae=QA?2o{B643z!=-`dQO5PyGw8vfuZYH7F@Wt`gGi*f9!}sr zq0N5^J4}OAz_eDOV1`GKs)#2f91XYQ{%|zOj&MCW%!4q&Qm{`XyScJ2q+1bv!gDQ@ z^dUN6GFHwW&s1(`L&qYb_lj84rt-nreMt9sDQqfzfWv)QaJ?1kdDLA3cggowZn=1z zZKe%v=1l5@8I}96QzXfj-ciPdHHo&+679P}wpFi|ly|T~#s!NxZE}|Su+2;f zLfB!s<|cUD+@#AVd3M%5&*_E?RU~BW!*W}g@tQs)rL&t9IZNoK%2Vxw%m%Iw7FS_t z1{FEyxk2E;{5)9Goeew>*1-i#huHv)b@0$xsIEGvwAVEPB-hLo`9DO5n~_KMo`DhB zq|N?PTo-jbAvwu;SEJVY#}oCZYgmdxDN$=Ewf?c`zZht!|Cy1&R)eW}!WNTK!!+ok O*tpfJW<|G1HTeZkx;j(< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..b91627e57 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# NullIsNot0 , 2019 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-07 07:19+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Content Types" +msgstr "Satura tipi" + +msgid "python model class name" +msgstr "python modeļa klases nosaukums" + +msgid "content type" +msgstr "satura tips" + +msgid "content types" +msgstr "satura tipi" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Satura tipa %(ct_id)s objektam nav asociētā modeļa" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Satura tipa %(ct_id)s objekts %(obj_id)s neeksistē" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s objekti nesatur get_absolute_url() metodi" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca4d926e038f638533b4aeaf9c3c9b5d39773e11 GIT binary patch literal 1258 zcmbVLO-~d-5FHgivg*Z)7fH$k2qDeRAP5ew8W9o_iG-}4Oh_}+><-LKZ>D?s@SA6GiwIIs)AHQ*U=5%>UD zI{Y;Tgy21b+e-!3SWg)!EU~ zeGazgZ^47$Eih6YkaHF|4_G?~Ahl_y@w9z6t*a-{vnfwRuOd0OAOfu@l<5skWxgbc zQ%UGqKBr_{)nc}q#XY^02wj$;GbU3lQccCxicm+MhDXh+QFv4n8z?^8+zF*nw!T=2 zl>SFrnJY>qaiwGsaVMfy4UaK+8>bF59pH?D>`3^d6bS)Q0AEuy6~hp!A6ebtk%59*mxSqFiJ~4 zjm$;*s8gSk#oTmU&3McvWR@tO(n`}+g@I9OEekyxC={kI`m+p~E zK6#@#=j7EiduF5Y&TN_O#=5DK*~RjkshL`1{ZBU(XIlu|GoKyv(bUa8mYc|Htl7QB zOY;SryQY40iZbwPzX#M#+~kujoV?Gr7qSYCwWj3%7d@PcFcunZyfSsPS~I(ZdC)gz q-f`^wX8+IKwh#Y0Y~8+>R;t-HJ53q9LCkHw;?e$fj>TkS-T4V|0^R%o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..e8a455b03 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2014 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: dekomote \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Content Types" +msgstr "Типови содржини" + +msgid "python model class name" +msgstr "име на класата за python моделoт" + +msgid "content type" +msgstr "тип на содржина" + +msgid "content types" +msgstr "типови содржини" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Типот на содржина %(ct_id)s објект нема асоциран модел" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Типот на содржина %(ct_id)s објект %(obj_id)s не постои" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s објекти немаат get_absolute_url() метод" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..70458b6231d04ccb18f51db8ca5e41c3039aea0e GIT binary patch literal 1378 zcmb_aOKTKC5N_YF>cxu}5A8ur2)#QaYU0F*_y|M{23b8CIy;@+2{YZxbgxOkg9^S4 zA{g{0qM(TQh`kUmdh}mN<8SZ>`1Oq0#0TiXf^WX+nyTu0^p_nQ7YSqwunVXITYXyU>zabz#P0CEWta$m%xvJ2S5{Nwt)}@UIgCwWLaA?vOytVughHLI(LRwmBW+3{R(17CImw?}ke5FTJb$ihJyhEXs$5QIShM|M_ROnlB& zzd;rpV&Neg9*p(}0|BIRnrp-AIhQ)+M&%Jb#idL%JuMP6MGvDI9FL~Ov6{$fbp$c8 z+2KvW>Vjtx9p@>Z2Qu2%GNv8XYO}MmRpWCe(_*gLP+6_)YK77t32Iqd>#vNDjh|fY zKdc6oAA4hU>@A{3%$Zs{<%t}ojTX*NVb1mscwtJa_iBvmc#(gWs=R z_l~nq%BC?bn0}tXy>hOwV?b}6y$bDCIb8q6AbRt)SBbNw|Ls+4_xeA_Vvrar)>tgF in0#5%Z&e~?xm8qvPRji+7bESh$={2NXa@^kAm0IWK~v@c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..873523ddf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Rajeesh Nair , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "പൈത്തണ്‍ മോഡല്‍ ക്ളാസ്സിന്റെ പേര്" + +msgid "content type" +msgstr "ഏതു തരം ഉള്ളടക്കം" + +msgid "content types" +msgstr "ഏതൊക്കെ തരം ഉള്ളടക്കം" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "കണ്ടന്റ് ടൈപ്പ് %(ct_id)s വസ്തുവിന് അനുബന്ധമായ മോഡല്‍ ഇല്ല." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "കണ്ടന്റ് ടൈപ്പ് %(ct_id)s വസ്തു %(obj_id)s നിലവിലില്ല" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s വസ്തുക്കള്‍ക്ക് get_absolute_url() രീതി ഇല്ല." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb640e9af002c3bac4e124d6bdad431af4316fec GIT binary patch literal 1225 zcmah{%Wl&^6g5yD3b5&h1xQ>Lh(u@_n^%jgZdyR9AfiG62??p1#zSIoW+Km|j}?Vd z7Ca<2-5`FT3q+woq75lqx*NluZ{gS}X^~oSt>fc6zH{!m_WbVeTXGObfK$K&;3)7O zNaF|K1Dn8cpl_e!TmkokFN4Ry$G}g(>HF8<6X18?Mc^}FkPjVjoRi=W;4$zf_$K&x zUw8dJ_%!k+_#$`-jI9pHIS3pE(l`WQYZm))Pkm=`HeWH5lGjB+lbU)YDn?VFockUY!Og|5z}F+xm`ENJePS_$-Csc-gy_1yT!F(<(Nwyaie0NM)@3%AJ>{qJQ>bW zAgfJY6|5|H-KUa*yC~$6@-<@`ez7<+Gc#aPf$*W29jK^!u{*+Finaubby+OrO5>&L z+rxSTZf@(BvGkYuWW=l~HX4;5hRvtoPPf, 2011 +# Zorig , 2014 +# Анхбаяр Анхаа , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-19 14:01+0000\n" +"Last-Translator: Bayarkhuu Bataa\n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Агуулгын төрөл" + +msgid "python model class name" +msgstr "пайтоны моделын классын нэр" + +msgid "content type" +msgstr "агуулгын төрөл" + +msgid "content types" +msgstr "агуулгын төрлүүд" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s төрлийн холбоотой модель олдсонгүй" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "%(ct_id)s төрлийн %(obj_id)s объект олдсонгүй" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" +"%(ct_name)s объектууд дээр get_absolute_url() функцийг тодорхойлоогүй байна." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "content types" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d2852254e9a335cb068a2fb19c34f8b7bbc8066 GIT binary patch literal 1035 zcmaiy&2AGh5XTL)1uY;X1mePBE=Y}#n-4)%Z3z+|Ewm!Essdb)qRHCbb+T)(*50PM zA#q1sI3OV&gJ*yPj{pZ=ffrz$T~ZMtu=3Y$$M$%}@&EhfrFV?RIns5~OVWAL2a+G3 zNq0zJNEb;frx@EHULoEl_J|jVuZe#BE%6%hBk?Ke6X_ns%V!w7M0`YCC%z!wCBCWW zzY?!f{Eg`Ie-bHmKF-!(E5y^JCDJm<_f1Exg+($xlJ(j`W)2Sz)o9rUNUwDZVO1haFMn4d}$bo^j8BaF0F1$nHj z`%hwm7PJAh)lJsrIZT(ifq3y{)T)<@aM9y%IFZp z2z6|N1DTt`@t%#9;P=be^1cZn*x%y^@<{ou{2>(&q0{QLd7FOg(C&n{IyYN1f+uJl z?-!_Tip~@v?BZcDg~!S!n9-_^ON=G&OUy#(VTw~&O`OZaW^*!`tT~^l4(0J$WU^+} z(r=`7ax=5dM$p^oZJjjVUTX#QBXIu+Avk&Lnt6&!Z$gw{VWsOn>u>XolYPF{p)B~8 zj*L(`4q;=c+`P#UG8^otWq~Q*HbrJb(D^L1-S#F_pWW7G!1l;5WA0ruuHL)$ky8T4 zzwX(FXMX6)di}8Yse3iM0sv?teREmG3Ew(bV4ovAUg`q6Q as2o)tEp#!9`Qj{H4q+_GO|`Kqm$6@R7&4sz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..1aa74e077 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-11-16 12:42+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "Jenis kandungan" + +msgid "python model class name" +msgstr "nama kelas model python" + +msgid "content type" +msgstr "jenis kandungan" + +msgid "content types" +msgstr "jenis-jenis kandungan" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Jenis kandungan %(ct_id)s tidak mempunyai model yang berkaitan" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Jenis kandungan %(ct_id)s objek %(obj_id)s tidak wujud" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objek-objek %(ct_name)s tidak mempunyai kaedah get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..03d84f26b47fbdb3f18e9358a84a7b8fbfe69434 GIT binary patch literal 1554 zcmcgrNoy2A6fQL`jC#q%i-)?1386CGVir3_jT;6H1{noK2$kuwr(<{5&{dt~WF1sc zL{#*kM!{>`(2H?B>z@$nPk8q0?wKTt%OPUH*WY_pZ>jfQ_1Dghdjx9}upKxLYzF3m ze0>Hy;0v%7=vYHYKe!Xz2Ob4)0bc^==QqIHzz@JTf!9C-`p7y$j)ND#*TCPv3t-bh z$bN9o`ttlD_#E^%V7L+-6NqFZkgp8@T#L09-~8Ui+R;_l6A6z+x1w@#O4PNYzD#y% z+ThcIavBId!6%iBGA$;uH0tW6vCs|alS4AmBGI%q*A!|=)6i%UHT0KaVgtb^iXC4H zmB$yeq0)bGYj8yqNx4$89&#;w8cSb9q~1!MC;LHBq&bJnC8Zs$M{uQid1O45d39{m zXJbjmY(Brs{14DL7Oow^QWxE09>|yR6>h^oPogN3Pa)K+(YAH`t#I;O4dbYtMdQ1yV zN3tZKd#AEkX32pd=3&%Zm+?NhBtgal!D@oX9zB?)u~33`HMDMe)#}X5Os~!Zh8M(a z?olmEYE#s5uf}uL?#kHc*pcPp-Cn2C8X?O^=us_Zb+sAsFd3rt22YjH!>4OU+2FEW zp6h~0*^#6!{V)kUIyf2XrE7XLo~w*US;`}JRHm`=XwocHHS7-2QXF=MDrDumv*w94 z53PA-%_D1WS@YJK+t$3a=Ds!Wi~Yr4y+dp6T65i+ch)RgGhdjOGW-zllQqvt5!_hw z!J1b^sLO4KrKAwbM9+()h=rXiW#0A??zXtvSSx;u-<7=bM=4UH8)b#9dWxD~{fCN4KU(vkkRP}EiPn{kg~6Tn>AxGmYD@iTfEepNYn~P_21VgjyeQ;f RR`KVDfo`BVaLflpz5_Z, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Yhal Htet Aung \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "အကြောင်းအရာအမျိုးအစားများ" + +msgid "python model class name" +msgstr "စပါးကြီးမော်ဒယ်အမျိုးအစားနာမည်" + +msgid "content type" +msgstr "အကြောင်းအရာအမျိုးအစား" + +msgid "content types" +msgstr "အကြောင်းအရာအမျိုးအစားများ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "အကြောင်းအရာအမျိုးအစား %(ct_id)s အရာဝတ္ထုမှာဆက်နွယ်သောမော်ဒယ်မရှိ" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "အကြောင်းအရာအမျိုးအစား %(ct_id)s အရာဝတ္ထု %(obj_id)s မတည်ရှိနေ" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s အရာဝတ္ထုများ get_absolute_url() နည်းလမ်းမရှိ" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d058fcec8f422f0221c0d92c0c50848652061576 GIT binary patch literal 1031 zcmah{&1w`u5FRx~8TBH97Y~(#u#5Emp%^Avk!S)DS3_6@L0EccDzm*aQ@wQeW|N!X z3wZG$1aH2AFW^P*o&|jYU%~3xag&IUf{(AOy8fE}eq3LAAFy3!++w_DTwxqBynSV? zGrlpdF_zB-!7B3&=6lRN=Bvzanf?7c=9|nPna7OJjQi}bT$ta#V!q3M%IxDu%)b76 zb^nvu*Z*eb(uG~BPRq>a8B2_d48J$02EpxG>;@zYtXt5-F~-h9qUqP04-Q6hA3;Kj zZXkzN=TnD+smW_~DA0{`5p0Jk5Mkwl}NPrw6Z-5G@= zX@N9IYjv!o!vqSQU>?NPa6j&pV}r>duSfGdh;uFl|HNR&X#Ya7orsrctkM)gGM1F; za2F@qIMK7IO2o!AwW6;h2zQ=~UEEhbRXpb55p-IemT0v_rw#2+)V_D8#TGu5)``B6 zWOM1XiQoy(Umt6FnCV=Tl6iyl15TrKDpM4Fltl#3w3%V5B*BKxiZ7pXsEwSPM9t=G zHfuQFPVM1ABi2Q8zUN=ct42*4HtS(;ySI7#qIRPdRzD;B&qUzxz%?hiRI~>1NE(Z- z`=Y-kR*&=itUWYhlVY7HN+VbuDz{iT0vd)p`P9f;%^PMiAFk4tp8PW%KJxBnL8<|Jw=4JY<@;jxdWw0 frJ}4t<0?UMi^b^Rq+=>UiBfoZ<^_c$_bK=T;5;)D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..f1485a860 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2020 +# Jon , 2012 +# Sigurd Gartmann , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 12:15+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Innholdstyper" + +msgid "python model class name" +msgstr "python-modellklassenavn" + +msgid "content type" +msgstr "innholdstype" + +msgid "content types" +msgstr "innholdstyper" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Innholdstype %(ct_id)s objekt har ingen assosiert model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Innholdstype %(ct_id)s objekt %(obj_id)s finnes ikke" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s-objekter har ikke get_absolute_url()-metode" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6e855c7f08fa1b2cca5eceb2bc4ee5ebf1a6b459 GIT binary patch literal 1344 zcmbVKNoy2A6fQL`jC#q%i-+9W+bFs2CFnBpTu<9)wVtuJm;1=^DCfvYaG% zP>3FbxIhqUFsK9x2zt@0UIhPu)KBrNo@_2?^ugC(y|vzZUEf+;Rte-7a2mJ`90#5O zPCfwv@EJG>v>YI$7u*Uy2Oa~T0N(*S{{!$T@DuQ3U=x^vK7NRhZtxoT7WfPJF1Wpg zkT&ouu=9TfUj&oGgdmkbbw_d(aB>7dYAy%yb$#d3)=}2eDX)r7Mdi$#C~HMSnYL?M z;q!uW8VNnkXOv9pT1?loq@$Bog|5hu49irDRMXN@O{g7BL!)`sINYfT1By@QmQV`i z>Wjr#>A$2^xT2|~Tq#+OxfUU<%1|Vvymhs^><2}W+7g;en{l+9AeFlD$YdtnbZjhS zH$|pmnFchR<7p%dQ=%p_%_dY7hwO4aQmiBcT9~|6V#Ar>8nNsOZVzaW=bvMq&-^~> z`+?Wj<@uh6KsF`jV^?!Gu8(;G%pahBZ*bP@@*stAt~4uUJXHzTG7IQ+9`TG0S9lUD zLC=?)2j#4nqAHJ*?y{_2KwcWvc_dg#@M=J>iW(AVM@8#eP%JJiEOcvEG@ccUE}_^Q zYnzg->|!d4orQ_9iILp}_}yM%>o+p@8w0AvqAu1F9;bs8{bWk$p&O-9*1sF)?wS=D z8%fJDjMFHf{WG!N=`x_HC`=~xj3;bVW>p14Emzf0&me6chdNSvW{CQog9Wnp30m{k zns>JG&>CYK%hqgI^Wk@I(D}_9Yd%`D>O!n}Y8&^hS*NyPNN!xu%dFYPJ(!zkgsmak z8kk;M^WK$cEblLT&!hgS%e}ArKl=DXVYdr|Ej&WwIBn!pyxtz?MLxcP4~`XUp68=( nLjUJo>~95oH-_~!_t?mn{!0t1d9Ry!6k3P6g2vW!eS>@llyxIy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 000000000..6ecdd038f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "कन्टेन्ट टाइपहरु" + +msgid "python model class name" +msgstr "पाइथन मोडेल क्लासको नाम" + +msgid "content type" +msgstr "कन्टेन्ट टाइप" + +msgid "content types" +msgstr "कन्टेन्ट टाइपहरु" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "कन्टेन्ट टाइप %(ct_id)s वस्तु सँग सम्बन्धित मोडेल छैन ।" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "कन्टेन्ट टाइप %(ct_id)s वस्तु %(obj_id)s छैन ।" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s वस्तुमा get_absolute_url() तरिका छैन ।" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e5e33f1a3f88934079540d2c41480c548502edd0 GIT binary patch literal 1040 zcmah{%W4!s6fHGIX>}ulAX!`&!VFUL2oWbe84*na0f&SziVI<=?!M`+*j+Vr-Oght z_ycZS2;yh>4f+q_!j(VZ-dod?$tZ{gr%&DLb00;W?>Cp;3tm?lD~wl+YmAQ!zrHXw z7+)DT7|R!g=rP}7e!x6rzRvuX+5dmXe4F_bGcrCi`W&xZs&y}!eLgY|ypGxT`!@Uk zllczEznD37zOKx6%gh%UON`45KQ~K-xYvkjY*c|w2R1sym>eY5{CM+$AX7&O3R0x8 zik!_W!f{pRjV2UGnN7q~YX}X&=yZZ^9uY?{t*euHRX*VIwK>R zEajGoZK6#YLNC%ZA2I}!2YY!{s$6c{vT%GbnTBq#+J|~OXc)LVfNrxNELuv|mO=v= zMiEnr)6d_AlC_~w?3m0}iSuu2#O~COi_SSx2K2dP!DSITQi{N6q_f0-t24v{s)vd6 fVT742(VQ7;p@CS~8}ZsZ35`+(_|mn@YBT-@?xZzU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..2dade66d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Harro van der Klauw , 2012 +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:44+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Inhoudstypen" + +msgid "python model class name" +msgstr "klassenaam van pythonmodel" + +msgid "content type" +msgstr "inhoudstype" + +msgid "content types" +msgstr "inhoudstypen" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Object van inhoudstype %(ct_id)s heeft geen bijbehorend model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Object %(obj_id)s van inhoudstype %(ct_id)s bestaat niet" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s-objecten hebben geen get_absolute_url()-methode" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c60510c258039a6ce8f49ff0eb833e7a48c564fb GIT binary patch literal 1040 zcmah{&1zFY6uxS$a@CCpD!4cV?%y-tX8y$7V|->LtnXf0+;^C_SofHpFrPAq{BOnm zPv$$Ue=&3Fa$PBQ>&zD!YmCc`FgJ%r(SuUzyCjELc3^tPn0g19p&xHQdg#j&1PM9% zuIxFZ#~!<5t4n1VqVJn5dS=KYdFaeW=$6W}f_Yt)EvxbYm+#I`GJ|f>0jJ9O|0MRM z12Q0;GpUjuGZ>l-b(9v(L%TnOi$*gZj}~!|YEFgl#Hejec%j(K#A~!p8A>2KmXw?L z5J$#((Q>)U#M5!^M8_l$w-3Z2o~RHio^$gA>eYHp)T*LhgIXim+Cn_mlFHPoU9LemQUgL~&b>t<+-I*rDTt(OkM_eH#|rW{Kc_6Kdt{c-2oL_-PPq zWI+uE#|WtCFK*%=jrNH8QfH1oRN7Uw;-<5jD{jJpV-umpqRYQCv6zQ)EDWMyKr`

      Y73uB470XZ)?3)xu|{RW$^HSPca literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..c441b436b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2013 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-10-21 18:49+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Innhaldstypar" + +msgid "python model class name" +msgstr "python-modell klassenamn" + +msgid "content type" +msgstr "innhaldstype" + +msgid "content types" +msgstr "innhaldstypar" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Innhaldstype %(ct_id)s-objektet har ingen modell knytta til seg" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Innhaldstype %(ct_id)s-objekt %(obj_id)s eksisterer ikkje" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s-objekt har ikkje ein get_absolute_url() metode" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3e44b4b2d74084528b99e0a7564e64dcb4b9a52d GIT binary patch literal 1116 zcmbVKO=}cE5N$Oota=ed6c6P=vPrMg&=B&a5BRV*4EwXCeR z;wWFBhO~7ZunDcKRF>>|Q&L+e3@%jg0J&=WCD77jigGP9_8)0=VMu8b#%MnjRtD72 zfsB}csn}nRVa;{4qdIZqM@Xe?AT}TCY#u%x@OLscp;jIR%R<$3Zb3G6Z27FIg#mxr zsu^C<9_8leDtscA!XlQxLUoV&9e0pBE_a8?bvVF@^x#QUa7RYx>~fEVz?yNioR}?Iy0S9be3Myrc}tyPR~wur+14^?(DDe3jUf$ zR<7AnGZLX1BflZ>9}D$ zQq8t&%Kc;1xt8;ao|efijOEznjZ1zeJL%_SFF8y%(v8!tw zprg^=EqvQgc9Z?|L%K=nr}SgGnf$=@vhw9!{4araV>phJ9h^tW_tPzcgND%h(Rou> dw!*G_&1OB{+pbX7_95iAF-$g2a)J`a><=q*l|ujk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..bdeabb6b1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "python моделы классы ном" + +msgid "content type" +msgstr "мидисы хуыз" + +msgid "content types" +msgstr "мидисы хуызтӕ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s мидисы хуызы объектӕн ӕмбӕлгӕ модел нӕй" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "%(ct_id)s мидисы хуызы объект %(obj_id)s нӕй" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s объекттӕн get_absolute_url() метод нӕй" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9221827aa2fb7215ba5e6a126edd2a14cae04a45 GIT binary patch literal 697 zcma)&O>fgc5QYtuiv<@hT#y)UiK>n5@{xAaAVf)}qDDlO;lyR@Y@ChkUDvxI?FAtu zBo16Ft{{Q5a_)^vHRFjPJ7e;Ums%)EVLW3pRsJ3?RB6air(#SV&QncdMZq6EiOE*U znZaK2h#5{{EsXAxFd|VGqKJmw)i4S}Y$SX9g{WpO`?@6DAkhXy_voE)HN^0DnKmRY znba9Gs-*CkNhvh!a#1b2iQAxkkkz&$yo2)PUs&7qrNd_`eV-)m|U6?|_{82V9Sw^;1nQIENsIBg=^`J@n zEeW^!5Vd>0=j^$&r|#sNv+te#>P}vPv&YW, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "ਪਾਈਥਨ ਮਾਡਲ ਕਲਾਸ ਨਾਂ" + +msgid "content type" +msgstr "ਸਮੱਗਰੀ ਕਿਸਮ" + +msgid "content types" +msgstr "ਸਮੱਗਰੀ ਕਿਸਮ" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..00e6a514c9220e6439db292bced0bd391eb2d603 GIT binary patch literal 1208 zcmah|-D(p-6dtwyuquiOf_QPfXi1Pwc4G_8HkF&(3Gikb| z7lL@_g*RS^KM&!BPoSVL;e{{Y19;<^WSg`gbjZgybI$qBIg>g2>)PBqg6jg}7UBis zBH|;$tRIL5;wR!V;@l}hmXWU`FCn*(FCo7|HvYHBH;_Lg|3!R782y(sgj_}bgIq@@ zbA;SS@{q3}A0Qk58|0hFpO8^HUFVD4Ipos_bd$3P(>JChWWE&WuAm7kE0Dbb3$%hz zir+8aYv|Km1{5NuyR@fdJk+c^%;HiR5~lkyBoC#~OlaujDO1yv#uJS5@^G3J4Vb<= zwuF+YNd>mYl|Dh(rwW7ws+0^k)hvWWhAbvQQQVX}c2FeEu{|+~gCIsJm@ATYCe01) zjnIC^GR39vARJH;No$LxGShZTMLe`03?pTCqz6`e)81mc+=SYXu($^`$F1A0i$8D| zJ*R%h!DT(BO52@`3Kdf=GY^t34LI9@Mq+qSk@1ea7bTR(l|Uv<6o_a@BW8CPO+0AJ zn5#aN`dX)6wK^J&D%xb@+icGWs*^SkDK6C2G_IDd)<$b>b|JUoSjEHG=3zY0Y)@k( z?Rc2c*j|@eqC61k_^ABF z6?7VpUlP9W!YVl6K}pQJPSdZ!!UC9W!(S|${n+j_+!`Dlj2%wXMb9d@C=$0(e;CyC zotfAzoA@H>(#&3;*|8dCEy`iNN!l8wy<1+f$Yu|pL+6vhECyb12B}n>hIH`lwV7%e z=Kq;@g8yR<&*_L}T7Lf!@FLsMp~f*B!u~Ae$QNMB;G823*rD=-@S-b7v;92fiV7CV f$vh7UN{<#Y=lq!A3Edx2*ulBa3k^)Z2ul6|S_ofQ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..0c26fb278 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# sidewinder , 2014 +# angularcircle, 2012 +# Jannis Leidel , 2011 +# m_aciek , 2019 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-11 14:09+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Content Types" +msgstr "Typy Zawartości" + +msgid "python model class name" +msgstr "Nazwa klasy modelu pythona" + +msgid "content type" +msgstr "typ zawartości" + +msgid "content types" +msgstr "typy zawartości" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Obiekt typu zawartości %(ct_id)s nie posiada przypisanego modelu" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Obiekt %(obj_id)s typu zawartości %(ct_id)s nie istnieje" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Obiekty %(ct_name)s nie posiadają metody get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2ba31b9dd0a47beaf58384dceec2e8921b2b96ec GIT binary patch literal 1125 zcmah{J#W-N5M3aA$Us3TXh512h&x4lX9q%plS7D*NI{8miVPLfX=87Ej_h5_yUs^N zNkdBkqNAdvq)h|AfR5k7Ti@kE1X4zNexBWVv$OX5Jw5e-A+7;;fj7W);4|Rj2M_{3 zft$e81;!qOr@`~!b?^=FTd>=I555Eb1pWwo1Dt;25;Wj<;AOWDUIqUG-vZy8V(d1! z3!VY5fFWfdb{V(|xVQp9(!@nP-P}#wZ^d??L?PRT^v<4)t)WD#2bP9nUy`6y+JV?H zImN!D2Z7Xx2w~8^Tx~RYI9uSY3tmQYe)f+K?G8Ma!55>9f2^JDJ+mPoYt1 zEmFxNDT49Utv+bwgEsU?bsqB7F, 2011 +# Nuno Mariz , 2011-2012 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Tipos de Conteúdo" + +msgid "python model class name" +msgstr "nome da classe do model em python" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "content types" +msgstr "tipos de conteúdos" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objeto do tipo de conteúdo %(ct_id)s não tem nenhum model associado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Objeto %(obj_id)s do tipo de conteúdo %(ct_id)s não existe" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Objetos %(ct_name)s não tem um método get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eec927d733008d6126648928ea01a8e600092ed7 GIT binary patch literal 1117 zcmaiyO>5Lp6o#)_tBks^C~jOF1aStr^Ci}jcB)icC^&Q&Mpwdcn|mgclH40|Px>J) z1i`ItTnOUEmHq%1ZfBz_|A7mCi6_Z8ZBgijmnSDVUzfbU7UtdwKId82S;h&Y0xZ>VQo`31Kh7H_mgS5CnF z(9sEnW97hDP|jIDRD>F0t1%M(ba+1QSl~o*!0VYZ5B!KrA-|&Nr8d8z+|=?ZrY^L` z1HGe6U@Lu0Y)Z20f>6t~EO2sQJ*f1yWFL3KJXJp8;U2V`?Urn|Wa}O@7ri@+x0`$_ zkCh`iNR@GsBAa^9S0jZHY!pjk6d|mnqtPsS5X35s>b{Lvxz+@k3Q!JE#UAu{k1WX0 zAyn5=^*oGfP#qH`UZb(Mw^yfpN;ty(yt+}Y{}<7;RU@I{TE9`NbT_-}hj(q&o0aK5 zlledMfN-B0Nu)xv4E|W94yp5GupyTY^YU>cOy#=qtqx7#!P0g}v#mWSW>tDoma0f@ z*fe$?n4}0@r@aj2W2b6h6, 2014 +# Carlos C. Leite , 2016,2019 +# semente, 2012 +# Jannis Leidel , 2011 +# Rafael Fontenelle , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-17 06:36+0000\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Content Types" +msgstr "Tipos de Conteúdo" + +msgid "python model class name" +msgstr "nome da classe de modelo em python" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "content types" +msgstr "tipos de conteúdo" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objeto do tipo de conteúdo %(ct_id)s não tem nenhum model associado" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "O objeto %(obj_id)s do tipo de conteúdo %(ct_id)s não existe." + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "os objetos %(ct_name)s não têm o método get_absolute_url()." diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7d4129524fd66e79da35870ed92a230f56568660 GIT binary patch literal 1142 zcmah{O>fjN5H+xTXaNbq0S+97LrbE{-K5ZuP1zPvTB%a2uFAp*wDKly)>UFhw$l$( z2_&vuxd6X{8+Q)n(7(WMVVvFWwi2i#y}XPw^E{5u9KCgMB7#W5m6 z{6^eH)GiS+hkO@#7I_`{7V-yV_x&^SedMpmCx{=21or1b7rxYzQo-lmap@2+FmU7zREXQ`0GbvEO>swnyjmG}|{iA!T(?NZBqtxAK1ePDzMv*Zg7a{I5ZMbc{?yS*;ah=<1hikejW0eS*MzGKm zb~I-MTGiWGsaZzXl+H~AvZzwida?+E*On(+t#CPrJkOI8_&=AzrhjxaOj@nLpPcmM zBV^xSo{2)=U#yd@p1{lG+0bf31IrRv3CbB%CBHuX!@Hy-ic$+mIG~4)zX@4h, 2014 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Content Types" +msgstr "Tipuri de conținut" + +msgid "python model class name" +msgstr "nume clasă model Python" + +msgid "content type" +msgstr "tip conținut" + +msgid "content types" +msgstr "tipuri conținut" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Tipul de conținut %(ct_id)s nu are nici un model asociat" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Content type %(ct_id)s object %(obj_id)s doesn't exist" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Obiectele %(ct_name)s nu au o metodă get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..27f7ed2f06a761d0b75538f91fe95bf5993d9831 GIT binary patch literal 1345 zcmah|L2nyH6rMsU$SoIy)JqYsm0HC@8}GV_6gJ)zQCg`I5mDsA1t}WuPV5cq9cyQ{ zNva-dhf7%)6U?4JVGY<{uy=RuTn3&3?f`B6d*Er{1K>ZfC$Q^? ze}0p(4}r&yGu8o~1%3s*3;Y215@_@6Eyf5yKv1XW?TL2+_y!E+wzQlZ(u|#-3H4ga zyP~Q{wl+kl6-6?AdHY9A9ezU)r?${*yrpE4Yq6GR$xM~HLU&}uF3VJlR8w=iC)703 zh^W+!qp2z`Aiq}LL{g}62eB0^{TgD2D@rACrDPa$Eh6g5NF*$rG`H=J1d8>xFSBeN2j-XJt{IwV#h|!H#lSo@f0$i5cj&Kwj?A7J5;8B$u=uVRQ0WZJ$UH{re_sGI z53P*V>z75t;, 2012 +# crazyzubr , 2020 +# Jannis Leidel , 2011 +# Алексей Борискин , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-14 18:22+0000\n" +"Last-Translator: crazyzubr \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Content Types" +msgstr "Типы содержимого" + +msgid "python model class name" +msgstr "имя класса модели" + +msgid "content type" +msgstr "тип содержимого" + +msgid "content types" +msgstr "типы содержимого" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Тип содержимого %(ct_id)s не имеет связанной модели" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Объекта типа %(ct_id)s с идентификатором %(obj_id)s не существует" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Объекты типа \"%(ct_name)s\" не имеют метода get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5ce1a4d319b7d1ce20e739a07f6ad28ad59bb089 GIT binary patch literal 1082 zcmah{O=}ZD7+!7tVEs6VAc)}Wp(R14$;R52ZDT=gp=fBRu_qx+cc;lFyE9>DHf?T# zck$vu5yhit!GoZeASn17Jorm|CYz>O1qU9U_nr51nCHiZ>E{m4Y2XU*2si`00_^z; ztN`DDbHK@Cj52)+rffzN`UfNlI4_!9Uv_zmy@ScJblmG^xL_Taw+FMz*;UGUU& z9zPGh3jZ<~rIT}NY@Gxj2M~5n0CsP*aGaS!V49LAqNqvjbVOh@g-ZT>{K8P1_XTlk z3De{|TE&?W%`A-zMM{KetI)Zlq!H3kW6%?N;u&}}>KlcVuDC$^=IAC=Lgy32ex%KR z3fo+hRK&GbLBx#+DN&(_onSoNj{C#WPH%wqWS&Psj8d{sbn29$-Sb33E=BeWO<%R2I9QQug zhBZL7S&qnCipEI$Ju-v$J+Z z%GP9{!brA!TH1-sWJ{lP*R97{%44>!(nR|tdm~p@=a(rrs|86j, 2011 +# Marian Andre , 2012 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-07-24 21:06+0000\n" +"Last-Translator: Peter Kuma\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Content Types" +msgstr "Typy Obsahu" + +msgid "python model class name" +msgstr "pythonovské meno triedy modelu" + +msgid "content type" +msgstr "typ obsahu" + +msgid "content types" +msgstr "typy obsahu" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekt typu obsahu %(ct_id)s nemá pridružený model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Typ obsahu %(ct_id)s objekt %(obj_id)s neexistuje" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr " Objekty %(ct_name)s nemajú metódu get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6253ab03c8e539d13062b9d9ed6f37486b87fd72 GIT binary patch literal 1147 zcmah|O>fgc5H+QID8Qu`gv4Pk6^W`%?DP|t6x7m6m8gi?zzHdu*js1Ade`!9(hpVQ z$OVpE5Wj*SzzGoCd*-(=Yo|#oAu-a+^X$&NS$kjp%*}rCC~gxT65bH*5WWyx{33*e z--LUF*=wG+LOe&jOuS2cm-rpA+y6j(pZGKJIpHf|gYx&+%l)6kjPi5hP2!o^a(#Qu z2gDC(9f_&cBl2z#ZV_DEBv5M+GxY1uUBrAfvR#EKuNlz20gtSKSgS`C`Z(f%kZ{|@ zp3!n>d3Tu0Y7J6u`#Scvw6a`T=$vHSOfpLu6sjVgXwm|ScZ-!+bK~^+u`u>OZGAML zG@vm$5@>l0sgAkyqVZ@q>`G$1?1T=d$~uT7wSs#+ubpf6c5F9huX%2SRw2X#REe(a z^GxTK?U_WxY;%|x*3ltU+Alk7E9YpbmOZEGAvFD9nfU<=Rv`#Ne|5nRe4h&0J|79E zIjvh|{$ti$gkUXPURv-eDlgDj*2z&BiB{(!v~!W_AK!ou6f5x-o@8#}v_2~HXGw}e z)+3#6P_Igcm~htNn1*m5^@uBh3aWi;v#`-PIy$Obr!5ZovFmA+Z+Ag*EYL8rQLF6j z?rl%MLs0iCyYPcTSYn+DhXk&C+y^) zAsAU{%VCa^?dUu;A*ifKO>1c#%Ewk!&C?fbwE}nwK2S-SHYp9J=^~t+U2HAUR+F|C zYwH!dR34KX1&nfI$F>`rS&0+}n!GIa_m4vU%gA2YH8Q*>lygWScG;_!WDD;qPJa?( zae$NRD;k%K@8*xEbHx*cjBe}{i^symSd2%w7=J~`6DfxrPw7ZldYJ?YXM2AEnw?H( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 000000000..d13e0dca1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# zejn , 2016 +# zejn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Content Types" +msgstr "vrste vsebine" + +msgid "python model class name" +msgstr "ime razreda modela python" + +msgid "content type" +msgstr "vrsta vsebine" + +msgid "content types" +msgstr "vrste vsebine" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Predmet vrste vsebine %(ct_id)s nima določenega povezanega modela" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Predmet %(obj_id)s vrste %(ct_id)s ne obstaja" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Predmeti vrste %(ct_name)s nimajo določila get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbc339366476ebdd9a84a6581fa5e4cee55977a1 GIT binary patch literal 1066 zcmah{U279T6di4?5*0)Q5q!9ULV|3P77FRM5v{gTXlN1T6aO= zfLl_UxV1Wx+=-Yn9gCDjrMQ>-C$KC(#(1j8qbNlw`6senqx}nmtvGlsjFno26c4#d zbY)NE+PI)&6B!5Vlf(vH9a3d?C)g7Q(x(P5ARf|Eb8#hTt^|uMYOaLKOOKmam2GZa z&^27ylsj!gTE`RRh}Qa3ewrJd7>r;CW0}{rNuHoYB@>>ApeuM5(zCSBmE?-51LyLv z(KtLjtUKRP?u(;(q_ajb>R(FB`i31hYL(7bXXETqi}hxu{G7mlPDoB1xkjFHsa7c( zaASpQzv^xVt+PC@wJ%Jtp&}him4wvlOE;S{Bs;F`rW3={U{jmShNSXoXxmGxRBYQ- zMGxAvSX-^I9oT8)ge$yIdd$LE`RR$t`h2KPPe{RRLoghrWAOiGW7{cyjkZruR4mG- z^1PjVJ4%s6=``n@_q>`Iy@koNnw4IVKjNiv9LDjvcA&?g2{-JV%5*PENhUHs#0XXs KMYW{DgzOJI(MWj! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..37e47278c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,43 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011 +# Besnik , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:52+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Lloje Lënde" + +msgid "python model class name" +msgstr "emër klase modeli python" + +msgid "content type" +msgstr "lloj lënde" + +msgid "content types" +msgstr "lloje lënde" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Objekti për lloj lënde %(ct_id)s s’ka model të përshoqëruar" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Objekti %(obj_id)s për lloj lënde %(ct_id)s s’ekziston" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objektet %(ct_name)s s’përmbajnë ndonjë metodë get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9a1006791eca1b9609cdfb7898bbba644265fa30 GIT binary patch literal 1204 zcma)4U279T6kWAeiHabCFACR(mIm2oH&!UyMnP?{Vri*S1cfrmPLnO0ov<_M2lSz} zpl{-fP(cccKOjn5LaX-02Ys9T0U!J&o=LW8rHT$5&YhWi?md^8ALqJWSy(55i@+1$ z6z~Qx>l-i(d`yUR08N5&c|# zt*FfAI58@5HO&fAgf+#dYjN0@rV3YO;aj&vq7gNUORCdr>=&iXo(AMzkhlVJ5W4 zeET7fWgsGt{8<*2L~4pxMXc;`SqgmnX00UcyznSBIbl!nxxl2_x6$0Atdn(Y$F;LA zLT|vi;$WrjF{$i)%pw^wC1Q`pN+PDaJQgyj1Ye&cAu82aiQ9S3DjwbEaUoz4^_7*X zdYR1p{CvMM@?eH9^cO`X)AqGTVIt4SIFn9|kByJ)PvG`DspKVW^Aa8@zMwMIkOk2Y z70WD^T;(3*NA1D=Jkx82$M#566n+quJQ^$ns$4YO*TE0 zvh=$C&|K4-db{~lH`*U5`JnnUjz8&obFI1hr*Db7O^Cke4NJe%4ZVx-BWg5PbX{*W zm-Uv>>Uwf}=={L1g>v6T{owC4Cdia-u9#k^*Z7}$iFJa56{w!+2K>}ftU<61%NT9P fG9&BVL&lQxzmC%|lT-5T^|sz=b%D)JWeoibI5fO* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..02aae70ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2020 +# Jannis Leidel , 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:40+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Content Types" +msgstr "Типови садржаја" + +msgid "python model class name" +msgstr "име python класе модела" + +msgid "content type" +msgstr "тип садржаја" + +msgid "content types" +msgstr "типови садржаја" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Тип садржаја %(ct_id)s нема асоцирани модел" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Тип садржаја %(ct_id)s објекта %(obj_id)s не постоји" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Објекти %(ct_name)s немају get_absolute_url() метод" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a97478b09dfb86edac6b9034cd0b4c4c7613dd6e GIT binary patch literal 1102 zcmah{&ui2`6pmVd5EVp(UOYSxExTyC$+k*O8x^&MN|%k|WSX6AG7~bh{Q*4) z9=v+-Acz$kiFgxdQ$Owz^N?Ti`!n ztDBst&Zodue+LZdc%2_b=fI}{96M(LdvCOGoT*xDI+EqQu1R(KJT{sVC4awsXQ;=v zIWbDP>9DR=*}(A5pv-D@%DL&O#CfEo;nGlhui$!|8Duo3gE10C(Dl52pf%^ zot+tD+lWoRI}@wCQQhx=vQe9cE+1f$kd3UV(VPv33V$*1X@9?xpvJF56F}3fFSyPc zoVjI0<*JceCC^!ZaDqEw&bBDjwjj-t^7~iTXLjQ-`^TVLh8=aN, 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:49+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Content Types" +msgstr "Tipovi sadržaja" + +msgid "python model class name" +msgstr "ime python klase modela" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "content types" +msgstr "tipovi sadržaja" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Tip sadržaja %(ct_id)s nema asocirani model" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Tip sadržaja %(ct_id)s objekta %(obj_id)s ne postoji" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Objekti %(ct_name)s nemaju get_absolute_url() metod" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a9b9575163b171b37fa7d27fbae79767538b21b4 GIT binary patch literal 1066 zcmah{yKWOf6dfQuWQdT`&`?|ogso`oT}z3>Ms5g+WGN9=Sg4S!$?kY}ll6?58QV#f zhLV;B(eeWn@BwMyC-?=v0EsiUiAjXuN@vgBnfuh7?<-6180;2sA9w}a20j4Zz5)^O z4Oj-2t}wO^UIDLxJK#IuQ?S2(3%&<_4}JrD0$T7}*BHAC)?n|S&iM=2=lz)9{{;Iv zmX{bqDg&|Wz)is04FDliyNa)$duk7>iR&pbkTpyC;7}&cQmWM>N4XeF5|l~T69-n8 zBPV+!Q&wvkAq~|qpfa1OBNvfsw_2qG4-G9<@VM%Ec z*6O4XPNp=_sVrGCZ|$31a4Z|1U^q34qohPC`Sn=WXulorr2M5cw$Lh~^iZfwSN7#l z8^`x-R;2vND6>4)5mma+V!mahaERqk(LJJO5U%kckJhZ{V#f$=E$oIB2&~q`)sH?RUn@#wPe2lec3z| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 000000000..15d1a1be3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Andreas Pelme , 2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2014 +# Thomas Lundqvist, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-02-26 11:20+0000\n" +"Last-Translator: Thomas Lundqvist\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Innehållstyper" + +msgid "python model class name" +msgstr "klassnamn för Python-modell" + +msgid "content type" +msgstr "innehållstyp" + +msgid "content types" +msgstr "innehållstyper" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Innehållstypens %(ct_id)s har ingen associerad modell." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Innehållstypens %(ct_id)s objekt %(obj_id)s finns inte" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s objekt har inte en get_absolute_url()-metod" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dcd2203149dd680c223c70d6079fa6672e80c8ab GIT binary patch literal 563 zcmZXQU2oGc6o$jsO$3^>-EwgdH=Cx@*wdh!OA*@Gq)n|>ZGmeJiJN*#?Z|e>Chc#) z&*Qgn+5ko3NRM8>*7>r3Za@8=a6DmNGKb7FX2PuE3-g>I<^^M!ACHpcfpv@7dED!3 zR=!SH*1cHzD4dPjMu_)~PX09^nR$1si-;E`e%3x1XBCvUWGk0m>&E$r(@>cbPuePA z?i8f6s~k_grpUSYk)l>`Amkeq66Fx2RARUT@2KiPUihaS6 zPAEjoJ=suGbY8(FS!)7Jv?+BB?|2)wAL_Lo7&~|GxyDv4RT^_mO9eL_Elh1-cM)Tw zvaIX6L0ok-bA2}`+%oIm^hfI7xmpJ=?rq4n%s|e;DTcVG5$Yi&;~Xu_GuJ zZSq#L=Gx<#EnI1ArQqnRiGSBr5V~|$x1MS|cYYZZ*k*0R_+SM6alC8c W)fnX7C{1`4!9Br}+H%pF|NJjNn4f+C literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..4f9d8bc7f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "aina ya maudhui" + +msgid "content types" +msgstr "aina ya maudhui" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8438101e98eecc37264c117a505bd3bcfde849fc GIT binary patch literal 678 zcma))!D|#T6vm_0%b*u8UOYSxLQBa`Qq=8cyCT*WDqUR4=t+<`lbubONya4Wwim&h zi1lR8UOai26~uo>=1=j>uDV_XAN=NLa66VLXwR3{ChTK4Qkjuz3q^%0Mg1kho zBCnC_$b01D1wuZf-a>j83F)9dM{U2bph*>5GoPJv)QZ@+J1Vh zPCBVABdOYv)S9Avx^4G)HUtF!YCi*}dSNE5t90YROFxGJPJeMl$Lc@+jvl6|_p z%C+AbD@XTCYBOze0oyNh_%kH-kkP1^I$6+t>q;-cR150|TYXr*4%Q9a901?wN2IC0 pH1l^&{k56DY3grH{i&(XoB0_&p{c(w%-jD, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "python model class name" + +msgid "content type" +msgstr "பொருளடக்க வகை" + +msgid "content types" +msgstr "பொருளடக்க வகைகள்" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..732d4e9cd4c7dbc26dc9496de90dabff5cca2758 GIT binary patch literal 690 zcmZvYzi-qq6vqRUC4z+k7KX>xs`4eNfNOm{gg9EMs3(ppFtM1#mrIq{Y3y+Af_|D{yx87_RkwDGY@SAxs7ZiSCN;9vkJL}93j_{ zH^?pIBQm?>dFSYFBJ}d2{u%lKYJncFJ#^j`#Py$BB8BEcgFdOa_peZ1b)qLyKq*sR zKvFQJK(LZ~qgo#FM3cRgyx_IUrJ#@=GLcFDfLF5CWT>({C6Ag+kyujjM^9ris5#S^ zOCB@LDQtw%JrYJF>OvIJu)7{cVTg(3fWOXN&t+bhgj*!qg6KZI8?J|F{ytNh#5EJD zU|QA`o-iSD1^YaA%WmT~C?6Jc*~!INKEN80H7w&K=B%U;^P;Ch2 zmuxQc+^jLL$&N^5nv0CW=Br%)-O}~&M@3V!g6zt=R1`!tm#V+fgT=AGD&S5ZqP3py zS@Yetr`CM3<^rrS*37Iq{eSp}HQ#Le7B9cp_PsUd)?nzuwr5!R)wUn3`8-c?dWK;q RTndgj1B_wWJ2wM+`~s|?@Mr)4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..ca476cd9a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "పైతాన్ మొడల్ క్లాస్ పేరు" + +msgid "content type" +msgstr "సూచన రకం" + +msgid "content types" +msgstr "సూచన రకాలు" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8f0140d489a6b62db7caf81c42c10cd71856724b GIT binary patch literal 864 zcmaKqL2DC16vszfMOM9d@u1M>K}e8EHi2T<8WpvLLW7~kUS+yF*-X2cS!O1t1rJug zfEQ2VUBN@Zh+^A(hDkqw-@q^6$u~)wBB&33^Pm6DdvD$@`{T;|TY_;OxsI$O7m*i; zj}ORYXf zXC$8X@Kt{pL-IY_R&tUDafYQJS%;H`R=y=&OXw!oMkpCUvdv_wf(@Q4ZE4-4BB2ku zsi933LC|YSm?!Y-ERE(gTDcYSv_ zdhG`88@TUo=#ECO+!w$8?+lYq{{nZ2Wdkfa@ICq{!{c|pEpp@rfJ-0GhohHX$=Lqu eN}u}ov*XWh=xc}AcRcEW>yP$F``*k3Ain{}Sw8Xr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..9150d449e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 00:27+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Намуди контент" + +msgid "python model class name" +msgstr "номи класси модел" + +msgid "content type" +msgstr "намуди контент" + +msgid "content types" +msgstr "намуди контентҳо" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Намуди контенти %(ct_id)s модели алоқаманд надорад" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7e443b0ce4c45360d6e67bcae8cf11cadd024c87 GIT binary patch literal 1186 zcmbtTO=}b}7>-&MM!k6P;vpWymXh5Wv0qbH#M(lo#ZpGEOFEP8OqorVNwy!*gBGDx zdTjlu7e5YyBB&r{?*0zRkMIZhCfko~sdzB#lP7QHecrs!PUhFeo^1r4C7l1kNCE!)yO~4kQ2Jw|s2qnOE;E%vRfvryTbabo0 zR`(1TBnTcOSfVokJ5G1V%_m{DeY$bAH&%5{o2*Y_F}J{CC2=D7HHA~U$S}nXrs{M~ zioC5@yTV|yOxlWUIg{!ivXn~91*TGp zIHQUsxG55rqqys^LxDuC6=;Wd@^GAk6k9`RrV!Q-nM}w-R>(~75GMibMtFGN(!uA-+dB&m^8=8JNO1p&JNq=Ps;dd|uoF4R5q* zgOP~QW{9JdX1F(1sufnNOG`@?Wy@vrY`GGPX0>BzkMdn@Ri)KFZ+dci{J?rp@x9$w zMk07+Ay#ZzRa-gD_$ZE3T1cj9526V&e2{0)nr8(W=dnmK-U#vVT&DJWgc_+gleY_+ zlL=8YWr%spg|Zfm;?A<>k9w&4o|*EA(Qi$;VQ2l_l#krvrO}^_-a6*Sp`!}@+UWO2 ze{s?`M!zt6&8gSj&MTvTnDVLH`DFCBuG?w!2cy3ly>0Y!qjlFcMdm-M9&rRl%5``A yj%#Scg^yjM;CIis^-$VlOL(;7e&EC<*#87JJIU`{*K2#0)(?FEhl0O<4SxWC4#, 2011 +# Kowit Charoenratchatabhan , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "python model class name" + +msgid "content type" +msgstr "content type" + +msgid "content types" +msgstr "content types" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "ประเภทของเนื้อหา %(ct_id)s ไม่มีอ็อบเจ็กที่มีรูปแบบที่เกี่ยวข้อง" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "ไม่มีประเภทของเนื้อหา %(ct_id)s วัตถุ %(obj_id)s" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "%(ct_name)s ไม่มีเมธอด get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0bafb0705430629b3c90dbc4540d6b82c8e10e45 GIT binary patch literal 1068 zcmaiy&ubGw6vs!cRaQMH1wlMKK_Q_`lLkt|wh^(mP%v0Z^i&9w-RWk!vop)gY}@rD zc=71PgCN$wq9=O_0sSXDi2sB)-)>@>YQIQD0FvP_q{ZX(H#4OUO3zI`TELc>fl88~G8LppH??Xy3my^6wz$(RRo+o=P7bzI(4 zW*zMqrmSR68y~j0&1B3>4y&fvT9z`S_a8+G6LKNY$wQ1$QN|)pJDepxbTShsTtTJp zTKcdh504ca_CSJc|&hOVnXheAa@G<(8L+Qb~OwQGYv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.po new file mode 100644 index 000000000..44d8f8060 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tk/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Resulkary , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-07 20:28+0000\n" +"Last-Translator: Resulkary \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "Mazmunyň görnüşleri" + +msgid "python model class name" +msgstr "python model synpynyň ady" + +msgid "content type" +msgstr "mazmunyň görnüşi" + +msgid "content types" +msgstr "mazmunyň görnüşleri" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Mazmun görnüşi %(ct_id)s obýekti bilen baglanyşykly model ýok" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "Mazmun görnüşi %(ct_id)s %(obj_id)s ýok" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s obýektlerde get_absolute_url() metody ýok" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..18bcd945894cfda7348f10f83d3192d4e12472e1 GIT binary patch literal 1057 zcmaiy&ubGw6vszxYgvDwB6!fly9fy~&88rxTkE0PO2J?(t0y5$b|<^j%+4$`v;A=s z{0F>v5XBz7noCc;C4&AF9t8gb{{Y`6F>OHTz?aXynfbo=mU%yK%)KYL7EyOluThs! zpHSucj(Ujtfx3cPI7dhWc@udb*+gDOzD1Vj?~u2UpOG(6N2sS5FJ2(zI$=3q%JPMD=JgV#)Eri^yM6Rt^#;X=|XNO15Laf!V zHy<3NY?lLrgu6EDSS<_3+l7&pDrDTHIwp^`a$GqG4{~m&k;4c^c||qTN|r~~j?&*?Vb73Ed>1d9i-?AKSQze4K|z;6V; zf6vF|J!96<&@g2sbJ_&3u8VCQ_3%I?1xq*$Im-eF3)2%eg-YsN9@J`kdwWZ+w23a? zUy5{A8~5`Ma$>JJQ>%K-t>(r_=k+Duo4f!mUmyU-_gyWQOsG|eQf4f7YcIo1+Bmsa z*6MOYH&mo!p^^X^9pR>JVh-cAWMP=3o7!YH0F{qIySBUvE+WvR#^=EFlF(L#n_2Vcf zd^alGB->d=D?mu`?XV{#SFtccW*CiUWwtLOCOwTim7 DeO*ht literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..b33b267eb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2019 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:00+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Content Types" +msgstr "İçerik Türleri" + +msgid "python model class name" +msgstr "python model sınıfı adı" + +msgid "content type" +msgstr "içerik türü" + +msgid "content types" +msgstr "içerik türleri" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "İçerik türü %(ct_id)s nesnesi ilişkilendirilmiş modele sahip değil" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "İçerik türü %(ct_id)s nesne %(obj_id)s mevcut değil" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s nesneleri bir get_absolute_url() yöntemine sahip değiller" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f45a1f2446bd6da992db11897a5c0904ab08c98c GIT binary patch literal 659 zcmZvYF>ezw6vqve|J@@A>`T^Rs{5oO_SJ=78J48gLzW0n}Cj^S~?M z2Ji;B1snm#R}lJinJ-^O=nll&;1|L7!9y8=L)UPJw$ Ha3|, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "модель классының исеме" + +msgid "content type" +msgstr "эчтәлек тибы" + +msgid "content types" +msgstr "эчтәлек тиблары" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "content types" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5ca84fad7ec5836e5ce8d9c331d93c465cc005f3 GIT binary patch literal 1404 zcmah}&u1;E0@i?sfa^ee{ul5l@DZ^76=N@eHSmLb z8T%gi2T%hg@B;8X@LQm_uYW!ZB=A3hC>^W=#nXNuWEsjBQhI%V4P?j0LcNgkmMANd zi`PV`6-6@r@8$zdO};FMQ$y$lzNlo<(PE*KC1Yi33Eh+tJ1bKyQcd;iZJ`ECgHca6 zjs~jOfc!#lCz3+-9mHy^^#2q#xuR4OS4xI4*CL{pj6}l1!ra=85XIWp(O%lmqcA}! z*%8@%ChdgIT;yC9nTloVQ*@1|4OzM<+A`BlO*P`k`K{AXPF?y`n*ZIoD3)WJ>YRhQ zPgS?-Ij-kaU2E*e40y=nA2sM$gmm5G#y($zFhD#jTVoS z@ldvAP?|P6ydj*r;4PmnEoD4TW1iAjQ|q>0sjRH5jB6_$Ulpsirqb_u7m`At(pjpM zOSQS$>~K17+$|Mf$+2I_CoNWWrJcZIiozz(l+eMY`gvz^m}kANip-f!Lm97r` zSPvTYsk2m?PdXV-obxhkDWB4IkE&o|iu#YiSW3spqaYxcjvuEUb1n6T)TJN6JvxmX zhV3*DWr$+RDEq`9=IySx%{DtD${%0LUYphuy6gEy(aNXk_`B#`;*p_tVEgPue%HJ-PjIk}PVQS* hjEOei`4Fs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..a798bb107 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Sergey Lysach , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-20 00:17+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Content Types" +msgstr "Типи вмісту" + +msgid "python model class name" +msgstr "імʼя класу моделі" + +msgid "content type" +msgstr "тип вмісту" + +msgid "content types" +msgstr "типи вмісту" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Тип вмісту %(ct_id)s не має пов'язанної моделі" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "" +"Обʼєкт з ідентифікатором %(ct_id)s, що має тип вмісту %(obj_id)s не існує" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "Обʼєкт типу %(ct_name)s не має методу get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f6ff9198d73058a12750d6b77c20abd42f59b21d GIT binary patch literal 671 zcmZXQzi-n(6vq!JivH+FH>JSyv1clr}>iM$>m9#=yu&22o{~AN`Q#()+ zG8Ksw!ju~Wl4pYSv>J-g(!Gej651q6GKhv;#>zPqxzd()O`JsZc@Y~LCLF-Lo|L(}3&`vKcG*9WS(wSi(^O-fBwKmLOJIfLtcfen1 zJER(y->PwSQJur|>c=Hi@5}3I{NLwtQYY|, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content Types" +msgstr "" + +msgid "python model class name" +msgstr "پائثان کے ماڈل کی کلاس کا نام" + +msgid "content type" +msgstr "مضمون کی قسم" + +msgid "content types" +msgstr "مضمون کی اقسام" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "" + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1cc06c6f9e29e07c48bd2c3f07bafb1d87a71978 GIT binary patch literal 1155 zcmah{O=}cE5FIssunxPo|u zIE#3XF!mGSB7PyxBZiJy)=lJL&@;T(k$mahuJB5LT*p0KQo$WM{$ z$n8G=LB4=~b*RTn$d}O%kTKOlvQ8pSBaEFwU`p4H2a!=53%%FWO@D4rr3XuvXU)qPW0lyi!c?;cvd}?W;#;y z$udh7m%;^qor*w~7Fi-wO%_zZeR4Mo6lq8oO7({gQcW4v7)$P9br;5MXM)%caVEiW zTzhiNc5E91$s%iVqq!G1N$gu>{5m*O?!=8T8?E$!Doq+G6)K`yrY@K>EF*3=snD%> zc8i8mmOWX{Htt}!2r?Ql(qJ@pVVN^+CQ%GVLah_GQrXhCCF{qFB7ez2?`{|Q2NCoZroV<8 zVP^-gyv{dB!rkrNHaa>i@=x9&%VXd_)dAlOscI9kQb(cM}zZFd+P1v@;DddQ9Ld=?ND`MU(-&JKi~ LFCv8AhFgCDOGtRu literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..6dbef52b5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tran , 2011 +# Tran Van , 2013 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "Các loại nội dung" + +msgid "python model class name" +msgstr "tên lớp mô hình python" + +msgid "content type" +msgstr "kiểu nội dung" + +msgid "content types" +msgstr "kiểu nội dung" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "Đối tượng của kiểu nội dung %(ct_id)s không có model tương ứng" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" +msgstr "Đối tượng %(obj_id)s của Kiểu nội dung %(ct_id)s không tồn tại." + +#, python-format +msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgstr "Đối tượng %(ct_name)s không có phương thức get_absolute_url()" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7f9dc8cc25bc79384bb524205872a97977d95038 GIT binary patch literal 1015 zcmah{-%Aux6rRc~rh2KMmmbbbv`gIGako@PjmQ*)wnVlbB3Q07*O`&odxyDqUG1qT zgDAm=lnN1i6QaU|NcsozALy}%YF7UY&)r#9w;sCi@!jvtcYa*v{5;#WWZ*f8xQKX& zIE7e2=<^*hh}cG)L3AH6jDF~XW2x@}at^hJ ztmDhA_;!nbAfLndZ)8kupA)THH}X+L7veZV&y7~YxRh~Jh0`j_N)VIN%uy0t!GAq| ztH7r-3@CU^Rp_J?VNJ10EeA08varD%ze^_AOrWjg7B;t`U==K46^V5ftb$!E zUa|0)x2aU598)esszhuJIi;%xQ*2ge=F@TaDQuO=Kk_TXck)@YG*%ipcw0}-GF$(M z=znB`VzVkAg*4y;;P^C_Oby*DkCOfapKdqBVlu)V;Rf8Zp?@+^?TKw@_A, 2011 +# Ronald White , 2014 +# slene , 2011 +# wolf ice , 2020 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-03-04 02:33+0000\n" +"Last-Translator: wolf ice \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "内容类型" + +msgid "python model class name" +msgstr "python 模型类名" + +msgid "content type" +msgstr "内容类型" + +msgid "content types" +msgstr "内容类型" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "内容类型 %(ct_id)s 对象没有关联的模型" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "内容类型%(ct_id)s对象%(obj_id)s不存在" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s对象不包含get_absolute_url()方法" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c1e8b8c35b941782fbc9d54937453aa1e80c22c GIT binary patch literal 1046 zcmaiy&ui2`6vw01Dp4;Yh~Qx^!Y(r1tRU=WTM=su1s6++dJ&dsGEJr=Ga)nSwmm5- zTBJ~fRx3-P2elqlv`{Sm1Nu*RDBW#)@*nWvo85KW6`=#)eDWsmCwV{5_ADB3PJ%9i z?t@N&Y9M{SgZe=~KxaU`M+~C?JO{iAECWvi9|86E1>kw$3UCUv0n&c>Sj*1^YC8s& zfN$IPTW$UVUV!`GKnU%e6YaNN;89Qy=r~CC4X%c9DdVaNClSp`B*rJHt0eLS-+HjD zP(Y?ABFLwzLdK;CQ$;Ij5@xa}qAC!cF(|mATp?#Brm|xxuuwBE^Ez4K0@7ESH=dxf zRe?@3sSXJYh(uflLrG+V zC*xF7lyL~F5}rkwK&jZy<*LW`l}zFPAmTBjus}3G;oH z+5S^l|0x?OI<0bXNEk06Hz0|mYT%ADj0^jIy4(a!@DO)}2Xok{FwRt`Wg9hXnWG^L z7UE%%MAAk)Zklo+UqY?d0jp$o?by!i$2)WHx4&&PzPxDE=Ki-_jit@T`l3;P@~-}I zb8mH}zVf`wIIvrtYzNnC`|EuD!>f92?a-)J4|^|byAMA>s@?Ucjiu$r+Uma*yApM8 Qm+tS`oBG21&e~_=4=#^p2LJ#7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..e6e918b20 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,44 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# ilay , 2012 +# Jannis Leidel , 2011 +# Tzu-ping Chung , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:00+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Content Types" +msgstr "內容類型" + +msgid "python model class name" +msgstr "python model 類別名稱" + +msgid "content type" +msgstr "內容類型" + +msgid "content types" +msgstr "內容類型" + +#, python-format +msgid "Content type %(ct_id)s object has no associated model" +msgstr "內容類型 %(ct_id)s 的物件沒有關聯的資料模型" + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" +msgstr "內容類型 %(ct_id)s 的物件 %(obj_id)s 不存在" + +#, python-format +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" +msgstr "%(ct_name)s 的物件沒有 get_absolute_url() 方法" diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/management/__init__.py b/venv/Lib/site-packages/django/contrib/contenttypes/management/__init__.py new file mode 100644 index 000000000..903b9ab1a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/management/__init__.py @@ -0,0 +1,145 @@ +from django.apps import apps as global_apps +from django.db import DEFAULT_DB_ALIAS, IntegrityError, migrations, router, transaction + + +class RenameContentType(migrations.RunPython): + def __init__(self, app_label, old_model, new_model): + self.app_label = app_label + self.old_model = old_model + self.new_model = new_model + super().__init__(self.rename_forward, self.rename_backward) + + def _rename(self, apps, schema_editor, old_model, new_model): + ContentType = apps.get_model("contenttypes", "ContentType") + db = schema_editor.connection.alias + if not router.allow_migrate_model(db, ContentType): + return + + try: + content_type = ContentType.objects.db_manager(db).get_by_natural_key( + self.app_label, old_model + ) + except ContentType.DoesNotExist: + pass + else: + content_type.model = new_model + try: + with transaction.atomic(using=db): + content_type.save(using=db, update_fields={"model"}) + except IntegrityError: + # Gracefully fallback if a stale content type causes a + # conflict as remove_stale_contenttypes will take care of + # asking the user what should be done next. + content_type.model = old_model + else: + # Clear the cache as the `get_by_natural_key()` call will cache + # the renamed ContentType instance by its old model name. + ContentType.objects.clear_cache() + + def rename_forward(self, apps, schema_editor): + self._rename(apps, schema_editor, self.old_model, self.new_model) + + def rename_backward(self, apps, schema_editor): + self._rename(apps, schema_editor, self.new_model, self.old_model) + + +def inject_rename_contenttypes_operations( + plan=None, apps=global_apps, using=DEFAULT_DB_ALIAS, **kwargs +): + """ + Insert a `RenameContentType` operation after every planned `RenameModel` + operation. + """ + if plan is None: + return + + # Determine whether or not the ContentType model is available. + try: + ContentType = apps.get_model("contenttypes", "ContentType") + except LookupError: + available = False + else: + if not router.allow_migrate_model(using, ContentType): + return + available = True + + for migration, backward in plan: + if (migration.app_label, migration.name) == ("contenttypes", "0001_initial"): + # There's no point in going forward if the initial contenttypes + # migration is unapplied as the ContentType model will be + # unavailable from this point. + if backward: + break + else: + available = True + continue + # The ContentType model is not available yet. + if not available: + continue + inserts = [] + for index, operation in enumerate(migration.operations): + if isinstance(operation, migrations.RenameModel): + operation = RenameContentType( + migration.app_label, + operation.old_name_lower, + operation.new_name_lower, + ) + inserts.append((index + 1, operation)) + for inserted, (index, operation) in enumerate(inserts): + migration.operations.insert(inserted + index, operation) + + +def get_contenttypes_and_models(app_config, using, ContentType): + if not router.allow_migrate_model(using, ContentType): + return None, None + + ContentType.objects.clear_cache() + + content_types = { + ct.model: ct + for ct in ContentType.objects.using(using).filter(app_label=app_config.label) + } + app_models = {model._meta.model_name: model for model in app_config.get_models()} + return content_types, app_models + + +def create_contenttypes( + app_config, + verbosity=2, + interactive=True, + using=DEFAULT_DB_ALIAS, + apps=global_apps, + **kwargs, +): + """ + Create content types for models in the given app. + """ + if not app_config.models_module: + return + + app_label = app_config.label + try: + app_config = apps.get_app_config(app_label) + ContentType = apps.get_model("contenttypes", "ContentType") + except LookupError: + return + + content_types, app_models = get_contenttypes_and_models( + app_config, using, ContentType + ) + + if not app_models: + return + + cts = [ + ContentType( + app_label=app_label, + model=model_name, + ) + for (model_name, model) in app_models.items() + if model_name not in content_types + ] + ContentType.objects.using(using).bulk_create(cts) + if verbosity >= 2: + for ct in cts: + print("Adding content type '%s | %s'" % (ct.app_label, ct.model)) diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa05debee9bb101e27cab2a042cd6a73eac428ac GIT binary patch literal 4057 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71fe53bfc76eaa49ee4218176291c3a9ad1c5312 GIT binary patch literal 3661 zcmZ`+&2QYs73XldU)&FUSd#6;C6(oCrLZ)#Tub+@usp1|72Pj~ z)nU!84eM@Qk1L@)Y`6_(d}8n_uYG0kny9=exlN4g+{V}z4UAiyZ5y4&x8P`Oby#Nk zqme?}cpOKGh?1Stk)YutUx~-@aOg+8V`lT4A3xdn?CFlT`N-RN`sv1YR*~^I5fWSL zkK-^D{UnxsI`raaV(<_}-9jY{mvO^2IpgM6hFjt#ZlSe!83I+ZYQe2fMCTv%t0<3A z)Lm358^BK7Bw}9Xm6v6f&s7t~YrOulRE%xj;7#7*?U&kiU@^Bfsjsg`aS)Bh$;77a zy6$HU1>uFa=Z8vUjR1C#em@D0#pLde2t(y;4*Y08c9PiHdbZ0Fva^gM5k4~M#AmZIlDXY*aagN zWHR0qp&+JugVWD1-brxt3W^YM5bZm0gy9}^g~H-Eh{q~C#WE3vf;)6Br1BHzz&{pF zPl(8oVi+G|O;dfkwY{_P^y$Z&-p2Fi+pvdhKtS21ibRFzO`mhmm;2)(JWrPMNlS@v zFRP4v3FCfk$ZMGX?$zVFyPsjKcK;O(A!l(BGyNK|IptTYM1MKyh9qxpr>0f){5VOr(+KZf_d%t>Q1hYr|skwcGA1M zqtmQ)QFukVsh^^%K8$;ELS*uV=|Z}|7Y?|d5w2F5_xQrsKpXOLG*n9XYULx0%g{(~+N5>8f(iF58&2Y~HRbnl08AE5RC zoqY2p)FoPqpc1^J(Su)sPRn=8nB4wx`OddbZaMhYp@|Mh8kID{uBz@T1*-B`0i7nx z`L>(#&Y_81PpUgwqyK^QtPb$scN9f0;_cqLZ(NdTJ53{K*4$S;tSfOlL5g`04s<~c?ermw!S~*d^C=5J;ONa zbZvVBrhsuAH7+_QKBPm`$<6UTjel!@x<@o?pcqF)_zMW5P7n{*qIj)4`8j10&f2L^ zYjhHsA&ADYYl54ywhH3+Z7dXswV? z6`7J-?dM(O2DqrK4C0~6N}-6dvNseol|zO#K*Ew$RKjtYSvhA@&hwT^em$K8*rg_0G_en>6|=(3*XA4RjroQ7+OA{7%!c`2>}p$P&7^Z_ z&Std7w#@HpwI(yau>Lt|UxuWuPC2W2UgQsj=Vi7>UNa7<-}Jnru^;9uavAbUN=Pp# zb&ZAu&XVFbg#iudH7M4+uIGL{K_;?y6J&%NOLnky3Af3GDP%lDQ3T*Rr8g&kv;KA|_Ky;=@^@}utC= 2: + self.stdout.write( + "Deleting stale content type '%s | %s'" + % (ct.app_label, ct.model) + ) + ct.delete() + else: + if verbosity >= 2: + self.stdout.write("Stale content types remain.") + + +class NoFastDeleteCollector(Collector): + def can_fast_delete(self, *args, **kwargs): + """ + Always load related objects to display them when showing confirmation. + """ + return False diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0001_initial.py new file mode 100644 index 000000000..5468fb6a0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0001_initial.py @@ -0,0 +1,46 @@ +import django.contrib.contenttypes.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="ContentType", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=100)), + ("app_label", models.CharField(max_length=100)), + ( + "model", + models.CharField( + max_length=100, verbose_name="python model class name" + ), + ), + ], + options={ + "ordering": ("name",), + "db_table": "django_content_type", + "verbose_name": "content type", + "verbose_name_plural": "content types", + }, + bases=(models.Model,), + managers=[ + ("objects", django.contrib.contenttypes.models.ContentTypeManager()), + ], + ), + migrations.AlterUniqueTogether( + name="contenttype", + unique_together={("app_label", "model")}, + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0002_remove_content_type_name.py b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0002_remove_content_type_name.py new file mode 100644 index 000000000..3bee3a864 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/0002_remove_content_type_name.py @@ -0,0 +1,42 @@ +from django.db import migrations, models + + +def add_legacy_name(apps, schema_editor): + ContentType = apps.get_model("contenttypes", "ContentType") + for ct in ContentType.objects.all(): + try: + ct.name = apps.get_model(ct.app_label, ct.model)._meta.object_name + except LookupError: + ct.name = ct.model + ct.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ("contenttypes", "0001_initial"), + ] + + operations = [ + migrations.AlterModelOptions( + name="contenttype", + options={ + "verbose_name": "content type", + "verbose_name_plural": "content types", + }, + ), + migrations.AlterField( + model_name="contenttype", + name="name", + field=models.CharField(max_length=100, null=True), + ), + migrations.RunPython( + migrations.RunPython.noop, + add_legacy_name, + hints={"model_name": "contenttype"}, + ), + migrations.RemoveField( + model_name="contenttype", + name="name", + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95646df699625242cc6fdbc03351c783265144b0 GIT binary patch literal 1199 zcmY+Dy>Hw$6u>2l(n$(?usKq-5mW zv0ZQJ+79j5e~CcRpgY{%GbnyG@o8Ph@eaHF32zNh< z!ZZBUA$GzMZs{-=M^ciN$GjC~)OB7s!V~m+M^NyV{&ybph5NM=`|t3M^D-uSxGHkV z+oGWK#5G)7Aj_|Ps8+t*+0M|khifH4a zH2j}5+DcBWJ`9(m<#-wVJo&}JGp=~B@zLIn_&^*i zT=8&2a>91Shv>~C9i82H!A7&XYN2Y+*9~Y=2u(geIX#c59$$jYY6WS6b~CU+$jQx?`zAaa$n zP-JP#vl6UMwtv^Jv?)8uOFgKwCCpnD`_`fkE($1x!u6)lwV!bXiiIm)@f@ULqpd+> z9ht|5d19DJ&%E1J#hVV&w$7nlfP5M6=`gjyOjA8fQ*^v50q5g1ebe#MIBz5Y4O9ZE zc>ziiiRNXg}++ zORjgK9hVU5VtY@n$=~F`&0Y}f5%Qk?NvFi@ zUWdP1jd8#}?tu=sKz6(VIE-Ca0V6)M`&a%h)oDMDDGmM1ndNs~CWlYv=n zdufmCH{h^)&w2lT*0WiHVEy^@xA{wo(C<#!USLCa zf$Tmoi6pL2jTx>9BN#~{gV%@!50IoXe2rwNa7kYUjLOm1C>_6nJ18YXQWpy&xc|L8?AH2R>@YdnXiq>( z6BaL2$9BR3>U7 zr;-#{&b$?5IhH%;WI@?X?!t8UhWODn-cn**zHAC*e!`2U=n7G>$=2{suaWSftNL_y zb>uah5;k2aGuL+05BC1H#@nhlqJkLi4FObI4{@)(kzjh_u`hmt_BD%c3Bc&9Dh=R0 zxHsUtxw#ttP^e0pn{X$^L%1wp*zjAYdxzt6XNb7J!1<7H2hP4yAWu1e-iyj1&S_G$ zs*$S63uTRaV(iA}Rj14&7x1f1ek}2(`#xmgeBz^}FkWZzN#8tPcT3$c+GySSk+R8& z2Z(nW65Xn+*X;4S#dcl7H-I@D+e2UxA_09zLxKq*n7)NQ1{okj|DoXsq>-1LjlPZk t@VAfCki{GP?#sEa!?;9!GTvh=rVC|U;32xRY0GCAG&=&ehoazS@-MJkQ)mDH literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d21bc6371bdd493fb5dbd14f6aef9cd019d3cca5 GIT binary patch literal 212 zcmYk0u?oUK5JWGMLWF#XMNBUuf}$28qS!5lOLByb<}TcBBKahLNwD$y2@tXhE18~Ut_ZS1>fA)B(QGmKru)Hdr6?*fx02ClisBeG WavYDU_THbACaW)M+6|(fgD*Z|V?18~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/models.py b/venv/Lib/site-packages/django/contrib/contenttypes/models.py new file mode 100644 index 000000000..ef4f30556 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/models.py @@ -0,0 +1,182 @@ +from collections import defaultdict + +from django.apps import apps +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class ContentTypeManager(models.Manager): + use_in_migrations = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Cache shared by all the get_for_* methods to speed up + # ContentType retrieval. + self._cache = {} + + def get_by_natural_key(self, app_label, model): + try: + ct = self._cache[self.db][(app_label, model)] + except KeyError: + ct = self.get(app_label=app_label, model=model) + self._add_to_cache(self.db, ct) + return ct + + def _get_opts(self, model, for_concrete_model): + if for_concrete_model: + model = model._meta.concrete_model + return model._meta + + def _get_from_cache(self, opts): + key = (opts.app_label, opts.model_name) + return self._cache[self.db][key] + + def get_for_model(self, model, for_concrete_model=True): + """ + Return the ContentType object for a given model, creating the + ContentType if necessary. Lookups are cached so that subsequent lookups + for the same model don't hit the database. + """ + opts = self._get_opts(model, for_concrete_model) + try: + return self._get_from_cache(opts) + except KeyError: + pass + + # The ContentType entry was not found in the cache, therefore we + # proceed to load or create it. + try: + # Start with get() and not get_or_create() in order to use + # the db_for_read (see #20401). + ct = self.get(app_label=opts.app_label, model=opts.model_name) + except self.model.DoesNotExist: + # Not found in the database; we proceed to create it. This time + # use get_or_create to take care of any race conditions. + ct, created = self.get_or_create( + app_label=opts.app_label, + model=opts.model_name, + ) + self._add_to_cache(self.db, ct) + return ct + + def get_for_models(self, *models, for_concrete_models=True): + """ + Given *models, return a dictionary mapping {model: content_type}. + """ + results = {} + # Models that aren't already in the cache. + needed_app_labels = set() + needed_models = set() + # Mapping of opts to the list of models requiring it. + needed_opts = defaultdict(list) + for model in models: + opts = self._get_opts(model, for_concrete_models) + try: + ct = self._get_from_cache(opts) + except KeyError: + needed_app_labels.add(opts.app_label) + needed_models.add(opts.model_name) + needed_opts[opts].append(model) + else: + results[model] = ct + if needed_opts: + # Lookup required content types from the DB. + cts = self.filter(app_label__in=needed_app_labels, model__in=needed_models) + for ct in cts: + opts_models = needed_opts.pop(ct.model_class()._meta, []) + for model in opts_models: + results[model] = ct + self._add_to_cache(self.db, ct) + # Create content types that weren't in the cache or DB. + for opts, opts_models in needed_opts.items(): + ct = self.create( + app_label=opts.app_label, + model=opts.model_name, + ) + self._add_to_cache(self.db, ct) + for model in opts_models: + results[model] = ct + return results + + def get_for_id(self, id): + """ + Lookup a ContentType by ID. Use the same shared cache as get_for_model + (though ContentTypes are not created on-the-fly by get_by_id). + """ + try: + ct = self._cache[self.db][id] + except KeyError: + # This could raise a DoesNotExist; that's correct behavior and will + # make sure that only correct ctypes get stored in the cache dict. + ct = self.get(pk=id) + self._add_to_cache(self.db, ct) + return ct + + def clear_cache(self): + """ + Clear out the content-type cache. + """ + self._cache.clear() + + def _add_to_cache(self, using, ct): + """Insert a ContentType into the cache.""" + # Note it's possible for ContentType objects to be stale; model_class() + # will return None. Hence, there is no reliance on + # model._meta.app_label here, just using the model fields instead. + key = (ct.app_label, ct.model) + self._cache.setdefault(using, {})[key] = ct + self._cache.setdefault(using, {})[ct.id] = ct + + +class ContentType(models.Model): + app_label = models.CharField(max_length=100) + model = models.CharField(_("python model class name"), max_length=100) + objects = ContentTypeManager() + + class Meta: + verbose_name = _("content type") + verbose_name_plural = _("content types") + db_table = "django_content_type" + unique_together = [["app_label", "model"]] + + def __str__(self): + return self.app_labeled_name + + @property + def name(self): + model = self.model_class() + if not model: + return self.model + return str(model._meta.verbose_name) + + @property + def app_labeled_name(self): + model = self.model_class() + if not model: + return self.model + return "%s | %s" % (model._meta.app_label, model._meta.verbose_name) + + def model_class(self): + """Return the model class for this type of content.""" + try: + return apps.get_model(self.app_label, self.model) + except LookupError: + return None + + def get_object_for_this_type(self, **kwargs): + """ + Return an object of this type for the keyword arguments given. + Basically, this is a proxy around this object_type's get_object() model + method. The ObjectNotExist exception, if thrown, will not be caught, + so code that calls this method should catch it. + """ + return self.model_class()._base_manager.using(self._state.db).get(**kwargs) + + def get_all_objects_for_this_type(self, **kwargs): + """ + Return all objects of this type for the keyword arguments given. + """ + return self.model_class()._base_manager.using(self._state.db).filter(**kwargs) + + def natural_key(self): + return (self.app_label, self.model) diff --git a/venv/Lib/site-packages/django/contrib/contenttypes/views.py b/venv/Lib/site-packages/django/contrib/contenttypes/views.py new file mode 100644 index 000000000..bfde73c56 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/contenttypes/views.py @@ -0,0 +1,88 @@ +from django.apps import apps +from django.contrib.contenttypes.models import ContentType +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ObjectDoesNotExist +from django.http import Http404, HttpResponseRedirect +from django.utils.translation import gettext as _ + + +def shortcut(request, content_type_id, object_id): + """ + Redirect to an object's page based on a content-type ID and an object ID. + """ + # Look up the object, making sure it's got a get_absolute_url() function. + try: + content_type = ContentType.objects.get(pk=content_type_id) + if not content_type.model_class(): + raise Http404( + _("Content type %(ct_id)s object has no associated model") + % {"ct_id": content_type_id} + ) + obj = content_type.get_object_for_this_type(pk=object_id) + except (ObjectDoesNotExist, ValueError): + raise Http404( + _("Content type %(ct_id)s object %(obj_id)s doesn’t exist") + % {"ct_id": content_type_id, "obj_id": object_id} + ) + + try: + get_absolute_url = obj.get_absolute_url + except AttributeError: + raise Http404( + _("%(ct_name)s objects don’t have a get_absolute_url() method") + % {"ct_name": content_type.name} + ) + absurl = get_absolute_url() + + # Try to figure out the object's domain, so we can do a cross-site redirect + # if necessary. + + # If the object actually defines a domain, we're done. + if absurl.startswith(("http://", "https://", "//")): + return HttpResponseRedirect(absurl) + + # Otherwise, we need to introspect the object's relationships for a + # relation to the Site object + try: + object_domain = get_current_site(request).domain + except ObjectDoesNotExist: + object_domain = None + + if apps.is_installed("django.contrib.sites"): + Site = apps.get_model("sites.Site") + opts = obj._meta + + for field in opts.many_to_many: + # Look for a many-to-many relationship to Site. + if field.remote_field.model is Site: + site_qs = getattr(obj, field.name).all() + if object_domain and site_qs.filter(domain=object_domain).exists(): + # The current site's domain matches a site attached to the + # object. + break + # Caveat: In the case of multiple related Sites, this just + # selects the *first* one, which is arbitrary. + site = site_qs.first() + if site: + object_domain = site.domain + break + else: + # No many-to-many relationship to Site found. Look for a + # many-to-one relationship to Site. + for field in obj._meta.fields: + if field.remote_field and field.remote_field.model is Site: + try: + site = getattr(obj, field.name) + except Site.DoesNotExist: + continue + if site is not None: + object_domain = site.domain + break + + # If all that malarkey found an object domain, use it. Otherwise, fall back + # to whatever get_absolute_url() returned. + if object_domain is not None: + protocol = request.scheme + return HttpResponseRedirect("%s://%s%s" % (protocol, object_domain, absurl)) + else: + return HttpResponseRedirect(absurl) diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__init__.py b/venv/Lib/site-packages/django/contrib/flatpages/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c58474e55c501b56c7276b1012fc8c83a8fa7059 GIT binary patch literal 198 zcmd1j<>g`kf)81esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UT25j~0Z2kWK0Y%qvm`!Vub}c4hfQvNN@-52 N9momAOhAH#0RZcDHf#U@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/admin.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbfb65c9efb965630dbdaebb0cee4e259c560a68 GIT binary patch literal 917 zcmZ`%J8#u66t?reX)Z!Mq)xz^p|^X55EZCpfT{wqSP@okd~$Jdl3UxUXxH*H7+~Z_ z@JAvsF|jc-R2(OzlmSOM{*HZo9^X0Le4Y|qKi_;?e)S0X?v(2*MCCF5<`9J-f-2Hb zMybP|@*1D{BlcC$ge)9!prR&b2_-;3%^>_t_lXEa^nr*7=uvv^pHsFW;#VY3exO&9 z(;+NHBU=R7o+|CST)|$a8`Kl0AENH=R$wi>w_KHHrLyW*s5D-aL5wUu3Ka>|mbQ>t7W$i3mNhLto{m+q2lIPRqe!R8j4 zHP#5cEgNSSSE@7yjE=F6+|vnedN$z=hck!MA>rc-&WDuqrW3sa#2M$ueW{!;&b5!G zLr^1?1LbTs)dAM9OkpZqNQ0qI*~X~VQd!V!ZlKiFTRs_oA^Nrp>cp@5$xiXwfHuX; z-k7p@+Esmn6qsUP+GqW;*pu4WtwY@%L1l{*Xitjga#=Wnw$^3!4*O^daa6XeZrjnP z<#M~eY`EDTXJD~D)e#1B)tgNe2?@N^i#%L3xbQB5iy#eXLPx8EJYzQ|hl@*x8poKh zd;cCTuA(d)8)jsN-T$u<@(If5z`5GIwCb%?W`PZC4W^7u)NbVTEfhmCH5chiU%02^ f-=x0*eT)DV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe6d682d34a4361a4496a92a8d44e3fd23b0ffd0 GIT binary patch literal 600 zcmYjO!EV$r5VaF$yWOTjLL3m{z;z{>y(5HL6>T}7sseGbEG#FUU8Oj2u$>j%Yx^_& zQY22CxN$}t7;hHnNPd~;@jQE8?D6r8VEp{}t^AGO?~&XOhU65Ne~zGuriL_>QyTNc zBu&a0B^N}en%xo2fZnD&)7g76pZvfMGN;4gS=XK0c2%#D; z6qkRB0EAObc%ms!b;22BI=!WQq8X}Z!-J(!;YzK+kK)@W`dYPXTj;WAtOnzYvp(2m z4MuMt?`xH9gR9G8g}q(u-Oi%Svz^Z6{9u?$*{TMl9A;9YOmAYIOZmB1W~}gs8dj<| zK`PXjt9Ze{Vr`(3=NoXP^{|uqN?f#e2fyI_h4|pXdGW6IUWwPX>KkZ-7Z-JS)0bjd zJ0DK2oV|uBhz+zG@wP67uLGQPs`?b)E5<<<`#~1}23e@C^F?>#;vdVRhf{TNuk6uw^eu9vb IoIXnb02!pGmFGPwvJao`&6SSqF8d$!cq;pX#sX)g4!8LT=TM? z8OrivT?CPVJUPE01tg#^`4Rmi1p1Ob<*koJfJXh!a95TRn2Q;nnL`fG`Mz`6a&fU^ z;rh?xf9?FUZCU@O#rey{;(ZMD7!$WR%dDJ5jFD_-cJ4%uk)6!Vy~s1NoB4SwY8lzf zg1jBIjqF42L<`LN(Bdr~ytH^A*r(u&%AiC@CK zV|2^>GIR@{Tdoy#;oVBzB@f2%;2zwoosS>h|AxbcN%!$zZx5cW4f=okykauq<>k)N5aV`uBdgl{^uls-y^Y8SW0aTb2Jk&Bt zGg_!DQTsym>sDGE5Mq%c|g5 z4NEDo;O5Nt=7)!+40W1ue5U8sUY6{LtnTE=VVsF#Pw&^B6no;ZZtsh191}y)k|56F zTqp%F)DIY9K;V50bp_LFh9Z}<$m2G!bS9V2W7*#lI;mT6oMc%XZ}#?@DrT*a=LzTLfhXYjFtBHFCLq-HJVKJwmz?Y}?g3-h6X(y&<@gv+yzz)vujOW|RSYE}aC7IuIYFCMDw{{b`r)vMnGrE7p>UJCt5wa?d8yeoC zH-3WY=NPJsX$9EW_${Bhr<1D}Vqk8>1=I*Z8{;k=u#8Cqv$Dk*?)Cv;VsB4+4M+Vv zJVf2~2M;#4H{wV4*B^Zpb+&%Lv2lO%FY6CCdrXq8 zucJsBAAX9xn;3>+--Zw0O>SPa{tdug@P<607%<-a0RlKiNxp8qKpY&Sbe%A@qHXZ+ zpnSR9du4xyI5>7sEcrH`K=R;;x6KnMY$(Fb6AU;6+wwY2{FbdvZlE%SC=+?Al&LA- zqd&Sj(;&r7)oI8^<#mV1rb+mN_vg+vMWY|B&JUO?W+(V{cZf3!!DCeSr0yu4NUffw zdS805PEv+QLbDD;!HuG4H;|L{-^0Cbo6}-M>n&&%B~^!Y5I;VR?^fKokQV^Q1eQl3E5gY}a;bDu+kI0R1N&37rcRhVQFp-8hyWxuX>IuqE&OpJ6EyNgNx@$`=*vyjZIwGzGm-nd zX@-_l2WbJSi=mLeq$gYAaF|tG)PD2%hWwvFC8o}s7bonxN-i2_AMALdBnTmFJ3 zQ_xKo{u;~QU?@t_F6*)-Wa2WrV&*0i0_OkEKJBz7D|2M1SNEIGEy~Mu;0jGYqKWb` z>O7?Wc8~gpG!~jbq);=Z%S5YumzMPXdU00chJt$4xqvms8awG93jT{(ia?}(K+!t; zow^>RQ~T8a@6vMD4O)SJWl7Q-+r6dQZz@@1*ut!=p~deuW$VW49gSwx-<>z3zUhL> zkQ1$*J%vIDBE*>fXDP!$bZw@r(DPLv>06-ClfFq!N)CfU)ZU`TO6VEu&N+HUNFDsP VY0bZ*GOd;{bqz1XO_!}Y{|7K^%f|o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/middleware.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/middleware.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7604ace1236efe46bf9b0ebde380694d0ce04642 GIT binary patch literal 917 zcmZ`&O>fgc5Zzrnw%aCc4;2CqTsWWzHQ~?`La3tY$AMNARfVuDEXTWPH}O|@)@@Ve zMEeu?6Z|DhoH%jgjD*Cj)1(m+vzpP{S?}(=dF#B@S|(_}K7a48TZH^DlSQ*}vW*Ts z44iP9kd*qA8q5-wTE10dE3wmt->9*jIH~KqlgnG7*?Uov^rLw6aA=H_=Vq{nzJm_O7$$6pgh!TgC+vjWxSCFI4B0LF zNKS}Nv^9Q0i5U~-kWbT`J$^CG>Bi7e&%eyqu1K35$*&Z-yVVNlNS6@CITy-Y>@O9O zJ`ZI!$d&1NwX}O3i$cphQ-);K=)XqyoKptn#6Vb#N)N%iz822OzcBEU-PO0t9>* zWoLOe&NHoKzdMr$y6IezPBE_53zf$LAe>cU8VHXtEK{2@x=NdtN1N0^>{0gT=H>sz z==^)u5sK%9VHTw#46EfZOmki)1~o1Q9=Vkx^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e759b85a3f3e5c2600e0e2c953571118e88b2f77 GIT binary patch literal 2153 zcmZt{+in|0bZ2i~J9eC_(<>|wL0BRV&lN%yEh$J%RJBEjkzuv=jO|TkciowBE>08zx zxViYau(=IOQ2@+hL|7@IgdlDUJ9VgIa7VbQN4?aiep;d>LvuxtmTB4Go~Wb?v`Vad z7V}x@g~dwT*{@9;y2ye@Ry4T7F}W2*md}> zvKtV(n?nRD@I2E zzBrD7&ToaUp8wbb{tzru+jw`}g;c?=HPESe_57z+_*E~|gG7ai%3eMHL5D+`A0~{m zkAciXb)rB=c$5ecjugLq;mnNlyPA&iLN1{z<)PM0F~yMI0;4G?{l`5WT;cBsrn8NO(b+49wz+Am}gvR+Hw^%%4JmRDX3b7 z1qX%N$rX<yg030~4tO<+o{VCFW=4@I4~>2n zB$Df399_NWNHi2984DWZl5v@2{a-A39i$9+-M@3I{WV6c{cxmI+`gN4N2Y4p_Y(c( zsMFp_q|#dtWWLY4x_!vA!}k58)5e%>4dd9J-cB+Sna)Wu&KhWt#DI8DjOgp zYXBgJuHvHi)<1az$VDlNpq8R&6E+I-xJ1TFJF~uP&6t;LK>cM{#)b|c3?>SW&u1_` z!4mtW!=ZwBTM_b zG_hU=^BXp-3Bh97J44sOiC`YU*JRsx2Q>fSD3*QIEK?6_S;-GT)-VfSfOpAI;z*P@ z^koTw2cYmFd%%M}dk<;nhu#g*5)S6LqjE9Q90suX2*geFtE6Guq(Q30CH9+!GroEr zxp&X(HP_?@s=0#TDgq27E#Dc$awp+}$!kbFPZ%vfhHjs7>L^+LJkJG>Gee@YNfyl~ z89kp~rYq>BDG|-51g-DJ*~#M^;q+=uxm-hl#U`-|C3f+JAefH8Vv(5k0G9g1AZujB zye{#HJ%8W$|G4GZ{*CSUf3K7l?ZB@(=JZ~(POnc}qJ678YonFQ-h zgS0T)L+sTwiB-MmA}tS1$2jWM&E~8^)$YFHFFxw~IeyW8DAw ZTm+v^XUk_;fC~RBRjW$YAm@;M=U*4jFysIL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/sitemaps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/sitemaps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2e1a5027ed13efe1323ee79fd30007a3e471fa4 GIT binary patch literal 945 zcmZuvJ#W-N5Z$$XAGtW8xj=gzI*B+91wsfR9V9_QQA9+uvao#Ky~`f{%Fa5FQ__&M z{D-9EFIl3ZqNApP8Q&3|qO7&!@$UG|n>SNzZ1fne-yeUB_Z`N5(#PuZ@Z%M3c!owY z$y1hb;c)Vu)XhBMHNKm+vbJb*w#TF=TUSiBly~Whj%**XVdoeA&4#@8;<5yMcaF4G zSzMyqf18!2D3wXiMnyi+)5<8BQ2gpbZVMiLbQBX@GT}%rohv3>>0%DAez2Ry_As8R zC3wPD5M1(&jsaL%1sd)A?nzHv;_ zKA89AEY7DzkQBK!dK>^&0`oU_au19;skBirxG((4;PbIgjt3g@$9AA|uyL9y8O(bP zT0jNt4!PJeYO2AS*yv2r{Oz24hdtsjFV586T$`kou!65|H;4(h2dO4 zP@dH-@}WZw+eFjj4nE%Bp4;P_e7xu;S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/urls.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8dd561c64a0150caf6ae269de48680d98a2f40e GIT binary patch literal 394 zcmZ`!Jxc>Y5Z%q*#Umfq{sT#oyFP>SMrhdoB|ar2tIP=0gdZ}>zG=wV2pndSv6dCa-1J4L4yvEU4Z z7QpA8_O$;bG9LT7d&NdO@1$WPzVa72JRlWbqwL+XH+5;!nqs!x*K<{6b(q$bHF*-= z7Roj%0}R)iU+%<}D&c(8jrac3m=5{H{mnPcMa;DPvM5h-d)g-QI5%j=7p9&=YUKi|g*?j>iMfSwqtbh~v;1+6HpfI; dTa4T;Ve_~Ore&?$0%n|?F(4SQ0pAtD*Ee;Zbh`im literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/views.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf8d28798f94f3924ca79bcad8a2d81a215ec4ed GIT binary patch literal 1959 zcmah~OK;mo5ayDUL{XF_J9gXzY05);5YWg05}<%u6g3>XF5m=0>>wy1l%ljNc@;j? z-DT1k@+Ho-|G@@&>0ctyQ%}A1oKt6356A7H6u6q5ot@`5!>nF+4S4?k>5sv0K>dlE zj~@#*-@z;2!$J*8Vk02|AxN9CnOK3PX)CsqQc%*g9hZ|zP)VG?Nvc6r^GdOs)PkC( z%dwZ#gSw_G@mkUd8k%U^s7q__jo=nrryi}pH!eu9N!N~zR^u=5#AuPi zkxVI`jwR9uaiqG@m;v1!GZhYVAy}$H$rWo^MdeVb>Enlw3lE9sOir^@vf|T^cU>lu zD1}SU8Rdcv73f+=UD;p)yD$?WXaHt8&LYYLP}L+7uRViZnAra=1a_6R(h zf=6 zdq!p^HGj3vt(QjnxoxP@+pmd%Ke$`gcRQ*waYScEDESIC+_E?r&4}G30CPvYa`6~0(Df2NhA4BtBbM~g~YT>6D zWwGq|{Z-uU71h@gCoGx5O$I_QB$HZ|TJU_x5lo~rI6O+bLpp1bSbT9p0G0@<(jgR8;=g`oC zAIMJ2EUa9_MF~+S&#W)xPRlD?sUo4|8?H_TR=hAd6BFnhrTF$mn-N+y>T%(O#zq z2^X^WJeM-+J;{c70x*}o@3}h62fYI>qEZaEYp?>hO(J2e=El%gyr)-!(Z8IU;_z4g-P%G}? of+*L4&+~LMV}Y}T7{>=FZ{|I~4a5TyN}^_MC!$cc1Sq8`g$AP5Z7)b@?0vkR?(EDmGi%43 zDskhER3s1|f)f%FCk{v);KG3eLXkk?%opH4YdcP9>B{Th&hE@J|L0|%-&c-(E^s}C z`x)Hd;eHnPhj-x**U#YN;4k1dcmTc!(%nLopaxsuZ(s`k37(7J?|}_)1mY)tz~6J= zk0616gZG22V?sOzu7D4MFM!eB2KY4i3V1KL3qAr~nvW%T16p$M3A`8g3GqI#0$v3r z_$l};_%OJQ&E5dt1*87YKn?y1LW(%^fDo(TIdBcMAeM?7;FI9j;6vayV6^xB{QXa0 z)c42y{a^F(KOp2az5$K)sB;B(^e_4v_eHpxH~@{E$hc3;N4y@LLBP$!3#J1-^`fHSgHP}X>Hc3+m2=9E@DvTy6q8CVnKAgs1&R~AgZc1*$2NRF8#X_lEX zIe9JpsQtgIJGWiFSS(FO!AYeLEwMjpYp7+YWX^se=A$@jk3y+o_xzB;NO@A;tOlx_ z9jlD94ZMWfsSjMzL}^X6XIfpF%6KSi9p+ZV4)&nExJmOEH^8zmqS|SCaSi|Lo}_m0 zcS^jkeDE~1j=Tzt?-A=>EVa;J#DgO0utrZw+dStiQ6|c8ex|682=;Xo&avW2qqy-* z^rAy!scWXP_JNutVDZcrhX5NJWa_ftJY+UtSep!^fpv^QhI~XeiD6HW8kEjrU@u?1 z5N`yGO67eF`YnmP<@?R~X^W_cO%QAv7Y4R0G4vt^n4%NQCodf52$++x#K`f-wQ`(^ z7&9-Bp9*W3j4W9M6*P-IXRq-fBvNSQZ`HX^dN!rj z-Uq$p43ZOfNZy9Il(xE?uO{8iWblv(C(`1@zoNM-Dsdt=;pxXP5qOw!5t}v!ExvX$1!Z?}rXz zr_3o-n{=MT_T}DAa&kE@N*uCF&YFRZ=QO30eH9LcrX+{0JzYDglO5|ypOUGXq2Jy* zMYG54HAByD)8_iAmN>^_>riDGQ^BZYFRobY`ph~@>EQa8H}{N#>tDsLAq(R(oM)b7`yM#ul+5nd6j@54W+q>;m)dwrnWP z9;ZEx6ueZZO59`AU?GPzf$z-=FEz!FXfE2bj-D?~9&IeJMmhIgt%|nTi$|lcW#*?S z@#TO@4ipdEqRsTVQH_(r8QOqC, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 05:25+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Gevorderde keuses" + +msgid "Flat Pages" +msgstr "Plat bladsye" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Voorbeeld: “/about/contact/”. Maak seker dat daar skuinsstrepe voor en agter " +"staan." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Hierdie waarde moet slegs letters, syfers, punte, onderstrepies, " +"koppeltekens, skuinsstrepe of tildes bevat." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" +"Voorbeeld: “/about/contact”. Maak seker daar is ’n skuinsstreep vooraan." + +msgid "URL is missing a leading slash." +msgstr "’n Skuinsstreep ontbreek vooraan URL." + +msgid "URL is missing a trailing slash." +msgstr "’n Skuinsstreep ontbreek agteraan URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Plat bladsy met URL %(url)s bestaan reeds vir die werf %(site)s" + +msgid "title" +msgstr "titel" + +msgid "content" +msgstr "inhoud" + +msgid "enable comments" +msgstr "aktiveer opmerkings" + +msgid "template name" +msgstr "sjabloonnaam" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Voorbeeld: “flatpages/contact_page.html”. As hierdie nie verskaf word nie " +"sal die stelsel “flatpages/default.html” gebruik." + +msgid "registration required" +msgstr "registrasie benodig" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"As hierdie gemerk is, sal slegs aangemelde gebruikers die bladsy kan bekyk." + +msgid "sites" +msgstr "werwe" + +msgid "flat page" +msgstr "plat bladsy" + +msgid "flat pages" +msgstr "plat bladsye" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be793dec01d289a8464f7267bf09a6a475aecc55 GIT binary patch literal 2636 zcmcIkOK%)S5FQ}BmUjY3KoEtLmxX5^P6Ek>4FpJ#rC6~d2MGx&w0GLOlg!R+rhEO! z0mX@57%qS~Ai*h0Y%fWi!~tU|KLRe$BP0$!BJLcx@Kw)x*D(s>!f1NFuCDH?`l@RB zx6PZrbnrZlu@&Ps#)}vq+=CCEAAwH-e*zu@t^yAMd+v3d5ugTUfPVmsz(0ZSvi?5U z0G0{#Vj5V&=d<2(V}27DN}2gvpg0-pi)0`CW&1U?3oEm;AZh-D1; z0@k-Z;5cW1ZvsCA-UNOQ+yWmIUoni`<@4~zN;mdfC$fW1K8M~0&d2D%5r61NSDn6XxJJ6Y`z%z zc{ByF)S&N!t=uliO?e*3qN2%1wvJ&%KnSJyO!KpnT2Loh%2stPu;zM)NLPJDz6w{*eWj@$N5j4+y>2Wc>@lTfjYj++poWr6v18Da zL!uGrwk_ufd{I9;vr~42qq<6sIH2vj@a5rpRvaH=+&wUS+aH>e&DG^qp%yC(dV(s>+ito8^H7d#-h>DcyKjt2n!#;0y-+{Fv z_2hfDc$nRZpRt`~E;k&%%sScJ+SlA~Er&ZR-ELC`v#6LGF9)7RT~xD$RMo6o$R=FA-! zt0O=yM|BR={qO*qMZ`+#(usj1?!L}G_BAA9_i$K__^&I{zCmBNqb!n$GyOp$7J+*t zifgJ!Vcm+V^y&dhr=_q|%F`Q^CumEh0;Yv@+Jk8iPq!EH`Gck1v|~p)f4x-T6T3UQ zLSdb9|9&X;51U>0#O znWALId~a4L8OLPKe3wkHy*YC^nJ^2yI!kQK%$r5vEU#f-GLcLr)9FI?|Ms}SLFYPY zU78#2Cv%BeO(c_)%qACjK5ed>Ic7U!u3#{cPt2zvXO@zgWE}g<5|VNaDV(%ylPU89 zHcisbj3D-y(++*GL$E3LhGt)SMNZ0X0S!T@@Gf(Iy7;VCP6USzWgG;7U-{;`~O_?6N zh%Glb-?oFyMF`9pg<5MVhzJDY3i1dI#3r4@0=fLjv9B5Ws1-4)z<F<1+{EFuo7XzInM}g~6Z%i*+6~`62dgRNk5e;CHr}g*fY@r2NgxR3)LiQq u{61WcR=3=}hnm=Q1&8h5xC}cpX5MN{0@sn=g, 2013 +# Jannis Leidel , 2011 +# Muaaz Alsaied, 2020 +# Ossama Khayat , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-02 11:30+0000\n" +"Last-Translator: Muaaz Alsaied\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Advanced options" +msgstr "خيارات متقدّمة" + +msgid "Flat Pages" +msgstr "صفحات مسطحة" + +msgid "URL" +msgstr "رابط" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "مثال: “/about/contact/”. تأكد من وضع فواصل مائلة في البداية والنهاية." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"يجب أن تحتوي هذه القيمة الأحرف والأرقام والنقاط وعلامات _ و - و / أو ~ فقط." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "مثال: “/about/contact/”. تأكد من وضع فواصل مائلة في البداية." + +msgid "URL is missing a leading slash." +msgstr "العنوان URL يفقد رمز / في بدايته." + +msgid "URL is missing a trailing slash." +msgstr "العنوان URL يفقد رمز / في نهايته." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "الصفحة ذو العنوان %(url)s موجودة سابقاً في موقع %(site)s" + +msgid "title" +msgstr "العنوان" + +msgid "content" +msgstr "المحتوى" + +msgid "enable comments" +msgstr "السماح بالتعليقات" + +msgid "template name" +msgstr "اسم القالب" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"مثال: “flatpages/contact_page.html”. إن لم يكن هذا موجوداً، فسوف يستخدم " +"النظام 'flatpages/default.html'." + +msgid "registration required" +msgstr "التسجيل مطلوب" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"إذا كان هذا الخيار محددا، فإن المستخدمين الداخلين فقط سيتمكنون من مشاهدة " +"الصفحة." + +msgid "sites" +msgstr "المواقع" + +msgid "flat page" +msgstr "صفحة مسطحة" + +msgid "flat pages" +msgstr "صفحات مسطحة" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e494972273c546fc6d5c5fc4eea46a1b2215cdce GIT binary patch literal 2637 zcmb_cO>7%Q6rMu)GykOsA&PiNv}vGg$LYUY2MSG5q(%)mnh0{#Vj0JvqN5RU_20zL%X1!R9cz^8$I!25v1z(;|yB`e@h;4%q( z7W=*T3o*jyfNueR1bzzKj3Df%0elDe1MoB8GY<+e1-uNzPdEs^7r3W|A@DKC7lAJV zZvvkJ-U70}-+>%=1IY5Z=YXt#xh3}iLC@v}u-u;nZo&(d&6V>)xojPfhV22s){Bv! zM^dmcT1(6KVF=t8j=B0EWi-bdbHkGKD5_~c3YF-caI3XI7HH+vmpOMNs_R@S3bk9( zxs_92WvSmiDM{61Njjp6J0>ZRuIGnkazl@F?D_!Y7`YYL(P5OWBI92G(8QDCvr?$XDUYsV_9u;%LnGq_+dxpgpOytkSq21XNd&Q*1l* zV(xj~HdCrM8DN-G+TVp6`A&@*%@(Pl)Y ziY%REE>RdvQV^BP(sTTfsl+N}H6qC!32bf0d^v7e+YH4Jr#0pVbxGB_(qx+gGwYXf!8KC?J*vS*Qs`Et(7q0& z7>J`2vZS3p&v_du!Ky&s2{$Z9nL$~LV(s*+vhO*s*UQQoiVBn&IOYt>F`th*hvBV2 z-Cg-1zu-772#RAC(hqnoIevLeTP) zbK~K|@8&u){eAtt?d0;=uFM;0MV+C^8t7{|p>rsVA0EIcxv`SEczo!Hv#))Q!;Q+= z=?zN}|0fHyZ^YMYlnZ2IWd?$J>;}$}D6Xmkg*7Xx;+_MPE{kEY*hQ~W7eQMr=CRDD z%Wf>YdAT*;)zwqnN!zxi>x0ESTkLG>^7-48`}ae+3(DOGGQwO-=1jxfz}uu`+BB2X zW&wCf;B(nDlCuTsxa02W$dYNA^T`>r0Fz{fl3DYuStj!h{4AxOrjj{gYcp>afOF;& zpTb5mlblO8vj2OCbspQdN$bvRUr(IC1?GJ=nMNwf8LTbYo5_^9%2cO8_6ptwbIE){ z*j-F!lPN+Ti%9(%m&jTqGv+&3PE$ua-0hcFM^>2BX{)}AC=eoub>YnQWHu$RjPh`q zX4WpX+o=$uH_SX*)JQ%CE7X|PkeAz+oVj4Gn+Bmf>;}bV$%bpS8aAM?zUJHaU)8=a!+tT8AI=ao|931>-yR`{lvxC<(<&RP~ zi63lAaM(VCXK&rlPGuE6*#pI?HXSu<~=*uiPQ=`uugtTnJ) LNBk@A$VdDQAXg-% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..8e87c9b98 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-14 18:57+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Advanced options" +msgstr "خيارات متقدمة" + +msgid "Flat Pages" +msgstr "صفحات مسطحة" + +msgid "URL" +msgstr "رابط" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "مثال: '/about/contact/'. تأكد من وضع شرطات في البداية والنهاية." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"يجب أن تحتوي هذه القيمة الأحرف والأرقام والنقاط وعلامات _ و - و / أو ~ فقط." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "مثال: '/about/contact/'. تأكد من وضع شرطات في البداية." + +msgid "URL is missing a leading slash." +msgstr "العنوان URL يفقد رمز / في بدايته." + +msgid "URL is missing a trailing slash." +msgstr "العنوان URL يفقد رمز / في نهايته." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "الصفحة ذو العنوان %(url)s موجودة سابقاً في موقع %(site)s" + +msgid "title" +msgstr "العنوان" + +msgid "content" +msgstr "المحتوى" + +msgid "enable comments" +msgstr "السماح بالتعليقات" + +msgid "template name" +msgstr "اسم القالب" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"مثال: 'flatpages/contact_page.html'. إن لم تكن الصفحة موجودة، فسوف يستخدم " +"النظام 'flatpages/default.html'." + +msgid "registration required" +msgstr "التسجيل مطلوب" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"إذا كان هذا الخيار محددا، فإن المستخدمين الداخلين فقط سيتمكنون من مشاهدة " +"الصفحة." + +msgid "sites" +msgstr "المواقع" + +msgid "flat page" +msgstr "صفحة مسطحة" + +msgid "flat pages" +msgstr "صفحات مسطحة" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4fcf5106637cf73cf723fe7fbffa368be8313015 GIT binary patch literal 924 zcmYjP%T5$Q6fG5B<3c5I=i=(ZK%nNO1ZW&0A{Yz=f&&Yqi<<5`Jq0~gZB_LQxbq)$ zVd91lU}5}(+2}90@GJZPPY){I^yyPKbsu%B&d)K zmvujYkvfjO0xoUhjK=%rc}pvMp|lVy$v~Ny6S8^G)_AeerO?x!@Wnlj4>_47YqDd? zY?^W+wV}eZ^EA|1Mja;A$(Vwrf#xAnnR1nKRqX9U~t)H)sJY!hr(%PXsQ=N9@T2Y z;joH{jn`d1s^TVUXG8s^>`#6Ty=&8zt&Od<^Z6UqdS&(OE@k^T$AE#4LM_jfHcNOW zWhkpl+2%RcBS>aSB*RAXOh)h0qeXF@dXUo=< zp?fWAOfOZ$b{^yA*pq@}-YNFtr6%@x`k)9;?RoS?*;z8GKRVISi-%GQQfhA}hpiBP9q^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b618d08f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzaes" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "títulu" + +msgid "content" +msgstr "conteníu" + +msgid "enable comments" +msgstr "habilitar comentarios" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "requierse rexistru" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Si esto ta conseñao, namái los usuarios con sesión aniciada podrán ver la " +"páxina." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c122551e61032beac7cd640bbf39301efe9c0438 GIT binary patch literal 2373 zcmbW2PiPxQ6vn4*(zNRTw7sSD6&i@CSCUO3L5V|?#wmuF7}v=u5Jo#AX`=Jkp{2KfQ?0`pKnds|*6^sYqN$`6x=z9bP`#*!PgTEh) z{{%yxjzM%-cM^OPOhCM1=RnAdu>nzg&~Y4hh!3x0Tu4{kk1%2lfS9kqa0Q>?3bvTtFpzGb~B#2N^9MR(@m4fn)SGjR)d5dQqEo-!Y`)-BT^TJos+<2b)%Kq)|%CySc zl3ZaW`J7t3CrL{#lxY$-g1qHQhk?`FwWKRQ$KEr{@k4{r#*-Ern)?oKN;egCGmOeD zpXq3Br9r->94Tk^Zx20nY~E8sig`>!cHeoK(WcUx3MWH|GlN1lc%l8FEp{2cXe~I4 zkHHbP`W6*d)5%l#opZ#sMfiP^TgrJyjogw`UgCYgoMSUZl(uBr4q9@f`=s+`Q;I~H zAjP_gs=6dz*D<#}B{!q$7$MsTVfDB!BxQy36pMn*6I;@I*qA3%WcBzUa*ttQ1V(9Y zB?cl^WPVy2f>f`x2t~TKekI&U8)eG5Sk0%)@Spcj*1F7sB56F6CWesaS%#rwA;lDe zm_0dWWfKXrJRCZ*vRf!C1q(TI3^nRtk0ir0$-MGfvNfCElBrKtL~yuU2R3f=pG+nZh*Qm61HCdNE6_zHKV68@r)x~O3T}T!dsd~D$c>0qnuF@6m ze6nG=!Ey7stRWw`_GhbmO5O56%3uI>W;|J#5he+rn0t8^PPV zJJiNjOIzci_sWD5t26F)cMKL3sAG{-}H z8RKEvQiC8(XEAnsI5@FrAJ6L=r1rLvB;+6+58LHQ5BYLDY^g@fo@LXKx_bJU2)8ElODr??OOf zNts=QTYMOOu7gKvVX`q#Scqa~=s~0VU8E06bo3r8kM<)Q3SH>mry-t`K96k(7R^i! zNsp|zA(O*lXiuZNAt6-fNH8MZ-rY%Yh9F~fZ#?Wwju&BzQ*EKJ=U_cfA)4SbSHa03 zD-7G)Mi8x-fm}OG;9uHdBAyt8HSDPzqfF2_EhP(;4d2Y(HX32@Ph9NouqYihW{&}w Ca2V78 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..e2d56f856 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Dimitris Glezos , 2012 +# Emin Mastizada , 2018,2020 +# Emin Mastizada , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-12 07:27+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Əlavə imkanlar" + +msgid "Flat Pages" +msgstr "Flat Səhifələr" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Məsələn, “/about/contact/”. Əvvəldə və sondakı kəsr xəttinin olmasına diqqət " +"edin." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Burada yalnız hərf, rəqəm, nöqtə, altdan xətt, defis, kəsr xətti və ya " +"tildadan istifadə etmək olar." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Məsələn, “/about/contact”. Əvvəldəki kəsr xəttinin olmasına diqqət edin." + +msgid "URL is missing a leading slash." +msgstr "Ünvan başlanğıcında çəp xətt əksikdir." + +msgid "URL is missing a trailing slash." +msgstr "Ünvan sonunda çəp xətt əksikdir." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s saytı üçün artıq %(url)s ünvanlı Flatpage mövcuddur" + +msgid "title" +msgstr "başlıq" + +msgid "content" +msgstr "məzmun" + +msgid "enable comments" +msgstr "şərhlər olsun" + +msgid "template name" +msgstr "şablonun adı" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Məsələn, “flatpages/contact_page.html”. Əgər təchiz edilməsə, sistem " +"“flatpages/default.html” işlədəcək." + +msgid "registration required" +msgstr "ancaq qeydiyyatlılar üçün" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Əgər bura quş qoysanız, ancaq qeydiyyatdan keçib sayta daxil olmuş " +"istifadəçilər bu səhifəni görə biləcəklər." + +msgid "sites" +msgstr "saytlar" + +msgid "flat page" +msgstr "adi səhifə" + +msgid "flat pages" +msgstr "adi səhifələr" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5c02d6649481e3783030419296db81d97d9f9aff GIT binary patch literal 2978 zcmcgsNpBoQ6mB4F!xjP@kb-!T2xJuZEXF`G@i-7jkWoym$l-((wWrH7o%D21x@x>c zL9%0EN3s(W35uZUM2s6t`i3&kbL08JqIp)uV%($$E+7dZhy7C@4ffE zSM~FbZC_aUJ&$iEzD0a5;rsXj{KGE>ZU<`MG2j~T9boH&mNfuWzy$C&U=DZ>_&)DH z1Pz0SfStgHfhU1a0Y!Z-f%g#0 z5b!mupLxWxE(5OstH8Y={~mZ9$bLU~46y=F0j~gm0nP%4;B*(T1x^nFKLj2EUIMZv z8khwB3gmO!pQvFgkag+-V#|tvF9JWQ&%XpBJd+#1#QrRB2R=T}xpH2R%jkeKj6Z|s53&-_>A~}IeDsnuZC(?IhNyyaS@cjjyvrcF@ zHZ%13j;c6CAsa!R?2k3BzZDe8@{5b5{3PqE8G?=BkUomM41LW->0e+ zoMMyE6@54P!fgH97`DZL*$3WqHt|5;7}r2i>g?J)Bm*<5vZht5T6E z3XE%9LMd>xP*5%Rnt>ZCOsj#5Ss{!BCa$SSOQSS|P?hJqT%;4nkMalEsO(8;s(F7I zw(M`Nb;{z1M4&7Ym=p?Oxs0i_SYqNNnj>jNq6onvhntQfai;1;!nIg4X`x0H*a!-o zvapn=d|`D*;VDs2cBgB9gp^>FBlnaO6vM=EQ3)eucgdpX+J~w|Y4?OVN^~EykBfef zkJ|5nEk~`H?0!3&v9oVdc3-abt-Tri5=R}W?4HO8&~7S>a&$Hbm5ZWM``MBgIemqa zclzyO8I7GnP8~1^idCdz_Xww)qeH@XqN?s^rq?fq{V(atox_CkELlT?@4V zew`uRE7HkCS7+DZW>VQyCh=}fNxNsLg0PhsRA~s}1qaYVP9%lOpXfPa?`xi8UwtC7 z4+n*i?_!Sj^?GVO(j4`QM7Lj!9N#_?MrE0!pkk&n-*$j%!~C9LcQ%vHXX({fiHDh8 z`D~UBQigCG^NxILW2-&i#zSL~Y0tLOxpOs>j%-^JCfT}4KA+(&bFL%*M$>$Ma(x}V zaMSSFo(IE0Y6ZdT$pZ;1{w%%~FX{Kzt+#KEny%Kb z*q__~r(0U@7ET|Un)EI7GZ$di)DJHO-vPWl=IZk@KL9Kco}GVcxGg7YZLr>w=ya$C p{ke5&56p^bXl^}J*n(&?@m*FHRQ0e>_X`-_fYz50!RUq^>krFl4-x, 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-16 18:27+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Адмысловыя можнасьці" + +msgid "Flat Pages" +msgstr "Нязменныя Бачыны" + +msgid "URL" +msgstr "Сеціўная спасылка" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Прыклад: «/about/contact/». Упэўніцеся, што адрас пачынаецца й заканчваецца " +"рыскаю «/»." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Дазваляюцца толькі літары, лічбы, кропкі, знак падкрэсьліваньня, злучкі, " +"нахіленыя рыскі, тыльды." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Прыклад: «/about/contact/». Упэўніцеся, што адрас пачынаецца рыскаю «/»." + +msgid "URL is missing a leading slash." +msgstr "Спасылка не пачынаецца з рыскі «/»." + +msgid "URL is missing a trailing slash." +msgstr "Спасылка не заканчваецца рыскаю «/»." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "На пляцоўцы «%(site)s» ужо існуе нязьменная бачына з адрасам «%(url)s»" + +msgid "title" +msgstr "назва" + +msgid "content" +msgstr "зьмесьціва" + +msgid "enable comments" +msgstr "дазволіць выказваньні" + +msgid "template name" +msgstr "назва шаблёну" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Прыклад: “flatpages/contact_page.html”. Калі не пазначаць нічога, сыстэма " +"будзе ўжываць “flatpages/default.html”." + +msgid "registration required" +msgstr "трэба запісацца" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Калі абраць гэта, бачыну змогуць пабачыць толькі тыя карыстальнікі, што " +"апазналіся." + +msgid "sites" +msgstr "сайты" + +msgid "flat page" +msgstr "нязьменная бачына" + +msgid "flat pages" +msgstr "нязьменныя бачыны" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7633dd88aa1d89b6a176ae2084430b941888934 GIT binary patch literal 2802 zcma)6O>7%Q6ds^JarrGEaVX+ZKx!asC!vRGODZU|Ris8lRmuse8ha=9w(DK9Gn*ey zNvZfL5=E#;fT)m=kT@YXty}lcy>esr!~qG3h$Ck>aN&EiPMn0cu=4twnSJx#_r3RK ze%-$1bAjgxygTq-$NMzix9`Fq9t(UFm;>Jgt^i*Hj@>Q99MAwuz(0UK@GsyY{(cX9 z0N(}TCw|7?Gr(Vf1pFI#KXAtuAszuf4}1W)8_53l0iOg;0Ph7J13m;){kaAn2bTrl zb6Ec!Mjr#W-X}x`JPZ5^SVE8?;CH~oz@LC@w_~diH-X;+K}9qWoOMOOL%<(^oRdF+ zW#BfD8Up%#41h0U{t575;1%Fgz#oB}uit>6=d=MF_s4+S@#2%y%DRv)mj}pj@c@nw zBR>xo;9~TL0+huzyd3B8)kPpALqsqu@OK+`a?PRhvC+d! zBuz`!m0l%vjA!MBX-3Z7#0;56s43L(%Ho%XT4^#H1}YfFGH5Soqnb1qMiFINvBZJH zK+VW3GHbrXLBygd4(5g&2wP2qvNWO>cHw_WlZ;ZxUm!IfYNKf;NlAxB;XA{S76V39 zYpB`@=90wG0!2x^t^zNNnM$e)R#io^8oAughHB2Sb_&Hb%bJx@rl^@|L#`;;T=-JP zz{fDfS+nW}L1Hk?;sCQ+k}6CBSCQe>(h#VcFbcRxM~@ul7iptrsI{x+<}&>2`^H+A z1v65y5h`{PYDu$+sTQ1KViALp7OAQuVX5S%qg1_V%b!}geFpA zDou{7n(-zA?=48eE}w$qGOj13BdV38#+%gjF!1(gb?r?jK9#24^p2?6kWIZe;LWG8 zk+CsvWYinoO{1g!%cC!i;3*xJ+IZ8cjL~i;Nqv%OtYBZGS5`-_)|+VSG8FBDd0fvR z#+z2M>C^r!s>?K#G3{y?)AB2oxw*MAgvC0XQS-c~Qt(`bsPCXstyhLhlM|B%28u?@ zBc<1iGejw5ffHTW+ey$M#Y&9N!hwv*R>6w6`SeS=+NW^V9a4y$a0G`m}S?MX|F?WY5`l{()_~y={1DlkJkdihXT+1)lqB7}%>Y>S3wF z%YgPntb>n|>jCF~dW zMt;inkm|xo7h6zDc+XF|{BvDV$icmqFKxKhVBg^~@Q%|=z;RjzTSp$Ha7D3K@{@y` z&TiI-?eGDCMX?KcZE)(5EBJ-}2ebvGIcgnyeyzCR>!icpUf^Vqy~wFsMlvq(5G$J$ zxt?+<_||2$kc|D@a6L9g3D8?-5XLEChpdr13z@mJD$H>_@2Z1vs0*@{pMnLCQAF37 z7=s4a#3h#-b`hyUt2?80GZu?(Ig h;2W+TE*(re90T+UvdBXl{oslt+)=!M36kVw{sa4c(wzVR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..f7e353501 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# arneatec , 2022 +# Jannis Leidel , 2011 +# Venelin Stoykov , 2016 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2022-01-14 11:31+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Допълнителни опции" + +msgid "Flat Pages" +msgstr "Информативни страници" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Пример: \"/about/contact/\". Началната и крайната наклонена чертичка са " +"задължителни." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Тази стойност трябва да съдържа само букви, цифри, точки, долни тирета, " +"тирета, наклонени черти или тилди." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Пример: \"/about/contact/\". Началната наклонена чертичка е задължителна. " + +msgid "URL is missing a leading slash." +msgstr "В URL липсва начална наклонена черта." + +msgid "URL is missing a trailing slash." +msgstr "В URL липсва завършваща наклонена черта." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flatpage с url %(url)s вече съществува за сайт %(site)s" + +msgid "title" +msgstr "заглавие" + +msgid "content" +msgstr "съдържание" + +msgid "enable comments" +msgstr "позволяване на коментари" + +msgid "template name" +msgstr "име на шаблон" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Пример: \"flatpages/contact_page.html\". Ако това не е указано, системата " +"ще използва \"flatpages/default.html\". " + +msgid "registration required" +msgstr "изисква се регистрация" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ако това е чекнато, само логнати потребители ще могат да виждат страницата. " + +msgid "sites" +msgstr "сайтове" + +msgid "flat page" +msgstr "информативна страница" + +msgid "flat pages" +msgstr "информативни страници" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9465be4e7849212108dfe8989693c6b610b75c4a GIT binary patch literal 2988 zcmbVN&yN&E6fOmSjfzSn@gT7@A-fy4XJ$7j*s%TpfuL;MkinCQ>6xyXY3QjQyQ=p` z;sG$a8Z;irLO{rd06hfO1qoTYW3rzf8)$|POZa7%kp0BI=)qCIj z-mBU_H?E&!7#s1tjAsGQW<0wd!4Jkw;Pb#Afgb>W2DX439%ZZm{0!&~lyfD6FqfVY890e=CKzu$nHfPVm=1^x|u4EPW5G-9t?&)62s z&tdT!;C4Ajg3bu%bW(whe5NCWBh z2I&L$MxWjyUPuS_u0QF?n(%ql)Y;aHdT*qDz(nN)xY6?|+z*jx=blYnPmAm_dX2qs%h46cz&UG_T zJWz5#^L89f2EOozv50UpN{bes3c`>lO7MZcD__*TB-C9mY#(Cq2?}CfDFC+VCQss! zZyChzkm6n#gYpa)(}B{8*Q1!LKnr{)7*edyh1Z&*c9eKTGMwRI)MyCb2_(^om1R^F z+^dF0kI6tx8OA0vR-uF@y)Y5Hl_<@PjM!{_39aE{n9HP9H7|aoF-@e8SuKhMCcaT| zIG2-yst!V*ggt!dAUzO_w*sY11$wnG@*A6#-&fYB$cT}Unh9xAs70+7rizikoRa9j zDHe+c1dBat5*~|BlOPs8LuJ~q7F>EQ!E~TQ!6xG9h^T4jfbV>SWMJ=d|A;3WQQ?qi zN3nLsRU`17-AO|^mB{6Vi4QBz9+ZWAJMY1r%SX#2uR9}Ur~D=#+3s!|-C7?AvXJkuw6jH{5OIt!0eDK~HI?5_=L-=qPsi`<|50>YzYhg?ty-VERsIro}+k zqqnd}HWDQ5RD{=Z`EDT_UKsGfrq*q@RGONaDk6QUg1VS4LaUO^DTlDTy;PN@p~Coq z@xA@*M~dab9xJv}nQ0?EEv9t|$^~*Ky3C7}&|`-y`=Qu@^e~qPV48F570R#zuE?`#Lr#`Kx1mWN2rBW$AZWdNE6X$kKaRdNu2O zo27TK!n5>?EWMVcOIU@~*IAkxle<}ZGfOXJ>F2Ajg6zs=>|4q@$H}O3920n7$kG#b zc{WRb$~ySHiTNE9>z4VwVO%5B8M7CQFuDh$FU@v%1T7fNAp%>Q%wNaO=2yTPmx*Nt zGV@uw48QP&bm;B034O~>u9(Rj!VlxqWeVPz#Tyh^&Kb`ea*O=IfGe&X*khX|jNBm@ zl% zgz81YXKaD;2tdhR&N^R_i_S4jEN3dk-K=B7e{b3M#XM)W&i%(ar7Dt)wjVmCvWrFx zM1VZR3%Z{%ysxg<4ZTqw+aV|w(jf-uM#zAw;I~`H)PzP2;j&vOgaCK=zk)3g-{_6b zHk|{~WM*kxwQhQwA4U{~v|cY!N;n#4O^i93ffu?1B$r8|^dhZ6QG1whwy6AhHt4OB zn3Bmw;{oa6`_eGS${I%ks|bd^1Od{3@+R3RK{}-HXFJUVp%U5^*wG3s@}ABmvMPd5 zzY(!(W#0_qzsL|Sr;J{Cb72_<%eGLfDCMbl zBjfu+uM#->pOMk=h9_xhOE}L=$JmLz6i9P~z*)r`v_!W;Zfat*E&|ihGe?K6Lb^Zm z14w4}l+zpa@(2za?SVy`^%B_C}?^@PNRJFu`?; NRzg=JQ6k^{@GmM;dKdrz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..7885c6ccf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,83 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "এডভান্সড অপশন" + +msgid "Flat Pages" +msgstr "ফ্ল্যাট পেজ" + +msgid "URL" +msgstr "ইউআরএল (URL)" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "উদাহরণঃ '/about/contact/'। শুরু এবং শেষের স্ল্যাশগুলো আবশ্যক।" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"এই মানটিতে শুধুমাত্র বর্ণ, অঙ্ক, পিরিয়ড, আন্ডারস্কোর, ড্যাশ, স্ল্যাশ অথবা টিল্ড " +"ক্যারেক্টার থাকতে পারবে।" + +msgid "URL is missing a leading slash." +msgstr "ইউআরএল টির শুরুর স্ল্যাশ চিহ্নটি দেওয়া হয় নি।" + +msgid "URL is missing a trailing slash." +msgstr "ইউআরএল টির শেষের স্ল্যাশ চিহ্নটি দেওয়া হয় নি।" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s সাইটের জন্য %(url)s ইউআরএল এর ফ্ল্যাটপেজ আগেই তৈরী করা হয়েছ।" + +msgid "title" +msgstr "শিরোনাম" + +msgid "content" +msgstr "কনটেন্ট" + +msgid "enable comments" +msgstr "মন্তব্য প্রদান সচল করুন" + +msgid "template name" +msgstr "টেমপ্লেট নাম" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"উদাহরণঃ ’flatpage/contact_page.html'। এটি যদি খালি থাকে, তবে সিস্টেম " +"’flatpage/default.html' ব্যবহার করবে।" + +msgid "registration required" +msgstr "নিবন্ধন আবশ্যক" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "এটি চেক করা হলে, শুধুমাত্র লগইন করা সদস্যরা পাতাটি দেখতে সমর্থ হবেন।" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "ফ্লাট পাতা" + +msgid "flat pages" +msgstr "ফ্লাট পাতা সমূহ" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..48e491ee6a0ea72331cf4498f0dd4ca7b34a6adf GIT binary patch literal 2433 zcma)7yN(=16m7t~hNpQ50!v(s?A?{8=doV1p0?Mce-n*yQ*DP zJ^PRY$Z%v4kU(mYn*a$3kvJnlA|N9q;v+cKGrO}h5heAUx?NSL&b`%j=I=L-eHWk| z$8!SDBRucmsXv7uv~Pf~10Miy0lx?4z<+=du={ind<=XD{2cff@EPC=e%=F~2NLiz z;Pb#e;A_CIfiD8T1=fH+0N)1w2z&+jEAUz1@4(-{`3LYV#1Eeff(-ZwsDQ^ox&{0S z*aiLxd;na0VXWgP;5o!U1Dn8qfmj-xz~=7)KLEZ8ya@C)xCML@_yy4Gx(7T4ybnam zRrC7%8n5r5y^IcIR=Ht|s`-7eEO-fz=kWZ#mY&x)q*OIum*7e~5~|NJ>B32^Y;a>& zm#*2@%89;fE;MLE44G_cn4G3mjF>VOu~Z2O6_YbUWv;Mvr97aUCzQ-JW%v(~itCDlOB(lq%+dC^I)< z32sjIz+9J7X)-#sh~FhkA~VprN4zVovoz3#taOZV4@)+f3ZQ<<{h{Ant89-log^HG zQu)1&9n0u3iC$I}VI+B{l3Aq_bbS^hk(Eq&X&qIy!{RX)I|q(BsWR_Xome}BrHT>t zwP6HtRl52?4GB`6%wk{7yIZ&YgDO!jt*y#_cmP$+t2wjdvxm|MydqXEU{$5i*LjZ6 z2EMA~lbH5wU^qd+jPPFu8NOFa!*PJ)C@`BziJSu`UBs(8h%uHj#07wM=Z-)e+S;Kk0_oa4eoXybijEmRs#k*lLIE57CWQmd~`>trjMR zTRf7Ub7tPzu)R#}m8ji0(?YA=7S@GbBNR&Ew25fl7|8|Q5t*PndSpaS7e$r{rH0z1 zAMJ@$>&C!b!b+8tNImSb$RoOH*dgD=)VU&RHg|S*8mNJ?a=^O{6s$Q;>;OPmt#0;A zbE&qmzHwt(f_9@-yEd+P*xf6TqvKuIMERt;fKN>r%Wmy%_hxv0I?wMlU=!X@eeEw- zMCW_b9jc6|XKI^SX+##@)F!tPsiF$)+PMof?yfB^s#EP2t*udeiB6xUDs0jFi059c z&cz+Xm#Ib3A;a=K!`zG2xwwP)GPS1+XX*ZZ@_N?RR;Jy~QQC_Hwbd+iT6BrpbHl5X z;qmC|+-PTJw1d&hwCn}=j9b0{icWcE-+WbCe#TjfXl3a_Ex0aw!tAF~Klz1(5qc=t z1=j`Hp)MJp(n2$qJHmuLR;n2bgByUG;4Seg?@Q-B5jU3-0mGyo+aYIJMRu}zl9&oC z3x~L8;>lz9W`b7(xPmbL6NoX`m~IA1M=Wk)zB6vQAxQC%ab0z3M!e6i?x`%UDvVMP zY*<5zaz}~gyz+{np4i6D6w85p@_0n?f>7k`<AgsW})2Ph8uRyZH8RS?Z1vhZ_c;%7;Ve=9_w ztj`=;0c-c3>nDL-i~V%$zEI;UghYiJVs|C+H-oIJ^QP*o6*i{, 2012 +# Irriep Nala Novram , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-03-12 14:19+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Advanced options" +msgstr "Dibarzhioù araokaet" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Da skouer: '/diwar-benn/darempred/'. Bezit sur da gaout beskellioù \"/\" e " +"penn-kentañ hag e fin ar chadenn." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"An dalvoudegezh-mañ a c'hall enderc'hel lizherennoù hepken, sifroù, pikoù, " +"barrennigoù islinennañ, beskellioù pe tildeoù c'hoazh." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "An URL a vank enni ur veskell \"/\" en he fenn-kentañ." + +msgid "URL is missing a trailing slash." +msgstr "An URL a vank enni ur veskell \"/\" en he dilost." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Ar bajenn difiñv d'an URL %(url)s a zo anezhi e-barzh al lec'hienn %(site)s " +"endeo" + +msgid "title" +msgstr "titl" + +msgid "content" +msgstr "danvez" + +msgid "enable comments" +msgstr "aotren an evezhiadennoù" + +msgid "template name" +msgstr "anv patrom" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Da skouer : 'flatpages/contact_page.html'. Ma neket pourvezet, ar sistem a " +"raio gant 'flatpages/default.html'." + +msgid "registration required" +msgstr "enskrivadur rekiset" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ma vez kochet, ar bajenn a c'hallo bezañ gwelet gant an implijerien kevreet " +"hepken." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "pajenn difiñv" + +msgid "flat pages" +msgstr "pajennoù difiñv" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..752f8f3a83ef7d073cd958552f8637ce62f3eabf GIT binary patch literal 1782 zcmaKszi%8x6vqb$zb+6^2pz>kf;d*ZcYDT=aP|d~;DEs(k;vTcySq8>&MY&t z>mN#sA|%`(@du=UzX1wT*%cK9Ek9Zss&o{5XYcF_5@K|7pLx4)zVqhIy#4j;sc!_@ z8T41sze0Zr{crTpK6p%s7r`~~Bk)r&2fqW~2hTk&#BK04_yqU^_%!$<_yTwYJ`4T= zHo)J&m%%^5=fN=PN#G3lJ2cOM;r+u?LiE7Xcv*mVz%B4+@DBLeQe3G9Tbet_9!#MA*YejLBP6+R-Z}svwA0$;+=Y}IwsKz zp;R&}nex(ksuO_86D{^08VjV$yk8Ge<6)LMg_Rh~Fw%Pe3&)8dW67&54Jo;`wJw4n zYcE*W5hNzhVLB0ZMj?jT$O+3s<&fHNI%N6tQdv#~Qc}R1Nz0stS3YC0Y0a1uAFZX) zCx`|99ZJVi4^3l>3uAq>;f5-Wu9ZU<^-PBvn>TyWb<4GO^d96ov>3PFjM{M&zfJ8+ zou$Q#@nRgqG1}rv1u0q-`EtJY*s$H=DB zTYcA>Z)~h>tj>1dZpMx4lVnG|y#m|wyz5)YoYKpMVqp$lTN-g;ir& z;e}QcL9G%+xjDS2!p_1M1G7sCwSre=Q{1fZ7_*QvghwvNaH8jAYL6b^+M_~EB^Rh4 z+$zQwM;;z*gQ?MQ4!KyE{+}cV8LNwVQp;1Ru`szAmLZsJ6RKHS7RZTLhX**YX;AXy h5dxXS$tMM#V1H!#_^R$}DKt*5f{An{!3u$je*k#n5Yzww literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..ddc68231b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Dupanović , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Advanced options" +msgstr "Napredna podešavanja" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Primjer: '/about/contact/'. Pazite na to da postoje i početne i završne kose " +"crte." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ova vrijednost smije samo sadržati slova, brijeve, tačke, donje crte, crte, " +"kose crte i tilde." + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "naslov" + +msgid "content" +msgstr "sadržaj" + +msgid "enable comments" +msgstr "omogući komentare" + +msgid "template name" +msgstr "naziv obrazca" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Primjer: 'flatpages/contact_page.html'. Ako ovo ostavite praznim, sistem će " +"koristiti 'flatpages/default.html'." + +msgid "registration required" +msgstr "registracija obavezna" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ako je ovo obilježeno, samo će prijavljeni korisnici moći da vide ovu " +"stranicu." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "statična stranica" + +msgid "flat pages" +msgstr "statične stranice" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9d5dcc1ea6596211a6c0f393aea244c5f2bdeafa GIT binary patch literal 2237 zcmb7^&x;&I6vs=A(Tv6)Q9&@`Gbo$I?U~IIBuw1kChqFWu36&7lNjD~*UVH>UDfHT zp54tUNB;p4AwuvX3SK>V+kZe$9s~~y-n=V#$@kUF?rahiY^LW^)!pya`~CZgBVQ<7 zFXBFl`zPG5;{Nmz{Nef;d=C5tybSJvOW?wzN^OA=Y=M7*UGOjPeR=;Fbbz-&{M4`b zdky>zB=8^b3Gn0*rJe=f0FQxZLD6>sdW2k-`L*#S@B`5*Y`D)=|} z0r=5Tr5yMrD83!VVJqM(pxD;~KLfu9#lB-t;vIM#d>Nbt#h#0x$ghFVgFM*>@CEEY z2gSZSll?a!j#NK_FfaKAB-=$^Y!&}Rx5yz}DGqQWodYC$gmOJShI(c~0aUA}a7$jq zhW$&O9rlg7CcE}9mNuzd?Nc0@ zKqk1o+h0YhYCkfCF6QtUX77ZkOWHElQWLbeI8|8aJ~uWV=u#^ zmfk##|JgunYq-BddfS8;sPAhECThGF%my{Ji1MM%Z-_14*&VWeFwjM2oS0IFu~j`y z+_NdRBcr#H)yYG(DQ=C}Hk!&NL`q44@K~3Q5jy6`HDxa?3Lmj;T!CHgYmH5jGBUTH z8iJ|O*g}$Y^~##u2pg3qgp|z()9}#y`*Yn^Vv%-HX_s8ceOY1~l!TbXiRmh+S`QGg znx*Kd);Akd>q1G)fzJ*F zfhn?!%^+l(zDuo*%h?q@GV*Em9<+67VSZsgn?IW^oWrua@b+8txLRu*VzybcL%Bs? zcTwR^Te@U@pm$1H=UBcwC{fvMICTLMZqUG=Y*TaDrAr*yvZK?(7^`llv$eI=hG#CA zzTOsz&e+g>;M*kL$+R-Cj$^jDQ^Dw{w_^w4Fz!4Gi0h!^;?>QS z?A-J_IjgVhY}w^rIAZl6Nr+0WbB<_fU+#VvU}V6cXt+j?9yAXe@deUPBP|md`X>js z)sh$$Wn#!k@{q3lcxq^8kR7XInhH?gON**Ovtl|lJ#?i-FJLohq!8xz^XQ55TzYyu zG1kWJAfhO8Ev1sYJk>eXR?~N!bMMd#NegPUiE79_2{uY4iDO}cdMI#{CkXZ=mMPdd f;)XqB4`QJtjzPg6sX++^8V%{Rtm5tu(OY#7T>YCi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..ff25561c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2011 +# Carles Barrobés , 2012,2014 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-28 20:26+0000\n" +"Last-Translator: Manel Clos \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opcions avançades" + +msgid "Flat Pages" +msgstr "Pàgines Estàtiques" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Exemple: '/about/contact/'. Assegureu-vos de posar les barres al principi i " +"al final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Aquest valor sols pot contenir lletres, nombres, punts, subratllats, guions, " +"barres o accents." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Exemple: '/about/contact/'. Assegureu-vos de posar la barra al principi." + +msgid "URL is missing a leading slash." +msgstr "La URL no comença amb \"/\"." + +msgid "URL is missing a trailing slash." +msgstr "La URL no acaba amb \"/\"." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Ja hi ha una pàgina estàtica amb la URL %(url)s per al lloc %(site)s" + +msgid "title" +msgstr "títol" + +msgid "content" +msgstr "contingut" + +msgid "enable comments" +msgstr "habilitar comentaris" + +msgid "template name" +msgstr "nom de la plantilla" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Exemple: 'flatpages/contact_page.html'. Si no es proporciona, el sistema " +"utilitzarà 'flatpages/default.html'." + +msgid "registration required" +msgstr "cal estar registrat" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si està marcat, només els usuaris registrats podran veure la pàgina." + +msgid "sites" +msgstr "llocs" + +msgid "flat page" +msgstr "pàgina estàtica" + +msgid "flat pages" +msgstr "pàgines estàtiques" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a7379893a1f53cc6052f8140867a9ebb35c1b95 GIT binary patch literal 2340 zcmaKs&u<$=6vqcB6ioS5ew>PUM6_yz*LKn#nr)o|rA0xF8Wpz^5~v#QPVC9f&X}E9 zJI<;9K;gt8{5V+R(nACn4*XCqj?ch}0}_XD=CUk4W-WUL1|umt`NhTvb|TmJh)umNs? z__3ey_Y(LENZ{Y#Ver@?#-0LS0UrZTgWldU_&m4*J`COfp8&-~w%|ALr4PP<`BRTD z_AdA~xD0*)_QBu4qu~44>^#^3FMwZx8vFx)(+qSTk``G&*bNs+yVdHKK>x#P$ZwWhf>V}sp zZI`OT+{!w+wzMRz-oLr+sFRtlj740=G~Di6CsOK3r6{+;hd47Bi*=qWcVLTM!d|rI zH!FsIBdEGI<(Z=6C-FaTiK`6Z_epF@>nyFCjI4A5-#z9nn|VZ0TSSTX#c0(hWm+u} z2U2@iGCTIFDTp^!k=w2my~67vLe}tMb-Bs~rMY!f6a~s-Tf#ZmD3i|9W-*A3gP7|W zQe-j#AucLXo|cB-s*@`AMY?wNvVV~_N~N_$HSaCMzrNpH>k9K83GJBBMF^2eQ;3%N z6q65PHnJ=eEhH@C{?Jh-KFDPzV&-#Z8EVvljv&ob!JKqTu(ix=h{y#iac~_WK`W$q zgX@+lT@@XZxnR|{WE{Maw`|ZbA(hsy1Xo2@`lZ2}uolu{ZDA>>Ed>ipR9gxcPrX{h zQ@YHp3mO^MIBw2lAzfF)!QMw4Cp{7gol8AlvpC&NvssC@mZ70rIpPT#f~O%}*b-5j zPPU!vgw<-V*Q+2dZRNVaa+6laZcd>l%GJnL=S!T&KnH$8&W${qJQ9#VW7(G8D;cE<*Fv z*%DhbNoMwLNn{lTwGJ&q4|mwwXnVMmC?1D2cTb<0tI)L#oQ}OuaR#g?(`XlmemH>C zfh9lKy9FD>DKWYj4{)8*;f_mq}>BA2ICaE z98OM*<&>i_!d*DH1vf|AvW*Ij21N|s=PvGy@(F3+T2LEVGYA8{2TG=CdD~#cRDHN( zaoKs9P@WyDWP~k!m6CoLOJbLec8ltGDOKb7X~mGYrlGFVrknJ~z3BQlP(i-wMD2bP zdk(+7r*akcU&~Oa$aImzX@M)O@RoH<*C^?5WPDpfsM~_!G!_{jOw+;-rtT<$&Yi~L ZowlqWCFt;VT)57+Bqso;?*gy19-XQ=0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..abf9bedb4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vláďa Macek , 2011-2012,2014 +# Vláďa Macek , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-19 09:23+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Advanced options" +msgstr "Pokročilá nastavení" + +msgid "Flat Pages" +msgstr "Statické stránky" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Příklad: \"/about/contact/\". Ujistěte se, že máte počáteční a konečná " +"lomítka." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Tato hodnota musí obsahovat pouze písmena, číslice, tečky, podtržítka, " +"pomlčky, lomítka nebo vlnovky." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Příklad: \"/about/contact\". Úvodní lomítko je důležité." + +msgid "URL is missing a leading slash." +msgstr "V adrese URL chybí úvodní lomítko." + +msgid "URL is missing a trailing slash." +msgstr "V adrese URL chybí koncové lomítko." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flat stránka s adresou %(url)s pro web %(site)s již existuje." + +msgid "title" +msgstr "titulek" + +msgid "content" +msgstr "obsah" + +msgid "enable comments" +msgstr "povolit komentáře" + +msgid "template name" +msgstr "název šablony" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Příklad: \"flatpages/kontaktni_stranka.html\". Pokud toto není zadáno, bude " +"použita šablona \"flatpages/default.html\"." + +msgid "registration required" +msgstr "nutná registrace" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Určuje, že tuto stránku uvidí pouze přihlášení uživatelé." + +msgid "sites" +msgstr "weby" + +msgid "flat page" +msgstr "statická stránka" + +msgid "flat pages" +msgstr "statické stránky" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dbc72270777f6a3c787c66f315cc01ae73498ec5 GIT binary patch literal 2163 zcmaJ>&5j&35H=+I4GiO-&y%tk_3?fzVLb=6l@?fT>N$?qA)Y0S4U z?_<7=dF3g*Fn$ES3j7K9Iq+v-4LtQUV?E$Ez%lS!;I()T{0i7R!5AJ^;`I*j9*}_F z0iOfj2fhM)0DJ-X3ozRI75E15ci_vwzktsG{{cRP?-M6y`;V}B8~eWjTj1KWGoC*H zBaa8bTfo182DlHWFu@)I&j23*-vj;$#KT^D9uxQ`F#25s#<(v5Uk83R-@gNld}<)* zuv3_Eyo4F`qm393j?+Lo7$~Fx>S@F{W4_~vzT$}779;X`5i{oJ_=tYl$KsHiTne(& zpsew1`-s<5EyuJn;0Lw|gWQ_H^DtQH(=NX!$u~|?uvGCwNm_EDOiA1b3XUrs1+TfU zr0*ZIRcIcjyp(=n?oO2YRj4)WUN0zA%9HYDCD7E_LnWkG$0po$KFFF{r8PBP(#q15 zkOgmam|I~x@IiagNm@n+_$*Y^I8E=L#e3Bg*AA3Bl1Iu1Pla{lRggH3uq5ljl#?r_UlI zX#$fbg^=62hUi&LFvTF2E6Sx`Ysw&(0!nTPDU z$i74{&>xey%S~x}`*Lbs$aa0HMD|Hj`fOsy)Z4o`$*!U-(RTJJ%#CSdIJ%IHhS~5E zjV_MQZ>$YBhC?W3`|?mln@hcmP|7yW(P(pg;r!YVqj!V*kWCynNJX%2OrLRMkgFRK z|COdIU<2_Zoy5K}h5Z2En6g38*+lYsOt+=>6`id@n2ra7wr%?e-gs5WqdqbTJ?Y5nPZ*VSv0Ta~b~_cV33ATa%q^bEy}771Cwf zCb#i|jcM~hg~uevly|*7-8inZ9qVd8CNoW<-#UMpX3MR!W@~G-N*~gY#uSB(D2$Ro z?{3j1ojF4$u0~0111IM$_t?#;SDoPvHEmw8ZBtgb*+mgjPpAbqh(GUqt99xMU#Q$w z5~{dOf=X#jhc!|!J#27C9SNDk280zyLbXx|G>7AMmzO#;f@^8+%pELR#7&QXjD+BB z%AImlb!MFoIw4?v-Xb~!KZU`bvj5X2CNl>yzMbfn?Q%&A|5SD&l04orVE4cZs};o+ zcLPU|(L}lkUQsPu+=s%Tw(}qim0atF%2w(a zlbEsWvuoIfjD3ez2GhxE*%{Mzp0w^l<&bjTtdpx08X{cVpdtot(2u3oQP7Jej-BG@ zYKsaP*~}UXZ)TkZ2|)_daV%eH!2l@cRm2&3Pe0}DKa^5=3E?KCd`6U|=xnKw1l@AM o8#XUA6{!ewDOP2+k=p`YFhr_gP{54UXjLt|r>>K_4;l{p7k1)stpET3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..b910e1144 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Advanced options" +msgstr "Opsiynau uwch" + +msgid "Flat Pages" +msgstr "Tudalennau Fflat" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Enghraifft: '/amdanom/cyswllt/'. Sicrhewch fod gennych slaesau ar y dechrau " +"a'r diwedd." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Gall y gwerth hwn ond gynnwys llythrennau, rhifau, dotiau, tanlinellau, " +"llinellau doriad, slaesau neu tildeau." + +msgid "URL is missing a leading slash." +msgstr "Mae'r slaes ar goll ar ddechrau'r URL." + +msgid "URL is missing a trailing slash." +msgstr "Mae slaes ar goll ar ddiwedd yr URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Mae flatpage gyda'r url %(url)s yn bodoli yn barod am y safle %(site)s" + +msgid "title" +msgstr "teitl" + +msgid "content" +msgstr "cynnwys" + +msgid "enable comments" +msgstr "galluogi sylwadau" + +msgid "template name" +msgstr "enw'r templed" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Enghraifft: 'flatpages/tudalen_cyswllt.html'. Os na ddarparir hyn, bydd y " +"system yn defnyddio 'flatpages/default.html'." + +msgid "registration required" +msgstr "cofrestriad gofynnol" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Os ticir hwn, dim ond defnyddwyr sydd wedi mewngofnodi bydd yn gallu gweld y " +"dudalen." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "tudalen fflat" + +msgid "flat pages" +msgstr "tudalennau fflat" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e7f50d9930f8623997b40b2245668be20f4bdf4 GIT binary patch literal 2277 zcmb`HyKfvt9LE<3uj3s+Gy#4{JYw+P`JzZ97aS3Y4VGfXikw79NMY{wcYBkaoxRM= z-q}D~a34Gep13zjreFYD;BR0L{2hEx=I?_I@M93aYEVu^V4_*Tw19>*~phhg)psf29i-zEB@GAJx z16T{*0v`cifU{Nbbx`uS0b1}IP~uy92r+;s!B@c#Kuje&;8E}sP~!U>6nneibKqAX ze#y6ZJPQ5*O1!^-2ruRa#Mqw##g^nJwqza375yNM*aINOBa};Q%Jq1I_!NHywo&RgMk!Xn*I6j_Ox+=nN_w)F5>BcfM@Xx+<7_?U+JE zBQ;?%tTJtLQZ}RDlr}Q(M)?u@_J7#>7jx>+V6<_kg`rVltaA1TL0ywkdlX6&&8-b7 zjI<~1?f%YZfySFV$*O>1Z8MApm17LD*pbD9 z)(}Ds+GNtC%a<<5jj~axy^r0zyA6Mvzq8lvL?U7v61FjgK~WOSN3i?C`btuzA9zXocepaa4_7v<#3iO=!MRFz_hKkzG0_0e3EQrbyNLxq^rm+=TCsEmU za-L-@?Z`Bhd%JNzR`RHV6u?LB14P|HFqK)PaczrGmj_BBt&_RF?1+t&(Y&p2&XP, 2012 +# Erik Wognsen , 2012,2014-2015,2019 +# Finn Gruwier Larsen, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 18:11+0000\n" +"Last-Translator: Erik Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Avancerede muligheder" + +msgid "Flat Pages" +msgstr "Flade sider" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Eksempel: “/om/kontakt/”. Vær opmærksom på, at der skal være skråstreg både " +"først og sidst." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Denne værdi må kun indeholde bogstaver, tal, punktum, understreger, " +"bindestreger, skråstreger eller tilder." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Eksempel: “/om/kontakt/”. Vær opmærksom på, at der skal være skråstreg først." + +msgid "URL is missing a leading slash." +msgstr "URL mangler en skråstreg i starten." + +msgid "URL is missing a trailing slash." +msgstr "URL mangler en afsluttende skråstreg." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "En flad side med URL'en %(url)s eksisterer allerede for siden %(site)s" + +msgid "title" +msgstr "titel" + +msgid "content" +msgstr "indhold" + +msgid "enable comments" +msgstr "tillad kommentarer" + +msgid "template name" +msgstr "skabelonnavn" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Eksempel: “flatpages/kontaktside”. Hvis dette ikke gives bruger systemet " +"“flatpages/default”." + +msgid "registration required" +msgstr "registrering påkrævet" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Hvis denne boks er markeret, vil kun brugere der er logget ind, kunne se " +"siden." + +msgid "sites" +msgstr "websider" + +msgid "flat page" +msgstr "flad side" + +msgid "flat pages" +msgstr "flade sider" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd863e292ab46745549d148cc41f1638ee7d31fa GIT binary patch literal 2373 zcmbW2J#QRE7{><)5RUf%4GQ8xfMko?y|Y0gy5N9K?8IOb%ejCANMUaG+1rU{XOEd# zpPec_H3d>26yYmSrSlhn1_}g)3#xP}kU&WMXYcIel8}Pc?fzzVXP)_!*BE z!CycE{{kNdj~@}@N$?f$5%3K#$U6l-2d;t-f)~NZK_1T?sA0=4_zd3vjztXq34Q{8 z_K*-?fH%M(?<|z9f#<D65A-5w`lA zDy!+$89ZklNp0c&F7b|X-ceRsa>_Hl2h2J#v51nKldWJ&Y4k4Xvft-4QYM&U-N>pQ zlkDj_w%dw_wbiwUq8r@WmbzjpD(9(A3O0{qvG?Yr8ek8Tkp&B{yk@as%S)X2Xf=&KgiF}fq4bh8{j#yigVOqF z-St%(EmeINb;}MlHqJ$xysg60=rp8tXudt)j@on4+?zE2dZ*oft&OX(CY_JERvMI> zFKvh3lg1zrYmCCt^cIw0`i`!ru`*eC3VTeyf=5x8WznHCYzt{hb3cPr)AY-4?OeR<;3T-was$OWG=^{PXbe|l`bZ_YSJ1s!(4xuUV<4qj`2)!bg8XY9YpAs4t`tuAzF)L1wW0G;MeeD{eVS-d~$SQ7tja?2|;V2h9*{tZk, 2011,2013-2017,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-17 23:00+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Erweiterte Optionen" + +msgid "Flat Pages" +msgstr "Flat Pages" + +msgid "URL" +msgstr "Adresse (URL)" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Beispiel: „/about/contact/“. Wichtig: Am Anfang und Ende muss ein " +"Schrägstrich („/“) stehen." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Dieser Wert darf nur Buchstaben, Ziffern, Punkte, Unterstriche, " +"Bindestriche, Schrägstriche und Tilden enthalten." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Beispiel: „/about/contact“. Wichtig: Am Anfang muss ein Schrägstrich („/“) " +"stehen." + +msgid "URL is missing a leading slash." +msgstr "Der URL fehlt ein vorangestellter Schrägstrich." + +msgid "URL is missing a trailing slash." +msgstr "Der URL fehlt ein abschließender Schrägstrich." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Flatpage mit der URL %(url)s ist für die Website %(site)s bereits vorhanden" + +msgid "title" +msgstr "Titel" + +msgid "content" +msgstr "Inhalt" + +msgid "enable comments" +msgstr "Kommentare aktivieren" + +msgid "template name" +msgstr "Name des Templates" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Beispiel: „flatpages/contact_page.html“. Wenn dieses Feld nicht gesetzt ist, " +"wird standardmäßig „flatpages/default.html“ benutzt." + +msgid "registration required" +msgstr "Registrierung erforderlich" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Wenn hier ein Haken gesetzt ist, können nur angemeldete Benutzer die Seite " +"sehen." + +msgid "sites" +msgstr "Websites" + +msgid "flat page" +msgstr "Flat Page" + +msgid "flat pages" +msgstr "Flat Pages" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..61c6eb0f33d470ce68e6d1b4d98102725173df06 GIT binary patch literal 2391 zcmai#O>7%Q6vwAfD46e35JE*f0Tqex+KwBl$|0pKv?!>dA$8$`RE@pk_1L>J%g$^z zwtA>4BqUB8;D8*EI3kX@A?PL96BjsfK;jUI8z(LtxbUB~9TTdSQO3W0J2UTd_T{&u zhd*Z+$1sm$evkPa<_CxHgYgsiIQTPo8QcTUf%SVB%Rmd3z(2qS_!sz=TfY}Nz#)h~ z_6vTV2Y&?#{2M$19zV?3W8h2RgWw|Q^qm2p0$0HMz-!`~iFz{2g?;`Ew#4fs;<( zG4L7i1rVm#68I>19(4Y`3&Oo3HlR531b7tF#fRl$AJSFi0bvw&fFfUxZa5#@aJr`h zuCRwNU0t4>z66~g?3};BRa^L^V=J{X?7}9G;!reb@5WY@w{&W&ZLKVC+v?tpFDtal z`+`iG2(p^Gd_zzuxGz;eT=`@ZE<-1nkejYBmAmM>gF3#iu+VW(Lnq`m=7BI%r>;4v z(zQ`os9Wif?Mg$^sJ$CsSc((9A${SO@fvOqj1>`OG7Kp-!i6|f=!*_dL%XkwU4$)K zbH<8CX9!1am(nDp6La{TH^jpP;SWe`N@ERmbV5d2fpv#@!)6{)yDQp#=ZjY1fI=Mv z!uORq{s@diwIfMg|)%MR8W)}OGQy|c&tlU3ms)rY1Aqnd~G47 z%7@g}iGbi26)8_kLvYo~(04_;x_-$`q>UnJOi|7Mmf^PbgSDn} zFqdL-LCl^EOGJQ#CEQ&)O2mh$OoY!|&J071Vw@4AcqEvWHWX|v(LK?&-iq(Nhmdfp zL4J>`K$q4Z54TuY6&-qCq~%itIdnv>DfMKtRoWdf@*8`NjB(oOWJ*JkulRMt%YgA zL+_$aBGVuh7ou5ST%z&g@|-%cP^&F3FVO2$BWxLqb%+Zy@g!ZpK3!VGQXNYt=a))s zT@UlG2T4yWS3qNVPpBSeYxzj_^PAjvo#m_BI?GmtutN+L&p*mXnv5tD&u@|0{a91H zv+eWzCS^O@?E#ea(soLmhI}R|-rw0aDkT%8`K^9hxvN2Z_;;`uac4d23E$cHKdrOw zG3k;2ZbvZjwhm?6HA>YJy-6Gjk+stNJH$9{M@Yv^&%rLVMH!+QWN@m&u2_662Hm%% z`*JEtC(-agPwL@}Ceb(e!gfbV3d=)|jQaUaJ!?$+zPaUSXFI>8T+Paa=Ky&WgwG2; zqi(|<&x(3Zyh(b66O`#7+#R7b@UE%z5m`ah}OBH5Q^LONOlw4y=m zBv;pQy&#k++Z_#g<`yP-N5?LzDbW;l(X0lr={$<`I49G_g-a3fgZJb1+PMxk-gx($ zGcnN, 2016,2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-25 16:06+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Rozšyrjone nastajenja" + +msgid "Flat Pages" +msgstr "Statiske boki" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Pśikład: „/about/contact/“. Pśeznańśo se, až sćo pódał wócynjajucu a " +"zacynjajucu nakósnu smužku." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Toś ta gódnota smějo jano pismiki, licby, dypki, pódsmužki, , wězawki, " +"nakósne smužki abo tildy wopśimowaś." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Pśikład: „/about/contact“. Pśeznańśo se, až maśo wjeducu nakósnu smužku." + +msgid "URL is missing a leading slash." +msgstr "URL njama wócynjajucu nakósnu smužku." + +msgid "URL is missing a trailing slash." +msgstr "URL njama zacynjajucu nakósnu smužku." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Statiski bok z url %(url)s južo eksistěrujo za sedło %(site)s" + +msgid "title" +msgstr "titel" + +msgid "content" +msgstr "wopśimjeśe" + +msgid "enable comments" +msgstr "komentary zmóžniś" + +msgid "template name" +msgstr "mě pśedłogi" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Pśikład: „flatpages/contact_page.html“. Jolic to njejo pódane, buźo system " +"„flatpages/default.html“ wužywaś." + +msgid "registration required" +msgstr "registrěrowanje trěbne" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Jolic to jo zmóžnjone, mógu se jano pśizjawjone wužywarje bok woglědaś." + +msgid "sites" +msgstr "sedła" + +msgid "flat page" +msgstr "statiski bok" + +msgid "flat pages" +msgstr "statiske boki" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f9174a12cd6fde05999f1f85852b18ebf7802f27 GIT binary patch literal 2864 zcmcJPU1%It6vwYxt*)P~A0Sjb(iR)c?53e;*_vY2rUV)qOR6tIne5!%opyF+oqIPQ z`m!derI0*SXhp0bh~Pt#vW-i+CLwS7c1L~jLGU3jqV(Md5&WOKAL+KWJ~`~pZ|bU*S7W5tz;(PFSkoDED`CDKeWofIJ%;V72c6*%l@?R*nnlvUxxlwg!OJ z!{m#7@%2~}_72Gc?rmM3ylEaGqd4BU8|I`(QCa&@sKn7pw^R;fmNu(bGVWMZ(V1Kn zYB#4do7K8;vlx3l!#>k35#8BI*R3c6+f1q;G8Le8kMm|Qs|bX z(7q0&7>T1ZGN+v(&v_dmVO5sAGj3RjQYU3OinTMW3clyOUMVPNG|EzHhJ5{@AMsX`VLUv%h~={Uh2b@I_@g%jK*$=cGFRurNKxe4@b~Pp^Oy0n&AW~FDKIo>@Ze^g$iPFMx|TI(y>^|v$U_Mbvc{KOiWCqyX-Sfsci(U#Tgl7dQ!tf z!$-G*+Mn)Az0u61Gdfj zeBBY5B^jhff=cWL&R`UmRF=ZB9jbx;L)3g6*cZ|Z1GK;AP)e9Dk`K*Baz42Lu9!8m zXx2?VnI_z-reRjihFLa?$uulY4K@qr8&k)NW!Tp4e0E$(lld4%*G$bck_+ZKp06ge zrcTKm&>(oO!&L)*&$BZ!-@^1dhO^Le4!b8acw8~-#CyVMscC|xu;AMwD@&%+|F^6K zR^Qz8R!Mi+d+V%eov1e-UYwqb92zImV#Tbs)70CFa3+~=hZ(!xTxt^Re>v+G?IVRB<4HnxfU&BVR(dD9ZVwy{6CuE@AYIQ6|tMp=%WDb3Z zO3&~HHdCCfW_u#;W-<^w_Oac{3BoEQ1xea~GPqsmxob9Lo`)kVt1BL)K{wl1nrVK=0MbC7;*XGG?KI1Lgve#@SSPZ_P1~#!@QKzH14{Go- z*D2O*RYi90;E{6<>Hp>N4qcKKoix_b&U4U@Prz&l3(oH{GRB>K)pq&{H^6xe(W{7d zU9eybx_h!c%bk5wquI`8dp?C&GM_, 2011 +# Fotis Athineos , 2021 +# Jannis Leidel , 2011 +# Pãnoș , 2014 +# Pãnoș , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-08-04 06:27+0000\n" +"Last-Translator: Fotis Athineos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Προχωρημένες επιλογές" + +msgid "Flat Pages" +msgstr "Απλές Σελίδες" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Παράδειγμα: “/about/contact/“. Βεβαιωθείτε ότι περιέχει καθέτους στην αρχή " +"και το τέλος." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Η τιμή αυτή πρέπει να περιέχει μόνο γράμματα, αριθμούς, τελείες, παύλες, " +"κάτω παύλες, καθέτους ή περισπωμένες." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Παράδειγμα: “/about/contact/“. Βεβαιωθείτε ότι περιέχει κάθετο στην αρχή." + +msgid "URL is missing a leading slash." +msgstr "Λείπει μια αρχική κάθετος από την διεύθυνση." + +msgid "URL is missing a trailing slash." +msgstr "Λείπει μια τελική κάθετος από τη διεύθυνση." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Υπάρχει ήδη Απλή σελίδα με διεύθυνση %(url)s για την ιστοσελίδα %(site)s" + +msgid "title" +msgstr "τίτλος" + +msgid "content" +msgstr "περιεχόμενο" + +msgid "enable comments" +msgstr "ενεργοποίηση σχολίων" + +msgid "template name" +msgstr "όνομα περιγράμματος" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Παράδειγμα: “flatpages/contact_page.html“. Αν δεν δηλωθεί, το σύστημα θα " +"χρησιμοποιήσει το “flatpages/default.html“." + +msgid "registration required" +msgstr "απαιτείται εγγραφή" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Εάν επιλεγεί, μόνο συνδεδεμένοι χρήστες θα μπορούν να βλέπουν τη σελίδα." + +msgid "sites" +msgstr "ιστότοποι" + +msgid "flat page" +msgstr "απλή σελίδα" + +msgid "flat pages" +msgstr "απλές σελίδες" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..8fe158ead --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,96 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/flatpages/admin.py:12 +msgid "Advanced options" +msgstr "" + +#: contrib/flatpages/apps.py:7 +msgid "Flat Pages" +msgstr "" + +#: contrib/flatpages/forms.py:9 contrib/flatpages/models.py:9 +msgid "URL" +msgstr "" + +#: contrib/flatpages/forms.py:12 +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" + +#: contrib/flatpages/forms.py:15 +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +#: contrib/flatpages/forms.py:29 +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" + +#: contrib/flatpages/forms.py:42 +msgid "URL is missing a leading slash." +msgstr "" + +#: contrib/flatpages/forms.py:47 +msgid "URL is missing a trailing slash." +msgstr "" + +#: contrib/flatpages/forms.py:64 +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +#: contrib/flatpages/models.py:10 +msgid "title" +msgstr "" + +#: contrib/flatpages/models.py:11 +msgid "content" +msgstr "" + +#: contrib/flatpages/models.py:12 +msgid "enable comments" +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "template name" +msgstr "" + +#: contrib/flatpages/models.py:18 +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" + +#: contrib/flatpages/models.py:23 +msgid "registration required" +msgstr "" + +#: contrib/flatpages/models.py:24 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +#: contrib/flatpages/models.py:27 +msgid "sites" +msgstr "" + +#: contrib/flatpages/models.py:31 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:32 +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..354cbe6aca876b0552755c1e97164bd4f3ea33d3 GIT binary patch literal 2210 zcmeH{&u<$=6vqb$zg&KlLT^Ppq$0&4YdZ!(wILM&9260&QRHwbRW$ZKucw)vH8Znz z!YM~i+&Cb$C;koo2sm*-;*c|UB)IT>>m*h|aOTjFXFvOPcE0m{^Tzw@wUuub+H2@H z(0@RG9sP?Za6$VKybAsV-T}|REwKBfQgbkZ4e&QG1%C%WmGP&b0e%JIr+&ue4e%F` zz(2uf!5b?|y$s$2p9kLsMejCv9ozw*1`oj(K|YTIcnU8kp!oX(FNwb^&n*1i1;yV( zQ1q^2G4V&B_`3^=zwbfur=DB*TLB5-O%Ow>2a3NwDE{t&qL+i>&x7LcYf$`sa~?kc zVXvMG)MKxJ*U)9YXvsWmSG^9>sA~W${KyU33k#^1&MAPjx`Hlwzlwg*kSdbTX4;K7 zqjDNe>4NGV>tbp-rL)rqZ9Ocj*dCQG>QQW;ojz<)Umr1r$}`21CVIwXS!c%Oq+LeQ zYhxt{R)-0P)_>^zi=4g`tTi507+W2uI_Gd<>QJKABo?-o+Zj`wm_R1Dv(xV)O?^2t z8E0#F4BICmazS%rEmeUf#id}zV_n&Jsin5D7VXJm^{p&~sc}M;xAfL3uFXK&dZd3s zd~8AtG%h^_6B*-zW>8BY`xsLW^UB#u~Y*7}hsg84*@4Lo_NqBgpECtX-6bU^N<>Ns$ircco+7 zs4yYa)%<%I{xSY&ty@YQv5Sgbox-Rr3WPz)7Lz2gybH>6jt%o#4jp;^vNE1CC3_YW zYBa?hCZ`Kl(L~E?&zJXk6qB7S`5Y->R!Z4@?eem*&(qS!q#tsVB_CCJNCss}jlDa` zKF^H2ntTGal)9bndeV6>>Apjq_tS3Y?G9RFSBIDkymmNlvGgf@22)J^(XOuY2@W%T za3oJY%yFb$Y$31PnB?*bDJ28eMM^!FTN5ULkW#+HTM1^A?`DV8(nb zv)c>b7qI72ZFYxS2kmB~ztit6lU#3g8XqrqHW{2ukw)a>*v1AKw}B(2ec-rxFxXCR zE#H&n#_W@x8, 2021 +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-06-23 07:20+0000\n" +"Last-Translator: Katie McLaughlin \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Advanced options" + +msgid "Flat Pages" +msgstr "Flat Pages" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Example: “/about/contact”. Make sure to have a leading slash." + +msgid "URL is missing a leading slash." +msgstr "URL is missing a leading slash." + +msgid "URL is missing a trailing slash." +msgstr "URL is missing a trailing slash." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flatpage with url %(url)s already exists for site %(site)s" + +msgid "title" +msgstr "title" + +msgid "content" +msgstr "content" + +msgid "enable comments" +msgstr "enable comments" + +msgid "template name" +msgstr "template name" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." + +msgid "registration required" +msgstr "registration required" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"If this is checked, only logged-in users will be able to view the page." + +msgid "sites" +msgstr "sites" + +msgid "flat page" +msgstr "flat page" + +msgid "flat pages" +msgstr "flat pages" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a85d1d16353d54a6f361d4464c866629fb31debd GIT binary patch literal 1989 zcmeH`yKf{#5XJ{MUdtN^kswh7$X=a$AC}?F7$dmDKAH0h%UUA>q*L!s?QGxmbT8dK zyLN(vgb+jr0ST8PG6HfWazsEzfJDgO!B?~PEteBsOFh5oo|>w!zMlE}#Y^917%yPH zg82jH%a|Jv;ezoM_&oSEcmw<%tiXT392`EJW!J$w;3wdp;3MD`F0X>yAb}r)kAr96 zbKvLTli;^t3%m=y1pWv<1O5U&3jPNEgj#=qqT@4cijF&===cj19S4ssb$kJej^9DN zlC@D(bSRL(0Vp~gE}~-&ijFTq(eVu^I_`p^<7ZHG{0c%wGi3i+OxeE}PvZuyH#wg; z--LuF_fy~{Oz~KHkUBC%pA4kVviFL)c4IEc&yw*jW_zc)npw_it*b}APTjG0Nsm)^ ztwRHSn<>_TDS4XeIg@2w7*~>Z1*M>kl|{5VPC0h|lWSsin(30`MY@}^>P%B*k@sLi zX=);w=++X=f}fj$iw$g|+*wRq(ZX0ub!1vwr7C!$Yn#rqWc%ke5Syk{2TQN7={{KmRu;~q;`l)86ze=vW*FI!;3~{ z(@r*&F6P?SOjR8dHQwRnWiCz$IX1}E)u_2Ce8RGJ1y*Ap7>lB@ZsWp3g4ASeA#R== zAIgMFRGAnX+wUDf<9QQv|MU9~rIU#wb}3`mv@rHng=NgdRgxxFcQFfG!myy_%b>uY z)+TU~;W%c9W^%gXESY3EI|}|5kCQqm)JJFr@i`T@v@3nWAx_1>cXm3(XSa&NQOL!dh5xsjZ!xGM-!eZ;+)Z}l$s zFj|K?CN&J&!HVQVP9JFJ;MF1HW3u!%)L{9pZI&J5CjK3~FJRB}b=lp#ezn_f4Gso-D@XdB zUhCTO0MzhohL#hbrY_txZUv5|9|}S{{o&pMV9~o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..68b61588c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,85 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Advanced options" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." + +msgid "URL is missing a leading slash." +msgstr "URL is missing a leading slash." + +msgid "URL is missing a trailing slash." +msgstr "URL is missing a trailing slash." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flatpage with url %(url)s already exists for site %(site)s" + +msgid "title" +msgstr "title" + +msgid "content" +msgstr "content" + +msgid "enable comments" +msgstr "enable comments" + +msgid "template name" +msgstr "template name" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." + +msgid "registration required" +msgstr "registration required" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"If this is checked, only logged-in users will be able to view the page." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "flat page" + +msgid "flat pages" +msgstr "flat pages" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..19f2a2d62d42cc5b39265950e323d379268c701c GIT binary patch literal 2032 zcma)+%Wqpn6vhWAFY_*s6^KJcr9|Y~N$4Ut1hupYsz{V5O_7k;jD3%<$DTW5X68B% zHeG_)A=tGWmI#D|5KBa*cFO`5ED$WZL#*I0;5*lG!b7bXd+u+>o;h>QH|N}6PoDTh zp*@NIEc(~z&!Mm1g$LSq;N#$Ra1;CiJO`e-Td4+^gKf}*Z-AeH?|^@T_kf#tJP%$1 z35?+V;K$%&;8pNJ@N-b?eFHuXUI*_5e*zx?e>t504vyi&AK*#+-p8VC@I6q@{~ml4 zeC9r-&Vr}GH^ClQf?t8yst8V;0bc|cz_&sCr9K43uaCfo!B0W4_a*og_$`R9`VkND z>t|5*{RYCVdM!}z72Tddm-rq)mj+qt^(R2lT$=bZZ4Vs|#P+nwd7_Q@B{5H%=%dc% zW9_<}lOHAHT~w=kx*S<<)2%C4Te{<`)arVdbT_qbUAfkz4LxLvRbWb<`g+V{S?9(T zq+L!aXk%p(t&V+;%{$n;jX8Z}u(r`uYgQ-P(gnwQIKqf_P3lt>ES;Xgb2gH;0dDLQ z@0pk)^?aac661ftY*ZI}l=>zTzTG}|hn&xmcXpqwFAB~x^6w}~KK zG(FyvJ*|n)Q^0y{pvAs5+t|3cv3eZcLUX=xej;hMvp<6WiT6?q9vQccT+$(OTDiQl zmMtBxle2mpvQ^jhQXFks>X>xoXq(tKwrmx&&DMM4>r&1$MY@9{K?dJ@TTKS&K9Qzo9dF0#2FyjZd`+>lj&qe!^)AQ@U(CTx+ESRAPM0h5{Rru9wr|6 z, 2011-2012 +# Batist D 🐍 , 2014-2015,2017,2019 +# Matthieu Desplantes , 2021 +# Robin van der Vliet , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-04-13 08:09+0000\n" +"Last-Translator: Matthieu Desplantes \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Altnivelaj elektoj" + +msgid "Flat Pages" +msgstr "Simplaj paĝoj" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Ekzemple: “/about/contact/”. Certigu, ke estas suprenstrekoj komence kaj " +"fine." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ĉi tiu valoro devus enhavi sole leterojn, nombrojn, punktojn, substrekoj, " +"haltostrekoj, oblikvoj aŭ tildoj." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Ekzemple: “/about/contact”. Certigu, ke estas suprenstreko komence." + +msgid "URL is missing a leading slash." +msgstr "La streka signo \"/\" ne ĉeestas en komenco de ĉeno." + +msgid "URL is missing a trailing slash." +msgstr "La streka signo \"/\" ne ĉeestas en fino de ĉeno." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Simpla paĝo kun URL %(url)s jam ekzistas por la retejo %(site)s" + +msgid "title" +msgstr "titolo" + +msgid "content" +msgstr "enhavo" + +msgid "enable comments" +msgstr "ebligu rimarkoj" + +msgid "template name" +msgstr "ŝablono nomo" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" + +msgid "registration required" +msgstr "registrado postulita" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Se ĉi tio estus elektita, nur ensalutitaj uzantoj povus rigardi la paĝon." + +msgid "sites" +msgstr "retejoj" + +msgid "flat page" +msgstr "simpla paĝo" + +msgid "flat pages" +msgstr "simplaj paĝoj" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33d67b0714ea432e7dd4bb63cc43cac99522da3e GIT binary patch literal 2258 zcmaKtzi%8x6vqb$0S*Wdpg}>r7?5J&y|Yas!Wl;x;((=Cw&F7tBAVNs+Z$(gW|^5i z`%ooF6}g9~{4c&w{^#Ti_wM1};A=#6B3o2KX1)2LA>>;OCFP26z+1pZE2?yrC#mUQu+^ zmjgvc$xPdvq|GRLsSPiJk)f|b^8xnmV@@6!tZf{(&@(cYGFM?L>N>BQ{aBdV+(wUL zUkB2`9^U#gQt915XDVC3ZO9&ms0!NG#!wX$yErqLsh+G%JhCOO;9IoKAFD6PeDh8=ZyIvW{N27tMmqIan=mUxI9-`qAg4DVXUgF zNOnyf+ksa5wd&eK(P6g+(o~9yDnzQ2g3V)FDn{5?AX^pP`XX}?%gSb0rOqoXvN|IR z)6@{8Mr|@q((bjZd?IXA=n(2`{yPo-d44?CO~HzkjY8Slh13-VmO*fciJh2T1>seW zfO*M9M_zqeX|FQDF$)4YDzQhAm4y;fN2A2HcY7+0$wroZ1edU@P1&BbxoccgrSmb_ z47tvd_o_T39oMGD_EvID4K%-+T!ytaEiW!FCW~(;%NJ7B~!LUrYZrKNZC0>#~gUzf1S<`rB@I!YF8+9{>gp-<=fF_!IC zYkz;g3FmCkJ$1l4T4SwKn924Q3VFV&%A_+ap*yOB*g{0KT|o^= zA5>i3?OaJN&fep1^^{N6ZR)rg+jOz3WXpOPR+m?3e7Sng z(%Ds7nqO&%tujU26zUt};ig3Ci1j^A3nF`;!LSxoKDvWSQFrtancGgu)dwb5fX?=>`Q=*ifcO^CTB?P#)&AQ6KBRl`oo z1wy(5s!YDgEd+&CN{RI~(SjVtaHuhXVmojicL9rw9+N+p!%~^ilWIP+~?7 z(T9>dfD7tq3wJOXd~r5S1mxAvsgOREnM1RVelQNRB4A2X(ra8yTPMSH=`u*QG(fOn zs~ihMJm3va3m!)f2FgkyDdP_1R~4$0$HnMQp}fOYS=q?Ut8w1Dau4Pm6=(y#Kgpy! zHZs=un>-gVv3k-(jP7ZAwAHER6hGjdNfC@y>CB0~>>~P6dMM@DQTr<l%7 lJ8C>e6#g?!BIJ0UK)tZ8=;AgafG)Dgu#qB;zKfM{;va%+sU!dZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..060a38578 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2011-2012 +# Ernesto Avilés, 2015 +# Ernesto Avilés, 2014 +# Ignacio José Lizarán Rus , 2019 +# Jannis Leidel , 2011 +# Uriel Medina , 2020 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-09-25 17:43+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzadas" + +msgid "Flat Pages" +msgstr "Páginas estáticas" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: “/about/contact/”. Asegúrese de tener barras al principio y al " +"final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor solo puede contener letras, números, puntos, guiones bajos o " +"medios, barras o tildes." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Ejemplo: \"/about/contact”. Asegúrese de tener una barra al principio." + +msgid "URL is missing a leading slash." +msgstr "A la URL le falta la barra inicial." + +msgid "URL is missing a trailing slash." +msgstr "A la URL le falta la barra final." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr " En el sitio %(site)s ya hay una pagina estática con la url %(url)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contenido" + +msgid "enable comments" +msgstr "habilitar comentarios" + +msgid "template name" +msgstr "nombre de plantilla" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Ejemplo: \"flatpages/contact_page.html\". Si no se proporciona, el sistema " +"utilizará \"flatpages/default.html\"." + +msgid "registration required" +msgstr "Se requiere registro" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página." + +msgid "sites" +msgstr "sitios" + +msgid "flat page" +msgstr "página estática" + +msgid "flat pages" +msgstr "páginas estáticas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d28b2e46bc1c7bd80b2207c81b4bb08a33976f54 GIT binary patch literal 2275 zcmai#&x;&I6vs=Azs8@5dXcCvV8{$^&+IM=al#6#+2}%+T{fG5AcUIknx5KJS9PkY zXLobT!GA$PP-L&7CvU-nFbA)C@(}Q_;LW>&7r(E2CgVn<&2)dNx~pD&->Z6WemQmG z6M^eR+^2DWhx--WA3cNzt{=hY!JoiQ@CaN5mmd~l4~$?7{0;1bzk~1d_eWp@yanPX ze#YZ9@GeN;pWx%*=@UXc2fhwI3BC!ky?4Nuz;*CZ@H+SmsHXh@-hh?^@D$$vib2=F zKS0*G`Irzl!7srVz>`>P1w0FW0H$C8ehsp|m!H5l@Kx{(coAehLy+f};7Rb~Y5!A@ z^?e0m3Gw~({SP2ain}1>)xH6>cAn2#**~_;ej!}-c(_sT0Z{8<^7V8B@$8fgm=;gr z=6zvpvx{|z)od(nsxoqA)XoO6wl9m)s6HLt{=6p#u8O_X*(lT4JG%Wvmp0@LMWOPF zqN9-6!E+U6u}M$t=cxD$*FBNe*;VebLv*#{x2g7&mAR0YK@&JAX2C@T~1*%Ftq7H#ojb(0su z)HtHb8#>#@vlB=f5BCp9?duQ&4V|Z;qr!JaCy2QsN=GWa!CIU(2V`8Ht1Qu$rTEaO z8Yq$jQ^$6!)n2W-_E7AwTVrV|MMV`N)tiFJjV%=;Y%Gwiib37TTtv6B8G5Pn3Z1Op zk%igT5Tr(JGTx-C+n4!9*r?DU)Vq2AHvHrJ@xAT}R-|kc%GNHVt|-tAfSm?A$^^$O2<%abIf|?-l!!VSCAPfVRcTDtv*a3F!mK`JyVB;awXI6$ zW3mx)oh9#9c}R9#pITd+$+jA69-3T)wLUE`F1?*BEhdXgw6xe?e(Q}zT&>G8#AL@y zi{loZ@6)y{w0E@OyfiA{yUi=8Pj-|n`gEm~R)-O_SA7omw3Qudk76wQz24s5UKc*u zpoeO|ivaW*i8Gj~sh$egSGRke*2enA+T5R|?qch`CWy(-K?%iC?Z+Nsq3s2n9_fRM zD_3_eCFkekc)6kS$(l_ar(vJY4|Kezx=;05tu0f*o#c}9Md*_)>uy+CzCcZLrETfV z3N3Xmw8UnaB4`SS8@1t<#JLe`ySyg|>jSF7YEb#)4vv|kOyNLFPXp<_40Nt{4oQMU z)Hcw9`+7C2aXY;>Ut*mS;QyZ2$$4no$H_z;8{kpGIT+w75vXE;84iLL6 z7f2c8FINd!doelupCYj}In3cpptTSuhf${p)`zkw2M7ez&UA3b9xENC^ccwNAqnOM z1G*I3qC)yqW)2BE`4%#b3y@SvuhE#LPlk5sGCw)AG*+IBq_RktDURdHWn*%uP~M?cRyH#8syPA!x%>BSJLxRUcDCK?kULgFR(XA{6R2QA zX(D2X0QBzLr2iN-Jr<2pojHNO9X-ZjLM}mY?Yo#d*hGmVK6?}9uY#yuMj$bH9xN^} b2%oU77~mfaM-|D1BsNBhIQb@4#)-cG-f6Kt literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..0c0d4a9ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2011-2012,2014-2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-01 10:25+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzadas" + +msgid "Flat Pages" +msgstr "Páginas Estáticas" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: “/about/contact/”. Asegúrese de usar barras '/' al principio y al " +"final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor debe contener solamente letras, números, puntos, guiones bajos, " +"guiones (-), barras (/) o tildes." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Ejemplo: “/about/contact”. Asegúrese de usar una barra ('/') al principio." + +msgid "URL is missing a leading slash." +msgstr "A la URL le falta una / al principio." + +msgid "URL is missing a trailing slash." +msgstr "A la URL le falta una / al final." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Ya existe una flatpage con url %(url)s para el sitio %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contenido" + +msgid "enable comments" +msgstr "activar comentarios" + +msgid "template name" +msgstr "nombre de plantilla" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Ejemplo: “flatpages/contact_page.html”. Si no lo proporciona, el sistema " +"usará “flatpages/default.html”." + +msgid "registration required" +msgstr "debe estar registrado" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página." + +msgid "sites" +msgstr "sitios" + +msgid "flat page" +msgstr "página estática" + +msgid "flat pages" +msgstr "páginas estáticas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0564ec3d424cb2ad8d33f92bd10d903cb33e5d22 GIT binary patch literal 2140 zcmaKtO>Z1E7{?8?yeuz;RvbXQJXM8~(9FIBP}>bbEg^-7Mv2lbC#1?di8$w0mlq-S*f>YrD+I|9r#ED*k4}swS%x1GhLbc-kjc4rV~ckpBI#Ycp|pV-CEtKcUf zfnS1;fj@$$zOM`%8g^3Hn#sHI_t$bPaEqa zu4F@LQ|CV6yP?ihwuqN-HwsbZ zw5yGwGANpxnaWg8mL?ur5m(`Zw%AGa$PTb94yg2oUYp17LLg~8LLQOY(;)`xIZr`H zh3|}oAZD>pI#B5?j>B0qBIEjfl_lD87(PrQ>MD|5Q|U3(YPX8G%1m@Pp`kRTqPz@| zDjBhOVoSvc8;fMiyjwkFE@D{P45QR}g+W%SxHy%Q5NgyWV_|P>U*itJDAyrWJ8-lY zmHgG53nmk*~G+TTMaeaoXxv{Ny$=^ns2n5t@BN^+BF$s z((%$lkm!7yR;4#C&_+4_*6q{VX7VSo3cXziANo>$Pwa1GalMJUYhn5;D++5vkEYvpEH`ZoywCc^; z>SPa+&Zt1XQSHSBq||m9hfn&T;>wNA)#T!A9=q!)pRC!`@y%<~#jcJ=LAR;$RogP9 zmnOODd>-0li)t8FmX>MqxH50)>!)o1xF@l7x=KW9IFM_HCab6jxvCA z!l6mr3%5wh;Hq*lz&J=hK6pSa*cu=7;Wt2zI6jCvMN+h8CpK`xj_x~+Br4em9*FBl zRWuM58914h4S}dCOO#8W$_&wj@ps0dCJ60R6uum=! zC`~Br2UbF_2x9_9#6f, 2014-2015 +# Jannis Leidel , 2011 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzadas" + +msgid "Flat Pages" +msgstr "Páginas estáticas" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al " +"final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor solo puede contener letras, números, puntos, guiones bajos o " +"medios, barras o tildes." + +msgid "URL is missing a leading slash." +msgstr "A la URL le falta la barra inicial." + +msgid "URL is missing a trailing slash." +msgstr "A la URL le falta la barra final." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr " En el sitio %(site)s ya hay un Flatpage con la url %(url)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contenido" + +msgid "enable comments" +msgstr "habilitar comentarios" + +msgid "template name" +msgstr "nombre de plantilla" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Ejemplo: 'flatpages/contact_page.html'. Si no se proporciona uno, el sistema " +"usará 'flatpages/default.html'." + +msgid "registration required" +msgstr "debe estar registrado" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página." + +msgid "sites" +msgstr "sitios" + +msgid "flat page" +msgstr "página estática" + +msgid "flat pages" +msgstr "páginas estáticas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b3ce53b7abf4a3586b4bfb4d5b41ba0738f85e5 GIT binary patch literal 2062 zcmah~zi%8x6doW1IDQ8K4HAz6`A+fPoh?Jm21l4+gNdy~$pxiAisp9T-HkIlv&_t% zeROn$22nr(4VHk83aW_iBnm1d3Ph8VmVbe7_Ix>~fsyCFnccVV$2adA-#v5cOM&q$ z=1Z90VZMmD`~ZG1J_SAlybZhr{2EvQ{|2VO-h)EC3;Z1TA@EP&L%=osybN3i67UA_ z5#R*)H1HGPW56$f4d6Gx=Yc-}p9KB_d>Hr}@O#Ai9e4)&F&_4Sw}BdX7kB}9>9i2< z0Y3xA{Qdyq6S0Y)P2d)A321;Z?pMI)fZqaR?LPyf|6hSIkH3H~0RI8vPn>>K2&7Su znBP;FF~9kE0t=L0*9OyiAcZ>C@w>Z zo4lrOdCnmr)u419*}Q&rH%_obh4Q|p{oVo8oYyw@zrX)b+9GDeCI~il37IVlY`uuA zQY>Pz^1|^DggF^IgB*WUDaX0Mag?xTGO}P1RM0H0IJ?hTNOtn%0~7=Ml=6LPhPH8) zOY1_i=Z7j!-mZo|>DiPTS1$LGi#V3(J9!80Qd;enR!wu{l&l|CdrCk?0w)}{2mGzMJlGMY)#o5%*+w{*R2D>JYc z@QoQ(C_3q}EK<5wN|=nOxra{4Y>S$s5X!XEIXF0Ig9qc)fDhXsturfb4*J+nhyBgH z8=Y2TZ)b07!Nf|t+qgI*KIu(Llp6RjbikrA=h1P}c@7)bd)vwS!Y+mzuuHZ~W~0VZ zTJNiHFXfc#SdA;Xa#APT))hV_Q`TF*v3j0n%Z;X?S2k#+b-p1kml;@O2m+%2Sfba& z)_y!q90=r|vCHIKpf(DA)AMk82aU;;GbA7#^`&#t!+Z&{f>xEuRH-aY;&z~n)X@Ds zrwg&7xA5}j@oi$~(!Zw2Sja4@9(@w?lgotj^5{G+WF2&R^dGX{l~hiTqVp&>()i?r z^e1wrdPZ|QtfOPJ+(PYdIpfVv zi|l=u!DfsfZv@;$1E~Wl2MM{7Ly)NBc_^d6sQ7=w`rwW)2bEia3tx?K+GurTUXvi^ xEZ1}emC5-NKVz_dWH@8A2^gMphTay&7JdBJKo3R6pcdR|T8c3JF;v=$e*vT?XMO+x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..1fbad5ffd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,84 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzadas" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: '/acerca/contacto/'. Asegúrese de usar barras '/' al principio y al " +"final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor debe contener solamente letras, números, puntos, guiones bajos, " +"guiones (-), barras (/) o tildes." + +msgid "URL is missing a leading slash." +msgstr "A la URL le falta una diagonal al inicio" + +msgid "URL is missing a trailing slash." +msgstr "A la URL le falta una diagonal al final" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "La página con la url %(url)s ya existe para el sitio %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contenido" + +msgid "enable comments" +msgstr "activar comentarios" + +msgid "template name" +msgstr "nombre de la plantilla" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Ejemplo: 'flatpages/pagina_contacto.html'. Si no lo proporciona, el sistema " +"usará 'flatpages/default.html'." + +msgid "registration required" +msgstr "necesario registrarse" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "página estática" + +msgid "flat pages" +msgstr "páginas estática" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..daa82b4d6da469edec8e9a2e12f9d3522f71fac3 GIT binary patch literal 2187 zcmaKt&u<(x6vqv;6qcWD0RiI2s}LknGrOCp(6Vh1rAa6!%U^&{kG*l=uYm8H-OV-v)ynM0p0S_b`#$^S;gJL13ACel z-oo<>p11L=J%Jyz-@uo_`{0-0A7BB#^P~_B@LRA0eh*&c@8DP9n@e&CHhDhCew}%G z9Lta3=NSJw;UR1)G2Q@Q1b+tK1Mh>!z`sEDjru1^*lfbb>p~s4{jVQH-x>{*#2{PSTBxw+E^cP zHXBNts*GG2wX;F2?#QAvszY-v*>hEFrOrl~#@1Yu*5wUFq4J8Nqk$YMGD>FJ<|J)K z(MxT35R4216`GIO>KhqLnX520cb!MgK`adHUg}dE=s-Hyxk#mVL!GH?5ihabZiuR& zZEXxyLDAgIRHpi}GI3%>T)-Z*!JE`w-T=$ufGTh3{dxQ@1d_(XbPI=PBr@ z@SU*`#LO2;2P(b6emHA($+$dMS)whw;ltRYo+8;ZwH`yQwrh{;$V8U|8cI_sDyk5v zmJy4`wp5I;u}HQmdUYpr5yQ%67^TiD46<6q#i^VGSEDu=3ww2QjUNa`g$|+4z+NtD z`Rh6RzwggaQ?N(MMxksSLh6bF!ys5-;vi zER={k8YMQo+fr#vE@jCzgoITc%C@AGbWVd4a>+geITBj?F8`k#v4F&O+D$o&Y#ccT}hhdoE6s;Py(# zd0gBy)uTI>xQd+R?YWeoi1nq3lE-!CNL!t1PSj)OOj0>^P-jk*$`{ba!)LB0b>!kd wB2VA!%LdMyRjEQEA?;KwoOrG>h(%ae^zg3-daz=+N~nfLia7cyR>p~c0a`+ZqW}N^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..dbaf54bb9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,85 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leonardo J. Caballero G. , 2016 +# Leonardo J. Caballero G. , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leonardo J. Caballero G. \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opciones avanzadas" + +msgid "Flat Pages" +msgstr "Páginas estáticas" + +msgid "URL" +msgstr "Dirección URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al " +"final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor solo puede contener letras, números, puntos, guiones bajos o " +"medios, barras o tildes." + +msgid "URL is missing a leading slash." +msgstr "A la URL le falta la barra inicial." + +msgid "URL is missing a trailing slash." +msgstr "A la URL le falta la barra final." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "La página estática con la url %(url)s ya existe para el sitio %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contenido" + +msgid "enable comments" +msgstr "permitir comentarios" + +msgid "template name" +msgstr "nombre de la plantilla" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Ejemplo: 'flatpages/contact_page.html'. Si no se proporciona uno, el sistema " +"usará 'flatpages/default.html'." + +msgid "registration required" +msgstr "es necesario registrarse" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página." + +msgid "sites" +msgstr "sitios" + +msgid "flat page" +msgstr "página estática" + +msgid "flat pages" +msgstr "páginas estáticas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..82b3c23b1ecedb486a09051b80025083156c60fe GIT binary patch literal 2233 zcmai!zi%8x6vu}UejUFfQ)u6#J%jfCU3lU75qu2%3A_v*fak%bW5(=&5p00JgKh8+@NNBmH#ESHK>W zUI16_HRfaRQ&4pq*i7v^3BC?q1|9f0sP_E@&V$G9HzomFAf(L);8S1+#Lw*ErFx%$ zPlKO<*uw0CI{#Y`Kl2@4Ft7FvsBM27Jb|YEsfPN6aMf|pwVDHc)Sl_{(4_Oo^bb(= z)o0Di6KK;%?J(!lA-k@mR1TsoT`()VTnut))4`3eTHGnC*y@%payPaPZhYOOHSPCkmEzaTH|(wt(@b4GYM0puIs4Ti$z|` zt!`25*+4e9gBxE)8u)T(Q%UFXH_YA(Q3~3zc}`Ujb#W$`$`)67Jk&B5u@|lDW_4FL z!qV8I%IEaLX}sqGaqi*%9?7l^G0;}&DcC6Zu9ypEW)XFJ((S7)rOWpyFSAV2#5y&_ zhp|;1A@1aLY=>5MYO8Ax&8E6FG3C7zU#uCUs)g z3&u-^fO*zKM_xXxte4bi%z{CV23RBHxDXR<%*Cwxa$CAFSxu8`a0#p0ly0-j%EpEa zN*|N8kl8eOv&urUS+=RMemU8Yq1CC$1*o-YX<_lzWN|53IztOf?U!D8aRE=`5{H;< zdUiN&vGi@);LNe74e2n>$ZOu$oj0-qN4p8H&S8nmDmavE3Kwl!39)pR9i8sQIB2(8 zJ3Bi~_~wG$l3iWW8k;&rK3U(A*qUpst*))ioLX!yG~OCVGTGc4!0afyv4wzGcNRy8 zeUP|(b@O6!W;Rdv+7h3vxNfO;u}x<>HXhp9CW(#pyz-nU7fWA+Hn~AP49iPrY1~~t z?dZ8>TAVxEFqdp#oHg68QuFR;A2;a8dT>p|rBx>L*n{+paGr5L&^GSz=;mM`==V8K z``+3?s4{LItyo{-qXdr@ncd+@rMjai{P4{?m8F7l>v7nM(f(-PbHS14VOgjmdVOSi z$hL2B{Kr%6|5S%7HdMLvaA>cvO|4dh@r~C#!uVq(<`j1?*o+S=#&*?VDsw3~7_}>i z=n@TgtWX@>XkUh$;`;S)1(0dSQ-54Qn7!4?P=`BCJBa(Fgoya6unyH?bQ8H8nxOeejpo}R KBzfO@YyJkiF|5b{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..da51a04d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# madisvain , 2011 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-28 02:36+0000\n" +"Last-Translator: Ragnar Rebase \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Lisavalikud" + +msgid "Flat Pages" +msgstr "Sisulehed" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Näide: “/about/contact/”. Veenduge, et URL algaks ja lõppeks kaldkriipsuga." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"See väärtus peab sisaldama ainult tähti, numbreid, punkte, alakriipse, " +"kriipse, kaldkriipse või tildeseid." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Näide: “/about/contact”. Veenduge, et URL algaks kaldkriipsuga." + +msgid "URL is missing a leading slash." +msgstr "Internetiaadressil puudub alustav kaldkriips" + +msgid "URL is missing a trailing slash." +msgstr "Internetiaadressil puudub lõpetav kaldkriips" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Saidil %(site)s on sisuleht aadressiga %(url)s juba olemas" + +msgid "title" +msgstr "pealkiri" + +msgid "content" +msgstr "sisu" + +msgid "enable comments" +msgstr "võimalda kommentaarid" + +msgid "template name" +msgstr "mall" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Näide: “flatpages/contact_page.html”.  Kui mall on määramata, kasutatakse " +"vaikimisi malli “flatpages/default.html”." + +msgid "registration required" +msgstr "registreerumine nõutav" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Kui see on valitud, näevad lehte ainult sisselogitud kasutajad" + +msgid "sites" +msgstr "saidid" + +msgid "flat page" +msgstr "sisuleht" + +msgid "flat pages" +msgstr "sisulehed" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b49fd4509efcb7cd57a4199505bbc22d4ae19fac GIT binary patch literal 2244 zcmZ{kOOG2x6oo4gUgjNwgdo5L2~CDf`!PZg90rku35>{y(ZnHAgoLi$ciNTiu5#)z z4=>p88(6Sp&4N8*hgh(KEejS%Ech3kYJ2R2BrSJ;UFEJ@=boy%f1Nt{t-^I0_Zi$j z<9-$QmnZPR^*i_+_y@QF{tbQx(nCtsUs@D%t2_$HX*t${Cs?}3ki+u+mSwRxMt@1UgsPoe+Bqe@)@PlGqW8=wJy z1fK+7!(^M_+u$xZ0SDkOVAA)}<4U~(o&jG5&x07Mu7NLrH^HROfJxsWn0)$X-v2%L z4B9`;+dqMj*W?B?+MfrL)-*oFO7p_5#s{FuGcoB+>yfS$GhIk?aUryN3U^wUr0w`h zdey~zpUp^evXh{#@oMvs>q#YjTIul6#?TpA6L=I>+O*B3kdIC%SQ_)b5K|?bYg3S~ z*pJ%}9NoF^@Z-U3ate-hwTLAC&RBaDhY1(rkHvhITJ3SDE5zN}qcGN}$J&skFM^RTW2koRun%6V|hJ`UjSJ7K%@m%%9l|#Nq zB!}7uPkYvp*Fo@q!m3wGEi@X-s7yMnsg9_!MIm{nO_JgKOwkYy4y(q_eJux#;wCdS zND1w86@}{P12v0)!LwKr0%EL@iS@8~$!$P0njEc>b%I8Y^+;?MMm#}k&{dv{y}o-j z-7t)5?R_%+o`t;U|GU?xt&$=!L5XQn7}>f;)2n1Kr6iVbUO6dXnB%m?$jR-fo#ZNc z<`vdwf-ypdYf(XmO4N?Cw`3HutvvezDPdHf@>^^Q+uD_hbs^jKh0e1}vGCcz_Nle= z`5?QD#Yr<{A0u3!*1Ns;vu-czy^GiWJL~7Vy>1sDX1lVlQ_TN;x4urjZok_**TvPk z%06TR#|8!l>-w~5q_nhERqPy;nq1QdlKMWv=1P5Sc<>>{nIa)GIFf((Nkh7Qcr z<^r}GJ1=45`rt}-e)(ORYfoIZX+}03)IOab>abARCyA|{Dmt#RE7sM%PiE3I{l@wQ zn!RqEHT1>?^;R#m)WukeW8&x>7$TP_A$o`tH@#oU*qjoNc^V?>h1VEiXqddhGf*L8 z9j3zV2Zu;?4qp<*cf?iFA7HnSB^^p9mueVMv!?UtJy_O{Ybgv z#4d^pN=zONr9#wHA6TT4u9{s5r&EGZRoFGmx;Rki#^f^@0TxvvCBB10PM4(1=x5?^ zzAU=n$)=MU%V7;HGvsZOPh&kT^%^WN7>k!lG$F1LPbV7FJ9sfiha|W3HA#V!oHt8S z%A%yes`)xYREPGsg6iZ9$_Zr6*5`kJNghkhs>V0n e)nLc8w3vz2vD>A>xiF}BOd46SO3z_*k=1|J6o=~o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..66f3d4823 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2011-2012 +# Eneko Illarramendi , 2017,2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-22 10:01+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Aukera aurreratuak" + +msgid "Flat Pages" +msgstr "Flatpage-ak" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Adibidez: '/about/contact/'. Ziurta zaitez '/' karaktera hasieran eta " +"bukaeran dagoela." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Eremu honetan soilik hizki, zenbaki, puntu, azpimarra, marra, / edo ~ egon " +"daitezke." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "Adibidez: '/about/contact'. Ez ahaztu hasieran barra bat gehitzea." + +msgid "URL is missing a leading slash." +msgstr "URLak hasierako / falta du." + +msgid "URL is missing a trailing slash." +msgstr "URLk bukaerako / falta du." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s webgunean dagoeneko existitzende %(url)s urldun Flatpage bat" + +msgid "title" +msgstr "izenburua" + +msgid "content" +msgstr "edukia" + +msgid "enable comments" +msgstr "komentarioak onartu" + +msgid "template name" +msgstr "plantila izena" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Adibidez: 'flatpages/contact_page.html'. Hau zehazten ez bada, sistemak " +"'flatpages/default.html' erabiliko du." + +msgid "registration required" +msgstr "erregistratzea beharrezkoa da" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Hau markatuta badago, erregistratutako erabiltzaileek bakarrik ikusiko dute " +"orria." + +msgid "sites" +msgstr "webguneak" + +msgid "flat page" +msgstr "flat page" + +msgid "flat pages" +msgstr "flat pages" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d884e7eb4131cf4a3c69709929a403099e06c31c GIT binary patch literal 2612 zcmaJ>OKcle6n)V0Gyeh$pr}^}lty&yBvh!lw0v6>sZpbnvO=m}JkR#D;~6vWIUiOj zYT_VSLISZs0wKDcpk^Q6Yo!WpTYay9r(lZ3-A%(ufU_gb>Qp3p*w|`1R7ul_$M$A{2TZ-&u>Ev z;0Hkb#5Mfw0tkmDT$J^>sC-UU1Xd=RKQeGROD%QWy= zjQ@^BbztUhA&S6HfGq4E;G@8gk?bAd*T7GKe*vd~AKfd&)4**={wi=+2TuT*$5%l1 zr3GZ3KLa`5HQ-agKY;Arb}Z)kCxN`LAAg|d#sH2x@7sZw=dsP{f?duB$Z&B0&M!uO z9%zGjsDlikEbhn4b$JZ$#sjG+jz1xzg7PV@njns}I5Z_I)llVWedddt9FJ=zSBN7c z3nsTd^JSJs;`l(wniw1 z(o|(h=?zjRxR))PO6bB37s-?ZO@WTqXFfMnP2!2bSNpE ztD>xhrW;EfMlKrVWUk4Hu+@~QmW1^DZv6Lal3@b*)1;;XZ8R0*gmhpO<{A36=rN)~ zSrtw(mpBTiDU3@c<$FQIR1)20HLggGhtAuHKutQDXP@8Ay*V^ZpTu_ zAjTewYL#)<@MD8+E%MPT#EC-3cNN*QQ5phO6NEk&>G-iD{K7V>1X{al-dKj4=C{^5 zE0~drj8Ku2P>3rPbhTiMiAD5US|q9j!xG7djuQ2LEl89v*fT9qqbl|&ieyCz6PQqm z(Ih^p3dS4uy>}rAyYl3plu;?p98=XeG2VzS1-|!2t)#uNI8T|;quwz!5%5y)Ekw)H z(7@23H?Y?me3=Gb%n!cw!T_Gk5vh$gmdFUl&BRHb5?Kx^Buiy_#Wk~N%0!L7R;u7| zXQAsLHbtcxBza>>R`N8;lw?G^%f?jmx!mOBWESEg9Te3R@5r^eZa~=Co-4{+e`aKO zOX+FbO6ww>wcpxidL~bOH(V2aS;FKMyx*jAWLMI8Y+R)4=hHgbrd>|Y z*cGx%wn=F{oh7?ymw5b~ZJ~+5`7Pt=9H+xLI9~;F4)Ti8889?8)TQkd>JyJ zy=gB|UoYV1JE+eQ#In;^waDHrAV4#%J1-qAVJ~C$0_Ix;_ZDocGs3G~pI~c~>{&M1 zE_ZJ&jKY5u6+GC-R`nU{|1tPz~g?=Y(BFy, 2011-2012 +# Ali Vakilzade , 2015 +# Fariman Ghaedi , 2019 +# Jannis Leidel , 2011 +# rahim agh , 2021 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-04-19 03:16+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced options" +msgstr "گزینه‌های پیشرفته" + +msgid "Flat Pages" +msgstr "صفحات تخت" + +msgid "URL" +msgstr "نشانی اینترنتی" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"مثال: '/about/contact/'. مطمئن شوید که اسلش را هم در ابتدا و هم در انتها " +"گذاشته‌اید." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "این مقدار فقط باید حاوی حروف، اعداد، خط زیر، خط تیره و یا اسلش باشد." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "مثال: 'about/contact/'. مطمئن شوید که یک اسلش در ابتدا وجود دارد. " + +msgid "URL is missing a leading slash." +msgstr "در آدرس اسلش آغازین فراموش شده است." + +msgid "URL is missing a trailing slash." +msgstr "در آدرس اسلش پایانی فراموش شده است." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "صفحه تخت با آدرس %(url)s برای سایت %(site)s وجود دارد " + +msgid "title" +msgstr "عنوان" + +msgid "content" +msgstr "محتوا" + +msgid "enable comments" +msgstr "فعال کردن نظرات" + +msgid "template name" +msgstr "نام قالب" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"مثال: 'flatpages/contact_page.html'. اگر این مشخص نشود، سیستم از 'flatpages/" +"default.html' استفاده خواهد کرد." + +msgid "registration required" +msgstr "عضویت لازم است" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"اگر این انتخاب شود، فقط کاربران وارد شده خواهند توانست این صفحه را مشاهده " +"نمایند." + +msgid "sites" +msgstr "وب‌گاه‌ها" + +msgid "flat page" +msgstr "صفحه تخت" + +msgid "flat pages" +msgstr "صفحات تخت" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c71b4ec4b7aff9d6c4cc4963d2b1e19816d9acd0 GIT binary patch literal 2256 zcmaKtKWrRD6vhV#{|*8nK!FJ2#R4T3-aE%cC~Raz02?{P#0r;)0ujcyb9Zw)JG1P( zUHejnf{KcQ0tqTyQ-+4l4JFV}AR)yyJp~Ql%=vr{A)LJXo7tWH=6mnWjQ==(8 z7s1~_0{;dd22UIj;z{r&@KNwA81&u%p9R;z2f^#$QBdvoJ@_HKjKL@H{8tS67`zQ$ z1mAo}h|j<;z{kL&nCvY09M}cl2Mzcg80I_nh!7{i=fOE}84P|t0fWC07{=WIgWl(0 z$k&%3{>1mVg*^QLLQ?z$!e0Cqh~A$9kK+nDK|92Sbj9%qBh~FGldp`tihBW+J*SO>hP&S1S?jh4j+AAgYz(32iUM6PLW(H_F>85I zsR0sJ$*}0CQlHkkQke)j^8z(0@r@!Y3nf^yQDUQVBh}+%ElaK;Bz%=pHj;MWT31x* zDo)n@KxfHY^}r`xmr`rva&kpAIt)$Tfm%vSi%W~inWbd$by|EaeRb)TMf_Tqr01kt zNsHyiu1e{GtgNQ@oX?e!cx?wY%qLwXik# zuBI^ipLhDYGv8WYTVI*^Khs`py*)`<(jAv@$ZDHAh+W(BSS_;hikGi;SCezIabd2$ zs*)Akb79-1bZ%4gfz6cqy0u~IN}6QVRfSKbxyVEnyj!)SQ3`q?hbjC zW$dB2xvZIGqje*(muK>G|1Cdvm;Ao)J*0H*;dO4dkE7X4S;y?+W@j!rfh0pQp1Es zlB6_@GgUWO81djpoQHx6=SOPeDnKA*jiT4}oyDJwh)d&ML#AeL2``P&lur&3%{UaM v$v)I%(MbIBVJX8Ql7|qg-CLT+g|^CykP#GxMG?eeJuO*;E^s>PJa^(B#mKr= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..789cd92d4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2020 +# Jannis Leidel , 2011 +# Klaus Dahlén , 2012 +# Ville Säävuori , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-12-09 06:32+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Lisäasetukset" + +msgid "Flat Pages" +msgstr "Tekstisivut" + +msgid "URL" +msgstr "URL-osoite" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Esimerkki: '/tietoja/yhteystiedot/'. Varmista että sekä alussa että lopussa " +"on kauttaviiva." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Tämä arvo saa sisältää vain kirjaimia, numeroita, pisteitä sekä ala-, tavu-, " +"kautta- ja aaltoviivoja." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Esimerkki: \"/tietoja/yhteystiedot/\". Varmista että alussa on kauttaviiva." + +msgid "URL is missing a leading slash." +msgstr "URL:n alusta puuttuu kauttaviiva." + +msgid "URL is missing a trailing slash." +msgstr "URL:n lopusta puuttuu kauttaviiva." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Sivustolla %(site)s on jo sivu, jonka URL on %(url)s" + +msgid "title" +msgstr "otsikko" + +msgid "content" +msgstr "sisältö" + +msgid "enable comments" +msgstr "salli kommentit" + +msgid "template name" +msgstr "mallipohjan nimi" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Esimerkiksi: \"flatpages/yhteydenotto.html'\" Jos tämä jätetään tyhjäksi, " +"käytetään oletuspohjaa \"flatpages/default.html\"." + +msgid "registration required" +msgstr "vaaditaan rekisteröityminen" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Jos tämä kohta on valittu, vain sisäänkirjautuneet käyttäjät näkevät sivun." + +msgid "sites" +msgstr "sivustot" + +msgid "flat page" +msgstr "tekstisivu" + +msgid "flat pages" +msgstr "tekstisivut" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..41ed7dc73a84eaada568e9f1b57f63695e639b30 GIT binary patch literal 2430 zcmbu9J#QRE7{?b#csasb2n`D2DL}-+duv+=C1-2_Ax4&L#Y&veAVqV#&)tnPJF}UY zJ=>|$QBhD(L;@*gECgQwD&H3f6-6Wpi;@}&8vZkT=d*)AAXc~c+h=#?ndfEZ|MTe+ zUnaQD;697{2i&jW{`4{Y;d%hR2>u9O1`ogwz=g+?WE=Eg3;Y%AfWLzuhwo3o2Y4IA zFZl_7uY(Uk0{;M?0?(dEk{7@?z-PdBz~FBgd<9$uPl7kV=Rh9Y4%|X4yWmTB{|g3% zczy#FsGr0)@F5udU&CS{E(SjVzXd-7Pd?qm_c^!>`wMUpd;nrdatcAc3Z4PO`WYDf zErB7vbuh%2gU^FwFOCJ`+z{t!+#x@Fj`L8ixDL{YJpf|80>gExLG(R-Ob}Y~ zEbh>kmnSblq>APgL!omn$W&e$?UGA7qO25m=-|#*ndq9@XSvZ{4m4}B#oSc^8oV(~F7 zgsFZ&wN>=yIsDH!63Qa|UE&?-yrZ76|*RHIE8)c(XIv2b7XdC|W{dlk2Nr;HGPgutka#NNtT@p%6A&Kde zODy+MFe}2QBg?mHX}L&3&0K;WRhYx1MahYmUU9Nv%@*fAT`kh|H?1pN z8SB$^*Ox{5VcmD>rs+^?<8pe1hcXOJKZ3UoEzHedNarr3^XF;)-Ok*?+jF>DYr^?- z(+Z94=8f&pMJ4Kj(Rpib(|dWe-e1^JvTM1m*)L;??$<~t-DFXAXvMP52Xt=Webvdb z?d|P0GSg1>c&CjrWKEzGsPXKqXS12s`s(_nX-f0$xz@#|j_KxZg`hp}_zdNcdJ!8) zSjT?p+U81nemX9!)nl7p(zyvIu|wy((jP|Ip`LARsM-pZt{7Xo4(TeIZfRkWn#ZMc znwDvPX0erAZj^vTP=?VS8iG<_gNLs0EbV`@e=id^aIz|Mcnq`sd;8zF>H28T%AVxg zqy*01XwRWCOhrw(u#k|^edtDX5XKX0Dn@(V+7siasfYcH$|KFucbeP(V%`6_>_09x zm4>kZPPL|4_A2Tg5BmT0AcW6~cLKvV(A#GDD+1Ci6u|0%f@~tZ@=8);CSQs*OoN`pP*05cUZY|0P z8%w{%kjP57$tH~3YrNNvHvPX$e{^>?8P|!ZAseC7vA$#36G+1)$J!XJqkU#QRzVIz X*{Gl!YoIn|I5vHO8b}{R&~ox8_tgSZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..fb72ed9a9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Simon Charette , 2012 +# Claude Paroz , 2014-2015,2019 +# Claude Paroz , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 16:02+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced options" +msgstr "Options avancées" + +msgid "Flat Pages" +msgstr "Pages statiques" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Par exemple, « /a_propos/contact/ ». Vérifiez la présence du caractère « / » " +"en début et en fin de chaîne." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Cette valeur ne peut contenir que des lettres, des chiffres, des points, des " +"soulignés, des tirets, des barres obliques ou des tildes." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Par exemple, « /a_propos/contact ». Vérifiez la présence du caractère « / » " +"en début de chaîne." + +msgid "URL is missing a leading slash." +msgstr "Le caractère « / » n'est pas présent en début de chaîne." + +msgid "URL is missing a trailing slash." +msgstr "Le caractère « / » n'est pas présent en fin de chaîne." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "La page statique à l’URL %(url)s existe déjà pour le site %(site)s" + +msgid "title" +msgstr "titre" + +msgid "content" +msgstr "contenu" + +msgid "enable comments" +msgstr "autoriser les commentaires" + +msgid "template name" +msgstr "nom du gabarit" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Par exemple, « flatpages/contact_page.html ». Sans définition, le système " +"utilisera « flatpages/default.html »." + +msgid "registration required" +msgstr "enregistrement requis" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Si coché, seuls les utilisateurs connectés auront la possibilité de voir " +"cette page." + +msgid "sites" +msgstr "sites" + +msgid "flat page" +msgstr "page statique" + +msgid "flat pages" +msgstr "pages statiques" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d130f4ef073fb1e89de1f1aa792acd0ef0536e56 GIT binary patch literal 476 zcmZutOHRWu6a>L4OV%tN5{p*gIB5X|mm)-=QV|tZ6<}?Wmtd6Ik?m4?5H7&MI14W= zDjP-`*(1;UjKBAGKeq_m#C_r+aff(JY>*JY=<%G+#>bDgymb@K|N8{VSpNPXK z7#QtQ(}v5MqI&%Byso6uJ;+|Ab?Ez#>5wIVzGhy5mfh;i\n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8e80c1071e317e93685b8284578e39b60030b266 GIT binary patch literal 2191 zcmZux&u<(x6gIT{TA)BAB!r517nFu(_D9;PWs?O;+M>_|LfCQv33+F{Gj2WhVtevK zLR@>`%zeYW54b0@zPXmjYN z(eI+ague0+{?NVwJ`4O7cpdl?umqlZScnGjGhi2Z8~8S_13v~fP6&aY$np0w@D`AO zUjQEi-UU7b{0{g8@Mj?V`xW>+@HgPoz`uZx0RILaAohuq6Z;?V@qK*%1^7Ae#YZPR zzXC2}{x#47{{SlB4FrV?@jY-J_#^OD;GaN_Klk{A=V{<6%vXTS?>g`W;735#C<3uX z+y;V9Z3_@jp|eiUp|d|M*9~$AP^cTI*NyXJU)(rHZp>}k*#DF09RI<_I*7~JwzR3r z$c>_QHi)acvK$%JrTLZ|xGJ_%XQNDGYraVv@|L1dc}3AtA-5G7B{OYvk~X90r8YbX zMutL#<^#TlM#hoMRhYW_glEknmIi*;h7=1ONC!I~Y2@9u&Q!LDj|jIHqAF=e8$(r4 zG(U5dsiCY)JoF;2AqH)7kb1}guq_r;c|)(9!T&-aX*?+Jk=oTE1{yj~K}UskhJ_$z zTqrG6dW(5DYxc;vJXcwwEz|H}!f2pK4ot1bwpKee<2p0Z=Y+PUsT7q}h*Zmn%@bcL zM)+7HTa|-)khzFyWi!lD=M^Sdt>WTTP6E}aO~%6B*jncf!KlJ&8V@r*kkI6>Jb(XwUnE!?7WSQ7fx9j(wL2G* zPCIG8MxBe@^Gj#jOYJrclP$Ha+2_peB8-xybJV%iy>R|)8?CV}LrnT!T1XL{@6tQc zT4=SdaIXxlfDNW^ntIyQcIaNm9-CK4I_WD}c4^J)P|%qo#!c%MEeaXNh-tA;kw=1mu5f09_g1k(N?zad#+pG$@9ZHh8n+ zd#)^?x6VlBRiJcyV0elrm&@2Z^oX)Dd%uU3xf`bV6{dhmn_#lk;Ic#{)`M-+8I<8kCt<-seGUklvkN0Ux1yARAk+ASyD46p~ zsOsE~N<>p!!QOHJB|romgL3FPMfr;gZ+d)>2Dn-vnPPpyPB{-}E(cQ>;bBI_t0)M# zi<}KAX-yCx*`K6g0hbCs#k+7=BH7xk;%!F~@xgCj, 2011 +# Michael Thornhill , 2011-2012,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Advanced options" +msgstr "Ard-rogha" + +msgid "Flat Pages" +msgstr "Leathanaigh Maol" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Sampla '/about/contact/' Déan cinnte go bhfuil príomhslaid agus cúlslais " +"agat." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ní mór an luach a bhfuil ach litreacha, uimhreacha, poncanna, béim, dashes, " +"slaiseanna nó thilde." + +msgid "URL is missing a leading slash." +msgstr "Tá slais tosaigh in easnamh ag an URL." + +msgid "URL is missing a trailing slash." +msgstr "Tá slais deireanach in easnamh ag an URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Tá flatpage le url %(url)s ann cheana le suíomh %(site)s." + +msgid "title" +msgstr "teideal" + +msgid "content" +msgstr "inneachar" + +msgid "enable comments" +msgstr "Cuir nótaí tráchta ar chumas" + +msgid "template name" +msgstr "ainm an teimpléid" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Sampla: 'flatpages/contact_page.html'. Muna bhfuil sé ar soláthair, bainfidh " +"an córás úsáid as 'flatpages/default.html'." + +msgid "registration required" +msgstr "clárúchán riachtanach" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Dá mbéadh é seo seicailte, ní beidh ach úsáideora logáilte isteach in ann an " +"leathanach seo a fheiceail" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "leacleathanach" + +msgid "flat pages" +msgstr "leacleathanaigh" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c430c58feb3dd03693c934445e90788a97c20439 GIT binary patch literal 2469 zcmc(fyKfvt9LFaRUdKBGL=nWVfMA37&UcAKIOCusjw7R-Vi_j|ie%00&h1VzJ9F&J zo^6!EHKL^e0Scl?K}|*He}EK-0*S&kJp~ft`{)+=w{tQQw|WH~gdO9y+Ow`AYdp_MutWExrrdtWrECvPh9b)_gcD&$C! zQ8LpuCuuVZmDGj@-bi04-~1PO{~%7z1V$P6N*EX!hB8-vYSb2wnnfs06t^~@P-suu z+k?GN0}U%T(wWK@Fb%VJeNZKBYh$SPid{Sun5luRO_<3NtI$R3tSo-AA{-3`)s>-F z=kP!8Ntz1o?~>ZlK6o0qio6aA>x_9X4lSazQ0Yy!#aXjU#^t%n5^dR(%8#w;E0TQ^ zV>{AnJ6at*6r1eUNSazvS^GdSDL6cqr9yy=1+sP7j~|%}7}hq!D0P*>Ad4AUn5Kqc zYS1R*BwgLO%rC-5rS?8%^ZqpaW&PeodHCchQE_D{$Zzb(c(mqA)PWSYiZ!F?zT$Vm0o0YUEx8SNS zU8?Pc!YG$w$>uc-Pd1e-u^^Sv=>ol%x)8K4Xs!rh*lo48x3`<{#du9%;7%PHBeP@ z(WZ{?UYE}Fb(q=Pr95k_o4S%FS#?$EyJUxP=$B6~(fD(D&Mq&v>DDb`w&&>`TBI)V zY-c*#;n{YarL)wblPAg2+Xy7jcQAiysUbF8UcgwZq$QcbU^I(D^khW}(dTBO5mjy{ zWu0V&(piDst$}tv2}Par*>P`K*}nrBDaJuT2IX~0ea!`n!j!r~i$T}XJ}%;Z&n7dd zz%?wI|CieH(wO8vcmLE{YIGbW^DXvyYwGi?(@+nYqHO<;&d4iAl6>KetdbOm(jt?H z7`u*A_Cc2a(Y975%5b1!k%dCXg-ack6l~5V>Z*!zQZly&h-oK58j!ewj zSx=%TNlGhM%A6{VzJeOHG{83EoZ(c8+cUNs9S>`9W-3W0=)t@Z3p1PGbyHl3ati6P zD9GqgK{W&{(Ee@CZ;1^HG^|nZadzMm9HcV3%gB-(;+*eu#xP@CaO$huK&`@%?5l-%xIzy{;K^pM~LE-Xz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..1e99447b6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,95 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-13 12:47+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Advanced options" +msgstr "Roghainnean adhartach" + +msgid "Flat Pages" +msgstr "Duilleagan rèidhe" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Mar eisimpleir: “/mu-dheidhinn/fios-thugainn/”. Dèan cinnteach gum bi slais " +"air an toiseach ’s air an deireadh." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Chan fhaod ach litrichean, àireamhan, puingean, fo-loidhnichean, tàthanan, " +"slaisichean is tuinn a bhith san luach." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Mar eisimpleir: “/mu-dheidhinn/fios-thugainn/”. Dèan cinnteach gum bi slais " +"air an toiseach ’s air an deireadh." + +msgid "URL is missing a leading slash." +msgstr "Tha slais a dhìth air thoiseach an URL." + +msgid "URL is missing a trailing slash." +msgstr "Tha slais a dhìth air deireadh an URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Tha duilleag rèidh le url %(url)s ann mar-tà airson na làraich %(site)s" + +msgid "title" +msgstr "tiotal" + +msgid "content" +msgstr "susbaint" + +msgid "enable comments" +msgstr "cuir beachdan an comas" + +msgid "template name" +msgstr "ainm na teamplaid" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Ball-eisimpleir: “flatpages/duilleag_fios_thugainn.html”. Mura dèid seo a " +"sholar-cleachdaidh an siostam “flatpages/default.html”." + +msgid "registration required" +msgstr "tha clàradh riatanach" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ma tha cromag ris, chan faic ach na chleachdaichean a chlàraich a-steach an " +"duilleag seo." + +msgid "sites" +msgstr "làraichean" + +msgid "flat page" +msgstr "duilleag rèidh" + +msgid "flat pages" +msgstr "duilleagan rèidhe" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3190efa346479a0f500fe3a728d858d3c1924e30 GIT binary patch literal 2039 zcmaKs&2Jnv7{(2hujRW4aY5qcfRd=0-A$URVM6$5Nvc57Mq!J3KtkRb@2*>qJ=mU2 z0umB8H~|L)f>R{Ki5^fT4!~`1hyyoHaOBFr!1K=TW)lh3+L@m{YrlR!{P^#)XTB6@ zPvLnE&v$s9#j|)1UTB|yPlBIET;IH8Q;BVkp*y|7QEXD(Tyb68@4)}lYRq*@+LR)0Nee1r>ijE{h4@UT7JgX87K{&8db;`MweZKiT^Wz^0Fv2h@a(x{Z?TC(e^ z*vg!ZGK;ObChf>uibCZTMMncURAiLQwe6F%IYlqE;XyDm3{+^Iu+=j%ma?zH)ZBYK zY7SyyV0WuWai9a~VCN#0-VJrG@IiU%Od{BRU+#P?}0nQH4l#?yz`lOT`Eqi)5>!TX%97F|2HkQRckDAg@!m zIL#r!)u>I**}T5D%@49fg$|)k`*8v4oY!+s|9`qDO~D>18-=oU2$?Gi41?gT5(hEs z1>sd63Go?NQ>A?di38oSpz$z_yJ@*RM z*nWkela7)_N>`-OnUCqhv2|(r_NSrQ+lIw>O{Exu5 zRndjIwarX5y6s5@>Pqhc>7Yw|*QIuZ^Y5sqtu(ChskxajCs)QPjlYfaf>Q(qt5B*; z_jD#9G6<3NEuk;zM@M&&_YFDLuYzC(lFHH10X)EZzOGnlrzCILGS1da<8T0*7t-^- zVRVN|2i=X1EDaSRJvQh9e5s_@=-}koSi71#zR%z)%bV{HhrI|p34=}xf8hP^-y{Q#L?AB5T`Re9fnEf`Ie|J23!z) Xy?Q4s7PDm>byzh, 2011 +# fonso , 2011,2013 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opcións avanzadas" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Exemplo: '/about/contact/'. Lembre incluír as barras ao principio e ao final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor soamente pode conter letras, números, puntos, guións baixos, " +"guións, barras inclinadas e tiles do eñe (~)." + +msgid "URL is missing a leading slash." +msgstr "Falta unha barra inclinada no principio da URL." + +msgid "URL is missing a trailing slash." +msgstr "Falta unha barra inclinada no final da URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Xa existe unha páxina simple con url %(url)s no sitio %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "contido" + +msgid "enable comments" +msgstr "activar comentarios" + +msgid "template name" +msgstr "nome da plantilla" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exemplo: 'flatpages/contact_page.html'. Se non se especifica, o sistema " +"usará 'flatpages/default.html'." + +msgid "registration required" +msgstr "require rexistro" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Se se marca, só poderán ver a páxina os usuarios identificados." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "páxina simple" + +msgid "flat pages" +msgstr "páxinas simples" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d5347ee737cbd522f9334d6b6388ff91f6797a0 GIT binary patch literal 2517 zcmah}OKcoP5N#kpSi&#BEr=2#mMuKH>ve>zF*cuI6N^|emXiySqV`UEcjEah(>?wm z4wkqhZ?FO5PaG1(&T`<65E4f?0SD%Q#KC9o9JuhRXYIuf38U?KQ(eDTRlWVk$z!Vm z&vRI(u)f230qgPuc;WdO_%!er;053w@J(RlK_TXW23P?833P#f0pDT$Lx=(V5Qv}1 z@OlyWJCJ~X10MyRIwr(Zz?XrK0nY$A-Z1ca;27{>;1%E#K-HEt@JDc21ajQ7j|dR~ ztHAexzXCr37LkPGd<{GY`~mnLuy7oEz{^19cO1#PfG2=20sDbaiAzBCzXIg^XJnyidG)gp&sWZH&VaW&&v%vZnMtsVgiM>n03r zxUm^BbzhUOqrIgyLyaV!^F8JDVjHv`$0gdR$O8ypr>YJ8kmDvVidV(f|J=# zP6Ss|r!)!ZbT{5Tnq-im{6$g=zBZa>;)Jws6!Z)|T67puwXUkO%q5P3MGE3tO?i$V zF_lE;tfm#o>A?1O&R6r6wXIN0aanURNEL;tHe`na=RB4&1~GamO2cXU;l&1G8hMba zaiSo2b|Ss|qajc=e&F$tE>523g|<=XYi*}_bPRXt56`+Nn30N%P?0U68iyf7Ex5(R zMRdNjNK_3COC%pUO4J9bpD0go&$Pgd8t_pR$xsR7n?Q+)B)+Pu#u@XRODG9mE_qjF zRErCfsu3r~8P_%6bKXj8+L?-7Dok8(Ce@tJrq0`l=2E3xDLdr>r(B`Fez)@KD`h-| z^HLjUDv=S6n~4*b#+9GYyNO>{flsf6v-#H>wGcI`)3IM<9yoRO#+^FPt0fob0yuym=e3KKz^$iNwmlTf=9HLR$I z&J0riIn*7|&=B=eR~JQe8Xu6#J@h)2$)#Lbxm($1bucem`@;sgGz=xjsUS}OU_oTd z*{$qOwwtYHYgjGHwz5{XlYI(=DDbhGU4yW4&pQZ?cPQI{-72h?3E{S~b?j~s0`cxz zwn^D`_J#elLNi-In$O|2LfCC)H}Jk$JeqEA>662^p1oH7C*eUVLfnHicg619HSHVq z$mNC3fb|9!blVcY-b)C#m3@V7t#hYZsI-L*RNwsV`}<#C=*+FW58Uom^a6bl=+9cd zyAH0q1go252LcO1rcF9@zhS2dXBaLc^KR!}%gJupHg09ibT`}KS+*JGNw&~&ZuV|2 z^1#=5a9rkXq_y*JG6{5R#TNP{*Zdi$BRDhJCR?xU57?$zW>2W_MrLMlE6)LG+nxbF zMY(P#?*ladIvacxS}@sWVoge(>MmNngVrx8D9EIy2$}`(JZiLH+zU0LyKdumDdx WG%ia(Mr|#G, 2011 +# Jannis Leidel , 2011 +# Meir Kriheli , 2012,2014-2015,2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-08-02 13:26+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Advanced options" +msgstr "אפשרויות מתקדמות" + +msgid "Flat Pages" +msgstr "דפים פשוטים" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "דוגמה: “/about/contact/”. יש לוודא שמכיל קווים נטויים בהתחלה ובסוף." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"הערך הזאת חייב להכיל רק אותיות, מספרים, נקודות, מקפים, קווים תחתונים, חתכים " +"או סימני טילדה בלבד." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "דוגמה: “‎/about/contact”. יש לוודא שמכיל קו נטוי בהתחלה." + +msgid "URL is missing a leading slash." +msgstr "חסר קו נטוי בתחילת URL." + +msgid "URL is missing a trailing slash." +msgstr "חסר קו נטוי בסוף URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "קיים כבר דף פשוט עם url %(url)s עבור אתר %(site)s" + +msgid "title" +msgstr "כותרת" + +msgid "content" +msgstr "תוכן" + +msgid "enable comments" +msgstr "אפשר תגובות" + +msgid "template name" +msgstr "שם תבנית" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"דוגמה: “flatpages/contact_page.html”. אם לא צוין, המערכת תשתמש ב־“flatpages/" +"default.html”." + +msgid "registration required" +msgstr "הרשמה נדרשת" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "אם מסומן, רק משתמשים מחוברים יוכלו לצפות בדף." + +msgid "sites" +msgstr "אתרים" + +msgid "flat page" +msgstr "דף פשוט" + +msgid "flat pages" +msgstr "דפים פשוטים" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca42d15f6af94c4882b10b41b3fcc9e6fef47d91 GIT binary patch literal 2770 zcma)-+m94Q6vkV{+v1hP7!wmq69a_pnOQ`^S(m5?in0;OV0h4&-s#$zhMw-RyJjzM z3r1Li1~n`utML+g2w4db5^jlscbJ2)qN{2X5i#IdB`O zzysie;4Jt!co=*b{2CkrzXP8F&w`JFzk>IJx4~2F^&9vCw&vp!I1ki1K0r-_yf2OyahtTKEm%Y zUg5X=Ji>s~ZEkFBAE?i8~&6R)wQqUwh7`Wb#~5pt#+uZ zYJJ(8h&!fSk0ayNO?iDujeCc*N;`>GCRR;vN~=(Neh@X37x~I0UJ#0rhF;p#Y3Z(5 zlc8tYUPGtL;XVP=lg zB%8-kIIF_A(a^pdM6!317BnWb@+Lwn!c?HAElrz_Q=J)r5zKPP&<2* z_@J&Ecen3;NHX|Wm4DES8u8FR-HsFEj;D>lci-$ZQnwaY)zIGeYwixpBC*}K2v=2` zDJVSfD)VQ_8i;%*^ zNmae;MG;!<(KJ)2UV{zh>!CGEK{Od}XHC@TkhELVUaP9!2_ipG8=A(ntL5_a^mK{j zqcoV*GbNNN7a1)>*jrp~2IY-Id&9O$4S-vZ|WF(B80^6orv zD$gzfI1uBoxMer<>_Xvl-L4_be4bs!i8Cg$e$b^6s%b zJ5s`e=UE&5hJ4P>taAG}t9lJCgWff@;$F$Ki#G5rwqSGv_`aurh$7j+j&$eXfdMI~ z;wkL2yn6!Zty>ysBr1^j+<#t0MI?#QUv-gSC|JxCiKF^lNtK-CONhDaRs%%&(K>dI z0hcYOll{9)7 zf)xb@*O@>oQl*587z;(+#d)|e@w!rMj~Y}^vg6x1J1b?RZ6pJn3dK;MPd18{lW|! z3*(F>+u!7p}wF{=W-g z)u6}u, 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "उन्नत विकल्प" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "अग्रणी है और अनुगामी स्लैश का होना सुनिश्चित करें. उदाहरण: '/about/contact/'" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "इस मूल्य में सिर्फ वर्णाक्षर, अंक, बिंदु, रेखांकन, डैश, स्लैश और टिल्ड्स ही होने चाहिए" + +msgid "URL is missing a leading slash." +msgstr "यूआरएल से प्रमुख स्लैश गायब है." + +msgid "URL is missing a trailing slash." +msgstr "यूआरएल से अनुगामी स्लैश गायब है." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s साइट के लिए %(url)s यूआरएल के साथ चपटापृष्ट मौजूद है." + +msgid "title" +msgstr "शीर्षक" + +msgid "content" +msgstr "विषय सूची" + +msgid "enable comments" +msgstr "टिप्पणियां सक्षम करें" + +msgid "template name" +msgstr "सांचे का नाम" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"उदाहरण: 'flatpages/contact_page.html'. यदि यह जिक्र नहीं किया तो यह प्रणाली " +"'flatpages/default.html' का प्रयोग करेगी. ." + +msgid "registration required" +msgstr "पंजीकरण आवश्यक" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "अगर इस जाँच की है, केवल लॉग इन करने वालों के लिए पृष्ठ देखने में सक्षम हो जाएगा." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "चपटा पृष्ट" + +msgid "flat pages" +msgstr "चपटे पृष्ट" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d310400d474a17ccb31e8b0273def5ea90c7fcb1 GIT binary patch literal 2188 zcmaKsO^+Kj7{?8?yoC2wJ@8f@4(;x$JIQ1zw4_a;Y+qE-ZC7my7bN6lo+M6Y?7{X- zc1y3Q7kWe-IPo1gq6(z+3m`5a(K|wX08a4tB-wN&gf*U@J!3!qKacI_;h_Ux3zWmC zucLmC`UdLN$M8b=5qt^!3H%8B8O*?=j|)))zXDs}H{j*)AN&-2^$8*HhzVYAf?t3H zehWSY{s6uRPQhouU%+7RA$SD*13U=+13nKPJTU7Y2LFVHSHLj;;FCgZgGWFI_Q6Bo zZ{R8LFYp?842ve92VqkD3cd#ZKIh-y)94?;E6hJSXLHUAV9@mmh(~02y#SUVmJnZp zkX3yH#B-=2ZZD$-|H7P55T0s$Xv2l71iwT4LkYfy5;QIfq={!ygTF!BqJ;Q}^GPXn zj}tPvS4KN=aYtr($}L)H$gU}Tqi3|2J>OWV)0P}FxxzAeLql0Ir7RPr2PAbu-b$5* zj!UH*va3I0tDj1r%K^KExz9qcKJ-}%yI1<;hsu$1dc{+2O{o%2*6|U`?K;mHO;nmv z;h0vIrV{SUBK31C;u6-N?XXDI3=3eIA5vjcI<|`Unj@K7NZuvhQO-N+8%s`k#{Ymd zCze{MH{{+p=rB6nrPK@toJ2|o8P?4db(v&0t>RHCo>Yn}&qOCURLZnq$_nSH3L_@Z zY_a#Su}-?kx>X}F9^FDG==F?cbdoBH>x*y_qp_7qL>-n{i#Dx+HmPZK z=zZR5G$xZt9TCw^^?4^uY0Mm4Af3-|3~ghrwsmFe;xZJ?dR*I_#Xsuo=J3_?j&C50 zN}s{Olh(0s-|Ae7PA|uWwfbzMi@ImRt!vTguJU_2TQsz_?X<8mjV>9RxfbcX>bmyZ zXK2=J>toHh-EPwH;}n|lTkU3(-lv!_8vS$ajm59C?USLoS`9nfjOosu*%XY4*D$Av zIU8qc;+o8H7&Ie?^wcQqy~;+6fd5Ad!MP~$FI+h}Hl(s}ZgN{HQUDw0C9YF-gd;|R zS#7MzMMrt{KiTA_$8JyW z!K-lWwd%3BIcrFAl5qPXlkKIIlBahmhk7$obX(GdyUUakWI>B5A%asL`?(;QnUGaN zPt7!88AX|y-c=NIA`OlhDot4|R1|e_y_8g1c$a7_h~W?JL!?aXgZr|CXtZJ2rKXhY z)D8ErWaLsay*CDPlawj)_&W8hhga)Z8EF+ACZz9KirLFBQ9+uMuq$vNhY9x3+Nl2T z``19=X>8>P0_R#rq8O*6VtOw)7gCF~EMTb$D}p$W=H91ABE85qI8KsG7h8H;OAMTE RgvyX{=Se4$Ld)Q+_!nW?dPD#K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7e7c1632c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# aljosa , 2011-2012 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Advanced options" +msgstr "Napredne opcije" + +msgid "Flat Pages" +msgstr "Statične stranice" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Primjer: '/about/contact/'. Provjerite ako imate prvi i preostale slash-eve " +"(/)." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ova vrijednost može sadržavati samo slova, brojeve, točke, podvlake, crtice, " +"kose crte ili tilde." + +msgid "URL is missing a leading slash." +msgstr "URL-u nedostaje početni /." + +msgid "URL is missing a trailing slash." +msgstr "URL-u nedostaje / na kraju." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Stranica sa URL-om %(url)s već postoji za web %(site)s" + +msgid "title" +msgstr "naslov" + +msgid "content" +msgstr "sadržaj" + +msgid "enable comments" +msgstr "uključi komentare" + +msgid "template name" +msgstr "ime template-a" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Primjer: 'flatpages/contact_page.html'. Ako navedeno nije definirano sistem " +"će koristiti 'flatpages/default.html'." + +msgid "registration required" +msgstr "registracija obavezna" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ako je ovo selektirano samo logirani korisnici moći će vidjeti ovu stranicu." + +msgid "sites" +msgstr "stranice" + +msgid "flat page" +msgstr "statična stranica" + +msgid "flat pages" +msgstr "statične stranice" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8111a21b4df457fb50a9f695164cd63436cd8ca GIT binary patch literal 2361 zcmaKtJ!~9B6vqchfE?ceL_rWwK;&3>@54!voN-8i1Q}w*axNetq-gGT?so2GXEr;t zUf(H5QJPdKDI!CG5CwIp5OR~df-Y1PNEDXnXebZ`4gcBu!iiwzx!=5+(2tT;)fzN_JffvC&@GQ9eFk?CBz!La7SO@WEHYr)@1lBzkEt@N%RwP&A2vVI?p)bcpW5JwsO0bR8bVbVrYhmyaj)Yxx3cFl) zOleajCUwEO?Z_~AC+patVd_-cxEO4TE$JT(-h;O~Emv!&g6gSYxkj~9_2rXqR&kXs zaO;9b$~9g$XVN;Y%T~mNqK}Pg(_67rSz^vulQsurWuUB z8t$ZBp?w9dK(f6~?voLq@?{>35IZhyRXeqNx4j+Z} zP1dDG_op@=+sMGa{u9a3u0dAN+rrTeGwVAfdKMp8))j0j45|k4-8-XQDAbTv%&}2) z2{+7WmlBj{&=omMIhB-lQ3kIhLm`@x;$fk(kvUG$-8-Q+nAmu@Gjk$sEPHZ^lpNk_ z_R)9xi8oQ5Nuib~@A3i9{oMzOh=LVusqe#C9+`1grX6bbGCWu;(lX{nFPpz5|M}F| zIqMnUqj=h%rbZ5LGQ6_B0@I97?O8=8y$i~aN&L$j?liSvMFBXAeJ*__g|9~>egDc7 F`v(?A, 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-21 19:28+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Rozšěrjene nastajenja" + +msgid "Flat Pages" +msgstr "Statiske strony" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Přikład: '/about/contact/'. Přeswědčće so, zo sće wočinjace a začinjace " +"nakósne smužki podał." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Tuta hódnota smě jenož pismiki, ličby, dypki, podsmužki, wjazawki, nakósne " +"smužki abo tildy wobsahować." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Přikład: 'about/contact'. Zawěsćće, zo maće nawodnu nakósnu smužku." + +msgid "URL is missing a leading slash." +msgstr "URL wočinjacu nakósnu smužku nima." + +msgid "URL is missing a trailing slash." +msgstr "URL začinjacu nakósnu smužku nima." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Statiska strona z url %(url)s hižo za sydło %(site)s eksistuje" + +msgid "title" +msgstr "titul" + +msgid "content" +msgstr "wobsah" + +msgid "enable comments" +msgstr "komentary zmóžnić" + +msgid "template name" +msgstr "mjeno předłohi" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Přikład: 'flatpages/contact_page.html'. Jeli to njeje podate, budźe system " +"'flatpages/default.html' wužiwać." + +msgid "registration required" +msgstr "registrowanje trěbne" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Jeli to je zmóžnjene, móža sej jenož přizjewjeni wužiwarjo stronu wobhladać." + +msgid "sites" +msgstr "sydła" + +msgid "flat page" +msgstr "statiska strona" + +msgid "flat pages" +msgstr "statiske strony" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ccf6f739b5fd72278eff07a49b716bcf509109e6 GIT binary patch literal 2363 zcmai#&x;&I6vs=AQODm=5hUWvqLS6^nVldZPTXLkS+kHOOWb%6VX2vZ)6?74Rby54 z?9PCYe<242K@WS}Lk>a6LE@=dujD7o&*mf_^qCqog|XjO!ud%yX)2W{pdHp z9y#>6!0|lJqd0Hjd>Q8_58#61NAMZ&C-4%u51s{2JSfB#=)oHJJJmo!-CtrKi3%gEZ!N0k&$DU&1| zN2v}{tQ)IpGs(89VmnBAt5RKgDAt2p1E~t8yl|eXq+s#b7JCmH3#5y@T@7O6F)ehA zS;tt$B(5^DFij0Xs!vrMl62+r#c(2Ql&8*B*}OXq|9O6AuInNwV(kU%%7u=}b4;BG zA*SHOY~+OH1Oc-$6dhUqv`8(-BE-xI0`UoyzRg2NddQ_b(VRHE)+VE zHpR;0J@5OiMq_Jhs}2{nOS`-s)-=Y7r%)3Ejb721udS}Eo}c;FtS{Ey8wWI6ANHZ% z^R{mwE~!3^N|M&GU%Ils9G#lI7xwD1jn3}Guh_Af}{5$RNS@O^M1 z(K8ny)3T1;h%JV5GXuBxkvX_&eYu;lM{7tn;hJ5OV%jwj zE3ITd#1A1NRqlEor5W*^E1+rwhvbOxaYl+&YucB@STfp4DCJF7+$# z*iv2G>$ORJO)!;m`z;Kg|Oco$`7v{sm)O>01B* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..ebc44ba5c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016,2019 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-18 10:16+0000\n" +"Last-Translator: Istvan Farkas \n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "További beállítások" + +msgid "Flat Pages" +msgstr "Egyszerű oldalak" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Példa: \"/rolunk/kapcsolat/\" Bizonyosodjon meg róla, hogy a kezdő és záró " +"\"/\" karakterek a helyükön vannak." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ez az érték csak betűt, számot, pontot, aláhúzást, kötőjelet, perjelet, vagy " +"hullámot tartalmazhat." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Példa: \"/rolunk/kapcsolat\". Bizonyosodjon meg róla, hogy \"/\" karakterrel " +"kezdődik." + +msgid "URL is missing a leading slash." +msgstr "AZ URL-ből hiányzik a kezdő perjel." + +msgid "URL is missing a trailing slash." +msgstr "AZ URL-ből hiányzik a záró perjel." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s honlapon már létezik egyszerű oldal ezzel az URL-lel: %(url)s" + +msgid "title" +msgstr "cím" + +msgid "content" +msgstr "tartalom" + +msgid "enable comments" +msgstr "megjegyzések engedélyezése" + +msgid "template name" +msgstr "sablon neve" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Példa: \"flatpages/contact_page.html\". Ha ez nincs megadva, a rendszer a " +"\"flatpages/default.html\" értéket fogja használni." + +msgid "registration required" +msgstr "regisztráció szükséges" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ha ez be van jelölve, csak bejelentkezett felhasználó tudja az oldalt " +"megnézni." + +msgid "sites" +msgstr "honlapok" + +msgid "flat page" +msgstr "egyszerű oldal" + +msgid "flat pages" +msgstr "egyszerű oldalak" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..447dc4e68d0fdd3a96bbe345e286d611294b2d85 GIT binary patch literal 2536 zcmZ`(-ES0C6u&B{tltnH@B@zzrful#M}>%sH6nr%X>6LsC!?9}-0lv{&a89q^g~~Y zq6FeA@qq_ZTcB9dBDS?C1x@@5Oz--}gE2Aw6YB5WneDbV-t67q{XFM)e&@`+yK~zG zfwl|%8T3W;XVH(}gFm#NfR6)z2EGma71#joxmSoB@C#rW_$Ba7-Uq%1eCj?S@DpSB zdk*+9kboC~4*+ig9|QgZ+yPtzvc0>&CxL$fw*&tHJ_6jnEuHTIUId5Tz!KJ%aOgDf zPvBQT|9&B!0PcX3_km9XKLvgS{0{gx5GKWq2ZeBe%NhOw+=KZ}kl7C`0oiX2$o3Lo zH}EX*Vc>P(Zs01A_4y45TH;Z3ZhVH=->fF~+&Rb8t523sS6tDA03se5Gs#)^lOyw`Vr*Z_ZC%Fe4diAwwHNHEJ|4Re}X34x%$sB9=7> z7Q0*|6w412KbD?g&6GfXnz$n=bQ@A=Uk6eQ#?eVx)y^@`c^4t!R++q$Zdi+QL$Vpg z+8Iza-*aA1YRaiZWy%e{Q*jO>IqboC1Ln%qS1j#!N=2vmGL>E`@9W!J>?;;=&>51W zKHKb^JK&T`PO*e5Jz!aAc@_;IU2ej2Af?0p?vS4Er&7> zquaoFG7Dy^HEE_XxouW3T4{Y^7O{P)H7U#mEX-jtWfp#)oZ0#|w9b*4#O|V5F_&TB zQtM1Fu^HkeSh~|XgY9XUxn!;p?~_@D&&%d(Ge@nnWG_vcA2Bmm)BR~P&)&^!>)cib zoo66>pf5zc?#j*TN*M6PUZH>hvDL4tYg%+r=QSImtx*M?=tG~vZ5n|1J- zfzdl@_BccidhJ`#UQI*#hI7W3f4~`J8`1KZYbuS1g+>G$xUtT+SSwJzn&uy)1-_rH z&cgW&WSX}&vTDSctTOC9TT0nNs?{PGAuV&Zon}7#AuIwGFqy)4z%)0VPDz_tkr_>^Yx9hW*cDqF v%g79WzW8))0{DZ2S@;8Eb4_q!Z7uPw_PdSfkeIgjW%ifG$F!!Q\n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Ընդլայնված կարգավորումներ" + +msgid "Flat Pages" +msgstr "Պարզ էջեր" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Օրինակ․ '/about/contact/'։ Համոզվեք, որ մուտքագրել եք սկզբի և վերջի թեք " +"գծերը։" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Այս արժեքը պետք է պարունակի միայն տառեր, թվեր, կետեր, ընդգծումներ, գծեր, թեք " +"գծեր կամ ալիքանշաններ։" + +msgid "URL is missing a leading slash." +msgstr "URL֊ը չունի սկզբի թեք գիծ։" + +msgid "URL is missing a trailing slash." +msgstr "URL֊ը չունի վերջի թեք գիծ։" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(url)s url֊ով էջ արդեն գոյություն ունի %(site)s կայքի համար" + +msgid "title" +msgstr "վերնագիր" + +msgid "content" +msgstr "պարունակություն" + +msgid "enable comments" +msgstr "միացնել մեկնաբանությունները" + +msgid "template name" +msgstr "template֊ի անունը" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Օրինակ․ 'flatpages/contact_page.html'։ Եթե տրամադրված չէ, համակարգը " +"կօգտագործի 'flatpages/default.html' ֆայլը։" + +msgid "registration required" +msgstr "պահանջվում է գրանցվել" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Եթե սա նշված է, միայն մուտք գործած օգտագործողները կկարողանան դիտել էջը։" + +msgid "sites" +msgstr "կայքեր" + +msgid "flat page" +msgstr "պարզ էջ" + +msgid "flat pages" +msgstr "պարզ էջեր" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8b37130d9f2c4fc2988f33f61f3851a80e949f4a GIT binary patch literal 500 zcmYLGT~ER=6rEo$d-U0d`Ub&n-GYL}86!f1fjG(Vy>4ZcjCN^@;1BV|ALnoICwK=4 zCq3!C&AGSdwm;{mUk>0Hcmccuo&oQG6=L8C@D=!d6lHTJbLEbCskFr-lZy;LE^~tuMUfl7B)F?Nv!KOK%yNoC5?teeU~-Fs z7Hx(N5)uMJJmw#w>Uq$$K!gL(-Owg!5P&;m#^OXXX$oeQrs$bTDGVBNk?{iEfg4C4 zicRVXIaT*iBl9K8IZilRP&AO1>q1m#s5Y~nyaF?wWFqdoooSc%i8M pF6`baMS{6;vDB=\n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4426268ea74131050d043dd1f31cd9958d20d6b8 GIT binary patch literal 2222 zcmaKs&u<$=6vwBu{4zfZ<;SUrcc7>dUfXpMsvJ^5NdiGhV}i>GsTzC6>#=udm-%7G z98j(tIrM;lJAVX!1e`b^afmo_;=+Lgd}r2)lOlKJ@n>dt=FRuLH}ihKa_IrX^D^31 zw4cykL;L&!{_y+^z5xCL?t{nR`(XPq#%7=cYv7+?2mBlSFnqrV8{n59e(YELy$=2c z68I1JBzW}_W0%1z;_zJiKJ`Uaop9AG$Y{4#@I3v!05EDUVM?MT|jBkZj($4?DL8|N(yGww>BN_!&eei$`IF3+O5ogulAvZSm& zKKj;CX^N>5Qq=Jpvgg*xoMtM^$Xgj)TpAQ|$bIHcZLw|aMcuGj?1qi7)Q!lSjILeB z|C%M98Mr?ud8n+jG%O5R$bDb8o16dZvC3`kiBDv#J zoAinf)w=u1ft;!^HQ9u<4z*kDR?=!Gt#_!^?%cfjRtryUms^+g4A(ert}q?imS#?$ zN~idYYkD`82x&Hx{rA!whr0p4Zex*7JzPq9lII=T(W21OD$Kt=a<1$&o3q)h0spjB zLwOh$H7mI%$QBlwN;KDMdpmnuOUG_BTD1?VXePaR3F%HAx+a36^g50aH&(ihd%f-C z)^c9hYbZ^!r3Xd0j~%+zSMF44hm@#wGjDj7Y!@cC9nxhS+Kn6QRCPC6>ovAtT1AjI z_Ks^7bQGhN<)Dk`sR{hfWsaLaQG}>rF;1H%J{c*vJ7N3R$GiWc%{LWMwVAN z-id*Gs3v?2eK_fYPe>>$h2qeQYk>2IVh{!puhZ1)*nf0U_z2GBSkaS?muxroUFe@y z1nUJK5f>b{&-qCx2i`90K~y7DiC~TDD4=@Isa$N2G@GOdmk5%PggMR#^_AsOphre@ zs<5V#ptNeRy9$S5VWu)Bc!~RlDuAO;BX9h$j?$b?IBKAR;rb#SeIyDBkYh;AmG&qR zXJd?2j{C*;SSYGG(TkA`{+*p2(~et?*C-SXwrW;55oe}BBjXdNh9L`+A`}d6Smj>~ k>$yJSB=`_BFj=S>AFDprg{t8#L$N@btJ1;7Uiggt2kt_dRR910 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..9057580f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015-2016,2019-2020 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-06 02:33+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "Opsi lanjutan" + +msgid "Flat Pages" +msgstr "Halaman Tetap" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Contoh: “/about/contact/”. Pastikan memiliki awalan dan akhiran garis miring." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Nilai hanya hanya dapat berisi huruf, angka, titik, garis bawah, tanda " +"minus, garis miring, atau tanda tilde." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Contoh: “/about/contact”. Pastikan memiliki awalan garis miring." + +msgid "URL is missing a leading slash." +msgstr "Tidak ada garis miring awal pada URL." + +msgid "URL is missing a trailing slash." +msgstr "Tidak ada garis miring akhir pada URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Laman tetap %(url)s sudah ada untuk situs %(site)s" + +msgid "title" +msgstr "judul" + +msgid "content" +msgstr "isi" + +msgid "enable comments" +msgstr "aktifkan komentar" + +msgid "template name" +msgstr "nama templat" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Contoh: “flatpages/contact_page.html”. Jika tidak disediakan, sistem akan " +"menggunakan “flatpages/default.html”." + +msgid "registration required" +msgstr "pendaftaran diwajibkan" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Jika dipilih, hanya pengguna ter-otentikasi yang bisa mengunjungi halaman " +"ini." + +msgid "sites" +msgstr "situs" + +msgid "flat page" +msgstr "laman tetap" + +msgid "flat pages" +msgstr "laman tetap" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37ef71ddf4caf6e93a103679784cb7fc65b9d258 GIT binary patch literal 464 zcmZus!A=4(6vXIhkDfg|6AuvVwhL;OBF2c2U?38*dat`>DOuW0TLeEuKhJOREf~Bw z$)ufh-s{Zw>B(meafCcWULcQ=m&gh+@(Uk3cvhYRrq(QF>d7c0uhKeYG>2>{bZ&x~ zERFSK;&PRdhjs2qVmJiT=Y;gF6dt|gQFzIr#iDD%+9ZmBb$E2sWD#R%Bs2N0s-6G% zV&1-LGDI*I&XdFn?F!+I36?6HJS>6$Kd@yK)?Kxs$Hf R>calot7|y#LDc95wI9WrhwlIY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po new file mode 100644 index 000000000..78e3fd016 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,74 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32956d2519533d551dfc96f549d582879c14ba37 GIT binary patch literal 2229 zcma)-&x;&I6vs;we~mF}G`EN^VAx$u_slGcaW)%_W}^#PvLus$poE&~*FCkYt)7`3lMu0)>QC3N_g=mC>doCF z2fq+_UPL>F_7mDmXdgU+7oK0h=fGdVi{Ku37F>Q*h!N<(8u$m;0{;Zx_45ZH1N<1o zPyB}0%i!-Ifq#KdfX5CB@htcX_!RgW=;fUOkAmyqW8gLL8IY%a3w{P$#-LyKHx_xl zM;{mBH25Ld1HT5nyaQ0?=MRJLfmgu@{0_uV9DGuUPHe{d4 z7KX{?)RRM|lx3uJLQ+TMj8v)b*i_mc+wec+Jw%+`7g))-S3;ahH;@V2nNin#FYLK2 zt;DUzM+SpTKRUUcvM+kolvy>v4%1&n6kn;s)B;e6ItvWWSk^jWS#0G${o6ej?nAo zhS7qw-sKe8ue!9@ zb8gV8*GHpKh|_7SV%`qniu%OZ8L+$(P*=9TRNGkJSeqZK88&L~One!%#{(Gdc-z(C z5~Wv=MABGxt5@3RgH!W$URTT}Skv9y-^Lc5>L|BwXbYjOZKj2hX>dL_nQf6CR9(Be zyh4-D)kRGwsM(<7tJI|H*J;vi&?@@PrInf}KX=lkoJeFja>w6vX~enm`%JZH;l6UQ z5aRY&E6ZC2;e}!mOS1iP7jaj8iVbJT;~a$}c8Edv5IO%#%zX3wLQl)qyh1?IT1?#U zvvI_R5{?z@Dh2~wDNPuz`Z{-#7UpvPT^JU^sutM3DR+%n@Fl`$_5x)LNj5ESm$#Ib z`{e;z%AYHL!Ce%Oje_UOn{Y|BXj&s+6;?T@#d_RvZ&kv+3kR2XkSe6Ku9QN&Ay~-T zr>HG|@M@<5Ls8yf++N%#d7>c)G2TGt&_2$MYuvy$K+8|4J@Hb zmUmKA7e9-@xN^6zQDZ`?Q$W}J&?lj|%5jYJ6_@uziN6r!#Vn%b&8Z_ETrr6>%~#CK z5<_MBTau*f6^XQ*Maop=qB`{a%ZO?KMkS~YMS07PHS$pm5lSPpj5S#e_u=TMJSZJV GQt=PK@vhGR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..fbc5a03bc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Thordur Sigurdsson , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-20 05:07+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Advanced options" +msgstr "Ítarlegar stillingar" + +msgid "Flat Pages" +msgstr "Flatskrár" + +msgid "URL" +msgstr "Veffang" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "Dæmi: '/about/contact/'. Passaðu að hafa skástrik fremst og aftast." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Þessi reitur má aðeins innihalda bókstafi (ekki broddstafi), tölustafi og " +"táknin . / - _ og ~." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Dæmi: '/about/contact'. Passaðu að hafa skástrik fremst." + +msgid "URL is missing a leading slash." +msgstr "Skástrik vantar fremst í slóð" + +msgid "URL is missing a trailing slash." +msgstr "Skástrik vantar aftast í slóð" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "'Flatpage' með slóðina %(url)s er þegar til fyrir síðuna %(site)s" + +msgid "title" +msgstr "titill" + +msgid "content" +msgstr "innihald" + +msgid "enable comments" +msgstr "virkja athugasemdir" + +msgid "template name" +msgstr "nafn sniðmáts" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Dæmi: 'flatpages/contact_page.html'. Ef ekkert er gefið upp mun kerfið nota " +"'flatpages/default.html'." + +msgid "registration required" +msgstr "skráning nauðsynleg" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Ef þetta er valið geta eingöngu innskráðir notendur séð síðuna." + +msgid "sites" +msgstr "vefir" + +msgid "flat page" +msgstr "flatskrá" + +msgid "flat pages" +msgstr "flatskrár" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7bc06b2e2ded5ed576bf163109a9f78647d7277d GIT binary patch literal 2209 zcmbW2O>Z1U5QZBFU(0uZOB6&UfD#MOuGaz-ZS05yY-Gt+OmIL*NKx-h?QADK-NSUx z`r|@w2#G5P5J>zGZu|i_aX`w!7cNLhIlzHS-kR}x9V0j}+TN#or@Q*C>aN;5Cr^B( z@VtO_8tn(Pm(V_W0AF~10-ptc2Cstq;AL>}L8Z3A2zJ2V!2$Re_@2Cf2sXey5Fhmm zzFr1@1qu8cd=xx=LaArKSHZ`@H$bs>349S;10M!&fKP#ZFb-e_ExVxTyMsyV;2+=> zaOn}Ha_}=y?EMBVfp@`=!5%grgI|E6?=JWX_$PP&&>Ew96<~+E^I`tHYQ>_do3Yi#dI0u(5H!g^|^<)H#Q#s2eisj$>gPb891t zV-v^(w}1QVNM+?GCgW@#KSTCzh+NRNv6kw<;^NF;#v@(ZcxX$lVlUd1&6=)kgr#vz zb!F+b^Z1?%q-_QFcZqjQh=E4FqF^H9yG-q~HUKF>Kzj1wtUXjKiF z^w2i3ofzJ3R5u=~Epcn2ZOv5FAyRWFSlrs;7-3_cTwM&CPUa(qwaYL{eZ?4L&56uU zkA@&M8k@->UB9+24Pm3ggwUMk@niVM`}@zjt3(mIsMs|wq`oLH3`#;w;>4^MRK+<0 zR%y9(RPm>^sW?*-v!HNBCDt%GU9gHKT2`BtzsYG#*0SV7xP(;$%5G|x`_45keHD|9 zkee*IQs*Jr@&oE@UQMp?#K_d-U055?;=*D-S?DMIH>v;DV4?r|0-nyg4l&uPw8M3a zz8XNPE$SUwYWa3v;7WJl%_U5Ac@0OBE!M?=)}ppXJ32p(u^jYz+uPe+xa5Kv@s6zM zwF;-O2g`dV_U1YpYa1&wU;5pJ&O2=YldatnY9sH&9^zo!Mcf=+1&+(tw^ox2vw5=D zh^u79rCw5SKo^E49?BdL2Aj67v`tohRfGY#vKfZu#f#K-m(M#ovrPTDiyd{f+(Wbs zY1D*0giLL6MI3M(1`$1Xe>phUrOUV~Da=PBcbkkedxn@s=!8_u6~zto?So#m}uJ5;AxAvoKm4{&#|c_=wGBa`A>=gC-PrsThF67I+E>4=e|$$z$cH1*dt zP4{XYI+Fa{7^K|5Scyopwk%O?Gz4!w<{4W}0pfTBA%kw$Oyi&{fCh;1V30 z(dw(CS9*v)i6|GODG_E?7-qd$iIC_q`Qgx-Tr$*XsS`#yU!YJP)CwsR2(G#Zyt9tU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..606a8d2da --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlo Miron , 2019 +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2020 +# palmux , 2015,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-15 16:01+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opzioni avanzate" + +msgid "Flat Pages" +msgstr "Flat Pages" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Per esempio: '/about/contact'. Assicurati che inizi e finisca con uno slash." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Questo valore deve contenere solo lettere, numeri, punti, underscore, " +"trattini, barre diagonali o tilde." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Per esempio: '/about/contact'. Assicurati che inizi con uno slash." + +msgid "URL is missing a leading slash." +msgstr "Manca una barra iniziale nella URL." + +msgid "URL is missing a trailing slash." +msgstr "Manca una barra finale nella URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "La flatpage con url %(url)s esiste già per il sito %(site)s" + +msgid "title" +msgstr "titolo" + +msgid "content" +msgstr "contenuto" + +msgid "enable comments" +msgstr "abilita commenti" + +msgid "template name" +msgstr "nome template" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Esempio: \"flatpages/contact_page.html\". Se non specificato, il sistema " +"userà \"flatpages/default.html\"." + +msgid "registration required" +msgstr "registrazione obbligatoria" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Se selezionato, solo gli utenti che hanno effettuato l'accesso potranno " +"vedere la pagina." + +msgid "sites" +msgstr "siti" + +msgid "flat page" +msgstr "flat page" + +msgid "flat pages" +msgstr "flat pages" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6369ad4e4ab475e07b4d18d9b461941ec1141b57 GIT binary patch literal 2469 zcmbu9+iw(A9LGn++j>L1y`Y{4O&~J6OJjg6mWT?bhDw9Q2SX&MJEyzT&d#iJ&Td=TatY;mlwJ3r!t)Eb9Q+mB4$gv`!KQl+qX!gV0{k1yfY-sd)%bm| z0e%ePHGV_&BKSKy0elWr zcGlIotQT1T^LP!q zhBV_56qT2!bWg2PdX3FinYvkK5w9q0&*jFJURo$REJJ21qbb_ql|(A*xq@azYPRxa zlC;upMtI3*M0g}m%ZxaTTDF@b)U}B4sqLr+cPP&@p1g~_CCt$UgWAT;7CId&iZsV~ zL)327O6Enu(dJq@iOAcW*xa4192KPKdu7{V)*5s}b{`k4KzeM)Atla~i;D&=)=5i_ zSg>Vm#a^UMZKglfMp!EHq~tr~-?)MSaYjeR#r{@!H3x;up)!bNAM6!97 z?N(Ym*XbjUm&-BBv|S~|=QULwjL;58$F^*<9<5q?XtXQ0%G4<_QYdjjbW*UmW{U{{ z8*7MLDs<=%%M)mpTnnwN=QA`cosl(-)DTD&wqvOz?cA|V6@-lxY|eEyZ%xB(<2UCz zX(&a^6$W#)3t6vFK$9CP#6&r<_{9yM zSj&*6bW_?)H<{`6WbL|4di^VDJc(_T3$xv)E{>b<{0wQQ-K9QC-X*UI+U?q|>y@=k z1d&lcn}0o5z#&hs$_r7MCyp6cFApwxA;kRy*N%_N;7oP25?>yY!I%tZWOP; z{5XGZzYIoXa7qRTWN=&t!!r0pR>CDV(Z6+LkN<0W@o%r+X}4S-)uFv`SIavmgF`Ze z@+nyfWVBaC!!m?ZV=@|uD<@?zao6jE$ndkPKVMO<1(#)TR5_?j)Z!8i$mp1iF3Io* z{ogfi6Ii|DBpFOD+$cm%3cr)#Nhm?It0N~+$Kyxh(KC&}-n3~T!_zt$lY028`1pnR z;DGjOT!vHH&~$A`MyIr@?^UgGb4VqxAr&sg2g14j(=xz|EG{?}9EKh}q^#c)&8UF$, 2011 +# Shinichi Katsumata , 2019 +# Shinya Okano , 2012,2014-2015 +# Takuya N , 2020 +# Tetsuya Morimoto , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-07 16:07+0000\n" +"Last-Translator: Takuya N \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "詳細設定" + +msgid "Flat Pages" +msgstr "フラットページ" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"例: “/about/contact/”. 先頭と最後にスラッシュがあるか確認してください。" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"この値は文字、数字、ドット、アンダースコア、ダッシュ、スラッシュかチルダのみ" +"でなければいけません。" + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "例: “/about/contact”. 先頭にスラッシュがあるか確認してください。" + +msgid "URL is missing a leading slash." +msgstr "URLの先頭はスラッシュが必要です。" + +msgid "URL is missing a trailing slash." +msgstr "URLの末尾はスラッシュが必要です。" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "URL %(url)s のフラットページは %(site)s のサイトに既に存在しています。" + +msgid "title" +msgstr "タイトル" + +msgid "content" +msgstr "内容" + +msgid "enable comments" +msgstr "コメントを有効にする" + +msgid "template name" +msgstr "テンプレート名" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"例: “flatpages/contact_page.html”. 指定しなければ、デフォルト値の “flatpages/" +"default.html” を使います。" + +msgid "registration required" +msgstr "登録が必要です" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "チェックした場合、ログインしたユーザーだけがページを参照できます。" + +msgid "sites" +msgstr "サイト" + +msgid "flat page" +msgstr "フラットページ" + +msgid "flat pages" +msgstr "フラットページ" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b20adf6c18acdcb28b20d3b51ebf4bb1f0209af GIT binary patch literal 3022 zcmbW2%a0UQ6vj)%SNk?Gx*+jx$S`55yN94)BL+o4lu?2WF~-E)>AKThOm$UT_x3!N zrV^uxiGzY5s2QF_H0R9Nx3H}VO5$jiQFLTM__uxhF7x36!LGT{9 z1@i0QHSl%pFWuww_>&-Svi=wNDtMe=Pk>jzo#0R47VtW_4cvTR5bOhA0`2@m(B}06 z2(5c;eh>1q`Hi0Y8Bn^bjnM8PHCH39!6trIW2+^h+(Sw3vAP7$M@us8s7Pc36KAOo z_OHnPAWoGQGKx-Cy5wp zC8j1+ky?<$#8fQ7fhq>JrYDAZBDQShJ*|aIa`IdiY9-c2i-jx~IyQ=Z3)4E7Bp^CH z)mgN`vou*1N!IPED2!7ZJJ&vqc_rk0;zU@A)v`;|l@qjW6-zQ1D$yTmBb;_PdoE=R z95W&v_UGLo$_&$C8Zql+xndGI>1IY63Q{$35?M8m9X)J+s3iKa)=u_u1Dxj0X5;?G zrqlzQkxEUVQddGJ>-U-Jz^W>25tES)a@9q!T-uW%a`nzI&Q%o9jsez6q_VF96PrW@ zNAm21>X`6Q6dtD->{}u_A=7SFJE{g*Zo)a;jic~|VONLktR-qkUTcT@Xp7|zUxcnD zwl`;=3TK;P^BFO_v$bRUw&wO`6T|SRT8b^_#BL`>;VgDfw{|qQHF;`>r8Z$Zmnl-1 zEN_XIWtyVZVZ~ue#It0>bZ_FO^*CL~p2H{Y4kEd)Z$4us0 znLWqa2f|$wI~!|3<>CIcli3feC3elnW}IhBEXvxEWSGk&Jdovm-4f}*P4%AH-NFy| zGt35K7J+%K?1!YrLGi?4m= z){AAT`2rvJwmbFU7Aa3Ijp{nvaR0a%m*6A`>b3ItoUK-F)2l*-RtUC9XuSewa$$y< zmkLkvLJxdCAJsAOgbx|U8*8_?(43@{x$ffGN_`NdfSXm6IBPGu(5E@R@0{ajPP0?E z*ksG%!YCKAgVZX^5_@Ds>v=P!VA$<=aygFGA*l5tDs-@*x^2WaqX;-xb+TdwK??d= zb%{9+aCm_TW{tfSCf=5}&lWq9q-H;`aT#q;j=We!^bLB9bA-oN!@zdU5v-30U5Tz_ zw#kcJyq%A?W=|7C8<(7D7Y>*a%D2vT!=-2yz?s$RT>2t0=cq%82OATri6Cs?3lUcS zpg{svb+8bK2tFNmy!@wg*{OfS@-=6)K5F7bGTVXi=j6{OoK#cQJ}$~vWY2_k@!1l_ znr%qH7U(Dm#^%3#u9Xb_NRf@_v+U!)FwSdrkl-T*Z>r#v@gY&L`o=iJFtBP>{%3e^ zHLj2gfPcq|nsC*zb8Y*7bY($&Xwb)Bpnh;R7@c`~ixl(@BYPITISSJrZ%buZ_-, 2013 +# avsd05 , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Advanced options" +msgstr "დამატებითი პარამეტრები" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"მაგალითი: '/about/contact/'. ყურადღება მიაქციეთ დახრილ ხაზებს თავში და " +"ბოლოში." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"ეს მნიშვნელობა უნდა შეიცავდეს მხოლოდ ლათინურ ასოებს, ციფრებს, წერტილებს, " +"ხაზგასმის ნიშნებს, დეფისებს, დახრილ ხაზებს და ტილდებს." + +msgid "URL is missing a leading slash." +msgstr "URL-ს დასაწყისში აკლია დახრილი ხაზი." + +msgid "URL is missing a trailing slash." +msgstr "URL-ს ბოლოში აკლია დახრილი ხაზი." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "უბრალო გვერდი url-ით %(url)s უკვე არსებობს საიტისთვის %(site)s" + +msgid "title" +msgstr "სათაური" + +msgid "content" +msgstr "კონტენტი" + +msgid "enable comments" +msgstr "ჩავრთოთ კომენტარები" + +msgid "template name" +msgstr "შაბლონის სახელი" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"მაგალითი: 'flatpages/contact_page.html'. თუ იგი მითითებული არ არის, " +"გამოყენებული იქნება 'flatpages/default.html'." + +msgid "registration required" +msgstr "რეგისტრაცია აუცილებელია" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"თუ ეს დროშა ჩართულია, მხოლო შემოსულ მომხმარებლებს ექნებათ გვერდის " +"დათვალიერების საშუალება." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "უბრალო გვერდი" + +msgid "flat pages" +msgstr "უბრალო გვერდები" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8ef043872114bb443a0673e82f73404e2b5a6dc GIT binary patch literal 2438 zcmah}OK%%h6uv;q!@OG|-f&nz8j-P+ibZgg1&J8=R6 zrH+IurKqZ^rYd0ttFDOErjIx&An^n4IEZC8ED#(10(|G%j%^9VmG6A_dCqsfbFS|l z*mqf=9YlW#{RaBW=qK*O2kj@|Q^22r$AK+i1^CMSLS%sFfqCE+;0L@9{0R8M147^@ zYWTbg{2WNYb>Kt5ZQzr@Ux1GQe+9C=d%$Oae**Ud{{}t|+`q3qKL|Vx4$lK$#CjEn zYQXcrFM<0WY{#+!Jc;=g;0o{$;9tNpoWrE}@L?e)fFF188{lJ@{|0;u_&bpOJ_mBF z%^N`Wmj^xpJPmvnD1kUCz5s%j-2+%#tlQJ**s^B;0`dq@u?->E#&NR`ZtRmAbL=+O z>rr&p>p*uA$ohzPyahKbNROhb_M=dVBa3dO8pu2i<=nX_(YZntYPX7T+<~=;(%U1 zgzvB-H;6%biR7ZMw4(VaCgp31eTHErdR(Ybl7%w!h{9lrf~Z)Op5up1BUWujbCTS- z!0NH!%bI0uBNMY6(1IHzk}8SPWM#zVwk@eOY>ZHtROal!i!`Q5=wVifVu^`oRUGNc zNua9zz++)g&79y4!KmUZWizms3oE}pGq^vPpR8a;GSotbHiSY{sbH!E3rrkDZ=^&l zix4b!xkxCMpC*1RJ;9nOf&5f)M^flkq|m+&q?nGQGqRwaW1e#wA>me@yfbcCj50H_ z8pYa~Qbpf$-c5?inT_(4nLg>v$OWH|I`6|;o(_+Wz3q&SIb-8AI+`CFe{&QqbHY{H znT_2Laq1|}(~Mj3e$qg9{;iIXy(1PXwK|X6%4gp)H%fNhZCq4H&#+lo|--C zjQ7s5uX!0eN5VqHPbE*|bH3hVnWu6&GaV%0?i`Kcipo=1wNo{Dc!Ju)$wT35lVigZ z8DYLNcTF>0ZLJdqKc-)q+vx?t@qz;lyUT%)9BDxs@IC+k2gz|BZo% zZZ5N77}+sf?7GpmgaEcNg58n-eBabsXC}DerG|Kd2u?J^uF-UdiF({pgK z)t42Jgm^d2-PSta@7^6OaP$9n!F$8pGTTV{jzFc}#e%J&jwZKJMx7{_^m3~KxuAJk zN6L}GmBFGMoN)?JqMT?%j%SdraBXjZcPIa%zb5%8D~|dD4^$+)phGRu9g2Sdb8rO* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..4135eca0e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:18+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Advanced options" +msgstr "Толық опциялар" + +msgid "Flat Pages" +msgstr "Жай беттер" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Мысал: '/about/contact/'. Басында және аяғында слэштің болуын тексеріңіз." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Бұл мән тек әріптерден, сандардан, нүктелерден, төменгі сызықтардан, " +"сызықшалардан, слэштерден немесе тильдалардан құралуы тиіс. " + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "URLдың басында бөлшек белгісі жоқ" + +msgid "URL is missing a trailing slash." +msgstr "URLдың аяғында бөлшек белгісі жоқ" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(url)s url'ымен жайбет %(site)s сайтта бұрыннан бар" + +msgid "title" +msgstr "атау" + +msgid "content" +msgstr "мазмұн" + +msgid "enable comments" +msgstr "комментарийларды рұқсат ету" + +msgid "template name" +msgstr "шаблон атауы" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Мысал: 'flatpages/contact_page.html'. Ештенке берілмесе, 'flatpages/default." +"html' қолданылады." + +msgid "registration required" +msgstr "тіркеу қажетті" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Бұл белгіленген жағдайда, тек енген қолданушылар ғана бетті көре алады." + +msgid "sites" +msgstr "сайттар" + +msgid "flat page" +msgstr "Жай бет" + +msgid "flat pages" +msgstr "Жай беттер" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..73e5fa3d9e614cfdac68087134c2eca1b8d2388b GIT binary patch literal 1942 zcmaJ>&u`pB7&TC!EJX+;q#ig-#bH~D*WOUt;t)WT6on=tiZ)!)WIem<#2zo6*=!;q zw5d``sajf+76Qm#apB0VfT${zJK}~^Q6UZg0RIAS#@-)kC?nZ#eth%3_rA}&e?5EP zhJ|qm&+~Xb!t)HCdwBF94_VeZ;1OU1jDYU|{{%h)eBoisdK_2=J`Hq$PXONlmVh(B z=YTcfQ@~~5qrf%b6>xkE{2l8<2Q2F@@E-6t;4K7A0yiJa@Ba!sjP)M{{!`#VB!3zE zM}RK^7lAro4+whWOY6{@^uV?mNNdKy0<|Vk8c&d5#*_Lzy+)&U$UIVZ=u+H~PCe$5 z)}>RfkU6@-i0CAY$e6U~DkCAIe!!cAa-YbA2BBVvkct))l`*bHNM)NgnHbQ0pjVZa zj6(3vG>B{kf&_w>C21$|YTz^fC2S(yx{xd)-5?A}M=(+zQTePvJE1ICtPu;Tw^)5e zGsHYxCt=)dGT#okCP+liwZsTr3XPN1fOSnSqsdxan6Es_Ka`84<(5Ah`&sEGcGN# zcAQ9iPBa7Geyh_Ib}jZuY5u*MeI{Xs+kP8#9+_~fuh>=Bc3&mcQ{IV*0dK^w z;|_0jVA`%R8hPYgD`E*b+LE&EIZn6Rt-w4NL4&PTP$?&OG=Q+U?5sr2vC`bk-1NwM zwc?h}us2mY)v|-TfisLMVbgErxt5x?bD+;ovXnTdz#l{{qcF^^im*)B0aJa zmFB}vLPPs(oJ7JSyls|Zsya#X>6ANJvQ+xLO0TQ*mP-37{aU40Rd!{!zyHhM?W=4X zuk>@3ePJSRtMpryZV#4V=&AHGm0mM!UzzuoN;8#SGBKC1v)gwxhe?=yqS8&3ZmH~o zN^h7D%+DK|4Raf(p!r3m8~PHse#8wu9Uk|J>={CLAkcb%pRr#|@mn7I@fF5~PM{cx zknRVg1xt8CX`pUHWfzU8JYZ<@I*$JCUCw1fjE>rKd$&I(Vb71&Wct~Z;z6aolRMil z5LqA%oAv28 zD*bMt0AWam9RwiFO_kw07%$qkiQGb!ayR+S%)~(;81Y$M&Vy8X-lTz`J#e z#@)PD$N?XC@8r8^8cH$x-Vld_agJ*y57hqje+Tz, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "អាស័យដ្ឋានគេហទំព័រ(URL)" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"ឧទាហរណ៍  '/about/contact/' ។ ត្រូវប្រាកដថាមានសញ្ញា / ទាំងនៅផ្នែកខាងមុខ និង ខាងក្រោយ។" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "ចំណងជើង" + +msgid "content" +msgstr "អត្ថន័យ" + +msgid "enable comments" +msgstr "អនុញ្ញាត" + +msgid "template name" +msgstr "ឈ្មោះឯកសារគំរូ" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"ឧទាហរណ៍ 'flatpages/contact_page.html'។ ប្រសិនឯកសារនេះមិនមានទេ​" +" នោះឯកសារ 'flatpages/default.html'នឹងត្រូវប្រើ។" + +msgid "registration required" +msgstr "ត្រូវការសមាជិកភាព" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "ប្រសិនជាចុចជ្រើសរើសយកជំរើសនេះ នោះ មានតែសមាជិកទេដែលអាចមើលទំព័រនេះបាន​។" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "ទំព័ថ្មី" + +msgid "flat pages" +msgstr "ទំព័ថ្មី" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed64a6b861787a2f417fd7fa6282a64c42a578a6 GIT binary patch literal 1902 zcmZ`(-)kII6uxTxwf@3_;DZlWgl+6_!6WVLMgV)Vq0I@2cHE014Zti;Gf`k?rb`V)C)7;oO{lE=R4n>-M^0> zxx}!Z#PtHMk8nMU>n~ii_ydex0KN!Jfhq89;Ge*UfG<7B*rUKY@EM>Fd>r^Xum+q5 zJ_l?Ap8~D|9|mp!zX8X`z&*rIA7Sh_;4R=Ezz%%*im2$*aBVzlFn35a}S1A+P&lB^w&Q zlPM!Q#;-T{f>@JW4|B;)#`|Jj@ZgaVxi-Iuy?fUBDbGY~zg_vtQD z)aaWu0q=a5n|`c$tX19cL7uJ0k&I4a6YVy&ktrX=Ny3L(@_I!T$*veCX2QZM7T)R0 z&KfafD%s>o*6Yd0ixm;%y5w4sT&yH+lJ!`QTra1IEibhg4K0;nQn{i|mZk_bqvo8- zswd5I*^4!%H*uzTESeVh zImmM3E$Chxd2bGT+G}SauPwgU_Ri(faeHrpF67fe^R(9tyxmMs64%&c$j5=O}V5&Fpgfymz*$qh4K^dvmIj(dQTPvn#Q=Co|-0 zsuRUvl|9JKna%bz7hcxxyBAk^9aTH(cVfyVEnD@{c3)xyx+X;ul+d>bSPC3zn~J z@dIAo=N&t`F?Jg4fY9pupZqcp{gfO%CITI_;9ltjHxi)VbvZmcQMR~ji!0O=g6Jho z0%f<|^G{Cvb)xy-UmnDN_Me8=YysV%D5pfjEt&z7yRL_wf<-jd;zXj*81r7w@gOgXCu?V3LejFmc?T#5m5QPeu4j=Hf(Rq_~ z#a)nne}HKRgH%fIm#ngrj^izql@pL(&I5?OQZnJtpsVztJaaV0blY@P)XlkEPJ&Mx fhqvRj?V%5>KpHCP*ie4cjz4h$27(bFBH!7+VO~t? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..83198cc08 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,82 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"ಉದಾ:'/about/contact/'. ಮೊದಲು ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ಓರೆಗೆರೆ (/) ಇರುವಂತೆ ನೋಡಿಕೊಳ್ಳಿ." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "ಶೀರ್ಷಿಕೆ" + +msgid "content" +msgstr "ಒಳವಿಷಯ" + +msgid "enable comments" +msgstr "ಟಿಪ್ಪಣಿಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ" + +msgid "template name" +msgstr "ಟೆಂಪ್ಲೇಟಿನ ಹೆಸರು" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"ಉದಾ:'flatpages/contact_page.html'. ಇದನ್ನು ಕೊಡದಿದ್ದರೆ ಗಣಕವ್ಯವಸ್ಥೆಯು 'flatpages/" +"default.html' ಅನ್ನು ಬಳಸುವದು." + +msgid "registration required" +msgstr "ನೋಂದಾವಣೆ ಅಗತ್ಯವಿದೆ." + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"ಇದರಲ್ಲಿ ಗುರುತು ಮಾಡಿದರೆ, ಒಳಬಂದ (ಲಾಗಿನ್ ಆದ) ಬಳಕೆದಾರರು ಮಾತ್ರ ಪುಟವನ್ನು ನೋಡಬಹುದು." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "ಚಪ್ಪಟೆ ಪುಟ" + +msgid "flat pages" +msgstr "ಚಪ್ಪಟೆ ಪುಟಗಳು" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f13b0d4b5e2d96d030af34370a44dfb68c908e4 GIT binary patch literal 2304 zcmaKs&u<$=6vqcB6wL1e2T&33K$S*#Z8xe!<__yOE-{Q^D%{t6xfSHS&X&x4E=KnX@b1t!72!FTlf zL+}B93gX9p!|fIDcaXq;!Oh^-O^iJaz6w4D?gX{Jz2FOAFZeKc6nqlot+@bG&{AwY z{{x%$VLbqK{OBW$9S0?-_5THa1a3yqBVY;~25*8|-?m2?>jt}9`~ZXr`wV;u90RqV zufgZQCGbV?XHe_D-CF+>)OP=XkQe3#gxa44w_xb}w2jUSZPST@{Il{@|re(WnGF^+LZ`zKY2*(r|E@Job_do8;HHV>(J3S0Jrp%dX zF504w>RBu!vrg!)cZg)h7Gw)|rSz4gobQd;7Pq2!4B15?d6o*c<4|63onptK#fQwi zBiDSfgNQ}_I#~Eu2ZE{0P~LZF+jiW$1(}YI^ozttZ6O5>c|HkSa;$4~3)WFYsSHmI zYb~DZ6v^?@X>J*|tEKp&scMjuIp~D79kF>KR2^o>26S2@rjzHC%?n9kQ()Zm#ifLg zD7pFUVED)KB&K=S!Yt+a91|<-NVMG=f>dccmTuCK!|&^XvQgF+BJAeIHr%y-XRl*S zE8?zX+znGmdD$$cg6R^IPNMTqFrTMUFyGXNj(q+}-uAi0bj<`qk8-f#|tYabG%% zlO01+dtu?G^T@{-;AS>S@1eY=OWQM2=92Mvp-_k+F<00_d{i66n>yQYTGsJlFWw#L z>+L(x$!JF`5qYawMq{9ugJ#J`WgOM8-Q74prZ2eMb7bJ4v8%IB#~R|kallP^`bA9A zu0dO_sZ7$a7wLEMzUdeTJwGdwvOC1)1+o@sFO2Hm1mcUhE2II-D4d03`V!@Sf;p3j>OEbZ_ z3f$ep5pD3)#k70s>b$6}&r#>i?;@>9omf;C78>O_QsXnErcVVEQ?z>Rmb$P+2&E?G z8z(EOT3hdG{X5@9syY^5?`a{J91kYvW2`ZCCYZfSjW1?kudb9>`|S>cR%?xkx=yqG zP1xwCLK_{dE|n0i7JOePb+M*q7aQfZVCq_}aU2ikTH?`!i#ACBlq;7q!A*O8~W?9x8s#w@;5Fr; Z=dha$M@5@n{wZwJ^~bgXpR5? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..f0f117aa9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jiyoon, Ha , 2016 +# Ian Y. Choi , 2015 +# Jaehong Kim , 2011 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# Le Tartuffe , 2014 +# Jonghwa Seo , 2019 +# JunGu Kang , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-04 14:22+0000\n" +"Last-Translator: Jay Oh \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "고급 옵션" + +msgid "Flat Pages" +msgstr "플랫 페이지" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "앞, 뒤에 슬래시(/)를 넣으세요. 예:'/about/contact/' " + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"이 문자열은 문자, 숫자, 점, 언더스코어, 대쉬, 슬래시, 틸드만 사용해야 합니다." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "맨앞에 슬래시(/)를 반드시 넣으세요. 예: '/about/contact'" + +msgid "URL is missing a leading slash." +msgstr "URL 맨 앞의 슬래시가 없습니다." + +msgid "URL is missing a trailing slash." +msgstr "URL 맨 뒤의 슬래시가 없습니다." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s 사이트에 %(url)s 을/를 사용한 플랫 페이지가 이미 존재합니다." + +msgid "title" +msgstr "제목" + +msgid "content" +msgstr "내용" + +msgid "enable comments" +msgstr "사용 가능한 코멘트" + +msgid "template name" +msgstr "템플릿 이름" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"예: 'flatpages/contact_page.html' 를 사용할 수 없는 경우 시스템이 'flatpages/" +"default.html' 을/를 사용합니다." + +msgid "registration required" +msgstr "등록이 필요합니다" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "체크할 경우, 로그인한 사용자만 해당 페이지를 볼 수 있습니다." + +msgid "sites" +msgstr "사이트" + +msgid "flat page" +msgstr "플랫 페이지" + +msgid "flat pages" +msgstr "플랫 페이지들" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c4aa02ffc15a1d50f1d365f0d00f284796aeee01 GIT binary patch literal 2667 zcmb_c&u<$=7#*PeGUZoGPZaSXwGvUYwwpp#Tv}0}MG=h}m6Q`wwf0WzZPvSHXEup* zN|Qq>g$h-I1E>gza;XGrsy2=5IL&{6X469tNE~v869*1lc;DEL)1Zb6mS^A2uW#P> z-naAHt{qUo>9bgQ*M7HEC?YR)Z2iO!Xx zP`f3aTc7?eOGECMB$dRHbVL<*Tv8xi&kxJwh92qI^#ksxz*QBgvfIRaL^yXNppEfx zgwep&HMcBPm(+RgWh=TG*l>fRq$|E6Uxn+_-)O4E(YWtPuOGvpT~}IGX~GWzN|fXj zdjUN;>L!8Sh$T+pEE?v+>?jk`f2shTKF))Z`R z$C6qjMn8o~wP;_wNTZvC9(tuHmgsoak^ZhV1ghE(JT~dv+0)!08&!R!teabH_}Bcy zUS|a}lA#tdv?-LLY8722SYqNNdT&a^vJAmumy3>K`FY~U(i5zi67Z;oJ(5DVDuwoS zAjNPTU63X140_I|NC~?Nin-#5Vg*_|7!=lU{3gF`2K86M2$Gas~Nbw=tnCFA>>9jCcO(VUCmCNb;BX13J#Vn+k(s{FDZkq)%cd&ki zUl!6Y`H1fL&HL98XAaLMnVXoMru4FDnnk;yVQ!g*S)p_W1I_f3Sxl!*W9=FSm$Lsw z#NH2EdHk>E_3o0+jk)D=GCzYqC?m6U)-020vViGDJZD%`12)|2C+G=HZJMoZZz;qu z_ptLeo-5`aYsQ)^rZdpvhjbRPl2b|NSU_7IT`g^~v~%N%wbI_djsoMlM5!P;s9k9b-@-7T+jxizBta#uTKO>x zoZ~tJkC}e1R2YIbZ#L(=>u-!<4|me_UyZjUOJ?dI4n nz5zCS$A#9m5iHn7h{TTKYi9>Gs;RftPGcqeKQDM8%O(B+yhM47 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..7f420f310 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-23 06:23+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "Дагы мүмкүнчүлүктөр" + +msgid "Flat Pages" +msgstr "Туруктуу барактар" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Мисалы: “/about/contact/”. Башында жана аягында бөлчөк бар экендигин " +"текшериңиз." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Бул маани жалаң арип, сан, чекит, астсызык, сызык, бөлчөк же тилда камтый " +"алат." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Мисалы: “/about/contact”. Башында бөлчөк бар экендигин текшериңиз." + +msgid "URL is missing a leading slash." +msgstr "URL башында бөлчөгү жок." + +msgid "URL is missing a trailing slash." +msgstr "URL аягында бөлчөгү жок." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(url)s URLдүү барак %(site)sсайтында мурдатан эле бар." + +msgid "title" +msgstr "наам" + +msgid "content" +msgstr "мазмун" + +msgid "enable comments" +msgstr "пикирлерди күйгүзүү" + +msgid "template name" +msgstr "калып аты" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Мисалы: “flatpages/contact_page.html”. Эгер бул көрсөтүлбөсө, систем " +"“flatpages/default.html” колдоно берет." + +msgid "registration required" +msgstr "катталуу талап кылынат." + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Эгер бул тандалса жалаң гана катталып кирген колдонуучулар бул баракты көрө " +"алышат." + +msgid "sites" +msgstr "сайттар" + +msgid "flat page" +msgstr "туруктуу барак" + +msgid "flat pages" +msgstr "туруктуу барактар" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..13675686c126c99825c4b9359ff7d83c6cb51745 GIT binary patch literal 502 zcmYL`&rSj{5XRSkmpyv+P;U_IZkM270b@i+Fc6U}-V0lnlG1M4uHb`s^Vxg|pTJo_ z_|jiGlYBFswm+BWUmoZbxB_l~3!nuQ8Ubg(8}NPNd6Rwq3o)#Niu$c4xAV!}WR{xT3F^^Gz_*t8jO-|4r_j zgmM~|{b7IDJ-$H{5Wl09;|gZ`%;1uaZ(Nv3CR7v67R*@g+LO448%JMp)|?yMRWqFk tl~UB03U?TmB02R(GB-@(o;E8>k;=BIZC9IU7q&|ZUAIwGZu(yFL4SDKjvxR4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..cbacfeefe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,77 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/django/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe4c1e43a4b1555a9fbf342d47138a3b5d940f03 GIT binary patch literal 2506 zcma)-&u<$=6vqcBzs&DaP$fV-klG|_)<4n;+HKteZG!?$iBcCXAT;()*5losF*CDH zT=j;yAaO($5(jdw)E;_8IoStp^auwekT`JX58ylNb(}W*T6z81nVt9M{hGJG96azf z!*vMv%ecSC{R-}nAHW~3AHiqAyI>Ri4SXM@2N}!26s&+hgCY1k_^yBd5OjcD5I;7? z->cvcAc22?kAjs0j6DM$1Rn=q2fe;U@CEQq@L_NjdA@e?2_`gPXe-Of2^F zd3k!%{5xf*Zl+|@c-Io@$|Ra)hVAe$ROPE(f; z1aV3QkEDvprrdU`|0rGiTk)wdR}neGWxA_L*uAl?`%T zX-Qf&=csS=Kt>{3#3Za8S|>8vlxa%26*M@k(mazw|`Av#PzX8NtmvWQR zk$L+o4rDq*TYThytm+8OBa5Y9oT} zvbo z!V*k%GL3v-udZM6Hv&ePwAKfGUn2Ltzc)Ws<}DJ+F`)_|!AcZ-2$vugQqg3wU2New!Bl*)0P&QjwPUB6C~_jNi$jm83Be_ZwRRv4w>TGVGrpOO zx785G1$u|q{L)x#aw%~UTIiid`ms-)=2T~(6H*`6c~#XJ@FYoE2JvhCi}>E07E z&Z(VSQbOfMM?=&gjyTSi$T$vA9%=h8J#LM|Y3pD|j;ij%A~;t}p|Z<4iw;jbLJ!Gz z+upRjm1~9wS&!!=;%nGB*FDZAmi75~XP6;79NkwYa2MySm#cX64Vsy8+F`Bqj*o7j z_aJYuWxPGQT`C^kuCnoW5*MthR@3Q4kD0nIr^%2 z?DMwac_K4EKTRXvAmTM{+SAlvV$aJeyPRvplb1vk_mqe8#egy^v#NV~Cab5SUWB)~ zjD11z;J?-~!}DKwsQiHd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..16e75aa02 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kostas , 2011 +# Matas Dailyda , 2015,2019 +# Simonas Kazlauskas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 10:34+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Advanced options" +msgstr "Sudėtingesni nustatymai" + +msgid "Flat Pages" +msgstr "Paprasti puslapiai" + +msgid "URL" +msgstr "Nuoroda" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Pavyzdžiui: '/about/contact/'. Įsitikink, kad yra pasvirieji brūkšniai " +"pradžioj ir gale." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ši reikšmė gali būti sudaryta tik iš raidžių, skaičių, pabraukimų, brūkšnių " +"ir/arba pasvirų brūkšnių." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" +"Pavizdys: '/apie/kontaktai'. Įsitikinkite kad pradžioje būtų pasvirasis " +"brūkšnys." + +msgid "URL is missing a leading slash." +msgstr "Nuorodos pradžioje trūksta pasvirojo brūkšnio." + +msgid "URL is missing a trailing slash." +msgstr "Nuorodos pabaigoje trūksta pasvirojo brūkšnio." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Paprastas puslapis su adresu %(url)s %(site)s puslapyje jau egzistuoja" + +msgid "title" +msgstr "pavadinimas" + +msgid "content" +msgstr "turinys" + +msgid "enable comments" +msgstr "įjungti komentavimą" + +msgid "template name" +msgstr "šablono vardas" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Pavyzdžiui: 'flatpages/contact_page.html'. Jeigu bus nenurodytas, sistema " +"naudos 'flatpages/default.html'." + +msgid "registration required" +msgstr "registracija privaloma" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Jeigu pažymėta, tik prisijungę vartotojai galės matyti šį puslapį." + +msgid "sites" +msgstr "tinklalapiai" + +msgid "flat page" +msgstr "paprastas puslapis" + +msgid "flat pages" +msgstr "paprasti puslapiai" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d7ce9c2a4a6f58557191487871add5204f8d7b6c GIT binary patch literal 2359 zcmb7_O^X~w7{^PE8pqc}1p^VEfC*XLo|h;jPTa((iL7LkCE4VpgqrEvncAtYYOAVy zcXP`60lX}Nf`UQtvR}YMz)SC4LGU1mEO_&-=*9ojvzyr@Bx1AOzpC!4r~c2&Jp1eZ zJ)a3&FW^3i`xfq(aew#_9=Lu0p96mcFM?a(8SvP{LM($3Y=D1&UGPuveg6IkY=GB6 z{E46Ocm@0gB=8^baq!?CA)Wq6!mQ|4T?R`v$ zA$S1%2>b-};BVmb;AI?k3LJo!!EZs<|2N3`{9YjrfhEW~KL@c@d4G$%)j zLg5ufM?+aEGD@b}4oKRRqL^?_ZG*LqJ1s048FM*MVMo+8o;8Ot zGqt(dMT$cmNC&%h_Q~Ejmv@M}_ZYQtdenqfl3o? zS&9#1RXs(rXX@CNS}oVAYY)W&yH!e4D9VZusZI(uk8PLR9vO)={` zuP{mLj7;yOh9EU+lX8--TsqG;!bX`6q0Z*rX}IV6ow;rbR-|kc%GNIQU6x@Q1c#W| ziODDkuLcO1mt1t@)yIYQDis{FAdsURdlXrjDG_xvO3Zt=r1~+LO_Qr|3A?(KE=fCZ zjY}$bJ|=Tvpwr}?Vi1xA*QLh%#pIGIH7`xxgS9RlYj@sEI-R6_oZ82`o#U^yaW&4% z5R(NjEy^uA-=zzMF|*-OOGk$> z=G|6nd3m`B&uq|(YNd%Vw8lbrV79lnOxc=h%+1c7ow(F#wj1w`(2*m=!}g(>PKQoYo3NY?&0uhvI+z@rI@u8OGDqnY0d1qNmt+w0 zT4mL`=Xl(wam-h1-e}d=R;#GFAV-o^Ky7HGNkz9*Y~IuqsjV zWwn8rqEsJrP~8Il=Q+E~7k68qG>7dLcvrXiKvI+eWm=MTzFJEm5`G0#cC`*4;BIu` zKibSyt?US~*}Pe;1u`;6GC3!y|8^d#f;Y6F>J zT~UvurW~<1)%t*=t#BY~jMdtbo<@7|)q3C+qw3b?MuZh?fFwj_^J@%Cq&QX^J;|n* zpjXC%y9nFu6+RX?rLS}8d5{-&RKI~ob^4Iu45y?nD_9hlz^>>ckR{BFTM}ZJ^_*&5k2G@Jn-KLP2!wAt0mvA_zx%~bLcFTJ o;eJ)Eak-Q089k`hV!alz4+4?u8D}L5A;, 2011 +# NullIsNot0 , 2019 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-07 07:17+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Advanced options" +msgstr "Papildus opcijas" + +msgid "Flat Pages" +msgstr "Vienkāršās lapas" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Piemēram: “/about/contact/”. Pārliecinieties, ka esat ievietojuši sākuma un " +"beigu slīpsvītras." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Šai vērtība ir jāsatur tikai burtus, ciparus, punktus, pasvītrojumi, " +"domuzīmes, slīpsvītras vai tildes simboli." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Piemēram: “/about/contact”. Pārliecinieties, ka esat ievietojuši sākuma " +"slīpsvītru." + +msgid "URL is missing a leading slash." +msgstr "URL trūkst sākuma slīpsvītra." + +msgid "URL is missing a trailing slash." +msgstr "URL trūkst beigu slīpsvītra." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Vienkāršā lapa ar url %(url)s jau eksistē vietnei %(site)s" + +msgid "title" +msgstr "virsraksts" + +msgid "content" +msgstr "saturs" + +msgid "enable comments" +msgstr "ieslēgt komentārus" + +msgid "template name" +msgstr "šablona nosaukums" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Piemēram: “flatpages/contact_page.html”. Ja tas nav norādīts, sistēma lietos " +"“flatpages/default.html”." + +msgid "registration required" +msgstr "reģistrācija obligāta" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ja šis ir atzīmēts, tikai pieslēgušies lietotāji, varēs piekļūt šai lapu." + +msgid "sites" +msgstr "vietnes" + +msgid "flat page" +msgstr "vienkārša lapa" + +msgid "flat pages" +msgstr "vienkāršas lapas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68d4a8bdf256d4432b47e6041e9cfa29cb63d6b8 GIT binary patch literal 2699 zcmb7EOOF&)6fPA++ZRGi)c82Wz|4fHehd(>aC{*cA`>R0VP%3fUAMc7u18zfC$JIp6ut zsk*mg%eMxuow#4Yy^8x)+$SEvAFiK(+ktn19|3;_`oPy7HH;kaOP~e(4)`JO13w17 z{Fq_jXUya8b>L?}0$u@b18xAH1O5zr68IaCyM}F`;bJzJ`KDA`~}E`R-Z^~{Tp}^_I4y^`~=8#c7SgH?*cjg z9|PP5a+9zpfX@QY0ABnYr<*N)BAR1f1lr)>un;ZWFAZWu`8=z{GxJz>#U!JZ3Ss!$07Wmi;TEKf6b zLy&Amf>cO#yDi8Qw&MmhvIB=yWV;?4(z9h<$ovDbs-CTyc1_4E+*!8rb>(}Ad%Q}j z?n-iHFs7&(g>Ban&LkF*Zc!@X)4c0>)RKb6hM^o$wOgJVL@|yb2hDO4{m2R6rs~v+ zJlZ{u{|QO97lHC3i3L|GN!2hS=_-MJh6!m5xlpApDh=il2HqlhVXY<{(+!wLBvVFn zg6ug@>(O?_yk@K`Gs;|0+xA+5{FYRtWrTAYODKgHlN7Z4IsM>-3T7*CU{%6Mz;LvR zlbM_Zs><~o7WVY16MRE3@?9x)2R3`5<=1CM_ecAaH<*zKlpz9LLM8Nln9^W@iHjIM zNh1<92o~8qBov8HTW%yAgEf-|`qPAupuqNppSxUiHb6hJLVab1TTx6b9PV* zbEiZzjFdSeYp!Fy->ONo99oo{Jy|x7pgEku`~cxBnktqKn5Cjwe3MECt^HGbi&MoS z4w|P#+vS+Ua|dzAoZ3gFL)L-)dyBYoCv2(Aa%2Y(M1_$>XKd+u_z!Br3)`~c(pzmz ze`dW~^D)4A=Jrj);n5*%Z(wVg z*ARh2QgSg_;y~CWPynu_{+wvIcn9VeahLOJ*X8^}EQjBY27lEW*|&q@uh@ZOBkN6m zTH$AAmNMyMp)<);d%FHE>w(Q zvJP4)y}lNp!=>vsB$tsKi8S-ghG`+PVg>@G!-J~1&!7ND)_GlzSBK>w5QM~<--sR^ zNOoqYF$q-bgN>fR(s6N%0N1_K|o^TdPR7p30xj7LE+2 zj1Q-Shu#b}F=MO)X-U>Wpa)jpAoHmHgK=X?MmOM>4KLGAJJLa4E^uXdjj)tXE>Cwh z?%DYM|9I##Yn5C=i4Vr(!O`P#3k6}z(5m+_7iotuBK+2}ruxl=W<5iX&v0USf<`;^ z@QMGLX|9mR9Li`;JYj6zOkW#3cX;@DG7v7CQ0|=psvwlU_^7CZ2, 2011 +# Vasil Vangelovski , 2016 +# Vasil Vangelovski , 2014 +# Vasil Vangelovski , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Advanced options" +msgstr "Напредни можности" + +msgid "Flat Pages" +msgstr "Статични страници" + +msgid "URL" +msgstr "Веб адреса" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"На пр. „/за_сајтот/контакт/“. Осигурајте се дека имате коса црта и на крајот " +"и на почетокот." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Оваа вредност смее да има само букви, бројки, долни црти, црти, коси црти " +"или тилди." + +msgid "URL is missing a leading slash." +msgstr "На веб адресата и недостасува почетна црта." + +msgid "URL is missing a trailing slash." +msgstr "На веб адресата и недостасува завршна црта." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Статична страница со веб адреса %(url)s веќе постои за сајтот %(site)s" + +msgid "title" +msgstr "наслов" + +msgid "content" +msgstr "содржина" + +msgid "enable comments" +msgstr "овозможи коментари" + +msgid "template name" +msgstr "име на шаблон" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"На пр. „flatpages/kontakt.html'. Ако не го внесете ова, системот ќе користи " +"„flatpages/default.html“." + +msgid "registration required" +msgstr "потребна е регистрација" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ако ова е штиклирано, само најавените корисници ќе можат да ја гледаат оваа " +"страница." + +msgid "sites" +msgstr "сајтови" + +msgid "flat page" +msgstr "статична страница" + +msgid "flat pages" +msgstr "статични страници" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4cf1e3a06cccbf2e6962ec1a23f38993496fc45 GIT binary patch literal 3549 zcmcIm%WoA`7(Xh$u5Z-DM2yEo0u7ye+o}n~xqY~* zjRMBhg{Cnmh7gD$7x6g=_#*H@;LAYLw;lL2a1?kia3AmypvvbO7=p_@ za2V^q;m~#9#`}awfqw#j0e%Z3TY!fi5aKIf3Z(UM7#o4S17pO`JY@Zu%kdB3vskY^ zEW|G0hro@%8^A%}P2dh-A4oj|41vVsKtBHw2=(k6fVn>bT#uLhBVWlcgp1<Pj6G|_>pYf2aIpzk*7+_pm2 z(W_x9a82Eq$K0d&=v_GHB0hqe40B2Z3y8 zMJ{#}dTPpT1g5P^jKG#0Cu2M$Ll8AJ*+>GpaWj7Vv~+_6?$1j#=WC zJ}o+oWTmDm)5Il?f_WLl)vEFwKO!oLwyY+VbSDFj?ToKxnKgSTCdjQBH)tpsHnfqP z6bM^g${6VAmr)~}TmIO48mvyXZyOWaw+n*<785 zHT%7}E(&6#A|q79E>z+$#8e9ku_PxtBP|kDMZgl5icTi#y@sDCPf*OXK#uB=Q8IEv zC5&$ZCB~C@zp5B#)N|f}OOPr{Z@(K=8kHJZ#1gfnTX4>FuvQ_qh@?M z>bwbUWjQo3G~f)p;takdhX%_-Lt6&$6n44VI1`B*q1;TIl;zuruWSCa(lz;NjmO35 z$=9kOD!T}$wnHMSHsFslq1>>HjtJa&yrJA&Gp1fHm1bvWi|{Sd{*;;{nUba2f*@B= z3WHK#VQh44XUD0*;y_`CjifU%Uk7cY=1d6z@uO`hAve*=4DX#7akh5Ok*z6}I6I?C zOubl^TPJ4&x!q)q|0(s z=a$Rw^3JunsR$AWEoY1nR>a#T0kJ>R$^cfdju5u0BG1gy%ED4Vt*aP& zpSDW?6GZ+{mbPSx2Gwx;X74#oS3Xz41vYg7lUozug0l9B48qA3Or^yG^01xUCD9%F zqisha_$3D$5kOqf1}Jz+3xbV3gvOG^9w;Bc5;i$h%_WCbQi9h6E*=!!f>LI*nk&a);H7KF4xf5Hqu$nSAGD1n>x&m3Qd33MMGj0p0wuOY> zYg9i7)M<7W&LJiFRYE(E!K|kva~UXXhY}Z*?IavWBzjdGTXivz+Esm*8^i{*+Wti- zY%8oOe0GP^)x4Ue$J%ru-Kj7RL=#K54k^q~x$&igyAlcQZi2kbIE?wnna?9#aE&sK zXhAs7Gi$ln6(uT@+ubpp;>lIn2;(knvd(r)m-rupRdzeY$HjxX{y*$?_ga=B)UDv8 zi-J@19f!<*eNap&L)<5=l1eFjw*2oL=4B|eeSCp+ARsovJr@bJ=|7+13Tjz~1Xvwm zlD5+D0fK5Y9eTokE^~&s3OR_h4IgZ^P!6D@_llx~BM$U|wV$(A$B-zB6q;KOtjV$M VUg~*BU!-q3aj_Qw=%8~K#ow$N1ZMyM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..4d5fd1079 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aby Thomas , 2014 +# Hrishikesh , 2019-2020 +# Jannis Leidel , 2011 +# Rajeesh Nair , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-13 21:22+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "സങ്കീർണ്ണമായ ഓപ്ഷനുകൾ" + +msgid "Flat Pages" +msgstr "ഫ്ലാറ്റ് പേജുകൾ" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"ഉദാഹരണം: “/about/contact/”. തുടക്കത്തിലും അവസാനവും സ്ലാഷുകൾ ഉണ്ടെന്ന് ഉറപ്പുവരുത്തുക." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"ഇതിൽ അക്ഷരങ്ങൾ, നമ്പറുകൾ, കുത്തുകൾ, അണ്ടർസ്കോറുകൾ, ഡാഷുകൾ, സ്ലാഷുകൾ അതുമല്ലെങ്കിൽ ടിൽഡുകൾ " +"എന്നിവ മാത്രമേ അനുവദിക്കുള്ളൂ." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "ഉദാഹരണം: “/about/contact”. തുടക്കത്തിൽ ഒരു സ്ലാഷ് ഉണ്ടെന്ന് ഉറപ്പുവരുത്തുക." + +msgid "URL is missing a leading slash." +msgstr "URLന്റെ മുന്‍വശത്ത് ഒരു സ്ലാഷിന്റെ കുറവുണ്ട്." + +msgid "URL is missing a trailing slash." +msgstr "URLന്റെ പിന്‍വശത്ത് ഒരു സ്ലാഷിന്റെ കുറവുണ്ട്." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(site)s എന്ന സൈറ്റിനു %(url)s എന്ന url ഉള്ള ഫ്ലാറ്റ്പേജ് നിലവിലുണ്ട്" + +msgid "title" +msgstr "ശീര്‍ഷകം" + +msgid "content" +msgstr "ഉള്ളടക്കം" + +msgid "enable comments" +msgstr "അഭിപ്രായങ്ങള്‍ അനുവദിക്കുക" + +msgid "template name" +msgstr "ടെമ്പ്ലേറ്റിന്റെ പേര്" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"ഉദാ: 'flatpages/contact_page.html'. ഇതു നല്കിയില്ലെങ്കില്‍, പകരമായി 'flatpages/" +"default.html' ആയിരിക്കും ഉപയോഗിക്കുക." + +msgid "registration required" +msgstr "രജിസ്ട്രേഷന്‍ ആവശ്യമാണ്" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "ഇതു ടിക് ചെയ്താല്‍ പിന്നെ ലോഗ്-ഇന്‍ ചെയ്ത യൂസര്‍ക്കു മാത്രമേ ഈ പേജ് കാണാന്‍ കഴിയൂ." + +msgid "sites" +msgstr "സൈറ്റുകൾ" + +msgid "flat page" +msgstr "ഫ്ളാറ്റ് പേജ്" + +msgid "flat pages" +msgstr "ഫ്ളാറ്റ് പേജുകള്‍" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a9c8f099478391486597c897395cefe9f47bc1b9 GIT binary patch literal 2776 zcmd5+NpBoQ7%d<`81?`P2O>T|$hP91#R?&r-~(iVKrE~<;ee1(d%8T+NiRcJwHI-* z9XUaY3>-p!0XgJA;$%#0%gX`80dc8zZX7s(IPfocU-ft#XAvA}P0y?KtM}gbb^X3; z$F~B{^LSsvyNY)Y-cKLEA07jI2ABZ{fqwu$0Mdg(gunn;0R9H70{;TO%kvK*2Cxal zPyCF(mw~?k3HUegQD9+*5KjYl0Urat3gmeGz!!jT0v`qr0iOhZ)akpxFTkY%+=uZ$ zv1lCl;v+eJ1H6p>P8{+a@G7td{1JEwxO=A%Ec_~v`5nRGtnWSGTflR`r+_~J-v@30 zUjyy|xxK)*f%}0Wkk@?&+zo64p8);}1U;(_V7WgF+=UlYRx6(iyQ~iYtCR6@yqphy zI5t0!*?mCSp22xxZJQ4ygP1qwMs?{?+|qs=DRFed4O@Y%QcuYpiBnyw$B}mHx~E7( z?ioocO(f}brwnBMw)J+53i6V~S z3>xM`Y?BYbHr=E&3F!4+{P!txg9LgfNly4mD;kXxQofd$XXsO6iwo78vVMkn#8EIw zLELCa&+#Lsk*J)}2pk*BN=HSBP*dE zhatL3u))M4wpvOgvH`;qmrINi`FZLm(i7~N639;rdn83}D24WQAjNPJpO$s)9QT}$ zAql&xOTV?M{+wr;?w9HjCT-S81n~xDgE0aZ;sE;>2%YIBKL& z=hUPdR%s{(r@(h3>TPP>s+LOQW|qt{ zWz%NetYL5+!!z00?5tT3=8{>;zT{PRT^#)Bo6EPZWHV+3|FdMSW7AjJSu%@e-mK;@ zj|r@pM-W8B7+?z1^Vu{ups~ygx{Pq}oLMgZKhE8{Q#yC$w(H4U?$~&P*gq?H;~E+( z1QX}s@OezI(b=qN^9&1yx$N{(HVs#Pz^41%T#gOezRerXmRZZ@;Lb%Dx5iU8OKhe9 zoo)xKE?^epUz>LKlIz}PL}r0gnoXgBNH^@#Dcio;$qFiAz9=@Xg10RX#L3QMZJX20 zd+t-Ezj@R|GVDzyAX0iU;>JgI=4VUjM)ZAD$ zW(giF-IHIDy4SBw9OQD|^H0m()p?b)37WV#W~}zLZFckJ+}Uld;IdlFZ~A}TEkNC> zf^R54k%wnJa2Z@?Fw37jGLIpob){1T{Ncipd%BIwAe$ApuHgGdIrDeUcSEO|x0T<2 zSc9C|3Kix$@&gCDjP6$-@M3|fE^@kaMX0aMD16JbxeyWS0({~{*_2@QmhF;hi+=#} CEvI|{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..1dedfe1ec --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Zorig, 2014,2016 +# Zorig, 2019 +# Анхбаяр Анхаа , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-19 02:15+0000\n" +"Last-Translator: Zorig\n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Дээд хэрэглээний сонголтууд" + +msgid "Flat Pages" +msgstr "Дан хуудас" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Жишээ: '/about/contact/'. Хөтлөх буюу зам заах ташуу зураас байх хэрэгтэй." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Энэ хэсэгт зөвхөн үсэг, тоо, цэг, доогуур зураас, налуу зураасууд бичих " +"боломжтой. " + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" +"Жишээ: '/about/contact/'. Хөтлөх буюу зам заах ташуу зураас байх хэрэгтэй." + +msgid "URL is missing a leading slash." +msgstr "URL ийн эхний slash ийг мартсан байна." + +msgid "URL is missing a trailing slash." +msgstr "URL ийн арийн slash ийг мартсан байна" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Хуудасны хаяг %(url)s %(site)s дээр давхардаж байна." + +msgid "title" +msgstr "гарчиг" + +msgid "content" +msgstr "агуулга" + +msgid "enable comments" +msgstr "санал сэтгэгдэл үлдээх боломжтой болгох" + +msgid "template name" +msgstr "загварын нэр" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Жишээ: 'flatpages/contact_page.html'. Хэрэв ийм зүйл гарч ирэхгүй бол систем " +"'flatpages/default.html'-ийг хэрэглэнэ." + +msgid "registration required" +msgstr "бүртгэгдсэн хэрэглэгчид үзнэ" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Үүнийг чагтлавал зөвхөн сайтад нэвтэрсэн хэрэглэгч сайтыг харах боломжтой " +"болно." + +msgid "sites" +msgstr "сайтууд" + +msgid "flat page" +msgstr "өөрчлөлтгүй хуудас" + +msgid "flat pages" +msgstr "өөрчлөлтгүй хуудаснууд" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7d4393d635ec976459a46c633ce748198e214420 GIT binary patch literal 468 zcmZutK~KUk7{%ymN6#KU6AuvVx`CQe#267042y(J?{zDqWNVkU2>uW+{y2Y&-@xF- zm%OxJ`uh4_zfVs-8;B$18S(;ojJ!nFh>%}+*u%Bf956F_B~nKw8F>}PO05`VE3R_w z%|)e+BeBh8MjqC=C5dL>&7Ko7G=e+Sl1J_YgH8}$lb}n&2!b99Z`wf^1SlkP@h)r6 ze{>P+UbO>+H|5rm#BgN`?zCa>#Fdg3rb1?-fLlz1<9)FkeW@1u4)3UZ&2vE#!Ak}) zH{2~HG?&g*jMB|!m#Poxk{c`B;3XN8=ucO_w-APmRH`$nat6_xbcd)6O5@Fnwc!OBYg1YV Ws@jcq(CNc|J7_96A3)gZdyOA7$cd`} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 000000000..f2bed7f33 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,74 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7af7bbd0914f37534e7d5134cc5ee98c79cdae0d GIT binary patch literal 2184 zcmaKs%WfP+6ov~3x8WWx3lx;2kVuJePumut&{iUGNr+LLSjJ%iNYR<8n(p#+S2uN; z@vw?`2Np>1COiO3kdT4|%ED{*EZFc@&DawMNUOWQs_v>&|G8A%J9*+;f$J4Kr||rU z=M6kxK7tpnpTQTwU%;E-0r)<+{-_XB(1ShjPp|<00zZ!bAA=3>YY?}%i`QxJcaXrp z!6(5}CxmzbJPSSzz70lum%&%TP4IE>HuxN<7JUcafR-8fJih;gL2=!?VAOH?3H$>; z2cz9z!42>p_yzbn7H4n*Mt#45Z-Re-XF>7QeBL=Q+RqpL%L`ruU&Hqu@EK5p&w>Gr zdcOf7FZl)}?Jt2R@kIZkrZ^7aN^yW2DF;B(6B(~)GhR`{;RVxa&6t;$4?lu%4at!c zHbW(;?YwS{6Ib@R>1tKb!JY4O9<;&d!`65n`uyO|4}IF=u_70&BHvQQ6GgRRsZB|2 zBzeoajvZICtCZ_M#NPjy<0FH~#&HXyntjKma)+XB$6mkkO`Xhbj>uQqk#^?b&UcY7Or9r7i9BO}LOI*cTv>g{q&A1Sz`ig?B>D+m|FF4}b z!u=VkeeJxXQESO*ukb(Of)h(cG_2Hc9JREjo>ASFrIML8QHphQRRcvls8ehwT1}Jc zp8(Hpi_p(9g9Rt{4`km_|UW0G#| zT#paJMvZnZW%I!_{OkYmT=zv(q>LBJBo~Hl)1d1_3^7F~mMtf&DiJWtvFOOEuY$Hp ziWoB|kfRQB6d7)m@Y>f(Y} zdfPX%9W~K$X!a4T6|}y(zLu@wewWtPi+A38YZX`TIy;~3S~e&*-`avc;gOxuHSH>H z@Yj?9+Ou87O@ZpKc}C|e@4F(;r_*U4J{YG*YQGPM^SPu$)Qib^0Ca=OEm{R9w z`q%`{>oJD2WOB$3{34zr76w&?&*Mr%TK{2o9&YBosZAI&>Vk6{une2q3n6J^!pf&= z92c80X`@lWlE)-9bVFf->PA^%k8_lZ`YX#|Qv1xYogR?ug+Z}}1u3qWTCqVA6EXk( zjqZZvil$*NNE&dd5xNFLj`sO+SyFo(hrEIlGAivBLTDBvhn=4_?82BFSG>n_v64IN zlSakFcv?6gee8=Hnrofhotqo9wW^YLSR_D86>Jz`_qWZUwK(fE(zQY*TkWy|5>+8C zkbsz!v9(B`=P*A3mIuH*oDD_<=+?`zDcNb#sB~S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..4315687b0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-11-16 12:59+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "Pilihan lanjut" + +msgid "Flat Pages" +msgstr "Muka rata" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Contoh: \"/berkenaan/hubungi/\". Pastikan ada sempang awalan dan akhiran." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Niali ini hanya boleh mengandugi huruf, nombor, titik, garis-bawah, " +"sengkang, sempang atau tilde." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Contoh: \"/berkenaan/hubungi\". Pastikan ada sempang awalan." + +msgid "URL is missing a leading slash." +msgstr "URL tidak mempunyai sempang awalan." + +msgid "URL is missing a trailing slash." +msgstr "URL tidak mempunyai sempang akhiran." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Mukarata dengan url %(url)s sudah wujud bagi laman %(site)s" + +msgid "title" +msgstr "tajuk" + +msgid "content" +msgstr "kandungan" + +msgid "enable comments" +msgstr "hidupkan komen" + +msgid "template name" +msgstr "nama templat" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Contoh: \"mukarata/ruangan_hubungi.html\". Sekiranya ini tidak diberikam, " +"sistem akan menggunakan \"flatpages/defulat.html\"." + +msgid "registration required" +msgstr "Pendaftaran diperlukan" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Sekiranya ini ditanda, hanya pengguna yang log-masuk sahaja akan dapat " +"melihat ruangan ini." + +msgid "sites" +msgstr "laman-laman" + +msgid "flat page" +msgstr "muka rata" + +msgid "flat pages" +msgstr "muka rata" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a959d4ced3dd5613a8cae56b00ad4e73be6278ea GIT binary patch literal 507 zcmYL^Jx{|h5Qf9ok`alG!6T@+aVkDtico<{MXe}R%5Iu#aFy7R?b3GZKVV{EV`pII z#~^j!e{d-uedWjJlioYueQvHld#F`p8`(oPkW-{k2U$aIk*5{U>tWnNzVMCbUq$^w zy>83v7(Il(qs^G!fw596PU4|ZiT1mYYvX9!CNie=QDSMNIq^F;5xp=V9D3=caKK50 zg$Fcbl%0_9i0@ZQtil)?X%`-4(R1lLLK6+qcgXiyiJ|$jWjtL64#nfVu5IZ!y&G{^NEOk9wsLaHk1KL}&N)p}8b9xr{xUjs1o zO7(RtRl>>fy>$O$a*|E`PC7Cor44N|%ZbVtsjY=o^7E{*s_)HbFZ0>^eD*q@y)AA` GKfG@@=9i8D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.po new file mode 100644 index 000000000..e46bfbe04 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,77 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "ယူအာအယ်" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4383609388ad3eaaa5c3f525bf53b7f80f3be889 GIT binary patch literal 2208 zcmb7^OK%)S5XTz`ujL&;T!JVJNU`wj+A9vx21hu=4i0f*MGhyVsCTD!w>>@GOLxz% zjX31Qfg1-7k>Hqb!7X0^P8^UpSRA<^A#va#{x$3M+TkHFnweksOn3Fas=Dik)2F^r zxL&|>2G7@cUdHp`19;*327DI$7Q7A~fNNm;L8T^O0vq5@U~jR9|g~xQtBD-b?|ZUEl})T0AB<*!H2*aw zFM^jJQObayfnxU;@B;YfAy=_@LjM!+3Giod0sI4e4W!4W`YwT|(Z34fR=4mHdqePf zFo2@>QxH?t=OC6)cRqEkG1P@PJWb(cTuhH>2hSbLkG9NZ0WAAQmf}((!JC=xcya=wsgT1tH6{z z4fUAGvd)bgkajtxppBJIv^owsHvhxkznIfU25TE9E%dEUBR$|a6Lm{^&0#8SZEmwq zX=oyu=nih*Ni+(6Y;w+*@ENlAW8#t~##*W(i;HuEIrnvC(~&K;fwgE`7OR`G5T>Rf zRl(95XYpQ)q-}uv`^0-DrbvAsD4N9hFIbFfu84X=?iHfNJG)QT4+flP#)*^=r>eS4 zx@+s$jtx(0)wPFeN8B1~TQQYYOjIWYlc%;gCD>RZSC!qmk^6*h<#P0TJ}^3Yosp$k zY6w!3vAHDa=8dcJAZ%2c80&1_pN7BvKbh;M5=HEiVpqG+^JR%{R1#tmC+4lF0uKoh;EyU3I9C$0sF0%(<}f*3vPvddR@=evaxZ0@dG-NZ!mJMEyV?zW;|7m>NZD2# zm^`~!4Pv(AJJi^|p55TFk)hcoSnE)GxxJh%uVn2NT4{Gy+HWr7YFyPZWjjGTY`5e? zhps@;+q>SqQ+Vs0(YERQ1q^e83QlA@tji8v^I-xPw4;l@DDU01bat51sMBgqCX*%{ zbJ6s9uZbwMraEV^hlX0N+gfaFZEmg4Jz8llH{P9wG27W6L3850)Iv0jJCFUNL*%r2 zb7vzvHy)tL^hNZLXem^y(_D zES_(uHB3uYVx0VAT)j20Ziyg%x z+`Ee`b0G%HT2!K7;yh&VaaIWW2o_5{KomIV!%Bd4=cVA75{M|m zend7&kC&)GY>LWBz^7$_>&0P-P^M&Y*Ho9}kW-&+!mML6c<6D8sq2fFP>(}h1xjHo zkUUO2aI;b%xsX3ygUV26W;$+`C&^o#$GS3vrn-hjb&mQGxvmf;cCX}Fl)_C|IhN(R zkkD+19!Fb2^8I5lRTSf3Td54iv`*-N082K++oMKMMPT@Z5>eL+4%myzK@=*vq@>i= M>9Lb4k=Uxg04PqBlK=n! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..b6eba0131 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2015 +# Jon , 2019-2020 +# Jon , 2011-2012 +# Sigurd Gartmann , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 12:12+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Avanserte innstillinger" + +msgid "Flat Pages" +msgstr "Flatsider" + +msgid "URL" +msgstr "Nettadresse" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Eksempel: \"/om/kontakt/\". Kontroller at det er en skråstrek foran og bak." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Dette feltet kan kun inneholde bokstaver, nummer, skilletegn, understreker, " +"bindestreker, skråstreker eller tilder." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Eksempel: \"/om/kontakt\". Kontroller at det er en skråstrek foran." + +msgid "URL is missing a leading slash." +msgstr "URL mangler innledende skråstrek." + +msgid "URL is missing a trailing slash." +msgstr "URL mangler avsluttende skråstrek." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flatside med URL-en %(url)s finnes allerede for siden %(site)s" + +msgid "title" +msgstr "tittel" + +msgid "content" +msgstr "innhold" + +msgid "enable comments" +msgstr "tillat kommentarer" + +msgid "template name" +msgstr "malnavn" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Eksempel: \"flatpages/contact_page.html\". Hvis denne ikke er gitt, vil " +"\"flatpages/default.html\" bli brukt." + +msgid "registration required" +msgstr "krever registrering" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Hvis denne er krysset av, kan kun innloggede brukere se siden." + +msgid "sites" +msgstr "nettsteder" + +msgid "flat page" +msgstr "flatside" + +msgid "flat pages" +msgstr "flatsider" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e435dd8e049589aa814f9c34bd46bdce6bc8871a GIT binary patch literal 1500 zcmZuwL5mzk6fRBFI4DBElOD>`ChXR9&k{}Sbwpe@5X|bbPI3@0wbPZJj@{K`RrT)X zmM9V=cwEIq6PEOZCE)HN7&jn#79TTVea`G_Acxn*hjGL6NDTBUI#t{ya{{(cnA0*@E-6f;O{`k^T#;0 zz;9p=Vb_tr43Y=HmktNMzktsnegymw_%AR9o(GxZy$YNKeg`}X{0#^yas&p~KTgl& zc@hpN$kQ;V_gR?Rkt}WUa#)Cj&P05zs!i0dq~U!N&9vz<|5#96D?v>~2Yg-7Lhv+~ z8RasiM)ACGfiAcn2;C;VL9XdKFKR){S{v%Aa!D&$TtcfcLg_gw>vGLIX=M=BGDXy{ zlt7Srrnw0vtrRtRkvj5ot7nNL6w(kO`C1{sUzP|pQ6kGV^q9PoREbaOT#1zE+z3sK zz<%5aDtRf0$xR{1imEP(zF}ulb{@mgmC*Dems!2X(I{C*s){PwOn# zhV>MexSpw0LO(W#7t5oVty5-$b9xYMu$!6TD35dt!(NdTe0K zFo~j#jg2<$Aa#C0Y`TUhtTlmR+#N{~9d9k4SzekRpwo_9i{ZemcWH>Qa%}!10+^h>iu_f8B+?SEiQ){_-tTLfev{s5*@q(SMRH=~|`cQZ07ie(1 z$0U8FOFPFGTEsSA*yfIHezDDc+w9xswr#c$QrrCCvtQfh*Z=ugsU0<_`P?=rK=U@r z5bwk8+UCYIHxtdcyia^(M_<}z2l0+=zPF<*Zir8L|Gphv3u7HSvCSS5DBktWXmJi= z4E+=;=ivV6s2#&?7mYl@U7rB)HJ3y2j!!@#R2+DJ%NOpu_uD?P=SLj4M5qY5#%W~T zVz;p4MDaG_psVo&?mhHlBTU0z93cq9ZEyH>-2amo433|$8-kz|sv6G>RiC+~-94Q` zP)>gX1ekZz5Bt`S0RLrVF#wEVYPjG5sF4lxK|Q`14v0cr4D{jM9@>LAx3, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "उदाहरणका लागि: '/about/contact/' । अगाडि र पछाडि '/' राख्न नभुल्नुहोला ।" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "यो मानमा अंक, वर्ण, थोप्लो, अन्डरस्कोर, ड्यास, स्ल्यास र टिल्ड मात्र हुनुपर्दछ ।" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "शीर्षक" + +msgid "content" +msgstr "विषय" + +msgid "enable comments" +msgstr "प्रतिकृयाको लागि मञ्जुरी दिनुहोस" + +msgid "template name" +msgstr "टेम्प्लेटको नाम" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "दर्ता अनिवार्य छ ।" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "साइटहरु" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af4bd8af4294a9f1ada10c20adb38e83d47dc9a9 GIT binary patch literal 2231 zcmaKsO>Z1U5Qdu&LRh{7+=3{+lo&j_wgtl3V2hA18O6l1HaQ@qsCTD4+uok;rMqX> z&MD%;F8~n%H~s*3egvF2Ac5pFHx3|i;jLM(H=8IKP0uqu(_Q^mb#?u5>iE|R*UM<9 z(SAmI747rK@WAy8_yYJVcpW?dFMun@lp2ExY=D1(ZSWuPs{DT(Ho)5;ZuJ`;uYtdV z1pWs;37$T#)brq5;8Wmxpx9dnUjaA3C%{|avmhV#BgoLQ559!&e`3%l;NRdyaQ%c* z75F76_WuRf!IN0@Q}8M{0KWktMIAe-)SKW5@D1=C5L479D6#2)vc3Vu-WZg1zXEZq z@9=mA{1FtrKY@@}j|J+vFM_Ag#6R&>#vxpF9N#Nl2d6#rAwGQt5(4N}l?9 z#AI3L#ucPpPAO<(r4y}=eU8mX*n5aMePpnhhV>NL~^$Em1W(rflpX=`&EJCyn+ zl8Nr%&fP@A;72Csd=Z}^dp{;FX>6>eDzdmZGnn&^u53E8rLJHt+LFcUS6K*CQ=h6} z>Fu+4E=1Bc!2NyVJrh%;9Umx~#P}~*h-#*YdVTH^m;xpI(fY#i_@(k zNKMA(vPn0#uSrALs5CLwyLtaMJn(;hubWB~u}g|w?LyC&CAv{bh)JB7y+swcK)`~Q zq@%!JR3>n)BxX@zkA|4T5{%a+b%%OB9vYWw|_cb9NAuIZSvPS6hNmV9Va z$2-T7K1?;6W%r|^L{>N9&^kuDqJl43hjrPeOI7Oi>1;oxVY}5DkH<~;+BC9H}PI-ArQu$N9yPhIj!C3T*+2v<7BNJ z4%ubb^Ku5;wAwZ4NMxIwZEV>pXq#Q}p^W%2th;e-*E-CGY}@Pdt$n?%k)4YJ!03odxXZjr`5ohpbU7xCq}O&5mN9qdi^5bE6u~_RGH#F-X;2~a9Hv=u zzy4Dq@H`cQ#3%G7DiGX(*&VQJs!MzurAceqwNj%JPYl>;Rp^;rWC=>Zu#zLXNYx$?u3!vNU}3(41^b4m)pQNZVW2>+~lFpW4cN{KoQa#V2_^~dAzYF$e8V5|NI D_-UM= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..2f06f80fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2012 +# Sander Steffann , 2015 +# Tino de Bruijn , 2011 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:52+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Geavanceerde opties" + +msgid "Flat Pages" +msgstr "Platte pagina's" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "Voorbeeld: ‘/about/contact/’. Zorg voor slashes aan het begin en eind." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Deze waarde mag alleen letters, cijfers, punten, liggende streepjes, " +"streepjes, slashes of tildes bevatten." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Voorbeeld: ‘/about/contact’. Zorg voor een slash aan het begin." + +msgid "URL is missing a leading slash." +msgstr "In de URL ontbreekt een beginslash." + +msgid "URL is missing a trailing slash." +msgstr "In de URL ontbreekt een eindslash." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Platte pagina met URL %(url)s bestaat al voor website %(site)s" + +msgid "title" +msgstr "titel" + +msgid "content" +msgstr "inhoud" + +msgid "enable comments" +msgstr "opmerkingen toestaan" + +msgid "template name" +msgstr "sjabloonnaam" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Voorbeeld: ‘flatpages/contact_page.html’. Als dit niet is opgegeven, wordt " +"‘flatpages/default.html’ gebruikt." + +msgid "registration required" +msgstr "registratie vereist" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Als dit is aangevinkt, kunnen alleen aangemelde gebruikers de pagina " +"bekijken." + +msgid "sites" +msgstr "websites" + +msgid "flat page" +msgstr "platte pagina" + +msgid "flat pages" +msgstr "platte pagina's" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a62a709ceee3b4075541ee157704e9cc0beb329f GIT binary patch literal 2256 zcmb`Hzi%8x6vqb$1dg9EAesOV36xlP?`$iDb(WC=vBAPlti(YSNYUKwySw$y&Rk|@ z?|g_N{{dAbK+quNUqBQzC>0%46d(%Mlt>gbeBYeyi-VGi)$M*}ZfD=TU-SKA?$m9C z>m}T0asPn(RotIEf(Ndj!56?^z$@SZcoAHFRH-o-!3Ovz*arUw-la;N##8@L7-#=K<`%mkIa^{{J0|u7Q7n zTi^#zD0LIO4T{~<*lYtl1B(A2gW~^J;M3sTlS*aaYv4I>3&blG!8!0V5I^-f9%Anc z@I~-jQ2hN4l=VM?*i!uj!o3t5kbFM_iY-|$HY6^jD}9GBQVoEVFQHt|Orf4TqyVOq z&r%oh;pmcm)x~_IZI^R$!&o>Q)cU@zhKAd8aO>-q?zlR(y3R)3jje-Q-!y4kmrSAd zOwrLmkC+VWys&-JHmB%yVPq1F4g(I&huC|7Iely}**IyTXLKCuK8GWxZpf@Th?Pm^ zHhUBYMW7a?TgRK-dqZ!X$8$cAHXh+mi1&*S1NEGzP(;Ri!F*6NkElD~ZYjPvYbIn|zt4GASaHRN zsaG8)-7zV*qk_lD>lC5dm9R$I)J#S7Bau+eJZH`&jdB!A9 z6h}kG8 z&wV7!YiT<2e6ub*=Sp%G6lyfYH%wMntYQ%js~zw5xEr(0Jo^YC;j1>~d)oG0<0=oG zkJ)zU7kTz>-4EHWYg1$AN_Le;g)Gf3!CIS^7nhf^CH$6Yaix7>HHwZVY}5DkH<{}WJA&8 z{U)MsP5nE9IW*L=wl&|_-rQcFMY7afY`iy3U$#3L!q>?Av4t!Yb`^c2ec-rueRm^U znXQw(dhD}x+jVjP+qBXt;<3YRvbM2fYOhVU;d~YF$1qL9+VUz*him68y|G41^Q#SY z5lVngMBWQ)16o54vi54d3@8YjsU#q-QuLra)PoN(@y;0bgfizG2_r^hhSJ}?gA#K| zJ+CWmi#fMppLK0*i3p5pez1(L=`mD;uz{2hYi|tBoJH%G&+09k7S7pK2(WZ&s5@sV^~`H zNeG(sXn{)f8qPEX7iAIA(8&w!HKbWW52lb}c)jt5?qo)IG?CFu)$^sth;$YDk^SK2^Ttf)$4qy7c$ Cez6Y# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..55c92ea1d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# hgrimelid , 2011 +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-11-12 08:48+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Avanserte innstillingar" + +msgid "Flat Pages" +msgstr "Flatsider" + +msgid "URL" +msgstr "Nettadresse" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Eksempel: “/om/kontakt/”. Kontroller at det er ein skråstrek framanfor og " +"bak." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Dette feltet kan berre innehalde bokstavar, nummer, skilleteikn, " +"understrekar, bindestrekar, skråstrekar eller tilder." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Eksempel: “/om/kontakt/”. Kontroller at det er ein skråstrek framanfor." + +msgid "URL is missing a leading slash." +msgstr "Nettadressa manglar ein skråstrek framanfor." + +msgid "URL is missing a trailing slash." +msgstr "Nettadressa manglar ein skråstrek bak." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Flatside med nettadresse %(url)s eksisterer allereie for sida %(site)s" + +msgid "title" +msgstr "tittel" + +msgid "content" +msgstr "innhald" + +msgid "enable comments" +msgstr "tillat kommentarer" + +msgid "template name" +msgstr "malnamn" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Døme: “flatpages/contact_page.html”. Dersom denne ikkje er oppgjeve vert " +"“flatpages/default.html” brukt." + +msgid "registration required" +msgstr "krevar registrering" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Dersom denne er kryssa av, kan berre innlogga brukarar sjå sida." + +msgid "sites" +msgstr "nettstadar" + +msgid "flat page" +msgstr "flatside" + +msgid "flat pages" +msgstr "flatsider" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5d25b6b6245e3c8a61f1b6aeeeb0c395c3fd2663 GIT binary patch literal 2329 zcmaJ>OK%)S5N;qmvb-Z9goH#P0glPe?%E0@j4=X2f&#H@MH|Ec35|DpcPE*hS*CmZ zkU01eCm}%sq?kh@I7K;eNMbu#V>?J3IrYc~E{G#1egX%+>K%LSC`zw-zkXC#ef3pO z|GjU|qCk5d{blrP=r5udAHpBn1>keQZ-AcyuK-)Xe}FEq`mhim1HS`)0sIsA2=E~O zUI88k67X~2VF0`MyE1>kky)4+A$qrg9aKO&X^zJz%Li|2u}z{|kB zj|njX{2BNY@L%9n;6(((5%IFlH+q@e%x3W@qs_#MK$SD+}1%H zDRFelYqdk^QeW8{k5gT)#gX=Ey4+Wy5$}v7l_rvOOigb>QYbw?h#KTYKIy~@LY}D5 zQ%$K#JABncPq)2>R9o)8VG}O5laV(DkTiv8I3F-Cy`0rQbg$a00lbi~aR#cA@Qh}D(XXsa=M}TTg zSv$kQ<0zb_Fm5!Y?*tLYPE?o1xFl~pv?5Fda?;YY>4++4G2w-&q*kglS?zGR>q}}4 zA4Q7N*0>$`vBorwe9UTbA~Er;bj2+V2~>3u`mE-ulP9=CC29pqS=qM>U^TZkyZ3h& zr6ibobZ%(s)-jt3LPgd zed0wCv^pVinL>IOY%qO4w9`@$)#LYYCTgTe+Nnyf<WO3<3Df!jZ1nPIbDC^t7DPWhfU!L%3yLf>^_+ zs>hteJv)w7mx*&Us>S?Wxpa6u(AzX!idA7OOcO73j>Sn!xfHeSR1FUfQFl1JKcZKM zX`p|oAj~zhW|lV>vl+_Hnj3aFm(6W13UhsP(cChf3{!L0Y~1&IH9i79;b!=dMC%Z)1Eat1(4BRhKzLhP&Guv&LCHv2N*{oRul?xo7vUx;ZE!~et z?*q@Do?UN+xdMmFglMb8{>&{-k5@J@m@mS!H9)jZHjCs|ELqDkH#K*d(*s_Tt#<>j zhhsY3^K;onocfJVvXt2jE3%PYLhKGlN3iYpgi{4SPSk9OU5xnzZ$cQB9Vd5ihTC(j z=$3z*8KmYs*yoOfx}+AeOQ^vd)Bv9aj)|h&MhF`juCb3QF%3)5-0YT+*TKYWpa9>S z^}NP7&vo4um5XlH%@SwNUZF3@SS{AFv)xEVGB9=ch?<$MN%HY$&jaWf-ZORy, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Флдӕр фадӕттӕ" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Цӕвиттон: '/about/contact/'. Дӕ хъус дар цӕмӕ дзы сӕйраг ӕмӕ хицӕнгӕнаг " +"слӕштӕ уой." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Ам хъуамӕ ӕрмӕст дамгъӕтӕ, стъӕлфытӕ, бынылхӕххытӕ, дефистӕ, слӕштӕ ӕмӕ " +"тильдӕтӕ уой." + +msgid "URL is missing a leading slash." +msgstr "URL-ы сӕйраг слӕш нӕй." + +msgid "URL is missing a trailing slash." +msgstr "URL-ы хицӕнгӕнаг слӕш нӕй." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(url)s url-имӕ тъӕпӕнфарс нырид ис %(site)s сайтӕн" + +msgid "title" +msgstr "сӕр" + +msgid "content" +msgstr "мидис" + +msgid "enable comments" +msgstr "хъуыдытӕ баиу кӕнын" + +msgid "template name" +msgstr "хуызӕгы ном" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Цӕвиттон: 'flatpages/contact_page.html'. Кӕд ай лӕвӕрд нӕу, уӕд системӕ " +"сӕвӕрдзӕн 'flatpages/default.html'." + +msgid "registration required" +msgstr "регистраци хъӕуы" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Кӕд ай нысангонд у, уӕд ацы фарс ӕрмӕст системӕмӕ хызт архайджытӕн уыдзӕнис " +"бар уынын." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "тъӕпӕн фарс" + +msgid "flat pages" +msgstr "тъӕпӕн фӕрстӕ" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c20a5202230545bd0d32e78d8170fe1f5e4036c3 GIT binary patch literal 903 zcmYLH&ui2`7#+3#ASz11i+Gp{LQ9$5>{4w_T~TWbl@^z>^&noRo9Q+sJBgFoZoQQr zROq<~QmCNF#DmnH6h!f+|AL1y2NC}QFJ63;t@eY*n=g6qeP4#`_4jQO)Cu4M@Blao zYyqym0%w75z!Bg(a2(hJ&Hz7wbHH!lG;rz=AxFXI!7l&`TtxrnaL@k(+>ibj_!9UJ zcnmy%a5w)x*yVP?uokmio+~%s)iJ>B>#7ex1R*!W6)u}1q)DoyL}p}uZiX}ysfE-; zNWKsY+DzJQv>8#N6=hm+r=&_e>_ke0M2mJBb1kUkZ9#OTV?pXFSr$#rrbBj5s0{jm zhRa;G5^qkViPCH~YegZu)oEp{kp$GM-)*o7C5miz8*u@x`jyM9;xqp$t&9dE)nUKt z`w+4@u@bq=1KlV@tODJYV8kExQQi#CG;1g>Gc1>=fZpL!Mj4$EQ7B@14cnl-5f^PK zl8ec8cx0=?TY@zNZwIu_Q9x5f@o9NvzYdlKvp<1l!GVU;vqTqEKv7 zHj^-tt$>a#MEd{20ZqAAk2{LTY${RhETA$i+N@R`r@dosP||@KtqhHO#F|&uY+7S% zzUB`38nx!R%{Q!hY0W2V){8&En)lYcwfQ@1o>{X48JyeJd@dfnabo9x41M8u&Rv_Y zL$zbgmJ_-JIN*I!oIheHv`}r>e5A0wEzGB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..ab56520da --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,78 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "ਤਕਨੀਕੀ ਚੋਣਾਂ" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "ਟਾਈਟਲ" + +msgid "content" +msgstr "ਸਮੱਗਰੀ" + +msgid "enable comments" +msgstr "ਟਿੱਪਣੀਆਂ ਚਾਲੂ" + +msgid "template name" +msgstr "ਟੈਪਲੇਟ ਨਾਂ" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "ਰਜਿਸਟਰੇਸ਼ਨ ਲੋੜੀਦੀ ਹੈ" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..74b2580c471999cf7da0cefad637141ab44ad783 GIT binary patch literal 2448 zcma)+O>Y}T7{>=FZ|1#)TPq$US|uXumk^}ZjZ+G=D5#-Pn!*K9jd#cP*t;{!%xs)p z^-x7rg%7|XD)1$^_Gn)?AUJVA;?NTZ?mhIvf7W)~23lcx_cyQqd0u9pKaU>yj^Xz@ zp5u7#;5mWkizo2H?^p0u@Hg->co#emE;s ze}Dwu2cHFxA7Shj@NMvUa0T>wYv3E;I`}kr4SWd{)4m1o!`1>f_y}rETCO+F1dRs%)L3cOPrp;guX2f77i=4@aNV3X zO-iouP>KPqCZ7GOjtBbvZi0(lg->hPpt>2{3AP1KnzX57X?wKLb1rSxYQy2M3cr+< z9kJ^-)Fx)m5Knj4(zv!**;wDWFn6d?tyeyrL^0UTQ<&_;uER<$)mdC0Zme*vtJ@cY z)AM!ytd20j1r=)l9X9E7Te<@)o0P_t%{VhW4lZhw*e0p8?Aq4KSxoww)`Dua8g!28 z)T9MS`*6 zO7`(Jj`o*mdUx&V#p>J?k!_e3<&%>4IiaWp8MO@`WC-N^ zT8OSb*u<;s@WSbhIkXCfa^rA?Mz`2-yf?ZT7Pwo!2y#;hRtD~YxK9Qi%*-%Pc$Xv2 dM)U=i^RUmStC-@&5St6sR;@DTa+i(w*gsQd^$q|4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..51f2bfb7a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,96 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# angularcircle, 2012 +# angularcircle, 2012 +# Jannis Leidel , 2011 +# Janusz Harkot , 2015 +# m_aciek , 2019 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-11 14:08+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Opcje zaawansowane" + +msgid "Flat Pages" +msgstr "Strony statyczne" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Przykład: „/about/contact/”. Upewnij się, że wpisałeś początkowy i końcowy " +"ukośnik." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"To pole może zawierać jedynie litery, cyfry, kropki, podkreślenia, myślniki, " +"ukośniki i tyldy." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Przykład: „/about/contact”. Upewnij się, że wpisałeś początkowy ukośnik." + +msgid "URL is missing a leading slash." +msgstr "W URL-u brakuje początkowego ukośnika." + +msgid "URL is missing a trailing slash." +msgstr "W URL-u brakuje końcowego ukośnika." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Strona statyczna o adresie %(url)s została już utworzona dla strony %(site)s" + +msgid "title" +msgstr "tytuł" + +msgid "content" +msgstr "zawartość" + +msgid "enable comments" +msgstr "włącz komentarze" + +msgid "template name" +msgstr "nazwa szablonu" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Przykład: „flatpages/contact_page.html”. Jeżeli nie zostanie podane, system " +"użyje „flatpages/default.html”." + +msgid "registration required" +msgstr "wymagana rejestracja" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczyć stronę." + +msgid "sites" +msgstr "strony" + +msgid "flat page" +msgstr "strona statyczna" + +msgid "flat pages" +msgstr "strony statyczne" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ffc8ef0045414478d9812b5c9b369f1937e468ce GIT binary patch literal 2115 zcmZvc&u<(x6vqv;{8*rrRv>|(JS0jQ+S%QNRxJ~PD5XUe35}91CnV(Tcz2z8?5XY9 zB<+O*#~wi(I7J*Pgvtpn6$fBAaYBd_hu*pI7XaTklkGOB)_OnV8TrT?Mf9Zy@Q3yzco6&vd>{NB%)uiM3ef^@fGPL|_#S@;KLVeBNC^DICjMRm zuY&}B2|fb;06qo&0zL-*0kXY2;4|P~;C}F5@JVq0zGi$F{0u%k2eQxKV$w4BGq?dB ze7N!VI=G1O4R8(o6_nr+Yz~v+6Yy2=Q}7k=8<73@4dng*1bN@TLH6?>@LBM{qe5V7 zaTH`-UIXz-EP!xJ96;yx1Ui3z8lCOpbKM}1fGc%lJKQ*Kj)fcV$&G!SG`9aZI{R^G z@)Bfy#Mx{tZC_>Nim06p;{2A(3!_q+>Bx0g#!lbaDEqN9)23y4MNufdqUdNO$BK-S znYKfcHlygJHarMMhLH;Gdu$DijD;MkFfsQrkJ_V{8`!-#pg7Wjbg(m#3h%}`Q`rf; z#CF>us+=~pF;oUcGgDKU8pzVbT`S@O_MjEsq<-WLuq=+K^oEWe!~bj`X*^usCbgwQ z3^Z__f{qH`8M8r5eWCtH^{=oW&YEp9Za7p~qAk1OL*vo9BDrpAJ;qvX)*jc9i5>?u zmZnscmmyLuBNjKdRE)53f^3k#S_xO*10{Pmo@-}jzRTd+sUMxksSLf_>%hC#5v#6e7-g79hx!Mx;4LS9`hwO5&7 z&4R%B6j-Ck%3O)4qfuhTyA9Qk$;B-B5FuezO4)|AL)ThWh4V344nv(K@07!k^ju1< zl}o+k91e$fNZy6Hl;*p0r;@pD(tU&GPNyg5k9X(0T}(_?)mXF5>AcgJl+3?Qb7#_1 zCy#g0T1zs-r01oDAkq1hJ}9lj9rpSfy=imi+ru1pwvEu=!gM<<5p~j2GEZp*K9<8$ z;mREw#aN`B&gSN38xq){2WpEKb()AKFuN8yMeNMBmM<=!pT<7d?zYY~f+xN00>MSK z6+6&P+XdV->4S=kmwOkIGt+sz*FgE?yzM(qvy{%P>v-4Gl#19|F{PI#x!`;rQnE!o z42$y%)I2U8v-I*J&CM>f#HFITS$(gN1xWhpro;_Hj`Hc@0Pd6TI5|DgS8;`*Lg7Lv zHOWBh(t7}6YODL&5l-IGK zS3B@(YUh9HzEbTBwS^yRnhRDCXQ^mjA#!OYGA@U~dy{{o+G!HMc6e{z!y^@<9xD_C zW#Esql3kJo@*_}*)YI4S2B}H12}KTn4J!x$+KA1?~uQPbC;tw+6~`P1u#*m0SvT3juaPT#^RTM2Vf6NzK_v!$*Ts zQ9EUQQtp?t2R_ADcUt#-V2LF`d@GJ*yyco5asgp*Vu)U#10xMsMz VN(c)xC~3I%O|cNMx)n>~#D9t}aI^pb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..e1f707d26 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nuno Mariz , 2011-2012,2015 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Opções avançadas" + +msgid "Flat Pages" +msgstr "Páginas Simples" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Exemplo: '/about/contact/'. Verifique se possui as barras no inicio e no fim." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor apenas poderá conter letras, números, pontos, underscores, " +"hífenes, barras ou tils." + +msgid "URL is missing a leading slash." +msgstr "Está a faltar a barra inicial no URL." + +msgid "URL is missing a trailing slash." +msgstr "Está a faltar a barra final no URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "A página plana com o url %(url)s já existe no site %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "conteúdo" + +msgid "enable comments" +msgstr "permitir comentários" + +msgid "template name" +msgstr "nome da template" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exemplo: 'flatpages/contact_page.html'. Se não for fornecido, o sistema " +"usará: 'flatpages/default.html'." + +msgid "registration required" +msgstr "é necessário registo" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Se estiver selecionado, apenas utilizadores autenticados poderão ver esta " +"página." + +msgid "sites" +msgstr "site" + +msgid "flat page" +msgstr "página plana" + +msgid "flat pages" +msgstr "páginas planas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3677d3d45721686195eb36f667593ba1908f678b GIT binary patch literal 2291 zcmai#&x;&I6vs=AzsBD&dW!fC3Oi(bW_J}6Cds0SSy{-EVcqp4gqrD^o=U2#I#t!P zKRlR|;2+>YP%wDNDT0WXAYSI;Q9%$CJnU8P9=!N{H8Zz}u1Oj-Mjv2q{_RI&Q(5-pJDb+h^nM5Z4A{xv5NObg2fXp6(cm}$<}2rJ>)K8TH746zVix` zJY{5lmKuVoQJb8Tw7Gtf2f{|B4k2ap-ZcE{{oT243ARYtD3nbu^j%qE8U%-!*olLu zAiOFNFfaMgkyqDh?Nu%~W*dcx1rXdrG=%%Y+*55JV^_0bY44oVgXmT1oCGgKV7fgTemn&7#B^Z^6A~thGfA&$10A%MNv6M_tqkM{Dk! zm%G|DX>J%})oHi4wzgXE*9JXM+q}9xF@FX#m1uJ4EkRI;iz&N4uwa zysJ8$yPIKCBYG* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..e28cabeba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,98 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# Amanda Savluchinske , 2019 +# andrewsmedina , 2013 +# dudanogueira , 2019 +# Eduardo Cereto Carvalho, 2011 +# Fábio C. Barrionuevo da Luz , 2013 +# semente, 2012-2013 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Rafael Fontenelle , 2021 +# Sergio Oliveira , 2013 +# Thiago Avelino , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-17 06:37+0000\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced options" +msgstr "Opções avançadas" + +msgid "Flat Pages" +msgstr "Páginas Planas" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Exemplo: “/about/contact/”. Certifique-se de ter barras no início e no final." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Este valor deve conter apenas letras, números, pontos, sublinhados, traços, " +"barras ou til." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Exemplo: “/about/contact”. Certifique-se de ter uma barra no início." + +msgid "URL is missing a leading slash." +msgstr "Está faltando uma barra no início da URL." + +msgid "URL is missing a trailing slash." +msgstr "Está faltando uma barra no final da URL." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Uma flatpage com a URL %(url)s já existe para o site %(site)s" + +msgid "title" +msgstr "título" + +msgid "content" +msgstr "conteúdo" + +msgid "enable comments" +msgstr "habilitar comentários" + +msgid "template name" +msgstr "nome do template" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Exemplo: “flatpages/contact_page.html”. Se isso não for fornecido, o sistema " +"utilizará “flatpages/default.html”." + +msgid "registration required" +msgstr "registro obrigatório" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Se estiver assinalado, apenas usuários autenticados poderão ver a página." + +msgid "sites" +msgstr "sites" + +msgid "flat page" +msgstr "página plana" + +msgid "flat pages" +msgstr "páginas planas" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8d7ae846c6c180430fdae9f91732d51e503832c GIT binary patch literal 2337 zcmb`HJ!~9B6vqb$1P%ybh$sN@KuUb4WbeZuNH#hm=L=cHisf9W_|V+$+}$|4Gs}FO zZImver9h%UbU+IQb-E-{sDPFNAp`{#Jr)1AceWEks94?JZ)bPr&Hufb`TxAI?^A*6 z8Qjm~zJ~h+-0$3nKU_b6Pl7*!eehTCEs*XPq67=D0saK0;P2p@{QUvM04E@R;wJuH z1iu3b`~%z%Hueee1h@b`0=^7#yrbYj@OAJ(a20$Uyf|-5@M~xpgHPf8!H0x+7hDA2 z13v-{_#1ctyokw`!6A4F{0gkVzd+V^`C-frT99>q0V~juful+OOsP@QWv|Cl)pXJsF0zOW94_myw9!nB$Nf>u8b&5v?uM& zVxY>|sm@h?6fdE6+Xq$BrY;JKUeV%Ss9cR?EW$jBIEOiCjVGxec>)Xz6N;{&Lrwg* zJjuc#-)&M`+6PY~>&WY%@SV}}VowWY6O~d!}*z_Au2d5>T*uC z+N>4VnTY`>G?hhER7M}DUIYxD#Zn<4#!)h{9M%uH4QNJ_qm@~w(8#eK%z9yzCrAyt z$hokW*3a{ef>Eix=c3=WkavB*bA8%^6)6*hGIa`>ElV`L-~tmTvG?SKQ)3j&N#0`Q z)CW;Jl?$$!7g(PPV-y)#DiL%jlvs0iLuDaZ$&5<-=BI-8rD zZKQ0x9;vN1>eHEJu!CYgzT<4C)mU9wJ-e4{uib5&o)tJ5Y*$DosIAaJowPZDoh6-D zp?_&`E;+W>kLMaGmz*`3IYG0>e$({( zy_4Ov*=(9asMj04XY>uhlxy5ErUjpX+EeNqC7zeP9E; zsF6(sJFaqS=iuVFE_*$O2n*Ic#=S#sVi89#L4Y|HF9T zIU2RQ7_fIUY<+G@s_iI?>^=zs?HEvPJeW0C8{ zq;@kTi$D-7i?+CDml0&+JEWnfi9uA#m2B2Hibz-@cTpz?)mT6j|HjqX3q5ZuVN|A2 aRrJ7i+%Yky=G_FUsjxp`fY#K`6~*8BpSnr_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..66319116f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,96 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2019 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2014 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 12:01+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Advanced options" +msgstr "Opțiuni avansate" + +msgid "Flat Pages" +msgstr "Pagini Statice" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Exemplu: '/despre/contact/'. Asigurați-vă că sunt bare oblice la început și " +"la sfârșit." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Această valoare trebuie să conţină doar litere, numere, puncte, linii joase, " +"cratime, bare oblice sau tilde." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "" +"Exemplu: '/despre/contact'. Asigurați-vă că sunt bare oblice la început și " +"la sfârșit." + +msgid "URL is missing a leading slash." +msgstr "În URL lipseste slashul inițial." + +msgid "URL is missing a trailing slash." +msgstr "În URL lipseste slashul final." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Pagina Flat cu url-ul %(url)s există deja pentru saitul %(site)s" + +msgid "title" +msgstr "titlu" + +msgid "content" +msgstr "conținut" + +msgid "enable comments" +msgstr "permite comentarii" + +msgid "template name" +msgstr "nume șablon" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exemplu: 'flatpages/contact_page.html'. Dacă aceasta nu există, sistemul va " +"folosi 'flatpages/default.html'." + +msgid "registration required" +msgstr "necesită înregistrare" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Dacă aceasta este bifată, numai utilizatorii autentificați vor putea vedea " +"pagina." + +msgid "sites" +msgstr "pagini" + +msgid "flat page" +msgstr "pagină statică" + +msgid "flat pages" +msgstr "pagini statice" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..669d7e17bbac6e511c0784eeca4305d6bda3b3e9 GIT binary patch literal 2934 zcmb7F+iw(A7(XiB);nr65#u2dWMgM9wIr}~3!*@p(9kr6ClWHdbGkb)JG0I?(+k05 z+seh1(8PqO5rc^jzAmMeQrg8o;mngHCO-7pM-xqa@%NqCc3W=7f!W`=ec$){e&08z zzi-`gmEm~4;4c;Cf)@(KLl(ZE-MG4L3075Fi*`$@*efC`ub{sAli{{kMN{iomq zcovBN>{tA}2mB4lf&T!X1#a8I*ek&IfzJbbfaI?a_$II)_%!eo@Fk#V&n56raG3z6 zvF<;^*d^dM!1KWEaDE;56OiH_d5*CxDVk-fs^%GY{UcmeUCCYPuQt9_ydDOlt|Oc-EQ9uhRHDYmT+ic?6qI7e zp(94@$W!aS*kQ!tgA~jRDG*Fml}Dk+ckIG%T5{V9k^Tf1}jH*)XLwYI~93wMZ&%iUQ-r zmrx2my0{I4i)M6&{29J8?U)inrhx(h6naH z*E++9k?<80zDc1R)M}VYMiO&MqBD{#6cq>-+SGJB6rV+IC>%zbNroELVI#P2*923p z@&p?UgVUm{tbWHjfs|lX;Ld5=uLP+fQ4d084akb?SO=quw1$HMPYoWkhQz2#N3Boc zt-!l;-8n0_+sgOw{GLL7?}s@&siU@3)^KS1Xg3vv1zryAvlC~dQpkI&r^|k+d}hQs zP^qD@GsvkA27V<%I@YkTYXv?OK``6ryQ)gn3)$@0*jNUM`O+N`<7AOdc&>rhHqVAp zHk}&iA2`&>D4)rtK1pP>h9~Oati-s=LJim7hyJlcDOBu?a(WP$s2GnK`jeLNW!clkT=xneQTckbjg%xy2`^L#(g zaU93Iuh_k|)m!YLp|QyI=DYd1bBRe`z9$WneA}d0%+Z!P*H_%#G2feBUx#0WS&P|Q zgopjS8xB57?@KZLgKox?@g=<&H}ryD(JS$cUf>we@)Q;OuS#zO?@Z6jDXYe6;7*5h_wQ%i)(9G zfD7V-HG~D9naqC?F_+Y1d2EPJsW$aIzs_LI~$?Snx)xlx&xUS7YC!R+V6<8=Hb=?2zw zSTtnkK@&njFMS*9&CV^|$-jjSY9rLNojm%(q=$l2pR~}AXd>!LD$oPTx7!F&mSK1k z4Fs9yaM&mYY3|E*8ghJ%P|bEo<8_{5A`{3@d=n{J@vPAn3^y=Z)VGp~Ea^Fv>H;ME zB5qL6!jL`*P=+s*hLa(p;DhN(h|ecYLn~A{qyH?NOu-4d4yR0)!}#`kf5kJ#H;x!p z=BexH?}z?sbL-OI3xu0Ox{zRVArh~fyVf|s2EMNg5cYqYlT1eA26UsmTY7;Zt0mC9 zf;{ojLwrgId#Ettpasmef&1ew29IvI4f_voSoo$Jiarc<8j?ku(ZWrHZ8xu}%q#;< d(|y$CU`YorVdaJ?5xRhx&+aBznwkNZ*uS}e?YIB{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..bfe344c36 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,95 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eugene , 2012 +# crazyzubr , 2020 +# Jannis Leidel , 2011 +# Mike Yumatov , 2011 +# Алексей Борискин , 2012,2014-2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-14 18:19+0000\n" +"Last-Translator: crazyzubr \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Расширенные настройки" + +msgid "Flat Pages" +msgstr "Простые страницы" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Пример: “/about/contact/”. Убедитесь, что ввели начальную и конечную косые " +"черты." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Значение должно состоять только из букв, цифр и символов точки, " +"подчеркивания, тире, косой черты и тильды." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Пример: “/about/contact”. Убедитесь, что в начале адреса находится косая " +"черта." + +msgid "URL is missing a leading slash." +msgstr "В начале URL отсутствует косая черта" + +msgid "URL is missing a trailing slash." +msgstr "В конце URL отсутствует косая черта" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Простая страница с адресом %(url)s уже существует для сайта %(site)s" + +msgid "title" +msgstr "заголовок" + +msgid "content" +msgstr "содержимое" + +msgid "enable comments" +msgstr "включить комментарии" + +msgid "template name" +msgstr "имя шаблона" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Пример: “flatpages/contact_page.html“. Если не указано, система будет " +"использовать “flatpages/default.html“." + +msgid "registration required" +msgstr "требуется регистрация" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Если отмечено, только вошедшие пользователи смогут видеть страницу." + +msgid "sites" +msgstr "сайты" + +msgid "flat page" +msgstr "простая страница" + +msgid "flat pages" +msgstr "простые страницы" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..485b83416942b2758675c741620636960d431c6f GIT binary patch literal 2321 zcmaKsJ8T?97{><)uj3sa5>gN!5{Y8ry%&~-|fSP zK4EyC!FvSn_jq5x`~E%n!*dIK68ssw2=0Psz~;S-t$_}#fWLt)@K5kzx9h1sB2l!E4}SpqR8R_!Vp!fzP4;`3D%g z0@lGr@MF+`x4^^T8`$hDco}>b{1o)#zk}Ys4<0K04=4Nx^!t7ZJ`H{idY$hk{AtpE z8^jju575WyuSvTCXJB688&KH(6zDa)f8JNGk8l-nfEz^)fWjV6|2$fPJwBlawqTFo z_4|3-_8xBsI}>JH_e4l$=%mq>om=PeP>B}pUjMwtyC!wDp3#o?Ty6LI7gbu~kszBU zf}EiN&jcyKL#g}3bx1DZQu&5e+zy1T-bL>Ya(pUSXzW*5QQQrAU)VjPuK8AV;9^zC zEv}FoNK4Y{-Rqw@8YU)_p$O;E4YNnqiI~=;Qj}WZU7QJqVuh#5O|{s0>_y9dv*Ocl zgr#mkX`<-pas1C&;wpjrBNFSnigW3GJBBg$q3s$7ovSLrmU@ z*_UOB=p$eW_lJ%W@nI?x5i%b$%aEfX)(Fx(7R*Vf1Y1tbs_403F$}K4C9G;uxXN|k zR4$33NnEgG`!Wp9rhOZ9Op7YZ7lTV8lYVOO7SvkQtT!7${k5REK+Q(0-gu>sr*eT? z7jzP?aon6qTC^+>OL`}bImUE9h2=p<@VG^nmC1NS#|O?0TeaHS+FBJZXe(F5dKLcG zN{jZOCaY^Us?AlF7MIS=Y;RQSl{d?P1)b3l);Y26YVcd?lQ=0nvBI^lbj}ASX7l`B zD7Madu0?~09~*xqzv9!GyfU85xKMjVZxLmM2L+(jvI-;9jz$?Dxyiz@Jcq9`j6 zEmWqW2b5;DU{di86qhp*X(?z`P@0KQ===sQ6G}>cBc`EAcYc%@x_eEz>~P|H5rTxn zpO1AkVtZZVy)I66Ux^u_*4lh4RAyRL2%D89CtVd)2E(wkGpNWLd}kabPN%R6G~__#V+((_N;mSY4EIGzUS*wp?903fwQ<}R9?UUa z%Llj!5GvL~3l}{f&(roMzLo4Dm0c4?qj~6sK7pvhP%k@TwY}-T${cegx`r~PO%{#H zLUfgUsp$>!AG)0Kn;ACG$7S}aY~P?i4knuo7M8K0$#8~XU1WR#%EyUdIFLo$XF;BJ k{VNrSn%`, 2011 +# Marian Andre , 2011-2012,2014 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-07-24 21:01+0000\n" +"Last-Translator: Peter Kuma\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Advanced options" +msgstr "Pokročilé nastavenia" + +msgid "Flat Pages" +msgstr "Statické stránky" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Príklad: “/about/contact/”. Zabezpečte, aby boli lomky na začiatku a na " +"konci." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Táto hodnota musí obsahovať len písmená, číslice, bodky, podčiarovníky, " +"pomlčky, lomky alebo vlnovky." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Príklad: “/about/contact”. Zabezpečte, aby bola lomka na začiatku." + +msgid "URL is missing a leading slash." +msgstr "V URL chýba úvodná lomka." + +msgid "URL is missing a trailing slash." +msgstr "V URL chýba koncová lomka." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Statická stránka s url %(url)s pre sídlo %(site)s už existuje." + +msgid "title" +msgstr "názov" + +msgid "content" +msgstr "obsah" + +msgid "enable comments" +msgstr "povoliť komentáre" + +msgid "template name" +msgstr "názov šablóny" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Príklad: “flatpages/contact_page.html”. Ak nie je uvedené, systém použije " +"“flatpages/default.html”." + +msgid "registration required" +msgstr "nutná registrácia" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ak je toto zaškrtnuté, na stránku budú mať prístup len prihlásení " +"používatelia." + +msgid "sites" +msgstr "sídla" + +msgid "flat page" +msgstr "statická stránka" + +msgid "flat pages" +msgstr "statické stránky" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f73c6360257d00d3e4764c8c8c9d241b274fa740 GIT binary patch literal 2173 zcmaJ?%Z?m16m=ls(L6#DAr!>pZqUpqQ~j7slu%)S5GD{M6GlTPDiq@K5qlR1`_al z;IqJ=fG2^6z~_Mvf$Z-Q@KxZSz!Si~fiD419B=G1z=z;)7I+%{e__%V@Ypj#XkZ`6 zd>;U>0Dl8s1)jpD%`ppE&tk!|SyPE&$ozMc`TBr$D$A1K^85 zJ+UhwXo;6mx$qdTJB7;eVYn`kr(VwnLZ}P#Vg0#qtXvTGtT3+^P+2dId0JQ>aV4#! zO;k!Q587ET*7szV8x_++M-E&WI*GGECZV&?rVTk()1+l4@R;VPY~bQzu4Zr=x$(XKXz zO0Q^P?kZK=vNU1hMO?!kw8@*)P2K>@!idVk&^wFxE_srs0OfsBd)fz2+pZw5gTgq& zk{5F>l#Em|W**L(eKKx1RB5Cw(S68`O=|1(>BxVI{6mFw$DZ<*A$mszIBSg}uFXlPd(HOnYCS!0aq)`Rh4P zjz4)mZNZF`4MN#Egv4bTOfOhq;vnWNFA6n;V1?vMLWTOO)P+g~Yvu*cC&wB^R%S{B z9gGs2h1*d{h_0v69fX8cF{L}w4qak-n z9(OvsySr`3VZGi~d%UL8L^lO9anSLmv((zSzOg>nq1W!Vt~TOF{rwz)2DKMD&`{gU zxOKAdDy-e^UyCly=kZ?Ks)*KY;`qtMbZMZ&jA)E&(%Lj-Ax(766`7C8=C$e9RxeZ2 zTwAp7^t#=(wH|#yUBZ;cT!Gn}o9F57-RaOOhE_0ie(7>c+>$v?-Qq?=M(cdgIA@(H zX!|eOV$&VnSC!R?q{Yq>))bOJS>u|}fjqpY!nh>72$*AMlaea9l+iI~s>5xqaQ?t_J@XJ{O zIeMVT4X|v7$0iFOOCJXVc#<=P$YpNm4(~~FLxVKiY=pN8wt7ca;BEDkD=wwW+TxB^ z0}UTWj>e8ESS6zKGIMlzuNbRkI=Ub50t`2EU4LDQA&}ypsqScVr%n{hT<4B9&XD6F z&LFoQJBKDr?xsxIow1y|!I5BQb41NF`Cs#xE0~K(&>H_L4haq^rV)Cg*UX*?e;`MQ bh=oI>(_E84ATc=^+%hPpQe, 2011 +# Jannis Leidel , 2011 +# zejn , 2016 +# zejn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Advanced options" +msgstr "Napredne možnosti" + +msgid "Flat Pages" +msgstr "enostavne strani" + +msgid "URL" +msgstr "Naslov URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Primer: '/about/contact/'. Poševnica (/) mora biti na začetku in na koncu " +"vnosa." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Vsebina lahko vsebuje samo črke, številke, pike, podčrtaje, poševnice, " +"črtice in tilde." + +msgid "URL is missing a leading slash." +msgstr "Na začetku naslov URL manjka poševnica." + +msgid "URL is missing a trailing slash." +msgstr "Na koncu naslova URL manjka poševnica." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Enostavna stran na naslovu %(url)s že obstaja na strani %(site)s" + +msgid "title" +msgstr "naslov" + +msgid "content" +msgstr "vsebina" + +msgid "enable comments" +msgstr "omogoči opombe" + +msgid "template name" +msgstr "ime predloge" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Primer: 'flatpages/contact_page.html'. Kadar je to polje prazno, sistem " +"uporabi 'flatpages/default.html'." + +msgid "registration required" +msgstr "zahtevana je registracija" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Izbrana možnost omogoča ogled strani le prijavljenim uporabnikom." + +msgid "sites" +msgstr "strani" + +msgid "flat page" +msgstr "enostavna stran" + +msgid "flat pages" +msgstr "enostavne strani" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d404e6b19795dc7f1acdba079babd5c957c6d982 GIT binary patch literal 2328 zcmai!&u<$=6vu~Bewm*wATC9`N}whpYbOPy)@>?UXdr4sqt-d|x4qV{`5)w$cAR+D?K!WcZ+i@FyS>FBZ%`?)Jop-DzzW;}e*#(G2agJ|0N$GNLlCdT7a+&~<&S>N<)wubdhqAZeG927t%(h_C8kga2fvg{{C7w1uIe}2xVdjJzJI-dci3s4r2b~ zg;N70%t_vKXmWCFx5UO^o zwY|OFL~O?EzS?Ob5v_^T8H%ZW%Wt(78yo8zm*+vPG?yE1O){Bu#ua1-wG&!Mh&Jc2 zg{1Q;tlsRbC1>W}@mhW5lFO!N`7E~SOjm~koo(`4jm@HVvPjmfD}9?x6^DNH^f{V5 zt}Yllxk@XG=Ne)I8)t9VYYKb2RPOBtmHP~}xRI%{TNlNoJ2rYNd5eenkh7t>#}PJ^lagvnYGWc;dTOyEotiIkZ`(N4 z6l-z|_V}ce<=8SoiYt-=P9Cy2aX&MqQr*`{*gJWd2OR2y?y+e}*EFgL%`}P|LbA-4 zsE>8bOjxd>c&sqMW12&OgoVxEYNVj1jA@7VTH%Pr(hMcrbg?LqjU5b|;!195R4ATG z>kQT6NLX0em7JQXGoKBeHMxxa#sQTc@&HL3X`bdgnN-H=;PtfnWI6AXNDRq793#b9 zIA}nL$08aH4(HlT(sf|Va))k=U4u^ae;@X-ftvzF, 2011,2015 +# Besnik , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:51+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Mundësi të mëtejshme" + +msgid "Flat Pages" +msgstr "Faqe të Thjeshta" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Shembull: “/rreth/kontakt/”. Sigurohuni që vendosni pjerraket përkatëse." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Kjo vlerë duhet të përmbajë vetëm shkronja, numra, pika, nënvija, vija " +"ndarëse, pjerrake ose shenjën afërsisht." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Shembull: “/mbi/kontakt”. Sigurohuni që keni pjerrake paraprirëse." + +msgid "URL is missing a leading slash." +msgstr "URL-së i mungon një pjerrake në krye." + +msgid "URL is missing a trailing slash." +msgstr "URL-së i mungon një pjerrake në fund." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Ka tashmë një flatpage me url %(url)s për sajtin %(site)s" + +msgid "title" +msgstr "titull" + +msgid "content" +msgstr "lëndë" + +msgid "enable comments" +msgstr "aktivizo komente" + +msgid "template name" +msgstr "emër gjedheje" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Shembull: “flatpages/contact_page.html”. Nëse s’është dhënë një e tillë, " +"sistemi do të përdorë 'flatpages/default.html'." + +msgid "registration required" +msgstr "lypset regjistrim" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Po iu vu shenjë kësaj, faqen do të jenë në gjendje ta shohin vetëm " +"përdoruesit që kanë bërë hyrjen." + +msgid "sites" +msgstr "sajte" + +msgid "flat page" +msgstr "faqe e thjeshtë" + +msgid "flat pages" +msgstr "faqe të thjeshta" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f5b96db5929f489b911d37a922980b59ca31d26e GIT binary patch literal 2770 zcmb7EON3Y*$P+is5dp#dR z!VF`;g$p+(14xLG#BK9w=!`?N!KLQa%7uxG*|>4@M)mz%@yz}xXc5$ zWBrv!g*XE|2&@6`0WSjc2=Wr}N8m@m-+*5L4?HeJ6ZjL5`JF-Vw}DH*eZYIbXMmeP zW)!#u$bJevEcMnyAfH@?qqM zeeuIF`VT0JC-HJ!p6@RLAsNEF88<9TkD|Kvqfm)Mb8f93$O5e`e4TNpqK3|tqfonL zompGBoTdr)lqA)NCFzK&?u?{Bx}G0a$PGQxvFissQGu(fQlkh4t`#nqt zuCBWksrsZ&@GM=`wZOU?pC(=P75OS$TezU99!E32C%rK&gZ8}AvPQFh5Ku!&mN;Fk;ap2eU&C1XEq5MjX)gUHBhWKvClB7#DEc% ztFnBGxkOYE*}fq|mKNp?w`l zF&RfEWm!App7S9j!Ky&sNjI!SsbjJp#oC!r72k8-X;hR`iVBpPJn9^iGd>@64#Hc3 z^4WaW$>yAV4#UFk+#6XusUxn^PAPUnw409N0*zOYnfGNJDZl35JC6flr2+a*NxHQH zeIVm0-wkP3RqJ{olbM~JO+!ei{AoFthU!e0S093&c}B&V(bUBF#G!$LTsoV2x0^Pn zG+zftE$4Iw>iuvp`o)cv)Wzea!_J<;IgT|gW9Lv>wUyUn}Nv^cH0a$1&eu%=fqU6?gN{T4eX- zvUK`%*92#>qp-=rCO^72CCp{hGB9n&Op*K{y!C7)yCx@jgCO;eaFIMFt% zSY9a5$j~J-k|uKnr*E5fa@MrS`oX9}aMbmfEb=^A=3N9x&coALoWrzDFhr;WXI7|=4-#HY2=l_V0XdB~$T{l{@AFVkYZDerY^lsI`1;)z1WDkU-UAJJB za^`xu;M{U*?r{Fb2*TR-NXx8Ja)}eb1dv_3%0_M45OU)cHv(!`&G(!-_({%M&+wa^ zGc94hxo-h_7CHA#a}&o}m~;@Ze+7bGE4kE7MZYrLI#{!084=d6!=A!!@%l2&HFON9 zm|J-7n2uG}M2B>Gs#td$HeA^Y_6!27OXYNcHkM$4G+RZ1;K*W?aiAA0*gwY1!i{7C@{l?{cHOULLvyY` zKQ3^`a7X@k2P;ep1soV#@!SQRjb&lUcFc`rDY1D65wJ%QZ3b*3;vCeA, 2018 +# Igor Jerosimić, 2019-2020 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:41+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Advanced options" +msgstr "Напредна подешавања" + +msgid "Flat Pages" +msgstr "Флет странице" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Пример: \"/about/contact/\". Пазите на то да постоје почетне и завршне косе " +"црте." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Унета вредност може садржати само слова, бројке, тачке, доње црте, црте, " +"знаке разломка или тилде." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "Пример: '/about/contact/'. Пазите на то да постоји почетна коса црта." + +msgid "URL is missing a leading slash." +msgstr "Недостаје коса црта на почетку URL-а." + +msgid "URL is missing a trailing slash." +msgstr "Недостаје коса црта на крају URL-а." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Страница са адресом %(url)s већ постоји за сајт %(site)s" + +msgid "title" +msgstr "наслов" + +msgid "content" +msgstr "садржај" + +msgid "enable comments" +msgstr "омогући коментарисање" + +msgid "template name" +msgstr "назив темплејта" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Пример: \"flatpages/contact_page.html\". Ако ово оставите празним, систем ће " +"користити \"flatpages/default.html\"." + +msgid "registration required" +msgstr "потребна регистрација" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ако је ово обележено, само ће пријављени корисници моћи да виде ову страницу." + +msgid "sites" +msgstr "сајтови" + +msgid "flat page" +msgstr "флет страница" + +msgid "flat pages" +msgstr "флет странице" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..733de558f4b1779eea8b7857cefb6efd293f6183 GIT binary patch literal 2328 zcmb7_J&YSg6vrnJzRYI=h$e_fAkm$;^~aGSIB_6A4i4p#Be{eEq-gAY=No%>#>~w6 zK9nM&NtKcU1W0LUX(>>uJJCXcD3FjiS_(RZX!yUieI`LcV&&Q2jCbbE|Gl^K_UD89 zKUTP&LOX=^4cfD4AMC>o*LUC(;P>Epa2Grc&flZdIvBwU_#4;+{{Y{T=l8+}xCP>; ze#GrL@F$SKzrY8;L;IC_9DEUc2s{Rgy;I=R;39Y*cm;eEeP;VRd|jWP#7sYfW+BO|EC#uQ*H z^)Q;`;3CHtz==}_Aar{o6FI2+WN4V@1%Zqn|x&uY5uidgG78+9kvcCUS2r6t{G z3WaBij@I;$DPx@)+a+yNie8&c1|id7jYIW6?A^tj-ZNO*xZT2PrsF_&IZQ-dkx_Lm z=2>ZOah2kl31ouZz4l3@fp7Ls;658jXCCfv5^tCg1Fbqw!9>P$!E8`dMbug2PG7V*n{86&x?N5a zV?~M&BUNoC-OkF`4h^rDs!I>minuk@S;3SSAySzXEFRh77-3_MY>~IiPU<3tg-tQ) zIL{cQWk%*EsUb*>CQBtrmoA)@hOkj?LMXF&XBz(X{PtW|l_+8x72DE~flgOU)F zI5F)7<++Q1c`Yv;dH%34o>L_;3ko?JU=5SiIjd-5#%kHS9(Q80m?oFu5>_=S?P=R} zl?yy@J|;_{YtrQPq8pMG*QCnw`Q!o*jZ976gtaEk*XQd=y^+i}&}|+&{!$%R<*W`d zS@GK9b&Jk7X|apQyu;oFlbh}9m|(jFev^Cn$n-!|IP%vp%Hvoy07(a_Xa(p^Zc3fqjoUt7z$FNDq+a~UbZqj7C%5qkCoh1v-=b=e+M!nT)(9xqL-TL#bMuT3ZI$=7-r&{xqM<-jyq+712pKR3W>ebN_%&E^}O#^G@ zXHQhrIXysTt)_uXdFQ4^x#?-7)8vd;AHJi+9IoQTZOH+`3KW=B)`f`NgWESaS|&qV zdgymk#T_5H`u{DOiA61Dw3yNVFf%O-IWb44Bf3(^?~{ z5UEmFn={_I#nwTR&Rr>J;7v~tvmRSB5{LZ^3`FBF`d;_;=8OgQl*?VW5bydZw+R3M literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 000000000..b059b296d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019-2020 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:48+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Advanced options" +msgstr "Napredna podešavanja" + +msgid "Flat Pages" +msgstr "Flet stranice" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Primer: \"/about/contact/\". Pazite na to da postoje početne i završne kose " +"crte." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Uneta vrednost može sadržati samo slova, brojke, tačke, donje crte, crte, " +"znake razlomka ili tilde." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Primer: \"/about/contact/\". Pazite na to da postoji početna kosa crta." + +msgid "URL is missing a leading slash." +msgstr "Nedostaje kosa crta na početku URL-a." + +msgid "URL is missing a trailing slash." +msgstr "Nedostaje kosa crta na kraju URL-a." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Stranica sa adresom %(url)s već postoji za sajt %(site)s" + +msgid "title" +msgstr "naslov" + +msgid "content" +msgstr "sadržaj" + +msgid "enable comments" +msgstr "omogući komentarisanje" + +msgid "template name" +msgstr "naziv templejta" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Primer: \"flatpages/contact_page.html\". Ako ovo ostavite praznim, sistem će " +"koristiti \"flatpages/contact_page.html\"." + +msgid "registration required" +msgstr "potrebna registracija" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ako je ovo obeleženo, samo će prijavljeni korisnici moći da vide ovu " +"stranicu." + +msgid "sites" +msgstr "sajtovi" + +msgid "flat page" +msgstr "flet stranica" + +msgid "flat pages" +msgstr "flet stranice" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4102b428326ecd8d414f96a4811f21bb4ee094a GIT binary patch literal 2288 zcmaKs%Z?jG6ov~3HwOp=SRjEoAVo8yO#3o~Fm#xRkYrFqMj2%sRv=V%AKR6#u6C-b z?U@%~&4wo+c>xwkNJt2cSg?Zy8x}|)v4E%GKkcy{a-rq!udCg4>OcRfKEIzl_NBt{ z63$m~euwiloS!^`3yz<`=fPjVE$~n9Baj|dssJt60Dl8h@GtN~`TsG*07oEx>PK8& z2Y&(y{2P1{Y#dYS1b7mB8hjI!cs;12jKxOX(x;8)Nx1Yg1P<4-8H4W0t8 zf)*^nZ^7rlH7s@>+yq766ubp~4~o9dQ%bFXZ-cAgr=aNh929T90G|QxfD-R(@I~+k z@HqG@h@bic7t#9<2zhmGK&|}+@FY&jPh!iuu&ed~sOJeKo~$W{tR)B1TpY5FXpy>z zhWUY1mAa5kwCi(5!d(a+r(xOh(O7EG*()8BiRVKqk1A zNMm14Ovc$d9zyLwh+NRrSW8u4T3Lq5c%UmAkD{n;tURYg0-NQTBtwbel9vnXAj7h!y#vhaU#QqnW7#X?AhARiQ#Fj zxXw&=xeTLz=^29z^$^yD;XsfYjm^Z^ z8`rPO3B#x`A&BYs74p9S|68A?5=HEyVppfoFN*@hpu}L3B$jtUc^<+ruVsso=UbKW zoGI}vDAZ?+IZRF$tfGmQ)vhmZaz7?lvgBi=gjp$NH?JXEz*A528(x0W}HU=H>}`8(q&zw zv^V9JW3*6z*_Va%4K8YGp`#7$6C2|lf&CC)Bn>>_9C`o$Tj){ zmQzPV8R^sRxIQZv-d&Wgu0!2y7QH4#HbLhOrIs=;OSYU2 q%na-h&t8R@_jS_q!MqShort}3z1$, 2011-2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2014 +# Petter Strandmark , 2019 +# Thomas Lundqvist, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-28 13:46+0000\n" +"Last-Translator: Petter Strandmark \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Avancerade inställningar" + +msgid "Flat Pages" +msgstr "Statiska sidor" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedstreck." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Detta värde får endast innehålla bokstäver, siffror, punkter, understreck, " +"bindestreck, snedstreck och tilde." + +msgid "Example: '/about/contact'. Make sure to have a leading slash." +msgstr "Exempel: '/about/contact'. Se till att den börjar med ett snedstreck." + +msgid "URL is missing a leading slash." +msgstr "URL:en saknar ett inledande snedstreck." + +msgid "URL is missing a trailing slash." +msgstr "URL:en saknar ett avslutande snedstreck." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Statisk sida med %(url)s finns redan för webbplatsen %(site)s" + +msgid "title" +msgstr "titel" + +msgid "content" +msgstr "innehåll" + +msgid "enable comments" +msgstr "aktivera kommentarer" + +msgid "template name" +msgstr "mallnamn" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exempel: 'sidor/kontaktsida.html'. Om detta inte fylls i kommer systemet att " +"använda 'flatpages/default.html'." + +msgid "registration required" +msgstr "registrering krävs" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Om detta bockas för kommer endast inloggade användare kunna se sidan." + +msgid "sites" +msgstr "webbplatser" + +msgid "flat page" +msgstr "statisk sida" + +msgid "flat pages" +msgstr "statiska sidor" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcf11e52ae23126c74db5086e3f084e859f56575 GIT binary patch literal 1537 zcmaKrzi%8x6vqb$1P%}cL<2}XDklnizep6b#t7m##NZQ_xuiw!Zs&IAc6R32nYpzs z(WQU}i2`~g{s&qb5E3;lJraKbqToAwwl4w1N>87e-S@ul$L##}!iBE|o@ZgN!tTQ^ z!Tx~7r~il$&w~T-L+~b8fnS2}gMWdKfwvwN;x+INNMHe81it{E1HS@a0>1@guJ6Ie z!5_hIpz#a%GWL@T&;UOJXW&oZJurcD%yS=n1^oP!-+?jD58yN4&)|#TuVAeEckl`D zPY`LuQ?RFDXU~&Z#Q3Nk>xxeY7GqG7K>D^$pw$=eWlJ_wnUP(1WsMWNM_etmOlhOX z6B~SQYK`Zq?`?Ex#HAz`YDwNw!AnV6a;8j9Y%=mSD;+mZvn!=&F%cP95q z+;t0IY3T0F$QR0ya%RKRqP9zw$?OfhM7m?=WkrqBnu3$Gv6jl@jDz;4Dq^id(?U+m zs9=pgCT;UvW{EOUpmr;*i6oxrwv(ljO`EH&N!&f$kA`ZfQqHyQoj2O{*8TVQhnw$; zI5la!kfzNtwN-_!6Sd5hgL51<)$-GzYMBXixWI%Y8Lp)8%4;bOYCD%xpX_DHJyZ?< zl(IRS+;$G-!qz?+xm;z*&5*lfY*XqSd^ApWYT0Thw;-3&us^t-4Ejm`EgIZNuMMyE zhy6YrlS8>wQFHBg15U~CO&V;b*RNgetFr!5, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Chaguzi za kiwango cha juu" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Mfano: '/about/contact/'. Hakikisha unaweka mkwaju mwanzoni na mwishoni." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "URL imekosa mkwaju mwishoni" + +msgid "URL is missing a trailing slash." +msgstr "URL imekosa mkwaju mwanzoni" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "kichwa" + +msgid "content" +msgstr "maudhui" + +msgid "enable comments" +msgstr "ruhusu maoni" + +msgid "template name" +msgstr "jina la templeti" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Mfano: 'flatpages/contact_page.html'. Ikiwa hii haitaainishwa mfumo utatumia " +"'flatpages/default.html'." + +msgid "registration required" +msgstr "usajili unahitajika" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Ikiwa hii itatikiwa ni watumiaji waliosajiliwa tuu ndio watakaoweza kuuona " +"ukurasa huo" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bf8dadf2aba8cee423c69c12935619dd11ff5296 GIT binary patch literal 1945 zcmZ`(U2oh(6dg*Suz(OC-jJAzhfS5*-i-<^4uOi2qCg^|Xv-^_tY>$f+T+DDn@t1) zMMyLtl^4hZeW?&g&^~xe3$OGa@CS;J#V_I9>-~C2NAe!e%$ak~y>q?)zPNBKFrLNp z3ZBpLynyE)JT&BELVO5315AM_@O|Jz;N!s8P6=@uSO-2241iAq-vQQu>%f@i*{S-~!h7KqCFmo> zfE4d5AY?c%@L9V6CWKZpBnP?TorYn_+q{~&D(8MOn_O$iqv^t4$ebv==BKHZ+{GLk_=&pC9 z>%~^a*3_Ns=hF6955$?b`oyuXHBywQ2tk0w(-BE+Yja9@vnbI#fAiOTWRfRsdf_1WG~i3j>VqD)$I*INo(VTHcV<~X^N>86kHN*_GU${yRk*~ zF3yb1^{0b4*O7qhKG<3sm1^N)muRt-XS=%Xy!FWY7*4+*yewI6L({|&? zdw0;aUMmY_ZR?|!cRAOr?Y#%NP%bx`uY1jg*LYJlFNEipmm15B28iCa-it|d#=8KL z*97m4@O)#bfl=E~)_JX58QhY~@=$)Dj6v-;G-{s6x8MfTO9@Z?*mSbDamI89NZM;@ zm4>pV(m0WeJ?Hvi5DbSyAITdVcl5rGN(EI$6G+B~1E+$swaxX-wOQ^>zfrqfmD+0^ z^pTv?`z}D;VzYugq8 zBFnP4Qx*?S*r*3}Y(oD&AGuF~Mn~1s@8t;R5%>Y-H_Or2Wievbu`f>aB&Yi@O#9fkiN|ZX?nm zU*Y7wrSxeX?Eu, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "உதாரணம்: '/about/contact/'. முன்னும் பின்னும் '/' உள்ளதை உறுதி செய்க." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "தலைப்பு" + +msgid "content" +msgstr "பொருளடக்கம்" + +msgid "enable comments" +msgstr "விமர்சனங்களை செயலாக்கு" + +msgid "template name" +msgstr "வார்ப்புரு பெயர்" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"உதாரணம் 'flatpages/contact_page'. இது இல்லையெனில் 'flatpages/default' என்பதே " +"பயன்படுத்தப்படும்.ப்படும்." + +msgid "registration required" +msgstr "முன்பதிவு தேவை" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"இது தெரிவு செய்யப்பட்டிருந்தால், உள்நுழைந்த பயனர்கள் மட்டுமே இந்தப் பக்கத்தை பார்க்க முடியும்." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "எளிய பக்கம்" + +msgid "flat pages" +msgstr "எளிய பக்கங்கள்" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..76d634cdc9560bcb1435ed4fe4cb119f2ce8f7d6 GIT binary patch literal 1238 zcmah|-%C_M7`>GhZ1f`Z*2DCqVzYa9v9xPOWEzH&$l7aM_s(9&X6J5qW?dx+6iWIb z)Po2Tgk&K;CCL9FVVoa=g!Re&Ue1=-u>0tvF2f2L|jFb5tk6} z5Oy6PYKTL`14P#u&pQW9fHp?~uK=F|&jUXI*AVN79qcK{Uw}V>Ht$7;=UoOa153d7 zz)s)~AX2=u2)iyIaO9TFv$gE9HQX9m2y1o00@76#p{|E9Q-w+*by(3)>@Gj6YoaSp z#;Qcmaz(h3U7FO>WS&PXx{gCe)S}X?Mw(m*(opQQRK%)bL+E1_??i=EW?AK_RY;^* zBqE7p7Evy(K&skWGmL~Yf)SmNdCr=ymh45y)&f#yq7gSp_pH|SpipQwn|bsr6|b^| zd?l$B+AaM7ahzSytk9F27@HV5X}*~EbHnYy(eh#)-D$R<3w054If!=>ri$sI>GCKY zIN{k^RhH5bSxF);$|Ewq~*&(|T*NEz?@T-GRxD?61B4 zWU^)Q&u8e`dmh+9ICHHr5 sZG*J|VdA;&zM0k=J2ofSHoWUv!-cK!(%D20cm>Ny*|C?$qq7w6H#T7LYXATM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..0d38aaeac --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,79 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "పట్టము" + +msgid "content" +msgstr "సూచన " + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"ఉదాహరణ: 'flatpages/contact_page.html'.ఇది ఇవ్వకపోతే సిస్టం 'flatpages/default." +"html' ని వాడుకుంటడి" + +msgid "registration required" +msgstr "నమొదు చేయటము అవసరం" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "ఇది చెక్ చేసి ఉంటే కేవలం లాగ్గడ్ ఇన్ యూజర్లు పేజి చూడలేస్తారు" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2ce72c0c5a8bb577063101607dc7b321846a8bf5 GIT binary patch literal 2064 zcma)+&2Jk;7{&)$zFf*zg}8utD})k@tnEaqNF9RsYEYy`M8W06fsJ>(-gLcdc4qT& zOPWNaxc~x$R8G(W;^yWCeIq(`-27d(K2Y&}Y1_vJ&;sm%3z6@Rk3H$|o z4Ez;*8tj2jfPa9T?@#b~@E`CI@HCQ~2G4*zKMRI9V*q>!^KVZI@d~&LZi2soKYi&kdGLgES%DcING%Djf=&+6x0ECVX4dwC&1l z*u;nyJYA}IwP;dWQ}y)Q-r^2T~;qkXNbbU zUm`zrUFld}K(UgMLTcZqSxNS+FG+_q@5u#hmBa@ZM1_;g+kPym5i3pAFwizOXSt-- z$T37g+?X{3C)Ak6frD8!j3g$Gt?EqWn*l+p_IyXGg19tukvofQcuIMJOE&p1#v>DN zVjf)Ak?r~S1+XF+Xdwe*p&B+Cm?}}@IK=gE^>S^6WfP> zu(_z+Vm>!DId$R4)^MSedpE14Rat66xR#5$h?0207#@)wDXGUVRVJ*_qc}dRCL`-Y zP!0Lk$}~Fb=|hpo;pV3OII?|fB8(cUOhMC3)%eI5WyA5ofXy+F~x|DvF zuHu+ZvQOzsx{A%+-d9QM@aM%*oRUw#*Ipi0h{2W@AIW_4#cz}Y&l)$Wz2RkTVtEZw1NWerW*%opo>kS2BtVT zrZ33UDf@4ce9b!e%q@NwNYEkv57N&ySj->0i+vn{nu`9;E~Io|;(zbE&9#D;UH%mO z^wLdyb;rC5eyAN9fD*nTn8_aIfZ)qPHOy1xiX4BY_pkS>c04Be@}SgsI=FkNzI#2p q8Gd*-iQgWan4, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 00:29+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Танзимоти васеъ" + +msgid "Flat Pages" +msgstr "Саҳифаҳои муқарарӣ" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Қимат бояд танҳо аз ҳарф, рақам, ва аломатҳои нуқта, зерхат, дефис, слеш ва " +"зада иборат бошад." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "Дар аввали URL слеш(/) мавҷуд нест" + +msgid "URL is missing a trailing slash." +msgstr "Дар охири URL слеш(/) мавҷуд нест" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" +"Саҳифаи муқарарӣ бо чунин суроға %(url)s барои сомонаи %(site)s алакай " +"мавҷуд аст." + +msgid "title" +msgstr "сархат" + +msgid "content" +msgstr "контент" + +msgid "enable comments" +msgstr "фаъолсозии 'андешаҳо'" + +msgid "template name" +msgstr "номи нусха" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" + +msgid "registration required" +msgstr "Бақайдгирӣ талаб карда мешавад" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Агар қайд шуда бошад, танҳо истифодабарандагони рухсатдор метавонанд аз " +"назар гузаронанд." + +msgid "sites" +msgstr "сомонаҳо" + +msgid "flat page" +msgstr "саҳифаи муқарарӣ" + +msgid "flat pages" +msgstr "саҳифаҳои муқарарӣ" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f477c9be883cecb87b0040d460e4f4ba60aea19d GIT binary patch literal 2698 zcma)-+m94Q6vkTxFQcN87#}pTATi5^?U~sH!a9gi5e$J1gbc<+6H_}~JJZn9J$BXX z3f0yl!cfGfoM4cx)}1RrmJm%%mg$itqO zfPaI(g6|R}2ge^Rc$5fonE58~h+PM5oNM41_%rxC_*Wk{LdM3~0&W41gPXwx5E|~W z{5J7ge(TQ@3`pJOMrijy$>sPsxPjMdY_-Iddq~MWRu}K}U|z-z6^Nu`!X(z-{zcjD zM5-pnDsndIno1*yjcl08SXs=-lS=4rs)R{IOU^41DH()uQ^+_FCY51iCpwb4rF413 z*IXn`M>dsSclW-Xm0PAA;rHO2Fs)FFP{(6Nbkbx#3{)_|N5U;>quOF2j3Uw1N{kI% z1!_)qBh&Zd9q7lv*0e-7jl@ga_#M|mMkzd(gjx)>(PA!1g$|8k-NLx`h6F^Tr5Yz~ z@Fb3wM3gj}D)7VD#!huXV^#?{8#xi?L$%;&x^%p{&0=0gT_xIGZG_W~&4n*z3_d1A z+-=XgL68`x-8f*@NK(ZlaMDezYbc;?iR&gRbbJBw2G zEF%>gPsJ{UM$&FG)t*&V*d&G{?WL-TV5zj7AyV~0H%wLFQH~DQO2o3QJQJEoc}LUa zglZW7VBo(^GT7Hda6-n-q;yPmlGOM!x)}!k8{MY%>q$+NjvlG|`zVX`?Z1h;nwY9i z?(!$Ae)VNBxx2P=YI}96TE);mrshNIb7;34BY$d#n4GTd+PS^TQ#vfQ@$0FKk-{Wt zO&m&S1hKCr(?rE2(P&8{XInBBubi|?WnFH()@;+XWn_322XV8D0)Ab|c1_eHA~uhz9K63B0Rh<`WM;A%_H*cQa@&o2#5f221W2o zdDe46k;-|@u!aL{SKS{>Zn!kv+TE@t0XL|UEE3&vD&ypPmm_}850V;OR+iJ9fgPu{ zzFgK1vV5Co-#O2Cqq?iZyKI=#(9x;U%9F=uHUge(l`MU$J*2F<6vUOnCdW277G%kQ z>6v~WHa;G(ACbfwP(waa7V3P{88a9-cbeI~7!=iGJLz6<8IR~>x5MY0XG=fyXg|5W zq6#Bjm#wYyprdFHNRRZ--~iYqw8G{a>?g#(j>Z}L4UQT6?U1G=dB_b0>_s5hFSBm* zy?0~cgQUo@ICPvZcM^+^uyj`3t$u$`TPs`fg(yYQ`|Tv`zXKP-o`a%Iy#MPAGDQ_& zNKO!2zPmpnbNJ96&e-1~%Aj><7aU, 2011 +# Kowit Charoenratchatabhan , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "ตัวเลือกเพิ่มเติม" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "ตัวอย่าง: '/about/contact/'. ต้องแน่ใจว่าขึ้นต้นและลงท้ายด้วยเครื่องหมาย /" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "ค่านี้จะต้องประกอบด้วยตัวอักษร, ตัวเลข, จุด, ขีดขีดกลาง, เครื่องหมาย / หรือตัวหนอน" + +msgid "URL is missing a leading slash." +msgstr "เครื่องหมาย \"/\" นำหน้า URL หายไป" + +msgid "URL is missing a trailing slash." +msgstr "เครื่องหมาย \"/\" ตามหลัง URL หายไป" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "หน้าเรียบชื่อ %(url)s ถูกใช้ไปแล้วสำหรับ %(site)s" + +msgid "title" +msgstr "หัวข้อ" + +msgid "content" +msgstr "เนื้อหา" + +msgid "enable comments" +msgstr "ใช้งานข้อติชม" + +msgid "template name" +msgstr "ชื่อเทมเพลต" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"ตัวอย่าง: 'flatpages/contact_page.html' ถ้าไม่ได้ถูกใช้ ระบบจะใช้ 'flatpages/default." +"html' " + +msgid "registration required" +msgstr "ต้องลงทะเบียนก่อน" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "ถ้าถูกเลือก ผู้ใช้ที่ลงทะเบียนเข้าสู่ระบบเท่านั้นที่จะสามารถดูหน้านี้" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "หน้าเรียบ" + +msgid "flat pages" +msgstr "หน้าเรียบ" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2248000f4864a06b87e7bebe09e1b5a23d8b503f GIT binary patch literal 753 zcmY+Bzit#U5XKDzA#DSqgXu6e*D?Dd?C@2oWRw^m*hN&u9Dl&6#(C<0^BTSz)d*ifQ7Ixxu_; zHktQK!2DpYFu$1BmxTDudW$J83$e}mhV?q@H`b=^Co7kou4h=AdFR1fLOf3QP$!gv zseEp<6RZ1JR*GUcIrtFa(2RYQ80|6f(aFKb5PDb;xUnVh21d9?pa|1kXMj2dZ!uR* z;uN|OxlpVr^w7tQoY>yl5PfTQDe-bWl`qLU9vMTri#jvG7FEW2*>hQ*$|vK@$$^O> z=x@p`+RK|#xq_aZEwmO|vh_f=7omMWzPEU{#Sv_v^KxKO^Js5u46jHHDJkF?T9w1{ z4q+xF4eHBO1WHJf)R@&t|wBK|@XLip; z{cVqY5zPm^_1@~m#oA#jc*>7Qnw`}ZTlci@qe@|}JCKafI`ZA^!J1sUsB32Jkd>=C zG0nTiur$p5Kbw3;5%ksAqLORImM#Weou;n4(1EjMcTU5dF0|)6fq0G%jy~7w_)~4` zQq?d)o1^v$t>}>>MSSbo|9^TmgcXxnt|h3aHGc>-Z^*|?vzi<0<3kvtP3x@I2-(q> bDI9$zpWFQSFcbqS@+rK)QC(p(rTO, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-15 16:35+0000\n" +"Last-Translator: Welbeck Garli \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "Has çylşyrymly wariantlar" + +msgid "Flat Pages" +msgstr "Tekiz Sahypalar" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Meselem: \"about/contact/\". Dogry we yzygiderli çyzgylaryň bardygyna göz " +"ýetiriň." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..920fcc49bbec9b739be18eccc6eb0ed6064d15cb GIT binary patch literal 2290 zcmb7^O>7%Q6vqcBU*@||xD@fkht!CyokU2aj#|{vw2IWIX>d8AR^#1gd%Cl;W@grj zEg|K`kqaOpfpW|_9C`{8lARM5kdQclIOK-JodXyCvrcRp)Jm*8``hu%y!pR*Z{F{x zPkkZqyo7cZZ6EDbw2vOb3(t?>^Wab5b?^|p1TH)*#3ty$3iu~j2mb=EhVe&W0~~<( ziC^$~4g3`(@Ne*O@a!oeo&(S1M*Sdfj6L~55A25f54<$ z;32pHUV2Q3ZSZq2tUH6vg1$GvFz*)l3HTit^esIB4d8p=>tF(6NPG&u0)7StUAthg z_bvD$_&pfr{R}=0{s!VF{=f_JO5cET%?sdZv|uOr8vMd>mFwX~83Uly6BwRgGd$0Z zQNDxyr_e%Nf`;PO*Zqw*W%oG8T;Dd_BT~p zlPQxcER)ZvBYRAmWui=*q)EtIsdVT#EnSCQ^#S(oV@^&CmNxFS(9+U(Wt-ixsN11e z?f6WW=2lzeJIaxA=5YHfPhFe$RKm$D{)X(n^PJJ9(wYj#!NsY;gj=%Eequ{p!Ctf; zHY-2FMp)`QR9H=Kox^*^k<=FM_ldWZ^Nw1%C8s=NJYdF&sUnIy9H&7`Zgih?-fnXe zDHEhvH&)eTl1*KnZBOxLsk-z~G=f__sSBp8aGuJbVDZ=%dk-74WQwd=ek8d^w=fBM zac&u%q>RYyacBrqz0yet(#?%)q2bslQ_hvqJQ;@njNcpUstAhMc)_N0A(IH5_uYD}wz;`kg#*T^7H?JI zZEdXQ82V^=&D+{cWo>nBWvYC>I#+prd|XkZ--R~MTfPRbm03cbNbA^NxY@W8El%f! zy;^Le6%*&-!qsW9sr*DHY}m@WF09nimE2~oPNrLS-GzlE8h>6mXXql$&n#8MRo3cY zCqpC0!(BF1{r$StrWF%4mlzH48e};WXqv_2po+ zr!zTl5;p@WiTd!MvH&-vl_{l#Mu253)2g^U+#k>fvfq*z6O+o2;MQqHNf>oubW#+` z5`kNW{RhZQLmBtt!i$N#qf^vu6fyzAWWq61?h9LFB!{~=)UkrmUJU&bRVVDwAMH_l zc-Id1jUVo7?sF5Ni#hemR>g8b3702uWDj}PLd=7Gtb`R5kUaIljagJSKipM=HVmK# z16+QDpk$25_azQ5)nzWE$8pCLMGDzuGfruc+mHasXb-y|*O=xcdrroeQ>Sp8q0rnf ztB$6WJE&Cju|Wp4aGO0+RrA3Pl#1z@|LYU;L>e6R2x2Cw%@!%I%Ay0^0-4*?s767r L2rBhxFBSg)$lBi) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ccae22cb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2015,2019 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Metin Amiroff , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:28+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced options" +msgstr "Gelişmiş seçenekler" + +msgid "Flat Pages" +msgstr "Düz Sayfalar" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Örnek: “/hakkinda/iletisim/”. Başında ve sonunda bölü işareti olduğundan " +"emin olun." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Bu değer sadece harfler, sayılar, noktalar, altçizgiler, tireler, bölme veya " +"yaklaşık işaretleri içermek zorundadır." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Örnek: “/hakkinda/iletisim”. Başında bölü işareti olduğundan emin olun." + +msgid "URL is missing a leading slash." +msgstr "URL başında bölü işareti eksik." + +msgid "URL is missing a trailing slash." +msgstr "URL sonunda bölü işareti eksik." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "%(url)s adresli düz sayfa %(site)s sitesinde zaten mevcut" + +msgid "title" +msgstr "başlık" + +msgid "content" +msgstr "içerik" + +msgid "enable comments" +msgstr "yorumları etkinleştir" + +msgid "template name" +msgstr "şablon adı" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Örnek: “flatpages/contact_page.html”. Eğer bu şekilde yazılmazsa, sistem " +"“flatpages/default.html” olarak kullanacak." + +msgid "registration required" +msgstr "kayıt olma gerekli" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Eğer bu işaretlenirse, sadece oturum açan kullanıcılar sayfayı " +"görüntüleyebilecektir." + +msgid "sites" +msgstr "siteler" + +msgid "flat page" +msgstr "düz sayfa" + +msgid "flat pages" +msgstr "düz sayfalar" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..038f647eaad3b29af031ff95a0b12e1ab469992f GIT binary patch literal 2007 zcmZux&u<$=6ds`bGEfi{Ap{a5aR{hc{|JQ^hahN4A&{t1%RAQ6rn5L}4cBueTZIUsT2G@Gbbxbrt~;CpK)PM|A|zkNIJeeZkk&G^r! zPkhJloWyz&YZdDmtbefR`QSdro&rt)KLUON^ngDB-v^$$pRp^zE5HYUcYqHAyTB)b zzXKly-UX(Be*vEb{tbKrNI?$*P6BU&^AzwU*gu|N>`UNpzy@#vPAkB>Km+{rpb6l54q2xmYDqEIB?muDs!5lW?*REdJ3?|CpoMwM~WFn9}DAj?jO*3xu%AU}_s zK-vr~slr=wB|OQrqg~0S1OKWlYHPx_K86K$_Z0mef4y}Tp z=c(yS1?xf}6K?B0(B=6^Hut)f%UantdG2if%*g5NNHz;cYev=_;vD#$g_D(o-y8We z+0$7(sYwxPs}KlO^1L9l z2>2@%t*iM=W^QgSjp9}4l;nIGoyznoIsmsHoY6Y-YHDg?YJ5<8E}czX=(XA^EL2gP zmh(D;zBy_XM??gn)MJ+m7p-#xKgv~-fiLy_RnscAO~glk>&124>T zRZYxrEH}z~uVdNK6x;tfUW)7cYo@cm#!YMg7jwt7_t*B;={H_vd%wnuri=a7J+GSi z#, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "Өстәмә көйләүләр" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Үрнәк: '/about/contact/'. Алдынгы һәм арттагы авыш сызыкларын кертүне " +"тикшерегез." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Бу кыйммәт тик хәрефләрдән, саннардан һәм нокта, астына сызу, тире, авыш " +"сызык, тильда билгеләреннән генә тора ала." + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "башлам" + +msgid "content" +msgstr "эчтәлек" + +msgid "enable comments" +msgstr "фикерләрне ялгарга" + +msgid "template name" +msgstr "шаблон исеме" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Үрнәк: 'flatpages/contact_page.html'. Күрсәтелгән булмаса, система " +"'flatpages/defalut.html' кулланыр." + +msgid "registration required" +msgstr "теркәлү кирәк" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Билгеләнгән булса, фәкать кергән кулланучылар гына сәхифәне күрә алырлар." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "гади сәхифә" + +msgid "flat pages" +msgstr "гади сәхифәләр" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4613a37a47a9c51ebce40091b94b6e35c1130f2f GIT binary patch literal 490 zcmYL`O;5rw7{}+^Wk=5*demUIj-X%xV?;v{BZ_zV#K z=`Zb*{GYe<=lt~B0UZMuz%_6N^nh9+a00vnUq_A;@8Vy0!`Z9O-zc6F5Ll%yzKGMOoN#!ICwo|;Ug__4|ijub_1_!8lP=FEZ@KQYTGYLegv2LzKl6trop z*&t0qz=&u3L)0}7zBZU}0KQw=A`Jp^C(KwJX(mn1tkM)cGbx2Z6E0GoqaI8H;X}R& zJt61n9&%(>v5e!0vx1^HEh=r%<-*#M`u=LQ@@!pD%=y|&RN-$|`oHpBwqK=%f8|cc z)8S$Jz$5NJNy{Zn^;yDtmanZ}=1j;gN)}8TZu@aG!kvS!ZZ_u{4`rfKAv20P@51iK hqzF2>VP0vLpJzP`~hP0imU(t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po new file mode 100644 index 000000000..45fb89325 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po @@ -0,0 +1,77 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Udmurt (http://www.transifex.com/django/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "enable comments" +msgstr "" + +msgid "template name" +msgstr "" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72d6b06700a3a71c69ad8b57353f4692dd1f1fc2 GIT binary patch literal 3002 zcmd5-U2GIp6uv6{t^bHVVLV1b8aunQYe`_sR#Cw;p`js#ClfN=x!oN)JG0Kc+aJS2 zf0TkDU<`sJ5Z?63SfGVM|K2q*GfzI4_|RvbeDT4U_?S2^<6N1TFyaCw{}v zHsGH?&hz?HDeeXG`cWXC`waLp@C)E(;I}}O%4h=^?k@m&kI%DK)&&Ws4v=Ab05E(Q z`Fc79@oWC20}(7YfW&2fjEpe$Vq>)HzgCH9RtwYo2hv@&)n=k$jSohyfd zcFH=pGIlvjJi$ct?HU@!gUXju6l|*6|9V1)KrhcAZByj<5#*1O9PyM^G!RClJT0-$(56I- z5tXa5Jjh(az#k<)tW>0Hc>z<2RLZJflGE>-+75Yg*swMVMIXx=a{Pv*T0?0vO@VV7 zOKOc6?G!X>{pP_9HOxlf!YYT6gyEWww6C^?KvjFb%S}3b=m6g+8`V6eOgA^S;hz1w zdz}@`NCsNSz(^>EwHiz%xWvRFT2D$uvVwv|4i6ng^5cdVNmp>qlt7Q_@R1ZaH7T^G zeJOgQ@R%%XtJ}4XKoY!)tUp=9#!#N>%B%rS$$!VGQ9__LvqODqt*wA zR-}Sm$Xj;aD%fP(#lr5lY+RWGj?z|Nw9ctR| zR%#gWEYx+uHK;To%<7X)tw@IlG5vw(1hk{7b-kF&4G#}zAu>?jfE;0;T*`SB{APe$ zV=&j2>FMs-*HV|y+L`y$l3IPEb@116MCVW$FX+T9IgygObhvN7wX1cGa}CJI+82~V zekqHztKZXWM2plI%=G$=$nmZHVN_E^3hKsGrH)QYA4@v|+D3UQmB^;;+sRlqoB5V$ z(`&Hv^bXD-$o(9;N>pe$(4G=?u$e};ZQ4Wm0v$izjBisH?LrVA+8?67Kf zm3H10e|OuuUBoMa-x`19E9E<=jWZOA^mbckM#SghrFbTuPA1~pc)FIHC%|%YA~~O2 z5b@=B8pc>WhuwKR&$K`2qZnU_XK`@WgjvMVTL?Luj3;L)nWPvi$=UcCa0zP@NRy1m zw~=JrEL|W@!b|a-IZW{~PEMu75CFlZ3I1@27nxo5|3mJ-QTZMkPQ^>Ca@Ht9t#0B* zW!kwYr~+3mUPuLV<(JapV3|8Ki864%=5S>8A3osm6}Yx4&JmI^E+H3Mw04opq;2h@ z+BbLY^my8MG;HnbAFm2V*C&$+;?vi0Y#t$} zKw}!JF%R%Ropyhn-lo>6(Rcx8ZzU(;Ki3Y9D8f>FgCi%Wd1%rhyv}r*b3I3x zmoppmC6nmdH{5}nD8@9H%mNpofd>x)=h)=^1(wO>=6eIxdF=6&V|GFC1kQY#KBLED z(74Qsz;YR!XUrOxa(*=zD~AsXj592IoZpM|ML?>l_4#Jvx%8hDzmpr^4*thv3NwQc zC`Bs7MC8t<5vQT}OXL9;^9Iqs_Ck@rkf?wsaVmD#l Nsp~L!;TrDS;xB-`?ot2% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..8ba1e7698 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,99 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Panasoft, 2016 +# Sergey Lysach , 2011-2012 +# tarasyyyk , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-20 00:29+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Advanced options" +msgstr "Додаткові опції" + +msgid "Flat Pages" +msgstr "Прості сторінки" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "" +"Наприклад, “/about/contact/”. Переконайтеся у наявності скісної риски на " +"початку та вкінці." + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"Це значення повинне містити тільки літери, цифри, крапки, підкреслення, " +"тире, косі риси чи тільди." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "" +"Наприклад, “/about/contact/”. Переконайтеся у наявності скісної риски на " +"початку." + +msgid "URL is missing a leading slash." +msgstr "На початку URL відсутня коса риса." + +msgid "URL is missing a trailing slash." +msgstr "В кінці URL відсутня коса риса." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "Проста сторінка з адресою %(url)s вже існує для сайту %(site)s" + +msgid "title" +msgstr "заголовок" + +msgid "content" +msgstr "зміст" + +msgid "enable comments" +msgstr "увімкнути коментарі" + +msgid "template name" +msgstr "ім'я шаблона" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"Наприклад, “/about/contact/”. Якщо не вказано, система використовуватиме " +"“flatpages/default.html”." + +msgid "registration required" +msgstr "потрібна реєстрація" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Якщо тут є галочка, тільки користувачі, що увійшли, зможуть переглядати цю " +"сторінку." + +msgid "sites" +msgstr "сайти" + +msgid "flat page" +msgstr "проста сторінка" + +msgid "flat pages" +msgstr "прості сторінки" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfb3755ddc6565ff0bd241a9038d71a8cc4e6b88 GIT binary patch literal 1976 zcmZ`(O>Y}j6n#MXG7u012?-XLRU9?rkEo?(LJ&|=2qbD0IV?~mn0Q{CX~#2W=1rU| zQ^l4SUZAu{@CWimLx_?Tr4m`enibL;TY^2mfd%KzIC1zI>G`}n@4j=-J@1Wwd-1|o z0?z=(YZz^emoWas;OE0fgm?is3H%uNDXo@r$uW? zk}ECS@hW6_HmSgJTn<9l3KwOVJIA%)TB>GMWOz#V8ArKARdvBTxj<^s3CRh)Aw{*o zUvg||kKiTBt%OQesqVNgMWLjjK9wyOtjJY87SU&+@}ex?W(MDLSIG4%6=@re#{@x` za?MM!=G~-|B}dkiT8So6Vkt|O8%e50p`ye9Y)-kPQs5XNFRIQb6Wdn^BhN-u_5+E) zPWm4?HG=$rl;hfL$=vLeU_$9BA-zOF*{@a+hJrgI*3h4YB9Ij)gtdG+6v!_kCy=&) zB{gJA@~o;9%2BQqGl73gmX$GS8=pW6@=daDSzg7@%*vV{C}TRTIJWU#R0)leZ&GIF zM#;Dq$b{Q?A9N;-7K)dRV!d|{nJ3k83T+z?ksLK3{B;uFgB^OruFrkeP9#z;cc2eozff@@h#K zj*pH}Ivvk?^!hjzhsQEPZ|dWCE&jgSCQQH6JKZ*LA7e+v4gIa&jMq&1_qW!)N8NUO z2ct=yZM{$NTDRSKhh zeH5?iUA7C7JKNaRF@=dOhDB14VNTeYX|TNe<2pAVY1=|kMje`pbGXS}AjQkPh6+z>eQCbL7uU+^;|2><{9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 000000000..73d30d337 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,84 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced options" +msgstr "اعلٰی اختیارات" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "یو آر ایل (URL(" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"مثال: '/about/contact/'۔ یقین کر لیں کہ سابقہ اور لاحقہ سلیش موجود ھے۔" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"اس قیمت (ویلیو) کا صرف حروف، نمبروں، نقاط، انڈرسکور، ڈیش، سلیش، یا ٹائلڈ پر " +"مشتمل ھونا ضروری ھے۔" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "عنوان" + +msgid "content" +msgstr "مضمون" + +msgid "enable comments" +msgstr "تبصرے فعال کریں" + +msgid "template name" +msgstr "قالب کا نام" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"مثال: 'flatpages/contact_page.html'۔ اگر یہ مھیا نھیں کیا گیا تو سسٹم " +"'flatpages/default.html' استعمال کرے گا۔" + +msgid "registration required" +msgstr "رجسٹریشن ضروری ھے" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"اگر یہ فعال ھے تو صرف اندر آئے ھوئے (logged-in) صارفین یہ صفحہ دیکھنے کے " +"قابل ھوں گے۔" + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "ھموار صفحہ" + +msgid "flat pages" +msgstr "ھموار صفحے" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbee5e44b7121174565b2a83a40f0a0f314f4a37 GIT binary patch literal 1035 zcmYjPO=}ZT6n%bcMEn3Z;^KlE#lB=xE5@lUYPC|ZT1wjeWaee^+R1z4%$uaqjnb71 zK^HE>g{?)D(xTu(OcpMt2>uCiet;YQfSyUJ^^!9uH#z5iym{YG?0wD87o z0B?YggFk`KfWK|$Kf#BQ{|2K(-;>wPBk%uz>_xI4*bN*6@}1ZoS!u*(1Z} ztzpZ8kk5*i%xmuGEaa~m6|mFCbjYQ3Nt|xIRT&4Q8Ttlh5a-hE05CP>zFlKU=!)8OD6r?L8q+uM3G8g zE1z6PvpZS$OG34*yQ*mGS-PqkGt_rICI#<%*i5=2X|bWR?poio z2HDm!{(zvn8B#Ory_DppA91m=-ZCwTCKO*kWW6;^fu*2KS2}~+rn24(NnWCS2Hz{H zr5hL_NKi?!>;19Ztov3`h~jG~+fTL|E~cBzr0Xib{Mf_LBA&Q}>3V{WS?>}10~7*C A+W-In literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..9caf55348 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,82 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# toi ta , 2016 +# Tran , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: toi ta \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "Các tùy chọn nâng cao" + +msgid "Flat Pages" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" + +msgid "URL is missing a leading slash." +msgstr "" + +msgid "URL is missing a trailing slash." +msgstr "" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "" + +msgid "title" +msgstr "tiêu đề" + +msgid "content" +msgstr "nội dung" + +msgid "enable comments" +msgstr "mở bình luận" + +msgid "template name" +msgstr "tên thiết kế" + +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +msgid "registration required" +msgstr "Bạn cần phải cần đăng kí" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Nếu bạn đánh dấu vào đây, chỉ những tài khoản đã đăng nhập mới có thể xem " +"được trang này." + +msgid "sites" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "flat pages" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..58e3c9e570f7612753c43835bbefba3e2c496376 GIT binary patch literal 2124 zcmaKsTWl0n7{`x_xAl&<7mVit6B?QB77%c2iHOBCq0o@xlL?vboZTImomuCc?Y6wQ z7K$LPC1|zaR$9WPq3K1z^s&@%x+mK!eq|;&UfaV z@BF{-n>oL%UNuN?J%_diZ2|2iwD<1A1J@7W)8LQb9&icV4sN)gkSr*`5cmfe1#g1y zsP_-R2Y3j?O@6}TW$(f zLyuJK7pq(gs(B4ndu!Eh1|ctq4G6S91Fl9>@u^r>3hF)V4?4%Q{Up zReKxWqI5%KLqv;g)FPW`WK%Tq+N%* zmMw2KY~EOpkhWpIoyZ^>t)1zqDBY1XZH8}Yo$BaybX`)2bTk~!X0!E(&*o;Fb*Yu% ziri&bRX5>7$^AQahwDPEEv?P9*c$31p&gZkYVF-=s28kDgpn81Zp4?QyPS!peeFB7 zt+jb-yEt>TW;^DnUouL!c9`Op;wTOF3bk1oSGTmCj+^39YNrE}H#IcUO1CM}7$W8I zA%Ff-Id{A~I!B7vPsocsHx|zP@1gKpuE!spEG`av`QvgSC(mD%r~3TDr*itbf98ny zdEOfy!JK<|!M}UElj3ZyID5I`>aHGYe{S`BT5%M>9TalmIFMqjoZrmFgY&V1t+ z2IRz$%#Ri4Kk>&;`#p2DgP;!}q3%&m7g1j~e72dHK?|8o)m?{=7cxNy8 z`4is6d2Ff_l%_7o+=5)}EsqxDz~$26YqGCbo*b7GUwBjfaO4e6qpw2inUe!E%Ju9C zdF+%wzo-UBu6iF2RmM@6<)0m8Djy#67v|;puTdk+4bA}+?T%r2v{z2f5!w4;X>ztS vb)+;ozcMW=a#Wg{k-f*fD`WC#AE{)4cw?j9@S;4~?_ZiG-pEJgb3^1`LkJNF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..a1e058baa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Lele Long , 2011 +# mozillazg , 2016 +# Ronald White , 2014 +# Suntravel Chris , 2019 +# wolf ice , 2020 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-03-04 04:05+0000\n" +"Last-Translator: wolf ice \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "高级选项" + +msgid "Flat Pages" +msgstr "简单页面" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "例如:“/about/contact/”。确保有开头和结尾的斜杠。" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "该值必须只能包含字母,数字,点号,下划线,破折号,和" + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "例如:“/about/contact”。确保有一个开头的斜杠。" + +msgid "URL is missing a leading slash." +msgstr "URL头部缺失斜线." + +msgid "URL is missing a trailing slash." +msgstr "URL尾部缺失斜线." + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "带有url %(url)s的Flatpage已经存在于站点 %(site)s" + +msgid "title" +msgstr "标题" + +msgid "content" +msgstr "内容" + +msgid "enable comments" +msgstr "允许评论" + +msgid "template name" +msgstr "模板名称" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"例如:“flatpages/contact_page.html”。如果它未被提供,系统将使用“flatpages/" +"default.html”。" + +msgid "registration required" +msgstr "请先注册" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "如果被选中,仅登录用户才可以查看此页。" + +msgid "sites" +msgstr "站点" + +msgid "flat page" +msgstr "简单页面" + +msgid "flat pages" +msgstr "简单页面" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8a1653ec222ddac3b3c8c6c5d690d8033793efc4 GIT binary patch literal 2200 zcmaKs?QaxC9LGmRk;6yS7bY0zg(la?-d)iba0rn{Z9=7K4t!(MY;UJ`TlRL(o!LH+ zXpX{3u`MmpRtqhZMzFS)r>0P7fqy|?`NG5(rMr8VnBY5KsEOa%z4ibDo16K}Z)fH^ zzlXi~ech@-g6CDV^=J!dZ=ikp1UfuFgD-)2g%Cjx zX|fhg*5#GpP1s34$abwwHPcL^R$l0q$;s{xHJ3M7k}eiT;%c+yh_hsvFYahRU;y#~!2i2sw2{Fwl5Vp~X-|Ud=GR z>{OGqVp)+h0=c>tDzZAKIyV;!!-D2*t4-IKwgIobiu&Vy<`T!#P6KUnJ+ zksdKq5M~A;q^(>ICMPn*R0dHUabmL!5@xINqoX$a%+YP85t%biP@_EdFlwqfMuaX5 zMjC9Zm8FGJrzr;z5_To2)~cErE7HjFmMxTep3yaBhm+w-%1Y8m!#<^vwdr!HvI}ZS zx-n6^SxIbGYB$lu=49gCcM^CadsQx!l&zZh+=OK(Y3h)p+TYJ|11L}X`}RwdP$M+|~>h&ZyNn_KWbsWxX~>;BXpWm9#X zJg$Y=%5F1l$v5SXFtvFsdAQZpZzd~59%8V&M(dNdHn-Rw@=?&==Epj z{n;zt$dRR6cl>WA5LH#-{@WnjO#I8|+#56HvBTxjapGUQ>Q4=?{LQI*{i=WMYj^rP zcVuE|uHY7WyxEIx&tSM5hq=XTOSk&m(SqM~bNTj=SwKd;Gb7&g_sDQ*dKkrSBmo5y2`ceoI-cMN6hi#=Jx3DuwOFdV- zp=0j!x85bx=dd?8hcO1_`7_a24F>MbK~y8!6pXtk{Y!crczB_hu*M z)E6+jR_+Ub;ih}}qm7EiA;+!{n#~tYNC$7L4E}!cq{{d#QIvfB1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..cc555780a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# ilay , 2012 +# Jannis Leidel , 2011 +# 619e61dbdb61c57213f62815aaf60e01, 2011 +# Tzu-ping Chung , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:03+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced options" +msgstr "進階選項" + +msgid "Flat Pages" +msgstr "簡平頁面" + +msgid "URL" +msgstr "URL" + +msgid "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "例如:「/about/contact/」。注意必須包含開頭與結束的斜線。" + +msgid "" +"This value must contain only letters, numbers, dots, underscores, dashes, " +"slashes or tildes." +msgstr "" +"此欄位只能有: 英文字母、數字、點(.)、底線(_)、刪節號(-)、斜線(/)、波浪號(~)。" + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "例如:「/about/contact」。注意必須包含開頭的斜線。" + +msgid "URL is missing a leading slash." +msgstr "URL 缺少前導的斜線。" + +msgid "URL is missing a trailing slash." +msgstr "URL 缺少一個斜線。" + +#, python-format +msgid "Flatpage with url %(url)s already exists for site %(site)s" +msgstr "網站 %(site)s 已經存在一個浮動頁面,其位址為 %(url)s。" + +msgid "title" +msgstr "標題" + +msgid "content" +msgstr "內容" + +msgid "enable comments" +msgstr "啟用評論" + +msgid "template name" +msgstr "模板名稱" + +msgid "" +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." +msgstr "" +"例如:「flatpages/contact_page.html」。若不提供,系統會使用「flatpages/" +"default.html」。" + +msgid "registration required" +msgstr "請先註冊" + +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "如果此項被選取,則只有登入的使用者可以檢視頁面。" + +msgid "sites" +msgstr "網站" + +msgid "flat page" +msgstr "簡平頁面" + +msgid "flat pages" +msgstr "簡平頁面" diff --git a/venv/Lib/site-packages/django/contrib/flatpages/middleware.py b/venv/Lib/site-packages/django/contrib/flatpages/middleware.py new file mode 100644 index 000000000..9c6a7273c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/middleware.py @@ -0,0 +1,20 @@ +from django.conf import settings +from django.contrib.flatpages.views import flatpage +from django.http import Http404 +from django.utils.deprecation import MiddlewareMixin + + +class FlatpageFallbackMiddleware(MiddlewareMixin): + def process_response(self, request, response): + if response.status_code != 404: + return response # No need to check for a flatpage for non-404 responses. + try: + return flatpage(request, request.path_info) + # Return the original response if any errors happened. Because this + # is a middleware, we can't assume the errors will be caught elsewhere. + except Http404: + return response + except Exception: + if settings.DEBUG: + raise + return response diff --git a/venv/Lib/site-packages/django/contrib/flatpages/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/flatpages/migrations/0001_initial.py new file mode 100644 index 000000000..631ebbcb1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/migrations/0001_initial.py @@ -0,0 +1,69 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("sites", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="FlatPage", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "url", + models.CharField(max_length=100, verbose_name="URL", db_index=True), + ), + ("title", models.CharField(max_length=200, verbose_name="title")), + ("content", models.TextField(verbose_name="content", blank=True)), + ( + "enable_comments", + models.BooleanField(default=False, verbose_name="enable comments"), + ), + ( + "template_name", + models.CharField( + help_text=( + "Example: “flatpages/contact_page.html”. If this isn’t " + "provided, the system will use “flatpages/default.html”." + ), + max_length=70, + verbose_name="template name", + blank=True, + ), + ), + ( + "registration_required", + models.BooleanField( + default=False, + help_text=( + "If this is checked, only logged-in users will be able to " + "view the page." + ), + verbose_name="registration required", + ), + ), + ( + "sites", + models.ManyToManyField(to="sites.Site", verbose_name="sites"), + ), + ], + options={ + "ordering": ["url"], + "db_table": "django_flatpage", + "verbose_name": "flat page", + "verbose_name_plural": "flat pages", + }, + bases=(models.Model,), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/flatpages/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/flatpages/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdd306950b7d0d13965a54cf4ef5de39cabefb79 GIT binary patch literal 1539 zcmY*ZOK;mo5av^+WXW=#eWqbw0R+^KT!W%W>(p+5I0zEwLI`D-nh~`&MJl^X+tSHE zd-V?}kp6)Fjh^xcdLht@d-AQ<21U}@rDZ!LINbSWIFD~`lu{43#2%lca@ zmoJZ$`}D{=B)|eYv&MF0kDbV|tt|^2aDTDDMSIu%*^ONAo>@Krlzgq8Q?McSR;S;z8xAj+P06}U)2%o}d@cB!RtnHxZwJ1l=I>O^?RnQkfiJm28MW8f z*YCzW=Zdo|3N|yQp0E@vhePE&e6YFG^Q!hfilmSj=WL8sQ=%YWKEtTZN>#)IflMJp zixa`eOibfFoK|irvQr@DD);%*M?IG)XNPfyd8$StAUp~np}c^Hm9MzU@bnd-Jx6rt zWjv~dL6IxW6@mJT%1<(u??qkAS(0HqD8^&5%GntZ&H?If0dUC5Ox3A63da-btnQ#Z zpkUu0GJ^14cyjb|NTvxjE!T8HHc+wFR!3@_ogDqP8a^C`YQ$y8Wqxw>s|qKg*yn)o z6~P$Fsig4X0nf6ql=yDIvog+Ooo-U@*?B#oW|SCijxd|V3J=vq`{D|@MmGeeT&j9l zV}UP9E)Zs07d3^05f1irHAS9H!>mYCgcY9aVuY;gN-)%vg{lbmIUbn0O^>s8;)nD2 zJy%?%?Bco>ntS1sn6=EztUja3A&wnY)bw^?m*r^@&v~3R^(xc}X07w3?0Hd82%zc7 zQ?vU@*HnkNc6r3&NmdG$5ig#ZxWktyw@c)7vI#Ztp+mjni7Poj1$gvh6r+S~))19mmxk-oK=Gj6WgX zYtq`r=TGnMJVK-4y$ar%Y>#Q9n{}zHkQl-Z$HsWUNxcfGsw()p-nwsW(xk3-*}Cce E4>MB6egFUf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/flatpages/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa46a21fca4d5aff47e7f5587a18ef4584b73833 GIT binary patch literal 209 zcmYk0F$%&!5JfkVLIe+D5z~u^ps0n2D0YKkldNH4vKw|L0gvRB1S>CKZRKvI59WRT zOfzOU90;A#g1nTvFmYxyTTJ6iCAsm3xW>XtMx!ZC64b~^ VGHz~<{htCIxugT z*=EgfI1ol5Z~Q9pa0|%0#$(s1S_EuEL!IUc&G{jK?{{oR5b;p!*E%9*UmZTJF~k^ z({hmzt$5=*B#(Rpz6dWTAtCYPH=Yp?X7=pHDHVc?vYwlpoqxaCnax*MTLhlpzWllO z%PJwi;>+^m!^^wyZ@REZB56v-G@=w~ma?%Id5-o{e_V@dj`q`FT#xFMD0~(xzp@s_`ThRv~SawMjNKNZ$bF zEipv?`cT=pKh;`gHa3Y>ecZhKc<}Nr{F|3xQ6!?0L`(*fN$(+zJn75YLlXItg6Vo0 zqV5Uk-p-}k?qk%82WeFHKKz?&uoSc)F)5f1Ej?xhJHdA^^CZFF!qXd$?>W9N$qwWS zzBsB)x7)Qc?B|(Phc?c{SZM}2%f_cdC!&|Ca>ZDot%>g@cCYlOM(MU+`bMP#T?a|s z#05e7f#?u^e!u(v)$S)CX1ceh#)$3*d4D>FyqNBXiT!BW>)uGTu~%;Ce5Cred!Vv| z?#D^5i)p(u5&eA#+jQkfWW#(5J<~~VYcS7;*;=4s#n7CwJCl25BaV|Sv2l#vm^D}e z>eDqEFrTi|7Q26OIjfz8bRPp=JT)LN!!Enu0U>EY4SIKYSms$a@{XAG zN3~H4Q<{%R`H>Wjv*(9hw5#k#bh zH#&d?3)&#jAT1iMINrG$!Lr9Jx*GWrh=LxI6LQ2Pm2m!~w?Pv6EIEQhZE3+CP#+HL zKGo058mymXjFRl_>Wd7XCDPkxdK325H^`BnG1-9XV6wSEWNY8kZ&-E=r}%_^3%cYA z$kgV0!~L4x2Hq-2u7TvubCOSiWZ<*~)-P&>Uj%afdvAxFNwuFAKS33=I6Su%oHKQx zxJXmJfQ--Ufr|r?q}UGlAlDqg=ksRA5oRtj>69EKCP5*aI~g-k{bZ2zId%>H8thyW zKs(4cJQ?sTuVfPA^vpLZ+3xUL`DBXS*J)fFem*ZVjs=fj#yrWm;0N=r<+R-0%Z=iQ zJ5LOkYLH|~^4>kCX?Itc-Cf>K1vt@Zxef1SJfGl+5h>r@g-9O>ID0xzjoa(OskBd& z9w)}Y9>axJ7=;8^oI0uC2#uj7WkY^^1jG; z4*)%%NkC3;XeSWKWi9|Q%jZ48@PW?9PsC;(*Ur7nio>f{s}y6YeSL}JxIFXv^G$4F zOMz~F!9T}B!$g092Ip|QPs(aW|h}^M3czYcL{R#@dFfLpY02 zHvprDx5H%LMHH8K^^KikQIm2N(L*Dl6uhY}hk_j_|-_sd(%-J8v^1%Js zpFp+Q+3lfSi`L8}h4JmMhU-G_-Q01bG#|myBLj^)E+trN)uLqAc{&MwPMRq{Kyb4R>1;$#GowCyxYwJMyEc9Bm zK|?R3E%@`<8cZeqI*4w!*UF%}wNy^8R4*NfXHX5>m(MtOsp&kb$qo!Fl^QpMqn93& za= 5: + if bits[-4] != "for": + raise template.TemplateSyntaxError(syntax_message) + user = bits[-3] + else: + user = None + + return FlatpageNode(context_name, starts_with=prefix, user=user) + else: + raise template.TemplateSyntaxError(syntax_message) diff --git a/venv/Lib/site-packages/django/contrib/flatpages/urls.py b/venv/Lib/site-packages/django/contrib/flatpages/urls.py new file mode 100644 index 000000000..d4480b3fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/urls.py @@ -0,0 +1,6 @@ +from django.contrib.flatpages import views +from django.urls import path + +urlpatterns = [ + path("", views.flatpage, name="django.contrib.flatpages.views.flatpage"), +] diff --git a/venv/Lib/site-packages/django/contrib/flatpages/views.py b/venv/Lib/site-packages/django/contrib/flatpages/views.py new file mode 100644 index 000000000..776f1796a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/flatpages/views.py @@ -0,0 +1,70 @@ +from django.conf import settings +from django.contrib.flatpages.models import FlatPage +from django.contrib.sites.shortcuts import get_current_site +from django.http import Http404, HttpResponse, HttpResponsePermanentRedirect +from django.shortcuts import get_object_or_404 +from django.template import loader +from django.utils.safestring import mark_safe +from django.views.decorators.csrf import csrf_protect + +DEFAULT_TEMPLATE = "flatpages/default.html" + +# This view is called from FlatpageFallbackMiddleware.process_response +# when a 404 is raised, which often means CsrfViewMiddleware.process_view +# has not been called even if CsrfViewMiddleware is installed. So we need +# to use @csrf_protect, in case the template needs {% csrf_token %}. +# However, we can't just wrap this view; if no matching flatpage exists, +# or a redirect is required for authentication, the 404 needs to be returned +# without any CSRF checks. Therefore, we only +# CSRF protect the internal implementation. + + +def flatpage(request, url): + """ + Public interface to the flat page view. + + Models: `flatpages.flatpages` + Templates: Uses the template defined by the ``template_name`` field, + or :template:`flatpages/default.html` if template_name is not defined. + Context: + flatpage + `flatpages.flatpages` object + """ + if not url.startswith("/"): + url = "/" + url + site_id = get_current_site(request).id + try: + f = get_object_or_404(FlatPage, url=url, sites=site_id) + except Http404: + if not url.endswith("/") and settings.APPEND_SLASH: + url += "/" + f = get_object_or_404(FlatPage, url=url, sites=site_id) + return HttpResponsePermanentRedirect("%s/" % request.path) + else: + raise + return render_flatpage(request, f) + + +@csrf_protect +def render_flatpage(request, f): + """ + Internal interface to the flat page view. + """ + # If registration is required for accessing this page, and the user isn't + # logged in, redirect to the login page. + if f.registration_required and not request.user.is_authenticated: + from django.contrib.auth.views import redirect_to_login + + return redirect_to_login(request.path) + if f.template_name: + template = loader.select_template((f.template_name, DEFAULT_TEMPLATE)) + else: + template = loader.get_template(DEFAULT_TEMPLATE) + + # To avoid having to always use the "|safe" filter in flatpage templates, + # mark the title and content as already safe (since they are raw HTML + # content in the first place). + f.title = mark_safe(f.title) + f.content = mark_safe(f.content) + + return HttpResponse(template.render({"flatpage": f}, request)) diff --git a/venv/Lib/site-packages/django/contrib/gis/__init__.py b/venv/Lib/site-packages/django/contrib/gis/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d80bd5c6420ae8a5051904953a0a8f6b7c859143 GIT binary patch literal 192 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/__pycache__/geometry.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/__pycache__/geometry.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a1fa6d999841ecc54a9da3763a735e52ebfed96 GIT binary patch literal 574 zcmYk2OK;Oa5XaY>2We@gNSwHF$RWnq;R>V)QQ{g)j%_*4A?`MjW3ODNereY(B$N~1 zf$zY9FJy@mCvKd3Vq^Evk#^=c|C!lWdVYQinEhM--u{39{5d91t-+FyY|$ZeKJd8+ zIL8PhE`|=|0ET`8gI(i0befEtkKAJ1V%%o>GoM=kzWtZ&0Cb)!yPL>8>^B5&yfn_j z2p^uWuilF9CgSC_&^!EE_ZOBryXcS2Atj+dLgEt>!YAF2rMgd%jk#=FtEr)B^3+xhoxhq)WksE9 zhHfsbrM+^H{{~4&L;~s~{?)a>_YN=CeMAL*jJ`^*ztz~|J0&F8dFk)mBuJ$q45isJt^EX~&1Ne1;7#A7CB=jy ztDw|Hv(zhMoa7WKVg9MuqRWubTr^3#!(NW=aB_#VaEoY|V=;5RTQ|TI)wdgXX_Aw0 rI|xEL2yhzXob07+Uv`FZ>K73naqL{$Wv&Cx;8_cDkZZP@58cjxe@&&e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/__pycache__/measure.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/__pycache__/measure.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d26647482160747dd73f86f5cbc9fbaea2b6e58 GIT binary patch literal 9482 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/__pycache__/ptr.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/__pycache__/ptr.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd1534a3c4a501f65491a07bec3440eeb2869b12 GIT binary patch literal 1352 zcmZux&u`l{6ecBEmK`T;gCN*|uG0=X2t}RqielL6tzCh@D3%q&1fhgXGO0XS)JQ6u zjhveNA?vaK5`mp|+HL0nL-!tSXW0)De0+R-kK*^J6DxpEl0!6c75Dquu76s zK_Hmsp$PIw_VO6!zD)9g9EwmxSLBlBJ91|}620w8#G-#i@?8f)v9;zF#wZfQ77;DOf zWb7?!JWyQH{ z&Wqz}R+!4l2W`o}FVCbY#Jp_I)R9k7H9I=1%n@8@+%8=R^DTsoUyGxdMs!G{cdOes zt272D9)QEPp?;mLF)S{C7acMC7Bol`y$nDHp4jk$UeZHg#cPT?EE14TOy0d`kgP>p z+GkQguD<48i$63z}D^oSbmJOFK!TjN-8+-%uORbf55gIh!BMbBZCOtxdNY-L! zYkMCQ6N5O2ZUesm6dpr-;gRLO@E;%w{o!f=rAJHf2AyzP&s1vyUzwo<0V?x%9eFS@E55y=6=sxtA2JezTR|o&7 z^u{^c(|vGtL&g?LbTu&3jTrl(E9*5+{jrKOw!R+{LgV534vKvg@OL6mxXnXdLx_#E z@ILebI{aNIulZ`>{{|~+4nZU&qEQb9^dJCU4u*8p*XT3NLKkx+fYJWrX#BquUGiv+ O;8T3z2G1Um{qQgJjYX>f literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/__pycache__/shortcuts.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/__pycache__/shortcuts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08cd729bb914b803eaf63235aaac866a59f8d5a0 GIT binary patch literal 1380 zcmai!L2uJA6vu5RP17!AV+aI@Lk=9M&^kDR5Mpc{o7e!Ap@}G>%3`lem&B3nZY&z7 zaRt7@DskCYio}T%H_jY@XLrCPgmC5ep53^9|KEElZ?&2T#@AP$wk#W=&w6ooxUhHt zQ@#d65ydGAv?nRfNIOk7LrnH#tmm5w>t2pXFxpRy5a9?W5+ zKhy~tFHw&75v^1AEefV+gEql?bc%Z5TNFP>?ba8#9X)B|s{ZgmF}eB_LRT`Sl6)W` z_EwZCdQ28PmkicU$|K6ea*XxC(_w+vdKO{I5R5`c=nYo*m>gmXerS!Y53_H`Avv}w zIYh@b$Mba8a+e*cX@4Lqq|hO`yv4@N>mQZV-C`_*lHRcSa`9v(O+Cy=soXlRJLSn zx3UF`Xxj=bxJR3^BIWi85;Jh-8(q8`zK~4Fus4!23YU01%2=*s_$W~;qpff`5mL=P z6MV>G6@rAla4p#iB_uFcMDcDkU^1k`C?D|onCBpEYkrW(dAY-dibqOzii67g1*H!; zOvAm>1LKfcd>@8qB9K~b z94Hvhz~1zQA4x;|#z+Ef^Ht1+02TiF>U!5#2L)?)%Ii^4q)8m9gy-{nIqeKMAEa!K zMMCZ9(%gKVr6!Qe={<_aE6mvm;QfXmEr+E!A)9d`%U9)kQ z35e^_7x1P>U&Til@S-Pgo^y%SV+`9xS66jaeN=tj`SS85g6q$#AH(k!A-{~XxNLNG zaqHWtIN>xQDGew!wv||^9WbB1b4iERt$l!EXM4w(BLN`ZK|eN# z|Cft~hkFmV{)DQsvs8IoC+~;j`nQx znaU@U3+^B0${$AYo8w4v?Zth zf$AVBNB*YrrOtl7{|t+HwP(r)rAqp=N`pKAkrqh=B3N4hy}0eTbxVo2 zrO;5@*jdnSdgL;OfN7kiriZmBGYwG|i*H1&AoS_$y}RKHEtC$Qms&^RgFG%%k%0~$ zOV}@m;UlRuY$2~>5koi;*(7`_hoP1rwhAOT8VMcpag>enUYuv3uxcv znQ6m}p>LvM))Kv9S#$|ym0D-6y@scY!p=NfUB#3R?RVVZ@;^-E42p)aVEz221exeA ps3_CO2C}Ej7ggqOHucS53u+YuwRbPgd6|g&=6SWrT_V_t{THzc=^6k4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/__init__.py b/venv/Lib/site-packages/django/contrib/gis/admin/__init__.py new file mode 100644 index 000000000..d5bd54c47 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/admin/__init__.py @@ -0,0 +1,34 @@ +from django.contrib.admin import ( + HORIZONTAL, + VERTICAL, + AdminSite, + ModelAdmin, + StackedInline, + TabularInline, + action, + autodiscover, + display, + register, + site, +) +from django.contrib.gis.admin.options import GeoModelAdmin, GISModelAdmin, OSMGeoAdmin +from django.contrib.gis.admin.widgets import OpenLayersWidget + +__all__ = [ + "HORIZONTAL", + "VERTICAL", + "AdminSite", + "ModelAdmin", + "StackedInline", + "TabularInline", + "action", + "autodiscover", + "display", + "register", + "site", + "GISModelAdmin", + "OpenLayersWidget", + # RemovedInDjango50Warning. + "GeoModelAdmin", + "OSMGeoAdmin", +] diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6025ac5c8a20b0cf884f583dcb4296af06381449 GIT binary patch literal 738 zcmbV}L2uJA6vv&UP203-yRi?zHHWnqP6#2U0bQkTMQs7eiU@9ORUUC1*-oc@n~57= z$r2|{+&FW>FWsTyzyVA7$?qwC@BjW!#&Lw)`St1h_Q6N!2L#8*<CX-nQLjM4 z!=CW5F9IBh7H)|)Zi^6yqJul4i@TzSdm_S-=;OWzZ~S5)VjPPh9*PkjHMyV|ixYg} zp&g>FuO2?7?KMimpRNl^`Zl^+uI6}ov$!5m+NcyL(@6&?08wRazXBy(jPh9F_VlGc%}kC3(y9HfDWJw=mEfa)dvg! zL%j`Po3gvW5G1bc*#wcO)9s=7edmyU@tw_ScApS&{;h2 G2L2xqZpW1X literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/options.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/options.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ba529b3dcdec8d689069e64a93cbdae0985966a GIT binary patch literal 5729 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/widgets.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/admin/__pycache__/widgets.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d00bf2ea79a66b1335e677910bb1c6b1b562efe8 GIT binary patch literal 2910 zcma)8-ESPX5huByx4Juh*m0pI0k&>b=Yab3&;SJjHHdA=s!>%5Y`H=fmo8RE-f88% z-3!T+tixWB*8W4J$Mms(Odl5LQ=j@)ATMo@kIryUA8s5VdmuS8N~5LQ@0iIN>xS5soaQBNj1=w3S&SJF-VksY~hITT4 z)QB2DyP|OxoRgGB3xb?Axpz*Z);8fjZ@eVDA-oq>)aLXF=>-1*TV%IGtJe1By`8P+ zeKFQ)k#`sfwmy1tDX5yrZi`|hv^<6N{+@WQ6Dbm)7qm=rl_jVdwRZ09Za=-Zy%pbo zwE1Yd!jF=CSakbEu4Q`A9j2;}Hm`pSm=B?;5IR93%1OjHjV#W%^^!z3x48qO!(H&% ztCl_*i+m?J6;kb|d?@tvUJ%0fSma#DFv-KK1>q<-4hnkg4 zTQ7i`y4o(;3p!)_B!Al`+R^TSoo-PwvniP_YVXYFZpljf+`;*}{44n-5-4<4*%9^t!Q%DG~66b2f8$vvh9N@|N-U zZ)QzXnQ5!c{NrM!~4y=^#xGGEw=0ry8lfid5FgGd=y~mXw7I z`;dnkulV9l!+|VD;c=2pM0jUS-3i}aQ=Q0%9RB^*-s4ZI1;~oHFsZI8J5NU9D|)x0 z@w5p$)EOJEsmcZ86EJKmneypIZOkP5ppc{Q8^mR`Jza!X3>xp;sN8WPlM(DX8S_Mo zDo7zMl}_@$s4S(W#1xbkbXD*Nblupi+^iT5g{&NbXN?+o##o<@MdeJ!V-PN&h9|{1 zOZq}CA!ijsSb6EG#AKFOX4L|y$5@O|zMTe~Ok@Mu#2Lqgt8x;prK&90IBFiLSS14y zV}#7k@~5~HZubR|Aq-y~K6tvNP?2b5S(I7E2;#1y#dj!)5bec}2IFs&l! zY}TYJG+=?#wi!jbO_!+uIs2A5?7KE&-})B&#&+6P;H+3}YO}x!D5EY7;0HX=*r5M< z$pyXtx{bhYGM7%@xkd zg%N6yH#GyQ#oK0F8SGItiYz`bi!m?0L<2sZ zu3vdGzr<^$-`&WHev+vVx|g~?=&1ZTY={oN^M4M`GaKH%cW-Zf{ABz6HFf*K*Scmx z(7fho3yh8HasZ`IadHj1>92mYt5@0`%b19QE0Ga&tf{eh zRI8{xN}k73s3M!xuQ>3JFIm_vzy)>SqXy7h<_;=%9&taPjN)lgjG`7$5fD4#SY#^l zQLml=>XnH!uP2&N=a&-?>yX{SfY`S&l&-u9Oyvx+BGHwV!p$$Ez=CS58hZeQ1}8fW z`4))fJJ|gKI&^bvfKt^E85sOESQdGJYzS)6LY=~9oqQX0!^;lS%Bb!Gq27bew*XCC zMt%6zy-)4`*v&Q|iI2DgtqH#XMw`K!&+XUY$h8#Q?YNa68(-qM3gWnaa)55e@n@4H zLob2z;+PlxIF`3BoVw;{h%)1?2UHuH!m{#-O?|t$DN)*4tUP>4;MIzL^8G($-62mh z^F+LURusxSP3Dn`Zq7HrXHa$L7%d$z18G-@plAeSDDeRK5xF o3Z62(V;(no3wYz^>rPeq8+BAZK;%&P!uh1h>QFcBfZnwJ2a%-*u>b%7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/options.py b/venv/Lib/site-packages/django/contrib/gis/admin/options.py new file mode 100644 index 000000000..9eb6af633 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/admin/options.py @@ -0,0 +1,180 @@ +import warnings + +from django.contrib.admin import ModelAdmin +from django.contrib.gis.admin.widgets import OpenLayersWidget +from django.contrib.gis.db import models +from django.contrib.gis.forms import OSMWidget +from django.contrib.gis.gdal import OGRGeomType +from django.forms import Media +from django.utils.deprecation import RemovedInDjango50Warning + + +class GeoModelAdminMixin: + gis_widget = OSMWidget + gis_widget_kwargs = {} + + def formfield_for_dbfield(self, db_field, request, **kwargs): + if isinstance(db_field, models.GeometryField) and ( + db_field.dim < 3 or self.gis_widget.supports_3d + ): + kwargs["widget"] = self.gis_widget(**self.gis_widget_kwargs) + return db_field.formfield(**kwargs) + else: + return super().formfield_for_dbfield(db_field, request, **kwargs) + + +class GISModelAdmin(GeoModelAdminMixin, ModelAdmin): + pass + + +# RemovedInDjango50Warning. +spherical_mercator_srid = 3857 + + +# RemovedInDjango50Warning. +class GeoModelAdmin(ModelAdmin): + """ + The administration options class for Geographic models. Map settings + may be overloaded from their defaults to create custom maps. + """ + + # The default map settings that may be overloaded -- still subject + # to API changes. + default_lon = 0 + default_lat = 0 + default_zoom = 4 + display_wkt = False + display_srid = False + extra_js = [] + num_zoom = 18 + max_zoom = False + min_zoom = False + units = False + max_resolution = False + max_extent = False + modifiable = True + mouse_position = True + scale_text = True + layerswitcher = True + scrollable = True + map_width = 600 + map_height = 400 + map_srid = 4326 + map_template = "gis/admin/openlayers.html" + openlayers_url = ( + "https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js" + ) + point_zoom = num_zoom - 6 + wms_url = "http://vmap0.tiles.osgeo.org/wms/vmap0" + wms_layer = "basic" + wms_name = "OpenLayers WMS" + wms_options = {"format": "image/jpeg"} + debug = False + widget = OpenLayersWidget + + def __init__(self, *args, **kwargs): + warnings.warn( + "django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin are " + "deprecated in favor of django.contrib.admin.ModelAdmin and " + "django.contrib.gis.admin.GISModelAdmin.", + RemovedInDjango50Warning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) + + @property + def media(self): + "Injects OpenLayers JavaScript into the admin." + return super().media + Media(js=[self.openlayers_url] + self.extra_js) + + def formfield_for_dbfield(self, db_field, request, **kwargs): + """ + Overloaded from ModelAdmin so that an OpenLayersWidget is used + for viewing/editing 2D GeometryFields (OpenLayers 2 does not support + 3D editing). + """ + if isinstance(db_field, models.GeometryField) and db_field.dim < 3: + # Setting the widget with the newly defined widget. + kwargs["widget"] = self.get_map_widget(db_field) + return db_field.formfield(**kwargs) + else: + return super().formfield_for_dbfield(db_field, request, **kwargs) + + def get_map_widget(self, db_field): + """ + Return a subclass of the OpenLayersWidget (or whatever was specified + in the `widget` attribute) using the settings from the attributes set + in this class. + """ + is_collection = db_field.geom_type in ( + "MULTIPOINT", + "MULTILINESTRING", + "MULTIPOLYGON", + "GEOMETRYCOLLECTION", + ) + if is_collection: + if db_field.geom_type == "GEOMETRYCOLLECTION": + collection_type = "Any" + else: + collection_type = OGRGeomType(db_field.geom_type.replace("MULTI", "")) + else: + collection_type = "None" + + class OLMap(self.widget): + template_name = self.map_template + geom_type = db_field.geom_type + + wms_options = "" + if self.wms_options: + wms_options = ["%s: '%s'" % pair for pair in self.wms_options.items()] + wms_options = ", %s" % ", ".join(wms_options) + + params = { + "default_lon": self.default_lon, + "default_lat": self.default_lat, + "default_zoom": self.default_zoom, + "display_wkt": self.debug or self.display_wkt, + "geom_type": OGRGeomType(db_field.geom_type), + "field_name": db_field.name, + "is_collection": is_collection, + "scrollable": self.scrollable, + "layerswitcher": self.layerswitcher, + "collection_type": collection_type, + "is_generic": db_field.geom_type == "GEOMETRY", + "is_linestring": db_field.geom_type + in ("LINESTRING", "MULTILINESTRING"), + "is_polygon": db_field.geom_type in ("POLYGON", "MULTIPOLYGON"), + "is_point": db_field.geom_type in ("POINT", "MULTIPOINT"), + "num_zoom": self.num_zoom, + "max_zoom": self.max_zoom, + "min_zoom": self.min_zoom, + "units": self.units, # likely should get from object + "max_resolution": self.max_resolution, + "max_extent": self.max_extent, + "modifiable": self.modifiable, + "mouse_position": self.mouse_position, + "scale_text": self.scale_text, + "map_width": self.map_width, + "map_height": self.map_height, + "point_zoom": self.point_zoom, + "srid": self.map_srid, + "display_srid": self.display_srid, + "wms_url": self.wms_url, + "wms_layer": self.wms_layer, + "wms_name": self.wms_name, + "wms_options": wms_options, + "debug": self.debug, + } + + return OLMap + + +# RemovedInDjango50Warning. +class OSMGeoAdmin(GeoModelAdmin): + map_template = "gis/admin/osm.html" + num_zoom = 20 + map_srid = spherical_mercator_srid + max_extent = "-20037508,-20037508,20037508,20037508" + max_resolution = "156543.0339" + point_zoom = num_zoom - 6 + units = "m" diff --git a/venv/Lib/site-packages/django/contrib/gis/admin/widgets.py b/venv/Lib/site-packages/django/contrib/gis/admin/widgets.py new file mode 100644 index 000000000..420c17060 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/admin/widgets.py @@ -0,0 +1,124 @@ +import logging + +from django.contrib.gis.gdal import GDALException +from django.contrib.gis.geos import GEOSException, GEOSGeometry +from django.forms.widgets import Textarea +from django.utils import translation + +# Creating a template context that contains Django settings +# values needed by admin map templates. +geo_context = {"LANGUAGE_BIDI": translation.get_language_bidi()} +logger = logging.getLogger("django.contrib.gis") + + +class OpenLayersWidget(Textarea): + """ + Render an OpenLayers map using the WKT of the geometry. + """ + + def get_context(self, name, value, attrs): + # Update the template parameters with any attributes passed in. + if attrs: + self.params.update(attrs) + self.params["editable"] = self.params["modifiable"] + else: + self.params["editable"] = True + + # Defaulting the WKT value to a blank string -- this + # will be tested in the JavaScript and the appropriate + # interface will be constructed. + self.params["wkt"] = "" + + # If a string reaches here (via a validation error on another + # field) then just reconstruct the Geometry. + if value and isinstance(value, str): + try: + value = GEOSGeometry(value) + except (GEOSException, ValueError) as err: + logger.error("Error creating geometry from value '%s' (%s)", value, err) + value = None + + if ( + value + and value.geom_type.upper() != self.geom_type + and self.geom_type != "GEOMETRY" + ): + value = None + + # Constructing the dictionary of the map options. + self.params["map_options"] = self.map_options() + + # Constructing the JavaScript module name using the name of + # the GeometryField (passed in via the `attrs` keyword). + # Use the 'name' attr for the field name (rather than 'field') + self.params["name"] = name + # note: we must switch out dashes for underscores since js + # functions are created using the module variable + js_safe_name = self.params["name"].replace("-", "_") + self.params["module"] = "geodjango_%s" % js_safe_name + + if value: + # Transforming the geometry to the projection used on the + # OpenLayers map. + srid = self.params["srid"] + if value.srid != srid: + try: + ogr = value.ogr + ogr.transform(srid) + wkt = ogr.wkt + except GDALException as err: + logger.error( + "Error transforming geometry from srid '%s' to srid '%s' (%s)", + value.srid, + srid, + err, + ) + wkt = "" + else: + wkt = value.wkt + + # Setting the parameter WKT with that of the transformed + # geometry. + self.params["wkt"] = wkt + + self.params.update(geo_context) + return self.params + + def map_options(self): + """Build the map options hash for the OpenLayers template.""" + # JavaScript construction utilities for the Bounds and Projection. + def ol_bounds(extent): + return "new OpenLayers.Bounds(%s)" % extent + + def ol_projection(srid): + return 'new OpenLayers.Projection("EPSG:%s")' % srid + + # An array of the parameter name, the name of their OpenLayers + # counterpart, and the type of variable they are. + map_types = [ + ("srid", "projection", "srid"), + ("display_srid", "displayProjection", "srid"), + ("units", "units", str), + ("max_resolution", "maxResolution", float), + ("max_extent", "maxExtent", "bounds"), + ("num_zoom", "numZoomLevels", int), + ("max_zoom", "maxZoomLevels", int), + ("min_zoom", "minZoomLevel", int), + ] + + # Building the map options hash. + map_options = {} + for param_name, js_name, option_type in map_types: + if self.params.get(param_name, False): + if option_type == "srid": + value = ol_projection(self.params[param_name]) + elif option_type == "bounds": + value = ol_bounds(self.params[param_name]) + elif option_type in (float, int): + value = self.params[param_name] + elif option_type in (str,): + value = '"%s"' % self.params[param_name] + else: + raise TypeError + map_options[js_name] = value + return map_options diff --git a/venv/Lib/site-packages/django/contrib/gis/apps.py b/venv/Lib/site-packages/django/contrib/gis/apps.py new file mode 100644 index 000000000..628250105 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/apps.py @@ -0,0 +1,14 @@ +from django.apps import AppConfig +from django.core import serializers +from django.utils.translation import gettext_lazy as _ + + +class GISConfig(AppConfig): + default_auto_field = "django.db.models.AutoField" + name = "django.contrib.gis" + verbose_name = _("GIS") + + def ready(self): + serializers.BUILTIN_SERIALIZERS.setdefault( + "geojson", "django.contrib.gis.serializers.geojson" + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1988ab957444081e33f3439f56c1b2e325752756 GIT binary patch literal 195 zcmd1j<>g`kf)81esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UdSK!Sw<05Eto>Hq)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..971f575906fb3ab37381b2bdd22ab459121583e3 GIT binary patch literal 204 zcmYk0JqiLb5Jt1Ig$N$RVofh1f}$28qSy_F{IO(plO>ZZcqFeRSa|_!E3=h8nD_C` zG~+o>!J?EgeKtR%cMqPtHco@1R7!>O$9M=Ad0Zu*xk~lab_ozR+ZEG zGdRF;e<>0t{s3oAyqB(HR6NNq&(F^D_r1?H8yf)u`}O(9@Lr3MpE$W~kRvZ(xNUHX zMC5=ds@R+;cF7{DT1O=GriZ~xo|r7tNtv3Qn-Qu~o zhZnp&(cBfXOl1}fWpb)><@SOEPWs1gFg$^@CU7c=n4(cjvB*>Fs-?U+joR8*ZRO9& zC5_h9n(E9+)KLuZ1@+yd#VPL!ZDncf^i#mW_7M-)c_Ir}Wq>0;ZZHk?i9An@1#mh^ zM`^-K!zDj>d&Ess0ZI0jEHYzGtHOnQP0c}qaF>QLgRu|8ZGxN884+a0zyl2cM+aA| zW~QjUQI#iQtM;7EMizgx9=I!Fefa#&_MgTdowhFiP&p^#S0250&V&cQrm`-O;Z+b4W{*`(j!@Ar6~2J04enrWF26iAb^$k=Uw_tdRer4Y&B{RrwlbJU{ znrvWE`mkMh-C1@6%&tSS_Nzhx%D*~?e#5H{K%0E=j%t5#wW7OAQlgMnPFxgV!9{HG z{jPSymrlTzhp^Q2V2j?TT{_)f?ZILjARUD3sCh0YT8KIjVq#R4VcZqstdiOF%9;?$ zBtk4s?I4p*VewIv7Y#9sdf$SBjkKtc#T$Wv!yO$0qIdygUO>Bkvo;8sMbVnc|0>j- QXA4x%u~c&@J+kHh0i1m-zW@LL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/base/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/base/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60182056bf813c673a4c5a585a8c9489e25943a7 GIT binary patch literal 209 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 NZOgP-o40w_{TDQM@Av=! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47cd2b48aa108c7b30eb6106d9fd8cf3d2979cd2 GIT binary patch literal 1531 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 D?~gv( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16ab885c7e89dbfba63d6478a63af478e3dd3845 GIT binary patch literal 3150 zcmaJ@-E-T<5x+ZtAPA8XqsU4opKvE?gr=tQU?($~PN$AOTxD$8wcKfnVT*#e6AKyy zs5{U$IaFWdnY{Hc=mRy=7ynC`=~JKj*5}UD$?k!aMMVmRw_Mx-i{1VGcJH!A!y$0} z_s{?8yj~*Y-*|KJGU4VoFw{37IN>xQKK`?W_LPBMpP2beInN<3gZ&4!1w8|@I z)VJ>uZt?0%!mGkMHT)WlJQ+Zt*pJXY<<2nqSqr!cK(A?inXiEE@FsujCGnT| zDt{aP>)#QR_zej3MzQu_bojgb_x2ALeE)L$@$TIxyYAtmyHED--goy8c6PsYH#Xyx zix-}9A0EIB#GD9EZEkEvSu*UWp7O>wcOE}{^plTAR7YG21O6}vD=^dtAaZg_dUQf# zGGYIuf2Wjm$%F)qlSA@~9(YDkQA0qWu!A5@<2(q8dUpmXcvm5{3ac&Jp^-pQh2U!=Ke-;49#4m<6=SgQQiBboI? zl((OW^jZ6U+-a*g7qj zDKKKfCdQd@V&-hZAW$Z6Pgu{?vZ8K760BaeXP;Civ{&mnCl<^sP3s^Vlgfllm(ju* zJEd@EX~}vkr&{o32=AA%)N7letVTFSMkf*o- z=7W&)VA1Y-K_o>8CKjf(LAeg^d(|08{fvu5zKteV;xtNz{2W~Q4$iXURDJ}?Wgu}8 z>rlN1qDj}8Lv3nNlP)t0H1q!e?f0fV{`g8*-{j_c^1cg(=a}lelPNnR*q#rGv|!OQ zX7roIs$(hEuZmo#87<|{;Kj?aY{1+vVd#RZ(`(6i@jDUnZhoPT+|*pegv|X$CIMrv z^Sp-0m38uScRj(&7yde6-+cv*or&nxC{a09J@>DKTC zR0xw_Kn)l@vsXDWuu3K%r`7XnFrZ%SUQJg5TPG*xxC-me#6)cVK++YH*`YZ z%H2@zW11J~4-T25IWkcyI*hit&x+3kysc?BF6dIa!FgJ(Y)@ymqH-#vX zT@s;^@1sB}7wcF|TxNsCvXM9Oi4Rd=B@|WhLPWz{NQAqvlC0Z>eWoIClb8`#{mi(i8REF?SRPw$>k%{6eifIc`(P_GBU@i0uv73sp~q=y2VfZmC9ijAH9t1B^s%W`9-Aa~-=fwP`F&lDB@+1I3tpc?P}sjJbM$LGVwOh{ M0&YWzIc&}N0kPZvPXGV_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/base.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/base.py new file mode 100644 index 000000000..4abc052e6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/base.py @@ -0,0 +1,14 @@ +from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper + +from .features import DatabaseFeatures +from .introspection import MySQLIntrospection +from .operations import MySQLOperations +from .schema import MySQLGISSchemaEditor + + +class DatabaseWrapper(MySQLDatabaseWrapper): + SchemaEditorClass = MySQLGISSchemaEditor + # Classes instantiated in __init__(). + features_class = DatabaseFeatures + introspection_class = MySQLIntrospection + ops_class = MySQLOperations diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/features.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/features.py new file mode 100644 index 000000000..8999a38bf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/features.py @@ -0,0 +1,44 @@ +from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures +from django.db.backends.mysql.features import DatabaseFeatures as MySQLDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseSpatialFeatures, MySQLDatabaseFeatures): + has_spatialrefsys_table = False + supports_add_srs_entry = False + supports_distance_geodetic = False + supports_length_geodetic = False + supports_area_geodetic = False + supports_transform = False + supports_null_geometries = False + supports_num_points_poly = False + unsupported_geojson_options = {"crs"} + + @cached_property + def empty_intersection_returns_none(self): + return ( + not self.connection.mysql_is_mariadb + and self.connection.mysql_version < (5, 7, 5) + ) + + @cached_property + def supports_geometry_field_unique_index(self): + # Not supported in MySQL since https://dev.mysql.com/worklog/task/?id=11808 + return self.connection.mysql_is_mariadb + + @cached_property + def django_test_skips(self): + skips = super().django_test_skips + if not self.connection.mysql_is_mariadb and self.connection.mysql_version < ( + 8, + 0, + 0, + ): + skips.update( + { + "MySQL < 8 gives different results.": { + "gis_tests.geoapp.tests.GeoLookupTest.test_disjoint_lookup", + }, + } + ) + return skips diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/introspection.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/introspection.py new file mode 100644 index 000000000..3561869aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/introspection.py @@ -0,0 +1,37 @@ +from MySQLdb.constants import FIELD_TYPE + +from django.contrib.gis.gdal import OGRGeomType +from django.db.backends.mysql.introspection import DatabaseIntrospection + + +class MySQLIntrospection(DatabaseIntrospection): + # Updating the data_types_reverse dictionary with the appropriate + # type for Geometry fields. + data_types_reverse = DatabaseIntrospection.data_types_reverse.copy() + data_types_reverse[FIELD_TYPE.GEOMETRY] = "GeometryField" + + def get_geometry_type(self, table_name, description): + with self.connection.cursor() as cursor: + # In order to get the specific geometry type of the field, + # we introspect on the table definition using `DESCRIBE`. + cursor.execute("DESCRIBE %s" % self.connection.ops.quote_name(table_name)) + # Increment over description info until we get to the geometry + # column. + for column, typ, null, key, default, extra in cursor.fetchall(): + if column == description.name: + # Using OGRGeomType to convert from OGC name to Django field. + # MySQL does not support 3D or SRIDs, so the field params + # are empty. + field_type = OGRGeomType(typ).django + field_params = {} + break + return field_type, field_params + + def supports_spatial_index(self, cursor, table_name): + # Supported with MyISAM/Aria, or InnoDB on MySQL 5.7.5+/MariaDB 10.2.2+ + storage_engine = self.get_storage_engine(cursor, table_name) + if storage_engine == "InnoDB": + return self.connection.mysql_version >= ( + (10, 2, 2) if self.connection.mysql_is_mariadb else (5, 7, 5) + ) + return storage_engine in ("MyISAM", "Aria") diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/operations.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/operations.py new file mode 100644 index 000000000..728e93ad1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/operations.py @@ -0,0 +1,127 @@ +from django.contrib.gis.db import models +from django.contrib.gis.db.backends.base.adapter import WKTAdapter +from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations +from django.contrib.gis.db.backends.utils import SpatialOperator +from django.contrib.gis.geos.geometry import GEOSGeometryBase +from django.contrib.gis.geos.prototypes.io import wkb_r +from django.contrib.gis.measure import Distance +from django.db.backends.mysql.operations import DatabaseOperations +from django.utils.functional import cached_property + + +class MySQLOperations(BaseSpatialOperations, DatabaseOperations): + name = "mysql" + geom_func_prefix = "ST_" + + Adapter = WKTAdapter + + @cached_property + def mariadb(self): + return self.connection.mysql_is_mariadb + + @cached_property + def mysql(self): + return not self.connection.mysql_is_mariadb + + @cached_property + def select(self): + return self.geom_func_prefix + "AsBinary(%s)" + + @cached_property + def from_text(self): + return self.geom_func_prefix + "GeomFromText" + + @cached_property + def gis_operators(self): + operators = { + "bbcontains": SpatialOperator( + func="MBRContains" + ), # For consistency w/PostGIS API + "bboverlaps": SpatialOperator(func="MBROverlaps"), # ... + "contained": SpatialOperator(func="MBRWithin"), # ... + "contains": SpatialOperator(func="ST_Contains"), + "crosses": SpatialOperator(func="ST_Crosses"), + "disjoint": SpatialOperator(func="ST_Disjoint"), + "equals": SpatialOperator(func="ST_Equals"), + "exact": SpatialOperator(func="ST_Equals"), + "intersects": SpatialOperator(func="ST_Intersects"), + "overlaps": SpatialOperator(func="ST_Overlaps"), + "same_as": SpatialOperator(func="ST_Equals"), + "touches": SpatialOperator(func="ST_Touches"), + "within": SpatialOperator(func="ST_Within"), + } + if self.connection.mysql_is_mariadb: + operators["relate"] = SpatialOperator(func="ST_Relate") + return operators + + disallowed_aggregates = ( + models.Collect, + models.Extent, + models.Extent3D, + models.MakeLine, + models.Union, + ) + + @cached_property + def unsupported_functions(self): + unsupported = { + "AsGML", + "AsKML", + "AsSVG", + "Azimuth", + "BoundingCircle", + "ForcePolygonCW", + "GeometryDistance", + "LineLocatePoint", + "MakeValid", + "MemSize", + "Perimeter", + "PointOnSurface", + "Reverse", + "Scale", + "SnapToGrid", + "Transform", + "Translate", + } + if self.connection.mysql_is_mariadb: + unsupported.remove("PointOnSurface") + unsupported.update({"GeoHash", "IsValid"}) + if self.connection.mysql_version < (10, 2, 4): + unsupported.add("AsGeoJSON") + elif self.connection.mysql_version < (5, 7, 5): + unsupported.update({"AsGeoJSON", "GeoHash", "IsValid"}) + return unsupported + + def geo_db_type(self, f): + return f.geom_type + + def get_distance(self, f, value, lookup_type): + value = value[0] + if isinstance(value, Distance): + if f.geodetic(self.connection): + raise ValueError( + "Only numeric values of degree units are allowed on " + "geodetic distance queries." + ) + dist_param = getattr( + value, Distance.unit_attname(f.units_name(self.connection)) + ) + else: + dist_param = value + return [dist_param] + + def get_geometry_converter(self, expression): + read = wkb_r().read + srid = expression.output_field.srid + if srid == -1: + srid = None + geom_class = expression.output_field.geom_class + + def converter(value, expression, connection): + if value is not None: + geom = GEOSGeometryBase(read(memoryview(value)), geom_class) + if srid: + geom.srid = srid + return geom + + return converter diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/schema.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/schema.py new file mode 100644 index 000000000..28f7048fe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/mysql/schema.py @@ -0,0 +1,83 @@ +import logging + +from django.contrib.gis.db.models import GeometryField +from django.db import OperationalError +from django.db.backends.mysql.schema import DatabaseSchemaEditor + +logger = logging.getLogger("django.contrib.gis") + + +class MySQLGISSchemaEditor(DatabaseSchemaEditor): + sql_add_spatial_index = "CREATE SPATIAL INDEX %(index)s ON %(table)s(%(column)s)" + sql_drop_spatial_index = "DROP INDEX %(index)s ON %(table)s" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.geometry_sql = [] + + def skip_default(self, field): + # Geometry fields are stored as BLOB/TEXT, for which MySQL < 8.0.13 and + # MariaDB < 10.2.1 don't support defaults. + if ( + isinstance(field, GeometryField) + and not self._supports_limited_data_type_defaults + ): + return True + return super().skip_default(field) + + def column_sql(self, model, field, include_default=False): + column_sql = super().column_sql(model, field, include_default) + # MySQL doesn't support spatial indexes on NULL columns + if isinstance(field, GeometryField) and field.spatial_index and not field.null: + qn = self.connection.ops.quote_name + db_table = model._meta.db_table + self.geometry_sql.append( + self.sql_add_spatial_index + % { + "index": qn(self._create_spatial_index_name(model, field)), + "table": qn(db_table), + "column": qn(field.column), + } + ) + return column_sql + + def create_model(self, model): + super().create_model(model) + self.create_spatial_indexes() + + def add_field(self, model, field): + super().add_field(model, field) + self.create_spatial_indexes() + + def remove_field(self, model, field): + if isinstance(field, GeometryField) and field.spatial_index: + qn = self.connection.ops.quote_name + sql = self.sql_drop_spatial_index % { + "index": qn(self._create_spatial_index_name(model, field)), + "table": qn(model._meta.db_table), + } + try: + self.execute(sql) + except OperationalError: + logger.error( + "Couldn't remove spatial index: %s (may be expected " + "if your storage engine doesn't support them).", + sql, + ) + + super().remove_field(model, field) + + def _create_spatial_index_name(self, model, field): + return "%s_%s_id" % (model._meta.db_table, field.column) + + def create_spatial_indexes(self): + for sql in self.geometry_sql: + try: + self.execute(sql) + except OperationalError: + logger.error( + "Cannot create SPATIAL INDEX %s. Only MyISAM and (as of " + "MySQL 5.7.5) InnoDB support them.", + sql, + ) + self.geometry_sql = [] diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..972f5e10ab94a25dc6278fc24866fdfc4bbe8956 GIT binary patch literal 211 zcmYk0Jqp4=5JoqWLWCT|Lbn$YK~W14QS1i8{tRI?*$q3JfJgF5f|VDrwsKSHgLxm{ zOfxRa1}ySEKV_G%PX8pa%;QiRrP+}Ulii*9ZvE4zT}~0D zjga4QG23idd<9)^z`zNo3F*;*Qk=7d^{l`u=2l|&DnX@J4XTvfCEVtf6T&OPI<|ru zuRbJx?JZ~^KF#f|d-uPAr~A|QJ74ptZ-nw$zI<0?Jz>=0R+c0pHZn`|+Jh`P>}F|< zZ_c)DP}Vt#5sP`g07#yV91CXdd$?~OY(}1=xeIZ!OX(h5lt@?=Qf;Q zGnHRRhZc4@BYGPwI;QFx$W}|)5#6o5Bw-Dn4m=%hflYRFi4x*^<5t?|DX}+@N@&kK zjf~eXvGJ5lyV{GC@MP-sRn`~E%ajzU0e7;r>Fqp~da5ewbO2oK>C#yb#S1x5k#gvu zWj{(JpVi^@qC+o^23kz@bRwAyz?P=Bl_>=(XXOiX)~B-G4e$N{Zn-ekTlL~>km52< zviR9^IinRMzf04xOtp#9Sf~oTnO_XYn1;Q9Hep+Y9eE%)1Sf0W%4zov#I6=e=MDLDu(jTL zq=nM09|l@St=m~V=mF%qbyu2i2kq7!skB*rpt4=SrnN89{nkC%ZfR-6YCnpfMO~p= zd^bwF*;<^XM#=VCSL!w1UTed#NV#6iim+UZ${cC-5A*s)SES;guQo5DzYYxSg-uqd z`)+t^UKBUOP^Qv^VRHj;j1s-soT}LN>k2g#&Z{~i&_ItTC@75h+=|k}{G(#OJI>HB zo~CGEJ%45bTPq1LsRew&Mlp336*q7=hnvpC4rCjR#=DM7UCLg#v_Tnl-no{;8g%%{ ze|mB1>M;y3A-7N^Uj2ydk_O3^;7NB`gY=h-RT9F8l!*taWo@5Qg7Jf0V@JD+_^BRI z$Vc)%Via&Aa@TpO!TTb7r-2EMqgOdSD7`LRN3Yc)44*;Qh$MTlLWZ03-J2VCbFR#{ z^NQ&8&0)SE4j_eOrb5hrg_f&j7{EpwwS8y`Uhk*Sip$4WNnbW%OeU`#)j*6K$f^7g&?VTu23;fSw&hTV zEz)HGb_IgkX2YxVp`FREQx)bEp6j4;f~5iEj-hTmUT(1?c4QegvWx|l^h-W{J7@c5MyrMgIg z1)-jZ8Dc@8d|O?GM_}WZ6sCk)!J$Z%_xW-j_P&I!kvN>{A`rwfqDhCV|BmLwiy2nh z_UVp)21zH4dLj&SHw=3jA0#+$gyG&GO3D+3xgWSP?GH?-#u#q>QEEpNX|H#vf zm(+MBP9m+xJLr=_YiB%o??x34kS~hRaEJ||!B&9ls=#z-&r*fw+rAUjs7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cfa8159ba51fcd726c3646a508bb6c02725227b GIT binary patch literal 772 zcmY*XO>fjN5VezR)|>9~p~4Mu-$Qrr2%$*t5>>2J>159jQ!fShC6cu9w5nis6((&J2f z+AsVvkU?(;#i$Hr*xRFGTnZ_AJ1iz;BqPpNOpmqr%CrFQ)|XsQ)@&Z#QB^kQ-ThP5 zs8k`mx2mqe-q9=$f3U;PKsBueB<%3Qs;q$Xs<8%Z$eP?#E_Hw}=(ci@OMN_GtMm0b z`vj$Wsq@Cz%r)I#uGukdd_o5>8jeX1d>OzqCixgw_GYpAZ{*LfOa-oR0< zvd?M*80#xlZOk$=)ICp^n;e%qU8WRgp-f3sBd}-CNu%MUq`Tj2VTGh-%%r< z4&@d)UF=FMh7#n{td2stm1d{!R`*WqSQ$u~{l|xO9CeZTE3xgV39%Qqr~4l@gEe(G V#PdO*7fxt&(3DNRDRT*B}V&P&%SWZ0KbxGr_$0^-2 z{1Z<6rAnMQapTO1Nz*SO;mG6hyyrJ#XYAo&pV9dJ@kjck#n{h!vp+)GJg12f8O=1$ z*^CR$YrmDZW^EC0cENO82Va>EfJ5*l5N#b^u~Fw2ona%sy!S#OT$Rcjm5)LB$^laN z=v;Y~610hBHGh9lMNRe-a)1f0nP_QF`dkDwL){V`S`TRL-cS|axajGCa)+)>N5=2Z z>Sft09b^WLEkux}b|KoC!^=^B*_E0b=;j~oQCp7^~ z^i&lS8)ueY!KCrTV64+PB^U~gv2`lTA--O>K~&zY{?q|gfk$MzEa1Cuz*p$yC=@4+ zaI_YVNI24Iv=Jr;A==2gx^u+C^^tvAlYd97`$G)htg8CAA9rulcs=4SyU&_FIpeg$ L4w(TP@L~8DW{Lh} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..858e166ba061d14dc1843164611df3fdd0cad10a GIT binary patch literal 1572 zcmZux&2Jk;6rY*>@Y;1kXdxWPVP&a+C29+a6ACD9?4&`ljpC#ci^XWYGj`Wq@0yu) z5}P$bBvOz33(0{)|0A>#C!kVqoRQk{W}TE&&5Y*Fn>RD>Yu<07rKJLb_Rsf!^m;jj z{#1+WO^3w>4EZ?_h8PZzqh=D|5pf7sycTF9-O(}HMoeeM8Da(}r(4Vm}ID;~mfS9&tv;A{uiMPd#2-lvV zK4zGaGwT#PI@6ebh8*Jw(vf3=Wh1@Q7Ooe(Y0tx%ss&NJb~)rKFg}XWDH`J6a7>08 z!#;4JinP+DZ61wyET&sN4_H}G4LJdC)7uQ9qVaUhB^CUL3(3>GcS0AY9kYG^>&E6j zM5#+2^q=B1PpKEUQd0U9{rltQ7u^F1m%4isDcx>8@+Ko5#FU2irVkvKnPssQTB_ zUKvjXJUF@qL#i4e#Kh#4Nz9kCk8Vg?PK;j& zgT0@OV|)x{H#dDW&n0@7%&mDo$us@2CN`3Ml4Hg?O04r7=(Q4ynIM0dSRl`>qeCcJ z9r~#Tw#_8hC!HH*pCRcTV~kY)7RJ@tvelZooyIOas$Ht@G^XsTsxg05w$cLBOt=7IYI+kPBa!C#3HK&3PmRe~Rk$9yBkovz9(#|X5URUz z;_Te@VB)_UKXBNYb$?QYqPsIRr_1^%DL2{S!|T11xiN|n?SHMEmHc!#0^x` zlnMoj3|Hbq;L@c_tb05NVE6y16kLP~O{l+30a02&EJXBWykch3vMH3z`FH{E3hPy_ zAYEBNy7C63g?d=$gUi#C*bii-KMAv6)(sY}DQnl<$Q;TtY^^UM`bvF?m%bE95x=MX E2Lbw_j{pDw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae48678042db1c976c88f0f9c5c211ce5a40058f GIT binary patch literal 2728 zcmbtWOK;mo5avq~MN6{dJemegyG4>VDiXQZ21VdNvfKcb9Z1fhgivP1T}iYlQrV?a zOX$tH_CK^o|0M!F^^{wI+G-*j`G5UMgiRl)hrN~OqQoO1SV47j|B^&5lP}~-`ysW34})ldqiZ`=!dc7GJ&XR7>^)&!O2W=h=#Nw zUVcm`(~v(>3%q*S+v$3}*1os9v)}PLI|t8N&kmlwB7szMRtPVp#K|(CGJ^?tg-bN| z_q#2xyVLf1KlH9Hk(0rO^A0Mg)%CQPWfZ*43*$P$aS-`9==@{C$2Poj0ETO>4kR#` z?wZ^>EHHzazvymJ`Ihoa;M=UgiqKvL3P8z$0``gFI;_l`x0<`gD{PHb-fAbhTLr($ zYRa#%bs)z^dNV8Wr8F$Q?$D`RRU>0TeoC`aHr^44_*74w2|e~g9*vT5pjn!BaH_j& zQxQz4n0rTjeg!g+Q$c=z`x0bkxB${EFbe`LEbin6+UW3vrsgP+?ydaz+Iy$P)b>1N zn&+jC=RrkgA^H{1dp)CJ*5j7xbn1n4z(dz&15Yv3Elq%JBhF4Wu@3Pm^Hyse;*9`GD!I2DI6hKQTEv( zjYjd7A4iD@23r7Oiw(AxCroa|D(PDpeHznwY9Z8{5X5_s4$amq-O_DcT!RlElX&)^ z4~f^B@X8xtnEtbNsKJZ>jiGro78CC`(I@Vq;?sR8DOzPOuTvE|4sF=N~q^Lq@Q=@{c;=#b^p z<;hG$>TF}ZNIXtYYB^j3bYuC5>#(JQ1o%up zl$YVvJ|xA1o$g|oh|(%9?&qVtIN@KxijQFx0D82F<^KX*Ei_t+{W3M@&>|@^gjlZ2 zSgSY@QL3^(z!8XdaW5a}h0%NUby2|?RWvm)$P5tXRljsSOBaQ`%#J+Ig8oyl$sA{Iq32Lff`od(A!_`9U; z9xIxK;T5oW&bHwdWiTMDw{x~vvMTV$id)R~Yww9QoRpV$l%Q|0a}!OjAe|jGZ%;-kDsVa#6r+9lSB&u}?poFHJ_k}nmT z#pl?B3$QbTn&*Q2-+1n7z8KB6V+OmqBBB88qNBXt03-;C_|c*EqW&O>T@wO{ k>=rusBTg}0?UEN_YJZzugHN$C5-V+Km2ySjG;foC0Kp`&*#H0l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53b747243a4a4a25774a83e2fd296df18f041a97 GIT binary patch literal 8207 zcmai3OLH4ncJ6L8fCdOYM2VDSTjRDZjYN+OY2u7WqJl$;wr!iZjl0GKun?+jx

      +q05DEvN^@3bh#Lw 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 30 characters. Use this scheme + # instead of self._create_index_name() for backwards compatibility. + return truncate_name( + "%s_%s_id" % (strip_quotes(model._meta.db_table), field.column), 30 + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8f9303fe236f7fb3f7d20b97db2332ccd7eede2 GIT binary patch literal 212 zcmYk0u?oU46h%|%AVNRHp=K8mK~V=0QQRJeqzNU}CM7Se_(}ef;N%ZDJDE&+;hxLA zZ+SM$1|;ZxdWx8@h<_!a%z`lukmNvy$@WfMoPYRS=VLgcatQktk;B3kZLN$)SZTj* z1uV5gpYNQlRNk# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd78925979aa1fca2f6279edf9f196383787ca27 GIT binary patch literal 2598 zcmZ`*OK;mo5auo^ih9^_UQU|y!AqJ7Xr!V!H4U0JiR~ISTqjCVfDpQ&xNDg+%v&XA(w%I*SO&Cbs5yuO`LvanD$VEp;hZ~b2#!}uK+ z=Z6W4ui;axFmb~(IN>xRL+Vk2v>BO0%d>LYiYi0fvvaxHX5Xn$z8Nyx|>%`qk zlpaXYeX-F&a&5iauKxj+87-38Ps7-kW1wp5An*e260m6Kgrx)ND=j1}n|SY9aqT$3 zqvyxW-Iu@>hDX3<%CB?E%@g98+~SoJ!?OyPyb5=C4c0cV^9KA@g~OYC;lwy5;OZj3 z0=zn3;#c9f!LNbqH?qa4-QRFO1&dY#R9OzBE%=_nr#4{H#u3p((`|Z8j|^rW8M~&u zt*s-nTRA4csc0K`1zn9R+BqTxA0%q9UpvBcbxuGzojk0&)3F|hI`pG(BHSc)^^R~= z>LX{GllDw?_WF|Iw!{3wM~NwWerFJ>4)1sR zuq|S)Iw>LvcvBnO=@<-VA%ul7G)67Lv}D;HDdNer9? z8fO5ILN}DK zfzVhD1()x^_PpjQV@gZLJ}nhHWU_q0>0IPO643KJ3HU6JN`G?=;ItV;%CpiW8qe!& zvhDDY;m#n5JEdZaPVUYtJ|}lU`wRkiP`j~f$Ogv!6aa8Wuyu6v4<5)bvl5i|3g`nn z33vS{O5P|}sK8GV_xOPNdEti+Q4}&gj)W`4{wS1!yZte8XLmteIS}%`a$jRT_}x?QO0gc| zdIcDh=KXu>{-a0JhHDp5!-|@RPTmD7v$+ToF7mf^8NPF=FF{h_LEECVNt(p|yKYZz z&w*|BPBvR)wbjHT9{WSVSXO6jnD9}Abd$0DkslR1@+w+`rCHv>36Ut@hbe0Wk*`#N zH2ER2F^Rb~=dz1UN@8uyD-;4k;bo3dC(c!;=9rF2O`y%DlS^#2>KQy(o&=0}PFbk) zCh1)-mu+#VMXaD4tGqsYouYxY0b1C=+R&`pyx%SxSUW8mSiAghQ*_x|mz;u@tKPNk a%N)s^$3>{V!s3tz-7=ac1RVl@&HNYDr+a+> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e516547a31c13fbd288b3d03da34e4bf64e4a2c GIT binary patch literal 1352 zcmZuxL2uhO6ecCvmK`}wwqWgs9gG|X7+7O$$6*+jCQfRgaDqBRH$fOdi;Sm4vQ(04 z*T6faKyTY$NPu1PmjvvzQ*S#D7`FFlxk!VN;M2!PN__A89+h{y9RlsIAOD!%xP<(P zliSUM$+s|c1V#`+QNVvS!${xRJIpKlCkbrtPc~b}VkCYgrHm zlpGS_i}q_G+S0ppLsxVrq`&qSP9S|+t&NY^{v)>gWVAbh>Aih!_>^n;O!1MdPv z+gSMzBsZm!8uo4-=h_^OCZoAgxh`aEl6(&S&Dwti?{oCw<_~MqWed?*r=s~BUr z-GCF@^yl!9B&33bj)bh=kW(tCa9;ai!(!k7aPtlENZ5jW8VcWyG1^r_2NHS@hJFmj zkV|q#7c?OY=Xd%m(7JH09Q^FHW88CBZ5wYvF6n}>hH2KQW&9eo1(|>laF{!;8az$7 zu1LRAHFODyRz73NJTZ(_?o1lxz=5g(rt(i~%2W%dZeD2BMAS{*BhIZnEz{G=<7%d> z=J`u}-q5PeSe$aL8M`5W>%Fg{@3d4pdRl7Dqy0QCGdVXpI!w&tavB{ZN}GqrDnA1~ zq8D=hB6^ZcBb^xeu;B4IpGh5wGd`c?gE)r(lIdWU=z*9Hrm!sMLJtbi6@6F-JH;y% zK(v-c1Ru~1+JU}Ky?-tqtjeM;mz@;}?;| WUoUC;2CuWmZw4fwfd>Qnmir$J>{kK+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41b8f5262ccd39d99beb2b1ec620a3af5cc9101e GIT binary patch literal 741 zcmZWnO>fgc5cMWb;^woJiVC-!ka8#yS5!frCXFM46UB}MD+?>mx?xLeN4uLy^tW*0 z#xFuzi4!N^xNzx-8HZGr*pc77d9(J6XE$v$ss^mzAAd$aDu(e3gU725!8ttA0bm9- zRt6*A2qoYP;0vrsi@;6bCM)GuW@T1+FpC|0tj3afiYr*ZePI!&b-j=Z)? z+rz#+ZZFeh8w<(P1gTVuM73Fb#S^YTlhsb$%}i(_D)xI8+71|dWE>SJuSri6N0U#Qj5WE@^?T$7P#VcbMGL^uM-P|MB%+>WIyVaU>D7}6FFC-f)b zbmI9iFWUM?P{SO3x)+>*-5<$pJmI1q7B&)Owr>z8!x+^ZbEb2y(juR%k tYq%h&<+tI*`ir*CZd10oiC^Q8<#PbjuuQ9HRxPt|Tp<5j`Hy*Qk-uKqw;ccg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..409c937a2a5d9ec8884d04afa40b2f9b9f5ea511 GIT binary patch literal 733 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 Y9tVA9KPsnn+;^=Ysy42VpPwB6KcD=me*gdg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a509189cedc3872727341317cfd027b8c2a3529 GIT binary patch literal 2608 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 2 and not field.geography: + # Use "nd" ops which are fast on multidimensional cases + opclasses = [self.geom_index_ops_nd] + name = kwargs.get("name") + if not name: + name = self._create_index_name(model._meta.db_table, [field.column], "_id") + + return super()._create_index_sql( + model, + fields=fields, + name=name, + using=" USING %s" % self.geom_index_type, + opclasses=opclasses, + expressions=expressions, + ) + + def _alter_column_type_sql(self, table, old_field, new_field, new_type): + """ + Special case when dimension changed. + """ + if not hasattr(old_field, "dim") or not hasattr(new_field, "dim"): + return super()._alter_column_type_sql(table, old_field, new_field, new_type) + + if old_field.dim == 2 and new_field.dim == 3: + sql_alter = self.sql_alter_column_to_3d + elif old_field.dim == 3 and new_field.dim == 2: + sql_alter = self.sql_alter_column_to_2d + else: + sql_alter = self.sql_alter_column_type + return ( + ( + sql_alter + % { + "column": self.quote_name(new_field.column), + "type": new_type, + }, + [], + ), + [], + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c9fd08315d4c32a399d84b687ac3e98466b3eae GIT binary patch literal 215 zcmYk0K?=e!5JgkzLIe-uqGm55f}$=&L~%D*k|va?ZBjC6L2u-h1Xo_bwJXz=e)#Y6 zXBZee91d8}`}~w$zB>FX3S}Nlae!h+Hi~w4=DP6@pW9*rC(@4K&=3h&+N`Ox@dRu1 zn?}M49rtnm&d&yl#2T!ytaia6E6qbS1( aPg6AL({x;4AN^@%Ra5F&_Y?I3V)h07Wjx0K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..260cdf76f9c287b8ae4ab7831e4ed83d45fea869 GIT binary patch literal 766 zcmZWnPixdb6ragt+jQL`1u0&Nd+@SolY=*rQfaY*rBqiDLU5R5rc2f&lg^tIw)ED1 z8NX7%Q%~MJd(k)96aqeYkN4*N{k?g5dwWcfet-L!9#BH=oiQXIjYDL3i9!-d3sTaU zQm1=`SF)HTEVffA{C%A=N^)W z#vw91MWIMcC5b&rVVMz zraE1!%tDyC1`p(P$4AJpi{ge_vZM_$Th_ZFw{(sOu^l~|F~iUwKR!3A7Dk;LZFQ!L zmVq@huk}F{7j01Y&p(I>F#ONz=ymc1l!4?^10a%Poi(MZEF>qneczjRAG-QL{y6vMbMi0q>YVRRYHH648XDlv9c_OIT`g%g9z@rxji?vYj|-mDfP7 zL{3sqUG5sWn#`mP-Y{}4nN6F#Y2)sPT+M4N=>-cr}{c zBCY0gI0b3ZqS1@9$WP*~4CEfPYf5MxXMF|o(ndOv`9R2IZ!OPyaepX91pRYY108e& zCGN>!0K?B|scU{~5a>AAjI~%xVv%W>J3pO!O#~X&quxIp&)dkf%+)}II?glP@_6X4 zpc&NV87^5a`x8*T6+RGYupY%amm%KbIMjca2gTLgvD)9;f?@XiaK}23~zi# zdNiUDdsgGKMz$gwbNb*$4wN}4>Jn5&8PP=3$co55 zsEaC^Mb19$*;mOv9TVTu_CDFJjA=~9>_7DH#`&oJ=4+}MXhXDYq3Ux`^~sogQ+qfb{H(AH-8{4RTJf{jsgpRGzh|nL0_m&v>jyqd?n1mO>uXnAFGw9 zyV8YWkwt1n8GoZwpihbRV6Sj5C$Z9Do(`_OgXhN+IfOCCVLvnK9F0Dl0%8K5w(rMT ztbM*cj!=+ip<0Hb=Am*N*J2c|P1!HCm&@+x+?y^R;(?|QI=>DDPpZC$N|SwZ z0Pa7ePuQqBW(O<+nUZ@Xo3V+u_Rdj)ueKw$PoL6V0L*sfD*5K!C)TJA^PRC(&ZmI9 zEkKv9?p>O!sp)!&Sot}uw{iV_vh&U^YJ)&Ha8cJGT?Pz4rGV8tqw8fbVw`(Y>xQlgXP8K`*k)Xe(& z<4_Ec`Q#!_LKqbGb{=OfTOzjj3~mQ-l|iZs8ykg<;FWLTd_w{TjBi8pA{6xrR1L~l zlR^!zeZ-DjhheL3JB^>Fy|&F>Fqcu6vLpLwbm25ye|_CwF;@+?GQj;O2qkb20h(iS zzz)ejK0_8euuAxXWFG>%J!G^ z19|jX6NvG6*Cg_rtuqipdT$_9d#K~YWCK1^Cc8Frmx(#P{HjNa zwwMN`GNH@=G#QM#?P)%2s~yaRpF#&@UOWjuThihw!-MaQk&ML(@O$}dR9b8HHN!|W vR^j4bSot#~jg1^-{(_7vj?ypKtt-mV$H4Q zGi`qv;;w0s6p(q)seQ(Bo+-xaE@N3CtJLK^#x@mC+fIC}b}Fer2lO2DhRQ?ut_k0} z@ddp%sxdXmTpzPr86z40Rh7`PagSF87fyi zUlvhPS%6A~YK} g@_E?4FFiMaWB4DX&3wRW|FT`hmD_K_-$N(l2L`KvO8@`> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..001e7b91759580d0bba5a6be7a8a5cebf34f3a6a GIT binary patch literal 1266 zcmZuwOK;RL5Vn)-c3ZYkgj6_iSiu3U1X%=}stO^fS`JkOv|OSH%Za_)wB9&)oT9GE zsg?K}aO_`-#EBC(&Rohk*`>=PQbsdl&*Piuo}gILivrma zz6j39DUI5)^@$9rXo>b&2knJVBp^}8wPg@A+1yL%TwbR;_Y3@C1%)LiJj4~LAWRT#o%moafnJ|V7hSMpB#c{O?Wl?BjfpH@_!&Zf~S=x0-Jrpb6&1R$H-i)+lCt(+(u!^DUR$TJ)xg*Bf{IK8U2E^IdS9jcP7sp3T$J8J)tG!_iS%k zrzbM7JWpj$X?<80(EE_t{ocmRs}naD2q)_Znpp{`BajgW4ElTC|E@SUYu9}nRR?2h6 zm6gWrZ7i)hX2VP>5#9K`p~r%O)dm@2+&avaS%cN`wDnXfHEZ9|(YV$dAZ~dMFI=sa zfI28k)bm$q{Y-ZH3(@_i`*6y;5LXb2B%JXM6_DYKamLXix;qV-zXtCWZvOG*O;=KTd0Ws&r9@~J@QCKStaIibSK`y|ZZn{80J9yRF-$*-u%L`EJY-Dl*QJj&JwVc(;=# zzT3;=j14B7QSB46YD42->cnWxD2?O6$*$I|(g}hj?9m`7-5}_tB#&jg76e;)7!NIW z5Rfzq0xoIbPrqS{&k?VJT~#l>o&Tiyg@Bzm*K#4k=0Y0fJ(^^qxy-WLd8@g^xX7-4 z&eKi6(%h!Wc5{Wbnu2BYYCnv+VTXz)*$k6TIvb_H2iBVHFfmJ7vn?>wgos(u4>K0V z@XIWm&@p2g{atPX6bFhpuNnr{OeilkO~c1;?N2rDH6rQok9@?3P>qNL1V+9=fJBdw zZ$3tCtf=nz)?;KKUlQ9ar`Hvx6~J_g#L>v5bSt$cvCTsfe?V2BP4pBWqVL(hUg%GO zvjr}+O}(uhY8b(YaftSf!VniSlV~H`6gt4);ld#LIkazPR$*rLfyS>F!04_q_)ekB z*{n=UyHl74c+=gt;13i2u;FXL*I{VCQaHr!>ikaO6cyskA@F8rRq(b(Duum`#FvFl z+^)t6abZSv4&4Xs8}J_JfY2%`ZEgKu$F3o<^$;S3e7}M+np>}}?)BFfR~F~*c~P2j z5)cLq5uo@hp5TmJd8HC1C2wi%?q|nCz~a1@2=D&w#kEDR9YEj!=1RiexFoz=s|zqT zVtg=|42HeNe42yck~9P9CBzF~c?1yBqbKEg@shaMkkyd}x5Ive%i|bYN3vqSjw4hW z5@Lz{BYCl<4%q9p(gmg_!>DCNITtA}ZMs9FJfo!{!TC;`X3<8P(6X|)6Vbkka4r)p z5m}f-wA3Y)<+8r>u-m%+af@Z8H4s9ngZ}F-tWD!~=^k&ntU?@$I8)yES%rwF4}B-? zaCLaTs{)N`^LN0`VGqc!4MzJR4}0QRy&O^iD&OwV?Dz;}h3>Pd8Hek%b=dp|3pPU)(Z}(?sX8cEIX0QGRi8NkY@04gpf|lnk z)}YGJ0f0Lab);H#NLP@ai21}SbRvZSmMJuc zwk8T4^lPu~Js48*HTL{({tcs305qdJ0Zk-9$&G7@NK5x1^x8uX`_(>Yy^!w)UAkLZ zdBV1G>Q{k?lywp{Xhs_}>XxSRwKs7|1i{Gtz<=E+O_BF0FVDzh1ReraLZFi1Q*c&8 z+J$jkH@Un>xxe-S9iEAJOL4+NvknRG!3yOlgvkrQ(1;f iCaRREP%HN*H1z7+N@s46S3i}}LqV#caXfBKPW%J-u%L_p literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b9285973ab14a7fc5ea0a2b30f08c5dbec02eaf GIT binary patch literal 2613 zcmbtW&2Jk;6yGn~YkOlSfqv1d-GV~uqSyxzNEL!ei4rPW3nk$)vRJJ>v(6^#T{AN- zv4yxKCnWv{IObnki4&*ZkaB|y@6E1V*NJ;!qj{Nq^Re&uzJ5+tRw^1ifB*1j_t%o9 z{e>^{PXS)GVTe5tR3jSIsS)V|gBUu_&Bz>B#L~5WjasyDq0s`fP73EHDT1a*OQ0#C zh8gD;DN*}SYm_J7R@|dw=I*m(z$72oB@Xx%6#eI2vbg7f-kcR`GkG)eiCM&ZW<#@;%Iw{j`e)%Y#q%I;qX_4Y=lwYH zqiltg{o&Ay{4R@#4aO=5kkY`9{XV0Y8n1(OO8j%S^Q`l|U|e(#Mnd?V-J~}fuvm)D zeki{gbvt_@7jo-6o}93r?7U*}tImtC+Yu0its!I=+$cKq#E<()tCz%*husz!-=f`C zo_wMuvTTJTtt`=+!*OaM(D%WRD;tEZS-Pd$I$wjA9=dV*;JgT92Zne6g6cnOCmIa= zZ@@5NSV7^o2Cg;QlSdn(xgp#wcZ2S_FbP5yQTNH=!Smf`pldV=sS{*AQJzfK0&l_7 zX}y;uoO(0_Ux+Y?Qww9CT7riZ(!~-i3f_2;uYy@=$@7Hdo_7xot${EA(e$tQ@8t3F znCB<2;YRF;`^o}Ab;LIbRN`W~A22!Mu_}3tyPE`R4$Z=+zVzKJYuu4w)Rl=VWWt%+ z5ilQ4!W;`@b{*c4RRvzo--Ayoh=AAZMPdxnrVQrijybHk-mLsDPVpd zZUV5UGwc2@*x5zXQ0MNMLyXCop~N&>#H-o>*1dxK6n8uVG1*)W7C$vR(Qd4B2T!e_ z!2H0Bp-Ip4IQH4JymRdHJxtcj_h?S)JdY*ovs`}*kKO@6Zsj%Qg)wDk9*Z%Ql;6e; zSVH^*5NWj+`9eTK94C}NM74`zR{q%xvzKFrVIis#!)kOa2kJ2!HN!3#<%({UYP#Ba zt??m(Z9E=>cn4FIa#pZ`6$&|1Om)B%CnaD*WDR7C=^WVtI1$*wMz&xzTBa4n40T$C znsCxPZ(@+oGG?57uEMT(Vd^l>0#A&^J89vFqboSlI>+7Waf)lLAKyFY!l}N_KVgO=hL`ml*+ng@F(lVM}vNM_)JZ Ge)1o&E{ZGw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d4e0491bceb4fb39f53ff37fda47da4d7b9a69a GIT binary patch literal 8357 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d249cdeabb15e6f2e41451ca2208c7b1a49969ed GIT binary patch literal 4779 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 bZc!?hqeUg9Pg9hBN|y~u5^2Ld&Kv&)QwF2F literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/adapter.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/adapter.py new file mode 100644 index 000000000..91d14dc3c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/adapter.py @@ -0,0 +1,10 @@ +from django.contrib.gis.db.backends.base.adapter import WKTAdapter +from django.db.backends.sqlite3.base import Database + + +class SpatiaLiteAdapter(WKTAdapter): + "SQLite adapter for geometry objects." + + def __conform__(self, protocol): + if protocol is Database.PrepareProtocol: + return str(self) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/base.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/base.py new file mode 100644 index 000000000..3359a7a97 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/base.py @@ -0,0 +1,79 @@ +from ctypes.util import find_library + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.db.backends.sqlite3.base import DatabaseWrapper as SQLiteDatabaseWrapper + +from .client import SpatiaLiteClient +from .features import DatabaseFeatures +from .introspection import SpatiaLiteIntrospection +from .operations import SpatiaLiteOperations +from .schema import SpatialiteSchemaEditor + + +class DatabaseWrapper(SQLiteDatabaseWrapper): + SchemaEditorClass = SpatialiteSchemaEditor + # Classes instantiated in __init__(). + client_class = SpatiaLiteClient + features_class = DatabaseFeatures + introspection_class = SpatiaLiteIntrospection + ops_class = SpatiaLiteOperations + + def __init__(self, *args, **kwargs): + # Trying to find the location of the SpatiaLite library. + # Here we are figuring out the path to the SpatiaLite library + # (`libspatialite`). If it's not in the system library path (e.g., it + # cannot be found by `ctypes.util.find_library`), then it may be set + # manually in the settings via the `SPATIALITE_LIBRARY_PATH` setting. + self.lib_spatialite_paths = [ + name + for name in [ + getattr(settings, "SPATIALITE_LIBRARY_PATH", None), + "mod_spatialite.so", + "mod_spatialite", + find_library("spatialite"), + ] + if name is not None + ] + super().__init__(*args, **kwargs) + + def get_new_connection(self, conn_params): + conn = super().get_new_connection(conn_params) + # Enabling extension loading on the SQLite connection. + try: + conn.enable_load_extension(True) + except AttributeError: + raise ImproperlyConfigured( + "SpatiaLite requires SQLite to be configured to allow " + "extension loading." + ) + # Load the SpatiaLite library extension on the connection. + for path in self.lib_spatialite_paths: + try: + conn.load_extension(path) + except Exception: + if getattr(settings, "SPATIALITE_LIBRARY_PATH", None): + raise ImproperlyConfigured( + "Unable to load the SpatiaLite library extension " + "as specified in your SPATIALITE_LIBRARY_PATH setting." + ) + continue + else: + break + else: + raise ImproperlyConfigured( + "Unable to load the SpatiaLite library extension. " + "Library names tried: %s" % ", ".join(self.lib_spatialite_paths) + ) + return conn + + def prepare_database(self): + super().prepare_database() + # Check if spatial metadata have been initialized in the database + with self.cursor() as cursor: + cursor.execute("PRAGMA table_info(geometry_columns);") + if cursor.fetchall() == []: + if self.ops.spatial_version < (5,): + cursor.execute("SELECT InitSpatialMetaData(1)") + else: + cursor.execute("SELECT InitSpatialMetaDataFull(1)") diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/client.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/client.py new file mode 100644 index 000000000..527fe153b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/client.py @@ -0,0 +1,5 @@ +from django.db.backends.sqlite3.client import DatabaseClient + + +class SpatiaLiteClient(DatabaseClient): + executable_name = "spatialite" diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/features.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/features.py new file mode 100644 index 000000000..9504bb094 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/features.py @@ -0,0 +1,26 @@ +from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures +from django.db.backends.sqlite3.features import ( + DatabaseFeatures as SQLiteDatabaseFeatures, +) +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseSpatialFeatures, SQLiteDatabaseFeatures): + can_alter_geometry_field = False # Not implemented + supports_3d_storage = True + + @cached_property + def supports_area_geodetic(self): + return bool(self.connection.ops.geom_lib_version()) + + @cached_property + def django_test_skips(self): + skips = super().django_test_skips + skips.update( + { + "SpatiaLite doesn't support distance lookups with Distance objects.": { + "gis_tests.geogapp.tests.GeographyTest.test02_distance_lookup", + }, + } + ) + return skips diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py new file mode 100644 index 000000000..8d0003fd5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py @@ -0,0 +1,82 @@ +from django.contrib.gis.gdal import OGRGeomType +from django.db.backends.sqlite3.introspection import ( + DatabaseIntrospection, + FlexibleFieldLookupDict, +) + + +class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict): + """ + Subclass that includes updates the `base_data_types_reverse` dict + for geometry field types. + """ + + base_data_types_reverse = { + **FlexibleFieldLookupDict.base_data_types_reverse, + "point": "GeometryField", + "linestring": "GeometryField", + "polygon": "GeometryField", + "multipoint": "GeometryField", + "multilinestring": "GeometryField", + "multipolygon": "GeometryField", + "geometrycollection": "GeometryField", + } + + +class SpatiaLiteIntrospection(DatabaseIntrospection): + data_types_reverse = GeoFlexibleFieldLookupDict() + + def get_geometry_type(self, table_name, description): + with self.connection.cursor() as cursor: + # Querying the `geometry_columns` table to get additional metadata. + cursor.execute( + "SELECT coord_dimension, srid, geometry_type " + "FROM geometry_columns " + "WHERE f_table_name=%s AND f_geometry_column=%s", + (table_name, description.name), + ) + row = cursor.fetchone() + if not row: + raise Exception( + 'Could not find a geometry column for "%s"."%s"' + % (table_name, description.name) + ) + + # OGRGeomType does not require GDAL and makes it easy to convert + # from OGC geom type name to Django field. + ogr_type = row[2] + if isinstance(ogr_type, int) and ogr_type > 1000: + # SpatiaLite uses SFSQL 1.2 offsets 1000 (Z), 2000 (M), and + # 3000 (ZM) to indicate the presence of higher dimensional + # coordinates (M not yet supported by Django). + ogr_type = ogr_type % 1000 + OGRGeomType.wkb25bit + field_type = OGRGeomType(ogr_type).django + + # Getting any GeometryField keyword arguments that are not the default. + dim = row[0] + srid = row[1] + field_params = {} + if srid != 4326: + field_params["srid"] = srid + if (isinstance(dim, str) and "Z" in dim) or dim == 3: + field_params["dim"] = 3 + return field_type, field_params + + def get_constraints(self, cursor, table_name): + constraints = super().get_constraints(cursor, table_name) + cursor.execute( + "SELECT f_geometry_column " + "FROM geometry_columns " + "WHERE f_table_name=%s AND spatial_index_enabled=1", + (table_name,), + ) + for row in cursor.fetchall(): + constraints["%s__spatial__index" % row[0]] = { + "columns": [row[0]], + "primary_key": False, + "unique": False, + "foreign_key": None, + "check": False, + "index": True, + } + return constraints diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/models.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/models.py new file mode 100644 index 000000000..7cc98ae12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/models.py @@ -0,0 +1,70 @@ +""" + The GeometryColumns and SpatialRefSys models for the SpatiaLite backend. +""" +from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin +from django.db import models + + +class SpatialiteGeometryColumns(models.Model): + """ + The 'geometry_columns' table from SpatiaLite. + """ + + f_table_name = models.CharField(max_length=256) + f_geometry_column = models.CharField(max_length=256) + coord_dimension = models.IntegerField() + srid = models.IntegerField(primary_key=True) + spatial_index_enabled = models.IntegerField() + type = models.IntegerField(db_column="geometry_type") + + class Meta: + app_label = "gis" + db_table = "geometry_columns" + managed = False + + def __str__(self): + return "%s.%s - %dD %s field (SRID: %d)" % ( + self.f_table_name, + self.f_geometry_column, + self.coord_dimension, + self.type, + self.srid, + ) + + @classmethod + def table_name_col(cls): + """ + Return the name of the metadata column used to store the feature table + name. + """ + return "f_table_name" + + @classmethod + def geom_col_name(cls): + """ + Return the name of the metadata column used to store the feature + geometry column. + """ + return "f_geometry_column" + + +class SpatialiteSpatialRefSys(models.Model, SpatialRefSysMixin): + """ + The 'spatial_ref_sys' table from SpatiaLite. + """ + + srid = models.IntegerField(primary_key=True) + auth_name = models.CharField(max_length=256) + auth_srid = models.IntegerField() + ref_sys_name = models.CharField(max_length=256) + proj4text = models.CharField(max_length=2048) + srtext = models.CharField(max_length=2048) + + class Meta: + app_label = "gis" + db_table = "spatial_ref_sys" + managed = False + + @property + def wkt(self): + return self.srtext diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/operations.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/operations.py new file mode 100644 index 000000000..8003fcb6c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/operations.py @@ -0,0 +1,225 @@ +""" +SQL functions reference lists: +https://www.gaia-gis.it/gaia-sins/spatialite-sql-4.3.0.html +""" +from django.contrib.gis.db import models +from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations +from django.contrib.gis.db.backends.spatialite.adapter import SpatiaLiteAdapter +from django.contrib.gis.db.backends.utils import SpatialOperator +from django.contrib.gis.geos.geometry import GEOSGeometry, GEOSGeometryBase +from django.contrib.gis.geos.prototypes.io import wkb_r +from django.contrib.gis.measure import Distance +from django.core.exceptions import ImproperlyConfigured +from django.db.backends.sqlite3.operations import DatabaseOperations +from django.utils.functional import cached_property +from django.utils.version import get_version_tuple + + +class SpatialiteNullCheckOperator(SpatialOperator): + def as_sql(self, connection, lookup, template_params, sql_params): + sql, params = super().as_sql(connection, lookup, template_params, sql_params) + return "%s > 0" % sql, params + + +class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): + name = "spatialite" + spatialite = True + + Adapter = SpatiaLiteAdapter + + collect = "Collect" + extent = "Extent" + makeline = "MakeLine" + unionagg = "GUnion" + + from_text = "GeomFromText" + + gis_operators = { + # Binary predicates + "equals": SpatialiteNullCheckOperator(func="Equals"), + "disjoint": SpatialiteNullCheckOperator(func="Disjoint"), + "touches": SpatialiteNullCheckOperator(func="Touches"), + "crosses": SpatialiteNullCheckOperator(func="Crosses"), + "within": SpatialiteNullCheckOperator(func="Within"), + "overlaps": SpatialiteNullCheckOperator(func="Overlaps"), + "contains": SpatialiteNullCheckOperator(func="Contains"), + "intersects": SpatialiteNullCheckOperator(func="Intersects"), + "relate": SpatialiteNullCheckOperator(func="Relate"), + "coveredby": SpatialiteNullCheckOperator(func="CoveredBy"), + "covers": SpatialiteNullCheckOperator(func="Covers"), + # Returns true if B's bounding box completely contains A's bounding box. + "contained": SpatialOperator(func="MbrWithin"), + # Returns true if A's bounding box completely contains B's bounding box. + "bbcontains": SpatialOperator(func="MbrContains"), + # Returns true if A's bounding box overlaps B's bounding box. + "bboverlaps": SpatialOperator(func="MbrOverlaps"), + # These are implemented here as synonyms for Equals + "same_as": SpatialiteNullCheckOperator(func="Equals"), + "exact": SpatialiteNullCheckOperator(func="Equals"), + # Distance predicates + "dwithin": SpatialOperator(func="PtDistWithin"), + } + + disallowed_aggregates = (models.Extent3D,) + + select = "CAST (AsEWKB(%s) AS BLOB)" + + function_names = { + "AsWKB": "St_AsBinary", + "ForcePolygonCW": "ST_ForceLHR", + "Length": "ST_Length", + "LineLocatePoint": "ST_Line_Locate_Point", + "NumPoints": "ST_NPoints", + "Reverse": "ST_Reverse", + "Scale": "ScaleCoords", + "Translate": "ST_Translate", + "Union": "ST_Union", + } + + @cached_property + def unsupported_functions(self): + unsupported = {"BoundingCircle", "GeometryDistance", "MemSize"} + if not self.geom_lib_version(): + unsupported |= {"Azimuth", "GeoHash", "MakeValid"} + return unsupported + + @cached_property + def spatial_version(self): + """Determine the version of the SpatiaLite library.""" + try: + version = self.spatialite_version_tuple()[1:] + except Exception as exc: + raise ImproperlyConfigured( + 'Cannot determine the SpatiaLite version for the "%s" database. ' + "Was the SpatiaLite initialization SQL loaded on this database?" + % (self.connection.settings_dict["NAME"],) + ) from exc + if version < (4, 3, 0): + raise ImproperlyConfigured("GeoDjango supports SpatiaLite 4.3.0 and above.") + return version + + def convert_extent(self, box): + """ + Convert the polygon data received from SpatiaLite to min/max values. + """ + if box is None: + return None + shell = GEOSGeometry(box).shell + xmin, ymin = shell[0][:2] + xmax, ymax = shell[2][:2] + return (xmin, ymin, xmax, ymax) + + def geo_db_type(self, f): + """ + Return None because geometry columns are added via the + `AddGeometryColumn` stored procedure on SpatiaLite. + """ + return None + + def get_distance(self, f, value, lookup_type): + """ + Return the distance parameters for the given geometry field, + lookup value, and lookup type. + """ + if not value: + return [] + value = value[0] + if isinstance(value, Distance): + if f.geodetic(self.connection): + if lookup_type == "dwithin": + raise ValueError( + "Only numeric values of degree units are allowed on " + "geographic DWithin queries." + ) + dist_param = value.m + else: + dist_param = getattr( + value, Distance.unit_attname(f.units_name(self.connection)) + ) + else: + dist_param = value + return [dist_param] + + def _get_spatialite_func(self, func): + """ + Helper routine for calling SpatiaLite functions and returning + their result. + Any error occurring in this method should be handled by the caller. + """ + cursor = self.connection._cursor() + try: + cursor.execute("SELECT %s" % func) + row = cursor.fetchone() + finally: + cursor.close() + return row[0] + + def geos_version(self): + "Return the version of GEOS used by SpatiaLite as a string." + return self._get_spatialite_func("geos_version()") + + def proj_version(self): + """Return the version of the PROJ library used by SpatiaLite.""" + return self._get_spatialite_func("proj4_version()") + + def lwgeom_version(self): + """Return the version of LWGEOM library used by SpatiaLite.""" + return self._get_spatialite_func("lwgeom_version()") + + def rttopo_version(self): + """Return the version of RTTOPO library used by SpatiaLite.""" + return self._get_spatialite_func("rttopo_version()") + + def geom_lib_version(self): + """ + Return the version of the version-dependant geom library used by + SpatiaLite. + """ + if self.spatial_version >= (5,): + return self.rttopo_version() + else: + return self.lwgeom_version() + + def spatialite_version(self): + "Return the SpatiaLite library version as a string." + return self._get_spatialite_func("spatialite_version()") + + def spatialite_version_tuple(self): + """ + Return the SpatiaLite version as a tuple (version string, major, + minor, subminor). + """ + version = self.spatialite_version() + return (version,) + get_version_tuple(version) + + def spatial_aggregate_name(self, agg_name): + """ + Return the spatial aggregate SQL template and function for the + given Aggregate instance. + """ + agg_name = "unionagg" if agg_name.lower() == "union" else agg_name.lower() + return getattr(self, agg_name) + + # Routines for getting the OGC-compliant models. + def geometry_columns(self): + from django.contrib.gis.db.backends.spatialite.models import ( + SpatialiteGeometryColumns, + ) + + return SpatialiteGeometryColumns + + def spatial_ref_sys(self): + from django.contrib.gis.db.backends.spatialite.models import ( + SpatialiteSpatialRefSys, + ) + + return SpatialiteSpatialRefSys + + def get_geometry_converter(self, expression): + geom_class = expression.output_field.geom_class + read = wkb_r().read + + def converter(value, expression, connection): + return None if value is None else GEOSGeometryBase(read(value), geom_class) + + return converter diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/schema.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/schema.py new file mode 100644 index 000000000..d37632edf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/spatialite/schema.py @@ -0,0 +1,191 @@ +from django.db import DatabaseError +from django.db.backends.sqlite3.schema import DatabaseSchemaEditor + + +class SpatialiteSchemaEditor(DatabaseSchemaEditor): + sql_add_geometry_column = ( + "SELECT AddGeometryColumn(%(table)s, %(column)s, %(srid)s, " + "%(geom_type)s, %(dim)s, %(null)s)" + ) + sql_add_spatial_index = "SELECT CreateSpatialIndex(%(table)s, %(column)s)" + sql_drop_spatial_index = "DROP TABLE idx_%(table)s_%(column)s" + sql_recover_geometry_metadata = ( + "SELECT RecoverGeometryColumn(%(table)s, %(column)s, %(srid)s, " + "%(geom_type)s, %(dim)s)" + ) + sql_remove_geometry_metadata = "SELECT DiscardGeometryColumn(%(table)s, %(column)s)" + sql_discard_geometry_columns = ( + "DELETE FROM %(geom_table)s WHERE f_table_name = %(table)s" + ) + sql_update_geometry_columns = ( + "UPDATE %(geom_table)s SET f_table_name = %(new_table)s " + "WHERE f_table_name = %(old_table)s" + ) + + geometry_tables = [ + "geometry_columns", + "geometry_columns_auth", + "geometry_columns_time", + "geometry_columns_statistics", + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.geometry_sql = [] + + def geo_quote_name(self, name): + return self.connection.ops.geo_quote_name(name) + + def column_sql(self, model, field, include_default=False): + from django.contrib.gis.db.models import GeometryField + + if not isinstance(field, GeometryField): + return super().column_sql(model, field, include_default) + + # Geometry columns are created by the `AddGeometryColumn` function + self.geometry_sql.append( + self.sql_add_geometry_column + % { + "table": self.geo_quote_name(model._meta.db_table), + "column": self.geo_quote_name(field.column), + "srid": field.srid, + "geom_type": self.geo_quote_name(field.geom_type), + "dim": field.dim, + "null": int(not field.null), + } + ) + + if field.spatial_index: + self.geometry_sql.append( + self.sql_add_spatial_index + % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + } + ) + return None, None + + def remove_geometry_metadata(self, model, field): + self.execute( + self.sql_remove_geometry_metadata + % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + } + ) + self.execute( + self.sql_drop_spatial_index + % { + "table": model._meta.db_table, + "column": field.column, + } + ) + + def create_model(self, model): + super().create_model(model) + # Create geometry columns + for sql in self.geometry_sql: + self.execute(sql) + self.geometry_sql = [] + + def delete_model(self, model, **kwargs): + from django.contrib.gis.db.models import GeometryField + + # Drop spatial metadata (dropping the table does not automatically remove them) + for field in model._meta.local_fields: + if isinstance(field, GeometryField): + self.remove_geometry_metadata(model, field) + # Make sure all geom stuff is gone + for geom_table in self.geometry_tables: + try: + self.execute( + self.sql_discard_geometry_columns + % { + "geom_table": geom_table, + "table": self.quote_name(model._meta.db_table), + } + ) + except DatabaseError: + pass + super().delete_model(model, **kwargs) + + def add_field(self, model, field): + from django.contrib.gis.db.models import GeometryField + + if isinstance(field, GeometryField): + # Populate self.geometry_sql + self.column_sql(model, field) + for sql in self.geometry_sql: + self.execute(sql) + self.geometry_sql = [] + else: + super().add_field(model, field) + + def remove_field(self, model, field): + from django.contrib.gis.db.models import GeometryField + + # NOTE: If the field is a geometry field, the table is just recreated, + # the parent's remove_field can't be used cause it will skip the + # recreation if the field does not have a database type. Geometry fields + # do not have a db type cause they are added and removed via stored + # procedures. + if isinstance(field, GeometryField): + self._remake_table(model, delete_field=field) + else: + super().remove_field(model, field) + + def alter_db_table( + self, model, old_db_table, new_db_table, disable_constraints=True + ): + from django.contrib.gis.db.models import GeometryField + + # Remove geometry-ness from temp table + for field in model._meta.local_fields: + if isinstance(field, GeometryField): + self.execute( + self.sql_remove_geometry_metadata + % { + "table": self.quote_name(old_db_table), + "column": self.quote_name(field.column), + } + ) + # Alter table + super().alter_db_table(model, old_db_table, new_db_table, disable_constraints) + # Repoint any straggler names + for geom_table in self.geometry_tables: + try: + self.execute( + self.sql_update_geometry_columns + % { + "geom_table": geom_table, + "old_table": self.quote_name(old_db_table), + "new_table": self.quote_name(new_db_table), + } + ) + except DatabaseError: + pass + # Re-add geometry-ness and rename spatial index tables + for field in model._meta.local_fields: + if isinstance(field, GeometryField): + self.execute( + self.sql_recover_geometry_metadata + % { + "table": self.geo_quote_name(new_db_table), + "column": self.geo_quote_name(field.column), + "srid": field.srid, + "geom_type": self.geo_quote_name(field.geom_type), + "dim": field.dim, + } + ) + if getattr(field, "spatial_index", False): + self.execute( + self.sql_rename_table + % { + "old_table": self.quote_name( + "idx_%s_%s" % (old_db_table, field.column) + ), + "new_table": self.quote_name( + "idx_%s_%s" % (new_db_table, field.column) + ), + } + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/backends/utils.py b/venv/Lib/site-packages/django/contrib/gis/db/backends/utils.py new file mode 100644 index 000000000..ffb742001 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/backends/utils.py @@ -0,0 +1,28 @@ +""" +A collection of utility routines and classes used by the spatial +backends. +""" + + +class SpatialOperator: + """ + Class encapsulating the behavior specific to a GIS operation (used by lookups). + """ + + sql_template = None + + def __init__(self, op=None, func=None): + self.op = op + self.func = func + + @property + def default_template(self): + if self.func: + return "%(func)s(%(lhs)s, %(rhs)s)" + else: + return "%(lhs)s %(op)s %(rhs)s" + + def as_sql(self, connection, lookup, template_params, sql_params): + sql_template = self.sql_template or lookup.sql_template or self.default_template + template_params.update({"op": self.op, "func": self.func}) + return sql_template % template_params, sql_params diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/models/__init__.py new file mode 100644 index 000000000..0d5d45d27 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/__init__.py @@ -0,0 +1,30 @@ +from django.db.models import * # NOQA isort:skip +from django.db.models import __all__ as models_all # isort:skip +import django.contrib.gis.db.models.functions # NOQA +import django.contrib.gis.db.models.lookups # NOQA +from django.contrib.gis.db.models.aggregates import * # NOQA +from django.contrib.gis.db.models.aggregates import __all__ as aggregates_all +from django.contrib.gis.db.models.fields import ( + GeometryCollectionField, + GeometryField, + LineStringField, + MultiLineStringField, + MultiPointField, + MultiPolygonField, + PointField, + PolygonField, + RasterField, +) + +__all__ = models_all + aggregates_all +__all__ += [ + "GeometryCollectionField", + "GeometryField", + "LineStringField", + "MultiLineStringField", + "MultiPointField", + "MultiPolygonField", + "PointField", + "PolygonField", + "RasterField", +] diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..035998a1cbb600ef06d71363e262a79c1e4129d3 GIT binary patch literal 772 zcmaJ<%WB*(6qV-bnX%^)3i*JRmMM+B43ts|DM=S;8IpD*M2$UCgc3alNe&G3Yr5+% z8M^AKyRN&cWKYP@#mM;Ft8)&9Kq*L?lOOB*$nhCukyL6w3r9a*C#MhGue(=5m1+ z5YP@C9s>j^WPtR(!&9G=?loBUfBO!=64vmghhd%f&6R6qiya}h?BU7dy>h(LdzHymVI4Ki z$>kB6liNZuosu$@nowa)aMYX7Y{Cra`A)Ld%J){LjN3sW_ivPcX^&}wsrKzla-)vp?|qO@(_U-M$Hw&S1^j_@E;mK=!^gW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/aggregates.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/aggregates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c901f12a2e6d473883ddbe5784f3367988b61f3 GIT binary patch literal 3410 zcmai0&2J<}6|d^A>G|~7alE?$C63U72az$v5FmtPm-R;ki&@1R5T$`uyQ@6u*`Ddy zsvff*^0+>khilO5&af2kx+oVX$R7D3E=)ia)PcCFN?-t?=_SHItTuPUwAD+J1a z{`}AV&#Hv{3zhlefN~G2It9TArwQp(M*9}C`Zlxs4s$5BTZ!BEnAb0{lF{wN@0VGb zk}l!S=af};2zR-6LbxZqW1Ce$FL57qUsOS_fnMen&?`o-gI?t|&}&9-fL`Yf&>Kcy z0DXZsL2nwp$rtxXYw6!$C22Xjy7ep*gKRq%3D>uFMA{dbJbI8OiHNc|9TXk)X-AtVR z_3SeWYgoGy2Lhl==_nhHvfuy_4WcAeiY=*hBqI@sXG1BJg2O3Yn;*vgjAi6MoNX9%`_VIfh^V8iL(z!`^zM3 zJ1Wk^Tf;DV5_W~^@Lo9Rrt48U0K)dyyRlm5`|JIbi$tx5Q`S^_cqE&!>mpQTfmpW2 zcjj?v&l?;~$$){xh3Y|tupsKkAabimPH9fgC?%P7OnP=sbL#-e%I)E+rq=-o-7^}~ z-1&n3t$y0Oa+U%H;UE&-e|(1J{DblL@2*{8uh#Z9e|LXp=cC7ee6+Q8cWusVTdLL4 zekS_E1R}jv*5z0MJD5SVYarBiS7f>bBFr+WohTh10XrfKUJ?TS>(Rqukx$T9jm_;_yTPVSz$z>0TjosmuQ zr`q!pa9Zj)oE}^1waf)>>0jy7M(#o4uyq zB>juvpseBqOw+3-$*6YAlPh3`UV`kBCWrHhM&8Aa(kG!Ze7I(Yu9y_PC1omGei0n* z(~*!ztZKFidTBgR%#~uK1S_jizaPqYESP_g%0PvOLeoe)=o#|cu)z#_xd!SFp(;!! z%XW>{iYU3XE*)q5#x;CjH20kDf{Q-h-QI3hwI7%u4gy^X0!Ub+M8J0~2%e6@1Opp_ z6QftIqCi$m1~Z-`zlSOsqwAAUjzp47!`V2DvD^f91IE>%n!xr6x`ky`Xv6la*5b;g z#QqoVBTV@BpkAO2SN9QNws4rsO-hqx=-LH(5E1z!6mO%rjRM_AE})pXulX`2;mr4- zUZCfpNj^2JyqSABTV?y zf(v4L$8>&yp@#0=1NVkIm0~)F6k}nE!S~A^IfuIsxjwfGCj{2wL7V~7xG1!m+*_Gt z5&0&xf8A{`jJBX&;H1~-cwx(AmG*S8YZne$hgLqo2{jP8Z7v*0iF-t@Lqp4wn5bC; zGWsFBJtj%&+?hE0AwE$g;#;JZ83PEuu1}|#aUVjHv8zVM%M-h<4LJ8-O7JQ!j|Y?Y zQEZ@?Z8Y;fWC2H9;78$oHLGbGb|PrHR`A?db$JbpY4G2A3b;klDG7cjIyQu>Dsc#w%AF zPA3=qAir}nXNcjUA7bYw3e;Y}i9+K&?8OHOxC6S$O_7LK^39QmGyi}ieu4tEZ`=%X z$xWM~^WMA}&g|d_vstmuBKuD9h-(8p_=s!6Bd*Q&+r=ZUUEBgD+=`@Pw!lNN=49g4 zV2SC(T(Iocq;HhPiE2-;|1dF`RF{GPt^$Z+%zY;F7=JWi8xSNKH^o^cTUgj1prMt z159uCOi%ae)2Gk*&gqUOCQ2HvUw`-C*Z%uYH0_sE7``kNF5;Gsu4$g;>7mxt9ldEd zhE8Q8G@F)VHFHjm%VwBw7Mud-t+3b}bH+HI3ro#$XS`W<%FPL9qB-eIHm97a=Cm{2 z+~@3T&Nws8S!b5(=EJ$>erG@D3*mw0LFXXni{YW>Vdptr^L78ow(cJF4R35+^GZM0 zw+-i*H|~}1YtHAcYuyhJ_2y8X zPzk8=6*C?E4ahw|sRd>ZBB zo{h52^qfKYdG7?uCzzg!_rkJPIr#~3y<#Nep5JggVeAFf&<0Qc|X3RxK&r2wMJfEP~d0GW8~i2!b?pol7lqs+KaqQoXYoXiSN+y?==C53K>l^;n7RY^MCAm&3 zh-FgZpBix?Da!VSFQULpitB#l`EgLM8^pBqD&m)J6Sw?lB%TiGgtXp+q;?BG(l?C< z=0okr+B;fn+|pue>yWO|pJ)D9dsl1eceEdA;uPxTKGr_g8-{0jx%S=MlXCBsW>*8h)rEUFQu9w>^;BEe1Aujgvy@HqT<-EdS4bR7Lmm1~)%8z@+ zpIGYao^~N^r>7m(F#luS|0vnGmi)LQT6VnQ+dTHO{9_Xb&f0FvvokK(?|f^;cBPE! zfgAgteJ6-F=re9*J-F?+Y~rfj5K)txdrvBHsR_SPlUwpV`%ENk|NTyI+YS9zTtU+; zPqydA?wTuAQ^CL%e;L5~=m?fqZQXD~3j|^vG(EIWhAKu6mnp zYdt!Tma&l5&aVgZytj6~35gBm`3A|qthTq3;)T#{u6gcjFVRRzaLbydTaPWHdmL2P zXkfLV)rhJW!l>?s@-<}C7u~t#n{QlQTAaV~?GvZuiL<99{=XxLTVg+wO4&K6sHmn? zR6#|R)P{Ht?-Mg>OJ{0_JS4LVQH*sP`ZQ+WyDCH^#Br)WuBhSZ6bGoAIV4U=`pux$ zbT=d6%ml65;GAD;gf3Qg3zOiKuuj*7+ujK3m7+LG-@QNy(ZCHm1vOGBo~K9L@C`$Dx~U-28T1Ckq3YCH~niS_TsYFS6kW&|A-*=`te*9{hHTXyOj)FElF z`i3jqIvNcmG_`6hYVfO6@SrME6<|Xh#eUOH-*an9YjkI6h)g~WQN6jg@X4>HHEpGy zO&m>L4mXv@aZ8%!9+X8*>lsM(p5C)O9V*w@);6Ke1FdKMLjNlr%HIHkE%)D`cX+&{ zgQ?2^_6N2#=t3o8tc^~K?I*L3$;k$xhF-N-+*`~e(v@Kt-N6FrHwc#8^0)3p0@ESZ zl}>q8O%(MlIM?_6Jg<>g8$9aJUl0V>Ax?+*1o-vaW0MUnQM4IdK;y&u_i;o}hmDWi+Og3cfA zXhn2{1#ztgb7Dz9 zY>0D^BBi#f$R+t(cQAVrR%fhMyTqd{J#R?0|vI@$N0_E2Be9_b4eL!8D_XB@IogS5n3ZU2$M zG%Dl4rhyYS4TZGM7C!ov8V5Cpc2lDodLkvCPU6d013RHAwvA0F1@S5#RZO-Rid}49 zzmBJhA$=Oy@b>VW`=8YJnDY#@J&^$M8nwHtOSXu6bxAM2PoI1PN%z360W)^|V|!!M zyH{`Y;-h|VNA~WG7up~0vZ8l?+F#Zg(uLNr12PO)-KXm*U9XqsI|^HXhc?4 zNJi%RFpYLER?v$d;Fct7lesgsYmx(FR1^0{|uvbTu z`>`5fo^Kh*8T8BQj-Hq*w+!PB#+j};Y`lkfmwM8vA2i~@5C_OJw((Rj_Bm_E?kyN? z7@s)m^U|%?qfUzqnXj6Wuxi;nu(Vd~Yve}VbqP72Rgz2=tlf$2te1Xs{oZUZ@@4CE zY;U-?VON!}1`;;lw)OiOhC^5Zz*=hqxfkpxX5JME@xmvMaj~ZZS>_2f;T9?7#oDT` zvdD#2F2>)|?2-48FPzl#I=qkF7Avb;rwPk0l4iQ6aLXkmJ;3IUCh{KK*`BcpRjSYy zN%%T!)6exKEyG<69XV~&5~olzx0x5G$XO3`!eq;+rG6{sLNW#(vJbJfQYk3YP`Ko| zZ2(JU*7gx~FamAiw`(lF;u@$)iVZ*(gdL-j@&fMc%0XZkMo}yx%_XtCwA$?U1W`Lk2pzOXVDLlf$`B}IJw(~ zDE7dEo*|BO^RfQG=;;sjcfeDGEX*wgzv%B>#;teMR~Ei`d5^j;sk(8_gHbzxK*dK0 zaWLLByYKczGF>mOP0=Ie29OW~Dv&>yqAmdYx-Vs;6P~pr0)=-1cJ(<{u@JR}aNlpf zdO7NZ9?5o!8Z&jJTyzzX2&3p$r)~3m*{4s*)76DaJ}Cvje*|aiz9893N&})qfgV^Y zEcP}jH+E1{N#~hN%7Lua0fqwvDEu8(I@wP%qSpG5uuz~#o3l6N&ZqT^^7W4LL;N6MB}_kJRER|xh;AK%s1)O|hOu=q z6@ik6)-w@^OP(2zQ|-;NdWLodozn0Yd6AsFP0o=O?`>^k?d?N;(wp&Su?c|S3W6uofCu{# z@=lFCBa-f0tol~^VTB9{ur;^OowJ*6n;mDe!;5XdMS+LqwqJ+W4ab-?V%DHd5~vVl z=LUxNq(=YqgTMQuTXl*E&A)kdW$E38PY5Jkdt|NSN7FuN{A-$dJIgdKW=}5u*Wdq? zu1DX%enB1qc0>!3u{Z*lBdywxm{5xa+!k(*n2_n?Sc!_8AYOvFiP6g;HDe1=69mD? zjs$uyKN30l5KZ-s2{GUgMNXhm6zpPV%c?!!vR%(Zs71w-!18`ueVqZFLNV-}iwsx` zxNLXSg#u7%w58wHUQrh>Xby!vi1JpaxdxaG*oAj~i;SPrXY89~wC{*|e0eCQqWC@3 z>gA4%qh`?c8PuuQpc{j>Up~j%I@B9tGxjSl4>>pTY=$xWBj{sEFd zFFZrzQV~M#yZ@TU#Y!IJqj@qA8B)%8r-&a=@&6kIwGJY`GVt9vRFejI@`;J*Qy{QV zOP4^Y)~A#04=YXpNiQwpqQ zo*~N9LL+-ec|091&MfdT#d{3Ib~t8nS)QL^+X>IUgl9QC zEAEI3jV*}p(70%<*VJIYOXc?{sZm11uH+Sq*sKiLLYiH8lzf$vJt9NcPtzpr3?MRO zP-JNEhp5cqQ3eeMh)jHwU8Io+8M9V;1sUQIg=J_94qk()v=1N>f<~LrO*Gc_96%B_ z)UY{ZZo?fUK!pvWitdbsk?Ykce2dxUIM{5uC(?<12!#sdB?b6(1T>NYQnJM&kFFEi z!Dy-~3{D=Uj{#guGVd`bkNy?c3uVVwW-Y! zYAN;jGmmKvdy4pKM~Gn&`zqLyrOn_sx0e6xM%I*FXKT~ft~+U=NIc>l6iI>tMf^Yn zK7tP<;+*IAw4w0Mw_YEpRz$;d?{|E$EUkr4hhEUe|nd6UGA^7#9mk%zbN zzvVOKiE?Rrf_o-iIdYMBUBvw2$cGpjJ})|YCwP=R{JT`-;ScyS7$D~u;8VRfFbkiO>qP^k_(oY5^!$l~5O?qv zBu))ZhcKN^>BjuR)#a6?`GxD|7A{{8Zr2qc(&2c1mx)bz^0oC%rq) zM{Ulv>D5Y?naCk7fA1Md zr+QwWbSgcSbVbvM9F$W&voLfgm}tALPBA@+*R)eKL@;l{JcC$Jy<2^Psq|EW`?hOv zd`q!=Ci4t0FW$Iu_43O6;zD;eQ=POGn%bZz4T0d*&=5YL;xi0^>-C2~r6&$Sp26Eu zHJ6>F@GQ9Jc`xVX@muf;Pq@|1)SE|VPkff*pH|OHl2fRILAhXSh_`h zWk#iF6pgaUtllLuCMweBmn)d$GA4Ne;Jw^HfG!0pf5nG}7eCoG!Um7M&_5ogs2h;6P z!TVM?bi=zFRba3;&@^_=5e4^K7oBG1zUtPvnuC zrsA1jr`!%t^8%jzbRfy_EN6$wNzVg}EIpEWBH%J^b?89tzJiRb>-5+`8L$;+MijF$ zRC^JhIVJxtBD#`-LVIqDPLO({jVRvJ_y-Uu{uJMJ4-XSJQm0NNWfzf1NO&B#d=bgh z+};@5W;lInWbUrg70SmIJ{k}WN+>YMzASI3h;LCbpkxPE>5B&$R}bjV<+{g*3E#_8 zC5g^1BA?6(Pcw-j?dSCm-%gUZj?D=Za!yBSbbUkewV&r}=d_J}Zc3O7bC`BUxltQ9JT7DXpQdI&f4eI4Acw6X~s0)yd4N+NqG@ zhaf&NvE;=Ha=g=^+*3Y;7-t=4vcW+B`bKU5v=3G%wjfKh=lJNnikbTxkQeMbBK O^wDX5x-k4VH}QW}2_(S) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/functions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/functions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9b2154c476582c0fa5e340afc5e120dca0ff734 GIT binary patch literal 18340 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/lookups.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/__pycache__/lookups.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c63b5c98d50904a77a98d86f73f461f7ef55d777 GIT binary patch literal 11770 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/aggregates.py b/venv/Lib/site-packages/django/contrib/gis/db/models/aggregates.py new file mode 100644 index 000000000..c19cbd06c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/aggregates.py @@ -0,0 +1,94 @@ +from django.contrib.gis.db.models.fields import ( + ExtentField, + GeometryCollectionField, + GeometryField, + LineStringField, +) +from django.db.models import Aggregate, Value +from django.utils.functional import cached_property + +__all__ = ["Collect", "Extent", "Extent3D", "MakeLine", "Union"] + + +class GeoAggregate(Aggregate): + function = None + is_extent = False + + @cached_property + def output_field(self): + return self.output_field_class(self.source_expressions[0].output_field.srid) + + def as_sql(self, compiler, connection, function=None, **extra_context): + # this will be called again in parent, but it's needed now - before + # we get the spatial_aggregate_name + connection.ops.check_expression_support(self) + return super().as_sql( + compiler, + connection, + function=function or connection.ops.spatial_aggregate_name(self.name), + **extra_context, + ) + + def as_oracle(self, compiler, connection, **extra_context): + if not self.is_extent: + tolerance = self.extra.get("tolerance") or getattr(self, "tolerance", 0.05) + clone = self.copy() + clone.set_source_expressions( + [ + *self.get_source_expressions(), + Value(tolerance), + ] + ) + template = "%(function)s(SDOAGGRTYPE(%(expressions)s))" + return clone.as_sql( + compiler, connection, template=template, **extra_context + ) + return self.as_sql(compiler, connection, **extra_context) + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + for expr in c.get_source_expressions(): + if not hasattr(expr.field, "geom_type"): + raise ValueError( + "Geospatial aggregates only allowed on geometry fields." + ) + return c + + +class Collect(GeoAggregate): + name = "Collect" + output_field_class = GeometryCollectionField + + +class Extent(GeoAggregate): + name = "Extent" + is_extent = "2D" + + def __init__(self, expression, **extra): + super().__init__(expression, output_field=ExtentField(), **extra) + + def convert_value(self, value, expression, connection): + return connection.ops.convert_extent(value) + + +class Extent3D(GeoAggregate): + name = "Extent3D" + is_extent = "3D" + + def __init__(self, expression, **extra): + super().__init__(expression, output_field=ExtentField(), **extra) + + def convert_value(self, value, expression, connection): + return connection.ops.convert_extent3d(value) + + +class MakeLine(GeoAggregate): + name = "MakeLine" + output_field_class = LineStringField + + +class Union(GeoAggregate): + name = "Union" + output_field_class = GeometryField diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/fields.py b/venv/Lib/site-packages/django/contrib/gis/db/models/fields.py new file mode 100644 index 000000000..889c1cfe8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/fields.py @@ -0,0 +1,436 @@ +from collections import defaultdict, namedtuple + +from django.contrib.gis import forms, gdal +from django.contrib.gis.db.models.proxy import SpatialProxy +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.geos import ( + GeometryCollection, + GEOSException, + GEOSGeometry, + LineString, + MultiLineString, + MultiPoint, + MultiPolygon, + Point, + Polygon, +) +from django.core.exceptions import ImproperlyConfigured +from django.db.models import Field +from django.utils.translation import gettext_lazy as _ + +# Local cache of the spatial_ref_sys table, which holds SRID data for each +# spatial database alias. This cache exists so that the database isn't queried +# for SRID info each time a distance query is constructed. +_srid_cache = defaultdict(dict) + + +SRIDCacheEntry = namedtuple( + "SRIDCacheEntry", ["units", "units_name", "spheroid", "geodetic"] +) + + +def get_srid_info(srid, connection): + """ + Return the units, unit name, and spheroid WKT associated with the + given SRID from the `spatial_ref_sys` (or equivalent) spatial database + table for the given database connection. These results are cached. + """ + from django.contrib.gis.gdal import SpatialReference + + global _srid_cache + + try: + # The SpatialRefSys model for the spatial backend. + SpatialRefSys = connection.ops.spatial_ref_sys() + except NotImplementedError: + SpatialRefSys = None + + alias, get_srs = ( + ( + connection.alias, + lambda srid: SpatialRefSys.objects.using(connection.alias) + .get(srid=srid) + .srs, + ) + if SpatialRefSys + else (None, SpatialReference) + ) + if srid not in _srid_cache[alias]: + srs = get_srs(srid) + units, units_name = srs.units + _srid_cache[alias][srid] = SRIDCacheEntry( + units=units, + units_name=units_name, + spheroid='SPHEROID["%s",%s,%s]' + % (srs["spheroid"], srs.semi_major, srs.inverse_flattening), + geodetic=srs.geographic, + ) + + return _srid_cache[alias][srid] + + +class BaseSpatialField(Field): + """ + The Base GIS Field. + + It's used as a base class for GeometryField and RasterField. Defines + properties that are common to all GIS fields such as the characteristics + of the spatial reference system of the field. + """ + + description = _("The base GIS field.") + empty_strings_allowed = False + + def __init__(self, verbose_name=None, srid=4326, spatial_index=True, **kwargs): + """ + The initialization function for base spatial fields. Takes the following + as keyword arguments: + + srid: + The spatial reference system identifier, an OGC standard. + Defaults to 4326 (WGS84). + + spatial_index: + Indicates whether to create a spatial index. Defaults to True. + Set this instead of 'db_index' for geographic fields since index + creation is different for geometry columns. + """ + + # Setting the index flag with the value of the `spatial_index` keyword. + self.spatial_index = spatial_index + + # Setting the SRID and getting the units. Unit information must be + # easily available in the field instance for distance queries. + self.srid = srid + + # Setting the verbose_name keyword argument with the positional + # first parameter, so this works like normal fields. + kwargs["verbose_name"] = verbose_name + + super().__init__(**kwargs) + + def deconstruct(self): + name, path, args, kwargs = super().deconstruct() + # Always include SRID for less fragility; include spatial index if it's + # not the default value. + kwargs["srid"] = self.srid + if self.spatial_index is not True: + kwargs["spatial_index"] = self.spatial_index + return name, path, args, kwargs + + def db_type(self, connection): + return connection.ops.geo_db_type(self) + + def spheroid(self, connection): + return get_srid_info(self.srid, connection).spheroid + + def units(self, connection): + return get_srid_info(self.srid, connection).units + + def units_name(self, connection): + return get_srid_info(self.srid, connection).units_name + + def geodetic(self, connection): + """ + Return true if this field's SRID corresponds with a coordinate + system that uses non-projected units (e.g., latitude/longitude). + """ + return get_srid_info(self.srid, connection).geodetic + + def get_placeholder(self, value, compiler, connection): + """ + Return the placeholder for the spatial column for the + given value. + """ + return connection.ops.get_geom_placeholder(self, value, compiler) + + def get_srid(self, obj): + """ + Return the default SRID for the given geometry or raster, taking into + account the SRID set for the field. For example, if the input geometry + or raster doesn't have an SRID, then the SRID of the field will be + returned. + """ + srid = obj.srid # SRID of given geometry. + if srid is None or self.srid == -1 or (srid == -1 and self.srid != -1): + return self.srid + else: + return srid + + def get_db_prep_value(self, value, connection, *args, **kwargs): + if value is None: + return None + return connection.ops.Adapter( + super().get_db_prep_value(value, connection, *args, **kwargs), + **( + {"geography": True} + if self.geography and connection.features.supports_geography + else {} + ), + ) + + def get_raster_prep_value(self, value, is_candidate): + """ + Return a GDALRaster if conversion is successful, otherwise return None. + """ + if isinstance(value, gdal.GDALRaster): + return value + elif is_candidate: + try: + return gdal.GDALRaster(value) + except GDALException: + pass + elif isinstance(value, dict): + try: + return gdal.GDALRaster(value) + except GDALException: + raise ValueError( + "Couldn't create spatial object from lookup value '%s'." % value + ) + + def get_prep_value(self, value): + obj = super().get_prep_value(value) + if obj is None: + return None + # When the input is not a geometry or raster, attempt to construct one + # from the given string input. + if isinstance(obj, GEOSGeometry): + pass + else: + # Check if input is a candidate for conversion to raster or geometry. + is_candidate = isinstance(obj, (bytes, str)) or hasattr( + obj, "__geo_interface__" + ) + # Try to convert the input to raster. + raster = self.get_raster_prep_value(obj, is_candidate) + + if raster: + obj = raster + elif is_candidate: + try: + obj = GEOSGeometry(obj) + except (GEOSException, GDALException): + raise ValueError( + "Couldn't create spatial object from lookup value '%s'." % obj + ) + else: + raise ValueError( + "Cannot use object with type %s for a spatial lookup parameter." + % type(obj).__name__ + ) + + # Assigning the SRID value. + obj.srid = self.get_srid(obj) + return obj + + +class GeometryField(BaseSpatialField): + """ + The base Geometry field -- maps to the OpenGIS Specification Geometry type. + """ + + description = _( + "The base Geometry field — maps to the OpenGIS Specification Geometry type." + ) + form_class = forms.GeometryField + # The OpenGIS Geometry name. + geom_type = "GEOMETRY" + geom_class = None + + def __init__( + self, + verbose_name=None, + dim=2, + geography=False, + *, + extent=(-180.0, -90.0, 180.0, 90.0), + tolerance=0.05, + **kwargs, + ): + """ + The initialization function for geometry fields. In addition to the + parameters from BaseSpatialField, it takes the following as keyword + arguments: + + dim: + The number of dimensions for this geometry. Defaults to 2. + + extent: + Customize the extent, in a 4-tuple of WGS 84 coordinates, for the + geometry field entry in the `USER_SDO_GEOM_METADATA` table. Defaults + to (-180.0, -90.0, 180.0, 90.0). + + tolerance: + Define the tolerance, in meters, to use for the geometry field + entry in the `USER_SDO_GEOM_METADATA` table. Defaults to 0.05. + """ + # Setting the dimension of the geometry field. + self.dim = dim + + # Is this a geography rather than a geometry column? + self.geography = geography + + # Oracle-specific private attributes for creating the entry in + # `USER_SDO_GEOM_METADATA` + self._extent = extent + self._tolerance = tolerance + + super().__init__(verbose_name=verbose_name, **kwargs) + + def deconstruct(self): + name, path, args, kwargs = super().deconstruct() + # Include kwargs if they're not the default values. + if self.dim != 2: + kwargs["dim"] = self.dim + if self.geography is not False: + kwargs["geography"] = self.geography + if self._extent != (-180.0, -90.0, 180.0, 90.0): + kwargs["extent"] = self._extent + if self._tolerance != 0.05: + kwargs["tolerance"] = self._tolerance + return name, path, args, kwargs + + def contribute_to_class(self, cls, name, **kwargs): + super().contribute_to_class(cls, name, **kwargs) + + # Setup for lazy-instantiated Geometry object. + setattr( + cls, + self.attname, + SpatialProxy(self.geom_class or GEOSGeometry, self, load_func=GEOSGeometry), + ) + + def formfield(self, **kwargs): + defaults = { + "form_class": self.form_class, + "geom_type": self.geom_type, + "srid": self.srid, + **kwargs, + } + if self.dim > 2 and not getattr( + defaults["form_class"].widget, "supports_3d", False + ): + defaults.setdefault("widget", forms.Textarea) + return super().formfield(**defaults) + + def select_format(self, compiler, sql, params): + """ + Return the selection format string, depending on the requirements + of the spatial backend. For example, Oracle and MySQL require custom + selection formats in order to retrieve geometries in OGC WKB. + """ + if not compiler.query.subquery: + return compiler.connection.ops.select % sql, params + return sql, params + + +# The OpenGIS Geometry Type Fields +class PointField(GeometryField): + geom_type = "POINT" + geom_class = Point + form_class = forms.PointField + description = _("Point") + + +class LineStringField(GeometryField): + geom_type = "LINESTRING" + geom_class = LineString + form_class = forms.LineStringField + description = _("Line string") + + +class PolygonField(GeometryField): + geom_type = "POLYGON" + geom_class = Polygon + form_class = forms.PolygonField + description = _("Polygon") + + +class MultiPointField(GeometryField): + geom_type = "MULTIPOINT" + geom_class = MultiPoint + form_class = forms.MultiPointField + description = _("Multi-point") + + +class MultiLineStringField(GeometryField): + geom_type = "MULTILINESTRING" + geom_class = MultiLineString + form_class = forms.MultiLineStringField + description = _("Multi-line string") + + +class MultiPolygonField(GeometryField): + geom_type = "MULTIPOLYGON" + geom_class = MultiPolygon + form_class = forms.MultiPolygonField + description = _("Multi polygon") + + +class GeometryCollectionField(GeometryField): + geom_type = "GEOMETRYCOLLECTION" + geom_class = GeometryCollection + form_class = forms.GeometryCollectionField + description = _("Geometry collection") + + +class ExtentField(Field): + "Used as a return value from an extent aggregate" + + description = _("Extent Aggregate Field") + + def get_internal_type(self): + return "ExtentField" + + def select_format(self, compiler, sql, params): + select = compiler.connection.ops.select_extent + return select % sql if select else sql, params + + +class RasterField(BaseSpatialField): + """ + Raster field for GeoDjango -- evaluates into GDALRaster objects. + """ + + description = _("Raster Field") + geom_type = "RASTER" + geography = False + + def _check_connection(self, connection): + # Make sure raster fields are used only on backends with raster support. + if ( + not connection.features.gis_enabled + or not connection.features.supports_raster + ): + raise ImproperlyConfigured( + "Raster fields require backends with raster support." + ) + + def db_type(self, connection): + self._check_connection(connection) + return super().db_type(connection) + + def from_db_value(self, value, expression, connection): + return connection.ops.parse_raster(value) + + def contribute_to_class(self, cls, name, **kwargs): + super().contribute_to_class(cls, name, **kwargs) + # Setup for lazy-instantiated Raster object. For large querysets, the + # instantiation of all GDALRasters can potentially be expensive. This + # delays the instantiation of the objects to the moment of evaluation + # of the raster attribute. + setattr(cls, self.attname, SpatialProxy(gdal.GDALRaster, self)) + + def get_transform(self, name): + from django.contrib.gis.db.models.lookups import RasterBandTransform + + try: + band_index = int(name) + return type( + "SpecificRasterBandTransform", + (RasterBandTransform,), + {"band_index": band_index}, + ) + except ValueError: + pass + return super().get_transform(name) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/functions.py b/venv/Lib/site-packages/django/contrib/gis/db/models/functions.py new file mode 100644 index 000000000..5f6c7b5cf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/functions.py @@ -0,0 +1,544 @@ +from decimal import Decimal + +from django.contrib.gis.db.models.fields import BaseSpatialField, GeometryField +from django.contrib.gis.db.models.sql import AreaField, DistanceField +from django.contrib.gis.geos import GEOSGeometry +from django.core.exceptions import FieldError +from django.db import NotSupportedError +from django.db.models import ( + BinaryField, + BooleanField, + FloatField, + Func, + IntegerField, + TextField, + Transform, + Value, +) +from django.db.models.functions import Cast +from django.utils.functional import cached_property + +NUMERIC_TYPES = (int, float, Decimal) + + +class GeoFuncMixin: + function = None + geom_param_pos = (0,) + + def __init__(self, *expressions, **extra): + super().__init__(*expressions, **extra) + + # Ensure that value expressions are geometric. + for pos in self.geom_param_pos: + expr = self.source_expressions[pos] + if not isinstance(expr, Value): + continue + try: + output_field = expr.output_field + except FieldError: + output_field = None + geom = expr.value + if ( + not isinstance(geom, GEOSGeometry) + or output_field + and not isinstance(output_field, GeometryField) + ): + raise TypeError( + "%s function requires a geometric argument in position %d." + % (self.name, pos + 1) + ) + if not geom.srid and not output_field: + raise ValueError("SRID is required for all geometries.") + if not output_field: + self.source_expressions[pos] = Value( + geom, output_field=GeometryField(srid=geom.srid) + ) + + @property + def name(self): + return self.__class__.__name__ + + @cached_property + def geo_field(self): + return self.source_expressions[self.geom_param_pos[0]].field + + def as_sql(self, compiler, connection, function=None, **extra_context): + if self.function is None and function is None: + function = connection.ops.spatial_function_name(self.name) + return super().as_sql(compiler, connection, function=function, **extra_context) + + def resolve_expression(self, *args, **kwargs): + res = super().resolve_expression(*args, **kwargs) + + # Ensure that expressions are geometric. + source_fields = res.get_source_fields() + for pos in self.geom_param_pos: + field = source_fields[pos] + if not isinstance(field, GeometryField): + raise TypeError( + "%s function requires a GeometryField in position %s, got %s." + % ( + self.name, + pos + 1, + type(field).__name__, + ) + ) + + base_srid = res.geo_field.srid + for pos in self.geom_param_pos[1:]: + expr = res.source_expressions[pos] + expr_srid = expr.output_field.srid + if expr_srid != base_srid: + # Automatic SRID conversion so objects are comparable. + res.source_expressions[pos] = Transform( + expr, base_srid + ).resolve_expression(*args, **kwargs) + return res + + def _handle_param(self, value, param_name="", check_types=None): + if not hasattr(value, "resolve_expression"): + if check_types and not isinstance(value, check_types): + raise TypeError( + "The %s parameter has the wrong type: should be %s." + % (param_name, check_types) + ) + return value + + +class GeoFunc(GeoFuncMixin, Func): + pass + + +class GeomOutputGeoFunc(GeoFunc): + @cached_property + def output_field(self): + return GeometryField(srid=self.geo_field.srid) + + +class SQLiteDecimalToFloatMixin: + """ + By default, Decimal values are converted to str by the SQLite backend, which + is not acceptable by the GIS functions expecting numeric values. + """ + + def as_sqlite(self, compiler, connection, **extra_context): + copy = self.copy() + copy.set_source_expressions( + [ + Value(float(expr.value)) + if hasattr(expr, "value") and isinstance(expr.value, Decimal) + else expr + for expr in copy.get_source_expressions() + ] + ) + return copy.as_sql(compiler, connection, **extra_context) + + +class OracleToleranceMixin: + tolerance = 0.05 + + def as_oracle(self, compiler, connection, **extra_context): + tolerance = Value( + self._handle_param( + self.extra.get("tolerance", self.tolerance), + "tolerance", + NUMERIC_TYPES, + ) + ) + clone = self.copy() + clone.set_source_expressions([*self.get_source_expressions(), tolerance]) + return clone.as_sql(compiler, connection, **extra_context) + + +class Area(OracleToleranceMixin, GeoFunc): + arity = 1 + + @cached_property + def output_field(self): + return AreaField(self.geo_field) + + def as_sql(self, compiler, connection, **extra_context): + if not connection.features.supports_area_geodetic and self.geo_field.geodetic( + connection + ): + raise NotSupportedError( + "Area on geodetic coordinate systems not supported." + ) + return super().as_sql(compiler, connection, **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + if self.geo_field.geodetic(connection): + extra_context["template"] = "%(function)s(%(expressions)s, %(spheroid)d)" + extra_context["spheroid"] = True + return self.as_sql(compiler, connection, **extra_context) + + +class Azimuth(GeoFunc): + output_field = FloatField() + arity = 2 + geom_param_pos = (0, 1) + + +class AsGeoJSON(GeoFunc): + output_field = TextField() + + def __init__(self, expression, bbox=False, crs=False, precision=8, **extra): + expressions = [expression] + if precision is not None: + expressions.append(self._handle_param(precision, "precision", int)) + options = 0 + if crs and bbox: + options = 3 + elif bbox: + options = 1 + elif crs: + options = 2 + if options: + expressions.append(options) + super().__init__(*expressions, **extra) + + def as_oracle(self, compiler, connection, **extra_context): + source_expressions = self.get_source_expressions() + clone = self.copy() + clone.set_source_expressions(source_expressions[:1]) + return super(AsGeoJSON, clone).as_sql(compiler, connection, **extra_context) + + +class AsGML(GeoFunc): + geom_param_pos = (1,) + output_field = TextField() + + def __init__(self, expression, version=2, precision=8, **extra): + expressions = [version, expression] + if precision is not None: + expressions.append(self._handle_param(precision, "precision", int)) + super().__init__(*expressions, **extra) + + def as_oracle(self, compiler, connection, **extra_context): + source_expressions = self.get_source_expressions() + version = source_expressions[0] + clone = self.copy() + clone.set_source_expressions([source_expressions[1]]) + extra_context["function"] = ( + "SDO_UTIL.TO_GML311GEOMETRY" + if version.value == 3 + else "SDO_UTIL.TO_GMLGEOMETRY" + ) + return super(AsGML, clone).as_sql(compiler, connection, **extra_context) + + +class AsKML(GeoFunc): + output_field = TextField() + + def __init__(self, expression, precision=8, **extra): + expressions = [expression] + if precision is not None: + expressions.append(self._handle_param(precision, "precision", int)) + super().__init__(*expressions, **extra) + + +class AsSVG(GeoFunc): + output_field = TextField() + + def __init__(self, expression, relative=False, precision=8, **extra): + relative = ( + relative if hasattr(relative, "resolve_expression") else int(relative) + ) + expressions = [ + expression, + relative, + self._handle_param(precision, "precision", int), + ] + super().__init__(*expressions, **extra) + + +class AsWKB(GeoFunc): + output_field = BinaryField() + arity = 1 + + +class AsWKT(GeoFunc): + output_field = TextField() + arity = 1 + + +class BoundingCircle(OracleToleranceMixin, GeomOutputGeoFunc): + def __init__(self, expression, num_seg=48, **extra): + super().__init__(expression, num_seg, **extra) + + def as_oracle(self, compiler, connection, **extra_context): + clone = self.copy() + clone.set_source_expressions([self.get_source_expressions()[0]]) + return super(BoundingCircle, clone).as_oracle( + compiler, connection, **extra_context + ) + + +class Centroid(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 1 + + +class Difference(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 2 + geom_param_pos = (0, 1) + + +class DistanceResultMixin: + @cached_property + def output_field(self): + return DistanceField(self.geo_field) + + def source_is_geography(self): + return self.geo_field.geography and self.geo_field.srid == 4326 + + +class Distance(DistanceResultMixin, OracleToleranceMixin, GeoFunc): + geom_param_pos = (0, 1) + spheroid = None + + def __init__(self, expr1, expr2, spheroid=None, **extra): + expressions = [expr1, expr2] + if spheroid is not None: + self.spheroid = self._handle_param(spheroid, "spheroid", bool) + super().__init__(*expressions, **extra) + + def as_postgresql(self, compiler, connection, **extra_context): + clone = self.copy() + function = None + expr2 = clone.source_expressions[1] + geography = self.source_is_geography() + if expr2.output_field.geography != geography: + if isinstance(expr2, Value): + expr2.output_field.geography = geography + else: + clone.source_expressions[1] = Cast( + expr2, + GeometryField(srid=expr2.output_field.srid, geography=geography), + ) + + if not geography and self.geo_field.geodetic(connection): + # Geometry fields with geodetic (lon/lat) coordinates need special + # distance functions. + if self.spheroid: + # DistanceSpheroid is more accurate and resource intensive than + # DistanceSphere. + function = connection.ops.spatial_function_name("DistanceSpheroid") + # Replace boolean param by the real spheroid of the base field + clone.source_expressions.append( + Value(self.geo_field.spheroid(connection)) + ) + else: + function = connection.ops.spatial_function_name("DistanceSphere") + return super(Distance, clone).as_sql( + compiler, connection, function=function, **extra_context + ) + + def as_sqlite(self, compiler, connection, **extra_context): + if self.geo_field.geodetic(connection): + # SpatiaLite returns NULL instead of zero on geodetic coordinates + extra_context[ + "template" + ] = "COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)" + extra_context["spheroid"] = int(bool(self.spheroid)) + return super().as_sql(compiler, connection, **extra_context) + + +class Envelope(GeomOutputGeoFunc): + arity = 1 + + +class ForcePolygonCW(GeomOutputGeoFunc): + arity = 1 + + +class GeoHash(GeoFunc): + output_field = TextField() + + def __init__(self, expression, precision=None, **extra): + expressions = [expression] + if precision is not None: + expressions.append(self._handle_param(precision, "precision", int)) + super().__init__(*expressions, **extra) + + def as_mysql(self, compiler, connection, **extra_context): + clone = self.copy() + # If no precision is provided, set it to the maximum. + if len(clone.source_expressions) < 2: + clone.source_expressions.append(Value(100)) + return clone.as_sql(compiler, connection, **extra_context) + + +class GeometryDistance(GeoFunc): + output_field = FloatField() + arity = 2 + function = "" + arg_joiner = " <-> " + geom_param_pos = (0, 1) + + +class Intersection(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 2 + geom_param_pos = (0, 1) + + +@BaseSpatialField.register_lookup +class IsValid(OracleToleranceMixin, GeoFuncMixin, Transform): + lookup_name = "isvalid" + output_field = BooleanField() + + def as_oracle(self, compiler, connection, **extra_context): + sql, params = super().as_oracle(compiler, connection, **extra_context) + return "CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END" % sql, params + + +class Length(DistanceResultMixin, OracleToleranceMixin, GeoFunc): + def __init__(self, expr1, spheroid=True, **extra): + self.spheroid = spheroid + super().__init__(expr1, **extra) + + def as_sql(self, compiler, connection, **extra_context): + if ( + self.geo_field.geodetic(connection) + and not connection.features.supports_length_geodetic + ): + raise NotSupportedError( + "This backend doesn't support Length on geodetic fields" + ) + return super().as_sql(compiler, connection, **extra_context) + + def as_postgresql(self, compiler, connection, **extra_context): + clone = self.copy() + function = None + if self.source_is_geography(): + clone.source_expressions.append(Value(self.spheroid)) + elif self.geo_field.geodetic(connection): + # Geometry fields with geodetic (lon/lat) coordinates need length_spheroid + function = connection.ops.spatial_function_name("LengthSpheroid") + clone.source_expressions.append(Value(self.geo_field.spheroid(connection))) + else: + dim = min(f.dim for f in self.get_source_fields() if f) + if dim > 2: + function = connection.ops.length3d + return super(Length, clone).as_sql( + compiler, connection, function=function, **extra_context + ) + + def as_sqlite(self, compiler, connection, **extra_context): + function = None + if self.geo_field.geodetic(connection): + function = "GeodesicLength" if self.spheroid else "GreatCircleLength" + return super().as_sql(compiler, connection, function=function, **extra_context) + + +class LineLocatePoint(GeoFunc): + output_field = FloatField() + arity = 2 + geom_param_pos = (0, 1) + + +class MakeValid(GeomOutputGeoFunc): + pass + + +class MemSize(GeoFunc): + output_field = IntegerField() + arity = 1 + + +class NumGeometries(GeoFunc): + output_field = IntegerField() + arity = 1 + + +class NumPoints(GeoFunc): + output_field = IntegerField() + arity = 1 + + +class Perimeter(DistanceResultMixin, OracleToleranceMixin, GeoFunc): + arity = 1 + + def as_postgresql(self, compiler, connection, **extra_context): + function = None + if self.geo_field.geodetic(connection) and not self.source_is_geography(): + raise NotSupportedError( + "ST_Perimeter cannot use a non-projected non-geography field." + ) + dim = min(f.dim for f in self.get_source_fields()) + if dim > 2: + function = connection.ops.perimeter3d + return super().as_sql(compiler, connection, function=function, **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + if self.geo_field.geodetic(connection): + raise NotSupportedError("Perimeter cannot use a non-projected field.") + return super().as_sql(compiler, connection, **extra_context) + + +class PointOnSurface(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 1 + + +class Reverse(GeoFunc): + arity = 1 + + +class Scale(SQLiteDecimalToFloatMixin, GeomOutputGeoFunc): + def __init__(self, expression, x, y, z=0.0, **extra): + expressions = [ + expression, + self._handle_param(x, "x", NUMERIC_TYPES), + self._handle_param(y, "y", NUMERIC_TYPES), + ] + if z != 0.0: + expressions.append(self._handle_param(z, "z", NUMERIC_TYPES)) + super().__init__(*expressions, **extra) + + +class SnapToGrid(SQLiteDecimalToFloatMixin, GeomOutputGeoFunc): + def __init__(self, expression, *args, **extra): + nargs = len(args) + expressions = [expression] + if nargs in (1, 2): + expressions.extend( + [self._handle_param(arg, "", NUMERIC_TYPES) for arg in args] + ) + elif nargs == 4: + # Reverse origin and size param ordering + expressions += [ + *(self._handle_param(arg, "", NUMERIC_TYPES) for arg in args[2:]), + *(self._handle_param(arg, "", NUMERIC_TYPES) for arg in args[0:2]), + ] + else: + raise ValueError("Must provide 1, 2, or 4 arguments to `SnapToGrid`.") + super().__init__(*expressions, **extra) + + +class SymDifference(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 2 + geom_param_pos = (0, 1) + + +class Transform(GeomOutputGeoFunc): + def __init__(self, expression, srid, **extra): + expressions = [ + expression, + self._handle_param(srid, "srid", int), + ] + if "output_field" not in extra: + extra["output_field"] = GeometryField(srid=srid) + super().__init__(*expressions, **extra) + + +class Translate(Scale): + def as_sqlite(self, compiler, connection, **extra_context): + clone = self.copy() + if len(self.source_expressions) < 4: + # Always provide the z parameter for ST_Translate + clone.source_expressions.append(Value(0)) + return super(Translate, clone).as_sqlite(compiler, connection, **extra_context) + + +class Union(OracleToleranceMixin, GeomOutputGeoFunc): + arity = 2 + geom_param_pos = (0, 1) diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/lookups.py b/venv/Lib/site-packages/django/contrib/gis/db/models/lookups.py new file mode 100644 index 000000000..07762d0a1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/lookups.py @@ -0,0 +1,395 @@ +from django.contrib.gis.db.models.fields import BaseSpatialField +from django.contrib.gis.measure import Distance +from django.db import NotSupportedError +from django.db.models import Expression, Lookup, Transform +from django.db.models.sql.query import Query +from django.utils.regex_helper import _lazy_re_compile + + +class RasterBandTransform(Transform): + def as_sql(self, compiler, connection): + return compiler.compile(self.lhs) + + +class GISLookup(Lookup): + sql_template = None + transform_func = None + distance = False + band_rhs = None + band_lhs = None + + def __init__(self, lhs, rhs): + rhs, *self.rhs_params = rhs if isinstance(rhs, (list, tuple)) else [rhs] + super().__init__(lhs, rhs) + self.template_params = {} + self.process_rhs_params() + + def process_rhs_params(self): + if self.rhs_params: + # Check if a band index was passed in the query argument. + if len(self.rhs_params) == (2 if self.lookup_name == "relate" else 1): + self.process_band_indices() + elif len(self.rhs_params) > 1: + raise ValueError("Tuple too long for lookup %s." % self.lookup_name) + elif isinstance(self.lhs, RasterBandTransform): + self.process_band_indices(only_lhs=True) + + def process_band_indices(self, only_lhs=False): + """ + Extract the lhs band index from the band transform class and the rhs + band index from the input tuple. + """ + # PostGIS band indices are 1-based, so the band index needs to be + # increased to be consistent with the GDALRaster band indices. + if only_lhs: + self.band_rhs = 1 + self.band_lhs = self.lhs.band_index + 1 + return + + if isinstance(self.lhs, RasterBandTransform): + self.band_lhs = self.lhs.band_index + 1 + else: + self.band_lhs = 1 + + self.band_rhs, *self.rhs_params = self.rhs_params + + def get_db_prep_lookup(self, value, connection): + # get_db_prep_lookup is called by process_rhs from super class + return ("%s", [connection.ops.Adapter(value)]) + + def process_rhs(self, compiler, connection): + if isinstance(self.rhs, Query): + # If rhs is some Query, don't touch it. + return super().process_rhs(compiler, connection) + if isinstance(self.rhs, Expression): + self.rhs = self.rhs.resolve_expression(compiler.query) + rhs, rhs_params = super().process_rhs(compiler, connection) + placeholder = connection.ops.get_geom_placeholder( + self.lhs.output_field, self.rhs, compiler + ) + return placeholder % rhs, rhs_params + + def get_rhs_op(self, connection, rhs): + # Unlike BuiltinLookup, the GIS get_rhs_op() implementation should return + # an object (SpatialOperator) with an as_sql() method to allow for more + # complex computations (where the lhs part can be mixed in). + return connection.ops.gis_operators[self.lookup_name] + + def as_sql(self, compiler, connection): + lhs_sql, lhs_params = self.process_lhs(compiler, connection) + rhs_sql, rhs_params = self.process_rhs(compiler, connection) + sql_params = (*lhs_params, *rhs_params) + + template_params = { + "lhs": lhs_sql, + "rhs": rhs_sql, + "value": "%s", + **self.template_params, + } + rhs_op = self.get_rhs_op(connection, rhs_sql) + return rhs_op.as_sql(connection, self, template_params, sql_params) + + +# ------------------ +# Geometry operators +# ------------------ + + +@BaseSpatialField.register_lookup +class OverlapsLeftLookup(GISLookup): + """ + The overlaps_left operator returns true if A's bounding box overlaps or is to the + left of B's bounding box. + """ + + lookup_name = "overlaps_left" + + +@BaseSpatialField.register_lookup +class OverlapsRightLookup(GISLookup): + """ + The 'overlaps_right' operator returns true if A's bounding box overlaps or is to the + right of B's bounding box. + """ + + lookup_name = "overlaps_right" + + +@BaseSpatialField.register_lookup +class OverlapsBelowLookup(GISLookup): + """ + The 'overlaps_below' operator returns true if A's bounding box overlaps or is below + B's bounding box. + """ + + lookup_name = "overlaps_below" + + +@BaseSpatialField.register_lookup +class OverlapsAboveLookup(GISLookup): + """ + The 'overlaps_above' operator returns true if A's bounding box overlaps or is above + B's bounding box. + """ + + lookup_name = "overlaps_above" + + +@BaseSpatialField.register_lookup +class LeftLookup(GISLookup): + """ + The 'left' operator returns true if A's bounding box is strictly to the left + of B's bounding box. + """ + + lookup_name = "left" + + +@BaseSpatialField.register_lookup +class RightLookup(GISLookup): + """ + The 'right' operator returns true if A's bounding box is strictly to the right + of B's bounding box. + """ + + lookup_name = "right" + + +@BaseSpatialField.register_lookup +class StrictlyBelowLookup(GISLookup): + """ + The 'strictly_below' operator returns true if A's bounding box is strictly below B's + bounding box. + """ + + lookup_name = "strictly_below" + + +@BaseSpatialField.register_lookup +class StrictlyAboveLookup(GISLookup): + """ + The 'strictly_above' operator returns true if A's bounding box is strictly above B's + bounding box. + """ + + lookup_name = "strictly_above" + + +@BaseSpatialField.register_lookup +class SameAsLookup(GISLookup): + """ + The "~=" operator is the "same as" operator. It tests actual geometric + equality of two features. So if A and B are the same feature, + vertex-by-vertex, the operator returns true. + """ + + lookup_name = "same_as" + + +BaseSpatialField.register_lookup(SameAsLookup, "exact") + + +@BaseSpatialField.register_lookup +class BBContainsLookup(GISLookup): + """ + The 'bbcontains' operator returns true if A's bounding box completely contains + by B's bounding box. + """ + + lookup_name = "bbcontains" + + +@BaseSpatialField.register_lookup +class BBOverlapsLookup(GISLookup): + """ + The 'bboverlaps' operator returns true if A's bounding box overlaps B's + bounding box. + """ + + lookup_name = "bboverlaps" + + +@BaseSpatialField.register_lookup +class ContainedLookup(GISLookup): + """ + The 'contained' operator returns true if A's bounding box is completely contained + by B's bounding box. + """ + + lookup_name = "contained" + + +# ------------------ +# Geometry functions +# ------------------ + + +@BaseSpatialField.register_lookup +class ContainsLookup(GISLookup): + lookup_name = "contains" + + +@BaseSpatialField.register_lookup +class ContainsProperlyLookup(GISLookup): + lookup_name = "contains_properly" + + +@BaseSpatialField.register_lookup +class CoveredByLookup(GISLookup): + lookup_name = "coveredby" + + +@BaseSpatialField.register_lookup +class CoversLookup(GISLookup): + lookup_name = "covers" + + +@BaseSpatialField.register_lookup +class CrossesLookup(GISLookup): + lookup_name = "crosses" + + +@BaseSpatialField.register_lookup +class DisjointLookup(GISLookup): + lookup_name = "disjoint" + + +@BaseSpatialField.register_lookup +class EqualsLookup(GISLookup): + lookup_name = "equals" + + +@BaseSpatialField.register_lookup +class IntersectsLookup(GISLookup): + lookup_name = "intersects" + + +@BaseSpatialField.register_lookup +class OverlapsLookup(GISLookup): + lookup_name = "overlaps" + + +@BaseSpatialField.register_lookup +class RelateLookup(GISLookup): + lookup_name = "relate" + sql_template = "%(func)s(%(lhs)s, %(rhs)s, %%s)" + pattern_regex = _lazy_re_compile(r"^[012TF\*]{9}$") + + def process_rhs(self, compiler, connection): + # Check the pattern argument + pattern = self.rhs_params[0] + backend_op = connection.ops.gis_operators[self.lookup_name] + if hasattr(backend_op, "check_relate_argument"): + backend_op.check_relate_argument(pattern) + elif not isinstance(pattern, str) or not self.pattern_regex.match(pattern): + raise ValueError('Invalid intersection matrix pattern "%s".' % pattern) + sql, params = super().process_rhs(compiler, connection) + return sql, params + [pattern] + + +@BaseSpatialField.register_lookup +class TouchesLookup(GISLookup): + lookup_name = "touches" + + +@BaseSpatialField.register_lookup +class WithinLookup(GISLookup): + lookup_name = "within" + + +class DistanceLookupBase(GISLookup): + distance = True + sql_template = "%(func)s(%(lhs)s, %(rhs)s) %(op)s %(value)s" + + def process_rhs_params(self): + if not 1 <= len(self.rhs_params) <= 3: + raise ValueError( + "2, 3, or 4-element tuple required for '%s' lookup." % self.lookup_name + ) + elif len(self.rhs_params) == 3 and self.rhs_params[2] != "spheroid": + raise ValueError( + "For 4-element tuples the last argument must be the 'spheroid' " + "directive." + ) + + # Check if the second parameter is a band index. + if len(self.rhs_params) > 1 and self.rhs_params[1] != "spheroid": + self.process_band_indices() + + def process_distance(self, compiler, connection): + dist_param = self.rhs_params[0] + return ( + compiler.compile(dist_param.resolve_expression(compiler.query)) + if hasattr(dist_param, "resolve_expression") + else ( + "%s", + connection.ops.get_distance( + self.lhs.output_field, self.rhs_params, self.lookup_name + ), + ) + ) + + +@BaseSpatialField.register_lookup +class DWithinLookup(DistanceLookupBase): + lookup_name = "dwithin" + sql_template = "%(func)s(%(lhs)s, %(rhs)s, %(value)s)" + + def process_distance(self, compiler, connection): + dist_param = self.rhs_params[0] + if ( + not connection.features.supports_dwithin_distance_expr + and hasattr(dist_param, "resolve_expression") + and not isinstance(dist_param, Distance) + ): + raise NotSupportedError( + "This backend does not support expressions for specifying " + "distance in the dwithin lookup." + ) + return super().process_distance(compiler, connection) + + def process_rhs(self, compiler, connection): + dist_sql, dist_params = self.process_distance(compiler, connection) + self.template_params["value"] = dist_sql + rhs_sql, params = super().process_rhs(compiler, connection) + return rhs_sql, params + dist_params + + +class DistanceLookupFromFunction(DistanceLookupBase): + def as_sql(self, compiler, connection): + spheroid = ( + len(self.rhs_params) == 2 and self.rhs_params[-1] == "spheroid" + ) or None + distance_expr = connection.ops.distance_expr_for_lookup( + self.lhs, self.rhs, spheroid=spheroid + ) + sql, params = compiler.compile(distance_expr.resolve_expression(compiler.query)) + dist_sql, dist_params = self.process_distance(compiler, connection) + return ( + "%(func)s %(op)s %(dist)s" % {"func": sql, "op": self.op, "dist": dist_sql}, + params + dist_params, + ) + + +@BaseSpatialField.register_lookup +class DistanceGTLookup(DistanceLookupFromFunction): + lookup_name = "distance_gt" + op = ">" + + +@BaseSpatialField.register_lookup +class DistanceGTELookup(DistanceLookupFromFunction): + lookup_name = "distance_gte" + op = ">=" + + +@BaseSpatialField.register_lookup +class DistanceLTLookup(DistanceLookupFromFunction): + lookup_name = "distance_lt" + op = "<" + + +@BaseSpatialField.register_lookup +class DistanceLTELookup(DistanceLookupFromFunction): + lookup_name = "distance_lte" + op = "<=" diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/proxy.py b/venv/Lib/site-packages/django/contrib/gis/db/models/proxy.py new file mode 100644 index 000000000..4db365dc1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/proxy.py @@ -0,0 +1,83 @@ +""" +The SpatialProxy object allows for lazy-geometries and lazy-rasters. The proxy +uses Python descriptors for instantiating and setting Geometry or Raster +objects corresponding to geographic model fields. + +Thanks to Robert Coup for providing this functionality (see #4322). +""" +from django.db.models.query_utils import DeferredAttribute + + +class SpatialProxy(DeferredAttribute): + def __init__(self, klass, field, load_func=None): + """ + Initialize on the given Geometry or Raster class (not an instance) + and the corresponding field. + """ + self._klass = klass + self._load_func = load_func or klass + super().__init__(field) + + def __get__(self, instance, cls=None): + """ + Retrieve the geometry or raster, initializing it using the + corresponding class specified during initialization and the value of + the field. Currently, GEOS or OGR geometries as well as GDALRasters are + supported. + """ + if instance is None: + # Accessed on a class, not an instance + return self + + # Getting the value of the field. + try: + geo_value = instance.__dict__[self.field.attname] + except KeyError: + geo_value = super().__get__(instance, cls) + + if isinstance(geo_value, self._klass): + geo_obj = geo_value + elif (geo_value is None) or (geo_value == ""): + geo_obj = None + else: + # Otherwise, a geometry or raster object is built using the field's + # contents, and the model's corresponding attribute is set. + geo_obj = self._load_func(geo_value) + setattr(instance, self.field.attname, geo_obj) + return geo_obj + + def __set__(self, instance, value): + """ + Retrieve the proxied geometry or raster with the corresponding class + specified during initialization. + + To set geometries, use values of None, HEXEWKB, or WKT. + To set rasters, use JSON or dict values. + """ + # The geographic type of the field. + gtype = self.field.geom_type + + if gtype == "RASTER" and ( + value is None or isinstance(value, (str, dict, self._klass)) + ): + # For raster fields, ensure input is None or a string, dict, or + # raster instance. + pass + elif isinstance(value, self._klass): + # The geometry type must match that of the field -- unless the + # general GeometryField is used. + if value.srid is None: + # Assigning the field SRID if the geometry has no SRID. + value.srid = self.field.srid + elif value is None or isinstance(value, (str, memoryview)): + # Set geometries with None, WKT, HEX, or WKB + pass + else: + raise TypeError( + "Cannot set %s SpatialProxy (%s) with value of type: %s" + % (instance.__class__.__name__, gtype, type(value)) + ) + + # Setting the objects dictionary with the value, and returning. + instance.__dict__[self.field.attname] = value + return value diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__init__.py b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__init__.py new file mode 100644 index 000000000..1376e8d7d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__init__.py @@ -0,0 +1,6 @@ +from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField + +__all__ = [ + "AreaField", + "DistanceField", +] diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2040600440344de3851d74475dcdce5e96f52b47 GIT binary patch literal 340 zcmYk0%}T^D6ou1t2CGo;0epc$rrC>#;xM`p5yedjhO`MKW17t5rUhTXckz`9u3Wiu z?LxeD1U+!i<#2!ae4g(S)W^eX^^E;(4F5$joMOQNnj$K(q)p1Cr6o;>qAG1@nX1Vh znN8nugUsl#dls}@8g12(FAPNKYW)+#_$;Jo*Rx4^s8-T7zNo#6!Bjt@E z@GD(M-fP$MD^qbWQP0=1ew2*{z6D~xKn#JHs@N8YArKS7I1_~^)=xurjDybVlLP@E ML)#}brAhYn4FM%!-v9sr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0212ceaa3f935e38740b6cc7fa824902ee51d601 GIT binary patch literal 2905 zcma)8TW{Mo6ee}CWyMa@tV^?`Th-kSG){MU7=~e&woCgk1Vh_xfM86JMJAOiOD;)g zi{S#p5}}@aGIg}LJX}VPgkI6%dJm0x|RMu*_1fD;?|E>2^ zgOJ~GF#lLE_#B$N2Z9lwFv^UC4h-L**f$e%VENX-_H8}3lG>o|*D1M0n9XX(gw=Sx z?;M$a12lE!fW|2`E^FK+ZFhXfy>~yB-XLS6gnRe1gh@}vgCPu}B$Sd%Pi0<|r3YLn zZ=Yv!7^*l-yn`?q!Q`IE2A;alT^6da7fRl7{{U-Ao96YKJckPB}w6CSEd6rISJvjO|q(3HO}fKcR!JfTks zB@;R!fx*aKGNrpyGq>dkw#%I$h|^dFLEZol1$%hd6i`c^?1?7qFr|4T2(&|kU`qa$ zH$LuuBe{^>J0mH>?#(P34S1?#_g1WKk9ysmSV*-jC%r>unc~-Ifm%oPn^(I7>UjL$L&gEF&h&E0?--yn5oA zPKDqZPoNiWK$B}A6nH?#a=QN)Kz7G56kP>uvg zgkIJ|NV3y5b2pZ8T4aR4V{-RfOsX%1$i&nTXlrikJQL@kUx-!IF7I;{3L#F)Su5xb{*Co=*;7;LM+ZHV*(+5L?>q7 zd}4to?9vlgRE^P?Osolw>96z`@CJHhYV2yW+jW6eBd~^YdoRgCC0;?r1_~?(9qmPT z@E^em5>r)N!WFNfI2H94k_~!62mMu8A#pc!fNMH*+1Q}ti!&!Itd1zGtRC!RLkH+; zU_}-S%pra1loqi%Wq}SuoGLETFbUM*kiUytAW}%XQvq05H>EpM7l|Sb2ONmP4T6Gm zq2COGhodklXX-(~vM302y^3|T=rW2oP`nKyZ!ef>riTUt6-qjq8-0Qp`_qHm=FZlP;JpWcx|I5Lm4kqbx6L3os z(L$l2YUCO(V%IXE-^Dt62FegtPJ3MDEOz)FH611Y9tVW_jVB) zWX03QV9Y*%R#Fl;pN=mrn)Jf7^girUSthk*KuiW$M*3D!j`D)C3ocf*ilC5@KdVmk zO8WKSo`?Htn8ci2^?D=ajo{Lf9&iry9;De1slFJY4o8XVRAsCIWBukEnuN+b{0ycO zFT*Oa31Yssi+aXt&6{lQ<+;4oA;cvA2%200;c8N|r~yCgAJ-gTuFw=AeTEL7PjDZ? zcJl-Wbhb$B>&iTf&V&aqwylD?u0g+`E_BBNyw`C`bJlyFEZ^AwhS)mhMpYzrkCn81MM*TY=&hpy=F9{?t(MB<|e8wYq6yA(;JkmrSaaU^E zjNSH<*n;`I&Wevc&HDaE@oCa2KTSIDY0@dPP;Mi*O!1rn%0WZq^suIm45+m&X33d literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/db/models/sql/conversion.py b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/conversion.py new file mode 100644 index 000000000..be712319f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/db/models/sql/conversion.py @@ -0,0 +1,73 @@ +""" +This module holds simple classes to convert geospatial values from the +database. +""" +from decimal import Decimal + +from django.contrib.gis.measure import Area, Distance +from django.db import models + + +class AreaField(models.FloatField): + "Wrapper for Area values." + + def __init__(self, geo_field): + super().__init__() + self.geo_field = geo_field + + def get_prep_value(self, value): + if not isinstance(value, Area): + raise ValueError("AreaField only accepts Area measurement objects.") + return value + + def get_db_prep_value(self, value, connection, prepared=False): + if value is None: + return + area_att = connection.ops.get_area_att_for_field(self.geo_field) + return getattr(value, area_att) if area_att else value + + def from_db_value(self, value, expression, connection): + if value is None: + return + # If the database returns a Decimal, convert it to a float as expected + # by the Python geometric objects. + if isinstance(value, Decimal): + value = float(value) + # If the units are known, convert value into area measure. + area_att = connection.ops.get_area_att_for_field(self.geo_field) + return Area(**{area_att: value}) if area_att else value + + def get_internal_type(self): + return "AreaField" + + +class DistanceField(models.FloatField): + "Wrapper for Distance values." + + def __init__(self, geo_field): + super().__init__() + self.geo_field = geo_field + + def get_prep_value(self, value): + if isinstance(value, Distance): + return value + return super().get_prep_value(value) + + def get_db_prep_value(self, value, connection, prepared=False): + if not isinstance(value, Distance): + return value + distance_att = connection.ops.get_distance_att_for_field(self.geo_field) + if not distance_att: + raise ValueError( + "Distance measure is supplied, but units are unknown for result." + ) + return getattr(value, distance_att) + + def from_db_value(self, value, expression, connection): + if value is None: + return + distance_att = connection.ops.get_distance_att_for_field(self.geo_field) + return Distance(**{distance_att: value}) if distance_att else value + + def get_internal_type(self): + return "DistanceField" diff --git a/venv/Lib/site-packages/django/contrib/gis/feeds.py b/venv/Lib/site-packages/django/contrib/gis/feeds.py new file mode 100644 index 000000000..ebd451188 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/feeds.py @@ -0,0 +1,151 @@ +from django.contrib.syndication.views import Feed as BaseFeed +from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed + + +class GeoFeedMixin: + """ + This mixin provides the necessary routines for SyndicationFeed subclasses + to produce simple GeoRSS or W3C Geo elements. + """ + + def georss_coords(self, coords): + """ + In GeoRSS coordinate pairs are ordered by lat/lon and separated by + a single white space. Given a tuple of coordinates, return a string + GeoRSS representation. + """ + return " ".join("%f %f" % (coord[1], coord[0]) for coord in coords) + + def add_georss_point(self, handler, coords, w3c_geo=False): + """ + Adds a GeoRSS point with the given coords using the given handler. + Handles the differences between simple GeoRSS and the more popular + W3C Geo specification. + """ + if w3c_geo: + lon, lat = coords[:2] + handler.addQuickElement("geo:lat", "%f" % lat) + handler.addQuickElement("geo:lon", "%f" % lon) + else: + handler.addQuickElement("georss:point", self.georss_coords((coords,))) + + def add_georss_element(self, handler, item, w3c_geo=False): + """Add a GeoRSS XML element using the given item and handler.""" + # Getting the Geometry object. + geom = item.get("geometry") + if geom is not None: + if isinstance(geom, (list, tuple)): + # Special case if a tuple/list was passed in. The tuple may be + # a point or a box + box_coords = None + if isinstance(geom[0], (list, tuple)): + # Box: ( (X0, Y0), (X1, Y1) ) + if len(geom) == 2: + box_coords = geom + else: + raise ValueError("Only should be two sets of coordinates.") + else: + if len(geom) == 2: + # Point: (X, Y) + self.add_georss_point(handler, geom, w3c_geo=w3c_geo) + elif len(geom) == 4: + # Box: (X0, Y0, X1, Y1) + box_coords = (geom[:2], geom[2:]) + else: + raise ValueError("Only should be 2 or 4 numeric elements.") + # If a GeoRSS box was given via tuple. + if box_coords is not None: + if w3c_geo: + raise ValueError( + "Cannot use simple GeoRSS box in W3C Geo feeds." + ) + handler.addQuickElement( + "georss:box", self.georss_coords(box_coords) + ) + else: + # Getting the lowercase geometry type. + gtype = str(geom.geom_type).lower() + if gtype == "point": + self.add_georss_point(handler, geom.coords, w3c_geo=w3c_geo) + else: + if w3c_geo: + raise ValueError("W3C Geo only supports Point geometries.") + # For formatting consistent w/the GeoRSS simple standard: + # http://georss.org/1.0#simple + if gtype in ("linestring", "linearring"): + handler.addQuickElement( + "georss:line", self.georss_coords(geom.coords) + ) + elif gtype in ("polygon",): + # Only support the exterior ring. + handler.addQuickElement( + "georss:polygon", self.georss_coords(geom[0].coords) + ) + else: + raise ValueError( + 'Geometry type "%s" not supported.' % geom.geom_type + ) + + +# ### SyndicationFeed subclasses ### +class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin): + def rss_attributes(self): + attrs = super().rss_attributes() + attrs["xmlns:georss"] = "http://www.georss.org/georss" + return attrs + + def add_item_elements(self, handler, item): + super().add_item_elements(handler, item) + self.add_georss_element(handler, item) + + def add_root_elements(self, handler): + super().add_root_elements(handler) + self.add_georss_element(handler, self.feed) + + +class GeoAtom1Feed(Atom1Feed, GeoFeedMixin): + def root_attributes(self): + attrs = super().root_attributes() + attrs["xmlns:georss"] = "http://www.georss.org/georss" + return attrs + + def add_item_elements(self, handler, item): + super().add_item_elements(handler, item) + self.add_georss_element(handler, item) + + def add_root_elements(self, handler): + super().add_root_elements(handler) + self.add_georss_element(handler, self.feed) + + +class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin): + def rss_attributes(self): + attrs = super().rss_attributes() + attrs["xmlns:geo"] = "http://www.w3.org/2003/01/geo/wgs84_pos#" + return attrs + + def add_item_elements(self, handler, item): + super().add_item_elements(handler, item) + self.add_georss_element(handler, item, w3c_geo=True) + + def add_root_elements(self, handler): + super().add_root_elements(handler) + self.add_georss_element(handler, self.feed, w3c_geo=True) + + +# ### Feed subclass ### +class Feed(BaseFeed): + """ + This is a subclass of the `Feed` from `django.contrib.syndication`. + This allows users to define a `geometry(obj)` and/or `item_geometry(item)` + methods on their own subclasses so that geo-referenced information may + placed in the feed. + """ + + feed_type = GeoRSSFeed + + def feed_extra_kwargs(self, obj): + return {"geometry": self._get_dynamic_attr("geometry", obj)} + + def item_extra_kwargs(self, item): + return {"geometry": self._get_dynamic_attr("item_geometry", item)} diff --git a/venv/Lib/site-packages/django/contrib/gis/forms/__init__.py b/venv/Lib/site-packages/django/contrib/gis/forms/__init__.py new file mode 100644 index 000000000..c07720b2d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/forms/__init__.py @@ -0,0 +1,13 @@ +from django.forms import * # NOQA + +from .fields import ( # NOQA + GeometryCollectionField, + GeometryField, + LineStringField, + MultiLineStringField, + MultiPointField, + MultiPolygonField, + PointField, + PolygonField, +) +from .widgets import BaseGeometryWidget, OpenLayersWidget, OSMWidget # NOQA diff --git a/venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..789ae3dec3c7a9bff7e57018688f7c5b7f053b8b GIT binary patch literal 562 zcmZ9K%}N6?5XZCIcDrqNt%{(J;0oHih=`T8hpNRYLI{>^H(gTmQIf3ENAi^xJbCKP zvnP{oi^V{G%=~AVnG6wOSO?~OzkH4_9RR+pvwd9ST$!tS1_?+U3LZh?CMD`H7rLwj zORNmbtO6^{gC48GD)XVwYOv5^v<0PjqKV)gf@zY6n?T_<`-J16mV~E;aB!PZP5!IRl{yfF>mqG$Ezm`}sa)R* z2LtgJiAwqYb*%8F^D{|Otn=ObIp+O%fu&k2wfo_1VctbMFi2)GPsQ0(NTzacYR6Zy zY~Cj;7M?}b!nded*zL=P0j$2Sx+ob~DYV!z_yBU(+7>^geU6@#>5m>VrDAj=CKrmyJ<}NTp8)Qq0T>(HrJ(s87a75sgph@#Hm5u|ma|t%=}fjpJ5IRBJVIYcwL9 b=+WqGzR3LxCX$R|`zwI5qx<04J*xi#V$h|2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/fields.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/forms/__pycache__/fields.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16487326213c89ca47697a94e19663c6df5db513 GIT binary patch literal 4126 zcma)9&2Jn@74Pcq>G^Q`GmgE{hNUIg)sDzc03leS5Ry1v$HW;&v3Ij+S+v?+<#A7X zx@W6l{*!;qWDr&?bO@}@D?vec4yL^WZH_xE4=y(jaLP0PaPQUG``gM1inm& zX~;8>Z9WNkQpvNBr}#AFX(i7=p5e2QXO(;o@*F=0`J9sHA4;4BF@E|Z zKMJ`|gO{aDBtF?Kk!9j>=0*OX|AG|;X4bnRUi14xrVm1n5dm2~`IJUN+6E&umvPP2 zIdctRx+Si=mMC-MfPtEdmK3!P7%x9F-3t5(k3Q3%Xgf@KvgTF`54tt=jl5TJCkn5* z_7lz2+)4Og4qF`U=Yvp0eDLR*gJ*L$Odb4XyTaM_(=c$zMa~WlA=dGoqiGGtxe@mr z+H=p3oG|Y8GR*Tc%vZYnfcz=Av)y-2`j7OV?90d|nSsWeeTR!3zZYefln&Jw#zEBM zB6S|z*}UZ3UjBIb!JV6zAl-D{4Pz{6ySK9=Wc`xk$DG#pqmA`uL(R`CuzYuU^ZvuZ zo6W>&jkfIU`B6_eU775KT=2$VaW%%LkiRmbFEM9CZXS8qAV&gs5mCpYS5UXkLHUI>-B9Tv;-NJ~C@Qu1gW z`SjSHr&iMhcFk0VJg?FeH7Fo3(xanMY*U*+OWy|>vZ3Z_L!E0qCTl|-63g@ht!;2U z)P}}y*sl=zL#>T*ZL?kC>?-mA5M(svEapGg>Xw`Vqoll)_PRpm70(OfF!Q|J+E>8O zOMaHg6uUE15$&9qVLjUSWh;Ho@~YFvxQ2XgT8ok4~8!_ts_%6`foXt85znbm)rY4mb@d#J?=``WXMn`2>Ph$PfWF z5ONYe!Qq-g!bN@BwMD0!^*uE|&1+#A#%boqfsm96^YX5r5>n)ONb({Pg9u?ZuYE*e zt1@n0-30y>D=q4qQuy~e0!YEJD}cF`j^FiEI85Du(r~+%6?5vkT%=hgwGIWhg1kvz zt6Ac8``K<1zYQ_H3R2TeR?}^!vl(UsA^J<*uz?ZcD!R^U%z9~+bo7~~{ka9%WcnAT zu77SCgT>Q08f!lVB-&;LjegT-AenZc9pd-^5gqYK$7>IDKnhYDHQ~_wl;YBOWXP}6 zFV~67O5m+i0MOcHxrVQ0Ucv~)K|`7NL3OAf5*W*$BFX^_=m#*W{W}FPM%paE$tvIk zKwwP0Jovpzu&5ahPKAo005FjKsdN;@K>5}Q{MgwR4&rZ5NGb=f1I<_$WpF97o{XI^ zYdH7)FcrYq$iz{-b;2TnjxEGV1|wrF1*WnPi{g%ta&ug@#$%e2a-f_d@)eL5FY(A} zaP^uzho8I@M8c1ABLy5O)#asL7s*ZGO@0j@6v%*3hNFjg0+3R@ z4Q5~uwL=`20uXUW*`|ggX8ncYh#w-~Y-kkcvOd(Q9U|wn4FUvyO+ZiQ##7x!(gz%n zjX?DS_Q(JX%)$FhNvG>eL6x&5{q8RA48^ga$N?3;vma)=I859tP!W(6itff{>*?Qq zcleJ#{PtR%xrn$(z>R@GHF*bXFP!`h;;6VFZG3`TM(T;jevswnc9KLRN9W~{-rOW} zug3BO5{eh>q6P>~PDv@*>qZR@wvp%IcGG4v=8Q48aN5Bq=GCXDpv8ViprF+}uaodz zM7-^Jw5(B2+4Fc3pn6ql*(!l4*f7ss7~N`$Dt(-#Xfefp2@CQvNIp3#gMo;mQ7J4o zrC_8GL!_(nZSz4EW@G=(fiW+_k68Vw%?lhs-$rN+Np=G1lQ3%Bj=vHc5(`C zBOhn1r6h`w)Dd{(`sY?m(6Ri@?>n2q%&>W_mZgJI>Ji%-ul|Z6#(SR&+3QJ`pdBmlFqa- zJ36ZqhV0R4on`Gh^#6KnjihFMF}I2vqNJOgyI2T~(RHzb>tdtD{Yc$HUf(N{R3(0O zfkC9J`z91f(GW-fQl=`Oxo?a*ds!Hz4OKTH^?!$ z!m}i(NkW07W0B-Hd7X%gv}2-fGnK1FzPd(1pI!v9HKaVGKfL;!G1Ec%8@==9e*p6F B?@fowbb&F znW1G7tDt}kC&0CS(c05P(c9dzm zp4-lPSv_~6Ts!aOHJ^zJ?V?vC1~-N!=8lLrvuv;|%e^#Mj^__duMG1%E5N+K%P^mX zd6AW1UgEPbpJQarsLs3sxs25+NnFX53Oh{+ywzku1ovD^c00b{P5z=vlj8E7M{9Rp zGxqjKmnBh@IJd;t+Vy0&^%X66RWtii+FtRM;<=Cv&mw5S9Pp^>b=M}#;wg{VH z<(IBk`r5DzZw54-OXfZgB%cVJ3Oi`zDsZiD^U5Y{RvJ+tWo4@?Dk5xbSDIt(D!W=W zS<|N<^A6*p5>(njuhN%bvx&jm|8ytDrJ*{gq*4I}&`1@c#7 z7gqg?7M*xdlUh3M4dQ!-uH3ZTu;>PZf!cm>$sBXu{6Pl0`Xuwb$c`3$prBge=J-2l}Y(B!}!a51ZR6$+J-QqF~P#!EV(|>_90Y zlMFZ%xy0%BSfKc!nOKrXTVfW3OUxawj!`kNbfLm}1TA4Ips8*1Y@?>ygF2{$)nsQ6+pXzT<{E;rIxsgGl&4zW@PXS8K~ z;(*>>;`)Br36<|(K`Rx2IK(A$#3E&4y%}6S?d96!i4(>~!-EsFvA-(;1I7e{w$Ox- z8i#aMd~`<$i06jjkdF|mlh~|miEg{1wW)k~Reo6c=~Y>+I>Ldk3mZt1`vO(f zk0;r6h@zBrqHeRvMPhS&an;mz5%1y?CM>;enmprEoqqy{B$}F%9GNETo? zg{*OQOz~h)gtg4R9os_}*D#A>d!IfvI`4wvv#s3TeK0yy*vcn>rDKYwvF(R#*{Y-2P%OJ}vuEvC!F&WM=i`gT(069K9hcd=c z-*%|jVVMr_YQA+|EetP=4CembiOt^g(D;Uo;2cP3K}E~14sL3fRCK+?L^0DqoYug!oD3NoS|i-R(f-n$&kEu{uGUCr-P|`VseXQ>QZh zo+P)nzO;V-mjC4OidS4&T3vp!w0y_^{Qm9x)r*NO`#lJmJd_h3lbgR#NiKxaDOJ#E z@Whl#h^rtDlot?K6p=N%P2pvyx(W2SS6sfmv@&f%;(b^XAK*s*(eh)I76Vn6CsD<{ zb9!&HA4bd{*EGSQ&^5St5BD)u#m|snV0p7BVFV4U5B1333|Uxp(*W0R!zfQ{UuLX^ z_ysQg7zvv5kR(~(*KNf2j|zlXggqScHjpwYnK@$7IZBB`3Q)bEauEsxY56~p6L02R zoWY!yV7~;ML#)?MhW?xWV7;+QXXeZ?^B$7bY8h)Kdd>HfobRWe1HRzL z)@^{aD8IJ6z!Vh#XAA-T3QP;$>ve^a{xy~q6>o$66xVMS@8BtINpzpqGbxTO(BM%t zu>v*;@i7uCm?8@Voh&Z_aShPaPW1&!Es~>d#x>_N`dkB!oVYL$@RB!xybTus=9tU^ zm}4DK01h^DUK*aGAwh<@00}Z061bQ^N%>KacUFQu=v!kza1MJ;7gnJc!fI_>wWDwr zY;j5ojGWI<3RLJw3PwW&E+zmMOj3KW@b))q4>=2i#0;XSN(Y~8E7g-X>h%Wev}COj zb^B~93Iqql)UF4u;6*(OH$kT8TK(hN_1dq1t2Lw?%%G&e;0`XpyRQE~?`p}xd3;q% z)*r1r40@>{YAp#6LVNIHiyeY7+ANzog7mP5D>pucAxOB>-(`t0$Ll`KNA%6~&Nv|09 zg9Sy0P>DxGEI?hh7=ezUxtRKPOu>Bs0rd zfuWI-&NNb@ZeiXOxN|D1C#_cg5_XTG`V1(Zo#s^5b9GK-!C<*0`)KXqIGL_#yu8$@ z94T2xc1;P+6~x*iqHZ>Z*C|>aTsWD5i(T2)S@;S;$*VdNtW;+sXY{s2Tcn;IL7Yv| zGvMYidNwtB&H&)M0)96EA)G?bCLm(I74#!$2k^6VGznBvnCuL?-8LkN4h>xh=itj} z^TEC&=8v1d(rgl%< fn`!_19abK>0K_#4v;gh545I)or)-w*&0qd6UT@E} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/forms/fields.py b/venv/Lib/site-packages/django/contrib/gis/forms/fields.py new file mode 100644 index 000000000..1fd31530c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/forms/fields.py @@ -0,0 +1,144 @@ +from django import forms +from django.contrib.gis.gdal import GDALException +from django.contrib.gis.geos import GEOSException, GEOSGeometry +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from .widgets import OpenLayersWidget + + +class GeometryField(forms.Field): + """ + This is the basic form field for a Geometry. Any textual input that is + accepted by GEOSGeometry is accepted by this form. By default, + this includes WKT, HEXEWKB, WKB (in a buffer), and GeoJSON. + """ + + widget = OpenLayersWidget + geom_type = "GEOMETRY" + + default_error_messages = { + "required": _("No geometry value provided."), + "invalid_geom": _("Invalid geometry value."), + "invalid_geom_type": _("Invalid geometry type."), + "transform_error": _( + "An error occurred when transforming the geometry " + "to the SRID of the geometry form field." + ), + } + + def __init__(self, *, srid=None, geom_type=None, **kwargs): + self.srid = srid + if geom_type is not None: + self.geom_type = geom_type + super().__init__(**kwargs) + self.widget.attrs["geom_type"] = self.geom_type + + def to_python(self, value): + """Transform the value to a Geometry object.""" + if value in self.empty_values: + return None + + if not isinstance(value, GEOSGeometry): + if hasattr(self.widget, "deserialize"): + try: + value = self.widget.deserialize(value) + except GDALException: + value = None + else: + try: + value = GEOSGeometry(value) + except (GEOSException, ValueError, TypeError): + value = None + if value is None: + raise ValidationError( + self.error_messages["invalid_geom"], code="invalid_geom" + ) + + # Try to set the srid + if not value.srid: + try: + value.srid = self.widget.map_srid + except AttributeError: + if self.srid: + value.srid = self.srid + return value + + def clean(self, value): + """ + Validate that the input value can be converted to a Geometry object + and return it. Raise a ValidationError if the value cannot be + instantiated as a Geometry. + """ + geom = super().clean(value) + if geom is None: + return geom + + # Ensuring that the geometry is of the correct type (indicated + # using the OGC string label). + if ( + str(geom.geom_type).upper() != self.geom_type + and self.geom_type != "GEOMETRY" + ): + raise ValidationError( + self.error_messages["invalid_geom_type"], code="invalid_geom_type" + ) + + # Transforming the geometry if the SRID was set. + if self.srid and self.srid != -1 and self.srid != geom.srid: + try: + geom.transform(self.srid) + except GEOSException: + raise ValidationError( + self.error_messages["transform_error"], code="transform_error" + ) + + return geom + + def has_changed(self, initial, data): + """Compare geographic value of data with its initial value.""" + + try: + data = self.to_python(data) + initial = self.to_python(initial) + except ValidationError: + return True + + # Only do a geographic comparison if both values are available + if initial and data: + data.transform(initial.srid) + # If the initial value was not added by the browser, the geometry + # provided may be slightly different, the first time it is saved. + # The comparison is done with a very low tolerance. + return not initial.equals_exact(data, tolerance=0.000001) + else: + # Check for change of state of existence + return bool(initial) != bool(data) + + +class GeometryCollectionField(GeometryField): + geom_type = "GEOMETRYCOLLECTION" + + +class PointField(GeometryField): + geom_type = "POINT" + + +class MultiPointField(GeometryField): + geom_type = "MULTIPOINT" + + +class LineStringField(GeometryField): + geom_type = "LINESTRING" + + +class MultiLineStringField(GeometryField): + geom_type = "MULTILINESTRING" + + +class PolygonField(GeometryField): + geom_type = "POLYGON" + + +class MultiPolygonField(GeometryField): + geom_type = "MULTIPOLYGON" diff --git a/venv/Lib/site-packages/django/contrib/gis/forms/widgets.py b/venv/Lib/site-packages/django/contrib/gis/forms/widgets.py new file mode 100644 index 000000000..0f53ee2e9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/forms/widgets.py @@ -0,0 +1,127 @@ +import logging + +from django.conf import settings +from django.contrib.gis import gdal +from django.contrib.gis.geometry import json_regex +from django.contrib.gis.geos import GEOSException, GEOSGeometry +from django.forms.widgets import Widget +from django.utils import translation + +logger = logging.getLogger("django.contrib.gis") + + +class BaseGeometryWidget(Widget): + """ + The base class for rich geometry widgets. + Render a map using the WKT of the geometry. + """ + + geom_type = "GEOMETRY" + map_srid = 4326 + map_width = 600 + map_height = 400 + display_raw = False + + supports_3d = False + template_name = "" # set on subclasses + + def __init__(self, attrs=None): + self.attrs = {} + for key in ("geom_type", "map_srid", "map_width", "map_height", "display_raw"): + self.attrs[key] = getattr(self, key) + if attrs: + self.attrs.update(attrs) + + def serialize(self, value): + return value.wkt if value else "" + + def deserialize(self, value): + try: + return GEOSGeometry(value) + except (GEOSException, ValueError, TypeError) as err: + logger.error("Error creating geometry from value '%s' (%s)", value, err) + return None + + def get_context(self, name, value, attrs): + context = super().get_context(name, value, attrs) + # If a string reaches here (via a validation error on another + # field) then just reconstruct the Geometry. + if value and isinstance(value, str): + value = self.deserialize(value) + + if value: + # Check that srid of value and map match + if value.srid and value.srid != self.map_srid: + try: + ogr = value.ogr + ogr.transform(self.map_srid) + value = ogr + except gdal.GDALException as err: + logger.error( + "Error transforming geometry from srid '%s' to srid '%s' (%s)", + value.srid, + self.map_srid, + err, + ) + + geom_type = gdal.OGRGeomType(self.attrs["geom_type"]).name + context.update( + self.build_attrs( + self.attrs, + { + "name": name, + "module": "geodjango_%s" % name.replace("-", "_"), # JS-safe + "serialized": self.serialize(value), + "geom_type": "Geometry" if geom_type == "Unknown" else geom_type, + "STATIC_URL": settings.STATIC_URL, + "LANGUAGE_BIDI": translation.get_language_bidi(), + **(attrs or {}), + }, + ) + ) + return context + + +class OpenLayersWidget(BaseGeometryWidget): + template_name = "gis/openlayers.html" + map_srid = 3857 + + class Media: + css = { + "all": ( + "https://cdnjs.cloudflare.com/ajax/libs/ol3/4.6.5/ol.css", + "gis/css/ol3.css", + ) + } + js = ( + "https://cdnjs.cloudflare.com/ajax/libs/ol3/4.6.5/ol.js", + "gis/js/OLMapWidget.js", + ) + + def serialize(self, value): + return value.json if value else "" + + def deserialize(self, value): + geom = super().deserialize(value) + # GeoJSON assumes WGS84 (4326). Use the map's SRID instead. + if geom and json_regex.match(value) and self.map_srid != 4326: + geom.srid = self.map_srid + return geom + + +class OSMWidget(OpenLayersWidget): + """ + An OpenLayers/OpenStreetMap-based widget. + """ + + template_name = "gis/openlayers-osm.html" + default_lon = 5 + default_lat = 47 + default_zoom = 12 + + def __init__(self, attrs=None): + super().__init__() + for key in ("default_lon", "default_lat", "default_zoom"): + self.attrs[key] = getattr(self, key) + if attrs: + self.attrs.update(attrs) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/LICENSE b/venv/Lib/site-packages/django/contrib/gis/gdal/LICENSE new file mode 100644 index 000000000..30d410ecf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2007-2009, Justin Bronn +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of OGRGeometry nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__init__.py b/venv/Lib/site-packages/django/contrib/gis/gdal/__init__.py new file mode 100644 index 000000000..9ed6e3115 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/__init__.py @@ -0,0 +1,58 @@ +""" + This module houses ctypes interfaces for GDAL objects. The following GDAL + objects are supported: + + CoordTransform: Used for coordinate transformations from one spatial + reference system to another. + + Driver: Wraps an OGR data source driver. + + DataSource: Wrapper for the OGR data source object, supports + OGR-supported data sources. + + Envelope: A ctypes structure for bounding boxes (GDAL library + not required). + + OGRGeometry: Object for accessing OGR Geometry functionality. + + OGRGeomType: A class for representing the different OGR Geometry + types (GDAL library not required). + + SpatialReference: Represents OSR Spatial Reference objects. + + The GDAL library will be imported from the system path using the default + library name for the current OS. The default library path may be overridden + by setting `GDAL_LIBRARY_PATH` in your settings with the path to the GDAL C + library on your system. +""" +from django.contrib.gis.gdal.datasource import DataSource +from django.contrib.gis.gdal.driver import Driver +from django.contrib.gis.gdal.envelope import Envelope +from django.contrib.gis.gdal.error import GDALException, SRSException, check_err +from django.contrib.gis.gdal.geometries import OGRGeometry +from django.contrib.gis.gdal.geomtype import OGRGeomType +from django.contrib.gis.gdal.libgdal import ( + GDAL_VERSION, + gdal_full_version, + gdal_version, +) +from django.contrib.gis.gdal.raster.source import GDALRaster +from django.contrib.gis.gdal.srs import AxisOrder, CoordTransform, SpatialReference + +__all__ = ( + "AxisOrder", + "Driver", + "DataSource", + "CoordTransform", + "Envelope", + "GDALException", + "GDALRaster", + "GDAL_VERSION", + "OGRGeometry", + "OGRGeomType", + "SpatialReference", + "SRSException", + "check_err", + "gdal_version", + "gdal_full_version", +) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6e8adc2db1b1d25aa1062f71d0b058f661444bd GIT binary patch literal 1960 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 AO8@`> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/driver.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/driver.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4201bb99e85d40c015918d75a1ba6c586287153 GIT binary patch literal 2636 zcmZ`*-EJF26yBNr@p}D}G|)e2(Sks#5w*o_RH3FxYJ#e^B(0DJ!?NBPI~&%!+nI47 zmLnn3$KWEl>?`mLJi$s_am5`H;)a`YX4Z~P)2=l$XLjbyneUwMoORY{cm_OwefxX= zYQr%8P?P1yg2`QI;ydW5K~Z9i5J5=EIKd;6m|8XyYh)8!%U0ryD#X>Y4RV!uT6U7! zs7~sm25BIpYtRaHpBvO==7~v~w7O@syg$K;(L#kA1&3KogIvkot&IowLcu_8D0%zG zh~+ZQQh0%>fZpMukc_u*Q5$4DVnP2%GEr2^iI6-}=Po}A^<8M92OTpAq6Wbf5tCy5 zGpR`}_}TDteyI|xye+Y5m3q$&;;;&>(fV`a1Q8eH25oA&$~?M4SG8QDmjKgR;cW5v zknzc{o)6DgJk0&jS3o+Cy1V{XC_{fQ8^g8za${TXyPt7?lyT!i88x4Yx-?T0xV#0ewzlb!DNF0s2$;=zDeUp(IKw!lkF@R*olKQC;d_7=8`hXCEv zLnnz-Ml7jROz4Sqkh38%5AtDzArAA$2El>02~GS4oiwIMq7%$JQ{xn$83^X5=9w`y z4y;3iUsGfG=DKl=Q#?h-SlZGV;4R~um19#@rsk=uwx$-pjf@mMdoTT1 zpYFlwJM+`eb!*2aXx65nrFFVm=T5q+bt<6qCD^i3SJo+#jVYXc1t{?|npz@+cW{&W zd};(uY62mw$rJ52>CgvK#HnQ9QyBBH zEV-hNnslC~oJH9%h0|!c>dT{?`9Pn=(Iv&!{g1@t)6Hz0P(RHi>^{H8f|%!*(3X_S z!`4dS#Uf6H4AY1eCfusH#8NTlEZ}Syt1M)+u#@Zu#tSC^XrU!Zai{9>7h_JUc%NWt?#`5!Vzjr_8Lf(GNvjfPH-XTj5dk^A%PsEbl z&co>YaL7cD9)#&I>qJ=!QRsI7r_QfVX{((d6>b2RiDeLc2v)^9be`qnrnQPJTsPN{ z1wZ@}|Kwp8)seR}cM!%fe`(nmIWT(WWTgyJdwynw;Jo>xWYu(Xs4M~U8$c`cu!ZBH-&-#y*JiLU5ch%uOi8;WoU&GqpDp0HTT1Mc`Z_P zMefJKFU>8Xu(+#ktU^PsEX8l>Bz{@#cvp4*N2fX5SMT44Zc>{;QidP4>MGHc7zBkE z1fz_O6D8M!;Mq7#W-CB-_%a3oS5f2dsO|=IMJ-A~Ax2E@XH=7e`|7ou^DJjv9%<7{ z*U=YK$-}GADG~{l2(AIS+`wq|!{zAw<2Kz}*z^#tL35f&YpIgyM5=s=vhv+1i%EM{ zOxjRP+WKSNhrc*n5sut^(-y{g#&ty`AG~P~fRR~gPkl#AKB+oUhU4-~Z!F_Pv{@Qu n6uv9E_Lf0YP+#YR!o5?v`!iL2gvzbDQO9*isXAIkZ=3%CX*#EX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/envelope.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/envelope.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7cf5d37d8efdfad1f2810449a0fc3b5542df4d90 GIT binary patch literal 5859 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 GS^otwSaFvC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/error.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/error.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac774a2ac2b2e9b014ef98fba10d0af0f156810b GIT binary patch literal 1555 zcmZ`(-EJF26yCo$o3)*|0n(&U7*zscL~X%kg-|T#2TQ@OoJL41i`9B(Y;UvPS!QMv zY&kcy55NQT1$x5+t;7{qzC%Jnh%3$+x2bc%So7(eGqdN+cYe&PRnLI+=a0V+zbF~T zAE>OaGAM_zY!_Y~KRirVi+i)@^3djgbXd(zvP7)wre61GH&b z%axHutFK(&f&1IqvZJx4@t($AjqhoEU*iWF_cY!I5Bsk?e}f+QCHgV_kbd;i^f&3l zbEE#r{8x`Wo5Ye#In5JBCOnr+5;bAu^r&@4J|pM-b8`H1#4;80lY)J05g0Oa%@o(UT+mueB|xxy07iR4T3bBvLGnDAXt$Cxe^3Fhl7(?NcH%s;7ELM#nP+6Sv(xb zSh2@h7+r>ACI|F+n2vcf;;9nxusM!pb4zzI*#ha?yqzT15e4Xl-8Waz$9m^YMhxP=$^8?wV!Frd-S#^9L8H%(ILO z1qB&14rLHCqGlOu%=gyMc*aDCEzp=(+gyk|Q*Yc>uzaI1PI3Vs)z&|P*Ei-no%AY9 zVoD~^GYM*i_%G) zuujkSdKpVkAU0g^I!VIDVbT&~zXDXx-}3TzS`sRZkAHKu+T}k8C}1m!n3R4M8=#Xa zs20!yr@G0zd6LvUf#WT(^@L9FHcC4PHH3Qzy8uhf{1WT1gl(KeNbl`JZpgF^TOI-| zOyMXaHI;c|EevH{TB3q2y)YKml_4H1zdf?>o|tqB<-hXI8Mj?zMfDK#*%?V*zE*gPnZBxmI~m9d+mX7wKinui-8> zt)A5<N^Z%#^ZTc?eMeuN{_Rw^?f(Fqvx}Di literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/feature.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/feature.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d148ba9bbb0c36fb7edf3f3ca4dce5cbb28a0d5 GIT binary patch literal 4762 zcmZ`-%X8bt8OH)3NKw>VR^s>8t?RJ0X!mhwGp;A89jTsioz_(^7^Mh=UDA+2fY}9| zh{IeW&$O2u`XAW6`PlwBnCYpf-a3<8I-T_QEeMLVB+Tsc1NQYje&1u6EiE-IJpcLA zKM(%CVp;#9m)Xa~%LizBfKFI~C03vLj1g@ocHi+GLpzDvulY4YyNTDY`}KaqZtwHN=5Q>`{D8oLia zeEjQBOVCS1fAmEp2YH;O_)y!4Wg^;kvH0=s(_NYMWv-5889m%3OeUv#b_I&SuH@bUqg{u?@J`Ak^8Etu~}_ps)B!WPa;%dZPp)bQI7o~Yw@ zp%le$il$h^`=V@#mRNde9W#Fk^s-nn^fKsGv1aHM(CcEu(5s*~#RWsJf!-4D7g%s@oisUD(jvB zHqg0lgL$mUMynHhb*d>5DZF|}9%{w_k3r-xLC%hCwK%q3*<<#aeQBp#0>*GL@i|jl zW9!g)ZmG+u&8*ZJ)3}$r0&}+j)vs7y8(U-h*cdGAFw2_SY**&M6AVV4Hvt6)yy%-A z$SCf{5;jYP{NgtM{8=15yrntZF;06t2@hn_;rvMk z(;5iBeeQHGAe~@9<2XJM*d&1Uhce*X+kB{Lz2u+vWd12fjCht2hdP&`0Q9H3C`6A~ zz9=V~<@`O_>2=6yCakun>#{BnCrT*&CX%IZ5HJ-qW{rONh_t}7Va_pI0RR#jktq+O zNNPwJIaQsk-OxTWXvfdRe)~;g;@KBl`Io0GpyEwAdzVh+{I^2 zSoiGF$_Zm;>=aWD<{74FGoT%8p|P&LMeNz5>wARJ5?pE6mt++KnTZdME>BM2JC7dn zn}m@v@Z7tp?;~|M-B=V&6C46suP))7x0MXeaYPXO9Ak#_)j7`1*qry0bTu@?`6h_m z${D;C9y(@+?rZy)8Rg!3m~r{pFa|IsK*5o}a)MA+>U*MBV5e5N2U(UBZWIn;e`zuh zU~QPF77p;;0KuNpz)erFURt!L>I-v00E#sUn zgTOS|PxZe!<=q5}z{HO8jX`mP(ww@9?u5ycz<4H;#HfB3-Jh*4BmKW@Txs27Fdr20BiM|h_T8txVCWD!%J#&hQf#xW$ zT>X1GhSEaQX?WhZCt;%;KBYQB+XGrdJ5}Cde8tJ#SEMvph{DLIJ>w}<#8w6W#7U4` zDmf~rSepWis{cUAZiy<2w?)HzqZrwYk}Q=-j&wsXQPD345hmXXjEd^APl#ROyX7vk zQL8$Y*3XGY{xKDA9WN)L9f7?Pt8<=MbbmQRwwfaCmR`SV1Qdq#AjfPxC7kDV`(r^fb0co6}4^p9yRH6v45NmaR) z%Cp-D1ZDMwuco*v3!N$<@6e>_R+Ebd=f6cAnTO9M534LbyD2Y&C+-Yy)uwv7(;!qx z+qhTgnNsaN2n2Lf4hVCqvkbqJQmUvK)D}(iQ-;?0uvs`*cu2}LfbdYQPm=>iPAPJl z>VISuS*EKTss0$z0qVpZ6NUN4Y%xBjDB;Y(-_(MYy3EaHQc98%I%WC!y+@N9(8oJ_ zGo##0FU!nYiJ}#QB2qeTAShW&C!v_8-XZNw%F3V82NPuGRbc8(jX`s1S+^Ukh1fD$ zs!(P2eA3>c8xHXo1Vu9l`k5FeM7M%~N|VV5>L-y!K``M=pvqC%QP3@GG+eCd!!XKG z@{&iXi_~4Fjm;1 D-ME%* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/field.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/field.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b7763bc675f2eb5dea7a0f6e6d25634241bc783 GIT binary patch literal 7753 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 Ip9^#U17@>=Y5)KL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geometries.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geometries.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3829e2058c54fb4815bcf2c517726ce61fffc2a GIT binary patch literal 24845 zcmbt+X^dC-C>*zxeOwca{^0|Hzx@-yYnY z$L0P~GLcY;QbHw_RZo_Z_)XQVMyixb@>#l`Ze&WCMz)k~jFd(ixl*n%S{iNSOL-~J z)W;g*rE$q;>l2O1(qv;pX@lI4)TbI7OB)-TN}J?9SKr*&QraT<(fSjOt)*>}&m+IR zv_tY^^_`7frCp8PrQLErUVpN&r?jW>ROzXPU9#obME&W;-qPM=;&MVwstq3`)COn# zeyX$&_fu*k?l(I7aK9h-o7869Z0hB+3`>kpl?zc(#LELXwJ8-{4 z?x%6TQ|-e2E@v9`3%K8{p2Yo=a{nyu_o%0E|CHPxQns^SJ?$J&d!2)7pHoo#ooCen z=a72FnN|m#XHdRnX=YnOYMC7CnjGISIlgCdeB0#MhRIFWHk1x4Yc5fkuKYwck;vQE zZ#wqdm#Y1eV=o1VAq zzHsEoqN>!3ExmZ8vRpgTTGWevqvh)Ia`C3usP8LZyn6Na$z#VNJr;`j7yymRsy*-6 zwWjM;nqIBqIm*6s(`nk;sVIWtw_0;tdqKAveA#}r;#KUq){3q=1j;Ec7VWv$ui6W> zy5kmRY>Y$NSghSfOK)GkXutcJ>-KcTc0G+Y0Ylz?_a-XKKo2gg)awWB3sfLNLYt_B>O0!aN*(*V`0wVIW>U1=(NZ_~N!9bR;r zj;`?WUIF^5ylcj@_s%wRGODsM{ERWl?4)Ks(2LvvS+9TemSgn3I~e zFJF3l&aSprnx3PVE824jv%9jq+|piNX3$+mr+`E|3yyZ0RmXN$UC(J?rU9F21rRq~ zOm{=zBRVeKtu&VF&I@_lK6mb%LA6?{G#6XNYO4vf%@-GIZjp0t*Bb1Ng9_+lCb+r2 zy6nu@a|VQK0R(=dcW!ydW^AO#?X&j5t8ZVKy*_>T`J?uUqlJSreDLPyFTXuIJ$=+Z zI%A(Q$*CFpsC}w%&~IWHvvM}*j1)Z0MhihHX4jiW9X^ou?Vtm{Mx(z0e;9;(`runD zb+2}{g=P+dj(W#2eem7Ob7xK-ECe00xnf1B7!(5^E(>TZ;=6CX^XBy{F#u@1cA9%*nxZmUU~1bq+Cew%%$k)+?TU$f?(t-LnF>eMnWjl}2#WY?YO> zfCVHoE`5b`G2K7(*$b~8KiwUAcReT7yPR<p0nt4WAb74 z7{1Dt6C>EGt@`R>t9dZegwN%|cTV)ZV-}jcbHzL8+SQ8d90m(^nlAX*?Vvj|F9Ppb z`^1dx=MF~uy!8G`?RKRueCAF|-*W9cN1CnX;Ruj+YktY8dL*>#dc~0>{}DBe*+Q~2 zGJm{MzUka8WILJpRWPkiu3E0%tmyJGbE>s6Uw1kq)$+>xs^{?0?N&{paMUpKa>YX{ zxy!F!c=HtuqhNJ%mzuYodTZI~i~)+^1_cwWbm?x@SteKRjL%)03-8bdYm=dIPH>y1 z%iH|KG=KW-%wP68@cqGYLLDdnV>GNr6qQz@1HAXyqw8I}DYQOc6 zs~u`5ez&MyYBzqLP*18o_}%JkQ%@;d-rcUAR(tVmhuWw1<9DaC&Dr7Xyl<6uq1FNQ zjMUnV{6RG>`6rPtsAna=2l+#4M)FS~e^?bIZzF$19hLmk$RAV3CBGN>6Y8Yo_aT2u zJtz77$e&hcB!56XuU-Ho&!`vGOZYtqh@No{0-|YkR-MC>f_hn<$M3T!DLBuf<=hSt{Kd0VNpGCi?)w}9*_&uZUsgn9(%f;{@7YAi-d-tVgwX*E4K)^V? z9I`lDB^3vMBgpW&h|AU3KzNC@q?f#J-Ak>d^b?--Ahni!m_#n^WgcXizn{E^t%a1| z^+rtjy|kC}bD6cYuB@e%wIiVqd!r_YcP!*mI}#7_4-+bV%hI#n*n@Fz!aTj7T$+5C zyqCqZ4Qp9%%G-$N8PwkN5Nqas@}ZSXG_Rp_bAOp){Vn%V?_ug*w)yf}M&DXXJa}R) z$+y{R^A!3)E6If4C-SDh=Cq7Aec#ge@y=F`5A~mvrxSSkQ+#7BsJ)TT*Ah$HQ1UZt zteNw+s}XMpTi*%@zM5Riy5GjL+*)|QmMHIBv-B^lS;+13cH{jgmnL^4aJNTgq5O}w z&t7SQu~+J~wi76qt9GktJ2glcE!r`3W?$AVQ~kly3Utfn@`_h{t&?_jO?A=~MWy_k zS7t9=xOVNz?Bz}hoNcy!@=6mTpr%Z95m=&$f}eJKgBA&fy;3FXeZfB9whI?4O)A?} zX!;DLm6t%#A^dFJFA~!ra`Yxy~rN zm%3=6EILWKTo?h)o%%v2FQtMCdABr<(U${Ulrj`8jZ#*mO{0@se3Z~f(Z&B+y7bO(+|;^2teSJejrdm&_)uPtu>HN0>{0l1-&k z+2p2Fdy6lb$$W}IXH_th@DJiL!Asc8eq^u+68Dm8Nj-|i1%}eJ6z)ANk)_mqJYT@B z_)&7UkQS`!op?n*g@hzM|H#sZ`GAup=rqYOmXDV~FCIwIbIRqf;E7A?3Bbi5)7E6N zy*&i|pq6XZTXozB@Wnz-??bBms!av9{3I|WTy%zH1Iy47Q7BFaKE z(GW%SU>1P{peW^~1w|R&KTOXh^a)fcWMyFbH1aa1-GS*dEVnwTYTeaEmd63t(|Gm` zTrR97iL|v9RM>tZg3n^O#AD<~QY5Po@*_RSEJ8K}AXx_2qam|+lpNUqLA?9ZxIX5< z^HzInf8Si{F&q(8qE|YfK?bChCMn%Z-^+Lj1#$wRSZffRaxtG;$WxqSkM&GM$6$&z{|w#{@)=KANh`TkSVVkM1gosuHz{0Zf|pIm zcmefLl!Ib|$w>)#nz+|nnVe~(r!;>f;@OTU67&LssUcr!*R1So}z?|n=%g-QZyA(NaX@v(`?NV(4@JDC=>h#ufN*>bt1%jKU(H<}Ety(vb^ zQaBVk{VLu7Os69-iB{r5T7{rt>weitB5u^hxMd40gmFAtU%y5$;#1lgDVOn9x%@Xm z5I4s`l+tx!JRX5j)fNJ)n|JfE;N`njhXLoV%$Li*JPbG~T^G2QBfz<<4UyVayW6*! ze$@0ZKpMLk)`TdZEXWN{xKA%mAyLuO0eLRQSPG%Evl zD=tMWG-v{3mMYAzz7^S+Siu9SV}R|8X3gMRQypxGQ?00&{v1nB0f9N;xPlnDvHh1pFMH^{$^$ z6w_qXYJNX}dps3qjA4zTkn7LlU99w@5kjrf)KY75TM#x7Fr#3>hk#BHPRZ-*dT?VYh@AFI|!vfK=i65PE=*052%ozyuB z!wG0r-4P3FAXP|!ofL7^Lxq#&Sp9#FdZGvAtXy(avIk4Cs_V|~k;v>~k2R0&C4`Gp zcVth3jbnU?hm$+W$>44S!+_6Y`0Sc}l2rOVz^y+=?8UUFZY%3Tdw3wU;uheZcnGW; z2&*i!^?)6V)cW@!wA-Ro7^%?*ZorK6HM~n9d7)mzW}OV^y~um-!CeQxflcRu4aR@7 z#T~lwAi<$kEPxqR*!!ThoyRPh!MOhkb%a-DQ*n%TtE>y+_8}k^_55QYkR{{(7uHco z`ujH(`uY!7=@j0A-si7NqjUjfdm}SUd#@lbCS{7)8qy}JpJ-w+F5$Cj;eOIEr+N7LFjfZE`JWt=ERWd6 zCTwF};9idaSAp?Ha96S4gh;9AYw&H(1iJ|F#QH8ZaZ|hqXPyY`J2lq{7rBTUwlp04 zG>iXt2>DcWsj#RIXv%3})7z2h5&*4?+%i4{yA~1tOk^;yfr#H=5HVym^<_g0<0OWl zvVoZssK=NLpo&f|sQmv>Lr7zLIPo0RqS7w{H0hZm^mEEzmq9E2w@or>*m3TMDu;AXBU(kcs@_N4%y#sLJ$rf;Iv zPDXZ-12L6_=Nwk59KaBklS{?bGgBOcnk$XK%4{D;rajqJgkbW4k>CLg1YG*>LTyVY zyzJ`sWP<;n$L4r0afh4WsDSc4J9g;59zYPYg^>s`$l`&Y$V>(Inw=5cmSJTqjaK1{ zb;>NAKtUjYrJNSQ9wD3)H3hY&fCJh0S}>1IC1E1N&NogqLDiU&Le>|uzxQwx=+$Bh zgN>=VN1gyL3l{9m+dY`WU_XaFeu?>-|~x)lG2)yy=0s2RHAU^qPFbatGj^S`BK0J`yfX0r_k$ISI=i|ABuP zE7PC!86^Fe`lu3(7^>v%hHFU-lCa!!P0?y+*0W{ojAT^$6q6o`81<*QriuiMv`%v) zueh=u){D^t*GIrb-2J!-=)r|)R3$Lelk_>1VRM{=NzK?7X-|B5?%I`C?LgbaAZ?kK zu8W!?Qg&T34V1Kc8HrEfS_afN7K5ysI?1t+OVbLR>#?VZB1)e_A5O!OuyqMUOEh5K zO+pnns<&)@QnPe5VYk&8XTZ#5pZ1_5ZyOZU;@P)t zgo6my@oKFh;Zo84dI0RZpLr!3H-^nITQ}D4z03^~_bIeH3rIwQO{Us0h*8!DaW5h- zAymTrMS#WZzcKgr>_DtWHN)^-e<$A=0e)$l9FE{Li{}8b=qBTt_}q(Kvlq#Mg!$MY z89och1O>ecbZfPvl<=ALDPcA+I*=4@J(d(udIPZNdq931u_##=u~D_(r8CsGaB`aG zS7^Emsd9`;9(+NpHXL&~)F`t`g+P6dK*gL@L2(Q+;x5!rU&D-j~taHi|S5*p< z0{FZKAJCe$C2>CizYw*U#1bU2H?js7*25IM%{lnLQRBYRW?^cG&DH$nxY4fsg0 zldac0ukL)r*%iJ~$iuz5>UKuyMuiauX5Fu{jNlrX$|=IA3`$72nr<0QsT9cAA4MMG zwcSYpr#+lTmd*nDb4fUP`1jHl{6W?hcmd<{iB4izBaERn-Pj8a)dg-Kp}k}e4z90< z1NgP}q2-bpmv3Q^adDakt#2{pc^m?H!Iqx&4To$DY}N_ZxBCokFo{MHn4%(}r{JH# zFQiC`wi2-H&{AIn#%ZP%w0H7GJBEDmO?Oi) z8pKsIQu98#*FS_h@y(2s^?@1UosD)k1&jf6mWo3H+QjpRSlpaDUw+>)o zJ*A^wUbZ6V!P>YLNryGlk(y(^YMQFNkI{sv2}AM>*1OZxvMZsZ!yB;6Fk#VM9KVH7 zbdO=675ic=*3Z|sU@q^A2o8&k)jtG^%N6FhtJmIsL#*saaMM+sZ7x&@eOJ{tJ1>hzJmGfW|I*+V6BR-D=iB$yG*Dx;@D1kD8wG zT_VQaK(8FbTm7KW;%s4D{{+aZGa3S8HWeH3(6DA0ff*qaV8Kv4H-V*%@shIF(ogd> zs@7&NVxksGV`3*XZAf>e%q`+bzt5U+Wmx}FJo`Eq44X;kauULlPjA65#1wXdTd)(f z`a%Oj0AuTjJc!ptT&|4-8mYwqICs>8!X&{Q%eycbcs!wm?i+Utks>0n8B zg+E1z_aP}w;J`LAFwW-rha(9x|jbQJpQ=n&HMjIY@Zf!np=^E83j zkRlP!DD~Mc;CTW*+&ik@MrXeYX!RdMrpNLoKGk*MeC4rl3O5TWk+Rk|{(zmRn!Civ z!#Kp_gg7V~i0E8U`rQ!lmguM2vhZw*GV*IKFG#3Bn9QXI}P!s*u;2qt!6(!lpZ zC}R#@zw{3XWL39ZcO4-8I)j1q3x8uUkbdd9KpuN65n#cEdX>+V;; znMb%E0=r_f6jU0zwfLBU7lD-V11}Ev)|7VPmq6Kh>yB;EgmiaLAW1=a{^J z1V=r1fZYVah?l2>a}?M;RsBa2`+I@aUt+?|ntq+h8%*A0GRx#Dlj}%2Ih=Zh05hmQ-nk~UMn4`+C|2UIB!Q@Xe z`BO}On#s>F5i#{=nfqBLiwDMN&d=BAc z`J|P>1%spH@te!||LI(sWjXxjaVP{e(vP|PR&pb`Tz+#dmCM3mo07J(-M7;5b|y?o zZWKL?=AO)rv#;)dK4XpeHAc|x$oPnigfkfXOZj*14P=6|nqNySz>=@54{|)SDW^3P zIFp%ivgX7l@*~L0sZHc_$Oq>(N0ATCZRVYPY3ysTzm>*esGR6zu5xD-6YUg>yaGxvL%Y&?Vz^tT!MTRPW4wX6+W&fm<#Ejqw z$O*d3gX(2 zL0sGBd}dKK&x2;4w0-oo`=I9fxQNRoLkyuFL(ccPh{px-yBN#%;30%jK3NV1vQ}6Qz`4fTgsP3E5xP$>R9BIkuj|^Dg_# zMA%;@JhncjHh=|Ab@GfaoRjaj#FQh_Kn|D8@wbqnKP?Tmcq^$n%ZXc%SWO=9JqN2R z_MzrVrL2@WBPBZnue1#0}ls07WXo12!jHJoWQPjWC7kI+^2AV zmiGvp8sT|DJmbORE5Wn1G@g@+a0u7SDFmUJBfN!?_WlS($#nbPAKQGg2H%Kr?iNiX z#|Icwm%!TRuCUC8Z;3<*n>fB1BOkk=IUWI3fjh}%am8k!zi)qM2o=ojqedgiu-Sb` zO4yS4am!}GaYkh+b}~5DyW({6(xn7f;SASd6n8QLVK3o*k#BY>jKtL$lk<`|RoW<* zkCVuD8Tvn(b zwe3idsv)AsL>@!O#QDc^`69s8@1TeFrWi<4*ar>~O4PaZhkJ>xCg4GaeF!b!e)3gG zLC)RCo-Run!5N~&vA(=D(cTy7T-Z_ZrFyH1qc!J>;Tzc93ctw+ zDarxMNb|z?gvqedWwuVh_oUiWy=})_8yo@gJ8;H=CV6|Eyv621ei?C-I`Ge`mrO}de_`D-kaZgN2*vq2}jGwsa- zI*E;z>yGnsk?njF35-hnBK$0>9m&EY7jng}|6RVakI7$UGDs>?mc0XTjEQSJ0!+VZ z^f)M@s?ks=etsAfl-#9(Q1t6X0Td!WDRD$Eg6yI4Y7|%bh(;=grKnaEg)go~bP@Io z!$AE-6qGrCMjIL@3yq?!O%H3267kDy>{pnG{=l`V|2h-tuScEeGIYtwYW|z3e2kqM zl>vNwBll_Pbj}KPPgZ&|sadazEA~eMI*&_ir(Kl+3)wPa-W(&CeU$2jdk`r904*&7 zl#j_TxXsjj(${GU56|OruOsPpimlpX^c3hP-K|;Mfx#20Y|qUvO1xpYO97`tllshZ%EAn?R*w21xHdu(ISs^MJLfdnJ2u*(uSAU=(( zLP_|?{0J_>^YJT41}IFsL}8kwsrLTM{vkKQ z9w;;BBU&}Mupq-K0?G?1@!ZW^jeRyD2Z}7UTUSDPDB$sApTgdiYxZV1#}*l`zn&IB*JdlQYlEIw8E#U@QY8psS*5U z9mpUxDxd4hA)i-ck{@+OVe&Qx!cCWb-`m9&{CE;A)ZTL)`fKnUQCdNP`R-w{Pu~uN zg8s*V3kv~fkIlK|uniNTh?ot28?l$Izq~$MCy$m8N{F@!cufG2Fn9eM=vIH9Nf+fI zpZ-~5dlL$~e41Ya;pc+ddjbHvWBgPb$LNuO?uz$;xIIg4jGY9d@Lt8u7u$lZqo&n;%aJH5*T$=As zP}dBfCe2fMhPOS4Zhbm9@DbHikjidBGQtf&MVWY!Sf!Y4P)0 z9K|qU`RgHm4h8K;@H0$n(En^0W~eEAmu>zIF|&PGo3n+n-i^q&*kpGX^>279Qbpv3 zC@CUFx}2=b7ydOWe-ph5<#NLUhZuZN)+D@6;`!37QN?v%RUDxTH9 z&VoUmbx`nqbf&+@8oXP#;SJJocjNt-)_)J}{Z`mI@78U7JbE7dF-`wlH1@k;)4bCk zFbPfVACXgjL{|9`cfKD{e0}5~DHQd$@T31Ql1>ia+pf6PT1^ga!79%4_ip#Qewq!K z<1K7J&asqs_q)X8%h$zud|_6PqF%`!RwX#eZO)62vF?*Y>&mA(#@X-0V;fzB;FJ#! zP;Dyh9o8OP(q799P?#s#tZ^ha_};Ez@9}K%M%JZ(9bC1-P6V)vh) LC+z;`{>T3Z)l$um literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geomtype.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/geomtype.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f10cfafcb993ad50220dd11ee68e4b5ef00f40b GIT binary patch literal 3103 zcmZ`*-EZ4Q66Y>SiJ~MsQRBEt>xNC5G-@5X2#^*Hg5r8{;TCckX zT;G23kBui)!}tmZvzG~jKfx_u0>KPMx<-!#gcxfEqs)A4F!K=&D6?)GP5S_Rj3&wJ zYpd_xxb|tA_f?!GZM4o_lV^SnR&E4@8Sn%Wn2ZKi3{Pa%=Y-j;1hUK=kQL^Ftg;%& zI-3JI&yIjR${HY_W5+-)u;U;X+4CT6ZY>(@1ZZWgodm6-wHH9EYVAeP>RMX@ZC-0H zfp%1Dr(*I232f%EmmeG4-Ye}JtHvV|l-X%^=CKht>=kwv{wwSpdlmj&US;Q5^D+9= zK!1(BuJt-wW*1<7j`@JlN?!fT+O0L7_U`QV`QX&Gq#gBT){PYRV8X*0uEef~)6$Ot zpT7zMGB4jvwv+Tha-c`{%`{Hb0mT{jMx5~5O2kR$0FlkhH`DHJCru747zOT!Sy#n{ zzm0}@ZJ1e9LThd0R;(8WXKIBYx>8QO|yXVxq{8x{Dq5ti|VDB#|&!YxmNh>fA~aiv8c zl81Ci_l$jGNIs|c>22dnq^sRcA8^q$bLzj5lkJ@Bhy_@s#jl%JFSqVWE@bOgCS}xG zP1{+ICrY-~V)b6O(YhWBsV>|U=@wwr+TqDg>qflMlCk0!`cZp3>Tua&TT#+USK4U; ziP~7{#B!y>qV7ru60RWEet$Q2udukS+G(%<&MAx>vwPAQ9G_u~KXqy2^!UOZ#q#ayRt*X+u&i3J%+F{v6Rb7=s%=GBZU3{oG%Y9U5`7N;9i<3 zPi=CqoeBY1X~rYby^Tn6=4Jgf(erWA&y*iH2o6?5Ud{^guMb{)KiP@8G1F@c((79B zPM?*h56`}zDBj^hPha-Vvcb~qTKx_Wq4zp5B+YMDb2pZ8B2|>Mxj-~?Gs$|nDU}e% zap;DihPX!NW(OkE^=CpQ=B1Ijg8R89M2d8>B=6n}TwD<9_X%vGQ*H_5X6}SA8LKdS z8Aj3r;ZldV#DSkhY9MQbK5?lF|0Uv3*Bl(1rNnsop%TDyz*`dn3mj5rKr+bS+%2v$ zQ2-54W{{S98ucXVaj!4ZJ{M}&hqAEH@+A>xVfoWRmqU$3_$JJ0qL%33xx-N*R^cI* zB3u)eegK0BOREqbMW${;O-`740<6}ajn#^BGFJi?o+(zKjS<)w9en0`qiZ$wqQv9( zvluqWA)B7!Qh6hGVV~7`e-Nupy>m@~$?6m+Dv)2;XfU12+DUGvLS5L566V3qpx-Tf zsTk2!6V0DI;d-+ymJl@DY>{&;Xz?lvWRf@yqDeKfxvgLLG{B`WiB&D zx()qmk(IQ)vItuNTN!Li%$eGn?%?7K$yasjo$TUz%)1Qt2)T>pqzCzd3CBo|S!v*= zj(}Jf`UG{x0ElBagVmJV`Z3^)InB$0_q$P>k5fwIQ=sIf;sE#%yd^$=&cx!@x9R+b z+ToNI?uU@Va-LKV5@?LnJ`wXn0C9^l`j$aQeOLEhYw+oWm3KsxNS#}KG%tJ8b9vbt z9k9z#I1EW03lHF!){v5u=csh#pigVx_o1I>&}&6M5^7omO;aN!9EeolH>Rk7SO>F) z%!NKHl*AhRLn`HtO2Zz0zI+5rB?4cw8^n5YxB-rx)|>O#Op#(?2+ca|r7Y{BUJJwf zS=1fPK<{E{I}8Ko!S=?*OB=D$jLvO1v3pW@@EUOrMH9vAAaZBi7mFHx11Bz`m~vlh z*wA&=BXQ&g2*dSmR+awf z)aVaRoqq4k(eIpj`Y-1Q{nj~3|LHVJ-!v8+>MS@GopTAb;7q9M_W`cKQb8Jj^pWAi iM~06d89vAJNFP>3NBW(hbLUEd);mZuiQ(6bhWURw7Yj-N literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/layer.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/__pycache__/layer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5588c68be4702268ce6ab92d4a0477a8d428a68c GIT binary patch literal 9320 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 OFTInteger + t = field.type + + # Returns the value the field; OFTIntegers return ints, + # OFTReal returns floats, all else returns string. + val = field.value +""" +from ctypes import byref +from pathlib import Path + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.driver import Driver +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.layer import Layer +from django.contrib.gis.gdal.prototypes import ds as capi +from django.utils.encoding import force_bytes, force_str + + +# For more information, see the OGR C API documentation: +# https://gdal.org/api/vector_c_api.html +# +# The OGR_DS_* routines are relevant here. +class DataSource(GDALBase): + "Wraps an OGR Data Source object." + destructor = capi.destroy_ds + + def __init__(self, ds_input, ds_driver=False, write=False, encoding="utf-8"): + # The write flag. + if write: + self._write = 1 + else: + self._write = 0 + # See also https://trac.osgeo.org/gdal/wiki/rfc23_ogr_unicode + self.encoding = encoding + + Driver.ensure_registered() + + if isinstance(ds_input, (str, Path)): + # The data source driver is a void pointer. + ds_driver = Driver.ptr_type() + try: + # OGROpen will auto-detect the data source type. + ds = capi.open_ds(force_bytes(ds_input), self._write, byref(ds_driver)) + except GDALException: + # Making the error message more clear rather than something + # like "Invalid pointer returned from OGROpen". + raise GDALException('Could not open the datasource at "%s"' % ds_input) + elif isinstance(ds_input, self.ptr_type) and isinstance( + ds_driver, Driver.ptr_type + ): + ds = ds_input + else: + raise GDALException("Invalid data source input type: %s" % type(ds_input)) + + if ds: + self.ptr = ds + self.driver = Driver(ds_driver) + else: + # Raise an exception if the returned pointer is NULL + raise GDALException('Invalid data source file "%s"' % ds_input) + + def __getitem__(self, index): + "Allows use of the index [] operator to get a layer at the index." + if isinstance(index, str): + try: + layer = capi.get_layer_by_name(self.ptr, force_bytes(index)) + except GDALException: + raise IndexError("Invalid OGR layer name given: %s." % index) + elif isinstance(index, int): + if 0 <= index < self.layer_count: + layer = capi.get_layer(self._ptr, index) + else: + raise IndexError( + "Index out of range when accessing layers in a datasource: %s." + % index + ) + else: + raise TypeError("Invalid index type: %s" % type(index)) + return Layer(layer, self) + + def __len__(self): + "Return the number of layers within the data source." + return self.layer_count + + def __str__(self): + "Return OGR GetName and Driver for the Data Source." + return "%s (%s)" % (self.name, self.driver) + + @property + def layer_count(self): + "Return the number of layers in the data source." + return capi.get_layer_count(self._ptr) + + @property + def name(self): + "Return the name of the data source." + name = capi.get_ds_name(self._ptr) + return force_str(name, self.encoding, strings_only=True) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/driver.py b/venv/Lib/site-packages/django/contrib/gis/gdal/driver.py new file mode 100644 index 000000000..0ce7a2cdc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/driver.py @@ -0,0 +1,103 @@ +from ctypes import c_void_p + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.prototypes import ds as vcapi +from django.contrib.gis.gdal.prototypes import raster as rcapi +from django.utils.encoding import force_bytes, force_str + + +class Driver(GDALBase): + """ + Wrap a GDAL/OGR Data Source Driver. + For more information, see the C API documentation: + https://gdal.org/api/vector_c_api.html + https://gdal.org/api/raster_c_api.html + """ + + # Case-insensitive aliases for some GDAL/OGR Drivers. + # For a complete list of original driver names see + # https://gdal.org/drivers/vector/ + # https://gdal.org/drivers/raster/ + _alias = { + # vector + "esri": "ESRI Shapefile", + "shp": "ESRI Shapefile", + "shape": "ESRI Shapefile", + "tiger": "TIGER", + "tiger/line": "TIGER", + # raster + "tiff": "GTiff", + "tif": "GTiff", + "jpeg": "JPEG", + "jpg": "JPEG", + } + + def __init__(self, dr_input): + """ + Initialize an GDAL/OGR driver on either a string or integer input. + """ + if isinstance(dr_input, str): + # If a string name of the driver was passed in + self.ensure_registered() + + # Checking the alias dictionary (case-insensitive) to see if an + # alias exists for the given driver. + if dr_input.lower() in self._alias: + name = self._alias[dr_input.lower()] + else: + name = dr_input + + # Attempting to get the GDAL/OGR driver by the string name. + for iface in (vcapi, rcapi): + driver = c_void_p(iface.get_driver_by_name(force_bytes(name))) + if driver: + break + elif isinstance(dr_input, int): + self.ensure_registered() + for iface in (vcapi, rcapi): + driver = iface.get_driver(dr_input) + if driver: + break + elif isinstance(dr_input, c_void_p): + driver = dr_input + else: + raise GDALException( + "Unrecognized input type for GDAL/OGR Driver: %s" % type(dr_input) + ) + + # Making sure we get a valid pointer to the OGR Driver + if not driver: + raise GDALException( + "Could not initialize GDAL/OGR Driver on input: %s" % dr_input + ) + self.ptr = driver + + def __str__(self): + return self.name + + @classmethod + def ensure_registered(cls): + """ + Attempt to register all the data source drivers. + """ + # Only register all if the driver counts are 0 (or else all drivers + # will be registered over and over again) + if not vcapi.get_driver_count(): + vcapi.register_all() + if not rcapi.get_driver_count(): + rcapi.register_all() + + @classmethod + def driver_count(cls): + """ + Return the number of GDAL/OGR data source drivers registered. + """ + return vcapi.get_driver_count() + rcapi.get_driver_count() + + @property + def name(self): + """ + Return description/name string for this driver. + """ + return force_str(rcapi.get_driver_description(self.ptr)) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/envelope.py b/venv/Lib/site-packages/django/contrib/gis/gdal/envelope.py new file mode 100644 index 000000000..4c2c1e4a1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/envelope.py @@ -0,0 +1,203 @@ +""" + The GDAL/OGR library uses an Envelope structure to hold the bounding + box information for a geometry. The envelope (bounding box) contains + two pairs of coordinates, one for the lower left coordinate and one + for the upper right coordinate: + + +----------o Upper right; (max_x, max_y) + | | + | | + | | + Lower left (min_x, min_y) o----------+ +""" +from ctypes import Structure, c_double + +from django.contrib.gis.gdal.error import GDALException + + +# The OGR definition of an Envelope is a C structure containing four doubles. +# See the 'ogr_core.h' source file for more information: +# https://gdal.org/doxygen/ogr__core_8h_source.html +class OGREnvelope(Structure): + "Represent the OGREnvelope C Structure." + _fields_ = [ + ("MinX", c_double), + ("MaxX", c_double), + ("MinY", c_double), + ("MaxY", c_double), + ] + + +class Envelope: + """ + The Envelope object is a C structure that contains the minimum and + maximum X, Y coordinates for a rectangle bounding box. The naming + of the variables is compatible with the OGR Envelope structure. + """ + + def __init__(self, *args): + """ + The initialization function may take an OGREnvelope structure, 4-element + tuple or list, or 4 individual arguments. + """ + + if len(args) == 1: + if isinstance(args[0], OGREnvelope): + # OGREnvelope (a ctypes Structure) was passed in. + self._envelope = args[0] + elif isinstance(args[0], (tuple, list)): + # A tuple was passed in. + if len(args[0]) != 4: + raise GDALException( + "Incorrect number of tuple elements (%d)." % len(args[0]) + ) + else: + self._from_sequence(args[0]) + else: + raise TypeError("Incorrect type of argument: %s" % type(args[0])) + elif len(args) == 4: + # Individual parameters passed in. + # Thanks to ww for the help + self._from_sequence([float(a) for a in args]) + else: + raise GDALException("Incorrect number (%d) of arguments." % len(args)) + + # Checking the x,y coordinates + if self.min_x > self.max_x: + raise GDALException("Envelope minimum X > maximum X.") + if self.min_y > self.max_y: + raise GDALException("Envelope minimum Y > maximum Y.") + + def __eq__(self, other): + """ + Return True if the envelopes are equivalent; can compare against + other Envelopes and 4-tuples. + """ + if isinstance(other, Envelope): + return ( + (self.min_x == other.min_x) + and (self.min_y == other.min_y) + and (self.max_x == other.max_x) + and (self.max_y == other.max_y) + ) + elif isinstance(other, tuple) and len(other) == 4: + return ( + (self.min_x == other[0]) + and (self.min_y == other[1]) + and (self.max_x == other[2]) + and (self.max_y == other[3]) + ) + else: + raise GDALException("Equivalence testing only works with other Envelopes.") + + def __str__(self): + "Return a string representation of the tuple." + return str(self.tuple) + + def _from_sequence(self, seq): + "Initialize the C OGR Envelope structure from the given sequence." + self._envelope = OGREnvelope() + self._envelope.MinX = seq[0] + self._envelope.MinY = seq[1] + self._envelope.MaxX = seq[2] + self._envelope.MaxY = seq[3] + + def expand_to_include(self, *args): + """ + Modify the envelope to expand to include the boundaries of + the passed-in 2-tuple (a point), 4-tuple (an extent) or + envelope. + """ + # We provide a number of different signatures for this method, + # and the logic here is all about converting them into a + # 4-tuple single parameter which does the actual work of + # expanding the envelope. + if len(args) == 1: + if isinstance(args[0], Envelope): + return self.expand_to_include(args[0].tuple) + elif hasattr(args[0], "x") and hasattr(args[0], "y"): + return self.expand_to_include( + args[0].x, args[0].y, args[0].x, args[0].y + ) + elif isinstance(args[0], (tuple, list)): + # A tuple was passed in. + if len(args[0]) == 2: + return self.expand_to_include( + (args[0][0], args[0][1], args[0][0], args[0][1]) + ) + elif len(args[0]) == 4: + (minx, miny, maxx, maxy) = args[0] + if minx < self._envelope.MinX: + self._envelope.MinX = minx + if miny < self._envelope.MinY: + self._envelope.MinY = miny + if maxx > self._envelope.MaxX: + self._envelope.MaxX = maxx + if maxy > self._envelope.MaxY: + self._envelope.MaxY = maxy + else: + raise GDALException( + "Incorrect number of tuple elements (%d)." % len(args[0]) + ) + else: + raise TypeError("Incorrect type of argument: %s" % type(args[0])) + elif len(args) == 2: + # An x and an y parameter were passed in + return self.expand_to_include((args[0], args[1], args[0], args[1])) + elif len(args) == 4: + # Individual parameters passed in. + return self.expand_to_include(args) + else: + raise GDALException("Incorrect number (%d) of arguments." % len(args[0])) + + @property + def min_x(self): + "Return the value of the minimum X coordinate." + return self._envelope.MinX + + @property + def min_y(self): + "Return the value of the minimum Y coordinate." + return self._envelope.MinY + + @property + def max_x(self): + "Return the value of the maximum X coordinate." + return self._envelope.MaxX + + @property + def max_y(self): + "Return the value of the maximum Y coordinate." + return self._envelope.MaxY + + @property + def ur(self): + "Return the upper-right coordinate." + return (self.max_x, self.max_y) + + @property + def ll(self): + "Return the lower-left coordinate." + return (self.min_x, self.min_y) + + @property + def tuple(self): + "Return a tuple representing the envelope." + return (self.min_x, self.min_y, self.max_x, self.max_y) + + @property + def wkt(self): + "Return WKT representing a Polygon for this envelope." + # TODO: Fix significant figures. + return "POLYGON((%s %s,%s %s,%s %s,%s %s,%s %s))" % ( + self.min_x, + self.min_y, + self.min_x, + self.max_y, + self.max_x, + self.max_y, + self.max_x, + self.min_y, + self.min_x, + self.min_y, + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/error.py b/venv/Lib/site-packages/django/contrib/gis/gdal/error.py new file mode 100644 index 000000000..df19c2e4a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/error.py @@ -0,0 +1,61 @@ +""" + This module houses the GDAL & SRS Exception objects, and the + check_err() routine which checks the status code returned by + GDAL/OGR methods. +""" + + +# #### GDAL & SRS Exceptions #### +class GDALException(Exception): + pass + + +class SRSException(Exception): + pass + + +# #### GDAL/OGR error checking codes and routine #### + +# OGR Error Codes +OGRERR_DICT = { + 1: (GDALException, "Not enough data."), + 2: (GDALException, "Not enough memory."), + 3: (GDALException, "Unsupported geometry type."), + 4: (GDALException, "Unsupported operation."), + 5: (GDALException, "Corrupt data."), + 6: (GDALException, "OGR failure."), + 7: (SRSException, "Unsupported SRS."), + 8: (GDALException, "Invalid handle."), +} + +# CPL Error Codes +# https://gdal.org/api/cpl.html#cpl-error-h +CPLERR_DICT = { + 1: (GDALException, "AppDefined"), + 2: (GDALException, "OutOfMemory"), + 3: (GDALException, "FileIO"), + 4: (GDALException, "OpenFailed"), + 5: (GDALException, "IllegalArg"), + 6: (GDALException, "NotSupported"), + 7: (GDALException, "AssertionFailed"), + 8: (GDALException, "NoWriteAccess"), + 9: (GDALException, "UserInterrupt"), + 10: (GDALException, "ObjectNull"), +} + +ERR_NONE = 0 + + +def check_err(code, cpl=False): + """ + Check the given CPL/OGRERR and raise an exception where appropriate. + """ + err_dict = CPLERR_DICT if cpl else OGRERR_DICT + + if code == ERR_NONE: + return + elif code in err_dict: + e, msg = err_dict[code] + raise e(msg) + else: + raise GDALException('Unknown error code: "%s"' % code) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/feature.py b/venv/Lib/site-packages/django/contrib/gis/gdal/feature.py new file mode 100644 index 000000000..6f0896998 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/feature.py @@ -0,0 +1,120 @@ +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.field import Field +from django.contrib.gis.gdal.geometries import OGRGeometry, OGRGeomType +from django.contrib.gis.gdal.prototypes import ds as capi +from django.contrib.gis.gdal.prototypes import geom as geom_api +from django.utils.encoding import force_bytes, force_str + + +# For more information, see the OGR C API source code: +# https://gdal.org/api/vector_c_api.html +# +# The OGR_F_* routines are relevant here. +class Feature(GDALBase): + """ + This class that wraps an OGR Feature, needs to be instantiated + from a Layer object. + """ + + destructor = capi.destroy_feature + + def __init__(self, feat, layer): + """ + Initialize Feature from a pointer and its Layer object. + """ + if not feat: + raise GDALException("Cannot create OGR Feature, invalid pointer given.") + self.ptr = feat + self._layer = layer + + def __getitem__(self, index): + """ + Get the Field object at the specified index, which may be either + an integer or the Field's string label. Note that the Field object + is not the field's _value_ -- use the `get` method instead to + retrieve the value (e.g. an integer) instead of a Field instance. + """ + if isinstance(index, str): + i = self.index(index) + elif 0 <= index < self.num_fields: + i = index + else: + raise IndexError( + "Index out of range when accessing field in a feature: %s." % index + ) + return Field(self, i) + + def __len__(self): + "Return the count of fields in this feature." + return self.num_fields + + def __str__(self): + "The string name of the feature." + return "Feature FID %d in Layer<%s>" % (self.fid, self.layer_name) + + def __eq__(self, other): + "Do equivalence testing on the features." + return bool(capi.feature_equal(self.ptr, other._ptr)) + + # #### Feature Properties #### + @property + def encoding(self): + return self._layer._ds.encoding + + @property + def fid(self): + "Return the feature identifier." + return capi.get_fid(self.ptr) + + @property + def layer_name(self): + "Return the name of the layer for the feature." + name = capi.get_feat_name(self._layer._ldefn) + return force_str(name, self.encoding, strings_only=True) + + @property + def num_fields(self): + "Return the number of fields in the Feature." + return capi.get_feat_field_count(self.ptr) + + @property + def fields(self): + "Return a list of fields in the Feature." + return [ + force_str( + capi.get_field_name(capi.get_field_defn(self._layer._ldefn, i)), + self.encoding, + strings_only=True, + ) + for i in range(self.num_fields) + ] + + @property + def geom(self): + "Return the OGR Geometry for this Feature." + # Retrieving the geometry pointer for the feature. + geom_ptr = capi.get_feat_geom_ref(self.ptr) + return OGRGeometry(geom_api.clone_geom(geom_ptr)) + + @property + def geom_type(self): + "Return the OGR Geometry Type for this Feature." + return OGRGeomType(capi.get_fd_geom_type(self._layer._ldefn)) + + # #### Feature Methods #### + def get(self, field): + """ + Return the value of the field, instead of an instance of the Field + object. May take a string of the field name or a Field object as + parameters. + """ + field_name = getattr(field, "name", field) + return self[field_name].value + + def index(self, field_name): + "Return the index of the given field name." + i = capi.get_field_index(self.ptr, force_bytes(field_name)) + if i < 0: + raise IndexError("Invalid OFT field name given: %s." % field_name) + return i diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/field.py b/venv/Lib/site-packages/django/contrib/gis/gdal/field.py new file mode 100644 index 000000000..b9964ab70 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/field.py @@ -0,0 +1,254 @@ +from ctypes import byref, c_int +from datetime import date, datetime, time + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.prototypes import ds as capi +from django.utils.encoding import force_str + + +# For more information, see the OGR C API source code: +# https://gdal.org/api/vector_c_api.html +# +# The OGR_Fld_* routines are relevant here. +class Field(GDALBase): + """ + Wrap an OGR Field. Needs to be instantiated from a Feature object. + """ + + def __init__(self, feat, index): + """ + Initialize on the feature object and the integer index of + the field within the feature. + """ + # Setting the feature pointer and index. + self._feat = feat + self._index = index + + # Getting the pointer for this field. + fld_ptr = capi.get_feat_field_defn(feat.ptr, index) + if not fld_ptr: + raise GDALException("Cannot create OGR Field, invalid pointer given.") + self.ptr = fld_ptr + + # Setting the class depending upon the OGR Field Type (OFT) + self.__class__ = OGRFieldTypes[self.type] + + def __str__(self): + "Return the string representation of the Field." + return str(self.value).strip() + + # #### Field Methods #### + def as_double(self): + "Retrieve the Field's value as a double (float)." + return ( + capi.get_field_as_double(self._feat.ptr, self._index) + if self.is_set + else None + ) + + def as_int(self, is_64=False): + "Retrieve the Field's value as an integer." + if is_64: + return ( + capi.get_field_as_integer64(self._feat.ptr, self._index) + if self.is_set + else None + ) + else: + return ( + capi.get_field_as_integer(self._feat.ptr, self._index) + if self.is_set + else None + ) + + def as_string(self): + "Retrieve the Field's value as a string." + if not self.is_set: + return None + string = capi.get_field_as_string(self._feat.ptr, self._index) + return force_str(string, encoding=self._feat.encoding, strings_only=True) + + def as_datetime(self): + "Retrieve the Field's value as a tuple of date & time components." + if not self.is_set: + return None + yy, mm, dd, hh, mn, ss, tz = [c_int() for i in range(7)] + status = capi.get_field_as_datetime( + self._feat.ptr, + self._index, + byref(yy), + byref(mm), + byref(dd), + byref(hh), + byref(mn), + byref(ss), + byref(tz), + ) + if status: + return (yy, mm, dd, hh, mn, ss, tz) + else: + raise GDALException( + "Unable to retrieve date & time information from the field." + ) + + # #### Field Properties #### + @property + def is_set(self): + "Return True if the value of this field isn't null, False otherwise." + return capi.is_field_set(self._feat.ptr, self._index) + + @property + def name(self): + "Return the name of this Field." + name = capi.get_field_name(self.ptr) + return force_str(name, encoding=self._feat.encoding, strings_only=True) + + @property + def precision(self): + "Return the precision of this Field." + return capi.get_field_precision(self.ptr) + + @property + def type(self): + "Return the OGR type of this Field." + return capi.get_field_type(self.ptr) + + @property + def type_name(self): + "Return the OGR field type name for this Field." + return capi.get_field_type_name(self.type) + + @property + def value(self): + "Return the value of this Field." + # Default is to get the field as a string. + return self.as_string() + + @property + def width(self): + "Return the width of this Field." + return capi.get_field_width(self.ptr) + + +# ### The Field sub-classes for each OGR Field type. ### +class OFTInteger(Field): + _bit64 = False + + @property + def value(self): + "Return an integer contained in this field." + return self.as_int(self._bit64) + + @property + def type(self): + """ + GDAL uses OFTReals to represent OFTIntegers in created + shapefiles -- forcing the type here since the underlying field + type may actually be OFTReal. + """ + return 0 + + +class OFTReal(Field): + @property + def value(self): + "Return a float contained in this field." + return self.as_double() + + +# String & Binary fields, just subclasses +class OFTString(Field): + pass + + +class OFTWideString(Field): + pass + + +class OFTBinary(Field): + pass + + +# OFTDate, OFTTime, OFTDateTime fields. +class OFTDate(Field): + @property + def value(self): + "Return a Python `date` object for the OFTDate field." + try: + yy, mm, dd, hh, mn, ss, tz = self.as_datetime() + return date(yy.value, mm.value, dd.value) + except (TypeError, ValueError, GDALException): + return None + + +class OFTDateTime(Field): + @property + def value(self): + "Return a Python `datetime` object for this OFTDateTime field." + # TODO: Adapt timezone information. + # See https://lists.osgeo.org/pipermail/gdal-dev/2006-February/007990.html + # The `tz` variable has values of: 0=unknown, 1=localtime (ambiguous), + # 100=GMT, 104=GMT+1, 80=GMT-5, etc. + try: + yy, mm, dd, hh, mn, ss, tz = self.as_datetime() + return datetime(yy.value, mm.value, dd.value, hh.value, mn.value, ss.value) + except (TypeError, ValueError, GDALException): + return None + + +class OFTTime(Field): + @property + def value(self): + "Return a Python `time` object for this OFTTime field." + try: + yy, mm, dd, hh, mn, ss, tz = self.as_datetime() + return time(hh.value, mn.value, ss.value) + except (ValueError, GDALException): + return None + + +class OFTInteger64(OFTInteger): + _bit64 = True + + +# List fields are also just subclasses +class OFTIntegerList(Field): + pass + + +class OFTRealList(Field): + pass + + +class OFTStringList(Field): + pass + + +class OFTWideStringList(Field): + pass + + +class OFTInteger64List(Field): + pass + + +# Class mapping dictionary for OFT Types and reverse mapping. +OGRFieldTypes = { + 0: OFTInteger, + 1: OFTIntegerList, + 2: OFTReal, + 3: OFTRealList, + 4: OFTString, + 5: OFTStringList, + 6: OFTWideString, + 7: OFTWideStringList, + 8: OFTBinary, + 9: OFTDate, + 10: OFTTime, + 11: OFTDateTime, + # New 64-bit integer types in GDAL 2 + 12: OFTInteger64, + 13: OFTInteger64List, +} +ROGRFieldTypes = {cls: num for num, cls in OGRFieldTypes.items()} diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/geometries.py b/venv/Lib/site-packages/django/contrib/gis/gdal/geometries.py new file mode 100644 index 000000000..f74dc688b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/geometries.py @@ -0,0 +1,743 @@ +""" + The OGRGeometry is a wrapper for using the OGR Geometry class + (see https://gdal.org/api/ogrgeometry_cpp.html#_CPPv411OGRGeometry). + OGRGeometry may be instantiated when reading geometries from OGR Data Sources + (e.g. SHP files), or when given OGC WKT (a string). + + While the 'full' API is not present yet, the API is "pythonic" unlike + the traditional and "next-generation" OGR Python bindings. One major + advantage OGR Geometries have over their GEOS counterparts is support + for spatial reference systems and their transformation. + + Example: + >>> from django.contrib.gis.gdal import OGRGeometry, OGRGeomType, SpatialReference + >>> wkt1, wkt2 = 'POINT(-90 30)', 'POLYGON((0 0, 5 0, 5 5, 0 5)' + >>> pnt = OGRGeometry(wkt1) + >>> print(pnt) + POINT (-90 30) + >>> mpnt = OGRGeometry(OGRGeomType('MultiPoint'), SpatialReference('WGS84')) + >>> mpnt.add(wkt1) + >>> mpnt.add(wkt1) + >>> print(mpnt) + MULTIPOINT (-90 30,-90 30) + >>> print(mpnt.srs.name) + WGS 84 + >>> print(mpnt.srs.proj) + +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs + >>> mpnt.transform(SpatialReference('NAD27')) + >>> print(mpnt.proj) + +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs + >>> print(mpnt) + MULTIPOINT (-89.99993037860248 29.99979788655764,-89.99993037860248 29.99979788655764) + + The OGRGeomType class is to make it easy to specify an OGR geometry type: + >>> from django.contrib.gis.gdal import OGRGeomType + >>> gt1 = OGRGeomType(3) # Using an integer for the type + >>> gt2 = OGRGeomType('Polygon') # Using a string + >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive + >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects + True True +""" +import sys +from binascii import b2a_hex +from ctypes import byref, c_char_p, c_double, c_ubyte, c_void_p, string_at + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope +from django.contrib.gis.gdal.error import GDALException, SRSException +from django.contrib.gis.gdal.geomtype import OGRGeomType +from django.contrib.gis.gdal.prototypes import geom as capi +from django.contrib.gis.gdal.prototypes import srs as srs_api +from django.contrib.gis.gdal.srs import CoordTransform, SpatialReference +from django.contrib.gis.geometry import hex_regex, json_regex, wkt_regex +from django.utils.encoding import force_bytes + + +# For more information, see the OGR C API source code: +# https://gdal.org/api/vector_c_api.html +# +# The OGR_G_* routines are relevant here. +class OGRGeometry(GDALBase): + """Encapsulate an OGR geometry.""" + + destructor = capi.destroy_geom + + def __init__(self, geom_input, srs=None): + """Initialize Geometry on either WKT or an OGR pointer as input.""" + str_instance = isinstance(geom_input, str) + + # If HEX, unpack input to a binary buffer. + if str_instance and hex_regex.match(geom_input): + geom_input = memoryview(bytes.fromhex(geom_input)) + str_instance = False + + # Constructing the geometry, + if str_instance: + wkt_m = wkt_regex.match(geom_input) + json_m = json_regex.match(geom_input) + if wkt_m: + if wkt_m["srid"]: + # If there's EWKT, set the SRS w/value of the SRID. + srs = int(wkt_m["srid"]) + if wkt_m["type"].upper() == "LINEARRING": + # OGR_G_CreateFromWkt doesn't work with LINEARRING WKT. + # See https://trac.osgeo.org/gdal/ticket/1992. + g = capi.create_geom(OGRGeomType(wkt_m["type"]).num) + capi.import_wkt(g, byref(c_char_p(wkt_m["wkt"].encode()))) + else: + g = capi.from_wkt( + byref(c_char_p(wkt_m["wkt"].encode())), None, byref(c_void_p()) + ) + elif json_m: + g = self._from_json(geom_input.encode()) + else: + # Seeing if the input is a valid short-hand string + # (e.g., 'Point', 'POLYGON'). + OGRGeomType(geom_input) + g = capi.create_geom(OGRGeomType(geom_input).num) + elif isinstance(geom_input, memoryview): + # WKB was passed in + g = self._from_wkb(geom_input) + elif isinstance(geom_input, OGRGeomType): + # OGRGeomType was passed in, an empty geometry will be created. + g = capi.create_geom(geom_input.num) + elif isinstance(geom_input, self.ptr_type): + # OGR pointer (c_void_p) was the input. + g = geom_input + else: + raise GDALException( + "Invalid input type for OGR Geometry construction: %s" + % type(geom_input) + ) + + # Now checking the Geometry pointer before finishing initialization + # by setting the pointer for the object. + if not g: + raise GDALException( + "Cannot create OGR Geometry from input: %s" % geom_input + ) + self.ptr = g + + # Assigning the SpatialReference object to the geometry, if valid. + if srs: + self.srs = srs + + # Setting the class depending upon the OGR Geometry Type + self.__class__ = GEO_CLASSES[self.geom_type.num] + + # Pickle routines + def __getstate__(self): + srs = self.srs + if srs: + srs = srs.wkt + else: + srs = None + return bytes(self.wkb), srs + + def __setstate__(self, state): + wkb, srs = state + ptr = capi.from_wkb(wkb, None, byref(c_void_p()), len(wkb)) + if not ptr: + raise GDALException("Invalid OGRGeometry loaded from pickled state.") + self.ptr = ptr + self.srs = srs + + @classmethod + def _from_wkb(cls, geom_input): + return capi.from_wkb( + bytes(geom_input), None, byref(c_void_p()), len(geom_input) + ) + + @staticmethod + def _from_json(geom_input): + return capi.from_json(geom_input) + + @classmethod + def from_bbox(cls, bbox): + "Construct a Polygon from a bounding box (4-tuple)." + x0, y0, x1, y1 = bbox + return OGRGeometry( + "POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))" + % (x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) + ) + + @staticmethod + def from_json(geom_input): + return OGRGeometry(OGRGeometry._from_json(force_bytes(geom_input))) + + @classmethod + def from_gml(cls, gml_string): + return cls(capi.from_gml(force_bytes(gml_string))) + + # ### Geometry set-like operations ### + # g = g1 | g2 + def __or__(self, other): + "Return the union of the two geometries." + return self.union(other) + + # g = g1 & g2 + def __and__(self, other): + "Return the intersection of this Geometry and the other." + return self.intersection(other) + + # g = g1 - g2 + def __sub__(self, other): + "Return the difference this Geometry and the other." + return self.difference(other) + + # g = g1 ^ g2 + def __xor__(self, other): + "Return the symmetric difference of this Geometry and the other." + return self.sym_difference(other) + + def __eq__(self, other): + "Is this Geometry equal to the other?" + return isinstance(other, OGRGeometry) and self.equals(other) + + def __str__(self): + "WKT is used for the string representation." + return self.wkt + + # #### Geometry Properties #### + @property + def dimension(self): + "Return 0 for points, 1 for lines, and 2 for surfaces." + return capi.get_dims(self.ptr) + + def _get_coord_dim(self): + "Return the coordinate dimension of the Geometry." + return capi.get_coord_dim(self.ptr) + + def _set_coord_dim(self, dim): + "Set the coordinate dimension of this Geometry." + if dim not in (2, 3): + raise ValueError("Geometry dimension must be either 2 or 3") + capi.set_coord_dim(self.ptr, dim) + + coord_dim = property(_get_coord_dim, _set_coord_dim) + + @property + def geom_count(self): + "Return the number of elements in this Geometry." + return capi.get_geom_count(self.ptr) + + @property + def point_count(self): + "Return the number of Points in this Geometry." + return capi.get_point_count(self.ptr) + + @property + def num_points(self): + "Alias for `point_count` (same name method in GEOS API.)" + return self.point_count + + @property + def num_coords(self): + "Alias for `point_count`." + return self.point_count + + @property + def geom_type(self): + "Return the Type for this Geometry." + return OGRGeomType(capi.get_geom_type(self.ptr)) + + @property + def geom_name(self): + "Return the Name of this Geometry." + return capi.get_geom_name(self.ptr) + + @property + def area(self): + "Return the area for a LinearRing, Polygon, or MultiPolygon; 0 otherwise." + return capi.get_area(self.ptr) + + @property + def envelope(self): + "Return the envelope for this Geometry." + # TODO: Fix Envelope() for Point geometries. + return Envelope(capi.get_envelope(self.ptr, byref(OGREnvelope()))) + + @property + def empty(self): + return capi.is_empty(self.ptr) + + @property + def extent(self): + "Return the envelope as a 4-tuple, instead of as an Envelope object." + return self.envelope.tuple + + # #### SpatialReference-related Properties #### + + # The SRS property + def _get_srs(self): + "Return the Spatial Reference for this Geometry." + try: + srs_ptr = capi.get_geom_srs(self.ptr) + return SpatialReference(srs_api.clone_srs(srs_ptr)) + except SRSException: + return None + + def _set_srs(self, srs): + "Set the SpatialReference for this geometry." + # Do not have to clone the `SpatialReference` object pointer because + # when it is assigned to this `OGRGeometry` it's internal OGR + # reference count is incremented, and will likewise be released + # (decremented) when this geometry's destructor is called. + if isinstance(srs, SpatialReference): + srs_ptr = srs.ptr + elif isinstance(srs, (int, str)): + sr = SpatialReference(srs) + srs_ptr = sr.ptr + elif srs is None: + srs_ptr = None + else: + raise TypeError( + "Cannot assign spatial reference with object of type: %s" % type(srs) + ) + capi.assign_srs(self.ptr, srs_ptr) + + srs = property(_get_srs, _set_srs) + + # The SRID property + def _get_srid(self): + srs = self.srs + if srs: + return srs.srid + return None + + def _set_srid(self, srid): + if isinstance(srid, int) or srid is None: + self.srs = srid + else: + raise TypeError("SRID must be set with an integer.") + + srid = property(_get_srid, _set_srid) + + # #### Output Methods #### + def _geos_ptr(self): + from django.contrib.gis.geos import GEOSGeometry + + return GEOSGeometry._from_wkb(self.wkb) + + @property + def geos(self): + "Return a GEOSGeometry object from this OGRGeometry." + from django.contrib.gis.geos import GEOSGeometry + + return GEOSGeometry(self._geos_ptr(), self.srid) + + @property + def gml(self): + "Return the GML representation of the Geometry." + return capi.to_gml(self.ptr) + + @property + def hex(self): + "Return the hexadecimal representation of the WKB (a string)." + return b2a_hex(self.wkb).upper() + + @property + def json(self): + """ + Return the GeoJSON representation of this Geometry. + """ + return capi.to_json(self.ptr) + + geojson = json + + @property + def kml(self): + "Return the KML representation of the Geometry." + return capi.to_kml(self.ptr, None) + + @property + def wkb_size(self): + "Return the size of the WKB buffer." + return capi.get_wkbsize(self.ptr) + + @property + def wkb(self): + "Return the WKB representation of the Geometry." + if sys.byteorder == "little": + byteorder = 1 # wkbNDR (from ogr_core.h) + else: + byteorder = 0 # wkbXDR + sz = self.wkb_size + # Creating the unsigned character buffer, and passing it in by reference. + buf = (c_ubyte * sz)() + capi.to_wkb(self.ptr, byteorder, byref(buf)) + # Returning a buffer of the string at the pointer. + return memoryview(string_at(buf, sz)) + + @property + def wkt(self): + "Return the WKT representation of the Geometry." + return capi.to_wkt(self.ptr, byref(c_char_p())) + + @property + def ewkt(self): + "Return the EWKT representation of the Geometry." + srs = self.srs + if srs and srs.srid: + return "SRID=%s;%s" % (srs.srid, self.wkt) + else: + return self.wkt + + # #### Geometry Methods #### + def clone(self): + "Clone this OGR Geometry." + return OGRGeometry(capi.clone_geom(self.ptr), self.srs) + + def close_rings(self): + """ + If there are any rings within this geometry that have not been + closed, this routine will do so by adding the starting point at the + end. + """ + # Closing the open rings. + capi.geom_close_rings(self.ptr) + + def transform(self, coord_trans, clone=False): + """ + Transform this geometry to a different spatial reference system. + May take a CoordTransform object, a SpatialReference object, string + WKT or PROJ, and/or an integer SRID. By default, return nothing + and transform the geometry in-place. However, if the `clone` keyword is + set, return a transformed clone of this geometry. + """ + if clone: + klone = self.clone() + klone.transform(coord_trans) + return klone + + # Depending on the input type, use the appropriate OGR routine + # to perform the transformation. + if isinstance(coord_trans, CoordTransform): + capi.geom_transform(self.ptr, coord_trans.ptr) + elif isinstance(coord_trans, SpatialReference): + capi.geom_transform_to(self.ptr, coord_trans.ptr) + elif isinstance(coord_trans, (int, str)): + sr = SpatialReference(coord_trans) + capi.geom_transform_to(self.ptr, sr.ptr) + else: + raise TypeError( + "Transform only accepts CoordTransform, " + "SpatialReference, string, and integer objects." + ) + + # #### Topology Methods #### + def _topology(self, func, other): + """A generalized function for topology operations, takes a GDAL function and + the other geometry to perform the operation on.""" + if not isinstance(other, OGRGeometry): + raise TypeError( + "Must use another OGRGeometry object for topology operations!" + ) + + # Returning the output of the given function with the other geometry's + # pointer. + return func(self.ptr, other.ptr) + + def intersects(self, other): + "Return True if this geometry intersects with the other." + return self._topology(capi.ogr_intersects, other) + + def equals(self, other): + "Return True if this geometry is equivalent to the other." + return self._topology(capi.ogr_equals, other) + + def disjoint(self, other): + "Return True if this geometry and the other are spatially disjoint." + return self._topology(capi.ogr_disjoint, other) + + def touches(self, other): + "Return True if this geometry touches the other." + return self._topology(capi.ogr_touches, other) + + def crosses(self, other): + "Return True if this geometry crosses the other." + return self._topology(capi.ogr_crosses, other) + + def within(self, other): + "Return True if this geometry is within the other." + return self._topology(capi.ogr_within, other) + + def contains(self, other): + "Return True if this geometry contains the other." + return self._topology(capi.ogr_contains, other) + + def overlaps(self, other): + "Return True if this geometry overlaps the other." + return self._topology(capi.ogr_overlaps, other) + + # #### Geometry-generation Methods #### + def _geomgen(self, gen_func, other=None): + "A helper routine for the OGR routines that generate geometries." + if isinstance(other, OGRGeometry): + return OGRGeometry(gen_func(self.ptr, other.ptr), self.srs) + else: + return OGRGeometry(gen_func(self.ptr), self.srs) + + @property + def boundary(self): + "Return the boundary of this geometry." + return self._geomgen(capi.get_boundary) + + @property + def convex_hull(self): + """ + Return the smallest convex Polygon that contains all the points in + this Geometry. + """ + return self._geomgen(capi.geom_convex_hull) + + def difference(self, other): + """ + Return a new geometry consisting of the region which is the difference + of this geometry and the other. + """ + return self._geomgen(capi.geom_diff, other) + + def intersection(self, other): + """ + Return a new geometry consisting of the region of intersection of this + geometry and the other. + """ + return self._geomgen(capi.geom_intersection, other) + + def sym_difference(self, other): + """ + Return a new geometry which is the symmetric difference of this + geometry and the other. + """ + return self._geomgen(capi.geom_sym_diff, other) + + def union(self, other): + """ + Return a new geometry consisting of the region which is the union of + this geometry and the other. + """ + return self._geomgen(capi.geom_union, other) + + +# The subclasses for OGR Geometry. +class Point(OGRGeometry): + def _geos_ptr(self): + from django.contrib.gis import geos + + return geos.Point._create_empty() if self.empty else super()._geos_ptr() + + @classmethod + def _create_empty(cls): + return capi.create_geom(OGRGeomType("point").num) + + @property + def x(self): + "Return the X coordinate for this Point." + return capi.getx(self.ptr, 0) + + @property + def y(self): + "Return the Y coordinate for this Point." + return capi.gety(self.ptr, 0) + + @property + def z(self): + "Return the Z coordinate for this Point." + if self.coord_dim == 3: + return capi.getz(self.ptr, 0) + + @property + def tuple(self): + "Return the tuple of this point." + if self.coord_dim == 2: + return (self.x, self.y) + elif self.coord_dim == 3: + return (self.x, self.y, self.z) + + coords = tuple + + +class LineString(OGRGeometry): + def __getitem__(self, index): + "Return the Point at the given index." + if 0 <= index < self.point_count: + x, y, z = c_double(), c_double(), c_double() + capi.get_point(self.ptr, index, byref(x), byref(y), byref(z)) + dim = self.coord_dim + if dim == 1: + return (x.value,) + elif dim == 2: + return (x.value, y.value) + elif dim == 3: + return (x.value, y.value, z.value) + else: + raise IndexError( + "Index out of range when accessing points of a line string: %s." % index + ) + + def __len__(self): + "Return the number of points in the LineString." + return self.point_count + + @property + def tuple(self): + "Return the tuple representation of this LineString." + return tuple(self[i] for i in range(len(self))) + + coords = tuple + + def _listarr(self, func): + """ + Internal routine that returns a sequence (list) corresponding with + the given function. + """ + return [func(self.ptr, i) for i in range(len(self))] + + @property + def x(self): + "Return the X coordinates in a list." + return self._listarr(capi.getx) + + @property + def y(self): + "Return the Y coordinates in a list." + return self._listarr(capi.gety) + + @property + def z(self): + "Return the Z coordinates in a list." + if self.coord_dim == 3: + return self._listarr(capi.getz) + + +# LinearRings are used in Polygons. +class LinearRing(LineString): + pass + + +class Polygon(OGRGeometry): + def __len__(self): + "Return the number of interior rings in this Polygon." + return self.geom_count + + def __getitem__(self, index): + "Get the ring at the specified index." + if 0 <= index < self.geom_count: + return OGRGeometry( + capi.clone_geom(capi.get_geom_ref(self.ptr, index)), self.srs + ) + else: + raise IndexError( + "Index out of range when accessing rings of a polygon: %s." % index + ) + + # Polygon Properties + @property + def shell(self): + "Return the shell of this Polygon." + return self[0] # First ring is the shell + + exterior_ring = shell + + @property + def tuple(self): + "Return a tuple of LinearRing coordinate tuples." + return tuple(self[i].tuple for i in range(self.geom_count)) + + coords = tuple + + @property + def point_count(self): + "Return the number of Points in this Polygon." + # Summing up the number of points in each ring of the Polygon. + return sum(self[i].point_count for i in range(self.geom_count)) + + @property + def centroid(self): + "Return the centroid (a Point) of this Polygon." + # The centroid is a Point, create a geometry for this. + p = OGRGeometry(OGRGeomType("Point")) + capi.get_centroid(self.ptr, p.ptr) + return p + + +# Geometry Collection base class. +class GeometryCollection(OGRGeometry): + "The Geometry Collection class." + + def __getitem__(self, index): + "Get the Geometry at the specified index." + if 0 <= index < self.geom_count: + return OGRGeometry( + capi.clone_geom(capi.get_geom_ref(self.ptr, index)), self.srs + ) + else: + raise IndexError( + "Index out of range when accessing geometry in a collection: %s." + % index + ) + + def __len__(self): + "Return the number of geometries in this Geometry Collection." + return self.geom_count + + def add(self, geom): + "Add the geometry to this Geometry Collection." + if isinstance(geom, OGRGeometry): + if isinstance(geom, self.__class__): + for g in geom: + capi.add_geom(self.ptr, g.ptr) + else: + capi.add_geom(self.ptr, geom.ptr) + elif isinstance(geom, str): + tmp = OGRGeometry(geom) + capi.add_geom(self.ptr, tmp.ptr) + else: + raise GDALException("Must add an OGRGeometry.") + + @property + def point_count(self): + "Return the number of Points in this Geometry Collection." + # Summing up the number of points in each geometry in this collection + return sum(self[i].point_count for i in range(self.geom_count)) + + @property + def tuple(self): + "Return a tuple representation of this Geometry Collection." + return tuple(self[i].tuple for i in range(self.geom_count)) + + coords = tuple + + +# Multiple Geometry types. +class MultiPoint(GeometryCollection): + pass + + +class MultiLineString(GeometryCollection): + pass + + +class MultiPolygon(GeometryCollection): + pass + + +# Class mapping dictionary (using the OGRwkbGeometryType as the key) +GEO_CLASSES = { + 1: Point, + 2: LineString, + 3: Polygon, + 4: MultiPoint, + 5: MultiLineString, + 6: MultiPolygon, + 7: GeometryCollection, + 101: LinearRing, + 1 + OGRGeomType.wkb25bit: Point, + 2 + OGRGeomType.wkb25bit: LineString, + 3 + OGRGeomType.wkb25bit: Polygon, + 4 + OGRGeomType.wkb25bit: MultiPoint, + 5 + OGRGeomType.wkb25bit: MultiLineString, + 6 + OGRGeomType.wkb25bit: MultiPolygon, + 7 + OGRGeomType.wkb25bit: GeometryCollection, +} diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/geomtype.py b/venv/Lib/site-packages/django/contrib/gis/gdal/geomtype.py new file mode 100644 index 000000000..8b77cafa3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/geomtype.py @@ -0,0 +1,95 @@ +from django.contrib.gis.gdal.error import GDALException + + +class OGRGeomType: + "Encapsulate OGR Geometry Types." + + wkb25bit = -2147483648 + + # Dictionary of acceptable OGRwkbGeometryType s and their string names. + _types = { + 0: "Unknown", + 1: "Point", + 2: "LineString", + 3: "Polygon", + 4: "MultiPoint", + 5: "MultiLineString", + 6: "MultiPolygon", + 7: "GeometryCollection", + 100: "None", + 101: "LinearRing", + 102: "PointZ", + 1 + wkb25bit: "Point25D", + 2 + wkb25bit: "LineString25D", + 3 + wkb25bit: "Polygon25D", + 4 + wkb25bit: "MultiPoint25D", + 5 + wkb25bit: "MultiLineString25D", + 6 + wkb25bit: "MultiPolygon25D", + 7 + wkb25bit: "GeometryCollection25D", + } + # Reverse type dictionary, keyed by lowercase of the name. + _str_types = {v.lower(): k for k, v in _types.items()} + + def __init__(self, type_input): + "Figure out the correct OGR Type based upon the input." + if isinstance(type_input, OGRGeomType): + num = type_input.num + elif isinstance(type_input, str): + type_input = type_input.lower() + if type_input == "geometry": + type_input = "unknown" + num = self._str_types.get(type_input) + if num is None: + raise GDALException('Invalid OGR String Type "%s"' % type_input) + elif isinstance(type_input, int): + if type_input not in self._types: + raise GDALException("Invalid OGR Integer Type: %d" % type_input) + num = type_input + else: + raise TypeError("Invalid OGR input type given.") + + # Setting the OGR geometry type number. + self.num = num + + def __str__(self): + "Return the value of the name property." + return self.name + + def __eq__(self, other): + """ + Do an equivalence test on the OGR type with the given + other OGRGeomType, the short-hand string, or the integer. + """ + if isinstance(other, OGRGeomType): + return self.num == other.num + elif isinstance(other, str): + return self.name.lower() == other.lower() + elif isinstance(other, int): + return self.num == other + else: + return False + + @property + def name(self): + "Return a short-hand string form of the OGR Geometry type." + return self._types[self.num] + + @property + def django(self): + "Return the Django GeometryField for this OGR Type." + s = self.name.replace("25D", "") + if s in ("LinearRing", "None"): + return None + elif s == "Unknown": + s = "Geometry" + elif s == "PointZ": + s = "Point" + return s + "Field" + + def to_multi(self): + """ + Transform Point, LineString, Polygon, and their 25D equivalents + to their Multi... counterpart. + """ + if self.name.startswith(("Point", "LineString", "Polygon")): + self.num += 3 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/layer.py b/venv/Lib/site-packages/django/contrib/gis/gdal/layer.py new file mode 100644 index 000000000..1afa0469f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/layer.py @@ -0,0 +1,234 @@ +from ctypes import byref, c_double + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope +from django.contrib.gis.gdal.error import GDALException, SRSException +from django.contrib.gis.gdal.feature import Feature +from django.contrib.gis.gdal.field import OGRFieldTypes +from django.contrib.gis.gdal.geometries import OGRGeometry +from django.contrib.gis.gdal.geomtype import OGRGeomType +from django.contrib.gis.gdal.prototypes import ds as capi +from django.contrib.gis.gdal.prototypes import geom as geom_api +from django.contrib.gis.gdal.prototypes import srs as srs_api +from django.contrib.gis.gdal.srs import SpatialReference +from django.utils.encoding import force_bytes, force_str + + +# For more information, see the OGR C API source code: +# https://gdal.org/api/vector_c_api.html +# +# The OGR_L_* routines are relevant here. +class Layer(GDALBase): + """ + A class that wraps an OGR Layer, needs to be instantiated from a DataSource + object. + """ + + def __init__(self, layer_ptr, ds): + """ + Initialize on an OGR C pointer to the Layer and the `DataSource` object + that owns this layer. The `DataSource` object is required so that a + reference to it is kept with this Layer. This prevents garbage + collection of the `DataSource` while this Layer is still active. + """ + if not layer_ptr: + raise GDALException("Cannot create Layer, invalid pointer given") + self.ptr = layer_ptr + self._ds = ds + self._ldefn = capi.get_layer_defn(self._ptr) + # Does the Layer support random reading? + self._random_read = self.test_capability(b"RandomRead") + + def __getitem__(self, index): + "Get the Feature at the specified index." + if isinstance(index, int): + # An integer index was given -- we cannot do a check based on the + # number of features because the beginning and ending feature IDs + # are not guaranteed to be 0 and len(layer)-1, respectively. + if index < 0: + raise IndexError("Negative indices are not allowed on OGR Layers.") + return self._make_feature(index) + elif isinstance(index, slice): + # A slice was given + start, stop, stride = index.indices(self.num_feat) + return [self._make_feature(fid) for fid in range(start, stop, stride)] + else: + raise TypeError( + "Integers and slices may only be used when indexing OGR Layers." + ) + + def __iter__(self): + "Iterate over each Feature in the Layer." + # ResetReading() must be called before iteration is to begin. + capi.reset_reading(self._ptr) + for i in range(self.num_feat): + yield Feature(capi.get_next_feature(self._ptr), self) + + def __len__(self): + "The length is the number of features." + return self.num_feat + + def __str__(self): + "The string name of the layer." + return self.name + + def _make_feature(self, feat_id): + """ + Helper routine for __getitem__ that constructs a Feature from the given + Feature ID. If the OGR Layer does not support random-access reading, + then each feature of the layer will be incremented through until the + a Feature is found matching the given feature ID. + """ + if self._random_read: + # If the Layer supports random reading, return. + try: + return Feature(capi.get_feature(self.ptr, feat_id), self) + except GDALException: + pass + else: + # Random access isn't supported, have to increment through + # each feature until the given feature ID is encountered. + for feat in self: + if feat.fid == feat_id: + return feat + # Should have returned a Feature, raise an IndexError. + raise IndexError("Invalid feature id: %s." % feat_id) + + # #### Layer properties #### + @property + def extent(self): + "Return the extent (an Envelope) of this layer." + env = OGREnvelope() + capi.get_extent(self.ptr, byref(env), 1) + return Envelope(env) + + @property + def name(self): + "Return the name of this layer in the Data Source." + name = capi.get_fd_name(self._ldefn) + return force_str(name, self._ds.encoding, strings_only=True) + + @property + def num_feat(self, force=1): + "Return the number of features in the Layer." + return capi.get_feature_count(self.ptr, force) + + @property + def num_fields(self): + "Return the number of fields in the Layer." + return capi.get_field_count(self._ldefn) + + @property + def geom_type(self): + "Return the geometry type (OGRGeomType) of the Layer." + return OGRGeomType(capi.get_fd_geom_type(self._ldefn)) + + @property + def srs(self): + "Return the Spatial Reference used in this Layer." + try: + ptr = capi.get_layer_srs(self.ptr) + return SpatialReference(srs_api.clone_srs(ptr)) + except SRSException: + return None + + @property + def fields(self): + """ + Return a list of string names corresponding to each of the Fields + available in this Layer. + """ + return [ + force_str( + capi.get_field_name(capi.get_field_defn(self._ldefn, i)), + self._ds.encoding, + strings_only=True, + ) + for i in range(self.num_fields) + ] + + @property + def field_types(self): + """ + Return a list of the types of fields in this Layer. For example, + return the list [OFTInteger, OFTReal, OFTString] for an OGR layer that + has an integer, a floating-point, and string fields. + """ + return [ + OGRFieldTypes[capi.get_field_type(capi.get_field_defn(self._ldefn, i))] + for i in range(self.num_fields) + ] + + @property + def field_widths(self): + "Return a list of the maximum field widths for the features." + return [ + capi.get_field_width(capi.get_field_defn(self._ldefn, i)) + for i in range(self.num_fields) + ] + + @property + def field_precisions(self): + "Return the field precisions for the features." + return [ + capi.get_field_precision(capi.get_field_defn(self._ldefn, i)) + for i in range(self.num_fields) + ] + + def _get_spatial_filter(self): + try: + return OGRGeometry(geom_api.clone_geom(capi.get_spatial_filter(self.ptr))) + except GDALException: + return None + + def _set_spatial_filter(self, filter): + if isinstance(filter, OGRGeometry): + capi.set_spatial_filter(self.ptr, filter.ptr) + elif isinstance(filter, (tuple, list)): + if not len(filter) == 4: + raise ValueError("Spatial filter list/tuple must have 4 elements.") + # Map c_double onto params -- if a bad type is passed in it + # will be caught here. + xmin, ymin, xmax, ymax = map(c_double, filter) + capi.set_spatial_filter_rect(self.ptr, xmin, ymin, xmax, ymax) + elif filter is None: + capi.set_spatial_filter(self.ptr, None) + else: + raise TypeError( + "Spatial filter must be either an OGRGeometry instance, a 4-tuple, or " + "None." + ) + + spatial_filter = property(_get_spatial_filter, _set_spatial_filter) + + # #### Layer Methods #### + def get_fields(self, field_name): + """ + Return a list containing the given field name for every Feature + in the Layer. + """ + if field_name not in self.fields: + raise GDALException("invalid field name: %s" % field_name) + return [feat.get(field_name) for feat in self] + + def get_geoms(self, geos=False): + """ + Return a list containing the OGRGeometry for every Feature in + the Layer. + """ + if geos: + from django.contrib.gis.geos import GEOSGeometry + + return [GEOSGeometry(feat.geom.wkb) for feat in self] + else: + return [feat.geom for feat in self] + + def test_capability(self, capability): + """ + Return a bool indicating whether the this Layer supports the given + capability (a string). Valid capability strings include: + 'RandomRead', 'SequentialWrite', 'RandomWrite', 'FastSpatialFilter', + 'FastFeatureCount', 'FastGetExtent', 'CreateField', 'Transactions', + 'DeleteFeature', and 'FastSetNextByIndex'. + """ + return bool(capi.test_capability(self.ptr, force_bytes(capability))) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/libgdal.py b/venv/Lib/site-packages/django/contrib/gis/gdal/libgdal.py new file mode 100644 index 000000000..6a7b7867c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/libgdal.py @@ -0,0 +1,140 @@ +import logging +import os +import re +from ctypes import CDLL, CFUNCTYPE, c_char_p, c_int +from ctypes.util import find_library + +from django.contrib.gis.gdal.error import GDALException +from django.core.exceptions import ImproperlyConfigured + +logger = logging.getLogger("django.contrib.gis") + +# Custom library path set? +try: + from django.conf import settings + + lib_path = settings.GDAL_LIBRARY_PATH +except (AttributeError, ImportError, ImproperlyConfigured, OSError): + lib_path = None + +if lib_path: + lib_names = None +elif os.name == "nt": + # Windows NT shared libraries + lib_names = [ + "gdal303", + "gdal302", + "gdal301", + "gdal300", + "gdal204", + "gdal203", + "gdal202", + "gdal201", + "gdal20", + ] +elif os.name == "posix": + # *NIX library names. + lib_names = [ + "gdal", + "GDAL", + "gdal3.3.0", + "gdal3.2.0", + "gdal3.1.0", + "gdal3.0.0", + "gdal2.4.0", + "gdal2.3.0", + "gdal2.2.0", + "gdal2.1.0", + "gdal2.0.0", + ] +else: + raise ImproperlyConfigured('GDAL is unsupported on OS "%s".' % os.name) + +# Using the ctypes `find_library` utility to find the +# path to the GDAL library from the list of library names. +if lib_names: + for lib_name in lib_names: + lib_path = find_library(lib_name) + if lib_path is not None: + break + +if lib_path is None: + raise ImproperlyConfigured( + 'Could not find the GDAL library (tried "%s"). Is GDAL installed? ' + "If it is, try setting GDAL_LIBRARY_PATH in your settings." + % '", "'.join(lib_names) + ) + +# This loads the GDAL/OGR C library +lgdal = CDLL(lib_path) + +# On Windows, the GDAL binaries have some OSR routines exported with +# STDCALL, while others are not. Thus, the library will also need to +# be loaded up as WinDLL for said OSR functions that require the +# different calling convention. +if os.name == "nt": + from ctypes import WinDLL + + lwingdal = WinDLL(lib_path) + + +def std_call(func): + """ + Return the correct STDCALL function for certain OSR routines on Win32 + platforms. + """ + if os.name == "nt": + return lwingdal[func] + else: + return lgdal[func] + + +# #### Version-information functions. #### + +# Return GDAL library version information with the given key. +_version_info = std_call("GDALVersionInfo") +_version_info.argtypes = [c_char_p] +_version_info.restype = c_char_p + + +def gdal_version(): + "Return only the GDAL version number information." + return _version_info(b"RELEASE_NAME") + + +def gdal_full_version(): + "Return the full GDAL version information." + return _version_info(b"") + + +def gdal_version_info(): + ver = gdal_version() + m = re.match(rb"^(?P\d+)\.(?P\d+)(?:\.(?P\d+))?", ver) + if not m: + raise GDALException('Could not parse GDAL version string "%s"' % ver) + major, minor, subminor = m.groups() + return (int(major), int(minor), subminor and int(subminor)) + + +GDAL_VERSION = gdal_version_info() + +# Set library error handling so as errors are logged +CPLErrorHandler = CFUNCTYPE(None, c_int, c_int, c_char_p) + + +def err_handler(error_class, error_number, message): + logger.error("GDAL_ERROR %d: %s", error_number, message) + + +err_handler = CPLErrorHandler(err_handler) + + +def function(name, args, restype): + func = std_call(name) + func.argtypes = args + func.restype = restype + return func + + +set_error_handler = function("CPLSetErrorHandler", [CPLErrorHandler], CPLErrorHandler) +set_error_handler(err_handler) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__init__.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30b6e0232c8e0b477ee69c66b5028ae3e4289130 GIT binary patch literal 208 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 E0XL_$UjP6A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f9df347de586f006777ababc1cb9cad3d71a7b6 GIT binary patch literal 4539 zcmbtX&2QYs73bG-SJbX7OSWUjU*nI&VI8gd;o3>+Iw_n;4G<`StrRFLl;(1%731Y{ zJHxdrVSBO>`%<9ip4#4o{znAbOHa8K@Tont{k<8|yOJ%yKnd*Z_i3YC&NTU1vV7BqeQZi$ctQy+quA=#AEB9{_G1T@^O(46WR5? zgZm7>SvJ4=^7D<&&+e6O9QN{jP`2VQ-ibswB8lhY-XJL(ahMK^vZ?-V-k_C7dCJ3) zZfNIp8YH5e)4QdR^$OlfpDf$eiuy=Q=FMIvZa%?JwlO3|U;;Z9H{oTgobU5! zP+7g<+hr>Zhf$VP7^)bQ`|-H*1umWhyC_r_92Tc76f zI7^0w+*(hIpO1T6YpIaM%2y))CW(u!N6GNf))#4SOQuD#GK%7dQ9qGe{F`Xl&sQnN zBJHjAQ@KidtxkivTE!WG?~Zl_(!)4OCQ(kb498S68?lYs`XbrF?=F5X-o`L7Cq`%# zG+Gl&%ug&x_QZfA%)JlRYam56lxn1Dpoydy3!pAygq0*3vPaQioOFGsY#{~;a)Q2D zHbo-owro+H2^afz>CoE*sUgnM@Y03iG(9sJRash+(!b0tdE0{VEXL17h zoqqBr2JMLFhV1BA7l?7_P@IbfB6Z4z}pZT-%kyj=6`y>C5+YsN1}Az&RzniOJ} zB`F9-u-+~c$#x==VGO##1?J(Y0OAL`?7eiGXb3w9Kp`bKdzkD#&IM=SHzYbMa<(bP ziQiQZAFz(BA|Dgtl{*S!LKa%jjVI21W8d8HO+ju#^11-tcu**xgSg;liD~7!H!EE6H9rg}M3eqkl- z9|5aVR~ti$Yh#oh=jrwkHa$F90rN9jW;9&K5R*FfMRKj4T*S?RoYX|~@f)klZr)hw zrNv>TZLM?@uUAU%TQe>{q;?x>-@H*NzJVts*{U;2kmrw9{}fhd)t_b&eE!G7nR2-L zva0y9ehSWiS+v<>B#e5NGD5H2WdN!!8i$#-s(h3m;M*_P@2N-ck0PqN>|UL6?EbDS zl1yh0I7iXV6rmIdjZmV=S0amgS~=)zEK7RMbzM!nUECaCU2>GM}4& zHfe@Pe8abdO0vs%4DvkwN|z_pf9yNr9o%Ycyh{r<=waVh)LXXHCbT5_c?BEI4QK|a zlTmHU4jy|!4p}l=rUwSz^Jm+c%577on0>a6!!)_bP!$J|$h0gd{cq3`86kd5gHq>5 zBq^PiU-QujtGYZut(NIpixv@xxP|%e{)_9#u!&V{@$Kjq`l9~_#=5rz*=rcrAZEJx zRL$wMXVCp0+ZG`INH?SvxHW1wkq!@(nGe|ZAnGIOc^adymF)3OqKXVMd#l-yE_B)L!b6@_;H8m8jQLsH5>~KDTD@YgG6(Ud3~Nnx{d z;A0Z=8kH@e(su1d2dFf~ZOm`RAfUTj~s0&_oDB}6>S`}IiL84C-eC#A@&@?*)RIoph1< zblRxP{WOVHmq!N)oyoK1UKLN3#L7q0D9x)AlWuPRK=u+NI}O#`+Gy+?_dm#7YDA7K z_L4Y#wj5Cdf1o5?d5s?`T}qTZh4-Zxd?XMEONJ%c|!q_5X?or9M{> zm#cHd$MmwR7<_weZ4ISq1B3Vg6Kg0gn`^$g>0c_FA&$c_4uY<(^Fk>?bx>=g4gm@y zsw*M)mU9Y|IMqmXG6=5gLtYmoM~A#F4tZTVSF{|GohfSdQ56^g^Cx! zN6`5~Glj}xIv|NFG*Hv1S~Jz)2rA*KDySq>C{y7R%JeBxr*LiE)(77^ba0jogJWEE e+UEP#V#jm5Id9%O-I{APy|%aHo%fa&=KcqiEiuXf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53740b6b7ac84bb731f7adcd019bb3c946313e29 GIT binary patch literal 4096 zcma)8OLH5?5ymba1VI1Bs>(S(230xbq+6`-)B{OV>=yF_78my5tSu>esvq_7!k~ub)%(MAqfh~Yeg-<;zuti?w)9_y6H9iCH zWiczJkFN+fbe_6wMa%=bD$1e5>%766UzgY$#CubeLC4Lx*TfQNe&?yf-XiKcP^(0} z4b(ei^6^;}69GtoAoK zzDfAEfN2$E^A_=bhaUMnUx1Zl#VpA167V;PzeO|0S>F~d@VH~+ zzeARGGym55Ct?mXKD8QmMHA3x7VVM#y*%FgWbOA>x=-l9qC?Vs0J@MzYx@tR@enom zGQaYyK=FT0+%N1rCK}-JkED~WqeJpPS^1ZQJd6HJUVQWdIV(ctC&sXB{dP$!Ae&hZ zxmX4-0(z=PR0z}&Q4vtbM4bQ?6O{m!5+#A^6ZI8PiYN_~ArFH*GpB?f<@m8!1b;)o zj+lDtP-V~f;z6Ok@&fm7yF8k@e{Xm1aBF{54ZPsUS6&|}E(hIMjLLx*r3M+NGU8sp z?Tlvb?d)%*ry`bp0k9m0+>e2121g<|@x)j(HChN{s*R_Oiqg=N1JfUvQ6sZFhBKj% z$r#kYS59lC$8_Um6EhS`W-oAY8TLUM{~Pev%P>4~o)kPdjbL<)3uEy~0oLxGUEP*y zH5A4`WUCVk(rbI|(x~dI&*9XRDYGKL~`@n32AON~}g{PpZT>kxbXxMKuExRRxDK z49^|4h%~M~8!+LcY9C67VZ8xJV=kjCi;@c$Ps9oO^JIe?({o;#ybSIYQ#aa4ig4PrAYVLYrHKvngncyGpj(&hfG zchD9ZtrpI%8`+n!42QImwVSaF{8--tBGYY`vpiq}P%;!2LBYjXP%AjRl9a|v_O62l z6|4s3s$s$21yL&eFDi?v|P?Hz`JwHE(ZB~)Jo)+c>p!4mvLr(YL z{XW?E)+Axk6;?yNiNiGc4lF27prlaW|P~I_+Y(7)m zdfb=F97+;T8JP*^UKW1(*k{sg$9D#C%v$KxgC+xpcSM{_XEW;c zgc4~W*fi;IV2q2gn;JNg;k<!4+)Knnqyz{WjbKVS3PqZR5vKL7U>5PkayV zW@eKIRlKBjQEpVU?m+Q2bP%heJ0GcL7RLr$lM22rvMve6$ZjZ@wi&@qsxk94mq&>n z#|hF6DHR-$ustvIpn3+n1q4vOWUPGf8f7?6CzNftyLv0>n<1-4+7m=AXW@d&aiKP# zVGV1dGir%|ur2C@-kzTbMlq3Eitw`5A$(^{XyL&--l<^gK3>V0!&!7lS2To85#*7P z7VZSAkZ+|}YOxR3h#qexWO(>trt><$SBD>^n$=~faIa;^=3_%it%YVYB(%U*a5K`! z7+yA$=O_zn>#G6Wo~(uwMMm2Vp6^eH0j2ro%wxKDDpc(EZA@~EY)pr80H0$vCSyT8 z^ZGC{M-l8*wEHNdXEVv6@>7jpHdr}0RZNcUcFGkFr9Cxr70&=G&-Rx6*3CLMzws_^ zf17_JrSZr!On?>W_awOTDVYc8P5xm#?)SS#1y+rTX@5~t*} z9M`G*r&(?~O`x-}1r+>1XTInbtEAbY5$!aAm%W?CY{sPhX2}KnsMQ3^C1-`~&zEaO N^n3AZ!Q7SN{{T_Jr~3c^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22d4ae73e95afac047723ec96a16a9096176600e GIT binary patch literal 3800 zcmZ`*OLH5?5ymbS?>7iOWXTfz7Ht#s+m7QnrpQoXl}xEfTCt~4*;?!lz?F7)kl9_v z^i^m7ko+Z7`Q(#tIi!+Q4pO>%1`B|+$>N~<>#uuydZwEYjYc&GKmYvePopQBx!ljF zEdMk?`3nBxGb@+#axCW=o*5XS$;>d%@}b47u)qpokrl%dD;a3d2j#HBDkNJ$HLS53 z$%UXEHdrHUvS!#~t+377VTX0XF6$aOUf~_D=#_pnSqJ2%mYX2AwA|tyUh~S&j7iR` zc-0^CY>jsTsXa4zabi3(S&#HO=+?y0oORv?P6NGwvB8_5HGxqgk4^Guq0TK{)W4-k z3AkHiYhyHsZvt|IGUzC89sebY-_0W4B(F6cu>=uKZjq*<-l7;iLR8e3ujF)_BCKZ- z?~r{%$G|-LwC85Vc!l(>On;U18=3wZMSO`Os6Ah&m^U-V88Vpw$6Hwk%}5R(_Y z+r1pr(A1}Xi>!C9S|PW)ya5&N&m(F6Ht}E4e5{8x$piasV!w)bc4O~QZm+2bn)fbY zug@_+E%4rZ0h@TVxea*klQwXxl!2Uh4KOnZHyP&`eAR(g)j4$Y%A8H1630NmZu>656 zAAtouAvd~}FA4paP&y~i(_R0O>hTHURPV36Pfv5(pZ(xh&(8h09||uGc>i3aF^~Jn zIq$p4v0-mNn#{q53OrY<5PdG! zXbbJ!L}i*tZ9LmHSl*omtc3^O3xX3q@$sOCmbi3(cy?+m{@w$jT@`obrfO2n|HcSrf&>AdS!W9oSy!%3)tj zFIf%kd!BdCi9FUr1v7)|h_eJK?ol)rSq3L`eczt?KP)m;*mu8zsq8yCw&Ja9_ehE- zoF2{zA2TAJ@??Q#CA!bWnRKFfEM)jg5nhP00D0M>$`8l*nkNpvECm2718(SK=D>jn z9Y1;imzC``HytHB%(htptNW)94mi9Vamnf!P#x{)A=|iiR#mI(xT@E@HdvM8G#tUJ zm_Go7^mVZHm9U7OLEABEFF3B+eqRJa9!2o#rV`FiuVib*@mQeiV<$*CBMVeU`7T>- zqR#;jc*3t6H&+6l;x=*OyD=lLeGx)yX}2XKo#}+baKP(63Y`gO6lpI_gnE;IapaVH zk5A56@A2u;p&#%=DZ;OLcrP7~u~`76n+?&X!3u!iM1dbYJ>K4%m28*`u5H7}pa~>R zcqlTD3w$%m$pS9;cw`BdS%rocjFwoIL1%ZoCr&gG1DFdi6Gj8*;K9UmfI%4MeQBi%Mly2 z6JRR6npS-r4t1@3ALCeP+!e5;FAL zpGr#X6?n^|mRH%XSg6?K5HI?D(^b8$_)CVCocFoyQ=@M<(B!s$k$Mi&*y7{(Y!e{YC6Q%ryVZG?) zdj_IKqi0ypyH*>tF8rxa)2I^1G&aD?1g`bMw3;M$QO;vDGv6e+4eM6k%oh#QG$H1% z{Qk>&-tMUAxT^RjWTRr?iaRc16d^PGrC9&5o|{b-eFgt7;H}@-_20?{89p~lY9GwJ Gm;XNl_IaZK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1cdc3be340b94b030ac07f1cab28ffc4cc0b5645 GIT binary patch literal 2853 zcmZ`*NpIUm6c$M>G__b>;y6naHC@%(a+kDC(=?5%IIaN44s0ha20{s%9LcmvjxaNF z;-Kgu=`}wjKc#;`KucsQca{9oZ>DgQK_2yzP5Ki)z)$!SmP8f9(8T%jNz= z=HycZ<`%r_iJ8jtQyx?EuLhPpw9<|-*T)T6oV4{PVp+Y1N*7L^L^u~$)<^)0Nx~ihEMX+-YjYZ zCn!I&*cp)6K_%Uh$>zxFY<9*xF9y~9g6xs>9M5yBZ)TR~c^%HX@YG-ziFymDOGI4; zszE#6h8^JlsnItfqAMhO2V^Gk?*eZJHS~|?g2j7e@%}4|56EJYEYdw6l0`F%?<3+q z&bS5Q7BjBJry#y1h~*QaJ_YJCUIUMHIxmYWm_vLY(kl9%G6?eefd>TFNN_|}ed1>$KG|M3Ma-C$~oRZz(6|nm@%jYI> z-(}n_;+8Y+d+PN$@|34awyARGQSz$aw}T5?x#qImS9NE6>?|RZ5 zj0(ORCK?3?A`IL?(;8J)Z!fR84^}p}IveYwLevkuXk;rLxV{%f&Ejar7m3oY(lSi? zt{CdUP>-sC816*;n04UPSG1Dqn694QRVJ_L5x#+8W)IQ@c-!#4oP$N@e#vP=o7zHb z1x8>#vmiI?@e`*3Pg`x4HI97B54ey&_W*$c%vs|L+|p&#@1#-g0C>)3Iv{R zXm6j>_DsDs@O0=!o4m&*Pki1GJA2&M4KE2AlIx*Nz(bm7ClX+Oc!stEE$yuQPPTJSI_Z63_yE#)sarFy@I?-PKV4Fx=_h z38m7D_oP7Y-2UmZ0#h z!Qsfk2Bcw6g8!Eo)m%YhS>IT6iIz~_gVW{pv7+itRmKVrlTeQh)Ix)|`mF^z1=Oot zFDLzBt5Pz*G+`(UopFvr|#l{#H-()|= zYpc%_E-6Aefg5R%%1Bjksp0}(+#EqyQe!84?5Yb0XQhNcB*KAmZ1RYEinFpz2~w1U zw6!S%R#2@lfby^kjtGo&%AErhv~u}TsP1}$0d#2#ps0EOkWE3+T@Ms^|D~d=`dd5> z?|OSeGDiXF#zdb~hRIk-G(raY)=3WTM4r|>K|EB$?mv=T=qO* z+^pF!?6PgwC+fzuVHy>q zcvQ1&Go_q@V>rgFg*tp|Rt;Xqatza&2Fv5M2>VR= (2, 2): + is_field_set = bool_output(lgdal.OGR_F_IsFieldSetAndNotNull, [c_void_p, c_int]) +else: + is_field_set = bool_output(lgdal.OGR_F_IsFieldSet, [c_void_p, c_int]) +get_field_as_string = const_string_output( + lgdal.OGR_F_GetFieldAsString, [c_void_p, c_int] +) +get_field_index = int_output(lgdal.OGR_F_GetFieldIndex, [c_void_p, c_char_p]) + +# Field Routines +get_field_name = const_string_output(lgdal.OGR_Fld_GetNameRef, [c_void_p]) +get_field_precision = int_output(lgdal.OGR_Fld_GetPrecision, [c_void_p]) +get_field_type = int_output(lgdal.OGR_Fld_GetType, [c_void_p]) +get_field_type_name = const_string_output(lgdal.OGR_GetFieldTypeName, [c_int]) +get_field_width = int_output(lgdal.OGR_Fld_GetWidth, [c_void_p]) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py new file mode 100644 index 000000000..52bb7cb08 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py @@ -0,0 +1,141 @@ +""" + This module houses the error-checking routines used by the GDAL + ctypes prototypes. +""" +from ctypes import c_void_p, string_at + +from django.contrib.gis.gdal.error import GDALException, SRSException, check_err +from django.contrib.gis.gdal.libgdal import lgdal + + +# Helper routines for retrieving pointers and/or values from +# arguments passed in by reference. +def arg_byref(args, offset=-1): + "Return the pointer argument's by-reference value." + return args[offset]._obj.value + + +def ptr_byref(args, offset=-1): + "Return the pointer argument passed in by-reference." + return args[offset]._obj + + +# ### String checking Routines ### +def check_const_string(result, func, cargs, offset=None, cpl=False): + """ + Similar functionality to `check_string`, but does not free the pointer. + """ + if offset: + check_err(result, cpl=cpl) + ptr = ptr_byref(cargs, offset) + return ptr.value + else: + return result + + +def check_string(result, func, cargs, offset=-1, str_result=False): + """ + Check the string output returned from the given function, and free + the string pointer allocated by OGR. The `str_result` keyword + may be used when the result is the string pointer, otherwise + the OGR error code is assumed. The `offset` keyword may be used + to extract the string pointer passed in by-reference at the given + slice offset in the function arguments. + """ + if str_result: + # For routines that return a string. + ptr = result + if not ptr: + s = None + else: + s = string_at(result) + else: + # Error-code return specified. + check_err(result) + ptr = ptr_byref(cargs, offset) + # Getting the string value + s = ptr.value + # Correctly freeing the allocated memory behind GDAL pointer + # with the VSIFree routine. + if ptr: + lgdal.VSIFree(ptr) + return s + + +# ### DataSource, Layer error-checking ### + + +# ### Envelope checking ### +def check_envelope(result, func, cargs, offset=-1): + "Check a function that returns an OGR Envelope by reference." + return ptr_byref(cargs, offset) + + +# ### Geometry error-checking routines ### +def check_geom(result, func, cargs): + "Check a function that returns a geometry." + # OGR_G_Clone may return an integer, even though the + # restype is set to c_void_p + if isinstance(result, int): + result = c_void_p(result) + if not result: + raise GDALException( + 'Invalid geometry pointer returned from "%s".' % func.__name__ + ) + return result + + +def check_geom_offset(result, func, cargs, offset=-1): + "Check the geometry at the given offset in the C parameter list." + check_err(result) + geom = ptr_byref(cargs, offset=offset) + return check_geom(geom, func, cargs) + + +# ### Spatial Reference error-checking routines ### +def check_srs(result, func, cargs): + if isinstance(result, int): + result = c_void_p(result) + if not result: + raise SRSException( + 'Invalid spatial reference pointer returned from "%s".' % func.__name__ + ) + return result + + +# ### Other error-checking routines ### +def check_arg_errcode(result, func, cargs, cpl=False): + """ + The error code is returned in the last argument, by reference. + Check its value with `check_err` before returning the result. + """ + check_err(arg_byref(cargs), cpl=cpl) + return result + + +def check_errcode(result, func, cargs, cpl=False): + """ + Check the error code returned (c_int). + """ + check_err(result, cpl=cpl) + + +def check_pointer(result, func, cargs): + "Make sure the result pointer is valid." + if isinstance(result, int): + result = c_void_p(result) + if result: + return result + else: + raise GDALException('Invalid pointer returned from "%s"' % func.__name__) + + +def check_str_arg(result, func, cargs): + """ + This is for the OSRGet[Angular|Linear]Units functions, which + require that the returned string pointer not be freed. This + returns both the double and string values. + """ + dbl = result + ptr = cargs[-1]._obj + return dbl, ptr.value.decode() diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/generation.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/generation.py new file mode 100644 index 000000000..230e56f66 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/generation.py @@ -0,0 +1,177 @@ +""" + This module contains functions that generate ctypes prototypes for the + GDAL routines. +""" +from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_int64, c_void_p +from functools import partial + +from django.contrib.gis.gdal.prototypes.errcheck import ( + check_arg_errcode, + check_const_string, + check_errcode, + check_geom, + check_geom_offset, + check_pointer, + check_srs, + check_str_arg, + check_string, +) + + +class gdal_char_p(c_char_p): + pass + + +def bool_output(func, argtypes, errcheck=None): + """Generate a ctypes function that returns a boolean value.""" + func.argtypes = argtypes + func.restype = c_bool + if errcheck: + func.errcheck = errcheck + return func + + +def double_output(func, argtypes, errcheck=False, strarg=False, cpl=False): + "Generate a ctypes function that returns a double value." + func.argtypes = argtypes + func.restype = c_double + if errcheck: + func.errcheck = partial(check_arg_errcode, cpl=cpl) + if strarg: + func.errcheck = check_str_arg + return func + + +def geom_output(func, argtypes, offset=None): + """ + Generate a function that returns a Geometry either by reference + or directly (if the return_geom keyword is set to True). + """ + # Setting the argument types + func.argtypes = argtypes + + if not offset: + # When a geometry pointer is directly returned. + func.restype = c_void_p + func.errcheck = check_geom + else: + # Error code returned, geometry is returned by-reference. + func.restype = c_int + + def geomerrcheck(result, func, cargs): + return check_geom_offset(result, func, cargs, offset) + + func.errcheck = geomerrcheck + + return func + + +def int_output(func, argtypes, errcheck=None): + "Generate a ctypes function that returns an integer value." + func.argtypes = argtypes + func.restype = c_int + if errcheck: + func.errcheck = errcheck + return func + + +def int64_output(func, argtypes): + "Generate a ctypes function that returns a 64-bit integer value." + func.argtypes = argtypes + func.restype = c_int64 + return func + + +def srs_output(func, argtypes): + """ + Generate a ctypes prototype for the given function with + the given C arguments that returns a pointer to an OGR + Spatial Reference System. + """ + func.argtypes = argtypes + func.restype = c_void_p + func.errcheck = check_srs + return func + + +def const_string_output(func, argtypes, offset=None, decoding=None, cpl=False): + func.argtypes = argtypes + if offset: + func.restype = c_int + else: + func.restype = c_char_p + + def _check_const(result, func, cargs): + res = check_const_string(result, func, cargs, offset=offset, cpl=cpl) + if res and decoding: + res = res.decode(decoding) + return res + + func.errcheck = _check_const + + return func + + +def string_output(func, argtypes, offset=-1, str_result=False, decoding=None): + """ + Generate a ctypes prototype for the given function with the + given argument types that returns a string from a GDAL pointer. + The `const` flag indicates whether the allocated pointer should + be freed via the GDAL library routine VSIFree -- but only applies + only when `str_result` is True. + """ + func.argtypes = argtypes + if str_result: + # Use subclass of c_char_p so the error checking routine + # can free the memory at the pointer's address. + func.restype = gdal_char_p + else: + # Error code is returned + func.restype = c_int + + # Dynamically defining our error-checking function with the + # given offset. + def _check_str(result, func, cargs): + res = check_string(result, func, cargs, offset=offset, str_result=str_result) + if res and decoding: + res = res.decode(decoding) + return res + + func.errcheck = _check_str + return func + + +def void_output(func, argtypes, errcheck=True, cpl=False): + """ + For functions that don't only return an error code that needs to + be examined. + """ + if argtypes: + func.argtypes = argtypes + if errcheck: + # `errcheck` keyword may be set to False for routines that + # return void, rather than a status code. + func.restype = c_int + func.errcheck = partial(check_errcode, cpl=cpl) + else: + func.restype = None + + return func + + +def voidptr_output(func, argtypes, errcheck=True): + "For functions that return c_void_p." + func.argtypes = argtypes + func.restype = c_void_p + if errcheck: + func.errcheck = check_pointer + return func + + +def chararray_output(func, argtypes, errcheck=True): + """For functions that return a c_char_p array.""" + func.argtypes = argtypes + func.restype = POINTER(c_char_p) + if errcheck: + func.errcheck = check_pointer + return func diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/geom.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/geom.py new file mode 100644 index 000000000..06c2a75f3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/geom.py @@ -0,0 +1,139 @@ +from ctypes import POINTER, c_char_p, c_double, c_int, c_void_p + +from django.contrib.gis.gdal.envelope import OGREnvelope +from django.contrib.gis.gdal.libgdal import lgdal +from django.contrib.gis.gdal.prototypes.errcheck import check_envelope +from django.contrib.gis.gdal.prototypes.generation import ( + const_string_output, + double_output, + geom_output, + int_output, + srs_output, + string_output, + void_output, +) + + +# ### Generation routines specific to this module ### +def env_func(f, argtypes): + "For getting OGREnvelopes." + f.argtypes = argtypes + f.restype = None + f.errcheck = check_envelope + return f + + +def pnt_func(f): + "For accessing point information." + return double_output(f, [c_void_p, c_int]) + + +def topology_func(f): + f.argtypes = [c_void_p, c_void_p] + f.restype = c_int + f.errcheck = lambda result, func, cargs: bool(result) + return f + + +# ### OGR_G ctypes function prototypes ### + +# GeoJSON routines. +from_json = geom_output(lgdal.OGR_G_CreateGeometryFromJson, [c_char_p]) +to_json = string_output( + lgdal.OGR_G_ExportToJson, [c_void_p], str_result=True, decoding="ascii" +) +to_kml = string_output( + lgdal.OGR_G_ExportToKML, [c_void_p, c_char_p], str_result=True, decoding="ascii" +) + +# GetX, GetY, GetZ all return doubles. +getx = pnt_func(lgdal.OGR_G_GetX) +gety = pnt_func(lgdal.OGR_G_GetY) +getz = pnt_func(lgdal.OGR_G_GetZ) + +# Geometry creation routines. +from_wkb = geom_output( + lgdal.OGR_G_CreateFromWkb, [c_char_p, c_void_p, POINTER(c_void_p), c_int], offset=-2 +) +from_wkt = geom_output( + lgdal.OGR_G_CreateFromWkt, + [POINTER(c_char_p), c_void_p, POINTER(c_void_p)], + offset=-1, +) +from_gml = geom_output(lgdal.OGR_G_CreateFromGML, [c_char_p]) +create_geom = geom_output(lgdal.OGR_G_CreateGeometry, [c_int]) +clone_geom = geom_output(lgdal.OGR_G_Clone, [c_void_p]) +get_geom_ref = geom_output(lgdal.OGR_G_GetGeometryRef, [c_void_p, c_int]) +get_boundary = geom_output(lgdal.OGR_G_GetBoundary, [c_void_p]) +geom_convex_hull = geom_output(lgdal.OGR_G_ConvexHull, [c_void_p]) +geom_diff = geom_output(lgdal.OGR_G_Difference, [c_void_p, c_void_p]) +geom_intersection = geom_output(lgdal.OGR_G_Intersection, [c_void_p, c_void_p]) +geom_sym_diff = geom_output(lgdal.OGR_G_SymmetricDifference, [c_void_p, c_void_p]) +geom_union = geom_output(lgdal.OGR_G_Union, [c_void_p, c_void_p]) + +# Geometry modification routines. +add_geom = void_output(lgdal.OGR_G_AddGeometry, [c_void_p, c_void_p]) +import_wkt = void_output(lgdal.OGR_G_ImportFromWkt, [c_void_p, POINTER(c_char_p)]) + +# Destroys a geometry +destroy_geom = void_output(lgdal.OGR_G_DestroyGeometry, [c_void_p], errcheck=False) + +# Geometry export routines. +to_wkb = void_output( + lgdal.OGR_G_ExportToWkb, None, errcheck=True +) # special handling for WKB. +to_wkt = string_output( + lgdal.OGR_G_ExportToWkt, [c_void_p, POINTER(c_char_p)], decoding="ascii" +) +to_gml = string_output( + lgdal.OGR_G_ExportToGML, [c_void_p], str_result=True, decoding="ascii" +) +get_wkbsize = int_output(lgdal.OGR_G_WkbSize, [c_void_p]) + +# Geometry spatial-reference related routines. +assign_srs = void_output( + lgdal.OGR_G_AssignSpatialReference, [c_void_p, c_void_p], errcheck=False +) +get_geom_srs = srs_output(lgdal.OGR_G_GetSpatialReference, [c_void_p]) + +# Geometry properties +get_area = double_output(lgdal.OGR_G_GetArea, [c_void_p]) +get_centroid = void_output(lgdal.OGR_G_Centroid, [c_void_p, c_void_p]) +get_dims = int_output(lgdal.OGR_G_GetDimension, [c_void_p]) +get_coord_dim = int_output(lgdal.OGR_G_GetCoordinateDimension, [c_void_p]) +set_coord_dim = void_output( + lgdal.OGR_G_SetCoordinateDimension, [c_void_p, c_int], errcheck=False +) +is_empty = int_output( + lgdal.OGR_G_IsEmpty, [c_void_p], errcheck=lambda result, func, cargs: bool(result) +) + +get_geom_count = int_output(lgdal.OGR_G_GetGeometryCount, [c_void_p]) +get_geom_name = const_string_output( + lgdal.OGR_G_GetGeometryName, [c_void_p], decoding="ascii" +) +get_geom_type = int_output(lgdal.OGR_G_GetGeometryType, [c_void_p]) +get_point_count = int_output(lgdal.OGR_G_GetPointCount, [c_void_p]) +get_point = void_output( + lgdal.OGR_G_GetPoint, + [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double)], + errcheck=False, +) +geom_close_rings = void_output(lgdal.OGR_G_CloseRings, [c_void_p], errcheck=False) + +# Topology routines. +ogr_contains = topology_func(lgdal.OGR_G_Contains) +ogr_crosses = topology_func(lgdal.OGR_G_Crosses) +ogr_disjoint = topology_func(lgdal.OGR_G_Disjoint) +ogr_equals = topology_func(lgdal.OGR_G_Equals) +ogr_intersects = topology_func(lgdal.OGR_G_Intersects) +ogr_overlaps = topology_func(lgdal.OGR_G_Overlaps) +ogr_touches = topology_func(lgdal.OGR_G_Touches) +ogr_within = topology_func(lgdal.OGR_G_Within) + +# Transformation routines. +geom_transform = void_output(lgdal.OGR_G_Transform, [c_void_p, c_void_p]) +geom_transform_to = void_output(lgdal.OGR_G_TransformTo, [c_void_p, c_void_p]) + +# For retrieving the envelope of the geometry. +get_envelope = env_func(lgdal.OGR_G_GetEnvelope, [c_void_p, POINTER(OGREnvelope)]) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/raster.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/raster.py new file mode 100644 index 000000000..59b930cb0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/raster.py @@ -0,0 +1,177 @@ +""" +This module houses the ctypes function prototypes for GDAL DataSource (raster) +related data structures. +""" +from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_void_p +from functools import partial + +from django.contrib.gis.gdal.libgdal import std_call +from django.contrib.gis.gdal.prototypes.generation import ( + chararray_output, + const_string_output, + double_output, + int_output, + void_output, + voidptr_output, +) + +# For more detail about c function names and definitions see +# https://gdal.org/api/raster_c_api.html +# https://gdal.org/doxygen/gdalwarper_8h.html +# https://gdal.org/api/gdal_utils.html + +# Prepare partial functions that use cpl error codes +void_output = partial(void_output, cpl=True) +const_string_output = partial(const_string_output, cpl=True) +double_output = partial(double_output, cpl=True) + +# Raster Driver Routines +register_all = void_output(std_call("GDALAllRegister"), [], errcheck=False) +get_driver = voidptr_output(std_call("GDALGetDriver"), [c_int]) +get_driver_by_name = voidptr_output( + std_call("GDALGetDriverByName"), [c_char_p], errcheck=False +) +get_driver_count = int_output(std_call("GDALGetDriverCount"), []) +get_driver_description = const_string_output(std_call("GDALGetDescription"), [c_void_p]) + +# Raster Data Source Routines +create_ds = voidptr_output( + std_call("GDALCreate"), [c_void_p, c_char_p, c_int, c_int, c_int, c_int, c_void_p] +) +open_ds = voidptr_output(std_call("GDALOpen"), [c_char_p, c_int]) +close_ds = void_output(std_call("GDALClose"), [c_void_p], errcheck=False) +flush_ds = int_output(std_call("GDALFlushCache"), [c_void_p]) +copy_ds = voidptr_output( + std_call("GDALCreateCopy"), + [c_void_p, c_char_p, c_void_p, c_int, POINTER(c_char_p), c_void_p, c_void_p], +) +add_band_ds = void_output(std_call("GDALAddBand"), [c_void_p, c_int]) +get_ds_description = const_string_output(std_call("GDALGetDescription"), [c_void_p]) +get_ds_driver = voidptr_output(std_call("GDALGetDatasetDriver"), [c_void_p]) +get_ds_info = const_string_output(std_call("GDALInfo"), [c_void_p, c_void_p]) +get_ds_xsize = int_output(std_call("GDALGetRasterXSize"), [c_void_p]) +get_ds_ysize = int_output(std_call("GDALGetRasterYSize"), [c_void_p]) +get_ds_raster_count = int_output(std_call("GDALGetRasterCount"), [c_void_p]) +get_ds_raster_band = voidptr_output(std_call("GDALGetRasterBand"), [c_void_p, c_int]) +get_ds_projection_ref = const_string_output( + std_call("GDALGetProjectionRef"), [c_void_p] +) +set_ds_projection_ref = void_output(std_call("GDALSetProjection"), [c_void_p, c_char_p]) +get_ds_geotransform = void_output( + std_call("GDALGetGeoTransform"), [c_void_p, POINTER(c_double * 6)], errcheck=False +) +set_ds_geotransform = void_output( + std_call("GDALSetGeoTransform"), [c_void_p, POINTER(c_double * 6)] +) + +get_ds_metadata = chararray_output( + std_call("GDALGetMetadata"), [c_void_p, c_char_p], errcheck=False +) +set_ds_metadata = void_output( + std_call("GDALSetMetadata"), [c_void_p, POINTER(c_char_p), c_char_p] +) +get_ds_metadata_domain_list = chararray_output( + std_call("GDALGetMetadataDomainList"), [c_void_p], errcheck=False +) +get_ds_metadata_item = const_string_output( + std_call("GDALGetMetadataItem"), [c_void_p, c_char_p, c_char_p] +) +set_ds_metadata_item = const_string_output( + std_call("GDALSetMetadataItem"), [c_void_p, c_char_p, c_char_p, c_char_p] +) +free_dsl = void_output(std_call("CSLDestroy"), [POINTER(c_char_p)], errcheck=False) + +# Raster Band Routines +band_io = void_output( + std_call("GDALRasterIO"), + [ + c_void_p, + c_int, + c_int, + c_int, + c_int, + c_int, + c_void_p, + c_int, + c_int, + c_int, + c_int, + c_int, + ], +) +get_band_xsize = int_output(std_call("GDALGetRasterBandXSize"), [c_void_p]) +get_band_ysize = int_output(std_call("GDALGetRasterBandYSize"), [c_void_p]) +get_band_index = int_output(std_call("GDALGetBandNumber"), [c_void_p]) +get_band_description = const_string_output(std_call("GDALGetDescription"), [c_void_p]) +get_band_ds = voidptr_output(std_call("GDALGetBandDataset"), [c_void_p]) +get_band_datatype = int_output(std_call("GDALGetRasterDataType"), [c_void_p]) +get_band_color_interp = int_output( + std_call("GDALGetRasterColorInterpretation"), [c_void_p] +) +get_band_nodata_value = double_output( + std_call("GDALGetRasterNoDataValue"), [c_void_p, POINTER(c_int)] +) +set_band_nodata_value = void_output( + std_call("GDALSetRasterNoDataValue"), [c_void_p, c_double] +) +delete_band_nodata_value = void_output( + std_call("GDALDeleteRasterNoDataValue"), [c_void_p] +) +get_band_statistics = void_output( + std_call("GDALGetRasterStatistics"), + [ + c_void_p, + c_int, + c_int, + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + c_void_p, + c_void_p, + ], +) +compute_band_statistics = void_output( + std_call("GDALComputeRasterStatistics"), + [ + c_void_p, + c_int, + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + c_void_p, + c_void_p, + ], +) + +# Reprojection routine +reproject_image = void_output( + std_call("GDALReprojectImage"), + [ + c_void_p, + c_char_p, + c_void_p, + c_char_p, + c_int, + c_double, + c_double, + c_void_p, + c_void_p, + c_void_p, + ], +) +auto_create_warped_vrt = voidptr_output( + std_call("GDALAutoCreateWarpedVRT"), + [c_void_p, c_char_p, c_char_p, c_int, c_double, c_void_p], +) + +# Create VSI gdal raster files from in-memory buffers. +# https://gdal.org/api/cpl.html#cpl-vsi-h +create_vsi_file_from_mem_buffer = voidptr_output( + std_call("VSIFileFromMemBuffer"), [c_char_p, c_void_p, c_int, c_int] +) +get_mem_buffer_from_vsi_file = voidptr_output( + std_call("VSIGetMemFileBuffer"), [c_char_p, POINTER(c_int), c_bool] +) +unlink_vsi_file = int_output(std_call("VSIUnlink"), [c_char_p]) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/srs.py b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/srs.py new file mode 100644 index 000000000..22db907bc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/prototypes/srs.py @@ -0,0 +1,110 @@ +from ctypes import POINTER, c_char_p, c_int, c_void_p + +from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal, std_call +from django.contrib.gis.gdal.prototypes.generation import ( + const_string_output, + double_output, + int_output, + srs_output, + string_output, + void_output, +) + + +# Shortcut generation for routines with known parameters. +def srs_double(f): + """ + Create a function prototype for the OSR routines that take + the OSRSpatialReference object and return a double value. + """ + return double_output(f, [c_void_p, POINTER(c_int)], errcheck=True) + + +def units_func(f): + """ + Create a ctypes function prototype for OSR units functions, e.g., + OSRGetAngularUnits, OSRGetLinearUnits. + """ + return double_output(f, [c_void_p, POINTER(c_char_p)], strarg=True) + + +# Creation & destruction. +clone_srs = srs_output(std_call("OSRClone"), [c_void_p]) +new_srs = srs_output(std_call("OSRNewSpatialReference"), [c_char_p]) +release_srs = void_output(lgdal.OSRRelease, [c_void_p], errcheck=False) +destroy_srs = void_output( + std_call("OSRDestroySpatialReference"), [c_void_p], errcheck=False +) +srs_validate = void_output(lgdal.OSRValidate, [c_void_p]) + +if GDAL_VERSION >= (3, 0): + set_axis_strategy = void_output( + lgdal.OSRSetAxisMappingStrategy, [c_void_p, c_int], errcheck=False + ) + +# Getting the semi_major, semi_minor, and flattening functions. +semi_major = srs_double(lgdal.OSRGetSemiMajor) +semi_minor = srs_double(lgdal.OSRGetSemiMinor) +invflattening = srs_double(lgdal.OSRGetInvFlattening) + +# WKT, PROJ, EPSG, XML importation routines. +from_wkt = void_output(lgdal.OSRImportFromWkt, [c_void_p, POINTER(c_char_p)]) +from_proj = void_output(lgdal.OSRImportFromProj4, [c_void_p, c_char_p]) +from_epsg = void_output(std_call("OSRImportFromEPSG"), [c_void_p, c_int]) +from_xml = void_output(lgdal.OSRImportFromXML, [c_void_p, c_char_p]) +from_user_input = void_output(std_call("OSRSetFromUserInput"), [c_void_p, c_char_p]) + +# Morphing to/from ESRI WKT. +morph_to_esri = void_output(lgdal.OSRMorphToESRI, [c_void_p]) +morph_from_esri = void_output(lgdal.OSRMorphFromESRI, [c_void_p]) + +# Identifying the EPSG +identify_epsg = void_output(lgdal.OSRAutoIdentifyEPSG, [c_void_p]) + +# Getting the angular_units, linear_units functions +linear_units = units_func(lgdal.OSRGetLinearUnits) +angular_units = units_func(lgdal.OSRGetAngularUnits) + +# For exporting to WKT, PROJ, "Pretty" WKT, and XML. +to_wkt = string_output( + std_call("OSRExportToWkt"), [c_void_p, POINTER(c_char_p)], decoding="utf-8" +) +to_proj = string_output( + std_call("OSRExportToProj4"), [c_void_p, POINTER(c_char_p)], decoding="ascii" +) +to_pretty_wkt = string_output( + std_call("OSRExportToPrettyWkt"), + [c_void_p, POINTER(c_char_p), c_int], + offset=-2, + decoding="utf-8", +) + +# Memory leak fixed in GDAL 1.5; still exists in 1.4. +to_xml = string_output( + lgdal.OSRExportToXML, + [c_void_p, POINTER(c_char_p), c_char_p], + offset=-2, + decoding="utf-8", +) + +# String attribute retrieval routines. +get_attr_value = const_string_output( + std_call("OSRGetAttrValue"), [c_void_p, c_char_p, c_int], decoding="utf-8" +) +get_auth_name = const_string_output( + lgdal.OSRGetAuthorityName, [c_void_p, c_char_p], decoding="ascii" +) +get_auth_code = const_string_output( + lgdal.OSRGetAuthorityCode, [c_void_p, c_char_p], decoding="ascii" +) + +# SRS Properties +isgeographic = int_output(lgdal.OSRIsGeographic, [c_void_p]) +islocal = int_output(lgdal.OSRIsLocal, [c_void_p]) +isprojected = int_output(lgdal.OSRIsProjected, [c_void_p]) + +# Coordinate transformation +new_ct = srs_output(std_call("OCTNewCoordinateTransformation"), [c_void_p, c_void_p]) +destroy_ct = void_output( + std_call("OCTDestroyCoordinateTransformation"), [c_void_p], errcheck=False +) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__init__.py b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3bbbe72a678efb71c75ed074693b60f90b67dea GIT binary patch literal 204 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a2b8ad563a282bf5c22f753ede0edbc368b6847 GIT binary patch literal 1848 zcmZ`)&u`;I6rQoij+16X1!Wfm2MetPLEBWE5KvItEn6h23U#*^E3D;srm0)Uc4sDq zRL*Jl4{474LmVt|;d*dYSRxs5}XFTtHZ|1%4o8ORawMKTpDA^<2=IkZmOwbp0;BeAJ7LgLG--?d@*w z??g(#+?A2iLdLjtyVP3_Vu?f1!)l}tV?>6KlwD>frDNL6Wb`*U*JLcIeB zP6_^$BxLH8beH`2)s(?k7ja9*>6sGq94i!$p*ig%38-5-Jl=ZSM0V)=8d4a`MRk=|o6jz>gED z^m-~TMCzZ333|Q}ljox-$*@98Jlt0z&NDvuyX%u^G4iu$1a-&Cnj@+C>463{WL;;x zYSq~N_R03q{xgY1e}%)rYx;G!S+O`OlHh}(&>>ghA`f8=5T?MUiiL%il^Yd>$av*) zI2RXzcPxbfpEP*uj&tRT3{5IW6=|ZoD-}~BJq}iGfd)+sRpU3}e4K$;0NP{%#3R%= zg}_*nr5id_3@={UkjBb}OaDUTeYnf(v&UcdkCc$Ae>heu>hI?9cqB5d`g@7~ZanBe zF*W!>=BFao{R@#@^!JlNUjf{D5yfZGP^dmXjk00B0cl53Z448&G2~IYQFCEq0J7^9 zlge9U311Yo34_~g+l(^Xql|W_2Y>9ZmTT4)qi<98H)9s;Gu(kSTEOhO<1%{r;6|k= z?A`)Bwg7q2P@5ifqtE9s0p*by0X2OBIxwmQrjM}Ay7ILjypbrBybw}P%t0y_&JNVBgWd^`KRI}5g;(_mqZVsX z_F0EY+&SpF!G|>?dviwifRR09WDlt*ksrZF|7QZ{(7B!zLP`A5F{w1b|8%CXbS<##XxGBgdib=u${GIVLO)XKyzfVT6<32ZP&Ze z*>y_tHTuFspOARqD@Edor#w-hTw2OyW;bb#RCeXRXMQv1HfPq$<H9)9`#@Y_r* z_5(SyPY#_=@#jB9ftZLv9GDZIFu^7Xk(hA7CrOc32mYaJsyJua7aQ5G|*uV z(vX2HuCfSAa1NH?JY0Z_4>Xar zY3)n*De@BP5?n?-2Uk#+;VSBRcp3Eqyn?y{ucE#NucKarH&EY%w@}}PBI-NvF6w)* zih3PNsPDrK)HPVY9~U{;5cBYXSb$BD#~<#i7b|{vbTwVyDmPbFSE`=t2bLSGfV^e9 zc3`8QKEVRTirTS0GQpb;9eJ#c%v+9U1!UN6aAWh-SYIP!Iy?*{Wly8nskOc)GWD&# zx$E9_y?d_E$*Ewfz||2qXd*F3c4R)oIPwgiO;V%f|Kn_KMDtW<29u3RS(>wYHe|-z z+$d&M98Y%=3L`5)!by@ODH4rDCz&Im#yY{CiWQTJfFhs>s4NM!R{MV=Y97NyP2}6s zQqm9F(jMO)dQ&CzitX4gQjx4qhxSNh!oS`=QK2<0cXZ_WLMtCgWsRlaEf1u~)vFCG zYItK3BDb!r!v>x#hJ?I!LqY|+agyj;J)z+ zF=IPQP*RTlM2m|CDffdWlDT;NLI5BVbTaFObv6{Ri_TA04z3Q;4%)O9?TMdsM(dsb7;eKbaB7DS42flrz zlTPHMR4XnXYbN&k$TW{rqu_8~`igo(QEw>f4Mn}7s5cb#hN9lUQsYNtb{aR0rrF=? z7(FZvkw&|3)Q#>bn-5uk$E-#<7el{m^vbPH(=f};`cAje-){9z=d12Cch1Hxf8J}D zwMNtE?e+Rb%j|TGTH~g;Lb!$gOsG=s8D^*4-xilB+An`*n3dgH4fnD0Mce51wi}%& zv}H7n{_|kl>>A~*?_%mQ9gO6OQ~hYL>r3Six>Mh`23y`}I>D>*2X#Bxo(=~!Tlv9i zM|pSTC>R___h8VphXdaZ>)4kANev*aIPo* E1$C#k-v9sr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/source.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/__pycache__/source.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa6ee93caa03a0e0f9a91db04409f58d637b515d GIT binary patch literal 13734 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 K4nKSH`2PWK5(EDL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/band.py b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/band.py new file mode 100644 index 000000000..c3ec96064 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/band.py @@ -0,0 +1,273 @@ +from ctypes import byref, c_double, c_int, c_void_p + +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.prototypes import raster as capi +from django.contrib.gis.gdal.raster.base import GDALRasterBase +from django.contrib.gis.shortcuts import numpy +from django.utils.encoding import force_str + +from .const import ( + GDAL_COLOR_TYPES, + GDAL_INTEGER_TYPES, + GDAL_PIXEL_TYPES, + GDAL_TO_CTYPES, +) + + +class GDALBand(GDALRasterBase): + """ + Wrap a GDAL raster band, needs to be obtained from a GDALRaster object. + """ + + def __init__(self, source, index): + self.source = source + self._ptr = capi.get_ds_raster_band(source._ptr, index) + + def _flush(self): + """ + Call the flush method on the Band's parent raster and force a refresh + of the statistics attribute when requested the next time. + """ + self.source._flush() + self._stats_refresh = True + + @property + def description(self): + """ + Return the description string of the band. + """ + return force_str(capi.get_band_description(self._ptr)) + + @property + def width(self): + """ + Width (X axis) in pixels of the band. + """ + return capi.get_band_xsize(self._ptr) + + @property + def height(self): + """ + Height (Y axis) in pixels of the band. + """ + return capi.get_band_ysize(self._ptr) + + @property + def pixel_count(self): + """ + Return the total number of pixels in this band. + """ + return self.width * self.height + + _stats_refresh = False + + def statistics(self, refresh=False, approximate=False): + """ + Compute statistics on the pixel values of this band. + + The return value is a tuple with the following structure: + (minimum, maximum, mean, standard deviation). + + If approximate=True, the statistics may be computed based on overviews + or a subset of image tiles. + + If refresh=True, the statistics will be computed from the data directly, + and the cache will be updated where applicable. + + For empty bands (where all pixel values are nodata), all statistics + values are returned as None. + + For raster formats using Persistent Auxiliary Metadata (PAM) services, + the statistics might be cached in an auxiliary file. + """ + # Prepare array with arguments for capi function + smin, smax, smean, sstd = c_double(), c_double(), c_double(), c_double() + stats_args = [ + self._ptr, + c_int(approximate), + byref(smin), + byref(smax), + byref(smean), + byref(sstd), + c_void_p(), + c_void_p(), + ] + + if refresh or self._stats_refresh: + func = capi.compute_band_statistics + else: + # Add additional argument to force computation if there is no + # existing PAM file to take the values from. + force = True + stats_args.insert(2, c_int(force)) + func = capi.get_band_statistics + + # Computation of statistics fails for empty bands. + try: + func(*stats_args) + result = smin.value, smax.value, smean.value, sstd.value + except GDALException: + result = (None, None, None, None) + + self._stats_refresh = False + + return result + + @property + def min(self): + """ + Return the minimum pixel value for this band. + """ + return self.statistics()[0] + + @property + def max(self): + """ + Return the maximum pixel value for this band. + """ + return self.statistics()[1] + + @property + def mean(self): + """ + Return the mean of all pixel values of this band. + """ + return self.statistics()[2] + + @property + def std(self): + """ + Return the standard deviation of all pixel values of this band. + """ + return self.statistics()[3] + + @property + def nodata_value(self): + """ + Return the nodata value for this band, or None if it isn't set. + """ + # Get value and nodata exists flag + nodata_exists = c_int() + value = capi.get_band_nodata_value(self._ptr, nodata_exists) + if not nodata_exists: + value = None + # If the pixeltype is an integer, convert to int + elif self.datatype() in GDAL_INTEGER_TYPES: + value = int(value) + return value + + @nodata_value.setter + def nodata_value(self, value): + """ + Set the nodata value for this band. + """ + if value is None: + capi.delete_band_nodata_value(self._ptr) + elif not isinstance(value, (int, float)): + raise ValueError("Nodata value must be numeric or None.") + else: + capi.set_band_nodata_value(self._ptr, value) + self._flush() + + def datatype(self, as_string=False): + """ + Return the GDAL Pixel Datatype for this band. + """ + dtype = capi.get_band_datatype(self._ptr) + if as_string: + dtype = GDAL_PIXEL_TYPES[dtype] + return dtype + + def color_interp(self, as_string=False): + """Return the GDAL color interpretation for this band.""" + color = capi.get_band_color_interp(self._ptr) + if as_string: + color = GDAL_COLOR_TYPES[color] + return color + + def data(self, data=None, offset=None, size=None, shape=None, as_memoryview=False): + """ + Read or writes pixel values for this band. Blocks of data can + be accessed by specifying the width, height and offset of the + desired block. The same specification can be used to update + parts of a raster by providing an array of values. + + Allowed input data types are bytes, memoryview, list, tuple, and array. + """ + offset = offset or (0, 0) + size = size or (self.width - offset[0], self.height - offset[1]) + shape = shape or size + if any(x <= 0 for x in size): + raise ValueError("Offset too big for this raster.") + + if size[0] > self.width or size[1] > self.height: + raise ValueError("Size is larger than raster.") + + # Create ctypes type array generator + ctypes_array = GDAL_TO_CTYPES[self.datatype()] * (shape[0] * shape[1]) + + if data is None: + # Set read mode + access_flag = 0 + # Prepare empty ctypes array + data_array = ctypes_array() + else: + # Set write mode + access_flag = 1 + + # Instantiate ctypes array holding the input data + if isinstance(data, (bytes, memoryview)) or ( + numpy and isinstance(data, numpy.ndarray) + ): + data_array = ctypes_array.from_buffer_copy(data) + else: + data_array = ctypes_array(*data) + + # Access band + capi.band_io( + self._ptr, + access_flag, + offset[0], + offset[1], + size[0], + size[1], + byref(data_array), + shape[0], + shape[1], + self.datatype(), + 0, + 0, + ) + + # Return data as numpy array if possible, otherwise as list + if data is None: + if as_memoryview: + return memoryview(data_array) + elif numpy: + # reshape() needs a reshape parameter with the height first. + return numpy.frombuffer( + data_array, dtype=numpy.dtype(data_array) + ).reshape(tuple(reversed(size))) + else: + return list(data_array) + else: + self._flush() + + +class BandList(list): + def __init__(self, source): + self.source = source + super().__init__() + + def __iter__(self): + for idx in range(1, len(self) + 1): + yield GDALBand(self.source, idx) + + def __len__(self): + return capi.get_ds_raster_count(self.source._ptr) + + def __getitem__(self, index): + try: + return GDALBand(self.source, index + 1) + except GDALException: + raise GDALException("Unable to get band index %d" % index) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/base.py b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/base.py new file mode 100644 index 000000000..3d95c90dc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/base.py @@ -0,0 +1,77 @@ +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.prototypes import raster as capi + + +class GDALRasterBase(GDALBase): + """ + Attributes that exist on both GDALRaster and GDALBand. + """ + + @property + def metadata(self): + """ + Return the metadata for this raster or band. The return value is a + nested dictionary, where the first-level key is the metadata domain and + the second-level is the metadata item names and values for that domain. + """ + # The initial metadata domain list contains the default domain. + # The default is returned if domain name is None. + domain_list = ["DEFAULT"] + + # Get additional metadata domains from the raster. + meta_list = capi.get_ds_metadata_domain_list(self._ptr) + if meta_list: + # The number of domains is unknown, so retrieve data until there + # are no more values in the ctypes array. + counter = 0 + domain = meta_list[counter] + while domain: + domain_list.append(domain.decode()) + counter += 1 + domain = meta_list[counter] + + # Free domain list array. + capi.free_dsl(meta_list) + + # Retrieve metadata values for each domain. + result = {} + for domain in domain_list: + # Get metadata for this domain. + data = capi.get_ds_metadata( + self._ptr, + (None if domain == "DEFAULT" else domain.encode()), + ) + if not data: + continue + # The number of metadata items is unknown, so retrieve data until + # there are no more values in the ctypes array. + domain_meta = {} + counter = 0 + item = data[counter] + while item: + key, val = item.decode().split("=") + domain_meta[key] = val + counter += 1 + item = data[counter] + # The default domain values are returned if domain is None. + result[domain or "DEFAULT"] = domain_meta + return result + + @metadata.setter + def metadata(self, value): + """ + Set the metadata. Update only the domains that are contained in the + value dictionary. + """ + # Loop through domains. + for domain, metadata in value.items(): + # Set the domain to None for the default, otherwise encode. + domain = None if domain == "DEFAULT" else domain.encode() + # Set each metadata entry separately. + for meta_name, meta_value in metadata.items(): + capi.set_ds_metadata_item( + self._ptr, + meta_name.encode(), + meta_value.encode() if meta_value else None, + domain, + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/const.py b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/const.py new file mode 100644 index 000000000..6d3761d9f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/const.py @@ -0,0 +1,87 @@ +""" +GDAL - Constant definitions +""" +from ctypes import c_double, c_float, c_int16, c_int32, c_ubyte, c_uint16, c_uint32 + +# See https://gdal.org/api/raster_c_api.html#_CPPv412GDALDataType +GDAL_PIXEL_TYPES = { + 0: "GDT_Unknown", # Unknown or unspecified type + 1: "GDT_Byte", # Eight bit unsigned integer + 2: "GDT_UInt16", # Sixteen bit unsigned integer + 3: "GDT_Int16", # Sixteen bit signed integer + 4: "GDT_UInt32", # Thirty-two bit unsigned integer + 5: "GDT_Int32", # Thirty-two bit signed integer + 6: "GDT_Float32", # Thirty-two bit floating point + 7: "GDT_Float64", # Sixty-four bit floating point + 8: "GDT_CInt16", # Complex Int16 + 9: "GDT_CInt32", # Complex Int32 + 10: "GDT_CFloat32", # Complex Float32 + 11: "GDT_CFloat64", # Complex Float64 +} + +# A list of gdal datatypes that are integers. +GDAL_INTEGER_TYPES = [1, 2, 3, 4, 5] + +# Lookup values to convert GDAL pixel type indices into ctypes objects. +# The GDAL band-io works with ctypes arrays to hold data to be written +# or to hold the space for data to be read into. The lookup below helps +# selecting the right ctypes object for a given gdal pixel type. +GDAL_TO_CTYPES = [ + None, + c_ubyte, + c_uint16, + c_int16, + c_uint32, + c_int32, + c_float, + c_double, + None, + None, + None, + None, +] + +# List of resampling algorithms that can be used to warp a GDALRaster. +GDAL_RESAMPLE_ALGORITHMS = { + "NearestNeighbour": 0, + "Bilinear": 1, + "Cubic": 2, + "CubicSpline": 3, + "Lanczos": 4, + "Average": 5, + "Mode": 6, +} + +# See https://gdal.org/api/raster_c_api.html#_CPPv415GDALColorInterp +GDAL_COLOR_TYPES = { + 0: "GCI_Undefined", # Undefined, default value, i.e. not known + 1: "GCI_GrayIndex", # Grayscale + 2: "GCI_PaletteIndex", # Paletted + 3: "GCI_RedBand", # Red band of RGBA image + 4: "GCI_GreenBand", # Green band of RGBA image + 5: "GCI_BlueBand", # Blue band of RGBA image + 6: "GCI_AlphaBand", # Alpha (0=transparent, 255=opaque) + 7: "GCI_HueBand", # Hue band of HLS image + 8: "GCI_SaturationBand", # Saturation band of HLS image + 9: "GCI_LightnessBand", # Lightness band of HLS image + 10: "GCI_CyanBand", # Cyan band of CMYK image + 11: "GCI_MagentaBand", # Magenta band of CMYK image + 12: "GCI_YellowBand", # Yellow band of CMYK image + 13: "GCI_BlackBand", # Black band of CMLY image + 14: "GCI_YCbCr_YBand", # Y Luminance + 15: "GCI_YCbCr_CbBand", # Cb Chroma + 16: "GCI_YCbCr_CrBand", # Cr Chroma, also GCI_Max +} + +# GDAL virtual filesystems prefix. +VSI_FILESYSTEM_PREFIX = "/vsi" + +# Fixed base path for buffer-based GDAL in-memory files. +VSI_MEM_FILESYSTEM_BASE_PATH = "/vsimem/" + +# Should the memory file system take ownership of the buffer, freeing it when +# the file is deleted? (No, GDALRaster.__del__() will delete the buffer.) +VSI_TAKE_BUFFER_OWNERSHIP = False + +# Should a VSI file be removed when retrieving its buffer? +VSI_DELETE_BUFFER_ON_READ = False diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/raster/source.py b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/source.py new file mode 100644 index 000000000..ca7875752 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/raster/source.py @@ -0,0 +1,539 @@ +import json +import os +import sys +import uuid +from ctypes import ( + addressof, + byref, + c_buffer, + c_char_p, + c_double, + c_int, + c_void_p, + string_at, +) + +from django.contrib.gis.gdal.driver import Driver +from django.contrib.gis.gdal.error import GDALException +from django.contrib.gis.gdal.prototypes import raster as capi +from django.contrib.gis.gdal.raster.band import BandList +from django.contrib.gis.gdal.raster.base import GDALRasterBase +from django.contrib.gis.gdal.raster.const import ( + GDAL_RESAMPLE_ALGORITHMS, + VSI_DELETE_BUFFER_ON_READ, + VSI_FILESYSTEM_PREFIX, + VSI_MEM_FILESYSTEM_BASE_PATH, + VSI_TAKE_BUFFER_OWNERSHIP, +) +from django.contrib.gis.gdal.srs import SpatialReference, SRSException +from django.contrib.gis.geometry import json_regex +from django.utils.encoding import force_bytes, force_str +from django.utils.functional import cached_property + + +class TransformPoint(list): + indices = { + "origin": (0, 3), + "scale": (1, 5), + "skew": (2, 4), + } + + def __init__(self, raster, prop): + x = raster.geotransform[self.indices[prop][0]] + y = raster.geotransform[self.indices[prop][1]] + super().__init__([x, y]) + self._raster = raster + self._prop = prop + + @property + def x(self): + return self[0] + + @x.setter + def x(self, value): + gtf = self._raster.geotransform + gtf[self.indices[self._prop][0]] = value + self._raster.geotransform = gtf + + @property + def y(self): + return self[1] + + @y.setter + def y(self, value): + gtf = self._raster.geotransform + gtf[self.indices[self._prop][1]] = value + self._raster.geotransform = gtf + + +class GDALRaster(GDALRasterBase): + """ + Wrap a raster GDAL Data Source object. + """ + + destructor = capi.close_ds + + def __init__(self, ds_input, write=False): + self._write = 1 if write else 0 + Driver.ensure_registered() + + # Preprocess json inputs. This converts json strings to dictionaries, + # which are parsed below the same way as direct dictionary inputs. + if isinstance(ds_input, str) and json_regex.match(ds_input): + ds_input = json.loads(ds_input) + + # If input is a valid file path, try setting file as source. + if isinstance(ds_input, str): + if not ds_input.startswith(VSI_FILESYSTEM_PREFIX) and not os.path.exists( + ds_input + ): + raise GDALException( + 'Unable to read raster source input "%s".' % ds_input + ) + try: + # GDALOpen will auto-detect the data source type. + self._ptr = capi.open_ds(force_bytes(ds_input), self._write) + except GDALException as err: + raise GDALException( + 'Could not open the datasource at "{}" ({}).'.format(ds_input, err) + ) + elif isinstance(ds_input, bytes): + # Create a new raster in write mode. + self._write = 1 + # Get size of buffer. + size = sys.getsizeof(ds_input) + # Pass data to ctypes, keeping a reference to the ctypes object so + # that the vsimem file remains available until the GDALRaster is + # deleted. + self._ds_input = c_buffer(ds_input) + # Create random name to reference in vsimem filesystem. + vsi_path = os.path.join(VSI_MEM_FILESYSTEM_BASE_PATH, str(uuid.uuid4())) + # Create vsimem file from buffer. + capi.create_vsi_file_from_mem_buffer( + force_bytes(vsi_path), + byref(self._ds_input), + size, + VSI_TAKE_BUFFER_OWNERSHIP, + ) + # Open the new vsimem file as a GDALRaster. + try: + self._ptr = capi.open_ds(force_bytes(vsi_path), self._write) + except GDALException: + # Remove the broken file from the VSI filesystem. + capi.unlink_vsi_file(force_bytes(vsi_path)) + raise GDALException("Failed creating VSI raster from the input buffer.") + elif isinstance(ds_input, dict): + # A new raster needs to be created in write mode + self._write = 1 + + # Create driver (in memory by default) + driver = Driver(ds_input.get("driver", "MEM")) + + # For out of memory drivers, check filename argument + if driver.name != "MEM" and "name" not in ds_input: + raise GDALException( + 'Specify name for creation of raster with driver "{}".'.format( + driver.name + ) + ) + + # Check if width and height where specified + if "width" not in ds_input or "height" not in ds_input: + raise GDALException( + "Specify width and height attributes for JSON or dict input." + ) + + # Check if srid was specified + if "srid" not in ds_input: + raise GDALException("Specify srid for JSON or dict input.") + + # Create null terminated gdal options array. + papsz_options = [] + for key, val in ds_input.get("papsz_options", {}).items(): + option = "{}={}".format(key, val) + papsz_options.append(option.upper().encode()) + papsz_options.append(None) + + # Convert papszlist to ctypes array. + papsz_options = (c_char_p * len(papsz_options))(*papsz_options) + + # Create GDAL Raster + self._ptr = capi.create_ds( + driver._ptr, + force_bytes(ds_input.get("name", "")), + ds_input["width"], + ds_input["height"], + ds_input.get("nr_of_bands", len(ds_input.get("bands", []))), + ds_input.get("datatype", 6), + byref(papsz_options), + ) + + # Set band data if provided + for i, band_input in enumerate(ds_input.get("bands", [])): + band = self.bands[i] + if "nodata_value" in band_input: + band.nodata_value = band_input["nodata_value"] + # Instantiate band filled with nodata values if only + # partial input data has been provided. + if band.nodata_value is not None and ( + "data" not in band_input + or "size" in band_input + or "shape" in band_input + ): + band.data(data=(band.nodata_value,), shape=(1, 1)) + # Set band data values from input. + band.data( + data=band_input.get("data"), + size=band_input.get("size"), + shape=band_input.get("shape"), + offset=band_input.get("offset"), + ) + + # Set SRID + self.srs = ds_input.get("srid") + + # Set additional properties if provided + if "origin" in ds_input: + self.origin.x, self.origin.y = ds_input["origin"] + + if "scale" in ds_input: + self.scale.x, self.scale.y = ds_input["scale"] + + if "skew" in ds_input: + self.skew.x, self.skew.y = ds_input["skew"] + elif isinstance(ds_input, c_void_p): + # Instantiate the object using an existing pointer to a gdal raster. + self._ptr = ds_input + else: + raise GDALException( + 'Invalid data source input type: "{}".'.format(type(ds_input)) + ) + + def __del__(self): + if self.is_vsi_based: + # Remove the temporary file from the VSI in-memory filesystem. + capi.unlink_vsi_file(force_bytes(self.name)) + super().__del__() + + def __str__(self): + return self.name + + def __repr__(self): + """ + Short-hand representation because WKB may be very large. + """ + return "" % hex(addressof(self._ptr)) + + def _flush(self): + """ + Flush all data from memory into the source file if it exists. + The data that needs flushing are geotransforms, coordinate systems, + nodata_values and pixel values. This function will be called + automatically wherever it is needed. + """ + # Raise an Exception if the value is being changed in read mode. + if not self._write: + raise GDALException( + "Raster needs to be opened in write mode to change values." + ) + capi.flush_ds(self._ptr) + + @property + def vsi_buffer(self): + if not ( + self.is_vsi_based and self.name.startswith(VSI_MEM_FILESYSTEM_BASE_PATH) + ): + return None + # Prepare an integer that will contain the buffer length. + out_length = c_int() + # Get the data using the vsi file name. + dat = capi.get_mem_buffer_from_vsi_file( + force_bytes(self.name), + byref(out_length), + VSI_DELETE_BUFFER_ON_READ, + ) + # Read the full buffer pointer. + return string_at(dat, out_length.value) + + @cached_property + def is_vsi_based(self): + return self._ptr and self.name.startswith(VSI_FILESYSTEM_PREFIX) + + @property + def name(self): + """ + Return the name of this raster. Corresponds to filename + for file-based rasters. + """ + return force_str(capi.get_ds_description(self._ptr)) + + @cached_property + def driver(self): + """ + Return the GDAL Driver used for this raster. + """ + ds_driver = capi.get_ds_driver(self._ptr) + return Driver(ds_driver) + + @property + def width(self): + """ + Width (X axis) in pixels. + """ + return capi.get_ds_xsize(self._ptr) + + @property + def height(self): + """ + Height (Y axis) in pixels. + """ + return capi.get_ds_ysize(self._ptr) + + @property + def srs(self): + """ + Return the SpatialReference used in this GDALRaster. + """ + try: + wkt = capi.get_ds_projection_ref(self._ptr) + if not wkt: + return None + return SpatialReference(wkt, srs_type="wkt") + except SRSException: + return None + + @srs.setter + def srs(self, value): + """ + Set the spatial reference used in this GDALRaster. The input can be + a SpatialReference or any parameter accepted by the SpatialReference + constructor. + """ + if isinstance(value, SpatialReference): + srs = value + elif isinstance(value, (int, str)): + srs = SpatialReference(value) + else: + raise ValueError("Could not create a SpatialReference from input.") + capi.set_ds_projection_ref(self._ptr, srs.wkt.encode()) + self._flush() + + @property + def srid(self): + """ + Shortcut to access the srid of this GDALRaster. + """ + return self.srs.srid + + @srid.setter + def srid(self, value): + """ + Shortcut to set this GDALRaster's srs from an srid. + """ + self.srs = value + + @property + def geotransform(self): + """ + Return the geotransform of the data source. + Return the default geotransform if it does not exist or has not been + set previously. The default is [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]. + """ + # Create empty ctypes double array for data + gtf = (c_double * 6)() + capi.get_ds_geotransform(self._ptr, byref(gtf)) + return list(gtf) + + @geotransform.setter + def geotransform(self, values): + "Set the geotransform for the data source." + if len(values) != 6 or not all(isinstance(x, (int, float)) for x in values): + raise ValueError("Geotransform must consist of 6 numeric values.") + # Create ctypes double array with input and write data + values = (c_double * 6)(*values) + capi.set_ds_geotransform(self._ptr, byref(values)) + self._flush() + + @property + def origin(self): + """ + Coordinates of the raster origin. + """ + return TransformPoint(self, "origin") + + @property + def scale(self): + """ + Pixel scale in units of the raster projection. + """ + return TransformPoint(self, "scale") + + @property + def skew(self): + """ + Skew of pixels (rotation parameters). + """ + return TransformPoint(self, "skew") + + @property + def extent(self): + """ + Return the extent as a 4-tuple (xmin, ymin, xmax, ymax). + """ + # Calculate boundary values based on scale and size + xval = self.origin.x + self.scale.x * self.width + yval = self.origin.y + self.scale.y * self.height + # Calculate min and max values + xmin = min(xval, self.origin.x) + xmax = max(xval, self.origin.x) + ymin = min(yval, self.origin.y) + ymax = max(yval, self.origin.y) + + return xmin, ymin, xmax, ymax + + @property + def bands(self): + return BandList(self) + + def warp(self, ds_input, resampling="NearestNeighbour", max_error=0.0): + """ + Return a warped GDALRaster with the given input characteristics. + + The input is expected to be a dictionary containing the parameters + of the target raster. Allowed values are width, height, SRID, origin, + scale, skew, datatype, driver, and name (filename). + + By default, the warp functions keeps all parameters equal to the values + of the original source raster. For the name of the target raster, the + name of the source raster will be used and appended with + _copy. + source_driver_name. + + In addition, the resampling algorithm can be specified with the "resampling" + input parameter. The default is NearestNeighbor. For a list of all options + consult the GDAL_RESAMPLE_ALGORITHMS constant. + """ + # Get the parameters defining the geotransform, srid, and size of the raster + ds_input.setdefault("width", self.width) + ds_input.setdefault("height", self.height) + ds_input.setdefault("srid", self.srs.srid) + ds_input.setdefault("origin", self.origin) + ds_input.setdefault("scale", self.scale) + ds_input.setdefault("skew", self.skew) + # Get the driver, name, and datatype of the target raster + ds_input.setdefault("driver", self.driver.name) + + if "name" not in ds_input: + ds_input["name"] = self.name + "_copy." + self.driver.name + + if "datatype" not in ds_input: + ds_input["datatype"] = self.bands[0].datatype() + + # Instantiate raster bands filled with nodata values. + ds_input["bands"] = [{"nodata_value": bnd.nodata_value} for bnd in self.bands] + + # Create target raster + target = GDALRaster(ds_input, write=True) + + # Select resampling algorithm + algorithm = GDAL_RESAMPLE_ALGORITHMS[resampling] + + # Reproject image + capi.reproject_image( + self._ptr, + self.srs.wkt.encode(), + target._ptr, + target.srs.wkt.encode(), + algorithm, + 0.0, + max_error, + c_void_p(), + c_void_p(), + c_void_p(), + ) + + # Make sure all data is written to file + target._flush() + + return target + + def clone(self, name=None): + """Return a clone of this GDALRaster.""" + if name: + clone_name = name + elif self.driver.name != "MEM": + clone_name = self.name + "_copy." + self.driver.name + else: + clone_name = os.path.join(VSI_MEM_FILESYSTEM_BASE_PATH, str(uuid.uuid4())) + return GDALRaster( + capi.copy_ds( + self.driver._ptr, + force_bytes(clone_name), + self._ptr, + c_int(), + c_char_p(), + c_void_p(), + c_void_p(), + ), + write=self._write, + ) + + def transform( + self, srs, driver=None, name=None, resampling="NearestNeighbour", max_error=0.0 + ): + """ + Return a copy of this raster reprojected into the given spatial + reference system. + """ + # Convert the resampling algorithm name into an algorithm id + algorithm = GDAL_RESAMPLE_ALGORITHMS[resampling] + + if isinstance(srs, SpatialReference): + target_srs = srs + elif isinstance(srs, (int, str)): + target_srs = SpatialReference(srs) + else: + raise TypeError( + "Transform only accepts SpatialReference, string, and integer " + "objects." + ) + + if target_srs.srid == self.srid and (not driver or driver == self.driver.name): + return self.clone(name) + # Create warped virtual dataset in the target reference system + target = capi.auto_create_warped_vrt( + self._ptr, + self.srs.wkt.encode(), + target_srs.wkt.encode(), + algorithm, + max_error, + c_void_p(), + ) + target = GDALRaster(target) + + # Construct the target warp dictionary from the virtual raster + data = { + "srid": target_srs.srid, + "width": target.width, + "height": target.height, + "origin": [target.origin.x, target.origin.y], + "scale": [target.scale.x, target.scale.y], + "skew": [target.skew.x, target.skew.y], + } + + # Set the driver and filepath if provided + if driver: + data["driver"] = driver + + if name: + data["name"] = name + + # Warp the raster into new srid + return self.warp(data, resampling=resampling, max_error=max_error) + + @property + def info(self): + """ + Return information about this raster in a string format equivalent + to the output of the gdalinfo command line utility. + """ + return capi.get_ds_info(self.ptr, None).decode() diff --git a/venv/Lib/site-packages/django/contrib/gis/gdal/srs.py b/venv/Lib/site-packages/django/contrib/gis/gdal/srs.py new file mode 100644 index 000000000..2e335fe5d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/gdal/srs.py @@ -0,0 +1,360 @@ +""" + The Spatial Reference class, represents OGR Spatial Reference objects. + + Example: + >>> from django.contrib.gis.gdal import SpatialReference + >>> srs = SpatialReference('WGS84') + >>> print(srs) + GEOGCS["WGS 84", + DATUM["WGS_1984", + SPHEROID["WGS 84",6378137,298.257223563, + AUTHORITY["EPSG","7030"]], + TOWGS84[0,0,0,0,0,0,0], + AUTHORITY["EPSG","6326"]], + PRIMEM["Greenwich",0, + AUTHORITY["EPSG","8901"]], + UNIT["degree",0.01745329251994328, + AUTHORITY["EPSG","9122"]], + AUTHORITY["EPSG","4326"]] + >>> print(srs.proj) + +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs + >>> print(srs.ellipsoid) + (6378137.0, 6356752.3142451793, 298.25722356300003) + >>> print(srs.projected, srs.geographic) + False True + >>> srs.import_epsg(32140) + >>> print(srs.name) + NAD83 / Texas South Central +""" +from ctypes import byref, c_char_p, c_int +from enum import IntEnum + +from django.contrib.gis.gdal.base import GDALBase +from django.contrib.gis.gdal.error import SRSException +from django.contrib.gis.gdal.libgdal import GDAL_VERSION +from django.contrib.gis.gdal.prototypes import srs as capi +from django.utils.encoding import force_bytes, force_str + + +class AxisOrder(IntEnum): + TRADITIONAL = 0 + AUTHORITY = 1 + + +class SpatialReference(GDALBase): + """ + A wrapper for the OGRSpatialReference object. According to the GDAL web site, + the SpatialReference object "provide[s] services to represent coordinate + systems (projections and datums) and to transform between them." + """ + + destructor = capi.release_srs + + def __init__(self, srs_input="", srs_type="user", axis_order=None): + """ + Create a GDAL OSR Spatial Reference object from the given input. + The input may be string of OGC Well Known Text (WKT), an integer + EPSG code, a PROJ string, and/or a projection "well known" shorthand + string (one of 'WGS84', 'WGS72', 'NAD27', 'NAD83'). + """ + if not isinstance(axis_order, (type(None), AxisOrder)): + raise ValueError( + "SpatialReference.axis_order must be an AxisOrder instance." + ) + self.axis_order = axis_order or AxisOrder.TRADITIONAL + if srs_type == "wkt": + self.ptr = capi.new_srs(c_char_p(b"")) + self.import_wkt(srs_input) + if self.axis_order == AxisOrder.TRADITIONAL and GDAL_VERSION >= (3, 0): + capi.set_axis_strategy(self.ptr, self.axis_order) + elif self.axis_order != AxisOrder.TRADITIONAL and GDAL_VERSION < (3, 0): + raise ValueError("%s is not supported in GDAL < 3.0." % self.axis_order) + return + elif isinstance(srs_input, str): + try: + # If SRID is a string, e.g., '4326', then make acceptable + # as user input. + srid = int(srs_input) + srs_input = "EPSG:%d" % srid + except ValueError: + pass + elif isinstance(srs_input, int): + # EPSG integer code was input. + srs_type = "epsg" + elif isinstance(srs_input, self.ptr_type): + srs = srs_input + srs_type = "ogr" + else: + raise TypeError('Invalid SRS type "%s"' % srs_type) + + if srs_type == "ogr": + # Input is already an SRS pointer. + srs = srs_input + else: + # Creating a new SRS pointer, using the string buffer. + buf = c_char_p(b"") + srs = capi.new_srs(buf) + + # If the pointer is NULL, throw an exception. + if not srs: + raise SRSException( + "Could not create spatial reference from: %s" % srs_input + ) + else: + self.ptr = srs + + if self.axis_order == AxisOrder.TRADITIONAL and GDAL_VERSION >= (3, 0): + capi.set_axis_strategy(self.ptr, self.axis_order) + elif self.axis_order != AxisOrder.TRADITIONAL and GDAL_VERSION < (3, 0): + raise ValueError("%s is not supported in GDAL < 3.0." % self.axis_order) + # Importing from either the user input string or an integer SRID. + if srs_type == "user": + self.import_user_input(srs_input) + elif srs_type == "epsg": + self.import_epsg(srs_input) + + def __getitem__(self, target): + """ + Return the value of the given string attribute node, None if the node + doesn't exist. Can also take a tuple as a parameter, (target, child), + where child is the index of the attribute in the WKT. For example: + + >>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]' + >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 + >>> print(srs['GEOGCS']) + WGS 84 + >>> print(srs['DATUM']) + WGS_1984 + >>> print(srs['AUTHORITY']) + EPSG + >>> print(srs['AUTHORITY', 1]) # The authority value + 4326 + >>> print(srs['TOWGS84', 4]) # the fourth value in this wkt + 0 + >>> # For the units authority, have to use the pipe symbole. + >>> print(srs['UNIT|AUTHORITY']) + EPSG + >>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the units + 9122 + """ + if isinstance(target, tuple): + return self.attr_value(*target) + else: + return self.attr_value(target) + + def __str__(self): + "Use 'pretty' WKT." + return self.pretty_wkt + + # #### SpatialReference Methods #### + def attr_value(self, target, index=0): + """ + The attribute value for the given target node (e.g. 'PROJCS'). The index + keyword specifies an index of the child node to return. + """ + if not isinstance(target, str) or not isinstance(index, int): + raise TypeError + return capi.get_attr_value(self.ptr, force_bytes(target), index) + + def auth_name(self, target): + "Return the authority name for the given string target node." + return capi.get_auth_name(self.ptr, force_bytes(target)) + + def auth_code(self, target): + "Return the authority code for the given string target node." + return capi.get_auth_code(self.ptr, force_bytes(target)) + + def clone(self): + "Return a clone of this SpatialReference object." + return SpatialReference(capi.clone_srs(self.ptr), axis_order=self.axis_order) + + def from_esri(self): + "Morph this SpatialReference from ESRI's format to EPSG." + capi.morph_from_esri(self.ptr) + + def identify_epsg(self): + """ + This method inspects the WKT of this SpatialReference, and will + add EPSG authority nodes where an EPSG identifier is applicable. + """ + capi.identify_epsg(self.ptr) + + def to_esri(self): + "Morph this SpatialReference to ESRI's format." + capi.morph_to_esri(self.ptr) + + def validate(self): + "Check to see if the given spatial reference is valid." + capi.srs_validate(self.ptr) + + # #### Name & SRID properties #### + @property + def name(self): + "Return the name of this Spatial Reference." + if self.projected: + return self.attr_value("PROJCS") + elif self.geographic: + return self.attr_value("GEOGCS") + elif self.local: + return self.attr_value("LOCAL_CS") + else: + return None + + @property + def srid(self): + "Return the SRID of top-level authority, or None if undefined." + try: + return int(self.attr_value("AUTHORITY", 1)) + except (TypeError, ValueError): + return None + + # #### Unit Properties #### + @property + def linear_name(self): + "Return the name of the linear units." + units, name = capi.linear_units(self.ptr, byref(c_char_p())) + return name + + @property + def linear_units(self): + "Return the value of the linear units." + units, name = capi.linear_units(self.ptr, byref(c_char_p())) + return units + + @property + def angular_name(self): + "Return the name of the angular units." + units, name = capi.angular_units(self.ptr, byref(c_char_p())) + return name + + @property + def angular_units(self): + "Return the value of the angular units." + units, name = capi.angular_units(self.ptr, byref(c_char_p())) + return units + + @property + def units(self): + """ + Return a 2-tuple of the units value and the units name. Automatically + determine whether to return the linear or angular units. + """ + units, name = None, None + if self.projected or self.local: + units, name = capi.linear_units(self.ptr, byref(c_char_p())) + elif self.geographic: + units, name = capi.angular_units(self.ptr, byref(c_char_p())) + if name is not None: + name = force_str(name) + return (units, name) + + # #### Spheroid/Ellipsoid Properties #### + @property + def ellipsoid(self): + """ + Return a tuple of the ellipsoid parameters: + (semimajor axis, semiminor axis, and inverse flattening) + """ + return (self.semi_major, self.semi_minor, self.inverse_flattening) + + @property + def semi_major(self): + "Return the Semi Major Axis for this Spatial Reference." + return capi.semi_major(self.ptr, byref(c_int())) + + @property + def semi_minor(self): + "Return the Semi Minor Axis for this Spatial Reference." + return capi.semi_minor(self.ptr, byref(c_int())) + + @property + def inverse_flattening(self): + "Return the Inverse Flattening for this Spatial Reference." + return capi.invflattening(self.ptr, byref(c_int())) + + # #### Boolean Properties #### + @property + def geographic(self): + """ + Return True if this SpatialReference is geographic + (root node is GEOGCS). + """ + return bool(capi.isgeographic(self.ptr)) + + @property + def local(self): + "Return True if this SpatialReference is local (root node is LOCAL_CS)." + return bool(capi.islocal(self.ptr)) + + @property + def projected(self): + """ + Return True if this SpatialReference is a projected coordinate system + (root node is PROJCS). + """ + return bool(capi.isprojected(self.ptr)) + + # #### Import Routines ##### + def import_epsg(self, epsg): + "Import the Spatial Reference from the EPSG code (an integer)." + capi.from_epsg(self.ptr, epsg) + + def import_proj(self, proj): + """Import the Spatial Reference from a PROJ string.""" + capi.from_proj(self.ptr, proj) + + def import_user_input(self, user_input): + "Import the Spatial Reference from the given user input string." + capi.from_user_input(self.ptr, force_bytes(user_input)) + + def import_wkt(self, wkt): + "Import the Spatial Reference from OGC WKT (string)" + capi.from_wkt(self.ptr, byref(c_char_p(force_bytes(wkt)))) + + def import_xml(self, xml): + "Import the Spatial Reference from an XML string." + capi.from_xml(self.ptr, xml) + + # #### Export Properties #### + @property + def wkt(self): + "Return the WKT representation of this Spatial Reference." + return capi.to_wkt(self.ptr, byref(c_char_p())) + + @property + def pretty_wkt(self, simplify=0): + "Return the 'pretty' representation of the WKT." + return capi.to_pretty_wkt(self.ptr, byref(c_char_p()), simplify) + + @property + def proj(self): + """Return the PROJ representation for this Spatial Reference.""" + return capi.to_proj(self.ptr, byref(c_char_p())) + + @property + def proj4(self): + "Alias for proj()." + return self.proj + + @property + def xml(self, dialect=""): + "Return the XML representation of this Spatial Reference." + return capi.to_xml(self.ptr, byref(c_char_p()), force_bytes(dialect)) + + +class CoordTransform(GDALBase): + "The coordinate system transformation object." + destructor = capi.destroy_ct + + def __init__(self, source, target): + "Initialize on a source and target SpatialReference objects." + if not isinstance(source, SpatialReference) or not isinstance( + target, SpatialReference + ): + raise TypeError("source and target must be of type SpatialReference") + self.ptr = capi.new_ct(source._ptr, target._ptr) + self._srs1_name = source.name + self._srs2_name = target.name + + def __str__(self): + return 'Transform from "%s" to "%s"' % (self._srs1_name, self._srs2_name) diff --git a/venv/Lib/site-packages/django/contrib/gis/geoip2/__init__.py b/venv/Lib/site-packages/django/contrib/gis/geoip2/__init__.py new file mode 100644 index 000000000..fa57b1216 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geoip2/__init__.py @@ -0,0 +1,24 @@ +""" +This module houses the GeoIP2 object, a wrapper for the MaxMind GeoIP2(R) +Python API (https://geoip2.readthedocs.io/). This is an alternative to the +Python GeoIP2 interface provided by MaxMind. + +GeoIP(R) is a registered trademark of MaxMind, Inc. + +For IP-based geolocation, this module requires the GeoLite2 Country and City +datasets, in binary format (CSV will not work!). The datasets may be +downloaded from MaxMind at http://dev.maxmind.com/geoip/geoip2/geolite2/. +Grab GeoLite2-Country.mmdb.gz and GeoLite2-City.mmdb.gz, and unzip them in the +directory corresponding to settings.GEOIP_PATH. +""" +__all__ = ["HAS_GEOIP2"] + +try: + import geoip2 # NOQA +except ImportError: + HAS_GEOIP2 = False +else: + from .base import GeoIP2, GeoIP2Exception + + HAS_GEOIP2 = True + __all__ += ["GeoIP2", "GeoIP2Exception"] diff --git a/venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfbb77e86dae6212a9377ad368062daf83f9ca5c GIT binary patch literal 1016 zcmYjQO>fgc5M4WIQcNp)K;k;w8Yyw4UMf`xQH6d)Y9VR^2+P7+dpFLu_O998Bu)Pj ze<>0tPQ7vF0<&(SV$1vCc{BUw&8*tp4G2EJzx_-P8-)CFoBy9}+`PljjB#KjBFxLZ z$h&VbpEU|U^1l$d({;#~ zlE`zYPC&;#A;EYm43vt^3Jy~>Gu(ikaya8^I6458-tf$Jfx<%5s^S_ZO4oo(dUq)# zTLbs6I>BgZr%J-{XbAgLYb$fq@8?{J>LApdGK|VpWaPdI%To`mfl+~2+lImMflMTKLLz$t| zDdsU8^-^jOh%^h8Aq6G7NZ?5k&A-ote$wPZSbhKlHIr5^kvxNeu*-l^i*c;!f{>63 zNzsTxmDIxi;QBKxL{WfL78Xk1zOK{fuyKNtE+ORsQwv!rWXxcqRkAr4byEL1c)<20A5I@U zoI3uhg$H9_tzJCNCwCdIoa$rUM1bCMsO?odNw8It#4Tu1BuUiD>qc5VAC{HU_C#xB z;$p6vu7XeAKZtf0s~-N`436SYXf^TG%orNKSJ|xO(wg{8*z;K$p9*bkZ={v$@_5eW zJiZWVY*5EuMYCI)a}%>0Ds$D(6xLj%eeAA{MTad zep*_Ld!0n=rEr&J$CW_qqU8P zAN5}v4bjBZsG2RxSV@rb#RQ5bp0OV>atn{FqTq&aG6M=HajkS3G*=%iEPv7DU6OCD zW~Xitbiy_dg0vC@?U?miRIdiXXT7kcd!8F&2EpJo*{@x;KW8Puz6Qq@mskAn9o zPx8;O@3J%OEM}Z#FR|GthW`?KnZ1JdEIY@}J0(*;H!uwUM^ESJz)_IM;&gNK6)!$$xnC@y?)TR?;UO_^CWl=%O`N~C+8f(o0 z-oqbx33V>wkqekLum;Aiv1f=f)dI6qOyCv+YZg-e!W@|0vk7!|&Nx6_UO=Bs?TIrm zADh(nwD8Ojje$9^yETk-&KVbsgTkQjw21Z}CZ%0>x13Z4(Colsg)eE1i9rEn6?2^K zBIXp;oZ_IU=6smXDIS_LIVfVz6nLGMpMZbe0gXtlr0XM#7q+CgbhdOGvW z*gbXN4&0}wnfuHXzZjH2YZB{&qMA=VW%T^H>X}eIRqDY?m4T~QLVbc{uT6%lP+`T( zeyg1*i4X|-+)H-2rwro74RZ6kw-$TdP+%h^*cx6axF`5$y-0B8C9&6&++%zz?6s1d z+%V+Sy`S*?&tt(bYg=z6uO04t4GxM@f#bHn=)Iy?r>nn^77iSp+=9Qz<@+ z@1C;T7&l=D{3U#w3$o+f^?C1|d2eCfdw1UZehq>NWRh;&VMG=BBu(DCzqB0Oezb9a zevFc8zIX5TgJAh*8}oV;eP-2_)%Ta@J<^sQxP0&a!;i)(e4=c8U&Vg;iMQz8ez2Mg zIPbw_WfyJ{?eW%r-CNQQ3!}u|^>IRN9x65DoQ~^Idw|v=r4Vn-H;*~U*ivI6Uk1Zj zo;;KUFQ07FEOQP88fOX4`9glkadU6|t(X}m?H6%^96w@X7(e>nYDWQyY^#xfk=0{m zj~m`4sd9UNN$*73tzH|OUPS^C@4~p??vmq{X~W zoM3l{2scV-%D3K@h}&4dE=oujg7Qg!?olUfv=HiIxJ5JG?oi|*EvX5dAr{6RV!D6z z1b#zLOG^8nxXia>eXVvTom5*Z(1Odf7^rWR;L|BB%=+@i#_HOgbwNojEk-f`iL`__ zkxYx*3N85VkfXHtkcW^owPhjzYBDEFCx7 zp{^u^1~VmvJ;kfC?gf_PiI_PQbJ=&Ct-=_{zK^~HCoc8!X0 z7SfsAz_CzP{X-0rgpi8Rl56!}9`ZD_OE&Hpb0mY(#Ve>N<|4z6F zL`T<}yf}}};nq++_(1c`nv>cfl$J6oLYaoFQgf9u#3j_z3yr7~3hb;{w8JE5hr7^r zHsx4n)H&2y4uWP2cqa(NBq)jRQ1K?wx0UN5l3{y_-=*dwE`ZG=cvl3$pP^HpM}aM1 zI`}L8pH(PYy6*h1^{w^op)H~3tc<~CiZ&Gflpp*BDhWVmVm`Ly6kws5*aU}np=bq~ z9dRD2FGwnj@_bTamTI@e+p7I-wAiR+z;a-V1vPR3?G9>XO{ZT1a0Xq|_z}eV-e(LjTI*4sU*{u)=3O4iHCKe;Bj8a4(EnVIyk6boG8s zM`t~5m`*|uQ4+alUS$Icaump~9LY}^kW&B*v_?5n*86XsJeHX7$g5OlIGXUrh|q}I zR9cB-)R9TpX>#!f6rPqhz>Ye3rw(zZ-N8ebjsz5`M&2RlkRxd4q(vDwKjld}xy_TE zSSF2q!XCAPcAtXMz{qXWY31h>478j_y{Z}j{xv_vIT#xLYb+q&Mp3aX6?A6`E`qIP zy4ched&;!zis?AjZxE0z>zn?WJm`#QG%3Igf5b7dt{m-kRNxLUFf*C;rFCE>IJ4|p zPwj#A432?aZTJ5^M@A2M(i0sI`8xtwi)q6V!XkNqG4<9%vxl1Uk!=9Fj<@>2%kC|Z zkaJoq0QURdPjS|dwj$t*rMMjer>+rdn_Kzm(ps(Vt;hH{OqdQNz^S9wGr6gsF^C3Bf|d(Qft6*k!lo6p6k6XZlUg%d8ethf5bFu=-*(7Bn?g# zXUzUYrf<^03-$c6qE)RP5~kAXBb7(PSH-2?%vunYZ;N5TP5=Q+)$D z@-`MotHVS?^PXE;P8BZ6*hghqLEGQr`C7?hO_{mx947NZnZy$2)|?ahR?z#H6CC4P zEQ7>|YnmnQph=v>?kYO|jymt6IL0c?eIcvzxcbS>pIV2U{NHm=I?2figDKC;RDgo%xdNXdL9p`BcfJc`ChxUNdIP#j>0hDgUJ5-#cZ}OXez@uHg1os$XtV{>bt+d>V zJKIsxV}PnH+zL>wX=BpxM|E;9ddqnf&^m(6GxJZ4UjfzhaFs~-CNclS*is?ri94{C zkmGddSsOzsRz~P|h!{boKL)vvO9$q!K=PdN0g~2dxZ%x^oN{+uJzDkasTn^v{X&z% zhTa7V`j+3@<{kb;SKRz3qDXvNe>7|K^(koq3dP-stiMP11}%BBo(~5;rI?Wxk{;}o z!2}&TTukAV;Pg88F-+s^qNetbv=S-4LIK>Iwfd980HRhK^WmYuWFA>TG1MNyvf00t zJE~%1c+{QCZ8Gl-ZBjcDL{w&}BWyebQ3MKwuy3J$Bu1nq5DP%%U(lzZc4Y*$v#w(t zlO7ev8rhS*nfc5D&(@21&YTA<4?XH+o}v2piO-)XKk@PEZ<OXOJDbo>@rF?bL8DPwihm&*Ih^&s5P)1VubvN||aAl+M7T!DJ=J*xd43YcBV`~zw@Vr++a z_)m0bQ2~=Q0MA9G{$o*zB2vDu2x||l$1tisWtrkMEouuo3#DbcgH-=)5jA`tTc57x z{+l{JK#{LXtvC`XbFaa&D=RBNAV0>Cnx~QF6wR4N;g|F4EPrzBvMuYO%eJgamu>#U zp^G-KC*nTu;7(CcP*g`34O1`Dr$@zA6se0$0aTmpYYnT&Pq9?ophBet3TuLZfuMA& zF)PIg<(A?@s`*s>97Q^zj!ifm?ZixcOwA+9s2W9CrAgvT(gOH*itWG+=}*I1rvPi= zuAyRCKL)G?n01S8p)%v1cgt=8wF$R`8wkgmK(9NMS>}wm32Oc{ycqwwsSi&e;x%fW z810@dK`|8n6&da)!RvhZPbjI-`*>&e|F&32h41~DY-TTsTCyHs3(`R?E#ty6?ujOs zql>Gw1o$5&i4e4V(sKUKE_J=6^l*}bQujUm&##+wC87?IuHjm^fuSvn8{|ElLPkjIY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/resources.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geoip2/__pycache__/resources.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..309d04f2ef90fab5ceb60575a931a17f51ef9f82 GIT binary patch literal 823 zcmZWn&5qMB5O&fuO}pu$gEe zU|%T`Cr;craN>ZNarmjgk-vQ7v1i7f&(7yFLF4PYPumA0AwIKlJVG*_(8L9S6f*cI zG9g1bqJJQxH)1(119JTy%;z-MG%+XmAZk$ugke4M$ULgY9+}7W#Ph`SsmB@NiQk{X zUE-+>Zi{+s0?F~>dM?AOlyZ+QzEBFWO#7(R?vS09);MjHahuXgb!?lWQGHt4&Nw)D z?_Z03St6TaSYK$|XtPlr*j5#0(;00|pX>^!T_;sP-C0w4nw_*3U9lU^#h@zQId!^G zoA=hJlTXqdS5$4aed(mz4XByC* zzXDsU(&c+)_W4V_%~3mb-WKI$Q7O!2U6{(Q_zIx6t4ialQdYP3SCr3oP%6CF9{Ola zeP9vb9fCNFgMYsTuY7}BXNvfHW0{!W}V5$V}acQMiN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geoip2/base.py b/venv/Lib/site-packages/django/contrib/gis/geoip2/base.py new file mode 100644 index 000000000..221ae1fbe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geoip2/base.py @@ -0,0 +1,247 @@ +import socket + +import geoip2.database + +from django.conf import settings +from django.core.exceptions import ValidationError +from django.core.validators import validate_ipv46_address +from django.utils._os import to_path + +from .resources import City, Country + +# Creating the settings dictionary with any settings, if needed. +GEOIP_SETTINGS = { + "GEOIP_PATH": getattr(settings, "GEOIP_PATH", None), + "GEOIP_CITY": getattr(settings, "GEOIP_CITY", "GeoLite2-City.mmdb"), + "GEOIP_COUNTRY": getattr(settings, "GEOIP_COUNTRY", "GeoLite2-Country.mmdb"), +} + + +class GeoIP2Exception(Exception): + pass + + +class GeoIP2: + # The flags for GeoIP memory caching. + # Try MODE_MMAP_EXT, MODE_MMAP, MODE_FILE in that order. + MODE_AUTO = 0 + # Use the C extension with memory map. + MODE_MMAP_EXT = 1 + # Read from memory map. Pure Python. + MODE_MMAP = 2 + # Read database as standard file. Pure Python. + MODE_FILE = 4 + # Load database into memory. Pure Python. + MODE_MEMORY = 8 + cache_options = frozenset( + (MODE_AUTO, MODE_MMAP_EXT, MODE_MMAP, MODE_FILE, MODE_MEMORY) + ) + + # Paths to the city & country binary databases. + _city_file = "" + _country_file = "" + + # Initially, pointers to GeoIP file references are NULL. + _city = None + _country = None + + def __init__(self, path=None, cache=0, country=None, city=None): + """ + Initialize the GeoIP object. No parameters are required to use default + settings. Keyword arguments may be passed in to customize the locations + of the GeoIP datasets. + + * path: Base directory to where GeoIP data is located or the full path + to where the city or country data files (*.mmdb) are located. + Assumes that both the city and country data sets are located in + this directory; overrides the GEOIP_PATH setting. + + * cache: The cache settings when opening up the GeoIP datasets. May be + an integer in (0, 1, 2, 4, 8) corresponding to the MODE_AUTO, + MODE_MMAP_EXT, MODE_MMAP, MODE_FILE, and MODE_MEMORY, + `GeoIPOptions` C API settings, respectively. Defaults to 0, + meaning MODE_AUTO. + + * country: The name of the GeoIP country data file. Defaults to + 'GeoLite2-Country.mmdb'; overrides the GEOIP_COUNTRY setting. + + * city: The name of the GeoIP city data file. Defaults to + 'GeoLite2-City.mmdb'; overrides the GEOIP_CITY setting. + """ + # Checking the given cache option. + if cache in self.cache_options: + self._cache = cache + else: + raise GeoIP2Exception("Invalid GeoIP caching option: %s" % cache) + + # Getting the GeoIP data path. + path = path or GEOIP_SETTINGS["GEOIP_PATH"] + if not path: + raise GeoIP2Exception( + "GeoIP path must be provided via parameter or the GEOIP_PATH setting." + ) + + path = to_path(path) + if path.is_dir(): + # Constructing the GeoIP database filenames using the settings + # dictionary. If the database files for the GeoLite country + # and/or city datasets exist, then try to open them. + country_db = path / (country or GEOIP_SETTINGS["GEOIP_COUNTRY"]) + if country_db.is_file(): + self._country = geoip2.database.Reader(str(country_db), mode=cache) + self._country_file = country_db + + city_db = path / (city or GEOIP_SETTINGS["GEOIP_CITY"]) + if city_db.is_file(): + self._city = geoip2.database.Reader(str(city_db), mode=cache) + self._city_file = city_db + if not self._reader: + raise GeoIP2Exception("Could not load a database from %s." % path) + elif path.is_file(): + # Otherwise, some detective work will be needed to figure out + # whether the given database path is for the GeoIP country or city + # databases. + reader = geoip2.database.Reader(str(path), mode=cache) + db_type = reader.metadata().database_type + + if db_type.endswith("City"): + # GeoLite City database detected. + self._city = reader + self._city_file = path + elif db_type.endswith("Country"): + # GeoIP Country database detected. + self._country = reader + self._country_file = path + else: + raise GeoIP2Exception( + "Unable to recognize database edition: %s" % db_type + ) + else: + raise GeoIP2Exception("GeoIP path must be a valid file or directory.") + + @property + def _reader(self): + return self._country or self._city + + @property + def _country_or_city(self): + if self._country: + return self._country.country + else: + return self._city.city + + def __del__(self): + # Cleanup any GeoIP file handles lying around. + if self._reader: + self._reader.close() + + def __repr__(self): + meta = self._reader.metadata() + version = "[v%s.%s]" % ( + meta.binary_format_major_version, + meta.binary_format_minor_version, + ) + return ( + '<%(cls)s %(version)s _country_file="%(country)s", _city_file="%(city)s">' + % { + "cls": self.__class__.__name__, + "version": version, + "country": self._country_file, + "city": self._city_file, + } + ) + + def _check_query(self, query, country=False, city=False, city_or_country=False): + "Check the query and database availability." + # Making sure a string was passed in for the query. + if not isinstance(query, str): + raise TypeError( + "GeoIP query must be a string, not type %s" % type(query).__name__ + ) + + # Extra checks for the existence of country and city databases. + if city_or_country and not (self._country or self._city): + raise GeoIP2Exception("Invalid GeoIP country and city data files.") + elif country and not self._country: + raise GeoIP2Exception( + "Invalid GeoIP country data file: %s" % self._country_file + ) + elif city and not self._city: + raise GeoIP2Exception("Invalid GeoIP city data file: %s" % self._city_file) + + # Return the query string back to the caller. GeoIP2 only takes IP addresses. + try: + validate_ipv46_address(query) + except ValidationError: + query = socket.gethostbyname(query) + + return query + + def city(self, query): + """ + Return a dictionary of city information for the given IP address or + Fully Qualified Domain Name (FQDN). Some information in the dictionary + may be undefined (None). + """ + enc_query = self._check_query(query, city=True) + return City(self._city.city(enc_query)) + + def country_code(self, query): + "Return the country code for the given IP Address or FQDN." + enc_query = self._check_query(query, city_or_country=True) + return self.country(enc_query)["country_code"] + + def country_name(self, query): + "Return the country name for the given IP Address or FQDN." + enc_query = self._check_query(query, city_or_country=True) + return self.country(enc_query)["country_name"] + + def country(self, query): + """ + Return a dictionary with the country code and name when given an + IP address or a Fully Qualified Domain Name (FQDN). For example, both + '24.124.1.80' and 'djangoproject.com' are valid parameters. + """ + # Returning the country code and name + enc_query = self._check_query(query, city_or_country=True) + return Country(self._country_or_city(enc_query)) + + # #### Coordinate retrieval routines #### + def coords(self, query, ordering=("longitude", "latitude")): + cdict = self.city(query) + if cdict is None: + return None + else: + return tuple(cdict[o] for o in ordering) + + def lon_lat(self, query): + "Return a tuple of the (longitude, latitude) for the given query." + return self.coords(query) + + def lat_lon(self, query): + "Return a tuple of the (latitude, longitude) for the given query." + return self.coords(query, ("latitude", "longitude")) + + def geos(self, query): + "Return a GEOS Point object for the given query." + ll = self.lon_lat(query) + if ll: + from django.contrib.gis.geos import Point + + return Point(ll, srid=4326) + else: + return None + + # #### GeoIP Database Information Routines #### + @property + def info(self): + "Return information about the GeoIP library and databases in use." + meta = self._reader.metadata() + return "GeoIP Library:\n\t%s.%s\n" % ( + meta.binary_format_major_version, + meta.binary_format_minor_version, + ) + + @classmethod + def open(cls, full_path, cache): + return GeoIP2(full_path, cache) diff --git a/venv/Lib/site-packages/django/contrib/gis/geoip2/resources.py b/venv/Lib/site-packages/django/contrib/gis/geoip2/resources.py new file mode 100644 index 000000000..74f422869 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geoip2/resources.py @@ -0,0 +1,22 @@ +def City(response): + return { + "city": response.city.name, + "continent_code": response.continent.code, + "continent_name": response.continent.name, + "country_code": response.country.iso_code, + "country_name": response.country.name, + "dma_code": response.location.metro_code, + "is_in_european_union": response.country.is_in_european_union, + "latitude": response.location.latitude, + "longitude": response.location.longitude, + "postal_code": response.postal.code, + "region": response.subdivisions[0].iso_code if response.subdivisions else None, + "time_zone": response.location.time_zone, + } + + +def Country(response): + return { + "country_code": response.country.iso_code, + "country_name": response.country.name, + } diff --git a/venv/Lib/site-packages/django/contrib/gis/geometry.py b/venv/Lib/site-packages/django/contrib/gis/geometry.py new file mode 100644 index 000000000..71e245f0a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geometry.py @@ -0,0 +1,17 @@ +import re + +from django.utils.regex_helper import _lazy_re_compile + +# Regular expression for recognizing HEXEWKB and WKT. A prophylactic measure +# to prevent potentially malicious input from reaching the underlying C +# library. Not a substitute for good web security programming practices. +hex_regex = _lazy_re_compile(r"^[0-9A-F]+$", re.I) +wkt_regex = _lazy_re_compile( + r"^(SRID=(?P\-?\d+);)?" + r"(?P" + r"(?PPOINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|" + r"MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)" + r"[ACEGIMLONPSRUTYZ\d,\.\-\+\(\) ]+)$", + re.I, +) +json_regex = _lazy_re_compile(r"^(\s+)?\{.*}(\s+)?$", re.DOTALL) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/LICENSE b/venv/Lib/site-packages/django/contrib/gis/geos/LICENSE new file mode 100644 index 000000000..0479b0773 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2007-2009 Justin Bronn +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of GEOSGeometry nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__init__.py b/venv/Lib/site-packages/django/contrib/gis/geos/__init__.py new file mode 100644 index 000000000..27de1ca8e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/__init__.py @@ -0,0 +1,18 @@ +""" +The GeoDjango GEOS module. Please consult the GeoDjango documentation +for more details: https://docs.djangoproject.com/en/dev/ref/contrib/gis/geos/ +""" +from .collections import ( # NOQA + GeometryCollection, + MultiLineString, + MultiPoint, + MultiPolygon, +) +from .error import GEOSException # NOQA +from .factory import fromfile, fromstr # NOQA +from .geometry import GEOSGeometry, hex_regex, wkt_regex # NOQA +from .io import WKBReader, WKBWriter, WKTReader, WKTWriter # NOQA +from .libgeos import geos_version # NOQA +from .linestring import LinearRing, LineString # NOQA +from .point import Point # NOQA +from .polygon import Polygon # NOQA diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5fe8fceafe56983382d1ef7f5dc0931ba4bc2525 GIT binary patch literal 954 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/coordseq.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/coordseq.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9dd1a446a73668cc4b3e82eeff62c00b3c771c7 GIT binary patch literal 8794 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/error.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/error.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24ba46d22441a2d2405936cd01dd2850471ebf2c GIT binary patch literal 437 zcmY*VO-lnY5Y28ETZ;t`{Q-L|SobO-QqWotQpM_}1Vc6%wyAAWGufhE_0Ra17CiX} zJbN;`>*v6m%zJN=Okz5nHu3R(^P0~5`c{&^5qUE3z^+dtB8d#1J%BtlrhyD6q}LGM z`4@p_0}tHx35f3_(@+M}M%`a@M#J;T@Ls^mDWf0vu4WLY93d|C7`~02SZS#QcYrak zyuO8nr!od>jolshqN2r^=1X9#Xfw7nGGCPS7GrlgUwk=D#-tI9y%4+MC#up19PQI< z1dH@CN96R_h36ugYWf{T>!5zrVRcC8r7rmd DxBGF9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/factory.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/factory.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..577a822e31a603d70f67d3865692365d87160918 GIT binary patch literal 1001 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 UL?KLfK-r{IU!zWQ#a?av2B$MT?*IS* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/libgeos.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/libgeos.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..192d120342745ca403eb91561214ff32925a6a2e GIT binary patch literal 4073 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 Lqh?rFs)c_8BLKI* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/linestring.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/linestring.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9e2b260369227a9ece4b9df16d2e37106f9179f GIT binary patch literal 5739 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 IaN)xL0BrP$-2eap literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/mutable_list.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/mutable_list.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0bcd6acbaf53b58fa3a13cdcc8ed10f086829a6 GIT binary patch literal 10172 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/point.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/point.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b04a5ff3121bff3c960a7b7965abc2dc51f510b0 GIT binary patch literal 5257 zcma)ATW=f372eqkxuhsrwl2OW>sxH13f~ecO1W@X}ewSxW21t zr(Nk({VFpa7`(*GuMA!m)eXxZ>DJZ+e!!~}aU74gwy51EE zZ{rW{J$!s`ttq-`l*AaQ(ZBD%1$9e(*c zV~KHxmtIx;lBUbtedYRPO;>mow5#bcUISebRX)xqUKtzA9|L`aPinfxkMd)$41b(Y z@oD@{@EJaf-y{4uKY`y#ev+TU?@@8oKPIO5X?{k3H!Y@DX876B+Z2C?zpH0v#VlsL z(c2V1$It7T;t@+>CQK6 z^fotO19M=tEPPcVx@Cg0Q-_-y>?Io*o29foa5mV$d2PNZrS68YQW=y6P}27%42aPDn5G(q6YM=Db8= z4Ue8hycf1d+jT=3!ia=ajp}IdKGur0u!HYzj0SJry5)7fPx8aBT={U$yLP=^_q+?< zwYy%IL_FtpL#1$j6nmi>o_xp#`ujQWW4*)m19s4t*yb2}4>=v}IN!haS^Nx_<~wG+ zR`g87-V*MR%V{K;kesJMPNrnU>(#6psVG)y7&k@cXfb7WJ5p)pEVYv`%`99ht2}`d z-jgzs*?7>DB1}b~ubWwI5oeC-b%o5_AfR)CpkBuIqP>){wT!K2tS<>+;NeLkxyl^< z=@!c>LC|bNTtTp9{72lmvG6+uB`kd2Qz~4zn>2eJ5vOY5L6rWwx43XWk}7@wkxWSC z3%K92h2KVt3o1&*``xg)8n%R5;45L=O0G7OIF-@j)mEggwnULVN7bvX@ACdkZZ z(Ycipn_wmL44W`(tZKUEq&aQ(C$!KS!|OC*d!vVFawF|3wAsK|F{Hzd$41IFj7{@3 zs4X^Mw=zd`y6L){!lG;Nep=bkMN7o6sl1XoGfin(HK+L~7f0xS`gb6S=j_Lp=wzX~-H z(nmr`f-8BEIxSl_NLn)Jrc$1#u{|<<4`UyoDHq+OY5wRk^T&~ji!b+aN@#e8zN(=k zSt8gOugxK6OdiEJ+{kLSRj$BoEfQxR(YGX>n%SQ!q*FMK7J8E|HGBw)OKAGQ9DY?f zH8uglq&BG3Ts71Y{93EFoJmb?57;c?&`X9@fL#vwOfj~>0HIdu3;?Y!Y|NDg7AJVM zF=H_UBkt}Iy{9Q}W2Ulu1|w`>(fRdq|KSL4?r87#LQgw$6axx8C7$*K0AvnS>U}Zi zeL3fS<$pcrg)#T?Tj%IF+GSpnHe>}||MUpI2tYj^!Rr-J>V|hoy&-p#)B&pOX4sAV z+D`nDlbG@=#ZXg85_x6=5~N>lssQ|~Wp*sq(&6j+km%PPd0DSUMCizqM4C;Nv1qS8 zN!2&dG-TLLl}!RHrcIX}!yon4eLC*aRrcw4WK_SwZe&yx4oPDJOP&Lckj~6a3zYpD z`PBea;2;nhJtj{NY`p1k`P!ho3a(w|(D+MMH|P7;hl!9Uh3d7_C~kS=jh<>pP2q9T z7KHrXa|ER*j~9))tF2grv#f(9zs7}1WwIWSvt<@s%D2g}{3_sHr5fHPSu12m_?49a z|E+X6b0G1Kl2POs3jnyY_ZtAC_$l;PT40wjl_ zqqUO^ffptUCxH-Q+$0i+LR-t0nOOmpIfktsO0LbcZsj~X2&iH$a}YFpVvnw~G0iAK zVyi8_!fEmXy8h7}jOBB?0E3K<*lVIG!k|CG(^BYa1NymZd|iG4dcaN^zlY|YLTkim z|MF+BQgWZ<8FG|ucT!%mdgWJw;$_8U)`EC*)%0 zw`8pLHsBQtcJWXCMNNzL1c)N05%$0;Wt9W?xJ8Lr|Mur1?a3Gn3NP+;7Qs5$9XYMi zNyj$#-jyN;`zdlI%D=AH8(Kr!_caROLLSb{?B!7Pa|qvKJ>?*PogrDkGDWFG$t2sc znQivR3)K`WNEO3}XlnXeBrdX*Ra2JfdIhYSa)Pd?-z?0{;EgUzwq)nFB(LDpoKs6u z)*z2lM{*kKg3x}iE~eo`X^>k>000s)4%=-kR1@gP=7$a1IaS=^fKT>mYJ?)R4_$@g z1R@34hE-kMp`R~cRh@1UBa6yysz{r24Q!e6XV@Vd!=XbTIY|8a&d;#&2NLFl)i3AF zuI)=i4scK649N$%C-G)7D#x32>{~ z*eRwj4;7QvybeLPh=cP7utB!)EscMQZYY}dw-k+8h$eTfk!aq6p4vQ)Egf zMyAw1Twb&b895Rnm{MLbt{_NqlUs%KY-rTkHmpOr?Vr38#&MGBEXDT_4NPKU(X@jAQ}NVKQ>_@I=njIc8U&q$_fQuFSuF^j zqB75CkaTpSI8QK$4%Z60gg}Adu1h&xGRaG{KPCFvm@X($C@d#DFA*qvlh>&Gm^w=2 zP2VD?(3MpU^-&E;Ao6MJe^eZ-PXGV_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/polygon.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/polygon.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4f0b737c7ac74ddc380ee0d99b3a10a216ea080 GIT binary patch literal 6590 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/prepared.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/__pycache__/prepared.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e291ac9d1ff3601e78332faf0e6f7f6ec7befb9 GIT binary patch literal 2344 zcmbVO&u`l{6ecBERunmLezfV24G=b9fPpp!b}WXWTbE^rEi;ntA{ZlNk#*$RqD#^l z9AuZZf5r~&G5?Z)op#!7KyN$kJJ}x4HA0a7WNrc2wb&GtzMXrtnIG=HBtq zk7r-UT3~;u#4uKZC-CgOX2IQ4xO5+kAQ9yxvN(-w;q)qz3$_}0+~W3Y5^ZpYSHSz+ z}}^kj~kb0(-&*=*?G^$afkIhZSY zMHmDM!b1nvZx$uShB51vrR&D|otnxU_lowaZxL7J1Qf7O)HGHB#;R1I;YB{{K;Rh4 z5P78-sshX8eyV}DiL*rH8_&l>aio+~xs$}hGztK#*;K6D9vaoKb4QE*i^#!gCR1D! zwFxu*d;aW6`zH-w+&&#?9k;)c$q41r?c>yZH|n&%O_er}TT1pollFzkF52IxowiPm zcsz`gU*fLNZQhHsu56;9D(y78scs^PW*M==;W+mgOS9B4wvB4x&Uc-F`j$g?>E->K zyWp@yzb80~kEa3!e^&=%$QzKdXMw2JTkDKm)02j+Ja`iAl#8=6&T0e3uPudZ=M@Qi zLrp{|On{?aiG2Wf?{K;Lhsc$vmE_bGysGd^OF9ph=s<{YclE~;UJ5_wCY_yfp&9mL zMD2mO{A5Y8CGZ;bwioE(VOY({Elx`~BXaNoA~?kwtMAQLpC7-~4E#Ch(;170ODyK7 zHJH?AOcEuv7PkmdogzM)ak#g{VG3D;zA!`trpNL;ms2$nrFt`N(3qT>j z@`)%ACyhN!gIPQfjO9LK1Ib5y><5g!9L4?VlPY6eCX5w{ENGn`wV*cqz*^5wBM%s" % "".join(g.kml for g in self) + + @property + def tuple(self): + "Return a tuple of all the coordinates in this Geometry Collection" + return tuple(g.tuple for g in self) + + coords = tuple + + +# MultiPoint, MultiLineString, and MultiPolygon class definitions. +class MultiPoint(GeometryCollection): + _allowed = Point + _typeid = 4 + + +class MultiLineString(LinearGeometryMixin, GeometryCollection): + _allowed = (LineString, LinearRing) + _typeid = 5 + + +class MultiPolygon(GeometryCollection): + _allowed = Polygon + _typeid = 6 + + +# Setting the allowed types here since GeometryCollection is defined before +# its subclasses. +GeometryCollection._allowed = ( + Point, + LineString, + LinearRing, + Polygon, + MultiPoint, + MultiLineString, + MultiPolygon, +) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/coordseq.py b/venv/Lib/site-packages/django/contrib/gis/geos/coordseq.py new file mode 100644 index 000000000..07a3b7d21 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/coordseq.py @@ -0,0 +1,220 @@ +""" + This module houses the GEOSCoordSeq object, which is used internally + by GEOSGeometry to house the actual coordinates of the Point, + LineString, and LinearRing geometries. +""" +from ctypes import byref, c_byte, c_double, c_uint + +from django.contrib.gis.geos import prototypes as capi +from django.contrib.gis.geos.base import GEOSBase +from django.contrib.gis.geos.error import GEOSException +from django.contrib.gis.geos.libgeos import CS_PTR, geos_version_tuple +from django.contrib.gis.shortcuts import numpy + + +class GEOSCoordSeq(GEOSBase): + "The internal representation of a list of coordinates inside a Geometry." + + ptr_type = CS_PTR + + def __init__(self, ptr, z=False): + "Initialize from a GEOS pointer." + if not isinstance(ptr, CS_PTR): + raise TypeError("Coordinate sequence should initialize with a CS_PTR.") + self._ptr = ptr + self._z = z + + def __iter__(self): + "Iterate over each point in the coordinate sequence." + for i in range(self.size): + yield self[i] + + def __len__(self): + "Return the number of points in the coordinate sequence." + return self.size + + def __str__(self): + "Return the string representation of the coordinate sequence." + return str(self.tuple) + + def __getitem__(self, index): + "Return the coordinate sequence value at the given index." + self._checkindex(index) + return self._point_getter(index) + + def __setitem__(self, index, value): + "Set the coordinate sequence value at the given index." + # Checking the input value + if isinstance(value, (list, tuple)): + pass + elif numpy and isinstance(value, numpy.ndarray): + pass + else: + raise TypeError( + "Must set coordinate with a sequence (list, tuple, or numpy array)." + ) + # Checking the dims of the input + if self.dims == 3 and self._z: + n_args = 3 + point_setter = self._set_point_3d + else: + n_args = 2 + point_setter = self._set_point_2d + if len(value) != n_args: + raise TypeError("Dimension of value does not match.") + self._checkindex(index) + point_setter(index, value) + + # #### Internal Routines #### + def _checkindex(self, index): + "Check the given index." + if not (0 <= index < self.size): + raise IndexError("invalid GEOS Geometry index: %s" % index) + + def _checkdim(self, dim): + "Check the given dimension." + if dim < 0 or dim > 2: + raise GEOSException('invalid ordinate dimension "%d"' % dim) + + def _get_x(self, index): + return capi.cs_getx(self.ptr, index, byref(c_double())) + + def _get_y(self, index): + return capi.cs_gety(self.ptr, index, byref(c_double())) + + def _get_z(self, index): + return capi.cs_getz(self.ptr, index, byref(c_double())) + + def _set_x(self, index, value): + capi.cs_setx(self.ptr, index, value) + + def _set_y(self, index, value): + capi.cs_sety(self.ptr, index, value) + + def _set_z(self, index, value): + capi.cs_setz(self.ptr, index, value) + + @property + def _point_getter(self): + return self._get_point_3d if self.dims == 3 and self._z else self._get_point_2d + + def _get_point_2d(self, index): + return (self._get_x(index), self._get_y(index)) + + def _get_point_3d(self, index): + return (self._get_x(index), self._get_y(index), self._get_z(index)) + + def _set_point_2d(self, index, value): + x, y = value + self._set_x(index, x) + self._set_y(index, y) + + def _set_point_3d(self, index, value): + x, y, z = value + self._set_x(index, x) + self._set_y(index, y) + self._set_z(index, z) + + # #### Ordinate getting and setting routines #### + def getOrdinate(self, dimension, index): + "Return the value for the given dimension and index." + self._checkindex(index) + self._checkdim(dimension) + return capi.cs_getordinate(self.ptr, index, dimension, byref(c_double())) + + def setOrdinate(self, dimension, index, value): + "Set the value for the given dimension and index." + self._checkindex(index) + self._checkdim(dimension) + capi.cs_setordinate(self.ptr, index, dimension, value) + + def getX(self, index): + "Get the X value at the index." + return self.getOrdinate(0, index) + + def setX(self, index, value): + "Set X with the value at the given index." + self.setOrdinate(0, index, value) + + def getY(self, index): + "Get the Y value at the given index." + return self.getOrdinate(1, index) + + def setY(self, index, value): + "Set Y with the value at the given index." + self.setOrdinate(1, index, value) + + def getZ(self, index): + "Get Z with the value at the given index." + return self.getOrdinate(2, index) + + def setZ(self, index, value): + "Set Z with the value at the given index." + self.setOrdinate(2, index, value) + + # ### Dimensions ### + @property + def size(self): + "Return the size of this coordinate sequence." + return capi.cs_getsize(self.ptr, byref(c_uint())) + + @property + def dims(self): + "Return the dimensions of this coordinate sequence." + return capi.cs_getdims(self.ptr, byref(c_uint())) + + @property + def hasz(self): + """ + Return whether this coordinate sequence is 3D. This property value is + inherited from the parent Geometry. + """ + return self._z + + # ### Other Methods ### + def clone(self): + "Clone this coordinate sequence." + return GEOSCoordSeq(capi.cs_clone(self.ptr), self.hasz) + + @property + def kml(self): + "Return the KML representation for the coordinates." + # Getting the substitution string depending on whether the coordinates have + # a Z dimension. + if self.hasz: + substr = "%s,%s,%s " + else: + substr = "%s,%s,0 " + return ( + "%s" + % "".join(substr % self[i] for i in range(len(self))).strip() + ) + + @property + def tuple(self): + "Return a tuple version of this coordinate sequence." + n = self.size + get_point = self._point_getter + if n == 1: + return get_point(0) + return tuple(get_point(i) for i in range(n)) + + @property + def is_counterclockwise(self): + """Return whether this coordinate sequence is counterclockwise.""" + if geos_version_tuple() < (3, 7): + # A modified shoelace algorithm to determine polygon orientation. + # See https://en.wikipedia.org/wiki/Shoelace_formula. + area = 0.0 + n = len(self) + for i in range(n): + j = (i + 1) % n + area += self[i][0] * self[j][1] + area -= self[j][0] * self[i][1] + return area > 0.0 + ret = c_byte() + if not capi.cs_is_ccw(self.ptr, byref(ret)): + raise GEOSException( + 'Error encountered in GEOS C function "%s".' % capi.cs_is_ccw.func_name + ) + return ret.value == 1 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/error.py b/venv/Lib/site-packages/django/contrib/gis/geos/error.py new file mode 100644 index 000000000..af2ac2fd4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/error.py @@ -0,0 +1,3 @@ +class GEOSException(Exception): + "The base GEOS exception, indicates a GEOS-related error." + pass diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/factory.py b/venv/Lib/site-packages/django/contrib/gis/geos/factory.py new file mode 100644 index 000000000..2c1c24741 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/factory.py @@ -0,0 +1,33 @@ +from django.contrib.gis.geos.geometry import GEOSGeometry, hex_regex, wkt_regex + + +def fromfile(file_h): + """ + Given a string file name, returns a GEOSGeometry. The file may contain WKB, + WKT, or HEX. + """ + # If given a file name, get a real handle. + if isinstance(file_h, str): + with open(file_h, "rb") as file_h: + buf = file_h.read() + else: + buf = file_h.read() + + # If we get WKB need to wrap in memoryview(), so run through regexes. + if isinstance(buf, bytes): + try: + decoded = buf.decode() + except UnicodeDecodeError: + pass + else: + if wkt_regex.match(decoded) or hex_regex.match(decoded): + return GEOSGeometry(decoded) + else: + return GEOSGeometry(buf) + + return GEOSGeometry(memoryview(buf)) + + +def fromstr(string, **kwargs): + "Given a string value, return a GEOSGeometry object." + return GEOSGeometry(string, **kwargs) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/geometry.py b/venv/Lib/site-packages/django/contrib/gis/geos/geometry.py new file mode 100644 index 000000000..8cee9a35d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/geometry.py @@ -0,0 +1,755 @@ +""" + This module contains the 'base' GEOSGeometry object -- all GEOS Geometries + inherit from this object. +""" +import re +from ctypes import addressof, byref, c_double + +from django.contrib.gis import gdal +from django.contrib.gis.geometry import hex_regex, json_regex, wkt_regex +from django.contrib.gis.geos import prototypes as capi +from django.contrib.gis.geos.base import GEOSBase +from django.contrib.gis.geos.coordseq import GEOSCoordSeq +from django.contrib.gis.geos.error import GEOSException +from django.contrib.gis.geos.libgeos import GEOM_PTR +from django.contrib.gis.geos.mutable_list import ListMixin +from django.contrib.gis.geos.prepared import PreparedGeometry +from django.contrib.gis.geos.prototypes.io import ewkb_w, wkb_r, wkb_w, wkt_r, wkt_w +from django.utils.deconstruct import deconstructible +from django.utils.encoding import force_bytes, force_str + + +class GEOSGeometryBase(GEOSBase): + + _GEOS_CLASSES = None + + ptr_type = GEOM_PTR + destructor = capi.destroy_geom + has_cs = False # Only Point, LineString, LinearRing have coordinate sequences + + def __init__(self, ptr, cls): + self._ptr = ptr + + # Setting the class type (e.g., Point, Polygon, etc.) + if type(self) in (GEOSGeometryBase, GEOSGeometry): + if cls is None: + if GEOSGeometryBase._GEOS_CLASSES is None: + # Inner imports avoid import conflicts with GEOSGeometry. + from .collections import ( + GeometryCollection, + MultiLineString, + MultiPoint, + MultiPolygon, + ) + from .linestring import LinearRing, LineString + from .point import Point + from .polygon import Polygon + + GEOSGeometryBase._GEOS_CLASSES = { + 0: Point, + 1: LineString, + 2: LinearRing, + 3: Polygon, + 4: MultiPoint, + 5: MultiLineString, + 6: MultiPolygon, + 7: GeometryCollection, + } + cls = GEOSGeometryBase._GEOS_CLASSES[self.geom_typeid] + self.__class__ = cls + self._post_init() + + def _post_init(self): + "Perform post-initialization setup." + # Setting the coordinate sequence for the geometry (will be None on + # geometries that do not have coordinate sequences) + self._cs = ( + GEOSCoordSeq(capi.get_cs(self.ptr), self.hasz) if self.has_cs else None + ) + + def __copy__(self): + """ + Return a clone because the copy of a GEOSGeometry may contain an + invalid pointer location if the original is garbage collected. + """ + return self.clone() + + def __deepcopy__(self, memodict): + """ + The `deepcopy` routine is used by the `Node` class of django.utils.tree; + thus, the protocol routine needs to be implemented to return correct + copies (clones) of these GEOS objects, which use C pointers. + """ + return self.clone() + + def __str__(self): + "EWKT is used for the string representation." + return self.ewkt + + def __repr__(self): + "Short-hand representation because WKT may be very large." + return "<%s object at %s>" % (self.geom_type, hex(addressof(self.ptr))) + + # Pickling support + def _to_pickle_wkb(self): + return bytes(self.wkb) + + def _from_pickle_wkb(self, wkb): + return wkb_r().read(memoryview(wkb)) + + def __getstate__(self): + # The pickled state is simply a tuple of the WKB (in string form) + # and the SRID. + return self._to_pickle_wkb(), self.srid + + def __setstate__(self, state): + # Instantiating from the tuple state that was pickled. + wkb, srid = state + ptr = self._from_pickle_wkb(wkb) + if not ptr: + raise GEOSException("Invalid Geometry loaded from pickled state.") + self.ptr = ptr + self._post_init() + self.srid = srid + + @classmethod + def _from_wkb(cls, wkb): + return wkb_r().read(wkb) + + @staticmethod + def from_ewkt(ewkt): + ewkt = force_bytes(ewkt) + srid = None + parts = ewkt.split(b";", 1) + if len(parts) == 2: + srid_part, wkt = parts + match = re.match(rb"SRID=(?P\-?\d+)", srid_part) + if not match: + raise ValueError("EWKT has invalid SRID part.") + srid = int(match["srid"]) + else: + wkt = ewkt + if not wkt: + raise ValueError("Expected WKT but got an empty string.") + return GEOSGeometry(GEOSGeometry._from_wkt(wkt), srid=srid) + + @staticmethod + def _from_wkt(wkt): + return wkt_r().read(wkt) + + @classmethod + def from_gml(cls, gml_string): + return gdal.OGRGeometry.from_gml(gml_string).geos + + # Comparison operators + def __eq__(self, other): + """ + Equivalence testing, a Geometry may be compared with another Geometry + or an EWKT representation. + """ + if isinstance(other, str): + try: + other = GEOSGeometry.from_ewkt(other) + except (ValueError, GEOSException): + return False + return ( + isinstance(other, GEOSGeometry) + and self.srid == other.srid + and self.equals_exact(other) + ) + + def __hash__(self): + return hash((self.srid, self.wkt)) + + # ### Geometry set-like operations ### + # Thanks to Sean Gillies for inspiration: + # http://lists.gispython.org/pipermail/community/2007-July/001034.html + # g = g1 | g2 + def __or__(self, other): + "Return the union of this Geometry and the other." + return self.union(other) + + # g = g1 & g2 + def __and__(self, other): + "Return the intersection of this Geometry and the other." + return self.intersection(other) + + # g = g1 - g2 + def __sub__(self, other): + "Return the difference this Geometry and the other." + return self.difference(other) + + # g = g1 ^ g2 + def __xor__(self, other): + "Return the symmetric difference of this Geometry and the other." + return self.sym_difference(other) + + # #### Coordinate Sequence Routines #### + @property + def coord_seq(self): + "Return a clone of the coordinate sequence for this Geometry." + if self.has_cs: + return self._cs.clone() + + # #### Geometry Info #### + @property + def geom_type(self): + "Return a string representing the Geometry type, e.g. 'Polygon'" + return capi.geos_type(self.ptr).decode() + + @property + def geom_typeid(self): + "Return an integer representing the Geometry type." + return capi.geos_typeid(self.ptr) + + @property + def num_geom(self): + "Return the number of geometries in the Geometry." + return capi.get_num_geoms(self.ptr) + + @property + def num_coords(self): + "Return the number of coordinates in the Geometry." + return capi.get_num_coords(self.ptr) + + @property + def num_points(self): + "Return the number points, or coordinates, in the Geometry." + return self.num_coords + + @property + def dims(self): + "Return the dimension of this Geometry (0=point, 1=line, 2=surface)." + return capi.get_dims(self.ptr) + + def normalize(self): + "Convert this Geometry to normal form (or canonical form)." + capi.geos_normalize(self.ptr) + + # #### Unary predicates #### + @property + def empty(self): + """ + Return a boolean indicating whether the set of points in this Geometry + are empty. + """ + return capi.geos_isempty(self.ptr) + + @property + def hasz(self): + "Return whether the geometry has a 3D dimension." + return capi.geos_hasz(self.ptr) + + @property + def ring(self): + "Return whether or not the geometry is a ring." + return capi.geos_isring(self.ptr) + + @property + def simple(self): + "Return false if the Geometry isn't simple." + return capi.geos_issimple(self.ptr) + + @property + def valid(self): + "Test the validity of this Geometry." + return capi.geos_isvalid(self.ptr) + + @property + def valid_reason(self): + """ + Return a string containing the reason for any invalidity. + """ + return capi.geos_isvalidreason(self.ptr).decode() + + # #### Binary predicates. #### + def contains(self, other): + "Return true if other.within(this) returns true." + return capi.geos_contains(self.ptr, other.ptr) + + def covers(self, other): + """ + Return True if the DE-9IM Intersection Matrix for the two geometries is + T*****FF*, *T****FF*, ***T**FF*, or ****T*FF*. If either geometry is + empty, return False. + """ + return capi.geos_covers(self.ptr, other.ptr) + + def crosses(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is T*T****** (for a point and a curve,a point and an area or a line and + an area) 0******** (for two curves). + """ + return capi.geos_crosses(self.ptr, other.ptr) + + def disjoint(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is FF*FF****. + """ + return capi.geos_disjoint(self.ptr, other.ptr) + + def equals(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is T*F**FFF*. + """ + return capi.geos_equals(self.ptr, other.ptr) + + def equals_exact(self, other, tolerance=0): + """ + Return true if the two Geometries are exactly equal, up to a + specified tolerance. + """ + return capi.geos_equalsexact(self.ptr, other.ptr, float(tolerance)) + + def intersects(self, other): + "Return true if disjoint return false." + return capi.geos_intersects(self.ptr, other.ptr) + + def overlaps(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is T*T***T** (for two points or two surfaces) 1*T***T** (for two curves). + """ + return capi.geos_overlaps(self.ptr, other.ptr) + + def relate_pattern(self, other, pattern): + """ + Return true if the elements in the DE-9IM intersection matrix for the + two Geometries match the elements in pattern. + """ + if not isinstance(pattern, str) or len(pattern) > 9: + raise GEOSException("invalid intersection matrix pattern") + return capi.geos_relatepattern(self.ptr, other.ptr, force_bytes(pattern)) + + def touches(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is FT*******, F**T***** or F***T****. + """ + return capi.geos_touches(self.ptr, other.ptr) + + def within(self, other): + """ + Return true if the DE-9IM intersection matrix for the two Geometries + is T*F**F***. + """ + return capi.geos_within(self.ptr, other.ptr) + + # #### SRID Routines #### + @property + def srid(self): + "Get the SRID for the geometry. Return None if no SRID is set." + s = capi.geos_get_srid(self.ptr) + if s == 0: + return None + else: + return s + + @srid.setter + def srid(self, srid): + "Set the SRID for the geometry." + capi.geos_set_srid(self.ptr, 0 if srid is None else srid) + + # #### Output Routines #### + @property + def ewkt(self): + """ + Return the EWKT (SRID + WKT) of the Geometry. + """ + srid = self.srid + return "SRID=%s;%s" % (srid, self.wkt) if srid else self.wkt + + @property + def wkt(self): + "Return the WKT (Well-Known Text) representation of this Geometry." + return wkt_w(dim=3 if self.hasz else 2, trim=True).write(self).decode() + + @property + def hex(self): + """ + Return the WKB of this Geometry in hexadecimal form. Please note + that the SRID is not included in this representation because it is not + a part of the OGC specification (use the `hexewkb` property instead). + """ + # A possible faster, all-python, implementation: + # str(self.wkb).encode('hex') + return wkb_w(dim=3 if self.hasz else 2).write_hex(self) + + @property + def hexewkb(self): + """ + Return the EWKB of this Geometry in hexadecimal form. This is an + extension of the WKB specification that includes SRID value that are + a part of this geometry. + """ + return ewkb_w(dim=3 if self.hasz else 2).write_hex(self) + + @property + def json(self): + """ + Return GeoJSON representation of this Geometry. + """ + return self.ogr.json + + geojson = json + + @property + def wkb(self): + """ + Return the WKB (Well-Known Binary) representation of this Geometry + as a Python buffer. SRID and Z values are not included, use the + `ewkb` property instead. + """ + return wkb_w(3 if self.hasz else 2).write(self) + + @property + def ewkb(self): + """ + Return the EWKB representation of this Geometry as a Python buffer. + This is an extension of the WKB specification that includes any SRID + value that are a part of this geometry. + """ + return ewkb_w(3 if self.hasz else 2).write(self) + + @property + def kml(self): + "Return the KML representation of this Geometry." + gtype = self.geom_type + return "<%s>%s" % (gtype, self.coord_seq.kml, gtype) + + @property + def prepared(self): + """ + Return a PreparedGeometry corresponding to this geometry -- it is + optimized for the contains, intersects, and covers operations. + """ + return PreparedGeometry(self) + + # #### GDAL-specific output routines #### + def _ogr_ptr(self): + return gdal.OGRGeometry._from_wkb(self.wkb) + + @property + def ogr(self): + "Return the OGR Geometry for this Geometry." + return gdal.OGRGeometry(self._ogr_ptr(), self.srs) + + @property + def srs(self): + "Return the OSR SpatialReference for SRID of this Geometry." + if self.srid: + try: + return gdal.SpatialReference(self.srid) + except (gdal.GDALException, gdal.SRSException): + pass + return None + + @property + def crs(self): + "Alias for `srs` property." + return self.srs + + def transform(self, ct, clone=False): + """ + Requires GDAL. Transform the geometry according to the given + transformation object, which may be an integer SRID, and WKT or + PROJ string. By default, transform the geometry in-place and return + nothing. However if the `clone` keyword is set, don't modify the + geometry and return a transformed clone instead. + """ + srid = self.srid + + if ct == srid: + # short-circuit where source & dest SRIDs match + if clone: + return self.clone() + else: + return + + if isinstance(ct, gdal.CoordTransform): + # We don't care about SRID because CoordTransform presupposes + # source SRS. + srid = None + elif srid is None or srid < 0: + raise GEOSException("Calling transform() with no SRID set is not supported") + + # Creating an OGR Geometry, which is then transformed. + g = gdal.OGRGeometry(self._ogr_ptr(), srid) + g.transform(ct) + # Getting a new GEOS pointer + ptr = g._geos_ptr() + if clone: + # User wants a cloned transformed geometry returned. + return GEOSGeometry(ptr, srid=g.srid) + if ptr: + # Reassigning pointer, and performing post-initialization setup + # again due to the reassignment. + capi.destroy_geom(self.ptr) + self.ptr = ptr + self._post_init() + self.srid = g.srid + else: + raise GEOSException("Transformed WKB was invalid.") + + # #### Topology Routines #### + def _topology(self, gptr): + "Return Geometry from the given pointer." + return GEOSGeometry(gptr, srid=self.srid) + + @property + def boundary(self): + "Return the boundary as a newly allocated Geometry object." + return self._topology(capi.geos_boundary(self.ptr)) + + def buffer(self, width, quadsegs=8): + """ + Return a geometry that represents all points whose distance from this + Geometry is less than or equal to distance. Calculations are in the + Spatial Reference System of this Geometry. The optional third parameter sets + the number of segment used to approximate a quarter circle (defaults to 8). + (Text from PostGIS documentation at ch. 6.1.3) + """ + return self._topology(capi.geos_buffer(self.ptr, width, quadsegs)) + + def buffer_with_style( + self, width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0 + ): + """ + Same as buffer() but allows customizing the style of the buffer. + + End cap style can be round (1), flat (2), or square (3). + Join style can be round (1), mitre (2), or bevel (3). + Mitre ratio limit only affects mitered join style. + """ + return self._topology( + capi.geos_bufferwithstyle( + self.ptr, width, quadsegs, end_cap_style, join_style, mitre_limit + ), + ) + + @property + def centroid(self): + """ + The centroid is equal to the centroid of the set of component Geometries + of highest dimension (since the lower-dimension geometries contribute zero + "weight" to the centroid). + """ + return self._topology(capi.geos_centroid(self.ptr)) + + @property + def convex_hull(self): + """ + Return the smallest convex Polygon that contains all the points + in the Geometry. + """ + return self._topology(capi.geos_convexhull(self.ptr)) + + def difference(self, other): + """ + Return a Geometry representing the points making up this Geometry + that do not make up other. + """ + return self._topology(capi.geos_difference(self.ptr, other.ptr)) + + @property + def envelope(self): + "Return the envelope for this geometry (a polygon)." + return self._topology(capi.geos_envelope(self.ptr)) + + def intersection(self, other): + "Return a Geometry representing the points shared by this Geometry and other." + return self._topology(capi.geos_intersection(self.ptr, other.ptr)) + + @property + def point_on_surface(self): + "Compute an interior point of this Geometry." + return self._topology(capi.geos_pointonsurface(self.ptr)) + + def relate(self, other): + "Return the DE-9IM intersection matrix for this Geometry and the other." + return capi.geos_relate(self.ptr, other.ptr).decode() + + def simplify(self, tolerance=0.0, preserve_topology=False): + """ + Return the Geometry, simplified using the Douglas-Peucker algorithm + to the specified tolerance (higher tolerance => less points). If no + tolerance provided, defaults to 0. + + By default, don't preserve topology - e.g. polygons can be split, + collapse to lines or disappear holes can be created or disappear, and + lines can cross. By specifying preserve_topology=True, the result will + have the same dimension and number of components as the input. This is + significantly slower. + """ + if preserve_topology: + return self._topology(capi.geos_preservesimplify(self.ptr, tolerance)) + else: + return self._topology(capi.geos_simplify(self.ptr, tolerance)) + + def sym_difference(self, other): + """ + Return a set combining the points in this Geometry not in other, + and the points in other not in this Geometry. + """ + return self._topology(capi.geos_symdifference(self.ptr, other.ptr)) + + @property + def unary_union(self): + "Return the union of all the elements of this geometry." + return self._topology(capi.geos_unary_union(self.ptr)) + + def union(self, other): + "Return a Geometry representing all the points in this Geometry and other." + return self._topology(capi.geos_union(self.ptr, other.ptr)) + + # #### Other Routines #### + @property + def area(self): + "Return the area of the Geometry." + return capi.geos_area(self.ptr, byref(c_double())) + + def distance(self, other): + """ + Return the distance between the closest points on this Geometry + and the other. Units will be in those of the coordinate system of + the Geometry. + """ + if not isinstance(other, GEOSGeometry): + raise TypeError("distance() works only on other GEOS Geometries.") + return capi.geos_distance(self.ptr, other.ptr, byref(c_double())) + + @property + def extent(self): + """ + Return the extent of this geometry as a 4-tuple, consisting of + (xmin, ymin, xmax, ymax). + """ + from .point import Point + + env = self.envelope + if isinstance(env, Point): + xmin, ymin = env.tuple + xmax, ymax = xmin, ymin + else: + xmin, ymin = env[0][0] + xmax, ymax = env[0][2] + return (xmin, ymin, xmax, ymax) + + @property + def length(self): + """ + Return the length of this Geometry (e.g., 0 for point, or the + circumference of a Polygon). + """ + return capi.geos_length(self.ptr, byref(c_double())) + + def clone(self): + "Clone this Geometry." + return GEOSGeometry(capi.geom_clone(self.ptr)) + + +class LinearGeometryMixin: + """ + Used for LineString and MultiLineString. + """ + + def interpolate(self, distance): + return self._topology(capi.geos_interpolate(self.ptr, distance)) + + def interpolate_normalized(self, distance): + return self._topology(capi.geos_interpolate_normalized(self.ptr, distance)) + + def project(self, point): + from .point import Point + + if not isinstance(point, Point): + raise TypeError("locate_point argument must be a Point") + return capi.geos_project(self.ptr, point.ptr) + + def project_normalized(self, point): + from .point import Point + + if not isinstance(point, Point): + raise TypeError("locate_point argument must be a Point") + return capi.geos_project_normalized(self.ptr, point.ptr) + + @property + def merged(self): + """ + Return the line merge of this Geometry. + """ + return self._topology(capi.geos_linemerge(self.ptr)) + + @property + def closed(self): + """ + Return whether or not this Geometry is closed. + """ + return capi.geos_isclosed(self.ptr) + + +@deconstructible +class GEOSGeometry(GEOSGeometryBase, ListMixin): + "A class that, generally, encapsulates a GEOS geometry." + + def __init__(self, geo_input, srid=None): + """ + The base constructor for GEOS geometry objects. It may take the + following inputs: + + * strings: + - WKT + - HEXEWKB (a PostGIS-specific canonical form) + - GeoJSON (requires GDAL) + * buffer: + - WKB + + The `srid` keyword specifies the Source Reference Identifier (SRID) + number for this Geometry. If not provided, it defaults to None. + """ + input_srid = None + if isinstance(geo_input, bytes): + geo_input = force_str(geo_input) + if isinstance(geo_input, str): + wkt_m = wkt_regex.match(geo_input) + if wkt_m: + # Handle WKT input. + if wkt_m["srid"]: + input_srid = int(wkt_m["srid"]) + g = self._from_wkt(force_bytes(wkt_m["wkt"])) + elif hex_regex.match(geo_input): + # Handle HEXEWKB input. + g = wkb_r().read(force_bytes(geo_input)) + elif json_regex.match(geo_input): + # Handle GeoJSON input. + ogr = gdal.OGRGeometry.from_json(geo_input) + g = ogr._geos_ptr() + input_srid = ogr.srid + else: + raise ValueError("String input unrecognized as WKT EWKT, and HEXEWKB.") + elif isinstance(geo_input, GEOM_PTR): + # When the input is a pointer to a geometry (GEOM_PTR). + g = geo_input + elif isinstance(geo_input, memoryview): + # When the input is a buffer (WKB). + g = wkb_r().read(geo_input) + elif isinstance(geo_input, GEOSGeometry): + g = capi.geom_clone(geo_input.ptr) + else: + raise TypeError("Improper geometry input type: %s" % type(geo_input)) + + if not g: + raise GEOSException("Could not initialize GEOS Geometry with given input.") + + input_srid = input_srid or capi.geos_get_srid(g) or None + if input_srid and srid and input_srid != srid: + raise ValueError("Input geometry already has SRID: %d." % input_srid) + + super().__init__(g, None) + # Set the SRID, if given. + srid = input_srid or srid + if srid and isinstance(srid, int): + self.srid = srid diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/io.py b/venv/Lib/site-packages/django/contrib/gis/geos/io.py new file mode 100644 index 000000000..d7898065f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/io.py @@ -0,0 +1,27 @@ +""" +Module that holds classes for performing I/O operations on GEOS geometry +objects. Specifically, this has Python implementations of WKB/WKT +reader and writer classes. +""" +from django.contrib.gis.geos.geometry import GEOSGeometry +from django.contrib.gis.geos.prototypes.io import ( + WKBWriter, + WKTWriter, + _WKBReader, + _WKTReader, +) + +__all__ = ["WKBWriter", "WKTWriter", "WKBReader", "WKTReader"] + + +# Public classes for (WKB|WKT)Reader, which return GEOSGeometry +class WKBReader(_WKBReader): + def read(self, wkb): + "Return a GEOSGeometry for the given WKB buffer." + return GEOSGeometry(super().read(wkb)) + + +class WKTReader(_WKTReader): + def read(self, wkt): + "Return a GEOSGeometry for the given WKT string." + return GEOSGeometry(super().read(wkt)) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/libgeos.py b/venv/Lib/site-packages/django/contrib/gis/geos/libgeos.py new file mode 100644 index 000000000..0002bef65 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/libgeos.py @@ -0,0 +1,174 @@ +""" + This module houses the ctypes initialization procedures, as well + as the notice and error handler function callbacks (get called + when an error occurs in GEOS). + + This module also houses GEOS Pointer utilities, including + get_pointer_arr(), and GEOM_PTR. +""" +import logging +import os +from ctypes import CDLL, CFUNCTYPE, POINTER, Structure, c_char_p +from ctypes.util import find_library + +from django.core.exceptions import ImproperlyConfigured +from django.utils.functional import SimpleLazyObject, cached_property +from django.utils.version import get_version_tuple + +logger = logging.getLogger("django.contrib.gis") + + +def load_geos(): + # Custom library path set? + try: + from django.conf import settings + + lib_path = settings.GEOS_LIBRARY_PATH + except (AttributeError, ImportError, ImproperlyConfigured, OSError): + lib_path = None + + # Setting the appropriate names for the GEOS-C library. + if lib_path: + lib_names = None + elif os.name == "nt": + # Windows NT libraries + lib_names = ["geos_c", "libgeos_c-1"] + elif os.name == "posix": + # *NIX libraries + lib_names = ["geos_c", "GEOS"] + else: + raise ImportError('Unsupported OS "%s"' % os.name) + + # Using the ctypes `find_library` utility to find the path to the GEOS + # shared library. This is better than manually specifying each library name + # and extension (e.g., libgeos_c.[so|so.1|dylib].). + if lib_names: + for lib_name in lib_names: + lib_path = find_library(lib_name) + if lib_path is not None: + break + + # No GEOS library could be found. + if lib_path is None: + raise ImportError( + 'Could not find the GEOS library (tried "%s"). ' + "Try setting GEOS_LIBRARY_PATH in your settings." % '", "'.join(lib_names) + ) + # Getting the GEOS C library. The C interface (CDLL) is used for + # both *NIX and Windows. + # See the GEOS C API source code for more details on the library function calls: + # https://geos.osgeo.org/doxygen/geos__c_8h_source.html + _lgeos = CDLL(lib_path) + # Here we set up the prototypes for the initGEOS_r and finishGEOS_r + # routines. These functions aren't actually called until they are + # attached to a GEOS context handle -- this actually occurs in + # geos/prototypes/threadsafe.py. + _lgeos.initGEOS_r.restype = CONTEXT_PTR + _lgeos.finishGEOS_r.argtypes = [CONTEXT_PTR] + # Set restype for compatibility across 32 and 64-bit platforms. + _lgeos.GEOSversion.restype = c_char_p + return _lgeos + + +# The notice and error handler C function callback definitions. +# Supposed to mimic the GEOS message handler (C below): +# typedef void (*GEOSMessageHandler)(const char *fmt, ...); +NOTICEFUNC = CFUNCTYPE(None, c_char_p, c_char_p) + + +def notice_h(fmt, lst): + fmt, lst = fmt.decode(), lst.decode() + try: + warn_msg = fmt % lst + except TypeError: + warn_msg = fmt + logger.warning("GEOS_NOTICE: %s\n", warn_msg) + + +notice_h = NOTICEFUNC(notice_h) + +ERRORFUNC = CFUNCTYPE(None, c_char_p, c_char_p) + + +def error_h(fmt, lst): + fmt, lst = fmt.decode(), lst.decode() + try: + err_msg = fmt % lst + except TypeError: + err_msg = fmt + logger.error("GEOS_ERROR: %s\n", err_msg) + + +error_h = ERRORFUNC(error_h) + +# #### GEOS Geometry C data structures, and utility functions. #### + + +# Opaque GEOS geometry structures, used for GEOM_PTR and CS_PTR +class GEOSGeom_t(Structure): + pass + + +class GEOSPrepGeom_t(Structure): + pass + + +class GEOSCoordSeq_t(Structure): + pass + + +class GEOSContextHandle_t(Structure): + pass + + +# Pointers to opaque GEOS geometry structures. +GEOM_PTR = POINTER(GEOSGeom_t) +PREPGEOM_PTR = POINTER(GEOSPrepGeom_t) +CS_PTR = POINTER(GEOSCoordSeq_t) +CONTEXT_PTR = POINTER(GEOSContextHandle_t) + + +lgeos = SimpleLazyObject(load_geos) + + +class GEOSFuncFactory: + """ + Lazy loading of GEOS functions. + """ + + argtypes = None + restype = None + errcheck = None + + def __init__(self, func_name, *, restype=None, errcheck=None, argtypes=None): + self.func_name = func_name + if restype is not None: + self.restype = restype + if errcheck is not None: + self.errcheck = errcheck + if argtypes is not None: + self.argtypes = argtypes + + def __call__(self, *args): + return self.func(*args) + + @cached_property + def func(self): + from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc + + func = GEOSFunc(self.func_name) + func.argtypes = self.argtypes or [] + func.restype = self.restype + if self.errcheck: + func.errcheck = self.errcheck + return func + + +def geos_version(): + """Return the string version of the GEOS library.""" + return lgeos.GEOSversion() + + +def geos_version_tuple(): + """Return the GEOS version as a tuple (major, minor, subminor).""" + return get_version_tuple(geos_version().decode()) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/linestring.py b/venv/Lib/site-packages/django/contrib/gis/geos/linestring.py new file mode 100644 index 000000000..78a265ceb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/linestring.py @@ -0,0 +1,193 @@ +from django.contrib.gis.geos import prototypes as capi +from django.contrib.gis.geos.coordseq import GEOSCoordSeq +from django.contrib.gis.geos.error import GEOSException +from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin +from django.contrib.gis.geos.point import Point +from django.contrib.gis.shortcuts import numpy + + +class LineString(LinearGeometryMixin, GEOSGeometry): + _init_func = capi.create_linestring + _minlength = 2 + has_cs = True + + def __init__(self, *args, **kwargs): + """ + Initialize on the given sequence -- may take lists, tuples, NumPy arrays + of X,Y pairs, or Point objects. If Point objects are used, ownership is + _not_ transferred to the LineString object. + + Examples: + ls = LineString((1, 1), (2, 2)) + ls = LineString([(1, 1), (2, 2)]) + ls = LineString(array([(1, 1), (2, 2)])) + ls = LineString(Point(1, 1), Point(2, 2)) + """ + # If only one argument provided, set the coords array appropriately + if len(args) == 1: + coords = args[0] + else: + coords = args + + if not ( + isinstance(coords, (tuple, list)) + or numpy + and isinstance(coords, numpy.ndarray) + ): + raise TypeError("Invalid initialization input for LineStrings.") + + # If SRID was passed in with the keyword arguments + srid = kwargs.get("srid") + + ncoords = len(coords) + if not ncoords: + super().__init__(self._init_func(None), srid=srid) + return + + if ncoords < self._minlength: + raise ValueError( + "%s requires at least %d points, got %s." + % ( + self.__class__.__name__, + self._minlength, + ncoords, + ) + ) + + numpy_coords = not isinstance(coords, (tuple, list)) + if numpy_coords: + shape = coords.shape # Using numpy's shape. + if len(shape) != 2: + raise TypeError("Too many dimensions.") + self._checkdim(shape[1]) + ndim = shape[1] + else: + # Getting the number of coords and the number of dimensions -- which + # must stay the same, e.g., no LineString((1, 2), (1, 2, 3)). + ndim = None + # Incrementing through each of the coordinates and verifying + for coord in coords: + if not isinstance(coord, (tuple, list, Point)): + raise TypeError( + "Each coordinate should be a sequence (list or tuple)" + ) + + if ndim is None: + ndim = len(coord) + self._checkdim(ndim) + elif len(coord) != ndim: + raise TypeError("Dimension mismatch.") + + # Creating a coordinate sequence object because it is easier to + # set the points using its methods. + cs = GEOSCoordSeq(capi.create_cs(ncoords, ndim), z=bool(ndim == 3)) + point_setter = cs._set_point_3d if ndim == 3 else cs._set_point_2d + + for i in range(ncoords): + if numpy_coords: + point_coords = coords[i, :] + elif isinstance(coords[i], Point): + point_coords = coords[i].tuple + else: + point_coords = coords[i] + point_setter(i, point_coords) + + # Calling the base geometry initialization with the returned pointer + # from the function. + super().__init__(self._init_func(cs.ptr), srid=srid) + + def __iter__(self): + "Allow iteration over this LineString." + for i in range(len(self)): + yield self[i] + + def __len__(self): + "Return the number of points in this LineString." + return len(self._cs) + + def _get_single_external(self, index): + return self._cs[index] + + _get_single_internal = _get_single_external + + def _set_list(self, length, items): + ndim = self._cs.dims + hasz = self._cs.hasz # I don't understand why these are different + srid = self.srid + + # create a new coordinate sequence and populate accordingly + cs = GEOSCoordSeq(capi.create_cs(length, ndim), z=hasz) + for i, c in enumerate(items): + cs[i] = c + + ptr = self._init_func(cs.ptr) + if ptr: + capi.destroy_geom(self.ptr) + self.ptr = ptr + if srid is not None: + self.srid = srid + self._post_init() + else: + # can this happen? + raise GEOSException("Geometry resulting from slice deletion was invalid.") + + def _set_single(self, index, value): + self._cs[index] = value + + def _checkdim(self, dim): + if dim not in (2, 3): + raise TypeError("Dimension mismatch.") + + # #### Sequence Properties #### + @property + def tuple(self): + "Return a tuple version of the geometry from the coordinate sequence." + return self._cs.tuple + + coords = tuple + + def _listarr(self, func): + """ + Return a sequence (list) corresponding with the given function. + Return a numpy array if possible. + """ + lst = [func(i) for i in range(len(self))] + if numpy: + return numpy.array(lst) # ARRRR! + else: + return lst + + @property + def array(self): + "Return a numpy array for the LineString." + return self._listarr(self._cs.__getitem__) + + @property + def x(self): + "Return a list or numpy array of the X variable." + return self._listarr(self._cs.getX) + + @property + def y(self): + "Return a list or numpy array of the Y variable." + return self._listarr(self._cs.getY) + + @property + def z(self): + "Return a list or numpy array of the Z variable." + if not self.hasz: + return None + else: + return self._listarr(self._cs.getZ) + + +# LinearRings are LineStrings used within Polygons. +class LinearRing(LineString): + _minlength = 4 + _init_func = capi.create_linearring + + @property + def is_counterclockwise(self): + if self.empty: + raise ValueError("Orientation of an empty LinearRing cannot be determined.") + return self._cs.is_counterclockwise diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/mutable_list.py b/venv/Lib/site-packages/django/contrib/gis/geos/mutable_list.py new file mode 100644 index 000000000..36131fe9c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/mutable_list.py @@ -0,0 +1,314 @@ +# Copyright (c) 2008-2009 Aryeh Leib Taurog, all rights reserved. +# Released under the New BSD license. +""" +This module contains a base type which provides list-style mutations +without specific data storage methods. + +See also http://static.aryehleib.com/oldsite/MutableLists.html + +Author: Aryeh Leib Taurog. +""" +from functools import total_ordering + + +@total_ordering +class ListMixin: + """ + A base class which provides complete list interface. + Derived classes must call ListMixin's __init__() function + and implement the following: + + function _get_single_external(self, i): + Return single item with index i for general use. + The index i will always satisfy 0 <= i < len(self). + + function _get_single_internal(self, i): + Same as above, but for use within the class [Optional] + Note that if _get_single_internal and _get_single_internal return + different types of objects, _set_list must distinguish + between the two and handle each appropriately. + + function _set_list(self, length, items): + Recreate the entire object. + + NOTE: items may be a generator which calls _get_single_internal. + Therefore, it is necessary to cache the values in a temporary: + temp = list(items) + before clobbering the original storage. + + function _set_single(self, i, value): + Set the single item at index i to value [Optional] + If left undefined, all mutations will result in rebuilding + the object using _set_list. + + function __len__(self): + Return the length + + int _minlength: + The minimum legal length [Optional] + + int _maxlength: + The maximum legal length [Optional] + + type or tuple _allowed: + A type or tuple of allowed item types [Optional] + """ + + _minlength = 0 + _maxlength = None + + # ### Python initialization and special list interface methods ### + + def __init__(self, *args, **kwargs): + if not hasattr(self, "_get_single_internal"): + self._get_single_internal = self._get_single_external + + if not hasattr(self, "_set_single"): + self._set_single = self._set_single_rebuild + self._assign_extended_slice = self._assign_extended_slice_rebuild + + super().__init__(*args, **kwargs) + + def __getitem__(self, index): + "Get the item(s) at the specified index/slice." + if isinstance(index, slice): + return [ + self._get_single_external(i) for i in range(*index.indices(len(self))) + ] + else: + index = self._checkindex(index) + return self._get_single_external(index) + + def __delitem__(self, index): + "Delete the item(s) at the specified index/slice." + if not isinstance(index, (int, slice)): + raise TypeError("%s is not a legal index" % index) + + # calculate new length and dimensions + origLen = len(self) + if isinstance(index, int): + index = self._checkindex(index) + indexRange = [index] + else: + indexRange = range(*index.indices(origLen)) + + newLen = origLen - len(indexRange) + newItems = ( + self._get_single_internal(i) for i in range(origLen) if i not in indexRange + ) + + self._rebuild(newLen, newItems) + + def __setitem__(self, index, val): + "Set the item(s) at the specified index/slice." + if isinstance(index, slice): + self._set_slice(index, val) + else: + index = self._checkindex(index) + self._check_allowed((val,)) + self._set_single(index, val) + + # ### Special methods for arithmetic operations ### + def __add__(self, other): + "add another list-like object" + return self.__class__([*self, *other]) + + def __radd__(self, other): + "add to another list-like object" + return other.__class__([*other, *self]) + + def __iadd__(self, other): + "add another list-like object to self" + self.extend(other) + return self + + def __mul__(self, n): + "multiply" + return self.__class__(list(self) * n) + + def __rmul__(self, n): + "multiply" + return self.__class__(list(self) * n) + + def __imul__(self, n): + "multiply" + if n <= 0: + del self[:] + else: + cache = list(self) + for i in range(n - 1): + self.extend(cache) + return self + + def __eq__(self, other): + olen = len(other) + for i in range(olen): + try: + c = self[i] == other[i] + except IndexError: + # self must be shorter + return False + if not c: + return False + return len(self) == olen + + def __lt__(self, other): + olen = len(other) + for i in range(olen): + try: + c = self[i] < other[i] + except IndexError: + # self must be shorter + return True + if c: + return c + elif other[i] < self[i]: + return False + return len(self) < olen + + # ### Public list interface Methods ### + # ## Non-mutating ## + def count(self, val): + "Standard list count method" + count = 0 + for i in self: + if val == i: + count += 1 + return count + + def index(self, val): + "Standard list index method" + for i in range(0, len(self)): + if self[i] == val: + return i + raise ValueError("%s not found in object" % val) + + # ## Mutating ## + def append(self, val): + "Standard list append method" + self[len(self) :] = [val] + + def extend(self, vals): + "Standard list extend method" + self[len(self) :] = vals + + def insert(self, index, val): + "Standard list insert method" + if not isinstance(index, int): + raise TypeError("%s is not a legal index" % index) + self[index:index] = [val] + + def pop(self, index=-1): + "Standard list pop method" + result = self[index] + del self[index] + return result + + def remove(self, val): + "Standard list remove method" + del self[self.index(val)] + + def reverse(self): + "Standard list reverse method" + self[:] = self[-1::-1] + + def sort(self, key=None, reverse=False): + "Standard list sort method" + self[:] = sorted(self, key=key, reverse=reverse) + + # ### Private routines ### + def _rebuild(self, newLen, newItems): + if newLen and newLen < self._minlength: + raise ValueError("Must have at least %d items" % self._minlength) + if self._maxlength is not None and newLen > self._maxlength: + raise ValueError("Cannot have more than %d items" % self._maxlength) + + self._set_list(newLen, newItems) + + def _set_single_rebuild(self, index, value): + self._set_slice(slice(index, index + 1, 1), [value]) + + def _checkindex(self, index): + length = len(self) + if 0 <= index < length: + return index + if -length <= index < 0: + return index + length + raise IndexError("invalid index: %s" % index) + + def _check_allowed(self, items): + if hasattr(self, "_allowed"): + if False in [isinstance(val, self._allowed) for val in items]: + raise TypeError("Invalid type encountered in the arguments.") + + def _set_slice(self, index, values): + "Assign values to a slice of the object" + try: + valueList = list(values) + except TypeError: + raise TypeError("can only assign an iterable to a slice") + + self._check_allowed(valueList) + + origLen = len(self) + start, stop, step = index.indices(origLen) + + # CAREFUL: index.step and step are not the same! + # step will never be None + if index.step is None: + self._assign_simple_slice(start, stop, valueList) + else: + self._assign_extended_slice(start, stop, step, valueList) + + def _assign_extended_slice_rebuild(self, start, stop, step, valueList): + "Assign an extended slice by rebuilding entire list" + indexList = range(start, stop, step) + # extended slice, only allow assigning slice of same size + if len(valueList) != len(indexList): + raise ValueError( + "attempt to assign sequence of size %d " + "to extended slice of size %d" % (len(valueList), len(indexList)) + ) + + # we're not changing the length of the sequence + newLen = len(self) + newVals = dict(zip(indexList, valueList)) + + def newItems(): + for i in range(newLen): + if i in newVals: + yield newVals[i] + else: + yield self._get_single_internal(i) + + self._rebuild(newLen, newItems()) + + def _assign_extended_slice(self, start, stop, step, valueList): + "Assign an extended slice by re-assigning individual items" + indexList = range(start, stop, step) + # extended slice, only allow assigning slice of same size + if len(valueList) != len(indexList): + raise ValueError( + "attempt to assign sequence of size %d " + "to extended slice of size %d" % (len(valueList), len(indexList)) + ) + + for i, val in zip(indexList, valueList): + self._set_single(i, val) + + def _assign_simple_slice(self, start, stop, valueList): + "Assign a simple slice; Can assign slice of any length" + origLen = len(self) + stop = max(start, stop) + newLen = origLen - stop + start + len(valueList) + + def newItems(): + for i in range(origLen + 1): + if i == start: + yield from valueList + + if i < origLen: + if i < start or i >= stop: + yield self._get_single_internal(i) + + self._rebuild(newLen, newItems()) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/point.py b/venv/Lib/site-packages/django/contrib/gis/geos/point.py new file mode 100644 index 000000000..06b266862 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/point.py @@ -0,0 +1,162 @@ +from ctypes import c_uint + +from django.contrib.gis import gdal +from django.contrib.gis.geos import prototypes as capi +from django.contrib.gis.geos.error import GEOSException +from django.contrib.gis.geos.geometry import GEOSGeometry + + +class Point(GEOSGeometry): + _minlength = 2 + _maxlength = 3 + has_cs = True + + def __init__(self, x=None, y=None, z=None, srid=None): + """ + The Point object may be initialized with either a tuple, or individual + parameters. + + For example: + >>> p = Point((5, 23)) # 2D point, passed in as a tuple + >>> p = Point(5, 23, 8) # 3D point, passed in with individual parameters + """ + if x is None: + coords = [] + elif isinstance(x, (tuple, list)): + # Here a tuple or list was passed in under the `x` parameter. + coords = x + elif isinstance(x, (float, int)) and isinstance(y, (float, int)): + # Here X, Y, and (optionally) Z were passed in individually, as parameters. + if isinstance(z, (float, int)): + coords = [x, y, z] + else: + coords = [x, y] + else: + raise TypeError("Invalid parameters given for Point initialization.") + + point = self._create_point(len(coords), coords) + + # Initializing using the address returned from the GEOS + # createPoint factory. + super().__init__(point, srid=srid) + + def _to_pickle_wkb(self): + return None if self.empty else super()._to_pickle_wkb() + + def _from_pickle_wkb(self, wkb): + return self._create_empty() if wkb is None else super()._from_pickle_wkb(wkb) + + def _ogr_ptr(self): + return ( + gdal.geometries.Point._create_empty() if self.empty else super()._ogr_ptr() + ) + + @classmethod + def _create_empty(cls): + return cls._create_point(None, None) + + @classmethod + def _create_point(cls, ndim, coords): + """ + Create a coordinate sequence, set X, Y, [Z], and create point + """ + if not ndim: + return capi.create_point(None) + + if ndim < 2 or ndim > 3: + raise TypeError("Invalid point dimension: %s" % ndim) + + cs = capi.create_cs(c_uint(1), c_uint(ndim)) + i = iter(coords) + capi.cs_setx(cs, 0, next(i)) + capi.cs_sety(cs, 0, next(i)) + if ndim == 3: + capi.cs_setz(cs, 0, next(i)) + + return capi.create_point(cs) + + def _set_list(self, length, items): + ptr = self._create_point(length, items) + if ptr: + srid = self.srid + capi.destroy_geom(self.ptr) + self._ptr = ptr + if srid is not None: + self.srid = srid + self._post_init() + else: + # can this happen? + raise GEOSException("Geometry resulting from slice deletion was invalid.") + + def _set_single(self, index, value): + self._cs.setOrdinate(index, 0, value) + + def __iter__(self): + "Iterate over coordinates of this Point." + for i in range(len(self)): + yield self[i] + + def __len__(self): + "Return the number of dimensions for this Point (either 0, 2 or 3)." + if self.empty: + return 0 + if self.hasz: + return 3 + else: + return 2 + + def _get_single_external(self, index): + if index == 0: + return self.x + elif index == 1: + return self.y + elif index == 2: + return self.z + + _get_single_internal = _get_single_external + + @property + def x(self): + "Return the X component of the Point." + return self._cs.getOrdinate(0, 0) + + @x.setter + def x(self, value): + "Set the X component of the Point." + self._cs.setOrdinate(0, 0, value) + + @property + def y(self): + "Return the Y component of the Point." + return self._cs.getOrdinate(1, 0) + + @y.setter + def y(self, value): + "Set the Y component of the Point." + self._cs.setOrdinate(1, 0, value) + + @property + def z(self): + "Return the Z component of the Point." + return self._cs.getOrdinate(2, 0) if self.hasz else None + + @z.setter + def z(self, value): + "Set the Z component of the Point." + if not self.hasz: + raise GEOSException("Cannot set Z on 2D Point.") + self._cs.setOrdinate(2, 0, value) + + # ### Tuple setting and retrieval routines. ### + @property + def tuple(self): + "Return a tuple of the point." + return self._cs.tuple + + @tuple.setter + def tuple(self, tup): + "Set the coordinates of the point with the given tuple." + self._cs[0] = tup + + # The tuple and coords properties + coords = tuple diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/polygon.py b/venv/Lib/site-packages/django/contrib/gis/geos/polygon.py new file mode 100644 index 000000000..e384614b0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/polygon.py @@ -0,0 +1,190 @@ +from django.contrib.gis.geos import prototypes as capi +from django.contrib.gis.geos.geometry import GEOSGeometry +from django.contrib.gis.geos.libgeos import GEOM_PTR +from django.contrib.gis.geos.linestring import LinearRing + + +class Polygon(GEOSGeometry): + _minlength = 1 + + def __init__(self, *args, **kwargs): + """ + Initialize on an exterior ring and a sequence of holes (both + instances may be either LinearRing instances, or a tuple/list + that may be constructed into a LinearRing). + + Examples of initialization, where shell, hole1, and hole2 are + valid LinearRing geometries: + >>> from django.contrib.gis.geos import LinearRing, Polygon + >>> shell = hole1 = hole2 = LinearRing() + >>> poly = Polygon(shell, hole1, hole2) + >>> poly = Polygon(shell, (hole1, hole2)) + + >>> # Example where a tuple parameters are used: + >>> poly = Polygon(((0, 0), (0, 10), (10, 10), (0, 10), (0, 0)), + ... ((4, 4), (4, 6), (6, 6), (6, 4), (4, 4))) + """ + if not args: + super().__init__(self._create_polygon(0, None), **kwargs) + return + + # Getting the ext_ring and init_holes parameters from the argument list + ext_ring, *init_holes = args + n_holes = len(init_holes) + + # If initialized as Polygon(shell, (LinearRing, LinearRing)) + # [for backward-compatibility] + if n_holes == 1 and isinstance(init_holes[0], (tuple, list)): + if not init_holes[0]: + init_holes = () + n_holes = 0 + elif isinstance(init_holes[0][0], LinearRing): + init_holes = init_holes[0] + n_holes = len(init_holes) + + polygon = self._create_polygon(n_holes + 1, [ext_ring, *init_holes]) + super().__init__(polygon, **kwargs) + + def __iter__(self): + "Iterate over each ring in the polygon." + for i in range(len(self)): + yield self[i] + + def __len__(self): + "Return the number of rings in this Polygon." + return self.num_interior_rings + 1 + + @classmethod + def from_bbox(cls, bbox): + "Construct a Polygon from a bounding box (4-tuple)." + x0, y0, x1, y1 = bbox + for z in bbox: + if not isinstance(z, (float, int)): + return GEOSGeometry( + "POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))" + % (x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) + ) + return Polygon(((x0, y0), (x0, y1), (x1, y1), (x1, y0), (x0, y0))) + + # ### These routines are needed for list-like operation w/ListMixin ### + def _create_polygon(self, length, items): + # Instantiate LinearRing objects if necessary, but don't clone them yet + # _construct_ring will throw a TypeError if a parameter isn't a valid ring + # If we cloned the pointers here, we wouldn't be able to clean up + # in case of error. + if not length: + return capi.create_empty_polygon() + + rings = [] + for r in items: + if isinstance(r, GEOM_PTR): + rings.append(r) + else: + rings.append(self._construct_ring(r)) + + shell = self._clone(rings.pop(0)) + + n_holes = length - 1 + if n_holes: + holes_param = (GEOM_PTR * n_holes)(*[self._clone(r) for r in rings]) + else: + holes_param = None + + return capi.create_polygon(shell, holes_param, n_holes) + + def _clone(self, g): + if isinstance(g, GEOM_PTR): + return capi.geom_clone(g) + else: + return capi.geom_clone(g.ptr) + + def _construct_ring( + self, + param, + msg=( + "Parameter must be a sequence of LinearRings or objects that can " + "initialize to LinearRings" + ), + ): + "Try to construct a ring from the given parameter." + if isinstance(param, LinearRing): + return param + try: + ring = LinearRing(param) + return ring + except TypeError: + raise TypeError(msg) + + def _set_list(self, length, items): + # Getting the current pointer, replacing with the newly constructed + # geometry, and destroying the old geometry. + prev_ptr = self.ptr + srid = self.srid + self.ptr = self._create_polygon(length, items) + if srid: + self.srid = srid + capi.destroy_geom(prev_ptr) + + def _get_single_internal(self, index): + """ + Return the ring at the specified index. The first index, 0, will + always return the exterior ring. Indices > 0 will return the + interior ring at the given index (e.g., poly[1] and poly[2] would + return the first and second interior ring, respectively). + + CAREFUL: Internal/External are not the same as Interior/Exterior! + Return a pointer from the existing geometries for use internally by the + object's methods. _get_single_external() returns a clone of the same + geometry for use by external code. + """ + if index == 0: + return capi.get_extring(self.ptr) + else: + # Getting the interior ring, have to subtract 1 from the index. + return capi.get_intring(self.ptr, index - 1) + + def _get_single_external(self, index): + return GEOSGeometry( + capi.geom_clone(self._get_single_internal(index)), srid=self.srid + ) + + _set_single = GEOSGeometry._set_single_rebuild + _assign_extended_slice = GEOSGeometry._assign_extended_slice_rebuild + + # #### Polygon Properties #### + @property + def num_interior_rings(self): + "Return the number of interior rings." + # Getting the number of rings + return capi.get_nrings(self.ptr) + + def _get_ext_ring(self): + "Get the exterior ring of the Polygon." + return self[0] + + def _set_ext_ring(self, ring): + "Set the exterior ring of the Polygon." + self[0] = ring + + # Properties for the exterior ring/shell. + exterior_ring = property(_get_ext_ring, _set_ext_ring) + shell = exterior_ring + + @property + def tuple(self): + "Get the tuple for each ring in this Polygon." + return tuple(self[i].tuple for i in range(len(self))) + + coords = tuple + + @property + def kml(self): + "Return the KML representation of this Polygon." + inner_kml = "".join( + "%s" % self[i + 1].kml + for i in range(self.num_interior_rings) + ) + return "%s%s" % ( + self[0].kml, + inner_kml, + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prepared.py b/venv/Lib/site-packages/django/contrib/gis/geos/prepared.py new file mode 100644 index 000000000..9c77d8a53 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prepared.py @@ -0,0 +1,51 @@ +from .base import GEOSBase +from .prototypes import prepared as capi + + +class PreparedGeometry(GEOSBase): + """ + A geometry that is prepared for performing certain operations. + At the moment this includes the contains covers, and intersects + operations. + """ + + ptr_type = capi.PREPGEOM_PTR + destructor = capi.prepared_destroy + + def __init__(self, geom): + # Keeping a reference to the original geometry object to prevent it + # from being garbage collected which could then crash the prepared one + # See #21662 + self._base_geom = geom + from .geometry import GEOSGeometry + + if not isinstance(geom, GEOSGeometry): + raise TypeError + self.ptr = capi.geos_prepare(geom.ptr) + + def contains(self, other): + return capi.prepared_contains(self.ptr, other.ptr) + + def contains_properly(self, other): + return capi.prepared_contains_properly(self.ptr, other.ptr) + + def covers(self, other): + return capi.prepared_covers(self.ptr, other.ptr) + + def intersects(self, other): + return capi.prepared_intersects(self.ptr, other.ptr) + + def crosses(self, other): + return capi.prepared_crosses(self.ptr, other.ptr) + + def disjoint(self, other): + return capi.prepared_disjoint(self.ptr, other.ptr) + + def overlaps(self, other): + return capi.prepared_overlaps(self.ptr, other.ptr) + + def touches(self, other): + return capi.prepared_touches(self.ptr, other.ptr) + + def within(self, other): + return capi.prepared_within(self.ptr, other.ptr) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__init__.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__init__.py new file mode 100644 index 000000000..0081a5add --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__init__.py @@ -0,0 +1,65 @@ +""" + This module contains all of the GEOS ctypes function prototypes. Each + prototype handles the interaction between the GEOS library and Python + via ctypes. +""" + +from django.contrib.gis.geos.prototypes.coordseq import ( # NOQA + create_cs, + cs_clone, + cs_getdims, + cs_getordinate, + cs_getsize, + cs_getx, + cs_gety, + cs_getz, + cs_is_ccw, + cs_setordinate, + cs_setx, + cs_sety, + cs_setz, + get_cs, +) +from django.contrib.gis.geos.prototypes.geom import ( # NOQA + create_collection, + create_empty_polygon, + create_linearring, + create_linestring, + create_point, + create_polygon, + destroy_geom, + geom_clone, + geos_get_srid, + geos_normalize, + geos_set_srid, + geos_type, + geos_typeid, + get_dims, + get_extring, + get_geomn, + get_intring, + get_nrings, + get_num_coords, + get_num_geoms, +) +from django.contrib.gis.geos.prototypes.misc import * # NOQA +from django.contrib.gis.geos.prototypes.predicates import ( # NOQA + geos_contains, + geos_covers, + geos_crosses, + geos_disjoint, + geos_equals, + geos_equalsexact, + geos_hasz, + geos_intersects, + geos_isclosed, + geos_isempty, + geos_isring, + geos_issimple, + geos_isvalid, + geos_overlaps, + geos_relatepattern, + geos_touches, + geos_within, +) +from django.contrib.gis.geos.prototypes.topology import * # NOQA diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43eda88d43e154437503992b7a85e2d3f88795d3 GIT binary patch literal 1814 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea318b7350f8c6ef56fc998d1da9db8d381e9da4 GIT binary patch literal 2520 zcmaJ?OK%%D5Z;HRT|F(^vK_}xq9kntp^aShSQJGHziJ?r4Li9ILKo{LvED?xR7q|S z<(gje7kcksTA-(%dMl7y4@GB4z2d}OfLwmV;c!0AaLAj@ng!qAKmT!AYFgHx2$sJx zfG5!8Z?K|u?v3O2l<^P z`2+C#uJ+s4em?|!Z*Ju?K;0!)p98+XwE7GB;KJ%X{0k%3D;M6`>B->P;d$XlL39<0 zU|f`=AjwqWML~W!QLL!I00cd^sO(<^XU{8tr!Ed)8$SrL zFl9kd)Pf-8G#}x(5d^>F;mFMVZi!Veq`QCk{B zSCcW*IPH%o0m^R1GtB_DBiVD<^B?LxQUOk7qXWmaJxWPnc{I0HD^V>r~) zT#a+}rgy|e7f-({c&?I+$*#HzRaY>Ti>w=VF#t@7Nq^9*iWV3bE7-N6E4(0}JPHEg zYb2ON-;0J+p-LiHcEzc{+g|ug2pzMj8e50%HZ+NLkYmYi*jjoc&-V{N^+TSq zjZBFLSy~0QwJF>BNv4hjPm%PSZ+;N5j#oF4OXR+q@kRgjRMv%DWib=LyMB$g=)m5F zvmc6B$4g*%1O`fMVpqp*3%hylED_#@i7vGFcsNM7Vko2hM#|zA%tH8D7dq|doWA~$ z6Y|7>eaxwA?#ur&5*P=aVoPN39^Fg^Gwu;;>|lq8G%=$FT%_SBdBaEpA^P8NPy)%w= z$JXY^_Ix)p`4n>A9Ox&fLU9fyX358y$*;5Da>cphBBe##$m=>~vD&gDff-g?pxM^`~{K4|S^_L*43+l1uyx4^{CJiz@1W zd6WL4&h_Vo0k49&HkfXt3eSakNlZ3kjSzT0Oop{^zaX2ZSXE>6pO_Ml!-Ntaaw?!n zDhaGmL6$>OU;;_foMBiA(+v~YV2sH^R;Or$6;WTe4@9BBhljN0YfQj9Q_L_6z><;9 zY(|1U{h_froF$eszSpj`%k4_r^J~8C+ihsR-Ev!Y%XZ2Rl;q04jgn)VQLBRU MZMW^Vpmps305+JSjsO4v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/io.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/io.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c77f32a9941724153d0b209116079230287ad57 GIT binary patch literal 10278 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 C)bz3d literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38ba7961e8af20a1082d27bbb945a8d7944b04d7 GIT binary patch literal 1304 zcma)6&u`l{6c#1fl4aR()9lA#*mxU^rS^Roh89bc4d~J!$#x)&36%IMtEEJbqyo6t z>{?)d!*09n?-8)mPP^^AOZO-{SuX=dfKTr|K9L{4?}2JENjw~X{qTGKbLe@0xZvF} z#NaVb^BWrBF;5WTOH%vHuLBm;Aq$Di1#(ai*|3gS)W@NW>k%8(2}}BTAjfseQsR}K z82&=ork(fXV z2@Fdjrf))aC=RZ?`Rw&Jq1Wrm&{~OB0!8nI($ubj)|DwhO5T8K4Ly7M{EBMT+NuF_ zOgCKHs%RzGa_g!SsxXfpw^V~|b<^*`HSl99Dr0$5z%k{Gpc0zWt{2IlNSHSdy6EEh zH|N(+FT1$NglcmM-Jr;-#?JjN#$&(DF0L=T0|(%=ZHiM~Sf#hPI4agqyvjr_yL9Io ztE;A*lWtssGFh?aI@`>{Zq$bkOgHJ>J4E}!9i;BCU#rXwmzBU`qng5je0TU5JjQ80 zLIWNnsJSl)3m{|zWIehiEEYa;8+7B7T%KxGpMk1hZxV{*i7wk38taJW)GdJ3+v9uA zwwqpq9S=J?v2w$W0nu+zH8kI1`3um1lv3_U2P(O-lasP4uTE6aU(u}2D*JVtuTCp%?4t{lqER2Cj>c=3vtU{>NK zZ%VZ+RD&Ak%d#>{r^a%ll~oRqS-OT?Y_@ueN4sfaG_e-hB?rQHj^C6n^`9pn(-)>m+yJ^<}I&j7j z#y;60U+j@D5c$F(U&tzVUp;W8?wMep{a5L~mt5RY+%vA-4cVvv<2O91)+4O$P);r- z%IPT5?(x!NXHsV-&fH74^FF{_7k{zqjxPyD=3_LWcNEV28A(a(&w`_gPo`w}_9*a4 ILXx-t07IL01^@s6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f97e13af47fea34e67ba9253b5fbffb64245dbc6 GIT binary patch literal 1785 zcmZ{k&yU+g6vsWb<2a79$^K}&{eiH6OH?&`>j5FCNO!kL(5`m3AdMm{$1_c4YkSO$ zy(N1sSN;(GB}<$*apS;=3%r?ek|L-h&-cBV=lSt@Z^8$Iz=G$G?|+?t;aS#i%6a$c zfb#@i`6o2Q!WKcq&QNY+J9n^?yVyml&&fKuhrPUuyV`d%KkwllvQ911A>L0G@o4w0 zg9Grp#0TG}0r-6ykltH_L(l+p0NMxL0S!Tipaakm=nm*E?UNzs9_R>kA9NS=0CW%Z z7U(|cZO{Yi!OvYd4(MIbLmlC?5%-|yE{xmZ^W7G`OB~4$)o7GY^<-3m!&J%d$N6=6UBgnB$5O#nY z!X4`2F7>I(P(W;;;WRrh)d9}d`@i}41P-Y|m_u&X+H#mYANLzSj*BFxaohxPY*2z7 z#_k<7|xZ(u~22#_=#9(wnFW)=?W^9+k~g^>e@bdofB@bTJ(yUit%$yA)Xp?tF;Lcqma+C!-##?z zmGF){*UW@HW%7!%qB3E}s$wM8C*HA$1M!sX!k`>R#A81-|0k>r+8~`C)MdL$L z8I!g$CQum@RT-0v&6OI;iXndZzR+zEP1Yr>D_R$ef!Gh05RRZwP>|l%De6A+e z?DzDz(D2I^zFDto>6-=KX#D?InvMUN`Rn)`0ap1K8rM2-M|Oxt?x^c~KHB`8wPm9K Md4K!hudNXM1L1f4YXATM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..994457e25bcbd8e6f3e92c21cec624727ebd5853 GIT binary patch literal 1288 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 E0cDkIU;qFB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/coordseq.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/coordseq.py new file mode 100644 index 000000000..ed05de99f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/coordseq.py @@ -0,0 +1,95 @@ +from ctypes import POINTER, c_byte, c_double, c_int, c_uint + +from django.contrib.gis.geos.libgeos import CS_PTR, GEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import GEOSException, last_arg_byref + + +# ## Error-checking routines specific to coordinate sequences. ## +def check_cs_op(result, func, cargs): + "Check the status code of a coordinate sequence operation." + if result == 0: + raise GEOSException("Could not set value on coordinate sequence") + else: + return result + + +def check_cs_get(result, func, cargs): + "Check the coordinate sequence retrieval." + check_cs_op(result, func, cargs) + # Object in by reference, return its value. + return last_arg_byref(cargs) + + +# ## Coordinate sequence prototype factory classes. ## +class CsInt(GEOSFuncFactory): + "For coordinate sequence routines that return an integer." + argtypes = [CS_PTR, POINTER(c_uint)] + restype = c_int + errcheck = staticmethod(check_cs_get) + + +class CsOperation(GEOSFuncFactory): + "For coordinate sequence operations." + restype = c_int + + def __init__(self, *args, ordinate=False, get=False, **kwargs): + if get: + # Get routines have double parameter passed-in by reference. + errcheck = check_cs_get + dbl_param = POINTER(c_double) + else: + errcheck = check_cs_op + dbl_param = c_double + + if ordinate: + # Get/Set ordinate routines have an extra uint parameter. + argtypes = [CS_PTR, c_uint, c_uint, dbl_param] + else: + argtypes = [CS_PTR, c_uint, dbl_param] + + super().__init__( + *args, **{**kwargs, "errcheck": errcheck, "argtypes": argtypes} + ) + + +class CsOutput(GEOSFuncFactory): + restype = CS_PTR + + @staticmethod + def errcheck(result, func, cargs): + if not result: + raise GEOSException( + "Error encountered checking Coordinate Sequence returned from GEOS " + 'C function "%s".' % func.__name__ + ) + return result + + +# ## Coordinate Sequence ctypes prototypes ## + +# Coordinate Sequence constructors & cloning. +cs_clone = CsOutput("GEOSCoordSeq_clone", argtypes=[CS_PTR]) +create_cs = CsOutput("GEOSCoordSeq_create", argtypes=[c_uint, c_uint]) +get_cs = CsOutput("GEOSGeom_getCoordSeq", argtypes=[GEOM_PTR]) + +# Getting, setting ordinate +cs_getordinate = CsOperation("GEOSCoordSeq_getOrdinate", ordinate=True, get=True) +cs_setordinate = CsOperation("GEOSCoordSeq_setOrdinate", ordinate=True) + +# For getting, x, y, z +cs_getx = CsOperation("GEOSCoordSeq_getX", get=True) +cs_gety = CsOperation("GEOSCoordSeq_getY", get=True) +cs_getz = CsOperation("GEOSCoordSeq_getZ", get=True) + +# For setting, x, y, z +cs_setx = CsOperation("GEOSCoordSeq_setX") +cs_sety = CsOperation("GEOSCoordSeq_setY") +cs_setz = CsOperation("GEOSCoordSeq_setZ") + +# These routines return size & dimensions. +cs_getsize = CsInt("GEOSCoordSeq_getSize") +cs_getdims = CsInt("GEOSCoordSeq_getDimensions") + +cs_is_ccw = GEOSFuncFactory( + "GEOSCoordSeq_isCCW", restype=c_int, argtypes=[CS_PTR, POINTER(c_byte)] +) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/errcheck.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/errcheck.py new file mode 100644 index 000000000..a527f513a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/errcheck.py @@ -0,0 +1,95 @@ +""" + Error checking functions for GEOS ctypes prototype functions. +""" +from ctypes import c_void_p, string_at + +from django.contrib.gis.geos.error import GEOSException +from django.contrib.gis.geos.libgeos import GEOSFuncFactory + +# Getting the `free` routine used to free the memory allocated for +# string pointers returned by GEOS. +free = GEOSFuncFactory("GEOSFree") +free.argtypes = [c_void_p] + + +def last_arg_byref(args): + "Return the last C argument's value by reference." + return args[-1]._obj.value + + +def check_dbl(result, func, cargs): + "Check the status code and returns the double value passed in by reference." + # Checking the status code + if result != 1: + return None + # Double passed in by reference, return its value. + return last_arg_byref(cargs) + + +def check_geom(result, func, cargs): + "Error checking on routines that return Geometries." + if not result: + raise GEOSException( + 'Error encountered checking Geometry returned from GEOS C function "%s".' + % func.__name__ + ) + return result + + +def check_minus_one(result, func, cargs): + "Error checking on routines that should not return -1." + if result == -1: + raise GEOSException( + 'Error encountered in GEOS C function "%s".' % func.__name__ + ) + else: + return result + + +def check_predicate(result, func, cargs): + "Error checking for unary/binary predicate functions." + if result == 1: + return True + elif result == 0: + return False + else: + raise GEOSException( + 'Error encountered on GEOS C predicate function "%s".' % func.__name__ + ) + + +def check_sized_string(result, func, cargs): + """ + Error checking for routines that return explicitly sized strings. + + This frees the memory allocated by GEOS at the result pointer. + """ + if not result: + raise GEOSException( + 'Invalid string pointer returned by GEOS C function "%s"' % func.__name__ + ) + # A c_size_t object is passed in by reference for the second + # argument on these routines, and its needed to determine the + # correct size. + s = string_at(result, last_arg_byref(cargs)) + # Freeing the memory allocated within GEOS + free(result) + return s + + +def check_string(result, func, cargs): + """ + Error checking for routines that return strings. + + This frees the memory allocated by GEOS at the result pointer. + """ + if not result: + raise GEOSException( + 'Error encountered checking string return value in GEOS C function "%s".' + % func.__name__ + ) + # Getting the string value at the pointer address. + s = string_at(result) + # Freeing the memory allocated within GEOS + free(result) + return s diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/geom.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/geom.py new file mode 100644 index 000000000..fa40a0b62 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/geom.py @@ -0,0 +1,90 @@ +from ctypes import POINTER, c_char_p, c_int, c_ubyte, c_uint + +from django.contrib.gis.geos.libgeos import CS_PTR, GEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import ( + check_geom, + check_minus_one, + check_string, +) + +# This is the return type used by binary output (WKB, HEX) routines. +c_uchar_p = POINTER(c_ubyte) + + +# We create a simple subclass of c_char_p here because when the response +# type is set to c_char_p, you get a _Python_ string and there's no way +# to access the string's address inside the error checking function. +# In other words, you can't free the memory allocated inside GEOS. Previously, +# the return type would just be omitted and the integer address would be +# used -- but this allows us to be specific in the function definition and +# keeps the reference so it may be free'd. +class geos_char_p(c_char_p): + pass + + +# ### ctypes factory classes ### +class GeomOutput(GEOSFuncFactory): + "For GEOS routines that return a geometry." + restype = GEOM_PTR + errcheck = staticmethod(check_geom) + + +class IntFromGeom(GEOSFuncFactory): + "Argument is a geometry, return type is an integer." + argtypes = [GEOM_PTR] + restype = c_int + errcheck = staticmethod(check_minus_one) + + +class StringFromGeom(GEOSFuncFactory): + "Argument is a Geometry, return type is a string." + argtypes = [GEOM_PTR] + restype = geos_char_p + errcheck = staticmethod(check_string) + + +# ### ctypes prototypes ### + +# The GEOS geometry type, typeid, num_coordinates and number of geometries +geos_normalize = IntFromGeom("GEOSNormalize") +geos_type = StringFromGeom("GEOSGeomType") +geos_typeid = IntFromGeom("GEOSGeomTypeId") +get_dims = GEOSFuncFactory("GEOSGeom_getDimensions", argtypes=[GEOM_PTR], restype=c_int) +get_num_coords = IntFromGeom("GEOSGetNumCoordinates") +get_num_geoms = IntFromGeom("GEOSGetNumGeometries") + +# Geometry creation factories +create_point = GeomOutput("GEOSGeom_createPoint", argtypes=[CS_PTR]) +create_linestring = GeomOutput("GEOSGeom_createLineString", argtypes=[CS_PTR]) +create_linearring = GeomOutput("GEOSGeom_createLinearRing", argtypes=[CS_PTR]) + +# Polygon and collection creation routines need argument types defined +# for compatibility with some platforms, e.g. macOS ARM64. With argtypes +# defined, arrays are automatically cast and byref() calls are not needed. +create_polygon = GeomOutput( + "GEOSGeom_createPolygon", + argtypes=[GEOM_PTR, POINTER(GEOM_PTR), c_uint], +) +create_empty_polygon = GeomOutput("GEOSGeom_createEmptyPolygon", argtypes=[]) +create_collection = GeomOutput( + "GEOSGeom_createCollection", + argtypes=[c_int, POINTER(GEOM_PTR), c_uint], +) + +# Ring routines +get_extring = GeomOutput("GEOSGetExteriorRing", argtypes=[GEOM_PTR]) +get_intring = GeomOutput("GEOSGetInteriorRingN", argtypes=[GEOM_PTR, c_int]) +get_nrings = IntFromGeom("GEOSGetNumInteriorRings") + +# Collection Routines +get_geomn = GeomOutput("GEOSGetGeometryN", argtypes=[GEOM_PTR, c_int]) + +# Cloning +geom_clone = GEOSFuncFactory("GEOSGeom_clone", argtypes=[GEOM_PTR], restype=GEOM_PTR) + +# Destruction routine. +destroy_geom = GEOSFuncFactory("GEOSGeom_destroy", argtypes=[GEOM_PTR]) + +# SRID routines +geos_get_srid = GEOSFuncFactory("GEOSGetSRID", argtypes=[GEOM_PTR], restype=c_int) +geos_set_srid = GEOSFuncFactory("GEOSSetSRID", argtypes=[GEOM_PTR, c_int]) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/io.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/io.py new file mode 100644 index 000000000..555d0e3a2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/io.py @@ -0,0 +1,366 @@ +import threading +from ctypes import POINTER, Structure, byref, c_byte, c_char_p, c_int, c_size_t + +from django.contrib.gis.geos.base import GEOSBase +from django.contrib.gis.geos.libgeos import ( + GEOM_PTR, + GEOSFuncFactory, + geos_version_tuple, +) +from django.contrib.gis.geos.prototypes.errcheck import ( + check_geom, + check_sized_string, + check_string, +) +from django.contrib.gis.geos.prototypes.geom import c_uchar_p, geos_char_p +from django.utils.encoding import force_bytes + + +# ### The WKB/WKT Reader/Writer structures and pointers ### +class WKTReader_st(Structure): + pass + + +class WKTWriter_st(Structure): + pass + + +class WKBReader_st(Structure): + pass + + +class WKBWriter_st(Structure): + pass + + +WKT_READ_PTR = POINTER(WKTReader_st) +WKT_WRITE_PTR = POINTER(WKTWriter_st) +WKB_READ_PTR = POINTER(WKBReader_st) +WKB_WRITE_PTR = POINTER(WKBReader_st) + +# WKTReader routines +wkt_reader_create = GEOSFuncFactory("GEOSWKTReader_create", restype=WKT_READ_PTR) +wkt_reader_destroy = GEOSFuncFactory("GEOSWKTReader_destroy", argtypes=[WKT_READ_PTR]) + +wkt_reader_read = GEOSFuncFactory( + "GEOSWKTReader_read", + argtypes=[WKT_READ_PTR, c_char_p], + restype=GEOM_PTR, + errcheck=check_geom, +) +# WKTWriter routines +wkt_writer_create = GEOSFuncFactory("GEOSWKTWriter_create", restype=WKT_WRITE_PTR) +wkt_writer_destroy = GEOSFuncFactory("GEOSWKTWriter_destroy", argtypes=[WKT_WRITE_PTR]) + +wkt_writer_write = GEOSFuncFactory( + "GEOSWKTWriter_write", + argtypes=[WKT_WRITE_PTR, GEOM_PTR], + restype=geos_char_p, + errcheck=check_string, +) + +wkt_writer_get_outdim = GEOSFuncFactory( + "GEOSWKTWriter_getOutputDimension", argtypes=[WKT_WRITE_PTR], restype=c_int +) +wkt_writer_set_outdim = GEOSFuncFactory( + "GEOSWKTWriter_setOutputDimension", argtypes=[WKT_WRITE_PTR, c_int] +) + +wkt_writer_set_trim = GEOSFuncFactory( + "GEOSWKTWriter_setTrim", argtypes=[WKT_WRITE_PTR, c_byte] +) +wkt_writer_set_precision = GEOSFuncFactory( + "GEOSWKTWriter_setRoundingPrecision", argtypes=[WKT_WRITE_PTR, c_int] +) + +# WKBReader routines +wkb_reader_create = GEOSFuncFactory("GEOSWKBReader_create", restype=WKB_READ_PTR) +wkb_reader_destroy = GEOSFuncFactory("GEOSWKBReader_destroy", argtypes=[WKB_READ_PTR]) + + +class WKBReadFunc(GEOSFuncFactory): + # Although the function definitions take `const unsigned char *` + # as their parameter, we use c_char_p here so the function may + # take Python strings directly as parameters. Inside Python there + # is not a difference between signed and unsigned characters, so + # it is not a problem. + argtypes = [WKB_READ_PTR, c_char_p, c_size_t] + restype = GEOM_PTR + errcheck = staticmethod(check_geom) + + +wkb_reader_read = WKBReadFunc("GEOSWKBReader_read") +wkb_reader_read_hex = WKBReadFunc("GEOSWKBReader_readHEX") + +# WKBWriter routines +wkb_writer_create = GEOSFuncFactory("GEOSWKBWriter_create", restype=WKB_WRITE_PTR) +wkb_writer_destroy = GEOSFuncFactory("GEOSWKBWriter_destroy", argtypes=[WKB_WRITE_PTR]) + + +# WKB Writing prototypes. +class WKBWriteFunc(GEOSFuncFactory): + argtypes = [WKB_WRITE_PTR, GEOM_PTR, POINTER(c_size_t)] + restype = c_uchar_p + errcheck = staticmethod(check_sized_string) + + +wkb_writer_write = WKBWriteFunc("GEOSWKBWriter_write") +wkb_writer_write_hex = WKBWriteFunc("GEOSWKBWriter_writeHEX") + + +# WKBWriter property getter/setter prototypes. +class WKBWriterGet(GEOSFuncFactory): + argtypes = [WKB_WRITE_PTR] + restype = c_int + + +class WKBWriterSet(GEOSFuncFactory): + argtypes = [WKB_WRITE_PTR, c_int] + + +wkb_writer_get_byteorder = WKBWriterGet("GEOSWKBWriter_getByteOrder") +wkb_writer_set_byteorder = WKBWriterSet("GEOSWKBWriter_setByteOrder") +wkb_writer_get_outdim = WKBWriterGet("GEOSWKBWriter_getOutputDimension") +wkb_writer_set_outdim = WKBWriterSet("GEOSWKBWriter_setOutputDimension") +wkb_writer_get_include_srid = WKBWriterGet( + "GEOSWKBWriter_getIncludeSRID", restype=c_byte +) +wkb_writer_set_include_srid = WKBWriterSet( + "GEOSWKBWriter_setIncludeSRID", argtypes=[WKB_WRITE_PTR, c_byte] +) + + +# ### Base I/O Class ### +class IOBase(GEOSBase): + "Base class for GEOS I/O objects." + + def __init__(self): + # Getting the pointer with the constructor. + self.ptr = self._constructor() + # Loading the real destructor function at this point as doing it in + # __del__ is too late (import error). + self.destructor.func + + +# ### Base WKB/WKT Reading and Writing objects ### + + +# Non-public WKB/WKT reader classes for internal use because +# their `read` methods return _pointers_ instead of GEOSGeometry +# objects. +class _WKTReader(IOBase): + _constructor = wkt_reader_create + ptr_type = WKT_READ_PTR + destructor = wkt_reader_destroy + + def read(self, wkt): + if not isinstance(wkt, (bytes, str)): + raise TypeError + return wkt_reader_read(self.ptr, force_bytes(wkt)) + + +class _WKBReader(IOBase): + _constructor = wkb_reader_create + ptr_type = WKB_READ_PTR + destructor = wkb_reader_destroy + + def read(self, wkb): + "Return a _pointer_ to C GEOS Geometry object from the given WKB." + if isinstance(wkb, memoryview): + wkb_s = bytes(wkb) + return wkb_reader_read(self.ptr, wkb_s, len(wkb_s)) + elif isinstance(wkb, (bytes, str)): + return wkb_reader_read_hex(self.ptr, wkb, len(wkb)) + else: + raise TypeError + + +# ### WKB/WKT Writer Classes ### +class WKTWriter(IOBase): + _constructor = wkt_writer_create + ptr_type = WKT_WRITE_PTR + destructor = wkt_writer_destroy + + _trim = False + _precision = None + + def __init__(self, dim=2, trim=False, precision=None): + super().__init__() + if bool(trim) != self._trim: + self.trim = trim + if precision is not None: + self.precision = precision + self.outdim = dim + + def write(self, geom): + "Return the WKT representation of the given geometry." + return wkt_writer_write(self.ptr, geom.ptr) + + @property + def outdim(self): + return wkt_writer_get_outdim(self.ptr) + + @outdim.setter + def outdim(self, new_dim): + if new_dim not in (2, 3): + raise ValueError("WKT output dimension must be 2 or 3") + wkt_writer_set_outdim(self.ptr, new_dim) + + @property + def trim(self): + return self._trim + + @trim.setter + def trim(self, flag): + if bool(flag) != self._trim: + self._trim = bool(flag) + wkt_writer_set_trim(self.ptr, self._trim) + + @property + def precision(self): + return self._precision + + @precision.setter + def precision(self, precision): + if (not isinstance(precision, int) or precision < 0) and precision is not None: + raise AttributeError( + "WKT output rounding precision must be non-negative integer or None." + ) + if precision != self._precision: + self._precision = precision + wkt_writer_set_precision(self.ptr, -1 if precision is None else precision) + + +class WKBWriter(IOBase): + _constructor = wkb_writer_create + ptr_type = WKB_WRITE_PTR + destructor = wkb_writer_destroy + geos_version = geos_version_tuple() + + def __init__(self, dim=2): + super().__init__() + self.outdim = dim + + def _handle_empty_point(self, geom): + from django.contrib.gis.geos import Point + + if isinstance(geom, Point) and geom.empty: + if self.srid: + # PostGIS uses POINT(NaN NaN) for WKB representation of empty + # points. Use it for EWKB as it's a PostGIS specific format. + # https://trac.osgeo.org/postgis/ticket/3181 + geom = Point(float("NaN"), float("NaN"), srid=geom.srid) + else: + raise ValueError("Empty point is not representable in WKB.") + return geom + + def write(self, geom): + "Return the WKB representation of the given geometry." + from django.contrib.gis.geos import Polygon + + geom = self._handle_empty_point(geom) + wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t())) + if self.geos_version < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty: + # Fix GEOS output for empty polygon. + # See https://trac.osgeo.org/geos/ticket/680. + wkb = wkb[:-8] + b"\0" * 4 + return memoryview(wkb) + + def write_hex(self, geom): + "Return the HEXEWKB representation of the given geometry." + from django.contrib.gis.geos.polygon import Polygon + + geom = self._handle_empty_point(geom) + wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t())) + if self.geos_version < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty: + wkb = wkb[:-16] + b"0" * 8 + return wkb + + # ### WKBWriter Properties ### + + # Property for getting/setting the byteorder. + def _get_byteorder(self): + return wkb_writer_get_byteorder(self.ptr) + + def _set_byteorder(self, order): + if order not in (0, 1): + raise ValueError( + "Byte order parameter must be 0 (Big Endian) or 1 (Little Endian)." + ) + wkb_writer_set_byteorder(self.ptr, order) + + byteorder = property(_get_byteorder, _set_byteorder) + + # Property for getting/setting the output dimension. + @property + def outdim(self): + return wkb_writer_get_outdim(self.ptr) + + @outdim.setter + def outdim(self, new_dim): + if new_dim not in (2, 3): + raise ValueError("WKB output dimension must be 2 or 3") + wkb_writer_set_outdim(self.ptr, new_dim) + + # Property for getting/setting the include srid flag. + @property + def srid(self): + return bool(wkb_writer_get_include_srid(self.ptr)) + + @srid.setter + def srid(self, include): + wkb_writer_set_include_srid(self.ptr, bool(include)) + + +# `ThreadLocalIO` object holds instances of the WKT and WKB reader/writer +# objects that are local to the thread. The `GEOSGeometry` internals +# access these instances by calling the module-level functions, defined +# below. +class ThreadLocalIO(threading.local): + wkt_r = None + wkt_w = None + wkb_r = None + wkb_w = None + ewkb_w = None + + +thread_context = ThreadLocalIO() + + +# These module-level routines return the I/O object that is local to the +# thread. If the I/O object does not exist yet it will be initialized. +def wkt_r(): + thread_context.wkt_r = thread_context.wkt_r or _WKTReader() + return thread_context.wkt_r + + +def wkt_w(dim=2, trim=False, precision=None): + if not thread_context.wkt_w: + thread_context.wkt_w = WKTWriter(dim=dim, trim=trim, precision=precision) + else: + thread_context.wkt_w.outdim = dim + thread_context.wkt_w.trim = trim + thread_context.wkt_w.precision = precision + return thread_context.wkt_w + + +def wkb_r(): + thread_context.wkb_r = thread_context.wkb_r or _WKBReader() + return thread_context.wkb_r + + +def wkb_w(dim=2): + if not thread_context.wkb_w: + thread_context.wkb_w = WKBWriter(dim=dim) + else: + thread_context.wkb_w.outdim = dim + return thread_context.wkb_w + + +def ewkb_w(dim=2): + if not thread_context.ewkb_w: + thread_context.ewkb_w = WKBWriter(dim=dim) + thread_context.ewkb_w.srid = True + else: + thread_context.ewkb_w.outdim = dim + return thread_context.ewkb_w diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/misc.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/misc.py new file mode 100644 index 000000000..fccd0ecc9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/misc.py @@ -0,0 +1,34 @@ +""" + This module is for the miscellaneous GEOS routines, particularly the + ones that return the area, distance, and length. +""" +from ctypes import POINTER, c_double, c_int + +from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import check_dbl, check_string +from django.contrib.gis.geos.prototypes.geom import geos_char_p + +__all__ = ["geos_area", "geos_distance", "geos_length", "geos_isvalidreason"] + + +class DblFromGeom(GEOSFuncFactory): + """ + Argument is a Geometry, return type is double that is passed + in by reference as the last argument. + """ + + restype = c_int # Status code returned + errcheck = staticmethod(check_dbl) + + +# ### ctypes prototypes ### + +# Area, distance, and length prototypes. +geos_area = DblFromGeom("GEOSArea", argtypes=[GEOM_PTR, POINTER(c_double)]) +geos_distance = DblFromGeom( + "GEOSDistance", argtypes=[GEOM_PTR, GEOM_PTR, POINTER(c_double)] +) +geos_length = DblFromGeom("GEOSLength", argtypes=[GEOM_PTR, POINTER(c_double)]) +geos_isvalidreason = GEOSFuncFactory( + "GEOSisValidReason", restype=geos_char_p, errcheck=check_string, argtypes=[GEOM_PTR] +) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/predicates.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/predicates.py new file mode 100644 index 000000000..d2e113a73 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/predicates.py @@ -0,0 +1,47 @@ +""" + This module houses the GEOS ctypes prototype functions for the + unary and binary predicate operations on geometries. +""" +from ctypes import c_byte, c_char_p, c_double + +from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import check_predicate + + +# ## Binary & unary predicate factories ## +class UnaryPredicate(GEOSFuncFactory): + "For GEOS unary predicate functions." + argtypes = [GEOM_PTR] + restype = c_byte + errcheck = staticmethod(check_predicate) + + +class BinaryPredicate(UnaryPredicate): + "For GEOS binary predicate functions." + argtypes = [GEOM_PTR, GEOM_PTR] + + +# ## Unary Predicates ## +geos_hasz = UnaryPredicate("GEOSHasZ") +geos_isclosed = UnaryPredicate("GEOSisClosed") +geos_isempty = UnaryPredicate("GEOSisEmpty") +geos_isring = UnaryPredicate("GEOSisRing") +geos_issimple = UnaryPredicate("GEOSisSimple") +geos_isvalid = UnaryPredicate("GEOSisValid") + +# ## Binary Predicates ## +geos_contains = BinaryPredicate("GEOSContains") +geos_covers = BinaryPredicate("GEOSCovers") +geos_crosses = BinaryPredicate("GEOSCrosses") +geos_disjoint = BinaryPredicate("GEOSDisjoint") +geos_equals = BinaryPredicate("GEOSEquals") +geos_equalsexact = BinaryPredicate( + "GEOSEqualsExact", argtypes=[GEOM_PTR, GEOM_PTR, c_double] +) +geos_intersects = BinaryPredicate("GEOSIntersects") +geos_overlaps = BinaryPredicate("GEOSOverlaps") +geos_relatepattern = BinaryPredicate( + "GEOSRelatePattern", argtypes=[GEOM_PTR, GEOM_PTR, c_char_p] +) +geos_touches = BinaryPredicate("GEOSTouches") +geos_within = BinaryPredicate("GEOSWithin") diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/prepared.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/prepared.py new file mode 100644 index 000000000..4fdfab30e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/prepared.py @@ -0,0 +1,26 @@ +from ctypes import c_byte + +from django.contrib.gis.geos.libgeos import GEOM_PTR, PREPGEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import check_predicate + +# Prepared geometry constructor and destructors. +geos_prepare = GEOSFuncFactory("GEOSPrepare", argtypes=[GEOM_PTR], restype=PREPGEOM_PTR) +prepared_destroy = GEOSFuncFactory("GEOSPreparedGeom_destroy", argtypes=[PREPGEOM_PTR]) + + +# Prepared geometry binary predicate support. +class PreparedPredicate(GEOSFuncFactory): + argtypes = [PREPGEOM_PTR, GEOM_PTR] + restype = c_byte + errcheck = staticmethod(check_predicate) + + +prepared_contains = PreparedPredicate("GEOSPreparedContains") +prepared_contains_properly = PreparedPredicate("GEOSPreparedContainsProperly") +prepared_covers = PreparedPredicate("GEOSPreparedCovers") +prepared_crosses = PreparedPredicate("GEOSPreparedCrosses") +prepared_disjoint = PreparedPredicate("GEOSPreparedDisjoint") +prepared_intersects = PreparedPredicate("GEOSPreparedIntersects") +prepared_overlaps = PreparedPredicate("GEOSPreparedOverlaps") +prepared_touches = PreparedPredicate("GEOSPreparedTouches") +prepared_within = PreparedPredicate("GEOSPreparedWithin") diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/threadsafe.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/threadsafe.py new file mode 100644 index 000000000..d4f7ffb8a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/threadsafe.py @@ -0,0 +1,77 @@ +import threading + +from django.contrib.gis.geos.base import GEOSBase +from django.contrib.gis.geos.libgeos import CONTEXT_PTR, error_h, lgeos, notice_h + + +class GEOSContextHandle(GEOSBase): + """Represent a GEOS context handle.""" + + ptr_type = CONTEXT_PTR + destructor = lgeos.finishGEOS_r + + def __init__(self): + # Initializing the context handler for this thread with + # the notice and error handler. + self.ptr = lgeos.initGEOS_r(notice_h, error_h) + + +# Defining a thread-local object and creating an instance +# to hold a reference to GEOSContextHandle for this thread. +class GEOSContext(threading.local): + handle = None + + +thread_context = GEOSContext() + + +class GEOSFunc: + """ + Serve as a wrapper for GEOS C Functions. Use thread-safe function + variants when available. + """ + + def __init__(self, func_name): + # GEOS thread-safe function signatures end with '_r' and take an + # additional context handle parameter. + self.cfunc = getattr(lgeos, func_name + "_r") + # Create a reference to thread_context so it's not garbage-collected + # before an attempt to call this object. + self.thread_context = thread_context + + def __call__(self, *args): + # Create a context handle if one doesn't exist for this thread. + self.thread_context.handle = self.thread_context.handle or GEOSContextHandle() + # Call the threaded GEOS routine with the pointer of the context handle + # as the first argument. + return self.cfunc(self.thread_context.handle.ptr, *args) + + def __str__(self): + return self.cfunc.__name__ + + # argtypes property + def _get_argtypes(self): + return self.cfunc.argtypes + + def _set_argtypes(self, argtypes): + self.cfunc.argtypes = [CONTEXT_PTR, *argtypes] + + argtypes = property(_get_argtypes, _set_argtypes) + + # restype property + def _get_restype(self): + return self.cfunc.restype + + def _set_restype(self, restype): + self.cfunc.restype = restype + + restype = property(_get_restype, _set_restype) + + # errcheck property + def _get_errcheck(self): + return self.cfunc.errcheck + + def _set_errcheck(self, errcheck): + self.cfunc.errcheck = errcheck + + errcheck = property(_get_errcheck, _set_errcheck) diff --git a/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/topology.py b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/topology.py new file mode 100644 index 000000000..e61eae964 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/geos/prototypes/topology.py @@ -0,0 +1,72 @@ +""" + This module houses the GEOS ctypes prototype functions for the + topological operations on geometries. +""" +from ctypes import c_double, c_int + +from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory +from django.contrib.gis.geos.prototypes.errcheck import ( + check_geom, + check_minus_one, + check_string, +) +from django.contrib.gis.geos.prototypes.geom import geos_char_p + + +class Topology(GEOSFuncFactory): + "For GEOS unary topology functions." + argtypes = [GEOM_PTR] + restype = GEOM_PTR + errcheck = staticmethod(check_geom) + + +# Topology Routines +geos_boundary = Topology("GEOSBoundary") +geos_buffer = Topology("GEOSBuffer", argtypes=[GEOM_PTR, c_double, c_int]) +geos_bufferwithstyle = Topology( + "GEOSBufferWithStyle", argtypes=[GEOM_PTR, c_double, c_int, c_int, c_int, c_double] +) +geos_centroid = Topology("GEOSGetCentroid") +geos_convexhull = Topology("GEOSConvexHull") +geos_difference = Topology("GEOSDifference", argtypes=[GEOM_PTR, GEOM_PTR]) +geos_envelope = Topology("GEOSEnvelope") +geos_intersection = Topology("GEOSIntersection", argtypes=[GEOM_PTR, GEOM_PTR]) +geos_linemerge = Topology("GEOSLineMerge") +geos_pointonsurface = Topology("GEOSPointOnSurface") +geos_preservesimplify = Topology( + "GEOSTopologyPreserveSimplify", argtypes=[GEOM_PTR, c_double] +) +geos_simplify = Topology("GEOSSimplify", argtypes=[GEOM_PTR, c_double]) +geos_symdifference = Topology("GEOSSymDifference", argtypes=[GEOM_PTR, GEOM_PTR]) +geos_union = Topology("GEOSUnion", argtypes=[GEOM_PTR, GEOM_PTR]) + +geos_unary_union = GEOSFuncFactory( + "GEOSUnaryUnion", argtypes=[GEOM_PTR], restype=GEOM_PTR +) + +# GEOSRelate returns a string, not a geometry. +geos_relate = GEOSFuncFactory( + "GEOSRelate", + argtypes=[GEOM_PTR, GEOM_PTR], + restype=geos_char_p, + errcheck=check_string, +) + +# Linear referencing routines +geos_project = GEOSFuncFactory( + "GEOSProject", + argtypes=[GEOM_PTR, GEOM_PTR], + restype=c_double, + errcheck=check_minus_one, +) +geos_interpolate = Topology("GEOSInterpolate", argtypes=[GEOM_PTR, c_double]) + +geos_project_normalized = GEOSFuncFactory( + "GEOSProjectNormalized", + argtypes=[GEOM_PTR, GEOM_PTR], + restype=c_double, + errcheck=check_minus_one, +) +geos_interpolate_normalized = Topology( + "GEOSInterpolateNormalized", argtypes=[GEOM_PTR, c_double] +) diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1be0696e3274f0da2ac2f57429f64ab6b815f6e8 GIT binary patch literal 470 zcmZutK~KUk7{%ymN6#KU6AuvVx1VNXDSIr;{0u++Dc$byu zKe~vuJIw&$O}KR=HeA_)J8c*|a;2n&iIAx%;2P85cw6j7U#d*s;2o8(c`isS_=>?@ zX5<@32dFQcD;cGm&Bk|?r_99GPxOkG`=*wbbYGAbzb2GtwBb$1)8XL{LO<{ZS~;OG z+ee8do!B~B7F?Gx_GSX&c Y8K`nM+J37C`)$9j;JgoEqvzFr08x61NB{r; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..c220a5739 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:35+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Afrikaans (http://www.transifex.com/projects/p/django/" +"language/af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..083951f7d9f7dae3552f2000d6c222cd272e4686 GIT binary patch literal 2301 zcmb7^-%lJ>6vs!czt;Mz{;I7eCo!d9on;rQX@{-~78(>Rf%QkCJ`B5;VVYrPotfoF z<3k~!ln0w8n%IXvC}}BM=$4X-^e@oFckjFyB{9DEps)5pzvs>@3vCnQB$v;<_uO;t zIp2HOpLgx}Qp5K&#&Z}yVmy!W$zAw^?@#c3@GtNM@Xfn5?FrBY*=Gv82RxVTpHKEz zz-O@kJ@^p#3-~bj2lzPnce1||&bzVR4ekZA;Jsikct1D*?gT$b?86}6KMnSPUx817 zzkwCxcoTdb>x&4|3jPifxc9!8N5Bl$AAx+|=ip0V1>6t*1nvR<0bd07Ac+HDC&=}D z4067w!3OY~Wd8^7S*(8r`TR|glNo@I!D08cu87p}4PJ%-667>{D$ zn9?r=K8OL?)VC|)j)bfke<)w+!EeJKYmHKrW>4})yGz3NJ)gWnq3rvjNMpmorO-Fs zV94`FY}cZ2Sdb;W5fS&aHO6xSr@o*OvlP^x<#^4vm1$)RYm@E=)3KuGI-g_%g#ao`o z(E5Du1Vq)li~76558!7|@r3DGUaDV|JU`TX1IsSz9c3%f^PWMezTkjWowe)!-!F&8FYnlc(m)HO`kbs=`?MAOk} zf?*2V{C}I)_;@raugXQjWEyT&Sm&ZCYE+zILq)E_gb~fj#U{S=YBWi5DVo8?x^l#n z7uRrk1qaj((TqAWn;b!yWqF-b;#M)IaY`=Y+$t1><7VkB?y_8oCb#E;s?W%8 zq0V}o{?^co+8x{prBrabDywm^^YK+&#uQ?#-B#YTT!0g5T$0z=dljmlWf7-Y!V2!M z$}4zKIUmi%SymB;wSfZs!ic+e2icO$qqF=zTk@_wA2$_lMM7u{b?, 2013 +# Jannis Leidel , 2011 +# Muaaz Alsaied, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-02 11:32+0000\n" +"Last-Translator: Muaaz Alsaied\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "GIS" +msgstr "نظم المعلومات الجغرافية GIS" + +msgid "The base GIS field." +msgstr "حقل نظم المعلومات الجغرافية الرئيسي" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "قاعدة حقل Geometry -- مُرتبط بنوع مواصفات OpenGIS الهندسية." + +msgid "Point" +msgstr "نقطة إحداثية" + +msgid "Line string" +msgstr "سطر تسلسل أحرف" + +msgid "Polygon" +msgstr "مُضلّع إحداثي" + +msgid "Multi-point" +msgstr "نقاط إحداثية" + +msgid "Multi-line string" +msgstr "تسلسل أحرف متعدد الأسطر" + +msgid "Multi polygon" +msgstr "مجموعة مُضلعات إحداثية" + +msgid "Geometry collection" +msgstr "مجموعة إحداثية" + +msgid "Extent Aggregate Field" +msgstr "حقل مجموع التحصيل" + +msgid "Raster Field" +msgstr "حقل خطوط المسح التسامتي" + +msgid "No geometry value provided." +msgstr "لم تُدخل أي أحداثيات." + +msgid "Invalid geometry value." +msgstr "الإحداثيات غير صحيحة." + +msgid "Invalid geometry type." +msgstr "نوع الإحداثيات غير صحيح." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "حدث خطأ أثناء تحويل geometry إلى حقل SRID." + +msgid "Delete all Features" +msgstr "حذف جميع المميزات" + +msgid "WKT debugging window:" +msgstr "نافذة تدقيق WKT:" + +msgid "Debugging window (serialized value)" +msgstr "نافذة التدقيق (قيمة تسلسلية)" + +msgid "No feeds are registered." +msgstr "لا موجز مسجّل" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r غير مسجّل." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..55a61ec55419341048ff713d7864f00a8638beea GIT binary patch literal 2403 zcmb7^-)|IE6vszF#T9?yFZ@Ar&`?`(wz~xhopzC8DORa8?fN4cW2U=zr$eSQo0(bK z8WU-475id{n#h9>q=BY|Wm_6Vcs9{Q{(w6##*p}=5BjLS_&s-KyIUYJOfvhq_nzP9 zp4nfvZ2Vfo^ElpT@Lt2a4ev*H;0Mp2;5*=7;B(+>cWT-rpbN6iG`Imgm7IT@oUedS z;QS}>KJZuYe((?QVep^id^3!;`v&7RdE{ z339&Yz!va_AG&qG)|fcHVX zP*?p+fiTg~HuY>txG^F3j31P*`oVX@5BC}+sh&N`2R$wc-}ij-3WbXAiz1DW3YS9P zbc2%TkJ+w8;iw=>cw-{;Cn@yQet4+Am%P$?85>Z^7EUp(^@@>-WwH6V?H0XpY7K;M zn~wbm-K%NLdjX&?L34)qUfhw3>LJjW4* z(Dq!d--R!`*p%O7S)^}1RuR+MVcQiHgg)}p1}aWyQ`vJSEjUs;-MLY&mp$7JwKqH} z2~iBl^aUX?I|v1um1e``$6T$g)9YI+z3)GTA06XV|G&w8JMmaIYUf6|Qrc zN4rPNKoDxKce8O;?}2JFT|fR6jhW@3el17J!ez7JvMAUkyI^vYXsvOfYR=oQ=c#zZ z^%&Zq?;S-`_5Py%mhc1E8B{!Kx|Ww35@pX1^?|^$i~50z73g`-pw!?IeMlU$Syk`F zRTu4C3jrR8O@$s}8RJ$Z5*t9*)w+<)q z({B17^uF8PmKx|EIM^sIo6e+O@mwA^J&(p16pD$kz3iB_+eL*@(+@(;BNsQ*v1@5*9Nst3f&!O;fAl zEDM(8DnxjrIl0)zL6@T`lINpY99&U`Sn}o~f-gZqMTlmV%85h;ZmRMUr}Qj`{XUva zEaeq=J^^jm##x+~SLF&P#sT^B&>Frtp);!P1yl<;oJDIfnkCBJRj90xyo8+QWHqg+ zD*s1IE<$e=ErsD)?cCj}T#2UE=Yq1okl&#_SK{=WT`y|4Fej9<1nruv#l_CYp}34` z__%yic{6eWMyT<;yvWw8XzR&nMnl)o!X?D7$qTqqIUmi%S=Qi(dxH+}6~pi4TeL07 zJUYo2)RcGq{&=bo6$xQ7RNQKuF?xa{lo8Eo^*=ZnH@Ydk`V`#GRjb=sk!O+nDx9l^ zaI2E(jOR+F^BG2{#!7reD@f%NZVu8!#tRs;DK4Ip(Ww7hw%*p<#bv|O5`0!M`EeuG RBJ-Fue?N_H2Y, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-14 22:46+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "GIS" +msgstr "نظم المعلومات الجغرافية GIS" + +msgid "The base GIS field." +msgstr "حقل نظم المعلومات الجغرافية الرئيسي" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"قاعدة الحقل الهندسي ترتكز لمواصفات نوع OpenGIS (نظم المعلومات الجغرافية " +"المفتوحة) الهندسية." + +msgid "Point" +msgstr "نقطة إحداثية" + +msgid "Line string" +msgstr "سطر تسلسل أحرف" + +msgid "Polygon" +msgstr "مُضلّع إحداثي" + +msgid "Multi-point" +msgstr "نقاط إحداثية" + +msgid "Multi-line string" +msgstr "تسلسل أحرف متعدد الأسطر" + +msgid "Multi polygon" +msgstr "مجموعة مُضلعات إحداثية" + +msgid "Geometry collection" +msgstr "مجموعة إحداثية" + +msgid "Extent Aggregate Field" +msgstr "حقل مجموع التحصيل\"" + +msgid "Raster Field" +msgstr "حقل خطوط المسح التسامتي" + +msgid "No geometry value provided." +msgstr "لم تُدخل أي أحداثيات." + +msgid "Invalid geometry value." +msgstr "الإحداثيات غير صحيحة." + +msgid "Invalid geometry type." +msgstr "نوع الإحداثيات غير صحيح." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "حدث خطأ أثناء تحويل geometry إلى حقل SRID." + +msgid "Delete all Features" +msgstr "حذف جميع المميزات" + +msgid "WKT debugging window:" +msgstr "نافذة تدقيق WKT:" + +msgid "Debugging window (serialized value)" +msgstr "نافذة التدقيق (قيمة تسلسلية)" + +msgid "No feeds are registered." +msgstr "لا موجز مسجّل" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r غير مسجّل" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a347ba8693f1392bcfa840e113df9e81f097277 GIT binary patch literal 850 zcmZ{i&2G~`6op+{K$sm1Kx#o3A=FmYBzE{~9D<;w6+taTmFa#OPn@Zo8Ea;oChx$O z1xp^FD>kr>*z*LeSnwDeJ0%q$uJrkM=KjoBKHsk`z4s88!3v1MRqzg!@flnPU%(CU z4cr7j!7^A_@VtxAThMaGUFZj}0d8ac^}1b3)qFSrvCHG=Rl3qlq)DSQ+?Xl?{y5TKA9h>g2jRlBYJLKVI)_yHgGPF z>h+V8lbS0>%Dx!adU{x&ebjHs&id;(yT0!4clLMAzdx)6{$qc5KK}iSCl51p28)C_X`Se@c;k- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..cf0ea5bfe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,85 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Puntu" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "Polígonu" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Nun s'apurrió'l valor de xeometría." + +msgid "Invalid geometry value." +msgstr "Valor de xeometría inválidu." + +msgid "Invalid geometry type." +msgstr "Triba de xeometría inválida." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Nun hai feeds rexistraos" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1f2b3a966278c64d16db6647b6d13301cf0534b8 GIT binary patch literal 1976 zcmaiz&u<$=6vr1Rzf8-IQlN-m4-ir;w6+sKL>q!gNnAqXHpDKi#A)IkZzhaq*R!+! zB@Pwh$_bG0f#%q=h163HNOmPGA@Ls|REZlBZ~+Mp@SU|c=`V?qWI2%H7ij78GP9>2>P!!5ufP>PND{s}iQ7Dvg&W6eQAP6$lIhND;ot2ii4 z>VqO3wuNtXo2lvM%)u73HnVi9G70DvO(Is;FAdC1N7hj8Z5DGv&RI1NWmyfl%`sgZxn^?1&v4tG&hcineCZ}Cp!7+%P!F4L!$1WI3%Fb3tm)B8pX+TV5R0I> z9b+P|SnPBr2*T6hU22kB(8ZY3E7o^T$Iy9?Ir;2pfMg=wVOZ zIW^ihqkTmeNBeOSiyov#LL(>^(phO~-eQKTSzLHeN?hB+4&@7-wq}}*WEug6U73vc z66Zauwuz7tksyDx-w&)4pZA0;+@Q|#yKT!wgkjJ{QnW&a!yPNIaXDv4S6gN>NdG_J zJ)gKQWD_wF>yC$tdSTa3^c|g`P}qvh#WuQkdQRrUu|2A@L>=^Jj6QY8Luws3nOW8* z0~{jL9-Unn&80n=FF2VpD*-Mp+hZH{f0|T{uC`Gq7$G5s%eFZyfpl!+#&@`3&-o7u Cl3sEE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..83f1eb20c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2018,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-12 07:23+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Təməl GIS sahəsi (field)." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Təməl Həndəsə sahəsi — OpenGIS Specification Geometry növünə işarətlənir." + +msgid "Point" +msgstr "Nöqtə" + +msgid "Line string" +msgstr "Xətt" + +msgid "Polygon" +msgstr "Poliqon" + +msgid "Multi-point" +msgstr "Nöqtələr" + +msgid "Multi-line string" +msgstr "Xətlər" + +msgid "Multi polygon" +msgstr "Poliqonlar" + +msgid "Geometry collection" +msgstr "Fiqurlar çoxluğu" + +msgid "Extent Aggregate Field" +msgstr "Aqreqat Sahəsini Genişləndir" + +msgid "Raster Field" +msgstr "Rastr Sahəsi" + +msgid "No geometry value provided." +msgstr "Həndəsi qiyməti verilməyib." + +msgid "Invalid geometry value." +msgstr "Həndəsi qiyməti düzgün deyil." + +msgid "Invalid geometry type." +msgstr "Həndəsi tipi düzgün deyil." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Fiquru vərəqənin fiqur sahəsinin SRID qiymətinə çevirərkən xəta baş verdi." + +msgid "Delete all Features" +msgstr "Bütün Xüsusiyyətləri sil" + +msgid "WKT debugging window:" +msgstr "WKT sazlama pəncərəsi:" + +msgid "Debugging window (serialized value)" +msgstr "Sazlama pəncərəsi (seriallaşdırılmış dəyər)" + +msgid "No feeds are registered." +msgstr "Qeyd edilmiş axın yoxdur." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "%r slug-ı qeyd edilməyib." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..264bac02b48a752430ff464ee6b62f7fc887b779 GIT binary patch literal 2445 zcmZ{kTWl0n7{`x_w-s;T1*0Y(AwV}~wz~xk44onf#VVDiT`!68VY+*Ec5rrPGc!vm z>BCYGNJ^=QY$S$)4_*>|C`dJyTf&njKAbVeH;p0j%?FJSCYl)k-|TElX`Srs@60*h z{rhHqUbf_v!1WmJr*MCV`)S-Gx8V=h@8Ij;AK)tR#oL8g4!R)gjDmN7r<46N$^Lop zaqNEs-Ut2y-Vgo;J`Dby>@S7#3Oug>p9FK@onS9`H#h(;1>Z={%OLwd1nvUg2OkB0 z1^+^f|A5_i{u4%eK>aQu)`Ew?H267)pZF1f8^E8y)!=eCTL*3e9{?-hDsTjR0z8*+ z24p)wfL-9fU1(5T26V$+Aa3%N&_%Zk`$aSvXD+I!gbL6^kj;-qX z-!>h4KYZ*potjKT#*v{U({ZRh@Gt%3ZCQ0 zLTG!g=y74oF5VR1a8+g&ZpR)oVwdeo3PK-oiQbwM+En$NVGD-hC(XI_T&sGv8;X}b zDoI%k$n+&4Fgpk(ik0Dm+0w*5sOo!r?ING`#j1UYgMO2Bl5_@~nnkO9vIF-<{d73b zWFF-nGy_S$KnX!lE>b)VaTG`(~+7w%>Zr zs+hKuDR`AGD7aS5w4|1oW<{rM(lPy7V4E(rmBX;Ax3>=s4Q1jPwM%jzE44R6ZNW(_ zv=7SmbgH+fcgI{(xlA_oyyx(-+pCUgyPK&{HvK?`#w+=5ZR4C={60uu z+u;_xBBn>Dje~YL8>vo%GS%nQeACgo@fHL+xz+eFFxGFT=F(_$SLd>Zk)t(hh?m)w zMlMHNC`%B>bC=Q4I_fmm^D@@RcIG;0WTdImm0O>NN-j|`j4U6;a$UxTIrUBH*?riB zo0iW`0~WSW2MnxBZ%zqyMom*RsV=H1bxB=~4nz~AuBqv$uBM_G$9i#70 zsA))Dj>eWaEb5V#0K{67;ls0{|kW8n#PDQc*%Z~~hUoq}IH zVi6sQ#?_VR7}nEiq27(gn$bj!*llz$I>541>O5W+gfIj5V?v!(SK+96ur`{24jbkB zYtDd^ISSK|JgE+=4>?nqz;1nECP(0ZEP8vs6GS#C)JKT=JRg&~faS%7$_=ESNWsHm zSuL*f0TQ^}3^|&(IlSm7@1y!N$bA&P8z^oZ%v=hbUsIa{zgb&diw>d;s8XVX+Q1wa zdkSX_R1;;2(?xSeA^asaW{?Dr0xCB(+m?As%*EhX, 2014-2015 +# znotdead , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-16 18:23+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "GIS" +msgstr "ГІС" + +msgid "The base GIS field." +msgstr "Галоўнае поле ГІС." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Галоўнае геаметрычнае поле — адлюстроўвае геамэтрычныя віды паводле " +"спэцыфікацыі «OpenGIS»." + +msgid "Point" +msgstr "Пункт" + +msgid "Line string" +msgstr "Ломаная" + +msgid "Polygon" +msgstr "Шматкутнік" + +msgid "Multi-point" +msgstr "Набор пунктаў" + +msgid "Multi-line string" +msgstr "Набор ломаных" + +msgid "Multi polygon" +msgstr "Набор шматкутнікаў" + +msgid "Geometry collection" +msgstr "Набор ґеамэтрычных аб’ектаў" + +msgid "Extent Aggregate Field" +msgstr "Поле аб'яднанай плошчы" + +msgid "Raster Field" +msgstr "Растравае поле" + +msgid "No geometry value provided." +msgstr "Не пазначылі значэньне ґеамэтрыі." + +msgid "Invalid geometry value." +msgstr "Хібнае значэньне ґеамэтрыі." + +msgid "Invalid geometry type." +msgstr "Хібны від ґеамэтрыі." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Не ўдалося ператварыць ґеамэтрыю ў SRID." + +msgid "Delete all Features" +msgstr "Выдаліць усе аб’екты" + +msgid "WKT debugging window:" +msgstr "Акно адладкі WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Акно адладкі (сэрыялізаванае значэньне)" + +msgid "No feeds are registered." +msgstr "Няма запісаных стужак." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Біркі %r няма ў запісаных." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c8e43acb75f8a772a65d7c453e8b66c523510445 GIT binary patch literal 2389 zcma)+-A^1<7{-rUzt;LyziQO@nnnw0W?A;8WDsK!s8p~7R%_yg8FmlD)L~{bGs}W{ zK?y0w#1O3}t)@{-yz_!$H!KvETQ6#I<{vPoiFaP;rS(Fe_w4Kf3yDs4_BV6RdC&Wt z=RIeBIdbSrf$K@!&*Hv``#Ibn-GM(`e}M0Re}c!rGj|H{80diD)-zUUF;0X9M_#Sv1oCVp>WzYe)!4qKn{X($C2-m*w8XMOmc;LAn z#*N|HKhA*=0o(L-B;lci>=|FYHui&S!xwvvC27wd=Y~@r$sq6p^7Hvp5Xb_RC#6SG zV0qz$A51x(P0^$zTl!Nn3T7$t_50Z9U?2Gtd;2(mCLHM&(xOj}mu#EE%Z^v@%hVRi zz_DEC1LT;t+>&g^7*|G;EZ3z0X+@<#hN6Eal3qloY&(#)h28<4Pn;ec6Q>&*^1kcJ zeB}6^81yigQ`n_%wkXs4n{~#t7;-#GVH7}@7%sVyLq*@6wK0)?Gu+mGqv$(cB;NFC zLdrr&Rv-z&oG_9wE6p8EYjh4O2L7~D;Jy(ZI+7$9wKyhO&X`-W>BWGY(7QEvCE7D( z4t9@Qp(L!i;pR?T!vk$I-J1J?rmSMvD9hQR^f+v+DD%#QlegF;Y8n@5bI!eyqe4r0 zOfeGp=V7WbSTNp}L5Mh$3g<1)_EV#>=m(K89NJF7=q=fyk@HPTjhr<`<+Q^?jXsph zq--YJX=JiSwu>?+&1~jG23KkbD>rhyqg*TU1Cw%o0XuG}G%h`VnqH3F`qQiSl;ybT zyg&5{Vm!NK+0w{KYs#eFl51PoJ|4AAMp4o1=qQ)VX}wFG2|2?t9d)q{xXA<^<90`T zYItzCe`i^p=}hW1-{XyD1_1Z{-GzuAOoEM99GC_ws%L z`^TiNaVKgDHEG;Vjku-2a*Y9;gU}?es9(dLY&X>(d)hpDp@%x#yHi4a9)F_N)RwBM z4g9Z=`Z1nUmH1=4;$<5zRf^|<6}1&#h!<21&zq`RZ&4LWqEtoI&|cAFtMO7i&+$B? zKBNen$8;ETgU6^E619fxKCU`*4azuOCB8^)@dXfSAmj%A*P0Sm2)Zz%T1UDXKer2Y zS*_KTsC81Sh^@wpSW=ZR?ivzrAfhVNx0r1Wi{<5@@0;EF)_4K+(bti1D_&Bo?1HN3 z?|{10qJOdO#72D%WVncFmxQ{CaU961uj6@Z|I!zAGfPt2>DGvPRSrznx^TpP%~CN~ z=c%yUTotIF7wRiW+e8t#afAJ2E%lmIQI4A0I&h4krT^baA=lt?Xunsm82GjcE4hwH zQf1BTHf}Z(yK4cG*I~^HFFhHp>t8{mE+|H>vRbZ4>$a)eet;9-?P#diwYf%AU61Ge zge}voyJ&n6*+IhZV9k*E85Ch}LKUJfVYe+ejI8YM-Fq@vuTGjA2L1Kq(-zP12EdlX bN%@a2Xk(}FH+0`gfw1J{vOZoTCO5^u{Gj&T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..e9e5aeb32 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Georgi Kostadinov , 2012 +# Todor Lubenov , 2016,2020 +# Todor Lubenov , 2011,2015,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-02-28 07:20+0000\n" +"Last-Translator: Todor Lubenov \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Базово ГИС поле." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Базово Геометричнно поле — карти от OpenGIS Specification Geometry тип." + +msgid "Point" +msgstr "Точка" + +msgid "Line string" +msgstr "Линеен елемент" + +msgid "Polygon" +msgstr "Полигон" + +msgid "Multi-point" +msgstr "Комплексна-точка" + +msgid "Multi-line string" +msgstr "Комплексен-линеен елемент" + +msgid "Multi polygon" +msgstr "Комплексен полигон" + +msgid "Geometry collection" +msgstr "Геометрична колекция" + +msgid "Extent Aggregate Field" +msgstr "Разшири Полето за обединяване" + +msgid "Raster Field" +msgstr "Растерно Поле" + +msgid "No geometry value provided." +msgstr "Няма предоставена геометрична стойност." + +msgid "Invalid geometry value." +msgstr "Невалидна геометрична стойност." + +msgid "Invalid geometry type." +msgstr "Невалиден геометричен тип." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Възникна грешка при трансформиране на геометрията на SRID от полето " +"геометрия." + +msgid "Delete all Features" +msgstr "Изтрий всички обекти" + +msgid "WKT debugging window:" +msgstr "WKT прозорец за проверка:" + +msgid "Debugging window (serialized value)" +msgstr "Debugging прозорец (сериализирана стойност)" + +msgid "No feeds are registered." +msgstr "Няма регистрирани фийда." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r не е регистриран." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1168ac431a266b1dbffcee819cb059d922ba63d4 GIT binary patch literal 1070 zcmah{zfTlF7+n>AOgMigRIAnY=dOq#8H)mOw^c?D@3g% zEdOU3sygzw#lF&}NFv2zRAtq?GbJLf@QqhO!JV179+C@^L@B?dh-6`uDkiN?iUn3t zv{a>cnM@u~;KAGjYskknKn2rirOMSu<8>YqH0n*wQyEr*tBwqJG&M~@S^p4RF zjDBeJ6QkeSRP(XXuZ`X|`jtK2u-`Re^ouOjT(uheoyYmNFUIHq75GwVOeuvl7hL+X&v-9cJvb{A^}B%*+}=xC)C%L50h_wBLq< mUl&hcC2#EPXL}a6tew_twG`PLqqmHP)B8qmpcLKh?SBD05vZ5| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..037e7d9ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "জিআইএস" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "বিন্দু" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "বহুভুজ" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "কোন জ্যামিতিক মান দেয়া হয়নি।" + +msgid "Invalid geometry value." +msgstr "জ্যামিতিক মানটি বৈধ নয়।" + +msgid "Invalid geometry type." +msgstr "জ্যামিতিক নমুনাটি বৈধ নয়।" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "%r স্লাগটি রেজিস্টারকৃত নয়।" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0829bd0f8b144bac0b70c8b1cba0dc5f3658885d GIT binary patch literal 1614 zcmZ{k&u<$=6vvmgKrtZ14;3Leyhciss2Y1W3Aotcz5geWz+b`lz&}7g-xKg7@NdxP`xjgQFTD{2m%&BQ+gCup zt_Vaa0j8<#KyVd;VZjy1TM&fQt%0v!i_hcd^6i~d1i@FD*ji)B42PAqoX~N`nw*uo z92r|Eos!F#QZ@xUdqU3C`h$bsHkr{ypC3RY#d*>UzJ5MnX!4wgP8l8a^hD+=IhX8Y z%*~h0h^k=UQJSfA7BvLBRqhmxO@5LhQLTx5-Y>>RX&3C7*$j0m8e20_38Sq2I%5AU z&x5>5Y0;7@^^zmYsVW`gCm_z6LsTt#iTIXniRxoY4y8^_uGOl+QVf>xghoM5`37$5D7Q zL~HEG(uuy`h+H~jW9nI}cuadTm$YXlRu*(y=DF1R$k^=56PX#)9N9YZU+&FHvj*pL<_5P|6KWYw5(K=n&b0A?ox;3z^mBwyw_ulLmM9r|VWwc|B z(y)0kIez3?<6J7eLBmYil3n*<|Gv02i>uEPTX9bhO@hsg>DEBG7gfeIu#Nq^vN9L< zae~U2^te{b?&lkH+U+hc>%}OfZkM7Jx^aVQHKgm%=M3#Ry#sxdLW*BxSe?%>XK2sq z9q5}B%`&Xf2}v=-Ol;6w+YqOQRswphoU)m`^h8GwsXE<8`JVR10~9` znr6+QFY}415>7GG{|0PjGO6d|w2-*dJBmx(e&uh!@B6d%a)3H|WoB!zdLFRD-9{K* afI8P6A9=gB{*`imsS70@g$29{&EP-LsIIO6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..d29da14e8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +# Irriep Nala Novram , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-03-12 14:10+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Pik" + +msgid "Line string" +msgstr "Chadenn segmant" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Liespik" + +msgid "Multi-line string" +msgstr "Lies chadenn segmant" + +msgid "Multi polygon" +msgstr "Liespoligon" + +msgid "Geometry collection" +msgstr "Dastumad mentoniezh" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Talvoudegezh mentoniezh roet ebet." + +msgid "Invalid geometry value." +msgstr "Talvoudegezh mentoniezh direizh." + +msgid "Invalid geometry type." +msgstr "Doare mentoniezh direizh." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ur fazi a zo c'hoarvezet da vare treuzfurmadur an objed mentoniezhel e-barzh " +"ar vaezienn stumm mentoniezhel SRID." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Neket enrollet ar \"slug\" %r." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..df48c3de37a35350709f15cb6c881c71e5ee7f2f GIT binary patch literal 1308 zcmZXTL2nc{6vwB97T7k20D=QZeW)Tz6nS?hARv=0ZIh5HRg$jKCF1Ix@ov29wMVvh zL!#V~klI^6Kn}h33sk+41D~LWR#k6RKLB_Bp3Pm*8tK^!6(l^nU|`{#!8I`zLrG{1^NboWdnR|0W3e z2=ZkNL{~9G4@ix!VTSxLDkDUfz@QmMxU(GJXcE>MOD4+(){30=_k<>Ixpr-1`%-tv z?+NM%(-+^L*g+wx|KCQ| z0Q;L#3v%9~hiGe{yrjaYgARnsh^Y_HSz)C1(YBe~P)bo@%~0k7Z8ge_#;H!jnl5@{ z8#&t*)}hCg@-EjMQ`r%Pv7T+Yj?CH0pyOE6q*Q5q-(;&+@bElrjeC*OLYzEial(>C zN*<*T7w6+7j*-ZA#83v!3wev?aVhDd3|;-f5{;JiS$#i=>-B_YW+*J, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Tačka" + +msgid "Line string" +msgstr "Linijska nit" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Multi-point" + +msgid "Multi-line string" +msgstr "Višelinijska nit" + +msgid "Multi polygon" +msgstr "Multi poligon" + +msgid "Geometry collection" +msgstr "Geometrijska kolekcija" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Niste zadali parametre za geometriju." + +msgid "Invalid geometry value." +msgstr "Neispravan parametar za geometriju." + +msgid "Invalid geometry type." +msgstr "Nepostojeći tip geometrije." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Došlo je do greške tokom pretvaranje geometrije u SRID geometrijskom polja " +"obrazca." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb6f6fd494307b1ad39b47b350a9581a33a86243 GIT binary patch literal 2007 zcmZXU&2Jk;7{(VUU#5JuP$E9WTUAw(qP3H#LeYjGN|_wK+S%Aeqy;9uZ5@Rd7*;52AJp7Q~C7kHy;|Ey~N3VZ_XKYFND^r2qRbDT+yw(aX4|9k!t!3;~W`Z??wNx^e-$5?x|8MpY z>%qD*k_u;$SI{iAQfAAs#>b%C zW_v2(z70QhqYAJocuuvQmM&8|Z%GyA*7Y0i*ph9?y)6n!*z-`$qqd<2US_&={bTBi zycizK)m$2$*2-n9c2q1_BpM0lyf|-MX;X6B@kGIf&2}MbxR!)l(iWH(QL-ycn$><*i&Q1y%Vk=G?JT0&#?^3B?kOG`F5{>onwy!M31=>bbMttN<}N-rgHl_^&cim} zC@oxOBWemGH7)6^pclIQ9OLn&v@4XZ$65D9%rI#wQW>_T=ti_8oY2D1RL8kIYBYMi zUfthNwIla=Mq`lZ5E$#HH)7G4t~J-1D@R+Jt4tkC14Wro=c!yEV?;PaIBYG*?pxJR@H-5 zTw~mF!GjW+Be7WZzoseNP*}Y(qPr&Cbg-foOfGPNoGeJA#sb4}Rr`m9Q}34S$-?!& zFoUpS;7f1FrA&YS4V=hpkEau~RbCdynn;bC!E{Q}U8}#b_p-~7v zvT6U2eR?zin{_HYHZ07`fmsU(Y${h-;gGt4fLJxg(c=J1Z)qNd*a`atLvsEuL7(x| z;9_19CLV?#NDtHbEO8B>kEY22j-F&on~b1+|K?G2?)OLLU5(ZGV|J`wARXU^q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..a0598fa25 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012,2015 +# Carles Barrobés , 2012,2014 +# duub qnnp, 2015 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-04-28 20:24+0000\n" +"Last-Translator: Manel Clos \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "El camp base de GIS" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"El camp base Geometry -- correspon al tipus Geometry de l'especificació " +"OpenGIS." + +msgid "Point" +msgstr "Punt" + +msgid "Line string" +msgstr "Cadena de línies" + +msgid "Polygon" +msgstr "Polígon" + +msgid "Multi-point" +msgstr "Multi-punt" + +msgid "Multi-line string" +msgstr "Cadena de multi-línies" + +msgid "Multi polygon" +msgstr "Multi polígon" + +msgid "Geometry collection" +msgstr "Col·leció de geometria" + +msgid "Extent Aggregate Field" +msgstr "Estén camp agregat" + +msgid "Raster Field" +msgstr "Camp de mapa de bits" + +msgid "No geometry value provided." +msgstr "No s'ha indicat cap valor de geometria." + +msgid "Invalid geometry value." +msgstr "Valor de geometria invàlid." + +msgid "Invalid geometry type." +msgstr "Tipus de geometria invàlid." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"S'ha produït un error en transformar la geometria al SRID del camp de " +"geometria del formulari." + +msgid "Delete all Features" +msgstr "Elimina totes les característiques" + +msgid "WKT debugging window:" +msgstr "Fines de de depuració WKT" + +msgid "Debugging window (serialized value)" +msgstr "Finestra de depuració (valor serialitzat)" + +msgid "No feeds are registered." +msgstr "No s'han registrat canal de contingut" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "El 'slug' %r no està registrat" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e441a27e5bb89260f5567b5f898a29f18104b77d GIT binary patch literal 2071 zcmaKs&u<$=6vqeJ^23y01xh7~^bksw2(4qMJv5uR&@@dkjgu%bg@TY6?~d0KuV>8e z*p4F(72;ZP0YQ*B_<|In95`?Qsi$ou4jlLk5UPZ@aDXdZ_|E!Qk_tv1e|Bcxn|VLx z%`c~pf5y;Gqn}0p3H?R%4%tMd_f4BQ#ae>Ir@7JMG_ zKZ1{ezk-j0e}GSee-GwQLir5FXTTT0Ja_^ufe(Wl;7Rb^!Fmm}=YI??gI|Epfxm&@ z!^VHWD#qVolL_$bLw$c1Kr8n?2ocr>Pl4N@J^wan{r?)Y=Ov)^?`P23^*d`Drr#3umCoU@zQKTc%p4W;Z;Zvt36q$&t zxT>RuQ~{Zqpg`z`Fj1F`PRAST#YNK9!)sQ7s#1i0mMw}(D+sK5M=D=;XfhU&W%D|##IZC`?h3R*l6PFe7V zOINmqSEI?AF->=Ry3^@o)B7o_0^+(c-8XZHaG*Tx#nV%nQn7S(>`*?N%UsdQUNNVP zV7O$&mYHsbT&g+pYCMXCDZE);axRYL(pnIab5(iT$IWr+Vnv#fkuG_0W-V+*Jam>& z0kKP}nGWN^g*obf7A6%H3Y4dF=Sa~6J}}Bn(W{grm#}!LKr{Wt`2t(&mGr2leWeYbVyiyNiz{iUz28IHRF~Qz z3{*Nc5+xA|I$GjsabL$u-5WhLGTCD*0(mhixkI?OV=qv2gN4zt2N#nsV_d4cx07Df zWhJF+8urDyV)q#p`{C*2hyPZoXrJxhNqW9YcF9kA?RuA#*o<{+P_!s_L|`||Uhjus zYzySJIaCzSvIT52dVS4J4vq|a+t7ZT}WSsgL4P- gM?Pu{Y3mCP-iOvEUcEH^Hj@AUNE}Ht9t)TK3)VJWegFUf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..ba24483cd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vláďa Macek , 2012,2014 +# Vláďa Macek , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-19 09:23+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Základní pole GIS" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Základní geometrické datové pole — mapuje se na typ OpenGIS Specification " +"Geometry." + +msgid "Point" +msgstr "Bod" + +msgid "Line string" +msgstr "Úsek čáry" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Mnohonásobný bod" + +msgid "Multi-line string" +msgstr "Mnohonásobný úsek čáry" + +msgid "Multi polygon" +msgstr "Mnohonásobný polygon" + +msgid "Geometry collection" +msgstr "Kolekce geometrií" + +msgid "Extent Aggregate Field" +msgstr "Pole Extent Aggregate" + +msgid "Raster Field" +msgstr "Pole Raster" + +msgid "No geometry value provided." +msgstr "Hodnota geometrie nezadána." + +msgid "Invalid geometry value." +msgstr "Neplatná hodnota geometrie." + +msgid "Invalid geometry type." +msgstr "Neplatný typ geometrie." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Nastala chyba při transformaci geometrie na identifikátor SRID geometrického " +"formulářového pole." + +msgid "Delete all Features" +msgstr "Odstranit všechny vlastnosti" + +msgid "WKT debugging window:" +msgstr "Ladicí okno WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Ladicí okno (serializovaná hodnota)" + +msgid "No feeds are registered." +msgstr "Žádné dávky nejsou registrované." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Identifikátor %r není registrován." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..50cd7c4949142c10de8007b3a9a46e9b780d9921 GIT binary patch literal 1430 zcmZvb-EJF26vwwvK5AMJMSKYa2UY!usQ&#tE$&sejw z*)HOeM}S*ifD4|1Uhod|qVE7tz<)M&(iBD>|Mtwx`P%vKlZ$76i7;Nnd>`{?%(pSm zpTQr-6ubv2@OkhN_y+hV_!jsW4Cns_UjffO7eyDqH^JAzOJG>P1-=7rg71O%!56?o z@Fnm^@LljH@DIfL6}$`k`?E)Re*-VV{v8Z?AAup>U*N0YKVZmn20=sK3*b5ML+}!~ z0)7CFK>Q+&zmV5~p`IT=q>avFhIfJVtv|vZkI+{b!9VyeM+Xn#-Gn;A2z4ySi+FfB z7@LOJIqS%#Y2_SeR8QHEchZ!(bu(oO@>8aQ?To!^$lKQ5-y3d|%}?(I2g()etQ+kN z_oJPqQ);#5)GKSEp*fUVWlsfc=G^`7GEP-k-&KaG^bU1Iqe^>4bE}&Ifm%!GXZOY2 zD&wQCEal8uNzySnE>!6m-F3spaW8ESnmc=_vamO9UB`X*TXrSdN+^3EO<_BGJh#q^QCX-=d|4HxnAn6m*f%%1Q&8{-J{R}>)sAR!n!g7|-cdW}PU7LD8PkOz&uDk86tDGNpQ#CI2LMA-L?Xgwt+}P+udzLe3u$Ec}tzT^wUzdh!NV8cggbPyCD!rkZl+jMj?teFSq2$Jp4uaM?+MH=|un^*6OJeEi z-MWF!w=K%b)QqauH>a92MXac>xnq1d6(p}H%cPr2S2v;Q(-lPHHqcV_BdKdN2;EQl I;F&=G0<)cdrvLx| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..a12d85f2b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Maredudd ap Gwyndaf , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Pwynt" + +msgid "Line string" +msgstr "Llinyn llinell" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Aml-bwynt" + +msgid "Multi-line string" +msgstr "Llinyn aml-linell" + +msgid "Multi polygon" +msgstr "Aml-bolygon" + +msgid "Geometry collection" +msgstr "Casgliad geometreg" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Ni ddarparwyd gwerth geometreg" + +msgid "Invalid geometry value." +msgstr "Gwerth geometreg annilys" + +msgid "Invalid geometry type." +msgstr "Math geometreg annilys" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Roedd gwall tra'n trawsnewid y geometreg i SRID y maes ffurflen geometreg." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Does dim un llif wedi ei gofrestru." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Malwen %r heb ei gofrestru." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c816be815d82e62024bb80e9a6d4e648b307fb6 GIT binary patch literal 1894 zcmaKs%WqsY6vi(QUPF16R}c>!ijWeaJCmu9NN)(DB@Y4_8fB&wiIp?g<8k7#uWa9$ z1|d`-{sfTP1zYy8f)$G{V8MOAp|U8!*}jH(gcAe=QsD*=lGmsfBEV3+@}e~ zlSJyF`!$ z*uMl%gFk}2?>7)zlDWH*bt$WwMMRYe2pEbr=`j3$(r0Nm16giwz(V8LXchyqu<9FLt#p}h&@I|Nx~S~kRp~| zhGhLpls3|NrMy%Es~a3I+1zR;o6{V+&KTK^+Sz2wB9_i?$?vd`^?#eI6YI&gwvs~h z$SY};CTc32IaCN#eWm8)dRjPbWAe76o|JhY;Uyt49il|D>bx*(O?3tp-VJrmYde+e z&g6hy!9J66+NM{9bwx^ymWzD&*KY-#z$C5+lODo;E7qKt^nXSDA1 z0bO>=20XP_{7Zu%!)t0Fw5fO9;8i$SRSG53jueB8)`ZoePYeARi>%QYjYjqAed?aP z!VZmbnp2pGcOw^##ae5twSH7kv%XY&-C2HOX$Q^7D9S6bQ5d1^3U&L!2N_o{bvDxF zqkWYYq)*pv*X4LQ87=SWILi`k615#udSTKHC?I5Hi|RA1o?W5w&(#G>&#h8(aixZ5 z54jZ~x|~pdPwpEULKHL2jW12~rY}pgAhjWuS80UrNfTuZ#2QRC;2v&#rL4AL2&I*B zrZfmnMjGDu+~;~RX+vu)H7M%8w3c$@TcxIh7(fy#xugzFt`#yGRR0I`_$3{g$JX&# zmCW{KkZOQFkCk;yW(aw5xwHons#R4(SZHIBc~)7aXI>eHC#8od1>Kl62wJNG9M{^o zoHMMoGb}c=T^}4w^~<4SJ-Hx)4kBUQcyaAOzpU|H~}p=Gb}yogwJ# Kder28vg9A~J`|w< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..c1d6b82cd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2012,2014-2015,2019 +# Finn Gruwier Larsen, 2011 +# Jannis Leidel , 2011 +# Kristian Øllegaard , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 18:08+0000\n" +"Last-Translator: Erik Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Basis-GIS-feltet." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Basisgeometrifeltet — mapper til OpenGIS Specification Geometry-typen." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Linjesegment" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Multipunkt" + +msgid "Multi-line string" +msgstr "Multilinjesegment" + +msgid "Multi polygon" +msgstr "Multipolygon" + +msgid "Geometry collection" +msgstr "Geometrisamling" + +msgid "Extent Aggregate Field" +msgstr "Extent Aggregate-felt" + +msgid "Raster Field" +msgstr "Raster-felt" + +msgid "No geometry value provided." +msgstr "Ingen værdi givet for geometri." + +msgid "Invalid geometry value." +msgstr "Ugyldig geometriværdi." + +msgid "Invalid geometry type." +msgstr "Ugyldig gemometritype." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Der opstod en fejl ved transformation af geometrien til formularfeltets SRID" + +msgid "Delete all Features" +msgstr "Slet alle Features" + +msgid "WKT debugging window:" +msgstr "WKT-fejlsøgningsvindue:" + +msgid "Debugging window (serialized value)" +msgstr "Fejlsøgninsvindue (serialiseret værdi)" + +msgid "No feeds are registered." +msgstr "Ingen feeds registrerede." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "\"Slug\" %r er ikke registreret." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2fccfb24761eb63b9699732a06e6c620817f8233 GIT binary patch literal 1965 zcmaKs&u<$=6vr1REtv8v{Hg?$S5QSFwEhv0s5S(VlDMRai4{8(i3?-z^LoifVgmqxa7it1GnA~s>F>0+$xX|-x;ryG?f@>^2xl}_ha77*S}7k z`Xa!18uK~KpD~}u{OBJ1!T1w=AN&h^3A}o55Ig}Y(D{4}-Ur?&?B5jj@4;ta{|S5u z{0)2<`~!R({JXH9h4VSA&wn1zinp;P}2DE{7Yg*C@%?@T4;=C}OQMOVSU-Hdw7u_2+EP?$89(X6uDIBbp2K|`Hw z$=K~Ry=${bur8cWahz6~Cv;JhH0svg4SPq(Hrm}0h6!h$bo0nI>49%E-P-${24ZL? z*RnQb<=k3B?#iC*3fCk$Y@GGYxwg`#_{8-@K~ra&Xll3|hwrgA@QWzk6e`I|>paY~ z4I3trad5Qh({K@2713;Uwi;GzVeNIAeKo4qUa4Y~R&nyM?Os$W zY^Ec+DwL9jRvCRt=?x^o@~zY_%To2SH{qj_TqGQ}SqvhaKo5kX>AtnYs8Sh?MrHp* zWskSZ-E2@9S2{sjcvoVs%#<3-jisYA)ymb<+nI8&ENr765n0~0m0>ERnxk%CXv21X zqg@X#9ewBJz&cz~-7LoAiRe;C+QTZ*DK0hBT#GcULj)!wHS|j}KRZX`f9IzaU6`lZ z%v>p0k_u10pW;E_DN%>zfHnprq0kV8V0v5E$yeCPx9){H7O8fpEc=ZU<+yw>CERg+@&O>&@o&Lcs^c@S9PH~|ywZ!~ zn^LmdpUAZcz9`&~9j^)uRHJ!0Ik#T6gQ5?74g_)9P38$!OjkneRb R-*N!KhKIkWlbei!{{Uv~D;59% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..dca1a7336 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Hagenbruch, 2012 +# Jannis Leidel , 2011-2012,2014-2015,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-17 23:01+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Das Basis-GIS-Feld." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Das Basis-GIS-Feld – verwendet den Geometrie-Typ der OpenGIS-Spezifikation." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Linienzug" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Mehrere Punkte" + +msgid "Multi-line string" +msgstr "Mehrere Linienzüge" + +msgid "Multi polygon" +msgstr "Mehrere Polygone" + +msgid "Geometry collection" +msgstr "Sammlung geometrischer Objekte" + +msgid "Extent Aggregate Field" +msgstr "Ausmaße-Aggregat-Feld" + +msgid "Raster Field" +msgstr "Raster-Feld" + +msgid "No geometry value provided." +msgstr "Kein geometrischer Wert gegeben." + +msgid "Invalid geometry value." +msgstr "Ungültiger geometrischer Wert." + +msgid "Invalid geometry type." +msgstr "Ungültiger geometrischer Typ." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ein Fehler ist beim Umwandeln der Geometrie-Werte in die SRID des Geometrie-" +"Formularfeldes aufgetreten." + +msgid "Delete all Features" +msgstr "Alles löschen" + +msgid "WKT debugging window:" +msgstr "WKT-Debugging-Fenster:" + +msgid "Debugging window (serialized value)" +msgstr "Debugging-Fenster (serialisierter Wert)" + +msgid "No feeds are registered." +msgstr "Keine Feeds registriert." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Kürzel %r ist nicht registriert." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4908099cebe774ec61ff2651a9fe86a59e448451 GIT binary patch literal 2071 zcmZ{k%WoS+9LEPJl$!D?ukzGSstSo<9mg#wavC6Qk}8n2QDO*>)7U%Sj6I%NW@qC# z%Au+_aR!MhfYbwrUXW1E?IpFu0WSOj2vtJjzyVH3^ul*G>(~u+r1i%$znS0TJC9$E z9r}WyJ&o@Ld_UrQ5#QE5_(A&<`~dt5JORFQFJn)D8uV)}gZF_~^6{_p@$bQBF#ZGh z5cn(jF!%@fIQUOKeiVz3qkkNH9vlbn2N%J^;0kyY{5ZF-fj<7H-~#w1_!RgXcnvw; z2J7g53nyjp$ODW$2c7|+1y?~#VV{6cf+_eC_!)QtyapZue*(SVpTS4K-@!-0zrmNm z!$|HVSOoq2Dp&wN1pT}ad%0wmiGfTPUt_;LhCe>0_wyh=ub=mQ z1RrF}+OeEIwr^fD-+XO8Z@)Lb`PfJ~)6Cb)rZov`jU`jBr`C#)I%`6cvs@<)W7|?k zfjVdpVk5O<7YsFo2ovH~5E7G#6A-KD4g1n$ zF(|fXU54Jalr3G#11xjDCNF12r4gO9Bolq>(iL}y%PQoq@k9`6?yET%>uZq7Ot&t5 zPHi41{cX7z3+pxp|l zNUmvQ&AGTTHrDBMirGn(4Y5(IoA%gV!hNXR$yk`w#zqT^^NX{C+Qy5e!a1Y;X$z{* zr9w_@xUpDqsV4~u+C;di_o{Qj#9&@_Erbnbb=`zGL=~E-Nw=RZ6iaG_C6!vPf;rrV zq(VB*y2;e(N!t56HKI?Bmr7Gp7>W1AI=H7J?qLLO0R8Y7nnn_BVd-vYvrQ?;!rrjkxLGKXj z@e;x%Tip-N_8tQ0@24okrbE1YzT3XJ?cW3+&iqfbvwU-Zk$)SCEFZ}qAg^EUlY)Rc fY41iCf(}_T?I_uM8(KWur2NIW>yG2GsIY$l(8Xh# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..2af0a36f7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-25 16:08+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Bazowe pólo GIS." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bazowe geometrijowe pólo -- wužywa geometrijowy typ specifikacije OpenGIS." + +msgid "Point" +msgstr "Dypk" + +msgid "Line string" +msgstr "Cera" + +msgid "Polygon" +msgstr "Wjelerožk" + +msgid "Multi-point" +msgstr "Někotare dypki" + +msgid "Multi-line string" +msgstr "Někotare cery" + +msgid "Multi polygon" +msgstr "Někotare wjelerožki" + +msgid "Geometry collection" +msgstr "Geometrijowa zběrka" + +msgid "Extent Aggregate Field" +msgstr "Pólo „Extent Aggregate" + +msgid "Raster Field" +msgstr "Rasterowe pólo" + +msgid "No geometry value provided." +msgstr "Žedna geometrijowa gódnota pódana." + +msgid "Invalid geometry value." +msgstr "Njepłaśiwa geometrijowa gódnota." + +msgid "Invalid geometry type." +msgstr "Njepłaśiwy geometrijowy typ." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Zmólka jo se nastała, gaž geometrija jo se do SRID póla geometrijowego " +"formulara pśetwóriła." + +msgid "Delete all Features" +msgstr "Wšykne funkcije lašowaś" + +msgid "WKT debugging window:" +msgstr "Wokno pytanja zmólkow WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Wokno pytanja zmólkow (serializěrowana gódnota)" + +msgid "No feeds are registered." +msgstr "Žedne kanale njejsu zregistrěrowane." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Adresowe mě %r njejo zregistrěrowane." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..03265fbd14ace02ce5c43a7fe175352074ae09b2 GIT binary patch literal 2484 zcma)6&2Jk;6knixnetV>ilEY~Dx^f!+D@oYaR?A-Q-#JfO3a4@myJE%Y}xEuyW=>i zIHYNss3PUkBGE%prE+u_r|;VY7eY5{(0ujd-Hq0 z_hx=Mu1`6 z2mBp44vzlun6S%*MV;Vo4_N$zkwOxAsp5T%mX=o4R{#%1(5kJ z0$G<9Fc170m<1kvq|NVB;8U18K;C~2cnr7z;ld_Y8arab7WmO$K>NU zPhdQWf$dtq6c8>3WYgb)8281G9wH{m>{+J6=)HyxN3w<7mAn*h7i^XaXh!WMt zghw*4ys+#C+MI;g-_I2{Br=ZFa9YUdgXf zM<@cva-DNHW5RN)q7!>uAq82kOZ~!<)j)*C$w?_ZNqx2*2-||SpW_*)21bli35TNZ zx}qo@-!le0#BxeI_)S$r`tD_YV%ivVJVBuhz{|*2UFlH8cc*Lw(lgWDYd0&t<4NOv zpUOg%Lb3uuAm)TpK&&(ywxrQ#P$lpuoD$oHwChlOz_7(WaXKSz)uvYhazgLU^fkFF zWC3!ITA?81oT$0ImS~`5raRMDY22!WNmy`o zDo5Sf?k+QX+{_-M>}$F1SC3}#r3R6?S>TRxE$Ih2>i4A+QlA`y+I~oHlzINP?m4F{ zCeuZK{7raycGa?lSrFEEj!p$ad`2B(QdV-AOs!T+@7kYfQ%%5)oioDCbf)qH`IFm8 zb)~bZcYTlB%q&2V97!=LGZoizydEl!SwSdd?+1l`^Z52YeIG<%p7e@-3Eh*UVV7X>LZb6tMucD`6Z+8#1|MqrxbhwwgI(t%vx}h4;dDV(8Mi*35)uRj1 ztomMUs5QdhIaODi>XvE{RvNI>iOqziHT=Pf_MKKsdOeyUwF1kfwjH)*?3v+6v#Le< zuJXU=B1O|`O|8PNCy2@0=As4o;5ba~87ZCct*dn~25-XVX#`=e4b8OWi8AMG)wlQaJ$RH>~!h0CfIp})c{8*lsr!$+R}_z=*?(>ONWK%vRYv^ zRO=p3*4;j+2ZF9~!CCn=miZzg)uZ##JU0Oru)4wo5jbH1$ss4wflg|X)8$gEswFNg z9}mumMrsw+TTdF7i^du3$yPTb9B%I9qO;qP45%l?ZNHR;`W9^##t$XVX71oJ&s36o z(TL{JbmtLx9m~r&gq_rPXf3{0sEK|>k#HRRUOVE}(RT~6+HTt}`jJhVQg>4et<5x+ u;~UoQU0ruHfW85D$Aor}@rG7(6^At1a`P2{A%3_)ul+Fm&x?kq-1raKOC#<8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..8e021528f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Anastasiadis Stavros , 2014 +# Dimitris Glezos , 2011 +# Elena Andreou , 2016 +# Fotis Athineos , 2021 +# Kostas Papadimitriou , 2012 +# Nick Mavrakis , 2016 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-08-04 06:23+0000\n" +"Last-Translator: Fotis Athineos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr " Γεωγραφικά Συστήματα Πληροφορίας" + +msgid "The base GIS field." +msgstr "Το βασικό GIS πεδίο." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Το βασικό Γεωμετρικό πεδίο — αντιστοιχεί στον τύπο της Γεωμετρικής " +"Προδιαγραφής OpenGIS." + +msgid "Point" +msgstr "Σημείο" + +msgid "Line string" +msgstr "Γραμμή string" + +msgid "Polygon" +msgstr "Πολύγωνο" + +msgid "Multi-point" +msgstr "Πολλαπλό σημείο" + +msgid "Multi-line string" +msgstr "Multi-line string" + +msgid "Multi polygon" +msgstr "Πολλαπλό πολύγωνο" + +msgid "Geometry collection" +msgstr "Συλλογή γεωμετριών" + +msgid "Extent Aggregate Field" +msgstr "Πεδίο Extent Aggregate" + +msgid "Raster Field" +msgstr "Πεδίο Raster" + +msgid "No geometry value provided." +msgstr "Δε δόθηκε τιμή γεωμετρίας." + +msgid "Invalid geometry value." +msgstr "Άκυρη γεωμετρική τιμή." + +msgid "Invalid geometry type." +msgstr "Άκυρος γεωμετρικός τύπος." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Παρουσιάστηκε σφάλμα κατά τη μετατροπή της γεωμετρίας στο SRID του πεδίου " +"της φόρμας γεωμετρίας." + +msgid "Delete all Features" +msgstr "Διαγραφή όλων των αντικειμένων" + +msgid "WKT debugging window:" +msgstr "Παράθυρο αποσφαλμάτωσης WKT" + +msgid "Debugging window (serialized value)" +msgstr "Παράθυρο αποσφαλμάτωσης (σειριακή τιμή)" + +msgid "No feeds are registered." +msgstr "Δεν υπάρχουν εγγεγραμμένες ροές ειδήσεων." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Το slug %r δεν έχει καταχωρηθεί." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..aed3a2f9d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,103 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/gis/apps.py:8 +msgid "GIS" +msgstr "" + +#: contrib/gis/db/models/fields.py:64 +msgid "The base GIS field." +msgstr "" + +#: contrib/gis/db/models/fields.py:201 +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" + +#: contrib/gis/db/models/fields.py:285 +msgid "Point" +msgstr "" + +#: contrib/gis/db/models/fields.py:292 +msgid "Line string" +msgstr "" + +#: contrib/gis/db/models/fields.py:299 +msgid "Polygon" +msgstr "" + +#: contrib/gis/db/models/fields.py:306 +msgid "Multi-point" +msgstr "" + +#: contrib/gis/db/models/fields.py:313 +msgid "Multi-line string" +msgstr "" + +#: contrib/gis/db/models/fields.py:320 +msgid "Multi polygon" +msgstr "" + +#: contrib/gis/db/models/fields.py:327 +msgid "Geometry collection" +msgstr "" + +#: contrib/gis/db/models/fields.py:333 +msgid "Extent Aggregate Field" +msgstr "" + +#: contrib/gis/db/models/fields.py:348 +msgid "Raster Field" +msgstr "" + +#: contrib/gis/forms/fields.py:19 +msgid "No geometry value provided." +msgstr "" + +#: contrib/gis/forms/fields.py:20 +msgid "Invalid geometry value." +msgstr "" + +#: contrib/gis/forms/fields.py:21 +msgid "Invalid geometry type." +msgstr "" + +#: contrib/gis/forms/fields.py:22 +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +#: contrib/gis/templates/gis/admin/openlayers.html:35 +#: contrib/gis/templates/gis/openlayers.html:12 +msgid "Delete all Features" +msgstr "" + +#: contrib/gis/templates/gis/admin/openlayers.html:37 +msgid "WKT debugging window:" +msgstr "" + +#: contrib/gis/templates/gis/openlayers.html:13 +msgid "Debugging window (serialized value)" +msgstr "" + +#: contrib/gis/views.py:8 +msgid "No feeds are registered." +msgstr "" + +#: contrib/gis/views.py:14 +#, python-format +msgid "Slug %r isn’t registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49b5343277dfb38167b4d4708d486578645bcf86 GIT binary patch literal 486 zcmZut!A=4(5Y^~ukDfh@i3bRFyNkiBMU04;U?38+cr|smEH%q?(-zSW@h|))zr|TF zdhsPM?Q36W-t_BW|6_-+OFSeV6ZeQG#2N|llP=F`tv$b(TJxeZ&qg_WRMu&O0`eD$ zg$W*1WvpitSLmEwuL{RfBOsXGr)*%A^yFnX(klV&DDJT6l*I`|=OR99MR637kv*ta zUDy1_mx$9&DJ+SGSxi%Z8YlTw@_1dDi|n kxqwZtU|OyyFuOH&=>%Z4k*?S7!gkwhARP4|Zgzv6Z#CDCs{jB1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..d107919f1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:35+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f309679fb18bc77b2ac668631d9f7e10132bb9f GIT binary patch literal 1369 zcmeH_OK%e~5XToNujL^X#7lrQ91y80C%YBuV@r7SNuYr!O;K;KWSxyG$Bw*C({kg^ zwO@cUT=@iCk@y6?aff>)_!UOu7cOVSKvp~ zyaAnFVQ8TD7Ib=Bpws&RI=#=J)B6fKz3tug@1WD$0iE6@h&jCwKTdA~bb1d!$ayE= zZg$rb(jLlkbGgpW!d<9x39+XhXW$>>0xo>bJQfYhsnPwCMNVg8}xdLhlE|a3SxL45BQu3x1T6q<<9!rt@)@-xOi+?X8 ztB3U^p*UsM;0#{1C#|5amYXRWy#O>Ac(%P=Tvh1aF+mOiA9eb!p&FD3Z!zu}T!A*v-B1+a`m1@7vyV_V*%~FxD znO>T)hK|UuJ#VmC!(;ae*j#LRL}NiX!Ge&5QxuLzcc(^!FbI&y>U>?eo`>?L_VR+! z0Ol{nnPm-kLo&A7MD!$9N@TReF^Z&nI1R#wG7pPFwe)?|sI(WSoHcmdiD+J>QegHiq9-F4Y-*Q3Gtulop)BgYG{jbma7tiv33jhEB literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..0fe823046 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2011 +# Ross Poulton , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Point" + +msgid "Line string" +msgstr "Line string" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Multi-point" + +msgid "Multi-line string" +msgstr "Multi-line string" + +msgid "Multi polygon" +msgstr "Multi polygon" + +msgid "Geometry collection" +msgstr "Geometry collection" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "No geometry value provided." + +msgid "Invalid geometry value." +msgstr "Invalid geometry value." + +msgid "Invalid geometry type." +msgstr "Invalid geometry type." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "No feeds are registered." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slug %r isn't registered." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6ad63b5a2669d61934676056a468c945e59dbbc7 GIT binary patch literal 1960 zcmZvcOK)5?6vr>6yoT~?>d2 zOcHg~4Pu2@P{E>W)*wDYkys${4Jrg%7G(uu)&KFG$)mv<&u@HepL6`T&)hk2^qUCn zdGwdje?@-<{rUs=Lc0ro3jPhA0xutlqGvz@@}3*ugWz{#`>nD42k-^he*qr{e+Qoc z{{oML|Bda(u=ym$C&8D%7Wfd@1s?%dz+>QN;EUiI$nkH0SHPR#bKoD~x5)8d@I#Eh zhLhL9Kf!0g+QU`8uYy<-odY?q1Z2M*kmG+2*1+rFli(NN)8Ngq{dx=#Qdvp6vTEbjTJO z`{Z`CLePwV^4YlY-Ed>AIX~8jb%-t)lFnI2w%;$ElPQhXq#^HwDF)UJmC4AjNy?-h zO7FJG+b~{PUYI94I5@`}XrQD{>(RViEwhZbkCaL6h^7kZl+bDiF*b!RAw87b6G!Z4iW3o zqB4>S?~qs2EwxvaTfLpZQ5ePg{`ok!%J}H2rGb=bLBdHwVyf^GV%2$KSDFxma%VSH z%5zI$>(V&Dvfw@A(?qK+LZ7(D?@kMET|$?IF{+?N2{kpngKRK-PlsV$nSp&5drVe}OvXJah6%Nc zT*3jK=+v6`dD3W%Mx%Oo%W5FE>U}$GRHvFij~z6mZA{m?3*GkK`CIj7?V>gO9OE9e zOUTPD-^jI4W|sPE!WGibebnp3=l9lyx{)q!o4!r)$`U%is{C%E2}xU9(xnqR?x0$V zgiIcW#oXChs(#K*8G3DwTGO+&sO^NaWH-bPq)5x*zRDymCU1}LS!gzdx=iK%IYC^P zf;Pl3xAmy4`)a5%?N5~Eay8Wdp*E#6Ax9d?GVx;g?8vGfs zhv0L6aVn%6b%hR9xtE_HuQ>Ss%~TOXZK|JdnUWo#G=mnnUR@1QnM%<9`O<878(oz~ zl{C<$C7eYR<6?5i4%HbZ#|4V*Rj8^&cSL~_t(=4#sbX=Nx^f~{bo(dit=U8cSgu$6 ydmN6kC{VFGB2?^HtB)SL3^C7|j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..f72f0417a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2012 +# Baptiste Darthenay , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "La baza GIS kampo." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "La baza Geometry kampo - korelas al la OpenGIS Specifa Geometrio tipo." + +msgid "Point" +msgstr "Punkto" + +msgid "Line string" +msgstr "Liniŝnuro" + +msgid "Polygon" +msgstr "Plurangulo" + +msgid "Multi-point" +msgstr "Multpunkto" + +msgid "Multi-line string" +msgstr "Multlinia ŝnuro" + +msgid "Multi polygon" +msgstr "Multplurangulo" + +msgid "Geometry collection" +msgstr "Geometriaro" + +msgid "Extent Aggregate Field" +msgstr "Etenda kunmetita kampo" + +msgid "Raster Field" +msgstr "Rastruma kampo" + +msgid "No geometry value provided." +msgstr "Neniu geometria valoro provizas." + +msgid "Invalid geometry value." +msgstr "Malvalida geometria valoro." + +msgid "Invalid geometry type." +msgstr "Malvalida geometria tipo." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Eraro okazis dum transformi la geometrion al la SRID de la geometria forma " +"kampo." + +msgid "Delete all Features" +msgstr "Forigi ĉiuj trajtoj" + +msgid "WKT debugging window:" +msgstr "WKT elcimigita fenestro:" + +msgid "Debugging window (serialized value)" +msgstr "Elcimigita fenestro (seriigita valoro)" + +msgid "No feeds are registered." +msgstr "Neniu fluo estas registrita." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Ĵetonvorto %r ne estas registrita." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b6b01b127d88832845cbdbbf67ec16bb59ce21f7 GIT binary patch literal 2025 zcmaKs%ZnUE9LHN-Ut@f&ui*1%MA%h&W@lqG_PW7jA7RaoJM2!PAPBYHH9fV~R5jJr zJG&wh#EW+YBY4Ok5J9}%A zMS$mVw5QR&M|%eCqucO<=Qr?O@OSV9@U7c};1SS(9POyAfXBf1M)N(8^M4Aif?tA{ zM}G^8gy2o^N$?Ml_cwW0rMCfc-jg8jcNKgV+yWm0KLa_>S0KlK13n1e1YZJw1gF6X zh-AHW@Lup0koBGcp93#|li&y78u&5D>-_+7iGi{%95a46{{v{8?;bR+Uk#1dN7>4U z*W_oSLaBlOV*6!1_-y#$T0?5Nmq&TvtRd-~b!6kXa84#P=t)D~36poN>noFz?@3Cf z?Mv@=$=kBOvA(iMwtIMv1E{N{PU^v;+$_?R!w1SFc0g0PbV_LTA#!XBUC3#?qotQ5 zw5DY#eBopsEbVw{Je^HbCsTphWnM2hzp@dWA8UxM)-v|Wnqb9XEtMS5x0}iOKZnbV z^6|@TN6=hcMrdX)#h5G1xm|10f@V2F{lu1s)NrEtydx>Jzd19|LWe&=m z-BtC_^xgyQOj*Y0+UJKXdw&GXAMI2Q`voo_Z;mqsd>?vx#7M*KTNlwqhcl&?Oq3DyM&VRnZi-XQ=9_6>C|!?j{|tgmT8LDJ9Vz+|HYAM7doF)xF$R+USX z-b`%i$^{EAR;%NM6XUyfBIu|}*2o{jYl4*79$tlASs)8xdH+7WAQD;0*TZW@3YZCh zU{p)};dK}{(=s^v(t)XV0rdy^@F^VC6J}&JhmB)5Mrag+H&)(xRErN9DrcoMc}a^zcbkMh})WVe#Kp0BFOer3NO7^>_)wmO?U#, 2012,2015-2016,2019 +# Ernesto Avilés, 2015 +# Ernesto Avilés, 2020 +# Igor Támara , 2015 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Marc Garcia , 2011 +# Uriel Medina , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-09-25 17:36+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "El campo GIS base." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"El campo base Geometry — coincide con el tipo OpenGIS Specification Geometry." + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Cadena de línea" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Punto múltiple" + +msgid "Multi-line string" +msgstr "Cadena de línea múltiple" + +msgid "Multi polygon" +msgstr "Polígono múltiple" + +msgid "Geometry collection" +msgstr "Colección de \"Geometry\"" + +msgid "Extent Aggregate Field" +msgstr "Extensión de campo agregado" + +msgid "Raster Field" +msgstr "Campo Raster" + +msgid "No geometry value provided." +msgstr "No se indico ningún valor de geometría." + +msgid "Invalid geometry value." +msgstr "Valor de geometría inválido." + +msgid "Invalid geometry type." +msgstr "Tipo de geometría inválido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ocurrió un error al transformar la geometria al SRID de la geometria del " +"campo de formulario." + +msgid "Delete all Features" +msgstr "Borrar todos los elementos" + +msgid "WKT debugging window:" +msgstr "Ventana de depuración WKT" + +msgid "Debugging window (serialized value)" +msgstr "Ventana de depuración (valores serializados)" + +msgid "No feeds are registered." +msgstr "No se han registrado canales de contenido." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "El slug %r no está registrado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..db5d8c46ea370c3adc862ca552337351f1a707cf GIT binary patch literal 2012 zcmZ{kNpB=I7={ZNwr1FdWk#$YLWpEg^^yY&HOe7mqe+^Hx|;-v19Ga|)ehBm$#$g^ z#9@RuaR!MwAT&Q9LWn%{I}dc593Q%Ujm;8Tj2d*2Ye9hf#<=G%JU)U;(q~dg5QA8fVaUt1DQN#I;tMR2&yt^MuAjF3D;p%|PjqkSWDx13m((HdvA z(A)&82bN1qOKGZk%5b{o`~~anUa(%}5UVWXu@y=NZ3$l@Ig#IC&g=i*_7UsBrjVSB z)yOO86qyy2tL!j^Bfko>v*%&1gtWo?iUyn~hM4Ar#DuXN&8oYDS!;X@%C*`Ti96f! zrdwrzE^{_zIlZh%=`~Hl$XnNM*i$b1X!kBNoKSPs&EvhQ2fod8>-twTV!5fV|@fQ&sEoTxlD2Oe&J_ zogy`1Uqw{gx)yf%zHpz0E4ZqN7MiWM!&WnFwy4#N7T$cLiBa1`qBkHn| z(26=rvy2;@%d}uA5Br>rBIM4bFhiPK(kY&TkZhjjhSug$qcI+j>;7$u0Y9k6YSfsf zSRpH2HMseBsoR*Zb=sZP<9b^4W^GwX_rk(HdJ&Q32ey%COvtMg51BUHE`HEo3$Gl1 z=cT}PxGH0n;Ne7cWmni)))DzwwXLi`IpG>KU?P&aUz){*t2F(&I49|qMQY7otp)Eg z=nZlciK3!X;7A}X%?#n{XZmBij51cevB?pGTF8qp;Tgqjlq=jNIpq}@)55P{FcN0O z>cKW#GRfR03D1#WEG9onn!{6t<|{?AM9l}QnSk1v##2g=M20yN<+6`+R+>Sty&fzp zNO9^FL8_Pbx(WJXnp!Cjm%3E6Ke-9HDrDv}fXQ9Xdps_, 2011 +# Ramiro Morales, 2012,2014-2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-01 10:26+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "SIG" + +msgid "The base GIS field." +msgstr "El campo GIS base" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"El campo Geometry base — corresponde al tipo Geometry de la especificación " +"OpenGIS." + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Secuencia de líneas" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Multi-punto" + +msgid "Multi-line string" +msgstr "Cadena multi-línea" + +msgid "Multi polygon" +msgstr "Multi polígono" + +msgid "Geometry collection" +msgstr "Colección de Geometry's" + +msgid "Extent Aggregate Field" +msgstr "Campo Extent Aggregate" + +msgid "Raster Field" +msgstr "Campo Raster" + +msgid "No geometry value provided." +msgstr "No se ha proporcionado un valor de geometría." + +msgid "Invalid geometry value." +msgstr "Valor de geometría no válido." + +msgid "Invalid geometry type." +msgstr "Tipo de geometría no válido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ha ocurrido un error mientras se transformaba la geometría al SRID del campo " +"de formulario de la misma." + +msgid "Delete all Features" +msgstr "Eliminar todas las Features" + +msgid "WKT debugging window:" +msgstr "Ventana de depuración WTK:" + +msgid "Debugging window (serialized value)" +msgstr "Ventana de depuración (valor serializado)" + +msgid "No feeds are registered." +msgstr "No se han registrado feeds." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "El slug %r no está registrado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae392de876444e0c8bd5b654278f53dbc53fd57d GIT binary patch literal 1865 zcmZ{k$!{D*6vhh(ONKRJCoC^P$eu(!i-RC;V?^R5au4-~4v`$d>}+8O)b4 zzsGz9^TYe_2jge(1MnB{b@254LOcy#2A>1Bzz4wH@&0Gy{V%}hvHuPDDEI^TIQSEI z4E%Mxe;0fK>%YJg;4v6`5RAZw!L#6t;2g+)uYk{j8vGhDeGYzv^%NdO;0^F4@H>$6 zxdY;gxC^qMKS0j!=tDxh3QmDffy*GTLE7+O{`6kg?GX(uQf=zN-bl}em0 zvpsQfWm8<7#L#iZs7}z%iWLi6I@uTBZl-Gg-Yz}X#HzN6^57AdSSw7>lsU7T!ce)2 z%;EDWbJ_-R*-=-iBq!+=Auyc>g<{qC;9hA;AC!5wtrI?Ll}}q^2b-oy=?zahw^QMO zjW+7LC38hca#Fr)@3$#ARKi%ayt|IXqm?AOs(g+D#FSi@Hg%N^l{p`xwLH~HbfHM| zsO@5^wAS0vf=6+2H(EqJW149+-;Ns1s5wi`x8gTv&or8i1};V$YFo3-1NUa5nFck^ z#*OBg21aF7<{@fxdl(sN4OLdihys%!cR@PS5miB7V ztTieN&T8sK*g_kB;Mvvz)*{odV^D}ca`geZX(#d&hR_7{WowcNg-%>G=mo$5tlAes5w2hYN ze=6masDt}l&yMV84xK=(t-?sJT}@m?e$q}lI`Cy_8V%^6A(|*nCN8gv3(kAE z3=S(Ym{46G7Tj2DdHEQ&M!sYzyu_7~!xvJWk#$@+HBsOx(bl7|#?3#xB}v=u;Z10f z1LQzBy#GF4kck?FZ-%$5l28i%feIb, 2012,2015 +# Ernesto Avilés Vázquez , 2015 +# Igor Támara , 2015 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Marc Garcia , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "El campo GIS base." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Cadena de línea" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Punto múltiple" + +msgid "Multi-line string" +msgstr "Cadena de línea múltiple" + +msgid "Multi polygon" +msgstr "Polígono múltiple" + +msgid "Geometry collection" +msgstr "Colección de \"Geometry\"" + +msgid "Extent Aggregate Field" +msgstr "Extensión de campo agregado" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "No se indico ningún valor de geometría." + +msgid "Invalid geometry value." +msgstr "Valor de geometría inválido." + +msgid "Invalid geometry type." +msgstr "Tipo de geometría inválido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ocurrió un error al transformar la geometria al SRID de la geometria del " +"campo de formulario." + +msgid "Delete all Features" +msgstr "Borrar todos los elementos" + +msgid "WKT debugging window:" +msgstr "Ventana de depuración WKT" + +msgid "Debugging window (serialized value)" +msgstr "Ventana de depuración (valores serializados)" + +msgid "No feeds are registered." +msgstr "No se han registrado canales de contenido." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "El slug %r no está registrado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e0696d5a4cf78700427d1d9aea99fc003fa836a0 GIT binary patch literal 1441 zcmZXT&2Ah;5XT!5AS@puB;rE^C=Li)(ai2fQHaMFK^%uH^1{kqBHy4hQ#;#HZ}-sM zT=1jNxNBp!f0^9mf0cmPgZkl^35yEYqIuKl^XtE#Jds(yR%{C5KDdB_#W zw~$MazaeqmeN2c0um{Hd@4=VApTU>GU%_XglksJEv{!F(Lb)}A8Wh-IR}ZWHHQ!%8e-?H zBb(>7b6n7L%!Y!K#*eIf;iD8ZFU}o+p)6CWucgjhG8h z(lI$Ml@E-{(s*!MM{@^N&K{~Fo(&q;!Qz5_U6=H>BjwFIVI{`E*#{^m=@rR6b{=JA zR6LNTw5>g^tP4rsm#Ro^)um5{Hlx+4YU9 zoo=TC!(@*SRgAe}x3RSAT-|O$3y+k+dw6?7YY>**7ZbpHRLc7vZnN7;a(s>SBpAGLMH_z;vUSpT+nA{fl z*csitufl1{88vsc2D)}qCwI_fJ|j~#s^7Y{N%McV)(pM1Mcwtymbfd?(CBAXSgMyT zK2b=^Nl%{78eHC&q~)?NW+#%Qrlz~&Tjp|7St^)fYu8#j)o5^-C_j;@*tTfyT+Mzm z(Q46Mh~mXi%{|Zd$XGg@J;VgqRNRvqQ@7%?a=y=b%_dhe+UVJdVZ=P0g4qeizwNIcr-JNM-vX? YF~3>tX!460K~?O-?BQZeV*FJ63*?uceE\n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Secuencia de líneas" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Multi-punto" + +msgid "Multi-line string" +msgstr "Cadena multi-línea" + +msgid "Multi polygon" +msgstr "Multi polígonos" + +msgid "Geometry collection" +msgstr "Colección de geometrías" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "No se ha proporcionado un valor de geometría." + +msgid "Invalid geometry value." +msgstr "Valor de geometría no válido." + +msgid "Invalid geometry type." +msgstr "Tipo de geometría no válido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ha ocurrido un error mientras se transformaba la geometría al SRID del campo " +"de formulario de la misma." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "No hay feeds registrados." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "El slug %r no está registrado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23ec22d33befd3478bc1397335fc8a24ed947b8c GIT binary patch literal 486 zcmZutOHRWu6a>L4OV%tN5{p*gIw=ALmmowb5~vjwgl>^ZUQ<`89oa4|+=E+iCeFf3 zi|B@tM)t__KI8Ab-Onw;HgTVLNZcVF6Kll8FM2$uv-bR9Xw4Ke&+c+ILhF>#0`jTU zg$W+9GS;(!D^$*|=Y?ab5fBU?Qr5L7J$c!U^eCVmMyD)1VNnd>xrok=!YB;M$R6=c z)jj|5#p2}jC?o`Z={!rV)UK4?SOND^YvrJiD#sEoXd9AO*>toN*4m+SLOdU k7qFTY49mHdCA&3t<^\n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11ca50fd99ddb9d84d8d2f1a7132774fbc83d79c GIT binary patch literal 1921 zcmZvb&2Jk;7{-@U3Yb!$K&kjBZ$U_j(Ar6QAZ!StB}o;Uw81t3iPOY8UQc#CvznQ; z6U3oH{R23FL?yWOjD!%k+NWc{?JnwoPx1}SEf1a6rKWCm_P9Og~ zz&L~XJmwFWFJOLrAAT_Y0zUx%244o>ITi#@f*NF-Pr&=Zo7MhT)&4i&GuZzgd<6Uz zd=&fxd;(G4KS)b)NxW1TTP`XA3+93XtRFAlGpNd=V--F+VBMrj{hHPn?db|kDMB&M8~XjYvMj#^X3pxl~) ziur7-G~KEKGzHsK<+QRQp;s&^rw^~+^mn*yquo2gNkYw&Zcg_mJt*5uhu1%&zR2C= zTCU|%vso*b9o1DG!A+v0#`&^2?_X(CeAo3v!Im|OtCYRd-B`*Avm=j`Bx&MkIZ0D=VzX!ZoPCMWpj`>6RCkX#971M$`Fa znx9>&jo&f^r39iYCv`0PKsJ6&b?rm1o?P>HAqErk$@L<+^u z?2c~PUFp0^VS@j@aI?Xc!ui4rN=M(Rl(q%59jiFl5Q_gmWq8XHy7Wa%+lZv5LMwAf zO;YrOZA61^%7@O|rAqwhV04hz?|pcbLOmFL*@INL%+&cxW)R)zpj4gmeLlU1?h2iH zHug{(4Ga=ttxnWutE}tOPL@870#jZTaj^pxmX4spaYU9OdNwZhDoRdShf>kh_mS&M zLby_e@S3T5FkZ6)s|(_73PTzl^i+mubesOXg8)+j7`)xF2FGS)=XS~)WGOn_BJQ4V HF$(?zQu8RP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..61c1c5002 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# eallik , 2011 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# madisvain , 2011 +# Martin Pajuste , 2015 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-28 02:37+0000\n" +"Last-Translator: Ragnar Rebase \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Baas GIS väli." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Baas Geomeetria väli -- ühildub OpenGIS Spetsifikatsiooni Geomeetria tüübiga." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Üherea tekst" + +msgid "Polygon" +msgstr "Polügon" + +msgid "Multi-point" +msgstr "Multi-punkt" + +msgid "Multi-line string" +msgstr "Mitmerealine string" + +msgid "Multi polygon" +msgstr "Multi-polügon" + +msgid "Geometry collection" +msgstr "Geomeetriakogum" + +msgid "Extent Aggregate Field" +msgstr "Laiendi Agregeeritud Väli" + +msgid "Raster Field" +msgstr "Rastri Väli" + +msgid "No geometry value provided." +msgstr "Geomeetriline väärtus puudub." + +msgid "Invalid geometry value." +msgstr "Vigane geomeetriline väärtus." + +msgid "Invalid geometry type." +msgstr "Vigane geomeetriline tüüp." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Geomeetria teisendamisel geomeetria vormivälja SRID-ks tekkis viga." + +msgid "Delete all Features" +msgstr "Kustuta kõik Vahendid" + +msgid "WKT debugging window:" +msgstr "WKT silumisaken:" + +msgid "Debugging window (serialized value)" +msgstr "Siluri aken (järjestikväärtus)" + +msgid "No feeds are registered." +msgstr "Ühtegi voogu pole registreeritud." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Nälk %r ei ole registeeritud." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..79cae79daa8ab507ae2f1d997958f60829b29c98 GIT binary patch literal 1936 zcmZXUO>Z1U5QYZ`UrPcc1PJ0og#wbTXlA{JNY)r59K4PUHeT!vAaS9+(>vRCZ}+69 z$7>H9BE*3o5F~QoM{q#=1r8j!fe?z68wU^)2e|Oo?5w>uEsvj_>aMP;x4Y)o3unFx zFrLBl0-hi7yol$s`|uCr5AY-KPw+DM&iz5~6lg&9`5b%zyi?o1sqNo_&%*u#_!#&b zcnJP-a;+t0%J65cO?&x0-SL2v_n7~BTWf*;rO1CZl?0j`5zgHMC^zydk`3%2oo z6PvsOeh)qe{sMBoe}h;OoO@`T$9a(Lmutr0<9L4`d;-Z8R@HY4o_#KG9 z;3xch6#N>7g5Y6cm=!&ehMPpszzSVHBQEp_`x}F{73L`+y)-rAF@^B zLd`QZQC2m$Hr9h<@?fozLZunU4VDc_=d2^!>lMz)ghm5t$U9;3zI8)oQt|^yskB4s z-645fy>D-=t&r`XoMQ*-E2)zxSdlwLnzH*ynZ%B0CYMeLtxCk$7rKzMSfizvB($bg zDSY8%9<&dZrw*_s*rzUMTNf$4>PY40?yWoi#Fkyiy(4l-sClC1v2CJ3B{SW1+oj~x@x(#L*qzewYsOEZRE zUZU3QVk2mC^YM9m+#~1F1eA!$l~RIsaLuUdEBqK1xPFGX_Z+4a%O-`1f@LSlJ?RB$ zsRmZi%nq8u(xl_CtC$Vir9ha1WGRYNIHxErO0UEolEBs^#vNDCKql-l-E*9Y(n&Fd zb$kP18CpcNd-#5cXv#c}&32gA`Rh`5TqurvPNCqT0*%QPvU>a(W$kd5zQn, 2011-2012 +# Eneko Illarramendi , 2017 +# Urtzi Odriozola , 2017,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-03-18 15:45+0000\n" +"Last-Translator: Urtzi Odriozola \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Oinarrizko GIS eremua." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Oinarrizko Geometria eremua — OpenGIS zehaztapeneko Geomtry motarentzat mapak" + +msgid "Point" +msgstr "Puntua" + +msgid "Line string" +msgstr "Lerro string-a" + +msgid "Polygon" +msgstr "Poligonoa" + +msgid "Multi-point" +msgstr "Puntu anitz" + +msgid "Multi-line string" +msgstr "Lerro-anitzeko string-a" + +msgid "Multi polygon" +msgstr "Multi poligonoa" + +msgid "Geometry collection" +msgstr "Geometria bilduma" + +msgid "Extent Aggregate Field" +msgstr "Eremu agregatu hedatua" + +msgid "Raster Field" +msgstr "Raster eremua" + +msgid "No geometry value provided." +msgstr "Ez fa geometria baliorik eman." + +msgid "Invalid geometry value." +msgstr "Geometria balio okera." + +msgid "Invalid geometry type." +msgstr "Geometria mota okerra." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Errore bat gertatu da geometria bere form eremuaren SRIDra biurtzean." + +msgid "Delete all Features" +msgstr "Ezabatu ezaugarri guztiak" + +msgid "WKT debugging window:" +msgstr "WKT arazketa leihoa:" + +msgid "Debugging window (serialized value)" +msgstr "Arazketa leihoa (balio serializatua)" + +msgid "No feeds are registered." +msgstr "Ez dago jariorik erregistratuta." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "%r sluga ez dago erregistratuta." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49b5eb3bb26d05fd76b7c685310eec262498e34a GIT binary patch literal 2242 zcma)+OKclO7{?bVFVpfUuZn{7si;x{tmEVWkwc;elC+^o8ztr;At7z-@n+l2uC=?) z193>A#O}d|9zdc8gv!Njnl?B|iBcpEJ#nZwaGH$~LXo&}fE$7f|8KnOqyeF>H2&?( ze9!;P`sc$3KGX0#hw&oD9gLSSKDiG+czy>z0RI4A2H&|~)1C$$kbM@w2f$0w`WMl9 z4SXK!--C~Vzkr9p-@vE9zoPYna6W?h5%4J34n7DDgAapa;6d=iXnz9a{EOfa_&NA2 z_$zoGHU16eFgFpT8@vN@KZ%Dl?HJes9tKZ?T;E6FE8rCP8h9DxI)4DUo}a*Hz&|4% zLQ%&tKL+-Ir@%+RGWa-n5qtss66E-|z*FFlpa74;_yjl)vcyj?~w z&H5!U9>suc>fs*vInaR8j9<~d(u2>2AJ!VBE6unMt=A#pd9FupHe2*Ok)!De;ZWci zj-PkENy{-Qm=I(NcTxo2ECsHbkBtuYk(z@gP6Hu>ddcriYJHYX@lY?X0$+(8BYuh3l zSgxZDI*4WE_S8395XpZptBgr)$Z`bvfrq-Z;i4T_RB-KC6M@uBxA*Vs1=n%{?Tkx# zA#y$$o*)!v`GJ5~N#1BmqjFHebEm8v?~N$ekto5a!9GztV|LM`;~rVQvom)oxGQ7^ za*rFnAoLuoxw{r?pk$_F){8hhLg<=M2Ym6QiQwdVxOdn^sPLt7!Uq#!XXVPU5@^!9c=^*W_G)9r7(n!=M9Lg#vhZ+oChpc}MsYhC^@S08cpaG?{fL zd*I@jMZ*+&Mi`T68sUOq+A+ln^z?L6T~RA9X4s>xQE3c2a&OBUZLNvn!QuYh zp4yYC#M`dJw@lAKk2D2hCTJ_zhUIiocEa#{5p=(s8PGd-?bPQWJiXt^x;b2)G<&DIMUGxlFAHYZ8r^zX(so&kvMUB_)7KeJMy|pW$g-dc{`)asYuaI1oH44jN zX?s;x!zIE`NiK&A;3C29hFq36WmPUKBUrDqQ&p}}IA5=Xi*l9Zm9R|egOoLSgCkbu zYElcoL!=d13(Grmm4*|Ns`I*5pdPg2eKx2C8zM+g?Gq3vvquBXX(Hjuw{G+C@US zw>U7j7S#tM$ifNa6mD!d?Q80?;u!Fq;QBAB M&uIJV?QgYz0H#HU3IG5A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..e362a12f8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2012-2013,2020 +# Alireza Savand , 2013 +# Ali Vakilzade , 2015 +# Jannis Leidel , 2011 +# Pouya Abbassi, 2016 +# Saeed , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-11-06 08:17+0000\n" +"Last-Translator: Ali Nikneshan \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "GIS" +msgstr "جی‌آی‌اس" + +msgid "The base GIS field." +msgstr "پایه‌ی سیستم اطلاعات جغرافیایی میدانی." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "پایه‌ی فیلد هندسی --نوع خاص هندسه‌ی نقشه‌ها‌ی نوع OpenGIS" + +msgid "Point" +msgstr "نقطه" + +msgid "Line string" +msgstr "رشته خط" + +msgid "Polygon" +msgstr "چندضلعی" + +msgid "Multi-point" +msgstr "چند نقطه ای" + +msgid "Multi-line string" +msgstr "چند خط رشته" + +msgid "Multi polygon" +msgstr "چندین چند ضلعی " + +msgid "Geometry collection" +msgstr "مجموعه هندسی" + +msgid "Extent Aggregate Field" +msgstr "تراکم وسعت حوزه‌ی " + +msgid "Raster Field" +msgstr "حوزه‌ی شطرنجی" + +msgid "No geometry value provided." +msgstr "مقدار جغرافیایی‌ای مقرر نشده است." + +msgid "Invalid geometry value." +msgstr "مقدار جغرافیایی نامعتبر" + +msgid "Invalid geometry type." +msgstr "نوعِ جغرافیایی نامعتبر" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "مشکلی در هنگام انتقال مختصات هندسی از فیلد به SRID رخ داد." + +msgid "Delete all Features" +msgstr "حذف همه‌ی اشیاء" + +msgid "WKT debugging window:" +msgstr "پنجره‌ی اشکال زدایی «متن قابل درک»" + +msgid "Debugging window (serialized value)" +msgstr "پنجره‌ی اشکال زدایی (ارزش متوالی)" + +msgid "No feeds are registered." +msgstr "هیچ فیدی ثبت شده است." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r ثبت نشده" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..19f994db3ee090b89d011add3d757ec77fd26ae0 GIT binary patch literal 1887 zcmZ{kOKclO7{|9zUZ%XttGvWl9#SH-wi6^&Hslb{ zLa0LAIRFwpa6rn9Q!hOrZn=QOnIozyaYH<=aN$4eb&{s)NSmMM^*#RcefjO|>8}Hf zXYjp({|&vHlbIFnAMu z1pEVh0{pjJKZDEXFh2*r04{*{flcrMumzq0KPvZop!fedxCMR#J`Mg3UO|lif%BNR zVdNF?Q}B84JMcO1N6`EG74&iZ1^RqX-9OF$Ww3(zJD~Tw0X_=0!H2*Ocpe;rKHe`t zmeEtdi{J%-alk3 z#@UjmOZpi6K>CFq{%!p5zTvvi%=-;i6tOYdknVJHV>qU9j}Pk-IYOu(`PSN>gT9{v|1e@@Fu&>CsOgPMQ zrS!nEwSt_;M9<}tM$+_9wbPyvxs`)Kt^`^}n7)>doy$>qBR%hH$~r*!jNL12O3Kvxa=e0)c1j! zRkjpvGRZPoy~}RsL#v{Lj6>g1V~G%nkxc4aYf!Y- z!42sq)uZ?d7s8(sN_jcZU4@OZyJRqJufvqLCcTMMa>%faKD&$gMk~zN, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-12-09 06:30+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "Paikkatietojärjestelmä" + +msgid "The base GIS field." +msgstr "GIS-peruskenttä." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Geometriaperuskenttä – vastaa OpenGIS-määrittelyn geometriatyyppiä." + +msgid "Point" +msgstr "Piste" + +msgid "Line string" +msgstr "Murtoviiva" + +msgid "Polygon" +msgstr "Polygoni" + +msgid "Multi-point" +msgstr "Monipiste" + +msgid "Multi-line string" +msgstr "Monimurtoviiva" + +msgid "Multi polygon" +msgstr "Monipolygoni" + +msgid "Geometry collection" +msgstr "Geometriakokoelma" + +msgid "Extent Aggregate Field" +msgstr "Laajuusaggregaattikenttä" + +msgid "Raster Field" +msgstr "Rasterikenttä" + +msgid "No geometry value provided." +msgstr "Geometria-arvoa ei annettu." + +msgid "Invalid geometry value." +msgstr "Virheellinen geometria-arvo." + +msgid "Invalid geometry type." +msgstr "Virheellinen geometriatyyppi." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Kentän SRID-muunnoksessa tapahtui virhe." + +msgid "Delete all Features" +msgstr "Poista kaikki ominaisuudet" + +msgid "WKT debugging window:" +msgstr "WKT-debuggausikkuna:" + +msgid "Debugging window (serialized value)" +msgstr "Debuggausikkuna (sarjoitettu arvo)" + +msgid "No feeds are registered." +msgstr "Syötteitä ei ole rekisteröity." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Lyhytnimeä %r ei ole rekisteröity." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fdbdc09c036041abc4276bbc59e72c26a679e2c3 GIT binary patch literal 2052 zcmZ{k&u<$=6vr1Rzf7S}epLd*69p+%StqHelx#>vNa83op;7FXBDhR;pEnz=XO@}S zIH{1R5La$gq6Z|d;ef=2KLB4q;?51BO2DNDI3dA>?_1k(9K=ZDkLTz6zBljf&!!FM+2Y=<_0oEx~nA?7k1a2$mp$x4_fjx1i|#0elMl39Ny4LGkM^@MZ86 zM2g zhrQh=Z>n)~b9ISKdwfj}P&?y1sRv8ERi>#N?`AqNU7B!gGnHpIU}IP1C7;8doIR7u zb84{irDYc^?|Igq7Shyms<7IS`+}9#X0S5U5Su*b*k?uus~UG@$q{|~1=s&OU0JLL zYnf(p-a=QfUgkcd!sPoYE~-XhetbPFOs0MCwxKq2;z(I02+N#j1gkC!hoPx#P+`q( zmdM&hb#!B3U{lGNfjiB-Oz9O%nbUV}-u7cxwh-1r5v_cbs}n5*6}t?YY&w&Dp+n?@)01sGd9Jp;y1qPeX}UgDTQpjdENmeh5qaM8lSQsFJxB4j zvX1@y)m9^%8SSg8fo-^~W0N3vBAVIC{GrN-+P1clmsaIr12y0x(nU3N^B3l*|95^u z(+mv^t5E^=Ur;8IC}wMiJ*B+^)9D=`i$B1j z1aYODsjA4N6c;*$+#=Oj!YyR%*ok`3VBP!5V;;Mb-ochh5o(%1{)!~mJE#g3M2$Af zqOe&9nd?pISxlju7**#gZ7x{sTZBH9+TH=GR+28k7$R9GB?rybm0@SFhN`kr%-8z5M$6*%(G3vL`x-ID9gfoup0;1kgW6_MSZzQ&e0FS$l=ngzmzvsn zxks$~7ZA_;dwp5H+ZFsdahqLb-7}*wcSD z#7Vr6^2f(&I6H25u>LB=207#kqZ3jkNo|iR9h;CvuIL>c`3?-e4*!<`_%3|+Wfc4i D{ghtl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..a3c5a8a71 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014-2015,2017,2019 +# Claude Paroz , 2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 15:59+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "GIS" +msgstr "SIG" + +msgid "The base GIS field." +msgstr "Le champ SIG de base." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Le champ géométrique de base, correspond au type Geometry de la " +"spécification OpenGIS." + +msgid "Point" +msgstr "Point" + +msgid "Line string" +msgstr "Chaîne de segment" + +msgid "Polygon" +msgstr "Polygone" + +msgid "Multi-point" +msgstr "Multipoint" + +msgid "Multi-line string" +msgstr "Chaîne multisegment" + +msgid "Multi polygon" +msgstr "Multipolygone" + +msgid "Geometry collection" +msgstr "Collection géométrique" + +msgid "Extent Aggregate Field" +msgstr "Champ d’agrégation d’étendue" + +msgid "Raster Field" +msgstr "Champ matriciel" + +msgid "No geometry value provided." +msgstr "Aucune valeur géométrique fournie." + +msgid "Invalid geometry value." +msgstr "Valeur géométrique non valide." + +msgid "Invalid geometry type." +msgstr "Type de géométrie non valide." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Une erreur est survenue lors de la transformation de l’objet géométrique " +"dans le SRID du champ de formulaire géométrique." + +msgid "Delete all Features" +msgstr "Supprimer toutes les localisations" + +msgid "WKT debugging window:" +msgstr "Fenêtre de débogage WKT :" + +msgid "Debugging window (serialized value)" +msgstr "Fenêtre de débogage (valeur sérialisée)" + +msgid "No feeds are registered." +msgstr "Aucun flux enregistré." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Le slug %r n’est pas enregistré." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..19b093b5c808911bab83c6bf00cba50832f676bb GIT binary patch literal 476 zcmZutOHRWu6a>L4OV%tN5{p*gI01oDmm)-IrJ`0;D8SkzFTp6aBip6zLAU@1<1D;T z)NUAQWRE=WGyXo<|J)($5)X;T#699Eu|Y!oqQ?%Mjc0?YHSd^tHp=8dy z)AJu+BF-;PB0?~h&a>1??JDVw6>u-LRu0Cfa;)Hrwjp^_{mM}3!dz30F6XjDmZF>q zctPjUY8YA?CpEO*ysri4i^U@JO=nf$GR(}3*Xz8F*L)q5SAVT|vEuDuGMWswKM{vf z&^OwnrVUp$MfJG!yso6uUC7>~b?AFf>5wH`Uo)>j%LY0#xzeS832$^wd2Fs\n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..846f0d559c58ebd84939fd3163c9e3171f11f3c9 GIT binary patch literal 1420 zcmZXT&u<(x6vqcB&@R8!R-&MS^Z)^^D(~*3Nt;Z%6i8cGlr5`tLA@Z=o$<~%^4cTY zn>73l+z@|2xu72Q$|2XeA@MJ8;9c-t@E&-GGe3eqKwdjBkM}e9A>`k{55Pabx4?hE5ce^720RI;E$}=T;(Y>s z1YQSU0dw#qxVz9h5aFUO)E;~xbOLvAgxtb-9TTQ;oWeKM82r2xcjhtU@(WGET4TxN z`P5ob(0(N}dCRpM8#|G@Bwq^6B%S`$FZmc+vx{rhrk z#V*&SY3+#GSkDHolm+{8S~@l|8MTJrj@XtJJp2N7gL{$DN;kdAx+zOHD7})cZd~f7 z-7XB-j@XmI=aSt9Te(c>dbYNDsf*Ft=FYQGxFN;8u^D~CwU&;y1xitL4cS2aTt%@h z_1JudGrFAeQm~QWlZ^USx{5AT-q%^Dv%kOJjyEpH;z2t%lg_-NCs2#SosxGhwg&yd z&1bcz?QUz!XfHH!!gXfk#RK1|6_UC_N=O4q4NQ1^N(Sf*il?J8C)ag_%BWh_@O zZnlyUl2M!lx3+nRXUI#+6*qaMnnU6`ybU>N9`VBRyz*2UDtt4e_|&1c%_BK+g2t7R zc<0O3?PP1N=AP62ic2M%!(`OVOwFG&C5, 2011 +# Michael Thornhill , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Pointe" + +msgid "Line string" +msgstr "Líne teaghrán" + +msgid "Polygon" +msgstr "Polagán" + +msgid "Multi-point" +msgstr "Il-phointe" + +msgid "Multi-line string" +msgstr "Il-líne teaghrán" + +msgid "Multi polygon" +msgstr "Il polagán" + +msgid "Geometry collection" +msgstr "Céimseata bhailiú" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Ní soláthair méid geoiméadracht" + +msgid "Invalid geometry value." +msgstr "Méid geoiméadracht neamhbhailí" + +msgid "Invalid geometry type." +msgstr "Tíopa geoiméadracht neamhbhailí" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Tharla earráid ag claochlú an geoiméadracht go dtí SRID an réimse fhoirm " +"geoiméadracht." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Níl fothaí cláraithe." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Níl slug %r cláraithe." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..953428290ff4aa80804a5fae537706792ae9e614 GIT binary patch literal 2082 zcmZvc%WoV-5XJ`x0haIzuSh&pA|kROv-WOs2;&%(_z^AG*z#^55{IZg)7#Ubw|nU6 z@dNo_A zIVZtQk2||b&V={&N^6!(_u!o0KwZgIR*z=+Y9)lS|E6nd1q|;WFpcgI4QtxcvatB;?Q0`S$azf6-YVO;HH3(&`6AI?;an)r+i!FzJM?*yXxW+@C~Dlw;)xJfakMa2Y-Er+vdcH> zsp(DZN*h8A{7i^!V!XE4TAbTYqEVl$%^2<5D(;{F2|2#uCJM!*o}x5ow&ZU5YG*#a zu)i+!KezFmPECexN$A3=bbERe5?O6oRhFrE9$jB1q>J!cPM@Em-N)%MJw4r^tu69w zjMHm0NeOvtb7*aPYa>|cRcg|iGoJgy|92*s;1TJbTMuuL!fg88C!)INCSTT ziP=>dwR!)JE!l{PdQg$&N+KCV$C(Wx_V*lF(1t$zXOxjyu6fjga|Dq 2 && n < 20) ? 2 : 3;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Bun-raon GIS." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bun-raon geomatrais – thèid a mhapachadh dhan t-seòrsa geomatrais a chaidh a " +"shònrachadh le OpenGIS." + +msgid "Point" +msgstr "Puing" + +msgid "Line string" +msgstr "Sreang loidhne" + +msgid "Polygon" +msgstr "Ioma-cheàrnach" + +msgid "Multi-point" +msgstr "Iomadh-phuing" + +msgid "Multi-line string" +msgstr "Sreang ioma-loidhne" + +msgid "Multi polygon" +msgstr "Iomadh ioma-cheàrnach" + +msgid "Geometry collection" +msgstr "Cruinneachadh geomatrais" + +msgid "Extent Aggregate Field" +msgstr "Raon agragaid a tha ann" + +msgid "Raster Field" +msgstr "Raon raster" + +msgid "No geometry value provided." +msgstr "Cha deach luach geomatrais a shònrachadh." + +msgid "Invalid geometry value." +msgstr "Luach geomatrais mì-dhligheach." + +msgid "Invalid geometry type." +msgstr "Seòrsa geomatrais mì-dhligheach." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Thachair mearachd le thar-mhùthadh a’ gheomatrais gun SRID aig raon foirme " +"a’ gheomatrais." + +msgid "Delete all Features" +msgstr "Sguab às a h-uile gleus" + +msgid "WKT debugging window:" +msgstr "Uinneag dì-bhugachadh WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Uinneag dì-bhugachaidh (luach sreathaichte)" + +msgid "No feeds are registered." +msgstr "Cha deach inbhir a shònrachadh." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Cha deach an sluga %r a chlàradh." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..999468e8113f0085aa60b9cad0749f8817393bc4 GIT binary patch literal 1421 zcmZXUOK%)S5XU=eutQ^Knefc+1Y#m&%^%)d=2~&jCK49J`4T<#`FG~`)82+W%x_rGWa$a z&)dhJC%`YjH^2#qBBN31Q5r(iKYju;<%d>r;LERN0$LTnmh=d2@} z=e2WO(BXs)1t*OkTQ^mvq%dJB*-kmQV+ywQ_jU(Y$c`7+VgQX5>mn7`PXcnQHRnND zBL?O`YE|5q?6~6e|I^r2V}4s1CLbJX5IeOFiYlv*OC)N&L_fHmR92ZFKD9JvE<8!c z~dvYNOpXwisYlZ^vTF()ERy@O12!!_z99LGH^yKz5aViub=eSsDC-Tw6@&q z_j=fv?DBz%IT!Y=B`fbxe>Hpe(sB=@vn_o{M)8KU4Ay1zi8Mxe+Gez(>3viK_e0&f zsWM~x0b)#9%aW53%V|c}aSyqYhAvD(sIqSN@bEBgFI|oKD9!D(J8S9$dLG{`b@yUt zXRveiwEceC>ugyQ*q|)jXhwmLLbuXVnRUu1(s>RWpO3C3tEc-~fw4=jn%ow+;fz*q zs&KE)j7r@Z>e@-2T!XB9My6_Azp=7Tvwt@(7&)4yVNSVu$0SbW!tsp2WT$0gvl6GYw46t#g>JRbJg56RPcRC zycnqmB8@e4(A, 2011 +# fonso , 2013 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Secuencia de liñas" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Punto múltiple" + +msgid "Multi-line string" +msgstr "Cadea multi-liña" + +msgid "Multi polygon" +msgstr "Multi polígono" + +msgid "Geometry collection" +msgstr "Colección de xeometrías" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Non se proporcionou un valor de xeometría." + +msgid "Invalid geometry value." +msgstr "Valor xeométrico non válido." + +msgid "Invalid geometry type." +msgstr "Tipo xeométrico non válido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Atopouse un erro mentras se trasnformaba a xeometría ó SRID do campo " +"xeométrico do formulario." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Non hai feeds rexistradas." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "A url curta %r non está rexistrada." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c5c981e2032615eec2d279fb87b3d3d47e8788b GIT binary patch literal 2190 zcmai!OKclO7{?bVFHxTW zp$c)}*gOm|O;eIa`1|P-#_uzft z&*1&wui#Pe&v^eZj89;F0(>0o1@8p&;N4&WJPf`Y%c~&A{}>zxm%)d@U%>0g@h>os z^>=X62Ohu6FrETOLC&WFJ_mjXJ_cR|p8>xGp9X&dIlsSS`B5bCJl3Z`&a(h=o*vi@ zegdYzufPYuZ$Pf|I>>Pq$aa5#+{YvL7)BRZ1(B|=Yg>-GteIGHVZLcAE zpyP>1knMRiBJ8LkMQ9AqM#7KijN?e**pQB}KVx*PV2ma?lmgEarN|9@W6Xyyx4b96 zxw=T-x~(Iojd9l(6h;zx8Tp16xl|9lIR}pP%JdG(&3fSak?}@A6(PzY*-{V^bHhlW zS!ot@TBBo7T?W%`nPn5&bRrHgX|qjSPQhz9)FsIc{hJqB(LR?&w0p`91)=7oo4b2S z4|JR9=7lAy+4V3vmUDICvss}oN^Zq1+1w=RG%nK3dHZaU$_I|eGA3kj9!)jJ%H~@_ zhOo1!eBSn*AT=rKfsD+2=(uI`m4*|V#lWJ}#5r?POuMXV4&kUQ%4Ks|Guv-wbJW{s z<@!%$F;e5G+${2q^6V&(7UhL2>8y0C!gJ}x+I#KU%TCR9y>uz4ora0;G;BwhMPb)0 zdQD78fh$yvqPmsI%*@QB^$m3^VwMdu?L-rJv2~^@GCisMSbli7q~3Hk^=jbrB{Pd? zheeT?jWTu5cKrb=Rc#rHXzSnaiId&0yDNn4Hq_Y>^6i-1xQ6=S6m@CAin_>6-GcI} zYLc#R5uq+4Q7z;1*if5%cyZeM3Wi$Z59#p9bP`Qk+t$i xJow?jg_uVlTl~R)EJz-my;9=G2Z1jqk(sqjWw#y^zX9%=vp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..4a3669128 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2012,2014-2015,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-08-02 13:28+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "GIS" +msgstr "מערכת מידע גאוגרפית" + +msgid "The base GIS field." +msgstr "שדה GIS הבסיסי." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "שדה Geometry הבסיסי —ממופה לטיפוס OpenGIS Specification Geometry." + +msgid "Point" +msgstr "נקודה" + +msgid "Line string" +msgstr "מחרוזת קו" + +msgid "Polygon" +msgstr "פוליגון" + +msgid "Multi-point" +msgstr "מרובה־נקודות" + +msgid "Multi-line string" +msgstr "מחרוזת קו מרובת שורות" + +msgid "Multi polygon" +msgstr "פוליגון מרובה" + +msgid "Geometry collection" +msgstr "אוסף גיאומטרי" + +msgid "Extent Aggregate Field" +msgstr "שדה Extent Aggregate" + +msgid "Raster Field" +msgstr "שדה Raster" + +msgid "No geometry value provided." +msgstr "לא סופק ערך גיאומטרי." + +msgid "Invalid geometry value." +msgstr "ערך גאומטרי שגוי." + +msgid "Invalid geometry type." +msgstr "סוג גיאומטרי שגוי." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "הייתה בעיה עם השינוי של הצורה לסוג של השדה." + +msgid "Delete all Features" +msgstr "מחיקת כל התכונות" + +msgid "WKT debugging window:" +msgstr "חלון ניפוי שגיאות WKT:" + +msgid "Debugging window (serialized value)" +msgstr "חלון ניפוי שגיאות (serialized value)" + +msgid "No feeds are registered." +msgstr "לא נרשמו פידים." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "ה־Slug %r אינו רשום." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d267a57536f746570bf3a74cdb6d56f6fae389c GIT binary patch literal 1818 zcmbW1&u^4P7{^CN#q|dPB5Ks+@j!$$@4LIi)b_14Dg{~7!ltZ*c=C1M*>{J$o!QJg z+fq*jqiv$biX^VG4MM0AovUTF!&p|6Z~_a-+4D< zk3)VMd=eZ5?*(VU`@xgo6X2WR$MAU@{0Z`oZH$e8zk*}n9ypDH$H2Ydd!VcL5?BR) z09~Bl!71?3`xuMCH^3d>Rd5&hBN%}>k^#FcdkK3{D z@fyZT1G1MTajlgm)ogaP<_Rsdxg?`wnYWal6EY>!=9F?Z$BkYjqr7~4wl+noHGJkA zs3mxogzVJ~ho;Ih-ZVld{{;d4+&t9g;Qv$}V!4-y>Dx+(3|By#zz z8H!QY>J-`uYDsW{>l|%Gl$?rXs!FrGqqGTT@>C?jE8R2?8Y-ev{a7P7sCn#05KP5} zM|7Z4eLkpEgX%a{N2BM)M=I4y1%|;apBFCXklpx(U1g+#Rho`-6ExfnWwB8@qSs<6 zMNZQktz`59s)6`Y=EYFRmU(f}ys)qk`WqK5emZQb zxpKdw4P*o7a$A)5mu6}+hqijJhLzGmB@LIT3D+5s;ipZxlf^<#P_rHDoSVtl8;66j zEj$0ZxDF1VHn|ll06aRrgPn zm@PiFy$@}%W{YdK_}UiV+oHfP*<#i9-Un`be$hLw+v1{gaY5E${-rIh+TM~azVWKh z`hk|oKYN#Exxk7GpO*E!vM$sBOGRp3eF=OV!6w<#R?*AUZA_W zeprlS$(x`&cLNuERZzKm#N08pv#zJDAh#Xh&>Y~s`H0T@fnI=WC^|w8E_cOcz!Zkc V{)eet@gv2%IOqO`?zn}J-2|fz58D6$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..7209a619f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chandan kumar , 2012 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "बिंदु" + +msgid "Line string" +msgstr "पंक्ति शृंखला" + +msgid "Polygon" +msgstr "बहुभुज" + +msgid "Multi-point" +msgstr "बहु बिंदु" + +msgid "Multi-line string" +msgstr "बहु - पंक्ति शृंखला" + +msgid "Multi polygon" +msgstr "बहु बहुभुज" + +msgid "Geometry collection" +msgstr "ज्यामिति संग्रह" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "कोई ज्यामिति मूल्य प्रदान नहीं की है." + +msgid "Invalid geometry value." +msgstr "अवैध ज्यामिति मूल्य." + +msgid "Invalid geometry type." +msgstr "अवैध ज्यामिति प्रकार" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"ज्यामिति को ज्यामिति प्रपत्र फ़ील्ड के SRID में परिवर्तित करते वक़्त एक ग़लती हो गयी ." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "कोई फ़ीड पंजीकृत नहीं हैं." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "स्लग %r पंजीकृत नहीं है." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f98a3bec77f011d41c722f7217d2453948f6f238 GIT binary patch literal 1549 zcmZ{j&u`pB6vtgCzm@``AfUkEA(WD+ve!;4Xq;^Mksl~kQntyq;yPWw_0I0>j5VI! zZK9qz0S8p>#_tW#^HG5oWldF4}J+s@HOz4n!kZ>K>ic-`sbbsf)~L{;7i~F_$qj{{=Nym1^G7k4mbdx z0lxyD1HT3@fe*ny;PXfD4&-mo&*D6)`48yxya?m>!6x`RxDUPz_QAKoDd_X~u9klQ z7a{)yJ_|kqecZo5ANOw%VS@|U{$C(`@B%i%Rm<1r{rLse%C-{lXw)x0zF$wzP(6LD z=l$EKn%G)n$#lD8YdNE7pEWrvblEd@By~=%&y=$nv9kx{OeOE{ZEuk2ojvmg)RU~T zDA-`dj!7s*TP)nzav6L+chWUVao0(sgKa$#N@k}5926Y=|1-44_`V}GQ|T=73U~UeN3wO(0X5nY!ybL=grAGUUPPlII zU!WUq2*)Wc$H_-woP@~=B_F2OR<6WJ978eO&*-hp_2MfrR%1t$F6{VQQ^FaW z(oLbYENO>PilQ}S1Mw48iILPja|1RyAB&vB4vSGr>((G2p=q)2T#+`L)9Ey-8bS8> ze$+Li=B%hWRBhkv+vZYZcYAm9r2Hg`8|y|p)<_FCnv&!Du30D{^(uAy!j|k>cRE|) z^%K3S>DY#wx@$7ra7x$jN%uIJPD@o{MiV50~Z?u-@M{BKX{&lfZTT5bk@L*;Fop=d032c^E8^MM-K2nATOc}bx z^6}A-(I)a_Ohi`>gK}tc->U;beoTCeAKtU__()PYVLH^}*KfpN z$nzob7J`OG@esa6aEoPGSTVu>nKcwU@C8>G SFCRRZk5{EPo6yR26#NU8tg$5k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7c844b693 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# berislavlopac , 2012 +# Davor Lučić , 2012 +# Filip Cuk , 2016 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Točka" + +msgid "Line string" +msgstr "Linija (Line string)" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Više točaka" + +msgid "Multi-line string" +msgstr "Više linija (Line string)" + +msgid "Multi polygon" +msgstr "Više poligona" + +msgid "Geometry collection" +msgstr "Geometrijska kolekcija" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Geometrijska vrijednost nije priložena." + +msgid "Invalid geometry value." +msgstr "Neispravna geometrijska vrijednost." + +msgid "Invalid geometry type." +msgstr "Neispravan geometrijski tip." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Došlo je do greške pri transformaciji geometrije na SRID geometrijskog polja " +"forme." + +msgid "Delete all Features" +msgstr "Izbriši sve značajke" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Nema registriranih izvora." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slug %r nije registriran." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7ef1869635e434347a3536d8e1f8b1cf0eaefcfe GIT binary patch literal 2045 zcmZ{k&u<$=6vr1Rzf6HrepUR^ld7UduxmTXq1h0iB}o-X+9-Ajg45VLUXMMVSzUMGr!uS#6WsJ-B;RoLz;0NHJ;BoNX`#tYzP=W5uRqz3DXSDv+X#G3zd942c zJ_h~*J`Vm4J_Y_gT0e}#$1pzzz6h4V2f;P)VXy)o20t3fo1nA*F}MnT4n7P13VsV8 z{{fx9-#|$b{146*Y9E+e{R3i@g&A07*1~i<53Kx zE&q;==xn>s`RqOyo6Cp08~3?f!__<%7q53(5jRE~()D^~43DVWw=;nwuX>U>_=SXm_9I4E-ms3EwF0&kJmvN(3fyFx{}OD9uq1e0PLHZC%m@hR+) z+;U=4(lTc@Gd%T{wk%hcPRFs~F@tp3>GRI6RJ^leAL?34UbjLkZ$&|ui1zu{OL*}A z<=kT6tqR2{wFZ89Ynily5-oc%6y-Bt-YxeNEtK`nX=-pDrNj&;I3`ldk*vT8CaKA7 zP-65&5joj@;plf>CPIh*fQDZ1-=LT}yZ7Lw|(ME?8Sq&OE+)M6^u zg$7Lk7@i&MX@lKZEA7q zW~t2*F}V6VHKX3(Hl>r-C|ZmnO?jE(iL>!56)oN6O}u6}mq}(AC4(JqyV{7r+th8P zDd}0JaD3aD85eHLRj%$b#i)7bR;09LQ{Lv_X8#5?GS#jNxU=14gPXj64G&*xJk76> zPgl!qT+6#xzT98P&KH=e^>3Iq^Uk$+GPuh6*F?9s-&?etUV=i~6CVg>&!52SUq?XR zW{cG|%Cy_!(%iW8{!{RnBRP+%iyN5Y+j)+-? zP6sVeiC#9e<_#+yd3Mc3d#5AxH8<, 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-21 19:30+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Bazowe polo GIS." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bazowe geometrijowe polo -- zarysowane do geometrijoweho typa specifikacije " +"OpenGIS. " + +msgid "Point" +msgstr "Dypk" + +msgid "Line string" +msgstr "Čara" + +msgid "Polygon" +msgstr "Wjeleróžk" + +msgid "Multi-point" +msgstr "Wjacore dypki" + +msgid "Multi-line string" +msgstr "Wjacore čary" + +msgid "Multi polygon" +msgstr "Wjacore wjelróžki" + +msgid "Geometry collection" +msgstr "Geometrijowa zběrka" + +msgid "Extent Aggregate Field" +msgstr "Polo „extent aggregate“" + +msgid "Raster Field" +msgstr "Rasterowe polo" + +msgid "No geometry value provided." +msgstr "Žana geometrijowa hódnota podata." + +msgid "Invalid geometry value." +msgstr "Njepłaćiwa geometrijowa hódnota." + +msgid "Invalid geometry type." +msgstr "Njepłaćiwy geometrijowy typ." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Zmylk je wustupił, hdyž so geometrija do SRID pola geometrijoweho formulara " +"přetwori." + +msgid "Delete all Features" +msgstr "Wšě funkcije zhašeć" + +msgid "WKT debugging window:" +msgstr "Wokno pytanja zmylkow WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Wokno pytanja zmylkow (serijalizowana hódnota)" + +msgid "No feeds are registered." +msgstr "Žane kanale zregistrowane." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Adresowe mjeno %r njeje zregistrowane." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3223363969da0b09efb19f3e61140b962d7ebd7d GIT binary patch literal 1940 zcmai!O=u)V6vta#zsB`z{n%Ypc*`OttUZ%i_7FQpjBc_!nsGxiM$uDEcTGY% ze>!#IQxEM)^rz9kM}G$Wy*u!O_6PVj_$PQCeC>0ynjF!zju%45pWtj2Tp?(@Ey>_%fVBiDd#@|oxd&c zIq*yH1o#8!;{6eHc0Yp`z~4bjkvsKmRLclN;YFSDn@>CeBDo#kk)%cQHS%$5YwCxm@t;3SXH-h zP@3WlO10{X$gM3Erc31k%gou7>8vDKOwVc(M($s~VUM_Mq1;H7LqV z``16A9!t&mTCSyBI=7(Xs0Zyd|yHP*lGW`Kw$T*aZ}= zF&V4MGEbGZe$&Jv@?Xhf zi=mmlI76eqvlEie%~E}Grs7={ZALcV)i&S3t7qfKB$ya!aOgCZZ-*lPnvBxcuXzGJx8;yV8ZvZH+0z&0N4ZBdWo_g0As z1hTnzbItM|;@b4`k9FVuu@J005@Y^Vnwjc%C%jg^+ir71 z{o6M<;RzX, 2019 +# Jannis Leidel , 2011 +# Kristóf Gruber <>, 2012 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-18 10:14+0000\n" +"Last-Translator: Istvan Farkas \n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Az alap GIS mező." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Az alap geometria mező - az OpenGIS Specification Geometry formátumnak " +"megfelelően." + +msgid "Point" +msgstr "Pont" + +msgid "Line string" +msgstr "Vonallánc" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Multi-pont" + +msgid "Multi-line string" +msgstr "Többes vonallánc" + +msgid "Multi polygon" +msgstr "Multi-poligon" + +msgid "Geometry collection" +msgstr "Geometria gyűjtemény" + +msgid "Extent Aggregate Field" +msgstr "Terület összegző mező" + +msgid "Raster Field" +msgstr "Raszter mező" + +msgid "No geometry value provided." +msgstr "Geometriai adat nem került megadásra." + +msgid "Invalid geometry value." +msgstr "Érvénytelen geometriai érték." + +msgid "Invalid geometry type." +msgstr "Érvénytelen geometriai típus." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Hiba történt a geometriai transzformáció során." + +msgid "Delete all Features" +msgstr "Minden Feature törlése" + +msgid "WKT debugging window:" +msgstr "WKT debug ablak:" + +msgid "Debugging window (serialized value)" +msgstr "Debug ablak (szerializált érték)" + +msgid "No feeds are registered." +msgstr "Nincs regisztrált feed." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "A(z) %r domain-darabka nincs regisztrálva." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83c1a266277bbdc4269d5f3cb431980be56caef7 GIT binary patch literal 2535 zcmb7EOK=oL7;X_2SA5|M3oU=7)TF4{2U-Y&u?UYqgg`1;(JBwtWVbUr)a=aKGn0qq zAtGwQ1rJJ@vpThhB^J&cY?!XJq%fRbE_BV5{5D3@g$h>flJUF+9 zFdx8t5EJ5tzZ4KEVhJXX6?G6x8_1mTK>B8IEIgQNj*mHd6jO8tB$Wykg@r<*lq}M4 zNd^=vCx`|^RrUgx;*um+hGiM6QHn#e?(gf~M&aPiXRJVjp7e`pu}uynuFLAfUQi5& zsV$PqbA0bz_!x5hM7Bf5m$4+r_o+)daiU}-wvWUzh^fouyq4F`P=>on5o_Y;?%Q{+X#3-L_` z^B{Y`i6kN8CYP9mwNI)DdNvjJJAoUf`eY?kvDFi~UeVf;xRI3)ZA$g-&0AX)ss>qW8wzF9 zx@_)cE1R=&8!5Nmere;{Y%ZIHpw%abJhs`A+hFB#5QU2U;`+5&jMQ%MW97N;d?yZ- zO?}A#I&r6?l6W);!XbJ^l@=D8%Z}%#Rq`tI0ylA7Y2~F;wy9Hp`aZ&8p-XH#3lfIHI4gFc&LITB|ozT*X( zsDN-H8F##%@3J7a zG4lGf&<9~@%6K>dPm^R4pCNr7`|RZ`@0~+<6J}$s73y(pe5FYy{4%5dBWwWSQy{P;ftQ}^}e@?Jfd_vR0N!1wQK01!CD_s71 zqal#L$x!IS5U(~GfV&1ghc~P>tBZdq|4R|kX}T>|I6lQbOb0*&ddJW)+~!xn;aJNI z8gml-n%lun$WSw7LcaORH9hOoHbJX?tLoQcyivtjQy(-bF4c_ru9`k#D!J*K|7nO{ zf*<5l`v~s&isKt5FL0z>n;Qe*ntz2O6P@WW$j%}?{L$;V)&CLyc4x1R9T$HAj_X=l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..39397bb74 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2018-11-01 20:36+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "ԱՏՀ" + +msgid "The base GIS field." +msgstr "ԱՏՀ֊ի գլխավոր դաշտ" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Հիմնական երկրաչափական դաշտը: Համապատասխանում է մուտքագրել OpenGIS " +"սպեցիֆիկացիայի երկրաչափության տիպին։" + +msgid "Point" +msgstr "Կետ" + +msgid "Line string" +msgstr "Թեք" + +msgid "Polygon" +msgstr "Բազմանկյուն" + +msgid "Multi-point" +msgstr "Կետերի հավաքածու" + +msgid "Multi-line string" +msgstr "Թեքերի հավաքածու" + +msgid "Multi polygon" +msgstr "Բազմանկյունների հավաքածու" + +msgid "Geometry collection" +msgstr "Երկրաչափական օբյեկտների հավաքածու" + +msgid "Extent Aggregate Field" +msgstr "Մակերեսի կամ ծավալի խմբավորման դաշտ" + +msgid "Raster Field" +msgstr "Պատկերացանցի դաշտ" + +msgid "No geometry value provided." +msgstr "Երկարաչափական արժեք չի տրամադրվել։" + +msgid "Invalid geometry value." +msgstr "Երկարաչափական օյբեկտի սխալ արժեք։" + +msgid "Invalid geometry type." +msgstr "Երկարաչափական օյբեկտի տիպ։" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Երկարաչափական օյբեկտի SRID ձևափոխելու ժամանակ առաջացել է սխալլ։" + +msgid "Delete all Features" +msgstr "Հեռացնել բոլոր օբյեկտները" + +msgid "WKT debugging window:" +msgstr "WKT֊ի կարգաբերման պատուհան․" + +msgid "Debugging window (serialized value)" +msgstr "Կարգաբերման պատուհան (սերիալիզացված արժեքներ)" + +msgid "No feeds are registered." +msgstr "Չկան գրանցված feed֊եր։" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "%r Slug֊ը գրանցված չէ։" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..022198c84ec19e9f96d4e136f7d01868dd3127e4 GIT binary patch literal 1899 zcmZ{k+in~+7{^U1v@EC6az5!p6>8FI_D~^cCQSq+O|^8>tdecv)|v56TzT!m_GB9* zUVuxa-f#uH07Bw|OY#7H1@6j2zzu)TVK*Cu74I*$Kii-G_J97oc=i!PxrF*I>Tjs; zp$?wH56U0lSKu*t8GQRp6}w(@7knN4WAF{|Tkv`C5%?nb6Zi`FOWl7AzKQl@@E!0k z@EP#T(~O-1&x3D)7r>CyRqzhD4!#C{2mXLuegwy8uVV65@MkdW{}_A~d;*4j{szN( zm!4(pB`^YC25*8P?*SO{Oh5v^2Hyw22l2;##m{;0cknWJ42C?OfP3ISU^vGPl1EzQ zS;F}*qBbS$`vPj%2jT2F)UakaFOI)Z&ep9~O&qf<74q}-^Z3=5U5NSz*!awD~8cMXk&NF8x2$cjulFQ7;}49w17?m@XV zhcXRg!*c4d-e6A^8GUF;I(@}2tTBR!``ih--QR08n)fw_F2$oLq6yDkqxDWMbeOf5 zi$soP!hCAxXw&#SLDX}Xxn8njXp0j z7mZ9zt>Mln+OW6{#73Lkikt~iuo&4sv?Ca!y} zi_#i!=c7@0Pl|hEWBP(?EgcO61XOer*`WEUDw}Po$7UUKbXM?8L?gi`G4(Yr0=I@f zS~~DPk2{^|blNUosT_-k?Ziwv)wvp|dWnwYo#obcfBV*4fnK}Y+AvsDBQvNMlNS$t zCs$nRRZ0%Hb;7UR8*N25=5eJXgpF?L#H7e2rW^ax&r*#^^43rlmaAwBK5#MVyllF) z>#J1#ySAk1gEi_cueR8|Q_ef&lwvlrA|>VqtS&n!RX;(=VHhg?7kU#u$qjB^QE*?O zxRtZlDw8(b5?a6uJUrPG4`d1N7_P59>2S}L9W5SRl>xjtfk4KwjhPc?IV23ao!EzD zWl^~Dez|ayY;s~`1d&4y6b#5&5KA=H#5UD%f~OtCs-s*JR_G+;a<{-&f!vW!8y^T) z`^@4H@M;-Qoo=24w9zsQ56gAn+VX>7*gzm5ZG0s&oU5__sU;CpsT@p*^n;D@m6`Q6 k=52;(!{AHma--3MyMjSaN)_(PEm*lW`2SuOydATD0esgNV*mgE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..c635569aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,89 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "Le campo GIS de base." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Le campo Geometry de base. Corresponde al typo geometric del specification " +"OpenGIS." + +msgid "Point" +msgstr "Puncto" + +msgid "Line string" +msgstr "Texto de linea" + +msgid "Polygon" +msgstr "Polygono" + +msgid "Multi-point" +msgstr "Plure punctos" + +msgid "Multi-line string" +msgstr "Texto con plure lineas" + +msgid "Multi polygon" +msgstr "Plure polygonos" + +msgid "Geometry collection" +msgstr "Collection geometric" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Nulle valor geometric fornite." + +msgid "Invalid geometry value." +msgstr "Valor geometric invalide." + +msgid "Invalid geometry type." +msgstr "Typo geometric invalide." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Un error occurreva durante le transformation del geometria al SRID del campo " +"del formulario geometric." + +msgid "Delete all Features" +msgstr "Deler tote le elementos" + +msgid "WKT debugging window:" +msgstr "Fenestra pro debugging WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Fenestra pro debugging (valor serialisate)" + +msgid "No feeds are registered." +msgstr "Nulle syndication es registrate." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Le denotation %r non es registrate." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5fdea6682efd7b1927cf8744e44eeb80a262292c GIT binary patch literal 1938 zcmbW1TZK*$?!}3_$*?YZKjA&B4yP{BO-2?W7!;e+6lkBS5YK_B!rzW6^qJ+sLM1udxgb)Bkntvd75>ABAX zj5C;LF~7rn3G>7I@PqLO_#XHt_%e9q{vdb;G@$5w1U>-XtmR+U@^8TBA^#S94Ez~< z9Q+-88oXW0PeFMe>v`}+a1neE+y);8cfnKO^?H8z^yjcC@ty&j-~dFpm5!X39H-+cd^~~qB<3TS5>Es3QB0Jr8mDW{ z)sz@yNN$pc+>H$JjS#AuNuI$aLu_qsDIW|8w#cyn9a+Xs9`jo533Q%Onx?u{Lo&rgM(1R;m5~J`Pk`@&eAJ?3q-W(grJE zT6V$up=aaiQj%Cs6m~bnUa;BO4K}AS4DvMPf!DbSItI3Md`Emo1vl>%S00Vl`!BR+`EO6*fQ6vFvp# z)o$%zM~P0I&Td*J^ok|z%&i+Y{aq$|D0g2uCgeP==CN#AgR0DQ>&9o4slrXKJ=d0qp`&N(Q6W0?3U7PQrs9`4#-(l;Z7g4;YOp-TtxX7&!w_T#+ z@N${Bu$M>F=w1tV_(03ia1B=#(fRh`a@bxD&o5E?LUdvI)iy?B3z>&Kc~PnIxsAxF zgy~|cj@}P(v zO`@D4tu3^4+*)XCcedA$^I2@R8*k)BURc;eEh6%K=vzgqv{|9SNLj~z_3hq9xO9B3 zY6Z68x*6m#9!^9{eeGwFMx^6LH!ZD7!wocmi^vq!(ycD8(ByNqz0wFa74nBiyQgA} zB4Cjrl4+|cr>Ad8(>_zxVtpMWACk^0Q*CDln!yz|F{esQ43yP`bNJ2*wtc1d#e##s zkyOrTBuIVSs>=GMNfv@PRZ%)}oRtbM5}g-7uTVzrn=Vg$b{SWZ6(tJ#kL}mf#q7U9 zQi4PDMCGn-i<$KQwq6g>?30QWAsA$X`o(JKmA%K2uTI9=ajez8GABE*&TG<$!L$V@ tT6b8jk4YQF%88$;WYT+5YKSMj$M{ziUvgo4Y_y|)Z^8d^Z|Kt~_!~j^A8r5u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..62328475b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2016 +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2011-2012 +# rodin , 2015-2016 +# sage , 2019 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-28 05:59+0000\n" +"Last-Translator: sage \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Bidang GIS dasar." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bidang Geometri dasar — memetakan ke jenis OpenGIS Specification Geometry." + +msgid "Point" +msgstr "Point" + +msgid "Line string" +msgstr "Line string" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Multi-point" + +msgid "Multi-line string" +msgstr "Multi-line string" + +msgid "Multi polygon" +msgstr "Multi polygon" + +msgid "Geometry collection" +msgstr "Geometry collection" + +msgid "Extent Aggregate Field" +msgstr "perpanjang Bidang Pengumpulan" + +msgid "Raster Field" +msgstr "Bidang Raster" + +msgid "No geometry value provided." +msgstr "Nilai geometri tidak disediakan." + +msgid "Invalid geometry value." +msgstr "Nilai geometri salah." + +msgid "Invalid geometry type." +msgstr "Tipe geometri salah." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Galat terjadi saat mentransformasi geometri ke SRID bidang formulir geometri." + +msgid "Delete all Features" +msgstr "Hapus semua Fitur" + +msgid "WKT debugging window:" +msgstr "Jendela mencari dan memperbaiki kesalahan WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Jendela mencari dan memperbaiki kesalahan (nilai bersambung)" + +msgid "No feeds are registered." +msgstr "Tidak ada umpan terdaftar." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r tidak terdaftar." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a5371bad4cd0ea39a10d58119b2971f6be2ea483 GIT binary patch literal 464 zcmZus!A=4(6vXIhkDfg|6AuvVwhO^5MT`+4!AK-z^W-lTQPXb#y@=-dP| zSsLrf#N{d@59{2K#Bd0vF9{h~DLi_~qwtbLi$xv6+9ZmBb$N8tWD#R%Bs2M;s-6G% zV&3jF86tQV&XdFn?F!+I\n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7f198ce86ee16e4d127e51684d0e7eed59c7203b GIT binary patch literal 1350 zcmZXT&x;&I6vr!?_+yMh3}`@wry%Si-7~X6-Sj%*k8IX~9W%_1AxA6SH9fUcQ`J;e z&t@TqT)gF`UWJI)g~dZ4-a?=K7d(jm0p1n;R?YrW3m%_&uinq3@+Rs#qyBX=lYifZ0Gddlij-{~2joU6k$Y)0 z>+1zqvN)4$zY^*H&G4#W-=8e z61kknoQFA2gM6HCXw5EOAn6y$EnyuzGAeetE=_ABDr0>zaHTAgPwLVoW0O&9crzJ^ zg$%CAb?!w*Yn|@3q}xr_I@EbLyZZh+9h}xScRm@1Z>6|5Hly*>*rK+yBg@(r&Y_tP z{L=Q(E>ETV5HY%}c`1^y;PZ_7xlmjeGN+ZP_f^(z@9piS@%zh(xSQr?-d;9)47kSx zZRy&ptwDdVc{)}%?X*5M+6#@oFnmT{-1Y5Baj7>bpK|Mj?|m`8k*uHk#a$CN+0?ly z@Ub&mza#xgqZvup8miiImE6FFxr}rbRo7eFpykiril(=z+o3mm)TMj(XsLFn2fe$x z(PFoxQk-UHPIXn$LNS@U&piN5pZ zp>n0L&0%`hETj(0y4@UT&Ia6;(|sE(+(uh%*|63#4|P+Q(vreza!V_5U03l>tjW!6 z^RPLTaGA}7^=Dcu#ROerRYMNsI#U4JmaR2b56c)@#}0&Djng?FraE5LIO?+Ve*i1t BhgARo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..0ea0986b7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Thordur Sigurdsson , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-20 05:37+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Grunn GIS reitur — varpast í OpenGIS rúmgerð." + +msgid "Point" +msgstr "Punktur" + +msgid "Line string" +msgstr "Lína" + +msgid "Polygon" +msgstr "Marghyrningur" + +msgid "Multi-point" +msgstr "Punktar" + +msgid "Multi-line string" +msgstr "Línur" + +msgid "Multi polygon" +msgstr "Marghyrningar" + +msgid "Geometry collection" +msgstr "Rúmsafn" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Ekkert rúmgildi gefið." + +msgid "Invalid geometry value." +msgstr "Ógild rúmeining" + +msgid "Invalid geometry type." +msgstr "Ógild rúmmálsgerð." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Villa kom upp við að varpa rúmgildi í SRID reitsins." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Engir listar (feeds) eru skráðir" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d454db43ce6114c7f8d3e00b81e918509a1aa37e GIT binary patch literal 1976 zcmZvcOK%)S5XT1yAuJ(4cqHN>RRjoIXm-~|2s6eJas1E{FIjmv0f|$4rgz-YZ1!NJN4IHzZDc0WMrX;xj}j5}Y`|6)ya%XJ+jfTI&5xKdP&`s{ecU{HZSj zwCB)YME?c-CG?LUzz^D=;D_K};LG594+g>0pa$9I6YwGMPCfs1J^wv;0rNkBkAc5} zkAr`JPl12e^Jigv5#x*C3*Z9yFxUql0f*pO@S}Qt7i9mRf?MF1;IrUwphb-TfCgiY zLtX>#g3p7ePgnQ51Y%2Y8RR%tLH0WW`QACmaefA#1HS^#gWrKI@CT6d^fPz~{2k$o|--X;0#VeLsQDXLA17_oL`Yn{Rw3 zw^J2-4E)J=<9x6WZhS|C=yUcAPh8O?tu>ZR9GBM0gr>Vvle0n>V`C>ur{s1erP55K zvj^mi9}l;CYh=dvudxA*mCTZMuqJoPG-dOt(utYUTp_IznL31zJ&~1i9(ywBB#A7e z4Jlk{Wf83JJEG{o6;7rizvAzbZT1LGB?(R z{UTLKxLT$~I5H8n2G_%Fxus_?g7H%Gn_(f&H z85>bw+1SvgRas`}oe7WHsUJ9p-1sv66Ew&+yxHppu8j&hy(R=?L@Kf2jMyW6^IG{3cQgsep5u37$|yOFPQV!i)%mK~`Fkg&UAU5s}XQuvl4Krs{KLPSd3o zT9{vM1w%zYeoK4Mg)fz%vR0#{1g9W6$^>iCOHmvm(O8igChJG11Zj*7c|Br@Vll~Q zZxYMZc2;IP*ud+?9&X=PbX%NE*Pm}0io_1FVc(Fw1b@Q}NUsWdH9@mD zVHqFWk(b&T=u%UxsK8FI+*)B4f`DjcQ6Saz-H$m(nzV9=Yv2!obSq!gtx*RkIM^~& z)bi!4pn}yO0?vkIuPFh`kY#*)su6D(Qf#bMMQ(J$e}LpTNi&^t(NL6H#P~m`b^U)O Igqow^U+m5*m;e9( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..c86f18f3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# yakky , 2015 +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2020 +# Nicola Larosa , 2012 +# palmux , 2015 +# Mattia Procopio , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-23 08:59+0000\n" +"Last-Translator: Mirco Grillo \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Il campo GIS base." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Il campo Geometry -- corrisponde al tipo Geometry delle specifiche OpenGIS." + +msgid "Point" +msgstr "Punto" + +msgid "Line string" +msgstr "Stringa linea" + +msgid "Polygon" +msgstr "Poligono" + +msgid "Multi-point" +msgstr "Multipunto" + +msgid "Multi-line string" +msgstr "Stringa multilinea" + +msgid "Multi polygon" +msgstr "Multi poligono" + +msgid "Geometry collection" +msgstr "Raccolta Geometry" + +msgid "Extent Aggregate Field" +msgstr "Campo di aggregazione esteso" + +msgid "Raster Field" +msgstr "Campo raster" + +msgid "No geometry value provided." +msgstr "Nessun valore geometrico fornito." + +msgid "Invalid geometry value." +msgstr "Valore geometrico non valido." + +msgid "Invalid geometry type." +msgstr "Tipo geometrico non valido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Si è verificato un errore durante la trasformazione della geometria nello " +"SRID del campo geometria della form." + +msgid "Delete all Features" +msgstr "Cancella tutti gli oggetti" + +msgid "WKT debugging window:" +msgstr "Finestra di debug WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Finestra di debug (valore serializzato)" + +msgid "No feeds are registered." +msgstr "Non ci sono feed registrati." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Lo slug %r non è registrato." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb2ac4eb88f668118d813d920cb3024fc05a70d6 GIT binary patch literal 2096 zcmai!TTC2P9L7hjx3y}mw??a;q%nb*Sr!rv8APoG8Y;9KST9MR4!dWEp|dlSnOQDI z6K1ATXlNuVQKSvMkV+-Cpfw2g;-e2f`)HaThfCr^ebpDgb9NUBje3$Zzd4ux?K@}Y zx1HO@6||?&cccG;{v7%Tcj19{3w#g!6WjwHxLZ*k2Q5(8gy22kM0x&Hd43*z8uLGc z4}mwphrvI<$H2eJ^V?y(3*%kjvtTWFFW3&=4|amv!NcYCZcxNO3buh?fKP%k=pe_x zK@VdSP8z@)pzyoF6AigcfogJ-B#LjPC69y!2Ff*4_npjs+*M)hXVdd;TQspt%pr-LYV)Rn8 z$f~i&WIiL*G)W7ie$i!~(%kPe%O`tv-DNt(YK!ov>~HN<_E&Pq+NQ~}zF}KRs|8<1 z?za2}9G1LuT1HGNZHC2&=ex*DX)l_-K^)s0(BVjqRCDXP>ezN0}F z49{l}D=8M%rI9g+tJ;L4(nwvZE~TdG z)YL1awpM$&{-qRJq79X+8F8ab>f5eHGW1AsfRcmcRi7TQ49l{6WuiELM%`@p8+w5n zW-@CRUW2iv7pczF45I~&9H0)hu#Hr8`@W;q)b#cBCFN~3@~mH&)RdC0z%1L>^w65> zM0;y{^G12K$y8#WZHWt~W+075eAe&RI3_i$29oWjuE+eww=*qj{l-4|WiVH5wz75( z_edl4U53A&r$%~cB5f93YN{>x9z2a$jvRW8wGE{7+L&rcDC_rzho5X*A|8$N@B)vn z@aVLBKPTU3c{IX1u@s z6FgWHF@lTB7p7LDt4KT^IleYAt;9-o8;lAcLwJ{$iw5CHk4f6 z7FkNUC<+n>x*kiMrXq!a(sSZRz=KQw6Fi<;ikHUmac}kWZwvD0Q28N1!R7fS9tJ$b gVaqcuslTE1Y<%fjeEp=nEVwdKZu~0#, 2011 +# Shinya Okano , 2012,2014-2015 +# Takuya N , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-02-06 11:58+0000\n" +"Last-Translator: Takuya N \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "地理情報システム" + +msgid "The base GIS field." +msgstr "基底GISフィールド" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "基底GISフィールド — OpenGIS で決められた地形タイプに対応します。" + +msgid "Point" +msgstr "点" + +msgid "Line string" +msgstr "線" + +msgid "Polygon" +msgstr "ポリゴン" + +msgid "Multi-point" +msgstr "複数の点" + +msgid "Multi-line string" +msgstr "複数の線" + +msgid "Multi polygon" +msgstr "複数のポリゴン" + +msgid "Geometry collection" +msgstr "地形の集合" + +msgid "Extent Aggregate Field" +msgstr "広さ集計フィールド" + +msgid "Raster Field" +msgstr "ラスターフィールド" + +msgid "No geometry value provided." +msgstr "geometry値がありません。" + +msgid "Invalid geometry value." +msgstr "geometry値が不正です" + +msgid "Invalid geometry type." +msgstr "geometryタイプが不正です。" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"geometry を geometry フォームフィールドの SRID に変換しようとしてエラーが起き" +"ました。" + +msgid "Delete all Features" +msgstr "すべての機能を削除" + +msgid "WKT debugging window:" +msgstr "WKTデバッグウィンドウ:" + +msgid "Debugging window (serialized value)" +msgstr "デバッグウィンドウ(シリアライズされた値)" + +msgid "No feeds are registered." +msgstr "フィードが登録されていません。" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "スラグ %r は登録されていません。" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b684ee95ae592b1076700c6cd88916f5d9540ce3 GIT binary patch literal 1991 zcmb_c&2Jnv6gN=5wt!R+U!q7)NT{IV-C2avW?+5+~JOun}vVZ7y#vX(H zB=8B~4De214|q55EbwvQyTA>^Tmt$U4jy1E1#SXQ1Ahg+13Zl2r+}A$9pDw<0`L#u zG2nA|F?J4^0X6Vv;KRTfBs&6J1onUqh;$6cLA%$0)C_6Dz;PJ&;S1_8?#0(@ya)4+ zu)|nmg6tJd(pqE53O7>nxBN?mqJY zG*q(4n(VdhfPpCrIdIBo*3qk?P}$$e)@O-UsdN@Ku%&U~6pc)=o`Wb@ zytw(CkBrieyC=_Hgj{lQd6$U!4(R#oQDx*@bXNpPkZ=k&BCRq7*d z7f08c^N_a60%at&I_HJMo*56b$qGJRmNW(=Oyo(lp5VP`}~BJ!nc4g2q#l| zK4~B0Nt?H4sXddvFncs3HAYP$8VLDZMVVRwXS; zNGa$=R0H$nBA893hvp^3=zJ`4$@@~Qq=ehCxe}V5S$1xewpwdzYt3-!YA7!@2WF)e zMQuYdiEmvHt!Eocou!jI^4ra%al&XPHOj(`rsU*B*BTW<={XuK3tLJz|5pDLKfdD^ z9+mz!7S(7a}<~J$y|fg)#bYSsIES% ztIfLlu&y@h>I-WKqSvH#NpVNL7D@5R@fe7Uy{F}glk~a1U4HefF6kzpbEExq}jiuGq z4}lP-=h?4@2@#Y;agc!CVIA8C74L%qCGN|P7U2Bj*d9284mKJEdeCjMu!VB43mac( zg=lo(lh8n9L$C2gwn<4b8cfqL-ybkdll{Be#~A`ddg29t7cvV>GJw zujT7dH57QmyG&pz1~CZ0`|}lrq}aha?j!HyE&MN66`y6S5$m02wx=?mZf_@U^}4(t Q#GrQ|_S*dK@xSW70V?Wd@Bjb+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..31bb23c8d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013,2015 +# avsd05 , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "წერტილი" + +msgid "Line string" +msgstr "ხაზის მასივი" + +msgid "Polygon" +msgstr "მრავალკუთხედი" + +msgid "Multi-point" +msgstr "წერტილების სიმრავლე" + +msgid "Multi-line string" +msgstr "ხაზების სიმრავლის მასივი" + +msgid "Multi polygon" +msgstr "მრავალკუთხედების სიმრავლე" + +msgid "Geometry collection" +msgstr "გეომეტრიული კოლექცია" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "გეომეტრიის მნიშვნელობა მოცემული არ არის." + +msgid "Invalid geometry value." +msgstr "გეომეტრიის მნიშვნელობა არასწორია." + +msgid "Invalid geometry type." +msgstr "გეომეტრიის ტიპი არასწორია." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "ველიდან გეომეტრიის SRID-ში გადაყვანისას მოხდა შეცდომა." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "არცერთი ფიდი არ არის რეგისტრირებული." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "სლაგი %r არ არის რეგისტრირებული." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7503014981e9f15de5edf1ae0310ee3126b3473 GIT binary patch literal 1349 zcmZ{i&uY*1%R6-CCsvdjuEQelDIr9ggUio_1B#@+*o<4r|d(Yoz``?dx zZ!nA#x9l@Lz*l zz}-EJeE{wSU5!t{^YHI&X6!K7)5};9JPLYX2;C}FKmw$oo{Fk7M{||I=2XV+Q z@CbqC(glo$;SY`7Jhh?**%2vI2Wc)WI>H&rAJ`%bN%kd>mQR%20BKvpS> zD0SUF|GE_>ysUi6mClv4csr|%*{u#rcNM7hOHnJyexuIpS}$ygGQY`s~gkw3x)CV@qG4vQB7RQ zSJY_XZA;6DyV-?Cqi`@cJUD!MwfSP+%birx2nkVm9G{H1VhYVTh-5!i>VZy#8MshB z!;h`TWq(Czep*&k6_4f9u}hIzQR!2okt@Y59mM<$en{ezY-VmUQ0%9-(*dtP$Lw{x zV4vBib|IZkr|hHj7rT_U$^A8M|F8@6{CB(PCg~IcekA)C@r&trd*Z=?k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..2666802e7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,85 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Нүкте" + +msgid "Line string" +msgstr "Сынық" + +msgid "Polygon" +msgstr "Көпбұрыш" + +msgid "Multi-point" +msgstr "Нүкте жинағы" + +msgid "Multi-line string" +msgstr "Сынықтар жинағы" + +msgid "Multi polygon" +msgstr "Көпбұрыш жинағы" + +msgid "Geometry collection" +msgstr "Геометриялық объект жинағы" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Геметрия мәні берілген жоқ" + +msgid "Invalid geometry value." +msgstr "Геометрия мәні дұрыс емес" + +msgid "Invalid geometry type." +msgstr "Геометрия түрі дұрыс емес" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Геометрияны SRID-ге өзгерту кезінде қате шықты." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4ae545adca5e2d0e11a1a4c8a94a20ebed64c3c5 GIT binary patch literal 459 zcmZus!A=4(6vXIhkDfjB;6a0>T?u9>VvGn03Xzc2d)<93h23`37QxT(;P3e@z6App zCz-U9&U>BtIX(HVA&!t|$aCZ|@(NiYLVn?68_&wK$HbZiB%Tga`Uci1qXkJ9QfDTZ zLTRk0W0$FvKCCiFV#I!|LOwacY9R*)yDwQ^(xDutZfVj7h9`BpZRo|!wG(b-C7Kx2@FAkXsx zEV-C_Ukb+7>vh9d`_v3Jjl>kJ+_iM9WV>=K|69P81-lH!!*T!6KWy-zXS4^6xjsuQ z=wahonMc1IS+SiFmmCgi--j&}66=YcilYC`mP6x&oP7qyg PrR#\n" +"Language-Team: Khmer (http://www.transifex.com/projects/p/django/language/" +"km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be4f674140beed20dbe47c89627c25d4bcdaa2c1 GIT binary patch literal 461 zcmZut!A=4(6vXIhkDfjB;6a1kb|sjlh%q80C`3Y5?{)XF6qa_=7Qyc@{+{3BTQG2O zl1cm0>2#()rzhVv#1Zlgd5%0rULh;Q$S*u>;aX|-7+W)k)YCym-@rO$v>@4B>f8hq zD2?@WuF)PeCi^V0 zqKA!VWg(SrlXNDn1K)W~`ZPZ1s`sW~X-}snQ#uzUeph}URgi@a#>L9Yg7%GFIze=~ P9bG4Clijw%+d=IYP;!VO literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..0ec1b161b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:35+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/projects/p/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c2cbbeb4d33b37e2e8a07f3fec0e80b1067c37f GIT binary patch literal 1939 zcmZXTOKclO7{>=%D46mpuSx~+p$aJ#THA>#5p5`{`3) zxIrA;VyY+s(Kfc?NOnjihoCA*E=iuY`j6jQ3-_A3OlIgO7j%;2v-U+zXzH*2h2T$v9k;>f!CxZ&31SP|_2_1Pdq5TcRZ#iq1fKy8Uj$zRuYxMy zH4s1c6F!fFKZDBtcd!lo2UPVQKrzFh2JQn3AkqzMRDM;Bt)}dsLVp_lF?6M03|;w$ zY++MARNK9YP&4&c)u!rDXQP^mjTFKfln(5uL)`ORkKA-R=XpFs`7!QL;2DlT>U!gr zV^T22$>i=h54=eV+;BWH+}BO+=>2QTfJQBDXX31zpUIh~GS6F1#?4ck&ppeqt&b67 z!mxAv5cb$S;AGe~^>QP~dE93`=L7BpbksCGZW>taRsPtqz7ck;l|$OKZJrJ+*I|7Q zd|8=$@|(=^_=D47#5n7>98P}VAul$NvjdB=u03hOQ8?1#-Oa{PFNYWHWZo;MFEBlWfPS%V&_bH-6P9)?iS{Q`&_0V_Zh?I zgqmAwZqKze2xX?bg%XV$S-*8GgIVqOBN8}i(< z5LN5TXdiIThn-HDvxZ~3v0-8d?pI+7hp zE%~OFJWTC}^^T4=l4!AhRIa7ejk1lv^>jLJOw!;Oy@iW~$vpSsXN}2s%yGlA<7s#N zZCE&F&M>)_;>Ng6CtMF3sckF>vU(zs&*$Ue1+_-`d1a8;%(DeMvQC_H6Nh30eFHt) z6}88cvG-g@-7zf%HFOI2`5=+C4a@1G^qArKJUH@xs#ojW-WNUw?rA+v+RfnV=+t?} z3bwM;>6{xIvU8qcYrS{^zD`ay9QsGvyJ++8kz`kF>jsOZJKNW$SuTp%s;pH=Jt}dn zN@BIpoUb&?6){~R@nuoguaK)pm6d{=UKcY{Vx}HvqEr&!6*q2u zMzZlewaK}Ly!3^*T&0c1)k92N|3=I%(#Fk(m|h}z@mslAWzG4rT)=4g%EoGuHuDHy znp`f3uUF*a1(MaGyj3BX%i8BmE>y(z+sf(Y4r*4)a;6r4Z~;N%tXZzgdXdD+O}TJc z&aE-Ax-O^SZKl4_xBy!w=T^j5D?2vL)Wd?q$V|-M5Z7udWV3V!Iw=L@+@*U8k5WNI zSzFt=7CG4pC>APmy51}{TIJ#q!YmOA8-=RCBgyi#gv8tWD(O~lhL18*Dw>Jn%f+%- sU5ng?4--e$EKT7#%DKzboW9kZFWnHq)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..cb9dc289b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jiyoon, Ha , 2016 +# Jaehong Kim , 2011 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# Le Tartuffe , 2014 +# JunGu Kang , 2015 +# 이지현 , 2017 +# minsung kang, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-04 14:22+0000\n" +"Last-Translator: Jay Oh \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "기본 GIS 필드" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "기본 지리 정보 필드 — 오픈GIS에 특화된 지리 정보 형식의 맵" + +msgid "Point" +msgstr "위치" + +msgid "Line string" +msgstr "한줄 문자열" + +msgid "Polygon" +msgstr "다각형" + +msgid "Multi-point" +msgstr "다중 위치" + +msgid "Multi-line string" +msgstr "여러줄 문자열" + +msgid "Multi polygon" +msgstr "복수 다각형" + +msgid "Geometry collection" +msgstr "지리적 위치 모음" + +msgid "Extent Aggregate Field" +msgstr "확장 집계 필드" + +msgid "Raster Field" +msgstr "래스터 필드" + +msgid "No geometry value provided." +msgstr "지리 값이 없습니다." + +msgid "Invalid geometry value." +msgstr "잘못된 지리 값." + +msgid "Invalid geometry type." +msgstr "잘못된 지리 형식." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Geometry를 geometry 필드의 SRID로 변환하는 도중 오류가 발생하였습니다." + +msgid "Delete all Features" +msgstr "모든 기능 삭제" + +msgid "WKT debugging window:" +msgstr "WKT 디버깅 창:" + +msgid "Debugging window (serialized value)" +msgstr "디버깅 창 (연속된 값)" + +msgid "No feeds are registered." +msgstr "등록된 피드가 없습니다." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "%r 이/가 등록되지 않았습니다." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24662a0f851196548577d7e5556d6353e7f7242d GIT binary patch literal 2221 zcmai!OKclO7{?bV1x$IhP>KLCs47Z;wVfcU;t-&arV33+6q|>{X=9H!o2+-NeZ+CZ z!Eum+6crT#5=AO1^nh~0Au)0D;>v-;Y$NrEP$eXUIKUMy{J-%!i31fYjenk*@A;qE z{ps+5Pc=M8F&@MC5#w=;_in)to310Myuz}vwg@D4By9s=Ku_QyfW|2{Yfeg-}S{sMZa z@ozAXxj>MY!Rz2t;L(Gc_AJ;7!bF<@p9GzV7r^6~e+yFl>mb$h8%X&Nq8O_C2&jW6 zzyz2EW8fV4AowBp2zUj28r%da&#zz=jNPeePk`q^l&g9qT_{KExgUS-#kdaxW=cQG zaTf+;Q_tau2O^SY^iXf42b~Q)R5MyoJyCtyX@_yw6)qFmY~Z>)$4cYeVZLiPUS7Bb z%Q2Zh&Y8(Yf%|Tm`9jUpqXT_R`v;* z=k@OASn^~l+4W2kPizpK>lwOHw&4pm#nPf2%#86#HtY(;Ag}}Wq8BZ9y>K! z49kvZMd2kxaLm9kxt`%hA;r#>U9&vHI>vp!m`Wr{rBYm7SS!z`$sy6Ky9GP)PE3{) zow1>Tp)KOD zHF*`2np_SSMU_rfj8avLd%=v4+JO3+Lg#hOi59 zO@49h3hiPadv!R}8|dvO7Q4d1=1Zjgo~bTZ5g+oxZ+j7Ia*ZID!nv>l$*QP+E!u-T@M;;N zr8>lIgjJPNX{8jSb5o*64L0Qq&!Ye+jO6W=@7ATx0tdd1z?*2Mj^3-V|9VfN|0?dX zQc&HOui7NV_XIVQ#Axt;in@d(%g}I@e$|&|-}#`Vy%zh9s@+(9hFYJVc1!5gkZVe2 n2t13sQk5I%YJGc=`d5cYsaW&!QPp))gp{D~l-#=M)z$t1u=0aI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..f30040b64 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-23 06:01+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Негизги GIS талаасы" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"негизги Геометр талаасы — OpenGIS Геометрдик көрсөтмөлө тибине дал келет." + +msgid "Point" +msgstr "Чекит" + +msgid "Line string" +msgstr "Сап сызыгы" + +msgid "Polygon" +msgstr "Көпбурчтук" + +msgid "Multi-point" +msgstr "Көп чекит" + +msgid "Multi-line string" +msgstr "Көпсап" + +msgid "Multi polygon" +msgstr "Көп көпбурчтук" + +msgid "Geometry collection" +msgstr "Геометр жыйындысы" + +msgid "Extent Aggregate Field" +msgstr "Кошумча Агрегат талаасы" + +msgid "Raster Field" +msgstr "Растр Талаасы" + +msgid "No geometry value provided." +msgstr "геометр маани тейленбейт." + +msgid "Invalid geometry value." +msgstr "Ката геометр маани." + +msgid "Invalid geometry type." +msgstr "Ката геометр тиби." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "геометр аймагынын маанисин SRID ге которгондо ката чыкты." + +msgid "Delete all Features" +msgstr "Бүт касиеттерди өчүр" + +msgid "WKT debugging window:" +msgstr "WKT оңдоо терезеси" + +msgid "Debugging window (serialized value)" +msgstr "Оңдоо терезеси (кысымдалган маани)" + +msgid "No feeds are registered." +msgstr "Кадамдар катталган эмес." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "%r слагы катталган эмес." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f91c361e040884fa347bc6b343ec76d7a9f239ce GIT binary patch literal 474 zcmZutK~KUk7{%ymN6#K=;sJtPHwb1FF-C+01CfyFz1zwt>Ds031b>Kkf0@6VvY zEqSSp!*iR93_n%5#j&QyTfD}2WH@u6#m~%fiaJ5q!$B8^5eoV=ylV$x5P%Rb`G=@I z|ItOX+iM2^Z^o>{v0=(e=Cq;cg()R0nsJeFiS8i{jE{0Z`a-Sr1Kd%0#d3~g&I*cV z)s7d5u1qfM8a3C>m6VX}cI&&^SFHHXPjx}cLt9HqawtjUpAnG>X?gSMe0=(c&=0(k zR*oyk_gO+w$9ImDk_k0H>6#hK-S91*;OL~Q-&=8m$12sCP&q|WBHS@BMKbXgvNBBK bi8h6$NR|814m$&M*bbWtT@O*%8hDLg_H>Lm literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..40fd9e2ed --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:35+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f4143b75cec359d8b4157eac3b9310aa3c5013a GIT binary patch literal 2113 zcma)+%WoS+9LEPJFH>GEg+dGb5Ne54){nG;W)r8RO;WjyQ!6$PiPOY8-b}onSFkw{APZy`OWO_-ic$M zGK}Xj&tm?F`7-9t1Ng!C4g3K79ef?U@gQR-K?ORS+u%ds=fm|chU;I0FJS$9@Coo| z@JaAj@LBM$;rekHpN4!IJOh@&hrt^7DA)jxgCBw~f@`3Qe;d3Beg>Wbe*w?J=bvB& z@~KA{y9hQwXZI2K61WFKg?$S;yStz}_fO!f;2)ridlEk`&KdA2un4;RXTev%C6K@l zh(Go*eq5fPfKG1@bn(6dou41T8h8(U4t(=5#$1UZX8O+74X67Iri=MBCe*U}<-o@= zal~w#81mSVu4Znyv$^5!#tm0%94R}ii_7K|31hS&-D;)Ah=4ZNgd%IWO4{0Vr3%Te z2?~Yo3Tt{~btX4fs`I4VNB5iowWWxH0-G1BX&5^5O{oICNfU`Ml1FkIF*bOViac~8 zVFmFhqD8@NYDB^owyaQ==EBg3kYjhz`D53s4R(E$LrX`IXj!Qht19@C!J+(mu_*j= zIg40eOHv6+tU+F^mPS@mtfO8CN15bB_wReLmddhaO>H59gt!re#AIRxidAqMKm!>Y1%B2z%y%n(` zozEkBQzO07g%UP>gIbpQ}}C3kL-#7fQKn zTDkY=HBmgDtk|-}IO0-GQ)`WzMA*u^%|-9>fnN6E2;(iNmJaaDe7d|U?Ko4PBAcs6 zso{~gh|eYQNyV9%R4z@^;NQxGqH|O(QKdp!$)RAuT|ji3QhWSF+ZJS{Vz9q9ZemaJKz)xV>h_zaD1i1 zr!UuaLJ?1)l=X%2a{rEN1o+xyS3^OCJQ?(Xb=}3)%Kg2dznj>eg}o87v%lAcoM&~u zzlYCS;rqnPfl)8!wzrD*P~G2)BWELt4?2W%oOb$m4z~!Y`n%N8k?6GKI%mtmO4Z?A zI2xtqUY3mssw9LtL)*cZYjpv5B-hV`;g+YdEF* z-wpbONwvjZVt5Loa|o3h9rP^!m%y1fBzP!r!dw?IgCk>WE?+?z*^{h|xB?ws8x>)6ZSdd`$F0ikAl2)f{;QM781)`>k|USvv%dirVOA>u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..ad7ba7ad0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Kostas , 2011 +# lauris , 2011 +# Matas Dailyda , 2015 +# Simonas Kazlauskas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Bazinis GIS laukas." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bazinis geometrijos laukas - atvaizduoja OpenGIS Specification Geometry tipą" + +msgid "Point" +msgstr "Taškas" + +msgid "Line string" +msgstr "Atkarpa" + +msgid "Polygon" +msgstr "Daugiakampis" + +msgid "Multi-point" +msgstr "Taškų aibė" + +msgid "Multi-line string" +msgstr "Atkarpų aibė" + +msgid "Multi polygon" +msgstr "Daugiakampių aibė" + +msgid "Geometry collection" +msgstr "Geometrinė kolekcija" + +msgid "Extent Aggregate Field" +msgstr "Išplėsti agregato lauką" + +msgid "Raster Field" +msgstr "Rastro laukas" + +msgid "No geometry value provided." +msgstr "Nenurodyta geometrinė reikšmė" + +msgid "Invalid geometry value." +msgstr "Netinkama geometrinė reikšmė" + +msgid "Invalid geometry type." +msgstr "Netinkamas geometrinis tipas" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Įvyko klaida pertvarkant geometrijos lauko SRID geometriją." + +msgid "Delete all Features" +msgstr "Pašalinti visas ypatybes" + +msgid "WKT debugging window:" +msgstr "WKT derinimo langas:" + +msgid "Debugging window (serialized value)" +msgstr "Derinimo langas (serijomis išdėstytos reikšmės)" + +msgid "No feeds are registered." +msgstr "Nėra užregistruotų srautų." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Adresas %r neregistruotas." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1486eb6387014620f7c508a84ec93207a52355ea GIT binary patch literal 2025 zcmZvbJ!~9B6vqb$5RUK_zQXs5P^?6-=eq<%*l;8cjw6HZSoRT+sOE0R>$#hoS!QO> zjztkih=PK~Ad!M1p>#z>L%EhHK=eo;6p4-kIs^^>*}L<_38S0)&DWcG@BjAwdT`$t z4DAW@XVHH^e-8blJMf40C-^@27x*Ih_MMD93TiOeTmkO_uMXG08m@l>K8f}3!TZ7A zzz4uTz(>G;hU*7ld;*U*{G1r_1X#uV40sSUVDR?}82tDNgu7*oL6=}VY7b)&dR7lxTZtG@I49OC~q@cPSIq z+n381t87kcLC#zF#pZM6C1plkN^wy+i`1?AQD&s}Y{Afq5Q!sh1;H`tyntBMu(2ym z`37ay^kowE7E9B`;R8!N*bKv2R(VQCEJ>$tT)yh}T-k)&E$##%=8>A?wUGv;%yi@O z=hWkw8>Qt!CUh`c&O}?T$Tklm(XMd56z9Ennv~pnJ7COy&Dx#*~y_n{>?@O-f=&JWw zJUO|xwpJ~_P`M)3t8LSp95_0H8k$e4{^YUB{OtU>aY*%Qt@4)9;UkNhkRv89*8OCr zxYVbpy~?c23$-!E2pk; z;uH;rjidTVz1C>dX<~xHuy(jnuhVI&5suU01_r08j>++3rz&h2qVddg>K5PaY$yC> z%8E_f7cwy&bk|Iqfm(4k>YumQz+FcoAQH;%+58g!=6dqxF(A& zywoqYtS`1(9F@6IY&lOzZtlpmI-=`y$ELE5>2czrG>gr)>zISui6_jkTtwWT3X}emmi(J}bvnwg#d9vaB&bF1K z#hg&s$?Zq8Tz9=>3%rj)E51hYS_GV<%B=A_pX6`@TiW2_q}YZMV|C%^O};FKiyWIC zKkZnkYs*Wm9lI!nMh5K8HRHK-xYHpAdC!Gn*L&Yb^g%Xi6`LDkkSr{n9nAJ<8S>~T iiirD`RLIMy%-x{O@!}vE<3g7i?^Ri-bpAhykJ*2Gj8~oj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..dfdb2e723 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# NullIsNot0 , 2019 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-07 05:24+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "GIS" +msgstr "ĢIS" + +msgid "The base GIS field." +msgstr "ĢIS bāzes lauks." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Bāzes Ģeometrijas lauks -- atbilst OpenGIS specifikācijas Geometry tipam." + +msgid "Point" +msgstr "Punkts" + +msgid "Line string" +msgstr "Līniju virkne" + +msgid "Polygon" +msgstr "Daudzstūris" + +msgid "Multi-point" +msgstr "Vairāki punkti" + +msgid "Multi-line string" +msgstr "Vairāku rindu virkne" + +msgid "Multi polygon" +msgstr "Vairāki daudzstūri" + +msgid "Geometry collection" +msgstr "Ģeometrijas kolekcija" + +msgid "Extent Aggregate Field" +msgstr "Apjoma agregācijas lauks" + +msgid "Raster Field" +msgstr "Rastra lauks" + +msgid "No geometry value provided." +msgstr "Nav norādīta ģeometrijas vērtība." + +msgid "Invalid geometry value." +msgstr "Nekorekta ģeometrijas vērtība." + +msgid "Invalid geometry type." +msgstr "Nekorekts ģeometrijas tips." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Sastapta kļūda, pārveidojot ģeometriju uz ģeometriskās formas lauka SRID." + +msgid "Delete all Features" +msgstr "Dzēst visus objektus" + +msgid "WKT debugging window:" +msgstr "WKT atkļūdošanas logs:" + +msgid "Debugging window (serialized value)" +msgstr "Atkļūdošanas logs (serializēta vērtība)" + +msgid "No feeds are registered." +msgstr "Nav reģistrētu barotņu." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Vienkāršotais nosaukums %r nav reģistrēts." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24a55a608d08c8ea3a801c71ab45523ebbd2ca33 GIT binary patch literal 2620 zcmah~OKcle6n#Jo#S|#zR|H5Gp@u}&*q%@znGi}pNl9DNC^0P(tBL(QnRYy5&5WBC zv1p@;c8gF^DO6C9SR%)XRVyX#mIaIF1zS|HVuASV5G&4o9_QDDjxsrZ@7>S2=iX=k zvUAH7f#(^#FW~(N?~8apx)1;G`~`d;_&4xn;F0@NxB^lmQYG-tIS8azhPVFQs06Mb zi+2MmNm-1@4kdw@8^sc0rTJi48l8hGVQ|JR^4Yj{9ZwQW*zA*(GwD?w+8vS``LD!l z0_Gw1lpRSz#a%5|_PPpak;yQqY*(UgPmWil&t8)iS#V2k!DfYMS+!UzbMk1OitBn~ ziSaNv1x1aqqH#io5&SGFp0a%>NKME}5XMF>a@?YEpz1_MKCmb?emrj+4AC{%8i&v* zi~6(X8%EYN%t10=xAqS1$(q?L42=nS#^so6>;{egSIHc(Ufa7Tizjsq`WShhJI{`T z(4r%@@4FEllTg#6H^BzWw>`Z~yM8Hn3qHP6wH;~XrCqitXBT8K@Lk)d-sw25SeeYs z%uHGjvs;p9(}kd%>6Fz4FNu&TpU(89a$~uX6#>k2Hgz!Yc^-{C#Iq=tXX8x8vt56P z3e$EN$$0p^{HQUoVy7>T42==L5ELD_EDBBGKW$^-B1luw^gfsRn=5oHA&64&#OlJ zvRYI%oM6$U_AH>Lmf9EE7h!r{{h(^?k5!YMNG^HP+vwea6+p~OB=YVPf zb}a;$#fEB;zW?x8*x0oN*On%xZmEV)Um-?I-Q?s1K-2}qoCB$O&;YsiH5Af|v<<8@ zF*r71s!ux{*AeLx>M9K8w8LdxI@fvuF0-r(7rgA+-znyD)XBpb*w~|6Ju&QBe2-b$==#CQmX?Dof5+ VCYf3kUP}x9wa{N8_q@E8_z&V)d*J{8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..3c5151861 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# dekomote , 2015 +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016 +# Vasil Vangelovski , 2014 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "GIS" +msgstr "ГИС" + +msgid "The base GIS field." +msgstr "Базичното ГИС поле." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Базичното геметриско поле -- мапира директно на геометриско поле од OpenGIS " +"спецификацијата." + +msgid "Point" +msgstr "Точка" + +msgid "Line string" +msgstr "Линиска нишка" + +msgid "Polygon" +msgstr "Полигон" + +msgid "Multi-point" +msgstr "Повеќе точки" + +msgid "Multi-line string" +msgstr "Повеќе-линиска нишка" + +msgid "Multi polygon" +msgstr "Повеќе полигони" + +msgid "Geometry collection" +msgstr "Колекција од геометриски објекти" + +msgid "Extent Aggregate Field" +msgstr "Поле за агрегација по плоштина или периметар" + +msgid "Raster Field" +msgstr "Растер поле" + +msgid "No geometry value provided." +msgstr "Не е внесена геометриска вредност." + +msgid "Invalid geometry value." +msgstr "Невалидна геометриска вредност." + +msgid "Invalid geometry type." +msgstr "Невалиден геометриски тип." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Се појави грешка при трансформација на геометриската вредност во SRID од " +"геометриското поле" + +msgid "Delete all Features" +msgstr "Избриши ги сите карактеристики" + +msgid "WKT debugging window:" +msgstr "WKT прозор за дебагирање:" + +msgid "Debugging window (serialized value)" +msgstr "Прозор за дебагирање (серијализирана вредност)" + +msgid "No feeds are registered." +msgstr "Нема регистрирани фидови." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Краткото име (slug) %r не е регистрирано" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8972f2a42de985b0b90fb92229e81abbcf3c6890 GIT binary patch literal 2049 zcmb`H?~5Bn7{|9-tBqB$T7RJ6ND;3bn;%7Ov*(HRdM%Ml4R=w*cWW})?6H{%vy)2$ zzPKKuU^(%HSG9;D7CCCQ?YWWqrU$<8kMM;I{s+GDt>0&oO&S}0Ar8!bW}bQG`8n)w z2ls9{7!P1RiTN?+qnHQw;DgZw-vmSOPVi^&A@CRQ5%5=#^#1_w1^3_KIQM~vzz4y@ zAjzKx9|KQ-Pk?WMcY$l*-QYXmt9h?RK z1fK#A?}IOJ0VF>?unlg34R9Zv9Ryq8A#fdB1uuYb=N!PKTEM-t9~16JgYu#QS2kw5 z!6$=BwYh&NpnTH-x6VDZIUyKVN-8F6wT@D}&bm!5m{z`s8&b7G5is54Ea0-mwdye~ z?S5ssbdt%&cFS=P*41*z>qxr%yH(ziIMOJvhd#*T}FXZ!3beH*BNH!<*im6_H zHjj~6@?-5*sY{WsrSjOTz7S!|mN-(0*o%k;+m|D|&4!{OU&0*`bo_w3RqnSuR`w&m zhuLB?O|9ErF4ygLv$peLgP+aTWGgqwDn&FjkZVP`Bbjokyg1Ikkj-Znq|jU-F0|BR znxECVcI1a*j@6pJin*SDy?V+$KGw6Zj4O9h)MOnk_So^aLp=)AW34Dti8{)U+*5d4 zvByN)ZsYl*b8N7jpAqcoc~&?wmvKz;x#@4390e=OmfZiH%xNb zilBsp_aL2iBiY5lmPvjX>yoK$Yy3LhqxbKcWXJU1CrxsS?>St9SNMh!MEIT~39T=i z{&}+4-~4@j6M7$}_7KN;>@Qi5*V5Z$>V`=W@OLKZ+e|K6I~VQxOS{Gw_P&Jo z(nARcp>2>A^auq-JU8Ktf;Y(^Rrp5-KC=?~LidVEej3z#xH6~}6$B-qT*l}B!K%GJ z>iIXY>mZ_U?PL1Nda>`L|3TVDJPx>~8X;6_LK=Vi6ezc0@6kzA`KnC@wS{WhPg)Nu zvNLGr?S1=)@}ZhjVuAI+tKI%LH>lKPs-xmfloUV1Ti)$9HiHiBnB)`W@_(lO7xNIX A>Hq)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..ad8251e2e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aby Thomas , 2014 +# Jannis Leidel , 2011 +# Rajeesh Nair , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "ജി.ഐ.എസ്" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "ബിന്ദു" + +msgid "Line string" +msgstr "രേഖാ സ്ട്രിങ്ങ്" + +msgid "Polygon" +msgstr "ബഹുഭുജം" + +msgid "Multi-point" +msgstr "ബഹുബിന്ദു" + +msgid "Multi-line string" +msgstr "ബഹു രേഖാ സ്ട്രിങ്ങ്" + +msgid "Multi polygon" +msgstr "ബഹു ബഹുഭുജം" + +msgid "Geometry collection" +msgstr "ജ്യാമിതി ശേഖരം" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "ജ്യാമിതീയ മൂല്യമൊന്നും തന്നിട്ടില്ല." + +msgid "Invalid geometry value." +msgstr "തെറ്റായ ജ്യാമിതീയ മൂല്യം." + +msgid "Invalid geometry type." +msgstr "തെറ്റായ തരം ജ്യാമിതി." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"ജ്യാമിതീയ രൂപത്തെ ജ്യാമിതി കളത്തിന്റെ SRID-ലേക്കു മാറ്റുമ്പോള്‍ എന്തോ തകരാറു സംഭവിച്ചിട്ടുണ്ട്." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr " ഫീഡുകളൊന്നും രജിസ്റ്റര്‍ ചെയ്തിട്ടില്ല." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "%r എന്ന സ്ലഗ് രജിസ്റ്റര്‍ ചെയ്തിട്ടില്ല." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..27803c5702f4da9edb7276decc2b222657248371 GIT binary patch literal 2433 zcmbu9Piz!b9LJxE|5p5ms2DZ;h#FhTYW@cMZ z4`pi`6T+cUj2<*fB9V&}wuq$No;_&trX0K(gZ0*fSWAb-67~ZGw{($#syzkwH51v23x4=KaXTT%33-Ji3K-Q^)cYvR^=09uAUjZM- z{P*B};4k3);P2qW;6JVT%~0Nk@iy>DFc01dj)HfC6X0g>ZSVWgIP zIllJ}d`vlhP4+{^m$4+r_i0!093n0;TJvL%s)2vng&{Mt{PpWrHSkm{UJIx! zWho*jl!U;%D3&NzmKQpuF+Qjo22);%*T#(MSj)kiM|GU;)KG z;Y5;pg%J@GCI`FKcCHI4hD+1qg6odY>MTnc%bS#p4vynNhgeCJotKH z*xJ*TGv`Kz){rU&CG0Yr_MGtIPM|hbRA$Vtg^q6xbgdR8~doaST}^9_s}l+4|{ z1j(ywm)9=q<>Xv4mz>i}WVDv>T_oLLWf;LAEA-cJ(A3|ivXsp0RozVHs825?vn<*X zZeZpN#!X7y>BW8$dI53Hkx`n5%~jnno|n>KW|K1<8Enjn?!B-si3XXF8~8#N-#MW_ zgrn>1n)G!fasyuV3TJ|h&T*`IS?G^?Ycy{HUPg4Yhy+f%5~v}^U1vu(FX?5{S0FaS zqWFa`ESqX9bf;S#=v}`6&np}S%3ViDY*6UWP3BGHf!fXEi$(4mN4=V^rM2mbrm8T` z^-FtPXWI#XH?p0~^Fmti87>qLxg}t;b;YHrz#f`_UDK0Ut5^sq%^Lxsw;M@bOdV~M zl+a(GDcsX*XbsTWi~?68wg($+n5;|<+Cg&D*2g6DdD9H+Hj_W!e?1o0zClyk33l$n zTSfR9ZC{<-aDBaXD)58$A_P7n*i6^Zh84tIZ?AWbS8}$!c^i, 2011 +# Jannis Leidel , 2011 +# Zorig , 2014,2016 +# Анхбаяр Анхаа , 2011-2012,2015 +# Баясгалан Цэвлээ , 2011,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "Газар зүйн мэдээлэл" + +msgid "The base GIS field." +msgstr "Ерөнхий GIS талбар" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Үндсэн Geometry талбар -- OpenGIS газрын зургын Геометрын дүрсны онцгой " +"төрөлтэй байна." + +msgid "Point" +msgstr "Цэг" + +msgid "Line string" +msgstr "Тэмдэгт мөр" + +msgid "Polygon" +msgstr "Олон өнцөгт" + +msgid "Multi-point" +msgstr "Олон цэг" + +msgid "Multi-line string" +msgstr "Олон мөр бүхий тэмтэгт мөр" + +msgid "Multi polygon" +msgstr "Олон өнцөгтийн олонлог" + +msgid "Geometry collection" +msgstr "Дүрсний цуглуулга" + +msgid "Extent Aggregate Field" +msgstr "Aggregate талбарыг өргөтгөх" + +msgid "Raster Field" +msgstr "Растер талбар" + +msgid "No geometry value provided." +msgstr "Дүрс оруулаагүй байна." + +msgid "Invalid geometry value." +msgstr "Буруу дүрс байна." + +msgid "Invalid geometry type." +msgstr "Дүрсийн төрөл буруу байна." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"An error occurred when transforming the geometry to the SRID дүрсний форм " +"талбарын SRID утгыг хөрвүүлэхэд алдаа гарлаа." + +msgid "Delete all Features" +msgstr "Бүх онцлогүүдыг устгах" + +msgid "WKT debugging window:" +msgstr "WKT шинжлэх цонх:" + +msgid "Debugging window (serialized value)" +msgstr "Шинжлэх цонх (дугаарлагдсан утга) " + +msgid "No feeds are registered." +msgstr "Бүртгэгдсэн feeds байхгүй байна." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "%r слаг бүгтгэгдээгүй байна" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0fc4a9cedae7a0cc53f90d9945093de9255a1570 GIT binary patch literal 468 zcmZutK~KUk7{%ymN6#KU6AuvVxtN2WHH8F^UemL!^iH+xCQ&7JPVnL0&X!4j`ziG^rc$pJG`UvHO~b}1TPs( zx#4app}BOfVw7$+8{gHAav`>Us!Lk!dsxs{lFV)<%Ggy zpA}YgV(VyCaH$56F1fM7#jnYjL`Ply-a;5MQmM|Q${9rO(jB5QD2+EO)`k~ktW9Yd WsA@ObxHEwLHf}1oj3I0dyv8pz=ZUNU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 000000000..83ef35723 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-18 09:16+0100\n" +"PO-Revision-Date: 2015-03-18 08:35+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e907a894d9dd0dc8f9681a52bcce2635e048b3cc GIT binary patch literal 1887 zcmZ{jO>Z1U5QZlZzLo$Xd<6ocBoxUOnq6-YD2(NU6Mw{xH@4QBfW)bHr+2o!Gu@-^ z9l-1&ISEPMi>m#4SkS3LJQAc4i$LF>>$YuI}o3tGesgbEiKK z@V$ufD#lM3uVH+23P1SngYScXf^UGE4+X(EdFMz*;H=yxva2xYY z9C8u-3S=GMgY5SUh%LcA@GN*Ad>K6T=#&@0r!jvUWSuJ@>$?R$0~(Oe`xty3`~t)g z!M7mm{SIWkKY*`*KZAVUAK*IpPi0@hW-c-Na9!A^{#Y0LaJSSWg@V;#^(j=8@s`Jtzlr&R1Ul{I@r)SOT`c9JIrPCzvePxGuTpE zlJge2f=-coMY%~26C6~|!t~^Nm>Z>iaKq40%Gi;xk|0buFHx)}FU(3)#-QAqeHHWC zPU*T+1?UR)snXd^i-ay(QcmB!ea9a=vWIf_g_DGw>uMg^>Kc?~rn|R4qfF$kzLxD= zYIfVrUAeD#Yq)}|is;h9rFPiH-#gTPD{8;{<^sOP7BUZe{Gw9fjg4qi z4Dph#DK`=sR&`Q{M20;nvWPk&6^Ar8@;;ARt;uB4EZ?FU%7f;>WUZ;B8foR+%3N!{ z(b?#%9*J)^7aCWM=I0dlka$F19{5(C3Z)lmFcQ{DzjU*=7G6HuSH62`!&N;nFgc5Cp=c?v_d)@z$vTdgKHu$ z+!zZ8RS3EYV>qxX=#*zIPkV}bVk~^wQrAr?$4Q0;LJ$CAJA8y2Pt5r2Br?VI#bhtur6kHPRmDNFWIW*T;pm6Kc QepFO<-v8Ycnl1|d1(22td;kCd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..689bbbdca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-11-16 13:19+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Medan asas GIS" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Medan asas geometri - disuaikan ke jenis Spesifikasi Geometri OpenGIS ." + +msgid "Point" +msgstr "Titik" + +msgid "Line string" +msgstr "Rentetan baris" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Berbilang-titik" + +msgid "Multi-line string" +msgstr "Rentetan berbilang-baris" + +msgid "Multi polygon" +msgstr "Berbilang polygon" + +msgid "Geometry collection" +msgstr "Koleksi geometri" + +msgid "Extent Aggregate Field" +msgstr "Medan Agregat Takat" + +msgid "Raster Field" +msgstr "Medan Raster" + +msgid "No geometry value provided." +msgstr "Tiada nilai geometri diberikan." + +msgid "Invalid geometry value." +msgstr "Nilai geometri tidak sah." + +msgid "Invalid geometry type." +msgstr "Jenis geometri tidak sah." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ralat telah berlaku semasa mengubah geometri kepada SRID geometri medan " +"borang." + +msgid "Delete all Features" +msgstr "Hapuskan semua Ciri-cri" + +msgid "WKT debugging window:" +msgstr "Tingkap penyahpijatan WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Tingkap penyahpijatan (nilai bersiri)" + +msgid "No feeds are registered." +msgstr "Tiada feed didaftarkan." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r tidak didaftarkan." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..443434bdb40d7e3313204d96a25d213ffd6bacca GIT binary patch literal 525 zcmY+9&raMh5XMs|mmE2B@Qoty#sO4VFN+X=wH2#wY2fZ|W`j{;N4A$`Zx(_xCmx^= z&~k@&LCT@;!6dYxe)7+rk-izvJkNi;4^T760&G4 z)=(GG>rVfk{BLv$6 z-+lF8BQW$p4RtD2#>wUn>E6cVq?m?-d~8Hc549;QC#q~x+l@QqHSDrZ7*zhc@=ulj YUHPAt|5f>i%HLG}u}OUs+~OU)09<9Gg8%>k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po new file mode 100644 index 000000000..3fbc0ee87 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,85 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-20 03:01+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "ဂျီအိုင်အက်စ်" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..13ec9a875007306f727ddbaa7767c10b3939dd74 GIT binary patch literal 1879 zcmaKrO>Y}T7{`}VS}+Ald1=Lq^q>kU5sV#29I6dLG$g59;>LG?@rdgnyh~VUc~xO;FI95 z;8WlO@LBNh$@)1MU&8k#@MW+GJ_feIvtSoI2Yx)+-vK%P=imnTCHMmP8@P)c{{h?h z9>B?E@H>#t{|xfE2Oy3_r_MytdGHMQJa`f0{Wn35w*qp$n;_@=30MOi_!4*v34EQ_P0{;Rz-U<$Li`jq>^gt2|me2+9V!nx9(hIW!URp3GlwZ0m0!Y~+!vYCHbgfZ4U|f9l3o!K(|J&6R-HGdttn$r=H0$d zc&}5Mb|wL~B->2N>6#*?*FEXn-oJe}9CO)2ySHVo2sKyTJX))IP_~)w-~NJzGRv!L z+02w>vu>vPdZ7D~n?%#bg|ayxzTczd#P!5c$GcrLRkRZEf$}-*VoG+UOhY>F+lulcB0#Z|?$xUje&7MfzQNzKK$`PLf?7_|*lE_(c;j111l zbR9Xpz3c3|d(JqEM^U%#9UQZ1AyXxKN)BVX;rs}VmX=oB-tfn-4bAO@kj0J0Xf&#q z4^$7-LA~#Wjd7k8%*0W{Za3y@?N)p3sG??lq4u7${KiBN-H0iugV4x~)OLybJJRPW zEZ^*{iz`RxN--!e)@bMyx{uITo_=Ghbd@qVeD5IZLlC zQ*(Z)7Oh#lCT+-NSsonZ07*<02bDlHa=&_4n&pVYrQ!x&PS*#@1QlkKCibDUVk$J~ zEx@%;^nBEX&;kn$dipP=33fOuG%a#Dgd)=DW_oB6olZmZJ9=ob48;oDRbp0RkkE|8 z;P1qKR@l7&#il59EHcPstTB%gSj@aNk(n;TaO+YXu-PfCkBe+vNu@D((|dcBY{xF4 m5y2X(dRQrBW|0K9-TA~S$O{+n|JoAV6I+jtiEDf#ar7_eH4B>n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..b2289a332 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,91 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2015 +# Jon , 2020 +# Jon , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 12:14+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "GIS-basefeltet." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Geometry-basefeltet - tilordnes til OpenGIS Specification Geometry-typen." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Linje-string" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Multipunkt" + +msgid "Multi-line string" +msgstr "Multilinje-string" + +msgid "Multi polygon" +msgstr "Multi-polygon" + +msgid "Geometry collection" +msgstr "Geometri-samling" + +msgid "Extent Aggregate Field" +msgstr "Extent Aggregate-felt" + +msgid "Raster Field" +msgstr "Raster-felt" + +msgid "No geometry value provided." +msgstr "Ingen geometriverdi oppgitt." + +msgid "Invalid geometry value." +msgstr "Ugyldig geometriverdi" + +msgid "Invalid geometry type." +msgstr "Ugyldig geometritype" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"En feil oppstod ved transformering av geometrien til SRID fra geometrifeltet." + +msgid "Delete all Features" +msgstr "Slett alle Features" + +msgid "WKT debugging window:" +msgstr "WKT debugging-vindu:" + +msgid "Debugging window (serialized value)" +msgstr "Debugging-vindu (serialisert verdi)" + +msgid "No feeds are registered." +msgstr "Ingen feeds er registrert." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r er ikke registrert." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ebdb54e8714860961f6f57c74b81857c53a1c78 GIT binary patch literal 982 zcmbVIL2DC16kfF|thWj(C^BB8rA)G0MBA+?Vr@&Msi8#gV|KFLvYA>cBbR1yIBR za2_}WE&$(vi@*=yGVlvH4O}`g=y4U?1+D`V$bUNNILqLl;CV1TFdGM6o`vJPp;B;gGeOW~}DEtbR~iH^RhPRdLFrlD#hza~dY zn<8l@x8jh8C8s81p>QUh2#sr*+{6sJ64FOJ%P}h;;U*K2bk}(*GexU;6o>R~JIZNY z2E?sBsMCdvv%(j>#}p69wCCTVo=^Q*;@=Ez%uac}=Rru<`Bq%?{7W}`r1PdcguBXe zMe7+8dBT*;0&<@T5$9x;!*D`w!wsHy68kL0qABN5Bce8oIIVNm3dkBy@q5U`hEi!z zE^lvdmsHU(Zt|T{L$=C;m5wMGR+j}YPrB8W>f&g5zvQ_KQYbE93O_j@itng$ny^^R zk;Vqga;_>5>q~TIq$_4Mc}5pSLx!=40y6VBR)1UuL~ys3v@@2_C7HEyBvSj#E7Nmi zaIH)Ta;-xA$vM|Cde`(`8vViO&qlvD`is#TCo%fK=%+?^js9r#TL_&;@9eqj{02o, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "बिन्दु" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "बहुभुज" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "ज्यामिति संकलन" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "ज्यामिति मान उपलब्ध छैन ।" + +msgid "Invalid geometry value." +msgstr "उनुपयुक्त ज्यामिति मान" + +msgid "Invalid geometry type." +msgstr "उनुपयुक्त ज्यामिति प्रकार" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e36c11870d6c8145b55b734e7d2a88a2aaab6879 GIT binary patch literal 1947 zcmZXU%Wfk@6o#8&xS8QLFfd#O&IpZ^2(_IIATka?1acuvLZZZ6Bo?UbK5kd0UDZ@q z+mnbzgxIh|fW!##5Ig`2b}V=W5Q>CYzydZbV8egP?KlY~wLkZ%I(05pfB$^`?3WS7 zqj;Xe^CO;1cs{xfKNx?4?}2}T&w_8BiK2%=1B%bb;O*e8%KlAd{}y}<_8-7|!C%1p zz(2r;z<(3>)==51@Kppk>kJM2Y6T5 zGDX+AzBVcO9#hJ;&))5k zx8Z$fdu@qq_vD;7P*-!7)T1SCmuV{QLv0c}q^W|PR+-*MjDgBZp2nJtJ(J2ZT4Ci& z$3?V!)3fokn5K?Xh1nI^FIrvOiB`usbZnM!$7^e%HG{o$axA~Soa_HLhlurPT^pvt zJLDB@l$qC*+iWkzM&T{aPS3}=)y79}S?V$;1u4gb#B|{q&8o}9QENgB%AFnPMCP`F z>sA$DTZvCq&Q4aQbj6V_%;CW;e`3oP+TB(K6KWoJb7C9!Ahekd55Azj%8T)_Z02ml zZ71iB?&^+`Cecyjd}z+Q*ISgFI-X{<|y zeyvQ4xMiDE+uDq`d7x!!yo94_($$&SYw^src=jclnQOlI!gDhiwRKb;x8z1;%3If@ zmNkY8df5lo`|VfLzS3E}WBadQwMk2ra@=CoZ_-lfJ3X4}d7n2Mjp1-u4|h{{`KGLI zj8YsUtDGAqYfRTR);5+W#mv@cYOh-(*DG$J5l!-Z(>L-=X){lqo^l2Ig|}NP@!Vux z&;h%6*>r4zThpYuw)RI!HpyhQt*mq^i&t>_3mEe7S}a_hr_tYqDMObRXm)zO7A?z} z6GLKMTY9p23RQ7}_qN`p9>dfhU?Ug?%HWvB*Gn@QrJPuT_GDI;SGP~|U?RH#n{d~r zQm#Z-Fgth-u|opkEkZwZgH4|uerdpNsCN_GXakY8H7vWRI=$4J`$0`_wuSYFLRL6XysAM-1;gJgcsrkHw1kt&Dy=xFgnis^FB4d#v zwsO$hs>~eqV-zfOI7M>|^eEemisf!rWLhbT-J7yax zGIS+NpvcduWAP;|a%&PK<_RCpa8#8Hu~IrTKHo~RaWRoBK48#j95h;;Wi$E@xFIA_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..bd360e4d2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,94 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Blue , 2011 +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011 +# Sander Steffann , 2015 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:54+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Het basis-GIS-veld." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Het basis-Geometrie-veld – correspondeert met het Geometrie-type van de " +"OpenGIS-specificatie." + +msgid "Point" +msgstr "Punt" + +msgid "Line string" +msgstr "Tekenreeks" + +msgid "Polygon" +msgstr "Polygoon" + +msgid "Multi-point" +msgstr "Multipunt" + +msgid "Multi-line string" +msgstr "Multi-tekenreeks" + +msgid "Multi polygon" +msgstr "Multi-polygoon" + +msgid "Geometry collection" +msgstr "Geometrie-verzameling" + +msgid "Extent Aggregate Field" +msgstr "Gebieds-aggregatieveld" + +msgid "Raster Field" +msgstr "Rasterveld" + +msgid "No geometry value provided." +msgstr "Geen geometriewaarde opgegeven." + +msgid "Invalid geometry value." +msgstr "Ongeldige geometriewaarde." + +msgid "Invalid geometry type." +msgstr "Ongeldig geometrietype." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Er is een fout opgetreden bij het omvormen van de geometrie naar de SRID van " +"het geometrieveld." + +msgid "Delete all Features" +msgstr "Alle kenmerken verwijderen" + +msgid "WKT debugging window:" +msgstr "WKT-debugvenster:" + +msgid "Debugging window (serialized value)" +msgstr "Debugvenster (geserialiseerde waarde)" + +msgid "No feeds are registered." +msgstr "Er zijn geen feeds geregistreerd." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r is niet geregistreerd." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a18e002af35e45f36d928492fafea0916c7c8e9a GIT binary patch literal 1888 zcmaKs&u<$=6vr26ftvEG{A&3jJ%o@Fp|#@(q_9yAg~XL1POaD}NJxl{_jx_`dS*2{ zYbOY#3h^g^)E+qU2fzVw;8qSCIB-Wos1i3&;R+o1zV+Jqfnb!$C;MjJk9jlS{B+^W zryj)-eaH!#pfgN9`I&q|E#os0X_x$ci;oy z&)|dLui&HLpQZggoG;@0BKQng2hV~n@IJ5uo(JD4*9V~F{}|i`Z-7sLzkvIw@h`B0 z?{^Vo3H%b2{Xc@T?+%D9-r0LS?_uy9DE3RBoTmm#y$w+6-36uI_rMBh!Kc9wLFv;C z5Fx#A!n2G$XR4a?MPYl;Bhfr*2LBtOQzS$t>uWO1J>khsI$JYW2Iwq1E!eG zn4LW&XNvF6ZgZ1N|KyrDP+xHpRlQB#&*NC!r%Fd=N=q4A6(;I^&db=7uwx37 zgc=;W+;Zk^9XQsGF2}LuIK*m0;(1q^9q-D#hMq|h?m1<&*VKrmqGRGq-M;<_jl(pX zU(3~$wYYUs?y0`&h0-KiG|m;xdF#zCMW?PO@Y>c4(Nw<~`PbNH@Czs!hB`KtT~3X4 zek+SrTlwz0$N>Jt^0NStWo`y;N@3eTEVDnhnRh zXU4TzeRCvbpqkdTqaUDazKMt1A#5&ZlK zl!lJ-LTiwmLjoJAWv>IRInf#<^9n;-Rj6#p zP#Mov1{KXz)<{@c1RSzot{0Xx*CPkf#yIXwXHd#aW)?>fJ{=FQtkuTjhHqs1<;U4~9U%qrjS3MD!-0kUm H3A}#*{1g#y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..9413b3323 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +# Vibeke Uthaug, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-11-18 15:49+0000\n" +"Last-Translator: Vibeke Uthaug\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "GIS-basefeltet" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Geometry-basefeltet - tilordnes til OpenGIS Specification Geometry-typen." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Linjestreng" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Fleirpunkt" + +msgid "Multi-line string" +msgstr "Fleirlinje-streng" + +msgid "Multi polygon" +msgstr "Multi-polygon" + +msgid "Geometry collection" +msgstr "Geometrisamling" + +msgid "Extent Aggregate Field" +msgstr "Extent Aggregate-felt" + +msgid "Raster Field" +msgstr "Raster-felt" + +msgid "No geometry value provided." +msgstr "Ingen geometriverdi oppgjeve." + +msgid "Invalid geometry value." +msgstr "Ugyldig geometriverdi." + +msgid "Invalid geometry type." +msgstr "Ugyldig geometritype." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Det oppstod ein feil ved transformering av geometrien til SRID frå " +"geometrifeltet." + +msgid "Delete all Features" +msgstr "Slett alle Features" + +msgid "WKT debugging window:" +msgstr "WKT feilsøking-vindauge:" + +msgid "Debugging window (serialized value)" +msgstr "Feilsøking-vindauge (serialisert verdi)" + +msgid "No feeds are registered." +msgstr "Ingen feeds er registrert." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r er ikkje registrert." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..47f4a0f017331b72d378418c004fd630ff759bc8 GIT binary patch literal 1594 zcmaKrO>Y}T7{>=Fl$sY25O3n`=>cff&f2a}Nj3xlZ39M0Yo!MD*u@@iw%W{Cv*V-z z2_;R_L&^b!!VQTcaSu%bfjIpJm1fmDQV;zAa7KdvjGeSj3L}kw^UU-9%=(X~_boH5 zC$V3~{tEjU?7y+y`se}1&Vd!s-Tw$a2mS&+58ebH1Mh%OfPaDm;6J_lfd?6T0rD&0 zOW<+vVQ>Q651s>G1kZ!t!RK@EOUMKJ7&{1l4F=%#9&dxsLVgNCUIX6%Uj;`&cQ3#} z@C&d6u7Qt(cR*M7U%mSSk1&RG4Dh|X9*~+LykD+1x129r{5pVN*W;tu5BVF$3O%y- zB?+ySCRMMuwH6JUnG}+Yj%3zUdMc4InMpyhP*cL_Su)DYXD2ErNj3X*&VibVNE-qB zaND7-(p1z8$O=JNrQjTjx%0UAr-1;YW##2ksAR&85t4Mu~PYM zUMlnQ5S5RIZw(zOl}jZU@(D4WxR`x*L)&(xBPFcDSdjcJ9&;>^rU;NLuHii<&AO%=O6 zZ6ocu7gbg~To|v6pSs(9IVcrQC~1U5Rd~>ljJRlutu#vHFx4j`ja(z2)JFN>T|57M z3C&N*x@zEoLmK=nF*{|3q_RRaZR;rIqxh<_kYvk?*~qbB>K;c9Njf+}<-@}TW`DS~ zY}fLuc8zW==X3cLfAn9eUA61>hV9t({8Bz=Hz>bsZ{W~@$8Y&nvOmLi%dS8RVVAM9 zBD-O)Be4BFUw}zBw%y3*k5azi(gw_a+n>Y7f~wQdcrM*S_J{*HeK%z1kT Z*X~W*>t%Nf*X$--SKXiW|I+US{TF%Jb9?{* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..65c7267bc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,87 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Стъӕлф" + +msgid "Line string" +msgstr "Хаахы рӕнхъ" + +msgid "Polygon" +msgstr "Бирӕкъуымон" + +msgid "Multi-point" +msgstr "Бирӕ-стъӕлф" + +msgid "Multi-line string" +msgstr "Бирӕ-хаххы рӕнхъ" + +msgid "Multi polygon" +msgstr "Бирӕ бирӕкъуымон" + +msgid "Geometry collection" +msgstr "Геометриты ӕмбырд" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Геометрийы бӕрц амынд нӕу." + +msgid "Invalid geometry value." +msgstr "Геометрийы бӕрц раст нӕу." + +msgid "Invalid geometry type." +msgstr "Геометрийы хуыз раст нӕу." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Рӕдыд ӕрцыд SRID геометри формӕйы бынаты геометримӕ ивд куы цыдис, уӕд." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Ницы лӕсӕн уыд регистрацигонд." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Слаг %r регистрацигонд нӕу." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc74c5814ff823562ae5849c8029fe1765dca0c6 GIT binary patch literal 1265 zcma)(%W4!s6oy-kw-Lca@Pb*Ci$FrCxde$xCnI7^B$DV5#w^9kbWNv2PgT=hlZz`O z5(6$JxCuldN{^QqML`$F2heAbTKE=j{HtdsgPMf}r@yW`r~dPw?jId(YZlfqL?=Qa z+7aIoW}Vn)Str4E@D$huo(6|ObEgO%2k$iY0z8BLUGNB!VAUqh922fgP4Pg6icUtZ=g=!vH=;#plT_hmk&c9%nX%|qrnpV|vbl>i zo1?iwlIyoG4EAPo*(?g_6rcBu<{x!~&AM!F7ArNuB1MZK6Oqr93~h3q3E@R#g2S*+ zhT#U=%YL#=d!j5a;f`>t%;mJmS;Zy=Cg#|TN4g8u}LoS_7jYy%mfIs{$n<&1hGJ(%LF+@tUER49y-ztvL zfmWUARpucb6(#B5_t|7%##6h7Z4$6l!LNqQr(-g#L^csYvW@b6L!|zi?-t~Ip5%Il zQkIU_b!}P4Te`NY;|(2e>)Jh{<2Smtt>b4p-oX*7p6K|!jyI9nyM9f_Uv>P+2tD8Y zk9zc5*0py=HK~UADW7LeJjx7|wGZqz-!*70Xtqlr6sUPmAFUB$u6WQY|VKTLdY zB$?VHBq8?-*D(v;Fw%O{sF@WNs@71y0r3vz;{X5v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..544c7837e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "ਪੁਆਇੰਟ" + +msgid "Line string" +msgstr "ਲਾਈਨ ਸਤਰ" + +msgid "Polygon" +msgstr "ਬਹੁਭੁਜ" + +msgid "Multi-point" +msgstr "ਕਈ-ਪੁਆਇੰਟ" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "ਮਲਟੀ ਬਹੁ-ਭੁਜ" + +msgid "Geometry collection" +msgstr "ਜੁਮੈਟਰੀ ਭੰਡਾਰ" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "ਕੋਈ ਜੁਮੈਟਰੀ ਮੁੱਲ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ।" + +msgid "Invalid geometry value." +msgstr "ਗਲਤ ਜੁਮੈਟਰੀ ਮੁੱਲ।" + +msgid "Invalid geometry type." +msgstr "ਗਲਤ ਜੁਮੈਟਰੀ ਕਿਸਮ।" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "ਕੋਈ ਫੀਡ ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9a27acffa08de72361aac4375eb3fea73f4fd41c GIT binary patch literal 2095 zcmZvc&u<$=6vwwvewp&CP-q265203xs&(uTP`j;DTAGwVL!!hbs2tE_cf6i>J+s=K zjce0G6}52XP$WVHe*p(juSf_rmN;gRg?`Jm5Ibf*NF-4e&v5vygvP$iD+$fcz)$ zaqxHW3Gh$w8StM%z7NI+F+T{t2-d-ezW9svIU?;^*$ z;0oq<;N&Q{@bI?(k3r7oItUf#8}MoH+d}>$$ou{kdZ66QrIk!sWWrQN^R+M7$!0lSe<2m&bhf|=UkbCZ=y*0RvGQgY4}pXJ^A%xS^cj# zk63liD=jIt3G#C0v&brnP1FzJD4)5}?sYddN?YeWLoF$Tltdy4iK)~|6syV$JEh5E zP@I@`74X_(Zn{_mSQ2bgY-c&jLOPs~O7-n4oAy4JO_Y08q>`}bvYI1VS%bXHboWVlmk7Xg2n$4DD>8qCV1s92S3TN};ti0Q#VAt_@&SGNLP*is=aNn0n3OkR2HK9XO zS(33ytUI5EDsazaVd^%GN0r3|cS)`*R&~$fs63ji)sMUNI{v6W<<)CPYZ#UD*ty%} z8x;v_5|6qc317($o$NB#swV1~H^Z(_QPnryX&C4*6QOjQQgl5+1y$Onv9`6bH!;!c z^{V;(R4sXl4JNkJED;sf6LB;#UYVbppBZhaUaeK$GMcZL+e9%uvhtFJrcn9>`E8M; z(l#zMXWe5Xz5Ff6#GTQ;32<{fI<~6pPL>|UQDrg85)rwxcmb(LI?ktQW9kGJd8IL? z8;v@hq8fQLrVrO^(~U_wa)kKj$;Q+;|IX#Lll4iud^umJP1mtxsmg;f<|NX;Ah9 zUJ~QZg)|#prCvHfE*&LlCX!toQy6BeVqdXjHS4{3WDAlSMK$*M8F2Q!|z{wR|gA, 2011 +# Janusz Harkot , 2015 +# Piotr Jakimiak , 2015 +# m_aciek , 2019 +# m_aciek , 2015 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-11 14:10+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Pole bazowe GIS." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Pole bazowe Geometrii — mapowane na typ Geometry specyfikacji OpenGIS." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Ścieżka" + +msgid "Polygon" +msgstr "Wielokąt" + +msgid "Multi-point" +msgstr "Zbiór punktów" + +msgid "Multi-line string" +msgstr "Zbiór ścieżek" + +msgid "Multi polygon" +msgstr "Zbiór wielokątów" + +msgid "Geometry collection" +msgstr "Zbiór geometrii" + +msgid "Extent Aggregate Field" +msgstr "Pole Zasięgu Agregacji" + +msgid "Raster Field" +msgstr "Pole Rastrowe" + +msgid "No geometry value provided." +msgstr "Brak wartości geometrii." + +msgid "Invalid geometry value." +msgstr "Błędna wartość geometrii." + +msgid "Invalid geometry type." +msgstr "Błędny typ geometrii." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Wystąpił błąd podczas przekształcania geometrii do SRID pola formularza " +"geometrii." + +msgid "Delete all Features" +msgstr "Usuń wszystkie Elementy" + +msgid "WKT debugging window:" +msgstr "Okno debugowania WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Okno debugowania (wartość zserializowana)" + +msgid "No feeds are registered." +msgstr "Brak zarejestrowanych kanałów informacyjnych." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r nie jest zarejestrowany." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..709f3723237ce58eddbcffe07c000da309d64d09 GIT binary patch literal 2036 zcmZ{kOK%)S5XT1yuO+;~D~MM`2w}^beV73D7^4`!*u>7Ryi14_F727#*^XwrM?F1W zJK~ftfP@564je2Fh=UJ^kFXaGNZhy}A;g&jNE{+g{A+gB8z)N3y+8M(x~i+|Kfj+j z^_7SABKoW7Kcl~f{`mv=LHirL3jPDW30{2A^PU4W$Tl~@hrnCq{5R$N58z9f{|S5o z`~!Rv{0n>*{I8rp4db&Ip9Nn58{os>Huxym0Z)V1z?Z>3$o_AFm%y*V7r;NkTZr*C zC@}sKhs=Wig6F{39~sAU0mK&XD#&)9fqZWZ^1Z(R+5ZvvH25RP@sCRW0`mUfz1 zfpqqOoGHego#q;u-pMsKpq`RRRQ1;6ZXU;MK2$m~Lz>B?RU%P0;A2lDxtztGL^??# zNoYd~ms^>6>-$b>M=Nn`Wh}6|!RL9K&5pM@i6JyeB15N)_L>@JspyXQ4pLdYce?Oc z^|q9jlsSvIyzM-3ic*st#5kxJ`N`euerl9<-ep5QDWi;pm4v`l<|L9;<%Q$a6h0`m zW=}=D)-FujrGp*8Hsy6XNgmT%mQ<$Sb|(((BH6nllY|>jaygxwWS~eg`92LqnoZuM zl}gQ4om7UZr$WIQqT{T&A~T;}>QZ#q+XP^6(0sk|zF%+njYVp_7o1<5t2gR(Z1i{Jp5il4 z>|6Bb-=W4r@b3A!I$C85`SH74cZqPu26Rzqtuoq@$Yw$xAQ}uWB*n0*bkBSU8y)8& zmVQ@?K|pN;n#Z|B_GbFdr9rJW91g2RF{_^3uZCt&8((XJq&%UPy4q}IyScqSO+ces zudEu)_2_qzynvkCceOMTN-t5^7dDe_`IGL3zcAfb2uE6fU56$@nFX}4tK4y<0i~|e zPI4;}e*<#K0@7(Q%$DbuX#DT;jHYwT)R#ZjW z9|U1haFKu(GFpW1=<9c$Vd@3Pc=B#~uIGIOKDQg*l* zWXyT&8AVyXi|-sqqR0EkX~5WVprzJ1wl*rm;CJG8eB-goy%uGq!Zn|KkH1#=7A#j* xdleSt>p=NqmE$ps55ZXFa{9JKBuLbB9|r5$MD=A+7%IO9_j_R&;bRbZ{{#O2MGpV~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..c4c1e12ac --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,95 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claudio Fernandes , 2015 +# Jannis Leidel , 2011 +# jorgecarleitao , 2015 +# Manuela Silva , 2015 +# Nuno Mariz , 2011-2012,2015 +# Paulo Köch , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "SIG" + +msgid "The base GIS field." +msgstr "O campo GIS base." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"O campo de Geometria base -- mapeia para o tipo de Geometria de " +"Especificação do OpenGIS." + +msgid "Point" +msgstr "Ponto" + +msgid "Line string" +msgstr "Linha" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Multi-ponto" + +msgid "Multi-line string" +msgstr "Multi-linha" + +msgid "Multi polygon" +msgstr "Multi-polígono" + +msgid "Geometry collection" +msgstr "Coleção geométrica" + +msgid "Extent Aggregate Field" +msgstr "Extender Campo Agregado" + +msgid "Raster Field" +msgstr "Campo Raster" + +msgid "No geometry value provided." +msgstr "Não foi submetido nenhum valor do tipo geometria." + +msgid "Invalid geometry value." +msgstr "Valor inválido de geometria." + +msgid "Invalid geometry type." +msgstr "Tipo inválido de geometria." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ocorreu um erro na transformação da geometria para o SRID da geometria do " +"campo do formulário." + +msgid "Delete all Features" +msgstr "Eliminar todas as Caraterísticas" + +msgid "WKT debugging window:" +msgstr "Janela de depuração de WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Janela de depuração (valor serializado)" + +msgid "No feeds are registered." +msgstr "Nenhum feed está registado." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "O slug %r não está registado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ea91a593b3978be2f4e87a04c5e019f5b6c8e9a GIT binary patch literal 1976 zcmZ{j$!{D*6vi7ImJDG_SRyt(h>&cdo+Sr}+c+ZLA}4lcu!n#I5-NAs^i)(+)vB)c z*b#>akdQcoAO{W>2*iN{H|}%cz~2B-ByJqw3KzcD(__c6Qd0G=YkBpSs_*xc$G!~E zo-B?J`Fw(w!jC#b?_l@6FdRFU#<5+_Wvok27V1b4gLv!h8X_?Kfw4C z9P$cy3w#codT{LLB@kPJH$b+V1KID}Am={-+27~jW8haH$NN241AhT|{|Gz-{sD5l zQwa7rcpT(BPk{u!46^+K*ao{G$NwFOaLXKdKl_}tC-B3*A4h)}o$JTG`FxbEY$q!o ztH?2Mqez8h}r8zGiHpW=xNhNN@Wk&WZRIhoL~FAaGoOy09@piD}>FDaFFAidiq zZ_DxK#_AH;-r+Sipq`RCsRv7Pt4LEeA1agBAx-DfDWTPM_}CV@kTck$rI#eMrWGlC z;ba~x?|5lET}V?WQ-ReLJ}6&ZI$p^ zr!?(U4mJeaROxK$BBfUysodPYanm0cQ-Zc>A?%yj$47c>xAKDm~5 zCJmcyW-?Yi6$>sB?HA6M#d-H~my)}#Cki^wUPDpC)g-(sT@Jg5l54`GwzeTN>wLJL zrz!~-iZl3vXRS zi^6G}(=sj6npC*s5K~D(Z^rnF#J-gdgwplc4$i~aq=iUj*p*@sQ3rt(X(3Ub=>;dQ zD?LNgeebiV(HIVg_447Wp4?&U#yI{7bahlC^B*p3G-hh+tLw`L$+qgv+M+f5{K75@ z6_J-azL9C6%pApi;d1Hc-|4P|=MMIjI*~41HnC0csv5tY7b9bGt~!xac5 zkH}=@FrPm=N8{i5X+!6!H8WQW+OdTW3n~VsGD$#i6EzA)V)EXUpiDSHmP#!qmSQo; zEN+%qhlL*PIaLm;2dYFpxFn3!g7=gUfTrWi zO9!GR3$Bk+@RL++BoSu9iw6fis3ySJOPXE z#MwCMv3l!4nuU=$uwttVFYel7m PRelc%*XhU|Le9be&, 2014 +# Carlos E C Leite - Cadu , 2015-2016,2019 +# Eduardo Cereto Carvalho, 2011 +# semente, 2012 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-10-09 16:09+0000\n" +"Last-Translator: Carlos E C Leite - Cadu \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "O campo GIS base." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"O campo Geometry básico - aponta para o tipo OpenGis Specification " +"Geometry. " + +msgid "Point" +msgstr "Ponto" + +msgid "Line string" +msgstr "Linha string" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Multi-point" +msgstr "Multiponto" + +msgid "Multi-line string" +msgstr "Multilinha string" + +msgid "Multi polygon" +msgstr "Multipolígono" + +msgid "Geometry collection" +msgstr "Coleção geométrica" + +msgid "Extent Aggregate Field" +msgstr "Campo agregado extendido" + +msgid "Raster Field" +msgstr "Campo Raster." + +msgid "No geometry value provided." +msgstr "Nenhum valor geométrico fornecido." + +msgid "Invalid geometry value." +msgstr "Valor geométrico inválido." + +msgid "Invalid geometry type." +msgstr "Tipo geométrico inválido." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ocorreu um erro ao transformar a geometria para o SRID do campo de " +"formulário de geometria." + +msgid "Delete all Features" +msgstr "Deletar todas os elementos" + +msgid "WKT debugging window:" +msgstr "Janela de debug WKT" + +msgid "Debugging window (serialized value)" +msgstr "Janela de debug (valor seralizado)" + +msgid "No feeds are registered." +msgstr "Nenhum feed foi registrado." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "O Slug %r não está registrado." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b3ba175663c59688eede7a6bd319b2723f5d4fb GIT binary patch literal 1829 zcmZvc%WoV-5XKt_5SC}cQ@m6Waop+Oxgmj(WR?o*usx zBqU$pz%ddi2nqfG&Pbe4d`NDbI3Wax6K5_+Ao11gtnCC^ZvWif)m7Cs_4((M$F2&D z$1$J9+{b(l)7*hy7{7p*z+b@^!1zuf9tGb6p8!307x+oF|7o@V75F6fzXk6He*hl@ ze*#Z{e^mQ_gHK_798R7APl0!XUGQFT4txMSU!7k9Ieq{+=a0c_$n8r|Vjbi1OW+sa z)8I|;G4OW~CgLxU@BagG{wMAc;(4$R*1#o@^X!3-fbWBx{|6wy=R2B-VLps`9Fya5F85)gJmol9@mNKU&4b^> zgJbdF+9G86Mt--LwWPdvo?Ma?-m3v^Z755@OPdd!A8DIX*ie)zH&VgxP;ljXt+zZ+ zZg}e%U!b8@X3!M#YQ0EPzP_dHz->`IS6)k_cM)S#nnE>TV^mNijiE&)L*Z2}7Pf=3 zfo9Xxt5o82k^PCKoQk_H&3eh?)g3qZmVc4R=vB7Iz-EZ=%VsD>Jii6 zvb3qI^;G73h*t7c5281VG>`f&rrPS;QBQ4ZHjU;{-I%7^)9tAJYSej!I-PjB^I{vL zb^*yoeQp9HgYz*h6sfY#(2BJ5y5*0RDMJ>lspm%0 z!i4G@A!Ko@wY9a?EPG22)iz&gjq{zrRQFrnwHmdR<&}lQmvx%$+MKi89#J1(Ii{et zLn|{<+ZjqWq|a68zSCcf&K%m6eXM-6U=ugMSC8q;x()|<#^haX)f8TuXc66;$7Hi| znRj2Fq4A&Hy6tv5=h|_-Ubj=7cKdASwZ@ez)uP*NH%_0f+f!hpac(;9G#WECF-vl@ z2xMGB4ia%)eVrZ2$*NL)O>wabT4_Ni`+HO!?(a1bU3-GIv_4dwX4RDkcvH|UJ@_BX zFe_{V(dk4}VN2yz3h^>PbJ%zMKcsx;(U8N!TfNIKhWbh$P+u8n{77GFP)yWk3sMjz c*M6+&(tT-)ufXy{W!L2{yZirYLzl7m7e0Xg<^TWy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..a16b5c52b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2019 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2011,2014 +# Eugenol Man , 2020 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-15 11:21+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Câmpul GIS de bază." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Punct" + +msgid "Line string" +msgstr "Șir linii" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Multi-punct" + +msgid "Multi-line string" +msgstr "Șir multi-linie" + +msgid "Multi polygon" +msgstr "Multi poligon" + +msgid "Geometry collection" +msgstr "Colecție geometrie" + +msgid "Extent Aggregate Field" +msgstr "Câmp agregat extins" + +msgid "Raster Field" +msgstr "Câmp raster" + +msgid "No geometry value provided." +msgstr "Nicio valoare geometrică furnizată." + +msgid "Invalid geometry value." +msgstr "Valoare geometrică nevalidă." + +msgid "Invalid geometry type." +msgstr "Tip geometric nevalid." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"A avut loc o eroare la transformarea geometriei în SRID-ul câmpului " +"geometric al formularului." + +msgid "Delete all Features" +msgstr "Șterge toate Entitățile" + +msgid "WKT debugging window:" +msgstr "Fereastra de depanare WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Fereastra de depanare (valoare serializată)" + +msgid "No feeds are registered." +msgstr "Nici un feed registrat." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slug %r nu este înregistrat." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b1b7e27a8a279947ee04894f36f780edc6d5cacf GIT binary patch literal 2542 zcmaKtU2has7{`x_s4KqV8@|QIAfy|e?QU&DUAjdCN~%8C`2xm}cp>ou6K~WT|IgXkzG0a#`5ZnNM6z>m%oc}nu4?GJ#4gLoH zg&O|_C$PSaAp5~^y%4X0H^5!s?;!pO1Hn7NcCZI5gB{>i@KNvyAH)9b;3-reMtR_?I_m2Bx0Q)0Iqs#+GikJxU}8=;m!`nKuV zN08%?=~QJBHjWG>nT|s}(hRG<48)$pp>#vqX<5FsOzie>Jh8WTQ0#5iQ1Bc_7DC%| zMX!rkc5zvKqZOID^R>>H68mgdQV{y6OY~Kp(58y#j9Lh!SBA5C->7)D8;bWlDoI%k z$n+(lFgpk(#7gnTqBJ@ORebM|UF5xf?b;tF7%P*PZKFa(^?q_#SbQrkS%V zhX^~U4FTRrZchmHO*E$Js-~`~di05!Q&XfLYHC`|^5U|p;|E4FYCbwmYC%8N)igN8 zUa*)_*Hw)-ufVFV=G9Czj_q1>5>Lkvr;Z(jVXx0%G8>KS(8Pa4QbJwC8kyBqq&|sQ zbv47rv;0Uch%m#^U@+GxG){RvnqJec@_Gl7~Bg34U zd7WT-MK^T?6^}&|(dW^p2nLS@7}T*qWgMr*`Qtdz88t7|7wW9KB-901Ov7?)Z3Sx4 zi4_$f`DJ#TK`-1L_woZlhniYgJIep*2>q6YX=t}X67FQx!KfO%&ck*dm9u)MS2Qut z!t;?u6a1^@qEoD`K1f~lV!P0%5hI$6PArdsPWUWw*1EiCoX=@$QRZXufQ-SvF+UIh z5=F<624kQuH`*dpfH7oWu4&a_uhrRiIyd};`g*Nag!&fsH0t0Q^vo>)mJZ z3ylDJ$nH`+YCWTiTnwZK!@vOPcz5ovI*(-^iXOX$7om(gS{c_fGS0, 2012 +# eXtractor , 2015 +# crazyzubr , 2020 +# Jannis Leidel , 2011 +# Алексей Борискин , 2012,2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-14 18:54+0000\n" +"Last-Translator: crazyzubr \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "GIS" +msgstr "ГИС" + +msgid "The base GIS field." +msgstr "Базовое ГИС-поле." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Базовое геометрическое поле. Соответствует типу OpenGIS Specification " +"Geometry." + +msgid "Point" +msgstr "Точка" + +msgid "Line string" +msgstr "Ломаная" + +msgid "Polygon" +msgstr "Многоугольник" + +msgid "Multi-point" +msgstr "Набор точек" + +msgid "Multi-line string" +msgstr "Набор ломаных" + +msgid "Multi polygon" +msgstr "Набор многоугольников" + +msgid "Geometry collection" +msgstr "Набор геометрических объектов" + +msgid "Extent Aggregate Field" +msgstr "Поле, агрегирующее площадь или объём" + +msgid "Raster Field" +msgstr "Растровое поле" + +msgid "No geometry value provided." +msgstr "Не указано значение геометрии." + +msgid "Invalid geometry value." +msgstr "Неверное значение геометрии." + +msgid "Invalid geometry type." +msgstr "Неверный тип геометрического объекта." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Произошла ошибка во время преобразования геометрического объекта в SRID." + +msgid "Delete all Features" +msgstr "Удалить все объекты" + +msgid "WKT debugging window:" +msgstr "Окно отладки WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Отладочное окно (сериализованные значения)" + +msgid "No feeds are registered." +msgstr "Нет зарегистрированных фидов." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Слаг %r не зарегистрирован." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be5be6cf1b2413525c9b4df1aa6373621f1cab4c GIT binary patch literal 2043 zcmaKsO>7%Q6vqcBU#5JOuOdKt2(>hVb)2+^YFoFoO;WieZIqaT;56}$*Hf=&tl3$o zjyP1n1qp5-(L)hFaOi;p;s#0&bu59zl`BF;9FREBD_r=$^~Pz7VC3;{=gqv&owq;l z+4ZTwcpCG0%pWmdzE{9*hFz6IU{UjonEEyNR`0a@og@E-7TA-__{zXqRy{Cn^r z@E7o5@DK2D@UKF?8_IjJ-U~hl&VcuVOW^(BD!3bbr`T_S?EeFB5&R5%3j7WH0Wtm! z&S5=*k$qt4zOmg3$oVaTI3hI2dL8gt@O_Z;z5?PWzQf-h@H)tG|5Wf-a6i^J!B@e( z2$Jp1gAaf;@DXqYd>NGBli-Ko8SrzE^Zy;>5(Bw?&T)G@h6lFsC??zF`js#r#6;Qh z!Ljk!HAY@De&kpn&x-J89CUbscSD@-0QN zvK{4JpS;c2t1GoRvd!D~Sb>^aB~e+-skJPQS$$ob$gb0YR5>jZy#XIRnPh4TXAFpRAHc3>&YimT!z?P0~iLc*P<$sHF zk7co_jiS^$#3h!p#B1u>q#wgjz6z2%_k*t0#*4F-no30}Nv8;b>C`I}tIQjd(&Rp< z>ugU)ytkaIE*B0~Bt3#-&fF zBfIJLYdP0dhSgTPs-c^@A-PC2DV)!X^XBVyitczlp;&hI0*V^cqTsx8DfB{$E=UvG z(u(R@=Yyp*)=_XWi_@TPLnV@zkvb_iZ08uPm^hQM3hGLB zLRw91Pqyhm%lmFPJ-xoZUd}JAZmNr{Fg=ca8%d!(owlc^N=vn+`JF6h%9YY7Yxv#; zbyO%MuP*xOZX&fgLXDPmsq)n~>I=c)opX7EC>P9|hK+EYLOQ&r{Upke(spS%$(&4r z1++yPlIiBlw0h_WjUTHA4DF*Cs#d8&`}dRKrx`kq6^`Grb*xIW<3mTQbO?uLCWl^R z{o^zn(!r@CC2gDBtc=FM)GoQ?JE}-53pqUpZxl zS4na^4+kFYhmKR@ezuCgDZ0^y$u^|zhL++KqBgh=MO*RiCgI|ii=Dx(JCjh#V(TL< zofPLeYR74yuZQ0l+nb1R*`%AS)@+2m(WaIWf@*VKNuLaAlMcTv8WJ^u{3_ZU;tPs4 zWR&MWy2e`aKO#A4BlP~*z2LUbOG^+bQHyZP(3waXt-zlE_6XDCkILBLW?8&F9JCYo mK, 2011 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012 +# Marian Andre , 2015,2017 +# Martin Tóth , 2017 +# Štefan Lučivjanský , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-04-04 00:03+0000\n" +"Last-Translator: Štefan Lučivjanský \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Základné GIS pole." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Základné pole Geometry — mapuje na typ OpenGIS Specification Geometry." + +msgid "Point" +msgstr "Bod" + +msgid "Line string" +msgstr "Čiara" + +msgid "Polygon" +msgstr "Polygón" + +msgid "Multi-point" +msgstr "Viacero bodov" + +msgid "Multi-line string" +msgstr "Viacero čiar" + +msgid "Multi polygon" +msgstr "Viacero polygónov" + +msgid "Geometry collection" +msgstr "Goemetrická kolekcia" + +msgid "Extent Aggregate Field" +msgstr "Rozšírené agregátne pole" + +msgid "Raster Field" +msgstr "Rastrové Pole" + +msgid "No geometry value provided." +msgstr "Nie je zadaná žiadna geometrická hodnota." + +msgid "Invalid geometry value." +msgstr "Chybná geometrická hodnota." + +msgid "Invalid geometry type." +msgstr "Chybný geometrický typ." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Nastala chyba pri prevode geometrie do SRID z formulárového poľa." + +msgid "Delete all Features" +msgstr "Vymazať všetky vlastnosti" + +msgid "WKT debugging window:" +msgstr "WKT ladiace okno:" + +msgid "Debugging window (serialized value)" +msgstr "Ladiace okno (serializovaná hodnota)" + +msgid "No feeds are registered." +msgstr "Žiadne kanály nie sú registrované." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Identifikátor %r nie je registrovaný." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..122afd641e5b57612acd78ae664d1467891c1f82 GIT binary patch literal 2067 zcmaKs&u<$=6vwwvewp&4x{VT3C`d?S?_@ppcxIUy zZ`!CAdL{=BARz=&{{Rl0kvJt12e@$sAx<1Pzy%>reBauRlOi$F_~V&3@8|5BpN|~; zB*J(S^I6RAF`vV{c>q5ce}M0Re}c!rH}8s~$3O$J&Mok6@UzkW7o+{J!KbkQ9rz&l z3-}QDJ9rrUXS9C^%15z23O)nY!F#|4cptb19s=J3p9VW1`@aQV1V06z0DlF4M2vrf z*RcKpM(W_yy+ipmkn^%2jzn7^+x-~iyuSpW2fqO;;7=gO^&9vIcmTn$pTpo0a0)yI zCLoSP?}MDD1o`|2AjkV5$oYN_z5#v(vcJDTgj?pwb>UceaBh!cK8(qB?#E=i9Mc1s zC|fx=1|A28C~L-lIX51BH$2!k$H%chjv1XbB%QO4Y`Z;hPNuZck%od3#;;q~S0m%-hjV9WK|>hgKA>-%M_KKh4twENt`i3&8-Jla*IwiE)gpWe#ft+CZ97Ee`E!#m^6D=FqQt6)fZsfB1 z-|f<4HM*pXBp)2&iW&nQ6y;Xm$Y7{k#rjTpoLgl=blK9nl&L4-Bq1>6gG8~aEZ8kg z>4S1-3zf2LrBq!RIan2}GfHPo4>CILNO?0A_8DxV*e&5DA>(l^Cwt=xltrdEroPDi z_)f0m(y-QAF57BdwFOs*cB>Z3%DjECN$DMTlSC`dc2UuIIgPJM=b@KS+7%|Vl~tKr z7vhG`R2siN$b8(i2~}3EG~;s)w}!Lvd0bRNv$gt5ajhQLPgDKHWd8KYTD?}o!FW{` zif!&YcRHS(qxz}jh53^;jLId{CvNh0r$w+Xp%th4cIR6{K&eqZdO7Ef&1x}Rzn1ld z($%)@zXDy84MZm6rWE~z*0e38QNqxPP6&B2GqbU=Q7yk|wJxu-&de~oG4#m5jMp>M zmBw;oaZ-nRwN^Q24S$w#6E#dI$m?My*Fu>y)b0r9WmtHtxfGw8oGbfBx_HsFZHlig zp;Ijtb^}ew>&l8AIHBVubd68QQAPtPj)Zg%+DpRN&JVXu#GW zNbG7TZIa+-XBE{a+v?lxEks-P{JSmXdV;j-*&@0u3yGkL(y|X?k`H3qBixh8B!+6V z{gDeskx`q`Rk^*@bAp$BV>8>c_{%O>K-*jU4#oiiL5Rl!`QRChE+Y>volzYs6dE4x zVOSJ0m3UzG_?NpiP}Qi(c0|;ec#MXxg6~;=h`JJ$b)vg-TNHwy2ZT5DBT#d1Y=N?K uhmX#VcFI+`j|TzeMU)-|, 2011 +# Primož Verdnik , 2017 +# zejn , 2016 +# zejn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Osnovno GIS polje" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Osnovno polje GIS -- se preslika v vrsto Geometry po določilih OpenGIS." + +msgid "Point" +msgstr "Točka" + +msgid "Line string" +msgstr "Črtni niz" + +msgid "Polygon" +msgstr "Mnogokotnik" + +msgid "Multi-point" +msgstr "Več-točkovi predmet" + +msgid "Multi-line string" +msgstr "Več črtni niz" + +msgid "Multi polygon" +msgstr "Večkratni mnogokotnikov" + +msgid "Geometry collection" +msgstr "Zbirka likov" + +msgid "Extent Aggregate Field" +msgstr "Polje z agregiranim območjem" + +msgid "Raster Field" +msgstr "Rastersko polje" + +msgid "No geometry value provided." +msgstr "Ni navedene geometrijske vrednosti." + +msgid "Invalid geometry value." +msgstr "Neveljavna geometrijska vrednost." + +msgid "Invalid geometry type." +msgstr "Neveljavna vrsta geometrije." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Med pretvarjanjem geometrijskega zapisa v SRID geometrijskega polja je " +"prišlo do napake." + +msgid "Delete all Features" +msgstr "Pobriši vse atribute" + +msgid "WKT debugging window:" +msgstr "Okno za razhroščevanje WKT" + +msgid "Debugging window (serialized value)" +msgstr "Okno za razhroščevanje (serializirana vrednost)" + +msgid "No feeds are registered." +msgstr "Ni vpisanih virov." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Okrajšava %r ni vpisana." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb77ca397175b9f85f617734b442e2b0092d788b GIT binary patch literal 1708 zcmZ{jOK)366vwAf3YhXLPnFlHP^CoW+D=yK4T)%RQ&}Xfm6(7Ko3Zcs-npJT0=f7uIuVKH7 z{S)?k*xTpugY`4`CHM>YA$a+z+1pL7r}7;Iv8SWf^UE=us|$dfnP)Z^*m!Afmfj%{O*FdV)z<@D=bcum=7EhIi*K%<6Fk#1Y#BUj|#?HLwc?y$9fB@H;S+ z3}6?rPp+UBYVZ{?DutF|jg&Kqve1>>JEiYlS8=8c*#**px zOKU|!<4kDsmTNaKwvaj{p9xBZDTKF2qAkIFX@z6A+k5Qx!dc%aCHh_(&Dt7DGC2{*(MZ() zdt8~Wvu&vbId2gF+bNZoG&1Tag`rA{)YTT1*%dH7f)(X z`Jj zNwhDlLkVI^a;{TT+Z7{YeYE3JnM60s)J0trQ>}A1+7*W~JdIl1iEm9-Pmot?c_CbOAV+m$(@m)8wB)IXx`G!m z-B3NQCD*i+c|VF9jq!L~uUbY9#Jzgo6pdM^3#hq%!yPo1Ydh_oTgOSQ)SIaviUD=?O<@Fl7lb9rvr1R;7Qr?pVr8)NyT&9!h#9CQMPvIcV zXU!=c1dTl?T?SMG5eA@C+{)u;=+TyyKD1LJd8&=`atLd*bf|=dBHDC57$vvMY|CXb zmo&5@_p~pjKNx6FC)HeZ5J}NfBFS=00~&agw$O&yGLGLMtFr-W+OC`L(cZl;zN#EC@o?N1;Wtem>P?0 zc)hwWDakm^(>)njN5To)JL9gMpcUjm4ol%=7$gTDA&_8Qp0rFxjk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..b2759e781 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,88 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011,2015 +# Besnik , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 10:20+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Fusha GIS bazë." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Pikë" + +msgid "Line string" +msgstr "Varg vije" + +msgid "Polygon" +msgstr "Shumëkëndësh" + +msgid "Multi-point" +msgstr "Multi-pika" + +msgid "Multi-line string" +msgstr "Varg multi-vijë" + +msgid "Multi polygon" +msgstr "Multi shumëkëndësh" + +msgid "Geometry collection" +msgstr "Përmbledhje gjeometrie" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "S’u dha vlerë gjeometrie." + +msgid "Invalid geometry value." +msgstr "Vlerë e pavlefshme gjeometrie." + +msgid "Invalid geometry type." +msgstr "Lloj i pavlefshëm gjeometrie." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Ndodhi një gabim gjatë shndërrimit të gjeometrisë në fushë SRID formulari " +"gjeometrie." + +msgid "Delete all Features" +msgstr "Fshiji krejt Veçoritë" + +msgid "WKT debugging window:" +msgstr "Dritare diagnostikimi WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Dritare diagnostikimi (vlerë e serializuar)" + +msgid "No feeds are registered." +msgstr "S’ka prurje të regjistruara." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Identifikuesi %r s’është i regjistruar." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..88e5aa7c5dabd672cea5e89fb256c8026c124517 GIT binary patch literal 2454 zcmb7^PfQ$D9LJwp|E;LC{;Sa@Kcj6RI?FEgKn7OR3N%!(1lB)^>0#J?4ATrVn>Vxk zF&qG^5RY0DsFv2ocr;6qxM>SqdhlT4TfKQOhQyl(z3Rp9@9iv5P!lJa{k%WFzu)&} ze?D~J6M^RmywBkM4(}1X(|6zp&+p*d;2+>~;ORSscoYmk_L&3k0+*8YOUe2Q_$1c9 z1s?!^0Urc^10MnZOxBy=d>He?;L~6hyc_HX?*)gzCh(nPe-z~W=fOU35quo{75oA< z{sm5Beg#1a;E{WTcpjVuo53$Zn27JePVh(YICv1rPJ&$^=bHzg0xy6Z|Eq+zz%1rJ zf!$!!eL|$bLGU5)EXaNM;EUh_$hxk9AA&!C?cmw_gVQ%!} z9B>hk%{+$^9!SWV@x#4wy?i$Ou-0hNX!aN{oCruN6)Fk~g|bqzNE4$npjbIUG!m*Y zFK{UymE_8BOvY-8;?T^8279|G9Jzgu9caXpelab&XA-dRx%RZld%k9I^nuXx(;@GIG#AwJ0wmuYAA%hFAK332BJ4W zEU&n$zNwN-?_V|<)1uD{Bt@}8U82A2#~zhJf67H5Gqe1?`&KFRf>^vB(ukDBh#Vye zg?UjdAy%3b%;*2%IPS^3bW)W8{QP>y?SYIWhLY--E2Wvoor zYRh71XWC!L;7RqNb1Tm`%6H;W+0^Ue!kv~XjJz@L);tUXx9qsm%1dX=rXi_@Jtv^% z(Ks&It*sLi6KQiHy%9N?E`(#P^|~7H6Zh6gwYH@Cd;7b0I>@FosaL~*@068C_cq0H zGHxyTju&)LVboEPjB{_~d#v^yJ9GJ^vbuvpSj1JaseRasx68CCQmFyItQ_C!!Ih6} z3QA@g<&JkyeVA(wj%G8tT$YXy8jVojSYix`b))8s8HrFEbvR*Of3%be; z!m^Hy+9F%SR&0o$OxI(r;2!+sIF4)l~t^msnMLriGuq=)ZRk~B!MP; zE~w!n3>Ns*P>88)6@+}dcDUYs_NcN_o39^4y(-)RGLo%wf#&QRhrzAmrc`klX36wn zj5sq68yn^T_q4*{{{($k4zd{`b=9=s|6Ow_{@*ubi@yPDJ`B15 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..d8f8ff68d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,90 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2020 +# Jannis Leidel , 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:08+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Основна GIS поља." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Основно геометријско поље - мапира тип геометрије по „OpenGIS“ спецификацији." + +msgid "Point" +msgstr "Тачка" + +msgid "Line string" +msgstr "Линија" + +msgid "Polygon" +msgstr "Полигон" + +msgid "Multi-point" +msgstr "Више тачака" + +msgid "Multi-line string" +msgstr "Више линија" + +msgid "Multi polygon" +msgstr "Више полигона" + +msgid "Geometry collection" +msgstr "Колекција геопметријских облика" + +msgid "Extent Aggregate Field" +msgstr "Проширено збирно поље" + +msgid "Raster Field" +msgstr "Растерско поље" + +msgid "No geometry value provided." +msgstr "Нисте задали параметре за геометрију." + +msgid "Invalid geometry value." +msgstr "Неисправан параметар за геометрију." + +msgid "Invalid geometry type." +msgstr "Непостојећи тип геометрије." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Грешка се десила током трансформације геометрије на „SRID“ тип поља." + +msgid "Delete all Features" +msgstr "Обриши сва својства" + +msgid "WKT debugging window:" +msgstr "WKT прозор за отклањање грешака:" + +msgid "Debugging window (serialized value)" +msgstr "Прозор за отклањање грешака (серијализована вредност)" + +msgid "No feeds are registered." +msgstr "Нема регистрованих фидова." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Слаг %r није регистрован." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a9a872350f07794793ddc0b99bb445986b30acdc GIT binary patch literal 2044 zcmaKs%Zpq^6vnR_Uu}Fvjq!!Ygb6dq?dcu^4tJ*2n0YX-%rMz--kbxKfw>czrb_g^8G>Z45&fg^C9>EczrPb)nNQv@Og~?06qrZ z0v`u|2cHK29*m#F<}>J@0bc^k;Dg{A_%K)nPl8tm^IIVM{|HDe*?cqjJLsM z^uL3VY49KLS#bKHemrX+mIM-f6;vRf`xEdS_zj3(@FV`70DlJA|1FT?{{wsxybX?l zrx7HY!7Rw}Uc%p#;0pKxcojSacENSFq9gllQBeOLJtJchB(#YATt=#b8d>yGg>^x0Q~~HjO)Jl}ObdeDp-xl@nN# zN-s&IDJ@9hyH>hje#cAg>0**tnF!1-u)Sb$sTwQ}V`!K(l?|_q4wf`*srZigb~9Q0 z?{Mz17_2HS$$5*og0*hy6=f#fO<*YRh3UQXVP=%}!DT~DDPu>%NinnSSnmHnqOF0LoOona>q|*sZe@` z8e76T=_~Km7Q*S{b-5Iz4d->k#CSLnP1ltl1s&1QU11~bT9Jkekb#RxXL;9E-k70& zvofy7%B4!BOy|!NH%qTo%4K?+N`&R;zg3wUPR&*>a5LXgnk|=Tf4{#4Yf2N?Q^uaD ziJ3yMXywftZ9#Z3v2-dGcnodRIo7afsMbiq+|&XO=WCYm(ZQGGRmLi43A|Wq_HZ?O zf{bq?ow$D9$qocO8Xb8;V>Har8{f`JP~F7_(9v+N&!I zup60cdBvo%jkpBMC*x0xYPq)BB2!OQTLhQ!, 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-21 20:47+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Osnovno GIS polje." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Osnovno geometrijsko polje -- mapira tip geometrije po \"OpenGIS\" " +"specifikaciji." + +msgid "Point" +msgstr "Tačka" + +msgid "Line string" +msgstr "Linija" + +msgid "Polygon" +msgstr "Poligon" + +msgid "Multi-point" +msgstr "Više tačaka" + +msgid "Multi-line string" +msgstr "Više linija" + +msgid "Multi polygon" +msgstr "Više poligona" + +msgid "Geometry collection" +msgstr "Kolekcija geopmetrijskih oblika" + +msgid "Extent Aggregate Field" +msgstr "Prošireno zbirno polje" + +msgid "Raster Field" +msgstr "Rastersko polje" + +msgid "No geometry value provided." +msgstr "Niste zadali parametre za geometriju." + +msgid "Invalid geometry value." +msgstr "Neispravan parametar za geometriju." + +msgid "Invalid geometry type." +msgstr "Nepostojeći tip geometrije." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Greška se desila tokom transformacije geometrije na „SRID“ tip polja." + +msgid "Delete all Features" +msgstr "Obriši sva svojstva" + +msgid "WKT debugging window:" +msgstr "WKT prozor za otklanjanje grešaka:" + +msgid "Debugging window (serialized value)" +msgstr "Prozor za otklanjanje grešaka (serijalizovana vrednost)" + +msgid "No feeds are registered." +msgstr "Nema registrovanih fidova." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Slag %r nije registrovan." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..200712188e03f02c27d47629dae9116f3fc9f6d4 GIT binary patch literal 1987 zcmZXU&u<(x6vqcB1(rgg{3^d+g(_02+3ZGDX(t5ek0c81(p7f(A@$_!cxRn>JtNz* zn;;HV?;Jq_(G$HOap4mFfLu6m=2)SMBL}!u91!2O;V60zG$8xj1Rnvvt?aid`_JG@u>T4^3H|{- z1^xv-3;tW#kHGmj#>c@|!6x`9*a9B|JKz!UI`}d;0D1qL;1%#2@CEQL_ycmh2QFj$ zJ%YRg{t5E@(Zdt}lOUEvAAm=}OCZPVfSgAL@_sieeg$&A-+?voC-4pM7w`o5JIMLo z13BOSKtAtb4BiBffvUqv&+Sl|jQl`SCi9{6 zc8h!-#+}ub%ar%`&#?pbmDFiHx-8eqEMxbvGHE`h87Hk0T77{%MnaeJ6xL|zB?+x* zNeW+D>7vC=FO8=QS!QJ>FuTO@qUDuNv^>qBmuoG1UgaiQF^Hwo`|{f=Wc{Ey>{ySk zDkI5xi@c&%slB2i*IO9^g;A^@oR5oK86SO|Q(wx|k+71Gm~vjCSaqJ*Elt>i3Y(8q z%5&}D+O9TO73@m46n2B&D}t$x3#?2ZW<#NLy_XN) zM*x$RB9n1fieW;Xu}qa4(9FR5BAJ~XkH_`!tW{rbvd8S?fK%woeb$X;Pt{s0t;M}k zH0zDprQGn#jJqgfLSAnA*+L6t=BYOj)=9tcNp~qex3?}xNZNSO^zsxBE}?U4%I~I` zkQ>$7y0k*aOAwAr$P{7d7Ut$@@^@jz(1`_Vo|>;ki{9fAYATDu`8=i4q$p1~5(^LN zVy!BOiN%?C8sv_6rqnyPt?TdH)?WI0v?R6L+1@Z%4&$~7&vL3xh*WqQ!6Ah}yMoqm z`K(Yu!b3M}rH__462aAy6T_h}T4X70d2zo=6{eu3EV`B{=q#JcMBy1uZGP7{*)ZsH zT{@W!QR#^!_vsS>ADk}DhKJlUL4Ccmo#NYt+$%*{93~B4gG}!2%U1cg>PF1`g*{fFT7=%R2NS~!O_p&}4q96S$BRUZm9nGfpCy&DNDEZx0v iYbsRyjajRP6jhRr-9*wGL2lC2BbG59!-0!TqW=N!>O3(3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 000000000..716816460 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,92 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Andreas Pelme , 2011-2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2015 +# Jonathan Lindén, 2014 +# Petter Strandmark , 2019 +# Thomas Lundqvist, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-01-28 14:06+0000\n" +"Last-Translator: Petter Strandmark \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Basklassen för GIS-fält." + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" +"Basklassen för geometri-fält -- motsvarar ”Geometry”-typen i OpenGIS-" +"specifikationen." + +msgid "Point" +msgstr "Punkt" + +msgid "Line string" +msgstr "Linjesegment" + +msgid "Polygon" +msgstr "Polygon" + +msgid "Multi-point" +msgstr "Multipunkt" + +msgid "Multi-line string" +msgstr "Multilinjesegment" + +msgid "Multi polygon" +msgstr "Multipolygon" + +msgid "Geometry collection" +msgstr "Geometrisamling" + +msgid "Extent Aggregate Field" +msgstr "Fält för sammanlagd yta" + +msgid "Raster Field" +msgstr "Rasterfält" + +msgid "No geometry value provided." +msgstr "Inget geometriskt värde angivet." + +msgid "Invalid geometry value." +msgstr "Ogiltigt geometrivärde." + +msgid "Invalid geometry type." +msgstr "Ogiltig geometrityp" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Ett fel uppstod under transformering till SRID:t hos formulärsfältet." + +msgid "Delete all Features" +msgstr "Ta bort alla attribut" + +msgid "WKT debugging window:" +msgstr "WKT felsökningsfönster:" + +msgid "Debugging window (serialized value)" +msgstr "Felsökningsfönster (serialiserat värde)" + +msgid "No feeds are registered." +msgstr "Inga flöden är registrerade." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slugen %r är inte registrerad." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e7ac9ff2b9734786c3d11213919f6630847dd27 GIT binary patch literal 1426 zcmZvaO^+Kj7{?8imxe+GsJsXc4?;j!l_$y4h22>ev9#MZ)uxR$0RcB}#+h;A*pcno zX@Dbl4!j)s0DKIP_z)c6#+?s<#NU(5b{DYZ`Hi3V$9{f){=)YR>oWFh*xzBlgnj7| ze6R}eQ&54Afj@&UfWLw-g1>>${x9%p@ZzJ4Jp*0=p99|jqkIc|8Qce71wRKL2T#B! z!LPtqz^}m{5bHBp)2=VEs}DMGLE!IRe!uuK%s)3#&|E z_bg4M%sdGv$;n*#AkkeC6{o$_IcVYRiOQmGP`eJ+35L4N=}kwtMAGg%5lbUrCE#T}pR_G0M}SL@S!! zM>RNpsOw{*%*1{GACs3NmwY6}Jf&eJ3Z)fYEkanN?RHgFN&W6>A|E7UJ8!RgYM|Hd zZC|xFTK!)C;9>XOq|>@#O^^mv;XzXh@Z9M=+@;m;-c>`d?@@PSx5e(LptP8jq%f*> zCIwYuhARhXRvwEC-TFe%RMoSrAcUr#|Qww;*2=j z-Vw7B1, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Nukta" + +msgid "Line string" +msgstr "Mstari" + +msgid "Polygon" +msgstr "Poligoni" + +msgid "Multi-point" +msgstr "Nukta zaidi ya moja" + +msgid "Multi-line string" +msgstr "Mstari zaidi ya mmoja. " + +msgid "Multi polygon" +msgstr "Poligoni zaidi ya moja" + +msgid "Geometry collection" +msgstr "Mkusanyiko wa jiometri" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Hakuna thamani ya jiometri iliyotolewa" + +msgid "Invalid geometry value." +msgstr "Thamani batili ya jiometri." + +msgid "Invalid geometry type." +msgstr "Aina batili ya jiometri." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Hitilafu imetokea wakati wa kubadilisha jiometri kuwa SRID ya sehemu ya fomu " +"ya jiometri." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Hakuna mlisho uliosajiliwa." + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slagi %r haijasajiliwa" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7964f323e7f3919af338b5e1976d4c8927e392f6 GIT binary patch literal 466 zcmZus!A=4(6vXIhkDfi$!~+Do?Lsh1ag7ln!AK-z^LLo1tXq|4_Rma z\n" +"Language-Team: Tamil (http://www.transifex.com/projects/p/django/language/" +"ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..20bc7f0ce30707658c9a2f693440fa2435526c31 GIT binary patch literal 824 zcmbtQJ#Q015IrC?S5iO$#n2^+_C6v6@i~qVCXtL{VyuITX7Q~r8=ZHLy*)cANdYvJ zh8BqkQNbE1f&#%mL0j=Vn7fcz5p<07^k(MXyqUe9mlmcD#scCRVhwQ-@fcA>j<}3? zinxM!iMWb*iEpD8)(u=$Rnl-E=2^%E)}VC`z)7AlWvjngxo39 zg2XZcx3?XWwqjJHmfWS9MX(Ztw@46@umR!C=tg5X2!jBHq|e5@@;sw!oaln(0K?s) zg(k70qR6P0DuR1d2wuPz!xJ-D!)vg-ozX7iXdiLnU=7)qjetn z{$w)obY;kgY|k6Wk$?Q86UzQf`m+^ s(asL6`CR*dvIfg%mEY;|=VzB!$6*JT|6>rlc, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "క్షెత్రగనిత మూల్యము ఇవ్వలెదు." + +msgid "Invalid geometry value." +msgstr "సరికాని క్షేత్రగణిత మూల్యము." + +msgid "Invalid geometry type." +msgstr "సరికాని క్షేత్రగణిత రకం." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..257eae1e655edfe8099f57030f40df78d57af9f8 GIT binary patch literal 611 zcmYL`O>fjN5QYtuOHLIaPDl*5R>(WeoC2~qE%K15wd#qzv{%XxnkLZ0<^NMG%-TxKA+F1RxX;0{V2 zl61mhmst+zfwAOy7LuXSQ$BLEpV3#`SgBP4*_0`vgKb`FP1j83} zoA1fSN;jC}3AE#OOyd>WT7kHg#GS`6M(~_jM^nR;&6(3Cft|`!c7lRe&tTO`BP&}P zEx36i3MTV#q>D8?r$ogBrzvMe0x6ryH?TBuu1un6Hk*a6=_$v2zwt*`!~T=}@8QUa zXgL`42boE{rD3Snhf+(=FP$_BD5nxuKhCq%)~R z0-asy{tt;gL@>-N!*aT%O<@yI<$P;, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 01:08+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Майдони асосии GIS" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "Шакли нодурусти геометрӣ" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..de8d4c586c6ef995bcce570858961fe6b6b07293 GIT binary patch literal 1835 zcmb7^&5x8d9LKAI$cQFrqTox?i}8hY<{6{FKFgv4i;mfa$uJs@KF-s5rsUan(xHJf+j6&WgN#0-sVL;L zW|NPmR;N%7YozRLt_zeE)AUp#GgWEvzS4%x7nw-ep+Q!#wu)(`dA!XIYo7QPup^1# zF?}(r?_*J&)u(8EZ~W5Ko~Ry05V96u6yE11-BhWI_Cy$!xuh_x?QbYgjM6cEGm%mh zbdIBxoE|_nSiYKvWmU+oItUw?4U&wrHcu8}+U_NSKG!p*AJ=M2OH0*o;iAh=S37E< zHY%t@zHVDHz1s7Y`NsV0r1W|t>|b{FN3Zctpn>7nVgK{s zCz#tcXD|7EJ9HNNaEtGiAj1b7!s-KO&xH^dg1{Tn@GA)dI3MXDhG3jFqQfT={wgGZ z(5uc~zLRGZj4<$ZB`9Eqj6ZSq`~Q_+Xqzu+)UaD~K?`vN*YJyu-lnx75#KZves?v6 z{F|UfBk_R-plt}Tf`f5azb!9rEfhCej{A>BZ4i`JBgYeen?;`m?+Abk^QAyN@j>12 zL+UJQu;FNk&Z6;HBh>Y9A^3~(%SYsIX(cSLh6Ldq0{=9Kn;4@TIJiqsk;pi1S<1%T VZrcD-{!^Mn^I^}2w|wW^{sjtHMP2{^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..40355c254 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,86 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2012 +# Vichai Vongvorakul , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "จุด" + +msgid "Line string" +msgstr "สายสตริง" + +msgid "Polygon" +msgstr "รูปหลายเหลี่ยม" + +msgid "Multi-point" +msgstr "หลาย ๆ จุด" + +msgid "Multi-line string" +msgstr "สตริงหลายบรรทัด" + +msgid "Multi polygon" +msgstr "รูปหลายเหลี่ยมหลายรูป" + +msgid "Geometry collection" +msgstr "คอลเลกชันรูปทรงเรขาคณิต" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "ไม่พบข้อมูลพิกัด" + +msgid "Invalid geometry value." +msgstr "ค่าพิกัดผิดพลาด " + +msgid "Invalid geometry type." +msgstr "ขนิดข้อมูลพิกัดผิดพลาด" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "ข้อผิดพลาดที่เกิดขึ้นเมื่อการเปลี่ยนรูปทรงเรขาคณิตที่ SRID ของเขตข้อมูลฟอร์มเรขาคณิต" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "ไม่มีฟีดที่ลงทะเบียน" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slug %r ไม่ได้ลงทะเบียน" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..511e63131564ec3dd73cb3a6affcb9d45de3b17c GIT binary patch literal 1961 zcmZvc%WoS+9LEPJFSoqPt2`?G03jtpyLQq8siS~WlC+^Q4Y7GhoF?A!db;BoYj!q{ zBMucp>VYdDDuHs0#4SSNl$%|NL;r>fRYF{lfCCp$CBCy>$4%Rj#~;tkZ+@@&{e1J} zv2Pg03z)BB-oQMK`S}C*!uSjP6#N@}1APBM#-0T==&z2p|6g z1=ckvIRpL#`t#pGum3g(5%$s}j6DaQ244neL4RHYp9E#WZP3eI1-<{@gRg-EjK+i{QJU&+k_t+|BQJc^~6=JdGdTho>+f!}R$pVLpzD zwB_Su!D9uz4}SRAe7yc`{P4EnN}e+x2V2x6tTmQQvzb{dBI>n;CTF=$TgG;zj>)wJ z#lm!ivwd)sZ?0WmE3`iEv_;#4H+ez zAg&ax2<|c~QntM9gm$zT$5zA~rz>6`JHJ|I=f^%YjZ&iNq|t0uLzj&1@UPz$;l10r z#gMH@Ehu#sez97noTRQ%{TPb!RiN%Z54uKb$38IB5+X{8TS0J4rcNMPp+7iGO>Tp_ z)@;ehpRMOt*9!w1+}|m}sjDoeH!aCj-@0-DEL^|6!)qWUFJGA zr47+F)&;dRmQipni_@TCs#IFP6l{ns=|zJjJXMuuD>G+<%GqG%ZK}*w&s5&3V3gJn zdC>3`rMNS;O6N?rVVVgJbe!>61P#GERcd55k!hQz+Rk;W<#Mmr3-dyhEwLRoO{YBa zXAD(bFFRYFF4b0R%M;IM!b<5qqkSy}4MbffC$?R=tGLwj)NFH`3b*i4VL=xLpPzrmey5fxe8WL>S>j9H(#a;v-33ixiF>a9h#Y*FOBO}(iSQ| zmE%H@l=lgT`@?N6VrtOp0zcirH?4h|H)6SU-}wAAK~Q%Ce8t~u1H zNQUf!-{bw^exi7X6AGY-(uBFZ;go$`Y$Z)2J@1_vD)e7hr*l8J& z8(cMs%4o1>l33_`Nog*khWjI_(WW+u, 2011 +# Murat Çorlu , 2012 +# Murat Sahin , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:30+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "Temel GIS alanı." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "Temel Geometri alanı — OpenGIS Özellikleri Geometri türüyle eşlenir." + +msgid "Point" +msgstr "Nokta" + +msgid "Line string" +msgstr "Satır dizgisi" + +msgid "Polygon" +msgstr "Çokgen" + +msgid "Multi-point" +msgstr "Çok noktalı" + +msgid "Multi-line string" +msgstr "Çok satırlı dizgi" + +msgid "Multi polygon" +msgstr "Çoklu çokgen" + +msgid "Geometry collection" +msgstr "Geometri koleksiyonu" + +msgid "Extent Aggregate Field" +msgstr "Toplama Alanını Genişlet" + +msgid "Raster Field" +msgstr "Tarama Alanı" + +msgid "No geometry value provided." +msgstr "Verilen hiç geometri değeri yok." + +msgid "Invalid geometry value." +msgstr "Geçersiz geometri değeri." + +msgid "Invalid geometry type." +msgstr "Geçersiz geometri türü." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"Geometri verisi geometri form alanının SRID değerine dönüştürülürken bir " +"hata meydana geldi." + +msgid "Delete all Features" +msgstr "Tüm Özellikleri Sil" + +msgid "WKT debugging window:" +msgstr "WKT hata ayıklama penceresi:" + +msgid "Debugging window (serialized value)" +msgstr "Hata ayıklama penceresi (serileştirilmiş değer)" + +msgid "No feeds are registered." +msgstr "Hiçbir besleme kayıtlı değil." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "%r kısaltması kayıtlı değil." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..618bfb7423dd6af4844ed3ef7f404a31e4912382 GIT binary patch literal 1470 zcmb7?O>YxN7{{kAl;V~HAc_zio=YWAGWHr!N;VDRHON&`tl(C?F6*(g(PqY)9Vg_L z1S%w=wuiQAK|(6rDh@FX5g{Z*{RXqii35CrBJl~3_|N98A>q)m9{uL=JTL!eW?$~x z@f*Y113Ln{0ox0E1#`>$fU)nvBKQ$_3)~O>1bzZzz)!&xbhTc9uFk)!|Gxnb z!{7ZOV>`hwz+GS)_#@6vfFb;U(BxxxzJsw2uzi&wcpCm4@BsK6JO;i7+rdL9>gxA^ z-QZO)2mT4}10R5B!_bC(0&{CO%=N-i7VGqU26J<`h0@u~ZtrHw)>%nHYo$qrVN+{S zrI7(4$>=~PHKm6lStm0fs4moyFnW}X%KR(+r3<8Lo6lSV)glpB^XyXT3cIwH6skBD zp^21aB{>|#QT0CsM;ju)^>0Kq@qce51tms92kUFbCZdLlN9!n*c|3mioHtY?4f{rI zbjV6kL#yGaDj=<#MU+?Tl(ia!HeRao?}SdE(WmNQAnPjEFB(c4-j~#)DnHk(C%mG3 z%9Sry_<1b?HxIuM7~#`#ulObRioDoK#SZ^uXPZ~_JOuK7F&w#?o8mgx;=DEwE7uz& zhF9E`$AMAWr>_Gkql9_|1jqCh)WAIxXKp@{HFX*}vfd2pf>%T^vVj4?dE_C)vo{q`TNf zE8A|bE640FcE&!l^L8ekNXP7K`m=qseA_ON`{3;K@@-n0vX9*+9ZM&crpW$nTXrs; zMEIm#u#aqu(jROqoxsM<*;)G(1s5s3iQ_pJly^P;u=lpKvU7ya57S#nKqL}d=@>2j zj>H)_^Ki%0NoIdt{tL=x(s4rY^_3Gl4HXLnY*LSsC^Tyq(e(eNxsmJ>G@Zw!6G*@3 z#&a`}Q(+&wEwguU8;kfoOK&=X82Ejvx66NT@LgPlyMop>, 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "ГИС" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Нокта" + +msgid "Line string" +msgstr "Сынык сызык" + +msgid "Polygon" +msgstr "Күппочмак" + +msgid "Multi-point" +msgstr "Нокта җыелмасы" + +msgid "Multi-line string" +msgstr "Сынык сызыклар җыелмасы" + +msgid "Multi polygon" +msgstr "Күппочмаклар җыелмасы" + +msgid "Geometry collection" +msgstr "Геометрик объектлар җыелмасы" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Геометрик кыйммәт күрсәтелмәгән." + +msgid "Invalid geometry value." +msgstr "Дөрес булмаган геометрик кыйммәт." + +msgid "Invalid geometry type." +msgstr "Дөрес булмаган геометрик тип." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Геометриядән SRIDгә үзгәртү вакытында хата килеп чыкты." + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..192c21cade7a2af5f860260aabf53a198ba9958c GIT binary patch literal 462 zcmZut%}xR_7{uslkDfjB;6a0>T?u9>VvGn01|lJg_qtn_lHGRGek=GM`g%T#--3aQ zlT6x4=lhxdoS%I+5GTkBTOM{OZ__X$yeq=HCJ#ABBb}=cUHAOQ z7m0SK$q~UsdZ4kB#^(~O6XZo2qdl1@ovNJN<2EQC^POyIv$PLbW3ozSipEM7f-KUa zazL(D0Ht7Tv)QzuZm5@P+e&P~%6&}FO14kO^1lwON(*)!OvlsV@dv^d4+hqNGPv1i zi4j3\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "" + +msgid "Line string" +msgstr "" + +msgid "Polygon" +msgstr "" + +msgid "Multi-point" +msgstr "" + +msgid "Multi-line string" +msgstr "" + +msgid "Multi polygon" +msgstr "" + +msgid "Geometry collection" +msgstr "" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "" + +msgid "Invalid geometry value." +msgstr "" + +msgid "Invalid geometry type." +msgstr "" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Google Maps via GeoDjango" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8624acd166d6d9e52a04bc206df6ab7386c49184 GIT binary patch literal 2586 zcma)-+iw(A9LJA}w-s-A15xuc2Ixj+yVDkhfi0q?q)KIN7c}u{x_df3FrC@V%=V&? zl!6#vBxsW|$b&EX;`f}L-Clr%NoGIuJLmjv-*aa6 zw+-vQWw@Tl{SxjQxL?M7{675P`WyTRyam1nzI#7o&ww7Ne5Sz%z;ns?`DA<^d;#OX zf{%f}gO7uMflq_~Cgbbjyb<s6D?_U4k`!!m?){aymrke2?lKCle9DFRvg+AkO;k-Q|F>pAq$Xu$PPK7 z=cby=V@(aT%ye^VhDPmj*xZ&wW$r1r!7?w3VNtY|NYoN8(&BvhUV%z$w#Q=mz&{F6 zjlPm`ga;w~EGiwfJ;zTC@UkC7Mt|stlJR!M35|kpQ7V7P7~o?M z8s;wQ=(Kipy`IIDI*87Vf;v&I9r=MpeXc8PI^w&2aYP8(Bb1#POYFCtQCql~qCeUV zSI?=~4mS$i9<}K3vA`Cdusv!UiK4RA-abA)p3#R@4D$)))844L2{#GQUOCpDPWAWo z?_ciD%w$vV_?|j%MghuL6!D3uz3d{#ZYqx0LCB-r;X<#mb9tS9F?e9?_lkZA$H=0c zLn3MwYEk7_D(_YT+ckReI)oN^Wo?GJuHDpl%(Z#6g-pujC`((nlD4wSG?&dRy$ai; zy;y@FcXH^?QOB|a?a5J>G8@seS=vKp2OU42#LrSUnO$iFG;a%-xS)ira%h^}xgD$G z?@F(jMZ6s9Yt@f@IkSt>Dno}wo$1{vCV!N5c~#crl3bK?B(KL)vIfX19;)%QT#$A3 zB(KS9@hr)UcvKFUil^e)_&bu9WS#WaX7!}3#h=5gj?uabSeHxjS&C2Vc*vMx^6PjO zS+R!jGlvr9)MEJyLN*efrMCE_Dg_HMkKfCfU%>MyTxo2dY{nd6Mb&=Hd4Ps=JCC zqO2-)UiAv0rqR$Mx}DaQEH=w)wWRcK_@j}P5tJtsfp?=gEQ)88{Bugdcm^8dG_-a` z%WxgxFG0~7HV}@DwzQAlAie4L+}Y1MKMp99U){MGCVxUT%XR48#F3L#CNDHjminBd zb1mIn3YS+x)#Z=79OT{G1jZhgGBQ+yW38S$~*x_2B^{iM`t>@JR0>sybh f%LH}QyLJXToyGuKjL+!TD*2;)W!^J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..f95de8512 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,96 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Denis Podlesniy , 2016 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2016 +# Max V. Stotsky , 2014 +# Roman Kozlovskyi , 2012 +# Sergey Lysach , 2011 +# Андрей Костенко , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2021-01-19 23:54+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "GIS" +msgstr "ГІС" + +msgid "The base GIS field." +msgstr "Базове GIS поле." + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "" +"Базове поле Geometry, яке відповідає типу Geometry із специфікації OpenGIS" + +msgid "Point" +msgstr "Точка" + +msgid "Line string" +msgstr "Ламана" + +msgid "Polygon" +msgstr "Багатокутник" + +msgid "Multi-point" +msgstr "Набір точок" + +msgid "Multi-line string" +msgstr "Набір ламаних" + +msgid "Multi polygon" +msgstr "Набір багатокутників" + +msgid "Geometry collection" +msgstr "Набір геометричних об'єктів" + +msgid "Extent Aggregate Field" +msgstr "Поле, агрегуюче площу чи об'єм" + +msgid "Raster Field" +msgstr "Растрове поле" + +msgid "No geometry value provided." +msgstr "Не задано геометричне значення." + +msgid "Invalid geometry value." +msgstr "Невірне геометричне значення." + +msgid "Invalid geometry type." +msgstr "Невірний геометричний тип." + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Помилка при перетворенні геометрії до SRID геометричного поля форми." + +msgid "Delete all Features" +msgstr "Видалити всі Features" + +msgid "WKT debugging window:" +msgstr "Вікно налагождення WKT:" + +msgid "Debugging window (serialized value)" +msgstr "Вікно налагождення (серіалізоване значення)" + +msgid "No feeds are registered." +msgstr "Немає зареєстрованих підписок." + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "Слаг %r не зареєстрований." diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b2b784c60b180fa4cf5ac91d14b11a049171135 GIT binary patch literal 1410 zcmZ{i&uwG>mSfNUpq+yfm-r>=Go6*f8U$=>*L)& zGmO2MhcRzr?#KKS(+zryv2Vd6-~sS^@Kf+Mco4h`egHlNKLnqF?)>x3^?$%ai2nuO z0r$Vn*n8kX@JFnD4*r7p@h;p2UfI1t1s+9w2Xy!T0e%KP1BbxB!B4<_5FG=Lf_uOi z{0P(_Lyl_jmz0EiKCaq z=3Aop`ZBUItWU&JP--+hu*objF||}O--M8lc(QY!w^S?*yP~#l@KV&$YBr7pY*l?m zbyKIR)pdB|;}O3mbPA6FMb|^wRD~(gQrhszv>8YIeAY~PO$Ah_eqG}iv`em>i$HxLtasST0;p(g+Dl_%s0-al@2aNf^r!s!xYH6=w8m?Git; zo#+1)q4`BwR}nr{Kxe*-&3_&P%5ilXPU1D#u3( z%sw1+@^-$6=bBv^bg2Jp-ljLK4wfmuWxIAIUqlWf|4-USwwo`xJt*{_kbPk9+aAOg zkYrcv18nuz^R~S=Sa!-_hj3^GO84=Km2UonUGquQ@A>`y`e1qR)0?c>F4^Dhqd^B& zZ!!BMU$CpMn?)sEdoN%A|Ae-4=nBU*&~VvHWFNa0, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "نقطہ" + +msgid "Line string" +msgstr "لائن سٹرنگ" + +msgid "Polygon" +msgstr "پولی گان" + +msgid "Multi-point" +msgstr "کثیر النقاط" + +msgid "Multi-line string" +msgstr "متعدد لائنوں والا سٹرنگ" + +msgid "Multi polygon" +msgstr "ملٹی پولی گان" + +msgid "Geometry collection" +msgstr "جیومیٹری کا ذخیرہ" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "کوئی جیومیٹری ویلیو مھیا نھیں کی گئی۔" + +msgid "Invalid geometry value." +msgstr "غلط جیومیٹری ویلیو۔" + +msgid "Invalid geometry type." +msgstr "غلط جیومیٹری ٹائپ" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "" +"جیومیٹری کو جیومیٹری کے فارم کے SRID خانے میں تبدیل کرتے ھوئےکوئی خرابی واقع " +"ھو گئی ھے۔" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0295e89015708b01af31bf7fe114d7695db5c5ab GIT binary patch literal 1384 zcmaiy&yN&E6vqoikx@(lBM`(qO$ZQD^Mjwey{-Y51xI#evJ8ZHvh1$uDd?%{R9DZk zTse49!eT-^nW!8*s0j(mWey%@!i|4HG6zqdypzDUdS{khAhD8{Pgm7@@B3cY`+M8Q z+YIY%*n6;VVcTJkVSatOfw4_|m z1MUWofv?R6A@{7mt%5grYw4}^g)WGKR#3@QmvJ@jxvE#|}_dGR9 zJNCJumXuLO!b-9-R+*FNtn4pV`zSOhwWg~gf7d8N8zX`9NgmT)ODfa*+`1eMYc8W5 zUXS=iX*0AHP;^=7*pwDzYOLe)S*#-dNgijsX#y%W&NcarmBRl5eo8nQ(4lJWIIq@t zZIWuof+Ld$tF>wsj(kCOmCw1(Z;~H6Otp#N=#hg}tkRsw9B=v;N`x~upwEQXDx*1x zRucLM)nI!fDYj*$TjpcL=r|X#fB%=(KuBsd;&DZB=pZ$PZxmubr+DVPV@TLJddDT_YL?}H)VO!Wty6Fqe(|qEY zUom3R@>w042yYzF#8=9#RvJ)Ol^RKIMZ!;Gu(E)3T5PlF+7zvPPFJT&Y^HyYl40+A zMOWGiYWdQzcU{xq*06V5QM><}Zc}^MyAhHb_I{;ebi-lq7lAQ, 2013 +# Tran , 2011 +# Tran Van , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "" + +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field -- maps to the OpenGIS Specification Geometry type." +msgstr "" + +msgid "Point" +msgstr "Điểm" + +msgid "Line string" +msgstr "Đường" + +msgid "Polygon" +msgstr "Đa giác" + +msgid "Multi-point" +msgstr "Đa điểm" + +msgid "Multi-line string" +msgstr "Multi-line string" + +msgid "Multi polygon" +msgstr "Multi polygon" + +msgid "Geometry collection" +msgstr "Kiểu hình học" + +msgid "Extent Aggregate Field" +msgstr "" + +msgid "Raster Field" +msgstr "" + +msgid "No geometry value provided." +msgstr "Không có giá trị geometry" + +msgid "Invalid geometry value." +msgstr "Giá trị geometry không hợp lệ" + +msgid "Invalid geometry type." +msgstr "Kiểu geometry không hợp lệ" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "Có lỗi khi chuyển đổi hình học từ SRID của trường geometry" + +msgid "Delete all Features" +msgstr "" + +msgid "WKT debugging window:" +msgstr "" + +msgid "Debugging window (serialized value)" +msgstr "" + +msgid "No feeds are registered." +msgstr "Không có feed nào được đăng kí" + +#, python-format +msgid "Slug %r isn't registered." +msgstr "Slug %r không được đăng kí" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..df7d9fd7184020f9bd35566db3b6df5c9bf43c92 GIT binary patch literal 1812 zcmZXT?N1y<9LGnkRnPiVpPE>cNsI>4?A=iekVTA@hX&MIjp^lwnpvU^8jVtuP`{LbDUPfm9Bv-6wzJeiZ#C`m^Zo-Gvw09q?`NZ}2(rwYv#<95g`T(+}PQP6zf&fqeyh8unko z2f;tUhrmC<$H0FA`yn_V!T1RH3|Il)3&z0vz;^Hu_)ajN21Wisum!vTJ_)*@g&O|_ zk72AM2o>|-VQ?+rO%O}S@1Tf#8x;O`0vV}ZPTV^B9XCemZaG>rx{h5 z*~z%wL%HdX+uNEOsF~V3Cmd)>V|p@78dyh0RfT(2Gm>VOmO0GU6kR)u99@c@VdYq( zGtQ`@>$Hg}JYzG5Gw%)vQ$ID)OD8NnrV<`1F^K^uKIc` z7XH84&ln~xn!%{UZPZ0#8J%m?GW8x6f&7uA@1K_}Q!_X@WzrO5Nrx&nqbN*sID=SW zF|jR;pMzSq*`+1LT&wTe8YE~_gio-Yc0Hrg=WVJv#;x9Iz9(cHa(5^Wqu6sv%^h1w z17Bu(t9OESDwb0^meUq9gj>7C5?V@2C_*Hp;K2;ON*a%(b^DkKgexvOu8HM`44|6Y%F@`=f$OR zzn=2G`QBX~a>qW-Ph8%bm@X_Wk;3voVQDhIFy)SYR_6Y=>aLHu!&C0)C;6E{xA%HE zaffqT(^tHaUT=1!aJ4W0U5E|Yzw(p& z=|{JF`}bHkf1dODmV~u1H;OQu*H(#pWoGl*0^WriYp7q0i<9}qtHFG}e~oynbEpQ@ zdf$HG4vnHzZ++a4KfB8dv3(boeN4Y0(S;c3-ezULlXD$dVa3g wzbVB9B0P-V>|!9VFDI^vcOmC454yw4!4)ZdK3EtX*uQgeHFj(L*Yz3lALkZnDgXcg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..176ff1c36 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,93 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Daniel Duan , 2011 +# Jannis Leidel , 2011 +# Lei Yang , 2011 +# Lele Long , 2011,2015 +# mozillazg , 2016 +# Ronald White , 2014 +# wolf ice , 2020 +# Kevin Sze , 2012 +# 航 柯 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-03-04 03:38+0000\n" +"Last-Translator: wolf ice \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "基础 GIS 字段。" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "基本几何字段—映射到OpenGIS规范几何类型。" + +msgid "Point" +msgstr "点" + +msgid "Line string" +msgstr "行字串" + +msgid "Polygon" +msgstr "多边形" + +msgid "Multi-point" +msgstr "多点" + +msgid "Multi-line string" +msgstr "多行字符串" + +msgid "Multi polygon" +msgstr "多个多边形" + +msgid "Geometry collection" +msgstr "几何集合" + +msgid "Extent Aggregate Field" +msgstr "扩展聚集字段" + +msgid "Raster Field" +msgstr "光栅字段" + +msgid "No geometry value provided." +msgstr "未提供几何信息。" + +msgid "Invalid geometry value." +msgstr "无效几何信息。" + +msgid "Invalid geometry type." +msgstr "无效几何类型。" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "几何形状转换SRID字段将发生错误" + +msgid "Delete all Features" +msgstr "删除所有要素" + +msgid "WKT debugging window:" +msgstr "WKT 调试窗口:" + +msgid "Debugging window (serialized value)" +msgstr "调试窗口(已序列化的值)" + +msgid "No feeds are registered." +msgstr "没有已注册的源。" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "字段 %r没被注册" diff --git a/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..517c3957bc9a445a32588154cdf4043e728f7f16 GIT binary patch literal 1975 zcmZ{j-%lJ>6vwAptFBdR{ne;VZZswkGy9`YFo;U(J@A~=_$l?!xC&5eL)1VD@ zBgcQhx3Mh7B;nj?Nva_+g*xj(fYK_#qm@E(Om`bQ&Xa>>Z@r+^61j(kTN-RTE&7@|e zWmO_piV}%xX=)k0#L~QVM|*1%(UR3VWt;HUNT9k;2LRzS3WejR^%{>-XEpkkf3@VAxwlII(iPjG8L?wr~rYJOS$(qWw zs_-QzcI4Nq)8K!_Uc?}GQdTK3EdzOR(TrlrMAwvF368uKuk66aqyU1+(<8&w)iM(tO*;Mc5rmQNLF_gPg zG%3NEE7jbVRchdsncU4?BxzAME7x*Lrz$h+&}m#w%5jkuiEI_l@``iz%@|4Sx*maR zGqf%gm2XY(XQ*MqP9TXcQI)hnJJmJA;-jV{C-~PhlF7$3fdtx4@$Ix*W?T6tT$MnM zgd_EQxSo&Hk#M~bj=U1a2%N;p`51dqifCzuKw^CvUT06^cq)VcS2NIM%r4`olon+r z7}wIT!AO-dqD1)^71IKC;$~2jnwThOMYWdHq%2DpLZNIn8}weQoTNR>G*nKy0>$?e z>Px*BI~%GEL|dcH+b4_!!-3v^dP;8t)ZHOY3=O=z{yj+UCS3_V~F{?p*21OZLz;_iB-6J?KpJ zyHiE?;@sxw*QKTTUvvH3=F~h}EKImdlcdI88@Goh?a>K4SFGjip(UuDe9oE4yZKf7 z)(ThpV0!cNpu0F?uPr#&2R7En{;%2KZ1vX0dcmF@K?WPEBlh@JnAVcbE3*)A?!XnN zFyu}Tl(#YI>, 2015 +# ilay , 2012 +# Jannis Leidel , 2011 +# 619e61dbdb61c57213f62815aaf60e01, 2011 +# Tzu-ping Chung , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:01+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "GIS" +msgstr "GIS" + +msgid "The base GIS field." +msgstr "基礎 GIS 欄位。" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." +msgstr "基本的 Geometry 欄位——對應於 OpenGIS 規格的 Geometry 類型。" + +msgid "Point" +msgstr "Point 類別" + +msgid "Line string" +msgstr "Line string 類別" + +msgid "Polygon" +msgstr "Polygon 類別" + +msgid "Multi-point" +msgstr "Multi-point 類別" + +msgid "Multi-line string" +msgstr "Multi-line string 類別" + +msgid "Multi polygon" +msgstr "Multi polygon 類別" + +msgid "Geometry collection" +msgstr "Geometry collection (幾何型別之叢集) 類別" + +msgid "Extent Aggregate Field" +msgstr "聚集程度欄位" + +msgid "Raster Field" +msgstr "柵格欄位" + +msgid "No geometry value provided." +msgstr "沒有幾何資訊。" + +msgid "Invalid geometry value." +msgstr "無效的幾何參數。" + +msgid "Invalid geometry type." +msgstr "無效的幾何類型。" + +msgid "" +"An error occurred when transforming the geometry to the SRID of the geometry " +"form field." +msgstr "當把目前地理資訊-GIS,轉成空間參考識別碼-SRID時發生錯誤。" + +msgid "Delete all Features" +msgstr "刪除所有特徵" + +msgid "WKT debugging window:" +msgstr "WKT 除錯視窗:" + +msgid "Debugging window (serialized value)" +msgstr "除錯視窗 (序列化值)" + +msgid "No feeds are registered." +msgstr "沒有已註冊的 feed。" + +#, python-format +msgid "Slug %r isn’t registered." +msgstr "嵌入式語法 %r 尚未註冊。" diff --git a/venv/Lib/site-packages/django/contrib/gis/management/__init__.py b/venv/Lib/site-packages/django/contrib/gis/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40841ebba390f839f6f8ba3833fc057833b6c7be GIT binary patch literal 203 zcmd1j<>g`kf)81esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UdSu6Y(RqEr)LrOE8<^CFtae222|ughROC$Y>a>ST<2prqOb^ikH}$RO0R@=2rKE< zzJR5)=<=O4jVK*-LU*u{1)y{yZ+Us$bvVVU5Ub!Sq>M=| W9b=>R_UKQPsr*Gu<3rdBNXZvR4m;BT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e50ed3fd945d698173f725694059961c4793aa0 GIT binary patch literal 878 zcmY*XO>fjN5VhkZo2I)6P~nEeHHT*J2q8qP79><55Em=LN@DLSZN6$Jg;v>9k@`2b z$NnWtoH%jgh`5w-63Q}?M;_03-n^NqW-}jw{QUGS`DG#W-58r`+vNXyo}pCUPD) z+EHySq`tQl4O^Hu)|}UZ&N8U2Qng5%tSadP<6e$m`v~o}HIEw+c-mGXUuYlblw-Kx z#7Qn#85cqmS$(GdM(XKsuVWb(if#{9Sv5jYA0XJ^xWRghu{4jBV(bR}{<8Nh`ly6d z(fd}ZINGn$wh(2bqQk6t-6qjNCRMZhPFBZIM06&~v*>M>L@H~^2nV2~|1m$8E`?nr(iH*HmpZNIV@wgn}|1At$ z?XkWEjA@^-qT(&|gy|_`r)`{@<}gOLcrv}DjVv}0du)TKz2`&qFR+0%*i*Da F{s7R6^BMpE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62ced5c4aa647aa46cf55dd8c86cab89fb543add GIT binary patch literal 5211 zcmcIo&2JmW6`$E%F3BY&%Ze>qwv&$SI5t~zouVHx49B%=#jXKI2`o233AM`=XGpEI zSHR8U_7rg?6{tC{l8r@B+6V5N->yR=RIC%Ft5eC1@$-Ee^DlxdSbZuwX=m(wZV5WxnS3I?=gS)B~BUoa+SY94H^U zkQ6j)D5!J0l6U)?Y02|iei(Y*G>QqKZP3HCN)J$DJ2~>4cHQxCS%#sH3pgJ)>3ON+ zdEJN)LabLk@6Nyv^PZyT@u=l_@*vF7JDw;GU>oWQ|H{@Ci%u7G+Y6B?i!c!IH*+&k z@gDg7<;&o=2YNZ&6oAr?nG|;hffSm;7+NfZ6ik(%ppK5gU#p@@XX#-h znSWNwdto5w_R>L2ORd+VP(y;ddbK6CJ*QU#8ZYC(SD~2nI30q%hMNyaqrfd*fVa(U z*kUm)=1wj7>y6BlpcVz|1YjTRo$I&i0QtTj2P>gq+>b$_(LlBYJ0skVdzQiXs^1sw zAQUxlE8ublaeoji$7k0?w4jZN0is0+I*eB*XlIQGZkJsHFC^~y-F_%8ILys04lIl9 z+8IlNehUb>YPHWAS-pij9zR$|Kx?)C9V$b*21>_$KZJ;(zhLhZUv^9}F7Wb0EAMx7 zOJ$;^%BT1=-}ex}qAASq{jtGk`Ahu3Lx?-N?I54yhxp;0G4uS$#41PmG5#`tg@0{l z6{c4?KC#LPesW^Qt3dBmMo$CrwZ*i8viCCCCx_qlQIwIE=7dsQj9jZC?5B>Fu68QP zu|<$Ei!#&8qz+SCQuwiOlVZKT68gRMYsqiHd4fK*i(^WF_k{smTQ1H9EUxapoz5?rE1imSwiHmhaPv8bwb0H&g4focB zxTyWgSYG*xta%ORXJfu>4_ZOc}Cg@=GizIPjOo4Jv(d~)6=`Sukc8D*pe*owjsLO#L| zB&OHW2!dr$BXwXb;1s&xLjc~%`Rij7&s!J|GzfgKDNLbZMi!Ks zH!*d7JDb-;k5dKLhFQH%Aa$_SnG~RB9}0d33mu?$qI5bnIYpg?5vmWxG@YgvHS(YR zU#s+d-F|8n#;pdmKefu)*SOvO%(BM)K*64rKIWR7&KEei1(dOxDT6-4j{CE!4>Fi+Mhxc+zqKaj6q$=>s% zZ2+x<9gqzqjdPEx!}1oM7!NJV;~+$N5(^YDo*BK}q$Mrp*xMt269(eJ3c;hk4h8Io z{CNMeF`^@5NMrIb@N$<(16C&k3UAQNuZ=r!TGS^7iIX3jso}n!()EfI;6kKxZAM_uoM?YrBpp@C(cDY3uw+hL^?=xhI|1pJHsU!Ra!>3t}`3? z8h$%EQh3-3&hgvOq}%0pptgs5@xpYCB6rGm_U3zuS0{2WDH z8G*5Z;ZQINijaH{&f0h2QURc7JlTg=2B%M{(-(Akc2V=5YobvERC?`@LylOH;_i6m z3Cxr);uh}p<)z=_s`?oFfkg~sdfVAfj=vBr<5}_zn3mE}N}bwNYWAbP#BDU31;|~O z^s%8ab$#K=&A0Bggua=OxW&fF&xwJ9I0%)yYe*TsH2?~5Uhk^Z7WZP&#0oACWVDdq!ot$aUJT#}V zJhiQzhjsP&EVVQ9iJ(C(LNP}TbDGZ35-ojTY|j)N(>CnSjulFVZP^rlPiG3VCIkf| zcjViSVSH+BPnWAk30=K03-<=l`_$TYiplg|!7tW|60XdMJdDLW7AK%+%;o29<*7|b zVY^;yRkYTXME@eMVX+HrUDIbv1|8_U6vl)S=-Sw}?2=KvDzT?lO-tj;r^f8_YRdF` zbf-fKclWZyU4gqZiB^}X`9MA_Q*C~4CGnu%u(Mk)9b>a-i>rSg!)fUvq{?tVatXby U!n1dYRE-(9Y?(D@rw&a24@``BWdHyG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/management/commands/inspectdb.py b/venv/Lib/site-packages/django/contrib/gis/management/commands/inspectdb.py new file mode 100644 index 000000000..1bcc1a079 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/management/commands/inspectdb.py @@ -0,0 +1,18 @@ +from django.core.management.commands.inspectdb import Command as InspectDBCommand + + +class Command(InspectDBCommand): + db_module = "django.contrib.gis.db" + + def get_field_type(self, connection, table_name, row): + field_type, field_params, field_notes = super().get_field_type( + connection, table_name, row + ) + if field_type == "GeometryField": + # Getting a more specific field type and any additional parameters + # from the `get_geometry_type` routine for the spatial backend. + field_type, geo_params = connection.introspection.get_geometry_type( + table_name, row + ) + field_params.update(geo_params) + return field_type, field_params, field_notes diff --git a/venv/Lib/site-packages/django/contrib/gis/management/commands/ogrinspect.py b/venv/Lib/site-packages/django/contrib/gis/management/commands/ogrinspect.py new file mode 100644 index 000000000..2d2bd6317 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/management/commands/ogrinspect.py @@ -0,0 +1,164 @@ +import argparse + +from django.contrib.gis import gdal +from django.core.management.base import BaseCommand, CommandError +from django.utils.inspect import get_func_args + + +class LayerOptionAction(argparse.Action): + """ + Custom argparse action for the `ogrinspect` `layer_key` keyword option + which may be an integer or a string. + """ + + def __call__(self, parser, namespace, value, option_string=None): + try: + setattr(namespace, self.dest, int(value)) + except ValueError: + setattr(namespace, self.dest, value) + + +class ListOptionAction(argparse.Action): + """ + Custom argparse action for `ogrinspect` keywords that require + a string list. If the string is 'True'/'true' then the option + value will be a boolean instead. + """ + + def __call__(self, parser, namespace, value, option_string=None): + if value.lower() == "true": + setattr(namespace, self.dest, True) + else: + setattr(namespace, self.dest, value.split(",")) + + +class Command(BaseCommand): + help = ( + "Inspects the given OGR-compatible data source (e.g., a shapefile) and " + "outputs\na GeoDjango model with the given model name. For example:\n" + " ./manage.py ogrinspect zipcode.shp Zipcode" + ) + + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument("data_source", help="Path to the data source.") + parser.add_argument("model_name", help="Name of the model to create.") + parser.add_argument( + "--blank", + action=ListOptionAction, + default=False, + help="Use a comma separated list of OGR field names to add " + "the `blank=True` option to the field definition. Set to `true` " + "to apply to all applicable fields.", + ) + parser.add_argument( + "--decimal", + action=ListOptionAction, + default=False, + help="Use a comma separated list of OGR float fields to " + "generate `DecimalField` instead of the default " + "`FloatField`. Set to `true` to apply to all OGR float fields.", + ) + parser.add_argument( + "--geom-name", + default="geom", + help="Specifies the model name for the Geometry Field (defaults to `geom`)", + ) + parser.add_argument( + "--layer", + dest="layer_key", + action=LayerOptionAction, + default=0, + help="The key for specifying which layer in the OGR data " + "source to use. Defaults to 0 (the first layer). May be " + "an integer or a string identifier for the layer.", + ) + parser.add_argument( + "--multi-geom", + action="store_true", + help="Treat the geometry in the data source as a geometry collection.", + ) + parser.add_argument( + "--name-field", + help="Specifies a field name to return for the __str__() method.", + ) + parser.add_argument( + "--no-imports", + action="store_false", + dest="imports", + help="Do not include `from django.contrib.gis.db import models` statement.", + ) + parser.add_argument( + "--null", + action=ListOptionAction, + default=False, + help="Use a comma separated list of OGR field names to add " + "the `null=True` option to the field definition. Set to `true` " + "to apply to all applicable fields.", + ) + parser.add_argument( + "--srid", + help="The SRID to use for the Geometry Field. If it can be " + "determined, the SRID of the data source is used.", + ) + parser.add_argument( + "--mapping", + action="store_true", + help="Generate mapping dictionary for use with `LayerMapping`.", + ) + + def handle(self, *args, **options): + data_source, model_name = options.pop("data_source"), options.pop("model_name") + + # Getting the OGR DataSource from the string parameter. + try: + ds = gdal.DataSource(data_source) + except gdal.GDALException as msg: + raise CommandError(msg) + + # Returning the output of ogrinspect with the given arguments + # and options. + from django.contrib.gis.utils.ogrinspect import _ogrinspect, mapping + + # Filter options to params accepted by `_ogrinspect` + ogr_options = { + k: v + for k, v in options.items() + if k in get_func_args(_ogrinspect) and v is not None + } + output = [s for s in _ogrinspect(ds, model_name, **ogr_options)] + + if options["mapping"]: + # Constructing the keyword arguments for `mapping`, and + # calling it on the data source. + kwargs = { + "geom_name": options["geom_name"], + "layer_key": options["layer_key"], + "multi_geom": options["multi_geom"], + } + mapping_dict = mapping(ds, **kwargs) + # This extra legwork is so that the dictionary definition comes + # out in the same order as the fields in the model definition. + rev_mapping = {v: k for k, v in mapping_dict.items()} + output.extend( + [ + "", + "", + "# Auto-generated `LayerMapping` dictionary for %s model" + % model_name, + "%s_mapping = {" % model_name.lower(), + ] + ) + output.extend( + " '%s': '%s'," % (rev_mapping[ogr_fld], ogr_fld) + for ogr_fld in ds[options["layer_key"]].fields + ) + output.extend( + [ + " '%s': '%s'," + % (options["geom_name"], mapping_dict[options["geom_name"]]), + "}", + ] + ) + return "\n".join(output) diff --git a/venv/Lib/site-packages/django/contrib/gis/measure.py b/venv/Lib/site-packages/django/contrib/gis/measure.py new file mode 100644 index 000000000..640f0e006 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/measure.py @@ -0,0 +1,370 @@ +# Copyright (c) 2007, Robert Coup +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of Distance nor the names of its contributors may be used +# to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +""" +Distance and Area objects to allow for sensible and convenient calculation +and conversions. + +Authors: Robert Coup, Justin Bronn, Riccardo Di Virgilio + +Inspired by GeoPy (https://github.com/geopy/geopy) +and Geoff Biggs' PhD work on dimensioned units for robotics. +""" +from decimal import Decimal +from functools import total_ordering + +__all__ = ["A", "Area", "D", "Distance"] + +NUMERIC_TYPES = (int, float, Decimal) +AREA_PREFIX = "sq_" + + +def pretty_name(obj): + return obj.__name__ if obj.__class__ == type else obj.__class__.__name__ + + +@total_ordering +class MeasureBase: + STANDARD_UNIT = None + ALIAS = {} + UNITS = {} + LALIAS = {} + + def __init__(self, default_unit=None, **kwargs): + value, self._default_unit = self.default_units(kwargs) + setattr(self, self.STANDARD_UNIT, value) + if default_unit and isinstance(default_unit, str): + self._default_unit = default_unit + + def _get_standard(self): + return getattr(self, self.STANDARD_UNIT) + + def _set_standard(self, value): + setattr(self, self.STANDARD_UNIT, value) + + standard = property(_get_standard, _set_standard) + + def __getattr__(self, name): + if name in self.UNITS: + return self.standard / self.UNITS[name] + else: + raise AttributeError("Unknown unit type: %s" % name) + + def __repr__(self): + return "%s(%s=%s)" % ( + pretty_name(self), + self._default_unit, + getattr(self, self._default_unit), + ) + + def __str__(self): + return "%s %s" % (getattr(self, self._default_unit), self._default_unit) + + # **** Comparison methods **** + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.standard == other.standard + else: + return NotImplemented + + def __hash__(self): + return hash(self.standard) + + def __lt__(self, other): + if isinstance(other, self.__class__): + return self.standard < other.standard + else: + return NotImplemented + + # **** Operators methods **** + + def __add__(self, other): + if isinstance(other, self.__class__): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard + other.standard)}, + ) + else: + raise TypeError( + "%(class)s must be added with %(class)s" % {"class": pretty_name(self)} + ) + + def __iadd__(self, other): + if isinstance(other, self.__class__): + self.standard += other.standard + return self + else: + raise TypeError( + "%(class)s must be added with %(class)s" % {"class": pretty_name(self)} + ) + + def __sub__(self, other): + if isinstance(other, self.__class__): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard - other.standard)}, + ) + else: + raise TypeError( + "%(class)s must be subtracted from %(class)s" + % {"class": pretty_name(self)} + ) + + def __isub__(self, other): + if isinstance(other, self.__class__): + self.standard -= other.standard + return self + else: + raise TypeError( + "%(class)s must be subtracted from %(class)s" + % {"class": pretty_name(self)} + ) + + def __mul__(self, other): + if isinstance(other, NUMERIC_TYPES): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard * other)}, + ) + else: + raise TypeError( + "%(class)s must be multiplied with number" + % {"class": pretty_name(self)} + ) + + def __imul__(self, other): + if isinstance(other, NUMERIC_TYPES): + self.standard *= float(other) + return self + else: + raise TypeError( + "%(class)s must be multiplied with number" + % {"class": pretty_name(self)} + ) + + def __rmul__(self, other): + return self * other + + def __truediv__(self, other): + if isinstance(other, self.__class__): + return self.standard / other.standard + if isinstance(other, NUMERIC_TYPES): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard / other)}, + ) + else: + raise TypeError( + "%(class)s must be divided with number or %(class)s" + % {"class": pretty_name(self)} + ) + + def __itruediv__(self, other): + if isinstance(other, NUMERIC_TYPES): + self.standard /= float(other) + return self + else: + raise TypeError( + "%(class)s must be divided with number" % {"class": pretty_name(self)} + ) + + def __bool__(self): + return bool(self.standard) + + def default_units(self, kwargs): + """ + Return the unit value and the default units specified + from the given keyword arguments dictionary. + """ + val = 0.0 + default_unit = self.STANDARD_UNIT + for unit, value in kwargs.items(): + if not isinstance(value, float): + value = float(value) + if unit in self.UNITS: + val += self.UNITS[unit] * value + default_unit = unit + elif unit in self.ALIAS: + u = self.ALIAS[unit] + val += self.UNITS[u] * value + default_unit = u + else: + lower = unit.lower() + if lower in self.UNITS: + val += self.UNITS[lower] * value + default_unit = lower + elif lower in self.LALIAS: + u = self.LALIAS[lower] + val += self.UNITS[u] * value + default_unit = u + else: + raise AttributeError("Unknown unit type: %s" % unit) + return val, default_unit + + @classmethod + def unit_attname(cls, unit_str): + """ + Retrieve the unit attribute name for the given unit string. + For example, if the given unit string is 'metre', return 'm'. + Raise an exception if an attribute cannot be found. + """ + lower = unit_str.lower() + if unit_str in cls.UNITS: + return unit_str + elif lower in cls.UNITS: + return lower + elif lower in cls.LALIAS: + return cls.LALIAS[lower] + else: + raise Exception( + 'Could not find a unit keyword associated with "%s"' % unit_str + ) + + +class Distance(MeasureBase): + STANDARD_UNIT = "m" + UNITS = { + "chain": 20.1168, + "chain_benoit": 20.116782, + "chain_sears": 20.1167645, + "british_chain_benoit": 20.1167824944, + "british_chain_sears": 20.1167651216, + "british_chain_sears_truncated": 20.116756, + "cm": 0.01, + "british_ft": 0.304799471539, + "british_yd": 0.914398414616, + "clarke_ft": 0.3047972654, + "clarke_link": 0.201166195164, + "fathom": 1.8288, + "ft": 0.3048, + "furlong": 201.168, + "german_m": 1.0000135965, + "gold_coast_ft": 0.304799710181508, + "indian_yd": 0.914398530744, + "inch": 0.0254, + "km": 1000.0, + "link": 0.201168, + "link_benoit": 0.20116782, + "link_sears": 0.20116765, + "m": 1.0, + "mi": 1609.344, + "mm": 0.001, + "nm": 1852.0, + "nm_uk": 1853.184, + "rod": 5.0292, + "sears_yd": 0.91439841, + "survey_ft": 0.304800609601, + "um": 0.000001, + "yd": 0.9144, + } + + # Unit aliases for `UNIT` terms encountered in Spatial Reference WKT. + ALIAS = { + "centimeter": "cm", + "foot": "ft", + "inches": "inch", + "kilometer": "km", + "kilometre": "km", + "meter": "m", + "metre": "m", + "micrometer": "um", + "micrometre": "um", + "millimeter": "mm", + "millimetre": "mm", + "mile": "mi", + "yard": "yd", + "British chain (Benoit 1895 B)": "british_chain_benoit", + "British chain (Sears 1922)": "british_chain_sears", + "British chain (Sears 1922 truncated)": "british_chain_sears_truncated", + "British foot (Sears 1922)": "british_ft", + "British foot": "british_ft", + "British yard (Sears 1922)": "british_yd", + "British yard": "british_yd", + "Clarke's Foot": "clarke_ft", + "Clarke's link": "clarke_link", + "Chain (Benoit)": "chain_benoit", + "Chain (Sears)": "chain_sears", + "Foot (International)": "ft", + "Furrow Long": "furlong", + "German legal metre": "german_m", + "Gold Coast foot": "gold_coast_ft", + "Indian yard": "indian_yd", + "Link (Benoit)": "link_benoit", + "Link (Sears)": "link_sears", + "Nautical Mile": "nm", + "Nautical Mile (UK)": "nm_uk", + "US survey foot": "survey_ft", + "U.S. Foot": "survey_ft", + "Yard (Indian)": "indian_yd", + "Yard (Sears)": "sears_yd", + } + LALIAS = {k.lower(): v for k, v in ALIAS.items()} + + def __mul__(self, other): + if isinstance(other, self.__class__): + return Area( + default_unit=AREA_PREFIX + self._default_unit, + **{AREA_PREFIX + self.STANDARD_UNIT: (self.standard * other.standard)}, + ) + elif isinstance(other, NUMERIC_TYPES): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard * other)}, + ) + else: + raise TypeError( + "%(distance)s must be multiplied with number or %(distance)s" + % { + "distance": pretty_name(self.__class__), + } + ) + + +class Area(MeasureBase): + STANDARD_UNIT = AREA_PREFIX + Distance.STANDARD_UNIT + # Getting the square units values and the alias dictionary. + UNITS = {"%s%s" % (AREA_PREFIX, k): v**2 for k, v in Distance.UNITS.items()} + ALIAS = {k: "%s%s" % (AREA_PREFIX, v) for k, v in Distance.ALIAS.items()} + LALIAS = {k.lower(): v for k, v in ALIAS.items()} + + def __truediv__(self, other): + if isinstance(other, NUMERIC_TYPES): + return self.__class__( + default_unit=self._default_unit, + **{self.STANDARD_UNIT: (self.standard / other)}, + ) + else: + raise TypeError( + "%(class)s must be divided by a number" % {"class": pretty_name(self)} + ) + + +# Shortcuts +D = Distance +A = Area diff --git a/venv/Lib/site-packages/django/contrib/gis/ptr.py b/venv/Lib/site-packages/django/contrib/gis/ptr.py new file mode 100644 index 000000000..675470161 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/ptr.py @@ -0,0 +1,41 @@ +from ctypes import c_void_p + + +class CPointerBase: + """ + Base class for objects that have a pointer access property + that controls access to the underlying C pointer. + """ + + _ptr = None # Initially the pointer is NULL. + ptr_type = c_void_p + destructor = None + null_ptr_exception_class = AttributeError + + @property + def ptr(self): + # Raise an exception if the pointer isn't valid so that NULL pointers + # aren't passed to routines -- that's very bad. + if self._ptr: + return self._ptr + raise self.null_ptr_exception_class( + "NULL %s pointer encountered." % self.__class__.__name__ + ) + + @ptr.setter + def ptr(self, ptr): + # Only allow the pointer to be set with pointers of the compatible + # type or None (NULL). + if not (ptr is None or isinstance(ptr, self.ptr_type)): + raise TypeError("Incompatible pointer type: %s." % type(ptr)) + self._ptr = ptr + + def __del__(self): + """ + Free the memory used by the C++ object. + """ + if self.destructor and self._ptr: + try: + self.destructor(self.ptr) + except (AttributeError, ImportError, TypeError): + pass # Some part might already have been garbage collected diff --git a/venv/Lib/site-packages/django/contrib/gis/serializers/__init__.py b/venv/Lib/site-packages/django/contrib/gis/serializers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/gis/serializers/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/serializers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c264d42643da49e9938ce79a62b4319331210b6 GIT binary patch literal 204 zcmd1j<>g`kf)81esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UdS@Y-=q2oOF*shbw5rr=blCxj}b1gI!-5ox7rYdYF^CT1Ob*UXGV z<2siHiF5Bggx>fc`j@QKQ>9A1_1p^5_h$VSpkvMRe7t%4=J&oPU0f^?Xn%kI`_}RT zA%EaxzPT{D1zq0*B8Z?}(xV~mv5--mv#!%~L)VU-uGjO!0ws5eaE14b2u~IcoY054 zFA6X(9I!AD!6vB{{{nfW#2DHSZm zL#Z}WsT--e{X?uxjb^3UP74LjH)lN24`3ikNCgR*prP}eY*WF6^DGG6T+z_W6%2j5 z7l8Hl}}LZLKZSj!u($s@iMzSc}f-i(^C^)z)1gh8&PX`hrk0A{}<<2)Mut zHX_^|&*2Jo?!nv_WI)xYFmmnaI*xFCm#WX&D8c`g;@ZzZIdE@+^=7^1HnIxn*ONx= z@$Fc4MdoT1i}=qaFjFD(^q?_1Za&KNjqI@rHN7T)>=E(Yany%GuDFk0#H}4R##g}!`_T3iFy*(`zi$^ zm{{i9b{S;cez1A>#$~a(zYjdyxj^LjuIAa>W-f0To%z}*8TB&nsRHP%k<=n+txitK zGK{iQ+C<9m349QZX@Xek3Xp*M@MF{kxPqhMr8%J9aqKO)(77#K;8p09;NXJJL&F~J z*O)pDyXp**cPV&MCgQky?*pr5K$ht6;+#rvF}9Ft(omUc#9@BRBW^TS2y6(^)^Q-7 zi27heJ8s9@Adi;znej)ENDi2)j##Gvd`@oLC(DzV0xO3_j3Ku?&=o-;0 zgOy6O%t{n3#$LOxTsAyA2hF@H$525;uv;_z1_Obf44M8HwvTu~78($}Bpe*?0x~dS z!aYwQ(;!N$;~ct(VZJJyn`mfHeT%f?1NC*57HK8Mn0`wROJfW$@{HDA34=d3%2Cv&W}6$C-9evVci36G;hbY)%|)FnLhhBwz>Z3DW- zGFyfuy?oq%=LOUjz+@c5g!8P#c`p?M5YDqQ=T8Pvcf3>JT%;||ZBkU2($rZb7&z)< zB=}LNad~xW$!-^zXEw1K+E7ECuxm_X0dZ;B4Hkl8*$GOg&)J7T3pS25^om>1ZFJ6F zBZ9#T!x0YP=Vs*%si#HjSnfpIpoFhb0{WYQusonYQ7k7{#$Hv8bv3F^B-p%tEls+6 z(W!G literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/serializers/geojson.py b/venv/Lib/site-packages/django/contrib/gis/serializers/geojson.py new file mode 100644 index 000000000..cdb187ede --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/serializers/geojson.py @@ -0,0 +1,77 @@ +from django.contrib.gis.gdal import CoordTransform, SpatialReference +from django.core.serializers.base import SerializerDoesNotExist +from django.core.serializers.json import Serializer as JSONSerializer + + +class Serializer(JSONSerializer): + """ + Convert a queryset to GeoJSON, http://geojson.org/ + """ + + def _init_options(self): + super()._init_options() + self.geometry_field = self.json_kwargs.pop("geometry_field", None) + self.srid = self.json_kwargs.pop("srid", 4326) + if ( + self.selected_fields is not None + and self.geometry_field is not None + and self.geometry_field not in self.selected_fields + ): + self.selected_fields = [*self.selected_fields, self.geometry_field] + + def start_serialization(self): + self._init_options() + self._cts = {} # cache of CoordTransform's + self.stream.write( + '{"type": "FeatureCollection", ' + '"crs": {"type": "name", "properties": {"name": "EPSG:%d"}},' + ' "features": [' % self.srid + ) + + def end_serialization(self): + self.stream.write("]}") + + def start_object(self, obj): + super().start_object(obj) + self._geometry = None + if self.geometry_field is None: + # Find the first declared geometry field + for field in obj._meta.fields: + if hasattr(field, "geom_type"): + self.geometry_field = field.name + break + + def get_dump_object(self, obj): + data = { + "type": "Feature", + "properties": self._current, + } + if ( + self.selected_fields is None or "pk" in self.selected_fields + ) and "pk" not in data["properties"]: + data["properties"]["pk"] = obj._meta.pk.value_to_string(obj) + if self._geometry: + if self._geometry.srid != self.srid: + # If needed, transform the geometry in the srid of the global + # geojson srid. + if self._geometry.srid not in self._cts: + srs = SpatialReference(self.srid) + self._cts[self._geometry.srid] = CoordTransform( + self._geometry.srs, srs + ) + self._geometry.transform(self._cts[self._geometry.srid]) + data["geometry"] = eval(self._geometry.geojson) + else: + data["geometry"] = None + return data + + def handle_field(self, obj, field): + if field.name == self.geometry_field: + self._geometry = field.value_from_object(obj) + else: + super().handle_field(obj, field) + + +class Deserializer: + def __init__(self, *args, **kwargs): + raise SerializerDoesNotExist("geojson is a serialization-only serializer") diff --git a/venv/Lib/site-packages/django/contrib/gis/shortcuts.py b/venv/Lib/site-packages/django/contrib/gis/shortcuts.py new file mode 100644 index 000000000..33ff2acb0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/shortcuts.py @@ -0,0 +1,40 @@ +import zipfile +from io import BytesIO + +from django.conf import settings +from django.http import HttpResponse +from django.template import loader + +# NumPy supported? +try: + import numpy +except ImportError: + numpy = False + + +def compress_kml(kml): + "Return compressed KMZ from the given KML string." + kmz = BytesIO() + with zipfile.ZipFile(kmz, "a", zipfile.ZIP_DEFLATED) as zf: + zf.writestr("doc.kml", kml.encode(settings.DEFAULT_CHARSET)) + kmz.seek(0) + return kmz.read() + + +def render_to_kml(*args, **kwargs): + "Render the response as KML (using the correct MIME type)." + return HttpResponse( + loader.render_to_string(*args, **kwargs), + content_type="application/vnd.google-earth.kml+xml", + ) + + +def render_to_kmz(*args, **kwargs): + """ + Compress the KML content and return as KMZ (using the correct + MIME type). + """ + return HttpResponse( + compress_kml(loader.render_to_string(*args, **kwargs)), + content_type="application/vnd.google-earth.kmz", + ) diff --git a/venv/Lib/site-packages/django/contrib/gis/sitemaps/__init__.py b/venv/Lib/site-packages/django/contrib/gis/sitemaps/__init__.py new file mode 100644 index 000000000..3654bfc80 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/sitemaps/__init__.py @@ -0,0 +1,4 @@ +# Geo-enabled Sitemap classes. +from django.contrib.gis.sitemaps.kml import KMLSitemap, KMZSitemap + +__all__ = ["KMLSitemap", "KMZSitemap"] diff --git a/venv/Lib/site-packages/django/contrib/gis/sitemaps/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/sitemaps/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b80ea2955e9d3a9ee37a3e16ba266cecd3c7351 GIT binary patch literal 317 zcmYjL%SyyB6iw0&%HV(>Ah_;g+P#PfiVBV*4sJ>?q)jN9$)n_^1O9@4;x83kxpL>) zl?gMV2kyD&z+d=}}x$m?UV;um6>>9T z4(1z$!3K2s00=V}NsJNk2|?aW%#r0=nzs@NbPjFRT@B=O+k8t;VvtY0RT_WLzPnhAGjQAEaeag-;%IwF)w=2#38e3%z=E9dc zTVl<}hVQUtwgT@4vp~D^rTfG7)`&s-1Mx85jD<58G+yIHp9smvRTjO7vcV5ui7 zWo28h^{u^8(uqvaW!jKOC2vBPt3V3lsZo$;q%Zm&7};xx3VZ7@l?s~W~{!;d)+&+ zkZSEmkqvpIx(7Tx=x)WmE~>mX4x_zrz-5;W!*r0XM_H;w+*=>Sa(!ykIw;c~AC^uK zfCp3%oI@MXpjB(~#;K#))AFrb*-ToT>Vr;{X}hzD@B3bwohm6fBJ?0;oL$8oplp($5|Bz2OwrKJ zF`{yEeLI)RlVcvm{li78J_eJ51rvhG1g*a2TkS~;vtXw}tT#eoJq~j8ab6})MYdZP z1Y*Z`2V4b}I;9)SIF%|)BQ6jyCGCZh`;BeX_6D$}9YA#m%bGq^3RJqRfo42qeq*Mg z?`nZssgk0aB~4pXqHNqd99L}17E36!e&SevX+8&Q)z{M2 z=j+6)$TI8^4Imex%Qg_|I0T;+(j+dSq-NHDnlI=p^H=lbN~1|kc<8GpbxcYo@60FA z|C0ZhfW!!E^R(4~!G06E`~-+HhEPNbz;$6U@`N7If z6f?Bk+l{3MKHbfj2V4f|6ER~N=2Ik#Y%JnXaqq!^XF)#`qfkBYLWLzFS9~T5_K%Y= z;>^oZkB8B&cmM8|#}kfq=oD)$tE6M7Hc-T%_LL65Q)N+>lmLaP_?9Km+R{OE6`b+520dm21AQs^3`C>JdAEAe*4SDR^x#(qZ zA=GApQd&fpU3ei*&Ky|Ucmc@kFrzDDjZ9YO0;?w%$|9z~EQ}w)K*5y@r;#@yl+3(@ z)Y6n*GMN2`#cEGX2w}Z5`Jk%R?UP#FhFaa8*6Q{_%pc13hf<&!;$0xecoewa);V0- zIzvi#E_>mI-Fp~{0o*SFb*fx$R{3CMz2RA7o#~Bq16IowASM7FfeuiAQG2=I=;_+Z ziI&!>(`mVQpJ0XtLFooq2%tCu-wcBNJWNhz>OsJ=Cmu!mQWUk*jK-|JIo$ xQvm4ff!~-)B>&$H0 zSnHRD2Y4vIA(43LUs{PLBqZK=<|UjNyGf7`60@4inK^UL%sJmTn>Cvrg7WA0zYadA zBlMdR&K47d&!LJJ&`?Bij1nATtj0!cBxY#pu^C&59omT#I$E~kTH=OoQV;7|wqq~x zLtl@bxREr&X3`27AldZ@7jW7D^TMyPBRsJwbQ#O=QmMYh^`%>mN-@m!NIds&i z7NrTj3-u0EaTOypMl)yXN_2=zTpCBlto98`mnQ9OD>h>0jB0lJaf|9>Rei@%_nEIs23q>mF6mv=Sq{>2S$W{!9U}f2a|CsVpu2qgPR0?1|nc?{$Z3&znNO9M!K5R(Cm-wTqAs*a>I z7%2b*DM?t@TNq&>G@R>o^|t9}-)6;JTNHU7?}O$Z zi6eUISNj9kMa_nNpmz3?ENZvY1xn+x-=aAgAirnPILfAhwNx1!(M z2!*yDPglp0ScBEIJSIby5WXwAAcl^X#r7-IxyTK`R9GJ~+1D4Z{H-k8E%LjZXPo=6 zSlNB>NGh$PBT{*hh*BX*I%HhYnJaK|Mf=JfF(M1jM7X>|L|-$fKPplU@vz;eY($C} zoRO4_8L#XDOpQaAq-iE0Iotv(;i}quLbsFs+*U43630~yPE4faTydjvAb-F|UIT$E z=5(4>jkBi(6SA^(Vk>)oKTltwuaa81!z{_+tb(t=p3pmuQ)TbQM2N~>T=Wdmd`i-e_8^zKFSelh56MqJ42U-N7NobLhf z_Ig{mxx(xS#o2e@WVH#E*4GDv+2^a}qsy);!j2EPJ6bT)VcMje}9R1=p} zb6GWSszx2;H0=B>5ETukpTIyUK(AQ*ZRk4ZLw_F4u6o<&SiiEES;V&s@$J$*%3^##S diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_line_on.svg b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_line_on.svg new file mode 100644 index 000000000..5eb0d6d17 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_line_on.svg @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_off.svg b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_off.svg new file mode 100644 index 000000000..5a2903420 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_off.svg @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg new file mode 100644 index 000000000..f006524a1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg new file mode 100644 index 000000000..b02dd3573 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg new file mode 100644 index 000000000..303a02a29 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/contrib/gis/static/gis/js/OLMapWidget.js b/venv/Lib/site-packages/django/contrib/gis/static/gis/js/OLMapWidget.js new file mode 100644 index 000000000..29725636a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/static/gis/js/OLMapWidget.js @@ -0,0 +1,228 @@ +/* global ol */ +'use strict'; +function GeometryTypeControl(opt_options) { + // Map control to switch type when geometry type is unknown + const options = opt_options || {}; + + const element = document.createElement('div'); + element.className = 'switch-type type-' + options.type + ' ol-control ol-unselectable'; + if (options.active) { + element.classList.add("type-active"); + } + + const self = this; + const switchType = function(e) { + e.preventDefault(); + if (options.widget.currentGeometryType !== self) { + options.widget.map.removeInteraction(options.widget.interactions.draw); + options.widget.interactions.draw = new ol.interaction.Draw({ + features: options.widget.featureCollection, + type: options.type + }); + options.widget.map.addInteraction(options.widget.interactions.draw); + options.widget.currentGeometryType.element.classList.remove('type-active'); + options.widget.currentGeometryType = self; + element.classList.add("type-active"); + } + }; + + element.addEventListener('click', switchType, false); + element.addEventListener('touchstart', switchType, false); + + ol.control.Control.call(this, { + element: element + }); +}; +ol.inherits(GeometryTypeControl, ol.control.Control); + +// TODO: allow deleting individual features (#8972) +{ + const jsonFormat = new ol.format.GeoJSON(); + + function MapWidget(options) { + this.map = null; + this.interactions = {draw: null, modify: null}; + this.typeChoices = false; + this.ready = false; + + // Default options + this.options = { + default_lat: 0, + default_lon: 0, + default_zoom: 12, + is_collection: options.geom_name.includes('Multi') || options.geom_name.includes('Collection') + }; + + // Altering using user-provided options + for (const property in options) { + if (options.hasOwnProperty(property)) { + this.options[property] = options[property]; + } + } + if (!options.base_layer) { + this.options.base_layer = new ol.layer.Tile({source: new ol.source.OSM()}); + } + + this.map = this.createMap(); + this.featureCollection = new ol.Collection(); + this.featureOverlay = new ol.layer.Vector({ + map: this.map, + source: new ol.source.Vector({ + features: this.featureCollection, + useSpatialIndex: false // improve performance + }), + updateWhileAnimating: true, // optional, for instant visual feedback + updateWhileInteracting: true // optional, for instant visual feedback + }); + + // Populate and set handlers for the feature container + const self = this; + this.featureCollection.on('add', function(event) { + const feature = event.element; + feature.on('change', function() { + self.serializeFeatures(); + }); + if (self.ready) { + self.serializeFeatures(); + if (!self.options.is_collection) { + self.disableDrawing(); // Only allow one feature at a time + } + } + }); + + const initial_value = document.getElementById(this.options.id).value; + if (initial_value) { + const features = jsonFormat.readFeatures('{"type": "Feature", "geometry": ' + initial_value + '}'); + const extent = ol.extent.createEmpty(); + features.forEach(function(feature) { + this.featureOverlay.getSource().addFeature(feature); + ol.extent.extend(extent, feature.getGeometry().getExtent()); + }, this); + // Center/zoom the map + this.map.getView().fit(extent, {maxZoom: this.options.default_zoom}); + } else { + this.map.getView().setCenter(this.defaultCenter()); + } + this.createInteractions(); + if (initial_value && !this.options.is_collection) { + this.disableDrawing(); + } + this.ready = true; + } + + MapWidget.prototype.createMap = function() { + const map = new ol.Map({ + target: this.options.map_id, + layers: [this.options.base_layer], + view: new ol.View({ + zoom: this.options.default_zoom + }) + }); + return map; + }; + + MapWidget.prototype.createInteractions = function() { + // Initialize the modify interaction + this.interactions.modify = new ol.interaction.Modify({ + features: this.featureCollection, + deleteCondition: function(event) { + return ol.events.condition.shiftKeyOnly(event) && + ol.events.condition.singleClick(event); + } + }); + + // Initialize the draw interaction + let geomType = this.options.geom_name; + if (geomType === "Geometry" || geomType === "GeometryCollection") { + // Default to Point, but create icons to switch type + geomType = "Point"; + this.currentGeometryType = new GeometryTypeControl({widget: this, type: "Point", active: true}); + this.map.addControl(this.currentGeometryType); + this.map.addControl(new GeometryTypeControl({widget: this, type: "LineString", active: false})); + this.map.addControl(new GeometryTypeControl({widget: this, type: "Polygon", active: false})); + this.typeChoices = true; + } + this.interactions.draw = new ol.interaction.Draw({ + features: this.featureCollection, + type: geomType + }); + + this.map.addInteraction(this.interactions.draw); + this.map.addInteraction(this.interactions.modify); + }; + + MapWidget.prototype.defaultCenter = function() { + const center = [this.options.default_lon, this.options.default_lat]; + if (this.options.map_srid) { + return ol.proj.transform(center, 'EPSG:4326', this.map.getView().getProjection()); + } + return center; + }; + + MapWidget.prototype.enableDrawing = function() { + this.interactions.draw.setActive(true); + if (this.typeChoices) { + // Show geometry type icons + const divs = document.getElementsByClassName("switch-type"); + for (let i = 0; i !== divs.length; i++) { + divs[i].style.visibility = "visible"; + } + } + }; + + MapWidget.prototype.disableDrawing = function() { + if (this.interactions.draw) { + this.interactions.draw.setActive(false); + if (this.typeChoices) { + // Hide geometry type icons + const divs = document.getElementsByClassName("switch-type"); + for (let i = 0; i !== divs.length; i++) { + divs[i].style.visibility = "hidden"; + } + } + } + }; + + MapWidget.prototype.clearFeatures = function() { + this.featureCollection.clear(); + // Empty textarea widget + document.getElementById(this.options.id).value = ''; + this.enableDrawing(); + }; + + MapWidget.prototype.serializeFeatures = function() { + // Three use cases: GeometryCollection, multigeometries, and single geometry + let geometry = null; + const features = this.featureOverlay.getSource().getFeatures(); + if (this.options.is_collection) { + if (this.options.geom_name === "GeometryCollection") { + const geometries = []; + for (let i = 0; i < features.length; i++) { + geometries.push(features[i].getGeometry()); + } + geometry = new ol.geom.GeometryCollection(geometries); + } else { + geometry = features[0].getGeometry().clone(); + for (let j = 1; j < features.length; j++) { + switch (geometry.getType()) { + case "MultiPoint": + geometry.appendPoint(features[j].getGeometry().getPoint(0)); + break; + case "MultiLineString": + geometry.appendLineString(features[j].getGeometry().getLineString(0)); + break; + case "MultiPolygon": + geometry.appendPolygon(features[j].getGeometry().getPolygon(0)); + } + } + } + } else { + if (features[0]) { + geometry = features[0].getGeometry(); + } + } + document.getElementById(this.options.id).value = jsonFormat.writeGeometry(geometry); + }; + + window.MapWidget = MapWidget; +} diff --git a/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html b/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html new file mode 100644 index 000000000..6943a5bea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html @@ -0,0 +1,31 @@ +{% block extrastyle %} +{% load i18n static %}{% get_current_language_bidi as LANGUAGE_BIDI %} + +{% endblock %} + + +

      +{% if editable %} +{% translate "Delete all Features" %} +{% endif %} +{% if display_wkt %}

      {% translate "WKT debugging window:" %}

      {% endif %} + + + diff --git a/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.js b/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.js new file mode 100644 index 000000000..dd00bfd70 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/templates/gis/admin/openlayers.js @@ -0,0 +1,176 @@ +{% load l10n %} +OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857", OpenLayers.Layer.SphericalMercator.projectForward); +{% block vars %}var {{ module }} = {}; +{{ module }}.map = null; {{ module }}.controls = null; {{ module }}.panel = null; {{ module }}.re = new RegExp("^SRID=\\d+;(.+)", "i"); {{ module }}.layers = {}; +{{ module }}.modifiable = {{ modifiable|yesno:"true,false" }}; +{{ module }}.wkt_f = new OpenLayers.Format.WKT(); +{{ module }}.is_collection = {{ is_collection|yesno:"true,false" }}; +{{ module }}.collection_type = '{{ collection_type }}'; +{{ module }}.is_generic = {{ is_generic|yesno:"true,false" }}; +{{ module }}.is_linestring = {{ is_linestring|yesno:"true,false" }}; +{{ module }}.is_polygon = {{ is_polygon|yesno:"true,false" }}; +{{ module }}.is_point = {{ is_point|yesno:"true,false" }}; +{% endblock %} +{{ module }}.get_ewkt = function(feat){ + return 'SRID={{ srid|unlocalize }};' + {{ module }}.wkt_f.write(feat); +}; +{{ module }}.read_wkt = function(wkt){ + // OpenLayers cannot handle EWKT -- we make sure to strip it out. + // EWKT is only exposed to OL if there's a validation error in the admin. + var match = {{ module }}.re.exec(wkt); + if (match){wkt = match[1];} + return {{ module }}.wkt_f.read(wkt); +}; +{{ module }}.write_wkt = function(feat){ + if ({{ module }}.is_collection){ {{ module }}.num_geom = feat.geometry.components.length;} + else { {{ module }}.num_geom = 1;} + document.getElementById('{{ id }}').value = {{ module }}.get_ewkt(feat); +}; +{{ module }}.add_wkt = function(event){ + // This function will sync the contents of the `vector` layer with the + // WKT in the text field. + if ({{ module }}.is_collection){ + var feat = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.{{ geom_type }}()); + for (var i = 0; i < {{ module }}.layers.vector.features.length; i++){ + feat.geometry.addComponents([{{ module }}.layers.vector.features[i].geometry]); + } + {{ module }}.write_wkt(feat); + } else { + // Make sure to remove any previously added features. + if ({{ module }}.layers.vector.features.length > 1){ + old_feats = [{{ module }}.layers.vector.features[0]]; + {{ module }}.layers.vector.removeFeatures(old_feats); + {{ module }}.layers.vector.destroyFeatures(old_feats); + } + {{ module }}.write_wkt(event.feature); + } +}; +{{ module }}.modify_wkt = function(event){ + if ({{ module }}.is_collection){ + if ({{ module }}.is_point){ + {{ module }}.add_wkt(event); + return; + } else { + // When modifying the selected components are added to the + // vector layer so we only increment to the `num_geom` value. + var feat = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.{{ geom_type }}()); + for (var i = 0; i < {{ module }}.num_geom; i++){ + feat.geometry.addComponents([{{ module }}.layers.vector.features[i].geometry]); + } + {{ module }}.write_wkt(feat); + } + } else { + {{ module }}.write_wkt(event.feature); + } +}; +// Function to clear vector features and purge wkt from div +{{ module }}.deleteFeatures = function(){ + {{ module }}.layers.vector.removeFeatures({{ module }}.layers.vector.features); + {{ module }}.layers.vector.destroyFeatures(); +}; +{{ module }}.clearFeatures = function (){ + {{ module }}.deleteFeatures(); + document.getElementById('{{ id }}').value = ''; + {% localize off %} + {{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }}); + {% endlocalize %} +}; +// Add Select control +{{ module }}.addSelectControl = function(){ + var select = new OpenLayers.Control.SelectFeature({{ module }}.layers.vector, {'toggle' : true, 'clickout' : true}); + {{ module }}.map.addControl(select); + select.activate(); +}; +{{ module }}.enableDrawing = function(){ + {{ module }}.map.getControlsByClass('OpenLayers.Control.DrawFeature')[0].activate(); +}; +{{ module }}.enableEditing = function(){ + {{ module }}.map.getControlsByClass('OpenLayers.Control.ModifyFeature')[0].activate(); +}; +// Create an array of controls based on geometry type +{{ module }}.getControls = function(lyr){ + {{ module }}.panel = new OpenLayers.Control.Panel({'displayClass': 'olControlEditingToolbar'}); + {{ module }}.controls = [new OpenLayers.Control.Navigation()]; + if (!{{ module }}.modifiable && lyr.features.length) return; + if ({{ module }}.is_linestring || {{ module }}.is_generic){ + {{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'})); + } + if ({{ module }}.is_polygon || {{ module }}.is_generic){ + {{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'})); + } + if ({{ module }}.is_point || {{ module }}.is_generic){ + {{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'})); + } + if ({{ module }}.modifiable){ + {{ module }}.controls.push(new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'})); + } +}; +{{ module }}.init = function(){ + {% block map_options %}// The options hash, w/ zoom, resolution, and projection settings. + var options = { +{% autoescape off %}{% for item in map_options.items %} '{{ item.0 }}' : {{ item.1 }}{% if not forloop.last %},{% endif %} +{% endfor %}{% endautoescape %} };{% endblock %} + // The admin map for this geometry field. + {% block map_creation %} + {{ module }}.map = new OpenLayers.Map('{{ id }}_map', options); + // Base Layer + {{ module }}.layers.base = {% block base_layer %}new OpenLayers.Layer.WMS("{{ wms_name }}", "{{ wms_url }}", {layers: '{{ wms_layer }}'{{ wms_options|safe }}});{% endblock %} + {{ module }}.map.addLayer({{ module }}.layers.base); + {% endblock %} + {% block extra_layers %}{% endblock %} + {% if is_linestring %}OpenLayers.Feature.Vector.style["default"]["strokeWidth"] = 3; // Default too thin for linestrings. {% endif %} + {{ module }}.layers.vector = new OpenLayers.Layer.Vector(" {{ field_name }}"); + {{ module }}.map.addLayer({{ module }}.layers.vector); + // Read WKT from the text field. + var wkt = document.getElementById('{{ id }}').value; + if (wkt){ + // After reading into geometry, immediately write back to + // WKT + + diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/__init__.py b/venv/Lib/site-packages/django/contrib/gis/utils/__init__.py new file mode 100644 index 000000000..26334fb6a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/utils/__init__.py @@ -0,0 +1,17 @@ +""" + This module contains useful utilities for GeoDjango. +""" +from django.contrib.gis.utils.ogrinfo import ogrinfo # NOQA +from django.contrib.gis.utils.ogrinspect import mapping, ogrinspect # NOQA +from django.contrib.gis.utils.srs import add_srs_entry # NOQA +from django.core.exceptions import ImproperlyConfigured + +try: + # LayerMapping requires DJANGO_SETTINGS_MODULE to be set, + # and ImproperlyConfigured is raised if that's not the case. + from django.contrib.gis.utils.layermapping import ( # NOQA + LayerMapError, + LayerMapping, + ) +except ImproperlyConfigured: + pass diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9999318ae96587cb404d4f18a0996e038dbf7c2f GIT binary patch literal 685 zcmaKq&x_PB6vvacGo9&lz{9d94+Zfshwb1=5D{T_U4>P|ABZJbI!&f#ZJP34y4wAZ z{Fe%zJbCl%MU&3Bh@c65i)^9dET-fQ;o(aX5HauX zP~!UAvGS3uW>@iPcDk4(rNU~ zB9avyLS2DuwtD3ap(@%|Hq{V~HEcy`tYTSko+Dr`8Uwv896V7i=vF}8AM0i-s}2OW z>zC(6FW_m>o&snX;@_#;^Vw=Sgn7<&nde!;cMuL1&d^VYWH7zb0BmFx|{w?z&(dC{E)}@ z*lQGk>_vxIuoGQ&${L33Oq$2thCPyi=IA--3+pPo6wM_&mm7xCh@-YBKNOWfwj)^Y veOX&y)}t@$JeQ3$d7ifYFuT9I>j%`Hjt4dbB=&F6*mlo5^y6Sky`R4TGp@|Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/layermapping.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/layermapping.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56da8ac87105d2b2d4d2b1df5492fc4b8a68ef91 GIT binary patch literal 15965 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 MILSF<^nbzl|BlJah5!Hn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/ogrinfo.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/ogrinfo.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7a2422f29b9c050069b15b08724bf10b3168ba9 GIT binary patch literal 1714 zcmZ`)&2QsG6!-WePMnWTm!<4pV6-UG29flLw7`m0(=CUpAPPdV0?s5eNu70U*E23{ zH0D6y%8d&r5L~$N_l(4eQ*Rvh!~u9?H{D(s$uIA{dEf76Cuz4m1I}Mx{xSX4HH<&C zaQj#wd;kxB3kWrQgCc51Xl42)(!3Q}E8Dk$uTzKCzD2%6-4mnVSpV*QdKz-PN@yN2 z9LBRKr;KBstQgKk7=_{z&+~XD!X)N+o@8LdQwDOpz~YqQh+HPQ@RB(u_;B>}2vZ^m z_~+S-;lZG^*#;nGI7mlg5+#cy=U61A1%yZ;N}53(Ge+_BvQ$r!MHa^MWU{Sg=v_gF zMjt6}1bI%%G$1t(4?YU^kDi{K9GqO~S; zDva1GbtdS#u`Mi$Hs~89Y<)X2zW8Bm7G_}yhl2gGwhLNhfMiMYhPQ<)tz~`Lcwj8O z8?7Un(%PUKxdt|^N&>FE>=ZV{aitBbX?$lsFo0`NPjmB^v72%m;g0C)h|8Ug`Mps% zv?ZNgqo_fp7HvzU{mP2pg^Jyx4zWAZy~(!&y$p(mtV>LgEBgiJ(JE*3BfV3!W0Q7^wrt9_gzDb`>)4h}x}!Pa$flmh+1F=hXZL9vfOU7h z@i3gvN%XwjBsnKxM5cf-01V4Gz^K&oJWZnzHa^j~2`b!7-o`ZKDOdu^$~YQn^N>Zf z!eAw4T;NHZuYx%vBF`9~;4L>Sz1B}ONVZ^1Nk&#ounezq@SHM0EEj;U1qN6X{1Q+& znJxk1!*y2|we^3Ddwkt~A5PVS7P}bpQ<5?)E>l(-facAcGPW8$3OGFDrRLR2WEX

      u_~VqMF+iF>^s*MWQdc-_(EJ*(!S3v}_L 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 a5xzc+r?rX91>G#>=ZtSB{7BxVzyAxRG&Q6E literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/srs.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/gis/utils/__pycache__/srs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5fdb90173a0f87fb7145d53f583ab435541a752 GIT binary patch literal 2502 zcmb_e&2Jk;6rb5$+iT~eArug(g1M!ZQU^p4RS6NHPD@3IsyG#}80@iU?5wjN?#ygb zM;i&zUg6L)hgRakzqAr3PTV*nr1EBV?Zg!-7uMSG?#%o6&3nK1X5*!$8iMQ3?|$n& zSwQG_{c`cL;pG#!6yE3iV_vqQ&oFseGN!b+_C7<(n=v{2ps12j+_ zXDh8SRXz>&`G5-^^?BXOR+>Avx9{&Bbef-bws-Gtx3YzP97VjZ{5X=CvvaR?XRlw< z7K*D1|1R9O;FcCfD0RlRLT8S`sq-c}D=8~2jckS=S#ni5%zA`>z%Wx9mE~LTZWr(N z)56XBF6}`xvF= z(c;skXQ-*QT~5MMSB4!@j#1^VwLo0 z|Aj$_Q&WOQa^_bOcr<2b=E%WeBG+?!iSh$q zO^iJ-pGZDP0;2+Z&|art0BX*wVxN*kv4RcugM@KLdK1FvpB>p3{BIyZau{Tm;ASkLW# z&L=0aU}ReilMr;|P2-NxL>+b_8uH>DGN^-iREURkLVBF^6RG0RKZR{*>?T;pG)QI% z>CWtQ$-w6UYvkq$Y36&DI=gGSoYopSqTICl2^Z9W>eff_lFcYVcm_Jt&I6in8Ms*H~E0ikgRMoxsUfbr|5a?P#_ zYp}LfI9sddsrN2TOZXT<2IYPFv4-EBV`!HY)n!6TfT2g=MKf$#R7G{j#_4rK%&9z! zd0t;K8Jl{T#EBrYfJ`fS@AQj2djUBwPr)A~z5sn1<(z<+X_CjGZaTWn%t-zMj7Htb z98I;XIwO4XsAs+ESj402ia%6+I2mS_1yA|_Yr!p7VK{^?|840Er+9>(SP!fg`c=0D3=f1pYRvE#yLGdDUsJEWpGZmD&A6Xear=(1K1+J-+rE(M+CA_NM_2op zN5}15zt@()*=u8Hl61&rJJ0t<(NZ>`rEHj%vH^XhF`i`AO`x=n!q&D1s!^|^)A^p# z*bL%64dhm1ChV1^&|A(HFH*mbMR|(9{+iI+7jQ_Rta3;tRZ3)bJeFB?=V70Zb^FiU z0jDZ~ym+q{NtK;BwwzO{aFo@2=|@sgILw8HYg~FIlZC9*3Av(PZOB!}^d#xoCr3)? z4~?u6_jIUaR!YFcFtb6*TWkWW_F}d3(3dJJ_XPmr^{Qt>fJ8;x*C)TY1cT>Jxt7(= ztIu01*tX9Ht%=OaM<-MaB>;y`Z7`VbBF|GRmNc5Bxqa%-4S53w_Z=56S}xYV8m>7o zS{Amj^W1SQm~(LX@5>dv=Hg|`vai_7_-$-G7gs>J?g(vYZ*Q+&_TKoH<7CKaV4~(# kXPw|YPsYXtoQ8}Bth*V;ED89QrnuA*Swt(?a+aU}11Y@hC;$Ke literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/layermapping.py b/venv/Lib/site-packages/django/contrib/gis/utils/layermapping.py new file mode 100644 index 000000000..922deee12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/utils/layermapping.py @@ -0,0 +1,723 @@ +# LayerMapping -- A Django Model/OGR Layer Mapping Utility +""" + The LayerMapping class provides a way to map the contents of OGR + vector files (e.g. SHP files) to Geographic-enabled Django models. + + For more information, please consult the GeoDjango documentation: + https://docs.djangoproject.com/en/dev/ref/contrib/gis/layermapping/ +""" +import sys +from decimal import Decimal +from decimal import InvalidOperation as DecimalInvalidOperation +from pathlib import Path + +from django.contrib.gis.db.models import GeometryField +from django.contrib.gis.gdal import ( + CoordTransform, + DataSource, + GDALException, + OGRGeometry, + OGRGeomType, + SpatialReference, +) +from django.contrib.gis.gdal.field import ( + OFTDate, + OFTDateTime, + OFTInteger, + OFTInteger64, + OFTReal, + OFTString, + OFTTime, +) +from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist +from django.db import connections, models, router, transaction +from django.utils.encoding import force_str + + +# LayerMapping exceptions. +class LayerMapError(Exception): + pass + + +class InvalidString(LayerMapError): + pass + + +class InvalidDecimal(LayerMapError): + pass + + +class InvalidInteger(LayerMapError): + pass + + +class MissingForeignKey(LayerMapError): + pass + + +class LayerMapping: + "A class that maps OGR Layers to GeoDjango Models." + + # Acceptable 'base' types for a multi-geometry type. + MULTI_TYPES = { + 1: OGRGeomType("MultiPoint"), + 2: OGRGeomType("MultiLineString"), + 3: OGRGeomType("MultiPolygon"), + OGRGeomType("Point25D").num: OGRGeomType("MultiPoint25D"), + OGRGeomType("LineString25D").num: OGRGeomType("MultiLineString25D"), + OGRGeomType("Polygon25D").num: OGRGeomType("MultiPolygon25D"), + } + # Acceptable Django field types and corresponding acceptable OGR + # counterparts. + FIELD_TYPES = { + models.AutoField: OFTInteger, + models.BigAutoField: OFTInteger64, + models.SmallAutoField: OFTInteger, + models.BooleanField: (OFTInteger, OFTReal, OFTString), + models.IntegerField: (OFTInteger, OFTReal, OFTString), + models.FloatField: (OFTInteger, OFTReal), + models.DateField: OFTDate, + models.DateTimeField: OFTDateTime, + models.EmailField: OFTString, + models.TimeField: OFTTime, + models.DecimalField: (OFTInteger, OFTReal), + models.CharField: OFTString, + models.SlugField: OFTString, + models.TextField: OFTString, + models.URLField: OFTString, + models.UUIDField: OFTString, + models.BigIntegerField: (OFTInteger, OFTReal, OFTString), + models.SmallIntegerField: (OFTInteger, OFTReal, OFTString), + models.PositiveBigIntegerField: (OFTInteger, OFTReal, OFTString), + models.PositiveIntegerField: (OFTInteger, OFTReal, OFTString), + models.PositiveSmallIntegerField: (OFTInteger, OFTReal, OFTString), + } + + def __init__( + self, + model, + data, + mapping, + layer=0, + source_srs=None, + encoding="utf-8", + transaction_mode="commit_on_success", + transform=True, + unique=None, + using=None, + ): + """ + A LayerMapping object is initialized using the given Model (not an instance), + a DataSource (or string path to an OGR-supported data file), and a mapping + dictionary. See the module level docstring for more details and keyword + argument usage. + """ + # Getting the DataSource and the associated Layer. + if isinstance(data, (str, Path)): + self.ds = DataSource(data, encoding=encoding) + else: + self.ds = data + self.layer = self.ds[layer] + + self.using = using if using is not None else router.db_for_write(model) + self.spatial_backend = connections[self.using].ops + + # Setting the mapping & model attributes. + self.mapping = mapping + self.model = model + + # Checking the layer -- initialization of the object will fail if + # things don't check out before hand. + self.check_layer() + + # Getting the geometry column associated with the model (an + # exception will be raised if there is no geometry column). + if connections[self.using].features.supports_transform: + self.geo_field = self.geometry_field() + else: + transform = False + + # Checking the source spatial reference system, and getting + # the coordinate transformation object (unless the `transform` + # keyword is set to False) + if transform: + self.source_srs = self.check_srs(source_srs) + self.transform = self.coord_transform() + else: + self.transform = transform + + # Setting the encoding for OFTString fields, if specified. + if encoding: + # Making sure the encoding exists, if not a LookupError + # exception will be thrown. + from codecs import lookup + + lookup(encoding) + self.encoding = encoding + else: + self.encoding = None + + if unique: + self.check_unique(unique) + transaction_mode = "autocommit" # Has to be set to autocommit. + self.unique = unique + else: + self.unique = None + + # Setting the transaction decorator with the function in the + # transaction modes dictionary. + self.transaction_mode = transaction_mode + if transaction_mode == "autocommit": + self.transaction_decorator = None + elif transaction_mode == "commit_on_success": + self.transaction_decorator = transaction.atomic + else: + raise LayerMapError("Unrecognized transaction mode: %s" % transaction_mode) + + # #### Checking routines used during initialization #### + def check_fid_range(self, fid_range): + "Check the `fid_range` keyword." + if fid_range: + if isinstance(fid_range, (tuple, list)): + return slice(*fid_range) + elif isinstance(fid_range, slice): + return fid_range + else: + raise TypeError + else: + return None + + def check_layer(self): + """ + Check the Layer metadata and ensure that it's compatible with the + mapping information and model. Unlike previous revisions, there is no + need to increment through each feature in the Layer. + """ + # The geometry field of the model is set here. + # TODO: Support more than one geometry field / model. However, this + # depends on the GDAL Driver in use. + self.geom_field = False + self.fields = {} + + # Getting lists of the field names and the field types available in + # the OGR Layer. + ogr_fields = self.layer.fields + ogr_field_types = self.layer.field_types + + # Function for determining if the OGR mapping field is in the Layer. + def check_ogr_fld(ogr_map_fld): + try: + idx = ogr_fields.index(ogr_map_fld) + except ValueError: + raise LayerMapError( + 'Given mapping OGR field "%s" not found in OGR Layer.' % ogr_map_fld + ) + return idx + + # No need to increment through each feature in the model, simply check + # the Layer metadata against what was given in the mapping dictionary. + for field_name, ogr_name in self.mapping.items(): + # Ensuring that a corresponding field exists in the model + # for the given field name in the mapping. + try: + model_field = self.model._meta.get_field(field_name) + except FieldDoesNotExist: + raise LayerMapError( + 'Given mapping field "%s" not in given Model fields.' % field_name + ) + + # Getting the string name for the Django field class (e.g., 'PointField'). + fld_name = model_field.__class__.__name__ + + if isinstance(model_field, GeometryField): + if self.geom_field: + raise LayerMapError( + "LayerMapping does not support more than one GeometryField per " + "model." + ) + + # Getting the coordinate dimension of the geometry field. + coord_dim = model_field.dim + + try: + if coord_dim == 3: + gtype = OGRGeomType(ogr_name + "25D") + else: + gtype = OGRGeomType(ogr_name) + except GDALException: + raise LayerMapError( + 'Invalid mapping for GeometryField "%s".' % field_name + ) + + # Making sure that the OGR Layer's Geometry is compatible. + ltype = self.layer.geom_type + if not ( + ltype.name.startswith(gtype.name) + or self.make_multi(ltype, model_field) + ): + raise LayerMapError( + "Invalid mapping geometry; model has %s%s, " + "layer geometry type is %s." + % (fld_name, "(dim=3)" if coord_dim == 3 else "", ltype) + ) + + # Setting the `geom_field` attribute w/the name of the model field + # that is a Geometry. Also setting the coordinate dimension + # attribute. + self.geom_field = field_name + self.coord_dim = coord_dim + fields_val = model_field + elif isinstance(model_field, models.ForeignKey): + if isinstance(ogr_name, dict): + # Is every given related model mapping field in the Layer? + rel_model = model_field.remote_field.model + for rel_name, ogr_field in ogr_name.items(): + idx = check_ogr_fld(ogr_field) + try: + rel_model._meta.get_field(rel_name) + except FieldDoesNotExist: + raise LayerMapError( + 'ForeignKey mapping field "%s" not in %s fields.' + % (rel_name, rel_model.__class__.__name__) + ) + fields_val = rel_model + else: + raise TypeError("ForeignKey mapping must be of dictionary type.") + else: + # Is the model field type supported by LayerMapping? + if model_field.__class__ not in self.FIELD_TYPES: + raise LayerMapError( + 'Django field type "%s" has no OGR mapping (yet).' % fld_name + ) + + # Is the OGR field in the Layer? + idx = check_ogr_fld(ogr_name) + ogr_field = ogr_field_types[idx] + + # Can the OGR field type be mapped to the Django field type? + if not issubclass(ogr_field, self.FIELD_TYPES[model_field.__class__]): + raise LayerMapError( + 'OGR field "%s" (of type %s) cannot be mapped to Django %s.' + % (ogr_field, ogr_field.__name__, fld_name) + ) + fields_val = model_field + + self.fields[field_name] = fields_val + + def check_srs(self, source_srs): + "Check the compatibility of the given spatial reference object." + + if isinstance(source_srs, SpatialReference): + sr = source_srs + elif isinstance(source_srs, self.spatial_backend.spatial_ref_sys()): + sr = source_srs.srs + elif isinstance(source_srs, (int, str)): + sr = SpatialReference(source_srs) + else: + # Otherwise just pulling the SpatialReference from the layer + sr = self.layer.srs + + if not sr: + raise LayerMapError("No source reference system defined.") + else: + return sr + + def check_unique(self, unique): + "Check the `unique` keyword parameter -- may be a sequence or string." + if isinstance(unique, (list, tuple)): + # List of fields to determine uniqueness with + for attr in unique: + if attr not in self.mapping: + raise ValueError + elif isinstance(unique, str): + # Only a single field passed in. + if unique not in self.mapping: + raise ValueError + else: + raise TypeError( + "Unique keyword argument must be set with a tuple, list, or string." + ) + + # Keyword argument retrieval routines #### + def feature_kwargs(self, feat): + """ + Given an OGR Feature, return a dictionary of keyword arguments for + constructing the mapped model. + """ + # The keyword arguments for model construction. + kwargs = {} + + # Incrementing through each model field and OGR field in the + # dictionary mapping. + for field_name, ogr_name in self.mapping.items(): + model_field = self.fields[field_name] + + if isinstance(model_field, GeometryField): + # Verify OGR geometry. + try: + val = self.verify_geom(feat.geom, model_field) + except GDALException: + raise LayerMapError("Could not retrieve geometry from feature.") + elif isinstance(model_field, models.base.ModelBase): + # The related _model_, not a field was passed in -- indicating + # another mapping for the related Model. + val = self.verify_fk(feat, model_field, ogr_name) + else: + # Otherwise, verify OGR Field type. + val = self.verify_ogr_field(feat[ogr_name], model_field) + + # Setting the keyword arguments for the field name with the + # value obtained above. + kwargs[field_name] = val + + return kwargs + + def unique_kwargs(self, kwargs): + """ + Given the feature keyword arguments (from `feature_kwargs`), construct + and return the uniqueness keyword arguments -- a subset of the feature + kwargs. + """ + if isinstance(self.unique, str): + return {self.unique: kwargs[self.unique]} + else: + return {fld: kwargs[fld] for fld in self.unique} + + # #### Verification routines used in constructing model keyword arguments. #### + def verify_ogr_field(self, ogr_field, model_field): + """ + Verify if the OGR Field contents are acceptable to the model field. If + they are, return the verified value, otherwise raise an exception. + """ + if isinstance(ogr_field, OFTString) and isinstance( + model_field, (models.CharField, models.TextField) + ): + if self.encoding and ogr_field.value is not None: + # The encoding for OGR data sources may be specified here + # (e.g., 'cp437' for Census Bureau boundary files). + val = force_str(ogr_field.value, self.encoding) + else: + val = ogr_field.value + if ( + model_field.max_length + and val is not None + and len(val) > model_field.max_length + ): + raise InvalidString( + "%s model field maximum string length is %s, given %s characters." + % (model_field.name, model_field.max_length, len(val)) + ) + elif isinstance(ogr_field, OFTReal) and isinstance( + model_field, models.DecimalField + ): + try: + # Creating an instance of the Decimal value to use. + d = Decimal(str(ogr_field.value)) + except DecimalInvalidOperation: + raise InvalidDecimal( + "Could not construct decimal from: %s" % ogr_field.value + ) + + # Getting the decimal value as a tuple. + dtup = d.as_tuple() + digits = dtup[1] + d_idx = dtup[2] # index where the decimal is + + # Maximum amount of precision, or digits to the left of the decimal. + max_prec = model_field.max_digits - model_field.decimal_places + + # Getting the digits to the left of the decimal place for the + # given decimal. + if d_idx < 0: + n_prec = len(digits[:d_idx]) + else: + n_prec = len(digits) + d_idx + + # If we have more than the maximum digits allowed, then throw an + # InvalidDecimal exception. + if n_prec > max_prec: + raise InvalidDecimal( + "A DecimalField with max_digits %d, decimal_places %d must " + "round to an absolute value less than 10^%d." + % (model_field.max_digits, model_field.decimal_places, max_prec) + ) + val = d + elif isinstance(ogr_field, (OFTReal, OFTString)) and isinstance( + model_field, models.IntegerField + ): + # Attempt to convert any OFTReal and OFTString value to an OFTInteger. + try: + val = int(ogr_field.value) + except ValueError: + raise InvalidInteger( + "Could not construct integer from: %s" % ogr_field.value + ) + else: + val = ogr_field.value + return val + + def verify_fk(self, feat, rel_model, rel_mapping): + """ + Given an OGR Feature, the related model and its dictionary mapping, + retrieve the related model for the ForeignKey mapping. + """ + # TODO: It is expensive to retrieve a model for every record -- + # explore if an efficient mechanism exists for caching related + # ForeignKey models. + + # Constructing and verifying the related model keyword arguments. + fk_kwargs = {} + for field_name, ogr_name in rel_mapping.items(): + fk_kwargs[field_name] = self.verify_ogr_field( + feat[ogr_name], rel_model._meta.get_field(field_name) + ) + + # Attempting to retrieve and return the related model. + try: + return rel_model.objects.using(self.using).get(**fk_kwargs) + except ObjectDoesNotExist: + raise MissingForeignKey( + "No ForeignKey %s model found with keyword arguments: %s" + % (rel_model.__name__, fk_kwargs) + ) + + def verify_geom(self, geom, model_field): + """ + Verify the geometry -- construct and return a GeometryCollection + if necessary (for example if the model field is MultiPolygonField while + the mapped shapefile only contains Polygons). + """ + # Downgrade a 3D geom to a 2D one, if necessary. + if self.coord_dim != geom.coord_dim: + geom.coord_dim = self.coord_dim + + if self.make_multi(geom.geom_type, model_field): + # Constructing a multi-geometry type to contain the single geometry + multi_type = self.MULTI_TYPES[geom.geom_type.num] + g = OGRGeometry(multi_type) + g.add(geom) + else: + g = geom + + # Transforming the geometry with our Coordinate Transformation object, + # but only if the class variable `transform` is set w/a CoordTransform + # object. + if self.transform: + g.transform(self.transform) + + # Returning the WKT of the geometry. + return g.wkt + + # #### Other model methods #### + def coord_transform(self): + "Return the coordinate transformation object." + SpatialRefSys = self.spatial_backend.spatial_ref_sys() + try: + # Getting the target spatial reference system + target_srs = ( + SpatialRefSys.objects.using(self.using) + .get(srid=self.geo_field.srid) + .srs + ) + + # Creating the CoordTransform object + return CoordTransform(self.source_srs, target_srs) + except Exception as exc: + raise LayerMapError( + "Could not translate between the data source and model geometry." + ) from exc + + def geometry_field(self): + "Return the GeometryField instance associated with the geographic column." + # Use `get_field()` on the model's options so that we + # get the correct field instance if there's model inheritance. + opts = self.model._meta + return opts.get_field(self.geom_field) + + def make_multi(self, geom_type, model_field): + """ + Given the OGRGeomType for a geometry and its associated GeometryField, + determine whether the geometry should be turned into a GeometryCollection. + """ + return ( + geom_type.num in self.MULTI_TYPES + and model_field.__class__.__name__ == "Multi%s" % geom_type.django + ) + + def save( + self, + verbose=False, + fid_range=False, + step=False, + progress=False, + silent=False, + stream=sys.stdout, + strict=False, + ): + """ + Save the contents from the OGR DataSource Layer into the database + according to the mapping dictionary given at initialization. + + Keyword Parameters: + verbose: + If set, information will be printed subsequent to each model save + executed on the database. + + fid_range: + May be set with a slice or tuple of (begin, end) feature ID's to map + from the data source. In other words, this keyword enables the user + to selectively import a subset range of features in the geographic + data source. + + step: + If set with an integer, transactions will occur at every step + interval. For example, if step=1000, a commit would occur after + the 1,000th feature, the 2,000th feature etc. + + progress: + When this keyword is set, status information will be printed giving + the number of features processed and successfully saved. By default, + progress information will pe printed every 1000 features processed, + however, this default may be overridden by setting this keyword with an + integer for the desired interval. + + stream: + Status information will be written to this file handle. Defaults to + using `sys.stdout`, but any object with a `write` method is supported. + + silent: + By default, non-fatal error notifications are printed to stdout, but + this keyword may be set to disable these notifications. + + strict: + Execution of the model mapping will cease upon the first error + encountered. The default behavior is to attempt to continue. + """ + # Getting the default Feature ID range. + default_range = self.check_fid_range(fid_range) + + # Setting the progress interval, if requested. + if progress: + if progress is True or not isinstance(progress, int): + progress_interval = 1000 + else: + progress_interval = progress + + def _save(feat_range=default_range, num_feat=0, num_saved=0): + if feat_range: + layer_iter = self.layer[feat_range] + else: + layer_iter = self.layer + + for feat in layer_iter: + num_feat += 1 + # Getting the keyword arguments + try: + kwargs = self.feature_kwargs(feat) + except LayerMapError as msg: + # Something borked the validation + if strict: + raise + elif not silent: + stream.write( + "Ignoring Feature ID %s because: %s\n" % (feat.fid, msg) + ) + else: + # Constructing the model using the keyword args + is_update = False + if self.unique: + # If we want unique models on a particular field, handle the + # geometry appropriately. + try: + # Getting the keyword arguments and retrieving + # the unique model. + u_kwargs = self.unique_kwargs(kwargs) + m = self.model.objects.using(self.using).get(**u_kwargs) + is_update = True + + # Getting the geometry (in OGR form), creating + # one from the kwargs WKT, adding in additional + # geometries, and update the attribute with the + # just-updated geometry WKT. + geom_value = getattr(m, self.geom_field) + if geom_value is None: + geom = OGRGeometry(kwargs[self.geom_field]) + else: + geom = geom_value.ogr + new = OGRGeometry(kwargs[self.geom_field]) + for g in new: + geom.add(g) + setattr(m, self.geom_field, geom.wkt) + except ObjectDoesNotExist: + # No unique model exists yet, create. + m = self.model(**kwargs) + else: + m = self.model(**kwargs) + + try: + # Attempting to save. + m.save(using=self.using) + num_saved += 1 + if verbose: + stream.write( + "%s: %s\n" % ("Updated" if is_update else "Saved", m) + ) + except Exception as msg: + if strict: + # Bailing out if the `strict` keyword is set. + if not silent: + stream.write( + "Failed to save the feature (id: %s) into the " + "model with the keyword arguments:\n" % feat.fid + ) + stream.write("%s\n" % kwargs) + raise + elif not silent: + stream.write( + "Failed to save %s:\n %s\nContinuing\n" % (kwargs, msg) + ) + + # Printing progress information, if requested. + if progress and num_feat % progress_interval == 0: + stream.write( + "Processed %d features, saved %d ...\n" % (num_feat, num_saved) + ) + + # Only used for status output purposes -- incremental saving uses the + # values returned here. + return num_saved, num_feat + + if self.transaction_decorator is not None: + _save = self.transaction_decorator(_save) + + nfeat = self.layer.num_feat + if step and isinstance(step, int) and step < nfeat: + # Incremental saving is requested at the given interval (step) + if default_range: + raise LayerMapError( + "The `step` keyword may not be used in conjunction with the " + "`fid_range` keyword." + ) + beg, num_feat, num_saved = (0, 0, 0) + indices = range(step, nfeat, step) + n_i = len(indices) + + for i, end in enumerate(indices): + # Constructing the slice to use for this step; the last slice is + # special (e.g, [100:] instead of [90:100]). + if i + 1 == n_i: + step_slice = slice(beg, None) + else: + step_slice = slice(beg, end) + + try: + num_feat, num_saved = _save(step_slice, num_feat, num_saved) + beg = end + except Exception: # Deliberately catch everything + stream.write( + "%s\nFailed to save slice: %s\n" % ("=-" * 20, step_slice) + ) + raise + else: + # Otherwise, just calling the previously defined _save() function. + _save() diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/ogrinfo.py b/venv/Lib/site-packages/django/contrib/gis/utils/ogrinfo.py new file mode 100644 index 000000000..eafa23cca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/utils/ogrinfo.py @@ -0,0 +1,53 @@ +""" +This module includes some utility functions for inspecting the layout +of a GDAL data source -- the functionality is analogous to the output +produced by the `ogrinfo` utility. +""" + +from django.contrib.gis.gdal import DataSource +from django.contrib.gis.gdal.geometries import GEO_CLASSES + + +def ogrinfo(data_source, num_features=10): + """ + Walk the available layers in the supplied `data_source`, displaying + the fields for the first `num_features` features. + """ + + # Checking the parameters. + if isinstance(data_source, str): + data_source = DataSource(data_source) + elif isinstance(data_source, DataSource): + pass + else: + raise Exception( + "Data source parameter must be a string or a DataSource object." + ) + + for i, layer in enumerate(data_source): + print("data source : %s" % data_source.name) + print("==== layer %s" % i) + print(" shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__) + print(" # features: %s" % len(layer)) + print(" srs: %s" % layer.srs) + extent_tup = layer.extent.tuple + print(" extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4])) + print("Displaying the first %s features ====" % num_features) + + width = max(*map(len, layer.fields)) + fmt = " %%%ss: %%s" % width + for j, feature in enumerate(layer[:num_features]): + print("=== Feature %s" % j) + for fld_name in layer.fields: + type_name = feature[fld_name].type_name + output = fmt % (fld_name, type_name) + val = feature.get(fld_name) + if val: + if isinstance(val, str): + val_fmt = ' ("%s")' + else: + val_fmt = " (%s)" + output += val_fmt % val + else: + output += " (None)" + print(output) diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/ogrinspect.py b/venv/Lib/site-packages/django/contrib/gis/utils/ogrinspect.py new file mode 100644 index 000000000..40ca0cb46 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/utils/ogrinspect.py @@ -0,0 +1,267 @@ +""" +This module is for inspecting OGR data sources and generating either +models for GeoDjango and/or mapping dictionaries for use with the +`LayerMapping` utility. +""" +from django.contrib.gis.gdal import DataSource +from django.contrib.gis.gdal.field import ( + OFTDate, + OFTDateTime, + OFTInteger, + OFTInteger64, + OFTReal, + OFTString, + OFTTime, +) + + +def mapping(data_source, geom_name="geom", layer_key=0, multi_geom=False): + """ + Given a DataSource, generate a dictionary that may be used + for invoking the LayerMapping utility. + + Keyword Arguments: + `geom_name` => The name of the geometry field to use for the model. + + `layer_key` => The key for specifying which layer in the DataSource to use; + defaults to 0 (the first layer). May be an integer index or a string + identifier for the layer. + + `multi_geom` => Boolean (default: False) - specify as multigeometry. + """ + if isinstance(data_source, str): + # Instantiating the DataSource from the string. + data_source = DataSource(data_source) + elif isinstance(data_source, DataSource): + pass + else: + raise TypeError( + "Data source parameter must be a string or a DataSource object." + ) + + # Creating the dictionary. + _mapping = {} + + # Generating the field name for each field in the layer. + for field in data_source[layer_key].fields: + mfield = field.lower() + if mfield[-1:] == "_": + mfield += "field" + _mapping[mfield] = field + gtype = data_source[layer_key].geom_type + if multi_geom: + gtype.to_multi() + _mapping[geom_name] = str(gtype).upper() + return _mapping + + +def ogrinspect(*args, **kwargs): + """ + Given a data source (either a string or a DataSource object) and a string + model name this function will generate a GeoDjango model. + + Usage: + + >>> from django.contrib.gis.utils import ogrinspect + >>> ogrinspect('/path/to/shapefile.shp','NewModel') + + ...will print model definition to stout + + or put this in a Python script and use to redirect the output to a new + model like: + + $ python generate_model.py > myapp/models.py + + # generate_model.py + from django.contrib.gis.utils import ogrinspect + shp_file = 'data/mapping_hacks/world_borders.shp' + model_name = 'WorldBorders' + + print(ogrinspect(shp_file, model_name, multi_geom=True, srid=4326, + geom_name='shapes', blank=True)) + + Required Arguments + `datasource` => string or DataSource object to file pointer + + `model name` => string of name of new model class to create + + Optional Keyword Arguments + `geom_name` => For specifying the model name for the Geometry Field. + Otherwise will default to `geom` + + `layer_key` => The key for specifying which layer in the DataSource to use; + defaults to 0 (the first layer). May be an integer index or a string + identifier for the layer. + + `srid` => The SRID to use for the Geometry Field. If it can be determined, + the SRID of the datasource is used. + + `multi_geom` => Boolean (default: False) - specify as multigeometry. + + `name_field` => String - specifies a field name to return for the + __str__() method (which will be generated if specified). + + `imports` => Boolean (default: True) - set to False to omit the + `from django.contrib.gis.db import models` code from the + autogenerated models thus avoiding duplicated imports when building + more than one model by batching ogrinspect() + + `decimal` => Boolean or sequence (default: False). When set to True + all generated model fields corresponding to the `OFTReal` type will + be `DecimalField` instead of `FloatField`. A sequence of specific + field names to generate as `DecimalField` may also be used. + + `blank` => Boolean or sequence (default: False). When set to True all + generated model fields will have `blank=True`. If the user wants to + give specific fields to have blank, then a list/tuple of OGR field + names may be used. + + `null` => Boolean (default: False) - When set to True all generated + model fields will have `null=True`. If the user wants to specify + give specific fields to have null, then a list/tuple of OGR field + names may be used. + + Note: Call the _ogrinspect() helper to do the heavy lifting. + """ + return "\n".join(_ogrinspect(*args, **kwargs)) + + +def _ogrinspect( + data_source, + model_name, + geom_name="geom", + layer_key=0, + srid=None, + multi_geom=False, + name_field=None, + imports=True, + decimal=False, + blank=False, + null=False, +): + """ + Helper routine for `ogrinspect` that generates GeoDjango models corresponding + to the given data source. See the `ogrinspect` docstring for more details. + """ + # Getting the DataSource + if isinstance(data_source, str): + data_source = DataSource(data_source) + elif isinstance(data_source, DataSource): + pass + else: + raise TypeError( + "Data source parameter must be a string or a DataSource object." + ) + + # Getting the layer corresponding to the layer key and getting + # a string listing of all OGR fields in the Layer. + layer = data_source[layer_key] + ogr_fields = layer.fields + + # Creating lists from the `null`, `blank`, and `decimal` + # keyword arguments. + def process_kwarg(kwarg): + if isinstance(kwarg, (list, tuple)): + return [s.lower() for s in kwarg] + elif kwarg: + return [s.lower() for s in ogr_fields] + else: + return [] + + null_fields = process_kwarg(null) + blank_fields = process_kwarg(blank) + decimal_fields = process_kwarg(decimal) + + # Gets the `null` and `blank` keywords for the given field name. + def get_kwargs_str(field_name): + kwlist = [] + if field_name.lower() in null_fields: + kwlist.append("null=True") + if field_name.lower() in blank_fields: + kwlist.append("blank=True") + if kwlist: + return ", " + ", ".join(kwlist) + else: + return "" + + # For those wishing to disable the imports. + if imports: + yield "# This is an auto-generated Django model module created by ogrinspect." + yield "from django.contrib.gis.db import models" + yield "" + yield "" + + yield "class %s(models.Model):" % model_name + + for field_name, width, precision, field_type in zip( + ogr_fields, layer.field_widths, layer.field_precisions, layer.field_types + ): + # The model field name. + mfield = field_name.lower() + if mfield[-1:] == "_": + mfield += "field" + + # Getting the keyword args string. + kwargs_str = get_kwargs_str(field_name) + + if field_type is OFTReal: + # By default OFTReals are mapped to `FloatField`, however, they + # may also be mapped to `DecimalField` if specified in the + # `decimal` keyword. + if field_name.lower() in decimal_fields: + yield ( + " %s = models.DecimalField(max_digits=%d, decimal_places=%d%s)" + ) % ( + mfield, + width, + precision, + kwargs_str, + ) + else: + yield " %s = models.FloatField(%s)" % (mfield, kwargs_str[2:]) + elif field_type is OFTInteger: + yield " %s = models.IntegerField(%s)" % (mfield, kwargs_str[2:]) + elif field_type is OFTInteger64: + yield " %s = models.BigIntegerField(%s)" % (mfield, kwargs_str[2:]) + elif field_type is OFTString: + yield " %s = models.CharField(max_length=%s%s)" % ( + mfield, + width, + kwargs_str, + ) + elif field_type is OFTDate: + yield " %s = models.DateField(%s)" % (mfield, kwargs_str[2:]) + elif field_type is OFTDateTime: + yield " %s = models.DateTimeField(%s)" % (mfield, kwargs_str[2:]) + elif field_type is OFTTime: + yield " %s = models.TimeField(%s)" % (mfield, kwargs_str[2:]) + else: + raise TypeError("Unknown field type %s in %s" % (field_type, mfield)) + + # TODO: Autodetection of multigeometry types (see #7218). + gtype = layer.geom_type + if multi_geom: + gtype.to_multi() + geom_field = gtype.django + + # Setting up the SRID keyword string. + if srid is None: + if layer.srs is None: + srid_str = "srid=-1" + else: + srid = layer.srs.srid + if srid is None: + srid_str = "srid=-1" + elif srid == 4326: + # WGS84 is already the default. + srid_str = "" + else: + srid_str = "srid=%s" % srid + else: + srid_str = "srid=%s" % srid + + yield " %s = models.%s(%s)" % (geom_name, geom_field, srid_str) + + if name_field: + yield "" + yield " def __str__(self): return self.%s" % name_field diff --git a/venv/Lib/site-packages/django/contrib/gis/utils/srs.py b/venv/Lib/site-packages/django/contrib/gis/utils/srs.py new file mode 100644 index 000000000..220476792 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/utils/srs.py @@ -0,0 +1,78 @@ +from django.contrib.gis.gdal import SpatialReference +from django.db import DEFAULT_DB_ALIAS, connections + + +def add_srs_entry( + srs, auth_name="EPSG", auth_srid=None, ref_sys_name=None, database=None +): + """ + Take a GDAL SpatialReference system and add its information to the + `spatial_ref_sys` table of the spatial backend. Doing this enables + database-level spatial transformations for the backend. Thus, this utility + is useful for adding spatial reference systems not included by default with + the backend: + + >>> from django.contrib.gis.utils import add_srs_entry + >>> add_srs_entry(3857) + + Keyword Arguments: + auth_name: + This keyword may be customized with the value of the `auth_name` field. + Defaults to 'EPSG'. + + auth_srid: + This keyword may be customized with the value of the `auth_srid` field. + Defaults to the SRID determined by GDAL. + + ref_sys_name: + For SpatiaLite users only, sets the value of the `ref_sys_name` field. + Defaults to the name determined by GDAL. + + database: + The name of the database connection to use; the default is the value + of `django.db.DEFAULT_DB_ALIAS` (at the time of this writing, its value + is 'default'). + """ + database = database or DEFAULT_DB_ALIAS + connection = connections[database] + + if not hasattr(connection.ops, "spatial_version"): + raise Exception("The `add_srs_entry` utility only works with spatial backends.") + if not connection.features.supports_add_srs_entry: + raise Exception("This utility does not support your database backend.") + SpatialRefSys = connection.ops.spatial_ref_sys() + + # If argument is not a `SpatialReference` instance, use it as parameter + # to construct a `SpatialReference` instance. + if not isinstance(srs, SpatialReference): + srs = SpatialReference(srs) + + if srs.srid is None: + raise Exception( + "Spatial reference requires an SRID to be " + "compatible with the spatial backend." + ) + + # Initializing the keyword arguments dictionary for both PostGIS + # and SpatiaLite. + kwargs = { + "srid": srs.srid, + "auth_name": auth_name, + "auth_srid": auth_srid or srs.srid, + "proj4text": srs.proj4, + } + # Backend-specific fields for the SpatialRefSys model. + srs_field_names = {f.name for f in SpatialRefSys._meta.get_fields()} + if "srtext" in srs_field_names: + kwargs["srtext"] = srs.wkt + if "ref_sys_name" in srs_field_names: + # SpatiaLite specific + kwargs["ref_sys_name"] = ref_sys_name or srs.name + + # Creating the spatial_ref_sys model. + try: + # Try getting via SRID only, because using all kwargs may + # differ from exact wkt/proj in database. + SpatialRefSys.objects.using(database).get(srid=srs.srid) + except SpatialRefSys.DoesNotExist: + SpatialRefSys.objects.using(database).create(**kwargs) diff --git a/venv/Lib/site-packages/django/contrib/gis/views.py b/venv/Lib/site-packages/django/contrib/gis/views.py new file mode 100644 index 000000000..346fb5b0c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/gis/views.py @@ -0,0 +1,22 @@ +from django.http import Http404 +from django.utils.translation import gettext as _ + + +def feed(request, url, feed_dict=None): + """Provided for backwards compatibility.""" + if not feed_dict: + raise Http404(_("No feeds are registered.")) + + slug = url.partition("/")[0] + try: + f = feed_dict[slug] + except KeyError: + raise Http404(_("Slug %r isn’t registered.") % slug) + + instance = f() + instance.feed_url = getattr(f, "feed_url", None) or request.path + instance.title_template = f.title_template or ("feeds/%s_title.html" % slug) + instance.description_template = f.description_template or ( + "feeds/%s_description.html" % slug + ) + return instance(request) diff --git a/venv/Lib/site-packages/django/contrib/humanize/__init__.py b/venv/Lib/site-packages/django/contrib/humanize/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/humanize/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/humanize/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8dd8736ccb54e407948146ddc946ddbf1b60e23 GIT binary patch literal 197 zcmd1j<>g`kf)81esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UMrm$hUS?IQetdjpUS>&ryk0@&Ee@O9{FKt1 OR6CFhikW}}3j+YMwKf$1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/humanize/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2900e82f4e57a3f73968448d010f767fceec3c50 GIT binary patch literal 541 zcmYjN!Ab)$5KVTsrPbAwV1J>Y?Oj9^MSBnt#Y+f=>?YReZn7rXqP^-X#p?vFtJTLNSsj@tqdNZhR#W|KB-Ht)m$$7&Nsy!*HbgfjrLY$quVx3dcTEd!*0`KO!HDQ z)~qmA8c`R)PZ@itdC_K)a5tEdbS738XHw7TsmiERUT#-Bzvolw=yKw5JMs8;;xVr(H>#d&5WW+n z=mPXmf>XSR!6Ia}T{qO)pcxsok=m=mjlAXB72GSMZ47DK4-h*3t+Di0A=dPEmtyQ; MV2l4!l;Vx}2cmh7v;Y7A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/apps.py b/venv/Lib/site-packages/django/contrib/humanize/apps.py new file mode 100644 index 000000000..817ae96f6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class HumanizeConfig(AppConfig): + name = "django.contrib.humanize" + verbose_name = _("Humanize") diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..084db8ea7cdf7423a584397a1e12d77225583bb6 GIT binary patch literal 5097 zcmcJSO^g&p6vqo)KvzNe_M1Xk-35AgW?5jFWs&blA`!`=A!=eXQ#0GUGu=yf%?^tq zYBZV`*rV3cMYDb?CamWSFc`u zysGZn%kw)<2$U_5yCAEs6Jj5@p#u+;Q!|B_1D*!wgCBzrfak%L;BTxio)zgEnPXrd z>fc~~1zOPmVJ@F7L=W^m;C(l;9TgJn7@Eap#Q=8ted0yMa<>Q)yyr- zN10DEJ&@-497z4W#QLku*Fajo<6Qq1h@}yy!ILwDI0N1aeH#Wx`(iIh>rn(L-$z+L z%lcL3f?FcLtzZxQ#zFEw!TOgV#rYGYby|W>R)Rwy=@r(GGCybgRgm&9dtT&kfu!#P zsofEf=JO8Me+aIE{v+56&cvpseg{Bm_at}^_##N_bDH@cNO^i6qflBh9$6N}Mzl8_+ZwASKgjoWq9}QCfQ_RC4xjqR2D*LT$@Qjp|iXkG6sL1>Sp3$}W=W_Nos7S zw5xU1)0;2L{Z6&&cJ_!Y*K9pdw@bdkyS?3UP0

      rE!nID*h}gB1u~lvv(1!?K(@1H z^FY2Pt04)2Y-7wMfIJOG!}2Glhw3%kbq*H9CulPt#G% zI3{&AMpN|MQaWN}jU%#8(yFUFi5NR3b+#)Ita2T{RYzAzmh34JA!y@4VaX*7-^M3eL-OL)Z0F~>dNg#SAMJW< zC^b$_#CASY$___GZ1tJ21AVQT#r5sy6?n-D^;)O zS9%ZG8_~wC)a{D0MwDGE$j$H^w-G^hk7_+p=<91V8ogmNr>qY47QI?uG^-d@4$x

      JUHRA&T}lEat~~#y8-6qE zTJlM2`l3f4ptypLV3R)%Msks0$4T5DT(6G99t956IIbru4$#zqYl65ciOm&!-nj$Z zbHYGD6t<2VN_McgP{h_G8az{x;3e#e7L!wDG3luA8(y+2^tmtDia>1$a0F;(bshiG zkqz%!yl+rRKSI;=2X;Kv$L#2O5c7ZS0wZ-*g+ADIq436{@3Kms7+|ZRxzhYQPz@yl b6$t#7qy(}`!>?WV6dh^IR8$=LfQo+sdAUIT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..55bf160c0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,394 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# F Wolff , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-04 18:11+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanise" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}de" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ste" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ste" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljoen" +msgstr[1] "%(value).1f miljoen" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljoen" +msgstr[1] "%(value)s miljoen" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljard" +msgstr[1] "%(value).1f miljard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f biljoen" +msgstr[1] "%(value).1f biljoen" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s biljoen" +msgstr[1] "%(value)s biljoen" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biljard" +msgstr[1] "%(value).1f biljard" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biljard" +msgstr[1] "%(value)s biljard" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f triljoen" +msgstr[1] "%(value).1f triljoen" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s triljoen" +msgstr[1] "%(value)s triljoen" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triljard" +msgstr[1] "%(value).1f triljard" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triljard" +msgstr[1] "%(value)s triljard" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kwadriljoen" +msgstr[1] "%(value).1f kwadriljoen" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kwadriljoen" +msgstr[1] "%(value)s kwadriljoen" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kwadriljard" +msgstr[1] "%(value).1f kwadriljard" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadriljard" +msgstr[1] "%(value)s kwadriljard" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kwintiljoen" +msgstr[1] "%(value).1f kwintiljoen" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintiljoen" +msgstr[1] "%(value)s kwintiljoen" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kwinteljard" +msgstr[1] "%(value).1f kwinteljard" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwinteljard" +msgstr[1] "%(value)s kwinteljard" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "een" + +msgid "two" +msgstr "twee" + +msgid "three" +msgstr "drie" + +msgid "four" +msgstr "vier" + +msgid "five" +msgstr "vyf" + +msgid "six" +msgstr "ses" + +msgid "seven" +msgstr "sewe" + +msgid "eight" +msgstr "agt" + +msgid "nine" +msgstr "nege" + +msgid "today" +msgstr "vandag" + +msgid "tomorrow" +msgstr "môre" + +msgid "yesterday" +msgstr "gister" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s gelede" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "’n uur gelede" +msgstr[1] "%(count)s ure gelede" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "’n minuut gelede" +msgstr[1] "%(count)s minute gelede" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "’n sekonde gelede" +msgstr[1] "%(count)s sekondes gelede" + +msgid "now" +msgstr "nou" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "oor ’n sekonde" +msgstr[1] "oor %(count)s sekondes" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "oor ’n minuut" +msgstr[1] "%(count)s minute van nou af" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "oor ’n uur" +msgstr[1] "oor %(count)s ure" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "oor %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jare" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maande" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weke" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dae" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d ure" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minute" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jaar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maande" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weke" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dae" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d ure" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minute" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..169bb73a8e35515f9aa0e67398baf7527fda62db GIT binary patch literal 7510 zcmeI0Yitx%6vr=GMON|s!skUSw&JwAEk(Mx8WfB~2t<)DCMLt~?RH>yrq0aLRzr+D zDpnI?jL{F8phU`3Xo?toMxr6c#}__0^F>YcgGN6XAJIf({GXY-vpbJ&YoetlUby?4 zbMCq4o;ml-o!x$ZVbik=tsDI+^si?ywi-NeIzG_8X<}?P_$_!L_$xRMOr62l4PYBM z7hDIDen9G9kbECp0R8upm!HX4E97O8I@k>PdGIXo9gzH-02S~%DbJbd%Q=ukzY)9< zd=i9f_Bx2r*xQoFL0b0&NPd0-GvHh-(hlAWl76e?C`fUA0n)r#vwXWQkn99V`e!8H z1!=wSKuXmQl0SpzLjFy1W{R=PAYTfSzD+VGxl;0e$qkZ&k~<`y1L;0@gS6fODIbn+l{l*J?{cIG+Q4=jW8;JgAp4U&H59L5Gg4HV#4An8|J;oI*A$$rk2jOD?n zK(hY{)W9-|p4R(J@=M8Y!PB7sQSukb-z0yR{8Mtq)xLd`Mn@{W)-6d;(8(L%kyB56_y%T*gI>k5_oocBAo!a$2yicUVYuH||b>R~w;x#;i zUZdxbTH1&Aykq;lhVo-)qu+!+ADyGq`9O{GMm3ERVlC*@=uAS1dV59kHRvc6hIDz2 zo^^U|SaVB3lx(%t;%d>TlX^^}%ypw5s!eLCB4DsyE0r`uZ>TAVe9S6IS2T>GQL1wl zQ(Mp|)`R&>SM7?amTavol%5K%MN@N& zUMaU0ctIUR`32WjBU@S}F!q*gWbG$6u$Q@RIK$BG-r59`8phKv#Kyp!gof6GLajwl zLfE=bwd~1dC1g24PC~Ym$Vk|JqI`s`C&)&~HYpdHE*PD3256WCO;<}i-SqHgY)Mtj zK(y?dn7N5(I?y}AW*rdqLSROtW=&ieHtq_Gi^Af~VR3O-?Dj=VY!W)Nv;k)KnnEz! zpsKcwvSFIIA-msTgTk_fN$NGGu|ec*Wko?*Crk?`d6pM8sCv;z-6Q%8(^ghlMXjLR zUMX72S|iI-YgQ}wh)o)qD$7(`WO+xrBco)}N~ViUvoEA@hqyE1ZgXCChoG;%qTTK8Hh0(=aYj#t(m8~+$J}9x!QBxGY`P2` zaCbQ9?zX!8kYY-d{_aFF^Y@h4^I`mp@A;&>4q^IG!tS`Ia=_W;ZgKYErV^@VdJMT+ zQ6MAEA!jrp#%Vc7B{EJMuzuVoyDdgH4SKdG^ z$jJC4TuhlsG}*^@I{Ur%K;2HnH9>fF=2Z4WvCSg`Iv??78BQFGE|%naFW$%UCnB%8 zi)6K$^&tGn_#|9RnMpM39LL6pbF8kwBXV72|ISEkfe~k4B!Sfg%K##ylW;I)Ca96^ zL0vhoLKs78on6i-jv2~w^`|{bc89yYvFMd`bppPQ;0yHlQ)1)6#s(g$`xjC8k55F2 zO$dS;&r`^zc2WkO8mJ;`!qPv_YHK!_T+5BP2vB&BvFiHG0~>B?5^neF5LYd zoFm8TZN^tcSEHQo!Ol%QJ!UtCmr>oVCWw(N!h#OG(9XqtL@fTVL+?k6te;a@hY5uj zDenJ#B}PgQKgp~0im!fS-tmYN&i~tiXM4~(%}!GC%_{kix8Oo#1$xF9$CNx+3H Zapw*EQW|leV9qNr@qSt2V5SqA{ROzX(e?lU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..94c7f8716 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,449 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2020-2021 +# Bashar Al-Abdulhadi, 2014 +# Eyad Toma , 2013 +# Jannis Leidel , 2011 +# Muaaz Alsaied, 2020 +# Ossama Khayat , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-15 21:36+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Humanize" +msgstr "عمل صفة بشرية" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s مليون" +msgstr[1] "%(value)s مليون" +msgstr[2] "%(value)s مليون" +msgstr[3] "%(value)s ملايين" +msgstr[4] "%(value)s مليون" +msgstr[5] "%(value)s مليون" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s مليار" +msgstr[1] "%(value)s مليار" +msgstr[2] "%(value)s مليار" +msgstr[3] "%(value)s مليار" +msgstr[4] "%(value)s مليار" +msgstr[5] "%(value)s مليار" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ترليون" +msgstr[1] "%(value)s ترليون" +msgstr[2] "%(value)s ترليون" +msgstr[3] "%(value)s ترليون" +msgstr[4] "%(value)s ترليون" +msgstr[5] "%(value)s ترليون" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s كوادرليون" +msgstr[1] "%(value)s كوادرليون" +msgstr[2] "%(value)s كوادرليون" +msgstr[3] "%(value)s كوادرليون" +msgstr[4] "%(value)s كوادرليون" +msgstr[5] "%(value)s كوادرليون" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s كوينتيليون" +msgstr[1] "%(value)s كوينتيليون" +msgstr[2] "%(value)s كوينتيليون" +msgstr[3] "%(value)s كوينتيليون" +msgstr[4] "%(value)s كوينتيليون" +msgstr[5] "%(value)s كوينتيليون" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s سكستيليون" +msgstr[1] "%(value)s سكستيليون" +msgstr[2] "%(value)s سكستيليون" +msgstr[3] "%(value)s سكستيليون" +msgstr[4] "%(value)s سكستيليون" +msgstr[5] "%(value)s سكستيليون" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s سبتيليون" +msgstr[1] "%(value)s سبتيليون" +msgstr[2] "%(value)s سبتيليون" +msgstr[3] "%(value)s سبتيليون" +msgstr[4] "%(value)s سبتيليون" +msgstr[5] "%(value)s سبتيليون" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s أقتيليون" +msgstr[1] "%(value)s أقتيليون" +msgstr[2] "%(value)s أقتيليون" +msgstr[3] "%(value)s أقتيليون" +msgstr[4] "%(value)s أقتيليون" +msgstr[5] "%(value)s أقتيليون" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s نانليون" +msgstr[1] "%(value)s نانليون" +msgstr[2] "%(value)s نانليون" +msgstr[3] "%(value)s نانليون" +msgstr[4] "%(value)s نانليون" +msgstr[5] "%(value)s نانليون" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ديسيليون" +msgstr[1] "%(value)s ديسيليون" +msgstr[2] "%(value)s ديسيليون" +msgstr[3] "%(value)s ديسيليون" +msgstr[4] "%(value)s ديسيليون" +msgstr[5] "%(value)s ديسيليون" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s جوجول" +msgstr[1] "%(value)s جوجول" +msgstr[2] "%(value)s جوجول" +msgstr[3] "%(value)s جوجول" +msgstr[4] "%(value)s جوجول" +msgstr[5] "%(value)s جوجول" + +msgid "one" +msgstr "واحد" + +msgid "two" +msgstr "إثنان" + +msgid "three" +msgstr "ثلالثة" + +msgid "four" +msgstr "أربعة" + +msgid "five" +msgstr "خمسة" + +msgid "six" +msgstr "ستة" + +msgid "seven" +msgstr "سبعة" + +msgid "eight" +msgstr "ثمانية" + +msgid "nine" +msgstr "تسعة" + +msgid "today" +msgstr "اليوم" + +msgid "tomorrow" +msgstr "غداً" + +msgid "yesterday" +msgstr "أمس" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s مضت" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "منذ %(count)s ساعة" +msgstr[1] "منذ ساعة" +msgstr[2] "منذ %(count)s ساعة" +msgstr[3] "منذ %(count)s ساعة" +msgstr[4] "منذ %(count)s ساعة" +msgstr[5] "منذ %(count)s ساعة" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "منذ %(count)s دقيقة" +msgstr[1] "منذ دقيقة" +msgstr[2] "منذ %(count)s دقيقة" +msgstr[3] "منذ %(count)s دقيقة" +msgstr[4] "منذ %(count)s دقيقة" +msgstr[5] "منذ %(count)s دقيقة" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "منذ %(count)s ثانية" +msgstr[1] "منذ ثانية" +msgstr[2] "منذ %(count)s ثانيتين" +msgstr[3] "منذ %(count)s ثواني" +msgstr[4] "منذ %(count)s ثانية" +msgstr[5] "منذ %(count)s ثانية" + +msgid "now" +msgstr "الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s ثواني من الآن" +msgstr[1] "منذ ثانية من الآن" +msgstr[2] "%(count)s ثواني من الآن" +msgstr[3] "%(count)s ثواني من الآن" +msgstr[4] "%(count)s ثواني من الآن" +msgstr[5] "%(count)s ثواني من الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s دقائق من الآن" +msgstr[1] "منذ دقيقة من الآن" +msgstr[2] "%(count)s دقائق من الآن" +msgstr[3] "%(count)s دقائق من الآن" +msgstr[4] "%(count)s دقائق من الآن" +msgstr[5] "%(count)s دقائق من الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s ساعات من الآن" +msgstr[1] "منذ ساعة من الآن" +msgstr[2] "%(count)s ساعات من الآن" +msgstr[3] "%(count)s ساعات من الآن" +msgstr[4] "%(count)s ساعات من الآن" +msgstr[5] "%(count)s ساعات من الآن" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s من الآن" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d سنة" +msgstr[1] "%(num)d سنة" +msgstr[2] "%(num)d سنتين" +msgstr[3] "%(num)d سنوات" +msgstr[4] "%(num)d سنوات" +msgstr[5] "%(num)d سنوات" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d شهر" +msgstr[1] "%(num)d شهر" +msgstr[2] "%(num)d شهرين" +msgstr[3] "%(num)d أشهر" +msgstr[4] "%(num)d أشهر" +msgstr[5] "%(num)d أشهر" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d أسبوع" +msgstr[1] "%(num)d أسبوع" +msgstr[2] "%(num)d أسبوعين" +msgstr[3] "%(num)d أسابيع" +msgstr[4] "%(num)d أسبوع" +msgstr[5] "%(num)d أسابيع" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d يوم" +msgstr[1] "%(num)d يوم" +msgstr[2] "%(num)d يومين" +msgstr[3] "%(num)d أيام" +msgstr[4] "%(num)d يوم" +msgstr[5] "%(num)d أيام" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ساعة" +msgstr[1] "%(num)d ساعة" +msgstr[2] "%(num)d ساعتين" +msgstr[3] "%(num)d ساعات" +msgstr[4] "%(num)d ساعة" +msgstr[5] "%(num)d ساعات" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d دقيقة" +msgstr[1] "%(num)d دقيقة" +msgstr[2] "%(num)d دقيقتين" +msgstr[3] "%(num)d دقائق" +msgstr[4] "%(num)d دقيقة" +msgstr[5] "%(num)d دقيقة" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d سنة" +msgstr[1] "%(num)d سنة" +msgstr[2] "%(num)d سنتين" +msgstr[3] "%(num)d سنوات" +msgstr[4] "%(num)d سنة" +msgstr[5] "%(num)d سنوات" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d شهر" +msgstr[1] "%(num)d شهر" +msgstr[2] "%(num)d شهرين" +msgstr[3] "%(num)d أشهر" +msgstr[4] "%(num)d شهر" +msgstr[5] "%(num)d أشهر" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d أسبوع" +msgstr[1] "%(num)d أسبوع" +msgstr[2] "%(num)d أسبوعين" +msgstr[3] "%(num)d أسابيع" +msgstr[4] "%(num)d أسبوع" +msgstr[5] "%(num)d أسابيع" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d يوم" +msgstr[1] "%(num)d يوم" +msgstr[2] "%(num)d يومين" +msgstr[3] "%(num)d أيام" +msgstr[4] "%(num)d يوم" +msgstr[5] "%(num)d أيام" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ساعة" +msgstr[1] "%(num)d ساعة" +msgstr[2] "%(num)d ساعتين" +msgstr[3] "%(num)d ساعات" +msgstr[4] "%(num)d ساعة" +msgstr[5] "%(num)d ساعات" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d دقيقة" +msgstr[1] "%(num)d دقيقة" +msgstr[2] "%(num)d دقيقتين" +msgstr[3] "%(num)d دقائق" +msgstr[4] "%(num)d دقيقة" +msgstr[5] "%(num)d دقيقة" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d61abbd2c1e27db4802f6e8b76f75cb61a20287a GIT binary patch literal 9155 zcmeHLTWs7!6rIxY3Q)@X4O1W`X>qcfK4`WqrBD#BLRA73#LM0FZX9;)#r7sC0s(0g zN)QrMLVSUM0O^ZINkJ+?fRGU4AtWS(>>tDjA3Ve#5+Hs!*Piw6+T%1xu_-1X;03^+fMjRkk&G<{t^yLj8A$wt0$&Ew z_+JS89Y}UAJSxB&ft~1&0`bS5$3L<&4W#iu7yUm(|D2;4U(-Oc_bKoq;4eTL@05;!UnB4y;CbM;0qMCZAnAQ9siU%+r8Fz$bxYz}J9_7BcoY z@O>ch*BsB-i@lsUtc{A)G-FBfeB%4_XH8rcfmU4oboTqWAefJiIr!%ekFS9buuFG#Il+ZPIs z>XGJhF>a*M_Y-0FuS*0j0U{*+rQkmgnttumzCsu6A9T@vK)IxKL)TK=$Kghb{kftv z!YhqdO7u`-3}wYo%4{X>e%wemL#eRCaMv!Rfc4;}`lmHRbTrda0zF#v!@9mXm18*`jF{%~F#|300QZlW~S=NHpcFnR6t% za`yhJnztm{$-HjJtlwXi^R`xzsVCB-a&0N?$Q+N6b}YLxCZ0o^%eY7iZ5|_{*|T|^ ziRaBmO-3_p^LWnWoGe>5Ph#VlB3&6PNt4YJ$XJRv)!>6>)ruM< zPM8x4;S&wk0BT{Z74%_^74SSWRHtgGB}Xr7N}-CjwxBc5^XgU>fSsU0W=X|2 zpP&=OkhDZJlk`l(8T8etku>6nrrk$Mgh@JEHP!cuuvw>~+RkhdBeq%b;%*t7=hG1~j#t;p?EF=Xlq;QV~z7-MnkiaVnYK-jR`!9*4~81#Ofb?G5~` zK}p!@Rjqs0-_hIMvEkYcSJfw%?n!lAi4@5RV zE34~zG+aTml&g%Knb(bChOgeDJE6-N?vK^6u|z9Ix!SbKc7_`jziVe#t>Hm4Yh<%2 zzLuvrq}gm5&2-T0L$i;Xo#|BSvg~rcWJ%DzG@GU;me*zJbc3+JAHo$7uEg7a{e8n5 zci(aMG!fnecc;DW?n~Z8(+hz&?rrxb-D!9K-=ksdpE1-ltosIhneiscCvQh&g!U8e z^LDtnz3t7DXgwWdF&42y(g|7o`-YkV;7yQSX%5>&_?>`nK zo^r@c(izuU(JUt$VwZfb{dYnt5m&ai1}?R!IPs7|x|0sKR*MpkC32+Qgt7w(ezuBs z57Lgu-M76*-Q65-CkJqHPP)4p=n3~t9{$Wj$HN$ka;z?kGqY*`qq1gWIFn!X#^_{i z_%;<2s5=>v&%s2?RN}$j>wow(B*Kj`p?4p>5DIBOnTX|%6zIhtpHh=jVRSH=>D@Tb z#1DwPZY~nkTF^shBl0NX0}<&Q475xI zH8LL7mHRq6GYG9aK4n+8ofY$b2Xpq)k>YxFK aX?eTvVku60PcZitsQ4c^*av7sV1EH-)-8(w literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..4e4c151e7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,555 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-12-16 02:59+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Humanize" +msgstr "عمل صفة بشرية" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f مليون" +msgstr[1] "%(value).1f مليون" +msgstr[2] "%(value).1f مليونان" +msgstr[3] "%(value).1f مليون" +msgstr[4] "%(value).1f مليون" +msgstr[5] "%(value).1f مليون" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s مليون" +msgstr[1] "%(value)s مليون" +msgstr[2] "%(value)s مليون" +msgstr[3] "%(value)s ملايين" +msgstr[4] "%(value)s مليون" +msgstr[5] "%(value)s مليون" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f مليار" +msgstr[1] "%(value).1f مليار" +msgstr[2] "%(value).1f ملياران" +msgstr[3] "%(value).1f مليار" +msgstr[4] "%(value).1f مليار" +msgstr[5] "%(value).1f مليار" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s مليار" +msgstr[1] "%(value)s مليار" +msgstr[2] "%(value)s مليار" +msgstr[3] "%(value)s مليار" +msgstr[4] "%(value)s مليار" +msgstr[5] "%(value)s مليار" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ترليون" +msgstr[1] "%(value).1f ترليون" +msgstr[2] "%(value).1f ترليونان" +msgstr[3] "%(value).1f ترليونات" +msgstr[4] "%(value).1f ترليون" +msgstr[5] "%(value).1f ترليون" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ترليون" +msgstr[1] "%(value)s ترليون" +msgstr[2] "%(value)s ترليون" +msgstr[3] "%(value)s ترليون" +msgstr[4] "%(value)s ترليون" +msgstr[5] "%(value)s ترليون" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f كوادرليون" +msgstr[1] "%(value).1f كوادرليون" +msgstr[2] "%(value).1f كوادرليون" +msgstr[3] "%(value).1f كوادرليون" +msgstr[4] "%(value).1f كوادرليون" +msgstr[5] "%(value).1f كوادرليون" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s كوادرليون" +msgstr[1] "%(value)s كوادرليون" +msgstr[2] "%(value)s كوادرليون" +msgstr[3] "%(value)s كوادرليون" +msgstr[4] "%(value)s كوادرليون" +msgstr[5] "%(value)s كوادرليون" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f كوينتيليون" +msgstr[1] "%(value).1f كوينتيليون" +msgstr[2] "%(value).1f كوينتيليون" +msgstr[3] "%(value).1f كوينتيليون" +msgstr[4] "%(value).1f كوينتيليون" +msgstr[5] "%(value).1f كوينتيليون" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s كوينتيليون" +msgstr[1] "%(value)s كوينتيليون" +msgstr[2] "%(value)s كوينتيليون" +msgstr[3] "%(value)s كوينتيليون" +msgstr[4] "%(value)s كوينتيليون" +msgstr[5] "%(value)s كوينتيليون" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f سكستيليون" +msgstr[1] "%(value).1f سكستيليون" +msgstr[2] "%(value).1f سكستيليون" +msgstr[3] "%(value).1f سكستيليون" +msgstr[4] "%(value).1f سكستيليون" +msgstr[5] "%(value).1f سكستيليون" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s سكستيليون" +msgstr[1] "%(value)s سكستيليون" +msgstr[2] "%(value)s سكستيليون" +msgstr[3] "%(value)s سكستيليون" +msgstr[4] "%(value)s سكستيليون" +msgstr[5] "%(value)s سكستيليون" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f سبتيليون" +msgstr[1] "%(value).1f سبتيليون" +msgstr[2] "%(value).1f سبتيليون" +msgstr[3] "%(value).1f سبتيليون" +msgstr[4] "%(value).1f سبتيليون" +msgstr[5] "%(value).1f سبتيليون" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s سبتيليون" +msgstr[1] "%(value)s سبتيليون" +msgstr[2] "%(value)s سبتيليون" +msgstr[3] "%(value)s سبتيليون" +msgstr[4] "%(value)s سبتيليون" +msgstr[5] "%(value)s سبتيليون" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f أقتيليون" +msgstr[1] "%(value).1f أقتيليون" +msgstr[2] "%(value).1f أقتيليون" +msgstr[3] "%(value).1f أقتيليون" +msgstr[4] "%(value).1f أقتيليون" +msgstr[5] "%(value).1f أقتيليون" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s أقتيليون" +msgstr[1] "%(value)s أقتيليون" +msgstr[2] "%(value)s أقتيليون" +msgstr[3] "%(value)s أقتيليون" +msgstr[4] "%(value)s أقتيليون" +msgstr[5] "%(value)s أقتيليون" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f نانليون" +msgstr[1] "%(value).1f نانليون" +msgstr[2] "%(value).1f نانليون" +msgstr[3] "%(value).1f نانليون" +msgstr[4] "%(value).1f نانليون" +msgstr[5] "%(value).1f نانليون" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s نانليون" +msgstr[1] "%(value)s نانليون" +msgstr[2] "%(value)s نانليون" +msgstr[3] "%(value)s نانليون" +msgstr[4] "%(value)s نانليون" +msgstr[5] "%(value)s نانليون" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f ديسيليون" +msgstr[1] "%(value).1f ديسيليون" +msgstr[2] "%(value).1f ديسيليون" +msgstr[3] "%(value).1f ديسيليون" +msgstr[4] "%(value).1f ديسيليون" +msgstr[5] "%(value).1f ديسيليون" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ديسيليون" +msgstr[1] "%(value)s ديسيليون" +msgstr[2] "%(value)s ديسيليون" +msgstr[3] "%(value)s ديسيليون" +msgstr[4] "%(value)s ديسيليون" +msgstr[5] "%(value)s ديسيليون" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f جوجول" +msgstr[1] "%(value).1f جوجول" +msgstr[2] "%(value).1f جوجول" +msgstr[3] "%(value).1f جوجول" +msgstr[4] "%(value).1f جوجول" +msgstr[5] "%(value).1f جوجول" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s جوجول" +msgstr[1] "%(value)s جوجول" +msgstr[2] "%(value)s جوجول" +msgstr[3] "%(value)s جوجول" +msgstr[4] "%(value)s جوجول" +msgstr[5] "%(value)s جوجول" + +msgid "one" +msgstr "واحد" + +msgid "two" +msgstr "إثنان" + +msgid "three" +msgstr "ثلالثة" + +msgid "four" +msgstr "أربعة" + +msgid "five" +msgstr "خمسة" + +msgid "six" +msgstr "ستة" + +msgid "seven" +msgstr "سبعة" + +msgid "eight" +msgstr "ثمانية" + +msgid "nine" +msgstr "تسعة" + +msgid "today" +msgstr "اليوم" + +msgid "tomorrow" +msgstr "غداً" + +msgid "yesterday" +msgstr "أمس" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s مضت" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "منذ %(count)s ساعة" +msgstr[1] "منذ ساعة" +msgstr[2] "منذ %(count)s ساعة" +msgstr[3] "منذ %(count)s ساعة" +msgstr[4] "منذ %(count)s ساعة" +msgstr[5] "منذ %(count)s ساعة" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "منذ %(count)s دقيقة" +msgstr[1] "منذ دقيقة" +msgstr[2] "منذ %(count)s دقيقة" +msgstr[3] "منذ %(count)s دقيقة" +msgstr[4] "منذ %(count)s دقيقة" +msgstr[5] "منذ %(count)s دقيقة" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "منذ %(count)s ثانية" +msgstr[1] "منذ ثانية" +msgstr[2] "منذ %(count)s ثانيتين" +msgstr[3] "منذ %(count)s ثواني" +msgstr[4] "منذ %(count)s ثانية" +msgstr[5] "منذ %(count)s ثانية" + +msgid "now" +msgstr "الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s ثواني من الآن" +msgstr[1] "منذ ثانية من الآن" +msgstr[2] "%(count)s ثواني من الآن" +msgstr[3] "%(count)s ثواني من الآن" +msgstr[4] "%(count)s ثواني من الآن" +msgstr[5] "%(count)s ثواني من الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s دقائق من الآن" +msgstr[1] "منذ دقيقة من الآن" +msgstr[2] "%(count)s دقائق من الآن" +msgstr[3] "%(count)s دقائق من الآن" +msgstr[4] "%(count)s دقائق من الآن" +msgstr[5] "%(count)s دقائق من الآن" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s ساعات من الآن" +msgstr[1] "منذ ساعة من الآن" +msgstr[2] "%(count)s ساعات من الآن" +msgstr[3] "%(count)s ساعات من الآن" +msgstr[4] "%(count)s ساعات من الآن" +msgstr[5] "%(count)s ساعات من الآن" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s من الآن" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d سنة" +msgstr[1] "%d سنة" +msgstr[2] "%d سنتين" +msgstr[3] "%d سنوات" +msgstr[4] "%d سنة" +msgstr[5] "%d سنة" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d شهر" +msgstr[1] "%d شهر" +msgstr[2] "%d شهرين" +msgstr[3] "%d أشهر" +msgstr[4] "%d شهر" +msgstr[5] "%d شهر" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d اسبوع" +msgstr[1] "%d اسبوع" +msgstr[2] "%d أسبوعين" +msgstr[3] "%d أسابيع" +msgstr[4] "%d اسبوع" +msgstr[5] "%d اسبوع" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d يوم" +msgstr[1] "%d يوم" +msgstr[2] "%d يومان" +msgstr[3] "%d أيام" +msgstr[4] "%d يوم" +msgstr[5] "%d يوم" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ساعة" +msgstr[1] "%d ساعة واحدة" +msgstr[2] "%d ساعتين" +msgstr[3] "%d ساعات" +msgstr[4] "%d ساعة" +msgstr[5] "%d ساعة" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d دقيقة" +msgstr[1] "%d دقيقة" +msgstr[2] "%d دقيقتين" +msgstr[3] "%d دقائق" +msgstr[4] "%d دقيقة" +msgstr[5] "%d دقيقة" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d سنة" +msgstr[1] "%d سنة" +msgstr[2] "%d سنتين" +msgstr[3] "%d سنوات" +msgstr[4] "%d سنة" +msgstr[5] "%d سنة" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d شهر" +msgstr[1] "%d شهر" +msgstr[2] "%d شهرين" +msgstr[3] "%d أشهر" +msgstr[4] "%d شهر" +msgstr[5] "%d شهر" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d أسبوع" +msgstr[1] "%d أسبوع" +msgstr[2] "%d أسبوعين" +msgstr[3] "%d أسابيع" +msgstr[4] "%d أسبوع" +msgstr[5] "%d أسبوع" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d يوم" +msgstr[1] "%d يوم" +msgstr[2] "%d يومان" +msgstr[3] "%d أيام" +msgstr[4] "%d يوم" +msgstr[5] "%d يوم" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ساعة" +msgstr[1] "%d ساعة واحدة" +msgstr[2] "%d ساعتين" +msgstr[3] "%d ساعات" +msgstr[4] "%d ساعة" +msgstr[5] "%d ساعة" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d دقيقة" +msgstr[1] "%d دقيقة" +msgstr[2] "%d دقيقتين" +msgstr[3] "%d دقائق" +msgstr[4] "%d دقيقة" +msgstr[5] "%d دقيقة" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..049aab2348cf9dfdac9efaa50f97eee7b49f9b66 GIT binary patch literal 3468 zcmai!O>7)B7={fEe_JTf0;QB6mlB$^%>D#bNjC%mX{#0*h^hbw4#?f{PA2Ty>DZee zjvOlW0s@IbFL0=Y$e}_A^@1XV$bkzNgt#Jsgg9}96B6$?XVR?ekrX9RWAMW8jbADEN=l504c3OOC5x4fEF=e*z3o6~n!iuoz94qZB40jn5)@AwyZ6ywp|j6DI) zgS1W$qm-qaA{ zLAwuEkE7FG>ATy9PK|Pf)aBnW?T@}qYImdK6UbvoV``7l-{{zi==9`xwbAAm(oQGU z>VLIZwgS$unrNNq&d`zpsT)`?q$#Ze&akRmHsB4b7keVk0`8slRE1W**bD1ME{E(p z%4=bFP`05L_eA4mH>CJEG(4o0QfRm*l(T2JulRX0Jf!(KGd!e)vSs*As-G$HhSWfs z4BtWYQbf*x7)a1Sl4-JNSvy^ktgU+)Q^NK#(XnY)j*O1QvSY=#;UdvH%(OGzMIcw1 zikV84WOS{;EM`WoNX1OL#*Afl5x-1IW_2vq@!!>12CrS!Y+V{FGm_^sy(C*UIvYo? z$;_ZaGW!!| z$s3JkeezhnQLn=ootG;qt-0-+jOr(%iKltvMDuv#SRJi$P8b_4WI~yausUn<7ll%( z;pb$EaPVjFHW)tF$%oZcwe_>OMaP$ zn&FM{>B>-5rQ*Hym0!G(cQa%x&U4vXsGd35`r0eszC=g6ydY`ba>eN`TMN}Q7e~Bo zE>zFl>WTdPl|fm@rMv(D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..50f4794e0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "ᵘ" + +msgid "st" +msgstr "ᵘ" + +msgid "nd" +msgstr "ᵘ" + +msgid "rd" +msgstr "ᵘ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f millón" +msgstr[1] "%(value).1f millones" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millón" +msgstr[1] "%(value)s millones" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billones" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s billón" +msgstr[1] "%(value)s billones" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trillón" +msgstr[1] "%(value).1f trillones" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trillón" +msgstr[1] "%(value)s trillones" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f cuatrillón" +msgstr[1] "%(value).1f cuatrillones" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s cuatrillón" +msgstr[1] "%(value)s cuatrillones" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillón" +msgstr[1] "%(value).1f quintillones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillones" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillón" +msgstr[1] "%(value).1f sextillones" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillón" +msgstr[1] "%(value)s sextillones" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillón" +msgstr[1] "%(value).1f septillones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillón" +msgstr[1] "%(value)s septillones" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillón" +msgstr[1] "%(value).1f octillones" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillón" +msgstr[1] "%(value)s octillones" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillón" +msgstr[1] "%(value).1f nonillones" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillón" +msgstr[1] "%(value)s nonillones" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillón" +msgstr[1] "%(value).1f decillones" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillón" +msgstr[1] "%(value)s decillones" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gúgol" +msgstr[1] "%(value).1f gúgol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gúgol" +msgstr[1] "%(value)s gúgol" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "trés" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "güei" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayeri" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "hai %(delta)s" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s dende agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bbaa517e133e41e10b6ce5b7d975f51c30861b1b GIT binary patch literal 5286 zcmchaTWl0n7{`yuMJp(vpa{xAt#pBDcU!Jo%B_GBsWhaZiM*WdoZSxH&UELprA1> zo9|q{Gc#wuTR#6BL)nkI26g8=#sqj`K7LTXU%=QB@CR@?_y@QioVSp%jo=2b9Xt+_ z{=CxPQ~V0-g8q-=kW{ap?Wv2G9gCRrV@KOL0!|JV@i30V&=! zkjC{hNc}CjE7E%up8?lGKMm4-7eMm6s@i{2`l7{Adj_Qbo&s+N2Nj3FyJ0`8SOV{d zT~+ogif<`iQv5{mbH%R}e^vY&q+!y&T z1L^+tARZ;w15&?vkn*-$v0v#=DEqLo2SFO&F~#SUE|gtVc3H8aSXJ$(6<<{PS&-)c zveI7%X&mR3{x*p15f*H*u+Y5mdI{e%yFpAbER+{oV=CRKt5CP1V#&jI2lcZJbqgx3 z6_v+PDPL45A5`|D_M`TYfwCw3Wo!qyQ(eb+2p9Wf1Kg#qY41^?y+iwe)|&Pg71|F} zXy0r`rTtEOkn%v~VN}{nRA?_^YlgX`ywNj6&kgONKGa@RDvv~{|K{sg(FGnamP1{Q zO6!Z)O!&NUke-|EsQXZBC$Ux*ZAtyN+3*EJekddYiEMh!eQUfTXE#%AtNoL$t`N-Xg8i zh|h{vRk9-PXSVPISCoBgOd7=i*K&Tl$xSiIB6ux4C@i^z;am7bYe-&dHCy>Pwm%ZO z(M78sC!`!DCt@p~Nh!in5u1I+h3DUDW^sG#dBq;Lo>krJ7ITVyTF)rcwUbrsvO@xlKIRjoQ=f)(z7(>u%KQ&Y7E=owqcbTbs>o&F1!I zb4O%)vMO!nS*Msk;!4SUhqjpSj5)503HcKao0Og}U6Kb~=cFw7#v#)l*`J$uf<7LCG_QoIGzEJYpP`Rf}AW{lb@d-kt5v8rhtY>*m?5`OVpl zS(LWJ*agOrD{QYUe8lE#n}V|l)J zO1i_s!dNWcG2;8<`L3>siHT01LRv)`-qjV2HAY#5=n_+1nYMvL0|(}2mFvv5^<$?< z8^f9$$GCmG$-2hN!m@jLVFbHa`hCZS4jS9%{HU*@bd3Xc!NDFV<@xqu%dZbL&&5>R zV40q3*KjhZ(GBWr8Zry)~4ww5g%!W1KY&w$8&5~ zG@UT;shJemGL45Doo33}i*QXGdGu-}s3guYX@&Yo1k*_2Cobuy6`fI>1CpLvakLs9 zV3NKq^O^w;ZTTvs^7cUt%sf7oJrflkzbk6ADlFTlB;2X1; zwiD@!x@t(NI-oQTS}UcJgcD0LnI6}qr=^%m4S8zBbY9}KO7oyKDIv#Ho;;q;NUU7{ z!1jb)7B^z7?NY`NU5O;@Z+ZJN(LuJyA+s;%jU_%TkqM=j)x-mFP|@MKe?dn$D7 z+!$H-x-omAL62fW&;+cjUTu1G)S6<$^2Q7^XFsC%kjYE4SMbMbjue;dnDN?>)_5JA zb)w&q+H}#cO_NK*rG;0b$)n%@p%>GsRDvmH*``GaXQ$6}q86;ii^A*`(xP8#DO|rC oJB6Nw0AExS5pcLe)9jVmi)=WE7ReLCVuV?v78dV{U7NPqzaJEnvH$=8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..85fc45a6c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,397 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Claude Paroz , 2013 +# Emin Mastizada , 2018,2020 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2020-01-12 06:40+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "İnsanlaşdır" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ci" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ci" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}cü" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}cü" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ci" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}cı" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ci" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ci" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}cu" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milyon" +msgstr[1] "%(value).1f milyon" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milyon" +msgstr[1] "%(value)s milyon" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milyard" +msgstr[1] "%(value).1f milyard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milyard" +msgstr[1] "%(value)s milyard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilyon" +msgstr[1] "%(value).1f trilyon" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilyon" +msgstr[1] "%(value)s trilyon" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrilyon" +msgstr[1] "%(value).1f kvadrilyon" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrilyon" +msgstr[1] "%(value)s kvadrilyon" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintilyon" +msgstr[1] "%(value).1f kvintilyon" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintilyon" +msgstr[1] "%(value)s kvintilyon" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstilyon" +msgstr[1] "%(value).1f sekstilyon" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstilyon" +msgstr[1] "%(value)s sekstilyon" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilyon" +msgstr[1] "%(value).1f septilyon" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilyon" +msgstr[1] "%(value)s septilyon" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilyon" +msgstr[1] "%(value).1f oktilyon" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilyon" +msgstr[1] "%(value)s oktilyon" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilyon" +msgstr[1] "%(value).1f nonilyon" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilyon" +msgstr[1] "%(value)s nonilyon" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f deçilyon" +msgstr[1] "%(value).1f deçilyon" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s deçilyon" +msgstr[1] "%(value)s deçilyon" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f quqol" +msgstr[1] "%(value).1f quqol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s quqol" +msgstr[1] "%(value)s quqol" + +msgid "one" +msgstr "bir" + +msgid "two" +msgstr "iki" + +msgid "three" +msgstr "üç" + +msgid "four" +msgstr "dörd" + +msgid "five" +msgstr "beş" + +msgid "six" +msgstr "altı" + +msgid "seven" +msgstr "yeddi" + +msgid "eight" +msgstr "səkkiz" + +msgid "nine" +msgstr "doqquz" + +msgid "today" +msgstr "bu gün" + +msgid "tomorrow" +msgstr "sabah" + +msgid "yesterday" +msgstr "dünən" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s əvvəl" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "bir saat əvvəl" +msgstr[1] "%(count)s saat əvvəl" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "bir dəqiqə əvvəl" +msgstr[1] "%(count)s dəqiqə əvvəl" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "bir saniyə əvvəl" +msgstr[1] "%(count)s saniyə əvvəl" + +msgid "now" +msgstr "indi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "bir saniyə sonra" +msgstr[1] "%(count)s saniyə sonra" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "bir dəqiqə sonra" +msgstr[1] "%(count)s dəqiqə sonra" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "bir saat sonra" +msgstr[1] "%(count)s saat sonra" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s bundan sonra" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d il" +msgstr[1] "%d il" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d həftə" +msgstr[1] "%d həftə" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dəqiqə" +msgstr[1] "%d dəqiqə" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d il" +msgstr[1] "%d il" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d həftə" +msgstr[1] "%d həftə" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dəqiqə" +msgstr[1] "%d dəqiqə" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed7b846242ba613bc842a1ac08f35843a4abd2b2 GIT binary patch literal 6653 zcmeHKU5pf26~4N#yR?Fex`Oy~aUGauw`aPW8DJWkH7nq50)Zf4qAwQRcX|rCtA?s- zW`>^#j3~;mKvr2ERzmh+cOQ5d{>?BwBohr$U#igfWbnlY4L;?ICDLH}ooE1qR64SAbH4cG(uD)4#W9FY7x0%m|urM&Vv zPc8yE^oN1#fKx!YX7_o|E_% zklyoMAjP{OZ4d8Eq z0@#OSN&h2>sgE&s7V;^H&wiY-laQx?q)&Z3=G5*$R(e z29kajNc`n1y?yy6(2XzA0@D6|N8)!S{y^dz65o_~RpL)1z9aEHi8mzP1fr$cJs`bb zL(0FDvLo?{)ISAMUVj5(8`(xol+GPP5(%hB$={bq!1yfYfcu2K1X9mzz+8n1SMIy5 z1=3iDNxe-2+w10s^0?!R_)KH2$J~TTxzKsXwzE7YjW2uPe$w94z&5#K5T9rTci;%R zBPTH{k&3GvE}UZBw)~4 zUrY}@y=76gl(fl}iXM=L4ZX%SeGICjO0_OPIH*>us;+g^ltn4VO43zyy`onGu40N> z%uigS=~|4Hq|-}QjF+T4Qdi1GjM+}BYH_be>PcEtjK-;Ll;cUv1f>;E)K|S$uPK^( zOfZGlRIP3axw$31u32ew{<^32_T1+Lwme4kZ3;II3H-yEFVR2Jf9P&g{92FWf)p2Hx7(y^hr>?g2nr;|) zA!|%$6T-BFLFzq*en^z8%UU5_5QO7WI3nHlZp#^dA)c>C~>*cWrOIRIV?Z`YJj|Xvk_}6lq&x-0B~#Dyp`b zmqu^^gjL+XZ%1ZRi$}4Bg^}5=m2|W~rNB2GR4qT#0zW8Hd#ZGqWOnFA%`9+j)D_L* zz-I0}7JIdxT((%u@il8WJ!V%Ib2(KZUomwOyP(T zV>D)G^W)3T;v2l+N!^(j2WINyyynf+&+ zz)jvJtKelXDUqzYG2D8^1BJZEnznMFPMvWkQL#Hta%F;yly4&J@ zR*CN&@P`(PJK;eeZ7UP-60MAVn{G4ve*2yYF%l~iWVEYHdrthN=C23Y;U5Uio(VA$ zD-&e2t4y48%bs&i+js3*D)vSE5}0Ci_~??M^Ni!>{YRskfre8UQaRq&UyIX4al2K0 zd%EQ*p#CqE!BZaa8dUpU7p}Btard02n)r)bD%n=@y?y3F)b9NquclNt5RiVnd7c-p z#LmvSzZPXmUPb2uzQCZ)@1}}p<{p>-?{gWy%$ptYzq`-!9N&^>9fx|_`!m8?CzBmN ziIX4txI&`)5itZsd678h@R#B={=m4GiTm}=Ak%Mee1$s~nH%&PdK>?O7!tzQJ9Dn# J+L?1T{{}TQTFU?c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..565b5b34e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,389 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2014-2015 +# znotdead , 2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-22 16:47+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Humanize" +msgstr "Ачалавечваньне" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}і" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}і" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ы" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ы" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s мільён" +msgstr[1] "%(value)s мільёны" +msgstr[2] "%(value)s мільёнаў" +msgstr[3] "%(value)s мільёнаў" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value).s мільярд" +msgstr[1] "%(value)s мільярды" +msgstr[2] "%(value)s мільярдаў" +msgstr[3] "%(value)s мільярдаў" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трыльён" +msgstr[1] "%(value)s трыльёны" +msgstr[2] "%(value)s трыльёнаў" +msgstr[3] "%(value)s трыльёнаў" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрыльён" +msgstr[1] "%(value)s квадрыльёны" +msgstr[2] "%(value)s квадрыльёнаў" +msgstr[3] "%(value)s квадрыльёнаў" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квінтыльён" +msgstr[1] "%(value)s квінтыльёны" +msgstr[2] "%(value)s квінтыльёнаў" +msgstr[3] "%(value)s квінтыльёнаў" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s сэкстыльён" +msgstr[1] "%(value)s сэкстыльёны" +msgstr[2] "%(value)s сэкстыльёнаў" +msgstr[3] "%(value)s сэкстыльёнаў" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s сэптыльён" +msgstr[1] "%(value)s сэптыльёны" +msgstr[2] "%(value)s сэптыльёнаў" +msgstr[3] "%(value)s сэптыльёнаў" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s актыльён" +msgstr[1] "%(value)s актыльёны" +msgstr[2] "%(value)s актыльёнаў" +msgstr[3] "%(value)s актыльёнаў" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нанільён" +msgstr[1] "%(value)s нанільёны" +msgstr[2] "%(value)s нанільёнаў" +msgstr[3] "%(value)s нанільёнаў" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дэцыльён" +msgstr[1] "%(value)s дэцыльёны" +msgstr[2] "%(value)s дэцыльёнаў" +msgstr[3] "%(value)s дэцыльёнаў" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ґуґал" +msgstr[1] "%(value)s ґуґлы" +msgstr[2] "%(value)s ґуґлаў" +msgstr[3] "%(value)s ґуґлаў" + +msgid "one" +msgstr "адзін" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "тры" + +msgid "four" +msgstr "чатыры" + +msgid "five" +msgstr "пяць" + +msgid "six" +msgstr "шэсьць" + +msgid "seven" +msgstr "сем" + +msgid "eight" +msgstr "восем" + +msgid "nine" +msgstr "дзевяць" + +msgid "today" +msgstr "сёньня" + +msgid "tomorrow" +msgstr "заўтра" + +msgid "yesterday" +msgstr "ўчора" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s таму" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s гадзіну таму" +msgstr[1] "%(count)s гадзіны таму" +msgstr[2] "%(count)s гадзінаў таму" +msgstr[3] "%(count)s гадзінаў таму" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s хвіліну таму" +msgstr[1] "%(count)s хвіліны таму" +msgstr[2] "%(count)s хвілінаў таму" +msgstr[3] "%(count)s хвілінаў таму" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s сэкунду таму" +msgstr[1] "%(count)s сэкунды таму" +msgstr[2] "%(count)s сэкундаў таму" +msgstr[3] "%(count)s сэкундаў таму" + +msgid "now" +msgstr "зараз" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "праз %(count)s сэкунду" +msgstr[1] "праз %(count)s сэкунды" +msgstr[2] "праз %(count)s сэкундаў" +msgstr[3] "праз %(count)s сэкундаў" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "праз %(count)s хвіліну" +msgstr[1] "праз %(count)s хвіліны" +msgstr[2] "праз %(count)s хвілінаў" +msgstr[3] "праз %(count)s хвілінаў" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "праз %(count)s гадзіну" +msgstr[1] "праз %(count)s гадзіны" +msgstr[2] "праз %(count)s гадзінаў" +msgstr[3] "праз %(count)s гадзінаў" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "праз %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d год" +msgstr[1] "%(num)d гадоў" +msgstr[2] "%(num)d гадоў" +msgstr[3] "%(num)d гадоў" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месяц" +msgstr[1] "%(num)d месяцаў" +msgstr[2] "%(num)d месяцаў" +msgstr[3] "%(num)d месяцаў" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d тыдзень" +msgstr[1] "%(num)d тыдняў" +msgstr[2] "%(num)d тыдняў" +msgstr[3] "%(num)d тыдняў" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d дзень" +msgstr[1] "%(num)d дзён" +msgstr[2] "%(num)d дзён" +msgstr[3] "%(num)d дзён" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d гадзіна" +msgstr[1] "%(num)d гадзін" +msgstr[2] "%(num)d гадзін" +msgstr[3] "%(num)d гадзін" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d хвіліна" +msgstr[1] "%(num)d хвілін" +msgstr[2] "%(num)d хвілін" +msgstr[3] "%(num)d хвілін" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d год" +msgstr[1] "%(num)d гадоў" +msgstr[2] "%(num)d гадоў" +msgstr[3] "%(num)d гадоў" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месяц" +msgstr[1] "%(num)d месяцаў" +msgstr[2] "%(num)d месяцаў" +msgstr[3] "%(num)d месяцаў" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d тыдзень" +msgstr[1] "%(num)d тыдняў" +msgstr[2] "%(num)d тыдняў" +msgstr[3] "%(num)d тыдняў" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d дзень" +msgstr[1] "%(num)d дзён" +msgstr[2] "%(num)d дзён" +msgstr[3] "%(num)d дзён" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d гадзіна" +msgstr[1] "%(num)d гадзін" +msgstr[2] "%(num)d гадзін" +msgstr[3] "%(num)d гадзін" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d хвіліна" +msgstr[1] "%(num)d хвілін" +msgstr[2] "%(num)d хвілін" +msgstr[3] "%(num)d хвілін" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..85cdff8ffe6d49c9c51440b8c5bfa93f3598b093 GIT binary patch literal 4823 zcmds(U2GIp6vwYxMHcY`6+ux4wbBJ#Tbh#QEU1I+kWYcPgR>y{xdO`IH6bsZ=gGaG1pPj6CHM{q z*X#=rp|P^yC6La&0+OFU!34M*hs41>AnC^iKLaVQA3@qTf4*n879=|klKwrxiy)nM z4Wv~4A@~<~C**$w=S3KM0P;t3l0j737!!A5Ty6~1f=uM33)>Ba}c4k z8L@sDLLci=D&weXN_8E}u-v-J4Q;_U`5c)PWHB!T3Amwj^;3kmb zcu{b-;H!df3aWy-U_tPp;JDyP!FNGA?-WSqeJu3ngghxYBlMR+vi}A|8Qogl3(}zc zRR_Hj*vF#uFagzw`~EalZ$*wn()*a0T6w5bPAB`%XPW18v0?V6Mh|5>vvY?*k3W7xgst zaR(+1q{Y2gH@g!05v2P@JwqdoN%w}ecVu|ZR-%@qs764_nnqsIjS;AZm0W?tpkK@7 zG(&Hx$?$Z8RWqGx7^;yAxN1=38~ikCbVF~jYNj*Nc7t6r-Ts1-F&ixB(rS96*ZqZN zT8j@gn$DpdZD!d-X*UMytDZ096UyGORN_LA${i(I$dVd(Zi zZ39Uy;~C+6pKne=OY1SN)S@RLY(1n{_KjsFWO<#OglumhBVqgN~& zIioL~0UBmT)0Ldm*>>O%N>UXQ5G}hVCRR&{B<7m1SrVe2@y%$}tchJ=8Mo$_uztdXg_S+RLaN_Hlba%VzLbV-Rs zs;hfdCq`sDI!Nv_72V1ywqd3u#nd_M)6!Gbr)Si>qUB;~Bfk;mx>`_FF86UIpOQ8e za;jo#_zZLm*!EB=9v>MQiP_{%%koj$6Zhh*A}1Wg`_*_fvSZthEwwjF#5yC-p?$cH zkj91(v&~2C_)t#K^d2cafbQpZ@5_B#Tq9tC3wf z`jW_74Kr`0Bz?#gt=?ph@=K?7Ms@iX> zGvk!7TyiF`a|(C6`lB0Oa3+FFQ%acwoe#^~cs#^;0n{}ouN1N}fTMF-+cFsE!&J?od<*zQzCd-ZcOHO&NvuS_ba%ew_ zT12&*N8Y&DxOcj8q}A@a69f( zM&(E_s6gD_A|it$@7~t$^B0=!a%SBCX5bxJKg!?^a7t7%Ts!ao4!n8My|=!ItK+YV z@T$gsKvhK`v-DXIKImq8g{*mkWs$w+nTq55go8QtcLY;E-En0G|>_)CB};gqkFjAy6S`y9alls8G?F kVU-h9R65eV?hHZTQlp>g7Q;L4_Y_@q=A3t%?=T+!18~2g^#A|> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..a4f6ad660 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,332 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# arneatec , 2022 +# Georgi Kostadinov , 2012 +# Jannis Leidel , 2011 +# Todor Lubenov , 2011,2015 +# Venelin Stoykov , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2022-01-14 11:48+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Очовечаване" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ти" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ен" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ви" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ри" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ти" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ти" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ти" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ти" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ми" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ми" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ти" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милион" +msgstr[1] "%(value)s милиона" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s милиард" +msgstr[1] "%(value)s милиарда" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трилион" +msgstr[1] "%(value)s трилиона" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрилион" +msgstr[1] "%(value)s квадрилиона" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтилион" +msgstr[1] "%(value)s квинтилиона" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстилион" +msgstr[1] "%(value)s секстилиона" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септилион" +msgstr[1] "%(value)s септилиона" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октилион" +msgstr[1] "%(value)s октилиона" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нонилион" +msgstr[1] "%(value)s нонилиона" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s децилион" +msgstr[1] "%(value)s децилиона" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугола" + +msgid "one" +msgstr "един" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четири" + +msgid "five" +msgstr "пет" + +msgid "six" +msgstr "шест" + +msgid "seven" +msgstr "седем" + +msgid "eight" +msgstr "осем" + +msgid "nine" +msgstr "девет" + +msgid "today" +msgstr "днес" + +msgid "tomorrow" +msgstr "утре" + +msgid "yesterday" +msgstr "вчера" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "преди %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "преди един час" +msgstr[1] "преди %(count)s часа" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "преди минута" +msgstr[1] "преди %(count)s минути" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "преди секунда" +msgstr[1] "преди %(count)s секунди" + +msgid "now" +msgstr "сега" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "след секунда" +msgstr[1] "след %(count)s секунди" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "след минута" +msgstr[1] "след %(count)s минути" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "след един час" +msgstr[1] "след %(count)s часа" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "след %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d година" +msgstr[1] "%(num)d години" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месец" +msgstr[1] "%(num)d месеца" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d седмица" +msgstr[1] "%(num)d седмици" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d ден" +msgstr[1] "%(num)d дни" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d час" +msgstr[1] "%(num)d часа" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минута" +msgstr[1] "%(num)d минути" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d година" +msgstr[1] "%(num)d години" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d месец" +msgstr[1] "%(num)d месеца" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d седмица" +msgstr[1] "%(num)d седмици" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d ден" +msgstr[1] "%(num)d дни" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d час" +msgstr[1] "%(num)d часа" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минута" +msgstr[1] "%(num)d минути" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..042122a7d0882d039fa33770a13e7634c59725fe GIT binary patch literal 4026 zcmb7`Uu+ab9LEPm(eqCc!T;i*R9eWkcPJJPi-uAXq79Xt7>zz`Z|AOC?`DqOx&BGi z;Dh#o7@jJMB!z_Dk%kb$gTWV!`s}-j(X0s%COna-(O`_<-|lo6q_dy>{oUXE zW_GW?Zdg0RFuE|G!hClPW4pjJci@6ixs$PN;4#B5!EVUkfzN?AjJ{(nV_P8ifuw&M zq___a=fEA1e>D6Dq&%H>MLZ04LY@LCeipRAAB=p{$eZqFj6**FZU-F@CUz1;N;YG7 z8hjk`EVvo`2BanZWb8kKD4hj{*Ny#mkn-Iy`kO}or{Ukme#>ypI>zpS|2mNJtq1P~ zH-e|o%gtavNKecZ^$!N-ti+UU=M_+#_9pnc&po&;%6 zp2nmaX>5(a9s#M&rGxf+119bNHcYA)%MSAb;W?+XO5+JkdOn?vPE53yVavj?9@kBn zbgrJqdsil&Nb`o8n;VT(cP0N@DaCEa+PeW zD<}9R>9m*N*r4xN)=TpUV_gX6w531d80-u+3>U^oyzM5za-tU zs_iUqhR>U6UD=rRST#xOi%O$w6Xj%*XM!?egJPA9UdgH!+%78gIIpTwcl+O;jkJEK zj(rNADs!nOk{n~3&3%zq(pjD{(k^5)K5^8NM=vIucBgs+81>S0ffiM+NBIo46(`FK~e+!?cFQKgQEit@BI zC7%Gov|`~Jd??$`*x%==`*~2q0WnWD1NMod4w|#BpJX`uDTPrWibM|Q2b@&mx;PRI}Tzhn=d9_%! z-BM3pmG>b?7OQqqSUF*rvwXjhMZ4tku2HQk+1}oXiHROfDcypYq=?>VQ41)U@ZJ&G z+npLZG&H!l{7g?eHK3#x5@k(Qus$s&b#J9)yK*njkJ_FubpM;VgVydvKYCU{c-ElI zE60_^EZ;ri>bT4-ACaly6795gPdco~N4GK02KCQ^+U3?c+Bo^G*3i~?E~rljwX4l4p!gNIoC@kE zf?9OF5;u^7n_HT;hQeAJFJPBi72MALNl=>!8;|Wy-g+uwWnM^hBA|0~Eo@Y)-K346^{qXd z)Do{DIr_G88auFbB`Zik>-l2IF}{|#k`_+w7O_0}D#~vjieAsMpoUy{yYX_JhHyF* zF5~np{6Dd{Cryf6>KfNor_6Y*2{=sD;plFLMM}IycaC;t~#t8UuQ2mAA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..2b60f57c9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tahmid Rafi \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "তম" + +msgid "st" +msgstr "ম" + +msgid "nd" +msgstr "য়" + +msgid "rd" +msgstr "য়" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f মিলিয়ন" +msgstr[1] "%(value).1f মিলিয়ন" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s মিলিয়ন" +msgstr[1] "%(value)s মিলিয়ন" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f বিলিয়ন" +msgstr[1] "%(value).1f বিলিয়ন" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s বিলিয়ন" +msgstr[1] "%(value)s বিলিয়ন" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ট্রিলিয়ন" +msgstr[1] "%(value).1f ট্রিলিয়ন" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ট্রিলিয়ন" +msgstr[1] "%(value)s ট্রিলিয়ন" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s কোয়াড্রিলিয়ন" +msgstr[1] "%(value)s কোয়াড্রিলিয়ন" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s কুইন্টিলিয়ন" +msgstr[1] "%(value)s কুইন্টিলিয়ন" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s সেক্সটিলিয়ন" +msgstr[1] "%(value)s সেক্সটিলিয়ন" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s সেপ্টিলিয়ন" +msgstr[1] "%(value)s সেপ্টিলিয়ন" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s অক্টিলিয়ন" +msgstr[1] "%(value)s অক্টিলিয়ন" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s ননিলিয়ন" +msgstr[1] "%(value)s ননিলিয়ন" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ডেসিলিয়ন" +msgstr[1] "%(value)s ডেসিলিয়ন" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s গোগোল" +msgstr[1] "%(value)s গোগোল" + +msgid "one" +msgstr "এক" + +msgid "two" +msgstr "দুই" + +msgid "three" +msgstr "তিন" + +msgid "four" +msgstr "চার" + +msgid "five" +msgstr "পাঁচ" + +msgid "six" +msgstr "ছয়" + +msgid "seven" +msgstr "সাত" + +msgid "eight" +msgstr "আট" + +msgid "nine" +msgstr "নয়" + +msgid "today" +msgstr "আজ" + +msgid "tomorrow" +msgstr "আগামীকাল" + +msgid "yesterday" +msgstr "গতকাল" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s আগে" + +msgid "now" +msgstr "এখন" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "এক সেকেন্ড আগে" +msgstr[1] "%(count)s সেকেন্ড আগে" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "এক মিনিট আগে" +msgstr[1] "%(count)s মিনিট আগে" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "এক ঘন্টা আগে" +msgstr[1] "%(count)s ঘন্টা আগে" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "এখন থেকে %(delta)s পরে" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "এখন থেকে এক সেকেন্ড পরে" +msgstr[1] "এখন থেকে %(count)s সেকেন্ড পরে" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "এখন থেকে এক মিনিট পরে" +msgstr[1] "এখন থেকে %(count)s মিনিট পরে" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "এখন থেকে এক ঘন্টা পরে" +msgstr[1] "এখন থেকে %(count)s ঘন্টা পরে" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e45c05ae350e0b1ad8f1683f6add09a20c04bd46 GIT binary patch literal 5850 zcmcJT%WoS+9LEPJv=|C~P#!IXDIrZlwDCGABzEc+`UtJmsG)>Ps1j)6o!HyhGwwd@ z#Pk3?fW!q3aG(d&6CeSH3M3v92mu$QiXPy=38_L{`2&!U_|ERcv3Dop5qp%`&;Gvi zo8P?Fv$Oei$ELRl(kSwS$iYp7OoP{M#s%r~TL>8fzW|lb4R8?Lx+&HtK&7A4d=1RP z{zUUP(1N}5)|gL$Bd{en0KNmN_+Nqhz~8mL`LpriW+}D+t&E7^i zFm*g7`l;15Dd{!zsYy#Lp-)pna`k+gR?_R{QO9oV$4yPU3H9DfjUhNX@mMZ~SbQ_#3qCOF> z;6x2cfL40?a1Qm~S5=e)w;98TO2bZ8J$qM%a?kRcBljnIUuueMGS?>AR)e6)( z&qP^f&hWbQ0&CVUyN-1vEc@2HEYQr{>3Qp@$5{Yh>lh1ofsWg`yk+OC+!MGh92g(9 zbG8jf>kMzWD(0Hslx63w@jSJs3KRCIjg&dX{J@&`nDDDCkY0fvt+LSJbdGtlMGuxD z>&fxus=MIvF~NgFs3OWCD|2g}vs!^3@pvEw9j*jHy^zf|o6WI6#d8<=@>ogMvhj#k zQPs7x3to04GkbFO_}bWWV|M1K6ag3L(@GtK3-DBC>s988XDBxK74^vUi;qv!__jDaECzEnEf#5R zgzn!@Bh#k)U?+shgq??dnA)_^jxe5#kPs#lb{_U&np=x7K`&mUsz1fzfwkLwXV`-j zy^XwZW79)4mnfdp#c}CmqBP%Cnn&qjI<7jPMr^AI5Oh#QR!Pl@tvn`ZfgTu{&UC#e zv0=K*bNZ?|d`e5*X6g5qW0rXOeUP#FX`XS0Cy!4X|^+PNTRie{Q zvaO{)sc0{HtESrPlN!I7ldbhnUGfbJ=kxx_IHxB^*DEPHrgiN)y;D-#iaJ{+wx111 z-8+mrl6LMU|J_cXS9_(Tb`O2*?OfCiNU1#or{(0{vH{7oefTuJd2CEGZ5oJ}+A=n# zr8kAugMIf}Y|JmU6R1XdFDCYY==-jF82{Si7#F, 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-09-29 08:30+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Humanize" +msgstr "Denelaat" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milion" +msgstr[2] "%(value).1f milion" +msgstr[3] "%(value).1f milion" +msgstr[4] "%(value).1f milion" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s million" +msgstr[2] "%(value)s million" +msgstr[3] "%(value)s million" +msgstr[4] "%(value)s million" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliard" +msgstr[2] "%(value).1f miliard" +msgstr[3] "%(value).1f miliard" +msgstr[4] "%(value).1f miliard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliard" +msgstr[2] "%(value)s miliard" +msgstr[3] "%(value)s miliard" +msgstr[4] "%(value)s miliard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilion" +msgstr[1] "%(value).1f bilion" +msgstr[2] "%(value).1f bilion" +msgstr[3] "%(value).1f bilion" +msgstr[4] "%(value).1f bilion" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilion" +msgstr[1] "%(value)s bilion" +msgstr[2] "%(value)s bilion" +msgstr[3] "%(value)s bilion" +msgstr[4] "%(value)s bilion" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f c'hadrilion" +msgstr[1] "%(value).1f kadrilion" +msgstr[2] "%(value).1f kadrilion" +msgstr[3] "%(value).1f kadrilion" +msgstr[4] "%(value).1f kadrilion" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s c'hadrilion" +msgstr[1] "%(value)s kadrilion" +msgstr[2] "%(value)s kadrilion" +msgstr[3] "%(value)s kadrilion" +msgstr[4] "%(value)s kadrilion" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f c'hintilion" +msgstr[1] "%(value).1f kintilion" +msgstr[2] "%(value).1f kintilion" +msgstr[3] "%(value).1f kintilion" +msgstr[4] "%(value).1f kintilion" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s c'hintilion" +msgstr[1] "%(value)s kintilion" +msgstr[2] "%(value)s kintilion" +msgstr[3] "%(value)s kintilion" +msgstr[4] "%(value)s kintilion" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstilion" +msgstr[1] "%(value).1f sekstilion" +msgstr[2] "%(value).1f sekstilion" +msgstr[3] "%(value).1f sekstilion" +msgstr[4] "%(value).1f sekstilion" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstilion" +msgstr[1] "%(value)s sekstilion" +msgstr[2] "%(value)s sekstilion" +msgstr[3] "%(value)s sekstilion" +msgstr[4] "%(value)s sekstilion" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilion" +msgstr[1] "%(value).1f septilion" +msgstr[2] "%(value).1f septilion" +msgstr[3] "%(value).1f septilion" +msgstr[4] "%(value).1f septilion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilion" +msgstr[1] "%(value)s septilion" +msgstr[2] "%(value)s septilion" +msgstr[3] "%(value)s septilion" +msgstr[4] "%(value)s septilion" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilion" +msgstr[1] "%(value).1f oktilion" +msgstr[2] "%(value).1f oktilion" +msgstr[3] "%(value).1f oktilion" +msgstr[4] "%(value).1f oktilion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilion" +msgstr[1] "%(value)s oktilion" +msgstr[2] "%(value)s oktilion" +msgstr[3] "%(value)s oktilion" +msgstr[4] "%(value)s oktilion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilion" +msgstr[1] "%(value).1f nonilion" +msgstr[2] "%(value).1f nonilion" +msgstr[3] "%(value).1f nonilion" +msgstr[4] "%(value).1f nonilion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilion" +msgstr[1] "%(value)s nonilion" +msgstr[2] "%(value)s nonilion" +msgstr[3] "%(value)s nonilion" +msgstr[4] "%(value)s nonilion" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f dekilion" +msgstr[1] "%(value).1f dekilion" +msgstr[2] "%(value).1f dekilion" +msgstr[3] "%(value).1f dekilion" +msgstr[4] "%(value).1f dekilion" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dekilion" +msgstr[1] "%(value)s dekilion" +msgstr[2] "%(value)s dekilion" +msgstr[3] "%(value)s dekilion" +msgstr[4] "%(value)s dekilion" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gogol" +msgstr[1] "%(value).1f gogol" +msgstr[2] "%(value).1f gogol" +msgstr[3] "%(value).1f gogol" +msgstr[4] "%(value).1f gogol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gogol" +msgstr[1] "%(value)s gogol" +msgstr[2] "%(value)s gogol" +msgstr[3] "%(value)s gogol" +msgstr[4] "%(value)s gogol" + +msgid "one" +msgstr "unan" + +msgid "two" +msgstr "daou" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "pevar" + +msgid "five" +msgstr "pemp" + +msgid "six" +msgstr "c'hwec'h" + +msgid "seven" +msgstr "seizh" + +msgid "eight" +msgstr "eizh" + +msgid "nine" +msgstr "nav" + +msgid "today" +msgstr "hiziv" + +msgid "tomorrow" +msgstr "warc'hoazh" + +msgid "yesterday" +msgstr "dec'h" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s eurvezh zo" +msgstr[1] "%(count)s eurvezh zo" +msgstr[2] "%(count)s eurvezh zo" +msgstr[3] "%(count)s eurvezh zo" +msgstr[4] "%(count)s eurvezh zo" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s munud zo" +msgstr[1] "%(count)s munud zo" +msgstr[2] "%(count)s munud zo" +msgstr[3] "%(count)s munud zo" +msgstr[4] "%(count)s munud zo" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s eilenn zo" +msgstr[1] "%(count)s eilenn zo" +msgstr[2] "%(count)s eilenn zo" +msgstr[3] "%(count)s eilenn zo" +msgstr[4] "%(count)s eilenn zo" + +msgid "now" +msgstr "bremañ" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "a-benn %(count)s eilenn" +msgstr[1] "a-benn %(count)s eilenn" +msgstr[2] "a-benn %(count)s eilenn" +msgstr[3] "a-benn %(count)s eilenn" +msgstr[4] "a-benn %(count)s eilenn" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "a-benn %(count)s munud" +msgstr[1] "a-benn %(count)s munud" +msgstr[2] "a-benn %(count)s munud" +msgstr[3] "a-benn %(count)s munud" +msgstr[4] "a-benn %(count)s munud" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "a-benn %(count)s eurvezh" +msgstr[1] "a-benn %(count)s eurvezh" +msgstr[2] "a-benn %(count)s eurvezh" +msgstr[3] "a-benn %(count)s eurvezh" +msgstr[4] "a-benn %(count)s eurvezh" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b3a7647914f1e7ac22cf1cf1fdfa9b297a2a6119 GIT binary patch literal 1416 zcmaiz%We}f6o$S$sI+eumk2sZ2x z3&fHI@4`5Rj$j;y9f5s>9fdvEgd4_J z@C5iR@F!S=e{3@$+raDKR`6Ef5{Qf35B@`N3;b%(>!8nT1ick>7uXH!PXb?nI}!g1 z^mX2VyTG^L5A^aLya@j}nwSPZfeH8v^nFd@VLopL+yPzykwUJ3xXAUuTS31Y{Ck0q zK%ZX=>y6+y!}{aEZqT2B+Y$c~M0>qwjDTMA`xuP9nE1NBm)$V`{tGbQ^C6fY2VwhR ze!mA`dtk%Hz99Pjk>g_>p0`D@6xZmo%yX&Lf3@b2xM7+zLjwPZLe^ItsmYEYHQhEu zWkg9Oh=!SrSkV!RSh-59BW?wk5rR0K@ip9=+8Es>uB*wKuud2+FB;ttRmZMoY)Kf4 ztt2#Sa8=iZ+oGk7V+*z}Gj^$6x2&QQT3EbUVY5bXhgf!*JCV@wC_c@in8lMcj+1Ee zWE4jc0@-cRk-p}7+$4+6viK~G&m}B~Tq`M;yWMWd`HHe8R!ddgEcf>`KpxV| z%eGuBEL>ffTi<+s=+v@wf7(pwvMns;ZNqamuT9e?RJD4pO;1hJ{xls^$KxnXV>&uY{WLn3#xXrl zBZ_eN=hE@P(o8zxr@f45CXVRSr~MSfL`CGp$QdtA7d9MB95~tF`0hhhF;ta*tN$E# zUsbDrYyPd_S3%r{a(!uI>Oj+$H%Uu4^7*xJ(n!K2$#B3OX^4y~?^;ZndFD!WSa8jT1n!4kwK^N*MAR`xZyr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..51108e9cc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,292 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Dupanović , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "-i" + +msgid "st" +msgstr "-vi" + +msgid "nd" +msgstr "-i" + +msgid "rd" +msgstr "-i" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f miliona" +msgstr[2] "%(value).1f miliona" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milijarda" +msgstr[1] "%(value).1f milijarde" +msgstr[2] "%(value).1f milijardi" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilion" +msgstr[1] "%(value).1f biliona" +msgstr[2] "%(value).1f biliona" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "one" +msgstr "jedan" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "četiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedam" + +msgid "eight" +msgstr "osam" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "deset" + +msgid "tomorrow" +msgstr "sutra" + +msgid "yesterday" +msgstr "jučer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..348f92085c8310dc0640d3785c946814c3c2eefa GIT binary patch literal 4270 zcmd6pO^g&p7=}w-MFtT?L{QN}UD*YCeijy%S=WgCL=q5!%O=Fcq?oRmZJ4PVx~q40 zAb8=z0TYcO8e<|M@rMKxjZrWDB&ePxX{Z?{xnKjL@6d%^EO%5xcXz-u;Mxgd_mKo0!~xE4GOA~pLO z#L(EcmKQgycX@7ECo1#__XDh zAnk)IAi9bk_DNt79@+udffOIKaSMC`@yFnL@JEp5^Sb2?5KGVg1y_K5OBj0;Tm{lT z9RXK@2S5&LkbG}io(IW)5hVXFAo>3RIk@bB*gp)?e7gPc$BioGn5GoaVXWND57)uqc zA!+pN8|eZik4k-RLVXOC=7FAV4Js8{SK8ZDFg?+{(_B)aH5)|TfI5OoYfI~l;jkf8 zDzuNH9#1_BZY6WvI0G zsL(eFTO?XDifK>L`?iV#lmaTvC+i<@W!;FufQy>$imJYDaHXdqO^JFaVL0T~>z-Eg zDz2<#T)niK)-_%4N|g~BnLJrVX_ayH(sadSe7&@zp>X|-^Jc22vRRLYz0^Q9v(}r4 zGrgQWM3Wt8BE1wggz}C_CV0bBp^_tWFt~U&R^v5KJY7qkF(z$-2eP7-J2zvj zwli8!a##OAlCf<}+JxehI`rozB+aI?hUAW}Y_Th8kzQ@mu&OsDSrzv)B~0jxy73y) zsfM_gef@#H3cJJ<8xp_Q5J+(6O1K*(=Pl+W<-Ls=N&9a#A1U`OW+Ub8H5Z7Pt2$h@IsMYU;8`I|Dbhs%UZcc|I>2OON269R&7I-tv zO!`tXqiI(g-O#>|2Qt%|wPawVPx3xrAC?v4>~ft6=?D0dm$`dbsG830mrd;(XHQV` zT<68G7C7U&%yawpI{W36M^qs+GnBkK4D3``o+EEfvX)6;oF zxxA{J$yaov5D&5qc%$136;T+>?b)?wN9S=$`C@Jx_Ks8-PpgRm8#!YN&ARZ^D6dRn z>q|3sV0@=D((zGWRp~oBR7GR)Yh^xi$TP_>%e*3T`|9)=adv9I5tO-VMqw~EG|J=4 zu>r+bkMYvrXpZd^ymP3sYFC6;wtbf3Eb|2RMn(y`r0C%EX1~ZtT6NnpM`tW_Td2EK z9um@7qH{BCilwwIIyTd`SW4UMnVB}W#ktn#$ee49#k4g(GSg10%{9`AIoB9zX(Rrp zNxQ5NpP=R#zMNRWP{rqHyqfkXi=}|MYsArT_EX+v>qyB_)pp0(0$Ia9QqkUMXN#mc z*5iqo{LVquVG0-D$z=iT_+W-NkX2U8v5fjqA>x?*Dm^N{38fi9*GWpP2mwKYsgy ilq86nvOkyweB=X$MG2U|Ix$x^X3sJgGbbiJpZy2gD`boS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..4befcc632 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,332 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2011-2012,2019,2021 +# Carles Barrobés , 2011,2014 +# GerardoGa , 2018 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-27 09:05+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanitzar" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}r" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}n" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}r" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}è" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}è" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milió" +msgstr[1] "%(value)s milions" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliards" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilió" +msgstr[1] "%(value)s bilió" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilió" +msgstr[1] "%(value)s quadrilions" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintilió" +msgstr[1] "%(value)s quintilions" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilió" +msgstr[1] "%(value)s sextilions" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilió" +msgstr[1] "%(value)s septilions" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilió" +msgstr[1] "%(value)s octilions" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilió" +msgstr[1] "%(value)s nonilions" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilió" +msgstr[1] "%(value)s decilions" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googols" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "quatre" + +msgid "five" +msgstr "cinc" + +msgid "six" +msgstr "sis" + +msgid "seven" +msgstr "set" + +msgid "eight" +msgstr "vuit" + +msgid "nine" +msgstr "nou" + +msgid "today" +msgstr "avui" + +msgid "tomorrow" +msgstr "demà" + +msgid "yesterday" +msgstr "ahir" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "Fa %(delta)s " + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "fa una hora" +msgstr[1] "fa %(count)s hores" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "fa un minut" +msgstr[1] "fa %(count)s minuts" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "fa un segon" +msgstr[1] "fa %(count)s segons" + +msgid "now" +msgstr "ara" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "d'aquí a un segon" +msgstr[1] "d'aquí a %(count)s segons" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "d'aquí a un minut" +msgstr[1] "d'aquí a %(count)s minuts" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "d'aquí a una hora" +msgstr[1] "d'aquí a %(count)s hores" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "fa %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d any" +msgstr[1] "%(num)d anys" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d mesos" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d setmana" +msgstr[1] "%(num)d setmanes" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dia" +msgstr[1] "%(num)d dies" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d hores" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minuts" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d any" +msgstr[1] "%(num)d anys" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d mesos" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d setmana" +msgstr[1] "%(num)d setmanes" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dia" +msgstr[1] "%(num)d dies" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d hores" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minuts" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b4622290b434b325e02cecbf50714eeb80ba479 GIT binary patch literal 5479 zcma);TWlLe6ov-~6b$8lzfLJ>6WX=oT-xB)6hR9V8d^c9K!9NDo!HyhGiG<3#6d_% zJb(}tNC=gxAW%rf_i@|@vjbQFf#x{d_a07S{Bz?i? zuNy9dTcH1Gc;#7)4a44TD8WJ4uYqTSpMezTE6@V}F!ojJLc0ud=(FI>;ENzavyVWe z#y&Ot5~TZn1yY>9!6LW;Hz|M*fTTZb_yI_H{S4B)bIu9`Y;G5oPN@NX~p4)`$m4|q3t-+IROfk(lIz+XWcFC%&KKMKYrK<#UPQ6^7Rs-e9=VaI@hS!-CpVzn*@k`%`c>$Z!)A19H>152hY{%frWDi((`tmu?ry8nGFs(qOR>>pW9WH zux32f;8M*)nzQRI0f$3wz3wX6S8+ro0FHKc+#;=$5 zWXpEEjOS{qE3;9bZ1qxo(agH8A};ju>>=uGqLFlWt6@ubQ81e~T-nmXY;Hxhq#pLa zd^1$TJ&$}6Tb^-@#%%73ijq!u#8B--G(OR+!J#N($1xhSC9kQL*By{F6V5n9GZN84 zuV_TL)tY8A?wnvVn9roGTb^ClZbMizEnJI%!6Dgd3_IMh+cc!@G z+Ib>vZcCfn)8=H_yd^Y!F()MR-36v=o)AncI@MY=l;>eVdS0=%@U`$rKH#atqN1(6 zj&)FYK7Pqd+&OH^s>-JXFx29Ez=ML<*?iX_|xmvqzElPZJWVC3F zj9JA=J~~z!o7ggfmfMFDWKDav^y{`(UWp&9FP&I^$>vjbMa=S@4Z>}{EuBMZAzxX% z6*FYDWmknYE$l{#-?1nvH9l0+x>+g|=I7`0nxeTg0`96&2-EDKZYCEheqlH_wRdVy zyr5!!BzFf+kC4cy-9*Y-Ea*bBZo6^^uhek(g)ToheWx`U`_a8-glFxM6@~4umiXi$ zS4T;fc*V~hsM8OLb*J(geu>LwVEX0p9Xz}&4@q7w^CI80iAz3+3s@t=d>0?#C62*c z%X~B(+*#)1S+`=~MH4q*BBz<7m^rp1$C@k0gu|mZHCwb3M*M!p`_Z+r)%a!Tyt0i% zzjR$vUuAYKc#CyMOUTKH2{{q9x0-p)he9%3sI0t~h!sgZy$*bgWR!MRLadBiDt;%| z)W=OMCbNsxRU&lB!3RaQkdd5@9m$Es&(8Hy@iEpN)kw*RMoL7>D)iNm{;V@fGLVr{ zi|eIzlI^NwxB?}UA!FB6)K%o*W?iSdqa~wuw8WBoNK}PXilLAU6e_9IBI$styUxl9 zy?k6QoivYU@Qzch=wXdMc!B}D;WC9om{!}|Svj_J5??EwM?5`Fv+%G75nAD6pLS@k zSu}U>#cWGDz0wRvGI@q_pG4z%$TT#%Q#CQVa_y&@Y-{v$+$-5&Ad_pLu3pk;5)uur zyYmdh?vk!9GUYc|bNRSt%SUv3<(P{zXTB%#R*tTNLvM6CF7ZIZ2y=_Z%uPG4ftenR ztnhfHO*+Tn9fQ%;tmWhW(#c9Z8rq^;2%Z5GE_6vKdg)Uqv05?{3l7XKZ<(+?6@SO# zI?lT;bd*N&+L59W4J7Zh+I3Jm9HCA@!b0P@TDuU`FcBiGcp}6a1XJ2L_eQA1c^DzF zyo^gw&4fd*V#g)y8bx^%Q&H2{v&WDl=ICI{Hl5hR!jU$6>goKNyDyvuTRDMmPp0X? Wz_$5pap@#J>zIScY;O68!1ezL#2?83 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..f61b7e519 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,388 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vláďa Macek , 2011,2014 +# Vláďa Macek , 2018,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 23:35+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Humanize" +msgstr "Polidštění" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] " %(value)s milion" +msgstr[1] " %(value)s miliony" +msgstr[2] " %(value)s milionů" +msgstr[3] " %(value)s milionů" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliarda" +msgstr[1] "%(value)s miliardy" +msgstr[2] "%(value)s miliard" +msgstr[3] "%(value)s miliard" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilion" +msgstr[1] "%(value)s biliony" +msgstr[2] "%(value)s bilionů" +msgstr[3] "%(value)s bilionů" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliardy" +msgstr[2] "%(value)s biliard" +msgstr[3] "%(value)s biliard" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s triliony" +msgstr[2] "%(value)s trilionů" +msgstr[3] "%(value)s trilionů" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliardy" +msgstr[2] "%(value)s triliard" +msgstr[3] "%(value)s triliard" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrilion" +msgstr[1] "%(value)s kvadriliony" +msgstr[2] "%(value)s kvadrilionů" +msgstr[3] "%(value)s kvadrilionů" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadriliarda" +msgstr[1] "%(value)s kvadriliardy" +msgstr[2] "%(value)s kvadriliard" +msgstr[3] "%(value)s kvadriliard" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintilion" +msgstr[1] "%(value)s kvintiliony" +msgstr[2] "%(value)s kvintilionů" +msgstr[3] "%(value)s kvintilionů" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintiliarda" +msgstr[1] "%(value)s kvintiliardy" +msgstr[2] "%(value)s kvintiliard" +msgstr[3] "%(value)s kvintiliard" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoly" +msgstr[2] "%(value)s googolů" +msgstr[3] "%(value)s googolů" + +msgid "one" +msgstr "jedna" + +msgid "two" +msgstr "dvě" + +msgid "three" +msgstr "tři" + +msgid "four" +msgstr "čtyři" + +msgid "five" +msgstr "pět" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedm" + +msgid "eight" +msgstr "osm" + +msgid "nine" +msgstr "devět" + +msgid "today" +msgstr "dnes" + +msgid "tomorrow" +msgstr "zítra" + +msgid "yesterday" +msgstr "včera" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "před %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "před hodinou" +msgstr[1] "před %(count)s hodinami" +msgstr[2] "o %(count)s hodin dříve" +msgstr[3] "před %(count)s hodinami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "před minutou" +msgstr[1] "před %(count)s minutami" +msgstr[2] "o %(count)s minuty dříve" +msgstr[3] "před %(count)s minutami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "před sekundou" +msgstr[1] "před %(count)s sekundami" +msgstr[2] "o %(count)s sekundy dříve" +msgstr[3] "před %(count)s sekundami" + +msgid "now" +msgstr "nyní" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za sekundu" +msgstr[1] "za %(count)s sekundy" +msgstr[2] "za %(count)s sekundy" +msgstr[3] "za %(count)s sekund" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za minutu" +msgstr[1] "za %(count)s minuty" +msgstr[2] "za %(count)s minuty" +msgstr[3] "za %(count)s minut" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za hodinu" +msgstr[1] "za %(count)s hodiny" +msgstr[2] "za %(count)s hodiny" +msgstr[3] "za %(count)s hodin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "za %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rokem" +msgstr[1] "%(num)d lety" +msgstr[2] "%(num)d rokem" +msgstr[3] "%(num)d lety" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsícem" +msgstr[1] "%(num)d měsíci" +msgstr[2] "%(num)d měsícem" +msgstr[3] "%(num)d měsíci" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d týdnem" +msgstr[1] "%(num)d týdny" +msgstr[2] "%(num)d týdny" +msgstr[3] "%(num)d týdny" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dnem" +msgstr[1] "%(num)d dny" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dny" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodinou" +msgstr[1] "%(num)d hodinami" +msgstr[2] "%(num)d hodinami" +msgstr[3] "%(num)d hodinami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutou" +msgstr[1] "%(num)d minutami" +msgstr[2] "%(num)d minutami" +msgstr[3] "%(num)d minutami" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rok" +msgstr[1] "%(num)d roky" +msgstr[2] "%(num)d let" +msgstr[3] "%(num)d let" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsíc" +msgstr[1] "%(num)d měsíce" +msgstr[2] "%(num)d měsíců" +msgstr[3] "%(num)d měsíců" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d týden" +msgstr[1] "%(num)d týdny" +msgstr[2] "%(num)d týdnů" +msgstr[3] "%(num)d týdnů" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d den" +msgstr[1] "%(num)d dny" +msgstr[2] "%(num)d dní" +msgstr[3] "%(num)d dní" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodina" +msgstr[1] "%(num)d hodiny" +msgstr[2] "%(num)d hodin" +msgstr[3] "%(num)d hodin" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuty" +msgstr[2] "%(num)d minut" +msgstr[3] "%(num)d minut" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..aceed480c0917553cd1fd46ccc8ac028d9fc2e91 GIT binary patch literal 5241 zcmb`K&5smC7{*HlSx0nnRS-cbK-gKA-kDi6ECUO~z#H!^k! zylVIb_%`b7sg&11y6!G$gPWda>^!K!Iq;sTkBl;Q6!ohh=^ugQ|A%35Q+gk5_#=28 z?c1M8bq}O|eFGv@Y-EhF1#r~R0k5L|wc*&a$OY;*4ex?9{_CGhSpdmr6vVCAX2Wri z#%adzFi6)O18MwE82vOzc{m4>&qdSzmTA9c_>O6JK=Qe1^p>e>5NSx}Hsy)d%Zn&@ z42Gdg4um9grEKa1nlp4zUuk{4ghKOe3WfUf0!rsVY8cX%9Q3UF%sI{LZRXqpccJVx z^$s{rUO}1c2q03xFg=p>MstbA0cm6y;$*GSIBiDRg0cf;`SCm|<0wUx-6#bVI%sUL zl(5)}i^7ZK#8jomue+Y-`s#t2Bki2Xe6{ZTb>Hi;%#oToetDYmRZe8S>f1UeHebCJ z2`9*jURiflp8KsRUk_y~FMLJ$c7AlOtn)ga5yMP&^OS53L!PJgr7+|fp+9>e&nnrx zg*;Eo<}BoST3)t7zLJ{F6vgJLIcW;{3SuTj6qzIDB&aK$j+#QbcO(-SG!<#dMcu~| zvi(TuiSWBmQZ-EEZcHukn;5=0FRP!VPQPQSb{tJi_o`*L?gVz*gyIc93i=I6 zGj=ARd&M%hG^*Po-Fic_n!6}j4c9XzbQB0ryG^-nPtlQ{789vyeoNO#IZU}qG8zsa z3>+59MX6Zm-e#d@x`DqyN~V2BwDH^Yg8;EQ_E}qoS_ULv2>ct;*47!vdQ%1=UX4}m z+z_hn7cR<{A82bnthb zz+|~nE+f#oC>LGwT#7qjl@D6e`+4PHb-FTH#!)yYLTxPsLWQ2teo*D}B9KnxAb~A@ zDsC%B)cE115s!6Frfk1?1Q)A%BaXh8T*saOi6kkdo ztpm?oT(aAxiNgGu`4dZnP?;(h=6t24Lg(5oJf+4QFSR`3szcmvh#-`D_VU6>Yi22q z?p2e4bwb&`t5#ACXJ0$S)6?0anw_mo@T0uU ztDGv+RH-BtzH^q(@V$GvqO(d8HjS43hYCI4AAIKAIP;YoOmd{EXYGbp>v86*Igo;v zZvTS~EG4hzezzgTb2e#i5*YRdVFxbZ`mdLq27mla71RYnf+3) z&+4Kwi_Gk)dc9T`m9w-$KD3xwQsg<5m|aVqeO&KTuRgA`fV%6742Kf?S53$tMmgSA zzUQ(?@n)nVhqo2~{ww, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:21+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Humanize" +msgstr "Dynoli" + +msgid "th" +msgstr "edd" + +msgid "st" +msgstr "af" + +msgid "nd" +msgstr "ail" + +msgid "rd" +msgstr "ydd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miliwn" +msgstr[1] "%(value).1f miliwn" +msgstr[2] "%(value).1f miliwn" +msgstr[3] "%(value).1f miliwn" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miliwn" +msgstr[1] "%(value)s miliwn" +msgstr[2] "%(value)s miliwn" +msgstr[3] "%(value)s miliwn" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f biliwn" +msgstr[1] "%(value).1f biliwn" +msgstr[2] "%(value).1f biliwn" +msgstr[3] "%(value).1f biliwn" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s biliwn" +msgstr[1] "%(value)s biliwn" +msgstr[2] "%(value)s biliwn" +msgstr[3] "%(value)s biliwn" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triliwn" +msgstr[1] "%(value).1f triliwn" +msgstr[2] "%(value).1f triliwn" +msgstr[3] "%(value).1f triliwn" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triliwn" +msgstr[1] "%(value)s triliwn" +msgstr[2] "%(value)s triliwn" +msgstr[3] "%(value)s triliwn" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f cwadriliwn" +msgstr[1] "%(value).1f cwadriliwn" +msgstr[2] "%(value).1f cwadriliwn" +msgstr[3] "%(value).1f cwadriliwn" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s cwadriliwn" +msgstr[1] "%(value)s cwadriliwn" +msgstr[2] "%(value)s cwadriliwn" +msgstr[3] "%(value)s cwadriliwn" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f cwintiliwn" +msgstr[1] "%(value).1f cwintiliwn" +msgstr[2] "%(value).1f cwintiliwn" +msgstr[3] "%(value).1f cwintiliwn" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s cwintiliwn" +msgstr[1] "%(value)s cwintiliwn" +msgstr[2] "%(value)s cwintiliwn" +msgstr[3] "%(value)s cwintiliwn" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f secstiliwnfm" +msgstr[1] "%(value).1f secstiliwnfm" +msgstr[2] "%(value).1f secstiliwnfm" +msgstr[3] "%(value).1f secstiliwnfm" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s secstiliwn" +msgstr[1] "%(value)s secstiliwn" +msgstr[2] "%(value)s secstiliwn" +msgstr[3] "%(value)s secstiliwn" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septiliwn" +msgstr[1] "%(value).1f septiliwn" +msgstr[2] "%(value).1f septiliwn" +msgstr[3] "%(value).1f septiliwn" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiliwn" +msgstr[1] "%(value)s septiliwn" +msgstr[2] "%(value)s septiliwn" +msgstr[3] "%(value)s septiliwn" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octiliwn" +msgstr[1] "%(value).1f octiliwn" +msgstr[2] "%(value).1f octiliwn" +msgstr[3] "%(value).1f octiliwn" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octiliwn" +msgstr[1] "%(value)s octiliwn" +msgstr[2] "%(value)s octiliwn" +msgstr[3] "%(value)s octiliwn" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f noniliwn" +msgstr[1] "%(value).1f noniliwn" +msgstr[2] "%(value).1f noniliwn" +msgstr[3] "%(value).1f noniliwn" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniliwn" +msgstr[1] "%(value)s noniliwn" +msgstr[2] "%(value)s noniliwn" +msgstr[3] "%(value)s noniliwn" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f dengiliwn" +msgstr[1] "%(value).1f dengiliwn" +msgstr[2] "%(value).1f dengiliwn" +msgstr[3] "%(value).1f dengiliwn" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dengiliwn" +msgstr[1] "%(value)s dengiliwn" +msgstr[2] "%(value)s dengiliwn" +msgstr[3] "%(value)s dengiliwn" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gwgol" +msgstr[1] "%(value).1f gwgol" +msgstr[2] "%(value).1f gwgol" +msgstr[3] "%(value).1f gwgol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gwgol" +msgstr[1] "%(value)s gwgol" +msgstr[2] "%(value)s gwgol" +msgstr[3] "%(value)s gwgol" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "dau" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "pedwar" + +msgid "five" +msgstr "pump" + +msgid "six" +msgstr "chwech" + +msgid "seven" +msgstr "saith" + +msgid "eight" +msgstr "wyth" + +msgid "nine" +msgstr "naw" + +msgid "today" +msgstr "heddiw" + +msgid "tomorrow" +msgstr "fory" + +msgid "yesterday" +msgstr "ddoe" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s yn ôl" + +msgid "now" +msgstr "nawr" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "un eiliad yn ôl" +msgstr[1] "%(count)s eiliad yn ôl" +msgstr[2] "%(count)s eiliad yn ôl" +msgstr[3] "%(count)s eiliad yn ôl" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "un munud yn ôl" +msgstr[1] "%(count)s munud yn ôl" +msgstr[2] "%(count)s munud yn ôl" +msgstr[3] "%(count)s munud yn ôl" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "un awr yn ôl" +msgstr[1] "%(count)s awr yn ôl" +msgstr[2] "%(count)s awr yn ôl" +msgstr[3] "%(count)s awr yn ôl" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s o nawr" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "un eiliad o nawr" +msgstr[1] "%(count)s eiliad o nawr" +msgstr[2] "%(count)s eiliad o nawr" +msgstr[3] "%(count)s eiliad o nawr" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "un munud o nawr" +msgstr[1] "%(count)s funud o nawr" +msgstr[2] "%(count)s munud o nawr" +msgstr[3] "%(count)s munud o nawr" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "un awr o nawr" +msgstr[1] "%(count)s awr o nawr" +msgstr[2] "%(count)s awr o nawr" +msgstr[3] "%(count)s awr o nawr" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb8cd61a0b7815275b770c89fececc90b0471ad8 GIT binary patch literal 4316 zcmd6pONF%+&NYGhMZGSMNi@ z!Dyl}#6$^dj4{Ln4u%-@fRCscRzkRHJgOIs8a$Y2)T95eySit3dssMHNzJdnum1Jb z{6E5U!j2f@PijI9F)z_s8$ko>d8 z|F+@R;0E}AH(Y%KWBstV8A`Ah_M701;Flo9xd7VWC1bBy65FGo1%DG<4;}>(ntcpn zYU~Tcb0Cd-0i-y8f@N?m1}TD1f#iSQ@I#R1^&?3AmM)ETn?TYDko?CC&w@1GC6Ko2 z55vE}n_>TJxTL_?ov>Gd-vDWyr$8F-w6Q-hJOg6t>~qt8 z9>f&bMKC~4zXflBz4Io%b;R`*94UJkEoZkDozW_p;@2`v^#S*YH))hW#nn z5B>sDzZF;{jk5(L|4xwdc?et&9tR%+zXGFi!24k@LnqqL4Ir(rWb7euHS7`aE^se+ zALxP9@2F`%4bncJH}>}+>Hh{vzv9+dUjixKI7oUIycT@U@CCycL7KqG1JZgwGxk}K@;eVw9xsA4uWvxS0_-~wX=GbaDSuSxolOem z0x4q;7zeF=$UF~#w3f}NccZRBrLifWR46ZWwy9vdqVZ^tsL&o$9tTl}QE`l-bAsux z3Mv)KXHw`JLgkJaY!kS`JmVFN3cZI^N-?7IvC2H-7_nuj8&MxdwNUAtP@#RHGkrU1 zA1W34CgBK0dqp=wR~IeK`vZ$Rs>5pd%Cn@Jfoqz#LIJ@6x7Bi$ zT+~w+wVbM(&r!-zt&UJRhnI_!_edpks%}12(>Yx?-=UD#{hac0URUO$9tyj812L7C zUdB1wP1(h%^Ak;7Plg_s?z4h%%X4L@g-LErg;Mti=T5}lIOnORBjq_^+QzLw)Re3* zj2L^9h(?q4>g`J-Cc?ChOKVbv{=$IdGvSON?a>h}R;4Y%btW}yxYL3)(4R@JL!Y;_ z>j}FN;#u_c_Q}xeuUmCKhvSz%2a9QGlvErIxtKcM+*EJ&deI(A>dAHovKF1sj1bLK zPR63@Il#pQ2 ztJHJ&2vU-mWtf3(o8^sGxq>>Fl~rKMdMcw#hbF`=B&9TYYu14k=P8xw2&-t zXPKV#gIb=WRAH}}Qogpw z0>`b}kB3fRPpGO@7~f;>71J(B?QL9(s#Pgf%64hQt_)h0a&@q@p@dS{jT2-~_*@1p zu9aW4w)<|=+RMGb;oPrV`;{XDA+1OJAukZYV~)q&)<8{pkD{w|LhcBALU6BYZNq0P zn6&yPwVtXLi!(Db1DfKx4KYg{it&UKv`p_}ofrEHW4p$-x0hBPC>5T-IT8|co14Pq zwV2h#sTOzTR;xCN*FfmerzdvU!)+an)eyeDUDgy1f>X7I54bv=B{qx~##{7Bv3Drn z3#yi!ip*fNvek+oNBg9;cGN2OZ!O>*O>Wn~ts_-!yWw+7h8AzYmt3&X1&0mm;u7=* zC%Wdexn#21PIpG{Tr?e%Gko1Wbnzp6OPMhaXN, 2012 +# Erik Ramsgaard Wognsen , 2021 +# Erik Ramsgaard Wognsen , 2014,2018 +# Jannis Leidel , 2011 +# valberg , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-23 21:30+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Menneskeliggør" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millioner" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliarder" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billioner" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billiard" +msgstr[1] "%(value)s billiarder" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillion" +msgstr[1] "%(value)s trillioner" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilliard" +msgstr[1] "%(value)s trilliarder" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrillion" +msgstr[1] "%(value)s kvadrillioner" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadrilliard" +msgstr[1] "%(value)s kvadrilliarder" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintillion" +msgstr[1] "%(value)s kvintillioner" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintilliard" +msgstr[1] "%(value)s kvintilliarder" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gogol" +msgstr[1] "%(value)s gogoler" + +msgid "one" +msgstr "en" + +msgid "two" +msgstr "to" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fire" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "seks" + +msgid "seven" +msgstr "syv" + +msgid "eight" +msgstr "otte" + +msgid "nine" +msgstr "ni" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgen" + +msgid "yesterday" +msgstr "i går" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "en time siden" +msgstr[1] "%(count)s timer siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "et minut siden" +msgstr[1] "%(count)s minutter siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "et sekund siden" +msgstr[1] "%(count)s sekunder siden" + +msgid "now" +msgstr "nu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "om et sekund" +msgstr[1] "om %(count)s sekunder" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "om et minut" +msgstr[1] "om %(count)s minutter" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "om en time" +msgstr[1] "om %(count)s timer" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s fra nu af" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d måned" +msgstr[1] "%(num)d måneder" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d uge" +msgstr[1] "%(num)d uger" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dage" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timer" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutter" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d måned" +msgstr[1] "%(num)d måneder" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d uge" +msgstr[1] "%(num)d uger" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dage" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timer" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutter" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..df46d3cd92f52df4cb003de831421f59f4803706 GIT binary patch literal 4364 zcmd6pO^g&p6vsZT|*EMlnuDM;=xlfT{F|mOx4g`v%9l| z6BkW9X^b9>A;g%Nkf@1K4=4sOpz&a$2M>S_JSvF!XLC>2N+uf{st}qFN3SV)Xj{o1~cGFa6d@? zS>u1x@GQ6%{@)Fk-NINJ_I5)F4#Iu|ycPTmq&Vk58@y=js)1l|Gris6D3WB0*c3X(r#IBK}Z@CCyu!*q2}fXZkI;2=?~dkqbBu4uLM1179&b1JZe10_nL|U=oe*0!iNjSA)kv8~h4f z16~1X-YPsK<*^%l3>*g^1zTVme9QRH8~$m=m);rd=Lks8xz*S^!DXv6+V;0o9mz~$g&ko1f13YY^)zt^w^lKv%-&hc%K)_vF5?}4<>9~ypQc+&85!?T9x z4Zk-0#_&7C?+q`2C~5W+NbCIq()xcG`)@OT#rXdPQMznkF=IGJwi*3ybZYd@b{d@p zj*LBG9Q14(%qestO&T9eL^8l4~2HZ^QpJ3rcUY7e8+xvfVZMn@U7-*=?N z3h316d^?TynA*Jo*hUbkw;MeNHF^)JS5(9*d#Y|pH3Qc)uQde(2i#iC zRdQaBBT5NXKVLocoTNu8nNaofsgh3U`uPqux#K02SM$0u8TC-JpVt?S zr1UDz*?!7CPMu6NbnR-^xpe0Q<5u03O)bpfmQ+*fw14_o;0?|^)I^RvAq>a3<%^P% zPH)7(+lgp2;jF=-Fk(j-j&W&KRnzMYNInzJ2*MeWXn`sm5pJcbS=pTytc>|ga^3WJ zO}lkrmz(%41_p;@vz~S=hqq9E;ctIFEv*uY+e^-;4mLN`o4uZQhLXD4oj}&S`OFA$ zFqD%quev38H+wST>IV1q_3cVbd5t}ZX|H2P;`(dtM@)T<-H2)X?S(4^qc5ETmFKvU z*R0&Y;UhSbj+uw)>#mt!XXOj%>*KNlOzDI&8uhy7hPZfR+}sp5H^dN!*Kzc^8mhiRk$i2@~Q=+8p-HyFqcs{=5Ma!AuvZ7MsqMyj>W!@|%l=+}a#kY7Z*Np7gl% zYg{X@XpQqmm5Z7+=9a3!<8|)Vwt9iH-u7i2@dW0{N|RTFJt=s-Xgwu7e73Bis@9ES zHajyjlhG8^EsNPqN!7DKwjI>W?5rcQ>D1Wnu^rv#%4c$^Cs9N~BC%EjnQJktvyB>e z<%m_P;vEor^ts8M_Hb86Yn6p(?~o;hDyS5#;RCJ?v&3$R)V>;hPwbt_tNTSuHrl2? zS{Si{pQA(4S~+Uv(<3Ropq;C=D(D65Skp>cQ$o*ai$^chF}irT=LkqUS8nKw3ZL!V zF+Jj#KRRJTIAX3(^q4<7p}lPErZ*l`TQ|9Iy_hoM?NOV%HIa419}T~)PsX7yDx6H- zgdJD^40`en@BElL2+@;l*BMQqomDKT@gQJ$6;CVA68O}3cq`~iX50`zn3D*(E;)SwEK%I, 2013 +# Florian Apolloner , 2021 +# Jannis Leidel , 2011,2013-2014,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-28 17:20+0000\n" +"Last-Translator: Raphael Michel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s Million" +msgstr[1] "%(value)s Millionen" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s Milliarde" +msgstr[1] "%(value)s Milliarden" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s Billion" +msgstr[1] "%(value)s Billionen" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s Billiarde" +msgstr[1] "%(value)s Billiarden" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s Trillion" +msgstr[1] "%(value)s Trillionen" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s Trilliarde" +msgstr[1] "%(value)s Trilliarden" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s Quadrillion" +msgstr[1] "%(value)s Quadrillionen" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s Quadrilliarde" +msgstr[1] "%(value)s Quadrilliarden" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s Quintillion" +msgstr[1] "%(value)s Quintillionen" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s Quintilliarde" +msgstr[1] "%(value)s Quintilliarden" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s Sedezilliarde" +msgstr[1] "%(value)s Sedezilliarden" + +msgid "one" +msgstr "eins" + +msgid "two" +msgstr "zwei" + +msgid "three" +msgstr "drei" + +msgid "four" +msgstr "vier" + +msgid "five" +msgstr "fünf" + +msgid "six" +msgstr "sechs" + +msgid "seven" +msgstr "sieben" + +msgid "eight" +msgstr "acht" + +msgid "nine" +msgstr "neun" + +msgid "today" +msgstr "heute" + +msgid "tomorrow" +msgstr "morgen" + +msgid "yesterday" +msgstr "gestern" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s her" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "vor einer Stunde" +msgstr[1] "vor %(count)s Stunden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "vor einer Minute" +msgstr[1] "vor %(count)s Minuten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "vor einer Sekunde" +msgstr[1] "vor %(count)s Sekunden" + +msgid "now" +msgstr "jetzt" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "in einer Sekunde" +msgstr[1] "in %(count)s Sekunden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "in einer Minute" +msgstr[1] "in %(count)s Minuten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "in einer Stunde" +msgstr[1] "in %(count)s Stunden" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s von jetzt an" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d Jahr" +msgstr[1] "%(num)d Jahre" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d Monat" +msgstr[1] "%(num)d Monate" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d Woche" +msgstr[1] "%(num)d Wochen" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d Tage" +msgstr[1] "%(num)d Tage" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d Stunde" +msgstr[1] "%(num)d Stunden" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d Minute" +msgstr[1] "%(num)d Minuten" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d Jahr" +msgstr[1] "%(num)d Jahre" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d Monat" +msgstr[1] "%(num)d Monate" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d Woche" +msgstr[1] "%(num)d Wochen" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d Tag" +msgstr[1] "%(num)d Tage" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d Stunde" +msgstr[1] "%(num)d Stunden" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d Minute" +msgstr[1] "%(num)d Minuten" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bbd98219bbe6bc83d187875d3f902165d07249d1 GIT binary patch literal 5588 zcmeH~O^h7H6~`;YfiMXl0m4`KXdoMQ!M!`PUfb(2iz93Z2ybwVV}uZg+UeTao}K9$ zx@$Z;HWmj!AOYflB9PV+ACZCx76KswvLHzIu27T%2kzvOLm~n~0trr0{;&J>M@^5{ zzT}pYYJdIy_4?JT*VR3>pI@@+4+3om`ZehP_<<1jfyaM{KWP8lB*X>azraht@4%bD z%8!J&8Jq-f01twsudsfMxdz?}{ol+h&lO?<_8w*cj=_Ej{4w|!km7s-y5JXVUv*w$ z&w&o~W$+g8SrDPc`yf&iA2CmYH18)M#rX!Tfj3~1De!)f^v9X+fRxwYLAvk!^Ao?V zAo(ef^cR>PgEZe4AeHKC=C|O5u)k-XR}tb0*q4K(PcrA2dzlY0Tg(CTY37R{t@BSH z&3Bybx0&yONL_r$Vz%%^}ya@Kup9*mq_#8M7z6L%Fe$D*t1w#A=_Hpn5 z@LQ0^_ab@n|1)?m_&rGDdl2+@;4zTy`wFBywp}cQ1b2Zn{wk=zZ@`1#gFh3(2j2!M z&ehmlc+?^UX`KV+W8e(zC&As|32+Yl4|qFx+og$q1l$h$W03s6V|_CgOa5Ju{NDm8 z&X*wh*M6Sl>x1$9U_3uab$*QbIP)pyGtB3iFEC$Zt}S7sbL$$@6|c6CB${$73kNpJq1#|#n`x~ z+D1-9j%@0JwHWG-6X-sqL$cjda9Hr$ZC?i)DxPYTyhdqFt(&@C2vrg~r8s3J&_T&- zl%^Y|5Wn&)h)Z8MqC-?IYKn$L^J8`UPlK0VI`!~@q?aG z{BRq(7nq6YFg zUz#Ozj;GwnJ1K7F&$Zt04jq`K{06c%%%`u^a^_CPhTa1u^X$p6y}L3pXIB-=^9(hy ze9xjHw*Q&xVR@gS8kX;!LSQioI^B7a4grBEqhH0^4mJ30)pAk)`kpdzC} zlJ|wWr5eV)$8!&=Fv6F-?szR3G<9Xa>gv$A^HJ0H+&g;B$UUIzPG#SH?tXR1Cs%im zG^*}QSEp-kb%#4W>(qACtJ`m_qE+@{2e}7A8ANSqbXa%h{l=11ZRY{qUUY85ce~fs zzm9aca2Ov~Iq9j}aZk|f$)<7-DA}nydv#xh&i!!l@jVz{GNxOfn(FualZN8@i)v-E zp*vGa!YSGuWXg*crY0)$_srj!udOy&t?b4|QUQ`1bdkMLD`u+OmVU6)L4skV%-rt} z+~v;Zel*#l3f(({hQ>~4)}7e}-(=aMV$ninUzYl5}a zz(|Pc?=tG^OFZI|w0=UBG>^V|Lw8!g^2`1B7i>6UF56La-HKe0t>}@8PXoizbJ>ob z>sIuFY(=L^SO=6u7_N*ChKr!>lTMnw6)P8u@p82oGgqzrmizJfVtDnrY_C4ot<@J~ zD>}|+!;uroj>>MubXl^Z(P6?aCM(6&vs8@5k`*h>c&MI9F?3Ljn7bB(=BgDpo@;39 zvu3Y3bu7kAH7g=j!pbrciWw$KF;b!+PIm6v$8Rv7dXiIEPmGjxM~)tl9sl$LhozGp zgVOLN4OxhiXa*xRBtM*7q?UVuS57+7M`fLij7mEnvC>JWD2w#?$|_!iqImKZ&ZV4u z^VGZRCvfyFt%?UmrO!j7@-GY(6L7L=Myai#C9t!-hBSo0r#%{UM0agE~ zC&yD1WBrND@`4s^M?Sg6pR)A274PN5N>k2USwL3l%~?W2Lgo;k+w#fCq%D=Y$HVj@ zBs0clA%jj!;;^3&$7Uf~Y-iCD@51e7V6Qv2i)&{gi{P+Oh|ykKHS}L?k|3;N`ZSoQ zLssT#&;0+2a{>Pc6-TA}Erl%~A8WK|Ne@TbBS$CCy5lf__h$W76|Frb%=)S?=*^F$ Q==-pg@cL3TbSTAt0e9kBYXATM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..11ab238f1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,387 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2018,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-28 19:07+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s miliona" +msgstr[2] "%(value)s miliony" +msgstr[3] "%(value)s milionow" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliarda" +msgstr[1] "%(value)s miliarźe" +msgstr[2] "%(value)s miliardy" +msgstr[3] "%(value)s miliardow" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilion" +msgstr[1] "%(value)s biliona" +msgstr[2] "%(value)s biliony" +msgstr[3] "%(value)s bilionow" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliarźe" +msgstr[2] "%(value)s biliardy" +msgstr[3] "%(value)s biliardow" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s triliona" +msgstr[2] "%(value)s triliony" +msgstr[3] "%(value)s trilionow" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliarźe" +msgstr[2] "%(value)s triliardy" +msgstr[3] "%(value)s triliardow" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kwadrilion" +msgstr[1] "%(value)s kwadriliona" +msgstr[2] "%(value)s kwadriliony" +msgstr[3] "%(value)s kwadrilionow" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadriliarda" +msgstr[1] "%(value)s kwadriliarźe" +msgstr[2] "%(value)s kwadriliardy" +msgstr[3] "%(value)s kwadriliardow" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintilion" +msgstr[1] "%(value)s kwintiliona" +msgstr[2] "%(value)s kwintiliony" +msgstr[3] "%(value)s kwintilionow" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwintiliarda" +msgstr[1] "%(value)s kwintiliarźe" +msgstr[2] "%(value)s kwintiliardy" +msgstr[3] "%(value)s kwintiliardow" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s sedeciliarda" +msgstr[1] "%(value)s sedeciliarźe" +msgstr[2] "%(value)s sedeciliardy" +msgstr[3] "%(value)s sedeciliardow" + +msgid "one" +msgstr "jaden" + +msgid "two" +msgstr "dwa" + +msgid "three" +msgstr "tśi" + +msgid "four" +msgstr "styri" + +msgid "five" +msgstr "pěś" + +msgid "six" +msgstr "šesć" + +msgid "seven" +msgstr "sedym" + +msgid "eight" +msgstr "wósym" + +msgid "nine" +msgstr "źewjeś" + +msgid "today" +msgstr "źinsa" + +msgid "tomorrow" +msgstr "witśe" + +msgid "yesterday" +msgstr "cora" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "pśed %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "Pśed %(count)s góźinu" +msgstr[1] "Pśed %(count)s góźinoma" +msgstr[2] "Pśed %(count)s góźinami" +msgstr[3] "Pśed %(count)s góźinami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "Pśed %(count)s minutu" +msgstr[1] "Pśed %(count)s minutoma" +msgstr[2] "Pśed %(count)s minutami" +msgstr[3] "Pśed %(count)s minutami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "Pśed %(count)s sekundu" +msgstr[1] "Pśed %(count)s sekundoma" +msgstr[2] "Pśed %(count)s sekundami" +msgstr[3] "Pśed %(count)s sekundami" + +msgid "now" +msgstr "něnto" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za %(count)s sekundu" +msgstr[1] "za %(count)s sekunźe" +msgstr[2] "za %(count)s sekundy" +msgstr[3] "za %(count)s sekundow" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za %(count)s minutu" +msgstr[1] "za %(count)s minuśe" +msgstr[2] "za %(count)s minuty" +msgstr[3] "za %(count)s minutow" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za %(count)s góźinu" +msgstr[1] "za %(count)s góźinje" +msgstr[2] "za %(count)s góźiny" +msgstr[3] "za %(count)s góźin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s wótněnta" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)d lěśe" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mjasec" +msgstr[1] "%(num)d mjaseca" +msgstr[2] "%(num)d mjasece" +msgstr[3] "%(num)dmjasecow" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tyźeń" +msgstr[1] "%(num)d tyźenja" +msgstr[2] "%(num)d tyźenje" +msgstr[3] "%(num)d tyźenjow" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d źeń" +msgstr[1] "%(num)d dnja" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d góźina" +msgstr[1] "%(num)d góźinje" +msgstr[2] "%(num)d góźiny" +msgstr[3] "%(num)d góźin" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuśe" +msgstr[2] "%(num)d minuty" +msgstr[3] "%(num)d minutow" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)d lěśe" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mjasec" +msgstr[1] "%(num)d mjaseca" +msgstr[2] "%(num)d mjasece" +msgstr[3] "%(num)dmjasecow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tyźeń" +msgstr[1] "%(num)d tyźenja" +msgstr[2] "%(num)d tyźenje" +msgstr[3] "%(num)d tyźenjow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d źeń" +msgstr[1] "%(num)d dnja" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d góźina" +msgstr[1] "%(num)d góźinje" +msgstr[2] "%(num)d góźiny" +msgstr[3] "%(num)d góźin" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuta" +msgstr[1] "%(num)d minuśe" +msgstr[2] "%(num)d minuty" +msgstr[3] "%(num)d minutow" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b4868f89a9521a060559b9a39aeea8a4d7bbce1 GIT binary patch literal 6740 zcmdUyX>8m?6vqb$Ed(g#C})A;2xQwj*-cAHwha{07Agn?6b^C9-JNXQ?%KijW?M?7 zmQzA)_*5h=6$D?9QXr@i4YWkuqC#H2@Bs+{KAUzYp~?1ugy$z}5yQy||h`2?7Nd;q){{1&_noOc{!7lK_N>4!kl+mg?L6#oOs zUqSM-_;`=&L7LYXh%WXNNPhN$6#soG|0d-{?Tm5g2f!s@7Q|B7lOUyHkK{8T&1)}6 z{@w*?UO#{o@1zqv{c_3M!3&_@2GY1^L9#m}`@fU=`6qh)36SDl4;}*!Ne+VxAm1UG z1J8s!F69Zy=Org4-O_&b;Z*PZOG_Z4s*7M)&xDoRFMV@{Wcqin;AkDMm494)Em2m3? zC&2aK$KWuy07<6t8L$WZ2wVgH1yWwpXEBDYX9FOu|3;AVaSw6z4RM;w+Z(#UPFjTL#j6`egrF*?&EV|+b&-eQo(`V82b32}q0yP3`lMW=G#E!y(0b9XL8A*PcP|`yw}x@FFparpeV;Qf_8Ai^?hg`;}3NilTbh@F( zSjKCOj2&Yeuf4yhX3ZGu`g%=|^L~FZUT=x9IP<#dE%DZ|YCCS?HA<^ycjGj*duZ`E zU1SR_UZaTap2cf5wfkn_Oh$Lu;@4s5DQy2dc*Q!$&2p=YBWJ+1Fi+61FI zIs=csVbG`QeAFnKQHP|H?xaC5qRN|R74!%#H)^vHZCtPsjAy!P7fm&9YXzZ<6!9$D zIgZe<>4MQOiUAsCR@2oyPquB_j_mnj3Zi9K#MCmL z>Oor`HtT_?X9F|pH7nwZu<_+#ab;M%A}scX#Xe88#JJFzrEOvMs3`=q4LV}BQ7}vs z3$jZF+bS$un4}&ujZGqBD;u)PZNjwhdzt3hO{$(V+HVnKhG{EGHj%I z`_N6p%77_U8@9??)fQ>qlT7s~$&`{>iO2Mco~6lDG6_TF7BQ}o&x&2IlI&A@dUz_C zPW3HK;%dJE$3+=7Ro%*~wqd6Ejap_iA5_Opb+cyi)dl&~rLV~qR4w0?F$z~=l%6Z9 zIiU;-wUFl5Vx^mT=csLurMtUJrBato9<>p%h3vb%HTlTP!QCR?ooFB2Fu1O=`czl4 zeE=s)=$O^kF)Yu<8?SpTuWI@#o*Bhy7k2-x!|RpaiXFuo5vHxis(HsM*0J z(_G}+hw@bY%6h{rSZS`0xuVtIvx<9<{hd0$u%D+AtJ+z4M|r0+;~e776drf+;KPTN zA9kjz#OeeL!T@S45y-o+95@!cx zt;uTWW4!X^U2bKF6ApvL>}V3iiJamVMnq#c?=(zTco|rCWAn%o+}&uc0vnoECT;Ns zrCP~GL$iptrqvm7+tj|=f244O4{5xxywhRvdM}ZtCe?A~TE|Gx9IF^3TByiSu3E6K zUPEiOSRJ9Y5uq5Z6k_GjTYRpSONpIJ-L__5y@aMkSUvrw##I%I#nRiedA&9QL)955x@Esk3&z2eF&0A_Ea>bL| zGmY<&AfFiWT4hMoVa&*=iC66935MOnwo$eiZu`m)(+8E8^DIZ0eUWEOgZ@zR_eDNQ zt)J}jF0%0@XVR4pIu*O#C~IRSm(!m97k>!M$XE4_%bpm zqx_#{EZ@>INKtUsy%Wc_ZO705+;2$fW7x<^s>XMm8FIUm&I)};zl!{Ndy8%GzmuK) O<=u!>e%v|WZpVMF<40-$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..6f1d0aa4f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,398 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dimitris Glezos , 2011 +# Jannis Leidel , 2011 +# Kostas Papadimitriou , 2012 +# Nick Mavrakis , 2018 +# Nikolas Demiridis , 2014 +# Pãnoș , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-09-22 10:19+0000\n" +"Last-Translator: Nick Mavrakis \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Εξανθρώπιση" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ο" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ο" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f εκατομμύριο" +msgstr[1] "%(value).1f εκατομμύρια" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] " %(value)s εκατομμύριο" +msgstr[1] " %(value)s εκατομμύρια" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f δισεκατομμύριο" +msgstr[1] "%(value).1f δισεκατομμύρια" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s δισεκατομμύριο" +msgstr[1] "%(value)s δισεκατομμύρια" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f τρισεκατομμύριο" +msgstr[1] "%(value).1f τρισεκατομμύρια" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s τρισεκατομμύριο" +msgstr[1] "%(value)s τρισεκατομμύρια" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f τετράκις εκατομμύριο" +msgstr[1] "%(value).1f τετράκις εκατομμύρια" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s τετράκις εκατομμύριο" +msgstr[1] "%(value)s τετράκις εκατομμύρια" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f πεντάκις εκατομμύριo" +msgstr[1] "%(value).1f πεντάκις εκατομμύρια" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s πεντάκις εκατομμύριo" +msgstr[1] "%(value)s πεντάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f εξάκις εκατομμύριo" +msgstr[1] "%(value).1f εξάκις εκατομμύρια" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s εξάκις εκατομμύριo" +msgstr[1] "%(value)s εξάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f επτάκις εκατομμύριο" +msgstr[1] "%(value).1f επτάκις εκατομμύρια" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s επτάκις εκατομμύριο" +msgstr[1] "%(value)s επτάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f οκτάκις εκατομμύριο" +msgstr[1] "%(value).1f οκτάκις εκατομμύρια" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s οκτάκις εκατομμύριο" +msgstr[1] "%(value)s οκτάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f εννεάκις εκατομμύριο" +msgstr[1] "%(value).1f εννεάκις εκατομμύρια" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s εννεάκις εκατομμύριο" +msgstr[1] "%(value)s εννεάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f δεκάκις εκατομμύριο" +msgstr[1] "%(value).1f δεκάκις εκατομμύρια" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s δεκάκις εκατομμύριο" +msgstr[1] "%(value)s δεκάκις εκατομμύρια" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "ένα" + +msgid "two" +msgstr "δύο" + +msgid "three" +msgstr "τρία" + +msgid "four" +msgstr "τέσσερα" + +msgid "five" +msgstr "πέντε" + +msgid "six" +msgstr "έξι" + +msgid "seven" +msgstr "εφτά" + +msgid "eight" +msgstr "οκτώ" + +msgid "nine" +msgstr "εννιά" + +msgid "today" +msgstr "σήμερα" + +msgid "tomorrow" +msgstr "αύριο" + +msgid "yesterday" +msgstr "χθες" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "πριν από %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "μια ώρα πρίν" +msgstr[1] "%(count)s ώρες πρίν" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "ένα λεπτό πρίν" +msgstr[1] "%(count)s λεπτά πρίν" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "ένα δευτερόλεπτο πρίν" +msgstr[1] "%(count)s δευτερόλεπτα πρίν" + +msgid "now" +msgstr "τώρα" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "ένα δευτερόλεπτο από τώρα" +msgstr[1] "%(count)s δευτερόλεπτα από τώρα" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "ένα λεπτό από τώρα" +msgstr[1] "%(count)s λεπτά από τώρα" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "μία ώρα από τώρα" +msgstr[1] "%(count)s ώρες από τώρα" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "σε %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d χρόνος" +msgstr[1] "%d χρόνια" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d μήνας" +msgstr[1] "%d μήνες" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d εβδομάδα" +msgstr[1] "%d εβδομάδες" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d μέρα" +msgstr[1] "%d μέρες" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ώρα" +msgstr[1] "%d ώρες" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d λεπτό" +msgstr[1] "%d λεπτά" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d χρόνος" +msgstr[1] "%d χρόνια" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d μήνας" +msgstr[1] "%d μήνες" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d εβδομάδα" +msgstr[1] "%d εβδομάδες" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d μέρα" +msgstr[1] "%d μέρες" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ώρα" +msgstr[1] "%d ώρες" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d λεπτό" +msgstr[1] "%d λεπτά" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..cf9ec2fcb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,378 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/humanize/apps.py:7 +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +#: contrib/humanize/templatetags/humanize.py:30 +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +#: contrib/humanize/templatetags/humanize.py:34 +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +#: contrib/humanize/templatetags/humanize.py:36 +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +#: contrib/humanize/templatetags/humanize.py:38 +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +#: contrib/humanize/templatetags/humanize.py:40 +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +#: contrib/humanize/templatetags/humanize.py:42 +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +#: contrib/humanize/templatetags/humanize.py:44 +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +#: contrib/humanize/templatetags/humanize.py:46 +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +#: contrib/humanize/templatetags/humanize.py:48 +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +#: contrib/humanize/templatetags/humanize.py:50 +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +#: contrib/humanize/templatetags/humanize.py:52 +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:83 +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:84 +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:85 +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:86 +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:87 +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:88 +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:89 +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:90 +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:91 +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:92 +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:93 +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:136 +msgid "one" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:136 +msgid "two" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:136 +msgid "three" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:136 +msgid "four" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:136 +msgid "five" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:137 +msgid "six" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:137 +msgid "seven" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:137 +msgid "eight" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:137 +msgid "nine" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:158 +msgid "today" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:160 +msgid "tomorrow" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:162 +msgid "yesterday" +msgstr "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' +#: contrib/humanize/templatetags/humanize.py:180 +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:183 +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:186 +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:189 +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:190 +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:193 +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:196 +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#: contrib/humanize/templatetags/humanize.py:199 +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' +#: contrib/humanize/templatetags/humanize.py:201 +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#: contrib/humanize/templatetags/humanize.py:205 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:206 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:207 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:208 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:209 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:210 +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s from now' +#: contrib/humanize/templatetags/humanize.py:214 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:215 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:216 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:217 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:218 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#: contrib/humanize/templatetags/humanize.py:219 +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b381a0fade18ca5146ca49a9e83a6fe8e30f607f GIT binary patch literal 918 zcmZva&59F25XVQ2U*iYp#fyjbmY|*a@ME(bBkXDx0|vvAUA!%ArgzfIO!v^;F;Q6r z5xj`t!J}{B8~6skffvsnd?rh2M|uHV-iUpUMK!M@AosiKByr z?h9k3R*WP^T&3FI6@@mA4s9wEx;;xR9cxDX(Q~>hUdghQKH*L<5{Gd_!%Z5;B-~(e zd^?2jpK(I&TysG_pA l7k9}r?KKs-)gw`>>*JDG;Z>_qEd*w8=haQ4g~j<__76c6-+}-D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..6417eb856 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,328 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-22 07:22+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanise" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}st" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}nd" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}rd" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}th" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}th" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0901a675251c58ca99d93db9cb80874685c6d0c9 GIT binary patch literal 3461 zcmeH|O>Epm6vu})P*|Wq36#=Orj*d#250RGNb59!64DRSs8N(6gpeXxa6z0p+UK9=KX2d6 zyl0Pp-ZS(8LpusP0LyM;Yy$jp2QFyWb~1JZybg|n--9FIpH@FSROqvoJ+O}PE0#Zi z9{M|PFBpI|^q0WH;AN2F-vAGRKUw_`tM9*~7@r1d{x>W?0x8bdmcM}`=`8jwe{J#Jx z-c9f>@GI~Ja{DcK1pPN5(tbV#Y2Dv}r2lU91C?U@3`qGjmY;!?&mS#!++F0s2PvPg zffVO$kn(xe>fc!XSIgmhiufljTVM_T?_1skXW*D zz5r6*r$E~OY0FtVejcQF3s!&C>aSZa+3{t|7D)M&AjRu}ND+GrL^@d&w%#CZG+Gno z;W5~5s~!buPt=}*-QT|}E|1uI4&qT_dto%+1F-!tdN&?|QH~#l(V8BHQA3LQd#8L; zLy9-rFz%j!QBLT&dk{wLNf=7l&-pHpo=s}^!DxS!qxJSU-HcRMqO2=wV?mQIr&*RN z`L9|m8V*mlnkbd1Y)eRo)ON&kX;Mjtr(0DGm%34$JG=+$sdPoZ)OG7xbX@KO z-m8f zjPoD}{qa#h@O?OX3t}aun45m%o`1p%PVnHl@EL#9N2{ERwDA`6Na`#yDi8U~k(8UsP}Cfz6z-lB-wA)k>+mg*L-UXZB~F`rFk603HNS6jw( z!g{^e>x~(jB5jJ*v4(2bi%qU0v+?ReE}fpL*D7;o=VmrD5{&tkX(f%2Sm{~^TQ;bB zy^}?$oZyXClxtxoFD#z&j&J(WbWM?aGqRy#EGXp1ms7K`^pN-Gs?29pfA5sa+dAa3 z)9>oZV-vi%ovccJXp#rDiOQCf_SS*E{d49z4CvG6dh!2Bcf9@NK2R>50EM?x-Z%&T h{%tOauH$=qz1@fRtpnXrrvLRo-+G8|_Wt98`!9Hvj4J>D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..10986588a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bfirsh , 2011 +# jon_atkinson , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f million" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s million" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billion" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billion" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trillion" +msgstr[1] "%(value).1f trillion" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trillion" +msgstr[1] "%(value)s trillion" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrillion" +msgstr[1] "%(value).1f quadrillion" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrillion" +msgstr[1] "%(value)s quadrillion" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillion" +msgstr[1] "%(value).1f quintillion" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillion" +msgstr[1] "%(value)s quintillion" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillion" +msgstr[1] "%(value).1f sextillion" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillion" +msgstr[1] "%(value)s sextillion" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" +msgstr[1] "%(value).1f septillion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillion" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillion" +msgstr[1] "%(value).1f octillion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" +msgstr[1] "%(value)s octillion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillion" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillion" +msgstr[1] "%(value).1f decillion" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillion" +msgstr[1] "%(value)s decillion" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "one" + +msgid "two" +msgstr "two" + +msgid "three" +msgstr "three" + +msgid "four" +msgstr "four" + +msgid "five" +msgstr "five" + +msgid "six" +msgstr "six" + +msgid "seven" +msgstr "seven" + +msgid "eight" +msgstr "eight" + +msgid "nine" +msgstr "nine" + +msgid "today" +msgstr "today" + +msgid "tomorrow" +msgstr "tomorrow" + +msgid "yesterday" +msgstr "yesterday" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s ago" + +msgid "now" +msgstr "now" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s from now" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c0df785dc6d646ae0eed0af79865265178abc70 GIT binary patch literal 5386 zcmc(iO^g&p6vsD`&Gp+9z6 z5l)^ws24R+2^=&r#IM8yCIpS3G0}r29>kcSNDM{~=!uI_|F8Q^@6L2Jdb5(+U%h|5 zeqB|sYP$CPqK=mY$~M$xsGDX9VT1cR@CW6`*+N_oUH}(?m%$a_tT{sTfGfc+a5qT$ zGpxVC{2J_o{wH(QTp=vj`%0o2b=nISz$0KE_!dZh=RgbWz{8~XgJkb#z6g@vMbYbubG#?TVemj{Y!62{8usuLGmABRzUJU!u_v+^u7}y z2h5YqQ_PQiVQ6_D2BZ?ZC$UxI zGddrnJvI-u8+8zMBPx}95~P32X)9^qc!?6~9jKIV{LBb!X(3VRoD86DL8Wqg0)Z67 zXPEYl=<0S2AS-d zlxz+IY0}zK7|4v!p1nY3m2BPu?8){F2Qr&8vu4UxAoJ90rpVW%8qyTV95It3@-&Es z1f|l$QQh|3r>$uxSkU9MbV)49oMsKve*0gSeIqz z&||~aR$tj6e64MEsLHaxSlVC}OIB$en&mb9J;hS72uJI2HQ`dsX}_JW!nYQHSE*!a9)fO4DdhgId-Q*zUO)_Ov6bVt>}%}%qochr9X zQM^iISCloZ?0Q*l4;l)dp_bj%Fl?0j`X(nQd(($|M|8a}nP(F<4$!A`U!il?&RyH5 zSESTi?A(f7raX*vs(~qo_!aDH)NI$=C`YO|0V*7PVt9u&FzrVJ9aX-y-5b%^Kb5i^ z*zbnvK+96;&Y>FpB3L`LUk}RCYs6+S*uPOG&B1O@E+3So!p2U4+1Q`GBhx!jR+xGF z!S~6veMgVATvp7gqsHN_y*B3@xe`@sborXTX=N39PbQvG^e`urbDpk^Lp7`86Es>jX5 zJ5Y6djE*~WZYLdMHU>s2H4^Fnd_SEH;YFT^yht26Z2#wqUl(LJ5ZFh^i{nxpeAp{Q MClXZ`Up+Mc0T70`1poj5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..4f13eb30d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,394 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2014,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-24 15:17+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanigi" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}a" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}a" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milionoj" +msgstr[1] "%(value).1f milionoj" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milionoj" +msgstr[1] "%(value)s milionoj" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliardoj" +msgstr[1] "%(value).1f miliardoj" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliardoj" +msgstr[1] "%(value)s miliardoj" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triiliono" +msgstr[1] "%(value).1f triiliono" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triilionoj" +msgstr[1] "%(value)s triilionoj" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvariliono" +msgstr[1] "%(value).1f kvariliono" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvarilionoj" +msgstr[1] "%(value)s kvarilionoj" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvinilionoj" +msgstr[1] "%(value).1f kvinilionoj" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvinilionoj" +msgstr[1] "%(value)s kvinilionoj" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sesilionoj" +msgstr[1] "%(value).1f sesilionoj" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sesilionoj" +msgstr[1] "%(value)s sesilionoj" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f sepilionoj" +msgstr[1] "%(value).1f sepilionoj" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s sepilionoj" +msgstr[1] "%(value)s sepilionoj" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f okilionoj" +msgstr[1] "%(value).1f okilionoj" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s okilionoj" +msgstr[1] "%(value)s okilionoj" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f naŭilionoj" +msgstr[1] "%(value).1f naŭilionoj" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s naŭilionoj" +msgstr[1] "%(value)s naŭilionoj" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f dekilionoj" +msgstr[1] "%(value).1f dekilionoj" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dekilionoj" +msgstr[1] "%(value)s dekilionoj" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f guglo" +msgstr[1] "%(value).1f guglo" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugloj" +msgstr[1] "%(value)s gugloj" + +msgid "one" +msgstr "unu" + +msgid "two" +msgstr "du" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "kvar" + +msgid "five" +msgstr "kvin" + +msgid "six" +msgstr "ses" + +msgid "seven" +msgstr "sep" + +msgid "eight" +msgstr "ok" + +msgid "nine" +msgstr "naŭ" + +msgid "today" +msgstr "hodiaŭ" + +msgid "tomorrow" +msgstr "morgaŭ" + +msgid "yesterday" +msgstr "hieraŭ" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "antaŭ %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "horo antaŭe" +msgstr[1] "%(count)s horoj antaŭe" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "minuto antaŭe" +msgstr[1] "%(count)s minutoj antaŭe" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "sekundo antaŭe" +msgstr[1] "%(count)s sekundoj antaŭe" + +msgid "now" +msgstr "nun" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "post sekundo" +msgstr[1] "post %(count)s sekundoj" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "post minuto" +msgstr[1] "post %(count)s minutoj" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "post horo" +msgstr[1] "post %(count)s horoj" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "antaŭ %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaro" +msgstr[1] "%d jaroj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d monato" +msgstr[1] "%d monatoj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semajno" +msgstr[1] "%d semajnoj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d tago" +msgstr[1] "%d tagoj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horo" +msgstr[1] "%d horoj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutoj" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaro" +msgstr[1] "%d jaroj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d monato" +msgstr[1] "%d monatoj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semajno" +msgstr[1] "%d semajnoj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d tago" +msgstr[1] "%d tagoj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horo" +msgstr[1] "%d horoj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutoj" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36238b3a4e47146b12ab5e6f42a6ebe3c2172e68 GIT binary patch literal 4409 zcmd6pO^g&p6vsV^1mFwv7IOhk<)L^NSF#Dj?mCl6{g8b9Em(Wr?R|F65IdwOQrC7!Ho?XTaf zf4x^-A6@hHvc8uX$~M${P`|&9vHjqg8}JY1r#{A(fIoxFz`wu;z|11X)`MAaEqDYZ z|E%@DX88%Y5&kQdD{o|M2=*>Z1rES|6}$=j2&6a{K?l5S?Ny5-dmQBO9|t#p&w~if zJ^(Q^cHZ&=NO>=U6z6xa0Io%n9C!#M|Ff27K^oULAoc6-k94CT=_E-0)0Q8Dl*$6$LWKk*h7Sy{@X&&g^Xg#QGK&8D+1=ASL`^wN_Yz;Vsx*2s0727C0 z?|4l%j7o*py;bNNLWTAil~Gg-JuLKIR0QeRc>5}Qv_41tvMA_?7Ud`*O?x-h% zUS3}|x}{ff&h}FFaGLIc#;(VMx=`*jk_ldSRbZrD+>#EI8S*c@5qYCEk2P&e-X)CN z1ovf0t8!<=$lHo&HF2+j!8l?|7`F+Yd08~E{o-eTJ}qU5#bL_%)Y0U|dOO$i_Rz{ylMZCf zJDwRSkH>N{=2bVPNJdXaTHO%7xwctJDHoWNl=d2CB&}a)K2quhW+SETH5aaujJ|Xl z)Lz+DqQ>)mCr@EXT4n*JZxXYxi5G@ZH>YL8FjYC0QLC4jBWdwy+T4;hx2Dapw7D%Z zeK{=^^W9lys-Be0Xxi0A*R|*2h0Kg*P3aryk^6wBkI9m8_LiL^((~~pFY@v+p(;9a zP&Tw@oC&|;mYtnJ#djukk!KF=zY zNlz%hCXDuq{IKWB8lR9fm;9l?!|^*RMhk^UDs|!3vL#)A7@brl5Ebc6N>MNJLk)bf z{3;);8q+A|ax*hCSwkV+DLG3$a?w~@sM+p0>F0(r6MH9iCvR2A<};6B3rU4xH5(YW zk+UY(s0mkX=cOu6fHdQWC-*pGiH>qjNzd7>N*d#?6#3Xu*Tlmta_MId)aYyC?9pD` zFLKogO@DlNJC7d62NhpC&I?1^Gps5~lE=3zPHXF)Elawf8ww!3}ClNj9It0~vqIo!RnJuGEU-RzMgrD^4ud$;{3K+B86(;l!Ci10S* z7-ze?T~0qONVeev9EJL>4-G!Fq*w^@tqBqJy6lTt6RIk z-hS5Wvsl0dZwSx09&g(d9qJyMRu*4Y0)oYcw{K zz#WbK+L4ERlq72H(K|^IN_!}Dsj6AY#i3*2`p^Nem-5_ObU+e=)*`a(*-4C~DZFZu zAd%VD9PZMnV_o`fmM`&}DM=WaNk=hvHi=3`(p3Jx4^#!XCs_2w36y3hPhB|oAO88S bG?Mw!^_lT7b5-4BbxZ|K8y#KIlpgyRci5T; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..8010bf220 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,336 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2014 +# Ignacio José Lizarán Rus , 2019 +# Jannis Leidel , 2011 +# Leonardo J. Caballero G. , 2011 +# Luigy, 2019 +# ntrrgc , 2014 +# Uriel Medina , 2020-2021 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-10 04:02+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}º" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millon" +msgstr[1] "%(value)s millones" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s millardo" +msgstr[1] "%(value)s millardos" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billón" +msgstr[1] "%(value)s billones" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billardos" +msgstr[1] "%(value)s billardos" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillón" +msgstr[1] "%(value)s trillones" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trillardo" +msgstr[1] "%(value)s trillardos" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s cuatrillón" +msgstr[1] "%(value)s cuatrillones" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s cuatrillardo" +msgstr[1] "%(value)s cuatrillardos" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillones" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintillardo" +msgstr[1] "%(value)s quintillardos" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] " %(value)s googol" +msgstr[1] " %(value)s gúgoles" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "hoy" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayer" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "hace %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "hace una hora" +msgstr[1] "hace %(count)s horas" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "hace un minuto" +msgstr[1] "hace %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "hace un segundo" +msgstr[1] "hace %(count)s segundos" + +msgid "now" +msgstr "ahora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "un segundo a partir de ahora" +msgstr[1] "%(count)s segundos a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "un minuto a partir de ahora" +msgstr[1] "%(count)s minutos a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "una hora a partir de ahora" +msgstr[1] "%(count)s horas a partir de ahora" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s desde ahora" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d año" +msgstr[1] "%(num)d años" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d año" +msgstr[1] "%(num)d años" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..62767df9d1cadd753152364d10d66f2a50239144 GIT binary patch literal 4425 zcmd6pPmB~r6vj(kK}JwSMNq^BS(yQPW@lkx8L|;{A(F5{mX(7ZNHJYI(=bytban6U zNH8W|G%@jDj3j#S{YbyrcV`w|k*P#D$7h?y(v-jX1+Vug(mVr0G72sds(_rRa#x{a^a2$Z8e`t6a+zkJ(hN~7amV-TRD8WJ4XTbZwuRw}(1+>AN#$LTRvd2IR{uAIP@NE#G z*#!_wV_zCx0%_hWAjSC;EQ0GWNdY_zlK&0Eb0DqjCy?%2vLw=tfTR;3`QJ7C8l?Gd zf|RO13~zxC!2a8CafY$SV6OzppEn#cJYe{W;c>&J;hTomhw z7iRoh5KCa+fhVx1S3#Qp*`VN1 zAdO!Iw}BL#?i&H&VlRUfzX}e4?|@nG8<67M0BN7sJQ(G7H%R%EAU&rBvGuG8J`TQa z_yM>U_IYqM_=B;3H{%a1kMudiagg*!LDIiw>@#Nk0!Z_HZ}=lf`MqZBpAD}Y{$_Z~ z@E=3=P!wm8;ZnmDhN}$M8g2mTc{dprK$>?Oh*D*v#@=nl$3bi(+ksB|M~&XuxY@YC zma+B5K{*Te1@bZrVp`o6xDYsUeMF-dBYdV^4uO^sVTl=qRJ`eaB;m z`v`>lPNYWP5NeM`U?U)w9yWR|YQ+d)UC<@f!Aj$!+PNQ{YK!W}LLWq@M)gfK{RleM z5;giJp_JI&WT4Sr)BE-$8E6G`+Fv%9bwthQIc@QZYO|(2Rkx&?g=>b_0s+A>w^nnN z?CWtvxl7f{S5c~>YHgvq9QCd^-5#lAm#UXfmHjSVFWUgL=-f9Nt9vCD*#2mS#!B;gtQ?JI zByuwPs+)qhR!>G+-Qe24v#g|)x5-ILdj}aw>u;Bjl=?Q=NNIcJ!j*#2mrjAob6m-5 z*3iJI)7X;OEW*@&%PelOio@tz)3RZh(n(}A>b1;mY4J$f+@3afq|MQ^xid1gm=Tg` zcaHg0PYC8Ks%l@=mFMAs{8`1CLi@ra_aRRm7iHhx@7PC#r|~5(S<(>NU1ooc?d0Y02O3Ud0grm z_mx+&CVAcUlr^F7?g@=?SqXSW*i(YnOV;5AK2Ex7W%qa$fp4hfIV)TB{YI%!n4O)? z`xMEY7IXQssu!Xq#;BQ41)-1bnJnZo6ZXH@Cl{r+SPl>%xd39Z~WFs{7 z*zhhZx*W?&Yu%Vt%M#z0kyR4Mb&jf99N4STAQPSOcSMfWJwqqAnAjZ0w#U07lQSLG2zv&N z)T&%ntnA|bW8p5)t6)y%`A>Pupt6sK!r9x6)=-qTL>Xr>7T3dSh@#-S&C&utoLUn` zW-BhAKi66s8Lc7b|GrQe;ILpk%vvB7J9RpL>EeI-uU+8_riH7S?;(j*)ns*Kg)-, 2017 +# Jannis Leidel , 2011 +# lardissone , 2014 +# lardissone , 2014 +# Ramiro Morales, 2012,2014-2015,2018,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-19 15:15+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanización" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}.º" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millón" +msgstr[1] "%(value)s millones" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s millardo" +msgstr[1] "%(value)s millardos" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billón" +msgstr[1] "%(value)s billones" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s mil billones" +msgstr[1] "%(value)s miles de billones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillón" +msgstr[1] "%(value)s trilliones" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s mil trillones" +msgstr[1] "%(value)s miles de trillones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s cuatrillón" +msgstr[1] "%(value)s cuatrillones" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s mil cuatrillones" +msgstr[1] "%(value)s miles de cuatrillones" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillones" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s mil quintillones" +msgstr[1] "%(value)s miles de quintillones" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s \"gúgol\"" +msgstr[1] "%(value)s \"gúgols\"" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "hoy" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayer" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "hace %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "hace una hora" +msgstr[1] "hace %(count)s horas" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "hace un minuto" +msgstr[1] "hace %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "hace un segundo" +msgstr[1] "hace %(count)s segundos" + +msgid "now" +msgstr "ahora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "dentro de un segundo" +msgstr[1] "dentro de %(count)s segundos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "dentro de un minuto" +msgstr[1] "dentro de %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "dentro de una hora" +msgstr[1] "dentro de %(count)s horas" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "dentro de %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d año" +msgstr[1] "%(num)d años" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d año" +msgstr[1] "%(num)d años" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mes" +msgstr[1] "%(num)d meses" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semana" +msgstr[1] "%(num)d semanas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d día" +msgstr[1] "%(num)d días" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hora" +msgstr[1] "%(num)d horas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a00392912616c83b15cb4d965642e670cf3b03e GIT binary patch literal 4203 zcmai$PmB~r6vj(M(NX!UBBD}&E3+)UGqY&e9auzGPy#Cm3kMIH+L@Y}#+k06t9qB+ z#G8pHycpxbiw6@E^&sI!;z2N;^k7W57`=Eh(P%swJ?Qtkt9xd;Yhz_=e_LO@diCnP z?ymi5%ewa%S`Gbi^pEafY!2Li7k;5luVZX4I0H_A0vrRcTK&4!f3RGCH)9pdAFynI z9>(ulehH3a{5!Y@+?tf+v=ZMeh3=xbeQkZVO1M+Ge=} zr1_m7`P*&vveoxnR_y$gA{kn;ZPJEHd&26cEMKiL%)W|ozUr(S@T_(}#T#urs4Jlf z{^-oqJaozz<$kzv3@GmtL*i!qjmIE<->4RpC!~*UMc;)^&*>xR+t7ES54VRgpgK`a z_n?>1sZkCoKWwbLB)X9tpRBd`qTlWMD)?WmDH{$;x7t>!t-2#F9a7KX&!q(_a9Fxk z)i4fQw|Y4e&Cp@Jw(bWm@0TODu4Uh4zNUP|ZS9neEAWD-3)OWg#Tshv(sCu#yddPO zr+HB+)=hJlR;-!kF3nXf&DTL`=uYlwvsk)=a)6eyEkih3gOS0xijS`Zn@ zMO)z&YN#kMe1R{tA@5t4YN5B@Q#YY zyhGBgJ8O`w81j}_Wi!%mcMNO!OOmy)o&~~0q39aFC)bUYo3d-fc;eJOlQ{~SEbs%# zC>;t6n@r0k88Gc%VcIa$!A~e9GpZ?8@VlqN5VmGnu@$L}3`ss4s!OtAypv7uq6{@Y zjdk9<)U>8Lu|Or)u?QV24&ZEwu3#LJ{b$FeMiSs z^y`(%^78VeA^(0$UZKU6B35*XPbu#!K@j=Z_E4QJbum=2T#0fG}73IIqFe zUg>v*9~|P1jtI3hvlkXlc+&$r+O8!-?|9HqO+RSY`ShZ1vY_ic-m7%BOU3t2sIaH& zJm|+mJv()XCx6bC1HNmP*TxT(M(!8-(1@@}Z_MCsOGQ1Rrtf>fe0XAXN$yKW_ohRl z?QUHky-HnLx=-FV)$#C-Zr_MR{GBL7JUlVFgs%01c`A;Y#;)_R#NwKP<3Jcs} zXXwxD@V*F*AL3sVE;=d{h{E2DskOr<-9^iG6yWO+j|U5_9PeZQ zb~q{8JB;j30v97<%k4uNZIaA7Ru8s_O&u1h(NV17, 2012 +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +# Leonardo J. Caballero G. , 2011 +# ntrrgc , 2014 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:47+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +msgid "th" +msgstr "º" + +msgid "st" +msgstr "º" + +msgid "nd" +msgstr "º" + +msgid "rd" +msgstr "º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f millón" +msgstr[1] "%(value).1f millón" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millón" +msgstr[1] "%(value)s millones" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f millardo" +msgstr[1] "%(value).1f millardos" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s millardo" +msgstr[1] "%(value)s millardos" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billón" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billón" +msgstr[1] "%(value)s billones" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billardo" +msgstr[1] "%(value).1f billardos" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billardos" +msgstr[1] "%(value)s billardos" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trillón" +msgstr[1] "%(value).1f trillones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillón" +msgstr[1] "%(value)s trillones" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trillardo" +msgstr[1] "%(value).1f trillardos" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trillardo" +msgstr[1] "%(value)s trillardos" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f cuatrillón" +msgstr[1] "%(value).1f cuatrillones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s cuatrillón" +msgstr[1] "%(value)s cuatrillones" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f cuatrillardo" +msgstr[1] "%(value).1f cuatrillardos" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s cuatrillardo" +msgstr[1] "%(value)s cuatrillardos" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f quintillón" +msgstr[1] "%(value).1f quintillones" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillones" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f quintillardo" +msgstr[1] "%(value).1f quintillardos" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintillardo" +msgstr[1] "%(value)s quintillardos" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] " %(value)s googol" +msgstr[1] " %(value)s googol" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "hoy" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "hace %(delta)s" + +msgid "now" +msgstr "ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "hace un segundo" +msgstr[1] "hace %(count)s segundos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "hace un minuto" +msgstr[1] "hace %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "hace una hora" +msgstr[1] "hace %(count)s horas" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "un segundo a partir de ahora" +msgstr[1] "%(count)s segundos a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "un minuto a partir de ahora" +msgstr[1] "%(count)s minutos a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "una hora a partir de ahora" +msgstr[1] "%(count)s horas a partir de ahora" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b5199ef8d074058976379615a49325b5e99f839a GIT binary patch literal 3939 zcmai$&yN&E6vsymV$_&Gj5kd@sxk3kG#V3c#*6X$x~pe*x@%))YCc=vdi|>U zy_$Oa)8=&-8QKK;cJw!{V{97ScmuxBwytArH@FQP1D^m#z@F1zclu|Jzk=jz%Z(YQ z!2o09_zqab_*?Kn@E?%;@3@Jvo!}9W^fpNP1;@)Et^b4L`t_NgeU7KW5zM~|-VA;K zlAkM%--EP|e?boJff1Hwvmmz2PB@+dw_$u5ydPWyuLs|B^KXF^noExFy7~7&^7p>e zKXUqI$186BQ^zkseArj`B7fh28^G_t50Qf(!BLDaRIpd@6L2^9Gf4V|Te5iU1!?{a zSOYIOeh!Xf{HNpgjf_2l@v|WLSpdn;C6MCuHAwOM!|9uD&E^~69_UTS*Ff^~h2w7^ z<#Wqz+5V?M^7AxE>-0c+{vx;wyb4mhe*r08zk^6A`wPT}{f)2tz?*K*;=T(cyAj7R zkm6N$^ZT7X36kH#PM>z1ar!Zko_ij|5n#vN_$4=g21MA?GlI~kXBc3c(P>}Q?nI}v zF-`;5=-sK2Z`wEghA6J|&h%be(es8-F@!g5ci@}iNR8ruZ~9l3Q;xqMa^oCy7AbzK z+a?T<-Zaj1b|_AG4YmdS0dzXIccb5fz5{)Ay9)!#)5GZWyTh?c8^w^~!$w9IL^qMu z@p_A&jk?`PtN+zP+4NZY)wb4c-5ql2k$N6~K22%mvGl9DX+5@n^?V}2*kir69x0#q z^NC+KvhOorQ(p30du8j}cu6#+?D~{)4h{Edg%lcI5{lU~ysVV-X1Gr)=ge@Q=F67h zYpLZ-k*!blq{;9##8QgL(j$5jG?0!aJ)xpkBohdlO049ft??6T>O|S9x%zgdnp76> z-_$BB+GJ|MrWNZRLcF-zS#CI(6N-0q5*HnkmbsHryJJ}^T9B*-ktt!5SafaFlj}xC zL)o>Wnpyg11}mwMsYppiJJMhrG9wqHVkTN*#xmQ%Czg^~9g1aq_jDY?)-GzcERB^h z$#bzjC!01n76vcM*x&|h@bH{aZCyDo`#QG4tZ7GK@MO|9!Mtwp%G?X{!E`Kzg>CSZ zu(HAT*6RC%T0N*A;PrZ=c3`Yluhn1}9G43b`CPF(5Y!F^^@F@V*{JOstD#k%6UGMf zu~4Qftd1M}nFLXs6KA`c&vbPx4S(z$q<$+M9DMZgc27jz@uuz_#>1+eh_(#orRX*I zi9V8VI(&3iE=5gU<)a;I`;Cc-#l^*OOKU_exkQgnWN(?H>-Vl^m8YCGzQ4vx}+dHd9NEn~6w&^+oesFFlZ7P{jvw zz4U;)ri%7X_L!%4RoOh1OXl9qr{a+5pwz5NfL|-;IWIs3hlL#H6=-OIQZBP1RPdCg zarGPLRj6QC&TL+W3Wj<1hJEI0!8p&{uyL*yj6K;LRHBk;DU*XzR4~m8&rtAIiLM@r zm~})`@toGbbB%QlWOGCio}AgeY?z9gCIPG^Dzv1!@y) z3M-Rlm~M77Yeu-LSQ>1d?PO4r;CWD-cwfXeim`-S75h{PiVw>+ktoe#jY1@?L{W+i ajVwO6%UMS+v!1y2u~34A+Ay&!WA-28dm`ij literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..b3f666b54 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,264 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011-2012 +# Alex Dzul , 2015 +# Juan Pablo Flores , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 18:03+0000\n" +"Last-Translator: Juan Pablo Flores \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +msgid "th" +msgstr "to" + +msgid "st" +msgstr "ro" + +msgid "nd" +msgstr "do" + +msgid "rd" +msgstr "ro" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f millón" +msgstr[1] "%(value).1f millones" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millones" +msgstr[1] "%(value)s millones" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billones" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s billiones" +msgstr[1] "%(value)s billiones" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trillón" +msgstr[1] "%(value).1f trillones" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilliones" +msgstr[1] "%(value)s trilliones" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f cuatrillón" +msgstr[1] "%(value).1f cuatrillones" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s cuatrillón" +msgstr[1] "%(value)s cuatrillones" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillón" +msgstr[1] "%(value).1f quintillones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillones" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillón" +msgstr[1] "%(value).1f sextillones" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillón" +msgstr[1] "%(value)s sextillones" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillón" +msgstr[1] "%(value).1f septillones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillón" +msgstr[1] "%(value)s septillones" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillón" +msgstr[1] "%(value).1f octillones" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillón" +msgstr[1] "%(value)s octillones" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillón" +msgstr[1] "%(value)s nonillones" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillón" +msgstr[1] "%(value).1f decillones" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillón" +msgstr[1] "%(value)s decillones" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoles" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoles" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "hoy" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "hace %(delta)s" + +msgid "now" +msgstr "ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "hace un segundo" +msgstr[1] "Hace %(count)s segundos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "hace un minuto" +msgstr[1] "Hace %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "hace una hora" +msgstr[1] "Hace %(count)s horas" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "Un segundo desde ahora" +msgstr[1] "%(count)s desde ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..31bccab7994a6e20db24a55e7c0506ac25d9b9e0 GIT binary patch literal 942 zcmYL`&ubJh6vv-he~neaix&^^)*|W7ES7Dju84Ju1&gJwy@|w`w=*d-$&zHcy9E&h z5%JJVd+0&*(t{U4&))n${9An4ruLDSPhRGm_ueFbZ_OM6*-i30JOger8jg+px|->`+u`QxUr zysuLhZ9ebwRfEEjmOl{=Q`U}?MII+S>98b8qp=b5g<<7J*Kvv!i+ zCmmVzOjyVJMkreer%lRwc_U1&*#peAZ6}Y4TF7c4)Ad8rs-h7E@;-_>WiN(wAGTz3 z+o*7_!Ai`txzf2|+G>qPqXp-)$^nl3>DI}AouUe=KfNI9k=p zp`zv{L;6dHW7is1LaG&(mBLtb-Ix6}zI3MZ, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:47+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "dos" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "cuatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "siete" + +msgid "eight" +msgstr "ocho" + +msgid "nine" +msgstr "nueve" + +msgid "today" +msgstr "hoy" + +msgid "tomorrow" +msgstr "mañana" + +msgid "yesterday" +msgstr "ayer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "ahora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..85274d0d4622d2850a32b6e371d560d85f2011f6 GIT binary patch literal 4406 zcmdUxO^g&p6vsv}K#Z2u??{rrU-PNd@gtaMf(a%b^#8hQdbW3lg{zgV`SpAC zuUFNts;l<$s=hZE$}ZFgQGdFHu|wdwCHO)4wU4nC;BVk6@EW)Q%-zP=CU6*B4;}@{ zKV$uGTYe61hW~fVHA@-G!`^Et!2#HBfwzMfK#Fq-bipguUfXZ%GU&kH0EfU=L4;H(!9P0so%0?MzseOAmv?xdGItydB0%!1GowH(iL`{L3;nAmM?+S?>%dO z2U5H~yyQx72qe1%mcbXmLGT^$N$?W*DA*5i2^<2kL`;B`*T6CaX<>6YRpi5o!D?*U1F3?%(5Ncz`6(tQNdxLHM9Ye)7O1^iz z9vela@|Z#LOF5--p8?wrV(LkuJX0weun|kzcdP9)wh>#7x&?J3s)I`Vhzjj*+SB)< z(q5uMXA-s&yOj)-hf(Q!qcx{eK&8C0fx)WqHP1&5uc>*~WT*m1s%f}d+>ZqW$35To zlw8zP6_qYkFJDcmn)2s`>T(2Kak@QH$u3ndpQ`9CT`%8>m{-Ft<@LOt?2dXO?&Xa{ zvs-!{=S(kU52x;)XzF?<4!HDQ6pTB8Cu1$_;#O2Fbw0Xy#(2$|rvoepFzI-hAF z8mXL&Mb)!{cV!A=#E85js1u6{jLV8-USrKUwlKXI|rbI=%2deH-5k@%4OHOr)%bLm^5lt0p zcRZ?jRrjg57P%9u{!6=M>6Y618B;fe~LKo41qc}=(zf(IpMU!-x8;~*HUYuzjr z3e(fm!EoO9~>2pu+ zb}Du3f1%6IPwaQcIyxF_QiSe4Sy9*lwURS-+|%hiOODXF!#pQOS|b#EiOwa_G`8VWhD-)mrpa~yMmC1;(JuDZSV%suSs zc7sv%+zJbO^bld1F|Oc+gIqjg8al&RVUG~$9g6#$f}u|jmF_i+Ltd{vdLrr3wKIT` z_mDJr9r@<0<$1W0gil|IxsaQ4XGJS(@zkVv8KcuLNo(4cSjj?~sEs&I+wj~8BInLl zIsG?kbjIZL#Tf_30oNHnu{w?ahq=z3H<>nzz~;{5KZcX1hHtt?!qbspNLs`i$`6>H SJ1aS>s~~`vBbxAh!TtlDf0)An literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..16cf8fb47 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,334 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# Janno Liivak , 2013 +# Martin , 2021 +# Martin , 2019 +# Marti Raudsepp , 2014 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-19 08:47+0000\n" +"Last-Translator: Martin \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Inimlikustamine" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljon" +msgstr[1] "%(value)s miljonit" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljardit" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljon" +msgstr[1] "%(value)s triljonit" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadriljon" +msgstr[1] "%(value)s kvadriljonit" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljon" +msgstr[1] "%(value)s kvintiljonit" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiljon" +msgstr[1] "%(value)s sekstiljonit" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiljon" +msgstr[1] "%(value)s septiljonit" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiljon" +msgstr[1] "%(value)s oktiljonit" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniljon" +msgstr[1] "%(value)s noniljonit" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s detsiljon" +msgstr[1] "%(value)s detsiljonit" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googolit" + +msgid "one" +msgstr "üks" + +msgid "two" +msgstr "kaks" + +msgid "three" +msgstr "kolm" + +msgid "four" +msgstr "neli" + +msgid "five" +msgstr "viis" + +msgid "six" +msgstr "kuus" + +msgid "seven" +msgstr "seitse" + +msgid "eight" +msgstr "kaheksa" + +msgid "nine" +msgstr "üheksa" + +msgid "today" +msgstr "täna" + +msgid "tomorrow" +msgstr "homme" + +msgid "yesterday" +msgstr "eile" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s tagasi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "tund tagasi" +msgstr[1] "%(count)s tundi tagasi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "minut tagasi" +msgstr[1] "%(count)s minutit tagasi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "sekund tagasi" +msgstr[1] "%(count)s sekundit tagasi" + +msgid "now" +msgstr "praegu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "sekund praegusest hetkest" +msgstr[1] "%(count)s sekundit praegusest hetkest" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "minut praegusest hetkest" +msgstr[1] "%(count)s minutit praegusest hetkest" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "tund praegusest hetkest" +msgstr[1] "%(count)s tundi praegusest hetkest" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s praegusest hetkest" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d aasta" +msgstr[1] "%(num)d aastat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d kuu" +msgstr[1] "%(num)d kuud" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nädal" +msgstr[1] "%(num)d nädalat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d päev" +msgstr[1] "%(num)d päeva" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tund" +msgstr[1] "%(num)d tundi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutit" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d aasta" +msgstr[1] "%(num)d aastat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d kuu" +msgstr[1] "%(num)d kuud" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nädal" +msgstr[1] "%(num)d nädalat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d päev" +msgstr[1] "%(num)d päeva" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tund" +msgstr[1] "%(num)d tundi" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minut" +msgstr[1] "%(num)d minutit" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..76e9f18f2c55eaa85ec3d2ac5386eaa8942d53c4 GIT binary patch literal 5287 zcmchZONsP!YP!6DOM%{C@5DGl80vD9;uN7hq_yf2e{2km1UcFL??cg@B7d#G<|0(vr z%lsM~fd3!nj#WZfuum|b1q-l00Ph8V1h;}KuM=Vm*bkC_0wjOHd=sSpKWF{{Qk>1J zV;%x&Tn!LS;#H91TmY&6&)EKx?TtM`Nci`I+dvz{RK*J*EyXL$*FhTB1(4!>0@ApC z2C2U_*T?=L=HuYq@Sg$cxi>)4ea!7Yv47PKaeD!z{vH9Z0VkM~;Ek}KU{=6eV9&Gt zJo7E)d(2DBFPYyke`Wp!(mYop$<*HsAlYk~n?PE>&D`D#V#!1SJb#rCL*PxYzrx^% z--7ppzkvmC1DrJ9y&(B*a2t3Ir1tm0e(-y6J9yLDm}ATe*a!bhAg$j=AjSEP?Q7S? z{;eSOa~Pz27?9$>#`Y)7%glAy%#^>~AW|nzf~2p4)ZdFBjpq_bLwn3qBP#NW7(e$9qBUN3V5Tn+z0 zkn(gCq<)VvpJbk7DyC*S%sO+988R1{XPHlf)Xy_)p95*WFEC%`_VXbAI>ZI`zXM`> zLp|r% zRBZdG&|bk7jdF-rJbH&HZ?w0@QO8iJ+!G_cmeafV2CtVWq27T?d8WOJEi5Feg*uA5 z50%R8F$9)A%Gs@C_x9Pk7N~+RRmHSeGoGnS*DSy_uWF$#^p|GjlvArY#=WA?*3&u4 zd~d~=im7En=D6xP@$!7GadVXUUNar!X!E^up|ZUkb$7qx=0%?i^ZmYV~OSa&zGH^&b;~9lkFMyWoORveRiM9LgzPJ&X`!(m;y&XN`ii{^%b=9hQcgl0+5Q?9I<&}$D!J`Tr%^of>eu_|rRPNf=%8E0OL89Xms z6@;Fu1x{UCGa>Hvie6jVYEi`SyC^6uNuuywH1QgeidVCn&bUD}lF?1K9v8HpB@wZk zW>KqXRK%>Nq5NREnI-Mr=andypH-?_W=@Hw`-~Dr+k6~X3p!B@Xgu3-RZSLGoH>it zOUx2XKWLhz9kMitI+T?S!gTFaMy+1c9L|bIvgXdLxhrdqX3gEP>Fasz3g0;`f~u#r z2n=npz|@WBVM4)z5sTUnv`6j<&z#cJfpyrnj%&}yd0CeBDdkp7&ttk_yudo*R~*~g z7gl_0(v)S-#L-D>zo%6It#v>Jx-18arQKGsWR-T}wmdwzy;v$1A+#RT^A5#q>PD^N zs5LkwOT*=no!g5jJ&$6$Sd*S|{hA7lSC$7|J!|CQT1|PLs%zJF6!7+6?X=np8UGow$_0|W8264dzV0UZt$dX5}E za!bBmW z^RP{t={XUI*-+7`(x#OeaZ@8^qtmZVofRhv5ubm{X;THXbOJ7~Wreuncv;Y%PCp%I z^kIX}Iy31vXHMTWah}`L*cvE5g{_Ki*=yBg6PH;BU&v%X@;40)yqS__Ys>VS%{dus z?KsV6PPSTg%VjF7>z1WfRgxh7jKLYsuV!>Og>p&-vE$Q=EuR8$qiAZNqqnw0!v6Se z_jM(7?QSu-6|+xOol%>O)Lk4F2Ua+x1D!KYYNDelYVV9jE$m&wVX)+gDT5=grb0o3 zki9m2CeUpZgzYFOPd!%fa#Wp~qJgk3F$GS5#7DOx^irE{|JS~zw5>fwQ#Bs`?*--e h%-R0`T$j{R!$FQ5QFV}kio(a+l!G$^SAn=j{0m0DW{>~? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..99a545be5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,397 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aitzol Naberan , 2011-2012,2016 +# Ander Martínez , 2014 +# Eneko Illarramendi , 2017-2018 +# Jannis Leidel , 2011 +# julen, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-08-23 14:56+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizatu" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "milioi %(value).1f " +msgstr[1] "%(value).1f milioi" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "milioi %(value)s" +msgstr[1] "%(value)s milioi" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "bilioi %(value).1f " +msgstr[1] "%(value).1f bilioi" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "bilioi %(value)s" +msgstr[1] "%(value)s bilioi" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "trilioi %(value).1f " +msgstr[1] "%(value).1f trilioi" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "trilioi %(value)s" +msgstr[1] "%(value)s trilioi" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "kuatrilioi %(value).1f " +msgstr[1] "%(value).1f kuatrilioi" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "kuatrilioi %(value)s" +msgstr[1] "%(value)s kuatrilioi" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "kintilioi %(value).1f" +msgstr[1] "%(value).1f kintilioi" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "kintilioi %(value)s" +msgstr[1] "%(value)s kintilioi" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "sextilioi %(value).1f" +msgstr[1] "%(value).1f sextilioi" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "sextilioi %(value)s" +msgstr[1] "%(value)s sextilioi" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "septilioi %(value).1f" +msgstr[1] "%(value).1f septilioi" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "septilioi %(value)s" +msgstr[1] "%(value)s septilioi" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "octilioi %(value).1f" +msgstr[1] "%(value).1f octilioi" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "octillioi %(value)s" +msgstr[1] " %(value)s octilioi" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "nonilioi %(value).1f " +msgstr[1] "%(value).1f nonilioi" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "nonilioi %(value)s" +msgstr[1] "%(value)s nonilioi" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "dezilioi %(value).1f" +msgstr[1] "%(value).1f dezilioi" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "dezilioi %(value)s " +msgstr[1] "%(value)s dezilioi" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "googol %(value).1f" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "googol %(value)s" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "bat" + +msgid "two" +msgstr "bi" + +msgid "three" +msgstr "hiru" + +msgid "four" +msgstr "lau" + +msgid "five" +msgstr "bost" + +msgid "six" +msgstr "sei" + +msgid "seven" +msgstr "zazpi" + +msgid "eight" +msgstr "zortzi" + +msgid "nine" +msgstr "bederatzi" + +msgid "today" +msgstr "gaur" + +msgid "tomorrow" +msgstr "bihar" + +msgid "yesterday" +msgstr "atzo" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "duela %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "duela ordubete" +msgstr[1] "duela %(count)s ordu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "duela minutu bat" +msgstr[1] "duela %(count)s minutu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "duela segundu bat" +msgstr[1] "duela %(count)s segundu" + +msgid "now" +msgstr "orain" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "segundu bat barru" +msgstr[1] "%(count)s segundu barru" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "minutu bat barru" +msgstr[1] "%(count)s minutu barru" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "ordubete barru" +msgstr[1] "%(count)s ordu barru" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s barru" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "urte %d" +msgstr[1] "%d urte" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "hilabete %d" +msgstr[1] "%d hilabete" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "aste %d" +msgstr[1] "%d aste" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "egun %d" +msgstr[1] "%d egun" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "ordu %d" +msgstr[1] "%d ordu" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "minutu %d" +msgstr[1] "%d minutu" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "urte %d" +msgstr[1] "%d urte" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "hilabete %d" +msgstr[1] "%d hilabete" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "aste %d" +msgstr[1] "%d aste" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "egun %d" +msgstr[1] "%d egun" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "ordu %d" +msgstr[1] "%d ordu" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "minutu %d" +msgstr[1] "%d minutu" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b7dabe79fff0164bda546168be2f24e475f40338 GIT binary patch literal 5808 zcmd6pTWlQF8OKk9n@|G^`Z(PBoI$Cu~fB*Dj`+s?V(7hQu%)~-;8&? zXV&n>k;d%KP7>lF)xB%wB|ANC{@8wav%OL500&WNY1onZe(D?^oKe!vLgWJFb zko^7uQojvXM%)jQ{aG*rz6WaHf56S4#3JZC_JK72kC?v!$^IELdsQ@E8KgMA2yO-6 z0%_h)SYH3FNZt<)k{?KZAAm?{(RFpiOF)X#S`b~u4Iqs>0Nw!J!TKWWCs{the1-Mz zfaL!n>;KOB|FeAUHPL*1AW}}`LCTk5<}SA1!Sa2~2bm8uA7LI~R+v@hLFNQV`#i$( zQRXyA^Ur{^?-yAAGV5Ohkse_|iiHJR5O}?W@0ss|6elWlUK_#|_5)szx&;+S6}~&x zfE4r1s7RZz+=6G8+v}N>N0dW!PE>9SpHaT-;C74~(by9U;7)E+PEw)V+K5VfzX_E} ze}wSfZ$cYe4DU9@pUQVok@jJsJC4*1a{yO7j1k?NUR26U$}uY6i;z4ENh@mLdWHE< zIYIZ6VvbZ75|#3P2z3`Km2XE7NX_sLUq^CJZ^@{7dd8J{#cqUTqke z{#;oeFsoJ5wpP@YjH1F*t*zL0#jdstsZiAvy2?FOeMs%CRC}t0w<+DW(^YBO&(M`B-LfNeWt(F8>AA99(|&F)a&q|z zyR!Yv)H>B^xiU@Lep2MC(khP0l_|=$BO*_QQgJ|u>dr<@x6H>4p(AKk!!!8u7VU=R zW!&Gt9BHFFo%l3e={Cp2reifl+bS&|G1A5(vQN^hr#Bffc1&!#CCBZCvwT3(@o?;r z^k^C_@=7d*SsC|4*_<#$8U2N&dksggdS=bg$_=!QuAY)C>4!xGH^qa7C6{pc6rU)D z%(H8@<6uMHq%95`u4g!;9(C+TjiRUB zRnqnuj*IVQL6#oXt%}|KfKj&{PaAP7W=Y%CsJPmgU69?Q_m6429YgovtL@P}qagFy z+%_$n({fwTENsg6Wpmjq9JL3G36sWL@*C2!TeSS3%nuf_Tl=yo-S;A0v@u7w+^X)` zPC<^`t(SF2j_B_AxLz{l4o5ewl36i5y_(Nvx87E%>1MURXxDb4vsG#66+;^{^jblV z(jIV!d&fPmUKkjdoSf|UXlS!+9HJfr(dJ@Qx%)s_AINl%+%kda3)<&@ccS^R{oRUZ@np1NKJ4?%;c+-mX>1^Tz z36p*4eS4 z5v@o$=NGee9#v(ft^W$I+V)+pZ0R&!Vhg5mm*zxp79oFAoSTA-drCiZ{wciUPA_Zm ztf98Kot#H#X_10sh}$&jn_AQOa?G)|sU4m=z73ciqtjR7E3%GY3LmX$;m_hSPK7TA zd`(Y^BToj$@Srz%+zu5hK7w%50, 2012 +# Alireza Savand , 2012 +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# MJafar Mashhadi , 2018 +# Mohammad Hossein Mojtahedi , 2016 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-06-23 23:07+0000\n" +"Last-Translator: MJafar Mashhadi \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "انسانی‌سازی" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ین" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}م" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}م" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f میلیون" +msgstr[1] "%(value).1f میلیون" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s میلیون" +msgstr[1] "%(value)s میلیون" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f بیلیون" +msgstr[1] "%(value).1f بیلیون" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s میلیارد" +msgstr[1] "%(value)s میلیارد" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f تریلون" +msgstr[1] "%(value).1f تریلون" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s تریلیون" +msgstr[1] "%(value)s تریلیون" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f کوادریلیون" +msgstr[1] "%(value).1f کوادریلیون" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s کوادریلیون" +msgstr[1] "%(value)s کوادریلیون" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f کوانتینیوم" +msgstr[1] "%(value).1f کوانتینیوم" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s کوانتینیوم" +msgstr[1] "%(value)s کوانتینیوم" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f با ۲۱ صفر" +msgstr[1] "%(value).1f با ۲۱ صفر" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s با ۲۱ صفر" +msgstr[1] "%(value)s با ۲۱ صفر" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f سپتیلیون" +msgstr[1] "%(value).1f سپتیلیون" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s سپتیلیون" +msgstr[1] "%(value)s سپتیلیون" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillion" +msgstr[1] "%(value).1f octillion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" +msgstr[1] "%(value)s octillion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] " %(value).1f با ۵۴ صفر" +msgstr[1] " %(value).1f با ۵۴ صفر" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s با ۵۴ صفر" +msgstr[1] "%(value)s با ۵۴ صفر" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f با شصت صفر" +msgstr[1] "%(value).1f با شصت صفر" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s با شصت صفر" +msgstr[1] "%(value)s با شصت صفر" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f گوگُل" +msgstr[1] "%(value).1f گوگُل" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s گوگُل" +msgstr[1] "%(value)s گوگُل" + +msgid "one" +msgstr "یک" + +msgid "two" +msgstr "دو" + +msgid "three" +msgstr "سه" + +msgid "four" +msgstr "چهار" + +msgid "five" +msgstr "پنج" + +msgid "six" +msgstr "شش" + +msgid "seven" +msgstr "هفت" + +msgid "eight" +msgstr "هشت" + +msgid "nine" +msgstr "نُه" + +msgid "today" +msgstr "امروز" + +msgid "tomorrow" +msgstr "فردا" + +msgid "yesterday" +msgstr "دیروز" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s پیش" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s ساعت پیش" +msgstr[1] "%(count)s ساعت پیش" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s دقیقه پیش" +msgstr[1] "%(count)s دقیقه پیش" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s ثانیه پیش" +msgstr[1] "%(count)s ثانیه پیش" + +msgid "now" +msgstr "اکنون" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s ثانیه دیگر" +msgstr[1] "%(count)s ثانیه دیگر" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s دقیقه دیگر" +msgstr[1] "%(count)s دقیقه دیگر" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s ساعت دیگر" +msgstr[1] "%(count)s ساعت دیگر" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s دیگر" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d سال" +msgstr[1] "%d سال" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ماه" +msgstr[1] "%d ماه" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d هفته" +msgstr[1] "%d هفته" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d روز" +msgstr[1] "%d روز" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ساعت" +msgstr[1] "%d ساعت" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d دقیقه" +msgstr[1] "%d دقیقه" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d سال" +msgstr[1] "%d سال" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ماه" +msgstr[1] "%d ماه" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d هفته" +msgstr[1] "%d هفته" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d روز" +msgstr[1] "%d روز" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ساعت" +msgstr[1] "%d ساعت" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d دقیقه" +msgstr[1] "%d دقیقه" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..54466b805b19df5d73576b13e63e6c5cdd9e555f GIT binary patch literal 4425 zcmcJRO^g&p7=}w&MFtTBMNq*;S=j-4XJ=qx88QduM~G}7xDXQ)lV+x7rnhIRmhS4A z9g&k44<;Unk%I>h8@zDP3&g~qgw+t^5lUhJlFfM@xbO+o9z6oMz zb_GOg>=VtaAieh*NaNfB^WbK@BnQ3-lK#5phalzkElB;AFAsg=Ao(~*`gzUIKziRz zke2E<%|E~g5&x;VEW_BNh}VInk7|}Qk7~ZGIjz~zd_(gckmh+2r1xFY@duihL8Q(; z*6m+_NP&F`zJxu!4z5PL3mIrbUs_) zQ{Z`!^1Tdh0>9Die}M+#b(k#q_kiS|0!eR! zhSPSVVN0>7QsL#4YmioxvL+j`p;AIKHBMR)QlwmiG+9L?d>MQJW=H%)u)cbBBu?`Sn^a+CvIe?{%PP z(R|vRJCU7&Mco~4^|GfR>7KDXb$6?haNc1}65hL5k);1l>ydEZVKoxoL2F?P&ge@g zLFra(VKt1gp|j_(CEYNO&{MrIzr)BEP=IhhLSmo z6J$=gmhc*ul5Wv>)^deyydXV?H!L)Zns3#(ImNAJ(KuuaVS9CBq^{IVF_&w%+oOs) z+f_b0T9(aRm{k`I-91;ebJ@(~k;#L-{PUw@nf*8{Tp)qY3^G)FR^?_ImM!)feS>wSxGlIr`;9#@Zj}yhtA1-wj9Z;naJTlG<8sm-T%>7xPmbHe%e3De zQ, 2011 +# Jannis Leidel , 2011 +# Lasse Liehu , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-22 15:15+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Ihmistys" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljoona" +msgstr[1] "%(value)s miljoonaa" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljardi" +msgstr[1] "%(value)s miljardia" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s biljoona" +msgstr[1] "%(value)s biljoonaa" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadriljoona" +msgstr[1] "%(value)s kvadriljoonaa" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljoona" +msgstr[1] "%(value)s kvintiljoonaa" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiljoona" +msgstr[1] "%(value)s sekstiljoonaa" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiljoona" +msgstr[1] "%(value)s septiljoonaa" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiljoona" +msgstr[1] "%(value)s oktiljoonaa" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniljoona" +msgstr[1] "%(value)s noniljoonaa" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dekiljoona" +msgstr[1] "%(value)s dekiljoonaa" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googolia" + +msgid "one" +msgstr "yksi" + +msgid "two" +msgstr "kaksi" + +msgid "three" +msgstr "kolme" + +msgid "four" +msgstr "neljä" + +msgid "five" +msgstr "viisi" + +msgid "six" +msgstr "kuusi" + +msgid "seven" +msgstr "seitsemän" + +msgid "eight" +msgstr "kahdeksan" + +msgid "nine" +msgstr "yhdeksän" + +msgid "today" +msgstr "tänään" + +msgid "tomorrow" +msgstr "huomenna" + +msgid "yesterday" +msgstr "eilen" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s sitten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "tunti sitten" +msgstr[1] "%(count)s tuntia sitten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "minuutti sitten" +msgstr[1] "%(count)s minuuttia sitten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "sekunti sitten" +msgstr[1] "%(count)s sekuntia sitten" + +msgid "now" +msgstr "nyt" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "sekunnin päästä" +msgstr[1] "%(count)s sekunnin päästä" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "minuutin päästä" +msgstr[1] "%(count)s minuutin päästä" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "tunnin päästä" +msgstr[1] "%(count)s tunnin päästä" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s nykyhetkestä" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d vuosi" +msgstr[1] "%(num)d vuotta" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)dkuukausi" +msgstr[1] "%(num)dkuukautta" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d viikko" +msgstr[1] "%(num)d viikkoa" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)dpäivä" +msgstr[1] "%(num)d päivää" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tunti" +msgstr[1] "%(num)d tuntia" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuutti" +msgstr[1] "%(num)d minuuttia" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d vuosi" +msgstr[1] "%(num)d vuotta" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d kuukausi" +msgstr[1] "%(num)d kuukautta " + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d viikko" +msgstr[1] "%(num)d viikkoa" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d päivä" +msgstr[1] "%(num)d päivää" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d tunti" +msgstr[1] "%(num)d tuntia" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuutti" +msgstr[1] "%(num)d minuuttia" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..213c87e25b2b9c4b4fa0007689848e0f725e350c GIT binary patch literal 4484 zcmdUxO^g&p6vs?dYP#jx~umC zLNwu^2XAWhU?K-XLPGrDpcg;lq9L9P;cC=_2MtC|G|^~c{J-g%p6;F5g`2UG+F!p{ z|9VwjucqIAv#jrRhPDlT75eu#F?ImFa0~vR{m{qQQt(G`8Tbdd2F%>b*g7x^t_BZ* zJ@D&iD z*@qyu#y+;31!>*OAjSC&EP$)ANDh1&B>!p4_d(j%w;;`1vLwATK*2+3HwjW#TmvPfV~_ff7Wuua-Zc9%L&UF%a<+R0O>u?fwbNQYrkjt0f?=$ zkL>stAhy811SgQwtKi+RNAHOCaR3~E{T#R+d>MQ|;6)sFvVxn?P28{yw)IRnzX zbKoF&1*Ca@gP6h|!^_fn<-m2|5ikp$21$R>@@tUtzv!;$JU3bvK%|~+0UrcMK)RoY z!AHOlTnWAga_}AN{|Y4i&mifS;H62w79{;{kb}=#|BE2y@of-C#Lj{@gYSaa8oLN0 z6#LBDS1iA?{KfJg%cb{3^Hy1Iuq;{b1!=v*Am#B{kn$?P+rcVG?;U`oJ7M_(h%~aT z==Y*iqu*@1Ie2KDyLHeRY_`u?kk;CQ{t!By1I4DiP@_CjuBg$w()ugNKzkIO^0f(l z7@f{&H9B6G7160Z9-;M@&Yar)5!eujt+yI}f~{7t%v-Jjm)mDtpVm3hU8DQN(dm9r zqx(&F`aX2JyVU5LM0ui|QKMYb@9kkS&~oT>zN~-1m31Qq11_pMVO4zH;7U)yH7V+$ zgy5)GuX|c8=y7GaOV!I))w-(diBMgRMpv9}kJ743)yt>Lrc2k$cRUoX-=&<->#6Rj z$HQLUKsLLj^Ejt_DSJ3g_eNvaQ(;3W?}TK6H#`*@X_H&lp)!NP?3u_L^#Su1yL#K_x@Xf^Sy{((4RTNsZC#cMkB=LRI74QB=Mj6}3Z6^}@-S~INTO-fe5 ze5Qm6eNi`FLpqfZ&$6$7K!uG#m%CyH*Drn!7ShrxvADJ5Lh9&nW4%4=1!rhwYMlvW zEx4a4DUZc+G8R1m?z0C8fO1nWVHga3X2__0A)uzRqc+w7t&4QbcI7VKs2Zb%|%j4mbzpq(@R`moT!#i}_-~$!~LtL%fhL@Ezrr^+a*H?j7}IR!K98DXJQZs&vMsXq5OKU#fDA z57dllmU6kNsi~}?cwR+LXUn>gi#FOu-OkQc{M=w>|K9z(JFis8<}*8Sf26{mW}4Wv zk<%vEtP4+V=j9r%zceGyjPG%VJ33mcB7JAKDr;PTYKadY^-R3W60i7~u{wQ9oIToa z1SPJTEi)J?Zs*bC$bjObyfC;u!@N45;eyAtmAQzYFyop^Ut$zhfm_nU7j&H5y>z}u zWsRLlX|=1gqSPh?cF|-dk6j5Fs{aDjH7V>>N@HJAIA0}=t8QA{tCS`RY*IW=F>ROK zw6sSx4RA;17XH~YUH|dKu7E`~HV}sXC9(+*m9z!7?MalXb{%Nlg@n@HjkrLzb)A^A zXQHAhdqlM(L3G6^Y+E}wZmjGC<~50u*duDopNJXh=0>!tTId;8_SA8P{2Ih-m(_`6 z*(8I~5LMhLV9M$Y&QmVh>W20b+N2T427cw84OqLQ7D`<@-x-h0&hYKx zoKS{^ik&>QBM6(Laz~C3oBka8KQ`%i8Wk*`5+_1Ba(5lB5OZ6}1Hx%m^Q6!I1w3)J AmH+?% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..5d92a4fe7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,330 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013-2014,2018-2019,2021 +# Claude Paroz , 2011 +# Jannis Leidel , 2011 +# Jean-Baptiste Mora, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-25 10:04+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "Humanisation" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}er" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}e" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millions" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliards" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billions" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrillion" +msgstr[1] "%(value)s quadrillions" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillion" +msgstr[1] "%(value)s quintillions" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillion" +msgstr[1] "%(value)s sextillion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillions" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" +msgstr[1] "%(value)s octillions" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillions" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s décillion" +msgstr[1] "%(value)s décillions" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gogol" +msgstr[1] "%(value)s gogols" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "deux" + +msgid "three" +msgstr "trois" + +msgid "four" +msgstr "quatre" + +msgid "five" +msgstr "cinq" + +msgid "six" +msgstr "six" + +msgid "seven" +msgstr "sept" + +msgid "eight" +msgstr "huit" + +msgid "nine" +msgstr "neuf" + +msgid "today" +msgstr "aujourd'hui" + +msgid "tomorrow" +msgstr "demain" + +msgid "yesterday" +msgstr "hier" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "il y a %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "il y a une heure" +msgstr[1] "il y a %(count)s heures" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "il y a une minute" +msgstr[1] "il y a %(count)s minutes" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "il y a une seconde" +msgstr[1] "il y a %(count)s secondes" + +msgid "now" +msgstr "maintenant" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "dans une seconde" +msgstr[1] "dans %(count)s secondes" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "dans une minute" +msgstr[1] "dans %(count)s minutes" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "dans une heure" +msgstr[1] "dans %(count)s heures" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "dans %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d année" +msgstr[1] "%(num)d années" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mois" +msgstr[1] "%(num)d mois" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semaine" +msgstr[1] "%(num)d semaines" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d jour" +msgstr[1] "%(num)d jours" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d heure" +msgstr[1] "%(num)d heures" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minute" +msgstr[1] "%(num)d minutes" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d année" +msgstr[1] "%(num)d années" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mois" +msgstr[1] "%(num)d mois" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d semaine" +msgstr[1] "%(num)d semaines" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d jour" +msgstr[1] "%(num)d jours" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d heure" +msgstr[1] "%(num)d heures" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minute" +msgstr[1] "%(num)d minutes" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ae2bf8db --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1fb51b9f436b3b88c353c28b310e43581a07e380 GIT binary patch literal 5112 zcmchaUuYaf9LJ{`O+BmCwrZ=kj@H`5c5}H)(x#W3e;QMWHW~d2yB{0{Nq0cf-_%?J>Ha@zc6LVN^l3g1?m_=+ zAcka%Ag02WG%sp?4${)T)chK}74~J#@4>rZ|E_JeG3wu}xl7a19M*hF^Epiyqj8Q_asbFKK?E`IY8n5L<*@ z0qH*9Y5fO~=Jg9m^ZHfy|DpB2Ks@%aP(ST8Dp+2)Kd8M8mEMsaGEjC!2(NT6Di-R) zsQXcA9xLTRG!P1g@Pq}AHQeXgWOt+S0P0>;dVlC0St$>pu>q^X+ z+*``?W^bb$m?j<*RV=zDB_2b?Omg23{c%;bJ zq#DAccndKWBJwndh5*$h;X1{DO}VpzP05PSJl7Mq2_;On018b~cJu7^LRFvU`Y1?yT;+U9`eqfC&$1PZgD~_^q zGQ$%SPg}>ttV^!e6LugnJl&f*Wc41f(rKPfW%~Q~^`az>+A6SezU`@!9Y{aJk5-Ng zez;_NVu23_)ZtEv`Nv9-CquO-FMBG-AHgp@r(!$8$_cxi;bXq5ioB~B1T&dra&B&} zr}ks~qMVGTy8?_9{y6E_$?nAX*!XCDVX2zeGJJ5-4Qi9jaK}zelq$YmvW`f=04(`crsIeZYUbl6H!e;=Ct-9w3n_Ct#5#-dv_qe$cBxJI zi*B`^QkeUiA5c5Qc>1KJv`dXAVY*wp)LJ5Mevto9NBqk`i#2^Q)>AipW@z~K%CYZN zbj$Y1(WkFDuIs7tm4mM0(MgDI)()|LpLnh^AEwsg*Oa6T2eE(cvHD@uQd2v``V)%h zCG!DrEq?KAWIjBu#m|_4R-HUoZ|rrG^wu`g8EnQ}N(pAjHzuG5HRhR$6MG2e6R@IML Z;8z!!>v?X4+2!g5A04bvT_Op+{{U9Y#%2Hj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..5108ded75 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,516 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-22 21:44+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ú" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ú" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milliún" +msgstr[1] "%(value).1f milliún" +msgstr[2] "%(value).1f milliún" +msgstr[3] "%(value).1f milliún" +msgstr[4] "%(value).1f milliún" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] " %(value)s milliún" +msgstr[1] " %(value)s milliún" +msgstr[2] " %(value)s milliún" +msgstr[3] " %(value)s milliún" +msgstr[4] " %(value)s milliún" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f billiún" +msgstr[1] "%(value).1f billiún" +msgstr[2] "%(value).1f billiún" +msgstr[3] "%(value).1f billiún" +msgstr[4] "%(value).1f billiún" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] " %(value)s billiún" +msgstr[1] " %(value)s billiún" +msgstr[2] " %(value)s billiún" +msgstr[3] " %(value)s billiún" +msgstr[4] " %(value)s billiún" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilliún" +msgstr[1] "%(value).1f trilliún" +msgstr[2] "%(value).1f trilliún" +msgstr[3] "%(value).1f trilliún" +msgstr[4] "%(value).1f trilliún" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] " %(value)s trilliún" +msgstr[1] " %(value)s trilliún" +msgstr[2] " %(value)s trilliún" +msgstr[3] " %(value)s trilliún" +msgstr[4] " %(value)s trilliún" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrilliún" +msgstr[1] "%(value).1f quadrilliún" +msgstr[2] "%(value).1f quadrilliún" +msgstr[3] "%(value).1f quadrilliún" +msgstr[4] "%(value).1f quadrilliún" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilliún" +msgstr[1] "%(value)s quadrilliún" +msgstr[2] "%(value)s quadrilliún" +msgstr[3] "%(value)s quadrilliún" +msgstr[4] "%(value)s quadrilliún" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillion" +msgstr[1] "%(value).1f quintillion" +msgstr[2] "%(value).1f quintillion" +msgstr[3] "%(value).1f quintillion" +msgstr[4] "%(value).1f quintillion" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillion" +msgstr[1] "%(value)s quintillion" +msgstr[2] "%(value)s quintillion" +msgstr[3] "%(value)s quintillion" +msgstr[4] "%(value)s quintillion" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillion" +msgstr[1] "%(value).1f sextillion" +msgstr[2] "%(value).1f sextillion" +msgstr[3] "%(value).1f sextillion" +msgstr[4] "%(value).1f sextillion" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillion" +msgstr[1] "%(value)s sextillion" +msgstr[2] "%(value)s sextillion" +msgstr[3] "%(value)s sextillion" +msgstr[4] "%(value)s sextillion" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" +msgstr[1] "%(value).1f septillion" +msgstr[2] "%(value).1f septillion" +msgstr[3] "%(value).1f septillion" +msgstr[4] "%(value).1f septillion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillion" +msgstr[2] "%(value)s septillion" +msgstr[3] "%(value)s septillion" +msgstr[4] "%(value)s septillion" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillion" +msgstr[1] "%(value).1f octillion" +msgstr[2] "%(value).1f octillion" +msgstr[3] "%(value).1f octillion" +msgstr[4] "%(value).1f octillion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" +msgstr[1] "%(value)s octillion" +msgstr[2] "%(value)s octillion" +msgstr[3] "%(value)s octillion" +msgstr[4] "%(value)s octillion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillion" +msgstr[2] "%(value).1f nonillion" +msgstr[3] "%(value).1f nonillion" +msgstr[4] "%(value).1f nonillion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillion" +msgstr[2] "%(value)s nonillion" +msgstr[3] "%(value)s nonillion" +msgstr[4] "%(value)s nonillion" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillion" +msgstr[1] "%(value).1f decillion" +msgstr[2] "%(value).1f decillion" +msgstr[3] "%(value).1f decillion" +msgstr[4] "%(value).1f decillion" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillion" +msgstr[1] "%(value)s decillion" +msgstr[2] "%(value)s decillion" +msgstr[3] "%(value)s decillion" +msgstr[4] "%(value)s decillion" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" +msgstr[2] "%(value).1f googol" +msgstr[3] "%(value).1f googol" +msgstr[4] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" +msgstr[2] "%(value)s googol" +msgstr[3] "%(value)s googol" +msgstr[4] "%(value)s googol" + +msgid "one" +msgstr "aon" + +msgid "two" +msgstr "dó" + +msgid "three" +msgstr "trí" + +msgid "four" +msgstr "ceathair" + +msgid "five" +msgstr "cúig" + +msgid "six" +msgstr "sé" + +msgid "seven" +msgstr "seacht" + +msgid "eight" +msgstr "ocht" + +msgid "nine" +msgstr "naoi" + +msgid "today" +msgstr "inniu" + +msgid "tomorrow" +msgstr "amárach" + +msgid "yesterday" +msgstr "inné" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "now" +msgstr "anois" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..028d6e7d232aed313481d12c420613e544ccfc3c GIT binary patch literal 7232 zcmd^@ON<;x8OJNZ*kqG{2_yk*k_yJoj_ux^ne{rmV{cyTY#aqAi?cBgMM$;XwbLDD zx+dK<@hEsANp!kqT9DG7Tii9}8kOL$_NE{GCiUI)v7hVS}As_gE-PJw) zsIfO^TB`Z=_ph(NdUsdN+qdm_k>NUlv={04jf@HKnH~7S_0IblyA}KccpLZ+@Lur7 zos1m<4}$x_Ga%^~jQ*1M$_v~iu3$T^pFF*l%AA%6S z34RIui{T1_o`L-u_&9hKJPn@w2xE_eFN37N3w{=y{b`DEfHoOR8DX}*|OgZ)zNaOZfkm~b$ zW4~kUKNX;4@mQZgP6jsVe;oe@?Qio zJ(3GkEV04>t-5h3F#OTU7t#k|90}b^ajg|wU978N&nNBV`(ssSe;Qhu47h?9KINs-iw zSoRr+SYNAUS^ng9WggdVRql0-Hf27OTa#^B7%v)`wxw2auX6WT^lpBrBBW36LvU#*@-d8pk%I0Ef#&T1JEDp{x?MG5Ft!RpA z)mKr32I(!u&dFHIh~(8sJu6-9JmxuPWEA6j+2P)^BJ8TE({i99?VO6cf#*Ct?8eTT z>hP)6C)b?iND2*K=Y-I*!`sc)qSI_St)sZ@9BChFwwg^iI;Z7kKrzRD3r=(1X)p5T zVrLG1xTZdX>Ef(KB8+=NtEj^t9fr$(PbwE#VRtCH(pi(Dj|?GufqR%g|hCDmts{U-+h73IuXSVCjHl|KJcIuIFYg;qTsb$O{8KM^F2564P z8*X;c6G3>4yFO;O)JspVtvCx~KPqcOM$RLlt1vgZ9lo$0=)Ari-u0$dd$ih}6&3a4 z4i5*38800<#?#xS>2PVO#V=go#8!hpz?;0oNo{9po77gK^80z4A2`56ejL3_dK>!O zv8lp7NCbFu1u?^0%#|VxdA?yPZCTcRYz~mW4Ka1Bx>_DjzpK@to}X;4YI3Gl0^5Uh zeao)PrX_Bbkd;q4Z4CRi=G#SU^Xb!HZBhE6e~)UVs`eP^cA*;iI%*}d-81L-E#-E_)axHwaX{yFa_DD6+ zr!8JnJhi+vJx^$^A+ZbG6WKwly|B4wR!7d`oc) zdMR>!ZH*5P)yTPTC33D8B3o7!4iJ{LnIAwOku^_n15SVbEo+47494XFP1oeL)Ap@y+NGauK|wma7DR zt5B+v%_*O`$SmED=OyK2(~z7-msOk`YsYsarS;zA2#;niuX{_$_&${lIyzP z3xwx~Ngu3R?gKaLi(>A$xAOk`KkhbLA6oh?6e{q1OjXB=MwenOn82U7=b!KU`0=tE s3oKgJBoJojwKvhgjEV-sn=2G5P`fA0=rK?EnA( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..22aa4a323 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,476 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-29 09:32+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}d" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}na" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}s" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}mh" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}mh" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f mhillean" +msgstr[1] "%(value).1f mhillean" +msgstr[2] "%(value).1f milleanan" +msgstr[3] "%(value).1f millean" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s mhillean" +msgstr[1] "%(value)s mhillean" +msgstr[2] "%(value)s milleanan" +msgstr[3] "%(value)s millean" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bhillean" +msgstr[1] "%(value).1f bhillean" +msgstr[2] "%(value).1f billeanan" +msgstr[3] "%(value).1f billean" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s bhillean" +msgstr[1] "%(value)s bhillean" +msgstr[2] "%(value)s billeanan" +msgstr[3] "%(value)s billean" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trillean" +msgstr[1] "%(value).1f thrillean" +msgstr[2] "%(value).1f trilleanan" +msgstr[3] "%(value).1f trillean" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trillean" +msgstr[1] "%(value)s thrillean" +msgstr[2] "%(value)s trilleanan" +msgstr[3] "%(value)s trillean" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrillean" +msgstr[1] "%(value).1f quadrillean" +msgstr[2] "%(value).1f quadrilleanan" +msgstr[3] "%(value).1f quadrillean" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrillean" +msgstr[1] "%(value)s quadrillean" +msgstr[2] "%(value)s quadrilleanan" +msgstr[3] "%(value)s quadrillean" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillean" +msgstr[1] "%(value).1f quintillean" +msgstr[2] "%(value).1f quintilleanan" +msgstr[3] "%(value).1f quintillean" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillean" +msgstr[1] "%(value)s quintillean" +msgstr[2] "%(value)s quintilleanan" +msgstr[3] "%(value)s quintillean" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillean" +msgstr[1] "%(value).1f shextillean" +msgstr[2] "%(value).1f sextilleanan" +msgstr[3] "%(value).1f sextillean" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillean" +msgstr[1] "%(value)s shextillean" +msgstr[2] "%(value)s sextilleanan" +msgstr[3] "%(value)s sextillean" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillean" +msgstr[1] "%(value).1f sheptillean" +msgstr[2] "%(value).1f septilleanan" +msgstr[3] "%(value).1f septillean" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillean" +msgstr[1] "%(value)s sheptillean" +msgstr[2] "%(value)s septilleanan" +msgstr[3] "%(value)s septillean" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillean" +msgstr[1] "%(value).1f octillean" +msgstr[2] "%(value).1f octilleanan" +msgstr[3] "%(value).1f octillean" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillean" +msgstr[1] "%(value)s octillean" +msgstr[2] "%(value)s octilleanan" +msgstr[3] "%(value)s octillean" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillean" +msgstr[1] "%(value).1f nonillean" +msgstr[2] "%(value).1f nonilleanan" +msgstr[3] "%(value).1f nonillean" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillean" +msgstr[1] "%(value)s nonillean" +msgstr[2] "%(value)s nonilleanan" +msgstr[3] "%(value)s nonillean" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillean" +msgstr[1] "%(value).1f dhecillean" +msgstr[2] "%(value).1f decilleanan" +msgstr[3] "%(value).1f decillean" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillean" +msgstr[1] "%(value)s dhecillean" +msgstr[2] "%(value)s decilleanan" +msgstr[3] "%(value)s decillean" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f ghoogol" +msgstr[1] "%(value).1f ghoogol" +msgstr[2] "%(value).1f googolan" +msgstr[3] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ghoogol" +msgstr[1] "%(value)s ghoogol" +msgstr[2] "%(value)s googolan" +msgstr[3] "%(value)s googol" + +msgid "one" +msgstr "aon" + +msgid "two" +msgstr "dà" + +msgid "three" +msgstr "trì" + +msgid "four" +msgstr "ceithir" + +msgid "five" +msgstr "còig" + +msgid "six" +msgstr "sia" + +msgid "seven" +msgstr "seachd" + +msgid "eight" +msgstr "ochd" + +msgid "nine" +msgstr "naoidh" + +msgid "today" +msgstr "an-diugh" + +msgid "tomorrow" +msgstr "a-màireach" + +msgid "yesterday" +msgstr "an-dè" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s air ais" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s uair a thìde air ais" +msgstr[1] "%(count)s uair a thìde air ais" +msgstr[2] "%(count)s uairean a thìde air ais" +msgstr[3] "%(count)s uair a thìde air ais" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s mhionaid air ais" +msgstr[1] "%(count)s mhionaid air ais" +msgstr[2] "%(count)s mionaidean air ais" +msgstr[3] "%(count)s mionaid air ais" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s diog air ais" +msgstr[1] "%(count)s dhiog air ais" +msgstr[2] "%(count)s diogan air ais" +msgstr[3] "%(count)s diog air ais" + +msgid "now" +msgstr "an-dràsta" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "an ceann %(count)s diog" +msgstr[1] "an ceann %(count)s dhiog" +msgstr[2] "an ceann %(count)s diogan" +msgstr[3] "an ceann %(count)s diog" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "an ceann %(count)s mhionaid" +msgstr[1] "an ceann %(count)s mhionaid" +msgstr[2] "an ceann %(count)s mionaidean" +msgstr[3] "an ceann %(count)s mionaid" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "an ceann %(count)s uair a thìde" +msgstr[1] "an ceann %(count)s uair a thìde" +msgstr[2] "an ceann %(count)s uairean a thìde" +msgstr[3] "an ceann %(count)s uair a thìde" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "an ceann %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d bhliadhna" +msgstr[1] "%d bhliadhna" +msgstr[2] "%d bliadhnaichean" +msgstr[3] "%d bliadhna" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mhìos" +msgstr[1] "%d mhìos" +msgstr[2] "%d mìosan" +msgstr[3] "%d mìos" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d seachdain" +msgstr[1] "%d sheachdain" +msgstr[2] "%d seachdainean" +msgstr[3] "%d seachdain" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d latha" +msgstr[1] "%d latha" +msgstr[2] "%d làithean" +msgstr[3] "%d latha" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uair a thìde" +msgstr[1] "%d uair a thìde" +msgstr[2] "%d uairean a thìde" +msgstr[3] "%d uair a thìde" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d mhionaid" +msgstr[1] "%d mhionaid" +msgstr[2] "%d mionaidean" +msgstr[3] "%d mionaid" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d bhliadhna" +msgstr[1] "%d bliadhna" +msgstr[2] "%d bliadhnaichean" +msgstr[3] "%d bliadhna" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mhìos" +msgstr[1] "%d mhìos" +msgstr[2] "%d mìosan" +msgstr[3] "%d mìos" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d seachdain" +msgstr[1] "%d sheachdain" +msgstr[2] "%d seachdainean" +msgstr[3] "%d seachdain" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d latha" +msgstr[1] "%d latha" +msgstr[2] "%d làithean" +msgstr[3] "%d latha" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uair a thìde" +msgstr[1] "%d uair a thìde" +msgstr[2] "%d uairean a thìde" +msgstr[3] "%d uair a thìde" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d mhionaid" +msgstr[1] "%d mhionaid" +msgstr[2] "%d mionaidean" +msgstr[3] "%d mionaid" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11ae7321cdebb90a20274b2ed71d28bd774b884a GIT binary patch literal 3474 zcma)-&2Jnv7{*;1zLxJoDNsIK+R&t7vO6tR!iE4Mv`}c&sDxfXLhg=tGG*3I#@=iy zap8g}5*(0d#i>G-5IrD-DlQe`&~QXZ6@nvw0h~EhNIdV1vpdOnMXmMx#*ZI+$L~A# z{JCS~3x;w4^>Ng68)GxzkGJ50^38U}_Jfzf3Gg~N3jXW#y(5MGrehDRqyLiQZ(xA- z_FD^v;5gdvfqTJoAkF_RxCi{*>Hj!=_iaW097zBFzT*Xu=2>_A8yrP@*X@j9D4PZG z*KE%5b?{NN=fNkz7^EeB*#cY25~-aTlF_-L<#fRg60X(tPi_ z_9x)eXkP*Mfqyvt26zDNeRnhV40r;37F-2MzvSA#f;8?1NO9!%6mb}JoB;7-AubPs zFM$-#w?Oir0x53qI9)hKu0M86oxb8|o!)c&07PophpzpxX!9*{pw0rM487uTu+p5_LZ(*H*(o$ zA1bf;-Co)H9=sx&N_KrpHHU`#v@Iz#ydrGPp5axcnm5CJS~X{e`!rv+3?HUeGeusX z>PeH~L&Qpo$mtP13F=ESiI*&EC##aRbvI*5*ls3Ln{?#J=vX9EE5;2Mu^!UX&U6QX z>@gKFl_<&RUV~Z0j9it9nPiO_%j^<9 z_U*-^!SujK|J9aRa749ql&HALr%xxg|C~)8r?rKYG94V%S;sWFTF#qh_TUUJZfD07 z-!sd@@tNADGZmXF-(c%kl)1T%Vxv|3L*#h%9Hg=29EfG>Mh;8H4XJD^<*wu`sb%vZ zZzbhXKigS^gC*1W^p>=1S8, 2011 +# fonso , 2013 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2011,2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "º" + +msgid "st" +msgstr "º" + +msgid "nd" +msgstr "º" + +msgid "rd" +msgstr "º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f millón" +msgstr[1] "%(value).1f millóns" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millón" +msgstr[1] "%(value)s millóns" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f mil millóns" +msgstr[1] "%(value).1f mil millóns" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s mil millóns" +msgstr[1] "%(value)s mil millóns" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billóns" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billón" +msgstr[1] "%(value)s billóns" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f trillóns" +msgstr[1] "%(value).1f trillóns" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s trillón" +msgstr[1] "%(value)s trillóns" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f cuadrillóns" +msgstr[1] "%(value).1f cuadrillóns" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s cuadrillón" +msgstr[1] "%(value)s cuadrillóns" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f quintillóns" +msgstr[1] "%(value).1f quintillóns" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s quintillón" +msgstr[1] "%(value)s quintillóns" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f sextillóns" +msgstr[1] "%(value).1f sextillóns" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s sextillón" +msgstr[1] "%(value)s sextillóns" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f septillóns" +msgstr[1] "%(value).1f septillóns" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s septillón" +msgstr[1] "%(value)s septillóns" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f octillóns" +msgstr[1] "%(value).1f octillóns" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s octillón" +msgstr[1] "%(value)s octillóns" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f nonillóns" +msgstr[1] "%(value).1f nonillóns" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s nonillón" +msgstr[1] "%(value)s nonillóns" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gúgols" +msgstr[1] "%(value).1f gúgols" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gúgol" +msgstr[1] "%(value)s gúgols" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "dous" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "catro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "sete" + +msgid "eight" +msgstr "oito" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "hoxe" + +msgid "tomorrow" +msgstr "mañá" + +msgid "yesterday" +msgstr "onte" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "hai %(delta)s" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "dentro de %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbd42323533edc74131564235936f336ad140af2 GIT binary patch literal 5875 zcmeH~U2GIp6vwZMBCDXHBKUz9wa@~)-CZb@#o`wbNFaPzNQ_1^-M!tNvOBY#neB&! z_+VmqPy@6ZXsC#dp%i&QA2cRd69N(+OiWCe#6*4Z0Rs;vlHjBNGjnHlrn}n$?W336 z{^oqlIp>~x=eGPle^!}ctiya7^Uu2&+X0@v2R|^b&SGpX_!l@Iya_%JM($;785jeX zfO|pG_euS**(_cW^zhe)&`~rLf^0?%}xr}XvY=FDK^PmFGL(wW&1iQgs!G3Vt zL$3V?knD{QyYY^INX4#$o#0K$w;w?a$d@G7pqO_ck4nyd)O{~2X-FObTi|z4avY?y zdINj~j6LSE2$J7dl2;`cKkoXsgXI6QFh4Uq_G^6&NdBfr;~r7BQf?Y*o3(XvlWwSU4n^iWl2mL zFSu}i(j7tr?R5tA7+dZPe1gtMNX8}Ud&lyefn&!Wz+8#B6q94p{Xm2IHU|@1%Nj9h z(3!@OWOtK*u^5xSw`WMepl_YN8`jX65qV2#GP#n~15&4<7r3VPLe-<>O9BoZYCf;( z+N7F{NLP8)(q(l$tLFousuYE)IMo_W*Q&f~>GZT!qV44{#y-=enijFw<#LW=_O-gK+?%@(!qZt5Y6@SEke!aEY_*^2-b=B znWk7JL&;leK}0)Ccowr78nsfPDZ?{LKaQXOY)q+0xH7i$n zfuu?6=@nw1?@q#`-u*(UR8KVy32zgJ@jgW7xUZ|R2 zbkpgeZe&zV$@BQE{Rglmo|u4WS`{&|k|&awtHN$ch+4*XBdbvnSBITj!s42+xHc@d zhQ)QRXo?=8F;nehR?ZNDSvs9+OE2h#fdyH;I_npvB@9yUH1sZ!wxU}z(Y?Yjag(Qb zrc2SXdStgK>V_5FZf4a?^wm<@_+PQI|(_Ox$~wpRQoSEn$do3yl!z0an2Ylmw2Ri=1O zM0V!s7Kv`wje?otTG0{Bw$57?(jZ`|YdI@iKMY>FI>mXU2q`D%+#> zvD!Ii(ugc&{2Rc@sJWh*H_MDe=wO}oxjARv!Tt;>qmF+VX=i4`WSC*H?lWRu0bE9`zVr}&G4%J(cYp%Pd zTQ_^91`~R^;MxKar)LhVa3r`o6fk0+an}4v?TsRbNmeY4UUg19oR5&~$M>}1B~A!Y z(>R99nyyxaKI+`t&MBl{TND%8A(*iO0^Q$35WK(IA&{zu!mBpe1ph5>;Z+KG7=1l` z0@R_Y6{wwV)G=Cw^Dwc}iaJnjP>G5UG8NU%7kU0=Yc} z(){0F{BO{2duYRFpucAj**VA~_HjI--3+(wQT$bA4_+DHe_*CSr8;>ihw~AQ;jfjl b`#9)r^9f`=O=rx#4)I|f!eOCLaG3oE&4k(n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..3fb1327c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,389 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Gaynor , 2011 +# Jannis Leidel , 2011 +# Meir Kriheli , 2012,2014,2019 +# Uri Rodberg , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-22 07:22+0000\n" +"Last-Translator: Uri Rodberg \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Humanize" +msgstr "האנשה" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "ה־{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "ה־{}" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "מיליון" +msgstr[1] "%(value)s מיליון" +msgstr[2] "%(value)s מיליון" +msgstr[3] "%(value)s מיליון" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "מיליארד" +msgstr[1] "%(value)s מיליארד" +msgstr[2] "%(value)s מיליארד" +msgstr[3] "%(value)s מיליארד" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "טריליון" +msgstr[1] "%(value)s טריליון" +msgstr[2] "%(value)s טריליון" +msgstr[3] "%(value)s טריליון" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "קוודריליון" +msgstr[1] "%(value)s קוודריליון" +msgstr[2] "%(value)s קוודריליון" +msgstr[3] "%(value)s קוודריליון" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "קווינטיליון" +msgstr[1] "%(value)s קווינטיליון" +msgstr[2] "%(value)s קווינטיליון" +msgstr[3] "%(value)s קווינטיליון" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "סקסטיליון" +msgstr[1] "%(value)s סקסטיליון" +msgstr[2] "%(value)s סקסטיליון" +msgstr[3] "%(value)s סקסטיליון" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "ספטיליון" +msgstr[1] "%(value)s ספטיליון" +msgstr[2] "%(value)s ספטיליון" +msgstr[3] "%(value)s ספטיליון" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "אוקטיליון" +msgstr[1] "%(value)s אוקטיליון" +msgstr[2] "%(value)s אוקטיליון" +msgstr[3] "%(value)s אוקטיליון" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "נוניליון" +msgstr[1] "%(value)s נוניליון" +msgstr[2] "%(value)s נוניליון" +msgstr[3] "%(value)s נוניליון" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "דציליון" +msgstr[1] "%(value)s דציליון" +msgstr[2] "%(value)s דציליון" +msgstr[3] "%(value)s דציליון" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "גוגול" +msgstr[1] "%(value)s גוגול" +msgstr[2] "%(value)s גוגול" +msgstr[3] "%(value)s גוגול" + +msgid "one" +msgstr "אחד" + +msgid "two" +msgstr "שניים" + +msgid "three" +msgstr "שלושה" + +msgid "four" +msgstr "ארבעה" + +msgid "five" +msgstr "חמישה" + +msgid "six" +msgstr "שישה" + +msgid "seven" +msgstr "שבעה" + +msgid "eight" +msgstr "שמונה" + +msgid "nine" +msgstr "תשעה" + +msgid "today" +msgstr "היום" + +msgid "tomorrow" +msgstr "מחר" + +msgid "yesterday" +msgstr "אתמול" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "לפני %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "לפני שעה" +msgstr[1] "לפני שעתיים" +msgstr[2] "לפני %(count)s שעות" +msgstr[3] "לפני %(count)s שעות" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "לפני דקה" +msgstr[1] "לפני %(count)s דקות" +msgstr[2] "לפני %(count)s דקות" +msgstr[3] "לפני %(count)s דקות" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "לפני שנייה" +msgstr[1] "לפני %(count)s שניות" +msgstr[2] "לפני %(count)s שניות" +msgstr[3] "לפני %(count)s שניות" + +msgid "now" +msgstr "עכשיו" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "בעוד שנייה" +msgstr[1] "בעוד %(count)s שניות" +msgstr[2] "בעוד %(count)s שניות" +msgstr[3] "בעוד %(count)s שניות" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "בעוד דקה" +msgstr[1] "בעוד %(count)s דקות" +msgstr[2] "בעוד %(count)s דקות" +msgstr[3] "בעוד %(count)s דקות" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "בעוד שעה" +msgstr[1] "בעוד שעתיים" +msgstr[2] "בעוד %(count)s שעות" +msgstr[3] "בעוד %(count)s שעות" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "בעוד %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "שנה" +msgstr[1] "שנתיים" +msgstr[2] "%(num)d שנים" +msgstr[3] "%(num)d שנים" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "חודש" +msgstr[1] "חודשיים" +msgstr[2] "%(num)d חודשים" +msgstr[3] "%(num)d חודשים" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "שבוע" +msgstr[1] "שבועיים" +msgstr[2] "%(num)d שבועות" +msgstr[3] "%(num)d שבועות" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "יום" +msgstr[1] "יומיים" +msgstr[2] "%(num)d ימים" +msgstr[3] "%(num)d ימים" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "שעה" +msgstr[1] "שעתיים" +msgstr[2] "%(num)d שעות" +msgstr[3] "%(num)d שעות" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "דקה" +msgstr[1] "%(num)d דקות" +msgstr[2] "%(num)d דקות" +msgstr[3] "%(num)d דקות" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "שנה" +msgstr[1] "שנתיים" +msgstr[2] "%(num)d שנים" +msgstr[3] "%(num)d שנים" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "חודש" +msgstr[1] "חודשיים" +msgstr[2] "%(num)d חודשים" +msgstr[3] "%(num)d חודשים" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "שבוע" +msgstr[1] "שבועיים" +msgstr[2] "%(num)d שבועות" +msgstr[3] "%(num)d שבועות" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "יום" +msgstr[1] "יומיים" +msgstr[2] "%(num)d ימים" +msgstr[3] "%(num)d ימים" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "שעה" +msgstr[1] "שעתיים" +msgstr[2] "%(num)d שעות" +msgstr[3] "%(num)d שעות" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "דקה" +msgstr[1] "%(num)d דקות" +msgstr[2] "%(num)d דקות" +msgstr[3] "%(num)d דקות" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3217de2bd96f607af2392ac3a8f0772cd444c874 GIT binary patch literal 4131 zcmb7`Uu+ab9LGngsHgY`|DfWZL9A_Qws(tv3Ri2?TA)H>#i}tr;L@ABTfEyncJ_MZ zO-zIk6cZ5$Xo7}qEv6Mh#7IJFqVbIvV>IzWvk$%)qdpj;FGjz=y=iOj=6c&nXFoIF z`OR-<=J%Vu{g8wLeZA(?(s#pP& z7(b=>4QQah?20N)umk-a;9BqiNdBk6HQ={O|4ZqsmsiL8KzjcxipN0m^QGdiU@Q8o zu4D{TSucoJvp&Tw;O*!Sf_H;CkhZu_jUNE9C3Z;hZ8d%rB!9=1ep2bD6era9X~i?( zRj@w~lD`@7YVZs29h~hYuory`;sAIO>;``ZNneww>N~)#=$}^n6MO;v$FE`R8Spsx z68H<)32wfYv5lYv`@w1O0q_r{x2>q^7PuMuhl;<0&!XRb9nJ_rf+*vlZ6%8KBvUp8$cGTH|t<05`XwmxbLd901vJOwm5i0ki!o^&{k`=C8h{BA^DjY@Ze z-b*=q2P(yw_D_Y*g>s4VmkL5MS8hh@UR26O%DbCTsoaN(kVZL-l!$T@VAy7KZj^Jg z{i>^+okD=r`ttNz$*9o=Jle}K3 zkDKH=tv+Uw>oi@oByXhFM~ZB9swPa5HxTPWM3x#+6QDUs*txvVvi7K8S-0#l$MVab zRq*YiXlZTFh=Ol*NN(la1|wO|E#e?6%*imvb_Aog3wjwQ#i($Yw8xnAnV-j>Cj|4| zjI{^PqU(9E^(!vhBcv}pl7~EZml*MlfsFCI@FczvX`b0-IXO46U6fqUHwIyWs^sv$A3CoAA@ucO8G+&=GA2L#=VRm!VOsBd#Q)Vg!Lu0!bwaMqaUAK|i zXqX$h`EdHdRA&k$vCWdcG3;56ELgtlrTJ5q6KZ4bu`&c3BcG*tWeH3$? zT-nMAV^~7HM#wOP*$~1RMQCIe^@8Q*EZ@a_S^m4PKC$Zpz8U|Bg@Oc=Vi=Jn~ zU~*~06XE#&F!(GSe{~Tbv5by|;|If_`aD;&h{eV}UVQych9{%9PA={vmeJubI1&ay zjVE5SlXzBebT(Sp2VroLhry>|@LCugt??DtYJ6`PAV}Ec|5x`ql-kuD3FF%$=5YGa zLZ_5KwN964h&8-P8MR=sn#8QSjca|BPBfURIl)?0;;b9qho*x~(wyeUFwy5aO>R8W zFv)4!qJvFRo94$bX_nRGCXP+Bj3z(vY~ti`)mvQ47->unmt@vFd*@xov(;tvtQH3Q z!r*-tUD}y2z*pe}Iw!&aowK+Zv;Q4L1{dgiKE8i}j8Ddt+9D?6KFt6~k2e5}P2*Pp zt+x=P`C(jSxDOz_8wM8u{L;|0^O3$6tswgGm_!T9dk;W_&jGkA2UU-^)4inM7<|EI GI@o`8&IHu} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..52551e696 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "वाँ" + +msgid "st" +msgstr "ला" + +msgid "nd" +msgstr "रा" + +msgid "rd" +msgstr "रा" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f मिलियन" +msgstr[1] "%(value).1f मिलियन" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s मिलियन" +msgstr[1] "%(value)s मिलियन" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f बिलियन" +msgstr[1] "%(value).1f बिलियन" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s बिलियन" +msgstr[1] "%(value)s बिलियन" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f खरब" +msgstr[1] "%(value).1f खरब" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s खरब" +msgstr[1] "%(value)s खरब" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f करोड़ शंख" +msgstr[1] "%(value).1f करोड़ शंख" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s करोड़ शंख" +msgstr[1] "%(value)s करोड़ शंख" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f कुइनतिलिअन " +msgstr[1] "%(value).1f कुइनतिलिअन " + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s कुइनतिलिअन " +msgstr[1] "%(value)s कुइनतिलिअन " + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f सेक्सतिलियन" +msgstr[1] "%(value).1f सेक्सतिलियन" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s सेक्सतिलियन" +msgstr[1] "%(value)s सेक्सतिलियन" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f सेपतिलियन " +msgstr[1] "%(value).1f सेपतिलियन " + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s सेपतिलियन " +msgstr[1] "%(value)s सेपतिलियन " + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ओकतिलियन " +msgstr[1] "%(value).1f ओकतिलियन " + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ओकतिलियन " +msgstr[1] "%(value)s ओकतिलियन " + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f नोनिलियन" +msgstr[1] "%(value).1f नोनिलियन" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s नोनिलियन" +msgstr[1] "%(value)s नोनिलियन" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f देसीलियन" +msgstr[1] "%(value).1f देसीलियन" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s देसीलियन" +msgstr[1] "%(value)s देसीलियन" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f गोगोल" +msgstr[1] "%(value).1f गोगोल" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s गोगोल" +msgstr[1] "%(value)s गोगोल" + +msgid "one" +msgstr "एक" + +msgid "two" +msgstr "दो" + +msgid "three" +msgstr "तीन" + +msgid "four" +msgstr "चार" + +msgid "five" +msgstr "पाँच" + +msgid "six" +msgstr "छह" + +msgid "seven" +msgstr "सात" + +msgid "eight" +msgstr "आठ" + +msgid "nine" +msgstr "नौ" + +msgid "today" +msgstr "आज" + +msgid "tomorrow" +msgstr "कल" + +msgid "yesterday" +msgstr "कल (बीता)" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s पहले" + +msgid "now" +msgstr "अभी" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s अब से" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99793a893afa1f7a88c231cd3bc37244f24c2758 GIT binary patch literal 1274 zcmb7?%WG6I6vm_0*Z3Ah1(AqUTQr?}t5Ut~s8}B;7K@B7+{L+PW-`tsLz3HR!9PG3 zF5RmLF2t4pfscg?7ve$$QN)!i7cSlSWhQMwabe)(m+$0Da&m7zZy&nP(6%A=ARZ%j zA`Y)Whjs_t58jP@2CjyF2M&QBB0qthIQ+r-W>Jz$X(z%%lk6wf2e=0N`~*=(e@}pw5TV`;h>eK;T|t!DZ?G@5%@~E6!am_n;ai7VL)(hj6b6!a zlrB7R*)VK)q-F~3N8O7DgRJYPC3jRaI{(u%$PPTD8comYYK~al6qae}3oF}Rb!cdK zB&W8QqXVZ_nwT~{WMb8(%l zQ$}YzZ%N%SrK{96){7a}P`Nl$G@PiKjF)DwRK>I<>ERV;rKgOKC+RVfq#~W*X__Sy zhmtf&U=&wrPK7;}eG?)%A<`3kJk5^6hgP~QoflOrwQEanY{oB1t(D`KN#Txs3e`ZK zZujMw(sgqZYjmTK4H8w7os3UggLZ?YNBVZeO~}kx4!nR`hV1R4OSyaDazlvagb+{1i_( z+|Va0PQuzub;)6*{MX zo!rl4q~(kym!v7~e9>@pL_NGG{HyB_1*Q4txC&&y{)jk&}+O0>75!bCR_R H>}1(*#A!N` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..635ea6d36 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,291 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mislav Cimperšak , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:47+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "one" +msgstr "jedan" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "četiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedam" + +msgid "eight" +msgstr "osam" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "danas" + +msgid "tomorrow" +msgstr "sutra" + +msgid "yesterday" +msgstr "jučer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "prije %(delta)s" + +msgid "now" +msgstr "sad" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "prije %(count)s sekunde" +msgstr[1] "prije %(count)s sekundi" +msgstr[2] "prije %(count)s sekundi" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "prije %(count)s minute" +msgstr[1] "prije %(count)s minute" +msgstr[2] "prije %(count)s minuta" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d9618ca555818648d9fec5eae52ebe1d82cc456f GIT binary patch literal 5679 zcmeH~TZkM*6oyNUMn_{b-Y?OPam}u=cV{-6xS6=Rn2QDzv&47-LF`P|&i3p~)!5yW z*@@=KV0X3`1Luel_}cr!lq#+WNaBY2rdEd z14*Az`iqLQ;Bx3cDPDdSV*{|)DGIO;_H*Fb;31IW905)6M`d3zKeWd{1Nt<0Blr}E z(Ch;csj&|g4}&!C5s>2i3YNenm}CgN2PFM*#dko;>l=`+JLjCxZzV{693=f|#g9Om z??;eIbxiR$@O;>RD9$f1b{XtTLDB~m#}qdyKB!nz>?l5|_$)~4d<~@e_AC2s#rHv^ z&JL>aE{GJ^C*bSY)6c+#uy>uu*hS!8@NRG)_z-wZamxb6?u7j&_yBkur11$PPyTO# zo4~(88ovucw}P*Lblq`~@)*B>F&EqjJ`5fNC&9%RGIl?>8?1p}D*Fx`E?VD9im!s$ zdiDmm3Vat_3mygU0!=Jp9PEJW!2{sUAiFs99|g%@g5>`mI1c^;lK=Q6q5l&g)#(sO z^L-3b9-o3#=g$?tQ2a{qTgC4ck1GDG_>1E2ihnBp1ycOeE@ccylFbL{94%D##USNz zwbGX=yC1|h25Y4Kqek~^)aZ<23)yu_xDp&uzXw5D%PRD%(62zJIhUbRyAhqvHZ?jU zH2>vfpk0eTfW88K6dlJXxZkmzY#5!|^&x`4^bDbfWd>~}{$h)RM(d?k3c-qsOF=9z zXgF@{T=bjJZ$LND`_QS;xuU(o7P5YHYB&zTeRX6{<&Q^u*~^gcLnqd77;F zJ$`xGBQ48zdpu91I-)n~Bdt8u>GFW(i|Tw%lw$(o{I* z5MPms7J9`a+^J6aY|`1m*(9!K!tz_LRrj3+Hz!;8&FA&?i&kU6Hf*bd;}`$-=JKUk zV&`DWxxB;T#{R0-b6z2ZKb2fS)|~mYIiHT*$(Yl-!>uHHGIZ~z<@u*p70vS`HPL)e zp(48f$?BnbpQIX^Z(c1N!5Ka2Bq&|m5mwzO&UE_M4IjWnhL(}6sxL}?$!~7|ibLLAr)xK;<*TsVTwqzad`P?OW z!j&~%@y(64c^`K@Jju(3U9&`07Pj)HbbWKPS9NUj_Eyz1x5=_mnAl=&GG+0)alfoj8n@uN-D=8l zPrBQ8;^Ary+Wb~rBdRT{%FS)uYLtz8n@#Q-_rS%$^Pqpq_nYORp?14H=u=#0lFtlQ zWMe2yI6_?o8JhC84-FJHZ``~-SzBqaSXhgL#08S;G?Bf}XZ)dN-Ezbl0|~kw_s8zt zw!s`t{AjXC?wadGMdBn>%f{$-$B(lu8S`=(hC5>@Kg-#6D1U^T4vQ!q@#sSTA(O@Em$II0TVeLG*L5wgKvy%0jArrtQR0Pphu7W zwea{z%Z65x9#)CzkV?|R(IbDr-wmHdwR9XZNt~ zKELBSc)qD`S(Kx@J26F#)5A{<29LeycP%*ap%o<^yD9;BMHj~@WrWxvJ|Xlj3d6=y zDo(7?os)4(l-U2c=3^0)-%@o|Gz5k|jn;JZ~LuTl%*+ zoD|mVp2V95lckasduHag|K9~w!l=Uk=`K+9+riBdd@V_at?vl-=&r$2?q0{n9oF54 eV}*On?>_G^iYh#d)mkt)v)ee1?b*HDwb;K&XNSK4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..7446faa7d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,387 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2018,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-28 18:41+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milionaj" +msgstr[2] "%(value)s miliony" +msgstr[3] "%(value)s milionow" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliarda" +msgstr[1] "%(value)s miliardźe" +msgstr[2] "%(value)s miliardy" +msgstr[3] "%(value)s miliardow" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilion" +msgstr[1] "%(value)s bilionaj" +msgstr[2] "%(value)s biliony" +msgstr[3] "%(value)s bilionow" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliardźe" +msgstr[2] "%(value)s biliardy" +msgstr[3] "%(value)s biliardow" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilionaj" +msgstr[2] "%(value)s triliony" +msgstr[3] "%(value)s trilionow" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliardźe" +msgstr[2] "%(value)s triliardy" +msgstr[3] "%(value)s triliardow" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kwadrilion" +msgstr[1] "%(value)s kwadrilionaj" +msgstr[2] "%(value)s kwadriliony" +msgstr[3] "%(value)s kwadrilionow" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadriliarda" +msgstr[1] "%(value)s kwadriliardźe" +msgstr[2] "%(value)s kwadriliardy" +msgstr[3] "%(value)s kwadriliardow" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintilion" +msgstr[1] "%(value)s kwintilionaj" +msgstr[2] "%(value)s kwintiliony" +msgstr[3] "%(value)s kwintilionow" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwintiliarda" +msgstr[1] "%(value)s kwintiliardźe" +msgstr[2] "%(value)s kwintiliardy" +msgstr[3] "%(value)s kwintiliardow" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s sedeciliarda" +msgstr[1] "%(value)s sedeciliardźe" +msgstr[2] "%(value)s sedeciliardy" +msgstr[3] "%(value)s sedeciliardow" + +msgid "one" +msgstr "jedyn" + +msgid "two" +msgstr "dwaj" + +msgid "three" +msgstr "tři" + +msgid "four" +msgstr "štyri" + +msgid "five" +msgstr "pjeć" + +msgid "six" +msgstr "šěsć" + +msgid "seven" +msgstr "sydom" + +msgid "eight" +msgstr "wosom" + +msgid "nine" +msgstr "dźewjeć" + +msgid "today" +msgstr "dźensa" + +msgid "tomorrow" +msgstr "jutře" + +msgid "yesterday" +msgstr "wčera" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "Před %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "před %(count)s hodźinu" +msgstr[1] "před %(count)s hodźinomaj" +msgstr[2] "před %(count)s hodźinami" +msgstr[3] "před %(count)s hodźinami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "před %(count)s mjeńšinu" +msgstr[1] "před %(count)s mjeńšinomaj" +msgstr[2] "před %(count)s mjeńšinami" +msgstr[3] "před %(count)s mjeńšinami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "před %(count)s sekundu" +msgstr[1] "před %(count)s sekundomaj" +msgstr[2] "před %(count)s sekundami" +msgstr[3] "před %(count)s sekundami" + +msgid "now" +msgstr "nětko" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za %(count)s sekundu" +msgstr[1] "za %(count)s sekundźe" +msgstr[2] "za %(count)s sekundy" +msgstr[3] "za %(count)s sekundow" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za %(count)s mjeńšinu" +msgstr[1] "za %(count)s mjeńšinje" +msgstr[2] "za %(count)s mjeńšiny" +msgstr[3] "za %(count)s mjeńšin" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za %(count)s hodźinu" +msgstr[1] "za %(count)s hodźinje" +msgstr[2] "za %(count)s hodźiny" +msgstr[3] "za %(count)s hodźin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s wotnětka" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)d lěće" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsac" +msgstr[1] "%(num)d měsacaj" +msgstr[2] "%(num)d měsacy" +msgstr[3] "%(num)d měsacow" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydźeń" +msgstr[1] "%(num)d njedźeli" +msgstr[2] "%(num)d njedźele" +msgstr[3] "%(num)d njedźel" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dźeń" +msgstr[1] "%(num)d dnjej" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodźina" +msgstr[1] "%(num)d hodźinje" +msgstr[2] "%(num)d hodźiny" +msgstr[3] "%(num)d hodźin" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d mjeńšina" +msgstr[1] "%(num)d mjeńšinje" +msgstr[2] "%(num)d mjeńšiny" +msgstr[3] "%(num)d mjeńšin" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d lěto" +msgstr[1] "%(num)d lěće" +msgstr[2] "%(num)d lěta" +msgstr[3] "%(num)d lět" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d měsac" +msgstr[1] "%(num)d měsacaj" +msgstr[2] "%(num)d měsacy" +msgstr[3] "%(num)d měsacow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydźeń" +msgstr[1] "%(num)d njedźeli" +msgstr[2] "%(num)d njedźele" +msgstr[3] "%(num)d njedźel" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dźeń" +msgstr[1] "%(num)d dnjej" +msgstr[2] "%(num)d dny" +msgstr[3] "%(num)d dnjow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d hodźina" +msgstr[1] "%(num)d hodźinje" +msgstr[2] "%(num)d hodźiny" +msgstr[3] "%(num)d hodźin" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d mjeńšina" +msgstr[1] "%(num)d mjeńšinje" +msgstr[2] "%(num)d mjeńšiny" +msgstr[3] "%(num)d mjeńšin" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d910a0fe98d8bced7bacd4e782d8f19ad2624d24 GIT binary patch literal 5307 zcma)u)f>0w<__fz#qZu!PTb;aTPcYl0FZTZkPu_ivKzDcaX+e zw>IStkml6@(Is94X`DkK#c#9y2iq5p2qB?w1vh{d5K9#YK-!8Im@k7guR|b>_bEv8 z`Wd8nXP%zw)656K_0U&9dhQjF{669SpIBdWM%rHhDc;@SDd0SF0Xz%#Lrf367>eGrp7 z2Ye4KfS-cX;IAO9cm3HZw}W&ZY9RH$0&WDq1nIfI!3l5_gE`>+AoV{1QvbUk^?wV} zey%+?-S3Sc`RxL!e+8txyaiJHZ@B+2kj5FsVW#};0wIYQycB#AB>zLqV_*^XuizEn z6<93w&w{6dE=c?4v0VePC1Nj#rHIFw2SEH2huA&}l3$zkuR+S^&)|jNzaY)${0mas z0U?R4AYLW$AV}xr5s>1SnI5yo)XbQ<#9U!M&U}LT6!RJ80g&Q6&-P0o#Xkt*Qz2ew z`%UIM%=bYYkEGy;C56^S&(L?~R#aLK70T0wq$R`@Nb9~466&SY=OV`s~)?%dVGSo|uT5ix(h4JE|-0cT}ufzY< zDynSpw5y)ho(_73v`BT!cs4E6p~cg#>awx;+SR>Hw-Q;rhwFZ58+~unuE(lja~~@2 zvwK@*W1IMZ7!PFErVQpVmNu;~g|QqE`m-0yL1i#+G0tRvhGRLHGrMNXRxF39gP9^< zn`%i@EQg2#DI!mcXh~2m-Px?Wp}$`V7n>F~jpCQLtec@J#Gk#Es_8qO`*gk11CDv0 zi`kTQSm_@zRkIPmEFUp*%=_F>R&_J#ACNR2jvewRx<*UA@*d@TRU;PtmJ*A2 zUWBe`Ms8sIx^fnqXscDD68+*+yz2;1>c~fe}s-;2^ z`}>5cMoI~z>4+I!*HMH8nI$cjRcus5@_eNCsIqbHsyGj*D8}z)Nmll_p{GagRSg{( zXJ_pB73Yqo7ds2OBuD0VIrplTPp-~3*Qk=5nk>#ZlUtnWqMY1P+C05+5@qBboC0Sd za>F=qjgCt4_OKGQ562R5RP5ZhUxlXTLkX6BIEP--^^~)q+Sv?Qy|k@TyYi zjl_)Srem(ab9YhuRdDP%V{nbgt~2%aM?uTY?-jVcB)>21!#F9~ zoyIECMW@!{&wP*j@q7Ay;mEm9%EKKUoIywGjdG$oUr#La9oCav<_7%jYWmC5?wyQP zthKUuz0SjQ9;7=fv;h|RL{yn&mTwcu@~mRV(Vpvg$QiKQWcsq4h3>51rgWlq`wdgG zJ?-8mnxS1E%pqUpda@m7o7_Etft+?n>2~bI?p7^n%fs}}J)L9svzfBJzFS4UT*N1! zeRw}UZ$f#?vZ11~!fV6#47Rf#nZNDb{h3N$7%SG5{!zNsUa#!gPQ;FH)<;jYkK%i~ zhrTme?W643 z-8zC#A+9&=lz<0o8`MO9rRsyNQNF6yqR>VWp3ri?lEoG{8G>p$+` BrVRi9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..90759c768 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,397 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016,2018 +# Attila Nagy <>, 2012 +# Jannis Leidel , 2011 +# János R (Hangya), 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-07-31 07:43+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Emberi formázás" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value)1f millió" +msgstr[1] "%(value)1f millió" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millió" +msgstr[1] "%(value)s millió" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value)1f milliárd" +msgstr[1] "%(value)1f milliárd" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] " %(value)s milliárd" +msgstr[1] " %(value)s milliárd" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value)1f trilliárd" +msgstr[1] "%(value)1f trilliárd" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billió" +msgstr[1] "%(value)s billió" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billiárd" +msgstr[1] "%(value).1f billiárd" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billiárd" +msgstr[1] "%(value)s billiárd" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trillió" +msgstr[1] "%(value).1f trillió" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillió" +msgstr[1] "%(value)s trillió" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilliárd" +msgstr[1] "%(value).1f trilliárd" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilliárd" +msgstr[1] "%(value)s trilliárd" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvadrillió" +msgstr[1] "%(value).1f kvadrillió" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrillió" +msgstr[1] "%(value)s kvadrillió" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvadrilliárd" +msgstr[1] "%(value).1f kvadrilliárd" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadrilliárd" +msgstr[1] "%(value)s kvadrilliárd" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintillió" +msgstr[1] "%(value).1f kvintillió" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintillió" +msgstr[1] "%(value)s kvintillió" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintilliárd" +msgstr[1] "%(value).1f kvintilliárd" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintilliárd" +msgstr[1] "%(value)s kvintilliárd" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "egy" + +msgid "two" +msgstr "kettő" + +msgid "three" +msgstr "három" + +msgid "four" +msgstr "négy" + +msgid "five" +msgstr "öt" + +msgid "six" +msgstr "hat" + +msgid "seven" +msgstr "hét" + +msgid "eight" +msgstr "nyolc" + +msgid "nine" +msgstr "kilenc" + +msgid "today" +msgstr "ma" + +msgid "tomorrow" +msgstr "holnap" + +msgid "yesterday" +msgstr "tegnap" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr " %(delta)s ezelőtt" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "egy órája" +msgstr[1] "%(count)s órája" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "egy perce" +msgstr[1] "%(count)s perce" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "egy másodperce" +msgstr[1] "%(count)s másodperce" + +msgid "now" +msgstr "most" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "egy másodperc múlva" +msgstr[1] "%(count)s másodperc múlva" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "egy perc múlva" +msgstr[1] "%(count)s perc múlva" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "egy óra múlva" +msgstr[1] "%(count)s óra múlva" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s múlva" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d évvel" +msgstr[1] "%d évvel" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d hónappal" +msgstr[1] "%d hónappal" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d héttel" +msgstr[1] "%d héttel" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d nappal" +msgstr[1] "%d nappal" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d órával" +msgstr[1] "%d órával" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d perccel" +msgstr[1] "%d perccel" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d év" +msgstr[1] "%d év" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d hónap" +msgstr[1] "%d hónap" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hét" +msgstr[1] "%d hét" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d nap" +msgstr[1] "%d nap" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d óra" +msgstr[1] "%d óra" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d perc" +msgstr[1] "%d perc" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b41d6f862d656cff3103960e0aef35445defce3a GIT binary patch literal 1488 zcmb7?&5smC7{&`(6bD7V1pGJ@3E*y|XQo#^)?UX5ECi6%Wiy(th1M!;X;uf>;JuB7XwJ!zvhF2P079OlQCX{9_#A zRd53~bM@~Lw}LM3k>5$aM4TXgPMjtlC!QomL`lqu-w-ble;{5a{sOvwu7Wx68u>fq z@00%$zGHbaa1>~7PkbesZ28&OTnaSGX*ML zjb)hd;?UW1roLo-*wpl`zk~au&_{!1qp-5NROV)N-|ieN-Zf}<586G0c5Kjo+_R}@ z3CYrUhMBq+f*Dl}I~W^EYaGb573+x92<_5STAdaZ;~lPgUkjb$?+JMIbSNX0n-)!_ zjW?M_an;+GMX6U-0nbf+=}n7P>`J|f(1?JK7X2~L_wnF0DDM8Sh{zocQ{$C&DAOb~ zN(X#8J0&DP6za@$GO1ep6J1|2pEbfb$?NP>tdmg|M#3wLuo3XRx*=p7N1@3i#Nm*evxK@OmdVm1H_hyn{+N(tyim*QTY> zao&3^4NJbI#Ql-+-1FDZF4*h#26WHfeQDm_TRd-nXZ9BA?%H3O{S%p4`+#-*wcf;n zonzQ--ri(q&tdjAz|Hp^CI2VvALtD~{+FF!{ElImg)TBXhlvM^mlkK;)SSI-(TAJ7 K>AIyl^zsbRk%(dd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..ebd773e8c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,395 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Artur Saroyan <>, 2012 +# Ruben Harutyunov , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-11-11 20:06+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ին" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}րդ" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}րդ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1fմիլիոն" +msgstr[1] "%(value).1fմիլիոն" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "մեկ" + +msgid "two" +msgstr "երկու" + +msgid "three" +msgstr "երեք" + +msgid "four" +msgstr "չորս" + +msgid "five" +msgstr "հինգ" + +msgid "six" +msgstr "վեց" + +msgid "seven" +msgstr "յոթ" + +msgid "eight" +msgstr "ութ" + +msgid "nine" +msgstr "ինը" + +msgid "today" +msgstr "այսօր" + +msgid "tomorrow" +msgstr "վաղը" + +msgid "yesterday" +msgstr "երեկ" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "հիմա" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e1f2508fcc4c58ac34be6fa8cdeeed45ddf7222 GIT binary patch literal 4167 zcmai$&x;&I6vs=A#*D^jqQ?9%sm%{F<8JTFtkG;H*&z98FpD8>a<5F+&U7+UHQQai zy9wwuCr=`Rg6u(1(3^jO0Rw`9A_P>(&6}X0h^Pm@Z@Q+Zf7EI-)t{;Fd-eMDdp%uq zZ|jD47>*{!Zj2A_W9$?-^#D#dW;ZZ)2s{c-f&x4UzGd~#tp20r#s?Xz!~TM08}u-L z+wya;hWRhxesIS_N&Go*0&@wHe#`2gSbhi6_5Zd!v@wbEy5$?-LD)Y69|pe$Db8Jx zuK$;vS7D_21(1U`!RNvEL8Qd)fVdU*mF2hK4$SX@d%$18`@t=n62Gk=m1?`?E|Bbd zL5jD}>Q$>xS=Oz6#&Q-!Xm$dmc;`TT*sC~wfSz0ir!fD$!q{PO;*q3oSHK$PZ-Ugr zk3q8k0FwWfN0Yi82g%+Ar@{9?TK6Sb1%Cq@;O@;y-R426=MqTudKV=77a;ln0UiSP zK9<vDfM=>DF;7#%3-@ZM;S%MI&6 z->IIv=nD=HV;{zIG|3zs->Ht18SM#t$73+;GxdV*k7~FLV*-Qf^fbnHjJ+7y<0(w2 zZ`AAk7=uDt5@cFM+;cu9;(-E}GD9!A`y6 zO~poX(b4z`wRNmaExNsysL@bPeHKIANBLGVdF=C>QB3hqxRp!zo$J8bi z@9H=#1|-dfvkvKsOti!+waB2;HEc0hmTVF0nGz-rMb89%x#3{dmpvnDNl>>X4WxXg z0wo!hLxZ8uBDpLTi-J`a8D_fpgiX|`KS~4-pRNVc?-J5D;Hl|@J@wN82Eapg^?{j(`dfvHJV=Y z2yZr9jU$tdW}^W|?~+^&DCXGjh}SskHIMSr^Ke9qBDd(Qond3b)h?NaNM6F@sjU zzOu41Z76cEC|7A!J-N3LdNxEo5cOJR{`~xzaTS`=jmjyFpbFXD7~nPy9`gF2Cjxbh zx4R;Yq?xma0)sPJiX41vyK8QQ-|o`(+}@ykGG(M~+r2 zc%~OCY`Gb|w8Cyvj>I#Td_u!ry|f@z^UmozC|kynxL!7;{L{^}up$Xm%4IC)llhPT zBbmTts1itEfY7u2>HmrpjnNQ5j_$<`-$C{38z{Hz>V zeeCDU$d_D)0vY5tNVnV^Z|*o6N%nzaM96ibGGGD$5)J7H3rK=E{QWXh*qZ&~&kl_FNm1QL7Sz|eV> b^(Dim7oyf(yn`k4CH`tKKh~@(!+`w@%!+0; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..cc7aec532 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanisar" + +msgid "th" +msgstr "e" + +msgid "st" +msgstr "me" + +msgid "nd" +msgstr "nde" + +msgid "rd" +msgstr "tie" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f milliones" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s milliones" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milliardo" +msgstr[1] "%(value).1f milliardos" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliardo" +msgstr[1] "%(value)s milliardos" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billiones" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billiones" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billiardo" +msgstr[1] "%(value).1f billiardos" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billiardo" +msgstr[1] "%(value)s billiardos" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trillion" +msgstr[1] "%(value).1f trilliones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillion" +msgstr[1] "%(value)s trilliones" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilliardo" +msgstr[1] "%(value).1f trilliardos" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilliardo" +msgstr[1] "%(value)s trilliardos" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f quadrillion" +msgstr[1] "%(value).1f quadrilliones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s quadrillion" +msgstr[1] "%(value)s quadrilliones" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f quadrilliardo" +msgstr[1] "%(value).1f quadrilliardos" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s quadrilliardo" +msgstr[1] "%(value)s quadrilliardos" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f quintillion" +msgstr[1] "%(value).1f quintilliones" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintillion" +msgstr[1] "%(value)s quintilliones" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f quintilliardo" +msgstr[1] "%(value).1f quintilliardos" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintilliardo" +msgstr[1] "%(value)s quintilliardos" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoles" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoles" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "duo" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinque" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "septe" + +msgid "eight" +msgstr "octo" + +msgid "nine" +msgstr "novem" + +msgid "today" +msgstr "hodie" + +msgid "tomorrow" +msgstr "deman" + +msgid "yesterday" +msgstr "heri" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s retro" + +msgid "now" +msgstr "ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "un secunda retro" +msgstr[1] "%(count)s secundas retro" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "un minuta retro" +msgstr[1] "%(count)s minutas retro" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "un hora retro" +msgstr[1] "%(count)s horas retro" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "in %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "un secunda desde ora" +msgstr[1] "%(count)s secundas desde ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "un minuta desde ora" +msgstr[1] "%(count)s minutas desde ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "un hora desde ora" +msgstr[1] "%(count)s horas desde ora" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c464dc71548eff577214c7c19bef084331770442 GIT binary patch literal 3885 zcmb`IO^g&p6vs$deDRTMO0$q$&bVnUO0$&AZpYYqyFD?P4D#1u#jkF-u(K# zdiARM)vK;^{e90fv@ytCkn`6tb`U&uE&kAc=woa(cmeDOe+TaabITdq1P+56!J{DA z=Z*bk!%x92u>WMZ_BzIfpzk$Q-~jX&!Ij{LAjLTg+TcZ_uUnDms_ zl&VXHzk)YH|HE)ajUys$tXc8N(Mqde7HEn(vg+-!gm`#M0Sm z)BhQWC9p5RD)#hi@K)%1Zb;U17`z#J6{LMVZuDnCTIZ|A{-)t4;BByfV|W3icz+wc ze>G#bK;Hz?_%ZNKa6h;KEF1kPqrU>Kh5a;0b@wfZEn+`|l-EB&df$IQOu?2T==ESf z2ou|2xD~{Ym5e?KlK*2M`8&p5H+&MrkDWC7OCaU#4a0Xpn*V)}=Kt96bHgtUzcT#J z@SNd!!ygSV8UAMYm*KLTl6h7dt_Eox{UFV|9;AKV2vS}KKx`x11);oCqchuXHXi7` z?==R>{dV&_3{tF}koAyt5PHW=5NewtRNK@r4a1RZ?G5SoK!zaOAfphJQR}=@?TkRE z-JhWKPkTx2_5^GPNOeJt-h&#QLu!Qtt@FOdJk#FNzHNm(0I?tg5Nebks%fgjK?pUf zU8IyPBL$6Wjn3QMq@d*?lutG==m<~qp~&KH(4ozSfp4jx0n;4!VgZL4>3K3xOIjRJ z?(*tobA!MQypB*^2EQv#w?zf2%d3|yDC;i2UbbT~cfu~u%UPxBj(RNaWsO9=+x0TW z`CgtqjJkWFscC=gb0wb;j9b1`u@+`?%R#L4P;}eI31U5;rVw<1vvl(RTu zVr@q>KIy1|!8BsqG412ZsswSkI3U?fIOC9x=!lkhr9DEr70qVloM5vU&lJ~j$UQB6 zVb8{R7JUPQD)xsQ%i&FwU-}#^z8-c2v)Qx(>1$BGYc}G^=nN@dX)zPdvmZ*`K6N*K0 zp6N;`1k(XkwGR9s4Dmv`5wNC+vhy=gOZgybkII5<|Mh=d$|@RYostzw2KA1u+u7xm5RHz6wq=9P(k)|$W`QV z9fT!oLWE80h|rQZaJnCKg+C*_hM0NC^||zh%YnZKgOnR{SJ=~n`z32qImmw`;Xhc> zx?alX8;!=Wrl@jO%+sKJvfMU26Cp31{7`Oca%$hgixr0pxkpe%LSbdiI+m`*yw2A> zF4bGp343(GkLH>cp}kL)1C)VVvPNg5PFGs8q?0@3(Fetz2tq$9S*qSr zqw(TyD|s9*?9Sn6wlCEt)@XUSKs#&>4<){$HIDgQ*xUCj?l;*wscnOUe0VbMym7m( z$!e^5M~v3(mmLz+aHC{Rwd9^#Y;0X!Sz~fZEw`mt z7fNcYGa-w*7Uw1Hc2G&R-XoK)%Z{vazxO!m$d1B}@j6!QNuM*}*SW^xlj{N1B2xt; z)92PJrP@r4icB?p^IVs, 2016,2018,2021 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +# rodin , 2014 +# sag᠎e , 2019 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-06 09:17+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Memanusiawikan" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "ke-{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "ke-{}" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s juta" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliar" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triliun" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kuadriliun" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kuintiliun" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiliun" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiliun" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiliun" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniliun" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desiliun" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" + +msgid "one" +msgstr "satu" + +msgid "two" +msgstr "dua" + +msgid "three" +msgstr "tiga" + +msgid "four" +msgstr "empat" + +msgid "five" +msgstr "lima" + +msgid "six" +msgstr "enam" + +msgid "seven" +msgstr "tujuh" + +msgid "eight" +msgstr "delapan" + +msgid "nine" +msgstr "sembilan" + +msgid "today" +msgstr "hari ini" + +msgid "tomorrow" +msgstr "besok" + +msgid "yesterday" +msgstr "kemarin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s yang lalu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s jam yang lalu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s menit yang lalu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s detik yang lalu" + +msgid "now" +msgstr "sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s detik dari sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s menit dari sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s jam dari sekarang" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s dari sekarang" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d tahun" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d bulan" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d minggu" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d hari" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d jam" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d menit" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d tahun" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d bulan" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d minggu" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d hari" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d jam" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d menit" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fba64da89f8fb8d99dd31e965014a6bd1a0d0105 GIT binary patch literal 464 zcmYLE!A=4(6x8TxkDfi$!~+E1wj~mI(vO)*>gO7K3R-OZ<&Ms9NV3fhTa$Z{_NVb$Fx6w?M z)&-dOTxamK&OIbnkZAgvK;J1D&~^tj*j$V8-NYnJY+?TnRGD zEU7I*Cr`Hlfkh)k6F~WCMbhjeU(@* zsBNHSA+_m}bRnHrq4$;yp>yaa(*OVf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po new file mode 100644 index 000000000..046e77581 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b22c4adccf739ad346d4e5e02d2608fd7058a827 GIT binary patch literal 3805 zcma)-O^g&p6vs`jk;28KgI1Dz8{+7|dGW-*ywKm=y zaRzkYE5l3RDE#Z-4)7n4*57&yW81-lAn6`R`WuGJAnpH~;i^^9IunM^gTokq6~vNk z2}CMv+3*X)Z$LWQw}#(?YvKQ3_zQRs{J)IPZjHv*8E!Ll4EGxzF?`O@2Puz5koJ4g z_~#8@1M$Z$;6~#Y!PVgV;1%@XW02}t$uTwwz6{d&z6Plde}EI<+S?f03myO|{wzrK z{uJB;{tA}B^=lZ*g9pGd@Dxb%KLDxjKY}~Kzd>4O%k9zpBOt}U1XACYKw9r-&;eJY zcrc${Bt0k`@G>RhOZl5FnrVSUBmYbKQ#Qv@Ur12Ankv} z_{$(38TPs1HIVB39Z30J2Pw~=K$N|Eq4eD|ld}Paq3(4j?(`eUM=slDNT9ROMKyUC zwhKo4_O1u<4@$;R-tM&?_Z{Yc!o9EuU{p)0Kh?T-J%oQY!?wUUjQVvy><$>(%SK>y zCOXeL*hUy#H^T0Q(eu0smb~tQvo#^$aq2!_R6D8%8y;!9jg}bAmuC41ztQjm`JY-% zR4tKq)e8bIXrz|3NKMOnHcbZ75@}b1s%O$DeyU~Hm6*4M50n?} z(N$~N|U@)D(~JqRva%D5$GHjZJ*Z6#!d0!L^rO8xF=nu zol59R)o^tXmU(3k1#gA?Y2RywHKhW{_v=V|tnTK0^(f{@ujP8esR*}O=7+1I;mVp{ z*Xzu9YqX$>cU&`(S5npJDq;qbvNu>#p9a% zq{OLzE@OBy2+tbzP92;-{NkSQn7KP;~$mc zv6g5)CE43Bn|wk~%~s$`mzZ%&MAOHXW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..d9b14c027 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,399 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# gudmundur , 2012 +# Hafsteinn Einarsson , 2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# Thordur Sigurdsson , 2016,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 03:49+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milljón" +msgstr[1] "%(value).1f milljónir" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milljón" +msgstr[1] "%(value)s milljónir" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milljarður" +msgstr[1] "%(value).1f milljarðar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milljarður" +msgstr[1] "%(value)s milljarðar" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billjarður" +msgstr[1] "%(value).1f billjónir" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billjón" +msgstr[1] "%(value)s billjónir" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billjarður" +msgstr[1] "%(value).1f billjarðar" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billjarður" +msgstr[1] "%(value)s billjarðar" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trilljón" +msgstr[1] "%(value).1f trilljónir" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilljón" +msgstr[1] "%(value)s trilljónir" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilljarður" +msgstr[1] "%(value).1f trilljarðar" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilljarður" +msgstr[1] "%(value)s trilljarðar" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvaðrilljón" +msgstr[1] "%(value).1f kvaðrilljónir" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvaðrilljón" +msgstr[1] "%(value)s kvaðrilljónir" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvaðrilljarður" +msgstr[1] "%(value).1f kvaðrilljarðar" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvaðrilljarður" +msgstr[1] "%(value)s kvaðrilljarðar" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintilljón" +msgstr[1] "%(value).1f kvintilljónir" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintilljón" +msgstr[1] "%(value)s kvintilljónir" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintilljarður" +msgstr[1] "%(value).1f kvintilljarðar" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintilljarður" +msgstr[1] "%(value)s kvintilljarðar" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "einn" + +msgid "two" +msgstr "tveir" + +msgid "three" +msgstr "þrír" + +msgid "four" +msgstr "fjórir" + +msgid "five" +msgstr "fimm" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "sjö" + +msgid "eight" +msgstr "átta" + +msgid "nine" +msgstr "níu" + +msgid "today" +msgstr "í dag" + +msgid "tomorrow" +msgstr "á morgun" + +msgid "yesterday" +msgstr "í gær" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "núna" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3860b1288ba59d9ae656ce76a730b666d852d537 GIT binary patch literal 4653 zcmd6pO^g&p6vqo(MMhCXL{>!`Wn~xWot@=tnRSf8g$RLwuyFBIOxN@l%v25CHTwY} zG4Vp8H)8Z)jPalciBS(|j2{Wn5WSe_NnOz{G=lOP9vFtsvr zWsp+!i{W)WUI8ipgUcAJfhF(=_!>9~F2YTe z$PXR{PlGi6ne`9d8sBFbbl?xb`@wUT7r=F}zXb0B{|4#Y4K9!KxeY|g*(8XPv7O)= za4$%CoU!(k;2`W5LE7&-*8bX#{{fPI!{K>mLSDMz$TD z>PL;9*=BQbfzm~}CLiT?3tga%qSIR2(Cn!h+B^u<&#<=1{<@adaSb7IA-i7^iAjwqC4nx zPN~uPrZc?~eHfh@(h@yaizAD%dqJu@of&F*bjmjy8umoh@R88rzHYNBfv!19&%rgz zs|^9cFBk`FyQ?U2O}Manv$#vL2;XM%B%y%O<1i<~!NoUXW4t@=BGB zda}{Y8;W{X+QT{DP1(h1vKviYk2Pvs$y0)HrzTay2wU8;ZYVPnUVJI`#x+kgZ6(hL zlQHguqO6tI88P-YBU()|YiKx$*c2vXTsbqk5p)J5pABaP$&9vWu__r6(w{M`B4-7w zU_MjaGy+~VvL@V01J`0;XjnCBBc9{&1suQRI_#&VRT6QuWIuJB+(d74-FJpoW~McP ztiJo16XHZ7C!?==LGae@$w;f~JT%vqm6Y--IZ0`+AtP!1)$);2UnLtUZMR%VB^bTw zG^hhlDqeNQ22P(rNt$K>W@uVwVUtrBN8g;5jl)!4BBRluWo}7}x2DZ)X>)tpoJgBH zVlx!8La|WJGcywi!HlL;ZFEfs0dC05X|^CjBLZ?C4D@kPHtrtJJt~3_Z}Ot!9p}o| zxkI9^1LN)wed)P78-D0c>!Oo8c)&d*W+h48DQ-m386O)jxCQ);4b`Jn*^mkQZ5_hO9^Y8kg14vaUUhY07VKU%1nP*NV;_!>bZ6 zgW(xt>cxD1Zfa*yH=35AU<)Uk6T z=1sm{%4C&Xl`O}J@Hpv68i%WK>a7Z0b z;gk@d`IDo)2J)%9QOqGNW)%6$SM^X;SU*QuEOE0UG=tU^}W`#z&ZQ<2z_ z=o{q}KSig=VGR|3t7s>BTI}~i?33ifyTD0Ak(GQ0SQW*HKQB6h#Lo68R@M>5>L`xJ zYN?IrK(uzT9>X1TG0wCxnw6zG*$@n0jm8A@M91G4zSKeVY;-j#UQ1j>iO0^=xXw8oH+8XQF`u}6EO5-EXzDOImk<({z e|F!>~lsCabAyIEs*!Ly#G#y>$p~_MOlKlfB(B!}X literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..8c1f9e580 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,338 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlo Miron , 2014 +# Carlo Miron , 2018 +# Davide Targa , 2021 +# Federico Capoano , 2011 +# Jannis Leidel , 2011 +# Luca Manlio De Lisi , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2018 +# Nicola Larosa , 2011 +# palmux , 2015 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-12 12:01+0000\n" +"Last-Translator: Davide Targa \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Umanizzazione " + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}esimo" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milione" +msgstr[1] "%(value)s milioni" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliardo" +msgstr[1] "%(value)s miliardi" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s migliaio di miliardi" +msgstr[1] "%(value)s migliaia di miliardi" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s milione di miliardi" +msgstr[1] "%(value)s milioni di miliardi" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s miliardo di miliardi" +msgstr[1] "%(value)s miliardi di miliardi" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s migliaio di miliardi di miliardi" +msgstr[1] "%(value)s migliaia di miliardi di miliardi" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s milione di miliardi di miliardi" +msgstr[1] "%(value)s milioni di miliardi di miliardi" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s miliardo di miliardi di miliardi" +msgstr[1] "%(value)s miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s migliaio di miliardi di miliardi di miliardi" +msgstr[1] "%(value)s migliaia di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s milione di miliardi di miliardi di miliardi" +msgstr[1] "%(value)s milioni di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "due" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "quattro" + +msgid "five" +msgstr "cinque" + +msgid "six" +msgstr "sei" + +msgid "seven" +msgstr "sette" + +msgid "eight" +msgstr "otto" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "oggi" + +msgid "tomorrow" +msgstr "domani" + +msgid "yesterday" +msgstr "ieri" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s fa" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "un ora fa" +msgstr[1] "%(count)s ore fa" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "un minuto fa" +msgstr[1] "%(count)s minuti fa" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "un secondo fa" +msgstr[1] "%(count)s secondi fa" + +msgid "now" +msgstr "adesso" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "tra un secondo" +msgstr[1] "tra %(count)s secondi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "tra un minuto" +msgstr[1] "tra %(count)s minuti" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "tra un'ora" +msgstr[1] "tra %(count)s ore" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s da adesso" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d anno" +msgstr[1] "%(num)d anni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mese" +msgstr[1] "%(num)d mesi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d settimana" +msgstr[1] "%(num)d settimane" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d giorno" +msgstr[1] "%(num)d giorni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ora" +msgstr[1] "%(num)d ore" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minuti" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d anno" +msgstr[1] "%(num)d anni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mese" +msgstr[1] "%(num)d mesi" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d settimana" +msgstr[1] "%(num)d settimane" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d giorni" +msgstr[1] "%(num)d giorni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d ora" +msgstr[1] "%(num)d ore" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minuti" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e043b9ed4d9510bf73eca3eb7b7ae0fc10d4ddb GIT binary patch literal 3907 zcmcJSU2GIp6vwYvMHcY`5kWx-UWUQ(mdxu6}-yv%!$Rg9aNC-2IqsXgP2;J z0#TYc%RC3ty5~Wf=Q(b zC5RuvB+m2#csJr0{?Iu-15O8D1ZRRsgM!1!+IOWB$bag?W)V!o0@(hdBWcPva*ur!i-NwBB51 zJ##*Yt1cEYn>iojcp1lwp?LsKM(=FNR5Wljg|ndC!|)brz#8H7Y>VKJ!0DXm?#_dg z&4<(7Cc`p?I_ONu=@@f9W%XjP3wgEByXKO9;Gz1*7+n zEK)?_eW$xfMrS-3z7ReauE6Q@fsFQ(?({TxJ)Dg05Vl-QpaAw5oZh!t6u`o8dT&Hs zeL|)kt-)5blsPI&T4qKu%wD8=v~*5Fuvt&1b<-F(laTQWRkd8oG*f1J)KnFTOvOBv z8N)OxRMm23+^Nu2%WcVN39CYRqpWUJ&blR6Eo;kcrSt~LzG})UNvE<H*${T!;PCc!)dV3eNfC6&)nCHI`Rsk-=`_IjGIPc?2N^1X-3xgqw4DY8B0RH zPcxKGGiQyRka9d73;YqIW-F@v9;v4~9g);~q)1}CFf=D;X=z8#NHv*5Th`Ro8@WtF zLP==-xPE@y9#2cF_~OEn+5;1#~ooBPG@-lMdQ}fD`mGYr(j%lztqarQxH^V zHQTwhT?r^}vL^xUE$m28f3y7vsBf|x0d2Lt&?UbHSpUS0d zwZn`lq4n$34YEfksk%aQWK3y_G)2{DM2$8p(P*rtWkCcMT7w&;c37HWr!~j4V#>x& z-RRepb={g_D$5+RTi>iZ=98(6rl%X@W@b5t7^$3=l4^(4GBM>jEvp&QmP&o6<78vu zaBpvKqeC<5N!dq3!o^ZcNb~q`mlkdatzEr#W%;3^jgipPxIxlDRsC6%?Z`eSoK0)G zu~dn7;suaS`|};E)V8vY)=ElCU1`KkT!BchK_rudoUHy>fYA`9S7rRd5l$FV{w wx_tUXsrg?_wS;aR{;Au#ZDj9}k#|4;9~+DD+qs#Rqq>Lp?;, 2011 +# Jonas Obrist , 2012 +# Shinya Okano , 2012-2014,2018,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-13 11:44+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "ヒューマナイズ" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}番目" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ミリオン" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ビリオン" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s トリリオン" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] " %(value)s クァドリリオン" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s クインテリオン" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s セクスティリオン" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s セプティリオン" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s オクティリオン" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s ノニリオン" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s デシリオン" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s グーゴル" + +msgid "one" +msgstr "1" + +msgid "two" +msgstr "2" + +msgid "three" +msgstr "3" + +msgid "four" +msgstr "4" + +msgid "five" +msgstr "5" + +msgid "six" +msgstr "6" + +msgid "seven" +msgstr "7" + +msgid "eight" +msgstr "8" + +msgid "nine" +msgstr "9" + +msgid "today" +msgstr "今日" + +msgid "tomorrow" +msgstr "明日" + +msgid "yesterday" +msgstr "昨日" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s時間前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s分前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s秒前" + +msgid "now" +msgstr "今" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "今から%(count)s秒" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "今から%(count)s分" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "今から%(count)s時間" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "今から%(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d年" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)dヶ月" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d週間" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d日" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d時間" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d分" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d年" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)dヶ月" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d週間" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d日" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d時間" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d分" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..61fb3e01b4ee6c121fa958522a3471ae4de93b8f GIT binary patch literal 4878 zcmbuB-ES0C7{-r^qN}KYsE8j25om3u+d@dn*7}77Q5p)CdeI9r-95V828}88=+t-on^+@DfO#2;2&;S(WHJLDI)G-vslBFKYe{ zT8P)*n(#TW6R`xhfagHUe;M2i{-O2Nw-3|_c zlz$YY_K)lMf{w3%9Qxnjli(&)Lep$7h%U1Onujz;K@6RZX}$)Mzo=tJ$5l-Q;=|@} zqk3iJg#Dn0z9Ag9E8E_By3rPCLI}=yRGsfUiPddrv|KJcRf=9k0JP$u|i;0sR}0+PMnu z0{Pk`9tA0`gVgVymMggXki2HRm)>Xr9ungJ_z4sd-uJKWYA|`6q~}V}F6< z{|Cgh#(M%_n@}+1#)ZeM1BLboh8$mAnuP5r7*c#aj{9RMkD$<)v9;I(D720kR(wtX zwgKfK6xz2~PIf;ET{KR8eBu~O#K*L9?qs+C01;54fhDJ#;wE~P=L8uFPmPkIKYS(U}W z;5Dn$HM`^+-0gM8Gi9HynRO+mO!l_&F|*q!2d0jvXfx@L--G}CG+-cD^@De{_B!!jw}Mr>IkavDU#0yU%;YgOBGjtgdE(!5$A zxLuJrLPc5gf==~)JyBIGH#}uuRxy3ECS&87jouWcS8C3fs0$gjr%`K3(+kGNGuz`6 zvgS7@Bu%H&hDMDg*%DXdiEt_t0V_K*f|XI9d5$L-4M~DZ%m|Mu=NJnnd?8pMOZFV@ zRq6Y%1hbOO2^9#RGMi4&h#$mVPmF3f@<5g;QMOY)kt`_({A^nPjiR+jMf~i72KRY|y9Z*WA zERJ;-Wi_AlbpfufpP#hzow=d?LxYQ>>h12y?U7y}JalVr3jGeS-||zg?RfpXIAQxr z1OrD#_F8?5K5DBhd~47v%97(%3cPRJ2^#$@@JTy2?ACnSwf0KCstVkjibFN9qn{^V z2RgjX1HGO7x$9o;QTSdIo{hru@%>~J)}!zgzTb!m_1=lX&zI!;APV1aO_tU7b`*Xb zg}5UP^{=T;;e4uOP}Brlj5nTEu$s<1W}@FuC~XB zQY`y$x%1OJkmemp&(lv$c31j|pj4bBO=FN0ODCr7~>1SgxX*O?$ z1JcG4gk%;sc(FQ zo+f8xx%O9JTBecKM_6p6#wTS8Zp62IYw^?geMvt~EDFDBECm9bLG%dHSp@jAfN%B0 zhQ1=eFFn=4KMBaxcLd0YR9HT|(kRA5Y&b~hJjKZvXs!{!^J#3EM}UOMFXVXyXu6(w LlJ^>Ql(xiwmJV*e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..e9cbf2568 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,395 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 01:38+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Humanize" +msgstr "ჰუმანიზირება" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f მილიონი" +msgstr[1] "%(value).1f მილიონი" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s მილიონი" +msgstr[1] "%(value)s მილიონი" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f მილიარდი" +msgstr[1] "%(value).1f მილიარდი" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s მილიარდი" +msgstr[1] "%(value)s მილიარდი" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ტრილიონი" +msgstr[1] "%(value).1f ტრილიონი" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ტრილიონი" +msgstr[1] "%(value)s ტრილიონი" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f კვადრილიონი" +msgstr[1] "%(value).1f კვადრილიონი" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s კვადრილიონი" +msgstr[1] "%(value)s კვადრილიონი" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f კვინტილიონი" +msgstr[1] "%(value).1f კვინტილიონი" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s კვინტილიონი" +msgstr[1] "%(value)s კვინტილიონი" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f სექსტილიონი" +msgstr[1] "%(value).1f სექსტილიონი" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s სექსტილიონი" +msgstr[1] "%(value)s სექსტილიონი" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f სეპტილიონი" +msgstr[1] "%(value).1f სეპტილიონი" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s სეპტილიონი" +msgstr[1] "%(value)s სეპტილიონი" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ოქტილიონი" +msgstr[1] "%(value).1f ოქტილიონი" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ოქტილიონი" +msgstr[1] "%(value)s ოქტილიონი" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f ნონილიონი" +msgstr[1] "%(value).1f ნონილიონი" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s ნონილიონი" +msgstr[1] "%(value)s ნონილიონი" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f დეცილიონი" +msgstr[1] "%(value).1f დეცილიონი" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s დეცილიონი" +msgstr[1] "%(value)s დეცილიონი" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f გუგოლი" +msgstr[1] "%(value).1f გუგოლი" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s გუგოლი" +msgstr[1] "%(value)s გუგოლი" + +msgid "one" +msgstr "ერთი" + +msgid "two" +msgstr "ორი" + +msgid "three" +msgstr "სამი" + +msgid "four" +msgstr "ოთხი" + +msgid "five" +msgstr "ხუთი" + +msgid "six" +msgstr "ექვსი" + +msgid "seven" +msgstr "შვიდი" + +msgid "eight" +msgstr "რვა" + +msgid "nine" +msgstr "ცხრა" + +msgid "today" +msgstr "დღეს" + +msgid "tomorrow" +msgstr "ხვალ" + +msgid "yesterday" +msgstr "გუშინ" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s საათის წინ" +msgstr[1] "%(count)s საათის წინ" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s წუთის წინ" +msgstr[1] "%(count)s წუთის წინ" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s წამის წინ" +msgstr[1] "%(count)s წამის წინ" + +msgid "now" +msgstr "ახლა" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s წამში" +msgstr[1] "%(count)s წამში" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s წუთში" +msgstr[1] "%(count)s წუთში" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s საათში" +msgstr[1] "%(count)s საათში" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4e22806df2c0bf59cc5c594b2beddd8316e2c3fb GIT binary patch literal 2113 zcmbW1&u&W+@7^Y+gxE0(Dj^iHo zgCD~G21Sm7KZ8TyGs|OJTKNWO^7lX&{2TljJn&kJ1@IvJt6&QJ1%!k=0?q!v+4vup zPi_8Ro8JPF(e1(oEs=eosq?Ol_kpIKYyBK(9)Z#Bh3$fEhb<4IT|IF8I_KC#V5H7TUonp!&bm1# zd(?4rH0ydta)+`QsWZM*&S>Ow8Tv{@9{tqkJdpGZ3-TC&U+a%v>3MSkd<5>Z8ZlvkUs96UTgThqZl{@$S5Kag7U0_l5tUf;!MUf+zT_3f8R z-q(wr*0rS;^bh)`zKy+>_kCH(yk3kO-K%t$#EmXpbWBRx@ys@wT7AcB)~ri(KP#-< zkf8G+*b3bQD{uPpKe41Mp?F5m=^x`+eTV2, 2017 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 01:38+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" +msgstr[1] "%(value).1f миллион" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" +msgstr[1] "%(value)s миллион" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" +msgstr[1] "%(value).1f миллиард" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" +msgstr[1] "%(value)s миллиард" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" +msgstr[1] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trillion" +msgstr[1] "%(value)s trillion" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" +msgstr[1] "%(value).1f квадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" +msgstr[1] "%(value)s квадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" +msgstr[1] "%(value).1f квинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" +msgstr[1] "%(value)s квинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "бір" + +msgid "two" +msgstr "екі" + +msgid "three" +msgstr "үш" + +msgid "four" +msgstr "төрт" + +msgid "five" +msgstr "бес" + +msgid "six" +msgstr "алты" + +msgid "seven" +msgstr "жеті" + +msgid "eight" +msgstr "сегіз" + +msgid "nine" +msgstr "тоғыз" + +msgid "today" +msgstr "бүгін" + +msgid "tomorrow" +msgstr "ерте" + +msgid "yesterday" +msgstr "кеше" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "кәзір" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..482b022aabfd68028d61c7d3b151124cd4cab802 GIT binary patch literal 459 zcmYLE!A=4(6vXIhkDfjB;6a0rwnhRLF-C+0g-FQiz3!H!u-k6hBKR2|{5`+Lw_sqB zNjvGh*O}kblb;&m2ziD)M;;@ukQLg-ZN@faTB@01b z=7nC9ri&5Sr*YGUpbk>z`DW< RV#=-bUEU$PYnOGR+8-7Nhe`kd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..0aab550a5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/projects/p/django/language/" +"km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b75cf46d95c92eea48ae5a202cd3c2244dde302d GIT binary patch literal 461 zcmYLF!A=4(5XIYYL~R!<@B_qyLhztA3+y}UPhzAsCW1Q9dwTJ}( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 000000000..9e7eeb911 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/projects/p/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bf159486e63eb099c8c821ba2ef82d90fc1c4951 GIT binary patch literal 4817 zcmcJSTWl0n7{?D-K`SVtfEUCAT4*WL?(7y?7EtbjNT^uw5{wykr`v(unKComauGsI ziAag?00g86B8rKa6ey&q#GpP95{<9=V7w-#J1F{~KJeiG+x>RC+nsHB@uX*d^Zn0% z&h?w!?)PKM4hodTs1s4=4i`cL*OlRd^26;yj0S%M$AW)=)4<^)gs29mgB9Rfkn~qs zKgIk8tc8A)Ib);{3gUIlJzy2$UhpySCvX}#;tnAugEb)OjUeeRvkRp0zhvG3sh^2= zX1Eljd9{LQ5{E$Q=Qv2?f5Gve9FHp(LPB2zP6wkPmMZpvv=s-LZ-F$g;~@2S1*CcX z3etF^@5<;Q=JVjA(6@o~+)%nPhv1<7{FSh7|aQriVN*uJt)DK zS>FLZj(8up_ptsQGsXH%kbF}xNt*XlAgyN&Nb`OLmxsVj9Pj1$ZSa2Rm%vBBuR$zd zc+B6KH$d9Izd+ize>on8MN&KxOz$sqJaZzqPvN+lW0m7Db3RDpE(P&QiDewG0;&IJ znJ+OT%s4a2+`)XExu1E2d6M}dNaOV|FEV>U8vkSF71pnEe2rsR1X3(r#^H*Om-Oe% zli+=6HIoO^`926fh&l@uU8FxdMuPRIGf|Na=|Z^?;CnhxDhp5-p@t|xnV-H2F&muA z_gT;xF3twv6MSFItO94C(i$hTR>P$Cz7Cc0o!;#-R4S8DDOagbjw034?=7X5~fAwv~{k)efmmizoG}8ns!jH{x-_GKbWndc?=+uf{AZX2lD-^pO%i{rPF8 zW%@Y%RV(89c>UE)NiAyoxJ&DX>DT+Fq`&Uyt$y~B@@9Xxuk89wyhwD4PS;Na&q7aJF@u9{58MRa%3sB_@v0|r}`X|BTI-yM?_8^(dU42 z(z0YiGmWjf(6DJ{($)FpjaW(3t#Up;kx?`6bk39aN*5V(Z5n11vCQbe9y4mTNA~2N zs;JEMm^J3wG*h-%Nqb<2q;Yp_$UTwQTgH`Z(T!M(E1HcqT{Po)VQOyD*5a;_(3R#S z?)9>YsEle`Lp3*DIItHxAFm*xSC>ChhQNz^YGElZ{J9aM{st6so zKU8N(HHaE2v;`5G(VUH1?f$T?&^)s+oK+as7lsXm;p|N4=xw?w9AmR^TWnnyu0<*4 zS_#Xxu^_kI5?ge~)oqd+ZEJ%bah2s!Wvy;I_`VFw=myP>zsR?Bvkl}^lvDhrb_ zM`^Ocvb=Fsld{OxH5XoGvF7Sw84Reim4K?Kvv3=(3swizKmbN%wcch>pZ&fDMGY!y zoeazh2SU{Wl=5egE=rTFnND1DEjuh!hHGov+uLhg>dk1@H`4>Pne}85=cj8oTD4W>E0?ca z(!X-GCQ!Zz*`%A8(Uw*$&Bdo(ZEIXJ%sDdBf=t)ld25=MDh>TU8mn2il_h4xLY~CJ zvSGd9=4Kg|8?ExjIKBDGQp-*_VQIFeLuZ~kM`mv41?H6J{XgTK=n&rNoqfH#Qx|t$ z@937fe|+-)_3%1B@(x|dS7hqI0k88^>isj`pn>De&->d2c>uTz3ZL5`8FA>FCIX8=eoRix(i3>KHGQh za)IRSdZVbfI=|jJE)DPn)nZ%zfQ}rnfzB;$pCgCZJakjIcMyi&In3r3_6@GWT}uy^ zzh`jV!j8c;^nSsF^YM=L_H}n$KXL%a!rz-Rb+JSGRhh`ZR-k}~OulNr_R%oOE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..4a0928d1b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,358 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ian Y. Choi , 2015 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014 +# JunGu Kang , 2015 +# Noh Seho , 2018 +# Yongjin Jo , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-12-14 06:03+0000\n" +"Last-Translator: Yongjin Jo \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "인간화" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}번째" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}번째" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f백만" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 백만" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f십억" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 십억" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f조" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 조" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f 천조" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 천조" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f 백경" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 백경" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f 섹틸리언-10의21제곱" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 섹틸리언-10의21제곱" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f 셉틸리언-10의 24제곱" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 셉틸리언-10의 24제곱" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f 옥틸리언-10의 27제곱" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 옥틸리언-10의 27제곱" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f 노닐리언-10의30제곱" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 노닐리언-10의30제곱" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f 디실리언-10의 33제곱" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 디실리언-10의 33제곱" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f 구골-10의 100제곱" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 구골-10의 100제곱" + +msgid "one" +msgstr "1" + +msgid "two" +msgstr "2" + +msgid "three" +msgstr "3" + +msgid "four" +msgstr "4" + +msgid "five" +msgstr "5" + +msgid "six" +msgstr "6" + +msgid "seven" +msgstr "7" + +msgid "eight" +msgstr "8" + +msgid "nine" +msgstr "9" + +msgid "today" +msgstr "오늘" + +msgid "tomorrow" +msgstr "내일" + +msgid "yesterday" +msgstr "어제" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s 전" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s 시간 전" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s 분 전" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s 초 전" + +msgid "now" +msgstr "지금" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "지금부터 %(count)s 초" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "지금부터 %(count)s 분" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "지금부터 %(count)s 시간" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "지금부터 %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d년" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d개월" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d주" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d일" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d시간" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d분" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d년" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d개월" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d주" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d일" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d시간" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d분" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..669a321d56f7ea81e2292935465598238c908936 GIT binary patch literal 4177 zcmcJQTWl0n7{`xTMON_wiXdJFq|ySj+byM(#i~I-i4X`BUi4+Ud%7LEJEzR0?Lr{X zK9mG`^414UOia8aL<;3nN?Q_wA-v6$S1*b20fP@3H5%iC|8M8)>`r&L%ZsNy`vUo|OCuq`&>R_n5C+EV&XSeH40k!?g@j82W- z*+NtCK>J%M9drjR@;M4p&9tJ^UD7?#nyb;N(fv?uQ$w2hb(iKX|E?SHydJ#`opM}( zj&xWvI<-|k@}G34)SmLeHh@%D)bI-C8@-3rntbHn_a*WfWx^gtry6+)T|uYs2WoU~ zRMS+)4d~S9Zs{K9k%2}vNA*j!NiBv>?+vSONb!uVHCl?67A01fDYA+o`r+!+G7g8J zQ_o~{Va(}C@no5*k}oYpT4YK>l{vCyamqc0Fv?Vwd?IO==_>gSIae-YW7v(>^-q1Tf9HXwub1I+F=IcK(@skZfcIJ@wnQ&QHi%C z;_?Usre18}g337u->X z$5ZYUJ-Sm$MMdzN>rT4k?p6GayQ4H40p+hTreE|<ez&P9_e2|PKEr!b7_3MdTeBV(Y;nJdVX}mJ5hCfaMrr+2$niQ z=SipPo%9C1Q{HhL_z(_3{_?n!GiTkY+h2KuN|n2)Aq|FQdPB5Y%~;jMrO`%_bM371 z8=NJ~M<2sUUuNz(6vRp94PuMOy+Lf;|7~+8Xy1WZh!Qx8=TdZyx>rgKx~S2j;}Xi3 zs_Xxak2R-VDrIbK)V)j>N_!j!jvS>edBZbj@t7~OVRxJ!;qy*~eI?40#~PDLhLHe8 v9b)b!oG)G#%H}E+7@Ilk4I?Fl9i!09J52}gUYz+1kM0CXCopFi{?qI~7ic$i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..1308815c1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,299 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-27 14:11+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Инсандаштыруу" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}нчы" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}үнчү" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}инчи" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}инчи" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}үнчү" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}үнчү" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}инчи" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}нчы" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}инчи" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}инчи" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}унчу" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)sмиллион" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)sмиллиард" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)sтриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)sквадриллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)sквинтиллион" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)sсекстиллион" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)sсептиллион" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)sоктиллион" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)sнонтиллион" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)sдесилион" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)sгугл" + +msgid "one" +msgstr "бир" + +msgid "two" +msgstr "эки" + +msgid "three" +msgstr "үч" + +msgid "four" +msgstr "төрт" + +msgid "five" +msgstr "беш" + +msgid "six" +msgstr "алты" + +msgid "seven" +msgstr "жети" + +msgid "eight" +msgstr "сегиз" + +msgid "nine" +msgstr "тогуз" + +msgid "today" +msgstr "бүгүн" + +msgid "tomorrow" +msgstr "эртең" + +msgid "yesterday" +msgstr "кечээ" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s мурда" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)sсаат мурда" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)sмүнөт мурда" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)sсекунд мурда" + +msgid "now" +msgstr "азыр" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "мындан%(count)sсекунд мурда" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "мындан%(count)sмүнөт мурда" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "мындан%(count)sсаат мурда" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "мындан %(delta)s мурда" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жыл" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ай" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d апта" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d күн" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d саат" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d мүнөт" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жыл" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ай" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d апта" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d күн" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d саат" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d мүнөт" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..32550deba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d6f5ca25e5a8be17f394ff5f761e699617de2529 GIT binary patch literal 7333 zcmdUzON<;x8OMuYY#0&}Vv+zcPzhdp$M)>Z?E0~u-LZr1*ohL8RkFkgB0+nmcD8qB zx+mS$vtH~-96*r}4+$w*B?K8uNE|@&!3U5Kks!O5aN){@r+7#l0!WBUg!q45)!o%S z)r%#>ftGrIUH|Xvf4zIU_gDAsdWqpUhjSm!#XA^tz~^@1502lwi?O@F--7poZ-EEF zJ9aa67(4_{fzN`ZU(@<`HGcutp}(zpWDjFCl%Lc53Rp$?N8rc7-+>3g-S1}XA#esH zeF-F8YQ6?i{ac!U1<7aMdlb)u)UFYT5PKOUpX(si|AsFAO_%ShFvg*u1rLE;5M5>8 z0BI;*(tH)9c3lU_@24QO>klB+ch`HBKBsvJ{227BAl>&Zkn(<_!Pp#l56TDbW^6Bb0{kra1o%1dd*D;x9wc1?FM&PqCP?uI-ml8* zn!g4+&@W)IQQr4K^4kmZXFwk$pEtk@;DaAf{vD9~Zh;ivd!H)zHGdA0&*A%({vt?z ze*!TDYypEw^<4lZcoQ6g`#;FoI`~bH;*}3E7J>mtj2VVuL9WR4;bgfjWRc#kr&ap3>KcHLKteoYZI9w{*-X#Pe_z*H}97-lp-OhA$NMdQCbQ7A@}@sNMmOZiRw&qg(UEXyzm_k^RLAI0<+n401F{CU#nq_&uCs*S%x+tr0U5Gv<5zBHmgcG-l zn9mtGq1>rwNxZyYNyg5-O0#z8Q<78Oqa>ryAJ-F%eo=hT54x`B40vPL)fX^&NwJAy zD6?Yo2yf2foXe-pqUd$gG>QgU@n}BzSiX2XUp$d7&gY9KRWTG};jz%Y!sKco1d~23 zG3gKeAV7!Yy3aO5C`CZ>QsA$Nj;uZ2tvxG(5Wkl#-d%INo?m%djQl{>E`~j~TRRi= z!rHRm;+3VRYEO%?OR2SUjub6E+i1?$8pmqQdES_B&CVWf;HW%_RZv?F94{O=(hpkv zq9dJKQPAI-YeoM}|fVyOrZ?b;Zj;S!Is`e@*|-U9Ee zVi^nB{?zjM+I*Hrb*+e?_NdqKu?TuCK7ZMjX-ivtAS+7)+Sax6elQGM+#AKkuzhra ztIPJZ$ESF+!P{-#>mBgSV0-eyYu9=_c*5*gjdk zEsrKV;(Pc*Z5W>Bvn@VXU8t~8;EL@VJbjnK+f4FSZ?L|oKi|e}m@I){1Z!rhG{PN^{s0db2 z$vw6?RQJSdDVd3+0&5#p(6`TFVz$Gb+qaCMvwcHG_`eDp39s+6zQC6>mO8$qUE!gJ z`il01(x{#0Rnk;a)wRk^8j|Vi&iE^IYm?;U<62+pb*%KPu(j!laO-A#LwxNH6&dz-oVOH-#BBe t7tH+C7i$0IU;0rX+wB|puyUCUHbPwEyOmZX3pS*`#<~$3JAHgv{Ts&`d1U|q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..a9fa708de --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,477 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Matas Dailyda , 2015,2018 +# Simonas Kazlauskas , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 08:22+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Humanize" +msgstr "Sužmoginti" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-as" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milijonas" +msgstr[1] "%(value).1f milijonai" +msgstr[2] "%(value).1f milijonų" +msgstr[3] "%(value).1f milijonų" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milijonas" +msgstr[1] "%(value)s milijonai" +msgstr[2] "%(value)s milijonų" +msgstr[3] "%(value)s milijonų" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milijardas" +msgstr[1] "%(value).1f milijardai" +msgstr[2] "%(value).1f milijardų" +msgstr[3] "%(value).1f milijardų" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milijardas" +msgstr[1] "%(value)s milijardai" +msgstr[2] "%(value)s milijardų" +msgstr[3] "%(value)s milijardų" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilijonas" +msgstr[1] "%(value).1f trilijonai" +msgstr[2] "%(value).1f trilijonų" +msgstr[3] "%(value).1f trilijonų" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilijonas" +msgstr[1] "%(value)s trilijonai" +msgstr[2] "%(value)s trilijonų" +msgstr[3] "%(value)s trilijonų" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrilijonas" +msgstr[1] "%(value).1f kvadrilijonai" +msgstr[2] "%(value).1f kvadrilijonų" +msgstr[3] "%(value).1f kvadrilijonų" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrilijonas" +msgstr[1] "%(value)s kvadrilijonai" +msgstr[2] "%(value)s kvadrilijonų" +msgstr[3] "%(value)s kvadrilijonų" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintilijonas" +msgstr[1] "%(value).1f kvintilijonai" +msgstr[2] "%(value).1f kvintilijonų" +msgstr[3] "%(value).1f kvintilijonų" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintilijonas" +msgstr[1] "%(value)s kvintilijonai" +msgstr[2] "%(value)s kvintilijonų" +msgstr[3] "%(value)s kvintilijonų" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sikstilijonas" +msgstr[1] "%(value).1f sikstilijonai" +msgstr[2] "%(value).1f sikstilijonų" +msgstr[3] "%(value).1f sikstilijonų" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sikstilijonas" +msgstr[1] "%(value)s sikstilijonai" +msgstr[2] "%(value)s sikstilijonų" +msgstr[3] "%(value)s sikstilijonų" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilijonas" +msgstr[1] "%(value).1f septilijonai" +msgstr[2] "%(value).1f septilijonų" +msgstr[3] "%(value).1f septilijonų" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilijonas" +msgstr[1] "%(value)s septilijonai" +msgstr[2] "%(value)s septilijonų" +msgstr[3] "%(value)s septilijonų" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilijonas" +msgstr[1] "%(value).1f oktilijonai" +msgstr[2] "%(value).1f oktilijonų" +msgstr[3] "%(value).1f oktilijonų" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilijonas" +msgstr[1] "%(value)s oktilijonai" +msgstr[2] "%(value)s oktilijonų" +msgstr[3] "%(value)s oktilijonų" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f naintilijonas" +msgstr[1] "%(value).1f naintilijonai" +msgstr[2] "%(value).1f naintilijonų" +msgstr[3] "%(value).1f naintilijonų" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s naintilijonas" +msgstr[1] "%(value)s naintilijonai" +msgstr[2] "%(value)s naintilijonų" +msgstr[3] "%(value)s naintilijonų" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilijonas" +msgstr[1] "%(value).1f decilijonai" +msgstr[2] "%(value).1f decilijonų" +msgstr[3] "%(value).1f decilijonų" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilijonas" +msgstr[1] "%(value)s decilijonai" +msgstr[2] "%(value)s decilijonų" +msgstr[3] "%(value)s decilijonų" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugolas" +msgstr[1] "%(value).1f gugolai" +msgstr[2] "%(value).1f gugolų" +msgstr[3] "%(value).1f gugolų" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugolas" +msgstr[1] "%(value)s gugolai" +msgstr[2] "%(value)s gugolų" +msgstr[3] "%(value)s gugolų" + +msgid "one" +msgstr "vienas" + +msgid "two" +msgstr "du" + +msgid "three" +msgstr "trys" + +msgid "four" +msgstr "keturi" + +msgid "five" +msgstr "penki" + +msgid "six" +msgstr "šeši" + +msgid "seven" +msgstr "septyni" + +msgid "eight" +msgstr "aštuoni" + +msgid "nine" +msgstr "devyni" + +msgid "today" +msgstr "šiandien" + +msgid "tomorrow" +msgstr "rytoj" + +msgid "yesterday" +msgstr "vakar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "prieš %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "prieš %(count)s valandą" +msgstr[1] "prieš %(count)s valandas" +msgstr[2] "prieš %(count)s valandų" +msgstr[3] "prieš %(count)s valandų" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "prieš %(count)s minutę" +msgstr[1] "prieš %(count)s minutes" +msgstr[2] "prieš %(count)s minučių" +msgstr[3] "prieš %(count)s minučių" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "prieš %(count)s sekundę" +msgstr[1] "prieš %(count)s sekundes" +msgstr[2] "prieš %(count)s sekundžių" +msgstr[3] "prieš %(count)s sekundžių" + +msgid "now" +msgstr "dabar" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s sekundė nuo dabar" +msgstr[1] "%(count)s sekundes nuo dabar" +msgstr[2] "%(count)s skundžių nuo dabar" +msgstr[3] "%(count)s skundžių nuo dabar" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s minutė nuo dabar" +msgstr[1] "%(count)s minutės nuo dabar" +msgstr[2] "%(count)s minučių nuo dabar" +msgstr[3] "%(count)s minučių nuo dabar" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s valandą nuo dabar" +msgstr[1] "%(count)s valandos nuo dabar" +msgstr[2] "%(count)s valandų nuo dabar" +msgstr[3] "%(count)s valandų nuo dabar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s nuo dabar" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d metus" +msgstr[1] "%d metus" +msgstr[2] "%d metų" +msgstr[3] "%d metų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mėnesį" +msgstr[1] "%d mėnesius" +msgstr[2] "%d mėnesių" +msgstr[3] "%d mėnesių" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d savaitę" +msgstr[1] "%d savaites" +msgstr[2] "%d savaičių" +msgstr[3] "%d savaičių" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dieną" +msgstr[1] "%d dienas" +msgstr[2] "%d dienų" +msgstr[3] "%d dienų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d valandą" +msgstr[1] "%d valandas" +msgstr[2] "%d valandų" +msgstr[3] "%d valandų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutę" +msgstr[1] "%d minutes" +msgstr[2] "%d minučių" +msgstr[3] "%d minučių" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d metus" +msgstr[1] "%d metus" +msgstr[2] "%d metų" +msgstr[3] "%d metų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mėnesį" +msgstr[1] "%d mėnesius" +msgstr[2] "%d mėnesių" +msgstr[3] "%d mėnesių" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d savaitę" +msgstr[1] "%d savaites" +msgstr[2] "%d savaičių" +msgstr[3] "%d savaičių" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dieną" +msgstr[1] "%d dienas" +msgstr[2] "%d dienų" +msgstr[3] "%d dienų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d valandą" +msgstr[1] "%d valandas" +msgstr[2] "%d valandų" +msgstr[3] "%d valandų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutė" +msgstr[1] "%d minutes" +msgstr[2] "%d minučių" +msgstr[3] "%d minučių" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..29d2e78f83491976bdcea942d0a92e24e625edbe GIT binary patch literal 5033 zcmeH}+iw(A9LJAX1y&J7xp^JbLJLg0TPT#R3tj+iESF%x2NKP6=X5*m?3rce%(ex2 zAVy;1B{7ZhMhwKn7kI!IH3l^y+Yq08@WB_OFFt7S!9=6RC%?a$GqW>0+m=7Tlb(L& z_dUPg@BH?hGnXG%b-c~ccA?*o{_{YLVguX){WryRw=&iZd#|DZJ7K>IE(5;;DbF=f2d^u8{nF4bfg1Ela5MNi zh}7&e5T&s%6|aIc?=_I}`~eog4Va`Cd=4c2WyMcGs_Q3^;+8KD{rW-j;~?p?ieG~? z-*u3d>UYII!8>68qqsE3*jm_YK+<~@ONzsa#}y|OXB1ymd_Y&}~B z(z>q%d%!`k08W5Z?>TTg_${~*?7$%<|1BW-KM#`sS+EcM93=niAo*)|hx0xS(!7Th zkAh2JA6I-q(NHuMD~c0}RmGa3r&w2<0coFJ0%^Wi6kh}B_rC?wxq46WLpA;ph;3v$ z(Qz3xx@V)N;{sd99#+D=ApK5iv<`G;cA(#fz8;r^%2 zOhKv}w$I@(YT35shy@jsmor}Nw2I?Y96OOJBUCeavWjp-#;cv?lx4=Rop!=EOgG~> zpK6J0))Rg^)#J6S>pbFgJI^+v%oZ9;&-hhCSSL9%w5lb1$<^kT9bd?9@9Ozb4fj0u zNo;w>F&;BCkCz=`wq^{~D5LU;qdL3djFDqJW(aNE@!i&hq^WeuA&y973%%kIZdJx5 z8?)-1jUk>1L;9{^ORLKDF(22wqq9r+)oxQWjTs!j_}W{@mu88bgDDsC4i`7}S8Kgs zgd^m5Gk~lG>zU$wGIl3pLGKxEG^-~g?OiiGd1I@R@?2z1Qoc8^B5D7{)+6P;$ZDi~ z+pUEqIHM<>13Ip03B%U%9j8uXOCqxX)00iJuvIJcp>IpO^}!To>_($*)7+kR?oXRL z(&o;zIgmDYg{H^rTrkg?W^&x+oJogHwREbE>*5E=DTmE)PjZ*!!>%*I%TgaQ^<&)i z@FXv4=7b?CPVNY=Ij+m%H#7PVnR)-5~-y2hof6?=Q9rlxu%<+H~4bWho-_J)NII6qvVrkNUwmV8?F)@;KPgIakU$Dhm6(UJZ7K+})r8so0MPm~=TfJ#vt7`0?v zW>K^2xx+R+O7#7XTlI>Xs0F51+BT?#m!&SzS;&`41#RO-jV|*WN`->9N6Tw)*EW=J zu}3Sw=<6QLv6_WETKxKDwZ?2YVK!g8ciIUS~9eq zU&Y7kIT;uT$*7D66_uVWRFXkipWt=f5*KO7$Vf}pS>0kkBD#bkUero$(_>;iar8-!{)L8K-#&<8`y^h!#` z#$JaF({LLXrG{_3I*x1OV#SZoar}bE!+!3fL!b` zVRd|Awks|iXtCHYZ%@P73=^?n;m~C81R23=lG?CEEQZdZt95Ch?G5=qi%-Wdve4xW54Xhih rV}(3+>hvOi!NZQCykK`F9yuPHyMPxnK6dE&!%VAgvAQvd@7n(WCgqkd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..50569e5ef --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,363 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# NullIsNot0 , 2017-2018 +# Jannis Leidel , 2011 +# NullIsNot0 , 2021 +# peterisb , 2016 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-06 05:15+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Humanize" +msgstr "Padarīt cilvēcīgu" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljonu" +msgstr[1] "%(value)s miljons" +msgstr[2] "%(value)s miljonu" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljardu" +msgstr[1] "%(value)s miljards" +msgstr[2] "%(value)s miljardu" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljonu" +msgstr[1] "%(value)s triljons" +msgstr[2] "%(value)s triljonu" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadriljonu" +msgstr[1] "%(value)s kvadriljons" +msgstr[2] "%(value)s kvadriljonu" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljonu" +msgstr[1] "%(value)s kvintiljons" +msgstr[2] "%(value)s kvintiljonu" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiljonu" +msgstr[1] "%(value)s sekstiljons" +msgstr[2] "%(value)s sekstiljonu" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiljonu" +msgstr[1] "%(value)s septiljons" +msgstr[2] "%(value)s septiljonu" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiljonu" +msgstr[1] "%(value)s oktiljons" +msgstr[2] "%(value)s oktiljonu" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniljonu" +msgstr[1] "%(value)s noniljons" +msgstr[2] "%(value)s noniljonu" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dekaljonu" +msgstr[1] "%(value)s dekaljons" +msgstr[2] "%(value)s dekaljonu" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugolu" +msgstr[1] "%(value)s gugols" +msgstr[2] "%(value)s gugolu" + +msgid "one" +msgstr "viens" + +msgid "two" +msgstr "divi" + +msgid "three" +msgstr "trīs" + +msgid "four" +msgstr "četri" + +msgid "five" +msgstr "pieci" + +msgid "six" +msgstr "seši" + +msgid "seven" +msgstr "septiņi" + +msgid "eight" +msgstr "astoņi" + +msgid "nine" +msgstr "deviņi" + +msgid "today" +msgstr "šodien" + +msgid "tomorrow" +msgstr "rīt" + +msgid "yesterday" +msgstr "vakar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "pirms %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pirms %(count)s stundas" +msgstr[1] "pirms %(count)s stundām" +msgstr[2] "pirms %(count)s stundām" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pirms %(count)s minūtes" +msgstr[1] "pirms %(count)s minūtēm" +msgstr[2] "pirms %(count)s minūtēm" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pirms %(count)s sekundes" +msgstr[1] "pirms %(count)s sekundēm" +msgstr[2] "pirms %(count)s sekundēm" + +msgid "now" +msgstr "tagad" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "pēc %(count)s sekundes" +msgstr[1] "pēc %(count)s sekundēm" +msgstr[2] "pēc %(count)s sekundēm" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "pēc %(count)s minūtes" +msgstr[1] "pēc %(count)s minūtēm" +msgstr[2] "pēc %(count)s minūtēm" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "pēc %(count)s stundas" +msgstr[1] "pēc %(count)s stundām" +msgstr[2] "pēc %(count)s stundām" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "pēc %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d gadi" +msgstr[1] "%(num)d gads" +msgstr[2] "%(num)d gadi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mēneši" +msgstr[1] "%(num)d mēnesis" +msgstr[2] "%(num)d mēneši" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nedēļas" +msgstr[1] "%(num)d nedēļa" +msgstr[2] "%(num)d nedēļas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dienas" +msgstr[1] "%(num)d diena" +msgstr[2] "%(num)d dienas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d stundas" +msgstr[1] "%(num)d stunda" +msgstr[2] "%(num)d stundas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minūtes" +msgstr[1] "%(num)d minūte" +msgstr[2] "%(num)d minūtes" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d gadi" +msgstr[1] "%(num)d gads" +msgstr[2] "%(num)d gadi" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d mēneši" +msgstr[1] "%(num)d mēnesis" +msgstr[2] "%(num)d mēneši" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d nedēļas" +msgstr[1] "%(num)d nedēļa" +msgstr[2] "%(num)d nedēļas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dienas" +msgstr[1] "%(num)d diena" +msgstr[2] "%(num)d dienas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d stundas" +msgstr[1] "%(num)d stunda" +msgstr[2] "%(num)d stundas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minūtes" +msgstr[1] "%(num)d minūte" +msgstr[2] "%(num)d minūtes" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc6bfbda1e7ab838399b4ee155069224f7f8d478 GIT binary patch literal 4761 zcmai$Piz!b9LJwpMb|$FiioJZf~76(bazTf+pPtpf)c0_EJhC;hTYfg(A}9bGur}* zhL%LU=*5s2i3y1sW4shwLQ^OP4xTibjR_Zn2?t~1MZKyAzrUH+?fiM$PWt9E@AvP$ z`Tc(Lw!f}#y2xzsk1Nm`q5c~q%1O6`Ot&cO-gZUWPM|wHG3wB_>;fXN*D@zaZrwgD69g zbJFV=&tX8!kc!}X8h7fITsRHx)H8HZP3il30fYLj3xn3B94%c)Jwthd3+Z8<@|pU2 zvwYUTtr*+odscB zCBwSTu=uE5b&>%|Cc{aCx<@2hXjRt;voz|l5pzPY5%@F9@T!hc_RNZCYH2HqvS+l1 zLDiaiAgjnM(-Mr*VS`SQxne?C%r#Fl*JIu&{v08gXBUk#xL0h)fvq=bvopf=ghS#Z zj(t)TJndjnds{dzj>bGMo;0kIojEGTZO7Aw+>%+;_Ek%+Hf-m4=E$4F+Mpv054PH? zh9~m8JE!l`a=NDXa9z*mdOC7?E(b&HsF*M*=CWOnmh02HcXGWipWD@u!<9K~xSlrb z7?xW$JlnzgVho!_OT1iky69nVsbZMru7X|J4Qs1ZHA+Go7Dgq{hm3+K;>1LW+D1KZ zJfF=@PEK}t6wVwGr^zWBzR(iNGD5a8mTk`r9UR)f{OWpFE;DFbp0Kc`GvjzS51pMI zFB_)S&kLi5;|g!!*zf_ZciE2C8WE1R-zwNe(<Q6zm9$-2@0 z63V3SO@E;_-N-kgO!#tt!T-*m@#m1zAib$gD=iXHf*|w$V&h%VDhY!`jM|ic)&IU> zgtS`azfhZ6IYPo98DqL(8fr0B#Lwj`bf!YN+*?pK>dLe#zGA)g>KzG>x-f1VX}YL& zL>#wIG+Wdsp^Ez@8ZGLVP{sXLYCyb|LY?+cv{rQOl{?Sn>Bfq9rG}!Y~VXjYWS>wXc|gVq-Gdp?`9@#7jhN{nht&`*Q69 z@;Rl, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:05+0000\n" +"Last-Translator: dekomote \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Humanize" +msgstr "Хуманизирање" + +msgid "th" +msgstr "ти" + +msgid "st" +msgstr "ви" + +msgid "nd" +msgstr "ри" + +msgid "rd" +msgstr "ти" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f милион" +msgstr[1] "%(value).1f милиони" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милион" +msgstr[1] "%(value)s милиони" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f милијарда" +msgstr[1] "%(value).1f милијарди" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s милијарда" +msgstr[1] "%(value)s милијарди" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f трилион" +msgstr[1] "%(value).1f трилиони" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трилион" +msgstr[1] "%(value)s трилиони" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадрилион" +msgstr[1] "%(value).1f квадрилиони" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрилион" +msgstr[1] "%(value)s квадрилиони" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтилион" +msgstr[1] "%(value).1f квинтилиони" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтилион" +msgstr[1] "%(value)s квинтилиони" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстилион" +msgstr[1] "%(value).1f секстилиони" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстилион" +msgstr[1] "%(value)s секстилиони" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септилион" +msgstr[1] "%(value).1f септилиони" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септилион" +msgstr[1] "%(value)s септилиони" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октилион" +msgstr[1] "%(value).1f октилиони" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октилион" +msgstr[1] "%(value)s октилиони" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нонилион" +msgstr[1] "%(value).1f нонилиони" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нонилион" +msgstr[1] "%(value)s нонилиони" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f децилион" +msgstr[1] "%(value).1f децилиони" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s децилион" +msgstr[1] "%(value)s децилиони" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гуголи" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гуголи" + +msgid "one" +msgstr "еден" + +msgid "two" +msgstr "две" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четри" + +msgid "five" +msgstr "пет" + +msgid "six" +msgstr "шест" + +msgid "seven" +msgstr "седум" + +msgid "eight" +msgstr "осум" + +msgid "nine" +msgstr "девет" + +msgid "today" +msgstr "денес" + +msgid "tomorrow" +msgstr "утре" + +msgid "yesterday" +msgstr "вчера" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "пред %(delta)s" + +msgid "now" +msgstr "сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "пред %(count)s секундa" +msgstr[1] "пред %(count)s секунди" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "пред %(count)s минутa" +msgstr[1] "пред %(count)s минути" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "пред %(count)s час" +msgstr[1] "пред %(count)s часа" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "за %(count)s секундa од сега" +msgstr[1] "за %(count)s секунди од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "за %(count)s минута од сега" +msgstr[1] "за %(count)s минути од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "за %(count)s час од сега" +msgstr[1] "за %(count)s часа од сега" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..13cc9ae96ed53168afff780527cdce93a3eb89ef GIT binary patch literal 4655 zcmb`JTWB0r7{^aO7um2nCzbHPBWM7%xo^j z2Q4N>Bo@RdC^QsBN*@~APBbD^AN5uANhyQ+;){Yl6!by=-^|J8vM1ThCI`;>&H2uE zJC`{#H+FBGVkk|hdr^;WV(cJjZbpOBwS}?Az-Pb%paGKZl$3uZ<-bbq+{#!6;~kQN zpoacOlHY;N=-&kQgN@r_|J`6C`W8s?b5edy@+XkuZ@DFA1|&Z(NsfU{=+A(+fj@#U zVK+d8V!uiLF8K$Dl-b{sH$l?>SN1pE8uzzJZU@QlE|Bc@fVYGDKnrV@20PJzA4)p- z19${{0!qX)Ajz+T9>`OSje_qG`6KV4SKJyBAruP7c-Yb(XRD)B0zSGBt;N%bCjTqRq!g&waG zEZ;qkS4*n*&EqOr^`3cLB~$H|$5)b8?-c2(q>63w_zJ?REh0^YP_aQ3(ebjS+r}Be zgi$E^Y`_>2Y``hI%r!$shm8u)7cPl= zUFVd@`PzxR_M&h-yyaP*Kc(9RCv{Sk9M{)+yn>O}o-G$Vtwzq1n2er1xd3#&7{qTWSl+<&&=WBhgZhNNgJ8qUAcMY#-3<|HvpDaetErb1C z1xq)~mYicf1q-`S)(b-G6S|eLIzws~VGZ)@&IExGN& z;PWu}Bn+m)*|)=BIt;!}HhdwR9S?&!*oDE>aCUOOoe6`F(f#GM$z}c$8+;JXo(%)E z$nTocWo?a5qiJ4^rim242!pfB(yFa-G0NcL+Gm>B;NAKBu0#uYW$mHrx5U0n`c{qyZTvz;cxtOlG&pb`< zF$)KM!$MypL)QCb(M2S3>pGZW(e{YkajEhU{yNC%8_?T|)JG zZV(DnuU+K@PIm85$c->fc5N()n%uO`D}$o0+qBM$Vj=cA9ISkUR4x#Tvx-_6d>LIq zGtoc5<>*vTM5{8%!r&eHVWAs}TJ*=l;C$5oFz(}9jnhScB^bm(rLPQrNW$O}{qjW8 zH>pD|&@TGFsHn$AFh3UtL2NQkAF9asa+Fp4?V=WH@VBHNr-0v1KG HmgDSy=@JUJ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..3c844a85d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,396 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hrishikesh , 2020 +# Jannis Leidel , 2011 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2020-05-13 21:29+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "ഹ്യൂമനൈസ്" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ദശലക്ഷം" +msgstr[1] "%(value).1f ദശലക്ഷം" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ദശലക്ഷം" +msgstr[1] "%(value)s ദശലക്ഷം" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ശതകോടി" +msgstr[1] "%(value).1f ശതകോടി" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ശതകോടി" +msgstr[1] "%(value)s ശതകോടി" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)" +msgstr[1] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ലക്ഷം കോടി" +msgstr[1] "%(value)s ലക്ഷം കോടി" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f ക്വാഡ്രില്ല്യണ്‍" +msgstr[1] "%(value).1f ക്വാഡ്രില്ല്യണ്‍" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s ക്വാഡ്രില്ല്യണ്‍" +msgstr[1] "%(value)s ക്വാഡ്രില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f ക്വിന്റില്ല്യണ്‍" +msgstr[1] "%(value).1f ക്വിന്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s ക്വിന്റില്ല്യണ്‍" +msgstr[1] "%(value)s ക്വിന്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f സെക്സ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f സെക്സ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s സെക്സ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s സെക്സ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f സെപ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f സെപ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s സെപ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s സെപ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ഒക്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f ഒക്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ഒക്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s ഒക്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f നോനില്ല്യണ്‍" +msgstr[1] "%(value).1f നോനില്ല്യണ്‍" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s നോനില്ല്യണ്‍" +msgstr[1] "%(value)s നോനില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f ഡെസില്ല്യണ്‍" +msgstr[1] "%(value).1f ഡെസില്ല്യണ്‍" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ഡെസില്ല്യണ്‍" +msgstr[1] "%(value)s ഡെസില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f ഗൂഗോള്‍" +msgstr[1] "%(value).1f ഗൂഗോള്‍" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ഗൂഗോള്‍" +msgstr[1] "%(value)s ഗൂഗോള്‍" + +msgid "one" +msgstr "ഒന്ന്" + +msgid "two" +msgstr "രണ്ട്" + +msgid "three" +msgstr "മൂന്ന്" + +msgid "four" +msgstr "നാല്" + +msgid "five" +msgstr "അഞ്ച്" + +msgid "six" +msgstr "ആറ്" + +msgid "seven" +msgstr "ഏഴ്" + +msgid "eight" +msgstr "എട്ട്" + +msgid "nine" +msgstr "ഒന്‍പത്" + +msgid "today" +msgstr "ഇന്ന്" + +msgid "tomorrow" +msgstr "നാളെ" + +msgid "yesterday" +msgstr "ഇന്നലെ" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "ഇപ്പോള്‍" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..de62154a085e99cff66a5c5ea793fa16ae9da620 GIT binary patch literal 6020 zcmd6pTWl0n7{`x@p!J3~yrCY{YL_zY?gFJO6qN$ODB75MiP6Ndd%7LnovAakEr=#u ztPl`U6EyJ>c<>U836)kwOY!=oFEe5^z8EhtF}|n|>VrP`|7On4?(Cjf&?hH3`#axv zzVn@PzVACT`^~vC_cA=I(dMD8n8BD1-ZK+Fc)mS_u`|K%z;nT0z-z%7vlwd!7l5tc z9U$o+k@}Yg9I>Sv!3j;BCc?@DOe#+od8VAYlH<03@U4YnuT_8$;^?;O@bs$`@`#_3|E9Iv^+Skic{t_hnpQSuw zZfHLjr1@Ep?AL-9gBw7qk7qzy|2dG>-w&dc*lUs#lJ84?Ci#`*50bw~{v|mZn;}2v zNnQccx!OUL3hR<`FGz8_Me<&d_EVH{8AN#m56z!Txu_R* zaJ_>3Qw`Dmq+FoH8Aqf0)s40ajh;(FFqCF+hc6E(;9_p zL@$;_sv|SV?>CA?!!nPn%ZmYprCM9Ctb$dHxm2i13V$k{X_*R3wbmMN6}D>aLuEa0 zE3A|ChN<%YP+6^a#IVXdQN2NJtyH_JjW;NrhU}^|jX89`Uchc_tdv*++eO=I31 z)MR~z9p0ETwN8~ShbL(pGex#4ts+ehPf#|bh%6OKMS>#Lx^hW3jfVx(5j3;x3VC@4 ztg`8*oR9X0+VDYo6!zjVy$dU_oxlBygW# z6ULCNWHgiPEYlqd%&3#J;;0Z0k`Xb6V*_)CY$2FyQHi-$$+B%6$Q`xVM&Y=^CUu`}Js<{L z?Z&)zhp-)dFLONqfNmD7mfOUzWxLvXr(oo@Rpo-C^;O2Y)=j6VyOy2f zcU!hmfZ8mS^@7m)g^%nM2G;lxLhFo_z*V#EbI@;mVG-FU~=oqj{o#DnSC`t#N zC9^Ztvi`>PYpO@gbfjB)Q8vQF(i?|y1{bfj&f%hNn9KRV5K3COJ-7F-)w-*8wAP@o zwKe8|g@P#Lc=!E=8*MblOJ+-7k*>J5*0M`Zj+?`Q==5Zl^RU~~X7c$xJd;}9QuF`C zpYV=&)BXhWj(U@5N4;tK^|$cqKc3j14u7k^+u!WH>2LFnoZtZL{V~ki8n;)g>pp<= zcS@o1w|L|Jp18k8m3P=5ZdK2I{&bo_#e$acz-wnkiey3ty{=<}G2aX-^ zH*<1Eq2V!qO$QOnZHV_cQh+VS<~11#w&)$k#EH)j;wVSx5b;${)THU|0w+x^{5{?j zg%$bThLcR;6chgT_&JVmLJ@$c$=JLGrNfn#m#l6qFW9P-b>*e_4^~%g@Dr~!hyTm6 z`41Bk6XEbCLkVRRL`_wCa%0KWb)p7M_SC$tu(jqTa{>m6;)zt=E4VV#{&u_)cKc&2 z!*Tg=mr%f4{axNPf=MsLV+T-;^1oW5MZ;XYL2(yw3&xXY*VtsJj^6U#3tj?~NvkK@ zDCXCAukOFWLyZ-DJWkgZF?d&fdi8kSyc&-+>(+X%v7lUFwId8K<#F#2^Csy9iohSD ze|}&f*Z0GHkha>Z=8p7nDY&DX1ADryK@Xcaiq{lAaNHl0-@1ulYU04#hzwrM@E-O4 z-#ZMx36sow%ij`x)ENpK-#fPH(eN`h=0DNAkAOusNqxFM$Md7Gspf#;E4&T&1z!-{ o7<@WNpn^bvaRZ|;Bd>I=0yBRHqs;kFBcZ68?Z^&3<5WNFA3Ena$^ZZW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..8b2de470c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,398 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Bayarkhuu Bataa, 2013 +# Zorig, 2013 +# Zorig, 2019 +# Анхбаяр Анхаа , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-19 02:28+0000\n" +"Last-Translator: Zorig\n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Хүнчлэх" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{} дахь" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{} дахь" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{} дахь" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{} дэхь" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{} дэхь" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f сая" +msgstr[1] "%(value).1f сая" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s сая" +msgstr[1] "%(value)s сая" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f тэрбум" +msgstr[1] "%(value).1f тэрбум" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s тэрбум" +msgstr[1] "%(value)s тэрбум" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f наяд" +msgstr[1] "%(value).1f наяд" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s наяд" +msgstr[1] "%(value)s наяд" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f тунамал" +msgstr[1] "%(value).1f тунамал" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s тунамал" +msgstr[1] "%(value)s тунамал" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f их ингүүмэл " +msgstr[1] "%(value).1f их ингүүмэл " + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s их ингүүмэл " +msgstr[1] "%(value)s их ингүүмэл " + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f ялгаруулагч" +msgstr[1] "%(value).1f ялгаруулагч" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s ялгаруулагч" +msgstr[1] "%(value)s ялгаруулагч" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f их өөр дээр " +msgstr[1] "%(value).1f их өөр дээр " + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s их өөр дээр " +msgstr[1] "%(value)s их өөр дээр " + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f өөр дээр " +msgstr[1] "%(value).1f өөр дээр " + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s өөр дээр " +msgstr[1] "%(value)s өөр дээр " + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f их шалтгааны үзэгдэл" +msgstr[1] "%(value).1f их шалтгааны үзэгдэл" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s их шалтгааны үзэгдэл" +msgstr[1] "%(value)s их шалтгааны үзэгдэл" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f эрхэт" +msgstr[1] "%(value).1f эрхэт" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s эрхэт" +msgstr[1] "%(value)s эрхэт" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "нэг" + +msgid "two" +msgstr "хоёр" + +msgid "three" +msgstr "гурав" + +msgid "four" +msgstr "дөрөв" + +msgid "five" +msgstr "тав" + +msgid "six" +msgstr "зургаа" + +msgid "seven" +msgstr "долоо" + +msgid "eight" +msgstr "найм" + +msgid "nine" +msgstr "ес" + +msgid "today" +msgstr "өнөөдөр" + +msgid "tomorrow" +msgstr "маргааш" + +msgid "yesterday" +msgstr "өчигдөр" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s ѳмнѳ" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "1 цагийн өмнө" +msgstr[1] "%(count)s цагийн өмнө" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "1 минутын өмнө" +msgstr[1] "%(count)s минутын өмнө" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "1 секундын өмнө" +msgstr[1] "%(count)s секундын өмнө" + +msgid "now" +msgstr "одоо" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "1 секундын дараа" +msgstr[1] "%(count)s секундын дараа" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "1 минутын дараа" +msgstr[1] "%(count)s минутын дараа" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "1 цагийн дараа" +msgstr[1] "%(count)s цагийн дараа" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "одооноос %(delta)s " + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d жил" +msgstr[1] "%d жилүүд" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d сар" +msgstr[1] "%d сар" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d долоо хоног" +msgstr[1] "%d долоо хоног" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d өдөр" +msgstr[1] "%d өдөр" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d цаг" +msgstr[1] "%d цаг" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минут" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d жил" +msgstr[1] "%d жил" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d сар" +msgstr[1] "%d сар" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d долоо хоног" +msgstr[1] "%d долоо хоног" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d өдөр" +msgstr[1] "%d өдөр" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d цаг" +msgstr[1] "%d цаг" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минут" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2a007d316a122761bace84acbfab0a4ccc11b42 GIT binary patch literal 842 zcmYL`O>fgc5QZ08K59M=%n~tgQn^MfjkQSeOT*UWJlU{4vSvlQdOgb;dR%%yBZ*0QfNv)ORXQWap_)9c_d{t~@OX2NtE2&wbO3A3Kq{lBRCkpdoaVgOzXHNQ>`FdW@7-?BDuX4#Smf}h) QM$TNaw3eX|-=t)J0TFM#c>n+a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..3c18e10cc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,353 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alternativespeak , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 01:38+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "satu" + +msgid "two" +msgstr "dua" + +msgid "three" +msgstr "tiga" + +msgid "four" +msgstr "empat" + +msgid "five" +msgstr "lima" + +msgid "six" +msgstr "enam" + +msgid "seven" +msgstr "tujuh" + +msgid "eight" +msgstr "lapan" + +msgid "nine" +msgstr "sembilan" + +msgid "today" +msgstr "hari ini" + +msgid "tomorrow" +msgstr "esok" + +msgid "yesterday" +msgstr "semalam" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +msgid "now" +msgstr "sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d26a6d2238fd16eb83f32dc7923e4710c1415c15 GIT binary patch literal 3479 zcma)+ZD<@t7{{kJt$Mz;zErI*qit-`uy?njrrj8k#uob$EF~&}AltjS%f`Lk>&{#* zLBv&RA%ZUy+gcT^6vUvlifBWu`B1;AAmSGhVZpEUtDgk_&+c48a&tL{oBi$l=b2|_ zp6A*7b7Rj5hPEC3PIP|_V?*G@EAT-3bS-1sz*%qr`~~a<|JC}Io=o4b*#rxiKdbpG zXkol|T}B)1$M|`03pfLk|8wBI;BQ+0N9&u{XY(T2D9ph2(Zm=CdHJJE}Pg(z>5P%HL)1 zJ}`F;WA}g-Nct#9`UFUEdIRhOzt;Ri&#${Sv+DzC-F^^1HjW35#2T6}gSTQl15#Yi zfE&Si5I^=49%TQ!=3gMq{|(*%uDLE7Z_wPTIS9gp?bCb)yba^B9>1jdI*4$lcL34` zX|d5>6u-OBuh;5!knT?He)JpDx9mZCP~+$*CAJBj^0xtfGdjiM7IdoFJJ2b|bbo4e zUaBR^BQ=C_vE7U}iaXUJ<>@ALYLr8yDy?CZL>faNjSa<(YOd8NkF2+E()AmnKW|s~ zVbAxyFzBk4Maf`kR;yuH4gF;<4N}eE&!h!mV6Zf+VM!Tm&FYbcTaFCYopmoTc|X!H z>r&KB<{jlJv$auHrh~VMvMswNr9Fp|o3s@vl)Oz?nLWwdmG-y7WlQo- zYI~;0)}$KJBzXt1Ek$H$5Df`hl!R9uSFGYq3RVdl5er<^h+JQJHPO@CR~Ei<`z3d) zVTYMY6xI;PCJV|e@B+c;Jp`jNlVVZ?OnOsHDyGKqi-ce*EW6Wq*1{-)t!jpBT1X`# zk`G4VgeWO%Z`pcUL=yiH4lhr*K{d=B67?`r)~Kv{WouWXDy^~5;kkoPj#(p-a20H= z$6X~H{y@=w$ST^FJ;-g_DGm-4?P3vz)*&(Jkz?I4x zi`+o^t_mZE?{kB|ll*}25DxwbPJ`iNemcy1K_z??Yl3RStqN;QxHX6GYD6_51@9YI zs_qmD&1N&N$fH*gQ~6R@D`aD)n|5^e1XqndPh zP)~<)*dF59>u_->x9q<(iQi4)FOv9!^!Z*Af4gG(coN4+JfFm`wd}rYH+nURzf9t} zB*x2EN&FcWtZ;L>wHkXFc6ld>&n5BsB*sg28pAFhr_Mi5;tNUq_9}Kb@ApZ3B0V*Z z|9)4~qp4{Zug6+0SKAs!S+rI&!kqa`lCP2un(UGcGFdGZG~Y21G}$E$WYRqeWEKCP z6f7BbNdOsk3BNYMz9?05@X4et^l2&<((0aPNsNP_c<1nj4+51uhca&cU#53|B{hhb z$*5<@C|<;N0ZW04tx}EYQ%K{H)i=4;_ISf_@L7?8VNK=}DbXevuXJlzWsp9^2b-Qx dZw{BZ+J$Ua4B|9sCsX$r(s6*LpulBo$$wLrgq{EZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po new file mode 100644 index 000000000..a3fe48cc2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,234 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "မြောက်" + +msgid "st" +msgstr "မြောက်" + +msgid "nd" +msgstr "မြောက်" + +msgid "rd" +msgstr "မြောက်" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f မီလီယံ" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s မီလီယံ" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ဘီလီယံ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ဘီလီယံ" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f တရီလျံ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s တရီလျံ" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f ကွပ်ဒရီလျံ" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s ကွပ်ဒရီလျံ" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f ကွင့်တီလျံ" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s ကွင့်တီလျံ" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f ဆက်တီလျံ" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s ဆက်တီလျံ" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f ဆပ်တီလျံ" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s ဆပ်တီလျံ" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f အော့တီလျံ" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s အော့တီလျံ" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f နိုနီလျံ" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s နိုနီလျံ" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f ဒက်စီလျံ" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ဒက်စီလျံ" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f ဂူးဂေါ်" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ဂူးဂေါ်" + +msgid "one" +msgstr "တစ်" + +msgid "two" +msgstr "နှစ်" + +msgid "three" +msgstr "သံုး" + +msgid "four" +msgstr "လေး" + +msgid "five" +msgstr "ငါး" + +msgid "six" +msgstr "ခြောက်" + +msgid "seven" +msgstr "ခုနစ်" + +msgid "eight" +msgstr "ရှစ်" + +msgid "nine" +msgstr "ကိုး" + +msgid "today" +msgstr "ယနေ့" + +msgid "tomorrow" +msgstr "မနက်ဖြန်" + +msgid "yesterday" +msgstr "မနေ့" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s အခါက" + +msgid "now" +msgstr "ယခု" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s ယခုမှ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..469c940efa9c2a055c0b2faa7fc5151c89feb639 GIT binary patch literal 5317 zcmchZONbmr7{^Op6CD%ZZ=)$6Yj%?K?9OgtHj}K6BnDs6C9Dr53Z0$W+1{C{TDxm@ z6XWBcA}E@JMj=rnXh1+j$H zuGd#JUEiKPa7f_VfwBr^>xn|R;GO~e;QH=lAy$IlgJ*-kf@{DNmkF^BTni3@cY&lo z#QN*ZufSpGe=*lD7s5fjhxrs(M*Kc_CHMol23&TE5SN1$kn~BAbjy4Rr1n2!{svM# zt4@u$6Qq94gLouf0I8m%Aho~5@$Vd;R}w-(-wv(?>mY_I4uUilhnR;!>eo?_>iYzw ze*FYedn-?i^fBh$;A-dxKzi>8NWKsG`H!qGUlBbogVf%w;7Q;la|%2i@jc82cmd)C zj-O?|%zTUa0rLyyH_V@ze}FX3Wk@o$w*sX2Oy>C@&EG11J_usUL>ZhrL5MN%48*UX zb7z5XgX_SLK?nQ=r1`lRrZTtHO>Nd8+v z^4|+$i;7v0+HEooGhi+<4=^8PKE`~K`84w&^Eu{=%p=UBAdT-ej^6-j{BMCYfA4_Q zuMa?Mb@3613(LVxC>v2|uIRcN zWhA^4;wt71;C7TTj<08K2DkEkj7xE|BM!i8`JUDYU9^^H9ne^4-_liy5U#roxIZ6- z_BPE6U6-LyuIQq*Mfs#XiY*?_(WxMyyoz!O3gsJrGvPjy zAg$wZlx-+ciYzNb%rMUA3%R4y4;Ksc6PGZK=&7qy@LtQRPZ?M(*`mEzjtG z)#_@xz*(#|jA@uwrpf}TT~J?;CIb!HJQ(FAbWFGtQBP|kp0x& zOp&)pEl5)!`-nX$B4>eEkf21msnd3~_n;CkCQWy&;>|m4I@*?lPhXAHXiq1e)Ryis zCeK{-X4>d_zQ#z6Yh+LI*5FW5V{A;GxmwPej-RiPG_H;f$s4KKB3JT6d5u{sX1oO@ zX7IkyuI>14%X)3)%ye+C1_tZ0?(P>6f<6wamMmfQeLT?|l8a}vpU-GJ8`|imUyF-M zHOWNm=h?5^uvf&aXWk9$@kSOu??0~Car{vwuH%d;_Vgc7?8uGB(@M}6#el}Id)jTu zk%0pbWA@^(iZHO}YS2l!srWPQ%n4O7~!=8bQi zT|vXEJKH*qz?m{NS(?1V*{v2lvN}6lt7>v|q&n`5Y;wj%WVKq`FuHC8SLrsa0%yv1 zbKQR513yGe4qu}F5FLdP|e={f=Lx6uv)^l$h=Pa6X@~I-7^{$lhCAm%30iA4k6=a;b zY{zGtj3=Mz^qvBr;J#wzRJ$dj)%lGC-aF@7~U zsBjIi#*dVibSmkolf, 2011 +# Jon , 2014 +# Jon , 2018 +# Jon , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-07-30 11:42+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f millioner" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millioner" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milliard" +msgstr[1] "%(value).1f milliarder" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliarder" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billioner" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billioner" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrillion" +msgstr[1] "%(value).1f kvadrillioner" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrillion" +msgstr[1] "%(value)s kvadrillioner" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintillion" +msgstr[1] "%(value).1f kvintillioner" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintillion" +msgstr[1] "%(value)s kvintillioner" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstillion" +msgstr[1] "%(value).1f sekstillioner" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstillion" +msgstr[1] "%(value)s sekstillioner" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" +msgstr[1] "%(value).1f septillioner" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillioner" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktillion" +msgstr[1] "%(value).1f oktillioner" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktillion" +msgstr[1] "%(value)s oktillioner" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillioner" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillioner" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f desillion" +msgstr[1] "%(value).1f desillioner" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desillion" +msgstr[1] "%(value)s desillioner" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoler" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoler" + +msgid "one" +msgstr "én" + +msgid "two" +msgstr "to" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fire" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "seks" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtte" + +msgid "nine" +msgstr "ni" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgen" + +msgid "yesterday" +msgstr "i går" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "en time siden" +msgstr[1] "%(count)s timer siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "et minutt siden" +msgstr[1] "%(count)s minutter siden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "et sekund siden" +msgstr[1] "%(count)s sekunder siden" + +msgid "now" +msgstr "nå" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "et sekund fra nå" +msgstr[1] "%(count)s sekunder fra nå" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "et minutt fra nå" +msgstr[1] "%(count)s minutter fra nå" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "en time fra nå" +msgstr[1] "%(count)s timer fra nå" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s fra nå" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24deec3c3400ebfd978627a75e9313fe4f491d90 GIT binary patch literal 3590 zcmeH{?`s@I7{@0Xe_hpTZME8}6YJT;vbiJ@XfCD{(>4Z-h8lh43#WH;ciZ0Wp1X6o zM10W%e`14(q)1yx#Z4_mZ7A3_AQpUQ--vH~5wNb}i{gvE5P8w6>-sr@sW=RsQU2N0>VA2pXigksmU{hPM0Yu*59pMU7_f51Cn zx7@~988zGhZiW2@L{!&Vkn+9&_JK>_5V#qW$o~r14ZaEP121a+4UWRzn+W+KNaMe1 z?%co_mSRPa&Pjn7V$2VoM-GvR}0ShPM9#Q8u;(?O`;UOXo(V2m}wu8`}z=C-A;c_ai)lj=s)p8~XR6J*WriPS8H+q4U2Rjq<1GezXVB za8$vA6ocIF(Kg*H+7sQ+=y?box;J#@R8N*{&&r|_9WEDnyT-~nc8Obd6|QkntVjqB znZ=@MTTMNsRhreF*D50GtkSLRRjY-u>)A?4Smx`J30^X-ijsN@8M|Vs4)@#Bp*P%F ztf|@9Dq%b(xGOWZm938$dZUP16VFPv#}Ol8JSHq&uq#e|K=SEuS`g2ui59Bj5ozWN zisj64$#R&_ETJlnC@Qlgja&tN*_zDqte9jW+y)8?OOhab15H>%Qt4_o(%F_O1TyM0 zTCpnS5fTv_X(puzvLde3l!dFB?JOE^yst>nd{?om$(|xj;~hncy8W1zWb|Fxpex6v z#awfOse&UVQ#Ku%vP-t(K%%NPo0P7S4!K7i`>@O?V>oNPEFBkLVwz_U3oCCY4$89a zC}YIUn_1(TO5Qcb>@-h|zF-`b<0eUseL~4J@9FC9GrD_>?q1&2n|`WqR~MedbEvB^ z<_OCz3S~QK{-VeWhYuD+(R3w$IumwW^6t%-gjwv&*rh#~XXPs*FO4xNN@@PQEMo$1 zFDO+`r&85wwNp`0Gbbl#LMqHQLQ&67Su)j;7#SYfzr3&R&aT8DsxK`hHd#jIN=~R$ zxhPDlpCcc~m1^Lnu>;2LWgV@Rla8_9%Gg=c%BT76L#B$eOmj;nMvL^N7zb>pQ#R2w z41&Wrxn7V+69++F$YC~kBcB;mtU*4_mFonI){TGOSY+*hkuna5!h9MeHix=4$gPp4 zVUTE*+I;GRL>k|F+xJd$7F>6nEY9=Q1_Vu3YW zk$gHFTX9L&aK&<+0rcU=NEa~HFS{bW&ISYLg1UOKe1)q{j*E?*;C@^RLoeHP!v6~~ zh0B3&=@?xSeA(d%1b;|T`>Rv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 000000000..d3c9c956b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,395 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +# Sagar Chalise , 2019 +# Sandesh Rana , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-12-15 05:39+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "मानवीय बनाउनुहोस्" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s मिलियन" +msgstr[1] "%(value)s मिलियन" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s अरब" +msgstr[1] "%(value)s अरब" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s खरब" +msgstr[1] "%(value)s खरब" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s करोड़ शंख" +msgstr[1] "%(value)s करोड़ शंख" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "एक " + +msgid "two" +msgstr "दुई " + +msgid "three" +msgstr "तीन " + +msgid "four" +msgstr "चार " + +msgid "five" +msgstr "पाँच " + +msgid "six" +msgstr "छ " + +msgid "seven" +msgstr "सात " + +msgid "eight" +msgstr "आठ " + +msgid "nine" +msgstr "नौ " + +msgid "today" +msgstr "आज" + +msgid "tomorrow" +msgstr "भोली" + +msgid "yesterday" +msgstr "हिजो" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)sपहिले" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "एक घण्टा अघि" +msgstr[1] "%(count)s घण्टा अघि" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "एक मिनेट अघि" +msgstr[1] "%(count)s मिनेट अघि" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "एक सेकेन्ड अघि" +msgstr[1] "%(count)s सेकेन्ड अघि" + +msgid "now" +msgstr "अहिले" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "एक सेकेन्ड पछि" +msgstr[1] "%(count)s सेकेन्ड पछि" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "एक मिनेट पछि" +msgstr[1] "%(count)s मिनेट पछि" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "एक घण्टा पछि" +msgstr[1] "%(count)s घण्टा पछि" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s अबदेखि" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d बर्ष" +msgstr[1] "%d बर्षहरु" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d महिना" +msgstr[1] "%d महिनाहरु" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d हप्ता" +msgstr[1] "%d हप्ताहरु" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d दिन" +msgstr[1] "%d दिनहरु" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d घण्टा" +msgstr[1] "%d घण्टाहरू" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d मिनेट" +msgstr[1] "%d मिनेटहरू " + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d बर्ष" +msgstr[1] "%d बर्षहरु" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d महिना" +msgstr[1] "%d महिनाहरु" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d हप्ता" +msgstr[1] "%d हप्ताहरु" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d दिन" +msgstr[1] "%d दिनहरु" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d घण्टा" +msgstr[1] "%d घण्टाहरू" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d मिनेट" +msgstr[1] "%d मिनेटहरू " diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5a94442e2b066fccccb0fda2957330b739a55dc8 GIT binary patch literal 5262 zcmchaON|u>dFq#yF1Hk8Cb;S5m3>UtY8c=HZ!%ez4TNs{n%we zqA~HpK|P3xPdpe6(Znm!7$0~tCVDd-G>V#V^KsFG2mfF9*F7`cHOR@zR{#3@*Vpy> zs-|jxSkiS`Anin6fxLCT5H@(I3lF3puM}bt_!GDU{0&?M&hHjt4Y(TY1rLCvKgIgn z%x}N}=>IU+E)c?keTaDqEWthp-UVI&SApGE39%CF2T30TNe`K?gVg>P%-=z(XT{YC zcZ1ZgX%I!?WsvGQ15*3v+5Us=r9DDO=sUpGU=74j#S0)!#cAfNAoc4ENcDXNQonu$ zsl7$lB>Fn$LGTXfCqVk{HIV#1=JKCeU$8JKFM-tF1K<_l7;_xF7WQMzI=CG64BO8$ z-(bGa{D}D_^E>86=3gL+SY5rDlc`t}56D3g16Ji~BJ?vM|IqKhg zc+h-&2vXcHfHdAE*CqNeNcxk^7g_%lEJ44>`jW+oJql8NE=cqJ61WCD2hx20!g@D4 zLHcUu0g(Kk1*!daSpSOczq$N&ENbfaC}@F?fYjd8-~jk8Nd5X2ya$|jLlVzEkm9t5 zxsSOY#1Owxg5>uB^AnK#zXr+wdk}x(Pdv!K8zT8H2Pr(79+ zUY-N7JmQ2U7N@0nQlIH}=3ZnPA0?Xa)$yAUL*UKG8<8>PaSW)PO~@ONX$~k+EC%B@ zA?{}02kt;#$M$ySW^gONr??F-J5vMP#_zO-C{fJUBGcGtol)vf5U;ECcwdH0dzWoMt03Ncz4zvZL0lfWYz;UZF27@A2WL! z<As@X!7L{V$0<6h=gacWOnOQSME0CSkVx-8|q#D8$ z$PQv5MC54@4FSreJyFBf&T%DdOqz~D#hbV4MLH}6pTCu;$)3)9TDEk-F)Opto2sX4 z`5F^7t&x4QuX_8k8dJxt%+_+!i~M|rq;YlZkbTioTjG_KD5pLdiV0^%i3xl!v>isi z?S@W6SrZZ7Rab9K*6cZvAn4#h)sjnGeFvXp4#|sWvy-2v!^zlbvu zFEz_BgRp6q*UIt`^161nA(*NCe$(VA4s~G!sU+#v^!Ah*|&G!uI6CM{ewL_ut1bXZ|0`a-4H)u1JkbU=q<83 ziN&kJkw?dOTfHtdkX~-JUU*HnX+c^BVz#>DUZLhPKG$ zb)-+rl_RoT+S1ciOg)es(UM)@+k&a_=9aI#F%Kg-7_00?lIvYQR`LBT=Tit%APtf!KFwC! z`&|eR*VsOv#n_|@eghjy2g-G(j$jigrQ`E73T3)+TaNqWbkbQ-yr-L=q%l~rrAZ=l$~56QvNUPXhoyYkvM<${8=qd loK%;ckH=^0aTN&sgQdg_hG=7IaI{jDA;u@_4xO#A{sk^%Unl?o literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..bb4643bb6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,398 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Blue , 2011-2012 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2014 +# Sander Steffann , 2015 +# Tino de Bruijn , 2012 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-24 15:09+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Vermenselijken" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}e" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}e" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljoen" +msgstr[1] "%(value).1f miljoen" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljoen" +msgstr[1] "%(value)s miljoen" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljard" +msgstr[1] "%(value).1f miljard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f biljoen" +msgstr[1] "%(value).1f biljoen" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s biljoen" +msgstr[1] "%(value)s biljoen" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biljard" +msgstr[1] "%(value).1f biljard" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biljard" +msgstr[1] "%(value)s biljard" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f triljoen" +msgstr[1] "%(value).1f triljoen" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s triljoen" +msgstr[1] "%(value)s triljoen" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triljard" +msgstr[1] "%(value).1f triljard" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triljard" +msgstr[1] "%(value)s triljard" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f quadriljoen" +msgstr[1] "%(value).1f quadriljoen" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s quadriljoen" +msgstr[1] "%(value)s quadriljoen" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f quadriljard" +msgstr[1] "%(value).1f quadriljard" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s quadriljard" +msgstr[1] "%(value)s quadriljard" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f quintiljoen" +msgstr[1] "%(value).1f quintiljoen" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintiljoen" +msgstr[1] "%(value)s quintiljoen" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f quintiljard" +msgstr[1] "%(value).1f quintiljard" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintiljard" +msgstr[1] "%(value)s quintiljard" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "één" + +msgid "two" +msgstr "twee" + +msgid "three" +msgstr "drie" + +msgid "four" +msgstr "vier" + +msgid "five" +msgstr "vijf" + +msgid "six" +msgstr "zes" + +msgid "seven" +msgstr "zeven" + +msgid "eight" +msgstr "acht" + +msgid "nine" +msgstr "negen" + +msgid "today" +msgstr "vandaag" + +msgid "tomorrow" +msgstr "morgen" + +msgid "yesterday" +msgstr "gisteren" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s geleden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "een uur geleden" +msgstr[1] "%(count)s uur geleden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "een minuut geleden" +msgstr[1] "%(count)s minuten geleden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "een seconde geleden" +msgstr[1] "%(count)s seconden geleden" + +msgid "now" +msgstr "nu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "over een seconde" +msgstr[1] "over %(count)s seconden" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "over een minuut" +msgstr[1] "over %(count)s minuten" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "over een uur" +msgstr[1] "over %(count)s uur" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "over %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jaar" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maanden" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weken" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dagen" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d uur" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minuten" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d jaar" +msgstr[1] "%d jaar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d maand" +msgstr[1] "%d maanden" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d week" +msgstr[1] "%d weken" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dagen" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d uur" +msgstr[1] "%d uur" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuut" +msgstr[1] "%d minuten" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4053b2cfa7326a7d2b6d4cc22178193c9cc053eb GIT binary patch literal 4327 zcmd6pO^g&p6vs@h{g~Ty(%6!Xz*YniJpl6*InH+y*;~dw33=% zzgPc$RsE{E-~76w?<7OpivA$_r5hOA51zgWKWM-AF}58116%?A13n67mN2#+%zhd}bbpg9ZDx-Nor-?C+)ZWtsT2g(12=GP$2 zcNwHq{iS&YydCzxnoBc`-3NOmNdBDWnC2eMXEi4^r!`;Fd=sSS{1Bx1PHX!U&CftA zoqegt&w*G1`wl#cJ^cy11NO*mjNJw91lNN{z%2MYNO}JVr2V*{{Z};CED!UrOS1)1 zK0eU)k09N56{K~n!^6_J37X(DAkFilwr4@oU)263SR6fH9;D|R1}VQ=!PVg7;Qinc z@FCC#9|m97{#lUn`~yh(OWJ=GB>n0;L;V(z;yewK-UDw0U)FpTqn*edpjcF;3!*4H_Zo@E660d&d_%}x7HZ38;(6*Z(Qm~T~Jg*l^r8$usN$1w`t zcPxh$(W$Kq5&Y6Ogxb9!*f2=vjT&CTpwW9sZ7@V|?pEq+93OTo`X=aak`o zug@E4=>pEFUdkR$m0oD<+SROE!hMc2%c#4eskq+UvTO>K_0PT+dc!@BHC7`al}X%k6FT)kWFuXK=SEuS`gpS6)jZ7BiwZ+6sx!`&MLT{ z2}?CStESvKH!DqC^S=H8(X3}}!?vbz{NihWF)hs!i-Rc_Q-{fo^*Yy!-XVpW=-fco zqU&jMUXA5sEUKR7R%i8OB-IVeSJ#)7gz_3WNocPlBT4{cl-plBr*#yebq4wn~XvceJCj_!W4EaqfxJ8Zcd7aljca$+>$g$ljhdY z^m&U5=DSl&O?aF$CFxWvS(l!N2U2axrn#@UNA3fjoaAL??zYXt-1G4zFB$fvB^;SK z$Q#mA=3d`%ZS#qy z%yG{We$7(SD;bCI0(#2WU-Ok^V^}y%%i-oYx9TNhpY+!6ie8%z+wxLCl@ftNU;?0@EKW zZZpEmu>oPM9Wx5qZ5h0hQ8D#h+oDPt*%fbY2IUl(%IZkRixOL zP^L;~=tyYNHB@^Ns$MlT_9c|Enl4wdFQKfqdezo0?>u#{I$CYT-h_IAQW_QAdD^O< zUbByHsP-n*3;ySUDz38JRVpmB%7`{Tu6Mz=PZ`kx=+;KQu6ou>jkPsVa8r>J{vfXQ z^oToeguB9^qL>Z}ujOfXtm+Xk)I|exGfJW4@;Yj-$8n^iy6SXa2bm2=X!3X{h!tC5 z3KlfyW`spAO&F&hn7mWpTD;l`Oh#vDZl?FOZT+8DDO?mMHh0Pu?D&b?b$5TV$*}1@ XQ`ip||8^YwqAoc21Fs~m9ZJW4hem*= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..dcbc237b4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,330 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +# velmont , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-10-26 12:33+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millionar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliardar" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billionar" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrillion" +msgstr[1] "%(value)s kvadrillionar" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintillion" +msgstr[1] "%(value)s kvintillionar" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstillion" +msgstr[1] "%(value)s sekstillionar" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillionar" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktillion" +msgstr[1] "%(value)s oktillionar" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillionar" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desillion" +msgstr[1] "%(value)s desillionar" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googolar" + +msgid "one" +msgstr "éin" + +msgid "two" +msgstr "to" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fire" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "seks" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtte" + +msgid "nine" +msgstr "ni" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgon" + +msgid "yesterday" +msgstr "i går" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s sidan" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "ein time sidan" +msgstr[1] "%(count)s timar sidan" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "eitt minutt sidan" +msgstr[1] "%(count)s minutt frå no" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "eitt sekund sidan" +msgstr[1] "%(count)s sekund sidan" + +msgid "now" +msgstr "no" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "eitt sekund frå no" +msgstr[1] "%(count)s sekund frå no" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "eitt minutt frå no" +msgstr[1] "%(count)s minutt frå no" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "ein time frå no" +msgstr[1] "%(count)s timar frå no" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s frå no" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d månad" +msgstr[1] "%(num)d månader" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d veke" +msgstr[1] "%(num)d veker" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dagar" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timar" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutt" +msgstr[1] "%(num)d minutt" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d år" +msgstr[1] "%(num)d år" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d månad" +msgstr[1] "%(num)d månader" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d veke" +msgstr[1] "%(num)d veker" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dag" +msgstr[1] "%(num)d dagar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d time" +msgstr[1] "%(num)d timar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutt" +msgstr[1] "%(num)d minutt" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c156f1a7e47a54138675d189243ac35223018867 GIT binary patch literal 3902 zcmb7_OKclO7{>?NQ0nq(c@$b66G~_v+SpqNX&k~Uv?8=oqbhJkTYKzmv3Js)b<*7O zpn+0}11POHAdo5{dO)NkRYIGj5*!O?SD{xVZd`iefCNI~|Jjp7iD#X5obhkw|2<}Q z=JV$FU0bIZS~L2S=!Lr&>jW3>#uwT*TNv99UIJUd2y6iV)B3)x75#|jFqnk>qUJJa zVZNoVLK|$t{5^0VcowAm--7kvO|Ac}^}Y90?A;)(|Gwr0kn;Sbc?)d7eD^lS5X!nh zEX}$#-vXb&ycc{L%!BlZliGe3#3Qj!G(Xk$^C0E>TBx{TX}#^9;l;@B&EZa}%_|Es2WWrm4Ul=$AGB1z*Sf&<=F)L$Cw<1*G_G z_f_T{U=!vFr2JoK{f1`U{gwDvHP3*wpBo_M-~Iq&ZQv0QN6W@QEX_Uwk%D~&J_dfJ zIS0}?{i^N1ffV-#NcZrkw%^kFUm)fCN9%PDR^oSnbbdQE_kfgVA4vYqT5kh!oU9Rj zrD5xf*9%C!kFJXX10=qy*-Gc;&u9C8XJ z(bQ_^_zAaAaHY4YmK7O;r&-NQnU{riDGgH5kk6!f(ldCPRhbD4zGn4Q$;tW#?|9wy zOxaJB%(@bTCihtRwAtGz2d0fziK^;$O-l70DsIv?T%qDs!p7TEyjrQgH^og_^_?kh z(oDCdc$`{&Q{-z>4cDZ2j97I=TCm4+-=x3P{L&9UqJvi(Xfa7DWu6OzmTL;(tXsw*^twUZ$W?e6z<_Ax>!Rj{CT&hH0 zfiBuQEd8QNb8oObRb2-h9CzR} zA1>C~O(j!pr)Vs^5?-&7<@Ow|Mq``h*u-VL#+gKMM#WbvbbY1OGQ`&>qG}qeix3e; z(Nuo$jgjMv4ly;2@dby-n#Rq_4Dq+^5?^AgS!%h|EHTAz#~fc=I=-eue0fz>UN}va z&Y};>uaVhsjzyEvx$rtZ)6pp2Su6iWQO?uhTsXTtwNA#bZ816*jV@1xKQId}Gn5OV zI&sCy!ue=Io8j|)ILnadOf-hDIjvh5FOWPMjW16zxLu|_F&x(t4B;%6nTRIHG*>Ai F_CFHWc^m)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..186ac8934 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "-ӕм" + +msgid "st" +msgstr "-аг" + +msgid "nd" +msgstr "-аг" + +msgid "rd" +msgstr "-аг" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f милуан" +msgstr[1] "%(value).1f милуан" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милуан" +msgstr[1] "%(value)s милуан" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f биллон" +msgstr[1] "%(value).1f биллион" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s биллион" +msgstr[1] "%(value)s биллион" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" +msgstr[1] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" +msgstr[1] "%(value)s триллион" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f къуадриллион" +msgstr[1] "%(value).1f къуадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s къуадриллион" +msgstr[1] "%(value)s къуадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f къуинтиллион" +msgstr[1] "%(value).1f къуинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s къуинтиллион" +msgstr[1] "%(value)s къуинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" +msgstr[1] "%(value).1f секстиллион" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" +msgstr[1] "%(value)s секстиллион" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" +msgstr[1] "%(value).1f септиллион" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" +msgstr[1] "%(value)s септиллион" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" +msgstr[1] "%(value).1f октиллион" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" +msgstr[1] "%(value)s октиллион" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" +msgstr[1] "%(value).1f нониллион" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" +msgstr[1] "%(value)s нониллион" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" +msgstr[1] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" +msgstr[1] "%(value)s дециллион" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гугол" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугол" + +msgid "one" +msgstr "иу" + +msgid "two" +msgstr "дыууӕ" + +msgid "three" +msgstr "ӕртӕ" + +msgid "four" +msgstr "цыппар" + +msgid "five" +msgstr "фондз" + +msgid "six" +msgstr "ӕхсӕз" + +msgid "seven" +msgstr "авд" + +msgid "eight" +msgstr "аст" + +msgid "nine" +msgstr "фараст" + +msgid "today" +msgstr "абон" + +msgid "tomorrow" +msgstr "сом" + +msgid "yesterday" +msgstr "знон" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s раздӕр" + +msgid "now" +msgstr "ныр" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s енырӕй" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..84c657162485315c55e064536eeb7e51e8a233e1 GIT binary patch literal 1569 zcmb7?O^g&p6vvAX6!-NdnYjq)$hH3y?U>z zX6~$6K1VRt!rp*ghrJ0qumlsvU2p?<&-3-AgcJ~e0ImZ+2A=`H2A6|#o<~7^WZuUo zz-5R}d!7ODkqemI{spgJ_WIABSN-}gp1*-BkbeVo_5J{#2XBGLamGKvGUCs07{^~d zm!ioC;w_-d-|zW}=U3pf(7*AV_xdT%i(dc9$Jc!PyN_>r-UeSpoxgm1-^YK0u6}@N z6}TF7Pwcc;Vb8(bx!mvIhRbpH!*$3?*b6XM*S+y;FgIR-t%e1#HL#apgT~7c(Z2U? zWc|=IPurqUjOuheNz+8hr)tdsd4n{g2P8fsX7u5`eMKaVNki(%v>b5m)JT+>lxR%AwKCs(wZ5)+2)tg(GUXSi}q zYg1e{RIo?1ls0TEYa})HVY`vBs)}h)*{5onWfw)9n+7vlu1T+iKHe{`W{Y$ za7)??i;1kO_pwJd+PooHRq$p^D_l7rX6lJu=IjS8c| zfBt|rKWp==HeayagEs%v=K23yKL6z1Pg$O~`Nb#ne(Z8aZT{HO0~g)hx|eKzoY?$( z+eO!7@Q&L23XTBp7(5`i-7kP2ZTFDPzk_$Aw`;DSak(d)gz&BH9sw45H4el3;emJ3 hy^3p+Ltbp`+MVlV&n@mdWxJn4Lxf}D`M*S4@(;XU>|6i< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..d37c9ae3a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "ਵਾਂ" + +msgid "st" +msgstr "ਲਾਂ" + +msgid "nd" +msgstr "ਜਾ" + +msgid "rd" +msgstr "ਜਾ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ਮਿਲੀਅਨ" +msgstr[1] "%(value).1f ਮਿਲੀਅਨ" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ਮਿਲੀਅਨ" +msgstr[1] "%(value)s ਮਿਲੀਅਨ" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ਬਿਲੀਅਨ" +msgstr[1] "%(value).1f ਬਿਲੀਅਨ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ਟਰਲੀਅਨ" +msgstr[1] "%(value).1f ਟਰਲੀਅਨ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ਇੱਕ" + +msgid "two" +msgstr "ਦੋ" + +msgid "three" +msgstr "ਤਿੰਨ" + +msgid "four" +msgstr "ਚਾਰ" + +msgid "five" +msgstr "ਪੰਜ" + +msgid "six" +msgstr "ਛੇ" + +msgid "seven" +msgstr "ਸੱਤ" + +msgid "eight" +msgstr "ਅੱਠ" + +msgid "nine" +msgstr "ਨੌ" + +msgid "today" +msgstr "ਅੱਜ" + +msgid "tomorrow" +msgstr "ਭਲਕੇ" + +msgid "yesterday" +msgstr "ਕੱਲ੍ਹ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "ਹੁਣ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e8495fd60abf119006b4e8dc137e2633c48ab68 GIT binary patch literal 5596 zcmd^>OKclO7{>=F6wJH4-&-IhrZ};k^bxmip|s`ILPQHlAb}Qp;%s8ixVz&xc8i37 z7F1CVr91)%MI3rSh=&kx;UR@o1tbI#T)4oc2T(bHK!C&n{@?EG%U-8Fabc9nZ@>S1 z^Ub$2->&!jC5xV8Xd~#CqaQhevAe)GPQpL59~UupCioM$1pE`c227pI*md9lxD>n> zBz;=zuV~JL%c1|QdGRTXrD1Q>6ks3h7r|4(k3oua7|ei2wSCEA&n|)n^hxk~@M#dC z*#{s}V;^bGfwb;nkmCFX=D?*`WDwj2lK!~nJ0Rut14#2uJI(W30g@jFNq<)J6Oh(B z3er~nqWL>`7VN(?7pEAz2=;{_=>wWY%`KV_XijLhG@sIZ0i^pp2-13QX!~u=_d%r2 zKGfrfK%~Gv2mi*Iego3_U!B1i{@C~UcPDrhd=M<0$=L1SjOG#We%OPUMB{tG`@o;T zQShd-apvHDa2x5`E}p~K>97xgg(^ z&3)hy>;vF>@H21?c(QyUso@yi z{4RDa#;yX>=(MM+(P^*fdB<_GJUX>&J-Gkr9YPK1x@`siC%P76SAz7sU7_tkkoJ@H^_O{7nQ6x` zD>7n@*|KH`*@QG@RvR1+4_no$CB=eDnU}h}lC+AH6Jn;Qak>>DMVD8SCQGWz zFG<_cFw1tAXD`(f-BEWml2nJ+yIp&T(@CBQqUugGkZx_%OkuS-GmV-h8j9<~Ey;#Z zX=iTMQ@t|}d?H8Qi0LaW;neOqi-+n^k4icxJ4DYrd$jUo>jzvQai$D8Jy^S;&`G37p*} z7xMNtH}Kbcz2FQf)Oa|7tOfIFay}Wjld+(8i<@EgWW>GerlXE;S7M&W*pry=aqLLk z|5*DG^FGFI#C((X!V;X(n@)n#E?dH^8relVAHk9MW)7yKLNj-Rk;|hG#oh8SMLBSz zQ9Cq;40>t$sOs5+_3B_c zwe_~Go5CB)4P;X{qk6bNMy)zhR(x8))3n4Iqco1<=c;(m_RX2qp&zX^#_h}|QIa_R zO2JtDu%&`53r4+~8m-ccB(quCHK$;Rx@$Vc;WZefkz&6n7IVgWBWo0le$ki9t}Et^ zWy=h@Tw5GY)3vK-*XHuZu3hdxc3lo5>x~>HiKUqDJFP2b!^ycc`Rkx7LVYCEu^OW4 z<*=R?Hjl7F=`|_5EBs%1#cK`LHjO~RnEwNhA6Uyo!FDP1rtEO~^xf#Efu0!`C!6>! zY;}f=sL`+yxo4F4K-U+8C-6wFo{}^zu2K524;xR2=I1F%)8d+cAF*(u7!4V!y+U;A z_&Q10PaK)2#)AjWJ)AC*K>WGQ;hkL!wZjs?|9G^j5nPHn|i`f%zD8EDa< zf!Jd{$wpY&ZVvJK_oZl5UyBD#R>LEXR3+`H6w#2OTRdo7*I#vJX~JagFY5fv+^qXN zM?Q$$ffn9+c+5NHg;cx}bWFS*=4OMbp4v(h6E%lVHbi-TrfV&4pgS{9@8Ryr$juMi zv8E21s3waQS#Db*Y3IC=R`-^A1IN&jqaQlH@Z78poGkZHrDO3Lt6TFk^G~u;8$aPx zFZye>ZSg}-gr=~1U7Nu`keeUGPbzMA_=juywc)#aWfr)*X55O-<&HJKyA&Ds1bS6_ zw^Xx8nJER6JYjb!yaUz3!A0*|wQvu@3WI1N2&(Ncge}9bW_+oH12BSFaH1#Y|FhM2 z!oA}N_v1g^YdY4ZSLi5nv&|-W8DF(K9~n6Aj)$d;$Hi&$LoefbQFgn<5Z1BG2{zGC Pwq)g|$(p6Mw4wY9FCbCL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ab0ab9256 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,394 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Adam Stachowicz , 2015 +# angularcircle, 2011 +# angularcircle, 2014 +# Jannis Leidel , 2011 +# m_aciek , 2018,2021 +# Piotr Meuś , 2014 +# Roman Barczyński, 2012 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-23 19:40+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Humanizacja" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s miliony" +msgstr[2] "%(value)s milionów" +msgstr[3] "%(value)s milionów" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliardy" +msgstr[2] "%(value)s miliardów" +msgstr[3] "%(value)s miliardów" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s kwintylion" +msgstr[1] "%(value)s biliony" +msgstr[2] "%(value)s kwintylionów" +msgstr[3] "%(value)s kwintylionów" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kwadrylion" +msgstr[1] "%(value)s biliardy" +msgstr[2] "%(value)s kwadrylionów" +msgstr[3] "%(value)s kwadrylionów" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trylion" +msgstr[1] "%(value)s tryliony" +msgstr[2] "%(value)s trylionyów" +msgstr[3] "%(value)s trylionyów" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] " %(value)s tryliard" +msgstr[1] "%(value)s tryliardy" +msgstr[2] "%(value)s tryliardów" +msgstr[3] "%(value)s tryliardów" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septylion" +msgstr[1] "%(value)s septyliony" +msgstr[2] "%(value)s septylionów" +msgstr[3] "%(value)s septylionów" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadryliard" +msgstr[1] "%(value)s kwardyliardy" +msgstr[2] "%(value)s kwadryliardów" +msgstr[3] "%(value)s kwadryliardów" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintylion" +msgstr[1] "%(value)s kwintyliony" +msgstr[2] "%(value)s kwintylionów" +msgstr[3] "%(value)s kwintylionów" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwintyliard" +msgstr[1] "%(value)s kwintyliardy" +msgstr[2] "%(value)s kwintyliardów" +msgstr[3] "%(value)s kwintyliardów" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googole" +msgstr[2] "%(value)s googolów" +msgstr[3] "%(value)s googolów" + +msgid "one" +msgstr "jeden" + +msgid "two" +msgstr "dwa" + +msgid "three" +msgstr "trzy" + +msgid "four" +msgstr "cztery" + +msgid "five" +msgstr "pięć" + +msgid "six" +msgstr "sześć" + +msgid "seven" +msgstr "siedem" + +msgid "eight" +msgstr "osiem" + +msgid "nine" +msgstr "dziewięć" + +msgid "today" +msgstr "dzisiaj" + +msgid "tomorrow" +msgstr "jutro" + +msgid "yesterday" +msgstr "wczoraj" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s temu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "godzinę temu" +msgstr[1] "%(count)s godziny temu" +msgstr[2] "%(count)s godzin temu" +msgstr[3] "%(count)s godzin temu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "minutę temu" +msgstr[1] "%(count)s minuty temu" +msgstr[2] "%(count)s minut temu" +msgstr[3] "%(count)s minut temu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "sekundę temu" +msgstr[1] "%(count)s sekundy temu" +msgstr[2] "%(count)s sekund temu" +msgstr[3] "%(count)s sekund temu" + +msgid "now" +msgstr "teraz" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za sekundę" +msgstr[1] "za %(count)s sekundy" +msgstr[2] "za %(count)s sekund" +msgstr[3] "za %(count)s sekund" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za minutę" +msgstr[1] "za %(count)s minuty" +msgstr[2] "za %(count)s minut" +msgstr[3] "za %(count)s minut" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za godzinę" +msgstr[1] "za %(count)s godziny" +msgstr[2] "za %(count)s godzin" +msgstr[3] "za %(count)s godzin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "za %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rok" +msgstr[1] "%(num)d lata" +msgstr[2] "%(num)d lat" +msgstr[3] "%(num)d roku" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d miesiąc" +msgstr[1] "%(num)d miesiące" +msgstr[2] "%(num)d miesięcy" +msgstr[3] "%(num)d miesiąca" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydzień" +msgstr[1] "%(num)d tygodnie" +msgstr[2] "%(num)d tygodni" +msgstr[3] "%(num)d tygodnia" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dzień" +msgstr[1] "%(num)d dni" +msgstr[2] "%(num)d dni" +msgstr[3] "%(num)d dnia" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d godzinę" +msgstr[1] "%(num)d godziny" +msgstr[2] "%(num)d godzin" +msgstr[3] "%(num)d godziny" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutę" +msgstr[1] "%(num)d minuty" +msgstr[2] "%(num)d minut" +msgstr[3] "%(num)d minuty" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d rok" +msgstr[1] "%(num)d lata" +msgstr[2] "%(num)d lat" +msgstr[3] "%(num)d roku" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d miesiąc" +msgstr[1] "%(num)d miesiące" +msgstr[2] "%(num)d miesięcy" +msgstr[3] "%(num)dmiesiąca" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d tydzień" +msgstr[1] "%(num)d tygodnie" +msgstr[2] "%(num)d tygodni" +msgstr[3] "%(num)d tygodnia" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d dzień" +msgstr[1] "%(num)d dni" +msgstr[2] "%(num)d dni" +msgstr[3] "%(num)d dnia" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d godzinę" +msgstr[1] "%(num)d godziny" +msgstr[2] "%(num)d godzin" +msgstr[3] "%(num)d godziny" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d minutę" +msgstr[1] "%(num)d minuty" +msgstr[2] "%(num)d minut" +msgstr[3] "%(num)d minuty" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d1c67ddbedf651a8ca23beb4bb802af0d04b947f GIT binary patch literal 5408 zcmbuBON<;x8OIA}rFb*RwO- zHReERYJUCw`|Gc&`m5@yU)?))S)d$2-GO>=gAfWlJ%&G&TXzbv1^f+oFZgG0C%9pw z5R>38a2z}ZlKvIezsLL;I1T;Z%-weh;lV!5{5n{M{TlcP_*-x%xN(yZ4}nu4>5Cxg zmiatL?Z3x2_c~`fV;pZh@pyag7hjb zGp~ZwuNOdy_YO$?`aMYPZTVQL&oI9TJ_!9HNY8x-B)_-#{_j}7Yjb+P3{rc?z&pT2 z<`VdE*k59{!0oVC*!~9d8uLfYH<%wVZ!-VL{3l4`+=wJodz(SB?`CcT>HY2C`{N*9 znJ9zb`iKxS;N7s_N9R5R-UKJWe}KEe2R@OG_ZUd}S&;Or%%6Z2*nek^BiIz|Q_Qb{ zyI{WzJ_`OCq&Q>ur0>fENk0LSZkg9WYUe%X-$05ZF^P%Cz{kK9kj8Tjtb*SMC&8QG z40z{#>3lf=QomXtwQ~ieJiQIl`+66|6c-gEI4b3z)+m;EvW94$(cGCwokOMaaEkta zy?>QnV0k6;lGYZj&k`!l6N&1f&Y~VhrE-6YWd2YNK1KHUL{oRHDo0Ya%z(8Vnyw7Y zDx?+FiFJ9Zx-6gbJ00Hy|5Iz~hQrgXwv1_+&QM5))OEyjX@LnGo^I7Nti#u>o{d#A zba;=}{lFFdZ0yz}-E+B*l+U@now9XxydXw}?7Ea<4kPK(aw&{tLC9w>l0~JMw+M4G zpW#RrbLQ4u*^1;SwU{aLb*YXtMRJ5#ND+BDL`Q=9(vxvl1^xvs6kb{oTg{8NVdB7+ zqZ{8%)pSkweFm0v!Lff&p*IZ^H1iQtHH*kT{int!`Vlk7{yi1Qwu!@hK+-rIJM^Cz zh?aWw?`Xf(wqn^|(PA0Ti$K{pR2}PgwYMDOT91u4WmBCODWVY`6qa0)@FRTEcSv6R zHb?oHz_t@Nx){~ss@7j7C*mld^I9dnA`biXRAg^Avh4ooab+I2A64J$He|uV*qj|U52R+KS9BmE|D3SxP-|fgO)+b_CJZqkyK2OF9a$Zcycn7@x?#Pin%*fL zM%XXwvUx@YEmJzFdnUBr@u=lDy~A-U@|H|pmKIMec?+Rd7QWsQWp!QFD%AsCrRr7p z;j+G`Hd(1wDsc2p>J^`2uKUe;)tXnU$m-sDZU1BirSuG@i?r7tzPK73)aLiMF-9`tgtrGc>c0J zM-NS>Bg)X>2-7_~T`nDe>i84uW3NtCN(-1zIzXS!_b@n%@7;8-qx@h_Hrkl$+Ri__ zbkv(&_oKF!b?7}2Gz?}+t1f4s^KHMUb=k9}#SX1~@2Cm8QC$YT#Ej-^b27c0p9thb z^Ril=D-9fMlnvLeM}vawsnGf%_A&ZKg=*+5f+LT=_9C5(hK@o0+AErZtc%GmSa4-E z@0{BW>1^eYupzedZ6{hjT(Tz?+GaKHoNSf_XIAshyf+ryq0??ud=0!oIvz+i&f){< zHd*k`Li`jXn;9AUJBn$b=BzjSN48o?_ zUb`;iZn{w$$xEEX{!xPO;lz=y|E9uBm1_Mdktu~ovgna+#X)mKc)sb1&$k>6WDju* z3g?kfWj!43KHYHyPakoFPW*-Otq~0$A5oFy7~e4*k9>UM65tC)XCV6IrA&n6h>&=u zSE;!6!<5(-l8Z>=44OQcUL~RmlIMWLbhMP{Y3I+Zgw%y!ocNVV}ZeuF#USR oU2*Z!)Q#8wuYYVwT14891f~l{-o~CT6h@3iE1Cv6?Py)`UvId(*#H0l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..8a9d8b433 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,398 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Henrique Azevedo , 2018 +# Jannis Leidel , 2011 +# jorgecarleitao , 2014 +# Nuno Mariz , 2012-2013,2018 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-12-20 15:27+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}.º" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}.º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milhão" +msgstr[1] "%(value).1f milhões" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milhão" +msgstr[1] "%(value)s milhões" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bilião" +msgstr[1] "%(value).1f biliões" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s bilião" +msgstr[1] "%(value)s biliões" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilião" +msgstr[1] "%(value).1f triliões" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilião" +msgstr[1] "%(value)s triliões" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrilião" +msgstr[1] "%(value).1f quatriliões" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilião" +msgstr[1] "%(value)s quatriliões" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintilião" +msgstr[1] "%(value).1f quintiliões" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintilião" +msgstr[1] "%(value)s quintiliões" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilião" +msgstr[1] "%(value).1f sextiliões" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilião" +msgstr[1] "%(value)s sextiliões" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilião" +msgstr[1] "%(value).1f septiliões" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilião" +msgstr[1] "%(value)s septiliões" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilião" +msgstr[1] "%(value).1f octiliões" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilião" +msgstr[1] "%(value)s octiliões" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilião" +msgstr[1] "%(value).1f noniliões" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilião" +msgstr[1] "%(value)s noniliões" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilião" +msgstr[1] "%(value).1f deciliões" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilião" +msgstr[1] "%(value)s deciliões" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "um" + +msgid "two" +msgstr "dois" + +msgid "three" +msgstr "três" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "sete" + +msgid "eight" +msgstr "oito" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "hoje" + +msgid "tomorrow" +msgstr "amanhã" + +msgid "yesterday" +msgstr "ontem" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s atrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "há uma hora atrás" +msgstr[1] "há %(count)s horas atrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "há um minuto atrás" +msgstr[1] "há %(count)s minutos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "há um segundo atrás" +msgstr[1] "há %(count)s segundos atrás" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "daqui a um segundo" +msgstr[1] "daqui a %(count)s segundos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "daqui a um minuto" +msgstr[1] "daqui a %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "daqui a uma hora" +msgstr[1] "daqui a %(count)s horas" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de agora" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ano" +msgstr[1] "%d anos" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d meses" +msgstr[1] "%d meses" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semanas" +msgstr[1] "%d semanas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dia" +msgstr[1] "%d dias" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horas" +msgstr[1] "%d horas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ano" +msgstr[1] "%d anos" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mês" +msgstr[1] "%d meses" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dia" +msgstr[1] "%d dias" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b62236e0a5f2656e8b890dbba69ec10aac1e6e9d GIT binary patch literal 5427 zcmb`JO^h7H701iqtj%JG`7k8Gfr5Bp$9C_|?D}Ip{=l(~6$BP5YXgadK;`M$nTDCJ zp}Tt5Yr_d7lpGQ%5(x1j5+z6|3X(5K7{mbPGV*=#}>Sok^7YL!iyVv4^@~R(7Nq`H+5VF4P2)mH_z#0yK_A3W#UDZX z6pt~V1nIq=1u5QZAidXrK?kSLTuk!Pc*}rZ>_Phd8f46}b zg7eG;@KV^nVK%|5VK1@$2j(-(e=uKRzRf(x{FM0(NaGwslBvH9AlVz4SAq2XHuLid z5T8s`z~|QpF$?|}_CN7**MR>8C&Be_ZU<{1jrSgq{Ex8z1?C4}75;S_GtPliumk23 z;8xggfm^_@K#FtqW!d*S2$KHn;8~FJ^fgG|>st_0T&%eg-w<36Qoc5U2qm_#y_@Z$AU>V= zElBz%Kezn+VYVL!5n4P4lI|=>{k{oOzwdxpvf@4Vzt23!{E+!E^Hb($%&(Z=Fu!B2 z*_8D&#=Mxh5u|=Mv3(7QB`YM`llQ7O3 zq0)DoMy2?>QFo$Zx}=42QRREeKNZT;VbobNP!6V7A@+cjv%&In7)J&i2l$?HPKD;e zc2vsg^{7;6UQ(fTzXSCuR9f4V4=UH9QqHN+oX1p6*C>{Fx`t?;(Hz~6x)+to4H@!l zJ-^FtXpYoSX>HN^#BWAmN(+hVq0XTmLZ$Mv3<4=kbMzCkCnkN}wyF|K)ieXvVq`ip zG|O-;sdl0(Q?*5TB51b*6aG)1uNw}f+uJmzY1%^}9j=Zep34`S(4lmDO~X30Ztnw$ z@*{_Ov_A-4(H}_M{#bWi@{#V7Zne{GT`yj8#-;4KJmnn5(&a0pFqS1pF?+Erd&+r> zF(-=|j%7J#Zl5b#u^i<;7%XYAi1s2>Hi=Z*1|97!Cb-vYCw%Fv6_Ftxp`frNNyCrOWZ#ff z{541EOlVuFjBZBtxUBX4BqEN|tZ0?K6>(V8Rk1za$a>F5kE^FR|EO}+dB)V!j2=-> zQ5a7UYC$`S0Zrrwp=!(O+S3o=>-EeU%-HtL+ICr+L7g3z&A<%(Tt-i$zPV#qymQ#x zHEix4Hs^-TJ((HnB^`=5I4Nu^(pp$UQ_PxEEZqrWrr3yC$;UvA7xd-l3!!dkdy6$LH@@@D4{>S!lf@%IdnDsn+&*)tXn^ zh1>d$nQhftwF;qkTrUL_v#*=;YBg_WM%JqJopal&DC4(dx_Aqb3gfo2CaO!-Y2a0L zpya+zV%vIUDpsK%nS;%a3ffZ*(>Z`fVKY%p?Ja24smpo1Y0^w|tmWjPNSzAW6*<|m zwp*W`US3|FvJ^g8)F-L+bT+^q+8k=SYwtaDe7Z7z?ABwq^uI=JsycocGfang%atyM zYw-u1?zUAB?v;%eX1})kf4y+jo9pYSyG0#&w}cIYxznu6xf6lS-?}c-zQ*U<^h5BD zny3@kW!O#4c>l~^nceQ64CMh?tLz=`A9j?DR{s+BZK-5eMK*}Awb5@YQbWfRoPt`b zf2G6H(8;K^`l6;FeP_BcmZa=0iVGVg9k(1V?2)B_sjnC=-6l&?_7=tI{#g>Uw1e?IVuNhwEa`jhvYfV0hdgr^<+O{I#F=wYnx1}!bnF=xm2=DoqT%V_ zH~WQ#$@Xm{^X1KF6!zork*)gyrDNTf8kIC?AM0ik`i`#n!C+sxwiGBo z_w?eSSxJPWAC4`N>b-rx5qSqX>d8tGN-atX6Ide}0sgcC^T0;<*ZF>czaU-lkMpT3 z2AS!hf<)O(>RSDK3hW=mSmVS>O|lzusgPPofUF-Pe7~c9{4{)MaA3@SgKJ@%7Yf6|tQEe2pSHA)_#QD, 2014 +# bruno.devpod , 2014 +# Eduardo Cereto Carvalho, 2012 +# semente, 2012-2013 +# Jannis Leidel , 2011 +# Sandro , 2011 +# Xico Petry , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-11-22 10:58+0000\n" +"Last-Translator: amcorreia \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milhão" +msgstr[1] "%(value).1f milhões" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milhão" +msgstr[1] "%(value)s milhões" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bilhão" +msgstr[1] "%(value).1f bilhões" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s bilhão" +msgstr[1] "%(value)s bilhões" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilhão" +msgstr[1] "%(value).1f trilhões" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilhão" +msgstr[1] "%(value)s trilhões" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrilhão" +msgstr[1] "%(value).1f quadrilhões" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilhão" +msgstr[1] "%(value)s quadrilhões" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintilhão" +msgstr[1] "%(value).1f quintilhões" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintilhão" +msgstr[1] "%(value)s quintilhões" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilhão" +msgstr[1] "%(value).1f sextilhões" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilhão" +msgstr[1] "%(value)s sextilhões" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilhão" +msgstr[1] "%(value).1f septilhões" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilhão" +msgstr[1] "%(value)s septilhões" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilhão" +msgstr[1] "%(value).1f octilhões" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilhão" +msgstr[1] "%(value)s octilhões" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilhão" +msgstr[1] "%(value).1f nonilhões" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilhão" +msgstr[1] "%(value)s nonilhões" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilhão" +msgstr[1] "%(value).1f decilhões" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilhão" +msgstr[1] "%(value)s decilhões" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "um" + +msgid "two" +msgstr "dois" + +msgid "three" +msgstr "três" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "sete" + +msgid "eight" +msgstr "oito" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "hoje" + +msgid "tomorrow" +msgstr "amanhã" + +msgid "yesterday" +msgstr "ontem" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)satrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "uma hora atrás" +msgstr[1] "%(count)s horas atrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "um minuto atrás" +msgstr[1] "%(count)s minutos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "um segundo atrás" +msgstr[1] "%(count)s segundos atrás" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "um segundo a partir de agora" +msgstr[1] "%(count)s segundos a partir de agora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "um minuto a partir de agora" +msgstr[1] "%(count)s minutos a partir de agora" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "uma hora a partir de agora" +msgstr[1] "%(count)s horas a partir de agora" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de agora" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%dano" +msgstr[1] "%danos" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%dmês" +msgstr[1] "%dmeses" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%dsemanas" +msgstr[1] "%dsemanas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%ddia" +msgstr[1] "%ddias" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%dhora" +msgstr[1] "%dhoras" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%dminuto" +msgstr[1] "%dminutos" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%dano" +msgstr[1] "%d anos" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%dmês" +msgstr[1] "%dmeses" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%dsemana" +msgstr[1] "%dsemanas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%ddia" +msgstr[1] "%ddias" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%dhora" +msgstr[1] "%dhoras" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%dminuto" +msgstr[1] "%dminutos" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ded264756050c047f51c733d8a8a40cbd76a2837 GIT binary patch literal 6188 zcmdUyON<;x8OIA_J9zSP6366Wk`Bq*Gq!toX4h-4$82nGV#^k>SXt}9!I#c-?QDmc zu1P<3?buch1}RFSL_!J>LX;>? zH*6MS54ang03QcQzsUMq%xmBj^nWw=-XMgH@>%9{U<>8&(A{UI(fFt6csEm+x!{VL^Wc+zq-QrYc?n zX(?W2eh;K^y$+JUAA>ZmPeAJL<{J}zhWSG{oMpoc`I`}Nb9$Q z>nA`gnP`FE_>2%UAdTxiJn$-h3LXJ}4ITrx-zvl*@GN*3{4PlPZ|>Dj=LL}B1R5k@q8G3-xaY^>YAu78zlq(@s3w{QeO0C`fxn>qY5^ekSoj zd!0{TK!Nr*O%LqHPOsGriNLa z<6A2#4$2NmV|Q$jwa9r(tg;&E^;aUX?5#?%jP}BJqBw8{kvEj~a*TJmal*A+=e$S| z)>x2RGSTj9Y?3u3D_+eyJLN|!+KgW6dR&w8>tsZ%vpFvvJt|_+X5@s?^=6jV*Uu}p zxc;m%tLw}uwW*&`YEhbx=Sx9f6a}il^?YYwwKrb4gw;!n9TdZ8T<*G-f z_M=WDyVi8OGiSGF?arLl-rwCfyQhuRcnncsF9nVt4xC5@U28%0T^z4dXd}a338-pwHl{Ro;o(3 zLT9qwcm!b~eT?D!2!o99vo$puIG%sV>a8GTWi)?g>9{>Nwxhn5WndrkdkP!g?^<(D zcu_Xat`(@p;((5@eOv{@uxt4vT@2@E4q3_TeAAzw?;LJ-o6V*_(P_6I?i_4gyvT+5 z`F3mP&ZhqW*lHb~?si(OLk)4X7Z0uMZX>R~=;uoLD-Aw6o`c{qXtE%>l0HymTh?*c zDPM~8C(%<5B0cXIK5A-8pGUfE86>nfs5Gq7rA$kP-i^BcqLw|dXz)=}qrbsrFDx3o z)YSBndsf*`CL27}*7fi)tS(Ke8a*Wq%2mmiyga5Z+0tebo_t{*BR+HYoQ& zH-WO7L@QfjG}Q`y*D8d4ri=rYE_T(B=j&d+^GwS3ty>#{-Eb2ug|u#2(Mmy{jJI&W zbh}D`^M$cEUPB1$)<(S&*nGDvZkTRw2@qJiq6OkrM?m-DRKllIH+F8n|^! z2+6DV4T;<(HT, 2014 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2016 +# Sorin Sbarnea, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 06:45+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Humanize" +msgstr "Umanizare" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "al {}-lea" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milioane" +msgstr[2] "%(value).1f de milioane" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milioane" +msgstr[2] "%(value)s de milioane" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliarde" +msgstr[2] "%(value).1f de miliarde" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliarde" +msgstr[2] "%(value)s de miliarde" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilion" +msgstr[1] "%(value).1f trilioane" +msgstr[2] "%(value).1f de trilioane" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilioane" +msgstr[2] "%(value)s de trilioane" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f cuadrilion" +msgstr[1] "%(value).1f cuadrilioane" +msgstr[2] "%(value).1f de cuadrilioane" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s cuadrilion" +msgstr[1] "%(value)s cuadrilioane" +msgstr[2] "%(value)s de cuadrilioane" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f cuntilion" +msgstr[1] "%(value).1f cuntilioane" +msgstr[2] "%(value).1f de cuntilioane" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s cuntilion" +msgstr[1] "%(value)s cuntilioane" +msgstr[2] "%(value)s de cuntilioane" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilion" +msgstr[1] "%(value).1f sextilioane" +msgstr[2] "%(value).1f de sextilioane" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilion" +msgstr[1] "%(value)s sextilioane" +msgstr[2] "%(value)s de sextilioane" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilion" +msgstr[1] "%(value).1f septilioane" +msgstr[2] "%(value).1f de septilioane" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilion" +msgstr[1] "%(value)s septilioane" +msgstr[2] "%(value)s de septilioane" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilion" +msgstr[1] "%(value).1f octilioane" +msgstr[2] "%(value).1f de octilioane" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilion" +msgstr[1] "%(value)s octilioane" +msgstr[2] "%(value)s de octilioane" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilion" +msgstr[1] "%(value).1f nonilioane" +msgstr[2] "%(value).1f de nonilioane" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilion" +msgstr[1] "%(value)s nonilioane" +msgstr[2] "%(value)s de nonilioane" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilion" +msgstr[1] "%(value).1f decilioane" +msgstr[2] "%(value).1f de decilioane" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilion" +msgstr[1] "%(value)s decilioane" +msgstr[2] "%(value)s de decilioane" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" +msgstr[2] "%(value).1f de googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" +msgstr[2] "%(value)s de googol" + +msgid "one" +msgstr "unu" + +msgid "two" +msgstr "doi" + +msgid "three" +msgstr "trei" + +msgid "four" +msgstr "patru" + +msgid "five" +msgstr "cinci" + +msgid "six" +msgstr "șase" + +msgid "seven" +msgstr "șapte" + +msgid "eight" +msgstr "opt" + +msgid "nine" +msgstr "nouă" + +msgid "today" +msgstr "astăzi" + +msgid "tomorrow" +msgstr "mâine" + +msgid "yesterday" +msgstr "ieri" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "Acum %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "Acum o oră" +msgstr[1] "Acum %(count)s ore" +msgstr[2] "Acum %(count)s de ore" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "Acum un minut" +msgstr[1] "Acum %(count)s minute" +msgstr[2] "Acum %(count)s de minute" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "Acum o secundă" +msgstr[1] "Acum %(count)s secunde" +msgstr[2] "Acum %(count)s de secunde" + +msgid "now" +msgstr "acum" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "Într-o secundă" +msgstr[1] "În %(count)s secunde" +msgstr[2] "În %(count)s de secunde" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "Într-un minut" +msgstr[1] "În %(count)s minute" +msgstr[2] "În %(count)s de minute" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "Într-o oră" +msgstr[1] "În %(count)s ore" +msgstr[2] "În %(count)s de ore" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "În %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d an" +msgstr[1] "%d ani" +msgstr[2] "%d de ani" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d lună" +msgstr[1] "%d luni" +msgstr[2] "%d de luni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d săptămână" +msgstr[1] "%d săptămâni" +msgstr[2] "%d de săptămâni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d zi" +msgstr[1] "%d zile" +msgstr[2] "%d de zile" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d oră" +msgstr[1] "%d ore" +msgstr[2] "%d de ore" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minute" +msgstr[2] "%d de minute" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d an" +msgstr[1] "%d ani" +msgstr[2] "%d de ani" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d lună" +msgstr[1] "%d luni" +msgstr[2] "%d de luni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d săptămână" +msgstr[1] "%d săptămâni" +msgstr[2] "%d de săptămâni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d zi" +msgstr[1] "%d zile" +msgstr[2] "%d de zile" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d oră" +msgstr[1] "%d ore" +msgstr[2] "%d de ore" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minute" +msgstr[2] "%d de minute" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b0821932f1854e0606ff3f3612273c2df0b829c GIT binary patch literal 8569 zcmchbU2Ggz6~`|nO~6f{1X@xOnp>z7Z<4WhZ6~qU-lT2Ph^j=jf+-Z0hpBhG-ex`H z%*@(x6H863wurQicnA+IC?N5I#Dj5T)v;q&d_2L+>=W?9S5%1yL_r``f&fjZInckem>x#!%^na%HaZn?&Aoy5Hd_vl@Wnc%Zq@CVl)?`CWV_$P2D_#U_) zylX3C2f+hiH~2J2_KVW~Bgp{lgZ%@^L)#cLP=8kP+h7LuRq%`8pTYg$){imv5ZDWn zeGDYKFZn%?;{Q_e?;y3a=i?zyft1$_2p9V_7mU%un3~7 z>?%k@aZU0Kkn*|?QhPrGDX(`yinrsQ&^{pfHE=KN7eIRMO^|dO(tlgpw`~vo8Ia;V z34RnDlN<*>f%?}aOW@-LF_gVfKhm}H8#9i;lblJ|o& zetV?98^n;Y47eL>WdQsP>Q8+#WD#6IeI9%Xd>^#Hg?kyRg114kKl7=Oe*kF#T3B4f z|A4Q7-}!V{-;2hny%mt2AGj~9{}}ux>ih3!Y#MwCB;7wH&tY(=o%bXcc7^foc|f)g zQhR$phqVh{1789ED(UaW+@t=1QoR>6z!5M9mcbG5 zP4H3hH{fyb0W69P_zXz;MUeDA1xbG!B>i3<>P?XJKLjbxuO)vA()_#&-VOdu@?Vnw zmZZf;{;iVRC3i~hl6+9|VaWp^wVwsC#Mv;2t;|k>v>u-XDW7jhdkG|+4Socqi~Mw9 z${3c6IA@N7m|}6!{y8Aa{UD}>9l=fKO&{)UxR2sKj2p{IT>J1hE6Wc{J_??|Js|6k zNDhOevRntIPn>!6`Y~BJC`n^|2siZ=T@hEWB<=e_+*oR2Z_|FI3sWn`gv#BxvDC#L z#TFN1Nc*M-cL6ueF5&g|arLeFApmnhuH|qxME1pp2t;-I&U7rkgE~H?yiUMOvLzGff_EVpOJx zlp3REf+EwGs?(-je!*fU2Fu2^MW5=L<~^z_QvE607Na+c13GT8Y?~FH-Ev_8qgSuy zQ1$#qHFt>T`f(2=W&Nny#Yje8w^1ETiVr8NN0QZ}$?8zDIviF#Yu2)vS3b}DDc7=? z@6ZzSooUB)(IJ1%Ve^*fTP~T$T<3Xf!Z)5M8c$oUhxcWk7oRunlGAm@nsHp;IPI0n zMdPt*$uq{CJntHNYTP*CTBZ-JankgyJnzruhK+2_$Q?m3KiGdTo6BY)G|pJFWoomb z8!~b^BYT)G3 z?mhd$G05#w)ht=YxMfb~`I)Ncm9cAkrhI=U-`6)cH`nV^W93QfeD8!a-4}MJj*5J| z&#m@lx=ufF`te4`bG_NF6Ie`^jfCcB&@&&0UEfT_EZZY|VhRi0@(W)bKV=LxbQEjS za*fCB2?xuhl;=awmHjBqJa?;IV-?!?#wo|0_VV1G5mm1+IKsnXp~vpdWebHI-?xub zG5b&^ z1n;3;PIyCw(5#S);QyF+q;#+G&(Wy ztl~^YR^6%CZ3WTc8jl(olhGRHRFtNU#6cR5kZ>fUBweXUEuG4t8IPzqlTlT7Dso$a za#+TrE6!we)t!poR-io?;~8iL$t?7eR3;sZlmjuHjUrI9Q6-ve+KF_>VJsJ&JCTW2 zkj$e~iE;p@^H2n8CaOe}OIuOuD2(TkawRiJJ5#ZB?%=vO)0gq~!*L|OoK`qKrtwKl z-_pWxlLu>DypeCz77y{@9s0zoUB%0Z_T8=8A{WwiRH&V`+9EQJ{u4u-+#9t;ydV}i zwJSf>^^z-XC3hr9{2tJzl>Et{lU!*lX)lO%RxC%15rzW8*`zlKQL{0Li#lj0F42!m zyg^K22cl+U6K|=5cH-*=QI~3$;>pGbPdJ06)^4oBI}$YMsEE}pdznaUH*LUHjnj@{ z*fg7Byl&NAW%vfg#zH|ncDZ&1+jE8fvn$-5aD-*-zj_HakgUBZuw-0$7!}Sr3)BklG#Z)cVS1SE< zx+zy2O#>|yc45K5vix8EMth?6EwNn0t`P4qCS2h}(?$?)lx6V?WQid@e)VEki5>JJ GivI=T(HzDA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..a5f53197f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,484 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mingun , 2014 +# Dimmus , 2011 +# Eugene , 2012 +# Grigory Fateyev (aka greg) , 2018 +# Jannis Leidel , 2011 +# Mingun , 2014 +# SeryiMysh , 2018 +# Алексей Борискин , 2012,2014 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-11-05 07:07+0000\n" +"Last-Translator: SeryiMysh \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Humanize" +msgstr "Приведение значений к виду, понятному человеку" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-й" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-й" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" +msgstr[1] "%(value).1f миллиона" +msgstr[2] "%(value).1f миллионов" +msgstr[3] "%(value).1f миллионов" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" +msgstr[1] "%(value)s миллиона" +msgstr[2] "%(value)s миллионов" +msgstr[3] "%(value)s миллионов" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" +msgstr[1] "%(value).1f миллиарда" +msgstr[2] "%(value).1f миллиардов" +msgstr[3] "%(value).1f миллиардов" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" +msgstr[1] "%(value)s миллиарда" +msgstr[2] "%(value)s миллиардов" +msgstr[3] "%(value)s миллиардов" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" +msgstr[1] "%(value).1f триллиона" +msgstr[2] "%(value).1f триллионов" +msgstr[3] "%(value).1f триллионов" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" +msgstr[1] "%(value)s триллиона" +msgstr[2] "%(value)s триллионов" +msgstr[3] "%(value)s триллионов" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" +msgstr[1] "%(value).1f квадриллиона" +msgstr[2] "%(value).1f квадриллионов" +msgstr[3] "%(value).1f квадриллионов" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" +msgstr[1] "%(value)s квадриллиона" +msgstr[2] "%(value)s квадриллионов" +msgstr[3] "%(value)s квадриллионов" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" +msgstr[1] "%(value).1f квинтиллиона" +msgstr[2] "%(value).1f квинтиллионов" +msgstr[3] "%(value).1f квинтиллионов" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" +msgstr[1] "%(value)s квинтиллиона" +msgstr[2] "%(value)s квинтиллионов" +msgstr[3] "%(value)s квинтиллионов" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" +msgstr[1] "%(value).1f секстиллиона" +msgstr[2] "%(value).1f секстиллионов" +msgstr[3] "%(value).1f секстиллионов" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" +msgstr[1] "%(value)s секстиллиона" +msgstr[2] "%(value)s секстиллионов" +msgstr[3] "%(value)s секстиллионов" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" +msgstr[1] "%(value).1f септиллиона" +msgstr[2] "%(value).1f септиллионов" +msgstr[3] "%(value).1f септиллионов" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" +msgstr[1] "%(value)s септиллиона" +msgstr[2] "%(value)s септиллионов" +msgstr[3] "%(value)s септиллионов" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" +msgstr[1] "%(value).1f октиллиона" +msgstr[2] "%(value).1f октиллионов" +msgstr[3] "%(value).1f октиллионов" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" +msgstr[1] "%(value)s октиллиона" +msgstr[2] "%(value)s октиллионов" +msgstr[3] "%(value)s октиллионов" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" +msgstr[1] "%(value).1f нониллиона" +msgstr[2] "%(value).1f нониллионов" +msgstr[3] "%(value).1f нониллионов" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" +msgstr[1] "%(value)s нониллиона" +msgstr[2] "%(value)s нониллионов" +msgstr[3] "%(value)s нониллионов" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" +msgstr[1] "%(value).1f дециллиона" +msgstr[2] "%(value).1f дециллионов" +msgstr[3] "%(value).1f дециллионов" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" +msgstr[1] "%(value)s дециллиона" +msgstr[2] "%(value)s дециллионов" +msgstr[3] "%(value)s дециллионов" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гугола" +msgstr[2] "%(value).1f гуголов" +msgstr[3] "%(value).1f гуголов" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугола" +msgstr[2] "%(value)s гуголов" +msgstr[3] "%(value)s гуголов" + +msgid "one" +msgstr "один" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четыре" + +msgid "five" +msgstr "пять" + +msgid "six" +msgstr "шесть" + +msgid "seven" +msgstr "семь" + +msgid "eight" +msgstr "восемь" + +msgid "nine" +msgstr "девять" + +msgid "today" +msgstr "сегодня" + +msgid "tomorrow" +msgstr "завтра" + +msgid "yesterday" +msgstr "вчера" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s назад" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s час назад" +msgstr[1] "%(count)s часа назад" +msgstr[2] "%(count)s часов назад" +msgstr[3] "%(count)s часов назад" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s минуту назад" +msgstr[1] "%(count)s минуты назад" +msgstr[2] "%(count)s минут назад" +msgstr[3] "%(count)s минут назад" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s секунду назад" +msgstr[1] "%(count)s секунды назад" +msgstr[2] "%(count)s секунд назад" +msgstr[3] "%(count)s секунд назад" + +msgid "now" +msgstr "сейчас" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "через %(count)s секунду" +msgstr[1] "через %(count)s секунды" +msgstr[2] "через %(count)s секунд" +msgstr[3] "через %(count)s секунд" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "через %(count)s минуту" +msgstr[1] "через %(count)s минуты" +msgstr[2] "через %(count)s минут" +msgstr[3] "через %(count)s минут" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "через %(count)s час" +msgstr[1] "через %(count)s часа" +msgstr[2] "через %(count)s часов" +msgstr[3] "через %(count)s часов" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "через %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d год" +msgstr[1] "%d года" +msgstr[2] "%d лет" +msgstr[3] "%d лет" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месяц" +msgstr[1] "%d месяца" +msgstr[2] "%d месяцев" +msgstr[3] "%d месяцев" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d неделя" +msgstr[1] "%d недели" +msgstr[2] "%d недель" +msgstr[3] "%d недель" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d дней" +msgstr[3] "%d дней" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часа" +msgstr[2] "%d часов" +msgstr[3] "%d часов" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минуту" +msgstr[1] "%d минуты" +msgstr[2] "%d минут" +msgstr[3] "%d минут" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d год" +msgstr[1] "%d года" +msgstr[2] "%d лет" +msgstr[3] "%d лет" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месяц" +msgstr[1] "%d месяца" +msgstr[2] "%d месяцев" +msgstr[3] "%d месяцев" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d неделю" +msgstr[1] "%d недели" +msgstr[2] "%d недель" +msgstr[3] "%d недель" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d дней" +msgstr[3] "%d дней" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часа" +msgstr[2] "%d часов" +msgstr[3] "%d часов" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минуты" +msgstr[2] "%d минут" +msgstr[3] "%d минут" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..42286b1c6efdfd660c1950667ba809a57ae5ac2d GIT binary patch literal 6931 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..d0f3ea4f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,477 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# Marian Andre , 2012-2013 +# Martin Tóth , 2017-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-31 12:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Humanize" +msgstr "Poľudštenie" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miliónu" +msgstr[1] "%(value).1f miliónu" +msgstr[2] "%(value).1f miliónu" +msgstr[3] "%(value).1f miliónu" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] " %(value)s milión" +msgstr[1] " %(value)s milióny" +msgstr[2] " %(value)s miliónov" +msgstr[3] " %(value)s miliónov" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliarda" +msgstr[1] "%(value).1f miliardy" +msgstr[2] "%(value).1f miliárd" +msgstr[3] "%(value).1f miliárd" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] " %(value)s miliarda" +msgstr[1] " %(value)s miliardy" +msgstr[2] " %(value)s miliárd" +msgstr[3] " %(value)s miliárd" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilión" +msgstr[1] "%(value).1f bilióny" +msgstr[2] "%(value).1f biliónov" +msgstr[3] "%(value).1f biliónov" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilión" +msgstr[1] "%(value)s bilióny" +msgstr[2] "%(value)s biliónov" +msgstr[3] "%(value)s biliónov" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biliardy" +msgstr[1] "%(value).1f biliardy" +msgstr[2] "%(value).1f biliárd" +msgstr[3] "%(value).1f biliárd" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliardy" +msgstr[2] "%(value)s biliárd" +msgstr[3] "%(value)s biliárd" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f triliónu" +msgstr[1] "%(value).1f triliónu" +msgstr[2] "%(value).1f triliónu" +msgstr[3] "%(value).1f triliónu" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilión" +msgstr[1] "%(value)s trilióny" +msgstr[2] "%(value)s triliónov" +msgstr[3] "%(value)s triliónov" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triliardy" +msgstr[1] "%(value).1f triliardy" +msgstr[2] "%(value).1f triliárd" +msgstr[3] "%(value).1f triliárd" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliardy" +msgstr[2] "%(value)s triliárd" +msgstr[3] "%(value)s triliárd" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvadriliónu" +msgstr[1] "%(value).1f kvadriliónu" +msgstr[2] "%(value).1f kvadriliónov" +msgstr[3] "%(value).1f kvadriliónov" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrilión" +msgstr[1] "%(value)s kvadrilióny" +msgstr[2] "%(value)s kvadriliónov" +msgstr[3] "%(value)s kvadriliónov" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvadriliardy" +msgstr[1] "%(value).1f kvadriliardy" +msgstr[2] "%(value).1f kvadriliárd" +msgstr[3] "%(value).1f kvadriliárd" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadriliarda" +msgstr[1] "%(value)s kvadriliardy" +msgstr[2] "%(value)s kvadriliárd" +msgstr[3] "%(value)s kvadriliárd" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintiliónu" +msgstr[1] "%(value).1f kvintiliónu" +msgstr[2] "%(value).1f kvintiliónov" +msgstr[3] "%(value).1f kvintiliónov" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintilión" +msgstr[1] "%(value)s kvintilióny" +msgstr[2] "%(value)s kvintiliónov" +msgstr[3] "%(value)s kvintiliónov" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintiliardy" +msgstr[1] "%(value).1f kvintiliardy" +msgstr[2] "%(value).1f kvintiliárd" +msgstr[3] "%(value).1f kvintiliárd" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintiliarda" +msgstr[1] "%(value)s kvintiliardy" +msgstr[2] "%(value)s kvintiliárd" +msgstr[3] "%(value)s kvintiliárd" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" +msgstr[2] "%(value).1f googol" +msgstr[3] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" +msgstr[2] "%(value)s googol" +msgstr[3] "%(value)s googol" + +msgid "one" +msgstr "jeden" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "štyri" + +msgid "five" +msgstr "päť" + +msgid "six" +msgstr "šesť" + +msgid "seven" +msgstr "sedem" + +msgid "eight" +msgstr "osem" + +msgid "nine" +msgstr "deväť" + +msgid "today" +msgstr "dnes" + +msgid "tomorrow" +msgstr "zajtra" + +msgid "yesterday" +msgstr "včera" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "pred %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pred hodinou" +msgstr[1] "pred %(count)s hodinami" +msgstr[2] "pred %(count)s hodinami" +msgstr[3] "pred %(count)s hodinami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pred minútou" +msgstr[1] "pred %(count)s minútami" +msgstr[2] "pred %(count)s minútami" +msgstr[3] "pred %(count)s minútami" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pred sekundou" +msgstr[1] "pred %(count)s sekundami" +msgstr[2] "pred %(count)s sekundami" +msgstr[3] "pred %(count)s sekundami" + +msgid "now" +msgstr "teraz" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "o sekundu" +msgstr[1] "o %(count)s sekundy" +msgstr[2] "o %(count)s sekúnd" +msgstr[3] "o %(count)s sekúnd" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "o minútu" +msgstr[1] "o %(count)s minúty" +msgstr[2] "o %(count)s minút" +msgstr[3] "o %(count)s minút" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "o hodinu" +msgstr[1] "o %(count)s hodiny" +msgstr[2] "o %(count)s hodín" +msgstr[3] "o %(count)s hodín" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "o %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rokom" +msgstr[1] "%d rokmi" +msgstr[2] "%d rokmi" +msgstr[3] "%d rokmi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesiacom" +msgstr[1] "%d mesiacmi" +msgstr[2] "%d mesiacmi" +msgstr[3] "%d mesiacmi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d týždeň" +msgstr[1] "%d týždne" +msgstr[2] "%d týždňami" +msgstr[3] "%d týždňami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dňom" +msgstr[1] "%d dňami" +msgstr[2] "%d dňami" +msgstr[3] "%d dňami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodinou" +msgstr[1] "%d hodinami" +msgstr[2] "%d hodinami" +msgstr[3] "%d hodinami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minútou" +msgstr[1] "%d minútami" +msgstr[2] "%d minútami" +msgstr[3] "%d minútami" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d roky" +msgstr[2] "%d rokov" +msgstr[3] "%d rokov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesiac" +msgstr[1] "%d mesiace" +msgstr[2] "%d mesiacov" +msgstr[3] "%d mesiacov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d týždeň" +msgstr[1] "%d týždne" +msgstr[2] "%d týždňov" +msgstr[3] "%d týždňov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d deň" +msgstr[1] "%d dni" +msgstr[2] "%d dní" +msgstr[3] "%d dní" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodina" +msgstr[1] "%d hodiny" +msgstr[2] "%d hodín" +msgstr[3] "%d hodín" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minúta" +msgstr[1] "%d minúty" +msgstr[2] "%d minút" +msgstr[3] "%d minút" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9d5f9aa18af95490612a99fc7b4de72ecfc63d56 GIT binary patch literal 5430 zcmai%O^g&p7={Z4!BIgGL_nnkMs`_xXJ!||GPr15KoE!n|lCML!xCcf2OQ`6O58#~+cPCeh(Z+%_W zHC_Aj#?>DY95tNJ;Jm(ykO}C%2l0VpY&9W!pogGCPzEhSuPFYd;y)=}yM~Yo;-g9% zPzUV~mEM33qWv3m7j)}GssA|id9*oH@(&dMTS(f4!RZXd(h{gze68@Zg@D&+X$6I zwMFT6sEqG`O23_o4=BD*X+_0Hl#W4RO^!gN->XpkkyH4%i#a(DJ&X3B)zT(2udT@q3=S!fXciLPvRMZHlZ^AHdNkMc~g4b z0#uIwGE|PkZ78Ok+<~GLausD<}<7=QYzE0_S#WyM4 z0+spORQx%myA|IH#iK)pp_qo`*_QJp*UL7XxUHlf2tn7$vr?4}b;xH%9b1k;ur7+$hZeJ?||tM3kUC(ajCyC)Q1cHcP-%~iZ;M{>Td*F7Hbw2>zg|noBa*XA8kn%v6wPHRvT$`pByjIH-{{J$U zH!PWU+7zNGT85=Vv8Atw7wp+q z9N7vlz_2j8Hd36!klI*o3PV}|`PmC;krd}Gq&8NZvyj@DZMH(X5-rY@%(YR=G=+2p zSePQ2X@Qmr(&$9oX1=$?3B#cIal|QW3M`?9i2Z0Vym>XHVS;tebRgOozIj`sjxkiz z5WbstOli+i<>;$2UH1}ojQMm%#6jLrGG(U{^c5MmG)qUg*PMySwAbZi8rKt_MRCAd zk=N#{%L6WNMQkuNwMVp(?-JkhIg!I5pn*$5-sL_Cy#*3RB$~lrz&VM8%NFt37D0gA zXkL&-9!5Nncrp;Pyb(DkUFQuRg!pN!Q+Jm6O;I|_J0ggjGhx$nomb*!=uC+^Els{Y z8jX%15!w#jUR?3UYmKj=tEDU}?CUwqI_xnb#U_i1ra&>o;T8 zOvHm#J zhO4Cs;YZv@eTyC3XoSbS(rGczKTI1lEC_itetzn>GuF?OeNFSgIp#Nn>-o((9lPK~ zy3jfeTcydCoO0*52-;zt`kka1j_*HA)34(Lei=WW0&+lQhdP)i&taAh$t-CBK&5Z0;?pso9mrW@j3UuHoH`3$Id1OwT0A z^h;3A3%6dVQZds{LDNyeoM-aeU2xUZ^wrpO);Q-a=I}}^cx!5UYixRJob#r0-Q@LO zu+Ij}9~+x49s?6 zTiVz?84FvrvtGGHtupern5(L=oRiy;N!f~uOIdBga&CHIX6w>0>!_hopI&^KvD7T< zsbSVrL&MXyZo}*X%=%`Mv(6cu^DZt{>8+{ht+DB?vEkicU75k?!>n_kW{vwa=c|{L zVXUd?tg&gWvEiLxlp!rFNsY38{pC0*maoV?$nq7BbOP>Dy%9{exxz|Wo2|g}E^1%Q z+8$ZH!k3EnHfqo1IR|B(F9bh&vF{e@PO+u%ULapNHs#XDQhBe3T, 2011 +# Jure Cuhalev , 2011 +# Primož Verdnik , 2013-2014 +# zejn , 2016 +# zejn , 2011,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Počloveči" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milijon" +msgstr[1] "%(value).1f milijona" +msgstr[2] "%(value).1f milijoni" +msgstr[3] "%(value).1f milijonov" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milijon" +msgstr[1] "%(value)s milijona" +msgstr[2] "%(value)s milijoni" +msgstr[3] "%(value)s milijonov" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljarda" +msgstr[1] "%(value).1f miljardi" +msgstr[2] "%(value).1f miljarde" +msgstr[3] "%(value).1f miljard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljarda" +msgstr[1] "%(value)s miljardi" +msgstr[2] "%(value)s miljarde" +msgstr[3] "%(value)s miljard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triljon" +msgstr[1] "%(value).1f triljona" +msgstr[2] "%(value).1f triljoni" +msgstr[3] "%(value).1f triljonov" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljon" +msgstr[1] "%(value)s triljona" +msgstr[2] "%(value)s triljoni" +msgstr[3] "%(value)s triljonov" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrilijon" +msgstr[1] "%(value).1f kvadrilijona" +msgstr[2] "%(value).1f kvadrilijoni" +msgstr[3] "%(value).1f kvadrilijonov" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrilijon" +msgstr[1] "%(value)s kvadrilijona" +msgstr[2] "%(value)s kvadrilijoni" +msgstr[3] "%(value)s kvadrilijonov" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintilijon" +msgstr[1] "%(value).1f kvintilijona" +msgstr[2] "%(value).1f kvintilijoni" +msgstr[3] "%(value).1f kvintilijonov" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintilijon" +msgstr[1] "%(value)s kvintilijona" +msgstr[2] "%(value)s kvintilijoni" +msgstr[3] "%(value)s kvintilijonov" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstilijon" +msgstr[1] "%(value).1f sekstilijona" +msgstr[2] "%(value).1f sekstilijoni" +msgstr[3] "%(value).1f sekstilijonov" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstilijon" +msgstr[1] "%(value)s sekstilijona" +msgstr[2] "%(value)s sekstilijoni" +msgstr[3] "%(value)s sekstilijonov" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilijon" +msgstr[1] "%(value).1f septilijona" +msgstr[2] "%(value).1f septilijoni" +msgstr[3] "%(value).1f septilijonov" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilijon" +msgstr[1] "%(value)s septilijona" +msgstr[2] "%(value)s septilijoni" +msgstr[3] "%(value)s septilijonov" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilijon" +msgstr[1] "%(value).1f oktilijona" +msgstr[2] "%(value).1f oktilijoni" +msgstr[3] "%(value).1f oktilijonov" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilijon" +msgstr[1] "%(value)s oktilijona" +msgstr[2] "%(value)s oktilijoni" +msgstr[3] "%(value)s oktilijonov" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilijon" +msgstr[1] "%(value).1f nonilijona" +msgstr[2] "%(value).1f nonilijoni" +msgstr[3] "%(value).1f nonilijonov" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilijon" +msgstr[1] "%(value)s nonilijona" +msgstr[2] "%(value)s nonilijoni" +msgstr[3] "%(value)s nonilijonov" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilijon" +msgstr[1] "%(value).1f decilijona" +msgstr[2] "%(value).1f decilijoni" +msgstr[3] "%(value).1f decilijonov" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilijon" +msgstr[1] "%(value)s decilijona" +msgstr[2] "%(value)s decilijoni" +msgstr[3] "%(value)s decilijonov" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugol" +msgstr[1] "%(value).1f gugola" +msgstr[2] "%(value).1f gugoli" +msgstr[3] "%(value).1f gugolov" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugol" +msgstr[1] "%(value)s gugola" +msgstr[2] "%(value)s gugoli" +msgstr[3] "%(value)s gugolov" + +msgid "one" +msgstr "ena" + +msgid "two" +msgstr "dve" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "štiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedem" + +msgid "eight" +msgstr "osem" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "danes" + +msgid "tomorrow" +msgstr "jutri" + +msgid "yesterday" +msgstr "včeraj" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s nazaj" + +msgid "now" +msgstr "zdaj" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pred %(count)s sekundo" +msgstr[1] "pred %(count)s sekundama" +msgstr[2] "pred %(count)s sekundami" +msgstr[3] "pred %(count)s sekundami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pred %(count)s minuto" +msgstr[1] "pred %(count)s minutama" +msgstr[2] "pred %(count)s minutami" +msgstr[3] "pred %(count)s minutami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pred %(count)s uro" +msgstr[1] "pred %(count)s urama" +msgstr[2] "pred %(count)s urami" +msgstr[3] "pred %(count)s urami" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "čez %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "čez %(count)s sekundo" +msgstr[1] "čez %(count)s sekundi" +msgstr[2] "čez %(count)s sekunde" +msgstr[3] "čez %(count)s sekund" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "čez %(count)s minuto" +msgstr[1] "čez %(count)s minuti" +msgstr[2] "čez %(count)s minute" +msgstr[3] "čez %(count)s minut" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "čez %(count)s uro" +msgstr[1] "čez %(count)s uri" +msgstr[2] "čez %(count)s ure" +msgstr[3] "čez %(count)s ur" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f7e3c3b753edcd05e6a49f12cbfde1c702e7fe72 GIT binary patch literal 5280 zcmb`JON;H9s-P_&MgVESY&9CcU|NgqF zzN+c^Zb{F}0@uwbSE7uaF2n(FXAgdGy}4M3^T4;jCE)vDKllZ>2K)`|16Q39={rHv zE%OLCjQXd{-$4iUwP!}W4;)1ONpJ=DHrNk-1zrpO$+|o%(r;llKzh$h%nv|{^Aq!u zv!i}(0U?Pgkm75Q-v1)kKjivJP(okYE5vGW48+jH10YR>V%9+Fmj)@`^C0#2I7svG zE$fTUiQ4^On#XrRn*VQD|BKmw zQS_eOAjNwaq<+25{1T*ie}I>OE718-unZ1>O>hi+h4~3cacHpgz9Eq2Z7=g)5KCGd z1QAjw5JM1i;4<(Dt{>+1H$Y5@c#rF!ar^fm`G4km4=NOI8A$$BAhv>757PP=XKrKO z#@xxgo4KEPKl4GRV%C_NX+e6=JV^O}45an(H1j!-#`^+@zY6gx>xV%s3$Yx9`bQpG zrzMu{(4$8=%J!i&}?tu1V+@VWxO=b_L#r#Yr;4CQjV=^Lo1 zhII#xbgMd5n+kMO`g#u1tlMa-!J*QWobVbAPy7FxV!6~Ule_&U920`DzbN#4;8x$Wn0wo4$*XEw@B&Cp^-&e zE`>&R2>I+8*{O8q&0tODGi+pM&Wg37Y#G^2?aUN;i`0TN8QDebND(;;#DWAR((Uc0 z>w6C=;bPMKwpF}&Cw1GmgXW_nks9sk#FN_69mb^1MQ)x!t=mC9AZZ+q4apO!Xpt*vQC@Z0iYaeai77lUeAl)Ew_&}ea;Dn2S3P|dS#jq@ z1k=SqVaXDP@8XH(kX$^Q-F(`&)1i%Sy1j8usXCd6-8}Qk4SPk*dRnfrry5z@-hEuL zb5qgV4Sblc*eYq-^LJ%6*DoW`nEcKn`w+ntRIK6=-b z3Y=U0NsXLW%W~s{XOn)GrJ3p7)1Y1KY}Y~4l%?Mat7d$3vy5)X2Yh+$xGW8B?oAz0 znkSCRmK&Tnn$rBLD=kKxIZxoj;<;Ea>7xv5;lm3DobXeYKjFk;&RcDFoLflAx#&H) z6H_GReBoy;?~KKqSJ(0N&wFDr=dDKvm%MvH?(l~nxK4j8=ls!EE^klN4!0@jy1`Zo z2b6Qu_bwlqwUjeFIArphC>d9r#$*}r$pvr7__BG$$t9Q7D0(WVv5<)pr!MujSjza~ zw55Epl<_SjEahAfbKZhv8Cj3cF8T2$xk?32v`pM2PZ?)t?u^W5E>RHg4%PA`ZFOwl zyJ`yi_aPnN%TPl-{5la+TRS;fgpD}OByFt|M+2FDPJ~M8_z*o3#Wt#rb4|D4QENJS z82CRuq%o#cH&gw|wJZ#P8ajF(idI=_QU2q2iH>^F(qJnjysGsZ7o, 2011,2015 +# Besnik , 2015,2018-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-03-12 07:59+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Jepi Formë Njerëzore" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "-të" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "-të" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milionë" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milionë" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliardë" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliardë" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilion" +msgstr[1] "%(value).1f trilionë" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilionë" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kuadrilion" +msgstr[1] "%(value).1f kuadrilionë" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kuadrilion" +msgstr[1] "%(value)s kuadrilionë" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kuintilion" +msgstr[1] "%(value).1f kuintilionë" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kuintilionë" +msgstr[1] "%(value)s kuintilionë" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sestilion" +msgstr[1] "%(value).1f sestilionë" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sestilion" +msgstr[1] "%(value)s sestilionë" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilion" +msgstr[1] "%(value).1f septilionë" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilion" +msgstr[1] "%(value)s septilionë" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilion" +msgstr[1] "%(value).1f oktilionë" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilion" +msgstr[1] "%(value)s oktilionë" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilion" +msgstr[1] "%(value).1f nonilionë" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilion" +msgstr[1] "%(value)s nonilionë" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilion" +msgstr[1] "%(value).1f decilionë" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilion" +msgstr[1] "%(value)s decilionë" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugol" +msgstr[1] "%(value).1f gugolë" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugol" +msgstr[1] "%(value)s gugolë" + +msgid "one" +msgstr "një" + +msgid "two" +msgstr "dy" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "katër" + +msgid "five" +msgstr "pesë" + +msgid "six" +msgstr "gjashtë" + +msgid "seven" +msgstr "shtatë" + +msgid "eight" +msgstr "tetë" + +msgid "nine" +msgstr "nëntë" + +msgid "today" +msgstr "sot" + +msgid "tomorrow" +msgstr "nesër" + +msgid "yesterday" +msgstr "dje" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s më parë" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "një orë më parë" +msgstr[1] "%(count)s orë më parë" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "një minutë më parë" +msgstr[1] "%(count)s minuta më parë" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "një sekondë më parë" +msgstr[1] "%(count)s sekonda më parë" + +msgid "now" +msgstr "tani" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "një sekondë më parë" +msgstr[1] "%(count)s sekonda më parë" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "për një minutë" +msgstr[1] "për %(count)s minuta" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "për një orë" +msgstr[1] "për %(count)s orë" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s nga tani" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vit" +msgstr[1] "%d vjet" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d muaj" +msgstr[1] "%d muaj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d javë" +msgstr[1] "%d javë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ditë" +msgstr[1] "%d ditë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d orë" +msgstr[1] "%d orë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutë" +msgstr[1] "%d minuta" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vit" +msgstr[1] "%d vjet" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d muaj" +msgstr[1] "%d muaj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d javë" +msgstr[1] "%d javë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ditë" +msgstr[1] "%d ditë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d orë" +msgstr[1] "%d orë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutë" +msgstr[1] "%d minuta" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6e1da258097d520ab7d6537a06f82a72ebd785b GIT binary patch literal 5415 zcmbW3TWl0n7{^bg-WE{s26*G37FuB1-BO?|EG7tq8moZF3p_A%PqzcRGi7F$wgSo} z5g$l=BEf5#;Dd>mRPAD;Eyjw`Co`My|AymaFVmX`7Y-> z=ljlO_WQe<&oVsg&>lqlsfn>?!1re12hXp~jLikFfOmm^gO7r#n;BaMwu4K+-5}|Q zrTz`cOW+FVf0JBz3uA4NH%sbZ3*>X)ZQwo5R?>zRmi$ig2av}51*Gw=ft2q*Qs0EdA^RMV^b0`pdl zf%Y^?#ahwm!ScK3?Iu_9)|Ad0?E%_188liy*3z06MO$sNxLPnmQom`GxNZzVbyzKy z1swKk#iC~DGivgpFX2^BS1^o%Q4EDjC`ySqNsVsk39ouOqt8zG)zcj+t9diw*+{GD z$*70Q^|Y24Ou9Bu4%hRnqqLI~4OH98B~{m+7fj_PO)uL*E^ePu*6lWHdeqZ;YaaN7 zmOSAY*i>$bK10vPBYIjtqVx%RwX_BieaFD2>U_W`oAH38li{R8&?6Mh^9n3ND-77I zUpp*VKl(FWwacbjw6&5@`pbA1%`JJJS4Wr!tAPiFB^Nh*10S!3edNS&j)T~HEUv5)OmGOToV=7M#b)^xXu$T zaaicg(uSEmU<$!(gSMD$lnm2ELiUisMucSxlhoTyBoM%qZ!Ml3C3&YqMSJR;2Ny zp299rcA2Vf6;<0Xv%IHZnEXj$8kSblE}e#hUMQ;tq3jZBDa)S~=6(&wuXVt-2eTa= zLqkLDHg(tf#c+F{QR?vK<)bLOcUWdeTdKFGcS|jUOnW-@1a^hcF@=#q%+VIZcE?~* z)%5keZvZ=1*tzF+ZB@E!el%9UFqJKOpMmu*WO?^~%?_rS<(8S+UZfMOY&Fc1mF4=N zD_Xf#>$&%uYt>sa>0BnqHF2WccGe&EXDtW3JOTZOC=etJ@>JA(Q4uk9u9; zlWs$w4El7otxqxM^XhS@!h^3PzEu8q(z)o2^Xds_%oz`Tznn>D!uiaZsGf7i&~@Ay zo5@(2$v9CnI-fcpVW6q%$#`^r9Zr?&aheD@ap&XeDd%Hk_*pG{NEuBk@QtcvArNFL z93-S}=pQ!3Q>S>Lsn#<)WBQ_Btu2=QO4xzE@9+ldx19P|(bc)QiRpvYV_T*Pq*e2k017mCKZ{-M9i;VT4N2? zhOX_IO|c~49Ud+=c{f(ro|rayBqn^3rr}It?>Lp}Nme~gz^4Nj5&Z?Ej|bhI{u>32 zzI$nqHb|)U?!}<%*4?9S-$0VFl5z!+D%F>yx0C{JU-n{8VcTHCR9}_$nvA20nbu@) z=JY`sr};?#n(X=4j&4;F_IMrQ zdB^2g9jd3?I@R({)`1F)E6Cj+?tcx;0XHHQo;JskV+w5!j>7{DLXgdB*T@5 gWNA0L-xKB+zIuW|jk^xJ6Sv(sU5l6qG}yK5KYu3$>Hq)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..97a6a7f53 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,359 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:49+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Humanize" +msgstr "Улепшавање" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-ти" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-ти" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-и" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милион" +msgstr[1] "%(value)s милиона" +msgstr[2] "%(value)s милиона" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s милијарда" +msgstr[1] "%(value)s милијарде" +msgstr[2] "%(value)s милијарди" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s билион" +msgstr[1] "%(value)s билиона" +msgstr[2] "%(value)s билиона" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s билијарда" +msgstr[1] "%(value)s билијарде" +msgstr[2] "%(value)s билијарди" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s трилион" +msgstr[1] "%(value)s трилиона" +msgstr[2] "%(value)s трилиона" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s трилијарда" +msgstr[1] "%(value)s трилијарде" +msgstr[2] "%(value)s трилијарди" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)sквадрилион " +msgstr[1] "%(value)sквадрилиона " +msgstr[2] "%(value)sквадрилиона " + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)sквадрилијарда " +msgstr[1] "%(value)sквадрилијарде " +msgstr[2] "%(value)sквадрилијарди " + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)sквантилион " +msgstr[1] "%(value)sквантилиона " +msgstr[2] "%(value)sквантилиона " + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)sквантилијарда " +msgstr[1] "%(value)sквантилијарде " +msgstr[2] "%(value)sквантилијарди " + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугола" +msgstr[2] "%(value)s гугола" + +msgid "one" +msgstr "један" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четири" + +msgid "five" +msgstr "пет" + +msgid "six" +msgstr "шест" + +msgid "seven" +msgstr "седам" + +msgid "eight" +msgstr "осам" + +msgid "nine" +msgstr "девет" + +msgid "today" +msgstr "данас" + +msgid "tomorrow" +msgstr "сутра" + +msgid "yesterday" +msgstr "јуче" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "пре %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "пре %(count)s сата" +msgstr[1] "пре %(count)s сата" +msgstr[2] "пре %(count)s сати" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "пре %(count)s минута" +msgstr[1] "пре %(count)s минута" +msgstr[2] "пре %(count)s минута" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "пре %(count)s секунде" +msgstr[1] "пре %(count)s секунде" +msgstr[2] "пре %(count)s секунди" + +msgid "now" +msgstr "сада" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s секунда од сад" +msgstr[1] "%(count)s секунде од сада" +msgstr[2] "%(count)s секунди од сада" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s минут од сад" +msgstr[1] "%(count)s минута од сада" +msgstr[2] "%(count)s минута од сада" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s сат од сад" +msgstr[1] "%(count)s сата од сада" +msgstr[2] "%(count)s сати од сада" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s од сад" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d годину" +msgstr[1] "%d године" +msgstr[2] "%d година" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месеца" +msgstr[1] "%d месеца" +msgstr[2] "%d месеци" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недеље" +msgstr[1] "%d недеље" +msgstr[2] "%d недеља" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d дана" +msgstr[1] "%d дана" +msgstr[2] "%d дана" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сата" +msgstr[1] "%d сата" +msgstr[2] "%d сати" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минута" +msgstr[2] "%d минута" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d година" +msgstr[1] "%d године" +msgstr[2] "%d година" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месец" +msgstr[1] "%d месеца" +msgstr[2] "%d месеци" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недеља" +msgstr[1] "%d недеље" +msgstr[2] "%d недеља" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d дан" +msgstr[1] "%d дана" +msgstr[2] "%d дана" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сат" +msgstr[1] "%d сата" +msgstr[2] "%d сати" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минута" +msgstr[2] "%d минута" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a01db53828511f7f941955f40057b8e99e311ee GIT binary patch literal 1017 zcmYL{zi$&U6vqveU&l|eurQc`su5gsmx5GXdw_se6t$u%f!)nH7e|R5+0HN8E-bKg zK|&0G5Hkw{5)3eaiaK>dLV^JXSeO|22lzU5=u@6Q@7eFyIsSfP8Hr-SZ*12m6mbpMb8;bI|3z@%!(+|G{$;boICV`4{jY{BPh} z=r8CI_|H(>^?eDtKCiIs2VaA({yWf}fAs#Q=a%PZUgP+;gT59BeteFCst*wkF}|^Myl;9(&xr< z?Y0-Ss`H8s=d$n)*G4Fr(5%j6u7V}rQrdXgrxj@!1Fx%rj%dvS!jWm{mHVbGg#=2G`1nrr5ZT0GYR0&ciZi&4k|K zdRZ_@$L5(8vOvdb*0z#jvD@vATUSO@d2hU;n#Jw;hG_UQMWZjHlaR$iurRkUv-3Ui zcobY!(sGG``YlXsdCwMG4JPCit<;z{+@`n7v*F}UoaUIiZq5^VaMzGCTrH49gg)^NdNd hvKCr_w~-<6(+m9n#JVshnIWc)3np0yv27F}{{Sqf>-_)# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 000000000..5ddbeff5c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,358 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:01+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Humanize" +msgstr "Humanizovanje" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-ti" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "one" +msgstr "jedan" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "četiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedam" + +msgid "eight" +msgstr "osam" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "danas" + +msgid "tomorrow" +msgstr "sutra" + +msgid "yesterday" +msgstr "juče" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "now" +msgstr "sada" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..31ca3f783e54d656c5e057ef4219ba3f0b8d8342 GIT binary patch literal 4066 zcmb`IO^g&p6vqo${1`+L6+u)QVPzNSotb5UWyorR3jyPX4_7qt)J)gR^zKa6(p@vV zD-t<)F(H~@G$aZ!nvDm!7!y1gF=0ebCLV|v6EA8a%E^PCO#Hv@H@(x-GaC<9QvIv< z>fi6xS9krirte*WvKRF+)L)hfaRj`)91oP=`h-{o-U8Qve}kLB%nBj4fjp^iZh>3DRY*elc7f!7h50(T5%$L*z1IXu_bd0WyeIN!na4oN7l6yb zIp%BNeX!3m-v%FneTnTW%An5ze;FkGG)Vd8!8^b+Y@Y=w{~OFVnQt-QVP0Tf zWPZf_gn60y8S@HA`MzX+&1`}+{~I9f<98tC{{h4&Abtd~jUtCi^PxiDY^&I4U`rBZ z1lHs1p`5$9ZGjY<_U%#BZKzM6QbC$9-#TzTIZ$ZdcA}1=(%$YuU5!fTV-M;O>IPIQ z!>CW9(ptC51KhwT7?v$e`rlBY?{00_iuMFYQS4xw&Ip|kDzq+irXND3Gem{<7+W6h z9obn_`rbC9(s!IkrF9kk1FozZXE3mwvTn0VzOGqH&%)Jks&xs$Nv~SV<_+XbTH3=o*G<{Q zY0?9YU5Dy5M|rPG;aD|K)s5uME$X^5gTb{ABX6|lv8HXyQ^L5x7t%I%C8d0P=# z6Tj6z5JzkY<32}O6!klPStodX_x9~ z%f5csa-De*A?Tr?up|k?_s~RZNGe{r%6QYrJ0vbI4WXNGvfqi zshPF^ubT;J(4SiP2+hZ&efGrz;i z52Nl(%7$SoHWJD11&3p@90&!J?V$0@KUeMbdV$7sJ`J*O-9x{m7#78AXy zTzAUSo|I0lV7)LaT`#Cu0~KRt3fb)J?Cg-CcfFFF8!GBrHX2k5Ren7iG_r%4iNg~I z7Kfi7%4MF#k&p`c=VvfLBj-$Zrs{ZVpH-~jxJonj;^aYlbWumSO47FvsG`RB$^~om zq-Ww`7ObF=Ia;O9*FLEIT2QdmOlSsU!~3kLIX0lIO=DJma9^hF?h2&qD1rMczTDa_ z8r&jN4o<`3y~ZAiZ!5m*rW@gZyhGXMO{i0sSL8@&C`;n@Q~vrMi~l&NE^EoVYY7gI<2mMg7G1Pomd4j`P>ofN`7-eS*jkL3BHQ>x9wB7Ku*_jr={XWe%Tg~mE9w@, 2011-2012,2014 +# Jannis Leidel , 2011 +# Johan Rohdin, 2021 +# Jonathan Lindén, 2014 +# Petter Strandmark , 2019 +# Rasmus Précenth , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 12:37+0000\n" +"Last-Translator: Johan Rohdin\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanisera" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}:a" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}:a" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}:e" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}:e" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljon" +msgstr[1] "%(value)s miljoner" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljarder" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljon" +msgstr[1] "%(value)s triljoner" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biljard" +msgstr[1] "%(value)s biljarder" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljon" +msgstr[1] "%(value)s kvintiljoner" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triljard" +msgstr[1] "%(value)s triljarder" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadriljon" +msgstr[1] "%(value)s kvadriljoner" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadriljard" +msgstr[1] "%(value)s kvadriljarder" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintiljon" +msgstr[1] "%(value)s kvintiljoner" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintiljard" +msgstr[1] "%(value)s kvintiljarder" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoler" + +msgid "one" +msgstr "ett" + +msgid "two" +msgstr "två" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fyra" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtta" + +msgid "nine" +msgstr "nio" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgon" + +msgid "yesterday" +msgstr "i går" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s sedan" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "en timme sedan" +msgstr[1] "%(count)s timmar sedan" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "en minut sedan" +msgstr[1] "%(count)s minuter sedan" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "en sekund sedan" +msgstr[1] "%(count)s sekunder sedan" + +msgid "now" +msgstr "nu" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "en sekund från nu" +msgstr[1] "om %(count)s sekunder" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "en minut från nu" +msgstr[1] "om %(count)s minuter" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "en timme från nu" +msgstr[1] "om %(count)s timmar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "om %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d månad" +msgstr[1] "%d månader" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d vecka" +msgstr[1] "%d veckor" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dagar" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d timme" +msgstr[1] "%d timmar" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minuter" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d månad" +msgstr[1] "%d månader" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d vecka" +msgstr[1] "%d veckor" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dagar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d timme" +msgstr[1] "%d timmar" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuter" +msgstr[1] "%d minuter" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0b789139b772962373c78f5c046c5edd67444a9 GIT binary patch literal 4146 zcmai$O^h2g6vquMw1kgBDgB@=bqmWTw6jUJE#0PURnZS9bVb$O!WD1ENv4_D>DbwH zSKWAKt;(Y4Fene4xy2WNaEd4ju#rI0e4x^v|6Bv*V__7%QUxuwxYr z(0<$TOR#|U@8IL$uDetJ^Wc88B}n?~PXEO5Cy?g<$8ma7>SxjMHE;_3AA_60??Li& z6QucXyLKL()V=_6a1DG4d>_P;*ta0I!frVJ2<}4rCiocm2Y4sA<(|}TD@dW*;kX;5 z{(T_%JK*%Z(+@coUH`1(90=F!BuM_A1M$yZ#K*hH$z^aF?cZ`~9Jbw??)MZ(dJUxb zyyf^gNO}0xar=GgzR!V_YYP^@k3fpk4i-Bxc~}OwfNy|@!1ur-;5Xn5cpH2gEWn7yzX~1(uY(l-FC4!HDIVW}+rS&(Bj7I} z!ovOn$^LK0e;qeGnD%c5sXynq#p&A|w>y0&Nb~FkDR287r(J&l(tJf!$`i%#QPi!d z*h;U^`sl2b(q`|I&I}duP2aD*sC3>a1~|%WCu+YSlnmkT6-?KQ8#O4NyXgTXKs|u^ zBsE3~$MX}Yl$(Be2oFeqFTOZFy?r4(>|s>OF`d)xs5?;ip^g@cG37mvO6LQ|u2(3Q zo9JmOzarv}EX5*CWLK zS~h2f`!rv+44FCL~`>^c7jP!TB(FStbUr#tILw2vyg) zOR}vK8!VW56b8?B>Lysy6`s5J(o%3bk;1|@I3ujA@Yz!NXizE#dLeyBJfVgL67*nF?3!UenCap5W=@d|vVW^SoR*kz=@~5VnYq zTwPu*l*VJ}SL<|3t#|2>@CwV!?9+NLv5ci(9oYrfO}zJM+`9X6s5aAUD&u*w-g}*S z?EQNBPRp22l$$1U3tpEDBPVpw8!qGBD~{*bWHM}6Hj{pBERlv~gz+32mQ}LZGkCq= z=g7JZ88*n)AS8axmovjAso8vytxxqN%i!flzdy!S>P-{bda`F&CQV-H71?-j$PA=rPXHdYD% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..5852ab39e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Weka kibinadamu" + +msgid "th" +msgstr " " + +msgid "st" +msgstr " " + +msgid "nd" +msgstr " " + +msgid "rd" +msgstr " " + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "milioni %(value).1f" +msgstr[1] "milioni %(value).1f" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "milioni %(value)s" +msgstr[1] "milioni %(value)s" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "bilioni %(value).1f" +msgstr[1] "bilioni %(value).1f" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "bilioni %(value)s" +msgstr[1] "bilioni %(value)s" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "trilioni %(value).1f" +msgstr[1] "trilioni %(value).1f" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "trilioni %(value)s" +msgstr[1] "trilioni %(value)s" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "kuadrilioni %(value).1f" +msgstr[1] "kuadrilioni %(value).1f" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "kuadrilioni %(value)s" +msgstr[1] "kuadrilioni %(value)s" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "kuintilioni %(value).1f" +msgstr[1] "kuintilioni %(value).1f" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "kuintilioni %(value)s" +msgstr[1] "kuintilioni %(value)s" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "seksitilioni %(value).1f" +msgstr[1] "seksitilioni %(value).1f" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "seksitilioni %(value)s" +msgstr[1] "seksitilioni %(value)s" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "septilioni %(value).1f" +msgstr[1] "septilioni %(value).1f" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "septilioni %(value)s" +msgstr[1] "septilioni %(value)s" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilioni" +msgstr[1] "%(value).1f oktilioni" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "oktilioni %(value)s" +msgstr[1] "oktilioni %(value)s" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "nonilioni %(value).1f" +msgstr[1] "nonilioni %(value).1f" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "nonilioni %(value)s" +msgstr[1] "nonilioni %(value)s" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "desilioni %(value).1f" +msgstr[1] "desilioni %(value).1f" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "desilioni %(value)s" +msgstr[1] "desilioni %(value)s" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "gogoli %(value).1f" +msgstr[1] "gogoli %(value).1f" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "gogoli %(value)s" +msgstr[1] "gogoli %(value)s" + +msgid "one" +msgstr "moja" + +msgid "two" +msgstr "mbili" + +msgid "three" +msgstr "tatu" + +msgid "four" +msgstr "nne" + +msgid "five" +msgstr "tano" + +msgid "six" +msgstr "sita" + +msgid "seven" +msgstr "saba" + +msgid "eight" +msgstr "nane" + +msgid "nine" +msgstr "tisa" + +msgid "today" +msgstr "leo" + +msgid "tomorrow" +msgstr "kesho" + +msgid "yesterday" +msgstr "jana" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s zilizopita" + +msgid "now" +msgstr "sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "Sekunde iliyopita" +msgstr[1] "Sekunde %(count)s zilizopita" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "Dakika iliyopita" +msgstr[1] "Dakika %(count)s zilizopita" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "Saa lililopita" +msgstr[1] "Masaa %(count)s yaliyopita" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "Sekunde moja kutoka sasa" +msgstr[1] "Sekunde %(count)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "Dakika moja kutoka sasa" +msgstr[1] "Dakika %(count)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "Saa limoja kutoka sasa " +msgstr[1] "Masaa %(count)s kutoka sasa" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77e9f9b72e8f0e776be6733ff81ebd237c3f9bd8 GIT binary patch literal 466 zcmYLE!A=4(6x8TxkDfi$!~+B$ZHWXdt}!Ac7>IHS!F3gRIa+{@~*so|Wf-sk19J4=_sMT{*9<5hPtnli6sd zO6vkle5O-)T4x>-D@ZhbO`z|T4CsYt8I&L`#@oO+@DAZzuug+<#?S~e^{K1Oqwf|t z1J=e7!CMW6h{n)$gYq%o$)+|7`+zehTgyyAqGTaR zA`6|9+A@SvP`cS{nxV?m3$<;|Z9&U@OHWI>FGutL02(B%N0ZTHaO}^UEb3bml)=5e zN-P-EHqbJc+VseLDV\n" +"Language-Team: Tamil (http://www.transifex.com/projects/p/django/language/" +"ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7439a30495b2dadc52d45c653b8db45a1209830 GIT binary patch literal 1327 zcmZ{i&ubKC7{_02THCc&jYX?8^;NJWhIe-+YF8)SQkp765)5JM$%A9|-PsAd@4LM7 zZZ9G^j7rZ!J~Td63Q$14|wUNmwunw(UqbP`@Elden0Qb z{yjX@V~~%bpF;nFjzBML!2x*$z6(AEhrp*fH^Kd|pMjr&|AJe=12`ye1bhcPobz)K zKXw!c^%J@OSne<94Dxs-=M?xp@~1)SHxGUQo(FrFc@f+T`yT|!zXQXE!F}LC@F+L| zo&~A?d+-x*6{NafK+509;}1aU^DyU=+`pOAfgd9N9NY!I$nCAT)K1tta~=e-UUp|7 zo4t+VWI%R6--FWZ?NFLofPMts10~rFrFTX5r&%=jO+w#}1gkJ6u5_2F8dI^7jGi@UYAlgUQn4gnW{G9CfuE6* zSzQZPaJIBD$hBR~R%BwOA@`ioi*mt=>6$n%O%iJr@Y-UiB3+o5ZEdWWO`^CazUf4X zsOo?h=FU~cl#!uDuJ|^zGT;-Qe?oY^@XOry1Ft;p`JRVFF)x>5>N&_O3-6ThPjUZ? z;J7#LK?*ZrVnx-2DrtsRn}DAUm5LKSBV)V{{w217`E@fhi?OQfuTZ0+P8dm1m0>I3 zRoU!B9X{HywjGp8-EOyNsbO4~%f$uVD)q1Q63x82WMyfrFgrbadT@Ea=oO~4vQlBG zl{Ri?<+3fcn_;Xb`9dQ!iL{mPs%ON>K_1PjOCwIJ1zn3(6!4RmV*6@K>QR_$(sveT zv}q*)SMAJ9Dif2u|5zDS{7{AaW0M8u((5i=cj2FzVJuCmgrEApxe;sJbpU~TG<4V>8 zEeG2m@LE6GVhzn`$6GJw_xfY, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "వ" + +msgid "st" +msgstr "వ" + +msgid "nd" +msgstr "వ" + +msgid "rd" +msgstr "వ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ఒక్కటి" + +msgid "two" +msgstr "రెండు" + +msgid "three" +msgstr "మూడు" + +msgid "four" +msgstr "నాలుగు" + +msgid "five" +msgstr "ఐదు" + +msgid "six" +msgstr "ఆరు" + +msgid "seven" +msgstr "ఏడు" + +msgid "eight" +msgstr "ఎనిమిది " + +msgid "nine" +msgstr "తొమ్మిది" + +msgid "today" +msgstr "ఈ రోజు" + +msgid "tomorrow" +msgstr "రెపు" + +msgid "yesterday" +msgstr "నిన్న" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s క్రితము" + +msgid "now" +msgstr "ఇప్పుడు " + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "ఇప్పటినుండి %(delta)s కు" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..76b769bd88bf974b274f881156a397dc52118c37 GIT binary patch literal 1580 zcmb`FOKco97{^^23M}Q(2haB49x5f!$v#RToiqpmty+nQs9oS}vff#T+417>W)nh1 zNQy|gAYKR5Q!hw}1KT!LLYoG0Lfky5goK2UIQCMh*Q!YUf4gpyz2lv4e*3pS+y8Iu ze|GnM$I$lsxCr9|pe$9|X^Xec%PpA3T2ox1+!9xdc8A zz2f;h_zd))Uf=Tk&vPdxQ~o~B7d(%6p74ARBp+1}4~xBScus-j_hS$b`wXu~z;mER zjo*MzLT|?+db@n>^GjU+$H!^vdC0d88{-IVBU8s%d6xMoMONMa;`Ml4h^!Y69Nq|%PQQ$8LHZ|2cn zRcV4_$%Muwh(bR6zOox8u||{|kDErs!EtTsX~>gCN2a5t5#Ief+Mny;aJS}G@oQ&iU3>kqTcwUmkaKPc zIoFY~e%`HgGUgc)+Sy_@&#(yw*OyuLxm(NTn7f`WtY4<_HMi_m(35@XuCm!PLAKyl o|95tLoP`f61jS~bx+{!aW^*@wcFSFR@B&M2DO, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2020-05-15 00:31+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Ба шакли оммафаҳм овардани қимат" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-ум" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-ум" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "як" + +msgid "two" +msgstr "ду" + +msgid "three" +msgstr "се" + +msgid "four" +msgstr "чор" + +msgid "five" +msgstr "панҷ" + +msgid "six" +msgstr "шаш" + +msgid "seven" +msgstr "ҳафт" + +msgid "eight" +msgstr "ҳашт" + +msgid "nine" +msgstr "нуҳ" + +msgid "today" +msgstr "имрӯз" + +msgid "tomorrow" +msgstr "пагоҳ" + +msgid "yesterday" +msgstr "дирӯз" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s пеш" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "ҳозир" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "баъд аз %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c11ee0a9db5fcf5cca337d307ce8ea6395a52c5 GIT binary patch literal 3709 zcmb7`TZ|M%6oyMd(LuZbUI5YZvM%eUcV@uLIxC>A5HY(EaN&gq(#+J%G@0pIx_b74 ziE)V$G(36G78THM?M-vkh|I=MF!*16E=+OOj{d3N# zI_Ff^^6S!tM;Weu-1p-SZ(wW)ymTWTxS|D&^@2^1Y<>fKz$FV4eH}>pF2jRh7UT1V zzk?3O%Wg{eJlKb^1Rnv9ffWCH@FDO|qc6HS(fbWw1!gg%{GHrG8-}6X1EhX>TH+cZjkJYX6%`9-B5w} z$ENWhzXRZ{;9KBf)c6QU`L50|b~m^YTng?0d%>#Fj~IRo-V6OZ!=J!=F#gMM!D7Z9 z#dsz7Ah;1+2JQy$1Qkg3ZyJ5p@C%UUzi9XixE$lZ4Hw>)#9aaApl<;4pfo%QK8^8Z z!^KM&D_}fq_&P{=Hw`Zu{s_W_{R~pxe}H#@{}_GI?Tn$NY&l5&t3a~r0q+9`jlK<} zI_?5d)_6|4`O{uoVKmy; ztY^)HTWg5Efqa?o@oF_s`d8ITqG++Ss}(6LvNk8AMXFok*)(7J7E8M-i=oBVuI_8N zrNCm{UH5!j^nDGxuEe;_ysJEAx3Aop$ z)6zXt+@{&OrFb_r-6^uQsg^b=-bGBch%7Clr9o}!rAFQLz5Rl@D4O301$QeFpHNXY z{IE~`a3WDvEVpgSfvlr^lQzTlZ!T6-lzwS`#6)dHG&XIoE2eH4wtsVdUX_hten8Sp zIAhTExFT9&)&50zm1@Y!-h^Of_%q-01*4QCsKkWunewJsSPg_=p)9%6c-CbQz$BcM zY+9&L1SD?_oh>D2rw9~IwE{2gb^VIWY!~A)2%S+?@k-7Mjf!%{WPxY4zB1+v z2f__u>%8cOqQKYY^3OQAypw+luZ1Vp_UH1s91NZ9V#1@C9lJp%_oR~_17gfk}GdV!Bs zU5~G+hT(W2o1L7T90)0#R~AzPMOn`#3AIo&zS*#v?aPdA8Qs)LJwK4k3`;*0K9)2+ zj@&|Q%ItW}_52}Tth#{`;rbn8o1MXq9nDo1fwRdk%97_-3Vd*n7q-`k7}d?N5^&ak#4@NqjNesHpe1;-q7Esc?S$h zIywtq9etylhjetXYryo8Lf+{EgjCyMk?84zfpp6$kjSY|o@5=Jj&uH8N2jdIRWSKb zM_{~pX=&zG&V#--~{uT*y94a zG{@siyl1a}rnKL+&G!!N0m|cyZXSp;KvCipubQ0Iwfn5PiIit`^d6dUHu)g&hHn%# zIK<+X%(P`J, 2011 +# Kowit Charoenratchatabhan , 2012,2018 +# Perry Roper , 2017 +# sipp11 , 2014 +# Vichai Vongvorakul , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-05-18 01:38+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "ทำเป็นภาษามนุษย์" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f หนึ่งล้าน" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ล้าน" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f สิบล้าน" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s พันล้าน" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ร้อยล้าน" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] " %(value)s ล้านล้าน" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrillion" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrillion" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillion" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillion" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillion" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillion" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillion" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillion" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" + +msgid "one" +msgstr "หนึ่ง" + +msgid "two" +msgstr "สอง" + +msgid "three" +msgstr "สาม" + +msgid "four" +msgstr "สี่" + +msgid "five" +msgstr "ห้า" + +msgid "six" +msgstr "หก" + +msgid "seven" +msgstr "เจ็ด" + +msgid "eight" +msgstr "แปด" + +msgid "nine" +msgstr "เก้า" + +msgid "today" +msgstr "วันนี้" + +msgid "tomorrow" +msgstr "พรุ่งนี้" + +msgid "yesterday" +msgstr "เมื่อวานนี้" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s ชั่วโมงที่ผ่านมา" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s นาทีที่ผ่านมา" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s วินาทีที่ผ่านมา" + +msgid "now" +msgstr "ขณะนี้" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s วินาทีต่อจากนี้" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s นาทีต่อจากนี้" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s ชั่วโมงต่อจากนี้" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..348e992ba07597316889291376fd3f29d049c062 GIT binary patch literal 4319 zcma);Uu+ab9LGnkBB!XJBKUVvD=n~hy@Nt~q#6;3BoMGx664eKcJ6MuyVxI8tQ-a;_Pl5M>-+(mERnP{nYk&QU$R7eN#B1Ot@Fa+# z*;gP+W0y29gOv9wNaOqq=D`g}k^^4{DgKV;G)Q&*4pP6BD zq^Y{0`5*WI{9BqUGK@V2e=SJytmcsBe$BTuk7zbEPiTG&(sOlN zq`d#=_$}~d_!b_1BRC3@|1L=SAHgB;21w7BMUgbG+d%RM!S&!vns0(n!4JSk!S}%@ zz;pWktmbc;H$l>`ekjuCK+^94XeC|p4L38`I+Vy zn&&kyXnqOO^L-6c-b>n_1u6e`nm>V5$1nQ+uOOC@?SMTDqeky+yV@J3TkmKK$n52^J8)D`ayEMD^)I~sDwPbe3Qx-vQH(J(CF&S zG9{>zg~p**!v>e`lwjOyxH42iFK)>TrRohXpN*o?n#Y=sB~J+Bd)x{{$&=2)5u<2( zM6HQ?b@#+0wuSLMF0HB;`U?l7m>y0G;vOBNMXLCYa4S{C%I>&eW%Or~tI+3ltHD@Wr@YDluN0j$&K}Tu9xiLNmZTiK;Dw|ObAhn<>V}> zZVEnMJvpX&j0fuWX2no0Gbe`jHfF@sFE<~CdYRcUv}tqUO2Oz$=YgK@xRTeczOG}( zu_SFb4>wTrZhniEFTl2%vI1P`#4@_;&%4`9alh$qH{BhkJ7BtlksF9{Az9!~GFA13 zV9KLit-OZk`*@%_>vbb=LnY-FEcF0JYU%df{N?d zyTVFfk9b8ZbLgNwEXG}u+Pk?DMXS(P$lHB`cA;S9cNDj7-`t0m*^eD$kN8{$b*?EMlPzSjk@lh zQ+}>Db70?rJ@b|4vwfLYuuX(S>gE_~Q({u(#_HUaJFQX`yIiQDH%9i_1M@n{RTjRz zN0vOSbERkvjJhf=6Jz+9Lv{LM*n2&{5fm*s)^dZP!cHr?9O{wQi&nmOX9jOz`|O;( zC`*D}ITKo3I{2Wu${pptkX9^#xP6Y|9Ba1T$VCH=2%s^J+LTb@$V>z%lQBvn&^j$m zO-jhC;ZQPFDWMvt1IU!6#;|4yT}muEAkFd8W3|L|1^6Z|%#p0F9htiz18j}CX*TNm zI2megja$*0#%GNgPFd>tuIU>=pMZLtRwg8MnR2hB>nreHEWgmDw5kzZjjehC>C#cMK<*{`lSkx8v0AxUBNB;&B(# zYtBv6AI+!+!!Zgn9HSt^Sy0Xbx1*$vOS2x+GYV=sj#mq(FzIf?acP&ZW5=_%ZB2nr e_``#(JUcUcj*W(`=fd}9Zdx+8=3;@cB>w~Y6@S41 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..ef2b60535 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,333 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmet Emre Aladağ , 2013 +# BouRock, 2018,2021 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Metin Amiroff , 2012 +# Murat Sahin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-09-22 17:36+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "İnsansı" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milyon" +msgstr[1] "%(value)s milyon" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milyar" +msgstr[1] "%(value)s milyar" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilyon" +msgstr[1] "%(value)s trilyon" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s katrilyon" +msgstr[1] "%(value)s katrilyon" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kentilyon" +msgstr[1] "%(value)s kentilyon" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s seksilyon" +msgstr[1] "%(value)s seksilyon" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilyon" +msgstr[1] "%(value)s septilyon" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilyon" +msgstr[1] "%(value)s oktilyon" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilyon" +msgstr[1] "%(value)s nonilyon" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desilyon" +msgstr[1] "%(value)s desilyon" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "bir" + +msgid "two" +msgstr "iki" + +msgid "three" +msgstr "üç" + +msgid "four" +msgstr "dört" + +msgid "five" +msgstr "beş" + +msgid "six" +msgstr "altı" + +msgid "seven" +msgstr "yedi" + +msgid "eight" +msgstr "sekiz" + +msgid "nine" +msgstr "dokuz" + +msgid "today" +msgstr "bugün" + +msgid "tomorrow" +msgstr "yarın" + +msgid "yesterday" +msgstr "dün" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s önce" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "bir saat önce" +msgstr[1] "%(count)s saat önce" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "bir dakika önce" +msgstr[1] "%(count)s dakika önce" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "bir saniye önce" +msgstr[1] "%(count)s saniye önce" + +msgid "now" +msgstr "şimdi" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "şu andan itibaren bir saniye" +msgstr[1] "şu andan itibaren %(count)s saniye" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "şu andan itibaren bir dakika" +msgstr[1] "şu andan itibaren %(count)s dakika" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "şu andan itibaren bir saat" +msgstr[1] "şu andan itibaren %(count)s saat" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "şu andan itibaren %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d yıl" +msgstr[1] "%(num)d yıl" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ay" +msgstr[1] "%(num)d ay" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d hafta" +msgstr[1] "%(num)d hafta" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d gün" +msgstr[1] "%(num)d gün" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d saat" +msgstr[1] "%(num)d saat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d dakika" +msgstr[1] "%(num)d dakika" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d yıl" +msgstr[1] "%(num)d yıl" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d ay" +msgstr[1] "%(num)d ay" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d hafta" +msgstr[1] "%(num)d hafta" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d gün" +msgstr[1] "%(num)d gün" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d saat" +msgstr[1] "%(num)d saat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d dakika" +msgstr[1] "%(num)d dakika" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..98df56f9585769d3b7d58d5a45e8e313e8cc2b67 GIT binary patch literal 3243 zcmb7^-)~e!6vs!Xzg9uTAE@=mAXZwM+udtaU~3JrLPTh6$ijn(F}K~>?SsQ?y-aT8fFj`Y^YR@y-8$nE2uoiQlt3ZEbgMiPN6@x#v4) z&Yd}DvVU%C`I2GmhP?nQ-N#rrcxw|L7~gGXY!^5Qc7ie32HrLL&X$IL*suzwF@N1~ z33T9ZzP~{i?129XxDz}NQvUD39pLXq|HtU94>aa`LHhnl!z&==`PJ|a*am<5gN$J* z>jCj;)@%4a_#FH`@FlPa(h<*@`ST!-#4Z_rVdgJ`l<%t1uNnQi;kRaf(r^lV2=O(L z^4$g>27duBqPD+*ROgQ%(mtw&m%-=Z*Nm?X{{mluzBSdL3v&25<5xh+_Z3)QZ+s0t z1^o{AEV${BMqI1mUXVjSW;g=Uey$k*Cy?^}0U`za8$^lOU69V#@+f25z%3xfaggfW z4O0Am!^0r0J8tGb25J3(;Yp(_!!g58LCSL$#6P=)2j%%1r1jr`C?{)&EsrhBFCgu0 z7wkpYRv3-lFuEf&UV}Yee``FbMl?8#zOx-h{d)q|3Zoi74Wm0t=cPS71EWFvqr0?& z91N6bWl#^Oe^eW)?~^bZufphj9WY#p`rQQBV=%P5e&@)i@iINy+DE)nMRatz1wP=H zN`4sJQ_G7%OQc;bhG8)*tx0K-%9eaKEeHckq+JaMl_l1$o~n5H$P%5b`++U{sft~f zV%Qd*D398st+KLhyh)Tz-L)yrJ(S$0t!ts=O~U%_N#3k9_f2w}*4#76ZJMoHk|(Ln zouXKqYH5??31U-=DAFQY8nhw_zc{2=!5WdQ z@&Z}%R2XIX2VM~Pk{=O1%E8~pZs6`O)!i;XD1`4|O;D_OMd9RxSI+XBr@V-_4=FXA zO{c5XYL}vXenE_O4Tj}(<3!6SnZ;?P(jBS3LwyHU&+c|*QoUiIM1Vbw4dZYM9ZnCI zJU{5>gF{{C%&!c z;_>9^IsK!)p=Yq)<-Iq3fI?>V!UkF5GrFdKzE{9pd}gDN@q|4{o>*8+C6^VG)A3n7 zjq=Q|)Ot;_|DF^R$%VvZav3qXaS=^GatS5huz+SdxqJv%Upyq7#nEf}CeuIY+4ys& zXBMa8)A2Y;vHY7AU&Ljt={XjEwsckB#0ABz#oGd3iDB`Ct}&!XA>#|kwi-%_v7!;N vcm>}>FBmS, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "че" + +msgid "st" +msgstr "че" + +msgid "nd" +msgstr "че" + +msgid "rd" +msgstr "че" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" + +msgid "one" +msgstr "бер" + +msgid "two" +msgstr "ике" + +msgid "three" +msgstr "өч" + +msgid "four" +msgstr "дүрт" + +msgid "five" +msgstr "биш" + +msgid "six" +msgstr "алты" + +msgid "seven" +msgstr "җиде" + +msgid "eight" +msgstr "сигез" + +msgid "nine" +msgstr "тугыз" + +msgid "today" +msgstr "бүген" + +msgid "tomorrow" +msgstr "иртәгә" + +msgid "yesterday" +msgstr "кичә" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s элек" + +msgid "now" +msgstr "хәзер" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "хәзердән %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..81ced8ab828e8c9e9a31b1dcc2635a69439dcb3b GIT binary patch literal 8809 zcmds*U2Ggz6~`~BNx)4?3H@$>+ZM;(Bx~>5PHJzwPHEDJ(neUtZFne%sdv1ddUwX1 znYH6OQPPB_6$*`n)KqGrtq>0gRjNtdCUt5@d`Ol0Kxg5J48&$lp()c&$od3P|%()*s>pyJmdY0jH0M|BLV;dOLz=yl=2cJKFoUtw7d*D{^ zL$DXzu#vHy;0~|{dv-%mlx>(3yKx8>@JFPce2K_#9XRUjd&4Z@-o?9sCiv0ABOyz<*kBGaAzZ z{H|c%XBhhq>~)a*_oLHe;QL?|{O0w6{Y&uc6u%+x{}?3QO(+WS97z3KcT>P0fRs<} z=D>aftie8TOOW>}_!R7S!FR#Kw+41EHU-(Qg2%z*pJnWA@IN4?oW1?IpdP;hQA+lE zFbn<#+zZ}_$=?rtRq#1*AMD?OdGJ;q=nsLUUjj*gLGYg->Gxsrkp4Kh1^fv}<6j18 ze%=AG#n`U}e=GQ&;0J;q3jSU2--2DY2koyG+$wmpAO~r@USSV{m{K+h(sO@V_z#1m z`v&+ikUkWr52lQ5z(wZ_Jrkzb|Iq%~A?^o3Oby$Ei`LZuu1&b^#I+k2mX-h6j=wo^ z{{_J>f>gU9Vc#V<3XX~U1~7g8nb)w##m!E^47dvy)f6T2KmCGtfWx@3EorihdZr(%La*OzKl%`_g@nTDd7HCGp#cgm`nZpQi9%Yir8)1fA^r6pk)(~!-S zWtNgX2Hr-GLKC*?=?i;o2*a3W@)@gUCp#pc=uQa27LncpRT$BY@{G%-jd`6-qdhY< zw`OY<*Qn~*=^F0!uAUMvX^Sj?lcJz*N#b{(q6un9DpAceon^W+zKm|tMqJSKSrQS` zG>f|CXGM%_<}}A`^<<5B`g1iDt)D7XwRon6CjE&Tip296rq1Xa#R4t6WSClo=em}T zp?VE757Tj*W_}mX58@h%%LZYZrBFsuyJ-%`#k=F?p165u+#HFUqk-w@^Sa3#;|OzS zY+YxrMN7=Js+Mizf!qa)E$WV|+vJ|Gtw;4KH+yd>`;cxs_`WRg(xaMLwz?nC=PcXJ z9&*Y?DSLOV>|`gc0`H#qO7;PL-XLlAfadB2KA6joWOF0g!C~AMa(i~>@aeuEs~|gR zYo=4tT+1$SSF<%|adB~$kNLO#vzGn%j5a&E=dN;9Gb;U4R&^ZB%yLaD>)AbrCl6*vnmQV5TDPc7(E_i{ zc287jXJ-#ucGW3xbIv!N;_zM`+!p&x-ox{}SmZgreLMH99GUs1nd7&?&hvfHpc7St z@gg5=HsE7LK1^oNdoIVvumbtfqoV&DALseu3_8q99f~GMAx8}w=6G>;tpCwWB#Qou z$S=$v;}!G6JVPT47WhzRZ+GOStbWp4_ui_XV)duI*Xt*|*S!loe1VI-LP2%TyHr0@ zKMUDPi;#D*MG$?QzoPI8(mL&3q>;Thk?UH#wG>W{E(zoeI*`0pKjpoK(J#eE58cU8 z!+<N#T}xzmppUZc9A)07%Z;pEdw0y)7BB0^sbSFni4aCmZ=m@bue3V!yIa14@bXZ15l!Eb5rEqfOwgTyp zjE*h^y@@0yz^&qROSMC~*Wv^GJl^86<+qu~lL3MZ6(BgQIK>fAN+;-!vF6 z{69tgNqF(rfNQOOiX$AnTBk_7i)|$zUEnQqe}%5_`f0pDuhUyB$GiSAz9>(nC6COm zywU%#3B6~m;thNa?`0`l*2`^SVYFbz0XeZ{q)=S!uCan}U>@ zHU-Lxb{y`wn#~?Nu4S`Hhn4KC0c{ZMp>y6_%)8u+AH^r@XXr=tI-Lsi&PV^6qt_ms z1!u%Peq%N7=y$NMpkH3WJ^jKI^Wn!rTl5y%@hDmGvnS~Z+DA1>h2JAyO7KW$>7+>5 zLEg=HBV)}sK%2CK%M3nzB{SHx2g&na D#`lkj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..42ed91365 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,482 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Kirill Gagarski , 2014 +# Max V. Stotsky , 2014 +# Mykola Zamkovoi , 2014 +# Alex Bolotov , 2013 +# tarasyyyk , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2018-08-24 20:06+0000\n" +"Last-Translator: tarasyyyk \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Humanize" +msgstr "Олюднювати" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ть" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ій" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ий" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f мільйон" +msgstr[1] "%(value).1f мільйонів" +msgstr[2] "%(value).1f мільйонів" +msgstr[3] "%(value).1f мільйонів" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s мільйон" +msgstr[1] "%(value)s мільйони" +msgstr[2] "%(value)s мільйонів" +msgstr[3] "%(value)s мільйонів" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f мільярд" +msgstr[1] "%(value).1f мільярди" +msgstr[2] "%(value).1f мільярдів" +msgstr[3] "%(value).1f мільярдів" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s мільярд" +msgstr[1] "%(value)s мільярди" +msgstr[2] "%(value)s мільярдів" +msgstr[3] "%(value)s мільярдів" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f трильйон" +msgstr[1] "%(value).1f трильйони" +msgstr[2] "%(value).1f трильйонів" +msgstr[3] "%(value).1f трильйонів" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трильйон" +msgstr[1] "%(value)s трильйони" +msgstr[2] "%(value)s трильйонів" +msgstr[3] "%(value)s трильйонів" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадрильйон" +msgstr[1] "%(value).1f квадрильйони" +msgstr[2] "%(value).1f квадрильйонів" +msgstr[3] "%(value).1f квадрильйонів" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрильйон" +msgstr[1] "%(value)s квадрильйони" +msgstr[2] "%(value)s квадрильйонів" +msgstr[3] "%(value)s квадрильйонів" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квінтильйон" +msgstr[1] "%(value).1f квінтильйони" +msgstr[2] "%(value).1f квінтильйонів" +msgstr[3] "%(value).1f квінтильйонів" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квінтильйон" +msgstr[1] "%(value)s квінтильйони" +msgstr[2] "%(value)s квінтильйонів" +msgstr[3] "%(value)s квінтильйонів" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстильйон" +msgstr[1] "%(value).1f секстильйони" +msgstr[2] "%(value).1f секстильйонів" +msgstr[3] "%(value).1f секстильйонів" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстильйон" +msgstr[1] "%(value)s секстильйони" +msgstr[2] "%(value)s секстильйонів" +msgstr[3] "%(value)s секстильйонів" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септильйон" +msgstr[1] "%(value).1f септильйони" +msgstr[2] "%(value).1f септильйонів" +msgstr[3] "%(value).1f септильйонів" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септильйон" +msgstr[1] "%(value)s септильйони" +msgstr[2] "%(value)s септильйонів" +msgstr[3] "%(value)s септильйонів" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октильйон" +msgstr[1] "%(value).1f октильйони" +msgstr[2] "%(value).1f октильйонів" +msgstr[3] "%(value).1f октильйонів" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октильйон" +msgstr[1] "%(value)s октильйони" +msgstr[2] "%(value)s октильйонів" +msgstr[3] "%(value)s октильйонів" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нонільйон" +msgstr[1] "%(value).1f нонільйони" +msgstr[2] "%(value).1f нонільйонів" +msgstr[3] "%(value).1f нонільйонів" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нонільйон" +msgstr[1] "%(value)s нонільйони" +msgstr[2] "%(value)s нонільйонів" +msgstr[3] "%(value)s нонільйонів" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f децильйон" +msgstr[1] "%(value).1f децильйони" +msgstr[2] "%(value).1f децильйонів" +msgstr[3] "%(value).1f децильйонів" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s децильйон" +msgstr[1] "%(value)s децильйони" +msgstr[2] "%(value)s децильйонів" +msgstr[3] "%(value)s децильйонів" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гуголи" +msgstr[2] "%(value).1f гуголів" +msgstr[3] "%(value).1f гуголів" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гуголи" +msgstr[2] "%(value)s гуголів" +msgstr[3] "%(value)s гуголів" + +msgid "one" +msgstr "один" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "чотири" + +msgid "five" +msgstr "п'ять" + +msgid "six" +msgstr "шість" + +msgid "seven" +msgstr "сім" + +msgid "eight" +msgstr "вісім" + +msgid "nine" +msgstr "дев'ять" + +msgid "today" +msgstr "сьогодні" + +msgid "tomorrow" +msgstr "завтра" + +msgid "yesterday" +msgstr "вчора" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s тому" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s годину тому" +msgstr[1] "%(count)s години тому" +msgstr[2] "%(count)s годин тому" +msgstr[3] "%(count)s годин тому" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s хвилину тому" +msgstr[1] "%(count)s хвилини тому" +msgstr[2] "%(count)s хвилин тому" +msgstr[3] "%(count)s хвилин тому" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s секунду тому" +msgstr[1] "%(count)s секунди тому" +msgstr[2] "%(count)s секунд тому" +msgstr[3] "%(count)s секунд тому" + +msgid "now" +msgstr "зараз" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s секунда від цього часу" +msgstr[1] "%(count)s секунди від цього часу" +msgstr[2] "%(count)s секунд від цього часу" +msgstr[3] "%(count)s секунд від цього часу" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s хвилина від цього часу" +msgstr[1] "%(count)s хвилини від цього часу" +msgstr[2] "%(count)s хвилин від цього часу" +msgstr[3] "%(count)s хвилин від цього часу" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s година від цього часу" +msgstr[1] "%(count)s години від цього часу" +msgstr[2] "%(count)s годин від цього часу" +msgstr[3] "%(count)s годин від цього часу" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "через %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d рік" +msgstr[1] "%d роки" +msgstr[2] "%d років" +msgstr[3] "%d років" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d місяць" +msgstr[1] "%d місяці" +msgstr[2] "%d місяців" +msgstr[3] "%d місяців" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d тиждень" +msgstr[1] "%d тижні" +msgstr[2] "%d тижнів" +msgstr[3] "%d тижнів" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d днів" +msgstr[3] "%d днів" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d година" +msgstr[1] "%d години" +msgstr[2] "%d годин" +msgstr[3] "%d годин" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d хвилина" +msgstr[1] "%d хвилини" +msgstr[2] "%d хвилин" +msgstr[3] "%d хвилин" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d рік" +msgstr[1] "%d роки" +msgstr[2] "%d років" +msgstr[3] "%d років" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d місяць" +msgstr[1] "%d місяці" +msgstr[2] "%d місяців" +msgstr[3] "%d місяців" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d тиждень" +msgstr[1] "%d тижні" +msgstr[2] "%d тижнів" +msgstr[3] "%d тижнів" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дні" +msgstr[2] "%d днів" +msgstr[3] "%d днів" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d годину" +msgstr[1] "%d години" +msgstr[2] "%d годин" +msgstr[3] "%d годин" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d хвилину" +msgstr[1] "%d хвилини" +msgstr[2] "%d хвилин" +msgstr[3] "%d хвилин" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..078d2e9fc3854556af8cbdeb473f174d4ba1d940 GIT binary patch literal 1347 zcmaiyO=uHA6vxMJjo)9l3e$twB9rX;RlBt!Y72f8t3)q~ux2Oemd#9+xOo$|Gc;4%Yn^L2-YD)7vde_ z2;$xb99W;gW8i1YA7C%??u~?O0k46Z!JC$MKx}f?=J&x($O~34f#%-0)hkxlmNonS zq2(iRJL>D8@p%mH02jao^zsxm{kUkt@Gj_rv!J>6+VTUq75PUn1AYRrNz3YAt^UpC z-$88h1BdbXY4vSr-uUdXJPhtf-UXWaEVvgu38KCBtOr1I$M~$R-FPtbpnb9vVZOiV z%Xl0_m}Pv8mzj4TVi%&*+GE9ShDUoQ{HV%%vu=?-2%{*J;=fwCLtQ6Ls}6;~MIM&M zG%1D?oD^kM5fKm(3Qip6YL9oKPC$Zqk8(0H!b^)aWPx&72Vx<$2r@rK(@zEYJP2M{ld3N_)n%u6VgztyarwV;2_r zWVRs7xz&Nz5ZSxAs>=0dMy`wut&i?zoy;XEG#6-Ts)E@xpVYZZa&3K?b2HdGzdqQ2*}Hqg9m|jjGCz*sxUP*rTG-PUFE719bIqut(7D zLF)DnWd8auCC}5D)_hw3znIQ;sO&7hNmk(buW$P2i=>e*BumZrBz=#^db3WN^`w!k zkYqWXOI{@_NrR;IbdDsA)_il3BulM%D+7&W3H9yUt?6{e)XpW1=G%4|#%a61SjDrn Xo-DVfX>&21X}go=a`F-;OKajU6L@(3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 000000000..2e889dd33 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "واں" + +msgid "st" +msgstr "پہلا" + +msgid "nd" +msgstr "دوسرا" + +msgid "rd" +msgstr "تیسرا" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ملین" +msgstr[1] "%(value).1f ملین" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f بلین" +msgstr[1] "%(value).1f بلین" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ٹریلین" +msgstr[1] "%(value).1f ٹریلین" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ایک" + +msgid "two" +msgstr "دو" + +msgid "three" +msgstr "تین" + +msgid "four" +msgstr "چار" + +msgid "five" +msgstr "پانچ" + +msgid "six" +msgstr "چھ" + +msgid "seven" +msgstr "سات" + +msgid "eight" +msgstr "آتھ" + +msgid "nine" +msgstr "نو" + +msgid "today" +msgstr "آج" + +msgid "tomorrow" +msgstr "آئندہ کل" + +msgid "yesterday" +msgstr "گزستہ کل" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..179f65717f22922b07efbe697ce5d9b1ca575fa1 GIT binary patch literal 1915 zcmb7^O>Z1U5QYob@Ua8~fk1!|8abA2q1g}M;EXZiBe4_|3(InH;?myfo$2gM_j)jjw01j{tH*QFrk&yTca6q|4g12USlVGuyC~eI%RsBwN*Yx!Me5&yo z!Op?Y!cRUxvBXC5MIfad}i!B-KlfQ#S<;4)~y zCGhi*|0eJj_zLn36yfL2gRI*G7r{K_KMDLA#E)*`f=B6xz@I=~&o3eVEyTYE{s}&c z@!MgX#g8FwfF*if0G~ws@xw&Vfu9C`2|kPXTM$3Gi3>{5k08%?E98F#A3^*F$aVh; z<9~xZ?+FazmKFj}gRDP`3+vB=T(1SP{!Nhe8z6pk5f>i60&?FwA-)FkdOiwy8K^*h zUWf4^$j?_G+O6#=T)DTW;au|tIED#ZTd(OE@HG4-INRg!Q}7o#fV~WF!udNn183v4 z&y45iIr)9E@jBT~!k>rpw>PteaKn4R-y7y-|>LhxvN?o*TW6|9HFxpWEnx)Z2=~XOV?{qIj z-EP!l;w_0(tGF-qPFhHv zw|cgC8x>4i$y7zVN*1xWI@wbLv66W|jN9$eXw>ptUH8=?>)X?1&ya_Q+tsAK+T6Ol zb?IJ%-BzdhKDI#_tZ+O;3tk=i_Ar;)tczZTPel2RtGk=g+C3f5)mLS7$@FZZO&W`} zJ?-xbk>{qoo}0?5aMvCak%#Nz7$8(&Kf=b zue9_*>*QddC$y(rhK*h>Js*cbh1!X5R@ULPIA?5qgfrRqlEbmi|F0Z#?C)d3%uaMk fd+@RHUX#V&1y#L_?6M(MdYMYnSQ-r!-YWeA_|ni2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 000000000..b85d5b8fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,353 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A'zam Mamatmurodov , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-11-13 09:18+0000\n" +"Last-Translator: A'zam Mamatmurodov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "bir" + +msgid "two" +msgstr "ikki" + +msgid "three" +msgstr "uch" + +msgid "four" +msgstr "to'rt" + +msgid "five" +msgstr "besh" + +msgid "six" +msgstr "olti" + +msgid "seven" +msgstr "yetti" + +msgid "eight" +msgstr "sakkiz" + +msgid "nine" +msgstr "to'qqiz" + +msgid "today" +msgstr "o'n" + +msgid "tomorrow" +msgstr "ertaga" + +msgid "yesterday" +msgstr "kecha" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s oldin" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s soat oldin" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s daqiqa oldin" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s soniya oldin" + +msgid "now" +msgstr "hozir" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yil" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d oy" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hafta" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d kun" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d soat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d daqiqa" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yil" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d oy" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hafta" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d kun" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d soat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d daqiqa" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c0b900c798a9f98e4d3aab1efbdef3f2c0a26b6 GIT binary patch literal 3646 zcmai#UyKt)9LEPmPwO8LMLRm5dF6yTDP<1_#0OTK`<@KWPr!!&nyf z9hybZ!uTD{ufP$E?|@st4fjUzC&8yN79i>8w0>3ddyt<0kLJ)o6z90+Yv3U4AA$FQ z-+&b7Hb~F^TaSlfr14>pgJ;3#z>6T3#BPCj7525}ci;w$Z-Y;Pe}H#^tL~5d)_|0% zb($MNvTp_{-ZNSs*7`QhthR60oB$D;?Exv?OCWyi5H9CYlM~=-jDN`>CioY)8C>@O zV~>L4Am#56_yp*I>%lj{wcsMS3A_eUoqqt=fq#MzgP8}Td~5*8uK+#*zM}QhAjNwd zd>p(2(sP^OM(|tB-$8obz(djdYyv5NTfxV`y?T5?k9|FU1EhHGgOvZzG_Qe_$1g#O zdjrIe{fGETFv#E8$rtdQy}Gi2&6jXwZ0QX z89IBL{OEh3Jg-5Asnh8F=v{Nsuydt7Lycll-YK`V-^S3fl{+~FIt@!_NMEN>t+(m> zL6CAx%|fU8Z>2#`@=SY$@k+J+7Kjl^`t}p*rD~Y1P)2uqa@A#EONQ2}V;+Zt*OM|Cb z^^3~jYgW(H>{4LxUS4;lDf*e3Sr0|ki3%Czv57^bRgQqnaHxk>9QVaQWL zfAvD1R?>9~xk*dcEaWE5RIQLNr=}}Kz9!XBrjRcqrb?U9dUKXVO-+z^*9Q6DtRYOQNFektnFy5(knc zCS55QrNak<5(`CLNEW&aEL2RD@e71t$}iasTs=Ps;H&0+))1i*0m(-L|FkG7>tM+` zDS{A3V}X}W+tTqf$3)c+lrqT3M0^gp?@3eAx zD?iTj`9f}dG?&li;AkBab(dl;`Hfq-UDoy;JU>y``TS@OEpylol{FjKGOXCj4+@;_ z`APH_>b6u1-rj~?_WiMly3KYG@j2&{dw=$BmS6!^p`SH&wW@Vc8hTA?yq`~AQR3tUz^!*DXcn@6{k zx!sw>Ux;cquO)@RZ8y)=I2o2MNtcAFtDOu^uL4VAvl&<Ji-q^u9#@ zs(Wmy1te|V%CY!7?Kyd><<@nDoZR}f-Mm=D#Q1QHETLWN6&<(rLBr@CSyJxp<|TtW zcd#Wcaq^yREqd(8&DT9P)oxyptk_yCmif&K^qlyt!xFlu9?ikAHeGIgB3ZrNyo!S# zOLwCwY^L3OPtiFy)xQ2=gB@=z*7QL)WwQgVFYwoZ6YYr8y4>KN?Xm;ZNygtJ`xntp B`UL<0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..4b7cd6e55 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,235 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Humanize" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f triệu" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s triệu" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f tỷ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s tỷ" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f nghìn tỷ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s nghìn tỷ" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f triệu tỷ" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s triệu tỷ" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f tỷ tỷ" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s tỷ tỷ" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f nghìn tỷ tỷ" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s nghỉn tỷ tỷ" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f triệu tỷ tỷ" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s triệu tỷ tỷ" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nghìn tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nghỉn tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f triệu tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s triệu tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f tỷ tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s tỷ tỷ tỷ tỷ" + +msgid "one" +msgstr "Một" + +msgid "two" +msgstr "Hai" + +msgid "three" +msgstr "Ba" + +msgid "four" +msgstr "Bốn" + +msgid "five" +msgstr "Năm" + +msgid "six" +msgstr "Sáu" + +msgid "seven" +msgstr "Bảy" + +msgid "eight" +msgstr "Tám" + +msgid "nine" +msgstr "Chín" + +msgid "today" +msgstr "Hôm nay" + +msgid "tomorrow" +msgstr "Ngày mai" + +msgid "yesterday" +msgstr "Hôm qua" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "cách đây %(delta)s" + +msgid "now" +msgstr "vừa mới đây" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s giây trước" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s phút trước" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s giờ trước" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s giây sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s phút sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s giờ sau" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e0e6617e19be435b17177c36bf9d5774678858e9 GIT binary patch literal 3844 zcmb`IU2GIp6vwYxMON_x6+uu3wbBB!-7PJY#Tp_Xk%S6j<%L8u-M!tNvOBZP%=QC< zK@kNlRT23Rh#Ey8)`*EBEeernhz}+tJozFI?ruelF=(PbX#Ag@)7eg^EhKu=v%h=( z_dn;}z4y-c`-v5A2(D@ClIg&CHKMTGx4yo*O^j_0@yqlOXA@Gf#mu-$jtN z>R0CP;7!Q?WR437aVPRgAn9RdBXc=(4YQ5e#oWr=4bt~~AEfzuIX}ug24d;ra~}U1 z#1h0eU>0Y34!jZhVtm{TJ`UajYTy*m0w;srtRH0k80%-57noO1aQ#!6bs*Ji0%_i- zz&pSc^BIut&raqc*87=fLHb@r=163m#sL|O|t4G{g>Is2Yu+->1q!w{edfz8; zAIDod*V*8M2n9jE57g*>)7`oqQH7vJcM4l0uBHU-9t6E_cT<8!?>e2MsH{rJw4+tq zik38oWUZE&Q4F&KQoEMUNf=u6bXqr!F_naj2V5g*Nz+W4=^>>8LMBirs2HXZaE+vy zaVOv#Nn4lG5>~)DnyMSYs_SwiskY1pt)qyYBRNM9o!~+}>Cs$9GxYURXi7#ma*pJ~ zjhi{cskTqQ?W*pXd!8Xj9x!@inqteiX(WbMbk)I%?D3wetnw-j8oe>iP*P^j8eWhz zF2@G%i6PZomp3ByWXch(db<>@cwQKqle4t6qi3YrnnPb!R8|?eOm#v@XkEB|Uf&+e zOS5?9(v)Ml-OcsX>_&{twqf7 z+iH;-3C~8ORynQno9q4QTz@*xpEmf@`EF{xp3Tg7=9y}(~?qcmRcsJEK1=7Y^hXHN2^w`s+Y>ttWQ0?=&_pWP}8!eCFSoH4M#$YaFL{e#dT$|dPjCTHQBVL8w-?p z3h#k*8lP-lsy38;G+nE-)FnpT#7#)Xl!g}F@m3sDN^^x)rs-!zU20kxJEj=fQffCw z7btGGF|r_p7nJ|C7Pf6KC;7gY3$OMdAN;pk*#2z3|I`p6iai~8^Z97B*!xa#SD$Z$ z^hhKyFtGPz{`iYNr&}XvQV4i&n0Va5E9 zp|JIZ3p?JT%_(h`Up;Zq-7;1O4(%9jBx#tdaP*bp?qkD^th(O9mJhI&ouaUBA6DZ2 zFDULl==EK5IW4WxON;xrdi}y{hs*uGPrUyBQ!U?jKn(O8E$lxm^2axcf!^K?8~@X1 g{`h85*zzH&Z4>zuFBRT9B8q!@2>JeQbPrSaU+=Xi0RR91 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..abbb1b0a0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# lanbla , 2021 +# Jannis Leidel , 2011 +# Jenny Qian , 2018 +# Lele Long , 2015 +# Ronald White , 2014 +# Suntravel Chris , 2019 +# wang zhao <672565116@qq.com>, 2018 +# Xiang Yu , 2014 +# ced773123cfad7b4e8b79ca80f736af9, 2011 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-07 14:40+0200\n" +"PO-Revision-Date: 2021-11-22 03:16+0000\n" +"Last-Translator: lanbla \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "人性化" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "第{}" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 百万" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 十亿" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 万亿" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 1000的5次方" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 1000的4次方" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 1000的7次方" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 1000的8次方" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 1000的9次方" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 1000的10次方" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 1000的11次方" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 10的100次方" + +msgid "one" +msgstr "一" + +msgid "two" +msgstr "二" + +msgid "three" +msgstr "三" + +msgid "four" +msgstr "四" + +msgid "five" +msgstr "五" + +msgid "six" +msgstr "六" + +msgid "seven" +msgstr "七" + +msgid "eight" +msgstr "八" + +msgid "nine" +msgstr "九" + +msgid "today" +msgstr "今天" + +msgid "tomorrow" +msgstr "明天" + +msgid "yesterday" +msgstr "昨天" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s小时之前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s分钟之前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s秒之前" + +msgid "now" +msgstr "现在" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s秒以后" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s分钟以后" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s小时以后" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s之后" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d 年" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d 月" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d 周" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d 日" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d 小时" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d 分钟" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d 年" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d 月" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d 周" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d 日" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d 小时" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d 分钟" diff --git a/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2be75b5f1a08d13b99c357baac27eb42bfa39e43 GIT binary patch literal 4520 zcmbuBYitx%6vwZKAQcorP!V)g3SG*yyFA;4B5y?@Hn@T&BxLB`?hfqEEHkq$&xE(U z3Iv6Kyfl&k3JDq#p+pju7{do+{9^cGRJtwjMNLfnfFJyynX}uS-C2zBre}Zm{O8FPl#G@99Ru50ZHG$ z`f29(U_JD|ndAElp~7Fr+zp1{Uj|a{T>$Ld9V&7y%{9kVIBu*{_D)&LCQ07 zfXDeDtt$iKkvI%eo>L&r|26x6us^Iy2nG5aa2yy1QL5Mv(yKVcd>^EBodPM}mmsYx z2hx0l9`W>v%%$LS(AR@B?ifgMU-0u=toI-2Jr992-)rE5U^6oYJ_`RWW&(T?ejEGy zm?xO$nOB)Nm^YcXnSX&)XFqH*%{LGve=u`6NbheXKd%Py%0vikdq9YZAX12ru{h%A zAf1!z%pbvF@b9uO9`l|LWsYGsG8cmQ6U*5*+1~;VhJKLw5jYh7CHB8%-elfo-eV5L zU@TRP0x3@|`_n)#-!N}5zXNg9#Sb9my~+M9_V2R) zC-WY&&*NVF0FcHHWq$#X8i>FAA&d@ZliNSjm`nSUfl1Qmq2>o)ad?S?dM(3y= z)*m(%HW`NPblVtwhPgkQISZTvo5=o5W+OPA`+1B)XKvmBXK=rk83M<{s7AWC)apFA z_kI%k!(nu{>Aq5X7KUT)HoD{3TKA6Pio17+&O;5X2{sKz?FA2o&uF3Nb?D4SV9&s4 zAMiCJ@M?tuQ(+CT*)VD&JcuViItx#cUtJTIDMt(0ik2{oyjIIhD~8z)sZC2|WvDLF zs;tmcDcv;wRg24(fXHAqVVVguX@+S8LRN;x#6G=z3>TOcAV!SXkCu?abM^8(&HH*INTOC*8+FIekt`I?KDa1`*A;x=$ z6vc0|Qk-cxNjHo-m1b<0auo#;E5)ppn!75ZKPIEu&iyLOKd)R@KH~mW6{7A_Q$D70 zMfr%5dUQhy`b9B8(~9ecmQuof*Kfqz%exV{w$tlI#w(Etu!;V#32=>gA&j0{z3wD` z@MOO`#qUn_yA6J~(Q|FtCJkZhYlM@uq!f-xN6azPre&cZr`;55rR_+I{kH72!m6p`2lTPig%O>ftXkW!O$oJ_R7zP-J@&Y|3Tt6W1v>%B$i zk>Wh{>ypc3OY1{bixw=J*IQwvE?hMSr$!oB;@S*qaPX~GpGj%DF->Vn;zUcQ>CM=D zwV^kTrfZd!I?re^aUK#;rD28c6qX!S+_|cnQ*_DI`KFb&ql%GnUArkVP4T)-;b~R9 z|GMOMbrd<*_WJ&{$aQSaZQE8Vb$6cdNj>K-=1!mKK6Kfy9=&$^!1+=Mu|6r+v9;&S zg;FWEeTPr#IeM+Dvm{s9sLi>P@A^g+XR(!%T3n&H5?d*+1Dd}IS17K5()cQH1^>(? zt4EHawR;OIS~&z%-__aKz3EJD?_pHLKNd=E=Z-rEj(8hZqPhE)*Luzz^aqjPi^yHv z-+gq8KZrHN<+gu<`QH<{W5?(_ICuJ-3wMm$+lk$QzG+YQ@txGWv*}Y;xN^zGe~It9 zazga%zm_|GR&-t7Bzn%DU%&BxeRf^miUKYm+b+>{bvG@(`^Y{*SLa@I&r, 2015 +# Jannis Leidel , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016,2019 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-09-18 09:08+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "人性化" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "第{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "第{}" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f 百萬" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 百萬" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f 十億" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 十億" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f 兆" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 兆" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f 千兆" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 千兆" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f 百京" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 百京" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f 十垓" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 十垓" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f 秭" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 秭" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f 千秭" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 千秭" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f 百穰" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 百穰" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f 十溝" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 十溝" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f 穰大數" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 穰大數" + +msgid "one" +msgstr "一" + +msgid "two" +msgstr "二" + +msgid "three" +msgstr "三" + +msgid "four" +msgstr "四" + +msgid "five" +msgstr "五" + +msgid "six" +msgstr "六" + +msgid "seven" +msgstr "七" + +msgid "eight" +msgstr "八" + +msgid "nine" +msgstr "九" + +msgid "today" +msgstr "今天" + +msgid "tomorrow" +msgstr "明天" + +msgid "yesterday" +msgstr "昨天" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s 小時前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s 分鐘前" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s 秒前" + +msgid "now" +msgstr "現在" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s 秒後" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s 分鐘後" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s 小時後" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s後" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d 個月" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 天" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 小時" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d 個月" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 天" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 小時" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" diff --git a/venv/Lib/site-packages/django/contrib/humanize/templatetags/__init__.py b/venv/Lib/site-packages/django/contrib/humanize/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c99557b5b1f0c694b4136b1e2a1e29f024496ff5 GIT binary patch literal 210 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/humanize/templatetags/humanize.py b/venv/Lib/site-packages/django/contrib/humanize/templatetags/humanize.py new file mode 100644 index 000000000..07bb70b18 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/humanize/templatetags/humanize.py @@ -0,0 +1,322 @@ +import re +from datetime import date, datetime +from decimal import Decimal + +from django import template +from django.template import defaultfilters +from django.utils.formats import number_format +from django.utils.safestring import mark_safe +from django.utils.timezone import is_aware, utc +from django.utils.translation import gettext as _ +from django.utils.translation import ( + gettext_lazy, + ngettext, + ngettext_lazy, + npgettext_lazy, + pgettext, + round_away_from_one, +) + +register = template.Library() + + +@register.filter(is_safe=True) +def ordinal(value): + """ + Convert an integer to its ordinal as a string. 1 is '1st', 2 is '2nd', + 3 is '3rd', etc. Works for any integer. + """ + try: + value = int(value) + except (TypeError, ValueError): + return value + if value % 100 in (11, 12, 13): + # Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). + value = pgettext("ordinal 11, 12, 13", "{}th").format(value) + else: + templates = ( + # Translators: Ordinal format when value ends with 0, e.g. 80th. + pgettext("ordinal 0", "{}th"), + # Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. + pgettext("ordinal 1", "{}st"), + # Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. + pgettext("ordinal 2", "{}nd"), + # Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. + pgettext("ordinal 3", "{}rd"), + # Translators: Ordinal format when value ends with 4, e.g. 84th. + pgettext("ordinal 4", "{}th"), + # Translators: Ordinal format when value ends with 5, e.g. 85th. + pgettext("ordinal 5", "{}th"), + # Translators: Ordinal format when value ends with 6, e.g. 86th. + pgettext("ordinal 6", "{}th"), + # Translators: Ordinal format when value ends with 7, e.g. 87th. + pgettext("ordinal 7", "{}th"), + # Translators: Ordinal format when value ends with 8, e.g. 88th. + pgettext("ordinal 8", "{}th"), + # Translators: Ordinal format when value ends with 9, e.g. 89th. + pgettext("ordinal 9", "{}th"), + ) + value = templates[value % 10].format(value) + # Mark value safe so i18n does not break with or see #19988 + return mark_safe(value) + + +@register.filter(is_safe=True) +def intcomma(value, use_l10n=True): + """ + Convert an integer to a string containing commas every three digits. + For example, 3000 becomes '3,000' and 45000 becomes '45,000'. + """ + if use_l10n: + try: + if not isinstance(value, (float, Decimal)): + value = int(value) + except (TypeError, ValueError): + return intcomma(value, False) + else: + return number_format(value, use_l10n=True, force_grouping=True) + orig = str(value) + new = re.sub(r"^(-?\d+)(\d{3})", r"\g<1>,\g<2>", orig) + if orig == new: + return new + else: + return intcomma(new, use_l10n) + + +# A tuple of standard large number to their converters +intword_converters = ( + (6, lambda number: ngettext("%(value)s million", "%(value)s million", number)), + (9, lambda number: ngettext("%(value)s billion", "%(value)s billion", number)), + (12, lambda number: ngettext("%(value)s trillion", "%(value)s trillion", number)), + ( + 15, + lambda number: ngettext( + "%(value)s quadrillion", "%(value)s quadrillion", number + ), + ), + ( + 18, + lambda number: ngettext( + "%(value)s quintillion", "%(value)s quintillion", number + ), + ), + ( + 21, + lambda number: ngettext("%(value)s sextillion", "%(value)s sextillion", number), + ), + ( + 24, + lambda number: ngettext("%(value)s septillion", "%(value)s septillion", number), + ), + (27, lambda number: ngettext("%(value)s octillion", "%(value)s octillion", number)), + (30, lambda number: ngettext("%(value)s nonillion", "%(value)s nonillion", number)), + (33, lambda number: ngettext("%(value)s decillion", "%(value)s decillion", number)), + (100, lambda number: ngettext("%(value)s googol", "%(value)s googol", number)), +) + + +@register.filter(is_safe=False) +def intword(value): + """ + Convert a large integer to a friendly text representation. Works best + for numbers over 1 million. For example, 1000000 becomes '1.0 million', + 1200000 becomes '1.2 million' and '1200000000' becomes '1.2 billion'. + """ + try: + value = int(value) + except (TypeError, ValueError): + return value + + abs_value = abs(value) + if abs_value < 1000000: + return value + + for exponent, converter in intword_converters: + large_number = 10**exponent + if abs_value < large_number * 1000: + new_value = value / large_number + rounded_value = round_away_from_one(new_value) + return converter(abs(rounded_value)) % { + "value": defaultfilters.floatformat(new_value, 1), + } + return value + + +@register.filter(is_safe=True) +def apnumber(value): + """ + For numbers 1-9, return the number spelled out. Otherwise, return the + number. This follows Associated Press style. + """ + try: + value = int(value) + except (TypeError, ValueError): + return value + if not 0 < value < 10: + return value + return ( + _("one"), + _("two"), + _("three"), + _("four"), + _("five"), + _("six"), + _("seven"), + _("eight"), + _("nine"), + )[value - 1] + + +# Perform the comparison in the default time zone when USE_TZ = True +# (unless a specific time zone has been applied with the |timezone filter). +@register.filter(expects_localtime=True) +def naturalday(value, arg=None): + """ + For date values that are tomorrow, today or yesterday compared to + present day return representing string. Otherwise, return a string + formatted according to settings.DATE_FORMAT. + """ + tzinfo = getattr(value, "tzinfo", None) + try: + value = date(value.year, value.month, value.day) + except AttributeError: + # Passed value wasn't a date object + return value + today = datetime.now(tzinfo).date() + delta = value - today + if delta.days == 0: + return _("today") + elif delta.days == 1: + return _("tomorrow") + elif delta.days == -1: + return _("yesterday") + return defaultfilters.date(value, arg) + + +# This filter doesn't require expects_localtime=True because it deals properly +# with both naive and aware datetimes. Therefore avoid the cost of conversion. +@register.filter +def naturaltime(value): + """ + For date and time values show how many seconds, minutes, or hours ago + compared to current timestamp return representing string. + """ + return NaturalTimeFormatter.string_for(value) + + +class NaturalTimeFormatter: + time_strings = { + # Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' + "past-day": gettext_lazy("%(delta)s ago"), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "past-hour": ngettext_lazy("an hour ago", "%(count)s hours ago", "count"), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "past-minute": ngettext_lazy("a minute ago", "%(count)s minutes ago", "count"), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "past-second": ngettext_lazy("a second ago", "%(count)s seconds ago", "count"), + "now": gettext_lazy("now"), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "future-second": ngettext_lazy( + "a second from now", "%(count)s seconds from now", "count" + ), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "future-minute": ngettext_lazy( + "a minute from now", "%(count)s minutes from now", "count" + ), + # Translators: please keep a non-breaking space (U+00A0) between count + # and time unit. + "future-hour": ngettext_lazy( + "an hour from now", "%(count)s hours from now", "count" + ), + # Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' + "future-day": gettext_lazy("%(delta)s from now"), + } + past_substrings = { + # Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' + "year": npgettext_lazy( + "naturaltime-past", "%(num)d year", "%(num)d years", "num" + ), + "month": npgettext_lazy( + "naturaltime-past", "%(num)d month", "%(num)d months", "num" + ), + "week": npgettext_lazy( + "naturaltime-past", "%(num)d week", "%(num)d weeks", "num" + ), + "day": npgettext_lazy("naturaltime-past", "%(num)d day", "%(num)d days", "num"), + "hour": npgettext_lazy( + "naturaltime-past", "%(num)d hour", "%(num)d hours", "num" + ), + "minute": npgettext_lazy( + "naturaltime-past", "%(num)d minute", "%(num)d minutes", "num" + ), + } + future_substrings = { + # Translators: 'naturaltime-future' strings will be included in + # '%(delta)s from now'. + "year": npgettext_lazy( + "naturaltime-future", "%(num)d year", "%(num)d years", "num" + ), + "month": npgettext_lazy( + "naturaltime-future", "%(num)d month", "%(num)d months", "num" + ), + "week": npgettext_lazy( + "naturaltime-future", "%(num)d week", "%(num)d weeks", "num" + ), + "day": npgettext_lazy( + "naturaltime-future", "%(num)d day", "%(num)d days", "num" + ), + "hour": npgettext_lazy( + "naturaltime-future", "%(num)d hour", "%(num)d hours", "num" + ), + "minute": npgettext_lazy( + "naturaltime-future", "%(num)d minute", "%(num)d minutes", "num" + ), + } + + @classmethod + def string_for(cls, value): + if not isinstance(value, date): # datetime is a subclass of date + return value + + now = datetime.now(utc if is_aware(value) else None) + if value < now: + delta = now - value + if delta.days != 0: + return cls.time_strings["past-day"] % { + "delta": defaultfilters.timesince( + value, now, time_strings=cls.past_substrings + ), + } + elif delta.seconds == 0: + return cls.time_strings["now"] + elif delta.seconds < 60: + return cls.time_strings["past-second"] % {"count": delta.seconds} + elif delta.seconds // 60 < 60: + count = delta.seconds // 60 + return cls.time_strings["past-minute"] % {"count": count} + else: + count = delta.seconds // 60 // 60 + return cls.time_strings["past-hour"] % {"count": count} + else: + delta = value - now + if delta.days != 0: + return cls.time_strings["future-day"] % { + "delta": defaultfilters.timeuntil( + value, now, time_strings=cls.future_substrings + ), + } + elif delta.seconds == 0: + return cls.time_strings["now"] + elif delta.seconds < 60: + return cls.time_strings["future-second"] % {"count": delta.seconds} + elif delta.seconds // 60 < 60: + count = delta.seconds // 60 + return cls.time_strings["future-minute"] % {"count": count} + else: + count = delta.seconds // 60 // 60 + return cls.time_strings["future-hour"] % {"count": count} diff --git a/venv/Lib/site-packages/django/contrib/messages/__init__.py b/venv/Lib/site-packages/django/contrib/messages/__init__.py new file mode 100644 index 000000000..40ba6ea6c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/__init__.py @@ -0,0 +1,2 @@ +from django.contrib.messages.api import * # NOQA +from django.contrib.messages.constants import * # NOQA diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b93794ecedb6e37f31350419085cab77fab9fbab GIT binary patch literal 286 zcmd1j<>g`kf{$@`ld^#HV-N=!FabFZKwK;WBvKes7;_jxAT%S8W(sD|WPS;hVbEl} z#i-?{$rL4>l9ia3p0AgjpI1_pnWUGST3no%o?5JzSdbZ|h)WWvy0|1UucUY-LlHC3 zI56=m!`Uh(v^ce>I3}nRXiAJresXDUDo|C7duEA8X;O?^W>Im8Za`6fR%&udOj&AP zS&UC+QcQ7XNvdu^VsbXf;uwgX`cMby!yKd^AD@|*SrQ+wS5SG2!zMRBr8FnijuB{i MF$<93VBlc{0F}H{82|tP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/api.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/api.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..142015155db3163521668b2290b3f6c1c7005e5c GIT binary patch literal 2930 zcmbtWOK;mo5a!dAXjyUI?`9h`b%Z*~p|_$)<2tevG*$}RNf1FOMRQjQU5Zq8mvL+; zm)h6jKWm=`D;MawSX?hwWCc!#G&w^C}>l{4~))ZJ5=tZ!qU|ph@!8%2+ ztZ21se*hA#rf20KiG}oIDPVAlvaX*-(i1Y_evj4MY|^LH>oXx>m{odAjs_wt<0xXU zS(KH<*t98IOM96W#@!@yL>dI}aOQ0IJPzYtW;4zco>iCfDHr@ON;wM<&B05D!F^}~ z=+v0j(y7)ms1C>tJ_W93&CE)k7yEtYd70~Z{e-3w+7-`xmHJVBXIJB=AzF3sgZVGo zPX*(my_~{&+7FT-?K4<;doh#`)3x?O$c4P~El<{2Alt85{JQ-(Tx*L^vO5Dm_#P+_ zZMyEqz2q*?CV9Aax1dJc^#@^nu&KbELExD4l4j}3lW7Zq4UW+@0Y(YhJT$Qi-IhJn z*0s0xb1lAZX;R<3scZO=#t`JPZHUX#q+qXG>-Gh0TmL~HTH=PBpeEWcKsGDdhBmZ+ za)$cQ7@9wuK$X4qjZ5H~laloZlE{QWHi=IP(CCma8R6_z%7i4TfD9?m%xGCN#2*am zYL=F@)L5O{`s#onZr6yG-X6jqsizFq1 zAEO81jQ)yjgz{yQN)n!Z+mKcqBbpea^g%7wHv_B3myth}$%Dy$w7 zl}gr7%5z@&!UtDYUfmoNzOv^9kuQYj@hT)EPnikeY7?1Lu#?%j)SUuE=CU`E`=0cB zBAe=hjy(}ZAg5?ED~*8etB<27IEvx|G(n&4PUy3occlx%QkNDbxD)3!0)#uihFT4plkvC3nCgB1IjB)NN(@UTllN!XiENHI$i z&;s8G1quRZP?JGAQ9GL?f}mUo{2crA6gCi z(WzF0tmLba`Va)ZZNAlq`nsXkwfm2Cg>l$V`$VOLB;9=xfuuo%P*D<28LhkO$yE?} zQQC?}LZSHSbe0+`D|3qt?{VW<<8h}$ppZ#WUY$JZLIi}t7nRyg(wNSw*-~H#w@s(> zsJZY2o>3?ca$|A=%i$(=SD}NVg$%WvA`eHY!gBCAG*vXFoe7cSsSY6mvli@@;-5b6b z6HJN%-%X=vvtS#T0~WEkbUMu>hB;=TwB(!}&cbcMa`*Tofr`>i<3NT1RZiJL3DWyrTULH9Lp#{ zb8BYqQ02s0Rfyn0m#QhDl zcUX=L18Rb*5{B;n#qr*W%itfwU4Z-PiEs~TmfwW%!!Ruj;Gcm1D5x^{o}vF1b~ySV zjM|AXR-Vq!!`2(~b_^1yh&dJvzHs?tFgW@jV4lw{Hy<_klXx7MBIZ~ylkoS^7z~a+ z2D+=jT7$HM@0+EPv&?Y zoXzl_Rc^cq*Z?=GIxcgeV>wr~OKmnKRV5UT3F1f$M^FcprC!hQY|Khu=I?O#@RSo+ a;woB2w~XnkYn9HIN~KA6%ALedb@FdXgS__u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a21a4cb422096ec069ecd519f206a88499f5d1eb GIT binary patch literal 541 zcmYjNy-ve05Vn)F>QBmqL|>s2ZFhtas0bJUArOmYVL7p>0!bWfr=nfU%kUaJMkFRC zMph=yZ7O<_Ki_wEKHq(+*Xtm#pNG%r1MV+Jwk-g149DyP2qbWdGE6XbzL$ELPXdh2 zk?=+EhD0Fo(kBhkxI=^HH@rXtT(wV%VxscLWC|plN^9k-Whr0GV^^_l9*|==rVk(y z!2%IaVB*U_cuNeOedruiJ6F;eK9y$Ocd;j)cs^C5SmjnH(I~6aq_ru$9yF^KV>!n65p}I3t>Sm_3;2}+ zo;>a7)m=>R557l!!XQK;+F0Sfe;N;!I|>F9eIwa3RaixhQTSE9oQTk95paDtQT=ha|g8W*{lMP4Zc>pA~s2c)CB=?=pSU nkY%E$?L9oJ+R?mV)jb^RPe5`<<09AkN#}33wClF@osH!eTH$ie literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b521b7e4dc364b349cd1d1469724fcc01aefda3 GIT binary patch literal 597 zcmZ`$Jx{|h5VeywMODkl!V)B;Dnrv9Aw*TuG8BX;FhmxWlUP+CAH{YGMQrdh_yhc< zN=!_QtPF^=X;23^>72XE`Q3ZxyxFWHu#d~vAixN{sbtj*NcO?SHXIR(aDr0oW2|B$ zF;devAvUAR6Y?ujb%Y%29XgSN7mW#%zGnUQBFb;@_C2LPbre;3~LK3@ppQ)|ajwJ5_)42g+SSxh0fKr?D2|Z~fN+ jSA?WMU2D~dTI0%5gMo{+-87Gigzc%<(;OP8fg9#GHGQ0K literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/middleware.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/middleware.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..621a67ddfcb4521925146c56e0ebb8b203371966 GIT binary patch literal 1261 zcmaJ=J8u**5VrSmx4B#hky6lMs5p^qDkOvuibz5z$O#2Pv07pI*1lwqeOzpBAg80@ z@*^mrIN=Ghlo4ey+Yg-?!*onyzvHgn!mvtb#Un^p>>>{DzMkN z=(8fxROwu@Q(=ydV$Kuskx6kBe~PonxGjqXn_XCnfD$Oc90eA~fz2&$U!lOMlLu~{ zw%j-pNJ0a+Xnea197V;Lk?M2mC?)yPYd)}G3*-bW_$OpI;T9xQbWltyDb z!DCFJ9)OFx9ZNztQMp2AVLDdnD3SEbrWEIeQ2GawEAZs+VDCwIqJ&i8aRIf4`*~EP zBGW27jP=W+7ruz4(%Y|PJ`j-(FGO|`zKVOHinZ7tvgiZAQz0L)>@?qr@=VLPw=>JS zlg=CJ4=>C0q0A$|MW;2a8UO~#Ej+q+qgDR3*O7rV6GIHMuX?ZrhUo#v6H9K6@c@6b z#@2WI*&f?+Q`-Xvw9Bmt{({FAbjTikt=eivaWdpg3mAhSQznoez!DiJ4`N^VTST#o z`hEthYV==wWvn;wB-k2lG3PvU$c7(^^)}WuvGdNz>WVt@4zuMTH$lHsMBk=Gv1& z4f9NiV57(ke!=IQsR&Xl^GnOyi-FWWhI`6fwY)ZNVGlcabpL;Itlhd$u}5jfQbB3i zqBPBUkr=y8>3PAD=}nVTo=22Q!xOn-l%edBGP$J-$}~+GKpt|i=d|tWwA*P0t2H%! zpk}}7NN{&?V#w;xrs_|}Uwxh6&h%BG<3#yf45f&ej`K_!>Q&*F3aRR<^+j!Id2YOai-T(jq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..528d7c81d79cb24b0dfeaef571b076719ba8f538 GIT binary patch literal 515 zcmYjOJx{|h5Vez(mJ%3Y&A>nh+8rT81#KA$Lj71Giz-b_aLEVqT`Iu}f29L|sS*Coq2d8y;K4OvGfu-mx+f#49#-Ich5V+VY}CvjM}|n!_hX;`tE6` z+aC8v<#1VzB?gFE8+Xr48wq9kkS7OX3{ry_6vQu1^RP%I$re3@XT?->l?L3u)cH(? zDCRPoi@ur)P$>8Bg7B6kfrw^77UwPUj9N`wKT@Gpph}>5cfZ^s0h3bs#3(oKgZT%` zak%wWx13L1C3w-O_!}#-CXrp2di|ZhiJ@=)(w9!ldw+&j-5PN%Ylmqb6^T5eZ)RXd JE_1nSe*-;ufSLdR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/__pycache__/views.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0f0873e7e759ef2f4cd425eb27f5288e9d75e3a GIT binary patch literal 965 zcmZuvOK;Oa5T3O+u^XJWY6QnBHx!AccZ8~%fz?2<n2bo~}@@%9q@_9am89Ru#@-l&Ws1AMXuKZ(D@+2WwnH}aD6e%M#*e7||UpJz9r zNtyH~xlGM|oW@GUc{Z#sYKY9QZ-p8U6=|xWF$G+}id5u^e6uQ8SrwVu#-T%4M};<@Gv=gLfS~vq4nc%7Itm zRd|F*oH%jh%8BuAK&2zup7}IC-#4-wkB5xx*W2&K7tYv^5L~w&1&`^#9lARs_q?21!Ae)(-E$fnX-Sy(MT7+eZmY5}s+!qlk!Tq-RjbSOG67g{JQ0W>7T zw)$deKp3d+qF6P6qSSNQ*g&YueklH9c<(RwEsYJ-XSOZwFq#Z#3Xn=KGZLdp*6My#ehZ zJ8uAF_SC7S(ltVMYVfQnvS-Ev9>4Z(r4?oyU2n4IrpUmcK3+@pjy3^Vxsvt5O_Zx? z{l%mr$^oD3#82|v)CTiBS%2If-PlZ^0fFw}zz^to8TZp$UBiSL&O0f$cSwWALelBZ ht&=6Krc)ehTTR!leZsZ}54!Y6;UhqRMr_1K(I49tx`hA$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4b83e2c262fa621b3f394ddf3acf7b3e638d9ea GIT binary patch literal 6712 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..feba290b66727ae0f0bb97a1489c7c8dc90b348a GIT binary patch literal 2094 zcmah~OK;>v5bkb2#+l4ySJ@Ep(#l9IV6>TVLI_0>Vxwe*(1HkDtl70Z?w(mE9(&Sl z2QuN> zgAI$2Kk#Ak(&6DV80r(4IN>xRW9m|hYZkGw=4$0yi}bPK8kFo2u5;sza6`~j%{95X zPn_1DaGE%@SpM8sVn0o!KN9fReUK!F;ljqszECPm;@Tv@V~dwoKa}AJ;!;jr#;L0b zT^K{=n&)IlIpf-y<+iFoT#K8$bw=E!bD|Ts4dGbDtzAEg27Yi@e`uPuZMeRbCw7|H z3IY^1SlD9-2SQbL7~APnVGl#8QX3D7nD=Zv4TkZFoyFxLUb>mW8$+6^zZa$tvq66s0o(XmCI=!&`^O?a z?td8$`YKGt#spwQaQpngk4MR7ki@AB2b&Fin{@!2!B9n^|qoU@FTSii{`Ln7KX|uLKaqIR@}Ogu~3CoZ>U03A}v4s1Tjd|(G@M0yb3SRlb|OemvLHw35PFfU&@eKxB za0mIMs}ME)Tx zYSiz}jGW5bxp4q0%1c51q|NA&mK%umF_G`&#svkXu}cORSNNBxgAGNIPJf$2v|n}+ zY%fiU&{DV!8D=uR(Onh{hN+NtDo=nJWMJ;B?oGhJd}}w6cGZR|K{qVjFMZFy87FDg z`MB*vSDS$71-BDudCi%GI7j` zb?irlC54(KF|?7nkmMWi;zefPg1rx5D6FTprPEc~);hp1`%$OU^_SSh$`Q^o3Ox45 z!t;u@=ZzDdMY!&G-cja9^_!OG@gxAzBK;E8Cb18f%9U7B62D$_Yjp<#O3+&fa1Bk$ z`ZHjKHKRH(Sp<}BbePq;eMjP(M^4Lqx9WGjy5IF026}a=_XhBjl-Rf3_g-Zhlt0ii nYWMwD8LR5&TBV24EF^#-mkAWsR)x_v{+tvxu?|6$*R=ltFe@H8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91f42f84243f83003ecbec66772ac9b09dd7806e GIT binary patch literal 2227 zcmah~&2Jk;6rb50+iT~8(55XP5}K+Au#`B!5mg9CN~vfAN>U-MELNMHv9rm3xHIFH zSmr`1^#oV0DdN(_Cy@!Cz?0&C6N`S$Pqe($|4mzG)toM}1g|^$_|?EcmL#Ntgr1 z(+6V}z5W84ehti+oI*RKhu*0VZ}ylz2F-gOsOgP*39oo4S0bJkSCZ4&x zK{;sG92qv4MxqTMJqKk0$N!a}dW1^LYjBCi;ACu-GXKI;Mn{+CX>vQyl^-Mx+a?}g z0b|Gs`PLhIr*sTd0S$D!?J4Ba)}^b_Q^{V%xyEEp&B>;&z~VYIjVJ50MMqcXz&uaM zIbc{L@vH;Jp@RxyZ8T6Dq32;mG)&O%A#276)WffhpJW;cZ>8GRt|F1v*G5@(sLR6E zvN9H0p~K)52A*XiHt{_Ai?H$@G#7KrbeRH~*XHoQDAL;tSka0&mr-O}QIwZrm|=f0 zitY{LtXgSAktmZWa>~2XqAtU~sn^jUa|!|2rK;j3GRt7|v&6tcq%b=a=0pI^Nf!`C z8C&#%X0Q;nR+w9DH`P_x5WYG0d76e;r>YYj{8}hvJ$&o`wkBnHluAdVi;VE{?1YjX o`As4R20o+Om3oKb40z{;OYPwLgr5(wR=U^?$fCDG7wM}158Gi)^#A|> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/base.py b/venv/Lib/site-packages/django/contrib/messages/storage/base.py new file mode 100644 index 000000000..61c5758aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/storage/base.py @@ -0,0 +1,178 @@ +from django.conf import settings +from django.contrib.messages import constants, utils + +LEVEL_TAGS = utils.get_level_tags() + + +class Message: + """ + Represent an actual message that can be stored in any of the supported + storage classes (typically session- or cookie-based) and rendered in a view + or template. + """ + + def __init__(self, level, message, extra_tags=None): + self.level = int(level) + self.message = message + self.extra_tags = extra_tags + + def _prepare(self): + """ + Prepare the message for serialization by forcing the ``message`` + and ``extra_tags`` to str in case they are lazy translations. + """ + self.message = str(self.message) + self.extra_tags = str(self.extra_tags) if self.extra_tags is not None else None + + def __eq__(self, other): + if not isinstance(other, Message): + return NotImplemented + return self.level == other.level and self.message == other.message + + def __str__(self): + return str(self.message) + + @property + def tags(self): + return " ".join(tag for tag in [self.extra_tags, self.level_tag] if tag) + + @property + def level_tag(self): + return LEVEL_TAGS.get(self.level, "") + + +class BaseStorage: + """ + This is the base backend for temporary message storage. + + This is not a complete class; to be a usable storage backend, it must be + subclassed and the two methods ``_get`` and ``_store`` overridden. + """ + + def __init__(self, request, *args, **kwargs): + self.request = request + self._queued_messages = [] + self.used = False + self.added_new = False + super().__init__(*args, **kwargs) + + def __len__(self): + return len(self._loaded_messages) + len(self._queued_messages) + + def __iter__(self): + self.used = True + if self._queued_messages: + self._loaded_messages.extend(self._queued_messages) + self._queued_messages = [] + return iter(self._loaded_messages) + + def __contains__(self, item): + return item in self._loaded_messages or item in self._queued_messages + + def __repr__(self): + return f"<{self.__class__.__qualname__}: request={self.request!r}>" + + @property + def _loaded_messages(self): + """ + Return a list of loaded messages, retrieving them first if they have + not been loaded yet. + """ + if not hasattr(self, "_loaded_data"): + messages, all_retrieved = self._get() + self._loaded_data = messages or [] + return self._loaded_data + + def _get(self, *args, **kwargs): + """ + Retrieve a list of stored messages. Return a tuple of the messages + and a flag indicating whether or not all the messages originally + intended to be stored in this storage were, in fact, stored and + retrieved; e.g., ``(messages, all_retrieved)``. + + **This method must be implemented by a subclass.** + + If it is possible to tell if the backend was not used (as opposed to + just containing no messages) then ``None`` should be returned in + place of ``messages``. + """ + raise NotImplementedError( + "subclasses of BaseStorage must provide a _get() method" + ) + + def _store(self, messages, response, *args, **kwargs): + """ + Store a list of messages and return a list of any messages which could + not be stored. + + One type of object must be able to be stored, ``Message``. + + **This method must be implemented by a subclass.** + """ + raise NotImplementedError( + "subclasses of BaseStorage must provide a _store() method" + ) + + def _prepare_messages(self, messages): + """ + Prepare a list of messages for storage. + """ + for message in messages: + message._prepare() + + def update(self, response): + """ + Store all unread messages. + + If the backend has yet to be iterated, store previously stored messages + again. Otherwise, only store messages added after the last iteration. + """ + self._prepare_messages(self._queued_messages) + if self.used: + return self._store(self._queued_messages, response) + elif self.added_new: + messages = self._loaded_messages + self._queued_messages + return self._store(messages, response) + + def add(self, level, message, extra_tags=""): + """ + Queue a message to be stored. + + The message is only queued if it contained something and its level is + not less than the recording level (``self.level``). + """ + if not message: + return + # Check that the message level is not less than the recording level. + level = int(level) + if level < self.level: + return + # Add the message. + self.added_new = True + message = Message(level, message, extra_tags=extra_tags) + self._queued_messages.append(message) + + def _get_level(self): + """ + Return the minimum recorded level. + + The default level is the ``MESSAGE_LEVEL`` setting. If this is + not found, the ``INFO`` level is used. + """ + if not hasattr(self, "_level"): + self._level = getattr(settings, "MESSAGE_LEVEL", constants.INFO) + return self._level + + def _set_level(self, value=None): + """ + Set a custom minimum recorded level. + + If set to ``None``, the default level will be used (see the + ``_get_level`` method). + """ + if value is None and hasattr(self, "_level"): + del self._level + else: + self._level = int(value) + + level = property(_get_level, _set_level, _set_level) diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/cookie.py b/venv/Lib/site-packages/django/contrib/messages/storage/cookie.py new file mode 100644 index 000000000..8251a016d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/storage/cookie.py @@ -0,0 +1,187 @@ +import binascii +import json + +from django.conf import settings +from django.contrib.messages.storage.base import BaseStorage, Message +from django.core import signing +from django.http import SimpleCookie +from django.utils.safestring import SafeData, mark_safe + + +class MessageEncoder(json.JSONEncoder): + """ + Compactly serialize instances of the ``Message`` class as JSON. + """ + + message_key = "__json_message" + + def default(self, obj): + if isinstance(obj, Message): + # Using 0/1 here instead of False/True to produce more compact json + is_safedata = 1 if isinstance(obj.message, SafeData) else 0 + message = [self.message_key, is_safedata, obj.level, obj.message] + if obj.extra_tags: + message.append(obj.extra_tags) + return message + return super().default(obj) + + +class MessageDecoder(json.JSONDecoder): + """ + Decode JSON that includes serialized ``Message`` instances. + """ + + def process_messages(self, obj): + if isinstance(obj, list) and obj: + if obj[0] == MessageEncoder.message_key: + if obj[1]: + obj[3] = mark_safe(obj[3]) + return Message(*obj[2:]) + return [self.process_messages(item) for item in obj] + if isinstance(obj, dict): + return {key: self.process_messages(value) for key, value in obj.items()} + return obj + + def decode(self, s, **kwargs): + decoded = super().decode(s, **kwargs) + return self.process_messages(decoded) + + +class MessageSerializer: + def dumps(self, obj): + return json.dumps( + obj, + separators=(",", ":"), + cls=MessageEncoder, + ).encode("latin-1") + + def loads(self, data): + return json.loads(data.decode("latin-1"), cls=MessageDecoder) + + +class CookieStorage(BaseStorage): + """ + Store messages in a cookie. + """ + + cookie_name = "messages" + # uwsgi's default configuration enforces a maximum size of 4kb for all the + # HTTP headers. In order to leave some room for other cookies and headers, + # restrict the session cookie to 1/2 of 4kb. See #18781. + max_cookie_size = 2048 + not_finished = "__messagesnotfinished__" + key_salt = "django.contrib.messages" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.signer = signing.get_cookie_signer(salt=self.key_salt) + + def _get(self, *args, **kwargs): + """ + Retrieve a list of messages from the messages cookie. If the + not_finished sentinel value is found at the end of the message list, + remove it and return a result indicating that not all messages were + retrieved by this storage. + """ + data = self.request.COOKIES.get(self.cookie_name) + messages = self._decode(data) + all_retrieved = not (messages and messages[-1] == self.not_finished) + if messages and not all_retrieved: + # remove the sentinel value + messages.pop() + return messages, all_retrieved + + def _update_cookie(self, encoded_data, response): + """ + Either set the cookie with the encoded data if there is any data to + store, or delete the cookie. + """ + if encoded_data: + response.set_cookie( + self.cookie_name, + encoded_data, + domain=settings.SESSION_COOKIE_DOMAIN, + secure=settings.SESSION_COOKIE_SECURE or None, + httponly=settings.SESSION_COOKIE_HTTPONLY or None, + samesite=settings.SESSION_COOKIE_SAMESITE, + ) + else: + response.delete_cookie( + self.cookie_name, + domain=settings.SESSION_COOKIE_DOMAIN, + samesite=settings.SESSION_COOKIE_SAMESITE, + ) + + def _store(self, messages, response, remove_oldest=True, *args, **kwargs): + """ + Store the messages to a cookie and return a list of any messages which + could not be stored. + + If the encoded data is larger than ``max_cookie_size``, remove + messages until the data fits (these are the messages which are + returned), and add the not_finished sentinel value to indicate as much. + """ + unstored_messages = [] + encoded_data = self._encode(messages) + if self.max_cookie_size: + # data is going to be stored eventually by SimpleCookie, which + # adds its own overhead, which we must account for. + cookie = SimpleCookie() # create outside the loop + + def stored_length(val): + return len(cookie.value_encode(val)[1]) + + while encoded_data and stored_length(encoded_data) > self.max_cookie_size: + if remove_oldest: + unstored_messages.append(messages.pop(0)) + else: + unstored_messages.insert(0, messages.pop()) + encoded_data = self._encode( + messages + [self.not_finished], encode_empty=unstored_messages + ) + self._update_cookie(encoded_data, response) + return unstored_messages + + def _encode(self, messages, encode_empty=False): + """ + Return an encoded version of the messages list which can be stored as + plain text. + + Since the data will be retrieved from the client-side, the encoded data + also contains a hash to ensure that the data was not tampered with. + """ + if messages or encode_empty: + return self.signer.sign_object( + messages, serializer=MessageSerializer, compress=True + ) + + def _decode(self, data): + """ + Safely decode an encoded text stream back into a list of messages. + + If the encoded text stream contained an invalid hash or was in an + invalid format, return None. + """ + if not data: + return None + try: + return self.signer.unsign_object(data, serializer=MessageSerializer) + # RemovedInDjango41Warning: when the deprecation ends, replace with: + # + # except (signing.BadSignature, json.JSONDecodeError): + # pass + except signing.BadSignature: + decoded = None + except (binascii.Error, json.JSONDecodeError): + decoded = self.signer.unsign(data) + + if decoded: + # RemovedInDjango41Warning. + try: + return json.loads(decoded, cls=MessageDecoder) + except json.JSONDecodeError: + pass + # Mark the data as used (so it gets removed) since something was wrong + # with the data. + self.used = True + return None diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/fallback.py b/venv/Lib/site-packages/django/contrib/messages/storage/fallback.py new file mode 100644 index 000000000..44e26fab6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/storage/fallback.py @@ -0,0 +1,56 @@ +from django.contrib.messages.storage.base import BaseStorage +from django.contrib.messages.storage.cookie import CookieStorage +from django.contrib.messages.storage.session import SessionStorage + + +class FallbackStorage(BaseStorage): + """ + Try to store all messages in the first backend. Store any unstored + messages in each subsequent backend. + """ + + storage_classes = (CookieStorage, SessionStorage) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.storages = [ + storage_class(*args, **kwargs) for storage_class in self.storage_classes + ] + self._used_storages = set() + + def _get(self, *args, **kwargs): + """ + Get a single list of messages from all storage backends. + """ + all_messages = [] + for storage in self.storages: + messages, all_retrieved = storage._get() + # If the backend hasn't been used, no more retrieval is necessary. + if messages is None: + break + if messages: + self._used_storages.add(storage) + all_messages.extend(messages) + # If this storage class contained all the messages, no further + # retrieval is necessary + if all_retrieved: + break + return all_messages, all_retrieved + + def _store(self, messages, response, *args, **kwargs): + """ + Store the messages and return any unstored messages after trying all + backends. + + For each storage backend, any messages not stored are passed on to the + next backend. + """ + for storage in self.storages: + if messages: + messages = storage._store(messages, response, remove_oldest=False) + # Even if there are no more messages, continue iterating to ensure + # storages which contained messages are flushed. + elif storage in self._used_storages: + storage._store([], response) + self._used_storages.remove(storage) + return messages diff --git a/venv/Lib/site-packages/django/contrib/messages/storage/session.py b/venv/Lib/site-packages/django/contrib/messages/storage/session.py new file mode 100644 index 000000000..3271c9258 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/storage/session.py @@ -0,0 +1,52 @@ +import json + +from django.contrib.messages.storage.base import BaseStorage +from django.contrib.messages.storage.cookie import MessageDecoder, MessageEncoder +from django.core.exceptions import ImproperlyConfigured + + +class SessionStorage(BaseStorage): + """ + Store messages in the session (that is, django.contrib.sessions). + """ + + session_key = "_messages" + + def __init__(self, request, *args, **kwargs): + if not hasattr(request, "session"): + raise ImproperlyConfigured( + "The session-based temporary message storage requires session " + "middleware to be installed, and come before the message " + "middleware in the MIDDLEWARE list." + ) + super().__init__(request, *args, **kwargs) + + def _get(self, *args, **kwargs): + """ + Retrieve a list of messages from the request's session. This storage + always stores everything it is given, so return True for the + all_retrieved flag. + """ + return ( + self.deserialize_messages(self.request.session.get(self.session_key)), + True, + ) + + def _store(self, messages, response, *args, **kwargs): + """ + Store a list of messages to the request's session. + """ + if messages: + self.request.session[self.session_key] = self.serialize_messages(messages) + else: + self.request.session.pop(self.session_key, None) + return [] + + def serialize_messages(self, messages): + encoder = MessageEncoder() + return encoder.encode(messages) + + def deserialize_messages(self, data): + if data and isinstance(data, str): + return json.loads(data, cls=MessageDecoder) + return data diff --git a/venv/Lib/site-packages/django/contrib/messages/utils.py b/venv/Lib/site-packages/django/contrib/messages/utils.py new file mode 100644 index 000000000..0dd887357 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/utils.py @@ -0,0 +1,12 @@ +from django.conf import settings +from django.contrib.messages import constants + + +def get_level_tags(): + """ + Return the message level tags. + """ + return { + **constants.DEFAULT_TAGS, + **getattr(settings, "MESSAGE_TAGS", {}), + } diff --git a/venv/Lib/site-packages/django/contrib/messages/views.py b/venv/Lib/site-packages/django/contrib/messages/views.py new file mode 100644 index 000000000..38dee9bec --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/messages/views.py @@ -0,0 +1,19 @@ +from django.contrib import messages + + +class SuccessMessageMixin: + """ + Add a success message on successful form submission. + """ + + success_message = "" + + def form_valid(self, form): + response = super().form_valid(form) + success_message = self.get_success_message(form.cleaned_data) + if success_message: + messages.success(self.request, success_message) + return response + + def get_success_message(self, cleaned_data): + return self.success_message % cleaned_data diff --git a/venv/Lib/site-packages/django/contrib/postgres/__init__.py b/venv/Lib/site-packages/django/contrib/postgres/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..863c43bd86033efb9fdc7cc6bc7fcbfc1e6e3b28 GIT binary patch literal 197 zcmYk0u?oU47=%;lAVMF+p>`J$K~V=0QQUqENg8UZO-lZx;3N4;f|F0+>SQwM!F|Ww zbSBFNB-|L{4_$8bbx5%wOD!NLgNNbL|-%B?+z zrLySqoi()-4mznj*eDLDoXlG$F07IWWzBSD3SqRfiWjXxS6PV#rAjMD>8QOu`jf_# N{wk;O0rmn?@&&fUHY@-D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee8b151844f557e42aca53a8c5450ba4a24f6df5 GIT binary patch literal 2886 zcma)8TW=Fb6y8~{Z|k)koC_g=Vp2+RB}@x%RaFs^a8c8c;!xC)+ttQ1b{6(xX2yX; zX;lfH`UCpZ2j{VWq(5S%KJ|&0s(qzu={d8u3A6~-+T(A&nK?UiZZmPYY#Z?W`OUA} zKa>sQH*6ezENEPTSN;Kl8H@x*NGJ(SYK9q_2`y?7(V$L*HjJEu%5}6n1SitfaW=DSq3FdORs3-15UwvpQ~W(X`*$ z7=&E-9o=e>q`2Jguf$Q;??I!~iKB>jlpjYDnza{Aw<9wOEuK7G*N&c2#TwL8tid+1V(j3gmuf#zB^Ktski19~jkNSd32}+QXTq!^5xt$%{ z1AfHm0R;-&z}w$@N^qN?s&dz!q-yigo%9g-2g)Kky15YHiQTuKz z*qAHaiM&pSM+!fvci#d#c!9qUTOi4t;5}c$c3idB=PoRS1zgBZ22DJAFxs&F8NBjG z5C^7QJAkOWZ;I>8RK@{$Om>O5smRb&nL|PhWeu|`r%`@_kSk2M6d_lfa4AC0o^UBD zfo4Z@xf8Ltu6B5xce~(KS&zH*%~+})m_GG+6THgy&Nu20 zcX(81_rUyd6TGg3zuoMQhH72DtS=2BKa$D|0?wA|+k5qRmkZ%D?vDH?&o`QSFs~&B~ zqnJT4i=ql5nVu}v^}BAwIpa(ep@+^MQ6(qtPfE9!H?FU_TVHLiwHg-9kM@&fcfDZ1 zX%?b}izIjdp(lFsXG5F@UC-Fc$L%|yM7D1ar1aXWaR*W>QnG#BS2qUR?Q6b}>cXao z?}72#yFA)$ulw6=2}yII?{)5bJucg+VJ?nresOH`i(bDkoBchp2%o~8$+IBLocTOw zn*Z1t^KUzAlUIILg*d(qlsF3cRuof*X`DgPM#`C^O7_OlX#6m<5F<$FfjZ za!KXoI1wjc+Wzc_Y<;m_huq{5=CABvc8(wX4qAEzUik|MWekZjb--qZ)}gU#e0}O$ zazO57b=sT*l)IN77MO`EU|E)9`Jb{l9(sz*7!Ywz*_c?wcu-U&(3U2GGc2o$)?1w* z`{qHg|KV%m zx!J`cD4RDSV0v8WGNWtY8)vNYjvso#kr^Mo;Tz-1eq_ppx0rHd_~kbYzv}n?vyn#D zzXD0-Uqx{Z#SIi+f@qvf(=R{HVT@go2a#l;Xe2pE0Tv5d_MyJSvY#F_w8lK;>8dMT z!J(u`p5z97V0mJXR6(4j6#?r+S{ABrT@!TXPfv!w$a`@TwH-%M0YQ&V#yk{|f3Ol! z!p<5BxPBN7GqEHOx`~DB(q$kOb?8j8x|m)DC@+DqiDTNNKupsl>CgJhdTtki`Tmu} zg+z8pjqK07oONk+-e}~Lg6l?J$Xz$FT{n!`AVBQ6?t_6BjCw5mPl!t$u;F$rxt=0E zfTbK+DV8o#M{x$kMR+CJv|w1URL9ipM&mrK_T^qD?)NS=A=8B?1!lIu(@)?rD6$}E zX%s+MtV9l(;)r3}+VON@(r#`;$%6opP3iX{FOX@?Uwknj9N#Ns^P#?3q&0i$$cUJ6 zn25(h>KQx&j(!770|T1fL6lx%wAbkTs~Va<-a)ub-9A0)R$Qvd;vk-l$;5&3K`WRc zl5mT`V4T7wp!H~etP7(g$)^XDeDz$y1B;ekgr3x42Pe(Q7W%l;;i!`aee-`#OA4Q) f-v1Pfu3Q2!Z#bp{;p31QEj2dhQ*0J8GYkI$5@Q^T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/constraints.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/constraints.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5518a50965bff00c04a9348f42cff66a29182bf2 GIT binary patch literal 6439 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 a%sG|w{|s4=bQ5J|3a=Ao`M0zK`u_mR%x`7@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/expressions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/expressions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ece2a1750ffb70329f53bad2a5853a729e4a36a GIT binary patch literal 945 zcmY*Yy>HYo6u0wnO-l|cKu|HTAvF?BSA-CvDry-}g?eJZim-CA@5t5psGn1~s@qlS z#>RiZ(tjxu6B8pV6Mnh7>iQ(VJUe!NAJ3`!{S9K{@8@5`AC!>aI9UzPPTtr7FKiM- zP(=#LD8<@QPT?}Qt6k+4KJzI#B*GK^B@w=KXD;iB-hf1Ff9z=z(RO1`>vVdMOC{_q z7&ODvM(U}p?`3KBMG9W)s+QVJGd!^x?qUMZZ6OJxf-px==3bEz6^?K(1LjG8jy|KT zcSStH)+~Cj?RT(CwDSjh$H#l0wx4ao5+9<>Sph>VRDQ<}*s{rx8JW-vI-)tbaDLM7 zodW}MO^+g{^`Wtx+ko@D%nj#}+j=0?hy|TGkf!aOd`MwMh8Uq>_X&f+|c@+);6pfQ#Xc><~`O3sQWkRE>@d1;kP;>p>zJ^Hj!Ij z2+-CtEhOjd2Ioa38ijSp`Dv4?#hbv$qE@Mqok)$n>rmSM!tG2d#rX;mY_0Ct__jhJ zfPX?jJQ_NVd!K4tKZ@4a)49Fz!rpjkZ`?_QPCeUPY!buRQj`ib-XZpQvD}zkK|E^8 i%-C+EYR(W5Rw#8YA*D8WHP`tX?FZ~zNJ1LYhwgt*@9b{? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/functions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/functions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2548efe4019aeb818c7d1dfe7c4415555819052 GIT binary patch literal 670 zcmZ`%O;6k~5Ov~Y3EN!?66$a09@xEBRaJr550JVk3fYSl)pBC93Qgi*J5=oz{!IT; zBu<=qthiM@bex5XLpzdR=8eZMGh@r)u#doge!5G4!}s2j=jH)9gr(mAaKxPgl@4)A zm$)S+*g*@#U5;-N$HKkA!~^beAGqIfpZCtuXzK@@MkCw~r_6{rFU33;1#i81Q)TV; zYIQp80+~&FZVr$`SP!oN1R@Sc#N`gb!n;Al=ProjwjZ&I%hJkx+gr>+8Xbkxk4tI; zuSemi*9MeUtQ3^CeM(Eoo5K17O0ODLJnjTWlyw31Dcf{Akd3JuLoaNl-;o+Xu!CRu z@!Mpjh0;mXXw8zT%$ibEMkkBhoHS`N&y_X@XG&g*%p}*Mx=udiX`*u@4r-QtW^17n ze#xq}oMf^xDo-c1)Ml-Oo?O64OfD-uuD_}t{M1(SV4VPYPT%Qb{~eU_ArVHh6Dw9} z)+vSZ3)wqfMbRvbX?(hzoySMZGZ>57f@Bp~*tTGwf^sdqu<*CzjW@KhmjGSv&JzP2 rvb$+!%+oOpR}^}qf^Cj1zpJ@B`!CTpc(=Kd_x8HAZFL{*;(h-QoVS{~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73abc0efdd4a97198fda54e95ba6ccc559ed20e3 GIT binary patch literal 7711 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0df8c48f9f3ae1d1d4de02c7ec42c72a1484caf9 GIT binary patch literal 13065 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/search.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/search.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fe13b3c43f49a16cd60b882e9018714d5277543 GIT binary patch literal 11645 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 Bm+Jrk literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/serializers.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/serializers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aace11a7b3172f2d4b7bfe6b67780037f4fd109 GIT binary patch literal 693 zcmZ8fJ#X7E5G6%9upOuA5CrX%EFLsO1~L{!5i~{9p)iUBSp=a3CDN*7eU(QUjo?hp zpXuCxBcM~Kj$J$TXa}y)1MWfhbbLHMvN|{z6O7*{OlMJQY?(kZaNnZr#+l3Win3tGvj<6;f$!O->(>0ZJ>F9mwl=yv5C0kSbci|ip z>8|N9`9v3vop#Wk3=+QAh3scuJUQCHfWPQhc{U?uWKbtBH> zTmW$1jX5tW+2o3I&*@xH`J&s~GT(?E;e3CVmoLIwP#VJP20(;ws<hC(|==qTIQWSU!ZI^Tt&ObLIf28)2+MJ~a_Vs9c5%!^g zg&~>H4Kw#xaI&4(myutji54cUO8B>>*7hDZ-91ffm$t&)@a5LSSN7^R>JxIr{sIK5 Bus8q! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/signals.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/signals.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be7fb7b06d86f0bd0b0f01b49fe43aa7d4a9aae6 GIT binary patch literal 1899 zcmZux-%lGy5Z>K8pY5|TBtj@u{c(zDk)_16mGV*%)D%cUN==1nQLm=f`F3*{&Ua>a z9Wb(`R_3+pTc6>v|I$f)>Qf#gRjSlVrL%k3n1(y;+|KOn?9R+LUpzHsBY58Y@O$%3 z4xvAkGWi&wd=5i|ASj|ZL~i=UE(V>1xJ_JwmCXo^w&|LBZibn*eRF+v z$B~t|MISh_*YWh~)9tOVoKDaH19PPFVr!$S)W~Zy(eZrdM8esss{gM|kHM(iIJ?i+ zx7SB&&SPgWy~83`xq7WcwVdH5d=ty>auM?+%TAczl`OHmPKQM_$;fUeWaUgUbDjH! z7q&dXvudLW2Z_Yiw{7UT!QfZ>)MSZ&~gjZjS{cf8@Qq-TdDNmShhhzC$lyqD~LID2SKf0+P3yOPyHAfHScqT0!K6 zqSEOl(*cuLIMKH#!0BQRM9DBQ!RDoDnK*|_cm~G8pZpFi-GB@M!x%D~piDq!ZW1!m zpoAJ{NI_V5KtNP%WDpQyL#!<&-M|f|FHIQmX>T#A&*E6JFngWubPK3>zx8 z@GqYQWCv2p^-=9s(!kx0==7KP8dSTd04Cog(KW?4VT$+OK_sUa=1-(F_Av0;O zDMr(v<*Lkyecg;)Ay?-o$#q1}k2}Gqi47QIkx)G8mLhiCNDomgl32B!?TzX)cWTV9 z%3QYiyz*=v9(z0xyr{fRfp7~Gg>kPMUG4ZkWae)8YwQElh0ysQf)DW#h*=DsNJ`L+ zHnuN|hM6aSk%Ema=u7i*)+k~tL;m6K!>r8_+eumbUMpdghD zH=puDg*G+r+;_)%r3n-Qc@!`aObf0undC#>ZTOzQ&(fqScKVd`FP5=M^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc2d3641a8b2cdf9f954bf05eccbcfb48261f566 GIT binary patch literal 1245 zcmZ`&OK;Oa5Z+zeNt&h)gh-`|gO5b0Y0oH%kSLEsRVpGlM25(*x9PTa9CkM)P1{o{ z#T+>B8&D7ZOO`ls;)uiv3Bk;|kMz*BW<9gBGy8oryUD^rnZWq<;d}R+O~?;4W(Nb~ zDTvyDDI_6{NKD(5qRt`~TW!neR%FLc+X3AUoioxdgoPHV6@Nk$snKldogazN*COdZ zmokyCwA>Q$AmUs8_~>>kuy|I& z{F`J#ClqLu#-i-P*pYl!j9lM6yk_Haq~pe1DZj_vPkSQbZtRP`1`++9tM|CeM?z^Z zOp=*cD2VSWEr)>~N?teav2%Rt9-jul@z%gb+y_xuhLonHN?PQCZeI{tfR!4{3IkvI zv4X#WX_o)+XHUGhic96a83IIaGYN(%99rl1U<icDlsxKgws<>Jg1tt*(m|>;D_++7in?R+W)<`61rT)Tr|~Q1*Jz$$osids>umWSqfMt_E+|i0UlF&nyuWy z6uQFd8yV$rE2x{ZZ=e|bPL9p^7jP4@&v%;gErE#}6~e1HWy&ZkFuDvM`^&&C{AP<) zYX6hCbGue-SMv)~4-&Z6d=&5jzI-JSQ+wsonO~mWVLw2p9~qqOd$+urk91A~Q|CoP YC^O|NHR2>3M!bnVG_RvVDil8JKj$4Od;kCd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/__pycache__/validators.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/__pycache__/validators.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c27728de2c479f7a4448d080175e02da746f8d45 GIT binary patch literal 3173 zcmbVO&2Jk;6yMohuh)*jqKv^V^>e4zu>46HNR;3?OQwue;hn2-@volTC*$;PS zoi>(xA-(b+AOr^v`IlDW#EBz{xB#X6-maZENn2XRn&YZts3)#AE4 zQ}7k=4Y$Fx>l(Ls^@+x-!q_t0CS;q}AlF0%@)2P}Q|B|#%xvjf%$``m6eDX-7?GJA+hbnWhi_8xb<$Q2j-A^BS8{|-nJ7Ff` zv!D*NgNRS;oFsMPR0=1%?jfoCbfqv|GB1m?M3sMsgHEFE4l4?i60Bk%j=#O zr+g3*-|)N#13xN9WDTI?)mSLyuZe9<&O#=yLXh3s(X8Y(e9UNFo;ExsqXbK zyD?bpUJIql&V41*o(Qt;hDbKL%i(HQ0g-ckKUl|ts>^$RvX(9pdNN#H>ZdAOlR_;4 zKFXX_s&;=<&fu#}^qmHXt?3LuH2be&D*^R$(zn)|2#MGG*D9 z=|;!}-!pCLd1E}^qse(4r9k=xf2|YHX`eLWb@VIf>LZX$8?h}m(mXcOLG_WrwE>fh zp*GTb#?Nd-UGtz_LET-^wpj-y%}^rC&Ei{D=~ix!4~)XFsYG;7zJ=xG+eF?WvU`jq zMUPHmnBe?-A3{=;wRL7On=LT&*>LgZG|ugbX+T?_v1gd0{-Gf*FNHhP0uPp!&+*?em1htVt-*@q_WjZVwH#2{3*^z<11 z^%3jo>m_f1H^#gP-dxvLGpel5{SI!c|qhW<$0xJMIKN_wDhspX?9=8 zgKk=$CmwiSv6UmRZs>KUKdbBdKXpU@d$@2gImo!BU+c8$lFa2SkvWjO>Ulg3P~n+Z zCSj3|@6tG-Cr=aEOU!~RYRe)9-a}WUvNcn;42xO+m}XtKt;W2h@c?~aBMdL0@6cEF zstwmsL8#)O)}YRmSL@+Jf!csf5@B$m2dj3AzW7FZytBD$vcXo#2A1X)E#vL$Z z5{XPin@)twvb-8l`%v)wh)Uo7D_*rb+tz^qNlIjShR9JO&kMy_3@oGXP>ryW@w$P0 zeESbl1^Mb3~fcS-*V$OPDfU)}|_^Gd+t zVc=(zYxkwt%JciTw3o{lFmQ(kKP5s^r#0^`md_CEM~b$16o@{(S(T)`*gv>?#VJV{ zDd`T8RDGpIw#UZ{4YDv&?Wwn^r0RTN7}rvwqT+chZCav;J-xV!XH9XZ7l*3|Z?V}a mn0I~3?a#}{+ZPN|6`jV0cAPb=2CCqkF;~~?b8PO+LhWCotr=bb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/__init__.py b/venv/Lib/site-packages/django/contrib/postgres/aggregates/__init__.py new file mode 100644 index 000000000..4bfbd526f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/aggregates/__init__.py @@ -0,0 +1,2 @@ +from .general import * # NOQA +from .statistics import * # NOQA diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebbd01f3340018e4ec6f4d430021c54a82361675 GIT binary patch literal 254 zcmYk0KTE_w5XE<+;Bk1JUn0VpUPKf{EkwjWjSPm(W?1IT?S`Gnfgj1Q6tJ?gw6$`g zjSuGi<}p*ev{=lI>g)NvIaPj4;lBzECpx^R)|%FK=HZW4S=^g)>(lC~w4>d>DT}9_ zfDyCn#yN`hP#2;!Flq-8lx~=l3Wc9Tu^3N-sZGIFR;P5 zfop1jNpRUa|Kb8Nv?~`ws(gx)sj2$J5;Ah-f+9H4wXP|W)b&CCI?j&PsU12zp1Sf> IW@dKn4z>% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/general.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/aggregates/__pycache__/general.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..956ca650c3d9401572f7b74084be42e6ad212e3a GIT binary patch literal 3852 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 KV`O2r===v8(%y3b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/general.py b/venv/Lib/site-packages/django/contrib/postgres/aggregates/general.py new file mode 100644 index 000000000..026ea18fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/aggregates/general.py @@ -0,0 +1,109 @@ +import warnings + +from django.contrib.postgres.fields import ArrayField +from django.db.models import Aggregate, BooleanField, JSONField, Value +from django.utils.deprecation import RemovedInDjango50Warning + +from .mixins import OrderableAggMixin + +__all__ = [ + "ArrayAgg", + "BitAnd", + "BitOr", + "BoolAnd", + "BoolOr", + "JSONBAgg", + "StringAgg", +] + + +# RemovedInDjango50Warning +NOT_PROVIDED = object() + + +class DeprecatedConvertValueMixin: + def __init__(self, *expressions, default=NOT_PROVIDED, **extra): + if default is NOT_PROVIDED: + default = None + self._default_provided = False + else: + self._default_provided = True + super().__init__(*expressions, default=default, **extra) + + def convert_value(self, value, expression, connection): + if value is None and not self._default_provided: + warnings.warn(self.deprecation_msg, category=RemovedInDjango50Warning) + return self.deprecation_value + return value + + +class ArrayAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): + function = "ARRAY_AGG" + template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" + allow_distinct = True + + # RemovedInDjango50Warning + deprecation_value = property(lambda self: []) + deprecation_msg = ( + "In Django 5.0, ArrayAgg() will return None instead of an empty list " + "if there are no rows. Pass default=None to opt into the new behavior " + "and silence this warning or default=Value([]) to keep the previous " + "behavior." + ) + + @property + def output_field(self): + return ArrayField(self.source_expressions[0].output_field) + + +class BitAnd(Aggregate): + function = "BIT_AND" + + +class BitOr(Aggregate): + function = "BIT_OR" + + +class BoolAnd(Aggregate): + function = "BOOL_AND" + output_field = BooleanField() + + +class BoolOr(Aggregate): + function = "BOOL_OR" + output_field = BooleanField() + + +class JSONBAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): + function = "JSONB_AGG" + template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" + allow_distinct = True + output_field = JSONField() + + # RemovedInDjango50Warning + deprecation_value = "[]" + deprecation_msg = ( + "In Django 5.0, JSONBAgg() will return None instead of an empty list " + "if there are no rows. Pass default=None to opt into the new behavior " + "and silence this warning or default=Value('[]') to keep the previous " + "behavior." + ) + + +class StringAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): + function = "STRING_AGG" + template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" + allow_distinct = True + + # RemovedInDjango50Warning + deprecation_value = "" + deprecation_msg = ( + "In Django 5.0, StringAgg() will return None instead of an empty " + "string if there are no rows. Pass default=None to opt into the new " + "behavior and silence this warning or default=Value('') to keep the " + "previous behavior." + ) + + def __init__(self, expression, delimiter, **extra): + delimiter_expr = Value(str(delimiter)) + super().__init__(expression, delimiter_expr, **extra) diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/mixins.py b/venv/Lib/site-packages/django/contrib/postgres/aggregates/mixins.py new file mode 100644 index 000000000..ca0f7c9ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/aggregates/mixins.py @@ -0,0 +1,57 @@ +from django.db.models import F, OrderBy + + +class OrderableAggMixin: + def __init__(self, *expressions, ordering=(), **extra): + if not isinstance(ordering, (list, tuple)): + ordering = [ordering] + ordering = ordering or [] + # Transform minus sign prefixed strings into an OrderBy() expression. + ordering = ( + ( + OrderBy(F(o[1:]), descending=True) + if isinstance(o, str) and o[0] == "-" + else o + ) + for o in ordering + ) + super().__init__(*expressions, **extra) + self.ordering = self._parse_expressions(*ordering) + + def resolve_expression(self, *args, **kwargs): + self.ordering = [ + expr.resolve_expression(*args, **kwargs) for expr in self.ordering + ] + return super().resolve_expression(*args, **kwargs) + + def as_sql(self, compiler, connection): + if self.ordering: + ordering_params = [] + ordering_expr_sql = [] + for expr in self.ordering: + expr_sql, expr_params = compiler.compile(expr) + ordering_expr_sql.append(expr_sql) + ordering_params.extend(expr_params) + sql, sql_params = super().as_sql( + compiler, + connection, + ordering=("ORDER BY " + ", ".join(ordering_expr_sql)), + ) + return sql, sql_params + ordering_params + return super().as_sql(compiler, connection, ordering="") + + def set_source_expressions(self, exprs): + # Extract the ordering expressions because ORDER BY clause is handled + # in a custom way. + self.ordering = exprs[self._get_ordering_expressions_index() :] + return super().set_source_expressions( + exprs[: self._get_ordering_expressions_index()] + ) + + def get_source_expressions(self): + return super().get_source_expressions() + self.ordering + + def _get_ordering_expressions_index(self): + """Return the index at which the ordering expressions start.""" + source_expressions = self.get_source_expressions() + return len(source_expressions) - len(self.ordering) diff --git a/venv/Lib/site-packages/django/contrib/postgres/aggregates/statistics.py b/venv/Lib/site-packages/django/contrib/postgres/aggregates/statistics.py new file mode 100644 index 000000000..3dc442b29 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/aggregates/statistics.py @@ -0,0 +1,75 @@ +from django.db.models import Aggregate, FloatField, IntegerField + +__all__ = [ + "CovarPop", + "Corr", + "RegrAvgX", + "RegrAvgY", + "RegrCount", + "RegrIntercept", + "RegrR2", + "RegrSlope", + "RegrSXX", + "RegrSXY", + "RegrSYY", + "StatAggregate", +] + + +class StatAggregate(Aggregate): + output_field = FloatField() + + def __init__(self, y, x, output_field=None, filter=None, default=None): + if not x or not y: + raise ValueError("Both y and x must be provided.") + super().__init__( + y, x, output_field=output_field, filter=filter, default=default + ) + + +class Corr(StatAggregate): + function = "CORR" + + +class CovarPop(StatAggregate): + def __init__(self, y, x, sample=False, filter=None, default=None): + self.function = "COVAR_SAMP" if sample else "COVAR_POP" + super().__init__(y, x, filter=filter, default=default) + + +class RegrAvgX(StatAggregate): + function = "REGR_AVGX" + + +class RegrAvgY(StatAggregate): + function = "REGR_AVGY" + + +class RegrCount(StatAggregate): + function = "REGR_COUNT" + output_field = IntegerField() + empty_result_set_value = 0 + + +class RegrIntercept(StatAggregate): + function = "REGR_INTERCEPT" + + +class RegrR2(StatAggregate): + function = "REGR_R2" + + +class RegrSlope(StatAggregate): + function = "REGR_SLOPE" + + +class RegrSXX(StatAggregate): + function = "REGR_SXX" + + +class RegrSXY(StatAggregate): + function = "REGR_SXY" + + +class RegrSYY(StatAggregate): + function = "REGR_SYY" diff --git a/venv/Lib/site-packages/django/contrib/postgres/apps.py b/venv/Lib/site-packages/django/contrib/postgres/apps.py new file mode 100644 index 000000000..3371b0bfe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/apps.py @@ -0,0 +1,77 @@ +from psycopg2.extras import DateRange, DateTimeRange, DateTimeTZRange, NumericRange + +from django.apps import AppConfig +from django.db import connections +from django.db.backends.signals import connection_created +from django.db.migrations.writer import MigrationWriter +from django.db.models import CharField, OrderBy, TextField +from django.db.models.functions import Collate +from django.db.models.indexes import IndexExpression +from django.test.signals import setting_changed +from django.utils.translation import gettext_lazy as _ + +from .indexes import OpClass +from .lookups import SearchLookup, TrigramSimilar, TrigramWordSimilar, Unaccent +from .serializers import RangeSerializer +from .signals import register_type_handlers + +RANGE_TYPES = (DateRange, DateTimeRange, DateTimeTZRange, NumericRange) + + +def uninstall_if_needed(setting, value, enter, **kwargs): + """ + Undo the effects of PostgresConfig.ready() when django.contrib.postgres + is "uninstalled" by override_settings(). + """ + if ( + not enter + and setting == "INSTALLED_APPS" + and "django.contrib.postgres" not in set(value) + ): + connection_created.disconnect(register_type_handlers) + CharField._unregister_lookup(Unaccent) + TextField._unregister_lookup(Unaccent) + CharField._unregister_lookup(SearchLookup) + TextField._unregister_lookup(SearchLookup) + CharField._unregister_lookup(TrigramSimilar) + TextField._unregister_lookup(TrigramSimilar) + CharField._unregister_lookup(TrigramWordSimilar) + TextField._unregister_lookup(TrigramWordSimilar) + # Disconnect this receiver until the next time this app is installed + # and ready() connects it again to prevent unnecessary processing on + # each setting change. + setting_changed.disconnect(uninstall_if_needed) + MigrationWriter.unregister_serializer(RANGE_TYPES) + + +class PostgresConfig(AppConfig): + name = "django.contrib.postgres" + verbose_name = _("PostgreSQL extensions") + + def ready(self): + setting_changed.connect(uninstall_if_needed) + # Connections may already exist before we are called. + for conn in connections.all(): + if conn.vendor == "postgresql": + conn.introspection.data_types_reverse.update( + { + 3904: "django.contrib.postgres.fields.IntegerRangeField", + 3906: "django.contrib.postgres.fields.DecimalRangeField", + 3910: "django.contrib.postgres.fields.DateTimeRangeField", + 3912: "django.contrib.postgres.fields.DateRangeField", + 3926: "django.contrib.postgres.fields.BigIntegerRangeField", + } + ) + if conn.connection is not None: + register_type_handlers(conn) + connection_created.connect(register_type_handlers) + CharField.register_lookup(Unaccent) + TextField.register_lookup(Unaccent) + CharField.register_lookup(SearchLookup) + TextField.register_lookup(SearchLookup) + CharField.register_lookup(TrigramSimilar) + TextField.register_lookup(TrigramSimilar) + CharField.register_lookup(TrigramWordSimilar) + TextField.register_lookup(TrigramWordSimilar) + MigrationWriter.register_serializer(RANGE_TYPES, RangeSerializer) + IndexExpression.register_wrappers(OrderBy, OpClass, Collate) diff --git a/venv/Lib/site-packages/django/contrib/postgres/constraints.py b/venv/Lib/site-packages/django/contrib/postgres/constraints.py new file mode 100644 index 000000000..c136de4c9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/constraints.py @@ -0,0 +1,176 @@ +from django.db import NotSupportedError +from django.db.backends.ddl_references import Statement, Table +from django.db.models import Deferrable, F, Q +from django.db.models.constraints import BaseConstraint +from django.db.models.expressions import Col +from django.db.models.sql import Query + +__all__ = ["ExclusionConstraint"] + + +class ExclusionConstraint(BaseConstraint): + template = ( + "CONSTRAINT %(name)s EXCLUDE USING %(index_type)s " + "(%(expressions)s)%(include)s%(where)s%(deferrable)s" + ) + + def __init__( + self, + *, + name, + expressions, + index_type=None, + condition=None, + deferrable=None, + include=None, + opclasses=(), + ): + if index_type and index_type.lower() not in {"gist", "spgist"}: + raise ValueError( + "Exclusion constraints only support GiST or SP-GiST indexes." + ) + if not expressions: + raise ValueError( + "At least one expression is required to define an exclusion " + "constraint." + ) + if not all( + isinstance(expr, (list, tuple)) and len(expr) == 2 for expr in expressions + ): + raise ValueError("The expressions must be a list of 2-tuples.") + if not isinstance(condition, (type(None), Q)): + raise ValueError("ExclusionConstraint.condition must be a Q instance.") + if condition and deferrable: + raise ValueError("ExclusionConstraint with conditions cannot be deferred.") + if not isinstance(deferrable, (type(None), Deferrable)): + raise ValueError( + "ExclusionConstraint.deferrable must be a Deferrable instance." + ) + if not isinstance(include, (type(None), list, tuple)): + raise ValueError("ExclusionConstraint.include must be a list or tuple.") + if include and index_type and index_type.lower() != "gist": + raise ValueError( + "Covering exclusion constraints only support GiST indexes." + ) + if not isinstance(opclasses, (list, tuple)): + raise ValueError("ExclusionConstraint.opclasses must be a list or tuple.") + if opclasses and len(expressions) != len(opclasses): + raise ValueError( + "ExclusionConstraint.expressions and " + "ExclusionConstraint.opclasses must have the same number of " + "elements." + ) + self.expressions = expressions + self.index_type = index_type or "GIST" + self.condition = condition + self.deferrable = deferrable + self.include = tuple(include) if include else () + self.opclasses = opclasses + super().__init__(name=name) + + def _get_expression_sql(self, compiler, schema_editor, query): + expressions = [] + for idx, (expression, operator) in enumerate(self.expressions): + if isinstance(expression, str): + expression = F(expression) + expression = expression.resolve_expression(query=query) + sql, params = compiler.compile(expression) + if not isinstance(expression, Col): + sql = f"({sql})" + try: + opclass = self.opclasses[idx] + if opclass: + sql = "%s %s" % (sql, opclass) + except IndexError: + pass + sql = sql % tuple(schema_editor.quote_value(p) for p in params) + expressions.append("%s WITH %s" % (sql, operator)) + return expressions + + def _get_condition_sql(self, compiler, schema_editor, query): + if self.condition is None: + return None + where = query.build_where(self.condition) + sql, params = where.as_sql(compiler, schema_editor.connection) + return sql % tuple(schema_editor.quote_value(p) for p in params) + + def constraint_sql(self, model, schema_editor): + query = Query(model, alias_cols=False) + compiler = query.get_compiler(connection=schema_editor.connection) + expressions = self._get_expression_sql(compiler, schema_editor, query) + condition = self._get_condition_sql(compiler, schema_editor, query) + include = [ + model._meta.get_field(field_name).column for field_name in self.include + ] + return self.template % { + "name": schema_editor.quote_name(self.name), + "index_type": self.index_type, + "expressions": ", ".join(expressions), + "include": schema_editor._index_include_sql(model, include), + "where": " WHERE (%s)" % condition if condition else "", + "deferrable": schema_editor._deferrable_constraint_sql(self.deferrable), + } + + def create_sql(self, model, schema_editor): + self.check_supported(schema_editor) + return Statement( + "ALTER TABLE %(table)s ADD %(constraint)s", + table=Table(model._meta.db_table, schema_editor.quote_name), + constraint=self.constraint_sql(model, schema_editor), + ) + + def remove_sql(self, model, schema_editor): + return schema_editor._delete_constraint_sql( + schema_editor.sql_delete_check, + model, + schema_editor.quote_name(self.name), + ) + + def check_supported(self, schema_editor): + if ( + self.include + and not schema_editor.connection.features.supports_covering_gist_indexes + ): + raise NotSupportedError( + "Covering exclusion constraints requires PostgreSQL 12+." + ) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + kwargs["expressions"] = self.expressions + if self.condition is not None: + kwargs["condition"] = self.condition + if self.index_type.lower() != "gist": + kwargs["index_type"] = self.index_type + if self.deferrable: + kwargs["deferrable"] = self.deferrable + if self.include: + kwargs["include"] = self.include + if self.opclasses: + kwargs["opclasses"] = self.opclasses + return path, args, kwargs + + def __eq__(self, other): + if isinstance(other, self.__class__): + return ( + self.name == other.name + and self.index_type == other.index_type + and self.expressions == other.expressions + and self.condition == other.condition + and self.deferrable == other.deferrable + and self.include == other.include + and self.opclasses == other.opclasses + ) + return super().__eq__(other) + + def __repr__(self): + return "<%s: index_type=%s expressions=%s name=%s%s%s%s%s>" % ( + self.__class__.__qualname__, + repr(self.index_type), + repr(self.expressions), + repr(self.name), + "" if self.condition is None else " condition=%s" % self.condition, + "" if self.deferrable is None else " deferrable=%r" % self.deferrable, + "" if not self.include else " include=%s" % repr(self.include), + "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), + ) diff --git a/venv/Lib/site-packages/django/contrib/postgres/expressions.py b/venv/Lib/site-packages/django/contrib/postgres/expressions.py new file mode 100644 index 000000000..469f4e9fb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/expressions.py @@ -0,0 +1,14 @@ +from django.contrib.postgres.fields import ArrayField +from django.db.models import Subquery +from django.utils.functional import cached_property + + +class ArraySubquery(Subquery): + template = "ARRAY(%(subquery)s)" + + def __init__(self, queryset, **kwargs): + super().__init__(queryset, **kwargs) + + @cached_property + def output_field(self): + return ArrayField(self.query.output_field) diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/__init__.py b/venv/Lib/site-packages/django/contrib/postgres/fields/__init__.py new file mode 100644 index 000000000..ef110279d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/__init__.py @@ -0,0 +1,5 @@ +from .array import * # NOQA +from .citext import * # NOQA +from .hstore import * # NOQA +from .jsonb import * # NOQA +from .ranges import * # NOQA diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ca23ab43e692cbe86381611b78872dfa48eb0a4 GIT binary patch literal 297 zcmYk2%}T^T4991>wiIz6q~hAUhzN>$5D`BvWw6Yb>(uT{nWT&R9=?RHRPf}e#6NPDLawv817@aD+0Jw}6%138g g17%%1@35}-yUmavu7c@Xdo&&n<6m-?^D%e$4>oC1AOHXW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87bf9e7d3b88192d55763aa0130a1d35972f7ef8 GIT binary patch literal 11698 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b8feadddef877e6e3f07f751070cc2d44487db4 GIT binary patch literal 1185 zcmah|OK;Oa5Z?7GPMU;JN?Yz+d}wk<2vst)L_!tfaj`5`j&~c}`Vn?FRoiPT^=|;T z{sDfBB~F|;qTV<$vrbDY5RA0rdF?lk9ap_xhXDO}_jU4x67mg|WpY8;hNCzzPB_g; zK_gmNkyY4{P05sS>obj^dL+y{#f77Hvbu(Wvx zEFG}eVDb6NYZ7$7Lnac~bvt~Y$em2&yzV?Jk}PlJ_8W1mjTkufN;v)<)eXl>ab7sa zNDR5Tks|am*$YKI1VNC9auQh=WS?@%t#d!Jo2DY?f;c2{p*&Z%AT)(p-4MzMgh%y( zajMA~`A9#J4FXrJz1j-LfmOR|J`=LOI~AH`r53VGa;8saBA~USM81DX>o#L)o+!oG zCHYx|kK(sVNEN@DE0x4gt8`w7Qmc43)6eIVcqfxeZ@rY&fk<_HB+8@sMK+05rp4AQ zNe`2$P%%G9%4s!9t5VBsGMZINPo+?!eVnZtr4W3qhqDv80<~jz$^zD>r<={_hJVzX zV!$<_j3Wr)CFQkmVh)1(xi>r|v)%CDfW#rLi|`fUXvwm|@^TnhG3x+Fw+# za0OoNGgc;rV65&iR#beRqugce!#v3wkLg3MB4%$f%~a$$V@nx(;FXxxJg0{#k@=)c z2X^zspxz?vaU0GRHgdfyO|KGvlf6q@-h;1PLv|k-cD}?+J`BYrxx!KT#G&SL3d$|I z&L%g&4AaBv_T(n;B|w93P|=MY%Lm9%`!AvoLH|HR_d0?ZL=zmeqd~JwLp~Y8@I|g9 wKEK4(m)KCk`~3nIf53~Hf>5& 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a782fb483be9715a31dbeb0e5d469a4d8a43c81e GIT binary patch literal 516 zcmZ8d!Ab)$5KVShyOb7-c<>i`X!kB6m5TKsMJ!&HVA$QHC3U-7Gf6?|t^FB)X~C0U z;MJ3pErsg9d&x}lCX-jT+f9P;{rs77T)$j$7(ONg1e_v`h#-P)5gRWi!kdt;pJDw^ zc$f_kaE2sFOa+NOL4~&^u`hho1l7s4FdZZ}54R5xLj-h?3|W&kU3(j! z;sDryj=QvKfHVoV>H1XwGM`pKkt}3&v`TU-KZrg?@Ab*C7DTJVxAPUGRn%rO&u*uFf%P7nktzK zh^$dL^p|f{$hj(%;oNxujym-H{NG>u`%7aq0u^p*&Z{Qpi&EI!?OU9`+9cnd=n(tV nzd4|Wt5GBeaBhX9Me7QBQ?CcNofX 1: + raise exceptions.ValidationError( + self.error_messages["nested_array_mismatch"], + code="nested_array_mismatch", + ) + + def run_validators(self, value): + super().run_validators(value) + for index, part in enumerate(value): + try: + self.base_field.run_validators(part) + except exceptions.ValidationError as error: + raise prefix_validation_error( + error, + prefix=self.error_messages["item_invalid"], + code="item_invalid", + params={"nth": index + 1}, + ) + + def formfield(self, **kwargs): + return super().formfield( + **{ + "form_class": SimpleArrayField, + "base_field": self.base_field.formfield(), + "max_length": self.size, + **kwargs, + } + ) + + +class ArrayRHSMixin: + def __init__(self, lhs, rhs): + if isinstance(rhs, (tuple, list)): + expressions = [] + for value in rhs: + if not hasattr(value, "resolve_expression"): + field = lhs.output_field + value = Value(field.base_field.get_prep_value(value)) + expressions.append(value) + rhs = Func( + *expressions, + function="ARRAY", + template="%(function)s[%(expressions)s]", + ) + super().__init__(lhs, rhs) + + def process_rhs(self, compiler, connection): + rhs, rhs_params = super().process_rhs(compiler, connection) + cast_type = self.lhs.output_field.cast_db_type(connection) + return "%s::%s" % (rhs, cast_type), rhs_params + + +@ArrayField.register_lookup +class ArrayContains(ArrayRHSMixin, lookups.DataContains): + pass + + +@ArrayField.register_lookup +class ArrayContainedBy(ArrayRHSMixin, lookups.ContainedBy): + pass + + +@ArrayField.register_lookup +class ArrayExact(ArrayRHSMixin, Exact): + pass + + +@ArrayField.register_lookup +class ArrayOverlap(ArrayRHSMixin, lookups.Overlap): + pass + + +@ArrayField.register_lookup +class ArrayLenTransform(Transform): + lookup_name = "len" + output_field = IntegerField() + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + # Distinguish NULL and empty arrays + return ( + "CASE WHEN %(lhs)s IS NULL THEN NULL ELSE " + "coalesce(array_length(%(lhs)s, 1), 0) END" + ) % {"lhs": lhs}, params + + +@ArrayField.register_lookup +class ArrayInLookup(In): + def get_prep_lookup(self): + values = super().get_prep_lookup() + if hasattr(values, "resolve_expression"): + return values + # In.process_rhs() expects values to be hashable, so convert lists + # to tuples. + prepared_values = [] + for value in values: + if hasattr(value, "resolve_expression"): + prepared_values.append(value) + else: + prepared_values.append(tuple(value)) + return prepared_values + + +class IndexTransform(Transform): + def __init__(self, index, base_field, *args, **kwargs): + super().__init__(*args, **kwargs) + self.index = index + self.base_field = base_field + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return "%s[%%s]" % lhs, params + [self.index] + + @property + def output_field(self): + return self.base_field + + +class IndexTransformFactory: + def __init__(self, index, base_field): + self.index = index + self.base_field = base_field + + def __call__(self, *args, **kwargs): + return IndexTransform(self.index, self.base_field, *args, **kwargs) + + +class SliceTransform(Transform): + def __init__(self, start, end, *args, **kwargs): + super().__init__(*args, **kwargs) + self.start = start + self.end = end + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return "%s[%%s:%%s]" % lhs, params + [self.start, self.end] + + +class SliceTransformFactory: + def __init__(self, start, end): + self.start = start + self.end = end + + def __call__(self, *args, **kwargs): + return SliceTransform(self.start, self.end, *args, **kwargs) diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/citext.py b/venv/Lib/site-packages/django/contrib/postgres/fields/citext.py new file mode 100644 index 000000000..2b943614d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/citext.py @@ -0,0 +1,23 @@ +from django.db.models import CharField, EmailField, TextField + +__all__ = ["CICharField", "CIEmailField", "CIText", "CITextField"] + + +class CIText: + def get_internal_type(self): + return "CI" + super().get_internal_type() + + def db_type(self, connection): + return "citext" + + +class CICharField(CIText, CharField): + pass + + +class CIEmailField(CIText, EmailField): + pass + + +class CITextField(CIText, TextField): + pass diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/hstore.py b/venv/Lib/site-packages/django/contrib/postgres/fields/hstore.py new file mode 100644 index 000000000..cfc156ab5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/hstore.py @@ -0,0 +1,112 @@ +import json + +from django.contrib.postgres import forms, lookups +from django.contrib.postgres.fields.array import ArrayField +from django.core import exceptions +from django.db.models import Field, TextField, Transform +from django.db.models.fields.mixins import CheckFieldDefaultMixin +from django.utils.translation import gettext_lazy as _ + +__all__ = ["HStoreField"] + + +class HStoreField(CheckFieldDefaultMixin, Field): + empty_strings_allowed = False + description = _("Map of strings to strings/nulls") + default_error_messages = { + "not_a_string": _("The value of “%(key)s” is not a string or null."), + } + _default_hint = ("dict", "{}") + + def db_type(self, connection): + return "hstore" + + def get_transform(self, name): + transform = super().get_transform(name) + if transform: + return transform + return KeyTransformFactory(name) + + def validate(self, value, model_instance): + super().validate(value, model_instance) + for key, val in value.items(): + if not isinstance(val, str) and val is not None: + raise exceptions.ValidationError( + self.error_messages["not_a_string"], + code="not_a_string", + params={"key": key}, + ) + + def to_python(self, value): + if isinstance(value, str): + value = json.loads(value) + return value + + def value_to_string(self, obj): + return json.dumps(self.value_from_object(obj)) + + def formfield(self, **kwargs): + return super().formfield( + **{ + "form_class": forms.HStoreField, + **kwargs, + } + ) + + def get_prep_value(self, value): + value = super().get_prep_value(value) + + if isinstance(value, dict): + prep_value = {} + for key, val in value.items(): + key = str(key) + if val is not None: + val = str(val) + prep_value[key] = val + value = prep_value + + if isinstance(value, list): + value = [str(item) for item in value] + + return value + + +HStoreField.register_lookup(lookups.DataContains) +HStoreField.register_lookup(lookups.ContainedBy) +HStoreField.register_lookup(lookups.HasKey) +HStoreField.register_lookup(lookups.HasKeys) +HStoreField.register_lookup(lookups.HasAnyKeys) + + +class KeyTransform(Transform): + output_field = TextField() + + def __init__(self, key_name, *args, **kwargs): + super().__init__(*args, **kwargs) + self.key_name = key_name + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return "(%s -> %%s)" % lhs, tuple(params) + (self.key_name,) + + +class KeyTransformFactory: + def __init__(self, key_name): + self.key_name = key_name + + def __call__(self, *args, **kwargs): + return KeyTransform(self.key_name, *args, **kwargs) + + +@HStoreField.register_lookup +class KeysTransform(Transform): + lookup_name = "keys" + function = "akeys" + output_field = ArrayField(TextField()) + + +@HStoreField.register_lookup +class ValuesTransform(Transform): + lookup_name = "values" + function = "avals" + output_field = ArrayField(TextField()) diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/jsonb.py b/venv/Lib/site-packages/django/contrib/postgres/fields/jsonb.py new file mode 100644 index 000000000..760b5d839 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/jsonb.py @@ -0,0 +1,14 @@ +from django.db.models import JSONField as BuiltinJSONField + +__all__ = ["JSONField"] + + +class JSONField(BuiltinJSONField): + system_check_removed_details = { + "msg": ( + "django.contrib.postgres.fields.JSONField is removed except for " + "support in historical migrations." + ), + "hint": "Use django.db.models.JSONField instead.", + "id": "fields.E904", + } diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/ranges.py b/venv/Lib/site-packages/django/contrib/postgres/fields/ranges.py new file mode 100644 index 000000000..db3ca3211 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/ranges.py @@ -0,0 +1,333 @@ +import datetime +import json + +from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange, Range + +from django.contrib.postgres import forms, lookups +from django.db import models +from django.db.models.lookups import PostgresOperatorLookup + +from .utils import AttributeSetter + +__all__ = [ + "RangeField", + "IntegerRangeField", + "BigIntegerRangeField", + "DecimalRangeField", + "DateTimeRangeField", + "DateRangeField", + "RangeBoundary", + "RangeOperators", +] + + +class RangeBoundary(models.Expression): + """A class that represents range boundaries.""" + + def __init__(self, inclusive_lower=True, inclusive_upper=False): + self.lower = "[" if inclusive_lower else "(" + self.upper = "]" if inclusive_upper else ")" + + def as_sql(self, compiler, connection): + return "'%s%s'" % (self.lower, self.upper), [] + + +class RangeOperators: + # https://www.postgresql.org/docs/current/functions-range.html#RANGE-OPERATORS-TABLE + EQUAL = "=" + NOT_EQUAL = "<>" + CONTAINS = "@>" + CONTAINED_BY = "<@" + OVERLAPS = "&&" + FULLY_LT = "<<" + FULLY_GT = ">>" + NOT_LT = "&>" + NOT_GT = "&<" + ADJACENT_TO = "-|-" + + +class RangeField(models.Field): + empty_strings_allowed = False + + def __init__(self, *args, **kwargs): + # Initializing base_field here ensures that its model matches the model + # for self. + if hasattr(self, "base_field"): + self.base_field = self.base_field() + super().__init__(*args, **kwargs) + + @property + def model(self): + try: + return self.__dict__["model"] + except KeyError: + raise AttributeError( + "'%s' object has no attribute 'model'" % self.__class__.__name__ + ) + + @model.setter + def model(self, model): + self.__dict__["model"] = model + self.base_field.model = model + + @classmethod + def _choices_is_value(cls, value): + return isinstance(value, (list, tuple)) or super()._choices_is_value(value) + + def get_prep_value(self, value): + if value is None: + return None + elif isinstance(value, Range): + return value + elif isinstance(value, (list, tuple)): + return self.range_type(value[0], value[1]) + return value + + def to_python(self, value): + if isinstance(value, str): + # Assume we're deserializing + vals = json.loads(value) + for end in ("lower", "upper"): + if end in vals: + vals[end] = self.base_field.to_python(vals[end]) + value = self.range_type(**vals) + elif isinstance(value, (list, tuple)): + value = self.range_type(value[0], value[1]) + return value + + def set_attributes_from_name(self, name): + super().set_attributes_from_name(name) + self.base_field.set_attributes_from_name(name) + + def value_to_string(self, obj): + value = self.value_from_object(obj) + if value is None: + return None + if value.isempty: + return json.dumps({"empty": True}) + base_field = self.base_field + result = {"bounds": value._bounds} + for end in ("lower", "upper"): + val = getattr(value, end) + if val is None: + result[end] = None + else: + obj = AttributeSetter(base_field.attname, val) + result[end] = base_field.value_to_string(obj) + return json.dumps(result) + + def formfield(self, **kwargs): + kwargs.setdefault("form_class", self.form_field) + return super().formfield(**kwargs) + + +class IntegerRangeField(RangeField): + base_field = models.IntegerField + range_type = NumericRange + form_field = forms.IntegerRangeField + + def db_type(self, connection): + return "int4range" + + +class BigIntegerRangeField(RangeField): + base_field = models.BigIntegerField + range_type = NumericRange + form_field = forms.IntegerRangeField + + def db_type(self, connection): + return "int8range" + + +class DecimalRangeField(RangeField): + base_field = models.DecimalField + range_type = NumericRange + form_field = forms.DecimalRangeField + + def db_type(self, connection): + return "numrange" + + +class DateTimeRangeField(RangeField): + base_field = models.DateTimeField + range_type = DateTimeTZRange + form_field = forms.DateTimeRangeField + + def db_type(self, connection): + return "tstzrange" + + +class DateRangeField(RangeField): + base_field = models.DateField + range_type = DateRange + form_field = forms.DateRangeField + + def db_type(self, connection): + return "daterange" + + +RangeField.register_lookup(lookups.DataContains) +RangeField.register_lookup(lookups.ContainedBy) +RangeField.register_lookup(lookups.Overlap) + + +class DateTimeRangeContains(PostgresOperatorLookup): + """ + Lookup for Date/DateTimeRange containment to cast the rhs to the correct + type. + """ + + lookup_name = "contains" + postgres_operator = RangeOperators.CONTAINS + + def process_rhs(self, compiler, connection): + # Transform rhs value for db lookup. + if isinstance(self.rhs, datetime.date): + value = models.Value(self.rhs) + self.rhs = value.resolve_expression(compiler.query) + return super().process_rhs(compiler, connection) + + def as_postgresql(self, compiler, connection): + sql, params = super().as_postgresql(compiler, connection) + # Cast the rhs if needed. + cast_sql = "" + if ( + isinstance(self.rhs, models.Expression) + and self.rhs._output_field_or_none + and + # Skip cast if rhs has a matching range type. + not isinstance( + self.rhs._output_field_or_none, self.lhs.output_field.__class__ + ) + ): + cast_internal_type = self.lhs.output_field.base_field.get_internal_type() + cast_sql = "::{}".format(connection.data_types.get(cast_internal_type)) + return "%s%s" % (sql, cast_sql), params + + +DateRangeField.register_lookup(DateTimeRangeContains) +DateTimeRangeField.register_lookup(DateTimeRangeContains) + + +class RangeContainedBy(PostgresOperatorLookup): + lookup_name = "contained_by" + type_mapping = { + "smallint": "int4range", + "integer": "int4range", + "bigint": "int8range", + "double precision": "numrange", + "numeric": "numrange", + "date": "daterange", + "timestamp with time zone": "tstzrange", + } + postgres_operator = RangeOperators.CONTAINED_BY + + def process_rhs(self, compiler, connection): + rhs, rhs_params = super().process_rhs(compiler, connection) + # Ignore precision for DecimalFields. + db_type = self.lhs.output_field.cast_db_type(connection).split("(")[0] + cast_type = self.type_mapping[db_type] + return "%s::%s" % (rhs, cast_type), rhs_params + + def process_lhs(self, compiler, connection): + lhs, lhs_params = super().process_lhs(compiler, connection) + if isinstance(self.lhs.output_field, models.FloatField): + lhs = "%s::numeric" % lhs + elif isinstance(self.lhs.output_field, models.SmallIntegerField): + lhs = "%s::integer" % lhs + return lhs, lhs_params + + def get_prep_lookup(self): + return RangeField().get_prep_value(self.rhs) + + +models.DateField.register_lookup(RangeContainedBy) +models.DateTimeField.register_lookup(RangeContainedBy) +models.IntegerField.register_lookup(RangeContainedBy) +models.FloatField.register_lookup(RangeContainedBy) +models.DecimalField.register_lookup(RangeContainedBy) + + +@RangeField.register_lookup +class FullyLessThan(PostgresOperatorLookup): + lookup_name = "fully_lt" + postgres_operator = RangeOperators.FULLY_LT + + +@RangeField.register_lookup +class FullGreaterThan(PostgresOperatorLookup): + lookup_name = "fully_gt" + postgres_operator = RangeOperators.FULLY_GT + + +@RangeField.register_lookup +class NotLessThan(PostgresOperatorLookup): + lookup_name = "not_lt" + postgres_operator = RangeOperators.NOT_LT + + +@RangeField.register_lookup +class NotGreaterThan(PostgresOperatorLookup): + lookup_name = "not_gt" + postgres_operator = RangeOperators.NOT_GT + + +@RangeField.register_lookup +class AdjacentToLookup(PostgresOperatorLookup): + lookup_name = "adjacent_to" + postgres_operator = RangeOperators.ADJACENT_TO + + +@RangeField.register_lookup +class RangeStartsWith(models.Transform): + lookup_name = "startswith" + function = "lower" + + @property + def output_field(self): + return self.lhs.output_field.base_field + + +@RangeField.register_lookup +class RangeEndsWith(models.Transform): + lookup_name = "endswith" + function = "upper" + + @property + def output_field(self): + return self.lhs.output_field.base_field + + +@RangeField.register_lookup +class IsEmpty(models.Transform): + lookup_name = "isempty" + function = "isempty" + output_field = models.BooleanField() + + +@RangeField.register_lookup +class LowerInclusive(models.Transform): + lookup_name = "lower_inc" + function = "LOWER_INC" + output_field = models.BooleanField() + + +@RangeField.register_lookup +class LowerInfinite(models.Transform): + lookup_name = "lower_inf" + function = "LOWER_INF" + output_field = models.BooleanField() + + +@RangeField.register_lookup +class UpperInclusive(models.Transform): + lookup_name = "upper_inc" + function = "UPPER_INC" + output_field = models.BooleanField() + + +@RangeField.register_lookup +class UpperInfinite(models.Transform): + lookup_name = "upper_inf" + function = "UPPER_INF" + output_field = models.BooleanField() diff --git a/venv/Lib/site-packages/django/contrib/postgres/fields/utils.py b/venv/Lib/site-packages/django/contrib/postgres/fields/utils.py new file mode 100644 index 000000000..82da93e89 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/fields/utils.py @@ -0,0 +1,3 @@ +class AttributeSetter: + def __init__(self, name, value): + setattr(self, name, value) diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/__init__.py b/venv/Lib/site-packages/django/contrib/postgres/forms/__init__.py new file mode 100644 index 000000000..bb2685eca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/forms/__init__.py @@ -0,0 +1,3 @@ +from .array import * # NOQA +from .hstore import * # NOQA +from .ranges import * # NOQA diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c6ce344bad3fbdb03de8d2be5b104de4d122892 GIT binary patch literal 261 zcmYk0%}T>i5QXneX$Zx>fiDoDW-lUwqAo{C%=tKQI1Ejv6QlZ^zf}*)_igyEM8mP3?5Z`Uu`6@;OZ&$}ncSLu^kKD<+rjQ# z<)dNjnBC?veU?a!L&`2JP+kp>we@3P;p71B1zF&x7jbY(b>Cu$0_Q$n^c9?WmN>g+ zT4EhxjbRO!z5?+PXPv8GoGwDM)MYAa3Xy$PbR==XD8&~Qnk!vcE^4La|}r5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/array.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/array.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c6a18a4beed2731bd4f514a739a090fcb56e169 GIT binary patch literal 7967 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 mdw0ZDbAdNNRZn{4J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c21d2dcd3ff8ca4cb2570ce9c3a63c40bfaf493 GIT binary patch literal 3772 zcmb7HO^@5g8J-zZ6h%>5SzfQ5k2U2U>hW{<2XPn6j`?c2q6TQGpnUc zk;=@-n-%0s*Fa9`FX+K8dhs9Wk08)fPdyg7<>2Ifhtx{z55%Rw;k@(t&NI*Z%qVZQ zJOa=EzWDdSq(#Vo(Aa!zFy4n({RQ&dGaMVw5d zbfc)d@@%85edc)8t@OgQD5o!)8%B)l-F$FY@lijAM38`T5-{$3O%5q%+u2(0CYI*s*$W9DK1%y$Z>aF6kk=Z)tK$9@3??WRDo`{XTh2hX7Yi z&1XUuZWtz6qQkIn7q$}VVbDAPY{Fv$T~Uj)mMW;1rg}_^Mi|Cvq*NF_Cf}tu-W~l} z38_Y(&6SEqH}e?wD${E8aiVX}4@S2Vsr2Mg`JmFx=T8N?*#DKhd2U686Yw=sHFKZpi-O90GvLP*rTZ3i_*D}S0G;|uVAUi zMVwD(;HbhHv+35lnY;i^`VL~AMN<)mg%^g?oX=Ct`(gOyJW9(NvsU>N zoTpU*9*Z;$!woNXpjM(Qh7Jgh@xdi++ObX9i`jM!TA#6v0>^5GalkcT+?r{Q+=7OS z4?gIX1nB9bNcYq%O|O*tcL7iK6) zs@amRNLpfLNvtiws6(#W5qSwq&HBxz7!VMEpTetfyMY_8J`;&&45>CkUd3VFz@!IB zQ4d3&$AB>oC2_3hqK%MX&kAju?l1$>GiY1T2p{z!BrCLq#px-9l$}y;{hbB2s0C%b zW1PD|ojbe^@$Pb$H{jbaaqj_3J&7m8;_^ozR?=Vub4&{GW-dv}gRPw7bNUVaE$ zC3+@ydegbmy)4%~)JwrljmY@9Mgx$9dXkv|i}pc2&v=+i4!WC-V~VS&9z+-St_iQ2 zK*B+2?osJ$vLq8afn_Zzr+aW1newYx%7Iwl&~9NA24Uk zI~N8BBfd9qpdlmx5E-%isM-J`SnQO^%S-mq0=2Rqfr^`4?GYV=ash;7PUKry&q-N} z-?DC>tXPgGOW`Fd$$%SKEDF!iBE(27S|DJvNQ$u3I6OJzYmoG9qkZyq$OoQL#SnoD zJR^-JzY!fK0wy#^B=!^6c9{!b+g`l>6fEZ^KZi{X#&O{_*ht7Msj~6( zTGA4sC4<#dd36bEH($22?%MLI2D%|~oW26okEqXjL@s0LG>s`kAxDDT7s>0Ub2U-6-*Y>Wpz$C(LaaO`&MpaK5bavw!5Xq7TvT?R^7#7&mJ!sLYli7JJWWq9Bc zhcR%CeeXQ69iO>=r)_jBh8E`@3#|9y{TA1`l1pAmWkOLXCr(foZqVQs$e}G!gUqfh zuB`ZN%A+)6dd;9Q##yTJN$pRTHQ%s+EtwI0O$NICTRVri}2T@a`Cmb zi$G2|XMpZvSHsQxWngWsF3TIv;tszUSDg6>TNr22`cY@w*!)dM7CX;#_GSDu|2#H) zWH=-S?{oJaC(N+Y_=wi9e>vEisgpRLjo%r-e+(HZX$CQ?MJg3edBZLF)+~)doJ&z^ z$#zv@?z@BPsx9%pBavdkm8yQOlT;00f=s1Gd1M3IAfNH>g6Cam&Ny=&3AW6CAke9~ zDA$K^S;mavq1kDJ;97OgSYEh$<<0axJp9c+if!UEAC5Yox~$XeG`scA?>bJ$*>-*a DOlL+* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/array.py b/venv/Lib/site-packages/django/contrib/postgres/forms/array.py new file mode 100644 index 000000000..ddb022afc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/forms/array.py @@ -0,0 +1,251 @@ +import copy +from itertools import chain + +from django import forms +from django.contrib.postgres.validators import ( + ArrayMaxLengthValidator, + ArrayMinLengthValidator, +) +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from ..utils import prefix_validation_error + + +class SimpleArrayField(forms.CharField): + default_error_messages = { + "item_invalid": _("Item %(nth)s in the array did not validate:"), + } + + def __init__( + self, base_field, *, delimiter=",", max_length=None, min_length=None, **kwargs + ): + self.base_field = base_field + self.delimiter = delimiter + super().__init__(**kwargs) + if min_length is not None: + self.min_length = min_length + self.validators.append(ArrayMinLengthValidator(int(min_length))) + if max_length is not None: + self.max_length = max_length + self.validators.append(ArrayMaxLengthValidator(int(max_length))) + + def clean(self, value): + value = super().clean(value) + return [self.base_field.clean(val) for val in value] + + def prepare_value(self, value): + if isinstance(value, list): + return self.delimiter.join( + str(self.base_field.prepare_value(v)) for v in value + ) + return value + + def to_python(self, value): + if isinstance(value, list): + items = value + elif value: + items = value.split(self.delimiter) + else: + items = [] + errors = [] + values = [] + for index, item in enumerate(items): + try: + values.append(self.base_field.to_python(item)) + except ValidationError as error: + errors.append( + prefix_validation_error( + error, + prefix=self.error_messages["item_invalid"], + code="item_invalid", + params={"nth": index + 1}, + ) + ) + if errors: + raise ValidationError(errors) + return values + + def validate(self, value): + super().validate(value) + errors = [] + for index, item in enumerate(value): + try: + self.base_field.validate(item) + except ValidationError as error: + errors.append( + prefix_validation_error( + error, + prefix=self.error_messages["item_invalid"], + code="item_invalid", + params={"nth": index + 1}, + ) + ) + if errors: + raise ValidationError(errors) + + def run_validators(self, value): + super().run_validators(value) + errors = [] + for index, item in enumerate(value): + try: + self.base_field.run_validators(item) + except ValidationError as error: + errors.append( + prefix_validation_error( + error, + prefix=self.error_messages["item_invalid"], + code="item_invalid", + params={"nth": index + 1}, + ) + ) + if errors: + raise ValidationError(errors) + + def has_changed(self, initial, data): + try: + value = self.to_python(data) + except ValidationError: + pass + else: + if initial in self.empty_values and value in self.empty_values: + return False + return super().has_changed(initial, data) + + +class SplitArrayWidget(forms.Widget): + template_name = "postgres/widgets/split_array.html" + + def __init__(self, widget, size, **kwargs): + self.widget = widget() if isinstance(widget, type) else widget + self.size = size + super().__init__(**kwargs) + + @property + def is_hidden(self): + return self.widget.is_hidden + + def value_from_datadict(self, data, files, name): + return [ + self.widget.value_from_datadict(data, files, "%s_%s" % (name, index)) + for index in range(self.size) + ] + + def value_omitted_from_data(self, data, files, name): + return all( + self.widget.value_omitted_from_data(data, files, "%s_%s" % (name, index)) + for index in range(self.size) + ) + + def id_for_label(self, id_): + # See the comment for RadioSelect.id_for_label() + if id_: + id_ += "_0" + return id_ + + def get_context(self, name, value, attrs=None): + attrs = {} if attrs is None else attrs + context = super().get_context(name, value, attrs) + if self.is_localized: + self.widget.is_localized = self.is_localized + value = value or [] + context["widget"]["subwidgets"] = [] + final_attrs = self.build_attrs(attrs) + id_ = final_attrs.get("id") + for i in range(max(len(value), self.size)): + try: + widget_value = value[i] + except IndexError: + widget_value = None + if id_: + final_attrs = {**final_attrs, "id": "%s_%s" % (id_, i)} + context["widget"]["subwidgets"].append( + self.widget.get_context(name + "_%s" % i, widget_value, final_attrs)[ + "widget" + ] + ) + return context + + @property + def media(self): + return self.widget.media + + def __deepcopy__(self, memo): + obj = super().__deepcopy__(memo) + obj.widget = copy.deepcopy(self.widget) + return obj + + @property + def needs_multipart_form(self): + return self.widget.needs_multipart_form + + +class SplitArrayField(forms.Field): + default_error_messages = { + "item_invalid": _("Item %(nth)s in the array did not validate:"), + } + + def __init__(self, base_field, size, *, remove_trailing_nulls=False, **kwargs): + self.base_field = base_field + self.size = size + self.remove_trailing_nulls = remove_trailing_nulls + widget = SplitArrayWidget(widget=base_field.widget, size=size) + kwargs.setdefault("widget", widget) + super().__init__(**kwargs) + + def _remove_trailing_nulls(self, values): + index = None + if self.remove_trailing_nulls: + for i, value in reversed(list(enumerate(values))): + if value in self.base_field.empty_values: + index = i + else: + break + if index is not None: + values = values[:index] + return values, index + + def to_python(self, value): + value = super().to_python(value) + return [self.base_field.to_python(item) for item in value] + + def clean(self, value): + cleaned_data = [] + errors = [] + if not any(value) and self.required: + raise ValidationError(self.error_messages["required"]) + max_size = max(self.size, len(value)) + for index in range(max_size): + item = value[index] + try: + cleaned_data.append(self.base_field.clean(item)) + except ValidationError as error: + errors.append( + prefix_validation_error( + error, + self.error_messages["item_invalid"], + code="item_invalid", + params={"nth": index + 1}, + ) + ) + cleaned_data.append(None) + else: + errors.append(None) + cleaned_data, null_index = self._remove_trailing_nulls(cleaned_data) + if null_index is not None: + errors = errors[:null_index] + errors = list(filter(None, errors)) + if errors: + raise ValidationError(list(chain.from_iterable(errors))) + return cleaned_data + + def has_changed(self, initial, data): + try: + data = self.to_python(data) + except ValidationError: + pass + else: + data, _ = self._remove_trailing_nulls(data) + if initial in self.empty_values and data in self.empty_values: + return False + return super().has_changed(initial, data) diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/hstore.py b/venv/Lib/site-packages/django/contrib/postgres/forms/hstore.py new file mode 100644 index 000000000..6a20f7b72 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/forms/hstore.py @@ -0,0 +1,59 @@ +import json + +from django import forms +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +__all__ = ["HStoreField"] + + +class HStoreField(forms.CharField): + """ + A field for HStore data which accepts dictionary JSON input. + """ + + widget = forms.Textarea + default_error_messages = { + "invalid_json": _("Could not load JSON data."), + "invalid_format": _("Input must be a JSON dictionary."), + } + + def prepare_value(self, value): + if isinstance(value, dict): + return json.dumps(value) + return value + + def to_python(self, value): + if not value: + return {} + if not isinstance(value, dict): + try: + value = json.loads(value) + except json.JSONDecodeError: + raise ValidationError( + self.error_messages["invalid_json"], + code="invalid_json", + ) + + if not isinstance(value, dict): + raise ValidationError( + self.error_messages["invalid_format"], + code="invalid_format", + ) + + # Cast everything to strings for ease. + for key, val in value.items(): + if val is not None: + val = str(val) + value[key] = val + return value + + def has_changed(self, initial, data): + """ + Return True if data differs from initial. + """ + # For purposes of seeing whether something has changed, None is + # the same as an empty dict, if the data or initial value we get + # is None, replace it w/ {}. + initial_value = self.to_python(initial) + return super().has_changed(initial_value, data) diff --git a/venv/Lib/site-packages/django/contrib/postgres/forms/ranges.py b/venv/Lib/site-packages/django/contrib/postgres/forms/ranges.py new file mode 100644 index 000000000..915c0b5a7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/forms/ranges.py @@ -0,0 +1,113 @@ +from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange + +from django import forms +from django.core import exceptions +from django.forms.widgets import HiddenInput, MultiWidget +from django.utils.translation import gettext_lazy as _ + +__all__ = [ + "BaseRangeField", + "IntegerRangeField", + "DecimalRangeField", + "DateTimeRangeField", + "DateRangeField", + "HiddenRangeWidget", + "RangeWidget", +] + + +class RangeWidget(MultiWidget): + def __init__(self, base_widget, attrs=None): + widgets = (base_widget, base_widget) + super().__init__(widgets, attrs) + + def decompress(self, value): + if value: + return (value.lower, value.upper) + return (None, None) + + +class HiddenRangeWidget(RangeWidget): + """A widget that splits input into two inputs.""" + + def __init__(self, attrs=None): + super().__init__(HiddenInput, attrs) + + +class BaseRangeField(forms.MultiValueField): + default_error_messages = { + "invalid": _("Enter two valid values."), + "bound_ordering": _( + "The start of the range must not exceed the end of the range." + ), + } + hidden_widget = HiddenRangeWidget + + def __init__(self, **kwargs): + if "widget" not in kwargs: + kwargs["widget"] = RangeWidget(self.base_field.widget) + if "fields" not in kwargs: + kwargs["fields"] = [ + self.base_field(required=False), + self.base_field(required=False), + ] + kwargs.setdefault("required", False) + kwargs.setdefault("require_all_fields", False) + super().__init__(**kwargs) + + def prepare_value(self, value): + lower_base, upper_base = self.fields + if isinstance(value, self.range_type): + return [ + lower_base.prepare_value(value.lower), + upper_base.prepare_value(value.upper), + ] + if value is None: + return [ + lower_base.prepare_value(None), + upper_base.prepare_value(None), + ] + return value + + def compress(self, values): + if not values: + return None + lower, upper = values + if lower is not None and upper is not None and lower > upper: + raise exceptions.ValidationError( + self.error_messages["bound_ordering"], + code="bound_ordering", + ) + try: + range_value = self.range_type(lower, upper) + except TypeError: + raise exceptions.ValidationError( + self.error_messages["invalid"], + code="invalid", + ) + else: + return range_value + + +class IntegerRangeField(BaseRangeField): + default_error_messages = {"invalid": _("Enter two whole numbers.")} + base_field = forms.IntegerField + range_type = NumericRange + + +class DecimalRangeField(BaseRangeField): + default_error_messages = {"invalid": _("Enter two numbers.")} + base_field = forms.DecimalField + range_type = NumericRange + + +class DateTimeRangeField(BaseRangeField): + default_error_messages = {"invalid": _("Enter two valid date/times.")} + base_field = forms.DateTimeField + range_type = DateTimeTZRange + + +class DateRangeField(BaseRangeField): + default_error_messages = {"invalid": _("Enter two valid dates.")} + base_field = forms.DateField + range_type = DateRange diff --git a/venv/Lib/site-packages/django/contrib/postgres/functions.py b/venv/Lib/site-packages/django/contrib/postgres/functions.py new file mode 100644 index 000000000..f001a04fd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/functions.py @@ -0,0 +1,11 @@ +from django.db.models import DateTimeField, Func, UUIDField + + +class RandomUUID(Func): + template = "GEN_RANDOM_UUID()" + output_field = UUIDField() + + +class TransactionNow(Func): + template = "CURRENT_TIMESTAMP" + output_field = DateTimeField() diff --git a/venv/Lib/site-packages/django/contrib/postgres/indexes.py b/venv/Lib/site-packages/django/contrib/postgres/indexes.py new file mode 100644 index 000000000..524cdadc6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/indexes.py @@ -0,0 +1,242 @@ +from django.db import NotSupportedError +from django.db.models import Func, Index +from django.utils.functional import cached_property + +__all__ = [ + "BloomIndex", + "BrinIndex", + "BTreeIndex", + "GinIndex", + "GistIndex", + "HashIndex", + "SpGistIndex", +] + + +class PostgresIndex(Index): + @cached_property + def max_name_length(self): + # Allow an index name longer than 30 characters when the suffix is + # longer than the usual 3 character limit. The 30 character limit for + # cross-database compatibility isn't applicable to PostgreSQL-specific + # indexes. + return Index.max_name_length - len(Index.suffix) + len(self.suffix) + + def create_sql(self, model, schema_editor, using="", **kwargs): + self.check_supported(schema_editor) + statement = super().create_sql( + model, schema_editor, using=" USING %s" % self.suffix, **kwargs + ) + with_params = self.get_with_params() + if with_params: + statement.parts["extra"] = "WITH (%s) %s" % ( + ", ".join(with_params), + statement.parts["extra"], + ) + return statement + + def check_supported(self, schema_editor): + pass + + def get_with_params(self): + return [] + + +class BloomIndex(PostgresIndex): + suffix = "bloom" + + def __init__(self, *expressions, length=None, columns=(), **kwargs): + super().__init__(*expressions, **kwargs) + if len(self.fields) > 32: + raise ValueError("Bloom indexes support a maximum of 32 fields.") + if not isinstance(columns, (list, tuple)): + raise ValueError("BloomIndex.columns must be a list or tuple.") + if len(columns) > len(self.fields): + raise ValueError("BloomIndex.columns cannot have more values than fields.") + if not all(0 < col <= 4095 for col in columns): + raise ValueError( + "BloomIndex.columns must contain integers from 1 to 4095.", + ) + if length is not None and not 0 < length <= 4096: + raise ValueError( + "BloomIndex.length must be None or an integer from 1 to 4096.", + ) + self.length = length + self.columns = columns + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.length is not None: + kwargs["length"] = self.length + if self.columns: + kwargs["columns"] = self.columns + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.length is not None: + with_params.append("length = %d" % self.length) + if self.columns: + with_params.extend( + "col%d = %d" % (i, v) for i, v in enumerate(self.columns, start=1) + ) + return with_params + + +class BrinIndex(PostgresIndex): + suffix = "brin" + + def __init__( + self, *expressions, autosummarize=None, pages_per_range=None, **kwargs + ): + if pages_per_range is not None and pages_per_range <= 0: + raise ValueError("pages_per_range must be None or a positive integer") + self.autosummarize = autosummarize + self.pages_per_range = pages_per_range + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.autosummarize is not None: + kwargs["autosummarize"] = self.autosummarize + if self.pages_per_range is not None: + kwargs["pages_per_range"] = self.pages_per_range + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.autosummarize is not None: + with_params.append( + "autosummarize = %s" % ("on" if self.autosummarize else "off") + ) + if self.pages_per_range is not None: + with_params.append("pages_per_range = %d" % self.pages_per_range) + return with_params + + +class BTreeIndex(PostgresIndex): + suffix = "btree" + + def __init__(self, *expressions, fillfactor=None, **kwargs): + self.fillfactor = fillfactor + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fillfactor is not None: + kwargs["fillfactor"] = self.fillfactor + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.fillfactor is not None: + with_params.append("fillfactor = %d" % self.fillfactor) + return with_params + + +class GinIndex(PostgresIndex): + suffix = "gin" + + def __init__( + self, *expressions, fastupdate=None, gin_pending_list_limit=None, **kwargs + ): + self.fastupdate = fastupdate + self.gin_pending_list_limit = gin_pending_list_limit + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fastupdate is not None: + kwargs["fastupdate"] = self.fastupdate + if self.gin_pending_list_limit is not None: + kwargs["gin_pending_list_limit"] = self.gin_pending_list_limit + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.gin_pending_list_limit is not None: + with_params.append( + "gin_pending_list_limit = %d" % self.gin_pending_list_limit + ) + if self.fastupdate is not None: + with_params.append("fastupdate = %s" % ("on" if self.fastupdate else "off")) + return with_params + + +class GistIndex(PostgresIndex): + suffix = "gist" + + def __init__(self, *expressions, buffering=None, fillfactor=None, **kwargs): + self.buffering = buffering + self.fillfactor = fillfactor + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.buffering is not None: + kwargs["buffering"] = self.buffering + if self.fillfactor is not None: + kwargs["fillfactor"] = self.fillfactor + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.buffering is not None: + with_params.append("buffering = %s" % ("on" if self.buffering else "off")) + if self.fillfactor is not None: + with_params.append("fillfactor = %d" % self.fillfactor) + return with_params + + def check_supported(self, schema_editor): + if ( + self.include + and not schema_editor.connection.features.supports_covering_gist_indexes + ): + raise NotSupportedError("Covering GiST indexes requires PostgreSQL 12+.") + + +class HashIndex(PostgresIndex): + suffix = "hash" + + def __init__(self, *expressions, fillfactor=None, **kwargs): + self.fillfactor = fillfactor + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fillfactor is not None: + kwargs["fillfactor"] = self.fillfactor + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.fillfactor is not None: + with_params.append("fillfactor = %d" % self.fillfactor) + return with_params + + +class SpGistIndex(PostgresIndex): + suffix = "spgist" + + def __init__(self, *expressions, fillfactor=None, **kwargs): + self.fillfactor = fillfactor + super().__init__(*expressions, **kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fillfactor is not None: + kwargs["fillfactor"] = self.fillfactor + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.fillfactor is not None: + with_params.append("fillfactor = %d" % self.fillfactor) + return with_params + + +class OpClass(Func): + template = "%(expressions)s %(name)s" + + def __init__(self, expression, name): + super().__init__(expression, name=name) diff --git a/venv/Lib/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html b/venv/Lib/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html new file mode 100644 index 000000000..32fda8260 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..483338d3179efed8a85dbb14ccbdd0b7f06ac316 GIT binary patch literal 2841 zcmcJRyN?`25XKv@c`R?6_p=;WzQvy1y+a^t&xgSF**g2qKI{b&5bE8joo&xd_cGnH z>qP`6;SWF%@JbON5jsK6oFM`TNI^1WghT|E_ zJ{7ng!Tk*GE4ZJ<{q}8m;QASS68r@`1O5e`2HUp_u?PGJd>Z@=dEzIu-k2f$y! zL*RAL=l4Rb96t)S@b?Aq1o#E`GI$L{c;a5%{<;%4N>E()S48N=^&p-P;YKMoTnJh0 z#SK^Df$9swD)K^Eiu&INK3si6XhIw_c@mN~juIn7I(7c+849J74Kc56o-w(Bba*IB znbZ*zUV0`SChRzwP?WKBoOvrvCL?|?mkBvT`==6>D);V4COOyb4&5be?T&mEYmN=+ zJneE;xL+B56N z;}n@|H>g`u8kxW>%jASYgyf4{1c%VtVo||O&uAx=wwPoGW?WS(Bn3x@@Fa}-{i*EW zg8DpOsrSYjhmD*2wEu_GZG5JtJUx2TS@NB(>>S(!2=tRpvQh-G6Pj`jK17l|)A))u>K#d!mhm?xG{ex_7ei*?$_ z%@5WqgIvejjP*LhVP-}u{s<-qGOwZu8-I_kw!c|+8)&(8JZxiWE)~4cJ z_4y(lMJPvJfrXB88FA2InYQV*ex_mxdzuO5__NjR1=3)!pMc2?!Llkix%Ej?5d*Uj>o zZ&=ju$ROm@u%iRIEacc2tk*Rhqv5=WZ`RfjCAYDPV{9SC)gBb`%J7BiLt@dbT^^zE zTgq#Sl*&a@NU-npO*Ie8+0fM+IfAC%B2Vib4UCCyQA{^=_10RgaWpIW!0+CQl5i!V zCs}(DT`fCg)NdJf!gA6ND+y&9T>Wmnj0U-K-HerQwn8UUf3j@CIsS#PXaoqM_7)tk zQ%MMJVP|v~{iET1bp{$_gpjRb2-&ItAIE{{a)h50XNdN!< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ebf5dd42 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,104 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# F Wolff , 2019-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-uitbreidings" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Item %(nth)s in die skikking kon nie valideer nie:" + +msgid "Nested arrays must have the same length." +msgstr "Geneste skikkings moet dieselfde lengte hê." + +msgid "Map of strings to strings/nulls" +msgstr "Woordeboek van stringe na stringe/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Die waarde “%(key)s” is nie 'n string of null nie." + +msgid "Could not load JSON data." +msgstr "Kon nie JSON-data laai nie." + +msgid "Input must be a JSON dictionary." +msgstr "Toevoer moet 'n JSON-woordeboek wees." + +msgid "Enter two valid values." +msgstr "Gee twee geldige waardes." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Die begin van die omvang mag nie die einde van die omvang oorskry nie." + +msgid "Enter two whole numbers." +msgstr "Tik twee heelgetalle in." + +msgid "Enter two numbers." +msgstr "Tik twee getalle in." + +msgid "Enter two valid date/times." +msgstr "Tik twee geldige datum/tydwaardes in." + +msgid "Enter two valid dates." +msgstr "Tik twee geldige datums in." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lys bevat %(show_value)d item, maar moet hoogstens %(limit_value)d bevat." +msgstr[1] "" +"Lys bevat %(show_value)d items, maar moet hoogstens %(limit_value)d bevat." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lys bevat %(show_value)d item, maar moet minstens %(limit_value)d bevat." +msgstr[1] "" +"Lys bevat %(show_value)d items, maar moet minstens %(limit_value)d bevat." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Sommige sleutels het ontbreek: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Sommige onbekende sleutels is voorsien: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Maak seker dat dié omvang heeltemal kleiner of gelyk is aan %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Maak seker dat dié omvang heeltemal groter of gelyk is aan %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e5e383d61ea7fcfac1615063ca85a06f08c142d8 GIT binary patch literal 4294 zcmeHJTWl0n7(OaqSnqhhA4xzOn7tG+u&@}p)D&ANwEAQ;)1A}Zf!UdL&e<+ae4wS2 zS|1D#CTiq~NZXZyg;Y}FlZkIW=-U||G@^+Q#wVYAF!B3mX1m*Bu|yC}oaD@R=A8fX z{pb8={`2jMW$!XP_oF?I_8Hm}Xs_OY7oM+xj{v_0?gsu0dvG1v2iG@&zW`smBhu@*o3TBZ_kk4O=fEWJ8(Jzi#IB!!&yNCp0zHbh23zTS)Lvo;& zWgRxm5+Qg#SPx&plG)saz!Y!y` zl684fA+5Xjc5rb}30GowCF}MeazG47j^!7;WJ?J@S;R(zEwMnwJ>Ys(w@I+yZ}?05w0~)D9K1UOjH`bc<95>e~Y|$=s2BBQa9tk z={Qp8h{*T$i@Y-0E#nm&7Q~a~)_$C3FR@RQJzp7}vS3@rwn{-7Jzkb4y7n0RM88d< z#tuqX-kNSr8|e*3rWM_6ISswQ7K5>w51C=dXA>kG(WE~ny~ zj?w1%C7I=JIsBBl=Qi`Gn{#uyG=H9_Ic9UY47!=9+lp>0bysE5>8-i-eD&(6za^I; zjrEPWOr~ja(}IqX)roX6Dg1y(lzRGJ)@^Ej&>P^g;F1pFN&VS7gn%g z3uAgJ`fPST$BAQ^#zAj5_7|>T@J`GfL{906c#X%fFQde8LeF60f}U*dA^@^8s?XK8 ziCoWO=Vq`A_1X{&V)cnAan$D^L2Z)L0Bz6|_z#5wm?p8YEN5W{=JiQv!D%gwi1rco zhq2iUib&n-I#6tKAVM5W_YSZQWq zq}He=XYh%F8G%1cO`v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..5e0aad73d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,131 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2015-2017 +# Muaaz Alsaied, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "PostgreSQL extensions" +msgstr "ملحقات PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "العنصر %(nth)s في المتسلسلة لم يحقق التالي: " + +msgid "Nested arrays must have the same length." +msgstr "يجب أن تكون المجموعات المتداخلة بنفس الطول." + +msgid "Map of strings to strings/nulls" +msgstr "ترابط strings بـ strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "قيمة \"%(key)s\" ليست string أو null." + +msgid "Could not load JSON data." +msgstr "لا يمكن عرض بيانات JSON." + +msgid "Input must be a JSON dictionary." +msgstr "المُدخل يجب أن يكون بصيغة بصيغة قاموس JSON." + +msgid "Enter two valid values." +msgstr "إدخال قيمتين صالحتين." + +msgid "The start of the range must not exceed the end of the range." +msgstr "بداية المدى يجب ألا تتجاوز نهاية المدى." + +msgid "Enter two whole numbers." +msgstr "أدخل رقمين كاملين." + +msgid "Enter two numbers." +msgstr "أدخل رقمين." + +msgid "Enter two valid date/times." +msgstr "أدخل تاريخين/وقتين صحيحين." + +msgid "Enter two valid dates." +msgstr "أدخل تاريخين صحيحين." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "بعض المفاتيح مفقودة: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "بعض المفاتيح المزوّدة غير معرّفه: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "تأكد من أن هذا المدى أقل من أو يساوي %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "تأكد من أن هذا المدى أكثر من أو يساوي %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cd38cf91c757673afc4455c541fd1f6c53c58940 GIT binary patch literal 4352 zcmeHJO>9&}93KV0)^Gg&9!bD%V84nO*s>U)V2UkYtsD#qdEGbNeem|Z<;`rD-e@Up z?S*jgpy;WAwkrh-siZ^?-aY8SWZuO@^hS&a55|LuzyI5}-EFa0B8VnVGVeEU=0E@M zng4vZV)^?F?Md_((LYCj3H`ub_@I3ad=B^xa2N0z@NHoFZpKyshk!2tKL9=roB=)q z{0jIi@JApA{tjFNe0dpT6TqFov%p_~uK+(>&R7%h3h*i54?qt54HyMJe-C4ufUUrF zz<%Ht&}9br8vf;djCBG}1NQ=d29ix%?q@6s+z(s@90n5o6!2Bxx4@miUxDqwtq(Bv zJ#;+@{0VsEA;wxTfACSpb^}iX$-ZmAIB?lxjO_q61K$Gn0XGA`1VTObAUd^s(ZMcg z4~GcVg9cU%Jsz$>WyZF-CEMhVtGMkNCg0h) zdlxqiWyINbN0vOnRo+neSdx2&lM@_+tXnABLJ7N%=R9F3;SrU?U5|?+CBx>*<*S-( zt6-^vy@p*9QMp8Rwvcj3yaJhJmpi3Gx9|e?wJAunOtL{FlvNOmto_M!pz6H&a^AH? zT}GQzEGb?nNyWPbH$rDwS!KD7;q}E?n-T?B?x=iJa?61wAoDz$_gcWj^NwTLv< zO6kg*lg-Ika(yh-jA1&NT9ZVJv>Q^zx}d+b4dr@i9*nIXag=X`Dw{Tg!pW74oQQP^ zqmbrXJfqvn@}@0zPI#6PMH{E9g=h1ICxyzq)3qbEp-xBQdW09-?qppvh~|cF zOUM-MEGD-d>PjakgGARsG)nPM+%`{w< zN+vgF*74P=tK&_X6zy17UrVJL7B_Ch;_Fyk-x6W|pdRP`sDHvg?hkQ2tEcs6Tu=C; zdfXq<uLvf}nddxqrFK|$TZVVrPSbvJmARP2h=nMXPG<{ruqNnGGM!;HM0>y|w zy5OMVDqJeh0e^6*9LMwpeIDd`+8=Mp3?kkO>Pk)UT4Gx_fimp+y~vfhxL#Lk{(F)sl6T1NaSHYw zlKsDAx(FA|@P^y)AJ6gIA^T>s{FckVsXV{s(r+Tu|FyEu2i5N~-Q{%QU!ugNFV|;+ z`@CT$L63moZ4lHp)_9|%2!usxeodj*LU41V6rz@mQza%@6aJ9jj}jFKy^I1f7-v-d zsNR68!t0M>hB`M(FOYyUc3~N!r>H3PqhO4H?_|SkcQNu%jf)U=inefl1#IYHLQfq3 z6qupH%{{Nd2Ks`c>KRbca|Zum6$=k|1^;-<=!+Z{4PUnbR#hJYll;KS@acSDB^6qF V1i?4taO#jU=8w$xu%3*wKLA7YtP%hK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..87021fe55 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,131 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "PostgreSQL extensions" +msgstr "ملحقات PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "العنصر %(nth)s في المجموعة لم يتم التحقق منه: " + +msgid "Nested arrays must have the same length." +msgstr "يجب أن تكون المجموعات المتداخلة بنفس الطول." + +msgid "Map of strings to strings/nulls" +msgstr "خريطة السلاسل إلى سلاسل / بلا قيم" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "قيمة \\\"%(key)s\\\" ليست سلسلة أو بلا قيمة." + +msgid "Could not load JSON data." +msgstr "لا يمكن عرض بيانات JSON." + +msgid "Input must be a JSON dictionary." +msgstr "المُدخل يجب أن يكون بصيغة بصيغة قاموس JSON." + +msgid "Enter two valid values." +msgstr "إدخال قيمتين صالحتين." + +msgid "The start of the range must not exceed the end of the range." +msgstr "بداية المدى يجب ألا تتجاوز نهاية المدى." + +msgid "Enter two whole numbers." +msgstr "أدخل رقمين كاملين." + +msgid "Enter two numbers." +msgstr "أدخل رقمين." + +msgid "Enter two valid date/times." +msgstr "أدخل تاريخين/وقتين صحيحين." + +msgid "Enter two valid dates." +msgstr "أدخل تاريخين صحيحين." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "بعض المفاتيح مفقودة: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "بعض المفاتيح المزوّدة غير معرّفه: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "تأكد من أن هذا المدى أقل من أو يساوي %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "تأكد من أن هذا المدى أكثر من أو يساوي %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..97350a2054dec6e0109220802924e419e867d831 GIT binary patch literal 2855 zcmc(gOKe+36o#izUgljW@5d^rfinLFdo%#9x# z3PS8zurLB;M_3YxB7w5AyRgIp_7#i5jwKQj3nc!zw%a)Lg#at&^#Mln-L-29113m21)l{kfWgkT+Zo#h?gGPk4-Vho0jKc(KKK#%6&M0@_zuSQ zf)~JGcV}*JzB%w2ymRmc@B=XT_YGJCe*@tjyAv~vTQL!WY}`F0T+hb6_`MGkp%@!* znLU6BRqUSO7r2$>3Sr6Oe;0WF@EcsjflR7m(#DfAJfBw?j6@-V1N$N^?p;}b6f_q_ulqO?IoJqMNZ|J!RB@^jSt#Fl!Nq2+llyL5bbY(Uh zhIE>gh0WBDmS9oF;S8eSWg@Qf?F!48t7Gepno;7ijX7OUJte90R2IaC!IBj(jpnwM zXLDX8IJx$xSBoMQfwiLeU=l5>`Wg zhH_9rOQJD~_jrus{PlIZ|3c|ibS7p{J$g$m{1ZQ~p>v+s$t;ocR_ZE>$c!EfI#tTC zW5Rh657OZVNv!deP~UxDOtl4yFN9kT1#f`Q1gXgNao1tros z*eT&`VR3ROkm_Y^8hVpp-I^5{i+GddVzB7B^}*j@esHm}x(YQSniT<0!xy3BF`+yQ zo3la<>le>{n%SRp7tekcZf4ldhX)VWF&rHyvgWj?_-HPU-ojx7?qbMbJr_p)5D zwIpnGNLNgpWpQs=`b(~sh_`bmRBE}34jY@e66t#O>Sm_*(cp1rLes7pnws2~V_DNo z`W=-f=#{PR#nbiYGosS;`PY&J#Ran)Pzt@hTp-Uml35N&a^tQx0s_v@g5jEd9V zYN|Q)I|*8eQK|l0ig^1fI(lC&OS1jW87PL$rc@*lg*?kX#NCZ{wY!1d#jR`>R(R82 zPv{!o<9?^r@7TXec%EF*hgYSQ=T`@vRdqLdtNjkHiAqB7;@&!9c_8%D2#RrvQL7b7 zB&Y!L{f>*}nX%}X*n({F8n*MTU3Ro>h1)#{vqs*x_A1y$P9!wK^#7o!yJnjIl26xH zm9@?&oD~H(Xrx*5j1;PunqeIg4$(!iQ>EXDQMpQ@aJp-e?5<%k`?njZNZYAap^8bg zaNoz$xT(vgZLWQ99Y%WVY_{KNOXA%%Zn1!@EIYXzOSG0topvCCq{!e0>I;b*$-}=& zO}0ZtD_P#O>A, 2018,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL uzantıları" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Array-dəki %(nth)s element təsdiqlənə bilmir:" + +msgid "Nested arrays must have the same length." +msgstr "İç-içə array-lərin uzunluğu eyni olmalıdır." + +msgid "Map of strings to strings/nulls" +msgstr "String-lərin string/null-lara xəritələnmə cədvəli" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "“%(key)s” dəyəri string və ya null deyil." + +msgid "Could not load JSON data." +msgstr "JSON məlumat yüklənə bilmir." + +msgid "Input must be a JSON dictionary." +msgstr "Giriş JSON lüğət olmalıdır." + +msgid "Enter two valid values." +msgstr "İki düzgün dəyər daxil edin." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Aralığın başlanğıcı bitişindən böyük ola bilməz." + +msgid "Enter two whole numbers." +msgstr "İki tam rəqəm daxil edin." + +msgid "Enter two numbers." +msgstr "İki rəqəm daxil edin." + +msgid "Enter two valid date/times." +msgstr "İki düzgün tarix/vaxt daxil edin." + +msgid "Enter two valid dates." +msgstr "İki düzgün tarix daxil edin." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." +msgstr[1] "" +"Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." +msgstr[1] "" +"Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bəzi açarlar əksikdir: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Bəzi bilinməyən açarlar təchiz edilib: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Bu aralığın %(limit_value)s və ya daha az olduğuna əmin olun." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Bu aralığın %(limit_value)s və ya daha böyük olduğuna əmin olun." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b004e1e7b5f557dd42372a3d5aa8746ae7d23c7e GIT binary patch literal 4134 zcmd^BOKclO7#^U!%)7kb(?d(F*00c_;>M|zK152>mNsyzgf{lX-gdofcE@oeRVZoI zq#{iN5*UGK5JEy+kV2`6nkMOq8;6+-5*H4I0}?mj!U2izpS5Erq#+0jNUXH`?aut~ z`RAMcX6>4{7_R$pKZbi2_v5$^Uxx=S1$-E&f%||z0G|h@uV-v6a0K`$@Eza-z#8yD z;FrLMfZqW*@K@kQ;1f46_Azh|@FU<)z$bz4u3@YVI0L*N_$`nFe*s2;kKD*u2XH6w zY2YyMd&E)$?!fot&5R8JuK-^KW^Z9^9eo3z1FpH1v8})!U?*?{xC!_LunYJjuot)` z66X3E@N3vVe0%8knL8Ql!+Zdw`g{eXIDQ6_|F*jrvw;q9Kg|Q7&Thj^*G;%l0(0F_ zM}%%Jh_btJqZErSq{8mSjZhfem<#EcwL)1;{Sh9!$ILK>6cCJ8c5>YHBzHV3$M+oC zzmMlEX~o$tHz@mp%Yr5GumkQ}ZeDP_WW8d^5mGpVJnsuj3ZJB0?)hB2Qnnl}J-)up zv5U5RdBAeYA{wmHoFjr@Rkn=JipSk@u}}EMd}9b6?HuJG64EY;tIRDkY(iZ$UMYBv zX!_`OOJ&K6T(}%TxQGR7fcjhTz$yyv2sbYa zadyB9B-;AW3wyaZCWRYdbpv+DgUC@a7;uzd@S+_A@RLSvG#IT5l-;AQS8-beOTIT? z=R~eWvX?wc%a;@{xeqs%=_~3HaV#qkDa{Bsw@4_?NZB+hjb9mh&-jl9SBB2f&LnlK zo;YnsN*x*b-Vu?NvF=>#C2SVtljgZ2*v($#peT91jP(S0I~VIJ=Yv?Um*$ZJ`(p>i zfK8&Yoz$+pJ=va&CAY*-6JtSO&F<3&J5^I(yIoMR&c(!2qfsmOOdw0jSHs#1yzwl$b+^m-~i@3GVmJ5-l zvAH7$oU(5@vE80u4AR^!na?1zc^eO3Gi~nrR5FuE@eLa|y(ZUXQYpTjCppCN-I-}` zOm$>7)2q=)cA$XAkB2Iqsm)QSr0Ob}Op>OITxVuWQ~lZK!Z_^0O~YqL1{SvSb{Kd% zx-G)gIaT9oN}td}dQ8o#DRl{7!+L_NX?%Q!;gf1wSM`WK!_@^0UBE<5&FL}75ckKK z`cPfg<9ZT+HIe>nzO#or6t8;%|Pf%gP{HabzgCqQ^n$cAg;O``+ zAyZ4#MNy+E6fw;4f~oE)Q*NqNLXVm?Ik|!%zM_TY6)DE$)uz=PJdR?~=4eq@P#>X% zMK2)QX0~s)s#AYmMt0|Ek!b=;3kB*Y^Xq^JE~)vjd(;dBXXBiyPg>iBQ)8m5sxX4i zm_tj_zz{kiJUC&NyionrMSYsgH9k>f3}Y42Onm^6svb7xps?fwUEHE*;5XDwux*7R@py2@4k5Bq%` z%xGu>ivdD3`=2<&?C}dA3fkjfgT}Y6CJZrvh3Gt(p>qt1=BzS&I?>7^IDc9=iH@U% zjZIo};n`#82$ZAGhFm9g3`?<1nq;IW|wN%H1jV0fzPQ;2}PfSSM->LRfa z5hY^NXTj;npyeM=z1a+y0&1!ta{35Qka;z0j^2h9J=SW2qN2ls4%Qh2O`;}-X=DW6 zG?rR(H>7sia3oRm7|3%fBsijCxYZ-em_hzaIezhvC28Uh;we1=V!wnKh&4y(ydjD< N%Ll&1ShfDc`5TF1VUqv= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..2a4723fda --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,122 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016-2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Пашырэнні PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Элемент масіву нумар %(nth)s не прайшоў праверкі:" + +msgid "Nested arrays must have the same length." +msgstr "Укладзенныя масівы павінны мець аднолькавую даўжыню." + +msgid "Map of strings to strings/nulls" +msgstr "Адпаведнасць радкоў у радкі/нулі" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Значэнне “%(key)s” не з'яўляецца радком ці null." + +msgid "Could not load JSON data." +msgstr "Не атрымалася загрузіць дадзеныя JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Значэнне павінна быць JSON слоўнікам. " + +msgid "Enter two valid values." +msgstr "Увядзіце два сапраўдных значэнні." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Пачатак дыяпазону не павінен перавышаць канец дыяпазону." + +msgid "Enter two whole numbers." +msgstr "Увядзіце два цэлых лікі." + +msgid "Enter two numbers." +msgstr "Увядзіце два лікі." + +msgid "Enter two valid date/times." +msgstr "Увядзіце дзве/два сапраўдных даты/часу." + +msgid "Enter two valid dates." +msgstr "Увядзіце дзве сапраўдных даты." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Спіс мае %(show_value)d элемент, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[1] "" +"Спіс мае %(show_value)d элемента, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[2] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[3] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Спіс мае %(show_value)d элемент, ён павінен мець не менш чым %(limit_value)d." +msgstr[1] "" +"Спіс мае %(show_value)d элемента, ён павінен мець не менш чым " +"%(limit_value)d." +msgstr[2] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " +"%(limit_value)d." +msgstr[3] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Не хапае нейкіх ключоў: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Дадзены нейкія невядомыя ключы: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Упэўніцеся, что ўсе элементы гэтага інтэрвалу менш ці раўны %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Упэўніцеся, что ўсе элементы гэтага інтэрвалу больш ці раўны %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57979ba3adef063c319165036f3153def946001f GIT binary patch literal 3515 zcmc&$%WoS+7$2ZeaCx@8DKH2j#cI}0LXoO%1E_5(r6hd@BoGK~yc2ud^{%@!jvK)t zE$Tx(5P{SKs68Mg#0j|}CdNtJ8z+!v`2&zB+k&j4fK0pNAuTR{76#x?`b0-pnZ0eliz13m@( z8Td5tPap^W1Kb9D;U31m1?~ra1N;m4BJj%%jCBDUz$buz06Fk)U>f-By^QSw?ghRI zJOw-kE;V2ezWGMRJ^~&FehmBt_%d++{fxZ<41j&W?|?S&cVIVg>jR7p00)7)fm6Wi zz+ZtIA-|b|PJI8giLrNqn;uN~3Lwcl1AGry2YvwD@(^SJPXMugIX`&qr~?70WJ|z_#E91@>@j2DDAA;1=V5sAZ3}=0KUTJz?2*c@Qe@hmOnlA3b=0 zyN+@)Y#@;3NN`nf6ds=BkrU(v$4f3OmVBXvKf&{naFmE>RlviDixXwX=PKl{bopM< zQy-2yep#gDI>q@y%5}*yIx8U$%EeI;8S(8QX!KmNL1dLz6l=`gVAxPyHeM-&zF5*R z7?jG27t2!dQNf*-v%H-0!oZ0pGHg(ZA}kM7AuYKVz!EHrB4>iTphQkK|?3 z)7NM9^jf{!d2g@%+V*WdxKcxoRMrUiOW#ppWW&7yHG~}B)qZ<3UvxY_gP!p^mIwK= zlNZ*AaEdnHUH0=%UKhQ@Ym8<8vgXt`}$wbJJKq7hi}^^JIKBJ{wQz zIo;&?s%~2Pd+3|P$UN6gT2#keonvE_gzE(kUDXw3h(@=zZs=`-cOCNdmG}%1SX23Y zLQXgSqw>$=3x?fH%XD}JWXbkAyfCM$Ah^aF;zK543!G@&494}Wo;Hr2C!24&zX3l{ zNE+DIDPi3z<5R{(KVo;&yi+LGU>l!>CKHh5rk#OvjR6paa4#kWk59*wh~^bCGsz)1 zq?+Uo(T0maS~sBbA_UivZ!j1EY9Bp%nsTs;UG+r90y!3`#XCG#r~I&){t7t+k0Tll zlVav|2CtJQhgY0T#*{^k-5k7D(}h~7H^~X6wH29%1K_rl>gxZZ_7+OXPO3(Dm;!_k zD#cYt^qsYQy(BK7ey%1ADSHuWG#k@Ks01ky&`Va&n4{E6Y(%;v_o&ZNvDK3tUP?N& zpH*3$q=jiDCh@Df(MoaXn}Z}GfwJ#7fhkAzY>J)t$m3GcF zBt)EgGBsNeT5O#3Ns+mMM-n#EFzY-dn0jxJ&G8f}IR1nxg=Ff*MuRUSt-9jyHws8c MM>yLDLGmx)U%0O$2LJ#7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..c4a0dbf4f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,110 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# arneatec , 2022 +# Todor Lubenov , 2015 +# Venelin Stoykov , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2022-01-14 11:54+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL разширения" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Елемент %(nth)s в масива не се валидира:" + +msgid "Nested arrays must have the same length." +msgstr "Вложените масиви трябва да имат еднаква дължина." + +msgid "Map of strings to strings/nulls" +msgstr "Мап от стрингове към стрингове/null-ове" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Стойността на “%(key)s” не е стринг или null." + +msgid "Could not load JSON data." +msgstr "Не можа да зареди JSON данни." + +msgid "Input must be a JSON dictionary." +msgstr "Входните данни трябва да са JSON речник." + +msgid "Enter two valid values." +msgstr "Въведете две валидни стойности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Началото на обхвата не трябва да превишава края му." + +msgid "Enter two whole numbers." +msgstr "Въведете две цели числа." + +msgid "Enter two numbers." +msgstr "Въведете две числа." + +msgid "Enter two valid date/times." +msgstr "Въведете две валидни дати/времена." + +msgid "Enter two valid dates." +msgstr "Въведете две коректни дати." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Списъкът съдържа %(show_value)d елемент, а трябва да има не повече от " +"%(limit_value)d." +msgstr[1] "" +"Списъкът съдържа %(show_value)d елемента, а трябва да има не повече от " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Списъкът съдържа %(show_value)d елемент, а трябва да има поне " +"%(limit_value)d." +msgstr[1] "" +"Списъкът съдържа %(show_value)d елемента, а трябва да има поне " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Някои ключове липсват: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Бяха предоставени някои неизвестни ключове: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Уверете се, че този обхват е изцяло по-малък от или равен на %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Уверете се, че интервалът е изцяло по-голям от или равен на %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3de632fc6c8271de66d66ac194764b6005eaa41f GIT binary patch literal 2904 zcmcJR%WoV-5XKt_uO&PZ-mg#?fxWV4*EU#0>li5yM{=@uOl)!i3AJb1v+eYDZ@PQD z_APKgNSrzFk~knlE^t8M5OMQ?3liiX;1D<V<;?r(8Fjr)yT@WAyW_&9hOoCALYPlAnG8QTxO13n3U06qd<1Rn*z z2Ok4}0SWvI90m{E#@H9&3Gj39ckmhT!##`*ftSFC!Jk0_{{*Yx6Sp&V2s{S92)+fr zj#w^&&*AsJI~i+&6D8jU!}>pf;rp-P0dVhK#d^bFSnnkG0_edB@FVaW@G|%%`0m}s zyq7DCy@cOqz~J{iZ~*)a909)rBk&I}_!+o|F@(o}{JH~Aq#(cUEs4wY{Rz>QS& zT?m;yh#M~1edQN~mDdVs$@9M#+*f`>sEi#onMz0-Ps;FwPAr_7ql9~2W7FDYR*-LT zkB4+*xlRS)B{uDj5?-ivO0D2t*kGl}SQ6(luE-mDen`o-^lz?mm5Hj`r8^~@+m)|; z&8{JxwU>m=-S>vDqD;abMBU4_xW>1C7|uiO8}GJ^5?gD`=uYOTojFfSf_RxM8GC6o zx9c@F<3$@g*S=MCBsF#dGi&)eB?u`bIS&q@HCR)^O>DI1Qaem?Ez>Qtm5_v^5j+W_ zp+2P@T+p)U_VV4IAc){IF4cK*pW3WBKFZt5}mhhBk&PBWg0Xi@NXgN{O46r^IP<$b47uXnrMnh*2CoEn6sUIf+y zZ1d^$nAfY7*_qkttu2hzMk_~gfP_X2>m3B?QLuVP;Y3YR+~U>=KlR$;@#x@|U07>b z*l1eECdn&!a7p^jFdG!}%Dl=fSJ81}+pa;nlmB#6anD~l|{ zOo=>)Jq3oX;>ai@Aq&#!2H~J%Qiyn=!xl2kNhwG%&oy@A!qrM#`Wy-KHRhv?c@RO7 zg_f4EB18d8^;asW-0oaMlW&^u9j?omL)-nYA>Y6+#JR{C4uwXSAlt=T5NF4l7%Iwy z9+dgP3I9(Z!oqJ+MRXD}YIG`nhV)KvigPgBQf+ovrCC@cRy+%mNG(Zj<7OV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..52d90b87e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,112 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2015,2017 +# duub qnnp, 2015 +# Gil Obradors Via , 2019 +# Manel Clos , 2020 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensions de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "L'element %(nth)s de la matriu no s'ha pogut validar:" + +msgid "Nested arrays must have the same length." +msgstr "Les matrius niades han de tenir la mateixa longitud." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de cadenes a cadenes/nuls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "El valor de \"%(key)s\" no és ni una cadena ni un nul." + +msgid "Could not load JSON data." +msgstr "No es poden carregar les dades JSON" + +msgid "Input must be a JSON dictionary." +msgstr "L'entrada ha de ser un diccionari JSON" + +msgid "Enter two valid values." +msgstr "Introdueixi dos valors vàlids." + +msgid "The start of the range must not exceed the end of the range." +msgstr "L'inici del rang no pot excedir el seu final." + +msgid "Enter two whole numbers." +msgstr "Introduïu dos números enters positius." + +msgid "Enter two numbers." +msgstr "Introduïu dos números." + +msgid "Enter two valid date/times." +msgstr "Introduïu dues data/hora vàlides." + +msgid "Enter two valid dates." +msgstr "Introduïu dos dates vàlides." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La llista conté %(show_value)d element, no n'hauria de tenir més de " +"%(limit_value)d." +msgstr[1] "" +"La llista conté %(show_value)d elements, no n'hauria de tenir més de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La llista conté %(show_value)d element, no n'hauria de contenir menys de " +"%(limit_value)d." +msgstr[1] "" +"La llista conté %(show_value)d elements, no n'hauria de contenir menys de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algunes claus no hi són: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "S'han facilitat claus desconegudes: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Asseguri's que aquest rang és completament menor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asseguri's que aquest rang és completament major o igual a %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a56d0b4e2967881539ab5e0f5016c11f037509c2 GIT binary patch literal 3388 zcmdT`OKclO7#^VIVcv!EC{TVXs1mhnJ840cTNkM>k&>jLNh^Vns`2i`-gtM$?9AG= zg;2S0i-eFkl)%9kL=J9GJ%At=+ZV(EPTV*YZd{N!aX{jmUAuYErj@D+G1BfgJM;hl z{O{Rcwr%;8VLXZFc|70Zc>&M6cj1NcBk)<^Przy5@4z>Kg}WKs2K)&49PlFWDc}|0 z)4(5q&j5b|67X-}9^lS<82bu%68I(XPvDEd&$ci&0{jNJ9r!DdfPVo;fjhP`b_jS3 zxDWUta2dK>0q(^2x%*PRJ^-G?_xC_6XZ!t(Ilw)@9l*DN);ZP)wd`v5L(}otmMpwA{mDz5hdb>OE}T@tPLV({7~Fr?>ftgs_WJp6%~lpGbUs$ zHWbF%P)QIUILmj9uOyF}SvFxr2+O6ZjB4^FECE>*@g{jt$vQbv4yqN{qz^H!l7{)E#^Nt`!A zYD8DFSp|}+XljD{1%+u3x?Id2;@!zIx#cTbY)f4-B{EXibMjky;S0aV9+H zEQ$s86v$gZHLJ{NQB#p|rgYi&oFj2rJ9DZ)nVD10X;JqrsdLPxD~;#J^G^O%XKWnP zLVj#d9wRf!wQ=U4zYe%jQGt@VKQGSH5vX$LFeqd>=4Ii`2_6>cXiK;i8mSmlE97#G zMk8x1x8=y9t>jX*h7b&xbFR*fW~L^lj;|Upmd$65qI`se2F)5&GzeF&7NDLEl3U@C z7N&S+?u2t-mCl|uFCyo-bd{IH??A~n*OV-ft1~k}9Pz+8p`uV1NY;{1UEF_=(rIx- zQn5&5w0k!pw=uz2ew1FPJQWC=hl@0xZXPPq{(qB=B~+I2B`}iZ90%vVgBb>2b280Z zoc0zef)@G@?=5ya+GLT#3)1he^xNGIRg{NlbBa_;^Ga+p8mp!5cW5%bC6mxdQBokN zOTM87(d8hk-t4z;CMy*3rlQ{Ao>(w~JRD4kt^w|kb*l)Ak=^Bi*64@U&_uo7BG>VC zsoR5#Xfr_@7+n!`+p8*^)h4d3^^6YSjBck&^N4P@ZBjqmnh#WerOLsYg{#sAUMDSD zl7}%ZAP6Egpp~9 zpf}!{^yZzEE~@`u>D5jAUhj5X8<9KW_S+V|nb-d_;kZ>*z1v33Q2(MZy``4hzl@G_ z?Mt9!{A*=BeP(i!os|l-5`~CTz*QM*u>k(C+rj^gK?_qcdEMopin2egTDH9;^c})w zNvqc{o9-=D@mGhoQ4PAC-l9NTZ63L! Gmi+@VV`wM< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..6a3c9d1d7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2015-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšíření pro PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Položka č. %(nth)s v seznamu je neplatná:" + +msgid "Nested arrays must have the same length." +msgstr "Vnořená pole musejí mít stejnou délku." + +msgid "Map of strings to strings/nulls" +msgstr "Mapování řetězců na řetězce či hodnoty NULL" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Hodnota s klíčem \"%(key)s\" není řetězec ani NULL." + +msgid "Could not load JSON data." +msgstr "Data typu JSON nelze načíst." + +msgid "Input must be a JSON dictionary." +msgstr "Vstup musí být slovník formátu JSON." + +msgid "Enter two valid values." +msgstr "Zadejte dvě platné hodnoty." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Počáteční hodnota rozsahu nemůže být vyšší než koncová hodnota." + +msgid "Enter two whole numbers." +msgstr "Zadejte dvě celá čísla." + +msgid "Enter two numbers." +msgstr "Zadejte dvě čísla." + +msgid "Enter two valid date/times." +msgstr "Zadejte dvě platné hodnoty data nebo času." + +msgid "Enter two valid dates." +msgstr "Zadejte dvě platná data." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[1] "" +"Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[2] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[3] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[1] "" +"Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[2] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[3] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Některé klíče chybí: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Byly zadány neznámé klíče: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Nejvyšší hodnota rozsahu musí být menší nebo rovna %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Nejnižší hodnota rozsahu musí být větší nebo rovna %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca9b5d213c1c0bfe7e4d02a3d3d8287341911d95 GIT binary patch literal 2916 zcmcJR&u<(x6vqt|3d`^E`&V%#eq`0mZjw?_Z5u>sQjxYvOOv)21aj7IXWjMKTidhS z+=_(w4~hf=iBp8cxl)DT6v2rD`~w^c5(kbP5CWZ^LyXq z$6Y%vGhC12eirvvxSzxQ_HB6J`W}1=`~h45e+7?&t=k#f1%3cN1AYWP4qgGD0KWsD z1b+rO_$Rm*+B9_^_`5J1K$MCf}ep8g1>`teCOTp0loyreI5p5{O^D-fEU0f_#yZ;_$_!9eE*&@ zuIU-kIeT_NO&jZhLANVqHQ6)>YgR(}r zl?Iy&lws#4bnBiggPp+4IkCbeLW)T)fR1_mW_Y+>2HP8EqrFStR8biE&QK2|H0?H=yTiQJ~(Ak6p>wjZJJzb z&lboBlI3yu@({aX5bK+`7a4I)CJo&NJ7s-9SuehIg44x7#^ZE7TeL9g(Te9tKk-a? zk9AtuTl`qB406*mc4#&k_MIIlNph3rQd}_z7h=3|`LeN!x{5VI7u$qL;|Li!V$@)9 za#5)9`?X7-6zkXhwM(DI&WzJVwei@FaqHNTv*)QDk~x{2MYCW(EiTWan{Dkh^{orZ zyib)(-pEs*EZG*XojRGErh$s4$xJL)J~c5lkxcAQCimgBwQv9430$=k!iQuD@p~WE>cRCNMtQOBaHH0KGqGP z-)c68!(k&tzp6tQNrfp?$vImw`*oYDd6SY%1cS0vet;>9in||@rPfs1> zyaQHO93{d4?JpRRCz$fAX6lvhBH@Gcw?)V^;-%irVx$UC{`V zqTpHxt|YhR@D@XZwN)q84TD|M)k;xweGhqwc1S{~^0-NNXEkLwZKR`;-m=YKhV8PZ zL3s>?^rCk|slBL5Y@eX;2pKa+^p{G9<2V|_my!LAlPo8o|2I-MdIpucZO1#gTkC%u z1#|P@qk_d^x;3G1>HTnLS!rp|UA*H8nS$g(ft8Mu72hkZMtNyE??_gEK7CmLg6lVb~OSJT)l8KeT-B*15S*gQJUR2DE$1Jnibu`cFOp0SYV zY_ui*;o&{}lT);`9Y9AzEPJo>5O?%9;|4oh)^*`!RH+eF;U;dS*m%{}rCk37>(Y, 2015-2020 +# valberg , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-13 20:35+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-udvidelser" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i array'et blev ikke valideret:" + +msgid "Nested arrays must have the same length." +msgstr "Indlejrede arrays skal have den samme længde." + +msgid "Map of strings to strings/nulls" +msgstr "Afbildning fra strenge til strenge/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Værdien af “%(key)s” er ikke en streng eller null." + +msgid "Could not load JSON data." +msgstr "Kunne ikke indlæse JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Input skal være et JSON-dictionary." + +msgid "Enter two valid values." +msgstr "Indtast to gyldige værdier." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten af intervallet kan ikke overstige slutningen af intervallet." + +msgid "Enter two whole numbers." +msgstr "Indtast to heltal." + +msgid "Enter two numbers." +msgstr "Indtast to tal." + +msgid "Enter two valid date/times." +msgstr "Indtast to gyldige dato/tider." + +msgid "Enter two valid dates." +msgstr "Indtast to gyldige datoer." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listen indeholder %(show_value)d element, en bør ikke indeholde mere end " +"%(limit_value)d." +msgstr[1] "" +"Listen indeholder %(show_value)d elementer, den bør ikke indeholde mere end " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listen indeholder %(show_value)d element, den bør ikke indeholde mindre end " +"%(limit_value)d." +msgstr[1] "" +"Listen indeholder %(show_value)d elementer, den bør ikke indeholde mindre " +"end %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Nøgler mangler: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Ukendte nøgler angivet: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Sørg for at dette interval er fuldstændigt mindre end eller lig med " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Sørg for at dette interval er fuldstændigt større end eller lig med " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..041eaa6b2877bc04fe19c49d14691514a210f43c GIT binary patch literal 2993 zcmchZ$!{D*6vhh(+pvYOZ{bA< z{IqA+M*`QQxSz$niu*a-Z{LOouJ6F7!0*8s@Hg-j*t}hcJ>Uo6GvLSIAALTP19w3Nv+CL2kM zM{FpQs>_6zwoZEqTTYg#o3XT3 zXJ3=b(*@4F`L$2jF%I1sxNhT=w;21E&)(Ic@BK(8ys^im>gATw+*n#*l4Y>swvDxt z*>X)xT266tWuvO0Sm7j?mSu98Lb&9D?45&aO)(Y2Oj|1}V`Z?&M7m!_E2J2P4&X`n z>he?0g9++ze=Xj_F%E0n+cdYr=oU6pT~v>{p%(s&pEt2NEqkOpWNa3zE{aI6z1CHp zBu31zu^blZFhvq0x#a4b$;gx`Vb!%!O`OrjqO8xoF-3gAvNFi75$80fEb_7;gr6ym zjln)moXvf#mJ@QdsB~X#n%K+qQXF!)Y38ik(aOv^f8F*)WBIyrHNqF#3{Tw%t8i#i zO}NFrP~G?I7ccq!tLFN}%dRusa#EJ9c#cpbF+?6YhHO3l27(-%9J!Vn1%l) zkyd9-^6znnFVF;BIr1uIsBSL19L%yzoAf$oDU@O)vbNW(*Zci`&AR1oNe#MEFZ^0V zQm(FtT(4H9C#PE*Cm5|YD#y@2tl+|O4?bGttKLh{P=~1<$;_}FpPM}q9NL)Y_UdpJ zv{YM%K7of8V!Q4o;=+|PNuJ3hIH9xDG)eXRpJsgQFcq)kBZ~Ho(`fZ@MV!(K9(X12 zfl{R6b_6k%A*-4=j#hn(Gs_Su#(=9k1JN8@8+?W#9pceV{K!gvL!THj9B*l35v$Zr zO-#fVPOkJhrg<5m&EqE&-xjuSuy^Qy|@|KZmC7hxf5XVx1Q#$I^cd^J)ks2?-F_Pjs8Cfc% z*!7x?23Hcdd`OE+s|SdY5uGH6Bz!?{`9$|wAz~TH#EJOk|9PReC@~*Vc51)v7W_Z# zvBefCN4NG2JK119*IB4?)ukn^Xx_C2t3^ibDnfe2hQ7d$2kgsApwwIk6gApm*DRZ)yBy8c0xwG6 z`NhP3?kcJ15#Lvv);J9~sya|Ih>P)-OEoa~m6CPJLJFm!7Fvh~tL_&~JAz>N(pl3G e>I_yhNdBkml79)3Z}GndLNFAZLRVaXYT|DWX{uxZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..12184682d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2015-2018,2020 +# Jens Neuhaus , 2016 +# Markus Holtermann , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-Erweiterungen" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s im Array konnte nicht validiert werden:" + +msgid "Nested arrays must have the same length." +msgstr "Verschachtelte Arrays müssen die gleiche Länge haben." + +msgid "Map of strings to strings/nulls" +msgstr "Zuordnung von Zeichenketten zu Zeichenketten/NULLs" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Der Wert für „%(key)s“ ist keine Zeichenkette oder NULL." + +msgid "Could not load JSON data." +msgstr "Konnte JSON-Daten nicht laden." + +msgid "Input must be a JSON dictionary." +msgstr "Eingabe muss ein JSON-Dictionary sein." + +msgid "Enter two valid values." +msgstr "Bitte zwei gültige Werte eingeben." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Der Anfang des Wertbereichs darf nicht das Ende überschreiten." + +msgid "Enter two whole numbers." +msgstr "Bitte zwei ganze Zahlen eingeben." + +msgid "Enter two numbers." +msgstr "Bitte zwei Zahlen eingeben." + +msgid "Enter two valid date/times." +msgstr "Bitte zwei gültige Datum/Uhrzeit-Werte eingeben." + +msgid "Enter two valid dates." +msgstr "Bitte zwei gültige Kalenderdaten eingeben." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Liste enthält %(show_value)d Element, es sollte aber nicht mehr als " +"%(limit_value)d enthalten." +msgstr[1] "" +"Liste enthält %(show_value)d Elemente, es sollte aber nicht mehr als " +"%(limit_value)d enthalten." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Liste enthält %(show_value)d Element, es sollte aber nicht weniger als " +"%(limit_value)d enthalten." +msgstr[1] "" +"Liste enthält %(show_value)d Elemente, es sollte aber nicht weniger als " +"%(limit_value)d enthalten." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Einige Werte fehlen: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Einige unbekannte Werte wurden eingegeben: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Der Wertebereich muss kleiner oder gleich zu %(limit_value)s sein." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Der Wertebereich muss größer oder gleich zu %(limit_value)s sein." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2769c7d11b986e24781f79129c9f25a85a724293 GIT binary patch literal 3573 zcmcguOKclO7#^U!%(LbF{v{|%+OF-St*D#^P+ur*l9ncLsE}a1JF(Z^oiRJJ**fZ> zM1|hCAp|Z+y#Nx&ss|84Le1Vd&;v&}6mA?j^?<}TW4n2ffF;zdH2dxB{QJM>+xd0d zmX8>&hcTYU_zvS4jJIyV4cAY=CxBOh)4)G~$AFbv8QTW@0QeN}6X2u3%fQEgKLQ^I z{thJIU%;KfXK!QdE8tP!7r;M(&jCN(!q^b-Ti_$W-+%elyF%Sga=>6twh)!p65|2 zhV_8zBBAv_x}42Skxb*NNSylqD_9Hz8-pmBFcurEt@GNsy6SyaSCLq@F(F&2p*Yos zs)BegS)p%2C3(^=vI!$%L@rHzSW_qw3B;0ww<&;2Hp$L8xK?44A=LOv8XiiGk91vS zy=(;(LeVbV32$wEdU8-fb0X{Kdv%V3;(zPZH$&+LI%C!C9=WC${*RykqH~J3NX?Np zNhoV*BGrE^$ux>In-SAqZorZcM9E zDrH$#G**lKvIu%9b=~Vj)KgLlbhR{Gn3|Y6yd23$v0ONaeIz7YX}933LETEN2pemR z{5nsxFyn8`9`W`q%UNS{BJmDOUj?p^`>LV2;Vtr`tA!I$n()XwqLNrwNVeQmkM9|y z?&J87+&)q+kB^VgD^w!MX>w&1+BpafkQ__MK zxZgG^<9P=Z7KKH2if2n5y>x!*yxK)P{~n!_!RiC4iyI<8H>keWl}iC{?a%2^|?v zLSBtRS3;L)l%<(pOc74L=xBcFd?-1p)xxVdMYYzDy@*7N=G{fvl}ivrFI4fv5Dkum z5lUg3W1Y$deU+|T9QhAuiEo~%_U4&V+2+|=-xAv2-<(q21WOxK>Lys)s89o&I;JH4 zB4()rPUF}ev>&>P#I{d$@7cYI1uMj^!9asTRTF) z83EMHW8F+C$QRQ_Q-O~uUg}t4IH?xEl&~oqoR-fHY, 2016-2018,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšyrjenja PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Zapisk %(nth)sw pólnej wariabli njejo se wobkšuśił:" + +msgid "Nested arrays must have the same length." +msgstr "Zakašćikowane pólne wariable muse tu samsku dłujkosć měś." + +msgid "Map of strings to strings/nulls" +msgstr "Konwertěrowanje znamuškowych rjeśazkow do znamuškowych rjeśazkow/nulow" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Gódnota „%(key)s“ njejo znamuškowy rjeśazk abo null." + +msgid "Could not load JSON data." +msgstr "JSON-daty njejsu se zacytowaś dali." + +msgid "Input must be a JSON dictionary." +msgstr "Zapódaśe musy JSON-słownik byś." + +msgid "Enter two valid values." +msgstr "Zapódajśo dwě płaśiwej gódnośe." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Zachopjeńk wobcerka njesmějo kóńc wobcerka pśekšocyś." + +msgid "Enter two whole numbers." +msgstr "Zapódajśo dwě cełej licbje." + +msgid "Enter two numbers." +msgstr "Zapódajśo dwě licbje." + +msgid "Enter two valid date/times." +msgstr "Zapódajśo dwě płaśiwej datowej/casowej pódaśi." + +msgid "Enter two valid dates." +msgstr "Zapódajśo dwě płaśiwej datowej pódaśi." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina wopśimujo %(show_value)d element, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[1] "" +"Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[2] "" +"Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[3] "" +"Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina wopśimujo %(show_value)d element, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[1] "" +"Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[2] "" +"Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[3] "" +"Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Někotare kluce feluju: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Někotare njeznate kluce su se pódali: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Zawěsććo, až toś ten wobcerk jo mjeńšy ako %(limit_value)s abo se rowna." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Zawěsććo, až toś ten wobcerk jo wětšy ako %(limit_value)s abo se rowna." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..baa62cef7e39ff7a9c279a460c9c0984ae7728f9 GIT binary patch literal 3583 zcmds3%WoS+7$2ZeFz@nec@9FLSY_=bR8{3RRq0bHNuQw-5)W;?6MNhBuGtyK%`Iut z0#b_v0wGWl7lb$@twI~MPGfvS9MCNM13i@9ICA2E#P6G3H+B=ZLBNHTcYnJx^F8PH zed8;uR(#5EJ&OBj-1E4f!TsiKc;NaOxCZzOa1Zb|;A_C#?ToDgo&-Jx{2cf=a2EIk z@F(DE;58rz{s~+QeD)5;z6I_Eegpg+_#E(y6^wNO=YWp^e+6>jAHX#5$vYX_1l$gM z1vm~Y!IxR!7JR?3lCe>s1FQnC07>r9-Hh!5jsZ6Ve+2ddSKbqU=YRwF9tG|P{s8QO z-qk7ij_=*~#`d!JG4=+&^T3yYb>KSSHQ+Yjn)?}h8~7G*D{vkNH4NhBx(iRFz+9Lz z7hE^jgLpoK8>wi!5CVGyH(X&4Br|Z|>=n{t@(=Uu;bac3!DKni4r3BRWU8O>mw2@3qyO9J8+4TY@CB@IX2)z zO+N6I?fMczvKUm8Y&qP8qL=aH7^VG5)Zmm=P7fL(mECn%p{2RFN zPyD=z&Oy7(gJCXJ==ueaC}_TB{fg&Fwns=MoOnBAyop77g!nDEv`d0}!Y`;|hV2Wa z0<913AK>Dc628RlN_H^7lA~f&a-?7Ik}DzypM)*$Kq6{NpLsS~SI(Ej`Ps^)gUs7d~xSa$}4gW75%~&f#jQp>3fT!74EP& zmO<;-3@N`*u?xZ)5_T!acZEV6a{Vslooi9ScGA zWV%z^P*TE&SEFUPt+0jJvWFVm$n!-zltT5rKD5)?u&|DN8y2Cp!_Nnf+0zY&U3J~b z92Z_{pH~TO&)OM;C7I)X*?h{r-i=A?m&vra#8ScX~$GFn9^?=b&hoL&v19L0UHw z#?Tbm!6=NKh$hHjG_I#Obk6GYn7JICCSeRVxIW9FYJ%QoqOs`I4Rwjm_wQJ)={ZD8 z-Y(njr-*ezPr>C`5<_mH6S1G;x`rIg>jnZj4iA@Dd74&ELv{{17>9=ANIGSJq6S_> zj?U3=Hu^B0Us{i`xEwu8i!b2@VyVG_=}w*-iw$hjDLtnzo4sow2KYY%N81Dc8d19D z0K(plL+2Q_7#olM=dDBlmuO@mj>h71YAE1_EDfanJtN!z8RBCrnW%FZh}ktq`iQLH zYzyOBEaaH}j3WTB3n9;tC?&rJFG+n3%G-{&8;nCeY)~+9%Guo$G4t4zriue+G4eg5&nl=?+gs8D0^+|Pf z)`22I;Uh_BO%&0IW~1*^7y5goC@!`-yfdNWF%2gXahnoT3YepYbX|SxABZ!}@, 2021 +# Giannis Meletakis , 2015 +# Nick Mavrakis , 2017-2018 +# Nick Mavrakis , 2016 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2021-08-04 06:26+0000\n" +"Last-Translator: Fotis Athineos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Επεκτάσεις της PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "To στοιχείο %(nth)s στον πίνακα δεν είναι έγκυρο:" + +msgid "Nested arrays must have the same length." +msgstr "Οι ένθετοι πίνακες πρέπει να έχουν το ίδιο μήκος." + +msgid "Map of strings to strings/nulls" +msgstr "Αντιστοίχιση strings σε strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Η τιμή του “%(key)s“ δεν είναι string ή null." + +msgid "Could not load JSON data." +msgstr "Αδύνατη η φόρτωση των δεδομένων JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Το input πρέπει να είναι ένα έγκυρο JSON dictionary." + +msgid "Enter two valid values." +msgstr "Εισάγετε δύο έγκυρες τιμές." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Η αρχή του range δεν πρέπει να ξεπερνά το τέλος του range." + +msgid "Enter two whole numbers." +msgstr "Εισάγετε δυο ολόκληρους αριθμούς." + +msgid "Enter two numbers." +msgstr "Εισάγετε δυο αριθμούς." + +msgid "Enter two valid date/times." +msgstr "Εισάγετε δύο έγκυρες ημερομηνίες/ώρες." + +msgid "Enter two valid dates." +msgstr "Εισάγετε δυο έγκυρες ημερομηνίες." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Η λίστα περιέχει %(show_value)d στοιχείο και δεν πρέπει να περιέχει πάνω από " +"%(limit_value)d." +msgstr[1] "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " +"από %(limit_value)d." +msgstr[1] "" +"Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " +"από %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Έλειπαν μερικά κλειδιά: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Δόθηκαν μέρικά άγνωστα κλειδιά: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Βεβαιωθείτε ότι το range είναι αυστηρά μικρότερο ή ίσο από %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Βεβαιωθείτε ότι το range είναι αυστηρά μεγαλύτερο ή ίσο από %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..f4e15a306 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,115 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2015-01-18 20:56+0100\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/postgres/apps.py:42 +msgid "PostgreSQL extensions" +msgstr "" + +#: contrib/postgres/fields/array.py:21 contrib/postgres/forms/array.py:16 +#: contrib/postgres/forms/array.py:170 +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +#: contrib/postgres/fields/array.py:22 +msgid "Nested arrays must have the same length." +msgstr "" + +#: contrib/postgres/fields/hstore.py:15 +msgid "Map of strings to strings/nulls" +msgstr "" + +#: contrib/postgres/fields/hstore.py:17 +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +#: contrib/postgres/forms/hstore.py:16 +msgid "Could not load JSON data." +msgstr "" + +#: contrib/postgres/forms/hstore.py:17 +msgid "Input must be a JSON dictionary." +msgstr "" + +#: contrib/postgres/forms/ranges.py:33 +msgid "Enter two valid values." +msgstr "" + +#: contrib/postgres/forms/ranges.py:34 +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +#: contrib/postgres/forms/ranges.py:82 +msgid "Enter two whole numbers." +msgstr "" + +#: contrib/postgres/forms/ranges.py:88 +msgid "Enter two numbers." +msgstr "" + +#: contrib/postgres/forms/ranges.py:94 +msgid "Enter two valid date/times." +msgstr "" + +#: contrib/postgres/forms/ranges.py:100 +msgid "Enter two valid dates." +msgstr "" + +#: contrib/postgres/validators.py:12 +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#: contrib/postgres/validators.py:19 +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#: contrib/postgres/validators.py:29 +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#: contrib/postgres/validators.py:30 +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#: contrib/postgres/validators.py:70 +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#: contrib/postgres/validators.py:76 +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1ac0ada42184b86a1d0f05b71a4325d06f6f5332 GIT binary patch literal 2839 zcmeH|OK%)S5XTz`ujL&c;Sr!XMA}uDS+9*yG>#D=SxZj5juWrBfMm6IYIi%C>0Y{f zyj}?;bKx6s0EKIm1J_&-AAtjW0S*ZVB#xXAAo1^+HI5O1AcVxhE%p3ndTOfw)m7c| z?cqZo3$&-ukD`Bx{v!Ijcj1EeHTWF(4Y&gS0G;92l0_#^l-_~{`b>fjgP)8I{zz@NYd`24*>oCME+bKr;I2hegI z4EpBouk>}mpzjJ8^nDKoeLsUi-;oC@eK8pHErJAYfI;65cn$m<4Eoj|tn~c?*71C_ zR_SYlgy(m_pznP!=(`FAeK$eK6Az(>b{{&Hplpv!3F&2f4A;leu@w6nB#S4};YvI@ zeFIr#uCOd+d=G<9Oy5DG5T{L%rKF9g%*d3^uAN_@RC*bUwswVO@h8Vc%RnE70_b0=p)P3XQp~-k}jwL-RJmrP+w8v_vc`xak?~rP2-`xuF?PS1Tn2N3Y^a7!CQE+Q9|&dAz&c z``0*)|K6wjFPz@SXKt$M(SN9gf1~p+e0JoBOrM;$N)J#(X7{$Ki!5_ug`MZLN{6eG zIFwtVzL}iNnKIS`Ka9nyaUNy8c43)#+p~7at`lnpCYO2Q2+PluE9Wpzg4n`fV`@<7 z%i4_fErug&wp7aLEtcIdqnFkPy>vW${EW*cSp@#7rJ6Fp2 z8}7!=XJKcC&*e1mupL9_h{&2t-1E^=8oiCpf_M^2FJU*E+C?52>!Xevs5E-37`Uiw z5~{79k1q0-3Z~JSP_8sPGuw)0UW-~SYRx6B*N@Mj)t066Q5X7MCcUu, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2021-04-11 13:16+0000\n" +"Last-Translator: Tom Fifield \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL extensions" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Item %(nth)s in the array did not validate:" + +msgid "Nested arrays must have the same length." +msgstr "Nested arrays must have the same length." + +msgid "Map of strings to strings/nulls" +msgstr "Map of strings to strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "The value of “%(key)s” is not a string or null." + +msgid "Could not load JSON data." +msgstr "Could not load JSON data." + +msgid "Input must be a JSON dictionary." +msgstr "Input must be a JSON dictionary." + +msgid "Enter two valid values." +msgstr "Enter two valid values." + +msgid "The start of the range must not exceed the end of the range." +msgstr "The start of the range must not exceed the end of the range." + +msgid "Enter two whole numbers." +msgstr "Enter two whole numbers." + +msgid "Enter two numbers." +msgstr "Enter two numbers." + +msgid "Enter two valid date/times." +msgstr "Enter two valid date/times." + +msgid "Enter two valid dates." +msgstr "Enter two valid dates." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgstr[1] "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgstr[1] "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Some keys were missing: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Some unknown keys were provided: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Ensure that this range is completely less than or equal to %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2126b26136dcfd6b24c23229608ad9834a035080 GIT binary patch literal 2742 zcmchZ&u<$=6vw9!ei4HV4ZIEh3cdz@Febz}_!;;d_&rGAJ#YdnJtV{x@D1=?XxIiX;QqUZ zd%AuHZ{U9Z5h0!iKLTF`?|?!7w_wou3mA0&0iFlXJSs#PoCZGzCHM(=>M94qy{I|p9E{R}t{ZiA2|9>);|@(h#)Knf zuo9SMncSrql0uLRagbIM%L;Dl)_AFm!$+=RyZvazq~K^0XTsC4KYcs6pe^nW;yoJU zxcv7%-GAZqK0Z_1%N}zi7ygOPzwo&t+hn)M`AnGvNn{6?6_ac2#40<_ac?_ZZxb7` z6Y`tM$&^X6NqnO$)~xeL>-8JU#5vW9JTJe=qo#wc6qxnuDq2|wiA3TJw z%4idnp0ojU-$8|KWummQxUz7#h^cb5bQR^m1}b*jkm(WrN?W5oW~knfnPWfu_Qtj7 z@}XUrYm2jJ!PISB?8oIzRrx`8#+HrQxoXL zD^k0>RcD7TcXv-_`+JJ?pwOkyQ`{*kGd6p$|Rwb5V?jQn)gX*=(4pLKQ7E@_XVIO`WdVP{j5kR@g2%JIA z7qRQWf_>iDQk{In0zxD}=FSbaYp@!MY zY%2G^v`w+ZI_$~aJ#C%Rm<*q^Bnt4LVfHNyqn7Z8W7syN4az69&i8|kp|7xiEwp0P cdsq#`92VU{G+d6xR21%(G8U;mYFHM30)h8Q3IG5A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..e21c5a795 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,109 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2015-2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL kromaĵoj" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Elemento %(nth)s en la tabelo ne estas valida:" + +msgid "Nested arrays must have the same length." +msgstr "Ingitaj tabeloj devas havi la saman grandon." + +msgid "Map of strings to strings/nulls" +msgstr "Kongruo de signoĉenoj al signoĉenoj/nulvaloroj" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Malsukcesis ŝarĝi la JSON datumojn." + +msgid "Input must be a JSON dictionary." +msgstr "La enigo devas esti JSON vortaro." + +msgid "Enter two valid values." +msgstr "Enigu du validajn valorojn." + +msgid "The start of the range must not exceed the end of the range." +msgstr "La komenco de la intervalo ne devas superi la finon de la intervalo." + +msgid "Enter two whole numbers." +msgstr "Enigu du entjeroj." + +msgid "Enter two numbers." +msgstr "Enigu du nombroj." + +msgid "Enter two valid date/times." +msgstr "Enigu du validajn dato/horojn." + +msgid "Enter two valid dates." +msgstr "Enigu du validajn datojn." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La listo enhavas %(show_value)d eron, kaj ne devas enhavi pli ol " +"%(limit_value)d." +msgstr[1] "" +"La listo enhavas %(show_value)d erojn, kaj ne devas enhavi pli ol " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " +"%(limit_value)d." +msgstr[1] "" +"La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Kelkaj ŝlosiloj mankas: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Kelkaj nekonataj ŝlosiloj estis provizitaj: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bv kontroli, ke la tuta intervalo estas malpli alta aŭ egala al " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bv kontroli, ke la tuta intervalo estas pli alta aŭ egala al %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36e110503c9c97306216c8b77c04eebf1b0b22ba GIT binary patch literal 2917 zcmcJR&yN&E6vs=&U*m85i9er4!)~BwW>-KMSfjv_EbcBVyJ$>IOl|j@o`UMCp{ja^ z<%AcG-aKgJz{PO!V&p=&?Ztx!`3HTD|jA!3H%Ct4!jIL5B>zc z0R9dVcmv!4zIvY!m%yXox8R@PYv9*ggct*_fX{-zfdu{yj)O1WFT?@xF!(n3IcN~e zWpF!wzxkjL3*anx5WE0JKfi)+fPaB;ecK-D``rV^b$$$P2TL&ey#W3IUIV`e&p+Ic zZ(mJ_UHJV881wN37~{S)X#Wvx;`a@34_JRh2!tnq>UscAq@cPU8xWya*AsX?i5saH zxe&5=8aG^u#|J$KtJ*81rON-K;8TM>get@#Tk4FA4WzBi=;-3HdCFvvbun#x>6k)C z20WA}Cr!?Tm(&(r&4KkQ<&I@w7p)9gM|`@Jnu4Xb#!} z>{&8pvCOV=KWxH`DvN92Mo!%Roix11&SjL9$dDlr_?= z*2PTV0xLJ6Gww+ltORDx$yLe_QcQ9c971b}Sp_$#H9;!lG01mpZ;-8w6ddiulh7LX zXJ7{x)aKqW-=jIs>bLjl?}pP&d=|D}J?5rb_&;&}htE0LCEF$+oH99z$PQl{rqtSt zdG>*`{&x8OCU)dXtZybS3ntAb51qPLus)!y7eAaOJ`>n@?5-D!7AB{7)f3XsR4DH; zPYY{{jpGA@(ws83XEqpion28GXB#Y+;*3GM5aW&0_YYQ8SFuL;Ov;Ef_OQuDjOro| zt_n4_UqAOvHUGH3e(pj%nQ^!rEIb~^xOA+@*^``xWF|{K!ePOBT9lo{X|}cF+_f$w zb3RvDaiTCnCDqV+iyo*65FJ;cj63e1Ri(P4y@6cE$gl?!u+h~xWcw-Y zNas0Bome`O>|M8ubG6we(%1p7dhEnNr=^(H^$`YPYW$WU7&-vOF$1u*APM6qjlxS5A z7O%u@Y?@j@ZDK)G$W?5pC57DS%6jzpL%43|5RPu=V#c8KV?c<~tX(M(KOAptMNl2- z8y)MUr?r0G+Zu;${NP2AyHn2)<-6s2GtX-m?^ev4d4@d4-NRYP*r0Nd!v0&7 zXY0i*vN+f$yciT!EWwy>d`7EGYZ+CyKvu2ERVb0->7hQOnBaR|xy2Ew1OAanotJU8 zR72`, 2015,2017 +# Ernesto Avilés, 2015 +# Ignacio José Lizarán Rus , 2019 +# Igor Támara , 2015 +# Pablo, 2015 +# Uriel Medina , 2020 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-09-25 17:40+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "El elemento %(nth)s del arreglo no se pudo validar:" + +msgid "Nested arrays must have the same length." +msgstr "Los arreglos anidados deben tener la misma longitud." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de cadenas a cadenas/nulos" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "El valor de “%(key)s” no es una cadena ni es nulo." + +msgid "Could not load JSON data." +msgstr "No se pududieron cargar los datos JSON." + +msgid "Input must be a JSON dictionary." +msgstr "La entrada debe ser un diccionario JSON" + +msgid "Enter two valid values." +msgstr "Introduzca dos valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "El comienzo del rango no puede exceder su final." + +msgid "Enter two whole numbers." +msgstr "Ingrese dos números enteros." + +msgid "Enter two numbers." +msgstr "Ingrese dos números." + +msgid "Enter two valid date/times." +msgstr "Ingrese dos fechas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener más de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener más de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener menos de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener menos de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Faltan algunas claves: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este rango es menor o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asegúrese de que este rango es efectivamente mayor o igual que " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8995ab81ade5b315ecef5a8962133d0dd197df4f GIT binary patch literal 2917 zcmcIly>A>v6dywPI=;jA_XA|%BiXyNNu=l;BRPp9oY+o?4HZ%}xqaT7WOn8LPo4Ezw-27Uva0R9ea0e9am1l$vVa@>wLLQsx-D}?LixF7Ea@E{bM z23!{p;ekqVU$q0b%3L8VW&G~}K3MI+RUr=8LZ@VGAZ=wzhZl~{Q!0aOh-u>s#}v9U z;H5k{X)-2EIyUcV4y;!wb1Vb9C}qex;xmQR6fBL5YL%;SVp-~f>;4ASY4-kxbd@&y zmQ0bKWLK&mF2SNo;~lseRL)!MU1Pa)b<=vkYc;Rim@&N~P+s^zCz)gwEY%6h8tGOV zVkU5oo14(Bdr}5BftYi0g;KZ_gIqcX*V$AjX0~?R*da+<3a++5>A^c3a@*Z~D zxLaJTR|17OZEW9c5bQa-tWr)lNG?W;LAntAjphf9Rn}Fk5kA{tcp7)uq??2qA|5Ua zHLhPd_ep8L?ysEtGZwA~up*}|yJN*|I%`0uq0*0rge zt0g{5`{ByIS0Q1tLS~#Svdr7G(33{_E{#sPj7?BR)@igGLa*Iy_WS)th`QqW21uqk zaB>K`Qq^RCV(NIaUYnbln_j=sSff=tfPRA7WO1bjp9AvO>}fRE1a-R7c@C3rEFMbs zuFFMpOYD+q)3Irp(7h*BSo69~rLEdAT{x+eL)PWKO{Q0V`pNML8cZig4Lv_eWA%xe zm`CL?MLz67WooG-T_zp))kjvsJCbZeOnJ^$FFS^C%5Sy3y zxs}w``>1HJ#ZbXD%na?LBf#@fAZ2i{2Nf0u?Aqy+9IR{=+*w&sZAYzMgaB(={c0mS z#}!aBXBw0$wO+jlN|vO-%Ce+e#fGn@yQDz;wC;%ZgwF)^r^SYj~-rpzdgY8fdu zNBpeGR45S4=^+`TPS!cPYBxszqGF}9hNRAlXjW_RJKA-PqNl2jQvYzDN`^+(J$W2X z*+Y}<#4_G+bXwzou25tU&{dBj@oPmmXwR~VH7()Sza|F9b*x3S8|=QYfv<5MSAnZl Lc+lN3J`M2~YgCA| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..35f8bf911 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ramiro Morales, 2015-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "La validación del ítem %(nth)s del arreglo falló:" + +msgid "Nested arrays must have the same length." +msgstr "Los arreglos anidados deben ser de la misma longitud." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de cadenas a cadenas/nulos" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "El valor de \"%(key)s” no es una cadena o nulo." + +msgid "Could not load JSON data." +msgstr "No se han podido cargar los datos JSON." + +msgid "Input must be a JSON dictionary." +msgstr "debe ser un diccionario JSON." + +msgid "Enter two valid values." +msgstr "Introduzca dos valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "El inicio del rango no debe ser mayor que el fin del rango." + +msgid "Enter two whole numbers." +msgstr "Introduzca dos números enteros." + +msgid "Enter two numbers." +msgstr "Introduzca dos números." + +msgid "Enter two valid date/times." +msgstr "Introduzca dos fechas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Introduzca dos fechas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d ítem, debe contener no mas de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d ítems, debe contener no mas de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d ítem, debe contener no mas de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d ítems, debe contener no menos de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "No se encontraron algunas llaves: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Algunas de las llaves provistas son desconocidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Asegúrese de que este rango es completamente menor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asegúrese de que este rango es completamente mayor o igual a %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..927d16a25b4c262ab22a1524a94fca8489960aa0 GIT binary patch literal 2484 zcmcJQOK&4Z5XT!>UgoJ4PXSATgos7Pb|R2g&IV}{94U}E*-aLS16p-F<#F%!bkBD8 z*a;U7T)81`Towt$g$v@e;+F3L5)vPQ6BqtHwl@!LNFZ!@`vh!(e}M5^FFYy4n_vTs>s_z~eg(pO^~Bgbivd@}a~O|e zz?`UI;8+5p_n)UR!_frHiDxFOPfa)lObfAWOP!LjfwYw=eY~~NrBnvl5FO)7#}o!K z;H5k{X)-2EdNwaK2iAL(IhKK4lrm%;@tsm?3YOlP(JEKr=1}UA>;8=DG<$z0U6sv| zB~#`*>?-xsC0JBxJOej_%K3zE4_K~TJ+eL;Sj`7E)|3x8ya`enj}!WV9Ze3Hk_w#9 z;!RkMA)Uw}wAAO(G(<K1Y}+=~HaC*%JXBFM`3Q;Hruo)d z!c$w5J|x@l#cLU?Yg08>ecq)dcy;ANNSLgY87JE;^EPc2(kMTmnPsbOzN2KFW(FY? z?PhZ{8Z|;x6}LA~!p*UdQ|O7NCi|Pq8_jxceRaKaaG<$HtG0~PX9JJ+3b-6_70p7U z78a;Ckj`^hys^EKTt1MC=KAcCj_KL7x|_>8D%^LvO_iOn1M8%x;r?B8GWkG}6F#Dap@gSfk87XWL=K}_#;Mx|L$X$GaM9juEo6 zv5%#UUc3MESQ^5P;-L}uxb1MekNx7Tn$h3ROZ7>b_wSyU&nId|l+flli)o4yO=Zl1 z7*B&bijmYZHn1E~vnEraL, 2015 +# Ernesto Avilés, 2015 +# Igor Támara , 2015 +# Pablo, 2015 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Los arreglos anidados deben tener la misma longitud." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "No se pududieron cargar los datos JSON." + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "Ingrese dos valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "El comienzo del rango no puede exceder su final." + +msgid "Enter two whole numbers." +msgstr "Ingrese dos números enteros." + +msgid "Enter two numbers." +msgstr "Ingrese dos números." + +msgid "Enter two valid date/times." +msgstr "Ingrese dos fechas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener más de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener más de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener menos de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener menos de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Faltan algunas claves: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este rango es menor o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asegúrese de que este rango es efectivamente mayor o igual que " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..294ebd20a522d9bd6472b01833657f48fe7c9228 GIT binary patch literal 689 zcmZvZ%Wl&^6ow5HA$eJGS-|43ON1tNA|X`{VNse&kzx_rfY_m_J#i+oXRMiV5*FQ; z2VjHP@C@wOcF8*+@h1F}HiSwX>C-g%0Decl%+!U9OJ2e#(>-tiwp<%A)((xjT|Oc>kw z$F=08%qizi{Kt*U#``DQy26OlH)9fOCzO?1*B=MAX_i zmfAw*?64^;o9cwZ$!m5ZmePl^BeYDY7x!WoKWE(@j!E2o7Q@0Zw~kE>SGMF%n}jxJ zITLF-)Q(=fM1(3DUI;c7yh`Y_=1ST*wNkN`nQl{S?p&Qj(Q38oIA6#ocQRc?R}*ff zysi@o`yqWFwZn9j4tKxP?Zn|LjrUWS=VOh59UdU6ODVK7p7ek&-~ omel2sN*HZ#IA;RGSXy3w!#erRJ8V%S`}z`z!|e{?+^shF13eAMo&W#< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..cf1686442 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,98 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Dzul , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "Ingrese dos valores válidos" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "Ingrese dos números" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e912083edd83da298ee5e65eddd04f3682611140 GIT binary patch literal 2886 zcmd6pJ!~9B6vqb$U&luv5D4EdKqQ}%y|ayiqDzcK5=U}~9TS^WkG8~8G~{{bOh0gr*f&P(7y(1YQekHN3NZ)@rY$95fP2yqni zZ-T+T0r)ETA$SP<8hjo6spj5?gn)ShsK$MG!v)oNq$W(S#$LQ1!vj}r8!%Zsfd?wZ zqxA~Rs$vDVRQG!re7s(RsY0BxrH;v1Puj|u&Muu_pjdj@60^pY1(Q#t$4faXr0Fr? zqieHVvuC|dy@I9ZB1jps1@U{O)Z{H4n$Rj!{@uRRB{$tJ)oFHaSGuY*2bN5kt#DDP z-<-mUDh_wxwpSV7V(li=m8sk22Z`0Zb;g{@OHWzpJgqRv+F7dWl{Ka*t?^PBhfOZAgW6j$DJVLEH(@r!r6vB1uAJPwB& z2QiWTkl##BW=xt*&nGRhXq`t|FTH(^__Al?5M3vhEJRXXcLet{Wy(36)4|=sWV041 zO=|4G+#r}2wy$E2Z;)ILCwf`bOy1*SPDWxj4FrV!?en6tAJ0ZQ}yxw(!xs>!~<8S@vAC zY&+CgJRe=)z6zqz>5#58JvluYO&*P=rt#UCoH{&-(KsiakCtJ-)6(0bL)Euh<;!#u zrkr>K5~f$m9!JY8vkuKVZ;e8)m`J?OJMH#hFlhOpAZ%)(v$V&SZ9>=k+w9xT#{As; z?A9HoT9b`as30~lVm*hI9uaHj8YOj{x``|t`K_w`C6MAZNKk=*L;@VK*8Yq@POh+k#mn0lYPCy_rOHD&#Nap@G*|FzC7q_(e!n zftW$Nj-hc!=jE{~g@7qEkpynUp;{s;8;IOZf`SM#ckw(aKM#Wmtg}c2HLLY()Mm!q7tP?ecn#$;, 2015 +# Martin Pajuste , 2017 +# Marti Raudsepp , 2015-2016 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL laiendused" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s massiivis pole korrektne:" + +msgid "Nested arrays must have the same length." +msgstr "Mitmemõõtmelised massiivid peavad olema sama pikad." + +msgid "Map of strings to strings/nulls" +msgstr "Teisendus sõnedest sõnedeks/tühjadeks" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Võtme “%(key)s” väärtus ei ole sõne ega tühi." + +msgid "Could not load JSON data." +msgstr "Ei saanud laadida JSON andmeid." + +msgid "Input must be a JSON dictionary." +msgstr "Sisend peab olema JSON sõnastik." + +msgid "Enter two valid values." +msgstr "Sisesta kaks korrektset väärtust." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Vahemiku algus ei või olla suurem kui vahemiku lõpp." + +msgid "Enter two whole numbers." +msgstr "Sisesta kaks täisarvu." + +msgid "Enter two numbers." +msgstr "Sisesta kaks arvu." + +msgid "Enter two valid date/times." +msgstr "Sisesta kaks korrektset kuupäeva ja kellaaega." + +msgid "Enter two valid dates." +msgstr "Sisesta kaks korrektset kuupäeva." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " +"%(limit_value)d." +msgstr[1] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " +"%(limit_value)d." +msgstr[1] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Puuduvad võtmeväärtused: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Tundmatud võtmeväärtused: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Veendu, et see vahemik on täielikult väiksem või võrdne kui %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Veendu, et see vahemik on täielikult suurem või võrdne kui %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..776c2f4c86d5ae4d29aa79f8cfc42b7e6041438d GIT binary patch literal 2883 zcmcJQO>Z1U5QZBFUkd~X5WYzvgzzevT{{VqwTU4lagakCo7mwHMMAwh<=M{8bZ@4+ zz4o4h6!8x@@O1=n;ua(jKLH{50~`Vp2acRTLgMY2S$l0cAt=g7GtX>Kb@kiTRkgqD z+4YgY^(5{WaDR{cMcfzf!UNY&;IrV*;92kw@Ex#qw-9^455ecbkHNj*HSlTh2k;s2 zH;}-8!2RG$_XzP7cpCf?{1e;;F`ZsoI7_i~vLR-*^*NL4N{5HCluMm3 z;iY4;e#(y1bxLxUj`Lup$>hYBy-dj&dUYaInR4&1%G7h+-lDsdt-U2*#hL>{+GlOf z3-_ZTtf=C!2W~o*@eRK1FkDF8GCt^7kVIzm+SEQxtvJipaa%g}FA=}g|D^SK); zT8MLHh9;GC)Q5qF84VmuGO5xAI>;NCtP?L2j+R+wEjljkWzRIxb*|rPHV1=2!v)W3 zh1bG_W+{1uw3^*y->lc>=jLZOH#gOoterq}hPtYl&& zact0patM_abBccbe|@<%)w_|eIkZolV_VUXbzAlndfUcOTc+GI#lJ+;sfNWi~O5yUp**sy3rycIfX1O=l`%PD6#YLBQ4VSzb8 zplpc?439cS#78EWv!&6-{y>mW1g+`WUkcW}N`bl-@b>Q!B+=)O@n)=c(gd3H$SwvsvWo_mz~Vfcz%mSgdy z*gM|Ri@O}lK5N+%Z%dp#@?z+Fv?5c70ziR{HQ2&{hdh*t*CR{Ls!AL)Tn^|xwjt1UH~ViC{8T1o9+v+_K>*SK^;&l0e*w@6 Bcq#w@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..89b8acbe2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eneko Illarramendi , 2017-2018 +# Urtzi Odriozola , 2017,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2021-03-18 15:48+0000\n" +"Last-Translator: Urtzi Odriozola \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL hedapenak" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Array-ko %(nth)s elementua ez da balekoa:" + +msgid "Nested arrays must have the same length." +msgstr "Array habiaratuek luzera bera izan behar dute." + +msgid "Map of strings to strings/nulls" +msgstr "String-etik string/null-era mapa" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "”%(key)s”-ren balioa ez da string bat, edo null." + +msgid "Could not load JSON data." +msgstr "Ezin izan dira JSON datuak kargatu." + +msgid "Input must be a JSON dictionary." +msgstr "Sarrera JSON hiztegi bat izan behar da." + +msgid "Enter two valid values." +msgstr "Idatzi bi baleko balio." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Tartearen hasierak ezin du amaierako tartearen balioa gainditu." + +msgid "Enter two whole numbers." +msgstr "Idatzi bi zenbaki oso." + +msgid "Enter two numbers." +msgstr "Idatzi bi zenbaki." + +msgid "Enter two valid date/times." +msgstr "Idatzi bi baleko data/ordu." + +msgid "Enter two valid dates." +msgstr "Idatzi bi baleko data." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)dbaino " +"gehiago izan behar." +msgstr[1] "" +"Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " +"gehiago izan behar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)d baino " +"gutxiago izan behar." +msgstr[1] "" +"Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " +"gutxiago izan behar." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Gako batzuk falta dira: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Gako ezezagun batzuk eman dira: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Ziurtatu guztiz tarte hau %(limit_value)s baino txikiagoa edo berdina dela." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Ziurtatu guztiz tarte hau %(limit_value)s baino handiagoa edo berdina dela." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..26bd1e562824abec02569c2f1607aca32a9c8ef0 GIT binary patch literal 3308 zcmd5-TWl0n7(OcA)*Ise{s*J!26nfU5Mc|bKuHP|DijkF6PfOu?hee(EOX9w=^H4! z?L!lve9-8N4=hy5W-Dkg#Ai)>khhsO;Q@UyJ{ligBAVEBW8x+KY@fXlFxk6Y>{NYAC9Df64A$Iy@*Cx-`5PIIgq3amd3+T6j)wf5(YWHSaPM7?gZrnX=xeoDv$htM4TpX2wG2fnoN5^IjGNYZMyv4VhOdG0Q^Ob_{%0(Z8 zUa739SXP=wC0TK>oSb%i&k82eVo=K>lzY06ROEP2f@MKqO^^*r9ArZd)Uslq12Z|_ z)0X2YY*Gck5=YA>2Zq+;NtosQ#Oq*!#$=@(@9r4e>E&&z|H9}kY!>}i^>|Ba;h*sQ z3!6h$iTp8AI&i!^ipXydGhW$smDn$pmUb&0s+GioHO}=dNm)fnuJrP{kQT$f(kSag zZ|oy^LQ78}yGk7LvE-PXP=xSHDmqHRPZrvEG8r!@d&fM#;&m)61^&2WOS@y`2z%64 zpqVebZ#9;wE3OfFA}7I=zevyST9g*N*%T_zUqAV=@t;)JPkzFk$=j`1IJYB9hoZng zDswtDXs6ypvp`Rl?4#&rKXFi&{6MFMRNk>uJIZ;L8u7D~7(S3XD90UMn%c$XN`1Y3 zy{XMsNLIc;Tg@ryt8sZ=Uy%_f~Od4hLjT3p-U#@jPvRwkJk8XOu} zRJ9@9o7jn-k{)PHl)zgfhnbR#ChMmhs3@to9Uj@8+Pt`qeT~T=HQ?oZ+az`KsH1Pt z%+i>Z73hV`&H-w5Xz z7p95A21bo&lA_75jtO(#QdC=*4nGfP(%2k+8C4giqgu(3rLUu8c~(PPdS5#I*O!2 zdt4$}5uI)o3t>M>4YZd0JYX3qMs>hpn+W1uH7Uc#xg|wmBfDHVZF67>8R`F#BdA1h z5zm&iG!ns4Sd4Qx%Q;1mKjXS@3t94iL^#`KZbX0CU@q=yHO{~2x`u;+i(rP8a9SV{ zZ`|K!`4PWmqDjttlG}8t3 z@B+)cev%D$TU%7gySSe&w`k9?owh94nWN}yBa6@3u0x4eu}9X}ZuPbCZ*pzikv9T8 Q3m>PzmNlBcWye|k2Saa+o&W#< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..e9b404e99 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2015 +# MJafar Mashhadi , 2018 +# Mohammad Hossein Mojtahedi , 2016 +# Pouya Abbassi, 2016 +# rahim agh , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-27 09:32+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "ملحقات Postgres" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "عضو %(nth)sم آرایه معتبر نیست:" + +msgid "Nested arrays must have the same length." +msgstr "آرایه های تو در تو باید هم سایز باشند" + +msgid "Map of strings to strings/nulls" +msgstr "نگاشتی از رشته به رشته/هیچمقدار" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "مقدار \"%(key)s\" یک رشته حرفی یا null نیست." + +msgid "Could not load JSON data." +msgstr "امکان بارگزاری داده های JSON نیست." + +msgid "Input must be a JSON dictionary." +msgstr "مقدار ورودی باید یک دیکشنری JSON باشد." + +msgid "Enter two valid values." +msgstr "دو مقدار معتبر وارد کنید" + +msgid "The start of the range must not exceed the end of the range." +msgstr "مقدار شروع بازه باید از پایان کوچکتر باشد" + +msgid "Enter two whole numbers." +msgstr "دو عدد کامل وارد کنید" + +msgid "Enter two numbers." +msgstr "دو عدد وارد کنید" + +msgid "Enter two valid date/times." +msgstr "دو تاریخ/ساعت معتبر وارد کنید" + +msgid "Enter two valid dates." +msgstr "دو تاریخ معتبر وارد کنید" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " +"باشد." +msgstr[1] "" +"لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " +"باشد." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." +msgstr[1] "" +"لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "برخی کلیدها یافت نشدند: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "برخی کلیدهای ارائه شده ناشناخته‌اند: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "اطمیمنان حاصل کنید که این رنج، کوچکتر یا برابر با %(limit_value)s است." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "اطمینان حاصل کنید که رنج، بزرگتر یا برابر با %(limit_value)s است." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..856bf2bc984aa0ae5a9450a1ec1dc4a135267563 GIT binary patch literal 2943 zcmcJR&u<$=6vqcBzYG*8zkk0}AjNIhc2fk!A&1g7Qrf01jX@wGRa5W8p6u+*vNL1X zw<00LKfnP5oGgSmQw|9AfKNyq;2-Fr^u`5=69*)|vuihY)h3lHM%w*&cW2(b_vXEC za(UN|<wzxSq%L6RsC|5{{_zn0s_!9WV4#wueAHgTUKR^Qi0juD%cQf`TcmzBEegwV; zUoL`S|DE?T_CC00%#XoG@q8ICdPw!{! zb#SS|*sGuiLww(XbKuWl@bBvQ`_2a#Tg3BW5biOc828|g6cpp3G2wbK9>)C%!HU_x-L>Vsnoboq0#8w~o#U;^Sn=wv$Hl zd{AR6PNaxjyKdEz)QAMr@|+JShD#yIg>!JN$xcX^X&ddh)E0|u*YwBPib=xIKHLd! z!}*No!33>~{v_YCIgV@F+qD0O(VN&zO<6tqx>~p$Kew>C$}=+SWL++G2SsEiKkM2n zW!Xt#orufhu;n3kc`wwrAj?xhO6ZR3*4Sxd9m;y`?Gq%M#TBHfT!V$(DBTq z8VieyLJjY)T==rsziO{s_$qW}SkA|Rhjt91Bcj}Fh_;JX;^a~RFe)dwbx{lc zTg9Epn{yGCg5w!$Qo3t#ombOdtUFWi9z25KlYc4F7>*9P3s!}h# znm~=0*VkpeT3KCLJ-X@t{#v7Q7~LZ@92jKq(BZV|nL;})QoGA@E8NmMt>x(8=De`i zy2zuWx^3d(_zs?v?wXrTT9=j6%I91~%O+24lXO-*+NFg>Dt|7`Ynof4{nf<^3u+k! zwd5ou^^A0$6ffnoH5#U)p{AgJ0#e|W5M-3%l$Zp1A+7f@o)2VFNB;yITDIiT=M zq?x3|Lquk~9Qt${mNO~z7M2fb4fl9rB`KeH{1KRXV`L%_Xf_(kUJ=`9n2&~|VI4=U zLO=<>wFNh_%JZI?T|LRt*paot=m+Pn%Vd#%%Qa7AzJcW}?lIkjoRu2PRU%C|o1o+H zvxftaTIf=KIkHd1>>2S5zU+fSIEPk}Qjdng0uHJ?J_O%I4nycSI-npiMJz$!x7dN- z#ula0Z()23+eHD~)cI{KZ{_xOrjJAOkkeG;Ng_9lHX%dPkKOP$6Aj=7-3=t3=7WA! z*_yPYVUnQmtW*kVcjYH8t~4+1scxANDP>TD16VpN%CznJn`t{;)9=VfR?N VcNYaSDbmg4T+0LkE)!8>{{b(Xsrvu` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..ce5af05ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,110 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-12-09 06:30+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-laajennukset" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Taulukon %(nth)s alkio ei ole kelvollinen:" + +msgid "Nested arrays must have the same length." +msgstr "Sisäkkäisillä taulukoilla tulee olla sama pituus." + +msgid "Map of strings to strings/nulls" +msgstr "Kartta merkkijonoista merkkijonoihin tai tyhjiin (null)" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Avaimen \"%(key)s\" arvo ei ole merkkijono tai tyhjä (null)." + +msgid "Could not load JSON data." +msgstr "JSON-dataa ei voitu ladata." + +msgid "Input must be a JSON dictionary." +msgstr "Syötteen tulee olla JSON-sanakirja." + +msgid "Enter two valid values." +msgstr "Anna kaksi oikeaa arvoa." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Alueen alku pitää olla pienempi kuin alueen loppu." + +msgid "Enter two whole numbers." +msgstr "Anna kaksi kokonaislukua." + +msgid "Enter two numbers." +msgstr "Anna kaksi lukua." + +msgid "Enter two valid date/times." +msgstr "Anna kaksi oikeaa päivämäärää/kellonaikaa." + +msgid "Enter two valid dates." +msgstr "Anna kaksi oikeaa päivämäärää." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listassa on %(show_value)d arvo, mutta siinä ei saa olla enempää kuin " +"%(limit_value)d." +msgstr[1] "" +"Listassa on %(show_value)d arvoa, mutta siinä ei saa olla enempää kuin " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listassa on %(show_value)d arvo, mutta siinä ei saa olla vähempää kuin " +"%(limit_value)d arvoa." +msgstr[1] "" +"Listassa on %(show_value)d arvoa, mutta siinä ei saa olla vähempää kuin " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Joitain avaimia puuttuu: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Tuntemattomia avaimia annettiin: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Tämän alueen tulee olla kokonaisuudessaan yhtäsuuri tai pienempi kuin " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Tämän alueen tulee olla kokonaisuudessaan yhtäsuuri tai suurempi kuin " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c9d0113f50cf8b3505058b1a4c54cc51a538de40 GIT binary patch literal 3081 zcmcJRO>Epm6vu~BzLt+d`Tl+fP_k;gn*<@MOnjJ4ICChR;J|@X4@msS_BP3iKq#su`)7~e%zN{` z?4S1TexKoZ0Ou1pzsC6_&Nptt1;_W`qu>wVaqu_rC9tuJvAy6s;N##0@FDOr_%Qe# z_z3t5NZ_B~KJclV8M_D`13w1;0G|dw*v;5D_$Bxt_%lf0Rj>*^b_-(%z$4&u;9KD9 zu;nu7=k2+TvDd);CEo+R9lwIlfV*xl_B952eRCxRIECl8!56?UzybI>_#^oF9as~5 zw^Hz1(A#$v^!wR!XE8nl&g0pE$G~qun8$$pxD{8pAV2Od3Dfgq53cv(ge$fjFrD3x z6ROxft3c2GoHm7WA1i21(xJXNe ztF|EAGTfl!~g|;c}6%c1LUFI(wQ_ z8m|bGFFzcDMj84&h`N)p*yi2e4Ckh98Siy;BsO%+t0Z+4r`FMmAYM94Hl5Upo3$F7 zcOu5lmFrY3Nrjz2%ox5#Ax!d4&W(d<4YnY$Oj9ezrLvf0JGxhTDyXw)lwi;XO!-#O@fKhT^WjSljO43=(us-Ua!6=tURxLj)>K!fTjM8P~jG#8uOF$ zMD^oW&VQKeui7i;Kk}97r}J{-z8wA5u_L2Ti>3?a!{AjE3-;5X@HDDfS5ApU8y76v zwhV*AY1;Lt<>h)f)S95;4pHf3#sTXz)5tXy+ zEmN;n7Uvh|Hg+&oo2<;DeuRPvYYA+0h*v#{P*5|}>~Ld+JNU}-(P00EoY&P7CYV!A z9p(Ytzarf=D;v}@m6K6wcoZDfCbkVyN&aXLPR~$rdvILQA)2brRM>o+Xe7c4xZrG#enpBI*@wWEcXIKpqOIES63tH`W)#rS4AGVc4Vt#@E2_L_IM z?S!^{i&>by{p?b8?w`EZFTj0y;8RpCtc0`CDzi%tg_$b!+PotxF7aHre_<@^M_E7j ztQveaY|&v#jw5(HC3WTe1s{Zj4-FZtqe*j$(5DN1(#K__QD0kjf?}9L!Ur=qN2t1UrRjG}Ocx#b(7uvNBz;WFf_B$3kcY?}3bxyr5&Z;?dUU7TI= z-vo{Bh2+HV%e7AdZG0futT6ujU0PttA}tXng})%wwnYkUd>}?;C0dYDskhTB?z^l{ zEu9)AMqr8Uk}(7Ax}5;4LC0mc;kZvA;9_u#Hoef4=+BpA)IGh=_I@wd@@)s fzaE42!B<-, 2015-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensions PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "L'élément n°%(nth)s du tableau n’est pas valide :" + +msgid "Nested arrays must have the same length." +msgstr "Les tableaux imbriqués doivent être de même longueur." + +msgid "Map of strings to strings/nulls" +msgstr "Correspondances clé/valeur (chaînes ou valeurs nulles)" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "La valeur de « %(key)s » n’est pas une chaîne, ni une valeur nulle." + +msgid "Could not load JSON data." +msgstr "Impossible de charger les données JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Le contenu saisi doit être un dictionnaire JSON." + +msgid "Enter two valid values." +msgstr "Saisissez deux valeurs valides." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Le début de l’intervalle ne peut pas dépasser la fin de l'intervalle." + +msgid "Enter two whole numbers." +msgstr "Saisissez deux nombres entiers." + +msgid "Enter two numbers." +msgstr "Saisissez deux nombres." + +msgid "Enter two valid date/times." +msgstr "Saisissez deux dates/heures valides." + +msgid "Enter two valid dates." +msgstr "Saisissez deux dates valides." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La liste contient %(show_value)d élément, mais elle ne devrait pas en " +"contenir plus de %(limit_value)d." +msgstr[1] "" +"La liste contient %(show_value)d éléments, mais elle ne devrait pas en " +"contenir plus de %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La liste contient %(show_value)d élément, mais elle doit en contenir au " +"moins %(limit_value)d." +msgstr[1] "" +"La liste contient %(show_value)d éléments, mais elle doit en contenir au " +"moins %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Certaines clés sont manquantes : %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Certaines clés inconnues ont été fournies : %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Assurez-vous que cet intervalle est entièrement inférieur ou égal à " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Assurez-vous que cet intervalle est entièrement supérieur ou égal à " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e8b0fd8295016d141f72eefdc74bde190490fc7 GIT binary patch literal 3541 zcmds3ONZ-r~_y1S_ zv~j~3hUW>4=P|y;cmdb;29PljgDd0um)4=b5 z&j5b`67WypHsFhQF?Jq!2>2E7D)1%XXB!wB0bT+=3H%vIz(0U>;HJA7+XFlR+yVRu z_$73?2;742x9)|`zz-|@5g7E^bsu9b;4E+}@MGZ1z^^O33>?MxRbU&q`F_Se1>d)U z9{_)?_0Nk38QY8fGr*wV55OkyH{d?triU1t0KNm<2|NeHarOX4c<#Y~3(5yu-<3Gbs6?T6LZ8s4r&kentyxe)idB@eL89l@2YrM1eqoh)6>>zLj3qP; zJ5q}wq6Q0x%R~+9S5ALk%CEaCr@si58IJSH@KBDybXa7~aT)t)Qbcc}SYS_w#Bo%! zsU4GDV|_I35+$PjMdG4a)1lhYBhfLrpaN-hAfzj`TkTfVdLyU= zS?KRF?v3qGIal-YB<+VPd-j4tCk0PrG%I=Dp;x)gRJ@&LV&lDXDUGDwcRS5yuh(n% zz$hGUpu;r#8V(?<_%svItkQBc;^w`)a zojOGUN9(kYTGXMi+8(U7!|G_cN_(kITegsY~`0;zdm={(wO3<_ToCk4%=Qe}iy8~O+mOQI=qB)CCK#w@gq*hC1V4n%5A zF*@SP(mY2|-URckNN$q(cmXjyLJ0;VVID1=Q@A^FSoQb4IF(%MC%TB8WboB4D&Q96#nI^f+H=t2tqsxV@ehR zrG@@UD|bKJk8+8Nl8;Eyg%r9linXs7x^=pA!KbTkbrgMQ5<_G\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "PostgreSQL extensions" +msgstr "Leudachain PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Cha deach le dearbhadh an nì %(nth)s san arraigh:" + +msgid "Nested arrays must have the same length." +msgstr "Feumaidh an aon fhaid a bhith aig a h-uile arraigh neadaichte." + +msgid "Map of strings to strings/nulls" +msgstr "Mapaichean de shreangan gu sreangan/luachan null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Chan eil an luach air %(key)s ’na shreang no null." + +msgid "Could not load JSON data." +msgstr "Cha deach leinn dàta JSON a luchdadh." + +msgid "Input must be a JSON dictionary." +msgstr "Feumaidh an t-ion-chur a bhith 'na fhaclair JSON." + +msgid "Enter two valid values." +msgstr "Cuir a-steach dà luach dligheach." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Chan fhaod toiseach na rainse a bith nas motha na deireadh na rainse." + +msgid "Enter two whole numbers." +msgstr "Cuir a-steach dà àireamh shlàn." + +msgid "Enter two numbers." +msgstr "Cuir a-steach dà àireamh." + +msgid "Enter two valid date/times." +msgstr "Cuir a-steach dà cheann-là ’s àm dligheach." + +msgid "Enter two valid dates." +msgstr "Cuir a-steach dà cheann-là dligheach." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." +msgstr[1] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." +msgstr[2] "" +"Tha %(show_value)d nithean air an liosta ach cha bu chòir corr is " +"%(limit_value)d a bhith oirre." +msgstr[3] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[1] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[2] "" +"Tha %(show_value)d nithean air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[3] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bha cuid a dh’iuchraichean a dhìth: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Chaidh iuchraichean nach aithne dhuinn a shònrachadh: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an rainse seo nas lugha na no co-ionnan ri " +"%(limit_value)s air fad." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an rainse seo nas motha na no co-ionnan ri " +"%(limit_value)s air fad." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f7e393d11f8fb49a88a0a11d2d47db4b07fd90ee GIT binary patch literal 539 zcmYL`%}&BV5XbA+rAHDyc^GdHvuz=okVQPGU`QYmf}T9Mv`bmi?l!wyz-RF61Na(T zc@NJ%g>ec3ll^t3)0x?ScfU)=pAOm)a*kXfCrB45>B> zU-Y<~L!_9svzD}6gPkjoc{<|Sc+NgGV~L0$VwPjNuho=?mUJTWf^|Yk3el9wSh)k9 zDQ!v5#3CYhd2Gl~QE>ZDWWZ;lC?yX#ghDN-1thp8)f$F0s9pwWZkHKLhMGx}Fsn3$ zbu7kw0e8y6%`H~QIA<{@L(WnPkEkmYOhS2LZAN{6KA(HG7*I5Mp-TOYvaL)0`~5ia zD{imTYwiD`>ILq-!efvq;ypu^mM^TIB}~W$gcGI>x6S8ao7DGp#a?5sNlS(*5;CSx z9|^nDNg+<$ev)gJkhapPp&+yMt7+C6unC)G2^USMRvNC;LFt-7q;dmtwM@BIc;wsc SYROD-4fvd`zVJ>Me*6QN>z#i9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..870aadd5e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,98 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fasouto , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "Insira dous números." + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "Insira dúas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78feb38a3d256701e184e6b91f46bfe97a28b4e2 GIT binary patch literal 3713 zcmeHJOK=oL7;Y6`tD@rj{THQ}EtuU+K#Lj(mb@fL0z%|qS!GRjI=ch2J?nIDmRu~n zcn*>!1eXA*lnETXQDs@)yn4{n+&G{&kDNSc`Tae!Nfr%8EKb^6y_(m~Pvn_|h&@U- zVo9dz8T1x!> zqUBQnL7VVTSmpD{=pcedWwR6S?il-pzn7`+gwPda)}r+GsGIJ>zp?WcG6%gnMWdum z9H$x8)v|Gjv`s$ zk4yeBWOI}|EbCEhoIza)d}n8)qMhN$rQD%|&S5zgFsZYfuPgPH`btje4X3vcL$}ns zv4oa8;A!Iw!+srlCW>9M<6u;tpq(&f`wmd3O2ey2XIOeQm-fk#ST?DrYE0cN7Msmx z!7w|s6i`=+sa+iiGwxzl7W28mfx$gX9`qJUxn0N~sbIo*9X1-ASFs)cv`` z{`ZIXI$M|MSl6hGojs}?`St*}js#}WN|&lKcPMPcUg+$N;+l3z)$LUGZ`nrau)jx9 ze?Rroh7E+vjR9t*JiSFFaw*;H`}1b6-2-{a(svW2vmMxEIen0`d0S2-?PP+Ii^+6y zCAmPDolRzw77u5zb~>50C8!`Uxy;)w{7y5=Wl-{Dijp(QBqg6?xs|lRN6AFeVglaA zPTT3OBASv@*lj~Y3tC&N5IzrOY|?FrzR1S5lSx=P%`z^tv+UiaWG-32+Ii?-f#?c6 zVUlx2u+6eBQ!sfRE30Drg2`6NGYdukgnpU*>=OqwwP_Oe;S^adn|UgAewss_o++Q< zh0dv_AvnAEqTpm^;ORngj`oZ>Rg^_Q^5LnM8cXj8~{R=M<@BA~XN%yWiMqR)Yk>wql>m%s^4%RWC)TU(%k z8O&e{Ef1D)*@Wl!rG-h;`S=O{pETM|utn^#v52zJ1X8-^I literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..864561746 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,111 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Meir Kriheli , 2015,2017,2019 +# אורי רודברג , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "PostgreSQL extensions" +msgstr "הרחבות PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "פריט %(nth)s במערך לא עבר בדיקת חוקיות: " + +msgid "Nested arrays must have the same length." +msgstr "מערכים מקוננים חייבים להיות באותו האורך." + +msgid "Map of strings to strings/nulls" +msgstr "מיפוי מחרוזות אל מחרוזות/nulls." + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "הערך של \"%(key)s\" אינו מחרוזת או null." + +msgid "Could not load JSON data." +msgstr "לא ניתן לטעון מידע JSON." + +msgid "Input must be a JSON dictionary." +msgstr "הקלט חייב להיות מילון JSON." + +msgid "Enter two valid values." +msgstr "נא להזין שני ערכים חוקיים." + +msgid "The start of the range must not exceed the end of the range." +msgstr "התחלת טווח אינה יכולה גדולה יותר מסופו." + +msgid "Enter two whole numbers." +msgstr "נא להזין שני מספרים שלמים." + +msgid "Enter two numbers." +msgstr "נא להזין שני מספרים." + +msgid "Enter two valid date/times." +msgstr "נא להזין שני תאריך/שעה חוקיים." + +msgid "Enter two valid dates." +msgstr "נא להזין שני תאריכים חוקיים." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"הרשימה מכילה פריט %(show_value)d, עליה להכיל לא יותר מ-%(limit_value)d." +msgstr[1] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." +msgstr[2] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." +msgstr[3] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"הרשימה מכילה פריט %(show_value)d, עליה להכיל לא פחות מ-%(limit_value)d." +msgstr[1] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." +msgstr[2] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." +msgstr[3] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "חלק מהמפתחות חסרים: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "סופקו מספר מפתחות לא ידועים: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "יש לוודא שטווח זה קטן מ או שווה ל-%(limit_value)s בשלמותו." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "יש לוודא שטווח זה גדול מ או שווה ל-%(limit_value)s בשלמותו." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99c9fdedd2abfebd5e76f527d9407583bc4320c4 GIT binary patch literal 929 zcmaJmoIzQX@j6l5*d~TW2GC*IKWWBK6J% zj(h+T9|3px0`45S@(VmWZBr01($kxreQ#&h-tS9`?;XT7;119St^;p@Dn0?rz-M3y z_y*htegHRsg-ece6TA$*1rER;fevsV>z@lV-_m8rd4Tl_xa!jZ-vuY&>ijogSn4^h zfUCF)pj-!zsble!ot7@sn3T4ZY93SP<^Btbx#bO~t*kI)r`2RymN|Z%D7GFOoP34z&(sCsm&Y=>8w1VOZrvd&cUev{s qEONsqidS!_%(yo(A`|NWqWK9;I`s>h7&#WP(uMt_=@9kwy!S7m0Resh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..b48912b42 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,102 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Cuk , 2016 +# Mislav Cimperšak , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "JSON podatci neuspješno učitani." + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "Unesite 2 ispravne vrijednosti." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "Unesite dva cijela broja." + +msgid "Enter two numbers." +msgstr "Unesite dva broja." + +msgid "Enter two valid date/times." +msgstr "Unesite dva ispravna datuma/vremena." + +msgid "Enter two valid dates." +msgstr "Unesite dva ispravna datuma." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..accc10bef4aebf6f41a30d967a221035b94cf899 GIT binary patch literal 3482 zcmchZO^6&t6vs;wzsB$QtX@(SzX8Qx1av>Yn||$GTvWf|_4<*Q@tl zy;t>We%rG7Q-=09`d0KG(4R+t>kj;&{R}<>{sNAHe}Tur`kjnz0Y3zv1J8p`f)~N3 zz@NaU!9PF({{eS`FKlA$8}JzTHTXBU4g7pFV*}v#;1l5QAc0rFGWhIWj2!?EgS)}^ z!O!5!MUe15dJkhGpahSB-+|Wtrh6IN3vLCi{c&&y_#SBOeg(b=cEOjxKfzC+ciVl8 zeGGnED)bFMP>g>BTD?Dl1pW$E!7Kgo@`H@MjQ4jyOlS9_+jciPLXbBM_}8hx#LMFV7XilE)ur*`xh2xXjogm4+@!WhhkKrDGE($H?V|SJ)A$ z(?pQ*xWSLFDdDmu2oFsa#i1}F>`*Ha+=#?VNm2=kcT*mcQM6+q^dsNAJZl=TMH zg+l8M>B?4b8xNBPWVvMRMK!?YE06e%KFiA z$%mp{_$7R``RU6+1x<-;Dc);i>{k9;r@j?RZ=f?$#qN<;?S=p2=Q=t^c}!}Gv`Ku~ z!X{Enk5!q5p=M)38{rn|&_xnGK5h56Ak8B|p^z=(RoE$|4Yu{f>nBK@F+yr&SF;HP zk+$e)LihzmzSgi)$J*@2a$g{oZK*Q3N-$2;wC@UcmE@$gXn10*zt((lu=0In_lP*t z6!6rJ2CNc<#S);_RIS6xi9U>w9|Qi;r2M%rDH{j3PjU5Bd+rX4hz;( zCpW-pR;6(ftHd~?y5+mh!L+5FNmZxPsgusQnD(uxbJ%WI8mbM|oZ4Pza0rj}+ThL_ zTImGW#+iiwI^;$rb;_UpDRG7l!j%KBKti@s-V)BF;8C4U$1!&Agi0Dd3dVqEOkA&4 zvn;C^tHsW&puAKI_m&X$l~g_5sFq8kBcn%FRx((rl@8$?2?@2!CGy2c#vMD8bPFZ9m4D2%Ij`AdvK$N&WT+#qsXM@(gjJGYV>B)HU)yRK$za5PaY-_ZzxJq8Stx4 z9BSGsO_l3wiUQI5U}LIcJgr$YD6H&$!pEp9^rVQ~%zB1KLQY@u6n-_IFNt=K*^<0D^!v3_G)7(n~q%*^v zVUH$4Bp5^5xmi$z0FmITGQseMH~dk zb191BiE>z+PTbENRS?&@mMPTrW<7;dQ(@z32D27m%T~#io1Tqz7uw3;VsD3OcV5sG z{, 2016-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšěrjenja PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Zapisk %(nth)s w pólnym wariabli njeje so wokrućił:" + +msgid "Nested arrays must have the same length." +msgstr "Zakašćikowane pólne wariable maja samsnu dołhosć." + +msgid "Map of strings to strings/nulls" +msgstr "Konwertowanje znamješkowych rjećazkow do znamješkowych rjećazkow/nulow" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Hódnota \" %(key)s\" znamješkowy rjećazk abo null njeje." + +msgid "Could not load JSON data." +msgstr "JSON-daty njedachu so začitać." + +msgid "Input must be a JSON dictionary." +msgstr "Zapodaće dyrbi JSON-słownik być." + +msgid "Enter two valid values." +msgstr "Zapodajće dwě płaćiwej hódnoće." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Spočatk wobłuka njesmě kónc wobłuka překročić." + +msgid "Enter two whole numbers." +msgstr "Zapodajće dwě cyłej ličbje." + +msgid "Enter two numbers." +msgstr "Zapodajće dwě ličbje." + +msgid "Enter two valid date/times." +msgstr "Zapódajće dwě płaćiwej datowej/časowej podaći." + +msgid "Enter two valid dates." +msgstr "Zapodajće dwě płaćiwej datowej podaći." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina %(show_value)d element wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[1] "" +"Lisćina %(show_value)d elementaj wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[2] "" +"Lisćina %(show_value)d elementy wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[3] "" +"Lisćina %(show_value)d elementow wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina %(show_value)d element wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[1] "" +"Lisćina %(show_value)d elementaj wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[2] "" +"Lisćina %(show_value)d elementy wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[3] "" +"Lisćina %(show_value)d elementow wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Někotre kluče faluje: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Někotre njeznate kluče su so podali: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Zawěsćće. zo tutón wobłuk je mjeńši hač abo runja %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Zawěsćće, zo tutón wobłuk je wjetši hač abo runja %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdc76fc42252d94160cc95ab69d8ebe8b8276992 GIT binary patch literal 2872 zcmc(gJ!~9B6vqb$5H5Tsd5)8AVGtuC;}Y~5)}m!|Jge`K0`hLAx7H$?asb=^X7f+ z51Ti<&oCaw^%SnlxSq!K#%;J^d;>lKehW^4KZCD=joTU944wg>1kZtwf)~KYz^}l^ z!Jj}5{toU0x81?m=ipKBGw@gN8Sujmj17U8z(>FzK@R=~R>7@zGPV~y1il2m3%&_k zE`ZzdzU6Mlromm{3GfW)?f4$_>wf{C1-EWw>^X2BxD9NAFM{uZL*N(S2jF+$IZ)rz zliOHf>}9;a0B!{ZxC49#48Tvoaqw$!7~HgpF__1Ia@>VGTu_et`h@A_cmVeYalsV> z117UAxS*2V-~R%$%2>fIrT^~*AL@UDsf-;oxeB>9jw>TVest#e6c2?HHFj9rJR|O6 z;c%0dXF^BB@z6ABOOYeh;Za7yQRbyIHyNk5bD_91{P`gzQ|aDX6e_2xy+w73ti2^& z<(_TBb)L>qR;pi_!j3ZZXP~;1DP8B=Urd*#4$QY>qv+Zm6S|cQrG5M#0E^P9L8DRD(Qa&e7K8|#qPGbfI5I^{@PMAxzz1CfL}mc#wT zQ)w;sY2a*rvf3BOb)rpMuMuozW>JO|u92MeJ35g$Z?E6JS6F3U`5d8BO@gKV3+Zq` zsK)%_GEx2f)zcr9`&aGN(;xfF^vgy6;JzIF(Q%^8EKt)06JhW=iUsFs@NfauY$_+I zWil5`+DL}MfjqLotZDGd^zq;%ElMvM9P;VP$416Rf{|Up=olUwBcnS)#Zqcqjjfw6mb1lTS$D|t zuvl_AWa=`!a`u)aZ=?;1;kShTtf=RaH5S3mDQR+=l3oXfvFBZ}lxdNm@RahEtR-PP zj(DVV@L$=H1DS9HB&9DuT{%Y?paujLy0L)ZKo>5B@$*A?gi1ws7@8xYiY2&lUGFV7 zhE;yk|3}w6sRbY3^@b^my|4bBVK-GaQ?}Wl*KNxV3*R7hTGT}X!wGYw?3J^<02CJ! zA1sPG^C&2Rw6}=aC6Nq9thk&Ebl(Jj!EAwSx2&jyO%=;=StLoWnwH1XzjS4?rnRn$ zNSmTfJ7fayNh9J3b;-Fk(#VfBm8WO{b%!5#>9N%c94JpDKMGVA%jl~6hq_h1qu+mb Xlq(aFi3CO?MRao*eH!K6Yr%g2&^wq+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..11ca2c034 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,109 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Akos Zsolt Hochrein , 2018 +# András Veres-Szentkirályi, 2016 +# Dóra Szendrei , 2017 +# Istvan Farkas , 2019 +# János R, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL kiterjesztések" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "A tömb %(nth)s-ik eleme érvénytelen:" + +msgid "Nested arrays must have the same length." +msgstr "A belső tömböknek egyforma hosszúaknak kell lenniük." + +msgid "Map of strings to strings/nulls" +msgstr "String-string/null leképezés" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "A(z) \"%(key)s\" nem karakterlánc, vagy null." + +msgid "Could not load JSON data." +msgstr "JSON adat betöltése sikertelen." + +msgid "Input must be a JSON dictionary." +msgstr "A bemenetnek JSON szótárnak kell lennie." + +msgid "Enter two valid values." +msgstr "Adjon meg két érvényes értéket." + +msgid "The start of the range must not exceed the end of the range." +msgstr "A tartomány eleje nem lehet nagyobb a tartomány végénél." + +msgid "Enter two whole numbers." +msgstr "Adjon meg két egész számot." + +msgid "Enter two numbers." +msgstr "Adjon meg két számot." + +msgid "Enter two valid date/times." +msgstr "Adjon meg két érvényes dátumot/időt." + +msgid "Enter two valid dates." +msgstr "Adjon meg két érvényes dátumot." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." +msgstr[1] "" +"A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." +msgstr[1] "" +"A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Néhány kulcs hiányzik: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Néhány ismeretlen kulcs érkezett: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bizonyosodjon meg róla, hogy a tartomány egésze kevesebb mint " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bizonyosodjon meg róla, hogy a tartomány egésze nagyobb mint %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe0d7ab56055469206127de5a15ae9cb742862da GIT binary patch literal 3234 zcmeHIO>Y}T7#^TdFrTW#M+HLD11J$)+XJaA0`cLFQG5#SfVH-WzccL0-jGxjuaKky0QNg(NK;8Va) zfpfqb@B(n;9>#ire*hl`KD&)E4txpN3p@eb2Yes+4t(4I?!o_^_c2xl9s`~OHi6Fr zPi|-Ibzl|v3h)=;AaMKrjJ*gP0=^A96`%_=4=^@?{XGvdwhQ`Qht8|v%ukp z7=yUIs5Xz_Mkwr2-1p*!dzQeBv=~gTT~K34jUf#7aBCMPyDo&n*g;teJRVBT1L=DF zjj^L6+;g>?WJ94UMS|vt#Jpd@%i<;3mNwO$FuIA& zf{YJ5+;Dui66ZhI91%(jkGoOiRunIkP~E&cNt6>@xdp)k5$1G0$wsBpVA|NRBV0^r z5h`DXij7H#oDon(c?B={O8H?fgV<@awyXTnN9{(M%L(f~ z=DH1udP7W&3q(qRiO}m3LUfTlEylHT*mK?j7ZF>Ad#BMXGI3lKWu%>9mGeF4Kq;r3 ztjzGl=uzjmnDj~1c@0F(@cwjv+DX6c^z~zzN%y^w#+5kYD(z$uiwayVqYSree?m<0 z1BhzhtB?qDB{wIWtZ)k%zCS96&_^rw@5}OeYS4?IJ`Fl_H|lsD7##fc^t~Jnu$I=)n`&L(blHIr23jB4;QZm!3V2 zy{CM=7H5X%D~Zvd6uE(ONJa&f;bGDKRfGKlJYEj=gnZW^@9P~%F!Qnb-prUKvuJ)W zE2h>w%gwB*nH#2o=aqP1nN_@6fY=qXw zOQvob-24Q|RWpxggS>Dv1BuJ9Q*B%0uv9bOaXcC@M50%@jcWzVWm4GCF{=5Aso&-x znja$WDkbr6!>HPXSCP<+IgjL!8jN5uPcOJF#0oQ8iT#LrT{EjF5bA-fp+_e&okF!} ziwZbn=Ks5)tu?9M)+ae4haIQ2wKfGgYnimPmh|UTg63IkZ_bjT#Sfc{Ega7J;>K}r zE`n?|%ZmosGY4AC!o~ve6A<&NW>9ldCXRKPt#9CqM|>gOMRPr7BxSb@-A*^m{2%SD z*4FX|MXleV+O`JJZRNw}F`u(-{4Kaeoq-8OUAT;29UHAsh)?TGq|ryCljx1^!N{|- z5X*QVw0U|7g^p$CI={cIsfW=UdyJhh^AXY8T#LJaY@@>QyAC?HyNSGi&DTHF<}+x= z6C_TBCOgGwhjwh2h6{ZO7H9xbt93c)GWY8eUas1Fs4DiXmoYBt_!!I@H2L+eik!ES WGk6K3m;_)(gW{n^hCY_)Z}t}qTJy62 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..7b7fe807d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,109 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL հավելվածներ" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Ներդրված մասսիվները պետք է ունենան նույն երկարությունը" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Չհաջողվեց բեռնել JSON տվյալները" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "Մուտքագրեք երկու վավերական արժեք" + +msgid "The start of the range must not exceed the end of the range." +msgstr "Ինտերվալի սկիզբը չպետք է գերազանցի նրա ավարտը" + +msgid "Enter two whole numbers." +msgstr "Մուտքագրեք երկու ամբողջ թիվ" + +msgid "Enter two numbers." +msgstr "Մուտքագրեք երկու թիվ" + +msgid "Enter two valid date/times." +msgstr "Մուտքագրեք երկու ճիշտ ամսաթվեր/ժամանակ" + +msgid "Enter two valid dates." +msgstr "Մուտքագրեք երկու ճիշտ ամսաթվեր" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " +"%(limit_value)d֊ից ոչ ավելի էլեմենտ" +msgstr[1] "" +"Ցուցակը պարունակում է %(show_value)d էլեմենտները, բայց այն պետք է պարունակի " +"%(limit_value)d֊ից ոչ ավելի էլեմենտ" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " +"%(limit_value)d֊ից ոչ պակաս էլեմենտ" +msgstr[1] "" +"Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " +"%(limit_value)d֊ից ոչ պակաս էլեմենտ" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Որոշ բանալիներ պակասում են՝ %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Տրամադրվել են որոշ անհայտ բանալիներ՝ %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Համոզվեք, որ տիրույթին պատկանող արժեքները փոքր են, կամ հավասար " +"%(limit_value)s֊ի" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Համոզվեք, որ տիրույթին պատկանող արժեքները մեծ են, կամ հավասար " +"%(limit_value)s֊ի" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e26e0b38a3807fd2e05a48d7f55668677a1714b3 GIT binary patch literal 582 zcmYL`&u-H|5XP5(7ax(}#9_FlLTft_NY#cQQAnjo34{{3!X%#BTiLtO?zm}Rq4(Z- zGM+au~IK3 z6_TZ$jt`M`sxK6oD!>r%Izrb+h6XPQxFLwx5wzrLZgREsk?TO;zs-TJm|V2pMYRn6 zf;OyYmHtT~^$b)O=xU#x(bfmni&)!ApY(OqD{mlMe${7mY163wj7$bb<*3xf;%QwC&_TuhS`+r4Yu{g>Wv&HoAjA348pS&z}qT_liLRlVOY+JN$44Vc+B%b_O zo$BMmT>92I1wC~eUx^k2$7{Af=);b55h2ZCU#;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..68829ff40 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,98 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Arrays annidate debe haber le mesme longitude." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8f6c669bf028e4446fee0c0ae9fba5224dfcf1a GIT binary patch literal 2733 zcmcJRNpBoQ6vqn)O9sLc_B9UyQY^b?#%4)0i4k!Y$-#C^G6@%?sAjr6UFq(srmM>1 zIT0>=03;3|I3XdvKrRT0FTeo~=guU@@+ThEUN z_kF}L9>MhtuCH-Di|d`+aKrcxd=mT~Tmydv-vm3iGj%820jjc3qAq< z3=;S!I14^^2V-A?XTdMP-@!xRC;J#X41NVZ3jPEV_y;%xK6NK!$H7zJ%i#Oq+py&t z=$~2GZ?1gh{6m!d)?6fkj6l4=_ag&Bh zt_Fhe(ARm92`jP@4NAeSD7};-U6Od$@ryg>^an= zT;3C9P`~{OJIdIfLA0#Q#V&Jy^E#M1^?sP>OpNzfR)w>aJ7cLQh}X`NeJi!%<*3P) zt;lh5Ws@00QsE>JD@#727$$iq2jgH`hpkAc>1$=VR0fMoqKCD&VvV~}Oclh0Z~FWeWOyzp6KY_SCR^9WBCRjHwL)Uc3S|&o!!Bruq+(Y9JSEg*esM@t z|Nh3+Ps9E*=El{}d}aFOygs-uM}KsjsMJ?P-$u)EbP2_R^K>Y_f@;={^Py3#^>p&hkfjpi5d*lEwtwlNwj+}NlK`%T8JE;|&S z<%ZazC75#jbx5dz;{y?O14hWis~5k6J8o&7cX|tL`TPRey&lp?=rjd7WG-?C_|_Tv z0=y32$P@?d@np!!`#a?hzon97L?M(*)QBVRdNRSnQW6$BpNyPhBqKzpD;&LPuS!#x zuLgV7y2_19y{WO|)N?$cp7d_#s>#CKksWr5Z=moH zEPuAxslkrE+w;oi5S_4(kIq=M);HF}Vj-J&0cO*QsCY%q}zx9DFNxv<3Et z>(FfKr_kxxiSWVkUqy}_pvq%N&%)t6k_xVTDpvmYxrR@3iq?qwqjBqFO9C2@*_1lf zmz0Ejm}p`<=0mV6hsQES&@+i|9#r@Wm{@jVh`$HpQmBlp*5x9c9957ei0DnBCR+;$ X6OKIH@p{hZlo26iYHx%Zs`}nvRMABc literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..a05951076 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,109 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015-2018 +# M Asep Indrayana , 2015 +# oon arfiandwi , 2016 +# rodin , 2016 +# sage , 2019 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "Ekstensi PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Butir %(nth)s dalam larik tidak tervalidasi:" + +msgid "Nested arrays must have the same length." +msgstr "Array bersaran harus mempunyai panjang yang sama." + +msgid "Map of strings to strings/nulls" +msgstr "Pemetaan dari string ke string/null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Nilai dari “%(key)s” bukan sebuah string atau null." + +msgid "Could not load JSON data." +msgstr "Tidak dapat memuat data JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Masukan harus kamus JSON." + +msgid "Enter two valid values." +msgstr "Masukkan dua nilai yang valid." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Awal jangkauan harus tidak melebihi akhir jangkauan." + +msgid "Enter two whole numbers." +msgstr "Masukkan dua buah bilangan bulat." + +msgid "Enter two numbers." +msgstr "Masukkan dua buah bilangan." + +msgid "Enter two valid date/times." +msgstr "Masukan dua buah tanggal/waktu." + +msgid "Enter two valid dates." +msgstr "Masukan dua buah tanggal yang benar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Daftar mengandung %(show_value)d butir, seharusnya mengandung tidak lebih " +"dari %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Daftar mengandung%(show_value)d butir, seharusnya mengandung tidak kurang " +"dari %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Beberapa kunci hilang: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Beberapa kunci yang tidak dikenali diberikan: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Pastikan bahwa jangkauan ini sepenuhnya kurang dari atau sama dengan " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Pastikan bahwa jangkauan ini sepenuhnya lebih dari atau sama dengan " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f6a21e2e640996cfc715d86feb01f97a17c6a87 GIT binary patch literal 2931 zcmcJR&yN&E6vs=!U*m67{H;%nx+C=bSYyP2^#Fn{?gFxlC!(pHuIa9w>gutpdWMOZ z;Kl#Ig9c5w5IK-+B&-QBUizv={{au^#c(t+@nGV&s%O|;U}Y0SC*7awsyDA*yw< z7<(P_AA`=mZ$am$AHkQw%b+{o*1H*NfO|lg#{hrbjwf8;uX{&?>HfMO&j)bB6>Bb- z&K|-I)$G2}3e57cf?K@*?*Shit-(~r_NKWCNvD=n%0oIZcjzF6-0~XRr%j#-vN5-K zNJAOdksu7(Y0^`|3N@rC6Wof-Noh(m5+CMVkxl7^2_+M0Kj?Fni>le6Iwg$RkS@RH zASInA3nKIC$5Yr*hVBfaZe=3YS-Z}(H+9YYAWoH7*<)Jwa!W~WEG-D)BWKCBm8s_0 zu*RmXNN{p(APBf;wU__V-#JhqW8)G&e)(Iy#fI%pQGJF8m)m|3l|2?@`(zV>78EBvCpZ)^)Cw zVF!h=A}qsU${@zP@A6xa;fWw6bY$ZiJDeJew4Qr+hQx6zv_W(Yn@b_m6+=UCzo0}K zgMC^!o13hT1ajTg=|Ha%>}6?Rh9X=gIq!C~JhRSTw|!YyKCfJkh~sSmOWlgl;ToYD zb3gWp>gF$-!%6J_b5Xxm^q4BkVr;5;n~7g5b=<%sB| znGI%5B*S1&9+_Z1ZBga$q2P$C%-Z8&r~FfVx0qUp9!T!*qv6S1|uR=qwL3~JVCaKEadwbV<~ z#(=n2P?x4&t;|l(?prxTv(~8WMF|NFD~3IoX%Vt|PobuEQ9I_D5q9e6{Qh9)ik#c4 zBeGzhZl|G-;m!qVuNc~bA1jAdo^ciIPqW0dNca4!nVQ^1<#1{OSxwCbJvT*7I&p%^ z*9J}Dy;``Djsu?#oV z*tIK>R3XpMawE7~!=-pBPNS&s;V8}}_?B$wH`jW$iUwZ`5qC&wMTI7bRynIkxa9$TDu+vi!?t6lhT%UHO% zs~fgczXRn;NpZT2yO-r~40T-eq+7gh!@jX%dDAqnt5^wnlT2P;^K7x)>*dyZ67fr>YD9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..a1ccb7c9a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Thordur Sigurdsson , 2016-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL viðbætur" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Hlutur %(nth)s í listanum er ógildur:" + +msgid "Nested arrays must have the same length." +msgstr "Faldaðir (nested) listar verða að vera af sömu lengd." + +msgid "Map of strings to strings/nulls" +msgstr "Möppun strengja í strengi/null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Gildið á \"%(key)s\" er ekki strengur eða null." + +msgid "Could not load JSON data." +msgstr "Gat ekki hlaðið inn JSON gögnum." + +msgid "Input must be a JSON dictionary." +msgstr "Inntak verður að vera JSON hlutur (dictionary)." + +msgid "Enter two valid values." +msgstr "Sláðu inn tvö gild gildi." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Upphaf bils má ekki ná yfir endalok bils." + +msgid "Enter two whole numbers." +msgstr "Sláðu inn tvær heilar tölur." + +msgid "Enter two numbers." +msgstr "Sláðu inn tvær tölur." + +msgid "Enter two valid date/times." +msgstr "Sláðu inn tvær gildar dagsetningar ásamt tíma." + +msgid "Enter two valid dates." +msgstr "Sláðu inn tvær gildar dagsetningar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listinn inniheldur %(show_value)d hlut, en má ekki innihalda fleiri en " +"%(limit_value)d." +msgstr[1] "" +"Listinn inniheldur %(show_value)d hluti, en má ekki innihalda fleiri en " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listinn inniheldur %(show_value)d hlut, en má ekki innihalda færri en " +"%(limit_value)d." +msgstr[1] "" +"Listinn inniheldur %(show_value)d hluti, en má ekki innihalda færri en " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Þessa lykla vantar: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Þessir óþekktu lyklar fundust: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að þetta bil sé minna eða jafnt og %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Gakktu úr skugga um að þetta bil sé stærra eða jafnt og %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65177e1bc1a99accfdcb31f8330bd49d22b667ce GIT binary patch literal 2978 zcmcJR&yN&E6vs_&oRv z$ictBZQ#cH7`qG}1-}6Q0AB?^UB}o2_zn0B_%q1CKfxyW;{A;60}p~b!4E+TU#@~1 z@jS7fu~Xm?a2C7-20OolTfp@X!UmXtVV!T+BycO9KLU4yUxHV_>)==5#fKQ%1kN-V z+XWgh#N%`DHSjy|b?{d(#D_o3*d%B`xW|BaJb)`g5RXS|!u5DOj_VUR5sDQDTxU<= zglYCz{RVEuy+T-G{2u|Itlz;^#txWLWn3H2l@S>~I(z&W&x98(c1XL@688h)agmN& zp>yK6Nlh_S-EQLodyZ<#e_bihIMiOek4M|G|P#B{kg|%_(wjO}65kBg1uB z%#)4g$4!_~W?>D~_OhVcyt_qnbah4hXkZjA&C%1t((|Hpp3f5(b+BaWrP0DJwphq9CqF=YG&)Cyet*>)CgwIi2&Q9d_5TS%WTTXwh+mpLiji!#rKA zEi^Xk4y8V$%}6inIJ9O#W|S@KITvR1!usHEn7%5km{%c3=v+$hG`u05t?1NZVQ@^; z(0={GXL0_fyMEzPsLU{2)C&*g7?zF|S#z3FpY*ciJroPp)8*M|RI_QEq@l4snQ^(y zlDEp-C3B|B8z+t@Cuu>3uF1iWu6(jH*-1LPlgXXDv!}bOv#o=pF)f@==HS0m!W-M= zGt#DpAF)y?!}k^8sg=j4B7ZY4gj6l4#~T=^^HSuL%#kR%yysE0P>_j%_rq?xJsOQ# zKA4q#Iu}N?D}TpO_3*az?Pg=9H*;udWjk7(#sSn7X}GpHgzp~v*d8hr+FqUxgmvVn zPR$)o_AK=abM?t4hjePPxUqZYrN7~37q!?pp-L-Ma@g3yb-5nKM>jROmsht_6Pj)N=a{8Y(KImg*CiLv7u*6B&UI5K*O-P2%VFndW<%Z zZz9iSC@8~A1P-bsR+SZm>z`Yd`ffIR+L4tml{_n>6yga&x1tp;8;cJ3Y_yFPmB`)H zD=2dHif&^disMb=An};9iUwXzZQMCbMMb1d6 zt(6{YqxrSVp$rjssB4@W_t0g*6{J~2&6T8SwKkhPC-2R66dR^B3zp{bH3$lg&KCVK zDK=fM+MghMYcnmkbGoHrp`z)VWq)mU@8I%KUiA`kMmy}dL0yzV9dCRE zdMc!NC@QIuk)cpy)-5aTkT%2e+Ldwgx)NT-+Qy$#J-9D5hN4Vvv>-~GYpvfLGY{EY O>T$dTbRlRxq~&jpou7#S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..05871c743 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,116 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 0d21a39e384d88c2313b89b5042c04cb, 2017 +# Flavio Curella , 2016 +# Mirco Grillo , 2018,2020 +# palmux , 2015 +# Mattia Procopio , 2015 +# Stefano Brentegani , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-07-23 08:40+0000\n" +"Last-Translator: Mirco Grillo \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Estensioni per PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "L'elemento %(nth)s dell'array non è stato convalidato:" + +msgid "Nested arrays must have the same length." +msgstr "Gli array annidati devono avere la stessa lunghezza." + +msgid "Map of strings to strings/nulls" +msgstr "Mappa di stringhe a stringhe/null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Il valore di \"%(key)s\" non è una stringa o nullo." + +msgid "Could not load JSON data." +msgstr "Caricamento dati JSON fallito." + +msgid "Input must be a JSON dictionary." +msgstr "L'input deve essere un dizionario JSON." + +msgid "Enter two valid values." +msgstr "Inserisci due valori validi." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Il valore iniziale dell'intervallo non può essere superiore al valore finale." + +msgid "Enter two whole numbers." +msgstr "Inserisci due numeri interi." + +msgid "Enter two numbers." +msgstr "Inserisci due numeri." + +msgid "Enter two valid date/times." +msgstr "Inserisci due valori data/ora validi." + +msgid "Enter two valid dates." +msgstr "Inserisci due date valide." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d oggetto, non dovrebbe contenerne più di " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementi, e dovrebbe contenerne al massimo " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d oggetto, non dovrebbe contenerne meno di " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d oggetti, e dovrebbe contenerne almeno " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Alcune chiavi risultano mancanti: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Sono state fornite alcune chiavi sconosciute: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Assicurati che questo intervallo sia interamente minore o uguale a " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Assicurati che questo intervallo sia interamente maggiore o uguale a " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1743cc7d48a0eaae764451cb39aeca08ea52de61 GIT binary patch literal 3027 zcmc(gOKclO7{>=FFPB%#``NjG8kM!30HSgm4t+sNlD-lS2nlVy6MNJ3uGtyK$pMtL zo3=CwEmV1wl(v+#jRI*ZM4+@G6?YCiu82b?b`x>zi31YLV3GthD~^%zpFD zf4;~1kL64H2(CwPKZAP`_p`X)xeY(Keg>Zee*qi8KfyP_*zJTY2ls$agNMP#zzOhi z@F(yIa2llG-{30nxjP6M0XKuEz$@Si@Y5xPtOU=4kAf1U;9p=B_|%<*tOYlKFM%G| z3@sC2HO5QtCgg3fHsBzr_PYYsfGh4Pjkkl!{)1qA7JM1w-@*0ZvU>@6A8Zcz8~6go z+d_oA0k(q=fj@$;g1-g~EiJuY2fmK^ZV>Va;9qy)7a{Pk`vXF{e?5p_E{Yz@#B9VxGZ=FsW^m_u?%WEf?AGl(9JuxG*UwsdYEjqdB$Z_Bz1uw zlT%l>6O7^^?xfNd6U^$M376@Dxys6>j!W5l8Qr47q0g_h%#rgwB+R0qseR&Eynua<9iwHBtuJi61)4tS-`E1g$*!&)Kb~+P@(bJGRhGn`04AI@usv z1~uX6Mf_6Cs{90Ya6wyGwjA%u7#rc6`{e(H)9d(5Ii>2cud0QAqw@wn8}u}FS|}H; zX(v!bPWdrnXDo}8M#cp*O6lOGBqsGXRo{$qJ;kWS?1V^$$ySF8l=Y5n^^~;>W^-hh zlN}CBcCijl5q?HfCg<2EhO?>3s=y#)@3Nh&y}&T-I&G%Gj0KiWYDb~FLg`i8mm15j zD^(+`Jg#xYp#vXlUyeZ98i-m8rHtl`E}@)Mm!Zwz+AOwtC)9?bX6uZKEA`3_pddcbZ~OXN;9=p7f@qHzae1q<30+1JXMtJ99*O z7@xU3zPm8=we)%lXL<@saPn@3_?e*QAlHLL7 z9hY98^mgB>Yj}jHMZ2z%-Y{er`_2|RhascTb+WL3=-M*MwgV@pFAPSChjX+2hi+xb z;%rMgieq2+A`UD@P~SJue-rO2p)*rQi$mus4M(N-vCQ>I@2vDjWe%AsCl@)L?dmP; z8z}7QLWpGUgv<@g{2rMax1|E?R!dNrxev>${PI*)`M>U7?B81$8$bx9 zH!}AeX>6{qSEtS&mHE8P4?tvZIYg?PN>N9w3I~yw!P&m={8m6v@b-rJn*X{NyFV{X zPM|4w`^|(JF9mu`b+p%0{Ob73!5_+H4jUEd1z+*2)=i)5Ee?L<7f9g1Z?RIbEL>M^ z|1-1w-G$TGavZ6fo4h=MzC56c3?GzlQB, 2015-2018 +# Takuya N , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL拡張" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "配列内のアイテム %(nth)s は検証できませんでした:" + +msgid "Nested arrays must have the same length." +msgstr "ネストした配列は同じ長さにしなければなりません。" + +msgid "Map of strings to strings/nulls" +msgstr "文字列と文字列/NULLのマップ" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "“%(key)s” の値は文字列または NULL ではありません。" + +msgid "Could not load JSON data." +msgstr "JSONデータを読み込めませんでした。" + +msgid "Input must be a JSON dictionary." +msgstr "JSON辞書を入力しなければなりません。" + +msgid "Enter two valid values." +msgstr "2つの値を正しく入力してください。" + +msgid "The start of the range must not exceed the end of the range." +msgstr "範囲の開始は、範囲の終わりを超えてはなりません。" + +msgid "Enter two whole numbers." +msgstr "2つの整数を入力してください。" + +msgid "Enter two numbers." +msgstr "2つの数値を入力してください。" + +msgid "Enter two valid date/times." +msgstr "2つの日付/時間を入力してください。" + +msgid "Enter two valid dates." +msgstr "2つの日付を入力してください。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" +"含められません。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" +"含められません。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "いくつかのキーが欠落しています: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "いくつかの不明なキーがあります: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "この範囲が完全に%(limit_value)s以下であることを確認してください。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "この範囲が完全に%(limit_value)s以上であることを確認してください。" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..510f545e607d759308f840c4987b1349256db1d7 GIT binary patch literal 713 zcma)3J#P~+7&cIr8yG4fF))~|74qFB5~w&0Lm`DojR++$AQm@qFV|k|!*)oS%@2Tz zsu55LBqR_63;zen|AgnRl&~Q2N{^rS-p|M9pUX=}1hxcR1=fL!z%!t-5?BVF16P1o zz-8bBczTYIAK+WSrSpVz!S}&8!G~a^38=Pe{)NixC?^edGfmZWvLlU+{|e2oB-{?I#bgVmKPtcDTr=vZgG97KpQX9v5Hp@qBW13ku(40p7 z2W(ru$g5IzS2)ROGi|0Uy}=qyxIArKPhruPu#OFkP___G8%}FK-<1b+Lp!>D8x<;> zicGSB6cbMGNo}%RD7rFsuH;EFo6TZZ4XB#pp`IkC%Fd|x-Jk4>WHst_d!5A{8gUxk z(fB2T|$EJUtabT}5qO4oio*ko&qx@y<1G_0eBdX%e-)3u%4{n5$kzKHt8 z)QEy@YBRB%s, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-ის გაფართოებები" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "შეიყვანეთ ორი მთელი რიცხვი." + +msgid "Enter two numbers." +msgstr "შეიყვანეთ ორი რიცხვი." + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..22c521ba818b965b45badd39d7054697d5d4e2f5 GIT binary patch literal 665 zcmYjOO>Yx15H(+yJtA@AFmP&xoZUnqRU5*g&`K2vgc1-(Oycftv#}%FNm|6AG#5lp z2$4%KNc{t?)CkcMeuJGK!2jUJIDwXtp5B|;H{%)Yuj^O85R5B`n~1xJYltes$7{qA zf+21oJ|bRSBIGObJH&6)w~_mo2|-Da&cn|nPq;R`1xzWntD)1=22$4NU{Vg6bvWc) zBqlA8y3{67{Q0vg@Eya2&ZN+!uH-gv8oJS)n1}$ zL&gx)pVCd<&%BjBVur_1ib@fU?$KfiWgHdnL>NJpX+s-|37s<|RSa{TZSfsgl?LuV zK!-?rEa9}lSto|a>@91ju#_6pjl*y-7!-_e_br8{?1YQG{!#w7J8ZYZ<)F4vTf4ZR zScrm$Qs9-i!fqFLGYO&`g=q+*DpP*6GTH&%d?B6%Y ZuybNh|NqzX^6b!C-M$;zGjDQZ@(1I>`NaSL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..f5deca281 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,97 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL кеңейтулері" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Бір-бірін ішіне салынған ауқымдардың ұзындықтары бірдей болу керек" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d9074656aa7bef7775ccc9a5acfdd8efcb5354e2 GIT binary patch literal 2897 zcmcJP*>4*~9LEPJN6lRdg#u+%si;xwBSA>5dpz`#(l%{r0#8WQHaoGmS?`+Naojv0 zCBdnzB#4B@jZ@jd5>C^WR5CQFEC~Mr5A+`ZspZKte(DnsAilG#A^q~IUm4sgp8gj@xWf>*$M;5*>ub%bmOzXx9h?}8Nk9c%(OKS{`5@DTVO*blZt z%RCsw`}(H|ISuZva|GOi_g_I}|0lQ;YValH`T@AIS4+g|vA2e-2c7)PO`n4%!J*rS$JkQ9N|ovAD@NGka;oVH#(Sva+b{Q1(eeGby*}w(X`7Gx(Vv%}lT+ca6)L z%yrkamgh5RQ!5cW%N%d{#wU0*bQJ>&awEnb^6vqkJ*g|cC!@B>mVC5Y@dT%_gv;q! zMzwmfj81OYmge*ZNGoSCL~ikDlS>T?k-*Gxv|g%1l1j2C4${KpxPfIlZHsG$ zwUhO1>D0hNJ8`G@s_Ij>!xFTMB^&u(nPWZh_iMWU$D$8eGiKMi$6D13|3>E{)@;+_ z)b64#cML0nCbAokK`UXJE;+$m&h%P2+*%Q%T94{)MqMq&sL8Adj|Rvo+vRBM_79Fz zcAhiKMRi@$Zo{OT^|}=4XEbKGF8qWMoBG&PH%M6BmYuYg8O9yE$IzL+%(6py z$2z&cRrh~{&4PHsR6mE^Z2L~Lxb1L%n;S87|A9or^>^4|>N|DPf133e%G7^IwJU82 zwS@ek_x;T+cnpV{cZ4u}$2FJxJD}e+HEug$>OC7>>^waHDSP+B!iprc2=jL^Ef%K7 z&=fc+wnsUShl9anG8y1%x|$Nexe~1DYQU_|4tCqYCSO}?+u@}Mngb!s|qOoi+HP$}sJ=eW%QXqnZ9A zwi9#1)QWqr?!M+dwD!0!w8uxhgHn86lKHu6swActsJN9DU(L#FQO@*Has7wtrL-KH z7sF{WTnrHT^@6-KCudSrd^aw0sYgB7|Os;PArOc=9m*J@_WMn$~V2_?`B(8Qq%Yj*0 zNTE(D|Ct3bGeWDGYmK^yQb|tCQJG203B*2?7DMCse?wfqMw{zLxvEtobd(S;nW4qf zhKaZ`D~F2Jp|YB~>L8aH<+(bT6Bmmrmg*O?)eHj6ifg5vs~SM3O5|t#i$+TB3a$T@ zBQI@p>B`N8YGzKRa*G}dsD75pi3^M21&Ej}qaTnYrGN3oJ5^yhO2tgEni(S^Ra99R z85EjS;$px&a3$oOOpe1+4S1}lzHR<8*OULi=scj qxH-`*_vL77{TSY=rd3L4TPSVhjf(83QXo>Jh#bw662p^?{`(8Q1cgli literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..b2ad1dab1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# hoseung2 , 2017 +# Gihun Ham , 2018 +# JunGu Kang , 2015 +# Kwangho Kim , 2019 +# 조민권 , 2016 +# minsung kang, 2015 +# Subin Choi , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 확장" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "배열 안에 있는 항목 1%(nth)s가 올바르지 않습니다:" + +msgid "Nested arrays must have the same length." +msgstr "네스팅된 배열은 반드시 같은 길이를 가져야 합니다." + +msgid "Map of strings to strings/nulls" +msgstr "문자열을 문자열/null 에 매핑" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "\"%(key)s\"의 값은 문자열 또는 널이 아닙니다." + +msgid "Could not load JSON data." +msgstr "JSON 데이터를 불러오지 못했습니다." + +msgid "Input must be a JSON dictionary." +msgstr "입력은 JSON 사전이어야만 합니다." + +msgid "Enter two valid values." +msgstr "유효한 두 값을 입력하세요." + +msgid "The start of the range must not exceed the end of the range." +msgstr "범위의 시작은 끝보다 클 수 없습니다." + +msgid "Enter two whole numbers." +msgstr "두 정수를 입력하세요." + +msgid "Enter two numbers." +msgstr "두 숫자를 입력하세요." + +msgid "Enter two valid date/times." +msgstr "올바른 날짜/시각 두 개를 입력하세요." + +msgid "Enter two valid dates." +msgstr "올바른 날짜 두 개를 입력하세요." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"리스트는 %(show_value)d 아이템들을 포함하며, %(limit_value)d를 초과해서 포함" +"할 수 없습니다." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"리스트는 %(show_value)d 아이템들을 포함하며, %(limit_value)d 이상 포함해야 합" +"니다." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "일부 키가 누락되어있습니다: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "일부 알 수 없는 키가 제공되었습니다. : %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "주어진 범위가 %(limit_value)s 보다 작거나 같은지 확인하십시오." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "주어진 범위가 %(limit_value)s 보다 크거나 같은지 확인하십시오." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a0edffdef284bda5f0063b758daa599e3b523d39 GIT binary patch literal 3101 zcmcgtOKclO7#?VO)V$04*^vOLR=c*_LRFl$Ao?P0(pOSW1+>Xd>}}S&W@k38drDG? zMhaC=9H`(@B%r4xYE9B4ZLS7E>u-44CJM+)~fB$Rz zbw*RTZxdQd>({cd>q*xR{?*0z2{b3_0f>+MItNj zQk^HHyenPCW-Z`;ROu6;QQusGMb{x8L|(ZSafiLzEE}qA>$P&=iI$B{zZxlCiKOCv zg4=1Z+=$54JHmI`gmR1yn?j}a8^d21`&oHo_)F?cI&P5S#llg-KZq3-k``chYwjt#gI#))@~|SzPYfuU=`l9HgDmD zt;NFD4Fx=zE?X+A7yPAXs~{}$o}eC`>Jx+fP#74DA}`|GWxBlSt*yDi(mSP!?Rq&} zBRiqNFGY4qSiQoo6#0RASgN1m>&r@2i}`%5R?8_;?+%EQbReJbZi1Jd&JWh}*-Uq5 z_nwxAn{tKBF7%i1L9t$i4+{CrS3NXb2k$T2p%iMzvEIGbww4^(8W5qi$L|juli+QA zuDZ#x$Or40!(J5Hp0zg!E3(M_s`->VHg)jibw{Bi!^}mhr*tD8)-!re&%|SThU@PZ zC-iJQdi^4nrZ8W@lAer5Y2=vxMmO{<2F~d@+PbD^xxS3AOBh$_ZCN)-9-lQwXmbW) zGx{orKInl(V}0=}EKc8|z5Vu(WM&d)!DLJ?!0@$rBtCs-W#=I<#^Vulhz!QVFmWM1 zjo+}I+Jk5pi6>-qhkmJW4ii&v7NvZ&5xvZ+E_iC%K|(=s}zK}n#Z(R0@?Qu%;Dd^SFtriI$& z40Mi@R%8hYM}m^S1nS=gF*6O-Skmdsb(nU?*%>M;%3f3HnM7?%CBDH3ej8rPE(~)6 zpa7B}gAmGjJjs3974ewq462A$kGDl2{Xap8roEO_I<@)2%|bSwnHbU)kXCn&{SAoZ BCF%eG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..72c0a485c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,100 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-23 06:06+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL кеңейтүүлөрү" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s нерсеси тизмекте туураланган эмес:" + +msgid "Nested arrays must have the same length." +msgstr "Кийишилген тизмектер окшош узундукта болуш керек." + +msgid "Map of strings to strings/nulls" +msgstr "сап -> сап\\боштук сөздүгү" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "%(key)sмааниси сап эмес же бош эмес." + +msgid "Could not load JSON data." +msgstr "JSON берилиши жүктөлбөй жатат." + +msgid "Input must be a JSON dictionary." +msgstr "Терүү JSON сөздүгү болуусу керек." + +msgid "Enter two valid values." +msgstr "Туура кош маани тер." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Чекебелдин башталышы бүтүшүн ашпоосу керек." + +msgid "Enter two whole numbers." +msgstr "Туура кош бүтүн сан тер." + +msgid "Enter two numbers." +msgstr "Кош сан тер." + +msgid "Enter two valid date/times." +msgstr "Туура кош күн\\убак тер." + +msgid "Enter two valid dates." +msgstr "Туура кош күн тер." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Тизме %(show_value)dнерсе камтыйт, бирок ал %(limit_value)dнерседен ашык " +"камтыбашы керек. " + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Тизме %(show_value)dнерсе камтыйт, бирок ал %(limit_value)dнерседен аз " +"камтыбашы керек. " + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Кээ бир ачкытарга %(keys)s жетишпе жатат" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Кээ бир белгисиз ачкычтар %(keys)s тейлейт" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Чекебел %(limit_value)s дан ашпоосун текшериңиз." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Чекебел жок дегенде %(limit_value)s экендигин текшериңиз." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0bd44f4ff25f7c73a52338291f065b3d9b3edd44 GIT binary patch literal 3452 zcmds(&yN&E6vs;he~gNX@wdi@5wZjJ{8%A@-W^b2H(A*QWLIy-)K1sV6y06bbXCtV zhQt#GO^hc)JQ)reBMBbXn`WbC=HOXxCK}_(1OJ2H>gi>6HX@rCNVJmfPj%I+_g+=K zdey(~+Ws*^c?{2Uc)rH-Jf8Wx@Iv_xd>Z^7JO%y&o&@)8V{8}L0iOlm2cG~x1D^!H z1)lMp4Cv-_6m;@$gU;T2;EUj=;6CsN@GA6P2Uo#QN{qdR z_Js!-I}CmVI=_Ad_kh2F2f-Z=G4?7r1!5R`0FNv8;K7vhg08&4<-9zM_ak^P^|1oi z^L>D6wzKGgJ9)t}R5ZXts^nAF{hHuQk)q}%Yt~ZSh8uQRy^%h z*qjwHX0B|zY)C511Y&8*dlbMWx5&A3aLs4)5^9=SSuT~qAk)^}VzmO2Q1mk1gjTmd zg&b7Sis-Jd_xKtIm0RmHw?pYobjErZJ!(@d{2M?2LFWQbNUxBwsZ=clkzTJ>RTf2t zof5{1V7MJ-xQT7vaq%t4@K{hJRLiz2?2I-RVZHdqJc$cdD1+TKY*9lb6g@*&enGJ` z26lYR%{7(_flP%;chv^LB-I@mh+u={lCx-eYMsB%{P1Aqapht}Txbe->Ux9<#)RNq zs?Uk0_2vTaEd)M%^C>uolc`H*MWR#dEtr-Jykl9*cuU%+(wWoVS<#VB)H~rqk0xuA zHLrHit52fp*XsLgD5ZIBthWSTOvJ5Deah={MO>g`@M`)9BvdQoE#WN*9{V&eZ9C&i z;^a@Xtxf!DwcG7htW)8JRgfpDL*LdB6&k9Mt(Hp*a|<)0S=1}F(s7&zq2NX@fu9!Z zUriz$kSS`md1{1hyty>%9U93wTPq^ixL`Gy=?miC6HK1H^4CdyJCd9yl=jZZ4c zKTYGn6b-A534|!sYt(2^o%Zgf;=4visD79(UZi1vji#wyFVj(~k-siPM;bKg1{FG{ z8;8qV(ou(wd<^YwK;coE^y!uIR0)Ba@J=t(lnvIxlxJ2Ji6%n`s=;c7^{*LeWhhmM zJV7DSb|87e-$fQO)JwU`Ho_=mYMw50ih8ZgWtdF~`IcH@K3Lm|nvO8JBSA(c>G^0cn2Mr>1HP^7Q$w!q~*cY z^~D^l>7a+@s<8EREh2&CwS!fHn>{23w~$KY345?62dh3?>|aXx;0k7utJ{>b3kCg4 z6&e%lUv^3{0u_n*XD!Jy8kti&MuXc8MnohWiPhNe7#tV=g7{Ja), 2015-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL plėtiniai" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s elementų masyve yra nevalidžių:" + +msgid "Nested arrays must have the same length." +msgstr "Iterpti vienas į kitą masyvai turi būti vienodo ilgio." + +msgid "Map of strings to strings/nulls" +msgstr "Susietos tekstinės reikšmės su tekstinėmis reikšmėmis/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Nepavyko užkrauti JSON duomenų." + +msgid "Input must be a JSON dictionary." +msgstr "Įvestis turi būti JSON žodynas." + +msgid "Enter two valid values." +msgstr "Įveskite dvi tinkamas reikšmes." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Diapazono pradžia negali būti didesnė už diapazono pabaigą." + +msgid "Enter two whole numbers." +msgstr "Įveskite du sveikus skaičius." + +msgid "Enter two numbers." +msgstr "Įveskite du skaičius." + +msgid "Enter two valid date/times." +msgstr "Įveskite dvi tinkamas datas/laikus." + +msgid "Enter two valid dates." +msgstr "Įveskite dvi tinkamas datas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Sąrašas turi %(show_value)d elementą. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[1] "" +"Sąrašas turi %(show_value)d elementus. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[2] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[3] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Sąrašas turi %(show_value)d elementą. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." +msgstr[1] "" +"Sąrašas turi %(show_value)d elementus. Sąrašas turėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[2] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." +msgstr[3] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Kai kurių reikšmių nėra: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Buvo pateiktos kelios nežinomos reikšmės: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Įsitikinkite kad diapazonas yra mažesnis arba lygus %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Įsitikinkite kad diapazonas yra didesnis arba lygus %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f4f788a0fd8a962a533cf3d4a7c61edfefef6bb6 GIT binary patch literal 3099 zcmcJQJ&+Vd6vtb|uNA-W`};u&+!f4z9DYy>D^&={;T<5i5?N*S?)2^U&P>nR-80Kw zU~vhN*_DBo1SFPK8o8ERr+>Az=p@3`}jD?Pia=hxHo`t|GA@4fkH z$F@%y+LP!nqF+OQ3H^h+@Id<>d=C5pJPrN=z6)0GW^4y|348(k415~A3O)mV2R;k_ z3=;SUxDR~!9>%@`Pk~>8zk;uTpKoJq0{j|$3cLXl_&YcWK7TJ`hrwgu0dNWY7`9vm z-TK$=XY3?c2j2lNgU;@o;9l@gkifkUFt!ssIbsJaA$lHB*!UcJIctn_~gm(_k`t z0v%hkM@C;@R(@A-OYZ;e;NzojFqN^l<0SM+#g@XD`*dpV%xUtuQvye3bBzY)rc+LK#W>VamfqOqxxq3xzS8(v|Po zi%BI>L+D)ncnUj8-eHD4efCOIeP#=*2In~_k{jFsh587wmGxHs~aPZEmu<4Krx z_cM}%3Yr(avA@^)*e~8$r};mW-bQB>52Ht|i-rGU=RfG218y31S(&EBO-4Gddh?;G#jj*-%>nFT}t8#9y zd7-`Isu}zF4IXSryJBXQ!nANUOf(O@6S0m=l~gx>HMIkWXgI7*sNI!vtyZBud&mvT zJ8P8+9icKooOaeQI6@V?OidmtAo5bKv*ivaDZ*^Y&z9{U`U9N>(G*vdoH4hAC4G!hJ zytXon{A+?r+JJ{FkKBesQ6vn!yzX95?lz}!%N1_Di5qEDt{zE^*rFg?+QP$cjpBb} z@_DI)!KH)()M!D;BGOI=DqD_9HVFn-k_eH8R0y(bJi&h^%EKz57S~BMjE6jR$H^M4 z`KNR_3e@0=L>_mN$gsK|^aGCg9ej%n;MRoMa*Lzxto&K(65mw}7yDV?x_lYRDzWIa zVEYZ1t(Fyo%fVKpgpYhhY}2^3;Kl;uLLb2_ThLWxyGDPMU8~uc=Z6(o$O(T}AB74P Q$o*RcvP4FWI7Gt!1^+MVZ~y=R literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..ecfeb0108 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,116 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# NullIsNot0 , 2018 +# NullIsNot0 , 2019 +# peterisb , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL paplašinājums" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Masīva %(nth)s elements nav pareizs:" + +msgid "Nested arrays must have the same length." +msgstr "Iekļauto masīvu garumam jābūt vienādam." + +msgid "Map of strings to strings/nulls" +msgstr "Virkņu karte uz virknēm/tukšumiem" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "\"%(key)s\" vērtība nav teksta rinda vai nulles simbols." + +msgid "Could not load JSON data." +msgstr "Nevarēja ielādēt JSON datus." + +msgid "Input must be a JSON dictionary." +msgstr "Ieejošajiem datiem ir jābūt JSON vārdnīcai." + +msgid "Enter two valid values." +msgstr "Ievadi divas derīgas vērtības." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Diapazona sākums nedrīkst būt liekāks par beigām." + +msgid "Enter two whole numbers." +msgstr "Ievadiet divus veselus skaitļus." + +msgid "Enter two numbers." +msgstr "Ievadiet divus skaitļus." + +msgid "Enter two valid date/times." +msgstr "Ievadiet divus derīgus datumus/laikus." + +msgid "Enter two valid dates." +msgstr "Ievadiet divus korektus datumus." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." +msgstr[1] "" +"Saraksts satur %(show_value)d ierakstu, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." +msgstr[2] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur vismaz " +"%(limit_value)d." +msgstr[1] "" +"Saraksts satur %(show_value)d ierakstu, bet tam jāsatur vismaz " +"%(limit_value)d." +msgstr[2] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur vismaz " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Trūka dažas atslēgas: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Tika norādītas dažas nezināmas atslēgas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Diapazona vērtībai jābūt mazākai vai vienādai ar %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Diapazona vērtībai jābūt lielākai vai vienādai ar %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..30eac663363edfad6e3503e09b5fc0fa8a7db903 GIT binary patch literal 3048 zcmd5-OK%)S5N=3#El)+_5rI(UKx8YPeOMrwbxa_^krHgju^ny*O+4-0iRZCQ_j+v! zDX~{dE?fvgvLL`Ih@)d?la=jk{z9*~bKt<43r8fr>fMdkmQ9QZ5+lugJw4T5ebrT6 z^UI-wUkh9>;eG@64cxEt_%S?i%>xeu7l32HuYex`e+3=_rXLsLb>IiUSAd@YdA$a{ z2K)l}6YwVRN8s22A$ov+0AB{ac~A%fz76aJUH~2kUIu;+ADh4vcz^dvA+7=!fJ;E} zln_S%Rp9%;o4|hHZ@>ZI;irY@15N-BfafysPrO&35#l^>G1ZFqXCT}E4m=C&eO3qs z)Icn=7w^prxFJQni2DiLkRh-{AS?mO2iJ2LAvBgJo^Q{BYTE@VLY#`rfk#oSDTrN< z&Q6{iBhS@tS`0_3oJi6|SL5L;O5CU*34`f4ECo`_V1WvWbhS*_Dxx?c`B~WwNXPV6 zPvD2X{&da_%CcAOlP-`-?TgF$ti%+R!;3Pp^qnbq^gWJ2X0#v5J-+QSZKZCTuN31z zZuuDTl}7N9cKt{pLRE|_?EpRUwG8|4B+T-bw(YRBG$SjWE!w^PO(SrCYs_I>%LX% zRuZ2LIX^9-l!eL2+hzoHNqk98Yv+vTe2iLzwmf;4a9HBhge=90c1Bgf_nedEf^w$f zJf+6ZITLcuXH(}x6l$LOv;A2o`;L?A$1tDG9n0cMjkroXQ_!LUSI0@7?AV`?^K=rb zj=u+ss8Dtb(wUNOn5R*9T6%Hh<1qFVwJzl|nM$RS)=a_6(m1-AmbMNAZH7!Zo9RuB zo*5n9iXxZJrcR;WWds=uCFs=H|4b>s0T`s|qMInGhb~N=b_TZW*w>6qoZ)CX_H051 zF8ca`(maK;sqvtkxPfyzPC}KZsAON&Q2!vchC@9lLCR%mXozxj^eDAnvvdUSxn4R! zS;|vxFeS`)rbcGdG|U}SGb?0nS@YIQbqABM2NY@>PA)YHOz z597L7YgU_AFu#m1wf6ekAY5n4hFOLAG7s)EwOIqXX%HA{W&@uV!OtFWsA@OTd@)|rTSxZ`-C=R9&5n{c@C&m>%jv>L}}_W+_-Irv-H7X)usAaWNA-e-1& zU^z;JYqz&qMNaA&H z0Q6V$|5UL59auz`YkUZHkAD?qb%Q@Y+UQMv-x+v_g6lZBNTs=p0FYX)WIXVS0on`l z+v+1WK78PWa$o5b4hPOBA0>l@I4#{jEhL_+i+Mq4>b7m!h5+_;vw`k&4PQ}E zE3aFZE7xe*6rj, 2015 +# Vasil Vangelovski , 2015-2017 +# Vasil Vangelovski , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL eкстензии" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Вгнездени низи мораат да имаат иста должина." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Не можеа да се вчитаат JSON податоци." + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "Внесете две валидни вредности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Почетокот на опсегот не смее да го надминува крајот на опсегот." + +msgid "Enter two whole numbers." +msgstr "Внесете два цели броеви." + +msgid "Enter two numbers." +msgstr "Внесете два броја." + +msgid "Enter two valid date/times." +msgstr "Внесете две валидни датуми/времиња" + +msgid "Enter two valid dates." +msgstr "Внесете два валидни датуми." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Листата соджи %(show_value)d елемент, не смее да содржи повеќе од " +"%(limit_value)d." +msgstr[1] "" +"Листата содржи %(show_value)d елементи, не треба да содржи повеќе од " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Листата содржи %(show_value)d елемент, не треба да содржи помалку од " +"%(limit_value)d." +msgstr[1] "" +"Листата содржи %(show_value)d елемент, не треба да содржи помалку од " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Некои клучеви недостигаа: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Беа дадени некои непознати клучеви: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Осигурајте се дека овој опсег во целост е помал или еднаков на " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Осигурајте се дека овој опсег во целост е поголем или еднаков на " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7ae922e0cf2830b86c1324f5643c186e4951ae2 GIT binary patch literal 1581 zcma)6TZ7<&QuDv*FjfG-0h;2iK%;3448z#Q@iWCiEm zV~i~WKLQ>F-kahx2N=76^ALC$_$P1!_{rmp^@0BYk%9r(qmU;db|Ktxw>m=DQ&z!x z!UKrODvPL)nli~FdhgVU;}mht+ia=Oq9i?$w8679vR0uUG~=?`Z=WPG6I4|BnkW&l zQj9B2d8IV13F6Zd=}4!t;N@nU4fvSkIw@VIMXX56nc69;EK}^bP+CO9%aU&@pD5uQ zf^;HC@mx?QidZLYwknm5OL6M`VR_PaGz#9SVigQ!NUhZq!AY@^TG!xRygHj;XJj<|1}7^)=IcVXe(MQ-5ok&rH4J?slBtWw%4W>pT&2 zt<6mRo2h?wHt)5AJUCx+f!|@r`3KW{Y;!@e!P};}11s`DL#geDOw%|5Ac@i-cK*Ih z&268IJy`rF>)G6zQMzR6o2EwW*R!YX(wQZhGTJiD@1{mLDB6ek-4nm-GG4Kduopj? z`j=^Unse~@%F=+g*JuB1xZZF9U~v__fU9e=?TT+A$iQjavaQeCzTDicJahTRS+LvI znfkizX>)tVYs$#-g6ZL+?T6oT4Rp1ei~cu_cz@xiU`EX){@fO}RIlUrF}6fe5pVGY zrz2%*%#x*X!A+Sjfr;Cf$@gl@7efaBJd6yIV_x9yNA7?7bKjqdslS|M-cQ1Q#T$;F HZ5aCxC_C&x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..93c6f92c7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,98 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hrishikesh , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-13 21:28+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL എക്സ്റ്റൻഷനുക" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "നെസ്റ്റഡ് അറേകൾക്ക് ഒരേ ലെങ്ത്തായിരിക്കണം." + +msgid "Map of strings to strings/nulls" +msgstr "സ്ട്രിങ്ങുകളിൽ നിന്ന് സ്ട്രിങ്ങുകളിലേക്ക്/nulls ലേയ്ക്ക് ഉള്ള Map." + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "JSON ഡാറ്റ ലോഡുചെയ്യാനായില്ല." + +msgid "Input must be a JSON dictionary." +msgstr "ഇൻപുട്ട് നിർബന്ധമായു ഒരു JSON ഡിക്ഷ്ണറി ആയിരിക്കണം." + +msgid "Enter two valid values." +msgstr "ശരിയായ രണ്ട് വാല്യൂകൾ നൽകു" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "രണ്ട് പൂർണ്ണസംഖ്യകൾ നൽകുക." + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "ശരിയായ രണ്ട് തീയതികൾ നകുക." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f36705576cf7abc263df3f5bc29ed799f60cc12 GIT binary patch literal 3310 zcmc&#%WfP+6fGb?7$86p0R)JP1i~in8QTIWjN>fwk_>iY5`)+vXit}CI_asNbk%t5 z4e~=y!Xrp5LKYwvkrE|H$R=YYu^dP61ytMYkl3&S#22vPRCSLZ6DM(mfRegSch#+X z&wW+@vUSsGhVeL_XYtJ9c@9tSU6?Sw2R;q_0eArTGw@B|D|a)t6*vrh2KW(h8}J

      Y>NXEB&9(LvB4;~=TRc@B;6S5j{ zQYBYm@+C#CD00F}AuLw{u6Qs?#fZC#M@C9e7!f~Kbpui%z0?x;WnaBN>;_fdDmSPu z;8Jc#m$g|7NmR>&JhJK=OR(sB#s{8Lewp87Z=GdJbq>6k| zL=lCJ*PN&Zfn*1`RNPC_A(JGQ++kDSoTOXk6mU^gr7Y_Yr9xRBeyf-Gh~h#byOJFa zA##+DN<#QKm3=8;ClBAuVrwc;6-Px_6RQL(Q8?^-+*>6%U@R&(QiiWFpEQ=OD^nwU zq`<+{>~P_&5dym?Ji-gg>G7O*Q25}MC+`S4Gt3;~l`v9HpDg;Gv%6Z9&On%_O#eaW z5Fhr9sI%9U9(A^Nwma>wIUSvN&9`@KZ^y{=x>7j<;35N8g;AdDyFbK7Xg65x+yx0y zthz<+3~;xcr@jzY10RjwQc|jt&*f^hT2>hi=2RBfL@uG$fFMx4Cn@kD$IqQ@7f7pEH<>(Dzx&@zr^3dZLQlapAT*JckEK`fr!xK(4s5Kh?Xg=VwM zWDE`Ci7}qgfx$cHbxvQ8Kaa;?Mqk(0314G|F!(pPXBj+8g!GlAi~16T;M{_d&&9{# zW!;HCf#2(%)eQqToLx_zHH(AGgo)&BgiW}n5V`r(4->aroJ19T9go3*`FNuF-;jn7 znMYj4ZCK_Y{}n22JRV1iFX`E}VQ&0JY^B)fHTDrgroS)|!bwz$v4?p98k&A1`id!3 z@Lws_wx*i&P?Kr4QI~5fyP51AnY4wp>=G#dSB5v_t4S+5&vfelffl( zr9|sw&VnsmwceZAP+Cvt4N4lfFg6e}bCph+5ZF!zSJOC_^U_7|AIG%~i4By)-;`LZ AXaE2J literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..326792e73 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,111 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Zorig, 2016-2017 +# Zorig, 2019 +# Анхбаяр Анхаа , 2015 +# Баясгалан Цэвлээ , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL -ын өргөтгөлүүд" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Массивд байгаа %(nth)s буруу байна" + +msgid "Nested arrays must have the same length." +msgstr "Түүвэрлэсэн массив ижил урттай байх ёстой." + +msgid "Map of strings to strings/nulls" +msgstr "Тэмдэгтийг тэмдэгт/null руу заагч" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "JSON дата-г уншиж чадахгүй байна." + +msgid "Input must be a JSON dictionary." +msgstr "Оролт JSON dictionary байх ёстой." + +msgid "Enter two valid values." +msgstr "Хоёр зөв утга оруулна уу" + +msgid "The start of the range must not exceed the end of the range." +msgstr "Хүрээний эхлэл төгсгөлөөс хэтрэхгүй байх ёстой." + +msgid "Enter two whole numbers." +msgstr "Хоёр бүхэл тоон утга оруулна уу." + +msgid "Enter two numbers." +msgstr "Хоёр тоо оруулна уу." + +msgid "Enter two valid date/times." +msgstr "хоёр зөв огноо/цаг-ыг оруулна уу." + +msgid "Enter two valid dates." +msgstr "Хоёр зөв огноо оруулна уу" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Жагсаалтанд %(show_value)d зүйл байна, %(limit_value)d -ээс хэтрэхгүй байх " +"ёстой." +msgstr[1] "" +"Жагсаалтанд %(show_value)d зүйлүүд байна, %(limit_value)d -ээс хэтрэхгүй " +"байх ёстой." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Жагсаалтанд %(show_value)d зүйл байна, %(limit_value)d -ээс ихгүй байх ёстой." +msgstr[1] "" +"Жагсаалтанд %(show_value)d зүйлүүд байна, %(limit_value)d -ээс ихгүй байх " +"ёстой." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Зарим түлхүүр байхгүй байна: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Хэсэг үл мэдэгдэх түлхүүр байна: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Энэ хүрээ нь %(limit_value)s -тэй бүрэн тэнцүү буюу түүнээс бага байгаа " +"эсэхийг шалгана уу" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Энэ хүрээ нь %(limit_value)s -с их буюу тэнцүү байгаа эсэхийг шалгана уу" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..51c00af3f38ae759e73c6fb09e54a9a1ab23491b GIT binary patch literal 2712 zcmcJQ%WoS+9LEO;FH;JX_xneridfCsajK%?&UIfWfa{!Qkhq`=Ar7gD-=N;2fBOId}sU;OYArdkJ*lEch`P^nP8f z{{X&<-+zED@ItNBGXP;8djNO1?!k=^6xV|lVR~^rgy+M!5sHZmrm{zILlrw+eSuj; zt`L?Y{-?l4s&6m>LC`*pNohx^<}s~oTwSA>JKkVR%6cQnCEVd5Eg7x`g7DJUS)K|f z(lHH;;7*tzrAQkR?|Yt-({y$wm6>$!ZS&NNy1hkpsj&8zbQNcgG%26;gelbTE#X8N z2OmV!$xNK^?U?1l)QR;`qEm5j#N>9+4>9Ts%ky`jKcK(CT4$nz%l66L^0g6cPy*8CkQ_I$bbs{d)Vap^Yd^^;) zAj>mBsZax#G}yYf4rRUZ)+&h|CzM5YE!)r#8H%wbgkMl5t;IQQ_!buHm4H`6rAO+J zU~crbj75A%vKvlx+_+$GIKFJGqOL-Xh@HNGrQwTE@q|!=h0R5whV`4*KP%3!+nd*K zgw71xdF6O$$KX0VGI~q&U9=oW@1R-WPn+T`bhEBq6S+1n>ezvdqu2ewMqS;e+WOV# zn%I^>G+GShO7nB`t*C{+SEx1LzHt8B9Io0bw=U|!ew%WqO`BHurWw;4(k48^S2gf_ zAfm3|S(`dMMJLQ8&gJc9b2J(?T-Yf$#ZChwrCFM^hqT(<%xtq>>nwMc4vcR#=4zMG zIzr*}aSrnwQq{~;^wI+L6Kj@Ya>mSYtCh&>@FDbFxamGeUyaJeMTV zD*|cs4$_CVm5L_<9kMo=B+RkfKJeJnj?~8APw`yBTZ0I}>@ZyR->ccyJrtDi?+`vB zg=hnhzD&wO%ee|I52Jb3^F`6EYviCDb#MhO6KXLOnCeSPketZ@cT}RNlUU-wqS*Jc zF@%wcmxl)4x-c1157WzrC?$LN-e%gpSZ z-I<1p3W)*)Wg`B8C=nu+8wv`j=qLgm5)Bmvg756Ee?>Nqgfi0XXLt7PoA=(l_wIf< zu0avx(O;J4rt;IAMD{{rjaGj}s~5MZv>&7J2R;-U(c?0RXmuqzEV z=_!Th+V|>?OASvTX02G^F-!_UE{ua|Z8jyLrfakpQagO)dS+NfE9Mf4j^WC&8qTMZ zg9^S#!}WM?k8#}CTc^7nN_WwjnlgLzO}X%Y?EDX%(<0+$kvngtPLM=q{kExdr5u|f z=P53a!C=ki2tV;uI){DQ z@GUIXD}h}1wHfLyf|)e~8B@GPav|*Kh4sPSuzgurMP7v*q2(^Y((s0KyiKUV!pB9T zhV>h(Ulse;-Hp|+LuH1~Mdf%X$KX0VvSx|8KAMc9izpWO)8_FKs@c>oP-d);rd=ZA z=v1D#Xu-63ZEiNYKm!>>qcb60d26&a8jZdljkR#w9vwS6icy;q&PNNd-znjZZS&$@ zF48hT1yfGG1qq$xBB5x3MB3&v#ttcwXcnhTKV7?|_(;$Dtlex5hr@;sn!?u&w3udT z;yP5NsHr>6dTn}gdScU=vBqfaG)jpytXaumuE)_eGlkkZ!Mimd88NZy4O>x>K7|xfLopYi#PUkQI+^ymf+?x8oz4zc9|n>L+UKe6BUx zW5177LRhG14^i1m=hv>;gfHSm&`e_rf{v^t%~8ueQYdr}5hNDgaZ(D)O7?H69Q3BW z6{S+gd+V9avP6a=@gii%#$&RgVu>yfvkh!83HLH~8S)zKbyv9^UJS^_a@!}t&0@2v zjjmndgSE?rsa2@9bkYe$DNYjssG4b6xCmI$LCGS%A=G6b#j-?9(XC?`eN!)`Qq{2# zciusi%QM>efG@&|Dq=f!)LYR`_V()EU3&_TL(<$9(|1)qi}Q7|j~0fT&~VT^apR@h zcv$bdYu7^Kt$qm6d2#MN^eB;5JvXMUJvYjI=$8uR!Db9Xuh*{iLph|VfBfm#(npKe zd4CCcf*`d!s)*=zp=tgm!x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..31cbb37bb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jon , 2015-2016 +# Jon , 2017-2018,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-utvidelser" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i arrayen validerte ikke:" + +msgid "Nested arrays must have the same length." +msgstr "Nøstede arrays må ha samme lengde." + +msgid "Map of strings to strings/nulls" +msgstr "Oversikt over strenger til strenger/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Verdien av \"%(key)s\" er ikke en streng eller null." + +msgid "Could not load JSON data." +msgstr "Kunne ikke laste JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Input må være en JSON-dictionary." + +msgid "Enter two valid values." +msgstr "Oppgi to gyldige verdier." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten på serien må ikke overstige enden av serien." + +msgid "Enter two whole numbers." +msgstr "Oppgi to heltall." + +msgid "Enter two numbers." +msgstr "Oppgi to tall." + +msgid "Enter two valid date/times." +msgstr "Oppgi to gyldige datoer og tidspunkter." + +msgid "Enter two valid dates." +msgstr "Oppgi to gyldige datoer." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listen inneholder %(show_value)d element, den bør ikke inneholde mer enn " +"%(limit_value)d." +msgstr[1] "" +"Listen inneholder %(show_value)d elementer, den bør ikke inneholde mer enn " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listen inneholder %(show_value)d element, den bør ikke inneholde færre enn " +"%(limit_value)d." +msgstr[1] "" +"Listen inneholder %(show_value)d elementer, den bør ikke inneholde færre enn " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Noen nøkler manglet: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Noen ukjente nøkler ble oppgitt: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Sørg for at denne serien er helt mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Sørg for at denne serien er helt større enn eller lik %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..311ab176d98a7b22529c597bd8346b739e64559e GIT binary patch literal 875 zcmb`DF>4e-6vtPM2wSGmLW^gYAalESAcj3J#hD94JUzmxU^ls)Y&Pu8EVHw@XlEfL zh~)`_<(vcyV;LL$2!bC#rt@p~-;Ejt#U>Aa^MCK{dvD(C*ZH}r2Rje0fE927WT3J= zFc0>@W$+qY1V`W!_zWJM@w{))8=!mE^BzKN@y(A!Wt=Xoge5PERy`yjQ=RcB8c zp~*}X$#T3QbkX=NwZpSCrkEQMm~<@u@$D~ZG?rEQK&x#rGHfko4=_7bGNO2!%S8F> zB3Ih5evzax>y}BuhAJX|aF4BvowO=tE4VnKR@e$zc%3y{aHFt!Erj`ZcwyL3b6I5E zC>>Glr<-Dzy2{YaWmL$d\n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "दुई उपयुक्त मान राख्नु होस ।" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "दुई अङ्क राख्नु होस ।" + +msgid "Enter two valid date/times." +msgstr "दुई उपयुक्त मिति/समय राख्नु होस ।" + +msgid "Enter two valid dates." +msgstr "दुई उपयुक्त मिति राख्नु होस ।" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b443ae9a42fb56e4459469069fcdff5af896f5d GIT binary patch literal 2951 zcmcJROK%)S5XTz`ujLU4g!iKn4|$c$tnDZ$+Qb|ZJHbhuIEje_LPEVe<=Nhy>0Y{f zcI}+Pg--wyL2%{q0dheg4qOoei8BYojUyL0An~u+alC8tLMS86{Kh@iUDef9|Mf4s zc6=ysJ&OAo++X8<7Wdn?;eqQ%@Ja9|@D%tvcmizRF2pYIeeh}U68IQ+8GIc49()4) z4V2*D;2!X~JB0WGJPv*a{sBG@e!N47Dex3d-w&iU_^DcH;REZlq%3La5>q z+*n#XSbafQrGKQQ%>Vu1!__y0D#Q_6WQjC3$jqul9zS>bluT4mu~;y^a3n)V1w6Eu zPMMS>UfMSAXA~$~m#HHa$g!1?)=7G|P?-!?zC4xbT!(iCDl4e&Z*sYeyuYcnN}oe3 zO_8_AmCJ7q!J|%i57Y=cr)zw>%5WL##Q3mdGura8X!=EvdEtX>kyKT(bUSEklv|I* zVxSy5H=$GaQXA|9X3nW~nII%iav2;#Yl@Q^%e1WtN*j+!zGH_~wi2na&|W+xM)`ay zJ1ikrX}Fp1$s8x~jo0+IV$o}?ncGqIm~FN2f8xB(noFuL?W**_X_KOe?B;936j|oQ zDe{4m(Q)|EA$HV&>zkxkImwJn8alC9wmzV&&z(6bX)TcPI9)H!S(x-_-AkmOWUjr3 zpC_8`!j9IR*$Dmx`c-j4^vC6vQ8lkl|AyWQACYdmb1y3#u zmB%+Oep33c`;CjAa%b{%Rc)Nxk++T=IoqXnh!&IRJemdjY09LFZnm|v)VD4~OFq>} zbht=;v|^jGwtPA|O9RcO(L9%{oSmMXj;8lVGqZSYPS5O_##KA1e27*Mzt2>#t|`lR zy-I8HFhV)>8Z1m&sFb1=Qh8I(7opveQ=Jg{%|>H59L9lX^Nbj>(inxciL9F3Fj=Es zTUuON*xJBMJY742_924^*82!C;J6z74E=OawmZss3UhC)9E}ca*|D!xa?yfm+oU|d z11%k{1lg1(t1V}RQ(1J>y4+)+U;gRmW)I5I>)e!)FU-lA`oWqwVNIz5QA#NdP%F}C zf|RO+Of25AE|ug47AFBcf(Wp1IMO}nre(cKST$E=N}2BV_y83KCfgcputrnlfmS9Jf zU{fi_IhV4}sK9?JUP3Bbj$;^8;ssZh7i6}_g=tNT4d7vGR=?`(v01O9+FF$2_nr6E zDgP>)`bsfX-OZ(2o(J0ycj~qov6v@0+IIP6, 2016 +# Ilja Maas , 2015 +# 8de006b1b0894aab6aef71979dcd8bd6_5c6b207 , 2015 +# Tonnes , 2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-extensies" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Item %(nth)s in de matrix is niet gevalideerd:" + +msgid "Nested arrays must have the same length." +msgstr "Geneste matrices moeten dezelfde lengte hebben." + +msgid "Map of strings to strings/nulls" +msgstr "Toewijzing van tekenreeksen naar tekenreeksen/nulwaarden" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "De waarde van ‘%(key)s’ is geen tekenreeks of nul." + +msgid "Could not load JSON data." +msgstr "Kon JSON-gegevens niet laden." + +msgid "Input must be a JSON dictionary." +msgstr "Invoer moet een JSON-bibliotheek zijn." + +msgid "Enter two valid values." +msgstr "Voer twee geldige waarden in." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Het begin van het bereik mag niet groter zijn dan het einde van het bereik." + +msgid "Enter two whole numbers." +msgstr "Voer twee gehele getallen in." + +msgid "Enter two numbers." +msgstr "Voer twee getallen in." + +msgid "Enter two valid date/times." +msgstr "Voer twee geldige datums/tijden in." + +msgid "Enter two valid dates." +msgstr "Voer twee geldige datums in." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lijst bevat %(show_value)d element, maar mag niet meer dan %(limit_value)d " +"elementen bevatten." +msgstr[1] "" +"Lijst bevat %(show_value)d elementen, maar mag niet meer dan %(limit_value)d " +"elementen bevatten." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lijst bevat %(show_value)d element, maar mag niet minder dan %(limit_value)d " +"elementen bevatten." +msgstr[1] "" +"Lijst bevat %(show_value)d elementen, maar mag niet minder dan " +"%(limit_value)d elementen bevatten." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Sommige sleutels ontbreken: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Er zijn enkele onbekende sleutels opgegeven: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Zorg ervoor dat dit bereik minder dan of gelijk is aan %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Zorg ervoor dat dit bereik groter dan of gelijk is aan %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..52ea3d1e37176d3da3692efd57a82bf3a8e9b877 GIT binary patch literal 2836 zcmd6o%ZnUE9LHOYM#p!2#rViCN?^yNXLeVjan=>`*uW;)huJkA6r^_gw=)r82t1uco@vV*TFBqH^3i3s24qm8OD8>a6vI1t_anO@hGm3VZs%g22_on zz=Wv6mhcd26|sU_3jaR@K8_g%RE(k%CRYh*<4GBj(CMXxc}j#Ajc7)@+%oyD@VH1v zR_G2B{ImqrUaY(%r3 zQ&_Hjx9&)4Sb}ZViXkOXDLA=M4yv`Hvl3$3MtdQ(!%MDf29>uGk`QzlSHfzDPqhys zXq5*ee{c42(zv}$_g@ITh0N5H*`v4Q!avb-2bpssBeP1*Td6xpA~X8i)VWeFnrG)Z zDZ}B)Aa+GR zV!hgs>z+0Py+7EUY50LXPlSo1tlV!aCWssS$;ji$o3U zH!glwoL_f0E`A;=GrTS;!$Ua+(_xV{7r5=?*(5%XVu3v^N-m(9P3;_K#`<{9bz~AB z&pR$&HZ7_xF2v`!FT>XOWJp(<9G{$sC-8fXCMR2y6NknzYG;M>@iO#xN_b;iv?Tis z!xj__Oz>EDa?#;EelX1z8yJ2$g#$wXtkb^>+88mbI4=;{%-W~NYBQ`GJX>)21fvwSK(y1p-*waPZ0 z(QT6yfjqh*{Y`~iq;+jkB%W7|4xr-IxtNW^{HBPCf6FhvDdqR zM1oVeXby4NNtcGUL#qe}I;mqTSrbaQ%TnRqU;D-)p;%*4DXc5m+fp&;Njr&1rA}@y zVIj*pP!4tB1#)8jwlh?TL}Q1pMp*RB#AV21f9pNlJwezLDeT5ag@NI$S*?R3D82S2 zVIPb|Zwz0WIN8uVXB4N1A#AVuXIZOoR?#$(R+WRx-YL*vHFp`^aZB^$QqW;a@a_uS zTg9c=FI2*`dhPPa=iBzs|E+ArvWoP-ulEkJ7Z5c!#0MS>-36U8e1oLAc{6IVL)3j4 zH(`r-chQbU-8JEj-8IfVIwNXN*l6DLj3zzosqh+#U5O11vwWJPwlsoQ?dlf|v`Fec zYJR;Bht7(?XGpfH*h1cwr5OxxK4g0krAhRwJ&ovmNMI}lt2Xylm|DIa(zdj|D%G;R F{tb?;ZMXmc literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..aff996744 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2021-11-16 22:21+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-utvidingar" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i arrayen validerte ikkje:" + +msgid "Nested arrays must have the same length." +msgstr "Nysta arrayar må ha same lengde." + +msgid "Map of strings to strings/nulls" +msgstr "Oversyn over strenger til strenger/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Verdien til “%(key)s” er ikkje ein streng eller null." + +msgid "Could not load JSON data." +msgstr "Kunne ikkje laste JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Inndata må vere ein JSON-dictionary." + +msgid "Enter two valid values." +msgstr "Oppgje to gyldige verdiar." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten på serien må ikkje overstige enden av serien." + +msgid "Enter two whole numbers." +msgstr "Oppgje to heiltal." + +msgid "Enter two numbers." +msgstr "Oppgje to tal." + +msgid "Enter two valid date/times." +msgstr "Oppgje to gyldige datoar/tidspunkt." + +msgid "Enter two valid dates." +msgstr "Oppgje to gyldige datoar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista inneheld %(show_value)d element, den bør ikkje innehalde fleire enn " +"%(limit_value)d." +msgstr[1] "" +"Lista inneheld %(show_value)d element, den bør ikkje innehalde fleire enn " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista inneheld %(show_value)d element, den bør ikkje innehalde færre enn " +"%(limit_value)d." +msgstr[1] "" +"Lista inneheld %(show_value)d element, den bør ikkje innehalde færre enn " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Nokon nyklar mangla: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Nokon ukjende nyklar vart oppgjeve: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Syrg for at serien er heilt mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Syrg for at serien er heilt større enn eller lik %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cb91ecd013a31a69408b4ee701fb76e4cd564e9 GIT binary patch literal 3444 zcmeHJNpBoQ6fPia!yeWE2`_>~9woCm2};HuM@r&I4zc4n4v`QNDtDJ>YNn^E>8f^n zMv({+A-{lw*(5li+)*yz0|E~x4shiFQs4$RE^t8NtL~ZD4%tw|2}-K|YF@p1Th)7S ze%QF-9ft83=Chc~n42+Qy$v6XZ-JYD-vOt9zW`qXR&Qr)Bk*nDGr%R_6TpkWCxPDp zp9202B;cRG9l$MjFm?fW1o#Q?H{f%?cQ-IL1pEy6IPfPR0sjEzfluGb*eLK2a2N1R z;IFXdBJg?q{`hXjW`JM!ann7SeF1PQ=x+d>A0Gj?06zyhKfedQ0Q?>36C5=DSvPb%RFqyG~Iu3kN+ESpoPe)E1n>oE_=YT7mw$hNevE$|=~ zd2^HE0%6Qe$x3x5npE7L6HzLDK!Qf;J0C>J%C@-1-c`t{sq5%TLkD72$Ak)FOYPWL zniItP!IGYpTJfk;WD{1j;kmMnydkOJ3D}~DcgTlHF372IFs;gtN{I2avRo>IL#CmV zezbg&5VR9t0@dA5pARBvUL=EfuaB``ys=F4ZwS4H%(l*6kGkS5+=`vokvYjj((`0& zBvl=cNDr1J6$gP~Q^Hu`XV+n}OKk83_r3)g-WC)HRkw{Io7TqSS)Vw5l*FPH%HVbl zJE6hS5*270RS%@Ol`hFGzInn9ZnyrqhC7neyTrjE}i+nWu`mM`;NPGbgsjrNH>LN3lo0fWh4vy zsgmDBHtXDs2z6u&lcp~H!hyJM3bVROx#?qt8L=Q8YvGW4t~6X8E*Hvs3YB3jtL4g$ zGDhwwH?}Yf`%S>Dj;fTd<-Ay=12AQD3>>N+^SUU^3f`{Lv<{?c&``tLuv#i5Nm8`# zxI0orT`6UD4It>BE`>oUpPQVR9AEXIQY_~VB7cN}37rr&THF^nkx(P#HF#u%t(}}b zT-dwH=XA}Bs4%WP?WY&GcTU>NR#qtta??Q^@t|;6M{QFj6{bH;ZTAQ^-A-*t)oK;m zPi3moklI!$kJW~0`*w26(c133Tc`B$D8hC6bh=RHAjc&<3e}bu(l6alEx2!mIdG9Rub;4K9qaLb`*GNlNk(~@h zqGXedTv^&ly=7#9P+)IG!cY^5LJ4^|tb6Zyk`i#WOt(WpJV()2pC+nvMM|S+{xgwn zB}MZ_BB!;_o8%{OD3D%v4h41%Db!)a6D3@w@09A=?@DzYj;o(dkcFv}>$Wp(X#`q2 zK`kz_Q=;i&fzZZA(p(1-HHZ(Q*pjIEu5F^l1)`1Dh~Q)$AR)`=Agn`hm%^wkOjr25 zvy`|N#l5D?+JL($co}h=T-OFfCU7TmI)ouAz0;Hv`kl-)j#%}UuegzZk-d>*T;~76 z*Yw>r0Z*^&Z$Wpt;ECp~hy1@Mev;!2bLY1wSI*V(^r)+N%OT!%N|OUh+Oq|Fh1bE~ zTlRa)8kwGDQ<{U_m2>F90%>4ZmR$eFZ)8?nM>emVFR~fkMXn*^l;mhSgO1J)M7%{_ zcV#K9Y^@;nx}7zx+0_^P$AVIr28}5LI?LrQKdo{2oE5EpwT!bgM7_-tycL1LRfndi qYijA, 2015 +# Janusz Harkot , 2015 +# Piotr Jakimiak , 2015 +# lobsterick , 2019 +# m_aciek , 2016-2019 +# m_aciek , 2015 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozszerzenia PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s w tablicy nie przeszedł walidacji:" + +msgid "Nested arrays must have the same length." +msgstr "Zagnieżdżone tablice muszą mieć tę samą długość." + +msgid "Map of strings to strings/nulls" +msgstr "Mapowanie ciągów znaków na ciągi znaków/nulle" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Wartość „%(key)s” nie jest ciągiem znaków ani nullem." + +msgid "Could not load JSON data." +msgstr "Nie można załadować danych JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Wejście musi być słownikiem JSON." + +msgid "Enter two valid values." +msgstr "Podaj dwie poprawne wartości." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Początek zakresu nie może przekroczyć jego końca." + +msgid "Enter two whole numbers." +msgstr "Podaj dwie liczby całkowite." + +msgid "Enter two numbers." +msgstr "Podaj dwie liczby." + +msgid "Enter two valid date/times." +msgstr "Podaj dwie poprawne daty/godziny." + +msgid "Enter two valid dates." +msgstr "Podaj dwie poprawne daty." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista zawiera %(show_value)d element, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[1] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[2] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[3] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista zawiera %(show_value)d element, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[1] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[2] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[3] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Brak części kluczy: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Podano nieznane klucze: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Upewnij się, że ten zakres jest w całości mniejszy lub równy %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Upewnij się, że ten zakres jest w całości większy lub równy %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7f6ed0dad1682d0d106a02f370b614307bf2bd33 GIT binary patch literal 2745 zcmcJQOK%)S5XUGDay1KgRKevt^ z{zRZXg6nBqU*mcP*Ww}E(7pqo1aE@N;7{NM@c11<90j}JQ{YG7W8fFyN$>*r8K^<;*Tj+1pBtcG=N9PW zaHLZ9PlB)DeGxnfeh9)XaUU+<;EuqSi}t{PaJgs?;{FgWY<;Z3wc;FLN=yt!;7-vH zh9chggAbQo0xn_mI!_`}+EJoqL~pLGEK?+%tci2V=7!02q{A(?WTa{{;i0M1EMdpV zHnj~)$Hvc6qz&+f}R!aHj$s4RDs=GM^$lNyXxKZ!HpUIaU^@YsH$zl*_zr3E^i-V{5Tah`ssF>R>{yE-T$r zBNH>DyK%(P$jo)WqLapXfBo`hVHJ7hbA-2=3{U+Ct7vQzyfgX|H(jt01@9p7;af=2 zB~+%aT;xm}7cAL!90h0cwhh*GNR`!<;39WpKQ(yWryk8TW*R}`=WLm#I?iQbz258fYR;SR zpVgof_0qQ?l7WSK=IYhT(!$cYon1`V8kMuC2Uc)nJA;q&6g#6|Z(~W|qpwxhX}*=4iS) zTM^6s&rxDJrc7Jgzux79ny6rIOGDa1RU+KINY=y~5{o-Yn>o%2=SgjuO6p%l>P3<` zk(A09lBjcv5w-+^Fdj|}9}`|hNzceKHC zw|@m9DfgJP`>;0-`9f6>zrSsf(bb`Tj^o0Od1Nti0x^jg^=6@7c?v;nA|d-%Osog- z91~9^DS<#rYzGHYsHVr4Qk!aW$a&S#_`MfW*}sA0fX#u1T8OBaPuh8koI?e7F^W?0M~X9Q$;8PK zT||LO^lGEH>64S>_?Hn|oO`Dn9Qkeq$=1J)bV7=kMYt0VpKWCs`ZC2ofpcobX-)hA DzQ|H6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..fce5ed866 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claudio Fernandes , 2015 +# jorgecarleitao , 2015 +# Nuno Mariz , 2015,2017-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensões de PostgresSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Item %(nth)s na lista não validou:" + +msgid "Nested arrays must have the same length." +msgstr "As sub-listas têm de ter o mesmo tamanho." + +msgid "Map of strings to strings/nulls" +msgstr "Mapeamento de strings para strings/nulos" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Não foi possível carregar os dados JSON." + +msgid "Input must be a JSON dictionary." +msgstr "A entrada deve ser um dicionário JSON." + +msgid "Enter two valid values." +msgstr "Introduza dois valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "O início da gama não pode ser maior que o seu fim." + +msgid "Enter two whole numbers." +msgstr "Introduza dois números inteiros." + +msgid "Enter two numbers." +msgstr "Introduza dois números." + +msgid "Enter two valid date/times." +msgstr "Introduza duas datas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Introduza duas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém %(show_value)d item, não pode conter mais do que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, não pode conter mais do que " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém %(show_value)d item, tem de conter pelo menos %(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, tem de conter pelo menos " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algumas chaves estão em falta: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Foram fornecidas algumas chaves desconhecidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Garanta que esta gama é toda ela menor ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Garanta que esta gama é toda ela maior ou igual a %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..defc2893cc7ed1ec5cec4edb33176f55e71b37cd GIT binary patch literal 2903 zcmcJROK)366vqcBFY_+1QeLN(D6!gWJ3)xbX(}~+NC{0E+Q0^+YU+DzPkZl-J2Tf# zx+)vQ7hu6ls6s+ihz(LV6)U`D0bhVcVO5r_SRnY%*iM|JEkzYqy7zZIk27b^ob$i_ zW&5^|1g@uWzkvID+%MvO?=C!W{RBP-{tPaHzk_dr^}B`G4t@YW4}J_j16~221%Cv0 zfWLtR{sry@U%E$#ufcinEAS8SW$=@2LQH^H!KcArK?45-%izv?g*X5n0bc{(2Q&C` z1$-61ci%6>GB^*;gI|DQPuIa+;NM{IbJqid{mp=3zwd&(!4+^1_$l}e_yc$u)DI5& zca(&f#P4ZvCzyl5uMfdD!0*6m@H$un_dFy7+!H{&?!yxyh}R=S!u5DPhUeqB5sD2L zTozB_hDq`0um^6%eIYC{{ttss4Ex}!5Qj~XrKF9g%*d4HPn}q#RC-wvN3|;~lW$9p zhjL`4ZZYAdVe(GKp0ibIS(ct{7^TTr;`4>f$QycPB2&5Yr@JyMxa@AzT*l7bmaVvE z&yX(iGi;;zQ4>~FY1ji-y~_C}eK%;1u5M`WwN1wBYs~3R;VCbir!!1)7%bKB%4lg< zD`L)bj-6}YE;~{hJHaq(2iNN2xPqC6(OxR;Fv+z|Zy2qV6b$Xdlh7K@ zXE+WfsL8!iyf?-;t^B)9_kS3@iOt*$vPW;qg*)-{7B&}ThfI^4w@SB=L}v6_)kT&$ zvB=JIIyeqDIK;N>hWuu7GH1$Iw|u)ImW=aA>r-zXCtmTa9ZuJYQwBrM@v0+)pD9<) zVVyem78=XL0fj!NO;3*v>{!!PDW_v2m&1x)S|9uk%MS`G=2gfMUTH8q4Lz*W4TCBo zOpb{f+OJ*wEUsU6*Dih@Dl<%%!;Ob>3|q&JtU1dKpUkDnJ17?Hr%vfvRI@3a z*gC~`)#MeLg)0XRVuWrLvc<_V%e+oYSgmLk?3gBIt-PSJGEKC-@6@Z+Uawd2!B&`G zfyh(`PL7ZbO;tPo^z6xMxwJ61aCCh~la*TOFzSglTw3kGXOHu%b}|&$G&S1NI`%Vf zFCRs3>oFE~Lk0162T)qsxSfDQF8 zkAxQ4iB`&`!jYPS6e618oHrE~q-(2Db4!b?VKJ<|)zlo$!AeR^NUQ$UoUL(U)L2Lt zzY?z6HWu&Q{w0X6ga=zj+@LR*3|q83nrX&njxUH~V>Rdu(wj00) zWnx6diKv>`$UuIzM8F^h7vMckBnq!7>f#V(P+l1&wSPGerh?jH-natqi)&dm7>5<3 z5u5|gFT`t$^lmo0(Og(ULwv&q?!f5He2va+vW;xHO;@9DTlW9oY(jmJD?!%=^4pQf zo#Bt6058PTz>!O>bXy`@VmNY?DYBaIrOr*vc#E&L_6C0$qWt!+U{18RuFT?4)+%yX zKv{Rujna`_nNw3{Ug{JQwx-LQMyBlWF>P}rq$}#whFQky&|py8Yx9s!I;0pXV624J kq7qd)jh;6ZvTB$mIn&`4`SVp9smFU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..6079e1dd5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,116 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Andre Machado , 2016 +# Carlos C. Leite , 2016,2019 +# Claudemiro Alves Feitosa Neto , 2015 +# Fábio C. Barrionuevo da Luz , 2015 +# Lucas Infante , 2015 +# Luiz Boaretto , 2017 +# Marcelo Moro Brondani , 2018 +# Rafael Ribeiro , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensões para PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "O item %(nth)s na matriz não validou:" + +msgid "Nested arrays must have the same length." +msgstr "Matrizes aninhadas devem ter o mesmo comprimento." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de strings para strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "O valor da “%(key)s” não é string ou null." + +msgid "Could not load JSON data." +msgstr "Não foi possível carregar dados JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Input deve ser um dicionário JSON" + +msgid "Enter two valid values." +msgstr "Insira dois valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "O inicio do intervalo não deve exceder o fim do intervalo." + +msgid "Enter two whole numbers." +msgstr "Insira dois números cheios." + +msgid "Enter two numbers." +msgstr "Insira dois números" + +msgid "Enter two valid date/times." +msgstr "Insira duas datas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Insira duas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém um item %(show_value)d, não deveria conter mais que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém itens %(show_value)d, não deveria conter mais que " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém um item %(show_value)d, deveria conter não menos que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, deveria conter não menos que " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algumas chaves estavam faltando: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Algumas chaves desconhecidas foram fornecidos: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Certifique-se que o intervalo é completamente menor que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Certifique-se que este intervalo é completamente maior ou igual a " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c34adb3a170871e968532ebe05936dc5ec12d2a GIT binary patch literal 3188 zcmd^=&yN&E6vs=&U!$VpPf*vV31lYF^J5``0|O!~$s)V_*oBkE)O6R(6m(aO^<#%6 z955u_^u__viw9$(@y5k?gTtD5(0@P^^yblc@L=M%dU|(f_@P9D7dz?xbXUK6_3G8D zZ~d@t%>{<*N!-ul{u=iSxZk`B4_x1Y>%s5AS@0L|4X}APW9z{8z~{h=;M3q`@EP!1 z@LBL@kib8{&EUj6jC}?k1V06T1z!X|T*Fuy{0e*u{0SuRcd!C(xR;qHJp14T_&zuZegRg&AHfp*u6>ZPHQ@RZ zW4qBl@epI%!MDKR_W~IFd=72_m%xyp-@qEU|6#_^o#8XT?!yx)$gf8VBJ})v6wk+S zBNby8rof)SjS$${;t#^h*9vLL^N(TJ5T9vnhzvO^MXVyzsP%A%9)=|PdLgd`ko z!IRJ$)~B$83+jl$a=yoNoK*kbr@a$SZ{ai3!|GAj)xy7t^DlhP@IL7dS!bl`qKNeJ zYfbqywQN>cCz9cE*x@4f_(G^}L6&ENQlYx8S7k@Ebtvn(qlZYGc0yUKu4Qu?Ca1)r zC8S?aCauLdP0TGcRtf{JPANT5BZhsW7i1!m5zF~7qT|Mec*F3+jg{9`s1b2G7Kk+b z5h@uosX?zyCq?X{=_ERV&4T$fDLIMV ztV_p4UmF+A*se^X*L~MU^SVi;BZs47VnGJeXn!bInygROqx$x!{t7j=HyhhF*Kw5& zaqFUa#BWpXv}w|m?+T?;nt>ebQqTr(MH@zvtJk_2muVH^u^atV*YmE3<^|81bWCSl z!Gy{^=lacBZ7>*AU2rQq;&kXz8^*hgwCGhO8OwUZM&a6?bm-b;_35C!W`-t6P z9c%p*8*L}WJ#MUUt>g0tq8+PtVXTfY(UgjHk}vFzwsb3THp%GHk<=TWMhCRXY?D+! z|Fo^GJ8AgZDyvqjv8UcFm&&?~kkrRaf5Ee*XsDYG1O^0sbc1CoecZ4kC zMvYqTNpvB{vA=E$LgfC5QyGu>ywT}2g3yVlM0>;uZN^rCDvq@VVWt|2Gp}Q8jhh+_Ua@iiLcs?EusZ?aB8)SA_ z#Ze3pixkF4t@30ezAWNH4d+3e@mmS>85Qv@!JOl0%ty}$FDwy8SfsuW-6#niM-R(F zApcK}kzscS67gTV-D`C$!|{MMUAicZN3r5H=7z`Evv~72ZO@OWDmwv@Mtw_?S=-2% zqddlHm&-OvhvRhM@J^{$VZ)2 zXTp}u4V8$!(l+)%@>h1c^#Vw8zU(-=kYA5&f&@mo5r!gG$-Xl}`-9yuKHv biCvuU%kkq2-f}s^?zGb6N^?dSU1fg)W>5Ya literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..ae8e69dbf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2018 +# Eugenol Man , 2020 +# Razvan Stefanescu , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-07-06 17:14+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiile PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Elementul %(nth)s din mulțime nu s-a validat:" + +msgid "Nested arrays must have the same length." +msgstr "Vectorii imbricați trebuie să aibă aceeași lungime." + +msgid "Map of strings to strings/nulls" +msgstr "Asociere de șiruri de caractere cu șiruri de caractere/null." + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Valoarea “%(key)s” nu este un sir sau zero." + +msgid "Could not load JSON data." +msgstr "Nu am putut încărca datele JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Intrarea trebuie să fie un dicționar JSON valid." + +msgid "Enter two valid values." +msgstr "Introdu două valori valide." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Începutul intervalului nu trebuie să depășească sfârșitul intervalului." + +msgid "Enter two whole numbers." +msgstr "Introdu două numere întregi." + +msgid "Enter two numbers." +msgstr "Introdu două numere." + +msgid "Enter two valid date/times." +msgstr "Introdu două date / ore valide." + +msgid "Enter two valid dates." +msgstr "Introdu două date valide." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." +msgstr[1] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." +msgstr[2] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." +msgstr[1] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." +msgstr[2] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Unele chei lipsesc: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Au fost furnizate chei necunoscute: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Asigură-te că intervalul este în întregime mai mic sau egal cu " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asigură-te că intervalul este în întregime mai mare sau egal cu " +"%(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2269b87b422682ff7985a4301e4f16b614e6d269 GIT binary patch literal 4721 zcmeHK>u(fQ6u&CI);GT2mk*F`=)Ovuz|t*7z@)W>3PlrRVx~K{y92W`>&)FQB_#F{ z9$KJkVvI%-ABj;Dlclh)RObXfnR}h$32XFhVh^8W9(Jn`27LjAAw1{UjR-4*FV76E5Pr8{XmZ3fF8RG zH(j^khB|dYrMf^}T~N)Sh9MLU7hGWv;szCVZ*2zdsJ%j1RQ&G-!lb(30%M!)f~j-M zmfW;8o%ihAzK!de)S_&wKBJ#(a^~U5tBwvTxPDx zu%g;9Ud-C2sN3ka@&(Cr1y}Mx!L?ejjI=atOLIn|tXqm4Jhx;v>~h0`Cs^h<+6dP{ ziGr-ifm)LF8c>tAEvXrn3n4da7i-bdxdBD3_~jU-{i&^k3O*!?i}7xZu^#&*UAEK4l09O?DD7J<70t8Nv`k4*KCJ&h`jB{NS~WA^vLstj2juS zlRVVFJ+ea#8?-dCh0>L`#oOYMct<4B&f^`)_`0=mT%lggm5~APcTG*&PLih`ZQsbg z!l1)Dv%AyQV0zDx{#+)f8D{%fIfYm_)Ysj&weC?O8V_y8_arP(8p(sR#Qw$dCO)u@Je}1XSIE?^ zffpj{>+8tYkZ>Yft+cJH4P8HI$cr?S+$n_m&4Qzukr!+y=O($8SFdiWeIpMZQ!Uo& zL_C#B@HJ~VJ;qn15(&PE$2pecy(`tWIMtbIr$;3b?@YAu{rdxvu0(qnB8i$vDixdy{)BhRD|r>K>W}$HxHp5Bll~}% zXS`W|979y_BWlrtx8P5D2WfaE-BY03^>H(~dl;$4dYxeHZ@0(gwUatZvK ztN>?XNIoL~{*fS}Bwa$VCpl!R9NvwBj3PvMO{$s;m73W14_p$+%L)4j!KdO+LZrdd z50>r&ZOkd!Y6O3Q+&KY(i9=b%idMaeWP|Ni2pbu9h{EdH0?RW0^T`Ejv z)SgKcXsSj>mK8m;W&cRZ{_RY!BVYgfT;EXzxr&nj$2+Pbm1b%SzHO-1!9hl46G??q zOqCLg=5gfXrQ#n$RV@XtXabrp3mOFKB``mseo=$*bW9!SO4YLSpA@R23+)UlK6M4E zV`-p17sTWtH!cqOPTO0tCirF-`#}nt nFoSd0t008SdxgfoC`zqA1&$T`(zcBGQ;it{KZD!|{=57M1h@|B literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..52fe1ca09 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,132 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eugene , 2016 +# eXtractor , 2015 +# crazyzubr , 2020 +# Kirill Gagarski , 2015 +# Вася Аникин , 2017 +# Алексей Борискин , 2015-2018 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-14 05:03+0000\n" +"Last-Translator: crazyzubr \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Расширения PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Элемент %(nth)s в массиве не прошёл проверку:" + +msgid "Nested arrays must have the same length." +msgstr "Вложенные массивы должны иметь одинаковую длину." + +msgid "Map of strings to strings/nulls" +msgstr "" +"Ассоциативный массив со строковыми ключами и строковыми или отсутствующими " +"значениями." + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Значение “%(key)s” не является строкой или null." + +msgid "Could not load JSON data." +msgstr "Не удалось загрузить JSON-данные." + +msgid "Input must be a JSON dictionary." +msgstr "Значение должно быть JSON-словарём." + +msgid "Enter two valid values." +msgstr "Введите два правильных значения." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Начало диапазона не может превышать его предел." + +msgid "Enter two whole numbers." +msgstr "Введите два целых числа." + +msgid "Enter two numbers." +msgstr "Введите два числа." + +msgid "Enter two valid date/times." +msgstr "Введите две правильные даты со временем." + +msgid "Enter two valid dates." +msgstr "Введите две правильные даты." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Список содержит %(show_value)d элемент, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[1] "" +"Список содержит %(show_value)d элемента, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[2] "" +"Список содержит %(show_value)d элементов, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[3] "" +"Список содержит %(show_value)d элементов, однако количество элементов не " +"должно превышать %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Список содержит %(show_value)d элемент, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[1] "" +"Список содержит %(show_value)d элемента, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[2] "" +"Список содержит %(show_value)d элементов, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[3] "" +"Список содержит %(show_value)d элементов, однако количество элементов должно " +"быть не меньше %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Некоторые ключи пропущены: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" +"Некоторые из предоставленных ключей не входят в список известных ключей: " +"%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Убедитесь, что все значения, принадлежащие этому интервалу, меньше или равны " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Убедитесь, что этот диапазон, больше или равен %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe9f60e1bd318cb560f007bcab2d893ba9d7ae28 GIT binary patch literal 3358 zcmeH|&u<$=6vqcBw3y%Jclq_GXcg1ij?+j)Zr!5(Qd5#NG-(eN5{$hQd$YSUW@px} zBO#Rww;Yk6Du+lE(L;_EQbcoE`^EwO0i?Ew3r9{IkoeB-rcNUILxNrqEA4)EXWx7C z-kUdXe%`+2bB60V+^^#P9`|dwKX?ESTt9*@gFk^&;BVl2VC6x^wu7I6uYg~IFMwCU z7r`IEm%v{@0{;Z}fUiHq*tg(G@Eh=V@D1?d7RH9a74UiRCP?5PU>@A@Fk=V6qu@U9 zQ}8?Zaus|V-@#VKPJmy4$HD8MjcI5bV>`hrXyf}R<0s$_d|w2uUsu6h;B`>J?$$>c z^T1Ayv9~aO^RZNJ+v90`qu_3gPk=+92FJlm;5*>2Ak-PulIsyXk%HuUA|qT+uBY&P z8aGn0;X(-PS=?}eJ(>N1dr4eKOOk&~!=B0h!DYsdsK|FnDnq{F4xOAiHAN0LyvUA8 z9fg8SlN&r-O(B;JL3pXFpydlA{4O;@!Ho#5lq40B_&DM|8AZE>d^d2-hi&dhBCqe! zoG-M#CtJy!9Yrzcl^ROAsXAG< z9CBf3FP?-^yFQs5OwgR@tmS)Sj-BG&ZR-1B^fopFl~#}3R15#a&pX(heg!BsvT&*!r1+m$|d?pY{PpXbwC)f&A+jWGqPIA`HXn1I>zjpd`Vo+wEvWM?|5T7j;t@cM4~*SrAW! zoO$eKl{+n3Dl~;j-Ef`4;i#btv#LV5=~IQ%qU~DI!ckkUG%`FgTqute%A-^stBj89 z8OD{H;Mx>s;lK8|QDKFq(H26QF=4#iU!?;rVIrS< zLNmTQm4}?8f(y<6X&f$DfM&>ex_a0UMZiO9G^Tkh^bs0&K<#y5)w{z zTkzUo1xqa-TWmkon>^IQRL{&FFN_W3>|ApqEF6<{Vhg?3v}+G{i?i3M|b==$h=ytf!H8{WTMWG9q^wdWM712stZ3}qIUdsZ?V7Ra^k+IDG0VDhBvklG{3tV3WU4|Gv_#5H-a4OFzY4iqsRt> z9Esyb##hLRmrN9NOT9&|(LwJZvi_&IrQb{f-=Haykgp8pJ*!RBTAvb)nv?OeM{V>| zEGm2uNrsCo>)u6bDPQ$hJ$R~mtDLY7NPXh;QiYvU3z7$`|PltP?zke(2&D>Mh#NmNte# zN0dSbh^ZD|gOlxUe<|%^*nyrx>u(QK22D_}O``(ZnVqyd$)*N-KFy9mSxJ{{Qi|*^ D9}r40 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..b22e4f193 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martin Tóth , 2017-2018 +# Peter Stríž , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-12-14 18:42+0000\n" +"Last-Translator: Peter Stríž \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL rozšírenia" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s. položka poľa je neplatná:" + +msgid "Nested arrays must have the same length." +msgstr "Vnorené polia musia mať rovnakú dĺžku." + +msgid "Map of strings to strings/nulls" +msgstr "Mapovanie reťazcov na reťazce/NULL" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Hodnota s kľúčom \"%(key)s\" nie je reťazec ani NULL." + +msgid "Could not load JSON data." +msgstr "Údaje typu JSON sa nepodarilo načítať." + +msgid "Input must be a JSON dictionary." +msgstr "Vstup musí byť slovník vo formáte JSON." + +msgid "Enter two valid values." +msgstr "Zadajte dve platné hodnoty." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Začiatočná hodnota rozsahu nesmie býť vyššia ako koncová hodnota." + +msgid "Enter two whole numbers." +msgstr "Zadajte dve celé čísla." + +msgid "Enter two numbers." +msgstr "Zadajte dve čísla." + +msgid "Enter two valid date/times." +msgstr "Zadajte dva platné dátumy/časy." + +msgid "Enter two valid dates." +msgstr "Zadajte dva platné dátumy." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[1] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[2] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[3] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[1] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[2] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[3] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Niektoré kľúče chýbajú: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Boli zadané neznáme kľúče: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Hodnota rozsahu musí byť celá menšia alebo rovná %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Hodnota rozsahu musí byť celá väčšia alebo rovná %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6fe13b959a603b1747bf7e1618749d73d42ec6e2 GIT binary patch literal 3026 zcmcIm&2QX96d#~`El{8mUj@`Bp-PFUcQ+qJ)wU_9rA37#4Nd5w9MJ6gWp~!&8RHpy zlc;BILE=zx?gcm$2`(HtrQ(3Z1+MTnfVgl%{A_QM-IA6_4I|kh~?rWU7Z;4nQYPP%9yjGEm8Q#thmMUC&7So- zbyJp}(?ZISO^H9wq$Y3a_=Hxm@*m|=XFTclX->0q`?6K~99S}0+~%}2zdZ$yDlGQE z4XN80nWs2&p4v=u7%bKC${Lxj*TuZTQpXxEm2n7x>)F9D z0wF2S@d?}svqj8@a)>>x@?blL<8cf3VblE|M(<)XwpB)$JI?ohc;3V2f=tM+lJluD zT_lFxer%XbYbO@jc@9aYsa$u}!SrNaLeE!L~q2MQt1O&_KiK#$;{b(!zz^O-$9Bweu(k zHej)yfTlgHxoQ}sAEVUABVn{#th^d>b4BGv0OUZ-|nXXyI%?WI{PO=D?h@^nos zDrzfjDYjj^wTTuWwY~kl@~W!&#G<`KHZKz^N67CCC$F_ijDIhTNbghQ9n z9!(K>d3W_#nm+9+M>w$Y?tor()v$wi3X%1~LBy?ZqMiw10izV5OI!JD9 zMv8LU+LSK4r~K$*v7^!$R8tNOifYUmQ-`tF5gt7o8bxKeI6^d2#Aqjqw%zB**Tph# z7#UOUxSb(tceG8`93y{Dl-in-!UFYG4`_>M)zUzDOq_p_}{7(wYrvX553^DSD$ zhplpCi{6A&+g1VtBf(&(Jfd?=qIr2#-moRfkrGVoZV{LMz=mu{ku@E3iK>U;H}D@Z CC$($< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 000000000..8a0e53523 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Primož Verdnik , 2017 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL razširitve" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Gnezdeni seznami morajo imeti enako dolžino." + +msgid "Map of strings to strings/nulls" +msgstr "Preslikava nizev v nize/null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Ni bilo mogoče naložiti JSON podatkov." + +msgid "Input must be a JSON dictionary." +msgstr "Vhodni podatek mora biti JSON objekt." + +msgid "Enter two valid values." +msgstr "Vnesite dve veljavni vrednosti." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Začetek območja mora biti po vrednosti manjši od konca območja." + +msgid "Enter two whole numbers." +msgstr "Vnesite dve celi števili." + +msgid "Enter two numbers." +msgstr "Vnesite dve števili." + +msgid "Enter two valid date/times." +msgstr "Vnesite dva veljavna datuma oz. točki v času." + +msgid "Enter two valid dates." +msgstr "Vnesite dva veljavna datuma." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Seznam vsebuje %(show_value)d element, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[1] "" +"Seznam vsebuje %(show_value)d elementa, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[2] "" +"Seznam vsebuje %(show_value)d elemente, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[3] "" +"Seznam vsebuje %(show_value)d elementov, moral pa bi jih imeti največ " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Seznam vsebuje %(show_value)d element, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[1] "" +"Seznam vsebuje %(show_value)d elementa, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[2] "" +"Seznam vsebuje %(show_value)d elemente, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[3] "" +"Seznam vsebuje %(show_value)d elementov, moral pa bi jih najmanj " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Nekateri ključi manjkajo: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Navedeni so bili nekateri neznani ključi: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Poskrbite, da bo to območje manj ali enako kot %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Poskrbite, da bo to območje večje ali enako %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ec786c62ad2928f4a425700c91d9df874c090e1 GIT binary patch literal 2899 zcmcJRO>7)B6vqveujRXZmh$nc3XyF)yGamLwQWH3BWgmEmL^mPfsnJ~?09y@p4gsj zSK<&jaOT3H2(Ew>ap2Gkf>VxgfEyALhr*2`Ck~bP+q0W(qPD4oYH8*-wx6G$pWl1C zf9&4%8AE#l&vSTw!1Fww_wK+8?H6zl_$xRM{tdnfw(ewXH~0y-7rX>M1zrZ927d;h z0sjICyb2x!U$~30Z@^jbEASuiMey@ojE#ZcgHM8gf&~5x*1>1*X6zVv5_|>x2=q2y z2KS@C``*f~!{BN3KL#HGe**V`zk}Y+tDryUp8Klt!{E#4zXKis*TC<^#NX@di7kY-t3!ggd;X zCBs!m5I)*EFEZgo)~AjU+zI2Q6lp_ZrQ{hoO)rgQGMDayRi2fiZf{XtCak?BU186j zCROH3!UXlhA?zq)e+JQXG8Z?PyUuVhb<21!(U}{oS+eb#)@&CVbV$w;;=NL77k;mo(TpZ5_gT;jJ?yE;^wsZr8E}4Uw+sTY~!q<5~@@3j))co&s+3Hw#1c0tr$z3D_YHFuh(lhufQ*Apt3Y8%ZA7X z>zj6^S+C8_%$*vYVWKf!JAn)m3P$t`Sm|(M%_2ie9i?`{jTLU{?ZxTn$VkrbwJc0@ zO0{(yuJFi`bendz$gb4RWu@U+G_6f;TcnE6wNsNvsrsB6Q?zf2ChA9PY~jk{U5taK=;hmyVyp~g*A(Z_uQ-hsdN=4U6xTPwx&S!(^-~!4nmE>*3 zLR<2xz;Y@!)=iF>!-_2xR%9Ya+#I6Oo&!<8XR5=6cqd-B$nL0jWBqn%zPVnTls=LW zLAS^5o9I7{iiWNIb)>>3$i;0H_(GV$Z>K?7<0HY*4RnQqhT+Yp_)yeIxxZ1_VDCb& z!7ncfs?CvC8(*UcY?kC%?k7Sff?+l&FStsPjVM=}qSG?-|5uQLA?AkZ uDG8PJ(#Sw3(k`Mggk`BvJ_vsgd~b8XFqFl%;_USdbKScrBqz#qgZ&3xc&0}H literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..57d5caa3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik Bleta , 2017-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Zgjerime PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Objekti %(nth)s te vargu nuk u vleftësua:" + +msgid "Nested arrays must have the same length." +msgstr "Vargjet brenda vargjesh duhet të kenë të njëjtën gjatësi." + +msgid "Map of strings to strings/nulls" +msgstr "Hartë vargjesh te strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Vlera e “%(key)s” s’është varg ose nul." + +msgid "Could not load JSON data." +msgstr "S’u ngarkuan dot të dhëna JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Vlera duhet të jetë një fjalor JSON." + +msgid "Enter two valid values." +msgstr "Jepni dy vlera të vlefshme." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Fillimi i një intervali s’duhet të tejkalojë fundin e një intervali." + +msgid "Enter two whole numbers." +msgstr "Jepni dy vlera të plota numrash." + +msgid "Enter two numbers." +msgstr "Jepni dy numra." + +msgid "Enter two valid date/times." +msgstr "Jepni dy data/kohë të vlefshme." + +msgid "Enter two valid dates." +msgstr "Jepni dy data të vlefshme." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista përmban %(show_value)d element, duhet të përmbajë jo më shumë se " +"%(limit_value)d." +msgstr[1] "" +"Lista përmban %(show_value)d elementë, duhet të përmbajë jo më shumë se " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista përmban %(show_value)d element, duhet të përmbajë jo më pak " +"%(limit_value)d." +msgstr[1] "" +"Lista përmban %(show_value)d elementë, duhet të përmbajë jo më pak " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Mungojnë ca kyçe: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Janë dhënë kyçe të panjohur: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Sigurohuni që ky interval është më pak ose baras me %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Sigurohuni që ky interval është më i madh ose baras me %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e56e9b96b1c8ba8dee6ffce0e7b855bde8081a72 GIT binary patch literal 3753 zcmc&$$&VCO7=J3bv^(zN@;E@Ih3aL%gf!ETuq6XC!!jcmNwlWxO?N?cRa@`%G!r>6 z5W$Pa7)<~{V~ob*FibAE(KUcM;4i>efISby^I_m7%-;tdhTQLg zZv%He$k;H}zkP_YJ;3D;$M%+iB=0@oX5cr#eZZxUFg5_(4+J{{yLs-#7a=eYNX-M& z&GRU}kKsiqx*oW|p1_;H3vuRw+2*Ve788G%#U3|1jKO3$8&o}q`+?$KU^{%r@U9{5 z*vd|^ZN99Af~%6P@Np#%ZNDfu28Ezp@q`lI1TTidRw5)Sp9diqZ&huNtAMZU@!Ybj z-Wa#Nsz}P46z2&kZ%UTYSqr#dEsu)Oh;J`JqwA0lBCXuAxX#`p%f{5M^;#+L#5EoL zex<5-xhfSO72IwG%PlB3@a=FS#rl;f!*gGil9IbVJONo4+7sM?Nfcyb98Alx0T*Hl zfv;@Wmtc~mpw^0(!(9kkgD=M_ollDnBKVl7wd36#V<&ZEnex97dL5bNAkH3tK`#6g zJO4)Jpk3j?7?&z^{UVYmXb;nV)$=495>g2#J`NclV#yw-{1#l=Wx+k+7gZ_6b_Y@+ zt%vsvaB)ZpU*dEn8xBBnP)taU@C#mcrG%awe51u=i=gTs^n;q;L0Accan}(}2jvK9 zRCcJyUQ!U@7eg-{~SsF=94}O6ymSoH6>7^2(93RGGwXw;ZQ(B-i0l z7#t7JZ)3#hKcbn+7cm?4K?Iy{(zX;Uy^af$|b=E+Ymz<3j}=qTKT`m~5H)w3uG;FnDG^jTL)S` zH@Pv5T$sYq#rF;+&t;tL#nyn%mkxc3P8;EEn3y3dIi`^Y#$uQ@34$4HUBJODxQ${G zh(HppA>ojR)Z&OX1^Jv2jl?o3+bM^R0+|4EB<+IS!ZmQq>UI6js&D-N>Tf^x(>U9A z?_BKvZS}Vp`x~e~gPfhGLNsNE`k6Cbq!GPiiU-xuqy}dCN;e6T8P#P7>gLzNGQ4$a zQ|Bq!Q9(1N?HGR4q1nd-t({6QI@xaTXmZC;bEwz23LzRZsz9o-u0Ih7Y?@S{es&S` zC~9+K#CA5LQ|7Ly!waL9I(poUjJ}S)5B(8LK#xMj#|;9K+dOo+7;g;$G5i>cXh^-w@fcc5GBLaR;0vZzy&CbWrW90el2dTE&+{h^_`+D8}s-k7kPUe@~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..e5feb0fcd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,114 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL екстензије" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Ставка %(nth)s у низу није валидирана:" + +msgid "Nested arrays must have the same length." +msgstr "Угњеждени низови морају да буду исте дужине." + +msgid "Map of strings to strings/nulls" +msgstr "Мапа знаковних ниски на знаковне ниске/null-ове" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Вредност “%(key)s” није знаковни низ или null." + +msgid "Could not load JSON data." +msgstr "Не могу да учитам JSON податке." + +msgid "Input must be a JSON dictionary." +msgstr "Улазна вредност мора бити JSON dict." + +msgid "Enter two valid values." +msgstr "Унесите две исправне вредности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Почетак опсега не може бити преко краја опсега." + +msgid "Enter two whole numbers." +msgstr "Унесите два цела броја." + +msgid "Enter two numbers." +msgstr "Унесите два броја." + +msgid "Enter two valid date/times." +msgstr "Унесите два исправна датума/времена." + +msgid "Enter two valid dates." +msgstr "Унесите два исправна датума." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Листа садржи %(show_value)dставку, не би требало да садржи више од " +"%(limit_value)d." +msgstr[1] "" +"Листа садржи %(show_value)d ставке, не би требало да садржи више од " +"%(limit_value)d." +msgstr[2] "" +"Листа садржи %(show_value)d ставки, не би требало да садржи више од " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Листа садржи %(show_value)d ставку, не би требало да садржи мање од " +"%(limit_value)d." +msgstr[1] "" +"Листа садржи %(show_value)d ставке, не би требало да садржи мање од " +"%(limit_value)d." +msgstr[2] "" +"Листа садржи %(show_value)d ставки, не би требало да садржи мање од " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Неки кључеви недостају: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Дати су неки непознати кључеви: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Овај опсег мора бити укупно мањи или једнак %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Овај опсег мора бити укупно већи или једнак %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..da459f2932d7b3b9edc59bfb085c55164a7695e3 GIT binary patch literal 3092 zcmcJR%WoV-5QiHGuLS~x_cN71A}`78!vQJUcoUR|B?mh;v6B-LYVWjndv~UL=zU8GQC`#wNhy-~sSm z@DhBv2oiqldl_qjAA?80pFr>5_WKxn8QcZ>^-Y4_UJLYozE^zz9DE7Ce*m{Z@3n$| z+|O7IPV3ivw+H4MnFd+^*snaT6}}6j2+Wy6q3@8BF#fOIX`=fLhg8lolrJ4 zf?S6?JftPVRa+2VS~^Z5;Y74dZ6ml7#!D&EhQvE5kH~4-GZx8My0W4$HC_}#nQFSsFH~Dsh;oQ}Avs__QPQ+Nba-Fgzsjw1=8N-(;giAiixpQ!>!KNkDw6t|hf+JoEW2$nscFBvjjVDr`<$hqRu5bDG3CCzQqRS~jmC(i6*; z5Pm_iv=(+6SeqX#7Xqp3Dcx5if{D?Y3`IC1x!^52Zk+emn;#Tbo>x9c#JQG$r~Zpj z;X0uT^ON&L_2XABe39EP+p8D8^p)wS^J3w?9R1R`qWmFA+<@F$rbML$i8WLUgn>y8UPZDx$IEMcQ7!vsj6X;B^Gi~ht>g7-< z$jKG7{yYu4c?B<~VTz3Q^^zj96v}t>tm)y4T0ttJ>S3lAby4zY!pOA{na{iF$QgpB zEXg8uy{JMHhnE<+K50aBPD71D`R8qd`_zr~>Sdq6n2{LK)6_G(%L{=DJ6jYR?JiE2 R-GdStM#3*G?<<4j\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL ekstenzije" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Stavka %(nth)su nizu nije ispravna:" + +msgid "Nested arrays must have the same length." +msgstr "Ugnježdeni nizovi moraju da budu iste dužine." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa znakovnih niski na znakovne niske/null-ove" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Vrednost \"%(key)s\" nije znakovni niz ili null." + +msgid "Could not load JSON data." +msgstr "Ne mogu da učitam JSON podatke." + +msgid "Input must be a JSON dictionary." +msgstr "Ulazna vrednost mora biti JSON dict." + +msgid "Enter two valid values." +msgstr "Unesite dve ispravne vrednosti." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Početak opsega ne može biti preko kraja opsega." + +msgid "Enter two whole numbers." +msgstr "Unesite dva cela broja." + +msgid "Enter two numbers." +msgstr "Unesite dva broja." + +msgid "Enter two valid date/times." +msgstr "Unesite dva ispravna datuma/vremena." + +msgid "Enter two valid dates." +msgstr "Unesite dva ispravna datuma." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista sadrži %(show_value)dstavku, ne bi trebalo da sadrži više od " +"%(limit_value)d." +msgstr[1] "" +"Lista sadrži %(show_value)dstavke, ne bi trebalo da sadrži više od " +"%(limit_value)d." +msgstr[2] "" +"Lista sadrži %(show_value)dstavki, ne bi trebalo da sadrži više od " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista sadrži %(show_value)dstavku, ne bi trebalo da sadrži manje od " +"%(limit_value)d." +msgstr[1] "" +"Lista sadrži %(show_value)dstavke, ne bi trebalo da sadrži manje od " +"%(limit_value)d." +msgstr[2] "" +"Lista sadrži %(show_value)dstavki, ne bi trebalo da sadrži manje od " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Neki ključevi nedostaju: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Dati su neki nepoznati ključevi: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Ovaj opseg mora ukupno biti manji ili jednak sa %(limit_value)s" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Ovaj opseg mora biti ukupno veći ili jednak %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e5e37a4186a1a7d7258f596dc3b3909d70eb70d GIT binary patch literal 2787 zcmd6ozi%8x6vqb$1P%xg#Ls|uDI(bGmsdJES#xZcLK^cZd!KY(w5KY}aZuiy>v-NzX_3--Ws;OF40;2!uIcn^FX{23(h zPw*mm<_X5W0-NBM;P2o&;GI*9O@Lp6uYmVK0{;Lf!P=9IT?O9*KZAzbU|jd7rx;s{ zcHk=5Jk8jP;2n^_yWpGPJuuq;0>-`m1zrG8Kh4-Qn1J7dx4`efbI+7|?t_={`)@GL zo2fB&9$Wxtz&7|Hco&2$_AIVAActYg#dy9VBp2fa+@nTpeQZEdu?AeRGu0Q!DF(t& z#QQn$rScVnB*w1WTnjQbkhWaVN9(IABzWL;HgA0HB!xB)xG7JLn^Y1WS~lxy8KfRi z>Ld@+MJq$rk-VLAO~KNI39T{}ZuPj%<)lBMJ1xCGk*{LSz9o}qo6;5T_g`T}CE^}r zBdAOs^X&nz3#nu8`)#Y`;Tnskn+M8rA81n&uY#poL0QAypw1S9%&>D4+LNA?!A@Z2 z93PN?q!{Ev9Hcebl7gF-HGwPRG0C@WzlxS11xJ@~C%ld4Q`x}i_Q3 zKMJSE_{?mXJ?2O*{1=@M@wv>qWVgr%r%Z|@vipw>lWXnSiu6H>@;H2Xh;81B`7O!w zOp=x+4edHxvpyiL*FRn&xf7)EI9<=yElfIc;0fWElqv7AP7`~JFDEO5+;oiXn-RmV zvpprG7_r=lD+caD)Ek#C3#-Vhm?LthC80Eakw%OeL7lVPvK5j=k$j58hqfk(ZB(YM z-IQJHLbB{rC6a4->XQxIq}tkQa#QwHG)+E;sYf$YGgHabL!2My)X^jw zrLcYIYI?)>8k4o<#pU_KElk&^YS&Q=(m=zY3y}fAZ*(=PW0qQN?z{|hpKL57R}Sss zT3ga3^QL7*aT-@PRXC8@B;Tv8>D+OhELfNMCYf&W)6dP!Qu#PHVd(rEO;66&*p1u> zG&rar&4nlnJSn^3`f#^{c!%Mx*2F^~A&udMu|rX78tyur>hN2K>=^DEl3Jrqwd!!n zaGK+_iY{{^hnX_sg#H!=5TPjahIsnS8EJa)xALt7NmJ;dO_pL*CKHa+II zEp@S0)ftC-s4?_7$C0^3drZVgdz{xY!vP}}RfjCA5vHkXb;`iU&=yTnI$kzO{IMuw zWP7+*MD$3fw42+q6D}dfsJg-w3J&Z!Z9#Pv!SN%g+R*>nd(5DiOOHbNvA!43#Nt01 zZMor|iCq*DQVI(BRsAShDqDaHfq&SdLn7UIb)1f}kwoCV*j_VEI=T@f?KO!mhr4OY zR)%{ia>fi=9nDcjykoeKsMmw;T3Of*oS-oGc`&1c1UfQhJ+@e61q8&BE~-?9!z3xv PbhKi<&I1g_?d$9x^Vf3M literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 000000000..cddfd8e5e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,111 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Gustaf Hansen , 2015 +# Jonathan Lindén, 2015 +# Petter Strandmark , 2019 +# Thomas Lundqvist, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-tillägg" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i arrayen gick inte att validera:" + +msgid "Nested arrays must have the same length." +msgstr "Flerdimensionella arrayer måste vara av samma längd" + +msgid "Map of strings to strings/nulls" +msgstr "Funktion från sträng till sträng/null" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Kunde inte ladda JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Input måste vara en JSON-dictionary." + +msgid "Enter two valid values." +msgstr "Fyll i två giltiga värden" + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten av intervallet kan inte vara större än slutet av intervallet." + +msgid "Enter two whole numbers." +msgstr "Fyll i två heltal." + +msgid "Enter two numbers." +msgstr "Fyll i två tal." + +msgid "Enter two valid date/times." +msgstr "Fyll i två giltiga datum/tider." + +msgid "Enter two valid dates." +msgstr "Fyll i två giltiga datum." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla fler än " +"%(limit_value)d." +msgstr[1] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla fler än " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla färre än " +"%(limit_value)d." +msgstr[1] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla färre än " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Några nycklar saknades: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Några okända okända nycklar skickades: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Säkerställ att denna intervall är mindre än eller lika med %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Säkerställ att denna intervall är större än eller lika med %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e69e93f338ea9d9fd36a56c9cca1a60f103d383 GIT binary patch literal 2688 zcma)7%WoS+93Dza!MrQ+Mq)rhBx=`of+`iKi7HAfg*JU9AaO!d?_|C0de_~Vjgy`d zr@cnkZv6GglBaOe=-QVN;y~cm<9lF7= zUdDbK`xorju=hWKAFNg28^EuCCxJf$j|2Y&?gdWnV(cy88Q`nHDv42z@|Jui=D0KaDZ#Zjs%fsb3f4B3xv%- zojG-q+d_*xJL;<_lw4PY#*eFbD11k99Lhnp=1DERMec-BXc>}}&x4T5i;?iS4*2`S zo?CVGm-E7ljC$p>Ny!E=CfDu=-L#6ENHhX|L5ByUMEzyysuXR zPxgIG`L#&%YNRwjC%Nb)%Png+@I|g3mS9R>q;GE#0=qCcFU#7RvaQciC~zxr`#d@+$eoq7Ak@~ha$MW`IC7LV z82kg!y3&Ob4LOnB>=C*8i;EYq)_vO>yPttMTAP~iO*(_ zSqJ-an;tE$BPTJoqS#>RPioEY}`yAynL zWIV^rb<>HL%-wj!JTPt3PMXv*Ez`kncJG)DH}~U}_*%RiFPmn(#39#=S0UfZGjkK4 z8s@%fLiYiWS8=#))=i6>yRenMybKS^INmc&ZZ=FizK-wlb#88vJvd6S3B%CC1NG9j z+hCg`b0<-4k*ocwFHmi!M0j@%-oPnt;AMw+Py`KpZ-PX-yOwx)m|bECMs_CmFt=~x z6%NzLmuXQz966w*wkghKFxViT$ktDgpzI|ww^G4ocP(ykD6Ygy*vs_LSML=jRfiu$ z(IK0O9g1u~Z%5aeZa+8MvhP@mh=mf`Ww{OQSNo~0NH78-lrA?NUo`I+vavJ zZC&cX)s!`AVeX)lHz2hdH%jQ|zI?BDvJ00QbK8~s2k2Fz_1hU+6T=&G;(y8#UwxO-9o4rbTYh@zh`R z3spQ0=9C5+!il4S%Y0{xl;RFz?v-XRQq&3kZ2mw{7(^1>!X+!tRhmt6j~b!_QQQ)A z!K^1dAL8-@dV{739k}IEp*o@gC}C6p7{DYBTm$5c($S@2V`AV8Ca%ySqXng;ComsP Ob1S8kUWzc4Xa51WxW>Hz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..fffabf5c3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,101 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-15 00:32+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Расширения PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Элементи %(nth)s -и массив санҷишро нагузашт:" + +msgid "Nested arrays must have the same length." +msgstr "Массивҳои воридкардашуда бояд дарозиҳои якхела дошта бошанд." + +msgid "Map of strings to strings/nulls" +msgstr "Массивҳои strings ба strings/nulls" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "Боркунии JSON-додаҳо муяссар нашуд." + +msgid "Input must be a JSON dictionary." +msgstr "Қимматҳо бояд дар шакли JSON-луғатҳо ворид карда шаванд." + +msgid "Enter two valid values." +msgstr "Дуто қимати дуруст ворид созед." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Оғози фосила наметавонад қимати аз ҳудуди худ калонро қабул кунад." + +msgid "Enter two whole numbers." +msgstr "Дуто адади яклухтро ворид созед." + +msgid "Enter two numbers." +msgstr "Ду ададро ворид созед." + +msgid "Enter two valid date/times." +msgstr "Санаро бо вақт дуруст ворид кунед." + +msgid "Enter two valid dates." +msgstr "Дуто санаи дурустро ворид созед." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Баъзе аз калидҳо истисно карда шудаанд: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" +"Баъзе аз калидҳои овардашуда ба руйхати калидҳои маъмул дохил нестанд: " +"%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Мутмаин гардед, ки ҳамаи қиматҳои мутаалиқ ба ин фосила, кам ё баробаранд ба:" +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Мутмаин шавед ки ин фосила зиёд ё баробаранд ба: %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..06bda56406f203666bba747e9af7066e2dddd63b GIT binary patch literal 2789 zcmd6oOK%)S5XTz`5H=7(5RWK4iin2|o?Y7rVr^ms2~IGv^Rgiq1nS*s&$hRxd(++H z_4P^19EXNcTj>vEP+P;2HcQ>lq>KNkofoP+Fm;(3PO=+spq%TQ(awET~&L1 z?~X4R#^adJV1AGJEaucbcwqbl?gM`YPlCUKC%{+lWo$3F0PY7r2cHBlgHM6iz^B1q zKmz{+zXf;S$JjUERq%Q6;~k6*fS-a-fGZ$@tKcAb9Xt%~yq~ex!3pp@Z0LY5;{Epr zy7ugOkg@mh{t+1Lx(vPy{s0Dle(UisF!;HDCu7fnW8in-Iq)jD>!GeaIXHy(KfvI} zzEW3y6dcC;8E_2z3=DSu2*Rw50karfF2=(>!sKG?#`953gkZ~nX@%`j#UAN>fmy}f zAPnp=%w3p!FvEapj2$(Zib)$!%J7)ppE-4sV(xjFO=y={LB7E~9@3HJIuV2)b(6M~ z@IrMcv4VSHgOny?Nu1BPB5&xW0VPxEKUv@^6NBy!)hXfJ9qB60Y#Y*9S`)TVzrKVM zWgL7E6)#h9i*Nt1T$s9Lz1=WMY@RWxTbZXcbDnB~crRG8?xoS(cFJr@;#1vd&!u(< zfoqs{F9I=1FVZ1A39BLIJvqdl=0tlvhFjwn-+@kdHt0NQFNB;G1RKO@XZlzo1k)hjXg%Ei4Z91Tx*!rmgz~Th=VdSj2sjv*AR~tq=Bw{-Xc_HVRMmuVg1I1FN^aB-Hi)hg=!1idC&1sV!?HIWX-&&`)D$b zK12b)pDM-ks8CZnD_X|-Xxb$*j*euBi)KxgN~cdnXT^dHqS3pkjw+1~j}Aw}2cwZU zXync6=)u>9F-lY1`DhmQJH@@RRXQhBP1KuooLeR7aJ&1OSk-C2oupi zCnA~^Jgw4fW}B(dG|=$ARjpLo?RMD*t#VE*h8>lzx$989?G@jw43?%RrzbWY8z~Q$ zj-srDhGm@=O!v6PN=u>64pF_qtrLFygV|%z*rr@KYfji`Lf1`P-0N6P`VBLoqggtw zGRswT%-GabNwe z=m2Y9XC#{vDalnQ>8xGcRw(WjPO-ppzRIJRQ!~HPit}rU)Pj=y$`aOvmsYM_{P()} zQj8-tze&*~402p|!h;fMUt$|eu}R>G6FOhkveM>>M^g_Xg$Xx{!OUBIt?>rV-uN2A zP@F0pcYS9UijPBV?NYacI{2+Z47y=d2;-5A6nZHFw5^E>C6H9;zuXQH)T(XqjbpgT zmuN#STnzrF;(S@f(*A!nheWtrR^MLtOh`B-Le3!%y1y$mvvx^kO{6(;6m1QmW|R3! zB=Z$CN{&X^?rkZuIa})Jknfu}*w=9rXco$+xDzYciF~;xE%AH>?Sxw-ylM6|(%$Eq zR8pq`6}F7~T$k-87n*wChIck9t;S(9x=3dp*=E)*W;!H8&>xDmDAE2*IM8de2S~%~ SdEt<*!Tt5p3?V4;hW!l|?tQ)h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.po new file mode 100644 index 000000000..6253652d8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/tk/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Resulkary , 2020 +# Welbeck Garli , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-07-15 16:27+0000\n" +"Last-Translator: Welbeck Garli \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL giňeltmeleri" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "Iç-içe massiwleriň deň uzynlygy bolmaly." + +msgid "Map of strings to strings/nulls" +msgstr "Setirleriň setirler/boşluklara kartasy" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "\"%(key)s\" netijesi setir ýa-da boş däl" + +msgid "Could not load JSON data." +msgstr "JSON maglumatlary ýükläp bolmady." + +msgid "Input must be a JSON dictionary." +msgstr "Giriş JSON sözlügi bolmaly." + +msgid "Enter two valid values." +msgstr "Iki sany dogry baha giriziň." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Aralygyň başlangyjy soňundan ýokary bolmaly däldir." + +msgid "Enter two whole numbers." +msgstr "iki sany esasy san giriziň." + +msgid "Enter two numbers." +msgstr "Iki sany san giriz" + +msgid "Enter two valid date/times." +msgstr "Iki sany dogry senäni/wagty giriziň." + +msgid "Enter two valid dates." +msgstr "Iki sany dogry sene giriziň." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Bu listda %(show_value)d element bar, asyl %(limit_value)ddan köp element " +"bolmaly däldir." +msgstr[1] "" +"Bu listda %(show_value)d element bar, asyl %(limit_value)ddan köp element " +"bolmaly däldir." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Bu listda %(show_value)d element bar, asyl %(limit_value)ddan az element " +"bolmaly däldir." +msgstr[1] "" +"Bu listda %(show_value)d element bar, asyl %(limit_value)ddan az element " +"bolmaly däldir." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Käbir açarlar ýok: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Käbir bilinmeýän açarlar girizilen: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Şu iki aralygyň %(limit_value)s'a deň ýa-da azdygyna göz ýetiriň." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Şu iki aralygyň %(limit_value)s'a deň ýa-da köpdügine göz ýetiriň." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..aae4c969800fa6e5ba573b6e94ffa0e8a5dec66d GIT binary patch literal 2898 zcmd6o&u?2r5XToN1aJv3T@TY0V!mOTCsfZ?2Bz*WYMnN-E3jVEPzOefEsK1DJ2yu=o?ORXT^ z;2tmO$Z}m5gpZm@T1t4KI#joUdtrl=CSyswlX6Ag(EceU6Y1Yx<0=(Jw@r0QIJYfb zxy`mAohDUbbM@mXSd?)%gD88Mh+C}PWIA_s(|o&Ol(=DIQMXc0N$NaR1@Td^WX(&X zx$TtLq8ABHu6?8ENNSt}V%G8w#c(MEId=}ORoIe*nwrs`OYN}9HB5UHt(YVf9mJb3 z8}c)fg9=&|?Qy&}$2czivrczAl-@#TVusbDx75Oa@$+wVF7p15 zN;!5)I4|O1I@~ac4ZarYTae?4ASHC&H%jb`aUNxT?$sp{>t1Mw>^gSNK%^-;ju3u9 ziF6KjDmYu1ERFzqUY8Je}nnq#meg{)QDKG33wV-gpM}} zl~~xE7iyTle(}@Xe$idO_*uA_VLKlkJY2_cbezbV3!>(u#W;Emmj&mkP<#Qm*%Z!- zma#rsc6Av?^J(2hE2ct)GpD1oVoe6o=y)hsnw_4Vj;3FXW@hnOnVvZ?jZs+Q&POZo z-zn~mtx*0gSH(Kb!eWO4Eg7xIjX~hfWJldL*peQn*obRBLeSgguU_2+;Vxm zvIzP5c=Pa#o#)croS>Kk}aoLslSBV9T zjJxdME5s4Ok4@IIDas`Y!o&6|wzkz=m}EGc>==7+YiAl|CFCUL4Nkl}6i$#+{HaLz z5Zd!hzPV~-q%M`P<*K>XQ{19VQS?px-3{kaxTt4^@Hxq{D}zh9b746o z5*vwkG|DdRrdp*<&!Hf}{!!XDHRH6)wa@x6koDO-?_wL*yn*TrhDFoK=0uYn3RGc6 zC!&LdPRNG)suFpvHzEJh#9giOa2Q?B`n6zWaz%P<3l$2Hgip9StkBI3d349Ait5fI QLb%^Crx2{X)FhhopKhD8\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL uzantıları" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Dizilimdeki %(nth)s öğesi doğrulanmadı:" + +msgid "Nested arrays must have the same length." +msgstr "İç içe dizilimler aynı uzunlukta olmak zorunda." + +msgid "Map of strings to strings/nulls" +msgstr "Dizgiler/boşlar olarak dizgilerin eşlemesi" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "“%(key)s” değeri bir dizgi ya da boş değil." + +msgid "Could not load JSON data." +msgstr "JSON verisi yüklenemedi." + +msgid "Input must be a JSON dictionary." +msgstr "Bir JSON dizini girilmek zorundadır." + +msgid "Enter two valid values." +msgstr "Iki geçerli değer girin." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Aralığın başlangıcı aralığın bitişini aşmamak zorundadır." + +msgid "Enter two whole numbers." +msgstr "Bütün iki sayıyı girin." + +msgid "Enter two numbers." +msgstr "İki sayı girin." + +msgid "Enter two valid date/times." +msgstr "Geçerli iki tarih/saat girin." + +msgid "Enter two valid dates." +msgstr "Geçerli iki tarih girin." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha fazla " +"içermemelidir." +msgstr[1] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha fazla " +"içermemelidir." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha az " +"içermemelidir." +msgstr[1] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha az " +"içermemelidir." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bazı anahtarlar eksik: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Bazı bilinmeyen anahtarlar verilmiş: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bu aralığın %(limit_value)s değerinden küçük veya eşit olduğundan emin olun." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bu aralığın %(limit_value)s değerinden büyük veya eşit olduğundan emin olun." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11c7796a97447d9022865d1b9e5bfae191a423ef GIT binary patch literal 4418 zcmeHJ+iw(Q6#o!JUA*G`et3{{L-$rnLbu(ba!HCUAQT>q(G1X42HVoPLRfVCK~KPyzOW@BwmKy%OSYrPa*QnP z+_!rdWesJ-#dg~(xsp`gQ1~%Dat%8t34i*WLeY{+T0@j`rJEXbR@TjH^%+VH%b zcPv@=(PbA)iV7u9(LqT@HCSe!G9BA+hvK43$pUt6t9;ZW)5cC9=DNlZWkHF9tjU2| zT6CK*)92XAFl`S?UfwBJqm?BShMMt9c*^;y%E1Kn%W^H=jWN!~|K6r|Cyd_2X2A)o z$6izm|AgmX*z7Tih@9Hrgk7>MPwbMOlG!jFUYNwZG062T$ukO)ENSOd zJ}&k+o!3XF3U0vI^bANU*0sS z!{l{*u)2OZS1?Q~j{eaJRXbNQax&H{jY69C54iXcOmvZ^yi&z-FZ%f*sH&g_FgZ= z<=9uhbYt7?J}0Y_yZNB0=82}MG!WTim0ZJ$?QqirzD&|OtW&fFGBC1~LT83r>I&46p;lgo){{xrb-!7}V$dncG%hQUQ!Ye|3+@;xSGwQU!0=G)SDenQ|B-Z1Gs*&Mq{n*K#?< z*0_)^2cz{`(eco!Mqar}cys3vqe?aEBgkqvWrI=91czYCALrO;YYh?O+DHrkOO(%) z4%IYN!W!ZNMJg6eU$|M|su=+Z%ZyQ1-YE*sfR~Po_Qwp));AH7s1?ZAq7uXaTs9f5 z>wgs?f9!uc3r}v#uAOVurZ|qWIvI>|Z_ppa4TrpC*N#7R8>zbUbZ)bh|HFhndR;+8@==#q+Zt?G!c2 zQ$e>s9uPd3N8ucHcxr$lhVTi_^@0DaSTYYjLFlp8pkM9f+|(g~5x@`T%`G%` z3434$BalLCUvz5V0ikeg0py(HJ-w?GYo_I, 2015 +# Denis Podlesniy , 2016 +# Igor Melnyk, 2017 +# Illia Volochii , 2021 +# Kirill Gagarski , 2015-2016 +# tarasyyyk , 2018 +# Zoriana Zaiats, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2021-01-19 23:59+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Розширення PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Елемент %(nth)s у масиві не коректний:" + +msgid "Nested arrays must have the same length." +msgstr "Вкладени масиви повинні бути одинакової довжини." + +msgid "Map of strings to strings/nulls" +msgstr "Асоціативний масив із рядків у рядки/обнулення" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "Значення “%(key)s” не є рядком чи null." + +msgid "Could not load JSON data." +msgstr "Не вдалося завантажити JSON-дані." + +msgid "Input must be a JSON dictionary." +msgstr "Значення повинне бути JSON-словником." + +msgid "Enter two valid values." +msgstr "Введіть два корректних значення." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Початок діапазону не повинен перевищувати кінець діапазону." + +msgid "Enter two whole numbers." +msgstr "Введіть два ціліх числа." + +msgid "Enter two numbers." +msgstr "Введіть два числа." + +msgid "Enter two valid date/times." +msgstr "Введіть дві коректні дати з часом." + +msgid "Enter two valid dates." +msgstr "Введіть дві коректні дати." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Список містить %(show_value)d елемент, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[1] "" +"Список містить %(show_value)d елементи, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[2] "" +"Список містить %(show_value)d елементів, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[3] "" +"Список містить %(show_value)d елементів, кількість яких не має перевищувати " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Список містить %(show_value)d елемент, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[1] "" +"Список містить %(show_value)d елементів, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[2] "" +"Список містить %(show_value)d елемента, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[3] "" +"Список містить %(show_value)d елемента, кількість яких не має бути не менша " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Не вистачає наступних ключів: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Були надані наступні невідомі ключі: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Переконайтеся, що цей діапазон цілком менше чи дорівнює %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Переконайтеся, що цей діапазон повністю більший чи дорівнює %(limit_value)s." diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f2d4c0dbc4d4deaba13da3add3ceea9ac9aa9e72 GIT binary patch literal 703 zcmY+B&2AGh5XTLa%N~&s7Y=g)QdQ0uLajDU#aAmuG$oXj6PHOm-F4S%C$=|V@4=BX zZ^Ba`o`u;2S~1d3|Mhyt^S9^sqrGo}V~=^t95WA@uS^{?=75v*i-V`GjV&>`dr*oiHBpbA|L5#e+p=p!@CBKlb|D~XA z&}J^Vq?z+k4nwAud|PEfj$I1L=%c)(g|1WO``Q9@+ugQoAIk14=p3eOvKi~c^);>P{MOF(KQVucTh*qup9}}X)4Th1n(gGBv-}2Za6RK2 zM1GOh%%HYCnC9pM#s1a!Odj3k)xECC%TqgbO4}@jqlu2UCR3<3$;eb5jXZO{3@O;z zb{YDe9_&8*?Oq~=7=m8hj+YFTY(zuEp!A%5m#B0q2GhLIP;QeAdYEVrD{Z(u*g;DTq4>sTUJia!+x)l2{Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 000000000..ca8a24c4d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,95 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abdulaminkhon Khaydarov , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-07-25 17:13+0000\n" +"Last-Translator: Abdulaminkhon Khaydarov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL kengaytmalar" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Massiv %(nth)s elementi tasdiqlanmadi:" + +msgid "Nested arrays must have the same length." +msgstr "Ichki massivlar bir xil uzunlikda bo'lishi kerak." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..534fde406ebc1f2f847ffdbd1964d03093fd09f0 GIT binary patch literal 2574 zcmcJP?QaxC9LGn+r}GK%3Gr!SH1+~}cdaoY2bf5Kq(}?W>MIkny`A1I?CqXAb3JNe zawx^t6vaS2EG5vSML_!ifpQ)P{ReoViLZG9w|m$4qA&D~FHHQ-?)Fg-jB%3L&+N=^ zeoyn8xxQjqKS6sM{YCUL`b+2^-h&U?PvG<5&tMDqEBG!Lzn72|-~sRj@LTX%@FMse zcnw?$RzM2=39bfTzK@X8;8ySy_#5~NIIxV6IEFr+33&%>2q-|QXA*n^yaq}?e-F6)A%A@hDC6D;O8dJ&8DCGpU%*%KPah`a zHLwwsxk`bnz)wJ#ucM%}GYLk)>mb}CkD$x;06J3OwZ{U&b+0{v?{ajcVo`&u&QKRX4Bx+Y^_QK6^VZPsov?YX*WK9{l#HgBWJ%wz>kXSty5jH*Gh^n}nY zQ?k_&|2VjRh$*#G);FVEO*3jRGbvILvcuv6W!?JTHp=!2W^$Y^C#@Dl z_OLEak$y(gI_IzxM{II390+91J*Jg27YJr-t5esQwm`B?S`?}+q`%U=mkI-7F!LCQbPOmj&^} zskR%p*$VAs8Os(*Gf(Q8vN4!ctg-E4%u=d#%=ZllID_7(j>h@2#2gh#aKP9#COVy#V%GB}N_=wY2 znl4;$4s^S{d3Uha$(Nns?<%D)-JWl%qrDg`xhkCAg@%c*@2uhKVW)efQXH-n&%!fj zwBYGoI6K(u_V-i=_Pd14LT6l-`4ss!0`O6Gu1skblE*R zE|Ud+obIArgiQ7F{z`EaT7q|Udg#aMu`&1j5E3?hwy!q6Z>BszoSs5$=(Ka`ywlh1 z9QuCg`-x36YMJLa!RM9PYWI)xA%;5uHVbfi9?mrvFRgY z)pE%hK8HNay*_>#+`+Te6C*GMnZ>JK-Ieps@CCn8{V4o;tX@9sOk9-)7QH9_K|&m- RR4L|BI&%S`UggU|{sIp?&s+ci literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..d527a7c2b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,100 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Lele Long , 2015,2017 +# Liping Wang , 2016 +# Liping Wang , 2016 +# wang zhao <672565116@qq.com>, 2018 +# wolf ice , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 扩展。" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "数组中的%(nth)s项目没有验证:" + +msgid "Nested arrays must have the same length." +msgstr "嵌套数组必须是相同长度。" + +msgid "Map of strings to strings/nulls" +msgstr "字符串到字符串/空的映射" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "“%(key)s”的值不是一个字符串或null" + +msgid "Could not load JSON data." +msgstr "不能加载JSON数据。" + +msgid "Input must be a JSON dictionary." +msgstr "输入必须是JSON字典。" + +msgid "Enter two valid values." +msgstr "输入两个有效的值。" + +msgid "The start of the range must not exceed the end of the range." +msgstr "区间开头不能超过区间结尾。" + +msgid "Enter two whole numbers." +msgstr "输入两个整数。" + +msgid "Enter two numbers." +msgstr "输入两个数字。" + +msgid "Enter two valid date/times." +msgstr "输入两个有效的日期/时间。" + +msgid "Enter two valid dates." +msgstr "输入两个有效日期。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "列表已包含 %(show_value)d 项,不应该超过 %(limit_value)d 项。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "列表已包含 %(show_value)d 项,不应该少于 %(limit_value)d 项。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "某些键缺失:%(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "包含未知的键:%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "请确保该区间内所有值少于或等于 %(limit_value)s 。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "请确保该区间内所有值大于或等于 %(limit_value)s 。" diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7e72afdd6a4aec245b8d5888b7938615a1d8f974 GIT binary patch literal 2586 zcmcJQ+iw(A9LJA}xAl%!yx@6|q#K;wErtXaFos)FY`JySn3#}Z=X7^qc4nP(wo835 z3+d7}v`{76(ptnzTc}V$p|GiIeDg^Y{Re!YJF~m-fd_o?!Nl*G*_IYWYK$j2^Eo@` zH^1Na_dA#Ub?K4 zy`PYm@cSL`G4KOW=GhO*dYuO4_dkF#-tQpfkq6Lay9XU5@Y+LlLb}%;!Shjclwv`H zRPs1_0R7?m4CHugg|c|{e-M;R~Y?YWM7_ zS}&F!7rJGtc1MUb36?_Urbq@k)lFmqGuu`>s0K;0$euVzi;`v?ZsL|HRNdtGh$pRV zy;>U8;pk;NDc;KUsoTK?ZDZNldM~W87P`Gp{(m^Vh0m1b?;i7pz3^Xj{)5jJHBGHH z%7v|)32Y*3b{IA@hQY};#s$;-<>3AzCe?PizZvCficy1^36Ttu9TpeZ)~!36DcdiY z$+5bev|2FP$2vGg`58^=oFh&YxyhHox_`MFw8TpmZ6Ix@1Yy(})2 zCQW$@hXwgWskRrV*$V7pY0DN$3s2~pvLTb;O3aGVz>e+8F4nF~Q)QFfu5?voRYZxb zRvK4f7>zWpjGzUYRW6hm^m9WMmK~+uSZ`zd=>|wy_ZlqBL`F?8CC1cLlx|GwCgY4Y z#8f@2nnBu-6e1lBhqKviNJvNW;}C9`u&;0yM%_>N{p9Z0+u>lKrKx4}^>i9Tk-$bA zCT2oUM;d|!7B8GOaJtsgcv7`F6YJlMZBf=-x0B)8n5}F!9_mi)0Tuc4o`pDVQmK6i4oa<0=E>2r^tbNa`fuX>&QX=n75J5X}F2P%_27~F7L_#zyfKe`A9)lw1C zocx57JM0#U&g7ufwczbYk6Y-j40pPNWA4bwusd|HHgN1VR=1pXa;2N*3KtQXIN#@M zpLY9^Z@fcgwzZ)zobJJLak6suEUMw(rchn!nJ9mIsWvfKo$PT&zjh0QS4+dBT>J*s zPH*1nKLhIp*XZ0wS4+L+?+&?LJ=LxY&iN1LtmpqnX%yx%{=e{8F80Bx@6H(=zIplP zoTA?FTkY=h2jR-ZG%AE*JLjbf;`DbqQ@zgEpr3uMaM_t2_bXNTxajovN@eq|CimDy zC!Z&k(lqj^^-aMUsxfyP`I4l(<410u^*14cSEnvJrw+r+IeM;oDPKEqWNxZ5)$g7- dDWlHhdh55$Os=n79Iu`D#7{!*SuYJ~^%v;u&AR{q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..5a6f178b8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,97 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# Tzu-ping Chung , 2016-2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-11 20:56+0200\n" +"PO-Revision-Date: 2020-05-12 20:01+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 擴充" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "陣列中第 %(nth)s 個物件驗證失敗:" + +msgid "Nested arrays must have the same length." +msgstr "各嵌套陣列長度必須相同。" + +msgid "Map of strings to strings/nulls" +msgstr "字串與字串/空值的對應" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "「%(key)s」並非字串或空值。" + +msgid "Could not load JSON data." +msgstr "無法載入 JSON 資料。" + +msgid "Input must be a JSON dictionary." +msgstr "必須輸入 JSON dictionary。" + +msgid "Enter two valid values." +msgstr "請輸入兩個有效的值" + +msgid "The start of the range must not exceed the end of the range." +msgstr "範圍的起始不可超過範圍的結束。" + +msgid "Enter two whole numbers." +msgstr "請輸入兩個整數" + +msgid "Enter two numbers." +msgstr "請輸入兩個數字" + +msgid "Enter two valid date/times." +msgstr "請輸入兩個有效的日期/時間" + +msgid "Enter two valid dates." +msgstr "請輸入兩個有效的日期" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "串列包含 %(show_value)d 個物件,但不應包含多於 %(limit_value)d 個。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "串列包含 %(show_value)d 個物件,但應至少包含 %(limit_value)d 個。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "缺少鍵值:%(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "包含不明鍵值:%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "請確認此範圍是否完全小於或等於 %(limit_value)s。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "請確認此範圍是否完全大於或等於 %(limit_value)s。" diff --git a/venv/Lib/site-packages/django/contrib/postgres/lookups.py b/venv/Lib/site-packages/django/contrib/postgres/lookups.py new file mode 100644 index 000000000..9fed0eea3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/lookups.py @@ -0,0 +1,65 @@ +from django.db.models import Transform +from django.db.models.lookups import PostgresOperatorLookup + +from .search import SearchVector, SearchVectorExact, SearchVectorField + + +class DataContains(PostgresOperatorLookup): + lookup_name = "contains" + postgres_operator = "@>" + + +class ContainedBy(PostgresOperatorLookup): + lookup_name = "contained_by" + postgres_operator = "<@" + + +class Overlap(PostgresOperatorLookup): + lookup_name = "overlap" + postgres_operator = "&&" + + +class HasKey(PostgresOperatorLookup): + lookup_name = "has_key" + postgres_operator = "?" + prepare_rhs = False + + +class HasKeys(PostgresOperatorLookup): + lookup_name = "has_keys" + postgres_operator = "?&" + + def get_prep_lookup(self): + return [str(item) for item in self.rhs] + + +class HasAnyKeys(HasKeys): + lookup_name = "has_any_keys" + postgres_operator = "?|" + + +class Unaccent(Transform): + bilateral = True + lookup_name = "unaccent" + function = "UNACCENT" + + +class SearchLookup(SearchVectorExact): + lookup_name = "search" + + def process_lhs(self, qn, connection): + if not isinstance(self.lhs.output_field, SearchVectorField): + config = getattr(self.rhs, "config", None) + self.lhs = SearchVector(self.lhs, config=config) + lhs, lhs_params = super().process_lhs(qn, connection) + return lhs, lhs_params + + +class TrigramSimilar(PostgresOperatorLookup): + lookup_name = "trigram_similar" + postgres_operator = "%%" + + +class TrigramWordSimilar(PostgresOperatorLookup): + lookup_name = "trigram_word_similar" + postgres_operator = "%%>" diff --git a/venv/Lib/site-packages/django/contrib/postgres/operations.py b/venv/Lib/site-packages/django/contrib/postgres/operations.py new file mode 100644 index 000000000..b2d6d9f95 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/operations.py @@ -0,0 +1,335 @@ +from django.contrib.postgres.signals import ( + get_citext_oids, + get_hstore_oids, + register_type_handlers, +) +from django.db import NotSupportedError, router +from django.db.migrations import AddConstraint, AddIndex, RemoveIndex +from django.db.migrations.operations.base import Operation +from django.db.models.constraints import CheckConstraint + + +class CreateExtension(Operation): + reversible = True + + def __init__(self, name): + self.name = name + + def state_forwards(self, app_label, state): + pass + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if schema_editor.connection.vendor != "postgresql" or not router.allow_migrate( + schema_editor.connection.alias, app_label + ): + return + if not self.extension_exists(schema_editor, self.name): + schema_editor.execute( + "CREATE EXTENSION IF NOT EXISTS %s" + % schema_editor.quote_name(self.name) + ) + # Clear cached, stale oids. + get_hstore_oids.cache_clear() + get_citext_oids.cache_clear() + # Registering new type handlers cannot be done before the extension is + # installed, otherwise a subsequent data migration would use the same + # connection. + register_type_handlers(schema_editor.connection) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if not router.allow_migrate(schema_editor.connection.alias, app_label): + return + if self.extension_exists(schema_editor, self.name): + schema_editor.execute( + "DROP EXTENSION IF EXISTS %s" % schema_editor.quote_name(self.name) + ) + # Clear cached, stale oids. + get_hstore_oids.cache_clear() + get_citext_oids.cache_clear() + + def extension_exists(self, schema_editor, extension): + with schema_editor.connection.cursor() as cursor: + cursor.execute( + "SELECT 1 FROM pg_extension WHERE extname = %s", + [extension], + ) + return bool(cursor.fetchone()) + + def describe(self): + return "Creates extension %s" % self.name + + @property + def migration_name_fragment(self): + return "create_extension_%s" % self.name + + +class BloomExtension(CreateExtension): + def __init__(self): + self.name = "bloom" + + +class BtreeGinExtension(CreateExtension): + def __init__(self): + self.name = "btree_gin" + + +class BtreeGistExtension(CreateExtension): + def __init__(self): + self.name = "btree_gist" + + +class CITextExtension(CreateExtension): + def __init__(self): + self.name = "citext" + + +class CryptoExtension(CreateExtension): + def __init__(self): + self.name = "pgcrypto" + + +class HStoreExtension(CreateExtension): + def __init__(self): + self.name = "hstore" + + +class TrigramExtension(CreateExtension): + def __init__(self): + self.name = "pg_trgm" + + +class UnaccentExtension(CreateExtension): + def __init__(self): + self.name = "unaccent" + + +class NotInTransactionMixin: + def _ensure_not_in_transaction(self, schema_editor): + if schema_editor.connection.in_atomic_block: + raise NotSupportedError( + "The %s operation cannot be executed inside a transaction " + "(set atomic = False on the migration)." % self.__class__.__name__ + ) + + +class AddIndexConcurrently(NotInTransactionMixin, AddIndex): + """Create an index using PostgreSQL's CREATE INDEX CONCURRENTLY syntax.""" + + atomic = False + + def describe(self): + return "Concurrently create index %s on field(s) %s of model %s" % ( + self.index.name, + ", ".join(self.index.fields), + self.model_name, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + self._ensure_not_in_transaction(schema_editor) + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.add_index(model, self.index, concurrently=True) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self._ensure_not_in_transaction(schema_editor) + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.remove_index(model, self.index, concurrently=True) + + +class RemoveIndexConcurrently(NotInTransactionMixin, RemoveIndex): + """Remove an index using PostgreSQL's DROP INDEX CONCURRENTLY syntax.""" + + atomic = False + + def describe(self): + return "Concurrently remove index %s from %s" % (self.name, self.model_name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + self._ensure_not_in_transaction(schema_editor) + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + from_model_state = from_state.models[app_label, self.model_name_lower] + index = from_model_state.get_index_by_name(self.name) + schema_editor.remove_index(model, index, concurrently=True) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self._ensure_not_in_transaction(schema_editor) + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + to_model_state = to_state.models[app_label, self.model_name_lower] + index = to_model_state.get_index_by_name(self.name) + schema_editor.add_index(model, index, concurrently=True) + + +class CollationOperation(Operation): + def __init__(self, name, locale, *, provider="libc", deterministic=True): + self.name = name + self.locale = locale + self.provider = provider + self.deterministic = deterministic + + def state_forwards(self, app_label, state): + pass + + def deconstruct(self): + kwargs = {"name": self.name, "locale": self.locale} + if self.provider and self.provider != "libc": + kwargs["provider"] = self.provider + if self.deterministic is False: + kwargs["deterministic"] = self.deterministic + return ( + self.__class__.__qualname__, + [], + kwargs, + ) + + def create_collation(self, schema_editor): + if self.deterministic is False and not ( + schema_editor.connection.features.supports_non_deterministic_collations + ): + raise NotSupportedError( + "Non-deterministic collations require PostgreSQL 12+." + ) + args = {"locale": schema_editor.quote_name(self.locale)} + if self.provider != "libc": + args["provider"] = schema_editor.quote_name(self.provider) + if self.deterministic is False: + args["deterministic"] = "false" + schema_editor.execute( + "CREATE COLLATION %(name)s (%(args)s)" + % { + "name": schema_editor.quote_name(self.name), + "args": ", ".join( + f"{option}={value}" for option, value in args.items() + ), + } + ) + + def remove_collation(self, schema_editor): + schema_editor.execute( + "DROP COLLATION %s" % schema_editor.quote_name(self.name), + ) + + +class CreateCollation(CollationOperation): + """Create a collation.""" + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if schema_editor.connection.vendor != "postgresql" or not router.allow_migrate( + schema_editor.connection.alias, app_label + ): + return + self.create_collation(schema_editor) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if not router.allow_migrate(schema_editor.connection.alias, app_label): + return + self.remove_collation(schema_editor) + + def describe(self): + return f"Create collation {self.name}" + + @property + def migration_name_fragment(self): + return "create_collation_%s" % self.name.lower() + + +class RemoveCollation(CollationOperation): + """Remove a collation.""" + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if schema_editor.connection.vendor != "postgresql" or not router.allow_migrate( + schema_editor.connection.alias, app_label + ): + return + self.remove_collation(schema_editor) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if not router.allow_migrate(schema_editor.connection.alias, app_label): + return + self.create_collation(schema_editor) + + def describe(self): + return f"Remove collation {self.name}" + + @property + def migration_name_fragment(self): + return "remove_collation_%s" % self.name.lower() + + +class AddConstraintNotValid(AddConstraint): + """ + Add a table constraint without enforcing validation, using PostgreSQL's + NOT VALID syntax. + """ + + def __init__(self, model_name, constraint): + if not isinstance(constraint, CheckConstraint): + raise TypeError( + "AddConstraintNotValid.constraint must be a check constraint." + ) + super().__init__(model_name, constraint) + + def describe(self): + return "Create not valid constraint %s on model %s" % ( + self.constraint.name, + self.model_name, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + constraint_sql = self.constraint.create_sql(model, schema_editor) + if constraint_sql: + # Constraint.create_sql returns interpolated SQL which makes + # params=None a necessity to avoid escaping attempts on + # execution. + schema_editor.execute(str(constraint_sql) + " NOT VALID", params=None) + + @property + def migration_name_fragment(self): + return super().migration_name_fragment + "_not_valid" + + +class ValidateConstraint(Operation): + """Validate a table NOT VALID constraint.""" + + def __init__(self, model_name, name): + self.model_name = model_name + self.name = name + + def describe(self): + return "Validate constraint %s on model %s" % (self.name, self.model_name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.execute( + "ALTER TABLE %s VALIDATE CONSTRAINT %s" + % ( + schema_editor.quote_name(model._meta.db_table), + schema_editor.quote_name(self.name), + ) + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + # PostgreSQL does not provide a way to make a constraint invalid. + pass + + def state_forwards(self, app_label, state): + pass + + @property + def migration_name_fragment(self): + return "%s_validate_%s" % (self.model_name.lower(), self.name.lower()) + + def deconstruct(self): + return ( + self.__class__.__name__, + [], + { + "model_name": self.model_name, + "name": self.name, + }, + ) diff --git a/venv/Lib/site-packages/django/contrib/postgres/search.py b/venv/Lib/site-packages/django/contrib/postgres/search.py new file mode 100644 index 000000000..f652c1d34 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/search.py @@ -0,0 +1,365 @@ +import psycopg2 + +from django.db.models import ( + CharField, + Expression, + Field, + FloatField, + Func, + Lookup, + TextField, + Value, +) +from django.db.models.expressions import CombinedExpression +from django.db.models.functions import Cast, Coalesce + + +class SearchVectorExact(Lookup): + lookup_name = "exact" + + def process_rhs(self, qn, connection): + if not isinstance(self.rhs, (SearchQuery, CombinedSearchQuery)): + config = getattr(self.lhs, "config", None) + self.rhs = SearchQuery(self.rhs, config=config) + rhs, rhs_params = super().process_rhs(qn, connection) + return rhs, rhs_params + + def as_sql(self, qn, connection): + lhs, lhs_params = self.process_lhs(qn, connection) + rhs, rhs_params = self.process_rhs(qn, connection) + params = lhs_params + rhs_params + return "%s @@ %s" % (lhs, rhs), params + + +class SearchVectorField(Field): + def db_type(self, connection): + return "tsvector" + + +class SearchQueryField(Field): + def db_type(self, connection): + return "tsquery" + + +class SearchConfig(Expression): + def __init__(self, config): + super().__init__() + if not hasattr(config, "resolve_expression"): + config = Value(config) + self.config = config + + @classmethod + def from_parameter(cls, config): + if config is None or isinstance(config, cls): + return config + return cls(config) + + def get_source_expressions(self): + return [self.config] + + def set_source_expressions(self, exprs): + (self.config,) = exprs + + def as_sql(self, compiler, connection): + sql, params = compiler.compile(self.config) + return "%s::regconfig" % sql, params + + +class SearchVectorCombinable: + ADD = "||" + + def _combine(self, other, connector, reversed): + if not isinstance(other, SearchVectorCombinable): + raise TypeError( + "SearchVector can only be combined with other SearchVector " + "instances, got %s." % type(other).__name__ + ) + if reversed: + return CombinedSearchVector(other, connector, self, self.config) + return CombinedSearchVector(self, connector, other, self.config) + + +class SearchVector(SearchVectorCombinable, Func): + function = "to_tsvector" + arg_joiner = " || ' ' || " + output_field = SearchVectorField() + + def __init__(self, *expressions, config=None, weight=None): + super().__init__(*expressions) + self.config = SearchConfig.from_parameter(config) + if weight is not None and not hasattr(weight, "resolve_expression"): + weight = Value(weight) + self.weight = weight + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + resolved = super().resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + if self.config: + resolved.config = self.config.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + return resolved + + def as_sql(self, compiler, connection, function=None, template=None): + clone = self.copy() + clone.set_source_expressions( + [ + Coalesce( + expression + if isinstance(expression.output_field, (CharField, TextField)) + else Cast(expression, TextField()), + Value(""), + ) + for expression in clone.get_source_expressions() + ] + ) + config_sql = None + config_params = [] + if template is None: + if clone.config: + config_sql, config_params = compiler.compile(clone.config) + template = "%(function)s(%(config)s, %(expressions)s)" + else: + template = clone.template + sql, params = super(SearchVector, clone).as_sql( + compiler, + connection, + function=function, + template=template, + config=config_sql, + ) + extra_params = [] + if clone.weight: + weight_sql, extra_params = compiler.compile(clone.weight) + sql = "setweight({}, {})".format(sql, weight_sql) + return sql, config_params + params + extra_params + + +class CombinedSearchVector(SearchVectorCombinable, CombinedExpression): + def __init__(self, lhs, connector, rhs, config, output_field=None): + self.config = config + super().__init__(lhs, connector, rhs, output_field) + + +class SearchQueryCombinable: + BITAND = "&&" + BITOR = "||" + + def _combine(self, other, connector, reversed): + if not isinstance(other, SearchQueryCombinable): + raise TypeError( + "SearchQuery can only be combined with other SearchQuery " + "instances, got %s." % type(other).__name__ + ) + if reversed: + return CombinedSearchQuery(other, connector, self, self.config) + return CombinedSearchQuery(self, connector, other, self.config) + + # On Combinable, these are not implemented to reduce confusion with Q. In + # this case we are actually (ab)using them to do logical combination so + # it's consistent with other usage in Django. + def __or__(self, other): + return self._combine(other, self.BITOR, False) + + def __ror__(self, other): + return self._combine(other, self.BITOR, True) + + def __and__(self, other): + return self._combine(other, self.BITAND, False) + + def __rand__(self, other): + return self._combine(other, self.BITAND, True) + + +class SearchQuery(SearchQueryCombinable, Func): + output_field = SearchQueryField() + SEARCH_TYPES = { + "plain": "plainto_tsquery", + "phrase": "phraseto_tsquery", + "raw": "to_tsquery", + "websearch": "websearch_to_tsquery", + } + + def __init__( + self, + value, + output_field=None, + *, + config=None, + invert=False, + search_type="plain", + ): + self.function = self.SEARCH_TYPES.get(search_type) + if self.function is None: + raise ValueError("Unknown search_type argument '%s'." % search_type) + if not hasattr(value, "resolve_expression"): + value = Value(value) + expressions = (value,) + self.config = SearchConfig.from_parameter(config) + if self.config is not None: + expressions = (self.config,) + expressions + self.invert = invert + super().__init__(*expressions, output_field=output_field) + + def as_sql(self, compiler, connection, function=None, template=None): + sql, params = super().as_sql(compiler, connection, function, template) + if self.invert: + sql = "!!(%s)" % sql + return sql, params + + def __invert__(self): + clone = self.copy() + clone.invert = not self.invert + return clone + + def __str__(self): + result = super().__str__() + return ("~%s" % result) if self.invert else result + + +class CombinedSearchQuery(SearchQueryCombinable, CombinedExpression): + def __init__(self, lhs, connector, rhs, config, output_field=None): + self.config = config + super().__init__(lhs, connector, rhs, output_field) + + def __str__(self): + return "(%s)" % super().__str__() + + +class SearchRank(Func): + function = "ts_rank" + output_field = FloatField() + + def __init__( + self, + vector, + query, + weights=None, + normalization=None, + cover_density=False, + ): + if not hasattr(vector, "resolve_expression"): + vector = SearchVector(vector) + if not hasattr(query, "resolve_expression"): + query = SearchQuery(query) + expressions = (vector, query) + if weights is not None: + if not hasattr(weights, "resolve_expression"): + weights = Value(weights) + expressions = (weights,) + expressions + if normalization is not None: + if not hasattr(normalization, "resolve_expression"): + normalization = Value(normalization) + expressions += (normalization,) + if cover_density: + self.function = "ts_rank_cd" + super().__init__(*expressions) + + +class SearchHeadline(Func): + function = "ts_headline" + template = "%(function)s(%(expressions)s%(options)s)" + output_field = TextField() + + def __init__( + self, + expression, + query, + *, + config=None, + start_sel=None, + stop_sel=None, + max_words=None, + min_words=None, + short_word=None, + highlight_all=None, + max_fragments=None, + fragment_delimiter=None, + ): + if not hasattr(query, "resolve_expression"): + query = SearchQuery(query) + options = { + "StartSel": start_sel, + "StopSel": stop_sel, + "MaxWords": max_words, + "MinWords": min_words, + "ShortWord": short_word, + "HighlightAll": highlight_all, + "MaxFragments": max_fragments, + "FragmentDelimiter": fragment_delimiter, + } + self.options = { + option: value for option, value in options.items() if value is not None + } + expressions = (expression, query) + if config is not None: + config = SearchConfig.from_parameter(config) + expressions = (config,) + expressions + super().__init__(*expressions) + + def as_sql(self, compiler, connection, function=None, template=None): + options_sql = "" + options_params = [] + if self.options: + # getquoted() returns a quoted bytestring of the adapted value. + options_params.append( + ", ".join( + "%s=%s" + % ( + option, + psycopg2.extensions.adapt(value).getquoted().decode(), + ) + for option, value in self.options.items() + ) + ) + options_sql = ", %s" + sql, params = super().as_sql( + compiler, + connection, + function=function, + template=template, + options=options_sql, + ) + return sql, params + options_params + + +SearchVectorField.register_lookup(SearchVectorExact) + + +class TrigramBase(Func): + output_field = FloatField() + + def __init__(self, expression, string, **extra): + if not hasattr(string, "resolve_expression"): + string = Value(string) + super().__init__(expression, string, **extra) + + +class TrigramWordBase(Func): + output_field = FloatField() + + def __init__(self, string, expression, **extra): + if not hasattr(string, "resolve_expression"): + string = Value(string) + super().__init__(string, expression, **extra) + + +class TrigramSimilarity(TrigramBase): + function = "SIMILARITY" + + +class TrigramDistance(TrigramBase): + function = "" + arg_joiner = " <-> " + + +class TrigramWordDistance(TrigramWordBase): + function = "" + arg_joiner = " <<-> " + + +class TrigramWordSimilarity(TrigramWordBase): + function = "WORD_SIMILARITY" diff --git a/venv/Lib/site-packages/django/contrib/postgres/serializers.py b/venv/Lib/site-packages/django/contrib/postgres/serializers.py new file mode 100644 index 000000000..d04bfdbc6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/serializers.py @@ -0,0 +1,10 @@ +from django.db.migrations.serializer import BaseSerializer + + +class RangeSerializer(BaseSerializer): + def serialize(self): + module = self.value.__class__.__module__ + # Ranges are implemented in psycopg2._range but the public import + # location is psycopg2.extras. + module = "psycopg2.extras" if module == "psycopg2._range" else module + return "%s.%r" % (module, self.value), {"import %s" % module} diff --git a/venv/Lib/site-packages/django/contrib/postgres/signals.py b/venv/Lib/site-packages/django/contrib/postgres/signals.py new file mode 100644 index 000000000..a7da7b6cc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/signals.py @@ -0,0 +1,68 @@ +import functools + +import psycopg2 +from psycopg2 import ProgrammingError +from psycopg2.extras import register_hstore + +from django.db import connections +from django.db.backends.base.base import NO_DB_ALIAS + + +@functools.lru_cache() +def get_hstore_oids(connection_alias): + """Return hstore and hstore array OIDs.""" + with connections[connection_alias].cursor() as cursor: + cursor.execute( + "SELECT t.oid, typarray " + "FROM pg_type t " + "JOIN pg_namespace ns ON typnamespace = ns.oid " + "WHERE typname = 'hstore'" + ) + oids = [] + array_oids = [] + for row in cursor: + oids.append(row[0]) + array_oids.append(row[1]) + return tuple(oids), tuple(array_oids) + + +@functools.lru_cache() +def get_citext_oids(connection_alias): + """Return citext array OIDs.""" + with connections[connection_alias].cursor() as cursor: + cursor.execute("SELECT typarray FROM pg_type WHERE typname = 'citext'") + return tuple(row[0] for row in cursor) + + +def register_type_handlers(connection, **kwargs): + if connection.vendor != "postgresql" or connection.alias == NO_DB_ALIAS: + return + + try: + oids, array_oids = get_hstore_oids(connection.alias) + register_hstore( + connection.connection, globally=True, oid=oids, array_oid=array_oids + ) + except ProgrammingError: + # Hstore is not available on the database. + # + # If someone tries to create an hstore field it will error there. + # This is necessary as someone may be using PSQL without extensions + # installed but be using other features of contrib.postgres. + # + # This is also needed in order to create the connection in order to + # install the hstore extension. + pass + + try: + citext_oids = get_citext_oids(connection.alias) + array_type = psycopg2.extensions.new_array_type( + citext_oids, "citext[]", psycopg2.STRING + ) + psycopg2.extensions.register_type(array_type, None) + except ProgrammingError: + # citext is not available on the database. + # + # The same comments in the except block of the above call to + # register_hstore() also apply here. + pass diff --git a/venv/Lib/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html b/venv/Lib/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html new file mode 100644 index 000000000..32fda8260 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/venv/Lib/site-packages/django/contrib/postgres/utils.py b/venv/Lib/site-packages/django/contrib/postgres/utils.py new file mode 100644 index 000000000..e4f4d8151 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/utils.py @@ -0,0 +1,29 @@ +from django.core.exceptions import ValidationError +from django.utils.functional import SimpleLazyObject +from django.utils.text import format_lazy + + +def prefix_validation_error(error, prefix, code, params): + """ + Prefix a validation error message while maintaining the existing + validation data structure. + """ + if error.error_list == [error]: + error_params = error.params or {} + return ValidationError( + # We can't simply concatenate messages since they might require + # their associated parameters to be expressed correctly which + # is not something `format_lazy` does. For example, proxied + # ngettext calls require a count parameter and are converted + # to an empty string if they are missing it. + message=format_lazy( + "{} {}", + SimpleLazyObject(lambda: prefix % params), + SimpleLazyObject(lambda: error.message % error_params), + ), + code=code, + params={**error_params, **params}, + ) + return ValidationError( + [prefix_validation_error(e, prefix, code, params) for e in error.error_list] + ) diff --git a/venv/Lib/site-packages/django/contrib/postgres/validators.py b/venv/Lib/site-packages/django/contrib/postgres/validators.py new file mode 100644 index 000000000..47bb7bc7b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/postgres/validators.py @@ -0,0 +1,91 @@ +from django.core.exceptions import ValidationError +from django.core.validators import ( + MaxLengthValidator, + MaxValueValidator, + MinLengthValidator, + MinValueValidator, +) +from django.utils.deconstruct import deconstructible +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy + + +class ArrayMaxLengthValidator(MaxLengthValidator): + message = ngettext_lazy( + "List contains %(show_value)d item, it should contain no more than " + "%(limit_value)d.", + "List contains %(show_value)d items, it should contain no more than " + "%(limit_value)d.", + "limit_value", + ) + + +class ArrayMinLengthValidator(MinLengthValidator): + message = ngettext_lazy( + "List contains %(show_value)d item, it should contain no fewer than " + "%(limit_value)d.", + "List contains %(show_value)d items, it should contain no fewer than " + "%(limit_value)d.", + "limit_value", + ) + + +@deconstructible +class KeysValidator: + """A validator designed for HStore to require/restrict keys.""" + + messages = { + "missing_keys": _("Some keys were missing: %(keys)s"), + "extra_keys": _("Some unknown keys were provided: %(keys)s"), + } + strict = False + + def __init__(self, keys, strict=False, messages=None): + self.keys = set(keys) + self.strict = strict + if messages is not None: + self.messages = {**self.messages, **messages} + + def __call__(self, value): + keys = set(value) + missing_keys = self.keys - keys + if missing_keys: + raise ValidationError( + self.messages["missing_keys"], + code="missing_keys", + params={"keys": ", ".join(missing_keys)}, + ) + if self.strict: + extra_keys = keys - self.keys + if extra_keys: + raise ValidationError( + self.messages["extra_keys"], + code="extra_keys", + params={"keys": ", ".join(extra_keys)}, + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) + and self.keys == other.keys + and self.messages == other.messages + and self.strict == other.strict + ) + + +class RangeMaxValueValidator(MaxValueValidator): + def compare(self, a, b): + return a.upper is None or a.upper > b + + message = _( + "Ensure that this range is completely less than or equal to %(limit_value)s." + ) + + +class RangeMinValueValidator(MinValueValidator): + def compare(self, a, b): + return a.lower is None or a.lower < b + + message = _( + "Ensure that this range is completely greater than or equal to %(limit_value)s." + ) diff --git a/venv/Lib/site-packages/django/contrib/redirects/__init__.py b/venv/Lib/site-packages/django/contrib/redirects/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..696ef9973647a3204a682f8338729dc5c85a7f7c GIT binary patch literal 198 zcmd1j<>g`kf{$@`lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%~UQEEzN5m0%tetdjpUS>&ryk0@&Ee@O9{FKt1 OR6CFpikW}}3j+Y|G&Xwx literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/__pycache__/admin.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/redirects/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7925dd7b956db39935440b0b5375f7bfb42648eb GIT binary patch literal 637 zcmY+C&u`N(6vzD%r!`%=Gq*|HdRTi!6GEE?45Trk^5bAdSZeW~FKL1CBtO3&@yGVpsm9|GBm4RO+u{fq``#sYEurL?MtDdL8G>U4NPsSm zTvWs|24>(hH}MxZV;Cd9WylSzlbiSkFQ z^uOHW(kWc@u)po>X~Ln6eJpnXR8U zi|m>8p+0=&t2K#}U77MKJGYChJNw~A=O6USgbdfZTvfBYDr;{SGr!X^%zAmJn`_T$ z$L{Sy_q>Afhy#ax=<64gq1@jhraQ#;0tf#Wr+>Lq63DpVV}iB9n-%FoB8*;k0tp_Pm@e+a|Gx>H&%}mB5v)H}Xf5v}l zz>_DBUiIRaoo($0dHG(x-VQ0)nD9yM)J5aBqzB1O9Vv}HKd`8(%2^^ zX;PL^a!FLGvTsCXK<`qPtNa6*Pk!MGGN;4rwCm1nyVNTr#R@`zuR$2Oxvk@k$CV&C z!R22d0AW-SmMF?nm9PwQmEKV{Q5mY|!;@=J+Cd%sD86~FZe+W%rK-xtDloo0?SsA0 zVAST>ZdThiI9-+Q{whQL&_=R>p9KUz= z22Jrbv}^uOSKR9W$DOP{%N2M&`dI9IEFOF;WY_t!yLIuy@)+S1VM;QZ(SmMIujUhW zu*)Idb}?;spG+S#CKjA*y^%rN)}=Uhvj|c1zmu^$z_Vfcdd%nzMdl|61u5uJ`VS`^ Bqk8}V literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/__pycache__/middleware.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/redirects/__pycache__/middleware.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d31e6111c30f940112bf5fef2f856b5671ec0bd GIT binary patch literal 1852 zcmaJ?&2Jk;6rb6hwb$#lV@gC(r51~dg9UXsBZR1uHbJCOlu)6LEJo{{v9r#8xHGd& zVmSv$q@H@?4@i#vH~2GF;>3v~*B&Tu)*rP3Wmoh3=IzY;{JrO_(eMyFfBp1(|K}<~ zf0)hcLtyhQEENOch~pR~m||>rE4C7w+9hwtByp%y@+7V#Raz~1Cw7w>t(ANw_L4fS zCqDJdeKl?*P1?k08*!J{E)lPZ=7mkyxOa#;^*_NP>fnL| z8sx2^&@9ZQ6scw^(gI}b-z8(2jfITQHnVgP4Ra}Y$0}MoT8|He8fU2z+gU1#yQ`9Y zA(J2lJuB+hoep>b>VvF9801uz0p%n`MOO^I-5J5p_P zKT4Gb*9Gr(9BI5P{7A8-R91}0Q8|>Na2b4vG-FT*qC`BPzA2rYm*X`qYK(<(pcG@T z(VOGVuX<0Fkg9i(D;4y%vM^7eHmbKB>7BgadmKrnAMDF)1VHG$5b2BFZq)CYARmk& zm%&h|-pu)pc?LEB1|@FPMzSnxcYG!r;O81FW!k~R7QEzbi%jmnKRMk+IN<^Ta21(= zU09p2)Neqh)(G0>*p}6)b%>_;3SXmhTU%3nfzJs?=g!2__K1v}DVf^bdS#tEKcdtl z2&9#>&oDCYGnC>JG<7)2k=)hQkt=tncvQRcxD6=Soivv^@Cb9lomYUm8@j&#mo6;X z)EU)z<=B$Xrs&GQ2IRnR!$_|&@ZfW&x)=S5p%+crAi0H`#hi@;ee?!z{LsPl)*zFi zV9=)`tkrOM*N1(MhhI(vqs;`UOwDE;h1 zry`rBbt#_bLg~U?94u-}FR8yeR|+iU2gdD^+%mUYFl9mkfL&a^4N~&yxBL03WFq P5FhzaDf6~qt=s2%$D1%xw0c&Ayxe|-Z)GfQ&nrIwgHwpz1MkQe$9vy%S(1ezxS5$g$ zF%a5qw0*P@0%}dvT5ki^S$o23PaCxkdbSYmmW&W?bmg%~cIEaP!n$$?A@A1VG003q zYU{wPP)8S_lhOb$L=KCtUi;%yUFPq9LxkT~KR7wfOl+oQrDU8yEQ(kprc{-McqZ)h zUJUb8RWd6kv7JIJ%Uond?9Lp-Pv#<@DcFzSz5aO!7f@I;G$3?39lm@0%b@4iom|Yh zf?{H)nB9bDg@k$Co`RZjm&nD|H7;9L=NmjJ!ay*PVMzTErueQfh_bwZURu$4*8Ns&g%~6SdNtf)FaMcRzf*4(4t(oa3i~QlXyN;l@@B5d@B+KY^N%+ zmlbeZVliWSSy*Zb8ngB*(VyZ0OYzrav_F1fK%4P#WsDdSu2`4{77Su%Fj*Pn^>Tui`>S2r7`Wnp!e3^zA4!_|`-%r5J|CFVB9H4%!C zgfyf9?ck?B!-WN^_WW1BKgb z?xG0E9%iLUz0LPe^Y5VjUwgX~wU)cEV%Y6f>Idu84;(LMuuA(1WqZ9sCaY_Fxwb2t uDKoHI6h;Y~m4$YH*5zGTYx15H(P~0$ezA7n{M-}?dd zfM38%;Q1LLE`dLQz5hq>74T=U_x}o>1Ahlw;3weyUz`)75AJ}y-WRa9KY;U9@b;AV z!QS2h;}bpnAR#UQe(m@CI15}H&xANXWluf_NDI;8I5QkME85-6QX~uNFmdL(YzPb4 zv09amsV`lZ7Nmtm4|tI@wkaugW`Zlc9 zj*s3}C$Vf-mn!z*{*H5pcoeBJ_JT-+Vx7yZphD(crOlDd`-(#^TH^s1&ekkT6Llxr zW_lwrn^0nOe!6n{WNwAc9E+yW2Pi?X69>=O*i088#RsxTb*069ZCtQt(<}}im8lKd zI;2YTNzmd!=3Rrw(jl4U`tnjxUkU1~v~)MDuima>RCc9xLEFf}D(SQdX`?HRqPV1{ zVrxtepD! zSP7e8vxu~RmylLEnL9}|B$-s2sx(psTiWC{q@q7w+Q#x4O{R^7f^IfwX>qM0)}iN0 z!(uyQ6K704G{L9$3Eldm=VBT%ln%X=qEB*mUdHw~ zM<@D|^Rw=oubu?VHQbJmUjHkeSMW)p@i;3ADRU|_m$Fr$Dm@)%b2!l2beL8A-(K`@ a=E~BD*<^s)h_Q)aLPt+`P>3O$MEnMd=u=Pt literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..a484b843a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Charl du Plessis , 2021 +# F Wolff , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-08-09 13:09+0000\n" +"Last-Translator: Charl du Plessis \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Aansture" + +msgid "site" +msgstr "werf" + +msgid "redirect from" +msgstr "aanstuurvorm" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Hierdie moet ’n absolute pad wees met die domeinnaam uitgesluit. Soos " +"byvoorbeeld: “/events/search/”." + +msgid "redirect to" +msgstr "stuur aan na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Hierdie kan òf 'n absolute pad wees (soos bo) òf 'n volledige URL wees wat " +"begin met 'n skema soos \"https://\"." + +msgid "redirect" +msgstr "aanstuur" + +msgid "redirects" +msgstr "aansture" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..97afd319667bebee8f3e92e160b8f838c1c4d8d4 GIT binary patch literal 1336 zcma)5&u<$=6ds`bGU5U!1VZmZl?c}Bbt$wP7L-6LRcb^Ox$S||cz5F6vfi;~W|MHM z(mDy{zzI%psw$Tfi9!yMCH?}gNNDDQN+nLc@fYw-oW!UQiIF~i-^_dS-Z#(d-(NcQ z6~lTScn!#a7lB>CuLppS{Q-OmJOVxeu0FxobKpI&&;J?x0{9oO&;Jd43j6?kANUh^ z75lHBV(d%sPvAB10+L<)M(bp3r#7ns4GYmCKrmZ;ax4u+6WqOlhX{>IFV~&mL$ToT9+kVUb#ft zaAk_BN9(wWfKGGK7o_VHJ53L-f0G+C&~X?(y#8%-(o5&EE;HZm@jh>n*htGd^95mq zGTG-vMHTOhCM|C8{-6}GFB*z9Q5hX-!Bv`1YOBK+u_HmNO7^EaBagLax-fz*D|rng z2rg#96`^z?tC+HDyz0ruiWo>`f+gK6vS6X^>7XNHYAk;otcbP3rv@K!12gSbI|`y! z5S^uV6t~}fvxU{T#I*@JidVYiMyi+=xX!tv`7)UAW_6kKtUyxLt9efZ9l`rC%`4t5 zQkwAt!@Snl*PF&yC|1QrGnM^tV(o~^!`mTO;cR2+;?m;u5mB?%_)t~`GYUGN4PeuV z4HFJZOmmJ>IMKo+mpd1NbJINEYgMRVu}Y=?1!6kaEzGgYn7C>zm$l+$a6ziRj;R_P zY<2R^98F|WB}t1upcWyTBoSmZk!{Gfmv2O^*89mBI(>Sg-%BEY2bBU) VVS5M9{Ct}5U&9~5@}?cLzX4y#0T}=Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..523327a08 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2016,2021 +# Bashar Al-Abdulhadi, 2014 +# Jannis Leidel , 2011 +# Muaaz Alsaied, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-15 21:27+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Redirects" +msgstr "إعادات التوجيه" + +msgid "site" +msgstr "موقع" + +msgid "redirect from" +msgstr "إعادة التوجيه من" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "يجب أن يكون هذا مساراً مطلقاً وبدون اسم النطاق. مثال: “/events/search/”." + +msgid "redirect to" +msgstr "إعادة التوجيه إلى" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"يجب أن يكون هذا مسارا مطلقا (كما هو أعلاه) أو عنوانا كاملا يبدأ بالمقطع " +"“https://”." + +msgid "redirect" +msgstr "إعادة التوجيه" + +msgid "redirects" +msgstr "إعادات التوجيه" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..09c54b08a46b9d426c5e617bda0e0274c5914d02 GIT binary patch literal 1336 zcma)5L2naB6kb{=tt&3=siLahr6f^Vuh*nivS9-h5($Zj$TF4M9?--d+l$sa*339@ zZ&AQWNYC6_RTV;}X(XsPq*kxJRqBPy%%uXZz3~hBjqSuJ0;wZ?`rgcY?|a|OYXAA* z_&pEnJ>X-Y3Y-G=0Jok2F83Vx8u%CZ7FamudGCUM2D|!Q@cZE3!LI&K@Nw|p;J<*U zz-jD%dfW4Mz<+=xco9V(f&1W3z)!&hehGH-T{yr%m#UH0ViF6g_6VN zJYa<9m3TFgyrPv?ZX}8-ETa`pJkbp<2^+SeMB3JzT1+=+k|~^sRX#-mX{xo;lx~!+ zkRIBQO4_cvc8sN}XtE@uj5T?l z7CNliN_pfo1HQ^LtpdfFtTcw&a^&AT2&g7SbG*~yFjk&QH20RJxP=S*SF8S4T&hH5 z5mj%otS)jT-V###ORAn!{V&^f<(EZ7x#jDAiLWNE)W5}mZ_9!AtNebo=iG)KFMlANw&fo7wfoOny-lFJnFN0o7K5r=BydfB@`qT zn!J?O(Z!}{a`cF6YioJ!WRn{2xYl6k_khxoPQc{NE8hfDxuvU13**a$`9kip$TZ&0 zFMrp9ea$;MXr*}NIjS_6R9we5%8UNYxXz8Map^B)72&>2L^CUiKC~RsU{-E9ZA+H= zi$XS4L|JRFRq+>dGz{Y`jtg{w3WRJNhX})ASVUNK;iqAtFdv_zGiQeJ`8aeP=f=4( zd?h(Mi{vztpU>qy^T6~?&pZNl$@J_Uvun4_p53uqp4~Bf<{_E;c9U>$+itsH%RDwc zvR(58J--dZeS61lAe=-|*Bx!yZSE|4%FSd*^Fp#%;Ep@W3{_KC#`w4KaQnb2jp>_*XYEqKPAa21c5L hm-*%BySy<2LA&|pMlug@ySw9p*S&ccb~jAl`wtQ8{5b#s literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..e1f1d5d64 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-14 22:48+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Redirects" +msgstr "إعادات التوجيه" + +msgid "site" +msgstr "موقع" + +msgid "redirect from" +msgstr "إعادة التوجيه من" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "يجب أن يكون هذا مساراً مطلقاً وبدون اسم النطاق. مثال: '/events/search/'." + +msgid "redirect to" +msgstr "إعادة التوجيه إلى" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"يجب أن يكون هذا مسارا مطلقا (كما هو أعلاه) أو عنوانا كاملا يبدأ بالمقطع " +"'http://'." + +msgid "redirect" +msgstr "إعادة التوجيه" + +msgid "redirects" +msgstr "إعادات التوجيه" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d2d993e2edfef659ed3e7663b29db31254c5c74 GIT binary patch literal 1071 zcmaJrSo>^>V&w;H36AVKljNQ$lYT%|=@2o;yi5k4sh1}S9UknG z^U`{y`!qx)RR-Q?VZC0dO}n~*$&U_-FySig(qe0Qva;z*zes-XqHR;^*W_EU^eQS=8D|TY>nyphthZG-4-8ba}&W!b9 z&-GO-p67ihIwqv@{;Q7IvMfDv#S7_iiDuAP6^%dy8`M|}A2nBkW)L7z9PqI!dd~CK zkR+N9sj(5RHdX>yc~?3wI#z0zNN;RNFQwL4_%5rM6MBr>zs{q%7YzxM%KJ%fWg@nX zO%Oxzu*vP?j@!nX2(OO%AflHFTJcPiN}OsfyPbVr^Ad zLVHM&6Wt*Ug?Nci=pc1$C^GuI04Eb-?y?=9%73(n3LR8, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "redireicionáu de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esto debería ser un camín absolutu, escluyendo'l nome de dominiu. Exemplu: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redireicionáu a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto pue tamién ser un camín absolutu (como enriba) o una URL completa " +"entamando con 'http://'." + +msgid "redirect" +msgstr "redireicionar" + +msgid "redirects" +msgstr "redireiciones" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8f00ebdb2c8e89db1aeff0d1f13b389201505384 GIT binary patch literal 1092 zcmZ`%O>0v@6dkpGMFlCib8+2Bi+xF2N-3|_k7^2q21`kW;%f5VB$;;JOq`k5CSCPU zxCkiXR@`(W3hr7L*|>2p+O2=WGf8Tx;E=?T^;y|GWNF#|zr4@;Htk#l_60WH( zNJ!rjmSFI@Gb;Cj+T6Ejf;*g;9WhA;*VM?BqK)-ca-Lf+b(3}xNyq!ITi&wB~S|(R%5dT+oibN+-c^blzmQs^(sY&xp6sgkTSzC!XXqLo|(B74t;5KOuwe6^W zcCw*{HQA}<&ELIaPI|%Ctl2`t(MlRU7uHFmV@kKUZkocnXdCOJs%y$LTFRR)s+pJy zYtN!}u_J?P^ptxPGgF=^N9E~gdWOn#@$B5aGFD-gJ0I07*G_S7Y)q95eN=HO_jtPoe8+SPQiTzF!%$D>8HZX0!b(eb6W!t*Xr(&E+$zqnCbj^v>(c)%H734SSW~&>Dq1!+b1~`mz;uf<3pCs=PH4KbNYj%G1-5zkQLBDWW6ZLC z4?D}2a%%N^8D)oGJPuw`*C?9k<{fU24pP2-bU@oOlao_Jx3u3oJ5eMNMRor5t>Rrw zljqrB2#w-Y4|leR98+PC1SU9z9;9V5bvC0>8COVnbYP2A?f2ZEJWRuXMy-oZ;Nn>w T-KWTV=HS#C9iw69c-ON(w?|bv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..f1713bb58 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2020 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-01-12 06:46+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Yönləndirmələr" + +msgid "site" +msgstr "sayt" + +msgid "redirect from" +msgstr "buradan yönəlt" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "Bu, domen adı xaric, mütləq yol olmalıdır. Məsələn: “/events/search/”." + +msgid "redirect to" +msgstr "bura yönəlt" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Bu həm mütləq yol (yuxarıdakı kimi), həm də “http://” ilə başlayan tam URL " +"ola bilər." + +msgid "redirect" +msgstr "yönəlt" + +msgid "redirects" +msgstr "yönəldir" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8c704bf685959c3a20ae5a44b601fcacc3c8c14 GIT binary patch literal 1426 zcma)5O>Z1U5N#lQE#krjkPs>kiM+zIJF_^#j6E9^aHL4Fu&hluaB9!=?o2W}vzqSp znkWZ5hyZesPxu5x;tbNp#Io>5a_7{2;T9AkapDJX;lS%1uPqWqqNS%-T~)8Dx<>Q+ zD<{5TI4=Tk01@yq@FQT)1Hi`q0ImRk0iOULKgHM!;Ge-Ze;@o3_*bya{|$Ts`~dtn z@F(yl?)RTzYzY1bJOKZMq}RYFpJnV-a1;DG_!8Lqdtlq=D=EhxAl8P59$vQNE5&;>;qAN)DL);`iT>Umyswe$={o(3&wX&Ct^L`rHc8~U%B(V~v z{m2%?AQa_Yo@A8quBg%63h(w(;oG8hu`Dtr>r(I{jLX`^;fvVVpmvdWk8dhJvL%y= z5^SN!FJlGH`N+8>3Yp}YPtj$bb@Ixh=;eiS=4B^|oU{FobXvJjm4%O-MX{XNROdsk zFigX3c#i8i-f8mQ^&8V~yEv5#Tq>tk@Jyy$<%LgIvs^`jM>KmiP72-*j&NFncYQi5QeO0Bf(1?31!8}L!JwvW#iT7(tf*d&I;QlnLVZcptCjil z^K-|K@@j77gFI8%nbZ2Thq0AdQT1Mm?aojb^Fj(0Tx^|lrjPS%ueK7x8I& zDN#q0`uKpAg|uJr)H#LogtTyj(am` zj6<`*lr={Rch+mrwQHrM=}lE3@eU2w>pi`zhh^VU z2*RQH0s%XxRo&1-(mRj+Rpr3{e=58gXZ n{NqOY|Lo7)gm0TY8Yow^^8`OyKNi6zQ3@Xe`x@$B%ysrJVbLUV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..667bddc51 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:28+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Redirects" +msgstr "Перанакіраванні" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "накіраваць з" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Тут мусіць быць поўны шлях бяз назвы дамэна. Прыклад: “/events/search/”." + +msgid "redirect to" +msgstr "накіраваць да" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Тут, як і ўверсе, мусіць быць поўны шлях, або поўная сеціўная спасылка, якая " +"пачынаецца з “https://”." + +msgid "redirect" +msgstr "накіраваньне" + +msgid "redirects" +msgstr "накіраваньні" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f47e60460faabb974b75bf5192fb7cb19522501b GIT binary patch literal 1279 zcmZ`%Jxmlq6kZko&e%|BOe~&M5ZOD9XhIe-28F~#A|ZzsR&#s9-s0ZQWo8zzJ4g(X zLMuCe5^IY?MUMYktJ%iV_!BF8YrnZWz~4!}{oZ@?=6i46&d1J<#}3wU;4DxAP696h zyFLMS?=x^0_zv6wZXa-*W8l|do4*M@0e%m*`5(X?;7{Ob;2Y2hfBcZ+yaM~+Mer#k z+4wW?Y49@m4ES9;{uONN`~XA3IRe0J#z4+N;HWjQ4!5ZJwLPGO<4o{UD7mkdQz(au zd=^uY6AyKnOM=6SN<@j~RAstM-Ao}OW_S+?Y|~T{MKn2agOp}chjBo&IEfAAmwAPg zN_=>VzSN$SwXP~Jm-|wCnr+omWsyWBTkg*~y~OAIC@EP%G(sg&VPQ-$tMDw1%&|%} z;+_@F@fjX#l~bHazueN6?Hf6}22Dv(+4r>Avz4Pl&7E;6rZEEddda=Tr3yvtQE8gR zfyhkos*u_pQ$bjAhm%0L1>sR<{H8m>XF{9mUSk@~^!N4myM1{#e}VFO@8ZSteOQ?r zOlh|uS*#+ah4hHYm?Ph(OS{&U0C$VBzNlPAdK@Gy;BJAlibumq6fhZLI^A}97~bsc zY*t&jaEi~_Gr3luyA-tra>XFmlNq}{HnM-Ce6}xhRm2(ta|`#X=vnhQovTI|?I8JO zCKcC1lZ8=tU_Z~+n&Q$OiG5*zherd&Q13PBQ8CDjM~P&SJ1S&Fc@$Tht{Uneq?S3< z9n-lX%J&Rr9P>P_nH95xZ#`Ww>!#tD7iQbMGIcVWFy5LKGHl~_#)@r|d2P0#yoE2^p1q^UgN8kVx7tf)6=FL`TC{c32b9i3 zXx`F&WNn%{a<*&^#2WBd(i(N`KH#qGe#_}XT1y|9, 2022 +# Jannis Leidel , 2011 +# Venelin Stoykov , 2015 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2022-01-14 11:55+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Препратки" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "препратка от" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Това трябва да бъде абсолютен път, без името на домейна. Пример: \"/events/" +"search/\"." + +msgid "redirect to" +msgstr "препратка към" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Това може да бъде или абсолютен път (като горното) или пълен URL, започващ " +"със схема, например \"https://\"." + +msgid "redirect" +msgstr "препратка" + +msgid "redirects" +msgstr "препратки" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d5ed4162e9bd3d71fe41fb00e0017b083b06c86 GIT binary patch literal 1319 zcma)5U29W85WQ;siiqH|$oSNjy2(vYTW_t1T0v>ClvJNL$tJnwW;fisY3qw1BBCh1 zSYJ!AZmUQwK8OXWzrcSWvOmSM+n9jg3&YIpoHKKFa`Wx@z;b|d5OxAqh8=-Dfw}V$ zHV4~=-G&|869k9g8}LWr+wcy57ydB(WB3=a=de}eBm08j6Z{wWlde7x1SR;_@FVbF z;obeA{Xqaq?;Jq17lv~0poP~7D1281S2C4!w4gTEO&a1EZq$Mp zCWSK9J4r%wvs095p6XaOXc0^rY--((3WdS^Zr7}-I!Vnn{<-665=+&jQ*%^|q?&5+ zSd!!|k*CQe-fAZzqQQb#5K?D_Oz^bYbbV7%i&Ih6y@2YeYV|X%dT|!aq-q{mcD=@K zi8PCqjHouxWkcm=MO&qsO=pd`#x8dn87r%Zax*u}>`E%Q29{mr8X`(z@hmHbEId!e z(dbNRBrJs?fNWMQ#I9!_Hwq9d0(UMt6OM#9xhbA$R!+Ih60TJm(G4yo7Ct57nn>sZ z)F8c-_%t8Oy1EFCY;<@-u(IH-h%O7+;7LqF-R&+eF6OoC7}v#8zN%V<-8cPkNta%z z$ii@L`ug-_|MkUun7g8+##UMRP8-kDVo4X;3AR5@)h16fp(p0b*VtGe=VsMK$|hx1 zxnC@zu}Z9aG9#+U+)UC*dBU!#w3S69+dj=EO5?N}P7FypH9^JU@myfdGi$cUnoVnV ztl2<>i?`N%wC25Ce`?J;yME7_6%^iB^NNP7dE~<_yZ*38T^mOI0qUN+GyS@ULk7Z0>_6WDn?)3kpxZQ930~>q?Xl*Ds literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..f7a933494 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "রিডাইরেক্ট করা হবে" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"এর মান অবশ্যই এবসল্যুট পথ, ডোমেইন নাম বাদ দিয়ে, হতে হবে, উদাহরণঃ '/events/" +"search/'।" + +msgid "redirect to" +msgstr "রিডাইরেক্ট করুন" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "এর মান এবসল্যুট পথ (উপরের মত) অথবা পুরো URL পাথ ('http://' সহ) হতে পারে।" + +msgid "redirect" +msgstr "রিডাইরেক্ট" + +msgid "redirects" +msgstr "রিডাইরেক্ট" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c20edc031f8c4efc0c19d56c11876c2cdb15231 GIT binary patch literal 1429 zcmZ`&O>ZMb5FKFoGUCFSL+xQVwwAVMoJ5W%>kZl6tQ2XpM3DnGq_U?yGwYe|QFo7% zpgnPfGZI`mbATff;<6GK{sV$DKY%N*ZEqY#qNSQw)m8Pns(b2>4{m)EV7&|Z5RyRN zhx`EX>raUH{RKIP{0;dGa`;*hyaW6W=;OZ!z6bmf=;MC@-U9vx{Pp!9_#NouzQX3` zz;A&X_z&<+V2Y2=FM*!-YK>n4J>Sfmj!VEOZ2tv8^&<&86$<}v+vqL5QFxnMSD8eB{gLtQZFYJdQ0>znJXIgh><^eKQT5~GJSaKQD zLnED5)L!57#l=O}dD?s?FS}D+_EwF(0uU~^v`&ssjy6{ib;H&ptsL%GjIS#6 z=;WpARR!K*pQafbE8XaP{6y?+;`~`NX~dD5YX5dI?M-rbU1dxY(>g6`!-aUFO=)9N z)zY-1-F;fAqjp=}i9#BUDC*GNyR@4SNXtfT9h< zHobU3zMj!&XQK{p(%vUjyNrSo(gTVb?!nr<@(vo_;eWhCcn_%W3-BF>{sI);@yvet zTM2!{HpR5l*>44h$($`GQYroN=ipFLVpv#A6iv4>{4 q=UL@lddy_!x|aCo8^cU~n%OtE`btN#Uh9, 2012 +# Irriep Nala Novram , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-10-19 23:15+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Redirects" +msgstr "Adkasadennoù" + +msgid "site" +msgstr "lec'hienn" + +msgid "redirect from" +msgstr "adkaset eus" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"An dra-se a rankfe bezañ un hent absolud, en ur dennañ an holl anvioù " +"domani. Da skouer: '/events/search /'." + +msgid "redirect to" +msgstr "adkas da" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"An dra-se a c'hall bezañ un hent absolud (evel a-us) pe un URL klok o kregiñ " +"gant 'http://'." + +msgid "redirect" +msgstr "adkas" + +msgid "redirects" +msgstr "adkasoù" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f986b59c714ce0ea37eab9756c77abde5aa07b9b GIT binary patch literal 1115 zcmZuv%We}f6dj zkYe2D@vzexC`TQssm;X757-hM*>)zcJX0zCfEJ{~jv4VH85~ou%5&P=-6H3u^-A~Y z0Fg95@V-nNjrsZ{s~eaq?}o&GXS_yy*vYGI2t`TinnEf~S{7WVjYC_ZjrC&N^;K7_ zSA8d1CZ*cW)0VhzS$b&21L@I3Gfr-ZBo^^)N>cmvdS}H*oLeW4Eq!&)h+b?pLzUqQ$aEY27%j z@PG@yUiaYOpzcFP)#Jl@#}tjpoqkjPE4#tI0AgyDc?X@0?TQgm#)nh9*bjO4rOX*fy`DvRewOwr|udK|)Lt_h(!#zp)HfEx8w6#g$D_M%hH%W6cS;YL zocwcoCwZ-$r2RK#n_rSD7)3C+pgKK4J*$c#, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "preusmjeren sa" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ovo mora biti apsolutna putanja bez imena domena. Na primjer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmjeri ka" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa " +"'http://'." + +msgid "redirect" +msgstr "preusmjeravanje" + +msgid "redirects" +msgstr "preusmjeravanja" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fedd26aa7e52299a774980d60e11d3601f542fc3 GIT binary patch literal 1136 zcmZ8gO>fgc5H(P~0$ezA7*0(Ej*}okaS0GgD^+Sl6{R47gtW0Y_O|w}*ZDj*xh@8;M?G5 zU}ty1F8)0jKW`U*Na0-pob776brHBa*?HdOQ+DKfKx!o7vCurS#_OfRP{btlIdNfA zt_cR~8WO69*T$`8xNBkD{!MT|zWMvC5f{Bw5aDv^HXSk@3(a4fr0H)&zz# z9i`LU`t*ss*@gyM<#Wrbv%T?*u-x0yY6m0mH)8)a*G4EAQoO@tqAFcpC~f_YNkr_w zC==uNR7jPrSALi82^Z?WWERad>&=GWsQb-FRDT@SAKt5DRW_Nieor%LGG>(ysV%LN zg4&tdrzebop0mPaHOcK$M9ZXP3HN)PPCmj4Tr;;b-BcVk7|+1gK3j9 zLhR&v5V2sX(%I;&%^#;xt5;T)w3wFP+b__tWW}0JE#X~wVslIlKn?yLZ!3_l<@bR$}SS)!~gfVZ-A*wBm$q${MZd7%T(n31HlJTBme*a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..e94f9c8aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2021 +# Carles Barrobés , 2014 +# Jannis Leidel , 2011 +# Manel Clos , 2020 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-10-27 09:06+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redireccions" + +msgid "site" +msgstr "lloc" + +msgid "redirect from" +msgstr "redirecció des de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Aquesta ruta hauria de ser una camí absolut, excloent-ne el nom del domini. " +"Exemple: '/events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Això pot ser bé una ruta absoluta (com a sobre) o una URL completa que " +"comenci per un esquema com 'https://'." + +msgid "redirect" +msgstr "redirecció" + +msgid "redirects" +msgstr "redireccions" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..978d833d105826922f7a2b0fcdda78f743e9c65a GIT binary patch literal 1229 zcmZWo&ubJ(6mEBQf6O8)p7-!Ju#&L$^vom+q2sus8$mEQgi#NBs_uT7?xeeFsH&bx z=Hy}VCZ3i>b{EM>1OtMXUC>h}2mJ#)iVB|mC;Vz=VxlSd=6kQ+&wBml)#>AZdN|(# zKL81E5_kl-^BQorH^2t)9{3%&dCc>^0Y3pd|EJ*Zz%Rhg|0Vc1_%--{;2m%Z`u#6G z?+@@}a0mPgoZS6w@b}=qruu^^{|APv_Z*BA-d6y`acz+I1@N^Ka868U{Ofvfao#E? zndaCUubXCuVj(GF;>@P335tk}%1g`C7dE9?VQ`}cJVy#Qp=>O%oA7c^EzjVH{-laTtYNLi7G@UNs5B& zw7e;be$Jsw8t{OnHGyHF<8+c+PhaHi3$&(HaiCfCQ8u2*EPEZT)-eMAO5)#OZ89Z8 zO4fz!soE;{mA3wh>1Bz3vFsVYt3s-EuKBAx$egSHo3Lo6)o3;S#=PHLq}F`cT==#}8Q40lxolQ#D$p9Tl93Fc}mS5}q}9@MNiYL}F>n3vz(>Z4`Ln>Og@ znCue8snCXP`+E1Xzj)y1YOS&Mmu0Nn*9d7b%IwD`LyAqUlb2fL{$-^L6O!zYRnuNr zqKVj^mDFxilg^wWNk2h=)|jJTsX-yZc)m@oiSb;U7LK|#$6hY*M+B0KY$0-fspfU| z?y)I$|JG_yZOdxM>nf`#+9KTLf}-k~rKsG!yT8V8p_s9(G`lV~6b-6pd)ruM$&o_4 zvf3t*Xf|TJ)FZKbr`nNXz1oQph@Gw;7Wmr5S`~Dx)g^mCW9Gr GRi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..08c57c4eb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vláďa Macek , 2014 +# Vláďa Macek , 2015,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 23:14+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "Přesměrování" + +msgid "site" +msgstr "web" + +msgid "redirect from" +msgstr "přesměrovat z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Toto by měla být absolutní cesta bez domény. Příklad: \"/udalosti/hledat/\"." + +msgid "redirect to" +msgstr "přesměrovat na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Toto by měla být buď absolutní cesta (jako výše) nebo plná adresa URL " +"začínající schématem, tedy například \"https://\"." + +msgid "redirect" +msgstr "přesměrování" + +msgid "redirects" +msgstr "přesměrování" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..737534d941ae04346d1cc5bd2b2c84bb4a6b9410 GIT binary patch literal 1132 zcmZWoO>fgc5H(P~!pDI#hvCvTYBzS$R1GcxNMf>CI>CvMZ_hik66q#i>&c_88;A734I2P+l*;ILHkCD+%gza zo53PA_=`Gabx`;il3WNlKH39gskU6EP+%l1WY!Kt-(P5qvzkohB6f-Y&A1F~6p1`` zq4-LO)qrvdk`7n{wnua@6fA@VpPe#kjc*v$QRedMN!`;6Bw7t-%Btzzc!ye@V2@-s zCQq3*T*(mP6Dm_xJ7PnnE!j6IkIADvHKeCPs2v{k$fjo0qL*w@i$%18<|=6hB)ALB zwXoe<3R*#cMsmbXxyw28t)YpuR-oAlSKCVgp4uKYmh?20Mo_DC2v4Y#IPg8jV%G|sYMV-0oGIy*Lu}5nk@bfHXTJ_nMzvwKd)(V0ote+QD`A>!%SgHJ6+)-a z?X<`cqOx`rPki$xvZhIZZ*Y2Y1cAIs000D&HM9Yb0CE!jMIxs&E(%qVs zt%Xlk)@$Ad7ipO=t~rfq?mcEga1DuyaaB0(Amva>5JlO?wR9`X3k!=0PBxD+71u$s zyjoNtXd#_9W>KbT4qrc>UDvG=X8@U!Rqp>%E, 2011 +# Maredudd ap Gwyndaf , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "Ailgyfeiriadau" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ailgyfeirio o" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dylai hon fod yn lwybr absoliwt, heb yr enw parth. Er enghraifft: '/" +"digwyddiadau/chwilio/'." + +msgid "redirect to" +msgstr "ailgyfeirio i" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Gellir fod naill ai yn lwybr absoliwt (fel uchod) neu URL llawn yn dechrau â " +"'http://'." + +msgid "redirect" +msgstr "ailgyfeiriad" + +msgid "redirects" +msgstr "ailgyfeiriadau" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfe4c6313dabaaebb5381f857b818b5f2b8e7d67 GIT binary patch literal 1132 zcmZWnO>Y!O5FG*p*eE&VoI`Q51+%kj63H23guo_3!opgugAk|oOzljwJ>8?Op55if zpWv2UIdS94jT=88rzirXobo5~+GBh3(bAjOHC0_zUH$&}_R^~a>l*MKPy$~AZ-BTy z0@3#gm;-+S&wwWvlH@A*EjY%%1Ahhn0FLp$fiHnSf(7^!_y+dVi?G2pcmn<%9OE+t z$2>ot@=xFxe+0e)F2P8Vdjtu`Q@*}zLwOkGi5CI-#RymSB2@ym=KLn=^CXiS=I26_E)ND4d*dw#tXJVGGXP5 zy3g%TZ4~eXu%+An`$kyqR=B4b7OuI2qqgc)#p#q)lhdBETJQjIjF{qbxg3U=SI>AA z4`hAAXJk%KXQj$E2L}%i_SaV%4@ZOh&IU{_oxW(%eBf2cT7wzyP*E!{9CnYU57O;* zT&y)?pYGej#dpbR`&ftbE-^4QI5eGCCVk+1BRSdj#FX8w9qPBc8, 2021 +# Erik Ramsgaard Wognsen , 2014-2015,2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 18:30+0000\n" +"Last-Translator: Erik Ramsgaard Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omdirigeringer" + +msgid "site" +msgstr "webside" + +msgid "redirect from" +msgstr "omdiriger fra" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Dette skal være en absolut sti uden domænenavnet. Eksempel: “/nyheder/soeg/”" + +msgid "redirect to" +msgstr "omdiriger til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Dette kan være enten en absolut sti (som ovenfor) eller en hel URL der " +"starter med en protokol, fx “https://”." + +msgid "redirect" +msgstr "omdiriger" + +msgid "redirects" +msgstr "omdirigeringer" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2db36dcdc18c8863b7b54ee997f042d2b1964536 GIT binary patch literal 1155 zcmZuvJ#Q2-5M3aA9fE?IV(1cayO+C$XhRSRNl2tboQ_K<5E8!Kxmzc@_R99=0yOFP z1#}_5fQ~jD9Y25)g-A5;CwRU~atN^W_Id2_^LX}syFK+jz_o93)ts>1y6yG!6onm@cUbrg5Vvv2Yw0u3HJG`NcK7% z@GbBwu+P`vtKhd_NCZ~^OhxxQwQS#fskL8PeFMewF96*;yy+gmF?0Xo!>8ut~-RldTd&mQMB$GUrMg zHyS7VAENPHHq%v}`s@C_r%t?=(%fckt zSlgVwC^(x?-{@izIek92ft8Mfw$a;YLAaKNTWqYsDZ9^xYWjl8+IVmaIqTL zu&ZOLwV#F^-jzNzToMk&v}Rk)u-Ob-bJV;ax0?56F>33=y0B}6vbk{D#MBXGCOD@J zi3a8L0Po5lnek#VT8mPCh;wRCi2;XQ7DY@?*c9l|wC^EWI2;Zm=S5|o_o74>jd8VS zl%Jk%q}-UPZLDo9Pu|sxW^0eNa%fxFeO;n*$9t|(=4kLdC7Cdm-NI&fC7he&`MdgT z!ey0c|5IX`>q&QBCA!76c3v5ghb!6?HYQb$Lc7qKr}1=QTG8DFYR=5pg3Tg_!zwjk z6|71at*ERelr-cN5#wK<`OZ+gFH)KwO4vY{&qqBrFyCn!(~kCLa4@L1VIiGA%>_O4 z1{8Jpk?BoU&>~A)O0@iB|8Qc(gF2kc8LMbq2fUs`>OTdH)9R!%g+f@-(#VtEk}5h^ g_oh7j$CL-rV!Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..78f928a5a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Hagenbruch, 2015 +# Florian Apolloner , 2021 +# Jannis Leidel , 2011,2013-2017,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-28 17:21+0000\n" +"Last-Translator: Raphael Michel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Umleitungen" + +msgid "site" +msgstr "Website" + +msgid "redirect from" +msgstr "Umleitung von" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: „/" +"events/search/“." + +msgid "redirect to" +msgstr "Umleitung nach" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Hier muss entweder ein absoluter Pfad (wie darüber) oder eine komplette URL " +"mit einem Schema, wie zum Beispiel „https://“, stehen." + +msgid "redirect" +msgstr "Umleitung" + +msgid "redirects" +msgstr "Umleitungen" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ab747ca72e9dd2d8279ccd6baf7f8ae70f9e432f GIT binary patch literal 1236 zcmZ`%zi%8x6kZ?@I79;|qM&#Uk}bUVD=DHi2MFRwk!)d^3n^%r+j)08ce69AnOUE0 zrHI@hDk>_66i^}2U4?|)IM*Q2Qlb!vihqJ{?(CdI%t+sU^X9#M@6DU<&o{4pmtegH zybDO+4d7=Wt|vhB{RK>be}FH6doLu(tKb;WZ` zWRInCoClxu3*{*nh6YTmLcxw;h=I4d4osB@1+58>6T8prWZ|Y^tu@`<+a@1`3(AaW zia+7-dBG)u4PP!Mo8LHC__e+ z+@!4oQC6C>n6$+BdKNbkt>3wB;v zlaU+?GqR06uB;2`jvpzReo~Ko+P4`sc0Wt^cwfcP^p*%{rrYjz(snm(cc|OVI-U31 zSdDGrL)v%3crAi;8SSXN5UlB*)kFHARJyM0$KJZZkk250lZ&feO#M#l-xev8!t*bb8ym z(r09!dXdYK* zGw&XsNHbDHsLhbGPKn&S;8`FLg+J$+1X0OLUz43%?, 2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 22:11+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Dalejpósrědnjenja" + +msgid "site" +msgstr "sedło" + +msgid "redirect from" +msgstr "dalejpósrědnjenje wót" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"To by dejało absolutna sćažka byś, mimo domenowego mjenja. Pśikład: „/events/" +"search/“." + +msgid "redirect to" +msgstr "dalejpósrědnjenje do" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"To móžo pak absolutna sćažka byś (ako górjejce) pak dopołny URL, kótaryž " +"zachopina se z „https://“." + +msgid "redirect" +msgstr "dalejpósrědnjenje" + +msgid "redirects" +msgstr "dalejpósrědnjenja" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89b919c1b79efde88a5f18ed14c090cb06ecd500 GIT binary patch literal 1395 zcma)5OKTiQ5bijNoow($M`MSQa*>E_aey931cukZcy)*lS7Idk#H0`DkQ8PWcJBq zIG;c+LduZykWGj?dl2V)3z>!d1NjMZ>jTC<20jHk{toa{;GaOpe+}#c?g4*>{0;dG z_N@;Y`wKV+{0%q`(gnu@_5l9{eh$3!QHTF6up9PmAVRRS5Es|wcIOP_Tw7xdl%wNn zKnljDL^)I6I&g0#10jzC>bAHMjq*!>Cgx^spK7u zz`IuVZVIJCnfO$`!;`AaO^H-0<4x#lSoXfFSG8A?KIJBFcvE67bX4yLZcxl%ad5yZ zUh#@w(!h{Ec=d}SPVPF_#w#hF=!hGseELx+UJ+qTlRSk_RCppaeWg=pep5x8Q9h9I z*Lay!>%1zwlHjpV<4TBG>T^TH4Cm+P^TtIDD`LU%3!QQgAv$^lnCEg;gz`p{K)S8?G&B>MqauA0 zQEoD-D;{}cQpMV*ByF2|WN?@|>PTNgJtH*GKb&LsSG#K)_LXg9tM+-eW?yFa>~6MV zpW9}(%@Zk=^RJ8rfoY*KTKPxNVW$u`S%U5MdJ+P3p_; zg0PV-6Rw(II1iF-^q&d^&$fN+@`CL?Yh1LlHL`yo|0_J+wVN&ha(7DK1b^GUfFSHj zwhna%)gs?I^&Woly?JIIA?OyOp}*4&{l7l4bu_VLpSVU`qv#oJcJjf7vSk~2viDJ^ zD*>}zLZi=IPW!aY>pl6uxWXE4hDVFIhefQl7xCgfE<$LG{Cy1gmoPf4@??Tjn{Hxk NtJn}aXb*dt{RbW!O@jac literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..c1d13e79f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +# Serafeim Papastefanos , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-06-03 18:27+0000\n" +"Last-Translator: Serafeim Papastefanos \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ανακατευθύνσεις" + +msgid "site" +msgstr "ιστότοπος" + +msgid "redirect from" +msgstr "ανακατεύθυνση από" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Πρέπει να είναι ένα απόλυτο μονοπάτι χωρίς το όνομα τομέα. Για παράδειγμα \"/" +"events/search\"." + +msgid "redirect to" +msgstr "ανακατεύθυνση προς" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Μπορεί να είναι είτε ένα απόλυτο μονοπάτι (όπως πιο πάνω) είτε ένα πλήρες " +"URL που ξεκινά με κατάλληλο σχημα πχ \"https://\"." + +msgid "redirect" +msgstr "ανακατεύθυνση" + +msgid "redirects" +msgstr "ανακατευθύνσεις" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..01a3eb7c1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/redirects/apps.py:8 +msgid "Redirects" +msgstr "" + +#: contrib/redirects/models.py:7 +msgid "site" +msgstr "" + +#: contrib/redirects/models.py:9 +msgid "redirect from" +msgstr "" + +#: contrib/redirects/models.py:12 +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" + +#: contrib/redirects/models.py:15 +msgid "redirect to" +msgstr "" + +#: contrib/redirects/models.py:19 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" + +#: contrib/redirects/models.py:25 +msgid "redirect" +msgstr "" + +#: contrib/redirects/models.py:26 +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8b5bf15e91db3e43a09cbc2f2a4ed387510dae8 GIT binary patch literal 1127 zcmeHF%Wl&^6g5y@Mr>HKxa=Ci#7TLma!EyjRI1d9DoO!~1)A75_7r<2ni)4?fz+R1 z2Yar( z;0^E_cm=#T7e!aVpTQyi3-}uND>%e|122J(!0&)xi~a1vT&D&Ho$uhFb05J$XB`}L zw!uN?B^XaM!V417B_R0WPFUxG%O_S8U0iUWa2L{1G~irW&b*6;rE-)>O(P~&zGO>q zy<8OikmoaS;;k%YchC_jt@VS-cMYb zB*%vz+w)wmG)CJ%xrgmP0$rAf=0+ti=QdQx#3L=!$>?Oozn+N_*w z+eJswsX=3F>NC%qzqX5<@*M42vyTyotz0~3>y*(c<@-_>CLZv_STA;5p>pxKDV!LZ zl;YiIV!#I~go>xqqnMS>N>_C5iEfv=chl~J+a0WUTRJa>R%%yCZ){3KQ`4pzD@NlF zy{R7otAxhrw?&&Rbb2*`nnzN=$M(owl*3of`A3otZkB z7kx_ALMmbXdSfqX#XDO&{j(0c?N0o}XpaGk;oAv%@I3R$q{67zC@ZCP?0b8|O|g0w z7t)Q{ioVWF_&h1Cj+FmfbxJ3>;@zr2v0~HM+NGo?C$8(QtkK-;Eo-{fqi$<0{{IK! G5BvjFZBE<( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..13be8adfa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-11 13:16+0000\n" +"Last-Translator: Tom Fifield \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirects" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirect from" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." + +msgid "redirect to" +msgstr "redirect to" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." + +msgid "redirect" +msgstr "redirect" + +msgid "redirects" +msgstr "redirects" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c36274666408f3d5d47d1710f6a246bb99fc5634 GIT binary patch literal 1053 zcmdr~!EVz)5Dic$7$GFMau`l&R5o^^LW@HXYDrNc5mn{D5pC>=z14cx+Fd8%!UrIZ zAn_C2;b-^;uH2YSN+R(IjP&$o*7Ig&XZ`ce)|Up^HsKy2A>1TzLLhRyb>sx5RaGhg`MiVpx6sjM?ErIwKCk_!cjm)M5Ef|r%V7@8r@P&pe~ zq~DVLpO> z7%Sm0gIBaP+E)v9F4jGt&)d$o5K~;VQ(cCuOa3K!Q7=UG?!{r)3PvZR!Db_!b`%_G z, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "redirect from" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirect to" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." + +msgid "redirect" +msgstr "redirect" + +msgid "redirects" +msgstr "redirects" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..82950c4e347cd89b1cbde913b18a7f78a065450c GIT binary patch literal 1138 zcmZ8fyKWRQ6dfSE7ST{sT&g5WygM5K2@`^VJR~F{!fFB~I6HTDy*p!%Y|kc8((wTl zw3G-WK7bNv_y9TtH9x`ez7nu>bgsw8$M&7`^UBhRIsY`R+S*gJ61-AZ;@q%4bswq40kdP577wjUlI)@PgR zZBsPH@0?OTF=()9EY@}(>~0@-q*;$^n?`%ITcj^aJlXS+Z2fr68!PKHE;kl5UE84M;(9H* zm#dJ5^$}OkeG~l!QteAA literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..8d613f0a0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2011 +# Baptiste Darthenay , 2014-2015 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Alidirektoj" + +msgid "site" +msgstr "retejo" + +msgid "redirect from" +msgstr "alidirekto de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Tio ĉi devus esti absoluta vojo, escepte de la retregionan nomon. Ekzemplo: " +"'/eventoj/serĉo/'." + +msgid "redirect to" +msgstr "alidirekto al" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Tio ĉi povas esti aŭ absoluta vojo (kiel supre), aŭ URL komencante kun " +"'http://'." + +msgid "redirect" +msgstr "alidirekto" + +msgid "redirects" +msgstr "alidirektoj" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..715b37220121aca6b5726a43c45eceebd14fce95 GIT binary patch literal 1159 zcmZuvO>Yx15M7{r1rQQkISf6ug3Trom8va4sE|sP8np^395^|}%0occX0p9?B1^f7K;5qOSSOLEPAJ@GU1bg5fn8Dw{H^Hk2z6;(2 z-v%dOA8)~z!SBFG5nKUaPHKaKi@;THVEMS&@;xAR5Og?|h7)Il?oe7vgrXi3OE+Xg za754QtaMC;a6?)U7CU;E7fIuo`el~Uc4vdE6UIq3pb>83z$Qb^nQWQBvvj=wVdz|8 z<0v}b|5%;YvO`^FsV{fF&O_pHl9j1Xh(;*YxsZyK$hk_bvB-;zW1lqQT~^LUmW4@% z)7<9dMZwIVzR~%a=k%#<11lW|TSo6-1mSubzGP#iRxzbJLJf4K!-Y03Y}*30vb7m@cvt$+@VRhkrcrCu!&)P(*QvG?FFkrt!>Viu>%y)P%4Wi86VtYloKYJs zDnXA+BXjPFrF#A8058m{iO!$kk{Xm^z+sm~9@C3LC}}Z!KS2y|G#XW%PbvF6_BWzw zuQSR{u19R6#Y%g<-8y?!y;`e0)5>9JVRx@U-;T#FDl&|Bg_5B#mR)nZyB02=#rax& zHepL8+J8w*%RT8%+l+~AWh*O<$ig*kavPH>Ca!HZR%mKA7ZlxZQhjlyGLu|_;js-` z)@dqAPN5b^uEbnS>BLNUf)?;ZjWd!el?e`vkv#zcPGY_I5CB2o&fAi`BUvThP>4Wt z*v*CC*EBy>Aw|)A)mIjjGW7S~!Y3l!W0h*crzxHH4750rqf}BuiaU(T5X7kzwT*g* jpMA+x{3FLi9v-Nf@ch$-K`NW_xjpf>kMTgDQU`wk-+Wt- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..808849ed3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# e4db27214f7e7544f2022c647b585925_bb0e321, 2015 +# e4db27214f7e7544f2022c647b585925_bb0e321, 2014 +# Jannis Leidel , 2011 +# Uriel Medina , 2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-11 05:54+0000\n" +"Last-Translator: Uriel Medina \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redireccionar desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Esta debe ser una ruta absoluta, excluyendo el nombre de dominio. Ejemplo: “/" +"eventos/búsqueda/”." + +msgid "redirect to" +msgstr "redireccionar a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Esto puede ser una ruta absoluta (como se indica arriba) o una URL completa " +"que comience con un esquema como \"https: //\"." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f690dc3cb31d2d19a4a41ef88d22f64dae7bc502 GIT binary patch literal 1144 zcmZuv%We}f6dj%0d0`~-XzY`~BRt^o+AwL!sU;JOd6eBNUD9v~eAJx-+I*x8^zl9pnjXu!nMjo1)2 zVqkSzIHp{<5tW6-i9X;8Xx2zUbMystemY`7A79e zw9WiQ!6KktqqB>h)90}btaKb~8NG)Qgd0itl8u#GMU?CbHPodZ=i0ciYlkuk9~DCz z_H{(1t!H7652Q~Gp9qI$n)PNQtgnR41~pcqdi`M?tF$Ss3;RYWn+m5*L_Lv7qp7Qn zNZI0E4GS^ku+Jik=tVA+v>5Z68RA`1i3*kd;4ruGcwBW}N$&Eb8tbe!YjHv8T&l)) zXRTMOl)4+;&c%Bg)q3f%Rt~aZ|1d|#jwh~`rxSXfU`8L!nOjFAHjL{Brk>2M4qAoE=T%VxRcm~rSO&>0Rhu}t`X z#Cy0+^*=U5`FX8`VME`--0%2sYQaNRi6%}->1<%&#Hksjk{U*wss6`^Q;*N>7t625 YYUVgOlm-em;Xn3b;l}w$;7F;1-$S5Ra{vGU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..1eb774c82 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2014-2015,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-21 13:00+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Esta ruta debe ser absoluta, excluyendo el nombre de dominio. Ejemplo: “/" +"events/search”." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Esto puede ser bien una ruta absoluta (como arriba) o una URL completa que " +"empiece con un esquema, por ejemplo “https://”." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e591305e66ed78b1e8c33a1deab61d06172920eb GIT binary patch literal 1147 zcmZ`%yKWRQ6dfSE77!9O#idFj@V*2}GGQZNNu-EGiNXd7gphaU?ykd(J=mVSYJP!& zmJ)#kqNR&O!#|)<^AjBJZXQCy($Vqt9G`1@&aWF2?;?!Lz)c_pt^uEbFb;w6?KiLq z`~jW=56?u=CGdN2(0>450e=Ap{de#L_y_nS@Dm8S?Q>D|0{j;I5_|~03SNNtI`|1V z_`CoIeII-tT!LXS^bU3C9mZMU;&3+VH=ahYjV^>@gHvTW@h<8Nl%qsy>N2tN1Ga=h zcAd#e&s0c1pegCFVzzmj3_eq@%re^CSRv=7^-A|?2RmtU;C&I-YLnHGs~eayOM~&h zj(3Q6ldMd`Rp~I-GNasbzO6@Y~jg6@- zZDt&;mIq(WKHX39((I>7?msZ4&y0CpO-#OkZMt8|K8p^^Jf^3G)XL#!v`uF6u9DL< zHGc4&ot>%={;J2jVRLPC!z0SZPBnI~+H1Ax%Ifm!;>mL~s`X0SXpgrRoxKA0^}OqA zMTUPePsu=9$G)}MSrW4+y3nr2RxIkog#Q@RY*+c?L&r4iRawtUD>JcVZ0=&x#jtd( z<~)t2ttm~nTGW`HuN;Lk!F#fc7M(X#l$pq6X3O?2yZ$AY>A& zNDqW>N+dcj6eo;DeL9}-9=oO7Wqa^h4ttDKFURrRW1Sk}j5OZcBBjHiDy, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser una ruta absoluta (como antes) o una URL completa que empiece " +"con 'http://'." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7f3b41b79f2a605f84f14fef27429a828deb41e GIT binary patch literal 1116 zcmZuv&ubGw6kfIdii+Ub!?RvmbhAyt+HQ?VHHAupC8k9Yk;(3BGG%vWotbUZi}auH zrU$R0Codv+s%J0WMSJz1@S8Mgq&V>Ly*K;jdoypppI0Vc2UzEUt3V1|0zLqK{Q~^A z-@sGg5AY0VoCtz*;CEnO{~mk+{2A=)zkw&f-@&hdAHYTAty4kp9Q*>z;ICj`e;vh_ z!6De|)WN=f1$-L30ft0y20%FI4GK;IXMKR>>qg6KLK+P@m4*{%gLY3^N`#^g6HC`) zLr6r&>a283g>XHZ5*9mpo2Nfk`DIX^qec=C_31CTRl{^ zJzZw07eB6glenK`W$KTkEu}gaQjrolSE z(wBx0gu`WKXKD*!Z8n^pquN}2>-LQqtjemeE^Hg2Y$lvGF+F6v|HaahD4oQF=*||~ zj>s40?{)FSteWWjE>5X#DY_iCS>!Q2E`*X6qi%9vCVHBthNIls*{M1&E;qUFk4A^L z9#J;biP*kqK8dC)&6Q?j{KQ&yrgC2^hY5!5-2#tr+;>rtVb+V3^n|hO>g(<0aDH6p z+ikK58!FNM|HL%kk?!cqF%5cE*0R!wEL_$mw=t<=klOm}A{~bHDMi=nRGVI`j0~5^ z{ZA@rSf{BdIc2i&Td4$@5`!ALPS6zIsYw_kI|7~?RCvE(8?Hd*%aVN}StUMDG&vmC zWYwz+O1Z;k|D*VSgQ53!S*4mdBc=0>fdvOHluGI, 2015 +# Jesús Bautista , 2019 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-12-26 16:57+0000\n" +"Last-Translator: Jesús Bautista \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirección" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Esta debería ser una ruta absoluta, excluyendo el nombre de dominio. Por " +"ejemplo: \"/events/search/\"." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Esto puede ser una ruta absoluta (como arriba) o una URL completa que " +"comience con \"http://\"." + +msgid "redirect" +msgstr "redirigir" + +msgid "redirects" +msgstr "redirecciona" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..392e5d326 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9b37bae6594f472200227c421eea5d8a705e08c GIT binary patch literal 1131 zcmZ`%zfTlF6do0SoiQ;MRu<0=B74UjjakGP6%q_6!9xqGx!rfW!_CfYc4iOk_$TbJ zv$QjIbk|uMOM@g<{u6$4cYq;rvfqC5cHWP9Z@-^+XFdq5o4|b_1#SbMfv}E&aP|ur z0DpiT;N2x5Zh*glgZ~lu7Wf-D`2PUUfRDi%_zm2Fy>&&15}bg$;P2qzKL_V~;6-ro zdkJoUcffc=A1|a3*MMM$+F@M=u8(&@T%B^DkQ1p^_W=soGXGM zd(P_GGnLZkG%Fpx*dfo6#WD43t!aB}ot&4IS00DITuW>PGC7YIXKL{FJ0Vf zog92@PHMT_);bO4F4mbR-cNL$hJ?5XrM8gDkdXy9X=Ps)rRF#!ZSjzecP+=VO7cnW zYTA)F-B7=>#ku9}+1?4KJd4fB?qUSdS{l9O$|-ANN_VBnY-5W{Tlr|iWh#xH)tQUB zHm1hr>u8IID!4{3q{n4C3!Qe|1kuP;pnUCk=0t#U@Wm9y4o8^!_@5~2ojtpq$8;_ z*&{b#xMdQGLC{63P)&M;TIv5)H*LtU7#*E8 a=;iRV0Wo$UDbtFbQ<^6qCL?fCdGQyrVOVwm literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..43ed0792c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2015 +# Martin , 2021 +# Marti Raudsepp , 2014 +# Ragnar Rebase , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-22 11:23+0000\n" +"Last-Translator: Martin \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ümbersuunamised" + +msgid "site" +msgstr "sait" + +msgid "redirect from" +msgstr "ümbersuunatav asukoht" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"See peaks olema absoluutne asukoht, v.a. domeeninimi. Näide: “/events/" +"search/”." + +msgid "redirect to" +msgstr "suuna aadressile" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"See võib olla kas absoluutne asukoht (nagu ülemine) või täielik URL, mis " +"algab skeemiga nagu “https://”." + +msgid "redirect" +msgstr "suunamine" + +msgid "redirects" +msgstr "suunamised" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a223a93b60c7d510b0a677c8c8a1ba341ea38f0d GIT binary patch literal 1126 zcmZ`%OHUL*5N;J;Yc$cbhw`>WW*-<5GPp(&2qYi`7d;RYYiEj?W@o$Cez5DF_!Hjb zA9(ZX*@Hj8qd^i+{t2u1!4eWX`R1#tu2{VLoN{j6Y-h{xu=qvz?fc`8#v)FSGM~=6U9O z%qz^n{+c<|dB@Bt#0>_ELmQL0%D5Q>KG#Py{DxRgEyOOR(oo{8Xy(#Ff(lv$BwbDh zSizRng?9v9bUBpKvPB=!ENH%l178%dx4Q|}p>a}W(BnwHut`oG0_zjjESw#G&YkPp zxLQ3sKBT2VnEt|4oZE9khH`PzIvsy&J7i%?&P7iy1dd`g>WUDPzFY=KUj81{@CNZ3w| z)B{~0JoUj)(G$b-j9*$*65V;m!7B5ZQPd>t#ITI^gC{75LGm1XyH zc|yfFx=Ow}TiV*#TAesM29~U!(vOi^Dbi`U)m|W!6I7IrekAJ-Jxn5^Gh%i8)XHL8c?5IDqYyTb@bt9 zwq#07la=!bGZBnUsSb-O*4BZX>yL2rw?0|(7N~=`1d8@|;6tA?w PsV>fMM2}jTSA^mpUcysK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..ccd0ffe3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +# Urtzi Odriozola , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 15:50+0000\n" +"Last-Translator: Urtzi Odriozola \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirects" + +msgid "site" +msgstr "webgunea" + +msgid "redirect from" +msgstr "nondik berbidalia" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Honek “bide” absolutua izan behar du, domeinu izena kenduta. Adibidez: “/" +"events/search/”." + +msgid "redirect to" +msgstr "Nora berbidali" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Hau “bide“ absolutua (goian bezala) edo URL osoa , “https://”-rekin hasiz, " +"izan daiteke." + +msgid "redirect" +msgstr "berbidali" + +msgid "redirects" +msgstr "berbidali" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b46809368aafd293d454f67ca163c2f5b7de8b4 GIT binary patch literal 1234 zcmZ`%%W4!s6fHHrMqKDh#KqkuQF|WIMeG<6HG+^}h!YiDReEZsJ9c*sT{TI>O_aPA zgS+f><7P|{(ydfR3{)YAPD}1r)KiNND5A$TUGa-bL-ChIN!0zuucP)fD&*P zSOM(X0_@#S;5qOIcm_NI0AkF7qEYHjIo#C5G=vJ z!RNqFk$f3E4!#Ip1l#;(~1@S zK#|8|8WSV}?Tdu4;bTgMH7%&hwNG7K;Y3b|Zj!jBaxDyLbYzf}=7|pC3QeLC7s~TR zBuLdf>=bQJzxB1QDmRzgo_?2YdnsSm!jiQ+=yR3Clo!@YRuGL)Nk%+~Ddv&L(!dmt zs-bYLXiiLsSgV{8Jn{UtcCzy#wi{46kg(73CDAOPS$^&WM-@Y^rmQYc$i7?>rUYY<*&Jg8&~pJ znL)0!Q%rcQLat@vQo{WpB3|+7W-H7h3TYE8Z4dNtRptd=>m@DOp`Y28%vbV znzhZkS+&9EbS8aGUFkexq_mQ(UOHnM-IOk%!Zg}t=DlfJ2ijP|{cJizHjz4arno)* zrn7Zo)=e|J=ZzFdteNG*yx{?zX1b8h5$vH%@UaGS>HNN+ZFZ+YmpTvpO*^y9_VUjV oSo+GWTCu&cKn#lTShq@>buufaiRPN@@SOj3cZX|7jpAkY7f^=Vwg3PC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..0200108be --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2015 +# Ali Vakilzade , 2015 +# Jannis Leidel , 2011 +# rahim agh , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-19 03:19+0000\n" +"Last-Translator: rahim agh \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "باز-ارسال‌ها" + +msgid "site" +msgstr "سایت" + +msgid "redirect from" +msgstr "فرم ارسال به نشانی جدید" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "می‌بایست یک مسیر مطلق و بدون نام دامنه باشد. مانند: '/events/search/'." + +msgid "redirect to" +msgstr "ارسال به نشانی" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"می‌تواند یک مسیر مطلق (همانند بالا) و یا یک آدرس کامل با 'http://‎' باشد." + +msgid "redirect" +msgstr "باز-ارسال" + +msgid "redirects" +msgstr "باز-ارسال‌ها" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..355a427bb9f9abb4fee70846a7a779d9483725d6 GIT binary patch literal 1164 zcmZ`%J#QOF5M3wE7lQlZfIkHP2~P3Pz_-CKz&`-5flpw6{FkU2}dkzZkb|V z!ix0j@h`PV7mGZ9_4wD(x>u}yZ>!YqW}nZ9&r91^sUU<<vipL`9eYfJo_dsNW~tE1pgF@o$tm3_w{8t)3KPPLo)!7+C} zNOl-!rpmtTXEB@jf(A$5X2(1?DKz_93&d=1ZI839``P$Djkk;O&b=+1!9yJ-n*{Bm z)#5`zU+CZredA-pR>SRPy`FJ4VciyVV4O1%Q%(bnKA?*!w?CKnwP3ZF~fSqyTQ%36oWviE3mknLQ@rCw7G*}f}% z8h$}LCq~}LENE&5N45{zW(PjBu^`v2%(%C`OY7_2rlU{yXgu523;rp*TH=jg)P, 2011 +# Klaus Dahlén , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-14 12:18+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Edelleenohjaukset" + +msgid "site" +msgstr "sivusto" + +msgid "redirect from" +msgstr "ohjaa osoitteesta" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Tässä on käytettävä absoluuttista polkua ilman verkkotunnusta. Esimerkki: \"/" +"tapahtumat/haku/\"." + +msgid "redirect to" +msgstr "ohjaa osoitteeseen" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Tässä on käytettävä joko absoluuttista polkua (kuten yllä) tai täydellistä " +"URL-osoitetta joka alkaa skeemalla (esim. \"https://\")." + +msgid "redirect" +msgstr "edelleenohjaus" + +msgid "redirects" +msgstr "edelleenohjaukset" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4902f97ade67d6f9cdac4e957462c7f021d10830 GIT binary patch literal 1155 zcmZ8gJ#W-N5H%3Kjt?PfiYXHjpYM`_$RQB|5-Cz5j_3jfqS&+N?l#!F&hGkhGzjq@ z=s=<*Kt~BxuHy$#q7aFSKf&8`E@pZUHH94fq21aRB(W z-@pstFYpX_dL{@ifxm*i|99{e@DH%}{|TM~AAq-kKfqPkt#d)}2K*fCa~**Fz7;s% z06zv_2Y0~Ue+P^wc!d{21Q!5r``mt<1ul+fL2&+vJ^30CItVs7m4*{%gLYq9N`#^g z6HC`;Loh_g>a283g>ZeE78YOhfM-Z!nYv|`(bncVStpE>szvw(U3L8h!;p_MHDwpl+GE05B(|Klzhe=kZJ|GIAROdn}QX=O%tqet8WE}gT5f4~7 z8(9`6=~uDM(TRe|gt|uOCzjL4a~oLcIA|HYjTVG!Y50VVm0HD=ZVT1ZwM{Oxap8vT z$uzuQ_H5YJG1Xd+!c87X?;1W74#mth=9*z+K5WcUb3Sg~x!u61tqbeIwh_u^!f6xJ zeN!rpw=RWA>8?;pi+bl?59iD3iO!d?MfFP2SdS#n`km!=ghQ*&mqb}TnE z&IS)SkyLQ$X!OY$s6|Uhr9vs3^?|+!+aR0;pw|Z4V>ho45oX$Q=77ZY!b4n*Vga%v4 zz(e*roE=9U3lWO, 2014-2015,2019,2021 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-02 13:17+0000\n" +"Last-Translator: Bruno Brouard \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Redirections" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirigé depuis" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple, « /" +"evenements/rechercher/ »." + +msgid "redirect to" +msgstr "redirigé vers" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète " +"débutant par un protocole tel que « https:// »." + +msgid "redirect" +msgstr "redirection" + +msgid "redirects" +msgstr "redirections" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..ecf5b4b40 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..52e3967c426ca7364afe554f64ab32e39166cb20 GIT binary patch literal 1075 zcmZuvO-~d-5FHi2R=jXFv2H-HcXn4r92gZ8l1(5IT=d*K(>pUT(>>|#VV56bj7Pnh zh%w=2ylvve|6ug&*{kvO0*ewWd3jY`U9YRV>)X`COAmGxxBKbV>^tCcKY(rE zC-4GTKIeH?z^}n>|6A}i@JF!Q{~0_1{sMjld<7;EM;AOV1ef47@CUHd`2}`5zrj=B zNfbN1o8ZgfIWQzf+84pD#@Ttm<(;|nP7E^MB^PXoIMX7s#_Ob+p@>WB3KE%3g(d{N zYgArYK_#~-&2WPiwI^mtAx*t1&uM#Wos8w$W-_5ZDrq{kwhVlKx_+c;QdQ-#6F#eW zi^L$xtJsy|NQza#Gf9#cqE4#=UX-~AXxbNhLR#Y+!F7~6U47j5*rA?Q#c5>K*f*ZZ ztnfCq+QCIxJ7&*?HkpzE#XDRksxsdm9LwF&YCTf* zYWD#uWm54(u#VtGKy95FJo54D_51z$xEK|Mf7I>?L1|R%C)}T{ZL~L5PcPQ2H)@ZS zw0Jev*)P$$6$9&+IbL^>qLgbRY`EQ7V+*JIT%$dq*{Y0``;mYax|tm}8BoG&n|Y;q z&eoJJOhB?6g(keaNJnlsBg3#s52-;&hhYnD)45Cc;I&3x)8%i&y)(O5^OkLDQlZdU zoO*3Tz2UnIGf6T2x|>F+GQ&5Rh~eRA&~g`W42v>y_=$4y&#(#n1RowKDbJKAZtyZ$ wP!FnbWSyS5;o|?BElm2TBad4x6t*WR4G;g05=F5c9*mbTx}K?UaFKd{0BGzr?f?J) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..8ad2ce1ab --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2019-06-22 21:46+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Redirects" +msgstr "Athsheolaidh" + +msgid "site" +msgstr "suíomh" + +msgid "redirect from" +msgstr "atreoraigh ó" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Teastaíonn dearbhchosán gan ainm fearainn. Sampla '/events/search/'." + +msgid "redirect to" +msgstr "atreoraigh go dtí" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "Is féidir dearbhchosán nó URL lán ag tosnú le 'http://'." + +msgid "redirect" +msgstr "athsheol" + +msgid "redirects" +msgstr "atreoraithe" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e611c50dbadb81ac935a886654b0162d3a0aa7ad GIT binary patch literal 1250 zcma)5J!=#}7#_d%L_|Bm;;kgX%enR@XsNUxbpzgonp2%W<*@(^9Q9-CDR#J_r|-DQE?6BH*)9R+4<3 z!Sb}R_M!}-@6#mNSbNzVp5;qh>pUK}{hSGstC_CzSP+d+ZY!Y-8Bxh5&8&*5uVosG zCURMt;1e%}%gSMGH~J#BxuGRzt1TS+- z7QwoduGZ#qsin;jGDR&4$$L^%2neZFHbFNt8-nr}bsQMxwX(9(46%Y*lB>`on zP12(}Ns%Yxjk#-cGg}|gZnheitqGVB?>*?F%^+7p($|>g6lJAwUWV?i-Yh@2l^4%i zl8(=q%*H>E(z!(y{`8wtkvHab?S$sD)>S?w(;t|=J2^$eZFkIcyKQ>-kRrFo=_0i# zrReQ!dOOkE9(d^jb?C$iGISn;jQ$S%r=}Y0QYg6(YW;(9DlerlY*yG@U{79J2yL;9 zg4h)JpI&#+E;-5mg zkgSG!3;Y@}F}M`l6+B&Ien@x!+ef@P)(G4&48MYwhrPfs5cRasnoArWrL7>8DDHs% majk?GCehXvLw(~OZjMBXyky&Kvj2FB`ft~0j`(JW`s_E7;C?{> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..232e2982e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-15 10:46+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "Ath-stiùiridhean" + +msgid "site" +msgstr "làrach" + +msgid "redirect from" +msgstr "ath-stiùireadh o" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Bu chòir seo a bhith ’na shlighe absaloideach as aonais ainm na h-àrainne. " +"Ball-eisimpleir: “/tachartasan/lorg/”." + +msgid "redirect to" +msgstr "ath-stiùireadh gu" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Faodaidh seo a bhith ’na shlighe absaloideach (mar a tha gu h-àrd) no ’na " +"URL slàn a thòisicheas le sgeama, can “https://”." + +msgid "redirect" +msgstr "ath-stiùireadh" + +msgid "redirects" +msgstr "ath-stiùiridhean" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d0f8ae4d2e26a666fc52c1af7703a5de2e40772d GIT binary patch literal 1127 zcmZuw%We}f6dj)(Sffj@%1{xf(1{1yBL_zrm8%QHdn0<6G~!Qa4_!8ahj2EGlx z4sL+G{weq@n1j(`)Z6ENZ$C~0=SR_azeyONZE(&f2O^P1#Lfoop0pHmMIAvxx}GqE zgm^awus@28HxU22yB1?SZ ze><*_7{*zV_)=_1iO#uHqiSU&Q`79ChqyZW^(RXKwYErdFJ#i zwt3hy~8!W7|+M3setIHuqX^&gS+J-Beai>j0 zU2b*ZG~MlvIM;;{_ftGUR*7|f4+SbMcq&+1@I0bNJd?4+82jl*VH(XA%cmKvq0{bKp$ zld?feCxR@DSEwE*Q#d~LAEz>Ihm@cY%E%6f1q%pA_QM*Cf`@!nU^(xL7>0#IXGRRR z1l;%k)+?A-q)F)<1{`@%DyhBy&?, 2017,2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2019-02-15 17:04+0000\n" +"Last-Translator: fasouto \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redireccións" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "orixe da redirección" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Debe ser unha ruta absoluta, sen o nome de dominio. Exemplo: '/events/" +"search/'" + +msgid "redirect to" +msgstr "destino da redirección" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pode ser unha ruta absoluta (coma a de enriba) ou un URL completo que empece " +"por 'http://'" + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redireccións" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..79db237ddce9fc6b20906591e2afc7794516d1e8 GIT binary patch literal 1204 zcma)4&ubGw6kfIdii+ad!$Yv7*iAO6hq5(Q)D(*?mXZqMX_8E`TQ@slX42GK@ehzx zTSZJu1rN38-IFITUc3m-P1LLZgx_q^#wvmXU%vPDeec&~zMdUgcW{ma=YT433U~w9 z^9``E@4#K)CvXoa9&nsv;Fn;l-vOThzXMzS2k;R16Zj+W88``lh^55cFw9kA7JfscUSf>9!|VJ5vn&OzX)HE<61DEYNBpoQbi^J*x0MJuNigo-LG zrZOiU>VQjv!^%oTEzPOPbU#dTq!H06#DbhcNG zOSc$Tg#AB!8ZU=>Z%Us6o|=nVl11*6kPYQi+)P|mxHLgMvyhIdP@o(Q4^vDRV8HW6 z=n8q{Q!kkRJD5vikb8-Kzo6$$B53R6QDh r+HBBX;f;*_{sbdFMys`dzUsZr)&@&ryUl%G$8-mNas?eszwP`2PbHo4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..0788ddb5d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2014-2015,2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-08-02 13:21+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "הפניות" + +msgid "site" +msgstr "אתר" + +msgid "redirect from" +msgstr "הפניה מ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמה: “/events/search/”." + +msgid "redirect to" +msgstr "הפניה אל" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "זה אמור להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב־“http://‎”." + +msgid "redirect" +msgstr "הפניה" + +msgid "redirects" +msgstr "הפניות" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..367e4a9a75b9da60d1fd2b0f7d2dbe0a0bd8c5ba GIT binary patch literal 1409 zcmah|ZEI9V6u!RHmo25>NAbf^kYus5dpGzJZ;VJaQcFTZ*tFk-$==z$SMJU%_s%8} zL@-i($1mnfTPV`mB0+2@v?fsWpUC`!{)Ij>H}0ZT9XR`(bLKg(v-i!Rz3Tzae#j9> z6Y@FaA;g_6$RcDL@&n|{T|saF*a3b4>;WDBCh#EeKJdwo90peR1i=RUm-Yt1G2p+z z{;NRHhi4zO-4M`+2dR9YprX+vEvUsMEeR5-PDD;H_)?*=z82KuI-zl1 zz@wH$l@zY2-On;wT$rUo^IWI0Lo0}+u|(@$RIiWK%B)4A`dRD}zn}3d605DOAG=VL zq*!%%DoOILsL{+S@Afhg(O6w93#p5GA$Z-UBZ{wa*-@1R(Nno*b44eO+1LF}!I~)jV30-#wpea zS$LKjXQGo6C&Gy^1d%O><<#XI@y>w68sMFdPKGB!oXRXOG;8Ku78%znkLX)2B^Ev_ z(pY444&A`Kka@F~%C7}@Fbj$lo}yAgep$~dL*o!zditkks2m$t=ft);s4a-z48 z?F848v|g>uU74F1&EBYmm5WMh?36XH_b{9mtGeFHu=^=$B|I;Lo?dKTW|JeHtJM}c zn~^Q$-YcTXrBn}_j3`Mf^I1RV8N00VZV{2}d9#?Fn4(gh9+z}G9}&I(C5{FDjj#YTcpEX8 i6HkQ)!vbFVTn3b_a%n&M)qwo}tewd|!9wiE%l!vVJzlZ^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..44b447f2f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "से अनुप्रेषित" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"डोमेन नाम को छोड़कर बाकि सब संपूर्ण पथ होना चाहिए | उदाहरण: '/events/search'" + +msgid "redirect to" +msgstr "को अनुप्रेषित" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"यह या तो एक संपूर्ण पथ (जैसा ऊपर निर्दिष्ट किया हैं ) हो सकता है या 'http://' के साथ " +"शुरू होनेवाला पूर्ण URL हो सकता है." + +msgid "redirect" +msgstr "पुनः प्रेषित" + +msgid "redirects" +msgstr "पुनः प्रेषित" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65b8363cf9e5b11b7ff164858a9b75e7638a7b75 GIT binary patch literal 1207 zcmZuv%W4!s6m8!+B7$odS3#4YHPb!DS102uMi2~!Fi~(<(_NXaNq1FKRXr2Mm3zUB z3pawUMcla&S3Va0gXr3y@KnzvBWl6n+*@_-sn`8}Z13{`;}CEhNP#238^DhrfM5Fw ztOLJ*`@r>GL2wZK0_^p#!H2=`z+V3Wychfh{0sO797Xlo%^U4V-xyxvlTg>R8m?Mp4+NkoJ*4OTkb=)|q`ZPi%&1BA%ajP}c9J|^~S9$7< z|8_h}Vk^n3)R$sQN_D}dBE<{Qq~$GMl(~p$rX_|#Ioq;=nTtrcIJIJTgw)skRCrCmp~KFp(a92d!d297L_dq z!tfzi10LKRYAW>SkAiSKNivtj%et`@r?PThM6;V*Q(qf2w-=P!m6eipdvEH2pZN4t zs(~QOryX8f_ar$ZdOYW2|9`yCqW2$>ECjYgiwlMBUNzF6@W0(%Zl7NU(~xxfXQucx Nn_ScS&zA`gegixSS=Imm literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..75a97c3bf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Redirects" +msgstr "Preusmjeravanja" + +msgid "site" +msgstr "stranica" + +msgid "redirect from" +msgstr "preusmjeri od" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ovo bi trebala biti apsolutna putanja, bez imena domene. Primjer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmjeri na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ovo može biti ili apsolutna putanja (kao gore) ili potpuni URL koji počinje " +"sa 'http://'" + +msgid "redirect" +msgstr "preusmjeri" + +msgid "redirects" +msgstr "preusmjeravanja" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4e0312e0bd2ace31c2baef7874d688bd6b9a29d8 GIT binary patch literal 1221 zcmZ`%y>A>v6dxdb9fATR(oj5ELb8STzLFwZ=Kw(*DN-yfb0$bsbGz?u=WcdpH8bn; znG}(mREPpmpg@7BKy+!58}1tZ07?`hQSndkn>#y}5;M|ofA4GFd-L}F_2#8-10Y3!C_}{>pyz>mN`1OEVTLI3&% zA;#dJz@LNPKv1-gz?Z>ag5L&zb87zu{1WsNFj6dKh|Ag_@jUQy6mVW#(efL6KnWrC zI9HCd;6=Yso-%1@z{DyP>&kxUts5LEtz|Rk_i@LJYB}Ph&$3KuzpC&j zK1GPanAYPMF~#Y0+6*zT8uDQ?vt?`5@EPgTB(1^^S{sd>TRYq5Z|gMMjgPGf7+unz zRp>tOVQ5tvL*61Z=sbtse*b22?L00P8?sBbO=jbdN$J`^g(uyngi4KFT|23ho7R;+ zB~vX`-@Cd+E3vn3-tDy8yW#?ZhBeAw9HGi-;w*OmZlZ+~DTv#@C$^|Zr8CPj{ n@tvA1j%A+G+EZJ*))e_O@8XMWG_~PEdu}f, 2016,2019,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 22:11+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Dalesposrědkowanja" + +msgid "site" +msgstr "sydło" + +msgid "redirect from" +msgstr "dalesposrědkowanje wot" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"To měło absolutna šćežka być, nimo domenoweho mjena. Přikład: \"/events/" +"search/\"." + +msgid "redirect to" +msgstr "dalesposrědkowanje do" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"To móže pak absolutna šćežka być (kaž horjeka) pak dospołny URL, kotryž so z " +"\"https:/\" započina." + +msgid "redirect" +msgstr "dalesposrědkowanje" + +msgid "redirects" +msgstr "dalesposrědkowanja" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8321e8b5c173d38c17f8fa994f2e40c45ba79747 GIT binary patch literal 1111 zcmZXSF>f426vrndkZ=K^MCn5D;>s4@+dB)SXe}2>a6}{~j@90tHr^DNbydC$$0b7IZZlSZ^K1)ooy!$xzX%^w_a;UL%WRnzmZgu*c0loPrf`t_qD=~UMK{cvXvz#W0p-upS7lxPT_7=QLR@%s;js{7*Jn`t$d3pRN5Y^J(rb28mCU3V{ZpGL5X r?zq(%t)#iC>$Hx4DqZP|?)XCU7yP*-Wel4)HVeM6B`RyQoQeMcx}RDZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..8e778d4ad --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016,2021 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 15:20+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Átirányítások" + +msgid "site" +msgstr "honlap" + +msgid "redirect from" +msgstr "átirányítva innen" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Abszolút útvonal legyen, a domain név nélkül. Például: \"/cikk/keres/\"." + +msgid "redirect to" +msgstr "átirányítva ide" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Lehet abszolút útvonal is (mint feljebb), vagy teljes URL, amely \"https://" +"\"-sel kezdődik." + +msgid "redirect" +msgstr "átirányítás" + +msgid "redirects" +msgstr "átirányít" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f141d2262f820d360c6137e7900377267c753135 GIT binary patch literal 1261 zcmbVKyK59d99}iPPHe0!EPhr=FmtyT6ywH-uZRJI;kal$xtrXs?Cl&gvw2uWNfSj2 z!9uJO3@Qm2HA?UiI~(iSQdI2xC;aB_yoeTp1K)o0dp~wQALzR8;p_zt0aai>unM^I z1#q^nz&P*&xC)%v=6QR-55UfU3A_)y26q1Mz+K>v;D^8`-~i;>4$r#{zTW0taB}*4 zZC-Bk2KXTKpTMrpcQ8^kbMFK@ojcos-OXF8Ui<1Hy|>E=B~gu(s2J^)!$?zwCo~~Q zL?#r9An*w-0)My%!)Eyer2nvPnd@HLC zWg1sq;y*L?k(jB(Y1M_IBvoadM+qgoF7h-y!|RP$1k_y+Qz9|CpaoZz(B)O_zB?D1 zRI=Nl|(}-!$x&2sF%`L-TYdwqSY&8>s>+r4u5di(I8FMdbacQGTF_W*zdZ9JgFN)jog>bgen;RV&9o||&G4JQj$;4p4tUTMmj7H3u zLL|?U4cE!H7 z%XXFQ5)3z*#^(roM)oD>HSngXTx*8fb%JIc&d6ZjI!EW_UThzs&YXQh_C1vE?Pja2 zE7N(s*)7CvW()0J-k|b_Z2q@SR{q@w>a<#g?+3f$hQWBR>{APc>v*&IUCC}_3uN!Z h?nXqT-{v0u{q9{an}4tBKUHp**__v0%ByVN`w8Xt>Q?{& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..a4ab58464 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-11-01 20:45+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Վերահղում" + +msgid "site" +msgstr "կայք" + +msgid "redirect from" +msgstr "վերահղում" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Սա պետք է լինի բացարձակ ճանապարհ, բացի տիրույթի անվանից։ Օրինակ․ '/events/" +"search/'։" + +msgid "redirect to" +msgstr "վերահղում" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Սա կարող է լինել բացարձակ ճանապարհ կամ ամբողջական URL, որը սկսվում է " +"'http://'֊ով։" + +msgid "redirect" +msgstr "վերահղում" + +msgid "redirects" +msgstr "վերահղումներ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b3b87bb8ac923495c7b02eca90c7c70cdcc8edf GIT binary patch literal 1152 zcmZuw%Wl&^6g5y@L2TF|vAC?73LHBTsI5y7&X@U@=+?+d}bI;6NAOEbxB~nN{DAm|@Vt{tLGT(l0S;c{vUizoVw*GOZThILWUaqobv6UIq3qA@CIHFvH`qG+`>Q? zD;)<%MxWrK;eHmrWMidP31ufjjdY{Ol{PLsv?G~?&+3s4`#Pb<(Tje#ZCE&P!yVyp zl1|)y7`Edu-lX<=@}P4s?!+;OVUN$G*Ie?}K?>WO)afKKco>ZXVO`iaLfJw%Z4x^4 zT{}^6a{_oFh+YM17cpXA!16Gbc4Wo!kj%nhn-gl~yWD*kdPE))#Wfw~Yz YYF~fuUB5ET<;Z_*3&YM@0MqK=4^16TCjbBd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..c4f1b408d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirectiones" + +msgid "site" +msgstr "sito" + +msgid "redirect from" +msgstr "formulario de redirection" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isto debe esser un cammino absolute, excludente le nomine de dominio. " +"Exemplo: '/eventos/recerca'." + +msgid "redirect to" +msgstr "rediriger a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Isto pote esser o un cammino absolute (como supra) o un URL complete " +"comenciante con 'http://'." + +msgid "redirect" +msgstr "redirection" + +msgid "redirects" +msgstr "redirectiones" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e25395110eb8ac2bb048ed742ec773392416d5d8 GIT binary patch literal 1105 zcmZ`%%T5$Q6fG5BV~mL#H!f~mL8NB};sP2mM1@EMo#3DgRyEz1?qaH|I#tyS?Dz?H z`UmdZ`T@odaA}all|SJrU>ss%C1=jPUAOLQ&X2oO?*-0H;69K8w}DSUJjX!1`w0wz z-@p#=?vfBUz@Nb}{tNgP_!~IJe+N&2kHLGuFQ5g#cSQ&d-T}V?e+9?y_Yiys`~V#D z&4c6j74TK?OE6N1YXHpC+8}WmxE>9h7&kt#2c#Bai*w~T3tsd~xd{3IfwzjyoE+m`2PbTjVw6nv#e5DH@P+J72>Dk60yV4Xw(idtJ>v*_^5N% z?wIs>hK|ZRGp)__&DF_ZbM0>HnKc1>OZta3S`T~>I<>}zmnbWx^Bk79`)kR+V{<*lA>oYcvhb(K%a)Tgdro?D_bbGf_J5kB*tFd}A#>B)lPKgWtkS};qYK<3v07R!r Apa1{> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ef7ed1f4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015,2021 +# rodin , 2011 +# rodin , 2015 +# sag᠎e , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-09-14 00:29+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Pengalihan" + +msgid "site" +msgstr "situs" + +msgid "redirect from" +msgstr "pengalihan dari" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Harus berupa lokasi absolut, tanpa nama domain. Contoh: “/events/search/”." + +msgid "redirect to" +msgstr "pengalihan ke" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Ini dapat berupa jalur mutlak (seperti diatas) atau URL lengkap diawali " +"dengan skema seperti “https://”." + +msgid "redirect" +msgstr "pengalihan" + +msgid "redirects" +msgstr "pengalihan" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89f3bde0dff47e24bc82f58042fb519e0c7e62d2 GIT binary patch literal 1019 zcmaJ<&2G~`5H?W$3JUjV*+*|n^(78^yPe=*32p)#RIBz{l)k?@Jor@VC~2u_LL5PRJ>Vqf>2_%`v+`TZ|qDp{Os z6kR5)EN+5;B-1&s`n$9g7Ba5j3;~5J(Eug<%xc*1hrp zE~+JMeh0FW8;h=YlJ2wZrOtnAfQId, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ridirektar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ico devas esar absoluta voyo, exkluzante la domeno nomo. Exemple: \"/eventi/" +"serchado/\"." + +msgid "redirect to" +msgstr "ridirektar a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ico devas esar absoluta voyo (kam supre) o kompleta URL uzante \"http://\"." + +msgid "redirect" +msgstr "ridirekturo" + +msgid "redirects" +msgstr "ridirekturi" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5fa353f1a25574d32f794a007bc0957923d79f98 GIT binary patch literal 1040 zcmZWn%W4!s6zynywYYKZ;))0}X!Ro?CLKpalRzMYAx;EQkVxv>V?P-VDCVStfvv^&a-=|#SOwENzxGwV#2d190QoAoBJ zVVswV4ac&O$bxbKf)>n!ph-LoydYa4QOf8v!17jcP+WiVB@mBUJ>QOsb?*@QA0SO0<>&?wI=S-Zu5PzKby; zEosU~htVQ})tKc}Bs_-3WP*diz%w={@3Ns6%fhdlof5i_6Zl;FO}D+;UOxG)&AdJ+cGvS# z(VVPERpECW zWM3y0s(k@@b%28v+JmL)W5Ml~?fti9BhTqqpLHoFgf*)Du}xuW2(BFLs#MNj|DHkf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..29be1476d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thordur Sigurdsson , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-11-20 05:10+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "vefur" + +msgid "redirect from" +msgstr "vísun frá" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "Þetta þarf að vera full slóð án lénsins. Dæmi: „/events/search/“." + +msgid "redirect to" +msgstr "vísa á" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Þetta getur verið full slóð (eins og hér að ofan) eða veffang með „http://“ " +"fremst." + +msgid "redirect" +msgstr "vísun" + +msgid "redirects" +msgstr "vísanir" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..097ab6bab59b89721b8e3e1c5487977d21371ce0 GIT binary patch literal 1092 zcmaJYx15M7{r1%X7*9HzZA72Rx7K2&W9AZRNUwIT{>IdF1!CyC3hy|TSY=&65# z8~g)K<;sm4KY$}Dl{oPycy7`bdcfMZ&ts2g#^d*6dg^_EaUHk=q`*z!6X3@o;P-w4 zZ-L*y8{qYYAh-tp4EFwCz&F6(z~28mcnW+7PJv&5-+yswe104J3ibimuU~=lE$}q> zHh2c?*YAPx1yArph~Ns~ZJ*nZi@??6SrA;FuqR&wLI**cQ)xJHHt6)Fr9>#&VPfg} zYzT(fu{tXqQz2ZRs={JL4|tw5wy9fY8Ev&U$U0%1R6QEvBsOf)=bXuw2`o!T`ycww z6*i8dqy3MyaW31}WtRGM=kqKOkCLoReLxgKsm_H|q(sg&S{;eJ$T;>vBOb7FHnJ>C z(jUh*lN$vm6Y3hBpIJ_y&TU|&#YR|fgpCK(co^63->qX*HiUIy#|ULJ;k1d-#VjvJ z^k~dad$?CtOLYDiuBumx9)}$kc}(k0WDwKllN$5Om5I>y&@mab%C85+*0NzL z6%}j}ZLEe;j>V>_iVH$Lx-bGt^FCf=Sj59Sjgpz9l6z8MP0{RFTNFjJwO|F3_+RV= xvaI$5DW5@jX(5t^tSsk+#N*DL6V+U8q8DE~|2?Nv{9_Ivo)dA6FA90-;18FRKq~+M literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..a201ce7df --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2020 +# palmux , 2014-2015,2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 16:04+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirezioni" + +msgid "site" +msgstr "sito" + +msgid "redirect from" +msgstr "redirezione da" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Deve essere un percorso assoluto, senza nome a dominio. Esempio: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirezione verso" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Può essere un percorso assoluto (come sopra) o un URL completo che inizia " +"con \"https: //\"." + +msgid "redirect" +msgstr "redirezione" + +msgid "redirects" +msgstr "redirezioni" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3b223b65eb0a2bc7bc1c951b8b42be948857d00f GIT binary patch literal 1193 zcmZuvOKTKC5N_YP;w9kCLmeYJyPJq86CY6heN0Kft3z%SFVCKf&tVJjA5oo3E>@>Z|IS{@S+v38S@#aDb2} z>?6D-n6*qWzHfwEgx`c~gsWQ^+f6)AY~mM*_Y!|5Ht}DGw-YZD7YGeP8`-_v7@H)% zL42L~53xD#qu~9-H&?hyY|h7tjowRQl3+Utv~AWVVp|Ej%!byE7B#;nhol)B5P2^Y zj#ez^dI}sKz>ompX;*|m1|L$=uV?{fu3c#7icVxz90W;jC{%nO1_ydUX&!1XC_;@g z$)Oxqlmw`XLzaT?_2;hEWo2hF-|H{Zty;>J6+dsv{a@!Wh!MxHMdE(+I4KdFzS@ zl_vum^20nR%G7`;%TQZ=s_5md)0LvKa?*xW|7B}HR6P@Fo#mRE>CAR^SlMG%wi7yz z*hh~Y%F;^pa;2?Y$OGkbEkhg5OD*97zfBgLaQTp@dAjJHD$@P@v?EI=DJ3XYcu`n6 z!Amw=;$VYGcwRL zGb?wyOl@m1qBCWmrrQOM%R?n}_h9avb$mU})GCP3>Ioca{)i37sqM8sZ5ZaMe!miO z-#RD5lCmKvH%-;u(FLt-ceX3VFqy%mj`0*GZ!w<3WQ<|-7~^q_=6-yJtL2Py8Egg5r0WEMoEsqv^)<1B{k1e$aS7-WYvD za?K~Yq7ywMkEt7xhe}UlL}E)w=k=Iv`ljHYVzXF}Fu8}x>*ht~8R#8O96EHpbXrfy=}h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..8c6ab2b07 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Goto Hayato , 2021 +# Jannis Leidel , 2011 +# Shinya Okano , 2014-2015 +# Takuya N , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-02 13:57+0000\n" +"Last-Translator: Goto Hayato \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "リダイレクト" + +msgid "site" +msgstr "サイト" + +msgid "redirect from" +msgstr "リダイレクト元" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "“/events/search/” のように、ドメイン名を除いた絶対パスにします。 " + +msgid "redirect to" +msgstr "リダイレクト先" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"これは上のような絶対パスにも「 https:// 」のようなスキームで始まる完全な URL " +"にもすることができます。" + +msgid "redirect" +msgstr "リダイレクト" + +msgid "redirects" +msgstr "リダイレクト" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..475955eefe14538e42937b7df24177a506d991ae GIT binary patch literal 1511 zcmb_bOK%e~5MH3Xg1B(z;0tP_)|*Xvv}`FLN?R4RqKZ%Yo!2t(;;lP^82nvd#$)bd5`b zfUPSLHZ>;=rfX!3DP+VJ&k})SQfY=ESt~3PrJ2-0R3$Ai$!JaMhM&ugx>i-yL^CWK z;olV}2yd6dX4z12B`J$K3nCJ+I(Nx@o7Ed3_sM9EZ}CX0oZ?KDYDQP~>)zXtiWK!> zq{ZG|Ijd4^phvn?rnk6Mfrxxk-e6HxWD2|?q^2vX8kFg^W>wLm@JVL%W|7WG&NQ&} zI@2g((#xNxd5?M*Nq)*dH#zQ2dLDqZz_$XUImAr?MDxI1@XvYU9=^;nQ<@efi&V(8 zkUqJ=q6hN(rgz=eH&Zj{fqjY_i#N8x*IoKorB8hjB_;C_H7_41zUMF$Sa!AT}m&DJ(LjVepP(b`N1-?pG z=yY+6%boy4#!_Wqkid%54>-jUZbA`A?PQUFS`Q9#K;Tj+cFnJR0!d^50~i#Ow-Rt4 zlNj~bk~_nHfYm`YAOiI^rK1b%cU, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Redirects" +msgstr "გადამისამართებები" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "გადამისამართება გვერდიდან" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"უნდა იყოს აბსოლუტური გზა დომენის სახელის გარეშე. მაგალითი: '/events/search/'." + +msgid "redirect to" +msgstr "გადამისამართება გვერდზე" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"უნდა იყოს აბსოლუტური გზა (როგორც ზემოთ) ან სრული URL, რომელიც იწყება " +"'http://' სტრიქონით." + +msgid "redirect" +msgstr "გადამისამართება" + +msgid "redirects" +msgstr "გადამისამართებები" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..63b7782e9d143440c9302a7d1fd1e450076beaaf GIT binary patch literal 699 zcmYk1zi$&U6vqveUxyfAW^lJwm2*D?v^dI8N-ISW5ru=@xqETl-q|PHA;}7BSEfq* z0qjUHGgaa*U|?isVdt4N7oPOd_dUP&wV!|9-}pcAtAmXw~?>NE#w<= z7x|8axgSXA|3Ws9-^jZwg#1B`konc6?>*{0tj|z`?;~pHe?q;E`WY2%ZG^M16CSs5 z1G8&Lc!!LjR2B;Fh`r3(gifrf*OfPI?ub(!$k3V-w6cE5-hg$=Xim!$p{0pN&=~94 zz)4lIr&H-zZa9sGFLQQaL3o^H&x8j~vm|}Q(u5^XXu8WEW;;oiBsj=M@K%L8*K@n8 zxr}FzcM^=~g>atbR%llVZ!D*;Dpd;&biYfHK)(Tcu@h}I`+QdaXg#N zIzD*S1m>N>)bVorl~kAR_*9JJ?P$;+9Iii_c9Q78Xb&0}STy((4|5+kl~B4%i(_FO z_}=UMi0!TC!ebM#>`)h`R9bSnH&(t~lT&;t8dg&)Dt2US?KsuVztZ)xE?uU*EloFj oG~Mn-q+fuP>f#(U5g~<(bFu*MXRC@jkZp?!OVoc3S3^bq0y2%fWB>pF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..437f1a2a2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-10-09 12:26+0000\n" +"Last-Translator: Slimane Amiri\n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Iceggiɛen" + +msgid "site" +msgstr "asmel" + +msgid "redirect from" +msgstr "yettwaceggeɛ seg" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "aceggeɛ ar" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "aceggeɛ" + +msgid "redirects" +msgstr "iceggiɛen" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb9d36f3abb89ae00108019d726c5eaa5d332351 GIT binary patch literal 1261 zcmaJ0v@6n%bc#En}OuB*1_Brip+zFP6Cg4kjyse-#{GEJU&c@t(P{SX(nT?PaZ z1wU5e(nSibVryNvaN}lPet;;rbMM+SFR>972hKZlXU?2^=g#|laOWcrV;^uBC;Y*yZ^KhDGYV3+&e1*beMTXPtcAsRvtcw+kjkDO93pv{$Hv znu`-hFs7K-M3zS9d95CafckP`R>Vf;X8h{-Xz%j*te?3gV}s7J!a^Ol zGh*K4>JeUGn2Hsyv@j!6g)8iIPv>&Y2*pO@qI9no(CO*WY*iUhwVIiT8j45kic~cn zP+U(#J(3@$&UC~d&Uo#owq@TYOSVOJ#kSfHlV-By!erTQ;Cs)r585ksgCJW;7VUex zk=%ER^fU6^Awlyg%Fb`~HCUAM0+P)4Gt{`w0=A=b!)p literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..8c6af97d5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leo Trubach \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Redirects" +msgstr "Қайта бағыттаулар" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr " бағыттау (қайдан)" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Бұл домен атаусыз абсолюттік жол болу керек. Мысал: '/events/search/'." + +msgid "redirect to" +msgstr "бағыттау (қайда)" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Бұл абсолюттік жол немесе 'http://'-мен басталатын толық URL бола алады." + +msgid "redirect" +msgstr "қайта бағыттау" + +msgid "redirects" +msgstr "қайта бағыттаулар" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e76f40fcc1f619ba698100a9a87cc5fea6b2cdc5 GIT binary patch literal 1248 zcmb7DOHUL*5FQm@Ym5me4<0&RV1vCoOHgnSV?;<$h=eS9ZgzWjM`xxtGrh203>uJ^ zNDwr>(zEg6#iQ|&s0Z}wUodHZiC@p+qJ)c`RKBk6s;|DP>G|2-_Qb+E3_AtO!;Zlo z!p!;zn}mIW-GrUkXIV#pW#DmO6=>q`0*?Zhfvd1hSOfm)1D5q2_zl<&Tx_$flfakT z_zq~!e*lrvT8FUP55sY5fg;g)(46EeZbS+!AXA)hS5|mP;IOGkcs0pMmB|X}WD!op zG*1(OYf`Ft9+{jNC6Q#Ibb~UPK_=;_NLh8V*^W$;HL8f3S2V=C8P5=2FL<@0NkvIg z6h3nU5-^`<$WWd6RgXKQBg?0GAfs%=Sy-qT-jEmFkQZcYLrS6WcRVRt`^Xv(#Vy3r zks`gp!^jnZLyEUpP!_2PUKOFFV^P^H(#y4SMDxNSsqyQ1Iv8>$5lgQy2@&0P?kvsO z)ILvgy-rVem)&jK2&5By+BKXzalHtlImDfFdh9M6D>cd@N%J8KB9BQCI^-$~0t|eV zyG8Di3s3|1l9#v{Hz#zw}5c6!fc?9`wLBxXwUcdBSk^194cJ{ zLpl@`g!x_$>6>z8OQb_?`>AoS7BY_xi_ni85>yj68p!pN=61mDPgz>M*6O`h^I9z= zne<^;WA{9j|RQ@aT-cZV2KBTFq(oEFl2R zvX1X3e5imrn>t?6s##=BtFK99vocb?X!U%n(R#5u-h@D;3B}Z3#ON46K<4mp!L6ggkQ5OX~+U-^=7+eg?Pw&q~leH h-~D?un?Tj(Z04H-MPIv*%&^tRJulXEJio_<^&2{G^zi@y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..75cf301ec --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "នាំចេញពី" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"គួរតែជាផ្លូវពេញ (absolute path) ហើយមិនបញ្ជូលឈ្មោះ ដមែន (domain name​)។​ឧទាហរណ៍ '/" +"events/search/'។" + +msgid "redirect to" +msgstr "នាំចេញទៅ" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "អាចជាផ្លូវពេញ (absolute path) ឬក៏ URL ទាំងមូលដែលចាប់ផ្តើមជាមួយ 'http://'។" + +msgid "redirect" +msgstr "នាំចេញ" + +msgid "redirects" +msgstr "នាំចេញ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24a289a50061d24f7cae9bab16836f7ba16c168f GIT binary patch literal 788 zcmbV{L2DC16vszfMYnkI>|t&u$YeJWB}_;KwT03KLmKrwW+$6zH#5u3#8mL22Yc$V zx`@i@0@9ouN1aTd>1MC26z+0e*GvEgB z3AhC~pm_fQ+ys6CtH3W{_Xx*m_)?n z@gy;%uP6?>&q$BI7DX$0$}Fe25jE;0YLe(au1EC2!+Q}#u)~Zcea)mvnN^zNo*D@| z!rdM`$z;M3PWqgUDc)vMvY6q@$l8pC;dDB!*}^D>{Gc{a_tdop)#6eewCxTztRKr#?UQ x?kjw}Y#;Ux9Bw|zc?Xl;dv{9K|KC6J`G?E, 2011 +# Rohith PR, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-08-03 10:56+0000\n" +"Last-Translator: Rohith PR\n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "ತಾಣ" + +msgid "redirect from" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಂದ->" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" + +msgid "redirect to" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಗೆ->" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" + +msgid "redirect" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ" + +msgid "redirects" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ(ಗಳು)" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0551a02e4e53bc2867cf34975a68770ebba07116 GIT binary patch literal 1079 zcmZXS&ubGw6vs!czak=d5DyBEUYekrO-rF=Yedvksx2)cRm9UYnIzk8cEZf0NpC?S z)K+K(LlqKeK}%b55b=;hy?OTHS&uOVB=>&QM#*84Y++Rs3u1v#hBQ2K5?PNU8r%?LT$p@z;uD?;KdWeb*6 zk|eUWgd}xgjsde(mI=TGos--tC@+Ls1hZY|F`Q1exxmd(U}|D2*6nC890@$&uEGa15=(ikS+SBb^A0}k7$mb)NT#B* ziE(4J8>jC|GhxKsB-fwAg3&o!om6ST0uRhM1wkESoQs^az|9{mWpr>1+S6!cEI_>N zhPV3BuYdJ6U$<78#NS-@-jol&eDk(y{)e*uWr72pE(f5s)@W6CLg4M~cyHI?@N?N) z`P8cJdaKLm5+>eS#oK-7*PEanw<~_V0{$i%HCxph&a^jl%r_c-bsxIP0ss9n##+$d j^Y`?lZ*P?w>wcvMz1u;*wjaX6|2yan^j|ixK;7>@xI}uf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..1bef019ca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jiyoon, Ha , 2016 +# Jannis Leidel , 2011 +# Jay Oh , 2020 +# JunGu Kang , 2015 +# Kwangho Kim , 2019 +# minsung kang, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-04 14:21+0000\n" +"Last-Translator: Jay Oh \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "리다이렉트" + +msgid "site" +msgstr "사이트" + +msgid "redirect from" +msgstr "에서 리다이렉트" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"도메인 이름을 제외한 절대 경로여야 합니다.\n" +"예제: \"/events/search/\"." + +msgid "redirect to" +msgstr "(으)로 리다이렉트" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "절대경로와 URL('http://' 포함) 모두 가능합니다." + +msgid "redirect" +msgstr "리다이렉트" + +msgid "redirects" +msgstr "리다이렉트" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99bc33aa9b7e7d4749fd6ec5176681125c4887ab GIT binary patch literal 1265 zcmZ`%&ubJ(7;RmDtRu?e$-^#ucuLToA3V5C4>3>fhdg@>t z1AYc-zzN_bV8=(mp8W?jfUm&cz+VR(=ST1c*yitmkAvTXZT>&tL*S2K1$+j6!urk+ zj`IRM4}JhXiKGJfDfk!gbMR^KF4*RO0NXlWz>si`00^@^kaG|?Y6FbJIc2l;fD(=~ z!)u}BzE)1P9xC!#OtYMLsOwx37Hn3DDAAl+OxJ0MDeQ;^K1>3~G?zpX-I|#orJ2-W z9MB?e;z0Rz-sGebA1g(lI;(Z9TgoeyK6RcI^IEDdlBj0O{lCsR;!A#%)T|(kP)#&h z7*oueyh!6qtl5gVXGKeVfyY{v6lc<}=i0L0k+T=joD|Ldl@^0oIV#lLnU-Q6PvBm! zxwpAgp@==I&9gWVg&E!wQoEBX2y5=;Bv5WucvP64a%cELXj9#*OvB7bd8Fc&&%5Oj zs#LrSzn(2)6egI`ZdI~aMNA9n(M{1#?#}WCO-Ye)l0*spuKL@R-!2v#!Jh%zjf%c# z{sDzJNLaw#DrZfPZnS04zDq;)HSw5>i;G2V<-<9?WG|F*-+L7GZb%?s)7A`}cTsX*SdY zmmW3Rh3P1fEOM_2*;F3It!$~rDx;K#W989;W1ghlv;%a_wpmL%*@oFBvu4)QduG>c zr;pNQ{JN$`=9S%`p^P`ouDxhBk@{xXo^4UOoZYawbY|~MJ45NcbR~UkdR8Xw+U0$- zWp>OOVcIfpEy%2+{zE9N!N~^Zx7insZPYZo){%9%T%>`=O&sL{o8~o{9#VEtW5r7K zB@leKk6hYXf}^gzzm<02rB@`gYF?v#luTE?`-MZf|8~w^i2Sa3mr3Prt>b~;R}k!3 Tn|ZT%?14g--Ep#-Z*b)s3(WLi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..892f1489b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soyuzbek Orozbek uulu , 2020-2021 +# Soyuzbek Orozbek uulu , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-02 11:57+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Буруулар" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "бурулуп келатат" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Бул доменди камтыбаган абсолюттук жол болуусу керек. Мисалы: “/events/" +"search/”." + +msgid "redirect to" +msgstr "Бул жакка бар" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Бул абсолюттук жол (жогорудай) же толук \"https://\" сыяктуу схема менен " +"башталган URL боло алат. " + +msgid "redirect" +msgstr "буруу" + +msgid "redirects" +msgstr "буруулар" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..c97c1c7ef --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..294ce4c532e3da50a45af7f7bb0219288eb1b775 GIT binary patch literal 1191 zcmaJ=O>Y!O5FG*pSdG;fd2yi1Y-Qn;Uswo-UfHT zhaigjN8r=oC*YsKPbd4&!7=X@7$tVKN5S#zxPAbR?ONmWCT4>2$&b-lmW6V%7kttg zC{H~$)RiPv7)VEOxa+O1f~1nefTr1F$Bty3EW)%}X-zB33*-a4piG}OkV#X65X!vS zoNA1#`hl%<5et7?@fVVtJzW(s6-QEGhpY@49?AyIZ}PCzGN-Ag97z*=(@S=}L9FX0 z_ue;X)!E^J7wo?66R(0ymYiL~L&g06*C9Ac-E?PV&3#@{BSwVbXC~DX-+!SmUQJwhv+XRS8GwdA*I-APp{ z3{G;7wW99M+n~mStEy08Vhbld`aHePs-%%}JFly?I, 2011 +# Matas Dailyda , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Redirects" +msgstr "Nukreipimai" + +msgid "site" +msgstr "tinklalapis" + +msgid "redirect from" +msgstr "nukreiptas (redirect) iš" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Turi būti absoliutus adresas neįtraukiant domaino. Pavyzdžiui: '/events/" +"search/'." + +msgid "redirect to" +msgstr "nukreipti(redirect) į" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Gali būti absoliutus adresas (kaip viršuj) arba pilnas URL pradedant " +"'http://'." + +msgid "redirect" +msgstr "nukreipti" + +msgid "redirects" +msgstr "nukreipia" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d204bf6053d71d1b89341ebf853eebfb3b9c38e0 GIT binary patch literal 1175 zcmZ`%O^Xvj5FNiYqKGFC9?AtJ!JSMJ71mj!qOP#8t6_->dg{#dW;&Va9=dyGqbGCl zDuQ@Z(6ipWddyz@0UkvKLGVxbI@u2qY*VK0B(H) zobNj@1bzdLfCqa#?=biy*u{SW9|eB~yZA5Q{orrl=fF?k1Z=y{^LpTC;D_K}V7Kok zf=_|(ZgB!W4toqf2z~)Zim8U2o(=N$0*9QyIxwT@*VTa3p0~zhp?PGD*G+_>h)L>k z;=(3e6AacfDlIIhoY{n`%;1kId5sj@v|gks-CJ8BW0|%>_Gtq<;V@CcGft+6U>W-H z^mSrwZo(k=@$^l7c9uz0k;d-0f6tjGK8n&Jb_r1k#VTV$l4KdL)6$4#dCEhVG~gwd z)&zz#9VN5edh15swxD&bvR%un9c?@#EcZHE4bTFAIri^!ZG@5`#RDe$s)%j=!%3EMnYc~vZqG%w7iNPvR|-1_q&{BA+0c53bd!{+K29KY;4r6%O}?P zs2-^-m=(HB>DKljErVKRb$NAZ_e#xrqjFP8i;nr-$2p3&d}M<>MQ;}=N|-j>w(oUs z`wP2q?yPmL{UsSG_Z}fF^n~3hGo-Yvbkahz)W5BCWa5~e5xJFGFt=eM6>rBSF6#B{J{pLF+nejH?VlqpnskiywLI{$@ zY%pOnH?@57Y4aUbhm$ceJd&M^hqd`>WG+(aLNKKBG{h(x_}mn0n%f@9ISeGrXfPR1 z515X;%RInOmzrhs#H<-IVU=~mIC&`eLY&KeT(Txd5*zhD9cVj1N<81EkJ( du4Dh!)$Q@DkyQV26i@zg43O3<1-FuWe*pBwX&C?j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..89b300169 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# NullIsNot0 , 2019,2021 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-25 22:49+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Redirects" +msgstr "Pārvirzīšanas" + +msgid "site" +msgstr "vietne" + +msgid "redirect from" +msgstr "pārvirzīt(redirect) no" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Tam jābūt absolūtajam ceļam, atskaitot domēna vārdu. Piemēram: \"/notikumi/" +"meklet/\"." + +msgid "redirect to" +msgstr "pārvirzīt(redirect) uz" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Šis var būt vai nu absolūtais ceļš (kā augstāk), vai pilnais URL, kas sākas " +"ar \"https://\"." + +msgid "redirect" +msgstr "pārvirzīt" + +msgid "redirects" +msgstr "pārvirzījumi" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8353fbd02ec4a9dcd084ff48b5e6b84a1a8a70da GIT binary patch literal 1353 zcmah{&u<$=6keeGa>a!UqT=v4v`JLPyX&@U*kCA>R4Qsj6glNQ@lNbbc4w@au@i2= zl_(P8h*S_12_#M&Tu2}yiF4z^W%kCYf?hfD5Acnh#04rb(%bL7H}8G#$L#&*PkkET zJPUaVl0u$?dF- z51#VIl1MWxn$`r3c4nx_C9Mb&nQaSAF!+j5dDjZ+aNDM7Zs1WpF+&R1wA#&cT3)(A z#&T^l*`f_((p1~pP7;Pw)iJASt8Sip;(s%~LSnO-cT=B=l9Z}~XObi@M3v?@dC|#5 zLQ|pW329Ae1lP^B=ha7jpD47dRWY%wI?+vFGAn{bt=2FoyPmR}LYqvB^3 zrYc@Xu55LAOR$FEMM4X_DN-dfEOh#4+Z!7jRqM&KRk7)l!tr>=kRLIG#dmJE9F5J0UWOgd&>Iv{Lh)QB za9@>MZpR(CLHU6jmbc4W?tAE;yFuXYdX?P18@eCe4!Lb_-E+H8VC}j+w@Yr|4t=KE zD{qy3&qMAI1bvYH3}f1VAw%yTx*t#j^=6LK%MTH^=aU9*+uwj|K;=isA7_-e-NCpg z@@443*4?9rd9d|G^|;5fKbqp6C;DfX|I;4E*>OMlZuU`oRCF}LHhT4*JD6x#_N(N+ z^xTK#R@Ju, 2011 +# Vasil Vangelovski , 2016 +# Vasil Vangelovski , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Redirects" +msgstr "Пренасочувања" + +msgid "site" +msgstr "сајт" + +msgid "redirect from" +msgstr "пренасочи од" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ова треба да биде апсолутна патека без името на домејнот. На пр. „/nastani/" +"prebaraj/“." + +msgid "redirect to" +msgstr "пренасочи кон" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ова може да биде или апсолутна патека (како погоре) или цела адреса што " +"почнува со „http://“." + +msgid "redirect" +msgstr "пренасочување" + +msgid "redirects" +msgstr "пренасочувања" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f3537aab3a7db09a72844f37e1de8dfa369523c GIT binary patch literal 1573 zcmbVLTZ<^KcYlcZoIAv+xdQQ@gLvKVkafsy$QzKC?qTd9;6_d*`@8+<@N*W5A(3~*1QJZp}6x6ga$}(DC zJ59z4ZPQ{vTkxdW#M)upYRxvstR_*TtnZ2c&G;0_?OrzOdsl>{zRE>fP$6>Jq~&dq z4>K9lY)fv+!kU(mLiZBSt0#FMY-mHPygpfVus6)4RtFLwV2`z<%Eq_H=WU>&opW*F@N5`rCT>SLHk!T@` zV93|xX6iX>yW>1MiXXM3_~^4oB7BY0!dTwXqA;1TO2_o7PEC@Yl_sI*ldx}|?Y=lb z53*)YvX~@{SaFOe-Q2=O8)FO`Nqnr zmF2qnb~9?6P=!TndFR{^pTutL=QO4XOEZ(NlhGF&*os z_8`%i@~p9%jkL)4Nu_fWQ!xxjv$U{CUhj4r$KR&azG z?t3)n%5NsL<@FHg+8z3Fke%RI?FHW5d8*$v6z{w8>kt8}Hv}tkMz$BjEmj;S7EpgQ zNq8Ez4EoAdKR}6ucbcx;b=6G(m{Bnj#kvRWZfFJ4KhLJ+`;tBlT|g1<_&C0W<7nTx zY8UFuu0j=PlDEBp-i0f$LIFl3I&KK|KD{;q#>-`ASwZm*;Ik%g8`UrQ+d&VKl=j7<(EgNfF!1G@i;@y{1{ NBeWcCMooTYe*-Y%%=-WU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..dbfbca670 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hrishikesh , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2019-03-03 10:36+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "തിരിച്ചുവിടലുകൾ" + +msgid "site" +msgstr "സൈറ്റ്" + +msgid "redirect from" +msgstr "എവിടെ നിന്ന്" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"ഇത് ഡൊമൈനിന്റെ പേര് ഉൾപ്പെടാതെയുള്ള ഒരു അബ്സല്യൂട്ട് പാത്ത് ആയിരിക്കണം. ഉദാഹരണം: '/events/" +"search/'." + +msgid "redirect to" +msgstr "എങ്ങോട്ട്" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"ഇതൊരു അബ്സല്യൂട്ട് പാത്തോ (മുകളിലത്തേതു പോലെ) 'http://' എന്നു തുടങ്ങുന്ന ഒരു മുഴുവൻ യു.ആർ.എല്ലോ " +"ആവാം" + +msgid "redirect" +msgstr "തിരിച്ചുവിടൽ" + +msgid "redirects" +msgstr "തിരിച്ചുവിടലുകൾ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ecd0a04025658303ba13e87c4141add4c306c8c1 GIT binary patch literal 1274 zcma)5&uP#VB+8FtFI;Bw2UKw8#DCCl){ZSIAu-ms-8)oB5lG}JJr8I?*y#jdJu$W~JG!v9zNj>KX$Y1MoxN>WXxJkBWNsVLIKB2Sx% zh-j!J=0#?7Neiy34X>+uefJHTQ!*XwjO^Pw(6JH0l#=&wPnWe-dM?!@Zd=EG!g_FA>j)MW0jZ9`cBi zoW;;kwKWX3Z-1n>eo#i>A~}a3^C_ZE&T98K0@#WS0kVzSf*j zY$B^le~%Geo{dev(TLKlFqO0vPuNYVQXNs&%(r@cbd0*@_;5z&#;H6qRtW5KyKOh^ z?&133y4`iFKs&d$0{b_{wMuyWO2c-`t>X6p^V_yNcHg^K?Ir-TW4GYl9r4zNTe1gG zS#xc&FX7lDx8@(qZh7#jQl9#PAi0tkUFs@r9Im@|Zu;-sUloeI@CG#PzC9??dwrqs zf!#yGQA_?_I}k@TB;aoCCJwgqfzG-G+zPqh-I8lVYo|!|vE6nL{c-cNf8-wmgYnh& c{nIV={|?mkyNBN2_p-ddtpKya0bM)z54G0g`Tzg` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..3f474c405 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Jannis Leidel , 2011 +# Анхбаяр Анхаа , 2011,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Чиглүүлэлтүүд" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "redirect хаанаас" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Энэ нь домэйн нэр агуулаагүй абсолют зам байх ёстой. Жишээ нь: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirect хаашаа" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Энэ нь (дээрхийн нэгэн адил) абсолют зам юм уу 'http://' гэж эхэлсэн бүтэн " +"URL байж болно. " + +msgid "redirect" +msgstr "redirect" + +msgid "redirects" +msgstr "redirect-ууд" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..54eddda296adb9cc12f468820097a9a139fe9ce5 GIT binary patch literal 1094 zcmZ8f&2AJ&5N>`#U{NFl*BlC;Y~k7QT7ayvEFp*yMs~2QB{}3&J5#&U-k$DJcaPV; z@e;Yg8{`sk%@gDSI3hse#7pGswU;H7_S>(zyZWo@ntFfx>YoaB1Na%JfS-WBfMg$l zboLRL0$+eXfZs1EbshW`oZ|lh-vs{)PVw)+SHT~^zXG3uJ6PYpqEroj1|EX{2B-LI z2)+fr1@3|Gf>ZoD_y_PKFeKD90PZ|DNL>bgOb#r?Ei7q5TB#$cw3jjlHLP`@k}Zvd zM8{e@VZo!|Oc#Y(jy0`vz>YhSHF7wnac2y@Jldxa*+*?BG{a3CgtC@KD0C%Ofj+%@ zUB}plBF{g)decA86>8U+Dy92A&pOFzX}T&2q7bTF!`hPNM*6gS%1vveNTRu%h>al+ z!oIA}wf)75)WV^$cg=DY-B&-Tprfcm?~c)eY_H0G6Cbp*1y#pvC$4uSt@ANE2oqgp zkGo08hOVIA;fw4@PIL;*e&L8>Ha9j0*#N(XG}tWeKe)F6>+N%h+0e5MhNJTZJ?F7M zqh~tQ+~CwsI-W>26mAMSV8ds$ni_>Z&1SQHOgHsdPWz>6^7E1wWG*h}O~}`J2YUy* z%i;(9jouSyBYKk!&svlhV%v#n)Z$~6|B?b_0%&KI;b((!AN z1vQ~}Xgbd(d+K}>3bO5d8FmKSbnfnKZ1>c@K*3JfW@h23J*#QtjMUVKJ?2W2VbkHe zH(fM5rPUyh41;t6C$gQn%57kXrhSrSoM8?T9|-Gc zZiKRxaN2P4PADZUIRIHeMYeDov~Q};_N1EW*Vv=VxhR3=AZkvw=cWb=Wc|pwh9}8l zvFN#WqMX5LZ>sC$?xz2x`q!S+%j8)++8^z%u1|X`-qFf|!mXAKp6B4yB~2xy8j$Ic zFc#eKL%v5hSGo4D85p{&rn-=-xp)E`$HliSNN*2Y(g3@9ekWe|GjJ`U}I#vb6vJ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po new file mode 100644 index 000000000..dd180263e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "ပြန်လည်ဝင်ရောက်များ" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c2d5a1059be93a349a5e4cba7922c0844a13dc8 GIT binary patch literal 1110 zcmZ8fJ#Q2-5M3aA9RdV35<{wsU~hAQB5ZUNA&C@}FGUwXqVny|-8$#BSGMmibomo> zP(npVLxE`0@dGGPh(yJo;Q20J!qW5ec*Zm1(ff6G>Rp6&9k>VNz)j#Y5Y{0Oe7}J{ z@E3Rkyt)uY*T7%EA^scq2KWa!#Qy|Ofe*p2fj_`)*v~FSkpXXjx53}R;r$&1-vZx1 z<_0*#x4@y!Iv6RUD*%q;J5Y2HxEc;vmnSsdLk~!eBAiRhnRijUkd88;sl&w57iFzH(`j z9PNK-OlrBp3{)P<{a@!1@m{6|c}R#xC^w~$nzSgnLCbrhtQ4mqX~IL+-X)HO&5B8G zd;Fv5Kll!l>&ZM`9Q0h= zHYwG%Hsfs`$`Bea36EyxX6Ksm?BlpOPt7N3^XbD`tlFAzK5ko~of6*IlwKH(OWhlY z9>;AKWl9^yj<_c=gGJLX4?ZfYhgo4%qtU40!(-Xyy+&rrWYX0MspCY6?j$p{_0{#| zv;Lcn+1hiXJ;oEa-&W|*^PW#Cg+VS*RtW3Zw|3eq@%&j_sMTc~FYC;N;ioj;k^Z#d zlys-Ir3O~0c*WS#;i4Lwt~IwnlVhu{=|PK{GYhq7vlO{y=hz|{+h~bBl+?#phXU9pj+S7vL zQVwNv*+Vi((6$Z&W6fF&HT2bYTvn`7nobJDu|oezS8AP1HzFwU>`Uh?h)kR}y;SGS M$@ewBkJ5Sc59K>cQvd(} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..22579b22f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jon, 2015 +# Jon, 2014 +# Jon, 2020-2021 +# Sigurd Gartmann , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-18 14:19+0000\n" +"Last-Translator: Jon\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omadresseringer" + +msgid "site" +msgstr "nettsted" + +msgid "redirect from" +msgstr "omadresser fra" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Dette bør være en fullstendig sti uten domenenavn. Eksempel: \"/hendelser/" +"finn/\"." + +msgid "redirect to" +msgstr "omadresser til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Dette kan være enten en full sti (som over) eller en full URL som starter " +"med en protokoll som “https://”." + +msgid "redirect" +msgstr "omadressering" + +msgid "redirects" +msgstr "omadresseringer" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b2c18631d4391daef7835e4ebefd69e999327f71 GIT binary patch literal 1420 zcma)5QEOC36uxS#c3WTiEO>lM7Bjnd7p?Keh&DzLjD~b$AIoHSvU}z3on>Y=NuR2P zVnjrI2qFrlb#4h7(@-cV6n*PM`ya~atAC>3+)Z{#Y)J>s{m#t!&Uen4d+*<$4Xp-P zAH$Bq8n7d=^dq zKoI;1{2urKI0KSDe+MiA_a6*`DsU9&&%XwK3j7ubiCi0QUK zH?yJPbJ=hu9_jRCSBZ3(vZ(vY%xxuarrDK^!)VRUZrYy{g zj#P$C>t@_wUv!(A)nr74nQJvRsRTFRvWwiHlWJHw#VR2S&rs!bbh3IPtcD?oY*sAB zUUR@Z4HBz>_jz()dwzA8qC>IOUm#3!&7f>mM zg-Mwj+%Btq)4_yBESqvC!CM$7^rN&e6LYmoY;3^uwHAb8Q)ylLHy6>^d~Et%MwE)e zOwv_6VV9(8YaDd)t)8fkQ_r0kN$L0mRf^+<3XIPi5P|?|EF8gj<;#Biif(D$jHAjlGomm-TDj T(nGw, 2012 +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "बाटो फेर्ने" + +msgid "site" +msgstr "साईट" + +msgid "redirect from" +msgstr "बाटो फेर्ने फरम" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "यो डोमेन नाम छोडेर, पूर्ण बाटो हुनुपर्छ । उदाहरण : '/events/search'" + +msgid "redirect to" +msgstr "बाटो फेर्नेको लागि" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"यो कि (माथीको जस्तै )पूर्ण बाटो हुनुपर्छ वा 'http://' बाट सुरुभएको पुरा हुनुपर्छ । " + +msgid "redirect" +msgstr "बाटो फेर्ने" + +msgid "redirects" +msgstr "बाटो फेर्ने" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa92101422660a4c6aec9fff8d4a333fdca33bcf GIT binary patch literal 1080 zcmZuvO>Yx15M7{rG{A)eCk}(ep%vXEt%TZcDMHXxs?@4glolaQPIj_!@!FB?O+ruo z6G%mZ11BWJ58wxI=E5C8ulxvj-ZYH_SbFZK?W;0E{^_yaiP{|4Ux z&tg;1yA2Nc_rO=dbuc8ND*(c>HYmCXg!M2kkE#3yO-M#jlT&HA<6YG1Nk<)_sm;XF z_t+ACMB5ovc&5JaJ(?2^GiJc^WUx%#LMhsBZjJ57;_sbVBK&(3z<;xo@nGcU&gZ_(_quxMdQm?Cr)) z9>|ayZwQaWEY%lRnx&U*T5QsM8bHv0vYBZN@9pyilvlHg4#S2``b*N?ZE#LnfqE zWlt4WsCd)Z++m_${<`(0H5!NObDHk1)8hPECECpu%OJ!$+K`@J;?z2gJM2xhtdJYb|F^^f9T}a% y&uM8chK>+F6f#`7l<+r9nnCFvuSh#9Xm}zt3z&=Ci??hpgx5F literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..059331d97 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-17 08:57+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omleidingen" + +msgid "site" +msgstr "website" + +msgid "redirect from" +msgstr "omgeleid via" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Dit moet een absoluut pad zijn, zonder de domeinnaam. Voorbeeld: ‘/events/" +"search/’." + +msgid "redirect to" +msgstr "omleiden naar" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Dit kan een absoluut pad zijn (zoals hierboven) of een volledige URL " +"beginnend met ‘http://’." + +msgid "redirect" +msgstr "omleiding" + +msgid "redirects" +msgstr "omleidingen" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8eadeb0f30a5a73f055a581b8617d89ef84bc30b GIT binary patch literal 1143 zcmZ`%yKWOf6dfSEi~xz6;?gC8_1ck;&_)pwBoUGFQsMv-64H40+B?baj5RZBCtV7D zfeuPKI+_%8>G%LTP>4juPjJR|;t+|EkI&q>*Z1Y~^WM~ZfpZhM4`je?;4=`;F%W#e zfL-7Z@CJBwNr)TZFW?aW6?_Z)4IJXXgQvj9;5P6ZxC{Hm6(Qb%UxT;6KfvMlO#}!3 zQ}7+|`q+L84s|pbDa17Z*WnvTTn4U(3(nOM4ZlMVNG-%BXUcNwooMCCQ7SdHnOOOp zEy0j&XNt-*^`y^fS~|R#KF^SWn>tld(DvpEIWMhOx=RE65)PNw;BWA3x|E_N(! znvZhZ@kHYELLF<$iRI1N-3g~Wiw$dbu!3kgi(ayI%IJi$9jUvfw#hwXeYEPjDvO>~ zT^F@XLbZ+cXp{RYghmU}qnX*pY%^+x4>cP}V@rpJ-q3XOvvV}M&QEK4Fi*{yxtdrnWoFqqwn!$eSYQuL z?P654#hS2{pgKKNl*3D=x)7D3X=h4;;Oq=UQ4|m*tABztGL3Unh#e|XS}HjUGA6gX z!zBa>*F_bMnrI&#+W*(DJbHxwShJRWU8jYk!*VRXJhU0ci8~65A1WJ4oeU}_7DRaT S>AdY#an2lVCCn0pA^rlUH(Npg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..363e0ffdf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-11-11 10:05+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omadresseringar" + +msgid "site" +msgstr "nettstad" + +msgid "redirect from" +msgstr "omadresser frå" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Dette bør vere ein fullstendig sti utan domenenavn. Døme: “/hendingar/finn/”." + +msgid "redirect to" +msgstr "omadresser til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Dette kan enten vere ein fullstendig sti (som over), eller ei fullstendig " +"nettadresse som startar med eit skjema som “https://”." + +msgid "redirect" +msgstr "omadressering" + +msgid "redirects" +msgstr "omadresseringar" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f80ae2ef808e25995fe7242cdb6d63e3ecc1b052 GIT binary patch literal 1150 zcmZ`%T~8B16kQd+YSe@`qYu{?f#7u8Mg$izMuY?d0ZGy4p`Esi+nu^I1$;5`VPe1- zAFMyYXV98Zp!|l}@a}K%Op9$KI?35Hcjnx4@667x-kzF+aS^x$WPvNdN5GCfU;$_V zFM;c49On|a2)+ugfUW*5_%e74{1x~Dd_X*S&T(FY>)>nPJ3Wqb6FdaI0e%kd1-}9# zr86#Ib{4>LXTYM>=Xtx5E%}OaJfuZI!q+7c5dyxbWKh+DDqNSSpDV1$Widb!+f=9q z0WHi=lhQoWepsXxWKv&A>x$>PeaW_~D#>b)x5lR(?~+)}1=YMwMM=ubGWSCYd08ZB zVwIOGf$*r$70V*j%2k3#xsvsbMBa}?PIo3$h-A4NY1x@8XD*UU(6XsKdm$p_%h03z z5)X?qF)u1I(riW*{XBb8Eh?6k9wp{xvur#PTtmyAa*ZZ3sq_#_r&#I%rH8$HnZZ;h zm4cAXi)G(>c6GxLu{3n|y`ho86h>m2E6uVI4^_amj68bA!w?rfE&RL)=pnj6_&8{V zNk1&eN5~0_RbCV=%FWZ7+>=??`b>8@1nKw@TU zW}t qE3x^{=WBN2cUBay+ak{2A, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "арвитӕны формӕ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ай хъуамӕ уа ӕнӕ домены ном абсолютон фӕт. Цӕвиддон: '/events/search/'." + +msgid "redirect to" +msgstr "арвитӕн ардӕм" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ай гӕнӕн ис уа абсолютон фӕт (куыд уӕлийӕ) кӕнӕ 'http://'-йӕ байдайгӕ " +"ӕнӕхъӕн URL." + +msgid "redirect" +msgstr "арвитӕн" + +msgid "redirects" +msgstr "арвитӕнтӕ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0481d7e5a896ba0639e62c8535124ac0885a4f7f GIT binary patch literal 748 zcmah_&x_MQ7>&B3M!a|y94|}DGEGuecb!@h_Xn(Ou`E^3v&}R+C7lVA>2|%T7gxLq zdlOVpNI^se#gl)5e}l}Q;!9TBi|7Y0@4e)G-+Ysw7Z;8^)M?-nunwF7QlP9u;4JVA zxB$EW&I7N3bHMvjpYXh|;IjY0NzV(x7Q6_42fhsc0Y}aoD@m<8u0);G_N>iV z5KJbMhAn5yfjDUN^(Z*L-5*MS4+=6K)cwv@XJh^!qDJViX=R1Neh)KT)QSTeWGR=b zMf!W(l;$UGc^h-(B&v@`tWCa>Xlrg#Sid@zzbByW$Dd2RD7}rZ4~3 S@Wo9(x#BY#{yz8LV}1dp5(Y{D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..a82e05304 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ਇਸ ਤੋਂ ਮੁੜ-ਡਾਇਰੈਕਟ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "ਇਸ ਵੱਲ ਡਾਇਰੈਕਟ" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "ਰੀ-ਡਾਇਰੈਕਟ" + +msgid "redirects" +msgstr "ਮੁੜ-ਡਾਇਰੈਕਟ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..113b2ebed43f61e58f02100404f3248929fba5a1 GIT binary patch literal 1285 zcmZuw%Z?jG6m1~9%wxft#U&EaSkQL2Nl?-=o*-Z%MaqCRa$o@xDtFhot6g2ys;ZtI zTUkVrBEEn{#N!Ltv7M#8VU1X#Oe9t;V2^}2<;OTelyrRV`&Qld{q2oQ-vl@>18)Ku z@EY(V;Ll^g`_6$0@CWb(@cA=A@DlhZu#Z0jzXJXl?Bjn0Ujjb{{|)>Oybk^Rxgco3 ze}TUQ=Lqul1^89)FJNEqd~N>|`~viUz$melAufA^f@gsjy@2!lik83r4rmbsM?4dT zr_Kh$Tv$q(q7f%9T+R(aVI!+$?KoA;<+Q^rEc%4ENyAOYwUl)C=nh%Oj1y{14Km@d zY0gVdwoaj0dUF4}+_}mo-R_h7-*;BMY_4mW`F8*9^DgnzRMwdK9BOC}U4R`L!V zoU*c#Jn==l{DdoKyOuMP=BwIf{i0wa(6Q0wR&)A7wt*Fn2Lq!Ej3B(7g`aU_g;oh= z1yf_)I^vZ!EDA$XS`tKucjUc0WAK zu4$T%^VP&LKlKUS)ipOH*V)}lcH6DP+lL3+2gRMJ^^sN%^9qO43Riag)FBd+-K8{V z#&XxcJG>QM-^Te~$J~SmD%JjLBy@cw+{G;us$^>*Yr|xCOPkUrq^hNA`&W12^q&5X z>i1*1Nf9Nqqu!3A{eF+GTp=&+^{=+QytGGqagXlZTRNis7@nIHBT2o5{7uk)KiVe8 zZ6CibdTndJv9+Tcs;=9i->Pg6W#4P>w(#v|d?L8f4O4;zhk9|w$!Qu*=U>y}TYRL& z*@WRwI%{TQIe(NXMmq(YP^FtGVv9D(dPEgpJW$i+Di}ShbUK?VR?Hu!Q?g?IXtfXc zqm<;>M3m$!T;8n2pZp^M`0wiegz0OE7ET$4YQD?a(KTDl?l-77tj4 fjrigJHUa_LH}YVk)&, 2011 +# Janusz Harkot , 2014-2015 +# m_aciek , 2019,2021 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-09-06 21:50+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Przekierowania" + +msgid "site" +msgstr "strona" + +msgid "redirect from" +msgstr "przekieruj z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Podaj ścieżkę bezwzględną pomijając nazwę domeny. Na przykład „/events/" +"search/”." + +msgid "redirect to" +msgstr "przekieruj na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Może to być ścieżka bezwzględna (jak powyżej) lub pełny URL rozpoczynający " +"się schematem takim jak \"https://\"." + +msgid "redirect" +msgstr "przekierowanie" + +msgid "redirects" +msgstr "przekierowania" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..46be519c0f7740232e1d20ca63b38b68959f3737 GIT binary patch literal 1129 zcmaJ<%We}f6dj5~<2-N`h=5DL2f&RVfcy3n z*a3b4Pk?(TJntO%4cOJc1784t0=xRp;5qOY@GIaeFpvECDbITbHejdo4SW$?L-A$s zP4E@)CfMmc1>@&M_=Chq`!v|??Z!#q>?j)7O+pW{-WiwlM3ia~TI2PT)KJJJ?Ftg9 zO@t;SeAlR~w1Nt56RL898MQBJr0|&rWtP!SZ<~ze+NLt5Ay(2tVr>yL8VmKYs!3Ft zMNar{#p@&v!mNzkQfx_)%6TeD@?6wu6NS>2bxfQ_?0y*=)>i>lx{vy7T?=ke z%N}rxleGNiGHd$GzeUZJV5zm}w|pOktS9zUr#Y)zK@n@+pyq0@ytL?JRJOUXtgpE= z8MjIY^stnQI$WnO>9))r-;HqrSv^$w9hA$sTbhbJhv)-F^zp}2R#l^DzivrDAabO!oh6h-qFyYz=+urGK zvej9g+iM^++mNAhj~3ACZfcKC8c<;?-K^9+W1C9nCLmdiQqyj&(Ku{ZC0%P%v$j^5 z+AqY-;mM^{#@jMhQK2HC58sl33(Fj~%u|`DsT&nl(JRt0%{i=Cx*BIg%)&5Ok3by0 z=aEy=$Ne}`k6@?&s839pN-S5-l7}B, 2011 +# Nuno Mariz , 2011,2015 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redireccionamentos" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirecionar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isto deverá ser um caminho absoluto, excluindo o domínio. Exemplo: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirecionar para" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Isto poderá ser um caminho absoluto (como acima) ou um URL completo começado " +"por 'http://'." + +msgid "redirect" +msgstr "redirecionar" + +msgid "redirects" +msgstr "redireciona" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2eecaf9f0bc99a2b61f3845b4206cf70bc8279a9 GIT binary patch literal 1171 zcmZ`%OKTKC5FRzYR>a5ILy^-iI{OGd!o&oLCJ;z4EE@$Cq%%{yGqI<8?CwdTh~(ta zn>Rgs(UVtix%mS;N(^|?AK};gN(|WSw_jCvbyaoE_v7-!y8!Dfa0N(!^S~#-uRXw@ z{REx?zk$cV!(%~k2K)u=fxm%${CDsKcn|yr_yt^oFHZzP4t@=O0{#QO2wp<) z1@I%VkJ}jXD=>b+Tl^tKa0>9gukF`y;B?;#f|En`#VabB%aAmSy4-q7h1TE;2<*RBb8r~BQ%}h0?T4A#lwr)}LMs)q=)h1SDSy&f#j8Ikzr%gm{ z(G@IdQ7gxarDVEoy4|sNr-z5idaUy~+*Q3&^f>IW$Rk=sA7!s(%T%2=;$dsfmy1eagHwNvGNDfmq3iour-KbSomR1%H-rA}+D|h=npxGA%UgLP%H42HL z&rqBSW7*BFbr!?vgE(KV%O+eOp`)pDAS8`_p{2hS0 f^f7rvmq, 2014 +# Amanda Savluchinske , 2019 +# semente, 2013 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Rafael Fontenelle , 2021 +# R.J Lelis , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-17 05:46+0000\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Redirecionamentos" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirecionar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Este deve ser um caminho absoluto, excluindo o nome do domínio. Exemplo: \"/" +"events/search/\"." + +msgid "redirect to" +msgstr "redirecionar para" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Este pode ser um caminho absoluto (como acima) ou uma URL completa começando " +"com um esquema como \"https://\"." + +msgid "redirect" +msgstr "redirecionamento" + +msgid "redirects" +msgstr "redirecionamentos" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb9da5b4274dc3588dd3b6e826340074d5754681 GIT binary patch literal 1158 zcmah{J&zMd7+w+x!3ZTnqN8|IfV_gW*9Qo)7efRX35gRY%LI{Bqo5Ss>fa#eh4oU8X&sUDY4g#<`?_ei zKW#p4%`>}+395?8_hvm!yiux9#c-6R%1njSq{Wn5)Y}l#T5%C`wt0=UcWuYQmXmpI zyXZgJxzNa(>8|C?*Skxc^qj0(a~A_=*Q@L=woV#dP<2=6v1#V+|Dqi6*q z|Djp<;CKipDfFLX45?bBnO;Pk9tSbzY`|h#P#^PaxKMMk#P#*{mXB%Wh&N(Ld*1I3 zsYQI-ns(Y)xxUidovhQ!8&{0>SX?&vw?^-tH+;KRSn)EI6JZ_u?ybSK?82^JtTker z^>k_CXDR5yQ2MWZ7GzChRRt?lcFowSD@fNf({;}*)BM_P>Tb7lDKDDMrasZh^NXF| z)BE=qMz@=%Cr>u@Z{Re&v{ZD`bh)vk#@7$A>g_EnlU0L#(?~*?3d)&_aeIrJr64Sj zTyQBl5lBgWZ>B`72YT_R>D3Eea{cP5uBZ&(Nz(E#NJc1OGhy+EiAQ$}TI qlC=yf$S6rhiSU1toDCr?@91xCd#ad}puJDa?Jd8@cea3;WWNBN$Xz@D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..fbd2c981d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Daniel Ursache-Dogariu, 2011 +# Eugenol Man , 2020 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-15 11:20+0000\n" +"Last-Translator: Eugenol Man \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Redirects" +msgstr "Redirecționări" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirecționat de la " + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Trebuie sa fie o cale absoluta, exeptand numele domeniului. Exemplu: “/" +"events/search/”." + +msgid "redirect to" +msgstr "redirecționat către" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Poate fi cale absolută (ca mai sus) sau link URL complet, începând cu " +"“http://”." + +msgid "redirect" +msgstr "redirecționare" + +msgid "redirects" +msgstr "redirecționări" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..12be90ba2e3edc8efcb9e2c86d9e7cc38d47aece GIT binary patch literal 1457 zcmaJ=&u<$=6rMu)Q6ny#DLf8TvB=uHPFj^sHkF{MRMCjYa^b*fvL4%8);reDY!aj% z;#3t>soE1as$P)*DGfNJ%`d6kIL!))8>mF;ssBX3vE#U^T1I;Q-kbNm_r7`7{`=1H z?-|Ys*t@Vg>}}Z3Fnb=sZ0vr7pbH+(5hjCW7 z4IzZ;vdyD}65bXinqB7YPAq)ev@8}yqE%T5o`$VK@AU9RZ0JxUmF-ca<&m$LinL(! zsl0*}I2Y^A7a~=WOnjC9bqnOL?MVu4U@eJWsfi4UJ6F%y?5cHNo3HRWqd`tYOTq z30qoPS}JK<7d6CkDU|K0Ze#d@2)-%{aAhIuNJDvMzUG z>~M<07EhJX!R6Wo=j@1QXEj9X%qF3hbowy zqJbNXB_Dcj5O{Rz6j|5(An-goM=pVmcqXU}Q`5nub^8_Wv{#|4R|h3C-eeIa-eE}) zxHi@2%><`MkxANP} z{F1MlJu*9H&uoIZO6Fd^mapbF39K!1&nDM#*9BoazXkSgzGm(ddR^<&#>@i{9#DR* z@BEHn*A{J{&3C3(9DkDe)8)O zy_2tv6Et8TT0zBN_QRis-`B(K5;J$8WwWnhBx>*^RAJsOI&BQ<_w0jk*)?16dU)c^ x=N?!ha~CyRSP>TK)5|_Qv;Xo%n;v^%8Z)uzy!(GyyN?&=NB<(^uVY)Q>?tI6MyCJ( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..7a95bbe5e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# crazyzubr , 2020 +# Jannis Leidel , 2011 +# Panasoft, 2021 +# Алексей Борискин , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-03-16 22:53+0000\n" +"Last-Translator: Panasoft\n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Redirects" +msgstr "Перенаправления" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "перенаправить с" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "Нужно указать корневой относительный путь. Пример: “/events/search/”." + +msgid "redirect to" +msgstr "перенаправить на" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Это может быть либо абсолютный путь (как указано выше), либо полный URL-" +"адрес, начинающийся со схемы, такой как «https://»." + +msgid "redirect" +msgstr "перенаправление" + +msgid "redirects" +msgstr "перенаправления" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4fe1e0c487d5b3edaba795384a4efa8ba2bb841b GIT binary patch literal 1189 zcmZ`&OHUL*5FQm@Yt+QEhw>nS$m~lDWN;->At8biT=bxq-kD-&*q-jOyJsJqxOg<0 z7;iqp!2^k$^hAu8fr~%Dqd^i+{t2shfkhHK`Sz>o`ns#SruOHhfj17VvxLipfN-Ah ziD1_b!Nz_O8iYTDCxpkx9On%2XJV`WN_>v^JF(UOARZvzA^t%4O|ZJ>Cmcr+zb1Z4 ze2PSN-zUC6{EYY_@#^0GE8I&f*ta0D|EIIaOwO7sLyFG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..45af9d19e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Martin Tóth , 2017 +# Peter Kuma, 2021 +# supowski , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-24 20:57+0000\n" +"Last-Translator: Peter Kuma\n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Redirects" +msgstr "Presmerovania" + +msgid "site" +msgstr "sídlo" + +msgid "redirect from" +msgstr "presmerovať z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Toto by sa mala byť absolútna cesta bez názvu domény. Napríklad: “/events/" +"search/”." + +msgid "redirect to" +msgstr "presmerovať na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Toto môže byť buď absolútna cesta (ako vyššie), alebo úplné URL začínajúce " +"schémou ako “http://”." + +msgid "redirect" +msgstr "presmerovanie" + +msgid "redirects" +msgstr "presmerovania" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..41e11af8cd1c19b8a8988a6a615d82735f8ab802 GIT binary patch literal 1173 zcmZuv&re)85PnT)er)L_=N{$~0SexIyMUmNY|@s3gaj(3OLIdq`-Xi6Kl{n{TgWP> z+^d{&=&kCxk@5#bIkmm?+H;kh`%m;UyRfLj(x-36^LcE~%s&riUME=hfiHj@_#F5R zi0cCoV;_M7;9uYw@bxE2au577IO=}|e+GUFj{0}t8StOrzk$DiS@^%)PLf0L8}Rqw zS%{+k5FF#hgzE{v1b>SCS74;L&_+Mr9oH@3?u9kJZ(=4$pWKPgKIh7DKlr3qC{KN9 z=!l6`DA*AkdE~9G15+hKLG#jM#}0XcEW&hLYfT6HJLH3OL74%a;Uvu!AyiqbHP;+x z^@Xi<9uxmR<0A2SU)Om&iYqC%rBsHDEV)UW=d!FcXEfL1A)DY^o~7#-F|V7v`^unW zXUnM@t*LY+^AD}T*Zx1b2#?D8lW1w*|+5roHc`54p{V9mKpt^(FLPW z&-qEQ&(6-8A?8-cd>+rV#=pBHJxS2=y0y^Q-QL}t)}h@@8ynUH6j}71SNLe)^U$g^ znz2s(LORc(d(hhwYg1jk>zJL`G<_Qzn9yKQ<(DM2!JJ8;`mcZpuSxC|{L)In%zVZDK-a_viYDh$zK8|Z{d%i`2x zgod26k(U!}EX|)nFdA4VPZmgOg_)+fRoTkwICLIGjpMvXBl-JJ4Dt0*j_FGrCj3&} tlplk8, 2011 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Preusmeritve" + +msgid "site" +msgstr "stran" + +msgid "redirect from" +msgstr "preusmeri iz" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Pot mora biti navedena absolutno in brez imena domene. Primer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmeri na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pot je lahko navedena absolutno (kot zgoraj) ali pa kot popoln naslov URL, " +"začet z 'http://'." + +msgid "redirect" +msgstr "preusmeri" + +msgid "redirects" +msgstr "preusmeritve" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d944b5459599ea2bc2f5621e67b1f5a17b71646 GIT binary patch literal 1165 zcmZ8g&2Ah;5N;q4Sbh#U=TO{i;o0#TS&GJSlsIvuh*(&w4H4qhJ5xK;voqb}t{&St zAmtS01-QWzm>XAazVQGYQHaEem*DIDv4Pfp^Hoj#c5Tfcw{HBPa6STV0|oFY@G}t4 z8z9>L1m?isz<0p&ca-`N{0lhx{|f#X{2Ms>{|>$ZeghWZFJJ)u+xL`u1unpgeBkK+ z9L}GCHTV;72af*VgYi?Z@jwdo0TA_AJDzuen+r*)_g5S#=0s|x##|WBc@Qi7+caAB4Loc;+9GJ9GcME zmp@h^bdsg%+m}BLm$jsFeN)78|F5$}e4aOb5fh>jDqO3LC97K=(&4#oyN0uvH04va zK~iDu^JE-cixpAca!SGbVKLMdkC~;uS-rQtlNwpG*fL2#;Uo8IdtdF*^E8QE^3%KpwCEyeu}OP}x4 zXmf9%#-{LG2h+0p>IJpEEht=GP|fk_gvr(rqzYWFcaS#3P#fQx?()KKZe9Du6~u}* zE=HdKGt)HA5>{}TXU;J&S_3Q~q*^WIdMD9F;TA4MUva&VOl;u4U2Ne?AZ|VO5f#zL zTqCU*xx5(CF?6_dJH>~w+)!KA+Si=UqpN9GJG#ET@@t7Y%;R4w_VUWcN^~96KcW3< Az5oCK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..5f5b7f68d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik Bleta , 2011 +# Besnik Bleta , 2021 +# Besnik Bleta , 2015,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 13:55+0000\n" +"Last-Translator: Besnik Bleta \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ridrejtime" + +msgid "site" +msgstr "sajt" + +msgid "redirect from" +msgstr "ridrejtim prej" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Ky do të duhej të ishte shteg absolut, pa emrin e përkatësisë. Për shembull: " +"“/ngjarje/kërkim/”." + +msgid "redirect to" +msgstr "ridrejtim te" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Ky mund të jetë ose një shteg absolut (si më sipër), ose një URL e plotë që " +"fillon me një skemë të tillë si “http://”." + +msgid "redirect" +msgstr "ridrejtim" + +msgid "redirects" +msgstr "ridrejtime" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0054565e9080bb5ce842c97aa2b751b8a1715f60 GIT binary patch literal 1367 zcmb7Dy>A>v6rVu&Iz&T*_$VF)kxyjrcAX%ibq*xJk&I%n%moUn@!t4u!|u*$X3jQJ zio+?4=qQlFcLN{4uzVB){3Q6q1429jej3d8XTUt?4KP}W2LbNOcYN*x9;z%MkaBof z14an3syeAriL;{JOD!d`pfyD*bv3TFLEpGINs*^^T)(2TemsT&5 zb<()B=+Y)C5wJ;5<%;YefoJL7@Qa>veH%BM_l93Krn78M53&xA`{$g~q_&c5(BXy< zLLHsUw4g%fszHleGVf<9=B7=xp$cc4R!NieroGL(oU2MI-YAiFAPE1AdimNIK8 zwlT-s!m>6uHye)2({;7gNOazu>Y7n@P~NnrS+6ZGEiWFuAZmoQS9RgAprHMJ9~zz7 za?O5*RW4A{lg297y41c9oIA?nS?kIKi$$V&{V|u3VXxASbM& zCPK}8eW51&*X7WU%d6!Feh)nKBmaXRm7n>M@L$245bh`bCqE{C!;i>cFR#LYH}bbp zH1W4kyzTcncDpjGYMS#mk%IDF|1(GZjXK-6{4VnR1SQD!`_*TT)Jb`57TNK;m_H_T zA5r, 2018 +# Igor Jerosimić, 2020-2021 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:04+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Redirects" +msgstr "Преусмеравања" + +msgid "site" +msgstr "сајт" + +msgid "redirect from" +msgstr "преусмерен са" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Ово треба да буде апсолутна путања, искључујући име домена. Пример: “/events/" +"search/”." + +msgid "redirect to" +msgstr "преусмери ка" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Ово може да буде апсолутна путања (као изнад) или потпун URL који почиње са " +"шемом као нпр. “https://”." + +msgid "redirect" +msgstr "преусмеравање" + +msgid "redirects" +msgstr "преусмеравања" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..901715daae00cffb3412ab39ba283083dad61285 GIT binary patch literal 1210 zcmZ`&zi$*r6rKPf$t6%wC(@&cbtl-nT|*SK=8`Chk&JBFG6xh$NOQZ-cXQsISNfC=iut_ybZ#28oJ)f^Y7JjX;d<+i$*^_iNw2`~TdjUj^1D zz~?{?oB{p=6Zhs)e$KZd!!TvG$Q}8ozu>TKy3VaBD1iS>!LO(bu zgaQ8zz6<^WM&W!99OC=}{tW!v?EFtKe&Sy|5JH>=f)2UEIstq%*$MICj01%lkV1$} z&XwiNJJA~|N14>rXJX}tYzad4ohfS1R7pRirgS(lV{VbbHEq>JK{q#7$$4qL(gWIo zCoWtzYwtRarOk%Z*mm|tV!oj*YszEg&C%Wor#y=dYer~6w30`+*g9o& zO8H3YfoW`VWvq|Z+(6~g_w~R^v);FhO7N+CucgUo4r`1?nSzA7SpQIf(elXgjT~Y6+3Ke_a^_{9f zW0xo!O6%BnZ}zT5SB~vM#x1tdvd&ES7%5%pD}PjUO7nD$jiR=)h^`r1x|DP^k*<4b ziKg3bQ-7Jn-EKk)3lz5T`EHWXw-gi1p}*-a&abX^FNf{KBfgr%w6`~Pflb_kPXeFC z)=~o>j%!!4m1C(#Qml^+mFDRa42-0Honx@7$@FSTRqcZfHMgZ9^|O|Fi&UYgGQO(y zWQMoRDCmQIrAHWDNlzbgX-Wzny0Yzera0vDmizMk`7V-j+r_9p*st-puSnrvfpKOn h+q7Y!Fcj|@, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 17:03+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Redirects" +msgstr "Preusmeravanja" + +msgid "site" +msgstr "sajt" + +msgid "redirect from" +msgstr "preusmeren sa" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Ovo treba da bude apsolutna putanja, isključujući ime domena. Primer: “/" +"events/search/”." + +msgid "redirect to" +msgstr "preusmeri ka" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Ovo može da bude apsolutna putanja (kao iznad) ili potpun URL koji počinje " +"sa šemom kao npr. “https://”." + +msgid "redirect" +msgstr "preusmeravanje" + +msgid "redirects" +msgstr "preusmeravanja" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c72a5e70d5d9269c9aa779acff9fdbe441f84b78 GIT binary patch literal 1147 zcmZuw%We}f6dm3W#6zrETvlxb&LrhMrHImpgw%>Eq_B1}w=>gv?5XWZ%7?H(VufJG zf>l@SBC+8g5Qrr|!EqCs3Ss5wT#t|M^|epFUpxIK!ngoj2U6e?@CgXx2N2eN0$adu z;1#fRB8tv~--3hwJ@_K{GdSqKfKP+Jg5Lq(fXkTYr=n;VJOp>ZzrYRfJ&3P@m%vxR z9dOY1z#-or7%2|pGvH7=jFZ5*!)RP@5=KZHoeh%?r-kLdcTqPl9QCE99upTnXG@sK zo-?ZUOqKLG%}R$aX25e~uuR*vQnb}sC+DU0h0bV*oivksUnOxo(;R1Yxv5ne691d= z7V&;x)oIv@l9ZZK7Mipyxk;=0vaA#*G!yfHwRf>&Y5RG|YbWPE3TWG!ays+oD0Y!6 zJV%?>?4VKcEEO-=y29v$(jBQY)97$ztQQ+DD^l^a&Yb9)gc_UAyJFe0^w5eG>2Z?z zR{O4Kw?yk9weKf)=5Myjtm?iAkC)JcUg3|9nUEVaHdSq<5^KhmE+JhVPTk`C0*%APSxq+, 2011 +# Jonathan Lindén, 2014 +# Thomas Lundqvist , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-15 13:32+0000\n" +"Last-Translator: Thomas Lundqvist \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omdirigeringar" + +msgid "site" +msgstr "webbplats" + +msgid "redirect from" +msgstr "omdirigera från" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Detta bör vara en absolut sökväg utan domännamnet. Exempel: '/handelser/" +"sok/'." + +msgid "redirect to" +msgstr "omdirigera till" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Detta kan vara antingen en absolut sökväg (som ovan) eller en fullständig " +"URL som börjar med 'http://'." + +msgid "redirect" +msgstr "omdirigera" + +msgid "redirects" +msgstr "omdirigeringar" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1a37f4d20f87aaa66ec7e9b8a65ec5143723d8f2 GIT binary patch literal 1078 zcmZWnJ#*7Q5EYQ{VFrp+6ckJ4c*0q>NhU$T3`1~+F!7K{6liER*4jE-y3^=Rk)4i~ z9)^O7q2_l$P0!DuX3sV;gqwMK_oUsoyQllPvh?2Lb)9jS@rH4e@rmKqH^vRdcg8W} z2jexPc4?OLmiZRzcg!yDBeRSD!u)~pm2sPO=ZfcbnM39y=FiOT{V(Pf=H;cCzBA`4 zGpA1bV)CvrIMloB#C&mxx6HWe^dUtur=B%l7)t{^RB%E-(#Dhn3p_D8DJ(&THilI+ z{6?Qr4K#m-evu?_e7FzBVs51xK*^a=qZt|rz+5;^0Gj`xAay`+d-Dwl*v zrzjODOsNi?F{W8U0aSfDC1s6o2=iX-eDitV=NstfI$bEM&-cbV$n}tC6nl|)MY)k$ z1rQBU4Rqy@GM!t|H3J!mr^UdCPzO*sco~YFoX~Qtc!rjnXf>J}qS+9QhtS*%)>~_h zR-?gz;*d_I^IXJja*${}faX@PvA)*eRoO>lMVO;930j>8@B)?M1K%eZQ38*+8iJCq&;sl z08>^Dk|M`M?CLx<0jO*$O}n)Xvu%4-!M!##YugpCic=28N#S2 z`5_DbMKHp2IyN&xjG2aEQA{tOyLt1k6H*iU`{K>rERLkJ`rj`@BiTzK47n;KuHHyv s9lCu~I;i?7+F~TNZ?RukbeAsux8c2%W&=zMSUo~-rrD|_72(B%-)|5%t^fc4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..55fbf692d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Maelekezo upya" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "Imeelekezwa kutoka" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Hii inatakiwa kuwa kiungo kamili pasipo na jina la kikoa. Mfano:'/matukio/" +"tafuta/'." + +msgid "redirect to" +msgstr "elekeza kwenda" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Hii inaweza kuwa kiungo kamili (kama hapo juu) or URL kamili yenye 'http://'." + +msgid "redirect" +msgstr "maelekezo upya" + +msgid "redirects" +msgstr "maelekezo upya" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2a9b43eccb99022d43149ecfc1aba05d86bd572 GIT binary patch literal 1502 zcma)5O>fgc5H(P~f)Iim5{IFeHYyuC6;N;+gn(88wW6w0IB(-kV&r%ud()H)QjwtL zqZ|-9zy+c9034i_4+$>tPmuosN3J}t69=Ily3+XV?!1|KGn@Q6HPkV%4#UpC%CKXw z=dfgbgDt|o!|uXP>@$obz#8y4unA1~4}eF3Pl2y`_8aH?0mJwMJUwI>W5AOK4PydW z0w(7ca0>Vih_GxO!frndVc9||trJuTt-B#rxKB%hgsbWzARPEoD7}^v)a0s8qddfo zTo!qfa8tGAd9=7NOQGU{a{U^$5lJI;rJA;Bjug_YVO_R7CrSK&#&aZADqhP;LQ#?& z+2F2EK5vKuO|S4q(-St0m||J@Dl|jEgGxQg8wke@L`7vAss^$#I4PO!Lt{RW_rPU0 z9d<_qp(}lxoO|4_$=rfy%0RKXu;x1KTB{bava~5Tf4j`C2ZAeb*$u8BV%#cTU`2~r zm#H{mpC2Ey#w`m(wjh?>B9+itfDD#_Q93RPMx&#+4aUQ(+n0ygbe zWb$4%U0QNgCK5S#Zr*DJ++#B`XoNQTO??bY?`fS2R++5 z48f=d5(=UV#B3CdfBSuzGP8Vp?|io^UonI@+SEngX1WWhB3!3~LxT{trDufUV2|%( ztsjj*=I$-@d+9#Z(*ZAevm`l&j%>I<_-5Lry~{sUvoNQ0G|4Pb8R2-94_a&{X4TLW o%ee1*iuF$frQmp@yNPt!9qq<9iA&vktFdRUenV8<={Ifs1$5f4@c;k- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..156ade317 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "லிருந்து திசைமாற்று" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"இது ஒரு முழுமையான பாதையாக இருக்கவேண்டும். இணையத்தளப்பெயராக இருக்கக்கூடாது. உதாரணம்:'/" +"events/search/'." + +msgid "redirect to" +msgstr "திரும்ப அனுப்பு" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"இது முழுமையான பாதையாக (மேலே உள்ளது போல) அல்லது \"http\"//\" என தொடங்கும் வலை " +"முகவரியாக இருக்கலாம்." + +msgid "redirect" +msgstr "திரும்ப அனுப்பு" + +msgid "redirects" +msgstr "திரும்ப அனுப்புகிறது. " diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2c234464d1a5f2265b7026e202f8273402b21653 GIT binary patch literal 467 zcmYLF!A=4(5Y^~ukDfi$!~;f$wnPFJF-C<11Cfx`du4~UW@$HVSM)yuRu0(c$+VVV`(RJS83wFNig|#2>o6qO;a)G4<{p=MhF3yr2)pS;ewnOdQwsMUbtEl3=!lB7glvP5AUjM-B|7Iq3PD1c;fJX`ce+cE z0z{ielx&>~LNeANLh7{*g^tcE_Nc8jfsN5*Sg>nKL+x#`Zkxs~+zrjxywW*Bih8M7 ziba)Itnn6OsW@M)R?S!&ngxC~=WfZ%&6m_@Cikyiv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po new file mode 100644 index 000000000..dd102f2a5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/projects/p/django/language/" +"te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7908d6fd288437b52aee0803245ea899c9bdfa1 GIT binary patch literal 782 zcmaKpy^9k;7{>SX{93iK6v43&5@fQQ90$k7h^TjPU@*kheoQ8t$!%tqnOSpoew5n! z2Z&%DQSg*I8^OwAf}Mrs)i(A%dzVWp^TLnkotfwTSoZgY<<}nK6u1Opa2C7*MeKkx z;4?T4zJc@L2Pk~MK=Hm0mcbvOmOSq-^eW)TJntg(CG;}%-BiC%@AskSaKCgMK#$@C zl42)3&*CI9*be4+ZQd1{cdYUBG@B))r`2$NvTBwa&j`!CmR19l(#PcaTX|w=tRmvK?$I`XED9^V!z_!j0X+Hl)=5O2`6xv!Yj, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-05-15 00:33+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Самтдигаркунӣ(Redirects)" + +msgid "site" +msgstr "сомона" + +msgid "redirect from" +msgstr "Самтдигаркунӣ аз" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" + +msgid "redirect to" +msgstr "Самтдигаркунӣ ба" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" + +msgid "redirect" +msgstr "самтдигаркунӣ" + +msgid "redirects" +msgstr "самтдигаркунӣ" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..247f902d821249605aac63567fd0d7291d9fbb1d GIT binary patch literal 1331 zcma)4&rcLF6do0St$Oj`$wN;9!S2qYz&eOg5fUOqvRU+8cFWG->~zz10dHbVz^FG- z(ZocI(L_nm_@kS6)`S0psb~KOmVx(yPUjd% z?mPkdz=yzo;J5bqZ{T6`aj7UtDx$`sge0uSvt(p})#@=1NN0}E@kFbf;!Ku9 zrz_iiZ#iT}irV&0i!EPyD$?AWlwuYarDGL(l}iFCI-#mjg_sG)IUS=1HtLu9>3T3L8L`K7dg#sUV-|3)bA&L zAviVA<6~vUnbNc*S)yX5g$&4Lfq9YPkV(N4$#gknnoWn8(%I`SlvUaC`6@;dXUn2? z4gyKF!K$2=II9Ju6takPwTC@FKcCf3JDTAOj-G4XZWH2mZcc}}?##s4#K`s>@>xGK zEE0_&)6$JPE~@#0&edZ)#vnmgQgJ;rRT`y*ZJw(&!zCR_%ECQhKnl~5-s%w=VP-OJ zNEXvkA!{liNj=@Fq5L3exkLV7#7`YnD7~ zo?G)SjjdaQBT(^ewDX%wY3NxRdTh-bYhGCM*_!qA7q!hrYo55zm0Pin4n0(96}@H6 zC)>P}Y9QKj9;D7IwDk8+ZOvwp=4~h9dPXVG;6n#lC;{wDb-zu{O7OU h`5<;Suyi^owzyMa>#l=`XwPJ)Y2YF6ZaUO^-XG)@ClCMt literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..78ba247d7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-05-06 08:37+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "เปลี่ยนทิศทาง" + +msgid "site" +msgstr "ไซต์" + +msgid "redirect from" +msgstr "เปลี่ยนทิศทางจาก" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "พาธไม่รวมโดเมน ตัวอย่าง : '/events/search/'" + +msgid "redirect to" +msgstr "เปลี่ยนทิศทางไปที่" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "มันอาจจะเป็นพาธหรือ URL แบบเต็มที่ขึ้นต้นด้วย 'http://'." + +msgid "redirect" +msgstr "เปลี่ยนทิศทาง" + +msgid "redirects" +msgstr "เปลี่ยนทิศทาง" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..361fc0cb4bfc2087898d91312bfdd006da3c3c74 GIT binary patch literal 1113 zcmah{&ubJh6dtwy+A4y0Q1I})wb<-z3u>9VqSaOkEiKC`hzEJQlg^BrnG8v0x7$PxxiGTJ>V!%lBUL-j|o;eLX+%EWkJoTn1v`Ebs>K;~U`j zz5|bdAHZW^=|~Wq0>1+L_}Ab`@H?=N{|KG{e+K8k7vK{7JI8|H3HUL19sC}A20V%2 z3*d_fEWqdBFM>~iTVP0xY?!07LBUbrq&F~*k7+df8X%2C8D~azoekP)W~s{sbtK8m zrP2@_?pUoVC#htY(iB^)=)RmLjcwYjl%fZ%RkDta%Zh{s$fW(9=c#jL6o&gdFY04u zo9ar%Ui@Fx8IoIFRmDCX$5O0w&I&3xmvvg&;=EKc@|vOS%fi{vN;chetZfeJ4}KZ6 zX>@+*IsMzVfz6x@HjI9X3yYOlJe0;}x`-%#%0;4UEm>;g#F|aASS(hF6>S|+ZDU=u zWIywv;vPE`GuN1Fh{g@kxK6XP(Y0$=8yK}!wobGS7gn*;CZd+KmFlq>(oN${%OxA# zzn$QMs@~Q4E#wqQ#fcPc$$3QW%Jgzs(A2^E4F-d{^NQJ~-0~UWxYS>y4$?!{3#V&q zD{D)Kmzu3NYIk+v@MfYtEK#OGQ`vABkwb zleynzLZesPP?cdNmbJ-kL`6ArZF6pc#%6P>pes$9onEK~_jzyEag0At_TCnIA9`rF zTq3Ezbsv}!rp zH+8R%PC_KdLrU3lhly3r+bCw{k7JRP, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2020-07-06 11:55+0000\n" +"Last-Translator: Resulkary \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Gaýtadan gönükdirmeler" + +msgid "site" +msgstr "sahypa" + +msgid "redirect from" +msgstr "gönükdirilen salgy" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Bu domen ady hasaba almazdan, doly ýol bolmaly. Mysal: “/wakalar/gozleg/”." + +msgid "redirect to" +msgstr "gönükdirilen salgy" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" +"Bu ýa doly ýol (ýokardaky ýaly) ýa-da “http://” bilen başlaýan doly URL " +"bolup biler." + +msgid "redirect" +msgstr "gönükdirme" + +msgid "redirects" +msgstr "gönükdirmeler" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5a9237bd43e8244f74d9cd31c5874704f4b6f932 GIT binary patch literal 1133 zcmZ9L&2AGh5Xa3o1P~HJ;)2i|ThYxn1@W;}5h}E(QY%UnzQk#=>ts#5>&W)D4X3^Y zoIrg6E){|kx3(7^fFlAVPP_zvC#5a5^3Ts>k7p*M$@h!L-w3QT&=n|y&O;xduzo<{ z?kCiP{y;CGXGerM4SocJ{}=Eq_!SKP-@xPG5AZSc8@d4d)-fRp@FAFkpTKkARXAS) zuYs4rdtmT?4&oznd?AE52?aak4(lj%YPb{P#4ZCu4G1knQ)bG_)H~72m7|nPYD<#J z=h6}kZabqZFR9Nyr!jUoF)MPM46dnDX-!X>i{w08ugWg1;w3Izn#)3xt5R5weyzXD zz3;muj(@Gcua9!M+*CRX=?>?aAi0+6DhmNo2xX>VRZ_`?tkc{Y7kw?05Hyx6vh*%? zl5LugV%yzcB>ruvV@ zSu|U9UDPrO)s`PcO}V0iYxICUikX_6YDANbsBx1TcarNju1#Xq7TNizWw~^ky|D?+ znyP8i9xlpm#a$V-Bo_&_D%(>I{S940lU7$(>pnbF9l2IdO%adk`3JrGJoYvouPrSs z&Fxp-s881Jo6@5(QESjgZCr(CxPJ zdu1Yqtu5=yvX17BEnGrne`vaysc9N*XU0mpOO5gAns~AGxzw`6XcbaRD`u++8Zfn$ zCC>#7jHa21SGCo6@W}YktPHP)4|g_X!KAdLHt%d`9$;!hun;tipwZk` zTG{$A+rd;u7p#$Kd(&dFJn}IbxV=e?BkEy>g9WDyAqV_=xW|J!ZN0Un?2SeZ@dui1 l%$5rtjoRSA&lLLxYQ!HWv(o){n5pdzq&{>$YS3^F{{lcxUMK(n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..87029e3ca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2015,2019,2021 +# BouRock, 2014 +# Cihad GÜNDOĞDU , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-16 19:34+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Yönlendirmeler" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "yönlendirilen adres" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Bu, bir tam yol olmalıdır, etki alanı adı kullanılmadan yazılmalı. Örnek: “/" +"olaylar/arama/”." + +msgid "redirect to" +msgstr "yönlendirildiği adres" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Bu, ya bir tam yol (yukarıdaki gibi) ya da “https://” gibi bir şema ile " +"başlayan tam bir URL olabilir." + +msgid "redirect" +msgstr "yönlendirme" + +msgid "redirects" +msgstr "yönlendirmeler" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a1635b6fc95880bc41f61aff087e56af6c45307f GIT binary patch literal 1178 zcmZ`%T~8B16kQd+s>Xz8A8w2Z5SVsLP;e1rL`X0Y30d^XhoPOeOSU`B?v#%g14RQ7 zKVqT}B>n+?0U{)5#osUk@BS9gwAdyFCpkTH@7#Ol%Em`PUx5ED__K{f1h1I-m#g&woWgbKn z@v=zM*b*;SLg7(YMl6U(C7DFueJZjlQo;?+D z63ED-{5+3}GBqPAGFEIVDF%7=uv$!*FFi_4Kk?aUEVx1~d&Ct?^t;*HEbB7&E@cP3 zf&N~%-*r*QX2e2ZHQRNAC}LUE-SGz8UKcAh$rHu=m`6#-m5e=l%%cbcpAN#5o%=CA7?}DI(t_^#B40eN&A0! zG&C2emPu%+)O1*ldC10PTuwZSDvdB1$qrLl6j+tK>2sFAIs?9gs^%!aN*?hsx0B~vqNx^6Zb zpC&G81ZKsa;!GdteY25n`p|nY@Do=+=m2i^n}I%TXhUezY@F)!f3l=MA8(mev^VUX z`tjnaR=;j)N864SBHLhI!NE)9_nLRNieMMskGH&2YLT{+JCSQwwsS|@)`?kh{s2Wu B#`gdK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 000000000..d06da14cf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "бу сәхифәдән юнәлтергә:" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Бу домен исеменнән тыш абсолүт юл булырга тиеш. Мәсәлән: '/events/search/'." + +msgid "redirect to" +msgstr "бу сәхифәгә юнәлтергә:" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Бу я абсолүт юл (өстәге кебек), я 'http://' белән башланган тулы URL булырга " +"тиеш." + +msgid "redirect" +msgstr "юнәлтү" + +msgid "redirects" +msgstr "юнәлтүләр" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a1fb7b0b53095085d1ff94153160a105925c392 GIT binary patch literal 1569 zcmah|&u<$=6dq{#WyA#ui338fs;FX-wRcUB$|f5SkV=sn5k*cB;xt)L>}}S&*3N8_ zN)<|jDujf{rSwF_l>>(~sfk-V?VZ!i0gk9t>WROA8{gQDO)Zy!XBDz19By z>gn$o&P%X2U^Un)u%BS|JcQY|KVWOHKVhH4K7EF<7lHdgo8JSz4EzOX^M3=L20jE< zpJnVZ@J+-%F1x_bfL{P#dv0)l19%4UKJYB?*WvwNK-=f_=NSV91N3?AojsstFZ4ae zkUBb6!zmjriCUD2P)Sy8M3O?D(25`tsfNf10bh}6oGU>st{ODKC2rDnQKS^lw3^2; zEiYXpsd%QMq)r>C#DfeQqA5t`AtFhSw!UvD)slX>{AlY|Y0yhH(mbx&c2D-1B(WLB zdCd|+2-VUij}l6FQaN)_*Gc#E zef_g;lfG@fG~2pE$h@uZ_rYAlW7m9(`$OH)J(@5(`W}Jl9t*C5?I(WTV(FN6 za2!|ulw=Ik2DiQgNxi}R@b;k_J^L5tW{LDI3}e^S!DwChcP9Vq2gd{_ZuZ1y(g*Bh Rg1*xK$zhmsSKl?;>~CxTTXO&a literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..c82f9375b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,56 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Illia Volochii , 2021 +# Jannis Leidel , 2011 +# Mykola Zamkovoi , 2014 +# Vitaliy Kozlovskyi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-20 00:12+0000\n" +"Last-Translator: Illia Volochii \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Redirects" +msgstr "Перенаправлення" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "перенаправлення з" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Шлях має бути абсолютним без доменного імені. Наприклад, “/events/search/”." + +msgid "redirect to" +msgstr "перенаправлення до" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"Шлях може бути або абсолютним (як вказано вище), або повним URL (який " +"починається із схеми, як-от “https://”)." + +msgid "redirect" +msgstr "перенаправлення" + +msgid "redirects" +msgstr "перенаправлення" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b302db69ce3771d87e6f104ebb00037433ba7cb GIT binary patch literal 1138 zcmaJo9_=`|ik9TcI`;w! zcwOXabb;3!zHq3oAm&7%!$K&yD%Vn7C0tL5vhEsGQL^6iwCviUHKpV;Jr*kT zWZ;ndj0aVjnHCMHG@A^op3Ck<)sU5>Lz$^ZC3as4u93?gaE(I@*u@*HXfyj36$hQ` z1O4`ZZ6lFQi#adV?Bxw2i4~D|)46W<+gOSU=jZb}mGdfMAzzmDLT8}gDfytG$EC^j0DW%|1u z8k+TV_lyojDl_Friu-I#s(R>9(Aaask%3|Am?PPMu8dGIH=MDOX7ZZiC9@qb#&0Oz zH7&Ez-lg_#yi8`Ry>2#43tqB9S@Sh%nk`tS6)z)mb1$AFL|c$(ug6RABD}P+6@S3K zX~A2hES_eL%xARO={?G1^?%Ldw`pH|+Ph{gSusu2n;&R}uFGh@1m(AsX2na?UQbq% y)pU$6@ggGc4?b1PY$i>VV!pN1#A$b|&NTnpI2gk)<{O!9vl+ksQ>-Ipwya+@z^0P` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 000000000..bf3a9b269 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "سے ری ڈائریکٹ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "یہ مطلق پاتھ ھونا چاھئے، بغیر ڈومین نام کے۔ مثلاً '/events/search/'" + +msgid "redirect to" +msgstr "ری ڈائریکٹ از طرف" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"یہ مطلق پاتھ ھو سکتا ھے (جیسے اوپر ھے) یا مکمل یو آر ایل (URL) بمع 'http://'۔" + +msgid "redirect" +msgstr "ری ڈائریکٹ" + +msgid "redirects" +msgstr "ری ڈائیکٹس" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89aa2e0fe7654fd29fda0d1f66ff3a1f1121aac1 GIT binary patch literal 743 zcmaix!EVz)5Qa@DLKq<-&K%|jh_3BaLQ0$lp^{XpAR>xfB*bZKZ|rT>yYB8fNptEE z&WIa46feLbFTfKZF-`+LGSa7i#+vcW&is6||J5VALp&yi#9cxXt$iZy5ub^V#24ZL z@r&3eeiP*_&)XyJlRw|{ybq*H(ubr!NZY&(DWz8dYRV{f8o2zdjUvTAYXgQj! z3^!Nb1JCTbz|82%v%+z2V)QxnWv4lN&y5vY#gLz)Dzrc4wKk58Z6R`Y+!U52ItG98 zj!pSOw5e=}j=CL2ogRyNtkZ+28y~)S9+CNP(K?nGR92$XCWd3`E>k{-Hzigg*9$mG zcb{Gr^a>edx_U`C z=8sRuqnl@Sg2;cZm7}$=, 2019 +# Nuruddin Iminokhunov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-19 08:25+0000\n" +"Last-Translator: Bedilbek Khamidov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Redirektlar" + +msgid "site" +msgstr "sayt" + +msgid "redirect from" +msgstr "redirekt formasi" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "" +"Domen nomidan tashqari, bu mutlaq manzil bo'lishi kerak. \n" +"Masalan: “/events/search/”." + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae80abd0dbd74f37d9dad0d036982773a4956270 GIT binary patch literal 1106 zcma)4&1=*^6pvcJRz&JSFCHFV+S1N$c5P`*trTkug%(Rm*Yj+4Hkme=37N@$Tm1uUe*E71<$cX$eqA1TWuTo!TtnE13y5ck z%)TSm5I+$25tmLF#yMmc`66X#Z)>fB5X&PxRTxeh=40&3IR-rJIKj^AF8T-|&@xL9%fHfUIu4bh;5~?zw zT!5ef%foz=2BFU^7%H$j6IvA%qmkofeIr)o5p#6Ufm$Skexzm3SH?;t*D;qYR!Nyf zic4WZb)5=V=2lrKBTbf-%d6y0>?&eQ3vw&>Y%&)ysxg<`r5cwgnZ*fGG>Lf=ij&rO zY1Ay4CMJ?qR_9sIe%>S|k`oMe;lsOaG#YuG_2V_x#Im4paH7BDA9g6zd0`~C zytq8yKYKB6=H{f(c&Ef}g?Kp4nz|7Bc=yxbcr;Q>&#c)CWU8N+&8o48%nL_m|I31@ z3fH|&EvWO{iXTVRCkrwPlm#N}hH9ob4F~RwIh`~1Uv%EK!0CL!Kb|I=;CJ4@{?^aW zY4RFhK{ajf3D9vXO&)2~(`1W-C)4&fryD(`xL}$*&Vu%CtE=roC2fD|X18}^sHe#e z??1xBfuWbS-|_#LHU=AB=PRyKp%UCQ*$zN=J_rbSnmiPFD0e>MmdX2L-{qW_ZN4eM W%MP?7T;qrWI!*SDmv{J4-S`8JBy>&y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..40e3ddbc5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "Chuyển hướng từ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Đây phải là đường dẫn tuyệt đối, không bao gồm tên miền. Ví dụ: '/events/" +"search/'." + +msgid "redirect to" +msgstr "Chuyển hướng tới" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Đây có thể là đường dẫn tuyệt đối hoặc địa chỉ đầy đủ bắt đầu với 'http://'" + +msgid "redirect" +msgstr "Chuyển hướng" + +msgid "redirects" +msgstr "Chuyển hướng" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..915e7c58fa42c20c3d02167d8b4a19f7221d915f GIT binary patch literal 1100 zcmZva&rcIU6vtP^UsW$&ym%OI5Z!KROe9+|Ml1;lAZZF7JeXlS?Jn-_)SX#cJv9Ua zNE&ZU1HS@A{3QrJ54_T(A1LNSz*E355K`1_FzdAe(s9sfVZb=qK>aKBLTX8hkeJ~R zjWa2#8w_dKM&kq#gX_dW;NWpaO_vjt#9T+6n86I4BwdKYGK#yViAE!Xh;i(2!%mBJ(4xf*y39b{hXoF|#8CQK}-}$UQkiCJhlP-^Co72?m1Qav&%NZlJ(* zH5j}afZ-d&jLT66+swqAIw~3?RHNu7waIOpS~Ts~>{}3JCtRE$a+F|8MSZ$q6Gl*{ zFmM;@6jui~mrAAlT;ww11U6DjX*78VvzbPDsz2--R=Rvc14H5ViMss(UmvwOT$mhv zl7yZ)NpmG>!qtY5relW@-a8uYmwVcAqFkIfa@f|W_#G*VV-?kF`9@6F!KU0# z9gC^RPS#!4+Z{p;vo{d(Nxx@uUVg<}d?8i8EPD%u((c>xt3qXW)hp~&KNY;a=~{8t zdpA|ueqNr-RKIN2igUGMwzRX>3NCGDO55wO@yLrpl@D`XZlRjbd&P|RW~;I??d7xO zr7iI|e`TiX6+geM7XGc6Ep6w#?6dOxhPSrnE#@G)v^NiJ)QT(rePJS9`zS4|I, 2018 +# Jannis Leidel , 2011 +# mozillazg , 2016 +# Ronald White , 2014 +# Veoco , 2021 +# wolf ice , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-07 04:22+0000\n" +"Last-Translator: Veoco \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "重定向" + +msgid "site" +msgstr "站点" + +msgid "redirect from" +msgstr "重定向自" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "这应该是绝对路径,不包括域名。例如:“/events/search/”。" + +msgid "redirect to" +msgstr "重定向到" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." +msgstr "" +"这可以是绝对路径(如上所述),也可以是一个以 “https://” 等协议开头的完整 " +"URL。" + +msgid "redirect" +msgstr "重定向" + +msgid "redirects" +msgstr "重定向" diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a650c90cf64d1da058881e1b6b47c59ed2bf204 GIT binary patch literal 1071 zcmZ8fO-vI(6do1-svh)g%p6N}yR9c!#2B$87>HOGjqzZH?zFpPyVLBmX3-Q3+lW*EWBa?jly?OKA_uiYGpC?)-5v;?2lK=y7 z3@`_f>lZ+t{RZ3w`~lnoME4+c2>1oCjGqNQ0=x_?)WxtNgPhr(pg2v0iGzfLhh=ChW^jxXo^9iSSTE*+xWaOhI18D0 zE&tRMBCVutQQbgrhl;>OLow%h0*Z5ue@vQ%>?*pAH+w**D~E*pY@l^#R6PF-#>N5jStagr<$qiN;} zrH>~qL%HZBxuP=-2l}rlF`BVtsB(!2Xy$A<(yoNtl}H;7w`<|Z=`gH7FX2MbUE*+? z27ANG{A9IMOp;Cs%4Gmj6s7m_fc9g4Hmc}Q}S9!XL~rzE98q~%afaZo2#mN>0A z*tp4THX9OB+e*-!OjYYmZv{z;TnfoQlo?y<2H(#>sLC>MBtu&gAdWaND3Ic3ReOtyZAlhQVy5o4F~jVJBVN z^3F&HuA80VjsV&mE%}QN{6`b0GXK(lxKJJWQeMtiKTi6KrH#)E{_4cm%9#Ipq`Z88 zYh}DLHU+1CzEJ-9YCT_U+`)Rjv^iDSd_G^DzU#j)Rwh5l$G4szL6y<*jkimc#|!nW z|7DBi<&s~#S1HU@KP~w)GmubTEkLcUm1z*)^{k+XRBZOUV{MGiHr@W%VsnE)xccr1 F`Ue{Icy<5) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 000000000..cb6c90f0e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# Jannis Leidel , 2011 +# Tzu-ping Chung , 2016,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2019-09-18 09:01+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "重導向" + +msgid "site" +msgstr "網站" + +msgid "redirect from" +msgstr "重導向自" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "應該是一個絕對路徑,不包括網域。例如:「/events/search/」。" + +msgid "redirect to" +msgstr "重導向到" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"“http://”." +msgstr "此可為一絕對路徑(如上)或一個以「http://」開頭的完整 URL。" + +msgid "redirect" +msgstr "重導向" + +msgid "redirects" +msgstr "重導向" diff --git a/venv/Lib/site-packages/django/contrib/redirects/middleware.py b/venv/Lib/site-packages/django/contrib/redirects/middleware.py new file mode 100644 index 000000000..bc4fe9cbc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/middleware.py @@ -0,0 +1,50 @@ +from django.apps import apps +from django.conf import settings +from django.contrib.redirects.models import Redirect +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ImproperlyConfigured +from django.http import HttpResponseGone, HttpResponsePermanentRedirect +from django.utils.deprecation import MiddlewareMixin + + +class RedirectFallbackMiddleware(MiddlewareMixin): + # Defined as class-level attributes to be subclassing-friendly. + response_gone_class = HttpResponseGone + response_redirect_class = HttpResponsePermanentRedirect + + def __init__(self, get_response): + if not apps.is_installed("django.contrib.sites"): + raise ImproperlyConfigured( + "You cannot use RedirectFallbackMiddleware when " + "django.contrib.sites is not installed." + ) + super().__init__(get_response) + + def process_response(self, request, response): + # No need to check for a redirect for non-404 responses. + if response.status_code != 404: + return response + + full_path = request.get_full_path() + current_site = get_current_site(request) + + r = None + try: + r = Redirect.objects.get(site=current_site, old_path=full_path) + except Redirect.DoesNotExist: + pass + if r is None and settings.APPEND_SLASH and not request.path.endswith("/"): + try: + r = Redirect.objects.get( + site=current_site, + old_path=request.get_full_path(force_append_slash=True), + ) + except Redirect.DoesNotExist: + pass + if r is not None: + if r.new_path == "": + return self.response_gone_class() + return self.response_redirect_class(r.new_path) + + # No redirect was found. Return the response. + return response diff --git a/venv/Lib/site-packages/django/contrib/redirects/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/redirects/migrations/0001_initial.py new file mode 100644 index 000000000..3b3b87962 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/migrations/0001_initial.py @@ -0,0 +1,65 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("sites", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="Redirect", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "site", + models.ForeignKey( + to="sites.Site", + on_delete=models.CASCADE, + verbose_name="site", + ), + ), + ( + "old_path", + models.CharField( + help_text=( + "This should be an absolute path, excluding the domain " + "name. Example: “/events/search/”." + ), + max_length=200, + verbose_name="redirect from", + db_index=True, + ), + ), + ( + "new_path", + models.CharField( + help_text=( + "This can be either an absolute path (as above) or a full " + "URL starting with “http://”." + ), + max_length=200, + verbose_name="redirect to", + blank=True, + ), + ), + ], + options={ + "ordering": ["old_path"], + "unique_together": {("site", "old_path")}, + "db_table": "django_redirect", + "verbose_name": "redirect", + "verbose_name_plural": "redirects", + }, + bases=(models.Model,), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/redirects/migrations/0002_alter_redirect_new_path_help_text.py b/venv/Lib/site-packages/django/contrib/redirects/migrations/0002_alter_redirect_new_path_help_text.py new file mode 100644 index 000000000..84f67e10d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/migrations/0002_alter_redirect_new_path_help_text.py @@ -0,0 +1,24 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("redirects", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="redirect", + name="new_path", + field=models.CharField( + blank=True, + help_text=( + "This can be either an absolute path (as above) or a full " + "URL starting with a scheme such as “https://”." + ), + max_length=200, + verbose_name="redirect to", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/redirects/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/redirects/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7eb25b21c5108219d1359f1fc1f012f9a434541 GIT binary patch literal 1340 zcmZWpOK;pZ5Y}^7+DDu=ZTbduD!M@8buKv=MG?b})1paG*vX;nq5`!u*3#CB3Q0L@ zp8~X}0{#c-59mMXp}#;tFYYPlp88CO+H7Jp6gZj}HQziaIUM#JTEBn$Yj!hooZqZ) zaRnsYqOCtB0uH!^Gk2Lg_n7B8cO3A*|K0%~-9!I7pZO5%JEQO!`8p%7>CHv1xDm3{ zO=m6v3q7@_i)%o_E!z4ABIqy|9Oi+WyUfSnFth=%bJ&FdLg>)bJqr#zh)5SfOf-fF zdS^cA`Xu#W07JM$erv7YE0yW6|2hw=;toHHFM!@xC-yUyH7*%>L0l9-dR9# z2k<^6@j(;cTcM{^LM;qxHrUwMxRHud7{Ln`?I8$-Q`2|?8t;pp-3Ozf862a^q{g)5 zb8KRbihRW>vH`D+Os5LDL16t#i8)s%=@FhZf&KhxuMM)kPyEPlJR?~w%aqE71{HP3 zX(CxbT5&V0zajC#Oz1?qQY7k|fm>DJ@=UkMDg|(jC zUhsKU;AV3EZ zWo~9IHWoofl>uBdQHhV2D8F8zoDw*Kh=PEq*N`Tka820dF^&>R=H#F*isa$m-9#I% zj7{J%owQhI##Ec*7UOCEB|IZXfx1M&)S4x2t-`F}<RiZk3tqn1=O}OXKQsS9@Ur{nWKf?W@&g7^-Mjk-YM2Wk4K=7l|MCBO=)pygDcR-R3uzuivHJ$sjw zZ#D524b`rV!+N_?p~%ZG@q~4^xAwQUc5btHd&bq$9=6Ato~-c2t^CPRAKKzr^57ZuUC9}#B zWrfF6SsEp>@yn`?U;PWl7cbFzb)xJ~#%?_!5;>k9JP$(8rMFA8eS*Kef4!cS+x-to zF>#*fTYK;a$;1E2=fO4W+uHx?bc0`_=WV3>qkzRrnCpfjN5OqGbO}4FsK;p!~CqxeImL3s8MMW)#QlZjbq6o{0ryFk*C)m!mAP$w_ z+6!m+0sIqwLnJQc)H5fLP?=;|T1zvUH*f4`&$wDy84_GSUw=>EyM+Acz|G|&*hDk; z(Fr1)f|O3|ly2-gWQPb>cpr)Iz?pa-yx0@|D-sPZv6e(`J1pf`b1N%l+J&+bP?)Tv zZmtl)CYsqm2PAd`iCy80o!A3^GUx z)F7mW%$j(4eSQ5QlS*32i#C`OZJ^+U)!gO>%`s{o-sN0Z&a;G!|%A zNFQ*6nQ96Vt&pZiO;OOp{atD-*H)@AJ;9wwm@J19sA)1phF+X~&aJJ@qtWQ%?91Ba zH`IH#G`|V8RphsWwBYKv4Ra`JX5rLg+xRIfK#gr4FHb?Il>w%B36U2M`!@Ed^}Ad< zIFe9^y(nx0*5?^(hm2ueQvk-xjJ;`i(baZHKn+TO$|M+#6DRTTX<n-mg#8T7c;v4HzOS42IJig*_>zd0kZ!+TdUvd z?yGiY?x72a>-ksyz;#^5M{`}*!|0d)C%Eb>_aZ+IXBSu#Y2S(d^*wq0(phu|Pi%w7 Qvz|V2I+0H47P;&F1@xrz$N&HU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/redirects/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67462118fbb39e64d31c493ebfb7f2c9f0690ca5 GIT binary patch literal 209 zcmYk0u?oU45QbCfAc7C#P`itWps0h0C~k)#X+ybclajj@d?a5Ota!5Vqf zXjq{qPWIlFCSz!gZDETV2-zgH$}Xxf1bL}!;nK`m_NY^Da`fSx(h3W&7@eh5O0>vQ Vj_cc_KdoHeT+OWehI&D<_yU(GI`jYl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/redirects/models.py b/venv/Lib/site-packages/django/contrib/redirects/models.py new file mode 100644 index 000000000..155241497 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/redirects/models.py @@ -0,0 +1,35 @@ +from django.contrib.sites.models import Site +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class Redirect(models.Model): + site = models.ForeignKey(Site, models.CASCADE, verbose_name=_("site")) + old_path = models.CharField( + _("redirect from"), + max_length=200, + db_index=True, + help_text=_( + "This should be an absolute path, excluding the domain name. Example: " + "“/events/search/”." + ), + ) + new_path = models.CharField( + _("redirect to"), + max_length=200, + blank=True, + help_text=_( + "This can be either an absolute path (as above) or a full URL " + "starting with a scheme such as “https://”." + ), + ) + + class Meta: + verbose_name = _("redirect") + verbose_name_plural = _("redirects") + db_table = "django_redirect" + unique_together = [["site", "old_path"]] + ordering = ["old_path"] + + def __str__(self): + return "%s ---> %s" % (self.old_path, self.new_path) diff --git a/venv/Lib/site-packages/django/contrib/sessions/__init__.py b/venv/Lib/site-packages/django/contrib/sessions/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb8f3992f3effbad20180b5d0e8a38b4fb2ee6e3 GIT binary patch literal 197 zcmYk0u?oU47=%;lAVMF+p>`J$K~V=0QQUqENg8UZO-lZx;3N4;f|HNn=43MI!F|Ww zbSBFNB-|L{4_$8bbx5%wOD!NLgNNbL|-%B?+z zrLySqoi()-4mznj*eDLDoXlG$F07IWWzBSD3SqRfiWevmmC;yGs-5j!b!%O_9V??VNseB9~8#)K~ns0LcUoY$IsG zs3I&-l!ZD{!866qA$E?MjcW~%nG#lgpSILYmQyoIP3dfwjG#@k-f!W>u-o*6C}p9A zX!=4FM%B6ZV<8@DnYWq9-whQko@<*J(90*U#Cn;Q@U4#a_zh?a{Hg|!{Me**p-Tt+ zG;?Ql!cQ^_ZuiofnNA&_>vGP|vxGzD^ll~7dpXs>R}+uhiO0Vak7ZTCs9IPre8)@C zMd*=;#&j9OMcANS*VkIF8QX3nwaaoCIV(%Zr9*{mh-tg#!FT*yW91Dn*7WvQVjNIp L%l~2$)6MV)3IUG~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d45c560e37d070fa74ae4d3577ea54d8e080572d GIT binary patch literal 2274 zcmZ`)&2QT_6esmz%O6Se(Y4*WVcHJEgdxt(!!RUE+O9xi1Wk6RU`(Jz&QU5$9!aN( z;9llj`#(6x{yRGg*lDMpciUxqPqI3Bgi0RPq4T@tkHiwpPQ}Tpxi`!R(+rl`jO-;WJni{WzrVbhhG!5)sq9UXU?Z^3io(Yyu*MXX@d9tf?) zg$`ntU52>4*bJELfT&NQ6U3(wwt-<^5#Qt{x8Mt*LMXL-W5LNomau`4A^u-A69y=I zAnG1;6LLmo^qRafCdQP^j0wG_a1za)H{E%ACiGY)u09p+AcDBvd5kWPLJi4a@)A@s zVsVrS?y`itA_*Zj7%P{#kUdCa=iPapncGF^`F)5xn4cCXok|geF;gn9l?T91ONsc` zyj^WVllf*fTlnP-ku3=4pLp-P-p}BT>OC7P#d`Z`I39{btKO4H|1|FR9!FB?ts|M9 ziBR_-ob%p6)bFWCi>(n0UqH%KuPo~Jyr|oAduqE65U3pPj4ovzOd?(t!m??#Y4-8W z0(8n?Lflg|fHtXt6m|F(1`{$P6AC?@7}s=SUYoD1i6J*8*37sjluWE+keOMH-_WjS zNj#=-0`kPpMP36y2`xNZIuYE=10$ZwiYW;HeE?6TUSLNb&6K!4gk9heETHygr9T?o`0;dUd%8=gPa-eFUBF zusQAJH1ON!LiSU@K33D;T$}}?cr01GtgN|(_P&7A6vELVh^ID{$YUXeu4*_&DQ*Ko z09omn$Q2lRRIZgDJY&HO0w=Erz#B3MzJiIu6xC?YoxA6f=Bzo*O z_D-369Eq6AhiDM%ZjE0_bb^a+SU8X^T)Js*|!hz? z#EBE<+&D4bU78$tjO3BOnX$j|H_m#!Ee< z`pW%Wym}UY)OcxpQE1KLlZ+P$q(;YQ(!4IF@u^hW9KBcB0=S7+kgnplavE!C;3#MO zlFdNJV!_f`HsV=ol$?&5=JW_YbI7d{dYG?O3t8B;R*|FRvhyS3zkF0k7HN8dSK|6X}YdGYYg5gd#<=RTmIxAn*yRv8g^s+K|UeEs6 Qel#7R>yy6MZ$E1P0^BphKL7v# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60a060210b414f665844eb239b125106cd5dc0cf GIT binary patch literal 2669 zcmZ`*-ESL35Z}E!pD(uKq+hfI1V;fOOT~ReLI@EB(?(FI)M-&q7N^VYCO-GRy1P!| z$ax`^`hbx7Cp2&LUpfg13Gu))NJt2&%vvG`-#A-bY!G;U|MsV? z9~TMv1t(`83nrgIlR0#ZFd7pN-$qOm!!sz3&DcyV&(dQnt|hi->v1ivCywXnu^lfY z4X>fc^|+a|yp|q2@nX{U+LYWPY=JeN5Z2(WBhy=AbU-@I-(XkL@6ci~O7cu7Kgrl6 z<{)q+S1L+(B#fK)a~3Gx6Cx8Zy*S`fMp?R^DlWt%SDc|V4^%kvcLOo?M?7F$;HOJ> zBF19A7YKeQ+K*BYEsT`PeKZ*2?q?sfn#db4;KZYhc*aw*O&Mjz6UQ@|$*d>DvsjJU z@UA^27V&KGq+VR8P@QfV8fR>y>3NgaVWP+pc}{2am{Ot)Wsa>QdT7jyacxHY8Y2Vp zg7!OhQInILi^B2!D2@*LdyY;e81)8{V5p84N$q!b!qYC5N{nb$hZk z{2~%keRx-7V;-vEE>CxdUqxF(87cl@9)ypA9WIA#9Hcwh%`i)qh_-IZ@|@(&# z`Bbz3JLDpfHgql8pe=f^@=El&bBF&kjBEJ)ThPtu7{aKGv3ZQ)BhRgwaSUNCLntu& zA&B+0jg2qYdxOG+VCdi#m*&AMm;ClbcGW9%?z77g!I`Xsy4Pkuf9vfN3$9dVtfiCSG@wIli+-2(*U*I++HPR3Vf_N-oE zMa-qQk-DLI;3nl7K{ovPzTRrRBZgmjd>d@T1K)OIL(RRey4L1{RwC$=9 zcOhH1qn(Ke6mW_gNmpgA40bs#p4gik;k#T+T@@w##)*;}jv(#1bc2++KwEAAy=Ew| zojr;;ZpL`b)u}z)_?%J&XD%H9+%3*imnXRb$lVhxc(Z}*Mup9?B#2Vr${^u*6M^0A zHN9m&`UBJEyG_`q3d9HUWJe4|35dZS+rSn&5|tvLPI5%cx-Nb{0bX#EVCs%ADsi^6 z!eISUU&iC^Os7Sm4$t_l(D{RT( zb6z;e%2^su#hW1Rtccfe)d@npRGbyg{OCL{TC`Uc^30?v4fblzg= zqF)|@cmBfPUERFxT{*`BpKsh*UGIBW&xr>>4ukd0o$0p?|OU z_5I#p(|ZHiwsg}El)ojiJqRB#Z3g7qK3SaVcvzT7!a+})QUz)v0W9M{+z@Gj>>+Bn z*nq66+z{6g!Fkw&-rD_py;or0-rT&q(f{gUXF)TWxQfP{c`XoFhQzxltLcCWBvkP> z3R=}k`5NIlu3J9kuCl7&SxFB%!*-}c+ra1!HC`@T7M=g>zZ zNf4JSy8ejQ(N!$-#bQ+lLmtOaUQc~pLKWn3fqaZrOX5*EP_vxcvZbY+W$`}9iiPt3 zOB`+K`s_8!QrJauDU0>{rxHxsIW5WV7F183G8{mr;Guih|4*0ihaA`dD!EP!?_#Am zQBf?rVGxdZnWESJwZM2Tc&G_Z)Nz9g|60bYr?XJIbS45i7P`DSpOpX1J_S}G5=9t> L798RHciH?0aB|$x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7439051a1077f20ca3a27820946ef312923fae6b GIT binary patch literal 1850 zcmZ`)O>f&q5G5(ek`+5~+M>M_=)&!x0wVg-QxOztZ6pnl7=`Uz2%*H1JCfF>xXR8_ zhJyCw{+a$I0==}So_*`7GfS#gnq*iia{4n#Mdq(k$r>e0LhAL5r$6(o@gla7iAzf<3D!CL!^ z(^0n`q-iM^kf!x8O&3O01&{aA^mQeRW+!=AA*8xY7kXx;BR2SZV0X!f@BWz{e>-`F zU~zI*Ahq4$lYWGg))cxbcWML4omdZF}UAWxnNZ5DY@U@{S5`Wnx z4>GkR^|i5Aq5y|tZ7PAzSRi91EKuOEqKVBk<=?J_l1>U!3hAwvV8>pwm8O5>GLxt= z7SCOSg8!X&-mhJO6-aCu-XqBNVxeeGluDPg)_D$k#WOP%xiME72>G}f&_d~?-tcJS z6VFe?cq~feJeudK9YQgUhu#}U-^#X;MBFK$QP3UH7K(N2a7^)l^6@AG=rI_5DoN^$ z?ul?lEGy@j<{b$X#O&4C3*vh*Csg{AC9OGzH>E5*5amqIN}(Vp@k|+uQ$jW+IcHxK zfpj8+xm;-yb|J68LyBrvtRD&O{8B@Svc|GH5UZ*v!OE-vX4WzqlPsj})QOdrUYWx) zn1Tg+DCQs)*jApW`_1V!JmP#{RX875lSyAB z=mNY2_y$^%@?if_yecksU4dNY8hhGd9&dj zzXT_f`wjDrUn-w=htAnPcLVB@fyz?HdT#Och0>GmGRh$zzQ-Nwb~+mV52NmrTGAC>X-Eik&6b-{qdw%D1)Jwkla3ZMQ ix8gQls0s$2k2ijwzk2Yv`StjYHAL3sAUNoJ()|~yj|Ln7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/__pycache__/serializers.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/__pycache__/serializers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3754d16080510fd9e21295c6f01cf0d27a3a032c GIT binary patch literal 381 zcmZ8cO-sZu5KY>y6xkI~j~>1Bu-&_eh>D8Hy0~}=K}g%7WZNc7CSA~f9wq!-WL zJULbTSO@a*-ptE9Vh4kDM)h|0l)cdX+=;&xkT{})djth5c+DCv0^aeU4x32yID?*u zAP~F=r!0wH$;lGF+??pVs$mLFt6D#Rqu$2l^m_c;87FIEx0oqY+BCNgQv5MvnkiCU zzSub?`hT0)UU{fXqfP0;&cD_9SCbx@i)i!-@72k^yrtzRZ(2kpPi@{dU_8om?JwF) zo@s}EIB|9cxt9wt3wfn8iQ2<(uJTHifbuJTlw0GS&PE7`+8QMC{b5Y!_sjU8u|-?M PA*Xzd3Hq$hqafxV+3Rq{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/apps.py b/venv/Lib/site-packages/django/contrib/sessions/apps.py new file mode 100644 index 000000000..83f0cefa2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class SessionsConfig(AppConfig): + name = "django.contrib.sessions" + verbose_name = _("Sessions") diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/__init__.py b/venv/Lib/site-packages/django/contrib/sessions/backends/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f70dff050ce912ddc68338a42f7f391c8e1e0c85 GIT binary patch literal 206 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b18f39e42eb3f1c3c7dea1ee3fd0b819aa69a402 GIT binary patch literal 2412 zcmZ`*&u`l{6ecA~mL0|Uxfbh+K|?oS237|cPz)P}Vp*EB!HTS?F>Do#5wggna%IUQ z<*YH>Qv>w0|DitiUlOp>PCM^5py=MCY&T9j24o&Z>gm1jeIMz3b+tjD{qyUey)QjN z{=&({#$fUtbd7@`ArVwqDIHj$MbWlXd%!}+*erDiwXg=Z6MA=va7FE$h?;bs+aVKP zhqUVB8;!jvek{cofryHz7ioF37sXGc2(;8X$ur$<{0*NXEn0e77DbYsXt4cGwcIIk zC1LKy=thq}5&bAT$=h+B6)Neq7hcS|;G!3!w~Gx^!lwH$ND@*=%MvuSB_tv?Uyx%+ zOR)2L=*pUKgnLe&)6f$&;hmGPZr1Cfaqfi;v1MkyScTmyvv-?f4Q9Sr7aOpD^#x%h zY(nze%7zb)Z#4pFhl61%2Qn*yD$uuh1n=O1`;TG^W1cm%(HVAq9fpDwv~PV#CWPAs zdrn?D6FQ|(3DP02=uyj6n6<+9!mZAJr*rt@5#QV0ySLAG?;q}VN|&2BN=J`|Qk5R( zNtP6xzp_fEWqMq$%#h_z4));W*UNNdF&dk)=~FP9*;0L-MyO> z_eQ<$L85eV^MT6yGA_EOGCS?wPkLRQ6!PW}${(Fb-K{FQGpppzyplTxk4)&DMM>Mk zGX-QNThKKo=F@dL{@@}-+Vccr3hVQRHe$91T{mHvkUsR6bV{xQQp$lxEvsBNU&2iJ zP|4%uX?TsF$b#pJ$4W+pEl#oJq)vyLuSzq|L3R8{9H?8rNr5G1mmV(3pF*_5a z0%KgqFkey_ttov*ev89 zt>Lx-W)8=($_F61(iJk!g$(`q0*bw~LC<9qfvg;JD0{eKY{_AVY}p3Nl9}yPU&fTB zc_co92=vD=Sag&6)U&PEp5svlwhK?#8|FZ#TG zR#+e<8>KWS2UF{?*8rkwV3hz;q6@9+_}It65CJ)$Fw{15jRavYmi2nPwG>+A z;NYF;5Om~%{v3vaKqOEb6gAclq9T0;-GTbLQ-T#lu~!tXRk1N0oyscKE8wFlo;N42 zLSnWo19`YI80lih?#pT50doubOlsFJV~byTCwi2niT*YiOVL*x-Nq~oTQ@LnoEd)F zhUW~cFh9VmoSYfnLZ-5iY6aX@shNVj4}K)c*U&YV1(-q`z!H~Up_d9!d0f)q(m{cK z0A(@-t-=494gqhlxGjuc#<4lp;iL{8%0YfAgW|Ca;*nB##?NG6?z{j+VpiujU=U>@ zQ1V1(Qh^F^ZQ%^gp!Q;N)MBL*r!rCsV=@?o{=A-eUa1Xye(5N3j?l=BP08#NgrA(3#Vk;Wcjl(D8| zu?DE$-)h#HY~3@L>rtz&K7}oC7cYJm99OsAjkiyhe<;kam$v8`A7Smz_vTkdxUqOe m$+kJGt6TIl_`-!S7kV$fZ!4s3BYh0(81b18Clj-_?f(EKr8PVN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4ec5f718ffe967d6bfcc0ab9e6216666df58a95 GIT binary patch literal 4087 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 HWybg)!>k literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ccada0d30e43a34650bf6a1958f45bcf04a8d82 GIT binary patch literal 3120 zcmb7GO>Z1E7@m*)%4U;(r4>|Em;-7TB^wDL4poJ!7E%yZKqP=ztr$6DZ!*d3%+~hg zW7S*3v3~*4V}1Y^B*gz%i4!Nz+)58Tue~4HBvr+%#%qu5*YErIc^^ApSg3n={`v9G zErZ%$)HwZ=(72CRFQX8i@Kdknw|$@LK^pYJcIbPLJQ0f0u_sE>e-^e&qP*cXD}Q5# z*Yt<;8&c~e&mM3s(X8rZJ4>?dn7U6tAsYAb>hDlUuk8!39SC0p$6h;h3&8X>Q4!T+ zzg-qfVouaitDrV78mLvpf>^}pnz$q`<9|-p#T9Y&*n8%;=S2-pT^}|^-fWm$$=JtI z@sybtl}yC?>W#@qFudb-4~!SmAh-iBB5O!?>?-=iP;DlhQ=gO{M^ zz-xws-|KAjJkGgbW=Ar?4QE}I_iSrV9Gi+$Da=Q=Tx=0@AnMB0HJ!Tg=(GE+R!l0D#J1E_OTsHwfA%V;a?N7m&@ zs#}w_UapE=o^9u?IM0kqwpt^zy0yjQJ(&sJqPbE;ah~rbQa8h4T}zelG#N`g5M@y0|L$W`sp?sR4%uZ;?klv&omuU_jY84(ScJu?z8<_=PoJi(5Fnd^RPAjnfIL zt|0Vgpce4gp6?afL=LSp2vZjA%l9x!lOESAb^i>tsDJ$&#H47JTQp1fU{x^qb>jNw z4w%uCW+xY{$M+=BB!gHS?8uBA<;86!nc?Xkp=feKc!w(htEA2g6=N^9iYcuU!$dB1 zcH6+1fl|%bA+@r00DO{xbQpuIM*S2SZ|jL~j=ED8u31D*98_u!;hcr2A`cU7^atp& zJSKbBfFHR^J^LR&E5~}MLLFxkikRTQv?7`hEjShBE^!j>O8#BvxUWA{zI!1taQ7Yq<#1H4@tHG@q49^PZ zIVfkf4Y#fnf8A;Vj;k;j`#!!12I{wfmtGB3ln+ghjI3K56Yp1&EUHVMdm{Wy4 zQAw`}bxl01c{RVbRIk?O>a|+ERt*}9zM>K9&2szwH{R1|=N0i3SK#rTPD#6O*2<~1 Xtt;ffuy)Ud_zA&mlfU6L{H5?e)@Ckb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/base.py b/venv/Lib/site-packages/django/contrib/sessions/backends/base.py new file mode 100644 index 000000000..4b179326a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/base.py @@ -0,0 +1,359 @@ +import logging +import string +from datetime import datetime, timedelta + +from django.conf import settings +from django.core import signing +from django.utils import timezone +from django.utils.crypto import get_random_string +from django.utils.module_loading import import_string + +# session_key should not be case sensitive because some backends can store it +# on case insensitive file systems. +VALID_KEY_CHARS = string.ascii_lowercase + string.digits + + +class CreateError(Exception): + """ + Used internally as a consistent exception type to catch from save (see the + docstring for SessionBase.save() for details). + """ + + pass + + +class UpdateError(Exception): + """ + Occurs if Django tries to update a session that was deleted. + """ + + pass + + +class SessionBase: + """ + Base class for all Session classes. + """ + + TEST_COOKIE_NAME = "testcookie" + TEST_COOKIE_VALUE = "worked" + + __not_given = object() + + def __init__(self, session_key=None): + self._session_key = session_key + self.accessed = False + self.modified = False + self.serializer = import_string(settings.SESSION_SERIALIZER) + + def __contains__(self, key): + return key in self._session + + def __getitem__(self, key): + return self._session[key] + + def __setitem__(self, key, value): + self._session[key] = value + self.modified = True + + def __delitem__(self, key): + del self._session[key] + self.modified = True + + @property + def key_salt(self): + return "django.contrib.sessions." + self.__class__.__qualname__ + + def get(self, key, default=None): + return self._session.get(key, default) + + def pop(self, key, default=__not_given): + self.modified = self.modified or key in self._session + args = () if default is self.__not_given else (default,) + return self._session.pop(key, *args) + + def setdefault(self, key, value): + if key in self._session: + return self._session[key] + else: + self.modified = True + self._session[key] = value + return value + + def set_test_cookie(self): + self[self.TEST_COOKIE_NAME] = self.TEST_COOKIE_VALUE + + def test_cookie_worked(self): + return self.get(self.TEST_COOKIE_NAME) == self.TEST_COOKIE_VALUE + + def delete_test_cookie(self): + del self[self.TEST_COOKIE_NAME] + + def encode(self, session_dict): + "Return the given session dictionary serialized and encoded as a string." + return signing.dumps( + session_dict, + salt=self.key_salt, + serializer=self.serializer, + compress=True, + ) + + def decode(self, session_data): + try: + return signing.loads( + session_data, salt=self.key_salt, serializer=self.serializer + ) + except signing.BadSignature: + logger = logging.getLogger("django.security.SuspiciousSession") + logger.warning("Session data corrupted") + except Exception: + # ValueError, unpickling exceptions. If any of these happen, just + # return an empty dictionary (an empty session). + pass + return {} + + def update(self, dict_): + self._session.update(dict_) + self.modified = True + + def has_key(self, key): + return key in self._session + + def keys(self): + return self._session.keys() + + def values(self): + return self._session.values() + + def items(self): + return self._session.items() + + def clear(self): + # To avoid unnecessary persistent storage accesses, we set up the + # internals directly (loading data wastes time, since we are going to + # set it to an empty dict anyway). + self._session_cache = {} + self.accessed = True + self.modified = True + + def is_empty(self): + "Return True when there is no session_key and the session is empty." + try: + return not self._session_key and not self._session_cache + except AttributeError: + return True + + def _get_new_session_key(self): + "Return session key that isn't being used." + while True: + session_key = get_random_string(32, VALID_KEY_CHARS) + if not self.exists(session_key): + return session_key + + def _get_or_create_session_key(self): + if self._session_key is None: + self._session_key = self._get_new_session_key() + return self._session_key + + def _validate_session_key(self, key): + """ + Key must be truthy and at least 8 characters long. 8 characters is an + arbitrary lower bound for some minimal key security. + """ + return key and len(key) >= 8 + + def _get_session_key(self): + return self.__session_key + + def _set_session_key(self, value): + """ + Validate session key on assignment. Invalid values will set to None. + """ + if self._validate_session_key(value): + self.__session_key = value + else: + self.__session_key = None + + session_key = property(_get_session_key) + _session_key = property(_get_session_key, _set_session_key) + + def _get_session(self, no_load=False): + """ + Lazily load session from storage (unless "no_load" is True, when only + an empty dict is stored) and store it in the current instance. + """ + self.accessed = True + try: + return self._session_cache + except AttributeError: + if self.session_key is None or no_load: + self._session_cache = {} + else: + self._session_cache = self.load() + return self._session_cache + + _session = property(_get_session) + + def get_session_cookie_age(self): + return settings.SESSION_COOKIE_AGE + + def get_expiry_age(self, **kwargs): + """Get the number of seconds until the session expires. + + Optionally, this function accepts `modification` and `expiry` keyword + arguments specifying the modification and expiry of the session. + """ + try: + modification = kwargs["modification"] + except KeyError: + modification = timezone.now() + # Make the difference between "expiry=None passed in kwargs" and + # "expiry not passed in kwargs", in order to guarantee not to trigger + # self.load() when expiry is provided. + try: + expiry = kwargs["expiry"] + except KeyError: + expiry = self.get("_session_expiry") + + if not expiry: # Checks both None and 0 cases + return self.get_session_cookie_age() + if not isinstance(expiry, datetime): + return expiry + delta = expiry - modification + return delta.days * 86400 + delta.seconds + + def get_expiry_date(self, **kwargs): + """Get session the expiry date (as a datetime object). + + Optionally, this function accepts `modification` and `expiry` keyword + arguments specifying the modification and expiry of the session. + """ + try: + modification = kwargs["modification"] + except KeyError: + modification = timezone.now() + # Same comment as in get_expiry_age + try: + expiry = kwargs["expiry"] + except KeyError: + expiry = self.get("_session_expiry") + + if isinstance(expiry, datetime): + return expiry + expiry = expiry or self.get_session_cookie_age() + return modification + timedelta(seconds=expiry) + + def set_expiry(self, value): + """ + Set a custom expiration for the session. ``value`` can be an integer, + a Python ``datetime`` or ``timedelta`` object or ``None``. + + If ``value`` is an integer, the session will expire after that many + seconds of inactivity. If set to ``0`` then the session will expire on + browser close. + + If ``value`` is a ``datetime`` or ``timedelta`` object, the session + will expire at that specific future time. + + If ``value`` is ``None``, the session uses the global session expiry + policy. + """ + if value is None: + # Remove any custom expiration for this session. + try: + del self["_session_expiry"] + except KeyError: + pass + return + if isinstance(value, timedelta): + value = timezone.now() + value + self["_session_expiry"] = value + + def get_expire_at_browser_close(self): + """ + Return ``True`` if the session is set to expire when the browser + closes, and ``False`` if there's an expiry date. Use + ``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry + date/age, if there is one. + """ + if self.get("_session_expiry") is None: + return settings.SESSION_EXPIRE_AT_BROWSER_CLOSE + return self.get("_session_expiry") == 0 + + def flush(self): + """ + Remove the current session data from the database and regenerate the + key. + """ + self.clear() + self.delete() + self._session_key = None + + def cycle_key(self): + """ + Create a new session key, while retaining the current session data. + """ + data = self._session + key = self.session_key + self.create() + self._session_cache = data + if key: + self.delete(key) + + # Methods that child classes must implement. + + def exists(self, session_key): + """ + Return True if the given session_key already exists. + """ + raise NotImplementedError( + "subclasses of SessionBase must provide an exists() method" + ) + + def create(self): + """ + Create a new session instance. Guaranteed to create a new object with + a unique key and will have saved the result once (with empty data) + before the method returns. + """ + raise NotImplementedError( + "subclasses of SessionBase must provide a create() method" + ) + + def save(self, must_create=False): + """ + Save the session data. If 'must_create' is True, create a new session + object (or raise CreateError). Otherwise, only update an existing + object and don't create one (raise UpdateError if needed). + """ + raise NotImplementedError( + "subclasses of SessionBase must provide a save() method" + ) + + def delete(self, session_key=None): + """ + Delete the session data under this key. If the key is None, use the + current session key value. + """ + raise NotImplementedError( + "subclasses of SessionBase must provide a delete() method" + ) + + def load(self): + """ + Load the session data and return a dictionary. + """ + raise NotImplementedError( + "subclasses of SessionBase must provide a load() method" + ) + + @classmethod + def clear_expired(cls): + """ + Remove expired sessions from the session store. + + If this operation isn't possible on a given backend, it should raise + NotImplementedError. If it isn't necessary, because the backend has + a built-in expiration mechanism, it should be a no-op. + """ + raise NotImplementedError("This backend does not support clear_expired().") diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/cache.py b/venv/Lib/site-packages/django/contrib/sessions/backends/cache.py new file mode 100644 index 000000000..0c9d244f5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/cache.py @@ -0,0 +1,85 @@ +from django.conf import settings +from django.contrib.sessions.backends.base import CreateError, SessionBase, UpdateError +from django.core.cache import caches + +KEY_PREFIX = "django.contrib.sessions.cache" + + +class SessionStore(SessionBase): + """ + A cache-based session store. + """ + + cache_key_prefix = KEY_PREFIX + + def __init__(self, session_key=None): + self._cache = caches[settings.SESSION_CACHE_ALIAS] + super().__init__(session_key) + + @property + def cache_key(self): + return self.cache_key_prefix + self._get_or_create_session_key() + + def load(self): + try: + session_data = self._cache.get(self.cache_key) + except Exception: + # Some backends (e.g. memcache) raise an exception on invalid + # cache keys. If this happens, reset the session. See #17810. + session_data = None + if session_data is not None: + return session_data + self._session_key = None + return {} + + def create(self): + # Because a cache can fail silently (e.g. memcache), we don't know if + # we are failing to create a new session because of a key collision or + # because the cache is missing. So we try for a (large) number of times + # and then raise an exception. That's the risk you shoulder if using + # cache backing. + for i in range(10000): + self._session_key = self._get_new_session_key() + try: + self.save(must_create=True) + except CreateError: + continue + self.modified = True + return + raise RuntimeError( + "Unable to create a new session key. " + "It is likely that the cache is unavailable." + ) + + def save(self, must_create=False): + if self.session_key is None: + return self.create() + if must_create: + func = self._cache.add + elif self._cache.get(self.cache_key) is not None: + func = self._cache.set + else: + raise UpdateError + result = func( + self.cache_key, + self._get_session(no_load=must_create), + self.get_expiry_age(), + ) + if must_create and not result: + raise CreateError + + def exists(self, session_key): + return ( + bool(session_key) and (self.cache_key_prefix + session_key) in self._cache + ) + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + self._cache.delete(self.cache_key_prefix + session_key) + + @classmethod + def clear_expired(cls): + pass diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/cached_db.py b/venv/Lib/site-packages/django/contrib/sessions/backends/cached_db.py new file mode 100644 index 000000000..3125a71cd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/cached_db.py @@ -0,0 +1,72 @@ +""" +Cached, database-backed sessions. +""" + +from django.conf import settings +from django.contrib.sessions.backends.db import SessionStore as DBStore +from django.core.cache import caches + +KEY_PREFIX = "django.contrib.sessions.cached_db" + + +class SessionStore(DBStore): + """ + Implement cached, database backed sessions. + """ + + cache_key_prefix = KEY_PREFIX + + def __init__(self, session_key=None): + self._cache = caches[settings.SESSION_CACHE_ALIAS] + super().__init__(session_key) + + @property + def cache_key(self): + return self.cache_key_prefix + self._get_or_create_session_key() + + def load(self): + try: + data = self._cache.get(self.cache_key) + except Exception: + # Some backends (e.g. memcache) raise an exception on invalid + # cache keys. If this happens, reset the session. See #17810. + data = None + + if data is None: + s = self._get_session_from_db() + if s: + data = self.decode(s.session_data) + self._cache.set( + self.cache_key, data, self.get_expiry_age(expiry=s.expire_date) + ) + else: + data = {} + return data + + def exists(self, session_key): + return ( + session_key + and (self.cache_key_prefix + session_key) in self._cache + or super().exists(session_key) + ) + + def save(self, must_create=False): + super().save(must_create) + self._cache.set(self.cache_key, self._session, self.get_expiry_age()) + + def delete(self, session_key=None): + super().delete(session_key) + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + self._cache.delete(self.cache_key_prefix + session_key) + + def flush(self): + """ + Remove the current session data from the database and regenerate the + key. + """ + self.clear() + self.delete(self.session_key) + self._session_key = None diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/db.py b/venv/Lib/site-packages/django/contrib/sessions/backends/db.py new file mode 100644 index 000000000..e1f6b69c5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/db.py @@ -0,0 +1,110 @@ +import logging + +from django.contrib.sessions.backends.base import CreateError, SessionBase, UpdateError +from django.core.exceptions import SuspiciousOperation +from django.db import DatabaseError, IntegrityError, router, transaction +from django.utils import timezone +from django.utils.functional import cached_property + + +class SessionStore(SessionBase): + """ + Implement database session store. + """ + + def __init__(self, session_key=None): + super().__init__(session_key) + + @classmethod + def get_model_class(cls): + # Avoids a circular import and allows importing SessionStore when + # django.contrib.sessions is not in INSTALLED_APPS. + from django.contrib.sessions.models import Session + + return Session + + @cached_property + def model(self): + return self.get_model_class() + + def _get_session_from_db(self): + try: + return self.model.objects.get( + session_key=self.session_key, expire_date__gt=timezone.now() + ) + except (self.model.DoesNotExist, SuspiciousOperation) as e: + if isinstance(e, SuspiciousOperation): + logger = logging.getLogger("django.security.%s" % e.__class__.__name__) + logger.warning(str(e)) + self._session_key = None + + def load(self): + s = self._get_session_from_db() + return self.decode(s.session_data) if s else {} + + def exists(self, session_key): + return self.model.objects.filter(session_key=session_key).exists() + + def create(self): + while True: + self._session_key = self._get_new_session_key() + try: + # Save immediately to ensure we have a unique entry in the + # database. + self.save(must_create=True) + except CreateError: + # Key wasn't unique. Try again. + continue + self.modified = True + return + + def create_model_instance(self, data): + """ + Return a new instance of the session model object, which represents the + current session state. Intended to be used for saving the session data + to the database. + """ + return self.model( + session_key=self._get_or_create_session_key(), + session_data=self.encode(data), + expire_date=self.get_expiry_date(), + ) + + def save(self, must_create=False): + """ + Save the current session data to the database. If 'must_create' is + True, raise a database error if the saving operation doesn't create a + new entry (as opposed to possibly updating an existing entry). + """ + if self.session_key is None: + return self.create() + data = self._get_session(no_load=must_create) + obj = self.create_model_instance(data) + using = router.db_for_write(self.model, instance=obj) + try: + with transaction.atomic(using=using): + obj.save( + force_insert=must_create, force_update=not must_create, using=using + ) + except IntegrityError: + if must_create: + raise CreateError + raise + except DatabaseError: + if not must_create: + raise UpdateError + raise + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + try: + self.model.objects.get(session_key=session_key).delete() + except self.model.DoesNotExist: + pass + + @classmethod + def clear_expired(cls): + cls.get_model_class().objects.filter(expire_date__lt=timezone.now()).delete() diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/file.py b/venv/Lib/site-packages/django/contrib/sessions/backends/file.py new file mode 100644 index 000000000..947388333 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/file.py @@ -0,0 +1,211 @@ +import datetime +import logging +import os +import shutil +import tempfile + +from django.conf import settings +from django.contrib.sessions.backends.base import ( + VALID_KEY_CHARS, + CreateError, + SessionBase, + UpdateError, +) +from django.contrib.sessions.exceptions import InvalidSessionKey +from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation +from django.utils import timezone + + +class SessionStore(SessionBase): + """ + Implement a file based session store. + """ + + def __init__(self, session_key=None): + self.storage_path = self._get_storage_path() + self.file_prefix = settings.SESSION_COOKIE_NAME + super().__init__(session_key) + + @classmethod + def _get_storage_path(cls): + try: + return cls._storage_path + except AttributeError: + storage_path = ( + getattr(settings, "SESSION_FILE_PATH", None) or tempfile.gettempdir() + ) + # Make sure the storage path is valid. + if not os.path.isdir(storage_path): + raise ImproperlyConfigured( + "The session storage path %r doesn't exist. Please set your" + " SESSION_FILE_PATH setting to an existing directory in which" + " Django can store session data." % storage_path + ) + + cls._storage_path = storage_path + return storage_path + + def _key_to_file(self, session_key=None): + """ + Get the file associated with this session key. + """ + if session_key is None: + session_key = self._get_or_create_session_key() + + # Make sure we're not vulnerable to directory traversal. Session keys + # should always be md5s, so they should never contain directory + # components. + if not set(session_key).issubset(VALID_KEY_CHARS): + raise InvalidSessionKey("Invalid characters in session key") + + return os.path.join(self.storage_path, self.file_prefix + session_key) + + def _last_modification(self): + """ + Return the modification time of the file storing the session's content. + """ + modification = os.stat(self._key_to_file()).st_mtime + tz = timezone.utc if settings.USE_TZ else None + return datetime.datetime.fromtimestamp(modification, tz=tz) + + def _expiry_date(self, session_data): + """ + Return the expiry time of the file storing the session's content. + """ + return session_data.get("_session_expiry") or ( + self._last_modification() + + datetime.timedelta(seconds=self.get_session_cookie_age()) + ) + + def load(self): + session_data = {} + try: + with open(self._key_to_file(), encoding="ascii") as session_file: + file_data = session_file.read() + # Don't fail if there is no data in the session file. + # We may have opened the empty placeholder file. + if file_data: + try: + session_data = self.decode(file_data) + except (EOFError, SuspiciousOperation) as e: + if isinstance(e, SuspiciousOperation): + logger = logging.getLogger( + "django.security.%s" % e.__class__.__name__ + ) + logger.warning(str(e)) + self.create() + + # Remove expired sessions. + expiry_age = self.get_expiry_age(expiry=self._expiry_date(session_data)) + if expiry_age <= 0: + session_data = {} + self.delete() + self.create() + except (OSError, SuspiciousOperation): + self._session_key = None + return session_data + + def create(self): + while True: + self._session_key = self._get_new_session_key() + try: + self.save(must_create=True) + except CreateError: + continue + self.modified = True + return + + def save(self, must_create=False): + if self.session_key is None: + return self.create() + # Get the session data now, before we start messing + # with the file it is stored within. + session_data = self._get_session(no_load=must_create) + + session_file_name = self._key_to_file() + + try: + # Make sure the file exists. If it does not already exist, an + # empty placeholder file is created. + flags = os.O_WRONLY | getattr(os, "O_BINARY", 0) + if must_create: + flags |= os.O_EXCL | os.O_CREAT + fd = os.open(session_file_name, flags) + os.close(fd) + except FileNotFoundError: + if not must_create: + raise UpdateError + except FileExistsError: + if must_create: + raise CreateError + + # Write the session file without interfering with other threads + # or processes. By writing to an atomically generated temporary + # file and then using the atomic os.rename() to make the complete + # file visible, we avoid having to lock the session file, while + # still maintaining its integrity. + # + # Note: Locking the session file was explored, but rejected in part + # because in order to be atomic and cross-platform, it required a + # long-lived lock file for each session, doubling the number of + # files in the session storage directory at any given time. This + # rename solution is cleaner and avoids any additional overhead + # when reading the session data, which is the more common case + # unless SESSION_SAVE_EVERY_REQUEST = True. + # + # See ticket #8616. + dir, prefix = os.path.split(session_file_name) + + try: + output_file_fd, output_file_name = tempfile.mkstemp( + dir=dir, prefix=prefix + "_out_" + ) + renamed = False + try: + try: + os.write(output_file_fd, self.encode(session_data).encode()) + finally: + os.close(output_file_fd) + + # This will atomically rename the file (os.rename) if the OS + # supports it. Otherwise this will result in a shutil.copy2 + # and os.unlink (for example on Windows). See #9084. + shutil.move(output_file_name, session_file_name) + renamed = True + finally: + if not renamed: + os.unlink(output_file_name) + except (EOFError, OSError): + pass + + def exists(self, session_key): + return os.path.exists(self._key_to_file(session_key)) + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + try: + os.unlink(self._key_to_file(session_key)) + except OSError: + pass + + def clean(self): + pass + + @classmethod + def clear_expired(cls): + storage_path = cls._get_storage_path() + file_prefix = settings.SESSION_COOKIE_NAME + + for session_file in os.listdir(storage_path): + if not session_file.startswith(file_prefix): + continue + session_key = session_file[len(file_prefix) :] + session = cls(session_key) + # When an expired session is loaded, its file is removed, and a + # new file is immediately created. Prevent this by disabling + # the create() method. + session.create = lambda: None + session.load() diff --git a/venv/Lib/site-packages/django/contrib/sessions/backends/signed_cookies.py b/venv/Lib/site-packages/django/contrib/sessions/backends/signed_cookies.py new file mode 100644 index 000000000..dc41c6f12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/backends/signed_cookies.py @@ -0,0 +1,81 @@ +from django.contrib.sessions.backends.base import SessionBase +from django.core import signing + + +class SessionStore(SessionBase): + def load(self): + """ + Load the data from the key itself instead of fetching from some + external data store. Opposite of _get_session_key(), raise BadSignature + if signature fails. + """ + try: + return signing.loads( + self.session_key, + serializer=self.serializer, + # This doesn't handle non-default expiry dates, see #19201 + max_age=self.get_session_cookie_age(), + salt="django.contrib.sessions.backends.signed_cookies", + ) + except Exception: + # BadSignature, ValueError, or unpickling exceptions. If any of + # these happen, reset the session. + self.create() + return {} + + def create(self): + """ + To create a new key, set the modified flag so that the cookie is set + on the client for the current request. + """ + self.modified = True + + def save(self, must_create=False): + """ + To save, get the session key as a securely signed string and then set + the modified flag so that the cookie is set on the client for the + current request. + """ + self._session_key = self._get_session_key() + self.modified = True + + def exists(self, session_key=None): + """ + This method makes sense when you're talking to a shared resource, but + it doesn't matter when you're storing the information in the client's + cookie. + """ + return False + + def delete(self, session_key=None): + """ + To delete, clear the session key and the underlying data structure + and set the modified flag so that the cookie is set on the client for + the current request. + """ + self._session_key = "" + self._session_cache = {} + self.modified = True + + def cycle_key(self): + """ + Keep the same data but with a new key. Call save() and it will + automatically save a cookie with a new key at the end of the request. + """ + self.save() + + def _get_session_key(self): + """ + Instead of generating a random string, generate a secure url-safe + base64-encoded string of data as our session key. + """ + return signing.dumps( + self._session, + compress=True, + salt="django.contrib.sessions.backends.signed_cookies", + serializer=self.serializer, + ) + + @classmethod + def clear_expired(cls): + pass diff --git a/venv/Lib/site-packages/django/contrib/sessions/base_session.py b/venv/Lib/site-packages/django/contrib/sessions/base_session.py new file mode 100644 index 000000000..603d2fe12 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/base_session.py @@ -0,0 +1,47 @@ +""" +This module allows importing AbstractBaseSession even +when django.contrib.sessions is not in INSTALLED_APPS. +""" +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class BaseSessionManager(models.Manager): + def encode(self, session_dict): + """ + Return the given session dictionary serialized and encoded as a string. + """ + session_store_class = self.model.get_session_store_class() + return session_store_class().encode(session_dict) + + def save(self, session_key, session_dict, expire_date): + s = self.model(session_key, self.encode(session_dict), expire_date) + if session_dict: + s.save() + else: + s.delete() # Clear sessions with no data. + return s + + +class AbstractBaseSession(models.Model): + session_key = models.CharField(_("session key"), max_length=40, primary_key=True) + session_data = models.TextField(_("session data")) + expire_date = models.DateTimeField(_("expire date"), db_index=True) + + objects = BaseSessionManager() + + class Meta: + abstract = True + verbose_name = _("session") + verbose_name_plural = _("sessions") + + def __str__(self): + return self.session_key + + @classmethod + def get_session_store_class(cls): + raise NotImplementedError + + def get_decoded(self): + session_store_class = self.get_session_store_class() + return session_store_class().decode(self.session_data) diff --git a/venv/Lib/site-packages/django/contrib/sessions/exceptions.py b/venv/Lib/site-packages/django/contrib/sessions/exceptions.py new file mode 100644 index 000000000..8a4853c50 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/exceptions.py @@ -0,0 +1,19 @@ +from django.core.exceptions import BadRequest, SuspiciousOperation + + +class InvalidSessionKey(SuspiciousOperation): + """Invalid characters in session key""" + + pass + + +class SuspiciousSession(SuspiciousOperation): + """The session may be tampered with""" + + pass + + +class SessionInterrupted(BadRequest): + """The session was interrupted.""" + + pass diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..25d7ab6f0283f8f93e7123ac29f841ec7734cdbc GIT binary patch literal 717 zcmYLGJ#Q2-5H%1!v_L~mVY)=fyX%N3hcAbKkdq>D;uIFB&F$=F6Q8}Zy>}OW0}TZd z`~W(7phcpkq@>{o&{8tK-OG*i^ycHuc&zz-YvVmZyNbAt$Pm{NZxO-1BCa96AwvE; zB4~diZXkXkLjDgT=>8%;Tp;8ha?riI*w#NHU%~hja)kUD`6lugY3jBQJQ13B2` zmI#)X7WyxBK6wt#RYp4ki@LHvbLoM&Ho4-El;^=IoUMFE#@3v`#IwVky#yO337Vfs zU7F|!YGXYcxw6XH*q0`pT%HpnHX_AP4o(cSVSeE#o)x0ru#! zktMJUjqUyCG}&*$;7ttwyY(=BP(ZTxvJWiv1 zqdjQc>#W8PdRX|RRNg%u01>_AUUUg=WM-s{SrFDj@kqOoeM zRBUMM)CsEVW#|UmecHN%O-=6%DBtQw?Onl<8Q7Urc)(`bUah+>tZxcVLE}Mnbw~aK DgrULw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po new file mode 100644 index 000000000..09560cf90 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# F Wolff , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-01-04 18:57+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessies" + +msgid "session key" +msgstr "sessiesleutel" + +msgid "session data" +msgstr "sessiedata" + +msgid "expire date" +msgstr "vervaldatum" + +msgid "session" +msgstr "sessie" + +msgid "sessions" +msgstr "sessies" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..027a0655684ccb109a11c71d4c615475ce9d699d GIT binary patch literal 846 zcmY*VJ#Q015M3ZZbkIP95ER=Gfuglg;3eSV z6EF&V23-FO;Jjafv%ojN^?w4+_XqfOjF7)z5BPDMkW1j-V5g6sAmk$W9QXow9PE4x zV2t&5kAPjAEQnyVAE)qzt%!Tlm^f92$Zk85mxX*nbMz$^=#ct=&S7m;U@fzjR!K6R#BfJ%1EQ_>ICJ{E(0lg!XiValm zlK<0Xq0862)#cU2;p2J9_ZCuRrNX6l+jyOoU0ZG^B384szA3bkHoPA#v6-RIoz;|@ zEvkCjh*c|~GaIozxMe_v_STXeEfThr>TMHH)$W%joSvmc8mch#>2>N;sA0&F@*=Gu zt+@0Ge(QWVLC405d@kf}Vq&Oqen_m, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sessions" +msgstr "جلسات" + +msgid "session key" +msgstr "مفتاح الجلسة" + +msgid "session data" +msgstr "بيانات الجلسة" + +msgid "expire date" +msgstr "تاريخ الانتهاء" + +msgid "session" +msgstr "جلسة" + +msgid "sessions" +msgstr "جلسات" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f553201f7ee664c2c92d11b95411e4eb94cb7a9 GIT binary patch literal 817 zcmY*UyKWOf6dfQuv>*x^grJxPD-jy+BMFMv*+3wP6bTE<7z!FR@s8IM*0ZabF?LEM z9ulJE1E@?aKteRoB041K&~8IRNkKzF$sI3_lPjG)ckVg&u|Lktyg(4g0T%#Gz)8S! zfQb))6M&BZQ~v}o-midDfbRfP{|PX@-+(WN5c&&j0X`o_=sfT@V59#6J_q~<_$=`0 zBZaR73~l4tGr%T}7KFe$j$`lzTM@UIQalj~u|diu!y(lSsiHVxQ>1&3`)p^DD^!=s zHfw3J8In6pnn^wmx2cE{tHIJlYEn}X56QJ&q)0RIu~olG8tef#R@CiQP#xw^vQhpNiZ3U&U6j27 YgHfQPuoVM#QT{l8I3DrlV13_)f7A;8LjV8( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ff47edec --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-12-14 22:50+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sessions" +msgstr "جلسات" + +msgid "session key" +msgstr "مفتاح الجلسة" + +msgid "session data" +msgstr "بيانات الجلسة" + +msgid "expire date" +msgstr "تاريخ الانتهاء" + +msgid "session" +msgstr "جلسة" + +msgid "sessions" +msgstr "جلسات" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b363bffb415392337f08f9179feaeeec5a8fcac GIT binary patch literal 702 zcmYL`&u$Yj5XKiMf3$D_&K!nYtIFARP?gpp2q>*ol!&NWxSQR{*6qe#*-n#4ya7kV zfg=(JIHMjp^~M8mgjZplO`4H@`aI)rJhuGz;l}5P;ui6U=o5E|4@8LXM96;-w}}hl z9`TC^_20xD;t%oVS`_^weL&2wH~x>L_bLCh)NiE0e?dz2#oQaDA#OGjZ7eki*_yyv ztt>(zJw^_lQ%0{e6y;TNhV#|hMMG;&G574KVDHd|CIQ8%)TN1!u{PGTfh$$PUQSBK zG9w@!zRB3WMd``QUePoG?Ue7Zlr!D|&PCeUPI;P=ksaf?3TLi;9hUB~_7mWHVux?1 z6mefV&oV2utE4wpz-y_sa?nRrUvR+g~*rBmwCqUPW)b-k3 zXqLTA4Uc=kx4Ll@{tOC)To#jD6_;Pbr>V=II_wx1wpN9_lIQgE>q6Kt8eQ}saD2gK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 000000000..57d8681cf --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "data de caducidá" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b488a330382682101749d397ea0dee7acf255a4 GIT binary patch literal 731 zcmYLGyKWRQ6g3bY8la(|qHwxIk#}YmP!=zXfUuDwv0@bldS}O(IGOQ`Y)^Kx-#|fw zP`)4)MLK9<8yX4@C)$zAHe(m0v|6C@^4p&U52ld`wc_(`0m zheBs%uq&(5IM%b7O4;)|vn(k&4f?MVwq>Mn@Uj=!jnifnKV(tN;!PUIJlfod;wXZV z?aE{2XD)p$7Cm51`0n%g(ME&_UJC12VuZH2aHZk2TPRI?P}NwZf&bRwFBoW9)`o=u;KhjwJ)b#;p|ci%I70OF%H**-cGN( zynft>f~`_Jsd2263ioqz, 2011 +# Emin Mastizada , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-04-27 13:19+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Seanslar" + +msgid "session key" +msgstr "seans açarı" + +msgid "session data" +msgstr "seansın məlumatları" + +msgid "expire date" +msgstr "bitmə tarixi" + +msgid "session" +msgstr "seans" + +msgid "sessions" +msgstr "seanslar" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..100a1578db3090147d533675f863badf464a4779 GIT binary patch literal 854 zcmY*Uzi-n(7(Jl;km-bkSU@@ksz&G%JEYJ!xfB&zse*{8gznem>R#j6*4?E^r4CRA zmKG+m^B*821QfdP2OxW4WZ@5BVL)Pl@9ZW~Kk4~>-@Es|JO8*e^%_B)2V4a-0T%)L z08<|U7XY6CM*j*h-fw_uz;}Sre*%o}7vS$Hg#G|qfZwMx-#=h8PoF{P8t@h1%fNHM zMt=Ydv2^zou&J{dA&91R4!&T^>M>VJgn>eQ5DCd~n`w?zCXU#MY&>-M&Zt+YA;T@+ z(qyGg*0?mAT-@Gbffrh)dRS?qa=G(#6#jYnjaZwq53_u(=Z7j5SbvCG6M zW9PP8vTxc@)UJO!)a$*sVb*@OsSS zq{&&=#f#i$vZn+K@a(46ky|MA`~AE&Tg3(+m{1{m?uh*34TW`H$XWH3`qJdboV;z_ z3j@sqc-c+_PuF~)3z5%6P{FNDCKcE8NpqRZPkiRC4KB%2&fo6fY+Cy|bsW5aZ47ppYqU5zs?w5a(}Z1h zig, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Viktar Palstsiuk \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sessions" +msgstr "Сесіі" + +msgid "session key" +msgstr "ключ сэансу" + +msgid "session data" +msgstr "зьвесткі сэансу" + +msgid "expire date" +msgstr "тэрмін" + +msgid "session" +msgstr "сэсія" + +msgid "sessions" +msgstr "сэсіі" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68e4b05f05447a90ff0f1b89d5f342a42a0b36ca GIT binary patch literal 759 zcmZ8cJ#Q015M3aA=%AuTXz3E6_4zD_qBBM)kVuiRu!5mqpEs8?=e^VJ8arj&q(M;e z11RV%l!${U6#M|#Yba@Gk!UG->yJcYq_=P8&FtIRpVyb(62xWT2G9ns0I3-g>j6!8E zJ?7f5w&GH!++-@GTuFiXh~8Ud58^&g(n^%|?_*rX10D<37Q7$Q^+6hQm2gRyca6zI z-yaT#731uZ9Wiou{MnuhO6LZCC-zso=2mm#>_OIV)5fUry<=EMXk@54CC$dhX zU9Pk+jc4smwstn>-r5n0ZOAC=CNd7`S|>55i-xold#!Y!c*-_2)z=}F`LxuHTAj|) z#, 2022 +# Jannis Leidel , 2011 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2022-01-14 11:56+0000\n" +"Last-Translator: arneatec \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Сесии" + +msgid "session key" +msgstr "ключ на сесията" + +msgid "session data" +msgstr "данни от сесията" + +msgid "expire date" +msgstr "дата на изтичане на валидност" + +msgid "session" +msgstr "сесия" + +msgid "sessions" +msgstr "сесии" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c029c760cf6b1db183901dfcf4f343cc26a441bc GIT binary patch literal 762 zcmZ9HPjAyO7{&vPKMI`S0ul#v+cddJCZL;35!%?Kp;lB=;O;hV<}I}&+g&?}6Bj`})kD2XzU!4YYu(zze|DA>jNw z;4<(LxCVR$-1-mT3h)cqKj(RWKm%ase3i4Hx4?e@y#e|Y^d{(EP>7f3UI2ArI@H&q^D+^?N0u+*HLnd^$cE5@N=eI6G6!q6{++$ST2>p zZJqK2FAr0VV@Z(Tc^cyt#i)TSehjA(v=B!3a2VmJj-rT!_4zOgLkQvxw!_`bX|9gL zB^)iG=svj{&WBKbi)w>oMTO3&k&2)vR0yt7i}8eI=mFdY?4zu-H7@${A@qoJNK=Mm zMh65fGm+AaquEVkauNii(WqwJMBZoPT2Bsw>P-{LPTGU62cMms4M(VHdHjj zYf=p~K_V}$ZZ0%X_1l~k=uQ(wa}D1s?EB*2RdMjTu-^)6QDKjrx1Y-I5%{;|&QW2% l7j_@=pUa)&!XBP6kbF}n-K76__MrRBnj7Ozep%Qr-ajV+|5^Y5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 000000000..aa4a33533 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "সেশন কি" + +msgid "session data" +msgstr "সেশন ডাটা" + +msgid "expire date" +msgstr "মেয়াদ শেষের তারিখ" + +msgid "session" +msgstr "সেশন" + +msgid "sessions" +msgstr "সেশনসমূহ" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..777a187fdb2a7fe55a33e4d758951b66e9131c5d GIT binary patch literal 1027 zcmZ8gO>Yx16kMQuEl5a+BZtSKrBUU?P8y|gyAA4>REd_T1nzFuNw(eCE3ex$Reu6k zehc)11f1c7IC9~{i7VWA-X#g_lP2SNZ#-*T%D4M-uRW}rh=+&{;tt{!!qr>EEyN|l z^*Vz`F8o(H*jU~z` zMI$+or;*E?`Bn&{gf*dBvpH zj}WGgIjAI)X;5EJe*s(D5s2!NGfVF5Bp;SuUW zqfyXJ)GeUErwP?!LZQ(p=qBnGuvtP4E-t{GCkU2j%jUnaYk;TCT)3dH4y-V4{2k}h zMq%3gZ`#CZ3##q_?#9$TfP#6K?8?0gb&eWvST3#l-j;~Fj|ckWr5DQRJQ5-FBISiy b*E3p#QYoB*Q1~BkRxkS<$@7WM+b-b`F&YA6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po new file mode 100644 index 000000000..a6c8c04ee --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +# Irriep Nala Novram , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-10-19 23:05+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Sessions" +msgstr "Dalc'hoù" + +msgid "session key" +msgstr "alc'hwez dalc'h" + +msgid "session data" +msgstr "roadennoù an dalc'h" + +msgid "expire date" +msgstr "deiziad fin" + +msgid "session" +msgstr "dalc'h" + +msgid "sessions" +msgstr "dalc'hoù" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f167bc89eb7d449a1bc8f0abae923361c2476a6a GIT binary patch literal 759 zcmYLH%We}f6dj;EG{A;6i_3zlQRR#sO4B--f?8UsC=pQ=*gF|#>SSV%#tuoP`~pk< z0X~2w5(`#H-Bm0B@dbPW*O{cb($Tr+`W!zr^Xt*Z#{laN;xVFyxR014e0@TA{TXo= z@dfb!@fG3cKM?m2KM{X!1i^1)zy9rJx#uPFL)2GG{=1z2Lq_}J+*`=LZkH5nEZGy< z%968O6%rERWMHMW%IFpQp|}V)nSwhwHV z@6c_E6}E(Rq+1AWGvQ3Z;kD3OS!hX>$PAiz8$F_&g_P zF3K~ZbOZY5qOj7%Z@VXCZ|(DE4P-%%b>AdPryTZr%3WWRL(hhtY*L7foS0&4Ip};L zZTzeOWgBnlr;NrigUwCwEqxL*1}}gD+EE|GwbfEH-tp}sL7R-id|pP-Lo1kJn5k77 mVSt~0G6rRx94&qUH55T^646(He~B8(V3Z9f-#@I>a`+!<&&jy} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ba36a98b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ključ sesije" + +msgid "session data" +msgstr "podaci sesije" + +msgid "expire date" +msgstr "datum isteka" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesije" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..480400c085a31281977f688792af162351bf3d45 GIT binary patch literal 738 zcmZ8fJ#Q2-5H%1!w9pV*3a3jH`F1w~F7f3M;z*>RoH&Jr-mK>~PWJ4T?d2~20f`F4 zZ=i$*T97Cyk!Wc60ko8ickgl%BfWhy<2PfEW`C`&ydh{;5w{T;;yU6LBG@OyHN@Wg#4YyuP+jE6a9C{q3%8ME#wc#tH|GwL)}kgENe6? z$iXhRMDVDwEBL)M_sLUmP8sb8%qnGpO5uUHHo4%C6z9PyoGpAuM%J7_?%9E4&%uUH zoXQiS3lkkdWvpjIS18FI)`er4;WQdO$=JYx@Tg^v@HS4jlJqW1QkHgUn)0N(nWRaA zLUsf%Rp`0Yby>2*(jA)K<9CwH1T8ug&a=!4?MmT|<@B-8S~+?MNp5=N!-q~Ak;SHaW3MGXm~K( zTTY*Ll4xMG2aT^ft8hFIGapx_P`XF+V__Zm{S6~1gw{JuDtN=>b`y?Qb=&& Us1&r>H|FwE)c>XCzk(zG06Lw@H2?qr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..cd7ea3ffb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carles Barrobés , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "clau de la sessió" + +msgid "session data" +msgstr "dades de la sessió" + +msgid "expire date" +msgstr "data de caducitat" + +msgid "session" +msgstr "sessió" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..80a9b27ad33d664b394e89aab6f50a0d0c386fdd GIT binary patch literal 759 zcmZWmv2N5r5M4-s$RG-8ilHD%g!XJ7Cz9;N0TB`@C?`(A&@c9$Zxi3H<=x{h`35NY zjC2$rs0bYr4H6|n;serBGHahN1tUGbnYZ(H$C_Wa7T*z!Ylz#37;zo(2I1lZVhQmP z;q)&E*ZUoD1Mw5#^gjsKcaHdUiIBg@uJ8S2LT(~|Mt1c#Was-a(|^zOb7ZttJ&VXL zuGB>EsEVujU6|$MxiCg*Wr&y-vJ{YVD~PGZhMmag#gRB}azpy1J`{N_P{3 z^pLAedk3P>rKLTS$&@}GXNJa_f!BXV55#NfTImyfj6pjH*J!Xo!wm=@uugC}TEED-R9#4h zyfnf_FXCOge$nUN8i, 2011 +# Vláďa Macek , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "Sezení" + +msgid "session key" +msgstr "klíč sezení" + +msgid "session data" +msgstr "data sezení" + +msgid "expire date" +msgstr "datum expirace" + +msgid "session" +msgstr "sezení" + +msgid "sessions" +msgstr "sezení" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4bee0c0d7d63b513d3a2120e61e3221985011cc GIT binary patch literal 774 zcmYLHJ#W-N5M3aA$RG-8ilK=TMSHd{iSDw80TB`ui4&(_pkBOtJ_q00+Fj%Gf1u^R zKnop0lr%^b&_hdu#H`Pk8|mr28NZqR@cy{9@s40zMchWji0g>A2p8`W*AO2NuKp3> zyk8MF5Z@54{tMxJe-NK95c0RnKV2l`Ch9N9SCGFWJO9tF{u|l#{X@pKcJ>Cci_1$Q z_^A!of2q^tnKULVlp%6aW?F*aRuZ!;uGkg%dGcB|D{aU`7iTiD^hD4XQoBhE#2Hs< z;hoB|(3Xx(nhE-_N)3$*2HxapOb@l>7QOTluEwArg!?oIX*hr|WWiu32!jBP^i;md z+|0FaK!XF?--U3<_V;!I4DSgymd2VZlXF{W24k+JsDuDs!sEJ8f=}V@yemFfiC$97 z?_sk_E1pUkOFn1tQs!m`TQh4*=KFPB_pBS7P36M*{pHbCly}X3()ion_+)&vzJ#zB zc!!0uQsL&B5>IL6!un;-Gc|%_#*JT*k>_4Q l)+k;P(Fl=ofg9G-M!A2T)rz<`0G;M}UQ4{-E_Kv){s&)c&>a8( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..efd21c20f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "Sesiynau" + +msgid "session key" +msgstr "allwedd sesiwn" + +msgid "session data" +msgstr "data sesiwn" + +msgid "expire date" +msgstr "dyddiad terfyn" + +msgid "session" +msgstr "sesiwn" + +msgid "sessions" +msgstr "sesiynau" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489874b44d00031f972335780f859e63e6f1c35e GIT binary patch literal 681 zcmYL`zi$&U6vq!JzYfH}%;0XVkaKqxg7!ix1Z}0FMnvUccXKZnw~l?X9g>QXm4Sts zes&8=(&xT@&+pmK_kKTI`x?P+gGZnM_rPZmYys|o?;yl~fROtW z+y}ovi2ng0?=Mi-qUay=E}-kpzJZ3ikI+!}3Hku~1sd|cK~c8MS%U_<*+_(~rQO2! z#^pMCOU_B7T}1O*T4JT}6uBnYY6yyzb4KUw+C>9vPHE`*VaeZ<4JYNSJQcb!@iEoL zdfs=HEcwf6<#=Io77yO=WBMRND&NCpIonFJXFT2E*$&H|=1K6`#MjO*=*MF;XpZ} zd1q)QNz-X7>asd1MY0+95BvL9Z^}Ap{K{xg8cm(o=-SiVC$$n%ciC_(tRvrhR~+!| ztGsa6h%DdNLsLp!Jk|VL5%VsMKnpsQeGN__`JV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..8d1689c65 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioner" + +msgid "session key" +msgstr "sessionsnøgle" + +msgid "session data" +msgstr "sessionsdata" + +msgid "expire date" +msgstr "udløbsdato" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessioner" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3af914671844a74f6c5668a49072bcd094068635 GIT binary patch literal 721 zcmYL`J&zMH5QYsLUkfzU6sEh=$=P+_l;9AAxDOO`5z*a3Z?cm;-|gBf+e>o%21Iw_ z7f{lJ=xFFDDQWltw3LjKY%2ZQWj_?JrK8OHX538Rh+?jlRGl9<`l-B4Knr`Y*{RO9 zL`P5=>)FudDr3*;+_BUM8jW72Y}bPH=w*BOH9^}6-(d-7yhAw`NoPCZNrFap1aDPX zbM5P}pu8(~9&RTX(V=vnrB-TJNN=p5FQnGW(L+!f6!bCf2Fs_#ylg2wF;8$t z=e5j%r65Z|pMx!>rkf|;S0aw5(`n0x1=R#*t+6TN#gQ5*meX+t@m4e(4ENWE=dC2# zHQIy5O`TVGIuA1+SA|r%N5?19I`I8h=>hAmec@XZuxwwCO{R1%X!nist6kzRg=kdN zRu=5Q*wP8At9j}A?H*mE{Y_2p_bK1%Me9q&JDJF$aCm`rNsg6&SL?jd&;`A!*kG^8 GvHKs7qr)Kp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..a3153e66d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "Sitzungs-ID" + +msgid "session data" +msgstr "Sitzungsdaten" + +msgid "expire date" +msgstr "Verfallsdatum" + +msgid "session" +msgstr "Sitzung" + +msgid "sessions" +msgstr "Sitzungen" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb8a5e8013d76b0711ed5d3e93e0b2a68928b74b GIT binary patch literal 810 zcmY*Xzi$&U6gE(P9SjIokh~zZs+{wsMJX2oh|)@x8WFVtW+(S@b#k#!wvQyJBO@z+ z2@5cSIw3JIz{bMD#)QPk^IemOCw=$%eed)0ulsR*N>7d%qyABEBKK{uAMSzY$;05b_t<>z~gOat--AviJW&zJdJblrNvF^jpX{t?a#m z?Bjez1g&LUz%SaWI0S2@R+hjtmj-Ae91vTHbM~TGBqNy3$Ch-A9zx%-y@Wjj<2%JP z848u^-~e)M9BbQDChSp>TGrJu4LVP{Y}kE%h;uZu z19%~Q&!w-y_+3`tpq$6NzRod%ePJEz8lh|^oHj9S%l?soj6T=dfZiL+tjP64t4;5v z%ra3+;6Bb#X(3WzT@d4#?&}E{dWaS&6kR=XE|0@-GMUtz?<)r|t@ZUdtWGwk?6gUk z*j~66wD;OO%S(uAJlNLCfx^wray+GjsSEQ=NY$jcL1V$So_2TH*3#z}8-QUus;?8N z(wJ`bq+9G3uh#a0PF5I^v0ZJ(Hl`{sQ`_2X(rVaRRk!i}TCIpapq!$mO6!, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Póseźenja" + +msgid "session key" +msgstr "pósejźeński kluc" + +msgid "session data" +msgstr "pósejźeńske daty" + +msgid "expire date" +msgstr "datum spadnjenja" + +msgid "session" +msgstr "pósejźenje" + +msgid "sessions" +msgstr "pósejźenja" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a8ef4cae0b3205f342ab3ed5c647e81e19a2a447 GIT binary patch literal 809 zcmZvXzi$&U6vqveA37LN2PPzpSXx!i-36+I3qgp|qDn+WCDo!GDvl%NAiU2#+yCGSSjB45QeleK8GUq`!cc{`Nl$5KKY9Rw${kqM?w-@+Y zM!8VAl*W|Px==Ub22IjjO*F1U6OWrTW+Y^^5#ZaBu{xev(>e=Wx7BLpv>lkNvbOcR zqc4pm-D`GP>drcq<;vpZ^M1~A76jLf!=pAb_?>2L?Pe)WcnR0ms8mds?}tmIIPuxL zR+%J=ye6WA#{n)rO!WRE1I$vVnl>d($&!!_6=0qXkE)z6;nB7{!|}y3_Ge2DGTVcv z=7Z^(ox!H*nBL$qGJW$NHk;-XXdj9l)5YeUd2K$LKGX+K4zzTU*|GgY`zx?_@nMG@ T`W7bi%r5vk|EnKrvG4c?bk!Ek literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..3813c3101 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Pãnoș , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Pãnoș \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Συνεδρίες" + +msgid "session key" +msgstr "κλειδί συνεδρίας" + +msgid "session data" +msgstr "δεδομένα συνεδρίας" + +msgid "expire date" +msgstr "ημερομηνία λήξης" + +msgid "session" +msgstr "συνεδρία" + +msgid "sessions" +msgstr "συνεδρίες" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ce187234 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/sessions/apps.py:8 +msgid "Sessions" +msgstr "" + +#: contrib/sessions/models.py:44 +msgid "session key" +msgstr "" + +#: contrib/sessions/models.py:46 +msgid "session data" +msgstr "" + +#: contrib/sessions/models.py:47 +msgid "expire date" +msgstr "" + +#: contrib/sessions/models.py:52 +msgid "session" +msgstr "" + +#: contrib/sessions/models.py:53 +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fbc756ba37b1b53da575a9d2d1287448baf08f8f GIT binary patch literal 693 zcmbu6v2GJV5QdKs5_C|dPBH0hMeFmKAVupKkq}#ogoPC@v}o~-&zs!so_5!V8>`;}vUOsUNQh^|CE@LccuM>r zeEuilYkv{XiCeeJW zLS;HU#!?%{`Zkj(JD6maC7MGxc*l4UWNW(a^nyr{McUT-l{DQ|Xx0__)TVWkb zj8HZgP8$x1E}$nz67v-HoGxAyqbhDFbg!sGWfPGhOHdRXx+=@19Ybw@Vx1AW6m_VL zohx}1O{dca<&>2poHd5Jh^nQRk}s}`P<`A#iRxkhsNa2fVcckjZ?tl#XvK??-r#WN zqB0j!wP83G#-i(-Bt5qKQ0K>u(6Fu=>Qt(X!|o^P?ziSJpA`=B2`$Td+7y<9D(9i? UwAxU)otlEJ4#f3#_`g5zANh{F5&!@I literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..da9a8d4d2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-04-11 13:15+0000\n" +"Last-Translator: Tom Fifield \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "session key" + +msgid "session data" +msgstr "session data" + +msgid "expire date" +msgstr "expire date" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd83c311b204685c04898de3d1385915b0e267cc GIT binary patch literal 707 zcmbV}&u$Yj5XKiMf3$Go%wf1Cs+_eeAgx0XYDrNc5mA+LMJ7AhxNPi|?T}RB6*zL> z$PEr~%@2B z7V(pa^J3->)%MD{|71ASADOL#<*HbvURRe$W{j~ zEA0?+6)^GWy|!kpv8XPRH+Z&Q`()_sDUJg>%GpbFag&7nRGGr2$5>ex*uWP$XZ!QQ zvyqjM4quGefkPF@%brj-2|HZeXIwDR1|cMGZ*##p8QC$u)$z=Yug&-#6MG;Y$a{R7 zQ>1<60~, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "session key" + +msgid "session data" +msgstr "session data" + +msgid "expire date" +msgstr "expire date" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..258b3703b3f3cda896509332908b1f21d18ce8b2 GIT binary patch literal 727 zcmYL`J#SMn6ow6y4_!bYW(Kphs+@ao1*CNdLX=c0YD82n>?Zdlb$Vl8T{}(sA6OWW zVCWxUV}l6^!3rBA3qOFBk=OY=(yQm3&DeTG8+ zD-^sxpli@CDD?k8!S@$>caE`tVDP;;&)7}yJ$MQH0A2?_f;Ye~VDS9}v2B{Kfgvu= zz_2upu>Zn5XV1wwZH;3zDRo6WSDu)gH5Uv`wJeV5bdfvOsqBEdUhL=MB~@XPRWpn@O4^Fp5Ju z(P8GwR~N~SNOyR8U*1hN6GU{NoEKT8j4PD4mE=#AG1~D1(m56U0d9lxQ86uR+Vt#0 z>@oe3>XXPw4JB{6k}$wqzJBC=DdTuN9@l)Bse3f3b?q>oy=sACJ|HF=Z$$0=c5C(i zw3bA>)_5|w*J+6ddYbsSER;44-aS&4Bj0?H?TPJ`FPzn*O0-PZ=Gycn-+rb2@}iQH zjXK4sQia&F)zC?9%4zAETMa%-o9l+(Y4UWV5#e7ICJpdY=0p`b*Wb, 2014 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Seancoj" + +msgid "session key" +msgstr "seanco-ŝlosilo" + +msgid "session data" +msgstr "seanco-datumo" + +msgid "expire date" +msgstr "senvalidiĝ-dato" + +msgid "session" +msgstr "seanco" + +msgid "sessions" +msgstr "seancoj" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..20e0a1c6e0d00f5dd546395b9dd0911a1df88427 GIT binary patch literal 734 zcmYLH!EO^V5H(OJS~#GdIhb3k%2{s(q;*JzD6Le~h^Sq-oAqSlc4Mz>r%C?-i4%x_ z;MfaXfipKaa^VBGa%8+onvveVnem&kz2o0&EAI)~D&jsON8CZYMMV3IxQ+ONi21LG zsQrPsi};0z`9FxL`-}K+jgWuy_}z6v*3kcm9P2(I-$TBf^LOM}_Y)b*8qErFw3{;` zxYXD!{N9-R`<}S;9@61)u}Y4 zO^%_qF0h_2wPMf4rDwSnH0i(0*`5O#P|Kd=EM`%i1){1aEKhjB^ySV>s8b z=Tg^Ze1~N_GqzJp!$uqEGNN7(T6H08)TBPY@GHHd_Q4e6+D(ono-DyG9ygUV;ZX~_K-v09TS&Juo z)&wwks*4)07hoFFx{}&-Xfc$|L+HNB57_on7xx-~WBaDCN}E#9?Ke7H9aB*7NxvF9 zS+N7_MqW@;H=*xtb?D6Pt{eKGOS6qm5~qs44LlhD?no8TLaK40l~i$d`rD-;I8^K7 S(jrk*@*E$)G7%S=F8={Y*vT&d literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..85241b3e5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a94ca32bcaa3f5e38955049bf806a4525fc72c0 GIT binary patch literal 694 zcmYL`J&zMH5QYsLA6h8T(NYXuBIIlmKm#n4r zrQVRzHX#v-|@_NZ14Qu-TBDKZW8y2jJQpFAfkOGZV}&z82?Vh z+MmQ7;ujI)e~4K3mpHw`*uV8!U1e;S{E9U0yCA(s`kwSI=_k^-?=vZFTh{E5M!UWe zMyaLUpzpP{&yLZ1ZH;HRsI@~-G9dG-;6`ImZWpI`zVSU9IeUV6;75wTK^Hp-P$$w9 zHW_1WUEo7sXvOzuh3AjaEtrJaSLb+SZHc~i_}fjmQ52{^8$(S8bzJy)O!+Q=p}rXkcKP3QA@E5uHE zf{Rvet8{h6jg;$FDf+j22x(nPZTgT;rSljD zud_qmyR3`HP0;ZJlUt=tA)xn8hwZHeEYC_t<&2)g53Q@b08=lQe$eg1${jQeJQzTy x*-zrA=%=A)6Qn~yA>>lca;>C_1JOUe7)Fz_KBh_un^<1TGa4*z12M5|^dBS=y>9>j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..3840a2d73 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de la sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..238fe245c659c47b6b5f1ec06e0acc58fdb6b78a GIT binary patch literal 754 zcmYLHzi$&U6gE(P=wLvd8O)Zba?TeCrF9yFI9jO^QKR-?Medz*aeHT^9&5AOYM3yasst1h@nE z4Dj)<0I&THxCi(F@bTXOuloylcMYL`%k|sq2yKG@9@yu70lp9XZOK1@ecm5nNNY43 zz}{{y2*Flkx8QqY>7!#|t<=gQF{`8zIO9$ry9ln>2l>_FOkAvdi$+GDiqw&VjJy=a zS7JCj~k*KtBWN34lk*9TTNun7JMu!QBjo=Qn>Cqw8g{v@`Ik^-L$OrJd=F> zMAxp+`mB@c@-d{Tyym$eiQpx}#}!x7PH-#Mg)UDdZ{ya)xr&A1bUN)gUtf;J%qNG7 z8?LBWRtklE6(5G}V0bXxTR%tCp+T&b6AF%bQNewkn7ObjxKw?dPPnnc4PGSsWP7di z?Z(28J(cQAs+{5N6X~uF&2ZBz7!|eQ1=-i8v<$1NS=vFjj~DKsrSQW6j@tdePa2+5 qSTq*U6lVgbJgZZg@yyRtUVc;v1`RI, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 22:00+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33f2811643ec54087a93357617f2183fe16a6645 GIT binary patch literal 756 zcmYLHzi$&U6gE(P=wLvFk-=<|BVQ~zle9|2>CZ3pPnaV9rO3dH<3Rg-$4F`d>#2Ga+voA8K=!^ zuOWxHSQEitv$%xc3-g>Df^*7fM_^hh3sedZ#MR=0gD94R*Ko4P9qC(h1i5GXl063- zDsd{0gf2{U0F|+x^<1GOdo(T_%M7Pc|7pf{EC`QY_87Zyx|yVRS(37}P1BSo?TsW& z5;U>{I98$N%GYMeHcPi@dXL{pHWG~JiEy4}R%llWZ!D*8j2sC~@7MgW7ztIjax;2> zR$Yum0W1SC;`Fc*TDc)@^kAxT)1-}|_Z5%h$z;;@`+*w)Gy+6}<6U7Z`LbiwJ? zE9I9<=5*F8>X&0HO15Y0$Z@Kx+0b=2JG4%_4NY%%Y1-^W;coHpz>xu9Q!0VxLXLAK mg(MZ&vkyj^pyGAcKD=k+f>Mf^c=kz?ycEayENWK}mhS(I#nB%C literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 000000000..cb53c8109 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: zodman \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de la sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "período de sesiones" + +msgid "sessions" +msgstr "sesiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..ccd4d0939 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d9fe06982028079ac5362ae262233d245878e80 GIT binary patch literal 737 zcmYL`J8u**5XTLKhZcl@n!W-X|C#Z4?2&)p+xSS(t|Rx69Jz_SN1}a0ZXn;0nE!#q z+F!^m)3N$S7&^WWqUMxEFSW0j+PurA6V|B@udvb3HnkRqdh$Wt)Qe&@HH4dD`#O%o1T4& zXG}4Y1+X0CP|%hS)@W(yWOUq=-h2?8v39~v#mz5_*NWBkrU_#Jsx>EkhDBMtE$ECS+jC9 Sl|~IgtrO$(v!K_ZBL4v^z{|=2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..b7efce9d9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marti Raudsepp , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioonid" + +msgid "session key" +msgstr "sessioonivõti" + +msgid "session data" +msgstr "sessiooni andmed" + +msgid "expire date" +msgstr "kehtivusaja lõpp" + +msgid "session" +msgstr "sessioon" + +msgid "sessions" +msgstr "sessioonid" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1d92fef4d6043a9704c5d5a042ef6a3b5739c769 GIT binary patch literal 728 zcmYL`KW`H;7{(10iVg6030IZC>&gIW5{q)$+J+J?qf8XAEPq4O;J4lM$K;9yuz983;uSoE} zBO&_(xrzKjg8v5zxxdJVON9JG4Y_xho7_j#YdHUedJFaQQoo^w+)q?&Ta33*LtSlz z;HO1}{wvEdc@EAgqaA^Hr7X})dLXVbR~k&Yo=o9lHFjid%^6HQ8)ob!*szkI*_qV2 ziH@N%*0YhzRmKkL+_BUM8jYW&?9hVrm}O6JH$mGx*=IaqNrxth;GI35aE?KC4CgAW zxyf}Hf56)JXwnt?_xCtf^i(>}QY*D9q&HU3frhD}!=jMZ$`W*@=tBtJW7T-Ai76jp zpU!KU14}`cf*wfsx(2#)>U|~Rcs850d{|VSz&td>&9zoiEW2Z<%jM4q(`i~$%Va6z_Nj!m`v$h(C#bc*QXQ|>S$cl zRu=5Y*wP8AtHspy+dbM0`#YN6?bBqp7lnsaMox(=r2;G0Z-{1iJ`@W&xHX10My?9~ IW|f$d|BpSzxc~qF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..aafbe6255 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesioak" + +msgid "session key" +msgstr "sesioaren giltza" + +msgid "session data" +msgstr "sesioaren datuak" + +msgid "expire date" +msgstr "amaiera data" + +msgid "session" +msgstr "sesioa" + +msgid "sessions" +msgstr "sesioak" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c2fb6622b418c7530d54588a2aa7b3568d5a3941 GIT binary patch literal 755 zcmYL^zi$&U6vqveA3Bf_EG!HjL6viNg(|^m5TdkFQ6r*qu$!E7b$juhY^O;#gsQ?2 zi3y37DIx7 z7vKyq0&M*&V7=dfbHES4){g+|`wKijhR{FI^T4y?2wehw32M*ZP4f}x1<1dHTHg^U zw2fykfZ8}Y5d=r$I0fs8=^owZT8l(##Cxew9EZ$sq$kBfZIR8AUA|xJHEO72hc^w` z2+2dP>?DfA9VVm1+2U!U45{l#gyeQ7(j-VIb{h8rvZ^>U;3aq9Hj0-#f0=kb@ypov zsaIa~e9r?T+2VV`&Yb(o#JfS3u3^7Im#;5+5Y8skh6IX99W#?CitjQhg~pp)ggnM8 z@ES;O#pARjWGlG|Ju>RBh?9V`HpLD5bSCkYZDUgEy4`NKWb8!I;=NKcX}gm@6%tR| z-4=7NI`xhE+Whx^$#Yf{X}E+}?WgcP!+XX}V!dRG*}Ga?ku}*& zLLnoHE02VkJ(J=Va~g3+v6!qUs;w!O={VIjzltZ@npbsDewcmCK4il`kNf%4Y=E+1 vHpt%p>Su3oHpmb2C)p<`yqftCWS{c`SVzDR7yanx>-+%P-p(tPYeK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..276d2de3c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "نشست‌ها" + +msgid "session key" +msgstr "کلید نشست" + +msgid "session data" +msgstr "اطلاعات نشست" + +msgid "expire date" +msgstr "تاریخ انقضاء" + +msgid "session" +msgstr "نشست" + +msgid "sessions" +msgstr "نشست‌ها" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7273f8a2bbbc4e528be924083f45c9b63d48ed6a GIT binary patch literal 721 zcmYLEJ#SMn6g5yj^gtjnGnlPaZnUypdzRcL60~IjKp5tqh?s4&ualu5J3L$xWmkZ7@$WCCcgQYh, 2011 +# Klaus Dahlén , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Istunnot" + +msgid "session key" +msgstr "istunnon avain" + +msgid "session data" +msgstr "istunnon tiedot" + +msgid "expire date" +msgstr "vanhenee" + +msgid "session" +msgstr "istunto" + +msgid "sessions" +msgstr "istunnot" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..753c301b3b65cf229844971c3fea994766080d10 GIT binary patch literal 692 zcmYk3y>8S%5XTn?A2LV?Xep*65!$mIAxL~&6ahIYC?`(gpkKUW-zL6YYj-bqsVHe^ zsd$2j7l4-Zl$10)04*i6zH^R|e*VvlXLiS)Uw79&F|zB#ePTr1Bt8IVcsQW`4Ut;XnjH1xeEy+`_i^fu{d($M#Xl-in_HPT>L z7sBXOW7p_;W$Clm=$tazF`U=RB1qwpxka+okQ5ieF`l-*V?%3>F!y|4^0#QiNg2o^ zp-U4TVr{JF16L}^pG`~0M<#=4_=+Fmi3+9s1zncGW|BVP$u>{7A$^=ZN**R;(SdND zkF3zH65iMhUJ9+1g9B6&D|kwmP`Fz)VMpo0>`;#`r=mnYLNUppZ&BxCSRZ>|XK_56 z%{o3Ds0y5Sax;k+leSVVyW_&f8_{5Yu($fAw39^7jrOQ%sMDIJ_Bi)(T?wVTkdK9R z=zDKQeZIA-3wIT0`JT>=RJzPy>z(o!Q)W=uXjo0HsCeJliOWFOP3U@?U0Aribqza^ pZgiv7s=|&yK4>;3JpIUaA50pp&(F|-L}-_oSLbK{$IHB9{{RZsy=VXc literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..cc4a9e6bd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "clé de session" + +msgid "session data" +msgstr "données de session" + +msgid "expire date" +msgstr "date d'expiration" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e216b332 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b854bdfb4591701fe8fa78be613bafa4d4f45d5 GIT binary patch literal 747 zcmY*WKX21O96g{=Fid4&VYsmsx;Qp16sHDMXr)Mvh)Q6;#uw)r=gzu2H_3NkU_nTH zhpq@1>E4l%0X_gLBk!Ch6+h|uy?ehu{@M3)ZRG<&tOECe9&j6Y2l)5`+yuS?-v18x z+H>Fz@B{GvZ@}060X|+K)U(g>PyCy1S!3-%^o9!6re(3W(KJ{En)+8KK*jGvUy?3k-u z2Zy56#<7mgWyW@^+_IidXwZGd4#kP|rR*hMme9BvJz>p9ERJa$C7W9hnuy?lTgQ5a zD_d}Dz97lcW5bC~mRBj~g{dzT*;HJZT-t(;KUY*u1*C#Ehe3occQ_J`b9 z;nFv~eYSmB=NBCa!}e5PXHw+}-9D0Txnx3f9(0S!@Ph4YGqwp;Wqq{iR*TMMx~|eR zqR(iPBAuo&WaQ<}W2m@RkUr7z%cY5wzkvL5&k4ouGn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..e9e1278e3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-06-22 21:45+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Sessions" +msgstr "Seisiúin" + +msgid "session key" +msgstr "eochair an seisiún" + +msgid "session data" +msgstr "sonraíocht an seisiún" + +msgid "expire date" +msgstr "Data dul as feidhm" + +msgid "session" +msgstr "seisiún" + +msgid "sessions" +msgstr "seisúin" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ef41ac8b9b7a12d9edd66068289ffc33cbef9930 GIT binary patch literal 791 zcmY+By>AmS7{(2huLG6}F)_ST)v7r60Vu6QKq9oL5)n~zu)BB8oy)~O*$zpi{t2w? z{25eYA`&Ab8!U*KwIi=DO)FmMcaQJ!=dQ17CiqWavOD}>;(CbNR- z>*_)XMw+^YPmC>UD6ExQSt4e&Gy-z&1hETqsov!0FYmiS=8Q);wZu( z-52kr?|G4H(`cI}3B+xdY;Q(b!7FYZO$}GJ;!Ya|FDI&3RzhburHTnJ1Wg4W;{+F# z%pSln)6Pj-!g}dk&BAaxowl6sAV*@>%Jeu~++iuzS)Z`T!;PT7*WbCgZQP22o>opM zJjGFs*KuOz!n)#8bs#IbvBGuVq`P$MBIoxS2}5^OrgNzZ23rTxou8LMkq3inVt7S& zwHaFms%~Cw_fZEH!|uB3c4Ig`2Cwl3Jc9@rcsE(PiFf11g{P3f+8QW$f*;)b3HlE^ z0T~Ku1y@{=5w8wPF7pz&g87M50=P8zx0?XT=bs$+Q;s&4R76hjhSL0Rp5?LOKd2Sd AHvj+t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..b291970f6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "Seiseanan" + +msgid "session key" +msgstr "iuchair an t-seisein" + +msgid "session data" +msgstr "dàta an t-seisein" + +msgid "expire date" +msgstr "falbhaidh an ùine air" + +msgid "session" +msgstr "seisean" + +msgid "sessions" +msgstr "seiseanan" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c557365e31f36d5c2e4100d465ae2ba8f8f06766 GIT binary patch literal 701 zcmYL`&2AGh5XToNA6ht|o;eJ+R+Y26fhxfv2vJ&8l!&Mb+|BM}>(;SXw$r2%Prwlg z@c>-l3>-Oe;{iCrt1#Zp$4Ec@J>$RavF7jg*2jqA262xV5VwhUM2Ig$$iEUdi66ur z;wKU6zlmGKAL7%MDEddbP0X)0{`aJJDgUt4&!oZsos{hLyVpoVTyG@WT51roHGzvt zT7*J)j2t>Ajb3Reigj|1m#ejlM%J8R?%8p{-k=SKI230>mnJ^J%2>~au9O9PHY*() z8xHa4)tDVv6rQ~7IlacAoo4$i%~;lfEaPcsFU``FjO+w2WVmzV>#+0@Yd?Uj%l9Ad zr4;c%IM2pbXs3iXmcvV-wRA8*S)hW))D5LiRh_n^o|q?eMwc^DA{(Qaa(E$>%%#w< zbLxG?lVm=hw|ux#PH@r6%`|B~wGy>FpOh-ujfcm>!_D`zRvI4|?NL)(mlgfboddKNZ%Y@4p@&vF^qf-kP9ghdMWf)Fp@RTj|$*awt_iQZp+QJ2H0aIOwWQUBBIf zX4&7-aK8`PZZD3)#GpXPMKQ}|A&Ppa^4B*Vwv3~Z0!_ItP)iqK@aw{I!$toAD{#Q0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..2c7213193 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "chave da sesión" + +msgid "session data" +msgstr "datos da sesión" + +msgid "expire date" +msgstr "data de caducidade" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesións" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1cce90494d9b225b0ee25ba2d153e27834d2e0d2 GIT binary patch literal 809 zcmZ{iKW`H;7{(2hKROUY2gJZ&22i5Pxw{HTdm#u>T2a)9s2uEW&beH<_)cesq~8G{ z{za$^NI)e}J^?VYu`uF|g%1EDBaf4&RfTw^pC7-k9>0Dq`N!S)od|(t9LKQ2Hi^4JsU(w%h(Vqdf<{~mq9(Q4UIEmPeUaVM{1=MNY3E5I1xQ3VA#BBkc_x#Ju^O;|z zz8`qiInVbz7}>gbnAo2CzAEz;nZHQ=E5Rji&OGgD+Rub9HuHlS~dps5_6ucYITVkUSeOl^hod>Sl@AoU(HcZ-LP-$gdck-mE zq`Rlxj&RFPW3{oo|9HRRIZK(;LSm?`9Iw-2pxr#>iLB99hZjod`n_<4E$sX3U2RdY zW!cK2M8*MK*huu=lmYDsr(npT9AaLWk$GvJ znh$1Zw!w&?@C50$c}2~Rc}9^B&3p6ipclT^@H{tf>46?2TH5^+SUo^}KGynhq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..e8bd93468 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "התחברויות" + +msgid "session key" +msgstr "מפתח התחברות (session key)" + +msgid "session data" +msgstr "מידע התחברות (session data)" + +msgid "expire date" +msgstr "תאריך פג תוקף" + +msgid "session" +msgstr "התחברות" + +msgid "sessions" +msgstr "התחברויות" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..34947ca89e2e1e1621fd4521985c290c8aae90c1 GIT binary patch literal 759 zcmZ9HKW`H;7{(7M6dg>R84Oda%DKA=Nb3-UD6J?;L{uH@Cg)sSF80ZGnp9!{7A7{T zE{u)@42T7Z1sIX|0F2;)55ntQ(}=#(PmdqJ&+9+Gmlh5Ks0+Xqpaon4o&mnz0p7m{ z7J<*eW#B8|_kRKxfnUIzGePhN^crB!R=Fck?=7f5{|D$2=wDEXPwzbk>g#+Z!NRe6 zfml^+Tyn)wMhy!z)0#^$Q@=@1%u{wSTkD{sOb2D11b+(yt^oZP^1f|EK*5)#)}<0OtDh|jL3&HXETlw zpa~M?)avG1169lBvOrgxC|PNQfwNzn{pjpBXFs^fYiF&q-%%ybPTb^q6|vLir~eGZ eU>GK0{;2Ao&O_wTO, 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "सत्र कुंजी" + +msgid "session data" +msgstr "सत्र सामग्री" + +msgid "expire date" +msgstr "समाप्ति तिथी" + +msgid "session" +msgstr "सत्र" + +msgid "sessions" +msgstr "सत्रें" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d697c5f6a928f9a67f8d8fe924ef8be46fc2d49c GIT binary patch literal 819 zcmYLHO>Yx15H(N=S`b1AZXAXKRYK*&4u!OvY(a!pszgLo0(X;jH%@lFE8A&OsXu`p z`2qY3xT139$dL=&5aP-SF;2SaNN?ZF_&tBD=KHOc_XOh#;x3|(xQ2L#@bM9G74Zq- z`=1eB`xS8=@eSeoKM-E`2l49yA%D;6pBD+aiTQ72@B4>*19|llA-9q5AbZ~fWVFpS zE66@BFNmOJ9;^68*&<#^YgMi-k+VV>39)dJ*hRBs-xSMYERV|ElAg&&a^UD*Oy5Z3 zcM2gM37zD@zASR%XxAnxrq3pcrTsjFp!c#*J4OnJTKXJM3!%aIBg#1CP2fCa&2`2Z zLm}Olhsy7Hu4_`ZMfn!+$KeKBXBfc?VIA!op=~N$ZbIlP%nqTWvO=0KAH*2i*}PR7 z%v)BBpC*}5X>E{a+vwNHL?n{-rN~0)m>lmWG*pJp6=A(Tola}cZ?6vI%va_ywXD;^d2Rwrk!UZg_l77T{MSm~nI{aw0wuJdOdNJDq@ zAdi(!LfCw(-143w3{B8WCq|@nH#eCLK^ODVMh{!CNF#lpvnb-Qwgx_B_ae^W2{1r4 z*4t5|Txv%fKCR4UZO-8Mcws>etD=Xar_lhwf{7Jf1&Svd|RLy^Z~pqAx0 Q9ZgP8pn{WAEt{772M0^sm;e9( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 000000000..cb0405cd8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "session ključ (key)" + +msgid "session data" +msgstr "session podaci" + +msgid "expire date" +msgstr "ističe na datum" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2dcbe66bea43f6e98598857db560c4e6d582dd2 GIT binary patch literal 805 zcmYjPzi$&U6gE%_IvAiE62n`NT2;>ZlA@Fg0Yqt~N<>8M6=o;rUYuO)lkFo3>Yo53 z{|hi8n2;D4U}IrnV_{(AIY$zn^xfz8z0c3T?)%2tYl3kJaTAdst{`3_e7r$iM!ZFM z{XN2aKO?Rpz9PK-1L1wY5MRy_@(0=LpUx9<4fz|g&wnCcNB)hxfxLd9(r+N+w0Z9} zWFHqRB50k*I)2es#j&tfYGsL-7Saevxf8@z;)1=%m&r)X7Gq1gMh`{b(ZiHJ6~=dp zAsup+>EK8d+Bn*=nM~=!GP5+%F$CQw3EeY-JM_{=xLOQ#7Tu;SqEQo~C}z!V7BPlK zdL*7p-*e?_Qg(;d8^Bo1>e~z>c+9P%iQ&rT+-Va-NA?F?pfn&5tu3&TEToH%iWHPBa-&dZBX|1ovVRf$hX4Qo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..04fd11185 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Posedźenja" + +msgid "session key" +msgstr "posedźenski kluč" + +msgid "session data" +msgstr "posedźenske daty" + +msgid "expire date" +msgstr "datum spadnjenja" + +msgid "session" +msgstr "posedźenje" + +msgid "sessions" +msgstr "posedźenja" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..01e05400dd456d345f33caf72b99d5949282e48a GIT binary patch literal 727 zcmYk3zmL-}6vqu5KNOHa%nW90b#jvwPA#swaNOw*QBjq^ZjyIt+Qg1*hqfCV3yiEt z9r+Kqm2M1-j4b>Ctc*PO_me*PKEL<%v#tETfAE=L+(aHA5po;(h`9KM+(Ir9SO1PU z?@#0o@(XeGKZx`FMLt|1RX)+Qr zRo(zfr7i23G)vgiDm5%poO=D25j)l(EPB~9JdM+45FW80WMPYjArD%IK^O#RWCM7Y zxtTj(iv>?u^AQc({OIvvfZ@Fm#wte=JfeuE|sAJT06sw%tRe6GOa`kECNw* zdREC)=uAjj8(Ld(-=9n-4eLf^7cgzas_<8j*hsz};14Um?)A=lC%fl{jlerr(t^Zm z%u0NZg{k$+Tx7CC{8JCU(UGMRGPew*3tML8W-UO%t2$l0mV zh2d0|%cbcyJ9L$HYmz?f(y-p~NUxG(QGf&sW0J#YG1tP, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Munkamenetek" + +msgid "session key" +msgstr "munkamenet kulcs" + +msgid "session data" +msgstr "munkamenet adat" + +msgid "expire date" +msgstr "lejárat dátuma" + +msgid "session" +msgstr "munkamenet" + +msgid "sessions" +msgstr "munkamenetek" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..584556847dc7f71a0ba30856064198ebbe99fd5b GIT binary patch literal 815 zcmY+Ay>HV%7{(7MA2Ljxi*%i6g)X)$P$P#RptPbA5m7Mg*W~KBP0rEz+$0-fh7BgB zB2|2(5(}V$1eN#$V7g3*g+G9m3GrM^68c(?pL&f!jKn8v!z^Q+NZ*>#j)CIFTt4y-utIZE!6}ns1KXZt_X9E&AhiN~$W^5_Qei z8|=PNc2YnaTU3TQ3c5R%^FD%1T;COh^1H)_$-Zl}d#S)z4ZCl$JUFI;2ADQC~x6pF3N zdeVqx6wu;EtS9#jXtVEBTbbf5ww9=N8c^98wP|^&MDt~NLDKm$^%qMHF^|oj`GjX+ zcFlXUH+(?MM>L0{c3=*M56vs{&UVzihP^d!kT^6i2||\n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Սեսսիաներ" + +msgid "session key" +msgstr "սեսսիայի բանալի" + +msgid "session data" +msgstr "սեսսիայի տվյալներ" + +msgid "expire date" +msgstr "պիտանիության ժամկետը" + +msgid "session" +msgstr "սեսսիա" + +msgid "sessions" +msgstr "սեսսիաներ" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24f465c142591af3a329a2d0a9613704754fdf35 GIT binary patch literal 744 zcmYLHJC74F5H@hU77BFr6{fq>$yskClsktY#66@)L`26zZ+7Q4PIm2;?ObyIffmsr z@gFEaqN0bA@)~{sEhXbk_A=79-+1Pm@niOCd+P&1yNlRCq=*NI_lRI$5%&<^5F!2p z5wyP$4-vl+A^ryubbk?_ZV>Vh`99*~O+vPjKO={_FUXIOzpwcxa?o8NV_BowLJoF& zMFdlg-NEmzwNGAybINE(U|A~*G?yNTTLoJVL3zEH!DZ_^GPY(4nPT!s_8MzW?<>lD$D0Sn<#ibF}{+j z>|~~ThIP7_%K}&mvJ!NtJ=ju(7~P$CUyC?iEEXLfI;(S7hN^gVx0cFvi&)8cFB%O; zC!1GDIy^cu*i_@`E^EA|hoz6}QYzi2*+g0ge()weWd|Ew*y|iDJJFfR@hpNKyi@-A zsDdgPjmx=}B|9~?a)Ro*S-L^DPgm|>SJTG>n(XzXcDmq57$MDpHe+rcza3&o85eTx Q*t1ez;GeJwtP|MgKUIOuGXMYp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..1e271eee6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 22:00+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessiones" + +msgid "session key" +msgstr "clave de session" + +msgid "session data" +msgstr "datos de session" + +msgid "expire date" +msgstr "data de expiration" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessiones" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d02dea8c8238b640dd1af071c7dee0313a549c7f GIT binary patch literal 705 zcmYL`y>1jS5XTLKuZ0R)3YS5VZ|y*I7atcPLL!~SiBnkU&Dz;Gw`;F#FL(C{NC?sJ z0yNZgAW`uEl$10)04*is-MidKzx~h5j>luo?>k!`5!iL$9*_aIfOkN&ufPr98xZq9 zfLQwzxDEUQV*U>h>;3{CE+O;}bPITU8KJwN??Gey3G^oDXV3)n%PRjJ6pppMV_meX zognzt+BNuIS^4ON@?Klxky_N+DJ(@$$al%L#-z9iW@@?iJ(@auuJS;}lDtwbcH&r` z3sczSMAg;>GVz6$GO;nIwbo|5+YJ(p+Tj?|5q+SXW?Bk*my6ok) zI)D?VXhfk%rbNZ@*hp)X*TUfKvk+>Yrt|r{7h+3&suuB3+C6G5<*GxfWqLoEj3-B% z=d&J74y_5wz*x%~-WSv&q;)B@8R8s9@+yp8X2)c(sf%}=Do2h?9;Yuj9=z7!Vp5K^ zOr~YyL`jaVt31c1ZbLs}L)^I|I!xj|H3~3ZAxb<`Qk2acZfw`5QCuX3?P@e@Os+e( GjsF7|k-h~0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..ef9b14f0c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sesi" + +msgid "session key" +msgstr "kunci sesi" + +msgid "session data" +msgstr "data sesi" + +msgid "expire date" +msgstr "tanggal kedaluwarsa" + +msgid "session" +msgstr "sesi" + +msgid "sessions" +msgstr "sesi" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e781b05be66d6f4d4eaed8d9341c98caf9732453 GIT binary patch literal 683 zcmYL`&u$Yj5XKiM6fJ)aoH-1)R+Y2fNL7ME5TdkFP$Hsg;cl{%t=o;gvYjTC5Jw&W zsZYQK9)Ke+&wmNWG zDT|OxkC8*?l+lfbqTD1Gc-5?3G`8j(C!P&*_6cp+Bp^SRx-ju6R>pcZa)rv-+j-$w zW(36J4;eeMC_Q=EJGxCko2Q42r!4J2nhM@I;3?;1WT$wk!kJrNhw+!J&4H)luzSEM z;-Pe&WmaleN^h)y_fl)+V2CQm5?)a^l)fofX-ny;c};tCF_#6h4CPF~AUCjg=6xlS zWU*MZd^k-_aoL)fSyIo_NV(pcD3k2RqrvESJ9*mT@sZIUHFb1V(P$o*KB-EnbPpzH z(mM40kJ$<9ZhhgdDOz@{Cni_A5YYXs{H8?#%EaSxZe__%jGZ|Fx>}{K-|j)Z?C)uK i(T8-u7e}jyG~vxmcqjUO8x6(zOf_Y=C~?|+RMCI#=C|, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "sesiono klefo" + +msgid "session data" +msgstr "sesiono datumi" + +msgid "expire date" +msgstr "expiro dato" + +msgid "session" +msgstr "sesiono" + +msgid "sessions" +msgstr "sesioni" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6dd863239c260a0ed6f94d732390291b80d9d9e GIT binary patch literal 706 zcmYL`&u$Yj5XKiM{}xVg?O}RAYE?OFS3p{aMTpW$L5YZ}g}d2xwr)4}%Jw#ilxN_^ z3vdB0NF3kJcPr*A%MW;~Yv-rIN|VcbAAkpXfCSs)=kA;Et}ZX(~1 zyU0%@oc~5{A%BoBSEA@2>V4$h)hOCP{eXHK^&@JG`W5v$>JL;bZ|}W^8X}yB2z{%- zvSr9wt*nGXco{kAoHBZ);ZR(fb2(q-E*e>LCUZ~v1$iTFXyQ4AEEce|6jJnTrx!=#xz#va*g}-JM9A?k+t2k)`RjWb{@gd! L{9IL4o7(6<7?r;F literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..0bdaf5d55 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "setulykill" + +msgid "session data" +msgstr "setugögn" + +msgid "expire date" +msgstr "fyrningardagsetning" + +msgid "session" +msgstr "seta" + +msgid "sessions" +msgstr "setur" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33e2cd7c4e35ee41bef0139d9e3feb258936bb2e GIT binary patch literal 726 zcmYLGzi$&U6gIR#buggL3}$OpId>PR5*&h1ODjbpA}R;FxqH31y|YiY)1>?XOhruW zto#SS$PObT3x5DBBhR_JML*MbjQi7w!h*(fDZn>9`XGhgvyM_?XKI zf8}7|!m1Eb4QM(Q#)2EZN{(57t@C%Cf?-E0)tOW|r~Nn5t)9s#29siDM8S@=DJ`d} zT84Jm9njhx?kIYHNaNi>&@NLFzc89fYEzMcdb?U4_=;Rs>J, 2011 +# Marco Bonetti, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioni" + +msgid "session key" +msgstr "chiave di sessione" + +msgid "session data" +msgstr "dati di sessione" + +msgid "expire date" +msgstr "data di scadenza" + +msgid "session" +msgstr "sessione" + +msgid "sessions" +msgstr "sessioni" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0de4c2990f6fa8732ba810a6c30be7f33d75031e GIT binary patch literal 757 zcmZXP&ubJh6vw01AB=(^2p&A-sFdtvMBR4Q6|uHZ>EcpH@99ow{0ec`x7hlKj3j_ZmT*1+D@Sa2|LC zxcCg51NH$|{|-3s58wju3vl%UaK695&IyG6fnEf*PnN!2P?x_2y#o3X^fKtras2=k z+D5bIKwX?J1;NoM&cJ$Vyho3@F+xd$_#hLSpWB1l7>k{Oz!s*Ln0MoulXngb9T}6{aC~jk+AQ?_e!pL_Zlq}QL8Ya-e)*}1q~m_S z!~E-BW3{n7{eDoP-jb4*OL*2+2LH2sVErs*Le_9=lWD_k{YkV!7N$OTSDS0HEL$oT zG70g*hOo!)3~`5f&9tXkN>-Hanh?uul$v@_!{xS4YaS|wUy3|0hM$W3U6Fr4hkM%x iFZU1k-u&6!`R{PXT;wl`{A)4%Hft<~@8Mv!ijDy69Ply# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..25ef99aab --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Shinya Okano , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "セッション" + +msgid "session key" +msgstr "セッションキー" + +msgid "session data" +msgstr "セッションデータ" + +msgid "expire date" +msgstr "有効期限" + +msgid "session" +msgstr "セッション" + +msgid "sessions" +msgstr "セッション" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be4e5d87e082f92fdd5819a635e6bda1ca9c0ac9 GIT binary patch literal 803 zcmZvX&x#X45XMJc|1c_o;LSrHmC%_PQL{TSBCfl#l3-Y(_crOw_GZ#ObazY^yv++l zaZymwMGzIilSf~`2k@x$oA}Kn*??N`o3E?ptE%o_=U4VU#0hW_G{I@`1QhWR6!|A` z5_|(^z;{s8e}GfqCzu}byx-6&$c}p6Ip|wx1pNxFKppe~^z1RugT35~V;RTix-!>7 zV4nq_WI}V&W0re{8zYolXi;Q`$$;-I&cz%pSFnblx8fSa8{IZM8O*&yT91zpkX^ z64%e5&2>T^vuWLNcsOk%S7NZ7-B#$>?!b~@55 zrJG6*O-y7~rlt|q$?Vt&>%Qmmsmouv{Ef@Mxct4#-?@C>$lV9)=(i|QXXV-?f@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..bcdcb5f80 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "სესიის გასაღები" + +msgid "session data" +msgstr "სესიის მონაცემები" + +msgid "expire date" +msgstr "ამოწურვის თარიღი" + +msgid "session" +msgstr "სესია" + +msgid "sessions" +msgstr "სესიები" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f22bc4228e386bd346baa8cf2c316f73a88e39c GIT binary patch literal 743 zcmYk2zi-n(6vq!JKV(2cof(d;Rduml0cjnAP)jRS5D^u_{$jtl*Vt!scP2^y23FV@ z5MpKxD_a*vCWM6e16Ub(7dH)0`uKbI-uJz`^Uu|lw~XQ{ahr&V>%<$v#f-Q{d?8%^ zE8)D~h#SOr!sUMx&i99Se}S>Tq#p6^B4am6KajfmXVP1wGtyPkQ&Q*qK}v1&*(;zx_&(RoJD#LJ6NsT-Oi_A31g}Nl1Z$>y>tPShy@)#2<4pQ+FwVM?2 z^cYlDdWTq*+KQgZWGZ&*%!s&*xYvIci(QRi$txbyX%XKH!h0eJMcC$H7zOQ(APfRB zibH%Y-OQ!0Ey6$q_nq(V_C`SAJq2S$tU;L^Y^fvOtAEWtp-TA<=C8nD!5<7TA3=ge zyZtCDK<2HaEFMy)%4*0^#0W*ipTJ<6BVRkRwu*dzJRY~K8!Lx6aSeX+u!ZDj-Tnv$ z{<_yY= z;#&i0&#xJAI?3zjwT4{mm%1^toJz&u1d9`{ exXnNVvrWM=X>d3Km!CT=vtU5i*8ZPbPWcBgn$H*j literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..b3aa45ffb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-06 11:49+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Tiɣimiyin" + +msgid "session key" +msgstr "tasarutt n tɣimit" + +msgid "session data" +msgstr "isefka n tɣimit" + +msgid "expire date" +msgstr "azemz n tgara" + +msgid "session" +msgstr "tiɣimit" + +msgid "sessions" +msgstr "tiɣimiyin" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3b0c1b2389c3ef608ed4997bc48c9245e959b84 GIT binary patch literal 810 zcmZ8dzi-n(7(Jl;kYVc51*ta{s*7y|q;*JzT3V@sh^QF$YjSa1JGOOqY0^&pF&3!{ zWa-4jnt_Vabm9*{cO4jE;16JBgYS|iQTe3jci;2--hK9u$%*#}>L%bWzz5t0yakv# z0o($70T}%&z<9p_?f||6jQ$H?e7^xlR}lIGJPCMr6`}jUAAybk9C#Y|C-4;TUtr^# zx`q&p^|L2{O8Od=*6=J)nWr19 zBFSo%ykXoVdAPbklOVO$Se9~0N+JlWWU(0t;-?_Y9SZ$Y0#iyoU5db1qeujCJh+z8Ets@Io*aKJX4o4^K84- zYUQL!4{NM#2JFH24Jp2uwxh_tXO&h<%i}-c<{WD&O(aWT!>tTHRkF6UvzUfS0axmj z3nq)N{S`7d_L;kCjFaW0lEUVJhv(KqIoi_0QDl|lCZ{o3NqIwfILZ30D7pnaI2N6P zh13UitatUUI?;!!r@DFvsWXsv)MwpMXS#zyJ3K$qd#bB?dLQe3)rIyz@96^sbED}? c4OXA}A;;, 2015 +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Baurzhan Muftakhidinov \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Sessions" +msgstr "Сессиялар" + +msgid "session key" +msgstr "сессия кілті" + +msgid "session data" +msgstr "сессия деректері" + +msgid "expire date" +msgstr "мерзімі аяқталу уақыты" + +msgid "session" +msgstr "сессия" + +msgid "sessions" +msgstr "сессиялар" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af28c29bfd375beac366ee8addec4f2286cdfe7c GIT binary patch literal 929 zcmbVHO>fgc5H(OfWH=#l?;q~|v?elzp-&)KDS7Q_j_c|Z+t8t@ok;xoY1 zUjQcoUjb(ThXB+61vmxx4S0FPvi<^J03=5(YXx`@_%85I-~jmCv2ni(4D#YGq(vN` z@X~}0!Pq$HFpD@vEh4EUs1Q-grfiyIR`lr3G#6Hbr(N2Vc&mjUP;Q2N)anuzruH_? zQZ8{_gi#CM?1usesgLZ&y#TLsN+f9UEx6{R%dU47yB_w+$n$)+yzF|e3qrh2A4O*8 zTvx{K8ur$Zx8h%Mmt6?EMufxxCrrddrrbxj31g8!H5#>OjIMzjC~w3?S&CRYy$&-h z?30k=we68%y*o@U{I1~U(}|2A*~@c$}m|>0~j9SOqmZgbOOG_k&HmI@g(7ZOZWmYo@J;g+5w+7|EGQAN3Nu z5%)QX@n*^s;Ukt6rKoxpG)}8-#kREiq}8ETxmNFW{zR(-t#)<(T&q`F?dg03ijP`- z(D{p*;@|Gb, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "លេខសំគាល់​រយះពេល​ពិនិត្យ​ចូល" + +msgid "session data" +msgstr "ទិន្នន័យរយះពេល​ពិនិត្យ​ចូល" + +msgid "expire date" +msgstr "ហួសពេលកំណត់" + +msgid "session" +msgstr "រយះពេល​ពិនិត្យ​ចូល" + +msgid "sessions" +msgstr "រយះពេល​ពិនិត្យ​ចូល" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23b8948c20d402274c88ef01208b67687ff34c6c GIT binary patch literal 810 zcmaKmO=}ZD7{^DgFKj&t-bCiuQYO2J2w_8dP+KTA7}C}In4NC6NoJOriAirNh#vG9 z1kXi1NtvZZFA9DDj~;cv58&0K&+K;FOZ9=@{AZr|KQBM7EX)zaMc^6`0gJ#(z{N-4 z67UId`LBTUegiH8-vO8Z1vuYtVCxJ*e?YGTn`aTKfet~hg1$L=?}M(u`zNULEuKRN z%8K3#pf1jrg1}P51vtT0#uig56}p-0O}el8(r_kYg2Mo)u5kZnSWDZ7*@WitEcQ z4_Wifns?TGvF5<$&#gJM=Djtqt;ucvr2Iap93O1{*qVL#05`VgZBYmI&(=J(W`26N h)3Z=rcG$D|D{J, 2011 +# Rohith PR, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-08-03 10:50+0000\n" +"Last-Translator: Rohith PR\n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "ಅಧಿವೇಶನಗಳು" + +msgid "session key" +msgstr "ಅಧಿವೇಶನದ ಕೀಲಿಕೈ" + +msgid "session data" +msgstr "ಅಧಿವೇಶನದ ದತ್ತಾಂಶ" + +msgid "expire date" +msgstr "ಅವಧಿಮೀರುವ ದಿನಾಂಕ" + +msgid "session" +msgstr "ಅಧಿವೇಶನ" + +msgid "sessions" +msgstr "ಅಧಿವೇಶನಗಳು" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..144d87c19142f2a13f50df615ee9b1163dca53ca GIT binary patch literal 700 zcmY+9y>AmS7{(2h4;`>DGk645&e?pWbqGR)R;nN(DhIo{b1&E2*(ci}=|}}q2i8gm zW$1teVn-?~e*hyR3nQsm8F_t|5AjMrJ@(`0eQp1|vT}%^&I4D02)GEm1$-R?7l5yT z_rC!?`yIFh`~bZF3-Gx=z`-em{(_zZUY)LU2cUj`2znWG0vdpRp7~!up{<&|0_y8* zEeMXP^8IIKYxGoFn`vc{9G97qI1x@FTbpzBrdVtSa&Nx2sAu%9j2+oZ$a87@B#x6^ zp;8@e%TgOhx;D)c@?e-+5^0Wu-jj%Qj1&&Ce6s&xe*O=z C4#{W$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..74c622c3f --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Chr0m3 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Chr0m3 \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "세션" + +msgid "session key" +msgstr "세션 키" + +msgid "session data" +msgstr "세션 날짜" + +msgid "expire date" +msgstr "유효날짜" + +msgid "session" +msgstr "세션" + +msgid "sessions" +msgstr "세션" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f24928afa686a83b96974c59cd24a1d6e470280a GIT binary patch literal 742 zcmZ9Hy>AmS6u=FX4;_f18xlw!LCCpF5LJ316#`nRf~Zj&*xkgvUUNC0Y+sY>LevgL zDq>?oV$Vd8KuV!7@CP89NQ^A}0j!KX=c7@1($7Ep`T5!YH9PYfL0kl`12y0>@Di}m z2QC3efX#mcZ0&d83h)!K`QL!8`vb@`2>k`m0?}E7u7aO~ZT&0o4e%TAHSiJG)(yaL zY}k7SY~%b$2)2fC0mgIVIa*^PMlGM15o$3l%W!s@GC6C}T9~ZoWN4&eFa0h#H zzE`~MK{!vSRHPLhgLUiycl7RwqVZ|BnYp)|%5r6K`onzA za~|?ou^671CGZEuI?7EV8pb7D-=sn^ReoAqBE@N)y=#LBvKZHSBa8zd7uQ2|@=6~! zGp8D*f<|PCi, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-05-23 06:08+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Отурумдар" + +msgid "session key" +msgstr "отурум ачкычы" + +msgid "session data" +msgstr "отурум берилиши" + +msgid "expire date" +msgstr "мөөнөтү" + +msgid "session" +msgstr "отурум" + +msgid "sessions" +msgstr "отурумдар" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..e7c83d42a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bfd37fbd0e5a6811aa2b1959ffa1211402d36275 GIT binary patch literal 786 zcmYk4%We}f6ow6yiw4AkH4C$#YE(I6hf7+gQxLsKl^PM1fxXGN6Hh1h$aY8~^%27f|T`00r(h=<6kf{(uMW^JRo?gMS0R2L2N~%>BCP{{;_RbOj+8tMfJR z5LX*RfYcG@0c+xgbWR!VkepS@N}LHVk!zX@4^6Qw&g6WNJ2bGSkV8+7GV)5=uoK5w zA#`q{6ImJSN#ErvBhMzeBdOsy8az+Qo|VD_OZMSw9Cs*tL?|Pyiy7mzyGa?P0Fo2= zMuk0BT$j*o!nQGc%pcNC3K1O(=SgaXcBSyfa@>d0I=nAbInM;%8He&|)|Bm`8Slb~ z&L<+5B$Z;!@v-uwiO@=DyfN~=;&D8kPTM~0sZQlA48_f@7FJ&D5SKn~Mg61x!Rr33 zO`|=dz0`27c?B2ra^~Zz6iWB-a3rjgK6#lQlC2dNzI7@sInYCsDV=k?^;-GmNjWZk zG$NzNg&K?H8&F046vFC%Jt(X=gC8B9Mm_ltvGdVP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..0051e3000 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Matas Dailyda , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Sessions" +msgstr "Sesijos" + +msgid "session key" +msgstr "sesijos raktas" + +msgid "session data" +msgstr "sesijos data" + +msgid "expire date" +msgstr "galiojima data" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesijos" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..07f5308efe96c7e15c43448270ea1f576341822f GIT binary patch literal 753 zcmYL`yKfXR5XKFJhZYKiC@CgIqC}Bz?LfH1mnDdhNRe{l6c&2lowM<==Uv&pN9gG3 z5Ptv_9kkG*qe7xYR5Vmnw3LkRInqzx%=jBWj_t|PCJ5TB51$Y&(< zzaYW;9l3%0KtlgF5`2G=4;KjehZ=nEFA{Pa^&{#P)Ddc!`-XZG^(SiZ{XxaCalV8a z;_^fYE{!A1Uz+CRsd7#i#t}6vwN=oTUJ*BG&NMXTym+C`XSpK{TXa;*)1x+hu58#z zK)WMNRzxSNEUc$>m+3Zr)XN-A3jtB%NlN#vk{-SEF`g!1lkqLeIOSE~T(If}Cl8rPJ{^zqe!L#lkLm}DC-Vx6 z_6y^c!K<8?_$IH0J}z^qO$}OS(mLgnXXzo`UiiXUr^?a;(<<89WCFIE+Rv{kAn!+w zyk})j4-4CM0!%qBU2?YulQdZ~E1V?>ht*XGDO*lBhdp3`c34g@*#nNn=6Wp(zpXpc m5&g2MboTX~G^1B8d~dJo!l&ZmRK{IBFQj+*=uI|XCI0~yfy+|> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..45fdde523 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: peterisb \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Sessions" +msgstr "Sesijas" + +msgid "session key" +msgstr "sesijas atslēga" + +msgid "session data" +msgstr "sesijas dati" + +msgid "expire date" +msgstr "izbeigšanās datums" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesijas" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bdf114e383bab8af86bff1844d6fc57ac8cb67b9 GIT binary patch literal 816 zcmYL_&ubGw6vtPsKUnqR#f#t*Y-uTz-Hn#SjZv|-P-!sK)%%#8Y^T}GE;|#G9@Bze zyb9vY{~(CLm}&+80GYjb6v4B2_2}Ddn>_gJcix-tym_-fFU`F+FwP=Z5Dz(zyh5@V zA?J`!NLK%bWZv({1>^^k)qf+I?=SN4gkk(cHIczd!?=!mfSUP#p zkBY}8z2{J~IGu}u)=8YfFWT~W%%tRzkOu3;JYnEd#SEDjk2NdOY0_f5$7^ZSlW2!E z6xr~}Q$Xgi(cF@&Iphp=diR#CC{N z0>^Rf(z5N?HX6wmd(N|-Ghd0=w@C2@IAwR`=CX}pZc?d;mrx-?s-nb&hg1kIVUuy6 zg>W0E!Sr4@Nef&wqdRy;1RWYM;xXEGp++0bj|8Uz7Ppm(UCZiry9Jds_*u&@Am zYQr_moh7&nHn`waOhdoZ!?dqQdSvJidXVm=`}#BJFM0ral=jm-J=9~Yy~n+`dT5|` n;!oe`!7S, 2011 +# Vasil Vangelovski , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Sessions" +msgstr "Сесии" + +msgid "session key" +msgstr "сесиски клуч" + +msgid "session data" +msgstr "сесиски податоци" + +msgid "expire date" +msgstr "датум на истекување" + +msgid "session" +msgstr "сесија" + +msgid "sessions" +msgstr "сесии" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9710d0265779ea8fa6b5cf0f383c39e242cc4edc GIT binary patch literal 854 zcmZ8czi$&U7(Jl;(7{xR0l{Dfq*j%ayCT$bAqXg~s6<3m0=t{Imuv1vbaqIxm4%6j zDeOof*h-5d%F;;u0gQ~uf`O40G4XsM4eh6Ue)f0oJ%9c-J=M2Rr-4gA1vm>l2Tbh& zXMj(D>3;@{_6u+h_zIZ*55VYt0WXhP)^G56;Kgyvx($8v*Et5aAZ8`VQDM3BV7;+cEX+Bs<3LE)_>;h7PIT9)a}^(P9nW#*9F%>Z2}vs{i$%y}l6vG`8i;z(;G#}$ z)U$oAv3|>sSPJWISJQ&m?QD~RLR?0%UlBALFNZibhqBvh5qit~}CYOuEoh{gwR(pEz zOskJtz0-rITJ`l{AKkuI`�>p-iwS`CR-uk~O{tM{1@@*YfCR}Hn=&d%FLq=rcN pKezXNt9Q6%9J{y~_E*^@JDGjwuxen8kYK2-BY(0{)d#pt_Ft+2Hdg=u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..ecaa34144 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hrishikesh , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-03-03 10:00+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "സെഷനുകൾ" + +msgid "session key" +msgstr "സെഷന്‍ കീ" + +msgid "session data" +msgstr "സെഷനിലെ ഡാറ്റ" + +msgid "expire date" +msgstr "കാലാവധി തീരുന്ന തിയ്യതി" + +msgid "session" +msgstr "സെഷന്‍" + +msgid "sessions" +msgstr "സെഷനുകള്‍" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f214362f9d30a9eaf94c531b6b5c3982dea3a7db GIT binary patch literal 784 zcmYL`J!}&(6vwYnK6D@k1{N61)~a&uuBaq91R+W*RU#rP2fLedFW27LC)**(R;a>+ z1PePGVoFdmfGQSNBy^Wbj4W&{tc*N2x#USd|Lv#0-}A?>tBda}hzr0Czy~e?uK^RE zfs4Qwz~sLH#`^=f4EzL4{x@KJe}NARmh}(x3h@4nWnBjyfSP^ZL9cJd9wQ#1p1eB)GCzH;p7i0oBY>lVqVLNoR|F)+^@9YDlrini_8f z_!*O?5<$Tp<)N^*St_K)brnVde$WmT_60$9#n7_#n zisdjHqPua4^8MBh?NNC@OlTCBnj*OeC3x7TA;UhS2|;xM=Z_=G(Nat6lsHbO(n2oG#WG49wc%nYa`;a?=>8lJLsrcJM(aFc`$dHX-Jf5ZVm*YWpocG6r L@gP4a(nW*+6(;x? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ff7c3571 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Jannis Leidel , 2011 +# Анхбаяр Анхаа , 2011,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-07-09 06:53+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Session-ууд" + +msgid "session key" +msgstr "session түлхүүр" + +msgid "session data" +msgstr "session өгөгдөл" + +msgid "expire date" +msgstr "дуусах хугацаа" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "session-ууд" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f46c07b122825fab950717aac7ce4db9fd5ca4d2 GIT binary patch literal 649 zcmYL`zmn515XJ=@{|pth6e?jD#c`Nn4rS87-N6BYa2Wc z{|Cgnzu?U!#{NNXg6EeRy9<2>-GeG<%+H|-G;HI~P_%9Kj&;$lcEYfXpi`+_{Ox}tUb*5vfIKW|&5Bh^lWcVKQY#<*!dDw>~ugM3IJ2JkeV4dVIY3kPe zh4wRQuxhFWRZ8TF8p+30)0*F(h0w}0T`rfs5Igl$t$KxR(r%=k)Z6B?@#%wPd^|q9 z7(VOulV{chWpMhs#dtxjLfY1(&5#!}a$beehx|zFU)063rpk#!Q`l0QO7i_rI-CzF zdE=8wy>L{EBkLM3xoJ0{A7w+{xugCtiLaprZeO#UoIaiLKn(?q(6n|IZ(TFo8S#zx NYGDf9xiRkg{sTFXt5*O3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..4e3b6aab6 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-11-16 12:39+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sesi-sesi" + +msgid "session key" +msgstr "Kunci sesi" + +msgid "session data" +msgstr "Data sesi" + +msgid "expire date" +msgstr "Tarikh tamat tempoh" + +msgid "session" +msgstr "sesi" + +msgid "sessions" +msgstr "sesi-sesi" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..73d049a369170c8dfabc9d72b0248dcb0122c371 GIT binary patch literal 872 zcmZ`!J&O}T7+&@KV6_tLEJm+ySXYMve^v(+&7z}3=EXQPSvvI%JnKel_7Gfh} zp@krVr67nlcYZbg082ZC!5?5@W9c)y=3;U8!ZXkN@w^}NeOAL-V*W7`3vs63$w2>A!#>fiHMj?bD!KAu!vldT#`#g z5|H!5B2J6sVi2=1s`b+N0$P%wU;(FH&SIY|7kSJDC#MEdX1?Q$Mx&ZE1H%nIHXTm& zr71=K+MRgfoVMF*?bX@my_##Uq>1DSj+$ino#bQbWDyIK2I&o0F1T#o=(gzMOlNj& z@SLtDy|f=Dfln51hjRN&pTrZp6BRj&Xe-TQ;gcjQL(%jaq;i{X!?v_iT7A;$wN_iD z59hg7&$RkjC82mx7Cvb8xGcb_q;Ir(q7_2CZ?)Rg>b_Q=wR*Sn)Sa_hz0~Snxek|L W7(yIi{M{OG57yz(&D|9Lo&Oi+!#pzp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po new file mode 100644 index 000000000..745787425 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:50+0000\n" +"Last-Translator: Yhal Htet Aung \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "ကြားကာလများ" + +msgid "session key" +msgstr "ကြားကာလသော့" + +msgid "session data" +msgstr "ကြားကာလအချက်အလက်" + +msgid "expire date" +msgstr "သက်တမ်းကုန်နေ့စွဲ" + +msgid "session" +msgstr "ကြားကာလ" + +msgid "sessions" +msgstr "ကြားကာလများ" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78c5727fc7f8ccd5eccbc5be896bdd868a51641d GIT binary patch literal 717 zcmYL`zi$&U6vqveA3B(r8O+wIa_(FKX&r*9mR2fiASwsDlY6Ctc*P0CC!sQ_w{@J`q@7JzQ6XKVBAI?ASrSed546UA$O3kNT`2D zg7+tK5BY_J`X40t{vwyx2>FM43;B4xp1(w0!~8R9@O@d-zo7=-4^&)M^$xxeH)|m{ zRYmaKSd7VQa84QR2uw?5fo9SJadmO2p(wACAzUoSj&!X#gT7}+8G8#hbP_Z>lR7ui z36#cq)^WMY*xopIEH#2g-B&5ww;(-w*>l`Y(5-|&W(jA!NjVoub2H&df<|@%=PLAE z`I;=*VSI=3C*o1EnP5c6(s`Czsa+wxv4XykS}RA7L1j?Tr+6AncZ(`*C_OOGaE;E# zG6$A|90~f;*a_rHYPx5Jqxq+TuAh2eia4H3CJi5Ys{u?KeKU&d+byM7G>UaE-iSI! zorBeX;Eg2OH`;^7^Iep9Q4doemxWZiMf<1HI`Hi`=^@)*`NCcUueRjh`VDRT0hq0XYiB=l}o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 000000000..7a6d5d0ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Økter" + +msgid "session key" +msgstr "øktnøkkel" + +msgid "session data" +msgstr "øktdata" + +msgid "expire date" +msgstr "utløpsdato" + +msgid "session" +msgstr "økt" + +msgid "sessions" +msgstr "økter" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..93ff6787e08edbf73b2addb64cb7cd77b0df8f22 GIT binary patch literal 802 zcmZ8dziSjh7+p2~U`-|1S&UsmnA_c;Ub5$jcqS0=^hj3w@%GDRlfBtxX3o2mDa1l6 zK|!%|f>x47NE!vf*22P42K)okTKdiIU5@jEH*dZ-?|U=5zc0k-w@XO12K#Eg|PY`g!LUG-kfrrzsQ#nFHcvwACay9`>6jp;$vj%n?2(= zI96uQAlo`yk%N}9&f$u-sy0B%H0RQRVUY?TF;n2kN*uEl*-5hlyW_odIwIeOuA*x( zeFVZLg(Ti)Jjva4C~~1_TPA5t@AMN%qdX*T=RrhU0+>QCy^FVnWYG_!uwF>+LxBTiZcC{m^t{1fP*XNE-GreX@T$)mQ#P9R zIC%4Jd#$}P`2j)AcUw7E!0}(t0pgEmaU7+epGe*gdBVVSvS^jow4eClv=^FNSV B4hR4M literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 000000000..c2b6e8cd7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "अवधिहरु" + +msgid "session key" +msgstr "अवधि साँचो" + +msgid "session data" +msgstr "अवधि विवरण" + +msgid "expire date" +msgstr "खारेज मिति" + +msgid "session" +msgstr "अवधि" + +msgid "sessions" +msgstr "अवधिहरु" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c44a8fc6882b390d4e9b7c747488358204708066 GIT binary patch literal 692 zcmY+B&u-H|5XQGqpmKo&XAaA)Rkg8QA!s)Qq5hL95fL?p`(jU=Z8y8t?m9`^7vNBd z6IY&q2Y@RNz_G_(cz|AeWHwG(G1gDt%=p{&SabDk`5VD_ggi$wWEHtULi|KlkY7mX z|3-rM5AqnfL_+^B5`5Rl*%Bc)sKMv%HNJDyhgg3>eTw=O^$F^C)ZqJpipOU8GHQqi zjSze_i*Ww_JSTl{P8#h9Oe<-D7QzE@O>?24DQ=4sI9=q9^sG6C+_S@ieF7V9;Omo zR%oY$HilRa>Fhfw3cpjcQi9&Ssl7X=hE- q7af|ex1(lr;K&%PGN!^E)uU!H^94eQ&lqsGvweb7P, 2011 +# Sander Steffann , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sander Steffann \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessies" + +msgid "session key" +msgstr "sessiesleutel" + +msgid "session data" +msgstr "sessiegegevens" + +msgid "expire date" +msgstr "verloopdatum" + +msgid "session" +msgstr "sessie" + +msgid "sessions" +msgstr "sessies" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..285d386c93d09e733e84aff42ff46c44cc457b23 GIT binary patch literal 667 zcmYLGJ#Q015M3aA=s*VkBwP}LEeS6OKM6tqMF_RO z39kr$2tmIigu1_klShpGYvUh}n|x0EjI^qaYvR`wUl51BD`IL}&E6mm_Ou~Jsg;HP zC#}zp!8vWvF_>4{0?(BP<{EL$K~(p_1Qu)Gv7t3%7rg7b&|{LP-82zNSEQeKlFAPs-*?HPugZCmS%t1t-dM?x z^*LD24@>7&PH8M=ssNFJno53PYz>80$PX51tef!7Gw&-I$8}wId>EroVcr>;Y256$ zrm`IrBgR|NV1Kat@ROv|jXoRnfV9e@qFp`AeO#4FV~>x{ly%_y-?BZi{ZJR)It43s zab$9hh2+~O+TSlMIbt*{XI7PB&)BIWp<0EmpZ0j;_BWBg>+@u*7ljLr4JylKzPwph aj*el%0Z42qNUQsh+4RJ9%e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 000000000..802d36d14 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-10-26 12:34+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesjonar" + +msgid "session key" +msgstr "sesjonsnøkkel" + +msgid "session data" +msgstr "sesjonsdata" + +msgid "expire date" +msgstr "utløpsdato" + +msgid "session" +msgstr "sesjon" + +msgid "sessions" +msgstr "sesjonar" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4ab9e905a6a3b8834f66309052582a08c8d75f21 GIT binary patch literal 732 zcmZ9H&ui2`6vw01A4Kt>M?H+UmNJ{9PNy;ZQFVEqFGAz{Iz{wu!OA6@mqC*OIK@0<7DuRC+O191(w4>W zz;)mZxCNX8_WnC?1NaHNyW}{(LGJ?lmmS9ieFJ(AG@s~4(A$vz00sM~?-fuRSI6Sa zP1Fk5#=!;|R}96}Fh?`3xfD~im-HgpV+Yf-cG^nrvdG}g7{6f377-NhQjth^n`KfN z+|mh;@snPnaVQCL+gl-CQ;Zt$;-}D!pd~+8#(sc>#&U{tu zui#(>1rNz`ZPABtn^YSdDk^kJjZ_3Zqe5_vnvBORMUP+_NFS%8w8BM4u0oASdNg4; zWVB1rme$Ph2+i*plM&DB_xlxNU*sJ&s6?{sjdz+#Iw|+0_7>dMW@~-6eNge;H7N`e zFx5c@>lrpMUY1fW>L}Ww3VJo3ha0#y^Vwb8$MF69*Rl8l bmhuQpN8o-n%>VyaoEBeg`7r, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "сессийы амонӕн" + +msgid "session data" +msgstr "сессийы рардтӕ" + +msgid "expire date" +msgstr "фӕуды афон" + +msgid "session" +msgstr "сесси" + +msgid "sessions" +msgstr "сесситӕ" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9c4c9da6ec874d1ca3b0d9c2a44c58686ddefbe0 GIT binary patch literal 771 zcmZ{g&ubGw6vtPsKUh8WCJ2t663S$Ei<)*~M64}T5?spaeVUzYCvIkznTbikL%oRq zKrbSwATl{9UIY*RxC>rA>ih}*3BJvb=29Pg_WRzO_hV*%FE1T>U}u0!KnpkzJON6x zKpBsLv%n|d0`L_m^FM%dz%StS3D5fjdJ#A{>3PebFF-GYz6ZSu`g4~53kv0vy{AA+ zJ3SR|X{Mz>+0@vm;EJJ?8s=%HHJ4(pWs)8RkJ$d)*Iuk-k97>*PVqyg$|i!+9u=AN zcUU2n!EK%K6yF(S8Yhw&SjEecfF0*`T1HLDg?> zw>KC6A*zM`h7^VgxZi#O4>fFLf+D9}G*D-cD$PvuL9&I{7Io#WE>n0@bY#j!M$p|0Rtic literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 000000000..3895f30ca --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ਸ਼ੈਸ਼ਨ ਕੁੰਜੀ" + +msgid "session data" +msgstr "ਸ਼ੈਸ਼ਨ ਡਾਟਾ" + +msgid "expire date" +msgstr "ਮਿਆਦ ਮਿਤੀ" + +msgid "session" +msgstr "ਸ਼ੈਸ਼ਨ" + +msgid "sessions" +msgstr "ਸ਼ੈਸ਼ਨ" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b479f2bcec9101bb48b5c2189e210dc74ca40375 GIT binary patch literal 828 zcmYjPO>fgc5Otw^$Z+BWQYD51RRY??PE$yoI7L7!RS*%CzjxZ(!qsa2zI#jl0sIDXJ9`tbX8WyS z#N0093)#Y63at|*wIil^QV8mEBOJXTSKgBRJQ<4FD%MW7P^pLvJLZe@B z$~_jjDh%uBIO(&;<5;tv3drrgV8`NZVx{aUmIYMv{D;ijW3?Uf8^Lb`)aW9gxiDsSfK+6m2Ce z$uRV3pF9evB=7oOJFL<6HrcQh*2^}Y^IprZ(b?I&;I(~J_Q^++yo3Igs2zIiX1{Fp z%b~k#es9fV8>TMTVc%kG4P$r8P1nH#N`+%z2u)@&|MpQPUq3_%Cp@Awu`ea%C`+*< MhS@ke{jVsTe?4T?!T, 2011 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tomasz Kajtoch \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Sesje" + +msgid "session key" +msgstr "klucz sesji" + +msgid "session data" +msgstr "dane sesji" + +msgid "expire date" +msgstr "data wygaśnięcia sesji" + +msgid "session" +msgstr "sesja" + +msgid "sessions" +msgstr "sesje" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb50e3a6b0f54818b40b7dc4a0126bd3df932b07 GIT binary patch literal 738 zcmYLHJ#Q015M3aA=%7H*QVd<9Xnl8vC}xcjA|z5!EUa+QFTU|*lk@IrcO5(bfeMKN zQBqJ+A)v(#6(tf44L^XElG*duNblav?3>xSoBMrZ?F}QlOt?kJ2v-TO2*JJ(t`NQw zLjD^eXnzo{5q=Uv{tqGO{u17vW9;8Netn*?o8-SE4s{=iuM>Zs^LOG<_luayYRwvP zu!}QdbX40VdS00O>=`P80}HhU}qJ*p~s1jt5Pc6hW?SX4t?i&w#Qp5UASw2mhbAm$(1eyv|cK| zoK!&Nqh2|(vgCWl4xIp9)uHP&+c0xG>l$u%Al+z3^XuS|N9uhR%Y4{12iTWV4`461;&A0#n literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..69a3fa048 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessões" + +msgid "session key" +msgstr "chave da sessão" + +msgid "session data" +msgstr "dados da sessão" + +msgid "expire date" +msgstr "data de expiração" + +msgid "session" +msgstr "sessão" + +msgid "sessions" +msgstr "sessões" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4e0da1d045ca973789650f1da85e38c86e4dc15 GIT binary patch literal 757 zcmY*XJ8u&~5MCfWbWk8@DWcGt1PZ=mHD zAVh=ckf4n_3Q8Iz8d@Y;N@mY5G17P6%{H_*l&azgzp6J|3&a|e+VBgF!pz0zq`oTZPGsy`@D1Fo5Wui{Dau%{U)ZgDrSS& z%jG#SI;!LfeJ?F^_7ttnwXzJSWo{5s>5$pEbIIN*SH=mREp^NKMjzwQ@q?59A zNROq;bTGhD8^?P#%TwMRXO<^gK+u1Z@Lhw_Q7nH%-2^nFc#B6dk6RGOB5G|$aTHM? zAK+>3Yp&y3Ji5=DcOl*uTlY32lHjqljwePcTS%vk0I5=g6Fb5*R}volXFkkEGA|lK zJ=&o}m5pVFJV7}U(5Gp~*%&QCt!w0~yr@I%$hlI4;bbytINu^a#Hr5?=a*bku_zUm z?nQSH)`Q+bZ*Toa;zktgYUNPTq-P~v+2PcMWg&CbhT)Mk7G39Avd_2IalYLl8osB7 znr@N_*nXM2)zkv2UO~SY8(HvuZAMmrDl5}=nr)b?otlCji0kd3+V$)cTITl&DMGb# hIeR~QtE-iIPGzbsZ5;d~@D3X9)W3_BqdM?q{sH?Y)pY;> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..ebe8e6a3a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: andrewsmedina \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Sessões" + +msgid "session key" +msgstr "chave da sessão" + +msgid "session data" +msgstr "dados da sessão" + +msgid "expire date" +msgstr "data de expiração" + +msgid "session" +msgstr "sessão" + +msgid "sessions" +msgstr "sessões" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49ade94cf2a0b6acb47cb86ddadc1c682cbeef27 GIT binary patch literal 776 zcmYLHy>AmS6gN;lbbJiV3}&FZQ{~*be57%>7ExNM5)n~)u$zl>akMDEDJkh~JccVc*W z#8sh#fvB``q-P5`Bu}S>C7EV8=)cIwt`XdUmpp^r7~V|iLy}NJ+n7?8v^Nr(Bw!>1 zaV&k$m9I^b4xt@PAF&6?MgkE$=hl(TaAiyGv|)I_-yU;?51klsC2T&$k4-JL>{5DC zOt>stxt?r81653UAxI|p1j_Y, 2011 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Sessions" +msgstr "Sesiuni" + +msgid "session key" +msgstr "cheie sesiune" + +msgid "session data" +msgstr "date sesiune" + +msgid "expire date" +msgstr "dată expirare" + +msgid "session" +msgstr "sesiune" + +msgid "sessions" +msgstr "sesiuni" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8934770af1c645d7502a0d684881e41fbf8a65fd GIT binary patch literal 913 zcmY*V%We}f6dj;EG_XQqfk4PCS~aSi*lD7+lT3;zDXK(76bAMtai>!f&&c-BRO+S( zsS6OS_yGQ(3o3=8vfu-dXTy>WAHbF+*LkW}I&*xF&po#1_szLa4%Ah^T|fZ14tNi+ zH2_=#d<9tj2f%uN0&W0)0j&N9V10i9^A{cGAF$oOcgbAk~0ln{0L6-P?69wCKS^Z zM5#wsmIx&TjJU;LM>ccjTft-v7nc!T^~$9s0_8qoO5;E>p}I`R(nIw$ zsRpX@q4J9R;v5Zp^DuKnl1CSINS>{;7f z;<{+Zok)ZpT74Pm=`}qhQ@7boCF|nNSoV~ML^5oZU#g(d(q9zwl=wbH3k%3D$$g(v zw2lY@JM=ZbIN7TDCA%C>kSZ;rgM-mXjh1pSLdPS%PwdvvSM$rW@wMDkhg>*ja%R, 2011 +# Алексей Борискин , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eugene MechanisM \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sessions" +msgstr "Сессии" + +msgid "session key" +msgstr "ключ сессии" + +msgid "session data" +msgstr "данные сессии" + +msgid "expire date" +msgstr "дата окончания" + +msgid "session" +msgstr "сессия" + +msgid "sessions" +msgstr "сессии" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..675f761319080af465399edfa87523859f79ec7d GIT binary patch literal 766 zcmYL^zi$&U6vqveA3BggtT1@0T2;>7rL7X2UO|*rszgMT9_%LPUYy+7C)@eO-vA?j zKo&N{zyci@NSTnB5F-ohOh}A8=jW3?_kHi{_nyx`Z?C;Z5Lbb_Knz?5UIH#Y0M~$z zfb%~CuJ;>o1NZ?r{}pU-!(M7gtSI&xPhxVQIkV799>HxCmxFMZ1R)74I1Fh}*$ToS zfJV~fec^Vl`YI&2N6OnctkT_`tpLJ%%#0{KuOCb{L!d@r&&I, 2011 +# Martin Tóth , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Sessions" +msgstr "Relácie" + +msgid "session key" +msgstr "kľúč relácie" + +msgid "session data" +msgstr "údaje relácie" + +msgid "expire date" +msgstr "dátum vypršania platnosti" + +msgid "session" +msgstr "relácia" + +msgid "sessions" +msgstr "relácie" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a44169f10d353301dc66d1b44e9322eedf8a30f5 GIT binary patch literal 770 zcmYLHJ8u&~5I!J0bWl-KOoNmtTHl@R$YG5E5fUj97FKf5FTTlT?ep$wcl`*;Paq}# z1sVzzN+=MbgaUd*M}x$y&yGj>Zswc$X7+LW{r1|Mfb2Tq4k0DnB)legdrP=Mct`O0 z4+O9MOt?k(M)3Kc1h4x|_4%tAc zT!#l(YU5bf<}zcC$GK&x<`DLtrEJHbaHM5VXf+P?IN4%x!jcvw36EQwaT3QQWCu8r ze&$NoV(~pzZ$Prmx0;(VS@={~$5JDdEripCL(j;O{`ekfLz$98xL^9jtJ=Dm()qQH(6C+A*O^o~hwYcr zU2K$tEy7+gHlkpA+Kem*RnDpHG}};xopp7WZm`oy;3337l8V-eCM(*2)6-?CNu@fK p8XN79-oyZd^D|+gH0W^X|NTG&rKWc, 2011 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Seje" + +msgid "session key" +msgstr "ključ seje" + +msgid "session data" +msgstr "podatki seje" + +msgid "expire date" +msgstr "čas preteka" + +msgid "session" +msgstr "seja" + +msgid "sessions" +msgstr "seje" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..001dbcd154e8d28f646db3b91d13b9b6e58e0609 GIT binary patch literal 683 zcmYL`F>ezw6vqt|iVj#hGnlOvaxMuVQioJfXr)R-MCD+2axWJ*clO10NFuSZvceZ& zVCWZsmF$d+EPMb~M&8Rc>68BYJ^$}L`}zEPXX_Kg*hbw&C8%4dk0^?7sGF$oDDr=x zsP-r7HtH9O{68qF`->{BF!m2gb;GNS-9Z}U4di>|4)Oz%`adJ7?h6vzR{0i^;(7&! zpH@Nr*DiAQ8obxmcn0%QJK(7bzCulTfdHgl=~Kbq*WW?goGEhd|)3`7E|ko;NRS4JztcSj+VGLC1n zSuN0xdIKge)f9xmmUerD59$j9lQL9JKtqEXoszr%o2bhPr%#}86J{T$I zA#~m($D(yvM`sPei6b+xsWzG9t-cPMIVJa#sFzQj%EhsDg_qovtEKNW+q_CUyN2KE t@Wx&{qQ}DD1`OY0dCvV;`wt-DyJr9Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 000000000..3299ef037 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesione" + +msgid "session key" +msgstr "kyç sesioni" + +msgid "session data" +msgstr "të dhëna sesioni" + +msgid "expire date" +msgstr "datë skadimi" + +msgid "session" +msgstr "sesion" + +msgid "sessions" +msgstr "sesione" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d89316d8387964bef4ab57ce1ad308dfe732971a GIT binary patch literal 855 zcmY*Vzi$&U7&TCS=zs-@0mR@ARE;Vpc3afwk}IgCl?p^uZD4m3_j*lYN4C?XQU}^f zu&^Ql8~;Iss3-`5#2M6!;ggUtd0h&^6%ez*m8% zfxUhY7-GHIBf!4S_6b3>SLfghwtlS&V-h6|5}jtE1+H={km-v9_98!C)Wr6nH)vU_ zO;NFAsY)IT?I(q}y2)j%f)&wJ+LDrqlPZ~O#fFqsh=b*aWiqb?x8Nmr;j|D>Qg(|_ zM%WByETl6Nlu-&svLdz;KXd5Id*2krjD|EnL7{>N+*nf9T$(z!N{4t3`kKP`RgFuv zl~izXt*6|n4V0|X@hk*o+~TnyWx*REUKM&R;S!H;SlbM9xpupqwSH`}E;`wYYUKJ4 z8&LgUJZE$+6O@)p3&UT)vNV`i(h3Pz+it=et?1ZXv(6J)z?BWIjj++9@*>F(eg3R< zp~-@*sA?kP5a-ttdwk6h8yzgyTbkF&qS6f$V%h91O*B=&{WcnxHyMp0hR4RRZ|P{n z7`}}u20N^0qshTmF`D*mFF}ip;+>s-1UxhY83vijOd&w-jXOwp-C_FD9U%A4b<@3c z-+jXFJ+!;&9(, 2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-01-30 10:08+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Sessions" +msgstr "Сесије" + +msgid "session key" +msgstr "кључ сесије" + +msgid "session data" +msgstr "подаци сесије" + +msgid "expire date" +msgstr "датум застаревања" + +msgid "session" +msgstr "сесија" + +msgid "sessions" +msgstr "сесије" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..708ede030945d61f1655a3ee30664e4a2b3aa982 GIT binary patch literal 757 zcmYLHzi-qq6gE(PD8SO0;W1F%3Hjn26)m|25YS48dg9a`?C!-)o#yPw_Vuo)I}42b zA#7zu-H;d<7!eXXtc*M-m-b1YzW1KL_am`?E-!r~Xx9;U5F^A*#CwFdQ^XC#XN1px zL3r&q#4W@RgwOv*c->#b=_Nw`Azwp$x=hHj&msHxEAnmR?+gC5$p1mcva0tIvbU=> z5j?8Q*I!xqWLH=#wX#IaOKAk8+zDdqWWzqm&x1p8-1wFZjn2i`(SAzb2;)1&kmg)v zI@l4VHjWN#CR6%snpry1F$BX`bVnRXFQqSVSPWejJ)-O(?XE%8jaS)yh8Apd>*&aE zWee`KiJ_lq122WqR!-#EI~1sF$}>Snf=^=D6=qLz1+8uFq-sO!z_~IG!`W=salVb* z7xT_oPr`b?hKfa-(3+<>Nvg0N4Elr3i|>g#EO@S!6ABkPE^%Wg<}NG?E>#c42i#cU zlGmdxx_+Va6ZeIon`*36sj?W>_oO>tI)-LkFf68q7j#RTiH$*(RcMn3J*eHJrS3&6 zNg`NT0q?TANff~oV1ROrA1B@BXd_wmZdJiHA_gZXbqQ)%8*3u0>9%`;zjv7nf;T&z iz+3#++=wHt^6H)?QmIoumVi&e>kf;2diJ4-7Rmo{H_D#? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 000000000..1132d52d0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-06-27 12:40+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Sessions" +msgstr "Sesije" + +msgid "session key" +msgstr "ključ sesije" + +msgid "session data" +msgstr "podaci sesije" + +msgid "expire date" +msgstr "datum zastarevanja" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesije" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b44d13a6b74ef78f8eee5ba1bfc8a405dd659f73 GIT binary patch literal 707 zcmYL`J8u**5XTLK*YYT+DNL6r@~s^Km-uuIA(4V|;*>1(W_PmZWY1pNzE?qqL_?dB zk^(*fX-Q8>Ny7)ArDS}Uy&LK0zdinsADZ8f*3JpWZR9bMA@`6^NR02u9pnOu`5#F1 z{zUF0zmS;!gGAq7pr7CME!;ueHW-$HutQd#<;l< zf?M;rh2xE@IXMRJwKbl=wAK!2p#l)UNH!XiYPmRrSu^*f@9Zh$fgKd=Ex34+q{XQ+ zrA>~Ywl1)qFLl9Qj7rZkD{0byov~d9DxjCW#M>m@;^G(6qjEOI!rlIC9n+CP}1WG z6xt8y`XGc_rs-rdX@yv?Phi^0?J!;ZppojTJoV#rBk3LV_EvutEuQRJ6TsjbW;K2$ zz%-, 2011 +# Jonathan Lindén, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jonathan Lindén\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioner" + +msgid "session key" +msgstr "sessionsnyckel" + +msgid "session data" +msgstr "sessionsdata" + +msgid "expire date" +msgstr "utgångsdatum" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessioner" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3b4e3a4552449eaceeef54c6890b367e7df34a38 GIT binary patch literal 743 zcmYL`L2uJA6vqt=h5{1O&Kw@MO_Q6XFtu~(gczGNw2EpAyPL*My`^?!J4?IIfW!&- zA{;>C#2Inq2nRj@SB^ZV>H4H!{_nl~{cI<{HrCz~jCJH8k|6hxw}_9=$X(O5Q9FZ53_>gQLO0>h^If z3ih>fLgA_A1zyjInG1`YOVxwXgc~bd|8;UmyDOjHYb*>sP$Qj6l`-hPk?#7K3~Ut) z^V0B~9%?hS3{+8R~(jgIWF<*XsA}L%f|X2zzWMi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 000000000..f645ab427 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Vipindi" + +msgid "session key" +msgstr "ufunguo wa kipindi" + +msgid "session data" +msgstr "data za kipindi" + +msgid "expire date" +msgstr "tarehe ya mwisho ya matumizi" + +msgid "session" +msgstr "kipindi" + +msgid "sessions" +msgstr "vipindi" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a81d60d04388b774130bf297d4731efcb9711f23 GIT binary patch literal 801 zcmZvX&u`N(6vqQ>fC8so;b4%EHcf8gY0xdD2r)Kks1?-|xSPh!yrp(zyR?%yzyWdM zM*jm2?2^DxZ~VCP2XJKhQ+Q6=_0lJO{PnZH?>+n9%F@_@xC-0`TEGq94PfI7VDnSp z8ZZHF0zUzJ{s*`Y`~^N;a-4I}O~71soE6Yh(7T{NK<|N`gWdvNzT!AwFXzIxjOD2= zP1Oq6t6-y)D~2L!n4_82T#A|6Lwb=Mvy<6gI~^sDSl8hF2)|^?76m9eq9T^=0ZXMa zxUFLz;U|Mw<4^|3?K}_hj$+h+7e9q*0ow4%ee4rV>WGlQudn;W_rZt{*lTWk&V6<4 zZ)38J$b(?hU-u#07S#raiVB@jBUON&Q6acSEyg33poj1pNFOIfiY9nZ zs=f}8NXt|=HyWtgHdh6@(?n#g;W|Y&F0x-mc2=&FBKurqzl$s{({Yi%E3&M}KO%dP tf2gjZ=)FD8zQRqBO~AF_s4TJFq3IbI7h9?k-=;(Jw+me56TjOI{{cI*9GL(B literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..21779b003 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "அமர்வு குறியீ" + +msgid "session data" +msgstr "அமர்வு தகவல்" + +msgid "expire date" +msgstr "காலாவதியாகும் தேதி" + +msgid "session" +msgstr "அமர்வு" + +msgid "sessions" +msgstr "அமர்வுகள்" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a2be871f237e003c9214e13b8ec87ab49cac0cc GIT binary patch literal 786 zcmZvX&ubGw6vtPsKUf7p@FqCkQp#j^i<)+0idb8yBpAx-eaud_+iqr;nb{@W%K`3bDK zV;aCV2|mbT$w|mGw-i?@PQ{d_$WD?SzBm0>R$HdqyrbzxNS|_PntT#&GZCfsCeKo- zX-h?MNFU^pqCx5tyZtzztCBMfFMWt@K3R0VJJj{4S0kS1yR`+^b6pteCf|+C%$cu7 z-DT=66Ys8n+g)%Gc9SVh1IdI+m`_IR)A+N-J1 zT;NiB8D6LPKs#B&Vo@iZEhZJ$jVHl6U7GpKt}d5!O?1*Q7LiYup2hm)mS%?CPIAc- zx}M6O@`=dCscJ0N$>g_D5#&~bc=L7JDvM!Rd@GADW$}WP#oKc9(j=qT, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "భాగము తాళంచెవి" + +msgid "session data" +msgstr "భాగము దత్తం" + +msgid "expire date" +msgstr "కాలం చెల్లు తేది." + +msgid "session" +msgstr "భాగము" + +msgid "sessions" +msgstr "భాగములు" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a64c5bb9fb0291214bcb69588a4568fb85636d0 GIT binary patch literal 747 zcmZvXzityj5XKh>e{`WhNOT~UE>X0;vmsJ+#s~q46bTC}Ip`OAeO~8$d)nQ@c9|Y2 z6&($45Q!iRgcLjgI;WtZpy2^%Df!lp9V8g(ci-&nH?wm;t}eVHh>PGlh`=Iv30#c8 zCGY{b`WN85U%_SY4Y>MG;C#P;Izz~B=oQd8OUO0o5bFGU(3{ZL&>PT0sPlb?qHQvJ z0qWxXR0ysnaRJ|RCpp;`#z>VKA_ke%g0{F7#7v7bbwxfu?19CeS2Qi#Y_VrT zyGbE!b$J>qZ%brKTUIx*Y_SJNTFQE%8D+D|>{;LRtwb0Si`Hd6fo1c>B&u zfbbr3V_BqmY7%ah4(WETbJKyerRdYUMrxUxOsiPv`*DxUq|{Wsd+1B!oX3Jig7-oi z@vhvVOC4*o(D(cOe#yF-vMmPA?@yPVNpjNc+t^?B>YMfT)88tW0`H+ptw^!gFvH?j z46L6eT&7jp>~L*_tv!u4*xISjz10?)t*1@Zl4%^$wdc~#m&A, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-05-15 00:34+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Сессияҳо" + +msgid "session key" +msgstr "калиди сессияҳо" + +msgid "session data" +msgstr "додаҳои сессияҳо" + +msgid "expire date" +msgstr "санаи анҷом" + +msgid "session" +msgstr "сессия" + +msgid "sessions" +msgstr "сессияҳо" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..462cce8c08deeee499ff105649e0d69d303acee6 GIT binary patch literal 814 zcmZvYzi$&U6vqveA3B)2f{=#}pvt*BL`ifZ6(Y1!1rbp>*xkgvyY^zAY=@*9LM%Wh z1VcxVDkKmCNJ!3#m>FS1miPl$85nrZCCxyd^trG7?(47L-Ot5^R|x7fZ~=&cv%o&! z$^d785#ah?0O$P%oCCfCuKx>gzTd#XF@*krE&?x(BXkk;5Y+9zf-ZsnnDqZn`sYs| z1jokN3!tt}mV&@Cu2b*?TUqy*Qkmciv0;%(hPzZVq{`-0U6USdcG=!^tx#Kv9oErg zqe~tz>5?Mc-Jv`Y-X<%A)TE`7tV?e86GdVXVXu8RCQZqx1~0h!y-V&iXp_FMF+x*4pepgq6T+3a%N4`SuFkE}VI7yI8$);zK1vx^<= H&x`#BKO!4} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..9f7648fcc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-05-06 07:45+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "เซสชัน" + +msgid "session key" +msgstr "เซสชันคีย์" + +msgid "session data" +msgstr "ข้อมูลเซสชัน" + +msgid "expire date" +msgstr "วันหมดอายุ" + +msgid "session" +msgstr "เซสชัน" + +msgid "sessions" +msgstr "เซสชัน" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..18fdb60386c95f74ee7a39b650ca3c9b79acd5e1 GIT binary patch literal 699 zcmYL`zi$&U6vqveA3BggojbT&E9BfI5>QHA0p)aC8}$T{UZ(W>2<~)kXq8Pe@?nhdO>=h^b={w`$9@(%ide0!EUy~ zXlrS==zC-3v$yD+G}weQ%-np2#3ah!|yXhWxz=ck|x z6OFMp){CJlWG-Gbg%g=cc{F+>#&{+}s(3|*rM#E)5|KO+$z$H_rjL?`30d?SoEMn| z?G$)pQ$9x5s1odgKefSiP=hsR&x;DA>P$@ajB0ezK!GAds8XIawyaR|y%X>2G>&Jp zS;vQta*Fd%5x1kRMXkzXU&i~<@OXH5b*XMAiC!A*QPWh5n#T4x_i?R2>OP;GfOY5x z@3JFtaFrL%nxYkldSY^^i, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-07-06 11:50+0000\n" +"Last-Translator: Resulkary \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessiýalar" + +msgid "session key" +msgstr "sessiýa açary" + +msgid "session data" +msgstr "sessiýa maglumaty" + +msgid "expire date" +msgstr "gutarýan senesi" + +msgid "session" +msgstr "sessiýa" + +msgid "sessions" +msgstr "sessiýalar" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3125a69a077701d2bf05ace1b3234a58394c2c29 GIT binary patch literal 685 zcmYL_KW`I35XBb=e{z6?s42Eggw|&p5ax^{1SC>WtXScoUwq^9Cgq9uGkZzSDWe^uMX4aQp+jIzJF;Fq5D559lPfM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..a23226bf3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Oturumlar" + +msgid "session key" +msgstr "oturum anahtarı" + +msgid "session data" +msgstr "oturum verisi" + +msgid "expire date" +msgstr "bitiş tarihi" + +msgid "session" +msgstr "oturum" + +msgid "sessions" +msgstr "oturumlar" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e55219282ab8389b3c9edee1e97fa4ff570eb79b GIT binary patch literal 806 zcmZvX&ubGw6vs!cKUhUj5HBKgtdz;_ikfy~M64}T8Vq&yK4vG|t()0pW@6G?yjY?3 z=%E+y9>fR+YGN-QJj$#Ak6!!(diCg=tVxje!Dqkw9^d!oy2sR8QUEHOH>uf z2CFHu5|AfMm`NTEHYg7hYmKFeP^2QmC?NNmp(K9dVXOMkCyRnn1zvI=Ui0vE$Gu4$ zm$*gjx}H;a1O;B@H{j zXe{x+W?L!ynpIh;EKP5B3y!szaK$+6w3)(jinW!U#x&w3TwA9?GF5);FO&JH&%9M< zf-Lb`5=1=o@ch$AO_qci%BsdqL1VI, 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Эш сеанслары" + +msgid "session key" +msgstr "эш сеансы ачкычы" + +msgid "session data" +msgstr "эш сеансы бирелмәләре" + +msgid "expire date" +msgstr "искерү көне" + +msgid "session" +msgstr "эш сеансы" + +msgid "sessions" +msgstr "эш сеанслары" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a2def308b9fd186c5160853cd72f8c61d3a49594 GIT binary patch literal 841 zcmYjNJ#P~+7&cHobY%jGiNOd_HB?UQv{k|-7Z9bDDiINtD+8NJ-0Sr&c68@73F<(* zuppR7XZ`^LNaZ6S@dMD^!h~2D7+D#4osXuk^xX6M@$+^E5)&f&T!T_3RmhE(2c~^G#r* zSAZcloIL|<>gMIa>i{uwEE85FT3lz$_&tpy8h|4(ST17Ul_5u}h{FpZb zwX1wwmVP~W%A0q*CilZ^T{SBZl3ts8g1CY=ZM+#o+?PI=cz#>!mYvIWI-RUGL;Wq$ zHJRM#SrZD!19I&km$9nr)z#?_U|DLdD5-^ni}hOYLM^&F*9zf`60UFaC>Gk;bk|66 z>N96;iHNMqx@!2+vvKi>ua7Tk<91-x!gj<%vZkVDY-8CPE@Nl0gh#D2FK;mFI1JCt zVbjuU4rBN>rWow7t~mM0R@qrH?Jz;hjN-k$Q3O0R0~rRHe5Pcf9irr8@+p0pK0m3Q*!~YS CHUYN) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..befabf065 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Mykola Zamkovoi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Sessions" +msgstr "Сесії" + +msgid "session key" +msgstr "ключ сесії" + +msgid "session data" +msgstr "дані сесії" + +msgid "expire date" +msgstr "термін придатності" + +msgid "session" +msgstr "сесія" + +msgid "sessions" +msgstr "сесії" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..493b9c228c582a2a5b45d2f121495a44bb6dfe74 GIT binary patch literal 729 zcmZXPJ#Q015QYy3A3A8DprRNWlqg!?T?9B;V}uBa6l4o4a_AS|`f|y6@3gyz9f^`e zDO`bQXeo?cBtk$zB=`Y{8tvH<{1xWx*eMw4(L1wxXJ_Wmjk$Lg#wFwyQbDdFuaG=G zB6;0ME+b!&YshybfB%VGL4G4|&so-A)H{eeKY4$TdK2ppsMk?XQ1kv@sAwP0y?~m> z#feyRr_m+wt;Wz}T7!yB4x_~bd4c@qVHhlwDz zH+d3EO{yvgeeyUB6sgA)?Ao(BS(Th=^pYnyjlz=a-6O6?ydroWb&HFx=elSloBU;% z|9R#s5_g4oE8yLycilx7!>%x;NnJ9bBBoPZ`Iey@|iE6)#Q?_iAL;)BA~GRBGj`TDWuY_ zMX6*FS&wB)Q4q6uTXt~s)@1M|gvHiKD$4%36-;i#K^Gd*kA&t9YP82&Sky2BIeABM2!cmMzZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 000000000..62f625561 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "کلید نشست" + +msgid "session data" +msgstr "نشست کا ڈیٹا" + +msgid "expire date" +msgstr "مدت ختم ھونے کی تاریخ" + +msgid "session" +msgstr "نشست" + +msgid "sessions" +msgstr "نشستیں" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9346a6c382af951824992dbee8d3482a1670aefe GIT binary patch literal 744 zcmYL`J#P~+7{?DNFFFtd5*vfJf-2|iB9zo26{56KBmz;nvb#C=;^xji{F3DI8Ca3n z82AE=W#t2OWP^ndz{<$uT+%$!@Ba4VzaQK8{C=?YDT25SJOWbSF7OcuaRJ-`z5^lu z0|?$r;2!W32>Cxi@cjk8T#KTApfT|IdgJ>F8uonyeF%C1dLQ%>H28jj!nUPn3pB*d zMj}{R#x3~XSdF81!dj`7jl{f?Mxcy45!oiW){x{^lZmL;V;c>PJ{Kd0`x$;OOsK?A zcFt9<<6}{2%`n8Rl%j|qS2TeD_rj+J;I%hFPwEI3_esN4KK+V z>YPe?V@JbBi*=ZZ_NvCBIk2%$7sqwIN3C?UNyDm WsN~y)FSP@sMC(;F;f36oLy`aEbI!E@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 000000000..47fa681e5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nuruddin Iminokhunov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 01:18+0000\n" +"Last-Translator: Nuruddin Iminokhunov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sessiyalar" + +msgid "session key" +msgstr "sessiya kaliti" + +msgid "session data" +msgstr "sessiya ma'lumotlari " + +msgid "expire date" +msgstr "tugash vaqti" + +msgid "session" +msgstr "sessiya" + +msgid "sessions" +msgstr "sessiyalar" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..69b82fd33a4128ce356ed31738d577305ea28117 GIT binary patch literal 679 zcmaixJ#Q2-5QY~B5G^!NQ@8|0zO@6<9ljhwghYyzgHyCzZ*C{MPIm2;?fa6D=+aRk zYM=vp8YD!KE-d%~JKd5(*>T1*TEo$%|qXz$b)X?W6D%#KIUPBFWy^(0;LW7{K z37FN&0?DL@$boap=!J$ud08C6e383oV9gH5(iI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..731d24ce5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran Van , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "session key" + +msgid "session data" +msgstr "session data" + +msgid "expire date" +msgstr "Ngày hết hạn" + +msgid "session" +msgstr "Phiên" + +msgid "sessions" +msgstr "session" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d762f61043b83b5dae59a77c4ce5ff88ded5328 GIT binary patch literal 722 zcmYL_zi$&U6vq!JKXfoLGk9!OIp;$_T8ALi&`L!OMCD*bCg)t-UhI?YG%0@oEU+Mz zN{EPwg@J;E5J(6lRwPD779eUTRz{xhF3poZ`o8!4_4ALPXJ>Xih?BrMAOcPUj{p}R zfK$Ln!1ccZ&ifrW1N;D7{}|rmioEue*=YW`Ro}` z7sm_nU?~r`|5%xOx41DvN#pThCNxJev)nU9bE2-v4vS5`J;{yN(rSaZEnbcB9j@IZ zisB6>6Xmb-OlgaoCJ`}S>L&(AiXy*tGr|qcnFTMt2B%SUo`e@M32|6OVMs}Jo`i&e z5wG(t;bu;KRZJFfxQN0_^a7bD5dIo77Dt*%lQOF`Mc0{>!k{%SVxFSQa2qJErg>Qr zvZJoR9+~u6!g0h|kD^9bNNzZqbqSk8vt4U58U%yEpkm!*(c!~NTlIqCZ4*h$F~R-r z-Nubz&Tp=v; zVj&ZX7VZgqcw>t4v;0=t*DS>=O7{#!GRsR-4{NAM>!jv;zdt?O-y3=RUmlL1zZmbn cKiGXY=@m=koj2phugl(_y$1(RUQP`E0f#o#3;+NC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..ee2585962 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ronald White , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "会话" + +msgid "session key" +msgstr "会话密钥" + +msgid "session data" +msgstr "会话数据" + +msgid "expire date" +msgstr "过期时间" + +msgid "session" +msgstr "会话" + +msgid "sessions" +msgstr "会话" diff --git a/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ad835229439f245b21807e1af47d5a89f469f3f9 GIT binary patch literal 733 zcmYL`J%|)B6vszBKN!Wr+9Ks0M|KiX_b%&-xZc5mi_1A`DRCw@le^huNV4vpm7Nw^ z`US#aVJm_t3RZ%xl~~%yEn3-H`m(dL`{0*Z=e z_)ZL^+gxQj+!UoY4tH%PQ+#=lSsZJI!rrwQcZ}c;y!Z<2#?To;&tXC_Z6Zn;X)Y5= z2pI9ExGR0nxvz=IDyFN5o@ZytGJy!Ma_ewxxUvOz+A!3~g@R$Aa3_}>T}YCoQE-!7 z%KBUujYRh^LXpY_JQFw;yzfh-5>}wan9CtoOK357u4GX(91a`K_m*2?D16j#uVBzulHF zcugfbl`3Os<&Jc-BQrGFE9?~m!wbBwP2V!4%1LV5w1ui^o3z6D^X@-, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Chen Chun-Chia \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "session 鍵值" + +msgid "session data" +msgstr "session 資料" + +msgid "expire date" +msgstr "到期日期" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/venv/Lib/site-packages/django/contrib/sessions/management/__init__.py b/venv/Lib/site-packages/django/contrib/sessions/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sessions/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f635c0bfb10383cb0e45edc27d56f919e9fae4c0 GIT binary patch literal 208 zcmYk0F$w}P5Jj`Hg$N$RVofh1f}$28qSy_FBpa5jZn9*O1&`#F1S_v#Wo1(7hyOl* z28OZ2;ebTF&rgx^mGG}DmU%Sh5hXd2QMS7im&QMQa4~@sDu-|gh#ZzyhDI5Wu-1MP z1gx|}U+kT&mGsal)4^5?KVU2gXpr{bFHAri2LLU1qd%#wY%gjWzrtQXO1_}RJ`ex^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..295bcf8ab4b8bb75ee1675afd0a8661df681f2db GIT binary patch literal 1010 zcmZWoL2uJA6t6l zLkwpq#{tIHCK<_{z^QE~b8|27@>bBo=om4Vc~^*e+`DvwHfxPhul*A;pdPNeX=udgqF+d#Vw21fyAC?E_64kOID zLV?R%c-E`ht1OG?C>Au~RF#6pn#OdZq?pTuN<~?!_{3xv)JQtXI0VYlQ2wp}Kckv! zol2qU`HTx{W}GJRI`7Hc`Qm;> z7`=iOZ*9+qaGP84#y1u%EdGlobKJxdz4A8#h$r_P{UTx z#{W?Fdu?T#r7WgkYdjo}Po9mU;pq5eGz|Pz?y-@I2VGmdidKbJH%HQ(Cs?QraXsJWkEyG6^50 zN}K)XO3tD2;Taca;nOq;b!zy20o{$KT!(BPi>Vw;q%bN?2G?^K06pN`=7Y1EEP7BQ zzmDh^7gcKpB+7Uf;OHGt8<^m2?1LuQ#boI&$#Su^Vn@FT9syxGQ6%D=M^UvAtyl`S zA4PA=I9r{#GoBU7hpctEYiiT_TA+ESo{2q8<~tG%OMr@GPnfGkbwxdfX{nSChp wv>DRwUytJbf5r9__#Mjr$$AKN!nLPuKrt`>(ElN2H_*0Y~vm056CbQi~s-t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/management/commands/clearsessions.py b/venv/Lib/site-packages/django/contrib/sessions/management/commands/clearsessions.py new file mode 100644 index 000000000..899f53798 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/management/commands/clearsessions.py @@ -0,0 +1,21 @@ +from importlib import import_module + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError + + +class Command(BaseCommand): + help = ( + "Can be run as a cronjob or directly to clean out expired sessions " + "when the backend supports it." + ) + + def handle(self, **options): + engine = import_module(settings.SESSION_ENGINE) + try: + engine.SessionStore.clear_expired() + except NotImplementedError: + raise CommandError( + "Session engine '%s' doesn't support clearing expired " + "sessions." % settings.SESSION_ENGINE + ) diff --git a/venv/Lib/site-packages/django/contrib/sessions/middleware.py b/venv/Lib/site-packages/django/contrib/sessions/middleware.py new file mode 100644 index 000000000..2fcd7d508 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/middleware.py @@ -0,0 +1,77 @@ +import time +from importlib import import_module + +from django.conf import settings +from django.contrib.sessions.backends.base import UpdateError +from django.contrib.sessions.exceptions import SessionInterrupted +from django.utils.cache import patch_vary_headers +from django.utils.deprecation import MiddlewareMixin +from django.utils.http import http_date + + +class SessionMiddleware(MiddlewareMixin): + def __init__(self, get_response): + super().__init__(get_response) + engine = import_module(settings.SESSION_ENGINE) + self.SessionStore = engine.SessionStore + + def process_request(self, request): + session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME) + request.session = self.SessionStore(session_key) + + def process_response(self, request, response): + """ + If request.session was modified, or if the configuration is to save the + session every time, save the changes and set a session cookie or delete + the session cookie if the session has been emptied. + """ + try: + accessed = request.session.accessed + modified = request.session.modified + empty = request.session.is_empty() + except AttributeError: + return response + # First check if we need to delete this cookie. + # The session should be deleted only if the session is entirely empty. + if settings.SESSION_COOKIE_NAME in request.COOKIES and empty: + response.delete_cookie( + settings.SESSION_COOKIE_NAME, + path=settings.SESSION_COOKIE_PATH, + domain=settings.SESSION_COOKIE_DOMAIN, + samesite=settings.SESSION_COOKIE_SAMESITE, + ) + patch_vary_headers(response, ("Cookie",)) + else: + if accessed: + patch_vary_headers(response, ("Cookie",)) + if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty: + if request.session.get_expire_at_browser_close(): + max_age = None + expires = None + else: + max_age = request.session.get_expiry_age() + expires_time = time.time() + max_age + expires = http_date(expires_time) + # Save the session data and refresh the client cookie. + # Skip session save for 500 responses, refs #3881. + if response.status_code != 500: + try: + request.session.save() + except UpdateError: + raise SessionInterrupted( + "The request's session was deleted before the " + "request completed. The user may have logged " + "out in a concurrent request, for example." + ) + response.set_cookie( + settings.SESSION_COOKIE_NAME, + request.session.session_key, + max_age=max_age, + expires=expires, + domain=settings.SESSION_COOKIE_DOMAIN, + path=settings.SESSION_COOKIE_PATH, + secure=settings.SESSION_COOKIE_SECURE or None, + httponly=settings.SESSION_COOKIE_HTTPONLY or None, + samesite=settings.SESSION_COOKIE_SAMESITE, + ) + return response diff --git a/venv/Lib/site-packages/django/contrib/sessions/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/sessions/migrations/0001_initial.py new file mode 100644 index 000000000..83b0bbc2a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/migrations/0001_initial.py @@ -0,0 +1,38 @@ +import django.contrib.sessions.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Session", + fields=[ + ( + "session_key", + models.CharField( + max_length=40, + serialize=False, + verbose_name="session key", + primary_key=True, + ), + ), + ("session_data", models.TextField(verbose_name="session data")), + ( + "expire_date", + models.DateTimeField(verbose_name="expire date", db_index=True), + ), + ], + options={ + "abstract": False, + "db_table": "django_session", + "verbose_name": "session", + "verbose_name_plural": "sessions", + }, + managers=[ + ("objects", django.contrib.sessions.models.SessionManager()), + ], + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/sessions/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/sessions/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac89bff0b52089d0f4372657ddc41bf007f4e62b GIT binary patch literal 1053 zcmYjQJ8#rL5VqHQKKoutNO)8zB`&xN5*0!yQlf-{M2LiDWnryvCl_D*V%HZgCs9Fr z|9}EY{*oms8q!09P{OQzr(~@i&&ex!!+Qwz5j>WppNs*gk% z!i)`O;-ADMv6z)mMonYi5SE~y4MD*gH$GXcA~T})5e;FB=A51o;h@eDu4v6ol-ek{qJyX1 zIXNLCZQBzoVpXhtq2dm-#_e%uY=7;3Gw{?D>vK9XSx;;r*1M&9u*6t4k3cB|%i5}D zf-|_de1y36W=qv3s*XL1rSWMHLpmx>OILx6cpS~3?3{xPGX+7)6JYIJMhTY}Iu7eB zg9={o*;3lnl4nZY2G)jY9!UsL2eXBs4ZtI{fg{2oN(D?2{+OquELa3Bn@h%7Fv_FM z;h`!d9~MkI7CelhjXw_g<}{N=vYz>zqC&xh=sy~yqY0%5}xuANOkC~ zlul3;83bi32ynQQ7?AG-!TSl1wZE1GU4&SkZyL4bsvYcjuJLJ)MfV z$1p8ww!4c~$58^6SlV^HWpkLNg^WVk)~>yydQb;7uCkTou()vF4S63;D)RTk&NKfl zPD%N1CQ5OCHych8NDJlfN5#uY=)_=rYGkyR7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7e8bdec1b43f9f7f608739d213a0b947e468495 GIT binary patch literal 208 zcmYk0u?oU45QbCfAVMF+p>`J$K~V=0QQQtonuc=KCMA~?d?a5;^aP}W>kIulx1gGEM?2(_ZD!OC#^t$B_LZJv+X S>%Bi|bm=Z~8lIt^SIj^i0Z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sessions/models.py b/venv/Lib/site-packages/django/contrib/sessions/models.py new file mode 100644 index 000000000..e786ab4ea --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/models.py @@ -0,0 +1,35 @@ +from django.contrib.sessions.base_session import AbstractBaseSession, BaseSessionManager + + +class SessionManager(BaseSessionManager): + use_in_migrations = True + + +class Session(AbstractBaseSession): + """ + Django provides full support for anonymous sessions. The session + framework lets you store and retrieve arbitrary data on a + per-site-visitor basis. It stores data on the server side and + abstracts the sending and receiving of cookies. Cookies contain a + session ID -- not the data itself. + + The Django sessions framework is entirely cookie-based. It does + not fall back to putting session IDs in URLs. This is an intentional + design decision. Not only does that behavior make URLs ugly, it makes + your site vulnerable to session-ID theft via the "Referer" header. + + For complete documentation on using Sessions in your code, consult + the sessions documentation that is shipped with Django (also available + on the Django web site). + """ + + objects = SessionManager() + + @classmethod + def get_session_store_class(cls): + from django.contrib.sessions.backends.db import SessionStore + + return SessionStore + + class Meta(AbstractBaseSession.Meta): + db_table = "django_session" diff --git a/venv/Lib/site-packages/django/contrib/sessions/serializers.py b/venv/Lib/site-packages/django/contrib/sessions/serializers.py new file mode 100644 index 000000000..06b147eb1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sessions/serializers.py @@ -0,0 +1,5 @@ +from django.core.serializers.base import PickleSerializer as BasePickleSerializer +from django.core.signing import JSONSerializer as BaseJSONSerializer + +JSONSerializer = BaseJSONSerializer +PickleSerializer = BasePickleSerializer diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/__init__.py b/venv/Lib/site-packages/django/contrib/sitemaps/__init__.py new file mode 100644 index 000000000..8dc6b589e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sitemaps/__init__.py @@ -0,0 +1,238 @@ +import warnings +from urllib.parse import urlencode +from urllib.request import urlopen + +from django.apps import apps as django_apps +from django.conf import settings +from django.core import paginator +from django.core.exceptions import ImproperlyConfigured +from django.urls import NoReverseMatch, reverse +from django.utils import translation +from django.utils.deprecation import RemovedInDjango50Warning + +PING_URL = "https://www.google.com/webmasters/tools/ping" + + +class SitemapNotFound(Exception): + pass + + +def ping_google(sitemap_url=None, ping_url=PING_URL, sitemap_uses_https=True): + """ + Alert Google that the sitemap for the current site has been updated. + If sitemap_url is provided, it should be an absolute path to the sitemap + for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this + function will attempt to deduce it by using urls.reverse(). + """ + sitemap_full_url = _get_sitemap_full_url(sitemap_url, sitemap_uses_https) + params = urlencode({"sitemap": sitemap_full_url}) + urlopen("%s?%s" % (ping_url, params)) + + +def _get_sitemap_full_url(sitemap_url, sitemap_uses_https=True): + if not django_apps.is_installed("django.contrib.sites"): + raise ImproperlyConfigured( + "ping_google requires django.contrib.sites, which isn't installed." + ) + + if sitemap_url is None: + try: + # First, try to get the "index" sitemap URL. + sitemap_url = reverse("django.contrib.sitemaps.views.index") + except NoReverseMatch: + try: + # Next, try for the "global" sitemap URL. + sitemap_url = reverse("django.contrib.sitemaps.views.sitemap") + except NoReverseMatch: + pass + + if sitemap_url is None: + raise SitemapNotFound( + "You didn't provide a sitemap_url, and the sitemap URL couldn't be " + "auto-detected." + ) + + Site = django_apps.get_model("sites.Site") + current_site = Site.objects.get_current() + scheme = "https" if sitemap_uses_https else "http" + return "%s://%s%s" % (scheme, current_site.domain, sitemap_url) + + +class Sitemap: + # This limit is defined by Google. See the index documentation at + # https://www.sitemaps.org/protocol.html#index. + limit = 50000 + + # If protocol is None, the URLs in the sitemap will use the protocol + # with which the sitemap was requested. + protocol = None + + # Enables generating URLs for all languages. + i18n = False + + # Override list of languages to use. + languages = None + + # Enables generating alternate/hreflang links. + alternates = False + + # Add an alternate/hreflang link with value 'x-default'. + x_default = False + + def _get(self, name, item, default=None): + try: + attr = getattr(self, name) + except AttributeError: + return default + if callable(attr): + if self.i18n: + # Split the (item, lang_code) tuples again for the location, + # priority, lastmod and changefreq method calls. + item, lang_code = item + return attr(item) + return attr + + def _languages(self): + if self.languages is not None: + return self.languages + return [lang_code for lang_code, _ in settings.LANGUAGES] + + def _items(self): + if self.i18n: + # Create (item, lang_code) tuples for all items and languages. + # This is necessary to paginate with all languages already considered. + items = [ + (item, lang_code) + for lang_code in self._languages() + for item in self.items() + ] + return items + return self.items() + + def _location(self, item, force_lang_code=None): + if self.i18n: + obj, lang_code = item + # Activate language from item-tuple or forced one before calling location. + with translation.override(force_lang_code or lang_code): + return self._get("location", item) + return self._get("location", item) + + @property + def paginator(self): + return paginator.Paginator(self._items(), self.limit) + + def items(self): + return [] + + def location(self, item): + return item.get_absolute_url() + + def get_protocol(self, protocol=None): + # Determine protocol + if self.protocol is None and protocol is None: + warnings.warn( + "The default sitemap protocol will be changed from 'http' to " + "'https' in Django 5.0. Set Sitemap.protocol to silence this " + "warning.", + category=RemovedInDjango50Warning, + stacklevel=2, + ) + # RemovedInDjango50Warning: when the deprecation ends, replace 'http' + # with 'https'. + return self.protocol or protocol or "http" + + def get_domain(self, site=None): + # Determine domain + if site is None: + if django_apps.is_installed("django.contrib.sites"): + Site = django_apps.get_model("sites.Site") + try: + site = Site.objects.get_current() + except Site.DoesNotExist: + pass + if site is None: + raise ImproperlyConfigured( + "To use sitemaps, either enable the sites framework or pass " + "a Site/RequestSite object in your view." + ) + return site.domain + + def get_urls(self, page=1, site=None, protocol=None): + protocol = self.get_protocol(protocol) + domain = self.get_domain(site) + return self._urls(page, protocol, domain) + + def _urls(self, page, protocol, domain): + urls = [] + latest_lastmod = None + all_items_lastmod = True # track if all items have a lastmod + + paginator_page = self.paginator.page(page) + for item in paginator_page.object_list: + loc = f"{protocol}://{domain}{self._location(item)}" + priority = self._get("priority", item) + lastmod = self._get("lastmod", item) + + if all_items_lastmod: + all_items_lastmod = lastmod is not None + if all_items_lastmod and ( + latest_lastmod is None or lastmod > latest_lastmod + ): + latest_lastmod = lastmod + + url_info = { + "item": item, + "location": loc, + "lastmod": lastmod, + "changefreq": self._get("changefreq", item), + "priority": str(priority if priority is not None else ""), + "alternates": [], + } + + if self.i18n and self.alternates: + for lang_code in self._languages(): + loc = f"{protocol}://{domain}{self._location(item, lang_code)}" + url_info["alternates"].append( + { + "location": loc, + "lang_code": lang_code, + } + ) + if self.x_default: + lang_code = settings.LANGUAGE_CODE + loc = f"{protocol}://{domain}{self._location(item, lang_code)}" + loc = loc.replace(f"/{lang_code}/", "/", 1) + url_info["alternates"].append( + { + "location": loc, + "lang_code": "x-default", + } + ) + + urls.append(url_info) + + if all_items_lastmod and latest_lastmod: + self.latest_lastmod = latest_lastmod + + return urls + + +class GenericSitemap(Sitemap): + priority = None + changefreq = None + + def __init__(self, info_dict, priority=None, changefreq=None, protocol=None): + self.queryset = info_dict["queryset"] + self.date_field = info_dict.get("date_field") + self.priority = self.priority or priority + self.changefreq = self.changefreq or changefreq + self.protocol = self.protocol or protocol + + def items(self): + # Make sure to return a clone; we don't want premature evaluation. + return self.queryset.filter() + + def lastmod(self, item): + if self.date_field is not None: + return getattr(item, self.date_field) + return None diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..241c84ba64a448741ba1970d27e7033db2d5a97f GIT binary patch literal 6631 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 RZ7y1iw%2IAX8d@?|9|!_8+QNz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9c66c41bee920a1c12e6c40bd66c82121fbc1f9 GIT binary patch literal 596 zcmYjO!A{&T5VaF$*@e&pLTXj@z;&gPy;oHQ0s)5>RYkp67M2rxSEf!JY-a^~g`eS< zBK6c$@4d9AjyGGCk^DSw#`BbUvAet52;$fE_wqN~KO%V^1jrE_{}wb{CEo<{=Y z2#$XPpb*6p(L`dJ%7hY?$@Br!ktCp=^)Ie;P@hEW2kq5sc_W&IEo52LRx0C*<1W}U zt&Ci~-1I8j1gFcw!)Ohot4S0&h$@%Ut$xgTBWlHYzs)&_bSCCG=eM0OLx=83H5Z); zT!1>CNBN$_UXMA=m&%patF_D%a?#s0{E;W`*jKNdXJ0z+1v|A>SF0v?cCN!kSF$th zd^r5k+uw!hn?M>-I?8;`OOT=D5?|q z{rKH~4#!PG{)>~VKL;kCLX+n}7-2LcG4@tQb1Swej_u6Oo!BvBC#&Ud?B-tVnRzYq z^B@k)*v;yBBW{?nmxXy0M`rA2&3q%?FykO=<(u&)jO(oNgv48XD+q%qXtHg#!CFt~ zlE&A7M}y5EVmoY$T{FCGMt?`TyU*d4?9WZwR6gws%nQ zT_E2RO-8WwpY#DqiMIYl|4tV+quL&WKkgE38zu9bMVS_ipMKCT%92g6OT_Rvo$-12 z$Gr#TVX5Ta!(@a{Ipzt2w{#tR)yb4gRXK?m$;y57*z~?wJ^UH1oTF(md`4dI&+hbp zFF~yTU@B$O|GXSdb1<*$f0e4Qr-%J7Qz6yfeNm42Q1xfLnDxI+5Bq5Sy-6~B1SXe# zHcpCBxj!rmCDOxvT+G2``?Hikmc7YYRZEM43jigNE|6WTP8~Xb`*a}869y_7_3mcn zFv;X6J+oJ!vAdSof==upxrSsD$u^KGyeb?4$7ptGlR7oA3-cG7t9uNL345n`_F^NM zOtN&CsI)Bhky8( z^xV22pOZh`>st$d5hz;+ODb*vC5u1@V~3F`5%1_)Vc~31S2gW``~4Jf^we53n62yD z9lN@5WbcwisJ(MfhZmF*{~;JVAoJV}en1uyV|RW$*y z;c+lYMro0#Qp7cJWkXhFyh#{lWU! z3Lt-CGDTIxol?Aonj9R9U!sD>6$Npa9Lh4ADn0;pm4o-VM4f@2K^*`Y!tpwY$~F); z@Tp_9sBgP;o3`Mq(_L$uS}!d-r0z?x2b*534?zgN0VOm(TE;-B4_1E@O5i#&rQ&UE zX*#1~M_B+7aPN}-1#*YBZbA-Oc!dLSvo8>KWbB;Rn8oZ1fE@#ZJ+&> z68zwWaF@#$0)OZ1AFueqn*W%nU4XUC>be22c39)7vuMJde=sLe@q@aqgYz2~U?<%i z-((@=(1%1gZkB?5P@7cAlIH%y9y%?0YbtlLex zZ8Fx+Tz6!8*sSZ%<+9tIKdjTL8|_j>F4Z5;GUz?c!U zNF1&NrYeQI8K-YvW%Z11bgU_mCOMgRU$ORUllyl8;nR$Ng4IBxdwl|SgKW39AXwP8 S>Xu`H)x)2xTbHBOPyYjvT)ZCu literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/apps.py b/venv/Lib/site-packages/django/contrib/sitemaps/apps.py new file mode 100644 index 000000000..70c200c63 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sitemaps/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class SiteMapsConfig(AppConfig): + default_auto_field = "django.db.models.AutoField" + name = "django.contrib.sitemaps" + verbose_name = _("Site Maps") diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/management/__init__.py b/venv/Lib/site-packages/django/contrib/sitemaps/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sitemaps/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..180f12b2cb877e58552748209db781b532f645a2 GIT binary patch literal 208 zcmYk0F$w}P5Jj`Hg$N$RVofh1f}$28qSy_FY&I-eO|oQ?1&`#F1S_v#Wo1(7hyR9| z51+Ba;ebTF&(AW=SHi!txXhz5kEqCzjI!OGxOD#EgNq5AP&$M|K;*ErB4}wm!dm%F zC}E`>`eN^FBZY@fnhv(A1XNxYEf*JFON6T7rnXdA$$YHnhl`Y2<{D9_lq Ty*>Io* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__init__.py b/venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sitemaps/management/commands/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc42da2bf3b11ae2349db21931771007a97d3bf9 GIT binary patch literal 217 zcmYk0K?=e!5JgkzLWCZ~Ma^DB1Vvqlh~jQAq-iLrCMlV;Ab26KB)IYlu3VX{^uxU2 z&xg<0EE|xZ_vu;0{fhWk63i?NrU4~6kYTdD6Bo}vd~WkG98o%ieT&FpVMVK@@dzvB z*KGky<XL1Ufgc5Z$#MH%i?CEeI7ZzFKOWJ3@RFQ4T0nATE}LwefBf2it3Q*F{8?IM6FU zq<_g0Cr;cs^?;bMof5=KJD$mmXWqQ$$eo=Lf%EJA_gQEW@&kj-<3R8Pu090A38y(J zXhbRcR&Et`WK(iXxXqml!X06MwIhcQ-jcxm32%@~+H6-@IZx(N&T|n!_>5_BB#VNT zJjIgD0}#4#J~)Czl#|HfG_twH?F#~}p*cJU+=UTa%~s!N_4EXW_{Z%K|5IibJ}dpY z;>-x{>&%FPRfm4XwDx6XGFh_RuT}2L({(n*+3SNou6_hp`(V!L5|&34-z?fifP}jk zae`Q;&2~R0fyP(#G3+`hnVRd>{&?J{#*2D4q_d@skLVDbD6gFIzGP|08_)kqrA-_I0I9UH0uD%DxkaN)a0IhXEJouolnRTYhg^K9bHNC)L zf*b}`m)ZL-qZKL`*vf-P5z_ouXfjabOqDE zZH7rwvO*+DGfI*|@;XP~OOlT@%lnM85P79;LOZpO1_j$NI8zP4;B5yEi9?5$=d{00 zgF$q+6DI713D?3Xq%FFComC?ID^)my|CK^g+ddl;TLA5 + +{% spaceless %} +{% for url in urlset %} + + {{ url.location }} + {% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %} + {% if url.changefreq %}{{ url.changefreq }}{% endif %} + {% if url.priority %}{{ url.priority }}{% endif %} + {% for alternate in url.alternates %} + + {% endfor %} + +{% endfor %} +{% endspaceless %} + diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml b/venv/Lib/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml new file mode 100644 index 000000000..f19e622c5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml @@ -0,0 +1,4 @@ + + +{% for location in sitemaps %}{{ location }}{% endfor %} + diff --git a/venv/Lib/site-packages/django/contrib/sitemaps/views.py b/venv/Lib/site-packages/django/contrib/sitemaps/views.py new file mode 100644 index 000000000..cd315fa06 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sitemaps/views.py @@ -0,0 +1,107 @@ +import datetime +from functools import wraps + +from django.contrib.sites.shortcuts import get_current_site +from django.core.paginator import EmptyPage, PageNotAnInteger +from django.http import Http404 +from django.template.response import TemplateResponse +from django.urls import reverse +from django.utils import timezone +from django.utils.http import http_date + + +def x_robots_tag(func): + @wraps(func) + def inner(request, *args, **kwargs): + response = func(request, *args, **kwargs) + response.headers["X-Robots-Tag"] = "noindex, noodp, noarchive" + return response + + return inner + + +@x_robots_tag +def index( + request, + sitemaps, + template_name="sitemap_index.xml", + content_type="application/xml", + sitemap_url_name="django.contrib.sitemaps.views.sitemap", +): + + req_protocol = request.scheme + req_site = get_current_site(request) + + sites = [] # all sections' sitemap URLs + for section, site in sitemaps.items(): + # For each section label, add links of all pages of its sitemap + # (usually generated by the `sitemap` view). + if callable(site): + site = site() + protocol = req_protocol if site.protocol is None else site.protocol + sitemap_url = reverse(sitemap_url_name, kwargs={"section": section}) + absolute_url = "%s://%s%s" % (protocol, req_site.domain, sitemap_url) + sites.append(absolute_url) + # Add links to all pages of the sitemap. + for page in range(2, site.paginator.num_pages + 1): + sites.append("%s?p=%s" % (absolute_url, page)) + + return TemplateResponse( + request, template_name, {"sitemaps": sites}, content_type=content_type + ) + + +@x_robots_tag +def sitemap( + request, + sitemaps, + section=None, + template_name="sitemap.xml", + content_type="application/xml", +): + + req_protocol = request.scheme + req_site = get_current_site(request) + + if section is not None: + if section not in sitemaps: + raise Http404("No sitemap available for section: %r" % section) + maps = [sitemaps[section]] + else: + maps = sitemaps.values() + page = request.GET.get("p", 1) + + lastmod = None + all_sites_lastmod = True + urls = [] + for site in maps: + try: + if callable(site): + site = site() + urls.extend(site.get_urls(page=page, site=req_site, protocol=req_protocol)) + if all_sites_lastmod: + site_lastmod = getattr(site, "latest_lastmod", None) + if site_lastmod is not None: + if not isinstance(site_lastmod, datetime.datetime): + site_lastmod = datetime.datetime.combine( + site_lastmod, datetime.time.min + ) + if timezone.is_naive(site_lastmod): + site_lastmod = timezone.make_aware(site_lastmod, timezone.utc) + lastmod = ( + site_lastmod if lastmod is None else max(lastmod, site_lastmod) + ) + else: + all_sites_lastmod = False + except EmptyPage: + raise Http404("Page %s empty" % page) + except PageNotAnInteger: + raise Http404("No page '%s'" % page) + response = TemplateResponse( + request, template_name, {"urlset": urls}, content_type=content_type + ) + if all_sites_lastmod and lastmod is not None: + # if lastmod is defined for all sites, set header so as + # ConditionalGetMiddleware is able to send 304 NOT MODIFIED + response.headers["Last-Modified"] = http_date(lastmod.timestamp()) + return response diff --git a/venv/Lib/site-packages/django/contrib/sites/__init__.py b/venv/Lib/site-packages/django/contrib/sites/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1aa805aa99abfd0e86378f5bbd2f551774ebd78a GIT binary patch literal 194 zcmd1j<>g`kf-iA*lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_&vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(-S(QD%}pNU~TzK0Y%qvm`!Vub}c4hfQvNN@-529mx7( JCLqDW000GdG~ECI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/admin.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3386abd1360078d81090fb50fffe4589280bebab GIT binary patch literal 542 zcmY*VJx{|h5Vhl^gwirGAn^-2(5?s}1Oib8KnTQQSy)bNic3C7L)6@6Ntg_WNCe_Idf1yyE%pgTEGGu!9a82%2b`k(_c$JrA-VXPi-D z=u>FeGaVDnbofYgXy`P0U=NgcbaYMzoe%6L1KLDN=e9r+p4-Z#KKs`w20Q4mf?x=z zn(#nV&d@_0;3U>8`p(^UOwe?6nJZf~VWDz!GKiX3N>8P1x>Dw)t~1YjQr^}oo8RzW zW}%YW!YotwybngX^jcn7lWBM%&I{7QSF*P$F2FbtXElHl`(;|^rl>%SZFN{D;=nqn z)=ynIHEAX8OmQcUY$5=ExIRfS2YYx15ViL!n`BeIiiF^Xxa82S#1SDxRn&4o5u$LhR#?v3SvK|V2HRWFh+BK* zKfsZ{v=S#yy>sHk*qcHQINH&SN1l1}-lUmKMhMQY_dn*3J%oPRVEY6RJcmzbU^wDf zq6!m?t?x;%@`>+!Uj|i3LgxoEss?1>{7}Z#kc_~O_&|=Ugd`XpBOdeNCE`PYFMKlL zqZ2e8UqJ^n#oh2=wK{C-MOi>F$v=qvlKzT%p`H+CDINKjb5D1R|It;&DuT?vX%*+`qsi;sFmY5gG6Z zzz(|c2|&_4&h>r1WOdP`e4bVf7gDDOt!a)*A^CcDlgpdhsB)g#Q8WqN^W37mKGwH% zAHt^}f-z``jrSQy|Ked}{I7utjlYbRgKrRX1US6e6rgEQbD^fO3gJ~ZfKIi@jfx>s zwqh46QIy&UrF;lU@Rk+23mp<5F3>_Qz9Y2*x!>&YN%l?)rL#A!)+~F`JanfEs{@4HU>Y_-zq>bwg<5`KOI zx@n7U2k+wbEyqVsXX^5^Y23w>)~phgb|XrG*;ZOVq4Z)mPb^>L$g*^D5s%gKQ zJ;~Q^@E*S^ cx2CZYDmzjaKkfN?X4gvF`vfI;^YeE7KlG0a6#xJL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/checks.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/checks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97d76e3485fe4302a53138e1f6a1fde4ec6344f9 GIT binary patch literal 575 zcmYjOJ#X7E5G5(e4*b!fLuL&{0S&Q}wJ3@LjoSt-f}nO6L8w8Aj7;150PmC{S)DaM zq<=|3rcB*4bxDs(5afV6ygQQby#uT9c)%#`f8C}F&e)x6UWTCNBPG0{qL|`aR`8f} zhs9PDUhEO}lz+`)Uj=g(_5RXL7V&luG@>bUARNrBt!zdL&*7MT%5Ri#NCg>k#dpH) zqd>m)&{u57F*p}H0sGif!s*(q+;ZqYn35P`k7^XUu zWoSy&xwcmWFsNZNJ32ffTf(TQ-}YA$B%-y>QadnUNJz}sP^^u5& zvaXj|Ri2w1+TP~3v^o4?c1WlHvQO`lpP(%yKNB5N0 zh`-|g!@&0+e9w+)a2f^i@R4ic{B|40ub(GYPaa9T&AKPu7B7n9ZTH?6m1?&7gZn_} KIVlnwdH(?{8I{Ta literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/management.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/management.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4dede7cfd2cc97bba648b00dfd800db9614061c GIT binary patch literal 1274 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 I0(#l{4{Sa;s{jB1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/middleware.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/middleware.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64f19c00b5ceed7a9dc9e71294101c24ca7ec98d GIT binary patch literal 742 zcmZuvv2GMG5Vd#ra+l+hP=J(j8;X<2T}6Wsia10lNQ8)JRx2E@Z7v&j*B6f+AWE0~ z48ODz6;*mFDrWW$azczWV~iydst+nvKw>&kqV&K#Cs%H|ev=>7iO zc%g!GrttzwZxl7GTZG9zI_zRFEaRGGk>*)U;5Q6`5(MhC4`<6M$2jB;?DEAhMZ0@Q z{i*aR7!TP<%e6p1%=IvA zpaX>gOZX`1-Vh<%UG6dozN}!P&B7TaeQ6sKlN&zAI_ O(+}%_Mr;&4h<^hj=fZLT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1e4519bc05ec56e6f4e2152c125f9f47af2b431 GIT binary patch literal 4273 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 A@&Et; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a98f56d2aa7d67e19448eaf617b80e1d0c44999b GIT binary patch literal 682 zcmY*XJ#X7E5G5r!Hf$MafeanFYKXmcD2k$hizY)66fwFOM6C}pwj4=xc~pP~&eZ;a z{)1%fUlPzMQ}#@qdM68oa}bZXd*su*2b%GC$S|J1{z*?g#vZ6R4D7M@xZo8g#S|}C z$rqe6}Z$0dLJN5&6QSav0P+-i~I=d42rN~U>Y@SXacN#>FUj;5H3avy^ zDPgs%Z6$Q>*4he8BCD;{m1|kzc#hZNSeSI9GbfA{iHPG1{jJvEo?~eO$Z4vU#O_Z_ zT9%t*wMnX#nLN|-NaK?iM1%Y2fHfLeaQsKrEx41<*3jtk zT36TdQ=UpP@?@K2SIJ6)+)p;`CYurnQ&=18vf9C9`@MN_pl?Yy$p?B)!+yv^FZ2eU n9b??Dd`Nnja@5~zW ziwU|v%u1NwnCtGb|HM34tUuorBIErp?1TO%`-uH-_91We);w>GJ*Nl`i#s9Cg#BRQ z{A**`+}80|w0^%UF)3vysAcpSJ`l*)}7oX+&(zg*$C z;%soDZ_Nc2ULKe79a*Q0&Y-+NU7P5XM#g%1;%ZgOmzTAZxyc~vzs}{pCG@P72k0q- zZjwHhNh;HANYgCY-b~UYVWB*wu?jVpy4|2lwjkZfww`PzY|$%pUgj3HYtS2;!4aI9 zrmEm+WfhgwJok%DijA$~_xOx+bbX06$(*pw-~}s($Q5Ay-1|}1=}ab*c$TIrx{3?a zcIL0TcFm$d2dmCTbaH%hxO{&aC(%CtD`~#hbi@zzbmcqzmrCzJagNrJ@4d~B2lHufUBjauq#JvYI3qhD zaiC^hC#5xF3oX{5ImDfIDzv%^t(HTyIP}~;7|, 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-01-04 18:46+0000\n" +"Last-Translator: F Wolff \n" +"Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" +"af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Werwe" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Die domeinnaam mag nie spasies of tab-karakters bevat nie." + +msgid "domain name" +msgstr "domeinnaam" + +msgid "display name" +msgstr "vertoonnaam" + +msgid "site" +msgstr "werf" + +msgid "sites" +msgstr "werwe" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bc0ef772a5aa4d53cdd84b1ed43f02220fb21f34 GIT binary patch literal 947 zcmZuvOHUL*5FQmD84dA~c=AveiH7v<^zz(+!3RQufk<%l-puqaO=i0{-Ms=w4ImP) zo;+%T5Im8cy)BQyBx%^mHcOLmW;xeM&^^bdA4Y~h>=UqT1K zMn;Q=a_M@T>k9Ro_kU~Dj;L4ZQC#2*Q_XHPdqf-0d^prhe% zFc@I?^UPQhYbH&`tkNOe#j6Pe^IW7ngGrnQmp8M{vLs|pO`%8DTddAW%vmFZTbeD4 z1g@=E+YHO)wY9a9bsLHrUoR!9QSM&pH)V(JGSlVj{=(eCOz-lv6!_Els9fSu8%?~O z&R8xR0?qljWkyJ-c}ic7EJvra`rFfh=~CnM?{L%klQN1D|tHixk} zGU0pqUa?th6+6gJ@-{B>kHr>rs@wU2t3t7xzsui1{;Jr9Vl&@!h4=Y>u~Y0q-bVW~ qC?4k@(E0_j?}R)5R1TaNy>AbH!6V1yZM1&+-@%@n>u{>ShWrH=NjFpg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..f04d717bc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2014 +# Eyad Toma , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sites" +msgstr "المواقع" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "اسم النطاق يجب أن لا يحتوي على فراغات أو فراغات طويلة tabs." + +msgid "domain name" +msgstr "اسم النطاق" + +msgid "display name" +msgstr "اسم العرض" + +msgid "site" +msgstr "موقع" + +msgid "sites" +msgstr "المواقع" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..35e42fa932de8c811891c89feca90443cffc0214 GIT binary patch literal 918 zcmZuv%}x|S5N;KJG8*Gg;>kl@BoNcPGXoeH7!(B(5{U#?W4xH&+1}YEv)!BSM&M$i z0Yu`}C-8t0Js1;lz4!pWz|6&iZ=f%r)w}#@tmK=oy6XG7Y9{mjLeDFLaT0MEQ9+zW zyhOP8j5v;HBSOSi#2Lgdgwy>-^tk*;S9cEi8{!h;EY^P7FB_g`kX_K)8L}y)NARy+Bzv?h4BdsWdp$RFeq_k~KLbOiE=TQPR2^lPh3a zEa3)}2Ft3ZL~6pcGPcsulS5u&@W#%=kU6aucw*^Hjo#qC#93j@(4md7@M=+05 zwOEERA?wO$R%MMFDZWrvN>p#h}bzU-{!?!J4J?cP&n`qAXWa=$k_Gdp$gazV-WZsAAc61Q7v;rf;@+cJJAAx9x; zFm1Sv?^UMh@PW>at8-1KWTI+9rV$KRh238{g3c^&E?d+rqti+^O$4&lIhy#|D0I_U z#<36A!3XTdae!&iO+!pWmtF~ce>@(5-rjCL76;BTaL@~aL(P#9Yz|^`Xw)P5RI)Vm04#h4=Y(u~BS7-bVWiD4ymY(E0_j i?SvcuRCb&gy>EB_vO{C?Hd;UZZ!mFt?QZqgl79eO&M_VU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.po new file mode 100644 index 000000000..815f97304 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ar_DZ/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Riterix , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-12-14 22:52+0000\n" +"Last-Translator: Riterix \n" +"Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" +"language/ar_DZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_DZ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sites" +msgstr "المواقع" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "اسم النطاق يجب أن لا يحتوي على فراغات أو فراغات طويلة tabs." + +msgid "domain name" +msgstr "اسم النطاق" + +msgid "display name" +msgstr "اسم العرض" + +msgid "site" +msgstr "موقع" + +msgid "sites" +msgstr "المواقع" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f14b988a27d8347b6988fc8a374b5af35331f1a GIT binary patch literal 774 zcmZ9J&2AGh5XToN92O)b&K!nYtIGQkRHbzYqAjUZl!&NWxVyW~#?|h4WqU~@^))!a z6Tq1p*S-dD?*njv3ye3EAV&ImJoeu+w&&Y}jkf{W9pWJ|Chig!gtrewkN8O3Bfb!R z|BBckz7w~JpTxTxG!O^m-rrp5zLLLB@fCTm`$68<`bFN$z4>*&cFPB3KJT@WY-QP8 zLZNG+5Kz<-a)GEF$CJ_e{b`hhhxD%!>0Zl*9_Zw`i|H>F4j`WkW2GCu%8uCXTIY++q+uh>b)m52 zuzRZ9--~jfO5wC>ji}g>Hnrt|O&8i>Zvd<5a1-It5Ynwd7>p`FO^q(PzAIEMV2jYS t)cfvo($F53m!A=&Z#@aL?|fU){PGh, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nome de dominiu nun pue contener dengún espaciu o tabulación." + +msgid "domain name" +msgstr "nome de dominiu" + +msgid "display name" +msgstr "amosar nome" + +msgid "site" +msgstr "sitiu" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0ec03f9843b0cffcae4726f7835e1c4f5bae2d0d GIT binary patch literal 773 zcmYk3zityj5XKh>ARQElf{J435=HB~vjAIXjDWb(xJUS&AFnd@nDi5=_x&XG{VtdJFH-OOO-dzg6%!CDPz+vCkST60b#L3*x z{;Oq{I?g|q^^86indAF8e*S;o?9`ZW*8c7syM-;(Jw2r3+l`YX} zlR&4Ufx5ISr)30voGDhqb7jUpjVCzmV8f}$|j(O^VGKMEm$nun+hJZA>L{Q z><}leM8kG&-Xzkl#=yv%3kBhY1q6_&FLa+(_R1^&r}VwO71 HKfc{x@CVp& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..cd3d29bc3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-04-27 17:01+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Saytlar" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domen adında boşluq və tab boşluğu olmamalıdır." + +msgid "domain name" +msgstr "domen" + +msgid "display name" +msgstr "adı" + +msgid "site" +msgstr "sayt" + +msgid "sites" +msgstr "saytlar" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ec75cef7a7a71d99bf360bbaddb0ed3dcc0d0005 GIT binary patch literal 983 zcmYjNOHUI~6dn~HsV)o)-Dq-LNFZj~nOYSFrWh0w5{U$>`%8N%1JgUr+*=+A3&2Dd z#jsFWnz(jTjHrYH3%4%j{sDi4TNnD>DG$%&yXSGg@0>IDS9jNY3w9B>0hEBtzy@IK zJ8&M@1@gcla0U1c7~Wr?%fx3oysPkkfNMYo_3m?))quYVe;xkqk^cmL3Hc9r!}|#j ziFFpZ0GNGDUt?zev4PgHXMy6t$ zmRYM3$a=_@Q@-_|){^L$9@3hOqd8ty_ISm9!DAUj!lTL@6V)g)#p_Y5>#XZV9?gQHyu-yT2?|TL3jswd)VN%(pmxF$Uk^)!`!VURkZ-z#pr zj_6m@rj1LvEf{RyvZRTj+ztJ(BpoW3EzO(Z6>p zALu)&qc6rB&m8j6VVLr0aJO$TV@KhLn6kwXNTnlBL&>VBwPhoBsn5pG%qm literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po new file mode 100644 index 000000000..8b44db3d9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Viktar Palstsiuk \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sites" +msgstr "Сайты" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Даменнае імя ня можа ўтрымліваць прабелы або сымбалі табуляцыі." + +msgid "domain name" +msgstr "назва дамэна" + +msgid "display name" +msgstr "бачная назва" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайты" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b337e3d46bbdfecd2045d8d9f826f7a3083937eb GIT binary patch literal 904 zcmZut%T5$Q6fG4WX^k;1j4>|C9fZ_OH&KCxF$RPL1Ce0kzNV+9Y0^{O>8cTCVIrEi zAZ|_A`UQ@JF#|gI3)Mg1NB9GJs)vUQZ*uzFd+Xd+|GGW$iNLM`_kjSo4txZx^?}R4 zAus{_1a1Jo0jv81j9CA|PjK3p6^bMyPoSp$kxQ`*!DcvO)__ydDGN;>_2qJ zU6`}Xm1aTCrAoL?bDuuPX|bZqB5sI;&SD#cPm?mN#Il(_L5+;sJQ6Gryyermb`tSC z=8}$XXr1}h>ekj)McbZnQ*2klv{fBmbxO%egK9mhjyWq!D+}lMdllE2$A1+Pdv!7# zsKvIf;$OychK3tFS3=j;gGDxVuCue6B4-OSOdGL`d^%N+_1U66tw+vk($0Cp7Sp_? zd@8dtRJDm2I&^EJl0K+WZ*0aP=CkRV!{VJeHv6VW%%1sSdN!nHV7k;C-~kzPI1C4- zM-d;JZ`L`0qSz^R%|WqSyhRQL1JgH0=y`;GeTra!Zauv2Bl&%pvV?5cd@bH1*DXFk h*RK#e1D>5XC>QFM?XXsv{NGBX*g*{rICD-e`3r6HNHPEb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ebb4ba03 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Сайтове" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Името на домейна не може да съдържа никакви интервали или табулации." + +msgid "domain name" +msgstr "име на домейна" + +msgid "display name" +msgstr "наименование" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтове" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11265f6b1803a7eb5bfd553b62351104229fee66 GIT binary patch literal 925 zcmZut!D z6;Huq5R!?6u!^S*g837fZ}127b+2(1EauJYs(Mvj)!#3VZ4=me;2IDC7l1c_wE=Jz zI0B}CW8fn21F*WEz?eOs8tN{A-vd_wtLvX8~&_&T_8X2?&$Hs1qZ1-}HNgg{2l z0d^kS*P6Zm#2_2mqs$0RqPC!k>hMfb$vc9^TuNnVtfa9qF1M)e@>po93Tk*u*GQ7- zZqB!yp8QoyG&;JUCM$(n7qMYW340<6ohcd8WSz@Yd8?wU3d5Flnk8&*Bh@TYA@x=s zMr^(i+(66jb0b1J*xYRi}st9Ss+np?-t9&h^cMAM##zpR>SU<1Ds&f}bGTq>*V3FXRkj@F2@;syC zZDYD&z258fYR0zA*2Jc*s1KJqq5OAwy(Q}t-tyA&!f5@V=6myaRv|IgRu}sjv1#gf z%1qAExXlYKO!INH$fid+d)JyM*n*5zlF2lr)2+<>88f6U>8<1&1<%={Dmpr(vg=&k zoSLP>V{=^68%-Ka%zC6M2UYp4DqmIQ4xA6w{_CpjSNrhseWZZP_i=g$Y&(IC532pQ zRe9i~1Neu~fp%Q@lPfxezvoWdRk;f#`~&BIwtDBg_Ita;-d!HManKW;zx, 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tahmid Rafi \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "সাইট" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ডোমেইন নাম এ কোন স্পেস বা ট্যাব থাকতে পারবে না।" + +msgid "domain name" +msgstr "ডোমেইন নাম" + +msgid "display name" +msgstr "ডিসপ্লে নাম" + +msgid "site" +msgstr "সাইট" + +msgid "sites" +msgstr "সাইটসমূহ" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e8547baee69b59d7759b07147b5f2924dbd974f8 GIT binary patch literal 1107 zcmZ8g%}x|S5N;JUjwTupo;(x>{$hH!XBV>Uz<`2~kN^@Kz4y*EI}NkllkQ$%36J2_ zcae)8ddw^9=Tn~v+C#)kM1pvX_=NEG1#us7g=itZ zA)X+9BfRbpV#=@YjCIeDzuqO}1+v%uxJSqu@-O74$kQkekVE80$g9X+w~dS`1XIZa zgzpEpD)Z-G8QV-5B;QO>_jo!MlWR z8o?cE>09nZ1T7XWQ5Mp$17R4k&MOu&hC+HMPNlCo(Jj-E(Xb1xcBNye+vV2L#BgN` z?zD+u#~3L}*yja@eSK>909JWX;Dt}L$zP9nu65(ctYN0=4|!kEMDRfb8%8*-U_N)Q zjGE1}v$KZtW#y4LZ=`zA9AE63uwa$l?3w05u(z|fHF<)t!GcYETA{GDQHghS;@may zIi*^GH0Q<&7k@~$>GDM9&pHx@ZmCpfQuQNP?n!skWduDF927&t3%ae%z(%0T%C+&* z3XGTW{Jfe88N@M!3ottimCIln{n|#S=6BIw2L{nig;u>nZKG53yXdb&IH}Nv%S-V6 z#PQ-}*}YwM6|mb%g$o925Z1z-f8lYoQ;T;0i*_-(4lUn+zcKR, 2012 +# Irriep Nala Novram , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-10-19 23:07+0000\n" +"Last-Translator: Irriep Nala Novram \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Sites" +msgstr "Lec'hiennoù" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "An anv domani n'hall na enderc'hel spasoù pe taolennadurioù." + +msgid "domain name" +msgstr "anv domani" + +msgid "display name" +msgstr "anv da ziskouez" + +msgid "site" +msgstr "lec'hienn" + +msgid "sites" +msgstr "lec'hiennoù" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b76e2fcb12a4cc4c62634a5e20db1136760eb0d GIT binary patch literal 692 zcmYL{&u$Yj5XKD@AuVv>%wafCHL9GoLm{n`EvWybqDDkj;O=Cdt0MBhCGA2ktmB-g$!eFt(19;>PWR@8rz0yM8NM6QeWzqVEj^Gy z3Ft8Xk}^(t7dRKJyU93XD5R(ALdTgaU6-;Q%6EXj5?gGOVI(Kg2Rd@n_)-Sz1iY2T zXb&e!=czjQAx_j&b=jWS zDqWuGHkJSE>DZ^OWN, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\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" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ime domena" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajtovi" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36107e04e36baa817bf05bba19af0e9a8fee559b GIT binary patch literal 791 zcmYjPO>Yx15H(OhS}MK{oHz`(R+W?82%2U?5F(^fQ6i$UaCdjz#MQ37vK`X=2d?lh zIB|g!|Ac?Qg*$@hO-mT*?eo}g#xtJ%aewP0gWUuk0vT`%_y7d^3S0-i0Uh8wunqhI zg6{z=I3_^Hs)rIR65^1O5rV4gL)daog9{areLoVc2FjfKX334;Jpf zG|1NWMtSL2HkVYGN+?ZQRFZO`wegf2?ZckXD{{5Sr6Xg>ixbykg>rQ%R*jzh7t0(n zHXp~P)||=Q^P_^llh!GtQ!37co|))a*2a21aWhr$7mJzWnMo;{zRvj2O5vg9FNK#W zb>id+j}xABDM`|}yB8;M3?V<3?^VdT(RF#;<4KQ_{q%9X7sH~laGqyYXjckvY)Y@t znsPLjs*oi;MKy4rmyO#}`qVr_jGisTO!7>MDy55`yr!rQrM??#iO$!ODk(u$)YUR7#TwW`scm*>8XmsGk>`CM2h{orkO$PYHU zaM!7{e57+zC_PK*;6(XE@x%B7_1#&v^EpVrI4j;2QgN_P7Z8mR2heNu#F!c6Mq5nuoCH; Hk7IuU5!u%L literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..22f2c13ad --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2013 +# Carles Barrobés , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Llocs" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nom de domini no pot contenir cap espai ni tabuladors." + +msgid "domain name" +msgstr "nom del domini" + +msgid "display name" +msgstr "nom per mostrar" + +msgid "site" +msgstr "lloc" + +msgid "sites" +msgstr "llocs" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..26ea69183b868354bbbb51f25ca2d5400a520a68 GIT binary patch literal 827 zcmZWn!EVz)5M7{vWDuepIB^(+s9K>->=2d4sSBdCQc(j{F>v14lVmG|p9nVzZvWeP##+SRiI<6&FEDnE_zp2WtU-g*trL@l zkℑxO&{a3wQn^oTrKx(xPGU03p@6kP4K@5fY)4wvcFL-JVb-n4w6}fG)s_uBow9 znqel&O3(iBGD8`w!LWluA7NtoUdmr#VWd_eq(?&awRea^U0B{ReVOvdqrTy>4#7Kk z&JS@cos>Tj7DH(G!2|BMc+i4iJ#6~-dgJgPquedIBUJcR8jCIeUx*JyNwH8HmE5jb6sPeB(^#&gx;ocT}QNsrn&o zbfx`UWC)4z4zf`pGQO*e+=QTp)zU=GHq58ds)8tj09IB&!Cjir%3p(r;6n)Xaw~$y z{N-i@&HrUVrE, 2011 +# Vláďa Macek , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Sites" +msgstr "Weby" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Název domény nemůže obsahovat mezery ani tabulátory." + +msgid "domain name" +msgstr "název domény" + +msgid "display name" +msgstr "zobrazený název" + +msgid "site" +msgstr "web" + +msgid "sites" +msgstr "weby" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4b4ecd5ccace550db978900903f2a95ea61137e GIT binary patch literal 835 zcmYk3&2G~`5XToNAPh)|0~a_9m#S5@v7NR`>JmVd7F8lpwFb@;@5XUu?^?TSQojRN z-UUwFc?cxV+;{<)byC7eznu^NXFOj2xWD$9k=-O75h-z-_(XX7LR=@l5`E$uafkR# zc-P@^{HUytb%slJ|4Bm-!xfYGEW}HweFvpX<%* zE{$XhJ1d;DES*UZy23(%!b(DhN@)j~R?gQ@wP0(^qy=rj;l%csC~RF~+v(YVz0A_Y z?y&5{=yRDlek}NVX>6fY0^%H1u7guqYvcIX=7r!dn%weKClH*xP5FV5=t#?7qLT^q zqj;A`F^>lj$4NBUisC3DAwQKL3qNzE8}Mk4_qQP)Cc8UZ5n1pWt>dXdWlMD0BrrxJ zMI!`Y4X@^{5;%n?)w1~fGU#QxdP>bIZ!niUl~^V4L6&v~8#CwXBn;>CdC&R5#Z+E+ zeYp6vOII$N!>kQAgYohBaCHfBFA5Ima;2i>+M2%7$qN_Kg%)ZbvKbmH-RNC<#D^=L zf7etReyB1n3Y8}?oD}Zgk_lvOa8fn~OMawHWfM?!m)gx1vWkARcM6pzuk6O*TbxzxH!AHe*vwW-$Vca literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 000000000..5e37db2e7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Sites" +msgstr "Safleoedd" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Ni all yr enw parth gynnwys bylchau neu dabiau." + +msgid "domain name" +msgstr "enw parth" + +msgid "display name" +msgstr "enw arddangos" + +msgid "site" +msgstr "safle" + +msgid "sites" +msgstr "safleoedd" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2380ff3fc69f4fa5004461f97211e40c95cdee5e GIT binary patch literal 753 zcmYk3y^a$x5XTK1Uke4IprRPMJ0b5T5rVr7K?rgu9lD6m;- zllVo1xZlJ^@Gq?5ZjmbD4snh4-(6&EKzd4go%Abd$oobb&ip|d;(n4+3L{}xi107e z4HnK{+oiShN_uoGn;{gY5>kT}6+$kwHXd@Leb^Iv39c47IxrTzn7Eh~($z{V+j#b0 zE^}0|{WvzZ<_L4o_Y3|8t&>KlP#g(en&=Q~V?7_aQWpGKQ#ziR6r%Ab4XQcukj z%F$&bO5_=eDutn-h#73oysy(FSu7T@4+Z5EPvYEE$*R+}sK41sA(E|Vv_INCzf(8v zM9*nfsHv%COOSN%VIBIx>uis2pT~u>rfB)D&P^e8nZou&`hQ*0q(n4U zjTMUT8C$s&bloo9px1|$JJ{54Zvfq`e#GA5#L?v~8=C6uqed;}8a-5JA3z=-BS>A~ o%%}pPLZz^>O$EVeAGB%5h&E<4d{2)$*Wppub=YE6e65!K0f*SqbpQYW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po new file mode 100644 index 000000000..762611976 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2013-2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Websider" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domænenavnet må ikke indeholde mellemrum eller tabulatorer." + +msgid "domain name" +msgstr "domænenavn" + +msgid "display name" +msgstr "vist navn" + +msgid "site" +msgstr "webside" + +msgid "sites" +msgstr "websider" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..74e16850621babd51524d2c46cefdd267737f75e GIT binary patch literal 792 zcmYjO&2AGh5H?UKT97~-dg3tLT2 zxFW%cH{lr&XCxSJ2w|jeKYR9@@%((hvvI-5HVJnL8Q})uBf;Aj!d1doLWl5;aFg(p z;B~(V8~%K0sk=>lLD(W(C;z9*jHSe%iM{>@aX|cw*uS}XWvRPGOd*Wi?3(uzd|q$< z{gshyX|JS1%d#m#p=%)(C{ZKiLMiPa*UEXHPz$h)$kBo};KZp7Ss`sxiAAet|HU#( z8QYI#W24V7cl@Z}Z_rq&RSLzKP^At|u+hfxku7DxpUq0kGo3;(ewp!ogTj%P4~4@N zI&recL#dFagXROue2NNmL9&c?4pjA2R8)M(o+|oXqK{+i6sy!Lw(Jic CiP$Ot literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..602912402 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011,2013-2014,2016 +# Markus Holtermann , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Websites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Der Domainname darf keine Leerzeichen oder Tabs enthalten." + +msgid "domain name" +msgstr "Domainname" + +msgid "display name" +msgstr "Anzeigename" + +msgid "site" +msgstr "Website" + +msgid "sites" +msgstr "Websites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8179a5c186a4a4d78705281dab19c1ea53288313 GIT binary patch literal 868 zcmYjP&2AGh5H?UiS~wt(IB}Q@Qme{|H*M8+O90UyDN-Yx1VR`oAK<(KkqJlAZRxc4-hfp7UDg^+b6_z z#Aiec@fC3!@dx2`e-R7*e5KaiLH>cbkGO&HUsnm)LH><=4|(lcUEe|W`J;1wg^VQx zWwW@S$M^N-@4qmV)z*_vSP~BeWV+x|f#QXLlq;njq*^&2<7y1HnlhoaQR(XQ>wj6NInEsb>q!NK#G zZX3ZJYUvJlB7znR*C-2VxDH_$vGrvZGKNBWDBeilbFN#bY?HQDfU$_RmKj>G&#j}e z;mYRRX%j(LrUNc=c&YPacvQ%IRO+Wzn`9#MoHsJ@7;992#QTEAf)^3&>q;2tp+s^8 ziv#D%sM)Nls^NTJc`QyEsV4x9l{e}fRfs6p&QQK6*xV;NUdV3g{hULt$_4IHhs&jL;EDF{Wi(s<7%E*(&t#!1K0RxYNu?9RCu%6B@9gVY QFaMG*8x!j<(=~DO4@zzGk^lez literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..b8706de2c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Sedła" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenowe mě njamóžo prozne znamjenja abo tabulatory wopśimowaś." + +msgid "domain name" +msgstr "domenowe mě" + +msgid "display name" +msgstr "zwobraznjeńske mě" + +msgid "site" +msgstr "sedło" + +msgid "sites" +msgstr "sedła" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..10479c1374020b8ac21a3093ec6c5686f80ee04b GIT binary patch literal 878 zcmZut&rcIU6dn~dS&cCydh+m$7YLblw@Rp6Ym5j=BHG~U#nZ4ImWA!iW@l>Y4VCDn zR}P%@2r(pLtSRZii>KNDz(2x&K;N_=7<|dM-+OPq_iKNSj%*UN^N4GR0C54)L0J2W zIE&~aN{BwV6|etbb~#yNtYvxQZCX{Pt-=o*?&;Zy;YfL&z2660&`Nbigl> zv4o(EoI}`sY+q}3{-L34XwPEJ6$zF()MbOk0t9Pt2$>L4Lnwu|IVRemQWkOrG6T&P zRe{uFl_sn`(34}eL}AClN0C}4S9qxDT%Eq)nTnAa{@8*$DHBo^5*9JRR;9WZ;rU4+l#RPsB%&sZI1M;! z`0y~}d=XMHo4)B1^U?Gn@0fjzdS(~w6FNKS zn$Kp>?1Sl9Y5p36Pk=hqteZWIyJjbUkJ&DmZ&qox3k12BzcafSb* PjhODgyX9|Aq;TCo&K)&v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po new file mode 100644 index 000000000..94d8e190c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nikolas Demiridis , 2014 +# Pãnoș , 2014 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Pãnoș \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Ιστότοποι" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Το όνομα τομέα δεν μπορεί να περιέχει κενά." + +msgid "domain name" +msgstr "όνομα τομέα" + +msgid "display name" +msgstr "εμφανιζόμενο όνομα" + +msgid "site" +msgstr "ιστότοπος" + +msgid "sites" +msgstr "ιστότοποι" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b1884c4a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/sites/apps.py:11 +msgid "Sites" +msgstr "" + +#: contrib/sites/models.py:30 +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +#: contrib/sites/models.py:81 +msgid "domain name" +msgstr "" + +#: contrib/sites/models.py:83 +msgid "display name" +msgstr "" + +#: contrib/sites/models.py:88 +msgid "site" +msgstr "" + +#: contrib/sites/models.py:89 +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e6e4917ecfa5f36456e8b72792fcd69d187921fc GIT binary patch literal 753 zcmcJMzmC&D5XKE0AQ=ioK}9iiiO|Mz0O_j`4DkjXYMi?bAx%ug!sf7Yu2DHUFc!QzcD<<3uBp^|lOO%# zjT~3pd|WiM<^*#u4hr!at<#1i6eo&G6CYw@tQS*P>OwqSmQG|wLOgpZ4)IinRPkJS zlrZQIQqg}X(iGAMGJSNv&k?^+&Wp?{a+UJNO2|wN6Ft{h74X=bdXJg6^B$pp!VW5z zszi~YswIr6th8G|XMgFuRh3p<=q$W%WRk2_s~)eB({nuQ<)%*Brngd^mr9V{>>nlF zczQ4$U)(V5_2Xy!a!B0by5T!`Jo5>^mZl-(3uPVp(NQ)LyBB%kxH(!errZ>oN(sBi r+W+lZ!se`aRxP<%F)_Aw5~$fs-Dog`b~x$~+#5mK9mdgr{k4Ap44lrj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 000000000..0659ec5f0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tom Fifield , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-04-11 13:15+0000\n" +"Last-Translator: Tom Fifield \n" +"Language-Team: English (Australia) (http://www.transifex.com/django/django/" +"language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "The domain name cannot contain any spaces or tabs." + +msgid "domain name" +msgstr "domain name" + +msgid "display name" +msgstr "display name" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..772da82508d299330f6e1945db356175f12d284f GIT binary patch literal 639 zcma)(!EO^V5QY~hLRvU+<}ln6RnFQKkk%mxwM|i>5mB|}!U37AvvK7euWW}jZvYPf z55R>Juf(%3-T=8W(zm~7_1iOJ|9ZIhHKVvoJR(ksdxRxYd?p?cUx@p}H)4!9<;856&gRhIxhP8^n5zm-G~_Q{KR3@NS$t48ae8lSkUbn9Kn34e9&=x zRi3fKoiCMJXwN1%cNH}x;qar0|5}&O)yijf<&|Y;&No2, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "domain name" + +msgid "display name" +msgstr "display name" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23a47003150ffb1da635e509b2021ce0bbcaf68a GIT binary patch literal 792 zcmYjPO>fgc5M7{vFdQlloHz`(R@M3=0-8DmAxbJ0H6jXz`_`T~>)N}Pcat>#fh!XK zf+KL^pYR(HXC#=l8^TD>Z+7+O?d*@_9<);~ckByO9#gG+3<=UHKtsBe7CYKq1xyTJqbPV3)O~Q{G6qdC7m9Q8? zFN~h>Fyhf6L{S_b9)wXCl8{evDV^t5cgVvd9vwmSG=3Z&gcRPHFqS8cP^J`CH!-}X zt4RZAC^IbK8FfR;7iGKjrJCvIRHO2R$dM-~su)J5Ml!G(_U6{saS*IlE8jX#Im1go z)m6~lYD49fL4Z2g_r|B=(f0n4A9~01uBfQ5bxjwvcxeNAOQ{Bs&P8L;4&Nmwyua1C zvu4=vkxF$YRUSkCT-tw)#(>(Jl#51`{6sgEi9yxv(hPe8=+fbyf=5G$_6HuDqQycN zERlw^9a%4znL`fMpPnRhkq@HYmmX`QdAV1EIf C;@Els literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 000000000..a65e597f0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2013 +# Baptiste Darthenay , 2014 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Retejoj" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Tiu domajna nomo ne povas enteni nek spacojn nek tabojn." + +msgid "domain name" +msgstr "domajna nomo" + +msgid "display name" +msgstr "vidiga nomo" + +msgid "site" +msgstr "retejo" + +msgid "sites" +msgstr "retejoj" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8e3f12b8b1828b5ba0fa6c0bd0b3c9ca3551bc44 GIT binary patch literal 804 zcmYjP!EVz)5H-+(WH=NKZ~C;BWPNO0HUN)Q6r+(aNpV+XDfTx+TD=mAGpF_ zaN__c{)CS}+~KX=5Jq}_JL5OAvpf6q-o~c@b_;k2q`+<9BjD{DunBwzdcY6h4)6=` zx<9~%Uteo=Tj0;Yec&eIU##Vqbq94AqKH;SVOLUt-XNMCcU>$B*9#RnAcB~PN=2o|1j>sV^IvL$!gB=iPH zla@||%tcAh&<)&|W#e|Fn(F7sQN^4Wf~A6237yp(k{NB!oU4;=cd=M>oUbUS;`OI6fYa)~Am, 2014 +# Antoni Aloy , 2013 +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios ni tabulaciones" + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre a mostrar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc883045155cfefa309e3605aabb9cd43b5c8515 GIT binary patch literal 776 zcmYk3v5wO~5Qg{Q0Lf4Q#Z?qTmk4c~1Q5YdiUV@uBqE}mp+$4fp0kHNYwfPdg^~`5 zmM5Wsih?)b0qALIDPY#Q5Jvj^?~Z@}UVDDr-2EuHt}wTll)1`$U_yOnE-_!2KJ%5i z#{6P}?+>#Z);nw8b=KF+9&?%d?=A@Ol=VI99_x438>~NBL+)?Z;M=*#u=2Lqhx3Ho zP{Fq;wyo<(d*wvBP%t+oY68MiL54)eLuSZ_9?}Y2g_&|-EOWvOo`2@X6 zpx^C1kllx}e;0a#-oU9RXEIxka;y#h8NDt&->kF?tQC5yAGjmOO0)u1i|D8I4=3UXW zsQGi`fw84afU0KeM*ShIm!lTJ?Gg0a!$|NTwQ*ux0GaaG@;sZ7YSM-~P}PbXnzEwS wmg9MvYzNX%qRr3+I}f%lxc}`Fb;Nl}g%*JaQe&atqTRH&;bGL;tglY|1w_Kv`~Uy| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ea43071a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" +"El nombre de dominio no puede incluir espacios ni marcas de tabulación." + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre para visualizar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1fff5d9b5ccb4648390c2362418e4ae0cf3de4f9 GIT binary patch literal 825 zcmYjP!EO^V5H(OhEF2044v52WOH`cQjZ~%G5L6LTsS;76cHxTLT{m&r^{i|!Y4QzR z`3Y{^;DittzJib72VlHu2qQf|d-P^(kKV5bTOS$4ZNg(hO1Mk-K=AQ}aFg(r&?S5$ z+#~!Zc-9&bK5grn5QU3dN#tw*o5^odVxxv_d;zz{3?^9y0>k?B5BUy9y z@9}+oc-=Zkwu)2bq-E($LXM?S8nh@SWI}6nkfC-yC-eerB{FFN4LEUTJ1keWD#W7E zv;S(DrH;*F*~H+5%p5<;`5S4hLY+Wg_~v6p@gh$oIT>totOL&%*H7;`{mIqk70`XlZ!}2+m>1i#dlBZIX37l3!D?5YM5DP5N zlxRb1=3JG8;e0;tINx8L%S&Gzu70?t;;K_9?c3pT*bc@=*S>iX|ziBA)5(fr5n6X5Bc6k=dU}LhL3cHxzf`F_Rf_1_vi$gyMjqk8&U8>G^I^I zSIyB5x_ww}2Q3Xx1`xOV0V5wMv}{y>rVkpjL*odg6;cMOT2jLML27BJKe>VQun5un cp)UMUlasEh1(axMEM}e9wDaCjxLPgy3p, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios y/o tabulaciones" + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre a mostrar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..02a2e5340ac34fb81277fd5d8771c0d59a0a402f GIT binary patch literal 809 zcmYjP&2G~`5MH2wFbJU@IQ1}aN>puZS3p{a0HUN)B_g8MAZ}=5Po1soU2Atk5}tu8 zH{OB^aN$jO2##D})@}$Reg1aF-^~8Z{M_F9#K^7_b_glqCgCH&+gHL>!Z*Sm;RoRs z;TOT{{t&kO`ckXAL;RU=mvD{ZUoJEDl=wUGZQ|d=+r&4nwE7)lue(o7DU5zMzCVwz z>&@@KHj=e=Djiyu&Jc2438_Gd3Lz6pX$P5B&c}pWfvrV`7PJ8;rnbj&Y3ov~8a?|j zmszUVd@P$7eU6#q$2ot4#!9Uc$j^l;bZ~;THja;NA#?tGURa*$1cJ${lph)tjkp(Y>bv!jf*-|)d z68NC=N+@{T^0R_2UG_3vJt3(o=AuBJqNox$t%Z_y2Awf3Wv08(nK@S{VYpZ9*;H;5ci_skRBEl9c)$84IM6BNRKJi0J51d7Txf5 zdc^lPI=|f+8a`5)&ZR06*q=)G@5l)>dj*qnZbZqCw5e, 2011 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: zodman \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios o tabulaciones." + +msgid "domain name" +msgstr "nombre del dominio" + +msgid "display name" +msgstr "nombre visible" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 000000000..a6b74fae9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3e3e38acca07d5602e817d28d14685d0515e1b83 GIT binary patch literal 788 zcmYjOO>fjN5H(Of6hJ~8dg3tLT2|A8yw z4{+v&1ky?z_J8mn;EV+0EM*z#<$0X<#xwT!`)ltR#ZAHkLQ1$zct`N@g>aqlmCz-8 zBiteUBzWC#!kS-SS?cZ)e;}+AZqWXxtBm!DKNAPUKZw2W7qR!P@+c2gi_i;rj_%1Le0Q7B0~$>fDWARte;1LKQkV!bTg%N4AhTe=#X6Pjv#p_*Kex4GKqE zz9$?e(2e59Jc@bTgE&s2-c}Sx5efMbzLmb_O4sAj4v%*rev&+jwjzq)P*}%PBb2R# z(DiIKCjxeBh{&XMjlm6M1ed-Q7168PAe%CY?RJ5Nf=J2(~k2c zkrX|o5AQ{G+d1zccNgIt`!xvHEU=-hZioStCXq_St*P~H+Y@y z^X-++pLL3c4^^gfsfq-)Po(?TX9DPgaWyfb;``dvHUZVNsU39tuv`u{6g(V2yx9-f zv5>jU*`BTul>{YgdRdg PzAw|Rt&on<$Cv*Dd_dX0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po new file mode 100644 index 000000000..91ef8f3c0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2013 +# Marti Raudsepp , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Saidid" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domeeni nimes ei tohi olla ei tühikuid ega tabeldusmärke." + +msgid "domain name" +msgstr "domeeninimi" + +msgid "display name" +msgstr "hüüdnimi" + +msgid "site" +msgstr "sait" + +msgid "sites" +msgstr "saidid" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca7a350ae193497bf5af1a67094a2a99413717dc GIT binary patch literal 807 zcmYk4&2G~`5XToN1q?_PLYzPvZmp_K?360OB?$FPibOCm!lgiz?QkP4I-BjiFU?I736g`7|qU?(C+3)+AaL)&15w3Av~%>C@Y zT4t%^{9)O^=rhb6?-l$l8Y{I*p*Rz&)X@n}v~j#|OIh%JUs|5&6r#baj2{>jj=cO( zI831xC%ZgOc+!R>N#pi*oWwC1`3ZiIq36oi=J8YB+JU5#?mpR$DWaFcI-VJ!Y%QEN zDI6)RH1z6P7(-iCg@k7qaxdf}*U0twIn}AsixPQ;Vw}Rhu=E%88+H6jz(}oL8 zrh@%5KSX8vIiwW(};kj$lVM?_J`A8UxuKOlC z=AD%<%yo)}AE{gyQk5xmhSL38WeVt{LG6vG`LQ-*n}V9mUv0Ow2a92MQ^DgdBwKqC zdxyi)D-;zw)MJ#&gPfrf72u5SyYMjcMv}ouN)O RgV2jF-lmsxu;rj)e*xmu-kksd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 000000000..d7d413859 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ander Martínez , 2013 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Webguneak" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domeinu izenak ezin du zuriunerik edo tabuladorerik eduki." + +msgid "domain name" +msgstr "domeinu-izena" + +msgid "display name" +msgstr "erakusteko izena" + +msgid "site" +msgstr "webgunea" + +msgid "sites" +msgstr "webguneak" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7bc004f3b11ebf24857145896a26222199e161ed GIT binary patch literal 872 zcmY+C(Q4E{6o#W#g{Yt+UU_l6Q_Acn)zX?;5o-&T7MC{lewxf~Q?fHlW@_6z1>5b# zf>*wRTLf8z3W}hwF|pu7-~#9X7oWgc z@EJ^iZ{Q;M1)T3U7<21W1K(xnYj7Q0!~WaTp0@`50=)^nat1)}Krcb(q0YAoMTrNS zcMiCDTwfRN{9(X0h}Fyp?Zq2{Qq|;{B*~kC5-z1OlqhN39+$hMTRah(R6&NX>x!3V zx|Q?YzTf+=*3;#CL5zjN%bL5+1!96x{hr;P-^6q$m z@RztYEH1dzIX9|^=n1ZtX<8ClDssAyX^=k5`)MVUb@c!>va!V*g2jS2BdWR4xujbg z#e+CH2FuxC#`nqtd-(H3=X=j~%QhBe+jhNjAK4yRx4BpDmurkR<;Y{QU3tjLzy#_?V)3I M?#b~^X2W6s00, 2011 +# Mohammad Hossein Mojtahedi , 2013 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "وب‌گاه‌ها" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "نام دامنه نمی‌تواند حاوی فاصله یا پرش -tab- باشد." + +msgid "domain name" +msgstr "نام دامنه" + +msgid "display name" +msgstr "نام نمایش داده شده" + +msgid "site" +msgstr "وب‌گاه" + +msgid "sites" +msgstr "وب‌گاه‌ها" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65ba6a036382fc3f7b2c932d4b1442ae04e09241 GIT binary patch literal 786 zcmYk3zi$&U6vtgCzYYe((23!(wW^%Ei-5EjWq^`M6+}es!R}t1#L1m~vfm}m$j*wy zij=6}&BEA!K;s^17 z_)U1-Ut-sHZwzhMH(y??Tp>GPIG-y#s$b{AgAu}3%Oz1hdQe@JBv4G;j)mUG-G8gleo?Xjj zjw-G`j`ge=%MAHxpTC#ZDWenUkA)tZ;7pdrBJaAP>hqV?(DBqH5cJ-r{KQIuq~)&! z$^`0B{ESC2j~fujNz^!u;wT~^Ka*4CYi@N79v$=e7~<#2)95fF3*HEaJhei*T%fTD zybx9^cx~K7=7Ns(uo6SbQz?oBI!bHhMzB9ZER!&t&1N<9$!Z`kYnds+_4pf?U!{iw z6&?iL({6kFqj4Oke3? z0!J4L|Bso#Kn1~OEsyAW1Z0&1!(t`M)8L)FTtsEL;bpMly!Ak4O zfmARx3Y>DwMUKnGasg9XseHctN&}B+Pwx&+*a;0=_*5UPF}+;O5lN&9#irLv(u1!W HZ9KAnIEUV~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..13c88cef4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sivustot" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Verkkotunnus ei voi sisältää välilyöntejä tai sarkainmerkkejä." + +msgid "domain name" +msgstr "verkkotunnus" + +msgid "display name" +msgstr "näyttönimi" + +msgid "site" +msgstr "sivusto" + +msgid "sites" +msgstr "sivustot" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..54df18ddb8eb29b31629e73d48256c4f5b7576f6 GIT binary patch literal 756 zcmYk3y>8S%5XTn?AQ=RRf{J1~5~20S2|?n^MSSI?pgVC2hJIs@eH-juYj-b~YpEz` z>3IyODCl?u3VIp}UI1o&IW8mp{NM4;jK?!SZ*P2LWLJs1L`GaAJ`mnM6PJlEM34AN zTqphzKJG8E;m;SAakog{5_iu0cNZCZLig`UZ<2l|y+Qhe)aU&o_4R*~QVJtsR|wya zzxU?vS9WQ2cqJWLmQ4`~-3X~bi3TATN@)kVR?fc@Y5}$tIa<&LoH()}E2M2}vFPI2 zxm;$cV)w9YV)QZQjvo~K4H_%8N})Iws?xzBw%Ry8wv{aS(^+MCrc($eFZm&!NFU0d z3x_H6;^YyJcX+Y`$;0$Pd_N`&M#4It8KG<~oHi-EppK=55y}E<*rkt<`?&7hP^wbz zQI4u+qC%dbXi^v&RQVJ(r_Qx$6wT-J(D{P0#M3a>O||)yv~MvdmZP$RifehD%XWnRSMfj(*5r;h0+9* zdS*n;huSnY1=V)09rXIJJPtM$>_M{C57=^%BLt-zC|2tv7oo+OgI3sXpQxmP;vRPU g1SNeeZFEL+q@jn*r+@ndqAX=TMbr7~a_6`E4_`viLjV8( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..26f86dc09 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014 +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Le nom de domaine ne peut pas contenir d'espace ni de tabulation." + +msgid "domain name" +msgstr "nom de domaine" + +msgid "display name" +msgstr "nom à afficher" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 000000000..599ab98a0 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c15ebefd56238c5ebf598c73db7df0c6d0ae6c9e GIT binary patch literal 683 zcmZXR&u-H|5XKiMAQ?EonZq7ip^g7gO1r566lJ_z8ml3!Ggegv2*Qegkc^oemi_YaRChB;#?uFo_ zb~r9Yyb%q0gZ--)OFK#Q(r7O=He1fIx|gRu#z#`ROUF}To%H#e(E;1O>I;ibq-Fbh zYzn1IPPdPhzg&{jQbfb5v7%xJ#@3EgJ#TMa{-jG+X}+%WJf+WRLSg55hBOW7?o(u0 vo29{jjC6CO8=T}{2f-<0Q{mG=KC6Dce#P28&YLfe_Y?K!x0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..095d08db9 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-06-22 21:46+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Sites" +msgstr "Suíomhanna" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ainm fearainn" + +msgid "display name" +msgstr "ainm taispeáinta" + +msgid "site" +msgstr "suíomh" + +msgid "sites" +msgstr "suíomhanna" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..726462c853f9c57cf1574a589ed1b76132d35bb7 GIT binary patch literal 858 zcmYjP&5qMB5H_%Y6hHzFoH)#>+STIb2T;2yWhKfMt+a(|H*j|oH}NX5Bip50X&-?r zcOC;y9QG|ZaO44a0T?GOWuz~k{mti@*qWaYcRmx0+la@A1aSxP3E|=^;wIu7B0_ve z+(rCGINu+{j$2=AefN>C5RVWp|KmC#hseK>A0T&b5ONQ>kL-Gmk)7`?G9DplBexJP z=jys}{WpQOHqM0Qh9m`tOjS%skgVd6GAWgXR7vYJCRbo;mU071gJm<*C7CdF$ySY@ z{CAcZtk`@EnQC>;Q%jFC`hjaBl#C%eXEImbDX*2bbYgOm(N~My&_u=HP2VMSq&c(b zrLURgF+@T5oCYBcdk}_k(Ay8fAV4EM<1X$2{V=^nn_bK zt8@%+7IIXST&0+j`GVz~CY)86V7wIR6F5tiwZaszTUcAizQ0^9yVg|@bAHiHRpqyL z*igByow<^ z9?4W?Lgq2_XTtvb-x%`Do0bdBN;+1$GBL=y*_z?A0kq5Et{e_SxV!|%;T{}905Lc< z+NhCJ!$yUd5J9H{5?A)i=S6?&}X~CH!qk>787ffX^FfXi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 000000000..642691878 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Sites" +msgstr "Làraichean" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Chan fhaod beàrnan no tabaichean a bhith ann an ainm àrainne." + +msgid "domain name" +msgstr "ainm àrainne" + +msgid "display name" +msgstr "ainm taisbeanaidh" + +msgid "site" +msgstr "làrach" + +msgid "sites" +msgstr "làraichean" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c107d9b3acb87a3c7aa706008145c59814de3732 GIT binary patch literal 742 zcmYk3&2AGh5XToNAT69Ya~N)|D(^>1mEbf8QCd`#s8O|WcXyqQEAMz^JETFp27*U` zGmpTP3r8dbXC8nHC&mdOjP&#D*#EI-cD~=)dJ~b|Anp=F;ui6m2=<=n5Fd!!#5W?G z|0K4EU&M9dH}UogEyNzVcUM>EpUK~(_zU@<`$|5%^@Dtn2MhaQ?^+1R!o6!F*~*Hk zgvvBRA)sg^lmgLsC=L3sCvX9-6{U1wEO>G5lBiOy)nc*KNB`wUPIg;u2!2-{QdTb`!#`8@IAN;Q#}NoksN)zsSQzxipc z)17#9GCJC{pC?&-NWWDgm9=Q8KQAwRO21NJAIhn)PWr*~;+XX|y71OST6Tn`sT9^6 zdgsdjtCK^meEN0d827$m~%)A<6W;V`U5rD&JX|q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b21bd6f30 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O dominio non pode conter espazos nin tabulacións." + +msgid "domain name" +msgstr "dominio" + +msgid "display name" +msgstr "nome" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cdf5dc68c03119afafbf109eee3fa4c88d834f6 GIT binary patch literal 820 zcmYjNO-~d-5N#1P88uO3Jb5TRK}he;5D^$$V?>A$hy+LP%}le~WVU-V-MH`{JfLBt z1~8rs8t>}KpV2pegnvL^?=C_mZ(dc+tFQijW3%&TT(8xHjZ+mUC0T&OSU6&X~|UN#D=Z0LfK9!cKdpE zrj}WB?0+mDcvcB* zOW{nF(lSm{mR6)HWJwRO4Z=rdKddReX&$0RH@8Jo@=S_$N>AlRCA&1%a;}rs>)md* z=0ZcYDR*kQY1aoQolrTfuD4`;JX&2^T{t~Hsm0Me9#v{AwcEjUPVTrm9#ZK!%3Gqc z(luUWi+tu(7iMkBiZAHg6iPQ!n%Pk9|CTAWWVBXpSEA&LrfS=ibf+KM#^f9g+{T!u zI}J+4=OX6!{8xYMKlmf&zxX5a`~D*`?}EFB^e5jV(1GvyL-L3CeSi?|F)}^qP#Kg^ cy$8Jsac$V@5RE=V^w#eWGsD)ysb`1(1NhGf6aWAK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..62de695f3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +msgid "Sites" +msgstr "אתרים" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "שם המתחם אינו יכול להכיל רווחים או טאבים." + +msgid "domain name" +msgstr "שם מתחם" + +msgid "display name" +msgstr "שם לתצוגה" + +msgid "site" +msgstr "אתר" + +msgid "sites" +msgstr "אתרים" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..699024a0f25a4856e7ab8c178ece3c37eee961ce GIT binary patch literal 665 zcmZ9I&ubJh6vv}hgwc~X!9(=aQnHg2b=$04q`$Dz#ifki<4$%qWhNPtY_~mm)Ka~v zS5anF1jUnh@=uZZQ+%1NuK3`S_g?aSZ{C|Mj6q)mZ3OV}#rj^2j zmTUdKJ-&V zdDI%1BA#vZ$K_|m@kqr>QE#`mJ>Q+RXtZgxml|d|E@3$@k9-XOQRxmIjD&U4cONA? zWOc3!-x^9ww)McIN@pCeK2iSfkQ|Rx)X&FOJtX)>StYj1, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "डोमेन नाम" + +msgid "display name" +msgstr "प्रदर्शन नाम" + +msgid "site" +msgstr "साइट" + +msgid "sites" +msgstr "साइट" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..90773e6cbd47f74069b4eb72d3e1e3fbf89921d6 GIT binary patch literal 876 zcmYjP%~BLG5RQmHHENaR!IOvfAO%HbH(9}jfx({@s;F{>g4Kh!FcW6O&LmSwSYV4s z@ahBj7J9)Gui*=L^98gs!-`$=&DZIC-RX4Y=cCy#1nmyu31Wb_hxm*L_6>0h@g31Y z{6O4C{6+-bAH;0%Z#24x$iEPe5qB{@bCZzeu#fxz`89Hcyn`I}KV5N(j45OWaT^i( z33Y>o^QVTg#`cw$jtqtpGE)krL5osCDzr8pQlou{34I2x5~*}xEO>F?S|n4hD#Tf> zC;#OVhZXCeBfHid$<)*BjDD2XDWhY^j)cxlv?nWLJ?*<(W%SK)?&!e85bf>^XwORF zQA^(nFJtI1zDyaXybGMith>lKV<@D1a;!qlYh9PJRmxX^zlfLEB14Pb3Fqm+3hfHv zjg6tN&>KTfm6f!YU&RR4%R1Cb>yQ(pS2<3iXr-pyzXZ-Y3Zg;O{R1n!^(m3|N4w!XrtZY*ouN~8C$v-bX6~1@_Y>% zH_^{HOA-!qa}ZqiG~pax0s~azdL!vfx7L%T;Lg{wbDhNi6}t(p+9ha3Zsp7h;Ul11lz_7)elt3XjQ*Ws4|$brS)VRU, 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +msgid "Sites" +msgstr "Stranice" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Naziv domene ne može sadržavati razmake ili tabove." + +msgid "domain name" +msgstr "ime domene" + +msgid "display name" +msgstr "ime za prikaz" + +msgid "site" +msgstr "stranica" + +msgid "sites" +msgstr "stranice" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6fc772a1d22c4f18b9018a28ab682aaa48d22a7 GIT binary patch literal 863 zcmYjP&2AGh5H?UiS`b1A^~7N=NUbU--n6J?+W_jHREdbvZh`A$*GU|9?Un72ChCa` z7p^=B7r4Ly`T{%vcW#ImfN|22j`Z#4@qF{MBmcZJ_kodJC)^{Xgd2qSgkYZtR|%g9 z4Z>H#O~M~S(ETOMh4ZDU?l$oc!aU&`-T%7G*aq=$;=9EB3S+m3H;F_1`5C_=rW8i9 z$$gk7)D0H;pBu@hcBs5`EbU3iO^Hf_#!^CtS{o0U(LUUv9)YVclMajpk8M|DxpGy3 zqlunf$YqWyPCkz9Tho`B=X*JSA+1wJCy@71cTIF4D`P!xxvt9j=Ai3%Y7&U{pQU`u zO7x`V+vsHi4G}-!BIfZb#Bm~4mqaWC3HgD1qe9J@Zk3CNys->IB%-k-$fBp{JWnlZ zSD-gGftJd8C<}OLiVkd)su)z}i8Ho6Rz-oeTt1>4-5p?8@>F7(z)@963x_08s9~Y! zeU;Sf!{M;zLtWL8$F~M%axjj8&&j|ULN~8 zEmY}spaHFuzIl}H^0k>RH0wyqcXVcQrMn5NwUz%rZ35IO+Ajtc3%+Y?=@QV@#C6S; zb(kKT3;I6oui1>@F$f^Z)NPO(&)j7=IXMrlP^dwn<;C@g9ggzTx5&0lDYY3&DEq{q z`?CD@@$}2Y9~(acY@6^<29vFiU})M7duE8=-__WdJd0yW((d(HiSUFjRAesnF;hbJ E582A^IsgCw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..5ef2659fe --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Sydła" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenowe mjeno njemóže mjezoty abo tabulatory wobsahować." + +msgid "domain name" +msgstr "domenowe mjeno" + +msgid "display name" +msgstr "zwobraznjenske mjeno" + +msgid "site" +msgstr "sydło" + +msgid "sites" +msgstr "sydła" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb2a102c505fc365cc26b03f15be36ae53a66725 GIT binary patch literal 796 zcmYjOJ#W-N5M3aA$V3Q%prRPMMA6>aN1_BrCj=o;f;e$H4E@C3*uJxOt=)B!%O9Yj zp`b-dg;G!}d;B*LpTswae-mFJp1(BJ-6p0h zjM9_5>&N-JaP`lFWYc(=TVYs~2}o3lxde%&fEcAz7Gfo>%b^^DsW27>lm?5trp1!n zR0WPFdiLL4X2@~!F|4oEP{fw+B>c6|CRZ|qWQa0V-au4JTi!Eip71AiYIvkV@cJ(z zzM%zL((-6x z;;6+z1~i5b2e_!^1TgOqmb0bxT1NiIJ9kAT`t!l&QKd+yRV`x zzBbdjT6;qCO&O~smuU!VySe?>Xb4&D^^00#!MBtyO$f4@{F-iO9j3?bf`t2B2o~2p zwyk7=l^U_fXRj=qlYNk)q_@--ixQ7Av|x^!&!gt_s5u=83(bjfPhA(yF)dDw(6(49 g(xE7XY(CLI$@h2QjF>Y~CGB-Q`OPNP*p#T~UtPH3=l}o! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 000000000..6a511f9f8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Honlapok" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "A domainnév nem tartalmazhat szóközöket és tabulátorokat." + +msgid "domain name" +msgstr "tartománynév" + +msgid "display name" +msgstr "megjelenítendő név" + +msgid "site" +msgstr "honlap" + +msgid "sites" +msgstr "honlapok" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..17c2ef305dd1857471598c9814dc09014296023c GIT binary patch literal 906 zcmah_O-~d-5N#DdGI}r`JaH&)5YoFdn-E~uH7Y`aVI#rOdo$C!+hn$TGu=Jq1u~Wp zl#we4w~y=V%*{VFloj?w7_Ldw;*h8|6A~nAbBLLg%0R57aXBV?pgSz)8dL^`E$b3V zgzluQm+Q$twM1jb{G-WYrdD`t=zKz-@k|RPLr7MbY$|VwcT{F*T{lHSA9S0VMk)kv z@o_|FGR_QY=|g6C2o*n=pngDuNeF__pB(oC-$x-`;?ITad9ItJ{xl7yp%R1>!MKm+ zEii3plrgDOW>gl!BRoxLSl}YzDcr$rFua%MVM)k_x{Eck*=0>mBhK0(+|Sxv3MOH+ zWlSe5mseL;OUAVn4Zc>2Rl8gqbxP^q`f{sR9`ow+_1W|DgOcyf;IndxYxO#KpW$n! zj87?K72+1lG&i-U(HxyR*ST2@p3zwut3=3V2vf_#ob4GxtLH7I-HfGlPGxN!g6!m> zu2rf~xV2FUBQ*%dsvh~#w;T3g@Y-$<)`@*<_Xg|sXz8^`0vo3`w{FWCSPLM$0Ux(3tXRF%xxA!-?@RgXbW4N X6wTaVH}cT#{C_Rt)^JyxIeF(lUT;aY literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 000000000..adede4dcc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Սմբատ Պետրոսյան , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Կայքեր" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Տիրույթի անվանում դաշտը չի կարող պարունակել բացատներ կամ թաբեր" + +msgid "domain name" +msgstr "Տիրույթի անվանում" + +msgid "display name" +msgstr "Ցուցադրվող անունը" + +msgid "site" +msgstr "կայք" + +msgid "sites" +msgstr "կայքեր" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d1251a1e35f69a83374cfab7091bc8c1533c438e GIT binary patch literal 809 zcmYjP&2AGh5H?UiT6zEuoDdqsrB&tZZlo&hhE$0DNRb*5m4&;z>n2Wj?Un72<{h|l zmv9C#BRf+H9BoFBqSpU0m0W_EUFem>s%#31*9r$7!o06qdiz5;iFZ$KOP0c-=m zfWZ3$Y=!%+CGR2hXW+@|{pB`eNAQ1#egyq{rMK@a{4byp!r*52fKX4!8zlJG z0@_mEDlZ+&$C64@3#CbmT2djjHl7NjeXt2VC)bEVIx?2LxO6R6D%VtEzTmU}Vwpq6 z#o^e{nu#nt@0a|&v`!hFQ8^KMWTFe%80-1Kja12BPe+dDCZlNhCg;ai3J)$n5ng80 zPSSmzq&)3Vnr2C7FG-UGM1CPZsE~8R>+s}|r-#%|v;A~0fkfxRd7fLLT_wD+84ZN> zYNF{xUSCT~FYBV5`eLl)tFiIuK-DTteS|nYnu?L+xfFFqeeI>KRIt&`*!w1n!k0! z%g^}1h8MndB`rVIg(*=>MhBP5|0^{kC8A+9wW8u@#?~$)-7KE2*Y48t+S}3eyhrJ7 zH)5E*aqL`@Hnq~&fW;Chtqd%h8so7EC=xy!=8vIZ0mA&JXeK%@u?MSILAB8i?XYXh MCR^ABvp5|43om@$#Q*>R literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 000000000..b777ce6a7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitos" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Le nomine de dominio non pote continer spatios o tabulationes." + +msgid "domain name" +msgstr "nomine de dominio" + +msgid "display name" +msgstr "nomine a monstrar" + +msgid "site" +msgstr "sito" + +msgid "sites" +msgstr "sitos" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b6b923b91dce2a667ffcee9164681cbc69df245 GIT binary patch literal 791 zcmYjP&2AGh5H?Ui+HwFSIB}RGsB(5UP$k_Egea{Pi9l2q?$foqakFc$Y%givfddzw zffIK)@h054@&YiMz~J+PUsVU5N;8E z6N2s!VJFP5bh_Kbp9uFa*I%wOHlp*d#P^7Q5wHD-L)_hK9p51)7e?Fc1|j4V;sy)4 zjghRgx5`V$^0@?IYE&9D))ETT+IT38_F)h83S5JQbYLuaJas)Llxr$nt@Z3bU*;&{ zdT?xJ&ABW*p9ub5TBnT8K%Ap4O>`m~V?Cd`QVIT|EgjEI2GQ(I&JV3bPg?#Gz09DW zr29Ncc{+eJ&62@hk|qfW`HB3XLd>mhz>@>se+=m`+kdi`kVUW1d7fL;u0n5Y2G$6w z=&3cenxhqJh1#3vCDmT_3R6EL4_&rcN}fxsGni;$v~&tJJe+&qWO2M)E_*(NRA=%c zIK^F28>%iN#7e}EqUmIMv@JjFCD9>0tJIX%s-gP4yzntSrP3oPC?zNT_+5U?hg)5^ z>r7gHq>GS!nZfW>`G1*aphPsQT8kAwHnw&d=w`ii<8%bwbexPLM%`{5dyO@2+U=FV z1qf`=LoIcQTC}=^1zKEqX+ztc0`%C1zV{e?4+MI%5`^+tH>z5o?smIR5L!=nbmL#u CiP`i3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..40228eda1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Situs" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Nama domain tidak dapat mengandung karakter spasi atau tab." + +msgid "domain name" +msgstr "nama domain" + +msgid "display name" +msgstr "nama yang ditampilkan" + +msgid "site" +msgstr "situs" + +msgid "sites" +msgstr "situs" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e22612f263d7cdaa1fddd5afc4943df721e68456 GIT binary patch literal 760 zcmYk3!EO^V5QYsDBo?@E<}kgrD&F-*DhUojsHK&H5)oAkcX!v>xZSl^w$n6Hp8~`? zz^m{C91tfiT)1)J#CX#*jP!Xt>wm`Moga_4J`uEg$P;9QJV36HV4sl=@&$Q_d`H6h zFJue(gWN^_A|Gzyf;>a_@irlk(0@fA^xx3mNB{HM|3)9=!9sqx|4spk?RnUWZ>1bv+M3c7}J+xAI)Y8|&OAZ~D?o*c1vU8$O{!}ZggGBp3@Ekmh%1H9z%;p!g-ompX)0jnv_(!G2j+PBR&C5%l;9pd_5BW@3C;i}Ec1(L4UASv1Ej`k?DU>cb^iGw( zX_136(WIJNQPE>#YsW!1ZRiG_KCHHb9Sz$9NO$`Y8Hq4xsSRjT<07Fk7sA1L+nBKJ loYhl2I1huSPL*24q{d^bylAt+xYrekl^#WYZf, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "La domeno nomo ne povas kontenar spaci, nek tab-signi." + +msgid "domain name" +msgstr "domeno nomo" + +msgid "display name" +msgstr "montrita nomo" + +msgid "site" +msgstr "ret-situo" + +msgid "sites" +msgstr "ret-situi" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbfa0fcee3961cd2e49cbb4146e02d0d6f39af06 GIT binary patch literal 812 zcmYk4!EO^V5QYsDkQOQ-4qV_c96*UGC%X}lc0&+QS}9T^qIT(hvg>S|Z0yK(nnvm) zaODAdK8rv3Gyn-}uBRZWE7)gt$X|Bz$}&ZW7;! z2JxM^OZ+Ch?+>xz$Ja{VJ<>14gUkHKb;jP%`=6wnq?)`>uj)WgJN-EK7z0GCe`5K;c9{ib`n*saDR{)&cldDO^Bj6Y;J{77?P16iWBK;u6<1&?(k>_q8IVAa4Vz;4$wND7*w`E zr%epWP@8OK;7H~(lUb`3ymaN<>k-zZeMM_jKEqt_MBpTbPAUpinM|QFbZ#2g>+|`% z=6p>#5T~_NPwM5Vu7vEX0(EKY)u7wy?yb)s)xuzx?o}x2YcZt*I&tdibeB@KARVHy z!nHpn`+R%t^Lq`1;d?68nN)cU+kNT&H5!AoL9dt@Ecm`Q6B~n?u2S1>w4fZeD+-=K z6vE>+L~wQnWg0@8@~GMh*s&N$!w#08m0VuHWO)u^JeDApl0z&qguX05EH4nU<#{ot no5g{I3jGhOzA<(5k*hV, 2011 +# Thordur Sigurdsson , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Sites" +msgstr "Vefir" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Lénið má ekki innihalda bil eða dálkastafi (tab characters)." + +msgid "domain name" +msgstr "lén" + +msgid "display name" +msgstr "birtingarnafn" + +msgid "site" +msgstr "vefur" + +msgid "sites" +msgstr "vefir" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a370612f0380e076fb8d5015b8460e22e3ebc3fc GIT binary patch literal 795 zcmYjP!EO^V5Otw|v>-t_^u%GfwW^%m4Xu)H8iZO}DH0J;yKr}QosFx_cx5|HlW*Y4 zl{;4?B;dlK|G_UH@dGf;d5!AtgK{d?0xHMz}}#PG}N- z5*`u$5WMa$VcpNyYTXm!PlQc^U;lcCv0dUH#2duFi60ZM-L3aGu6dJ~LKtnc`viX< zAMeede`6%8?MyjoSvr=G>xobZC?*mzfv6p18l7JgI0svaOj^(eoEX{$%ayH4F<+KJ*QA|XGO7s}^c=~_J6=gk)ox0Aiyoro-WBdp`85ok-{ zv`OI1$&o+}heo24g+K)dc6jT&DyRx&Bh!OcLlhQ7VD3HFmB_!f-a5 zHJs0^M)J}}g!S8QsJspjl?%6ney@MLszTg|f+MOf-GQg`ik|7@r3NT5Ab?)I7qkTWQ!MwI+Sn~6;TtEFqZ%?{Ml?iRxHF2viN zfKl%i>y?0-TAnNa0~9JvK0-CU`m*f5L}{e&{z3s>efHgNuw?{Qe@YcuEU2*c$|{Hd J0NM|V{R5)E+8qD@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..49adfaf9c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Nicola Larosa , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Stefano Brentegani \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Siti" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Il nome di dominio non può contenere spazi né tab." + +msgid "domain name" +msgstr "nome di dominio" + +msgid "display name" +msgstr "nome visualizzato" + +msgid "site" +msgstr "sito" + +msgid "sites" +msgstr "siti" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6670c4513049bc28ddade753556c983375edbfd9 GIT binary patch literal 814 zcmZ9I&ubGw6vs!cimRY_@E{)M;6W*q>=rfc#)w#3s5Bbt>V3L9NhWM&mYs=dZr#mA zQ6X6Lpr=Bi1rH)3SP}c5co~YG{Ri|-(l(_JKKtg)e&4V8b#dY?0y_;{0RrGG@CvZ@ z4LAvG15>~ba1QtjSlvHh!k&+fbQi!6fJ?v`xZgaE&_nQ_!P^*}K0_t%C?K;bqZ+j2KGn>}Q?7TDxE}FJ*z=mgIG|QV3M4r=|4xN|HAawhryTK!E2L!H2Jpazc>9K_OP0ne8=?Pnf%S} t0DeLE(qwBU+cMcFlWm#|Qhu83gUQ#-YL5P_Z~fl*4uy^uKHT!4`G4$U244UG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..335a1d7d4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Shinya Okano , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "サイト" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ドメイン名にスペース、タブを含めることはできません。" + +msgid "domain name" +msgstr "ドメイン名" + +msgid "display name" +msgstr "表示名" + +msgid "site" +msgstr "サイト" + +msgid "sites" +msgstr "サイト" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7eb889d0737c61f3f9cdf5fecb1b1d405567984 GIT binary patch literal 993 zcma)2Piqu09F1BPMnMtuaA@OC7y=NN3X7X?K$)$=W~Hxr)?3 z14Lw5N5Bt`5i$sV3O?g>u=D)_ zqlLgmP5^Emm+Q)%-z(Uvx|>;HNYoHCQ7xWHDtSxLm`kZFjg_=c<8p(VHjjm&N>j_1 zOpPR&X*c;s=_dzzi9urdF=Roj6%kuDm$3Unn@q`&CM#T~%3Bm|r7fE`X_m05PHI@B zLh3EtiP*Fj+``Llaw|eQ><5>bAFyDQ20`eL4*7xa!^jrJ!^~y&eWT1DXTdlPu7o50 zkdN|ib7NVgxin2~l@93*ndqOpbV_x&jT>3AiJzhbjY;BQ^6v^TOqwA zluk1)>0ra!c37{kt*zCp3(S_qdM#G1dUd59HTU}KtGs^6o1dGX>0dsm`Q9`hRY(lA z(Z=npShsaNWF{wQ+~C>>J9#gfWn+DxJ8M~JHX~z|WHJru*ivTq=M3p8_ZFHR&6{ji z>6QtpY?r@gGMJ#%a?+phNRfAoe5=S`6#3gCe_rHIu!j1q$X^%vt5Vu2x4X3G{amUq zp+Z9M8_D?})vF+l%RP8;xlMuH9!Yo)}mUm?w)@Vn1mD{b6 k-YmOCj!4KDvf9LVZ?x)W{b|wkf7jYiuU^Hy$6>GZ590)S(*OVf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..5d05019a8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: André Bouatchidzé \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Sites" +msgstr "საიტები" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "დომენის სახელი არ შეიძლება შეიცავდეს ჰარებს ან ტაბულაციებს." + +msgid "domain name" +msgstr "დომენის სახელი" + +msgid "display name" +msgstr "საჩვენებელი სახელი" + +msgid "site" +msgstr "საიტი" + +msgid "sites" +msgstr "საიტები" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3571d0df5358253579669229841b9b0674978280 GIT binary patch literal 808 zcmYk3&u$Yj5XKD@kd{9}960qbaB5XK*{w=bZ3#jxtyDooRTl1(-O0v{?G3g=8lHhG zM^1=0;83`5<|UAL1zrHgO-mT*=g;-ZL>ynXAlKW}W%Y z++=<;(f5a0it|fz-yPPE%)RsVm&-!z@%L}6F;83(;x@}I)>wD>TpzGD%? zx-p{fBG@*Mmnx7K#gL$C3@Qs24MB<4HUY}UhPa1z27Zhsd1xF2?E99elpkxHo%zLo zxx#bBv%!l)*BnzBn1s(apQvQ`C3(SXHt7vG&v-PFABNq2m^cN zQw)^DdYV0yX(qD{WLche*3v9Z*(i_bt%@}lzK+aNnQlhk#>QI8kvvBqWZ}?yjiGTl z^d`SfKa;Ishx8ltWZ+Ss^oSp4I-Msq_dvJG#ysXsTTieiSrD2Wo?(Bc308(7jPrJT zI-RycEUN}|5)<0~e3(^4(@*eq^AN(B^(ByA9H zaK8)L>UJUyyg|()x4`mG{qbp{156yKcSbothkzB#sO}T*c^ZwBCJRa%oU(F?a;ny9 as%%Rb8VvYy(Pu;)79|CGLz*|^X@3C}72X*D literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..db4aa2874 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-06 11:44+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Ismal" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Isem n taɣult ur izmir ara ad yegber isekkilen ilmawen n tirigliwin." + +msgid "domain name" +msgstr "isem n taɣult" + +msgid "display name" +msgstr "mefffer isem" + +msgid "site" +msgstr "asmel" + +msgid "sites" +msgstr "ismal" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..edfaf6dfd1d9734e5c0bfbe1d6c1ca9b2f775b01 GIT binary patch literal 895 zcmZWlU2D`p6dkpG5Jg1L7k#*oN}1iHShr1G5o-&@7Hf^ZPqWi(y4jhKnYFD?wFMC> z_C*WglZfvvcBRX<`WGhp?vL;f=$&l8zzZj5a&yj^d-MBp-+O{}7I7UBAkHJ+AZ+a* zP9r*q0mKi)1;ihO)%`{E+4G5>?h^7_#8t#a?0-2)$TIRa@-^haQ-oYWevEt$IYPF& z6d5f9W#kOP&SP_J+4~O)WxaY5YpzI8=TMVP77Gxp$suGyNDZMB+V+@O0+q6mE07sz zHmgdc7OOO2ONE{s^Ad%L#Y2(lOwRLA(}@~=#xoU5;X`eniAXv#Je8TIQ!0vU^nNQ+ zG>|?x(~kl=nsKI4OCK=JeHd`PLF#(ctAOYEZl&M#To;9OhCh#O=8>*K-C^ntgLm7% z<@UQ+&LmTs1{o77VOnNBOmYc9)|zEu9quGt>fZTYgxe>jP&V(PM?@_aaT;*e^x+|U z!5VeAQP(>4%jJcIg_5>`@f=^YhH`JE14{PY8arCvE4j`n{!}h-sHGIQ z(|l2v@khpD1j0JY6xY?K!8jc{(%HM_ct*!WC~L8Zd>ERI_2HC0G#buy(#lvu$7R-3 zK8Un, 2017 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leo Trubach \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Sites" +msgstr "Сайттар" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домен атауының ішінде аралық және табуляция белілерге тыйым салынады" + +msgid "domain name" +msgstr "домен атауы" + +msgid "display name" +msgstr "бейнелеу атауы" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайттар" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb7aa008dcbcc075e1761d3467c4858718db9452 GIT binary patch literal 701 zcmZ{g&ubJh6vv}hgwc~HK@T}rN_H~-+BWNo*dI{s;!;NMaVI;Qb|x8;tlJ(fqOC>H zR*QI;5fMCj_0JLVpZI3Bx(D&WC*S<|zBlj9ugh~E5yW}m8n6Of05YJCec%#s09*u4 zfH~kRQ0IIH-kw3|2k1?pa~7eipc?cF=;5h;0|i?Xb>2Auu9~Rpp+wpuMZyt~v9y30)%55{~Y$TXca!1RLBs5*w~; z#+^0{KjcbDi#LQ!M27D|H*mb4HOH1zLwyf&R66FVAhF;%!;eO}FnE6CT*1O{GMTho zT~7|hPHUj^a5~W+$xf5Q?L535^wxW;v)Q8-4VJZXLP1Zv1q|oJjtk*GO4Y%G5jR%2 z?vr?pEY5uOw}!%yRW;CwR4K!Y&!qd?B*WWz(9gz(XJk#A+%l|+=4iW72T!+M+6j;^ z_kDHb%TK;~>8sbitbFy#m!Ez4)0ZE7by%+@Jb~v+b9wM@&YLEG&zHyWw&$xCjrV<1 N>BLv>px*x, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ឈ្មោះដមែន" + +msgid "display name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +msgid "site" +msgstr "គេហទំព័រ" + +msgid "sites" +msgstr "គេហទំព័រ" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d4146575d82a5e5189e63361a7a18a62c1f3a51 GIT binary patch literal 673 zcmZvY!D|#T6vm@g!O>IC9v(=sMY1!yDlA#ngW5u|i_3QPY}`p_)6OKrBP%kPO1O?Hn7f;?Le~K@=)gJ7FU%n*YdwGxiUR-!dFis)okPYMv@&F03kDNr_ zA!m^fNbtWR3&;;7_&<@&V}$%dT|_P%Cu9kgp`J&*i+URM5o+*Xpkg{fnbn8>Cy)@~ z-Tz`!T46{kO_}pOP`nT%)diPozBg!-uo%*>^tKpTx}MTIqB2q|2I)3enT`gc)Rm<@ zlgX4`n`DL#HG`;siw?wn8B*yDZUuu@(rVJAO_NK|OxTsn7ZZ$VgBweS6;~$bR#yxL zdMxc2`UA97HsP6|L%|CMH@Q+g<*+=qwq$WUolYAz6v{2J+ZgF0o=@~w@`LhtN5v~q zZ@ssAID4~^MAx;lLSgg05~s6b*T(n{QgvW7=9Lk)dwaM>+lP6f*OsX0sv7B3s*FMV zp0xkQWU!;6em<#qPS, 2011 +# Rohith PR, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-08-03 10:54+0000\n" +"Last-Translator: Rohith PR\n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "ತಾಣಗಳು" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ಡೊಮೈನ್ ಹೆಸರು" + +msgid "display name" +msgstr "ತೋರಿಸುವ ಹೆಸರು" + +msgid "site" +msgstr "ತಾಣ" + +msgid "sites" +msgstr "ತಾಣಗಳು" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e697676e25e344ab3036795c84fb257802265841 GIT binary patch literal 807 zcmYk2&rcLF6vr!~#!(aE!GrPejvDOj3{inWjFBG^l}K>(US`Yeu)FP~?FxG{h=za( z@duFun|L5b3?>>R!IS@qe}FT4@#IZjSz&p}XTE)%?|Xgiuk)R&1mhHP2?>!i$ScIg zE^-3-f%G6hk+aAj#QOdropyb!|`I<2t!zMmYaB^o>Ke>9m;a)w8Sjuq(>u5=iN{~1>X<6-fqwLJT%ft{xq>Y+rD1v^;5qe{2ReF zuiL|L9x!casF=_dW~2(>UQ(A*T!p&~Zbqt}8W}5=mg=|5Qj}|Dmql(_-NHH%*I3MH z$XPXj`x1u|aJghm8Wak%v$L+TO_OOp=SH$xXkF_-D*vksWm&l5jE{|vv>(8CJ!c3X zmJ1xLp5hG+pECt~%tQ=8RANeVGx#_hrG0ImJ!_gPIwB%jOhg<&-&A4_rwpJhory|K zu?iiPs;UDJ>3*sQ{Q+n#2fYD@@BzPJYY`, 2016 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014 +# Chr0m3 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jiyoon, Ha \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "사이트" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "도메인 이름은 공백이나 탭을 포함 할 수 없습니다." + +msgid "domain name" +msgstr "도메인 명" + +msgid "display name" +msgstr "표시명" + +msgid "site" +msgstr "사이트" + +msgid "sites" +msgstr "사이트들" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7bb91641929efb09b0b03a0ff0879982ebe0c575 GIT binary patch literal 811 zcmZXQO>Yx15QbeSA6gLNLvZS0jv(Y@8${J^2|_?CRZz9G3wL+pZnoLj(b`M8J(Y4n zz?B0>j+`1KKuKuIU+|VYe}Ef*0LGiNMPj69UwihQ@z_5vkG~@rXOIcRN6sN{5gT3P z6w*T~$amyC@*AMztwsADGyIg5G))%qq- zv4r4navHJo*uFOG`GpD>|fre)&6s?5@@HQs=w zL>8K+aSC_TC_OndRceIyLcC&J3S{#xb`W98LQZ|onjSpLk}%tX>vgSLUb)w6Wqhqj%tBCSiQ>BY z)Ssu*$3A=3I#1}F2xKi1p$F4zkv^KzgGS~o$7#Z1Ixmx^@<6nTt*TDW!f;u2XB}cb zn2zb?JNb_3Bs`~`aYrkih@uFdx` rzi0iXhlS=FRuyea#PolB%(oAA&ER17V0YB@|8od-EGmu`qlx|k(AyQa literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.po new file mode 100644 index 000000000..e38cf654c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ky/LC_MESSAGES/django.po @@ -0,0 +1,34 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-05-23 06:09+0000\n" +"Last-Translator: Soyuzbek Orozbek uulu \n" +"Language-Team: Kyrgyz (http://www.transifex.com/django/django/language/ky/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ky\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Сайттар" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "домен аты боштук жана секирик камтый албайт." + +msgid "domain name" +msgstr "домен аты" + +msgid "display name" +msgstr "көрүнүү аты" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайттар" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 000000000..9e43bb988 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8cdaf71ebfd0fb48a448a9c61252105fad1335a2 GIT binary patch literal 869 zcmYk4y>1jS5XTJ!kd_Z23Mz`BAW9VZ*1iBqHras4hZHF%qOc&^$*!~Kuxqc@z9c8* z5omb|$~4eGbAcgo$x=#8+ z>XN>ZZj*kI0{4eB6UJ92+&%K|qz9zH{k+Q9BKdFfyX5gT#_o`>lZX0U^1!_#rxHdO zyFm*334KF^^)G_3NxarxIhOSm6t+ffz+kN)M`Nsq+!`PLp&5c}Fjo$23my+#hZWj2 z6%NNd`>&Qc>Nx&5w%6Jtm3zKZ@VBaU+L{E4BQ&Lr_ElqB&wH-a1%Ejx9nWk6(cY_! zZ?pK{RU!HPdtwYuFEtA_qn=*mr1MM$&nn2~Fy=u^6#kXx+y97)#PF=dV3X@?vXC6zD zrV?gnAq>T%R7!Xb0tlykJ?)06F(%fefU~m+M-yV6KuKVCel=p5Ht#E}u+ga5rmdAx zU{r~fhJ(>3ujz@j&FCC({8$E+#$#Pu7=2Y#H#+aI)`l13;27HiU3fmq*o(|xc6V$# Hrj`Bz)`9LK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..afcb5ac6a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kostas , 2011 +# Matas Dailyda , 2015 +# Simonas Kazlauskas , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Sites" +msgstr "Tinklalapiai" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domene negali būti tarpų ar tabuliavimo ženklų." + +msgid "domain name" +msgstr "domeno vardas" + +msgid "display name" +msgstr "rodomas vardas" + +msgid "site" +msgstr "tinklalapis" + +msgid "sites" +msgstr "tinklalapiai" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a3ffa5f8e9a16433f94bbd311d4fd00b0ca322a2 GIT binary patch literal 823 zcmYk4&1w}f6vv}hg;7LA1i{7W!qQT5C#l+xsbj@{K%vD_NB6li=``(3G9;O4yX@Xw z@c~>5u65<+cIhkl5Waw(%x$d)e)*q-e@;F)zaC6{A{e)kCrF0eK|UfOz9Bb}@5mhT z1G$U*MuP7TG7<7?W8Zz$ugD`L)I7gV$UN##)Q7=)gOGcuk5O--PNN22jEY+b+WPgd z7V3rw=U)ce#_>*h=}5LOp)j>j8nmb->rII?5Sfy_PKEa(SmoiaLs;y~!qM7y#v*3)fQs)D|0OGh)4K(zBVqpMa5 zk6yYayi8z@@fVbF$`^q1ge}Z6&KMf$uIyB(dF5N6Y>DzE;Pc6IHp?)gE#W-PtkA9! z-q-{h>7`X}2rrxAYuD;hxk1&vLZdEQQA(OgQ75n^e5Ztl>3#2;B#w`cjs`xIQG4=u zkefOlKjc!Xi|ujM#WT_N=Jxv4llg!}tN4{t<5f-?e3O^QKF04;dKvP4VV(5p`)q?Q zUirdVd(zT%otr}GGJ(aR^8c=xK-EP%Rcl2>H;k=a0=ns^E`7EP<20StPdQ6d4pUPQ zQZ|`#4lBR_?J${QvH~0@b2G~k`JklN*bQr@9-V0c+Bnf3w)N-~wCse1;rSO2zCAqu r+|~*@p+YaT{l}^S5#Eo^Dsv#Pj~sNPQ(L&u8GWsbY1bb?#^T6dSODTh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 000000000..65fceb0b4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# edgars , 2011 +# Jannis Leidel , 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: peterisb \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Sites" +msgstr "Vietnes" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domēna nosaukumā nevar būt tukšumi vai tabulatori." + +msgid "domain name" +msgstr "domēna vārds" + +msgid "display name" +msgstr "attēlojamais vārds" + +msgid "site" +msgstr "vietne" + +msgid "sites" +msgstr "vietnes" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..15763b6b135ed69e3a6836cc57789f4ea51bc5de GIT binary patch literal 885 zcmYjNT~8B16de^mQjIY_7$1DNK1d*B+TAKCE>?{Q35Lc7tBDUj47<~^(9SeFgTR~c z?4u^U`VXoBsYc-+nCTDDAK@R+GhG31a`xOid+wQg=hxMd_Y83!xB)bPi@;mJM;|x~ zd;!Y9A#e%!4S3xjV8rLAa@`g1K5z}VjPoC-8G8x-3BC@loXPv^;0vf9)n@P|yDBWd@GJk74ypugKW)`GmianMt*ZC|MDzr3;I)t24`Mrj;iA(OS#!hK{IE zf7;+PnG_aU{#aNUQ8@@Fc@XljLSYyMm5Cq>0toq{e4TpF6J3P|cX|0Xg;UYworwTZ zSP;hYMkbVL3#+q;o?x}q(1J`8*`|A#2Ia%{uq>vksqdplwbn#S@`e+ z#+I$^My1mF`g+lN)3hl!im~pL^0khr{m-G)SuKqhYV)<(lLrWkL16|DD-{OY>|#SJ zH*5)ynW|}umqliztv+we@u?G?zpE)TKC5D#q^cFs)KY4XCyl7HTBx_zGSTL9I_sE- zRCidKYI&OSv^u8f7KH&-s}$1cDCK29H&KV<^ne12D4Z@Z_rdiBJA-X^;6AxNbMKIR zb9;jw_uU-~wh6RHI5}{ieX{F%G}uD5J9vYWKDk3AJ+}`X3g5W}vmT-H>^|nkMdtec bFF}c)zNzoN`bGxN<0~1whvOV4c{}?HucRon literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 000000000..ad7a47dff --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Sites" +msgstr "Сајтови" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домејнот не може да содржи празни места и табови." + +msgid "domain name" +msgstr "домејн" + +msgid "display name" +msgstr "име за приказ" + +msgid "site" +msgstr "сајт" + +msgid "sites" +msgstr "сајтови" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d1d7170cad8d27969e754b9d2aecc7c1dcff28b1 GIT binary patch literal 1007 zcma)2O-~d-5FHgY89f*d#)C2K4MKW%219_sHAaL;;zk0a_hz@*9hm9aOg92IJcvf! zg9ki#Fxhl{r+e`fTj;(F8Q zeWN$Kq;+ESdy_vg`is5DcX5Ue6p&pv`g0K@Q>f`}lRpRJjnR8Xe>j$XT#ag&tK`_3Y^^R5ue%K}C|Y)|&=MNxgv>UYb;rxwsQ%AY3huG@u;s^62TQeo Ht+k!MGFq17 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 000000000..3e7026527 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Hrishikesh , 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-03-03 09:57+0000\n" +"Last-Translator: Hrishikesh \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "സൈറ്റുകൾ" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ഡൊമൈനിന്റെ പേരിൽ സ്പെയ്സുകളോ ടാബുകളോ അനുവദനീയമല്ല." + +msgid "domain name" +msgstr "ഡൊമൈനിന്റെ പേര്" + +msgid "display name" +msgstr "കാഴ്ചയ്ക്കായുള്ള പേര്" + +msgid "site" +msgstr "സൈറ്റ്" + +msgid "sites" +msgstr "സൈറ്റുകള്‍" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b1748bbc009268de77bbecb37bd6a8740d8dde8 GIT binary patch literal 867 zcmZ9I-%b-j6vjuzKUs}28uiA+;~j)dyIUp2#To-bLbS2L#Vc>7+hJL zSzQ%KBUa6XwR?W@UoBDCvG-A=mdO-fj4EQX;npWgHEqT ziU!gLr}iSCGZ|+Zz4R&5+=r6uO;FdPUKu>kcgy3h=elU53;a!Nd!G2p)O|=x_raU= zCmxKu7|wI1Gz~H)RKm2(e3)i!merXqEW)GuAb%3!)ssRf)5lmKqE!}g8gQ2SP?b1s z5;Fm#%UU=6VzJd~6|`*_FYz^7Q|w>qSdu}5Vk(MbPIbOIdvbZN;5sw-s9fMs?Izw% z^EF+>hm6G(gv%^bTvrx@IXZdbvu7>wjLwQsHewO^Fj+th52gx*zLpoojEjLhEBBY|N3k?1%labzK*_qbAZ{_ R-~fWF(}$AdxrWJLz<+MDD}Dd~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 000000000..1ab16b7b5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarbat.U , 2015 +# Jannis Leidel , 2011 +# Zorig , 2014 +# Анхбаяр Анхаа , 2011,2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Bayarbat.U \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Вэб сайтууд" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домэйн нэрэнд таб болон хоосон зай бичиж болохгүй." + +msgid "domain name" +msgstr "домэйн нэр" + +msgid "display name" +msgstr "харагдах нэр" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтууд" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57289a7f702ef8e2ca2e901181d71160dc877067 GIT binary patch literal 727 zcmYk3&2AGh5XTJ^kQNSz11Ao11R?K7giz%umqIIwni7?T`()SIxLw3cmWt^6Uu0R^Y_P$J?r`PaPJEvyGuMKO5z^znTYm{xJ_IUBjP)8pZHD0 zxIe^R9N!q?9*~|AkBGQ0Z!#uGKa$40ucUGPiZq`4V>|yzN-2zl-63K<@!V)JZfCc4 zgLf)O&&s8Q+GN_wyk0?vKPYUR5Y*PD3uUoP`>;>LM4 zbM{%IEkBc=R1D>>Fh~KTd{pp) zz86r8#Pj@FPL`aY54?0}e2c+40dH{O*6>>SC2HC=O^=P_r9>@Yim}iq%Mdz|WvkUH z4KY(KGAaNy7(f^lb7@;($MYej>-%2GGz1+%8a2}qVqCL z-j_#w|2i(-wUCYm~J!mlVS|RaFUM`c7hrW zZ=+|YTbL+g2_?OVgmKd($XzJ^cz?SZ_%%U>{qTGU_lwhaFO3!(?b58&2N% H?Ja)+H9N)X literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.po new file mode 100644 index 000000000..250a2da16 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ms/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jafry Hisham, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-11-16 12:40+0000\n" +"Last-Translator: Jafry Hisham\n" +"Language-Team: Malay (http://www.transifex.com/django/django/language/ms/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Laman-laman" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Nama domain tidak boleh mengandungi ruang kosong atau tab." + +msgid "domain name" +msgstr "nama domain" + +msgid "display name" +msgstr "nama paparan" + +msgid "site" +msgstr "laman" + +msgid "sites" +msgstr "laman-laman" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e706a9d3fd03cd541e4eadeaee7bfd1fc0d5b45e GIT binary patch literal 961 zcma)2O>5Oa6dkoHL_u*Of-YufOPTkQLT#H`(bg6V7E6tS%W2*;FD03IWG1$6H-flO z5h->dsNlktic9Mk;vW&_FZc)aB+ut-yYj-xxpU{-Gxz4_siAFxI0~EtBH$SC7^q?g zI1GFO#(?j@ao`tF>3#!4ReqqSI|+UQoCeOK{^lSdTi_qyGvMeDA?Lw4_yl+xT{DHD2ez06f9FDF<&Ys4zQgcg~UJP|AsJP+w? zS>!?sI@~s<6E>S08ygK%8K!Guv+8K}R_assx4oHnn, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:50+0000\n" +"Last-Translator: Yhal Htet Aung \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "ဆိုက်များ" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ဒိုမိန်းနာမည်တွင်ကွက်လပ်(သို့)အမည်များမပါဝင်နိုင်။" + +msgid "domain name" +msgstr "ဒိုမိန်းနာမည်" + +msgid "display name" +msgstr "ပြသနာမည်" + +msgid "site" +msgstr "ဆိုက်" + +msgid "sites" +msgstr "ဆိုက်များ" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b18fe64e308e87b712a1a8153c73989acfdfed4d GIT binary patch literal 793 zcmYk3&2G~`5XTp20U3l42TmM@TT8Wx9YH@_f>6JtqPA4UaNpPyXB&Ig+TAqGJ8_0LOnTYeBuM6>n{de}E?ic%z|HJ+^`^6ix_#S&M5u6q`nJ`c2 z8!X&^X)K%B8|~4FY=BUhT4@4OHA1e4jECHi4>?5>aE;2*fwACK&$UFMT~n#aR4@Lk z6^=VjKTaH5bBei_`-Oam)@eg26sL+x6P;jVte1zb)P>v{l}=_Rh3NQoCbumr&sw>o zJf_fzlV>tcWU>ZHlE!N*aT3QYlqYzmL(jQxO~xBC*??p, 2013 +# Jannis Leidel , 2011 +# Jon , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Nettsteder" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenenavnet kan ikke inneholde mellomrom." + +msgid "domain name" +msgstr "domenenavn" + +msgid "display name" +msgstr "visningsnavn" + +msgid "site" +msgstr "nettsted" + +msgid "sites" +msgstr "nettsteder" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ece467e0862d9a657219934373dec31a9f8e681 GIT binary patch literal 863 zcmZ8dO>fgc5M7{vWH=xsI92L$YlSvnT#C~m1hi5l3Q-$4aoO72#Fevac{jAVQ7#41 zYq=JXjW|_^Q*&wm3EJPlA1H5ak^&<=znz&kvv2+L=F9;>Tm@!+97)>QXMJj({PK+p7Pd2qEf?FbuS9pqhU|8uJWnZdCu0v z>&Qvj6K;f08?{D_)#|KKr?vb3y~f=d!h6cKVcnEV9dn~npRRLhl93^4)2I{Hx91 qp-OF@ks`xdEITcfdr;yIxHv-dznc$W, 2011 +# Santosh Purbey , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-01-21 09:32+0000\n" +"Last-Translator: Santosh Purbey \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "साइटहरु" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "डोमेनमा खाली ठाउँहरु हुनु हुँदैन ।" + +msgid "domain name" +msgstr "डोमेनको नाम" + +msgid "display name" +msgstr "देखिने नाम" + +msgid "site" +msgstr "साईट" + +msgid "sites" +msgstr "साईटहरू" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1f623846c7c2533211eec04462077d763def1142 GIT binary patch literal 735 zcmYk3&u-H|5XKiMe`Giy4xBhlZ>`YUPJ~c#2&y2hREdbF7&ve2iL;eGYwd25M&ini zE3bm!#DP0Ujywb}0JBa*8R_S5z5Zr)yz}ec&L_cflX<}8%x&f)6XFYVo%zc2nQzP; z<~I|3f0&)HzOwP%Wku#bbBp)iUlk%{{lFUXKC?!w-&w<%KUjnBCo8827IA|K-$LCG z;rwk}+b&*fk51%sgwixh6Od{U3Pof*6o!1*Q?v%xssbGt3tmlKEK2R#TCF?3_%ByD zuGl@Cm{@a$g_kF#e2dm;Lm8B3iYgPGVr#6IV^`@?K3`N$<|cz^@=BiKQU|LXDUTWS z)7}%A_GSMO^d4tv?_tUjy;RQ2+$wUl^2TP68zOG+sqZvyriT^(P8}DfdB$$47OFy- zqiQl3EqpPDy}9>omL#jyD)yn0p5b}$Cz}?xQePw|R44n<_+)%^`7^yZjb892A#peB zmfQ7s?i0QkO#>+A$~yGJH~FzVxb%gyW@zOR6{gfwWpFUn{$G, 2013 +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +# Tonnes , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-02-24 16:01+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Websites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "De domeinnaam mag geen spaties of tabs bevatten." + +msgid "domain name" +msgstr "domeinnaam" + +msgid "display name" +msgstr "weergavenaam" + +msgid "site" +msgstr "website" + +msgid "sites" +msgstr "websites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f4445922b7efdf6f5ab9cd72f91376b5cf882e7 GIT binary patch literal 731 zcmYk3&2G~`5XToNA2J*e2TmM@TdQjABwQ*-xseXJ;30Scn9WDa$UpzbSit%?xudPYd}8t<#25C}xUE6P;sYtd~Pq>OvkaN+&auLNq>;=Xj+, 2011 +# Sivert Olstad, 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2021-11-11 00:23+0000\n" +"Last-Translator: Sivert Olstad\n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Nettstader" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenenamnet kan ikkje innehalde mellomrom." + +msgid "domain name" +msgstr "domenenamn" + +msgid "display name" +msgstr "visingsnamn" + +msgid "site" +msgstr "nettstad" + +msgid "sites" +msgstr "nettstader" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6dbbccd67cf9abf70f19b02497b47b17ecc146a0 GIT binary patch literal 806 zcmZ8d&ubGw6kfH8tR6)1Ab5D*TFPX11GVYKh*(>wBsP@jeY!hIrfg=y&crm}#fTTZ z8vPga7Jq?-q<_OKy^2S{KfsH4@J-e>;)8F#_uhQ(y?OKP^1{eLJBPTAs3I;Po*=Bf zMHCV55El_&5%&HEVgd0JaTf6l@%j`VhzCe-PCL$3?{f{=%B|UY zJ0DXsvwe>Z%W`Y98N{+fxd1^s3?eFo)DTIbZH|fos4k6|0-1uQyQ<*CTy+yVnCYE= zY8}Njn;pujr*e-)nry}75la=9B7}I4ik5VDSXZW+)KrVd1L9rl>po^#zQ@z+SO2Eom6rL^p$xmBt(X{1!B zgld_Fa35FW3aX69EP-428Vv6wv#`KLQ{KiJ(dy9_BMnA7A#5wfG>>4ht#vo_yner5 z(6%FQvi(9NJ6^uiF(rS?J*m7Ux3*Q=m~S5xe0Lpxl?i;+po{Biwy!<>NiNC|wP}j8 zDi0f*q%_yrSxuIb4H3zhi&hAwU9L}_8G=-9J?W)1A)7Mos1QVV7OG0I47pob6mX*g z!BW|E%qw$fCg!u5W-q}^ZD5^=8AJ9wdyzdeV>3A#0Xm1~0J0&*@3SFhjz;+fs?eR< jT){!_gZX5>WKYdU)Z`5v%=|yZLB-e{WWy83HgNs`JFX6i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po new file mode 100644 index 000000000..f0bcd2a81 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домены номы ма хъуамӕ уой табтӕ ӕмӕ хъӕнтӕ." + +msgid "domain name" +msgstr "домены ном" + +msgid "display name" +msgstr "ӕвдисгӕ ном" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайттӕ" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2d6701ff77e3046dc717221dbc3dc067970929db GIT binary patch literal 684 zcmY+A&u`N(6vqP$Aq7smA#pI;rPbudnSgFCohJ4}8d@Qm0(Y-*GgpZn*)H9#T<8Q> zCUN4|0q+0@BqUD!Dad~cFX^D-NuPY*v%l}f_V4ATw*ka;;0~|@+yDxoju~(ZI0J41 z=fD#138;I%03WUd!B@}~;K|h>xDBd7>%KRj%b@Q-!PZ3GcMX80ChB=XCQMbZQzTi* zgG`l7$a!vrP?Dl-%w(>@LtZIu@xbIF!;dDp!KtDsOrEBA zTXSZ?i+7mi6s?i?J|;1ayC{w+>8_HP5HR9H{zB9<7rrhg8#vxT@dJ8~tP+UufEkNZ z&7>)qRhpv5OiE$U0T&rB&_g&4lv_npc7z zwzi^CG@VX6ww^6U{G>BfWi-FtUnwpJMHP$M;b4ETyLgAVL&9w(Ethb<(+VzX`H79- zO@-{C;W5*O+y1k353etL^}j}3<6SvanUFa}>qo-=J1|8R3zK4^S%LSIE)7MpYD&{z z>!EqtZ%K5wkK%SO47~f{FJ5_f?%gl%&b<4Ky!-Cm48%2SFTwNCU%dA2TjO;9?fh&! NGw, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ਡੋਮੇਨ ਨਾਂ" + +msgid "display name" +msgstr "ਵੇਖਾਉਣ ਲਈ ਨਾਂ" + +msgid "site" +msgstr "ਸਾਈਟ" + +msgid "sites" +msgstr "ਸਾਈਟਾਂ" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b0339c9d1c02c680810722cb9009aafcef7089f2 GIT binary patch literal 903 zcmYjP!EVz)5Zyun$#6hDAPz_j2dYG96FW^s;>0NeTB(9U)EXp?TYH;qYVTU!4X&de zxN+giiO=8y5)udKZ}1WP0L(fGVWgM0o_TL(V(+hw^^XMO8sZKjL|jLFK-l<#xPthK zXd%8MZXkXmtnLqD-JaLxx|_&rmk7Cqd=>MzFB8&5zKgtp{07oG&h}-KKJYy51qA~Q1O8Mz2 zn><<`8d)+xn;cEqh|`d>)Q6!;gdRg}Y)s}in?+GHjO{5-_*o-TX>-2pl9GkHnI+A- zbFhD~yZT#R!*!nE>*5mkDl=T%@H2x-e1AQN#w^#|1h2w9+F9xBtP`HoT^XrZ$dM17 zV`2Vn=|h${!(^JXgzl+4)jr6qdelL?hecZnYBC5s*Z~)OsLA`DI|y2^xe4~z588Em zuJUf*Yr*+>Rd5F$R(8Ncle~xirDzbiE3;R(`bE?2Rld8*<23BL7>D!bZCluOtKM_S zk;#=T$qP0sn7v^fZ;})oQg!i-!;BSz=j`YE>UK>8UNm8^*R=YmKRy=?A}eQ6UVK8S S!7soTsd+P^?Ep5XlKcg!)$q>% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ca0cdf355 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# angularcircle, 2013 +# Jannis Leidel , 2011 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tomasz Kajtoch \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Sites" +msgstr "Strony" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Nazwa domeny nie może zawierać spacji ani tabulatorów." + +msgid "domain name" +msgstr "nazwa domeny" + +msgid "display name" +msgstr "nazwa wyświetlana" + +msgid "site" +msgstr "strona" + +msgid "sites" +msgstr "strony" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5d885d185c84b3359d9a0466e165dadbad797f9f GIT binary patch literal 797 zcmZ8fv2N5r5Zyok$xuWoprIJLMA4q@gD4jthY%r=f^y0!82XJp=iA8MwRYEB?jL9= zs41wBXh2X=+<)*9h#qFo2^TTa^Xz!vyq%rdpX;md7}+hteL_mOO?XT2_Kk3Z@SV^l z{2<&R{33YXAHu3%ue7{1^6v?EFXGSF7#q<3SMomZH~BU4E7#k+b@E>S9(hV(w9Rf3 zd_7**o8P}QqP6x?I2YC9~Kwl2kN z!Dm-;nI*-=$Fh;pXP7yDnDf_Ytkf!j{7k4q2Par-^Jlf^mhYH55KA7hy-Lv3^21s%S)kJVj9@Frq@6qCtzWF>$U=!f-mB zcAOWLV?6IVa8k Ku>XawK7+rm#NB@Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..ba716ae0d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nuno Mariz , 2013 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O nome do domínio não pode conter espaços ou tabulações." + +msgid "domain name" +msgstr "nome do domínio" + +msgid "display name" +msgstr "mostrar nome" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..81c63003828b402e662f431a666d913529fea74c GIT binary patch literal 824 zcmY*X!EO^V5H(P!v~Z{p;?%<&6ID)j169%usZdHQRU&E>7Ou$Ioo-xh?3L{$4d1|( zFX({_9FgF}At!!=F{feZmKVw{L{IgztnF z;RoRX;Wxqa{t&kO|E(2ohx}*4MqH@4fl^8zb7vUP*_RB@={9PlZ&V#1tVFN@)kFR?eRZH3wUY6fI~2PK<4XWzv>~ zm@oNkBbQmKxcpc)H2MNl$4@i<291?k#gJVHmFr-Hr8bTaY%Vk2uX4*19YZiYOZbsN z;fTv$2!}DW!f2m|5s%ssMRC~P3!^Y3A|K&9>1(ceZ5|%*))R<2@&41jkSus9tmBCh z$`-U3Vx$PO=E zleQ~W7t)C^7G3Xka>6@no`3Ef4L???rb+S`I%DbnbsfX, 2014 +# Eduardo Cereto Carvalho, 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: andrewsmedina \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O nome do domínio não pode conter espaços ou tabulações." + +msgid "domain name" +msgstr "nome do domínio" + +msgid "display name" +msgstr "nome para exibição" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7ebbf59254602525b67de32e44d2ea9613f42bd0 GIT binary patch literal 857 zcmYjPJ#W-N5M3aEWGD~?6~#~x*^2hg4um8QPEbN3MIzyp82XKG&$p3p*4ka?5|oaX zmICodprWBj!(X7HN8%5_tep==dVaI3H*a^x^Yi}9M@Dg*@Q{!b?hrl@e0(9?Bzz^z z6TT7d68;dp?k{1+=hr&jJ>nmP2ZVt3e_dy6iTF3MuM2N2V0&z+Y+Z?y zR?q&cWtJSa^dVPNzNR{nbbw`;vb5!V9X->-$FcqhM!yXY;BTNiPmIsK*lNjwdxe*2!bnr@ks& zfnqF-l`eaeZ}Fuooj+?N4d28<4;7XvEFCC!dCwG#4hB_YM8&tXnb;JtZkINDvI1S2 zg_vc@TAYSqh>xkCtI2Y7dV0RdvN)QZ4e=3i6s^stNffOFY#>U73a0Xa?KTrx(a5w@ zBT+Sg4b+, 2014 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Sites" +msgstr "Pagini web" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Numele de domeniu nu poate conține spații sau tab-uri." + +msgid "domain name" +msgstr "nume domeniu" + +msgid "display name" +msgstr "nume afișat" + +msgid "site" +msgstr "pagină web" + +msgid "sites" +msgstr "pagini web" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cd6daf44551d5c6b906b79f92c69d5ba3a087997 GIT binary patch literal 1016 zcmZut&rcIU6do0SqS3@Z{Bt|A2neQt;s0eEYq5`+e`dogcUQJ~G5r;4V-Gt^?bE zi#Bi>H~{j%32+1W4LIE&pwHzOy1JX-{)>#=24_$&Tw<&Wehj_`{tUhY{tmtd{t0%v zUtm}mtn3Ql_Hlh(xcR++tQ*fFBQ+~8ORB~V5h+rlA*mviiVam_Wn4|Db<#~yk(%O! zjCiTDtQzTNU95NX>>n@F=-7E_wvfatvSRprmA{aQj$##1bw#LJoLQ93I5E7WYf+Uy zY}GU`#{p#)o|gGcB87pLKN3a;l=u8G?)lswC*Kde@nO&RJP7%sd=+&9-V%Nh-<8vQUvOQ9*Vp4;rVHMz)#6MHp4BC2EqF zrDz1S*wQ)@iUyaBX$HC6>gsCNxVF)fT+3GCMy~r~J*uDDb4e>Vlqt=ZX3wv{&w7~| zT&+}CZM}(qG;+=4aGjBwBJ7oDX~O5_IX-c&bF-FY!e><_u12aB(8SBgoUIv9(#kB< zTZyRixj1R)fK;<{)Zyq9b<=QA_4{5J`ZO>=F7@t*zE9KS5#%@*!+h^kAslsS$Ke(H zJZ)@rEk%EH2p0d;5{91p)X^2gv2*+6&{-XQF{U@O5Te60<>> z*$?*E9@%~S4bQRNC)>71=?>w9{0OD5c0b*u^bOK4NMEC{3+p!76C9519?Xa7mNOpO uHl>^By_dd4Z6|$a+v)o(v&X1H3H`3K!{IvjhA}k$-x3T%JA0lbSokmI_)&cT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..353ed76ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eugene MechanisM , 2013 +# Eugene MechanisM , 2016 +# Jannis Leidel , 2011 +# Алексей Борискин , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eugene MechanisM \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sites" +msgstr "Сайты" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Доменное имя не может содержать пробелы или табуляцию." + +msgid "domain name" +msgstr "доменное имя" + +msgid "display name" +msgstr "отображаемое имя" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайты" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fbcf69a0d4814401536d059a65c511ff238f8d1c GIT binary patch literal 822 zcmY+C!EVz)5QY~hAPfS;0SSr2oT^mS#&+5&!Kn+Pv{EGkQDeAo?5*R*-nDi&Nt0*b z$^-Pkp@*K}02erzo_Gfyf){|s8~YK zHqYDr*uFOG`WJz=Mf5VmHHiis5?QcJfM5lOmNmmn1FyO2`JRVHy3fa%?Rn{IQtt_EtbyMOHr7`?4Cf`& zhDM4Boiig<03D_bjucfN%>Xv}EGshgEXC3DdMt}AED-64rJP2b6#?{eIc7ts4U8!R z*PTozbz{3_2mHtuxQlr%BtNfq_0U~$I(wa+%gOz^=WOGNa)CRVmN=T>N5;id%tRaF z0aKcr@J+N!TbDk&)&W;^N5nG8L>fS=pP9eA3_uT^Zaz{hr@K-WIsj45A9c9ahQ)1I z6JhADz*F!bfST9}8?d|#Vl!N~NgtDqwnKW=X_7PYsyd#@vHcyY6a4Oi7uBb;uN-7w yvjHB)*#{_iGUI9rEa!b`|A$dt9pmXv>trVTip{vFPS7PJ5&v}~+O8oN!pI*0x#vLu literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0f48ec98a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marian Andre , 2013 +# Martin Tóth , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Sites" +msgstr "Sídla" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Názov domény nemôže obsahovať medzery alebo tabulátory." + +msgid "domain name" +msgstr "názov domény" + +msgid "display name" +msgstr "zobrazené meno" + +msgid "site" +msgstr "sídlo" + +msgid "sites" +msgstr "sídla" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77d008fca7a637a78764d75d120f9b15638bb651 GIT binary patch literal 845 zcmYjP!EV$r5H(Oh3Lqg4oO+lGqE+Q=vfZjB%R)ull`2uO>IUv^GR?Y8?8x?J+p3?y zm4AT?ocIII`~bK90E{;*%Sg}9W51bELisZJmmy-WF?LE%Wt z_l3g*x>3BvqnO9r5XVWhy%EJxL_&Uyjr2K}x@{i4;N4A#cap8%Mno3871r_82xUv* zv`JuOWTn4<1u7_4@*G~){@^NXT7S2oE|g)Wt5+1Oim51&rzolf#-(mhNugkE;#{3{ zI1$)$AR8-$(O%HW=;X2e)srryj zgt6!b@6#dQS?c_^PSNlKmFZlnB7vO~>HZa(fGvYjIW?l>Lv1RXfU4)N9rXIpZU<}X z8Fg?lh~YIvK$6z&k{d7GO}M^ZT=nRxOIMrg{eX@AizVCF6)FJ=!P3Aq7Eg3TzYS`G pw#58gHy}#shh;kN{24YOqh6njE1@*V3K_vq9V(g^pR`>i`vc0k, 2011 +# Primož Verdnik , 2017 +# zejn , 2013,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Strani" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domena ne sme vsebovati presledkov ali tabulatorjev." + +msgid "domain name" +msgstr "ime domene" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "stran" + +msgid "sites" +msgstr "strani" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbd1a6a6c51b067cd8675eefc572b6890024f5da GIT binary patch literal 769 zcmYk3y^a$x5XTK1AT3CsE2t=j?oP=0qTtvN1P3{B5)si|pr7nI8|QZIjmIIEj)Dr& zQt%9U0jMbQ2=o;21{5?DFwO^eBmMlhJs%$1-?z6u3bw1vZKlUuV?Hp!J~Nk@FHD2^ z%3NoDF(K|RvlZqSR&h633+C2({qCX=&)NT;^#tfhfWb_F<>@W3k>1^isCNv!DvSMBK zh*L~9!A!}X!Xkzzc^{2N13N?S%eY#dPNx+gD(Znctt7Unu3FtlzRs`GxVjs44m<6$ zOVum2=qW#zGThay@~ z1C66@K5>}K1M3Qk!IaA-wHi%WO, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-11-29 23:00+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sajte" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Emri i përkatësisë s’mund të përmbajë hapësira ose tabulacione." + +msgid "domain name" +msgstr "emër përkatësie" + +msgid "display name" +msgstr "emër shfaqjeje" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajte" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ac57bb43961646cfe438ce8dd08b6619c68ec43 GIT binary patch literal 935 zcmY*VOHWiW6t0SojK&yEOiWxH7ZM2ROgm^G7cLqQ5~4%`7x$ezWw0>uJtlSZE6$PsA}t?CTSu?BZ5U~Dw$9) zu;N@ZDwQ@jH;XQe&6ed>G1ZMy_hCJ%pSG8*DGe6pX6L5QzknB6VG6%iDqL;5iEngr z%a!muGc^Y3iZE8Xcqy5oqvyJC*RnKpTBW+0sagc1mCT*38G$v0`TDvMbvmO>!$zQ* zozTX^W6*Wu0rilxIOfpb55Z**V$R_SFhDuR6LGm$8jl|Zx6{GKIfI>@ZVPJIAog(V zDG!bni2vyG_Fj9}AN$X~Mf{#W^atSgF-FH9`5f@T%pqpJbW1t3-}>C|x8Go<1xUI7 vih|sK4}znR+r{WpXXrtZ_!HE$uo`qZ3XTCooKL#+-+d$u4=bHHr@Q?Hd*?T@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 000000000..47e2e6575 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-01-30 10:13+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\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" + +msgid "Sites" +msgstr "Сајтови" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Име домена не може да садржи размаке ни табове." + +msgid "domain name" +msgstr "име домена" + +msgid "display name" +msgstr "приказано име" + +msgid "site" +msgstr "сајт" + +msgid "sites" +msgstr "сајтови" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..deabe45b851bded3ebb3c61f7cbcd26bcb003b5c GIT binary patch literal 815 zcmYk4&u-H|5XKiMAPh)|16()^NR&iq6Wdf!oEi|&NS8_SPIBcDeWNB%K0@^Gq4qA!h$y7ux}eIm$n+=Z0=|O zL}*>8<=N zI*~veM$dWpl*i8?ij%eIaYzwtqjkJzP}vbWZ4zh~)Y&^>w3Vg&{)r5#7-J!LPhgoq zSD3y;1+{H-Qq`e0aIQ+4&FOU7aK4P(69f75RQ%(DdY+3loL@-TyF)ei$kX;lC|kB(7zQ5K?x}J=?TpdEav9)M1sM?688lt d=`V$zhz6^S+{Z&y8e}OLahA_4m7G6(-M>jZ*_i+U literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 000000000..03d3db0e8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2019-06-27 12:41+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\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" + +msgid "Sites" +msgstr "Sajtovi" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Ime domena ne može da sadrži razmake ni tabove." + +msgid "domain name" +msgstr "ime domena" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajtovi" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d67d082bcf7f3c016f80b7c580aab571f68fcde7 GIT binary patch literal 792 zcmYjOzi-n(6h2A;VLBiNrVfv-Rdul)0cjm&=`X3M5m9SkzSys}Tl<~myClud$jZbD zLi`6XG35W?4`5_rgm+0pc+z*@^Z9!}@5iI{_k!&nW0Mgx9x&c9oPA~7VSHn>8Q&Qj zj9(0=`@>jw{;h@XA@f_tV}|?xVNHmA=FiM7?kBUy{G0hc^V;o&ZiAUa1Ye804A+m# z>&(?(8p{@TURX3D&Jj{wse*u1g^(yBZ6VQQ-JPN-m|7)hKsR93(6mHan7UNcxnBGi zD-36xA4UuseTj*cC#igmjVUxmkX|avw0DNJZmjH^tVrelC^ItF5qN`_u{>x{S=P!! zWif(w5I&PZD8mkfVH9+Bf-neJD9>eNAt~DOs, 2011 +# Jonathan Lindén, 2014 +# Thomas Lundqvist , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jonathan Lindén\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Webbplatser" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domännamnet kan inte innehålla mellanslag eller tabulatortecken." + +msgid "domain name" +msgstr "domännamn" + +msgid "display name" +msgstr "visningsnamn" + +msgid "site" +msgstr "webbplats" + +msgid "sites" +msgstr "webbplatser" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1447715c8170a59dc299829e66bcaeceff181939 GIT binary patch literal 781 zcmYjO&2G~`5MH1Z$$*47aN;oBT2U>0Vyh_Eu>mm7em#6DKQlWbOjdAjn6V^$^x5K&;HA0 zhAOs;VWUbZtzfmT;B z9Mfphz=@EVDBvY^L+J%GwKpmj6&CzZS924CDqGhKI(=Af2U`lB4ItX?do0lx z3oF^NR0svaOwKgI1PfV5lXh(=ohGkOwea3*{, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Tovuti" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Jina la kikoa haliwezi kuwa na nafasi yeyote kati yake." + +msgid "domain name" +msgstr "jina la kikoa" + +msgid "display name" +msgstr "jina" + +msgid "site" +msgstr "tovuti" + +msgid "sites" +msgstr "tovuti" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9cdaa1e61499291b4abd0b89d000a27b97421518 GIT binary patch literal 714 zcmZvY&ubJh6vs!c2%{&jdWhhmOUX`B)NQk_l>UNB7nd@6k2~3EN+ua5S+_m*BJH6! zD|iy5A_!*1;?+Mz@~8M_R^3Y5|x!kGn5^0ott=1l%{gHZ*!U9^>J=-Y8Z+KFH*cw z3GP6PH@OoGEfe|}6N+gEQOZbXiBLj7i1)-BS$ocP9ZXg+T}AW>dqkE9M7+zb!)e8} zRot11q32v{Y0<8bnNa8{+y=@u)s$_iN9Gyy=zPp`fm6W?hEiTgg%H;i^d!<~*wc$^c5E`fiPx{HSUyt2ae zUZ&f4Wv;8w8i@*T>7mJ_&KX*HE#3c1f(MTWYFu%Jw@p=8hIHAKwzu3xvuSTpqX#`i zTirMc{yg|!!G8?Xvt~RF-oqTB;J=3H+u*0ce}{#c^0HYyyJGWa@IS)zB>0QQ=^}X0 R)=toP<=%%z2d7`wqCa?I_#6NL literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 000000000..883c04a37 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "களப் பெயர்" + +msgid "display name" +msgstr "காட்டும் பெயர்" + +msgid "site" +msgstr "வலைத்தளம்" + +msgid "sites" +msgstr "வலைத்தளங்கள்" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9be611dfde741b1038b00badd4eb6934ed7a7fc8 GIT binary patch literal 687 zcmY+A&ubJh6vv}hgwa#a9-^l$B|DR%ZaeFWxNV`*#ifki<4$&(GLsBR#%+(DT7}|i zJ%}KBQ3PeilPCR8B!7x8v+Cl5Pri9S=VgAauFMhGW#Brn4O{_oz}p#c4R`@u1zrOy zzz4whd<5nf5c&ez0frY5x(S+t`o347tDtW|p{zCEcL{({YknR|g(-7(f+Z_BN>#yx zT-=SY9Qnhbu~tWXV#!`go^Wl1k}*z?n9Njgz)Phq8JSF^7Dpiv>t&4`^;F9XeLe0 ztkN-l$fOho?{ksz9N&d)z`dWhZdb^ux(7Wnt60WK!dVgHgy&UO;m)D8WgLdH*{o~* zKr!XV-H9r~#gqO@{--;%JX{M#d!wD@<7qbvhDus4VX2c6UT68S4dF)$*~gPZrVY1) z$H^|)T-Nz-O}QpJa-vcpvlwqa753kjenv3PE6sAUt8`&vEX&q4gN;63Tn8PAZwxS9 z>j%iyb60, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "డొమైన్ నామము" + +msgid "display name" +msgstr "కనిపిచ్చే పేరు" + +msgid "site" +msgstr "సైట్" + +msgid "sites" +msgstr "సైట్లు" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e557293a562a9300402f2399b1c9d62ae08473d2 GIT binary patch literal 863 zcmY+A%We}f6ow5HkOmeN60DFo>{?Y$ra_geDM8#?sS<&z9oV}QcjA!PBikYE4gx|I zLh1^!Vu5&p6jBi=EwA8#JrBVP!107$IMO%2FTZ~u&#wz(ZwS^|CL~DK=8!Ncm4!q}>(`jv0F$wV8&Dc7TQwz8 z7ba`5jlxfkoh1eni;p2oS~YoM>0+He;@Su$Bd9l-OjWSVGo>x9nN-y2?M`ZFtRe`O z9?)g}M0hK`%Pfze5>`SQ&d})@2*c>w%v6XK++)VlSTku_%qkthN=J8017%I{E?hT4 zi;l^(O1Zw7;=@{{M73|=Ihl4?%4y75JA#-s#bcOgSer%Va<|(pS)VD^_`3I(N6j8c z>)+wBP0N!(ZLv0g^sMPp7~H|%#U=K&kzwPOuiG;IA|dA>X)tZLtv-ww=g{;~bTo_>BHn0nay Jf0N=Je*p^fK41U< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.po new file mode 100644 index 000000000..cc7f86ec1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/tg/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Surush Sufiew , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-05-15 00:35+0000\n" +"Last-Translator: Surush Sufiew \n" +"Language-Team: Tajik (http://www.transifex.com/django/django/language/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Сомонаҳо" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Номи домен наметавонад аз фосилаҳо ва табулятсия иборат бошад." + +msgid "domain name" +msgstr "номи доменӣ" + +msgid "display name" +msgstr "номи инъикосшуда" + +msgid "site" +msgstr "сомона" + +msgid "sites" +msgstr "сомонаҳо" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd461b668dca342ee05db498f43f27c480f420b4 GIT binary patch literal 898 zcmZ9I&ubJh6vv}hh0%j}@S=x!^9R|Psc4s3SH#*vv5QL`y{EJ3%(Sz~l4RZPO+~0b zdbCKr6%T?Uh#+PT;(sFf8~g|KWv1)4KKRb}P4am!FZp$LW(Pr>1YH2dpi`i2kP8Dk z4k|&jpr4@Apx+?J{Q=Fm{7B860pA6k13B)?QG^QcAK(|kuN*_@JoqxW+t2oW2o5C( zFmwXs=5c*pxbr6gSRD^?%@m3=hI^tm&$CIETY93g)f`VGsaFR@md*^_+4|5&(Jw2hHdja1h=y zRhq<-a#c_*WQ6aDQLgcPMx|g}Qk`TJE|gJ@Z*I7)hH50YQ+SG^k%;~+Xu#7UO&N(9 z?MFDyXpS#sS`Q-MAB{#0?Rw{HY}4U>eY=Sj`?bE#{L5Zvsk1PBhp-WN^YFfm!+hfb zTvW47?ZcbqyoF&ZshDm*j2B6B%DJ=Fm?R545xtzJ5pJ&L`rnMuBlEh&P||`d3fWf? z=7Z{2wZj&!({|AEkS(8E^V*snTW%w3URm?qmM^UNY|CfXys>82mQSqNbBTjqx-GL+ zmF+pw)mI7B)`hTZK2-TvN19L8ymxI~&!^VBwIwXRJA4?dnr~G*AU;+HZyhG;aVE3; JH}}Cy`~^lQND%-4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..89df6a6dd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2013,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-05-06 08:37+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "ไซต์" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ชื่อโดนเมนต้องไม่ไม่ช่องว่างหรือแท็บ" + +msgid "domain name" +msgstr "ชื่อโดเมน" + +msgid "display name" +msgstr "ชื่อที่แสดง" + +msgid "site" +msgstr "ไซต์" + +msgid "sites" +msgstr "ไซต์" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/tk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..854a9028b175e2284dfdbfa8f5281de299052823 GIT binary patch literal 755 zcmYk3F>ll`6vqt|5P<=8U}7*^E96V=BubUz5Q4T+B~F~Kf&E?L=G-`TWIMg4Gb3VS zX5lj+7)}hQeg`H7Hdej>Jm>BxPx|Hm{PN!Ov;AXp;{!pviQGpLkeMJU-2p)C*J}|BiYC_2+8+3l&QUN*nj{ z_`cr!{%gCoc8-MOmLyY7GhKpER6)sU3QB25Q>~njfoiC&Amx^7Lmfc9(PI|v&~7(=6g`a4f|p<&OAIJ0!D$oIF}JlWz%=xU@vemmj6Qvqm!qyluF6AKgxkUJaJYYY zsBR|;Uf^YMg;O;Zj_vrF3-N-4>eF-z#&S1!ogA>;%RIl=F*j^qr8*NTkLm72xPN0} zk0Kb!+JIyS+LSh?s%n>Z(CgEsJJ?e6!GLzR`vEzEX;Xm&L-w>k7-WsgfKK$qM_Csb xr;9l-jO2PTFMT5ZlXXQWLYDlzL-NIEQ}A;k7xTrZw%$MNvJ, 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2020-07-06 11:50+0000\n" +"Last-Translator: Resulkary \n" +"Language-Team: Turkmen (http://www.transifex.com/django/django/language/" +"tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sahypalar" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domen adynda boşluklar ýa-da goýmalar bolup bilmez." + +msgid "domain name" +msgstr "domen ady" + +msgid "display name" +msgstr "görkezilýän ady" + +msgid "site" +msgstr "sahypa" + +msgid "sites" +msgstr "sahypalar" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b0778139166e720434a787f1398a8994e07bc3c9 GIT binary patch literal 758 zcmZ9Jzi-n(6vq!JAQ^-z1}26#wt};h03vlrg@9BlYD82F`^A2>ud(l}y9;Sp8DV8+ zWbT4MLSjf6_z#%aSs3^S;9Wup;z=KW@5lS)d*3dvy=G+RiK|3HTp(T%-rf^ui4R1J z_(WVJeiGjA7qRBorxt$eq$P2M@Hto4uha`9L?v@9tQGF=I&K#2+=6-sFbsaDRP2{i>DdYTO*}&*SOda3N_)|1iY869vC{(V4eXO-{yl-=v@q6Rk@$zRD`y7%lS5x z>OgN(jLOF%N1mXlVo1hjBy9m3g>!WrMU%-SbUvdzz@sqLRkUbzDdnH=$eCy}= ztDkCyjo>~#7Aop$T2tE&k6c6#Bvl8}LKus#`y|=n?UkReb%2KVRH`$n@)+7f>HfA! zIZQAp$3~QVN1MvVpz8V7c3T}-EV~;DwxPM%37DT`iH7yuNP?hlPmV!kC&$;JKvPij x5{A;iP=9_?jz=&RkO{CjqH)XFTQpeV^N{7UcV_lcp#mC0#qhsmtLgeuzX6z#){g)H literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 000000000..2372c1463 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmet Emre Aladağ , 2014 +# BouRock, 2014 +# Caner Başaran , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Siteler" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Etki alanı adı, herhangi bir boşluk ya da sekme içeremez." + +msgid "domain name" +msgstr "etki alanı adı" + +msgid "display name" +msgstr "görünen isim" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "siteler" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..384d79a9ab5c1feb2313bbd70ceb3b827b801da3 GIT binary patch literal 706 zcmZXQ&ubJh6vv}hkx@Jd-aG`nC?z|IsN2qVMXW7Uc5$hr_qdatrpzQml670~P`!94 z-t-Ufrd}*;3yP~}FG2?I{w==j*6zUvpZUI*_aiU!=kmfk1a=O%3Uq)AzzZPQ2jDF5 z5x59^210%UEC4@&kpBg|Ifc+~&`SV6jnFmF3iJx-ThQ~MpFl%?3<~84WZEC@KLZ2{ zbN{o)(g}+)X{&$V?P?1-60kUNH?DQVsN7=u!EQ=Yphy zmkCa};|5>fa;{3^cr+R{T$m>ZVyDs9WjuS)KPirzW9Q-vZnevlPXW}(lhB!mV_BD>J>x73$m_F zX%nofX=vN5g=cP?wj$);`vd>Ae&xUUgL)6uuOS@Q`w$-1`}N+`8^hUm?7!46{gIy_ Wf9QYs3Apn!e}o`89dzOxPy7pgINxvp literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 000000000..519ece305 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Сайтлар" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "домен исеме" + +msgid "display name" +msgstr "чагылдырылган исем" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтлар" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ffb1b948f77e5bb1c9d537bcd875c273abb6418 GIT binary patch literal 960 zcmZWlO-~d-5N#FIj2?^!P991V5kh*mXMunNgGPje#Ek?O58j&DW*K&-do$Autl2^rF?X@{w4RH?OOz^BN%!kQ3xCv++OX%J1aX{e+J)kQ9A%9#-jm1tT{Yhjf> zYt~X)Q64zcFDrCB5nQ8|KId9^P-5;NWiEAxz;!(~)W=-LP)KLQQfPZ#=!PhJOiTUX z4ts+GeGJ2S!Bb5u372WawMslFx9Te5@P@~AwWLBAm0?hS%j2gtyna*&R6K?zS!?o| zpcTPm4`%BLzCy?)^ekxI@QTId<>i95O~ZMyVm-z7wazH|*Pz&}7ki!ZRC(g!0o(#} z#_?f=#KBq(yrC8=x`>Y%$`J?_c#;b3&sHYs@P*EvH7^o6Ap=znWzB=(xlo@E>Or&a zOh?UxM|4spaq59=iOCv(l(PV3)ar zjk*k0SKAiUuwL}I=qdG%IK+H0+vYHPXAX$@WKPVn*)!kq+kONL?kuM!g^74Q45Nw`Le7?ZZ{{n8uNHPEb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..f98454c9d --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Jannis Leidel , 2011 +# Alex Bolotov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Mykola Zamkovoi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Sites" +msgstr "Сайти" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Доменне ім'я не може містити пробіли або символи табуляції." + +msgid "domain name" +msgstr "доменне ім'я" + +msgid "display name" +msgstr "відображуване ім'я" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайти" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..733aebd7bfef635e9d9f269dca428d4526b5fcbc GIT binary patch literal 654 zcmYL_&2G~`5XToN0vS#mIB}TXT2&j{6_9pAP@x}EQ6r+t<-XV(cPo20+Fg^jS7;O@ zP9S&y4n!O{pkCn8=de?WXJMRBGSYAVGwYf0%>KEz@R^|9L>?ep$Sov8Y8xSUk@v_Q zFPLTSrq-*q%h#lQc=qq8Y)QUlJ#8s-jebLv((T+`JLZ26@rIBXfbzeqw z(+KV`mu_(<7_0{2BN~J>Y(f~apt%x+L4b*LU%ZiZ&v{;x2J19jhww3b7_0ELl1Ctc6bm&~4`Tk%q zXt=ta?1|$>taE?1(3NEWYW>3a%U)-R!%4!>7=;!sMbFRm01VP>srQ^{yO4HALr(Oh)+O?D9i3gvs~$b$MQn%Wu_h Ja^;lg, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ڈومین کا نام" + +msgid "display name" +msgstr "ظاھر ھونے والا نام" + +msgid "site" +msgstr "سائٹ" + +msgid "sites" +msgstr "سائٹس" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1c68e3283c417e7c985d650d85756b2ab30d5da GIT binary patch literal 799 zcmYjP&2H2%5H?V#6gZ#?!G*)z3aY$GwnE){S%m11v=R%eHsy>raT9kFJJ`-{cb|bP zXWjzA1>S^*=nKGj)3S{8<+I1%%y`E6y|wX$plu?aA`--X#Ak%J?})pIABZmE7vcfp z3gLBs5F37dtJOV3{)%{v@HxNTCS(`+C-NiYE93xq^G+MLh3s`tkTHbdF}df@5k9Xs zU;oBX*4n9b!jhyAkm-s`1&UV!Qm&MCkZR?;kE;dPny12oHsJWgc1R{|UGl|BPyUM~ z7Bj9smW++Q5UHcXjD8TtO05`V7hL5!I1#lrj*e_DGy0~, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 01:18+0000\n" +"Last-Translator: Nuruddin Iminokhunov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Saytlar" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domen ismi tab`lar va bo'shliqlarsiz bo'lishi kerak" + +msgid "domain name" +msgstr "domen nomi" + +msgid "display name" +msgstr "ko'rsatiladigan ismi" + +msgid "site" +msgstr "sayt" + +msgid "sites" +msgstr "saytlar" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36fa0755f7903ef1d48e25bd69289c7cbcb630f6 GIT binary patch literal 762 zcmYk3&x;c=6vszh1xFF|?BN}iC7qeNOKWOHTz6q%i)9&mPiL|-*>;j4Nq>PC@hA!+ z{sG=p@E{0+J@#+#Cc+%WvlmakwC;8veDX~)-}jQd`FUgGt%q?5xrrPgSCFTOi}y$! z`G8zSejx7qFJuGxgIq-ZA}`P3fNY_>I`4VcQ5UGr{~h%*YK3|Y^*5@syKwpL{0nY@ z;p(0Q+Ex+g98y&pfp(4H#IL6rW~@_((j$g^^CB5 zIT)|2)iF;j*-uH2Ya^7TkRCIcDgTg{N?Xz~nMldQQD#W2DEQsSG1<|aS@e=e%yJ6# zFxnn5e*xgVHAdFB!_$~T+OwwLBhMFeg~o^-QL;^G5iB&EQvLfX2`746xc3M1`v0SNIqH3eTeYDGL#4=7|&I$@W!L4hE;czRrwxmHYnM`Wd)e}d2ifKi# zdeMmt|5pgcBDn2$_B*@lw@0S< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 000000000..6f7d6a01a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Tên miền không gồm kí tự trống hoặc tab" + +msgid "domain name" +msgstr "Tên miền" + +msgid "display name" +msgstr "Tên hiển thị" + +msgid "site" +msgstr "trang web" + +msgid "sites" +msgstr "các trang web" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..028280ce343e717a76c42128ca4d3769cf7e904c GIT binary patch literal 779 zcmYk2zi$&U6vqt&kPZgKz{KFORps1W1*E+Ygb1xv)Id}YR^;BfiK~kpogLCJp(3OX zt<LR0yeYAcZ!2RJ5?F(|{=~W31_- z%A$~~dPG~PAN^O06m(2K3YBBI%mPj3LUNbIic8_)aG8pVv=&%h#+sB=g@@!?qoRl} zJ#3Y4`J@;#s=-UHQ_Va)>9`k(;}SQAUDtDR6OQXRU?dCdJ~ur_z8rC;i93zmOWp-% z!hx{nsnW!csZbHsGWPHdxEfb@p7D@H_%cib>D4Grvs^66D^MdU4O(HuXSC+wVwDS~ z7#=eVI*!MxTGu_>ZZ?})Z94NMwvr8G&FTpxdRY$KB1HPP^SX*h=2* o_g;MNtv%_keL8&kHhKU0`@>b#d-^4LwGRc!n-7E1VWUC6zdJAQaR2}S literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 000000000..82f53faee --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ronald White , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "站点" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "域名不能包含任何空格或制表符。" + +msgid "domain name" +msgstr "域名" + +msgid "display name" +msgstr "显示名称" + +msgid "site" +msgstr "站点" + +msgid "sites" +msgstr "站点" diff --git a/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1c3d67b36ab955e95d10a730f0ebeb859363d8d GIT binary patch literal 790 zcmY+A&ubGw6vtPsKUf9DgC`GjY$=n>7B%h0h!|Ta7z}mQqfB?Fn<<-_WoOnjJ&C2@ zp@Cjh^b!RRN>R~6sm0)b;>B*G7Y|-N=$mY7>VwaIXWx9^n|br~?8sva;y7>~@PL!R z8en1zI0}3MCV(%%Dc~1ie1Cuuvp$sj&VY7-bHFjkZyvTR0@?#LbwBs?H>lY^aU|E% zpip8#dXP8wF?~&#^Y;U6dEDZfDa&gx6v!s!0twn=$frU`jeIGz$x+cpDyBYDNG3?r zc~!6iuHuNc2Y%~7t)-yj;G?X1A{Uvj@oa$autaewTof!)5lVZG#WK;jra~UzYiX#k zCtYOMZ+f_zFsi|euT#xjG(nt;m^j!eA;)n^X`DEOfDzBJ``q*#`bwBgVP^_Cm)r|v zoIuz&sM6R=s8A8rGI5c&oZ^^^5LFu~d@rZ4m#W3&Y6#;;1z$F=K#>Sj8ZzuL+H}Fm z1yc--dX%@Q7(=5Ctz)-XY_(biZF=(swq#0+`E>gd?e!@xH|}|Ni(__ewl+O{3a3Eq zDm*b0aK&~Evud`ai}0*ml#$<{iDJ5P+nd3YL!UWrfhBla_%eVwTr@e)^}j2-XmFNY zk6^F}&&Z^yTqNSbuc|m@lrJl!Y+L=!kNu5jMzU@dLnV53L_B-}hf_=LP>&ALwWr{{, 2015 +# Jannis Leidel , 2011 +# mail6543210 , 2013 +# Tzu-ping Chung , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "網站" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "網域名稱不能包含空格或定位字元。" + +msgid "domain name" +msgstr "網域名稱" + +msgid "display name" +msgstr "顯示名稱" + +msgid "site" +msgstr "網站" + +msgid "sites" +msgstr "網站" diff --git a/venv/Lib/site-packages/django/contrib/sites/management.py b/venv/Lib/site-packages/django/contrib/sites/management.py new file mode 100644 index 000000000..dd75bc1ba --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/management.py @@ -0,0 +1,47 @@ +""" +Creates the default Site object. +""" + +from django.apps import apps as global_apps +from django.conf import settings +from django.core.management.color import no_style +from django.db import DEFAULT_DB_ALIAS, connections, router + + +def create_default_site( + app_config, + verbosity=2, + interactive=True, + using=DEFAULT_DB_ALIAS, + apps=global_apps, + **kwargs, +): + try: + Site = apps.get_model("sites", "Site") + except LookupError: + return + + if not router.allow_migrate_model(using, Site): + return + + if not Site.objects.using(using).exists(): + # The default settings set SITE_ID = 1, and some tests in Django's test + # suite rely on this value. However, if database sequences are reused + # (e.g. in the test suite after flush/syncdb), it isn't guaranteed that + # the next id will be 1, so we coerce it. See #15573 and #16353. This + # can also crop up outside of tests - see #15346. + if verbosity >= 2: + print("Creating example.com Site object") + Site( + pk=getattr(settings, "SITE_ID", 1), domain="example.com", name="example.com" + ).save(using=using) + + # We set an explicit pk instead of relying on auto-incrementation, + # so we need to reset the database sequence. See #17415. + sequence_sql = connections[using].ops.sequence_reset_sql(no_style(), [Site]) + if sequence_sql: + if verbosity >= 2: + print("Resetting sequence") + with connections[using].cursor() as cursor: + for command in sequence_sql: + cursor.execute(command) diff --git a/venv/Lib/site-packages/django/contrib/sites/managers.py b/venv/Lib/site-packages/django/contrib/sites/managers.py new file mode 100644 index 000000000..ec2882656 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/managers.py @@ -0,0 +1,65 @@ +from django.conf import settings +from django.core import checks +from django.core.exceptions import FieldDoesNotExist +from django.db import models + + +class CurrentSiteManager(models.Manager): + "Use this to limit objects to those associated with the current site." + + use_in_migrations = True + + def __init__(self, field_name=None): + super().__init__() + self.__field_name = field_name + + def check(self, **kwargs): + errors = super().check(**kwargs) + errors.extend(self._check_field_name()) + return errors + + def _check_field_name(self): + field_name = self._get_field_name() + try: + field = self.model._meta.get_field(field_name) + except FieldDoesNotExist: + return [ + checks.Error( + "CurrentSiteManager could not find a field named '%s'." + % field_name, + obj=self, + id="sites.E001", + ) + ] + + if not field.many_to_many and not isinstance(field, (models.ForeignKey)): + return [ + checks.Error( + "CurrentSiteManager cannot use '%s.%s' as it is not a foreign key " + "or a many-to-many field." + % (self.model._meta.object_name, field_name), + obj=self, + id="sites.E002", + ) + ] + + return [] + + def _get_field_name(self): + """Return self.__field_name or 'site' or 'sites'.""" + + if not self.__field_name: + try: + self.model._meta.get_field("site") + except FieldDoesNotExist: + self.__field_name = "sites" + else: + self.__field_name = "site" + return self.__field_name + + def get_queryset(self): + return ( + super() + .get_queryset() + .filter(**{self._get_field_name() + "__id": settings.SITE_ID}) + ) diff --git a/venv/Lib/site-packages/django/contrib/sites/middleware.py b/venv/Lib/site-packages/django/contrib/sites/middleware.py new file mode 100644 index 000000000..bc3bf20c4 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/middleware.py @@ -0,0 +1,12 @@ +from django.utils.deprecation import MiddlewareMixin + +from .shortcuts import get_current_site + + +class CurrentSiteMiddleware(MiddlewareMixin): + """ + Middleware that sets `site` attribute to request object. + """ + + def process_request(self, request): + request.site = get_current_site(request) diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/0001_initial.py b/venv/Lib/site-packages/django/contrib/sites/migrations/0001_initial.py new file mode 100644 index 000000000..181cf47ad --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/migrations/0001_initial.py @@ -0,0 +1,44 @@ +import django.contrib.sites.models +from django.contrib.sites.models import _simple_domain_name_validator +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Site", + fields=[ + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "domain", + models.CharField( + max_length=100, + verbose_name="domain name", + validators=[_simple_domain_name_validator], + ), + ), + ("name", models.CharField(max_length=50, verbose_name="display name")), + ], + options={ + "ordering": ["domain"], + "db_table": "django_site", + "verbose_name": "site", + "verbose_name_plural": "sites", + }, + bases=(models.Model,), + managers=[ + ("objects", django.contrib.sites.models.SiteManager()), + ], + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py b/venv/Lib/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py new file mode 100644 index 000000000..ccc7bfc38 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py @@ -0,0 +1,22 @@ +import django.contrib.sites.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("sites", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="site", + name="domain", + field=models.CharField( + max_length=100, + unique=True, + validators=[django.contrib.sites.models._simple_domain_name_validator], + verbose_name="domain name", + ), + ), + ] diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/__init__.py b/venv/Lib/site-packages/django/contrib/sites/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..747cbab7a31136a50aeb1d1a1c78bad345875182 GIT binary patch literal 1106 zcmYjQ&5zYK5RV-vFYgN;P>`w?sn;CXU3x?affg-PVo?R{#foYzqneo`a`OUanE@u&rzkd3&e3nGfJFi?E43+!1 z>>U&k0jVQS@Js8cp_~$Li|e>yoHYqgNc1QI2Fb4xB#Ld)Ut*pDc^>8I8OBFXbK-6a ztDC-70=h=(R=(uBM05J)}>7csdX=_xy+FhN@e8BEo*A}~9R(KZjZ1uWsxDLtZ93={NSh80|atG_Yy z&W;FNQ}fMYv)rV=U-~1$T?D>3O)A1K!*xvUhMOLKLd@B7Jt#*tIQreggCBC{7RSnz zomC-GH?_)WO!l?n3%MOSu{KH$3i!M?x{>BYyi_MH9l1FJ%<%r!US>o|7J<_TMi}rr3Us6h|EYBL*%1RmgG+(() zj5QZ-CIr@Zi@hM+LWrNYvJTyV8mL~ipxU)o*2F%|`F>#P&^LtfZONw(kiY|fBcJZS zkS6>Z>Rn0LhCGH$-DKUhgVCi~g_C@Z4o5_8*7fSV+ulazYxD>4_ppDb_z{a`i)UMF zW%00EZyVJPws@q6$J??v(8dn8zBip`pg30Taq&c#g(vb>FV`XA2Wp~HI R-6I~XZ^JBFkQKQR{|EKFIFSGV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..355e25d8760b8ae42d1c34fb01acc5b522c24096 GIT binary patch literal 803 zcmYjPO>fjN5OoqKo1|L_B;W!_oRId=-Gw8nP*G9K0V>4DC5nigct{=cv9*&Ga6*D> ze+Ylc5+_dm0bCHMjGZm5B~Lt)=Xq~t+-+~i1lO;3Kl1x7AwP|Cby0NoaH}~QPPkK( z#KEsyyN#E44Na&+4hi=-{YE$iukycoiO-$aWagjY9da~tb=-(jvR-tp(m~U4s8wP9 zU0o46d$`pu8n7&h%bn6mJfM}&UG70pO*rK~gjH0uURcP>pO`F*C6vwL1yt@65GP8r>Ti)|Gj{kAI-LPnAv!i={U;}H`IXVX_lP~ ztTtHVaacjip)CX`iNhdC{G{$d9+)iBGl6LTn2kPauUK1ldQx<4FGVhW1Gt+h(X250 zSj))zU$l<96>J9aoyZ$_!*!`*Q%j~$~Tuqv)Ox4eI~{NywM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/sites/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac4ec60745251c4541a7a7ad843f922cf9219c29 GIT binary patch literal 205 zcmYk0u?oU45QbCfAc7C#P`itWps0h0C~k)#Nkh46lafmdK9a8_IQa}NP9~FnaNo~= zx11dg2Q2VDKV{5U)IUim^DvYK73|1H$?ncvT>tcG785v;b_9o(NWjvnw${cItkG{; z2`hBuv%RyGRvtQSI@qEFLa(z%sEa5yK~V`)+FV)V9m+f&DX+0~!lN~mbB+c*=i}z~ R=uc}~v{yZgpHMF-WnY__IaL4v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/sites/models.py b/venv/Lib/site-packages/django/contrib/sites/models.py new file mode 100644 index 000000000..e1544f1fa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/models.py @@ -0,0 +1,121 @@ +import string + +from django.core.exceptions import ImproperlyConfigured, ValidationError +from django.db import models +from django.db.models.signals import pre_delete, pre_save +from django.http.request import split_domain_port +from django.utils.translation import gettext_lazy as _ + +SITE_CACHE = {} + + +def _simple_domain_name_validator(value): + """ + Validate that the given value contains no whitespaces to prevent common + typos. + """ + checks = ((s in value) for s in string.whitespace) + if any(checks): + raise ValidationError( + _("The domain name cannot contain any spaces or tabs."), + code="invalid", + ) + + +class SiteManager(models.Manager): + use_in_migrations = True + + def _get_site_by_id(self, site_id): + if site_id not in SITE_CACHE: + site = self.get(pk=site_id) + SITE_CACHE[site_id] = site + return SITE_CACHE[site_id] + + def _get_site_by_request(self, request): + host = request.get_host() + try: + # First attempt to look up the site by host with or without port. + if host not in SITE_CACHE: + SITE_CACHE[host] = self.get(domain__iexact=host) + return SITE_CACHE[host] + except Site.DoesNotExist: + # Fallback to looking up site after stripping port from the host. + domain, port = split_domain_port(host) + if domain not in SITE_CACHE: + SITE_CACHE[domain] = self.get(domain__iexact=domain) + return SITE_CACHE[domain] + + def get_current(self, request=None): + """ + Return the current Site based on the SITE_ID in the project's settings. + If SITE_ID isn't defined, return the site with domain matching + request.get_host(). The ``Site`` object is cached the first time it's + retrieved from the database. + """ + from django.conf import settings + + if getattr(settings, "SITE_ID", ""): + site_id = settings.SITE_ID + return self._get_site_by_id(site_id) + elif request: + return self._get_site_by_request(request) + + raise ImproperlyConfigured( + 'You\'re using the Django "sites framework" without having ' + "set the SITE_ID setting. Create a site in your database and " + "set the SITE_ID setting or pass a request to " + "Site.objects.get_current() to fix this error." + ) + + def clear_cache(self): + """Clear the ``Site`` object cache.""" + global SITE_CACHE + SITE_CACHE = {} + + def get_by_natural_key(self, domain): + return self.get(domain=domain) + + +class Site(models.Model): + + domain = models.CharField( + _("domain name"), + max_length=100, + validators=[_simple_domain_name_validator], + unique=True, + ) + name = models.CharField(_("display name"), max_length=50) + + objects = SiteManager() + + class Meta: + db_table = "django_site" + verbose_name = _("site") + verbose_name_plural = _("sites") + ordering = ["domain"] + + def __str__(self): + return self.domain + + def natural_key(self): + return (self.domain,) + + +def clear_site_cache(sender, **kwargs): + """ + Clear the cache (if primed) each time a site is saved or deleted. + """ + instance = kwargs["instance"] + using = kwargs["using"] + try: + del SITE_CACHE[instance.pk] + except KeyError: + pass + try: + del SITE_CACHE[Site.objects.using(using).get(pk=instance.pk).domain] + except (KeyError, Site.DoesNotExist): + pass + + +pre_save.connect(clear_site_cache, sender=Site) +pre_delete.connect(clear_site_cache, sender=Site) diff --git a/venv/Lib/site-packages/django/contrib/sites/requests.py b/venv/Lib/site-packages/django/contrib/sites/requests.py new file mode 100644 index 000000000..a0c9c18aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/requests.py @@ -0,0 +1,20 @@ +class RequestSite: + """ + A class that shares the primary interface of Site (i.e., it has ``domain`` + and ``name`` attributes) but gets its data from an HttpRequest object + rather than from a database. + + The save() and delete() methods raise NotImplementedError. + """ + + def __init__(self, request): + self.domain = self.name = request.get_host() + + def __str__(self): + return self.domain + + def save(self, force_insert=False, force_update=False): + raise NotImplementedError("RequestSite cannot be saved.") + + def delete(self): + raise NotImplementedError("RequestSite cannot be deleted.") diff --git a/venv/Lib/site-packages/django/contrib/sites/shortcuts.py b/venv/Lib/site-packages/django/contrib/sites/shortcuts.py new file mode 100644 index 000000000..ed232e1aa --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/sites/shortcuts.py @@ -0,0 +1,18 @@ +from django.apps import apps + + +def get_current_site(request): + """ + Check if contrib.sites is installed and return either the current + ``Site`` object or a ``RequestSite`` object based on the request. + """ + # Imports are inside the function because its point is to avoid importing + # the Site models when django.contrib.sites isn't installed. + if apps.is_installed("django.contrib.sites"): + from .models import Site + + return Site.objects.get_current(request) + else: + from .requests import RequestSite + + return RequestSite(request) diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__init__.py b/venv/Lib/site-packages/django/contrib/staticfiles/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02c1ed3be8a3078eb25f4276253a05907a5531b5 GIT binary patch literal 200 zcmYk0F$w}P6hxy~h~Pmi*6l?^P}D+16uXZhn~lqNcN59~D|jTYBv^R{8!MAa2j&ek z)wq7YCxYI`XBP7n@vl}W(_rcZ(B45d<{MV4}Sxjnk$ P+T~4UCh-Kd13KahYRflQ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16b9b6ad810d64366c0273bbfdcba8cae3c83851 GIT binary patch literal 884 zcmZ`%&5qMB5VrHzY?}(LR0+fhZe*oR?+BqqUF~u}6{5hwiiq6U4e91@ZKt9+aM^tj z;DUIiNSrwF09-gRP72BeTQixNj6L6c<8nG3BUr!QeP4gY2>sB`a9QA-fyi@E3^AOc z921PSZDdAn60@_-%*t(Icea%|`G~j}T_R>P=N2)C;~SG4vC#_o?oYT0`M5oLR#l6# z*rW+K)A&7)ucA#_FfJqnoGzd(FX2k@4=T!Nvyb)R;WEHE1CftFaYQgf#9)}1++xNJ zCU%0D`2`b)Sb6wQ6MrA1N(aakylt^?U+Y;;EB_300~ zeBW%%#oJY51SgGg@-YVD{w-~5(iR|c21=n%SQ!d!&8_v>&;&t!y!36M(^^;XB$bK_ zVS-Dn*EEr2GAIoUSdwR(Z%F7-{Z1B-!#5I03SZSy((t^D>zo%#hL@>&Ua!N8R7iFD zQj}XBt8mAQUHBqhhcZ?Cw4(79O}GsER_BLS=Yx84T2(Tr_N^^AWqS{5N=@<%H+Opy z2Al<5&eC^VH;M|H^C)V^QIwag&a~}C(REF;!yik3TO1K@$HlsoygSm~Nt2=!JgO+n zSrk&}nq9L4HPJB#)CfdsCR}7;7q(|~@ufc|lfwjc3qpe?5C1>YpnqXK?|)Cm0HhlX xxpz2Ot2C2=610#RyqK~OHe4)@wbFP77&R)Pfwu0Go`R?PIdo_}Yx15FLBHQQIUOKq?Zah}#~zxg%5|wdF&g2!Rk{Wr#NG$>L_SyS1H`R>=t@ z{ziM`FRjFh6F-0p7Z`5>%2+ew&-eVsuKN8wAp7;<`{XMF_~8fJ7SP}kxxGh0fno*B zS;82oPz6eSVF_3KHAJ1CvRF?{k9c2Xh-$Lr`l0PT6hZJ&HaR;B_7~bDq z1y`MAaLsODCEh~0E5Px~eFnb0gR}4gmi#(ciW{On3zwdfT}4M9F`Et2q8J#=wRLDv z4XjI@&ZfFRJJ?(#j)dXF*o2us(cBqT?%BL9aE_%zbz)3qnht()SgI&Yx@ldHv#Olx z+%}!rMQVITzl-u3GwHAMcs>0MjMw&CA3cz7ENPdo7S^WnxXKou#L6eyJzY%XV{NQE zcxkFr%$z*O@?5^q6KS=>gF4M-X^vK^)3nU1Azi^4JsEB(8nyy#TwgZ*w)?Nv!dLY+ z1;O_iXFY0y@jtylFw>>!h>fBkxxYq^H^}i8a=fWkTd4L(t7t3upVI6+oL6d5;Gut7 K>sfnnEBFhp)SdPK literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58c520153903cdb70615f44eb6a6279b60a2d288 GIT binary patch literal 9707 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 SQ+-suUcFM9FD#aj@%d;wgcuoM_w2wALlhT=-g zU3O+DMTAl~kc&LE=ufcTs@ML7_E#*>r#|@y^d&FpIcIp&g&tyuXJ%(+&*eLp$?Ns1 z1?_*|{%7|eb<6rM4rW^k24BLX{s|qoI7_V_3m8M%PVJr(I7B0-%+z7#CSTdITB~n>Z>z-$Zy?itB$WWV z2K49sNO!ZShvT|B&f-w#VT1%ORzm9}+fzW720BTJP(mK!^2M*V9zT5&WjqxUhD|9{ zKhKm1JGl(Scd_W}B+puQvG`)Tu&D0|9pXpBB$GHsDb%bllpq&e`TUbcL%#+L22zOWjWg8xMEB0j;W?=L4mpov-tF&=Z+fJC76n zWU#yQD3MBk`Ujcsi&*a*itKRbS+cvM5-mRMNAW?lC)5t#kFve|ew=4oCcF0)3D`ja z?@u`G9~Vn$9`Uf3a4_3ZB*nYPA*$MShIi&@rG0776;W|NiP``{Td&y}NU!aEXUmc} z)pBJS{(?r_74bnhhLuFO3aVS%Uu{3#2)}v$OfJL3R5NlFhD8k#vl{`h0I#=Uh7{_t zG8=w0kKx%ZF>*ILA{QUHb+L4mjZr+Zm0#dJy1c{n-XE=_lHrTs+teVHF79B>r@9ZBuy=H#)U zm$pgqr-4xV4lagICn~$6{Xxcsq*Hr>Cy{yeNiKa@9Hp(v5pPiHH;6~@#ws8~YIT(8 zZsCo;*0SXaye?ck{jvcXp^-E+IQkG45@Oyf4?mt~fQwr$n81Pk=n`at_klQJdSZf8 z#_hj=`oFieePW+7GQx|AB+rE&$c#jmA_W&d9N9wWGkQSO`{2JkQ3pOmBYL$5Ycn4} zX8aXRDsRBoH(O5Oq#~2(2@;uWIYt={;4P?)zk}$zteFM;5=FBX>?2$@U5^bvoTrw_ z`U@IC^Pnq`Mw&o?KG+Gk(FxnP&j6a-{wuf=!13l52H%nVga|Tvd%MK~FM;4252OJ8 zD{zQJUyQ>-BcE$kY@=cn1v&STRqEVZrQWF zlIMD!SMl6hnO4N`@RILeQsG*$j604YklK1mPpM?%8RiUPAG*5QcFYDHVpsa%8W& z@a`!*3bT9}(AHqXUtCpadwga*wiGNU{t@XU2Yv+u2uJ}QcE%JWI_BVYmqoiPE4bGDj41 z{&_|I3Qzb5yI*7XF?OgCiDwn{k-}nu?99NOK1}Mn1M4>6Q66*%_gZPKByl!|=R!jz zVNst2_V6gRp5HI=AP!X`x-0Xl9-W4b2LLP9kK8`6<+{m#+`)QMu4@L6 zB>-H=Q;6Edm=@ORNWG^fm?S=kQ{Cd>(?;E3LT_XE$5#(w#C* zcH4Bvq|j0{pm4&eaq)o=4r-CwgXq|4<5iOq9o)?b9&Nb6bj;1*)^rB%G;ISLlUe9K z;m=>tK1{@sqU;&0PnJp1o?M2A15`@z{Rbw?9eh`1~w~TSfS$)u4`9C#X2C@JE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29d654daf150e5e949330c82c22c655fd6882db4 GIT binary patch literal 12457 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9178167b515fa21cc4acd5016dba839a76e381af GIT binary patch literal 795 zcmZWnO^Xvj5ben%yD?@x$R0cvc#wdZ+(krK-QB~oh*>YgVAC^QNjlDS&vy5OjaU6M z{u=KAPoDe%B6zZTCSYI-x~Z<2dhgYTIXM|Ivfm$n+LKWlV?Q0p9+AYmCms5Iw9kJ=K=$^|qn04o zLN86?i7L7OFL(pq3hioPQTuWWhIEx;3&KOlX`%2Ai^eOXr(RVEeuW^ML+_xrW}_rZ z$hU3SwG}Ty#USb$7D`LBE`ghsaxGSc#0Fc_fHeA<2aS|XDr}>nFlC8_??52Og|P_6 z5*Y{}g&xczq}o=UP#6MldUk_EzPygC5O7i&YN} vx}V}6A~}Fa_PSkH&BKFv+c*>waQ~Ood13W;!9UaT zd<3m!T_EKi>Qu{&G8aK@VU`ivKQp;QJ|)Ln6s`%YV``+?hQDXpx@OwWtxwj1h4#DW zfgn4FvIQm9U7cy!)Iv8xf$mf-Qn8$0h&I(4s9HBln2`h`_7Gw%OTegCnGun*mGC-r zltqK%U~&2A^4au?B$T<7GF)bXR>4}n`AksM_*qQvB}?cdDh=!5DeJPzh5v~?ZgBtCZ&0eTS^xk5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0c7ad7d63916c77df207af257cc89417ac23397 GIT binary patch literal 2021 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 W&az>BdvwN?E&Nqa;y=_1Xp1iv+&iuS literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__init__.py b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1dbd2ed0929da2b0ee33f0afaa1a10f466cbe06 GIT binary patch literal 220 zcmYk0u?oUK42G}bAc7C#P`itWps0h0C~m=Wy`Cl2-jz!#IQcxjlHlYsxHx$?=@0qB zpZtW_Uau>>-iK!v`YYgHkv9`x)b_~5PV}SoUAQp*;d7e~VNco-Y#Sm8Gpm|P8zxvF zFPjYJ=!oNuv!zxH7i})E!VCym$F)=^S!ja1l%}wWvW6XI39)2UM?7mvDrtNqob>C; cyPT3VMT4BCgZldDj4GQqXFU#&QOlz(zG@UdH~;_u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f6b42ce3bb01f74d0eeb4ae57cc951dcab0ebff GIT binary patch literal 9373 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 1: + modified_count = len(collected["modified"]) + unmodified_count = len(collected["unmodified"]) + post_processed_count = len(collected["post_processed"]) + return ( + "\n%(modified_count)s %(identifier)s %(action)s" + "%(destination)s%(unmodified)s%(post_processed)s." + ) % { + "modified_count": modified_count, + "identifier": "static file" + ("" if modified_count == 1 else "s"), + "action": "symlinked" if self.symlink else "copied", + "destination": ( + " to '%s'" % destination_path if destination_path else "" + ), + "unmodified": ( + ", %s unmodified" % unmodified_count + if collected["unmodified"] + else "" + ), + "post_processed": ( + collected["post_processed"] + and ", %s post-processed" % post_processed_count + or "" + ), + } + + def log(self, msg, level=2): + """ + Small log helper + """ + if self.verbosity >= level: + self.stdout.write(msg) + + def is_local_storage(self): + return isinstance(self.storage, FileSystemStorage) + + def clear_dir(self, path): + """ + Delete the given relative path using the destination storage backend. + """ + if not self.storage.exists(path): + return + + dirs, files = self.storage.listdir(path) + for f in files: + fpath = os.path.join(path, f) + if self.dry_run: + self.log("Pretending to delete '%s'" % fpath, level=1) + else: + self.log("Deleting '%s'" % fpath, level=1) + try: + full_path = self.storage.path(fpath) + except NotImplementedError: + self.storage.delete(fpath) + else: + if not os.path.exists(full_path) and os.path.lexists(full_path): + # Delete broken symlinks + os.unlink(full_path) + else: + self.storage.delete(fpath) + for d in dirs: + self.clear_dir(os.path.join(path, d)) + + def delete_file(self, path, prefixed_path, source_storage): + """ + Check if the target file should be deleted if it already exists. + """ + if self.storage.exists(prefixed_path): + try: + # When was the target file modified last time? + target_last_modified = self.storage.get_modified_time(prefixed_path) + except (OSError, NotImplementedError, AttributeError): + # The storage doesn't support get_modified_time() or failed + pass + else: + try: + # When was the source file modified last time? + source_last_modified = source_storage.get_modified_time(path) + except (OSError, NotImplementedError, AttributeError): + pass + else: + # The full path of the target file + if self.local: + full_path = self.storage.path(prefixed_path) + # If it's --link mode and the path isn't a link (i.e. + # the previous collectstatic wasn't with --link) or if + # it's non-link mode and the path is a link (i.e. the + # previous collectstatic was with --link), the old + # links/files must be deleted so it's not safe to skip + # unmodified files. + can_skip_unmodified_files = not ( + self.symlink ^ os.path.islink(full_path) + ) + else: + # In remote storages, skipping is only based on the + # modified times since symlinks aren't relevant. + can_skip_unmodified_files = True + # Avoid sub-second precision (see #14665, #19540) + file_is_unmodified = target_last_modified.replace( + microsecond=0 + ) >= source_last_modified.replace(microsecond=0) + if file_is_unmodified and can_skip_unmodified_files: + if prefixed_path not in self.unmodified_files: + self.unmodified_files.append(prefixed_path) + self.log("Skipping '%s' (not modified)" % path) + return False + # Then delete the existing file if really needed + if self.dry_run: + self.log("Pretending to delete '%s'" % path) + else: + self.log("Deleting '%s'" % path) + self.storage.delete(prefixed_path) + return True + + def link_file(self, path, prefixed_path, source_storage): + """ + Attempt to link ``path`` + """ + # Skip this file if it was already copied earlier + if prefixed_path in self.symlinked_files: + return self.log("Skipping '%s' (already linked earlier)" % path) + # Delete the target file if needed or break + if not self.delete_file(path, prefixed_path, source_storage): + return + # The full path of the source file + source_path = source_storage.path(path) + # Finally link the file + if self.dry_run: + self.log("Pretending to link '%s'" % source_path, level=1) + else: + self.log("Linking '%s'" % source_path, level=2) + full_path = self.storage.path(prefixed_path) + os.makedirs(os.path.dirname(full_path), exist_ok=True) + try: + if os.path.lexists(full_path): + os.unlink(full_path) + os.symlink(source_path, full_path) + except NotImplementedError: + import platform + + raise CommandError( + "Symlinking is not supported in this " + "platform (%s)." % platform.platform() + ) + except OSError as e: + raise CommandError(e) + if prefixed_path not in self.symlinked_files: + self.symlinked_files.append(prefixed_path) + + def copy_file(self, path, prefixed_path, source_storage): + """ + Attempt to copy ``path`` with storage + """ + # Skip this file if it was already copied earlier + if prefixed_path in self.copied_files: + return self.log("Skipping '%s' (already copied earlier)" % path) + # Delete the target file if needed or break + if not self.delete_file(path, prefixed_path, source_storage): + return + # The full path of the source file + source_path = source_storage.path(path) + # Finally start copying + if self.dry_run: + self.log("Pretending to copy '%s'" % source_path, level=1) + else: + self.log("Copying '%s'" % source_path, level=2) + with source_storage.open(path) as source_file: + self.storage.save(prefixed_path, source_file) + self.copied_files.append(prefixed_path) diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/findstatic.py b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/findstatic.py new file mode 100644 index 000000000..97413a64a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/findstatic.py @@ -0,0 +1,48 @@ +import os + +from django.contrib.staticfiles import finders +from django.core.management.base import LabelCommand + + +class Command(LabelCommand): + help = "Finds the absolute paths for the given static file(s)." + label = "staticfile" + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + "--first", + action="store_false", + dest="all", + help="Only return the first match for each static file.", + ) + + def handle_label(self, path, **options): + verbosity = options["verbosity"] + result = finders.find(path, all=options["all"]) + if verbosity >= 2: + searched_locations = ( + "\nLooking in the following locations:\n %s" + % "\n ".join([str(loc) for loc in finders.searched_locations]) + ) + else: + searched_locations = "" + if result: + if not isinstance(result, (list, tuple)): + result = [result] + result = (os.path.realpath(path) for path in result) + if verbosity >= 1: + file_list = "\n ".join(result) + return "Found '%s' here:\n %s%s" % ( + path, + file_list, + searched_locations, + ) + else: + return "\n".join(result) + else: + message = ["No matching file found for '%s'." % path] + if verbosity >= 2: + message.append(searched_locations) + if verbosity >= 1: + self.stderr.write("\n".join(message)) diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/runserver.py b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/runserver.py new file mode 100644 index 000000000..fd9ddb16a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/management/commands/runserver.py @@ -0,0 +1,36 @@ +from django.conf import settings +from django.contrib.staticfiles.handlers import StaticFilesHandler +from django.core.management.commands.runserver import Command as RunserverCommand + + +class Command(RunserverCommand): + help = ( + "Starts a lightweight web server for development and also serves static files." + ) + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + "--nostatic", + action="store_false", + dest="use_static_handler", + help="Tells Django to NOT automatically serve static files at STATIC_URL.", + ) + parser.add_argument( + "--insecure", + action="store_true", + dest="insecure_serving", + help="Allows serving static files even if DEBUG is False.", + ) + + def get_handler(self, *args, **options): + """ + Return the static files serving handler wrapping the default handler, + if static files should be served. Otherwise return the default handler. + """ + handler = super().get_handler(*args, **options) + use_static_handler = options["use_static_handler"] + insecure_serving = options["insecure_serving"] + if use_static_handler and (settings.DEBUG or insecure_serving): + return StaticFilesHandler(handler) + return handler diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/storage.py b/venv/Lib/site-packages/django/contrib/staticfiles/storage.py new file mode 100644 index 000000000..38d2dfb21 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/storage.py @@ -0,0 +1,492 @@ +import hashlib +import json +import os +import posixpath +import re +from urllib.parse import unquote, urldefrag, urlsplit, urlunsplit + +from django.conf import settings +from django.contrib.staticfiles.utils import check_settings, matches_patterns +from django.core.exceptions import ImproperlyConfigured +from django.core.files.base import ContentFile +from django.core.files.storage import FileSystemStorage, get_storage_class +from django.utils.functional import LazyObject + + +class StaticFilesStorage(FileSystemStorage): + """ + Standard file system storage for static files. + + The defaults for ``location`` and ``base_url`` are + ``STATIC_ROOT`` and ``STATIC_URL``. + """ + + def __init__(self, location=None, base_url=None, *args, **kwargs): + if location is None: + location = settings.STATIC_ROOT + if base_url is None: + base_url = settings.STATIC_URL + check_settings(base_url) + super().__init__(location, base_url, *args, **kwargs) + # FileSystemStorage fallbacks to MEDIA_ROOT when location + # is empty, so we restore the empty value. + if not location: + self.base_location = None + self.location = None + + def path(self, name): + if not self.location: + raise ImproperlyConfigured( + "You're using the staticfiles app " + "without having set the STATIC_ROOT " + "setting to a filesystem path." + ) + return super().path(name) + + +class HashedFilesMixin: + default_template = """url("%(url)s")""" + max_post_process_passes = 5 + patterns = ( + ( + "*.css", + ( + r"""(?Purl\(['"]{0,1}\s*(?P.*?)["']{0,1}\))""", + ( + r"""(?P@import\s*["']\s*(?P.*?)["'])""", + """@import url("%(url)s")""", + ), + ), + ), + ( + "*.js", + ( + ( + r"(?m)(?P)^(//# (?-i:sourceMappingURL)=(?P.*))$", + "//# sourceMappingURL=%(url)s", + ), + ), + ), + ) + keep_intermediate_files = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._patterns = {} + self.hashed_files = {} + for extension, patterns in self.patterns: + for pattern in patterns: + if isinstance(pattern, (tuple, list)): + pattern, template = pattern + else: + template = self.default_template + compiled = re.compile(pattern, re.IGNORECASE) + self._patterns.setdefault(extension, []).append((compiled, template)) + + def file_hash(self, name, content=None): + """ + Return a hash of the file with the given name and optional content. + """ + if content is None: + return None + md5 = hashlib.md5() + for chunk in content.chunks(): + md5.update(chunk) + return md5.hexdigest()[:12] + + def hashed_name(self, name, content=None, filename=None): + # `filename` is the name of file to hash if `content` isn't given. + # `name` is the base name to construct the new hashed filename from. + parsed_name = urlsplit(unquote(name)) + clean_name = parsed_name.path.strip() + filename = (filename and urlsplit(unquote(filename)).path.strip()) or clean_name + opened = content is None + if opened: + if not self.exists(filename): + raise ValueError( + "The file '%s' could not be found with %r." % (filename, self) + ) + try: + content = self.open(filename) + except OSError: + # Handle directory paths and fragments + return name + try: + file_hash = self.file_hash(clean_name, content) + finally: + if opened: + content.close() + path, filename = os.path.split(clean_name) + root, ext = os.path.splitext(filename) + file_hash = (".%s" % file_hash) if file_hash else "" + hashed_name = os.path.join(path, "%s%s%s" % (root, file_hash, ext)) + unparsed_name = list(parsed_name) + unparsed_name[2] = hashed_name + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + if "?#" in name and not unparsed_name[3]: + unparsed_name[2] += "?" + return urlunsplit(unparsed_name) + + def _url(self, hashed_name_func, name, force=False, hashed_files=None): + """ + Return the non-hashed URL in DEBUG mode. + """ + if settings.DEBUG and not force: + hashed_name, fragment = name, "" + else: + clean_name, fragment = urldefrag(name) + if urlsplit(clean_name).path.endswith("/"): # don't hash paths + hashed_name = name + else: + args = (clean_name,) + if hashed_files is not None: + args += (hashed_files,) + hashed_name = hashed_name_func(*args) + + final_url = super().url(hashed_name) + + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + query_fragment = "?#" in name # [sic!] + if fragment or query_fragment: + urlparts = list(urlsplit(final_url)) + if fragment and not urlparts[4]: + urlparts[4] = fragment + if query_fragment and not urlparts[3]: + urlparts[2] += "?" + final_url = urlunsplit(urlparts) + + return unquote(final_url) + + def url(self, name, force=False): + """ + Return the non-hashed URL in DEBUG mode. + """ + return self._url(self.stored_name, name, force) + + def url_converter(self, name, hashed_files, template=None): + """ + Return the custom URL converter for the given file name. + """ + if template is None: + template = self.default_template + + def converter(matchobj): + """ + Convert the matched URL to a normalized and hashed URL. + + This requires figuring out which files the matched URL resolves + to and calling the url() method of the storage. + """ + matches = matchobj.groupdict() + matched = matches["matched"] + url = matches["url"] + + # Ignore absolute/protocol-relative and data-uri URLs. + if re.match(r"^[a-z]+:", url): + return matched + + # Ignore absolute URLs that don't point to a static file (dynamic + # CSS / JS?). Note that STATIC_URL cannot be empty. + if url.startswith("/") and not url.startswith(settings.STATIC_URL): + return matched + + # Strip off the fragment so a path-like fragment won't interfere. + url_path, fragment = urldefrag(url) + + if url_path.startswith("/"): + # Otherwise the condition above would have returned prematurely. + assert url_path.startswith(settings.STATIC_URL) + target_name = url_path[len(settings.STATIC_URL) :] + else: + # We're using the posixpath module to mix paths and URLs conveniently. + source_name = name if os.sep == "/" else name.replace(os.sep, "/") + target_name = posixpath.join(posixpath.dirname(source_name), url_path) + + # Determine the hashed name of the target file with the storage backend. + hashed_url = self._url( + self._stored_name, + unquote(target_name), + force=True, + hashed_files=hashed_files, + ) + + transformed_url = "/".join( + url_path.split("/")[:-1] + hashed_url.split("/")[-1:] + ) + + # Restore the fragment that was stripped off earlier. + if fragment: + transformed_url += ("?#" if "?#" in url else "#") + fragment + + # Return the hashed version to the file + matches["url"] = unquote(transformed_url) + return template % matches + + return converter + + def post_process(self, paths, dry_run=False, **options): + """ + Post process the given dictionary of files (called from collectstatic). + + Processing is actually two separate operations: + + 1. renaming files to include a hash of their content for cache-busting, + and copying those files to the target storage. + 2. adjusting files which contain references to other files so they + refer to the cache-busting filenames. + + If either of these are performed on a file, then that file is considered + post-processed. + """ + # don't even dare to process the files if we're in dry run mode + if dry_run: + return + + # where to store the new paths + hashed_files = {} + + # build a list of adjustable files + adjustable_paths = [ + path for path in paths if matches_patterns(path, self._patterns) + ] + + # Adjustable files to yield at end, keyed by the original path. + processed_adjustable_paths = {} + + # Do a single pass first. Post-process all files once, yielding not + # adjustable files and exceptions, and collecting adjustable files. + for name, hashed_name, processed, _ in self._post_process( + paths, adjustable_paths, hashed_files + ): + if name not in adjustable_paths or isinstance(processed, Exception): + yield name, hashed_name, processed + else: + processed_adjustable_paths[name] = (name, hashed_name, processed) + + paths = {path: paths[path] for path in adjustable_paths} + substitutions = False + + for i in range(self.max_post_process_passes): + substitutions = False + for name, hashed_name, processed, subst in self._post_process( + paths, adjustable_paths, hashed_files + ): + # Overwrite since hashed_name may be newer. + processed_adjustable_paths[name] = (name, hashed_name, processed) + substitutions = substitutions or subst + + if not substitutions: + break + + if substitutions: + yield "All", None, RuntimeError("Max post-process passes exceeded.") + + # Store the processed paths + self.hashed_files.update(hashed_files) + + # Yield adjustable files with final, hashed name. + yield from processed_adjustable_paths.values() + + def _post_process(self, paths, adjustable_paths, hashed_files): + # Sort the files by directory level + def path_level(name): + return len(name.split(os.sep)) + + for name in sorted(paths, key=path_level, reverse=True): + substitutions = True + # use the original, local file, not the copied-but-unprocessed + # file, which might be somewhere far away, like S3 + storage, path = paths[name] + with storage.open(path) as original_file: + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + + # generate the hash with the original content, even for + # adjustable files. + if hash_key not in hashed_files: + hashed_name = self.hashed_name(name, original_file) + else: + hashed_name = hashed_files[hash_key] + + # then get the original's file content.. + if hasattr(original_file, "seek"): + original_file.seek(0) + + hashed_file_exists = self.exists(hashed_name) + processed = False + + # ..to apply each replacement pattern to the content + if name in adjustable_paths: + old_hashed_name = hashed_name + content = original_file.read().decode("utf-8") + for extension, patterns in self._patterns.items(): + if matches_patterns(path, (extension,)): + for pattern, template in patterns: + converter = self.url_converter( + name, hashed_files, template + ) + try: + content = pattern.sub(converter, content) + except ValueError as exc: + yield name, None, exc, False + if hashed_file_exists: + self.delete(hashed_name) + # then save the processed result + content_file = ContentFile(content.encode()) + if self.keep_intermediate_files: + # Save intermediate file for reference + self._save(hashed_name, content_file) + hashed_name = self.hashed_name(name, content_file) + + if self.exists(hashed_name): + self.delete(hashed_name) + + saved_name = self._save(hashed_name, content_file) + hashed_name = self.clean_name(saved_name) + # If the file hash stayed the same, this file didn't change + if old_hashed_name == hashed_name: + substitutions = False + processed = True + + if not processed: + # or handle the case in which neither processing nor + # a change to the original file happened + if not hashed_file_exists: + processed = True + saved_name = self._save(hashed_name, original_file) + hashed_name = self.clean_name(saved_name) + + # and then set the cache accordingly + hashed_files[hash_key] = hashed_name + + yield name, hashed_name, processed, substitutions + + def clean_name(self, name): + return name.replace("\\", "/") + + def hash_key(self, name): + return name + + def _stored_name(self, name, hashed_files): + # Normalize the path to avoid multiple names for the same file like + # ../foo/bar.css and ../foo/../foo/bar.css which normalize to the same + # path. + name = posixpath.normpath(name) + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + cache_name = hashed_files.get(hash_key) + if cache_name is None: + cache_name = self.clean_name(self.hashed_name(name)) + return cache_name + + def stored_name(self, name): + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + cache_name = self.hashed_files.get(hash_key) + if cache_name: + return cache_name + # No cached name found, recalculate it from the files. + intermediate_name = name + for i in range(self.max_post_process_passes + 1): + cache_name = self.clean_name( + self.hashed_name(name, content=None, filename=intermediate_name) + ) + if intermediate_name == cache_name: + # Store the hashed name if there was a miss. + self.hashed_files[hash_key] = cache_name + return cache_name + else: + # Move on to the next intermediate file. + intermediate_name = cache_name + # If the cache name can't be determined after the max number of passes, + # the intermediate files on disk may be corrupt; avoid an infinite loop. + raise ValueError("The name '%s' could not be hashed with %r." % (name, self)) + + +class ManifestFilesMixin(HashedFilesMixin): + manifest_version = "1.0" # the manifest format standard + manifest_name = "staticfiles.json" + manifest_strict = True + keep_intermediate_files = False + + def __init__(self, *args, manifest_storage=None, **kwargs): + super().__init__(*args, **kwargs) + if manifest_storage is None: + manifest_storage = self + self.manifest_storage = manifest_storage + self.hashed_files = self.load_manifest() + + def read_manifest(self): + try: + with self.manifest_storage.open(self.manifest_name) as manifest: + return manifest.read().decode() + except FileNotFoundError: + return None + + def load_manifest(self): + content = self.read_manifest() + if content is None: + return {} + try: + stored = json.loads(content) + except json.JSONDecodeError: + pass + else: + version = stored.get("version") + if version == "1.0": + return stored.get("paths", {}) + raise ValueError( + "Couldn't load manifest '%s' (version %s)" + % (self.manifest_name, self.manifest_version) + ) + + def post_process(self, *args, **kwargs): + self.hashed_files = {} + yield from super().post_process(*args, **kwargs) + if not kwargs.get("dry_run"): + self.save_manifest() + + def save_manifest(self): + payload = {"paths": self.hashed_files, "version": self.manifest_version} + if self.manifest_storage.exists(self.manifest_name): + self.manifest_storage.delete(self.manifest_name) + contents = json.dumps(payload).encode() + self.manifest_storage._save(self.manifest_name, ContentFile(contents)) + + def stored_name(self, name): + parsed_name = urlsplit(unquote(name)) + clean_name = parsed_name.path.strip() + hash_key = self.hash_key(clean_name) + cache_name = self.hashed_files.get(hash_key) + if cache_name is None: + if self.manifest_strict: + raise ValueError( + "Missing staticfiles manifest entry for '%s'" % clean_name + ) + cache_name = self.clean_name(self.hashed_name(name)) + unparsed_name = list(parsed_name) + unparsed_name[2] = cache_name + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + if "?#" in name and not unparsed_name[3]: + unparsed_name[2] += "?" + return urlunsplit(unparsed_name) + + +class ManifestStaticFilesStorage(ManifestFilesMixin, StaticFilesStorage): + """ + A static file system storage backend which also saves + hashed copies of the files it saves. + """ + + pass + + +class ConfiguredStorage(LazyObject): + def _setup(self): + self._wrapped = get_storage_class(settings.STATICFILES_STORAGE)() + + +staticfiles_storage = ConfiguredStorage() diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/testing.py b/venv/Lib/site-packages/django/contrib/staticfiles/testing.py new file mode 100644 index 000000000..546a24ae1 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/testing.py @@ -0,0 +1,13 @@ +from django.contrib.staticfiles.handlers import StaticFilesHandler +from django.test import LiveServerTestCase + + +class StaticLiveServerTestCase(LiveServerTestCase): + """ + Extend django.test.LiveServerTestCase to transparently overlay at test + execution-time the assets provided by the staticfiles app finders. This + means you don't need to run collectstatic before or as a part of your tests + setup. + """ + + static_handler = StaticFilesHandler diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/urls.py b/venv/Lib/site-packages/django/contrib/staticfiles/urls.py new file mode 100644 index 000000000..6278f35b3 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/urls.py @@ -0,0 +1,19 @@ +from django.conf import settings +from django.conf.urls.static import static +from django.contrib.staticfiles.views import serve + +urlpatterns = [] + + +def staticfiles_urlpatterns(prefix=None): + """ + Helper function to return a URL pattern for serving static files. + """ + if prefix is None: + prefix = settings.STATIC_URL + return static(prefix, view=serve) + + +# Only append if urlpatterns are empty +if settings.DEBUG and not urlpatterns: + urlpatterns += staticfiles_urlpatterns() diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/utils.py b/venv/Lib/site-packages/django/contrib/staticfiles/utils.py new file mode 100644 index 000000000..efd67ac8e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/utils.py @@ -0,0 +1,71 @@ +import fnmatch +import os + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured + + +def matches_patterns(path, patterns): + """ + Return True or False depending on whether the ``path`` should be + ignored (if it matches any pattern in ``ignore_patterns``). + """ + return any(fnmatch.fnmatchcase(path, pattern) for pattern in patterns) + + +def get_files(storage, ignore_patterns=None, location=""): + """ + Recursively walk the storage directories yielding the paths + of all files that should be copied. + """ + if ignore_patterns is None: + ignore_patterns = [] + directories, files = storage.listdir(location) + for fn in files: + # Match only the basename. + if matches_patterns(fn, ignore_patterns): + continue + if location: + fn = os.path.join(location, fn) + # Match the full file path. + if matches_patterns(fn, ignore_patterns): + continue + yield fn + for dir in directories: + if matches_patterns(dir, ignore_patterns): + continue + if location: + dir = os.path.join(location, dir) + yield from get_files(storage, ignore_patterns, dir) + + +def check_settings(base_url=None): + """ + Check if the staticfiles settings have sane values. + """ + if base_url is None: + base_url = settings.STATIC_URL + if not base_url: + raise ImproperlyConfigured( + "You're using the staticfiles app " + "without having set the required STATIC_URL setting." + ) + if settings.MEDIA_URL == base_url: + raise ImproperlyConfigured( + "The MEDIA_URL and STATIC_URL settings must have different values" + ) + if ( + settings.DEBUG + and settings.MEDIA_URL + and settings.STATIC_URL + and settings.MEDIA_URL.startswith(settings.STATIC_URL) + ): + raise ImproperlyConfigured( + "runserver can't serve media if MEDIA_URL is within STATIC_URL." + ) + if (settings.MEDIA_ROOT and settings.STATIC_ROOT) and ( + settings.MEDIA_ROOT == settings.STATIC_ROOT + ): + raise ImproperlyConfigured( + "The MEDIA_ROOT and STATIC_ROOT settings must have different values" + ) diff --git a/venv/Lib/site-packages/django/contrib/staticfiles/views.py b/venv/Lib/site-packages/django/contrib/staticfiles/views.py new file mode 100644 index 000000000..83d04d4ce --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/staticfiles/views.py @@ -0,0 +1,39 @@ +""" +Views and functions for serving static files. These are only to be used during +development, and SHOULD NOT be used in a production setting. + +""" +import os +import posixpath + +from django.conf import settings +from django.contrib.staticfiles import finders +from django.http import Http404 +from django.views import static + + +def serve(request, path, insecure=False, **kwargs): + """ + Serve static files below a given point in the directory structure or + from locations inferred from the staticfiles finders. + + To use, put a URL pattern such as:: + + from django.contrib.staticfiles import views + + path('', views.serve) + + in your URLconf. + + It uses the django.views.static.serve() view to serve the found files. + """ + if not settings.DEBUG and not insecure: + raise Http404 + normalized_path = posixpath.normpath(path).lstrip("/") + absolute_path = finders.find(normalized_path) + if not absolute_path: + if path.endswith("/") or path == "": + raise Http404("Directory indexes are not allowed here.") + raise Http404("'%s' could not be found" % path) + document_root, path = os.path.split(absolute_path) + return static.serve(request, path, document_root=document_root, **kwargs) diff --git a/venv/Lib/site-packages/django/contrib/syndication/__init__.py b/venv/Lib/site-packages/django/contrib/syndication/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cc13e9e9cdc445ada93ad081d8a13bf95ff43a1 GIT binary patch literal 200 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 QPLj{^UBurt+iu7D4-oxk9smFU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/syndication/apps.py b/venv/Lib/site-packages/django/contrib/syndication/apps.py new file mode 100644 index 000000000..bb0f86aa2 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/syndication/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class SyndicationConfig(AppConfig): + name = "django.contrib.syndication" + verbose_name = _("Syndication") diff --git a/venv/Lib/site-packages/django/contrib/syndication/views.py b/venv/Lib/site-packages/django/contrib/syndication/views.py new file mode 100644 index 000000000..a9d1bff5c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/syndication/views.py @@ -0,0 +1,221 @@ +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist +from django.http import Http404, HttpResponse +from django.template import TemplateDoesNotExist, loader +from django.utils import feedgenerator +from django.utils.encoding import iri_to_uri +from django.utils.html import escape +from django.utils.http import http_date +from django.utils.timezone import get_default_timezone, is_naive, make_aware +from django.utils.translation import get_language + + +def add_domain(domain, url, secure=False): + protocol = "https" if secure else "http" + if url.startswith("//"): + # Support network-path reference (see #16753) - RSS requires a protocol + url = "%s:%s" % (protocol, url) + elif not url.startswith(("http://", "https://", "mailto:")): + url = iri_to_uri("%s://%s%s" % (protocol, domain, url)) + return url + + +class FeedDoesNotExist(ObjectDoesNotExist): + pass + + +class Feed: + feed_type = feedgenerator.DefaultFeed + title_template = None + description_template = None + language = None + + def __call__(self, request, *args, **kwargs): + try: + obj = self.get_object(request, *args, **kwargs) + except ObjectDoesNotExist: + raise Http404("Feed object does not exist.") + feedgen = self.get_feed(obj, request) + response = HttpResponse(content_type=feedgen.content_type) + if hasattr(self, "item_pubdate") or hasattr(self, "item_updateddate"): + # if item_pubdate or item_updateddate is defined for the feed, set + # header so as ConditionalGetMiddleware is able to send 304 NOT MODIFIED + response.headers["Last-Modified"] = http_date( + feedgen.latest_post_date().timestamp() + ) + feedgen.write(response, "utf-8") + return response + + def item_title(self, item): + # Titles should be double escaped by default (see #6533) + return escape(str(item)) + + def item_description(self, item): + return str(item) + + def item_link(self, item): + try: + return item.get_absolute_url() + except AttributeError: + raise ImproperlyConfigured( + "Give your %s class a get_absolute_url() method, or define an " + "item_link() method in your Feed class." % item.__class__.__name__ + ) + + def item_enclosures(self, item): + enc_url = self._get_dynamic_attr("item_enclosure_url", item) + if enc_url: + enc = feedgenerator.Enclosure( + url=str(enc_url), + length=str(self._get_dynamic_attr("item_enclosure_length", item)), + mime_type=str(self._get_dynamic_attr("item_enclosure_mime_type", item)), + ) + return [enc] + return [] + + def _get_dynamic_attr(self, attname, obj, default=None): + try: + attr = getattr(self, attname) + except AttributeError: + return default + if callable(attr): + # Check co_argcount rather than try/excepting the function and + # catching the TypeError, because something inside the function + # may raise the TypeError. This technique is more accurate. + try: + code = attr.__code__ + except AttributeError: + code = attr.__call__.__code__ + if code.co_argcount == 2: # one argument is 'self' + return attr(obj) + else: + return attr() + return attr + + def feed_extra_kwargs(self, obj): + """ + Return an extra keyword arguments dictionary that is used when + initializing the feed generator. + """ + return {} + + def item_extra_kwargs(self, item): + """ + Return an extra keyword arguments dictionary that is used with + the `add_item` call of the feed generator. + """ + return {} + + def get_object(self, request, *args, **kwargs): + return None + + def get_context_data(self, **kwargs): + """ + Return a dictionary to use as extra context if either + ``self.description_template`` or ``self.item_template`` are used. + + Default implementation preserves the old behavior + of using {'obj': item, 'site': current_site} as the context. + """ + return {"obj": kwargs.get("item"), "site": kwargs.get("site")} + + def get_feed(self, obj, request): + """ + Return a feedgenerator.DefaultFeed object, fully populated, for + this feed. Raise FeedDoesNotExist for invalid parameters. + """ + current_site = get_current_site(request) + + link = self._get_dynamic_attr("link", obj) + link = add_domain(current_site.domain, link, request.is_secure()) + + feed = self.feed_type( + title=self._get_dynamic_attr("title", obj), + subtitle=self._get_dynamic_attr("subtitle", obj), + link=link, + description=self._get_dynamic_attr("description", obj), + language=self.language or get_language(), + feed_url=add_domain( + current_site.domain, + self._get_dynamic_attr("feed_url", obj) or request.path, + request.is_secure(), + ), + author_name=self._get_dynamic_attr("author_name", obj), + author_link=self._get_dynamic_attr("author_link", obj), + author_email=self._get_dynamic_attr("author_email", obj), + categories=self._get_dynamic_attr("categories", obj), + feed_copyright=self._get_dynamic_attr("feed_copyright", obj), + feed_guid=self._get_dynamic_attr("feed_guid", obj), + ttl=self._get_dynamic_attr("ttl", obj), + **self.feed_extra_kwargs(obj), + ) + + title_tmp = None + if self.title_template is not None: + try: + title_tmp = loader.get_template(self.title_template) + except TemplateDoesNotExist: + pass + + description_tmp = None + if self.description_template is not None: + try: + description_tmp = loader.get_template(self.description_template) + except TemplateDoesNotExist: + pass + + for item in self._get_dynamic_attr("items", obj): + context = self.get_context_data( + item=item, site=current_site, obj=obj, request=request + ) + if title_tmp is not None: + title = title_tmp.render(context, request) + else: + title = self._get_dynamic_attr("item_title", item) + if description_tmp is not None: + description = description_tmp.render(context, request) + else: + description = self._get_dynamic_attr("item_description", item) + link = add_domain( + current_site.domain, + self._get_dynamic_attr("item_link", item), + request.is_secure(), + ) + enclosures = self._get_dynamic_attr("item_enclosures", item) + author_name = self._get_dynamic_attr("item_author_name", item) + if author_name is not None: + author_email = self._get_dynamic_attr("item_author_email", item) + author_link = self._get_dynamic_attr("item_author_link", item) + else: + author_email = author_link = None + + tz = get_default_timezone() + + pubdate = self._get_dynamic_attr("item_pubdate", item) + if pubdate and is_naive(pubdate): + pubdate = make_aware(pubdate, tz) + + updateddate = self._get_dynamic_attr("item_updateddate", item) + if updateddate and is_naive(updateddate): + updateddate = make_aware(updateddate, tz) + + feed.add_item( + title=title, + link=link, + description=description, + unique_id=self._get_dynamic_attr("item_guid", item, link), + unique_id_is_permalink=self._get_dynamic_attr( + "item_guid_is_permalink", item + ), + enclosures=enclosures, + pubdate=pubdate, + updateddate=updateddate, + author_name=author_name, + author_email=author_email, + author_link=author_link, + comments=self._get_dynamic_attr("item_comments", item), + categories=self._get_dynamic_attr("item_categories", item), + item_copyright=self._get_dynamic_attr("item_copyright", item), + **self.item_extra_kwargs(item), + ) + return feed diff --git a/venv/Lib/site-packages/django/core/__init__.py b/venv/Lib/site-packages/django/core/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb31cbbf34666c06259951f2c8ca3b6a8bf03dbf GIT binary patch literal 185 zcmd1j<>g`kg0FFRlR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_avsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMa(+>&etdjpUS>&ryk0@&Ee@O9{FKt1R6CHZ#Y{kgg#iEz C#W6Mj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/__pycache__/asgi.cpython-310.pyc b/venv/Lib/site-packages/django/core/__pycache__/asgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..888c9573a3c749539b4040609c1ee7ecba53a615 GIT binary patch literal 642 zcmZuvO>fjN5Ve!tZMAGKh)Zw2p-416a6<^OYSj-3p{fN5MHZD4d$Zm;vE^}Az!A9e zL-W*P%zJN~*n@*PLHqUozWhuH`4N*{OE7tf2N*g@BsHXn zcVcLh6bU6Vm6NZeNF}`?+4LuNk=GgRA1rUqFE2zZjq+72?plh;2_ATeE|3kCR3_gj zB_a7j5GMU}KWAuf){42VG`eEC4a%=XrC6}+bR*i@J_Z&^7hcK+KsZ49wHm+%L9H-M zH_oU=wLt`Ju?ewi1O1b(i=MOX4O?I9dpdAm_n;9J#h`72#=&_NwJ zQQZmD#7C0jxbm@pTIcR#|ENYCF}W4a;Y$x&L}HkrTkOrK-@_oA`1sX|!~Z^8oF7CF dz5jHN(F_Os{pXF9ol!6FFC!33`(!~E=^wBfu5kbW literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/__pycache__/exceptions.cpython-310.pyc b/venv/Lib/site-packages/django/core/__pycache__/exceptions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fd784e0398ba40edfa4d0694295c7e3d192a329 GIT binary patch literal 7072 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 D(5A{3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/__pycache__/signals.cpython-310.pyc b/venv/Lib/site-packages/django/core/__pycache__/signals.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00a757e39ae123494c55379683701403ade02b22 GIT binary patch literal 337 zcmYk2!Ab)$5QdYjE>bM@;yc(w+q;Meih2-{7B4ZlWRr0>wVSM&*`jA3!e{W63Z6Xq z0A4(qT`4#)U-*B*KbiQ!pwD7`-+$z9@%(JX|4O1biH!#lh8ezO6&IW{;IB+19eW+O zI&Pa}&PKhjc$457t>M zqqARl$~G=MYpBV3Cx!?_))kp9V=kC?7J4zU!_VF6p}a*1C}$0#l4o8w6*xk9Vd=8T z<+%+=R4t>l%>C0c@Ut@NWR0Oj9{r`iXYVz&rR>X-G-QRPjugkv7(Vf%l( LEKO3L@;?6s@ibwg literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/__pycache__/signing.cpython-310.pyc b/venv/Lib/site-packages/django/core/__pycache__/signing.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b435170f3ef1a6dbcea1c0d9f6662c47a03c37ea GIT binary patch literal 8805 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/asgi.py b/venv/Lib/site-packages/django/core/asgi.py new file mode 100644 index 000000000..0d846ccd1 --- /dev/null +++ b/venv/Lib/site-packages/django/core/asgi.py @@ -0,0 +1,13 @@ +import django +from django.core.handlers.asgi import ASGIHandler + + +def get_asgi_application(): + """ + The public interface to Django's ASGI support. Return an ASGI 3 callable. + + Avoids making django.core.handlers.ASGIHandler a public API, in case the + internal implementation changes or moves in the future. + """ + django.setup(set_prefix=False) + return ASGIHandler() diff --git a/venv/Lib/site-packages/django/core/cache/__init__.py b/venv/Lib/site-packages/django/core/cache/__init__.py new file mode 100644 index 000000000..f09c9ecc4 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/__init__.py @@ -0,0 +1,75 @@ +""" +Caching framework. + +This package defines set of cache backends that all conform to a simple API. +In a nutshell, a cache is a set of values -- which can be any object that +may be pickled -- identified by string keys. For the complete API, see +the abstract BaseCache class in django.core.cache.backends.base. + +Client code should use the `cache` variable defined here to access the default +cache backend and look up non-default cache backends in the `caches` dict-like +object. + +See docs/topics/cache.txt for information on the public API. +""" +from django.core import signals +from django.core.cache.backends.base import ( + BaseCache, + CacheKeyWarning, + InvalidCacheBackendError, + InvalidCacheKey, +) +from django.utils.connection import BaseConnectionHandler, ConnectionProxy +from django.utils.module_loading import import_string + +__all__ = [ + "cache", + "caches", + "DEFAULT_CACHE_ALIAS", + "InvalidCacheBackendError", + "CacheKeyWarning", + "BaseCache", + "InvalidCacheKey", +] + +DEFAULT_CACHE_ALIAS = "default" + + +class CacheHandler(BaseConnectionHandler): + settings_name = "CACHES" + exception_class = InvalidCacheBackendError + + def create_connection(self, alias): + params = self.settings[alias].copy() + backend = params.pop("BACKEND") + location = params.pop("LOCATION", "") + try: + backend_cls = import_string(backend) + except ImportError as e: + raise InvalidCacheBackendError( + "Could not find backend '%s': %s" % (backend, e) + ) from e + return backend_cls(location, params) + + def all(self, initialized_only=False): + return [ + self[alias] + for alias in self + # If initialized_only is True, return only initialized caches. + if not initialized_only or hasattr(self._connections, alias) + ] + + +caches = CacheHandler() + +cache = ConnectionProxy(caches, DEFAULT_CACHE_ALIAS) + + +def close_caches(**kwargs): + # Some caches need to do a cleanup at the end of a request cycle. If not + # implemented in a particular backend cache.close() is a no-op. + for cache in caches.all(initialized_only=True): + cache.close() + + +signals.request_finished.connect(close_caches) diff --git a/venv/Lib/site-packages/django/core/cache/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31a3b6fcecd259bbb4f0a65170d945127dd3468a GIT binary patch literal 2431 zcmZuzUvC>l5Z~Q9pY4m28cLxBL|2FcM#SX_Bve(TPD7(sDWXM4CztE_b{$`GzH@ia zO&vK1kxJx+2fjhW8{dUba1u{E@d0>2i1OP#r%DSe@7(^Gotd5A%&ha}WuKt^`OR;G zUmJw{ZYHOji^*r``UpgjfCwsBO2;f<)Qp|f8M}cyt_8KR7kJ}(P`B%D+88&3=GYH> zJFlfn<5tk3WSa=@XBsSvda&|25e?CNOhi*Q51rtQJab5bw)ACNt{k%9CE<&u$0T@J zvYoR}UXd>!Q^;!FA)V#ubw-Hai{ep|ZS$du#&R!LyItSEJ4!U4MDcF4ExC}xB$JwJ zS@3+wWAIBpz^2TE=EW!~c$B6*&a+{z#=OXR#C0;Bq>`_FvDx)EGc07&LXTvceu!}; z0UE$p$$S{4Q)pOS<$I$f9)Tm{1IeRo#`D3Bj0>yAA4fB@JW1l+R0_kM2$>bhFu`mv z{?^HC)dS5OE{>PCQuB~LUKLIr>WpmEv>ry_QZYuFj7f0fDaYE>_cISNfIDVCEeO9eJ!T z7df1!FISf-9u*u=;id+#s7UgR<7b3Trh_zzE8PA-u#yff>pI!aqEvU>viZze<(Z!G z*-bh7I#LDiAi&#qtJSo`YM-LSXTyKy~SyS2G?N7Z1tGFhh_Lp+eO zzHnoV$#c!He1@*y1(776$WSI|;7B*92__t5kB1zq3GXot>Y|R^X_hT}&xPTEXSLsn zkxFLF+?jhr_9{7~bMJd5u=B0ANB79QHh1UjkioXvR#3mT*1LIqYdvV( zy4_p5yLo%7B>NY8Hcqn~=qCuVlW=?Ql78<~eo1${vVnXo0H!Y8IG@Z)XOd4;6Q-9- zn-&HOsC6%paJ5W_WeuQ5y7VRy3WzT23$bM*&0`x|!O~(Wj8k1w`3q66L*!qB-lzSq zv{btPE3aC%nQ^wdojqlh~-`#)f zG`ijY2-$cJXal+lBGdINAU}{F=n&uv_PB9G*8vt_akgTLy_04RnJ_(zuHOOKMts~` zIiN>GwF+`Xcj%lRGR2PYy+D3q4}h(89MY#gigZ*IDrlX$nZ^d|ex%Mp*e|SX8!sdP zXJ3ji&(fJPrdbK<4U9_vN}A}xRL85IV6NLB9)S}W``dTf-yZdz?!WV#BT(nNR}8MH zzKX%g@r7BH0uC{imWyU&RXI5LF=pCiBAm{=fA-riO5WU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7673e095375bda0d359b776a88545741dcf0bc43 GIT binary patch literal 553 zcmYjOO>Yx15S_6%n@}25A;h6b+&Ju^$%#va5LKHLi8iWAIIuFToVA;5vme3s27y0VF(v|ELlpjWc^G|uU}Uk#xskn;r!(1mqTNi1PyVyOtu5z=&h^lNfi-U6 ziZm#oM)jz{BY3xSMH{jvhBovIu7eG15WzD7{qDn-X*E6$H*i57g6n{cez^z0e$=+@ z8P~Hsn^;6Hp+&wOe-Pn|YDnuT7Tg z-eP5U3qF_0jm*ja*5+~*dP%n(bkL9cxQ#ogx{io&6j9|rQ*}Ie?z-Pw;1Al)v!W7p QE}wfXwZE_f0l7#20>E&ONB{r; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/backends/__init__.py b/venv/Lib/site-packages/django/core/cache/backends/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c6ed0ee84a0dd6cc823ae53daed03080564c73a GIT binary patch literal 200 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 Ki)wjpKKH-HNeJ-( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d79ab02a65da3b9b504f4fcf5b96a2db8d9958cc GIT binary patch literal 1697 zcmb7EOK%%D5GI#gNme9Tek5(tN8I)j9U|Y0B1me-X@OKN8vC+Xl%SWiwf3&oA$J`( z&@BdXYJWv9`bz|Q>Z#|Tm!3L9N%6*Y4k5tNP&3P!@0%GG-ENz}`sdd_4>vd=f8n9N z;6L&Zw!H^Jk%%a&f{f-t6yz*olsqAdDSk;5*X$LGxC)<tu;{TRffm3sFYO7mtYN-v?QC-khKowsd>HvmK*Y+6Zc?GqkkQ3aiuI?}rxciaMrL#bU_)D-Y2#W# zq?5E1V!$1@Iy-WFT-efaX^yRHoW8){8Fec{B$>2Uh#C2Jyz@M-6*jVE?|l<~QqoX1bo!`P;!zJCU!%VTY0bs{In#dcB{z3uC< zy{L!XR#>Fr*@bBW3fvZP-l2=~dFaDs=A$G8<8q;nB<#Sp>ma7&giPs_EBadi1Oz}K z8v&x`IRHqD$^MK+w{v-_g`6mHF0)k0Qj1f4F$+x#E^rKV7lNhIu34tJE~?V3fyMOR z3gp}|sT8*D8%&@_Iepo?D%B8-2^y9Q^_wzf^Gv6Z=`0wTKDZeKGT=TPvkAIuDt#oY z>^*rL>(Zz8F}S{y0~kJtEoc|>$ua@6f!cM&yf$l zRtrA2y*IkKi(%fzGFy1OMsIU0E%u`K@&VRs0T#xD!k5d1I&MDz2oz`D;8^&(2Xv0; zTAVP+v@~CWmoFr=Zk_6nk BUOoT- literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/backends/__pycache__/filebased.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/backends/__pycache__/filebased.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c82a8cd4a463b225eae44417c2fce0af18755fc GIT binary patch literal 5869 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 BO8Ni* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/backends/__pycache__/locmem.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/backends/__pycache__/locmem.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51baecac841ba5dedc782de057eb03995d096760 GIT binary patch literal 4271 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 akjm6-Fp++z^qN&e`c?buhTdo`zWBczYS6g= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/cache/backends/__pycache__/redis.cpython-310.pyc b/venv/Lib/site-packages/django/core/cache/backends/__pycache__/redis.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d22b0e152452a2f1ec4c6548ac44becc397589c GIT binary patch literal 8562 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 MEMCACHE_MAX_KEY_LENGTH: + yield ( + "Cache key will cause errors if used with memcached: %r " + "(longer than %s)" % (key, MEMCACHE_MAX_KEY_LENGTH) + ) + for char in key: + if ord(char) < 33 or ord(char) == 127: + yield ( + "Cache key contains characters that will cause errors if " + "used with memcached: %r" % key + ) + break diff --git a/venv/Lib/site-packages/django/core/cache/backends/db.py b/venv/Lib/site-packages/django/core/cache/backends/db.py new file mode 100644 index 000000000..c6bdb4570 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/db.py @@ -0,0 +1,285 @@ +"Database cache backend." +import base64 +import pickle +from datetime import datetime + +from django.conf import settings +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.db import DatabaseError, connections, models, router, transaction +from django.utils import timezone + + +class Options: + """A class that will quack like a Django model _meta class. + + This allows cache operations to be controlled by the router + """ + + def __init__(self, table): + self.db_table = table + self.app_label = "django_cache" + self.model_name = "cacheentry" + self.verbose_name = "cache entry" + self.verbose_name_plural = "cache entries" + self.object_name = "CacheEntry" + self.abstract = False + self.managed = True + self.proxy = False + self.swapped = False + + +class BaseDatabaseCache(BaseCache): + def __init__(self, table, params): + super().__init__(params) + self._table = table + + class CacheEntry: + _meta = Options(table) + + self.cache_model_class = CacheEntry + + +class DatabaseCache(BaseDatabaseCache): + + # This class uses cursors provided by the database connection. This means + # it reads expiration values as aware or naive datetimes, depending on the + # value of USE_TZ and whether the database supports time zones. The ORM's + # conversion and adaptation infrastructure is then used to avoid comparing + # aware and naive datetimes accidentally. + + pickle_protocol = pickle.HIGHEST_PROTOCOL + + def get(self, key, default=None, version=None): + return self.get_many([key], version).get(key, default) + + def get_many(self, keys, version=None): + if not keys: + return {} + + key_map = { + self.make_and_validate_key(key, version=version): key for key in keys + } + + db = router.db_for_read(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + table = quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute( + "SELECT %s, %s, %s FROM %s WHERE %s IN (%s)" + % ( + quote_name("cache_key"), + quote_name("value"), + quote_name("expires"), + table, + quote_name("cache_key"), + ", ".join(["%s"] * len(key_map)), + ), + list(key_map), + ) + rows = cursor.fetchall() + + result = {} + expired_keys = [] + expression = models.Expression(output_field=models.DateTimeField()) + converters = connection.ops.get_db_converters( + expression + ) + expression.get_db_converters(connection) + for key, value, expires in rows: + for converter in converters: + expires = converter(expires, expression, connection) + if expires < timezone.now(): + expired_keys.append(key) + else: + value = connection.ops.process_clob(value) + value = pickle.loads(base64.b64decode(value.encode())) + result[key_map.get(key)] = value + self._base_delete_many(expired_keys) + return result + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + self._base_set("set", key, value, timeout) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return self._base_set("add", key, value, timeout) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return self._base_set("touch", key, None, timeout) + + def _base_set(self, mode, key, value, timeout=DEFAULT_TIMEOUT): + timeout = self.get_backend_timeout(timeout) + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + table = quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute("SELECT COUNT(*) FROM %s" % table) + num = cursor.fetchone()[0] + now = timezone.now() + now = now.replace(microsecond=0) + if timeout is None: + exp = datetime.max + else: + tz = timezone.utc if settings.USE_TZ else None + exp = datetime.fromtimestamp(timeout, tz=tz) + exp = exp.replace(microsecond=0) + if num > self._max_entries: + self._cull(db, cursor, now, num) + pickled = pickle.dumps(value, self.pickle_protocol) + # The DB column is expecting a string, so make sure the value is a + # string, not bytes. Refs #19274. + b64encoded = base64.b64encode(pickled).decode("latin1") + try: + # Note: typecasting for datetimes is needed by some 3rd party + # database backends. All core backends work without typecasting, + # so be careful about changes here - test suite will NOT pick + # regressions. + with transaction.atomic(using=db): + cursor.execute( + "SELECT %s, %s FROM %s WHERE %s = %%s" + % ( + quote_name("cache_key"), + quote_name("expires"), + table, + quote_name("cache_key"), + ), + [key], + ) + result = cursor.fetchone() + + if result: + current_expires = result[1] + expression = models.Expression( + output_field=models.DateTimeField() + ) + for converter in connection.ops.get_db_converters( + expression + ) + expression.get_db_converters(connection): + current_expires = converter( + current_expires, expression, connection + ) + + exp = connection.ops.adapt_datetimefield_value(exp) + if result and mode == "touch": + cursor.execute( + "UPDATE %s SET %s = %%s WHERE %s = %%s" + % (table, quote_name("expires"), quote_name("cache_key")), + [exp, key], + ) + elif result and ( + mode == "set" or (mode == "add" and current_expires < now) + ): + cursor.execute( + "UPDATE %s SET %s = %%s, %s = %%s WHERE %s = %%s" + % ( + table, + quote_name("value"), + quote_name("expires"), + quote_name("cache_key"), + ), + [b64encoded, exp, key], + ) + elif mode != "touch": + cursor.execute( + "INSERT INTO %s (%s, %s, %s) VALUES (%%s, %%s, %%s)" + % ( + table, + quote_name("cache_key"), + quote_name("value"), + quote_name("expires"), + ), + [key, b64encoded, exp], + ) + else: + return False # touch failed. + except DatabaseError: + # To be threadsafe, updates/inserts are allowed to fail silently + return False + else: + return True + + def delete(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + return self._base_delete_many([key]) + + def delete_many(self, keys, version=None): + keys = [self.make_and_validate_key(key, version=version) for key in keys] + self._base_delete_many(keys) + + def _base_delete_many(self, keys): + if not keys: + return False + + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + table = quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute( + "DELETE FROM %s WHERE %s IN (%s)" + % ( + table, + quote_name("cache_key"), + ", ".join(["%s"] * len(keys)), + ), + keys, + ) + return bool(cursor.rowcount) + + def has_key(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + + db = router.db_for_read(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + + now = timezone.now().replace(microsecond=0, tzinfo=None) + + with connection.cursor() as cursor: + cursor.execute( + "SELECT %s FROM %s WHERE %s = %%s and expires > %%s" + % ( + quote_name("cache_key"), + quote_name(self._table), + quote_name("cache_key"), + ), + [key, connection.ops.adapt_datetimefield_value(now)], + ) + return cursor.fetchone() is not None + + def _cull(self, db, cursor, now, num): + if self._cull_frequency == 0: + self.clear() + else: + connection = connections[db] + table = connection.ops.quote_name(self._table) + cursor.execute( + "DELETE FROM %s WHERE expires < %%s" % table, + [connection.ops.adapt_datetimefield_value(now)], + ) + deleted_count = cursor.rowcount + remaining_num = num - deleted_count + if remaining_num > self._max_entries: + cull_num = remaining_num // self._cull_frequency + cursor.execute( + connection.ops.cache_key_culling_sql() % table, [cull_num] + ) + last_cache_key = cursor.fetchone() + if last_cache_key: + cursor.execute( + "DELETE FROM %s WHERE cache_key < %%s" % table, + [last_cache_key[0]], + ) + + def clear(self): + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + table = connection.ops.quote_name(self._table) + with connection.cursor() as cursor: + cursor.execute("DELETE FROM %s" % table) diff --git a/venv/Lib/site-packages/django/core/cache/backends/dummy.py b/venv/Lib/site-packages/django/core/cache/backends/dummy.py new file mode 100644 index 000000000..7b4d33931 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/dummy.py @@ -0,0 +1,34 @@ +"Dummy cache backend" + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache + + +class DummyCache(BaseCache): + def __init__(self, host, *args, **kwargs): + super().__init__(*args, **kwargs) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + self.make_and_validate_key(key, version=version) + return True + + def get(self, key, default=None, version=None): + self.make_and_validate_key(key, version=version) + return default + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + self.make_and_validate_key(key, version=version) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + self.make_and_validate_key(key, version=version) + return False + + def delete(self, key, version=None): + self.make_and_validate_key(key, version=version) + return False + + def has_key(self, key, version=None): + self.make_and_validate_key(key, version=version) + return False + + def clear(self): + pass diff --git a/venv/Lib/site-packages/django/core/cache/backends/filebased.py b/venv/Lib/site-packages/django/core/cache/backends/filebased.py new file mode 100644 index 000000000..6484b44f1 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/filebased.py @@ -0,0 +1,164 @@ +"File-based cache backend" +import glob +import hashlib +import os +import pickle +import random +import tempfile +import time +import zlib + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.core.files import locks +from django.core.files.move import file_move_safe + + +class FileBasedCache(BaseCache): + cache_suffix = ".djcache" + pickle_protocol = pickle.HIGHEST_PROTOCOL + + def __init__(self, dir, params): + super().__init__(params) + self._dir = os.path.abspath(dir) + self._createdir() + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + if self.has_key(key, version): + return False + self.set(key, value, timeout, version) + return True + + def get(self, key, default=None, version=None): + fname = self._key_to_file(key, version) + try: + with open(fname, "rb") as f: + if not self._is_expired(f): + return pickle.loads(zlib.decompress(f.read())) + except FileNotFoundError: + pass + return default + + def _write_content(self, file, timeout, value): + expiry = self.get_backend_timeout(timeout) + file.write(pickle.dumps(expiry, self.pickle_protocol)) + file.write(zlib.compress(pickle.dumps(value, self.pickle_protocol))) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + self._createdir() # Cache dir can be deleted at any time. + fname = self._key_to_file(key, version) + self._cull() # make some room if necessary + fd, tmp_path = tempfile.mkstemp(dir=self._dir) + renamed = False + try: + with open(fd, "wb") as f: + self._write_content(f, timeout, value) + file_move_safe(tmp_path, fname, allow_overwrite=True) + renamed = True + finally: + if not renamed: + os.remove(tmp_path) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + try: + with open(self._key_to_file(key, version), "r+b") as f: + try: + locks.lock(f, locks.LOCK_EX) + if self._is_expired(f): + return False + else: + previous_value = pickle.loads(zlib.decompress(f.read())) + f.seek(0) + self._write_content(f, timeout, previous_value) + return True + finally: + locks.unlock(f) + except FileNotFoundError: + return False + + def delete(self, key, version=None): + return self._delete(self._key_to_file(key, version)) + + def _delete(self, fname): + if not fname.startswith(self._dir) or not os.path.exists(fname): + return False + try: + os.remove(fname) + except FileNotFoundError: + # The file may have been removed by another process. + return False + return True + + def has_key(self, key, version=None): + fname = self._key_to_file(key, version) + if os.path.exists(fname): + with open(fname, "rb") as f: + return not self._is_expired(f) + return False + + def _cull(self): + """ + Remove random cache entries if max_entries is reached at a ratio + of num_entries / cull_frequency. A value of 0 for CULL_FREQUENCY means + that the entire cache will be purged. + """ + filelist = self._list_cache_files() + num_entries = len(filelist) + if num_entries < self._max_entries: + return # return early if no culling is required + if self._cull_frequency == 0: + return self.clear() # Clear the cache when CULL_FREQUENCY = 0 + # Delete a random selection of entries + filelist = random.sample(filelist, int(num_entries / self._cull_frequency)) + for fname in filelist: + self._delete(fname) + + def _createdir(self): + # Set the umask because os.makedirs() doesn't apply the "mode" argument + # to intermediate-level directories. + old_umask = os.umask(0o077) + try: + os.makedirs(self._dir, 0o700, exist_ok=True) + finally: + os.umask(old_umask) + + def _key_to_file(self, key, version=None): + """ + Convert a key into a cache file path. Basically this is the + root cache path joined with the md5sum of the key and a suffix. + """ + key = self.make_and_validate_key(key, version=version) + return os.path.join( + self._dir, + "".join([hashlib.md5(key.encode()).hexdigest(), self.cache_suffix]), + ) + + def clear(self): + """ + Remove all the cache files. + """ + for fname in self._list_cache_files(): + self._delete(fname) + + def _is_expired(self, f): + """ + Take an open cache file `f` and delete it if it's expired. + """ + try: + exp = pickle.load(f) + except EOFError: + exp = 0 # An empty file is considered expired. + if exp is not None and exp < time.time(): + f.close() # On Windows a file has to be closed before deleting + self._delete(f.name) + return True + return False + + def _list_cache_files(self): + """ + Get a list of paths to all the cache files. These are all the files + in the root cache dir that end on the cache_suffix. + """ + return [ + os.path.join(self._dir, fname) + for fname in glob.glob1(self._dir, "*%s" % self.cache_suffix) + ] diff --git a/venv/Lib/site-packages/django/core/cache/backends/locmem.py b/venv/Lib/site-packages/django/core/cache/backends/locmem.py new file mode 100644 index 000000000..cbc8dba51 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/locmem.py @@ -0,0 +1,117 @@ +"Thread-safe in-memory cache backend." +import pickle +import time +from collections import OrderedDict +from threading import Lock + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache + +# Global in-memory store of cache data. Keyed by name, to provide +# multiple named local memory caches. +_caches = {} +_expire_info = {} +_locks = {} + + +class LocMemCache(BaseCache): + pickle_protocol = pickle.HIGHEST_PROTOCOL + + def __init__(self, name, params): + super().__init__(params) + self._cache = _caches.setdefault(name, OrderedDict()) + self._expire_info = _expire_info.setdefault(name, {}) + self._lock = _locks.setdefault(name, Lock()) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + pickled = pickle.dumps(value, self.pickle_protocol) + with self._lock: + if self._has_expired(key): + self._set(key, pickled, timeout) + return True + return False + + def get(self, key, default=None, version=None): + key = self.make_and_validate_key(key, version=version) + with self._lock: + if self._has_expired(key): + self._delete(key) + return default + pickled = self._cache[key] + self._cache.move_to_end(key, last=False) + return pickle.loads(pickled) + + def _set(self, key, value, timeout=DEFAULT_TIMEOUT): + if len(self._cache) >= self._max_entries: + self._cull() + self._cache[key] = value + self._cache.move_to_end(key, last=False) + self._expire_info[key] = self.get_backend_timeout(timeout) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + pickled = pickle.dumps(value, self.pickle_protocol) + with self._lock: + self._set(key, pickled, timeout) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + with self._lock: + if self._has_expired(key): + return False + self._expire_info[key] = self.get_backend_timeout(timeout) + return True + + def incr(self, key, delta=1, version=None): + key = self.make_and_validate_key(key, version=version) + with self._lock: + if self._has_expired(key): + self._delete(key) + raise ValueError("Key '%s' not found" % key) + pickled = self._cache[key] + value = pickle.loads(pickled) + new_value = value + delta + pickled = pickle.dumps(new_value, self.pickle_protocol) + self._cache[key] = pickled + self._cache.move_to_end(key, last=False) + return new_value + + def has_key(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + with self._lock: + if self._has_expired(key): + self._delete(key) + return False + return True + + def _has_expired(self, key): + exp = self._expire_info.get(key, -1) + return exp is not None and exp <= time.time() + + def _cull(self): + if self._cull_frequency == 0: + self._cache.clear() + self._expire_info.clear() + else: + count = len(self._cache) // self._cull_frequency + for i in range(count): + key, _ = self._cache.popitem() + del self._expire_info[key] + + def _delete(self, key): + try: + del self._cache[key] + del self._expire_info[key] + except KeyError: + return False + return True + + def delete(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + with self._lock: + return self._delete(key) + + def clear(self): + with self._lock: + self._cache.clear() + self._expire_info.clear() diff --git a/venv/Lib/site-packages/django/core/cache/backends/memcached.py b/venv/Lib/site-packages/django/core/cache/backends/memcached.py new file mode 100644 index 000000000..25753806a --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/memcached.py @@ -0,0 +1,232 @@ +"Memcached cache backend" + +import pickle +import re +import time +import warnings + +from django.core.cache.backends.base import ( + DEFAULT_TIMEOUT, + BaseCache, + InvalidCacheKey, + memcache_key_warnings, +) +from django.utils.deprecation import RemovedInDjango41Warning +from django.utils.functional import cached_property + + +class BaseMemcachedCache(BaseCache): + def __init__(self, server, params, library, value_not_found_exception): + super().__init__(params) + if isinstance(server, str): + self._servers = re.split("[;,]", server) + else: + self._servers = server + + # Exception type raised by the underlying client library for a + # nonexistent key. + self.LibraryValueNotFoundException = value_not_found_exception + + self._lib = library + self._class = library.Client + self._options = params.get("OPTIONS") or {} + + @property + def client_servers(self): + return self._servers + + @cached_property + def _cache(self): + """ + Implement transparent thread-safe access to a memcached client. + """ + return self._class(self.client_servers, **self._options) + + def get_backend_timeout(self, timeout=DEFAULT_TIMEOUT): + """ + Memcached deals with long (> 30 days) timeouts in a special + way. Call this function to obtain a safe value for your timeout. + """ + if timeout == DEFAULT_TIMEOUT: + timeout = self.default_timeout + + if timeout is None: + # Using 0 in memcache sets a non-expiring timeout. + return 0 + elif int(timeout) == 0: + # Other cache backends treat 0 as set-and-expire. To achieve this + # in memcache backends, a negative timeout must be passed. + timeout = -1 + + if timeout > 2592000: # 60*60*24*30, 30 days + # See https://github.com/memcached/memcached/wiki/Programming#expiration + # "Expiration times can be set from 0, meaning "never expire", to + # 30 days. Any time higher than 30 days is interpreted as a Unix + # timestamp date. If you want to expire an object on January 1st of + # next year, this is how you do that." + # + # This means that we have to switch to absolute timestamps. + timeout += int(time.time()) + return int(timeout) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.add(key, value, self.get_backend_timeout(timeout)) + + def get(self, key, default=None, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.get(key, default) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + if not self._cache.set(key, value, self.get_backend_timeout(timeout)): + # Make sure the key doesn't keep its old value in case of failure + # to set (memcached's 1MB limit). + self._cache.delete(key) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return bool(self._cache.touch(key, self.get_backend_timeout(timeout))) + + def delete(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + return bool(self._cache.delete(key)) + + def get_many(self, keys, version=None): + key_map = { + self.make_and_validate_key(key, version=version): key for key in keys + } + ret = self._cache.get_multi(key_map.keys()) + return {key_map[k]: v for k, v in ret.items()} + + def close(self, **kwargs): + # Many clients don't clean up connections properly. + self._cache.disconnect_all() + + def incr(self, key, delta=1, version=None): + key = self.make_and_validate_key(key, version=version) + try: + # Memcached doesn't support negative delta. + if delta < 0: + val = self._cache.decr(key, -delta) + else: + val = self._cache.incr(key, delta) + # Normalize an exception raised by the underlying client library to + # ValueError in the event of a nonexistent key when calling + # incr()/decr(). + except self.LibraryValueNotFoundException: + val = None + if val is None: + raise ValueError("Key '%s' not found" % key) + return val + + def set_many(self, data, timeout=DEFAULT_TIMEOUT, version=None): + safe_data = {} + original_keys = {} + for key, value in data.items(): + safe_key = self.make_and_validate_key(key, version=version) + safe_data[safe_key] = value + original_keys[safe_key] = key + failed_keys = self._cache.set_multi( + safe_data, self.get_backend_timeout(timeout) + ) + return [original_keys[k] for k in failed_keys] + + def delete_many(self, keys, version=None): + keys = [self.make_and_validate_key(key, version=version) for key in keys] + self._cache.delete_multi(keys) + + def clear(self): + self._cache.flush_all() + + def validate_key(self, key): + for warning in memcache_key_warnings(key): + raise InvalidCacheKey(warning) + + +class MemcachedCache(BaseMemcachedCache): + "An implementation of a cache binding using python-memcached" + + # python-memcached doesn't support default values in get(). + # https://github.com/linsomniac/python-memcached/issues/159 + _missing_key = None + + def __init__(self, server, params): + warnings.warn( + "MemcachedCache is deprecated in favor of PyMemcacheCache and " + "PyLibMCCache.", + RemovedInDjango41Warning, + stacklevel=2, + ) + # python-memcached ≥ 1.45 returns None for a nonexistent key in + # incr/decr(), python-memcached < 1.45 raises ValueError. + import memcache + + super().__init__( + server, params, library=memcache, value_not_found_exception=ValueError + ) + self._options = {"pickleProtocol": pickle.HIGHEST_PROTOCOL, **self._options} + + def get(self, key, default=None, version=None): + key = self.make_and_validate_key(key, version=version) + val = self._cache.get(key) + # python-memcached doesn't support default values in get(). + # https://github.com/linsomniac/python-memcached/issues/159 + # Remove this method if that issue is fixed. + if val is None: + return default + return val + + def delete(self, key, version=None): + # python-memcached's delete() returns True when key doesn't exist. + # https://github.com/linsomniac/python-memcached/issues/170 + # Call _deletetouch() without the NOT_FOUND in expected results. + key = self.make_and_validate_key(key, version=version) + return bool(self._cache._deletetouch([b"DELETED"], "delete", key)) + + +class PyLibMCCache(BaseMemcachedCache): + "An implementation of a cache binding using pylibmc" + + def __init__(self, server, params): + import pylibmc + + super().__init__( + server, params, library=pylibmc, value_not_found_exception=pylibmc.NotFound + ) + + @property + def client_servers(self): + output = [] + for server in self._servers: + output.append(server[5:] if server.startswith("unix:") else server) + return output + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + if timeout == 0: + return self._cache.delete(key) + return self._cache.touch(key, self.get_backend_timeout(timeout)) + + def close(self, **kwargs): + # libmemcached manages its own connections. Don't call disconnect_all() + # as it resets the failover state and creates unnecessary reconnects. + pass + + +class PyMemcacheCache(BaseMemcachedCache): + """An implementation of a cache binding using pymemcache.""" + + def __init__(self, server, params): + import pymemcache.serde + + super().__init__( + server, params, library=pymemcache, value_not_found_exception=KeyError + ) + self._class = self._lib.HashClient + self._options = { + "allow_unicode_keys": True, + "default_noreply": False, + "serde": pymemcache.serde.pickle_serde, + **self._options, + } diff --git a/venv/Lib/site-packages/django/core/cache/backends/redis.py b/venv/Lib/site-packages/django/core/cache/backends/redis.py new file mode 100644 index 000000000..fac6a7c23 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/backends/redis.py @@ -0,0 +1,234 @@ +"""Redis cache backend.""" + +import random +import re + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.core.serializers.base import PickleSerializer +from django.utils.functional import cached_property +from django.utils.module_loading import import_string + + +class RedisSerializer(PickleSerializer): + """ + Similar to PickSerializer, except integers are serialized as native Redis + integers for better incr() and decr() atomicity. + """ + + def dumps(self, obj): + # Only skip pickling for integers, a int subclasses as bool should be + # pickled. + if type(obj) is int: + return obj + return super().dumps(obj) + + def loads(self, data): + try: + return int(data) + except ValueError: + return super().loads(data) + + +class RedisCacheClient: + def __init__( + self, + servers, + serializer=None, + pool_class=None, + parser_class=None, + **options, + ): + import redis + + self._lib = redis + self._servers = servers + self._pools = {} + + self._client = self._lib.Redis + + if isinstance(pool_class, str): + pool_class = import_string(pool_class) + self._pool_class = pool_class or self._lib.ConnectionPool + + if isinstance(serializer, str): + serializer = import_string(serializer) + if callable(serializer): + serializer = serializer() + self._serializer = serializer or RedisSerializer() + + if isinstance(parser_class, str): + parser_class = import_string(parser_class) + parser_class = parser_class or self._lib.connection.DefaultParser + + self._pool_options = {"parser_class": parser_class, **options} + + def _get_connection_pool_index(self, write): + # Write to the first server. Read from other servers if there are more, + # otherwise read from the first server. + if write or len(self._servers) == 1: + return 0 + return random.randint(1, len(self._servers) - 1) + + def _get_connection_pool(self, write): + index = self._get_connection_pool_index(write) + if index not in self._pools: + self._pools[index] = self._pool_class.from_url( + self._servers[index], + **self._pool_options, + ) + return self._pools[index] + + def get_client(self, key=None, *, write=False): + # key is used so that the method signature remains the same and custom + # cache client can be implemented which might require the key to select + # the server, e.g. sharding. + pool = self._get_connection_pool(write) + return self._client(connection_pool=pool) + + def add(self, key, value, timeout): + client = self.get_client(key, write=True) + value = self._serializer.dumps(value) + + if timeout == 0: + if ret := bool(client.set(key, value, nx=True)): + client.delete(key) + return ret + else: + return bool(client.set(key, value, ex=timeout, nx=True)) + + def get(self, key, default): + client = self.get_client(key) + value = client.get(key) + return default if value is None else self._serializer.loads(value) + + def set(self, key, value, timeout): + client = self.get_client(key, write=True) + value = self._serializer.dumps(value) + if timeout == 0: + client.delete(key) + else: + client.set(key, value, ex=timeout) + + def touch(self, key, timeout): + client = self.get_client(key, write=True) + if timeout is None: + return bool(client.persist(key)) + else: + return bool(client.expire(key, timeout)) + + def delete(self, key): + client = self.get_client(key, write=True) + return bool(client.delete(key)) + + def get_many(self, keys): + client = self.get_client(None) + ret = client.mget(keys) + return { + k: self._serializer.loads(v) for k, v in zip(keys, ret) if v is not None + } + + def has_key(self, key): + client = self.get_client(key) + return bool(client.exists(key)) + + def incr(self, key, delta): + client = self.get_client(key) + if not client.exists(key): + raise ValueError("Key '%s' not found." % key) + return client.incr(key, delta) + + def set_many(self, data, timeout): + client = self.get_client(None, write=True) + pipeline = client.pipeline() + pipeline.mset({k: self._serializer.dumps(v) for k, v in data.items()}) + + if timeout is not None: + # Setting timeout for each key as redis does not support timeout + # with mset(). + for key in data: + pipeline.expire(key, timeout) + pipeline.execute() + + def delete_many(self, keys): + client = self.get_client(None, write=True) + client.delete(*keys) + + def clear(self): + client = self.get_client(None, write=True) + return bool(client.flushdb()) + + +class RedisCache(BaseCache): + def __init__(self, server, params): + super().__init__(params) + if isinstance(server, str): + self._servers = re.split("[;,]", server) + else: + self._servers = server + + self._class = RedisCacheClient + self._options = params.get("OPTIONS", {}) + + @cached_property + def _cache(self): + return self._class(self._servers, **self._options) + + def get_backend_timeout(self, timeout=DEFAULT_TIMEOUT): + if timeout == DEFAULT_TIMEOUT: + timeout = self.default_timeout + # The key will be made persistent if None used as a timeout. + # Non-positive values will cause the key to be deleted. + return None if timeout is None else max(0, int(timeout)) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.add(key, value, self.get_backend_timeout(timeout)) + + def get(self, key, default=None, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.get(key, default) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + self._cache.set(key, value, self.get_backend_timeout(timeout)) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.touch(key, self.get_backend_timeout(timeout)) + + def delete(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.delete(key) + + def get_many(self, keys, version=None): + key_map = { + self.make_and_validate_key(key, version=version): key for key in keys + } + ret = self._cache.get_many(key_map.keys()) + return {key_map[k]: v for k, v in ret.items()} + + def has_key(self, key, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.has_key(key) + + def incr(self, key, delta=1, version=None): + key = self.make_and_validate_key(key, version=version) + return self._cache.incr(key, delta) + + def set_many(self, data, timeout=DEFAULT_TIMEOUT, version=None): + safe_data = {} + for key, value in data.items(): + key = self.make_and_validate_key(key, version=version) + safe_data[key] = value + self._cache.set_many(safe_data, self.get_backend_timeout(timeout)) + return [] + + def delete_many(self, keys, version=None): + safe_keys = [] + for key in keys: + key = self.make_and_validate_key(key, version=version) + safe_keys.append(key) + self._cache.delete_many(safe_keys) + + def clear(self): + return self._cache.clear() diff --git a/venv/Lib/site-packages/django/core/cache/utils.py b/venv/Lib/site-packages/django/core/cache/utils.py new file mode 100644 index 000000000..70dc81892 --- /dev/null +++ b/venv/Lib/site-packages/django/core/cache/utils.py @@ -0,0 +1,12 @@ +import hashlib + +TEMPLATE_FRAGMENT_KEY_TEMPLATE = "template.cache.%s.%s" + + +def make_template_fragment_key(fragment_name, vary_on=None): + hasher = hashlib.md5() + if vary_on is not None: + for arg in vary_on: + hasher.update(str(arg).encode()) + hasher.update(b":") + return TEMPLATE_FRAGMENT_KEY_TEMPLATE % (fragment_name, hasher.hexdigest()) diff --git a/venv/Lib/site-packages/django/core/checks/__init__.py b/venv/Lib/site-packages/django/core/checks/__init__.py new file mode 100644 index 000000000..998ab9dee --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/__init__.py @@ -0,0 +1,47 @@ +from .messages import ( + CRITICAL, + DEBUG, + ERROR, + INFO, + WARNING, + CheckMessage, + Critical, + Debug, + Error, + Info, + Warning, +) +from .registry import Tags, register, run_checks, tag_exists + +# Import these to force registration of checks +import django.core.checks.async_checks # NOQA isort:skip +import django.core.checks.caches # NOQA isort:skip +import django.core.checks.compatibility.django_4_0 # NOQA isort:skip +import django.core.checks.database # NOQA isort:skip +import django.core.checks.files # NOQA isort:skip +import django.core.checks.model_checks # NOQA isort:skip +import django.core.checks.security.base # NOQA isort:skip +import django.core.checks.security.csrf # NOQA isort:skip +import django.core.checks.security.sessions # NOQA isort:skip +import django.core.checks.templates # NOQA isort:skip +import django.core.checks.translation # NOQA isort:skip +import django.core.checks.urls # NOQA isort:skip + + +__all__ = [ + "CheckMessage", + "Debug", + "Info", + "Warning", + "Error", + "Critical", + "DEBUG", + "INFO", + "WARNING", + "ERROR", + "CRITICAL", + "register", + "run_checks", + "tag_exists", + "Tags", +] diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..607aaa087c6a24028d4ec951db3fc5982740d61a GIT binary patch literal 1118 zcmaJ=%Wl&^6txp4ar0<~Y|w^(Ausvp3H6?beG5VC5^=V*NIx%ZCGIPP?s23|iue4l=`4C9Ah{Cib!@e&{T z4Z$~jGc>pfCa*w+SE0%+uy_q>ybg8VfCjh0<_oaEo6zJfXqj453ER8_9li*QybE34 zgC4%G`c`-cmNLFu@V$cX7rb2XO2MlIuNC~D;Prwx3VsMnf#KIao3QCy?~H!^+Qjku zt<)Y)MyI3U-f>#nKX`R^l-3R=laonmjmC#3Y2*FgWIP%lrS0KI>RrB}Qj&n8NHE1b z5~7GslK@3R!~#Xpd5j_=A{GUGE45BZAX8h=fJsF~+7wCTdb*TMn~DT3{e%H|jk6fz zepfV*#e#;GhPDQ6hp;tNHPkfJHK03&&~}JL4P6aA4IPC3R%-KnT$v|j>P+*uMAk2> zoi)u`{pox&x0q)Y|LX!<{soDGc;Ll?4)Q$>h@3~>%?9gv0<4uJdIS{`o|J`RJ|l`v zS;*9UkSDmi?o(JVN%n~%Qz9v>mITjPh&{^YM7@nMpw=;n>vyyx;-P_B_4F?V@s}-xw+TA$WtXCdyP|6Xm zJ@Er@;u`0LQ8+Td z5W^V?5F^aV@QMUvk4P1;kVJ>Sh@0J7&?s8}0u_kNX61KzIpU_7fG#Q>CfA`Mh zLE}493;9mf7%C-I3E`R0=jALs6$DfR8dfo4W$H5PETSGQ-zVV+t1^Gn-owlQD8mTOz(6i$?-4~6?yqF%4n&eHW5B6qevi+D#oK>QTg zK8j}EY2Ffyi{^4)h^RT6wfkL`O40lvmN)uq&Fe82^3qM7ZL+p(?yz*Hxe%{4MJ(B+ zUew--I!rX_W|Vfa%k7M_%aF46mbg5;SMQ#B$?UWsD^Wj@Eu(0~Vi-}MGdc#52nU2u z9Bg5(FS=UCp+i|O$?l!VNCk9N82VeBhg@~gfKWV(?tC{W>FnesiuOtaE4RehwgoG) zMfep-_Rzr2EwFof;K)+$NK4x5WRLJya;HfK?!d|IeMh?cUhW*={qg}iz!+^$q@LNc zioFdyu%QAzoU=UeWF_~`p+OnWE6eI05jVD{jCFZ)q_F=M$gV1Mh*okRWHm2=9Qo1JZE>HN z=%*k91R9~XSTBYC$8)pu)2-#DrPZ*qvO2vwKVufERxGa1FU+m9X6Khz_!-FViL`5A zX@p(XX`cY`CCbqqcYt&J4ca1~AV?LV07gCnN`tKjM3Kg%vU-u+0BHL~;q}U>`Drjz z<*5!!+2=ie?KOR}CKd9{pVLA&i;0*&3$xc@{8Gd^fp*KWfc_RS zW&h9dHz>#d;Fv$Jef*othE~1^LV3{2G6IK>9H1N?T-aSdWSOGL``lzJ=*FE585H>{ z*vF(Z$as*jhz2qXpksNzr*j)*>xB)CWE8BicGMRvh@}V?mSzAdON+rH94LHDS+^%A z-{86p>*LDpFd0e73j!(uy(vEy5TlIJHd9st9I0&C?(DeERol*^gO zk{!lJ^)+>7xeX$;S~TYHi}apyfW=r!d0Bg`@S3(62caCMiCHKsjk+v!ht#TU?LmZN z5Q2=`>%i&49EMxUj*>VM$~Nf;fx;7$u%gJO+yG9N_+^yA|9>+a}n%e2gWFj zvzYu|vwfKPuwR3^Air2=_*-z?2^eW!bYYk$pa~OAcoJ>m zeR6<+hRy?d0o?%wm4J$DY2~)Gfr`#-yVBWrbBp40KxO;h0TLI1Hp;z!0 z7J#W3oS0%O8(xyGC~E#HI5dUlnhp3x5UK)C#o@u+bb&#DbBq9fSsQC+f>+!;bNo%c zV|wrHht+E3Uu{cl3N0K!96QUjDu5I`It(s}GTKCZ&>ULD1M0@`(P A?f?J) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/database.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/database.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7327e8f395a67a9cd0ca17075bad1b1f72ce77e7 GIT binary patch literal 576 zcmYjOv2N5r5S>}Cedfrahz7wQxJa&{LMTEa0wmBWBBZel(b~H*>pR)r@))A|`Md zPosqnZ}2-_v(_)uPOuWO_yLi0f+zKXId4p*Xmy0-iL&pX}wc*+=Cn5)eRRMhue8$|36Q6yB%)n!{=qK+m$&O PUWY=49oQA2w~K!POHq#l literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/files.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/files.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..860f63f6452c102c3b3b8758d9a35c64302a722d GIT binary patch literal 726 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/model_checks.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/model_checks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44d4aa533f81f2326ab59494b6b1d628c92da576 GIT binary patch literal 6906 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/registry.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/registry.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..788c3c4628d7eb5c2b6473cf69951d9535709bb2 GIT binary patch literal 3807 zcma)9U2ogS6`dg|ilQaOPO{1FcDJ2&k&U&R$lEV$YotM1?)^U(P=!ygY!S`d~QWG$teJQHpgVHb$mr>beS;CfBI-6)%1?b;Q7rYinF^> z!ZK)MgH*C8f%POo%)%WJ?y0VJD{28BMM=>L)IRJ(O~&I?W`!LF;H8RIn2yFl7Hvmy zl}q8R$^QOZTE3P*`>BGIL;q9J@l6*UF>SH+UbV0>7*H!?9A$ANCo zWRNJRM`==66B(;s=W5~jeiDp??-#D`!`zb?>rLN(HVNWcPu=%<8v4GpA$qco#zE6S zgFul>XqspMEkw4_TtTypW(CbvG}pkK5cw|F(fljiSnq$WgjD^<6QzRw7il;di6m3~ zM^X0GWV`<`k}A9VJDKi^FzY`T$@BhiqwPL!_3k(b_ky8NeZCtc!*nf7rC2Lty(Yyl zQkmTEj`w8^zJ#k*42(l8YFSYJ=buBh_ay+$0pEiu&H%)X*91UxMT47qR>OopyJ7NW zUgyqh3cy<74emnChT0NuLah$97H>n%;U>W7YSG$2fIOZpIYhKp57rGR8&K4BFc~={ zIq~W2zro2SIibCdS(r*>#Y(wxAqDr#P!ua%jN^14!#ZmMx>!oYgR?})_h4!SLzG0B z?|+D2v%omCNvAg!me;MEdLb^XdN9ZsB}}{e379wJ4Siz_Oim$6&ViMYoE}oSoLl&R z6W-*_w?<9}^mFoOBex(DX7C|QscC|Y+6WT1E!ac}&H}{(hRjF!G9XvLxPXKQSt`4% z44sf{7y(4)e)E~O23sr+wnYpxy@;}%nco&tb*sys?1=dorgqXv%$XFSfXUb=pOg|a zpDRePGn>eS#Q-su4%nAcrVkFU3 zPkqF?-7Xso3F0-HiI(0}n8qNg8QT(iqg&{AY4j{6rOQI^N06_DhRa*3)(U(2_RTGj z1M!ELLs?PlU;ty}kSZsm95D8Z0=|fEyd_5<^v6_QdrNn%!~k16pgBFVb8<{6j6v-6 zroYsAm?J^4(FF2ao-}Mv?7v7Q08tK0g<`7}G&)^ix8_)6p%`Wf=c)YZjf}TENmAGu?Y}8p0uQzpG~f0dU|IC=rWJt^C}r`8QXw) z`s_wtgUs5~%{lrWPZ9?Eo{sq^0avXGM&?1z~T|0 z@R%ylyT2OGjLkB%9aDY)zBLK@4w6#v{%^W-84KwCZ))uOW(+9;@^5 z)cOjlR0Xyod&#C*h-b5OtilCm%vLJ##F2=t!WJ(xk?>BV#O9B&1Nl(A7bRgl;ljUk zsA+1zKrK=7V;q42^xQFh#>FJ40ORe&>N;@g+jbmp{hJfkz-f%KYCh%%A^DD~kC0tl3$#}tWn3}DrAcnRM) zg~EdJ^CuYe)J7HECEpO>n!bqWtw|l=yWn(j2aS6}k%*ULd4GWO;3d-dqeX1$o=(>m zL%SH8a~Q5>=vXCpa8*TXAk)$O`Y(S9Z5^Y8juu^=_qmkHUqC;HqVV!+P)InnA;r@V zzHJQ);lvbUITy~HAkPng;j)z*M{x4&f}+9cf^63*w+aiXtB(NrGZ?K;1P}o&_d4Yo zwii~5yV--H~-ivU=ZFK zv9oZ!4=zZJ^4x)w$F+=AJbfT^|90PZ&30X)Pp{J~8u%M5OVe0M%#3%vyqk9?SrjWc zeAE~&68ezzZZ3AgxbnA8DFdjcde*|J6y)Nn&*C&+YvJ50f5hCUxM2Lz(Iicva@%ab LV}D~)z#9E8XU3>h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/templates.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/templates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..243990787d22d876aca562aaa33061c54c085d00 GIT binary patch literal 1458 zcmaJ>Uys{F5Z_(@iQ`;OEgXLYQe}ih2&lPhA5W(f6&IjtxkkN!M3iDV-aVglu^o0d zfm|I4l)mr)pCNhVE3L#6PyGPARH9+l$)(3tVy&57k9THve!p2~)vAkN{Qdo(z28lQ z{?ad32iVYOAmR)ZMHCNEN6%z{6Vf3VQG=QTBQZN>Vs)&5obI68{>sUF0Ng1b+c#gqRH?s1l65ce{ymu*b&`HE{clyR0e zF1960hJ!#d(P-}N-GL%VOfMePgyc|&AD{YhIt~UgEwa5j)jF@2jD+-h%nQ7gM{(RJ zll$J&srT{IY5jVNyP?MBau8S;AP+#qEl?6zqvRQqxKEA%^%>?>X+(f?gaB*f_%(N1 zyK4Ca)GsJUPi{&rBZaijOACOUiXWb3wgW6vpx%D zcg)gp_hH=YideGS!yr5lA||@DAEZ&X8)lsChG#517rU>h7*16AAYv)|X~+-X*2U?@ zCqJ8rkaw5v^5Rb6;;;M74~9dZLRNoWN8@0Sh0rvIjZKugsf-|QGvUXmrT$qW7#nEpeXrc6u0dKVTE zni7fn_y|4uXlmrfoKUO@gBi$Lkf|w++?3{wh)<<8x1_zmQ!BUnrMUz4a&FFW-(8U0 z@=H0HS8{8CfoLlyn&@L*h8*hVYdx({eX9V3--HcZW31d*#Ho-$8Zu>ohvpvW&@kOq zMj|3*pJqG>q%!4X$du#zX^=4AS2iHXQd+n9n>yN#j%G9c0}y;mTQrf%DlFHL{a}sk z^;_r1!e1R*Uk;%on8d|9*oDW|vUCmT3(P-+Pf*Q!Fm)=c=4xmo$8>EkU?`PCd%4vV{DFi@{;T;tQDScOaZ_8j&WgP>MW@SktOlhPNWSnW}xF?>nngxeU|rF@i+JtMocGTN7%;p0X! z)|X81Nh3Mamz?G2jAWcot&*AP7vMRWp{c8c)?r*%z+bEjT~qB=E0J38TI9#|wqF;u zEnkLytYODkUlt@>)TDSpQH_;mmZVH%YX9KZRq9Gn50w_Ov-~J&dmH|i@LDq23c28( zAA4cEX4_0#yG)j}y_eZ$zfpBwJ38BN_j0%b zF3;(6R;R0^P9U3D=c>Wq3)fGE5gqNJUY0p9G*gfa9%*R^^)w%%z-x&YZX$k;I~?}Ac@yQNI_@wi7(-4X}`WtVxZR>{s?PTP6Fn3t~dTH&`2ahOZlforjYN$R}rTst|os(d?20zXm< z!1T2+lVg?KVUDftGdT`gz5j(T}&lGk+8wCNIEe2A?C*k(jshFng%5VN~W$ ziCt|i(n8Spgf+yz1UgkBiO%04sS}&m%_ANXf_J(xmbHoLcQS$KiKdRxXWaD zCL^)lOajURaA{#BNjBRpqtnx zB$tqU3?wZK8o=geD#pNLd>nw+0BvgDz1>WBI}!_cJE_ls6iJa5=_G?e8FgN<%n48C P9Jtv$bzPV_oFnvKw=8@q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/__pycache__/urls.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81038c7d085949769b7f1b0392f38921083f8444 GIT binary patch literal 3437 zcmZuz-EJGl72cU$E|)7xmMz$KSvP8_xgr2=iz8itWTa+;v7T-XYN5_E_aXGpHJ z+?8i`Wt(0C1!$nTs4w~k(q-PGPq9F+dX)$0jnUZo&X5!(J4?)PcYe;CbLKnWIqCAU zZ{hjhH~-nSmM!bQ^l|#J@$o5|{wF$N2^L#J)?$p_dCZ4)%f`DcoY)ywT9u*Oa);Gc zb?CJ`W=T)Fd$kD@72!U!CamR)s_>p!t)-Khn()m`U0f1%vHXm+mc@!VhczoFYgWa1 zv*w(*Al5LmDlXo)8kfI^MplEB)y*_dGO6(DX_;kF(%0WJnsds^ZKYCGIy+%sm({OB zm0-5?lev9jKmSw~5o#)nX_QdaRDW|>mt*K$ehg-Jhc<|@`| ziAGks1KHhQ>~PAZ@Zg}+O_N>(3*7xjq3X}p!iuTf?<{ozn_qM`Z?wPCQt9@+T@#2&K( z|2b331)IQ+8N-Y{;repM3jk*B-BH62@Z6K#TRF7(fcg%z*YR~yGLiFMLMHSfeM_a}-g#IAv z1%POfghQ!uE^s zd>>7}jjoS7e&DzHn2mYCg|+V}Ua)`hha4I)MQe>W8+OT?8zoC{ZxqI_`MLCO#)#Bz zIy|`bA;~5%y={%A$m|dj7p8P(>fVggZW!xZ&BfkP>x|XG^{3{NTQF zs_K1GltQCRrp+HR$wece=x@+XNuUpM9rJ%!Ji;8YN~F)N=)srH#{prRo92VWy{7Wq5~T>lT{f9oOP~h4CL&nfq$=!B4>pA@D{l zOwXSm?#jm*VUDi2Q8nOF6lv-@y3${`inKBOX!ZkexgzDJy8VWB7zIhrAJOz>balsP zoVzc*O5K3PH=r?Rz2Vae)|(XZDP9O28JlpmB-jyB!7&@N#5bcz50sAa4aC6fz{hk2 zypKBLx!p(FXjDi4p51?zgZ9FJXe2-$&BBO?A0x9AfM^aglSpRvffo?uCM7g|BSc8u zRne}T1LA{5&<&FrQ5gOlNF_f6ZFEC?29M-?UQwz_i7}*+gnONzG6)Yz50oPEagZv* zCjlj>XgAN~42Prr9rXljhN)Rh=}uz>_7Q_MgB=VQ%hF!3kgWqfNb^`2F2gxsui!w* zUi5grJJiPF9u)+Ej3t!`&CxYFEY~C+S`J`ll%PyP)IfX~WcfiXo7Vd&ymST;@b*i< z1C^8?K~J60y3&SE6wy;zF*+*35@Kl`f9ki?5g(n3qPOsQ2hF4^zY2&l=cVtU=iHvM z8Tjn~&MQSL&p?$#Q#0B84|qW)=7NE)E}I%6``vL^)`c`^gb9idc1 zv4I$TPR2OfqxT4mPshPbelW}lTZsrraa_BOLp?Zkr5~$bKo+iv+-a^4g#mf=HQm)G z7<-7OsodnqIk=&hW^@}nNTJ60a;clfG0IvhUrbVM&8urFo~QM;H9d;h+vHe90!s$~ z)uwDUwc9j-5sjJ4H|{Wpol?udiRiBMZVpqC$MP0AN&g&O9mVil+_O;**1Tn(`B%I( K@2b!0wI2cHwpL{T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/async_checks.py b/venv/Lib/site-packages/django/core/checks/async_checks.py new file mode 100644 index 000000000..a0e01867d --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/async_checks.py @@ -0,0 +1,16 @@ +import os + +from . import Error, Tags, register + +E001 = Error( + "You should not set the DJANGO_ALLOW_ASYNC_UNSAFE environment variable in " + "deployment. This disables async safety protection.", + id="async.E001", +) + + +@register(Tags.async_support, deploy=True) +def check_async_unsafe(app_configs, **kwargs): + if os.environ.get("DJANGO_ALLOW_ASYNC_UNSAFE"): + return [E001] + return [] diff --git a/venv/Lib/site-packages/django/core/checks/caches.py b/venv/Lib/site-packages/django/core/checks/caches.py new file mode 100644 index 000000000..c288a6ff4 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/caches.py @@ -0,0 +1,76 @@ +import pathlib + +from django.conf import settings +from django.core.cache import DEFAULT_CACHE_ALIAS, caches +from django.core.cache.backends.filebased import FileBasedCache + +from . import Error, Tags, Warning, register + +E001 = Error( + "You must define a '%s' cache in your CACHES setting." % DEFAULT_CACHE_ALIAS, + id="caches.E001", +) + + +@register(Tags.caches) +def check_default_cache_is_configured(app_configs, **kwargs): + if DEFAULT_CACHE_ALIAS not in settings.CACHES: + return [E001] + return [] + + +@register(Tags.caches, deploy=True) +def check_cache_location_not_exposed(app_configs, **kwargs): + errors = [] + for name in ("MEDIA_ROOT", "STATIC_ROOT", "STATICFILES_DIRS"): + setting = getattr(settings, name, None) + if not setting: + continue + if name == "STATICFILES_DIRS": + paths = set() + for staticfiles_dir in setting: + if isinstance(staticfiles_dir, (list, tuple)): + _, staticfiles_dir = staticfiles_dir + paths.add(pathlib.Path(staticfiles_dir).resolve()) + else: + paths = {pathlib.Path(setting).resolve()} + for alias in settings.CACHES: + cache = caches[alias] + if not isinstance(cache, FileBasedCache): + continue + cache_path = pathlib.Path(cache._dir).resolve() + if any(path == cache_path for path in paths): + relation = "matches" + elif any(path in cache_path.parents for path in paths): + relation = "is inside" + elif any(cache_path in path.parents for path in paths): + relation = "contains" + else: + continue + errors.append( + Warning( + f"Your '{alias}' cache configuration might expose your cache " + f"or lead to corruption of your data because its LOCATION " + f"{relation} {name}.", + id="caches.W002", + ) + ) + return errors + + +@register(Tags.caches) +def check_file_based_cache_is_absolute(app_configs, **kwargs): + errors = [] + for alias, config in settings.CACHES.items(): + cache = caches[alias] + if not isinstance(cache, FileBasedCache): + continue + if not pathlib.Path(config["LOCATION"]).is_absolute(): + errors.append( + Warning( + f"Your '{alias}' cache LOCATION path is relative. Use an " + f"absolute path instead.", + id="caches.W003", + ) + ) + return errors diff --git a/venv/Lib/site-packages/django/core/checks/compatibility/__init__.py b/venv/Lib/site-packages/django/core/checks/compatibility/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/checks/compatibility/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/compatibility/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5406523b4f9a92aeca88ece63f11f10a2865600 GIT binary patch literal 206 zcmYk0F$%&!5JfkVLWCT|Leq!2l59a+p zQ;iOSfpEOf&$!E1r++-R%-yi>l!&7kdb_(Y-T9}_Z83opqhUDI%o3Jb)diN8VNG^Z z$FL&9cCc%LIktFW z4?MI^Ab}H<;s9eLh;R~;I)RhYfTnKXVkBKjCyfg%sBqt-3mhznMj!bLm$n!Axb#38 zqp}fP+EK`NN_R)=T$l8akD&Cl94RnT$GE~@8?|x4p6B+!1M5cUoES90UG)0)xg+r0 znPI&)C!dIM1erT)NH~IiAfGMCx9*%+0`9??v(;{&eR&EjAF}R*XQP~LwmSEi8A~?f zNg;u$tgg2Ez1`@rcho=J=|(Sm`+NHbeRfTpr3DxUhHJx4lo>P5ARfz9vbzNoJV{R3 z*qEuE#d2MzU~``h3d4qZkqLGOTC6W+JxR+%a*!;`jU7L<9YPwe5@?-yn^C8=)9Ku| zsu3l8sw>5U)&G$z8+31>2!g)h_~1ZCvLl*h+>Bq0>F zpzS!" % ( + self.__class__.__name__, + self.level, + self.msg, + self.hint, + self.obj, + self.id, + ) + + def is_serious(self, level=ERROR): + return self.level >= level + + def is_silenced(self): + from django.conf import settings + + return self.id in settings.SILENCED_SYSTEM_CHECKS + + +class Debug(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(DEBUG, *args, **kwargs) + + +class Info(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(INFO, *args, **kwargs) + + +class Warning(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(WARNING, *args, **kwargs) + + +class Error(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(ERROR, *args, **kwargs) + + +class Critical(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(CRITICAL, *args, **kwargs) diff --git a/venv/Lib/site-packages/django/core/checks/model_checks.py b/venv/Lib/site-packages/django/core/checks/model_checks.py new file mode 100644 index 000000000..7a5bef9b2 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/model_checks.py @@ -0,0 +1,227 @@ +import inspect +import types +from collections import defaultdict +from itertools import chain + +from django.apps import apps +from django.conf import settings +from django.core.checks import Error, Tags, Warning, register + + +@register(Tags.models) +def check_all_models(app_configs=None, **kwargs): + db_table_models = defaultdict(list) + indexes = defaultdict(list) + constraints = defaultdict(list) + errors = [] + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable( + app_config.get_models() for app_config in app_configs + ) + for model in models: + if model._meta.managed and not model._meta.proxy: + db_table_models[model._meta.db_table].append(model._meta.label) + if not inspect.ismethod(model.check): + errors.append( + Error( + "The '%s.check()' class method is currently overridden by %r." + % (model.__name__, model.check), + obj=model, + id="models.E020", + ) + ) + else: + errors.extend(model.check(**kwargs)) + for model_index in model._meta.indexes: + indexes[model_index.name].append(model._meta.label) + for model_constraint in model._meta.constraints: + constraints[model_constraint.name].append(model._meta.label) + if settings.DATABASE_ROUTERS: + error_class, error_id = Warning, "models.W035" + error_hint = ( + "You have configured settings.DATABASE_ROUTERS. Verify that %s " + "are correctly routed to separate databases." + ) + else: + error_class, error_id = Error, "models.E028" + error_hint = None + for db_table, model_labels in db_table_models.items(): + if len(model_labels) != 1: + model_labels_str = ", ".join(model_labels) + errors.append( + error_class( + "db_table '%s' is used by multiple models: %s." + % (db_table, model_labels_str), + obj=db_table, + hint=(error_hint % model_labels_str) if error_hint else None, + id=error_id, + ) + ) + for index_name, model_labels in indexes.items(): + if len(model_labels) > 1: + model_labels = set(model_labels) + errors.append( + Error( + "index name '%s' is not unique %s %s." + % ( + index_name, + "for model" if len(model_labels) == 1 else "among models:", + ", ".join(sorted(model_labels)), + ), + id="models.E029" if len(model_labels) == 1 else "models.E030", + ), + ) + for constraint_name, model_labels in constraints.items(): + if len(model_labels) > 1: + model_labels = set(model_labels) + errors.append( + Error( + "constraint name '%s' is not unique %s %s." + % ( + constraint_name, + "for model" if len(model_labels) == 1 else "among models:", + ", ".join(sorted(model_labels)), + ), + id="models.E031" if len(model_labels) == 1 else "models.E032", + ), + ) + return errors + + +def _check_lazy_references(apps, ignore=None): + """ + Ensure all lazy (i.e. string) model references have been resolved. + + Lazy references are used in various places throughout Django, primarily in + related fields and model signals. Identify those common cases and provide + more helpful error messages for them. + + The ignore parameter is used by StateApps to exclude swappable models from + this check. + """ + pending_models = set(apps._pending_operations) - (ignore or set()) + + # Short circuit if there aren't any errors. + if not pending_models: + return [] + + from django.db.models import signals + + model_signals = { + signal: name + for name, signal in vars(signals).items() + if isinstance(signal, signals.ModelSignal) + } + + def extract_operation(obj): + """ + Take a callable found in Apps._pending_operations and identify the + original callable passed to Apps.lazy_model_operation(). If that + callable was a partial, return the inner, non-partial function and + any arguments and keyword arguments that were supplied with it. + + obj is a callback defined locally in Apps.lazy_model_operation() and + annotated there with a `func` attribute so as to imitate a partial. + """ + operation, args, keywords = obj, [], {} + while hasattr(operation, "func"): + args.extend(getattr(operation, "args", [])) + keywords.update(getattr(operation, "keywords", {})) + operation = operation.func + return operation, args, keywords + + def app_model_error(model_key): + try: + apps.get_app_config(model_key[0]) + model_error = "app '%s' doesn't provide model '%s'" % model_key + except LookupError: + model_error = "app '%s' isn't installed" % model_key[0] + return model_error + + # Here are several functions which return CheckMessage instances for the + # most common usages of lazy operations throughout Django. These functions + # take the model that was being waited on as an (app_label, modelname) + # pair, the original lazy function, and its positional and keyword args as + # determined by extract_operation(). + + def field_error(model_key, func, args, keywords): + error_msg = ( + "The field %(field)s was declared with a lazy reference " + "to '%(model)s', but %(model_error)s." + ) + params = { + "model": ".".join(model_key), + "field": keywords["field"], + "model_error": app_model_error(model_key), + } + return Error(error_msg % params, obj=keywords["field"], id="fields.E307") + + def signal_connect_error(model_key, func, args, keywords): + error_msg = ( + "%(receiver)s was connected to the '%(signal)s' signal with a " + "lazy reference to the sender '%(model)s', but %(model_error)s." + ) + receiver = args[0] + # The receiver is either a function or an instance of class + # defining a `__call__` method. + if isinstance(receiver, types.FunctionType): + description = "The function '%s'" % receiver.__name__ + elif isinstance(receiver, types.MethodType): + description = "Bound method '%s.%s'" % ( + receiver.__self__.__class__.__name__, + receiver.__name__, + ) + else: + description = "An instance of class '%s'" % receiver.__class__.__name__ + signal_name = model_signals.get(func.__self__, "unknown") + params = { + "model": ".".join(model_key), + "receiver": description, + "signal": signal_name, + "model_error": app_model_error(model_key), + } + return Error(error_msg % params, obj=receiver.__module__, id="signals.E001") + + def default_error(model_key, func, args, keywords): + error_msg = ( + "%(op)s contains a lazy reference to %(model)s, but %(model_error)s." + ) + params = { + "op": func, + "model": ".".join(model_key), + "model_error": app_model_error(model_key), + } + return Error(error_msg % params, obj=func, id="models.E022") + + # Maps common uses of lazy operations to corresponding error functions + # defined above. If a key maps to None, no error will be produced. + # default_error() will be used for usages that don't appear in this dict. + known_lazy = { + ("django.db.models.fields.related", "resolve_related_class"): field_error, + ("django.db.models.fields.related", "set_managed"): None, + ("django.dispatch.dispatcher", "connect"): signal_connect_error, + } + + def build_error(model_key, func, args, keywords): + key = (func.__module__, func.__name__) + error_fn = known_lazy.get(key, default_error) + return error_fn(model_key, func, args, keywords) if error_fn else None + + return sorted( + filter( + None, + ( + build_error(model_key, *extract_operation(func)) + for model_key in pending_models + for func in apps._pending_operations[model_key] + ), + ), + key=lambda error: error.msg, + ) + + +@register(Tags.models) +def check_lazy_references(app_configs=None, **kwargs): + return _check_lazy_references(apps) diff --git a/venv/Lib/site-packages/django/core/checks/registry.py b/venv/Lib/site-packages/django/core/checks/registry.py new file mode 100644 index 000000000..f4bdea869 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/registry.py @@ -0,0 +1,117 @@ +from itertools import chain + +from django.utils.inspect import func_accepts_kwargs +from django.utils.itercompat import is_iterable + + +class Tags: + """ + Built-in tags for internal checks. + """ + + admin = "admin" + async_support = "async_support" + caches = "caches" + compatibility = "compatibility" + database = "database" + files = "files" + models = "models" + security = "security" + signals = "signals" + sites = "sites" + staticfiles = "staticfiles" + templates = "templates" + translation = "translation" + urls = "urls" + + +class CheckRegistry: + def __init__(self): + self.registered_checks = set() + self.deployment_checks = set() + + def register(self, check=None, *tags, **kwargs): + """ + Can be used as a function or a decorator. Register given function + `f` labeled with given `tags`. The function should receive **kwargs + and return list of Errors and Warnings. + + Example:: + + registry = CheckRegistry() + @registry.register('mytag', 'anothertag') + def my_check(app_configs, **kwargs): + # ... perform checks and collect `errors` ... + return errors + # or + registry.register(my_check, 'mytag', 'anothertag') + """ + + def inner(check): + if not func_accepts_kwargs(check): + raise TypeError( + "Check functions must accept keyword arguments (**kwargs)." + ) + check.tags = tags + checks = ( + self.deployment_checks + if kwargs.get("deploy") + else self.registered_checks + ) + checks.add(check) + return check + + if callable(check): + return inner(check) + else: + if check: + tags += (check,) + return inner + + def run_checks( + self, + app_configs=None, + tags=None, + include_deployment_checks=False, + databases=None, + ): + """ + Run all registered checks and return list of Errors and Warnings. + """ + errors = [] + checks = self.get_checks(include_deployment_checks) + + if tags is not None: + checks = [check for check in checks if not set(check.tags).isdisjoint(tags)] + + for check in checks: + new_errors = check(app_configs=app_configs, databases=databases) + if not is_iterable(new_errors): + raise TypeError( + "The function %r did not return a list. All functions " + "registered with the checks registry must return a list." % check, + ) + errors.extend(new_errors) + return errors + + def tag_exists(self, tag, include_deployment_checks=False): + return tag in self.tags_available(include_deployment_checks) + + def tags_available(self, deployment_checks=False): + return set( + chain.from_iterable( + check.tags for check in self.get_checks(deployment_checks) + ) + ) + + def get_checks(self, include_deployment_checks=False): + checks = list(self.registered_checks) + if include_deployment_checks: + checks.extend(self.deployment_checks) + return checks + + +registry = CheckRegistry() +register = registry.register +run_checks = registry.run_checks +tag_exists = registry.tag_exists diff --git a/venv/Lib/site-packages/django/core/checks/security/__init__.py b/venv/Lib/site-packages/django/core/checks/security/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/checks/security/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/security/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c84331e14dd7c7faeb4ae31e56f8eabbf44cba3 GIT binary patch literal 201 zcmYk0zY4-I7{pWQAc7C#P_v7Ops0h0C~hB?HvOpSpQPkV3VkGBNpSKRT%1fNJ-FX- zH=Q1jN6hPeeWrcBdi*Q!W$8_!N5;-<5*+T#^z#p&YBhrkp&>Xqq6F4jxEhru*h;%| zDQu)68y$@PU!21?jQ{`u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/security/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/security/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..319bda3d87247773fdaf256b2941b4eada8c3e47 GIT binary patch literal 7646 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/checks/security/__pycache__/sessions.cpython-310.pyc b/venv/Lib/site-packages/django/core/checks/security/__pycache__/sessions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e97e34308931bea345da913b5da1a1fde5ac9bf GIT binary patch literal 2533 zcmcIm%}*Og6yF`M*T&d<6B1I$q^%TLEhZ%7QdLzbxCO4iE?#!47 zi=2p5^^pIeJ@Vi5yi!j+aYntQQqniGUOOOMt5v(w{QQ1zzTSKD=8e5nDxtym$9KQ& zzZ=oC-zE9*Gk`pW#(xDM8qphCQ!nefMi7ZKP%~1FG>x*+jFzLIGf4EcRyL_YO=6zu zBu3(IP&uaf2=IjBam7c0ClwzdDKZB05};3zanMgF{ix!Tz^4>XDn1Q-M)4Gl(#X*m znI*U0ATmd8zt+z5^7s|)9Wt-96XY)W2=(DOa0H+Y3ISm#@`OXh`m%~(SVNUHf zqf4IKI02b+$8)jmd3A^4rd6jLI|4U7Mlo>?4jjAP5ct4j*rnp7$Ld%xOR6zwH-`=71jIt%VzyY^D&(u{g~GF~Y_*tO-`&Z| zpp{sgW;&_R>dfB5m4|Tl$RV8{hZ>P-I)pUnON-G=F>v>JPt&*X`PRlpF1xq3ll>2@ zTj`{4cE;g2^!8@I9u3S>7K5P6{N!PNx_DEFR^cCJr_DUhmt=}yZZoGPZx6PFfOHw0 zp+QnYoe45Cprb(j8JRVQV28XVVZMAS2c{&919VzL52=3+|0Yv5OQr2XKKEikt~~Di zG}M6qDNBY}w%YmZTAuVK49%1$rLk;Bj{$6GSH9l6CEtId%Y!}czFeyV z>hRwtcNzt!n&?-+5A0Qz%Wy0ADj-}+0}{I81C3*!z#v(y<_4G)?mBk$zTddB4D|QV zm?|rh<K z6?WxbaK!z?>jlG)f7$d%yFtH__kx!IlG+T4M^H?@kmx-!%s)}QD@V<@Xv74)`7Uk_ Q8<8{= SECRET_KEY_MIN_UNIQUE_CHARACTERS + and len(secret_key) >= SECRET_KEY_MIN_LENGTH + and not secret_key.startswith(SECRET_KEY_INSECURE_PREFIX) + ) + return [] if passed_check else [W009] + + +@register(Tags.security, deploy=True) +def check_debug(app_configs, **kwargs): + passed_check = not settings.DEBUG + return [] if passed_check else [W018] + + +@register(Tags.security, deploy=True) +def check_xframe_deny(app_configs, **kwargs): + passed_check = not _xframe_middleware() or settings.X_FRAME_OPTIONS == "DENY" + return [] if passed_check else [W019] + + +@register(Tags.security, deploy=True) +def check_allowed_hosts(app_configs, **kwargs): + return [] if settings.ALLOWED_HOSTS else [W020] + + +@register(Tags.security, deploy=True) +def check_referrer_policy(app_configs, **kwargs): + if _security_middleware(): + if settings.SECURE_REFERRER_POLICY is None: + return [W022] + # Support a comma-separated string or iterable of values to allow fallback. + if isinstance(settings.SECURE_REFERRER_POLICY, str): + values = {v.strip() for v in settings.SECURE_REFERRER_POLICY.split(",")} + else: + values = set(settings.SECURE_REFERRER_POLICY) + if not values <= REFERRER_POLICY_VALUES: + return [E023] + return [] + + +@register(Tags.security, deploy=True) +def check_cross_origin_opener_policy(app_configs, **kwargs): + if ( + _security_middleware() + and settings.SECURE_CROSS_ORIGIN_OPENER_POLICY is not None + and settings.SECURE_CROSS_ORIGIN_OPENER_POLICY + not in CROSS_ORIGIN_OPENER_POLICY_VALUES + ): + return [E024] + return [] diff --git a/venv/Lib/site-packages/django/core/checks/security/csrf.py b/venv/Lib/site-packages/django/core/checks/security/csrf.py new file mode 100644 index 000000000..af59589ae --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/security/csrf.py @@ -0,0 +1,67 @@ +import inspect + +from django.conf import settings + +from .. import Error, Tags, Warning, register + +W003 = Warning( + "You don't appear to be using Django's built-in " + "cross-site request forgery protection via the middleware " + "('django.middleware.csrf.CsrfViewMiddleware' is not in your " + "MIDDLEWARE). Enabling the middleware is the safest approach " + "to ensure you don't leave any holes.", + id="security.W003", +) + +W016 = Warning( + "You have 'django.middleware.csrf.CsrfViewMiddleware' in your " + "MIDDLEWARE, but you have not set CSRF_COOKIE_SECURE to True. " + "Using a secure-only CSRF cookie makes it more difficult for network " + "traffic sniffers to steal the CSRF token.", + id="security.W016", +) + + +def _csrf_middleware(): + return "django.middleware.csrf.CsrfViewMiddleware" in settings.MIDDLEWARE + + +@register(Tags.security, deploy=True) +def check_csrf_middleware(app_configs, **kwargs): + passed_check = _csrf_middleware() + return [] if passed_check else [W003] + + +@register(Tags.security, deploy=True) +def check_csrf_cookie_secure(app_configs, **kwargs): + passed_check = ( + settings.CSRF_USE_SESSIONS + or not _csrf_middleware() + or settings.CSRF_COOKIE_SECURE + ) + return [] if passed_check else [W016] + + +@register(Tags.security) +def check_csrf_failure_view(app_configs, **kwargs): + from django.middleware.csrf import _get_failure_view + + errors = [] + try: + view = _get_failure_view() + except ImportError: + msg = ( + "The CSRF failure view '%s' could not be imported." + % settings.CSRF_FAILURE_VIEW + ) + errors.append(Error(msg, id="security.E102")) + else: + try: + inspect.signature(view).bind(None, reason=None) + except TypeError: + msg = ( + "The CSRF failure view '%s' does not take the correct number of " + "arguments." % settings.CSRF_FAILURE_VIEW + ) + errors.append(Error(msg, id="security.E101")) + return errors diff --git a/venv/Lib/site-packages/django/core/checks/security/sessions.py b/venv/Lib/site-packages/django/core/checks/security/sessions.py new file mode 100644 index 000000000..7c251c060 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/security/sessions.py @@ -0,0 +1,97 @@ +from django.conf import settings + +from .. import Tags, Warning, register + + +def add_session_cookie_message(message): + return message + ( + " Using a secure-only session cookie makes it more difficult for " + "network traffic sniffers to hijack user sessions." + ) + + +W010 = Warning( + add_session_cookie_message( + "You have 'django.contrib.sessions' in your INSTALLED_APPS, " + "but you have not set SESSION_COOKIE_SECURE to True." + ), + id="security.W010", +) + +W011 = Warning( + add_session_cookie_message( + "You have 'django.contrib.sessions.middleware.SessionMiddleware' " + "in your MIDDLEWARE, but you have not set " + "SESSION_COOKIE_SECURE to True." + ), + id="security.W011", +) + +W012 = Warning( + add_session_cookie_message("SESSION_COOKIE_SECURE is not set to True."), + id="security.W012", +) + + +def add_httponly_message(message): + return message + ( + " Using an HttpOnly session cookie makes it more difficult for " + "cross-site scripting attacks to hijack user sessions." + ) + + +W013 = Warning( + add_httponly_message( + "You have 'django.contrib.sessions' in your INSTALLED_APPS, " + "but you have not set SESSION_COOKIE_HTTPONLY to True.", + ), + id="security.W013", +) + +W014 = Warning( + add_httponly_message( + "You have 'django.contrib.sessions.middleware.SessionMiddleware' " + "in your MIDDLEWARE, but you have not set " + "SESSION_COOKIE_HTTPONLY to True." + ), + id="security.W014", +) + +W015 = Warning( + add_httponly_message("SESSION_COOKIE_HTTPONLY is not set to True."), + id="security.W015", +) + + +@register(Tags.security, deploy=True) +def check_session_cookie_secure(app_configs, **kwargs): + errors = [] + if not settings.SESSION_COOKIE_SECURE: + if _session_app(): + errors.append(W010) + if _session_middleware(): + errors.append(W011) + if len(errors) > 1: + errors = [W012] + return errors + + +@register(Tags.security, deploy=True) +def check_session_cookie_httponly(app_configs, **kwargs): + errors = [] + if not settings.SESSION_COOKIE_HTTPONLY: + if _session_app(): + errors.append(W013) + if _session_middleware(): + errors.append(W014) + if len(errors) > 1: + errors = [W015] + return errors + + +def _session_middleware(): + return "django.contrib.sessions.middleware.SessionMiddleware" in settings.MIDDLEWARE + + +def _session_app(): + return "django.contrib.sessions" in settings.INSTALLED_APPS diff --git a/venv/Lib/site-packages/django/core/checks/templates.py b/venv/Lib/site-packages/django/core/checks/templates.py new file mode 100644 index 000000000..1aafc9929 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/templates.py @@ -0,0 +1,41 @@ +import copy + +from django.conf import settings + +from . import Error, Tags, register + +E001 = Error( + "You have 'APP_DIRS': True in your TEMPLATES but also specify 'loaders' " + "in OPTIONS. Either remove APP_DIRS or remove the 'loaders' option.", + id="templates.E001", +) +E002 = Error( + "'string_if_invalid' in TEMPLATES OPTIONS must be a string but got: {} ({}).", + id="templates.E002", +) + + +@register(Tags.templates) +def check_setting_app_dirs_loaders(app_configs, **kwargs): + return ( + [E001] + if any( + conf.get("APP_DIRS") and "loaders" in conf.get("OPTIONS", {}) + for conf in settings.TEMPLATES + ) + else [] + ) + + +@register(Tags.templates) +def check_string_if_invalid_is_string(app_configs, **kwargs): + errors = [] + for conf in settings.TEMPLATES: + string_if_invalid = conf.get("OPTIONS", {}).get("string_if_invalid", "") + if not isinstance(string_if_invalid, str): + error = copy.copy(E002) + error.msg = error.msg.format( + string_if_invalid, type(string_if_invalid).__name__ + ) + errors.append(error) + return errors diff --git a/venv/Lib/site-packages/django/core/checks/translation.py b/venv/Lib/site-packages/django/core/checks/translation.py new file mode 100644 index 000000000..214e97037 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/translation.py @@ -0,0 +1,66 @@ +from django.conf import settings +from django.utils.translation import get_supported_language_variant +from django.utils.translation.trans_real import language_code_re + +from . import Error, Tags, register + +E001 = Error( + "You have provided an invalid value for the LANGUAGE_CODE setting: {!r}.", + id="translation.E001", +) + +E002 = Error( + "You have provided an invalid language code in the LANGUAGES setting: {!r}.", + id="translation.E002", +) + +E003 = Error( + "You have provided an invalid language code in the LANGUAGES_BIDI setting: {!r}.", + id="translation.E003", +) + +E004 = Error( + "You have provided a value for the LANGUAGE_CODE setting that is not in " + "the LANGUAGES setting.", + id="translation.E004", +) + + +@register(Tags.translation) +def check_setting_language_code(app_configs, **kwargs): + """Error if LANGUAGE_CODE setting is invalid.""" + tag = settings.LANGUAGE_CODE + if not isinstance(tag, str) or not language_code_re.match(tag): + return [Error(E001.msg.format(tag), id=E001.id)] + return [] + + +@register(Tags.translation) +def check_setting_languages(app_configs, **kwargs): + """Error if LANGUAGES setting is invalid.""" + return [ + Error(E002.msg.format(tag), id=E002.id) + for tag, _ in settings.LANGUAGES + if not isinstance(tag, str) or not language_code_re.match(tag) + ] + + +@register(Tags.translation) +def check_setting_languages_bidi(app_configs, **kwargs): + """Error if LANGUAGES_BIDI setting is invalid.""" + return [ + Error(E003.msg.format(tag), id=E003.id) + for tag in settings.LANGUAGES_BIDI + if not isinstance(tag, str) or not language_code_re.match(tag) + ] + + +@register(Tags.translation) +def check_language_settings_consistent(app_configs, **kwargs): + """Error if language settings are not consistent with each other.""" + try: + get_supported_language_variant(settings.LANGUAGE_CODE) + except LookupError: + return [E004] + else: + return [] diff --git a/venv/Lib/site-packages/django/core/checks/urls.py b/venv/Lib/site-packages/django/core/checks/urls.py new file mode 100644 index 000000000..34eff9671 --- /dev/null +++ b/venv/Lib/site-packages/django/core/checks/urls.py @@ -0,0 +1,117 @@ +from collections import Counter + +from django.conf import settings + +from . import Error, Tags, Warning, register + + +@register(Tags.urls) +def check_url_config(app_configs, **kwargs): + if getattr(settings, "ROOT_URLCONF", None): + from django.urls import get_resolver + + resolver = get_resolver() + return check_resolver(resolver) + return [] + + +def check_resolver(resolver): + """ + Recursively check the resolver. + """ + check_method = getattr(resolver, "check", None) + if check_method is not None: + return check_method() + elif not hasattr(resolver, "resolve"): + return get_warning_for_invalid_pattern(resolver) + else: + return [] + + +@register(Tags.urls) +def check_url_namespaces_unique(app_configs, **kwargs): + """ + Warn if URL namespaces used in applications aren't unique. + """ + if not getattr(settings, "ROOT_URLCONF", None): + return [] + + from django.urls import get_resolver + + resolver = get_resolver() + all_namespaces = _load_all_namespaces(resolver) + counter = Counter(all_namespaces) + non_unique_namespaces = [n for n, count in counter.items() if count > 1] + errors = [] + for namespace in non_unique_namespaces: + errors.append( + Warning( + "URL namespace '{}' isn't unique. You may not be able to reverse " + "all URLs in this namespace".format(namespace), + id="urls.W005", + ) + ) + return errors + + +def _load_all_namespaces(resolver, parents=()): + """ + Recursively load all namespaces from URL patterns. + """ + url_patterns = getattr(resolver, "url_patterns", []) + namespaces = [ + ":".join(parents + (url.namespace,)) + for url in url_patterns + if getattr(url, "namespace", None) is not None + ] + for pattern in url_patterns: + namespace = getattr(pattern, "namespace", None) + current = parents + if namespace is not None: + current += (namespace,) + namespaces.extend(_load_all_namespaces(pattern, current)) + return namespaces + + +def get_warning_for_invalid_pattern(pattern): + """ + Return a list containing a warning that the pattern is invalid. + + describe_pattern() cannot be used here, because we cannot rely on the + urlpattern having regex or name attributes. + """ + if isinstance(pattern, str): + hint = ( + "Try removing the string '{}'. The list of urlpatterns should not " + "have a prefix string as the first element.".format(pattern) + ) + elif isinstance(pattern, tuple): + hint = "Try using path() instead of a tuple." + else: + hint = None + + return [ + Error( + "Your URL pattern {!r} is invalid. Ensure that urlpatterns is a list " + "of path() and/or re_path() instances.".format(pattern), + hint=hint, + id="urls.E004", + ) + ] + + +@register(Tags.urls) +def check_url_settings(app_configs, **kwargs): + errors = [] + for name in ("STATIC_URL", "MEDIA_URL"): + value = getattr(settings, name) + if value and not value.endswith("/"): + errors.append(E006(name)) + return errors + + +def E006(name): + return Error( + "The {} setting must end with a slash.".format(name), + id="urls.E006", + ) diff --git a/venv/Lib/site-packages/django/core/exceptions.py b/venv/Lib/site-packages/django/core/exceptions.py new file mode 100644 index 000000000..7be4e16bc --- /dev/null +++ b/venv/Lib/site-packages/django/core/exceptions.py @@ -0,0 +1,239 @@ +""" +Global Django exception and warning classes. +""" +import operator + +from django.utils.hashable import make_hashable + + +class FieldDoesNotExist(Exception): + """The requested model field does not exist""" + + pass + + +class AppRegistryNotReady(Exception): + """The django.apps registry is not populated yet""" + + pass + + +class ObjectDoesNotExist(Exception): + """The requested object does not exist""" + + silent_variable_failure = True + + +class MultipleObjectsReturned(Exception): + """The query returned multiple objects when only one was expected.""" + + pass + + +class SuspiciousOperation(Exception): + """The user did something suspicious""" + + +class SuspiciousMultipartForm(SuspiciousOperation): + """Suspect MIME request in multipart form data""" + + pass + + +class SuspiciousFileOperation(SuspiciousOperation): + """A Suspicious filesystem operation was attempted""" + + pass + + +class DisallowedHost(SuspiciousOperation): + """HTTP_HOST header contains invalid value""" + + pass + + +class DisallowedRedirect(SuspiciousOperation): + """Redirect to scheme not in allowed list""" + + pass + + +class TooManyFieldsSent(SuspiciousOperation): + """ + The number of fields in a GET or POST request exceeded + settings.DATA_UPLOAD_MAX_NUMBER_FIELDS. + """ + + pass + + +class RequestDataTooBig(SuspiciousOperation): + """ + The size of the request (excluding any file uploads) exceeded + settings.DATA_UPLOAD_MAX_MEMORY_SIZE. + """ + + pass + + +class RequestAborted(Exception): + """The request was closed before it was completed, or timed out.""" + + pass + + +class BadRequest(Exception): + """The request is malformed and cannot be processed.""" + + pass + + +class PermissionDenied(Exception): + """The user did not have permission to do that""" + + pass + + +class ViewDoesNotExist(Exception): + """The requested view does not exist""" + + pass + + +class MiddlewareNotUsed(Exception): + """This middleware is not used in this server configuration""" + + pass + + +class ImproperlyConfigured(Exception): + """Django is somehow improperly configured""" + + pass + + +class FieldError(Exception): + """Some kind of problem with a model field.""" + + pass + + +NON_FIELD_ERRORS = "__all__" + + +class ValidationError(Exception): + """An error while validating data.""" + + def __init__(self, message, code=None, params=None): + """ + The `message` argument can be a single error, a list of errors, or a + dictionary that maps field names to lists of errors. What we define as + an "error" can be either a simple string or an instance of + ValidationError with its message attribute set, and what we define as + list or dictionary can be an actual `list` or `dict` or an instance + of ValidationError with its `error_list` or `error_dict` attribute set. + """ + super().__init__(message, code, params) + + if isinstance(message, ValidationError): + if hasattr(message, "error_dict"): + message = message.error_dict + elif not hasattr(message, "message"): + message = message.error_list + else: + message, code, params = message.message, message.code, message.params + + if isinstance(message, dict): + self.error_dict = {} + for field, messages in message.items(): + if not isinstance(messages, ValidationError): + messages = ValidationError(messages) + self.error_dict[field] = messages.error_list + + elif isinstance(message, list): + self.error_list = [] + for message in message: + # Normalize plain strings to instances of ValidationError. + if not isinstance(message, ValidationError): + message = ValidationError(message) + if hasattr(message, "error_dict"): + self.error_list.extend(sum(message.error_dict.values(), [])) + else: + self.error_list.extend(message.error_list) + + else: + self.message = message + self.code = code + self.params = params + self.error_list = [self] + + @property + def message_dict(self): + # Trigger an AttributeError if this ValidationError + # doesn't have an error_dict. + getattr(self, "error_dict") + + return dict(self) + + @property + def messages(self): + if hasattr(self, "error_dict"): + return sum(dict(self).values(), []) + return list(self) + + def update_error_dict(self, error_dict): + if hasattr(self, "error_dict"): + for field, error_list in self.error_dict.items(): + error_dict.setdefault(field, []).extend(error_list) + else: + error_dict.setdefault(NON_FIELD_ERRORS, []).extend(self.error_list) + return error_dict + + def __iter__(self): + if hasattr(self, "error_dict"): + for field, errors in self.error_dict.items(): + yield field, list(ValidationError(errors)) + else: + for error in self.error_list: + message = error.message + if error.params: + message %= error.params + yield str(message) + + def __str__(self): + if hasattr(self, "error_dict"): + return repr(dict(self)) + return repr(list(self)) + + def __repr__(self): + return "ValidationError(%s)" % self + + def __eq__(self, other): + if not isinstance(other, ValidationError): + return NotImplemented + return hash(self) == hash(other) + + def __hash__(self): + if hasattr(self, "message"): + return hash( + ( + self.message, + self.code, + make_hashable(self.params), + ) + ) + if hasattr(self, "error_dict"): + return hash(make_hashable(self.error_dict)) + return hash(tuple(sorted(self.error_list, key=operator.attrgetter("message")))) + + +class EmptyResultSet(Exception): + """A database query predicate is impossible.""" + + pass + + +class SynchronousOnlyOperation(Exception): + """The user tried to call a sync-only function from an async context.""" + + pass diff --git a/venv/Lib/site-packages/django/core/files/__init__.py b/venv/Lib/site-packages/django/core/files/__init__.py new file mode 100644 index 000000000..d046aca08 --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/__init__.py @@ -0,0 +1,3 @@ +from django.core.files.base import File + +__all__ = ["File"] diff --git a/venv/Lib/site-packages/django/core/files/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/files/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e78be07b13100e2518bcac43a6637f3c53518d2d GIT binary patch literal 264 zcmYj~v1-FG5QZhk&=Qh0@8BW!UP1}9q#Z&i4Oz@lAz7+XDqBG(2l_~TB}1o7eSj{R zdQO)9aCiLt|MB_hbj(POS6vhlf7u(AQ;{3ZCksUjRrdxW)BfHs=>K~^8KHV9X2F<^@ewh+R$HVTm+KKt86 Q<8|lEJtr&<>d9647+mS^(Kw54VU7KyxgTo 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/files/__pycache__/locks.cpython-310.pyc b/venv/Lib/site-packages/django/core/files/__pycache__/locks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5c04e3874eb64369de7424c31751be1b17664a5 GIT binary patch literal 3394 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 IVU!F13xmJ#k^lez literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/files/__pycache__/temp.cpython-310.pyc b/venv/Lib/site-packages/django/core/files/__pycache__/temp.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f2decd92e534fdaa1464a35d594818c78ac58cf GIT binary patch literal 2759 zcmZ`*TXWM!6yB9&Sr$%61BG6u?Ut9+kk}9|oid#c3=sNI0s~> zxH#A>Sloh7Z9vCKlW@w7h&E|H8chR6GcpHO)1ri1&61#fo0m2XdEq|cHZQ*+yezCg z%w}1Xn@(&Bqwh2w=qt?%H=dB1C2t95KeW^*DUa3))q{PWGG_6Ss25g++H^lYhE zs!$nR(tgZ+$=RbF-AiH@UFm?O`Z30X$X9BawNuTWg)vV?xf%(sO2N9}mH?Y9NR>_o zESIgj5MHPl{KZ0WaJ4N0e`>n0$il%e5(5!yUx(mz(m5_}xTDZt_o26O@4=&ok8eMI z&N`9bWogWXocgoOM!hiT0f+*;(fJjI;joSbr`jTnyEEL}urtH0(1m^`fKrhH&R$%3 z`C|2DovkN&0=>p?cmmF#pwGEPu+gzWf*?RXq#r@RDis(CW(aNi6E70UMl#g-R?NW_ zpW_@dI7lNM0us{TQr~Xc+~Jisq*>-JKLw-1t9%Z|3ZLhvVRU&33j4Ec?oiSCbqaOPCT(_9 zFd}L9MF1t8#7fIF&_Iwp)sqCN30sjQKqn;HR1pT0KMaK;NYbPzAt6(lr*RZ+7VpbR zMV%MMp_d>E+xXrr&$M`67>C;PeyHWtKgypaE+V1D(lT3Wr=5H0LhUl zEqK?qTEB(umI}348T!Gd-xaFG`+nR_8UegQ4RlR4&~YfA%$cU|B3M(1-&tzY1?tk> za~o3*t-+Q0R4@R(&Kl0~QVw_%CS%ek>Jp~_CfNm``*hFPCzL!Ram6Cq+&M>KMagp# z(-GONj0vQH^h^5`Wf1;c>f%%icSiYs%~;>4+42k+k&Dn}r5xU@{P4*=DHEC5DeyVo zEa0Q^ED9oqMfWAnzJ~5PeCjLcYzWk#^R!AWYJ4z^MVP_P2kXDxGlxUZ4Sf=~0Xp)y zF>w$F!8p<1w-g?q+?Mg6 z-@#VRD4?l$9=y^*dfss!$nQb)E_@1q$G8yw?)jtkC)Wd%m^Pfxste)8WbaX|p|QDd z7Qr9#1K1_D@o}hGc|I~zYzJ9s%a2kh7~MVsjl2L#e}ylH=SZ^t{aVyy7<#%&VUFd+JA%6U09W02(BLT)^%d?2sIiVTbtSz8vr`XHrfg zd~i@q;Z=uN)UDVR$8f5SS+yjd)?8VGq0l`Cv*!7t0_#|T^}GV>sSYD0G5^R2cq70g rto&Sq#D6*x0YA=#%=x*9?H39X3R7VbXVIZm!!lfZ!LTpchHLx}RkQS8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/files/__pycache__/uploadedfile.cpython-310.pyc b/venv/Lib/site-packages/django/core/files/__pycache__/uploadedfile.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13dfc78cf26f31ac1519a337f54ded7e4c14bab0 GIT binary patch literal 4740 zcmZ`+-ESMm5x?C#l1GY?DaDq*@^NtE)C?@T=?99suG>Vm5~B`d*l~&;)SgavOY@{7 zkKH}m5ka9X`9{c^~k81?1BdzJOrS4t>Hik=iobknH&%<1>y#1BR2w4zw3M&)ZrZ#3&H zD}A(=3iaSKbZsS4Vpix|sp$0Re*^sZUwQ7wQRt__qYb>S-w|~yt3DlVOI+E7&#@+v zzT7)8ef~lBQ_)FgW>=m>on9=aIRlbux{ zcCD}w7GD}}AuNS9{)@Rz-IB0HQIrn2TmH(h47UPZRb>g=`pe8PDh}F*UB};6sq};N zq`I6NTU&EKZEMT%yP;mZwKeZ6i9re{Z3}0+AI0ff)OCWS8%U7~NAMN;=|2+fSW1+7*tk%{k^7%Q7*1&YttYc0L5bN|L6pgd_nv zQJTUjUPNh|HcMoup(SYsq?>W0KH0*=quvKejRWHq8?qrkUo)^qJhY&&_xOd_0qkb$Vx%mmvF&sWqR5ZU&18y z5|)U#m09F|nMM95&p{HoL> zI8kkW9HpQ1w>LK;snWGaG9fK*J{R5Rn-8PyO%*{3{xhLA!yUi-EV&gVQrx2R z)vf->?`hQN?a4)){Wcy&!DFdhWb~`B!G&pSHpZVHz~v^5`lQ@-JZcprWJ6=e*dfaC zm@RV^imdbIVDZj%b=$eFoEz6w{chco#7=> zV{J&>{D56DXl}?a8dzVT_50+>hF2tig_^&9jnm+8JW-j|^V4=_Z~KU&&~awQqKi1$ zi{T&eOVWjWli1B%;bei#q*pVlFMIH8t%x6iMUlhWyvnO)jaAttX7dW4Rm*rmz1Y;P zz928t_7%_TBw-&>*vqP(_lLe8=l0J^o);zo9D&?XUM2Dtk?XX~?#TooO!u^#WQ!x1 z1R{>H;#k}Zw1V74hesMIvaD@b3_`N;Z|NKRoNe0XN=@?xU^&qyvHORZo{rriBJkPq zT1V#+>`;+577jki17jY;#;9}B#6d6{XB#I@0zZwCu5%-5h=zk0F8t0~nyiJ9+C^}s z=-v#-SmRbkhxR8gQ+Gj*y$aq_+%Ki(js+l=E*fcJrx^0T@qIfjA?n#fo8lg#oi!{R z7LmKjYs}`L)X2rF^Q@@)tyc79W`>chm*qRyUphp-2a?$&xDI10P54weNi7=)CXys_ z&u=_a=;3D{-t#`c|LG&|-h;=oN?VX=v8RUj1n)CZFk_y4mzdumq7AC;tF1~K z{2GrARW)WIOch^WF$Zr?(Z^4f|ImL2Gb#E^MPNfZNfv;3=r) z(-W}LM~oZw=^6wLyFQ%-m)47Fs-j#T*1*!tdgUfRTBEA#Jbu0|IgQEQP=NWNc@k97-9^B-Q!GHv( z74{SKGYj!GJQ|5s3EKVcu15vktbj%RNw84;fsH zH#hQweukOZBhPjEaT?)b;pO`c=xq92ix1wNd+yAF+;_@nBk-qm>d%SXA#x@R2?twv z6ji7?dsdhJTUo4FE0)Fx>Hb8UK(T@8X()z(*Kx)ah5U|l002(1r7bDQ489n_PU*YV z@eMG~j)=keh2f_2q8$ZoXQ!`Hr|m1clTaOg(;+L~q)QDrsi??v=eHHAc5d}zKk5c! zF-dmn(|4M9)J>2f@0lTruN?E^EGL^iR z&ywfo#Y$-;U|#aiNoX&@s&t${-Mz}}*MqC4@0Vu-lP);xv;|>dNTnu2iHM6m(N_jt zE)V&E3Fj*e{-JeDCB-^mfP0+poIYxNC2Pr~1BNgPs6N5XIKOJ`iam9EvJbXe(}|HZ zesXs7-D`9~n)_xlnb}lQ&<^sK_=v&yZl#yXUtkKAx`|R7^@$n8$}JPWN0QBAs7zAp zH-9CakY{l_ztC9!8@ze?Ya5dVb(SA>b_UB9^zE!8(smL`Qu^5tqLcqP79r1Mytu-& zuh&=dtVqRG#-l`gj=PXw)f&)SD=(#%Co@ts=#!Nsua#>c?&_(R4J!2|T|C^2r(gEd zC|0`ar&`LPU^1AzLQt&cPXMN3gDJuTc`>+RR)OOyk^%vs9ib# G&i?^qQZr8g literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/files/__pycache__/uploadhandler.cpython-310.pyc b/venv/Lib/site-packages/django/core/files/__pycache__/uploadhandler.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06918275d5e98b32a3490621c2a4e4e30ad14a17 GIT binary patch literal 8124 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 VQ8H@PTB&xjRytO$t<!yncbE1 zG2ue;hor~;OFP2}E}T1DIxz6wT29kCZU@V=Pd{mQfBW|7?R(GJ#v`FYsY|o z$A{CG0}uD1$uB@qixO@%`*+eL@N9Ft<1`&&QJ=cBbVQo&Ba4=)cVtoT&~BC}S-0vF zf5L2QwNCWHdM>+3oMgFNNjUqy%S5D-EM19h98z4kstfG_G|53IYnvR~2i7w}NzW2f z%AxQyZyl0f$pH~Jm3v&m-e2qk`?&nflJ8UJz~1&?>~$FHo{Y8Dt%Fl+PaSa=`eAOt z1^xB%>OE9ITbeXp+KtBk^#@tbX^>_rpiCq^7Hoj-K^k=ciL4VW-jIu;1atNmA2P*a z#c0rt)K;KG)MG+MJcyKHovsR!)QsN0f!ps>;B0sw^PDo-pT{`suvE#qukB1~7s<5W zjwHiH1=>n`_>w1WJ-L<(wwB3ccMXS~OJo?eWyW*Gbg3H&pmDT|6Pq&;=h;pu7zeBO zScnwD1GeX2RJgqiA1t?il%R6!hg{02^)QQbqe<&gqQ1@Bt(8Pbb!Sav+px`6kEOlV zcS*Y?6UFXyqxfmG$z+ReN9ks^6la1hp{e9jt`aUA-926FMLeOAVj*^fs1>d+FM^o1 ztHiY{ZjIQaOx%Cn^7KFWModFz4DGcGztMeY@(&QqLU(N1lr$aYQkyzQ;2g~oV7I_! zz@-9vfXfB;0ec0W0PGjI0(hdp=Kxm|Qh1)c&tS>W@4rwTj`_M8UZF#hh|<778U_y4X0 zaD5YW@F|FSBxR6G@II9V8=2UN1nv83hpDZMN_-!sL7svi^Jp(gH%+%;$=diy8$s}7 zi-9{TCQ|TQ{7ON;E7*z*L7N3J_z|pf4STOGFINl!s?t~CM9W(z$mm;NJ{gFEDccCb zFi8^?hPNc+8@J7JZ;Zl`*x4|ueDzA6}y zOXG~fuAdX_BBycszBmtawErcKI&B)=yMZ)#%zSHq;q^^424hC9FKRGR%z&udVisaM_*wFe0U;)yUZP?%$WRsh5fEH7VRDGGU?R7nNoP~1hQNB$vwvGPKF zCED}d`YI>~VINQp96G&z!3Wyo=R$T(cC_2cAVH!T>Ls%kVIm5Ka)IYndz(y|ot?EG z9Pu?Yd3ry!;r$F&9NN#o{sQA|-?n%%PuupCLdM_E(gQnIpa~3IL)IKH4y}&9Vyubk zE3_v$ggja}op$k{^uOpCi)tSdIt&QI$1vOYU1fOZgE6c1i#P#`z%bO6Fa*2jP!)!{ z8iqgT5ifeYFr--wul=sb;4cHDs5zh)mr-0naTUdTDBef$0g3>{hbXS0_y`4hw7}#p zOv*J$(m19G!^V{6P`=9124Qg^E`Y$rB#!kh@Y9JZ`0Cj|+pZAb@jc(GdS+&wtklb* zj6@S4ptLhZas!Lx2HTBU7yk!IQ`?(@*UUOqESx9;RZ8DZ_psnGUgldqsoE8%Hv1oG C=cwZV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/files/base.py b/venv/Lib/site-packages/django/core/files/base.py new file mode 100644 index 000000000..3ca43ec25 --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/base.py @@ -0,0 +1,161 @@ +import os +from io import BytesIO, StringIO, UnsupportedOperation + +from django.core.files.utils import FileProxyMixin +from django.utils.functional import cached_property + + +class File(FileProxyMixin): + DEFAULT_CHUNK_SIZE = 64 * 2**10 + + def __init__(self, file, name=None): + self.file = file + if name is None: + name = getattr(file, "name", None) + self.name = name + if hasattr(file, "mode"): + self.mode = file.mode + + def __str__(self): + return self.name or "" + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self or "None") + + def __bool__(self): + return bool(self.name) + + def __len__(self): + return self.size + + @cached_property + def size(self): + if hasattr(self.file, "size"): + return self.file.size + if hasattr(self.file, "name"): + try: + return os.path.getsize(self.file.name) + except (OSError, TypeError): + pass + if hasattr(self.file, "tell") and hasattr(self.file, "seek"): + pos = self.file.tell() + self.file.seek(0, os.SEEK_END) + size = self.file.tell() + self.file.seek(pos) + return size + raise AttributeError("Unable to determine the file's size.") + + def chunks(self, chunk_size=None): + """ + Read the file and yield chunks of ``chunk_size`` bytes (defaults to + ``File.DEFAULT_CHUNK_SIZE``). + """ + chunk_size = chunk_size or self.DEFAULT_CHUNK_SIZE + try: + self.seek(0) + except (AttributeError, UnsupportedOperation): + pass + + while True: + data = self.read(chunk_size) + if not data: + break + yield data + + def multiple_chunks(self, chunk_size=None): + """ + Return ``True`` if you can expect multiple chunks. + + NB: If a particular file representation is in memory, subclasses should + always return ``False`` -- there's no good reason to read from memory in + chunks. + """ + return self.size > (chunk_size or self.DEFAULT_CHUNK_SIZE) + + def __iter__(self): + # Iterate over this file-like object by newlines + buffer_ = None + for chunk in self.chunks(): + for line in chunk.splitlines(True): + if buffer_: + if endswith_cr(buffer_) and not equals_lf(line): + # Line split after a \r newline; yield buffer_. + yield buffer_ + # Continue with line. + else: + # Line either split without a newline (line + # continues after buffer_) or with \r\n + # newline (line == b'\n'). + line = buffer_ + line + # buffer_ handled, clear it. + buffer_ = None + + # If this is the end of a \n or \r\n line, yield. + if endswith_lf(line): + yield line + else: + buffer_ = line + + if buffer_ is not None: + yield buffer_ + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close() + + def open(self, mode=None): + if not self.closed: + self.seek(0) + elif self.name and os.path.exists(self.name): + self.file = open(self.name, mode or self.mode) + else: + raise ValueError("The file cannot be reopened.") + return self + + def close(self): + self.file.close() + + +class ContentFile(File): + """ + A File-like object that takes just raw content, rather than an actual file. + """ + + def __init__(self, content, name=None): + stream_class = StringIO if isinstance(content, str) else BytesIO + super().__init__(stream_class(content), name=name) + self.size = len(content) + + def __str__(self): + return "Raw content" + + def __bool__(self): + return True + + def open(self, mode=None): + self.seek(0) + return self + + def close(self): + pass + + def write(self, data): + self.__dict__.pop("size", None) # Clear the computed size. + return self.file.write(data) + + +def endswith_cr(line): + """Return True if line (a text or bytestring) ends with '\r'.""" + return line.endswith("\r" if isinstance(line, str) else b"\r") + + +def endswith_lf(line): + """Return True if line (a text or bytestring) ends with '\n'.""" + return line.endswith("\n" if isinstance(line, str) else b"\n") + + +def equals_lf(line): + """Return True if line (a text or bytestring) equals '\n'.""" + return line == ("\n" if isinstance(line, str) else b"\n") diff --git a/venv/Lib/site-packages/django/core/files/images.py b/venv/Lib/site-packages/django/core/files/images.py new file mode 100644 index 000000000..6a603f24f --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/images.py @@ -0,0 +1,88 @@ +""" +Utility functions for handling images. + +Requires Pillow as you might imagine. +""" +import struct +import zlib + +from django.core.files import File + + +class ImageFile(File): + """ + A mixin for use alongside django.core.files.base.File, which provides + additional features for dealing with images. + """ + + @property + def width(self): + return self._get_image_dimensions()[0] + + @property + def height(self): + return self._get_image_dimensions()[1] + + def _get_image_dimensions(self): + if not hasattr(self, "_dimensions_cache"): + close = self.closed + self.open() + self._dimensions_cache = get_image_dimensions(self, close=close) + return self._dimensions_cache + + +def get_image_dimensions(file_or_path, close=False): + """ + Return the (width, height) of an image, given an open file or a path. Set + 'close' to True to close the file at the end if it is initially in an open + state. + """ + from PIL import ImageFile as PillowImageFile + + p = PillowImageFile.Parser() + if hasattr(file_or_path, "read"): + file = file_or_path + file_pos = file.tell() + file.seek(0) + else: + try: + file = open(file_or_path, "rb") + except OSError: + return (None, None) + close = True + try: + # Most of the time Pillow only needs a small chunk to parse the image + # and get the dimensions, but with some TIFF files Pillow needs to + # parse the whole file. + chunk_size = 1024 + while 1: + data = file.read(chunk_size) + if not data: + break + try: + p.feed(data) + except zlib.error as e: + # ignore zlib complaining on truncated stream, just feed more + # data to parser (ticket #19457). + if e.args[0].startswith("Error -5"): + pass + else: + raise + except struct.error: + # Ignore PIL failing on a too short buffer when reads return + # less bytes than expected. Skip and feed more data to the + # parser (ticket #24544). + pass + except RuntimeError: + # e.g. "RuntimeError: could not create decoder object" for + # WebP files. A different chunk_size may work. + pass + if p.image: + return p.image.size + chunk_size *= 2 + return (None, None) + finally: + if close: + file.close() + else: + file.seek(file_pos) diff --git a/venv/Lib/site-packages/django/core/files/locks.py b/venv/Lib/site-packages/django/core/files/locks.py new file mode 100644 index 000000000..6f632807b --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/locks.py @@ -0,0 +1,126 @@ +""" +Portable file locking utilities. + +Based partially on an example by Jonathan Feignberg in the Python +Cookbook [1] (licensed under the Python Software License) and a ctypes port by +Anatoly Techtonik for Roundup [2] (license [3]). + +[1] http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65203 +[2] https://sourceforge.net/p/roundup/code/ci/default/tree/roundup/backends/portalocker.py # NOQA +[3] https://sourceforge.net/p/roundup/code/ci/default/tree/COPYING.txt + +Example Usage:: + + >>> from django.core.files import locks + >>> with open('./file', 'wb') as f: + ... locks.lock(f, locks.LOCK_EX) + ... f.write('Django') +""" +import os + +__all__ = ("LOCK_EX", "LOCK_SH", "LOCK_NB", "lock", "unlock") + + +def _fd(f): + """Get a filedescriptor from something which could be a file or an fd.""" + return f.fileno() if hasattr(f, "fileno") else f + + +if os.name == "nt": + import msvcrt + from ctypes import ( + POINTER, + Structure, + Union, + byref, + c_int64, + c_ulong, + c_void_p, + sizeof, + windll, + ) + from ctypes.wintypes import BOOL, DWORD, HANDLE + + LOCK_SH = 0 # the default + LOCK_NB = 0x1 # LOCKFILE_FAIL_IMMEDIATELY + LOCK_EX = 0x2 # LOCKFILE_EXCLUSIVE_LOCK + + # --- Adapted from the pyserial project --- + # detect size of ULONG_PTR + if sizeof(c_ulong) != sizeof(c_void_p): + ULONG_PTR = c_int64 + else: + ULONG_PTR = c_ulong + PVOID = c_void_p + + # --- Union inside Structure by stackoverflow:3480240 --- + class _OFFSET(Structure): + _fields_ = [("Offset", DWORD), ("OffsetHigh", DWORD)] + + class _OFFSET_UNION(Union): + _anonymous_ = ["_offset"] + _fields_ = [("_offset", _OFFSET), ("Pointer", PVOID)] + + class OVERLAPPED(Structure): + _anonymous_ = ["_offset_union"] + _fields_ = [ + ("Internal", ULONG_PTR), + ("InternalHigh", ULONG_PTR), + ("_offset_union", _OFFSET_UNION), + ("hEvent", HANDLE), + ] + + LPOVERLAPPED = POINTER(OVERLAPPED) + + # --- Define function prototypes for extra safety --- + LockFileEx = windll.kernel32.LockFileEx + LockFileEx.restype = BOOL + LockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED] + UnlockFileEx = windll.kernel32.UnlockFileEx + UnlockFileEx.restype = BOOL + UnlockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED] + + def lock(f, flags): + hfile = msvcrt.get_osfhandle(_fd(f)) + overlapped = OVERLAPPED() + ret = LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, byref(overlapped)) + return bool(ret) + + def unlock(f): + hfile = msvcrt.get_osfhandle(_fd(f)) + overlapped = OVERLAPPED() + ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped)) + return bool(ret) + +else: + try: + import fcntl + + LOCK_SH = fcntl.LOCK_SH # shared lock + LOCK_NB = fcntl.LOCK_NB # non-blocking + LOCK_EX = fcntl.LOCK_EX + except (ImportError, AttributeError): + # File locking is not supported. + LOCK_EX = LOCK_SH = LOCK_NB = 0 + + # Dummy functions that don't do anything. + def lock(f, flags): + # File is not locked + return False + + def unlock(f): + # File is unlocked + return True + + else: + + def lock(f, flags): + try: + fcntl.flock(_fd(f), flags) + return True + except BlockingIOError: + return False + + def unlock(f): + fcntl.flock(_fd(f), fcntl.LOCK_UN) + return True diff --git a/venv/Lib/site-packages/django/core/files/move.py b/venv/Lib/site-packages/django/core/files/move.py new file mode 100644 index 000000000..2d71e1188 --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/move.py @@ -0,0 +1,100 @@ +""" +Move a file in the safest way possible:: + + >>> from django.core.files.move import file_move_safe + >>> file_move_safe("/tmp/old_file", "/tmp/new_file") +""" + +import errno +import os +from shutil import copystat + +from django.core.files import locks + +__all__ = ["file_move_safe"] + + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path, "samefile"): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return os.path.normcase(os.path.abspath(src)) == os.path.normcase( + os.path.abspath(dst) + ) + + +def file_move_safe( + old_file_name, new_file_name, chunk_size=1024 * 64, allow_overwrite=False +): + """ + Move a file from one location to another in the safest way possible. + + First, try ``os.rename``, which is simple but will break across filesystems. + If that fails, stream manually from one file to another in pure Python. + + If the destination file exists and ``allow_overwrite`` is ``False``, raise + ``FileExistsError``. + """ + # There's no reason to move if we don't have to. + if _samefile(old_file_name, new_file_name): + return + + try: + if not allow_overwrite and os.access(new_file_name, os.F_OK): + raise FileExistsError( + "Destination file %s exists and allow_overwrite is False." + % new_file_name + ) + + os.rename(old_file_name, new_file_name) + return + except OSError: + # OSError happens with os.rename() if moving to another filesystem or + # when moving opened files on certain operating systems. + pass + + # first open the old file, so that it won't go away + with open(old_file_name, "rb") as old_file: + # now open the new file, not forgetting allow_overwrite + fd = os.open( + new_file_name, + ( + os.O_WRONLY + | os.O_CREAT + | getattr(os, "O_BINARY", 0) + | (os.O_EXCL if not allow_overwrite else 0) + ), + ) + try: + locks.lock(fd, locks.LOCK_EX) + current_chunk = None + while current_chunk != b"": + current_chunk = old_file.read(chunk_size) + os.write(fd, current_chunk) + finally: + locks.unlock(fd) + os.close(fd) + + try: + copystat(old_file_name, new_file_name) + except PermissionError as e: + # Certain filesystems (e.g. CIFS) fail to copy the file's metadata if + # the type of the destination filesystem isn't the same as the source + # filesystem; ignore that. + if e.errno != errno.EPERM: + raise + + try: + os.remove(old_file_name) + except PermissionError as e: + # Certain operating systems (Cygwin and Windows) + # fail when deleting opened files, ignore it. (For the + # systems where this happens, temporary files will be auto-deleted + # on close anyway.) + if getattr(e, "winerror", 0) != 32: + raise diff --git a/venv/Lib/site-packages/django/core/files/storage.py b/venv/Lib/site-packages/django/core/files/storage.py new file mode 100644 index 000000000..714f9c125 --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/storage.py @@ -0,0 +1,416 @@ +import os +import pathlib +from datetime import datetime +from urllib.parse import urljoin + +from django.conf import settings +from django.core.exceptions import SuspiciousFileOperation +from django.core.files import File, locks +from django.core.files.move import file_move_safe +from django.core.files.utils import validate_file_name +from django.core.signals import setting_changed +from django.utils import timezone +from django.utils._os import safe_join +from django.utils.crypto import get_random_string +from django.utils.deconstruct import deconstructible +from django.utils.encoding import filepath_to_uri +from django.utils.functional import LazyObject, cached_property +from django.utils.module_loading import import_string +from django.utils.text import get_valid_filename + +__all__ = ( + "Storage", + "FileSystemStorage", + "DefaultStorage", + "default_storage", + "get_storage_class", +) + + +class Storage: + """ + A base storage class, providing some default behaviors that all other + storage systems can inherit or override, as necessary. + """ + + # The following methods represent a public interface to private methods. + # These shouldn't be overridden by subclasses unless absolutely necessary. + + def open(self, name, mode="rb"): + """Retrieve the specified file from storage.""" + return self._open(name, mode) + + def save(self, name, content, max_length=None): + """ + Save new content to the file specified by name. The content should be + a proper File object or any Python file-like object, ready to be read + from the beginning. + """ + # Get the proper name for the file, as it will actually be saved. + if name is None: + name = content.name + + if not hasattr(content, "chunks"): + content = File(content, name) + + name = self.get_available_name(name, max_length=max_length) + name = self._save(name, content) + # Ensure that the name returned from the storage system is still valid. + validate_file_name(name, allow_relative_path=True) + return name + + # These methods are part of the public API, with default implementations. + + def get_valid_name(self, name): + """ + Return a filename, based on the provided filename, that's suitable for + use in the target storage system. + """ + return get_valid_filename(name) + + def get_alternative_name(self, file_root, file_ext): + """ + Return an alternative filename, by adding an underscore and a random 7 + character alphanumeric string (before the file extension, if one + exists) to the filename. + """ + return "%s_%s%s" % (file_root, get_random_string(7), file_ext) + + def get_available_name(self, name, max_length=None): + """ + Return a filename that's free on the target storage system and + available for new content to be written to. + """ + name = str(name).replace("\\", "/") + dir_name, file_name = os.path.split(name) + if ".." in pathlib.PurePath(dir_name).parts: + raise SuspiciousFileOperation( + "Detected path traversal attempt in '%s'" % dir_name + ) + validate_file_name(file_name) + file_root, file_ext = os.path.splitext(file_name) + # If the filename already exists, generate an alternative filename + # until it doesn't exist. + # Truncate original name if required, so the new filename does not + # exceed the max_length. + while self.exists(name) or (max_length and len(name) > max_length): + # file_ext includes the dot. + name = os.path.join( + dir_name, self.get_alternative_name(file_root, file_ext) + ) + if max_length is None: + continue + # Truncate file_root if max_length exceeded. + truncation = len(name) - max_length + if truncation > 0: + file_root = file_root[:-truncation] + # Entire file_root was truncated in attempt to find an + # available filename. + if not file_root: + raise SuspiciousFileOperation( + 'Storage can not find an available filename for "%s". ' + "Please make sure that the corresponding file field " + 'allows sufficient "max_length".' % name + ) + name = os.path.join( + dir_name, self.get_alternative_name(file_root, file_ext) + ) + return name + + def generate_filename(self, filename): + """ + Validate the filename by calling get_valid_name() and return a filename + to be passed to the save() method. + """ + filename = str(filename).replace("\\", "/") + # `filename` may include a path as returned by FileField.upload_to. + dirname, filename = os.path.split(filename) + if ".." in pathlib.PurePath(dirname).parts: + raise SuspiciousFileOperation( + "Detected path traversal attempt in '%s'" % dirname + ) + return os.path.normpath(os.path.join(dirname, self.get_valid_name(filename))) + + def path(self, name): + """ + Return a local filesystem path where the file can be retrieved using + Python's built-in open() function. Storage systems that can't be + accessed using open() should *not* implement this method. + """ + raise NotImplementedError("This backend doesn't support absolute paths.") + + # The following methods form the public API for storage systems, but with + # no default implementations. Subclasses must implement *all* of these. + + def delete(self, name): + """ + Delete the specified file from the storage system. + """ + raise NotImplementedError( + "subclasses of Storage must provide a delete() method" + ) + + def exists(self, name): + """ + Return True if a file referenced by the given name already exists in the + storage system, or False if the name is available for a new file. + """ + raise NotImplementedError( + "subclasses of Storage must provide an exists() method" + ) + + def listdir(self, path): + """ + List the contents of the specified path. Return a 2-tuple of lists: + the first item being directories, the second item being files. + """ + raise NotImplementedError( + "subclasses of Storage must provide a listdir() method" + ) + + def size(self, name): + """ + Return the total size, in bytes, of the file specified by name. + """ + raise NotImplementedError("subclasses of Storage must provide a size() method") + + def url(self, name): + """ + Return an absolute URL where the file's contents can be accessed + directly by a web browser. + """ + raise NotImplementedError("subclasses of Storage must provide a url() method") + + def get_accessed_time(self, name): + """ + Return the last accessed time (as a datetime) of the file specified by + name. The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError( + "subclasses of Storage must provide a get_accessed_time() method" + ) + + def get_created_time(self, name): + """ + Return the creation time (as a datetime) of the file specified by name. + The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError( + "subclasses of Storage must provide a get_created_time() method" + ) + + def get_modified_time(self, name): + """ + Return the last modified time (as a datetime) of the file specified by + name. The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError( + "subclasses of Storage must provide a get_modified_time() method" + ) + + +@deconstructible +class FileSystemStorage(Storage): + """ + Standard filesystem storage + """ + + # The combination of O_CREAT and O_EXCL makes os.open() raise OSError if + # the file already exists before it's opened. + OS_OPEN_FLAGS = os.O_WRONLY | os.O_CREAT | os.O_EXCL | getattr(os, "O_BINARY", 0) + + def __init__( + self, + location=None, + base_url=None, + file_permissions_mode=None, + directory_permissions_mode=None, + ): + self._location = location + self._base_url = base_url + self._file_permissions_mode = file_permissions_mode + self._directory_permissions_mode = directory_permissions_mode + setting_changed.connect(self._clear_cached_properties) + + def _clear_cached_properties(self, setting, **kwargs): + """Reset setting based property values.""" + if setting == "MEDIA_ROOT": + self.__dict__.pop("base_location", None) + self.__dict__.pop("location", None) + elif setting == "MEDIA_URL": + self.__dict__.pop("base_url", None) + elif setting == "FILE_UPLOAD_PERMISSIONS": + self.__dict__.pop("file_permissions_mode", None) + elif setting == "FILE_UPLOAD_DIRECTORY_PERMISSIONS": + self.__dict__.pop("directory_permissions_mode", None) + + def _value_or_setting(self, value, setting): + return setting if value is None else value + + @cached_property + def base_location(self): + return self._value_or_setting(self._location, settings.MEDIA_ROOT) + + @cached_property + def location(self): + return os.path.abspath(self.base_location) + + @cached_property + def base_url(self): + if self._base_url is not None and not self._base_url.endswith("/"): + self._base_url += "/" + return self._value_or_setting(self._base_url, settings.MEDIA_URL) + + @cached_property + def file_permissions_mode(self): + return self._value_or_setting( + self._file_permissions_mode, settings.FILE_UPLOAD_PERMISSIONS + ) + + @cached_property + def directory_permissions_mode(self): + return self._value_or_setting( + self._directory_permissions_mode, settings.FILE_UPLOAD_DIRECTORY_PERMISSIONS + ) + + def _open(self, name, mode="rb"): + return File(open(self.path(name), mode)) + + def _save(self, name, content): + full_path = self.path(name) + + # Create any intermediate directories that do not exist. + directory = os.path.dirname(full_path) + try: + if self.directory_permissions_mode is not None: + # Set the umask because os.makedirs() doesn't apply the "mode" + # argument to intermediate-level directories. + old_umask = os.umask(0o777 & ~self.directory_permissions_mode) + try: + os.makedirs( + directory, self.directory_permissions_mode, exist_ok=True + ) + finally: + os.umask(old_umask) + else: + os.makedirs(directory, exist_ok=True) + except FileExistsError: + raise FileExistsError("%s exists and is not a directory." % directory) + + # There's a potential race condition between get_available_name and + # saving the file; it's possible that two threads might return the + # same name, at which point all sorts of fun happens. So we need to + # try to create the file, but if it already exists we have to go back + # to get_available_name() and try again. + + while True: + try: + # This file has a file path that we can move. + if hasattr(content, "temporary_file_path"): + file_move_safe(content.temporary_file_path(), full_path) + + # This is a normal uploadedfile that we can stream. + else: + # The current umask value is masked out by os.open! + fd = os.open(full_path, self.OS_OPEN_FLAGS, 0o666) + _file = None + try: + locks.lock(fd, locks.LOCK_EX) + for chunk in content.chunks(): + if _file is None: + mode = "wb" if isinstance(chunk, bytes) else "wt" + _file = os.fdopen(fd, mode) + _file.write(chunk) + finally: + locks.unlock(fd) + if _file is not None: + _file.close() + else: + os.close(fd) + except FileExistsError: + # A new name is needed if the file exists. + name = self.get_available_name(name) + full_path = self.path(name) + else: + # OK, the file save worked. Break out of the loop. + break + + if self.file_permissions_mode is not None: + os.chmod(full_path, self.file_permissions_mode) + + # Ensure the saved path is always relative to the storage root. + name = os.path.relpath(full_path, self.location) + # Store filenames with forward slashes, even on Windows. + return str(name).replace("\\", "/") + + def delete(self, name): + if not name: + raise ValueError("The name must be given to delete().") + name = self.path(name) + # If the file or directory exists, delete it from the filesystem. + try: + if os.path.isdir(name): + os.rmdir(name) + else: + os.remove(name) + except FileNotFoundError: + # FileNotFoundError is raised if the file or directory was removed + # concurrently. + pass + + def exists(self, name): + return os.path.lexists(self.path(name)) + + def listdir(self, path): + path = self.path(path) + directories, files = [], [] + with os.scandir(path) as entries: + for entry in entries: + if entry.is_dir(): + directories.append(entry.name) + else: + files.append(entry.name) + return directories, files + + def path(self, name): + return safe_join(self.location, name) + + def size(self, name): + return os.path.getsize(self.path(name)) + + def url(self, name): + if self.base_url is None: + raise ValueError("This file is not accessible via a URL.") + url = filepath_to_uri(name) + if url is not None: + url = url.lstrip("/") + return urljoin(self.base_url, url) + + def _datetime_from_timestamp(self, ts): + """ + If timezone support is enabled, make an aware datetime object in UTC; + otherwise make a naive one in the local timezone. + """ + tz = timezone.utc if settings.USE_TZ else None + return datetime.fromtimestamp(ts, tz=tz) + + def get_accessed_time(self, name): + return self._datetime_from_timestamp(os.path.getatime(self.path(name))) + + def get_created_time(self, name): + return self._datetime_from_timestamp(os.path.getctime(self.path(name))) + + def get_modified_time(self, name): + return self._datetime_from_timestamp(os.path.getmtime(self.path(name))) + + +def get_storage_class(import_path=None): + return import_string(import_path or settings.DEFAULT_FILE_STORAGE) + + +class DefaultStorage(LazyObject): + def _setup(self): + self._wrapped = get_storage_class()() + + +default_storage = DefaultStorage() diff --git a/venv/Lib/site-packages/django/core/files/temp.py b/venv/Lib/site-packages/django/core/files/temp.py new file mode 100644 index 000000000..5bd31dd5f --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/temp.py @@ -0,0 +1,79 @@ +""" +The temp module provides a NamedTemporaryFile that can be reopened in the same +process on any platform. Most platforms use the standard Python +tempfile.NamedTemporaryFile class, but Windows users are given a custom class. + +This is needed because the Python implementation of NamedTemporaryFile uses the +O_TEMPORARY flag under Windows, which prevents the file from being reopened +if the same flag is not provided [1][2]. Note that this does not address the +more general issue of opening a file for writing and reading in multiple +processes in a manner that works across platforms. + +The custom version of NamedTemporaryFile doesn't support the same keyword +arguments available in tempfile.NamedTemporaryFile. + +1: https://mail.python.org/pipermail/python-list/2005-December/336957.html +2: https://bugs.python.org/issue14243 +""" + +import os +import tempfile + +from django.core.files.utils import FileProxyMixin + +__all__ = ( + "NamedTemporaryFile", + "gettempdir", +) + + +if os.name == "nt": + + class TemporaryFile(FileProxyMixin): + """ + Temporary file object constructor that supports reopening of the + temporary file in Windows. + + Unlike tempfile.NamedTemporaryFile from the standard library, + __init__() doesn't support the 'delete', 'buffering', 'encoding', or + 'newline' keyword arguments. + """ + + def __init__(self, mode="w+b", bufsize=-1, suffix="", prefix="", dir=None): + fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir) + self.name = name + self.file = os.fdopen(fd, mode, bufsize) + self.close_called = False + + # Because close can be called during shutdown + # we need to cache os.unlink and access it + # as self.unlink only + unlink = os.unlink + + def close(self): + if not self.close_called: + self.close_called = True + try: + self.file.close() + except OSError: + pass + try: + self.unlink(self.name) + except OSError: + pass + + def __del__(self): + self.close() + + def __enter__(self): + self.file.__enter__() + return self + + def __exit__(self, exc, value, tb): + self.file.__exit__(exc, value, tb) + + NamedTemporaryFile = TemporaryFile +else: + NamedTemporaryFile = tempfile.NamedTemporaryFile + +gettempdir = tempfile.gettempdir diff --git a/venv/Lib/site-packages/django/core/files/uploadedfile.py b/venv/Lib/site-packages/django/core/files/uploadedfile.py new file mode 100644 index 000000000..efbfcac4c --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/uploadedfile.py @@ -0,0 +1,150 @@ +""" +Classes representing uploaded files. +""" + +import os +from io import BytesIO + +from django.conf import settings +from django.core.files import temp as tempfile +from django.core.files.base import File +from django.core.files.utils import validate_file_name + +__all__ = ( + "UploadedFile", + "TemporaryUploadedFile", + "InMemoryUploadedFile", + "SimpleUploadedFile", +) + + +class UploadedFile(File): + """ + An abstract uploaded file (``TemporaryUploadedFile`` and + ``InMemoryUploadedFile`` are the built-in concrete subclasses). + + An ``UploadedFile`` object behaves somewhat like a file object and + represents some file data that the user submitted with a form. + """ + + def __init__( + self, + file=None, + name=None, + content_type=None, + size=None, + charset=None, + content_type_extra=None, + ): + super().__init__(file, name) + self.size = size + self.content_type = content_type + self.charset = charset + self.content_type_extra = content_type_extra + + def __repr__(self): + return "<%s: %s (%s)>" % (self.__class__.__name__, self.name, self.content_type) + + def _get_name(self): + return self._name + + def _set_name(self, name): + # Sanitize the file name so that it can't be dangerous. + if name is not None: + # Just use the basename of the file -- anything else is dangerous. + name = os.path.basename(name) + + # File names longer than 255 characters can cause problems on older OSes. + if len(name) > 255: + name, ext = os.path.splitext(name) + ext = ext[:255] + name = name[: 255 - len(ext)] + ext + + name = validate_file_name(name) + + self._name = name + + name = property(_get_name, _set_name) + + +class TemporaryUploadedFile(UploadedFile): + """ + A file uploaded to a temporary location (i.e. stream-to-disk). + """ + + def __init__(self, name, content_type, size, charset, content_type_extra=None): + _, ext = os.path.splitext(name) + file = tempfile.NamedTemporaryFile( + suffix=".upload" + ext, dir=settings.FILE_UPLOAD_TEMP_DIR + ) + super().__init__(file, name, content_type, size, charset, content_type_extra) + + def temporary_file_path(self): + """Return the full path of this file.""" + return self.file.name + + def close(self): + try: + return self.file.close() + except FileNotFoundError: + # The file was moved or deleted before the tempfile could unlink + # it. Still sets self.file.close_called and calls + # self.file.file.close() before the exception. + pass + + +class InMemoryUploadedFile(UploadedFile): + """ + A file uploaded into memory (i.e. stream-to-memory). + """ + + def __init__( + self, + file, + field_name, + name, + content_type, + size, + charset, + content_type_extra=None, + ): + super().__init__(file, name, content_type, size, charset, content_type_extra) + self.field_name = field_name + + def open(self, mode=None): + self.file.seek(0) + return self + + def chunks(self, chunk_size=None): + self.file.seek(0) + yield self.read() + + def multiple_chunks(self, chunk_size=None): + # Since it's in memory, we'll never have multiple chunks. + return False + + +class SimpleUploadedFile(InMemoryUploadedFile): + """ + A simple representation of a file, which just has content, size, and a name. + """ + + def __init__(self, name, content, content_type="text/plain"): + content = content or b"" + super().__init__( + BytesIO(content), None, name, content_type, len(content), None, None + ) + + @classmethod + def from_dict(cls, file_dict): + """ + Create a SimpleUploadedFile object from a dictionary with keys: + - filename + - content-type + - content + """ + return cls( + file_dict["filename"], + file_dict["content"], + file_dict.get("content-type", "text/plain"), + ) diff --git a/venv/Lib/site-packages/django/core/files/uploadhandler.py b/venv/Lib/site-packages/django/core/files/uploadhandler.py new file mode 100644 index 000000000..b6c185e8f --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/uploadhandler.py @@ -0,0 +1,251 @@ +""" +Base file upload handler classes, and the built-in concrete subclasses +""" +import os +from io import BytesIO + +from django.conf import settings +from django.core.files.uploadedfile import InMemoryUploadedFile, TemporaryUploadedFile +from django.utils.module_loading import import_string + +__all__ = [ + "UploadFileException", + "StopUpload", + "SkipFile", + "FileUploadHandler", + "TemporaryFileUploadHandler", + "MemoryFileUploadHandler", + "load_handler", + "StopFutureHandlers", +] + + +class UploadFileException(Exception): + """ + Any error having to do with uploading files. + """ + + pass + + +class StopUpload(UploadFileException): + """ + This exception is raised when an upload must abort. + """ + + def __init__(self, connection_reset=False): + """ + If ``connection_reset`` is ``True``, Django knows will halt the upload + without consuming the rest of the upload. This will cause the browser to + show a "connection reset" error. + """ + self.connection_reset = connection_reset + + def __str__(self): + if self.connection_reset: + return "StopUpload: Halt current upload." + else: + return "StopUpload: Consume request data, then halt." + + +class SkipFile(UploadFileException): + """ + This exception is raised by an upload handler that wants to skip a given file. + """ + + pass + + +class StopFutureHandlers(UploadFileException): + """ + Upload handlers that have handled a file and do not want future handlers to + run should raise this exception instead of returning None. + """ + + pass + + +class FileUploadHandler: + """ + Base class for streaming upload handlers. + """ + + chunk_size = 64 * 2**10 # : The default chunk size is 64 KB. + + def __init__(self, request=None): + self.file_name = None + self.content_type = None + self.content_length = None + self.charset = None + self.content_type_extra = None + self.request = request + + def handle_raw_input( + self, input_data, META, content_length, boundary, encoding=None + ): + """ + Handle the raw input from the client. + + Parameters: + + :input_data: + An object that supports reading via .read(). + :META: + ``request.META``. + :content_length: + The (integer) value of the Content-Length header from the + client. + :boundary: The boundary from the Content-Type header. Be sure to + prepend two '--'. + """ + pass + + def new_file( + self, + field_name, + file_name, + content_type, + content_length, + charset=None, + content_type_extra=None, + ): + """ + Signal that a new file has been started. + + Warning: As with any data from the client, you should not trust + content_length (and sometimes won't even get it). + """ + self.field_name = field_name + self.file_name = file_name + self.content_type = content_type + self.content_length = content_length + self.charset = charset + self.content_type_extra = content_type_extra + + def receive_data_chunk(self, raw_data, start): + """ + Receive data from the streamed upload parser. ``start`` is the position + in the file of the chunk. + """ + raise NotImplementedError( + "subclasses of FileUploadHandler must provide a receive_data_chunk() method" + ) + + def file_complete(self, file_size): + """ + Signal that a file has completed. File size corresponds to the actual + size accumulated by all the chunks. + + Subclasses should return a valid ``UploadedFile`` object. + """ + raise NotImplementedError( + "subclasses of FileUploadHandler must provide a file_complete() method" + ) + + def upload_complete(self): + """ + Signal that the upload is complete. Subclasses should perform cleanup + that is necessary for this handler. + """ + pass + + def upload_interrupted(self): + """ + Signal that the upload was interrupted. Subclasses should perform + cleanup that is necessary for this handler. + """ + pass + + +class TemporaryFileUploadHandler(FileUploadHandler): + """ + Upload handler that streams data into a temporary file. + """ + + def new_file(self, *args, **kwargs): + """ + Create the file object to append to as data is coming in. + """ + super().new_file(*args, **kwargs) + self.file = TemporaryUploadedFile( + self.file_name, self.content_type, 0, self.charset, self.content_type_extra + ) + + def receive_data_chunk(self, raw_data, start): + self.file.write(raw_data) + + def file_complete(self, file_size): + self.file.seek(0) + self.file.size = file_size + return self.file + + def upload_interrupted(self): + if hasattr(self, "file"): + temp_location = self.file.temporary_file_path() + try: + self.file.close() + os.remove(temp_location) + except FileNotFoundError: + pass + + +class MemoryFileUploadHandler(FileUploadHandler): + """ + File upload handler to stream uploads into memory (used for small files). + """ + + def handle_raw_input( + self, input_data, META, content_length, boundary, encoding=None + ): + """ + Use the content_length to signal whether or not this handler should be + used. + """ + # Check the content-length header to see if we should + # If the post is too large, we cannot use the Memory handler. + self.activated = content_length <= settings.FILE_UPLOAD_MAX_MEMORY_SIZE + + def new_file(self, *args, **kwargs): + super().new_file(*args, **kwargs) + if self.activated: + self.file = BytesIO() + raise StopFutureHandlers() + + def receive_data_chunk(self, raw_data, start): + """Add the data to the BytesIO file.""" + if self.activated: + self.file.write(raw_data) + else: + return raw_data + + def file_complete(self, file_size): + """Return a file object if this handler is activated.""" + if not self.activated: + return + + self.file.seek(0) + return InMemoryUploadedFile( + file=self.file, + field_name=self.field_name, + name=self.file_name, + content_type=self.content_type, + size=file_size, + charset=self.charset, + content_type_extra=self.content_type_extra, + ) + + +def load_handler(path, *args, **kwargs): + """ + Given a path to a handler, return an instance of that handler. + + E.g.:: + >>> from django.http import HttpRequest + >>> request = HttpRequest() + >>> load_handler( + ... 'django.core.files.uploadhandler.TemporaryFileUploadHandler', + ... request, + ... ) + + """ + return import_string(path)(*args, **kwargs) diff --git a/venv/Lib/site-packages/django/core/files/utils.py b/venv/Lib/site-packages/django/core/files/utils.py new file mode 100644 index 000000000..85342b2f3 --- /dev/null +++ b/venv/Lib/site-packages/django/core/files/utils.py @@ -0,0 +1,78 @@ +import os +import pathlib + +from django.core.exceptions import SuspiciousFileOperation + + +def validate_file_name(name, allow_relative_path=False): + # Remove potentially dangerous names + if os.path.basename(name) in {"", ".", ".."}: + raise SuspiciousFileOperation("Could not derive file name from '%s'" % name) + + if allow_relative_path: + # Use PurePosixPath() because this branch is checked only in + # FileField.generate_filename() where all file paths are expected to be + # Unix style (with forward slashes). + path = pathlib.PurePosixPath(name) + if path.is_absolute() or ".." in path.parts: + raise SuspiciousFileOperation( + "Detected path traversal attempt in '%s'" % name + ) + elif name != os.path.basename(name): + raise SuspiciousFileOperation("File name '%s' includes path elements" % name) + + return name + + +class FileProxyMixin: + """ + A mixin class used to forward file methods to an underlaying file + object. The internal file object has to be called "file":: + + class FileProxy(FileProxyMixin): + def __init__(self, file): + self.file = file + """ + + encoding = property(lambda self: self.file.encoding) + fileno = property(lambda self: self.file.fileno) + flush = property(lambda self: self.file.flush) + isatty = property(lambda self: self.file.isatty) + newlines = property(lambda self: self.file.newlines) + read = property(lambda self: self.file.read) + readinto = property(lambda self: self.file.readinto) + readline = property(lambda self: self.file.readline) + readlines = property(lambda self: self.file.readlines) + seek = property(lambda self: self.file.seek) + tell = property(lambda self: self.file.tell) + truncate = property(lambda self: self.file.truncate) + write = property(lambda self: self.file.write) + writelines = property(lambda self: self.file.writelines) + + @property + def closed(self): + return not self.file or self.file.closed + + def readable(self): + if self.closed: + return False + if hasattr(self.file, "readable"): + return self.file.readable() + return True + + def writable(self): + if self.closed: + return False + if hasattr(self.file, "writable"): + return self.file.writable() + return "w" in getattr(self.file, "mode", "") + + def seekable(self): + if self.closed: + return False + if hasattr(self.file, "seekable"): + return self.file.seekable() + return True + + def __iter__(self): + return iter(self.file) diff --git a/venv/Lib/site-packages/django/core/handlers/__init__.py b/venv/Lib/site-packages/django/core/handlers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/handlers/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/handlers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7f6a466ffa92a3e291fae4ac7c7c0dedc582ca4 GIT binary patch literal 194 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/handlers/__pycache__/exception.cpython-310.pyc b/venv/Lib/site-packages/django/core/handlers/__pycache__/exception.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ca8086ac1d8dc371eb63c985167c750843e0587 GIT binary patch literal 4126 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/handlers/__pycache__/wsgi.cpython-310.pyc b/venv/Lib/site-packages/django/core/handlers/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a87a1906ddd42baf62a9e96ea6a0e4e761bbfd3 GIT binary patch literal 6614 zcmbVRU2iMLdEPHBmrIJGr1S0A*#vQIHa=3^Hn5W%80SmpNX;>IEXg*qRk~PlM&e4# zU3z9IS%d_nN^jPcazOGZ-h>fo4o2qTb zR=4DrRNIQ}ZrLxZb}4qc6~EGTeYacntE$hAYu!12PPNN%y*uyEtF{w2x(oh-YFFaL z?vlTxYkY~hL*2jjRAW_Ed!ez~(D1M0ZI0FPR_B$W>EFQnJZs>+!OI6X(Q}I}u*Dae zf153_Yk1ya*Vzp`Ut>4fEj+))Zf|MLJAVRKT2s%<4^J{K*Ei5~B+s%a*_YHUqx~d| zscG$ok~ht~x|U_VP5xP*%Pg;a)aT;lan#Q8S}zom2kkUHj5x+GV3|O+MbyiJp5S}Y z=jgm8c#n%VPqJWFq=!5S`bpGI8BLgPhwTn$7@T5Ec7m=(5Ql@4K+v+?UKDd_fZUbu zw~6ZMpNW_IDDr(&T=R9N`3BQ{lhv5XtQWd(L0&d1qg6u7VHLD&v|Lt2tISG}Mm?W< z7ImYHv#m_U3s0&}FH1cZ$uN%7V-KSkMCC=9*9&Flg6F2erDtz?gosT6Ka%ZzI zWw`S=ZTGuShunD@Wo!N2ohOly+1=+NJ>czZ=ZGgqJI|us9SN!2?S<{baG%Q^b`U1} z=}J2le5Dg6EXIN>$8tYf?w#aL5P-TY2o|xSbWqtk{ki(!#*BEE#{*k!lE?T*x+EDX z`8+}66x!@-vO;n?&<-t8qvx59e*Mr8i_F;4(4(Ilr}~9{202>zo|&h{P=6nyCfP!} zW=rT;O*Bw7EkV>3VzNk!xf%21r75nX8#06}b6arPk258>qPj&N=U|T^3zTd*qb^xT zwFnj+-O_9NBI?0wS6H2%^9s8*<|}qHGzxY_gP1(k&h-oJrgjEnE{p`M>KRx((1!Y< zCf=qNL*Ks`w=qi1fw<^xGJdqq<-A+kg+9Bcn8(IVQ!L>jzD?C@RFQRFVPD)q-*-^t z4OEU^2isP;{#9LX=$3WoYrN@$#aZTw_Zgl`m`X+Q{O@QGcL&;$E`Bmnb|X_gLns+s zqF1~QSwO+#e&XTGNG$5TAkGc>z2s)0`cvaQrS|`QRoQ@vC^?>)Sby!*JhzkqSy&Zq ztV++)MIlKGCWOOCCge8lLQ+adN?c^XxkHS`QNopwnk8jS;&u8|YIpj{VQ$JO%`G*A zj^m|O2@>gD6y*^-2=RvD7?y58z}|nl6|yVGa7nmV4$*kerY^_~U+S%&Mit1;J55LWaxsUB>_pa3Ihv)rhHJZ( zdQE+4qjTnG;_W_)^if^EN4+c=%S~ zE_^lO9okjy@-lZ21#4^`N@?WPPq&_~k3!Nbc2>de%Fcd=Muw9zgx$c3@a$EXPP(6R zxv-;ii@}YM=9x}pUYL8v4YC1SjVzOMK0v^@r(8B#Hd;C>-`36@Wh)ifq)V2hYlBKw zJ=M=^%(d zixdu;wbobq%AoY7TzOOG+Mmc8^UCuF+iSsk>&Zr5-FmdS{(L)VJ@{}nuWzn?^zrJ} zcJSfq_S(kdy#8pTwY}Qf4xX*Ho^G!xZ#Zz3+m4c6KYP+#%IEhlqc+(|K1UtBFzdjn z@1=Pe0U;7;l29S+TL7mJr(a@1`wLV6TmlM5g?Bx+DW0FU{9pofEX%xC}VJ5 z2_|C=#g5+);W0cC5F}|8i(FAeZa!Vz{yFAKBD8MS^}+l!Yxp|D(zJ~KOqwK?m_9Us z9aJFIiA7?^Xyv7#m&y!)w%iG2m}Mfr7Q`t6J9P&DHNhSMPVx6xM?9qJiu5Z=`ZT(Y zuaaW83!AX@!S!h(FGrEY$3JRQQRYAyi1ICnd`PH@U?dQRxjg6nKuNFEt^95y5nYgNDf_fu@ zeV0^Qv4*1$mZoJk8Zkrkv~tC|+Nzb?g_3|=eu^IPjH*ql9#VBh zVWlVQ&sMj3_);hf+d^3j(;KT1t>&EgE1LfnRc}+JLL})*RH<5{>O-nFsQL(1?u_#m zu|==e^Np?TDGDyb=wIXWeH2L+>cGD^w+$1PQ*ui5G%Wa-lAuv!S2I6z^d^a@aY*H+ zZ~ao+Qz!R@gY>2dt@baWW4{bFmWlwmRsi)Gq0)k+0u|Pg{=yQ5Z~~`#gy8mX`mYee z3V=m9>DV;Qyd?W@>Pjm9ygD@9h#?C&4h2%gk;#T)U*`59`u62Z9mhXt$Dxz}9G9{n zxt^jZJ6Ht987NOWBK6Xfjv2>LjhxBEdVhcu=D3;0r_1kH8JE zh_HQ*;Eh)C-3lCLoLUDJ6qiE$S!o}E_q=+ceW?Qf3%niF&gU+)$G{z5>Ss1`w9=_P z#Hv~S)B;HmAjpCQOMjoeuNL9Vx_Y?BNzuiV?`3IDt&KKNJKlO$~X;tg%^7M+hv zg|w0Q2Ep>ZI7Lf-usoTS*U4W7Svrc)g9R1PROd0$Xc$a$Ne~(ne?t{*;LnTVA^~$$ z9H;CxVd5X~EuR~IQ)c7W$m<}=_tHdizaEV8&cdh=t!u~vtZ!Uf<(J=B z=G8M&EYozZIxTV`f_zBfzEZT1ycPm$b5i3JO@tqWLO-9Nb%LT&cY^sfqhSf^eZ@j2 z$M7=Pj?ja`*OZx27#aLvlV^RAc(_LKD4^ipM9J+f=}oY!7fLUrI~L%8WwA`;d><9u z$rEb3sB)Weby+lmMug?2SWwjeE&6_qq71lZ)C@sAGn5n66UzS?FPXwUIK~dOw%|kn z8*r+IW^YNgEo#$+gLsd@u^ef_%a9>5ax8|zN*a~!HlfGspTt$F$J^ZF*1t~=^RzPLCQ2KAAHwE{-5i+OS9JS6-D57vT=F8st zp7#KEHxNEjL0Ipxz=`l8>GdUN??4$!Imewa^N!Pg%)Cx`#Jye46SWZSTR>=!Ahg#L zQ3?U1xEMRZWLgb6^WK&z?!lnatK*?qIbMr^p&HPRBM^$w@C&ksyQb)fH{bF42{2c& z#FLH9N2|d!hX6Bbr${Qg@anx?kdbu=f-bA>mhX-xeZ2WhIYPg-x%zm0bM?`7fUe>W zaYbeFD}|x0zzCXUK~ctEcx7K@fB@SP;j6~6iLap>)3j|j60KWEQ=D2ntn%jtlHO(p`2uUI_}MwEul8VGlGoZC-S^-B;g9aV3*<+sN^UEZ&tDcY$xSSkmq+X5B}L9vk4dkMAa+=70=Q42b2+~HC^?zny=>u&J+cGzgk?bE+a+VD=hM|NAMzSUYm>&e0dZI zr69a8ncl%Iy|B?E2rmi3=96!*PpKlYe|@x2KZ|0yJkHOQv-NMzeB0|Mg|Wm60^|P* z>JE6hm?`)^{~VDnCRj+>tsvl{Qg(%8^XfxH;t`5au|&D$0tqOQkz}T%HGzn^bFa9+ l`hXGu`CU{s4SpS1@fu3;=NNUf@$TY}obNhi=R38z{{q6&D0Tn< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/handlers/asgi.py b/venv/Lib/site-packages/django/core/handlers/asgi.py new file mode 100644 index 000000000..7b17c5815 --- /dev/null +++ b/venv/Lib/site-packages/django/core/handlers/asgi.py @@ -0,0 +1,311 @@ +import logging +import sys +import tempfile +import traceback + +from asgiref.sync import ThreadSensitiveContext, sync_to_async + +from django.conf import settings +from django.core import signals +from django.core.exceptions import RequestAborted, RequestDataTooBig +from django.core.handlers import base +from django.http import ( + FileResponse, + HttpRequest, + HttpResponse, + HttpResponseBadRequest, + HttpResponseServerError, + QueryDict, + parse_cookie, +) +from django.urls import set_script_prefix +from django.utils.functional import cached_property + +logger = logging.getLogger("django.request") + + +class ASGIRequest(HttpRequest): + """ + Custom request subclass that decodes from an ASGI-standard request dict + and wraps request body handling. + """ + + # Number of seconds until a Request gives up on trying to read a request + # body and aborts. + body_receive_timeout = 60 + + def __init__(self, scope, body_file): + self.scope = scope + self._post_parse_error = False + self._read_started = False + self.resolver_match = None + self.script_name = self.scope.get("root_path", "") + if self.script_name and scope["path"].startswith(self.script_name): + # TODO: Better is-prefix checking, slash handling? + self.path_info = scope["path"][len(self.script_name) :] + else: + self.path_info = scope["path"] + # The Django path is different from ASGI scope path args, it should + # combine with script name. + if self.script_name: + self.path = "%s/%s" % ( + self.script_name.rstrip("/"), + self.path_info.replace("/", "", 1), + ) + else: + self.path = scope["path"] + # HTTP basics. + self.method = self.scope["method"].upper() + # Ensure query string is encoded correctly. + query_string = self.scope.get("query_string", "") + if isinstance(query_string, bytes): + query_string = query_string.decode() + self.META = { + "REQUEST_METHOD": self.method, + "QUERY_STRING": query_string, + "SCRIPT_NAME": self.script_name, + "PATH_INFO": self.path_info, + # WSGI-expecting code will need these for a while + "wsgi.multithread": True, + "wsgi.multiprocess": True, + } + if self.scope.get("client"): + self.META["REMOTE_ADDR"] = self.scope["client"][0] + self.META["REMOTE_HOST"] = self.META["REMOTE_ADDR"] + self.META["REMOTE_PORT"] = self.scope["client"][1] + if self.scope.get("server"): + self.META["SERVER_NAME"] = self.scope["server"][0] + self.META["SERVER_PORT"] = str(self.scope["server"][1]) + else: + self.META["SERVER_NAME"] = "unknown" + self.META["SERVER_PORT"] = "0" + # Headers go into META. + for name, value in self.scope.get("headers", []): + name = name.decode("latin1") + if name == "content-length": + corrected_name = "CONTENT_LENGTH" + elif name == "content-type": + corrected_name = "CONTENT_TYPE" + else: + corrected_name = "HTTP_%s" % name.upper().replace("-", "_") + # HTTP/2 say only ASCII chars are allowed in headers, but decode + # latin1 just in case. + value = value.decode("latin1") + if corrected_name in self.META: + value = self.META[corrected_name] + "," + value + self.META[corrected_name] = value + # Pull out request encoding, if provided. + self._set_content_type_params(self.META) + # Directly assign the body file to be our stream. + self._stream = body_file + # Other bits. + self.resolver_match = None + + @cached_property + def GET(self): + return QueryDict(self.META["QUERY_STRING"]) + + def _get_scheme(self): + return self.scope.get("scheme") or super()._get_scheme() + + def _get_post(self): + if not hasattr(self, "_post"): + self._load_post_and_files() + return self._post + + def _set_post(self, post): + self._post = post + + def _get_files(self): + if not hasattr(self, "_files"): + self._load_post_and_files() + return self._files + + POST = property(_get_post, _set_post) + FILES = property(_get_files) + + @cached_property + def COOKIES(self): + return parse_cookie(self.META.get("HTTP_COOKIE", "")) + + +class ASGIHandler(base.BaseHandler): + """Handler for ASGI requests.""" + + request_class = ASGIRequest + # Size to chunk response bodies into for multiple response messages. + chunk_size = 2**16 + + def __init__(self): + super().__init__() + self.load_middleware(is_async=True) + + async def __call__(self, scope, receive, send): + """ + Async entrypoint - parses the request and hands off to get_response. + """ + # Serve only HTTP connections. + # FIXME: Allow to override this. + if scope["type"] != "http": + raise ValueError( + "Django can only handle ASGI/HTTP connections, not %s." % scope["type"] + ) + + async with ThreadSensitiveContext(): + await self.handle(scope, receive, send) + + async def handle(self, scope, receive, send): + """ + Handles the ASGI request. Called via the __call__ method. + """ + # Receive the HTTP request body as a stream object. + try: + body_file = await self.read_body(receive) + except RequestAborted: + return + # Request is complete and can be served. + set_script_prefix(self.get_script_prefix(scope)) + await sync_to_async(signals.request_started.send, thread_sensitive=True)( + sender=self.__class__, scope=scope + ) + # Get the request and check for basic issues. + request, error_response = self.create_request(scope, body_file) + if request is None: + await self.send_response(error_response, send) + return + # Get the response, using the async mode of BaseHandler. + response = await self.get_response_async(request) + response._handler_class = self.__class__ + # Increase chunk size on file responses (ASGI servers handles low-level + # chunking). + if isinstance(response, FileResponse): + response.block_size = self.chunk_size + # Send the response. + await self.send_response(response, send) + + async def read_body(self, receive): + """Reads an HTTP body from an ASGI connection.""" + # Use the tempfile that auto rolls-over to a disk file as it fills up. + body_file = tempfile.SpooledTemporaryFile( + max_size=settings.FILE_UPLOAD_MAX_MEMORY_SIZE, mode="w+b" + ) + while True: + message = await receive() + if message["type"] == "http.disconnect": + # Early client disconnect. + raise RequestAborted() + # Add a body chunk from the message, if provided. + if "body" in message: + body_file.write(message["body"]) + # Quit out if that's the end. + if not message.get("more_body", False): + break + body_file.seek(0) + return body_file + + def create_request(self, scope, body_file): + """ + Create the Request object and returns either (request, None) or + (None, response) if there is an error response. + """ + try: + return self.request_class(scope, body_file), None + except UnicodeDecodeError: + logger.warning( + "Bad Request (UnicodeDecodeError)", + exc_info=sys.exc_info(), + extra={"status_code": 400}, + ) + return None, HttpResponseBadRequest() + except RequestDataTooBig: + return None, HttpResponse("413 Payload too large", status=413) + + def handle_uncaught_exception(self, request, resolver, exc_info): + """Last-chance handler for exceptions.""" + # There's no WSGI server to catch the exception further up + # if this fails, so translate it into a plain text response. + try: + return super().handle_uncaught_exception(request, resolver, exc_info) + except Exception: + return HttpResponseServerError( + traceback.format_exc() if settings.DEBUG else "Internal Server Error", + content_type="text/plain", + ) + + async def send_response(self, response, send): + """Encode and send a response out over ASGI.""" + # Collect cookies into headers. Have to preserve header case as there + # are some non-RFC compliant clients that require e.g. Content-Type. + response_headers = [] + for header, value in response.items(): + if isinstance(header, str): + header = header.encode("ascii") + if isinstance(value, str): + value = value.encode("latin1") + response_headers.append((bytes(header), bytes(value))) + for c in response.cookies.values(): + response_headers.append( + (b"Set-Cookie", c.output(header="").encode("ascii").strip()) + ) + # Initial response message. + await send( + { + "type": "http.response.start", + "status": response.status_code, + "headers": response_headers, + } + ) + # Streaming responses need to be pinned to their iterator. + if response.streaming: + # Access `__iter__` and not `streaming_content` directly in case + # it has been overridden in a subclass. + for part in response: + for chunk, _ in self.chunk_bytes(part): + await send( + { + "type": "http.response.body", + "body": chunk, + # Ignore "more" as there may be more parts; instead, + # use an empty final closing message with False. + "more_body": True, + } + ) + # Final closing message. + await send({"type": "http.response.body"}) + # Other responses just need chunking. + else: + # Yield chunks of response. + for chunk, last in self.chunk_bytes(response.content): + await send( + { + "type": "http.response.body", + "body": chunk, + "more_body": not last, + } + ) + await sync_to_async(response.close, thread_sensitive=True)() + + @classmethod + def chunk_bytes(cls, data): + """ + Chunks some data up so it can be sent in reasonable size messages. + Yields (chunk, last_chunk) tuples. + """ + position = 0 + if not data: + yield data, True + return + while position < len(data): + yield ( + data[position : position + cls.chunk_size], + (position + cls.chunk_size) >= len(data), + ) + position += cls.chunk_size + + def get_script_prefix(self, scope): + """ + Return the script prefix to use from either the scope or a setting. + """ + if settings.FORCE_SCRIPT_NAME: + return settings.FORCE_SCRIPT_NAME + return scope.get("root_path", "") or "" diff --git a/venv/Lib/site-packages/django/core/handlers/base.py b/venv/Lib/site-packages/django/core/handlers/base.py new file mode 100644 index 000000000..0f341a532 --- /dev/null +++ b/venv/Lib/site-packages/django/core/handlers/base.py @@ -0,0 +1,376 @@ +import asyncio +import logging +import types + +from asgiref.sync import async_to_sync, sync_to_async + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured, MiddlewareNotUsed +from django.core.signals import request_finished +from django.db import connections, transaction +from django.urls import get_resolver, set_urlconf +from django.utils.log import log_response +from django.utils.module_loading import import_string + +from .exception import convert_exception_to_response + +logger = logging.getLogger("django.request") + + +class BaseHandler: + _view_middleware = None + _template_response_middleware = None + _exception_middleware = None + _middleware_chain = None + + def load_middleware(self, is_async=False): + """ + Populate middleware lists from settings.MIDDLEWARE. + + Must be called after the environment is fixed (see __call__ in subclasses). + """ + self._view_middleware = [] + self._template_response_middleware = [] + self._exception_middleware = [] + + get_response = self._get_response_async if is_async else self._get_response + handler = convert_exception_to_response(get_response) + handler_is_async = is_async + for middleware_path in reversed(settings.MIDDLEWARE): + middleware = import_string(middleware_path) + middleware_can_sync = getattr(middleware, "sync_capable", True) + middleware_can_async = getattr(middleware, "async_capable", False) + if not middleware_can_sync and not middleware_can_async: + raise RuntimeError( + "Middleware %s must have at least one of " + "sync_capable/async_capable set to True." % middleware_path + ) + elif not handler_is_async and middleware_can_sync: + middleware_is_async = False + else: + middleware_is_async = middleware_can_async + try: + # Adapt handler, if needed. + adapted_handler = self.adapt_method_mode( + middleware_is_async, + handler, + handler_is_async, + debug=settings.DEBUG, + name="middleware %s" % middleware_path, + ) + mw_instance = middleware(adapted_handler) + except MiddlewareNotUsed as exc: + if settings.DEBUG: + if str(exc): + logger.debug("MiddlewareNotUsed(%r): %s", middleware_path, exc) + else: + logger.debug("MiddlewareNotUsed: %r", middleware_path) + continue + else: + handler = adapted_handler + + if mw_instance is None: + raise ImproperlyConfigured( + "Middleware factory %s returned None." % middleware_path + ) + + if hasattr(mw_instance, "process_view"): + self._view_middleware.insert( + 0, + self.adapt_method_mode(is_async, mw_instance.process_view), + ) + if hasattr(mw_instance, "process_template_response"): + self._template_response_middleware.append( + self.adapt_method_mode( + is_async, mw_instance.process_template_response + ), + ) + if hasattr(mw_instance, "process_exception"): + # The exception-handling stack is still always synchronous for + # now, so adapt that way. + self._exception_middleware.append( + self.adapt_method_mode(False, mw_instance.process_exception), + ) + + handler = convert_exception_to_response(mw_instance) + handler_is_async = middleware_is_async + + # Adapt the top of the stack, if needed. + handler = self.adapt_method_mode(is_async, handler, handler_is_async) + # We only assign to this when initialization is complete as it is used + # as a flag for initialization being complete. + self._middleware_chain = handler + + def adapt_method_mode( + self, + is_async, + method, + method_is_async=None, + debug=False, + name=None, + ): + """ + Adapt a method to be in the correct "mode": + - If is_async is False: + - Synchronous methods are left alone + - Asynchronous methods are wrapped with async_to_sync + - If is_async is True: + - Synchronous methods are wrapped with sync_to_async() + - Asynchronous methods are left alone + """ + if method_is_async is None: + method_is_async = asyncio.iscoroutinefunction(method) + if debug and not name: + name = name or "method %s()" % method.__qualname__ + if is_async: + if not method_is_async: + if debug: + logger.debug("Synchronous %s adapted.", name) + return sync_to_async(method, thread_sensitive=True) + elif method_is_async: + if debug: + logger.debug("Asynchronous %s adapted.", name) + return async_to_sync(method) + return method + + def get_response(self, request): + """Return an HttpResponse object for the given HttpRequest.""" + # Setup default url resolver for this thread + set_urlconf(settings.ROOT_URLCONF) + response = self._middleware_chain(request) + response._resource_closers.append(request.close) + if response.status_code >= 400: + log_response( + "%s: %s", + response.reason_phrase, + request.path, + response=response, + request=request, + ) + return response + + async def get_response_async(self, request): + """ + Asynchronous version of get_response. + + Funneling everything, including WSGI, into a single async + get_response() is too slow. Avoid the context switch by using + a separate async response path. + """ + # Setup default url resolver for this thread. + set_urlconf(settings.ROOT_URLCONF) + response = await self._middleware_chain(request) + response._resource_closers.append(request.close) + if response.status_code >= 400: + await sync_to_async(log_response, thread_sensitive=False)( + "%s: %s", + response.reason_phrase, + request.path, + response=response, + request=request, + ) + return response + + def _get_response(self, request): + """ + Resolve and call the view, then apply view, exception, and + template_response middleware. This method is everything that happens + inside the request/response middleware. + """ + response = None + callback, callback_args, callback_kwargs = self.resolve_request(request) + + # Apply view middleware + for middleware_method in self._view_middleware: + response = middleware_method( + request, callback, callback_args, callback_kwargs + ) + if response: + break + + if response is None: + wrapped_callback = self.make_view_atomic(callback) + # If it is an asynchronous view, run it in a subthread. + if asyncio.iscoroutinefunction(wrapped_callback): + wrapped_callback = async_to_sync(wrapped_callback) + try: + response = wrapped_callback(request, *callback_args, **callback_kwargs) + except Exception as e: + response = self.process_exception_by_middleware(e, request) + if response is None: + raise + + # Complain if the view returned None (a common error). + self.check_response(response, callback) + + # If the response supports deferred rendering, apply template + # response middleware and then render the response + if hasattr(response, "render") and callable(response.render): + for middleware_method in self._template_response_middleware: + response = middleware_method(request, response) + # Complain if the template response middleware returned None + # (a common error). + self.check_response( + response, + middleware_method, + name="%s.process_template_response" + % (middleware_method.__self__.__class__.__name__,), + ) + try: + response = response.render() + except Exception as e: + response = self.process_exception_by_middleware(e, request) + if response is None: + raise + + return response + + async def _get_response_async(self, request): + """ + Resolve and call the view, then apply view, exception, and + template_response middleware. This method is everything that happens + inside the request/response middleware. + """ + response = None + callback, callback_args, callback_kwargs = self.resolve_request(request) + + # Apply view middleware. + for middleware_method in self._view_middleware: + response = await middleware_method( + request, callback, callback_args, callback_kwargs + ) + if response: + break + + if response is None: + wrapped_callback = self.make_view_atomic(callback) + # If it is a synchronous view, run it in a subthread + if not asyncio.iscoroutinefunction(wrapped_callback): + wrapped_callback = sync_to_async( + wrapped_callback, thread_sensitive=True + ) + try: + response = await wrapped_callback( + request, *callback_args, **callback_kwargs + ) + except Exception as e: + response = await sync_to_async( + self.process_exception_by_middleware, + thread_sensitive=True, + )(e, request) + if response is None: + raise + + # Complain if the view returned None or an uncalled coroutine. + self.check_response(response, callback) + + # If the response supports deferred rendering, apply template + # response middleware and then render the response + if hasattr(response, "render") and callable(response.render): + for middleware_method in self._template_response_middleware: + response = await middleware_method(request, response) + # Complain if the template response middleware returned None or + # an uncalled coroutine. + self.check_response( + response, + middleware_method, + name="%s.process_template_response" + % (middleware_method.__self__.__class__.__name__,), + ) + try: + if asyncio.iscoroutinefunction(response.render): + response = await response.render() + else: + response = await sync_to_async( + response.render, thread_sensitive=True + )() + except Exception as e: + response = await sync_to_async( + self.process_exception_by_middleware, + thread_sensitive=True, + )(e, request) + if response is None: + raise + + # Make sure the response is not a coroutine + if asyncio.iscoroutine(response): + raise RuntimeError("Response is still a coroutine.") + return response + + def resolve_request(self, request): + """ + Retrieve/set the urlconf for the request. Return the view resolved, + with its args and kwargs. + """ + # Work out the resolver. + if hasattr(request, "urlconf"): + urlconf = request.urlconf + set_urlconf(urlconf) + resolver = get_resolver(urlconf) + else: + resolver = get_resolver() + # Resolve the view, and assign the match object back to the request. + resolver_match = resolver.resolve(request.path_info) + request.resolver_match = resolver_match + return resolver_match + + def check_response(self, response, callback, name=None): + """ + Raise an error if the view returned None or an uncalled coroutine. + """ + if not (response is None or asyncio.iscoroutine(response)): + return + if not name: + if isinstance(callback, types.FunctionType): # FBV + name = "The view %s.%s" % (callback.__module__, callback.__name__) + else: # CBV + name = "The view %s.%s.__call__" % ( + callback.__module__, + callback.__class__.__name__, + ) + if response is None: + raise ValueError( + "%s didn't return an HttpResponse object. It returned None " + "instead." % name + ) + elif asyncio.iscoroutine(response): + raise ValueError( + "%s didn't return an HttpResponse object. It returned an " + "unawaited coroutine instead. You may need to add an 'await' " + "into your view." % name + ) + + # Other utility methods. + + def make_view_atomic(self, view): + non_atomic_requests = getattr(view, "_non_atomic_requests", set()) + for db in connections.all(): + if ( + db.settings_dict["ATOMIC_REQUESTS"] + and db.alias not in non_atomic_requests + ): + if asyncio.iscoroutinefunction(view): + raise RuntimeError( + "You cannot use ATOMIC_REQUESTS with async views." + ) + view = transaction.atomic(using=db.alias)(view) + return view + + def process_exception_by_middleware(self, exception, request): + """ + Pass the exception to the exception middleware. If no middleware + return a response for this exception, return None. + """ + for middleware_method in self._exception_middleware: + response = middleware_method(request, exception) + if response: + return response + return None + + +def reset_urlconf(sender, **kwargs): + """Reset the URLconf after each request is finished.""" + set_urlconf(None) + + +request_finished.connect(reset_urlconf) diff --git a/venv/Lib/site-packages/django/core/handlers/exception.py b/venv/Lib/site-packages/django/core/handlers/exception.py new file mode 100644 index 000000000..622c53134 --- /dev/null +++ b/venv/Lib/site-packages/django/core/handlers/exception.py @@ -0,0 +1,184 @@ +import asyncio +import logging +import sys +from functools import wraps + +from asgiref.sync import sync_to_async + +from django.conf import settings +from django.core import signals +from django.core.exceptions import ( + BadRequest, + PermissionDenied, + RequestDataTooBig, + SuspiciousOperation, + TooManyFieldsSent, +) +from django.http import Http404 +from django.http.multipartparser import MultiPartParserError +from django.urls import get_resolver, get_urlconf +from django.utils.log import log_response +from django.views import debug + + +def convert_exception_to_response(get_response): + """ + Wrap the given get_response callable in exception-to-response conversion. + + All exceptions will be converted. All known 4xx exceptions (Http404, + PermissionDenied, MultiPartParserError, SuspiciousOperation) will be + converted to the appropriate response, and all other exceptions will be + converted to 500 responses. + + This decorator is automatically applied to all middleware to ensure that + no middleware leaks an exception and that the next middleware in the stack + can rely on getting a response instead of an exception. + """ + if asyncio.iscoroutinefunction(get_response): + + @wraps(get_response) + async def inner(request): + try: + response = await get_response(request) + except Exception as exc: + response = await sync_to_async( + response_for_exception, thread_sensitive=False + )(request, exc) + return response + + return inner + else: + + @wraps(get_response) + def inner(request): + try: + response = get_response(request) + except Exception as exc: + response = response_for_exception(request, exc) + return response + + return inner + + +def response_for_exception(request, exc): + if isinstance(exc, Http404): + if settings.DEBUG: + response = debug.technical_404_response(request, exc) + else: + response = get_exception_response( + request, get_resolver(get_urlconf()), 404, exc + ) + + elif isinstance(exc, PermissionDenied): + response = get_exception_response( + request, get_resolver(get_urlconf()), 403, exc + ) + log_response( + "Forbidden (Permission denied): %s", + request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + elif isinstance(exc, MultiPartParserError): + response = get_exception_response( + request, get_resolver(get_urlconf()), 400, exc + ) + log_response( + "Bad request (Unable to parse request body): %s", + request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + elif isinstance(exc, BadRequest): + if settings.DEBUG: + response = debug.technical_500_response( + request, *sys.exc_info(), status_code=400 + ) + else: + response = get_exception_response( + request, get_resolver(get_urlconf()), 400, exc + ) + log_response( + "%s: %s", + str(exc), + request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + elif isinstance(exc, SuspiciousOperation): + if isinstance(exc, (RequestDataTooBig, TooManyFieldsSent)): + # POST data can't be accessed again, otherwise the original + # exception would be raised. + request._mark_post_parse_error() + + # The request logger receives events for any problematic request + # The security logger receives events for all SuspiciousOperations + security_logger = logging.getLogger( + "django.security.%s" % exc.__class__.__name__ + ) + security_logger.error( + str(exc), + extra={"status_code": 400, "request": request}, + ) + if settings.DEBUG: + response = debug.technical_500_response( + request, *sys.exc_info(), status_code=400 + ) + else: + response = get_exception_response( + request, get_resolver(get_urlconf()), 400, exc + ) + + else: + signals.got_request_exception.send(sender=None, request=request) + response = handle_uncaught_exception( + request, get_resolver(get_urlconf()), sys.exc_info() + ) + log_response( + "%s: %s", + response.reason_phrase, + request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + # Force a TemplateResponse to be rendered. + if not getattr(response, "is_rendered", True) and callable( + getattr(response, "render", None) + ): + response = response.render() + + return response + + +def get_exception_response(request, resolver, status_code, exception): + try: + callback = resolver.resolve_error_handler(status_code) + response = callback(request, exception=exception) + except Exception: + signals.got_request_exception.send(sender=None, request=request) + response = handle_uncaught_exception(request, resolver, sys.exc_info()) + + return response + + +def handle_uncaught_exception(request, resolver, exc_info): + """ + Processing for any otherwise uncaught exceptions (those that will + generate HTTP 500 responses). + """ + if settings.DEBUG_PROPAGATE_EXCEPTIONS: + raise + + if settings.DEBUG: + return debug.technical_500_response(request, *exc_info) + + # Return an HttpResponse that displays a friendly error message. + callback = resolver.resolve_error_handler(500) + return callback(request) diff --git a/venv/Lib/site-packages/django/core/handlers/wsgi.py b/venv/Lib/site-packages/django/core/handlers/wsgi.py new file mode 100644 index 000000000..621130b65 --- /dev/null +++ b/venv/Lib/site-packages/django/core/handlers/wsgi.py @@ -0,0 +1,215 @@ +from io import BytesIO + +from django.conf import settings +from django.core import signals +from django.core.handlers import base +from django.http import HttpRequest, QueryDict, parse_cookie +from django.urls import set_script_prefix +from django.utils.encoding import repercent_broken_unicode +from django.utils.functional import cached_property +from django.utils.regex_helper import _lazy_re_compile + +_slashes_re = _lazy_re_compile(rb"/+") + + +class LimitedStream: + """Wrap another stream to disallow reading it past a number of bytes.""" + + def __init__(self, stream, limit, buf_size=64 * 1024 * 1024): + self.stream = stream + self.remaining = limit + self.buffer = b"" + self.buf_size = buf_size + + def _read_limited(self, size=None): + if size is None or size > self.remaining: + size = self.remaining + if size == 0: + return b"" + result = self.stream.read(size) + self.remaining -= len(result) + return result + + def read(self, size=None): + if size is None: + result = self.buffer + self._read_limited() + self.buffer = b"" + elif size < len(self.buffer): + result = self.buffer[:size] + self.buffer = self.buffer[size:] + else: # size >= len(self.buffer) + result = self.buffer + self._read_limited(size - len(self.buffer)) + self.buffer = b"" + return result + + def readline(self, size=None): + while b"\n" not in self.buffer and (size is None or len(self.buffer) < size): + if size: + # since size is not None here, len(self.buffer) < size + chunk = self._read_limited(size - len(self.buffer)) + else: + chunk = self._read_limited() + if not chunk: + break + self.buffer += chunk + sio = BytesIO(self.buffer) + if size: + line = sio.readline(size) + else: + line = sio.readline() + self.buffer = sio.read() + return line + + +class WSGIRequest(HttpRequest): + def __init__(self, environ): + script_name = get_script_name(environ) + # If PATH_INFO is empty (e.g. accessing the SCRIPT_NAME URL without a + # trailing slash), operate as if '/' was requested. + path_info = get_path_info(environ) or "/" + self.environ = environ + self.path_info = path_info + # be careful to only replace the first slash in the path because of + # http://test/something and http://test//something being different as + # stated in https://www.ietf.org/rfc/rfc2396.txt + self.path = "%s/%s" % (script_name.rstrip("/"), path_info.replace("/", "", 1)) + self.META = environ + self.META["PATH_INFO"] = path_info + self.META["SCRIPT_NAME"] = script_name + self.method = environ["REQUEST_METHOD"].upper() + # Set content_type, content_params, and encoding. + self._set_content_type_params(environ) + try: + content_length = int(environ.get("CONTENT_LENGTH")) + except (ValueError, TypeError): + content_length = 0 + self._stream = LimitedStream(self.environ["wsgi.input"], content_length) + self._read_started = False + self.resolver_match = None + + def _get_scheme(self): + return self.environ.get("wsgi.url_scheme") + + @cached_property + def GET(self): + # The WSGI spec says 'QUERY_STRING' may be absent. + raw_query_string = get_bytes_from_wsgi(self.environ, "QUERY_STRING", "") + return QueryDict(raw_query_string, encoding=self._encoding) + + def _get_post(self): + if not hasattr(self, "_post"): + self._load_post_and_files() + return self._post + + def _set_post(self, post): + self._post = post + + @cached_property + def COOKIES(self): + raw_cookie = get_str_from_wsgi(self.environ, "HTTP_COOKIE", "") + return parse_cookie(raw_cookie) + + @property + def FILES(self): + if not hasattr(self, "_files"): + self._load_post_and_files() + return self._files + + POST = property(_get_post, _set_post) + + +class WSGIHandler(base.BaseHandler): + request_class = WSGIRequest + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.load_middleware() + + def __call__(self, environ, start_response): + set_script_prefix(get_script_name(environ)) + signals.request_started.send(sender=self.__class__, environ=environ) + request = self.request_class(environ) + response = self.get_response(request) + + response._handler_class = self.__class__ + + status = "%d %s" % (response.status_code, response.reason_phrase) + response_headers = [ + *response.items(), + *(("Set-Cookie", c.output(header="")) for c in response.cookies.values()), + ] + start_response(status, response_headers) + if getattr(response, "file_to_stream", None) is not None and environ.get( + "wsgi.file_wrapper" + ): + # If `wsgi.file_wrapper` is used the WSGI server does not call + # .close on the response, but on the file wrapper. Patch it to use + # response.close instead which takes care of closing all files. + response.file_to_stream.close = response.close + response = environ["wsgi.file_wrapper"]( + response.file_to_stream, response.block_size + ) + return response + + +def get_path_info(environ): + """Return the HTTP request's PATH_INFO as a string.""" + path_info = get_bytes_from_wsgi(environ, "PATH_INFO", "/") + + return repercent_broken_unicode(path_info).decode() + + +def get_script_name(environ): + """ + Return the equivalent of the HTTP request's SCRIPT_NAME environment + variable. If Apache mod_rewrite is used, return what would have been + the script name prior to any rewriting (so it's the script name as seen + from the client's perspective), unless the FORCE_SCRIPT_NAME setting is + set (to anything). + """ + if settings.FORCE_SCRIPT_NAME is not None: + return settings.FORCE_SCRIPT_NAME + + # If Apache's mod_rewrite had a whack at the URL, Apache set either + # SCRIPT_URL or REDIRECT_URL to the full resource URL before applying any + # rewrites. Unfortunately not every web server (lighttpd!) passes this + # information through all the time, so FORCE_SCRIPT_NAME, above, is still + # needed. + script_url = get_bytes_from_wsgi(environ, "SCRIPT_URL", "") or get_bytes_from_wsgi( + environ, "REDIRECT_URL", "" + ) + + if script_url: + if b"//" in script_url: + # mod_wsgi squashes multiple successive slashes in PATH_INFO, + # do the same with script_url before manipulating paths (#17133). + script_url = _slashes_re.sub(b"/", script_url) + path_info = get_bytes_from_wsgi(environ, "PATH_INFO", "") + script_name = script_url[: -len(path_info)] if path_info else script_url + else: + script_name = get_bytes_from_wsgi(environ, "SCRIPT_NAME", "") + + return script_name.decode() + + +def get_bytes_from_wsgi(environ, key, default): + """ + Get a value from the WSGI environ dictionary as bytes. + + key and default should be strings. + """ + value = environ.get(key, default) + # Non-ASCII values in the WSGI environ are arbitrarily decoded with + # ISO-8859-1. This is wrong for Django websites where UTF-8 is the default. + # Re-encode to recover the original bytestring. + return value.encode("iso-8859-1") + + +def get_str_from_wsgi(environ, key, default): + """ + Get a value from the WSGI environ dictionary as str. + + key and default should be str objects. + """ + value = get_bytes_from_wsgi(environ, key, default) + return value.decode(errors="replace") diff --git a/venv/Lib/site-packages/django/core/mail/__init__.py b/venv/Lib/site-packages/django/core/mail/__init__.py new file mode 100644 index 000000000..dc63e8702 --- /dev/null +++ b/venv/Lib/site-packages/django/core/mail/__init__.py @@ -0,0 +1,154 @@ +""" +Tools for sending email. +""" +from django.conf import settings + +# Imported for backwards compatibility and for the sake +# of a cleaner namespace. These symbols used to be in +# django/core/mail.py before the introduction of email +# backends and the subsequent reorganization (See #10355) +from django.core.mail.message import ( + DEFAULT_ATTACHMENT_MIME_TYPE, + BadHeaderError, + EmailMessage, + EmailMultiAlternatives, + SafeMIMEMultipart, + SafeMIMEText, + forbid_multi_line_headers, + make_msgid, +) +from django.core.mail.utils import DNS_NAME, CachedDnsName +from django.utils.module_loading import import_string + +__all__ = [ + "CachedDnsName", + "DNS_NAME", + "EmailMessage", + "EmailMultiAlternatives", + "SafeMIMEText", + "SafeMIMEMultipart", + "DEFAULT_ATTACHMENT_MIME_TYPE", + "make_msgid", + "BadHeaderError", + "forbid_multi_line_headers", + "get_connection", + "send_mail", + "send_mass_mail", + "mail_admins", + "mail_managers", +] + + +def get_connection(backend=None, fail_silently=False, **kwds): + """Load an email backend and return an instance of it. + + If backend is None (default), use settings.EMAIL_BACKEND. + + Both fail_silently and other keyword arguments are used in the + constructor of the backend. + """ + klass = import_string(backend or settings.EMAIL_BACKEND) + return klass(fail_silently=fail_silently, **kwds) + + +def send_mail( + subject, + message, + from_email, + recipient_list, + fail_silently=False, + auth_user=None, + auth_password=None, + connection=None, + html_message=None, +): + """ + Easy wrapper for sending a single message to a recipient list. All members + of the recipient list will see the other recipients in the 'To' field. + + If from_email is None, use the DEFAULT_FROM_EMAIL setting. + If auth_user is None, use the EMAIL_HOST_USER setting. + If auth_password is None, use the EMAIL_HOST_PASSWORD setting. + + Note: The API for this method is frozen. New code wanting to extend the + functionality should use the EmailMessage class directly. + """ + connection = connection or get_connection( + username=auth_user, + password=auth_password, + fail_silently=fail_silently, + ) + mail = EmailMultiAlternatives( + subject, message, from_email, recipient_list, connection=connection + ) + if html_message: + mail.attach_alternative(html_message, "text/html") + + return mail.send() + + +def send_mass_mail( + datatuple, fail_silently=False, auth_user=None, auth_password=None, connection=None +): + """ + Given a datatuple of (subject, message, from_email, recipient_list), send + each message to each recipient list. Return the number of emails sent. + + If from_email is None, use the DEFAULT_FROM_EMAIL setting. + If auth_user and auth_password are set, use them to log in. + If auth_user is None, use the EMAIL_HOST_USER setting. + If auth_password is None, use the EMAIL_HOST_PASSWORD setting. + + Note: The API for this method is frozen. New code wanting to extend the + functionality should use the EmailMessage class directly. + """ + connection = connection or get_connection( + username=auth_user, + password=auth_password, + fail_silently=fail_silently, + ) + messages = [ + EmailMessage(subject, message, sender, recipient, connection=connection) + for subject, message, sender, recipient in datatuple + ] + return connection.send_messages(messages) + + +def mail_admins( + subject, message, fail_silently=False, connection=None, html_message=None +): + """Send a message to the admins, as defined by the ADMINS setting.""" + if not settings.ADMINS: + return + if not all(isinstance(a, (list, tuple)) and len(a) == 2 for a in settings.ADMINS): + raise ValueError("The ADMINS setting must be a list of 2-tuples.") + mail = EmailMultiAlternatives( + "%s%s" % (settings.EMAIL_SUBJECT_PREFIX, subject), + message, + settings.SERVER_EMAIL, + [a[1] for a in settings.ADMINS], + connection=connection, + ) + if html_message: + mail.attach_alternative(html_message, "text/html") + mail.send(fail_silently=fail_silently) + + +def mail_managers( + subject, message, fail_silently=False, connection=None, html_message=None +): + """Send a message to the managers, as defined by the MANAGERS setting.""" + if not settings.MANAGERS: + return + if not all(isinstance(a, (list, tuple)) and len(a) == 2 for a in settings.MANAGERS): + raise ValueError("The MANAGERS setting must be a list of 2-tuples.") + mail = EmailMultiAlternatives( + "%s%s" % (settings.EMAIL_SUBJECT_PREFIX, subject), + message, + settings.SERVER_EMAIL, + [a[1] for a in settings.MANAGERS], + connection=connection, + ) + if html_message: + mail.attach_alternative(html_message, "text/html") + mail.send(fail_silently=fail_silently) diff --git a/venv/Lib/site-packages/django/core/mail/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/mail/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d661edd4c570a7a962f158d1e250f4a72d6477d3 GIT binary patch literal 4419 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 CDo(Nh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/mail/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/core/mail/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cd1632641d6ba1067c0faa73a9c645be0966c27 GIT binary patch literal 831 zcmZuv&2Q5%6u0xyhNzvmj1xk+_OO;SAT-o&;{Xw2;u1x(()hJampGm6Oj^}j_lIo9 z{Y#NJapDi)vJ=k{c3eS+=R#rNqWCFF;h>^B=H#~A80CQc&4DYtSO zQS9y9D(uLngF#$nZB(e;}TN2sa z<_`8q%}}ZP<0M@Gp9mEu1*E95tVkKFy@kM_**QgjC1ZAg<$2*)&#}hND%I zUZN!`=F3FP%TZcN7#V9umCkZCT;0@N#*~(f^$jmW(4*_aCo+bAPW&Usd|V^v6%I5C z;&f}No~GKmv+v24ZU}QWWa*$tE3Dl{-@vWAi$o<_OKIThjw;hj&~+CbFa}6dEz&i~ z7|dwUwVLZkJ{sLpQ&sb6NDmUXEV^>v@w>$FL?%h4C z2DJe+0((0^51r}R(yZZ6qiwuQ8Ixu|I&A$NwyuJ}Lc+Rh^febEZxWuf@Wbbm|KZf$ VyO!R2QzXjhcZlcotOM8ge*>kU#SH)e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/mail/backends/__init__.py b/venv/Lib/site-packages/django/core/mail/backends/__init__.py new file mode 100644 index 000000000..5973b499b --- /dev/null +++ b/venv/Lib/site-packages/django/core/mail/backends/__init__.py @@ -0,0 +1 @@ +# Mail backends shipped with Django. diff --git a/venv/Lib/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73762146a4912b7fe0ed153a0108484a223ea92f GIT binary patch literal 199 zcmd1j<>g`kg0FFRlT?B9V-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~EAEN82j(Bjmh z;+UY);^M>@m;B_?+|<01;u!bL5|7fP7`M!#;u76}qWrAX?m% z-GapA?8Nlc;+T}I#Ju!;{p9?jRQ=q<%pCnBpiF9BO0j-?d}dx|NqoFsLFFwDo80`A Q(wtN~kQ<7bfCLKz05)$nr2qf` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/mail/backends/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/core/mail/backends/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..279241f955c4e5cd5e36d4f2e8451745b6e10700 GIT binary patch literal 2430 zcmai0UvC>l5Z^mrlCx`vw4oJ$B(xF_#DY2xAR$Evp@gJV&`^;gB+KHoz8xpmoNvwU zUL0F_YV!^F0_8DZ$r4X|1jGvxe`faVi|wSa((Uc~W_D(O^P3r~Mx(}X{PE+j-Je$( z`;9j9qk@|+@G%c?lB~@hG3iPFl1cxi-}YqXh&6-p+q=R5hrUQs-WBmFWRl0JFs2ow z+QKLg+{K@P;SsFuORrs#8?qvUORpWs6}fuJ+ADHRhWK8URawLLn!F?H_zq=5uH(BZ z-$3JcCmUpZpKR|Irp3n|V>OP$x#b+;J*Af%O!|Wq`jA;+6P1}(&8ZyaU8ews_j6;p zusj8U3v~v1s1pm^;Ps+D7$c6sY&EBfY5>_*lM8osWdPT)$aojQSva@6FETWvcM9+DPQ%2Wlv*f`f*ES!6?U8=-5baI zTqXiP_+LVA44R$@Ge+{95`ZE-eJ?5G zK76VbfzUaF?5y)m((M?8`{4kiN=SF)bCDgZ?O18prf_dhsb+9tpfwmx!YE3z#75CQ za+Xn9Wy9`fyJfXug0Ex^+m*))p_f@B4M-?#`q)A*P7kPmh7z5skh@V2~z)dVk7}F*< zXnJ^pI8ee7i7Du&#g72UpYnvIe4Jsgdd};kC(oXi*iaP^Ttg2uWbyS8i;-BkA#e#j zk*Ag~3SoX>jmVVCuU6^Ip=11&r-?#tT}*4Zodgut`?zx44DOEaFW0UXNxYVqx{A6@ zfBf!ViWTN|eiRO9%GhP|D>12UmG=GdgB$jp$PEWV)Y&6FQXa2euvhFC%$6V61(t(= zS#PxI;oigjE1$l+U_+)U0h<+l2Vaxw{&@@oDpR_S`&<31MiCYT&{6aeikNkre6QvO zLH)1L^F9CX@jEyCEmdLyd^TuJ)}7B}Z{{(Tufi|S`Oyqqpe7-l$B`WkU{a;knMiY7 zT1*_EY+XhY3k{r8q4@;QcEPOQUT6xbg~CdHmA(;n(MMn4!}GcCYd; D2a172 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/mail/backends/__pycache__/console.cpython-310.pyc b/venv/Lib/site-packages/django/core/mail/backends/__pycache__/console.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ad189dfe5fc4d4a307edbea83bb025b493d1e80 GIT binary patch literal 1774 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 RFC5322_EMAIL_LINE_LENGTH_LIMIT + for line in payload.splitlines() + ) + # Quoted-Printable encoding has the side effect of shortening long + # lines, if any (#22561). + charset = utf8_charset_qp if has_long_lines else utf8_charset + MIMEText.set_payload(self, payload, charset=charset) + + +class SafeMIMEMultipart(MIMEMixin, MIMEMultipart): + def __init__( + self, _subtype="mixed", boundary=None, _subparts=None, encoding=None, **_params + ): + self.encoding = encoding + MIMEMultipart.__init__(self, _subtype, boundary, _subparts, **_params) + + def __setitem__(self, name, val): + name, val = forbid_multi_line_headers(name, val, self.encoding) + MIMEMultipart.__setitem__(self, name, val) + + +class EmailMessage: + """A container for email information.""" + + content_subtype = "plain" + mixed_subtype = "mixed" + encoding = None # None => use settings default + + def __init__( + self, + subject="", + body="", + from_email=None, + to=None, + bcc=None, + connection=None, + attachments=None, + headers=None, + cc=None, + reply_to=None, + ): + """ + Initialize a single email message (which can be sent to multiple + recipients). + """ + if to: + if isinstance(to, str): + raise TypeError('"to" argument must be a list or tuple') + self.to = list(to) + else: + self.to = [] + if cc: + if isinstance(cc, str): + raise TypeError('"cc" argument must be a list or tuple') + self.cc = list(cc) + else: + self.cc = [] + if bcc: + if isinstance(bcc, str): + raise TypeError('"bcc" argument must be a list or tuple') + self.bcc = list(bcc) + else: + self.bcc = [] + if reply_to: + if isinstance(reply_to, str): + raise TypeError('"reply_to" argument must be a list or tuple') + self.reply_to = list(reply_to) + else: + self.reply_to = [] + self.from_email = from_email or settings.DEFAULT_FROM_EMAIL + self.subject = subject + self.body = body or "" + self.attachments = [] + if attachments: + for attachment in attachments: + if isinstance(attachment, MIMEBase): + self.attach(attachment) + else: + self.attach(*attachment) + self.extra_headers = headers or {} + self.connection = connection + + def get_connection(self, fail_silently=False): + from django.core.mail import get_connection + + if not self.connection: + self.connection = get_connection(fail_silently=fail_silently) + return self.connection + + def message(self): + encoding = self.encoding or settings.DEFAULT_CHARSET + msg = SafeMIMEText(self.body, self.content_subtype, encoding) + msg = self._create_message(msg) + msg["Subject"] = self.subject + msg["From"] = self.extra_headers.get("From", self.from_email) + self._set_list_header_if_not_empty(msg, "To", self.to) + self._set_list_header_if_not_empty(msg, "Cc", self.cc) + self._set_list_header_if_not_empty(msg, "Reply-To", self.reply_to) + + # Email header names are case-insensitive (RFC 2045), so we have to + # accommodate that when doing comparisons. + header_names = [key.lower() for key in self.extra_headers] + if "date" not in header_names: + # formatdate() uses stdlib methods to format the date, which use + # the stdlib/OS concept of a timezone, however, Django sets the + # TZ environment variable based on the TIME_ZONE setting which + # will get picked up by formatdate(). + msg["Date"] = formatdate(localtime=settings.EMAIL_USE_LOCALTIME) + if "message-id" not in header_names: + # Use cached DNS_NAME for performance + msg["Message-ID"] = make_msgid(domain=DNS_NAME) + for name, value in self.extra_headers.items(): + if name.lower() != "from": # From is already handled + msg[name] = value + return msg + + def recipients(self): + """ + Return a list of all recipients of the email (includes direct + addressees as well as Cc and Bcc entries). + """ + return [email for email in (self.to + self.cc + self.bcc) if email] + + def send(self, fail_silently=False): + """Send the email message.""" + if not self.recipients(): + # Don't bother creating the network connection if there's nobody to + # send to. + return 0 + return self.get_connection(fail_silently).send_messages([self]) + + def attach(self, filename=None, content=None, mimetype=None): + """ + Attach a file with the given filename and content. The filename can + be omitted and the mimetype is guessed, if not provided. + + If the first parameter is a MIMEBase subclass, insert it directly + into the resulting message attachments. + + For a text/* mimetype (guessed or specified), when a bytes object is + specified as content, decode it as UTF-8. If that fails, set the + mimetype to DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content. + """ + if isinstance(filename, MIMEBase): + if content is not None or mimetype is not None: + raise ValueError( + "content and mimetype must not be given when a MIMEBase " + "instance is provided." + ) + self.attachments.append(filename) + elif content is None: + raise ValueError("content must be provided.") + else: + mimetype = ( + mimetype + or mimetypes.guess_type(filename)[0] + or DEFAULT_ATTACHMENT_MIME_TYPE + ) + basetype, subtype = mimetype.split("/", 1) + + if basetype == "text": + if isinstance(content, bytes): + try: + content = content.decode() + except UnicodeDecodeError: + # If mimetype suggests the file is text but it's + # actually binary, read() raises a UnicodeDecodeError. + mimetype = DEFAULT_ATTACHMENT_MIME_TYPE + + self.attachments.append((filename, content, mimetype)) + + def attach_file(self, path, mimetype=None): + """ + Attach a file from the filesystem. + + Set the mimetype to DEFAULT_ATTACHMENT_MIME_TYPE if it isn't specified + and cannot be guessed. + + For a text/* mimetype (guessed or specified), decode the file's content + as UTF-8. If that fails, set the mimetype to + DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content. + """ + path = Path(path) + with path.open("rb") as file: + content = file.read() + self.attach(path.name, content, mimetype) + + def _create_message(self, msg): + return self._create_attachments(msg) + + def _create_attachments(self, msg): + if self.attachments: + encoding = self.encoding or settings.DEFAULT_CHARSET + body_msg = msg + msg = SafeMIMEMultipart(_subtype=self.mixed_subtype, encoding=encoding) + if self.body or body_msg.is_multipart(): + msg.attach(body_msg) + for attachment in self.attachments: + if isinstance(attachment, MIMEBase): + msg.attach(attachment) + else: + msg.attach(self._create_attachment(*attachment)) + return msg + + def _create_mime_attachment(self, content, mimetype): + """ + Convert the content, mimetype pair into a MIME attachment object. + + If the mimetype is message/rfc822, content may be an + email.Message or EmailMessage object, as well as a str. + """ + basetype, subtype = mimetype.split("/", 1) + if basetype == "text": + encoding = self.encoding or settings.DEFAULT_CHARSET + attachment = SafeMIMEText(content, subtype, encoding) + elif basetype == "message" and subtype == "rfc822": + # Bug #18967: per RFC2046 s5.2.1, message/rfc822 attachments + # must not be base64 encoded. + if isinstance(content, EmailMessage): + # convert content into an email.Message first + content = content.message() + elif not isinstance(content, Message): + # For compatibility with existing code, parse the message + # into an email.Message object if it is not one already. + content = message_from_string(force_str(content)) + + attachment = SafeMIMEMessage(content, subtype) + else: + # Encode non-text attachments with base64. + attachment = MIMEBase(basetype, subtype) + attachment.set_payload(content) + Encoders.encode_base64(attachment) + return attachment + + def _create_attachment(self, filename, content, mimetype=None): + """ + Convert the filename, content, mimetype triple into a MIME attachment + object. + """ + attachment = self._create_mime_attachment(content, mimetype) + if filename: + try: + filename.encode("ascii") + except UnicodeEncodeError: + filename = ("utf-8", "", filename) + attachment.add_header( + "Content-Disposition", "attachment", filename=filename + ) + return attachment + + def _set_list_header_if_not_empty(self, msg, header, values): + """ + Set msg's header, either from self.extra_headers, if present, or from + the values argument. + """ + if values: + try: + value = self.extra_headers[header] + except KeyError: + value = ", ".join(str(v) for v in values) + msg[header] = value + + +class EmailMultiAlternatives(EmailMessage): + """ + A version of EmailMessage that makes it easy to send multipart/alternative + messages. For example, including text and HTML versions of the text is + made easier. + """ + + alternative_subtype = "alternative" + + def __init__( + self, + subject="", + body="", + from_email=None, + to=None, + bcc=None, + connection=None, + attachments=None, + headers=None, + alternatives=None, + cc=None, + reply_to=None, + ): + """ + Initialize a single email message (which can be sent to multiple + recipients). + """ + super().__init__( + subject, + body, + from_email, + to, + bcc, + connection, + attachments, + headers, + cc, + reply_to, + ) + self.alternatives = alternatives or [] + + def attach_alternative(self, content, mimetype): + """Attach an alternative content representation.""" + if content is None or mimetype is None: + raise ValueError("Both content and mimetype must be provided.") + self.alternatives.append((content, mimetype)) + + def _create_message(self, msg): + return self._create_attachments(self._create_alternatives(msg)) + + def _create_alternatives(self, msg): + encoding = self.encoding or settings.DEFAULT_CHARSET + if self.alternatives: + body_msg = msg + msg = SafeMIMEMultipart( + _subtype=self.alternative_subtype, encoding=encoding + ) + if self.body: + msg.attach(body_msg) + for alternative in self.alternatives: + msg.attach(self._create_mime_attachment(*alternative)) + return msg diff --git a/venv/Lib/site-packages/django/core/mail/utils.py b/venv/Lib/site-packages/django/core/mail/utils.py new file mode 100644 index 000000000..8143c236d --- /dev/null +++ b/venv/Lib/site-packages/django/core/mail/utils.py @@ -0,0 +1,22 @@ +""" +Email message and email sending related helper functions. +""" + +import socket + +from django.utils.encoding import punycode + + +# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of +# seconds, which slows down the restart of the server. +class CachedDnsName: + def __str__(self): + return self.get_fqdn() + + def get_fqdn(self): + if not hasattr(self, "_fqdn"): + self._fqdn = punycode(socket.getfqdn()) + return self._fqdn + + +DNS_NAME = CachedDnsName() diff --git a/venv/Lib/site-packages/django/core/management/__init__.py b/venv/Lib/site-packages/django/core/management/__init__.py new file mode 100644 index 000000000..64af1b80d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/__init__.py @@ -0,0 +1,446 @@ +import functools +import os +import pkgutil +import sys +from argparse import ( + _AppendConstAction, + _CountAction, + _StoreConstAction, + _SubParsersAction, +) +from collections import defaultdict +from difflib import get_close_matches +from importlib import import_module + +import django +from django.apps import apps +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.core.management.base import ( + BaseCommand, + CommandError, + CommandParser, + handle_default_options, +) +from django.core.management.color import color_style +from django.utils import autoreload + + +def find_commands(management_dir): + """ + Given a path to a management directory, return a list of all the command + names that are available. + """ + command_dir = os.path.join(management_dir, "commands") + return [ + name + for _, name, is_pkg in pkgutil.iter_modules([command_dir]) + if not is_pkg and not name.startswith("_") + ] + + +def load_command_class(app_name, name): + """ + Given a command name and an application name, return the Command + class instance. Allow all errors raised by the import process + (ImportError, AttributeError) to propagate. + """ + module = import_module("%s.management.commands.%s" % (app_name, name)) + return module.Command() + + +@functools.lru_cache(maxsize=None) +def get_commands(): + """ + Return a dictionary mapping command names to their callback applications. + + Look for a management.commands package in django.core, and in each + installed application -- if a commands package exists, register all + commands in that package. + + Core commands are always included. If a settings module has been + specified, also include user-defined commands. + + The dictionary is in the format {command_name: app_name}. Key-value + pairs from this dictionary can then be used in calls to + load_command_class(app_name, command_name) + + If a specific version of a command must be loaded (e.g., with the + startapp command), the instantiated module can be placed in the + dictionary in place of the application name. + + The dictionary is cached on the first call and reused on subsequent + calls. + """ + commands = {name: "django.core" for name in find_commands(__path__[0])} + + if not settings.configured: + return commands + + for app_config in reversed(list(apps.get_app_configs())): + path = os.path.join(app_config.path, "management") + commands.update({name: app_config.name for name in find_commands(path)}) + + return commands + + +def call_command(command_name, *args, **options): + """ + Call the given command, with the given options and args/kwargs. + + This is the primary API you should use for calling specific commands. + + `command_name` may be a string or a command object. Using a string is + preferred unless the command object is required for further processing or + testing. + + Some examples: + call_command('migrate') + call_command('shell', plain=True) + call_command('sqlmigrate', 'myapp') + + from django.core.management.commands import flush + cmd = flush.Command() + call_command(cmd, verbosity=0, interactive=False) + # Do something with cmd ... + """ + if isinstance(command_name, BaseCommand): + # Command object passed in. + command = command_name + command_name = command.__class__.__module__.split(".")[-1] + else: + # Load the command object by name. + try: + app_name = get_commands()[command_name] + except KeyError: + raise CommandError("Unknown command: %r" % command_name) + + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + command = app_name + else: + command = load_command_class(app_name, command_name) + + # Simulate argument parsing to get the option defaults (see #10080 for details). + parser = command.create_parser("", command_name) + # Use the `dest` option name from the parser option + opt_mapping = { + min(s_opt.option_strings).lstrip("-").replace("-", "_"): s_opt.dest + for s_opt in parser._actions + if s_opt.option_strings + } + arg_options = {opt_mapping.get(key, key): value for key, value in options.items()} + parse_args = [] + for arg in args: + if isinstance(arg, (list, tuple)): + parse_args += map(str, arg) + else: + parse_args.append(str(arg)) + + def get_actions(parser): + # Parser actions and actions from sub-parser choices. + for opt in parser._actions: + if isinstance(opt, _SubParsersAction): + for sub_opt in opt.choices.values(): + yield from get_actions(sub_opt) + else: + yield opt + + parser_actions = list(get_actions(parser)) + mutually_exclusive_required_options = { + opt + for group in parser._mutually_exclusive_groups + for opt in group._group_actions + if group.required + } + # Any required arguments which are passed in via **options must be passed + # to parse_args(). + for opt in parser_actions: + if opt.dest in options and ( + opt.required or opt in mutually_exclusive_required_options + ): + opt_dest_count = sum(v == opt.dest for v in opt_mapping.values()) + if opt_dest_count > 1: + raise TypeError( + f"Cannot pass the dest {opt.dest!r} that matches multiple " + f"arguments via **options." + ) + parse_args.append(min(opt.option_strings)) + if isinstance(opt, (_AppendConstAction, _CountAction, _StoreConstAction)): + continue + value = arg_options[opt.dest] + if isinstance(value, (list, tuple)): + parse_args += map(str, value) + else: + parse_args.append(str(value)) + defaults = parser.parse_args(args=parse_args) + defaults = dict(defaults._get_kwargs(), **arg_options) + # Raise an error if any unknown options were passed. + stealth_options = set(command.base_stealth_options + command.stealth_options) + dest_parameters = {action.dest for action in parser_actions} + valid_options = (dest_parameters | stealth_options).union(opt_mapping) + unknown_options = set(options) - valid_options + if unknown_options: + raise TypeError( + "Unknown option(s) for %s command: %s. " + "Valid options are: %s." + % ( + command_name, + ", ".join(sorted(unknown_options)), + ", ".join(sorted(valid_options)), + ) + ) + # Move positional args out of options to mimic legacy optparse + args = defaults.pop("args", ()) + if "skip_checks" not in options: + defaults["skip_checks"] = True + + return command.execute(*args, **defaults) + + +class ManagementUtility: + """ + Encapsulate the logic of the django-admin and manage.py utilities. + """ + + def __init__(self, argv=None): + self.argv = argv or sys.argv[:] + self.prog_name = os.path.basename(self.argv[0]) + if self.prog_name == "__main__.py": + self.prog_name = "python -m django" + self.settings_exception = None + + def main_help_text(self, commands_only=False): + """Return the script's main help text, as a string.""" + if commands_only: + usage = sorted(get_commands()) + else: + usage = [ + "", + "Type '%s help ' for help on a specific subcommand." + % self.prog_name, + "", + "Available subcommands:", + ] + commands_dict = defaultdict(lambda: []) + for name, app in get_commands().items(): + if app == "django.core": + app = "django" + else: + app = app.rpartition(".")[-1] + commands_dict[app].append(name) + style = color_style() + for app in sorted(commands_dict): + usage.append("") + usage.append(style.NOTICE("[%s]" % app)) + for name in sorted(commands_dict[app]): + usage.append(" %s" % name) + # Output an extra note if settings are not properly configured + if self.settings_exception is not None: + usage.append( + style.NOTICE( + "Note that only Django core commands are listed " + "as settings are not properly configured (error: %s)." + % self.settings_exception + ) + ) + + return "\n".join(usage) + + def fetch_command(self, subcommand): + """ + Try to fetch the given subcommand, printing a message with the + appropriate command called from the command line (usually + "django-admin" or "manage.py") if it can't be found. + """ + # Get commands outside of try block to prevent swallowing exceptions + commands = get_commands() + try: + app_name = commands[subcommand] + except KeyError: + if os.environ.get("DJANGO_SETTINGS_MODULE"): + # If `subcommand` is missing due to misconfigured settings, the + # following line will retrigger an ImproperlyConfigured exception + # (get_commands() swallows the original one) so the user is + # informed about it. + settings.INSTALLED_APPS + elif not settings.configured: + sys.stderr.write("No Django settings specified.\n") + possible_matches = get_close_matches(subcommand, commands) + sys.stderr.write("Unknown command: %r" % subcommand) + if possible_matches: + sys.stderr.write(". Did you mean %s?" % possible_matches[0]) + sys.stderr.write("\nType '%s help' for usage.\n" % self.prog_name) + sys.exit(1) + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + klass = app_name + else: + klass = load_command_class(app_name, subcommand) + return klass + + def autocomplete(self): + """ + Output completion suggestions for BASH. + + The output of this function is passed to BASH's `COMREPLY` variable and + treated as completion suggestions. `COMREPLY` expects a space + separated string as the result. + + The `COMP_WORDS` and `COMP_CWORD` BASH environment variables are used + to get information about the cli input. Please refer to the BASH + man-page for more information about this variables. + + Subcommand options are saved as pairs. A pair consists of + the long option string (e.g. '--exclude') and a boolean + value indicating if the option requires arguments. When printing to + stdout, an equal sign is appended to options which require arguments. + + Note: If debugging this function, it is recommended to write the debug + output in a separate file. Otherwise the debug output will be treated + and formatted as potential completion suggestions. + """ + # Don't complete if user hasn't sourced bash_completion file. + if "DJANGO_AUTO_COMPLETE" not in os.environ: + return + + cwords = os.environ["COMP_WORDS"].split()[1:] + cword = int(os.environ["COMP_CWORD"]) + + try: + curr = cwords[cword - 1] + except IndexError: + curr = "" + + subcommands = [*get_commands(), "help"] + options = [("--help", False)] + + # subcommand + if cword == 1: + print(" ".join(sorted(filter(lambda x: x.startswith(curr), subcommands)))) + # subcommand options + # special case: the 'help' subcommand has no options + elif cwords[0] in subcommands and cwords[0] != "help": + subcommand_cls = self.fetch_command(cwords[0]) + # special case: add the names of installed apps to options + if cwords[0] in ("dumpdata", "sqlmigrate", "sqlsequencereset", "test"): + try: + app_configs = apps.get_app_configs() + # Get the last part of the dotted path as the app name. + options.extend((app_config.label, 0) for app_config in app_configs) + except ImportError: + # Fail silently if DJANGO_SETTINGS_MODULE isn't set. The + # user will find out once they execute the command. + pass + parser = subcommand_cls.create_parser("", cwords[0]) + options.extend( + (min(s_opt.option_strings), s_opt.nargs != 0) + for s_opt in parser._actions + if s_opt.option_strings + ) + # filter out previously specified options from available options + prev_opts = {x.split("=")[0] for x in cwords[1 : cword - 1]} + options = (opt for opt in options if opt[0] not in prev_opts) + + # filter options by current input + options = sorted((k, v) for k, v in options if k.startswith(curr)) + for opt_label, require_arg in options: + # append '=' to options which require args + if require_arg: + opt_label += "=" + print(opt_label) + # Exit code of the bash completion function is never passed back to + # the user, so it's safe to always exit with 0. + # For more details see #25420. + sys.exit(0) + + def execute(self): + """ + Given the command-line arguments, figure out which subcommand is being + run, create a parser appropriate to that command, and run it. + """ + try: + subcommand = self.argv[1] + except IndexError: + subcommand = "help" # Display help if no arguments were given. + + # Preprocess options to extract --settings and --pythonpath. + # These options could affect the commands that are available, so they + # must be processed early. + parser = CommandParser( + prog=self.prog_name, + usage="%(prog)s subcommand [options] [args]", + add_help=False, + allow_abbrev=False, + ) + parser.add_argument("--settings") + parser.add_argument("--pythonpath") + parser.add_argument("args", nargs="*") # catch-all + try: + options, args = parser.parse_known_args(self.argv[2:]) + handle_default_options(options) + except CommandError: + pass # Ignore any option errors at this point. + + try: + settings.INSTALLED_APPS + except ImproperlyConfigured as exc: + self.settings_exception = exc + except ImportError as exc: + self.settings_exception = exc + + if settings.configured: + # Start the auto-reloading dev server even if the code is broken. + # The hardcoded condition is a code smell but we can't rely on a + # flag on the command class because we haven't located it yet. + if subcommand == "runserver" and "--noreload" not in self.argv: + try: + autoreload.check_errors(django.setup)() + except Exception: + # The exception will be raised later in the child process + # started by the autoreloader. Pretend it didn't happen by + # loading an empty list of applications. + apps.all_models = defaultdict(dict) + apps.app_configs = {} + apps.apps_ready = apps.models_ready = apps.ready = True + + # Remove options not compatible with the built-in runserver + # (e.g. options for the contrib.staticfiles' runserver). + # Changes here require manually testing as described in + # #27522. + _parser = self.fetch_command("runserver").create_parser( + "django", "runserver" + ) + _options, _args = _parser.parse_known_args(self.argv[2:]) + for _arg in _args: + self.argv.remove(_arg) + + # In all other cases, django.setup() is required to succeed. + else: + django.setup() + + self.autocomplete() + + if subcommand == "help": + if "--commands" in args: + sys.stdout.write(self.main_help_text(commands_only=True) + "\n") + elif not options.args: + sys.stdout.write(self.main_help_text() + "\n") + else: + self.fetch_command(options.args[0]).print_help( + self.prog_name, options.args[0] + ) + # Special-cases: We want 'django-admin --version' and + # 'django-admin --help' to work, for backwards compatibility. + elif subcommand == "version" or self.argv[1:] == ["--version"]: + sys.stdout.write(django.get_version() + "\n") + elif self.argv[1:] in (["--help"], ["-h"]): + sys.stdout.write(self.main_help_text() + "\n") + else: + self.fetch_command(subcommand).run_from_argv(self.argv) + + +def execute_from_command_line(argv=None): + """Run a ManagementUtility.""" + utility = ManagementUtility(argv) + utility.execute() diff --git a/venv/Lib/site-packages/django/core/management/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c18c193b3befb2ab4cf0747917f00395e36fb7c GIT binary patch literal 13553 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 SZRyr{kq#!0m4)(dIs6}%OAKEC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e481cac12ee18acd047a4a9826e64933019f4c4 GIT binary patch literal 22994 zcmcJ1Ymgk*b>4JO&wF;U*j+3Z5FbrS5HJ#UAWF1F^Cg0Kkg&i7gat)w1Zj45x_5UL z^H|>Q0l4E?nH1niu?voD$1atlI15Qm!Z>lFyqx?@oJu9-Jgf3>x+=f&OMg<8s9Z@P zlF0X++uhT%4@yo|7MPxX+`jkRbI<#nJH3gCVhVqM`qlrsGF?xl{u?ine-zSFg|d|NdO-|4o|$<#8PY%OcBz17Zj^0mC2o9#lafP0yC zu~Vv*>R2c>P*$9g8^deWW8^)Xx@a;9)Sk2rI9 zKIdlf{83yVb>?wB@8)s+7_N^w$8ml9j#+ygS08a6!PO(~<9KT0`cdaGTt6n)PdMgM zs`B{Y?c&P~&$XNFhUdASz1mauZPoHy-8H+@=r-2ej@$L^X0L-Q$Fom$8y(jfUEf}B zHP`KCqgz~YZTBs=+4u3-Ust{U+Pb~G>})i;YrTbr(`j{=mu>XEysZ1JZf-3vSE|Jy za{U%7W-xhHt@SzD)rRt16->P9wl^>KRHxzluBsS8@w)q#f9VS0#Z|Vs?ly0FIGerH z*;KtvSGBj!^}4IAwZ3v4bXaQk+C5eG{H?Ydh(suU9UF@b@Gpt$3O4mIJhZL zT#D2NN;94GcZ_eORzX=#=5DcOeIsS1Y8hZZ8wrJz;!dp#ulfdY8 zv0GiI)ojS3G;GXurR{cXpuQd9oXgcnESU5XE?TuHSC>|?EG-X<6!nb@)o6KGFQ>2A zgTEg4hoO6`2X=YdZu$1@R=aIu)te10wQqwwY`?F%=&sfEdw93oYP#*Mg-!HLqHsA! z0j1-59w^I3D-PM%OO9(9&WX|(uL*#E}UR5UI8xZ53#x_lCg4$r)JM_o4mz8 zev^XuIfRe*2o6JIn5w6I<4$VB9Gb1vF#Ubw*9^##)KcnQW3iG}Y#L;|K4?G4*Xylr z%dgifR$zHQ12hDTO-gq6n=H0l~$CBJQ-)jm7 zdN*Ea`LFg@Zd`0B&tJHzdK+Ml8@JruBB?=EaMnm4hE-VM#;XPQ0bo*BuE zGb`XzFu9rrkRRooIJvAbXAF)cslFP+o#h-TU+VRsSg&__PQT6ba=rd$ztIk#fCHUg zvtE~egNblDpfqr$n#U0OFvqiFJWSxgD=&*fK4lrl%W|)Y%dtN$!b|vgQ#g#XFqkzR zOf7ABzS}uRxpRTUJUAy*bRD$g$s=22lD(=hiQ7GO6LjYTaiFMvSGi4y6xAR(3f*~C zd3&*9spA+>eS`vZOuiIMglndS^WdKg?C1KP-|MsnnBchZ4&@ekh_d+>5Crbg z^R`3w2QNcpfayS1zI3PYd*Lkz7x0sZ2ddGwd(CFUqhLNw{!g~?fYwHn;!Lo5d)@7Z z@*!kAa&{B)8t?&%H7pC12_$K|y%izf3}!nm&jVZ6$szR+xL{ttS6@}VPCe|d-flrj zL_BK(wGq#jxF}EJpm}y^f^!Yu1n0ui80XxIxhQLkWq$%MD88i*^FT(y-5H*b9v$JO zQ1gfm*z&XZ2pwe8!c=o(3lwuzGmUo9AI}LgzrCNuVVK%TsoA07&H7>@-NgjXr|uYc zaA%m>!8A5f_aSop^qtg>g~^%sX*Q%6V=SPPRD=nS-I9XeLC0SyY#T#k2h!@kQBHjk zBJNG-L%eK0Fcuam2R*-`e2=0UI@zp#DoA4m5_C_J4+_t(xn1|IP4(hg_D<-{w~wa= zpB$g=CT#{;!Rqtv9@fr#u^PWw$p}8te|Ia$2=fWXgW~8lNK--ltPDz7<3Yf=yD|R> zJbsaYOyZC=O~ZURg-X$~V@w%kb1*XwupkCwEmrdT zN+eR9A_A0*`WVkfQfee{Z9MoCK3*9I3S28U^>8vbn^$}?MmgjqF6lXZJia5yDDdbT z8=#lxc_*#rd}|}KlXXat>H8*7lwOig#Tx90?6}lzw)+l@iS8Dp?rH<(f!z~@Pvs8v z4W=KNt=@XC-*#**JnVH>X>gOkkZNv2 zHN_^trNGgLI*rHCLZ&u%{^!pwzH+6$bm98-ON*~8)nB`E{`Jcj6lcF!$pv}O^=aIB zf!Xtd9JFi;Mg^#I%U|zxHyi$XkcNT@EIG}#x){R;2j#*ECRRasW==y|5AjeBo4rOP z(|^il%SP6iHLQo~XK*>TB4gx9MJW0JUew(@`I*c=xNsi2Of`I1^MWqSy$Ro;5zU*n zlj?V2A;JptRio>*A$B3bu`&%9*|%WnIn^dQkN+|_E8s(I=GAZz2QAexwz1elbH}`& z+D_v;eIJ5kF!N221;naBgJ|1&1E!Ia>Kn>N3u~Ar4-KuQ=e+V3{?qRD#YZY$Wpu5*KvCm)rKyqPylaB1Ew8kUj&pbQ~1u;IfbAofP0 zF6==1gd}*Dusp|u@aNC*Oh!7itA{V)iOAG)+A6E(aW%FoxE49ZZ;wxtro?*6F~4WP zg-$yb+*55hWSp!v9N_NcoIK8RVnpOYIE7$FyHjJ1-QZVtn-U-=?eoEC&;-`hUebcM z={8%dt)>k{p$%0!58%Pj{+6B=7S`c7MxI2-sG}Fy7wmJ8Xi_3*PJJSt-Grc2Ct>^S-fW4%6Q?u2IZbBfl#|r8XZ54aceX>B_1v zpa%#6E<}*gx31zmAr(YF##mL?@bn#gJREV)qxhn3wU}HpV(r^ zXY!?TW;U((WM7f=5}SV!honeyEqXV1VKmh;Ze}Bkh)a0oOgr>%j2eUze4A7)?-ZR9 zz6(y-nZS1uQMM`PFj|zHL*TU8VB(6zBHj?$tOg$!;Syd!0QLItUJ#i;#Nvz&P)LI@ zWlH|!=Ny5h`$@wl;zy_h9g(VwIuME~_FoIwB6gtg#OLOdqv_Fq# zzs>d>-AWBUaS*usNCz{>wmby*}Z3vyL4b5aNxQE6aNO=v98RTGl02N9h(jB29u;`lX0t19p58Kx3f0^KL)@5UG zY&R%zt36~ILqjIj&^UlbO;DlG{L*d-@dXzl$gH;e-a2$j4#BV(Naf;XwGSoBgB?87 zt7S~W_8iQNLnl2R43`#kgobeSiV<7_kNOJw#%ir{e4 zAhp;etw(=6=SNnHPL!CNDU~BTca32hrfHgPG=wmWPq@zb{%i{Nvbi~rHs-eYEig^t z;N96Jpff^PK^_z*zOW{C&LPM!67Pl~fgs)S*7U<=JlsVBs)c)h4IeS^r-9%+XmQrq zjbz=Up}vZyz}FhS;O~|96X8LgVOe+@TOm)-Zh?;|ZlHq~^=cEJGI|1{ku0Eu{w6+R zozNFFEf}=vqEXC3#;5bvWLmLJ6Q8j^O3Rn<@xFsYQpP(bP0m^dpDaE($AT=+K#pf? zMYnVZCcE>P$ateR5z6?83PSt zVGJZOW{-3U4bM@aH1e7d&1(BCSiT6FO9!x|TDROVe2*|KY+=T;7`?SytM*o}k3cn& zGxTC{E3{~JcpE{sCY+6y*YWhA(xZes=)gu}E-<2%w5FlcByib75dJn@VTP&MHN#=B zvZWh1Gn+8(+~*=NoL={&Z+Bh9+1L~VBf3vdT!29@EAD#ZR;#B@%lk;ScrDD%?lbOY zBa*Hg!k_N1M42c!uYiro1U>InWIINw3{JiQ2b`$|fWr_g8ZyADT9n*pnqg>?1Ket; zR<92SmHvb8VK4zBi3ehaO&OA07)9}8xCLolIwoyJu)A)Zsw^*Kfe{>VLX3R6YLna! zZYS%c+jGe|u#q1G`N2EO(HViC~xt5n-zVOPWMNk75 zWqJABmDgUobbWa_MC;R48!5&y*d^PW#B!K!q+}SSAy2v0HSK=O`iF8D5jnZ zLo1E88m-NwO&K z1XRU6M9d{|(vZEL+r?kFuG;6rfcC9MyAPcgi&+r%MWi|~YCK;`*cLQmz0*RzOM)!N+DTZ3-QTKzm-SRLn)KGsDL3lDuV+}k^;bDLII?mw-6Unp_a9{2qh3vMyuT;aV zVT^c<5NM+{bjo-YIZoDly@#3s={gpH(ilys10_Y`QQ(9kfP@D&3N40^(nAz#J)_s` zWLP(H5^AFh8i47eMY0ZQ#_9l2fQ2X$G$wRL*&}~2VSyJzIRK{ILl$;CN{CoOcfALW zY`1`Nnq)%gw^|PJ=?tB=rK|+&%*o9T>j?DT}g$ zs^IGs+9PesY8;Q&iin(~av(zk^Pu2F%LIv127^-cs-qHR3|8H7U(+{rCuRh6LU-bw z7#_S6F0n$oS8h`gxQ({I9_2(5Bc2_RmYA+_@@OOmuxOz9H45btTR$&h69$Me|j{5~!i65h-(F?NUH8xz;&<^-H&=Z2QF%fcniZsc)H*O_W7I_9mEdciO4l%2Fc!SovM zs%QPluCd0qi~b?r@u&R5tL7ckTa>HGn`w2`pLWpe*L5g~!GX-;;OUb{Ge|J}q-dX$ zV4bEL-2nptaU&Lh@d-+(R?Lgn2j6&ITj6#jmo@j0_4XGL%{B3W+Id?-Unl??wG(+-9h^B}xDMP3!rlleGn7Zw%8aM1Of z>haL!ftgvwqynmR7|K&QIlpl2+LdeCtDf6`pdcTLU1a@urdVMR6whA1TtD~fg>#=@ z3W_bD3L>xDbOVcQ5@bX)28HXeGsJuf1JWaSqzX?j^SY9UkJCvY{z zEEN7(h$j@yGLCTK4Kr=MSI$`vCoS_~-ZVeRTlx0}vk59_y}Cz zC)pT-KZ+UmniNP0|LgFx4Zn_gmdFYiNkilzvG!t;iI|Eku(+?VgHR-ULLq7aB~y@n z5E;>Z5zC?b7&_Y83W9Wx`_hG5gbS8h?{+r=E4E&3^0gx+gFy*&T@T^jHxRXr>D$CI z5t7dijwZ2}c)6Lz^XQKqWwk@=TTwrh=)Khs`_1n;gfs0 z_!+|G&h))>e2p^Iv1=5ovOx8o6}LEsJIBZFd<1tMiSHEE=Fr+Gp-^=WL7aKr_fC0e zMH$_SJ=l(yC4+1|N{)h3qV%wK2u!C_o4N=uQRZ_NYZ>H1dKsKtLQ;;3jWtV9 z&f$H#+wZJEE7JjUQ6^PI05+?wTJ;V)uxJDi%!OO(C0r^NsUUnvu9Nd0lGJ`kdK!HB zi%}laZo{l^KWBgH1=Q#w{seDCeA3hQQ!j)OkLbpyUjQJ;en$4~Y5Oz0vqkt4w^4zZ z3u_Moi(XHVYp(ZD4eF^o1myw&_)FKJ-mgl91GFRy1z0o67$Y1lF-K7S7ut7EcD8^E z)*x1+2GvfZ)qPTYPFbmzN39Z>0@?`QzwBZxFu~A}E*=Z3SxFt$ilG7h907gpEX-O8 znI0xeARUQvK?)?nk03p>jzYIHS_XtLduL+spRB4E(I;!4;CR6+>AQm`uCWN0*7LbU zG4RMi_MjTo*NHbl-phpP$@5}kiztW7Ce#~>vT*gP>Kq$ZE>iVE%%KvxH4uLwbT%W= z7q>sp_A^V!Rgc@ARZ$O>38~&uRRZ#99D+P8c*#ZxTrcp!3LhM1u8|MpgrlOY3)1kN zmEu`BnT?d(V3a#8kmjWb6gWaKP-8^uDuS$Vs@kQkf{F2v7A5KcgIJkqXf2ak%dmcI zX0s2hJoFa+W%>EBmD5+@9W(pCt+L!Pv+r4j_$+(}Z@gz^qc_ISvsuxI?DhR(#zNX9 zDaps6+mi$$YjUBa2t$|04Hje3bO8w48U-Cj;n9TR3Mo>@JCngK8vp#$<%VIJU409K z?ZTiefKR+pJXqE^{K=*A#^8_aQ|6I%HKBPv^_5BJ6l#?eY|1I>B_vBw#$_N;@+Q(B z8>r$*6hulj;ow{GjL*^6AZzKhhUiOrPr@sy>?+~NijX7qJ!@6b`0`4z@Mlo(fS5FEZ81oz{NbKZLOv|ErjU&|A zdsNi=Yq+oe0uTF9;cwx=FB2J@OgV$}rjsG(E@o zypihuoR#u(TkA$@8y50lVVK^?tLMI+@(aVPUqrt2GTwnB826@m{zmFcDJQd?{aUu0(cia?+qgT(`7=AST*o)?dZ6BPrQUnh~xA(VM_d@NWH{oPbYO<+z0KD z(7=xLG6J?Bs;<=kjhRr44&zDuZltaxCd@b!BFYK<$3PnB$A$LVL^(LayHTJQ7vaW^ zMA(F3ageGCEdmA>5@lS7KC$&Pe4KtBNl8Tw!N=}zXaW~2>&HYdFwNkU=M4=c# zS77WZZkQOGTef$Cys;SW03tdAXm*{paLa8CLjh&(OvC>YQ3Fphow#%4K7`e3dX81Nsg3;3Tv%m`>cYyz;16T&xvp*G zketBqNmUYtE~%2oqnoYOFwua>%qRqjD4(y8S&bumV8i{RC1BJzCjmoTcDNy49YZCt zjs=!sqRJL~4(;$y{UR1v(OMk5bRD8#RK+RcW~`7iPFEffzq$^mf!!^R!Y#EDhYW++ zsCcv(vPQK+82ujPPk2T7UpcBHMWi>i$pd2}n&o~0XF(eA03BfJ@d1r!)#rnZL|cR7 zF*tHUp9re#&_|h9!uAN5()TUQEB6+Z6 z^SbwDyEcRT;_jOwDI!Zqj3D9ntR68aVr|3ymb=B>w=wn)$mFayo)VMWdYDhMpoRZX z=Ov#>RD7}KD~o$m5CB;mSuo8{_Wd%=@R_8j3@Nfn6i0t7DWY^rlpW}?VMxYNN?x23)@8}yZ#xjnr-Gn`iKVaYd#({~Ki6_vhW zpuC!Uh4aH{fn(M=yp#5=;Vi3*wr7V0XL>j@oTZI{_JucJ9hTIa&dhcm0^m1szBMd5 zhw-F{@7ZC=NkgQ(;~eQ0a6X6gZ#YN0X=i>|noD8S97I%UJ{9&>^mVECF&SU*aK})8 z@J(YQyOVQ{5A(EZhJ~Z4Vex2c`-q<(9uYB_AKe=sQGX05{s`|Bc8bFzdZ#k&B|IhS!>8m~z?lGt|#rzlQ(K-I&2kL;8vju7{xz3-&yAx1Fm zB5bpex{)Z8d`i+kv>ULQRQ8dD3892Y(N+$|V|7Ze+h&NF+he1|qQt z5A*$k8Eg?Z7ELfhX#BdEguRple^BXHXkf;^vG0lj49zeilWI z=0o`J58-P+9GplpxJbFA4HUgSrqwwa0weXTKZ_HY%+YN_v;Kx@K^ojN)L~qwIk7H{ z_bjGo?VVmm=B54s-Kf8XLy&vp?6pPg@KJx8xBdJDO+Q&4}82ac=Wu}Q} zX0A(mGfdjlL#d+myx{nEI6qlUA(>JAtYl+O;^{1>Mh-CFwo;~*{b2eb6yW=Vk9`;i zL>nii*mIDFsqrk$jlqefY&iY zMqhbP!pwu*Q~GjHKs)_l4_-+Uf>(+Z!Rv&^>o=i3dJ`b4N)jvf05go#; zDy}wK?Yb5;!fr9zP7`e$$b9=r)cWcPos0Kx(>EG}3-tSEcFmr~7}_=a=!Y#vxQB+d zwq)K~k)DUhEcjuNhJm$#+9I{c$(`as%s?TJaraBi%gUVIrSmt~at8<0u(mwZ6m8X! zBB<*!1@-%U`iDIHO*SdQ8>{QpfC-4gDg0`HwbFC8g6wLq2Uoi`a|=mDY*5#&kg)A{ zeN@@HD}8Jf%Cx$xJx_V)3ia{a|L(!f3l*VPo6y^N!U1Y1<0l;j#Wn1d*whi-LX`e+ z)CQsAVj)~45YF(1EZlc-_9s{g9mPE~in$hZmSMr*qwI&cG_xOMGkcENEKEWEvwmF8 zTk!cH2(0XTlUbOCZ(AmNzqGI$~zNI)}Lg6%E|2A+&ilhq?Z0M=QF@(|z zC$BEyBjw`j6t+27z(65wjo(OE7Wg3x8a(aBira<_a{}+w3NbXb0{8AAZ|-=z6fpLa zBT^++#j9l8%Xo2cX3t6|yrqOm5xqHhxA-O0AETt%wNISFZxHBY^5`YaITiVRf-un> z!*#c^!)yfWwc1kT&F-bLCAl(SB^Je?H%Kv7+j#Zc z4f)-k5f~M(IxtToDP22uAdtb_{_hSJu3-o7NnMT0>PGBx!>@USAh;(b6BYs1saB?H zkLsjX)mf>=ll7|F??RUTp8(S%?^2>dwaK_)9kQz%WLXsrsgyz5b922`L}}h?y^F#m zPYXtIei?%j=~&AyUV&9|LH#4%`Nud!4kyRLj*5`XY8E?J|BS6fKa7;b_i^tTDv3|w zqzq|-eesYC<_FUjb2^9^QASYWSdbYXAdd79cS?{L53T<(c;v(AW)E#+7zrl*NY_2+ z5}k^fh{-bqfov{ovveJ(E(?uf@hD>(mB&jV3VvJzzXSyR9W$f^T%yu&_z&_ocxF_o z%IsePY+L#P(XoOGLD;D1G|aPLf7i@n&&Lle>2X}=0tG)fPULm$*zd;c?_sWA!i0ZB z_u9;u-0m}-7`Cd%!G6}oix(@$_uGD=vz-#R{Hy3heUAqQK5DZo%q{LJImp{o-y^Jm~v2mg@F@H4#GyEo#Oy|-)4>CpqmucOUpaWy zN<+QyUz%#FXy%XS^ZCp9Y`%o=kC_#%%1Btn|C3)XKcU!16Q8j^(#cEsc&BmLyYoeF zwsyGDItAU#P1Y&wf+o;z?*bl)C7)ok^ zr4&kP8j>YnL|-*Af+lG2t>6I9?W* zAk}?nJZf8q)Pj^{eIfHtQDIP29<0kUFtH}8oiQ~52d_l+j#@hnPF!Gyfkn%ZG%PRW zW|&bcJ?-jPzKN?tqCUqJVgQMniK-t(HVpq-h*>~|RkC6D|DU4C1LKo}$F3xhymt)l zqyyVF5SI@!T_9MON+70q4;`rA;9-~SA{lo9jwBDG3^YjVy}|t1mo*!m*vO@&I@w+gea1c2fX6`dbnbSYc0KsDc zOXCm|_vBH^9>Kjh@40PkcW1`){#fk6s70!#A*UQ}EW_3wBXG4l^_IY9T? z9ypP}pB7XJBOs1S44yfGaM=IZ<&FB*^mDIf^{j%%j`tsI10^U`7maioRPUFdHWbyqI&wG*uylInpZ+ zEvUq4NIMwVZ)4l*;XOzj; zxOg2YbZi-n+^+=|_&n}Qu*?l=QSKkjfslyxHB;MbNNQulSXlNQ3PtXQ8yT*Ha|wM5 zwKFNlIhG)9?=&|S$h1%g8Eb)MB(imhv!-r@Ww|1Q zxqb8>gxVP6k^m@lcPTswby0fv(xJk$LWTFQ(H5fi-{4FATYWAn>`!>(AU(E&QS^rF znQ44~-+MrMT z9@|&(J~VJS6t99D^&fFli`A@7UT5WgC{ig%73Wkd%WeL405UiH=sOxzL zPI34fte*CRA4xtO?F_F<*{19nkc2Qcxod;LS&1Wd6&tJbk|*=>QvHmzaHyW2R@R+86PLM=;c#x`w= zRAz?uN}!(X*Yvqhg$?wje~Cb!@{}LYqG*t&XGXFur$tc$9M0{WIp4W_!>m^G5IleT z-Cy?}FCp}~8Z15)82k!e@h4~~3J}GVBsjqOO9G<5Mqt3#NX(%XSQt$_J!=OxvoD-W zgwZZaYbIhYtL&5UPch73M9si^g;L`bQ7iDMO`UTTEImckrIm9;D`zCA(tC7?R?l%z zWB8~}39WsGX`S9VM`t*=L*Jmw^e(I}Q_@9^`;!M=mr3F0BVQgeUot+7(U-f*=Mq!*n2c5mbcVp{$|UrBcsfkxJoS4# zXMVh|0q{IcxO!1@!W3#~2x+HxvB~xP; z6@=Qy5CV|4#%s5w8_wj9+6-mN#vvOVYizr5O0!b|un%G(`Pi44FPMh@vInpz^A7=0 zqVOL^!rx;o^;sJ2C5&FH+Z+3o?MHbcSG4e6McFVr3cyCAmeOp7^N_$ zbif$OV|6qxADqZgd0vEbM~8750%#Se5KPm7`X1OLz5@-hs-%i-Ounug1mDB1S^Y|l zCQq)i6O<{+m zu9qYer33DYd6t&O0h0~F>mU%gu?V9OEYT5|H8rKFejDDmU`~7=8rOdFzDYbxzy~fN z|8gzzW!)wJFe~Km{4LmUs}5ld95^Re6=Q~gRFNW7AO%udT{(tyX&9v&hG{fpVOV-$ zILv6CsD3pJKZQh{tt^e||1LDYgjdW;-o$#QL<4o~)nh|P<)CId3LOcoG{q9D zlE1`L0=#A@ZhH%DqTl{tY7~UOQ;-X*Fk%FBV8WVB%@`HtpYb2?)Jn}cS6b33aA6eI znSs%#^#UKc1r95Pf@e)W(>1)oStOYs`5LUB?Wyeb_jxwd9B~jsA_Ets`|&{tBmrEo z>S@8}`?sh4Somx>lE4Q#$5(S1Ct~%6;8!=BTkAX9z3|2QcC*)ODght}I%mj5m#Dsa zHA5=j6^f>DOFJ2^4g7k+-8v&Yp<)&8=jmV<_6v1=n0WH`Fgj*nH>};%z|GdVLQjW< zE1BSpQN#tCl}#v^lz=#J=O%Z9JFT|P+ba-Um0{`K98)?Vqzk}mb~^1&P}QHXz0-TK z(`(p4?Upl3OIs7vb)8-vC`yw97nZiFmPm3R4*3RR{tnFPl(`Qb+wsVp|nhk(eDk_I%mL-Dg)9%4e z_zPR8DV?aLtF=eNs5Ij=mRu=^tFWuDHLfUeX1wAcZG2ftcpeTS_y?OIQZ_8uybz@) mGmiU61wuT4#zd~^Vi#8lA*x-5KKa@-AlH84nV#?Ay7O-;7r`e0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/__pycache__/sql.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/__pycache__/sql.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58dc39f9d802df81f4482d367afca901e56759ff GIT binary patch literal 1406 zcma)6&2QX96rUN7z26P3N?Sgp8VL>yO42i+3aM29QB{zZi?v|QdL|ohy!K|^c*92S zt=IAwa7ZLB`Ijtl;?#46gbGr5&)$|?keJoH`FNlH{oZUb8ub~DKYsje`dNpu-|299 zczE~%C)`D$ndTXbXcZY>h)8hSdzrV8k;MH_2fFi=N51ar-cuF@x~~Vgb~Jy)#-ryL zgFPJcTB_v|a19oPHW@tLOC+f_!^btic@HOih@#?iHs_jap}l9~iNv#*dljo>B`QzL zXA-0Pr(gF&9Q($VHV;*prQpKiAasW&eDvLe5S(&mVR8py2}Xym2oJIn4jTiloSG^y zJ57wodt(ueiacA#<|ho3=Cf#&=1Ep+6R%Qp0%K8cSp&w!V2(?ZCkE<~%Ch1lP81|c zo3SJpXA4-G#HB?ZUDI=w&x#l`WhTzm0)4z<33U&Sv$&~c?AJcHb!O^*QsjB-XbBuk zs6;{I3m421Z7-+yKAn6I#=>O31W=RvMN&3jIQcSlUzO9zUTVQ@e`||5hMKHQzM4Ep zrxQq>*|#+n%eBR>U^L+xia<&pyb3(Q+h6c^qfe+! zUJs(Khw~epFEk3r&iFaI&wls>sgrY|S;_41SXS6hN4~vXd1sy$PR{*v@x-tEvp{=j z*SW#YIcKgr@6G%3f%cJZ^r?6ywEV@dykGgxs6UpPA^pL_=K^!p0XSWh?sRv*%yZ-| zTw1feNM{zw4-ZwYGlVNVC~Sy5n5Bs#YQm4;!jA$lxi+@$qb5f957JrPTNyho5U+JT zKsJq4$mPn^ehC=7VPQP9P3El`cEi7}*bi-Y$GDWpsE7L6gEiPIRH%Pqk%ijN)YN2_ z0IWNZ&T^GOG{BZu&FA;QK%0KOGH2hC??GUwyydB}%6mfdz4eSLr z-v7YeZjmo_^9DzIoi5%cL8aQ8B$^MrMZ0%M5L)(K6wz>rd0s{sq5-J!y_B*^-jLA!ye0oG SM_VAcx`_Lb_r31c@cKVd!)r(Y literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/__pycache__/templates.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/__pycache__/templates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cada0b112041eb4687603bbfb7b480622c18c36 GIT binary patch literal 10209 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 E4^R*lkpKVy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..530cc69be1f41be2c94420f8583de002ad577b9b GIT binary patch literal 5217 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 US+LyE!kBx)b=_0$q2kDY04L;IxBvhE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/base.py b/venv/Lib/site-packages/django/core/management/base.py new file mode 100644 index 000000000..834d1b281 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/base.py @@ -0,0 +1,690 @@ +""" +Base classes for writing management commands (named commands which can +be executed through ``django-admin`` or ``manage.py``). +""" +import argparse +import os +import sys +import warnings +from argparse import ArgumentParser, HelpFormatter +from io import TextIOBase + +import django +from django.core import checks +from django.core.exceptions import ImproperlyConfigured +from django.core.management.color import color_style, no_style +from django.db import DEFAULT_DB_ALIAS, connections +from django.utils.deprecation import RemovedInDjango41Warning + +ALL_CHECKS = "__all__" + + +class CommandError(Exception): + """ + Exception class indicating a problem while executing a management + command. + + If this exception is raised during the execution of a management + command, it will be caught and turned into a nicely-printed error + message to the appropriate output stream (i.e., stderr); as a + result, raising this exception (with a sensible description of the + error) is the preferred way to indicate that something has gone + wrong in the execution of a command. + """ + + def __init__(self, *args, returncode=1, **kwargs): + self.returncode = returncode + super().__init__(*args, **kwargs) + + +class SystemCheckError(CommandError): + """ + The system check framework detected unrecoverable errors. + """ + + pass + + +class CommandParser(ArgumentParser): + """ + Customized ArgumentParser class to improve some error messages and prevent + SystemExit in several occasions, as SystemExit is unacceptable when a + command is called programmatically. + """ + + def __init__( + self, *, missing_args_message=None, called_from_command_line=None, **kwargs + ): + self.missing_args_message = missing_args_message + self.called_from_command_line = called_from_command_line + super().__init__(**kwargs) + + def parse_args(self, args=None, namespace=None): + # Catch missing argument for a better error message + if self.missing_args_message and not ( + args or any(not arg.startswith("-") for arg in args) + ): + self.error(self.missing_args_message) + return super().parse_args(args, namespace) + + def error(self, message): + if self.called_from_command_line: + super().error(message) + else: + raise CommandError("Error: %s" % message) + + +def handle_default_options(options): + """ + Include any default options that all commands should accept here + so that ManagementUtility can handle them before searching for + user commands. + """ + if options.settings: + os.environ["DJANGO_SETTINGS_MODULE"] = options.settings + if options.pythonpath: + sys.path.insert(0, options.pythonpath) + + +def no_translations(handle_func): + """Decorator that forces a command to run with translations deactivated.""" + + def wrapped(*args, **kwargs): + from django.utils import translation + + saved_locale = translation.get_language() + translation.deactivate_all() + try: + res = handle_func(*args, **kwargs) + finally: + if saved_locale is not None: + translation.activate(saved_locale) + return res + + return wrapped + + +class DjangoHelpFormatter(HelpFormatter): + """ + Customized formatter so that command-specific arguments appear in the + --help output before arguments common to all commands. + """ + + show_last = { + "--version", + "--verbosity", + "--traceback", + "--settings", + "--pythonpath", + "--no-color", + "--force-color", + "--skip-checks", + } + + def _reordered_actions(self, actions): + return sorted( + actions, key=lambda a: set(a.option_strings) & self.show_last != set() + ) + + def add_usage(self, usage, actions, *args, **kwargs): + super().add_usage(usage, self._reordered_actions(actions), *args, **kwargs) + + def add_arguments(self, actions): + super().add_arguments(self._reordered_actions(actions)) + + +class OutputWrapper(TextIOBase): + """ + Wrapper around stdout/stderr + """ + + @property + def style_func(self): + return self._style_func + + @style_func.setter + def style_func(self, style_func): + if style_func and self.isatty(): + self._style_func = style_func + else: + self._style_func = lambda x: x + + def __init__(self, out, ending="\n"): + self._out = out + self.style_func = None + self.ending = ending + + def __getattr__(self, name): + return getattr(self._out, name) + + def flush(self): + if hasattr(self._out, "flush"): + self._out.flush() + + def isatty(self): + return hasattr(self._out, "isatty") and self._out.isatty() + + def write(self, msg="", style_func=None, ending=None): + ending = self.ending if ending is None else ending + if ending and not msg.endswith(ending): + msg += ending + style_func = style_func or self.style_func + self._out.write(style_func(msg)) + + +class BaseCommand: + """ + The base class from which all management commands ultimately + derive. + + Use this class if you want access to all of the mechanisms which + parse the command-line arguments and work out what code to call in + response; if you don't need to change any of that behavior, + consider using one of the subclasses defined in this file. + + If you are interested in overriding/customizing various aspects of + the command-parsing and -execution behavior, the normal flow works + as follows: + + 1. ``django-admin`` or ``manage.py`` loads the command class + and calls its ``run_from_argv()`` method. + + 2. The ``run_from_argv()`` method calls ``create_parser()`` to get + an ``ArgumentParser`` for the arguments, parses them, performs + any environment changes requested by options like + ``pythonpath``, and then calls the ``execute()`` method, + passing the parsed arguments. + + 3. The ``execute()`` method attempts to carry out the command by + calling the ``handle()`` method with the parsed arguments; any + output produced by ``handle()`` will be printed to standard + output and, if the command is intended to produce a block of + SQL statements, will be wrapped in ``BEGIN`` and ``COMMIT``. + + 4. If ``handle()`` or ``execute()`` raised any exception (e.g. + ``CommandError``), ``run_from_argv()`` will instead print an error + message to ``stderr``. + + Thus, the ``handle()`` method is typically the starting point for + subclasses; many built-in commands and command types either place + all of their logic in ``handle()``, or perform some additional + parsing work in ``handle()`` and then delegate from it to more + specialized methods as needed. + + Several attributes affect behavior at various steps along the way: + + ``help`` + A short description of the command, which will be printed in + help messages. + + ``output_transaction`` + A boolean indicating whether the command outputs SQL + statements; if ``True``, the output will automatically be + wrapped with ``BEGIN;`` and ``COMMIT;``. Default value is + ``False``. + + ``requires_migrations_checks`` + A boolean; if ``True``, the command prints a warning if the set of + migrations on disk don't match the migrations in the database. + + ``requires_system_checks`` + A list or tuple of tags, e.g. [Tags.staticfiles, Tags.models]. System + checks registered in the chosen tags will be checked for errors prior + to executing the command. The value '__all__' can be used to specify + that all system checks should be performed. Default value is '__all__'. + + To validate an individual application's models + rather than all applications' models, call + ``self.check(app_configs)`` from ``handle()``, where ``app_configs`` + is the list of application's configuration provided by the + app registry. + + ``stealth_options`` + A tuple of any options the command uses which aren't defined by the + argument parser. + """ + + # Metadata about this command. + help = "" + + # Configuration shortcuts that alter various logic. + _called_from_command_line = False + output_transaction = False # Whether to wrap the output in a "BEGIN; COMMIT;" + requires_migrations_checks = False + requires_system_checks = "__all__" + # Arguments, common to all commands, which aren't defined by the argument + # parser. + base_stealth_options = ("stderr", "stdout") + # Command-specific options not defined by the argument parser. + stealth_options = () + suppressed_base_arguments = set() + + def __init__(self, stdout=None, stderr=None, no_color=False, force_color=False): + self.stdout = OutputWrapper(stdout or sys.stdout) + self.stderr = OutputWrapper(stderr or sys.stderr) + if no_color and force_color: + raise CommandError("'no_color' and 'force_color' can't be used together.") + if no_color: + self.style = no_style() + else: + self.style = color_style(force_color) + self.stderr.style_func = self.style.ERROR + if self.requires_system_checks in [False, True]: + warnings.warn( + "Using a boolean value for requires_system_checks is " + "deprecated. Use '__all__' instead of True, and [] (an empty " + "list) instead of False.", + RemovedInDjango41Warning, + ) + self.requires_system_checks = ( + ALL_CHECKS if self.requires_system_checks else [] + ) + if ( + not isinstance(self.requires_system_checks, (list, tuple)) + and self.requires_system_checks != ALL_CHECKS + ): + raise TypeError("requires_system_checks must be a list or tuple.") + + def get_version(self): + """ + Return the Django version, which should be correct for all built-in + Django commands. User-supplied commands can override this method to + return their own version. + """ + return django.get_version() + + def create_parser(self, prog_name, subcommand, **kwargs): + """ + Create and return the ``ArgumentParser`` which will be used to + parse the arguments to this command. + """ + parser = CommandParser( + prog="%s %s" % (os.path.basename(prog_name), subcommand), + description=self.help or None, + formatter_class=DjangoHelpFormatter, + missing_args_message=getattr(self, "missing_args_message", None), + called_from_command_line=getattr(self, "_called_from_command_line", None), + **kwargs, + ) + self.add_base_argument( + parser, + "--version", + action="version", + version=self.get_version(), + help="Show program's version number and exit.", + ) + self.add_base_argument( + parser, + "-v", + "--verbosity", + default=1, + type=int, + choices=[0, 1, 2, 3], + help=( + "Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, " + "3=very verbose output" + ), + ) + self.add_base_argument( + parser, + "--settings", + help=( + "The Python path to a settings module, e.g. " + '"myproject.settings.main". If this isn\'t provided, the ' + "DJANGO_SETTINGS_MODULE environment variable will be used." + ), + ) + self.add_base_argument( + parser, + "--pythonpath", + help=( + "A directory to add to the Python path, e.g. " + '"/home/djangoprojects/myproject".' + ), + ) + self.add_base_argument( + parser, + "--traceback", + action="store_true", + help="Raise on CommandError exceptions.", + ) + self.add_base_argument( + parser, + "--no-color", + action="store_true", + help="Don't colorize the command output.", + ) + self.add_base_argument( + parser, + "--force-color", + action="store_true", + help="Force colorization of the command output.", + ) + if self.requires_system_checks: + parser.add_argument( + "--skip-checks", + action="store_true", + help="Skip system checks.", + ) + self.add_arguments(parser) + return parser + + def add_arguments(self, parser): + """ + Entry point for subclassed commands to add custom arguments. + """ + pass + + def add_base_argument(self, parser, *args, **kwargs): + """ + Call the parser's add_argument() method, suppressing the help text + according to BaseCommand.suppressed_base_arguments. + """ + for arg in args: + if arg in self.suppressed_base_arguments: + kwargs["help"] = argparse.SUPPRESS + break + parser.add_argument(*args, **kwargs) + + def print_help(self, prog_name, subcommand): + """ + Print the help message for this command, derived from + ``self.usage()``. + """ + parser = self.create_parser(prog_name, subcommand) + parser.print_help() + + def run_from_argv(self, argv): + """ + Set up any environment changes requested (e.g., Python path + and Django settings), then run this command. If the + command raises a ``CommandError``, intercept it and print it sensibly + to stderr. If the ``--traceback`` option is present or the raised + ``Exception`` is not ``CommandError``, raise it. + """ + self._called_from_command_line = True + parser = self.create_parser(argv[0], argv[1]) + + options = parser.parse_args(argv[2:]) + cmd_options = vars(options) + # Move positional args out of options to mimic legacy optparse + args = cmd_options.pop("args", ()) + handle_default_options(options) + try: + self.execute(*args, **cmd_options) + except CommandError as e: + if options.traceback: + raise + + # SystemCheckError takes care of its own formatting. + if isinstance(e, SystemCheckError): + self.stderr.write(str(e), lambda x: x) + else: + self.stderr.write("%s: %s" % (e.__class__.__name__, e)) + sys.exit(e.returncode) + finally: + try: + connections.close_all() + except ImproperlyConfigured: + # Ignore if connections aren't setup at this point (e.g. no + # configured settings). + pass + + def execute(self, *args, **options): + """ + Try to execute this command, performing system checks if needed (as + controlled by the ``requires_system_checks`` attribute, except if + force-skipped). + """ + if options["force_color"] and options["no_color"]: + raise CommandError( + "The --no-color and --force-color options can't be used together." + ) + if options["force_color"]: + self.style = color_style(force_color=True) + elif options["no_color"]: + self.style = no_style() + self.stderr.style_func = None + if options.get("stdout"): + self.stdout = OutputWrapper(options["stdout"]) + if options.get("stderr"): + self.stderr = OutputWrapper(options["stderr"]) + + if self.requires_system_checks and not options["skip_checks"]: + if self.requires_system_checks == ALL_CHECKS: + self.check() + else: + self.check(tags=self.requires_system_checks) + if self.requires_migrations_checks: + self.check_migrations() + output = self.handle(*args, **options) + if output: + if self.output_transaction: + connection = connections[options.get("database", DEFAULT_DB_ALIAS)] + output = "%s\n%s\n%s" % ( + self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()), + output, + self.style.SQL_KEYWORD(connection.ops.end_transaction_sql()), + ) + self.stdout.write(output) + return output + + def check( + self, + app_configs=None, + tags=None, + display_num_errors=False, + include_deployment_checks=False, + fail_level=checks.ERROR, + databases=None, + ): + """ + Use the system check framework to validate entire Django project. + Raise CommandError for any serious message (error or critical errors). + If there are only light messages (like warnings), print them to stderr + and don't raise an exception. + """ + all_issues = checks.run_checks( + app_configs=app_configs, + tags=tags, + include_deployment_checks=include_deployment_checks, + databases=databases, + ) + + header, body, footer = "", "", "" + visible_issue_count = 0 # excludes silenced warnings + + if all_issues: + debugs = [ + e for e in all_issues if e.level < checks.INFO and not e.is_silenced() + ] + infos = [ + e + for e in all_issues + if checks.INFO <= e.level < checks.WARNING and not e.is_silenced() + ] + warnings = [ + e + for e in all_issues + if checks.WARNING <= e.level < checks.ERROR and not e.is_silenced() + ] + errors = [ + e + for e in all_issues + if checks.ERROR <= e.level < checks.CRITICAL and not e.is_silenced() + ] + criticals = [ + e + for e in all_issues + if checks.CRITICAL <= e.level and not e.is_silenced() + ] + sorted_issues = [ + (criticals, "CRITICALS"), + (errors, "ERRORS"), + (warnings, "WARNINGS"), + (infos, "INFOS"), + (debugs, "DEBUGS"), + ] + + for issues, group_name in sorted_issues: + if issues: + visible_issue_count += len(issues) + formatted = ( + self.style.ERROR(str(e)) + if e.is_serious() + else self.style.WARNING(str(e)) + for e in issues + ) + formatted = "\n".join(sorted(formatted)) + body += "\n%s:\n%s\n" % (group_name, formatted) + + if visible_issue_count: + header = "System check identified some issues:\n" + + if display_num_errors: + if visible_issue_count: + footer += "\n" + footer += "System check identified %s (%s silenced)." % ( + "no issues" + if visible_issue_count == 0 + else "1 issue" + if visible_issue_count == 1 + else "%s issues" % visible_issue_count, + len(all_issues) - visible_issue_count, + ) + + if any(e.is_serious(fail_level) and not e.is_silenced() for e in all_issues): + msg = self.style.ERROR("SystemCheckError: %s" % header) + body + footer + raise SystemCheckError(msg) + else: + msg = header + body + footer + + if msg: + if visible_issue_count: + self.stderr.write(msg, lambda x: x) + else: + self.stdout.write(msg) + + def check_migrations(self): + """ + Print a warning if the set of migrations on disk don't match the + migrations in the database. + """ + from django.db.migrations.executor import MigrationExecutor + + try: + executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) + except ImproperlyConfigured: + # No databases are configured (or the dummy one) + return + + plan = executor.migration_plan(executor.loader.graph.leaf_nodes()) + if plan: + apps_waiting_migration = sorted( + {migration.app_label for migration, backwards in plan} + ) + self.stdout.write( + self.style.NOTICE( + "\nYou have %(unapplied_migration_count)s unapplied migration(s). " + "Your project may not work properly until you apply the " + "migrations for app(s): %(apps_waiting_migration)s." + % { + "unapplied_migration_count": len(plan), + "apps_waiting_migration": ", ".join(apps_waiting_migration), + } + ) + ) + self.stdout.write( + self.style.NOTICE("Run 'python manage.py migrate' to apply them.") + ) + + def handle(self, *args, **options): + """ + The actual logic of the command. Subclasses must implement + this method. + """ + raise NotImplementedError( + "subclasses of BaseCommand must provide a handle() method" + ) + + +class AppCommand(BaseCommand): + """ + A management command which takes one or more installed application labels + as arguments, and does something with each of them. + + Rather than implementing ``handle()``, subclasses must implement + ``handle_app_config()``, which will be called once for each application. + """ + + missing_args_message = "Enter at least one application label." + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="app_label", + nargs="+", + help="One or more application label.", + ) + + def handle(self, *app_labels, **options): + from django.apps import apps + + try: + app_configs = [apps.get_app_config(app_label) for app_label in app_labels] + except (LookupError, ImportError) as e: + raise CommandError( + "%s. Are you sure your INSTALLED_APPS setting is correct?" % e + ) + output = [] + for app_config in app_configs: + app_output = self.handle_app_config(app_config, **options) + if app_output: + output.append(app_output) + return "\n".join(output) + + def handle_app_config(self, app_config, **options): + """ + Perform the command's actions for app_config, an AppConfig instance + corresponding to an application label given on the command line. + """ + raise NotImplementedError( + "Subclasses of AppCommand must provide a handle_app_config() method." + ) + + +class LabelCommand(BaseCommand): + """ + A management command which takes one or more arbitrary arguments + (labels) on the command line, and does something with each of + them. + + Rather than implementing ``handle()``, subclasses must implement + ``handle_label()``, which will be called once for each label. + + If the arguments should be names of installed applications, use + ``AppCommand`` instead. + """ + + label = "label" + missing_args_message = "Enter at least one %s." % label + + def add_arguments(self, parser): + parser.add_argument("args", metavar=self.label, nargs="+") + + def handle(self, *labels, **options): + output = [] + for label in labels: + label_output = self.handle_label(label, **options) + if label_output: + output.append(label_output) + return "\n".join(output) + + def handle_label(self, label, **options): + """ + Perform the command's actions for ``label``, which will be the + string as given on the command line. + """ + raise NotImplementedError( + "subclasses of LabelCommand must provide a handle_label() method" + ) diff --git a/venv/Lib/site-packages/django/core/management/color.py b/venv/Lib/site-packages/django/core/management/color.py new file mode 100644 index 000000000..d2255d228 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/color.py @@ -0,0 +1,113 @@ +""" +Sets up the terminal color scheme. +""" + +import functools +import os +import sys + +from django.utils import termcolors + +try: + import colorama + + colorama.init() +except (ImportError, OSError): + HAS_COLORAMA = False +else: + HAS_COLORAMA = True + + +def supports_color(): + """ + Return True if the running system's terminal supports color, + and False otherwise. + """ + + def vt_codes_enabled_in_windows_registry(): + """ + Check the Windows Registry to see if VT code handling has been enabled + by default, see https://superuser.com/a/1300251/447564. + """ + try: + # winreg is only available on Windows. + import winreg + except ImportError: + return False + else: + reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Console") + try: + reg_key_value, _ = winreg.QueryValueEx(reg_key, "VirtualTerminalLevel") + except FileNotFoundError: + return False + else: + return reg_key_value == 1 + + # isatty is not always implemented, #6223. + is_a_tty = hasattr(sys.stdout, "isatty") and sys.stdout.isatty() + + return is_a_tty and ( + sys.platform != "win32" + or HAS_COLORAMA + or "ANSICON" in os.environ + or + # Windows Terminal supports VT codes. + "WT_SESSION" in os.environ + or + # Microsoft Visual Studio Code's built-in terminal supports colors. + os.environ.get("TERM_PROGRAM") == "vscode" + or vt_codes_enabled_in_windows_registry() + ) + + +class Style: + pass + + +def make_style(config_string=""): + """ + Create a Style object from the given config_string. + + If config_string is empty django.utils.termcolors.DEFAULT_PALETTE is used. + """ + + style = Style() + + color_settings = termcolors.parse_color_setting(config_string) + + # The nocolor palette has all available roles. + # Use that palette as the basis for populating + # the palette as defined in the environment. + for role in termcolors.PALETTES[termcolors.NOCOLOR_PALETTE]: + if color_settings: + format = color_settings.get(role, {}) + style_func = termcolors.make_style(**format) + else: + + def style_func(x): + return x + + setattr(style, role, style_func) + + # For backwards compatibility, + # set style for ERROR_OUTPUT == ERROR + style.ERROR_OUTPUT = style.ERROR + + return style + + +@functools.lru_cache(maxsize=None) +def no_style(): + """ + Return a Style object with no color scheme. + """ + return make_style("nocolor") + + +def color_style(force_color=False): + """ + Return a Style object from the Django color scheme. + """ + if not force_color and not supports_color(): + return no_style() + return make_style(os.environ.get("DJANGO_COLORS", "")) diff --git a/venv/Lib/site-packages/django/core/management/commands/__init__.py b/venv/Lib/site-packages/django/core/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8dcb7ce29e8bd4b5ab620b03c5f9abc754d3a60 GIT binary patch literal 205 zcmYk0u?oU45QbCfAc7C#P`itWps0h0C~k)#O+raENy#MzAIVn|oO}isCzDBkxbOJ> z;W#@S4oJ-V{H)S`CHyCgGLM6Kgdj&U%650+QvJiHT}#nK}+Ki*2-@} z1uNyy7kg(L$vt$^bg)$wpz^Y48NaYvB8Y~W+LqipS!!ltmu^JY(FB&1Dx*B5_z0{3y?oK7XSbN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/check.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/check.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b36f7cf4e01d8fe056bc7c210388ce6dc6837a49 GIT binary patch literal 2475 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 A0{{R3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/createcachetable.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/createcachetable.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd5eca9a4c76a60cf0da3e11061f775604429d25 GIT binary patch literal 3569 zcmZt|+iu*(mBS^uB$vCoTDELUVT~&BCiXf-fnJiLuq?@rQFWErG7=MN32J8~amCAO zhSY`N7DnY)HAcTc>RaFY9ewWred?1xpg`f)P|plkv08@&hiA^5nRA_UPTFkR3OxV( z?cX=eNk#dGm|T7|nB0et?ZAK)j3OmQ9zp_EBQ>shH3`=uE!I6-j0V|ZIv~BS5<&}qv&sNv{f^%`Vphy3IUWO5!I$OgQ?u=&lWfeS)Zx&=q*rao0dJdJr;l$Gz}YXK8Wi zii=*P?C&b>I4}3pno2dB%^iU4oHoWXp0+zfHFe=tk79Nzd2m`Y~vZs*~XKc zv0!64?a57S<58G>k#BB13@OX*eo50l#PY^IN%l8Z!_5sAX5{VwVkX!oYyz&i(n|>`phcB8vNB+rBr-@sR2eS5uGd1vho{isF%tqDr==) zYG)9*dlMpbGqqoX)v2M8X{7->>X}~FGvipLKOWK7`}NTdR|dP*<>p0PaciH@%@nM4 z1kpf`eDGJ>q;nt>cPgv+(jrt`HP5J`oYus;9WohlNsmyGG`Ufc!v3p*xVlU7%J6zB zFB0P_-lX$_*pkPJRj(lp?*~yBFs{pqbbd8lmq+hFj*H0005gFwk&R5GAyXYk+PPg5 z^KqoU(B2lU3;S1FdP1~|X9@rZKAA6Gf=U?}I#iC;p_ZXjwM3=Xubru^B~1&)2ZQRR zTIzlM)HqZ26?(f=`gM$UHToey=Bb6%Qk_xGWPJd4*!@P8d$5j;6Ak8$%sdF7Cbj@; zpQu~4p|K6Fg3pArTm7-2RT|*NwV_>FrQIJtMlep4I&PdG>;OE;zQN4|;ns|@T^lw4 zGet?+IGx60f_Gv9<_e7^W?W!kK12T?u{oX)JBLnb0{vv^lop->t$@!K$PT=$QkA3R zyrot8ly#tOe*^ra z_iy&+@QoAo+ZCYJPv_5+Z$BMQ6!miA^n>b*ua)GArey9bbOd!^IEj?P%zl7xg65Nz z-oJ;+HJtq2QuEOQ`^XI66L6nm=qHWm6>*R0{Qs^wyYHs39 zAF35OgjU0T*B2DV0_#3oT`jck+Pce?qVeUE$G={D^4$H^%5%?n)_wfdvz4M={oP`2 z>B-9C`ii^29(R{lzJb5H))nLJ1=jw&&=;7$z}_IYm>3bRFFsfmp2dQFGDxA;6hD8@P(4|1M3I7;Q{^q(vDd+xMD#=MLBKwP z<2%Ld`&(sI!=3gmnZ;-W_(VqbPg-b7`6Iq`c@z!sDH~MH zl-H1%P4*D1%A^L%F!WViKcG;SsOUdEYiTE-4?_}R&srykSp|w7jjV?;kyBnv2hfx3 z%Qd z5DA?wh~ZNhxUnVFVxChO0yH1wndis=^Q#$G_Y#h_JV%m_kWzTBwFOG~(8*-7NOKf& zEeaC?0dRryG$9;E&)`aZXP5p8)y0Cs$TFApN&dEb}4lQ%=j zUM{Y#&yE;a$cK#4+hz0yC`>;TgRsFRyNE7|ijqm2FpR;+L=2eF$bj&wIpehCO1C}X zHL5T<^wZns;3n5JEqv1BHwx&l-`z rHqi)HaVGASyeINH%BYo6exG98{6%H4Uy9TrwR02)Ip7c%P22wkm&?OM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa813f75c6eec4103d0850891fb7c1fca6d05776 GIT binary patch literal 1609 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 SNK%7k8?|lir!Ks&IR6LnDi&`5 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c7532ca795940ed3bda354b76329f75d9e5003c GIT binary patch literal 9329 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 B;;#Sz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f4e1f094d80add0ff54ec7f0eff0c53a38c2b39 GIT binary patch literal 11706 zcma)CTW}lKdEPq~AOJ$VNt9%3Et{5Li;(S1(pr^0l6A3_+Kem7alD~}f;dYO)B;PL zvyjB?B6dutaVJ%hW~QA^>j!eCN$W|bNniTV_rCR|uRGI+P9Hjc?sU>Rwb}1Ky9Z-t;Tos#}$L%b)Dl z+?vc6{6pO-cd9$>PRnQ8pXtuJvoc@w=emd8!!lp;k96nV`R-BoX!n?Vtb5!&-hIq{ ztoyk8xO_k1pXfTSqbiXtXZD2q1S`8I-&T4PhT=WBbyrpB&noW8ca)xbH?Q}U`xNRe z4C{S=SZ^V%$ExnruPSVk)jm{M&70cR-BWlz#HR2()*jhpFvbUsqtrvQ0yc2Gv&lByS*Ynz8C+La9 z;z2+3crp?4R!_8KDaM>^x7zC-Yo;>~w{BkjOkHf#28{o7JY2vfeuTtRh`qpCD%eT` zOXsBEjQ&5EpqvLc&cW!y`w!m7AWqy%xxDIwfSMt~}tWpj8x z>D4w4vBT`heU;6#qq46l^m~jQm-%V-7<(M`X4qj6>_k$?b~S2T>xr=C`@#v=J*U^| zddykv+zUa9)1vNlda|5l+t!HMOM#O=9sqn9gj7fH+>J=>tJ{8beJa_Z??j9 zCs=h_p+hf2C+K;@rr7}Pl-iEp>3NN|hE29W*y`ICp z7K7?@R(a5MM2LK&uF9EXlgll}nqZcGmv(Cc-P6ts&tFX}sn_@?3V#a4pKV?`xBM0c z5X;y5LbR4I2W{C%EWg?bU+b?dU+r)aF22cw4JfbWJ6`Y3^6Qz8uUY?N z*fOVDpBrYHqtyC!UM_2WW|XM3^hGqADV@f?-rF$7!yoBQGSgqfC3cX+(3d?_qbZeH1`?2=)Hc90svUgD2qp3vNxj^xMi zm=y1Ld?f${wvxh-JyW*%L`}@T0AJLrvMGNS4P+~RigE;ElF6)5X4FJd85V$<1+P=h z8WPuPh0rYR#LfxmR@c0++3JS@(Y6!vDs^bK{Xlr&=9BbP&D2?DER#a8DXpGlxHMUy zde%DZs_%Uhc|l@VQqw=Etd{pmdQB^<$M?#GDb?7EsyThrM*9d$YTU#n)wqjH2qnI% zh3W9dd_OUC$0J!hg6IMS*$x@AEGZBiN;qFmA5g`;g9%~ zuD5Xs3rPrmz;Nmk1XmYZA~B_mL&RtB_TX09=lxc9g|%M3N9}1pEG1gZw+y7(M&!%GPjsFgn+poKCT%;Fu zE#;f(hs^W9LirW63~-4#B$fr00j7bnu&Sz|R`EB~=-B_U?lvib{73st3PJMCCNgCH zchpeZhC->u>kHUK^|gN=Xy7)`8M>M(ELj)JUfC zMdMQ3tR;#nwWQiRAJ;`CPe@W zdiT6G5Nh2@NmCjPpIFjn3b#D$n7aHbx&*HPVjUn^GMSB=FYG(0DTs+{ngQaKaoI?< zy_0*!=h5Mucn4bT!)=7wNRvszEkkZXXkF5u0|-2{bDDx|$Qz*vazbN=g&ljBa>ZB$ z$%-H^X=)w%_ayYQetVvD?i$sYh_#(E$a{haEy+uDD^wTcJ&Um>WDiDcY*cAvrroDE z=N{1bOZ&;rfXz|gx(r(~Fe5wGHYQ_Wb!rW_Y1&Z2+SVOa8CY<>3e1YFIb~Iit>&Q* zU=aq^x2?Nyx6lKzq`|i_tEm_^X~WtDs>FSo6~L-LN6w&Hw>17S?lU{H%%*2tPMcRS&F6F}bsNT!zrpWUMndO-CS zyoDy*()KOUWF0}YV@Zi-of>#|MzrpD541icn_xY8A0jDUx!3k27D$a40kIU8yhgce zNa_WtaQJgn@H&#wc1ec_I&EcxzeO+9gPMjnQ2c#df-nHgf^NY)*lJ0$tr84_26Sm@ zskSMpH9Q~xyatq6gV})oQSJA&FG?^ZCEyN=P$g>Edlt~A0ZoPWpVPDP-%;%#8}3t1 z1`Uo&DyP3kCY6Q_5>x$-B5Ht>kdJLBrw#Lt!lx+C!PJ2kTCgC>hArzCcQyVd(+1S4 z1fWO~RV1;EpuRQ;F4|1b)W!*@jY?PzCs*~YuR(bLZbmgGN7+y}YO?L2SZC(P5N)Uv zy*UMSVh!|f>r$Pl8`Jz9^awSP0@oOFTQ5Y%Z-B5cH<>s%omB?`6`;Nl-uTs!k%Gby0`3od$;myxA3Nc-GzWc-=(XypyT+B;2*7m|#Kwh;s1)lB%xlRW3)R;i2{ zBi741+sAr`&?z~4lJz3!H4qi7b;~3++JRc$C2RJ}WqqIz3_uoT2jG}M4OzBb73J2T zFd$1|#rC|itPP5TQe2GnxU{Ve;H?)V3!6kWFCTHL`YK`C4-tEMFef zzFi}he_M$sc4o-e>X~^CcD2lRFxF1G4tgtBJR4W!iU9zz{<*j;pKxbnU;iOIymN$A zVslOj=XYsVC02&`RHLU~Cwa&kye5Jhq4Q#XmU{@oU5z<$u}5?4k?Dlmuum=up#=!{HV zBZ0e-Scq|8(CEoWTTO>%L6&nVdI=G`d~W2UVtIX_Q-ZEkso|U^fKSf|X~1LJqDV-m zcL#A=)~MHyrrLiQi%3doyp?Qrq6H!`D72T@6i}ryiTpXaM|@~35_`RmXaj|Or9qrP zXeo~drH(Io&%8%TQ;yMrYYY$oe9Z~?r)KCZ<-S45J5UEfDglpbT zi|dC{asPd)TM_F}IGa3J16&0p&h`Qp6n@b}{=_;w8NQMWRGUcwQ*Ewx!=%veZc@gb zAn%G$(s}^pM7W60Vi0#KRf3|~ffY{~!JXfS8pdD2-Im}*a8gJQ(?tARc=4~e1V>VW zZPV21-Vq&^PdZS9%1QkYCO7s-IZ=#7T0q2KY#SC8R@Fcqs%3qly>I-wT7>VeL0Rcg zR=?JMH3P#+y;W6P_KzO+Gz|*vedC{_sd4+6f{1-;j4UW!Bp8AwOV02PymY82?T-NR z<+D!DeD)({O$C(KVto}>3!-Zbbb7yG%32oHf|Y&tdr$)u+WpWbj}7p9*ru*8JpgOT zHJqm5DKsZxZ4n`ZY#JXayV^Lo)ww_|9wJGMjiA$mNBettKs3I?n+VAiaFkK-<@m95Vc@2l3!m5xKV+TO_)7FFb$_BtJZhZRI!7SM>b&HiifudEq$y;Rm$IH-h^!f$Pyc3vgNbBt@d}3J6vX4i z$~l0SALHcUMXrx-wFYG7r0!`cN>hUQq1ksauf z7_PAl08GaQxJz3~)Mx7UNB|`P5FPV_6$qicS)OROfKjE4IhaMhJu&ips0qUd`~h?7#33LnQ(Nl_=gCDyxuD(!eRu1einw4RQ=wWg6h&3FNTj40<;W zFrX$Rnshp95*S5L9gxk~1q=nX03tz;3lff|J-m|jV1$L(-d2ab*f9brv4wUN$Vlrh z$3?N6)yF7li#+rZ7USZ!$}EIX{IJ9d>;dE@5gYfGG9!2!RV zlV8n$M9CdW{v1i7`(97tD4@oBIJ{%^(g+)+nrEm1QVa8^Xyy(BAad8Z6oo&dPNkX} z>MBmK@EmdRd1P$8tkwW2;H+yDg63qW~QP zH-*BAbdG=+GPFyqL5nt$+?s8>M0On>d=6 zHQ`x@i1nn0^`~;CI^~G|O5Spdy7TajLLN)=*svcs=Lkf}SkoDb6m-J$q*a`eQS7{n z?Bw?9wQt;f>-v@ErWha6~c{5QjZNlDp#=0q&eYomA!9IN$XpR!gyDqOybXLA}05@r`Ws4Dl%JBDhblhO?9wFFlh4>cnu| zq4ysn$xjXl0*h4mSLxj`ByNGar0NGGo>1rtt%yR+M$v+V)6swhskfz^TNEwXt3k%g zB;)VXfnimRW*)ZkeWr_+G&EiRgon&@9fJ6&Vj|QsaV7u?Ct($bGY~eN;X4oru|_Ar zFc>Bb#@YPjR|fC0Cvqn6g^2ZCoFWeZO<4g>$f%7wY-2$cTuYx|8pqpAV-5)EAp|%q z1ptw!%(==yuTUaXW0$}%lnI<3Iz}o+Zx03J1~~yk<|b879832z!w(6hlxAM}8HmpC zcrYs)6SptrA0*)01*j8nfrd~>Sjx#fB?fKI zK~^Li_#I+J3M$(MdAcw&du6?>9o1|yHCh>lh;oS60bogA*(_-#ZRFpMLK^ki#BRz1 ziDok?H7PdP_dVpx&F1ZX%cm(II7#2wxHH`j&T4yW^Z|!JJOH0%taxi}D~k2z-R!eco@j=?gPyT2rBvwtggrBkMbj&d%Tx)XK5qXu?v+vrvUmzdd5?2y)yB2&N2-K=f_l$CSR46m_;4-# zXwCQ@+!c0dB0BzGT^@u)UU^*42%qfCG9Nh$>*oS1BT8&__f3=V*-Y2u|X5kn8^r zWj~_{l1Z6^Vm&xD>HyO86KeZYO8%M>S{J9bNhJ%kw>{s-PK_ArZ>fshgbT?1gvKD9 zY%73u51}@#mgaB?my9&TFiUivI|o`aTBp7g8DyxV3Zfl>kHcz*%w;;{hiEo7xEz;o z>o4-P)l`XN>(BDPp{hTo!^fh(aE{26@4Vtzy~+!Ntlq<);%`l($9YmXBB1JM*c}l%THC%IjVONNiu_@$0vB& z$Yi{XXEZZa{cThYxi_n(d}pg!e49ZY#pi| zlIvpgaO+6*h+I!JkG76gkI8kZd0*>z^|)M5Ht%n_RadU3nh&&2R8JTg|F}2po9hqa z^U#Z#n`ZT-m#IGN&)v*aPkA%mp3h~fWk2^)#+&u_elFwfy=mSws;6tT$^N<@u`7UPVs9 zQ=RVhwMNs&jT87`i2MN8`(9~v@yJ)rt+So>N@KOBd=L4v3-y-oE&8o)N7dEV1-@y< z6ED^S|7@q#s<*wklw6!ws-wzQTv}fH2s=?BlO!rqtg!J=|)g%thPI7 zq1LU3Yw=_kEw^jeRlSQIpw)xt&R=-pt&5Abi*KBL;o|w)`GvD@oO@;AB|Ms5t}n0g zMd@w0g{%Wz<#+4KudN5Qm5!>dVpwPnPiAV(dbCx;BXp;$M?HzhH9oI38vzRyLyWFj z4;zsmJ@n~Q&%OEdwR*GXKYQZMW>3|d^A|d*6;vL1?#h++iSm`;^h3*>-}KMK1!?ys ze1eCO^fTu&pPJe>!c5<|3Citd)J$l2M&CG)xoLdX*aQ`0mCS|c;@Nt8E_69v?#ZCy zzFyz(-2fBsZgqO@TK$^uzO?X`n+(SdJDq0WK2~}BC)|#5+x~T5xs7&!6>j=orEIDK zT2~H|vRQR7KdY+V3gUcn^^J_$hiA9Lvrk=lEAUltQ~NnmU}I~9R^okYJ@NM zmabfAs34qwQ+3w;#m3T=pb`4>-TLxIebo=HcPO*9cPpO4qAhQ5)udMspeMmB62~YRrvATU-7)b|2ar8B#kkL8@p&Gf z;NwXA3|Ru$f#I3h23arbS@^cRoM+=Z=jA;I-?pFk3SRMZn0By)2~2t^o>^4&c7WBc zFExEq^D-AN{o^$k^ejFB`_VW1nHm-nsnO3OmBsspu~5#&)(T#a^Ik&<5f_`CDo){W3y&+b^b&f#OPnzxJ<^FTs+&eJD@r$BVimh*9;R$Fe? zgP>MpU)WDvnVlfc27WiT);o>13`8A9<=-&WF?`))5ZHsNR(l)|1Ja<0LChNVhxZ(Y zF1yUBPXBm4nEDcKIEcQnp4l)jXVf8Ne8Y$>&h$4-=|Y_AgloRq-4nZ3^EYd?pTY~@ zV|^tfI(UzXWSRfZ_AzDBzM4aIs?3BNX=Dk}W)lne6mz+X_iT|R?pin!oGcvoLWo7% z0l}?<(AKS6>A1@|b%HgYV)76Zl9jB6I?1c?-blG;kRNdPvu3pauHkbQ7s>_2T^JW@ zwN}ULfkbO@saD(U)tj0I)Nxi$mZlzIGSAZFE8x-LmhR55X}KantAj{R;}c9FaWanS z@SPE=kW;^kqq}X_Ofk$YsV`j`@85( zplrb_d6W1qdQ;vsz9+mH?E5`&;l*B~>2bqH3q==ymq4z50G{Q7id=Bf(04m4Zru$> z7zB88(|5fdrKglzVl6J_U>UrvA{G5P41}yhvyl-7BJ>0nl24_i?R8r9MmsKzwqCaM zUV8%5qMl^(F($(~m+9szQTV9)kwmkDao(F-kR~|aXYmQ1N5XC985^dWz?HFXdgcZQ zUUIX@JsxJ)tsUVY>-k%TXC2OLLzH>BjqK%&XJc;j3$df6!Fo{6Dzc;ZNzL!Gnb_8k z-e-1{g(SF8cJx>{s(3mPZnbL=NB{>zN(VaWHX(9ugnHCuK9F%_KCvSlm5;{fBAx=W z7)o>RA_@oOB}KCYj=Ilq49kcP4X0?l_+7h`otB9rL*taJ17GR2Gj*?IPkz)Ue2dL< z!W}c38aB$^H`WvmhFiuq)&Nf|aCPD5+h%BkZR91- z>6>I5Ll3l13O{YhYi=?m)%KqUwFZzQo3IY<9Q6!G8k7RFvgW4$$Xh z0B%H{C0r%Wf+|J`o=dL@W5E4DXhI1E5P^o3nkYod?jnl9^^OAaz%+ak6$$FFZQC$S z)381SU;1Finl+-m!vz|YA6q4^5a~b&;x}+1tCS<;4k>Z5bG+=k=9f#{A3NDwnQilJ zte%CXy_q#KZRhb!aP+!iWcdF{e7Itsg*|pU%=H2Gx3ldT$;%<{sn90&K&`fCeBL~q z@$&DQ+gWJ|=tkPgei<+mZ8`nyEz~>O8heHIE|0dyymBFm25b4|V6EI!jTInDGBtqw z^6s@2F1X|aTl;PoNP&dY0ORZos=ASa)KN0(g$?ZBt>N-7+|KpFmHCfDk~@BTx#OXt zAtk)etpYr5cT{5)ywJFw5JhZJJ71%|>Gh=h5TXh1p zT=M|+$Ymu#{x8dytp?5(&ooQl>q{J1!=dSmzGzGGT7r_N*|slmDV|%Q%?v zatAYC$b13YUPPeNH&DXyoOdl**#A0MjW;_%nCwC~1>sO5+P;F6^W3E^_s6f-pdvvI zSoRi{JzNXidfAvnSTXbvf28&m)oFnna0%b6lH+ofdL+^Ku<31*P=u?G)lb~0ZyzL*i- zXfBA10-@zW|IPZc4|2@4>fthwW$Zw&(n_h*X=?R!1n4um0?Nte*5blZhT1 zp^M?f*V2ivJS~br@GLI$%V;{c(yT-8PMF>aR1{mnyGY8K(oN+9f%leT+YgrOT|X|o z4vqMgi?1x4PvxN13RVN%y-)Bx;(>Ty_a2@2Sv&~{8|}Ph6tlMJ7*pnyVVN_ce_4k8 zqv-gLAIDwOOez;Oj%0k4ui_ zPIv30;23#Ty}eZ);VWfZOAk(@o;};Y0qs7}tikTJA;4j64QQgW ztto59uzqM+(VpRqB&8P0B|*)q!j>LI66b3*ud`gMX}C@6LUQe(?N3LGp0u}B}34#@+lpr(P+K>7UM z0fvx8$O1)xm4IDXbq8BTR$-B5hq}82GTq>utNL}9xQjb8bgws>O<)D#``DJ@n(Fjc z*8rGRMF1LcLU5{_3IoUix7Th^^4FU*Qpj^a1-~BBLQpA6o0t5sr`qHsE>L){Ni)>2 z2h#d=zzi2gqE@{L%Z%qXrdJ z5~Km30)RmK;nmD`)-$e{+txPnU~{@}+wNPz>3%La?U{Z1T1K7rvfEbQ-mxK5piknt z9Xy6Ik0C$T&jK{sB#X^MUQUAuSgi_Rm{71_N`YJfz{vOWJ4F(W0E|KkXS{*{jKwj4 zfxL1tx*{w5Hl?vF@YQZ7B*(uBS|Sw1nqMX3y6UDgc?J-3gA^dfFTzMJ6o{`8NL{eU zH9WoD%jSg((e(0KUBP(y%-NS;xODma;$k$J=Df9dVgBQ44f7Wpb#)%!V3t&m;(S7k z3*`ybK*mtjP)oe!K8mwV0FBGMrTEs`_G`R)9ZA`NF-?y}UB!L1fIBQdHb9(9zE(QD zwpX2418MpShR3=WTYRJzSj%whYbp`QQe!QgpudYE0a=)nD;Xuz0+ZJN7ML_u7b-Ec zS%MK2px81#V}BgN^Y{c`MKY>L`&KpQ+tvJP28J-8ja3thvbAbJP0k^m;EE%!q}A!_ zq^FhXDSuk4(=edT;968_T<=Nj)w9}GUEQl~)YW~7eR_XlpFW_i)769CG4DPobJ%G?@Y>p<`ei&Bihq4J_Ve@S~*D;D4WlakteA zLRa-zClsv23ZVB#r!7NHv@DK%eqOh723P)#+Jd5*c$l{PAoIlmbd=jVZ< zt~ENnAex?^4?FWf+5R(vx^GX;&$m1Cou#1D^g}<|Ge1w*rAx@ZiH@L3&qGd2EW*zS z{sZ6as9=m)QSQ*%e3r!aeIzv0QBz%oGlsUBcj1_kJQ5c3oRK`(WW5Oz*1J|x3WP`@961}C|z5Jc^SicW!0PWhG9irWoqFJ3BFTsR0Q*m?noxkV}2g*hs0psEV3 zN1ne@M=qq)GHD>T*8FBSDh#Luow^Y{e^Knx0mWiMJr(zyev@{9HVE#=w!}ed^VDr~ z-qT9^#}+}CI+KurR60JsQ%T>Ra!=?jbD~Ta#Wm21x`8Ch3H73fbqHJ#m|qK3&ySvb zOYg~hRLLzyf)`{*X`y!orovR$2lY;H^odOXwfk{#a2rHlXSYS09b|ISWoGIvuxWRs z-)mv3c_zFOp6PC#ko|UIJvfo*Kk3*pf64gp3=4LdjwqTE2dgz`DA3zm_Ie=oVOibz zk)nfzwLBl3Y&a(D>R_t{F|rY0NI_J;&}lY1*8?}r)sRQCm}24S4LtT}QPn>W0Vf|WN zX*${~Of8|dq|fn$rl^&AGw|c1nCDtjAn`j61`@q`u0tPO(jw`Y3)E@5clS1M=gxlO z^4uABu5y~`>Ceo`Y|fpAS#x;~J94C_r19I>iD0;NYerA#c9y^!HbA(TlXSlbaL_im zz=s$FY?iD_!mml?+}+VhU4>uAs?OxRx~J8FMSBan3!(`ATM%8>8I`U14bDGqQj6&@eWU zS?&@XHhTB5*D`l3;kJ9NC0{{0ufVDVcs|F0VTM`zNC7t7X%XUkBV}bkBZVP-i644h z$iaYo^Hd;>1rV25jKQ>2C_W+U(hO)5n>|SBVBl|sr}d{v(c)>Xz^9jAUh6cVc*Hp% zgCN9Y))n+`F16|*iQrTaWi}PDgEdZYNrm!x!}q)MfPB%@ui?tA;8IUYeFb|fMZyVn zz$=U`g4xzv+Vhust1zsrR$xOYq5C!TK)ko9Nx%mGfpd2^(wrPE8~hFPsKE1PlWZCz+mQsb0CxbV1p8aQo8co!fl(avva>?_-74F&oE@_$lOt+0g3eZ^E&UI{5AcN_a4S*d78=#7s^Ledk_%8sv`kX^=bCr$H|J zbU@Z&5?2T1ibm3mcj%g-{uKQ?%peNMIRbO)kNS4^ws&;Z*ebx)9vp&1CH{7?r-#dOdbIXvc`wwU6F;Chv zy!$s$gL($<9@seuQ^=u^rmh(Tc|33v<;22r0xN%bmFs`RV|r9-J|<}inAErhOAKmh zNRDoIkiSZ*I)XZnuoryWdkE>_b_IFI@m9!ZJNJj~`U7lD*Nr+^X%UF_ruek;B5Ls za6Nw$J&Z2EX7vaR9h3bMj2KVAs8Q)>uW@C*j~;NQA4TLvcIOPR`D3?Ct_Vl=p0W8| zJU6`KSQS&zSHiN7_p|zWe-gD7wm~~P^ZhA!NHEg(%uTG|=6B!byiC1k21oIzV7B@)HZOO)@@Xv7CooYudP)004cMnc zg>W#l@>p!#*e!DkPt)aaqpP0%G9lQf?4@E>J=wabS^OwG`A>42jNFLVz^+=^xy%h?rC;98v(3Y z8@`ZX)7LMEp{n>aW95L1yU+eI*OESUJ7dB?Wqtq@a3?zPk!w155x6~Ag=u&*c5s1U zs8zT$a0Qh@HI`y0bxGYe=A#E2ZL#^K=9QCBn7oE3ad9n}>oH%?#YQdKmw35`+8~~k zAJzWBzl2UII%;Tv16)HmQz&~fo=H1UON=M+bkes$#-2gX23a#{57Qha0Y5a{YD3|# z@anHHp&voG!O+MUJ4=X}B=AK?wu0CKa=RAWLFmDFCFVu72XDo*756 za)EWhu0bt%~(`jEv!y6e<@R zYCM_RH^saePb-1PgF@wL?ZoF)AWkt^3-$AyymygQCz9o@rOZ{9uR4SBHNwG^H^vr5 z7E~va3E>c`6L=>fWT>n9Nr3RBw1XYCB3pt$Si8<_&5>RpiT?-W()vnkz5YfZ6D+V( zhLb%2r!fDWy$*VofIMH$P-;R-W%U z_#mwE`_42h%6IVWPBb;XRma!~SqZ5_?0V;L5o)U*oDhs{xRTvAwi$&0Cm*6vfMtNK zEyM^Vk(Yf$3f)5ZEAcU0-mv`hF;WO9@R|WwhzQuKFWZ-v` z7)`*-8nyxgv3Be}VmL4jc|cEW3CVK^e1nHK_rlvkb)^8M5FVFX0o^Q zP^9we^}Z8MY-H7oVF}v`wInLXB*N@0JOxd>EzdX5J z=oe5zym<%%8hGg>=xA-!N7pxZX4x|!xxIaciWQ@$#mDC2Pu$&ZYLFQEF@UGE=q8Z^ zy0nI_clC>yuG==iBwka09XHV_tQZ^yK$-NN!U7}b4e0FL8%H4#D7o1MEv7NO13U6QLN;Jk=2dWx&=U1dvS*A}Go_u%#bAugff?!|r5K zaKr$9OM;Evo04nxryM<3L5~`e=N;>VArsn#1jd|8WQ;|8Lfw%~x0{1hvpVRX zL&7J!qLonDhX{CJ8N^Jzo5f`OI(8U*<1p>y;LXm_ID_0*VZ_N}hdMh2NsE2#I4b3M zbK<5MoYT3Imbg>+lnSYOyPw;c)VmO6r#u^b^Aot5-kI^>CD&@_=EHr2=fN=19V@+O zXVy#F8?X5m)Ka`-qi5A^N1hG)<*;8cWU#k;`wqfyX{svri)eM+nD4`1&wi_~ z5Bl`Aq)){@cu=Y?Zw6its(NO94_eww^&EA|_;&Wo^?`ngCIj``{nGXX!WE6pztx}U zej9Hb?0!2ugm=xI!{CBPFkeo8;+BLQZU&o2!=nsd1Sgq@ZVWidOOS;0)yO7>@Dp3E z_I0UFC#<+HG=q*SXF~7@o_=r@m~CO;vp9r+Z;p* z6d{-K2`D{9Cn`!%3=o3E*khz4S`o;4z)lbW1~rakJpc^d-30!1RC*^RaOyz-ULOE} z-H9GfH}8;zjbMg>F0=@xIUjbqUgvr{o>&oY4lLapK_WHxi$8)|4F;WfyTLC78Kd1y zbYM_`GYqANa}3qzm`FsCrPbo==g+OMD>pLM*t%YCZisrMCQzg1 zb1|=kpNj3`AL2H)^-AI#u5P!1@8 zJm(;z@eqmE8*Htta0`yaUNC+k1q-f7t3h3fz#i^b!L-8-yHL)- z?dyk$DytWRVi<}nypusZn~MCQP6r9a-K_pIlIjGzR!flb$Cv}ukmg8rh_OUQ5*{f_ zyq|CX0g`#J2sxd?6`jI5%upoX8TuO1#-)bkEM7_fh^;BsWGVWnM+6gu(5J3I7owe- zn3(ou9OVHhv~ZZmS|6}sY|GP2JTT(yhPlo#dvHv^U zADfRj+>a=dr1gGj#Nwav?!#LCK+iqJBYH3ayYv$XygnelgF{kVemJ|ZE*s&&^+OPq zh)X$~Sw92;K7|&J_ootA&-NX8;|Rnk?B{srh`cie0CPX*R8ZSA1nYDkq8+XBo$*#a z#u+WU(LWn(x%046A`WDH1M>t8Jj!tNGb)=_$Dr#kH&z;qj^g$>qXVKSYC39Amjp&J zk8iyB#-esmN&tp-@ZQA`lDJM6fAs0|z0_PbcC_TKGXYvnJe2G>w#j}CB$|32n=Sgu zx7rQbDbM*#&l7z=VMigYxbvc-VtZn|>XgRihh52k4yL!s!q1nN;s@cRJmBaPd$F-iRj?)VK;gB z)Z@!|fEcT^mG;<^Gf&bz3>~@K3!jm%x0oWD$!C-I%MPb z!b6dH{SkPyEgVGjC3rI`AvlfnDIsdnqd#7y98enKHckeqW*Pm$&@v-utm`S&5(H3{ zl_-(HhJjs52gD=zP^gO4>FgJq9bdWi*7i`i{cNs1)YFAB790azIb``B@9ovni z4r9{vp-!r?@r>5|*bNPbB!WDiy?YbHlRSuj{>HK|L4Z2GoMKdmpi@N@ILGq_y#_SvEA{vUYo)1u+!WM*d}5 zZ3J$76`)k>FOp{I-|3sMQ)OX?g0fF56wR~{j#|s1kv0`4mgFHq96H`bM*ZSRo;Inz zv1*D{%GqU=dJR^o0z~HXVbQZktWpzR9%At|ykAQ7;r4?eg%=Lv$^kgBM!}_PLo64^ z#BzO1EW>#obO3|)^l6ene0n&mty_p$-|JCZg(&n&@?;A3u1RSjwRcSp>|Nt+d}UV~ z`_#Yk5b}W9_TvoIG)8Q#X74%T?<6Ds7DhaC*NFek=!m@{0L{p!yeIkx1M#UNK*
      Lx4;n3R5W$ts&}3$6pNs9|sZjyQD5mYvNav(5it0 z>mKqK!Fj``;)#oAYpEFP0RQ~bIH*GX!yCb%|=!pj_ z?t}BmzYE?h(N3q{eBtbCXw3b@`Ae5yd1ImM4ht34D%w=9GWk`uZq9e2(|>Lcv=b3s zC?6Q%V4}(X5vwA@7_kw4lefFL9}UhU)-g|cp4_7Z zy>qwe(0qq3rDJ!*6$E}pO>+iE1dszAbi6cNK|ipvR&J>0jQQur7|)myZe|zb5mthu zDC;md^IuGJc{$#A(1QUSc%KJPETGnPn7hf05W&H?aIh{ma#J*=uD|2zaa!t-OEhBhamxg-g zOOxzR`kMIbBZ7HqBRiGbFrFUWcQ{m|ewRIv&ADsW%E2B2pu}>dcbe?PqIRb9_gP?> z>hR|l0%-_GVPsX{m)6Go-^csanUOZ-jF0NF(M=|b$*%o+8+rep`;|jEZqpXT13Wfx z0vy8GDdL4Y%%Qc2HXz~y{Y_K?tn!YPi4Lc@`7U;|P(Hlt?Vo;Op!Aw z4tHbebh*MUWWZYA+)%RHz;;iEwlPqL~K1OW=Jut{YC^=%c zG)@l0#aJDCNXiQ;jEq-=&DEo$Zw`Oqs6u|OXpj@kTs`&?#i-{7`WKmq;k1pl#ESPP zZ%Bzs>i!mYFb+!T0qAEkWN0PzrmRhMcI@eT(DZMpX;yi7?1A!E{Tnq#C_!w}UWM~o zqt(i9YV2YDq4E6WhfmO=K2~2tnb{~vJ1JO=;( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bac20b06582e56a123d78247772b6f4375258d0 GIT binary patch literal 10179 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 Lwed|0_sstR>nmh( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/migrate.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/migrate.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e031807dc3c3d534ec497987de4f102ee9b4c7c GIT binary patch literal 11052 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 n2;CLT{xVs``kM)wb5O8F%+U%97JigT;O99&Yz` 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 WKX5Uv0#1dlrfJ|prtzQg;{O0$>_(>m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a99299ddbe1631f1615010c341584150c72ce557 GIT binary patch literal 1766 zcmbVN&2QX96rZuZwzJs;T0+&T0{H+cTXmgFPY9u;DWsL?7A4_;wZd{dvxyUbEc3>V zVue$C<$q|8{7WNo;>3j;7erOwvv<2`goMPb=6T-CyszJTZ?;-n>oXjG{_yMJA3er? zBj)mOklDfskB|r^c+MjFS~)MQ$SUl}E}Y2Wv}fnN!j0T^?c`qJM?Pn}O!S2Nf(ci; z&+TYM@O?J)en)L=JhaVfkz{$Ch$1V&thG#$l*y4)U{*kuBBs3|H>(d4kULd@rvh1D zXN7F4Ql_No^01KE!U>-sku2hZMV8=^Ev(29ws2mssMq-vxxzzleB;d(H{1JY5`rYq z5_BNRcA%?3AImwD2%#i^gaBqT&8C?YL4pG6s4irwA#C=(uj-(vQM|ix9zazr#1+cS zGP-y#s8ldZ09xgv(IRTv9*tT+f@-F-s)R75m==T9m?^e{6Ye9q;3t?DVNq;9+q~lu zbKwd9Ex&?%zvBhNm{-T9*M?{K-RAz&Qj*=GQVU0yabozChpU)`L(B9^j2nz|Ec02@ zU&dhipixzd7-%KAU`#9Zn$Aax_cQQ!Htih?Ar|sy0&uXR}K<6%F!j zS;Hm)O_kSXCY+s{wadQ2dzA8zkvQCHf9`9icXic&-F!GN=kOirl%wQgP+z+^pW=iA zB!X-9lD}fwdTGC6Q|ku%$=1#Vc8y>cSX;LkRu}d;u6wtb`bhWi%zbXPJ09+Qrd{0e zX@@GTt+JJIbMs)?NmEr7!KV;ZCDP{Z<7seS)pxMwluQJs9IGP3#>jMVhCKy!nqsR> z>pWCGdN_292lXN0YrFza5YnhmI^!0vX#H(>#d!ug@)teT3=dH8yn|cSi29Bn(Vi8`nCAdY{mle{}=TPfNoG60008UW%ss_FwYr*0Ej`qZw-G36nlgutL(U@=IUvd?{~!>Qn82hkhbA>KoBI+?RPKGqfgxs9^yl<=!J_0^Bc9!a%d54 bE&Q8P#{Z%V^Gm97pg%RAZCC?7;2ZWo*qiQr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/shell.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/shell.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..042e6f67dc764ed403477f3f36d310e425450909 GIT binary patch literal 3170 zcmZ`*%WoV>8SnS>jAtC@Ws(gmwJcy6kr|7JV0X2kgk&FCkk^V6S!o$s?XL2;ou2M- zRgGg0GaQ&b5^>}@=Ej}BrX^0C_yf4G3+DG#w_`g%x9a`XSHJq6RdhNn1K&S>{nuUh zhGG1T2A4kvg9j*b6BRR5}lnjhJNUq#-|2z znER!{T<*^8u*u9VqwD=0T#b#cRWAKJmi$pM9L6~-+jZw-Aqvqo%hnfyalzRZR|##n z{8<=0K#`A8af3hskQv$oBXkA;^d~cPna!LpjnHE*^UyX}gZXHE)?_WTO}50^Xj`lU zP|IbbK7aE2r{i1(ajFAiGpaD z0a0`|ChcA?FM5C{)Ob|3q$&iDlo<0#yuHtJ+&Ik#!6=KxI ztCvoedOfX&y*S~MWNXBebngUA{-1WLd7_4-&xIZoBVsE*4AyFquH6sTYN4V_nAR#p zYe3OR_KP&(QY=B5K#@$Ey*Vt%xl}x6q}^h~bCSnfa3s)Y_X9D`VNCTt((B`c zI3E=HG=7}o!lpg}C$?k8qF4;ZB&*WX3?$|q$+JCZJr#|$(>JA_1SoL=aW=O)!P)s0Z-J<5!A5r%XD`~ri%AQaq==AaJj=YnDqpz zTZbEBj?TtdJEdIL7@(c9a~YewMOGG|a!iYU%lq2#sfV%UedRQ(+1A&S+qGNuuk62K zx;FSw(Wd(jI%Kw)F*IiuOw@uu+po>qIGqh)f&%fOqs=p_HHirak~`{JVWaj%K_I)f zxQ3=|)VkM`T7XrB@Mj3}n{^aPfv;^YTa#<&sB8BBg_qn-tU2`;x2Mg;>J)cA_{J%A)aTqe`Qw{&uybl1+@0F2@y5XXN^M~)FQPgChMg+` zZL)kdaFq^4?a6mOL2O6lPU0-1Xdq8yKZ-78kNu)}8AUKuH!DEYeW!FN#0xUI(kf)x zs3T=*54b9wQLOgM7C#;#E+NH;(o5wYjwl@pIHe;He#9Nx+Q zi|@kE%jQS`M#PVk(gv#X=Kp|IEYT^IpndPivgz=f> zwa{YqUzSTf-@)uxR?|0qbJfBMXjYubGOkH)l{#&~U@tz>B6;F3P~=}w!TZd+hFDg0 zPnmOryn=Ep`6IJl+F~6&XW^b2a$R`~k46J?U{J_Ag}-9|x*}?4(Kt0Oa{zY-tM6Cs zz|1Y=b)P~IeERmxp0reRYLFjJ&AGX4Sn#DSc&}=mJUzGn!=Jt~)Dm+SZSs=2`8%`g zZD?cC4>I>vn*Z%r0fyZl^ZML00U>nH29q6s3=+ zg4!#@uymzjX-=jbD|Lb#$1|v0tbs}_6KMmsk0l{`G(~Bl^k`?Sy3U2=gez~JQc;yA z!I|>y+osSbE-3Q5sC;V$s`Op!%(tw6uR`57T*pLvMh0?=OaO{T_(M{dN=`j^nIa(P=zf75s3V3N9n~n&QJK+2_eisc$E45*$i5Rq!W6 z6&m7&1?!$pODX^6&Ys@3ub>L;;7oM{Isf6-irs8&$YkW%fR0 z_Wng?7nHcPSi^fY#aN}8?6X+K5>LEDje%VUCC&blK;IxM{f{aM{ER$6lHPpy8T~8p ImRt6J0A_(Y-2eap literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba2eb1987ced053dbc46eaccb90ad05cdd00cec8 GIT binary patch literal 4777 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8db27336141b4fcad3237791b633891f081e21f GIT binary patch literal 1361 zcmZ`&O>Y}F5GD6ZvMd{FkpgjgS>z_5Uf+YDs1rA7QA23sI<}nyS1XZM@DW&Lp$}9cUcfPNJGEBoVN+U|16A_5;mWWW&8$a!d=!}eeA0Pu6 z({A?(H}Yv+mb?3ZuD7C*m`w$+u1 zd8`U!<9Zg`3mKpNa2gxStt@3_O|0c*TWBd_TZ4}WVy;wd`BX_07nM6BIIIC324N0& z9=+@Mjnopu<}F;oXIAR}>_endQY0^PZ;c86&<|lEP7{N%hliUw7L!R`78QU%bemnQuF*whU5$uyR_i1_ku%;ZfVwXJp;&D^{P$o2 z4E5H#U2q{)GY-1Yw2jo=9v6afecrlub;IqYMis%?z(_UgqK0cD^?RV6v0QOu7<*6t zY@R;KUctV}UbM#W?4-_Dxw7Yl{idB}&kAkq;rF_pgB-FeSzTqP#WXX8m4^+_U-NTm zGBM}Xd3}`ES{{MGU=QnowUe7U0Gw5nI=*8~1?HeSB;mRjo(xb!9$rIWFK$DtQ3D>4UjPM|4OBbg{o_$SPpm z@A`~Yyp)V}1IEf)v9d*Jg%df28@c*y4zZbNA%o zqodDHpT;L2$494+k1o1?T9qYFRaTWKJvb`H*>s+%Yc0~q zs!JYTe0Ca2l_*|tBuy%z$z@V-78Yx-hEG%DmOHq&;X8&;egsQPXOMAbF!MWuE>9MC zvOPJ9qDSAED{hbZtj_{GGXmc2oOM0OY@8=!o;SZbs_Rg1!)l`a0bZV^Izu6(QYBfL zl~c{yI*HG7$@97!Y-lkC()?_b-Vo2Bs=^vmu*m>~J#75LLzbvy3=i9UdR7%#32BjG z60WHzmkJJ4oi-E-PxvI6=a|e&YkP++3GZyAhVb6*iYoe$tfqf>I8M@M&lAC9=Sx)y z9xE~D&99HOcB$2a!g+~tU%wva`yo`yCC7J4N;JE?lPR#{B)Y`388`+BV{sy;b9`KZ zF9t+Q@_f=cbs{7e-xKjBkpCl&KNx)uXF2-gT*_p0Ql(l*jy}oM@8;vtqfAJ3crL0L zRPpGFmsg|HY&?>g;)gW^lT5iBu~|}1s|P6r^Z*(IXlNMDx=rK*`DMO*89uD9yPezK zN$6=JLs%?oQRl`om#abH&v5>0d3s0v|26kkbv%4cKBXYL{$aZyAl!jZ{sb0ATZ0)N z5=CB+8Et7sTI28ZZxl+;JbT)CWfiAYuAA4E^O}p!q4P~aD%`(&Ri zOhsF0Z)~E41ypMvdG3;Kfo z6`*3_{@Hy_pOe;Zt(kj8#Rm!?uC?zI>Ro?E3I4%Nw}rbC zV|g2R{&l?JdAE7mf;a0=j76{YWLz1Dw4 z7yY&`zlHexeZujEmo3{~2-g{TR7qSXkxvW%pnOyNLu*v54PoP?ty;POAIAM{f^b&-$cvfPY>HRP~ z&pBX3IELFOD{G!+lPn!JPmYrkZA`L~0d8zuTIxc;(#j^HDsHKJEW=ENVBzuE#nYqH z(}ySV(fRqsZ=>E8C3;s}j4SB2>mRVro4aRKSV5U;L`2x0mu%Qk|KPrGFnSLcgz0E7 zp}xyWHtqVSRrPFM>$xMaN;^|35$&uR6Yv5CT=XN9+V~%juj5+qN%oa+QNsI_ zuLhTecp5p00=P^&Zvx;r7hFcWX;Q|b%5w}MW-Raas=2D?3V<#te?uiu%V0H*qS zh;@#F9_A{tpkm5s0A}Lt=vy{1f}!r@&H;2~IsZ8jV) zI|$$(9F5vTeD`I^ytSerjt{puKE%l=5L$KJM7`BDHrAs>7hbfMW#i!{@p8C&8gyh? enrQr1#J|HRV( literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1006d82813b8274cae322f1693d15f5586191d0 GIT binary patch literal 1411 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/startapp.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/startapp.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbaf22e91a5b636ea891da0fd1540a5ccb0f2265 GIT binary patch literal 898 zcmYjQJ#Q2-5VhBvyUUS}CMAUnD6Ytc8X<&~h)|#i@lmi^VL5Bx#bI~7c)XDk1)4-k z$8P|MCV$Bi6%{`KA<@8i?-Fh#TQj5an|aT+U0)v)v|sPOAO5C<{D{G_r5HTH1spd; z6s<^2b4tlRQHf%gL@`Y-Se~f#6`8F3#40kOVe_@F+e&)9YwKDzs*L$%V~YUpp`%Go z6+sM|GnM4&6`4}SRC+neSFT7(@#L^pj^BWuk~(`U=hIohz{;e)twXJG=kZcD(Mu z^VZoDqcoR2cx6f%5A)b0D^br|i#o=22NyiR?VNr=HNVo2N$(}-F;6eZF{*l=oUzTBW_r|og`<-d%^;1Z5vjgYqbl5Bb2++lQg8Dt7#a{`9MCxTG0ax zymT||uW48nqO2r<5ZB~SyZf+s1KL6HvICICo-Ml?<$+?~_-EZ=@zgl*+b^6wMx6^3 z^rU!h4ht||Z@031FJ~GG)nCX?X`SA|o5x(lz_@=0umjlK<0x5s>P9z$4A2?VF}+LA zHWrthEqDyWNc3Y15ynE)R&|v|e@%!Fovb1ujM5`rwfR9`BTS=ckn6RABsb!H`_Mckj7f&5ras#u3 W-*<}mVf1J|{Nwm8Aa+_KTkIcRzWxRP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/startproject.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/startproject.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44d80cb7edde6ca3afa7161204f795c79a807fbc GIT binary patch literal 1090 zcmY*Y%}yIJ5VpO$Nk{`#)u2jM4}0h(2bOD9Ayg>@idrEQKq{+Mta}j+HtJ#h{9w=@ z4i4$N!7<(41LtTsp!>tY_U;GReSFB%A_*1m=V=;d?3T=LtxmY20v7U=N*)RDPWdb{ zF&78muZDaH6GuK~$R`Z@79+lWjmFsEylVN*HL{W409=l4)~U|F^aY2^(hc3MlQ5g) zZXxm$9x0c_0;XKdT&YAEsZwxvoC{Y?xjTu^cy@m>3sdgKS+x_DLhx+yHeAUI73W!) zB(u9?^8oiLymR+BFWt11%0xYj83#ajNKAY$!gZNuGV~aE1R^&0UyuuHY{jtp1AnauH4WL*w#lNG?jiZ@hnDMR4Fx)96?q{H zLBav09a$D!=*ARiN_fxKw&clJH|Hfw-KlTVDttqQ0!Y2VdWq5~38kd;2K`a}*TIqG zLI%T9$}rf+pmowCSX@6HSKOo3iB<n*@KpWDq%a>w jJEe*fS&>*}Sb$W4Gmvy^V_xs3d3;r$I;ev?q-*^H+axwl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/test.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/test.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d920fea5fb35d43831f69c13e93e6773df660f4 GIT binary patch literal 2602 zcmZ`*OK%)S5T2gb&dxrtlMn)l(1a5Ucq617P!bTrP67fpk+TtEv|<=f_j<>k$ELf- ziC62>M#{=d8gxQ@cjA1?^`dM zn)U~FmLC&3pTjGDgobLAB$|(3Jt3*?>jY&ZF;devm24(fYWud5t)!7UzN2J2X{N64 zrY*mfw*5BI?rO9_ou?Xgn7J_g4kZt?Uh@T5(FQ$II)X_VXWIhg))%2*>v@`n8HMg! z+e`*g)eVw3V?jQZah}1{MVv~*CxK)_22-9#Ob8}=M%f({NivL6_BCTu#!Giu#$CL~ zGR7mczx)_=M|=VT(|kfTU#G-3wl&|Rx^F$x#)KNweCqf%wW$46^BdL4eCL^FYJL;X zRW@q>XJ2i^BFgs|_uw=hSoP3X;l&_Km?x$zipMddUYgS)VZzI~nurR{StdOia~8>* z@An6hzT_#&=q$eC3N%ui6G|5PTnmWQ7uu0AC&vVmp@T!l>^Ik|pZlDxO+zkNWv2?P zhk^BE?y)D5hmllsdtp*AFCVMU+8R1uh3!;Vm5IJLoW#NllO%r(A9X@JDg+o+QZ`2A zA*C_qElj*Ro66{^u8?mRDI8h!PlsN%m#q$ZCP#dhEtT%dKxv5r6WoDrFy?t0fS$dc zUYdd>ByaI}#}mF3ahSbkY-jqb!;$hG@C z-+|bV_E@$z`X=5QiCALjqTO(ti4oliv+ev^lyi0spbBH?J@gfD#Wi%YKi%gYaCsH8 zgub`!6*7CX21oxtKL01ZnAQfo>$ow2W=?j1jZ{bMQR@)cr$%hV9&J*Wwhpa&tW7(# zOW!y&>i!B{rRNTTyApsg*LIABexOTpuG8}ionN2pM^+6L?E&x`;BsN00w;V|MLG$$ zSW=P?X2G`#q~0`?6M?D4>6=~@X5JR75uAl7`)En-4`IzZFdC6vfgG2d4)>Lbl*vg> zfw&Ej!o84}RtBjPr8!~Abk9{qWh>4kL+r+TY<6SF zl0)1angbeyC=OICwr!6o4Hs9D|467}4dSHlRJu_Io;OHH zIu#LmcG+GY;10TnHHWvLDI1eegi><;F7$c^@8Y1XstWg4RYoiCD%SCHxKlOfQNmsC zz$>mpV-mgk>Goe{vzB25dX1`Q|7}_*+5fa{SML(@)ft7By%Z4veJ2mPjPE^o#V^oE zAOL`#ysZHN41m3kbUN1giZm8l29#K62S5uLH;>7IHMgj>tMjYUT4=D(yrsck-b zN`4{-_S`(OseMd-?f}v3qXv@bpz$40$b{bl=$APkYvR+#P=)dLJ-o2TImT~;-;>QF zmo`+5J|SLnP*JW5o^Q)I1sL5a9SALyS74zT7BZhThq;703d>&LkyU7Wt+OnZ2HbHR z3kbKdv7qrS(8g%lgk9>w6lG`1fiwYUqDZ7D4Y3b|V^3n)b5u(Gs?sX{i?UHwd#DOS z0PUu#@2~=t2D|E(_1c>h-ybDnLTIx%C0{39TZo(pg5a^Oix=S45k}he(@5(Dj zH$jFRcTdV>wWa5lP7q-22!hfLf~uB)+zx_AMVM4G3eEmS&K?zTbBX|tBv~3n6Bg|X z<(n$V3WEGYaG>neS3?99BM6rKU4dDy@CyHwG^C|KoI8M6(=bU}cbY3#InMRE{C)WN zt?EwbM|n0@Z1FFjj&RmLyCwQtP!Ks5dH>4)tSDrh2zB52=jtV@R#ecaGP=4vQEgD^ iR*6@XMeml5bV|X}xmCsQGsI7QuC|UDXp;-%g7Gh-hSr1t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/management/commands/__pycache__/testserver.cpython-310.pyc b/venv/Lib/site-packages/django/core/management/commands/__pycache__/testserver.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce8c569d9dddc3e830fc8990480a3f199ef8849d GIT binary patch literal 1922 zcmZux&5qne5ca=4Kf8pGEQEm65&n|@03JV`}S(2~Kp_a#;Q?!UusD$0_lIum7zCoX;t4DLWvH$ZSJwwV<>%#Pie z6?@EK?sF^lTi+Y6CS03d-af2LMJQo>!E;d+ywpT-x!{r*uH$A1nQZl8v;-;6C znoA1LvEa+S$2`v!xpzd%nLy9`4-*SJ4?*q=yEpz8#%g?6D@DimMB40E;|H1ks-BGRXHx0mffPpo=rI6lG5#i-j8&%j zu%hV`I^$~0nsnYuA?de(5-^88VcZZz-O`Y*^;1?SX6s^Ls)zXd41{Mp>p%F*3pToA z2QR&_9R+`T{;T=!%jMNIF-HHfnA%`%^FcMRuswvPN)Rhx+coRdh2DYQ)7FuFCEu7MG$teQ@4+4p0H;z)6K-$FHjRspF?1W7umLL;NVHFCLia%J-Cs16)u}TUc zMONh;3hkzxszD^LpwaDhQAu(-;kh!QsL+LKGTWp%4%s9rX~E@ta6rC~0wLduw?Q+( z9LjgjKLTB$i0sG?TxjR-`VJ!S+&PatL|o7y6J__sa(jci_W1rFG*QyHN)ppel0vW= zqE1XdNuJg;#~_lVDHrjM= po_path.stat().st_mtime: + if self.verbosity > 0: + self.stdout.write( + "File “%s” is already compiled and up to date." + % po_path + ) + continue + except FileNotFoundError: + pass + if self.verbosity > 0: + self.stdout.write("processing file %s in %s" % (f, dirpath)) + + if has_bom(po_path): + self.stderr.write( + "The %s file has a BOM (Byte Order Mark). Django only " + "supports .po files encoded in UTF-8 and without any BOM." + % po_path + ) + self.has_errors = True + continue + + # Check writability on first location + if i == 0 and not is_writable(mo_path): + self.stderr.write( + "The po files under %s are in a seemingly not writable " + "location. mo files will not be updated/created." % dirpath + ) + self.has_errors = True + return + + args = [self.program, *self.program_options, "-o", mo_path, po_path] + futures.append(executor.submit(popen_wrapper, args)) + + for future in concurrent.futures.as_completed(futures): + output, errors, status = future.result() + if status: + if self.verbosity > 0: + if errors: + self.stderr.write( + "Execution of %s failed: %s" % (self.program, errors) + ) + else: + self.stderr.write("Execution of %s failed" % self.program) + self.has_errors = True diff --git a/venv/Lib/site-packages/django/core/management/commands/createcachetable.py b/venv/Lib/site-packages/django/core/management/commands/createcachetable.py new file mode 100644 index 000000000..65ed1686d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/createcachetable.py @@ -0,0 +1,130 @@ +from django.conf import settings +from django.core.cache import caches +from django.core.cache.backends.db import BaseDatabaseCache +from django.core.management.base import BaseCommand, CommandError +from django.db import ( + DEFAULT_DB_ALIAS, + DatabaseError, + connections, + models, + router, + transaction, +) + + +class Command(BaseCommand): + help = "Creates the tables needed to use the SQL cache backend." + + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="table_name", + nargs="*", + help=( + "Optional table names. Otherwise, settings.CACHES is used to find " + "cache tables." + ), + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help="Nominates a database onto which the cache tables will be " + 'installed. Defaults to the "default" database.', + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Does not create the table, just prints the SQL that would be run.", + ) + + def handle(self, *tablenames, **options): + db = options["database"] + self.verbosity = options["verbosity"] + dry_run = options["dry_run"] + if tablenames: + # Legacy behavior, tablename specified as argument + for tablename in tablenames: + self.create_table(db, tablename, dry_run) + else: + for cache_alias in settings.CACHES: + cache = caches[cache_alias] + if isinstance(cache, BaseDatabaseCache): + self.create_table(db, cache._table, dry_run) + + def create_table(self, database, tablename, dry_run): + cache = BaseDatabaseCache(tablename, {}) + if not router.allow_migrate_model(database, cache.cache_model_class): + return + connection = connections[database] + + if tablename in connection.introspection.table_names(): + if self.verbosity > 0: + self.stdout.write("Cache table '%s' already exists." % tablename) + return + + fields = ( + # "key" is a reserved word in MySQL, so use "cache_key" instead. + models.CharField( + name="cache_key", max_length=255, unique=True, primary_key=True + ), + models.TextField(name="value"), + models.DateTimeField(name="expires", db_index=True), + ) + table_output = [] + index_output = [] + qn = connection.ops.quote_name + for f in fields: + field_output = [ + qn(f.name), + f.db_type(connection=connection), + "%sNULL" % ("NOT " if not f.null else ""), + ] + if f.primary_key: + field_output.append("PRIMARY KEY") + elif f.unique: + field_output.append("UNIQUE") + if f.db_index: + unique = "UNIQUE " if f.unique else "" + index_output.append( + "CREATE %sINDEX %s ON %s (%s);" + % ( + unique, + qn("%s_%s" % (tablename, f.name)), + qn(tablename), + qn(f.name), + ) + ) + table_output.append(" ".join(field_output)) + full_statement = ["CREATE TABLE %s (" % qn(tablename)] + for i, line in enumerate(table_output): + full_statement.append( + " %s%s" % (line, "," if i < len(table_output) - 1 else "") + ) + full_statement.append(");") + + full_statement = "\n".join(full_statement) + + if dry_run: + self.stdout.write(full_statement) + for statement in index_output: + self.stdout.write(statement) + return + + with transaction.atomic( + using=database, savepoint=connection.features.can_rollback_ddl + ): + with connection.cursor() as curs: + try: + curs.execute(full_statement) + except DatabaseError as e: + raise CommandError( + "Cache table '%s' could not be created.\nThe error was: %s." + % (tablename, e) + ) + for statement in index_output: + curs.execute(statement) + + if self.verbosity > 1: + self.stdout.write("Cache table '%s' created." % tablename) diff --git a/venv/Lib/site-packages/django/core/management/commands/dbshell.py b/venv/Lib/site-packages/django/core/management/commands/dbshell.py new file mode 100644 index 000000000..30d2765af --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/dbshell.py @@ -0,0 +1,48 @@ +import subprocess + +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + "Runs the command-line client for specified database, or the " + "default database if none is provided." + ) + + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + "Nominates a database onto which to open a shell. Defaults to the " + '"default" database.' + ), + ) + parameters = parser.add_argument_group("parameters", prefix_chars="--") + parameters.add_argument("parameters", nargs="*") + + def handle(self, **options): + connection = connections[options["database"]] + try: + connection.client.runshell(options["parameters"]) + except FileNotFoundError: + # Note that we're assuming the FileNotFoundError relates to the + # command missing. It could be raised for some other reason, in + # which case this error message would be inaccurate. Still, this + # message catches the common case. + raise CommandError( + "You appear not to have the %r program installed or on your path." + % connection.client.executable_name + ) + except subprocess.CalledProcessError as e: + raise CommandError( + '"%s" returned non-zero exit status %s.' + % ( + " ".join(e.cmd), + e.returncode, + ), + returncode=e.returncode, + ) diff --git a/venv/Lib/site-packages/django/core/management/commands/diffsettings.py b/venv/Lib/site-packages/django/core/management/commands/diffsettings.py new file mode 100644 index 000000000..047e4764a --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/diffsettings.py @@ -0,0 +1,91 @@ +from django.core.management.base import BaseCommand + + +def module_to_dict(module, omittable=lambda k: k.startswith("_") or not k.isupper()): + """Convert a module namespace to a Python dictionary.""" + return {k: repr(getattr(module, k)) for k in dir(module) if not omittable(k)} + + +class Command(BaseCommand): + help = """Displays differences between the current settings.py and Django's + default settings.""" + + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument( + "--all", + action="store_true", + help=( + 'Display all settings, regardless of their value. In "hash" ' + 'mode, default values are prefixed by "###".' + ), + ) + parser.add_argument( + "--default", + metavar="MODULE", + help=( + "The settings module to compare the current settings against. Leave " + "empty to compare against Django's default settings." + ), + ) + parser.add_argument( + "--output", + default="hash", + choices=("hash", "unified"), + help=( + "Selects the output format. 'hash' mode displays each changed " + "setting, with the settings that don't appear in the defaults " + "followed by ###. 'unified' mode prefixes the default setting " + "with a minus sign, followed by the changed setting prefixed " + "with a plus sign." + ), + ) + + def handle(self, **options): + from django.conf import Settings, global_settings, settings + + # Because settings are imported lazily, we need to explicitly load them. + if not settings.configured: + settings._setup() + + user_settings = module_to_dict(settings._wrapped) + default = options["default"] + default_settings = module_to_dict( + Settings(default) if default else global_settings + ) + output_func = { + "hash": self.output_hash, + "unified": self.output_unified, + }[options["output"]] + return "\n".join(output_func(user_settings, default_settings, **options)) + + def output_hash(self, user_settings, default_settings, **options): + # Inspired by Postfix's "postconf -n". + output = [] + for key in sorted(user_settings): + if key not in default_settings: + output.append("%s = %s ###" % (key, user_settings[key])) + elif user_settings[key] != default_settings[key]: + output.append("%s = %s" % (key, user_settings[key])) + elif options["all"]: + output.append("### %s = %s" % (key, user_settings[key])) + return output + + def output_unified(self, user_settings, default_settings, **options): + output = [] + for key in sorted(user_settings): + if key not in default_settings: + output.append( + self.style.SUCCESS("+ %s = %s" % (key, user_settings[key])) + ) + elif user_settings[key] != default_settings[key]: + output.append( + self.style.ERROR("- %s = %s" % (key, default_settings[key])) + ) + output.append( + self.style.SUCCESS("+ %s = %s" % (key, user_settings[key])) + ) + elif options["all"]: + output.append(" %s = %s" % (key, user_settings[key])) + return output diff --git a/venv/Lib/site-packages/django/core/management/commands/dumpdata.py b/venv/Lib/site-packages/django/core/management/commands/dumpdata.py new file mode 100644 index 000000000..038b82698 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/dumpdata.py @@ -0,0 +1,281 @@ +import gzip +import os +import warnings + +from django.apps import apps +from django.core import serializers +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import parse_apps_and_model_labels +from django.db import DEFAULT_DB_ALIAS, router + +try: + import bz2 + + has_bz2 = True +except ImportError: + has_bz2 = False + +try: + import lzma + + has_lzma = True +except ImportError: + has_lzma = False + + +class ProxyModelWarning(Warning): + pass + + +class Command(BaseCommand): + help = ( + "Output the contents of the database as a fixture of the given format " + "(using each model's default manager unless --all is specified)." + ) + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="app_label[.ModelName]", + nargs="*", + help=( + "Restricts dumped data to the specified app_label or " + "app_label.ModelName." + ), + ) + parser.add_argument( + "--format", + default="json", + help="Specifies the output serialization format for fixtures.", + ) + parser.add_argument( + "--indent", + type=int, + help="Specifies the indent level to use when pretty-printing output.", + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help="Nominates a specific database to dump fixtures from. " + 'Defaults to the "default" database.', + ) + parser.add_argument( + "-e", + "--exclude", + action="append", + default=[], + help="An app_label or app_label.ModelName to exclude " + "(use multiple --exclude to exclude multiple apps/models).", + ) + parser.add_argument( + "--natural-foreign", + action="store_true", + dest="use_natural_foreign_keys", + help="Use natural foreign keys if they are available.", + ) + parser.add_argument( + "--natural-primary", + action="store_true", + dest="use_natural_primary_keys", + help="Use natural primary keys if they are available.", + ) + parser.add_argument( + "-a", + "--all", + action="store_true", + dest="use_base_manager", + help=( + "Use Django's base manager to dump all models stored in the database, " + "including those that would otherwise be filtered or modified by a " + "custom manager." + ), + ) + parser.add_argument( + "--pks", + dest="primary_keys", + help="Only dump objects with given primary keys. Accepts a comma-separated " + "list of keys. This option only works when you specify one model.", + ) + parser.add_argument( + "-o", "--output", help="Specifies file to which the output is written." + ) + + def handle(self, *app_labels, **options): + format = options["format"] + indent = options["indent"] + using = options["database"] + excludes = options["exclude"] + output = options["output"] + show_traceback = options["traceback"] + use_natural_foreign_keys = options["use_natural_foreign_keys"] + use_natural_primary_keys = options["use_natural_primary_keys"] + use_base_manager = options["use_base_manager"] + pks = options["primary_keys"] + + if pks: + primary_keys = [pk.strip() for pk in pks.split(",")] + else: + primary_keys = [] + + excluded_models, excluded_apps = parse_apps_and_model_labels(excludes) + + if not app_labels: + if primary_keys: + raise CommandError("You can only use --pks option with one model") + app_list = dict.fromkeys( + app_config + for app_config in apps.get_app_configs() + if app_config.models_module is not None + and app_config not in excluded_apps + ) + else: + if len(app_labels) > 1 and primary_keys: + raise CommandError("You can only use --pks option with one model") + app_list = {} + for label in app_labels: + try: + app_label, model_label = label.split(".") + try: + app_config = apps.get_app_config(app_label) + except LookupError as e: + raise CommandError(str(e)) + if app_config.models_module is None or app_config in excluded_apps: + continue + try: + model = app_config.get_model(model_label) + except LookupError: + raise CommandError( + "Unknown model: %s.%s" % (app_label, model_label) + ) + + app_list_value = app_list.setdefault(app_config, []) + + # We may have previously seen an "all-models" request for + # this app (no model qualifier was given). In this case + # there is no need adding specific models to the list. + if app_list_value is not None and model not in app_list_value: + app_list_value.append(model) + except ValueError: + if primary_keys: + raise CommandError( + "You can only use --pks option with one model" + ) + # This is just an app - no model qualifier + app_label = label + try: + app_config = apps.get_app_config(app_label) + except LookupError as e: + raise CommandError(str(e)) + if app_config.models_module is None or app_config in excluded_apps: + continue + app_list[app_config] = None + + # Check that the serialization format exists; this is a shortcut to + # avoid collating all the objects and _then_ failing. + if format not in serializers.get_public_serializer_formats(): + try: + serializers.get_serializer(format) + except serializers.SerializerDoesNotExist: + pass + + raise CommandError("Unknown serialization format: %s" % format) + + def get_objects(count_only=False): + """ + Collate the objects to be serialized. If count_only is True, just + count the number of objects to be serialized. + """ + if use_natural_foreign_keys: + models = serializers.sort_dependencies( + app_list.items(), allow_cycles=True + ) + else: + # There is no need to sort dependencies when natural foreign + # keys are not used. + models = [] + for (app_config, model_list) in app_list.items(): + if model_list is None: + models.extend(app_config.get_models()) + else: + models.extend(model_list) + for model in models: + if model in excluded_models: + continue + if model._meta.proxy and model._meta.proxy_for_model not in models: + warnings.warn( + "%s is a proxy model and won't be serialized." + % model._meta.label, + category=ProxyModelWarning, + ) + if not model._meta.proxy and router.allow_migrate_model(using, model): + if use_base_manager: + objects = model._base_manager + else: + objects = model._default_manager + + queryset = objects.using(using).order_by(model._meta.pk.name) + if primary_keys: + queryset = queryset.filter(pk__in=primary_keys) + if count_only: + yield queryset.order_by().count() + else: + yield from queryset.iterator() + + try: + self.stdout.ending = None + progress_output = None + object_count = 0 + # If dumpdata is outputting to stdout, there is no way to display progress + if output and self.stdout.isatty() and options["verbosity"] > 0: + progress_output = self.stdout + object_count = sum(get_objects(count_only=True)) + if output: + file_root, file_ext = os.path.splitext(output) + compression_formats = { + ".bz2": (open, {}, file_root), + ".gz": (gzip.open, {}, output), + ".lzma": (open, {}, file_root), + ".xz": (open, {}, file_root), + ".zip": (open, {}, file_root), + } + if has_bz2: + compression_formats[".bz2"] = (bz2.open, {}, output) + if has_lzma: + compression_formats[".lzma"] = ( + lzma.open, + {"format": lzma.FORMAT_ALONE}, + output, + ) + compression_formats[".xz"] = (lzma.open, {}, output) + try: + open_method, kwargs, file_path = compression_formats[file_ext] + except KeyError: + open_method, kwargs, file_path = (open, {}, output) + if file_path != output: + file_name = os.path.basename(file_path) + warnings.warn( + f"Unsupported file extension ({file_ext}). " + f"Fixtures saved in '{file_name}'.", + RuntimeWarning, + ) + stream = open_method(file_path, "wt", **kwargs) + else: + stream = None + try: + serializers.serialize( + format, + get_objects(), + indent=indent, + use_natural_foreign_keys=use_natural_foreign_keys, + use_natural_primary_keys=use_natural_primary_keys, + stream=stream or self.stdout, + progress_output=progress_output, + object_count=object_count, + ) + finally: + if stream: + stream.close() + except Exception as e: + if show_traceback: + raise + raise CommandError("Unable to serialize database: %s" % e) diff --git a/venv/Lib/site-packages/django/core/management/commands/flush.py b/venv/Lib/site-packages/django/core/management/commands/flush.py new file mode 100644 index 000000000..e9d440dd8 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/flush.py @@ -0,0 +1,92 @@ +from importlib import import_module + +from django.apps import apps +from django.core.management.base import BaseCommand, CommandError +from django.core.management.color import no_style +from django.core.management.sql import emit_post_migrate_signal, sql_flush +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + "Removes ALL DATA from the database, including data added during " + 'migrations. Does not achieve a "fresh install" state.' + ) + stealth_options = ("reset_sequences", "allow_cascade", "inhibit_post_migrate") + + def add_arguments(self, parser): + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help='Nominates a database to flush. Defaults to the "default" database.', + ) + + def handle(self, **options): + database = options["database"] + connection = connections[database] + verbosity = options["verbosity"] + interactive = options["interactive"] + # The following are stealth options used by Django's internals. + reset_sequences = options.get("reset_sequences", True) + allow_cascade = options.get("allow_cascade", False) + inhibit_post_migrate = options.get("inhibit_post_migrate", False) + + self.style = no_style() + + # Import the 'management' module within each installed app, to register + # dispatcher events. + for app_config in apps.get_app_configs(): + try: + import_module(".management", app_config.name) + except ImportError: + pass + + sql_list = sql_flush( + self.style, + connection, + reset_sequences=reset_sequences, + allow_cascade=allow_cascade, + ) + + if interactive: + confirm = input( + """You have requested a flush of the database. +This will IRREVERSIBLY DESTROY all data currently in the "%s" database, +and return each table to an empty state. +Are you sure you want to do this? + + Type 'yes' to continue, or 'no' to cancel: """ + % connection.settings_dict["NAME"] + ) + else: + confirm = "yes" + + if confirm == "yes": + try: + connection.ops.execute_sql_flush(sql_list) + except Exception as exc: + raise CommandError( + "Database %s couldn't be flushed. Possible reasons:\n" + " * The database isn't running or isn't configured correctly.\n" + " * At least one of the expected database tables doesn't exist.\n" + " * The SQL was invalid.\n" + "Hint: Look at the output of 'django-admin sqlflush'. " + "That's the SQL this command wasn't able to run." + % (connection.settings_dict["NAME"],) + ) from exc + + # Empty sql_list may signify an empty database and post_migrate + # would then crash. + if sql_list and not inhibit_post_migrate: + # Emit the post migrate signal. This allows individual applications to + # respond as if the database had been migrated from scratch. + emit_post_migrate_signal(verbosity, interactive, database) + else: + self.stdout.write("Flush cancelled.") diff --git a/venv/Lib/site-packages/django/core/management/commands/inspectdb.py b/venv/Lib/site-packages/django/core/management/commands/inspectdb.py new file mode 100644 index 000000000..8f1a31009 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/inspectdb.py @@ -0,0 +1,367 @@ +import keyword +import re + +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.models.constants import LOOKUP_SEP + + +class Command(BaseCommand): + help = ( + "Introspects the database tables in the given database and outputs a Django " + "model module." + ) + requires_system_checks = [] + stealth_options = ("table_name_filter",) + db_module = "django.db" + + def add_arguments(self, parser): + parser.add_argument( + "table", + nargs="*", + type=str, + help="Selects what tables or views should be introspected.", + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + 'Nominates a database to introspect. Defaults to using the "default" ' + "database." + ), + ) + parser.add_argument( + "--include-partitions", + action="store_true", + help="Also output models for partition tables.", + ) + parser.add_argument( + "--include-views", + action="store_true", + help="Also output models for database views.", + ) + + def handle(self, **options): + try: + for line in self.handle_inspection(options): + self.stdout.write(line) + except NotImplementedError: + raise CommandError( + "Database inspection isn't supported for the currently selected " + "database backend." + ) + + def handle_inspection(self, options): + connection = connections[options["database"]] + # 'table_name_filter' is a stealth option + table_name_filter = options.get("table_name_filter") + + def table2model(table_name): + return re.sub(r"[^a-zA-Z0-9]", "", table_name.title()) + + with connection.cursor() as cursor: + yield "# This is an auto-generated Django model module." + yield "# You'll have to do the following manually to clean this up:" + yield "# * Rearrange models' order" + yield "# * Make sure each model has one field with primary_key=True" + yield ( + "# * Make sure each ForeignKey and OneToOneField has `on_delete` set " + "to the desired behavior" + ) + yield ( + "# * Remove `managed = False` lines if you wish to allow " + "Django to create, modify, and delete the table" + ) + yield ( + "# Feel free to rename the models, but don't rename db_table values or " + "field names." + ) + yield "from %s import models" % self.db_module + known_models = [] + table_info = connection.introspection.get_table_list(cursor) + + # Determine types of tables and/or views to be introspected. + types = {"t"} + if options["include_partitions"]: + types.add("p") + if options["include_views"]: + types.add("v") + + for table_name in options["table"] or sorted( + info.name for info in table_info if info.type in types + ): + if table_name_filter is not None and callable(table_name_filter): + if not table_name_filter(table_name): + continue + try: + try: + relations = connection.introspection.get_relations( + cursor, table_name + ) + except NotImplementedError: + relations = {} + try: + constraints = connection.introspection.get_constraints( + cursor, table_name + ) + except NotImplementedError: + constraints = {} + primary_key_column = ( + connection.introspection.get_primary_key_column( + cursor, table_name + ) + ) + unique_columns = [ + c["columns"][0] + for c in constraints.values() + if c["unique"] and len(c["columns"]) == 1 + ] + table_description = connection.introspection.get_table_description( + cursor, table_name + ) + except Exception as e: + yield "# Unable to inspect table '%s'" % table_name + yield "# The error was: %s" % e + continue + + yield "" + yield "" + yield "class %s(models.Model):" % table2model(table_name) + known_models.append(table2model(table_name)) + used_column_names = [] # Holds column names used in the table so far + column_to_field_name = {} # Maps column names to names of model fields + for row in table_description: + comment_notes = ( + [] + ) # Holds Field notes, to be displayed in a Python comment. + extra_params = {} # Holds Field parameters such as 'db_column'. + column_name = row.name + is_relation = column_name in relations + + att_name, params, notes = self.normalize_col_name( + column_name, used_column_names, is_relation + ) + extra_params.update(params) + comment_notes.extend(notes) + + used_column_names.append(att_name) + column_to_field_name[column_name] = att_name + + # Add primary_key and unique, if necessary. + if column_name == primary_key_column: + extra_params["primary_key"] = True + elif column_name in unique_columns: + extra_params["unique"] = True + + if is_relation: + if extra_params.pop("unique", False) or extra_params.get( + "primary_key" + ): + rel_type = "OneToOneField" + else: + rel_type = "ForeignKey" + rel_to = ( + "self" + if relations[column_name][1] == table_name + else table2model(relations[column_name][1]) + ) + if rel_to in known_models: + field_type = "%s(%s" % (rel_type, rel_to) + else: + field_type = "%s('%s'" % (rel_type, rel_to) + else: + # Calling `get_field_type` to get the field type string and any + # additional parameters and notes. + field_type, field_params, field_notes = self.get_field_type( + connection, table_name, row + ) + extra_params.update(field_params) + comment_notes.extend(field_notes) + + field_type += "(" + + # Don't output 'id = meta.AutoField(primary_key=True)', because + # that's assumed if it doesn't exist. + if att_name == "id" and extra_params == {"primary_key": True}: + if field_type == "AutoField(": + continue + elif ( + field_type + == connection.features.introspected_field_types["AutoField"] + + "(" + ): + comment_notes.append("AutoField?") + + # Add 'null' and 'blank', if the 'null_ok' flag was present in the + # table description. + if row.null_ok: # If it's NULL... + extra_params["blank"] = True + extra_params["null"] = True + + field_desc = "%s = %s%s" % ( + att_name, + # Custom fields will have a dotted path + "" if "." in field_type else "models.", + field_type, + ) + if field_type.startswith(("ForeignKey(", "OneToOneField(")): + field_desc += ", models.DO_NOTHING" + + if extra_params: + if not field_desc.endswith("("): + field_desc += ", " + field_desc += ", ".join( + "%s=%r" % (k, v) for k, v in extra_params.items() + ) + field_desc += ")" + if comment_notes: + field_desc += " # " + " ".join(comment_notes) + yield " %s" % field_desc + is_view = any( + info.name == table_name and info.type == "v" for info in table_info + ) + is_partition = any( + info.name == table_name and info.type == "p" for info in table_info + ) + yield from self.get_meta( + table_name, constraints, column_to_field_name, is_view, is_partition + ) + + def normalize_col_name(self, col_name, used_column_names, is_relation): + """ + Modify the column name to make it Python-compatible as a field name + """ + field_params = {} + field_notes = [] + + new_name = col_name.lower() + if new_name != col_name: + field_notes.append("Field name made lowercase.") + + if is_relation: + if new_name.endswith("_id"): + new_name = new_name[:-3] + else: + field_params["db_column"] = col_name + + new_name, num_repl = re.subn(r"\W", "_", new_name) + if num_repl > 0: + field_notes.append("Field renamed to remove unsuitable characters.") + + if new_name.find(LOOKUP_SEP) >= 0: + while new_name.find(LOOKUP_SEP) >= 0: + new_name = new_name.replace(LOOKUP_SEP, "_") + if col_name.lower().find(LOOKUP_SEP) >= 0: + # Only add the comment if the double underscore was in the original name + field_notes.append( + "Field renamed because it contained more than one '_' in a row." + ) + + if new_name.startswith("_"): + new_name = "field%s" % new_name + field_notes.append("Field renamed because it started with '_'.") + + if new_name.endswith("_"): + new_name = "%sfield" % new_name + field_notes.append("Field renamed because it ended with '_'.") + + if keyword.iskeyword(new_name): + new_name += "_field" + field_notes.append("Field renamed because it was a Python reserved word.") + + if new_name[0].isdigit(): + new_name = "number_%s" % new_name + field_notes.append( + "Field renamed because it wasn't a valid Python identifier." + ) + + if new_name in used_column_names: + num = 0 + while "%s_%d" % (new_name, num) in used_column_names: + num += 1 + new_name = "%s_%d" % (new_name, num) + field_notes.append("Field renamed because of name conflict.") + + if col_name != new_name and field_notes: + field_params["db_column"] = col_name + + return new_name, field_params, field_notes + + def get_field_type(self, connection, table_name, row): + """ + Given the database connection, the table name, and the cursor row + description, this routine will return the given field type name, as + well as any additional keyword parameters and notes for the field. + """ + field_params = {} + field_notes = [] + + try: + field_type = connection.introspection.get_field_type(row.type_code, row) + except KeyError: + field_type = "TextField" + field_notes.append("This field type is a guess.") + + # Add max_length for all CharFields. + if field_type == "CharField" and row.internal_size: + field_params["max_length"] = int(row.internal_size) + + if field_type in {"CharField", "TextField"} and row.collation: + field_params["db_collation"] = row.collation + + if field_type == "DecimalField": + if row.precision is None or row.scale is None: + field_notes.append( + "max_digits and decimal_places have been guessed, as this " + "database handles decimal fields as float" + ) + field_params["max_digits"] = ( + row.precision if row.precision is not None else 10 + ) + field_params["decimal_places"] = ( + row.scale if row.scale is not None else 5 + ) + else: + field_params["max_digits"] = row.precision + field_params["decimal_places"] = row.scale + + return field_type, field_params, field_notes + + def get_meta( + self, table_name, constraints, column_to_field_name, is_view, is_partition + ): + """ + Return a sequence comprising the lines of code necessary + to construct the inner Meta class for the model corresponding + to the given database table name. + """ + unique_together = [] + has_unsupported_constraint = False + for params in constraints.values(): + if params["unique"]: + columns = params["columns"] + if None in columns: + has_unsupported_constraint = True + columns = [x for x in columns if x is not None] + if len(columns) > 1: + unique_together.append( + str(tuple(column_to_field_name[c] for c in columns)) + ) + if is_view: + managed_comment = " # Created from a view. Don't remove." + elif is_partition: + managed_comment = " # Created from a partition. Don't remove." + else: + managed_comment = "" + meta = [""] + if has_unsupported_constraint: + meta.append(" # A unique constraint could not be introspected.") + meta += [ + " class Meta:", + " managed = False%s" % managed_comment, + " db_table = %r" % table_name, + ] + if unique_together: + tup = "(" + ", ".join(unique_together) + ",)" + meta += [" unique_together = %s" % tup] + return meta diff --git a/venv/Lib/site-packages/django/core/management/commands/loaddata.py b/venv/Lib/site-packages/django/core/management/commands/loaddata.py new file mode 100644 index 000000000..ac97f1316 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/loaddata.py @@ -0,0 +1,432 @@ +import functools +import glob +import gzip +import os +import sys +import warnings +import zipfile +from itertools import product + +from django.apps import apps +from django.conf import settings +from django.core import serializers +from django.core.exceptions import ImproperlyConfigured +from django.core.management.base import BaseCommand, CommandError +from django.core.management.color import no_style +from django.core.management.utils import parse_apps_and_model_labels +from django.db import ( + DEFAULT_DB_ALIAS, + DatabaseError, + IntegrityError, + connections, + router, + transaction, +) +from django.utils.functional import cached_property + +try: + import bz2 + + has_bz2 = True +except ImportError: + has_bz2 = False + +try: + import lzma + + has_lzma = True +except ImportError: + has_lzma = False + +READ_STDIN = "-" + + +class Command(BaseCommand): + help = "Installs the named fixture(s) in the database." + missing_args_message = ( + "No database fixture specified. Please provide the path of at least " + "one fixture in the command line." + ) + + def add_arguments(self, parser): + parser.add_argument( + "args", metavar="fixture", nargs="+", help="Fixture labels." + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + "Nominates a specific database to load fixtures into. Defaults to the " + '"default" database.' + ), + ) + parser.add_argument( + "--app", + dest="app_label", + help="Only look for fixtures in the specified app.", + ) + parser.add_argument( + "--ignorenonexistent", + "-i", + action="store_true", + dest="ignore", + help="Ignores entries in the serialized data for fields that do not " + "currently exist on the model.", + ) + parser.add_argument( + "-e", + "--exclude", + action="append", + default=[], + help=( + "An app_label or app_label.ModelName to exclude. Can be used multiple " + "times." + ), + ) + parser.add_argument( + "--format", + help="Format of serialized data when reading from stdin.", + ) + + def handle(self, *fixture_labels, **options): + self.ignore = options["ignore"] + self.using = options["database"] + self.app_label = options["app_label"] + self.verbosity = options["verbosity"] + self.excluded_models, self.excluded_apps = parse_apps_and_model_labels( + options["exclude"] + ) + self.format = options["format"] + + with transaction.atomic(using=self.using): + self.loaddata(fixture_labels) + + # Close the DB connection -- unless we're still in a transaction. This + # is required as a workaround for an edge case in MySQL: if the same + # connection is used to create tables, load data, and query, the query + # can return incorrect results. See Django #7572, MySQL #37735. + if transaction.get_autocommit(self.using): + connections[self.using].close() + + @cached_property + def compression_formats(self): + """A dict mapping format names to (open function, mode arg) tuples.""" + # Forcing binary mode may be revisited after dropping Python 2 support + # (see #22399). + compression_formats = { + None: (open, "rb"), + "gz": (gzip.GzipFile, "rb"), + "zip": (SingleZipReader, "r"), + "stdin": (lambda *args: sys.stdin, None), + } + if has_bz2: + compression_formats["bz2"] = (bz2.BZ2File, "r") + if has_lzma: + compression_formats["lzma"] = (lzma.LZMAFile, "r") + compression_formats["xz"] = (lzma.LZMAFile, "r") + return compression_formats + + def reset_sequences(self, connection, models): + """Reset database sequences for the given connection and models.""" + sequence_sql = connection.ops.sequence_reset_sql(no_style(), models) + if sequence_sql: + if self.verbosity >= 2: + self.stdout.write("Resetting sequences") + with connection.cursor() as cursor: + for line in sequence_sql: + cursor.execute(line) + + def loaddata(self, fixture_labels): + connection = connections[self.using] + + # Keep a count of the installed objects and fixtures + self.fixture_count = 0 + self.loaded_object_count = 0 + self.fixture_object_count = 0 + self.models = set() + + self.serialization_formats = serializers.get_public_serializer_formats() + + # Django's test suite repeatedly tries to load initial_data fixtures + # from apps that don't have any fixtures. Because disabling constraint + # checks can be expensive on some database (especially MSSQL), bail + # out early if no fixtures are found. + for fixture_label in fixture_labels: + if self.find_fixtures(fixture_label): + break + else: + return + + self.objs_with_deferred_fields = [] + with connection.constraint_checks_disabled(): + for fixture_label in fixture_labels: + self.load_label(fixture_label) + for obj in self.objs_with_deferred_fields: + obj.save_deferred_fields(using=self.using) + + # Since we disabled constraint checks, we must manually check for + # any invalid keys that might have been added + table_names = [model._meta.db_table for model in self.models] + try: + connection.check_constraints(table_names=table_names) + except Exception as e: + e.args = ("Problem installing fixtures: %s" % e,) + raise + + # If we found even one object in a fixture, we need to reset the + # database sequences. + if self.loaded_object_count > 0: + self.reset_sequences(connection, self.models) + + if self.verbosity >= 1: + if self.fixture_object_count == self.loaded_object_count: + self.stdout.write( + "Installed %d object(s) from %d fixture(s)" + % (self.loaded_object_count, self.fixture_count) + ) + else: + self.stdout.write( + "Installed %d object(s) (of %d) from %d fixture(s)" + % ( + self.loaded_object_count, + self.fixture_object_count, + self.fixture_count, + ) + ) + + def save_obj(self, obj): + """Save an object if permitted.""" + if ( + obj.object._meta.app_config in self.excluded_apps + or type(obj.object) in self.excluded_models + ): + return False + saved = False + if router.allow_migrate_model(self.using, obj.object.__class__): + saved = True + self.models.add(obj.object.__class__) + try: + obj.save(using=self.using) + # psycopg2 raises ValueError if data contains NUL chars. + except (DatabaseError, IntegrityError, ValueError) as e: + e.args = ( + "Could not load %(object_label)s(pk=%(pk)s): %(error_msg)s" + % { + "object_label": obj.object._meta.label, + "pk": obj.object.pk, + "error_msg": e, + }, + ) + raise + if obj.deferred_fields: + self.objs_with_deferred_fields.append(obj) + return saved + + def load_label(self, fixture_label): + """Load fixtures files for a given label.""" + show_progress = self.verbosity >= 3 + for fixture_file, fixture_dir, fixture_name in self.find_fixtures( + fixture_label + ): + _, ser_fmt, cmp_fmt = self.parse_name(os.path.basename(fixture_file)) + open_method, mode = self.compression_formats[cmp_fmt] + fixture = open_method(fixture_file, mode) + self.fixture_count += 1 + objects_in_fixture = 0 + loaded_objects_in_fixture = 0 + if self.verbosity >= 2: + self.stdout.write( + "Installing %s fixture '%s' from %s." + % (ser_fmt, fixture_name, humanize(fixture_dir)) + ) + try: + objects = serializers.deserialize( + ser_fmt, + fixture, + using=self.using, + ignorenonexistent=self.ignore, + handle_forward_references=True, + ) + + for obj in objects: + objects_in_fixture += 1 + if self.save_obj(obj): + loaded_objects_in_fixture += 1 + if show_progress: + self.stdout.write( + "\rProcessed %i object(s)." % loaded_objects_in_fixture, + ending="", + ) + except Exception as e: + if not isinstance(e, CommandError): + e.args = ( + "Problem installing fixture '%s': %s" % (fixture_file, e), + ) + raise + finally: + fixture.close() + + if objects_in_fixture and show_progress: + self.stdout.write() # Add a newline after progress indicator. + self.loaded_object_count += loaded_objects_in_fixture + self.fixture_object_count += objects_in_fixture + # Warn if the fixture we loaded contains 0 objects. + if objects_in_fixture == 0: + warnings.warn( + "No fixture data found for '%s'. (File format may be " + "invalid.)" % fixture_name, + RuntimeWarning, + ) + + def get_fixture_name_and_dirs(self, fixture_name): + dirname, basename = os.path.split(fixture_name) + if os.path.isabs(fixture_name): + fixture_dirs = [dirname] + else: + fixture_dirs = self.fixture_dirs + if os.path.sep in os.path.normpath(fixture_name): + fixture_dirs = [os.path.join(dir_, dirname) for dir_ in fixture_dirs] + return basename, fixture_dirs + + def get_targets(self, fixture_name, ser_fmt, cmp_fmt): + databases = [self.using, None] + cmp_fmts = self.compression_formats if cmp_fmt is None else [cmp_fmt] + ser_fmts = self.serialization_formats if ser_fmt is None else [ser_fmt] + return { + "%s.%s" + % ( + fixture_name, + ".".join([ext for ext in combo if ext]), + ) + for combo in product(databases, ser_fmts, cmp_fmts) + } + + def find_fixture_files_in_dir(self, fixture_dir, fixture_name, targets): + fixture_files_in_dir = [] + path = os.path.join(fixture_dir, fixture_name) + for candidate in glob.iglob(glob.escape(path) + "*"): + if os.path.basename(candidate) in targets: + # Save the fixture_dir and fixture_name for future error + # messages. + fixture_files_in_dir.append((candidate, fixture_dir, fixture_name)) + return fixture_files_in_dir + + @functools.lru_cache(maxsize=None) + def find_fixtures(self, fixture_label): + """Find fixture files for a given label.""" + if fixture_label == READ_STDIN: + return [(READ_STDIN, None, READ_STDIN)] + + fixture_name, ser_fmt, cmp_fmt = self.parse_name(fixture_label) + if self.verbosity >= 2: + self.stdout.write("Loading '%s' fixtures..." % fixture_name) + + fixture_name, fixture_dirs = self.get_fixture_name_and_dirs(fixture_name) + targets = self.get_targets(fixture_name, ser_fmt, cmp_fmt) + fixture_files = [] + for fixture_dir in fixture_dirs: + if self.verbosity >= 2: + self.stdout.write("Checking %s for fixtures..." % humanize(fixture_dir)) + fixture_files_in_dir = self.find_fixture_files_in_dir( + fixture_dir, + fixture_name, + targets, + ) + if self.verbosity >= 2 and not fixture_files_in_dir: + self.stdout.write( + "No fixture '%s' in %s." % (fixture_name, humanize(fixture_dir)) + ) + + # Check kept for backwards-compatibility; it isn't clear why + # duplicates are only allowed in different directories. + if len(fixture_files_in_dir) > 1: + raise CommandError( + "Multiple fixtures named '%s' in %s. Aborting." + % (fixture_name, humanize(fixture_dir)) + ) + fixture_files.extend(fixture_files_in_dir) + + if not fixture_files: + raise CommandError("No fixture named '%s' found." % fixture_name) + + return fixture_files + + @cached_property + def fixture_dirs(self): + """ + Return a list of fixture directories. + + The list contains the 'fixtures' subdirectory of each installed + application, if it exists, the directories in FIXTURE_DIRS, and the + current directory. + """ + dirs = [] + fixture_dirs = settings.FIXTURE_DIRS + if len(fixture_dirs) != len(set(fixture_dirs)): + raise ImproperlyConfigured("settings.FIXTURE_DIRS contains duplicates.") + for app_config in apps.get_app_configs(): + app_label = app_config.label + app_dir = os.path.join(app_config.path, "fixtures") + if app_dir in fixture_dirs: + raise ImproperlyConfigured( + "'%s' is a default fixture directory for the '%s' app " + "and cannot be listed in settings.FIXTURE_DIRS." + % (app_dir, app_label) + ) + + if self.app_label and app_label != self.app_label: + continue + if os.path.isdir(app_dir): + dirs.append(app_dir) + dirs.extend(fixture_dirs) + dirs.append("") + return [os.path.realpath(d) for d in dirs] + + def parse_name(self, fixture_name): + """ + Split fixture name in name, serialization format, compression format. + """ + if fixture_name == READ_STDIN: + if not self.format: + raise CommandError( + "--format must be specified when reading from stdin." + ) + return READ_STDIN, self.format, "stdin" + + parts = fixture_name.rsplit(".", 2) + + if len(parts) > 1 and parts[-1] in self.compression_formats: + cmp_fmt = parts[-1] + parts = parts[:-1] + else: + cmp_fmt = None + + if len(parts) > 1: + if parts[-1] in self.serialization_formats: + ser_fmt = parts[-1] + parts = parts[:-1] + else: + raise CommandError( + "Problem installing fixture '%s': %s is not a known " + "serialization format." % (".".join(parts[:-1]), parts[-1]) + ) + else: + ser_fmt = None + + name = ".".join(parts) + + return name, ser_fmt, cmp_fmt + + +class SingleZipReader(zipfile.ZipFile): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if len(self.namelist()) != 1: + raise ValueError("Zip-compressed fixtures must contain one file.") + + def read(self): + return zipfile.ZipFile.read(self, self.namelist()[0]) + + +def humanize(dirname): + return "'%s'" % dirname if dirname else "absolute path" diff --git a/venv/Lib/site-packages/django/core/management/commands/makemessages.py b/venv/Lib/site-packages/django/core/management/commands/makemessages.py new file mode 100644 index 000000000..77c84cb99 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/makemessages.py @@ -0,0 +1,750 @@ +import glob +import os +import re +import sys +from functools import total_ordering +from itertools import dropwhile + +import django +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.core.files.temp import NamedTemporaryFile +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import ( + find_command, + handle_extensions, + is_ignored_path, + popen_wrapper, +) +from django.utils.encoding import DEFAULT_LOCALE_ENCODING +from django.utils.functional import cached_property +from django.utils.jslex import prepare_js_for_gettext +from django.utils.regex_helper import _lazy_re_compile +from django.utils.text import get_text_list +from django.utils.translation import templatize + +plural_forms_re = _lazy_re_compile( + r'^(?P"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL +) +STATUS_OK = 0 +NO_LOCALE_DIR = object() + + +def check_programs(*programs): + for program in programs: + if find_command(program) is None: + raise CommandError( + "Can't find %s. Make sure you have GNU gettext tools 0.15 or " + "newer installed." % program + ) + + +@total_ordering +class TranslatableFile: + def __init__(self, dirpath, file_name, locale_dir): + self.file = file_name + self.dirpath = dirpath + self.locale_dir = locale_dir + + def __repr__(self): + return "<%s: %s>" % ( + self.__class__.__name__, + os.sep.join([self.dirpath, self.file]), + ) + + def __eq__(self, other): + return self.path == other.path + + def __lt__(self, other): + return self.path < other.path + + @property + def path(self): + return os.path.join(self.dirpath, self.file) + + +class BuildFile: + """ + Represent the state of a translatable file during the build process. + """ + + def __init__(self, command, domain, translatable): + self.command = command + self.domain = domain + self.translatable = translatable + + @cached_property + def is_templatized(self): + if self.domain == "djangojs": + return self.command.gettext_version < (0, 18, 3) + elif self.domain == "django": + file_ext = os.path.splitext(self.translatable.file)[1] + return file_ext != ".py" + return False + + @cached_property + def path(self): + return self.translatable.path + + @cached_property + def work_path(self): + """ + Path to a file which is being fed into GNU gettext pipeline. This may + be either a translatable or its preprocessed version. + """ + if not self.is_templatized: + return self.path + extension = { + "djangojs": "c", + "django": "py", + }.get(self.domain) + filename = "%s.%s" % (self.translatable.file, extension) + return os.path.join(self.translatable.dirpath, filename) + + def preprocess(self): + """ + Preprocess (if necessary) a translatable file before passing it to + xgettext GNU gettext utility. + """ + if not self.is_templatized: + return + + with open(self.path, encoding="utf-8") as fp: + src_data = fp.read() + + if self.domain == "djangojs": + content = prepare_js_for_gettext(src_data) + elif self.domain == "django": + content = templatize(src_data, origin=self.path[2:]) + + with open(self.work_path, "w", encoding="utf-8") as fp: + fp.write(content) + + def postprocess_messages(self, msgs): + """ + Postprocess messages generated by xgettext GNU gettext utility. + + Transform paths as if these messages were generated from original + translatable files rather than from preprocessed versions. + """ + if not self.is_templatized: + return msgs + + # Remove '.py' suffix + if os.name == "nt": + # Preserve '.\' prefix on Windows to respect gettext behavior + old_path = self.work_path + new_path = self.path + else: + old_path = self.work_path[2:] + new_path = self.path[2:] + + return re.sub( + r"^(#: .*)(" + re.escape(old_path) + r")", + lambda match: match[0].replace(old_path, new_path), + msgs, + flags=re.MULTILINE, + ) + + def cleanup(self): + """ + Remove a preprocessed copy of a translatable file (if any). + """ + if self.is_templatized: + # This check is needed for the case of a symlinked file and its + # source being processed inside a single group (locale dir); + # removing either of those two removes both. + if os.path.exists(self.work_path): + os.unlink(self.work_path) + + +def normalize_eols(raw_contents): + """ + Take a block of raw text that will be passed through str.splitlines() to + get universal newlines treatment. + + Return the resulting block of text with normalized `\n` EOL sequences ready + to be written to disk using current platform's native EOLs. + """ + lines_list = raw_contents.splitlines() + # Ensure last line has its EOL + if lines_list and lines_list[-1]: + lines_list.append("") + return "\n".join(lines_list) + + +def write_pot_file(potfile, msgs): + """ + Write the `potfile` with the `msgs` contents, making sure its format is + valid. + """ + pot_lines = msgs.splitlines() + if os.path.exists(potfile): + # Strip the header + lines = dropwhile(len, pot_lines) + else: + lines = [] + found, header_read = False, False + for line in pot_lines: + if not found and not header_read: + if "charset=CHARSET" in line: + found = True + line = line.replace("charset=CHARSET", "charset=UTF-8") + if not line and not found: + header_read = True + lines.append(line) + msgs = "\n".join(lines) + # Force newlines of POT files to '\n' to work around + # https://savannah.gnu.org/bugs/index.php?52395 + with open(potfile, "a", encoding="utf-8", newline="\n") as fp: + fp.write(msgs) + + +class Command(BaseCommand): + help = ( + "Runs over the entire source tree of the current directory and pulls out all " + "strings marked for translation. It creates (or updates) a message file in the " + "conf/locale (in the django tree) or locale (for projects and applications) " + "directory.\n\nYou must run this command with one of either the --locale, " + "--exclude, or --all options." + ) + + translatable_file_class = TranslatableFile + build_file_class = BuildFile + + requires_system_checks = [] + + msgmerge_options = ["-q", "--previous"] + msguniq_options = ["--to-code=utf-8"] + msgattrib_options = ["--no-obsolete"] + xgettext_options = ["--from-code=UTF-8", "--add-comments=Translators"] + + def add_arguments(self, parser): + parser.add_argument( + "--locale", + "-l", + default=[], + action="append", + help=( + "Creates or updates the message files for the given locale(s) (e.g. " + "pt_BR). Can be used multiple times." + ), + ) + parser.add_argument( + "--exclude", + "-x", + default=[], + action="append", + help="Locales to exclude. Default is none. Can be used multiple times.", + ) + parser.add_argument( + "--domain", + "-d", + default="django", + help='The domain of the message files (default: "django").', + ) + parser.add_argument( + "--all", + "-a", + action="store_true", + help="Updates the message files for all existing locales.", + ) + parser.add_argument( + "--extension", + "-e", + dest="extensions", + action="append", + help='The file extension(s) to examine (default: "html,txt,py", or "js" ' + 'if the domain is "djangojs"). Separate multiple extensions with ' + "commas, or use -e multiple times.", + ) + parser.add_argument( + "--symlinks", + "-s", + action="store_true", + help="Follows symlinks to directories when examining source code " + "and templates for translation strings.", + ) + parser.add_argument( + "--ignore", + "-i", + action="append", + dest="ignore_patterns", + default=[], + metavar="PATTERN", + help="Ignore files or directories matching this glob-style pattern. " + "Use multiple times to ignore more.", + ) + parser.add_argument( + "--no-default-ignore", + action="store_false", + dest="use_default_ignore_patterns", + help=( + "Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and " + "'*.pyc'." + ), + ) + parser.add_argument( + "--no-wrap", + action="store_true", + help="Don't break long message lines into several lines.", + ) + parser.add_argument( + "--no-location", + action="store_true", + help="Don't write '#: filename:line' lines.", + ) + parser.add_argument( + "--add-location", + choices=("full", "file", "never"), + const="full", + nargs="?", + help=( + "Controls '#: filename:line' lines. If the option is 'full' " + "(the default if not given), the lines include both file name " + "and line number. If it's 'file', the line number is omitted. If " + "it's 'never', the lines are suppressed (same as --no-location). " + "--add-location requires gettext 0.19 or newer." + ), + ) + parser.add_argument( + "--no-obsolete", + action="store_true", + help="Remove obsolete message strings.", + ) + parser.add_argument( + "--keep-pot", + action="store_true", + help="Keep .pot file after making messages. Useful when debugging.", + ) + + def handle(self, *args, **options): + locale = options["locale"] + exclude = options["exclude"] + self.domain = options["domain"] + self.verbosity = options["verbosity"] + process_all = options["all"] + extensions = options["extensions"] + self.symlinks = options["symlinks"] + + ignore_patterns = options["ignore_patterns"] + if options["use_default_ignore_patterns"]: + ignore_patterns += ["CVS", ".*", "*~", "*.pyc"] + self.ignore_patterns = list(set(ignore_patterns)) + + # Avoid messing with mutable class variables + if options["no_wrap"]: + self.msgmerge_options = self.msgmerge_options[:] + ["--no-wrap"] + self.msguniq_options = self.msguniq_options[:] + ["--no-wrap"] + self.msgattrib_options = self.msgattrib_options[:] + ["--no-wrap"] + self.xgettext_options = self.xgettext_options[:] + ["--no-wrap"] + if options["no_location"]: + self.msgmerge_options = self.msgmerge_options[:] + ["--no-location"] + self.msguniq_options = self.msguniq_options[:] + ["--no-location"] + self.msgattrib_options = self.msgattrib_options[:] + ["--no-location"] + self.xgettext_options = self.xgettext_options[:] + ["--no-location"] + if options["add_location"]: + if self.gettext_version < (0, 19): + raise CommandError( + "The --add-location option requires gettext 0.19 or later. " + "You have %s." % ".".join(str(x) for x in self.gettext_version) + ) + arg_add_location = "--add-location=%s" % options["add_location"] + self.msgmerge_options = self.msgmerge_options[:] + [arg_add_location] + self.msguniq_options = self.msguniq_options[:] + [arg_add_location] + self.msgattrib_options = self.msgattrib_options[:] + [arg_add_location] + self.xgettext_options = self.xgettext_options[:] + [arg_add_location] + + self.no_obsolete = options["no_obsolete"] + self.keep_pot = options["keep_pot"] + + if self.domain not in ("django", "djangojs"): + raise CommandError( + "currently makemessages only supports domains " + "'django' and 'djangojs'" + ) + if self.domain == "djangojs": + exts = extensions or ["js"] + else: + exts = extensions or ["html", "txt", "py"] + self.extensions = handle_extensions(exts) + + if (not locale and not exclude and not process_all) or self.domain is None: + raise CommandError( + "Type '%s help %s' for usage information." + % (os.path.basename(sys.argv[0]), sys.argv[1]) + ) + + if self.verbosity > 1: + self.stdout.write( + "examining files with the extensions: %s" + % get_text_list(list(self.extensions), "and") + ) + + self.invoked_for_django = False + self.locale_paths = [] + self.default_locale_path = None + if os.path.isdir(os.path.join("conf", "locale")): + self.locale_paths = [os.path.abspath(os.path.join("conf", "locale"))] + self.default_locale_path = self.locale_paths[0] + self.invoked_for_django = True + else: + if self.settings_available: + self.locale_paths.extend(settings.LOCALE_PATHS) + # Allow to run makemessages inside an app dir + if os.path.isdir("locale"): + self.locale_paths.append(os.path.abspath("locale")) + if self.locale_paths: + self.default_locale_path = self.locale_paths[0] + os.makedirs(self.default_locale_path, exist_ok=True) + + # Build locale list + looks_like_locale = re.compile(r"[a-z]{2}") + locale_dirs = filter( + os.path.isdir, glob.glob("%s/*" % self.default_locale_path) + ) + all_locales = [ + lang_code + for lang_code in map(os.path.basename, locale_dirs) + if looks_like_locale.match(lang_code) + ] + + # Account for excluded locales + if process_all: + locales = all_locales + else: + locales = locale or all_locales + locales = set(locales).difference(exclude) + + if locales: + check_programs("msguniq", "msgmerge", "msgattrib") + + check_programs("xgettext") + + try: + potfiles = self.build_potfiles() + + # Build po files for each selected locale + for locale in locales: + if "-" in locale: + self.stdout.write( + "invalid locale %s, did you mean %s?" + % ( + locale, + locale.replace("-", "_"), + ), + ) + continue + if self.verbosity > 0: + self.stdout.write("processing locale %s" % locale) + for potfile in potfiles: + self.write_po_file(potfile, locale) + finally: + if not self.keep_pot: + self.remove_potfiles() + + @cached_property + def gettext_version(self): + # Gettext tools will output system-encoded bytestrings instead of UTF-8, + # when looking up the version. It's especially a problem on Windows. + out, err, status = popen_wrapper( + ["xgettext", "--version"], + stdout_encoding=DEFAULT_LOCALE_ENCODING, + ) + m = re.search(r"(\d+)\.(\d+)\.?(\d+)?", out) + if m: + return tuple(int(d) for d in m.groups() if d is not None) + else: + raise CommandError("Unable to get gettext version. Is it installed?") + + @cached_property + def settings_available(self): + try: + settings.LOCALE_PATHS + except ImproperlyConfigured: + if self.verbosity > 1: + self.stderr.write("Running without configured settings.") + return False + return True + + def build_potfiles(self): + """ + Build pot files and apply msguniq to them. + """ + file_list = self.find_files(".") + self.remove_potfiles() + self.process_files(file_list) + potfiles = [] + for path in self.locale_paths: + potfile = os.path.join(path, "%s.pot" % self.domain) + if not os.path.exists(potfile): + continue + args = ["msguniq"] + self.msguniq_options + [potfile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msguniq\n%s" % errors + ) + elif self.verbosity > 0: + self.stdout.write(errors) + msgs = normalize_eols(msgs) + with open(potfile, "w", encoding="utf-8") as fp: + fp.write(msgs) + potfiles.append(potfile) + return potfiles + + def remove_potfiles(self): + for path in self.locale_paths: + pot_path = os.path.join(path, "%s.pot" % self.domain) + if os.path.exists(pot_path): + os.unlink(pot_path) + + def find_files(self, root): + """ + Get all files in the given root. Also check that there is a matching + locale dir for each file. + """ + all_files = [] + ignored_roots = [] + if self.settings_available: + ignored_roots = [ + os.path.normpath(p) + for p in (settings.MEDIA_ROOT, settings.STATIC_ROOT) + if p + ] + for dirpath, dirnames, filenames in os.walk( + root, topdown=True, followlinks=self.symlinks + ): + for dirname in dirnames[:]: + if ( + is_ignored_path( + os.path.normpath(os.path.join(dirpath, dirname)), + self.ignore_patterns, + ) + or os.path.join(os.path.abspath(dirpath), dirname) in ignored_roots + ): + dirnames.remove(dirname) + if self.verbosity > 1: + self.stdout.write("ignoring directory %s" % dirname) + elif dirname == "locale": + dirnames.remove(dirname) + self.locale_paths.insert( + 0, os.path.join(os.path.abspath(dirpath), dirname) + ) + for filename in filenames: + file_path = os.path.normpath(os.path.join(dirpath, filename)) + file_ext = os.path.splitext(filename)[1] + if file_ext not in self.extensions or is_ignored_path( + file_path, self.ignore_patterns + ): + if self.verbosity > 1: + self.stdout.write( + "ignoring file %s in %s" % (filename, dirpath) + ) + else: + locale_dir = None + for path in self.locale_paths: + if os.path.abspath(dirpath).startswith(os.path.dirname(path)): + locale_dir = path + break + locale_dir = locale_dir or self.default_locale_path or NO_LOCALE_DIR + all_files.append( + self.translatable_file_class(dirpath, filename, locale_dir) + ) + return sorted(all_files) + + def process_files(self, file_list): + """ + Group translatable files by locale directory and run pot file build + process for each group. + """ + file_groups = {} + for translatable in file_list: + file_group = file_groups.setdefault(translatable.locale_dir, []) + file_group.append(translatable) + for locale_dir, files in file_groups.items(): + self.process_locale_dir(locale_dir, files) + + def process_locale_dir(self, locale_dir, files): + """ + Extract translatable literals from the specified files, creating or + updating the POT file for a given locale directory. + + Use the xgettext GNU gettext utility. + """ + build_files = [] + for translatable in files: + if self.verbosity > 1: + self.stdout.write( + "processing file %s in %s" + % (translatable.file, translatable.dirpath) + ) + if self.domain not in ("djangojs", "django"): + continue + build_file = self.build_file_class(self, self.domain, translatable) + try: + build_file.preprocess() + except UnicodeDecodeError as e: + self.stdout.write( + "UnicodeDecodeError: skipped file %s in %s (reason: %s)" + % ( + translatable.file, + translatable.dirpath, + e, + ) + ) + continue + except BaseException: + # Cleanup before exit. + for build_file in build_files: + build_file.cleanup() + raise + build_files.append(build_file) + + if self.domain == "djangojs": + is_templatized = build_file.is_templatized + args = [ + "xgettext", + "-d", + self.domain, + "--language=%s" % ("C" if is_templatized else "JavaScript",), + "--keyword=gettext_noop", + "--keyword=gettext_lazy", + "--keyword=ngettext_lazy:1,2", + "--keyword=pgettext:1c,2", + "--keyword=npgettext:1c,2,3", + "--output=-", + ] + elif self.domain == "django": + args = [ + "xgettext", + "-d", + self.domain, + "--language=Python", + "--keyword=gettext_noop", + "--keyword=gettext_lazy", + "--keyword=ngettext_lazy:1,2", + "--keyword=pgettext:1c,2", + "--keyword=npgettext:1c,2,3", + "--keyword=pgettext_lazy:1c,2", + "--keyword=npgettext_lazy:1c,2,3", + "--output=-", + ] + else: + return + + input_files = [bf.work_path for bf in build_files] + with NamedTemporaryFile(mode="w+") as input_files_list: + input_files_list.write("\n".join(input_files)) + input_files_list.flush() + args.extend(["--files-from", input_files_list.name]) + args.extend(self.xgettext_options) + msgs, errors, status = popen_wrapper(args) + + if errors: + if status != STATUS_OK: + for build_file in build_files: + build_file.cleanup() + raise CommandError( + "errors happened while running xgettext on %s\n%s" + % ("\n".join(input_files), errors) + ) + elif self.verbosity > 0: + # Print warnings + self.stdout.write(errors) + + if msgs: + if locale_dir is NO_LOCALE_DIR: + for build_file in build_files: + build_file.cleanup() + file_path = os.path.normpath(build_files[0].path) + raise CommandError( + "Unable to find a locale path to store translations for " + "file %s. Make sure the 'locale' directory exists in an " + "app or LOCALE_PATHS setting is set." % file_path + ) + for build_file in build_files: + msgs = build_file.postprocess_messages(msgs) + potfile = os.path.join(locale_dir, "%s.pot" % self.domain) + write_pot_file(potfile, msgs) + + for build_file in build_files: + build_file.cleanup() + + def write_po_file(self, potfile, locale): + """ + Create or update the PO file for self.domain and `locale`. + Use contents of the existing `potfile`. + + Use msgmerge and msgattrib GNU gettext utilities. + """ + basedir = os.path.join(os.path.dirname(potfile), locale, "LC_MESSAGES") + os.makedirs(basedir, exist_ok=True) + pofile = os.path.join(basedir, "%s.po" % self.domain) + + if os.path.exists(pofile): + args = ["msgmerge"] + self.msgmerge_options + [pofile, potfile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msgmerge\n%s" % errors + ) + elif self.verbosity > 0: + self.stdout.write(errors) + else: + with open(potfile, encoding="utf-8") as fp: + msgs = fp.read() + if not self.invoked_for_django: + msgs = self.copy_plural_forms(msgs, locale) + msgs = normalize_eols(msgs) + msgs = msgs.replace( + "#. #-#-#-#-# %s.pot (PACKAGE VERSION) #-#-#-#-#\n" % self.domain, "" + ) + with open(pofile, "w", encoding="utf-8") as fp: + fp.write(msgs) + + if self.no_obsolete: + args = ["msgattrib"] + self.msgattrib_options + ["-o", pofile, pofile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msgattrib\n%s" % errors + ) + elif self.verbosity > 0: + self.stdout.write(errors) + + def copy_plural_forms(self, msgs, locale): + """ + Copy plural forms header contents from a Django catalog of locale to + the msgs string, inserting it at the right place. msgs should be the + contents of a newly created .po file. + """ + django_dir = os.path.normpath(os.path.join(os.path.dirname(django.__file__))) + if self.domain == "djangojs": + domains = ("djangojs", "django") + else: + domains = ("django",) + for domain in domains: + django_po = os.path.join( + django_dir, "conf", "locale", locale, "LC_MESSAGES", "%s.po" % domain + ) + if os.path.exists(django_po): + with open(django_po, encoding="utf-8") as fp: + m = plural_forms_re.search(fp.read()) + if m: + plural_form_line = m["value"] + if self.verbosity > 1: + self.stdout.write("copying plural forms: %s" % plural_form_line) + lines = [] + found = False + for line in msgs.splitlines(): + if not found and (not line or plural_forms_re.search(line)): + line = plural_form_line + found = True + lines.append(line) + msgs = "\n".join(lines) + break + return msgs diff --git a/venv/Lib/site-packages/django/core/management/commands/makemigrations.py b/venv/Lib/site-packages/django/core/management/commands/makemigrations.py new file mode 100644 index 000000000..12352e52d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/makemigrations.py @@ -0,0 +1,379 @@ +import os +import sys +import warnings +from itertools import takewhile + +from django.apps import apps +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError, no_translations +from django.db import DEFAULT_DB_ALIAS, OperationalError, connections, router +from django.db.migrations import Migration +from django.db.migrations.autodetector import MigrationAutodetector +from django.db.migrations.loader import MigrationLoader +from django.db.migrations.questioner import ( + InteractiveMigrationQuestioner, + MigrationQuestioner, + NonInteractiveMigrationQuestioner, +) +from django.db.migrations.state import ProjectState +from django.db.migrations.utils import get_migration_name_timestamp +from django.db.migrations.writer import MigrationWriter + + +class Command(BaseCommand): + help = "Creates new migration(s) for apps." + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="app_label", + nargs="*", + help="Specify the app label(s) to create migrations for.", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Just show what migrations would be made; don't actually write them.", + ) + parser.add_argument( + "--merge", + action="store_true", + help="Enable fixing of migration conflicts.", + ) + parser.add_argument( + "--empty", + action="store_true", + help="Create an empty migration.", + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "-n", + "--name", + help="Use this name for migration file(s).", + ) + parser.add_argument( + "--no-header", + action="store_false", + dest="include_header", + help="Do not add header comments to new migration file(s).", + ) + parser.add_argument( + "--check", + action="store_true", + dest="check_changes", + help="Exit with a non-zero status if model changes are missing migrations.", + ) + + @no_translations + def handle(self, *app_labels, **options): + self.verbosity = options["verbosity"] + self.interactive = options["interactive"] + self.dry_run = options["dry_run"] + self.merge = options["merge"] + self.empty = options["empty"] + self.migration_name = options["name"] + if self.migration_name and not self.migration_name.isidentifier(): + raise CommandError("The migration name must be a valid Python identifier.") + self.include_header = options["include_header"] + check_changes = options["check_changes"] + + # Make sure the app they asked for exists + app_labels = set(app_labels) + has_bad_labels = False + for app_label in app_labels: + try: + apps.get_app_config(app_label) + except LookupError as err: + self.stderr.write(str(err)) + has_bad_labels = True + if has_bad_labels: + sys.exit(2) + + # Load the current graph state. Pass in None for the connection so + # the loader doesn't try to resolve replaced migrations from DB. + loader = MigrationLoader(None, ignore_no_migrations=True) + + # Raise an error if any migrations are applied before their dependencies. + consistency_check_labels = {config.label for config in apps.get_app_configs()} + # Non-default databases are only checked if database routers used. + aliases_to_check = ( + connections if settings.DATABASE_ROUTERS else [DEFAULT_DB_ALIAS] + ) + for alias in sorted(aliases_to_check): + connection = connections[alias] + if connection.settings_dict["ENGINE"] != "django.db.backends.dummy" and any( + # At least one model must be migrated to the database. + router.allow_migrate( + connection.alias, app_label, model_name=model._meta.object_name + ) + for app_label in consistency_check_labels + for model in apps.get_app_config(app_label).get_models() + ): + try: + loader.check_consistent_history(connection) + except OperationalError as error: + warnings.warn( + "Got an error checking a consistent migration history " + "performed for database connection '%s': %s" % (alias, error), + RuntimeWarning, + ) + # Before anything else, see if there's conflicting apps and drop out + # hard if there are any and they don't want to merge + conflicts = loader.detect_conflicts() + + # If app_labels is specified, filter out conflicting migrations for + # unspecified apps. + if app_labels: + conflicts = { + app_label: conflict + for app_label, conflict in conflicts.items() + if app_label in app_labels + } + + if conflicts and not self.merge: + name_str = "; ".join( + "%s in %s" % (", ".join(names), app) for app, names in conflicts.items() + ) + raise CommandError( + "Conflicting migrations detected; multiple leaf nodes in the " + "migration graph: (%s).\nTo fix them run " + "'python manage.py makemigrations --merge'" % name_str + ) + + # If they want to merge and there's nothing to merge, then politely exit + if self.merge and not conflicts: + self.stdout.write("No conflicts detected to merge.") + return + + # If they want to merge and there is something to merge, then + # divert into the merge code + if self.merge and conflicts: + return self.handle_merge(loader, conflicts) + + if self.interactive: + questioner = InteractiveMigrationQuestioner( + specified_apps=app_labels, dry_run=self.dry_run + ) + else: + questioner = NonInteractiveMigrationQuestioner( + specified_apps=app_labels, dry_run=self.dry_run + ) + # Set up autodetector + autodetector = MigrationAutodetector( + loader.project_state(), + ProjectState.from_apps(apps), + questioner, + ) + + # If they want to make an empty migration, make one for each app + if self.empty: + if not app_labels: + raise CommandError( + "You must supply at least one app label when using --empty." + ) + # Make a fake changes() result we can pass to arrange_for_graph + changes = {app: [Migration("custom", app)] for app in app_labels} + changes = autodetector.arrange_for_graph( + changes=changes, + graph=loader.graph, + migration_name=self.migration_name, + ) + self.write_migration_files(changes) + return + + # Detect changes + changes = autodetector.changes( + graph=loader.graph, + trim_to_apps=app_labels or None, + convert_apps=app_labels or None, + migration_name=self.migration_name, + ) + + if not changes: + # No changes? Tell them. + if self.verbosity >= 1: + if app_labels: + if len(app_labels) == 1: + self.stdout.write( + "No changes detected in app '%s'" % app_labels.pop() + ) + else: + self.stdout.write( + "No changes detected in apps '%s'" + % ("', '".join(app_labels)) + ) + else: + self.stdout.write("No changes detected") + else: + self.write_migration_files(changes) + if check_changes: + sys.exit(1) + + def write_migration_files(self, changes): + """ + Take a changes dict and write them out as migration files. + """ + directory_created = {} + for app_label, app_migrations in changes.items(): + if self.verbosity >= 1: + self.stdout.write( + self.style.MIGRATE_HEADING("Migrations for '%s':" % app_label) + ) + for migration in app_migrations: + # Describe the migration + writer = MigrationWriter(migration, self.include_header) + if self.verbosity >= 1: + # Display a relative path if it's below the current working + # directory, or an absolute path otherwise. + try: + migration_string = os.path.relpath(writer.path) + except ValueError: + migration_string = writer.path + if migration_string.startswith(".."): + migration_string = writer.path + self.stdout.write( + " %s\n" % self.style.MIGRATE_LABEL(migration_string) + ) + for operation in migration.operations: + self.stdout.write(" - %s" % operation.describe()) + if not self.dry_run: + # Write the migrations file to the disk. + migrations_directory = os.path.dirname(writer.path) + if not directory_created.get(app_label): + os.makedirs(migrations_directory, exist_ok=True) + init_path = os.path.join(migrations_directory, "__init__.py") + if not os.path.isfile(init_path): + open(init_path, "w").close() + # We just do this once per app + directory_created[app_label] = True + migration_string = writer.as_string() + with open(writer.path, "w", encoding="utf-8") as fh: + fh.write(migration_string) + elif self.verbosity == 3: + # Alternatively, makemigrations --dry-run --verbosity 3 + # will output the migrations to stdout rather than saving + # the file to the disk. + self.stdout.write( + self.style.MIGRATE_HEADING( + "Full migrations file '%s':" % writer.filename + ) + ) + self.stdout.write(writer.as_string()) + + def handle_merge(self, loader, conflicts): + """ + Handles merging together conflicted migrations interactively, + if it's safe; otherwise, advises on how to fix it. + """ + if self.interactive: + questioner = InteractiveMigrationQuestioner() + else: + questioner = MigrationQuestioner(defaults={"ask_merge": True}) + + for app_label, migration_names in conflicts.items(): + # Grab out the migrations in question, and work out their + # common ancestor. + merge_migrations = [] + for migration_name in migration_names: + migration = loader.get_migration(app_label, migration_name) + migration.ancestry = [ + mig + for mig in loader.graph.forwards_plan((app_label, migration_name)) + if mig[0] == migration.app_label + ] + merge_migrations.append(migration) + + def all_items_equal(seq): + return all(item == seq[0] for item in seq[1:]) + + merge_migrations_generations = zip(*(m.ancestry for m in merge_migrations)) + common_ancestor_count = sum( + 1 + for common_ancestor_generation in takewhile( + all_items_equal, merge_migrations_generations + ) + ) + if not common_ancestor_count: + raise ValueError( + "Could not find common ancestor of %s" % migration_names + ) + # Now work out the operations along each divergent branch + for migration in merge_migrations: + migration.branch = migration.ancestry[common_ancestor_count:] + migrations_ops = ( + loader.get_migration(node_app, node_name).operations + for node_app, node_name in migration.branch + ) + migration.merged_operations = sum(migrations_ops, []) + # In future, this could use some of the Optimizer code + # (can_optimize_through) to automatically see if they're + # mergeable. For now, we always just prompt the user. + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("Merging %s" % app_label)) + for migration in merge_migrations: + self.stdout.write( + self.style.MIGRATE_LABEL(" Branch %s" % migration.name) + ) + for operation in migration.merged_operations: + self.stdout.write(" - %s" % operation.describe()) + if questioner.ask_merge(app_label): + # If they still want to merge it, then write out an empty + # file depending on the migrations needing merging. + numbers = [ + MigrationAutodetector.parse_number(migration.name) + for migration in merge_migrations + ] + try: + biggest_number = max(x for x in numbers if x is not None) + except ValueError: + biggest_number = 1 + subclass = type( + "Migration", + (Migration,), + { + "dependencies": [ + (app_label, migration.name) + for migration in merge_migrations + ], + }, + ) + parts = ["%04i" % (biggest_number + 1)] + if self.migration_name: + parts.append(self.migration_name) + else: + parts.append("merge") + leaf_names = "_".join( + sorted(migration.name for migration in merge_migrations) + ) + if len(leaf_names) > 47: + parts.append(get_migration_name_timestamp()) + else: + parts.append(leaf_names) + migration_name = "_".join(parts) + new_migration = subclass(migration_name, app_label) + writer = MigrationWriter(new_migration, self.include_header) + + if not self.dry_run: + # Write the merge migrations file to the disk + with open(writer.path, "w", encoding="utf-8") as fh: + fh.write(writer.as_string()) + if self.verbosity > 0: + self.stdout.write( + "\nCreated new merge migration %s" % writer.path + ) + elif self.verbosity == 3: + # Alternatively, makemigrations --merge --dry-run --verbosity 3 + # will output the merge migrations to stdout rather than saving + # the file to the disk. + self.stdout.write( + self.style.MIGRATE_HEADING( + "Full merge migrations file '%s':" % writer.filename + ) + ) + self.stdout.write(writer.as_string()) diff --git a/venv/Lib/site-packages/django/core/management/commands/migrate.py b/venv/Lib/site-packages/django/core/management/commands/migrate.py new file mode 100644 index 000000000..228e07a2f --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/migrate.py @@ -0,0 +1,445 @@ +import sys +import time +from importlib import import_module + +from django.apps import apps +from django.core.management.base import BaseCommand, CommandError, no_translations +from django.core.management.sql import emit_post_migrate_signal, emit_pre_migrate_signal +from django.db import DEFAULT_DB_ALIAS, connections, router +from django.db.migrations.autodetector import MigrationAutodetector +from django.db.migrations.executor import MigrationExecutor +from django.db.migrations.loader import AmbiguityError +from django.db.migrations.state import ModelState, ProjectState +from django.utils.module_loading import module_has_submodule +from django.utils.text import Truncator + + +class Command(BaseCommand): + help = ( + "Updates database schema. Manages both apps with migrations and those without." + ) + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument( + "--skip-checks", + action="store_true", + help="Skip system checks.", + ) + parser.add_argument( + "app_label", + nargs="?", + help="App label of an application to synchronize the state.", + ) + parser.add_argument( + "migration_name", + nargs="?", + help="Database state will be brought to the state after that " + 'migration. Use the name "zero" to unapply all migrations.', + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + 'Nominates a database to synchronize. Defaults to the "default" ' + "database." + ), + ) + parser.add_argument( + "--fake", + action="store_true", + help="Mark migrations as run without actually running them.", + ) + parser.add_argument( + "--fake-initial", + action="store_true", + help=( + "Detect if tables already exist and fake-apply initial migrations if " + "so. Make sure that the current database schema matches your initial " + "migration before using this flag. Django will only check for an " + "existing table name." + ), + ) + parser.add_argument( + "--plan", + action="store_true", + help="Shows a list of the migration actions that will be performed.", + ) + parser.add_argument( + "--run-syncdb", + action="store_true", + help="Creates tables for apps without migrations.", + ) + parser.add_argument( + "--check", + action="store_true", + dest="check_unapplied", + help="Exits with a non-zero status if unapplied migrations exist.", + ) + + @no_translations + def handle(self, *args, **options): + database = options["database"] + if not options["skip_checks"]: + self.check(databases=[database]) + + self.verbosity = options["verbosity"] + self.interactive = options["interactive"] + + # Import the 'management' module within each installed app, to register + # dispatcher events. + for app_config in apps.get_app_configs(): + if module_has_submodule(app_config.module, "management"): + import_module(".management", app_config.name) + + # Get the database we're operating from + connection = connections[database] + + # Hook for backends needing any database preparation + connection.prepare_database() + # Work out which apps have migrations and which do not + executor = MigrationExecutor(connection, self.migration_progress_callback) + + # Raise an error if any migrations are applied before their dependencies. + executor.loader.check_consistent_history(connection) + + # Before anything else, see if there's conflicting apps and drop out + # hard if there are any + conflicts = executor.loader.detect_conflicts() + if conflicts: + name_str = "; ".join( + "%s in %s" % (", ".join(names), app) for app, names in conflicts.items() + ) + raise CommandError( + "Conflicting migrations detected; multiple leaf nodes in the " + "migration graph: (%s).\nTo fix them run " + "'python manage.py makemigrations --merge'" % name_str + ) + + # If they supplied command line arguments, work out what they mean. + run_syncdb = options["run_syncdb"] + target_app_labels_only = True + if options["app_label"]: + # Validate app_label. + app_label = options["app_label"] + try: + apps.get_app_config(app_label) + except LookupError as err: + raise CommandError(str(err)) + if run_syncdb: + if app_label in executor.loader.migrated_apps: + raise CommandError( + "Can't use run_syncdb with app '%s' as it has migrations." + % app_label + ) + elif app_label not in executor.loader.migrated_apps: + raise CommandError("App '%s' does not have migrations." % app_label) + + if options["app_label"] and options["migration_name"]: + migration_name = options["migration_name"] + if migration_name == "zero": + targets = [(app_label, None)] + else: + try: + migration = executor.loader.get_migration_by_prefix( + app_label, migration_name + ) + except AmbiguityError: + raise CommandError( + "More than one migration matches '%s' in app '%s'. " + "Please be more specific." % (migration_name, app_label) + ) + except KeyError: + raise CommandError( + "Cannot find a migration matching '%s' from app '%s'." + % (migration_name, app_label) + ) + target = (app_label, migration.name) + # Partially applied squashed migrations are not included in the + # graph, use the last replacement instead. + if ( + target not in executor.loader.graph.nodes + and target in executor.loader.replacements + ): + incomplete_migration = executor.loader.replacements[target] + target = incomplete_migration.replaces[-1] + targets = [target] + target_app_labels_only = False + elif options["app_label"]: + targets = [ + key for key in executor.loader.graph.leaf_nodes() if key[0] == app_label + ] + else: + targets = executor.loader.graph.leaf_nodes() + + plan = executor.migration_plan(targets) + exit_dry = plan and options["check_unapplied"] + + if options["plan"]: + self.stdout.write("Planned operations:", self.style.MIGRATE_LABEL) + if not plan: + self.stdout.write(" No planned migration operations.") + for migration, backwards in plan: + self.stdout.write(str(migration), self.style.MIGRATE_HEADING) + for operation in migration.operations: + message, is_error = self.describe_operation(operation, backwards) + style = self.style.WARNING if is_error else None + self.stdout.write(" " + message, style) + if exit_dry: + sys.exit(1) + return + if exit_dry: + sys.exit(1) + + # At this point, ignore run_syncdb if there aren't any apps to sync. + run_syncdb = options["run_syncdb"] and executor.loader.unmigrated_apps + # Print some useful info + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Operations to perform:")) + if run_syncdb: + if options["app_label"]: + self.stdout.write( + self.style.MIGRATE_LABEL( + " Synchronize unmigrated app: %s" % app_label + ) + ) + else: + self.stdout.write( + self.style.MIGRATE_LABEL(" Synchronize unmigrated apps: ") + + (", ".join(sorted(executor.loader.unmigrated_apps))) + ) + if target_app_labels_only: + self.stdout.write( + self.style.MIGRATE_LABEL(" Apply all migrations: ") + + (", ".join(sorted({a for a, n in targets})) or "(none)") + ) + else: + if targets[0][1] is None: + self.stdout.write( + self.style.MIGRATE_LABEL(" Unapply all migrations: ") + + str(targets[0][0]) + ) + else: + self.stdout.write( + self.style.MIGRATE_LABEL(" Target specific migration: ") + + "%s, from %s" % (targets[0][1], targets[0][0]) + ) + + pre_migrate_state = executor._create_project_state(with_applied_migrations=True) + pre_migrate_apps = pre_migrate_state.apps + emit_pre_migrate_signal( + self.verbosity, + self.interactive, + connection.alias, + stdout=self.stdout, + apps=pre_migrate_apps, + plan=plan, + ) + + # Run the syncdb phase. + if run_syncdb: + if self.verbosity >= 1: + self.stdout.write( + self.style.MIGRATE_HEADING("Synchronizing apps without migrations:") + ) + if options["app_label"]: + self.sync_apps(connection, [app_label]) + else: + self.sync_apps(connection, executor.loader.unmigrated_apps) + + # Migrate! + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Running migrations:")) + if not plan: + if self.verbosity >= 1: + self.stdout.write(" No migrations to apply.") + # If there's changes that aren't in migrations yet, tell them + # how to fix it. + autodetector = MigrationAutodetector( + executor.loader.project_state(), + ProjectState.from_apps(apps), + ) + changes = autodetector.changes(graph=executor.loader.graph) + if changes: + self.stdout.write( + self.style.NOTICE( + " Your models in app(s): %s have changes that are not " + "yet reflected in a migration, and so won't be " + "applied." % ", ".join(repr(app) for app in sorted(changes)) + ) + ) + self.stdout.write( + self.style.NOTICE( + " Run 'manage.py makemigrations' to make new " + "migrations, and then re-run 'manage.py migrate' to " + "apply them." + ) + ) + fake = False + fake_initial = False + else: + fake = options["fake"] + fake_initial = options["fake_initial"] + post_migrate_state = executor.migrate( + targets, + plan=plan, + state=pre_migrate_state.clone(), + fake=fake, + fake_initial=fake_initial, + ) + # post_migrate signals have access to all models. Ensure that all models + # are reloaded in case any are delayed. + post_migrate_state.clear_delayed_apps_cache() + post_migrate_apps = post_migrate_state.apps + + # Re-render models of real apps to include relationships now that + # we've got a final state. This wouldn't be necessary if real apps + # models were rendered with relationships in the first place. + with post_migrate_apps.bulk_update(): + model_keys = [] + for model_state in post_migrate_apps.real_models: + model_key = model_state.app_label, model_state.name_lower + model_keys.append(model_key) + post_migrate_apps.unregister_model(*model_key) + post_migrate_apps.render_multiple( + [ModelState.from_model(apps.get_model(*model)) for model in model_keys] + ) + + # Send the post_migrate signal, so individual apps can do whatever they need + # to do at this point. + emit_post_migrate_signal( + self.verbosity, + self.interactive, + connection.alias, + stdout=self.stdout, + apps=post_migrate_apps, + plan=plan, + ) + + def migration_progress_callback(self, action, migration=None, fake=False): + if self.verbosity >= 1: + compute_time = self.verbosity > 1 + if action == "apply_start": + if compute_time: + self.start = time.monotonic() + self.stdout.write(" Applying %s..." % migration, ending="") + self.stdout.flush() + elif action == "apply_success": + elapsed = ( + " (%.3fs)" % (time.monotonic() - self.start) if compute_time else "" + ) + if fake: + self.stdout.write(self.style.SUCCESS(" FAKED" + elapsed)) + else: + self.stdout.write(self.style.SUCCESS(" OK" + elapsed)) + elif action == "unapply_start": + if compute_time: + self.start = time.monotonic() + self.stdout.write(" Unapplying %s..." % migration, ending="") + self.stdout.flush() + elif action == "unapply_success": + elapsed = ( + " (%.3fs)" % (time.monotonic() - self.start) if compute_time else "" + ) + if fake: + self.stdout.write(self.style.SUCCESS(" FAKED" + elapsed)) + else: + self.stdout.write(self.style.SUCCESS(" OK" + elapsed)) + elif action == "render_start": + if compute_time: + self.start = time.monotonic() + self.stdout.write(" Rendering model states...", ending="") + self.stdout.flush() + elif action == "render_success": + elapsed = ( + " (%.3fs)" % (time.monotonic() - self.start) if compute_time else "" + ) + self.stdout.write(self.style.SUCCESS(" DONE" + elapsed)) + + def sync_apps(self, connection, app_labels): + """Run the old syncdb-style operation on a list of app_labels.""" + with connection.cursor() as cursor: + tables = connection.introspection.table_names(cursor) + + # Build the manifest of apps and models that are to be synchronized. + all_models = [ + ( + app_config.label, + router.get_migratable_models( + app_config, connection.alias, include_auto_created=False + ), + ) + for app_config in apps.get_app_configs() + if app_config.models_module is not None and app_config.label in app_labels + ] + + def model_installed(model): + opts = model._meta + converter = connection.introspection.identifier_converter + return not ( + (converter(opts.db_table) in tables) + or ( + opts.auto_created + and converter(opts.auto_created._meta.db_table) in tables + ) + ) + + manifest = { + app_name: list(filter(model_installed, model_list)) + for app_name, model_list in all_models + } + + # Create the tables for each model + if self.verbosity >= 1: + self.stdout.write(" Creating tables...") + with connection.schema_editor() as editor: + for app_name, model_list in manifest.items(): + for model in model_list: + # Never install unmanaged models, etc. + if not model._meta.can_migrate(connection): + continue + if self.verbosity >= 3: + self.stdout.write( + " Processing %s.%s model" + % (app_name, model._meta.object_name) + ) + if self.verbosity >= 1: + self.stdout.write( + " Creating table %s" % model._meta.db_table + ) + editor.create_model(model) + + # Deferred SQL is executed when exiting the editor's context. + if self.verbosity >= 1: + self.stdout.write(" Running deferred SQL...") + + @staticmethod + def describe_operation(operation, backwards): + """Return a string that describes a migration operation for --plan.""" + prefix = "" + is_error = False + if hasattr(operation, "code"): + code = operation.reverse_code if backwards else operation.code + action = (code.__doc__ or "") if code else None + elif hasattr(operation, "sql"): + action = operation.reverse_sql if backwards else operation.sql + else: + action = "" + if backwards: + prefix = "Undo " + if action is not None: + action = str(action).replace("\n", "") + elif backwards: + action = "IRREVERSIBLE" + is_error = True + if action: + action = " -> " + action + truncated = Truncator(action) + return prefix + operation.describe() + truncated.chars(40), is_error diff --git a/venv/Lib/site-packages/django/core/management/commands/runserver.py b/venv/Lib/site-packages/django/core/management/commands/runserver.py new file mode 100644 index 000000000..3c39f57e4 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/runserver.py @@ -0,0 +1,183 @@ +import errno +import os +import re +import socket +import sys +from datetime import datetime + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.servers.basehttp import WSGIServer, get_internal_wsgi_application, run +from django.utils import autoreload +from django.utils.regex_helper import _lazy_re_compile + +naiveip_re = _lazy_re_compile( + r"""^(?: +(?P + (?P\d{1,3}(?:\.\d{1,3}){3}) | # IPv4 address + (?P\[[a-fA-F0-9:]+\]) | # IPv6 address + (?P[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*) # FQDN +):)?(?P\d+)$""", + re.X, +) + + +class Command(BaseCommand): + help = "Starts a lightweight web server for development." + + # Validation is called explicitly each time the server is reloaded. + requires_system_checks = [] + stealth_options = ("shutdown_message",) + suppressed_base_arguments = {"--verbosity", "--traceback"} + + default_addr = "127.0.0.1" + default_addr_ipv6 = "::1" + default_port = "8000" + protocol = "http" + server_cls = WSGIServer + + def add_arguments(self, parser): + parser.add_argument( + "addrport", nargs="?", help="Optional port number, or ipaddr:port" + ) + parser.add_argument( + "--ipv6", + "-6", + action="store_true", + dest="use_ipv6", + help="Tells Django to use an IPv6 address.", + ) + parser.add_argument( + "--nothreading", + action="store_false", + dest="use_threading", + help="Tells Django to NOT use threading.", + ) + parser.add_argument( + "--noreload", + action="store_false", + dest="use_reloader", + help="Tells Django to NOT use the auto-reloader.", + ) + parser.add_argument( + "--skip-checks", + action="store_true", + help="Skip system checks.", + ) + + def execute(self, *args, **options): + if options["no_color"]: + # We rely on the environment because it's currently the only + # way to reach WSGIRequestHandler. This seems an acceptable + # compromise considering `runserver` runs indefinitely. + os.environ["DJANGO_COLORS"] = "nocolor" + super().execute(*args, **options) + + def get_handler(self, *args, **options): + """Return the default WSGI handler for the runner.""" + return get_internal_wsgi_application() + + def handle(self, *args, **options): + if not settings.DEBUG and not settings.ALLOWED_HOSTS: + raise CommandError("You must set settings.ALLOWED_HOSTS if DEBUG is False.") + + self.use_ipv6 = options["use_ipv6"] + if self.use_ipv6 and not socket.has_ipv6: + raise CommandError("Your Python does not support IPv6.") + self._raw_ipv6 = False + if not options["addrport"]: + self.addr = "" + self.port = self.default_port + else: + m = re.match(naiveip_re, options["addrport"]) + if m is None: + raise CommandError( + '"%s" is not a valid port number ' + "or address:port pair." % options["addrport"] + ) + self.addr, _ipv4, _ipv6, _fqdn, self.port = m.groups() + if not self.port.isdigit(): + raise CommandError("%r is not a valid port number." % self.port) + if self.addr: + if _ipv6: + self.addr = self.addr[1:-1] + self.use_ipv6 = True + self._raw_ipv6 = True + elif self.use_ipv6 and not _fqdn: + raise CommandError('"%s" is not a valid IPv6 address.' % self.addr) + if not self.addr: + self.addr = self.default_addr_ipv6 if self.use_ipv6 else self.default_addr + self._raw_ipv6 = self.use_ipv6 + self.run(**options) + + def run(self, **options): + """Run the server, using the autoreloader if needed.""" + use_reloader = options["use_reloader"] + + if use_reloader: + autoreload.run_with_reloader(self.inner_run, **options) + else: + self.inner_run(None, **options) + + def inner_run(self, *args, **options): + # If an exception was silenced in ManagementUtility.execute in order + # to be raised in the child process, raise it now. + autoreload.raise_last_exception() + + threading = options["use_threading"] + # 'shutdown_message' is a stealth option. + shutdown_message = options.get("shutdown_message", "") + quit_command = "CTRL-BREAK" if sys.platform == "win32" else "CONTROL-C" + + if not options["skip_checks"]: + self.stdout.write("Performing system checks...\n\n") + self.check(display_num_errors=True) + # Need to check migrations here, so can't use the + # requires_migrations_check attribute. + self.check_migrations() + now = datetime.now().strftime("%B %d, %Y - %X") + self.stdout.write(now) + self.stdout.write( + ( + "Django version %(version)s, using settings %(settings)r\n" + "Starting development server at %(protocol)s://%(addr)s:%(port)s/\n" + "Quit the server with %(quit_command)s." + ) + % { + "version": self.get_version(), + "settings": settings.SETTINGS_MODULE, + "protocol": self.protocol, + "addr": "[%s]" % self.addr if self._raw_ipv6 else self.addr, + "port": self.port, + "quit_command": quit_command, + } + ) + + try: + handler = self.get_handler(*args, **options) + run( + self.addr, + int(self.port), + handler, + ipv6=self.use_ipv6, + threading=threading, + server_cls=self.server_cls, + ) + except OSError as e: + # Use helpful error messages instead of ugly tracebacks. + ERRORS = { + errno.EACCES: "You don't have permission to access that port.", + errno.EADDRINUSE: "That port is already in use.", + errno.EADDRNOTAVAIL: "That IP address can't be assigned to.", + } + try: + error_text = ERRORS[e.errno] + except KeyError: + error_text = e + self.stderr.write("Error: %s" % error_text) + # Need to use an OS exit because sys.exit doesn't work in a thread + os._exit(1) + except KeyboardInterrupt: + if shutdown_message: + self.stdout.write(shutdown_message) + sys.exit(0) diff --git a/venv/Lib/site-packages/django/core/management/commands/sendtestemail.py b/venv/Lib/site-packages/django/core/management/commands/sendtestemail.py new file mode 100644 index 000000000..fbb2a7856 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/sendtestemail.py @@ -0,0 +1,46 @@ +import socket + +from django.core.mail import mail_admins, mail_managers, send_mail +from django.core.management.base import BaseCommand +from django.utils import timezone + + +class Command(BaseCommand): + help = "Sends a test email to the email addresses specified as arguments." + missing_args_message = ( + "You must specify some email recipients, or pass the --managers or --admin " + "options." + ) + + def add_arguments(self, parser): + parser.add_argument( + "email", + nargs="*", + help="One or more email addresses to send a test email to.", + ) + parser.add_argument( + "--managers", + action="store_true", + help="Send a test email to the addresses specified in settings.MANAGERS.", + ) + parser.add_argument( + "--admins", + action="store_true", + help="Send a test email to the addresses specified in settings.ADMINS.", + ) + + def handle(self, *args, **kwargs): + subject = "Test email from %s on %s" % (socket.gethostname(), timezone.now()) + + send_mail( + subject=subject, + message="If you're reading this, it was successful.", + from_email=None, + recipient_list=kwargs["email"], + ) + + if kwargs["managers"]: + mail_managers(subject, "This email was sent to the site managers.") + + if kwargs["admins"]: + mail_admins(subject, "This email was sent to the site admins.") diff --git a/venv/Lib/site-packages/django/core/management/commands/shell.py b/venv/Lib/site-packages/django/core/management/commands/shell.py new file mode 100644 index 000000000..f55b34640 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/shell.py @@ -0,0 +1,139 @@ +import os +import select +import sys +import traceback + +from django.core.management import BaseCommand, CommandError +from django.utils.datastructures import OrderedSet + + +class Command(BaseCommand): + help = ( + "Runs a Python interactive interpreter. Tries to use IPython or " + "bpython, if one of them is available. Any standard input is executed " + "as code." + ) + + requires_system_checks = [] + shells = ["ipython", "bpython", "python"] + + def add_arguments(self, parser): + parser.add_argument( + "--no-startup", + action="store_true", + help=( + "When using plain Python, ignore the PYTHONSTARTUP environment " + "variable and ~/.pythonrc.py script." + ), + ) + parser.add_argument( + "-i", + "--interface", + choices=self.shells, + help=( + "Specify an interactive interpreter interface. Available options: " + '"ipython", "bpython", and "python"' + ), + ) + parser.add_argument( + "-c", + "--command", + help=( + "Instead of opening an interactive shell, run a command as Django and " + "exit." + ), + ) + + def ipython(self, options): + from IPython import start_ipython + + start_ipython(argv=[]) + + def bpython(self, options): + import bpython + + bpython.embed() + + def python(self, options): + import code + + # Set up a dictionary to serve as the environment for the shell. + imported_objects = {} + + # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system + # conventions and get $PYTHONSTARTUP first then .pythonrc.py. + if not options["no_startup"]: + for pythonrc in OrderedSet( + [os.environ.get("PYTHONSTARTUP"), os.path.expanduser("~/.pythonrc.py")] + ): + if not pythonrc: + continue + if not os.path.isfile(pythonrc): + continue + with open(pythonrc) as handle: + pythonrc_code = handle.read() + # Match the behavior of the cpython shell where an error in + # PYTHONSTARTUP prints an exception and continues. + try: + exec(compile(pythonrc_code, pythonrc, "exec"), imported_objects) + except Exception: + traceback.print_exc() + + # By default, this will set up readline to do tab completion and to read and + # write history to the .python_history file, but this can be overridden by + # $PYTHONSTARTUP or ~/.pythonrc.py. + try: + hook = sys.__interactivehook__ + except AttributeError: + # Match the behavior of the cpython shell where a missing + # sys.__interactivehook__ is ignored. + pass + else: + try: + hook() + except Exception: + # Match the behavior of the cpython shell where an error in + # sys.__interactivehook__ prints a warning and the exception + # and continues. + print("Failed calling sys.__interactivehook__") + traceback.print_exc() + + # Set up tab completion for objects imported by $PYTHONSTARTUP or + # ~/.pythonrc.py. + try: + import readline + import rlcompleter + + readline.set_completer(rlcompleter.Completer(imported_objects).complete) + except ImportError: + pass + + # Start the interactive interpreter. + code.interact(local=imported_objects) + + def handle(self, **options): + # Execute the command and exit. + if options["command"]: + exec(options["command"], globals()) + return + + # Execute stdin if it has anything to read and exit. + # Not supported on Windows due to select.select() limitations. + if ( + sys.platform != "win32" + and not sys.stdin.isatty() + and select.select([sys.stdin], [], [], 0)[0] + ): + exec(sys.stdin.read(), globals()) + return + + available_shells = ( + [options["interface"]] if options["interface"] else self.shells + ) + + for shell in available_shells: + try: + return getattr(self, shell)(options) + except ImportError: + pass + raise CommandError("Couldn't import {} interface.".format(shell)) diff --git a/venv/Lib/site-packages/django/core/management/commands/showmigrations.py b/venv/Lib/site-packages/django/core/management/commands/showmigrations.py new file mode 100644 index 000000000..203f92151 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/showmigrations.py @@ -0,0 +1,176 @@ +import sys + +from django.apps import apps +from django.core.management.base import BaseCommand +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.migrations.loader import MigrationLoader +from django.db.migrations.recorder import MigrationRecorder + + +class Command(BaseCommand): + help = "Shows all available migrations for the current project" + + def add_arguments(self, parser): + parser.add_argument( + "app_label", + nargs="*", + help="App labels of applications to limit the output to.", + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + "Nominates a database to show migrations for. Defaults to the " + '"default" database.' + ), + ) + + formats = parser.add_mutually_exclusive_group() + formats.add_argument( + "--list", + "-l", + action="store_const", + dest="format", + const="list", + help=( + "Shows a list of all migrations and which are applied. " + "With a verbosity level of 2 or above, the applied datetimes " + "will be included." + ), + ) + formats.add_argument( + "--plan", + "-p", + action="store_const", + dest="format", + const="plan", + help=( + "Shows all migrations in the order they will be applied. With a " + "verbosity level of 2 or above all direct migration dependencies and " + "reverse dependencies (run_before) will be included." + ), + ) + + parser.set_defaults(format="list") + + def handle(self, *args, **options): + self.verbosity = options["verbosity"] + + # Get the database we're operating from + db = options["database"] + connection = connections[db] + + if options["format"] == "plan": + return self.show_plan(connection, options["app_label"]) + else: + return self.show_list(connection, options["app_label"]) + + def _validate_app_names(self, loader, app_names): + has_bad_names = False + for app_name in app_names: + try: + apps.get_app_config(app_name) + except LookupError as err: + self.stderr.write(str(err)) + has_bad_names = True + if has_bad_names: + sys.exit(2) + + def show_list(self, connection, app_names=None): + """ + Show a list of all migrations on the system, or only those of + some named apps. + """ + # Load migrations from disk/DB + loader = MigrationLoader(connection, ignore_no_migrations=True) + recorder = MigrationRecorder(connection) + recorded_migrations = recorder.applied_migrations() + graph = loader.graph + # If we were passed a list of apps, validate it + if app_names: + self._validate_app_names(loader, app_names) + # Otherwise, show all apps in alphabetic order + else: + app_names = sorted(loader.migrated_apps) + # For each app, print its migrations in order from oldest (roots) to + # newest (leaves). + for app_name in app_names: + self.stdout.write(app_name, self.style.MIGRATE_LABEL) + shown = set() + for node in graph.leaf_nodes(app_name): + for plan_node in graph.forwards_plan(node): + if plan_node not in shown and plan_node[0] == app_name: + # Give it a nice title if it's a squashed one + title = plan_node[1] + if graph.nodes[plan_node].replaces: + title += " (%s squashed migrations)" % len( + graph.nodes[plan_node].replaces + ) + applied_migration = loader.applied_migrations.get(plan_node) + # Mark it as applied/unapplied + if applied_migration: + if plan_node in recorded_migrations: + output = " [X] %s" % title + else: + title += " Run 'manage.py migrate' to finish recording." + output = " [-] %s" % title + if self.verbosity >= 2 and hasattr( + applied_migration, "applied" + ): + output += ( + " (applied at %s)" + % applied_migration.applied.strftime( + "%Y-%m-%d %H:%M:%S" + ) + ) + self.stdout.write(output) + else: + self.stdout.write(" [ ] %s" % title) + shown.add(plan_node) + # If we didn't print anything, then a small message + if not shown: + self.stdout.write(" (no migrations)", self.style.ERROR) + + def show_plan(self, connection, app_names=None): + """ + Show all known migrations (or only those of the specified app_names) + in the order they will be applied. + """ + # Load migrations from disk/DB + loader = MigrationLoader(connection) + graph = loader.graph + if app_names: + self._validate_app_names(loader, app_names) + targets = [key for key in graph.leaf_nodes() if key[0] in app_names] + else: + targets = graph.leaf_nodes() + plan = [] + seen = set() + + # Generate the plan + for target in targets: + for migration in graph.forwards_plan(target): + if migration not in seen: + node = graph.node_map[migration] + plan.append(node) + seen.add(migration) + + # Output + def print_deps(node): + out = [] + for parent in sorted(node.parents): + out.append("%s.%s" % parent.key) + if out: + return " ... (%s)" % ", ".join(out) + return "" + + for node in plan: + deps = "" + if self.verbosity >= 2: + deps = print_deps(node) + if node.key in loader.applied_migrations: + self.stdout.write("[X] %s.%s%s" % (node.key[0], node.key[1], deps)) + else: + self.stdout.write("[ ] %s.%s%s" % (node.key[0], node.key[1], deps)) + if not plan: + self.stdout.write("(no migrations)", self.style.ERROR) diff --git a/venv/Lib/site-packages/django/core/management/commands/sqlflush.py b/venv/Lib/site-packages/django/core/management/commands/sqlflush.py new file mode 100644 index 000000000..bc82e1f05 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/sqlflush.py @@ -0,0 +1,29 @@ +from django.core.management.base import BaseCommand +from django.core.management.sql import sql_flush +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + "Returns a list of the SQL statements required to return all tables in " + "the database to the state they were in just after they were installed." + ) + + output_transaction = True + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + 'Nominates a database to print the SQL for. Defaults to the "default" ' + "database." + ), + ) + + def handle(self, **options): + sql_statements = sql_flush(self.style, connections[options["database"]]) + if not sql_statements and options["verbosity"] >= 1: + self.stderr.write("No tables found.") + return "\n".join(sql_statements) diff --git a/venv/Lib/site-packages/django/core/management/commands/sqlmigrate.py b/venv/Lib/site-packages/django/core/management/commands/sqlmigrate.py new file mode 100644 index 000000000..2f6993682 --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/sqlmigrate.py @@ -0,0 +1,83 @@ +from django.apps import apps +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.migrations.loader import AmbiguityError, MigrationLoader + + +class Command(BaseCommand): + help = "Prints the SQL statements for the named migration." + + output_transaction = True + + def add_arguments(self, parser): + parser.add_argument( + "app_label", help="App label of the application containing the migration." + ) + parser.add_argument( + "migration_name", help="Migration name to print the SQL for." + ) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + 'Nominates a database to create SQL for. Defaults to the "default" ' + "database." + ), + ) + parser.add_argument( + "--backwards", + action="store_true", + help="Creates SQL to unapply the migration, rather than to apply it", + ) + + def execute(self, *args, **options): + # sqlmigrate doesn't support coloring its output but we need to force + # no_color=True so that the BEGIN/COMMIT statements added by + # output_transaction don't get colored either. + options["no_color"] = True + return super().execute(*args, **options) + + def handle(self, *args, **options): + # Get the database we're operating from + connection = connections[options["database"]] + + # Load up a loader to get all the migration data, but don't replace + # migrations. + loader = MigrationLoader(connection, replace_migrations=False) + + # Resolve command-line arguments into a migration + app_label, migration_name = options["app_label"], options["migration_name"] + # Validate app_label + try: + apps.get_app_config(app_label) + except LookupError as err: + raise CommandError(str(err)) + if app_label not in loader.migrated_apps: + raise CommandError("App '%s' does not have migrations" % app_label) + try: + migration = loader.get_migration_by_prefix(app_label, migration_name) + except AmbiguityError: + raise CommandError( + "More than one migration matches '%s' in app '%s'. Please be more " + "specific." % (migration_name, app_label) + ) + except KeyError: + raise CommandError( + "Cannot find a migration matching '%s' from app '%s'. Is it in " + "INSTALLED_APPS?" % (migration_name, app_label) + ) + target = (app_label, migration.name) + + # Show begin/end around output for atomic migrations, if the database + # supports transactional DDL. + self.output_transaction = ( + migration.atomic and connection.features.can_rollback_ddl + ) + + # Make a plan that represents just the requested migrations and show SQL + # for it + plan = [(loader.graph.nodes[target], options["backwards"])] + sql_statements = loader.collect_sql(plan) + if not sql_statements and options["verbosity"] >= 1: + self.stderr.write("No operations found.") + return "\n".join(sql_statements) diff --git a/venv/Lib/site-packages/django/core/management/commands/sqlsequencereset.py b/venv/Lib/site-packages/django/core/management/commands/sqlsequencereset.py new file mode 100644 index 000000000..9653fa59d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/sqlsequencereset.py @@ -0,0 +1,31 @@ +from django.core.management.base import AppCommand +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(AppCommand): + help = ( + "Prints the SQL statements for resetting sequences for the given app name(s)." + ) + + output_transaction = True + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + "--database", + default=DEFAULT_DB_ALIAS, + help=( + 'Nominates a database to print the SQL for. Defaults to the "default" ' + "database." + ), + ) + + def handle_app_config(self, app_config, **options): + if app_config.models_module is None: + return + connection = connections[options["database"]] + models = app_config.get_models(include_auto_created=True) + statements = connection.ops.sequence_reset_sql(self.style, models) + if not statements and options["verbosity"] >= 1: + self.stderr.write("No sequences found.") + return "\n".join(statements) diff --git a/venv/Lib/site-packages/django/core/management/commands/squashmigrations.py b/venv/Lib/site-packages/django/core/management/commands/squashmigrations.py new file mode 100644 index 000000000..2529c4d5d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/squashmigrations.py @@ -0,0 +1,252 @@ +from django.apps import apps +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections, migrations +from django.db.migrations.loader import AmbiguityError, MigrationLoader +from django.db.migrations.migration import SwappableTuple +from django.db.migrations.optimizer import MigrationOptimizer +from django.db.migrations.writer import MigrationWriter +from django.utils.version import get_docs_version + + +class Command(BaseCommand): + help = ( + "Squashes an existing set of migrations (from first until specified) into a " + "single new one." + ) + + def add_arguments(self, parser): + parser.add_argument( + "app_label", + help="App label of the application to squash migrations for.", + ) + parser.add_argument( + "start_migration_name", + nargs="?", + help=( + "Migrations will be squashed starting from and including this " + "migration." + ), + ) + parser.add_argument( + "migration_name", + help="Migrations will be squashed until and including this migration.", + ) + parser.add_argument( + "--no-optimize", + action="store_true", + help="Do not try to optimize the squashed operations.", + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "--squashed-name", + help="Sets the name of the new squashed migration.", + ) + parser.add_argument( + "--no-header", + action="store_false", + dest="include_header", + help="Do not add a header comment to the new squashed migration.", + ) + + def handle(self, **options): + + self.verbosity = options["verbosity"] + self.interactive = options["interactive"] + app_label = options["app_label"] + start_migration_name = options["start_migration_name"] + migration_name = options["migration_name"] + no_optimize = options["no_optimize"] + squashed_name = options["squashed_name"] + include_header = options["include_header"] + # Validate app_label. + try: + apps.get_app_config(app_label) + except LookupError as err: + raise CommandError(str(err)) + # Load the current graph state, check the app and migration they asked + # for exists. + loader = MigrationLoader(connections[DEFAULT_DB_ALIAS]) + if app_label not in loader.migrated_apps: + raise CommandError( + "App '%s' does not have migrations (so squashmigrations on " + "it makes no sense)" % app_label + ) + + migration = self.find_migration(loader, app_label, migration_name) + + # Work out the list of predecessor migrations + migrations_to_squash = [ + loader.get_migration(al, mn) + for al, mn in loader.graph.forwards_plan( + (migration.app_label, migration.name) + ) + if al == migration.app_label + ] + + if start_migration_name: + start_migration = self.find_migration( + loader, app_label, start_migration_name + ) + start = loader.get_migration( + start_migration.app_label, start_migration.name + ) + try: + start_index = migrations_to_squash.index(start) + migrations_to_squash = migrations_to_squash[start_index:] + except ValueError: + raise CommandError( + "The migration '%s' cannot be found. Maybe it comes after " + "the migration '%s'?\n" + "Have a look at:\n" + " python manage.py showmigrations %s\n" + "to debug this issue." % (start_migration, migration, app_label) + ) + + # Tell them what we're doing and optionally ask if we should proceed + if self.verbosity > 0 or self.interactive: + self.stdout.write( + self.style.MIGRATE_HEADING("Will squash the following migrations:") + ) + for migration in migrations_to_squash: + self.stdout.write(" - %s" % migration.name) + + if self.interactive: + answer = None + while not answer or answer not in "yn": + answer = input("Do you wish to proceed? [yN] ") + if not answer: + answer = "n" + break + else: + answer = answer[0].lower() + if answer != "y": + return + + # Load the operations from all those migrations and concat together, + # along with collecting external dependencies and detecting + # double-squashing + operations = [] + dependencies = set() + # We need to take all dependencies from the first migration in the list + # as it may be 0002 depending on 0001 + first_migration = True + for smigration in migrations_to_squash: + if smigration.replaces: + raise CommandError( + "You cannot squash squashed migrations! Please transition it to a " + "normal migration first: https://docs.djangoproject.com/en/%s/" + "topics/migrations/#squashing-migrations" % get_docs_version() + ) + operations.extend(smigration.operations) + for dependency in smigration.dependencies: + if isinstance(dependency, SwappableTuple): + if settings.AUTH_USER_MODEL == dependency.setting: + dependencies.add(("__setting__", "AUTH_USER_MODEL")) + else: + dependencies.add(dependency) + elif dependency[0] != smigration.app_label or first_migration: + dependencies.add(dependency) + first_migration = False + + if no_optimize: + if self.verbosity > 0: + self.stdout.write( + self.style.MIGRATE_HEADING("(Skipping optimization.)") + ) + new_operations = operations + else: + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("Optimizing...")) + + optimizer = MigrationOptimizer() + new_operations = optimizer.optimize(operations, migration.app_label) + + if self.verbosity > 0: + if len(new_operations) == len(operations): + self.stdout.write(" No optimizations possible.") + else: + self.stdout.write( + " Optimized from %s operations to %s operations." + % (len(operations), len(new_operations)) + ) + + # Work out the value of replaces (any squashed ones we're re-squashing) + # need to feed their replaces into ours + replaces = [] + for migration in migrations_to_squash: + if migration.replaces: + replaces.extend(migration.replaces) + else: + replaces.append((migration.app_label, migration.name)) + + # Make a new migration with those operations + subclass = type( + "Migration", + (migrations.Migration,), + { + "dependencies": dependencies, + "operations": new_operations, + "replaces": replaces, + }, + ) + if start_migration_name: + if squashed_name: + # Use the name from --squashed-name. + prefix, _ = start_migration.name.split("_", 1) + name = "%s_%s" % (prefix, squashed_name) + else: + # Generate a name. + name = "%s_squashed_%s" % (start_migration.name, migration.name) + new_migration = subclass(name, app_label) + else: + name = "0001_%s" % (squashed_name or "squashed_%s" % migration.name) + new_migration = subclass(name, app_label) + new_migration.initial = True + + # Write out the new migration file + writer = MigrationWriter(new_migration, include_header) + with open(writer.path, "w", encoding="utf-8") as fh: + fh.write(writer.as_string()) + + if self.verbosity > 0: + self.stdout.write( + self.style.MIGRATE_HEADING( + "Created new squashed migration %s" % writer.path + ) + + "\n" + " You should commit this migration but leave the old ones in place;\n" + " the new migration will be used for new installs. Once you are sure\n" + " all instances of the codebase have applied the migrations you " + "squashed,\n" + " you can delete them." + ) + if writer.needs_manual_porting: + self.stdout.write( + self.style.MIGRATE_HEADING("Manual porting required") + "\n" + " Your migrations contained functions that must be manually " + "copied over,\n" + " as we could not safely copy their implementation.\n" + " See the comment at the top of the squashed migration for " + "details." + ) + + def find_migration(self, loader, app_label, name): + try: + return loader.get_migration_by_prefix(app_label, name) + except AmbiguityError: + raise CommandError( + "More than one migration matches '%s' in app '%s'. Please be " + "more specific." % (name, app_label) + ) + except KeyError: + raise CommandError( + "Cannot find a migration matching '%s' from app '%s'." + % (name, app_label) + ) diff --git a/venv/Lib/site-packages/django/core/management/commands/startapp.py b/venv/Lib/site-packages/django/core/management/commands/startapp.py new file mode 100644 index 000000000..e85833b9a --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/startapp.py @@ -0,0 +1,14 @@ +from django.core.management.templates import TemplateCommand + + +class Command(TemplateCommand): + help = ( + "Creates a Django app directory structure for the given app name in " + "the current directory or optionally in the given directory." + ) + missing_args_message = "You must provide an application name." + + def handle(self, **options): + app_name = options.pop("name") + target = options.pop("directory") + super().handle("app", app_name, target, **options) diff --git a/venv/Lib/site-packages/django/core/management/commands/startproject.py b/venv/Lib/site-packages/django/core/management/commands/startproject.py new file mode 100644 index 000000000..ca17fa54c --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/startproject.py @@ -0,0 +1,21 @@ +from django.core.checks.security.base import SECRET_KEY_INSECURE_PREFIX +from django.core.management.templates import TemplateCommand + +from ..utils import get_random_secret_key + + +class Command(TemplateCommand): + help = ( + "Creates a Django project directory structure for the given project " + "name in the current directory or optionally in the given directory." + ) + missing_args_message = "You must provide a project name." + + def handle(self, **options): + project_name = options.pop("name") + target = options.pop("directory") + + # Create a random SECRET_KEY to put it in the main settings. + options["secret_key"] = SECRET_KEY_INSECURE_PREFIX + get_random_secret_key() + + super().handle("project", project_name, target, **options) diff --git a/venv/Lib/site-packages/django/core/management/commands/test.py b/venv/Lib/site-packages/django/core/management/commands/test.py new file mode 100644 index 000000000..2df6dbbec --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/test.py @@ -0,0 +1,71 @@ +import sys + +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management.utils import get_command_line_option +from django.test.runner import get_max_test_processes +from django.test.utils import NullTimeKeeper, TimeKeeper, get_runner + + +class Command(BaseCommand): + help = "Discover and run tests in the specified modules or the current directory." + + # DiscoverRunner runs the checks after databases are set up. + requires_system_checks = [] + test_runner = None + + def run_from_argv(self, argv): + """ + Pre-parse the command line to extract the value of the --testrunner + option. This allows a test runner to define additional command line + arguments. + """ + self.test_runner = get_command_line_option(argv, "--testrunner") + super().run_from_argv(argv) + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="test_label", + nargs="*", + help=( + "Module paths to test; can be modulename, modulename.TestCase or " + "modulename.TestCase.test_method" + ), + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "--failfast", + action="store_true", + help="Tells Django to stop running the test suite after first failed test.", + ) + parser.add_argument( + "--testrunner", + help="Tells Django to use specified test runner class instead of " + "the one specified by the TEST_RUNNER setting.", + ) + + test_runner_class = get_runner(settings, self.test_runner) + + if hasattr(test_runner_class, "add_arguments"): + test_runner_class.add_arguments(parser) + + def handle(self, *test_labels, **options): + TestRunner = get_runner(settings, options["testrunner"]) + + time_keeper = TimeKeeper() if options.get("timing", False) else NullTimeKeeper() + parallel = options.get("parallel") + if parallel == "auto": + options["parallel"] = get_max_test_processes() + test_runner = TestRunner(**options) + with time_keeper.timed("Total run"): + failures = test_runner.run_tests(test_labels) + time_keeper.print_results() + if failures: + sys.exit(1) diff --git a/venv/Lib/site-packages/django/core/management/commands/testserver.py b/venv/Lib/site-packages/django/core/management/commands/testserver.py new file mode 100644 index 000000000..caff6c65c --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/commands/testserver.py @@ -0,0 +1,65 @@ +from django.core.management import call_command +from django.core.management.base import BaseCommand +from django.db import connection + + +class Command(BaseCommand): + help = "Runs a development server with data from the given fixture(s)." + + requires_system_checks = [] + + def add_arguments(self, parser): + parser.add_argument( + "args", + metavar="fixture", + nargs="*", + help="Path(s) to fixtures to load before running the server.", + ) + parser.add_argument( + "--noinput", + "--no-input", + action="store_false", + dest="interactive", + help="Tells Django to NOT prompt the user for input of any kind.", + ) + parser.add_argument( + "--addrport", + default="", + help="Port number or ipaddr:port to run the server on.", + ) + parser.add_argument( + "--ipv6", + "-6", + action="store_true", + dest="use_ipv6", + help="Tells Django to use an IPv6 address.", + ) + + def handle(self, *fixture_labels, **options): + verbosity = options["verbosity"] + interactive = options["interactive"] + + # Create a test database. + db_name = connection.creation.create_test_db( + verbosity=verbosity, autoclobber=not interactive, serialize=False + ) + + # Import the fixture data into the test database. + call_command("loaddata", *fixture_labels, **{"verbosity": verbosity}) + + # Run the development server. Turn off auto-reloading because it causes + # a strange error -- it causes this handle() method to be called + # multiple times. + shutdown_message = ( + "\nServer stopped.\nNote that the test database, %r, has not been " + "deleted. You can explore it on your own." % db_name + ) + use_threading = connection.features.test_db_allows_multiple_connections + call_command( + "runserver", + addrport=options["addrport"], + shutdown_message=shutdown_message, + use_reloader=False, + use_ipv6=options["use_ipv6"], + use_threading=use_threading, + ) diff --git a/venv/Lib/site-packages/django/core/management/sql.py b/venv/Lib/site-packages/django/core/management/sql.py new file mode 100644 index 000000000..2375cc23a --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/sql.py @@ -0,0 +1,59 @@ +import sys + +from django.apps import apps +from django.db import models + + +def sql_flush(style, connection, reset_sequences=True, allow_cascade=False): + """ + Return a list of the SQL statements used to flush the database. + """ + tables = connection.introspection.django_table_names( + only_existing=True, include_views=False + ) + return connection.ops.sql_flush( + style, + tables, + reset_sequences=reset_sequences, + allow_cascade=allow_cascade, + ) + + +def emit_pre_migrate_signal(verbosity, interactive, db, **kwargs): + # Emit the pre_migrate signal for every application. + for app_config in apps.get_app_configs(): + if app_config.models_module is None: + continue + if verbosity >= 2: + stdout = kwargs.get("stdout", sys.stdout) + stdout.write( + "Running pre-migrate handlers for application %s" % app_config.label + ) + models.signals.pre_migrate.send( + sender=app_config, + app_config=app_config, + verbosity=verbosity, + interactive=interactive, + using=db, + **kwargs, + ) + + +def emit_post_migrate_signal(verbosity, interactive, db, **kwargs): + # Emit the post_migrate signal for every application. + for app_config in apps.get_app_configs(): + if app_config.models_module is None: + continue + if verbosity >= 2: + stdout = kwargs.get("stdout", sys.stdout) + stdout.write( + "Running post-migrate handlers for application %s" % app_config.label + ) + models.signals.post_migrate.send( + sender=app_config, + app_config=app_config, + verbosity=verbosity, + interactive=interactive, + using=db, + **kwargs, + ) diff --git a/venv/Lib/site-packages/django/core/management/templates.py b/venv/Lib/site-packages/django/core/management/templates.py new file mode 100644 index 000000000..32ceee89d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/templates.py @@ -0,0 +1,386 @@ +import argparse +import cgi +import mimetypes +import os +import posixpath +import shutil +import stat +import tempfile +from importlib import import_module +from urllib.request import urlretrieve + +import django +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import handle_extensions +from django.template import Context, Engine +from django.utils import archive +from django.utils.version import get_docs_version + + +class TemplateCommand(BaseCommand): + """ + Copy either a Django application layout template or a Django project + layout template into the specified directory. + + :param style: A color style object (see django.core.management.color). + :param app_or_project: The string 'app' or 'project'. + :param name: The name of the application or project. + :param directory: The directory to which the template should be copied. + :param options: The additional variables passed to project or app templates + """ + + requires_system_checks = [] + # The supported URL schemes + url_schemes = ["http", "https", "ftp"] + # Rewrite the following suffixes when determining the target filename. + rewrite_template_suffixes = ( + # Allow shipping invalid .py files without byte-compilation. + (".py-tpl", ".py"), + ) + + def add_arguments(self, parser): + parser.add_argument("name", help="Name of the application or project.") + parser.add_argument( + "directory", nargs="?", help="Optional destination directory" + ) + parser.add_argument( + "--template", help="The path or URL to load the template from." + ) + parser.add_argument( + "--extension", + "-e", + dest="extensions", + action="append", + default=["py"], + help='The file extension(s) to render (default: "py"). ' + "Separate multiple extensions with commas, or use " + "-e multiple times.", + ) + parser.add_argument( + "--name", + "-n", + dest="files", + action="append", + default=[], + help="The file name(s) to render. Separate multiple file names " + "with commas, or use -n multiple times.", + ) + parser.add_argument( + "--exclude", + "-x", + action="append", + default=argparse.SUPPRESS, + nargs="?", + const="", + help=( + "The directory name(s) to exclude, in addition to .git and " + "__pycache__. Can be used multiple times." + ), + ) + + def handle(self, app_or_project, name, target=None, **options): + self.app_or_project = app_or_project + self.a_or_an = "an" if app_or_project == "app" else "a" + self.paths_to_remove = [] + self.verbosity = options["verbosity"] + + self.validate_name(name) + + # if some directory is given, make sure it's nicely expanded + if target is None: + top_dir = os.path.join(os.getcwd(), name) + try: + os.makedirs(top_dir) + except FileExistsError: + raise CommandError("'%s' already exists" % top_dir) + except OSError as e: + raise CommandError(e) + else: + top_dir = os.path.abspath(os.path.expanduser(target)) + if app_or_project == "app": + self.validate_name(os.path.basename(top_dir), "directory") + if not os.path.exists(top_dir): + raise CommandError( + "Destination directory '%s' does not " + "exist, please create it first." % top_dir + ) + + extensions = tuple(handle_extensions(options["extensions"])) + extra_files = [] + excluded_directories = [".git", "__pycache__"] + for file in options["files"]: + extra_files.extend(map(lambda x: x.strip(), file.split(","))) + if exclude := options.get("exclude"): + for directory in exclude: + excluded_directories.append(directory.strip()) + if self.verbosity >= 2: + self.stdout.write( + "Rendering %s template files with extensions: %s" + % (app_or_project, ", ".join(extensions)) + ) + self.stdout.write( + "Rendering %s template files with filenames: %s" + % (app_or_project, ", ".join(extra_files)) + ) + base_name = "%s_name" % app_or_project + base_subdir = "%s_template" % app_or_project + base_directory = "%s_directory" % app_or_project + camel_case_name = "camel_case_%s_name" % app_or_project + camel_case_value = "".join(x for x in name.title() if x != "_") + + context = Context( + { + **options, + base_name: name, + base_directory: top_dir, + camel_case_name: camel_case_value, + "docs_version": get_docs_version(), + "django_version": django.__version__, + }, + autoescape=False, + ) + + # Setup a stub settings environment for template rendering + if not settings.configured: + settings.configure() + django.setup() + + template_dir = self.handle_template(options["template"], base_subdir) + prefix_length = len(template_dir) + 1 + + for root, dirs, files in os.walk(template_dir): + + path_rest = root[prefix_length:] + relative_dir = path_rest.replace(base_name, name) + if relative_dir: + target_dir = os.path.join(top_dir, relative_dir) + os.makedirs(target_dir, exist_ok=True) + + for dirname in dirs[:]: + if "exclude" not in options: + if dirname.startswith(".") or dirname == "__pycache__": + dirs.remove(dirname) + elif dirname in excluded_directories: + dirs.remove(dirname) + + for filename in files: + if filename.endswith((".pyo", ".pyc", ".py.class")): + # Ignore some files as they cause various breakages. + continue + old_path = os.path.join(root, filename) + new_path = os.path.join( + top_dir, relative_dir, filename.replace(base_name, name) + ) + for old_suffix, new_suffix in self.rewrite_template_suffixes: + if new_path.endswith(old_suffix): + new_path = new_path[: -len(old_suffix)] + new_suffix + break # Only rewrite once + + if os.path.exists(new_path): + raise CommandError( + "%s already exists. Overlaying %s %s into an existing " + "directory won't replace conflicting files." + % ( + new_path, + self.a_or_an, + app_or_project, + ) + ) + + # Only render the Python files, as we don't want to + # accidentally render Django templates files + if new_path.endswith(extensions) or filename in extra_files: + with open(old_path, encoding="utf-8") as template_file: + content = template_file.read() + template = Engine().from_string(content) + content = template.render(context) + with open(new_path, "w", encoding="utf-8") as new_file: + new_file.write(content) + else: + shutil.copyfile(old_path, new_path) + + if self.verbosity >= 2: + self.stdout.write("Creating %s" % new_path) + try: + shutil.copymode(old_path, new_path) + self.make_writeable(new_path) + except OSError: + self.stderr.write( + "Notice: Couldn't set permission bits on %s. You're " + "probably using an uncommon filesystem setup. No " + "problem." % new_path, + self.style.NOTICE, + ) + + if self.paths_to_remove: + if self.verbosity >= 2: + self.stdout.write("Cleaning up temporary files.") + for path_to_remove in self.paths_to_remove: + if os.path.isfile(path_to_remove): + os.remove(path_to_remove) + else: + shutil.rmtree(path_to_remove) + + def handle_template(self, template, subdir): + """ + Determine where the app or project templates are. + Use django.__path__[0] as the default because the Django install + directory isn't known. + """ + if template is None: + return os.path.join(django.__path__[0], "conf", subdir) + else: + if template.startswith("file://"): + template = template[7:] + expanded_template = os.path.expanduser(template) + expanded_template = os.path.normpath(expanded_template) + if os.path.isdir(expanded_template): + return expanded_template + if self.is_url(template): + # downloads the file and returns the path + absolute_path = self.download(template) + else: + absolute_path = os.path.abspath(expanded_template) + if os.path.exists(absolute_path): + return self.extract(absolute_path) + + raise CommandError( + "couldn't handle %s template %s." % (self.app_or_project, template) + ) + + def validate_name(self, name, name_or_dir="name"): + if name is None: + raise CommandError( + "you must provide {an} {app} name".format( + an=self.a_or_an, + app=self.app_or_project, + ) + ) + # Check it's a valid directory name. + if not name.isidentifier(): + raise CommandError( + "'{name}' is not a valid {app} {type}. Please make sure the " + "{type} is a valid identifier.".format( + name=name, + app=self.app_or_project, + type=name_or_dir, + ) + ) + # Check it cannot be imported. + try: + import_module(name) + except ImportError: + pass + else: + raise CommandError( + "'{name}' conflicts with the name of an existing Python " + "module and cannot be used as {an} {app} {type}. Please try " + "another {type}.".format( + name=name, + an=self.a_or_an, + app=self.app_or_project, + type=name_or_dir, + ) + ) + + def download(self, url): + """ + Download the given URL and return the file name. + """ + + def cleanup_url(url): + tmp = url.rstrip("/") + filename = tmp.split("/")[-1] + if url.endswith("/"): + display_url = tmp + "/" + else: + display_url = url + return filename, display_url + + prefix = "django_%s_template_" % self.app_or_project + tempdir = tempfile.mkdtemp(prefix=prefix, suffix="_download") + self.paths_to_remove.append(tempdir) + filename, display_url = cleanup_url(url) + + if self.verbosity >= 2: + self.stdout.write("Downloading %s" % display_url) + try: + the_path, info = urlretrieve(url, os.path.join(tempdir, filename)) + except OSError as e: + raise CommandError( + "couldn't download URL %s to %s: %s" % (url, filename, e) + ) + + used_name = the_path.split("/")[-1] + + # Trying to get better name from response headers + content_disposition = info.get("content-disposition") + if content_disposition: + _, params = cgi.parse_header(content_disposition) + guessed_filename = params.get("filename") or used_name + else: + guessed_filename = used_name + + # Falling back to content type guessing + ext = self.splitext(guessed_filename)[1] + content_type = info.get("content-type") + if not ext and content_type: + ext = mimetypes.guess_extension(content_type) + if ext: + guessed_filename += ext + + # Move the temporary file to a filename that has better + # chances of being recognized by the archive utils + if used_name != guessed_filename: + guessed_path = os.path.join(tempdir, guessed_filename) + shutil.move(the_path, guessed_path) + return guessed_path + + # Giving up + return the_path + + def splitext(self, the_path): + """ + Like os.path.splitext, but takes off .tar, too + """ + base, ext = posixpath.splitext(the_path) + if base.lower().endswith(".tar"): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + def extract(self, filename): + """ + Extract the given file to a temporary directory and return + the path of the directory with the extracted content. + """ + prefix = "django_%s_template_" % self.app_or_project + tempdir = tempfile.mkdtemp(prefix=prefix, suffix="_extract") + self.paths_to_remove.append(tempdir) + if self.verbosity >= 2: + self.stdout.write("Extracting %s" % filename) + try: + archive.extract(filename, tempdir) + return tempdir + except (archive.ArchiveException, OSError) as e: + raise CommandError( + "couldn't extract file %s to %s: %s" % (filename, tempdir, e) + ) + + def is_url(self, template): + """Return True if the name looks like a URL.""" + if ":" not in template: + return False + scheme = template.split(":", 1)[0].lower() + return scheme in self.url_schemes + + def make_writeable(self, filename): + """ + Make sure that the file is writeable. + Useful if our source is read-only. + """ + if not os.access(filename, os.W_OK): + st = os.stat(filename) + new_permissions = stat.S_IMODE(st.st_mode) | stat.S_IWUSR + os.chmod(filename, new_permissions) diff --git a/venv/Lib/site-packages/django/core/management/utils.py b/venv/Lib/site-packages/django/core/management/utils.py new file mode 100644 index 000000000..d71f4df9d --- /dev/null +++ b/venv/Lib/site-packages/django/core/management/utils.py @@ -0,0 +1,155 @@ +import fnmatch +import os +from pathlib import Path +from subprocess import PIPE, run + +from django.apps import apps as installed_apps +from django.utils.crypto import get_random_string +from django.utils.encoding import DEFAULT_LOCALE_ENCODING + +from .base import CommandError, CommandParser + + +def popen_wrapper(args, stdout_encoding="utf-8"): + """ + Friendly wrapper around Popen. + + Return stdout output, stderr output, and OS status code. + """ + try: + p = run(args, stdout=PIPE, stderr=PIPE, close_fds=os.name != "nt") + except OSError as err: + raise CommandError("Error executing %s" % args[0]) from err + return ( + p.stdout.decode(stdout_encoding), + p.stderr.decode(DEFAULT_LOCALE_ENCODING, errors="replace"), + p.returncode, + ) + + +def handle_extensions(extensions): + """ + Organize multiple extensions that are separated with commas or passed by + using --extension/-e multiple times. + + For example: running 'django-admin makemessages -e js,txt -e xhtml -a' + would result in an extension list: ['.js', '.txt', '.xhtml'] + + >>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py']) + {'.html', '.js', '.py'} + >>> handle_extensions(['.html, txt,.tpl']) + {'.html', '.tpl', '.txt'} + """ + ext_list = [] + for ext in extensions: + ext_list.extend(ext.replace(" ", "").split(",")) + for i, ext in enumerate(ext_list): + if not ext.startswith("."): + ext_list[i] = ".%s" % ext_list[i] + return set(ext_list) + + +def find_command(cmd, path=None, pathext=None): + if path is None: + path = os.environ.get("PATH", "").split(os.pathsep) + if isinstance(path, str): + path = [path] + # check if there are funny path extensions for executables, e.g. Windows + if pathext is None: + pathext = os.environ.get("PATHEXT", ".COM;.EXE;.BAT;.CMD").split(os.pathsep) + # don't use extensions if the command ends with one of them + for ext in pathext: + if cmd.endswith(ext): + pathext = [""] + break + # check if we find the command on PATH + for p in path: + f = os.path.join(p, cmd) + if os.path.isfile(f): + return f + for ext in pathext: + fext = f + ext + if os.path.isfile(fext): + return fext + return None + + +def get_random_secret_key(): + """ + Return a 50 character random string usable as a SECRET_KEY setting value. + """ + chars = "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)" + return get_random_string(50, chars) + + +def parse_apps_and_model_labels(labels): + """ + Parse a list of "app_label.ModelName" or "app_label" strings into actual + objects and return a two-element tuple: + (set of model classes, set of app_configs). + Raise a CommandError if some specified models or apps don't exist. + """ + apps = set() + models = set() + + for label in labels: + if "." in label: + try: + model = installed_apps.get_model(label) + except LookupError: + raise CommandError("Unknown model: %s" % label) + models.add(model) + else: + try: + app_config = installed_apps.get_app_config(label) + except LookupError as e: + raise CommandError(str(e)) + apps.add(app_config) + + return models, apps + + +def get_command_line_option(argv, option): + """ + Return the value of a command line option (which should include leading + dashes, e.g. '--testrunner') from an argument list. Return None if the + option wasn't passed or if the argument list couldn't be parsed. + """ + parser = CommandParser(add_help=False, allow_abbrev=False) + parser.add_argument(option, dest="value") + try: + options, _ = parser.parse_known_args(argv[2:]) + except CommandError: + return None + else: + return options.value + + +def normalize_path_patterns(patterns): + """Normalize an iterable of glob style patterns based on OS.""" + patterns = [os.path.normcase(p) for p in patterns] + dir_suffixes = {"%s*" % path_sep for path_sep in {"/", os.sep}} + norm_patterns = [] + for pattern in patterns: + for dir_suffix in dir_suffixes: + if pattern.endswith(dir_suffix): + norm_patterns.append(pattern[: -len(dir_suffix)]) + break + else: + norm_patterns.append(pattern) + return norm_patterns + + +def is_ignored_path(path, ignore_patterns): + """ + Check if the given path should be ignored or not based on matching + one of the glob style `ignore_patterns`. + """ + path = Path(path) + + def ignore(pattern): + return fnmatch.fnmatchcase(path.name, pattern) or fnmatch.fnmatchcase( + str(path), pattern + ) + + return any(ignore(pattern) for pattern in normalize_path_patterns(ignore_patterns)) diff --git a/venv/Lib/site-packages/django/core/paginator.py b/venv/Lib/site-packages/django/core/paginator.py new file mode 100644 index 000000000..568445607 --- /dev/null +++ b/venv/Lib/site-packages/django/core/paginator.py @@ -0,0 +1,224 @@ +import collections.abc +import inspect +import warnings +from math import ceil + +from django.utils.functional import cached_property +from django.utils.inspect import method_has_no_args +from django.utils.translation import gettext_lazy as _ + + +class UnorderedObjectListWarning(RuntimeWarning): + pass + + +class InvalidPage(Exception): + pass + + +class PageNotAnInteger(InvalidPage): + pass + + +class EmptyPage(InvalidPage): + pass + + +class Paginator: + # Translators: String used to replace omitted page numbers in elided page + # range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. + ELLIPSIS = _("…") + + def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True): + self.object_list = object_list + self._check_object_list_is_ordered() + self.per_page = int(per_page) + self.orphans = int(orphans) + self.allow_empty_first_page = allow_empty_first_page + + def __iter__(self): + for page_number in self.page_range: + yield self.page(page_number) + + def validate_number(self, number): + """Validate the given 1-based page number.""" + try: + if isinstance(number, float) and not number.is_integer(): + raise ValueError + number = int(number) + except (TypeError, ValueError): + raise PageNotAnInteger(_("That page number is not an integer")) + if number < 1: + raise EmptyPage(_("That page number is less than 1")) + if number > self.num_pages: + if number == 1 and self.allow_empty_first_page: + pass + else: + raise EmptyPage(_("That page contains no results")) + return number + + def get_page(self, number): + """ + Return a valid page, even if the page argument isn't a number or isn't + in range. + """ + try: + number = self.validate_number(number) + except PageNotAnInteger: + number = 1 + except EmptyPage: + number = self.num_pages + return self.page(number) + + def page(self, number): + """Return a Page object for the given 1-based page number.""" + number = self.validate_number(number) + bottom = (number - 1) * self.per_page + top = bottom + self.per_page + if top + self.orphans >= self.count: + top = self.count + return self._get_page(self.object_list[bottom:top], number, self) + + def _get_page(self, *args, **kwargs): + """ + Return an instance of a single page. + + This hook can be used by subclasses to use an alternative to the + standard :cls:`Page` object. + """ + return Page(*args, **kwargs) + + @cached_property + def count(self): + """Return the total number of objects, across all pages.""" + c = getattr(self.object_list, "count", None) + if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c): + return c() + return len(self.object_list) + + @cached_property + def num_pages(self): + """Return the total number of pages.""" + if self.count == 0 and not self.allow_empty_first_page: + return 0 + hits = max(1, self.count - self.orphans) + return ceil(hits / self.per_page) + + @property + def page_range(self): + """ + Return a 1-based range of pages for iterating through within + a template for loop. + """ + return range(1, self.num_pages + 1) + + def _check_object_list_is_ordered(self): + """ + Warn if self.object_list is unordered (typically a QuerySet). + """ + ordered = getattr(self.object_list, "ordered", None) + if ordered is not None and not ordered: + obj_list_repr = ( + "{} {}".format( + self.object_list.model, self.object_list.__class__.__name__ + ) + if hasattr(self.object_list, "model") + else "{!r}".format(self.object_list) + ) + warnings.warn( + "Pagination may yield inconsistent results with an unordered " + "object_list: {}.".format(obj_list_repr), + UnorderedObjectListWarning, + stacklevel=3, + ) + + def get_elided_page_range(self, number=1, *, on_each_side=3, on_ends=2): + """ + Return a 1-based range of pages with some values elided. + + If the page range is larger than a given size, the whole range is not + provided and a compact form is returned instead, e.g. for a paginator + with 50 pages, if page 43 were the current page, the output, with the + default arguments, would be: + + 1, 2, …, 40, 41, 42, 43, 44, 45, 46, …, 49, 50. + """ + number = self.validate_number(number) + + if self.num_pages <= (on_each_side + on_ends) * 2: + yield from self.page_range + return + + if number > (1 + on_each_side + on_ends) + 1: + yield from range(1, on_ends + 1) + yield self.ELLIPSIS + yield from range(number - on_each_side, number + 1) + else: + yield from range(1, number + 1) + + if number < (self.num_pages - on_each_side - on_ends) - 1: + yield from range(number + 1, number + on_each_side + 1) + yield self.ELLIPSIS + yield from range(self.num_pages - on_ends + 1, self.num_pages + 1) + else: + yield from range(number + 1, self.num_pages + 1) + + +class Page(collections.abc.Sequence): + def __init__(self, object_list, number, paginator): + self.object_list = object_list + self.number = number + self.paginator = paginator + + def __repr__(self): + return "" % (self.number, self.paginator.num_pages) + + def __len__(self): + return len(self.object_list) + + def __getitem__(self, index): + if not isinstance(index, (int, slice)): + raise TypeError( + "Page indices must be integers or slices, not %s." + % type(index).__name__ + ) + # The object_list is converted to a list so that if it was a QuerySet + # it won't be a database hit per __getitem__. + if not isinstance(self.object_list, list): + self.object_list = list(self.object_list) + return self.object_list[index] + + def has_next(self): + return self.number < self.paginator.num_pages + + def has_previous(self): + return self.number > 1 + + def has_other_pages(self): + return self.has_previous() or self.has_next() + + def next_page_number(self): + return self.paginator.validate_number(self.number + 1) + + def previous_page_number(self): + return self.paginator.validate_number(self.number - 1) + + def start_index(self): + """ + Return the 1-based index of the first object on this page, + relative to total objects in the paginator. + """ + # Special case, return zero if no items. + if self.paginator.count == 0: + return 0 + return (self.paginator.per_page * (self.number - 1)) + 1 + + def end_index(self): + """ + Return the 1-based index of the last object on this page, + relative to total objects found (hits). + """ + # Special case for the last page because there can be orphans. + if self.number == self.paginator.num_pages: + return self.paginator.count + return self.number * self.paginator.per_page diff --git a/venv/Lib/site-packages/django/core/serializers/__init__.py b/venv/Lib/site-packages/django/core/serializers/__init__.py new file mode 100644 index 000000000..480c54b79 --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/__init__.py @@ -0,0 +1,254 @@ +""" +Interfaces for serializing Django objects. + +Usage:: + + from django.core import serializers + json = serializers.serialize("json", some_queryset) + objects = list(serializers.deserialize("json", json)) + +To add your own serializers, use the SERIALIZATION_MODULES setting:: + + SERIALIZATION_MODULES = { + "csv": "path.to.csv.serializer", + "txt": "path.to.txt.serializer", + } + +""" + +import importlib + +from django.apps import apps +from django.conf import settings +from django.core.serializers.base import SerializerDoesNotExist + +# Built-in serializers +BUILTIN_SERIALIZERS = { + "xml": "django.core.serializers.xml_serializer", + "python": "django.core.serializers.python", + "json": "django.core.serializers.json", + "yaml": "django.core.serializers.pyyaml", + "jsonl": "django.core.serializers.jsonl", +} + +_serializers = {} + + +class BadSerializer: + """ + Stub serializer to hold exception raised during registration + + This allows the serializer registration to cache serializers and if there + is an error raised in the process of creating a serializer it will be + raised and passed along to the caller when the serializer is used. + """ + + internal_use_only = False + + def __init__(self, exception): + self.exception = exception + + def __call__(self, *args, **kwargs): + raise self.exception + + +def register_serializer(format, serializer_module, serializers=None): + """Register a new serializer. + + ``serializer_module`` should be the fully qualified module name + for the serializer. + + If ``serializers`` is provided, the registration will be added + to the provided dictionary. + + If ``serializers`` is not provided, the registration will be made + directly into the global register of serializers. Adding serializers + directly is not a thread-safe operation. + """ + if serializers is None and not _serializers: + _load_serializers() + + try: + module = importlib.import_module(serializer_module) + except ImportError as exc: + bad_serializer = BadSerializer(exc) + + module = type( + "BadSerializerModule", + (), + { + "Deserializer": bad_serializer, + "Serializer": bad_serializer, + }, + ) + + if serializers is None: + _serializers[format] = module + else: + serializers[format] = module + + +def unregister_serializer(format): + "Unregister a given serializer. This is not a thread-safe operation." + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + del _serializers[format] + + +def get_serializer(format): + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + return _serializers[format].Serializer + + +def get_serializer_formats(): + if not _serializers: + _load_serializers() + return list(_serializers) + + +def get_public_serializer_formats(): + if not _serializers: + _load_serializers() + return [k for k, v in _serializers.items() if not v.Serializer.internal_use_only] + + +def get_deserializer(format): + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + return _serializers[format].Deserializer + + +def serialize(format, queryset, **options): + """ + Serialize a queryset (or any iterator that returns database objects) using + a certain serializer. + """ + s = get_serializer(format)() + s.serialize(queryset, **options) + return s.getvalue() + + +def deserialize(format, stream_or_string, **options): + """ + Deserialize a stream or a string. Return an iterator that yields ``(obj, + m2m_relation_dict)``, where ``obj`` is an instantiated -- but *unsaved* -- + object, and ``m2m_relation_dict`` is a dictionary of ``{m2m_field_name : + list_of_related_objects}``. + """ + d = get_deserializer(format) + return d(stream_or_string, **options) + + +def _load_serializers(): + """ + Register built-in and settings-defined serializers. This is done lazily so + that user code has a chance to (e.g.) set up custom settings without + needing to be careful of import order. + """ + global _serializers + serializers = {} + for format in BUILTIN_SERIALIZERS: + register_serializer(format, BUILTIN_SERIALIZERS[format], serializers) + if hasattr(settings, "SERIALIZATION_MODULES"): + for format in settings.SERIALIZATION_MODULES: + register_serializer( + format, settings.SERIALIZATION_MODULES[format], serializers + ) + _serializers = serializers + + +def sort_dependencies(app_list, allow_cycles=False): + """Sort a list of (app_config, models) pairs into a single list of models. + + The single list of models is sorted so that any model with a natural key + is serialized before a normal model, and any model with a natural key + dependency has it's dependencies serialized first. + + If allow_cycles is True, return the best-effort ordering that will respect + most of dependencies but ignore some of them to break the cycles. + """ + # Process the list of models, and get the list of dependencies + model_dependencies = [] + models = set() + for app_config, model_list in app_list: + if model_list is None: + model_list = app_config.get_models() + + for model in model_list: + models.add(model) + # Add any explicitly defined dependencies + if hasattr(model, "natural_key"): + deps = getattr(model.natural_key, "dependencies", []) + if deps: + deps = [apps.get_model(dep) for dep in deps] + else: + deps = [] + + # Now add a dependency for any FK relation with a model that + # defines a natural key + for field in model._meta.fields: + if field.remote_field: + rel_model = field.remote_field.model + if hasattr(rel_model, "natural_key") and rel_model != model: + deps.append(rel_model) + # Also add a dependency for any simple M2M relation with a model + # that defines a natural key. M2M relations with explicit through + # models don't count as dependencies. + for field in model._meta.many_to_many: + if field.remote_field.through._meta.auto_created: + rel_model = field.remote_field.model + if hasattr(rel_model, "natural_key") and rel_model != model: + deps.append(rel_model) + model_dependencies.append((model, deps)) + + model_dependencies.reverse() + # Now sort the models to ensure that dependencies are met. This + # is done by repeatedly iterating over the input list of models. + # If all the dependencies of a given model are in the final list, + # that model is promoted to the end of the final list. This process + # continues until the input list is empty, or we do a full iteration + # over the input models without promoting a model to the final list. + # If we do a full iteration without a promotion, that means there are + # circular dependencies in the list. + model_list = [] + while model_dependencies: + skipped = [] + changed = False + while model_dependencies: + model, deps = model_dependencies.pop() + + # If all of the models in the dependency list are either already + # on the final model list, or not on the original serialization list, + # then we've found another model with all it's dependencies satisfied. + if all(d not in models or d in model_list for d in deps): + model_list.append(model) + changed = True + else: + skipped.append((model, deps)) + if not changed: + if allow_cycles: + # If cycles are allowed, add the last skipped model and ignore + # its dependencies. This could be improved by some graph + # analysis to ignore as few dependencies as possible. + model, _ = skipped.pop() + model_list.append(model) + else: + raise RuntimeError( + "Can't resolve dependencies for %s in serialized app list." + % ", ".join( + model._meta.label + for model, deps in sorted( + skipped, key=lambda obj: obj[0].__name__ + ) + ), + ) + model_dependencies = skipped + + return model_list diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c1c27bbd3449c4daae30fa4a48886976376924d GIT binary patch literal 6978 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2631953e96047da05f8892100ced7027bcf75d2 GIT binary patch literal 11351 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 Mo^UQW#|zK?KWjXgJ^%m! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/json.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/json.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5f785aeae952b0448b892205fd054229d138750 GIT binary patch literal 3481 zcmZ`*-EZ8+5$7&Hj>o&xw`03;95yJDTq2)TqYteS1PLtJN!utv1-B@xmZi9RGS58n zvb!f)2dPLc7kTR+&?gD#Oa7$=`qU@?0e#VnI$$tT1R%9{4Xig$x{xqWIZ%4NIJCOr_J9qnD<`I z>V|iL52A+Qy}a3PMJ>bE^11$eG;er6U+6DJi^O_tu{sN0S}fp=6FUl6gEe1Tkq`YX zHV6H4-0m&G$TFkbR(pQ*PO!~ImgL!phb&P^sLHjjDEr~Bx4+&BUcvUQtv1ms8(fa% z5|x$3rVyoo{^qowV|zLqwwBpY81XohWh|A*iaqGAeFF<*k^}2!GENQ>!Bbpm_OZte zxd9Bfz;qUx4NOMCTsCvyST1v!2Y-*%m=FJ2b@<5t-s%!_bTH!gmSaT$9JVFUEu*&| zmc>37Dony}hg=*=uHew-yq!lWnb`yKsPYg#$$&8H$co|XkyCnxybZj4ir%x%D8UhI z(aRP&b(wue#Cy!aG3I_!$#~3DwMz}NeQYrcwpriO9+-+JeeHEKo-?VvtYExQZF){t zNAy9c1IY&on6?yB+i5O!lNWL*c$~;I%O16T?Z@d*2vE|sa)2I_+DXg7p>FhKS;Wu4 z=6j$!C;bxUPX5%k#oHhxd?4CA5U_KBTQCNw$WL%+S*k>+c(Q*3 z_xE5xB657PKt^|Gw)Y0%AK&B#%mA>lP9banh?>CDQ@}rNbj$;|3_p1>O% zCTKSxxWq-$=W(oqIPRBhm?Phe<8OyaJ|3yXF)PzJjux{5u1=BU@lf)(Eb_zZV%>!$ z#7~iYfCQI@8((cI<#|5Y7zP~iF%rCQCWfOCO(^g!hd9)ye#3YC+Dg-mUa=a24YB_W zRbB%5JJ{_AET?Ffo=^#w>eN27j>o+xRNR0b2YW`#$~^^mosnazYDct709*v2wFx=; z3y2(lfd4k&S^28orHA(k^bzX?_5_EY6YJO}*2q!y6YI!+0TJfd{+oS34y-mEt|+$dX~%H5tj|$9uHD^3#UXlwtacz%FzqpJ0`?sZpQqg9h_(|gR6B`FG0xZKjzAJIz=t*Y^Yj|V z1tRiO_~acR^t(Cg1EhUIf!=`tK_OQA#Q%<77|9fbt~{uYj|_p#W_pvwDYIYtkz=yB z3ov)YTOc<2YY@USlcGX7+%

      )zd_U&x-OuhEK}_%}I z4tV5lS};nXGQe8keIwyuKXa>*?a6#D%y++<@3PN>zOMm)vRc&C>Yq^dW9k472dXy_woAr zgZ1_7{Nmz5lW6o2T0BgX;sX^5J`hk97EnHcO-E(H@0n80G-c-%riu2lxDP+=qwP^l z*P#^bmZG01-RNhjC?z1bVA_X3DGxIB6k;yOY6qo74V8o6W8g9+r>A=t|*%i1-DP568l$!kI*EQfeZq*kYoL2{2!QEn&=Sa-r*Ww(a93>>4 z0pr|?YmnbwskA>w#V?WIofp3W65XjPst#6E9XYA%h3xDm(89|e-Tg6)jVO#x#(GZVP?Wiu+w&r?q`l1V)uN!JeW2@6NXcCy zY9e?_L?FXsC#s9O2%nOuCfF8fEsU;(TT-QQmX2go#3pWC{-wspIP6H^PK{hY~)EHBnlfd<&vLmq!KhZ|2b1e-vUAs zh>}E1(8v)ia)l#Y@YoZc@L}|;c%s@f(xqiIK@>bAE{Ww%Iy)=8S)Y1M4NlYvsO$kvKJ9*nkbQuK#*VOJM9-#d)e4y^4LeKcl-?8bx4 zD9rkEYF#a}?sKBf1N%bWzS;Q>4q11;9cUeQ){A7&1IxN|H#PSL+nqb9(&okkRqV>d zbPi;G(7B&(cXVpxjeeZ$#XC}WM2UyBq)>A06ft0P4c*Dw;MgKh^VIOEw`Vcy%h36> zL6^!ug#IiYt-eI3YQM7NjniYWyga=I5My#eCZx*oa|+N^?}AjVV25E=-36fRiZ-z_ z{M5@5*B4SDI6D+axO^v;en94TIGW8#$$))l7AdWQ;fuNHxBF?9|_4k*1I zXDD+qU3?jIG#a?X8Z@M%^K&82wBE=t!UdaNg3b^F5gjwU9a}`Lf~e(KPY?Q1+2sdA z^HY(}%-R6_KZrB9ig*S9x;p1c7HiG<>@3t(nEMD?nfoO+TA5jBpBiX|0C%3pJ;}KZ zIqwx>kRjdRe18yU)0rCQqDVN8&ZIeHCyz5e(2@iEh7}gxgMAccqTCe#S^1O5EIak7 zM9MW(L8O$01+!en9}t(iEMP$xIOqIw?v;cg3>Kj6;ey|w`vp=qhNK-c6(S@i_04bE02|WV6b@Ib!M{LYaya~~l_g6<}jBjcu!I(|x4((Ea5k(Mf5W(&N&>xch zRhO8$3A=1~lY)ejCxAt>F#L*=BZrcaYrvNU588@qX z)GQQIX};4ex>e!C_o1!chhR2a4I8F9&EZDmiL~DK&`2m=~n zja96zPhUx;+uJd4=;7N{@amTJHM;aREB*40l-sILaZ`M_)D`SzC90&#Iu+cikp2Ze TRb{bsN#Hi%2IIf%G(P+fS`8l2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/python.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/python.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02693c380087f427543579768132ea3de790fff4 GIT binary patch literal 5567 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 aP%ynkYLX#MR~(agcG!xh-*BEd-hTk9Vpfm< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98736e07b4fae6e6aa399a21c37088e5c6f296fd GIT binary patch literal 2832 zcma)8-ESK=5+}JUX(g={*>RFKG1^6NXis;E9JDWoAULFFJLyNx4eAy}7D5-RC1tO& z9|}n&ksu%1s<=KJu786A^u_VDzN9l;E7B#nqAQTg84kI_AAd8Wd~K~k z;Q9HBANv1l67nMotB(W1ZD{I0&~f4uPB}}cPtBY84Bl2^rM7R=a<1Z6KxZe_wC2~0 zu97%u-EWw26~;~9HRD>cmbUyBCDRtHaFR-T&TpHUI*ix-4N5*I*}6@{`N>C=;1BE? zFxU3m=?2a}AQ^o^?h@YQ?l*+HqCL0#O|f}$L9pRPu{pf-j8S4_I(!Y}*I&q&7ZR*q z<1JX-5-zN6@^ifX4e{%o9gxoY^oz!W_x^s*Q$ogJ5>JKfHX5IZN8?xu<=vk=2-C#- zNwB#q|7Dg-KAcj+&FmQ6-d=I=OR%sYVI6_1F<_!N5-ra z@8ux}k-@4LljXRaiO`ePhkbVld&8RE?Lrx$d1cyj^YwRdjZc;}|l;IH47Vgz7|Ob03o zlTa2GOq{a9Rw5Y`HV<`pN+j<4%V6hb?=!$o^*$LZ74~-XXq>`I)w>((_s9L-omeV; z{l3hHBGSFbB75As7x#NA*5djoj2?!ELiM;g%yyJZvAwtm*mH5cqe-#8^offoPQ&C1 zeEz?9&^Dc3eHo4JE9SokpBX)&&&Y4!lZGR}XT=v#jDSQ%1&)&{xd!eST*_`8#Ny)8 zm0SWL1P^!|={L~yJap5yf5Z9J75kk^;RHbzrXmQ6Mi2n~#tDwyAb2zmlX6CG;LaDY z!y8)Z&>aa$hg^oHs?a&ap{`|gudvaAd3@Agpj)yLn8ZC;^e0dl>26JJI4(_&FTgXK(c(3^bWB zO^0mG>Mi;5aUd>8Ifm~p^;fJ-`-Y@wBv z_lHHrs7`574}vHOl?s9-5#*a-cLSP1eyg@cH`w&jGNE)=w~Z(mE*=~sBs&}8Y2|sd-@$M58ko&{k1Sj@+ZMKizCQdpZe9aY*j02`3Q5K zDjIMrTnxf-q6-@n1B5!HG%)C6@T#H;X+VUj;mavC2Y-oP#k$CNun1w3OK+jq=zfb{ zrPHmI1HWSW%BhhI*c4){3FI#_XD93#T&8>-RDeFlQPI9X(MNf<+`Dk#CLf0haP3cE zAg^L)!odW=br5euQ|W*L7pSChwM||7+AVCx4^l*n+W#+fQ{^+p(UP1FOgRw z&U?^I0cKw|m_r-zvl*jr(KcnYMIGvV$(|d_&K23kotjaeBoH4ahH7WksbFz#PGY?F zx5^6F#R}J5ga=f(Za)MGJ@?=Ee#|9AX=dDWHaxec12(`xZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-310.pyc b/venv/Lib/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d4ea32b16acdf3a7bbaeea39dc0575e70ccf803 GIT binary patch literal 14822 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 done: + return + self.prev_done = done + cr = "" if self.total_count == 1 else "\r" + self.output.write( + cr + "[" + "." * done + " " * (self.progress_width - done) + "]" + ) + if done == self.progress_width: + self.output.write("\n") + self.output.flush() + + +class Serializer: + """ + Abstract serializer base class. + """ + + # Indicates if the implemented serializer is only available for + # internal Django use. + internal_use_only = False + progress_class = ProgressBar + stream_class = StringIO + + def serialize( + self, + queryset, + *, + stream=None, + fields=None, + use_natural_foreign_keys=False, + use_natural_primary_keys=False, + progress_output=None, + object_count=0, + **options, + ): + """ + Serialize a queryset. + """ + self.options = options + + self.stream = stream if stream is not None else self.stream_class() + self.selected_fields = fields + self.use_natural_foreign_keys = use_natural_foreign_keys + self.use_natural_primary_keys = use_natural_primary_keys + progress_bar = self.progress_class(progress_output, object_count) + + self.start_serialization() + self.first = True + for count, obj in enumerate(queryset, start=1): + self.start_object(obj) + # Use the concrete parent class' _meta instead of the object's _meta + # This is to avoid local_fields problems for proxy models. Refs #17717. + concrete_model = obj._meta.concrete_model + # When using natural primary keys, retrieve the pk field of the + # parent for multi-table inheritance child models. That field must + # be serialized, otherwise deserialization isn't possible. + if self.use_natural_primary_keys: + pk = concrete_model._meta.pk + pk_parent = ( + pk if pk.remote_field and pk.remote_field.parent_link else None + ) + else: + pk_parent = None + for field in concrete_model._meta.local_fields: + if field.serialize or field is pk_parent: + if field.remote_field is None: + if ( + self.selected_fields is None + or field.attname in self.selected_fields + ): + self.handle_field(obj, field) + else: + if ( + self.selected_fields is None + or field.attname[:-3] in self.selected_fields + ): + self.handle_fk_field(obj, field) + for field in concrete_model._meta.local_many_to_many: + if field.serialize: + if ( + self.selected_fields is None + or field.attname in self.selected_fields + ): + self.handle_m2m_field(obj, field) + self.end_object(obj) + progress_bar.update(count) + self.first = self.first and False + self.end_serialization() + return self.getvalue() + + def start_serialization(self): + """ + Called when serializing of the queryset starts. + """ + raise NotImplementedError( + "subclasses of Serializer must provide a start_serialization() method" + ) + + def end_serialization(self): + """ + Called when serializing of the queryset ends. + """ + pass + + def start_object(self, obj): + """ + Called when serializing of an object starts. + """ + raise NotImplementedError( + "subclasses of Serializer must provide a start_object() method" + ) + + def end_object(self, obj): + """ + Called when serializing of an object ends. + """ + pass + + def handle_field(self, obj, field): + """ + Called to handle each individual (non-relational) field on an object. + """ + raise NotImplementedError( + "subclasses of Serializer must provide a handle_field() method" + ) + + def handle_fk_field(self, obj, field): + """ + Called to handle a ForeignKey field. + """ + raise NotImplementedError( + "subclasses of Serializer must provide a handle_fk_field() method" + ) + + def handle_m2m_field(self, obj, field): + """ + Called to handle a ManyToManyField. + """ + raise NotImplementedError( + "subclasses of Serializer must provide a handle_m2m_field() method" + ) + + def getvalue(self): + """ + Return the fully serialized queryset (or None if the output stream is + not seekable). + """ + if callable(getattr(self.stream, "getvalue", None)): + return self.stream.getvalue() + + +class Deserializer: + """ + Abstract base deserializer class. + """ + + def __init__(self, stream_or_string, **options): + """ + Init this serializer given a stream or a string + """ + self.options = options + if isinstance(stream_or_string, str): + self.stream = StringIO(stream_or_string) + else: + self.stream = stream_or_string + + def __iter__(self): + return self + + def __next__(self): + """Iteration interface -- return the next item in the stream""" + raise NotImplementedError( + "subclasses of Deserializer must provide a __next__() method" + ) + + +class DeserializedObject: + """ + A deserialized model. + + Basically a container for holding the pre-saved deserialized data along + with the many-to-many data saved with the object. + + Call ``save()`` to save the object (with the many-to-many data) to the + database; call ``save(save_m2m=False)`` to save just the object fields + (and not touch the many-to-many stuff.) + """ + + def __init__(self, obj, m2m_data=None, deferred_fields=None): + self.object = obj + self.m2m_data = m2m_data + self.deferred_fields = deferred_fields + + def __repr__(self): + return "<%s: %s(pk=%s)>" % ( + self.__class__.__name__, + self.object._meta.label, + self.object.pk, + ) + + def save(self, save_m2m=True, using=None, **kwargs): + # Call save on the Model baseclass directly. This bypasses any + # model-defined save. The save is also forced to be raw. + # raw=True is passed to any pre/post_save signals. + models.Model.save_base(self.object, using=using, raw=True, **kwargs) + if self.m2m_data and save_m2m: + for accessor_name, object_list in self.m2m_data.items(): + getattr(self.object, accessor_name).set(object_list) + + # prevent a second (possibly accidental) call to save() from saving + # the m2m data twice. + self.m2m_data = None + + def save_deferred_fields(self, using=None): + self.m2m_data = {} + for field, field_value in self.deferred_fields.items(): + opts = self.object._meta + label = opts.app_label + "." + opts.model_name + if isinstance(field.remote_field, models.ManyToManyRel): + try: + values = deserialize_m2m_values( + field, field_value, using, handle_forward_references=False + ) + except M2MDeserializationError as e: + raise DeserializationError.WithData( + e.original_exc, label, self.object.pk, e.pk + ) + self.m2m_data[field.name] = values + elif isinstance(field.remote_field, models.ManyToOneRel): + try: + value = deserialize_fk_value( + field, field_value, using, handle_forward_references=False + ) + except Exception as e: + raise DeserializationError.WithData( + e, label, self.object.pk, field_value + ) + setattr(self.object, field.attname, value) + self.save() + + +def build_instance(Model, data, db): + """ + Build a model instance. + + If the model instance doesn't have a primary key and the model supports + natural keys, try to retrieve it from the database. + """ + default_manager = Model._meta.default_manager + pk = data.get(Model._meta.pk.attname) + if ( + pk is None + and hasattr(default_manager, "get_by_natural_key") + and hasattr(Model, "natural_key") + ): + natural_key = Model(**data).natural_key() + try: + data[Model._meta.pk.attname] = Model._meta.pk.to_python( + default_manager.db_manager(db).get_by_natural_key(*natural_key).pk + ) + except Model.DoesNotExist: + pass + return Model(**data) + + +def deserialize_m2m_values(field, field_value, using, handle_forward_references): + model = field.remote_field.model + if hasattr(model._default_manager, "get_by_natural_key"): + + def m2m_convert(value): + if hasattr(value, "__iter__") and not isinstance(value, str): + return ( + model._default_manager.db_manager(using) + .get_by_natural_key(*value) + .pk + ) + else: + return model._meta.pk.to_python(value) + + else: + + def m2m_convert(v): + return model._meta.pk.to_python(v) + + try: + pks_iter = iter(field_value) + except TypeError as e: + raise M2MDeserializationError(e, field_value) + try: + values = [] + for pk in pks_iter: + values.append(m2m_convert(pk)) + return values + except Exception as e: + if isinstance(e, ObjectDoesNotExist) and handle_forward_references: + return DEFER_FIELD + else: + raise M2MDeserializationError(e, pk) + + +def deserialize_fk_value(field, field_value, using, handle_forward_references): + if field_value is None: + return None + model = field.remote_field.model + default_manager = model._default_manager + field_name = field.remote_field.field_name + if ( + hasattr(default_manager, "get_by_natural_key") + and hasattr(field_value, "__iter__") + and not isinstance(field_value, str) + ): + try: + obj = default_manager.db_manager(using).get_by_natural_key(*field_value) + except ObjectDoesNotExist: + if handle_forward_references: + return DEFER_FIELD + else: + raise + value = getattr(obj, field_name) + # If this is a natural foreign key to an object that has a FK/O2O as + # the foreign key, use the FK value. + if model._meta.pk.remote_field: + value = value.pk + return value + return model._meta.get_field(field_name).to_python(field_value) diff --git a/venv/Lib/site-packages/django/core/serializers/json.py b/venv/Lib/site-packages/django/core/serializers/json.py new file mode 100644 index 000000000..59d731840 --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/json.py @@ -0,0 +1,106 @@ +""" +Serialize data to/from JSON +""" + +import datetime +import decimal +import json +import uuid + +from django.core.serializers.base import DeserializationError +from django.core.serializers.python import Deserializer as PythonDeserializer +from django.core.serializers.python import Serializer as PythonSerializer +from django.utils.duration import duration_iso_string +from django.utils.functional import Promise +from django.utils.timezone import is_aware + + +class Serializer(PythonSerializer): + """Convert a queryset to JSON.""" + + internal_use_only = False + + def _init_options(self): + self._current = None + self.json_kwargs = self.options.copy() + self.json_kwargs.pop("stream", None) + self.json_kwargs.pop("fields", None) + if self.options.get("indent"): + # Prevent trailing spaces + self.json_kwargs["separators"] = (",", ": ") + self.json_kwargs.setdefault("cls", DjangoJSONEncoder) + self.json_kwargs.setdefault("ensure_ascii", False) + + def start_serialization(self): + self._init_options() + self.stream.write("[") + + def end_serialization(self): + if self.options.get("indent"): + self.stream.write("\n") + self.stream.write("]") + if self.options.get("indent"): + self.stream.write("\n") + + def end_object(self, obj): + # self._current has the field data + indent = self.options.get("indent") + if not self.first: + self.stream.write(",") + if not indent: + self.stream.write(" ") + if indent: + self.stream.write("\n") + json.dump(self.get_dump_object(obj), self.stream, **self.json_kwargs) + self._current = None + + def getvalue(self): + # Grandparent super + return super(PythonSerializer, self).getvalue() + + +def Deserializer(stream_or_string, **options): + """Deserialize a stream or string of JSON data.""" + if not isinstance(stream_or_string, (bytes, str)): + stream_or_string = stream_or_string.read() + if isinstance(stream_or_string, bytes): + stream_or_string = stream_or_string.decode() + try: + objects = json.loads(stream_or_string) + yield from PythonDeserializer(objects, **options) + except (GeneratorExit, DeserializationError): + raise + except Exception as exc: + raise DeserializationError() from exc + + +class DjangoJSONEncoder(json.JSONEncoder): + """ + JSONEncoder subclass that knows how to encode date/time, decimal types, and + UUIDs. + """ + + def default(self, o): + # See "Date Time String Format" in the ECMA-262 specification. + if isinstance(o, datetime.datetime): + r = o.isoformat() + if o.microsecond: + r = r[:23] + r[26:] + if r.endswith("+00:00"): + r = r[:-6] + "Z" + return r + elif isinstance(o, datetime.date): + return o.isoformat() + elif isinstance(o, datetime.time): + if is_aware(o): + raise ValueError("JSON can't represent timezone-aware times.") + r = o.isoformat() + if o.microsecond: + r = r[:12] + return r + elif isinstance(o, datetime.timedelta): + return duration_iso_string(o) + elif isinstance(o, (decimal.Decimal, uuid.UUID, Promise)): + return str(o) + else: + return super().default(o) diff --git a/venv/Lib/site-packages/django/core/serializers/jsonl.py b/venv/Lib/site-packages/django/core/serializers/jsonl.py new file mode 100644 index 000000000..c264c2cca --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/jsonl.py @@ -0,0 +1,57 @@ +""" +Serialize data to/from JSON Lines +""" + +import json + +from django.core.serializers.base import DeserializationError +from django.core.serializers.json import DjangoJSONEncoder +from django.core.serializers.python import Deserializer as PythonDeserializer +from django.core.serializers.python import Serializer as PythonSerializer + + +class Serializer(PythonSerializer): + """Convert a queryset to JSON Lines.""" + + internal_use_only = False + + def _init_options(self): + self._current = None + self.json_kwargs = self.options.copy() + self.json_kwargs.pop("stream", None) + self.json_kwargs.pop("fields", None) + self.json_kwargs.pop("indent", None) + self.json_kwargs["separators"] = (",", ": ") + self.json_kwargs.setdefault("cls", DjangoJSONEncoder) + self.json_kwargs.setdefault("ensure_ascii", False) + + def start_serialization(self): + self._init_options() + + def end_object(self, obj): + # self._current has the field data + json.dump(self.get_dump_object(obj), self.stream, **self.json_kwargs) + self.stream.write("\n") + self._current = None + + def getvalue(self): + # Grandparent super + return super(PythonSerializer, self).getvalue() + + +def Deserializer(stream_or_string, **options): + """Deserialize a stream or string of JSON data.""" + if isinstance(stream_or_string, bytes): + stream_or_string = stream_or_string.decode() + if isinstance(stream_or_string, (bytes, str)): + stream_or_string = stream_or_string.split("\n") + + for line in stream_or_string: + if not line.strip(): + continue + try: + yield from PythonDeserializer([json.loads(line)], **options) + except (GeneratorExit, DeserializationError): + raise + except Exception as exc: + raise DeserializationError() from exc diff --git a/venv/Lib/site-packages/django/core/serializers/python.py b/venv/Lib/site-packages/django/core/serializers/python.py new file mode 100644 index 000000000..a3918bf9d --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/python.py @@ -0,0 +1,185 @@ +""" +A Python "serializer". Doesn't do much serializing per se -- just converts to +and from basic Python data types (lists, dicts, strings, etc.). Useful as a basis for +other serializers. +""" + +from django.apps import apps +from django.core.serializers import base +from django.db import DEFAULT_DB_ALIAS, models +from django.utils.encoding import is_protected_type + + +class Serializer(base.Serializer): + """ + Serialize a QuerySet to basic Python objects. + """ + + internal_use_only = True + + def start_serialization(self): + self._current = None + self.objects = [] + + def end_serialization(self): + pass + + def start_object(self, obj): + self._current = {} + + def end_object(self, obj): + self.objects.append(self.get_dump_object(obj)) + self._current = None + + def get_dump_object(self, obj): + data = {"model": str(obj._meta)} + if not self.use_natural_primary_keys or not hasattr(obj, "natural_key"): + data["pk"] = self._value_from_field(obj, obj._meta.pk) + data["fields"] = self._current + return data + + def _value_from_field(self, obj, field): + value = field.value_from_object(obj) + # Protected types (i.e., primitives like None, numbers, dates, + # and Decimals) are passed through as is. All other values are + # converted to string first. + return value if is_protected_type(value) else field.value_to_string(obj) + + def handle_field(self, obj, field): + self._current[field.name] = self._value_from_field(obj, field) + + def handle_fk_field(self, obj, field): + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): + related = getattr(obj, field.name) + if related: + value = related.natural_key() + else: + value = None + else: + value = self._value_from_field(obj, field) + self._current[field.name] = value + + def handle_m2m_field(self, obj, field): + if field.remote_field.through._meta.auto_created: + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): + + def m2m_value(value): + return value.natural_key() + + else: + + def m2m_value(value): + return self._value_from_field(value, value._meta.pk) + + m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get( + field.name, + getattr(obj, field.name).iterator(), + ) + self._current[field.name] = [m2m_value(related) for related in m2m_iter] + + def getvalue(self): + return self.objects + + +def Deserializer( + object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False, **options +): + """ + Deserialize simple Python objects back into Django ORM instances. + + It's expected that you pass the Python objects themselves (instead of a + stream or a string) to the constructor + """ + handle_forward_references = options.pop("handle_forward_references", False) + field_names_cache = {} # Model: + + for d in object_list: + # Look up the model and starting build a dict of data for it. + try: + Model = _get_model(d["model"]) + except base.DeserializationError: + if ignorenonexistent: + continue + else: + raise + data = {} + if "pk" in d: + try: + data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get("pk")) + except Exception as e: + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), None + ) + m2m_data = {} + deferred_fields = {} + + if Model not in field_names_cache: + field_names_cache[Model] = {f.name for f in Model._meta.get_fields()} + field_names = field_names_cache[Model] + + # Handle each field + for (field_name, field_value) in d["fields"].items(): + + if ignorenonexistent and field_name not in field_names: + # skip fields no longer on model + continue + + field = Model._meta.get_field(field_name) + + # Handle M2M relations + if field.remote_field and isinstance( + field.remote_field, models.ManyToManyRel + ): + try: + values = base.deserialize_m2m_values( + field, field_value, using, handle_forward_references + ) + except base.M2MDeserializationError as e: + raise base.DeserializationError.WithData( + e.original_exc, d["model"], d.get("pk"), e.pk + ) + if values == base.DEFER_FIELD: + deferred_fields[field] = field_value + else: + m2m_data[field.name] = values + # Handle FK fields + elif field.remote_field and isinstance( + field.remote_field, models.ManyToOneRel + ): + try: + value = base.deserialize_fk_value( + field, field_value, using, handle_forward_references + ) + except Exception as e: + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), field_value + ) + if value == base.DEFER_FIELD: + deferred_fields[field] = field_value + else: + data[field.attname] = value + # Handle all other fields + else: + try: + data[field.name] = field.to_python(field_value) + except Exception as e: + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), field_value + ) + + obj = base.build_instance(Model, data, using) + yield base.DeserializedObject(obj, m2m_data, deferred_fields) + + +def _get_model(model_identifier): + """Look up a model from an "app_label.model_name" string.""" + try: + return apps.get_model(model_identifier) + except (LookupError, TypeError): + raise base.DeserializationError( + "Invalid model identifier: '%s'" % model_identifier + ) diff --git a/venv/Lib/site-packages/django/core/serializers/pyyaml.py b/venv/Lib/site-packages/django/core/serializers/pyyaml.py new file mode 100644 index 000000000..9a20b6658 --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/pyyaml.py @@ -0,0 +1,82 @@ +""" +YAML serializer. + +Requires PyYaml (https://pyyaml.org/), but that's checked for in __init__. +""" + +import collections +import decimal +from io import StringIO + +import yaml + +from django.core.serializers.base import DeserializationError +from django.core.serializers.python import Deserializer as PythonDeserializer +from django.core.serializers.python import Serializer as PythonSerializer +from django.db import models + +# Use the C (faster) implementation if possible +try: + from yaml import CSafeDumper as SafeDumper + from yaml import CSafeLoader as SafeLoader +except ImportError: + from yaml import SafeDumper, SafeLoader + + +class DjangoSafeDumper(SafeDumper): + def represent_decimal(self, data): + return self.represent_scalar("tag:yaml.org,2002:str", str(data)) + + def represent_ordered_dict(self, data): + return self.represent_mapping("tag:yaml.org,2002:map", data.items()) + + +DjangoSafeDumper.add_representer(decimal.Decimal, DjangoSafeDumper.represent_decimal) +DjangoSafeDumper.add_representer( + collections.OrderedDict, DjangoSafeDumper.represent_ordered_dict +) +# Workaround to represent dictionaries in insertion order. +# See https://github.com/yaml/pyyaml/pull/143. +DjangoSafeDumper.add_representer(dict, DjangoSafeDumper.represent_ordered_dict) + + +class Serializer(PythonSerializer): + """Convert a queryset to YAML.""" + + internal_use_only = False + + def handle_field(self, obj, field): + # A nasty special case: base YAML doesn't support serialization of time + # types (as opposed to dates or datetimes, which it does support). Since + # we want to use the "safe" serializer for better interoperability, we + # need to do something with those pesky times. Converting 'em to strings + # isn't perfect, but it's better than a "!!python/time" type which would + # halt deserialization under any other language. + if isinstance(field, models.TimeField) and getattr(obj, field.name) is not None: + self._current[field.name] = str(getattr(obj, field.name)) + else: + super().handle_field(obj, field) + + def end_serialization(self): + self.options.setdefault("allow_unicode", True) + yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options) + + def getvalue(self): + # Grandparent super + return super(PythonSerializer, self).getvalue() + + +def Deserializer(stream_or_string, **options): + """Deserialize a stream or string of YAML data.""" + if isinstance(stream_or_string, bytes): + stream_or_string = stream_or_string.decode() + if isinstance(stream_or_string, str): + stream = StringIO(stream_or_string) + else: + stream = stream_or_string + try: + yield from PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options) + except (GeneratorExit, DeserializationError): + raise + except Exception as exc: + raise DeserializationError() from exc diff --git a/venv/Lib/site-packages/django/core/serializers/xml_serializer.py b/venv/Lib/site-packages/django/core/serializers/xml_serializer.py new file mode 100644 index 000000000..8d3918cfa --- /dev/null +++ b/venv/Lib/site-packages/django/core/serializers/xml_serializer.py @@ -0,0 +1,488 @@ +""" +XML serializer. +""" +import json +from xml.dom import pulldom +from xml.sax import handler +from xml.sax.expatreader import ExpatParser as _ExpatParser + +from django.apps import apps +from django.conf import settings +from django.core.exceptions import ObjectDoesNotExist +from django.core.serializers import base +from django.db import DEFAULT_DB_ALIAS, models +from django.utils.xmlutils import SimplerXMLGenerator, UnserializableContentError + + +class Serializer(base.Serializer): + """Serialize a QuerySet to XML.""" + + def indent(self, level): + if self.options.get("indent") is not None: + self.xml.ignorableWhitespace( + "\n" + " " * self.options.get("indent") * level + ) + + def start_serialization(self): + """ + Start serialization -- open the XML document and the root element. + """ + self.xml = SimplerXMLGenerator( + self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET) + ) + self.xml.startDocument() + self.xml.startElement("django-objects", {"version": "1.0"}) + + def end_serialization(self): + """ + End serialization -- end the document. + """ + self.indent(0) + self.xml.endElement("django-objects") + self.xml.endDocument() + + def start_object(self, obj): + """ + Called as each object is handled. + """ + if not hasattr(obj, "_meta"): + raise base.SerializationError( + "Non-model object (%s) encountered during serialization" % type(obj) + ) + + self.indent(1) + attrs = {"model": str(obj._meta)} + if not self.use_natural_primary_keys or not hasattr(obj, "natural_key"): + obj_pk = obj.pk + if obj_pk is not None: + attrs["pk"] = str(obj_pk) + + self.xml.startElement("object", attrs) + + def end_object(self, obj): + """ + Called after handling all fields for an object. + """ + self.indent(1) + self.xml.endElement("object") + + def handle_field(self, obj, field): + """ + Handle each field on an object (except for ForeignKeys and + ManyToManyFields). + """ + self.indent(2) + self.xml.startElement( + "field", + { + "name": field.name, + "type": field.get_internal_type(), + }, + ) + + # Get a "string version" of the object's data. + if getattr(obj, field.name) is not None: + value = field.value_to_string(obj) + if field.get_internal_type() == "JSONField": + # Dump value since JSONField.value_to_string() doesn't output + # strings. + value = json.dumps(value, cls=field.encoder) + try: + self.xml.characters(value) + except UnserializableContentError: + raise ValueError( + "%s.%s (pk:%s) contains unserializable characters" + % (obj.__class__.__name__, field.name, obj.pk) + ) + else: + self.xml.addQuickElement("None") + + self.xml.endElement("field") + + def handle_fk_field(self, obj, field): + """ + Handle a ForeignKey (they need to be treated slightly + differently from regular fields). + """ + self._start_relational_field(field) + related_att = getattr(obj, field.get_attname()) + if related_att is not None: + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): + related = getattr(obj, field.name) + # If related object has a natural key, use it + related = related.natural_key() + # Iterable natural keys are rolled out as subelements + for key_value in related: + self.xml.startElement("natural", {}) + self.xml.characters(str(key_value)) + self.xml.endElement("natural") + else: + self.xml.characters(str(related_att)) + else: + self.xml.addQuickElement("None") + self.xml.endElement("field") + + def handle_m2m_field(self, obj, field): + """ + Handle a ManyToManyField. Related objects are only serialized as + references to the object's PK (i.e. the related *data* is not dumped, + just the relation). + """ + if field.remote_field.through._meta.auto_created: + self._start_relational_field(field) + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): + # If the objects in the m2m have a natural key, use it + def handle_m2m(value): + natural = value.natural_key() + # Iterable natural keys are rolled out as subelements + self.xml.startElement("object", {}) + for key_value in natural: + self.xml.startElement("natural", {}) + self.xml.characters(str(key_value)) + self.xml.endElement("natural") + self.xml.endElement("object") + + else: + + def handle_m2m(value): + self.xml.addQuickElement("object", attrs={"pk": str(value.pk)}) + + m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get( + field.name, + getattr(obj, field.name).iterator(), + ) + for relobj in m2m_iter: + handle_m2m(relobj) + + self.xml.endElement("field") + + def _start_relational_field(self, field): + """Output the element for relational fields.""" + self.indent(2) + self.xml.startElement( + "field", + { + "name": field.name, + "rel": field.remote_field.__class__.__name__, + "to": str(field.remote_field.model._meta), + }, + ) + + +class Deserializer(base.Deserializer): + """Deserialize XML.""" + + def __init__( + self, + stream_or_string, + *, + using=DEFAULT_DB_ALIAS, + ignorenonexistent=False, + **options, + ): + super().__init__(stream_or_string, **options) + self.handle_forward_references = options.pop("handle_forward_references", False) + self.event_stream = pulldom.parse(self.stream, self._make_parser()) + self.db = using + self.ignore = ignorenonexistent + + def _make_parser(self): + """Create a hardened XML parser (no custom/external entities).""" + return DefusedExpatParser() + + def __next__(self): + for event, node in self.event_stream: + if event == "START_ELEMENT" and node.nodeName == "object": + self.event_stream.expandNode(node) + return self._handle_object(node) + raise StopIteration + + def _handle_object(self, node): + """Convert an node to a DeserializedObject.""" + # Look up the model using the model loading mechanism. If this fails, + # bail. + Model = self._get_model_from_node(node, "model") + + # Start building a data dictionary from the object. + data = {} + if node.hasAttribute("pk"): + data[Model._meta.pk.attname] = Model._meta.pk.to_python( + node.getAttribute("pk") + ) + + # Also start building a dict of m2m data (this is saved as + # {m2m_accessor_attribute : [list_of_related_objects]}) + m2m_data = {} + deferred_fields = {} + + field_names = {f.name for f in Model._meta.get_fields()} + # Deserialize each field. + for field_node in node.getElementsByTagName("field"): + # If the field is missing the name attribute, bail (are you + # sensing a pattern here?) + field_name = field_node.getAttribute("name") + if not field_name: + raise base.DeserializationError( + " node is missing the 'name' attribute" + ) + + # Get the field from the Model. This will raise a + # FieldDoesNotExist if, well, the field doesn't exist, which will + # be propagated correctly unless ignorenonexistent=True is used. + if self.ignore and field_name not in field_names: + continue + field = Model._meta.get_field(field_name) + + # As is usually the case, relation fields get the special treatment. + if field.remote_field and isinstance( + field.remote_field, models.ManyToManyRel + ): + value = self._handle_m2m_field_node(field_node, field) + if value == base.DEFER_FIELD: + deferred_fields[field] = [ + [ + getInnerText(nat_node).strip() + for nat_node in obj_node.getElementsByTagName("natural") + ] + for obj_node in field_node.getElementsByTagName("object") + ] + else: + m2m_data[field.name] = value + elif field.remote_field and isinstance( + field.remote_field, models.ManyToOneRel + ): + value = self._handle_fk_field_node(field_node, field) + if value == base.DEFER_FIELD: + deferred_fields[field] = [ + getInnerText(k).strip() + for k in field_node.getElementsByTagName("natural") + ] + else: + data[field.attname] = value + else: + if field_node.getElementsByTagName("None"): + value = None + else: + value = field.to_python(getInnerText(field_node).strip()) + # Load value since JSONField.to_python() outputs strings. + if field.get_internal_type() == "JSONField": + value = json.loads(value, cls=field.decoder) + data[field.name] = value + + obj = base.build_instance(Model, data, self.db) + + # Return a DeserializedObject so that the m2m data has a place to live. + return base.DeserializedObject(obj, m2m_data, deferred_fields) + + def _handle_fk_field_node(self, node, field): + """ + Handle a node for a ForeignKey + """ + # Check if there is a child node named 'None', returning None if so. + if node.getElementsByTagName("None"): + return None + else: + model = field.remote_field.model + if hasattr(model._default_manager, "get_by_natural_key"): + keys = node.getElementsByTagName("natural") + if keys: + # If there are 'natural' subelements, it must be a natural key + field_value = [getInnerText(k).strip() for k in keys] + try: + obj = model._default_manager.db_manager( + self.db + ).get_by_natural_key(*field_value) + except ObjectDoesNotExist: + if self.handle_forward_references: + return base.DEFER_FIELD + else: + raise + obj_pk = getattr(obj, field.remote_field.field_name) + # If this is a natural foreign key to an object that + # has a FK/O2O as the foreign key, use the FK value + if field.remote_field.model._meta.pk.remote_field: + obj_pk = obj_pk.pk + else: + # Otherwise, treat like a normal PK + field_value = getInnerText(node).strip() + obj_pk = model._meta.get_field( + field.remote_field.field_name + ).to_python(field_value) + return obj_pk + else: + field_value = getInnerText(node).strip() + return model._meta.get_field(field.remote_field.field_name).to_python( + field_value + ) + + def _handle_m2m_field_node(self, node, field): + """ + Handle a node for a ManyToManyField. + """ + model = field.remote_field.model + default_manager = model._default_manager + if hasattr(default_manager, "get_by_natural_key"): + + def m2m_convert(n): + keys = n.getElementsByTagName("natural") + if keys: + # If there are 'natural' subelements, it must be a natural key + field_value = [getInnerText(k).strip() for k in keys] + obj_pk = ( + default_manager.db_manager(self.db) + .get_by_natural_key(*field_value) + .pk + ) + else: + # Otherwise, treat like a normal PK value. + obj_pk = model._meta.pk.to_python(n.getAttribute("pk")) + return obj_pk + + else: + + def m2m_convert(n): + return model._meta.pk.to_python(n.getAttribute("pk")) + + values = [] + try: + for c in node.getElementsByTagName("object"): + values.append(m2m_convert(c)) + except Exception as e: + if isinstance(e, ObjectDoesNotExist) and self.handle_forward_references: + return base.DEFER_FIELD + else: + raise base.M2MDeserializationError(e, c) + else: + return values + + def _get_model_from_node(self, node, attr): + """ + Look up a model from a or a + node. + """ + model_identifier = node.getAttribute(attr) + if not model_identifier: + raise base.DeserializationError( + "<%s> node is missing the required '%s' attribute" + % (node.nodeName, attr) + ) + try: + return apps.get_model(model_identifier) + except (LookupError, TypeError): + raise base.DeserializationError( + "<%s> node has invalid model identifier: '%s'" + % (node.nodeName, model_identifier) + ) + + +def getInnerText(node): + """Get all the inner text of a DOM node (recursively).""" + # inspired by https://mail.python.org/pipermail/xml-sig/2005-March/011022.html + inner_text = [] + for child in node.childNodes: + if ( + child.nodeType == child.TEXT_NODE + or child.nodeType == child.CDATA_SECTION_NODE + ): + inner_text.append(child.data) + elif child.nodeType == child.ELEMENT_NODE: + inner_text.extend(getInnerText(child)) + else: + pass + return "".join(inner_text) + + +# Below code based on Christian Heimes' defusedxml + + +class DefusedExpatParser(_ExpatParser): + """ + An expat parser hardened against XML bomb attacks. + + Forbid DTDs, external entity references + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.setFeature(handler.feature_external_ges, False) + self.setFeature(handler.feature_external_pes, False) + + def start_doctype_decl(self, name, sysid, pubid, has_internal_subset): + raise DTDForbidden(name, sysid, pubid) + + def entity_decl( + self, name, is_parameter_entity, value, base, sysid, pubid, notation_name + ): + raise EntitiesForbidden(name, value, base, sysid, pubid, notation_name) + + def unparsed_entity_decl(self, name, base, sysid, pubid, notation_name): + # expat 1.2 + raise EntitiesForbidden(name, None, base, sysid, pubid, notation_name) + + def external_entity_ref_handler(self, context, base, sysid, pubid): + raise ExternalReferenceForbidden(context, base, sysid, pubid) + + def reset(self): + _ExpatParser.reset(self) + parser = self._parser + parser.StartDoctypeDeclHandler = self.start_doctype_decl + parser.EntityDeclHandler = self.entity_decl + parser.UnparsedEntityDeclHandler = self.unparsed_entity_decl + parser.ExternalEntityRefHandler = self.external_entity_ref_handler + + +class DefusedXmlException(ValueError): + """Base exception.""" + + def __repr__(self): + return str(self) + + +class DTDForbidden(DefusedXmlException): + """Document type definition is forbidden.""" + + def __init__(self, name, sysid, pubid): + super().__init__() + self.name = name + self.sysid = sysid + self.pubid = pubid + + def __str__(self): + tpl = "DTDForbidden(name='{}', system_id={!r}, public_id={!r})" + return tpl.format(self.name, self.sysid, self.pubid) + + +class EntitiesForbidden(DefusedXmlException): + """Entity definition is forbidden.""" + + def __init__(self, name, value, base, sysid, pubid, notation_name): + super().__init__() + self.name = name + self.value = value + self.base = base + self.sysid = sysid + self.pubid = pubid + self.notation_name = notation_name + + def __str__(self): + tpl = "EntitiesForbidden(name='{}', system_id={!r}, public_id={!r})" + return tpl.format(self.name, self.sysid, self.pubid) + + +class ExternalReferenceForbidden(DefusedXmlException): + """Resolving an external reference is forbidden.""" + + def __init__(self, context, base, sysid, pubid): + super().__init__() + self.context = context + self.base = base + self.sysid = sysid + self.pubid = pubid + + def __str__(self): + tpl = "ExternalReferenceForbidden(system_id='{}', public_id={})" + return tpl.format(self.sysid, self.pubid) diff --git a/venv/Lib/site-packages/django/core/servers/__init__.py b/venv/Lib/site-packages/django/core/servers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/core/servers/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/core/servers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80029c38852690ac5a2d15aa929b775e34af7d48 GIT binary patch literal 193 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 500: + level = logger.error + elif status_code >= 400: + level = logger.warning + else: + level = logger.info + else: + level = logger.info + + level(format, *args, extra=extra) + + def get_environ(self): + # Strip all headers with underscores in the name before constructing + # the WSGI environ. This prevents header-spoofing based on ambiguity + # between underscores and dashes both normalized to underscores in WSGI + # env vars. Nginx and Apache 2.4+ both do this as well. + for k in self.headers: + if "_" in k: + del self.headers[k] + + return super().get_environ() + + def handle(self): + self.close_connection = True + self.handle_one_request() + while not self.close_connection: + self.handle_one_request() + try: + self.connection.shutdown(socket.SHUT_WR) + except (AttributeError, OSError): + pass + + def handle_one_request(self): + """Copy of WSGIRequestHandler.handle() but with different ServerHandler""" + self.raw_requestline = self.rfile.readline(65537) + if len(self.raw_requestline) > 65536: + self.requestline = "" + self.request_version = "" + self.command = "" + self.send_error(414) + return + + if not self.parse_request(): # An error code has been sent, just exit + return + + handler = ServerHandler( + self.rfile, self.wfile, self.get_stderr(), self.get_environ() + ) + handler.request_handler = self # backpointer for logging & connection closing + handler.run(self.server.get_app()) + + +def run(addr, port, wsgi_handler, ipv6=False, threading=False, server_cls=WSGIServer): + server_address = (addr, port) + if threading: + httpd_cls = type("WSGIServer", (socketserver.ThreadingMixIn, server_cls), {}) + else: + httpd_cls = server_cls + httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6) + if threading: + # ThreadingMixIn.daemon_threads indicates how threads will behave on an + # abrupt shutdown; like quitting the server by the user or restarting + # by the auto-reloader. True means the server will not wait for thread + # termination before it quits. This will make auto-reloader faster + # and will prevent the need to kill the server manually if a thread + # isn't terminating correctly. + httpd.daemon_threads = True + httpd.set_app(wsgi_handler) + httpd.serve_forever() diff --git a/venv/Lib/site-packages/django/core/signals.py b/venv/Lib/site-packages/django/core/signals.py new file mode 100644 index 000000000..960f5c355 --- /dev/null +++ b/venv/Lib/site-packages/django/core/signals.py @@ -0,0 +1,6 @@ +from django.dispatch import Signal + +request_started = Signal() +request_finished = Signal() +got_request_exception = Signal() +setting_changed = Signal() diff --git a/venv/Lib/site-packages/django/core/signing.py b/venv/Lib/site-packages/django/core/signing.py new file mode 100644 index 000000000..633d6cc70 --- /dev/null +++ b/venv/Lib/site-packages/django/core/signing.py @@ -0,0 +1,253 @@ +""" +Functions for creating and restoring url-safe signed JSON objects. + +The format used looks like this: + +>>> signing.dumps("hello") +'ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk' + +There are two components here, separated by a ':'. The first component is a +URLsafe base64 encoded JSON of the object passed to dumps(). The second +component is a base64 encoded hmac/SHA1 hash of "$first_component:$secret" + +signing.loads(s) checks the signature and returns the deserialized object. +If the signature fails, a BadSignature exception is raised. + +>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk") +'hello' +>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk-modified") +... +BadSignature: Signature failed: ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk-modified + +You can optionally compress the JSON prior to base64 encoding it to save +space, using the compress=True argument. This checks if compression actually +helps and only applies compression if the result is a shorter string: + +>>> signing.dumps(list(range(1, 20)), compress=True) +'.eJwFwcERACAIwLCF-rCiILN47r-GyZVJsNgkxaFxoDgxcOHGxMKD_T7vhAml:1QaUaL:BA0thEZrp4FQVXIXuOvYJtLJSrQ' + +The fact that the string is compressed is signalled by the prefixed '.' at the +start of the base64 JSON. + +There are 65 url-safe characters: the 64 used by url-safe base64 and the ':'. +These functions make use of all of them. +""" + +import base64 +import datetime +import json +import time +import zlib + +from django.conf import settings +from django.utils.crypto import constant_time_compare, salted_hmac +from django.utils.encoding import force_bytes +from django.utils.module_loading import import_string +from django.utils.regex_helper import _lazy_re_compile + +_SEP_UNSAFE = _lazy_re_compile(r"^[A-z0-9-_=]*$") +BASE62_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + + +class BadSignature(Exception): + """Signature does not match.""" + + pass + + +class SignatureExpired(BadSignature): + """Signature timestamp is older than required max_age.""" + + pass + + +def b62_encode(s): + if s == 0: + return "0" + sign = "-" if s < 0 else "" + s = abs(s) + encoded = "" + while s > 0: + s, remainder = divmod(s, 62) + encoded = BASE62_ALPHABET[remainder] + encoded + return sign + encoded + + +def b62_decode(s): + if s == "0": + return 0 + sign = 1 + if s[0] == "-": + s = s[1:] + sign = -1 + decoded = 0 + for digit in s: + decoded = decoded * 62 + BASE62_ALPHABET.index(digit) + return sign * decoded + + +def b64_encode(s): + return base64.urlsafe_b64encode(s).strip(b"=") + + +def b64_decode(s): + pad = b"=" * (-len(s) % 4) + return base64.urlsafe_b64decode(s + pad) + + +def base64_hmac(salt, value, key, algorithm="sha1"): + return b64_encode( + salted_hmac(salt, value, key, algorithm=algorithm).digest() + ).decode() + + +def get_cookie_signer(salt="django.core.signing.get_cookie_signer"): + Signer = import_string(settings.SIGNING_BACKEND) + key = force_bytes(settings.SECRET_KEY) # SECRET_KEY may be str or bytes. + return Signer(b"django.http.cookies" + key, salt=salt) + + +class JSONSerializer: + """ + Simple wrapper around json to be used in signing.dumps and + signing.loads. + """ + + def dumps(self, obj): + return json.dumps(obj, separators=(",", ":")).encode("latin-1") + + def loads(self, data): + return json.loads(data.decode("latin-1")) + + +def dumps( + obj, key=None, salt="django.core.signing", serializer=JSONSerializer, compress=False +): + """ + Return URL-safe, hmac signed base64 compressed JSON string. If key is + None, use settings.SECRET_KEY instead. The hmac algorithm is the default + Signer algorithm. + + If compress is True (not the default), check if compressing using zlib can + save some space. Prepend a '.' to signify compression. This is included + in the signature, to protect against zip bombs. + + Salt can be used to namespace the hash, so that a signed string is + only valid for a given namespace. Leaving this at the default + value or re-using a salt value across different parts of your + application without good cause is a security risk. + + The serializer is expected to return a bytestring. + """ + return TimestampSigner(key, salt=salt).sign_object( + obj, serializer=serializer, compress=compress + ) + + +def loads( + s, key=None, salt="django.core.signing", serializer=JSONSerializer, max_age=None +): + """ + Reverse of dumps(), raise BadSignature if signature fails. + + The serializer is expected to accept a bytestring. + """ + return TimestampSigner(key, salt=salt).unsign_object( + s, serializer=serializer, max_age=max_age + ) + + +class Signer: + def __init__(self, key=None, sep=":", salt=None, algorithm=None): + self.key = key or settings.SECRET_KEY + self.sep = sep + if _SEP_UNSAFE.match(self.sep): + raise ValueError( + "Unsafe Signer separator: %r (cannot be empty or consist of " + "only A-z0-9-_=)" % sep, + ) + self.salt = salt or "%s.%s" % ( + self.__class__.__module__, + self.__class__.__name__, + ) + self.algorithm = algorithm or "sha256" + + def signature(self, value): + return base64_hmac( + self.salt + "signer", value, self.key, algorithm=self.algorithm + ) + + def sign(self, value): + return "%s%s%s" % (value, self.sep, self.signature(value)) + + def unsign(self, signed_value): + if self.sep not in signed_value: + raise BadSignature('No "%s" found in value' % self.sep) + value, sig = signed_value.rsplit(self.sep, 1) + if constant_time_compare(sig, self.signature(value)): + return value + raise BadSignature('Signature "%s" does not match' % sig) + + def sign_object(self, obj, serializer=JSONSerializer, compress=False): + """ + Return URL-safe, hmac signed base64 compressed JSON string. + + If compress is True (not the default), check if compressing using zlib + can save some space. Prepend a '.' to signify compression. This is + included in the signature, to protect against zip bombs. + + The serializer is expected to return a bytestring. + """ + data = serializer().dumps(obj) + # Flag for if it's been compressed or not. + is_compressed = False + + if compress: + # Avoid zlib dependency unless compress is being used. + compressed = zlib.compress(data) + if len(compressed) < (len(data) - 1): + data = compressed + is_compressed = True + base64d = b64_encode(data).decode() + if is_compressed: + base64d = "." + base64d + return self.sign(base64d) + + def unsign_object(self, signed_obj, serializer=JSONSerializer, **kwargs): + # Signer.unsign() returns str but base64 and zlib compression operate + # on bytes. + base64d = self.unsign(signed_obj, **kwargs).encode() + decompress = base64d[:1] == b"." + if decompress: + # It's compressed; uncompress it first. + base64d = base64d[1:] + data = b64_decode(base64d) + if decompress: + data = zlib.decompress(data) + return serializer().loads(data) + + +class TimestampSigner(Signer): + def timestamp(self): + return b62_encode(int(time.time())) + + def sign(self, value): + value = "%s%s%s" % (value, self.sep, self.timestamp()) + return super().sign(value) + + def unsign(self, value, max_age=None): + """ + Retrieve original value and check it wasn't signed more + than max_age seconds ago. + """ + result = super().unsign(value) + value, timestamp = result.rsplit(self.sep, 1) + timestamp = b62_decode(timestamp) + if max_age is not None: + if isinstance(max_age, datetime.timedelta): + max_age = max_age.total_seconds() + # Check timestamp is not older than max_age + age = time.time() - timestamp + if age > max_age: + raise SignatureExpired("Signature age %s > %s seconds" % (age, max_age)) + return value diff --git a/venv/Lib/site-packages/django/core/validators.py b/venv/Lib/site-packages/django/core/validators.py new file mode 100644 index 000000000..4879c862d --- /dev/null +++ b/venv/Lib/site-packages/django/core/validators.py @@ -0,0 +1,638 @@ +import ipaddress +import re +import warnings +from pathlib import Path +from urllib.parse import urlsplit, urlunsplit + +from django.core.exceptions import ValidationError +from django.utils.deconstruct import deconstructible +from django.utils.deprecation import RemovedInDjango41Warning +from django.utils.encoding import punycode +from django.utils.ipv6 import is_valid_ipv6_address +from django.utils.regex_helper import _lazy_re_compile +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy + +# These values, if given to validate(), will trigger the self.required check. +EMPTY_VALUES = (None, "", [], (), {}) + + +@deconstructible +class RegexValidator: + regex = "" + message = _("Enter a valid value.") + code = "invalid" + inverse_match = False + flags = 0 + + def __init__( + self, regex=None, message=None, code=None, inverse_match=None, flags=None + ): + if regex is not None: + self.regex = regex + if message is not None: + self.message = message + if code is not None: + self.code = code + if inverse_match is not None: + self.inverse_match = inverse_match + if flags is not None: + self.flags = flags + if self.flags and not isinstance(self.regex, str): + raise TypeError( + "If the flags are set, regex must be a regular expression string." + ) + + self.regex = _lazy_re_compile(self.regex, self.flags) + + def __call__(self, value): + """ + Validate that the input contains (or does *not* contain, if + inverse_match is True) a match for the regular expression. + """ + regex_matches = self.regex.search(str(value)) + invalid_input = regex_matches if self.inverse_match else not regex_matches + if invalid_input: + raise ValidationError(self.message, code=self.code, params={"value": value}) + + def __eq__(self, other): + return ( + isinstance(other, RegexValidator) + and self.regex.pattern == other.regex.pattern + and self.regex.flags == other.regex.flags + and (self.message == other.message) + and (self.code == other.code) + and (self.inverse_match == other.inverse_match) + ) + + +@deconstructible +class URLValidator(RegexValidator): + ul = "\u00a1-\uffff" # Unicode letters range (must not be a raw string). + + # IP patterns + ipv4_re = ( + r"(?:0|25[0-5]|2[0-4]\d|1\d?\d?|[1-9]\d?)" + r"(?:\.(?:0|25[0-5]|2[0-4]\d|1\d?\d?|[1-9]\d?)){3}" + ) + ipv6_re = r"\[[0-9a-f:.]+\]" # (simple regex, validated later) + + # Host patterns + hostname_re = ( + r"[a-z" + ul + r"0-9](?:[a-z" + ul + r"0-9-]{0,61}[a-z" + ul + r"0-9])?" + ) + # Max length for domain name labels is 63 characters per RFC 1034 sec. 3.1 + domain_re = r"(?:\.(?!-)[a-z" + ul + r"0-9-]{1,63}(? ACE + except UnicodeError: # invalid domain part + raise e + url = urlunsplit((scheme, netloc, path, query, fragment)) + super().__call__(url) + else: + raise + else: + # Now verify IPv6 in the netloc part + host_match = re.search(r"^\[(.+)\](?::\d{1,5})?$", urlsplit(value).netloc) + if host_match: + potential_ip = host_match[1] + try: + validate_ipv6_address(potential_ip) + except ValidationError: + raise ValidationError( + self.message, code=self.code, params={"value": value} + ) + + # The maximum length of a full host name is 253 characters per RFC 1034 + # section 3.1. It's defined to be 255 bytes or less, but this includes + # one byte for the length of the name and one byte for the trailing dot + # that's used to indicate absolute names in DNS. + if len(urlsplit(value).hostname) > 253: + raise ValidationError(self.message, code=self.code, params={"value": value}) + + +integer_validator = RegexValidator( + _lazy_re_compile(r"^-?\d+\Z"), + message=_("Enter a valid integer."), + code="invalid", +) + + +def validate_integer(value): + return integer_validator(value) + + +@deconstructible +class EmailValidator: + message = _("Enter a valid email address.") + code = "invalid" + user_regex = _lazy_re_compile( + # dot-atom + r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z" + # quoted-string + r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])' + r'*"\Z)', + re.IGNORECASE, + ) + domain_regex = _lazy_re_compile( + # max length for domain name labels is 63 characters per RFC 1034 + r"((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+)(?:[A-Z0-9-]{2,63}(? b + + +@deconstructible +class MinValueValidator(BaseValidator): + message = _("Ensure this value is greater than or equal to %(limit_value)s.") + code = "min_value" + + def compare(self, a, b): + return a < b + + +@deconstructible +class MinLengthValidator(BaseValidator): + message = ngettext_lazy( + "Ensure this value has at least %(limit_value)d character (it has " + "%(show_value)d).", + "Ensure this value has at least %(limit_value)d characters (it has " + "%(show_value)d).", + "limit_value", + ) + code = "min_length" + + def compare(self, a, b): + return a < b + + def clean(self, x): + return len(x) + + +@deconstructible +class MaxLengthValidator(BaseValidator): + message = ngettext_lazy( + "Ensure this value has at most %(limit_value)d character (it has " + "%(show_value)d).", + "Ensure this value has at most %(limit_value)d characters (it has " + "%(show_value)d).", + "limit_value", + ) + code = "max_length" + + def compare(self, a, b): + return a > b + + def clean(self, x): + return len(x) + + +@deconstructible +class DecimalValidator: + """ + Validate that the input does not exceed the maximum number of digits + expected, otherwise raise ValidationError. + """ + + messages = { + "invalid": _("Enter a number."), + "max_digits": ngettext_lazy( + "Ensure that there are no more than %(max)s digit in total.", + "Ensure that there are no more than %(max)s digits in total.", + "max", + ), + "max_decimal_places": ngettext_lazy( + "Ensure that there are no more than %(max)s decimal place.", + "Ensure that there are no more than %(max)s decimal places.", + "max", + ), + "max_whole_digits": ngettext_lazy( + "Ensure that there are no more than %(max)s digit before the decimal " + "point.", + "Ensure that there are no more than %(max)s digits before the decimal " + "point.", + "max", + ), + } + + def __init__(self, max_digits, decimal_places): + self.max_digits = max_digits + self.decimal_places = decimal_places + + def __call__(self, value): + digit_tuple, exponent = value.as_tuple()[1:] + if exponent in {"F", "n", "N"}: + raise ValidationError( + self.messages["invalid"], code="invalid", params={"value": value} + ) + if exponent >= 0: + # A positive exponent adds that many trailing zeros. + digits = len(digit_tuple) + exponent + decimals = 0 + else: + # If the absolute value of the negative exponent is larger than the + # number of digits, then it's the same as the number of digits, + # because it'll consume all of the digits in digit_tuple and then + # add abs(exponent) - len(digit_tuple) leading zeros after the + # decimal point. + if abs(exponent) > len(digit_tuple): + digits = decimals = abs(exponent) + else: + digits = len(digit_tuple) + decimals = abs(exponent) + whole_digits = digits - decimals + + if self.max_digits is not None and digits > self.max_digits: + raise ValidationError( + self.messages["max_digits"], + code="max_digits", + params={"max": self.max_digits, "value": value}, + ) + if self.decimal_places is not None and decimals > self.decimal_places: + raise ValidationError( + self.messages["max_decimal_places"], + code="max_decimal_places", + params={"max": self.decimal_places, "value": value}, + ) + if ( + self.max_digits is not None + and self.decimal_places is not None + and whole_digits > (self.max_digits - self.decimal_places) + ): + raise ValidationError( + self.messages["max_whole_digits"], + code="max_whole_digits", + params={"max": (self.max_digits - self.decimal_places), "value": value}, + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) + and self.max_digits == other.max_digits + and self.decimal_places == other.decimal_places + ) + + +@deconstructible +class FileExtensionValidator: + message = _( + "File extension “%(extension)s” is not allowed. " + "Allowed extensions are: %(allowed_extensions)s." + ) + code = "invalid_extension" + + def __init__(self, allowed_extensions=None, message=None, code=None): + if allowed_extensions is not None: + allowed_extensions = [ + allowed_extension.lower() for allowed_extension in allowed_extensions + ] + self.allowed_extensions = allowed_extensions + if message is not None: + self.message = message + if code is not None: + self.code = code + + def __call__(self, value): + extension = Path(value.name).suffix[1:].lower() + if ( + self.allowed_extensions is not None + and extension not in self.allowed_extensions + ): + raise ValidationError( + self.message, + code=self.code, + params={ + "extension": extension, + "allowed_extensions": ", ".join(self.allowed_extensions), + "value": value, + }, + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) + and self.allowed_extensions == other.allowed_extensions + and self.message == other.message + and self.code == other.code + ) + + +def get_available_image_extensions(): + try: + from PIL import Image + except ImportError: + return [] + else: + Image.init() + return [ext.lower()[1:] for ext in Image.EXTENSION] + + +def validate_image_file_extension(value): + return FileExtensionValidator(allowed_extensions=get_available_image_extensions())( + value + ) + + +@deconstructible +class ProhibitNullCharactersValidator: + """Validate that the string doesn't contain the null character.""" + + message = _("Null characters are not allowed.") + code = "null_characters_not_allowed" + + def __init__(self, message=None, code=None): + if message is not None: + self.message = message + if code is not None: + self.code = code + + def __call__(self, value): + if "\x00" in str(value): + raise ValidationError(self.message, code=self.code, params={"value": value}) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) + and self.message == other.message + and self.code == other.code + ) diff --git a/venv/Lib/site-packages/django/core/wsgi.py b/venv/Lib/site-packages/django/core/wsgi.py new file mode 100644 index 000000000..35e0fa8e8 --- /dev/null +++ b/venv/Lib/site-packages/django/core/wsgi.py @@ -0,0 +1,13 @@ +import django +from django.core.handlers.wsgi import WSGIHandler + + +def get_wsgi_application(): + """ + The public interface to Django's WSGI support. Return a WSGI callable. + + Avoids making django.core.handlers.WSGIHandler a public API, in case the + internal WSGI implementation changes or moves in the future. + """ + django.setup(set_prefix=False) + return WSGIHandler() diff --git a/venv/Lib/site-packages/django/db/__init__.py b/venv/Lib/site-packages/django/db/__init__.py new file mode 100644 index 000000000..b0cae97e0 --- /dev/null +++ b/venv/Lib/site-packages/django/db/__init__.py @@ -0,0 +1,61 @@ +from django.core import signals +from django.db.utils import ( + DEFAULT_DB_ALIAS, + DJANGO_VERSION_PICKLE_KEY, + ConnectionHandler, + ConnectionRouter, + DatabaseError, + DataError, + Error, + IntegrityError, + InterfaceError, + InternalError, + NotSupportedError, + OperationalError, + ProgrammingError, +) +from django.utils.connection import ConnectionProxy + +__all__ = [ + "connection", + "connections", + "router", + "DatabaseError", + "IntegrityError", + "InternalError", + "ProgrammingError", + "DataError", + "NotSupportedError", + "Error", + "InterfaceError", + "OperationalError", + "DEFAULT_DB_ALIAS", + "DJANGO_VERSION_PICKLE_KEY", +] + +connections = ConnectionHandler() + +router = ConnectionRouter() + +# For backwards compatibility. Prefer connections['default'] instead. +connection = ConnectionProxy(connections, DEFAULT_DB_ALIAS) + + +# Register an event to reset saved queries when a Django request is started. +def reset_queries(**kwargs): + for conn in connections.all(): + conn.queries_log.clear() + + +signals.request_started.connect(reset_queries) + + +# Register an event to reset transaction state and close connections past +# their lifetime. +def close_old_connections(**kwargs): + for conn in connections.all(): + conn.close_if_unusable_or_obsolete() + + +signals.request_started.connect(close_old_connections) +signals.request_finished.connect(close_old_connections) diff --git a/venv/Lib/site-packages/django/db/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c8d954f85e33316c1048c727a079c9ef7ef16c5 GIT binary patch literal 1246 zcmZ`&OK;pZ5GM87m$Z*Kj^m{H0ei4>EKmeRUGFAwZL9-tQ=r7QgjS+eIik23N@)$W zr}T%|y}3V0Kurinh{AErAD?gOWMqq4s)c-T~A9Czkq-2DslC1YB(beiO0rpG}woJ?OHygm7vPrl>_Cr1bKYIpM0!R*y3 z|7LnNKRTW9H%EuZCsTer{k9q%syr7_k*fT4n8%rbYPd0-sj@&zFbRur8EP>FP*8P@ z+K6uR=^y2VNFXgP@9A(JM(Y!S@dM`9xJNTp%*)kEK_TMCG(24i2u&KdLBlto5(uSC z^Q4YJmV-@d=>6$(+^@RP9f7L1k#*%kojkO#Kw!ELzJY;(wt>Jv$3V|O-+-9|a1bKg zcgsS_c#d)FPY?=nMX$+(eAoJg{!A~dEBl&I^4^KboZQga*ntNaRoP*dvEKVqKq@rP zR8qN7CPKKeD(~HoAtbtTOv*O|o?!ex?C`V2TP;8@&PuJr#Y9D=6nUW+uhQamxm>(V zK^J>S{Q_II_#pBRi<5M@&}kv|R$=rmOoU#<7h#^L=kfA6=V_i6obRtLs{n)+1z#t# zXP9^hKJ}^dFBnq)PuV1QN7*x!udEGWc!=(?T~mf_l-aW=Q(Ex!oR@j2!(}G80pdy=876 z88C%p0}xneU2t85X2h%3`gl!%4R77&*dG0Zi0>7{lp5-av|mUSmznsSqDenS@W~76 U589SD@~p1ic6_((`tFea2Xt*k^#A|> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/__pycache__/transaction.cpython-310.pyc b/venv/Lib/site-packages/django/db/__pycache__/transaction.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8249305d3ee705634a9aa24c65ce4c7609b01293 GIT binary patch literal 8324 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/db/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71f31040ff95a7e7fd087a8663a4944aaf8f30d2 GIT binary patch literal 9477 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 N1;c#5_~z95{{p!5voQbw literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/__init__.py b/venv/Lib/site-packages/django/db/backends/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58882d42aef878808d7e2df6d7e6af2a8e0b3429 GIT binary patch literal 192 zcmd1j<>g`kg0FFRlR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_=vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMN|JsOP$)GorC2{cJ~J<~BtBlRpz;=nO>TZlX-=vg$ns() IAi=@_0EUG#!~g&Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/__pycache__/ddl_references.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/__pycache__/ddl_references.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5fe73fead7009acbadf9d7cc24ab0cab8e1807f3 GIT binary patch literal 10193 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/__pycache__/signals.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/__pycache__/signals.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27666d839f12de6a2738014c4897a741a598f967 GIT binary patch literal 265 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/base/__init__.py b/venv/Lib/site-packages/django/db/backends/base/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/base/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/base/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..871fd2ad5f0b41f5312c2c1d805a43fb94b406bd GIT binary patch literal 197 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/base/__pycache__/introspection.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/base/__pycache__/introspection.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..938636fc4208ae4a2a7c099d883af035adc71564 GIT binary patch literal 8863 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/base/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/base/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ee6fa9aa926d2533c70b6fc886898278856d124 GIT binary patch literal 30625 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 ajJ_P%={$!(#ZWSbG1(^ZF2=ler2jXBW%xe; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/base/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/base/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2af606629f357f03290df1eca091057624d2c6e GIT binary patch literal 40824 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/base/__pycache__/validation.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/base/__pycache__/validation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2894922437307eb50c32e6a278a8f47b76da0b6a GIT binary patch literal 1357 zcmah}Uu)b(5Z_%%C;5CyiV3BJLY+S42tFH1Uy3oNagsuVDGAMkP`d1C_b!rk(s_5~ zI!1;B8|sf?Kl&>P^3>1Jmr~-)?Ah*xrpdz0?2LA2e)DHl-MG;uu>Sh(?eM-&$e*ap zFAtPWAhQJQF_A>lW1u4z6Um;DzL$digT+AG1Ty!4DH2mjVkT+qNhZBx68qAZ0mwjh zWC*e&Bk;4(e)*#?YD-u#1o>PPnG`mw%7c3k%T!EFT?ng|ha%lkrCc#nm1d(XUEaGs zI7l(_)xtf}10aJbHnbre@INExbh}U6Zd#S4N-;#AwZ2isNMo|+LYraR1cF!nKpLi7hUDxCD~KuUh*UxCML6LWePCGSeZoTq8wMN za=3bl+`z`D)j8PHS8c?3R%VuS=m0SYyGswg`FK4BS7%cS=dKpsLH%bSgI>mvs79;H zrq47Q+s@AKLXVBJ%~%J`LHbgqJ0WacaGxH0{XfCo!4C?J4v-e{wgfgNhn^)TZb=nwkDn9_;FO2yz+N8`6*$i-#0} z<}_yj5+FW@8t%fZLICz?yYIE(SXp7Mc9YRYBPDFDm4Sg_gS9ri)X%A_?p#3^*2k(; z`%}Gf8zbWUvDZFf?B+%H;^6yF6?cYyuwGQDD9py-+Ec&VhA)M2aIn~|CyJsCCY4km z_ymx~x3$`>Gp!_-LwMY6W@hfrk+kK zZ4HM|{Mz@m= self.close_at: + self.close() + return + + # ##### Thread safety handling ##### + + @property + def allow_thread_sharing(self): + with self._thread_sharing_lock: + return self._thread_sharing_count > 0 + + def inc_thread_sharing(self): + with self._thread_sharing_lock: + self._thread_sharing_count += 1 + + def dec_thread_sharing(self): + with self._thread_sharing_lock: + if self._thread_sharing_count <= 0: + raise RuntimeError( + "Cannot decrement the thread sharing count below zero." + ) + self._thread_sharing_count -= 1 + + def validate_thread_sharing(self): + """ + Validate that the connection isn't accessed by another thread than the + one which originally created it, unless the connection was explicitly + authorized to be shared between threads (via the `inc_thread_sharing()` + method). Raise an exception if the validation fails. + """ + if not (self.allow_thread_sharing or self._thread_ident == _thread.get_ident()): + raise DatabaseError( + "DatabaseWrapper objects created in a " + "thread can only be used in that same thread. The object " + "with alias '%s' was created in thread id %s and this is " + "thread id %s." % (self.alias, self._thread_ident, _thread.get_ident()) + ) + + # ##### Miscellaneous ##### + + def prepare_database(self): + """ + Hook to do any database check or preparation, generally called before + migrating a project or an app. + """ + pass + + @cached_property + def wrap_database_errors(self): + """ + Context manager and decorator that re-throws backend-specific database + exceptions using Django's common wrappers. + """ + return DatabaseErrorWrapper(self) + + def chunked_cursor(self): + """ + Return a cursor that tries to avoid caching in the database (if + supported by the database), otherwise return a regular cursor. + """ + return self.cursor() + + def make_debug_cursor(self, cursor): + """Create a cursor that logs all queries in self.queries_log.""" + return utils.CursorDebugWrapper(cursor, self) + + def make_cursor(self, cursor): + """Create a cursor without debug logging.""" + return utils.CursorWrapper(cursor, self) + + @contextmanager + def temporary_connection(self): + """ + Context manager that ensures that a connection is established, and + if it opened one, closes it to avoid leaving a dangling connection. + This is useful for operations outside of the request-response cycle. + + Provide a cursor: with self.temporary_connection() as cursor: ... + """ + must_close = self.connection is None + try: + with self.cursor() as cursor: + yield cursor + finally: + if must_close: + self.close() + + @contextmanager + def _nodb_cursor(self): + """ + Return a cursor from an alternative connection to be used when there is + no need to access the main database, specifically for test db + creation/deletion. This also prevents the production database from + being exposed to potential child threads while (or after) the test + database is destroyed. Refs #10868, #17786, #16969. + """ + conn = self.__class__({**self.settings_dict, "NAME": None}, alias=NO_DB_ALIAS) + try: + with conn.cursor() as cursor: + yield cursor + finally: + conn.close() + + def schema_editor(self, *args, **kwargs): + """ + Return a new instance of this backend's SchemaEditor. + """ + if self.SchemaEditorClass is None: + raise NotImplementedError( + "The SchemaEditorClass attribute of this database wrapper is still None" + ) + return self.SchemaEditorClass(self, *args, **kwargs) + + def on_commit(self, func): + if not callable(func): + raise TypeError("on_commit()'s callback must be a callable.") + if self.in_atomic_block: + # Transaction in progress; save for execution on commit. + self.run_on_commit.append((set(self.savepoint_ids), func)) + elif not self.get_autocommit(): + raise TransactionManagementError( + "on_commit() cannot be used in manual transaction management" + ) + else: + # No transaction in progress and in autocommit mode; execute + # immediately. + func() + + def run_and_clear_commit_hooks(self): + self.validate_no_atomic_block() + current_run_on_commit = self.run_on_commit + self.run_on_commit = [] + while current_run_on_commit: + sids, func = current_run_on_commit.pop(0) + func() + + @contextmanager + def execute_wrapper(self, wrapper): + """ + Return a context manager under which the wrapper is applied to suitable + database query executions. + """ + self.execute_wrappers.append(wrapper) + try: + yield + finally: + self.execute_wrappers.pop() + + def copy(self, alias=None): + """ + Return a copy of this connection. + + For tests that require two connections to the same database. + """ + settings_dict = copy.deepcopy(self.settings_dict) + if alias is None: + alias = self.alias + return type(self)(settings_dict, alias) diff --git a/venv/Lib/site-packages/django/db/backends/base/client.py b/venv/Lib/site-packages/django/db/backends/base/client.py new file mode 100644 index 000000000..031056372 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/client.py @@ -0,0 +1,28 @@ +import os +import subprocess + + +class BaseDatabaseClient: + """Encapsulate backend-specific methods for opening a client shell.""" + + # This should be a string representing the name of the executable + # (e.g., "psql"). Subclasses must override this. + executable_name = None + + def __init__(self, connection): + # connection is an instance of BaseDatabaseWrapper. + self.connection = connection + + @classmethod + def settings_to_cmd_args_env(cls, settings_dict, parameters): + raise NotImplementedError( + "subclasses of BaseDatabaseClient must provide a " + "settings_to_cmd_args_env() method or override a runshell()." + ) + + def runshell(self, parameters): + args, env = self.settings_to_cmd_args_env( + self.connection.settings_dict, parameters + ) + env = {**os.environ, **env} if env else None + subprocess.run(args, env=env, check=True) diff --git a/venv/Lib/site-packages/django/db/backends/base/creation.py b/venv/Lib/site-packages/django/db/backends/base/creation.py new file mode 100644 index 000000000..21327465c --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/creation.py @@ -0,0 +1,369 @@ +import os +import sys +from io import StringIO +from unittest import expectedFailure, skip + +from django.apps import apps +from django.conf import settings +from django.core import serializers +from django.db import router +from django.db.transaction import atomic +from django.utils.module_loading import import_string + +# The prefix to put on the default database name when creating +# the test database. +TEST_DATABASE_PREFIX = "test_" + + +class BaseDatabaseCreation: + """ + Encapsulate backend-specific differences pertaining to creation and + destruction of the test database. + """ + + def __init__(self, connection): + self.connection = connection + + def _nodb_cursor(self): + return self.connection._nodb_cursor() + + def log(self, msg): + sys.stderr.write(msg + os.linesep) + + def create_test_db( + self, verbosity=1, autoclobber=False, serialize=True, keepdb=False + ): + """ + Create a test database, prompting the user for confirmation if the + database already exists. Return the name of the test database created. + """ + # Don't import django.core.management if it isn't needed. + from django.core.management import call_command + + test_database_name = self._get_test_db_name() + + if verbosity >= 1: + action = "Creating" + if keepdb: + action = "Using existing" + + self.log( + "%s test database for alias %s..." + % ( + action, + self._get_database_display_str(verbosity, test_database_name), + ) + ) + + # We could skip this call if keepdb is True, but we instead + # give it the keepdb param. This is to handle the case + # where the test DB doesn't exist, in which case we need to + # create it, then just not destroy it. If we instead skip + # this, we will get an exception. + self._create_test_db(verbosity, autoclobber, keepdb) + + self.connection.close() + settings.DATABASES[self.connection.alias]["NAME"] = test_database_name + self.connection.settings_dict["NAME"] = test_database_name + + try: + if self.connection.settings_dict["TEST"]["MIGRATE"] is False: + # Disable migrations for all apps. + old_migration_modules = settings.MIGRATION_MODULES + settings.MIGRATION_MODULES = { + app.label: None for app in apps.get_app_configs() + } + # We report migrate messages at one level lower than that + # requested. This ensures we don't get flooded with messages during + # testing (unless you really ask to be flooded). + call_command( + "migrate", + verbosity=max(verbosity - 1, 0), + interactive=False, + database=self.connection.alias, + run_syncdb=True, + ) + finally: + if self.connection.settings_dict["TEST"]["MIGRATE"] is False: + settings.MIGRATION_MODULES = old_migration_modules + + # We then serialize the current state of the database into a string + # and store it on the connection. This slightly horrific process is so people + # who are testing on databases without transactions or who are using + # a TransactionTestCase still get a clean database on every test run. + if serialize: + self.connection._test_serialized_contents = self.serialize_db_to_string() + + call_command("createcachetable", database=self.connection.alias) + + # Ensure a connection for the side effect of initializing the test database. + self.connection.ensure_connection() + + if os.environ.get("RUNNING_DJANGOS_TEST_SUITE") == "true": + self.mark_expected_failures_and_skips() + + return test_database_name + + def set_as_test_mirror(self, primary_settings_dict): + """ + Set this database up to be used in testing as a mirror of a primary + database whose settings are given. + """ + self.connection.settings_dict["NAME"] = primary_settings_dict["NAME"] + + def serialize_db_to_string(self): + """ + Serialize all data in the database into a JSON string. + Designed only for test runner usage; will not handle large + amounts of data. + """ + # Iteratively return every object for all models to serialize. + def get_objects(): + from django.db.migrations.loader import MigrationLoader + + loader = MigrationLoader(self.connection) + for app_config in apps.get_app_configs(): + if ( + app_config.models_module is not None + and app_config.label in loader.migrated_apps + and app_config.name not in settings.TEST_NON_SERIALIZED_APPS + ): + for model in app_config.get_models(): + if model._meta.can_migrate( + self.connection + ) and router.allow_migrate_model(self.connection.alias, model): + queryset = model._base_manager.using( + self.connection.alias, + ).order_by(model._meta.pk.name) + yield from queryset.iterator() + + # Serialize to a string + out = StringIO() + serializers.serialize("json", get_objects(), indent=None, stream=out) + return out.getvalue() + + def deserialize_db_from_string(self, data): + """ + Reload the database with data from a string generated by + the serialize_db_to_string() method. + """ + data = StringIO(data) + table_names = set() + # Load data in a transaction to handle forward references and cycles. + with atomic(using=self.connection.alias): + # Disable constraint checks, because some databases (MySQL) doesn't + # support deferred checks. + with self.connection.constraint_checks_disabled(): + for obj in serializers.deserialize( + "json", data, using=self.connection.alias + ): + obj.save() + table_names.add(obj.object.__class__._meta.db_table) + # Manually check for any invalid keys that might have been added, + # because constraint checks were disabled. + self.connection.check_constraints(table_names=table_names) + + def _get_database_display_str(self, verbosity, database_name): + """ + Return display string for a database for use in various actions. + """ + return "'%s'%s" % ( + self.connection.alias, + (" ('%s')" % database_name) if verbosity >= 2 else "", + ) + + def _get_test_db_name(self): + """ + Internal implementation - return the name of the test DB that will be + created. Only useful when called from create_test_db() and + _create_test_db() and when no external munging is done with the 'NAME' + settings. + """ + if self.connection.settings_dict["TEST"]["NAME"]: + return self.connection.settings_dict["TEST"]["NAME"] + return TEST_DATABASE_PREFIX + self.connection.settings_dict["NAME"] + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + cursor.execute("CREATE DATABASE %(dbname)s %(suffix)s" % parameters) + + def _create_test_db(self, verbosity, autoclobber, keepdb=False): + """ + Internal implementation - create the test db tables. + """ + test_database_name = self._get_test_db_name() + test_db_params = { + "dbname": self.connection.ops.quote_name(test_database_name), + "suffix": self.sql_table_creation_suffix(), + } + # Create the test database and connect to it. + with self._nodb_cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + # if we want to keep the db, then no need to do any of the below, + # just return and skip it all. + if keepdb: + return test_database_name + + self.log("Got an error creating the test database: %s" % e) + if not autoclobber: + confirm = input( + "Type 'yes' if you would like to try deleting the test " + "database '%s', or 'no' to cancel: " % test_database_name + ) + if autoclobber or confirm == "yes": + try: + if verbosity >= 1: + self.log( + "Destroying old test database for alias %s..." + % ( + self._get_database_display_str( + verbosity, test_database_name + ), + ) + ) + cursor.execute("DROP DATABASE %(dbname)s" % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + self.log("Got an error recreating the test database: %s" % e) + sys.exit(2) + else: + self.log("Tests cancelled.") + sys.exit(1) + + return test_database_name + + def clone_test_db(self, suffix, verbosity=1, autoclobber=False, keepdb=False): + """ + Clone a test database. + """ + source_database_name = self.connection.settings_dict["NAME"] + + if verbosity >= 1: + action = "Cloning test database" + if keepdb: + action = "Using existing clone" + self.log( + "%s for alias %s..." + % ( + action, + self._get_database_display_str(verbosity, source_database_name), + ) + ) + + # We could skip this call if keepdb is True, but we instead + # give it the keepdb param. See create_test_db for details. + self._clone_test_db(suffix, verbosity, keepdb) + + def get_test_db_clone_settings(self, suffix): + """ + Return a modified connection settings dict for the n-th clone of a DB. + """ + # When this function is called, the test database has been created + # already and its name has been copied to settings_dict['NAME'] so + # we don't need to call _get_test_db_name. + orig_settings_dict = self.connection.settings_dict + return { + **orig_settings_dict, + "NAME": "{}_{}".format(orig_settings_dict["NAME"], suffix), + } + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + """ + Internal implementation - duplicate the test db tables. + """ + raise NotImplementedError( + "The database backend doesn't support cloning databases. " + "Disable the option to run tests in parallel processes." + ) + + def destroy_test_db( + self, old_database_name=None, verbosity=1, keepdb=False, suffix=None + ): + """ + Destroy a test database, prompting the user for confirmation if the + database already exists. + """ + self.connection.close() + if suffix is None: + test_database_name = self.connection.settings_dict["NAME"] + else: + test_database_name = self.get_test_db_clone_settings(suffix)["NAME"] + + if verbosity >= 1: + action = "Destroying" + if keepdb: + action = "Preserving" + self.log( + "%s test database for alias %s..." + % ( + action, + self._get_database_display_str(verbosity, test_database_name), + ) + ) + + # if we want to preserve the database + # skip the actual destroying piece. + if not keepdb: + self._destroy_test_db(test_database_name, verbosity) + + # Restore the original database name + if old_database_name is not None: + settings.DATABASES[self.connection.alias]["NAME"] = old_database_name + self.connection.settings_dict["NAME"] = old_database_name + + def _destroy_test_db(self, test_database_name, verbosity): + """ + Internal implementation - remove the test db tables. + """ + # Remove the test database to clean up after + # ourselves. Connect to the previous database (not the test database) + # to do so, because it's not allowed to delete a database while being + # connected to it. + with self._nodb_cursor() as cursor: + cursor.execute( + "DROP DATABASE %s" % self.connection.ops.quote_name(test_database_name) + ) + + def mark_expected_failures_and_skips(self): + """ + Mark tests in Django's test suite which are expected failures on this + database and test which should be skipped on this database. + """ + for test_name in self.connection.features.django_test_expected_failures: + test_case_name, _, test_method_name = test_name.rpartition(".") + test_app = test_name.split(".")[0] + # Importing a test app that isn't installed raises RuntimeError. + if test_app in settings.INSTALLED_APPS: + test_case = import_string(test_case_name) + test_method = getattr(test_case, test_method_name) + setattr(test_case, test_method_name, expectedFailure(test_method)) + for reason, tests in self.connection.features.django_test_skips.items(): + for test_name in tests: + test_case_name, _, test_method_name = test_name.rpartition(".") + test_app = test_name.split(".")[0] + # Importing a test app that isn't installed raises RuntimeError. + if test_app in settings.INSTALLED_APPS: + test_case = import_string(test_case_name) + test_method = getattr(test_case, test_method_name) + setattr(test_case, test_method_name, skip(reason)(test_method)) + + def sql_table_creation_suffix(self): + """ + SQL to append to the end of the test table creation statements. + """ + return "" + + def test_db_signature(self): + """ + Return a tuple with elements of self.connection.settings_dict (a + DATABASES setting value) that uniquely identify a database + accordingly to the RDBMS particularities. + """ + settings_dict = self.connection.settings_dict + return ( + settings_dict["HOST"], + settings_dict["PORT"], + settings_dict["ENGINE"], + self._get_test_db_name(), + ) diff --git a/venv/Lib/site-packages/django/db/backends/base/features.py b/venv/Lib/site-packages/django/db/backends/base/features.py new file mode 100644 index 000000000..7ebe36173 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/features.py @@ -0,0 +1,367 @@ +from django.db import ProgrammingError +from django.utils.functional import cached_property + + +class BaseDatabaseFeatures: + gis_enabled = False + # Oracle can't group by LOB (large object) data types. + allows_group_by_lob = True + allows_group_by_pk = False + allows_group_by_selected_pks = False + empty_fetchmany_value = [] + update_can_self_select = True + + # Does the backend distinguish between '' and None? + interprets_empty_strings_as_nulls = False + + # Does the backend allow inserting duplicate NULL rows in a nullable + # unique field? All core backends implement this correctly, but other + # databases such as SQL Server do not. + supports_nullable_unique_constraints = True + + # Does the backend allow inserting duplicate rows when a unique_together + # constraint exists and some fields are nullable but not all of them? + supports_partially_nullable_unique_constraints = True + # Does the backend support initially deferrable unique constraints? + supports_deferrable_unique_constraints = False + + can_use_chunked_reads = True + can_return_columns_from_insert = False + can_return_rows_from_bulk_insert = False + has_bulk_insert = True + uses_savepoints = True + can_release_savepoints = False + + # If True, don't use integer foreign keys referring to, e.g., positive + # integer primary keys. + related_fields_match_type = False + allow_sliced_subqueries_with_in = True + has_select_for_update = False + has_select_for_update_nowait = False + has_select_for_update_skip_locked = False + has_select_for_update_of = False + has_select_for_no_key_update = False + # Does the database's SELECT FOR UPDATE OF syntax require a column rather + # than a table? + select_for_update_of_column = False + + # Does the default test database allow multiple connections? + # Usually an indication that the test database is in-memory + test_db_allows_multiple_connections = True + + # Can an object be saved without an explicit primary key? + supports_unspecified_pk = False + + # Can a fixture contain forward references? i.e., are + # FK constraints checked at the end of transaction, or + # at the end of each save operation? + supports_forward_references = True + + # Does the backend truncate names properly when they are too long? + truncates_names = False + + # Is there a REAL datatype in addition to floats/doubles? + has_real_datatype = False + supports_subqueries_in_group_by = True + + # Does the backend ignore unnecessary ORDER BY clauses in subqueries? + ignores_unnecessary_order_by_in_subqueries = True + + # Is there a true datatype for uuid? + has_native_uuid_field = False + + # Is there a true datatype for timedeltas? + has_native_duration_field = False + + # Does the database driver supports same type temporal data subtraction + # by returning the type used to store duration field? + supports_temporal_subtraction = False + + # Does the __regex lookup support backreferencing and grouping? + supports_regex_backreferencing = True + + # Can date/datetime lookups be performed using a string? + supports_date_lookup_using_string = True + + # Can datetimes with timezones be used? + supports_timezones = True + + # Does the database have a copy of the zoneinfo database? + has_zoneinfo_database = True + + # When performing a GROUP BY, is an ORDER BY NULL required + # to remove any ordering? + requires_explicit_null_ordering_when_grouping = False + + # Does the backend order NULL values as largest or smallest? + nulls_order_largest = False + + # Does the backend support NULLS FIRST and NULLS LAST in ORDER BY? + supports_order_by_nulls_modifier = True + + # Does the backend orders NULLS FIRST by default? + order_by_nulls_first = False + + # The database's limit on the number of query parameters. + max_query_params = None + + # Can an object have an autoincrement primary key of 0? + allows_auto_pk_0 = True + + # Do we need to NULL a ForeignKey out, or can the constraint check be + # deferred + can_defer_constraint_checks = False + + # date_interval_sql can properly handle mixed Date/DateTime fields and timedeltas + supports_mixed_date_datetime_comparisons = True + + # Does the backend support tablespaces? Default to False because it isn't + # in the SQL standard. + supports_tablespaces = False + + # Does the backend reset sequences between tests? + supports_sequence_reset = True + + # Can the backend introspect the default value of a column? + can_introspect_default = True + + # Confirm support for introspected foreign keys + # Every database can do this reliably, except MySQL, + # which can't do it for MyISAM tables + can_introspect_foreign_keys = True + + # Map fields which some backends may not be able to differentiate to the + # field it's introspected as. + introspected_field_types = { + "AutoField": "AutoField", + "BigAutoField": "BigAutoField", + "BigIntegerField": "BigIntegerField", + "BinaryField": "BinaryField", + "BooleanField": "BooleanField", + "CharField": "CharField", + "DurationField": "DurationField", + "GenericIPAddressField": "GenericIPAddressField", + "IntegerField": "IntegerField", + "PositiveBigIntegerField": "PositiveBigIntegerField", + "PositiveIntegerField": "PositiveIntegerField", + "PositiveSmallIntegerField": "PositiveSmallIntegerField", + "SmallAutoField": "SmallAutoField", + "SmallIntegerField": "SmallIntegerField", + "TimeField": "TimeField", + } + + # Can the backend introspect the column order (ASC/DESC) for indexes? + supports_index_column_ordering = True + + # Does the backend support introspection of materialized views? + can_introspect_materialized_views = False + + # Support for the DISTINCT ON clause + can_distinct_on_fields = False + + # Does the backend prevent running SQL queries in broken transactions? + atomic_transactions = True + + # Can we roll back DDL in a transaction? + can_rollback_ddl = False + + # Does it support operations requiring references rename in a transaction? + supports_atomic_references_rename = True + + # Can we issue more than one ALTER COLUMN clause in an ALTER TABLE? + supports_combined_alters = False + + # Does it support foreign keys? + supports_foreign_keys = True + + # Can it create foreign key constraints inline when adding columns? + can_create_inline_fk = True + + # Does it automatically index foreign keys? + indexes_foreign_keys = True + + # Does it support CHECK constraints? + supports_column_check_constraints = True + supports_table_check_constraints = True + # Does the backend support introspection of CHECK constraints? + can_introspect_check_constraints = True + + # Does the backend support 'pyformat' style ("... %(name)s ...", {'name': value}) + # parameter passing? Note this can be provided by the backend even if not + # supported by the Python driver + supports_paramstyle_pyformat = True + + # Does the backend require literal defaults, rather than parameterized ones? + requires_literal_defaults = False + + # Does the backend require a connection reset after each material schema change? + connection_persists_old_columns = False + + # What kind of error does the backend throw when accessing closed cursor? + closed_cursor_error_class = ProgrammingError + + # Does 'a' LIKE 'A' match? + has_case_insensitive_like = True + + # Suffix for backends that don't support "SELECT xxx;" queries. + bare_select_suffix = "" + + # If NULL is implied on columns without needing to be explicitly specified + implied_column_null = False + + # Does the backend support "select for update" queries with limit (and offset)? + supports_select_for_update_with_limit = True + + # Does the backend ignore null expressions in GREATEST and LEAST queries unless + # every expression is null? + greatest_least_ignores_nulls = False + + # Can the backend clone databases for parallel test execution? + # Defaults to False to allow third-party backends to opt-in. + can_clone_databases = False + + # Does the backend consider table names with different casing to + # be equal? + ignores_table_name_case = False + + # Place FOR UPDATE right after FROM clause. Used on MSSQL. + for_update_after_from = False + + # Combinatorial flags + supports_select_union = True + supports_select_intersection = True + supports_select_difference = True + supports_slicing_ordering_in_compound = False + supports_parentheses_in_compound = True + + # Does the database support SQL 2003 FILTER (WHERE ...) in aggregate + # expressions? + supports_aggregate_filter_clause = False + + # Does the backend support indexing a TextField? + supports_index_on_text_field = True + + # Does the backend support window expressions (expression OVER (...))? + supports_over_clause = False + supports_frame_range_fixed_distance = False + only_supports_unbounded_with_preceding_and_following = False + + # Does the backend support CAST with precision? + supports_cast_with_precision = True + + # How many second decimals does the database return when casting a value to + # a type with time? + time_cast_precision = 6 + + # SQL to create a procedure for use by the Django test suite. The + # functionality of the procedure isn't important. + create_test_procedure_without_params_sql = None + create_test_procedure_with_int_param_sql = None + + # Does the backend support keyword parameters for cursor.callproc()? + supports_callproc_kwargs = False + + # What formats does the backend EXPLAIN syntax support? + supported_explain_formats = set() + + # Does DatabaseOperations.explain_query_prefix() raise ValueError if + # unknown kwargs are passed to QuerySet.explain()? + validates_explain_options = True + + # Does the backend support the default parameter in lead() and lag()? + supports_default_in_lead_lag = True + + # Does the backend support ignoring constraint or uniqueness errors during + # INSERT? + supports_ignore_conflicts = True + + # Does this backend require casting the results of CASE expressions used + # in UPDATE statements to ensure the expression has the correct type? + requires_casted_case_in_updates = False + + # Does the backend support partial indexes (CREATE INDEX ... WHERE ...)? + supports_partial_indexes = True + supports_functions_in_partial_indexes = True + # Does the backend support covering indexes (CREATE INDEX ... INCLUDE ...)? + supports_covering_indexes = False + # Does the backend support indexes on expressions? + supports_expression_indexes = True + # Does the backend treat COLLATE as an indexed expression? + collate_as_index_expression = False + + # Does the database allow more than one constraint or index on the same + # field(s)? + allows_multiple_constraints_on_same_fields = True + + # Does the backend support boolean expressions in SELECT and GROUP BY + # clauses? + supports_boolean_expr_in_select_clause = True + + # Does the backend support JSONField? + supports_json_field = True + # Can the backend introspect a JSONField? + can_introspect_json_field = True + # Does the backend support primitives in JSONField? + supports_primitives_in_json_field = True + # Is there a true datatype for JSON? + has_native_json_field = False + # Does the backend use PostgreSQL-style JSON operators like '->'? + has_json_operators = False + # Does the backend support __contains and __contained_by lookups for + # a JSONField? + supports_json_field_contains = True + # Does value__d__contains={'f': 'g'} (without a list around the dict) match + # {'d': [{'f': 'g'}]}? + json_key_contains_list_matching_requires_list = False + # Does the backend support JSONObject() database function? + has_json_object_function = True + + # Does the backend support column collations? + supports_collation_on_charfield = True + supports_collation_on_textfield = True + # Does the backend support non-deterministic collations? + supports_non_deterministic_collations = True + + # Collation names for use by the Django test suite. + test_collations = { + "ci": None, # Case-insensitive. + "cs": None, # Case-sensitive. + "non_default": None, # Non-default. + "swedish_ci": None, # Swedish case-insensitive. + } + # SQL template override for tests.aggregation.tests.NowUTC + test_now_utc_template = None + + # A set of dotted paths to tests in Django's test suite that are expected + # to fail on this database. + django_test_expected_failures = set() + # A map of reasons to sets of dotted paths to tests in Django's test suite + # that should be skipped for this database. + django_test_skips = {} + + def __init__(self, connection): + self.connection = connection + + @cached_property + def supports_explaining_query_execution(self): + """Does this backend support explaining query execution?""" + return self.connection.ops.explain_prefix is not None + + @cached_property + def supports_transactions(self): + """Confirm support for transactions.""" + with self.connection.cursor() as cursor: + cursor.execute("CREATE TABLE ROLLBACK_TEST (X INT)") + self.connection.set_autocommit(False) + cursor.execute("INSERT INTO ROLLBACK_TEST (X) VALUES (8)") + self.connection.rollback() + self.connection.set_autocommit(True) + cursor.execute("SELECT COUNT(X) FROM ROLLBACK_TEST") + (count,) = cursor.fetchone() + cursor.execute("DROP TABLE ROLLBACK_TEST") + return count == 0 + + def allows_group_by_selected_pks_on_model(self, model): + if not self.allows_group_by_selected_pks: + return False + return model._meta.managed diff --git a/venv/Lib/site-packages/django/db/backends/base/introspection.py b/venv/Lib/site-packages/django/db/backends/base/introspection.py new file mode 100644 index 000000000..95e0e90ea --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/introspection.py @@ -0,0 +1,219 @@ +from collections import namedtuple + +# Structure returned by DatabaseIntrospection.get_table_list() +TableInfo = namedtuple("TableInfo", ["name", "type"]) + +# Structure returned by the DB-API cursor.description interface (PEP 249) +FieldInfo = namedtuple( + "FieldInfo", + "name type_code display_size internal_size precision scale null_ok " + "default collation", +) + + +class BaseDatabaseIntrospection: + """Encapsulate backend-specific introspection utilities.""" + + data_types_reverse = {} + + def __init__(self, connection): + self.connection = connection + + def get_field_type(self, data_type, description): + """ + Hook for a database backend to use the cursor description to + match a Django field type to a database column. + + For Oracle, the column data_type on its own is insufficient to + distinguish between a FloatField and IntegerField, for example. + """ + return self.data_types_reverse[data_type] + + def identifier_converter(self, name): + """ + Apply a conversion to the identifier for the purposes of comparison. + + The default identifier converter is for case sensitive comparison. + """ + return name + + def table_names(self, cursor=None, include_views=False): + """ + Return a list of names of all tables that exist in the database. + Sort the returned table list by Python's default sorting. Do NOT use + the database's ORDER BY here to avoid subtle differences in sorting + order between databases. + """ + + def get_names(cursor): + return sorted( + ti.name + for ti in self.get_table_list(cursor) + if include_views or ti.type == "t" + ) + + if cursor is None: + with self.connection.cursor() as cursor: + return get_names(cursor) + return get_names(cursor) + + def get_table_list(self, cursor): + """ + Return an unsorted list of TableInfo named tuples of all tables and + views that exist in the database. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a get_table_list() " + "method" + ) + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a " + "get_table_description() method." + ) + + def get_migratable_models(self): + from django.apps import apps + from django.db import router + + return ( + model + for app_config in apps.get_app_configs() + for model in router.get_migratable_models(app_config, self.connection.alias) + if model._meta.can_migrate(self.connection) + ) + + def django_table_names(self, only_existing=False, include_views=True): + """ + Return a list of all table names that have associated Django models and + are in INSTALLED_APPS. + + If only_existing is True, include only the tables in the database. + """ + tables = set() + for model in self.get_migratable_models(): + if not model._meta.managed: + continue + tables.add(model._meta.db_table) + tables.update( + f.m2m_db_table() + for f in model._meta.local_many_to_many + if f.remote_field.through._meta.managed + ) + tables = list(tables) + if only_existing: + existing_tables = set(self.table_names(include_views=include_views)) + tables = [ + t for t in tables if self.identifier_converter(t) in existing_tables + ] + return tables + + def installed_models(self, tables): + """ + Return a set of all models represented by the provided list of table + names. + """ + tables = set(map(self.identifier_converter, tables)) + return { + m + for m in self.get_migratable_models() + if self.identifier_converter(m._meta.db_table) in tables + } + + def sequence_list(self): + """ + Return a list of information about all DB sequences for all models in + all apps. + """ + sequence_list = [] + with self.connection.cursor() as cursor: + for model in self.get_migratable_models(): + if not model._meta.managed: + continue + if model._meta.swapped: + continue + sequence_list.extend( + self.get_sequences( + cursor, model._meta.db_table, model._meta.local_fields + ) + ) + for f in model._meta.local_many_to_many: + # If this is an m2m using an intermediate table, + # we don't need to reset the sequence. + if f.remote_field.through._meta.auto_created: + sequence = self.get_sequences(cursor, f.m2m_db_table()) + sequence_list.extend( + sequence or [{"table": f.m2m_db_table(), "column": None}] + ) + return sequence_list + + def get_sequences(self, cursor, table_name, table_fields=()): + """ + Return a list of introspected sequences for table_name. Each sequence + is a dict: {'table': , 'column': }. An optional + 'name' key can be added if the backend supports named sequences. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a get_sequences() " + "method" + ) + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of + {field_name: (field_name_other_table, other_table)} representing all + relationships to the given table. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a " + "get_relations() method." + ) + + def get_key_columns(self, cursor, table_name): + """ + Backends can override this to return a list of: + (column_name, referenced_table_name, referenced_column_name) + for all key columns in given table. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a get_key_columns() " + "method" + ) + + def get_primary_key_column(self, cursor, table_name): + """ + Return the name of the primary key column for the given table. + """ + for constraint in self.get_constraints(cursor, table_name).values(): + if constraint["primary_key"]: + return constraint["columns"][0] + return None + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) + across one or more columns. + + Return a dict mapping constraint names to their attributes, + where attributes is a dict with keys: + * columns: List of columns this covers + * primary_key: True if primary key, False otherwise + * unique: True if this is a unique constraint, False otherwise + * foreign_key: (table, column) of target, or None + * check: True if check constraint, False otherwise + * index: True if index, False otherwise. + * orders: The order (ASC/DESC) defined for the columns of indexes + * type: The type of the index (btree, hash, etc.) + + Some backends may return special constraint names that don't exist + if they don't name constraints of a certain type (e.g. SQLite) + """ + raise NotImplementedError( + "subclasses of BaseDatabaseIntrospection may require a get_constraints() " + "method" + ) diff --git a/venv/Lib/site-packages/django/db/backends/base/operations.py b/venv/Lib/site-packages/django/db/backends/base/operations.py new file mode 100644 index 000000000..ac14b0556 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/operations.py @@ -0,0 +1,754 @@ +import datetime +import decimal +from importlib import import_module + +import sqlparse + +from django.conf import settings +from django.db import NotSupportedError, transaction +from django.db.backends import utils +from django.utils import timezone +from django.utils.encoding import force_str +from django.utils.regex_helper import _lazy_re_compile + + +class BaseDatabaseOperations: + """ + Encapsulate backend-specific differences, such as the way a backend + performs ordering or calculates the ID of a recently-inserted row. + """ + + compiler_module = "django.db.models.sql.compiler" + + # Integer field safe ranges by `internal_type` as documented + # in docs/ref/models/fields.txt. + integer_field_ranges = { + "SmallIntegerField": (-32768, 32767), + "IntegerField": (-2147483648, 2147483647), + "BigIntegerField": (-9223372036854775808, 9223372036854775807), + "PositiveBigIntegerField": (0, 9223372036854775807), + "PositiveSmallIntegerField": (0, 32767), + "PositiveIntegerField": (0, 2147483647), + "SmallAutoField": (-32768, 32767), + "AutoField": (-2147483648, 2147483647), + "BigAutoField": (-9223372036854775808, 9223372036854775807), + } + set_operators = { + "union": "UNION", + "intersection": "INTERSECT", + "difference": "EXCEPT", + } + # Mapping of Field.get_internal_type() (typically the model field's class + # name) to the data type to use for the Cast() function, if different from + # DatabaseWrapper.data_types. + cast_data_types = {} + # CharField data type if the max_length argument isn't provided. + cast_char_field_without_max_length = None + + # Start and end points for window expressions. + PRECEDING = "PRECEDING" + FOLLOWING = "FOLLOWING" + UNBOUNDED_PRECEDING = "UNBOUNDED " + PRECEDING + UNBOUNDED_FOLLOWING = "UNBOUNDED " + FOLLOWING + CURRENT_ROW = "CURRENT ROW" + + # Prefix for EXPLAIN queries, or None EXPLAIN isn't supported. + explain_prefix = None + + extract_trunc_lookup_pattern = _lazy_re_compile(r"[\w\-_()]+") + + def __init__(self, connection): + self.connection = connection + self._cache = None + + def autoinc_sql(self, table, column): + """ + Return any SQL needed to support auto-incrementing primary keys, or + None if no SQL is necessary. + + This SQL is executed when a table is created. + """ + return None + + def bulk_batch_size(self, fields, objs): + """ + Return the maximum allowed batch size for the backend. The fields + are the fields going to be inserted in the batch, the objs contains + all the objects to be inserted. + """ + return len(objs) + + def cache_key_culling_sql(self): + """ + Return an SQL query that retrieves the first cache key greater than the + n smallest. + + This is used by the 'db' cache backend to determine where to start + culling. + """ + return "SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" + + def unification_cast_sql(self, output_field): + """ + Given a field instance, return the SQL that casts the result of a union + to that type. The resulting string should contain a '%s' placeholder + for the expression being cast. + """ + return "%s" + + def date_extract_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'year', 'month', or 'day', return the SQL that + extracts a value from the given date field field_name. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a date_extract_sql() " + "method" + ) + + def date_trunc_sql(self, lookup_type, field_name, tzname=None): + """ + Given a lookup_type of 'year', 'month', or 'day', return the SQL that + truncates the given date or datetime field field_name to a date object + with only the given specificity. + + If `tzname` is provided, the given value is truncated in a specific + timezone. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a date_trunc_sql() " + "method." + ) + + def datetime_cast_date_sql(self, field_name, tzname): + """ + Return the SQL to cast a datetime value to date value. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a " + "datetime_cast_date_sql() method." + ) + + def datetime_cast_time_sql(self, field_name, tzname): + """ + Return the SQL to cast a datetime value to time value. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a " + "datetime_cast_time_sql() method" + ) + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + """ + Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or + 'second', return the SQL that extracts a value from the given + datetime field field_name. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a datetime_extract_sql() " + "method" + ) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + """ + Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or + 'second', return the SQL that truncates the given datetime field + field_name to a datetime object with only the given specificity. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a datetime_trunc_sql() " + "method" + ) + + def time_trunc_sql(self, lookup_type, field_name, tzname=None): + """ + Given a lookup_type of 'hour', 'minute' or 'second', return the SQL + that truncates the given time or datetime field field_name to a time + object with only the given specificity. + + If `tzname` is provided, the given value is truncated in a specific + timezone. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a time_trunc_sql() method" + ) + + def time_extract_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'hour', 'minute', or 'second', return the SQL + that extracts a value from the given time field field_name. + """ + return self.date_extract_sql(lookup_type, field_name) + + def deferrable_sql(self): + """ + Return the SQL to make a constraint "initially deferred" during a + CREATE TABLE statement. + """ + return "" + + def distinct_sql(self, fields, params): + """ + Return an SQL DISTINCT clause which removes duplicate rows from the + result set. If any fields are given, only check the given fields for + duplicates. + """ + if fields: + raise NotSupportedError( + "DISTINCT ON fields is not supported by this database backend" + ) + else: + return ["DISTINCT"], [] + + def fetch_returned_insert_columns(self, cursor, returning_params): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table, return the newly created data. + """ + return cursor.fetchone() + + def field_cast_sql(self, db_type, internal_type): + """ + Given a column type (e.g. 'BLOB', 'VARCHAR') and an internal type + (e.g. 'GenericIPAddressField'), return the SQL to cast it before using + it in a WHERE statement. The resulting string should contain a '%s' + placeholder for the column being searched against. + """ + return "%s" + + def force_no_ordering(self): + """ + Return a list used in the "ORDER BY" clause to force no ordering at + all. Return an empty list to include nothing in the ordering. + """ + return [] + + def for_update_sql(self, nowait=False, skip_locked=False, of=(), no_key=False): + """ + Return the FOR UPDATE SQL clause to lock rows for an update operation. + """ + return "FOR%s UPDATE%s%s%s" % ( + " NO KEY" if no_key else "", + " OF %s" % ", ".join(of) if of else "", + " NOWAIT" if nowait else "", + " SKIP LOCKED" if skip_locked else "", + ) + + def _get_limit_offset_params(self, low_mark, high_mark): + offset = low_mark or 0 + if high_mark is not None: + return (high_mark - offset), offset + elif offset: + return self.connection.ops.no_limit_value(), offset + return None, offset + + def limit_offset_sql(self, low_mark, high_mark): + """Return LIMIT/OFFSET SQL clause.""" + limit, offset = self._get_limit_offset_params(low_mark, high_mark) + return " ".join( + sql + for sql in ( + ("LIMIT %d" % limit) if limit else None, + ("OFFSET %d" % offset) if offset else None, + ) + if sql + ) + + def last_executed_query(self, cursor, sql, params): + """ + Return a string of the query last executed by the given cursor, with + placeholders replaced with actual values. + + `sql` is the raw query containing placeholders and `params` is the + sequence of parameters. These are used by default, but this method + exists for database backends to provide a better implementation + according to their own quoting schemes. + """ + # Convert params to contain string values. + def to_string(s): + return force_str(s, strings_only=True, errors="replace") + + if isinstance(params, (list, tuple)): + u_params = tuple(to_string(val) for val in params) + elif params is None: + u_params = () + else: + u_params = {to_string(k): to_string(v) for k, v in params.items()} + + return "QUERY = %r - PARAMS = %r" % (sql, u_params) + + def last_insert_id(self, cursor, table_name, pk_name): + """ + Given a cursor object that has just performed an INSERT statement into + a table that has an auto-incrementing ID, return the newly created ID. + + `pk_name` is the name of the primary-key column. + """ + return cursor.lastrowid + + def lookup_cast(self, lookup_type, internal_type=None): + """ + Return the string to use in a query when performing lookups + ("contains", "like", etc.). It should contain a '%s' placeholder for + the column being searched against. + """ + return "%s" + + def max_in_list_size(self): + """ + Return the maximum number of items that can be passed in a single 'IN' + list condition, or None if the backend does not impose a limit. + """ + return None + + def max_name_length(self): + """ + Return the maximum length of table and column names, or None if there + is no limit. + """ + return None + + def no_limit_value(self): + """ + Return the value to use for the LIMIT when we are wanting "LIMIT + infinity". Return None if the limit clause can be omitted in this case. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a no_limit_value() method" + ) + + def pk_default_value(self): + """ + Return the value to use during an INSERT statement to specify that + the field should use its default value. + """ + return "DEFAULT" + + def prepare_sql_script(self, sql): + """ + Take an SQL script that may contain multiple lines and return a list + of statements to feed to successive cursor.execute() calls. + + Since few databases are able to process raw SQL scripts in a single + cursor.execute() call and PEP 249 doesn't talk about this use case, + the default implementation is conservative. + """ + return [ + sqlparse.format(statement, strip_comments=True) + for statement in sqlparse.split(sql) + if statement + ] + + def process_clob(self, value): + """ + Return the value of a CLOB column, for backends that return a locator + object that requires additional processing. + """ + return value + + def return_insert_columns(self, fields): + """ + For backends that support returning columns as part of an insert query, + return the SQL and params to append to the INSERT query. The returned + fragment should contain a format string to hold the appropriate column. + """ + pass + + def compiler(self, compiler_name): + """ + Return the SQLCompiler class corresponding to the given name, + in the namespace corresponding to the `compiler_module` attribute + on this backend. + """ + if self._cache is None: + self._cache = import_module(self.compiler_module) + return getattr(self._cache, compiler_name) + + def quote_name(self, name): + """ + Return a quoted version of the given table, index, or column name. Do + not quote the given name if it's already been quoted. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a quote_name() method" + ) + + def regex_lookup(self, lookup_type): + """ + Return the string to use in a query when performing regular expression + lookups (using "regex" or "iregex"). It should contain a '%s' + placeholder for the column being searched against. + + If the feature is not supported (or part of it is not supported), raise + NotImplementedError. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations may require a regex_lookup() method" + ) + + def savepoint_create_sql(self, sid): + """ + Return the SQL for starting a new savepoint. Only required if the + "uses_savepoints" feature is True. The "sid" parameter is a string + for the savepoint id. + """ + return "SAVEPOINT %s" % self.quote_name(sid) + + def savepoint_commit_sql(self, sid): + """ + Return the SQL for committing the given savepoint. + """ + return "RELEASE SAVEPOINT %s" % self.quote_name(sid) + + def savepoint_rollback_sql(self, sid): + """ + Return the SQL for rolling back the given savepoint. + """ + return "ROLLBACK TO SAVEPOINT %s" % self.quote_name(sid) + + def set_time_zone_sql(self): + """ + Return the SQL that will set the connection's time zone. + + Return '' if the backend doesn't support time zones. + """ + return "" + + def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False): + """ + Return a list of SQL statements required to remove all data from + the given database tables (without actually removing the tables + themselves). + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + + If `reset_sequences` is True, the list includes SQL statements required + to reset the sequences. + + The `allow_cascade` argument determines whether truncation may cascade + to tables with foreign keys pointing the tables being truncated. + PostgreSQL requires a cascade even if these tables are empty. + """ + raise NotImplementedError( + "subclasses of BaseDatabaseOperations must provide an sql_flush() method" + ) + + def execute_sql_flush(self, sql_list): + """Execute a list of SQL statements to flush the database.""" + with transaction.atomic( + using=self.connection.alias, + savepoint=self.connection.features.can_rollback_ddl, + ): + with self.connection.cursor() as cursor: + for sql in sql_list: + cursor.execute(sql) + + def sequence_reset_by_name_sql(self, style, sequences): + """ + Return a list of the SQL statements required to reset sequences + passed in `sequences`. + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + """ + return [] + + def sequence_reset_sql(self, style, model_list): + """ + Return a list of the SQL statements required to reset sequences for + the given models. + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + """ + return [] # No sequence reset required by default. + + def start_transaction_sql(self): + """Return the SQL statement required to start a transaction.""" + return "BEGIN;" + + def end_transaction_sql(self, success=True): + """Return the SQL statement required to end a transaction.""" + if not success: + return "ROLLBACK;" + return "COMMIT;" + + def tablespace_sql(self, tablespace, inline=False): + """ + Return the SQL that will be used in a query to define the tablespace. + + Return '' if the backend doesn't support tablespaces. + + If `inline` is True, append the SQL to a row; otherwise append it to + the entire CREATE TABLE or CREATE INDEX statement. + """ + return "" + + def prep_for_like_query(self, x): + """Prepare a value for use in a LIKE query.""" + return str(x).replace("\\", "\\\\").replace("%", r"\%").replace("_", r"\_") + + # Same as prep_for_like_query(), but called for "iexact" matches, which + # need not necessarily be implemented using "LIKE" in the backend. + prep_for_iexact_query = prep_for_like_query + + def validate_autopk_value(self, value): + """ + Certain backends do not accept some values for "serial" fields + (for example zero in MySQL). Raise a ValueError if the value is + invalid, otherwise return the validated value. + """ + return value + + def adapt_unknown_value(self, value): + """ + Transform a value to something compatible with the backend driver. + + This method only depends on the type of the value. It's designed for + cases where the target type isn't known, such as .raw() SQL queries. + As a consequence it may not work perfectly in all circumstances. + """ + if isinstance(value, datetime.datetime): # must be before date + return self.adapt_datetimefield_value(value) + elif isinstance(value, datetime.date): + return self.adapt_datefield_value(value) + elif isinstance(value, datetime.time): + return self.adapt_timefield_value(value) + elif isinstance(value, decimal.Decimal): + return self.adapt_decimalfield_value(value) + else: + return value + + def adapt_datefield_value(self, value): + """ + Transform a date value to an object compatible with what is expected + by the backend driver for date columns. + """ + if value is None: + return None + return str(value) + + def adapt_datetimefield_value(self, value): + """ + Transform a datetime value to an object compatible with what is expected + by the backend driver for datetime columns. + """ + if value is None: + return None + return str(value) + + def adapt_timefield_value(self, value): + """ + Transform a time value to an object compatible with what is expected + by the backend driver for time columns. + """ + if value is None: + return None + if timezone.is_aware(value): + raise ValueError("Django does not support timezone-aware times.") + return str(value) + + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + """ + Transform a decimal.Decimal value to an object compatible with what is + expected by the backend driver for decimal (numeric) columns. + """ + return utils.format_number(value, max_digits, decimal_places) + + def adapt_ipaddressfield_value(self, value): + """ + Transform a string representation of an IP address into the expected + type for the backend driver. + """ + return value or None + + def year_lookup_bounds_for_date_field(self, value, iso_year=False): + """ + Return a two-elements list with the lower and upper bound to be used + with a BETWEEN operator to query a DateField value using a year + lookup. + + `value` is an int, containing the looked-up year. + If `iso_year` is True, return bounds for ISO-8601 week-numbering years. + """ + if iso_year: + first = datetime.date.fromisocalendar(value, 1, 1) + second = datetime.date.fromisocalendar( + value + 1, 1, 1 + ) - datetime.timedelta(days=1) + else: + first = datetime.date(value, 1, 1) + second = datetime.date(value, 12, 31) + first = self.adapt_datefield_value(first) + second = self.adapt_datefield_value(second) + return [first, second] + + def year_lookup_bounds_for_datetime_field(self, value, iso_year=False): + """ + Return a two-elements list with the lower and upper bound to be used + with a BETWEEN operator to query a DateTimeField value using a year + lookup. + + `value` is an int, containing the looked-up year. + If `iso_year` is True, return bounds for ISO-8601 week-numbering years. + """ + if iso_year: + first = datetime.datetime.fromisocalendar(value, 1, 1) + second = datetime.datetime.fromisocalendar( + value + 1, 1, 1 + ) - datetime.timedelta(microseconds=1) + else: + first = datetime.datetime(value, 1, 1) + second = datetime.datetime(value, 12, 31, 23, 59, 59, 999999) + if settings.USE_TZ: + tz = timezone.get_current_timezone() + first = timezone.make_aware(first, tz) + second = timezone.make_aware(second, tz) + first = self.adapt_datetimefield_value(first) + second = self.adapt_datetimefield_value(second) + return [first, second] + + def get_db_converters(self, expression): + """ + Return a list of functions needed to convert field data. + + Some field types on some backends do not provide data in the correct + format, this is the hook for converter functions. + """ + return [] + + def convert_durationfield_value(self, value, expression, connection): + if value is not None: + return datetime.timedelta(0, 0, value) + + def check_expression_support(self, expression): + """ + Check that the backend supports the provided expression. + + This is used on specific backends to rule out known expressions + that have problematic or nonexistent implementations. If the + expression has a known problem, the backend should raise + NotSupportedError. + """ + pass + + def conditional_expression_supported_in_where_clause(self, expression): + """ + Return True, if the conditional expression is supported in the WHERE + clause. + """ + return True + + def combine_expression(self, connector, sub_expressions): + """ + Combine a list of subexpressions into a single expression, using + the provided connecting operator. This is required because operators + can vary between backends (e.g., Oracle with %% and &) and between + subexpression types (e.g., date expressions). + """ + conn = " %s " % connector + return conn.join(sub_expressions) + + def combine_duration_expression(self, connector, sub_expressions): + return self.combine_expression(connector, sub_expressions) + + def binary_placeholder_sql(self, value): + """ + Some backends require special syntax to insert binary content (MySQL + for example uses '_binary %s'). + """ + return "%s" + + def modify_insert_params(self, placeholder, params): + """ + Allow modification of insert parameters. Needed for Oracle Spatial + backend due to #10888. + """ + return params + + def integer_field_range(self, internal_type): + """ + Given an integer field internal type (e.g. 'PositiveIntegerField'), + return a tuple of the (min_value, max_value) form representing the + range of the column type bound to the field. + """ + return self.integer_field_ranges[internal_type] + + def subtract_temporals(self, internal_type, lhs, rhs): + if self.connection.features.supports_temporal_subtraction: + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + return "(%s - %s)" % (lhs_sql, rhs_sql), (*lhs_params, *rhs_params) + raise NotSupportedError( + "This backend does not support %s subtraction." % internal_type + ) + + def window_frame_start(self, start): + if isinstance(start, int): + if start < 0: + return "%d %s" % (abs(start), self.PRECEDING) + elif start == 0: + return self.CURRENT_ROW + elif start is None: + return self.UNBOUNDED_PRECEDING + raise ValueError( + "start argument must be a negative integer, zero, or None, but got '%s'." + % start + ) + + def window_frame_end(self, end): + if isinstance(end, int): + if end == 0: + return self.CURRENT_ROW + elif end > 0: + return "%d %s" % (end, self.FOLLOWING) + elif end is None: + return self.UNBOUNDED_FOLLOWING + raise ValueError( + "end argument must be a positive integer, zero, or None, but got '%s'." + % end + ) + + def window_frame_rows_start_end(self, start=None, end=None): + """ + Return SQL for start and end points in an OVER clause window frame. + """ + if not self.connection.features.supports_over_clause: + raise NotSupportedError("This backend does not support window expressions.") + return self.window_frame_start(start), self.window_frame_end(end) + + def window_frame_range_start_end(self, start=None, end=None): + start_, end_ = self.window_frame_rows_start_end(start, end) + features = self.connection.features + if features.only_supports_unbounded_with_preceding_and_following and ( + (start and start < 0) or (end and end > 0) + ): + raise NotSupportedError( + "%s only supports UNBOUNDED together with PRECEDING and " + "FOLLOWING." % self.connection.display_name + ) + return start_, end_ + + def explain_query_prefix(self, format=None, **options): + if not self.connection.features.supports_explaining_query_execution: + raise NotSupportedError( + "This backend does not support explaining query execution." + ) + if format: + supported_formats = self.connection.features.supported_explain_formats + normalized_format = format.upper() + if normalized_format not in supported_formats: + msg = "%s is not a recognized format." % normalized_format + if supported_formats: + msg += " Allowed formats: %s" % ", ".join(sorted(supported_formats)) + raise ValueError(msg) + if options: + raise ValueError("Unknown options: %s" % ", ".join(sorted(options.keys()))) + return self.explain_prefix + + def insert_statement(self, ignore_conflicts=False): + return "INSERT INTO" + + def ignore_conflicts_suffix_sql(self, ignore_conflicts=None): + return "" diff --git a/venv/Lib/site-packages/django/db/backends/base/schema.py b/venv/Lib/site-packages/django/db/backends/base/schema.py new file mode 100644 index 000000000..fd8211ec2 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/schema.py @@ -0,0 +1,1689 @@ +import logging +from datetime import datetime + +from django.db.backends.ddl_references import ( + Columns, + Expressions, + ForeignKeyName, + IndexName, + Statement, + Table, +) +from django.db.backends.utils import names_digest, split_identifier +from django.db.models import Deferrable, Index +from django.db.models.sql import Query +from django.db.transaction import TransactionManagementError, atomic +from django.utils import timezone + +logger = logging.getLogger("django.db.backends.schema") + + +def _is_relevant_relation(relation, altered_field): + """ + When altering the given field, must constraints on its model from the given + relation be temporarily dropped? + """ + field = relation.field + if field.many_to_many: + # M2M reverse field + return False + if altered_field.primary_key and field.to_fields == [None]: + # Foreign key constraint on the primary key, which is being altered. + return True + # Is the constraint targeting the field being altered? + return altered_field.name in field.to_fields + + +def _all_related_fields(model): + return model._meta._get_fields( + forward=False, + reverse=True, + include_hidden=True, + include_parents=False, + ) + + +def _related_non_m2m_objects(old_field, new_field): + # Filter out m2m objects from reverse relations. + # Return (old_relation, new_relation) tuples. + related_fields = zip( + ( + obj + for obj in _all_related_fields(old_field.model) + if _is_relevant_relation(obj, old_field) + ), + ( + obj + for obj in _all_related_fields(new_field.model) + if _is_relevant_relation(obj, new_field) + ), + ) + for old_rel, new_rel in related_fields: + yield old_rel, new_rel + yield from _related_non_m2m_objects( + old_rel.remote_field, + new_rel.remote_field, + ) + + +class BaseDatabaseSchemaEditor: + """ + This class and its subclasses are responsible for emitting schema-changing + statements to the databases - model creation/removal/alteration, field + renaming, index fiddling, and so on. + """ + + # Overrideable SQL templates + sql_create_table = "CREATE TABLE %(table)s (%(definition)s)" + sql_rename_table = "ALTER TABLE %(old_table)s RENAME TO %(new_table)s" + sql_retablespace_table = "ALTER TABLE %(table)s SET TABLESPACE %(new_tablespace)s" + sql_delete_table = "DROP TABLE %(table)s CASCADE" + + sql_create_column = "ALTER TABLE %(table)s ADD COLUMN %(column)s %(definition)s" + sql_alter_column = "ALTER TABLE %(table)s %(changes)s" + sql_alter_column_type = "ALTER COLUMN %(column)s TYPE %(type)s" + sql_alter_column_null = "ALTER COLUMN %(column)s DROP NOT NULL" + sql_alter_column_not_null = "ALTER COLUMN %(column)s SET NOT NULL" + sql_alter_column_default = "ALTER COLUMN %(column)s SET DEFAULT %(default)s" + sql_alter_column_no_default = "ALTER COLUMN %(column)s DROP DEFAULT" + sql_alter_column_no_default_null = sql_alter_column_no_default + sql_alter_column_collate = "ALTER COLUMN %(column)s TYPE %(type)s%(collation)s" + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s CASCADE" + sql_rename_column = ( + "ALTER TABLE %(table)s RENAME COLUMN %(old_column)s TO %(new_column)s" + ) + sql_update_with_default = ( + "UPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULL" + ) + + sql_unique_constraint = "UNIQUE (%(columns)s)%(deferrable)s" + sql_check_constraint = "CHECK (%(check)s)" + sql_delete_constraint = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + sql_constraint = "CONSTRAINT %(name)s %(constraint)s" + + sql_create_check = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s CHECK (%(check)s)" + sql_delete_check = sql_delete_constraint + + sql_create_unique = ( + "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s " + "UNIQUE (%(columns)s)%(deferrable)s" + ) + sql_delete_unique = sql_delete_constraint + + sql_create_fk = ( + "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) " + "REFERENCES %(to_table)s (%(to_column)s)%(deferrable)s" + ) + sql_create_inline_fk = None + sql_create_column_inline_fk = None + sql_delete_fk = sql_delete_constraint + + sql_create_index = ( + "CREATE INDEX %(name)s ON %(table)s " + "(%(columns)s)%(include)s%(extra)s%(condition)s" + ) + sql_create_unique_index = ( + "CREATE UNIQUE INDEX %(name)s ON %(table)s " + "(%(columns)s)%(include)s%(condition)s" + ) + sql_delete_index = "DROP INDEX %(name)s" + + sql_create_pk = ( + "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)" + ) + sql_delete_pk = sql_delete_constraint + + sql_delete_procedure = "DROP PROCEDURE %(procedure)s" + + def __init__(self, connection, collect_sql=False, atomic=True): + self.connection = connection + self.collect_sql = collect_sql + if self.collect_sql: + self.collected_sql = [] + self.atomic_migration = self.connection.features.can_rollback_ddl and atomic + + # State-managing methods + + def __enter__(self): + self.deferred_sql = [] + if self.atomic_migration: + self.atomic = atomic(self.connection.alias) + self.atomic.__enter__() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type is None: + for sql in self.deferred_sql: + self.execute(sql) + if self.atomic_migration: + self.atomic.__exit__(exc_type, exc_value, traceback) + + # Core utility functions + + def execute(self, sql, params=()): + """Execute the given SQL statement, with optional parameters.""" + # Don't perform the transactional DDL check if SQL is being collected + # as it's not going to be executed anyway. + if ( + not self.collect_sql + and self.connection.in_atomic_block + and not self.connection.features.can_rollback_ddl + ): + raise TransactionManagementError( + "Executing DDL statements while in a transaction on databases " + "that can't perform a rollback is prohibited." + ) + # Account for non-string statement objects. + sql = str(sql) + # Log the command we're running, then run it + logger.debug( + "%s; (params %r)", sql, params, extra={"params": params, "sql": sql} + ) + if self.collect_sql: + ending = "" if sql.rstrip().endswith(";") else ";" + if params is not None: + self.collected_sql.append( + (sql % tuple(map(self.quote_value, params))) + ending + ) + else: + self.collected_sql.append(sql + ending) + else: + with self.connection.cursor() as cursor: + cursor.execute(sql, params) + + def quote_name(self, name): + return self.connection.ops.quote_name(name) + + def table_sql(self, model): + """Take a model and return its table definition.""" + # Add any unique_togethers (always deferred, as some fields might be + # created afterward, like geometry fields with some backends). + for field_names in model._meta.unique_together: + fields = [model._meta.get_field(field) for field in field_names] + self.deferred_sql.append(self._create_unique_sql(model, fields)) + # Create column SQL, add FK deferreds if needed. + column_sqls = [] + params = [] + for field in model._meta.local_fields: + # SQL. + definition, extra_params = self.column_sql(model, field) + if definition is None: + continue + # Check constraints can go on the column SQL here. + db_params = field.db_parameters(connection=self.connection) + if db_params["check"]: + definition += " " + self.sql_check_constraint % db_params + # Autoincrement SQL (for backends with inline variant). + col_type_suffix = field.db_type_suffix(connection=self.connection) + if col_type_suffix: + definition += " %s" % col_type_suffix + params.extend(extra_params) + # FK. + if field.remote_field and field.db_constraint: + to_table = field.remote_field.model._meta.db_table + to_column = field.remote_field.model._meta.get_field( + field.remote_field.field_name + ).column + if self.sql_create_inline_fk: + definition += " " + self.sql_create_inline_fk % { + "to_table": self.quote_name(to_table), + "to_column": self.quote_name(to_column), + } + elif self.connection.features.supports_foreign_keys: + self.deferred_sql.append( + self._create_fk_sql( + model, field, "_fk_%(to_table)s_%(to_column)s" + ) + ) + # Add the SQL to our big list. + column_sqls.append( + "%s %s" + % ( + self.quote_name(field.column), + definition, + ) + ) + # Autoincrement SQL (for backends with post table definition + # variant). + if field.get_internal_type() in ( + "AutoField", + "BigAutoField", + "SmallAutoField", + ): + autoinc_sql = self.connection.ops.autoinc_sql( + model._meta.db_table, field.column + ) + if autoinc_sql: + self.deferred_sql.extend(autoinc_sql) + constraints = [ + constraint.constraint_sql(model, self) + for constraint in model._meta.constraints + ] + sql = self.sql_create_table % { + "table": self.quote_name(model._meta.db_table), + "definition": ", ".join( + constraint for constraint in (*column_sqls, *constraints) if constraint + ), + } + if model._meta.db_tablespace: + tablespace_sql = self.connection.ops.tablespace_sql( + model._meta.db_tablespace + ) + if tablespace_sql: + sql += " " + tablespace_sql + return sql, params + + # Field <-> database mapping functions + + def _iter_column_sql(self, column_db_type, params, model, field, include_default): + yield column_db_type + collation = getattr(field, "db_collation", None) + if collation: + yield self._collate_sql(collation) + # Work out nullability. + null = field.null + # Include a default value, if requested. + include_default = ( + include_default + and not self.skip_default(field) + and + # Don't include a default value if it's a nullable field and the + # default cannot be dropped in the ALTER COLUMN statement (e.g. + # MySQL longtext and longblob). + not (null and self.skip_default_on_alter(field)) + ) + if include_default: + default_value = self.effective_default(field) + if default_value is not None: + column_default = "DEFAULT " + self._column_default_sql(field) + if self.connection.features.requires_literal_defaults: + # Some databases can't take defaults as a parameter (Oracle). + # If this is the case, the individual schema backend should + # implement prepare_default(). + yield column_default % self.prepare_default(default_value) + else: + yield column_default + params.append(default_value) + # Oracle treats the empty string ('') as null, so coerce the null + # option whenever '' is a possible value. + if ( + field.empty_strings_allowed + and not field.primary_key + and self.connection.features.interprets_empty_strings_as_nulls + ): + null = True + if not null: + yield "NOT NULL" + elif not self.connection.features.implied_column_null: + yield "NULL" + if field.primary_key: + yield "PRIMARY KEY" + elif field.unique: + yield "UNIQUE" + # Optionally add the tablespace if it's an implicitly indexed column. + tablespace = field.db_tablespace or model._meta.db_tablespace + if ( + tablespace + and self.connection.features.supports_tablespaces + and field.unique + ): + yield self.connection.ops.tablespace_sql(tablespace, inline=True) + + def column_sql(self, model, field, include_default=False): + """ + Return the column definition for a field. The field must already have + had set_attributes_from_name() called. + """ + # Get the column's type and use that as the basis of the SQL. + db_params = field.db_parameters(connection=self.connection) + column_db_type = db_params["type"] + # Check for fields that aren't actually columns (e.g. M2M). + if column_db_type is None: + return None, None + params = [] + return ( + " ".join( + # This appends to the params being returned. + self._iter_column_sql( + column_db_type, params, model, field, include_default + ) + ), + params, + ) + + def skip_default(self, field): + """ + Some backends don't accept default values for certain columns types + (i.e. MySQL longtext and longblob). + """ + return False + + def skip_default_on_alter(self, field): + """ + Some backends don't accept default values for certain columns types + (i.e. MySQL longtext and longblob) in the ALTER COLUMN statement. + """ + return False + + def prepare_default(self, value): + """ + Only used for backends which have requires_literal_defaults feature + """ + raise NotImplementedError( + "subclasses of BaseDatabaseSchemaEditor for backends which have " + "requires_literal_defaults must provide a prepare_default() method" + ) + + def _column_default_sql(self, field): + """ + Return the SQL to use in a DEFAULT clause. The resulting string should + contain a '%s' placeholder for a default value. + """ + return "%s" + + @staticmethod + def _effective_default(field): + # This method allows testing its logic without a connection. + if field.has_default(): + default = field.get_default() + elif not field.null and field.blank and field.empty_strings_allowed: + if field.get_internal_type() == "BinaryField": + default = b"" + else: + default = "" + elif getattr(field, "auto_now", False) or getattr(field, "auto_now_add", False): + internal_type = field.get_internal_type() + if internal_type == "DateTimeField": + default = timezone.now() + else: + default = datetime.now() + if internal_type == "DateField": + default = default.date() + elif internal_type == "TimeField": + default = default.time() + else: + default = None + return default + + def effective_default(self, field): + """Return a field's effective database default value.""" + return field.get_db_prep_save(self._effective_default(field), self.connection) + + def quote_value(self, value): + """ + Return a quoted version of the value so it's safe to use in an SQL + string. This is not safe against injection from user code; it is + intended only for use in making SQL scripts or preparing default values + for particularly tricky backends (defaults are not user-defined, though, + so this is safe). + """ + raise NotImplementedError() + + # Actions + + def create_model(self, model): + """ + Create a table and any accompanying indexes or unique constraints for + the given `model`. + """ + sql, params = self.table_sql(model) + # Prevent using [] as params, in the case a literal '%' is used in the + # definition. + self.execute(sql, params or None) + + # Add any field index and index_together's (deferred as SQLite + # _remake_table needs it). + self.deferred_sql.extend(self._model_indexes_sql(model)) + + # Make M2M tables + for field in model._meta.local_many_to_many: + if field.remote_field.through._meta.auto_created: + self.create_model(field.remote_field.through) + + def delete_model(self, model): + """Delete a model from the database.""" + # Handle auto-created intermediary models + for field in model._meta.local_many_to_many: + if field.remote_field.through._meta.auto_created: + self.delete_model(field.remote_field.through) + + # Delete the table + self.execute( + self.sql_delete_table + % { + "table": self.quote_name(model._meta.db_table), + } + ) + # Remove all deferred statements referencing the deleted table. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_table( + model._meta.db_table + ): + self.deferred_sql.remove(sql) + + def add_index(self, model, index): + """Add an index on a model.""" + if ( + index.contains_expressions + and not self.connection.features.supports_expression_indexes + ): + return None + # Index.create_sql returns interpolated SQL which makes params=None a + # necessity to avoid escaping attempts on execution. + self.execute(index.create_sql(model, self), params=None) + + def remove_index(self, model, index): + """Remove an index from a model.""" + if ( + index.contains_expressions + and not self.connection.features.supports_expression_indexes + ): + return None + self.execute(index.remove_sql(model, self)) + + def add_constraint(self, model, constraint): + """Add a constraint to a model.""" + sql = constraint.create_sql(model, self) + if sql: + # Constraint.create_sql returns interpolated SQL which makes + # params=None a necessity to avoid escaping attempts on execution. + self.execute(sql, params=None) + + def remove_constraint(self, model, constraint): + """Remove a constraint from a model.""" + sql = constraint.remove_sql(model, self) + if sql: + self.execute(sql) + + def alter_unique_together(self, model, old_unique_together, new_unique_together): + """ + Deal with a model changing its unique_together. The input + unique_togethers must be doubly-nested, not the single-nested + ["foo", "bar"] format. + """ + olds = {tuple(fields) for fields in old_unique_together} + news = {tuple(fields) for fields in new_unique_together} + # Deleted uniques + for fields in olds.difference(news): + self._delete_composed_index( + model, fields, {"unique": True}, self.sql_delete_unique + ) + # Created uniques + for field_names in news.difference(olds): + fields = [model._meta.get_field(field) for field in field_names] + self.execute(self._create_unique_sql(model, fields)) + + def alter_index_together(self, model, old_index_together, new_index_together): + """ + Deal with a model changing its index_together. The input + index_togethers must be doubly-nested, not the single-nested + ["foo", "bar"] format. + """ + olds = {tuple(fields) for fields in old_index_together} + news = {tuple(fields) for fields in new_index_together} + # Deleted indexes + for fields in olds.difference(news): + self._delete_composed_index( + model, + fields, + {"index": True, "unique": False}, + self.sql_delete_index, + ) + # Created indexes + for field_names in news.difference(olds): + fields = [model._meta.get_field(field) for field in field_names] + self.execute(self._create_index_sql(model, fields=fields, suffix="_idx")) + + def _delete_composed_index(self, model, fields, constraint_kwargs, sql): + meta_constraint_names = { + constraint.name for constraint in model._meta.constraints + } + meta_index_names = {constraint.name for constraint in model._meta.indexes} + columns = [model._meta.get_field(field).column for field in fields] + constraint_names = self._constraint_names( + model, + columns, + exclude=meta_constraint_names | meta_index_names, + **constraint_kwargs, + ) + if len(constraint_names) != 1: + raise ValueError( + "Found wrong number (%s) of constraints for %s(%s)" + % ( + len(constraint_names), + model._meta.db_table, + ", ".join(columns), + ) + ) + self.execute(self._delete_constraint_sql(sql, model, constraint_names[0])) + + def alter_db_table(self, model, old_db_table, new_db_table): + """Rename the table a model points to.""" + if old_db_table == new_db_table or ( + self.connection.features.ignores_table_name_case + and old_db_table.lower() == new_db_table.lower() + ): + return + self.execute( + self.sql_rename_table + % { + "old_table": self.quote_name(old_db_table), + "new_table": self.quote_name(new_db_table), + } + ) + # Rename all references to the old table name. + for sql in self.deferred_sql: + if isinstance(sql, Statement): + sql.rename_table_references(old_db_table, new_db_table) + + def alter_db_tablespace(self, model, old_db_tablespace, new_db_tablespace): + """Move a model's table between tablespaces.""" + self.execute( + self.sql_retablespace_table + % { + "table": self.quote_name(model._meta.db_table), + "old_tablespace": self.quote_name(old_db_tablespace), + "new_tablespace": self.quote_name(new_db_tablespace), + } + ) + + def add_field(self, model, field): + """ + Create a field on a model. Usually involves adding a column, but may + involve adding a table instead (for M2M fields). + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.create_model(field.remote_field.through) + # Get the column's definition + definition, params = self.column_sql(model, field, include_default=True) + # It might not actually have a column behind it + if definition is None: + return + # Check constraints can go on the column SQL here + db_params = field.db_parameters(connection=self.connection) + if db_params["check"]: + definition += " " + self.sql_check_constraint % db_params + if ( + field.remote_field + and self.connection.features.supports_foreign_keys + and field.db_constraint + ): + constraint_suffix = "_fk_%(to_table)s_%(to_column)s" + # Add FK constraint inline, if supported. + if self.sql_create_column_inline_fk: + to_table = field.remote_field.model._meta.db_table + to_column = field.remote_field.model._meta.get_field( + field.remote_field.field_name + ).column + namespace, _ = split_identifier(model._meta.db_table) + definition += " " + self.sql_create_column_inline_fk % { + "name": self._fk_constraint_name(model, field, constraint_suffix), + "namespace": "%s." % self.quote_name(namespace) + if namespace + else "", + "column": self.quote_name(field.column), + "to_table": self.quote_name(to_table), + "to_column": self.quote_name(to_column), + "deferrable": self.connection.ops.deferrable_sql(), + } + # Otherwise, add FK constraints later. + else: + self.deferred_sql.append( + self._create_fk_sql(model, field, constraint_suffix) + ) + # Build the SQL and run it + sql = self.sql_create_column % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + "definition": definition, + } + self.execute(sql, params) + # Drop the default if we need to + # (Django usually does not use in-database defaults) + if ( + not self.skip_default_on_alter(field) + and self.effective_default(field) is not None + ): + changes_sql, params = self._alter_column_default_sql( + model, None, field, drop=True + ) + sql = self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": changes_sql, + } + self.execute(sql, params) + # Add an index, if required + self.deferred_sql.extend(self._field_indexes_sql(model, field)) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + + def remove_field(self, model, field): + """ + Remove a field from a model. Usually involves deleting a column, + but for M2Ms may involve deleting a table. + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.delete_model(field.remote_field.through) + # It might not actually have a column behind it + if field.db_parameters(connection=self.connection)["type"] is None: + return + # Drop any FK constraints, MySQL requires explicit deletion + if field.remote_field: + fk_names = self._constraint_names(model, [field.column], foreign_key=True) + for fk_name in fk_names: + self.execute(self._delete_fk_sql(model, fk_name)) + # Delete the column + sql = self.sql_delete_column % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + } + self.execute(sql) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + # Remove all deferred statements referencing the deleted column. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_column( + model._meta.db_table, field.column + ): + self.deferred_sql.remove(sql) + + def alter_field(self, model, old_field, new_field, strict=False): + """ + Allow a field's type, uniqueness, nullability, default, column, + constraints, etc. to be modified. + `old_field` is required to compute the necessary changes. + If `strict` is True, raise errors if the old column does not match + `old_field` precisely. + """ + if not self._field_should_be_altered(old_field, new_field): + return + # Ensure this field is even column-based + old_db_params = old_field.db_parameters(connection=self.connection) + old_type = old_db_params["type"] + new_db_params = new_field.db_parameters(connection=self.connection) + new_type = new_db_params["type"] + if (old_type is None and old_field.remote_field is None) or ( + new_type is None and new_field.remote_field is None + ): + raise ValueError( + "Cannot alter field %s into %s - they do not properly define " + "db_type (are you using a badly-written custom field?)" + % (old_field, new_field), + ) + elif ( + old_type is None + and new_type is None + and ( + old_field.remote_field.through + and new_field.remote_field.through + and old_field.remote_field.through._meta.auto_created + and new_field.remote_field.through._meta.auto_created + ) + ): + return self._alter_many_to_many(model, old_field, new_field, strict) + elif ( + old_type is None + and new_type is None + and ( + old_field.remote_field.through + and new_field.remote_field.through + and not old_field.remote_field.through._meta.auto_created + and not new_field.remote_field.through._meta.auto_created + ) + ): + # Both sides have through models; this is a no-op. + return + elif old_type is None or new_type is None: + raise ValueError( + "Cannot alter field %s into %s - they are not compatible types " + "(you cannot alter to or from M2M fields, or add or remove " + "through= on M2M fields)" % (old_field, new_field) + ) + + self._alter_field( + model, + old_field, + new_field, + old_type, + new_type, + old_db_params, + new_db_params, + strict, + ) + + def _alter_field( + self, + model, + old_field, + new_field, + old_type, + new_type, + old_db_params, + new_db_params, + strict=False, + ): + """Perform a "physical" (non-ManyToMany) field update.""" + # Drop any FK constraints, we'll remake them later + fks_dropped = set() + if ( + self.connection.features.supports_foreign_keys + and old_field.remote_field + and old_field.db_constraint + ): + fk_names = self._constraint_names( + model, [old_field.column], foreign_key=True + ) + if strict and len(fk_names) != 1: + raise ValueError( + "Found wrong number (%s) of foreign key constraints for %s.%s" + % ( + len(fk_names), + model._meta.db_table, + old_field.column, + ) + ) + for fk_name in fk_names: + fks_dropped.add((old_field.column,)) + self.execute(self._delete_fk_sql(model, fk_name)) + # Has unique been removed? + if old_field.unique and ( + not new_field.unique or self._field_became_primary_key(old_field, new_field) + ): + # Find the unique constraint for this field + meta_constraint_names = { + constraint.name for constraint in model._meta.constraints + } + constraint_names = self._constraint_names( + model, + [old_field.column], + unique=True, + primary_key=False, + exclude=meta_constraint_names, + ) + if strict and len(constraint_names) != 1: + raise ValueError( + "Found wrong number (%s) of unique constraints for %s.%s" + % ( + len(constraint_names), + model._meta.db_table, + old_field.column, + ) + ) + for constraint_name in constraint_names: + self.execute(self._delete_unique_sql(model, constraint_name)) + # Drop incoming FK constraints if the field is a primary key or unique, + # which might be a to_field target, and things are going to change. + drop_foreign_keys = ( + self.connection.features.supports_foreign_keys + and ( + (old_field.primary_key and new_field.primary_key) + or (old_field.unique and new_field.unique) + ) + and old_type != new_type + ) + if drop_foreign_keys: + # '_meta.related_field' also contains M2M reverse fields, these + # will be filtered out + for _old_rel, new_rel in _related_non_m2m_objects(old_field, new_field): + rel_fk_names = self._constraint_names( + new_rel.related_model, [new_rel.field.column], foreign_key=True + ) + for fk_name in rel_fk_names: + self.execute(self._delete_fk_sql(new_rel.related_model, fk_name)) + # Removed an index? (no strict check, as multiple indexes are possible) + # Remove indexes if db_index switched to False or a unique constraint + # will now be used in lieu of an index. The following lines from the + # truth table show all True cases; the rest are False: + # + # old_field.db_index | old_field.unique | new_field.db_index | new_field.unique + # ------------------------------------------------------------------------------ + # True | False | False | False + # True | False | False | True + # True | False | True | True + if ( + old_field.db_index + and not old_field.unique + and (not new_field.db_index or new_field.unique) + ): + # Find the index for this field + meta_index_names = {index.name for index in model._meta.indexes} + # Retrieve only BTREE indexes since this is what's created with + # db_index=True. + index_names = self._constraint_names( + model, + [old_field.column], + index=True, + type_=Index.suffix, + exclude=meta_index_names, + ) + for index_name in index_names: + # The only way to check if an index was created with + # db_index=True or with Index(['field'], name='foo') + # is to look at its name (refs #28053). + self.execute(self._delete_index_sql(model, index_name)) + # Change check constraints? + if old_db_params["check"] != new_db_params["check"] and old_db_params["check"]: + meta_constraint_names = { + constraint.name for constraint in model._meta.constraints + } + constraint_names = self._constraint_names( + model, + [old_field.column], + check=True, + exclude=meta_constraint_names, + ) + if strict and len(constraint_names) != 1: + raise ValueError( + "Found wrong number (%s) of check constraints for %s.%s" + % ( + len(constraint_names), + model._meta.db_table, + old_field.column, + ) + ) + for constraint_name in constraint_names: + self.execute(self._delete_check_sql(model, constraint_name)) + # Have they renamed the column? + if old_field.column != new_field.column: + self.execute( + self._rename_field_sql( + model._meta.db_table, old_field, new_field, new_type + ) + ) + # Rename all references to the renamed column. + for sql in self.deferred_sql: + if isinstance(sql, Statement): + sql.rename_column_references( + model._meta.db_table, old_field.column, new_field.column + ) + # Next, start accumulating actions to do + actions = [] + null_actions = [] + post_actions = [] + # Collation change? + old_collation = getattr(old_field, "db_collation", None) + new_collation = getattr(new_field, "db_collation", None) + if old_collation != new_collation: + # Collation change handles also a type change. + fragment = self._alter_column_collation_sql( + model, new_field, new_type, new_collation + ) + actions.append(fragment) + # Type change? + elif old_type != new_type: + fragment, other_actions = self._alter_column_type_sql( + model, old_field, new_field, new_type + ) + actions.append(fragment) + post_actions.extend(other_actions) + # When changing a column NULL constraint to NOT NULL with a given + # default value, we need to perform 4 steps: + # 1. Add a default for new incoming writes + # 2. Update existing NULL rows with new default + # 3. Replace NULL constraint with NOT NULL + # 4. Drop the default again. + # Default change? + needs_database_default = False + if old_field.null and not new_field.null: + old_default = self.effective_default(old_field) + new_default = self.effective_default(new_field) + if ( + not self.skip_default_on_alter(new_field) + and old_default != new_default + and new_default is not None + ): + needs_database_default = True + actions.append( + self._alter_column_default_sql(model, old_field, new_field) + ) + # Nullability change? + if old_field.null != new_field.null: + fragment = self._alter_column_null_sql(model, old_field, new_field) + if fragment: + null_actions.append(fragment) + # Only if we have a default and there is a change from NULL to NOT NULL + four_way_default_alteration = new_field.has_default() and ( + old_field.null and not new_field.null + ) + if actions or null_actions: + if not four_way_default_alteration: + # If we don't have to do a 4-way default alteration we can + # directly run a (NOT) NULL alteration + actions = actions + null_actions + # Combine actions together if we can (e.g. postgres) + if self.connection.features.supports_combined_alters and actions: + sql, params = tuple(zip(*actions)) + actions = [(", ".join(sql), sum(params, []))] + # Apply those actions + for sql, params in actions: + self.execute( + self.sql_alter_column + % { + "table": self.quote_name(model._meta.db_table), + "changes": sql, + }, + params, + ) + if four_way_default_alteration: + # Update existing rows with default value + self.execute( + self.sql_update_with_default + % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(new_field.column), + "default": "%s", + }, + [new_default], + ) + # Since we didn't run a NOT NULL change before we need to do it + # now + for sql, params in null_actions: + self.execute( + self.sql_alter_column + % { + "table": self.quote_name(model._meta.db_table), + "changes": sql, + }, + params, + ) + if post_actions: + for sql, params in post_actions: + self.execute(sql, params) + # If primary_key changed to False, delete the primary key constraint. + if old_field.primary_key and not new_field.primary_key: + self._delete_primary_key(model, strict) + # Added a unique? + if self._unique_should_be_added(old_field, new_field): + self.execute(self._create_unique_sql(model, [new_field])) + # Added an index? Add an index if db_index switched to True or a unique + # constraint will no longer be used in lieu of an index. The following + # lines from the truth table show all True cases; the rest are False: + # + # old_field.db_index | old_field.unique | new_field.db_index | new_field.unique + # ------------------------------------------------------------------------------ + # False | False | True | False + # False | True | True | False + # True | True | True | False + if ( + (not old_field.db_index or old_field.unique) + and new_field.db_index + and not new_field.unique + ): + self.execute(self._create_index_sql(model, fields=[new_field])) + # Type alteration on primary key? Then we need to alter the column + # referring to us. + rels_to_update = [] + if drop_foreign_keys: + rels_to_update.extend(_related_non_m2m_objects(old_field, new_field)) + # Changed to become primary key? + if self._field_became_primary_key(old_field, new_field): + # Make the new one + self.execute(self._create_primary_key_sql(model, new_field)) + # Update all referencing columns + rels_to_update.extend(_related_non_m2m_objects(old_field, new_field)) + # Handle our type alters on the other end of rels from the PK stuff above + for old_rel, new_rel in rels_to_update: + rel_db_params = new_rel.field.db_parameters(connection=self.connection) + rel_type = rel_db_params["type"] + fragment, other_actions = self._alter_column_type_sql( + new_rel.related_model, old_rel.field, new_rel.field, rel_type + ) + self.execute( + self.sql_alter_column + % { + "table": self.quote_name(new_rel.related_model._meta.db_table), + "changes": fragment[0], + }, + fragment[1], + ) + for sql, params in other_actions: + self.execute(sql, params) + # Does it have a foreign key? + if ( + self.connection.features.supports_foreign_keys + and new_field.remote_field + and ( + fks_dropped or not old_field.remote_field or not old_field.db_constraint + ) + and new_field.db_constraint + ): + self.execute( + self._create_fk_sql(model, new_field, "_fk_%(to_table)s_%(to_column)s") + ) + # Rebuild FKs that pointed to us if we previously had to drop them + if drop_foreign_keys: + for _, rel in rels_to_update: + if rel.field.db_constraint: + self.execute( + self._create_fk_sql(rel.related_model, rel.field, "_fk") + ) + # Does it have check constraints we need to add? + if old_db_params["check"] != new_db_params["check"] and new_db_params["check"]: + constraint_name = self._create_index_name( + model._meta.db_table, [new_field.column], suffix="_check" + ) + self.execute( + self._create_check_sql(model, constraint_name, new_db_params["check"]) + ) + # Drop the default if we need to + # (Django usually does not use in-database defaults) + if needs_database_default: + changes_sql, params = self._alter_column_default_sql( + model, old_field, new_field, drop=True + ) + sql = self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": changes_sql, + } + self.execute(sql, params) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + + def _alter_column_null_sql(self, model, old_field, new_field): + """ + Hook to specialize column null alteration. + + Return a (sql, params) fragment to set a column to null or non-null + as required by new_field, or None if no changes are required. + """ + if ( + self.connection.features.interprets_empty_strings_as_nulls + and new_field.empty_strings_allowed + ): + # The field is nullable in the database anyway, leave it alone. + return + else: + new_db_params = new_field.db_parameters(connection=self.connection) + sql = ( + self.sql_alter_column_null + if new_field.null + else self.sql_alter_column_not_null + ) + return ( + sql + % { + "column": self.quote_name(new_field.column), + "type": new_db_params["type"], + }, + [], + ) + + def _alter_column_default_sql(self, model, old_field, new_field, drop=False): + """ + Hook to specialize column default alteration. + + Return a (sql, params) fragment to add or drop (depending on the drop + argument) a default to new_field's column. + """ + new_default = self.effective_default(new_field) + default = self._column_default_sql(new_field) + params = [new_default] + + if drop: + params = [] + elif self.connection.features.requires_literal_defaults: + # Some databases (Oracle) can't take defaults as a parameter + # If this is the case, the SchemaEditor for that database should + # implement prepare_default(). + default = self.prepare_default(new_default) + params = [] + + new_db_params = new_field.db_parameters(connection=self.connection) + if drop: + if new_field.null: + sql = self.sql_alter_column_no_default_null + else: + sql = self.sql_alter_column_no_default + else: + sql = self.sql_alter_column_default + return ( + sql + % { + "column": self.quote_name(new_field.column), + "type": new_db_params["type"], + "default": default, + }, + params, + ) + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + """ + Hook to specialize column type alteration for different backends, + for cases when a creation type is different to an alteration type + (e.g. SERIAL in PostgreSQL, PostGIS fields). + + Return a two-tuple of: an SQL fragment of (sql, params) to insert into + an ALTER TABLE statement and a list of extra (sql, params) tuples to + run once the field is altered. + """ + return ( + ( + self.sql_alter_column_type + % { + "column": self.quote_name(new_field.column), + "type": new_type, + }, + [], + ), + [], + ) + + def _alter_column_collation_sql(self, model, new_field, new_type, new_collation): + return ( + self.sql_alter_column_collate + % { + "column": self.quote_name(new_field.column), + "type": new_type, + "collation": " " + self._collate_sql(new_collation) + if new_collation + else "", + }, + [], + ) + + def _alter_many_to_many(self, model, old_field, new_field, strict): + """Alter M2Ms to repoint their to= endpoints.""" + # Rename the through table + if ( + old_field.remote_field.through._meta.db_table + != new_field.remote_field.through._meta.db_table + ): + self.alter_db_table( + old_field.remote_field.through, + old_field.remote_field.through._meta.db_table, + new_field.remote_field.through._meta.db_table, + ) + # Repoint the FK to the other side + self.alter_field( + new_field.remote_field.through, + # The field that points to the target model is needed, so we can + # tell alter_field to change it - this is m2m_reverse_field_name() + # (as opposed to m2m_field_name(), which points to our model). + old_field.remote_field.through._meta.get_field( + old_field.m2m_reverse_field_name() + ), + new_field.remote_field.through._meta.get_field( + new_field.m2m_reverse_field_name() + ), + ) + self.alter_field( + new_field.remote_field.through, + # for self-referential models we need to alter field from the other end too + old_field.remote_field.through._meta.get_field(old_field.m2m_field_name()), + new_field.remote_field.through._meta.get_field(new_field.m2m_field_name()), + ) + + def _create_index_name(self, table_name, column_names, suffix=""): + """ + Generate a unique name for an index/unique constraint. + + The name is divided into 3 parts: the table name, the column names, + and a unique digest and suffix. + """ + _, table_name = split_identifier(table_name) + hash_suffix_part = "%s%s" % ( + names_digest(table_name, *column_names, length=8), + suffix, + ) + max_length = self.connection.ops.max_name_length() or 200 + # If everything fits into max_length, use that name. + index_name = "%s_%s_%s" % (table_name, "_".join(column_names), hash_suffix_part) + if len(index_name) <= max_length: + return index_name + # Shorten a long suffix. + if len(hash_suffix_part) > max_length / 3: + hash_suffix_part = hash_suffix_part[: max_length // 3] + other_length = (max_length - len(hash_suffix_part)) // 2 - 1 + index_name = "%s_%s_%s" % ( + table_name[:other_length], + "_".join(column_names)[:other_length], + hash_suffix_part, + ) + # Prepend D if needed to prevent the name from starting with an + # underscore or a number (not permitted on Oracle). + if index_name[0] == "_" or index_name[0].isdigit(): + index_name = "D%s" % index_name[:-1] + return index_name + + def _get_index_tablespace_sql(self, model, fields, db_tablespace=None): + if db_tablespace is None: + if len(fields) == 1 and fields[0].db_tablespace: + db_tablespace = fields[0].db_tablespace + elif model._meta.db_tablespace: + db_tablespace = model._meta.db_tablespace + if db_tablespace is not None: + return " " + self.connection.ops.tablespace_sql(db_tablespace) + return "" + + def _index_condition_sql(self, condition): + if condition: + return " WHERE " + condition + return "" + + def _index_include_sql(self, model, columns): + if not columns or not self.connection.features.supports_covering_indexes: + return "" + return Statement( + " INCLUDE (%(columns)s)", + columns=Columns(model._meta.db_table, columns, self.quote_name), + ) + + def _create_index_sql( + self, + model, + *, + fields=None, + name=None, + suffix="", + using="", + db_tablespace=None, + col_suffixes=(), + sql=None, + opclasses=(), + condition=None, + include=None, + expressions=None, + ): + """ + Return the SQL statement to create the index for one or several fields + or expressions. `sql` can be specified if the syntax differs from the + standard (GIS indexes, ...). + """ + fields = fields or [] + expressions = expressions or [] + compiler = Query(model, alias_cols=False).get_compiler( + connection=self.connection, + ) + tablespace_sql = self._get_index_tablespace_sql( + model, fields, db_tablespace=db_tablespace + ) + columns = [field.column for field in fields] + sql_create_index = sql or self.sql_create_index + table = model._meta.db_table + + def create_index_name(*args, **kwargs): + nonlocal name + if name is None: + name = self._create_index_name(*args, **kwargs) + return self.quote_name(name) + + return Statement( + sql_create_index, + table=Table(table, self.quote_name), + name=IndexName(table, columns, suffix, create_index_name), + using=using, + columns=( + self._index_columns(table, columns, col_suffixes, opclasses) + if columns + else Expressions(table, expressions, compiler, self.quote_value) + ), + extra=tablespace_sql, + condition=self._index_condition_sql(condition), + include=self._index_include_sql(model, include), + ) + + def _delete_index_sql(self, model, name, sql=None): + return Statement( + sql or self.sql_delete_index, + table=Table(model._meta.db_table, self.quote_name), + name=self.quote_name(name), + ) + + def _index_columns(self, table, columns, col_suffixes, opclasses): + return Columns(table, columns, self.quote_name, col_suffixes=col_suffixes) + + def _model_indexes_sql(self, model): + """ + Return a list of all index SQL statements (field indexes, + index_together, Meta.indexes) for the specified model. + """ + if not model._meta.managed or model._meta.proxy or model._meta.swapped: + return [] + output = [] + for field in model._meta.local_fields: + output.extend(self._field_indexes_sql(model, field)) + + for field_names in model._meta.index_together: + fields = [model._meta.get_field(field) for field in field_names] + output.append(self._create_index_sql(model, fields=fields, suffix="_idx")) + + for index in model._meta.indexes: + if ( + not index.contains_expressions + or self.connection.features.supports_expression_indexes + ): + output.append(index.create_sql(model, self)) + return output + + def _field_indexes_sql(self, model, field): + """ + Return a list of all index SQL statements for the specified field. + """ + output = [] + if self._field_should_be_indexed(model, field): + output.append(self._create_index_sql(model, fields=[field])) + return output + + def _field_should_be_altered(self, old_field, new_field): + _, old_path, old_args, old_kwargs = old_field.deconstruct() + _, new_path, new_args, new_kwargs = new_field.deconstruct() + # Don't alter when: + # - changing only a field name + # - changing an attribute that doesn't affect the schema + # - adding only a db_column and the column name is not changed + non_database_attrs = [ + "blank", + "db_column", + "editable", + "error_messages", + "help_text", + "limit_choices_to", + # Database-level options are not supported, see #21961. + "on_delete", + "related_name", + "related_query_name", + "validators", + "verbose_name", + ] + for attr in non_database_attrs: + old_kwargs.pop(attr, None) + new_kwargs.pop(attr, None) + return self.quote_name(old_field.column) != self.quote_name( + new_field.column + ) or (old_path, old_args, old_kwargs) != (new_path, new_args, new_kwargs) + + def _field_should_be_indexed(self, model, field): + return field.db_index and not field.unique + + def _field_became_primary_key(self, old_field, new_field): + return not old_field.primary_key and new_field.primary_key + + def _unique_should_be_added(self, old_field, new_field): + return (not old_field.unique and new_field.unique) or ( + old_field.primary_key and not new_field.primary_key and new_field.unique + ) + + def _rename_field_sql(self, table, old_field, new_field, new_type): + return self.sql_rename_column % { + "table": self.quote_name(table), + "old_column": self.quote_name(old_field.column), + "new_column": self.quote_name(new_field.column), + "type": new_type, + } + + def _create_fk_sql(self, model, field, suffix): + table = Table(model._meta.db_table, self.quote_name) + name = self._fk_constraint_name(model, field, suffix) + column = Columns(model._meta.db_table, [field.column], self.quote_name) + to_table = Table(field.target_field.model._meta.db_table, self.quote_name) + to_column = Columns( + field.target_field.model._meta.db_table, + [field.target_field.column], + self.quote_name, + ) + deferrable = self.connection.ops.deferrable_sql() + return Statement( + self.sql_create_fk, + table=table, + name=name, + column=column, + to_table=to_table, + to_column=to_column, + deferrable=deferrable, + ) + + def _fk_constraint_name(self, model, field, suffix): + def create_fk_name(*args, **kwargs): + return self.quote_name(self._create_index_name(*args, **kwargs)) + + return ForeignKeyName( + model._meta.db_table, + [field.column], + split_identifier(field.target_field.model._meta.db_table)[1], + [field.target_field.column], + suffix, + create_fk_name, + ) + + def _delete_fk_sql(self, model, name): + return self._delete_constraint_sql(self.sql_delete_fk, model, name) + + def _deferrable_constraint_sql(self, deferrable): + if deferrable is None: + return "" + if deferrable == Deferrable.DEFERRED: + return " DEFERRABLE INITIALLY DEFERRED" + if deferrable == Deferrable.IMMEDIATE: + return " DEFERRABLE INITIALLY IMMEDIATE" + + def _unique_sql( + self, + model, + fields, + name, + condition=None, + deferrable=None, + include=None, + opclasses=None, + expressions=None, + ): + if ( + deferrable + and not self.connection.features.supports_deferrable_unique_constraints + ): + return None + if condition or include or opclasses or expressions: + # Databases support conditional, covering, and functional unique + # constraints via a unique index. + sql = self._create_unique_sql( + model, + fields, + name=name, + condition=condition, + include=include, + opclasses=opclasses, + expressions=expressions, + ) + if sql: + self.deferred_sql.append(sql) + return None + constraint = self.sql_unique_constraint % { + "columns": ", ".join([self.quote_name(field.column) for field in fields]), + "deferrable": self._deferrable_constraint_sql(deferrable), + } + return self.sql_constraint % { + "name": self.quote_name(name), + "constraint": constraint, + } + + def _create_unique_sql( + self, + model, + fields, + name=None, + condition=None, + deferrable=None, + include=None, + opclasses=None, + expressions=None, + ): + if ( + ( + deferrable + and not self.connection.features.supports_deferrable_unique_constraints + ) + or (condition and not self.connection.features.supports_partial_indexes) + or (include and not self.connection.features.supports_covering_indexes) + or ( + expressions and not self.connection.features.supports_expression_indexes + ) + ): + return None + + def create_unique_name(*args, **kwargs): + return self.quote_name(self._create_index_name(*args, **kwargs)) + + compiler = Query(model, alias_cols=False).get_compiler( + connection=self.connection + ) + table = model._meta.db_table + columns = [field.column for field in fields] + if name is None: + name = IndexName(table, columns, "_uniq", create_unique_name) + else: + name = self.quote_name(name) + if condition or include or opclasses or expressions: + sql = self.sql_create_unique_index + else: + sql = self.sql_create_unique + if columns: + columns = self._index_columns( + table, columns, col_suffixes=(), opclasses=opclasses + ) + else: + columns = Expressions(table, expressions, compiler, self.quote_value) + return Statement( + sql, + table=Table(table, self.quote_name), + name=name, + columns=columns, + condition=self._index_condition_sql(condition), + deferrable=self._deferrable_constraint_sql(deferrable), + include=self._index_include_sql(model, include), + ) + + def _delete_unique_sql( + self, + model, + name, + condition=None, + deferrable=None, + include=None, + opclasses=None, + expressions=None, + ): + if ( + ( + deferrable + and not self.connection.features.supports_deferrable_unique_constraints + ) + or (condition and not self.connection.features.supports_partial_indexes) + or (include and not self.connection.features.supports_covering_indexes) + or ( + expressions and not self.connection.features.supports_expression_indexes + ) + ): + return None + if condition or include or opclasses or expressions: + sql = self.sql_delete_index + else: + sql = self.sql_delete_unique + return self._delete_constraint_sql(sql, model, name) + + def _check_sql(self, name, check): + return self.sql_constraint % { + "name": self.quote_name(name), + "constraint": self.sql_check_constraint % {"check": check}, + } + + def _create_check_sql(self, model, name, check): + return Statement( + self.sql_create_check, + table=Table(model._meta.db_table, self.quote_name), + name=self.quote_name(name), + check=check, + ) + + def _delete_check_sql(self, model, name): + return self._delete_constraint_sql(self.sql_delete_check, model, name) + + def _delete_constraint_sql(self, template, model, name): + return Statement( + template, + table=Table(model._meta.db_table, self.quote_name), + name=self.quote_name(name), + ) + + def _constraint_names( + self, + model, + column_names=None, + unique=None, + primary_key=None, + index=None, + foreign_key=None, + check=None, + type_=None, + exclude=None, + ): + """Return all constraint names matching the columns and conditions.""" + if column_names is not None: + column_names = [ + self.connection.introspection.identifier_converter(name) + for name in column_names + ] + with self.connection.cursor() as cursor: + constraints = self.connection.introspection.get_constraints( + cursor, model._meta.db_table + ) + result = [] + for name, infodict in constraints.items(): + if column_names is None or column_names == infodict["columns"]: + if unique is not None and infodict["unique"] != unique: + continue + if primary_key is not None and infodict["primary_key"] != primary_key: + continue + if index is not None and infodict["index"] != index: + continue + if check is not None and infodict["check"] != check: + continue + if foreign_key is not None and not infodict["foreign_key"]: + continue + if type_ is not None and infodict["type"] != type_: + continue + if not exclude or name not in exclude: + result.append(name) + return result + + def _delete_primary_key(self, model, strict=False): + constraint_names = self._constraint_names(model, primary_key=True) + if strict and len(constraint_names) != 1: + raise ValueError( + "Found wrong number (%s) of PK constraints for %s" + % ( + len(constraint_names), + model._meta.db_table, + ) + ) + for constraint_name in constraint_names: + self.execute(self._delete_primary_key_sql(model, constraint_name)) + + def _create_primary_key_sql(self, model, field): + return Statement( + self.sql_create_pk, + table=Table(model._meta.db_table, self.quote_name), + name=self.quote_name( + self._create_index_name( + model._meta.db_table, [field.column], suffix="_pk" + ) + ), + columns=Columns(model._meta.db_table, [field.column], self.quote_name), + ) + + def _delete_primary_key_sql(self, model, name): + return self._delete_constraint_sql(self.sql_delete_pk, model, name) + + def _collate_sql(self, collation): + return "COLLATE " + self.quote_name(collation) + + def remove_procedure(self, procedure_name, param_types=()): + sql = self.sql_delete_procedure % { + "procedure": self.quote_name(procedure_name), + "param_types": ",".join(param_types), + } + self.execute(sql) diff --git a/venv/Lib/site-packages/django/db/backends/base/validation.py b/venv/Lib/site-packages/django/db/backends/base/validation.py new file mode 100644 index 000000000..d0e3e2157 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/base/validation.py @@ -0,0 +1,29 @@ +class BaseDatabaseValidation: + """Encapsulate backend-specific validation.""" + + def __init__(self, connection): + self.connection = connection + + def check(self, **kwargs): + return [] + + def check_field(self, field, **kwargs): + errors = [] + # Backends may implement a check_field_type() method. + if ( + hasattr(self, "check_field_type") + and + # Ignore any related fields. + not getattr(field, "remote_field", None) + ): + # Ignore fields with unsupported features. + db_supports_all_required_features = all( + getattr(self.connection.features, feature, False) + for feature in field.model._meta.required_db_features + ) + if db_supports_all_required_features: + field_type = field.db_type(self.connection) + # Ignore non-concrete fields. + if field_type is not None: + errors.extend(self.check_field_type(field, field_type)) + return errors diff --git a/venv/Lib/site-packages/django/db/backends/ddl_references.py b/venv/Lib/site-packages/django/db/backends/ddl_references.py new file mode 100644 index 000000000..412d07a99 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/ddl_references.py @@ -0,0 +1,254 @@ +""" +Helpers to manipulate deferred DDL statements that might need to be adjusted or +discarded within when executing a migration. +""" +from copy import deepcopy + + +class Reference: + """Base class that defines the reference interface.""" + + def references_table(self, table): + """ + Return whether or not this instance references the specified table. + """ + return False + + def references_column(self, table, column): + """ + Return whether or not this instance references the specified column. + """ + return False + + def rename_table_references(self, old_table, new_table): + """ + Rename all references to the old_name to the new_table. + """ + pass + + def rename_column_references(self, table, old_column, new_column): + """ + Rename all references to the old_column to the new_column. + """ + pass + + def __repr__(self): + return "<%s %r>" % (self.__class__.__name__, str(self)) + + def __str__(self): + raise NotImplementedError( + "Subclasses must define how they should be converted to string." + ) + + +class Table(Reference): + """Hold a reference to a table.""" + + def __init__(self, table, quote_name): + self.table = table + self.quote_name = quote_name + + def references_table(self, table): + return self.table == table + + def rename_table_references(self, old_table, new_table): + if self.table == old_table: + self.table = new_table + + def __str__(self): + return self.quote_name(self.table) + + +class TableColumns(Table): + """Base class for references to multiple columns of a table.""" + + def __init__(self, table, columns): + self.table = table + self.columns = columns + + def references_column(self, table, column): + return self.table == table and column in self.columns + + def rename_column_references(self, table, old_column, new_column): + if self.table == table: + for index, column in enumerate(self.columns): + if column == old_column: + self.columns[index] = new_column + + +class Columns(TableColumns): + """Hold a reference to one or many columns.""" + + def __init__(self, table, columns, quote_name, col_suffixes=()): + self.quote_name = quote_name + self.col_suffixes = col_suffixes + super().__init__(table, columns) + + def __str__(self): + def col_str(column, idx): + col = self.quote_name(column) + try: + suffix = self.col_suffixes[idx] + if suffix: + col = "{} {}".format(col, suffix) + except IndexError: + pass + return col + + return ", ".join( + col_str(column, idx) for idx, column in enumerate(self.columns) + ) + + +class IndexName(TableColumns): + """Hold a reference to an index name.""" + + def __init__(self, table, columns, suffix, create_index_name): + self.suffix = suffix + self.create_index_name = create_index_name + super().__init__(table, columns) + + def __str__(self): + return self.create_index_name(self.table, self.columns, self.suffix) + + +class IndexColumns(Columns): + def __init__(self, table, columns, quote_name, col_suffixes=(), opclasses=()): + self.opclasses = opclasses + super().__init__(table, columns, quote_name, col_suffixes) + + def __str__(self): + def col_str(column, idx): + # Index.__init__() guarantees that self.opclasses is the same + # length as self.columns. + col = "{} {}".format(self.quote_name(column), self.opclasses[idx]) + try: + suffix = self.col_suffixes[idx] + if suffix: + col = "{} {}".format(col, suffix) + except IndexError: + pass + return col + + return ", ".join( + col_str(column, idx) for idx, column in enumerate(self.columns) + ) + + +class ForeignKeyName(TableColumns): + """Hold a reference to a foreign key name.""" + + def __init__( + self, + from_table, + from_columns, + to_table, + to_columns, + suffix_template, + create_fk_name, + ): + self.to_reference = TableColumns(to_table, to_columns) + self.suffix_template = suffix_template + self.create_fk_name = create_fk_name + super().__init__( + from_table, + from_columns, + ) + + def references_table(self, table): + return super().references_table(table) or self.to_reference.references_table( + table + ) + + def references_column(self, table, column): + return super().references_column( + table, column + ) or self.to_reference.references_column(table, column) + + def rename_table_references(self, old_table, new_table): + super().rename_table_references(old_table, new_table) + self.to_reference.rename_table_references(old_table, new_table) + + def rename_column_references(self, table, old_column, new_column): + super().rename_column_references(table, old_column, new_column) + self.to_reference.rename_column_references(table, old_column, new_column) + + def __str__(self): + suffix = self.suffix_template % { + "to_table": self.to_reference.table, + "to_column": self.to_reference.columns[0], + } + return self.create_fk_name(self.table, self.columns, suffix) + + +class Statement(Reference): + """ + Statement template and formatting parameters container. + + Allows keeping a reference to a statement without interpolating identifiers + that might have to be adjusted if they're referencing a table or column + that is removed + """ + + def __init__(self, template, **parts): + self.template = template + self.parts = parts + + def references_table(self, table): + return any( + hasattr(part, "references_table") and part.references_table(table) + for part in self.parts.values() + ) + + def references_column(self, table, column): + return any( + hasattr(part, "references_column") and part.references_column(table, column) + for part in self.parts.values() + ) + + def rename_table_references(self, old_table, new_table): + for part in self.parts.values(): + if hasattr(part, "rename_table_references"): + part.rename_table_references(old_table, new_table) + + def rename_column_references(self, table, old_column, new_column): + for part in self.parts.values(): + if hasattr(part, "rename_column_references"): + part.rename_column_references(table, old_column, new_column) + + def __str__(self): + return self.template % self.parts + + +class Expressions(TableColumns): + def __init__(self, table, expressions, compiler, quote_value): + self.compiler = compiler + self.expressions = expressions + self.quote_value = quote_value + columns = [ + col.target.column + for col in self.compiler.query._gen_cols([self.expressions]) + ] + super().__init__(table, columns) + + def rename_table_references(self, old_table, new_table): + if self.table != old_table: + return + self.expressions = self.expressions.relabeled_clone({old_table: new_table}) + super().rename_table_references(old_table, new_table) + + def rename_column_references(self, table, old_column, new_column): + if self.table != table: + return + expressions = deepcopy(self.expressions) + self.columns = [] + for col in self.compiler.query._gen_cols([expressions]): + if col.target.column == old_column: + col.target.column = new_column + self.columns.append(col.target.column) + self.expressions = expressions + + def __str__(self): + sql, params = self.compiler.compile(self.expressions) + params = map(self.quote_value, params) + return sql % tuple(params) diff --git a/venv/Lib/site-packages/django/db/backends/dummy/__init__.py b/venv/Lib/site-packages/django/db/backends/dummy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c90695c02fa3c1b3f6e2821269f70264d32515a7 GIT binary patch literal 198 zcmYk0u?oU47=%;lAVMF+p=K8mK~V=0QQUqEP4iPyZBqItg+7w6BslpDE>5PC9^7}_ zO=pv2#Dd7lVD<_=mkE$p-e(hk!)%dc611ggwTVY!lAh6#-#u6$K>TnKHn6Jk<#kKwGc N%HMF_U!Xxi%)a1pHYET6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..127ec0d9fa43ab12f1560fded19e069c4c999c1e GIT binary patch literal 2703 zcmZ`)OK;mo5GM7cWWB6c;Mj z-kSWBUh*IM5Bd)T^wd+&K`*_u->gVWb}SOJJ2N}GJFlII>h-FI@1LLkocv~J+FwMh ze+3W^0rGbYuEsQ1cXPfT#3Ky>YA!Zoc}Xx}OBW+;r{Op4gI`6WclCp=+K*!rXsu zhtp_Stu7HWkzAVbsV7bE1T$alIv71U937aF$FUbqO-S%y7SGMQqbTGij#`p37FZtO z!~@$oH6wKjF5NvkG*6PyiM=S4_e}oM;j`FuqA=u&H+1|+^1Fk3rm#K9tB1i%L^Ce@ z`Cb&Bc+*61cUb)!;n3ddi|%#H1AWnX1OxX|Lw^+Z3@3oyUT5$59uH%1yO+3v+oT)# zJL~+zFcy)VEtSM#e|_;Oj#s-RR(i_K+2xOM9CVfrX`FpIAOueV5_zY^NT%2NulgW2 zdi6`{S~=X`eYX2(_xRwLyzE^#g1nV^!aVXh#Zo4-nLk&NN&|Fm`w1VKd#Btv%c3Ps zH*%5yW-Dz~WHNs22^rr%647(GX?)JZ^YM4yWGuay-=87b>?xOHS7q7*ck&?3Kl#9= zyaXxva5i5UP87_1+Y3A7of3wep3@8ei6+qZ+^B=8+(=K=)sX4>NU1C6WiK((UNkT) zO5QYty&nL7N2V5Z(ZY1;RL~lo`VjDrR=LJ>y!{-{vx2MRhTNi^g?APC(V)06EGx7F zZdr?}Wd)I&_=MLi>qTPw%N1n>tG-C0m@DBm6)*G@WctT+KUrmHhORgp)f8=rL9Irn z)-t!DlIUVZ^l0eQKt5!KNJ4qaegE3KZ$ji#lD$C#Q5)}-bo#n`;G$ycqSl2j>5Cc- zN>{ZZ@3MwN0^EwZj4gM9ItWBW^New=k~`S>IY8xyfjGiN#M`W@iPfvBLfsOe3@}o) zdzspo9{gxfxvIPJWMj%>3*{7X_B|Q1-in45j__twOIV%Qg8R!F!M2F>LYKefk~N7q z<8#Z2{3HnFwdUS}^7jC;hJnmo{xF(W-ZPp~`yoIcVaSa3G?wQDRs@s)Wp1zvpbFRm zUBg_*+~7^t;@hmvJFLrltj}+-o7DEuns(eg(!a21W=={=t3&T4`v@o414#8M)tebT zQts5u}^Gcc(rron&E}aXmIOFJQfw|5_TL3xlHo1lF=KwX!8 za*d#BM#C%`f`X$GO67_w!>T5#P^#Cb{B~Uc7RFc09`H3i2YDMqL9112`sz3GhS4gh Izt}bY2hMt~CjbBd literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/dummy/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..382cb50b69ebcdcc32226724a6fb33e6a4319566 GIT binary patch literal 498 zcmZ8d%}N6?5Kfv_m(t>;z4y9@Zto&ew6q?ih~i}lhU_Mmt=%6pNug(b86UuxS@7h^ z2k_#_No!FYm~VdhGWp7Gw@uJK@7|JEjPJhqYfUW1=rBM~M9~$=X-p}Z5!F!anJA{| z6N?+Fc|*e12X2v&*1aeSg(Cm} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/dummy/base.py b/venv/Lib/site-packages/django/db/backends/dummy/base.py new file mode 100644 index 000000000..eed014131 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/dummy/base.py @@ -0,0 +1,75 @@ +""" +Dummy database backend for Django. + +Django uses this if the database ENGINE setting is empty (None or empty string). + +Each of these API functions, except connection.close(), raise +ImproperlyConfigured. +""" + +from django.core.exceptions import ImproperlyConfigured +from django.db.backends.base.base import BaseDatabaseWrapper +from django.db.backends.base.client import BaseDatabaseClient +from django.db.backends.base.creation import BaseDatabaseCreation +from django.db.backends.base.introspection import BaseDatabaseIntrospection +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.backends.dummy.features import DummyDatabaseFeatures + + +def complain(*args, **kwargs): + raise ImproperlyConfigured( + "settings.DATABASES is improperly configured. " + "Please supply the ENGINE value. Check " + "settings documentation for more details." + ) + + +def ignore(*args, **kwargs): + pass + + +class DatabaseOperations(BaseDatabaseOperations): + quote_name = complain + + +class DatabaseClient(BaseDatabaseClient): + runshell = complain + + +class DatabaseCreation(BaseDatabaseCreation): + create_test_db = ignore + destroy_test_db = ignore + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + get_table_list = complain + get_table_description = complain + get_relations = complain + get_indexes = complain + get_key_columns = complain + + +class DatabaseWrapper(BaseDatabaseWrapper): + operators = {} + # Override the base class implementations with null + # implementations. Anything that tries to actually + # do something raises complain; anything that tries + # to rollback or undo something raises ignore. + _cursor = complain + ensure_connection = complain + _commit = complain + _rollback = ignore + _close = ignore + _savepoint = ignore + _savepoint_commit = complain + _savepoint_rollback = ignore + _set_autocommit = complain + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DummyDatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + + def is_usable(self): + return True diff --git a/venv/Lib/site-packages/django/db/backends/dummy/features.py b/venv/Lib/site-packages/django/db/backends/dummy/features.py new file mode 100644 index 000000000..ac9173196 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/dummy/features.py @@ -0,0 +1,6 @@ +from django.db.backends.base.features import BaseDatabaseFeatures + + +class DummyDatabaseFeatures(BaseDatabaseFeatures): + supports_transactions = False + uses_savepoints = False diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__init__.py b/venv/Lib/site-packages/django/db/backends/mysql/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7208839cf4c50b5d7dcbcc416f4d50422adbddcf GIT binary patch literal 198 zcmd1j<>g`kg0FFRlR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMN|JsOP$)GorC2|=vbZouKR!M)FS8^*Uaz3?7Kcr4eoARh OsvXD)#Y{kgg#iHK1vW1L literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..853791a5f360a5032cb2309387e957338afdfe48 GIT binary patch literal 12403 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 X9pgH;vOdlAeGV5X68b9*v_bv@h|Z$h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/compiler.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/compiler.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cecede96defeda2775d365633fd1ded35b36ac26 GIT binary patch literal 2709 zcmah~ZEq7t5Z>K;@%d~gKtn=PT1?wiSOtf^si;DTmV_56HEk$GoJ>z=-^SRS@9f=k zAl6xGYoyTr3g=_~Lx0Ih{nStWjQS-)q%-R{2@R+#?cD6_-puUo^UOwtf=!_P^V6R- zElz1}qtF4s|C3Hp|a~EekeF*(|WxehzFouw|7k3%0yp09yfUwzAp&)E!cq{u}Zk zC7RmTn>_HBg@^=dE z!T@rAMxTMhXDp#ZiY|X7lyqS~;Fk4`1zBE@m2J>dR=${;^(g4I!)+}!yrAjHlyyT# z>xQ3-3^?6sUi+$gS8^e%t34^b>QYqiwRsrJ>WyZ6vsbHLZweV-_)bJEUXQEmJY27? zG;3AajQNF*SAXO+xUBjuFKk4Mer>S^CLa27vArR?!Q$jf%AJigd%3|w{-h(WOyQpJ zjM>lclm6$2PQL6(SN3Y%9v2&KJqrD1+>FBVoWD9?$TGWw_eXue$F+w*;^;Xmj!HX_=uqJYlOqv-Vl@yp-s^KcL;|Z@V z)maH7jVR#U$=9Zd2dW@uQk&)}WAltr_LA)~L*MD2{oid?0EU)3-jJKxuG^0MUcg;9 z&AV>5=LKr3t~iBxV6a01(-MdmgsM7Qi{z=Y9H9fk>?-us7vco$P)vhxjyHJhHbbC>7mU|9(`Z@~QQNHtUQhDWK>_Dav;B-MntoDXK%Cr~OlayI1d8m4a@t zZTuH~=rS$r1*`KQm;_X?{1|2xNyS;v5V(7YoT19{MnsAttldN1-Hz|Q0d-ge5P1r9 ze}EDbz!p7(Id~L=(;x#4x(-NV_&l_XfziK&*xMpYf2G$@O1GZXLoE^zGv9)urXt;y3q;0*goKm{@?%7;hhd=2(&Nxo~S6j)gF5 z^Vmx*zvjkXEdc1EZL%V@n}A&zdtseBHWqs*%TR{}9+#@J0v|SU4#h_(5Rak+qGT&H zI{BVDd?#cZPXPC7z!f$z{KV9 zJcuc3F&&@?MVro2o3UN!FLe{k_z3{0W#nHl&7$mur7Nhu3XnahiVGO;pg0~t@ghuM z7mFxRI|9Q=Q5IMjp%BjiA---j1aBNdVnw`%4h}*b?B@%ZSi#9NC~#CM<(%2^%UrHU zf|vP|I`81CDAgr6r}rlPS{Ys%9!OX*xiG12%$Yf|1emYhNA;Bd8>=^1@y?$qgj0Vhd{8S& zJ+qWdVi_2!yw@ccx19ukt_RYt>c{}g-dvDYE z`6_|-pFjVjJ)9@xpV&FuICOpsx849Dh@d^fcTcEens}F;KF`T@wuo9N4O8DZwpUUVBYzPaN@h*%$!+x zvCq_j2pyO;3ltmfb-495hz=RkoODT-3c5tbEN6l(5%qRXCrnsn?>sr7lz`4*=1MVR zm%VaEI1?+UC&giG8@{)>yJy_>PuFhkZtjg1P+42w+q~6)ZsX_LudLtP+FIND?B@2U zTB@5c{Dd}|+*G49No0fvXXdrcvN-AJK*UjIoUq@Qi7>pI#!1sMT+80Rar9t+KfdeF zXHsXu?2T`UdJ8`8NxXio^|_Wxw{8uz4qF>(G&qFQ*R30I_UWMAx*jW?E$^tb3!Ao% zWOCHnirXz6XL7k8Mh9U>>Xzt+Nhe(u?bS96fe(81aH#L}R-@?=uk?pz2?hcPeNP6n z;h^+w4$ry{g3}uH=(*yq($V{`M{4DbCay;_cz~HAfQWJoral5On#;(2GNC!mS#F(J zl>7-Wy$hho*zg)9W5Ds~XPK4rF24_fJ|OyC)G^e;IQxGYh(TeN1LT~Opi&^*;eR+LV(5p0(JDkjWlb7Nkb}?sz!MZNvDzhMK&-#4KXFh zH3;})2Cp?eW9va*D)Zw&-j&fHn;xGGihzo?schbjWWPX!)su9^iUfv z@5WivR={>*oM@nQs!X*Xs_;-|5PIVrNZAKNRDMfMB?zKksC5t&2vH080gE8;)+iV~ zPwVs@T4y!NSpB(ok3Ah-{XwkW;O;Ads(?8Re8IN&;F!)Zjl+>MWKF?4yO^;iJcnb) zV4Oe-`WqWNpgSkzp&YxT3g~X`=FTj{$u0!g8;&T!E4S2dZWn>)5cvB50u0xv0Zg?H zZ1p>My8HrC+ysr_FmuPQnAM|fXD+7ohz(3xi;8Tq|<%L?p)fYhkh|3*CyICo4UmTFB97)wq zA$JYcPjT6zP6sNIFU_JeW-$W-o!tya{rZ${K|vg?euA4_LV=0&C09&+y7zSbWtc5$ zX$?qIV-9tmS2=?uSEC&0v+#tu9%_^`kf(U@)4F#KR@Z@OK(6Qf9{V@D_s+A0^P|f@ zq*?i;)7>J>H?xLuz(8hNT*im>k6lDsxp2+I^KqQfp)Hq)?U(-}!83voLMkjm1tf&1wnJU*NXC1Yx|{9=?kjSoJ;pBHVkb6=S_LoX!>+&Q^+bxc6(gRPTZ1 zkKxuRIMi70lyP=iW$Zb#*fY?dGMoSRqKk8!dDJ;&2uT1ZO7CgSz4U$k8MCfD8(n-8 z41sX;I@ByLD2N>drWyo?sTe@j4@@lx?hL{n@(IcdlD?$*Rn*WwGe509k?i$m6{z4B z(x|LO_;-fL)+jvU(R!siw{ThEc+*qM@KCELFdg`f^50}dv{z>TCZK4!GW!QnSY@Fs l7C)UuxC={XPOsP>%b@W-DnI38Eaf-=EXiJftk*ex*{h38IkLQ$9SCWR*iC7y z;SAk9lr7@!X*am{yxtzNhvXg%Mnn(FGR>Z)pm!^49a{QmRL{%P$$u4OX+LJ!?P3lBfWrEa3(8E*I)hwi3t z)J(@T2+sQ1n&ntV=23=QJoj~m=Y;uH*2!_>X{MOp0cNILG+LuGt`c)@IIGLBE@ZS_A%yN9F+o4|_eLfoGLFGBj>!!t%T33^mE&0_kNW`b1zd-4 z4dObCz9C%0fREsQ6xT7p$8ntiJc9cut}$*oCwa~}1^6`j&*1(Z?q|h0p63H!XTCC= z_j$oNkLN>tP(ObF_%I*Runl;aAJOmyz(@Hp4SxvuI6tA`i{jibGF5|*@X@aep!X5p zjq#KE-6ip{xcu!Ee(Ki--W2iXG(V%?Tm}3dKda#%0Y1my*YLFjCH!f$K%9^gCtu7*Dae2;&s;rqYHSQ+OtsL1`+vAt^X zIo<+a$OIYczOnuKK_x!I+KJZNzOHnAd ztVUG5^V-}Y$FP$};|x$wZEeaq%+^I9r0cVa=L|EUV6Scvh4grssh5I#Y6B0&Y|Ess zAPg86Rkz_s&S2;D>uhVV5(a^&L|z!Qj@7o+3!iz4)m-Vhe62Mc_iPENFra9*EG7JE zYoM~>N+lwh16R8FA8+>F>NACLtIG|g+|{|T(x{0bQmc===<~+f>O)Ve==u{GKF8Nq zw?weDy6CN~DlZb(>uzP!T^DMVKX-%maGbA=uc1o>T#aiE#;b{!D%H1JN43sXLf?0Z zZ8ZfZ)Dbk6IciwBf>|&MM*jPzy;qk@dk~%BXDhR8W#RGs)0OGRPkPppW~bNkUjcA~ zn;Rz2atm#4!{B*b1K(IbH+Ugl{(jXTQ6HjHlivdT~H!dc~~fK%yJ&K0J_`FIX zIq|BF4V5e=W>l3Pu6Q*uC;Z6mq5_Ah6)R44NuuT6e_qJ z*(6ds4D83-Pyb}G)V#Ue2m&uyPrGa>UNk&>*N&aUO!FP7_G-Jnt!D)y_>!CU+tG#_;R6U10%iZ?=~B758B z*L-}lE#Pam62iVXH8C|cQEINZ>rnf3{e?s)rjs5)3p$H9DpsGaflM{lUNnTfN+N>KA|Jq=9fPJ+1>oMNf*uL3>G~i1&>0z zJ!qVmAax>DPD}$z1)Yzr<-UEVbfW~tp1LtPd9&D@>FQ3+OGQ$X-L8XFpd#TyEvvh~ z(V%H&wi8!^$YFF#ib-0h+b)tN zMBxr%WK$lc0Xenl)m0~ylEfG{&Aj>6%$aZV z|2{No8R)0q_vY`dx1)!xY%;Pyeb#?lZwF80t-^PvHTa#CL!SZMx9BbG*PAbBddV1T zp!wn4o{X{7!{V+8iXvmuKZ>BBFCh!NCg5JU-B7RO|2qT#Y*1bTyHud5-$KxeK zY>F_Jkp;gtwB+}Se2gU{caix^aIR<`L)qrXJtEi_rLPziiGe36!B#AWC{1dn8&T*5 z6{+_>J25C524z>=z+MyBk|OdpH*Bwp9W&j<<5VCLb|7A+#N1uP^p2xS>04*4yu_xT ztt_!GrWc>hv!ya~=9iaXsKlW>Lyb*M8sNuTdCc{FxC}@#oqY2`k978q z?kku#HqhjZMuS_D;su#~?4J-2ob88-IhLZ)gce z&F1AECilnb&nl&3#3C4^M9pkopACbmCu?nwZzBqX9!D}H_d<~jI)t|#&|0ci{_*z0 z)9J@h!V5G7o0>iII7<`gP+$o@Ial?!7_TQYm~CF`nalx*Ju{+|l6DOB9vUwbWxhh9 z`WqN1*J%#VePjKGQi6QhIg|$2&JdaHx`<LzN_O<8c!E3=kSadU{lbcpEEQQ zh6wkA_-S}oT5eo|pwgb5Mc5&gmfvfmb%?Qw z?<&PuEKG8u@*0}o(hQHGG0i+VGje*dx7uAL$WY+po!sAl#*+w8KeqeEoIw zJS|ZiN;BlJjas1MAPajvif+Fns%NR16mwMKDKP))~jJ{02vGF!xdN5&F`_Dbhw|yzGy+adt-8GpVvXcIa zdm&{jR$GRwxUvZyMvN*EEJf;{f&V6+*$~Zavj5Ebk&t&lW7jmv)Y|5zi{HsKN8_nc zA&s^Qc?@@RGgBYIJxgnqOx@D!mP@x0J$16vc2r9HN?R^^kD+*4enJgxG#IACw1K1u zw#PnNv^jVC>K>{58;B^PNrkD?#!#*~(Ic04(by#sTDP`DBpnApE9C(0-HR!2q2qwX zB%_UYN7`LjvI$b4$@~zdH~wFQe;3U@%lJ;@ck;VS;M$TtJCNUV`+qVBU%FoOUCQe9 z9?2er*O$vTq#v=K4Q0Yz2KCx3%Y#`xz5ge}D#~}Uc?@O;5xVcQ|MbJ`%c$zaP4#`^ zrqoaEoH$6j@+{sS0(bGo)4MOGmcJ*3*~J&BB!v^RxYSiN8wip9Dy@L4k;EXW0uCen zHp{cR=1C!jRenII&f%5i>A8iKg{AWJqGPSh|LIE0qH>cqM|3RD&ljyYM(t!+S(o$F zN}$gNagg_eWgd_ zeNcM1BcW@JYlr2}jUgmfuZ?m$nbC@}pUBRo^KU1RUceBca^}11MdFRLxY_Gd4#MkU zFx7~}Q@1^z-iOF*ql4Uyd`ykD*uMGANcv@6cGh8Vi5S&>`lB8p?lZiHzf^#f1;jp2 zlE*W3B8Ciy;HMe+$HZ#4?Ujk&`_$Of?9sovP^81-vU(_DvQ{n!Y zSeT}!ukg;N(ugbfNeB{3j>IEazejQ;P1+~$J{a?0uHx*VZtpjBYnL>X%hGOANGV6&_>#Mq05>yz;^=8TD2J=$hf5mh#7Zm`XC z&A>U4-s=!0XVs$BeXc3cFs`rp`AKqq5%$Oy)6jS+Z4_f6s1VA zx)_-r_Uknb8#w-VrCZY(+Cd{JNREe6F6VUWqCnU6+T`fTISb1q{bJxJX0&4qPJ5SB z@f1lTDR+bt;;ah}Q97e~{W>pDnt>8fcp)hYa>n#55IM3&gjK^z(8uKaG~fa?A5!xX zHAQNuh@f-pRv|u4indz?`Ue@TyKD`*Q6$$z1PYE$1(MXBD(i7xzt-?KF%L@abuuj{ ziQp6(=VH2URY*`U93i57S@mAQc5s3pxj{wfjHqkc@s8V*WyGHN0g?VAYG$aRxK4gf z%>p$)p=Oa9?Yox6_bUlR*8EDH=R8cErEJObxjeW=8 zfK{-v7RH(8pkW=M)^u=LxCWBTI%1fI2rd}bTm6QjWV&)`PX`*L{^ZKzPE>|)5llEl zIemY^kib;Gd9m9lF$rJYSVMN2IYT5y7rK bPYa4<)GFMM9qa>m>m;zu44Fg5X!idAD;TUE literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e2a1f9e9292ab3b8278559a3e1badd7bcdacab9 GIT binary patch literal 11242 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..730c99f94e7e76e2d173881f4509ae4997f14a85 GIT binary patch literal 13579 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/mysql/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce567f1db39828f084b0880a0e242d33cfd36bb1 GIT binary patch literal 6160 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 %s", + "gte": ">= %s", + "lt": "< %s", + "lte": "<= %s", + "startswith": "LIKE BINARY %s", + "endswith": "LIKE BINARY %s", + "istartswith": "LIKE %s", + "iendswith": "LIKE %s", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\\', '\\\\'), '%%', '\%%'), '_', '\_')" + pattern_ops = { + "contains": "LIKE BINARY CONCAT('%%', {}, '%%')", + "icontains": "LIKE CONCAT('%%', {}, '%%')", + "startswith": "LIKE BINARY CONCAT({}, '%%')", + "istartswith": "LIKE CONCAT({}, '%%')", + "endswith": "LIKE BINARY CONCAT('%%', {})", + "iendswith": "LIKE CONCAT('%%', {})", + } + + isolation_levels = { + "read uncommitted", + "read committed", + "repeatable read", + "serializable", + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + validation_class = DatabaseValidation + + def get_connection_params(self): + kwargs = { + "conv": django_conversions, + "charset": "utf8", + } + settings_dict = self.settings_dict + if settings_dict["USER"]: + kwargs["user"] = settings_dict["USER"] + if settings_dict["NAME"]: + kwargs["database"] = settings_dict["NAME"] + if settings_dict["PASSWORD"]: + kwargs["password"] = settings_dict["PASSWORD"] + if settings_dict["HOST"].startswith("/"): + kwargs["unix_socket"] = settings_dict["HOST"] + elif settings_dict["HOST"]: + kwargs["host"] = settings_dict["HOST"] + if settings_dict["PORT"]: + kwargs["port"] = int(settings_dict["PORT"]) + # We need the number of potentially affected rows after an + # "UPDATE", not the number of changed rows. + kwargs["client_flag"] = CLIENT.FOUND_ROWS + # Validate the transaction isolation level, if specified. + options = settings_dict["OPTIONS"].copy() + isolation_level = options.pop("isolation_level", "read committed") + if isolation_level: + isolation_level = isolation_level.lower() + if isolation_level not in self.isolation_levels: + raise ImproperlyConfigured( + "Invalid transaction isolation level '%s' specified.\n" + "Use one of %s, or None." + % ( + isolation_level, + ", ".join("'%s'" % s for s in sorted(self.isolation_levels)), + ) + ) + self.isolation_level = isolation_level + kwargs.update(options) + return kwargs + + @async_unsafe + def get_new_connection(self, conn_params): + connection = Database.connect(**conn_params) + # bytes encoder in mysqlclient doesn't work and was added only to + # prevent KeyErrors in Django < 2.0. We can remove this workaround when + # mysqlclient 2.1 becomes the minimal mysqlclient supported by Django. + # See https://github.com/PyMySQL/mysqlclient/issues/489 + if connection.encoders.get(bytes) is bytes: + connection.encoders.pop(bytes) + return connection + + def init_connection_state(self): + assignments = [] + if self.features.is_sql_auto_is_null_enabled: + # SQL_AUTO_IS_NULL controls whether an AUTO_INCREMENT column on + # a recently inserted row will return when the field is tested + # for NULL. Disabling this brings this aspect of MySQL in line + # with SQL standards. + assignments.append("SET SQL_AUTO_IS_NULL = 0") + + if self.isolation_level: + assignments.append( + "SET SESSION TRANSACTION ISOLATION LEVEL %s" + % self.isolation_level.upper() + ) + + if assignments: + with self.cursor() as cursor: + cursor.execute("; ".join(assignments)) + + @async_unsafe + def create_cursor(self, name=None): + cursor = self.connection.cursor() + return CursorWrapper(cursor) + + def _rollback(self): + try: + BaseDatabaseWrapper._rollback(self) + except Database.NotSupportedError: + pass + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit(autocommit) + + def disable_constraint_checking(self): + """ + Disable foreign key checks, primarily for use in adding rows with + forward references. Always return True to indicate constraint checks + need to be re-enabled. + """ + with self.cursor() as cursor: + cursor.execute("SET foreign_key_checks=0") + return True + + def enable_constraint_checking(self): + """ + Re-enable foreign key checks after they have been disabled. + """ + # Override needs_rollback in case constraint_checks_disabled is + # nested inside transaction.atomic. + self.needs_rollback, needs_rollback = False, self.needs_rollback + try: + with self.cursor() as cursor: + cursor.execute("SET foreign_key_checks=1") + finally: + self.needs_rollback = needs_rollback + + def check_constraints(self, table_names=None): + """ + Check each table name in `table_names` for rows with invalid foreign + key references. This method is intended to be used in conjunction with + `disable_constraint_checking()` and `enable_constraint_checking()`, to + determine if rows with invalid references were entered while constraint + checks were off. + """ + with self.cursor() as cursor: + if table_names is None: + table_names = self.introspection.table_names(cursor) + for table_name in table_names: + primary_key_column_name = self.introspection.get_primary_key_column( + cursor, table_name + ) + if not primary_key_column_name: + continue + key_columns = self.introspection.get_key_columns(cursor, table_name) + for ( + column_name, + referenced_table_name, + referenced_column_name, + ) in key_columns: + cursor.execute( + """ + SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING + LEFT JOIN `%s` as REFERRED + ON (REFERRING.`%s` = REFERRED.`%s`) + WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL + """ + % ( + primary_key_column_name, + column_name, + table_name, + referenced_table_name, + column_name, + referenced_column_name, + column_name, + referenced_column_name, + ) + ) + for bad_row in cursor.fetchall(): + raise IntegrityError( + "The row in table '%s' with primary key '%s' has an " + "invalid foreign key: %s.%s contains a value '%s' that " + "does not have a corresponding value in %s.%s." + % ( + table_name, + bad_row[0], + table_name, + column_name, + bad_row[1], + referenced_table_name, + referenced_column_name, + ) + ) + + def is_usable(self): + try: + self.connection.ping() + except Database.Error: + return False + else: + return True + + @cached_property + def display_name(self): + return "MariaDB" if self.mysql_is_mariadb else "MySQL" + + @cached_property + def data_type_check_constraints(self): + if self.features.supports_column_check_constraints: + check_constraints = { + "PositiveBigIntegerField": "`%(column)s` >= 0", + "PositiveIntegerField": "`%(column)s` >= 0", + "PositiveSmallIntegerField": "`%(column)s` >= 0", + } + if self.mysql_is_mariadb and self.mysql_version < (10, 4, 3): + # MariaDB < 10.4.3 doesn't automatically use the JSON_VALID as + # a check constraint. + check_constraints["JSONField"] = "JSON_VALID(`%(column)s`)" + return check_constraints + return {} + + @cached_property + def mysql_server_data(self): + with self.temporary_connection() as cursor: + # Select some server variables and test if the time zone + # definitions are installed. CONVERT_TZ returns NULL if 'UTC' + # timezone isn't loaded into the mysql.time_zone table. + cursor.execute( + """ + SELECT VERSION(), + @@sql_mode, + @@default_storage_engine, + @@sql_auto_is_null, + @@lower_case_table_names, + CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC') IS NOT NULL + """ + ) + row = cursor.fetchone() + return { + "version": row[0], + "sql_mode": row[1], + "default_storage_engine": row[2], + "sql_auto_is_null": bool(row[3]), + "lower_case_table_names": bool(row[4]), + "has_zoneinfo_database": bool(row[5]), + } + + @cached_property + def mysql_server_info(self): + return self.mysql_server_data["version"] + + @cached_property + def mysql_version(self): + match = server_version_re.match(self.mysql_server_info) + if not match: + raise Exception( + "Unable to determine MySQL version from version string %r" + % self.mysql_server_info + ) + return tuple(int(x) for x in match.groups()) + + @cached_property + def mysql_is_mariadb(self): + return "mariadb" in self.mysql_server_info.lower() + + @cached_property + def sql_mode(self): + sql_mode = self.mysql_server_data["sql_mode"] + return set(sql_mode.split(",") if sql_mode else ()) diff --git a/venv/Lib/site-packages/django/db/backends/mysql/client.py b/venv/Lib/site-packages/django/db/backends/mysql/client.py new file mode 100644 index 000000000..0c09a2ca1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/client.py @@ -0,0 +1,60 @@ +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = "mysql" + + @classmethod + def settings_to_cmd_args_env(cls, settings_dict, parameters): + args = [cls.executable_name] + env = None + database = settings_dict["OPTIONS"].get( + "database", + settings_dict["OPTIONS"].get("db", settings_dict["NAME"]), + ) + user = settings_dict["OPTIONS"].get("user", settings_dict["USER"]) + password = settings_dict["OPTIONS"].get( + "password", + settings_dict["OPTIONS"].get("passwd", settings_dict["PASSWORD"]), + ) + host = settings_dict["OPTIONS"].get("host", settings_dict["HOST"]) + port = settings_dict["OPTIONS"].get("port", settings_dict["PORT"]) + server_ca = settings_dict["OPTIONS"].get("ssl", {}).get("ca") + client_cert = settings_dict["OPTIONS"].get("ssl", {}).get("cert") + client_key = settings_dict["OPTIONS"].get("ssl", {}).get("key") + defaults_file = settings_dict["OPTIONS"].get("read_default_file") + charset = settings_dict["OPTIONS"].get("charset") + # Seems to be no good way to set sql_mode with CLI. + + if defaults_file: + args += ["--defaults-file=%s" % defaults_file] + if user: + args += ["--user=%s" % user] + if password: + # The MYSQL_PWD environment variable usage is discouraged per + # MySQL's documentation due to the possibility of exposure through + # `ps` on old Unix flavors but --password suffers from the same + # flaw on even more systems. Usage of an environment variable also + # prevents password exposure if the subprocess.run(check=True) call + # raises a CalledProcessError since the string representation of + # the latter includes all of the provided `args`. + env = {"MYSQL_PWD": password} + if host: + if "/" in host: + args += ["--socket=%s" % host] + else: + args += ["--host=%s" % host] + if port: + args += ["--port=%s" % port] + if server_ca: + args += ["--ssl-ca=%s" % server_ca] + if client_cert: + args += ["--ssl-cert=%s" % client_cert] + if client_key: + args += ["--ssl-key=%s" % client_key] + if charset: + args += ["--default-character-set=%s" % charset] + if database: + args += [database] + args.extend(parameters) + return args, env diff --git a/venv/Lib/site-packages/django/db/backends/mysql/compiler.py b/venv/Lib/site-packages/django/db/backends/mysql/compiler.py new file mode 100644 index 000000000..a8ab03a55 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/compiler.py @@ -0,0 +1,77 @@ +from django.core.exceptions import FieldError +from django.db.models.expressions import Col +from django.db.models.sql import compiler + + +class SQLCompiler(compiler.SQLCompiler): + def as_subquery_condition(self, alias, columns, compiler): + qn = compiler.quote_name_unless_alias + qn2 = self.connection.ops.quote_name + sql, params = self.as_sql() + return ( + "(%s) IN (%s)" + % ( + ", ".join("%s.%s" % (qn(alias), qn2(column)) for column in columns), + sql, + ), + params, + ) + + +class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler): + pass + + +class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler): + def as_sql(self): + # Prefer the non-standard DELETE FROM syntax over the SQL generated by + # the SQLDeleteCompiler's default implementation when multiple tables + # are involved since MySQL/MariaDB will generate a more efficient query + # plan than when using a subquery. + where, having = self.query.where.split_having() + if self.single_alias or having: + # DELETE FROM cannot be used when filtering against aggregates + # since it doesn't allow for GROUP BY and HAVING clauses. + return super().as_sql() + result = [ + "DELETE %s FROM" + % self.quote_name_unless_alias(self.query.get_initial_alias()) + ] + from_sql, from_params = self.get_from_clause() + result.extend(from_sql) + where_sql, where_params = self.compile(where) + if where_sql: + result.append("WHERE %s" % where_sql) + return " ".join(result), tuple(from_params) + tuple(where_params) + + +class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler): + def as_sql(self): + update_query, update_params = super().as_sql() + # MySQL and MariaDB support UPDATE ... ORDER BY syntax. + if self.query.order_by: + order_by_sql = [] + order_by_params = [] + db_table = self.query.get_meta().db_table + try: + for resolved, (sql, params, _) in self.get_order_by(): + if ( + isinstance(resolved.expression, Col) + and resolved.expression.alias != db_table + ): + # Ignore ordering if it contains joined fields, because + # they cannot be used in the ORDER BY clause. + raise FieldError + order_by_sql.append(sql) + order_by_params.extend(params) + update_query += " ORDER BY " + ", ".join(order_by_sql) + update_params += tuple(order_by_params) + except FieldError: + # Ignore ordering if it contains annotations, because they're + # removed in .update() and cannot be resolved. + pass + return update_query, update_params + + +class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler): + pass diff --git a/venv/Lib/site-packages/django/db/backends/mysql/creation.py b/venv/Lib/site-packages/django/db/backends/mysql/creation.py new file mode 100644 index 000000000..a060f41d1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/creation.py @@ -0,0 +1,87 @@ +import os +import subprocess +import sys + +from django.db.backends.base.creation import BaseDatabaseCreation + +from .client import DatabaseClient + + +class DatabaseCreation(BaseDatabaseCreation): + def sql_table_creation_suffix(self): + suffix = [] + test_settings = self.connection.settings_dict["TEST"] + if test_settings["CHARSET"]: + suffix.append("CHARACTER SET %s" % test_settings["CHARSET"]) + if test_settings["COLLATION"]: + suffix.append("COLLATE %s" % test_settings["COLLATION"]) + return " ".join(suffix) + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + try: + super()._execute_create_test_db(cursor, parameters, keepdb) + except Exception as e: + if len(e.args) < 1 or e.args[0] != 1007: + # All errors except "database exists" (1007) cancel tests. + self.log("Got an error creating the test database: %s" % e) + sys.exit(2) + else: + raise + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + source_database_name = self.connection.settings_dict["NAME"] + target_database_name = self.get_test_db_clone_settings(suffix)["NAME"] + test_db_params = { + "dbname": self.connection.ops.quote_name(target_database_name), + "suffix": self.sql_table_creation_suffix(), + } + with self._nodb_cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception: + if keepdb: + # If the database should be kept, skip everything else. + return + try: + if verbosity >= 1: + self.log( + "Destroying old test database for alias %s..." + % ( + self._get_database_display_str( + verbosity, target_database_name + ), + ) + ) + cursor.execute("DROP DATABASE %(dbname)s" % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + self.log("Got an error recreating the test database: %s" % e) + sys.exit(2) + self._clone_db(source_database_name, target_database_name) + + def _clone_db(self, source_database_name, target_database_name): + cmd_args, cmd_env = DatabaseClient.settings_to_cmd_args_env( + self.connection.settings_dict, [] + ) + dump_cmd = [ + "mysqldump", + *cmd_args[1:-1], + "--routines", + "--events", + source_database_name, + ] + dump_env = load_env = {**os.environ, **cmd_env} if cmd_env else None + load_cmd = cmd_args + load_cmd[-1] = target_database_name + + with subprocess.Popen( + dump_cmd, stdout=subprocess.PIPE, env=dump_env + ) as dump_proc: + with subprocess.Popen( + load_cmd, + stdin=dump_proc.stdout, + stdout=subprocess.DEVNULL, + env=load_env, + ): + # Allow dump_proc to receive a SIGPIPE if the load process exits. + dump_proc.stdout.close() diff --git a/venv/Lib/site-packages/django/db/backends/mysql/features.py b/venv/Lib/site-packages/django/db/backends/mysql/features.py new file mode 100644 index 000000000..6f8b135fc --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/features.py @@ -0,0 +1,326 @@ +import operator + +from django.db.backends.base.features import BaseDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + empty_fetchmany_value = () + allows_group_by_pk = True + related_fields_match_type = True + # MySQL doesn't support sliced subqueries with IN/ALL/ANY/SOME. + allow_sliced_subqueries_with_in = False + has_select_for_update = True + supports_forward_references = False + supports_regex_backreferencing = False + supports_date_lookup_using_string = False + supports_timezones = False + requires_explicit_null_ordering_when_grouping = True + can_release_savepoints = True + atomic_transactions = False + can_clone_databases = True + supports_temporal_subtraction = True + supports_select_intersection = False + supports_select_difference = False + supports_slicing_ordering_in_compound = True + supports_index_on_text_field = False + has_case_insensitive_like = False + create_test_procedure_without_params_sql = """ + CREATE PROCEDURE test_procedure () + BEGIN + DECLARE V_I INTEGER; + SET V_I = 1; + END; + """ + create_test_procedure_with_int_param_sql = """ + CREATE PROCEDURE test_procedure (P_I INTEGER) + BEGIN + DECLARE V_I INTEGER; + SET V_I = P_I; + END; + """ + # Neither MySQL nor MariaDB support partial indexes. + supports_partial_indexes = False + # COLLATE must be wrapped in parentheses because MySQL treats COLLATE as an + # indexed expression. + collate_as_index_expression = True + + supports_order_by_nulls_modifier = False + order_by_nulls_first = True + + @cached_property + def test_collations(self): + charset = "utf8" + if self.connection.mysql_is_mariadb and self.connection.mysql_version >= ( + 10, + 6, + ): + # utf8 is an alias for utf8mb3 in MariaDB 10.6+. + charset = "utf8mb3" + return { + "ci": f"{charset}_general_ci", + "non_default": f"{charset}_esperanto_ci", + "swedish_ci": f"{charset}_swedish_ci", + } + + test_now_utc_template = "UTC_TIMESTAMP" + + @cached_property + def django_test_skips(self): + skips = { + "This doesn't work on MySQL.": { + "db_functions.comparison.test_greatest.GreatestTests." + "test_coalesce_workaround", + "db_functions.comparison.test_least.LeastTests." + "test_coalesce_workaround", + }, + "Running on MySQL requires utf8mb4 encoding (#18392).": { + "model_fields.test_textfield.TextFieldTests.test_emoji", + "model_fields.test_charfield.TestCharField.test_emoji", + }, + "MySQL doesn't support functional indexes on a function that " + "returns JSON": { + "schema.tests.SchemaTests.test_func_index_json_key_transform", + }, + "MySQL supports multiplying and dividing DurationFields by a " + "scalar value but it's not implemented (#25287).": { + "expressions.tests.FTimeDeltaTests.test_durationfield_multiply_divide", + }, + } + if "ONLY_FULL_GROUP_BY" in self.connection.sql_mode: + skips.update( + { + "GROUP BY optimization does not work properly when " + "ONLY_FULL_GROUP_BY mode is enabled on MySQL, see #31331.": { + "aggregation.tests.AggregateTestCase." + "test_aggregation_subquery_annotation_multivalued", + "annotations.tests.NonAggregateAnnotationTestCase." + "test_annotation_aggregate_with_m2o", + }, + } + ) + if not self.connection.mysql_is_mariadb and self.connection.mysql_version < ( + 8, + ): + skips.update( + { + "Casting to datetime/time is not supported by MySQL < 8.0. " + "(#30224)": { + "aggregation.tests.AggregateTestCase." + "test_aggregation_default_using_time_from_python", + "aggregation.tests.AggregateTestCase." + "test_aggregation_default_using_datetime_from_python", + }, + "MySQL < 8.0 returns string type instead of datetime/time. " + "(#30224)": { + "aggregation.tests.AggregateTestCase." + "test_aggregation_default_using_time_from_database", + "aggregation.tests.AggregateTestCase." + "test_aggregation_default_using_datetime_from_database", + }, + } + ) + if self.connection.mysql_is_mariadb and ( + 10, + 4, + 3, + ) < self.connection.mysql_version < (10, 5, 2): + skips.update( + { + "https://jira.mariadb.org/browse/MDEV-19598": { + "schema.tests.SchemaTests." + "test_alter_not_unique_field_to_primary_key", + }, + } + ) + if self.connection.mysql_is_mariadb and ( + 10, + 4, + 12, + ) < self.connection.mysql_version < (10, 5): + skips.update( + { + "https://jira.mariadb.org/browse/MDEV-22775": { + "schema.tests.SchemaTests." + "test_alter_pk_with_self_referential_field", + }, + } + ) + if not self.supports_explain_analyze: + skips.update( + { + "MariaDB and MySQL >= 8.0.18 specific.": { + "queries.test_explain.ExplainTests.test_mysql_analyze", + }, + } + ) + return skips + + @cached_property + def _mysql_storage_engine(self): + "Internal method used in Django tests. Don't rely on this from your code" + return self.connection.mysql_server_data["default_storage_engine"] + + @cached_property + def allows_auto_pk_0(self): + """ + Autoincrement primary key can be set to 0 if it doesn't generate new + autoincrement values. + """ + return "NO_AUTO_VALUE_ON_ZERO" in self.connection.sql_mode + + @cached_property + def update_can_self_select(self): + return self.connection.mysql_is_mariadb and self.connection.mysql_version >= ( + 10, + 3, + 2, + ) + + @cached_property + def can_introspect_foreign_keys(self): + "Confirm support for introspected foreign keys" + return self._mysql_storage_engine != "MyISAM" + + @cached_property + def introspected_field_types(self): + return { + **super().introspected_field_types, + "BinaryField": "TextField", + "BooleanField": "IntegerField", + "DurationField": "BigIntegerField", + "GenericIPAddressField": "CharField", + } + + @cached_property + def can_return_columns_from_insert(self): + return self.connection.mysql_is_mariadb and self.connection.mysql_version >= ( + 10, + 5, + 0, + ) + + can_return_rows_from_bulk_insert = property( + operator.attrgetter("can_return_columns_from_insert") + ) + + @cached_property + def has_zoneinfo_database(self): + return self.connection.mysql_server_data["has_zoneinfo_database"] + + @cached_property + def is_sql_auto_is_null_enabled(self): + return self.connection.mysql_server_data["sql_auto_is_null"] + + @cached_property + def supports_over_clause(self): + if self.connection.mysql_is_mariadb: + return True + return self.connection.mysql_version >= (8, 0, 2) + + supports_frame_range_fixed_distance = property( + operator.attrgetter("supports_over_clause") + ) + + @cached_property + def supports_column_check_constraints(self): + if self.connection.mysql_is_mariadb: + return self.connection.mysql_version >= (10, 2, 1) + return self.connection.mysql_version >= (8, 0, 16) + + supports_table_check_constraints = property( + operator.attrgetter("supports_column_check_constraints") + ) + + @cached_property + def can_introspect_check_constraints(self): + if self.connection.mysql_is_mariadb: + version = self.connection.mysql_version + return (version >= (10, 2, 22) and version < (10, 3)) or version >= ( + 10, + 3, + 10, + ) + return self.connection.mysql_version >= (8, 0, 16) + + @cached_property + def has_select_for_update_skip_locked(self): + if self.connection.mysql_is_mariadb: + return self.connection.mysql_version >= (10, 6) + return self.connection.mysql_version >= (8, 0, 1) + + @cached_property + def has_select_for_update_nowait(self): + if self.connection.mysql_is_mariadb: + return self.connection.mysql_version >= (10, 3, 0) + return self.connection.mysql_version >= (8, 0, 1) + + @cached_property + def has_select_for_update_of(self): + return ( + not self.connection.mysql_is_mariadb + and self.connection.mysql_version >= (8, 0, 1) + ) + + @cached_property + def supports_explain_analyze(self): + return self.connection.mysql_is_mariadb or self.connection.mysql_version >= ( + 8, + 0, + 18, + ) + + @cached_property + def supported_explain_formats(self): + # Alias MySQL's TRADITIONAL to TEXT for consistency with other + # backends. + formats = {"JSON", "TEXT", "TRADITIONAL"} + if not self.connection.mysql_is_mariadb and self.connection.mysql_version >= ( + 8, + 0, + 16, + ): + formats.add("TREE") + return formats + + @cached_property + def supports_transactions(self): + """ + All storage engines except MyISAM support transactions. + """ + return self._mysql_storage_engine != "MyISAM" + + @cached_property + def ignores_table_name_case(self): + return self.connection.mysql_server_data["lower_case_table_names"] + + @cached_property + def supports_default_in_lead_lag(self): + # To be added in https://jira.mariadb.org/browse/MDEV-12981. + return not self.connection.mysql_is_mariadb + + @cached_property + def supports_json_field(self): + if self.connection.mysql_is_mariadb: + return self.connection.mysql_version >= (10, 2, 7) + return self.connection.mysql_version >= (5, 7, 8) + + @cached_property + def can_introspect_json_field(self): + if self.connection.mysql_is_mariadb: + return self.supports_json_field and self.can_introspect_check_constraints + return self.supports_json_field + + @cached_property + def supports_index_column_ordering(self): + return ( + not self.connection.mysql_is_mariadb + and self.connection.mysql_version >= (8, 0, 1) + ) + + @cached_property + def supports_expression_indexes(self): + return ( + not self.connection.mysql_is_mariadb + and self.connection.mysql_version >= (8, 0, 13) + ) diff --git a/venv/Lib/site-packages/django/db/backends/mysql/introspection.py b/venv/Lib/site-packages/django/db/backends/mysql/introspection.py new file mode 100644 index 000000000..196c35a9b --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/introspection.py @@ -0,0 +1,345 @@ +from collections import namedtuple + +import sqlparse +from MySQLdb.constants import FIELD_TYPE + +from django.db.backends.base.introspection import BaseDatabaseIntrospection +from django.db.backends.base.introspection import FieldInfo as BaseFieldInfo +from django.db.backends.base.introspection import TableInfo +from django.db.models import Index +from django.utils.datastructures import OrderedSet + +FieldInfo = namedtuple( + "FieldInfo", BaseFieldInfo._fields + ("extra", "is_unsigned", "has_json_constraint") +) +InfoLine = namedtuple( + "InfoLine", + "col_name data_type max_len num_prec num_scale extra column_default " + "collation is_unsigned", +) + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + data_types_reverse = { + FIELD_TYPE.BLOB: "TextField", + FIELD_TYPE.CHAR: "CharField", + FIELD_TYPE.DECIMAL: "DecimalField", + FIELD_TYPE.NEWDECIMAL: "DecimalField", + FIELD_TYPE.DATE: "DateField", + FIELD_TYPE.DATETIME: "DateTimeField", + FIELD_TYPE.DOUBLE: "FloatField", + FIELD_TYPE.FLOAT: "FloatField", + FIELD_TYPE.INT24: "IntegerField", + FIELD_TYPE.JSON: "JSONField", + FIELD_TYPE.LONG: "IntegerField", + FIELD_TYPE.LONGLONG: "BigIntegerField", + FIELD_TYPE.SHORT: "SmallIntegerField", + FIELD_TYPE.STRING: "CharField", + FIELD_TYPE.TIME: "TimeField", + FIELD_TYPE.TIMESTAMP: "DateTimeField", + FIELD_TYPE.TINY: "IntegerField", + FIELD_TYPE.TINY_BLOB: "TextField", + FIELD_TYPE.MEDIUM_BLOB: "TextField", + FIELD_TYPE.LONG_BLOB: "TextField", + FIELD_TYPE.VAR_STRING: "CharField", + } + + def get_field_type(self, data_type, description): + field_type = super().get_field_type(data_type, description) + if "auto_increment" in description.extra: + if field_type == "IntegerField": + return "AutoField" + elif field_type == "BigIntegerField": + return "BigAutoField" + elif field_type == "SmallIntegerField": + return "SmallAutoField" + if description.is_unsigned: + if field_type == "BigIntegerField": + return "PositiveBigIntegerField" + elif field_type == "IntegerField": + return "PositiveIntegerField" + elif field_type == "SmallIntegerField": + return "PositiveSmallIntegerField" + # JSON data type is an alias for LONGTEXT in MariaDB, use check + # constraints clauses to introspect JSONField. + if description.has_json_constraint: + return "JSONField" + return field_type + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute("SHOW FULL TABLES") + return [ + TableInfo(row[0], {"BASE TABLE": "t", "VIEW": "v"}.get(row[1])) + for row in cursor.fetchall() + ] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface." + """ + json_constraints = {} + if ( + self.connection.mysql_is_mariadb + and self.connection.features.can_introspect_json_field + ): + # JSON data type is an alias for LONGTEXT in MariaDB, select + # JSON_VALID() constraints to introspect JSONField. + cursor.execute( + """ + SELECT c.constraint_name AS column_name + FROM information_schema.check_constraints AS c + WHERE + c.table_name = %s AND + LOWER(c.check_clause) = + 'json_valid(`' + LOWER(c.constraint_name) + '`)' AND + c.constraint_schema = DATABASE() + """, + [table_name], + ) + json_constraints = {row[0] for row in cursor.fetchall()} + # A default collation for the given table. + cursor.execute( + """ + SELECT table_collation + FROM information_schema.tables + WHERE table_schema = DATABASE() + AND table_name = %s + """, + [table_name], + ) + row = cursor.fetchone() + default_column_collation = row[0] if row else "" + # information_schema database gives more accurate results for some figures: + # - varchar length returned by cursor.description is an internal length, + # not visible length (#5725) + # - precision and scale (for decimal fields) (#5014) + # - auto_increment is not available in cursor.description + cursor.execute( + """ + SELECT + column_name, data_type, character_maximum_length, + numeric_precision, numeric_scale, extra, column_default, + CASE + WHEN collation_name = %s THEN NULL + ELSE collation_name + END AS collation_name, + CASE + WHEN column_type LIKE '%% unsigned' THEN 1 + ELSE 0 + END AS is_unsigned + FROM information_schema.columns + WHERE table_name = %s AND table_schema = DATABASE() + """, + [default_column_collation, table_name], + ) + field_info = {line[0]: InfoLine(*line) for line in cursor.fetchall()} + + cursor.execute( + "SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name) + ) + + def to_int(i): + return int(i) if i is not None else i + + fields = [] + for line in cursor.description: + info = field_info[line[0]] + fields.append( + FieldInfo( + *line[:3], + to_int(info.max_len) or line[3], + to_int(info.num_prec) or line[4], + to_int(info.num_scale) or line[5], + line[6], + info.column_default, + info.collation, + info.extra, + info.is_unsigned, + line[0] in json_constraints, + ) + ) + return fields + + def get_sequences(self, cursor, table_name, table_fields=()): + for field_info in self.get_table_description(cursor, table_name): + if "auto_increment" in field_info.extra: + # MySQL allows only one auto-increment column per table. + return [{"table": table_name, "column": field_info.name}] + return [] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + constraints = self.get_key_columns(cursor, table_name) + relations = {} + for my_fieldname, other_table, other_field in constraints: + relations[my_fieldname] = (other_field, other_table) + return relations + + def get_key_columns(self, cursor, table_name): + """ + Return a list of (column_name, referenced_table_name, referenced_column_name) + for all key columns in the given table. + """ + key_columns = [] + cursor.execute( + """ + SELECT column_name, referenced_table_name, referenced_column_name + FROM information_schema.key_column_usage + WHERE table_name = %s + AND table_schema = DATABASE() + AND referenced_table_name IS NOT NULL + AND referenced_column_name IS NOT NULL + """, + [table_name], + ) + key_columns.extend(cursor.fetchall()) + return key_columns + + def get_storage_engine(self, cursor, table_name): + """ + Retrieve the storage engine for a given table. Return the default + storage engine if the table doesn't exist. + """ + cursor.execute( + """ + SELECT engine + FROM information_schema.tables + WHERE + table_name = %s AND + table_schema = DATABASE() + """, + [table_name], + ) + result = cursor.fetchone() + if not result: + return self.connection.features._mysql_storage_engine + return result[0] + + def _parse_constraint_columns(self, check_clause, columns): + check_columns = OrderedSet() + statement = sqlparse.parse(check_clause)[0] + tokens = (token for token in statement.flatten() if not token.is_whitespace) + for token in tokens: + if ( + token.ttype == sqlparse.tokens.Name + and self.connection.ops.quote_name(token.value) == token.value + and token.value[1:-1] in columns + ): + check_columns.add(token.value[1:-1]) + return check_columns + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Get the actual constraint names and columns + name_query = """ + SELECT kc.`constraint_name`, kc.`column_name`, + kc.`referenced_table_name`, kc.`referenced_column_name`, + c.`constraint_type` + FROM + information_schema.key_column_usage AS kc, + information_schema.table_constraints AS c + WHERE + kc.table_schema = DATABASE() AND + c.table_schema = kc.table_schema AND + c.constraint_name = kc.constraint_name AND + c.constraint_type != 'CHECK' AND + kc.table_name = %s + ORDER BY kc.`ordinal_position` + """ + cursor.execute(name_query, [table_name]) + for constraint, column, ref_table, ref_column, kind in cursor.fetchall(): + if constraint not in constraints: + constraints[constraint] = { + "columns": OrderedSet(), + "primary_key": kind == "PRIMARY KEY", + "unique": kind in {"PRIMARY KEY", "UNIQUE"}, + "index": False, + "check": False, + "foreign_key": (ref_table, ref_column) if ref_column else None, + } + if self.connection.features.supports_index_column_ordering: + constraints[constraint]["orders"] = [] + constraints[constraint]["columns"].add(column) + # Add check constraints. + if self.connection.features.can_introspect_check_constraints: + unnamed_constraints_index = 0 + columns = { + info.name for info in self.get_table_description(cursor, table_name) + } + if self.connection.mysql_is_mariadb: + type_query = """ + SELECT c.constraint_name, c.check_clause + FROM information_schema.check_constraints AS c + WHERE + c.constraint_schema = DATABASE() AND + c.table_name = %s + """ + else: + type_query = """ + SELECT cc.constraint_name, cc.check_clause + FROM + information_schema.check_constraints AS cc, + information_schema.table_constraints AS tc + WHERE + cc.constraint_schema = DATABASE() AND + tc.table_schema = cc.constraint_schema AND + cc.constraint_name = tc.constraint_name AND + tc.constraint_type = 'CHECK' AND + tc.table_name = %s + """ + cursor.execute(type_query, [table_name]) + for constraint, check_clause in cursor.fetchall(): + constraint_columns = self._parse_constraint_columns( + check_clause, columns + ) + # Ensure uniqueness of unnamed constraints. Unnamed unique + # and check columns constraints have the same name as + # a column. + if set(constraint_columns) == {constraint}: + unnamed_constraints_index += 1 + constraint = "__unnamed_constraint_%s__" % unnamed_constraints_index + constraints[constraint] = { + "columns": constraint_columns, + "primary_key": False, + "unique": False, + "index": False, + "check": True, + "foreign_key": None, + } + # Now add in the indexes + cursor.execute( + "SHOW INDEX FROM %s" % self.connection.ops.quote_name(table_name) + ) + for table, non_unique, index, colseq, column, order, type_ in [ + x[:6] + (x[10],) for x in cursor.fetchall() + ]: + if index not in constraints: + constraints[index] = { + "columns": OrderedSet(), + "primary_key": False, + "unique": not non_unique, + "check": False, + "foreign_key": None, + } + if self.connection.features.supports_index_column_ordering: + constraints[index]["orders"] = [] + constraints[index]["index"] = True + constraints[index]["type"] = ( + Index.suffix if type_ == "BTREE" else type_.lower() + ) + constraints[index]["columns"].add(column) + if self.connection.features.supports_index_column_ordering: + constraints[index]["orders"].append("DESC" if order == "D" else "ASC") + # Convert the sorted sets to lists + for constraint in constraints.values(): + constraint["columns"] = list(constraint["columns"]) + return constraints diff --git a/venv/Lib/site-packages/django/db/backends/mysql/operations.py b/venv/Lib/site-packages/django/db/backends/mysql/operations.py new file mode 100644 index 000000000..7a57457ec --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/operations.py @@ -0,0 +1,426 @@ +import uuid + +from django.conf import settings +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.backends.utils import split_tzname_delta +from django.utils import timezone +from django.utils.encoding import force_str + + +class DatabaseOperations(BaseDatabaseOperations): + compiler_module = "django.db.backends.mysql.compiler" + + # MySQL stores positive fields as UNSIGNED ints. + integer_field_ranges = { + **BaseDatabaseOperations.integer_field_ranges, + "PositiveSmallIntegerField": (0, 65535), + "PositiveIntegerField": (0, 4294967295), + "PositiveBigIntegerField": (0, 18446744073709551615), + } + cast_data_types = { + "AutoField": "signed integer", + "BigAutoField": "signed integer", + "SmallAutoField": "signed integer", + "CharField": "char(%(max_length)s)", + "DecimalField": "decimal(%(max_digits)s, %(decimal_places)s)", + "TextField": "char", + "IntegerField": "signed integer", + "BigIntegerField": "signed integer", + "SmallIntegerField": "signed integer", + "PositiveBigIntegerField": "unsigned integer", + "PositiveIntegerField": "unsigned integer", + "PositiveSmallIntegerField": "unsigned integer", + "DurationField": "signed integer", + } + cast_char_field_without_max_length = "char" + explain_prefix = "EXPLAIN" + + def date_extract_sql(self, lookup_type, field_name): + # https://dev.mysql.com/doc/mysql/en/date-and-time-functions.html + if lookup_type == "week_day": + # DAYOFWEEK() returns an integer, 1-7, Sunday=1. + return "DAYOFWEEK(%s)" % field_name + elif lookup_type == "iso_week_day": + # WEEKDAY() returns an integer, 0-6, Monday=0. + return "WEEKDAY(%s) + 1" % field_name + elif lookup_type == "week": + # Override the value of default_week_format for consistency with + # other database backends. + # Mode 3: Monday, 1-53, with 4 or more days this year. + return "WEEK(%s, 3)" % field_name + elif lookup_type == "iso_year": + # Get the year part from the YEARWEEK function, which returns a + # number as year * 100 + week. + return "TRUNCATE(YEARWEEK(%s, 3), -2) / 100" % field_name + else: + # EXTRACT returns 1-53 based on ISO-8601 for the week number. + return "EXTRACT(%s FROM %s)" % (lookup_type.upper(), field_name) + + def date_trunc_sql(self, lookup_type, field_name, tzname=None): + field_name = self._convert_field_to_tz(field_name, tzname) + fields = { + "year": "%%Y-01-01", + "month": "%%Y-%%m-01", + } # Use double percents to escape. + if lookup_type in fields: + format_str = fields[lookup_type] + return "CAST(DATE_FORMAT(%s, '%s') AS DATE)" % (field_name, format_str) + elif lookup_type == "quarter": + return ( + "MAKEDATE(YEAR(%s), 1) + " + "INTERVAL QUARTER(%s) QUARTER - INTERVAL 1 QUARTER" + % (field_name, field_name) + ) + elif lookup_type == "week": + return "DATE_SUB(%s, INTERVAL WEEKDAY(%s) DAY)" % (field_name, field_name) + else: + return "DATE(%s)" % (field_name) + + def _prepare_tzname_delta(self, tzname): + tzname, sign, offset = split_tzname_delta(tzname) + return f"{sign}{offset}" if offset else tzname + + def _convert_field_to_tz(self, field_name, tzname): + if tzname and settings.USE_TZ and self.connection.timezone_name != tzname: + field_name = "CONVERT_TZ(%s, '%s', '%s')" % ( + field_name, + self.connection.timezone_name, + self._prepare_tzname_delta(tzname), + ) + return field_name + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "DATE(%s)" % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "TIME(%s)" % field_name + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + fields = ["year", "month", "day", "hour", "minute", "second"] + format = ( + "%%Y-", + "%%m", + "-%%d", + " %%H:", + "%%i", + ":%%s", + ) # Use double percents to escape. + format_def = ("0000-", "01", "-01", " 00:", "00", ":00") + if lookup_type == "quarter": + return ( + "CAST(DATE_FORMAT(MAKEDATE(YEAR({field_name}), 1) + " + "INTERVAL QUARTER({field_name}) QUARTER - " + + "INTERVAL 1 QUARTER, '%%Y-%%m-01 00:00:00') AS DATETIME)" + ).format(field_name=field_name) + if lookup_type == "week": + return ( + "CAST(DATE_FORMAT(DATE_SUB({field_name}, " + "INTERVAL WEEKDAY({field_name}) DAY), " + "'%%Y-%%m-%%d 00:00:00') AS DATETIME)" + ).format(field_name=field_name) + try: + i = fields.index(lookup_type) + 1 + except ValueError: + sql = field_name + else: + format_str = "".join(format[:i] + format_def[i:]) + sql = "CAST(DATE_FORMAT(%s, '%s') AS DATETIME)" % (field_name, format_str) + return sql + + def time_trunc_sql(self, lookup_type, field_name, tzname=None): + field_name = self._convert_field_to_tz(field_name, tzname) + fields = { + "hour": "%%H:00:00", + "minute": "%%H:%%i:00", + "second": "%%H:%%i:%%s", + } # Use double percents to escape. + if lookup_type in fields: + format_str = fields[lookup_type] + return "CAST(DATE_FORMAT(%s, '%s') AS TIME)" % (field_name, format_str) + else: + return "TIME(%s)" % (field_name) + + def fetch_returned_insert_rows(self, cursor): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table, return the tuple of returned data. + """ + return cursor.fetchall() + + def format_for_duration_arithmetic(self, sql): + return "INTERVAL %s MICROSECOND" % sql + + def force_no_ordering(self): + """ + "ORDER BY NULL" prevents MySQL from implicitly ordering by grouped + columns. If no ordering would otherwise be applied, we don't want any + implicit sorting going on. + """ + return [(None, ("NULL", [], False))] + + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + return value + + def last_executed_query(self, cursor, sql, params): + # With MySQLdb, cursor objects have an (undocumented) "_executed" + # attribute where the exact query sent to the database is saved. + # See MySQLdb/cursors.py in the source distribution. + # MySQLdb returns string, PyMySQL bytes. + return force_str(getattr(cursor, "_executed", None), errors="replace") + + def no_limit_value(self): + # 2**64 - 1, as recommended by the MySQL documentation + return 18446744073709551615 + + def quote_name(self, name): + if name.startswith("`") and name.endswith("`"): + return name # Quoting once is enough. + return "`%s`" % name + + def return_insert_columns(self, fields): + # MySQL and MariaDB < 10.5.0 don't support an INSERT...RETURNING + # statement. + if not fields: + return "", () + columns = [ + "%s.%s" + % ( + self.quote_name(field.model._meta.db_table), + self.quote_name(field.column), + ) + for field in fields + ] + return "RETURNING %s" % ", ".join(columns), () + + def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False): + if not tables: + return [] + + sql = ["SET FOREIGN_KEY_CHECKS = 0;"] + if reset_sequences: + # It's faster to TRUNCATE tables that require a sequence reset + # since ALTER TABLE AUTO_INCREMENT is slower than TRUNCATE. + sql.extend( + "%s %s;" + % ( + style.SQL_KEYWORD("TRUNCATE"), + style.SQL_FIELD(self.quote_name(table_name)), + ) + for table_name in tables + ) + else: + # Otherwise issue a simple DELETE since it's faster than TRUNCATE + # and preserves sequences. + sql.extend( + "%s %s %s;" + % ( + style.SQL_KEYWORD("DELETE"), + style.SQL_KEYWORD("FROM"), + style.SQL_FIELD(self.quote_name(table_name)), + ) + for table_name in tables + ) + sql.append("SET FOREIGN_KEY_CHECKS = 1;") + return sql + + def sequence_reset_by_name_sql(self, style, sequences): + return [ + "%s %s %s %s = 1;" + % ( + style.SQL_KEYWORD("ALTER"), + style.SQL_KEYWORD("TABLE"), + style.SQL_FIELD(self.quote_name(sequence_info["table"])), + style.SQL_FIELD("AUTO_INCREMENT"), + ) + for sequence_info in sequences + ] + + def validate_autopk_value(self, value): + # Zero in AUTO_INCREMENT field does not work without the + # NO_AUTO_VALUE_ON_ZERO SQL mode. + if value == 0 and not self.connection.features.allows_auto_pk_0: + raise ValueError( + "The database backend does not accept 0 as a value for AutoField." + ) + return value + + def adapt_datetimefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + # MySQL doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError( + "MySQL backend does not support timezone-aware datetimes when " + "USE_TZ is False." + ) + return str(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + # MySQL doesn't support tz-aware times + if timezone.is_aware(value): + raise ValueError("MySQL backend does not support timezone-aware times.") + + return value.isoformat(timespec="microseconds") + + def max_name_length(self): + return 64 + + def pk_default_value(self): + return "NULL" + + def bulk_insert_sql(self, fields, placeholder_rows): + placeholder_rows_sql = (", ".join(row) for row in placeholder_rows) + values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql) + return "VALUES " + values_sql + + def combine_expression(self, connector, sub_expressions): + if connector == "^": + return "POW(%s)" % ",".join(sub_expressions) + # Convert the result to a signed integer since MySQL's binary operators + # return an unsigned integer. + elif connector in ("&", "|", "<<", "#"): + connector = "^" if connector == "#" else connector + return "CONVERT(%s, SIGNED)" % connector.join(sub_expressions) + elif connector == ">>": + lhs, rhs = sub_expressions + return "FLOOR(%(lhs)s / POW(2, %(rhs)s))" % {"lhs": lhs, "rhs": rhs} + return super().combine_expression(connector, sub_expressions) + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type == "BooleanField": + converters.append(self.convert_booleanfield_value) + elif internal_type == "DateTimeField": + if settings.USE_TZ: + converters.append(self.convert_datetimefield_value) + elif internal_type == "UUIDField": + converters.append(self.convert_uuidfield_value) + return converters + + def convert_booleanfield_value(self, value, expression, connection): + if value in (0, 1): + value = bool(value) + return value + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + def binary_placeholder_sql(self, value): + return ( + "_binary %s" if value is not None and not hasattr(value, "as_sql") else "%s" + ) + + def subtract_temporals(self, internal_type, lhs, rhs): + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + if internal_type == "TimeField": + if self.connection.mysql_is_mariadb: + # MariaDB includes the microsecond component in TIME_TO_SEC as + # a decimal. MySQL returns an integer without microseconds. + return ( + "CAST((TIME_TO_SEC(%(lhs)s) - TIME_TO_SEC(%(rhs)s)) " + "* 1000000 AS SIGNED)" + ) % { + "lhs": lhs_sql, + "rhs": rhs_sql, + }, ( + *lhs_params, + *rhs_params, + ) + return ( + "((TIME_TO_SEC(%(lhs)s) * 1000000 + MICROSECOND(%(lhs)s)) -" + " (TIME_TO_SEC(%(rhs)s) * 1000000 + MICROSECOND(%(rhs)s)))" + ) % {"lhs": lhs_sql, "rhs": rhs_sql}, tuple(lhs_params) * 2 + tuple( + rhs_params + ) * 2 + params = (*rhs_params, *lhs_params) + return "TIMESTAMPDIFF(MICROSECOND, %s, %s)" % (rhs_sql, lhs_sql), params + + def explain_query_prefix(self, format=None, **options): + # Alias MySQL's TRADITIONAL to TEXT for consistency with other backends. + if format and format.upper() == "TEXT": + format = "TRADITIONAL" + elif ( + not format and "TREE" in self.connection.features.supported_explain_formats + ): + # Use TREE by default (if supported) as it's more informative. + format = "TREE" + analyze = options.pop("analyze", False) + prefix = super().explain_query_prefix(format, **options) + if analyze and self.connection.features.supports_explain_analyze: + # MariaDB uses ANALYZE instead of EXPLAIN ANALYZE. + prefix = ( + "ANALYZE" if self.connection.mysql_is_mariadb else prefix + " ANALYZE" + ) + if format and not (analyze and not self.connection.mysql_is_mariadb): + # Only MariaDB supports the analyze option with formats. + prefix += " FORMAT=%s" % format + return prefix + + def regex_lookup(self, lookup_type): + # REGEXP BINARY doesn't work correctly in MySQL 8+ and REGEXP_LIKE + # doesn't exist in MySQL 5.x or in MariaDB. + if ( + self.connection.mysql_version < (8, 0, 0) + or self.connection.mysql_is_mariadb + ): + if lookup_type == "regex": + return "%s REGEXP BINARY %s" + return "%s REGEXP %s" + + match_option = "c" if lookup_type == "regex" else "i" + return "REGEXP_LIKE(%%s, %%s, '%s')" % match_option + + def insert_statement(self, ignore_conflicts=False): + return ( + "INSERT IGNORE INTO" + if ignore_conflicts + else super().insert_statement(ignore_conflicts) + ) + + def lookup_cast(self, lookup_type, internal_type=None): + lookup = "%s" + if internal_type == "JSONField": + if self.connection.mysql_is_mariadb or lookup_type in ( + "iexact", + "contains", + "icontains", + "startswith", + "istartswith", + "endswith", + "iendswith", + "regex", + "iregex", + ): + lookup = "JSON_UNQUOTE(%s)" + return lookup diff --git a/venv/Lib/site-packages/django/db/backends/mysql/schema.py b/venv/Lib/site-packages/django/db/backends/mysql/schema.py new file mode 100644 index 000000000..7ab12f2a8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/schema.py @@ -0,0 +1,175 @@ +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.models import NOT_PROVIDED + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_rename_table = "RENAME TABLE %(old_table)s TO %(new_table)s" + + sql_alter_column_null = "MODIFY %(column)s %(type)s NULL" + sql_alter_column_not_null = "MODIFY %(column)s %(type)s NOT NULL" + sql_alter_column_type = "MODIFY %(column)s %(type)s" + sql_alter_column_collate = "MODIFY %(column)s %(type)s%(collation)s" + sql_alter_column_no_default_null = "ALTER COLUMN %(column)s SET DEFAULT NULL" + + # No 'CASCADE' which works as a no-op in MySQL but is undocumented + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" + + sql_delete_unique = "ALTER TABLE %(table)s DROP INDEX %(name)s" + sql_create_column_inline_fk = ( + ", ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) " + "REFERENCES %(to_table)s(%(to_column)s)" + ) + sql_delete_fk = "ALTER TABLE %(table)s DROP FOREIGN KEY %(name)s" + + sql_delete_index = "DROP INDEX %(name)s ON %(table)s" + + sql_create_pk = ( + "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)" + ) + sql_delete_pk = "ALTER TABLE %(table)s DROP PRIMARY KEY" + + sql_create_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)s" + + @property + def sql_delete_check(self): + if self.connection.mysql_is_mariadb: + # The name of the column check constraint is the same as the field + # name on MariaDB. Adding IF EXISTS clause prevents migrations + # crash. Constraint is removed during a "MODIFY" column statement. + return "ALTER TABLE %(table)s DROP CONSTRAINT IF EXISTS %(name)s" + return "ALTER TABLE %(table)s DROP CHECK %(name)s" + + @property + def sql_rename_column(self): + # MariaDB >= 10.5.2 and MySQL >= 8.0.4 support an + # "ALTER TABLE ... RENAME COLUMN" statement. + if self.connection.mysql_is_mariadb: + if self.connection.mysql_version >= (10, 5, 2): + return super().sql_rename_column + elif self.connection.mysql_version >= (8, 0, 4): + return super().sql_rename_column + return "ALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)s" + + def quote_value(self, value): + self.connection.ensure_connection() + if isinstance(value, str): + value = value.replace("%", "%%") + # MySQLdb escapes to string, PyMySQL to bytes. + quoted = self.connection.connection.escape( + value, self.connection.connection.encoders + ) + if isinstance(value, str) and isinstance(quoted, bytes): + quoted = quoted.decode() + return quoted + + def _is_limited_data_type(self, field): + db_type = field.db_type(self.connection) + return ( + db_type is not None + and db_type.lower() in self.connection._limited_data_types + ) + + def skip_default(self, field): + if not self._supports_limited_data_type_defaults: + return self._is_limited_data_type(field) + return False + + def skip_default_on_alter(self, field): + if self._is_limited_data_type(field) and not self.connection.mysql_is_mariadb: + # MySQL doesn't support defaults for BLOB and TEXT in the + # ALTER COLUMN statement. + return True + return False + + @property + def _supports_limited_data_type_defaults(self): + # MariaDB >= 10.2.1 and MySQL >= 8.0.13 supports defaults for BLOB + # and TEXT. + if self.connection.mysql_is_mariadb: + return self.connection.mysql_version >= (10, 2, 1) + return self.connection.mysql_version >= (8, 0, 13) + + def _column_default_sql(self, field): + if ( + not self.connection.mysql_is_mariadb + and self._supports_limited_data_type_defaults + and self._is_limited_data_type(field) + ): + # MySQL supports defaults for BLOB and TEXT columns only if the + # default value is written as an expression i.e. in parentheses. + return "(%s)" + return super()._column_default_sql(field) + + def add_field(self, model, field): + super().add_field(model, field) + + # Simulate the effect of a one-off default. + # field.default may be unhashable, so a set isn't used for "in" check. + if self.skip_default(field) and field.default not in (None, NOT_PROVIDED): + effective_default = self.effective_default(field) + self.execute( + "UPDATE %(table)s SET %(column)s = %%s" + % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + }, + [effective_default], + ) + + def _field_should_be_indexed(self, model, field): + if not super()._field_should_be_indexed(model, field): + return False + + storage = self.connection.introspection.get_storage_engine( + self.connection.cursor(), model._meta.db_table + ) + # No need to create an index for ForeignKey fields except if + # db_constraint=False because the index from that constraint won't be + # created. + if ( + storage == "InnoDB" + and field.get_internal_type() == "ForeignKey" + and field.db_constraint + ): + return False + return not self._is_limited_data_type(field) + + def _delete_composed_index(self, model, fields, *args): + """ + MySQL can remove an implicit FK index on a field when that field is + covered by another index like a unique_together. "covered" here means + that the more complex index starts like the simpler one. + http://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757 + We check here before removing the [unique|index]_together if we have to + recreate a FK index. + """ + first_field = model._meta.get_field(fields[0]) + if first_field.get_internal_type() == "ForeignKey": + constraint_names = self._constraint_names( + model, [first_field.column], index=True + ) + if not constraint_names: + self.execute( + self._create_index_sql(model, fields=[first_field], suffix="") + ) + return super()._delete_composed_index(model, fields, *args) + + def _set_field_new_type_null_status(self, field, new_type): + """ + Keep the null property of the old field. If it has changed, it will be + handled separately. + """ + if field.null: + new_type += " NULL" + else: + new_type += " NOT NULL" + return new_type + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + new_type = self._set_field_new_type_null_status(old_field, new_type) + return super()._alter_column_type_sql(model, old_field, new_field, new_type) + + def _rename_field_sql(self, table, old_field, new_field, new_type): + new_type = self._set_field_new_type_null_status(old_field, new_type) + return super()._rename_field_sql(table, old_field, new_field, new_type) diff --git a/venv/Lib/site-packages/django/db/backends/mysql/validation.py b/venv/Lib/site-packages/django/db/backends/mysql/validation.py new file mode 100644 index 000000000..fdc3809c1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/mysql/validation.py @@ -0,0 +1,77 @@ +from django.core import checks +from django.db.backends.base.validation import BaseDatabaseValidation +from django.utils.version import get_docs_version + + +class DatabaseValidation(BaseDatabaseValidation): + def check(self, **kwargs): + issues = super().check(**kwargs) + issues.extend(self._check_sql_mode(**kwargs)) + return issues + + def _check_sql_mode(self, **kwargs): + if not ( + self.connection.sql_mode & {"STRICT_TRANS_TABLES", "STRICT_ALL_TABLES"} + ): + return [ + checks.Warning( + "%s Strict Mode is not set for database connection '%s'" + % (self.connection.display_name, self.connection.alias), + hint=( + "%s's Strict Mode fixes many data integrity problems in " + "%s, such as data truncation upon insertion, by " + "escalating warnings into errors. It is strongly " + "recommended you activate it. See: " + "https://docs.djangoproject.com/en/%s/ref/databases/" + "#mysql-sql-mode" + % ( + self.connection.display_name, + self.connection.display_name, + get_docs_version(), + ), + ), + id="mysql.W002", + ) + ] + return [] + + def check_field_type(self, field, field_type): + """ + MySQL has the following field length restriction: + No character (varchar) fields can have a length exceeding 255 + characters if they have a unique index on them. + MySQL doesn't support a database index on some data types. + """ + errors = [] + if ( + field_type.startswith("varchar") + and field.unique + and (field.max_length is None or int(field.max_length) > 255) + ): + errors.append( + checks.Warning( + "%s may not allow unique CharFields to have a max_length " + "> 255." % self.connection.display_name, + obj=field, + hint=( + "See: https://docs.djangoproject.com/en/%s/ref/" + "databases/#mysql-character-fields" % get_docs_version() + ), + id="mysql.W003", + ) + ) + + if field.db_index and field_type.lower() in self.connection._limited_data_types: + errors.append( + checks.Warning( + "%s does not support a database index on %s columns." + % (self.connection.display_name, field_type), + hint=( + "An index won't be created. Silence this warning if " + "you don't care about it." + ), + obj=field, + id="fields.W162", + ) + ) + return errors diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__init__.py b/venv/Lib/site-packages/django/db/backends/oracle/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0eff702aadfda57f645eb978ee1922441b2cd164 GIT binary patch literal 199 zcmYk0Jqp4=6ofaDLWCT|BBmD+K~W14QS2Uu{dt6q$!^%U33w#0Bv^R{8!I=J4$L>q zRAZB5#Dd5wm#FdJDFMeI`s?re`g;w_ot+5)T4!XF<~b} z-6(VvlXgt;QL zXNrgHLm07}^%kBj9<~pQdSBtWqGem6-d{LU9IyvOeNW*F#iRC7QQun_EIw~PFY5aW z$BIMtP%&+%#r^)m@!|>lgsQj(JHQS;z|8i^D++st9eSX!Lz|jCjJs#qVcZ>dQ=1Wc z1ozJ|3-=bDp2FP`Hh{YU+?~eV7uZqU9mU-lrp+no!K#~>;n`flwOH2AE@nN~TFmC| zxFu#SmAN&(nk_AtM-quy_iiQ6UC+wB<;WM#TPwc5=AA!vsw@T=SK`PACF zzfvv@H@comd_csINvlCBS1$SPTYfQH$}YPcEvD!Ce!jHqq251LT;t_6mlxK@%B7|J za)rB$-kQQo%RKL|PjFtQxB4yv)bSAH8$7#)m(ZNddh4Z}Qz?1bB{!`F9au!pbr#os z*9+qE#`CFXS1y}dahW6M^Vf4A%*LOA8joayxNL+t4?nwa6p0rq`m6 z@#ft$Q|1&uzM6Q{QBxj+9O*tC&Dh4+%_}#iGMs>{Isyq+p`2yFo0ap|*Ie(sHR!!+ z`75p!?q_`)d1L29Kg%y$gyF33TDdakZq6^PTa^-Xxiz-Fd_P|r3Cue#FS&(tXVb~R zTq|UKAg&k~-n!?z#UNTCWCsb)&vM_pk6jN82}96<{VQ`{z{hpK8t7x=)6@38IoF>k z-OKZGspyvc>sg-9E*9L;Kr4Ge%#}|9qp}7fbkhd!$E&=X-dA1TA;u|Xi*69Tmn~G> zCkj7+wvU#^&fi+_T<+bPt$1Gc)_6Hrq2aw-SMvTFmBm|=dG7hc*LZmqtGsm&^W2)w zFW&OwrWnYfcC!O|b{_dlrh`h^8jh zl&aA`P5VUOGT+g*5(c&DTip@<3_7JX+ssVQIn$$=E7kbO==8a>3-gmNqxrzh?5L9& zdt-FgnVy=Tm>r#VW+$#qkB&_Q`uyy|M0KETuj|}r70awraB0^+Afg~9sk6gaArBDI z(%op`Zr0D2OU-SQXaai?+wH0M1Do-(w+3v<&b{>qGlF8!D7duVItLCaW+zzQ2Ty82 zm!v$0VH5p4wkyIsnzAv<^=u)JhZrUYkQ;v*YQ$~S=-or{brQqMbwyQf2oBJ}f2->H zdGHt7s?XPyRU8-xlnvF7)F6sCHU6TgMW|L&S9PY}L5)RGkKR+f5oX95`Wb$V-rrQ; zSH7Ws1LJQfUsH%b(=o|kfu1WfH;5Ho5Y@7qKVgFB;@GI+(`V1Vawe>vK7IO3+6>G( zE`rW_P3%~pXZbQ{dnM~-eV_AVSQa0mB8no2f}RQxP<$`lsc#8_mc>D8>Aeq;=19Tn zxFqvDA&Z{JL+u?+ORC*!qQlg*EnJ_N5$$7B*M3A-%FtAh;D6_*(6t54xK|>$F5&WM zURS~StKjU_A<7~TR62c0+yqCQg;Kth_w(4Vs>|f&1B7wc%klggb~}@!k?Ma`r%fEg z|)(0dsr{ZKGu(Nk9fLQl>69zv_R=V33US{)C`nRE>J?L zKzWcI#&wV-p;jDZhoJl%WrOVbhaKNj?I=6OhFDtsJN__g8|;J~bInb~j@+*W&a!i;)7>fd!o#GU$SZE*dn$X8y@ZR(m)K7|G%#WZd)ZF1SJ-*>D!ag5V;9-$ z4-LDMU1FmT6u0wH>M>4LC`euGa$8Hc+hg~*y>_45Z|`yU+WXx7_5t^x{fv9ae%3u~ zKliS(q_QzK{=l>?Ho+#L6drL0*cJAMP`SRqrr4WkJBqejY?@tt0HU@BS%%G^^?7!U zeF?wE*esjF?-2UTvjwnInq6l%&~n^8!M@CHO7#tOn|(#phu>9n#U248+zz_x(j(Mm zY(p}?ZAhVN$44uEc{1-7SoK_H;p*jy*`YIM($2B&a&%#O-kQl+ znT6?TYjn<<8lT9_PtD)7lb7?$yA1Klk1<5Y<$Nj2*98!^etCN4a*(`SE*IQvNdgwH z1D3YqV=GxMTMuNekIvE&cXnuSsF;1rDY&I&e-P22ZC#}IDCc8OMTXHzuFiGcl1=!Z`w_~^|ctbcySnwuD#$&3%Z1c)Z{g%F}ns$R?bD-yuOBor=Rj?q0nvv7HO z!n!s)F*Y?fHIuQELPK@KB`4~LIFkkz2}Nsa(O=Ysh!TflCGW&XMgeY?`?H|W16--s%`@SeK6f&cg~dD`7#Ot zU$F058TwTIp4+ylpuhg0d8xsHdg~nave5jeg9w4){Qqc7s7s=o%stlIIKwQ%hkICaoVS0|^ZzBpmc z&yHs1ra|gxvliy2GFL3A{*BG0t%%e-l=+3j3dW=+GwA1IQ=3)8pSH{ zqhAm=7w87Mf7E>|oAYfWFMb1)Y_}|q(IB30RJCQ_jx6JJ)(WT;e3y3tD}f0MQrZR` z`6fdl4$V}ySNmukW04{aVS#NJpNq5x)^)?C9+Z*Y|qeN4;o?RZ- z-+X(c+EcGLy6s$!SczB@EvLmEB?XK0Mxwe852MH{HRW~(EJ$@jBW0_m?SrbdPx-EP zm&|&t+TBKNR`tbpN~+^_n}~KHH=(6Gi3Hln=|H^`sP~%G7NMyoE|8v;D;L);{#yVh zbSFbGBFRsTt?I$HQ*C6s^QW$lU&Sz3fgwqu+EIrS(8Qxh}4ihvPsqSyzg*tpK7$OC}p~PFb!P-Gn2ZZNi16Ec|y{GUL*;}tci5KcSpF=+Z z6HJ*KsFUrqw*EvDklP)Q5+!FX%d^ED3ilpTx9PbwHp51dJMg={ zmm|pQe^e(jAa3!Fqaf>%>Gk~;zc4^xF$z17MIOS6BpSe)qM1Nnn46fj&1<7`b2nyY z$H{=ec4J%DV2<1`bH)cTrocP4D2;j$3l}1AARm(<(MF^}FTq}N?>DXcPtnawp)fQP zOEy*gV@)@HR2|rD*{!ec*gY~^#G3yeDmCSi@)#B}nO@|vBEt(c&DT~VyoW_fz{oz~ zV?w+B7GRBuh^=&ep$u4f_vgM#Yvzq zd{<8Lrc#Q-=Y==J)=p||%!R(IDW?lFbw5_T+xYDfFu*Jn+?L2xPmE4OQG;$aM;aD> z=Ph!gplx<)erEQj^_q2T^y}3yVLWFevbU69{d7!ipV(&vjoz=nD^lY6u%+&^K%5TFl`(5ZLmiO#_b_# zPTvJ_D&EWJZmNl>9)(9udeWi^)r31khi}bPwJlvUKTbtqmaA}iz&scK;0n>Vc1np| z=gI646Lo?2A&E?%$Q7pDoWjrJ79OoblW=@y{W*UfmH-(PE9C+lrDMX?z{{eO6w>=p zZ(A&1K^vU+ibt~~wCc0%Jl(SIE$oc9VE%{fd>Iu$2F9qU{5fCURKC+G7*05(Z$N4@ zoNcwWFZ2>b3pZbJs23>U!r3BixxyTfnfkzRvbf=t0_`%tTUyTh}#`rPoaH49D} zotv=cMz2p?n}OX%+Tzes_6~vq)#&LF_~5Wf5$|px(8=MLj@qfa71&3v=M>7z%PzA! zn(hOG!UQE2M2PqkcPnKu9eHGMco7oph?i&WnCNl5>^*m_j59u5=SzeWA+m8or8Lmz zCnn+L$PT=;zqtcLjV&hbrY#m5OW08zjeMW=Z6&N=WBb}SHr!OZU-%1I7!L_OhGMIO z#5RY9>*N&CXkTX+Ik}s-`E^<)?I3tk9oVWqw{vwZ{ae;XlB=;cNxpO%eWwrFs@6D< zs3!IuD~&W(8WAf+XswBa(U#V$g@hIUjjg!3I|yIEqsL*8_@1@6ZiTuQ#XyP_<;WL{ zF3Ur_j99ZmRckz9?h<^eE^CaJU4l%6g2hG}P1R@Vz=2y}4*D@jZ_XNpM`h~j)rs*b z94ggAyFG>j2B*`+cm|jj;x7+Gq$8m=g!o!P5}dcIaO{C#&D|m8puVgz+5|#m0-`Xf z4t%nc$acK*>2hQU1655TGxEj?=Q@l9IM<;PtRprmB?kF`;S7&tCg-8vkc_kSHE6j~ z(}@aiE3crror2Z%6aJn~o_ho6tcbXw1}yh?JGNYBId;eHff2UFdSAxr?}XH%ts!d(RILRknkIs)3k zaW#Xke1wX&<0^h(8UB{H*7(KiSki}NKxpsmRjMzvF9o5_&{=;E@hJG3MlKY}xop9^ zIMNs*P)C5!VVXuNjbT@q4QqwGzbj6Ab__gEfY3q@YP%3aI~XnK!JFG$`37#Jp7))- zDsU@t4B`MWJkqzZyvyX~-r zekNx5yLb=6zaQaA#2?|KBqjg@zcO#q|1_Z-qGGVzx zMT`nY1*c+#ihESNO~nQkU!&q3Do8`&KTE~Wp$Ixd>p15Y3Uv!vkla_Oi?Ee1qDI2m z`yVJw1(vd^nYf^2B8ZE4nvPf+RM8*mhW3#j)Ba31wLjJ4+W*xP+W*lzv_H|4+W*!& zwGZ`__Q!gc_P_LQ?T_>x?SE>$A`~nG!j01Wf%aUz-T0v%H#7}_V+4#N;+Oi#x^Dbu z?J(}PaKHWbpXt5L_r^y?+=v(-8&Ly(4qXTI8m&P7OKN6JGoY}U+VP}nM$DKQPv~Y` zGZU&7=~X$cJ%_91kL2bhTteiwgp`oXz;uK&bQT4x$AXR-k?(Ph%=+y2!6o9%4C5A7 zd69zcB6)uMZS5%#z8 zo>hPo#I@W~xw5=s4J`}1iDQgx$$A0Wpp`?^0WM3-lNQ5KK19B>R`D&eSgexkGLLkF zMVHhC3Nn&Me#9Cj$7Km~-g67tdOJ9Ik`_`DtC7Hl zkni4GjCVg@C=eiUE-(Oz+=?t4v1Tw1zn}NqlL&}5!(Q)Ba09b6l^CW0q;;Plkj5k7 zoYqd-@48fKCUbOr)&J;(ZJe@ygd6ga@ID`29zU{5adcVNH#M)%*B>F0j?5LD5*yIk znTFu*Ar{$CONgs89d`qGqWW|f#k(W0^J6vWcCh))(or!gvRW{5#}Y;BU#-a}`+Rr= zYT9aNEwTx3jANpwvTFJ%^qKX$d~^HhCT14n8+djbLF8`q@211NrnA@`oi8JArl;Q4 zvmp);S^Huc5L$47{ zHX)fsx&uE-k2-}1uhB-P5C02Pm{f>^-;i;%AWk+5a|_6$iPNhwqF!t-EE=B&5roP3 zchPR^M5Fu?s)$37p%O#|oI;7TlahNpr(7zm+a2;wkZ1cbOTu-9PPMbB7!gPVkv))r zs53PK=A8~zKc)7f)~zSiUPQkkOK>Hj#=(B=Z(@AJyrqvb^F*BlSZ&81!s)D>gY2a_ zo8V}80{GA4!B^`?ED7LLT(s>FOr+~v!X>=6ErN-X7Jwb3FGTT+Xg7=D*I*`#<2S|< z5LX>RS3TP(lu+4tU1W`xtSrl}VYkCn17a)bgt6|0DN2wQD_P%yP{KhDJA;^tY^^o$ ztQ2*E32D>8%fxojJfPU&$OiL5(qt{UBa%A>uaj*eauJYVfh;V@lxD<=@#a?`?BE`5 z$OqCxIU;83g7>qfb*oH*qAqR)klsqUQegB7c`8Ey#BkDKF%mkKAohmyo|FnLW*ecJ zt}#M4ovDINl@^T|h^d>AkI|!PZ^gMv`~8=IV4B!siQ^$5qB5F zF8JgcfQYVXo5f9#{`3UpG{LoP%W+WNm^dyI?<&QS%5-yJ> zX%zurf6`9C{>YJq2oQ-CG1QUvBI+jUNPZFZI3>WKZ-P=_@Y_L2F!-eemR{Be9j6m1 zEPL2q)KaJ+2?n(;nR{z@%e-5=M`qmGy)x6*?vpvTc0cRKehhLSKvsWO@SRMbr4!z> z2BbPPU=6t=%OeObddJd`4e%^lB3D7W7Lmh%T&H>tr+o1|cy2(9C%TVVLOLwv-@>SQ z--4rzUP1blD}@!bm-TYRx}Poir0ZZ1D{H~RBmrU#40;0)KVrD7)DKQl_hV2-NIj~* zF))aZQbtsx6@O{?;Sw4zxg-(Z zic_L5rQRY97n~=Y4B#+fUq*shm|POX!ekV_iTBg$uDrFszSdHuxae}SNX5Cpe;t$a zKaUryFFqac5LfN*@7M=g2wlR39tsY_hj1W|Ne%whZ>!%zUHVSQ>)L?@eoK8eJHI4I!?QsP>XiB4+!UdG!=y|>bP3f-c#R$ljhqZ^h{aa6c3{;Z|wW8 zq9gwsC;}4+a3vpVGZ6MAG{EulYxp6Tt!#IM<}76t9VUT!p^z;uvh2m*2Fk>V(yvq} zo{lt%Nz`+I8Ypk_#)Kn6Wud(j;03WU39f|G@Zh*{7vWis6C$AMl}qr^P@{zHZ_|qc zz`Y`AaL07N32?>vX~HanB1J@c?k4~{N8-5tM+Pz7kKyvZilU~G&W=N3xE2+MML#rQ z4fj3d(AzLdJ-&`IC0ca^4m4=-BGVkL5!nZP3QAdxAzvMOcgw{?UI$j~#YZwVnm zF4r+=9uN&n(2rb%e=N2LHHXq^tR>fn*8-170g}3t*YLMW%7xV=^rpsW(4LUwj}&kS ztZU*^0gHHF3LBa(|Mjh{Es^W~!4?)OQaC|3K|ITOcAYG*APMGZY;PtV4>fC<`6NUz z|C@LT0Qf08rVfP?%;K@A_T8r zMx~k*nTzBdg{4IDcN`+?1~?y1U3J}(E?r*}z37-kFY2+W8VC&uH*d7ngGxgap$Q&8 zj7n>w36vxaoQ_CSm}sKTBY;GzJkLSE{psrmdBI;0W&$*^ zY$L&>MI6zXWWmzG;vGUEoV{`B?3F-<4qx&VYx5cY56}rhX9hoky4DWtH_`lu1T4uo z?VW>4_2N$kZrx=J;rAU3#mU+dPDsrC66%2=thX>DLZD0tla$kffZr!rND0@}{SYDt z$%TI6$AGAXbZAc-=KkNp4SB>VxkDt+59jfb3X#U`K1zCdgy;b3$?yY}=&Ht_t)YZ2 zs$Wp<_S}V5%1=OGz!|@tK0}ASyp~m;oCFwsQ|)gW*~iB&n=}iJY~a%u8u`s|WCJ5# zy!$dnUZ9a{+WYX<*T;l|S%`x`hw?2Ehx{pFTMHC_7b`+^8fG~8dPqQc{4b*|h`W$M z;$s)^Iw7ANrId~WzpCd$s*A4w2oLx*DoB$F)O;JGBY3`CK}IG_UQ%AfOaFzo=Qz5j zAmd>$BNhmQ`WB|%wfP<3^T6{|Ixfq>*6@d1lvJ4gTc9c?ER+XO@32$=0{yCoU-=U%vz#wsf zc3b4Asen*FOv4gNRY4Ms$C^_$3d0>Yq?!&kR&8BAIFB8*9Bf1sZsX*kt1IvdEpSJU^R zcjk*e+kMF8@F-5RERi~y%zUK2`jL9-184+W{GVWvEksNdM{-Tj z#$Hqe5hLP9%dTP4`Z-mNoJZmf(FOL5P5{a8t%M@72vZnS=$eT0U3&WNzyu?i{drF; z+NTDvB=QBY@sQ)NH`@R|QLDyz___yWJ_3#s0rNj2z#mev3*h^Sw28C~d^ggT{z!Nt zX79r#ba%l+#s>8E8su~{7d7LErb3vsE;H#MmNSdv{a@heGZ>lwIx0Ugt{TkLvav1F zX?tVqxT>jgW4G~8N745H%Wn3V*xN${EpbZATy^9KA|k`4jvTooA#(mT4cv?zu^Daq zKq#^5C`l(|in0(9{}fLGoiK!5fDnLdn5F{ zV)f*YL+(320iy$A441S{gxd-d2HNSjBjLW0ajhYPP({R9LmE@BNMjP2K;Zf)as6ZD zz3fP68rl(Yj%4OxMh2J-ion08)&DLPr>Hnb1qJu`zeEATpo5?PJ1Pi|+cYCXfzRO2HgTK6d%QS^=AvtUA%4pbpX{~ppaA0fmNs`I4uN2&L&D0_Ve%63VX zAZgTx>qFu&LG=)wm>5FgvDzdQfNCO2dAPPI`9$*Ph~$Z{suw;F((v*3degDLy9B_H zLRu1h{6A13m`@d(`l*ooR2>ooDs^&s3E~KJWO4XyBocIldr07bidw0pp(xTIcE=KZ zN-R}J@f|q@Hr+5;tf9j5{|GRT6DbisVf-Pk(y#7Eq=gu-7aBasYUuM~s6|FWZP?D; z7{X0kA`gfRHeYKZ58CdBzHD7G#S3^*Sjza!2o4&)gp|flP3RFRr{`%k#26aXSsW{f zj#mesx&rb2Wee=IlO)ft;QFu|1=s8Aq3{}YCi4*wVH(n5JF;e50xPbq67wE$B85m z1D{jtlqP{I2DTkA4YNNHOB{iBr@IlP@G)TetPFYlMH*ZxxS@{62M z4BwLce>Bj(B*Mt{-bM>|5tqxkYxISpC;rm}d?G8mvqkZ>xP7Q`KT`ic3Q)m+PCx}W zXomivqH`r8yU;clWh)SgMr7=l|J)Osjc@y2Km* zmxs(A>OrIYcHNMvLNag2tS1SHoFRUbdRg>-XG=~HKZ3R(A+y)TvInRW9Iy2M35e7r z{4W!<5)o4uA5_?h?PMYTJi5!X{xsDtQX#xh6h4yPzg_kl{$%+*_C=z7Zx)5Fm`Et6 ze~595I5)+*yGaR%Xni6(=ZE^1)qxJ{9^n0{rUagbJ}dy5sV)nzV`202z@h~`C-Fm3#NJs zf+LP&a4A+ zwXJnk*oVE>2fnxeve$e6?qH`y{6~C5lR?_%{dS+Sk0Rl!ol44L(av-fD`_Zgk)o-D z)=@H0A&;0YPro2p1Le=*_VeIS38{jEOeq@dq%0c)b1K-4^xLc-yosdJ8~ZXH38sS+ zk(>m3Q9n?T78?@?N(Vv(RURGQ?_B56sq*NsvJUOZr(%hvNdi7Xr6uHIdO!jDF4Q0LiMnuzY?Cge($D6It|&FhsGoX zx>rD3617Yk*v57EJUo5!7g7JS?zR>RFD$bR!=fIBpz$C6 lqifBRZCAY_&C@9j<^q)QN}jwI6@pFkOq7Y|K?|)|zX7*Q9uoin literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/creation.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/creation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..561833831f54fafda770a7a16c4f9f5850d5f335 GIT binary patch literal 15253 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bca2ac18e73a1f6f4de1cb3c96b068df8c8c0c17 GIT binary patch literal 4385 zcmb_g-E-T<5eGns`mkilvTRAU%WOxLDl*GUsM{h%qz){HGFBpuf`n%sc6qX-EE z=sUoaICiH~dzzO_`VZtGdB{Wli~b#)=~JKj-ae#l>i!NOLCPP^WEx`jaJRR&x3{~u zyI?RiHKF16k5B$m`}3@({Z$QyeDkK#QIm_h#--m`$?fH{m$;C&MBdB6hti-4c-Q{*(ukhg$4gYnw{ z3;nZzbIc^?*$BA++&h4afFi##A?mQblqCtsFrS*%D+e_Zk2AYZ=|C>+09>C*9J7Djn!n(`7EXU{@pKa4ff0Z zf3kqnYou{sywEf)mY9B@>kgrPcMy9pG|i*Kk~bBuD(fr;OL_$P3AY zY;)$y26f!dh2s5kxwKKG)%APOVBy}DRj68OV3Ey@lC^ZdT3qVfU^QBgd?$1RU*Vl@0s)^&9!hodRA}VALe=xIwPddH)Bl3We>cl~L`Hn#q}+ zGn>M8JZ`aoOMfY}WYlT}BD4}ChKALO!qt_P_f}SJVhy6CZ+jM3QPXm8#(ZbZ_WdBV z`!1twxDoh;ogKklSSEguKfcI*ts`V*H^_LgVT(0oPcnVW-BAf+hxZVZ zhej&5@T%M7F?B9WPTb}`+`?JkDln$pJz+Dy6-YO9AM=;l&Gjb^v0dzAD^1(;4ow|< z6*WE(!03*^cev;-xPB-C+2T%!3>Nz$4G&szUNa^4>fh+yaY`M}mXgwMw14gvZ*Je0 zT*&QmB&EH*8aPpt`=Q*v?S^-v+V+|&WO#K;1iRq5{h0fYx9_^OZ5)eVZQ0HqyjpIv zUEALYmRW7N1{C+1Tn=K_Uat4@YQA+Kj=&0BnPU!(VPtjVg<%+a{~7zXlY2R9)Hd&KWA!T=3rUZo}#kooP1*J zB4saXyCW>KXNb!Ww1=oSo*KV19^h@_d6q%dVOF$1^zd!Ht&M}z(CkP>yN1%GjUCkU z5Wuw9r#e?ErMsnK)hZS$)k{nE5)z2@aiLtiQz&1*bYo@ZS}vDlMHbnfP)_T9j^nIV zbJ^~M6Zk%~j?mf7I+2hlV@CNtcOu+T1EgKk7CW+Qs#}`Nh)JLXsw=Ilb1|(3aWkVZ zZ}(!0q)y;@@l~eCBMv-1_L4^+k_%`iVUeSFX7mYt=3hp3?DxiZhI!%J&dMvc`5uj@iOvMf0EKiIBhaRj>FZ1wxl~Eh+4FEK)s+w&cg0oAaR6}@@6YM zpfXfZS5jNXfn1Uk4RqnsP!L6?p;3$BQj*iJMI&;zZ8s!mUq37N+!pqQ>oT(NdXk_{ zPQ9`l4eCmtQPU@9lAwel5?YN>lGX*npX=j#g=AoWUIK8rROz69Y;xJ%@dJbo8Y!bA zgxKOB$u>$UgT#S#soKMhLJ}j3{d7t_L^@%6{gO)x6>Z3(;{_5tl50uhY?*{r zGF!6+?|Y_<>UDRYyp!(!st>i@uz_8gaL>0=vJhU65bCLN0q2MfOy>J85^E~CS`N}J zIi0RU5ySV@%~q9N&(5(6D7x4e{Ujq{$30FiIRXKigBqnCK6o4sAK@sB!bT7QV+*^9 zTlUENUzExm3296@q-l7KVoLYgDo_oXI(V#{&a)#3e?Aqyj@@8q4y5~BfBr{EW9{~j=RZm_rkf7(gkPvEtTMgL(ixE)LdJZJu38hCqBbR$I zsfilfZNcFO_XCcC8cxX>$IW5KuLXg};hm~jRqT4E?j7@NdV-cv#>Rz=1ArD1sac;mXjlC}cXeVmgU15hD=#XcXc)z@-rRIledJbe$Mog+7VT${`fw z@6`{s>#2`op}u(I^eyJm>rVA52#0$fr9-J^O3|r&BeG}|$j{J>X=cXMfAFK$^w*7= zqpx4zuOPDjHnWC_TH-&(NUwc?@r&%=jafrCzcWUU>c){-J(g@EH-@kB_{e!yi*spm zt*sQ9?^iPDprGy7F+%-QfiLr9Z4|nm%=ZgWB=A^K>fA$086@Gc50f1DE0yP^s!nIL KNqthE%lsE`j)PhN literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8b32a0e0351f0cae57c706e760a35522131d42e GIT binary patch literal 1255 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 OX*t~8(BHInI`KdLcNaeZ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51531630db7d5dbd4103f20b61e83f984a58175f GIT binary patch literal 22071 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 LV(xBZcl7@P)Rqlv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11e642a06326090e27cd53b45e9ae0713598abb8 GIT binary patch literal 8080 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/oracle/base.py b/venv/Lib/site-packages/django/db/backends/oracle/base.py new file mode 100644 index 000000000..7cbee768e --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/base.py @@ -0,0 +1,587 @@ +""" +Oracle database backend for Django. + +Requires cx_Oracle: https://oracle.github.io/python-cx_Oracle/ +""" +import datetime +import decimal +import os +import platform +from contextlib import contextmanager + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.db import IntegrityError +from django.db.backends.base.base import BaseDatabaseWrapper +from django.utils.asyncio import async_unsafe +from django.utils.encoding import force_bytes, force_str +from django.utils.functional import cached_property + + +def _setup_environment(environ): + # Cygwin requires some special voodoo to set the environment variables + # properly so that Oracle will see them. + if platform.system().upper().startswith("CYGWIN"): + try: + import ctypes + except ImportError as e: + raise ImproperlyConfigured( + "Error loading ctypes: %s; " + "the Oracle backend requires ctypes to " + "operate correctly under Cygwin." % e + ) + kernel32 = ctypes.CDLL("kernel32") + for name, value in environ: + kernel32.SetEnvironmentVariableA(name, value) + else: + os.environ.update(environ) + + +_setup_environment( + [ + # Oracle takes client-side character set encoding from the environment. + ("NLS_LANG", ".AL32UTF8"), + # This prevents Unicode from getting mangled by getting encoded into the + # potentially non-Unicode database character set. + ("ORA_NCHAR_LITERAL_REPLACE", "TRUE"), + ] +) + + +try: + import cx_Oracle as Database +except ImportError as e: + raise ImproperlyConfigured("Error loading cx_Oracle module: %s" % e) + +# Some of these import cx_Oracle, so import them after checking if it's installed. +from .client import DatabaseClient # NOQA +from .creation import DatabaseCreation # NOQA +from .features import DatabaseFeatures # NOQA +from .introspection import DatabaseIntrospection # NOQA +from .operations import DatabaseOperations # NOQA +from .schema import DatabaseSchemaEditor # NOQA +from .utils import Oracle_datetime, dsn # NOQA +from .validation import DatabaseValidation # NOQA + + +@contextmanager +def wrap_oracle_errors(): + try: + yield + except Database.DatabaseError as e: + # cx_Oracle raises a cx_Oracle.DatabaseError exception with the + # following attributes and values: + # code = 2091 + # message = 'ORA-02091: transaction rolled back + # 'ORA-02291: integrity constraint (TEST_DJANGOTEST.SYS + # _C00102056) violated - parent key not found' + # or: + # 'ORA-00001: unique constraint (DJANGOTEST.DEFERRABLE_ + # PINK_CONSTRAINT) violated + # Convert that case to Django's IntegrityError exception. + x = e.args[0] + if ( + hasattr(x, "code") + and hasattr(x, "message") + and x.code == 2091 + and ("ORA-02291" in x.message or "ORA-00001" in x.message) + ): + raise IntegrityError(*tuple(e.args)) + raise + + +class _UninitializedOperatorsDescriptor: + def __get__(self, instance, cls=None): + # If connection.operators is looked up before a connection has been + # created, transparently initialize connection.operators to avert an + # AttributeError. + if instance is None: + raise AttributeError("operators not available as class attribute") + # Creating a cursor will initialize the operators. + instance.cursor().close() + return instance.__dict__["operators"] + + +class DatabaseWrapper(BaseDatabaseWrapper): + vendor = "oracle" + display_name = "Oracle" + # This dictionary maps Field objects to their associated Oracle column + # types, as strings. Column-type strings can contain format strings; they'll + # be interpolated against the values of Field.__dict__ before being output. + # If a column type is set to None, it won't be included in the output. + # + # Any format strings starting with "qn_" are quoted before being used in the + # output (the "qn_" prefix is stripped before the lookup is performed. + data_types = { + "AutoField": "NUMBER(11) GENERATED BY DEFAULT ON NULL AS IDENTITY", + "BigAutoField": "NUMBER(19) GENERATED BY DEFAULT ON NULL AS IDENTITY", + "BinaryField": "BLOB", + "BooleanField": "NUMBER(1)", + "CharField": "NVARCHAR2(%(max_length)s)", + "DateField": "DATE", + "DateTimeField": "TIMESTAMP", + "DecimalField": "NUMBER(%(max_digits)s, %(decimal_places)s)", + "DurationField": "INTERVAL DAY(9) TO SECOND(6)", + "FileField": "NVARCHAR2(%(max_length)s)", + "FilePathField": "NVARCHAR2(%(max_length)s)", + "FloatField": "DOUBLE PRECISION", + "IntegerField": "NUMBER(11)", + "JSONField": "NCLOB", + "BigIntegerField": "NUMBER(19)", + "IPAddressField": "VARCHAR2(15)", + "GenericIPAddressField": "VARCHAR2(39)", + "OneToOneField": "NUMBER(11)", + "PositiveBigIntegerField": "NUMBER(19)", + "PositiveIntegerField": "NUMBER(11)", + "PositiveSmallIntegerField": "NUMBER(11)", + "SlugField": "NVARCHAR2(%(max_length)s)", + "SmallAutoField": "NUMBER(5) GENERATED BY DEFAULT ON NULL AS IDENTITY", + "SmallIntegerField": "NUMBER(11)", + "TextField": "NCLOB", + "TimeField": "TIMESTAMP", + "URLField": "VARCHAR2(%(max_length)s)", + "UUIDField": "VARCHAR2(32)", + } + data_type_check_constraints = { + "BooleanField": "%(qn_column)s IN (0,1)", + "JSONField": "%(qn_column)s IS JSON", + "PositiveBigIntegerField": "%(qn_column)s >= 0", + "PositiveIntegerField": "%(qn_column)s >= 0", + "PositiveSmallIntegerField": "%(qn_column)s >= 0", + } + + # Oracle doesn't support a database index on these columns. + _limited_data_types = ("clob", "nclob", "blob") + + operators = _UninitializedOperatorsDescriptor() + + _standard_operators = { + "exact": "= %s", + "iexact": "= UPPER(%s)", + "contains": ( + "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + "icontains": ( + "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) " + "ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + "gt": "> %s", + "gte": ">= %s", + "lt": "< %s", + "lte": "<= %s", + "startswith": ( + "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + "endswith": ( + "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + "istartswith": ( + "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) " + "ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + "iendswith": ( + "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) " + "ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + ), + } + + _likec_operators = { + **_standard_operators, + "contains": "LIKEC %s ESCAPE '\\'", + "icontains": "LIKEC UPPER(%s) ESCAPE '\\'", + "startswith": "LIKEC %s ESCAPE '\\'", + "endswith": "LIKEC %s ESCAPE '\\'", + "istartswith": "LIKEC UPPER(%s) ESCAPE '\\'", + "iendswith": "LIKEC UPPER(%s) ESCAPE '\\'", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, %, _) + # should be escaped on the database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')" + _pattern_ops = { + "contains": "'%%' || {} || '%%'", + "icontains": "'%%' || UPPER({}) || '%%'", + "startswith": "{} || '%%'", + "istartswith": "UPPER({}) || '%%'", + "endswith": "'%%' || {}", + "iendswith": "'%%' || UPPER({})", + } + + _standard_pattern_ops = { + k: "LIKE TRANSLATE( " + v + " USING NCHAR_CS)" + " ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + for k, v in _pattern_ops.items() + } + _likec_pattern_ops = { + k: "LIKEC " + v + " ESCAPE '\\'" for k, v in _pattern_ops.items() + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + validation_class = DatabaseValidation + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + use_returning_into = self.settings_dict["OPTIONS"].get( + "use_returning_into", True + ) + self.features.can_return_columns_from_insert = use_returning_into + + def get_connection_params(self): + conn_params = self.settings_dict["OPTIONS"].copy() + if "use_returning_into" in conn_params: + del conn_params["use_returning_into"] + return conn_params + + @async_unsafe + def get_new_connection(self, conn_params): + return Database.connect( + user=self.settings_dict["USER"], + password=self.settings_dict["PASSWORD"], + dsn=dsn(self.settings_dict), + **conn_params, + ) + + def init_connection_state(self): + cursor = self.create_cursor() + # Set the territory first. The territory overrides NLS_DATE_FORMAT + # and NLS_TIMESTAMP_FORMAT to the territory default. When all of + # these are set in single statement it isn't clear what is supposed + # to happen. + cursor.execute("ALTER SESSION SET NLS_TERRITORY = 'AMERICA'") + # Set Oracle date to ANSI date format. This only needs to execute + # once when we create a new connection. We also set the Territory + # to 'AMERICA' which forces Sunday to evaluate to a '1' in + # TO_CHAR(). + cursor.execute( + "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'" + " NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'" + + (" TIME_ZONE = 'UTC'" if settings.USE_TZ else "") + ) + cursor.close() + if "operators" not in self.__dict__: + # Ticket #14149: Check whether our LIKE implementation will + # work for this connection or we need to fall back on LIKEC. + # This check is performed only once per DatabaseWrapper + # instance per thread, since subsequent connections will use + # the same settings. + cursor = self.create_cursor() + try: + cursor.execute( + "SELECT 1 FROM DUAL WHERE DUMMY %s" + % self._standard_operators["contains"], + ["X"], + ) + except Database.DatabaseError: + self.operators = self._likec_operators + self.pattern_ops = self._likec_pattern_ops + else: + self.operators = self._standard_operators + self.pattern_ops = self._standard_pattern_ops + cursor.close() + self.connection.stmtcachesize = 20 + # Ensure all changes are preserved even when AUTOCOMMIT is False. + if not self.get_autocommit(): + self.commit() + + @async_unsafe + def create_cursor(self, name=None): + return FormatStylePlaceholderCursor(self.connection) + + def _commit(self): + if self.connection is not None: + with wrap_oracle_errors(): + return self.connection.commit() + + # Oracle doesn't support releasing savepoints. But we fake them when query + # logging is enabled to keep query counts consistent with other backends. + def _savepoint_commit(self, sid): + if self.queries_logged: + self.queries_log.append( + { + "sql": "-- RELEASE SAVEPOINT %s (faked)" % self.ops.quote_name(sid), + "time": "0.000", + } + ) + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit = autocommit + + def check_constraints(self, table_names=None): + """ + Check constraints by setting them to immediate. Return them to deferred + afterward. + """ + with self.cursor() as cursor: + cursor.execute("SET CONSTRAINTS ALL IMMEDIATE") + cursor.execute("SET CONSTRAINTS ALL DEFERRED") + + def is_usable(self): + try: + self.connection.ping() + except Database.Error: + return False + else: + return True + + @cached_property + def cx_oracle_version(self): + return tuple(int(x) for x in Database.version.split(".")) + + @cached_property + def oracle_version(self): + with self.temporary_connection(): + return tuple(int(x) for x in self.connection.version.split(".")) + + +class OracleParam: + """ + Wrapper object for formatting parameters for Oracle. If the string + representation of the value is large enough (greater than 4000 characters) + the input size needs to be set as CLOB. Alternatively, if the parameter + has an `input_size` attribute, then the value of the `input_size` attribute + will be used instead. Otherwise, no input size will be set for the + parameter when executing the query. + """ + + def __init__(self, param, cursor, strings_only=False): + # With raw SQL queries, datetimes can reach this function + # without being converted by DateTimeField.get_db_prep_value. + if settings.USE_TZ and ( + isinstance(param, datetime.datetime) + and not isinstance(param, Oracle_datetime) + ): + param = Oracle_datetime.from_datetime(param) + + string_size = 0 + # Oracle doesn't recognize True and False correctly. + if param is True: + param = 1 + elif param is False: + param = 0 + if hasattr(param, "bind_parameter"): + self.force_bytes = param.bind_parameter(cursor) + elif isinstance(param, (Database.Binary, datetime.timedelta)): + self.force_bytes = param + else: + # To transmit to the database, we need Unicode if supported + # To get size right, we must consider bytes. + self.force_bytes = force_str(param, cursor.charset, strings_only) + if isinstance(self.force_bytes, str): + # We could optimize by only converting up to 4000 bytes here + string_size = len(force_bytes(param, cursor.charset, strings_only)) + if hasattr(param, "input_size"): + # If parameter has `input_size` attribute, use that. + self.input_size = param.input_size + elif string_size > 4000: + # Mark any string param greater than 4000 characters as a CLOB. + self.input_size = Database.CLOB + elif isinstance(param, datetime.datetime): + self.input_size = Database.TIMESTAMP + else: + self.input_size = None + + +class VariableWrapper: + """ + An adapter class for cursor variables that prevents the wrapped object + from being converted into a string when used to instantiate an OracleParam. + This can be used generally for any other object that should be passed into + Cursor.execute as-is. + """ + + def __init__(self, var): + self.var = var + + def bind_parameter(self, cursor): + return self.var + + def __getattr__(self, key): + return getattr(self.var, key) + + def __setattr__(self, key, value): + if key == "var": + self.__dict__[key] = value + else: + setattr(self.var, key, value) + + +class FormatStylePlaceholderCursor: + """ + Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var" + style. This fixes it -- but note that if you want to use a literal "%s" in + a query, you'll need to use "%%s". + """ + + charset = "utf-8" + + def __init__(self, connection): + self.cursor = connection.cursor() + self.cursor.outputtypehandler = self._output_type_handler + + @staticmethod + def _output_number_converter(value): + return decimal.Decimal(value) if "." in value else int(value) + + @staticmethod + def _get_decimal_converter(precision, scale): + if scale == 0: + return int + context = decimal.Context(prec=precision) + quantize_value = decimal.Decimal(1).scaleb(-scale) + return lambda v: decimal.Decimal(v).quantize(quantize_value, context=context) + + @staticmethod + def _output_type_handler(cursor, name, defaultType, length, precision, scale): + """ + Called for each db column fetched from cursors. Return numbers as the + appropriate Python type. + """ + if defaultType == Database.NUMBER: + if scale == -127: + if precision == 0: + # NUMBER column: decimal-precision floating point. + # This will normally be an integer from a sequence, + # but it could be a decimal value. + outconverter = FormatStylePlaceholderCursor._output_number_converter + else: + # FLOAT column: binary-precision floating point. + # This comes from FloatField columns. + outconverter = float + elif precision > 0: + # NUMBER(p,s) column: decimal-precision fixed point. + # This comes from IntegerField and DecimalField columns. + outconverter = FormatStylePlaceholderCursor._get_decimal_converter( + precision, scale + ) + else: + # No type information. This normally comes from a + # mathematical expression in the SELECT list. Guess int + # or Decimal based on whether it has a decimal point. + outconverter = FormatStylePlaceholderCursor._output_number_converter + return cursor.var( + Database.STRING, + size=255, + arraysize=cursor.arraysize, + outconverter=outconverter, + ) + + def _format_params(self, params): + try: + return {k: OracleParam(v, self, True) for k, v in params.items()} + except AttributeError: + return tuple(OracleParam(p, self, True) for p in params) + + def _guess_input_sizes(self, params_list): + # Try dict handling; if that fails, treat as sequence + if hasattr(params_list[0], "keys"): + sizes = {} + for params in params_list: + for k, value in params.items(): + if value.input_size: + sizes[k] = value.input_size + if sizes: + self.setinputsizes(**sizes) + else: + # It's not a list of dicts; it's a list of sequences + sizes = [None] * len(params_list[0]) + for params in params_list: + for i, value in enumerate(params): + if value.input_size: + sizes[i] = value.input_size + if sizes: + self.setinputsizes(*sizes) + + def _param_generator(self, params): + # Try dict handling; if that fails, treat as sequence + if hasattr(params, "items"): + return {k: v.force_bytes for k, v in params.items()} + else: + return [p.force_bytes for p in params] + + def _fix_for_params(self, query, params, unify_by_values=False): + # cx_Oracle wants no trailing ';' for SQL statements. For PL/SQL, it + # it does want a trailing ';' but not a trailing '/'. However, these + # characters must be included in the original query in case the query + # is being passed to SQL*Plus. + if query.endswith(";") or query.endswith("/"): + query = query[:-1] + if params is None: + params = [] + elif hasattr(params, "keys"): + # Handle params as dict + args = {k: ":%s" % k for k in params} + query = query % args + elif unify_by_values and params: + # Handle params as a dict with unified query parameters by their + # values. It can be used only in single query execute() because + # executemany() shares the formatted query with each of the params + # list. e.g. for input params = [0.75, 2, 0.75, 'sth', 0.75] + # params_dict = {0.75: ':arg0', 2: ':arg1', 'sth': ':arg2'} + # args = [':arg0', ':arg1', ':arg0', ':arg2', ':arg0'] + # params = {':arg0': 0.75, ':arg1': 2, ':arg2': 'sth'} + params_dict = { + param: ":arg%d" % i for i, param in enumerate(dict.fromkeys(params)) + } + args = [params_dict[param] for param in params] + params = {value: key for key, value in params_dict.items()} + query = query % tuple(args) + else: + # Handle params as sequence + args = [(":arg%d" % i) for i in range(len(params))] + query = query % tuple(args) + return query, self._format_params(params) + + def execute(self, query, params=None): + query, params = self._fix_for_params(query, params, unify_by_values=True) + self._guess_input_sizes([params]) + with wrap_oracle_errors(): + return self.cursor.execute(query, self._param_generator(params)) + + def executemany(self, query, params=None): + if not params: + # No params given, nothing to do + return None + # uniform treatment for sequences and iterables + params_iter = iter(params) + query, firstparams = self._fix_for_params(query, next(params_iter)) + # we build a list of formatted params; as we're going to traverse it + # more than once, we can't make it lazy by using a generator + formatted = [firstparams] + [self._format_params(p) for p in params_iter] + self._guess_input_sizes(formatted) + with wrap_oracle_errors(): + return self.cursor.executemany( + query, [self._param_generator(p) for p in formatted] + ) + + def close(self): + try: + self.cursor.close() + except Database.InterfaceError: + # already closed + pass + + def var(self, *args): + return VariableWrapper(self.cursor.var(*args)) + + def arrayvar(self, *args): + return VariableWrapper(self.cursor.arrayvar(*args)) + + def __getattr__(self, attr): + return getattr(self.cursor, attr) + + def __iter__(self): + return iter(self.cursor) diff --git a/venv/Lib/site-packages/django/db/backends/oracle/client.py b/venv/Lib/site-packages/django/db/backends/oracle/client.py new file mode 100644 index 000000000..365b11604 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/client.py @@ -0,0 +1,27 @@ +import shutil + +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = "sqlplus" + wrapper_name = "rlwrap" + + @staticmethod + def connect_string(settings_dict): + from django.db.backends.oracle.utils import dsn + + return '%s/"%s"@%s' % ( + settings_dict["USER"], + settings_dict["PASSWORD"], + dsn(settings_dict), + ) + + @classmethod + def settings_to_cmd_args_env(cls, settings_dict, parameters): + args = [cls.executable_name, "-L", cls.connect_string(settings_dict)] + wrapper_path = shutil.which(cls.wrapper_name) + if wrapper_path: + args = [wrapper_path, *args] + args.extend(parameters) + return args, None diff --git a/venv/Lib/site-packages/django/db/backends/oracle/creation.py b/venv/Lib/site-packages/django/db/backends/oracle/creation.py new file mode 100644 index 000000000..df773bff8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/creation.py @@ -0,0 +1,464 @@ +import sys + +from django.conf import settings +from django.db import DatabaseError +from django.db.backends.base.creation import BaseDatabaseCreation +from django.utils.crypto import get_random_string +from django.utils.functional import cached_property + +TEST_DATABASE_PREFIX = "test_" + + +class DatabaseCreation(BaseDatabaseCreation): + @cached_property + def _maindb_connection(self): + """ + This is analogous to other backends' `_nodb_connection` property, + which allows access to an "administrative" connection which can + be used to manage the test databases. + For Oracle, the only connection that can be used for that purpose + is the main (non-test) connection. + """ + settings_dict = settings.DATABASES[self.connection.alias] + user = settings_dict.get("SAVED_USER") or settings_dict["USER"] + password = settings_dict.get("SAVED_PASSWORD") or settings_dict["PASSWORD"] + settings_dict = {**settings_dict, "USER": user, "PASSWORD": password} + DatabaseWrapper = type(self.connection) + return DatabaseWrapper(settings_dict, alias=self.connection.alias) + + def _create_test_db(self, verbosity=1, autoclobber=False, keepdb=False): + parameters = self._get_test_db_params() + with self._maindb_connection.cursor() as cursor: + if self._test_database_create(): + try: + self._execute_test_db_creation( + cursor, parameters, verbosity, keepdb + ) + except Exception as e: + if "ORA-01543" not in str(e): + # All errors except "tablespace already exists" cancel tests + self.log("Got an error creating the test database: %s" % e) + sys.exit(2) + if not autoclobber: + confirm = input( + "It appears the test database, %s, already exists. " + "Type 'yes' to delete it, or 'no' to cancel: " + % parameters["user"] + ) + if autoclobber or confirm == "yes": + if verbosity >= 1: + self.log( + "Destroying old test database for alias '%s'..." + % self.connection.alias + ) + try: + self._execute_test_db_destruction( + cursor, parameters, verbosity + ) + except DatabaseError as e: + if "ORA-29857" in str(e): + self._handle_objects_preventing_db_destruction( + cursor, parameters, verbosity, autoclobber + ) + else: + # Ran into a database error that isn't about + # leftover objects in the tablespace. + self.log( + "Got an error destroying the old test database: %s" + % e + ) + sys.exit(2) + except Exception as e: + self.log( + "Got an error destroying the old test database: %s" % e + ) + sys.exit(2) + try: + self._execute_test_db_creation( + cursor, parameters, verbosity, keepdb + ) + except Exception as e: + self.log( + "Got an error recreating the test database: %s" % e + ) + sys.exit(2) + else: + self.log("Tests cancelled.") + sys.exit(1) + + if self._test_user_create(): + if verbosity >= 1: + self.log("Creating test user...") + try: + self._create_test_user(cursor, parameters, verbosity, keepdb) + except Exception as e: + if "ORA-01920" not in str(e): + # All errors except "user already exists" cancel tests + self.log("Got an error creating the test user: %s" % e) + sys.exit(2) + if not autoclobber: + confirm = input( + "It appears the test user, %s, already exists. Type " + "'yes' to delete it, or 'no' to cancel: " + % parameters["user"] + ) + if autoclobber or confirm == "yes": + try: + if verbosity >= 1: + self.log("Destroying old test user...") + self._destroy_test_user(cursor, parameters, verbosity) + if verbosity >= 1: + self.log("Creating test user...") + self._create_test_user( + cursor, parameters, verbosity, keepdb + ) + except Exception as e: + self.log("Got an error recreating the test user: %s" % e) + sys.exit(2) + else: + self.log("Tests cancelled.") + sys.exit(1) + # Done with main user -- test user and tablespaces created. + self._maindb_connection.close() + self._switch_to_test_user(parameters) + return self.connection.settings_dict["NAME"] + + def _switch_to_test_user(self, parameters): + """ + Switch to the user that's used for creating the test database. + + Oracle doesn't have the concept of separate databases under the same + user, so a separate user is used; see _create_test_db(). The main user + is also needed for cleanup when testing is completed, so save its + credentials in the SAVED_USER/SAVED_PASSWORD key in the settings dict. + """ + real_settings = settings.DATABASES[self.connection.alias] + real_settings["SAVED_USER"] = self.connection.settings_dict[ + "SAVED_USER" + ] = self.connection.settings_dict["USER"] + real_settings["SAVED_PASSWORD"] = self.connection.settings_dict[ + "SAVED_PASSWORD" + ] = self.connection.settings_dict["PASSWORD"] + real_test_settings = real_settings["TEST"] + test_settings = self.connection.settings_dict["TEST"] + real_test_settings["USER"] = real_settings["USER"] = test_settings[ + "USER" + ] = self.connection.settings_dict["USER"] = parameters["user"] + real_settings["PASSWORD"] = self.connection.settings_dict[ + "PASSWORD" + ] = parameters["password"] + + def set_as_test_mirror(self, primary_settings_dict): + """ + Set this database up to be used in testing as a mirror of a primary + database whose settings are given. + """ + self.connection.settings_dict["USER"] = primary_settings_dict["USER"] + self.connection.settings_dict["PASSWORD"] = primary_settings_dict["PASSWORD"] + + def _handle_objects_preventing_db_destruction( + self, cursor, parameters, verbosity, autoclobber + ): + # There are objects in the test tablespace which prevent dropping it + # The easy fix is to drop the test user -- but are we allowed to do so? + self.log( + "There are objects in the old test database which prevent its destruction." + "\nIf they belong to the test user, deleting the user will allow the test " + "database to be recreated.\n" + "Otherwise, you will need to find and remove each of these objects, " + "or use a different tablespace.\n" + ) + if self._test_user_create(): + if not autoclobber: + confirm = input("Type 'yes' to delete user %s: " % parameters["user"]) + if autoclobber or confirm == "yes": + try: + if verbosity >= 1: + self.log("Destroying old test user...") + self._destroy_test_user(cursor, parameters, verbosity) + except Exception as e: + self.log("Got an error destroying the test user: %s" % e) + sys.exit(2) + try: + if verbosity >= 1: + self.log( + "Destroying old test database for alias '%s'..." + % self.connection.alias + ) + self._execute_test_db_destruction(cursor, parameters, verbosity) + except Exception as e: + self.log("Got an error destroying the test database: %s" % e) + sys.exit(2) + else: + self.log("Tests cancelled -- test database cannot be recreated.") + sys.exit(1) + else: + self.log( + "Django is configured to use pre-existing test user '%s'," + " and will not attempt to delete it." % parameters["user"] + ) + self.log("Tests cancelled -- test database cannot be recreated.") + sys.exit(1) + + def _destroy_test_db(self, test_database_name, verbosity=1): + """ + Destroy a test database, prompting the user for confirmation if the + database already exists. Return the name of the test database created. + """ + self.connection.settings_dict["USER"] = self.connection.settings_dict[ + "SAVED_USER" + ] + self.connection.settings_dict["PASSWORD"] = self.connection.settings_dict[ + "SAVED_PASSWORD" + ] + self.connection.close() + parameters = self._get_test_db_params() + with self._maindb_connection.cursor() as cursor: + if self._test_user_create(): + if verbosity >= 1: + self.log("Destroying test user...") + self._destroy_test_user(cursor, parameters, verbosity) + if self._test_database_create(): + if verbosity >= 1: + self.log("Destroying test database tables...") + self._execute_test_db_destruction(cursor, parameters, verbosity) + self._maindb_connection.close() + + def _execute_test_db_creation(self, cursor, parameters, verbosity, keepdb=False): + if verbosity >= 2: + self.log("_create_test_db(): dbname = %s" % parameters["user"]) + if self._test_database_oracle_managed_files(): + statements = [ + """ + CREATE TABLESPACE %(tblspace)s + DATAFILE SIZE %(size)s + AUTOEXTEND ON NEXT %(extsize)s MAXSIZE %(maxsize)s + """, + """ + CREATE TEMPORARY TABLESPACE %(tblspace_temp)s + TEMPFILE SIZE %(size_tmp)s + AUTOEXTEND ON NEXT %(extsize_tmp)s MAXSIZE %(maxsize_tmp)s + """, + ] + else: + statements = [ + """ + CREATE TABLESPACE %(tblspace)s + DATAFILE '%(datafile)s' SIZE %(size)s REUSE + AUTOEXTEND ON NEXT %(extsize)s MAXSIZE %(maxsize)s + """, + """ + CREATE TEMPORARY TABLESPACE %(tblspace_temp)s + TEMPFILE '%(datafile_tmp)s' SIZE %(size_tmp)s REUSE + AUTOEXTEND ON NEXT %(extsize_tmp)s MAXSIZE %(maxsize_tmp)s + """, + ] + # Ignore "tablespace already exists" error when keepdb is on. + acceptable_ora_err = "ORA-01543" if keepdb else None + self._execute_allow_fail_statements( + cursor, statements, parameters, verbosity, acceptable_ora_err + ) + + def _create_test_user(self, cursor, parameters, verbosity, keepdb=False): + if verbosity >= 2: + self.log("_create_test_user(): username = %s" % parameters["user"]) + statements = [ + """CREATE USER %(user)s + IDENTIFIED BY "%(password)s" + DEFAULT TABLESPACE %(tblspace)s + TEMPORARY TABLESPACE %(tblspace_temp)s + QUOTA UNLIMITED ON %(tblspace)s + """, + """GRANT CREATE SESSION, + CREATE TABLE, + CREATE SEQUENCE, + CREATE PROCEDURE, + CREATE TRIGGER + TO %(user)s""", + ] + # Ignore "user already exists" error when keepdb is on + acceptable_ora_err = "ORA-01920" if keepdb else None + success = self._execute_allow_fail_statements( + cursor, statements, parameters, verbosity, acceptable_ora_err + ) + # If the password was randomly generated, change the user accordingly. + if not success and self._test_settings_get("PASSWORD") is None: + set_password = 'ALTER USER %(user)s IDENTIFIED BY "%(password)s"' + self._execute_statements(cursor, [set_password], parameters, verbosity) + # Most test suites can be run without "create view" and + # "create materialized view" privileges. But some need it. + for object_type in ("VIEW", "MATERIALIZED VIEW"): + extra = "GRANT CREATE %(object_type)s TO %(user)s" + parameters["object_type"] = object_type + success = self._execute_allow_fail_statements( + cursor, [extra], parameters, verbosity, "ORA-01031" + ) + if not success and verbosity >= 2: + self.log( + "Failed to grant CREATE %s permission to test user. This may be ok." + % object_type + ) + + def _execute_test_db_destruction(self, cursor, parameters, verbosity): + if verbosity >= 2: + self.log("_execute_test_db_destruction(): dbname=%s" % parameters["user"]) + statements = [ + "DROP TABLESPACE %(tblspace)s " + "INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS", + "DROP TABLESPACE %(tblspace_temp)s " + "INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS", + ] + self._execute_statements(cursor, statements, parameters, verbosity) + + def _destroy_test_user(self, cursor, parameters, verbosity): + if verbosity >= 2: + self.log("_destroy_test_user(): user=%s" % parameters["user"]) + self.log("Be patient. This can take some time...") + statements = [ + "DROP USER %(user)s CASCADE", + ] + self._execute_statements(cursor, statements, parameters, verbosity) + + def _execute_statements( + self, cursor, statements, parameters, verbosity, allow_quiet_fail=False + ): + for template in statements: + stmt = template % parameters + if verbosity >= 2: + print(stmt) + try: + cursor.execute(stmt) + except Exception as err: + if (not allow_quiet_fail) or verbosity >= 2: + self.log("Failed (%s)" % (err)) + raise + + def _execute_allow_fail_statements( + self, cursor, statements, parameters, verbosity, acceptable_ora_err + ): + """ + Execute statements which are allowed to fail silently if the Oracle + error code given by `acceptable_ora_err` is raised. Return True if the + statements execute without an exception, or False otherwise. + """ + try: + # Statement can fail when acceptable_ora_err is not None + allow_quiet_fail = ( + acceptable_ora_err is not None and len(acceptable_ora_err) > 0 + ) + self._execute_statements( + cursor, + statements, + parameters, + verbosity, + allow_quiet_fail=allow_quiet_fail, + ) + return True + except DatabaseError as err: + description = str(err) + if acceptable_ora_err is None or acceptable_ora_err not in description: + raise + return False + + def _get_test_db_params(self): + return { + "dbname": self._test_database_name(), + "user": self._test_database_user(), + "password": self._test_database_passwd(), + "tblspace": self._test_database_tblspace(), + "tblspace_temp": self._test_database_tblspace_tmp(), + "datafile": self._test_database_tblspace_datafile(), + "datafile_tmp": self._test_database_tblspace_tmp_datafile(), + "maxsize": self._test_database_tblspace_maxsize(), + "maxsize_tmp": self._test_database_tblspace_tmp_maxsize(), + "size": self._test_database_tblspace_size(), + "size_tmp": self._test_database_tblspace_tmp_size(), + "extsize": self._test_database_tblspace_extsize(), + "extsize_tmp": self._test_database_tblspace_tmp_extsize(), + } + + def _test_settings_get(self, key, default=None, prefixed=None): + """ + Return a value from the test settings dict, or a given default, or a + prefixed entry from the main settings dict. + """ + settings_dict = self.connection.settings_dict + val = settings_dict["TEST"].get(key, default) + if val is None and prefixed: + val = TEST_DATABASE_PREFIX + settings_dict[prefixed] + return val + + def _test_database_name(self): + return self._test_settings_get("NAME", prefixed="NAME") + + def _test_database_create(self): + return self._test_settings_get("CREATE_DB", default=True) + + def _test_user_create(self): + return self._test_settings_get("CREATE_USER", default=True) + + def _test_database_user(self): + return self._test_settings_get("USER", prefixed="USER") + + def _test_database_passwd(self): + password = self._test_settings_get("PASSWORD") + if password is None and self._test_user_create(): + # Oracle passwords are limited to 30 chars and can't contain symbols. + password = get_random_string(30) + return password + + def _test_database_tblspace(self): + return self._test_settings_get("TBLSPACE", prefixed="USER") + + def _test_database_tblspace_tmp(self): + settings_dict = self.connection.settings_dict + return settings_dict["TEST"].get( + "TBLSPACE_TMP", TEST_DATABASE_PREFIX + settings_dict["USER"] + "_temp" + ) + + def _test_database_tblspace_datafile(self): + tblspace = "%s.dbf" % self._test_database_tblspace() + return self._test_settings_get("DATAFILE", default=tblspace) + + def _test_database_tblspace_tmp_datafile(self): + tblspace = "%s.dbf" % self._test_database_tblspace_tmp() + return self._test_settings_get("DATAFILE_TMP", default=tblspace) + + def _test_database_tblspace_maxsize(self): + return self._test_settings_get("DATAFILE_MAXSIZE", default="500M") + + def _test_database_tblspace_tmp_maxsize(self): + return self._test_settings_get("DATAFILE_TMP_MAXSIZE", default="500M") + + def _test_database_tblspace_size(self): + return self._test_settings_get("DATAFILE_SIZE", default="50M") + + def _test_database_tblspace_tmp_size(self): + return self._test_settings_get("DATAFILE_TMP_SIZE", default="50M") + + def _test_database_tblspace_extsize(self): + return self._test_settings_get("DATAFILE_EXTSIZE", default="25M") + + def _test_database_tblspace_tmp_extsize(self): + return self._test_settings_get("DATAFILE_TMP_EXTSIZE", default="25M") + + def _test_database_oracle_managed_files(self): + return self._test_settings_get("ORACLE_MANAGED_FILES", default=False) + + def _get_test_db_name(self): + """ + Return the 'production' DB name to get the test DB creation machinery + to work. This isn't a great deal in this case because DB names as + handled by Django don't have real counterparts in Oracle. + """ + return self.connection.settings_dict["NAME"] + + def test_db_signature(self): + settings_dict = self.connection.settings_dict + return ( + settings_dict["HOST"], + settings_dict["PORT"], + settings_dict["ENGINE"], + settings_dict["NAME"], + self._test_database_user(), + ) diff --git a/venv/Lib/site-packages/django/db/backends/oracle/features.py b/venv/Lib/site-packages/django/db/backends/oracle/features.py new file mode 100644 index 000000000..debbc8b12 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/features.py @@ -0,0 +1,122 @@ +from django.db import DatabaseError, InterfaceError +from django.db.backends.base.features import BaseDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + # Oracle crashes with "ORA-00932: inconsistent datatypes: expected - got + # BLOB" when grouping by LOBs (#24096). + allows_group_by_lob = False + interprets_empty_strings_as_nulls = True + has_select_for_update = True + has_select_for_update_nowait = True + has_select_for_update_skip_locked = True + has_select_for_update_of = True + select_for_update_of_column = True + can_return_columns_from_insert = True + supports_subqueries_in_group_by = False + ignores_unnecessary_order_by_in_subqueries = False + supports_transactions = True + supports_timezones = False + has_native_duration_field = True + can_defer_constraint_checks = True + supports_partially_nullable_unique_constraints = False + supports_deferrable_unique_constraints = True + truncates_names = True + supports_tablespaces = True + supports_sequence_reset = False + can_introspect_materialized_views = True + atomic_transactions = False + supports_combined_alters = False + nulls_order_largest = True + requires_literal_defaults = True + closed_cursor_error_class = InterfaceError + bare_select_suffix = " FROM DUAL" + # select for update with limit can be achieved on Oracle, but not with the + # current backend. + supports_select_for_update_with_limit = False + supports_temporal_subtraction = True + # Oracle doesn't ignore quoted identifiers case but the current backend + # does by uppercasing all identifiers. + ignores_table_name_case = True + supports_index_on_text_field = False + has_case_insensitive_like = False + create_test_procedure_without_params_sql = """ + CREATE PROCEDURE "TEST_PROCEDURE" AS + V_I INTEGER; + BEGIN + V_I := 1; + END; + """ + create_test_procedure_with_int_param_sql = """ + CREATE PROCEDURE "TEST_PROCEDURE" (P_I INTEGER) AS + V_I INTEGER; + BEGIN + V_I := P_I; + END; + """ + supports_callproc_kwargs = True + supports_over_clause = True + supports_frame_range_fixed_distance = True + supports_ignore_conflicts = False + max_query_params = 2**16 - 1 + supports_partial_indexes = False + supports_slicing_ordering_in_compound = True + allows_multiple_constraints_on_same_fields = False + supports_boolean_expr_in_select_clause = False + supports_primitives_in_json_field = False + supports_json_field_contains = False + supports_collation_on_textfield = False + test_collations = { + "ci": "BINARY_CI", + "cs": "BINARY", + "non_default": "SWEDISH_CI", + "swedish_ci": "SWEDISH_CI", + } + test_now_utc_template = "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'" + + django_test_skips = { + "Oracle doesn't support SHA224.": { + "db_functions.text.test_sha224.SHA224Tests.test_basic", + "db_functions.text.test_sha224.SHA224Tests.test_transform", + }, + "Oracle doesn't support bitwise XOR.": { + "expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_xor", + "expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_xor_null", + }, + "Oracle requires ORDER BY in row_number, ANSI:SQL doesn't.": { + "expressions_window.tests.WindowFunctionTests.test_row_number_no_ordering", + }, + "Raises ORA-00600: internal error code.": { + "model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery", + }, + } + django_test_expected_failures = { + # A bug in Django/cx_Oracle with respect to string handling (#23843). + "annotations.tests.NonAggregateAnnotationTestCase.test_custom_functions", + "annotations.tests.NonAggregateAnnotationTestCase." + "test_custom_functions_can_ref_other_functions", + } + + @cached_property + def introspected_field_types(self): + return { + **super().introspected_field_types, + "GenericIPAddressField": "CharField", + "PositiveBigIntegerField": "BigIntegerField", + "PositiveIntegerField": "IntegerField", + "PositiveSmallIntegerField": "IntegerField", + "SmallIntegerField": "IntegerField", + "TimeField": "DateTimeField", + } + + @cached_property + def supports_collation_on_charfield(self): + with self.connection.cursor() as cursor: + try: + cursor.execute("SELECT CAST('a' AS VARCHAR2(4001)) FROM dual") + except DatabaseError as e: + if e.args[0].code == 910: + return False + raise + return True diff --git a/venv/Lib/site-packages/django/db/backends/oracle/functions.py b/venv/Lib/site-packages/django/db/backends/oracle/functions.py new file mode 100644 index 000000000..936cc9e73 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/functions.py @@ -0,0 +1,26 @@ +from django.db.models import DecimalField, DurationField, Func + + +class IntervalToSeconds(Func): + function = "" + template = """ + EXTRACT(day from %(expressions)s) * 86400 + + EXTRACT(hour from %(expressions)s) * 3600 + + EXTRACT(minute from %(expressions)s) * 60 + + EXTRACT(second from %(expressions)s) + """ + + def __init__(self, expression, *, output_field=None, **extra): + super().__init__( + expression, output_field=output_field or DecimalField(), **extra + ) + + +class SecondsToInterval(Func): + function = "NUMTODSINTERVAL" + template = "%(function)s(%(expressions)s, 'SECOND')" + + def __init__(self, expression, *, output_field=None, **extra): + super().__init__( + expression, output_field=output_field or DurationField(), **extra + ) diff --git a/venv/Lib/site-packages/django/db/backends/oracle/introspection.py b/venv/Lib/site-packages/django/db/backends/oracle/introspection.py new file mode 100644 index 000000000..adc0bc4c2 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/introspection.py @@ -0,0 +1,406 @@ +from collections import namedtuple + +import cx_Oracle + +from django.db import models +from django.db.backends.base.introspection import BaseDatabaseIntrospection +from django.db.backends.base.introspection import FieldInfo as BaseFieldInfo +from django.db.backends.base.introspection import TableInfo +from django.utils.functional import cached_property + +FieldInfo = namedtuple("FieldInfo", BaseFieldInfo._fields + ("is_autofield", "is_json")) + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + cache_bust_counter = 1 + + # Maps type objects to Django Field types. + @cached_property + def data_types_reverse(self): + if self.connection.cx_oracle_version < (8,): + return { + cx_Oracle.BLOB: "BinaryField", + cx_Oracle.CLOB: "TextField", + cx_Oracle.DATETIME: "DateField", + cx_Oracle.FIXED_CHAR: "CharField", + cx_Oracle.FIXED_NCHAR: "CharField", + cx_Oracle.INTERVAL: "DurationField", + cx_Oracle.NATIVE_FLOAT: "FloatField", + cx_Oracle.NCHAR: "CharField", + cx_Oracle.NCLOB: "TextField", + cx_Oracle.NUMBER: "DecimalField", + cx_Oracle.STRING: "CharField", + cx_Oracle.TIMESTAMP: "DateTimeField", + } + else: + return { + cx_Oracle.DB_TYPE_DATE: "DateField", + cx_Oracle.DB_TYPE_BINARY_DOUBLE: "FloatField", + cx_Oracle.DB_TYPE_BLOB: "BinaryField", + cx_Oracle.DB_TYPE_CHAR: "CharField", + cx_Oracle.DB_TYPE_CLOB: "TextField", + cx_Oracle.DB_TYPE_INTERVAL_DS: "DurationField", + cx_Oracle.DB_TYPE_NCHAR: "CharField", + cx_Oracle.DB_TYPE_NCLOB: "TextField", + cx_Oracle.DB_TYPE_NVARCHAR: "CharField", + cx_Oracle.DB_TYPE_NUMBER: "DecimalField", + cx_Oracle.DB_TYPE_TIMESTAMP: "DateTimeField", + cx_Oracle.DB_TYPE_VARCHAR: "CharField", + } + + def get_field_type(self, data_type, description): + if data_type == cx_Oracle.NUMBER: + precision, scale = description[4:6] + if scale == 0: + if precision > 11: + return ( + "BigAutoField" + if description.is_autofield + else "BigIntegerField" + ) + elif 1 < precision < 6 and description.is_autofield: + return "SmallAutoField" + elif precision == 1: + return "BooleanField" + elif description.is_autofield: + return "AutoField" + else: + return "IntegerField" + elif scale == -127: + return "FloatField" + elif data_type == cx_Oracle.NCLOB and description.is_json: + return "JSONField" + + return super().get_field_type(data_type, description) + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute( + """ + SELECT table_name, 't' + FROM user_tables + WHERE + NOT EXISTS ( + SELECT 1 + FROM user_mviews + WHERE user_mviews.mview_name = user_tables.table_name + ) + UNION ALL + SELECT view_name, 'v' FROM user_views + UNION ALL + SELECT mview_name, 'v' FROM user_mviews + """ + ) + return [ + TableInfo(self.identifier_converter(row[0]), row[1]) + for row in cursor.fetchall() + ] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + # user_tab_columns gives data default for columns + cursor.execute( + """ + SELECT + user_tab_cols.column_name, + user_tab_cols.data_default, + CASE + WHEN user_tab_cols.collation = user_tables.default_collation + THEN NULL + ELSE user_tab_cols.collation + END collation, + CASE + WHEN user_tab_cols.char_used IS NULL + THEN user_tab_cols.data_length + ELSE user_tab_cols.char_length + END as internal_size, + CASE + WHEN user_tab_cols.identity_column = 'YES' THEN 1 + ELSE 0 + END as is_autofield, + CASE + WHEN EXISTS ( + SELECT 1 + FROM user_json_columns + WHERE + user_json_columns.table_name = user_tab_cols.table_name AND + user_json_columns.column_name = user_tab_cols.column_name + ) + THEN 1 + ELSE 0 + END as is_json + FROM user_tab_cols + LEFT OUTER JOIN + user_tables ON user_tables.table_name = user_tab_cols.table_name + WHERE user_tab_cols.table_name = UPPER(%s) + """, + [table_name], + ) + field_map = { + column: ( + internal_size, + default if default != "NULL" else None, + collation, + is_autofield, + is_json, + ) + for ( + column, + default, + collation, + internal_size, + is_autofield, + is_json, + ) in cursor.fetchall() + } + self.cache_bust_counter += 1 + cursor.execute( + "SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0".format( + self.connection.ops.quote_name(table_name), self.cache_bust_counter + ) + ) + description = [] + for desc in cursor.description: + name = desc[0] + internal_size, default, collation, is_autofield, is_json = field_map[name] + name = name % {} # cx_Oracle, for some reason, doubles percent signs. + description.append( + FieldInfo( + self.identifier_converter(name), + *desc[1:3], + internal_size, + desc[4] or 0, + desc[5] or 0, + *desc[6:], + default, + collation, + is_autofield, + is_json, + ) + ) + return description + + def identifier_converter(self, name): + """Identifier comparison is case insensitive under Oracle.""" + return name.lower() + + def get_sequences(self, cursor, table_name, table_fields=()): + cursor.execute( + """ + SELECT + user_tab_identity_cols.sequence_name, + user_tab_identity_cols.column_name + FROM + user_tab_identity_cols, + user_constraints, + user_cons_columns cols + WHERE + user_constraints.constraint_name = cols.constraint_name + AND user_constraints.table_name = user_tab_identity_cols.table_name + AND cols.column_name = user_tab_identity_cols.column_name + AND user_constraints.constraint_type = 'P' + AND user_tab_identity_cols.table_name = UPPER(%s) + """, + [table_name], + ) + # Oracle allows only one identity column per table. + row = cursor.fetchone() + if row: + return [ + { + "name": self.identifier_converter(row[0]), + "table": self.identifier_converter(table_name), + "column": self.identifier_converter(row[1]), + } + ] + # To keep backward compatibility for AutoFields that aren't Oracle + # identity columns. + for f in table_fields: + if isinstance(f, models.AutoField): + return [{"table": table_name, "column": f.column}] + return [] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + table_name = table_name.upper() + cursor.execute( + """ + SELECT ca.column_name, cb.table_name, cb.column_name + FROM user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb + WHERE user_constraints.table_name = %s AND + user_constraints.constraint_name = ca.constraint_name AND + user_constraints.r_constraint_name = cb.constraint_name AND + ca.position = cb.position""", + [table_name], + ) + + return { + self.identifier_converter(field_name): ( + self.identifier_converter(rel_field_name), + self.identifier_converter(rel_table_name), + ) + for field_name, rel_table_name, rel_field_name in cursor.fetchall() + } + + def get_key_columns(self, cursor, table_name): + cursor.execute( + """ + SELECT + ccol.column_name, + rcol.table_name AS referenced_table, + rcol.column_name AS referenced_column + FROM user_constraints c + JOIN user_cons_columns ccol + ON ccol.constraint_name = c.constraint_name + JOIN user_cons_columns rcol + ON rcol.constraint_name = c.r_constraint_name + WHERE c.table_name = %s AND c.constraint_type = 'R'""", + [table_name.upper()], + ) + return [ + tuple(self.identifier_converter(cell) for cell in row) + for row in cursor.fetchall() + ] + + def get_primary_key_column(self, cursor, table_name): + cursor.execute( + """ + SELECT + cols.column_name + FROM + user_constraints, + user_cons_columns cols + WHERE + user_constraints.constraint_name = cols.constraint_name AND + user_constraints.constraint_type = 'P' AND + user_constraints.table_name = UPPER(%s) AND + cols.position = 1 + """, + [table_name], + ) + row = cursor.fetchone() + return self.identifier_converter(row[0]) if row else None + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Loop over the constraints, getting PKs, uniques, and checks + cursor.execute( + """ + SELECT + user_constraints.constraint_name, + LISTAGG(LOWER(cols.column_name), ',') + WITHIN GROUP (ORDER BY cols.position), + CASE user_constraints.constraint_type + WHEN 'P' THEN 1 + ELSE 0 + END AS is_primary_key, + CASE + WHEN user_constraints.constraint_type IN ('P', 'U') THEN 1 + ELSE 0 + END AS is_unique, + CASE user_constraints.constraint_type + WHEN 'C' THEN 1 + ELSE 0 + END AS is_check_constraint + FROM + user_constraints + LEFT OUTER JOIN + user_cons_columns cols + ON user_constraints.constraint_name = cols.constraint_name + WHERE + user_constraints.constraint_type = ANY('P', 'U', 'C') + AND user_constraints.table_name = UPPER(%s) + GROUP BY user_constraints.constraint_name, user_constraints.constraint_type + """, + [table_name], + ) + for constraint, columns, pk, unique, check in cursor.fetchall(): + constraint = self.identifier_converter(constraint) + constraints[constraint] = { + "columns": columns.split(","), + "primary_key": pk, + "unique": unique, + "foreign_key": None, + "check": check, + "index": unique, # All uniques come with an index + } + # Foreign key constraints + cursor.execute( + """ + SELECT + cons.constraint_name, + LISTAGG(LOWER(cols.column_name), ',') + WITHIN GROUP (ORDER BY cols.position), + LOWER(rcols.table_name), + LOWER(rcols.column_name) + FROM + user_constraints cons + INNER JOIN + user_cons_columns rcols + ON rcols.constraint_name = cons.r_constraint_name AND rcols.position = 1 + LEFT OUTER JOIN + user_cons_columns cols + ON cons.constraint_name = cols.constraint_name + WHERE + cons.constraint_type = 'R' AND + cons.table_name = UPPER(%s) + GROUP BY cons.constraint_name, rcols.table_name, rcols.column_name + """, + [table_name], + ) + for constraint, columns, other_table, other_column in cursor.fetchall(): + constraint = self.identifier_converter(constraint) + constraints[constraint] = { + "primary_key": False, + "unique": False, + "foreign_key": (other_table, other_column), + "check": False, + "index": False, + "columns": columns.split(","), + } + # Now get indexes + cursor.execute( + """ + SELECT + ind.index_name, + LOWER(ind.index_type), + LOWER(ind.uniqueness), + LISTAGG(LOWER(cols.column_name), ',') + WITHIN GROUP (ORDER BY cols.column_position), + LISTAGG(cols.descend, ',') WITHIN GROUP (ORDER BY cols.column_position) + FROM + user_ind_columns cols, user_indexes ind + WHERE + cols.table_name = UPPER(%s) AND + NOT EXISTS ( + SELECT 1 + FROM user_constraints cons + WHERE ind.index_name = cons.index_name + ) AND cols.index_name = ind.index_name + GROUP BY ind.index_name, ind.index_type, ind.uniqueness + """, + [table_name], + ) + for constraint, type_, unique, columns, orders in cursor.fetchall(): + constraint = self.identifier_converter(constraint) + constraints[constraint] = { + "primary_key": False, + "unique": unique == "unique", + "foreign_key": None, + "check": False, + "index": True, + "type": "idx" if type_ == "normal" else type_, + "columns": columns.split(","), + "orders": orders.split(","), + } + return constraints diff --git a/venv/Lib/site-packages/django/db/backends/oracle/operations.py b/venv/Lib/site-packages/django/db/backends/oracle/operations.py new file mode 100644 index 000000000..d7f6c70c1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/operations.py @@ -0,0 +1,708 @@ +import datetime +import uuid +from functools import lru_cache + +from django.conf import settings +from django.db import DatabaseError, NotSupportedError +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.backends.utils import split_tzname_delta, strip_quotes, truncate_name +from django.db.models import AutoField, Exists, ExpressionWrapper, Lookup +from django.db.models.expressions import RawSQL +from django.db.models.sql.where import WhereNode +from django.utils import timezone +from django.utils.encoding import force_bytes, force_str +from django.utils.functional import cached_property +from django.utils.regex_helper import _lazy_re_compile + +from .base import Database +from .utils import BulkInsertMapper, InsertVar, Oracle_datetime + + +class DatabaseOperations(BaseDatabaseOperations): + # Oracle uses NUMBER(5), NUMBER(11), and NUMBER(19) for integer fields. + # SmallIntegerField uses NUMBER(11) instead of NUMBER(5), which is used by + # SmallAutoField, to preserve backward compatibility. + integer_field_ranges = { + "SmallIntegerField": (-99999999999, 99999999999), + "IntegerField": (-99999999999, 99999999999), + "BigIntegerField": (-9999999999999999999, 9999999999999999999), + "PositiveBigIntegerField": (0, 9999999999999999999), + "PositiveSmallIntegerField": (0, 99999999999), + "PositiveIntegerField": (0, 99999999999), + "SmallAutoField": (-99999, 99999), + "AutoField": (-99999999999, 99999999999), + "BigAutoField": (-9999999999999999999, 9999999999999999999), + } + set_operators = {**BaseDatabaseOperations.set_operators, "difference": "MINUS"} + + # TODO: colorize this SQL code with style.SQL_KEYWORD(), etc. + _sequence_reset_sql = """ +DECLARE + table_value integer; + seq_value integer; + seq_name user_tab_identity_cols.sequence_name%%TYPE; +BEGIN + BEGIN + SELECT sequence_name INTO seq_name FROM user_tab_identity_cols + WHERE table_name = '%(table_name)s' AND + column_name = '%(column_name)s'; + EXCEPTION WHEN NO_DATA_FOUND THEN + seq_name := '%(no_autofield_sequence_name)s'; + END; + + SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s; + SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences + WHERE sequence_name = seq_name; + WHILE table_value > seq_value LOOP + EXECUTE IMMEDIATE 'SELECT "'||seq_name||'".nextval FROM DUAL' + INTO seq_value; + END LOOP; +END; +/""" + + # Oracle doesn't support string without precision; use the max string size. + cast_char_field_without_max_length = "NVARCHAR2(2000)" + cast_data_types = { + "AutoField": "NUMBER(11)", + "BigAutoField": "NUMBER(19)", + "SmallAutoField": "NUMBER(5)", + "TextField": cast_char_field_without_max_length, + } + + def cache_key_culling_sql(self): + return ( + "SELECT cache_key FROM %s " + "ORDER BY cache_key OFFSET %%s ROWS FETCH FIRST 1 ROWS ONLY" + ) + + def date_extract_sql(self, lookup_type, field_name): + if lookup_type == "week_day": + # TO_CHAR(field, 'D') returns an integer from 1-7, where 1=Sunday. + return "TO_CHAR(%s, 'D')" % field_name + elif lookup_type == "iso_week_day": + return "TO_CHAR(%s - 1, 'D')" % field_name + elif lookup_type == "week": + # IW = ISO week number + return "TO_CHAR(%s, 'IW')" % field_name + elif lookup_type == "quarter": + return "TO_CHAR(%s, 'Q')" % field_name + elif lookup_type == "iso_year": + return "TO_CHAR(%s, 'IYYY')" % field_name + else: + # https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXTRACT-datetime.html + return "EXTRACT(%s FROM %s)" % (lookup_type.upper(), field_name) + + def date_trunc_sql(self, lookup_type, field_name, tzname=None): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROUND-and-TRUNC-Date-Functions.html + if lookup_type in ("year", "month"): + return "TRUNC(%s, '%s')" % (field_name, lookup_type.upper()) + elif lookup_type == "quarter": + return "TRUNC(%s, 'Q')" % field_name + elif lookup_type == "week": + return "TRUNC(%s, 'IW')" % field_name + else: + return "TRUNC(%s)" % field_name + + # Oracle crashes with "ORA-03113: end-of-file on communication channel" + # if the time zone name is passed in parameter. Use interpolation instead. + # https://groups.google.com/forum/#!msg/django-developers/zwQju7hbG78/9l934yelwfsJ + # This regexp matches all time zone names from the zoneinfo database. + _tzname_re = _lazy_re_compile(r"^[\w/:+-]+$") + + def _prepare_tzname_delta(self, tzname): + tzname, sign, offset = split_tzname_delta(tzname) + return f"{sign}{offset}" if offset else tzname + + def _convert_field_to_tz(self, field_name, tzname): + if not (settings.USE_TZ and tzname): + return field_name + if not self._tzname_re.match(tzname): + raise ValueError("Invalid time zone name: %s" % tzname) + # Convert from connection timezone to the local time, returning + # TIMESTAMP WITH TIME ZONE and cast it back to TIMESTAMP to strip the + # TIME ZONE details. + if self.connection.timezone_name != tzname: + return "CAST((FROM_TZ(%s, '%s') AT TIME ZONE '%s') AS TIMESTAMP)" % ( + field_name, + self.connection.timezone_name, + self._prepare_tzname_delta(tzname), + ) + return field_name + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "TRUNC(%s)" % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + # Since `TimeField` values are stored as TIMESTAMP change to the + # default date and convert the field to the specified timezone. + convert_datetime_sql = ( + "TO_TIMESTAMP(CONCAT('1900-01-01 ', TO_CHAR(%s, 'HH24:MI:SS.FF')), " + "'YYYY-MM-DD HH24:MI:SS.FF')" + ) % self._convert_field_to_tz(field_name, tzname) + return "CASE WHEN %s IS NOT NULL THEN %s ELSE NULL END" % ( + field_name, + convert_datetime_sql, + ) + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROUND-and-TRUNC-Date-Functions.html + if lookup_type in ("year", "month"): + sql = "TRUNC(%s, '%s')" % (field_name, lookup_type.upper()) + elif lookup_type == "quarter": + sql = "TRUNC(%s, 'Q')" % field_name + elif lookup_type == "week": + sql = "TRUNC(%s, 'IW')" % field_name + elif lookup_type == "day": + sql = "TRUNC(%s)" % field_name + elif lookup_type == "hour": + sql = "TRUNC(%s, 'HH24')" % field_name + elif lookup_type == "minute": + sql = "TRUNC(%s, 'MI')" % field_name + else: + sql = ( + "CAST(%s AS DATE)" % field_name + ) # Cast to DATE removes sub-second precision. + return sql + + def time_trunc_sql(self, lookup_type, field_name, tzname=None): + # The implementation is similar to `datetime_trunc_sql` as both + # `DateTimeField` and `TimeField` are stored as TIMESTAMP where + # the date part of the later is ignored. + field_name = self._convert_field_to_tz(field_name, tzname) + if lookup_type == "hour": + sql = "TRUNC(%s, 'HH24')" % field_name + elif lookup_type == "minute": + sql = "TRUNC(%s, 'MI')" % field_name + elif lookup_type == "second": + sql = ( + "CAST(%s AS DATE)" % field_name + ) # Cast to DATE removes sub-second precision. + return sql + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type in ["JSONField", "TextField"]: + converters.append(self.convert_textfield_value) + elif internal_type == "BinaryField": + converters.append(self.convert_binaryfield_value) + elif internal_type == "BooleanField": + converters.append(self.convert_booleanfield_value) + elif internal_type == "DateTimeField": + if settings.USE_TZ: + converters.append(self.convert_datetimefield_value) + elif internal_type == "DateField": + converters.append(self.convert_datefield_value) + elif internal_type == "TimeField": + converters.append(self.convert_timefield_value) + elif internal_type == "UUIDField": + converters.append(self.convert_uuidfield_value) + # Oracle stores empty strings as null. If the field accepts the empty + # string, undo this to adhere to the Django convention of using + # the empty string instead of null. + if expression.output_field.empty_strings_allowed: + converters.append( + self.convert_empty_bytes + if internal_type == "BinaryField" + else self.convert_empty_string + ) + return converters + + def convert_textfield_value(self, value, expression, connection): + if isinstance(value, Database.LOB): + value = value.read() + return value + + def convert_binaryfield_value(self, value, expression, connection): + if isinstance(value, Database.LOB): + value = force_bytes(value.read()) + return value + + def convert_booleanfield_value(self, value, expression, connection): + if value in (0, 1): + value = bool(value) + return value + + # cx_Oracle always returns datetime.datetime objects for + # DATE and TIMESTAMP columns, but Django wants to see a + # python datetime.date, .time, or .datetime. + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_datefield_value(self, value, expression, connection): + if isinstance(value, Database.Timestamp): + value = value.date() + return value + + def convert_timefield_value(self, value, expression, connection): + if isinstance(value, Database.Timestamp): + value = value.time() + return value + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + @staticmethod + def convert_empty_string(value, expression, connection): + return "" if value is None else value + + @staticmethod + def convert_empty_bytes(value, expression, connection): + return b"" if value is None else value + + def deferrable_sql(self): + return " DEFERRABLE INITIALLY DEFERRED" + + def fetch_returned_insert_columns(self, cursor, returning_params): + columns = [] + for param in returning_params: + value = param.get_value() + if value == []: + raise DatabaseError( + "The database did not return a new row id. Probably " + '"ORA-1403: no data found" was raised internally but was ' + "hidden by the Oracle OCI library (see " + "https://code.djangoproject.com/ticket/28859)." + ) + columns.append(value[0]) + return tuple(columns) + + def field_cast_sql(self, db_type, internal_type): + if db_type and db_type.endswith("LOB") and internal_type != "JSONField": + return "DBMS_LOB.SUBSTR(%s)" + else: + return "%s" + + def no_limit_value(self): + return None + + def limit_offset_sql(self, low_mark, high_mark): + fetch, offset = self._get_limit_offset_params(low_mark, high_mark) + return " ".join( + sql + for sql in ( + ("OFFSET %d ROWS" % offset) if offset else None, + ("FETCH FIRST %d ROWS ONLY" % fetch) if fetch else None, + ) + if sql + ) + + def last_executed_query(self, cursor, sql, params): + # https://cx-oracle.readthedocs.io/en/latest/cursor.html#Cursor.statement + # The DB API definition does not define this attribute. + statement = cursor.statement + # Unlike Psycopg's `query` and MySQLdb`'s `_executed`, cx_Oracle's + # `statement` doesn't contain the query parameters. Substitute + # parameters manually. + if isinstance(params, (tuple, list)): + for i, param in enumerate(params): + statement = statement.replace( + ":arg%d" % i, force_str(param, errors="replace") + ) + elif isinstance(params, dict): + for key, param in params.items(): + statement = statement.replace( + ":%s" % key, force_str(param, errors="replace") + ) + return statement + + def last_insert_id(self, cursor, table_name, pk_name): + sq_name = self._get_sequence_name(cursor, strip_quotes(table_name), pk_name) + cursor.execute('"%s".currval' % sq_name) + return cursor.fetchone()[0] + + def lookup_cast(self, lookup_type, internal_type=None): + if lookup_type in ("iexact", "icontains", "istartswith", "iendswith"): + return "UPPER(%s)" + if internal_type == "JSONField" and lookup_type == "exact": + return "DBMS_LOB.SUBSTR(%s)" + return "%s" + + def max_in_list_size(self): + return 1000 + + def max_name_length(self): + return 30 + + def pk_default_value(self): + return "NULL" + + def prep_for_iexact_query(self, x): + return x + + def process_clob(self, value): + if value is None: + return "" + return value.read() + + def quote_name(self, name): + # SQL92 requires delimited (quoted) names to be case-sensitive. When + # not quoted, Oracle has case-insensitive behavior for identifiers, but + # always defaults to uppercase. + # We simplify things by making Oracle identifiers always uppercase. + if not name.startswith('"') and not name.endswith('"'): + name = '"%s"' % truncate_name(name, self.max_name_length()) + # Oracle puts the query text into a (query % args) construct, so % signs + # in names need to be escaped. The '%%' will be collapsed back to '%' at + # that stage so we aren't really making the name longer here. + name = name.replace("%", "%%") + return name.upper() + + def regex_lookup(self, lookup_type): + if lookup_type == "regex": + match_option = "'c'" + else: + match_option = "'i'" + return "REGEXP_LIKE(%%s, %%s, %s)" % match_option + + def return_insert_columns(self, fields): + if not fields: + return "", () + field_names = [] + params = [] + for field in fields: + field_names.append( + "%s.%s" + % ( + self.quote_name(field.model._meta.db_table), + self.quote_name(field.column), + ) + ) + params.append(InsertVar(field)) + return "RETURNING %s INTO %s" % ( + ", ".join(field_names), + ", ".join(["%s"] * len(params)), + ), tuple(params) + + def __foreign_key_constraints(self, table_name, recursive): + with self.connection.cursor() as cursor: + if recursive: + cursor.execute( + """ + SELECT + user_tables.table_name, rcons.constraint_name + FROM + user_tables + JOIN + user_constraints cons + ON (user_tables.table_name = cons.table_name + AND cons.constraint_type = ANY('P', 'U')) + LEFT JOIN + user_constraints rcons + ON (user_tables.table_name = rcons.table_name + AND rcons.constraint_type = 'R') + START WITH user_tables.table_name = UPPER(%s) + CONNECT BY + NOCYCLE PRIOR cons.constraint_name = rcons.r_constraint_name + GROUP BY + user_tables.table_name, rcons.constraint_name + HAVING user_tables.table_name != UPPER(%s) + ORDER BY MAX(level) DESC + """, + (table_name, table_name), + ) + else: + cursor.execute( + """ + SELECT + cons.table_name, cons.constraint_name + FROM + user_constraints cons + WHERE + cons.constraint_type = 'R' + AND cons.table_name = UPPER(%s) + """, + (table_name,), + ) + return cursor.fetchall() + + @cached_property + def _foreign_key_constraints(self): + # 512 is large enough to fit the ~330 tables (as of this writing) in + # Django's test suite. + return lru_cache(maxsize=512)(self.__foreign_key_constraints) + + def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False): + if not tables: + return [] + + truncated_tables = {table.upper() for table in tables} + constraints = set() + # Oracle's TRUNCATE CASCADE only works with ON DELETE CASCADE foreign + # keys which Django doesn't define. Emulate the PostgreSQL behavior + # which truncates all dependent tables by manually retrieving all + # foreign key constraints and resolving dependencies. + for table in tables: + for foreign_table, constraint in self._foreign_key_constraints( + table, recursive=allow_cascade + ): + if allow_cascade: + truncated_tables.add(foreign_table) + constraints.add((foreign_table, constraint)) + sql = ( + [ + "%s %s %s %s %s %s %s %s;" + % ( + style.SQL_KEYWORD("ALTER"), + style.SQL_KEYWORD("TABLE"), + style.SQL_FIELD(self.quote_name(table)), + style.SQL_KEYWORD("DISABLE"), + style.SQL_KEYWORD("CONSTRAINT"), + style.SQL_FIELD(self.quote_name(constraint)), + style.SQL_KEYWORD("KEEP"), + style.SQL_KEYWORD("INDEX"), + ) + for table, constraint in constraints + ] + + [ + "%s %s %s;" + % ( + style.SQL_KEYWORD("TRUNCATE"), + style.SQL_KEYWORD("TABLE"), + style.SQL_FIELD(self.quote_name(table)), + ) + for table in truncated_tables + ] + + [ + "%s %s %s %s %s %s;" + % ( + style.SQL_KEYWORD("ALTER"), + style.SQL_KEYWORD("TABLE"), + style.SQL_FIELD(self.quote_name(table)), + style.SQL_KEYWORD("ENABLE"), + style.SQL_KEYWORD("CONSTRAINT"), + style.SQL_FIELD(self.quote_name(constraint)), + ) + for table, constraint in constraints + ] + ) + if reset_sequences: + sequences = [ + sequence + for sequence in self.connection.introspection.sequence_list() + if sequence["table"].upper() in truncated_tables + ] + # Since we've just deleted all the rows, running our sequence ALTER + # code will reset the sequence to 0. + sql.extend(self.sequence_reset_by_name_sql(style, sequences)) + return sql + + def sequence_reset_by_name_sql(self, style, sequences): + sql = [] + for sequence_info in sequences: + no_autofield_sequence_name = self._get_no_autofield_sequence_name( + sequence_info["table"] + ) + table = self.quote_name(sequence_info["table"]) + column = self.quote_name(sequence_info["column"] or "id") + query = self._sequence_reset_sql % { + "no_autofield_sequence_name": no_autofield_sequence_name, + "table": table, + "column": column, + "table_name": strip_quotes(table), + "column_name": strip_quotes(column), + } + sql.append(query) + return sql + + def sequence_reset_sql(self, style, model_list): + output = [] + query = self._sequence_reset_sql + for model in model_list: + for f in model._meta.local_fields: + if isinstance(f, AutoField): + no_autofield_sequence_name = self._get_no_autofield_sequence_name( + model._meta.db_table + ) + table = self.quote_name(model._meta.db_table) + column = self.quote_name(f.column) + output.append( + query + % { + "no_autofield_sequence_name": no_autofield_sequence_name, + "table": table, + "column": column, + "table_name": strip_quotes(table), + "column_name": strip_quotes(column), + } + ) + # Only one AutoField is allowed per model, so don't + # continue to loop + break + return output + + def start_transaction_sql(self): + return "" + + def tablespace_sql(self, tablespace, inline=False): + if inline: + return "USING INDEX TABLESPACE %s" % self.quote_name(tablespace) + else: + return "TABLESPACE %s" % self.quote_name(tablespace) + + def adapt_datefield_value(self, value): + """ + Transform a date value to an object compatible with what is expected + by the backend driver for date columns. + The default implementation transforms the date to text, but that is not + necessary for Oracle. + """ + return value + + def adapt_datetimefield_value(self, value): + """ + Transform a datetime value to an object compatible with what is expected + by the backend driver for datetime columns. + + If naive datetime is passed assumes that is in UTC. Normally Django + models.DateTimeField makes sure that if USE_TZ is True passed datetime + is timezone aware. + """ + + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + # cx_Oracle doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError( + "Oracle backend does not support timezone-aware datetimes when " + "USE_TZ is False." + ) + + return Oracle_datetime.from_datetime(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + if isinstance(value, str): + return datetime.datetime.strptime(value, "%H:%M:%S") + + # Oracle doesn't support tz-aware times + if timezone.is_aware(value): + raise ValueError("Oracle backend does not support timezone-aware times.") + + return Oracle_datetime( + 1900, 1, 1, value.hour, value.minute, value.second, value.microsecond + ) + + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + return value + + def combine_expression(self, connector, sub_expressions): + lhs, rhs = sub_expressions + if connector == "%%": + return "MOD(%s)" % ",".join(sub_expressions) + elif connector == "&": + return "BITAND(%s)" % ",".join(sub_expressions) + elif connector == "|": + return "BITAND(-%(lhs)s-1,%(rhs)s)+%(lhs)s" % {"lhs": lhs, "rhs": rhs} + elif connector == "<<": + return "(%(lhs)s * POWER(2, %(rhs)s))" % {"lhs": lhs, "rhs": rhs} + elif connector == ">>": + return "FLOOR(%(lhs)s / POWER(2, %(rhs)s))" % {"lhs": lhs, "rhs": rhs} + elif connector == "^": + return "POWER(%s)" % ",".join(sub_expressions) + elif connector == "#": + raise NotSupportedError("Bitwise XOR is not supported in Oracle.") + return super().combine_expression(connector, sub_expressions) + + def _get_no_autofield_sequence_name(self, table): + """ + Manually created sequence name to keep backward compatibility for + AutoFields that aren't Oracle identity columns. + """ + name_length = self.max_name_length() - 3 + return "%s_SQ" % truncate_name(strip_quotes(table), name_length).upper() + + def _get_sequence_name(self, cursor, table, pk_name): + cursor.execute( + """ + SELECT sequence_name + FROM user_tab_identity_cols + WHERE table_name = UPPER(%s) + AND column_name = UPPER(%s)""", + [table, pk_name], + ) + row = cursor.fetchone() + return self._get_no_autofield_sequence_name(table) if row is None else row[0] + + def bulk_insert_sql(self, fields, placeholder_rows): + query = [] + for row in placeholder_rows: + select = [] + for i, placeholder in enumerate(row): + # A model without any fields has fields=[None]. + if fields[i]: + internal_type = getattr( + fields[i], "target_field", fields[i] + ).get_internal_type() + placeholder = ( + BulkInsertMapper.types.get(internal_type, "%s") % placeholder + ) + # Add columns aliases to the first select to avoid "ORA-00918: + # column ambiguously defined" when two or more columns in the + # first select have the same value. + if not query: + placeholder = "%s col_%s" % (placeholder, i) + select.append(placeholder) + query.append("SELECT %s FROM DUAL" % ", ".join(select)) + # Bulk insert to tables with Oracle identity columns causes Oracle to + # add sequence.nextval to it. Sequence.nextval cannot be used with the + # UNION operator. To prevent incorrect SQL, move UNION to a subquery. + return "SELECT * FROM (%s)" % " UNION ALL ".join(query) + + def subtract_temporals(self, internal_type, lhs, rhs): + if internal_type == "DateField": + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + params = (*lhs_params, *rhs_params) + return ( + "NUMTODSINTERVAL(TO_NUMBER(%s - %s), 'DAY')" % (lhs_sql, rhs_sql), + params, + ) + return super().subtract_temporals(internal_type, lhs, rhs) + + def bulk_batch_size(self, fields, objs): + """Oracle restricts the number of parameters in a query.""" + if fields: + return self.connection.features.max_query_params // len(fields) + return len(objs) + + def conditional_expression_supported_in_where_clause(self, expression): + """ + Oracle supports only EXISTS(...) or filters in the WHERE clause, others + must be compared with True. + """ + if isinstance(expression, (Exists, Lookup, WhereNode)): + return True + if isinstance(expression, ExpressionWrapper) and expression.conditional: + return self.conditional_expression_supported_in_where_clause( + expression.expression + ) + if isinstance(expression, RawSQL) and expression.conditional: + return True + return False diff --git a/venv/Lib/site-packages/django/db/backends/oracle/schema.py b/venv/Lib/site-packages/django/db/backends/oracle/schema.py new file mode 100644 index 000000000..e4178ec10 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/schema.py @@ -0,0 +1,244 @@ +import copy +import datetime +import re + +from django.db import DatabaseError +from django.db.backends.base.schema import ( + BaseDatabaseSchemaEditor, + _related_non_m2m_objects, +) + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_create_column = "ALTER TABLE %(table)s ADD %(column)s %(definition)s" + sql_alter_column_type = "MODIFY %(column)s %(type)s" + sql_alter_column_null = "MODIFY %(column)s NULL" + sql_alter_column_not_null = "MODIFY %(column)s NOT NULL" + sql_alter_column_default = "MODIFY %(column)s DEFAULT %(default)s" + sql_alter_column_no_default = "MODIFY %(column)s DEFAULT NULL" + sql_alter_column_no_default_null = sql_alter_column_no_default + sql_alter_column_collate = "MODIFY %(column)s %(type)s%(collation)s" + + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" + sql_create_column_inline_fk = ( + "CONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)s" + ) + sql_delete_table = "DROP TABLE %(table)s CASCADE CONSTRAINTS" + sql_create_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)s" + + def quote_value(self, value): + if isinstance(value, (datetime.date, datetime.time, datetime.datetime)): + return "'%s'" % value + elif isinstance(value, str): + return "'%s'" % value.replace("'", "''").replace("%", "%%") + elif isinstance(value, (bytes, bytearray, memoryview)): + return "'%s'" % value.hex() + elif isinstance(value, bool): + return "1" if value else "0" + else: + return str(value) + + def remove_field(self, model, field): + # If the column is an identity column, drop the identity before + # removing the field. + if self._is_identity_column(model._meta.db_table, field.column): + self._drop_identity(model._meta.db_table, field.column) + super().remove_field(model, field) + + def delete_model(self, model): + # Run superclass action + super().delete_model(model) + # Clean up manually created sequence. + self.execute( + """ + DECLARE + i INTEGER; + BEGIN + SELECT COUNT(1) INTO i FROM USER_SEQUENCES + WHERE SEQUENCE_NAME = '%(sq_name)s'; + IF i = 1 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE "%(sq_name)s"'; + END IF; + END; + /""" + % { + "sq_name": self.connection.ops._get_no_autofield_sequence_name( + model._meta.db_table + ) + } + ) + + def alter_field(self, model, old_field, new_field, strict=False): + try: + super().alter_field(model, old_field, new_field, strict) + except DatabaseError as e: + description = str(e) + # If we're changing type to an unsupported type we need a + # SQLite-ish workaround + if "ORA-22858" in description or "ORA-22859" in description: + self._alter_field_type_workaround(model, old_field, new_field) + # If an identity column is changing to a non-numeric type, drop the + # identity first. + elif "ORA-30675" in description: + self._drop_identity(model._meta.db_table, old_field.column) + self.alter_field(model, old_field, new_field, strict) + # If a primary key column is changing to an identity column, drop + # the primary key first. + elif "ORA-30673" in description and old_field.primary_key: + self._delete_primary_key(model, strict=True) + self._alter_field_type_workaround(model, old_field, new_field) + else: + raise + + def _alter_field_type_workaround(self, model, old_field, new_field): + """ + Oracle refuses to change from some type to other type. + What we need to do instead is: + - Add a nullable version of the desired field with a temporary name. If + the new column is an auto field, then the temporary column can't be + nullable. + - Update the table to transfer values from old to new + - Drop old column + - Rename the new column and possibly drop the nullable property + """ + # Make a new field that's like the new one but with a temporary + # column name. + new_temp_field = copy.deepcopy(new_field) + new_temp_field.null = new_field.get_internal_type() not in ( + "AutoField", + "BigAutoField", + "SmallAutoField", + ) + new_temp_field.column = self._generate_temp_name(new_field.column) + # Add it + self.add_field(model, new_temp_field) + # Explicit data type conversion + # https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf + # /Data-Type-Comparison-Rules.html#GUID-D0C5A47E-6F93-4C2D-9E49-4F2B86B359DD + new_value = self.quote_name(old_field.column) + old_type = old_field.db_type(self.connection) + if re.match("^N?CLOB", old_type): + new_value = "TO_CHAR(%s)" % new_value + old_type = "VARCHAR2" + if re.match("^N?VARCHAR2", old_type): + new_internal_type = new_field.get_internal_type() + if new_internal_type == "DateField": + new_value = "TO_DATE(%s, 'YYYY-MM-DD')" % new_value + elif new_internal_type == "DateTimeField": + new_value = "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')" % new_value + elif new_internal_type == "TimeField": + # TimeField are stored as TIMESTAMP with a 1900-01-01 date part. + new_value = "CONCAT('1900-01-01 ', %s)" % new_value + new_value = "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')" % new_value + # Transfer values across + self.execute( + "UPDATE %s set %s=%s" + % ( + self.quote_name(model._meta.db_table), + self.quote_name(new_temp_field.column), + new_value, + ) + ) + # Drop the old field + self.remove_field(model, old_field) + # Rename and possibly make the new field NOT NULL + super().alter_field(model, new_temp_field, new_field) + # Recreate foreign key (if necessary) because the old field is not + # passed to the alter_field() and data types of new_temp_field and + # new_field always match. + new_type = new_field.db_type(self.connection) + if ( + (old_field.primary_key and new_field.primary_key) + or (old_field.unique and new_field.unique) + ) and old_type != new_type: + for _, rel in _related_non_m2m_objects(new_temp_field, new_field): + if rel.field.db_constraint: + self.execute( + self._create_fk_sql(rel.related_model, rel.field, "_fk") + ) + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + auto_field_types = {"AutoField", "BigAutoField", "SmallAutoField"} + # Drop the identity if migrating away from AutoField. + if ( + old_field.get_internal_type() in auto_field_types + and new_field.get_internal_type() not in auto_field_types + and self._is_identity_column(model._meta.db_table, new_field.column) + ): + self._drop_identity(model._meta.db_table, new_field.column) + return super()._alter_column_type_sql(model, old_field, new_field, new_type) + + def normalize_name(self, name): + """ + Get the properly shortened and uppercased identifier as returned by + quote_name() but without the quotes. + """ + nn = self.quote_name(name) + if nn[0] == '"' and nn[-1] == '"': + nn = nn[1:-1] + return nn + + def _generate_temp_name(self, for_name): + """Generate temporary names for workarounds that need temp columns.""" + suffix = hex(hash(for_name)).upper()[1:] + return self.normalize_name(for_name + "_" + suffix) + + def prepare_default(self, value): + return self.quote_value(value) + + def _field_should_be_indexed(self, model, field): + create_index = super()._field_should_be_indexed(model, field) + db_type = field.db_type(self.connection) + if ( + db_type is not None + and db_type.lower() in self.connection._limited_data_types + ): + return False + return create_index + + def _unique_should_be_added(self, old_field, new_field): + return super()._unique_should_be_added( + old_field, new_field + ) and not self._field_became_primary_key(old_field, new_field) + + def _is_identity_column(self, table_name, column_name): + with self.connection.cursor() as cursor: + cursor.execute( + """ + SELECT + CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END + FROM user_tab_cols + WHERE table_name = %s AND + column_name = %s + """, + [self.normalize_name(table_name), self.normalize_name(column_name)], + ) + row = cursor.fetchone() + return row[0] if row else False + + def _drop_identity(self, table_name, column_name): + self.execute( + "ALTER TABLE %(table)s MODIFY %(column)s DROP IDENTITY" + % { + "table": self.quote_name(table_name), + "column": self.quote_name(column_name), + } + ) + + def _get_default_collation(self, table_name): + with self.connection.cursor() as cursor: + cursor.execute( + """ + SELECT default_collation FROM user_tables WHERE table_name = %s + """, + [self.normalize_name(table_name)], + ) + return cursor.fetchone()[0] + + def _alter_column_collation_sql(self, model, new_field, new_type, new_collation): + if new_collation is None: + new_collation = self._get_default_collation(model._meta.db_table) + return super()._alter_column_collation_sql( + model, new_field, new_type, new_collation + ) diff --git a/venv/Lib/site-packages/django/db/backends/oracle/utils.py b/venv/Lib/site-packages/django/db/backends/oracle/utils.py new file mode 100644 index 000000000..bb11931c8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/utils.py @@ -0,0 +1,97 @@ +import datetime + +from .base import Database + + +class InsertVar: + """ + A late-binding cursor variable that can be passed to Cursor.execute + as a parameter, in order to receive the id of the row created by an + insert statement. + """ + + types = { + "AutoField": int, + "BigAutoField": int, + "SmallAutoField": int, + "IntegerField": int, + "BigIntegerField": int, + "SmallIntegerField": int, + "PositiveBigIntegerField": int, + "PositiveSmallIntegerField": int, + "PositiveIntegerField": int, + "FloatField": Database.NATIVE_FLOAT, + "DateTimeField": Database.TIMESTAMP, + "DateField": Database.Date, + "DecimalField": Database.NUMBER, + } + + def __init__(self, field): + internal_type = getattr(field, "target_field", field).get_internal_type() + self.db_type = self.types.get(internal_type, str) + self.bound_param = None + + def bind_parameter(self, cursor): + self.bound_param = cursor.cursor.var(self.db_type) + return self.bound_param + + def get_value(self): + return self.bound_param.getvalue() + + +class Oracle_datetime(datetime.datetime): + """ + A datetime object, with an additional class attribute + to tell cx_Oracle to save the microseconds too. + """ + + input_size = Database.TIMESTAMP + + @classmethod + def from_datetime(cls, dt): + return Oracle_datetime( + dt.year, + dt.month, + dt.day, + dt.hour, + dt.minute, + dt.second, + dt.microsecond, + ) + + +class BulkInsertMapper: + BLOB = "TO_BLOB(%s)" + CLOB = "TO_CLOB(%s)" + DATE = "TO_DATE(%s)" + INTERVAL = "CAST(%s as INTERVAL DAY(9) TO SECOND(6))" + NUMBER = "TO_NUMBER(%s)" + TIMESTAMP = "TO_TIMESTAMP(%s)" + + types = { + "AutoField": NUMBER, + "BigAutoField": NUMBER, + "BigIntegerField": NUMBER, + "BinaryField": BLOB, + "BooleanField": NUMBER, + "DateField": DATE, + "DateTimeField": TIMESTAMP, + "DecimalField": NUMBER, + "DurationField": INTERVAL, + "FloatField": NUMBER, + "IntegerField": NUMBER, + "PositiveBigIntegerField": NUMBER, + "PositiveIntegerField": NUMBER, + "PositiveSmallIntegerField": NUMBER, + "SmallAutoField": NUMBER, + "SmallIntegerField": NUMBER, + "TextField": CLOB, + "TimeField": TIMESTAMP, + } + + +def dsn(settings_dict): + if settings_dict["PORT"]: + host = settings_dict["HOST"].strip() or "localhost" + return Database.makedsn(host, int(settings_dict["PORT"]), settings_dict["NAME"]) + return settings_dict["NAME"] diff --git a/venv/Lib/site-packages/django/db/backends/oracle/validation.py b/venv/Lib/site-packages/django/db/backends/oracle/validation.py new file mode 100644 index 000000000..4035b1208 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/oracle/validation.py @@ -0,0 +1,22 @@ +from django.core import checks +from django.db.backends.base.validation import BaseDatabaseValidation + + +class DatabaseValidation(BaseDatabaseValidation): + def check_field_type(self, field, field_type): + """Oracle doesn't support a database index on some data types.""" + errors = [] + if field.db_index and field_type.lower() in self.connection._limited_data_types: + errors.append( + checks.Warning( + "Oracle does not support a database index on %s columns." + % field_type, + hint=( + "An index won't be created. Silence this warning if " + "you don't care about it." + ), + obj=field, + id="fields.W162", + ) + ) + return errors diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__init__.py b/venv/Lib/site-packages/django/db/backends/postgresql/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c27bb9bd43ae37c48f763cbc36744d326315c07b GIT binary patch literal 203 zcmYk0u?oU47=%;lAc7C#P_v7Ops0h0C~iN7ruiwUZBp~61s};*5}bSn7bnw65AHke zrnAH0fCatJPubn}7J2#RN`-j^NM`rLeSFQ=#z$Ywb6U zgq3#WlfAPAW*%BJEo`*}(jJpK%`Rz<1gc0)Zn=_Nh6#-#UR(0HL%Nn+2yL_%VqD)I R{b^-YQ{t@qLA`*OeE}1eI8p!r literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c0debb546a0a9342f9583aeb4b42f4512e07de1 GIT binary patch literal 10024 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 A`v3p{ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4202888562b60286e4fde6629838442c8883fbb8 GIT binary patch literal 1717 zcmZ`(&u=3&6t-ua$t0Ql=u+4oV3804BGL2+LMz15X0s99Budh)7)6XGV>g-ZG?Us+ zyIW1gp_O{%$dUGhR{TenIC0_+;KGS#H(9!inCLx!-?RPRv;AJua=D1$`|F3_$HYbG z4^8fV1jsia;xkYbQJf%Ok5+<@EZ@SYg{V!*C8C5`7q)LxJV5o_pRgKr>R8?THWX|p zl;If0?IdP18R@yZpS>jFa{vtam?Gbz*tZ#>7PT+Y1@?1S=m1kfbC<5~Tp@z|Jj8KS z^aX@M@M@a)*b&YtqV`3%s=D`82b$`~;gF_O+cs?ij`Byp|RCDXcAA;H*a19-^$o ze*|7K{2p+RUjg?Fe+PJ({{*~j_&V?k{~372@OOb%`7gk$hQ9~A$bSW1H2gkrJFCrq zqv*hb_t@yDe784jcRK^0Jn0UGKIwJ)Lq$4|o;DTP8#MdA+j}$^?05S+%AJQo9K;Dz zdBONe9BCkuqm(jL0>IN$MvO~iHNXMubM_K;rb13Q6KB@u9>^4A?iYKlm2bb$YeBGQ z?d_(4gWadyou*#~>tMIv?GCq_{o!)PK-bKC*Zh9v<#BtrStqK>Ua)8Z<(sfz79KHW zPncA;kX$+Jg=8~YUsHCJ2)`_tl<{mL0vbnB73U#`^^$R+NXREb<rorrirE8U&Eq?M;t8I-cw?Bo^V?*slj+5T#@2V2FczYroE z?WED-2%1ccTCsex7>^#uT*%EHPY+onM<=j#v>T5{B9?4(9!Af@2@@lF7|tf?79DSm z!32jATdNyBPPQV`wvG8qwek9lG7X|58t8)s;8W)+dZ1j(!$qrz|NC<-ViD}&TdBdQ z*W9(O=KdW$eD>*^4c_>_3?d7nuRh)X`sVZ~I-n%F#u6Rs4!6!WfPv-E0952E|7aRnrf;Uw%;h;{ZDdi8q zVxp_+sAXwwJ iq_}=Fv*Gr%CW28qf^r|;X8tw&X(ORyxyZBD?SBCGqrw&d literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..220f97932a80e2b007e1bc57a60c686a97df2ab7 GIT binary patch literal 3203 zcmZ`*L2uj06`mm}ijrk*;u=n}o2J}F(~Z)u((NTc&=z%UB~IbUuI)t-!YCne##%WP zsmxGGtfd#hCcyTx=)LH{I__U0&{I!27rhj1yx$`wH@34RIGh;{-^_gPd*7RQe!j|Z z{rk`V=x)>*`zJNty(~2TfJd*R5KQopdGt0yJ}^9kQ{4>Bf#q3w-3m(s+q3g}DJ%~h z&*AJo6SgS7W}+EgYjWGCsz5&CO7QT?I+bQC922W0czi`Gw<{v!&>JT91L2ri7*%rnIY z!V;y|+_Q@Hc_rb93clFl!nbUXi#btyUGd7|f|wU|jB~za7V|1t{l)CU*|h{lK2uRp z-NdtkM*~=vvVFGCkBpR0X!pF`Ftch9N0AI@BbgZwwO7q|;YXc;Y#5oPWw@7F)cT&O zIT-m*v~p+n3oVu2-5P1#*;z9bJ*juaekbb1w?y|=7hN(E`qnVkNl!`rG`tl|v26|yvbh4+d_}YXP5Y|z z@zt}NZ@x3I9nj8a7kR+OlOu5l6~Pb9l&iVa6vh!FJZ>}e80r#wO!TlLo*I)`zZqW@ zR%%{iK&{ly*tqVt+AABY58C(LPro|+bX;?HS`RnZmv>t3SBIYU=)uk!z_a&aHRvR2 z9y2y9RlzHBWCWJ=qh97Daxe@#iOg(0+S}{D$l)!D8V&u(@5#g$Q@Z&%Cekm)k~=kx zvbe?Tcoun$kAHO@k{>q_aQr^I2-6at6NCz`2!4ef@)VpAKtr$*R~Hi?^ooDOF~Ul@ zu&w|IR#m6eTkVDez2Jzm=^oV)#}byvhvyHT9DdNdryDsh82 z1P)-Jt7Vb^8@H3VvwgcWF1Sg5Ae&ivWo>zDyS0-!Gsqi;x`3stizpf;RmLlupIXws z=m$w=0tQ8lP(PtTM(zu59?_ckvyo@vzXBrq2=!1F&|`g5@RwjiFQBLadIPt0Y*{vU zxczo~^PCHQ)XXW0(&A1Wa19NB3YsRM;Va(b6UZFFJb~DaD0q$b`1W>dy|uFAe(v7e z+IZ*=dwu|}gmJHl>Ir<0)>>OFLX%?H{hfPVBkIfYg$zcCR5YdM?8zkfGLB@!EJ$hx zBc)^I&Cjgl!FLv*3n!EK@RQ(Zf*k%cT#YoOlBQ+-`XGO2Y67yi4vqPkV@r}evt^JZP zKw2}g_sdUAbsN?k1hlopCY-aRa#SVyau!unQ{VXpb{@n2q4l*zvz%@f{m=Px*09@| zExLrOXAgUnJQT&{_?P!V?oQ<9Ic3UUkUIHNy2Q8>YTtn~-caN<=G0ZZvJxUfs_YW* z%-u7K`JAVsn^jsb0y)gJx(r5ll0;<{A8sFM>HCUIc?+vwY_308ffV_x%R9?=m$zG) z2~uRHKG2y3PbCNv(jxT{%~>6G6m|eE=*)g1zJBDXmDp8udbmOF7i;F zd;ys{mq$t*24d!zZtJ-2EFhBVe2F7|-dZn>e;LR1x5mp)*!XAXW2t~|Iv2754zc$d z)y(m8srLP>>idIOjF7$jtmflr)Cp-nh-NyDdiyqM~JUmi`rG3GecIhK-VbsPjyg&;E{IPIN1Cep`U?dkTvD;N-BH Kfg8?PG=Bh`gFGz& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dcb882fe8537d53d299a7a03023fb94f8a1161a GIT binary patch literal 3659 zcmcIn&2JmW72jP_GEM8#mTjqVoOP?jW@}Nkoqi>4P+6u_6%y@8RFDpY4u(5JYNX*V zHM1*OLT@&Ze_;h;<4{4g#BDy# zC!RVOS23RCQ|WjS<7s{|9e-ck5qE!kk6-$oi(T)&F#AD&Hj}RX@P*lrK5>c;`7z9K zxi|H)!W%0mpO^jqv%FbbYSjFd?fPNP%|5nA{tTnbb>s$U|B)Pw| z<tVfD{MFLN zdav;D#`;Og94)M$b~QpDHko4sF;+^k>Jwo(mL*-SA~CzJPO+h&Qj&?{0XPR3rCO>cFWQp2c9fn0@zGM0zp<+C$`h2aBa zZh$>Y%j=Dp1PP}%E5levrYnLNS*T?tq49B7m}hRUXoPCvd!Eu%t&~1<{vIyBx3g`8 zHanY%F>L2S6eJxH#%5<##=l6KJ1bI~c;S(b_CRyzP=tp&>$156!No$C1^cWm%nsjU zVLMvn&BZ2ABIIVVn^_Akzu4;M$7=Uj+XTL56*_^J=Z(7FbIRh-5-H%yt@4S53cjf>y?8j3~>n=g{0hV(?i@EV|@Wf^kn{; z!l*YT4L!X9y>n+1*sm;?G4JHYSvg($Kf zzMA=;|MA~2zeir5`8_>jH($Z4@{?YP(vWoorM)txorovOj>jlHNSMl2$Th@8bYy5- zM@g49k14z~^WN^hA=d*IQY}zkLmEUX>4b*1bksor!)asU53OrUCS7bMYJad}dY2hc zV2W~-Ya0vXvPFf=MjlNP*^d)4H-tvXz&bKm8bU9e*fTl$4a*%lPG|@hnpiV9EJYd$ zAbQFry9{kbnkHQcAjmb#)&@NQ#EQUO&zgf69hjvXX&r zC{iD>EuA56=EB9I1O32(Owxpjvjp;XzHF2XWZ2GxwF7Bg6-SbglUx0Ilk(1+5qc!! z-6%nO!Zho^9S+og+G!P@ZB2K+rNu!aZQa6UZJO`jxo_xUi$=(CRy&CiNHmRLI@qOgL}P=i>0>g`2~1>7kay7t|cp#Lbbf|pcf03hY4b!%FDFMvmbWn8v$6u*f%1)O06l}pB{a3N* z6;QaJ7oU6QCS0#ncD+Id6NL#E7`Nn(Jx`^ml=L;ofIl;-@~ga=1+$;etAoA)10$+~ zjzQbri(Kt*OJb=^wUr>RAT=|USBOTPiuJTr&-DQz&3KmHXbEZ?=g4Gohkeq D+?ZgV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d30954cc1ad405e67e60b6a83d51de49befe1c4f GIT binary patch literal 10366 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 D4A@$` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c02d6414cf177990c09f88751d866dabf52eec5d GIT binary patch literal 11271 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 Pc&4P3f-j}y8TJ1F#*z?9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/schema.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/postgresql/__pycache__/schema.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44e2e0b9666331d54d3b255482394ef801002677 GIT binary patch literal 6984 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 0', + "PositiveIntegerField": '"%(column)s" >= 0', + "PositiveSmallIntegerField": '"%(column)s" >= 0', + } + operators = { + "exact": "= %s", + "iexact": "= UPPER(%s)", + "contains": "LIKE %s", + "icontains": "LIKE UPPER(%s)", + "regex": "~ %s", + "iregex": "~* %s", + "gt": "> %s", + "gte": ">= %s", + "lt": "< %s", + "lte": "<= %s", + "startswith": "LIKE %s", + "endswith": "LIKE %s", + "istartswith": "LIKE UPPER(%s)", + "iendswith": "LIKE UPPER(%s)", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = ( + r"REPLACE(REPLACE(REPLACE({}, E'\\', E'\\\\'), E'%%', E'\\%%'), E'_', E'\\_')" + ) + pattern_ops = { + "contains": "LIKE '%%' || {} || '%%'", + "icontains": "LIKE '%%' || UPPER({}) || '%%'", + "startswith": "LIKE {} || '%%'", + "istartswith": "LIKE UPPER({}) || '%%'", + "endswith": "LIKE '%%' || {}", + "iendswith": "LIKE '%%' || UPPER({})", + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + # PostgreSQL backend-specific attributes. + _named_cursor_idx = 0 + + def get_connection_params(self): + settings_dict = self.settings_dict + # None may be used to connect to the default 'postgres' db + if settings_dict["NAME"] == "" and not settings_dict.get("OPTIONS", {}).get( + "service" + ): + raise ImproperlyConfigured( + "settings.DATABASES is improperly configured. " + "Please supply the NAME or OPTIONS['service'] value." + ) + if len(settings_dict["NAME"] or "") > self.ops.max_name_length(): + raise ImproperlyConfigured( + "The database name '%s' (%d characters) is longer than " + "PostgreSQL's limit of %d characters. Supply a shorter NAME " + "in settings.DATABASES." + % ( + settings_dict["NAME"], + len(settings_dict["NAME"]), + self.ops.max_name_length(), + ) + ) + conn_params = {} + if settings_dict["NAME"]: + conn_params = { + "database": settings_dict["NAME"], + **settings_dict["OPTIONS"], + } + elif settings_dict["NAME"] is None: + # Connect to the default 'postgres' db. + settings_dict.get("OPTIONS", {}).pop("service", None) + conn_params = {"database": "postgres", **settings_dict["OPTIONS"]} + else: + conn_params = {**settings_dict["OPTIONS"]} + + conn_params.pop("isolation_level", None) + if settings_dict["USER"]: + conn_params["user"] = settings_dict["USER"] + if settings_dict["PASSWORD"]: + conn_params["password"] = settings_dict["PASSWORD"] + if settings_dict["HOST"]: + conn_params["host"] = settings_dict["HOST"] + if settings_dict["PORT"]: + conn_params["port"] = settings_dict["PORT"] + return conn_params + + @async_unsafe + def get_new_connection(self, conn_params): + connection = Database.connect(**conn_params) + + # self.isolation_level must be set: + # - after connecting to the database in order to obtain the database's + # default when no value is explicitly specified in options. + # - before calling _set_autocommit() because if autocommit is on, that + # will set connection.isolation_level to ISOLATION_LEVEL_AUTOCOMMIT. + options = self.settings_dict["OPTIONS"] + try: + self.isolation_level = options["isolation_level"] + except KeyError: + self.isolation_level = connection.isolation_level + else: + # Set the isolation level to the value from OPTIONS. + if self.isolation_level != connection.isolation_level: + connection.set_session(isolation_level=self.isolation_level) + # Register dummy loads() to avoid a round trip from psycopg2's decode + # to json.dumps() to json.loads(), when using a custom decoder in + # JSONField. + psycopg2.extras.register_default_jsonb( + conn_or_curs=connection, loads=lambda x: x + ) + return connection + + def ensure_timezone(self): + if self.connection is None: + return False + conn_timezone_name = self.connection.get_parameter_status("TimeZone") + timezone_name = self.timezone_name + if timezone_name and conn_timezone_name != timezone_name: + with self.connection.cursor() as cursor: + cursor.execute(self.ops.set_time_zone_sql(), [timezone_name]) + return True + return False + + def init_connection_state(self): + self.connection.set_client_encoding("UTF8") + + timezone_changed = self.ensure_timezone() + if timezone_changed: + # Commit after setting the time zone (see #17062) + if not self.get_autocommit(): + self.connection.commit() + + @async_unsafe + def create_cursor(self, name=None): + if name: + # In autocommit mode, the cursor will be used outside of a + # transaction, hence use a holdable cursor. + cursor = self.connection.cursor( + name, scrollable=False, withhold=self.connection.autocommit + ) + else: + cursor = self.connection.cursor() + cursor.tzinfo_factory = self.tzinfo_factory if settings.USE_TZ else None + return cursor + + def tzinfo_factory(self, offset): + return self.timezone + + @async_unsafe + def chunked_cursor(self): + self._named_cursor_idx += 1 + # Get the current async task + # Note that right now this is behind @async_unsafe, so this is + # unreachable, but in future we'll start loosening this restriction. + # For now, it's here so that every use of "threading" is + # also async-compatible. + try: + current_task = asyncio.current_task() + except RuntimeError: + current_task = None + # Current task can be none even if the current_task call didn't error + if current_task: + task_ident = str(id(current_task)) + else: + task_ident = "sync" + # Use that and the thread ident to get a unique name + return self._cursor( + name="_django_curs_%d_%s_%d" + % ( + # Avoid reusing name in other threads / tasks + threading.current_thread().ident, + task_ident, + self._named_cursor_idx, + ) + ) + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit = autocommit + + def check_constraints(self, table_names=None): + """ + Check constraints by setting them to immediate. Return them to deferred + afterward. + """ + with self.cursor() as cursor: + cursor.execute("SET CONSTRAINTS ALL IMMEDIATE") + cursor.execute("SET CONSTRAINTS ALL DEFERRED") + + def is_usable(self): + try: + # Use a psycopg cursor directly, bypassing Django's utilities. + with self.connection.cursor() as cursor: + cursor.execute("SELECT 1") + except Database.Error: + return False + else: + return True + + @contextmanager + def _nodb_cursor(self): + cursor = None + try: + with super()._nodb_cursor() as cursor: + yield cursor + except (Database.DatabaseError, WrappedDatabaseError): + if cursor is not None: + raise + warnings.warn( + "Normally Django will use a connection to the 'postgres' database " + "to avoid running initialization queries against the production " + "database when it's not needed (for example, when running tests). " + "Django was unable to create a connection to the 'postgres' database " + "and will use the first PostgreSQL database instead.", + RuntimeWarning, + ) + for connection in connections.all(): + if ( + connection.vendor == "postgresql" + and connection.settings_dict["NAME"] != "postgres" + ): + conn = self.__class__( + { + **self.settings_dict, + "NAME": connection.settings_dict["NAME"], + }, + alias=self.alias, + ) + try: + with conn.cursor() as cursor: + yield cursor + finally: + conn.close() + break + else: + raise + + @cached_property + def pg_version(self): + with self.temporary_connection(): + return self.connection.server_version + + def make_debug_cursor(self, cursor): + return CursorDebugWrapper(cursor, self) + + +class CursorDebugWrapper(BaseCursorDebugWrapper): + def copy_expert(self, sql, file, *args): + with self.debug_sql(sql): + return self.cursor.copy_expert(sql, file, *args) + + def copy_to(self, file, table, *args, **kwargs): + with self.debug_sql(sql="COPY %s TO STDOUT" % table): + return self.cursor.copy_to(file, table, *args, **kwargs) diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/client.py b/venv/Lib/site-packages/django/db/backends/postgresql/client.py new file mode 100644 index 000000000..4c9bd6354 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/client.py @@ -0,0 +1,64 @@ +import signal + +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = "psql" + + @classmethod + def settings_to_cmd_args_env(cls, settings_dict, parameters): + args = [cls.executable_name] + options = settings_dict.get("OPTIONS", {}) + + host = settings_dict.get("HOST") + port = settings_dict.get("PORT") + dbname = settings_dict.get("NAME") + user = settings_dict.get("USER") + passwd = settings_dict.get("PASSWORD") + passfile = options.get("passfile") + service = options.get("service") + sslmode = options.get("sslmode") + sslrootcert = options.get("sslrootcert") + sslcert = options.get("sslcert") + sslkey = options.get("sslkey") + + if not dbname and not service: + # Connect to the default 'postgres' db. + dbname = "postgres" + if user: + args += ["-U", user] + if host: + args += ["-h", host] + if port: + args += ["-p", str(port)] + if dbname: + args += [dbname] + args.extend(parameters) + + env = {} + if passwd: + env["PGPASSWORD"] = str(passwd) + if service: + env["PGSERVICE"] = str(service) + if sslmode: + env["PGSSLMODE"] = str(sslmode) + if sslrootcert: + env["PGSSLROOTCERT"] = str(sslrootcert) + if sslcert: + env["PGSSLCERT"] = str(sslcert) + if sslkey: + env["PGSSLKEY"] = str(sslkey) + if passfile: + env["PGPASSFILE"] = str(passfile) + return args, (env or None) + + def runshell(self, parameters): + sigint_handler = signal.getsignal(signal.SIGINT) + try: + # Allow SIGINT to pass to psql to abort queries. + signal.signal(signal.SIGINT, signal.SIG_IGN) + super().runshell(parameters) + finally: + # Restore the original SIGINT handler. + signal.signal(signal.SIGINT, sigint_handler) diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/creation.py b/venv/Lib/site-packages/django/db/backends/postgresql/creation.py new file mode 100644 index 000000000..70c3eda56 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/creation.py @@ -0,0 +1,87 @@ +import sys + +from psycopg2 import errorcodes + +from django.core.exceptions import ImproperlyConfigured +from django.db.backends.base.creation import BaseDatabaseCreation +from django.db.backends.utils import strip_quotes + + +class DatabaseCreation(BaseDatabaseCreation): + def _quote_name(self, name): + return self.connection.ops.quote_name(name) + + def _get_database_create_suffix(self, encoding=None, template=None): + suffix = "" + if encoding: + suffix += " ENCODING '{}'".format(encoding) + if template: + suffix += " TEMPLATE {}".format(self._quote_name(template)) + return suffix and "WITH" + suffix + + def sql_table_creation_suffix(self): + test_settings = self.connection.settings_dict["TEST"] + if test_settings.get("COLLATION") is not None: + raise ImproperlyConfigured( + "PostgreSQL does not support collation setting at database " + "creation time." + ) + return self._get_database_create_suffix( + encoding=test_settings["CHARSET"], + template=test_settings.get("TEMPLATE"), + ) + + def _database_exists(self, cursor, database_name): + cursor.execute( + "SELECT 1 FROM pg_catalog.pg_database WHERE datname = %s", + [strip_quotes(database_name)], + ) + return cursor.fetchone() is not None + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + try: + if keepdb and self._database_exists(cursor, parameters["dbname"]): + # If the database should be kept and it already exists, don't + # try to create a new one. + return + super()._execute_create_test_db(cursor, parameters, keepdb) + except Exception as e: + if getattr(e.__cause__, "pgcode", "") != errorcodes.DUPLICATE_DATABASE: + # All errors except "database already exists" cancel tests. + self.log("Got an error creating the test database: %s" % e) + sys.exit(2) + elif not keepdb: + # If the database should be kept, ignore "database already + # exists". + raise + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + # CREATE DATABASE ... WITH TEMPLATE ... requires closing connections + # to the template database. + self.connection.close() + + source_database_name = self.connection.settings_dict["NAME"] + target_database_name = self.get_test_db_clone_settings(suffix)["NAME"] + test_db_params = { + "dbname": self._quote_name(target_database_name), + "suffix": self._get_database_create_suffix(template=source_database_name), + } + with self._nodb_cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception: + try: + if verbosity >= 1: + self.log( + "Destroying old test database for alias %s..." + % ( + self._get_database_display_str( + verbosity, target_database_name + ), + ) + ) + cursor.execute("DROP DATABASE %(dbname)s" % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + self.log("Got an error cloning the test database: %s" % e) + sys.exit(2) diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/features.py b/venv/Lib/site-packages/django/db/backends/postgresql/features.py new file mode 100644 index 000000000..6dab8d73d --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/features.py @@ -0,0 +1,99 @@ +import operator + +from django.db import InterfaceError +from django.db.backends.base.features import BaseDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + allows_group_by_selected_pks = True + can_return_columns_from_insert = True + can_return_rows_from_bulk_insert = True + has_real_datatype = True + has_native_uuid_field = True + has_native_duration_field = True + has_native_json_field = True + can_defer_constraint_checks = True + has_select_for_update = True + has_select_for_update_nowait = True + has_select_for_update_of = True + has_select_for_update_skip_locked = True + has_select_for_no_key_update = True + can_release_savepoints = True + supports_tablespaces = True + supports_transactions = True + can_introspect_materialized_views = True + can_distinct_on_fields = True + can_rollback_ddl = True + supports_combined_alters = True + nulls_order_largest = True + closed_cursor_error_class = InterfaceError + has_case_insensitive_like = False + greatest_least_ignores_nulls = True + can_clone_databases = True + supports_temporal_subtraction = True + supports_slicing_ordering_in_compound = True + create_test_procedure_without_params_sql = """ + CREATE FUNCTION test_procedure () RETURNS void AS $$ + DECLARE + V_I INTEGER; + BEGIN + V_I := 1; + END; + $$ LANGUAGE plpgsql;""" + create_test_procedure_with_int_param_sql = """ + CREATE FUNCTION test_procedure (P_I INTEGER) RETURNS void AS $$ + DECLARE + V_I INTEGER; + BEGIN + V_I := P_I; + END; + $$ LANGUAGE plpgsql;""" + requires_casted_case_in_updates = True + supports_over_clause = True + only_supports_unbounded_with_preceding_and_following = True + supports_aggregate_filter_clause = True + supported_explain_formats = {"JSON", "TEXT", "XML", "YAML"} + supports_deferrable_unique_constraints = True + has_json_operators = True + json_key_contains_list_matching_requires_list = True + test_collations = { + "non_default": "sv-x-icu", + "swedish_ci": "sv-x-icu", + } + test_now_utc_template = "STATEMENT_TIMESTAMP() AT TIME ZONE 'UTC'" + + django_test_skips = { + "opclasses are PostgreSQL only.": { + "indexes.tests.SchemaIndexesNotPostgreSQLTests." + "test_create_index_ignores_opclasses", + }, + } + + @cached_property + def introspected_field_types(self): + return { + **super().introspected_field_types, + "PositiveBigIntegerField": "BigIntegerField", + "PositiveIntegerField": "IntegerField", + "PositiveSmallIntegerField": "SmallIntegerField", + } + + @cached_property + def is_postgresql_11(self): + return self.connection.pg_version >= 110000 + + @cached_property + def is_postgresql_12(self): + return self.connection.pg_version >= 120000 + + @cached_property + def is_postgresql_13(self): + return self.connection.pg_version >= 130000 + + has_websearch_to_tsquery = property(operator.attrgetter("is_postgresql_11")) + supports_covering_indexes = property(operator.attrgetter("is_postgresql_11")) + supports_covering_gist_indexes = property(operator.attrgetter("is_postgresql_12")) + supports_non_deterministic_collations = property( + operator.attrgetter("is_postgresql_12") + ) diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/introspection.py b/venv/Lib/site-packages/django/db/backends/postgresql/introspection.py new file mode 100644 index 000000000..6706cc5d3 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/introspection.py @@ -0,0 +1,295 @@ +from django.db.backends.base.introspection import ( + BaseDatabaseIntrospection, + FieldInfo, + TableInfo, +) +from django.db.models import Index + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + # Maps type codes to Django Field types. + data_types_reverse = { + 16: "BooleanField", + 17: "BinaryField", + 20: "BigIntegerField", + 21: "SmallIntegerField", + 23: "IntegerField", + 25: "TextField", + 700: "FloatField", + 701: "FloatField", + 869: "GenericIPAddressField", + 1042: "CharField", # blank-padded + 1043: "CharField", + 1082: "DateField", + 1083: "TimeField", + 1114: "DateTimeField", + 1184: "DateTimeField", + 1186: "DurationField", + 1266: "TimeField", + 1700: "DecimalField", + 2950: "UUIDField", + 3802: "JSONField", + } + # A hook for subclasses. + index_default_access_method = "btree" + + ignored_tables = [] + + def get_field_type(self, data_type, description): + field_type = super().get_field_type(data_type, description) + if description.default and "nextval" in description.default: + if field_type == "IntegerField": + return "AutoField" + elif field_type == "BigIntegerField": + return "BigAutoField" + elif field_type == "SmallIntegerField": + return "SmallAutoField" + return field_type + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute( + """ + SELECT + c.relname, + CASE + WHEN c.relispartition THEN 'p' + WHEN c.relkind IN ('m', 'v') THEN 'v' + ELSE 't' + END + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind IN ('f', 'm', 'p', 'r', 'v') + AND n.nspname NOT IN ('pg_catalog', 'pg_toast') + AND pg_catalog.pg_table_is_visible(c.oid) + """ + ) + return [ + TableInfo(*row) + for row in cursor.fetchall() + if row[0] not in self.ignored_tables + ] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + # Query the pg_catalog tables as cursor.description does not reliably + # return the nullable property and information_schema.columns does not + # contain details of materialized views. + cursor.execute( + """ + SELECT + a.attname AS column_name, + NOT (a.attnotnull OR (t.typtype = 'd' AND t.typnotnull)) AS is_nullable, + pg_get_expr(ad.adbin, ad.adrelid) AS column_default, + CASE WHEN collname = 'default' THEN NULL ELSE collname END AS collation + FROM pg_attribute a + LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum + LEFT JOIN pg_collation co ON a.attcollation = co.oid + JOIN pg_type t ON a.atttypid = t.oid + JOIN pg_class c ON a.attrelid = c.oid + JOIN pg_namespace n ON c.relnamespace = n.oid + WHERE c.relkind IN ('f', 'm', 'p', 'r', 'v') + AND c.relname = %s + AND n.nspname NOT IN ('pg_catalog', 'pg_toast') + AND pg_catalog.pg_table_is_visible(c.oid) + """, + [table_name], + ) + field_map = {line[0]: line[1:] for line in cursor.fetchall()} + cursor.execute( + "SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name) + ) + return [ + FieldInfo( + line.name, + line.type_code, + line.display_size, + line.internal_size, + line.precision, + line.scale, + *field_map[line.name], + ) + for line in cursor.description + ] + + def get_sequences(self, cursor, table_name, table_fields=()): + cursor.execute( + """ + SELECT s.relname as sequence_name, col.attname + FROM pg_class s + JOIN pg_namespace sn ON sn.oid = s.relnamespace + JOIN + pg_depend d ON d.refobjid = s.oid + AND d.refclassid = 'pg_class'::regclass + JOIN + pg_attrdef ad ON ad.oid = d.objid + AND d.classid = 'pg_attrdef'::regclass + JOIN + pg_attribute col ON col.attrelid = ad.adrelid + AND col.attnum = ad.adnum + JOIN pg_class tbl ON tbl.oid = ad.adrelid + WHERE s.relkind = 'S' + AND d.deptype in ('a', 'n') + AND pg_catalog.pg_table_is_visible(tbl.oid) + AND tbl.relname = %s + """, + [table_name], + ) + return [ + {"name": row[0], "table": table_name, "column": row[1]} + for row in cursor.fetchall() + ] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + return { + row[0]: (row[2], row[1]) for row in self.get_key_columns(cursor, table_name) + } + + def get_key_columns(self, cursor, table_name): + cursor.execute( + """ + SELECT a1.attname, c2.relname, a2.attname + FROM pg_constraint con + LEFT JOIN pg_class c1 ON con.conrelid = c1.oid + LEFT JOIN pg_class c2 ON con.confrelid = c2.oid + LEFT JOIN + pg_attribute a1 ON c1.oid = a1.attrelid AND a1.attnum = con.conkey[1] + LEFT JOIN + pg_attribute a2 ON c2.oid = a2.attrelid AND a2.attnum = con.confkey[1] + WHERE + c1.relname = %s AND + con.contype = 'f' AND + c1.relnamespace = c2.relnamespace AND + pg_catalog.pg_table_is_visible(c1.oid) + """, + [table_name], + ) + return cursor.fetchall() + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. Also retrieve the definition of expression-based + indexes. + """ + constraints = {} + # Loop over the key table, collecting things as constraints. The column + # array must return column names in the same order in which they were + # created. + cursor.execute( + """ + SELECT + c.conname, + array( + SELECT attname + FROM unnest(c.conkey) WITH ORDINALITY cols(colid, arridx) + JOIN pg_attribute AS ca ON cols.colid = ca.attnum + WHERE ca.attrelid = c.conrelid + ORDER BY cols.arridx + ), + c.contype, + (SELECT fkc.relname || '.' || fka.attname + FROM pg_attribute AS fka + JOIN pg_class AS fkc ON fka.attrelid = fkc.oid + WHERE fka.attrelid = c.confrelid AND fka.attnum = c.confkey[1]), + cl.reloptions + FROM pg_constraint AS c + JOIN pg_class AS cl ON c.conrelid = cl.oid + WHERE cl.relname = %s AND pg_catalog.pg_table_is_visible(cl.oid) + """, + [table_name], + ) + for constraint, columns, kind, used_cols, options in cursor.fetchall(): + constraints[constraint] = { + "columns": columns, + "primary_key": kind == "p", + "unique": kind in ["p", "u"], + "foreign_key": tuple(used_cols.split(".", 1)) if kind == "f" else None, + "check": kind == "c", + "index": False, + "definition": None, + "options": options, + } + # Now get indexes + cursor.execute( + """ + SELECT + indexname, + array_agg(attname ORDER BY arridx), + indisunique, + indisprimary, + array_agg(ordering ORDER BY arridx), + amname, + exprdef, + s2.attoptions + FROM ( + SELECT + c2.relname as indexname, idx.*, attr.attname, am.amname, + CASE + WHEN idx.indexprs IS NOT NULL THEN + pg_get_indexdef(idx.indexrelid) + END AS exprdef, + CASE am.amname + WHEN %s THEN + CASE (option & 1) + WHEN 1 THEN 'DESC' ELSE 'ASC' + END + END as ordering, + c2.reloptions as attoptions + FROM ( + SELECT * + FROM + pg_index i, + unnest(i.indkey, i.indoption) + WITH ORDINALITY koi(key, option, arridx) + ) idx + LEFT JOIN pg_class c ON idx.indrelid = c.oid + LEFT JOIN pg_class c2 ON idx.indexrelid = c2.oid + LEFT JOIN pg_am am ON c2.relam = am.oid + LEFT JOIN + pg_attribute attr ON attr.attrelid = c.oid AND attr.attnum = idx.key + WHERE c.relname = %s AND pg_catalog.pg_table_is_visible(c.oid) + ) s2 + GROUP BY indexname, indisunique, indisprimary, amname, exprdef, attoptions; + """, + [self.index_default_access_method, table_name], + ) + for ( + index, + columns, + unique, + primary, + orders, + type_, + definition, + options, + ) in cursor.fetchall(): + if index not in constraints: + basic_index = ( + type_ == self.index_default_access_method + and + # '_btree' references + # django.contrib.postgres.indexes.BTreeIndex.suffix. + not index.endswith("_btree") + and options is None + ) + constraints[index] = { + "columns": columns if columns != [None] else [], + "orders": orders if orders != [None] else [], + "primary_key": primary, + "unique": unique, + "foreign_key": None, + "check": False, + "index": True, + "type": Index.suffix if basic_index else type_, + "definition": definition, + "options": options, + } + return constraints diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/operations.py b/venv/Lib/site-packages/django/db/backends/postgresql/operations.py new file mode 100644 index 000000000..f2d451026 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/operations.py @@ -0,0 +1,326 @@ +from psycopg2.extras import Inet + +from django.conf import settings +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.backends.utils import split_tzname_delta + + +class DatabaseOperations(BaseDatabaseOperations): + cast_char_field_without_max_length = "varchar" + explain_prefix = "EXPLAIN" + explain_options = frozenset( + [ + "ANALYZE", + "BUFFERS", + "COSTS", + "SETTINGS", + "SUMMARY", + "TIMING", + "VERBOSE", + "WAL", + ] + ) + cast_data_types = { + "AutoField": "integer", + "BigAutoField": "bigint", + "SmallAutoField": "smallint", + } + + def unification_cast_sql(self, output_field): + internal_type = output_field.get_internal_type() + if internal_type in ( + "GenericIPAddressField", + "IPAddressField", + "TimeField", + "UUIDField", + ): + # PostgreSQL will resolve a union as type 'text' if input types are + # 'unknown'. + # https://www.postgresql.org/docs/current/typeconv-union-case.html + # These fields cannot be implicitly cast back in the default + # PostgreSQL configuration so we need to explicitly cast them. + # We must also remove components of the type within brackets: + # varchar(255) -> varchar. + return ( + "CAST(%%s AS %s)" % output_field.db_type(self.connection).split("(")[0] + ) + return "%s" + + def date_extract_sql(self, lookup_type, field_name): + # https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT + if lookup_type == "week_day": + # For consistency across backends, we return Sunday=1, Saturday=7. + return "EXTRACT('dow' FROM %s) + 1" % field_name + elif lookup_type == "iso_week_day": + return "EXTRACT('isodow' FROM %s)" % field_name + elif lookup_type == "iso_year": + return "EXTRACT('isoyear' FROM %s)" % field_name + else: + return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name) + + def date_trunc_sql(self, lookup_type, field_name, tzname=None): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC + return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) + + def _prepare_tzname_delta(self, tzname): + tzname, sign, offset = split_tzname_delta(tzname) + if offset: + sign = "-" if sign == "+" else "+" + return f"{tzname}{sign}{offset}" + return tzname + + def _convert_field_to_tz(self, field_name, tzname): + if tzname and settings.USE_TZ: + field_name = "%s AT TIME ZONE '%s'" % ( + field_name, + self._prepare_tzname_delta(tzname), + ) + return field_name + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "(%s)::date" % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "(%s)::time" % field_name + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC + return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) + + def time_trunc_sql(self, lookup_type, field_name, tzname=None): + field_name = self._convert_field_to_tz(field_name, tzname) + return "DATE_TRUNC('%s', %s)::time" % (lookup_type, field_name) + + def deferrable_sql(self): + return " DEFERRABLE INITIALLY DEFERRED" + + def fetch_returned_insert_rows(self, cursor): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table, return the tuple of returned data. + """ + return cursor.fetchall() + + def lookup_cast(self, lookup_type, internal_type=None): + lookup = "%s" + + # Cast text lookups to text to allow things like filter(x__contains=4) + if lookup_type in ( + "iexact", + "contains", + "icontains", + "startswith", + "istartswith", + "endswith", + "iendswith", + "regex", + "iregex", + ): + if internal_type in ("IPAddressField", "GenericIPAddressField"): + lookup = "HOST(%s)" + elif internal_type in ("CICharField", "CIEmailField", "CITextField"): + lookup = "%s::citext" + else: + lookup = "%s::text" + + # Use UPPER(x) for case-insensitive lookups; it's faster. + if lookup_type in ("iexact", "icontains", "istartswith", "iendswith"): + lookup = "UPPER(%s)" % lookup + + return lookup + + def no_limit_value(self): + return None + + def prepare_sql_script(self, sql): + return [sql] + + def quote_name(self, name): + if name.startswith('"') and name.endswith('"'): + return name # Quoting once is enough. + return '"%s"' % name + + def set_time_zone_sql(self): + return "SET TIME ZONE %s" + + def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False): + if not tables: + return [] + + # Perform a single SQL 'TRUNCATE x, y, z...;' statement. It allows us + # to truncate tables referenced by a foreign key in any other table. + sql_parts = [ + style.SQL_KEYWORD("TRUNCATE"), + ", ".join(style.SQL_FIELD(self.quote_name(table)) for table in tables), + ] + if reset_sequences: + sql_parts.append(style.SQL_KEYWORD("RESTART IDENTITY")) + if allow_cascade: + sql_parts.append(style.SQL_KEYWORD("CASCADE")) + return ["%s;" % " ".join(sql_parts)] + + def sequence_reset_by_name_sql(self, style, sequences): + # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements + # to reset sequence indices + sql = [] + for sequence_info in sequences: + table_name = sequence_info["table"] + # 'id' will be the case if it's an m2m using an autogenerated + # intermediate table (see BaseDatabaseIntrospection.sequence_list). + column_name = sequence_info["column"] or "id" + sql.append( + "%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" + % ( + style.SQL_KEYWORD("SELECT"), + style.SQL_TABLE(self.quote_name(table_name)), + style.SQL_FIELD(column_name), + ) + ) + return sql + + def tablespace_sql(self, tablespace, inline=False): + if inline: + return "USING INDEX TABLESPACE %s" % self.quote_name(tablespace) + else: + return "TABLESPACE %s" % self.quote_name(tablespace) + + def sequence_reset_sql(self, style, model_list): + from django.db import models + + output = [] + qn = self.quote_name + for model in model_list: + # Use `coalesce` to set the sequence for each model to the max pk + # value if there are records, or 1 if there are none. Set the + # `is_called` property (the third argument to `setval`) to true if + # there are records (as the max pk value is already in use), + # otherwise set it to false. Use pg_get_serial_sequence to get the + # underlying sequence name from the table name and column name. + + for f in model._meta.local_fields: + if isinstance(f, models.AutoField): + output.append( + "%s setval(pg_get_serial_sequence('%s','%s'), " + "coalesce(max(%s), 1), max(%s) %s null) %s %s;" + % ( + style.SQL_KEYWORD("SELECT"), + style.SQL_TABLE(qn(model._meta.db_table)), + style.SQL_FIELD(f.column), + style.SQL_FIELD(qn(f.column)), + style.SQL_FIELD(qn(f.column)), + style.SQL_KEYWORD("IS NOT"), + style.SQL_KEYWORD("FROM"), + style.SQL_TABLE(qn(model._meta.db_table)), + ) + ) + # Only one AutoField is allowed per model, so don't bother + # continuing. + break + return output + + def prep_for_iexact_query(self, x): + return x + + def max_name_length(self): + """ + Return the maximum length of an identifier. + + The maximum length of an identifier is 63 by default, but can be + changed by recompiling PostgreSQL after editing the NAMEDATALEN + macro in src/include/pg_config_manual.h. + + This implementation returns 63, but can be overridden by a custom + database backend that inherits most of its behavior from this one. + """ + return 63 + + def distinct_sql(self, fields, params): + if fields: + params = [param for param_list in params for param in param_list] + return (["DISTINCT ON (%s)" % ", ".join(fields)], params) + else: + return ["DISTINCT"], [] + + def last_executed_query(self, cursor, sql, params): + # https://www.psycopg.org/docs/cursor.html#cursor.query + # The query attribute is a Psycopg extension to the DB API 2.0. + if cursor.query is not None: + return cursor.query.decode() + return None + + def return_insert_columns(self, fields): + if not fields: + return "", () + columns = [ + "%s.%s" + % ( + self.quote_name(field.model._meta.db_table), + self.quote_name(field.column), + ) + for field in fields + ] + return "RETURNING %s" % ", ".join(columns), () + + def bulk_insert_sql(self, fields, placeholder_rows): + placeholder_rows_sql = (", ".join(row) for row in placeholder_rows) + values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql) + return "VALUES " + values_sql + + def adapt_datefield_value(self, value): + return value + + def adapt_datetimefield_value(self, value): + return value + + def adapt_timefield_value(self, value): + return value + + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + return value + + def adapt_ipaddressfield_value(self, value): + if value: + return Inet(value) + return None + + def subtract_temporals(self, internal_type, lhs, rhs): + if internal_type == "DateField": + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + params = (*lhs_params, *rhs_params) + return "(interval '1 day' * (%s - %s))" % (lhs_sql, rhs_sql), params + return super().subtract_temporals(internal_type, lhs, rhs) + + def explain_query_prefix(self, format=None, **options): + extra = {} + # Normalize options. + if options: + options = { + name.upper(): "true" if value else "false" + for name, value in options.items() + } + for valid_option in self.explain_options: + value = options.pop(valid_option, None) + if value is not None: + extra[valid_option.upper()] = value + prefix = super().explain_query_prefix(format, **options) + if format: + extra["FORMAT"] = format + if extra: + prefix += " (%s)" % ", ".join("%s %s" % i for i in extra.items()) + return prefix + + def ignore_conflicts_suffix_sql(self, ignore_conflicts=None): + return ( + "ON CONFLICT DO NOTHING" + if ignore_conflicts + else super().ignore_conflicts_suffix_sql(ignore_conflicts) + ) diff --git a/venv/Lib/site-packages/django/db/backends/postgresql/schema.py b/venv/Lib/site-packages/django/db/backends/postgresql/schema.py new file mode 100644 index 000000000..73e274902 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/postgresql/schema.py @@ -0,0 +1,318 @@ +import psycopg2 + +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.backends.ddl_references import IndexColumns +from django.db.backends.utils import strip_quotes + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_create_sequence = "CREATE SEQUENCE %(sequence)s" + sql_delete_sequence = "DROP SEQUENCE IF EXISTS %(sequence)s CASCADE" + sql_set_sequence_max = ( + "SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)s" + ) + sql_set_sequence_owner = "ALTER SEQUENCE %(sequence)s OWNED BY %(table)s.%(column)s" + + sql_create_index = ( + "CREATE INDEX %(name)s ON %(table)s%(using)s " + "(%(columns)s)%(include)s%(extra)s%(condition)s" + ) + sql_create_index_concurrently = ( + "CREATE INDEX CONCURRENTLY %(name)s ON %(table)s%(using)s " + "(%(columns)s)%(include)s%(extra)s%(condition)s" + ) + sql_delete_index = "DROP INDEX IF EXISTS %(name)s" + sql_delete_index_concurrently = "DROP INDEX CONCURRENTLY IF EXISTS %(name)s" + + # Setting the constraint to IMMEDIATE to allow changing data in the same + # transaction. + sql_create_column_inline_fk = ( + "CONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)s" + "; SET CONSTRAINTS %(namespace)s%(name)s IMMEDIATE" + ) + # Setting the constraint to IMMEDIATE runs any deferred checks to allow + # dropping it in the same transaction. + sql_delete_fk = ( + "SET CONSTRAINTS %(name)s IMMEDIATE; " + "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + ) + sql_delete_procedure = "DROP FUNCTION %(procedure)s(%(param_types)s)" + + def quote_value(self, value): + if isinstance(value, str): + value = value.replace("%", "%%") + adapted = psycopg2.extensions.adapt(value) + if hasattr(adapted, "encoding"): + adapted.encoding = "utf8" + # getquoted() returns a quoted bytestring of the adapted value. + return adapted.getquoted().decode() + + def _field_indexes_sql(self, model, field): + output = super()._field_indexes_sql(model, field) + like_index_statement = self._create_like_index_sql(model, field) + if like_index_statement is not None: + output.append(like_index_statement) + return output + + def _field_data_type(self, field): + if field.is_relation: + return field.rel_db_type(self.connection) + return self.connection.data_types.get( + field.get_internal_type(), + field.db_type(self.connection), + ) + + def _field_base_data_types(self, field): + # Yield base data types for array fields. + if field.base_field.get_internal_type() == "ArrayField": + yield from self._field_base_data_types(field.base_field) + else: + yield self._field_data_type(field.base_field) + + def _create_like_index_sql(self, model, field): + """ + Return the statement to create an index with varchar operator pattern + when the column type is 'varchar' or 'text', otherwise return None. + """ + db_type = field.db_type(connection=self.connection) + if db_type is not None and (field.db_index or field.unique): + # Fields with database column types of `varchar` and `text` need + # a second index that specifies their operator class, which is + # needed when performing correct LIKE queries outside the + # C locale. See #12234. + # + # The same doesn't apply to array fields such as varchar[size] + # and text[size], so skip them. + if "[" in db_type: + return None + if db_type.startswith("varchar"): + return self._create_index_sql( + model, + fields=[field], + suffix="_like", + opclasses=["varchar_pattern_ops"], + ) + elif db_type.startswith("text"): + return self._create_index_sql( + model, + fields=[field], + suffix="_like", + opclasses=["text_pattern_ops"], + ) + return None + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + self.sql_alter_column_type = "ALTER COLUMN %(column)s TYPE %(type)s" + # Cast when data type changed. + using_sql = " USING %(column)s::%(type)s" + new_internal_type = new_field.get_internal_type() + old_internal_type = old_field.get_internal_type() + if new_internal_type == "ArrayField" and new_internal_type == old_internal_type: + # Compare base data types for array fields. + if list(self._field_base_data_types(old_field)) != list( + self._field_base_data_types(new_field) + ): + self.sql_alter_column_type += using_sql + elif self._field_data_type(old_field) != self._field_data_type(new_field): + self.sql_alter_column_type += using_sql + # Make ALTER TYPE with SERIAL make sense. + table = strip_quotes(model._meta.db_table) + serial_fields_map = { + "bigserial": "bigint", + "serial": "integer", + "smallserial": "smallint", + } + if new_type.lower() in serial_fields_map: + column = strip_quotes(new_field.column) + sequence_name = "%s_%s_seq" % (table, column) + return ( + ( + self.sql_alter_column_type + % { + "column": self.quote_name(column), + "type": serial_fields_map[new_type.lower()], + }, + [], + ), + [ + ( + self.sql_delete_sequence + % { + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ( + self.sql_create_sequence + % { + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ( + self.sql_alter_column + % { + "table": self.quote_name(table), + "changes": self.sql_alter_column_default + % { + "column": self.quote_name(column), + "default": "nextval('%s')" + % self.quote_name(sequence_name), + }, + }, + [], + ), + ( + self.sql_set_sequence_max + % { + "table": self.quote_name(table), + "column": self.quote_name(column), + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ( + self.sql_set_sequence_owner + % { + "table": self.quote_name(table), + "column": self.quote_name(column), + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ], + ) + elif ( + old_field.db_parameters(connection=self.connection)["type"] + in serial_fields_map + ): + # Drop the sequence if migrating away from AutoField. + column = strip_quotes(new_field.column) + sequence_name = "%s_%s_seq" % (table, column) + fragment, _ = super()._alter_column_type_sql( + model, old_field, new_field, new_type + ) + return fragment, [ + ( + self.sql_delete_sequence + % { + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ] + else: + return super()._alter_column_type_sql(model, old_field, new_field, new_type) + + def _alter_field( + self, + model, + old_field, + new_field, + old_type, + new_type, + old_db_params, + new_db_params, + strict=False, + ): + # Drop indexes on varchar/text/citext columns that are changing to a + # different type. + if (old_field.db_index or old_field.unique) and ( + (old_type.startswith("varchar") and not new_type.startswith("varchar")) + or (old_type.startswith("text") and not new_type.startswith("text")) + or (old_type.startswith("citext") and not new_type.startswith("citext")) + ): + index_name = self._create_index_name( + model._meta.db_table, [old_field.column], suffix="_like" + ) + self.execute(self._delete_index_sql(model, index_name)) + + super()._alter_field( + model, + old_field, + new_field, + old_type, + new_type, + old_db_params, + new_db_params, + strict, + ) + # Added an index? Create any PostgreSQL-specific indexes. + if (not (old_field.db_index or old_field.unique) and new_field.db_index) or ( + not old_field.unique and new_field.unique + ): + like_index_statement = self._create_like_index_sql(model, new_field) + if like_index_statement is not None: + self.execute(like_index_statement) + + # Removed an index? Drop any PostgreSQL-specific indexes. + if old_field.unique and not (new_field.db_index or new_field.unique): + index_to_remove = self._create_index_name( + model._meta.db_table, [old_field.column], suffix="_like" + ) + self.execute(self._delete_index_sql(model, index_to_remove)) + + def _index_columns(self, table, columns, col_suffixes, opclasses): + if opclasses: + return IndexColumns( + table, + columns, + self.quote_name, + col_suffixes=col_suffixes, + opclasses=opclasses, + ) + return super()._index_columns(table, columns, col_suffixes, opclasses) + + def add_index(self, model, index, concurrently=False): + self.execute( + index.create_sql(model, self, concurrently=concurrently), params=None + ) + + def remove_index(self, model, index, concurrently=False): + self.execute(index.remove_sql(model, self, concurrently=concurrently)) + + def _delete_index_sql(self, model, name, sql=None, concurrently=False): + sql = ( + self.sql_delete_index_concurrently + if concurrently + else self.sql_delete_index + ) + return super()._delete_index_sql(model, name, sql) + + def _create_index_sql( + self, + model, + *, + fields=None, + name=None, + suffix="", + using="", + db_tablespace=None, + col_suffixes=(), + sql=None, + opclasses=(), + condition=None, + concurrently=False, + include=None, + expressions=None, + ): + sql = ( + self.sql_create_index + if not concurrently + else self.sql_create_index_concurrently + ) + return super()._create_index_sql( + model, + fields=fields, + name=name, + suffix=suffix, + using=using, + db_tablespace=db_tablespace, + col_suffixes=col_suffixes, + sql=sql, + opclasses=opclasses, + condition=condition, + include=include, + expressions=expressions, + ) diff --git a/venv/Lib/site-packages/django/db/backends/signals.py b/venv/Lib/site-packages/django/db/backends/signals.py new file mode 100644 index 000000000..a8079d0d7 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/signals.py @@ -0,0 +1,3 @@ +from django.dispatch import Signal + +connection_created = Signal() diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__init__.py b/venv/Lib/site-packages/django/db/backends/sqlite3/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b34b3ef6d11e8644a3912508d80a7af6336cc6ac GIT binary patch literal 200 zcmd1j<>g`kg0FFRlR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_^vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOiET_UV6TMN|JsOP$)GorC7hXFbAl_SU)~KGcU6wK3=b&@)n0pZhlH> PPO2Tq5yebEf`tJ9Q42P} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32c1cbd13b0c5e6c6fd245b5f30fb839c0922ee1 GIT binary patch literal 19615 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f5e4f7dfe8bcbcf645ced21e4f2ce2c95c0dc96 GIT binary patch literal 707 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 M>5x< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/features.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/features.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee84c05d1a03b8e90600df8fc7e48fecbffc6ce9 GIT binary patch literal 4968 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/operations.cpython-310.pyc b/venv/Lib/site-packages/django/db/backends/sqlite3/__pycache__/operations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a555935825ca02a166ddb72b8e4221bcbc804848 GIT binary patch literal 14469 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�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 0', + "JSONField": '(JSON_VALID("%(column)s") OR "%(column)s" IS NULL)', + "PositiveIntegerField": '"%(column)s" >= 0', + "PositiveSmallIntegerField": '"%(column)s" >= 0', + } + data_types_suffix = { + "AutoField": "AUTOINCREMENT", + "BigAutoField": "AUTOINCREMENT", + "SmallAutoField": "AUTOINCREMENT", + } + # SQLite requires LIKE statements to include an ESCAPE clause if the value + # being escaped has a percent or underscore in it. + # See https://www.sqlite.org/lang_expr.html for an explanation. + operators = { + "exact": "= %s", + "iexact": "LIKE %s ESCAPE '\\'", + "contains": "LIKE %s ESCAPE '\\'", + "icontains": "LIKE %s ESCAPE '\\'", + "regex": "REGEXP %s", + "iregex": "REGEXP '(?i)' || %s", + "gt": "> %s", + "gte": ">= %s", + "lt": "< %s", + "lte": "<= %s", + "startswith": "LIKE %s ESCAPE '\\'", + "endswith": "LIKE %s ESCAPE '\\'", + "istartswith": "LIKE %s ESCAPE '\\'", + "iendswith": "LIKE %s ESCAPE '\\'", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')" + pattern_ops = { + "contains": r"LIKE '%%' || {} || '%%' ESCAPE '\'", + "icontains": r"LIKE '%%' || UPPER({}) || '%%' ESCAPE '\'", + "startswith": r"LIKE {} || '%%' ESCAPE '\'", + "istartswith": r"LIKE UPPER({}) || '%%' ESCAPE '\'", + "endswith": r"LIKE '%%' || {} ESCAPE '\'", + "iendswith": r"LIKE '%%' || UPPER({}) ESCAPE '\'", + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + + def get_connection_params(self): + settings_dict = self.settings_dict + if not settings_dict["NAME"]: + raise ImproperlyConfigured( + "settings.DATABASES is improperly configured. " + "Please supply the NAME value." + ) + kwargs = { + "database": settings_dict["NAME"], + "detect_types": Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES, + **settings_dict["OPTIONS"], + } + # Always allow the underlying SQLite connection to be shareable + # between multiple threads. The safe-guarding will be handled at a + # higher level by the `BaseDatabaseWrapper.allow_thread_sharing` + # property. This is necessary as the shareability is disabled by + # default in pysqlite and it cannot be changed once a connection is + # opened. + if "check_same_thread" in kwargs and kwargs["check_same_thread"]: + warnings.warn( + "The `check_same_thread` option was provided and set to " + "True. It will be overridden with False. Use the " + "`DatabaseWrapper.allow_thread_sharing` property instead " + "for controlling thread shareability.", + RuntimeWarning, + ) + kwargs.update({"check_same_thread": False, "uri": True}) + return kwargs + + @async_unsafe + def get_new_connection(self, conn_params): + conn = Database.connect(**conn_params) + create_deterministic_function = functools.partial( + conn.create_function, + deterministic=True, + ) + create_deterministic_function( + "django_date_extract", 2, _sqlite_datetime_extract + ) + create_deterministic_function("django_date_trunc", 4, _sqlite_date_trunc) + create_deterministic_function( + "django_datetime_cast_date", 3, _sqlite_datetime_cast_date + ) + create_deterministic_function( + "django_datetime_cast_time", 3, _sqlite_datetime_cast_time + ) + create_deterministic_function( + "django_datetime_extract", 4, _sqlite_datetime_extract + ) + create_deterministic_function( + "django_datetime_trunc", 4, _sqlite_datetime_trunc + ) + create_deterministic_function("django_time_extract", 2, _sqlite_time_extract) + create_deterministic_function("django_time_trunc", 4, _sqlite_time_trunc) + create_deterministic_function("django_time_diff", 2, _sqlite_time_diff) + create_deterministic_function( + "django_timestamp_diff", 2, _sqlite_timestamp_diff + ) + create_deterministic_function( + "django_format_dtdelta", 3, _sqlite_format_dtdelta + ) + create_deterministic_function("regexp", 2, _sqlite_regexp) + create_deterministic_function("ACOS", 1, none_guard(math.acos)) + create_deterministic_function("ASIN", 1, none_guard(math.asin)) + create_deterministic_function("ATAN", 1, none_guard(math.atan)) + create_deterministic_function("ATAN2", 2, none_guard(math.atan2)) + create_deterministic_function("BITXOR", 2, none_guard(operator.xor)) + create_deterministic_function("CEILING", 1, none_guard(math.ceil)) + create_deterministic_function("COS", 1, none_guard(math.cos)) + create_deterministic_function("COT", 1, none_guard(lambda x: 1 / math.tan(x))) + create_deterministic_function("DEGREES", 1, none_guard(math.degrees)) + create_deterministic_function("EXP", 1, none_guard(math.exp)) + create_deterministic_function("FLOOR", 1, none_guard(math.floor)) + create_deterministic_function("LN", 1, none_guard(math.log)) + create_deterministic_function("LOG", 2, none_guard(lambda x, y: math.log(y, x))) + create_deterministic_function("LPAD", 3, _sqlite_lpad) + create_deterministic_function( + "MD5", 1, none_guard(lambda x: hashlib.md5(x.encode()).hexdigest()) + ) + create_deterministic_function("MOD", 2, none_guard(math.fmod)) + create_deterministic_function("PI", 0, lambda: math.pi) + create_deterministic_function("POWER", 2, none_guard(operator.pow)) + create_deterministic_function("RADIANS", 1, none_guard(math.radians)) + create_deterministic_function("REPEAT", 2, none_guard(operator.mul)) + create_deterministic_function("REVERSE", 1, none_guard(lambda x: x[::-1])) + create_deterministic_function("RPAD", 3, _sqlite_rpad) + create_deterministic_function( + "SHA1", 1, none_guard(lambda x: hashlib.sha1(x.encode()).hexdigest()) + ) + create_deterministic_function( + "SHA224", 1, none_guard(lambda x: hashlib.sha224(x.encode()).hexdigest()) + ) + create_deterministic_function( + "SHA256", 1, none_guard(lambda x: hashlib.sha256(x.encode()).hexdigest()) + ) + create_deterministic_function( + "SHA384", 1, none_guard(lambda x: hashlib.sha384(x.encode()).hexdigest()) + ) + create_deterministic_function( + "SHA512", 1, none_guard(lambda x: hashlib.sha512(x.encode()).hexdigest()) + ) + create_deterministic_function( + "SIGN", 1, none_guard(lambda x: (x > 0) - (x < 0)) + ) + create_deterministic_function("SIN", 1, none_guard(math.sin)) + create_deterministic_function("SQRT", 1, none_guard(math.sqrt)) + create_deterministic_function("TAN", 1, none_guard(math.tan)) + # Don't use the built-in RANDOM() function because it returns a value + # in the range [-1 * 2^63, 2^63 - 1] instead of [0, 1). + conn.create_function("RAND", 0, random.random) + conn.create_aggregate("STDDEV_POP", 1, list_aggregate(statistics.pstdev)) + conn.create_aggregate("STDDEV_SAMP", 1, list_aggregate(statistics.stdev)) + conn.create_aggregate("VAR_POP", 1, list_aggregate(statistics.pvariance)) + conn.create_aggregate("VAR_SAMP", 1, list_aggregate(statistics.variance)) + conn.execute("PRAGMA foreign_keys = ON") + return conn + + def init_connection_state(self): + pass + + def create_cursor(self, name=None): + return self.connection.cursor(factory=SQLiteCursorWrapper) + + @async_unsafe + def close(self): + self.validate_thread_sharing() + # If database is in memory, closing the connection destroys the + # database. To prevent accidental data loss, ignore close requests on + # an in-memory db. + if not self.is_in_memory_db(): + BaseDatabaseWrapper.close(self) + + def _savepoint_allowed(self): + # When 'isolation_level' is not None, sqlite3 commits before each + # savepoint; it's a bug. When it is None, savepoints don't make sense + # because autocommit is enabled. The only exception is inside 'atomic' + # blocks. To work around that bug, on SQLite, 'atomic' starts a + # transaction explicitly rather than simply disable autocommit. + return self.in_atomic_block + + def _set_autocommit(self, autocommit): + if autocommit: + level = None + else: + # sqlite3's internal default is ''. It's different from None. + # See Modules/_sqlite/connection.c. + level = "" + # 'isolation_level' is a misleading API. + # SQLite always runs at the SERIALIZABLE isolation level. + with self.wrap_database_errors: + self.connection.isolation_level = level + + def disable_constraint_checking(self): + with self.cursor() as cursor: + cursor.execute("PRAGMA foreign_keys = OFF") + # Foreign key constraints cannot be turned off while in a multi- + # statement transaction. Fetch the current state of the pragma + # to determine if constraints are effectively disabled. + enabled = cursor.execute("PRAGMA foreign_keys").fetchone()[0] + return not bool(enabled) + + def enable_constraint_checking(self): + with self.cursor() as cursor: + cursor.execute("PRAGMA foreign_keys = ON") + + def check_constraints(self, table_names=None): + """ + Check each table name in `table_names` for rows with invalid foreign + key references. This method is intended to be used in conjunction with + `disable_constraint_checking()` and `enable_constraint_checking()`, to + determine if rows with invalid references were entered while constraint + checks were off. + """ + if self.features.supports_pragma_foreign_key_check: + with self.cursor() as cursor: + if table_names is None: + violations = cursor.execute("PRAGMA foreign_key_check").fetchall() + else: + violations = chain.from_iterable( + cursor.execute( + "PRAGMA foreign_key_check(%s)" + % self.ops.quote_name(table_name) + ).fetchall() + for table_name in table_names + ) + # See https://www.sqlite.org/pragma.html#pragma_foreign_key_check + for ( + table_name, + rowid, + referenced_table_name, + foreign_key_index, + ) in violations: + foreign_key = cursor.execute( + "PRAGMA foreign_key_list(%s)" % self.ops.quote_name(table_name) + ).fetchall()[foreign_key_index] + column_name, referenced_column_name = foreign_key[3:5] + primary_key_column_name = self.introspection.get_primary_key_column( + cursor, table_name + ) + primary_key_value, bad_value = cursor.execute( + "SELECT %s, %s FROM %s WHERE rowid = %%s" + % ( + self.ops.quote_name(primary_key_column_name), + self.ops.quote_name(column_name), + self.ops.quote_name(table_name), + ), + (rowid,), + ).fetchone() + raise IntegrityError( + "The row in table '%s' with primary key '%s' has an " + "invalid foreign key: %s.%s contains a value '%s' that " + "does not have a corresponding value in %s.%s." + % ( + table_name, + primary_key_value, + table_name, + column_name, + bad_value, + referenced_table_name, + referenced_column_name, + ) + ) + else: + with self.cursor() as cursor: + if table_names is None: + table_names = self.introspection.table_names(cursor) + for table_name in table_names: + primary_key_column_name = self.introspection.get_primary_key_column( + cursor, table_name + ) + if not primary_key_column_name: + continue + key_columns = self.introspection.get_key_columns(cursor, table_name) + for ( + column_name, + referenced_table_name, + referenced_column_name, + ) in key_columns: + cursor.execute( + """ + SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING + LEFT JOIN `%s` as REFERRED + ON (REFERRING.`%s` = REFERRED.`%s`) + WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL + """ + % ( + primary_key_column_name, + column_name, + table_name, + referenced_table_name, + column_name, + referenced_column_name, + column_name, + referenced_column_name, + ) + ) + for bad_row in cursor.fetchall(): + raise IntegrityError( + "The row in table '%s' with primary key '%s' has an " + "invalid foreign key: %s.%s contains a value '%s' that " + "does not have a corresponding value in %s.%s." + % ( + table_name, + bad_row[0], + table_name, + column_name, + bad_row[1], + referenced_table_name, + referenced_column_name, + ) + ) + + def is_usable(self): + return True + + def _start_transaction_under_autocommit(self): + """ + Start a transaction explicitly in autocommit mode. + + Staying in autocommit mode works around a bug of sqlite3 that breaks + savepoints when autocommit is disabled. + """ + self.cursor().execute("BEGIN") + + def is_in_memory_db(self): + return self.creation.is_in_memory_db(self.settings_dict["NAME"]) + + +FORMAT_QMARK_REGEX = _lazy_re_compile(r"(?= length: + return text[:length] + return (fill_text * length)[: length - len(text)] + text + + +@none_guard +def _sqlite_rpad(text, length, fill_text): + return (text + fill_text * length)[:length] diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/client.py b/venv/Lib/site-packages/django/db/backends/sqlite3/client.py new file mode 100644 index 000000000..7cee35dc8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/client.py @@ -0,0 +1,10 @@ +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = "sqlite3" + + @classmethod + def settings_to_cmd_args_env(cls, settings_dict, parameters): + args = [cls.executable_name, settings_dict["NAME"], *parameters] + return args, None diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/creation.py b/venv/Lib/site-packages/django/db/backends/sqlite3/creation.py new file mode 100644 index 000000000..9d8d4a63a --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/creation.py @@ -0,0 +1,108 @@ +import os +import shutil +import sys +from pathlib import Path + +from django.db.backends.base.creation import BaseDatabaseCreation + + +class DatabaseCreation(BaseDatabaseCreation): + @staticmethod + def is_in_memory_db(database_name): + return not isinstance(database_name, Path) and ( + database_name == ":memory:" or "mode=memory" in database_name + ) + + def _get_test_db_name(self): + test_database_name = self.connection.settings_dict["TEST"]["NAME"] or ":memory:" + if test_database_name == ":memory:": + return "file:memorydb_%s?mode=memory&cache=shared" % self.connection.alias + return test_database_name + + def _create_test_db(self, verbosity, autoclobber, keepdb=False): + test_database_name = self._get_test_db_name() + + if keepdb: + return test_database_name + if not self.is_in_memory_db(test_database_name): + # Erase the old test database + if verbosity >= 1: + self.log( + "Destroying old test database for alias %s..." + % (self._get_database_display_str(verbosity, test_database_name),) + ) + if os.access(test_database_name, os.F_OK): + if not autoclobber: + confirm = input( + "Type 'yes' if you would like to try deleting the test " + "database '%s', or 'no' to cancel: " % test_database_name + ) + if autoclobber or confirm == "yes": + try: + os.remove(test_database_name) + except Exception as e: + self.log("Got an error deleting the old test database: %s" % e) + sys.exit(2) + else: + self.log("Tests cancelled.") + sys.exit(1) + return test_database_name + + def get_test_db_clone_settings(self, suffix): + orig_settings_dict = self.connection.settings_dict + source_database_name = orig_settings_dict["NAME"] + if self.is_in_memory_db(source_database_name): + return orig_settings_dict + else: + root, ext = os.path.splitext(orig_settings_dict["NAME"]) + return {**orig_settings_dict, "NAME": "{}_{}{}".format(root, suffix, ext)} + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + source_database_name = self.connection.settings_dict["NAME"] + target_database_name = self.get_test_db_clone_settings(suffix)["NAME"] + # Forking automatically makes a copy of an in-memory database. + if not self.is_in_memory_db(source_database_name): + # Erase the old test database + if os.access(target_database_name, os.F_OK): + if keepdb: + return + if verbosity >= 1: + self.log( + "Destroying old test database for alias %s..." + % ( + self._get_database_display_str( + verbosity, target_database_name + ), + ) + ) + try: + os.remove(target_database_name) + except Exception as e: + self.log("Got an error deleting the old test database: %s" % e) + sys.exit(2) + try: + shutil.copy(source_database_name, target_database_name) + except Exception as e: + self.log("Got an error cloning the test database: %s" % e) + sys.exit(2) + + def _destroy_test_db(self, test_database_name, verbosity): + if test_database_name and not self.is_in_memory_db(test_database_name): + # Remove the SQLite database file + os.remove(test_database_name) + + def test_db_signature(self): + """ + Return a tuple that uniquely identifies a test database. + + This takes into account the special cases of ":memory:" and "" for + SQLite since the databases will be distinct despite having the same + TEST NAME. See https://www.sqlite.org/inmemorydb.html + """ + test_database_name = self._get_test_db_name() + sig = [self.connection.settings_dict["NAME"]] + if self.is_in_memory_db(test_database_name): + sig.append(self.connection.alias) + else: + sig.append(test_database_name) + return tuple(sig) diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/features.py b/venv/Lib/site-packages/django/db/backends/sqlite3/features.py new file mode 100644 index 000000000..2b06ebeb8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/features.py @@ -0,0 +1,145 @@ +import operator +import platform + +from django.db import transaction +from django.db.backends.base.features import BaseDatabaseFeatures +from django.db.utils import OperationalError +from django.utils.functional import cached_property + +from .base import Database + + +class DatabaseFeatures(BaseDatabaseFeatures): + # SQLite can read from a cursor since SQLite 3.6.5, subject to the caveat + # that statements within a connection aren't isolated from each other. See + # https://sqlite.org/isolation.html. + can_use_chunked_reads = True + test_db_allows_multiple_connections = False + supports_unspecified_pk = True + supports_timezones = False + max_query_params = 999 + supports_mixed_date_datetime_comparisons = False + supports_transactions = True + atomic_transactions = False + can_rollback_ddl = True + can_create_inline_fk = False + supports_paramstyle_pyformat = False + can_clone_databases = True + supports_temporal_subtraction = True + ignores_table_name_case = True + supports_cast_with_precision = False + time_cast_precision = 3 + can_release_savepoints = True + # Is "ALTER TABLE ... RENAME COLUMN" supported? + can_alter_table_rename_column = Database.sqlite_version_info >= (3, 25, 0) + supports_parentheses_in_compound = False + # Deferred constraint checks can be emulated on SQLite < 3.20 but not in a + # reasonably performant way. + supports_pragma_foreign_key_check = Database.sqlite_version_info >= (3, 20, 0) + can_defer_constraint_checks = supports_pragma_foreign_key_check + supports_functions_in_partial_indexes = Database.sqlite_version_info >= (3, 15, 0) + supports_over_clause = Database.sqlite_version_info >= (3, 25, 0) + supports_frame_range_fixed_distance = Database.sqlite_version_info >= (3, 28, 0) + supports_aggregate_filter_clause = Database.sqlite_version_info >= (3, 30, 1) + supports_order_by_nulls_modifier = Database.sqlite_version_info >= (3, 30, 0) + order_by_nulls_first = True + supports_json_field_contains = False + test_collations = { + "ci": "nocase", + "cs": "binary", + "non_default": "nocase", + } + + @cached_property + def django_test_skips(self): + skips = { + "SQLite stores values rounded to 15 significant digits.": { + "model_fields.test_decimalfield.DecimalFieldTests." + "test_fetch_from_db_without_float_rounding", + }, + "SQLite naively remakes the table on field alteration.": { + "schema.tests.SchemaTests.test_unique_no_unnecessary_fk_drops", + "schema.tests.SchemaTests.test_unique_and_reverse_m2m", + "schema.tests.SchemaTests." + "test_alter_field_default_doesnt_perform_queries", + "schema.tests.SchemaTests." + "test_rename_column_renames_deferred_sql_references", + }, + "SQLite doesn't have a constraint.": { + "model_fields.test_integerfield.PositiveIntegerFieldTests." + "test_negative_values", + }, + "SQLite doesn't support negative precision for ROUND().": { + "db_functions.math.test_round.RoundTests." + "test_null_with_negative_precision", + "db_functions.math.test_round.RoundTests." + "test_decimal_with_negative_precision", + "db_functions.math.test_round.RoundTests." + "test_float_with_negative_precision", + "db_functions.math.test_round.RoundTests." + "test_integer_with_negative_precision", + }, + } + if Database.sqlite_version_info < (3, 27): + skips.update( + { + "Nondeterministic failure on SQLite < 3.27.": { + "expressions_window.tests.WindowFunctionTests." + "test_subquery_row_range_rank", + }, + } + ) + if self.connection.is_in_memory_db(): + skips.update( + { + "the sqlite backend's close() method is a no-op when using an " + "in-memory database": { + "servers.test_liveserverthread.LiveServerThreadTest." + "test_closes_connections", + "servers.tests.LiveServerTestCloseConnectionTest." + "test_closes_connections", + }, + } + ) + return skips + + @cached_property + def supports_atomic_references_rename(self): + # SQLite 3.28.0 bundled with MacOS 10.15 does not support renaming + # references atomically. + if platform.mac_ver()[0].startswith( + "10.15." + ) and Database.sqlite_version_info == (3, 28, 0): + return False + return Database.sqlite_version_info >= (3, 26, 0) + + @cached_property + def introspected_field_types(self): + return { + **super().introspected_field_types, + "BigAutoField": "AutoField", + "DurationField": "BigIntegerField", + "GenericIPAddressField": "CharField", + "SmallAutoField": "AutoField", + } + + @cached_property + def supports_json_field(self): + with self.connection.cursor() as cursor: + try: + with transaction.atomic(self.connection.alias): + cursor.execute('SELECT JSON(\'{"a": "b"}\')') + except OperationalError: + return False + return True + + can_introspect_json_field = property(operator.attrgetter("supports_json_field")) + has_json_object_function = property(operator.attrgetter("supports_json_field")) + + @cached_property + def can_return_columns_from_insert(self): + return Database.sqlite_version_info >= (3, 35) + + can_return_rows_from_bulk_insert = property( + operator.attrgetter("can_return_columns_from_insert") + ) diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/introspection.py b/venv/Lib/site-packages/django/db/backends/sqlite3/introspection.py new file mode 100644 index 000000000..808bca0a4 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/introspection.py @@ -0,0 +1,528 @@ +import re +from collections import namedtuple + +import sqlparse + +from django.db.backends.base.introspection import BaseDatabaseIntrospection +from django.db.backends.base.introspection import FieldInfo as BaseFieldInfo +from django.db.backends.base.introspection import TableInfo +from django.db.models import Index +from django.utils.regex_helper import _lazy_re_compile + +FieldInfo = namedtuple( + "FieldInfo", BaseFieldInfo._fields + ("pk", "has_json_constraint") +) + +field_size_re = _lazy_re_compile(r"^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$") + + +def get_field_size(name): + """Extract the size number from a "varchar(11)" type name""" + m = field_size_re.search(name) + return int(m[1]) if m else None + + +# This light wrapper "fakes" a dictionary interface, because some SQLite data +# types include variables in them -- e.g. "varchar(30)" -- and can't be matched +# as a simple dictionary lookup. +class FlexibleFieldLookupDict: + # Maps SQL types to Django Field types. Some of the SQL types have multiple + # entries here because SQLite allows for anything and doesn't normalize the + # field type; it uses whatever was given. + base_data_types_reverse = { + "bool": "BooleanField", + "boolean": "BooleanField", + "smallint": "SmallIntegerField", + "smallint unsigned": "PositiveSmallIntegerField", + "smallinteger": "SmallIntegerField", + "int": "IntegerField", + "integer": "IntegerField", + "bigint": "BigIntegerField", + "integer unsigned": "PositiveIntegerField", + "bigint unsigned": "PositiveBigIntegerField", + "decimal": "DecimalField", + "real": "FloatField", + "text": "TextField", + "char": "CharField", + "varchar": "CharField", + "blob": "BinaryField", + "date": "DateField", + "datetime": "DateTimeField", + "time": "TimeField", + } + + def __getitem__(self, key): + key = key.lower().split("(", 1)[0].strip() + return self.base_data_types_reverse[key] + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + data_types_reverse = FlexibleFieldLookupDict() + + def get_field_type(self, data_type, description): + field_type = super().get_field_type(data_type, description) + if description.pk and field_type in { + "BigIntegerField", + "IntegerField", + "SmallIntegerField", + }: + # No support for BigAutoField or SmallAutoField as SQLite treats + # all integer primary keys as signed 64-bit integers. + return "AutoField" + if description.has_json_constraint: + return "JSONField" + return field_type + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + # Skip the sqlite_sequence system table used for autoincrement key + # generation. + cursor.execute( + """ + SELECT name, type FROM sqlite_master + WHERE type in ('table', 'view') AND NOT name='sqlite_sequence' + ORDER BY name""" + ) + return [TableInfo(row[0], row[1][0]) for row in cursor.fetchall()] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + cursor.execute( + "PRAGMA table_info(%s)" % self.connection.ops.quote_name(table_name) + ) + table_info = cursor.fetchall() + collations = self._get_column_collations(cursor, table_name) + json_columns = set() + if self.connection.features.can_introspect_json_field: + for line in table_info: + column = line[1] + json_constraint_sql = '%%json_valid("%s")%%' % column + has_json_constraint = cursor.execute( + """ + SELECT sql + FROM sqlite_master + WHERE + type = 'table' AND + name = %s AND + sql LIKE %s + """, + [table_name, json_constraint_sql], + ).fetchone() + if has_json_constraint: + json_columns.add(column) + return [ + FieldInfo( + name, + data_type, + None, + get_field_size(data_type), + None, + None, + not notnull, + default, + collations.get(name), + pk == 1, + name in json_columns, + ) + for cid, name, data_type, notnull, default, pk in table_info + ] + + def get_sequences(self, cursor, table_name, table_fields=()): + pk_col = self.get_primary_key_column(cursor, table_name) + return [{"table": table_name, "column": pk_col}] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + # Dictionary of relations to return + relations = {} + + # Schema for this table + cursor.execute( + "SELECT sql, type FROM sqlite_master " + "WHERE tbl_name = %s AND type IN ('table', 'view')", + [table_name], + ) + create_sql, table_type = cursor.fetchone() + if table_type == "view": + # It might be a view, then no results will be returned + return relations + results = create_sql[create_sql.index("(") + 1 : create_sql.rindex(")")] + + # Walk through and look for references to other tables. SQLite doesn't + # really have enforced references, but since it echoes out the SQL used + # to create the table we can look for REFERENCES statements used there. + for field_desc in results.split(","): + field_desc = field_desc.strip() + if field_desc.startswith("UNIQUE"): + continue + + m = re.search(r'references (\S*) ?\(["|]?(.*)["|]?\)', field_desc, re.I) + if not m: + continue + table, column = [s.strip('"') for s in m.groups()] + + if field_desc.startswith("FOREIGN KEY"): + # Find name of the target FK field + m = re.match(r"FOREIGN KEY\s*\(([^\)]*)\).*", field_desc, re.I) + field_name = m[1].strip('"') + else: + field_name = field_desc.split()[0].strip('"') + + cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s", [table]) + result = cursor.fetchall()[0] + other_table_results = result[0].strip() + li, ri = other_table_results.index("("), other_table_results.rindex(")") + other_table_results = other_table_results[li + 1 : ri] + + for other_desc in other_table_results.split(","): + other_desc = other_desc.strip() + if other_desc.startswith("UNIQUE"): + continue + + other_name = other_desc.split(" ", 1)[0].strip('"') + if other_name == column: + relations[field_name] = (other_name, table) + break + + return relations + + def get_key_columns(self, cursor, table_name): + """ + Return a list of (column_name, referenced_table_name, referenced_column_name) + for all key columns in given table. + """ + key_columns = [] + + # Schema for this table + cursor.execute( + "SELECT sql FROM sqlite_master WHERE tbl_name = %s AND type = %s", + [table_name, "table"], + ) + results = cursor.fetchone()[0].strip() + results = results[results.index("(") + 1 : results.rindex(")")] + + # Walk through and look for references to other tables. SQLite doesn't + # really have enforced references, but since it echoes out the SQL used + # to create the table we can look for REFERENCES statements used there. + for field_index, field_desc in enumerate(results.split(",")): + field_desc = field_desc.strip() + if field_desc.startswith("UNIQUE"): + continue + + m = re.search(r'"(.*)".*references (.*) \(["|](.*)["|]\)', field_desc, re.I) + if not m: + continue + + # This will append + # (column_name, referenced_table_name, referenced_column_name) to + # key_columns. + key_columns.append(tuple(s.strip('"') for s in m.groups())) + + return key_columns + + def get_primary_key_column(self, cursor, table_name): + """Return the column name of the primary key for the given table.""" + # Don't use PRAGMA because that causes issues with some transactions + cursor.execute( + "SELECT sql, type FROM sqlite_master " + "WHERE tbl_name = %s AND type IN ('table', 'view')", + [table_name], + ) + row = cursor.fetchone() + if row is None: + raise ValueError("Table %s does not exist" % table_name) + create_sql, table_type = row + if table_type == "view": + # Views don't have a primary key. + return None + fields_sql = create_sql[create_sql.index("(") + 1 : create_sql.rindex(")")] + for field_desc in fields_sql.split(","): + field_desc = field_desc.strip() + m = re.match( + r'(?:(?:["`\[])(.*)(?:["`\]])|(\w+)).*PRIMARY KEY.*', field_desc + ) + if m: + return m[1] if m[1] else m[2] + return None + + def _get_foreign_key_constraints(self, cursor, table_name): + constraints = {} + cursor.execute( + "PRAGMA foreign_key_list(%s)" % self.connection.ops.quote_name(table_name) + ) + for row in cursor.fetchall(): + # Remaining on_update/on_delete/match values are of no interest. + id_, _, table, from_, to = row[:5] + constraints["fk_%d" % id_] = { + "columns": [from_], + "primary_key": False, + "unique": False, + "foreign_key": (table, to), + "check": False, + "index": False, + } + return constraints + + def _parse_column_or_constraint_definition(self, tokens, columns): + token = None + is_constraint_definition = None + field_name = None + constraint_name = None + unique = False + unique_columns = [] + check = False + check_columns = [] + braces_deep = 0 + for token in tokens: + if token.match(sqlparse.tokens.Punctuation, "("): + braces_deep += 1 + elif token.match(sqlparse.tokens.Punctuation, ")"): + braces_deep -= 1 + if braces_deep < 0: + # End of columns and constraints for table definition. + break + elif braces_deep == 0 and token.match(sqlparse.tokens.Punctuation, ","): + # End of current column or constraint definition. + break + # Detect column or constraint definition by first token. + if is_constraint_definition is None: + is_constraint_definition = token.match( + sqlparse.tokens.Keyword, "CONSTRAINT" + ) + if is_constraint_definition: + continue + if is_constraint_definition: + # Detect constraint name by second token. + if constraint_name is None: + if token.ttype in (sqlparse.tokens.Name, sqlparse.tokens.Keyword): + constraint_name = token.value + elif token.ttype == sqlparse.tokens.Literal.String.Symbol: + constraint_name = token.value[1:-1] + # Start constraint columns parsing after UNIQUE keyword. + if token.match(sqlparse.tokens.Keyword, "UNIQUE"): + unique = True + unique_braces_deep = braces_deep + elif unique: + if unique_braces_deep == braces_deep: + if unique_columns: + # Stop constraint parsing. + unique = False + continue + if token.ttype in (sqlparse.tokens.Name, sqlparse.tokens.Keyword): + unique_columns.append(token.value) + elif token.ttype == sqlparse.tokens.Literal.String.Symbol: + unique_columns.append(token.value[1:-1]) + else: + # Detect field name by first token. + if field_name is None: + if token.ttype in (sqlparse.tokens.Name, sqlparse.tokens.Keyword): + field_name = token.value + elif token.ttype == sqlparse.tokens.Literal.String.Symbol: + field_name = token.value[1:-1] + if token.match(sqlparse.tokens.Keyword, "UNIQUE"): + unique_columns = [field_name] + # Start constraint columns parsing after CHECK keyword. + if token.match(sqlparse.tokens.Keyword, "CHECK"): + check = True + check_braces_deep = braces_deep + elif check: + if check_braces_deep == braces_deep: + if check_columns: + # Stop constraint parsing. + check = False + continue + if token.ttype in (sqlparse.tokens.Name, sqlparse.tokens.Keyword): + if token.value in columns: + check_columns.append(token.value) + elif token.ttype == sqlparse.tokens.Literal.String.Symbol: + if token.value[1:-1] in columns: + check_columns.append(token.value[1:-1]) + unique_constraint = ( + { + "unique": True, + "columns": unique_columns, + "primary_key": False, + "foreign_key": None, + "check": False, + "index": False, + } + if unique_columns + else None + ) + check_constraint = ( + { + "check": True, + "columns": check_columns, + "primary_key": False, + "unique": False, + "foreign_key": None, + "index": False, + } + if check_columns + else None + ) + return constraint_name, unique_constraint, check_constraint, token + + def _parse_table_constraints(self, sql, columns): + # Check constraint parsing is based of SQLite syntax diagram. + # https://www.sqlite.org/syntaxdiagrams.html#table-constraint + statement = sqlparse.parse(sql)[0] + constraints = {} + unnamed_constrains_index = 0 + tokens = (token for token in statement.flatten() if not token.is_whitespace) + # Go to columns and constraint definition + for token in tokens: + if token.match(sqlparse.tokens.Punctuation, "("): + break + # Parse columns and constraint definition + while True: + ( + constraint_name, + unique, + check, + end_token, + ) = self._parse_column_or_constraint_definition(tokens, columns) + if unique: + if constraint_name: + constraints[constraint_name] = unique + else: + unnamed_constrains_index += 1 + constraints[ + "__unnamed_constraint_%s__" % unnamed_constrains_index + ] = unique + if check: + if constraint_name: + constraints[constraint_name] = check + else: + unnamed_constrains_index += 1 + constraints[ + "__unnamed_constraint_%s__" % unnamed_constrains_index + ] = check + if end_token.match(sqlparse.tokens.Punctuation, ")"): + break + return constraints + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Find inline check constraints. + try: + table_schema = cursor.execute( + "SELECT sql FROM sqlite_master WHERE type='table' and name=%s" + % (self.connection.ops.quote_name(table_name),) + ).fetchone()[0] + except TypeError: + # table_name is a view. + pass + else: + columns = { + info.name for info in self.get_table_description(cursor, table_name) + } + constraints.update(self._parse_table_constraints(table_schema, columns)) + + # Get the index info + cursor.execute( + "PRAGMA index_list(%s)" % self.connection.ops.quote_name(table_name) + ) + for row in cursor.fetchall(): + # SQLite 3.8.9+ has 5 columns, however older versions only give 3 + # columns. Discard last 2 columns if there. + number, index, unique = row[:3] + cursor.execute( + "SELECT sql FROM sqlite_master " + "WHERE type='index' AND name=%s" % self.connection.ops.quote_name(index) + ) + # There's at most one row. + (sql,) = cursor.fetchone() or (None,) + # Inline constraints are already detected in + # _parse_table_constraints(). The reasons to avoid fetching inline + # constraints from `PRAGMA index_list` are: + # - Inline constraints can have a different name and information + # than what `PRAGMA index_list` gives. + # - Not all inline constraints may appear in `PRAGMA index_list`. + if not sql: + # An inline constraint + continue + # Get the index info for that index + cursor.execute( + "PRAGMA index_info(%s)" % self.connection.ops.quote_name(index) + ) + for index_rank, column_rank, column in cursor.fetchall(): + if index not in constraints: + constraints[index] = { + "columns": [], + "primary_key": False, + "unique": bool(unique), + "foreign_key": None, + "check": False, + "index": True, + } + constraints[index]["columns"].append(column) + # Add type and column orders for indexes + if constraints[index]["index"]: + # SQLite doesn't support any index type other than b-tree + constraints[index]["type"] = Index.suffix + orders = self._get_index_columns_orders(sql) + if orders is not None: + constraints[index]["orders"] = orders + # Get the PK + pk_column = self.get_primary_key_column(cursor, table_name) + if pk_column: + # SQLite doesn't actually give a name to the PK constraint, + # so we invent one. This is fine, as the SQLite backend never + # deletes PK constraints by name, as you can't delete constraints + # in SQLite; we remake the table with a new PK instead. + constraints["__primary__"] = { + "columns": [pk_column], + "primary_key": True, + "unique": False, # It's not actually a unique constraint. + "foreign_key": None, + "check": False, + "index": False, + } + constraints.update(self._get_foreign_key_constraints(cursor, table_name)) + return constraints + + def _get_index_columns_orders(self, sql): + tokens = sqlparse.parse(sql)[0] + for token in tokens: + if isinstance(token, sqlparse.sql.Parenthesis): + columns = str(token).strip("()").split(", ") + return ["DESC" if info.endswith("DESC") else "ASC" for info in columns] + return None + + def _get_column_collations(self, cursor, table_name): + row = cursor.execute( + """ + SELECT sql + FROM sqlite_master + WHERE type = 'table' AND name = %s + """, + [table_name], + ).fetchone() + if not row: + return {} + + sql = row[0] + columns = str(sqlparse.parse(sql)[0][-1]).strip("()").split(", ") + collations = {} + for column in columns: + tokens = column[1:].split() + column_name = tokens[0].strip('"') + for index, token in enumerate(tokens): + if token == "COLLATE": + collation = tokens[index + 1] + break + else: + collation = None + collations[column_name] = collation + return collations diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/operations.py b/venv/Lib/site-packages/django/db/backends/sqlite3/operations.py new file mode 100644 index 000000000..38265baab --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/operations.py @@ -0,0 +1,416 @@ +import datetime +import decimal +import uuid +from functools import lru_cache +from itertools import chain + +from django.conf import settings +from django.core.exceptions import FieldError +from django.db import DatabaseError, NotSupportedError, models +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.models.expressions import Col +from django.utils import timezone +from django.utils.dateparse import parse_date, parse_datetime, parse_time +from django.utils.functional import cached_property + + +class DatabaseOperations(BaseDatabaseOperations): + cast_char_field_without_max_length = "text" + cast_data_types = { + "DateField": "TEXT", + "DateTimeField": "TEXT", + } + explain_prefix = "EXPLAIN QUERY PLAN" + # List of datatypes to that cannot be extracted with JSON_EXTRACT() on + # SQLite. Use JSON_TYPE() instead. + jsonfield_datatype_values = frozenset(["null", "false", "true"]) + + def bulk_batch_size(self, fields, objs): + """ + SQLite has a compile-time default (SQLITE_LIMIT_VARIABLE_NUMBER) of + 999 variables per query. + + If there's only a single field to insert, the limit is 500 + (SQLITE_MAX_COMPOUND_SELECT). + """ + if len(fields) == 1: + return 500 + elif len(fields) > 1: + return self.connection.features.max_query_params // len(fields) + else: + return len(objs) + + def check_expression_support(self, expression): + bad_fields = (models.DateField, models.DateTimeField, models.TimeField) + bad_aggregates = (models.Sum, models.Avg, models.Variance, models.StdDev) + if isinstance(expression, bad_aggregates): + for expr in expression.get_source_expressions(): + try: + output_field = expr.output_field + except (AttributeError, FieldError): + # Not every subexpression has an output_field which is fine + # to ignore. + pass + else: + if isinstance(output_field, bad_fields): + raise NotSupportedError( + "You cannot use Sum, Avg, StdDev, and Variance " + "aggregations on date/time fields in sqlite3 " + "since date/time is saved as text." + ) + if ( + isinstance(expression, models.Aggregate) + and expression.distinct + and len(expression.source_expressions) > 1 + ): + raise NotSupportedError( + "SQLite doesn't support DISTINCT on aggregate functions " + "accepting multiple arguments." + ) + + def date_extract_sql(self, lookup_type, field_name): + """ + Support EXTRACT with a user-defined function django_date_extract() + that's registered in connect(). Use single quotes because this is a + string and could otherwise cause a collision with a field name. + """ + return "django_date_extract('%s', %s)" % (lookup_type.lower(), field_name) + + def fetch_returned_insert_rows(self, cursor): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table, return the list of returned data. + """ + return cursor.fetchall() + + def format_for_duration_arithmetic(self, sql): + """Do nothing since formatting is handled in the custom function.""" + return sql + + def date_trunc_sql(self, lookup_type, field_name, tzname=None): + return "django_date_trunc('%s', %s, %s, %s)" % ( + lookup_type.lower(), + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def time_trunc_sql(self, lookup_type, field_name, tzname=None): + return "django_time_trunc('%s', %s, %s, %s)" % ( + lookup_type.lower(), + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def _convert_tznames_to_sql(self, tzname): + if tzname and settings.USE_TZ: + return "'%s'" % tzname, "'%s'" % self.connection.timezone_name + return "NULL", "NULL" + + def datetime_cast_date_sql(self, field_name, tzname): + return "django_datetime_cast_date(%s, %s, %s)" % ( + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def datetime_cast_time_sql(self, field_name, tzname): + return "django_datetime_cast_time(%s, %s, %s)" % ( + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + return "django_datetime_extract('%s', %s, %s, %s)" % ( + lookup_type.lower(), + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + return "django_datetime_trunc('%s', %s, %s, %s)" % ( + lookup_type.lower(), + field_name, + *self._convert_tznames_to_sql(tzname), + ) + + def time_extract_sql(self, lookup_type, field_name): + return "django_time_extract('%s', %s)" % (lookup_type.lower(), field_name) + + def pk_default_value(self): + return "NULL" + + def _quote_params_for_last_executed_query(self, params): + """ + Only for last_executed_query! Don't use this to execute SQL queries! + """ + # This function is limited both by SQLITE_LIMIT_VARIABLE_NUMBER (the + # number of parameters, default = 999) and SQLITE_MAX_COLUMN (the + # number of return values, default = 2000). Since Python's sqlite3 + # module doesn't expose the get_limit() C API, assume the default + # limits are in effect and split the work in batches if needed. + BATCH_SIZE = 999 + if len(params) > BATCH_SIZE: + results = () + for index in range(0, len(params), BATCH_SIZE): + chunk = params[index : index + BATCH_SIZE] + results += self._quote_params_for_last_executed_query(chunk) + return results + + sql = "SELECT " + ", ".join(["QUOTE(?)"] * len(params)) + # Bypass Django's wrappers and use the underlying sqlite3 connection + # to avoid logging this query - it would trigger infinite recursion. + cursor = self.connection.connection.cursor() + # Native sqlite3 cursors cannot be used as context managers. + try: + return cursor.execute(sql, params).fetchone() + finally: + cursor.close() + + def last_executed_query(self, cursor, sql, params): + # Python substitutes parameters in Modules/_sqlite/cursor.c with: + # pysqlite_statement_bind_parameters( + # self->statement, parameters, allow_8bit_chars + # ); + # Unfortunately there is no way to reach self->statement from Python, + # so we quote and substitute parameters manually. + if params: + if isinstance(params, (list, tuple)): + params = self._quote_params_for_last_executed_query(params) + else: + values = tuple(params.values()) + values = self._quote_params_for_last_executed_query(values) + params = dict(zip(params, values)) + return sql % params + # For consistency with SQLiteCursorWrapper.execute(), just return sql + # when there are no parameters. See #13648 and #17158. + else: + return sql + + def quote_name(self, name): + if name.startswith('"') and name.endswith('"'): + return name # Quoting once is enough. + return '"%s"' % name + + def no_limit_value(self): + return -1 + + def __references_graph(self, table_name): + query = """ + WITH tables AS ( + SELECT %s name + UNION + SELECT sqlite_master.name + FROM sqlite_master + JOIN tables ON (sql REGEXP %s || tables.name || %s) + ) SELECT name FROM tables; + """ + params = ( + table_name, + r'(?i)\s+references\s+("|\')?', + r'("|\')?\s*\(', + ) + with self.connection.cursor() as cursor: + results = cursor.execute(query, params) + return [row[0] for row in results.fetchall()] + + @cached_property + def _references_graph(self): + # 512 is large enough to fit the ~330 tables (as of this writing) in + # Django's test suite. + return lru_cache(maxsize=512)(self.__references_graph) + + def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False): + if tables and allow_cascade: + # Simulate TRUNCATE CASCADE by recursively collecting the tables + # referencing the tables to be flushed. + tables = set( + chain.from_iterable(self._references_graph(table) for table in tables) + ) + sql = [ + "%s %s %s;" + % ( + style.SQL_KEYWORD("DELETE"), + style.SQL_KEYWORD("FROM"), + style.SQL_FIELD(self.quote_name(table)), + ) + for table in tables + ] + if reset_sequences: + sequences = [{"table": table} for table in tables] + sql.extend(self.sequence_reset_by_name_sql(style, sequences)) + return sql + + def sequence_reset_by_name_sql(self, style, sequences): + if not sequences: + return [] + return [ + "%s %s %s %s = 0 %s %s %s (%s);" + % ( + style.SQL_KEYWORD("UPDATE"), + style.SQL_TABLE(self.quote_name("sqlite_sequence")), + style.SQL_KEYWORD("SET"), + style.SQL_FIELD(self.quote_name("seq")), + style.SQL_KEYWORD("WHERE"), + style.SQL_FIELD(self.quote_name("name")), + style.SQL_KEYWORD("IN"), + ", ".join( + ["'%s'" % sequence_info["table"] for sequence_info in sequences] + ), + ), + ] + + def adapt_datetimefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + # SQLite doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError( + "SQLite backend does not support timezone-aware datetimes when " + "USE_TZ is False." + ) + + return str(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, "resolve_expression"): + return value + + # SQLite doesn't support tz-aware datetimes + if timezone.is_aware(value): + raise ValueError("SQLite backend does not support timezone-aware times.") + + return str(value) + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type == "DateTimeField": + converters.append(self.convert_datetimefield_value) + elif internal_type == "DateField": + converters.append(self.convert_datefield_value) + elif internal_type == "TimeField": + converters.append(self.convert_timefield_value) + elif internal_type == "DecimalField": + converters.append(self.get_decimalfield_converter(expression)) + elif internal_type == "UUIDField": + converters.append(self.convert_uuidfield_value) + elif internal_type == "BooleanField": + converters.append(self.convert_booleanfield_value) + return converters + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.datetime): + value = parse_datetime(value) + if settings.USE_TZ and not timezone.is_aware(value): + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_datefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.date): + value = parse_date(value) + return value + + def convert_timefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.time): + value = parse_time(value) + return value + + def get_decimalfield_converter(self, expression): + # SQLite stores only 15 significant digits. Digits coming from + # float inaccuracy must be removed. + create_decimal = decimal.Context(prec=15).create_decimal_from_float + if isinstance(expression, Col): + quantize_value = decimal.Decimal(1).scaleb( + -expression.output_field.decimal_places + ) + + def converter(value, expression, connection): + if value is not None: + return create_decimal(value).quantize( + quantize_value, context=expression.output_field.context + ) + + else: + + def converter(value, expression, connection): + if value is not None: + return create_decimal(value) + + return converter + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + def convert_booleanfield_value(self, value, expression, connection): + return bool(value) if value in (1, 0) else value + + def bulk_insert_sql(self, fields, placeholder_rows): + return " UNION ALL ".join( + "SELECT %s" % ", ".join(row) for row in placeholder_rows + ) + + def combine_expression(self, connector, sub_expressions): + # SQLite doesn't have a ^ operator, so use the user-defined POWER + # function that's registered in connect(). + if connector == "^": + return "POWER(%s)" % ",".join(sub_expressions) + elif connector == "#": + return "BITXOR(%s)" % ",".join(sub_expressions) + return super().combine_expression(connector, sub_expressions) + + def combine_duration_expression(self, connector, sub_expressions): + if connector not in ["+", "-", "*", "/"]: + raise DatabaseError("Invalid connector for timedelta: %s." % connector) + fn_params = ["'%s'" % connector] + sub_expressions + if len(fn_params) > 3: + raise ValueError("Too many params for timedelta operations.") + return "django_format_dtdelta(%s)" % ", ".join(fn_params) + + def integer_field_range(self, internal_type): + # SQLite doesn't enforce any integer constraints + return (None, None) + + def subtract_temporals(self, internal_type, lhs, rhs): + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + params = (*lhs_params, *rhs_params) + if internal_type == "TimeField": + return "django_time_diff(%s, %s)" % (lhs_sql, rhs_sql), params + return "django_timestamp_diff(%s, %s)" % (lhs_sql, rhs_sql), params + + def insert_statement(self, ignore_conflicts=False): + return ( + "INSERT OR IGNORE INTO" + if ignore_conflicts + else super().insert_statement(ignore_conflicts) + ) + + def return_insert_columns(self, fields): + # SQLite < 3.35 doesn't support an INSERT...RETURNING statement. + if not fields: + return "", () + columns = [ + "%s.%s" + % ( + self.quote_name(field.model._meta.db_table), + self.quote_name(field.column), + ) + for field in fields + ] + return "RETURNING %s" % ", ".join(columns), () diff --git a/venv/Lib/site-packages/django/db/backends/sqlite3/schema.py b/venv/Lib/site-packages/django/db/backends/sqlite3/schema.py new file mode 100644 index 000000000..072e53f6f --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/sqlite3/schema.py @@ -0,0 +1,531 @@ +import copy +from decimal import Decimal + +from django.apps.registry import Apps +from django.db import NotSupportedError +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.backends.ddl_references import Statement +from django.db.backends.utils import strip_quotes +from django.db.models import UniqueConstraint +from django.db.transaction import atomic + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_delete_table = "DROP TABLE %(table)s" + sql_create_fk = None + sql_create_inline_fk = ( + "REFERENCES %(to_table)s (%(to_column)s) DEFERRABLE INITIALLY DEFERRED" + ) + sql_create_unique = "CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)" + sql_delete_unique = "DROP INDEX %(name)s" + + def __enter__(self): + # Some SQLite schema alterations need foreign key constraints to be + # disabled. Enforce it here for the duration of the schema edition. + if not self.connection.disable_constraint_checking(): + raise NotSupportedError( + "SQLite schema editor cannot be used while foreign key " + "constraint checks are enabled. Make sure to disable them " + "before entering a transaction.atomic() context because " + "SQLite does not support disabling them in the middle of " + "a multi-statement transaction." + ) + return super().__enter__() + + def __exit__(self, exc_type, exc_value, traceback): + self.connection.check_constraints() + super().__exit__(exc_type, exc_value, traceback) + self.connection.enable_constraint_checking() + + def quote_value(self, value): + # The backend "mostly works" without this function and there are use + # cases for compiling Python without the sqlite3 libraries (e.g. + # security hardening). + try: + import sqlite3 + + value = sqlite3.adapt(value) + except ImportError: + pass + except sqlite3.ProgrammingError: + pass + # Manual emulation of SQLite parameter quoting + if isinstance(value, bool): + return str(int(value)) + elif isinstance(value, (Decimal, float, int)): + return str(value) + elif isinstance(value, str): + return "'%s'" % value.replace("'", "''") + elif value is None: + return "NULL" + elif isinstance(value, (bytes, bytearray, memoryview)): + # Bytes are only allowed for BLOB fields, encoded as string + # literals containing hexadecimal data and preceded by a single "X" + # character. + return "X'%s'" % value.hex() + else: + raise ValueError( + "Cannot quote parameter value %r of type %s" % (value, type(value)) + ) + + def _is_referenced_by_fk_constraint( + self, table_name, column_name=None, ignore_self=False + ): + """ + Return whether or not the provided table name is referenced by another + one. If `column_name` is specified, only references pointing to that + column are considered. If `ignore_self` is True, self-referential + constraints are ignored. + """ + with self.connection.cursor() as cursor: + for other_table in self.connection.introspection.get_table_list(cursor): + if ignore_self and other_table.name == table_name: + continue + constraints = ( + self.connection.introspection._get_foreign_key_constraints( + cursor, other_table.name + ) + ) + for constraint in constraints.values(): + constraint_table, constraint_column = constraint["foreign_key"] + if constraint_table == table_name and ( + column_name is None or constraint_column == column_name + ): + return True + return False + + def alter_db_table( + self, model, old_db_table, new_db_table, disable_constraints=True + ): + if ( + not self.connection.features.supports_atomic_references_rename + and disable_constraints + and self._is_referenced_by_fk_constraint(old_db_table) + ): + if self.connection.in_atomic_block: + raise NotSupportedError( + ( + "Renaming the %r table while in a transaction is not " + "supported on SQLite < 3.26 because it would break referential " + "integrity. Try adding `atomic = False` to the Migration class." + ) + % old_db_table + ) + self.connection.enable_constraint_checking() + super().alter_db_table(model, old_db_table, new_db_table) + self.connection.disable_constraint_checking() + else: + super().alter_db_table(model, old_db_table, new_db_table) + + def alter_field(self, model, old_field, new_field, strict=False): + if not self._field_should_be_altered(old_field, new_field): + return + old_field_name = old_field.name + table_name = model._meta.db_table + _, old_column_name = old_field.get_attname_column() + if ( + new_field.name != old_field_name + and not self.connection.features.supports_atomic_references_rename + and self._is_referenced_by_fk_constraint( + table_name, old_column_name, ignore_self=True + ) + ): + if self.connection.in_atomic_block: + raise NotSupportedError( + ( + "Renaming the %r.%r column while in a transaction is not " + "supported on SQLite < 3.26 because it would break referential " + "integrity. Try adding `atomic = False` to the Migration class." + ) + % (model._meta.db_table, old_field_name) + ) + with atomic(self.connection.alias): + super().alter_field(model, old_field, new_field, strict=strict) + # Follow SQLite's documented procedure for performing changes + # that don't affect the on-disk content. + # https://sqlite.org/lang_altertable.html#otheralter + with self.connection.cursor() as cursor: + schema_version = cursor.execute("PRAGMA schema_version").fetchone()[ + 0 + ] + cursor.execute("PRAGMA writable_schema = 1") + references_template = ' REFERENCES "%s" ("%%s") ' % table_name + new_column_name = new_field.get_attname_column()[1] + search = references_template % old_column_name + replacement = references_template % new_column_name + cursor.execute( + "UPDATE sqlite_master SET sql = replace(sql, %s, %s)", + (search, replacement), + ) + cursor.execute("PRAGMA schema_version = %d" % (schema_version + 1)) + cursor.execute("PRAGMA writable_schema = 0") + # The integrity check will raise an exception and rollback + # the transaction if the sqlite_master updates corrupt the + # database. + cursor.execute("PRAGMA integrity_check") + # Perform a VACUUM to refresh the database representation from + # the sqlite_master table. + with self.connection.cursor() as cursor: + cursor.execute("VACUUM") + else: + super().alter_field(model, old_field, new_field, strict=strict) + + def _remake_table( + self, model, create_field=None, delete_field=None, alter_field=None + ): + """ + Shortcut to transform a model from old_model into new_model + + This follows the correct procedure to perform non-rename or column + addition operations based on SQLite's documentation + + https://www.sqlite.org/lang_altertable.html#caution + + The essential steps are: + 1. Create a table with the updated definition called "new__app_model" + 2. Copy the data from the existing "app_model" table to the new table + 3. Drop the "app_model" table + 4. Rename the "new__app_model" table to "app_model" + 5. Restore any index of the previous "app_model" table. + """ + # Self-referential fields must be recreated rather than copied from + # the old model to ensure their remote_field.field_name doesn't refer + # to an altered field. + def is_self_referential(f): + return f.is_relation and f.remote_field.model is model + + # Work out the new fields dict / mapping + body = { + f.name: f.clone() if is_self_referential(f) else f + for f in model._meta.local_concrete_fields + } + # Since mapping might mix column names and default values, + # its values must be already quoted. + mapping = { + f.column: self.quote_name(f.column) + for f in model._meta.local_concrete_fields + } + # This maps field names (not columns) for things like unique_together + rename_mapping = {} + # If any of the new or altered fields is introducing a new PK, + # remove the old one + restore_pk_field = None + if getattr(create_field, "primary_key", False) or ( + alter_field and getattr(alter_field[1], "primary_key", False) + ): + for name, field in list(body.items()): + if field.primary_key: + field.primary_key = False + restore_pk_field = field + if field.auto_created: + del body[name] + del mapping[field.column] + # Add in any created fields + if create_field: + body[create_field.name] = create_field + # Choose a default and insert it into the copy map + if not create_field.many_to_many and create_field.concrete: + mapping[create_field.column] = self.quote_value( + self.effective_default(create_field) + ) + # Add in any altered fields + if alter_field: + old_field, new_field = alter_field + body.pop(old_field.name, None) + mapping.pop(old_field.column, None) + body[new_field.name] = new_field + if old_field.null and not new_field.null: + case_sql = "coalesce(%(col)s, %(default)s)" % { + "col": self.quote_name(old_field.column), + "default": self.quote_value(self.effective_default(new_field)), + } + mapping[new_field.column] = case_sql + else: + mapping[new_field.column] = self.quote_name(old_field.column) + rename_mapping[old_field.name] = new_field.name + # Remove any deleted fields + if delete_field: + del body[delete_field.name] + del mapping[delete_field.column] + # Remove any implicit M2M tables + if ( + delete_field.many_to_many + and delete_field.remote_field.through._meta.auto_created + ): + return self.delete_model(delete_field.remote_field.through) + # Work inside a new app registry + apps = Apps() + + # Work out the new value of unique_together, taking renames into + # account + unique_together = [ + [rename_mapping.get(n, n) for n in unique] + for unique in model._meta.unique_together + ] + + # Work out the new value for index_together, taking renames into + # account + index_together = [ + [rename_mapping.get(n, n) for n in index] + for index in model._meta.index_together + ] + + indexes = model._meta.indexes + if delete_field: + indexes = [ + index for index in indexes if delete_field.name not in index.fields + ] + + constraints = list(model._meta.constraints) + + # Provide isolated instances of the fields to the new model body so + # that the existing model's internals aren't interfered with when + # the dummy model is constructed. + body_copy = copy.deepcopy(body) + + # Construct a new model with the new fields to allow self referential + # primary key to resolve to. This model won't ever be materialized as a + # table and solely exists for foreign key reference resolution purposes. + # This wouldn't be required if the schema editor was operating on model + # states instead of rendered models. + meta_contents = { + "app_label": model._meta.app_label, + "db_table": model._meta.db_table, + "unique_together": unique_together, + "index_together": index_together, + "indexes": indexes, + "constraints": constraints, + "apps": apps, + } + meta = type("Meta", (), meta_contents) + body_copy["Meta"] = meta + body_copy["__module__"] = model.__module__ + type(model._meta.object_name, model.__bases__, body_copy) + + # Construct a model with a renamed table name. + body_copy = copy.deepcopy(body) + meta_contents = { + "app_label": model._meta.app_label, + "db_table": "new__%s" % strip_quotes(model._meta.db_table), + "unique_together": unique_together, + "index_together": index_together, + "indexes": indexes, + "constraints": constraints, + "apps": apps, + } + meta = type("Meta", (), meta_contents) + body_copy["Meta"] = meta + body_copy["__module__"] = model.__module__ + new_model = type("New%s" % model._meta.object_name, model.__bases__, body_copy) + + # Create a new table with the updated schema. + self.create_model(new_model) + + # Copy data from the old table into the new table + self.execute( + "INSERT INTO %s (%s) SELECT %s FROM %s" + % ( + self.quote_name(new_model._meta.db_table), + ", ".join(self.quote_name(x) for x in mapping), + ", ".join(mapping.values()), + self.quote_name(model._meta.db_table), + ) + ) + + # Delete the old table to make way for the new + self.delete_model(model, handle_autom2m=False) + + # Rename the new table to take way for the old + self.alter_db_table( + new_model, + new_model._meta.db_table, + model._meta.db_table, + disable_constraints=False, + ) + + # Run deferred SQL on correct table + for sql in self.deferred_sql: + self.execute(sql) + self.deferred_sql = [] + # Fix any PK-removed field + if restore_pk_field: + restore_pk_field.primary_key = True + + def delete_model(self, model, handle_autom2m=True): + if handle_autom2m: + super().delete_model(model) + else: + # Delete the table (and only that) + self.execute( + self.sql_delete_table + % { + "table": self.quote_name(model._meta.db_table), + } + ) + # Remove all deferred statements referencing the deleted table. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_table( + model._meta.db_table + ): + self.deferred_sql.remove(sql) + + def add_field(self, model, field): + """ + Create a field on a model. Usually involves adding a column, but may + involve adding a table instead (for M2M fields). + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.create_model(field.remote_field.through) + self._remake_table(model, create_field=field) + + def remove_field(self, model, field): + """ + Remove a field from a model. Usually involves deleting a column, + but for M2Ms may involve deleting a table. + """ + # M2M fields are a special case + if field.many_to_many: + # For implicit M2M tables, delete the auto-created table + if field.remote_field.through._meta.auto_created: + self.delete_model(field.remote_field.through) + # For explicit "through" M2M fields, do nothing + # For everything else, remake. + else: + # It might not actually have a column behind it + if field.db_parameters(connection=self.connection)["type"] is None: + return + self._remake_table(model, delete_field=field) + + def _alter_field( + self, + model, + old_field, + new_field, + old_type, + new_type, + old_db_params, + new_db_params, + strict=False, + ): + """Perform a "physical" (non-ManyToMany) field update.""" + # Use "ALTER TABLE ... RENAME COLUMN" if only the column name + # changed and there aren't any constraints. + if ( + self.connection.features.can_alter_table_rename_column + and old_field.column != new_field.column + and self.column_sql(model, old_field) == self.column_sql(model, new_field) + and not ( + old_field.remote_field + and old_field.db_constraint + or new_field.remote_field + and new_field.db_constraint + ) + ): + return self.execute( + self._rename_field_sql( + model._meta.db_table, old_field, new_field, new_type + ) + ) + # Alter by remaking table + self._remake_table(model, alter_field=(old_field, new_field)) + # Rebuild tables with FKs pointing to this field. + if new_field.unique and old_type != new_type: + related_models = set() + opts = new_field.model._meta + for remote_field in opts.related_objects: + # Ignore self-relationship since the table was already rebuilt. + if remote_field.related_model == model: + continue + if not remote_field.many_to_many: + if remote_field.field_name == new_field.name: + related_models.add(remote_field.related_model) + elif new_field.primary_key and remote_field.through._meta.auto_created: + related_models.add(remote_field.through) + if new_field.primary_key: + for many_to_many in opts.many_to_many: + # Ignore self-relationship since the table was already rebuilt. + if many_to_many.related_model == model: + continue + if many_to_many.remote_field.through._meta.auto_created: + related_models.add(many_to_many.remote_field.through) + for related_model in related_models: + self._remake_table(related_model) + + def _alter_many_to_many(self, model, old_field, new_field, strict): + """Alter M2Ms to repoint their to= endpoints.""" + if ( + old_field.remote_field.through._meta.db_table + == new_field.remote_field.through._meta.db_table + ): + # The field name didn't change, but some options did, so we have to + # propagate this altering. + self._remake_table( + old_field.remote_field.through, + alter_field=( + # The field that points to the target model is needed, so + # we can tell alter_field to change it - this is + # m2m_reverse_field_name() (as opposed to m2m_field_name(), + # which points to our model). + old_field.remote_field.through._meta.get_field( + old_field.m2m_reverse_field_name() + ), + new_field.remote_field.through._meta.get_field( + new_field.m2m_reverse_field_name() + ), + ), + ) + return + + # Make a new through table + self.create_model(new_field.remote_field.through) + # Copy the data across + self.execute( + "INSERT INTO %s (%s) SELECT %s FROM %s" + % ( + self.quote_name(new_field.remote_field.through._meta.db_table), + ", ".join( + [ + "id", + new_field.m2m_column_name(), + new_field.m2m_reverse_name(), + ] + ), + ", ".join( + [ + "id", + old_field.m2m_column_name(), + old_field.m2m_reverse_name(), + ] + ), + self.quote_name(old_field.remote_field.through._meta.db_table), + ) + ) + # Delete the old through table + self.delete_model(old_field.remote_field.through) + + def add_constraint(self, model, constraint): + if isinstance(constraint, UniqueConstraint) and ( + constraint.condition + or constraint.contains_expressions + or constraint.include + or constraint.deferrable + ): + super().add_constraint(model, constraint) + else: + self._remake_table(model) + + def remove_constraint(self, model, constraint): + if isinstance(constraint, UniqueConstraint) and ( + constraint.condition + or constraint.contains_expressions + or constraint.include + or constraint.deferrable + ): + super().remove_constraint(model, constraint) + else: + self._remake_table(model) + + def _collate_sql(self, collation): + return "COLLATE " + collation diff --git a/venv/Lib/site-packages/django/db/backends/utils.py b/venv/Lib/site-packages/django/db/backends/utils.py new file mode 100644 index 000000000..26d07d663 --- /dev/null +++ b/venv/Lib/site-packages/django/db/backends/utils.py @@ -0,0 +1,292 @@ +import datetime +import decimal +import functools +import hashlib +import logging +import time +from contextlib import contextmanager + +from django.db import NotSupportedError +from django.utils.dateparse import parse_time + +logger = logging.getLogger("django.db.backends") + + +class CursorWrapper: + def __init__(self, cursor, db): + self.cursor = cursor + self.db = db + + WRAP_ERROR_ATTRS = frozenset(["fetchone", "fetchmany", "fetchall", "nextset"]) + + def __getattr__(self, attr): + cursor_attr = getattr(self.cursor, attr) + if attr in CursorWrapper.WRAP_ERROR_ATTRS: + return self.db.wrap_database_errors(cursor_attr) + else: + return cursor_attr + + def __iter__(self): + with self.db.wrap_database_errors: + yield from self.cursor + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + # Close instead of passing through to avoid backend-specific behavior + # (#17671). Catch errors liberally because errors in cleanup code + # aren't useful. + try: + self.close() + except self.db.Database.Error: + pass + + # The following methods cannot be implemented in __getattr__, because the + # code must run when the method is invoked, not just when it is accessed. + + def callproc(self, procname, params=None, kparams=None): + # Keyword parameters for callproc aren't supported in PEP 249, but the + # database driver may support them (e.g. cx_Oracle). + if kparams is not None and not self.db.features.supports_callproc_kwargs: + raise NotSupportedError( + "Keyword parameters for callproc are not supported on this " + "database backend." + ) + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + if params is None and kparams is None: + return self.cursor.callproc(procname) + elif kparams is None: + return self.cursor.callproc(procname, params) + else: + params = params or () + return self.cursor.callproc(procname, params, kparams) + + def execute(self, sql, params=None): + return self._execute_with_wrappers( + sql, params, many=False, executor=self._execute + ) + + def executemany(self, sql, param_list): + return self._execute_with_wrappers( + sql, param_list, many=True, executor=self._executemany + ) + + def _execute_with_wrappers(self, sql, params, many, executor): + context = {"connection": self.db, "cursor": self} + for wrapper in reversed(self.db.execute_wrappers): + executor = functools.partial(wrapper, executor) + return executor(sql, params, many, context) + + def _execute(self, sql, params, *ignored_wrapper_args): + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + if params is None: + # params default might be backend specific. + return self.cursor.execute(sql) + else: + return self.cursor.execute(sql, params) + + def _executemany(self, sql, param_list, *ignored_wrapper_args): + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + return self.cursor.executemany(sql, param_list) + + +class CursorDebugWrapper(CursorWrapper): + + # XXX callproc isn't instrumented at this time. + + def execute(self, sql, params=None): + with self.debug_sql(sql, params, use_last_executed_query=True): + return super().execute(sql, params) + + def executemany(self, sql, param_list): + with self.debug_sql(sql, param_list, many=True): + return super().executemany(sql, param_list) + + @contextmanager + def debug_sql( + self, sql=None, params=None, use_last_executed_query=False, many=False + ): + start = time.monotonic() + try: + yield + finally: + stop = time.monotonic() + duration = stop - start + if use_last_executed_query: + sql = self.db.ops.last_executed_query(self.cursor, sql, params) + try: + times = len(params) if many else "" + except TypeError: + # params could be an iterator. + times = "?" + self.db.queries_log.append( + { + "sql": "%s times: %s" % (times, sql) if many else sql, + "time": "%.3f" % duration, + } + ) + logger.debug( + "(%.3f) %s; args=%s; alias=%s", + duration, + sql, + params, + self.db.alias, + extra={ + "duration": duration, + "sql": sql, + "params": params, + "alias": self.db.alias, + }, + ) + + +def split_tzname_delta(tzname): + """ + Split a time zone name into a 3-tuple of (name, sign, offset). + """ + for sign in ["+", "-"]: + if sign in tzname: + name, offset = tzname.rsplit(sign, 1) + if offset and parse_time(offset): + return name, sign, offset + return tzname, None, None + + +############################################### +# Converters from database (string) to Python # +############################################### + + +def typecast_date(s): + return ( + datetime.date(*map(int, s.split("-"))) if s else None + ) # return None if s is null + + +def typecast_time(s): # does NOT store time zone information + if not s: + return None + hour, minutes, seconds = s.split(":") + if "." in seconds: # check whether seconds have a fractional part + seconds, microseconds = seconds.split(".") + else: + microseconds = "0" + return datetime.time( + int(hour), int(minutes), int(seconds), int((microseconds + "000000")[:6]) + ) + + +def typecast_timestamp(s): # does NOT store time zone information + # "2005-07-29 15:48:00.590358-05" + # "2005-07-29 09:56:00-05" + if not s: + return None + if " " not in s: + return typecast_date(s) + d, t = s.split() + # Remove timezone information. + if "-" in t: + t, _ = t.split("-", 1) + elif "+" in t: + t, _ = t.split("+", 1) + dates = d.split("-") + times = t.split(":") + seconds = times[2] + if "." in seconds: # check whether seconds have a fractional part + seconds, microseconds = seconds.split(".") + else: + microseconds = "0" + return datetime.datetime( + int(dates[0]), + int(dates[1]), + int(dates[2]), + int(times[0]), + int(times[1]), + int(seconds), + int((microseconds + "000000")[:6]), + ) + + +############################################### +# Converters from Python to database (string) # +############################################### + + +def split_identifier(identifier): + """ + Split an SQL identifier into a two element tuple of (namespace, name). + + The identifier could be a table, column, or sequence name might be prefixed + by a namespace. + """ + try: + namespace, name = identifier.split('"."') + except ValueError: + namespace, name = "", identifier + return namespace.strip('"'), name.strip('"') + + +def truncate_name(identifier, length=None, hash_len=4): + """ + Shorten an SQL identifier to a repeatable mangled version with the given + length. + + If a quote stripped name contains a namespace, e.g. USERNAME"."TABLE, + truncate the table portion only. + """ + namespace, name = split_identifier(identifier) + + if length is None or len(name) <= length: + return identifier + + digest = names_digest(name, length=hash_len) + return "%s%s%s" % ( + '%s"."' % namespace if namespace else "", + name[: length - hash_len], + digest, + ) + + +def names_digest(*args, length): + """ + Generate a 32-bit digest of a set of arguments that can be used to shorten + identifying names. + """ + h = hashlib.md5() + for arg in args: + h.update(arg.encode()) + return h.hexdigest()[:length] + + +def format_number(value, max_digits, decimal_places): + """ + Format a number into a string with the requisite number of digits and + decimal places. + """ + if value is None: + return None + context = decimal.getcontext().copy() + if max_digits is not None: + context.prec = max_digits + if decimal_places is not None: + value = value.quantize( + decimal.Decimal(1).scaleb(-decimal_places), context=context + ) + else: + context.traps[decimal.Rounded] = 1 + value = context.create_decimal(value) + return "{:f}".format(value) + + +def strip_quotes(table_name): + """ + Strip quotes off of quoted table names to make them safe for use in index + names, sequence names, etc. For example '"USER"."TABLE"' (an Oracle naming + scheme) becomes 'USER"."TABLE'. + """ + has_quotes = table_name.startswith('"') and table_name.endswith('"') + return table_name[1:-1] if has_quotes else table_name diff --git a/venv/Lib/site-packages/django/db/migrations/__init__.py b/venv/Lib/site-packages/django/db/migrations/__init__.py new file mode 100644 index 000000000..e7f3d2d76 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/__init__.py @@ -0,0 +1,2 @@ +from .migration import Migration, swappable_dependency # NOQA +from .operations import * # NOQA diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f7dcf91fd79bcec4b79ce5536907438e66d80cc GIT binary patch literal 295 zcmYk1!Ait15QdYsh`YGp!J{uwVeMT+1VuflEV_Fs!H_mX$=W6%ldkL|`APv#o_qi= zo=gzMf%%4i_=le{v)Poy`h0q8M4azQ{I4vE^VoP8A&I0t8E8$1tj=iCS)VV7%pXZv ze9&kqvoN_+ofBRe9S-nCSSy+yxC9GYf^N4Z4fN=~Eb7VdYji2bM6E80kSOT1o7rVfl z1t}nlST<#wZYoE%(|nHYxImM(pYk>Bm!oM8r>&c$wPPo4lO}a1aho)8zBoyn)=X;a zBK!OO-(0%{B-+VW;M+HE-n{qbUH|+4-n0h>atZwX&3nIoVrI-p{4sChe@WaN#LxXl z2%LmtG!tcgHOdC=&8E4SEGG@7C7ae_s+^Lz)l4sD${C5Ln)YJ0oRxUGnOn@4^AgWA z3yTBg0g2nq;^JU=P~zF<(Bg1;SmL?n$l_>ubaAXawz#9bL(=li@x_Vqgps&E;S`*K z=Mv7qS+hLp7>_5Wir+*#6EjnWmzq0St+x=d-CCzpZ!Nfprx)8!t;txfy;M`xPQBgY zUG`XgLEqtK_)xP`Q^%O|k)ddiA@xO3VK4l~lwFD=kY&u3c>AcTLI@WVW*>b8*%1I-Zax#wnT%w$I zvQ7@yjB~=tI|V$kodKtal&mx84B?uq<(*+?A zgU(K87p_CjoU_Nd0y&1Az0Q?L8F5O^Rk)5iS3B3>I_6yKT!-rpXP8B<71t}B zw>fXewdCC8+>Ps1&OOe(xL)lXbPnNq4f^p8=dkqSTIYy!AJVRKjym__y3cvQc@Wp@ zop(A9;kw^>*g1yllr!Tzg6j>=qt3f)ZVktV_j&OAxTIpapbuja7RUI%BiChVPv(;0z zQnj>Ht*cUdzVxVSb8S4{sdj2^soHW%bM3{Ys;ZSbCu@tPPP^pRYNazLs~skk=IhGs zl+LtQnvT@gs?{(9ZLD-=U1Z($4z8WKlak-9&9zbIewOv)EAC3Q*<3B1s7a}lHK}Mx zx8r)ZG`FHut<@=EVRmX$(>ZxO)9$cE(u%rUYE?TcN@~#%g{HS#C6ub8;eJ)YbDAl}_no^)&lZEiDER&C#eLJNqpFhF41+PHm~ya-_L3 zmQ&NEL!}kBrgRhLt8+CB-zuhN9%(MBZPsq8E-fKXbwLkReV$`{rtY4sxd)^T@|wBo z>6(lW0-1x=Qmc&-Xr8IAx)|-!QrmUwfc0rTqH|UZycx#|NgT${okq|#x`|4nYa%qd z$)#M!Jexo~=@^dr9G*6;BY;_?q?`oSU2%iJf;?7h% zkYXaml&2}oy0P{ZSxdw#$3XZ9foc^C4d6rw03KRL`oftwd zB@fGm_%p8n?034RI+D{XhO4i_Zh0C1C4IB2IH}j;=aNk-q>F}yskMx?E4H3mzm_?! z*x)aiSpuS)255EwvmN8Csfr&-%o_s5cGn;bKdzsdc(%7=%2U#F|7rL}M>tbD4GMviv?Gi1&sHt@WW-8B4IZqt}g`tQjj*F&8`*9dC{Bc&eevK_^);bd_4 z0n|RYnOHZa)kBS8q%Cw!$9A$GGIt`qYaUOoC)X{k%cQg^2drdw1t-aUUfP%n+Q_%_ z4O4}+FNV|oSPi7ct)H%y98xK)mz6nkQzepsDo9mi4xS4g%0D8V@d|Xhjth5&mZ^)_Dmax>rZog=%A(Zk`r>o7C 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 UBa~QUs5G2KZ?Qb{TUajs2RG3Q<^TWy literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/executor.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/executor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8ca24ee907177d31623ba76789c8842f5b4ebc3 GIT binary patch literal 11157 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/graph.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/graph.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44410487c3d5d7230e78173b5e12cb8969ddea8d GIT binary patch literal 12634 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 BJ|X}B literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/loader.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/loader.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22db02fc11baf312ff7b7f67744da65d2ab4fedc GIT binary patch literal 11140 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 LKWA9w1@r#_f%w%v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/migration.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/migration.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aebfeaf5160cca64735ad83ec59146f81cb42481 GIT binary patch literal 6419 zcmdT|&2JmW72j_zDN2?d$BEsvnFetax)z%`tv1P|?LZy~kBZSh$k~5T6T5_qG zrBw+OQdBO`oQeYNDF`4R{eSe@_S^+>X-+-|?ZH6d{@yIPBo+J8TbG#O%ih<|fzxup2ciu3*pw9H;pz}70YM|l?4R?|bT#C`O9Q987nJ}>jieWO|CbE`(J`Uo_Qnwh<{A=025ZOAZQe-YshUvO<4g@&`EpUp zLdC+-;%%%fI4j22+3hr6XfwPgSkgn0teZ%oDJ31OEWmOcC%aK^gN11-qt+l5>T=FB zTVhFHW(Hv^I=Pji@xY_ z(Q8Lod}^U|&?jkO$=AbvKj??)=EaF{wQ1GHG~}Qcv;;ID{$~oJABWh>^!!2*dNGv? zrjeuq!V4k(8D+C}(uI%*T1drAXb4J+dTF8s{$3JtA)yM*_$?XsH%W_Al7zZQA1xtz zcpart7)Sfi>~5595{U>#*6*`8Y>8OYCKsz~a*ee%Im`H=HcZvHj-uX0H8h7tU<@tP zW{P^t-f|A#+*mapnvI&DIka$ACe>(WGKVZAD+htL&mhPu z6J2N3X)R}!iM}#ljwD~RGe?QIBYp5H%cve2@+AHqcdlPv|Aj)7Sidt+DqO#jv#>$y2z;;l;)?M#~W z{$Az>0f{^azK2y+6_sat=7P0gE|{mx{ZkX~8V_uffX5HDN$6VOub`1a36S#l9CGB<(prItrtouap15Qv>1xQe!- z=wGoaruC#^S^wEzoaUAWwJGL~A8L*gtutpux_o`gwKr zp`{h0*?VYe&W^JLAwr`v2$n(hOOnarG129ppUIAV0dpQ=c~`F~Uqn})rHYJUYV)Na zP$?E7+m>HLwSThUw?6vzl~w2z)CxL{Mw)M%wrDL3>Szqj1AAyme`p>V4-B-Sgd4_3i|%_dM*;5fp9<7P67$ucjel69pV8(t+&ZOHb_T;6Dx@lK}dfDyU5SlwwO9 zA>1HdMQI&`1^f;N2%Q#*j5eZP7_+2Be#Q{}v0Q7fpu+T^FY5eG|31+ z&+q>PeLwjLwYf7e4?NH>D>3w-cOUJ_*4&}_hm$n=sH*2$Ll^TM)3^&z=NOK02(Z`l z-!xRP3ohyRAqrOg$_(NJX6J?H5Ht#1k1TIS9WXnsk6x-F#q9Cemk|(%J_iALpzMMa znM=r2dsB47K=3HVI1Q$NIbeD`OhXN`^f=h(p0>vB7?2foA~N`~)xcVD(vA=qY>eH> zU4jf5HUl#y9!KntjS~xtPA38q>7^Jo0JduZ(~MD4u~K0pfOtfkp2ybG(&KlQme~8Z zZ{4}Jc6+748Y_3%2g`SEuH1Qlm93zazg~Oy+8VoltyJ5gTO?Xu9t>@u4-j=COr|{Jwd@Mf#erpch zBU^i3{$Cn;M-Jw=LpS%pBad4cUmCidJTRAr4!pm;ZXb9D{y`Zr;6r#}=?M9V_HGZ} zxjcH~jQpLxx}aQ{iUG4TKHRwk{^t5^tUZ^ssm(ojdj*uL>XTtbev;0iJ-@Xu@^}xtTYj5iVWOC+_zr$q| z&YzwFTGiP_x|^^*&gn_&18;t_uG2dJcOkooNp#X_%N}KGI0`pYpma((bU5k|1Z4w+ zzL@EcMPLB6umduB7&1j92-7K4#EAexViC|-2%6)AjZY%XTRBg~Y~&UgI6kov{br=W z27r_sdeNNmX@;a|lgKDD!L~#n`z=22zq(TJcb;++L?Z_NdI`nEak4I99)^64s@JKi zp+d}B)G@1BnHoq~=U7b2JfK}6Q+a{DeVeL_R4q|O@k$adl9#A@0~ONnab#)%&TFmK z<|d&@zDXnBqLCiLA+ihkD!rkoB)>zieTtG4nVJ=XAbDGUm%blIm4luRCBMfvoi;fO z2t1Z&SqMMQ6W{fb4V*S99DOxlAzOHMu$n@rqcvvGDdGMCo&E_O3RBYMa7S)&`@RO} zH-J$OOk8nLA1Dz$3)t~xWNFr6p4FL$=C&!T=2 zwQ*9@4N8$)caV>hbrkGrrT{p?dr8FEFR!nX+jruq4Zn{%te+@-?KH9ctTf8FXY@j_ zo@{azMN!tZ0Zn}59+*htj6YgCl*W+_)y(D#g%9U9UmY24P@-D1GOPYZW+naO)>gSf zSu?H<`d9x-^l7nE#{PxLxu$XKmv$AoxY#gfmEgec<>7 zxF!-|)3JaOW-$Hq^qRR=GjGg!a!Ox3rjqI(7T1FGJkY9evnBHPm0KcyGy6;!_An9eE3 zaa{aLj^kT?*)RFFZ&&QfLgixhiXPv_(3yv1{x*uD+MVx(I_dJlhNH}v%+Yll6S3LtxZWbNYaYMd1UmWND@>1jg6ozEWI z-K6_0^8JugSP)ak9o>rNPB@b%lZh4akVKjqN66GE4Wd{!v;&m!6^fm?n$-+?BHIbF zk`gIld?c54J64%{FN_C5{uG4rgJU9nE%@8`@CAyZI82e93};q8xKz-z8^}hl6P+7W zEmL)qDkAYzrQX7a&rvjOQfk$e^lrv?=|H8kk|-;(9$X(`$K2%B1H}Kc26sBR4LGC= zX?Op%wLHNe?UL!;<-stVT&eEWGqWy9irQ`AsDTD5L4bQD;vjPs68^Mi%J*o{tW2`g zg+7CcE+1i_4hrWixq^11R%xDl>Rs;uU`Xiz(0qO}AVq9fp-w#V+@vCY-4=aHM3mHE pfixiXtq!rM7n$O$@RiKJk~`~F5}hJ}sVYia;@8S0W)0XD>z*S~XqenNE7D z+f~(eZ1qSi2Eo2Xxa0|VmzKEVDldT0?hW6m_Kae=S_nlLdU%otGcz*iq zhw1m5jQvQH^G^$t_b}X5ygp=#DgGtKNi=3EdccOQ1nU=`2($MvoWM)7F;{FHDL!tg zNVUFXORw+d zN@s!$kw(0))SXmkN+g&}*AA{=Wq>jI@VqRbApC2v9i8bF_-}$WP`RI{W;P0wq=n?H zo;E&c+{SP_cvZ+($!yOf$0z&?u38m~d7oA6Syb^V`Zii(rOh65)%hEXuvfJz{v@(* zRILZBYAyNx=CCWjf|8((GI>{~=3)}H@%9LDLlj5izH|=pM5ta!AC{e$1_|Fp)8X*$S)hh`6%Ee#Tp9c>9!YJv0-w_Ji86J=f?+I4@JizHu6QzMbwwf-|s zh($V^drF|wg#_V{!08bt2VhMm=A}^F@I>@He*(>3 zXqn8{IH^%73Mv%EssIA}9E^7Yp*)mUg`5#wNCCp>bf^X_*)#8`6v*sQ9>LlGi52l;^MWZ& zrIVxgj<3n0h%-4w`&r>hAllJ$lsnsfj(&??UiWv83jKk#xgB4MQ*^(C` zNv-oY?%VvaPW2%^?!Hq&DPvlIyiFz!}EZyFB8X{0i^!HvXdj9slXY3um;FywDfP_zeuSG3I{8YsQu>&nkYxci1C0 ziI(kUNAYEs)~dFO{>W78tLPOL_8(z?<3GIWJmcT+Zy0)J&qr0yw@xCPug+KPY6DV` zB)Mh3>e^dX>sh<%f6F;KDZYC2WnTB4ui4jpFABG3uj=nW%L%s+&(565nGJk*s}4y* z_RnDl76x72m6eT#2q$QuZ}*&28_VwgAI_xryVTK#z2j^D425zUr=}^PaTKFnOX0bf z5QA0^{RHS>yn_*b2K*aW$D>P2Uh!wF35H@N`xn&iSo?D#LgliP;7qnlZt$jsduts$P1 zy?5|aq^}K#Nj=1t?r(>P1Rj@^;55ns#`M4>Mj_M$#7u1IBkh4!QAl`TuSk| z(%|X1zn<0|OE*T%AKN}8#)H(vQ|%A6HjRTX5e|82DTdcE+z79B^b+{{TC~Xr{2IOn zVD&XVXkp%J^H(tgzoY2$0Y;l2zxjV7ac|hIdvR>gCgZps#4);LnbG%V9Mi9%)18et zR(TS~mdYyF)YwVoah4KG1fbz4V?Ea9y}{;dVHK$j|9?xY?%izE-U_mmiL2}v&d3T9 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/questioner.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/questioner.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74be1feeac512095de768d0a51a6ba5e4cac9ab0 GIT binary patch literal 8656 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/serializer.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/serializer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdb180435d84da3abbfaec2a57e86e709a3db0b9 GIT binary patch literal 14136 zcmb7LTW}o5b)DBfu>h6;2!an$ONt=56uG3{6iv~TKv7X5L5xVr@tDebu`>X7xeusk zmJ-*CL@|_d9%aXlD=sIMN|ELA2R~9Nr~Hws4(o~+CP#Q{8=C_;_*H-+3|5>M9l*ALhS zbnP|GNjd3{H7C7p*pGo4b26YZ?qlnweGv4xGXZ)+=*K}%I$6+Jp>v>jIa8pgggyj% z+L-}8BlKa=yPa9kvqC=sdXF;)dQRvgp!YiaK<^WJ9`t_a0O$ik9|irGa}e}F_i^;+ z80g2H9O#^T5cF}-hn&Np4@>zx=qH>bppOWB0`$Cd6!cM{p9Fo(IS%@`dj#K~1f6$I zfIcDgDbP2PdQJ6ep=|KKtJO=3;J2<-_xL< zbDjtNywJ~pe!)2l`mB_H7W9kGInd`M|2fc~a?XQ3FZs`de#yB2`hw6efc~^|5%fjO z)>-Fe=ar8&`$b2;s^u5HNBLaL>%p$8uJ2bGE8g4gva8%i*+pW!-gMlWhgj;ZRace# zO0$tSg6V~~-n{bq8?Rm}zWwTJul`c;+Gnr48jQW|uDBn*wN!P>KFXxuD79~gRFJr$ zn)Qmu8qJnp#w)wx`bDQ%_KLS$<)PLx`!V=~hKR1*KY)m<*}9`aM|8(P-%ZDKEW9lz zhB3s0iC0RVd(~ByQmxW%q#xx$EzE=-~CYTb@_CeyLe*)!l~gU4O0O|6FV7`sIr9{8Jbm2YvmP z+qiZ8jmpw>uj0F>R!ilZr4`q^?o>;SmF8(@>2$ra67tYHjas|CEv()SlEq@BQSpn# zIrfs>P3!GF!=oxhWy(78qaWkZ@a`u;_<)sl{fm0uSZps`Z7r2+CC_ucTyr@$Twku< z^88$-zFKoRrksDn&GmY9JfEw({*9(n0Eea*oBr!jIoEkrsiwN8t1Ma*K83*)$RO3L zVL!TaDw!T&u=-rdWKxRjP$KYMRZFKLc%Y zmJ}OS83cRqcx*DMCH0IcX(Q!IjiDf9XEyBD`z?z6)!wX(WU`v!cVO=8TQPTIHCr*c zxZG6rlHX^s+Knm|dp|HVVP~RS_AvAIB4{7ny1RvL!J%#^@Bx<`5&dh3_}aR*rmtvg zMn|jam$dh0)=b~%nCto-^R9N?ShLn*9sQ2giQUz8tz+DYbu7l-Pj<9B@w?huyc2iy zJBf~QSD%F>5d-wooW)m69Q zsDtQKU{#xy#=V5dQ;>i_HkI!M3C~xAqrieP)$K8c#W2mz2+=JmO>SVEv~~=Ydlb^R zZs}<~izlNe^(npG)r5_cH6)X2AHGzSVnqa!u8tPJ$57-Dp1%0S6w^kE-+hYFW>^D1 ztzbsxSTu770x3iEHO}a|?i=eGXGM*p`n(xf%3W0M^dx&jG>q| zlB4Pja>2QM>2xt^^%F$Z7nhxW>anlUrcYvFBLqkGe z(bo{`l|4iRb&#uTevIjm$~X;{yM~|WKt=^MV~dJ9*PdU7X_O01ghI=&)Vu=6&~7$d zuFZhL94w~x?p~jxTof*=6o;Oa$qM3ryVAhY!n7b=@}h$32_(p*1__`+tyFeZj^7#K z3VxK?8w8p{dKr($Wpz%U(Bpv4w7ySoABngdz584qn0WQvaHUecs0wv$ftjK&q()C{ zga((~a;09X^;;S#=89m$#d&|o*6_oKk==UKvuuA97+hgy2nL(l9US3EFre_h#YzMW zNNpOSiNuR|Jhl^ofoq1=?YeGTh>L}bc+818aR5ZzNdO>{!Cv&L*}y{BD*L6S+5k?J zS#9*ArAt$20gv}h1ip3$QhHa%DsQe?umP~rivL zz?dJ0J&?EyX~tLkP)llU^OwEyti#besZL_qm_@6wA&xq*G#v8|>c0yefc;>JCRmH@ z*u3}Byw{G;d&lR!ym}nn&8O5$cml(U?>s@-z82W%215=^Hpwk`m zrlIyY)(w5lbYdMa7^z@6ne4V^rR1t>Wh`^)jlJ4J3?t#V&_z-+(k1kU{+rD<*3sfiy`y zX{A3Q7u)&KT-zWQL)_wss0tw*_)sQ+s%UystiM>=>H^yPdrbRo*xS=1{u#0#iLu%$y zrOZ8hN!=cSo?In=n>LH53F{b zxS$7Pf*wSUPK;O}NRXl6-bscK*D)@k{(=2OZ1I8hg?VpHU|?ukIi*wrk53N4uVGT( z8w(Y{;l|z|uDq)OZQv^4-h`NPE;sKjiXOutHVS6~{br!w+Njv6^DAz{{cu%X=&*XW zV|;W_gW_(%!oJQH&exjdQq8+i=zS09V&{}tNn%G`BzcH|02eVUM6V-=p*Tgf4@&AP zNzS^RycywA>SlyWcJfv)@m7?$VKmZ?u!)N<_dm0MB7ze4K?h*tKYCP)qitPTAK5`! z-bigLg%htfTJ;g~7tN{2A61L0TBSv$SB*8yA|On!0=AH9Et|7&Y7*MI2CTW*PR)A& zq0h~$_tY=o^L#AS=TxyMo)4Is{XHB}C~t-v&9sY7g=N&6NZ*QsA0b_QMuep)fRpt} zdv16zeMxu(&)!8nzsfd*XQVdqjC|nFJAfcE3BIH)>tYlnZSzYIeVcm(Gnl+wYnJ>G z42`gl6?(LE!iB#I)$=llla+|8-Pp)mVcd^}n?^sru5pQ{;w-kumf6bj!(UiCoQK_E z!DVp+E3DTjH9{664udm@hwcoK`5@-C;3o{loE8?`M4!PcWUd&1)PUc@C39w zb{lYIJc7UE@d6&%)`mc{*q+3C8Gd>EbMxMN`LI`8nVIx@e2t&8aZ7LS-=fXPp|iMo zx6RK7hTONUOUU>tGeyiuZ9ClA%dLj25Z7+64w{l2Ve}&u^5KZRzd#V~BO#dDx~Y!9 ze1yVQP2XBK)R8bQ>KlXl(gM+|aY>Df`kH<94O1Npc1yueI5D~{B@JgDElqt2Y4YVP z7KkVZwoO9HByZ{Jnv?8Mp7m;y!0&|dSOgFFJ{7h>D=4fbpI)T5k*?liv7Hp~0DcH| zw3Fv+rTUUny3jtfP---qe%~RQTkbOITrMorJ~pyQZeE?sEjDwZBlCfN{s9bJG}1o2 z&}`M594lU~G@M?YSfFy12Esx*p9&K2jhB2sblU`JY8lK1cqi2|m>*a^rYZzAsz#80 zm;P&U%8I87rWeb56Ljb1wicYe<~{-rT{QH2ctSZPwXK})ljfSuns=q7e0a`BXeT}3 zJ#*#;h)`CmMsI@yTe+J?vn6zUVnftTgA8`lVA{}6(lNfJcPu>dZ|Q3Z$TOuaUd2Wp zk{4UHu#JIPLs(vHXS;^5hzk3PZ78LNQA|JfHYal@BtQsE?fa(!iv>g2d>^UUq9YduZcDVBlM6u*we!t2(TIs2y7ZG?pEo7zz$aSr#NCT`z~8y%_2UK z-4T|5!Lk(bFhsAHnMWN_T#vS5(cdCnR{bdeSNq^reccgbZlRvPVH?62Qrj|SRvLS= z)WE@?8o`<&h`NYcd#s5?tf6m4?G*-@;<1SXdH_KY*dPbXXou%CU>%LMNvs_uuUHRT zKAy)S(C4IVF}c}{AOzmQsHmOkek0x$JMq33x>@=hrqMhS8~z@dVj<69k1@fe!f5BV zX2Onm{vqo7J2oghC$%llr+X*UBN#qpznnppG^uM^9h(dsa>*taDdv}DtBcJfq!Sxf z3l3XgeB`VpqQJc|*=y`G3eF~lq%o}II6sxM@dx_Je9YcI;7jS9_!d5p4^*3@lerN~ z7XA{PbFFq4ZOMf@OOC!qGW}mrg_zG7ebxZOAM16h&w(9r`!*{2XZA<9O=??iPhG(_ z;El@7QN|+q)I-}D5WeQa?E)ExB(Lk0fzv4~bV?gdxaXEVaqbCUwlbN?tN+3yCi4uy zZgV$wG-B?;{u56)Vp7|Vc!Ev!89U^WFi?SsX917Lqpi@4@QtboV>spLSR>$`gJCL$ ztr)3r&~=5%wyw048))qe2Vbi!!AO`_?TM}#(M^PCR8e!d=Sp-F1B<=ty6}Ves&bbr zA8rMP-)GM_A+sjfHpj2}W7!eQ*75Ouc0h!LR2k3Ek8HSzCvrPY%2kklJ3~Ap{`DlJ z24X7{jVp82@?$tTfp4g4y{zG+S{pv8c8soh7K3R92Pe*95*<^W>LjopLwRv!2~KqQ zo8ij_a>gT7{uphxBd4Wu+Y`zyl$-U{O3meh9l4)neWpMLWIA-cA**!|TdtMhQ8qAh ziSB0u&YZ51Hm-OXhEU26?a6MW=dR%n*d7ZDNqu&PuU@`*s0D+!umOI8k3DKc-x!;T zWdXn8K{srHy&EQAM-%-UsPV^m!igre?L<#qbvGWO56v~vfX@P}T|&UM%HsAol+~?N zo!i?CK2mJGy>D|1y{)lwSZ$v{5)(`5%g7jG9U`-&wjIhi?mvx?*uhbF6R3ZsE!4fBjiBs3ju5B+1K72TbJMatffMD4$fCN{y_p@>+4q(Otd6{NG zH4bw(<|nF2_<>%Olq7sfVkqDoi$~~YH6=@DywmgT@ctgouiBZq+)ylt&8dDKy=6ZCxOCb@ys&^eq|CgOH1EPa#dG9fv{g2auICw>Ec)V&hZ*>l(*W-YgANz# z$L+b{IoXk%e+{kA_oklI_EZ1PJFj1QgqV|43wS(QagH7d`Y;$ITCIvhAQjbTa-~-^*L1C~>u$`ABTTqSgefoQMjJ$UvK8t71vgyttWv{yr;ePi3!pB_PG3JF!H|HL5 z4==~vCy;uiI`1CE`&jijp8T@mo&fb^^(3BCcnYZLG*Zq~pQ=9XK7-h^?sF*hJYp|Y z&$=(V=c=D_&$};GFSwtsnBUgzi|)(eMIqb>cm;9XeEk^uXD^8NIUc0@6S-LC%tb%O z`7Ge^XjNby4PRe3a2Oz`D^;AShEp-dy<^=AjEx&Og@@OYmsO6v zGIZPaSOJ%B;HC7scTMHmrJ`XcniHgoFmo!{(%i<;g;}n7L5vEDtDexB?j6{HMVt#y zkPJU@l}(*VBPk6}6J3*7G^hJxEkxxuUHR>eIg5`mGTwfGCCO{-k+Z>2-(*|nYI7Cn z{QHQjKVTqcgap!;bgL1yvc%qSiOd>Yx})9~`X%z0Hk?-ksot@GDzQ1MMqbb)34K9a z!@&`*If@_~SPl*x)fE=tAnZieR>|?4$itYN8+N4Ej>h6AkqZWV}R~_&g#!org>G6U#JyYFWll zteEj*D{ef9Cyf7#CygJ)Q^pUoY2ydhnDM_>#`ylsxN$!|Vf;^K()e#{mj(Zc@l(Sx z{v)~D`1jG{5rg-!g=)VR*jHYg@G!JFg^);F-=R#Qkl>8A%$$B^=zpBYFQN6H0%qMI_= zf$4*k*ZgcZWmk3T&h%Xk9@fe5jGleL4LC!64&E!Y*EI>=@Mj#j1O44x^t;D2T_36f zcQv($p#9yA=PfwbSLtg2CO22Y<2CDUPVVx1xl3~8K3Cp&hyx+Vu}tKX!68h|#hD8) z2iBX)J&EHUH+RGLSG{wmPxHSM3ZW-wHN4=@UE*oCaeCf6?Kf8|WpD68{}a7xPer(f z>&yAsaPywzF#ebUS0~#r~mun?I+%jxU4B0i7*CW!0at_HQ%z69(U6@Ery=gO3^AR~CVLSyw_~5jgw?GY&D> z0@Q-!d6?9=vvq;0*F`p5$=c#C13NY&_e%JlFth3Gu51i{iEIYp!R$Cv5{Mnh&SodF UaZo8x$!u22B#<{f5zCzTe@tdT)&Kwi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/state.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/state.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..244a84cab23160075a6964f545d09cf936ff2488 GIT binary patch literal 26992 zcmbV#36vbidEWFf_w4NK0bp^E9O7OQT#(d7@iHMCBt>#b5g=uaK@DfOdlxg9W4F2& z;Erc4N}wdjF(t}MUKC4;7qaD;QQ|m`>_mQco?|J8EypiboH*$h#V=0cSbBLciTPqD zk_F`Z{_38Yo?Vb~7M$wpuIlQlzyA8`KZ~8Qv0MUwfA+y|E!_FJMB+d5X86y>%_I1E z&l`z^lW>e?qQa}$G+JiGG?=%VR?Du~lDC`5R;rSce6pEtWhxoTr<&PTu9A~{8u@&s zAo)yltW~TOC7*4Mw@Q_gTDvQ| zC0}grY3;4-ZSAY%82m4nDnIn&KU zt;3bWlHbuh(mGl>iu@60moxKEP9xGgSr+P?de->S81%dWzc^h!KFM zjOY4(y}iu*#F@I=bWU|#Z@%N7eyQ%U=~S!ZxJ_@?45pS?T&;UmHl0IgF zT-~d;J--H62Ns4DB)yep-4Cp$+YXWfh9FsOxqdCkVn(aY+Jf5*avDnQTFafaf~4H3 z{cQGDB(EpbAzZ$@aPt21&v}5!`DfQWuXg@aXK}6NwtesXqjmqWwT1I%>dN!)dPa2` z?xKJGlH0y?{>l2nd9UufcdgVGF9OxP^G>7IUhW)s7LK>-%Su4z9Y>FScWz}pxTQ+y z_j^{YwViMZ*}2{5hL=H-GYUr8D4FUAZWcNA=r4&(AKo9s4I%sr;J2B$mN=ETVr&?I zeqzG}EX{`H@Spvvc`EV3z74BqHEeY^(xj7IGt}LFig`bM#q{p(nVT8hWv>|qW@a(OvA`EQt(Aul z;NB}BNhM4(XPDnNjns|q5t%yaKUSC?;oO7G&SI_UJ&a8BHWqMYyxv}Ht~qWMREHQ; zDMk-2)E&od&(Dqp#cDO`i|bXZKxfxix8tjo9C1X5ix=dDyo5_{EcSIph^SkT1Xj&) z)IsJ_z%94!1WAy9m)0vJgp11cLqai|42)J#j5Xs`c0~93o8j03V=1sZE54_JB;XQA zO>F}R_S<6zQYQXgPbH@f+ca-vO!IoqGQVF)77X*{lvM;?+lIOi6=M@k3@0TKDl&b7lNRXjUe~%blgNzrIq(B$SW#m(?+iOjTL%WuXdQd8wlWH^ae7 zTOppZXcQ5pJl08KBbQzu8!v>|*fSc5h9RlBWd7tZHp+x*QbVkoHPs!s1Zi}FU>*f+ z_CX+l;NZik_6A7-aj8CqQkm7&%j*I;1pZp){aApdn@hc(7q_Bztx*xrD_E>alk< z3;Gd05ei~%rqF_Q#Sn^vQcb-iwU^8b#tfi7Yt;TL5G95LZ%S)0tM&FabVpj)hW6yb zruAwgh4RW+zh$@1Ew>C7quzF%^1^!AeF?kHVtqi)fPQ-M90OWjbfuv)9p%=S+fTUb z$I4ID+Uw^!OwW*MD5Gmnx7~9cB=X=GpP=D-8(*rE0Vyx3PODsNcld2-Pv#t0UiQ|o zxeI|S*F8;9(Jc(9?t3WIw9oa9l^53hG8!mfsxP`_?)J6WxiWYe_n0(zp>x^A(_@-W z*Yu*<+J$mNL!t_RO4I8MeOOx4AMf|fzo0s6%NJx_fd$dvx}&<{kBq$BX-l1`-*eK~ zY+B6$xr9=TtRZy|3W5~4JJ7k=lqP$&=aKz zzgh!>bjdx1_B^s8seH!B7+4ra>UzO8jiOO9b{dLnVG+OBpM|?e@blgdoOKfw!%0-Y z4pl7YQEtiLi)|O%u#WzOWOy zqs}aHyPWqrcRI(An{n=P=Fs|X=eTn>u6wd3dUTI-FUs~J_crJ4$nA69;k*;2w>a-| z?!)y~=iSczxZdVG;5>+H*?Gu$7}wjKA95bSb-#PSIpMrVMt;yeCxSxAYn>(g)ctkAjAz{yu%y^j1#55xUs1+pN1p76SMC6z$$@B&t9fE$+qC> zqUw0wU3f07oq57L4&ptBbs-!xJB8KIT-O*qzetRT{+Q?QBz_)gea~32>ex@JV6dFT zT0)I!Hm;raK~%|5d(-btd;}~r>R1j4WYu<9Kk0xpzHZK+!BQZ*qt^{tgCMKinydkj zOi>j~P;DI|O0Lh#dtjHaa+*u}%`<#`ge}TctMzu>uT~utdPO8TBV%TaA{T*?GrK#6 z=V&gf9osXwyL0oD!OkE9x(@LdgUo_&HLfMVapDPvVa#KPd<->$eUaP|@+4%GW%Gjw z0(nh6j!L6_#dt%~y@FEN#&YOt%INNlb+TV=izL&Z5`uyoI)26yk&PDdk&o$Yp9Q$6#O7!ju>oEpV_929LoEmt2ESQxVxg^3Xva- zGywc5(}F)Npxd2V$a&6M0)Zf}>kGCAS$%WSUEcy3@Q0fET_R*SjRhkY{wo^xjS&d- ztH+Qww)ek`HYmXXIu>WIXFWvNfXo3l$C%qRdw|q6s5&71@!q~B+}sPL^O_?_4r=t0 z-kq$|vmZ*V?(M_#VLVGU(mjh1Wqvb5Y>8m2o<=8TvqNySRyr$zP0lb#a=m-%SyYh; z2uf>hsSezED+RCSR;GnS9w6emd?VDcQ2%7h?G#PC-E+hBZTjz)oviE4oi z>2LfP8u9iZ;m(o6jfZKSX2<%AoM{r zv*el-00M+d=5C1ID1ms_OI7g;OTd5ufu+Vqx@UZjh--Z=@daxmnpMyAin5rW94XEAit5E)v6pM) zdU<>|yO~G6fZy1XESuFi^o#Er>QiB_#&Jb2H%h&6mSIWtc-zI!9Do_xMb&}s8I-+EX-;pv)qtmQCuQ*NT zUN?fIP|DfqAURm3L2|L#X}f{V<*RAz7^(-R-{Hz^fvM6Wo90K-A^Q`gH2o5$Mau!t z;5DIf>iujW1)a;9>j}ToU*4X2fwd@U%uWvQGRSnGaAFUFOxwMzbH(VHCMrQOD$(~9 zFhYDIT>q7ER@WFTf>EW!`r!!Vc_r(2NP*BBb&lOwU_X;G5bi0VuB$S(h~04+4NFO- z(C-HpNu|*51G1yLVyZ*Hs>Tr>;jw6SGL4ZgI^Js|>7xl~dd4Ilug9HTeeyc#1r zgijwv$8Zyak*(#no?WHJNsk;FsaL~g^}0158@T#mG!SG$y{xB4o*W&yk4hT#M#eck z+}Ws+e~j9)*%yHo7~btS9bWWC3#G10HN-kH3tks>g(s4*ITzMyT)lQ9fh`ps0&|<6q#JC~1jq+s#C*c5EpTKt#8b z_`NZWglb!jL_O=8*nxzX57N+ExG%Y6bk|W0R3qMRFgL6)N(Qpz+oa@o`2_+Dh!SUh z`&Dk*GxajwQy)fx&wmJ)EuXLC&dOol>7*BOl+cCzbKRr?!O;7)lxY zpxPhwdvt3IwYOAUB<@6ilqvdT*})B1XsF~hM+l+}g4{NHHn>C0q^F>OBY{rsPBg$V z3IT)c2;S=;uu!%$a7S3(Q0u1)3Gj!B2Iv4d#B|;GB!wI;XR0c`1)jTxi=rSAq(j@A zCVNYKE;7w6ahXQAgn?wEjtqh_8GmLe#dH1pI=W+9vSl7on!6=P!@9w36aRgnamuaNc9RM3}4PeV?4D3PV z1BL<<)qVXk!Ok|p+b=C7I*^7uXz`N=^H5b4kOWg88MV|k<*N?q~^;R zGnd4Z8`D;ICPo;B8j5Z7JJBE~NH+Sy==i{47&w z7bZ3)(XR<8QPHof2CUAXxSHrqR13XH_1S(83-ZOueh4vWxZ%8Eo!qq7BAt$Sx|#7&2Rx z@j<(?MZIn+T5?pKNq;97#tS|m3H1P;cO$#E=wjzW*-emnJEjZPR+v1&qVzo$g7LL> z9s2qHgDoQ>T@m)NjEsz^uwjJA0Zj#v!{AiuQO%lL-jCQ%^;x_>SbgEB1Ea0}M!$e- zPX-7_m4rt|X1V)ewhFzA@-#A|H+IK8Ho7nMa!SCSle)cP7XQ6lEs!CMF^k5;Q}6W6HJ*j*2b&loqw2+(Q}d-rH=igT9=J zF&^A;viMO#@Mh4>o~4r5$zT@{dw|{L?q+U^pbf{GB*=Fb0oNpBTF_6s@tMBlk?Q1|U zcf|x@&4S3MH%Z=dn-kaIx+4bLcYyDl?4`w&OX7Z1*X;Kdwb9pnzppD%Uso&A*B|Bk z=x_dtHUL-TJ{7w!>7L6sY*>d(cuGyFM*%0TjU&qzWNF3|g;J1zveUV^wxV&HW^6Ij z4WU0#T{BsNNC$a4&g2M_yP43^s9r=8q}Em(*q~+$qev|~{X0;lB3zh!TVzQX)?k@} z=02uC_B58CV8ic`w@^Hcv3>FzOk#0qqeovYc$#>73a{C~Ea0s<3H$=~-LSzZKwoCj z!$NQl7zth3jY$hSGK;v~uW12yQPVcNx5dca*0047lf;=nLCialAyPKD|3TxmiOmLv zDeIaAaRaJn2oj;dK%qfv=`F2^C(jt9L-pe97R^r|oCEqTLb#BW%N#!EnOrNZ7T33M ztpfwexh<9pz9_vX0QkuH*i`8Cz=43Xmwep%kksRv zL!;_%G2sZ+>qsJtg7BDwf$eAc0VXon{RvkW@T|unmXIMU$hig0xq;dGZg)>?wzPUy zBaRm{W2NwNpMv}bo5VEH$o8q7knK23GDxA(1_R}^QE>@I(18ZW2E$||+L?P2-mRB0 zaQ^!Me#^8oprwX|7RE*V0eBjbOUHd!v7j;ns#*EUKK&J;0cn0ks7^$$GVAY)+FpGC zG+^-d1Jd8@0EN^O7{qK&+i>y=Yt4&Qy%<#m1wmenoU-n`AqD%rDASAmZ?e`n$iG9o z4}3)H^py;Ca$LD;uo`!WA1{ofh{tEf@)7F5<&v^KYP=oym;1*>=pt^ zWjMh;Ts*Qsg1vg)HP(lGPxSInb1EnRl`=cARdZu5aUvjDR@%7VeB%G4?Y^cA> zN^D*I3=@8C1k#Gq@2^D2ol4svL}Y(#VT(*`Cos!=uaMz$nqo3Hx_89j`=*+o7-c4O z`w%8th3*few=iz@NfmY&AU3^F!TbojQb1XfNDsOURW%lac?~Mm)oH>}6OE+$dmLOJ zN7V;-%fUsOU;&K)L|{R6iZHi&n;u#6??dS~2^Df_BC%rwo+Nf1e3Q{f80y8CdyYAY zpI{b^#6tFfMM7SwHIK%b4q*TiTD4aTt4TlUr|^TB7E*EoM%V-yIKe*n)ZzV%Km{rg zU>`~Qp>QjaA^F=(5RlQ!vzyRn&5;KVY>GMA;^x&f`M_;fT@zh z1;v*oLne&|EZoB#lk$YlVYd+nd{F$ip=H29mXEBQ6+8$mbTGJ0vx_4m6ukncdp!c* zFY%3nJc?+PfJ+c14l{xMpAtZvEE1MU?5a@T!qE=@uHzrDAqPpUdw&dIe<>0fBR=Gn z`fy~IdS-(Q@Zg3;v!)OKa&H38E0%9JlFYAKbeR{#F*eiWQOF5-fUF4~iD3-TV}cl6 zGxhyoX=Q`t0^=$MPTT4zKB$2^%N(&zeTB&{BZ(N4U*Q9GEwK51CBszq&79Ol`+iYf+7_V%zFeGAFQ-vG5~?x0C4ZqqNVgwdDE9>IeP3OH> zS7Uv#@OjSOS^VCh$&vnZFJyuDbVLRoa|8Lzz#ALZtQu;;b&B#!U|bB0OCyj&6acB4 zcwkRrtZD-_yNBa_pdZMP&a3|d)M&C)ggGMTfc^IrE<+1Qinw5fo7KwbM_JPpxiZMo zYhv3eWzWYsr4$Y*_(24`o+F_|t~DTduGYI0tYDherBH&#SF(ZRs{=S+K2$ z3XV22 za3drZUV%jUS1C%3lTd(TsDDhL>A4fAIp{zw7?oxmjZnN#b2b|6B(V91qye zac=e~y(dM}R)y0m2fo&H=}B3wuCCRZVM!VumYv0FRlS!T$gG5+b7~&9>UkzFFzGN+ zOxBpJGx-pck21N+Og|{5PJ-W%lIm%iWtxqHK@3FZaFNKGwx=GLz5bO&h|k1>2z}Zi{F( z_Q&~o1V68gBD)spyh91WPp6 z=}>*C?zmV!Wr^#PWyHub>=}4NFNwLEqayhV@tKyL0`6R(Byd||Y7KU3ThnF|5jX%c zelYS>A%?1NG8sTxfK1G}m&nQ4pHvkwxFyuOJ8S_Gk@D zUv5V2`jMX+E)Sr8+7)AOykB8_sID~+zT+Dl;qNf{mrQ<_2}h`YpUGh810?%B6daGn zPbABjg{`I7*-R02JISfNlSkbf(*GX`0!@0BoLOFp%zZ?9Oh4ay8y0q z47H^Vya5dRqUhNfbJ8rfU_ymv&{99*m;8ywph(n8l;$pl7-y|}!H{vWJ7RQv1Esd;< zg6*@0pmNlo?FhgzH1aH3e1rT>3c3Nr>m7d6KK0$xv|h~!c2?npzIYK4%iVQo!9pin z29T!^M21kZz{qVG00-gmN6puVG1)I*0NiPxhd8o|K$3__G6JjREr&x0l88O%sG+4y zDi&lPTz1=tY*P;}qg{`{f$i$8fE&FtyHkCct>pDW6GpHi(eO1e9gr>%Z?Aq6HPpRK zzQ*M1OsH)LQXXQ|5u1{f*fzZtC*i=nc(FnSud`l783#+@^K zkyN!((vYtT?^Ro9x`LP$3nLOOn`WqFk3gjEV4PtO{yo}2pc-M#BL=e7s?Zy-8UxZv z!g`wECa$MoI;2<543r>~aCwF?=SIOoD5f!E7OZK@#GQ>&C`Bf>V%HYzAQ>V7_PAV# z9nf8Z%O^SN!l|D)@_rBzAy1+<&`w_QCzliIG+u{6KPeNTenjrH9gOsC1dY_+#er(rH;>{d>C-L)s5lPSRplTKQ8ZzCd&VXJ?u&Fu& zy9D&ypsl+$Y`C@9FhwOu|K6Wioq%1`T!(?5{}3ZVWh_cQfRf8}bAcSMk0OAb^M2n1 zU@Sj*1vbr{plgV zPU6xQ!Q)&2)*$%3zEocCtVy)#Pzb2rlcPw`GOCs@BNnwhI9Z^4)SX+NV}vG-cUYLK zt@#&bbLBdM*6?3c9lj-lHy$V>RI+@*_gB38k00kb5OaDtfxBW19adHAxZ6H{$UE+L z5LoREpJQ;qap{qaqb{J(ld-h02Ej9M(u0&Xn5bR2(X0G6=5`lIHj9 z8+Io3Ka1B*b3Y7+10)==48>LvH*x+15g$Xw$97&%T!D%~HgYIB5SC(8wG;?dhulFQ z-LOMnp`=ztR8y-nSbqbx2fXkjwFkHmXcYPikBB*$gZhB{Okh(V5@a0LU13iBYdlo{ zg$YTg=2l61!arL#Uc}3g zcSW)Tt7;>Z@_R^0`tAct4RgQd49X`}Qd`t3-l?&fXK%FK`4^?Q_uwVy! zS5}Ysc6?CVO=axlE(e@CtnHmDQIlp7hF$7|H#D)*v2sGYw?ibx1`mgYeIbI)B#1Hb zXj+JJcV+;a_zPQrM8Yd5^G;;CRIUIp1dnZ^%P_(pfnUIl z8R7mp`?Ahu6V`I+f9ErPE*J|pw?!A?Nw~pDxBi$_$X^ID{}8*yje$}^F=-xzD4Ngg z%M?mkDPKfU?2lZ?BlvljkPOQU2t?i^%<)YEsoe|$pmR?C6<{I4s0+>*Wd*0`jN_Vj zO3nnX1!vNk!gb7J7-znF^FXNlaU0s7WiZiE=IN%Wg zcnu-UmoL;I??hVi7PcG_i$S;e9S z4R_4&F1d2RMIEq+H72C|1(bs#YF1?RID13WKNy|7xM>+)8#UlQ9oASBwj(>Q zK7x^|A7^q9N%viXnX>G|xh#Y2ASf5y@`41u3#!PzjCt9A$lH(j_&GUrpsglnLnb~G8qtC@+0M6ltJK!da+mSeGYVf^?BJ~uLkzPN8XWwG4@dJy}-7)k< zQQJyjZcJui&Hi#P&iJ+iJs*4!$(|rblkcoGAEc@s1s9)Shg_;;t|5DS zEA-p*JJ@Ii%wIukGRu&kWiG_CCEjK2dMMQLKe6K}yu*M?2t3n6ou_eEDxHZj4b=P* zVJ!T-!$>LCT!kFppxWqNP#ZyMM8(h*3*IKCnpjQ2ENN@Aq?%cUrN5EdNOtoObJFmI zu*pMd=S&DfDLdh3*B>(AB4i}Gc|Yq|^rlDa@DW(DGzD?Yjnt2&E*o&hGQFmhLc#OG z5iud(yzNuc_Qj#L;T9%u7q)8~7L>FO)ne?u4ky5UGGZAiTYoZ=}3m z>*Y5m84UrQ$uITb;Ob<;Z{+dzH^DpLNEUf}if^Ml&vN~3MghQ&NB7E9-*Gs)tVB1Y zF`hp`SpjDn{9$_njoT{dV>ePEv8xw6)zEIlS&l-evZydPF9!zOWm2w3IRJ3TYfFFn)#RgFW51Jt~LCg}cx(5cANgHdu6c79JTB z+SP=(&UcTT?5s5%5_kCNN`&DW3<J5}?${gzgU^PmwkD=zR=z{tK_SI5@f&VYI!DP#4Nb5Ly^>3L7 zHSHo7j&xfGtou=Z2S-Zknxdrzj(u-6+HJMJ{CE<-Dg3-gkO0xRH;}=a!Eu%F9&mVw zOcXfgUkzm@Q?Tar*$sj1RES|rCZQYIm}9bj^sFpPMJ<0e*n8WMfPKF0f1PG zv030YO+W|`*zQ%?Dycy0Z`APBuC`PMVLQS_!fq;4*a2>!s zFWOms6vpeJMS-v$#o%w@*?ZW3vMUJjfRDxWjoc4_UXlL$2Oj|sb6P24M>l+&$9csZ z)zv3&?j!UUH|hDK>^bQUd%n}i-M|483)JR$vj;W)7382w&3kx?-l6&{~4m&DMnN^Gv!QT63|n`cjfm-cjg#snKB z8LUiUMQXFW@LMg4&RSw2qg5%csQM)cxlv#LkS~^z;FL=+#==sQn}+rfo>296b)ef+ z-{JEeRek{e#-am)>0u3L0jtWGtSNHWJQBE4iXw`mCqeotU8Gm#J!nd(`0TX$r_9S* z{Wr`lF%gb?0lC0%g-s01H9s)xzLvnaS_HEZZKszs4oVTSFyPuNV_|0m8Xk^h(}x&G zJ*wge!d8%udYq?fG`tb?1*s%i&^;3>@pat(F_w?_ACQ47I-Sy?`yr2S!VL@xQU1fx zT}Z!AUOw|O(yVBQZeE_Fa**xN=apU{I%SUXgg%CaX72)AH-Ui`1EBDYm(A-%X#X=e zQdR+nSWbgnLlJ9ct|JAGW)OtJ;35f| zfpCaniD0nF#TFq^n;XROo?*M`05u~*5o zmX)RzHb$r*k!aDEixS7>`WGtcRZlWFlUpr&LF(dVUMm?q7A3=A*~sn4NQ23Kr}`gV z<-plP^W{lIL(zGTM*@g{@&E1K@}{8JGADiIF3k>P8SoRa5(oh;4U9^>0yU7Pd^tt| zCtn+{l3z8uM>3JwjIbfuw!usgE*YC?>d(8Sq26d?04PiUk1LCy!0QR`r;uQ{U?3dh^HlHS&?InC zatIQ5CTqj$7JW;^8+!l1F|GkebrD@`L+Ohm6_am~TNklchaj;c8FWY}C2jXWIkl2NZXlG}k>j&!1W&(fB) z&YCLYq)%v1eQ2s!OVp=auKHwZ7}C5s5L*E?$6T?Wf*w*3FNPk3kB#5k@biu$5yoX) zGcMfrRT1Ij)I=CVtV>@jVhwHlU&7l;wtMO{HI5%Z?o+G5J*_V7BgHeu0VXiBcqq z^!L|M@Od<#U1<-!SugvZv=#X6E%9{ws#qdml@QQ#0R%RVdxobDKPPM9=a}2YWQhq? zY&s4PPA$4ySV^L_k(nFg+3<8n0F&)|fz4ZK2>#U_Cp=h7KrX%iHk$hhLc5F%X@`j| z3EPq!|H{B3^Tu?N8&=VxKk1gy#Z*)TBhlj|es8=T36K;ECe-S}AOt!>l~t)1x{t3W zxrD@~hK)rp2dJ%t!|2{JkK;rg+V z@)$5#k6206@p?#zI-yJLL&($V2dL9|NGKmY8-O+qT;-Xl4qpL{Mf3s<7VsrQjTCF> zJWqTiHSVx2L@+d-F7jNF|Z}kAO1Z4P9YJpcguMOjAI)>%0Lu2 zRG^_-v|GLdy#FWz5N&EZqPvTcETpA5vN-skd#EIFAt`jGVqUx_FqiJZ^9l;2p zj$b8UBkEW*506qu?JT?vbp+2cm^*P@AW4DP(QF1*x4xozAE7Yuy;%Ko)En)}Z{gWj z*p-9G6u{eZ{g~G?7D)&Q$@SEA^ZU7+`DeMj`M+}o^Nkq!2tAsudAKzHHX4|nxVdF^ zieG<*$)7U$S4_UnL`YzbInpsT4mhd_CX-Cq!J$qMNcPuI@C(2=kI^&lb@yM=b6Y{5=aY*Eq6T0}nWNFqH6rcik zv!%86qTlJjIo-xRY_i&`i@U8NIzb*9Ji&=0+GkUxP^5Ki|8e*=EbS%j?zJ;~P29ua zjp&9)EfOVQ3D#{o3);nNPyc>yAVQ>Z}?!qJscZG%WXimTexYnBD5sqWH^{cuR z^q)@d41|Y(A#8acj=Dzpe|-_RoFF#@A8w*SQh#>_d3_MVeat}O3#%_lb!zu D9z*tb literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b52cec9f3e93da4035209e6934189ce167739eb7 GIT binary patch literal 3530 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 MDzrZ~e#6ZFAL=*@Jpcdz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/autodetector.py b/venv/Lib/site-packages/django/db/migrations/autodetector.py new file mode 100644 index 000000000..1ca6df90c --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/autodetector.py @@ -0,0 +1,1579 @@ +import functools +import re +from itertools import chain + +from django.conf import settings +from django.db import models +from django.db.migrations import operations +from django.db.migrations.migration import Migration +from django.db.migrations.operations.models import AlterModelOptions +from django.db.migrations.optimizer import MigrationOptimizer +from django.db.migrations.questioner import MigrationQuestioner +from django.db.migrations.utils import ( + COMPILED_REGEX_TYPE, + RegexObject, + resolve_relation, +) +from django.utils.topological_sort import stable_topological_sort + + +class MigrationAutodetector: + """ + Take a pair of ProjectStates and compare them to see what the first would + need doing to make it match the second (the second usually being the + project's current state). + + Note that this naturally operates on entire projects at a time, + as it's likely that changes interact (for example, you can't + add a ForeignKey without having a migration to add the table it + depends on first). A user interface may offer single-app usage + if it wishes, with the caveat that it may not always be possible. + """ + + def __init__(self, from_state, to_state, questioner=None): + self.from_state = from_state + self.to_state = to_state + self.questioner = questioner or MigrationQuestioner() + self.existing_apps = {app for app, model in from_state.models} + + def changes(self, graph, trim_to_apps=None, convert_apps=None, migration_name=None): + """ + Main entry point to produce a list of applicable changes. + Take a graph to base names on and an optional set of apps + to try and restrict to (restriction is not guaranteed) + """ + changes = self._detect_changes(convert_apps, graph) + changes = self.arrange_for_graph(changes, graph, migration_name) + if trim_to_apps: + changes = self._trim_to_apps(changes, trim_to_apps) + return changes + + def deep_deconstruct(self, obj): + """ + Recursive deconstruction for a field and its arguments. + Used for full comparison for rename/alter; sometimes a single-level + deconstruction will not compare correctly. + """ + if isinstance(obj, list): + return [self.deep_deconstruct(value) for value in obj] + elif isinstance(obj, tuple): + return tuple(self.deep_deconstruct(value) for value in obj) + elif isinstance(obj, dict): + return {key: self.deep_deconstruct(value) for key, value in obj.items()} + elif isinstance(obj, functools.partial): + return ( + obj.func, + self.deep_deconstruct(obj.args), + self.deep_deconstruct(obj.keywords), + ) + elif isinstance(obj, COMPILED_REGEX_TYPE): + return RegexObject(obj) + elif isinstance(obj, type): + # If this is a type that implements 'deconstruct' as an instance method, + # avoid treating this as being deconstructible itself - see #22951 + return obj + elif hasattr(obj, "deconstruct"): + deconstructed = obj.deconstruct() + if isinstance(obj, models.Field): + # we have a field which also returns a name + deconstructed = deconstructed[1:] + path, args, kwargs = deconstructed + return ( + path, + [self.deep_deconstruct(value) for value in args], + {key: self.deep_deconstruct(value) for key, value in kwargs.items()}, + ) + else: + return obj + + def only_relation_agnostic_fields(self, fields): + """ + Return a definition of the fields that ignores field names and + what related fields actually relate to. Used for detecting renames (as + the related fields change during renames). + """ + fields_def = [] + for name, field in sorted(fields.items()): + deconstruction = self.deep_deconstruct(field) + if field.remote_field and field.remote_field.model: + del deconstruction[2]["to"] + fields_def.append(deconstruction) + return fields_def + + def _detect_changes(self, convert_apps=None, graph=None): + """ + Return a dict of migration plans which will achieve the + change from from_state to to_state. The dict has app labels + as keys and a list of migrations as values. + + The resulting migrations aren't specially named, but the names + do matter for dependencies inside the set. + + convert_apps is the list of apps to convert to use migrations + (i.e. to make initial migrations for, in the usual case) + + graph is an optional argument that, if provided, can help improve + dependency generation and avoid potential circular dependencies. + """ + # The first phase is generating all the operations for each app + # and gathering them into a big per-app list. + # Then go through that list, order it, and split into migrations to + # resolve dependencies caused by M2Ms and FKs. + self.generated_operations = {} + self.altered_indexes = {} + self.altered_constraints = {} + + # Prepare some old/new state and model lists, separating + # proxy models and ignoring unmigrated apps. + self.old_model_keys = set() + self.old_proxy_keys = set() + self.old_unmanaged_keys = set() + self.new_model_keys = set() + self.new_proxy_keys = set() + self.new_unmanaged_keys = set() + for (app_label, model_name), model_state in self.from_state.models.items(): + if not model_state.options.get("managed", True): + self.old_unmanaged_keys.add((app_label, model_name)) + elif app_label not in self.from_state.real_apps: + if model_state.options.get("proxy"): + self.old_proxy_keys.add((app_label, model_name)) + else: + self.old_model_keys.add((app_label, model_name)) + + for (app_label, model_name), model_state in self.to_state.models.items(): + if not model_state.options.get("managed", True): + self.new_unmanaged_keys.add((app_label, model_name)) + elif app_label not in self.from_state.real_apps or ( + convert_apps and app_label in convert_apps + ): + if model_state.options.get("proxy"): + self.new_proxy_keys.add((app_label, model_name)) + else: + self.new_model_keys.add((app_label, model_name)) + + self.from_state.resolve_fields_and_relations() + self.to_state.resolve_fields_and_relations() + + # Renames have to come first + self.generate_renamed_models() + + # Prepare lists of fields and generate through model map + self._prepare_field_lists() + self._generate_through_model_map() + + # Generate non-rename model operations + self.generate_deleted_models() + self.generate_created_models() + self.generate_deleted_proxies() + self.generate_created_proxies() + self.generate_altered_options() + self.generate_altered_managers() + + # Create the altered indexes and store them in self.altered_indexes. + # This avoids the same computation in generate_removed_indexes() + # and generate_added_indexes(). + self.create_altered_indexes() + self.create_altered_constraints() + # Generate index removal operations before field is removed + self.generate_removed_constraints() + self.generate_removed_indexes() + # Generate field renaming operations. + self.generate_renamed_fields() + # Generate removal of foo together. + self.generate_removed_altered_unique_together() + self.generate_removed_altered_index_together() + # Generate field operations. + self.generate_removed_fields() + self.generate_added_fields() + self.generate_altered_fields() + self.generate_altered_order_with_respect_to() + self.generate_altered_unique_together() + self.generate_altered_index_together() + self.generate_added_indexes() + self.generate_added_constraints() + self.generate_altered_db_table() + + self._sort_migrations() + self._build_migration_list(graph) + self._optimize_migrations() + + return self.migrations + + def _prepare_field_lists(self): + """ + Prepare field lists and a list of the fields that used through models + in the old state so dependencies can be made from the through model + deletion to the field that uses it. + """ + self.kept_model_keys = self.old_model_keys & self.new_model_keys + self.kept_proxy_keys = self.old_proxy_keys & self.new_proxy_keys + self.kept_unmanaged_keys = self.old_unmanaged_keys & self.new_unmanaged_keys + self.through_users = {} + self.old_field_keys = { + (app_label, model_name, field_name) + for app_label, model_name in self.kept_model_keys + for field_name in self.from_state.models[ + app_label, self.renamed_models.get((app_label, model_name), model_name) + ].fields + } + self.new_field_keys = { + (app_label, model_name, field_name) + for app_label, model_name in self.kept_model_keys + for field_name in self.to_state.models[app_label, model_name].fields + } + + def _generate_through_model_map(self): + """Through model map generation.""" + for app_label, model_name in sorted(self.old_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + for field_name, field in old_model_state.fields.items(): + if hasattr(field, "remote_field") and getattr( + field.remote_field, "through", None + ): + through_key = resolve_relation( + field.remote_field.through, app_label, model_name + ) + self.through_users[through_key] = ( + app_label, + old_model_name, + field_name, + ) + + @staticmethod + def _resolve_dependency(dependency): + """ + Return the resolved dependency and a boolean denoting whether or not + it was swappable. + """ + if dependency[0] != "__setting__": + return dependency, False + resolved_app_label, resolved_object_name = getattr( + settings, dependency[1] + ).split(".") + return (resolved_app_label, resolved_object_name.lower()) + dependency[2:], True + + def _build_migration_list(self, graph=None): + """ + Chop the lists of operations up into migrations with dependencies on + each other. Do this by going through an app's list of operations until + one is found that has an outgoing dependency that isn't in another + app's migration yet (hasn't been chopped off its list). Then chop off + the operations before it into a migration and move onto the next app. + If the loops completes without doing anything, there's a circular + dependency (which _should_ be impossible as the operations are + all split at this point so they can't depend and be depended on). + """ + self.migrations = {} + num_ops = sum(len(x) for x in self.generated_operations.values()) + chop_mode = False + while num_ops: + # On every iteration, we step through all the apps and see if there + # is a completed set of operations. + # If we find that a subset of the operations are complete we can + # try to chop it off from the rest and continue, but we only + # do this if we've already been through the list once before + # without any chopping and nothing has changed. + for app_label in sorted(self.generated_operations): + chopped = [] + dependencies = set() + for operation in list(self.generated_operations[app_label]): + deps_satisfied = True + operation_dependencies = set() + for dep in operation._auto_deps: + # Temporarily resolve the swappable dependency to + # prevent circular references. While keeping the + # dependency checks on the resolved model, add the + # swappable dependencies. + original_dep = dep + dep, is_swappable_dep = self._resolve_dependency(dep) + if dep[0] != app_label: + # External app dependency. See if it's not yet + # satisfied. + for other_operation in self.generated_operations.get( + dep[0], [] + ): + if self.check_dependency(other_operation, dep): + deps_satisfied = False + break + if not deps_satisfied: + break + else: + if is_swappable_dep: + operation_dependencies.add( + (original_dep[0], original_dep[1]) + ) + elif dep[0] in self.migrations: + operation_dependencies.add( + (dep[0], self.migrations[dep[0]][-1].name) + ) + else: + # If we can't find the other app, we add a + # first/last dependency, but only if we've + # already been through once and checked + # everything. + if chop_mode: + # If the app already exists, we add a + # dependency on the last migration, as + # we don't know which migration + # contains the target field. If it's + # not yet migrated or has no + # migrations, we use __first__. + if graph and graph.leaf_nodes(dep[0]): + operation_dependencies.add( + graph.leaf_nodes(dep[0])[0] + ) + else: + operation_dependencies.add( + (dep[0], "__first__") + ) + else: + deps_satisfied = False + if deps_satisfied: + chopped.append(operation) + dependencies.update(operation_dependencies) + del self.generated_operations[app_label][0] + else: + break + # Make a migration! Well, only if there's stuff to put in it + if dependencies or chopped: + if not self.generated_operations[app_label] or chop_mode: + subclass = type( + "Migration", + (Migration,), + {"operations": [], "dependencies": []}, + ) + instance = subclass( + "auto_%i" % (len(self.migrations.get(app_label, [])) + 1), + app_label, + ) + instance.dependencies = list(dependencies) + instance.operations = chopped + instance.initial = app_label not in self.existing_apps + self.migrations.setdefault(app_label, []).append(instance) + chop_mode = False + else: + self.generated_operations[app_label] = ( + chopped + self.generated_operations[app_label] + ) + new_num_ops = sum(len(x) for x in self.generated_operations.values()) + if new_num_ops == num_ops: + if not chop_mode: + chop_mode = True + else: + raise ValueError( + "Cannot resolve operation dependencies: %r" + % self.generated_operations + ) + num_ops = new_num_ops + + def _sort_migrations(self): + """ + Reorder to make things possible. Reordering may be needed so FKs work + nicely inside the same app. + """ + for app_label, ops in sorted(self.generated_operations.items()): + # construct a dependency graph for intra-app dependencies + dependency_graph = {op: set() for op in ops} + for op in ops: + for dep in op._auto_deps: + # Resolve intra-app dependencies to handle circular + # references involving a swappable model. + dep = self._resolve_dependency(dep)[0] + if dep[0] == app_label: + for op2 in ops: + if self.check_dependency(op2, dep): + dependency_graph[op].add(op2) + + # we use a stable sort for deterministic tests & general behavior + self.generated_operations[app_label] = stable_topological_sort( + ops, dependency_graph + ) + + def _optimize_migrations(self): + # Add in internal dependencies among the migrations + for app_label, migrations in self.migrations.items(): + for m1, m2 in zip(migrations, migrations[1:]): + m2.dependencies.append((app_label, m1.name)) + + # De-dupe dependencies + for migrations in self.migrations.values(): + for migration in migrations: + migration.dependencies = list(set(migration.dependencies)) + + # Optimize migrations + for app_label, migrations in self.migrations.items(): + for migration in migrations: + migration.operations = MigrationOptimizer().optimize( + migration.operations, app_label + ) + + def check_dependency(self, operation, dependency): + """ + Return True if the given operation depends on the given dependency, + False otherwise. + """ + # Created model + if dependency[2] is None and dependency[3] is True: + return ( + isinstance(operation, operations.CreateModel) + and operation.name_lower == dependency[1].lower() + ) + # Created field + elif dependency[2] is not None and dependency[3] is True: + return ( + isinstance(operation, operations.CreateModel) + and operation.name_lower == dependency[1].lower() + and any(dependency[2] == x for x, y in operation.fields) + ) or ( + isinstance(operation, operations.AddField) + and operation.model_name_lower == dependency[1].lower() + and operation.name_lower == dependency[2].lower() + ) + # Removed field + elif dependency[2] is not None and dependency[3] is False: + return ( + isinstance(operation, operations.RemoveField) + and operation.model_name_lower == dependency[1].lower() + and operation.name_lower == dependency[2].lower() + ) + # Removed model + elif dependency[2] is None and dependency[3] is False: + return ( + isinstance(operation, operations.DeleteModel) + and operation.name_lower == dependency[1].lower() + ) + # Field being altered + elif dependency[2] is not None and dependency[3] == "alter": + return ( + isinstance(operation, operations.AlterField) + and operation.model_name_lower == dependency[1].lower() + and operation.name_lower == dependency[2].lower() + ) + # order_with_respect_to being unset for a field + elif dependency[2] is not None and dependency[3] == "order_wrt_unset": + return ( + isinstance(operation, operations.AlterOrderWithRespectTo) + and operation.name_lower == dependency[1].lower() + and (operation.order_with_respect_to or "").lower() + != dependency[2].lower() + ) + # Field is removed and part of an index/unique_together + elif dependency[2] is not None and dependency[3] == "foo_together_change": + return ( + isinstance( + operation, + (operations.AlterUniqueTogether, operations.AlterIndexTogether), + ) + and operation.name_lower == dependency[1].lower() + ) + # Unknown dependency. Raise an error. + else: + raise ValueError("Can't handle dependency %r" % (dependency,)) + + def add_operation(self, app_label, operation, dependencies=None, beginning=False): + # Dependencies are + # (app_label, model_name, field_name, create/delete as True/False) + operation._auto_deps = dependencies or [] + if beginning: + self.generated_operations.setdefault(app_label, []).insert(0, operation) + else: + self.generated_operations.setdefault(app_label, []).append(operation) + + def swappable_first_key(self, item): + """ + Place potential swappable models first in lists of created models (only + real way to solve #22783). + """ + try: + model_state = self.to_state.models[item] + base_names = { + base if isinstance(base, str) else base.__name__ + for base in model_state.bases + } + string_version = "%s.%s" % (item[0], item[1]) + if ( + model_state.options.get("swappable") + or "AbstractUser" in base_names + or "AbstractBaseUser" in base_names + or settings.AUTH_USER_MODEL.lower() == string_version.lower() + ): + return ("___" + item[0], "___" + item[1]) + except LookupError: + pass + return item + + def generate_renamed_models(self): + """ + Find any renamed models, generate the operations for them, and remove + the old entry from the model lists. Must be run before other + model-level generation. + """ + self.renamed_models = {} + self.renamed_models_rel = {} + added_models = self.new_model_keys - self.old_model_keys + for app_label, model_name in sorted(added_models): + model_state = self.to_state.models[app_label, model_name] + model_fields_def = self.only_relation_agnostic_fields(model_state.fields) + + removed_models = self.old_model_keys - self.new_model_keys + for rem_app_label, rem_model_name in removed_models: + if rem_app_label == app_label: + rem_model_state = self.from_state.models[ + rem_app_label, rem_model_name + ] + rem_model_fields_def = self.only_relation_agnostic_fields( + rem_model_state.fields + ) + if model_fields_def == rem_model_fields_def: + if self.questioner.ask_rename_model( + rem_model_state, model_state + ): + dependencies = [] + fields = list(model_state.fields.values()) + [ + field.remote_field + for relations in self.to_state.relations[ + app_label, model_name + ].values() + for field in relations.values() + ] + for field in fields: + if field.is_relation: + dependencies.extend( + self._get_dependencies_for_foreign_key( + app_label, + model_name, + field, + self.to_state, + ) + ) + self.add_operation( + app_label, + operations.RenameModel( + old_name=rem_model_state.name, + new_name=model_state.name, + ), + dependencies=dependencies, + ) + self.renamed_models[app_label, model_name] = rem_model_name + renamed_models_rel_key = "%s.%s" % ( + rem_model_state.app_label, + rem_model_state.name_lower, + ) + self.renamed_models_rel[ + renamed_models_rel_key + ] = "%s.%s" % ( + model_state.app_label, + model_state.name_lower, + ) + self.old_model_keys.remove((rem_app_label, rem_model_name)) + self.old_model_keys.add((app_label, model_name)) + break + + def generate_created_models(self): + """ + Find all new models (both managed and unmanaged) and make create + operations for them as well as separate operations to create any + foreign key or M2M relationships (these are optimized later, if + possible). + + Defer any model options that refer to collections of fields that might + be deferred (e.g. unique_together, index_together). + """ + old_keys = self.old_model_keys | self.old_unmanaged_keys + added_models = self.new_model_keys - old_keys + added_unmanaged_models = self.new_unmanaged_keys - old_keys + all_added_models = chain( + sorted(added_models, key=self.swappable_first_key, reverse=True), + sorted(added_unmanaged_models, key=self.swappable_first_key, reverse=True), + ) + for app_label, model_name in all_added_models: + model_state = self.to_state.models[app_label, model_name] + # Gather related fields + related_fields = {} + primary_key_rel = None + for field_name, field in model_state.fields.items(): + if field.remote_field: + if field.remote_field.model: + if field.primary_key: + primary_key_rel = field.remote_field.model + elif not field.remote_field.parent_link: + related_fields[field_name] = field + if getattr(field.remote_field, "through", None): + related_fields[field_name] = field + + # Are there indexes/unique|index_together to defer? + indexes = model_state.options.pop("indexes") + constraints = model_state.options.pop("constraints") + unique_together = model_state.options.pop("unique_together", None) + index_together = model_state.options.pop("index_together", None) + order_with_respect_to = model_state.options.pop( + "order_with_respect_to", None + ) + # Depend on the deletion of any possible proxy version of us + dependencies = [ + (app_label, model_name, None, False), + ] + # Depend on all bases + for base in model_state.bases: + if isinstance(base, str) and "." in base: + base_app_label, base_name = base.split(".", 1) + dependencies.append((base_app_label, base_name, None, True)) + # Depend on the removal of base fields if the new model has + # a field with the same name. + old_base_model_state = self.from_state.models.get( + (base_app_label, base_name) + ) + new_base_model_state = self.to_state.models.get( + (base_app_label, base_name) + ) + if old_base_model_state and new_base_model_state: + removed_base_fields = ( + set(old_base_model_state.fields) + .difference( + new_base_model_state.fields, + ) + .intersection(model_state.fields) + ) + for removed_base_field in removed_base_fields: + dependencies.append( + (base_app_label, base_name, removed_base_field, False) + ) + # Depend on the other end of the primary key if it's a relation + if primary_key_rel: + dependencies.append( + resolve_relation( + primary_key_rel, + app_label, + model_name, + ) + + (None, True) + ) + # Generate creation operation + self.add_operation( + app_label, + operations.CreateModel( + name=model_state.name, + fields=[ + d + for d in model_state.fields.items() + if d[0] not in related_fields + ], + options=model_state.options, + bases=model_state.bases, + managers=model_state.managers, + ), + dependencies=dependencies, + beginning=True, + ) + + # Don't add operations which modify the database for unmanaged models + if not model_state.options.get("managed", True): + continue + + # Generate operations for each related field + for name, field in sorted(related_fields.items()): + dependencies = self._get_dependencies_for_foreign_key( + app_label, + model_name, + field, + self.to_state, + ) + # Depend on our own model being created + dependencies.append((app_label, model_name, None, True)) + # Make operation + self.add_operation( + app_label, + operations.AddField( + model_name=model_name, + name=name, + field=field, + ), + dependencies=list(set(dependencies)), + ) + # Generate other opns + if order_with_respect_to: + self.add_operation( + app_label, + operations.AlterOrderWithRespectTo( + name=model_name, + order_with_respect_to=order_with_respect_to, + ), + dependencies=[ + (app_label, model_name, order_with_respect_to, True), + (app_label, model_name, None, True), + ], + ) + related_dependencies = [ + (app_label, model_name, name, True) for name in sorted(related_fields) + ] + related_dependencies.append((app_label, model_name, None, True)) + for index in indexes: + self.add_operation( + app_label, + operations.AddIndex( + model_name=model_name, + index=index, + ), + dependencies=related_dependencies, + ) + for constraint in constraints: + self.add_operation( + app_label, + operations.AddConstraint( + model_name=model_name, + constraint=constraint, + ), + dependencies=related_dependencies, + ) + if unique_together: + self.add_operation( + app_label, + operations.AlterUniqueTogether( + name=model_name, + unique_together=unique_together, + ), + dependencies=related_dependencies, + ) + if index_together: + self.add_operation( + app_label, + operations.AlterIndexTogether( + name=model_name, + index_together=index_together, + ), + dependencies=related_dependencies, + ) + # Fix relationships if the model changed from a proxy model to a + # concrete model. + relations = self.to_state.relations + if (app_label, model_name) in self.old_proxy_keys: + for related_model_key, related_fields in relations[ + app_label, model_name + ].items(): + related_model_state = self.to_state.models[related_model_key] + for related_field_name, related_field in related_fields.items(): + self.add_operation( + related_model_state.app_label, + operations.AlterField( + model_name=related_model_state.name, + name=related_field_name, + field=related_field, + ), + dependencies=[(app_label, model_name, None, True)], + ) + + def generate_created_proxies(self): + """ + Make CreateModel statements for proxy models. Use the same statements + as that way there's less code duplication, but for proxy models it's + safe to skip all the pointless field stuff and chuck out an operation. + """ + added = self.new_proxy_keys - self.old_proxy_keys + for app_label, model_name in sorted(added): + model_state = self.to_state.models[app_label, model_name] + assert model_state.options.get("proxy") + # Depend on the deletion of any possible non-proxy version of us + dependencies = [ + (app_label, model_name, None, False), + ] + # Depend on all bases + for base in model_state.bases: + if isinstance(base, str) and "." in base: + base_app_label, base_name = base.split(".", 1) + dependencies.append((base_app_label, base_name, None, True)) + # Generate creation operation + self.add_operation( + app_label, + operations.CreateModel( + name=model_state.name, + fields=[], + options=model_state.options, + bases=model_state.bases, + managers=model_state.managers, + ), + # Depend on the deletion of any possible non-proxy version of us + dependencies=dependencies, + ) + + def generate_deleted_models(self): + """ + Find all deleted models (managed and unmanaged) and make delete + operations for them as well as separate operations to delete any + foreign key or M2M relationships (these are optimized later, if + possible). + + Also bring forward removal of any model options that refer to + collections of fields - the inverse of generate_created_models(). + """ + new_keys = self.new_model_keys | self.new_unmanaged_keys + deleted_models = self.old_model_keys - new_keys + deleted_unmanaged_models = self.old_unmanaged_keys - new_keys + all_deleted_models = chain( + sorted(deleted_models), sorted(deleted_unmanaged_models) + ) + for app_label, model_name in all_deleted_models: + model_state = self.from_state.models[app_label, model_name] + # Gather related fields + related_fields = {} + for field_name, field in model_state.fields.items(): + if field.remote_field: + if field.remote_field.model: + related_fields[field_name] = field + if getattr(field.remote_field, "through", None): + related_fields[field_name] = field + # Generate option removal first + unique_together = model_state.options.pop("unique_together", None) + index_together = model_state.options.pop("index_together", None) + if unique_together: + self.add_operation( + app_label, + operations.AlterUniqueTogether( + name=model_name, + unique_together=None, + ), + ) + if index_together: + self.add_operation( + app_label, + operations.AlterIndexTogether( + name=model_name, + index_together=None, + ), + ) + # Then remove each related field + for name in sorted(related_fields): + self.add_operation( + app_label, + operations.RemoveField( + model_name=model_name, + name=name, + ), + ) + # Finally, remove the model. + # This depends on both the removal/alteration of all incoming fields + # and the removal of all its own related fields, and if it's + # a through model the field that references it. + dependencies = [] + relations = self.from_state.relations + for ( + related_object_app_label, + object_name, + ), relation_related_fields in relations[app_label, model_name].items(): + for field_name, field in relation_related_fields.items(): + dependencies.append( + (related_object_app_label, object_name, field_name, False), + ) + if not field.many_to_many: + dependencies.append( + ( + related_object_app_label, + object_name, + field_name, + "alter", + ), + ) + + for name in sorted(related_fields): + dependencies.append((app_label, model_name, name, False)) + # We're referenced in another field's through= + through_user = self.through_users.get((app_label, model_state.name_lower)) + if through_user: + dependencies.append( + (through_user[0], through_user[1], through_user[2], False) + ) + # Finally, make the operation, deduping any dependencies + self.add_operation( + app_label, + operations.DeleteModel( + name=model_state.name, + ), + dependencies=list(set(dependencies)), + ) + + def generate_deleted_proxies(self): + """Make DeleteModel options for proxy models.""" + deleted = self.old_proxy_keys - self.new_proxy_keys + for app_label, model_name in sorted(deleted): + model_state = self.from_state.models[app_label, model_name] + assert model_state.options.get("proxy") + self.add_operation( + app_label, + operations.DeleteModel( + name=model_state.name, + ), + ) + + def generate_renamed_fields(self): + """Work out renamed fields.""" + self.renamed_fields = {} + for app_label, model_name, field_name in sorted( + self.new_field_keys - self.old_field_keys + ): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + field = new_model_state.get_field(field_name) + # Scan to see if this is actually a rename! + field_dec = self.deep_deconstruct(field) + for rem_app_label, rem_model_name, rem_field_name in sorted( + self.old_field_keys - self.new_field_keys + ): + if rem_app_label == app_label and rem_model_name == model_name: + old_field = old_model_state.get_field(rem_field_name) + old_field_dec = self.deep_deconstruct(old_field) + if ( + field.remote_field + and field.remote_field.model + and "to" in old_field_dec[2] + ): + old_rel_to = old_field_dec[2]["to"] + if old_rel_to in self.renamed_models_rel: + old_field_dec[2]["to"] = self.renamed_models_rel[old_rel_to] + old_field.set_attributes_from_name(rem_field_name) + old_db_column = old_field.get_attname_column()[1] + if old_field_dec == field_dec or ( + # Was the field renamed and db_column equal to the + # old field's column added? + old_field_dec[0:2] == field_dec[0:2] + and dict(old_field_dec[2], db_column=old_db_column) + == field_dec[2] + ): + if self.questioner.ask_rename( + model_name, rem_field_name, field_name, field + ): + self.add_operation( + app_label, + operations.RenameField( + model_name=model_name, + old_name=rem_field_name, + new_name=field_name, + ), + ) + self.old_field_keys.remove( + (rem_app_label, rem_model_name, rem_field_name) + ) + self.old_field_keys.add((app_label, model_name, field_name)) + self.renamed_fields[ + app_label, model_name, field_name + ] = rem_field_name + break + + def generate_added_fields(self): + """Make AddField operations.""" + for app_label, model_name, field_name in sorted( + self.new_field_keys - self.old_field_keys + ): + self._generate_added_field(app_label, model_name, field_name) + + def _generate_added_field(self, app_label, model_name, field_name): + field = self.to_state.models[app_label, model_name].get_field(field_name) + # Fields that are foreignkeys/m2ms depend on stuff + dependencies = [] + if field.remote_field and field.remote_field.model: + dependencies.extend( + self._get_dependencies_for_foreign_key( + app_label, + model_name, + field, + self.to_state, + ) + ) + # You can't just add NOT NULL fields with no default or fields + # which don't allow empty strings as default. + time_fields = (models.DateField, models.DateTimeField, models.TimeField) + preserve_default = ( + field.null + or field.has_default() + or field.many_to_many + or (field.blank and field.empty_strings_allowed) + or (isinstance(field, time_fields) and field.auto_now) + ) + if not preserve_default: + field = field.clone() + if isinstance(field, time_fields) and field.auto_now_add: + field.default = self.questioner.ask_auto_now_add_addition( + field_name, model_name + ) + else: + field.default = self.questioner.ask_not_null_addition( + field_name, model_name + ) + self.add_operation( + app_label, + operations.AddField( + model_name=model_name, + name=field_name, + field=field, + preserve_default=preserve_default, + ), + dependencies=dependencies, + ) + + def generate_removed_fields(self): + """Make RemoveField operations.""" + for app_label, model_name, field_name in sorted( + self.old_field_keys - self.new_field_keys + ): + self._generate_removed_field(app_label, model_name, field_name) + + def _generate_removed_field(self, app_label, model_name, field_name): + self.add_operation( + app_label, + operations.RemoveField( + model_name=model_name, + name=field_name, + ), + # We might need to depend on the removal of an + # order_with_respect_to or index/unique_together operation; + # this is safely ignored if there isn't one + dependencies=[ + (app_label, model_name, field_name, "order_wrt_unset"), + (app_label, model_name, field_name, "foo_together_change"), + ], + ) + + def generate_altered_fields(self): + """ + Make AlterField operations, or possibly RemovedField/AddField if alter + isn't possible. + """ + for app_label, model_name, field_name in sorted( + self.old_field_keys & self.new_field_keys + ): + # Did the field change? + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_field_name = self.renamed_fields.get( + (app_label, model_name, field_name), field_name + ) + old_field = self.from_state.models[app_label, old_model_name].get_field( + old_field_name + ) + new_field = self.to_state.models[app_label, model_name].get_field( + field_name + ) + dependencies = [] + # Implement any model renames on relations; these are handled by RenameModel + # so we need to exclude them from the comparison + if hasattr(new_field, "remote_field") and getattr( + new_field.remote_field, "model", None + ): + rename_key = resolve_relation( + new_field.remote_field.model, app_label, model_name + ) + if rename_key in self.renamed_models: + new_field.remote_field.model = old_field.remote_field.model + # Handle ForeignKey which can only have a single to_field. + remote_field_name = getattr(new_field.remote_field, "field_name", None) + if remote_field_name: + to_field_rename_key = rename_key + (remote_field_name,) + if to_field_rename_key in self.renamed_fields: + # Repoint both model and field name because to_field + # inclusion in ForeignKey.deconstruct() is based on + # both. + new_field.remote_field.model = old_field.remote_field.model + new_field.remote_field.field_name = ( + old_field.remote_field.field_name + ) + # Handle ForeignObjects which can have multiple from_fields/to_fields. + from_fields = getattr(new_field, "from_fields", None) + if from_fields: + from_rename_key = (app_label, model_name) + new_field.from_fields = tuple( + [ + self.renamed_fields.get( + from_rename_key + (from_field,), from_field + ) + for from_field in from_fields + ] + ) + new_field.to_fields = tuple( + [ + self.renamed_fields.get(rename_key + (to_field,), to_field) + for to_field in new_field.to_fields + ] + ) + dependencies.extend( + self._get_dependencies_for_foreign_key( + app_label, + model_name, + new_field, + self.to_state, + ) + ) + if hasattr(new_field, "remote_field") and getattr( + new_field.remote_field, "through", None + ): + rename_key = resolve_relation( + new_field.remote_field.through, app_label, model_name + ) + if rename_key in self.renamed_models: + new_field.remote_field.through = old_field.remote_field.through + old_field_dec = self.deep_deconstruct(old_field) + new_field_dec = self.deep_deconstruct(new_field) + if old_field_dec != new_field_dec: + both_m2m = old_field.many_to_many and new_field.many_to_many + neither_m2m = not old_field.many_to_many and not new_field.many_to_many + if both_m2m or neither_m2m: + # Either both fields are m2m or neither is + preserve_default = True + if ( + old_field.null + and not new_field.null + and not new_field.has_default() + and not new_field.many_to_many + ): + field = new_field.clone() + new_default = self.questioner.ask_not_null_alteration( + field_name, model_name + ) + if new_default is not models.NOT_PROVIDED: + field.default = new_default + preserve_default = False + else: + field = new_field + self.add_operation( + app_label, + operations.AlterField( + model_name=model_name, + name=field_name, + field=field, + preserve_default=preserve_default, + ), + dependencies=dependencies, + ) + else: + # We cannot alter between m2m and concrete fields + self._generate_removed_field(app_label, model_name, field_name) + self._generate_added_field(app_label, model_name, field_name) + + def create_altered_indexes(self): + option_name = operations.AddIndex.option_name + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + + old_indexes = old_model_state.options[option_name] + new_indexes = new_model_state.options[option_name] + add_idx = [idx for idx in new_indexes if idx not in old_indexes] + rem_idx = [idx for idx in old_indexes if idx not in new_indexes] + + self.altered_indexes.update( + { + (app_label, model_name): { + "added_indexes": add_idx, + "removed_indexes": rem_idx, + } + } + ) + + def generate_added_indexes(self): + for (app_label, model_name), alt_indexes in self.altered_indexes.items(): + for index in alt_indexes["added_indexes"]: + self.add_operation( + app_label, + operations.AddIndex( + model_name=model_name, + index=index, + ), + ) + + def generate_removed_indexes(self): + for (app_label, model_name), alt_indexes in self.altered_indexes.items(): + for index in alt_indexes["removed_indexes"]: + self.add_operation( + app_label, + operations.RemoveIndex( + model_name=model_name, + name=index.name, + ), + ) + + def create_altered_constraints(self): + option_name = operations.AddConstraint.option_name + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + + old_constraints = old_model_state.options[option_name] + new_constraints = new_model_state.options[option_name] + add_constraints = [c for c in new_constraints if c not in old_constraints] + rem_constraints = [c for c in old_constraints if c not in new_constraints] + + self.altered_constraints.update( + { + (app_label, model_name): { + "added_constraints": add_constraints, + "removed_constraints": rem_constraints, + } + } + ) + + def generate_added_constraints(self): + for ( + app_label, + model_name, + ), alt_constraints in self.altered_constraints.items(): + for constraint in alt_constraints["added_constraints"]: + self.add_operation( + app_label, + operations.AddConstraint( + model_name=model_name, + constraint=constraint, + ), + ) + + def generate_removed_constraints(self): + for ( + app_label, + model_name, + ), alt_constraints in self.altered_constraints.items(): + for constraint in alt_constraints["removed_constraints"]: + self.add_operation( + app_label, + operations.RemoveConstraint( + model_name=model_name, + name=constraint.name, + ), + ) + + @staticmethod + def _get_dependencies_for_foreign_key(app_label, model_name, field, project_state): + remote_field_model = None + if hasattr(field.remote_field, "model"): + remote_field_model = field.remote_field.model + else: + relations = project_state.relations[app_label, model_name] + for (remote_app_label, remote_model_name), fields in relations.items(): + if any( + field == related_field.remote_field + for related_field in fields.values() + ): + remote_field_model = f"{remote_app_label}.{remote_model_name}" + break + # Account for FKs to swappable models + swappable_setting = getattr(field, "swappable_setting", None) + if swappable_setting is not None: + dep_app_label = "__setting__" + dep_object_name = swappable_setting + else: + dep_app_label, dep_object_name = resolve_relation( + remote_field_model, + app_label, + model_name, + ) + dependencies = [(dep_app_label, dep_object_name, None, True)] + if getattr(field.remote_field, "through", None): + through_app_label, through_object_name = resolve_relation( + remote_field_model, + app_label, + model_name, + ) + dependencies.append((through_app_label, through_object_name, None, True)) + return dependencies + + def _get_altered_foo_together_operations(self, option_name): + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + + # We run the old version through the field renames to account for those + old_value = old_model_state.options.get(option_name) + old_value = ( + { + tuple( + self.renamed_fields.get((app_label, model_name, n), n) + for n in unique + ) + for unique in old_value + } + if old_value + else set() + ) + + new_value = new_model_state.options.get(option_name) + new_value = set(new_value) if new_value else set() + + if old_value != new_value: + dependencies = [] + for foo_togethers in new_value: + for field_name in foo_togethers: + field = new_model_state.get_field(field_name) + if field.remote_field and field.remote_field.model: + dependencies.extend( + self._get_dependencies_for_foreign_key( + app_label, + model_name, + field, + self.to_state, + ) + ) + yield ( + old_value, + new_value, + app_label, + model_name, + dependencies, + ) + + def _generate_removed_altered_foo_together(self, operation): + for ( + old_value, + new_value, + app_label, + model_name, + dependencies, + ) in self._get_altered_foo_together_operations(operation.option_name): + removal_value = new_value.intersection(old_value) + if removal_value or old_value: + self.add_operation( + app_label, + operation( + name=model_name, **{operation.option_name: removal_value} + ), + dependencies=dependencies, + ) + + def generate_removed_altered_unique_together(self): + self._generate_removed_altered_foo_together(operations.AlterUniqueTogether) + + def generate_removed_altered_index_together(self): + self._generate_removed_altered_foo_together(operations.AlterIndexTogether) + + def _generate_altered_foo_together(self, operation): + for ( + old_value, + new_value, + app_label, + model_name, + dependencies, + ) in self._get_altered_foo_together_operations(operation.option_name): + removal_value = new_value.intersection(old_value) + if new_value != removal_value: + self.add_operation( + app_label, + operation(name=model_name, **{operation.option_name: new_value}), + dependencies=dependencies, + ) + + def generate_altered_unique_together(self): + self._generate_altered_foo_together(operations.AlterUniqueTogether) + + def generate_altered_index_together(self): + self._generate_altered_foo_together(operations.AlterIndexTogether) + + def generate_altered_db_table(self): + models_to_check = self.kept_model_keys.union( + self.kept_proxy_keys, self.kept_unmanaged_keys + ) + for app_label, model_name in sorted(models_to_check): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + old_db_table_name = old_model_state.options.get("db_table") + new_db_table_name = new_model_state.options.get("db_table") + if old_db_table_name != new_db_table_name: + self.add_operation( + app_label, + operations.AlterModelTable( + name=model_name, + table=new_db_table_name, + ), + ) + + def generate_altered_options(self): + """ + Work out if any non-schema-affecting options have changed and make an + operation to represent them in state changes (in case Python code in + migrations needs them). + """ + models_to_check = self.kept_model_keys.union( + self.kept_proxy_keys, + self.kept_unmanaged_keys, + # unmanaged converted to managed + self.old_unmanaged_keys & self.new_model_keys, + # managed converted to unmanaged + self.old_model_keys & self.new_unmanaged_keys, + ) + + for app_label, model_name in sorted(models_to_check): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + old_options = { + key: value + for key, value in old_model_state.options.items() + if key in AlterModelOptions.ALTER_OPTION_KEYS + } + new_options = { + key: value + for key, value in new_model_state.options.items() + if key in AlterModelOptions.ALTER_OPTION_KEYS + } + if old_options != new_options: + self.add_operation( + app_label, + operations.AlterModelOptions( + name=model_name, + options=new_options, + ), + ) + + def generate_altered_order_with_respect_to(self): + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + if old_model_state.options.get( + "order_with_respect_to" + ) != new_model_state.options.get("order_with_respect_to"): + # Make sure it comes second if we're adding + # (removal dependency is part of RemoveField) + dependencies = [] + if new_model_state.options.get("order_with_respect_to"): + dependencies.append( + ( + app_label, + model_name, + new_model_state.options["order_with_respect_to"], + True, + ) + ) + # Actually generate the operation + self.add_operation( + app_label, + operations.AlterOrderWithRespectTo( + name=model_name, + order_with_respect_to=new_model_state.options.get( + "order_with_respect_to" + ), + ), + dependencies=dependencies, + ) + + def generate_altered_managers(self): + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get( + (app_label, model_name), model_name + ) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + if old_model_state.managers != new_model_state.managers: + self.add_operation( + app_label, + operations.AlterModelManagers( + name=model_name, + managers=new_model_state.managers, + ), + ) + + def arrange_for_graph(self, changes, graph, migration_name=None): + """ + Take a result from changes() and a MigrationGraph, and fix the names + and dependencies of the changes so they extend the graph from the leaf + nodes for each app. + """ + leaves = graph.leaf_nodes() + name_map = {} + for app_label, migrations in list(changes.items()): + if not migrations: + continue + # Find the app label's current leaf node + app_leaf = None + for leaf in leaves: + if leaf[0] == app_label: + app_leaf = leaf + break + # Do they want an initial migration for this app? + if app_leaf is None and not self.questioner.ask_initial(app_label): + # They don't. + for migration in migrations: + name_map[(app_label, migration.name)] = (app_label, "__first__") + del changes[app_label] + continue + # Work out the next number in the sequence + if app_leaf is None: + next_number = 1 + else: + next_number = (self.parse_number(app_leaf[1]) or 0) + 1 + # Name each migration + for i, migration in enumerate(migrations): + if i == 0 and app_leaf: + migration.dependencies.append(app_leaf) + new_name_parts = ["%04i" % next_number] + if migration_name: + new_name_parts.append(migration_name) + elif i == 0 and not app_leaf: + new_name_parts.append("initial") + else: + new_name_parts.append(migration.suggest_name()[:100]) + new_name = "_".join(new_name_parts) + name_map[(app_label, migration.name)] = (app_label, new_name) + next_number += 1 + migration.name = new_name + # Now fix dependencies + for migrations in changes.values(): + for migration in migrations: + migration.dependencies = [ + name_map.get(d, d) for d in migration.dependencies + ] + return changes + + def _trim_to_apps(self, changes, app_labels): + """ + Take changes from arrange_for_graph() and set of app labels, and return + a modified set of changes which trims out as many migrations that are + not in app_labels as possible. Note that some other migrations may + still be present as they may be required dependencies. + """ + # Gather other app dependencies in a first pass + app_dependencies = {} + for app_label, migrations in changes.items(): + for migration in migrations: + for dep_app_label, name in migration.dependencies: + app_dependencies.setdefault(app_label, set()).add(dep_app_label) + required_apps = set(app_labels) + # Keep resolving till there's no change + old_required_apps = None + while old_required_apps != required_apps: + old_required_apps = set(required_apps) + required_apps.update( + *[app_dependencies.get(app_label, ()) for app_label in required_apps] + ) + # Remove all migrations that aren't needed + for app_label in list(changes): + if app_label not in required_apps: + del changes[app_label] + return changes + + @classmethod + def parse_number(cls, name): + """ + Given a migration name, try to extract a number from the beginning of + it. If no number is found, return None. + """ + match = re.match(r"^\d+", name) + if match: + return int(match[0]) + return None diff --git a/venv/Lib/site-packages/django/db/migrations/exceptions.py b/venv/Lib/site-packages/django/db/migrations/exceptions.py new file mode 100644 index 000000000..dd556dacb --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/exceptions.py @@ -0,0 +1,60 @@ +from django.db import DatabaseError + + +class AmbiguityError(Exception): + """More than one migration matches a name prefix.""" + + pass + + +class BadMigrationError(Exception): + """There's a bad migration (unreadable/bad format/etc.).""" + + pass + + +class CircularDependencyError(Exception): + """There's an impossible-to-resolve circular dependency.""" + + pass + + +class InconsistentMigrationHistory(Exception): + """An applied migration has some of its dependencies not applied.""" + + pass + + +class InvalidBasesError(ValueError): + """A model's base classes can't be resolved.""" + + pass + + +class IrreversibleError(RuntimeError): + """An irreversible migration is about to be reversed.""" + + pass + + +class NodeNotFoundError(LookupError): + """An attempt on a node is made that is not available in the graph.""" + + def __init__(self, message, node, origin=None): + self.message = message + self.origin = origin + self.node = node + + def __str__(self): + return self.message + + def __repr__(self): + return "NodeNotFoundError(%r)" % (self.node,) + + +class MigrationSchemaMissing(DatabaseError): + pass + + +class InvalidMigrationPlan(ValueError): + pass diff --git a/venv/Lib/site-packages/django/db/migrations/executor.py b/venv/Lib/site-packages/django/db/migrations/executor.py new file mode 100644 index 000000000..2d08f4d29 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/executor.py @@ -0,0 +1,406 @@ +from django.apps.registry import apps as global_apps +from django.db import migrations, router + +from .exceptions import InvalidMigrationPlan +from .loader import MigrationLoader +from .recorder import MigrationRecorder +from .state import ProjectState + + +class MigrationExecutor: + """ + End-to-end migration execution - load migrations and run them up or down + to a specified set of targets. + """ + + def __init__(self, connection, progress_callback=None): + self.connection = connection + self.loader = MigrationLoader(self.connection) + self.recorder = MigrationRecorder(self.connection) + self.progress_callback = progress_callback + + def migration_plan(self, targets, clean_start=False): + """ + Given a set of targets, return a list of (Migration instance, backwards?). + """ + plan = [] + if clean_start: + applied = {} + else: + applied = dict(self.loader.applied_migrations) + for target in targets: + # If the target is (app_label, None), that means unmigrate everything + if target[1] is None: + for root in self.loader.graph.root_nodes(): + if root[0] == target[0]: + for migration in self.loader.graph.backwards_plan(root): + if migration in applied: + plan.append((self.loader.graph.nodes[migration], True)) + applied.pop(migration) + # If the migration is already applied, do backwards mode, + # otherwise do forwards mode. + elif target in applied: + # If the target is missing, it's likely a replaced migration. + # Reload the graph without replacements. + if ( + self.loader.replace_migrations + and target not in self.loader.graph.node_map + ): + self.loader.replace_migrations = False + self.loader.build_graph() + return self.migration_plan(targets, clean_start=clean_start) + # Don't migrate backwards all the way to the target node (that + # may roll back dependencies in other apps that don't need to + # be rolled back); instead roll back through target's immediate + # child(ren) in the same app, and no further. + next_in_app = sorted( + n + for n in self.loader.graph.node_map[target].children + if n[0] == target[0] + ) + for node in next_in_app: + for migration in self.loader.graph.backwards_plan(node): + if migration in applied: + plan.append((self.loader.graph.nodes[migration], True)) + applied.pop(migration) + else: + for migration in self.loader.graph.forwards_plan(target): + if migration not in applied: + plan.append((self.loader.graph.nodes[migration], False)) + applied[migration] = self.loader.graph.nodes[migration] + return plan + + def _create_project_state(self, with_applied_migrations=False): + """ + Create a project state including all the applications without + migrations and applied migrations if with_applied_migrations=True. + """ + state = ProjectState(real_apps=self.loader.unmigrated_apps) + if with_applied_migrations: + # Create the forwards plan Django would follow on an empty database + full_plan = self.migration_plan( + self.loader.graph.leaf_nodes(), clean_start=True + ) + applied_migrations = { + self.loader.graph.nodes[key] + for key in self.loader.applied_migrations + if key in self.loader.graph.nodes + } + for migration, _ in full_plan: + if migration in applied_migrations: + migration.mutate_state(state, preserve=False) + return state + + def migrate(self, targets, plan=None, state=None, fake=False, fake_initial=False): + """ + Migrate the database up to the given targets. + + Django first needs to create all project states before a migration is + (un)applied and in a second step run all the database operations. + """ + # The django_migrations table must be present to record applied + # migrations. + self.recorder.ensure_schema() + + if plan is None: + plan = self.migration_plan(targets) + # Create the forwards plan Django would follow on an empty database + full_plan = self.migration_plan( + self.loader.graph.leaf_nodes(), clean_start=True + ) + + all_forwards = all(not backwards for mig, backwards in plan) + all_backwards = all(backwards for mig, backwards in plan) + + if not plan: + if state is None: + # The resulting state should include applied migrations. + state = self._create_project_state(with_applied_migrations=True) + elif all_forwards == all_backwards: + # This should only happen if there's a mixed plan + raise InvalidMigrationPlan( + "Migration plans with both forwards and backwards migrations " + "are not supported. Please split your migration process into " + "separate plans of only forwards OR backwards migrations.", + plan, + ) + elif all_forwards: + if state is None: + # The resulting state should still include applied migrations. + state = self._create_project_state(with_applied_migrations=True) + state = self._migrate_all_forwards( + state, plan, full_plan, fake=fake, fake_initial=fake_initial + ) + else: + # No need to check for `elif all_backwards` here, as that condition + # would always evaluate to true. + state = self._migrate_all_backwards(plan, full_plan, fake=fake) + + self.check_replacements() + + return state + + def _migrate_all_forwards(self, state, plan, full_plan, fake, fake_initial): + """ + Take a list of 2-tuples of the form (migration instance, False) and + apply them in the order they occur in the full_plan. + """ + migrations_to_run = {m[0] for m in plan} + for migration, _ in full_plan: + if not migrations_to_run: + # We remove every migration that we applied from these sets so + # that we can bail out once the last migration has been applied + # and don't always run until the very end of the migration + # process. + break + if migration in migrations_to_run: + if "apps" not in state.__dict__: + if self.progress_callback: + self.progress_callback("render_start") + state.apps # Render all -- performance critical + if self.progress_callback: + self.progress_callback("render_success") + state = self.apply_migration( + state, migration, fake=fake, fake_initial=fake_initial + ) + migrations_to_run.remove(migration) + + return state + + def _migrate_all_backwards(self, plan, full_plan, fake): + """ + Take a list of 2-tuples of the form (migration instance, True) and + unapply them in reverse order they occur in the full_plan. + + Since unapplying a migration requires the project state prior to that + migration, Django will compute the migration states before each of them + in a first run over the plan and then unapply them in a second run over + the plan. + """ + migrations_to_run = {m[0] for m in plan} + # Holds all migration states prior to the migrations being unapplied + states = {} + state = self._create_project_state() + applied_migrations = { + self.loader.graph.nodes[key] + for key in self.loader.applied_migrations + if key in self.loader.graph.nodes + } + if self.progress_callback: + self.progress_callback("render_start") + for migration, _ in full_plan: + if not migrations_to_run: + # We remove every migration that we applied from this set so + # that we can bail out once the last migration has been applied + # and don't always run until the very end of the migration + # process. + break + if migration in migrations_to_run: + if "apps" not in state.__dict__: + state.apps # Render all -- performance critical + # The state before this migration + states[migration] = state + # The old state keeps as-is, we continue with the new state + state = migration.mutate_state(state, preserve=True) + migrations_to_run.remove(migration) + elif migration in applied_migrations: + # Only mutate the state if the migration is actually applied + # to make sure the resulting state doesn't include changes + # from unrelated migrations. + migration.mutate_state(state, preserve=False) + if self.progress_callback: + self.progress_callback("render_success") + + for migration, _ in plan: + self.unapply_migration(states[migration], migration, fake=fake) + applied_migrations.remove(migration) + + # Generate the post migration state by starting from the state before + # the last migration is unapplied and mutating it to include all the + # remaining applied migrations. + last_unapplied_migration = plan[-1][0] + state = states[last_unapplied_migration] + for index, (migration, _) in enumerate(full_plan): + if migration == last_unapplied_migration: + for migration, _ in full_plan[index:]: + if migration in applied_migrations: + migration.mutate_state(state, preserve=False) + break + + return state + + def apply_migration(self, state, migration, fake=False, fake_initial=False): + """Run a migration forwards.""" + migration_recorded = False + if self.progress_callback: + self.progress_callback("apply_start", migration, fake) + if not fake: + if fake_initial: + # Test to see if this is an already-applied initial migration + applied, state = self.detect_soft_applied(state, migration) + if applied: + fake = True + if not fake: + # Alright, do it normally + with self.connection.schema_editor( + atomic=migration.atomic + ) as schema_editor: + state = migration.apply(state, schema_editor) + if not schema_editor.deferred_sql: + self.record_migration(migration) + migration_recorded = True + if not migration_recorded: + self.record_migration(migration) + # Report progress + if self.progress_callback: + self.progress_callback("apply_success", migration, fake) + return state + + def record_migration(self, migration): + # For replacement migrations, record individual statuses + if migration.replaces: + for app_label, name in migration.replaces: + self.recorder.record_applied(app_label, name) + else: + self.recorder.record_applied(migration.app_label, migration.name) + + def unapply_migration(self, state, migration, fake=False): + """Run a migration backwards.""" + if self.progress_callback: + self.progress_callback("unapply_start", migration, fake) + if not fake: + with self.connection.schema_editor( + atomic=migration.atomic + ) as schema_editor: + state = migration.unapply(state, schema_editor) + # For replacement migrations, also record individual statuses. + if migration.replaces: + for app_label, name in migration.replaces: + self.recorder.record_unapplied(app_label, name) + self.recorder.record_unapplied(migration.app_label, migration.name) + # Report progress + if self.progress_callback: + self.progress_callback("unapply_success", migration, fake) + return state + + def check_replacements(self): + """ + Mark replacement migrations applied if their replaced set all are. + + Do this unconditionally on every migrate, rather than just when + migrations are applied or unapplied, to correctly handle the case + when a new squash migration is pushed to a deployment that already had + all its replaced migrations applied. In this case no new migration will + be applied, but the applied state of the squashed migration must be + maintained. + """ + applied = self.recorder.applied_migrations() + for key, migration in self.loader.replacements.items(): + all_applied = all(m in applied for m in migration.replaces) + if all_applied and key not in applied: + self.recorder.record_applied(*key) + + def detect_soft_applied(self, project_state, migration): + """ + Test whether a migration has been implicitly applied - that the + tables or columns it would create exist. This is intended only for use + on initial migrations (as it only looks for CreateModel and AddField). + """ + + def should_skip_detecting_model(migration, model): + """ + No need to detect tables for proxy models, unmanaged models, or + models that can't be migrated on the current database. + """ + return ( + model._meta.proxy + or not model._meta.managed + or not router.allow_migrate( + self.connection.alias, + migration.app_label, + model_name=model._meta.model_name, + ) + ) + + if migration.initial is None: + # Bail if the migration isn't the first one in its app + if any(app == migration.app_label for app, name in migration.dependencies): + return False, project_state + elif migration.initial is False: + # Bail if it's NOT an initial migration + return False, project_state + + if project_state is None: + after_state = self.loader.project_state( + (migration.app_label, migration.name), at_end=True + ) + else: + after_state = migration.mutate_state(project_state) + apps = after_state.apps + found_create_model_migration = False + found_add_field_migration = False + fold_identifier_case = self.connection.features.ignores_table_name_case + with self.connection.cursor() as cursor: + existing_table_names = set( + self.connection.introspection.table_names(cursor) + ) + if fold_identifier_case: + existing_table_names = { + name.casefold() for name in existing_table_names + } + # Make sure all create model and add field operations are done + for operation in migration.operations: + if isinstance(operation, migrations.CreateModel): + model = apps.get_model(migration.app_label, operation.name) + if model._meta.swapped: + # We have to fetch the model to test with from the + # main app cache, as it's not a direct dependency. + model = global_apps.get_model(model._meta.swapped) + if should_skip_detecting_model(migration, model): + continue + db_table = model._meta.db_table + if fold_identifier_case: + db_table = db_table.casefold() + if db_table not in existing_table_names: + return False, project_state + found_create_model_migration = True + elif isinstance(operation, migrations.AddField): + model = apps.get_model(migration.app_label, operation.model_name) + if model._meta.swapped: + # We have to fetch the model to test with from the + # main app cache, as it's not a direct dependency. + model = global_apps.get_model(model._meta.swapped) + if should_skip_detecting_model(migration, model): + continue + + table = model._meta.db_table + field = model._meta.get_field(operation.name) + + # Handle implicit many-to-many tables created by AddField. + if field.many_to_many: + through_db_table = field.remote_field.through._meta.db_table + if fold_identifier_case: + through_db_table = through_db_table.casefold() + if through_db_table not in existing_table_names: + return False, project_state + else: + found_add_field_migration = True + continue + with self.connection.cursor() as cursor: + columns = self.connection.introspection.get_table_description( + cursor, table + ) + for column in columns: + field_column = field.column + column_name = column.name + if fold_identifier_case: + column_name = column_name.casefold() + field_column = field_column.casefold() + if column_name == field_column: + found_add_field_migration = True + break + else: + return False, project_state + # If we get this far and we found at least one CreateModel or AddField + # migration, the migration is considered implicitly applied. + return (found_create_model_migration or found_add_field_migration), after_state diff --git a/venv/Lib/site-packages/django/db/migrations/graph.py b/venv/Lib/site-packages/django/db/migrations/graph.py new file mode 100644 index 000000000..dd845c13e --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/graph.py @@ -0,0 +1,333 @@ +from functools import total_ordering + +from django.db.migrations.state import ProjectState + +from .exceptions import CircularDependencyError, NodeNotFoundError + + +@total_ordering +class Node: + """ + A single node in the migration graph. Contains direct links to adjacent + nodes in either direction. + """ + + def __init__(self, key): + self.key = key + self.children = set() + self.parents = set() + + def __eq__(self, other): + return self.key == other + + def __lt__(self, other): + return self.key < other + + def __hash__(self): + return hash(self.key) + + def __getitem__(self, item): + return self.key[item] + + def __str__(self): + return str(self.key) + + def __repr__(self): + return "<%s: (%r, %r)>" % (self.__class__.__name__, self.key[0], self.key[1]) + + def add_child(self, child): + self.children.add(child) + + def add_parent(self, parent): + self.parents.add(parent) + + +class DummyNode(Node): + """ + A node that doesn't correspond to a migration file on disk. + (A squashed migration that was removed, for example.) + + After the migration graph is processed, all dummy nodes should be removed. + If there are any left, a nonexistent dependency error is raised. + """ + + def __init__(self, key, origin, error_message): + super().__init__(key) + self.origin = origin + self.error_message = error_message + + def raise_error(self): + raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) + + +class MigrationGraph: + """ + Represent the digraph of all migrations in a project. + + Each migration is a node, and each dependency is an edge. There are + no implicit dependencies between numbered migrations - the numbering is + merely a convention to aid file listing. Every new numbered migration + has a declared dependency to the previous number, meaning that VCS + branch merges can be detected and resolved. + + Migrations files can be marked as replacing another set of migrations - + this is to support the "squash" feature. The graph handler isn't responsible + for these; instead, the code to load them in here should examine the + migration files and if the replaced migrations are all either unapplied + or not present, it should ignore the replaced ones, load in just the + replacing migration, and repoint any dependencies that pointed to the + replaced migrations to point to the replacing one. + + A node should be a tuple: (app_path, migration_name). The tree special-cases + things within an app - namely, root nodes and leaf nodes ignore dependencies + to other apps. + """ + + def __init__(self): + self.node_map = {} + self.nodes = {} + + def add_node(self, key, migration): + assert key not in self.node_map + node = Node(key) + self.node_map[key] = node + self.nodes[key] = migration + + def add_dummy_node(self, key, origin, error_message): + node = DummyNode(key, origin, error_message) + self.node_map[key] = node + self.nodes[key] = None + + def add_dependency(self, migration, child, parent, skip_validation=False): + """ + This may create dummy nodes if they don't yet exist. If + `skip_validation=True`, validate_consistency() should be called + afterward. + """ + if child not in self.nodes: + error_message = ( + "Migration %s dependencies reference nonexistent" + " child node %r" % (migration, child) + ) + self.add_dummy_node(child, migration, error_message) + if parent not in self.nodes: + error_message = ( + "Migration %s dependencies reference nonexistent" + " parent node %r" % (migration, parent) + ) + self.add_dummy_node(parent, migration, error_message) + self.node_map[child].add_parent(self.node_map[parent]) + self.node_map[parent].add_child(self.node_map[child]) + if not skip_validation: + self.validate_consistency() + + def remove_replaced_nodes(self, replacement, replaced): + """ + Remove each of the `replaced` nodes (when they exist). Any + dependencies that were referencing them are changed to reference the + `replacement` node instead. + """ + # Cast list of replaced keys to set to speed up lookup later. + replaced = set(replaced) + try: + replacement_node = self.node_map[replacement] + except KeyError as err: + raise NodeNotFoundError( + "Unable to find replacement node %r. It was either never added" + " to the migration graph, or has been removed." % (replacement,), + replacement, + ) from err + for replaced_key in replaced: + self.nodes.pop(replaced_key, None) + replaced_node = self.node_map.pop(replaced_key, None) + if replaced_node: + for child in replaced_node.children: + child.parents.remove(replaced_node) + # We don't want to create dependencies between the replaced + # node and the replacement node as this would lead to + # self-referencing on the replacement node at a later iteration. + if child.key not in replaced: + replacement_node.add_child(child) + child.add_parent(replacement_node) + for parent in replaced_node.parents: + parent.children.remove(replaced_node) + # Again, to avoid self-referencing. + if parent.key not in replaced: + replacement_node.add_parent(parent) + parent.add_child(replacement_node) + + def remove_replacement_node(self, replacement, replaced): + """ + The inverse operation to `remove_replaced_nodes`. Almost. Remove the + replacement node `replacement` and remap its child nodes to `replaced` + - the list of nodes it would have replaced. Don't remap its parent + nodes as they are expected to be correct already. + """ + self.nodes.pop(replacement, None) + try: + replacement_node = self.node_map.pop(replacement) + except KeyError as err: + raise NodeNotFoundError( + "Unable to remove replacement node %r. It was either never added" + " to the migration graph, or has been removed already." + % (replacement,), + replacement, + ) from err + replaced_nodes = set() + replaced_nodes_parents = set() + for key in replaced: + replaced_node = self.node_map.get(key) + if replaced_node: + replaced_nodes.add(replaced_node) + replaced_nodes_parents |= replaced_node.parents + # We're only interested in the latest replaced node, so filter out + # replaced nodes that are parents of other replaced nodes. + replaced_nodes -= replaced_nodes_parents + for child in replacement_node.children: + child.parents.remove(replacement_node) + for replaced_node in replaced_nodes: + replaced_node.add_child(child) + child.add_parent(replaced_node) + for parent in replacement_node.parents: + parent.children.remove(replacement_node) + # NOTE: There is no need to remap parent dependencies as we can + # assume the replaced nodes already have the correct ancestry. + + def validate_consistency(self): + """Ensure there are no dummy nodes remaining in the graph.""" + [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] + + def forwards_plan(self, target): + """ + Given a node, return a list of which previous nodes (dependencies) must + be applied, ending with the node itself. This is the list you would + follow if applying the migrations to a database. + """ + if target not in self.nodes: + raise NodeNotFoundError("Node %r not a valid node" % (target,), target) + return self.iterative_dfs(self.node_map[target]) + + def backwards_plan(self, target): + """ + Given a node, return a list of which dependent nodes (dependencies) + must be unapplied, ending with the node itself. This is the list you + would follow if removing the migrations from a database. + """ + if target not in self.nodes: + raise NodeNotFoundError("Node %r not a valid node" % (target,), target) + return self.iterative_dfs(self.node_map[target], forwards=False) + + def iterative_dfs(self, start, forwards=True): + """Iterative depth-first search for finding dependencies.""" + visited = [] + visited_set = set() + stack = [(start, False)] + while stack: + node, processed = stack.pop() + if node in visited_set: + pass + elif processed: + visited_set.add(node) + visited.append(node.key) + else: + stack.append((node, True)) + stack += [ + (n, False) + for n in sorted(node.parents if forwards else node.children) + ] + return visited + + def root_nodes(self, app=None): + """ + Return all root nodes - that is, nodes with no dependencies inside + their app. These are the starting point for an app. + """ + roots = set() + for node in self.nodes: + if all(key[0] != node[0] for key in self.node_map[node].parents) and ( + not app or app == node[0] + ): + roots.add(node) + return sorted(roots) + + def leaf_nodes(self, app=None): + """ + Return all leaf nodes - that is, nodes with no dependents in their app. + These are the "most current" version of an app's schema. + Having more than one per app is technically an error, but one that + gets handled further up, in the interactive command - it's usually the + result of a VCS merge and needs some user input. + """ + leaves = set() + for node in self.nodes: + if all(key[0] != node[0] for key in self.node_map[node].children) and ( + not app or app == node[0] + ): + leaves.add(node) + return sorted(leaves) + + def ensure_not_cyclic(self): + # Algo from GvR: + # https://neopythonic.blogspot.com/2009/01/detecting-cycles-in-directed-graph.html + todo = set(self.nodes) + while todo: + node = todo.pop() + stack = [node] + while stack: + top = stack[-1] + for child in self.node_map[top].children: + # Use child.key instead of child to speed up the frequent + # hashing. + node = child.key + if node in stack: + cycle = stack[stack.index(node) :] + raise CircularDependencyError( + ", ".join("%s.%s" % n for n in cycle) + ) + if node in todo: + stack.append(node) + todo.remove(node) + break + else: + node = stack.pop() + + def __str__(self): + return "Graph: %s nodes, %s edges" % self._nodes_and_edges() + + def __repr__(self): + nodes, edges = self._nodes_and_edges() + return "<%s: nodes=%s, edges=%s>" % (self.__class__.__name__, nodes, edges) + + def _nodes_and_edges(self): + return len(self.nodes), sum( + len(node.parents) for node in self.node_map.values() + ) + + def _generate_plan(self, nodes, at_end): + plan = [] + for node in nodes: + for migration in self.forwards_plan(node): + if migration not in plan and (at_end or migration not in nodes): + plan.append(migration) + return plan + + def make_state(self, nodes=None, at_end=True, real_apps=None): + """ + Given a migration node or nodes, return a complete ProjectState for it. + If at_end is False, return the state before the migration has run. + If nodes is not provided, return the overall most current project state. + """ + if nodes is None: + nodes = list(self.leaf_nodes()) + if not nodes: + return ProjectState() + if not isinstance(nodes[0], tuple): + nodes = [nodes] + plan = self._generate_plan(nodes, at_end) + project_state = ProjectState(real_apps=real_apps) + for node in plan: + project_state = self.nodes[node].mutate_state(project_state, preserve=False) + return project_state + + def __contains__(self, node): + return node in self.nodes diff --git a/venv/Lib/site-packages/django/db/migrations/loader.py b/venv/Lib/site-packages/django/db/migrations/loader.py new file mode 100644 index 000000000..81dcd06e0 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/loader.py @@ -0,0 +1,385 @@ +import pkgutil +import sys +from importlib import import_module, reload + +from django.apps import apps +from django.conf import settings +from django.db.migrations.graph import MigrationGraph +from django.db.migrations.recorder import MigrationRecorder + +from .exceptions import ( + AmbiguityError, + BadMigrationError, + InconsistentMigrationHistory, + NodeNotFoundError, +) + +MIGRATIONS_MODULE_NAME = "migrations" + + +class MigrationLoader: + """ + Load migration files from disk and their status from the database. + + Migration files are expected to live in the "migrations" directory of + an app. Their names are entirely unimportant from a code perspective, + but will probably follow the 1234_name.py convention. + + On initialization, this class will scan those directories, and open and + read the Python files, looking for a class called Migration, which should + inherit from django.db.migrations.Migration. See + django.db.migrations.migration for what that looks like. + + Some migrations will be marked as "replacing" another set of migrations. + These are loaded into a separate set of migrations away from the main ones. + If all the migrations they replace are either unapplied or missing from + disk, then they are injected into the main set, replacing the named migrations. + Any dependency pointers to the replaced migrations are re-pointed to the + new migration. + + This does mean that this class MUST also talk to the database as well as + to disk, but this is probably fine. We're already not just operating + in memory. + """ + + def __init__( + self, + connection, + load=True, + ignore_no_migrations=False, + replace_migrations=True, + ): + self.connection = connection + self.disk_migrations = None + self.applied_migrations = None + self.ignore_no_migrations = ignore_no_migrations + self.replace_migrations = replace_migrations + if load: + self.build_graph() + + @classmethod + def migrations_module(cls, app_label): + """ + Return the path to the migrations module for the specified app_label + and a boolean indicating if the module is specified in + settings.MIGRATION_MODULE. + """ + if app_label in settings.MIGRATION_MODULES: + return settings.MIGRATION_MODULES[app_label], True + else: + app_package_name = apps.get_app_config(app_label).name + return "%s.%s" % (app_package_name, MIGRATIONS_MODULE_NAME), False + + def load_disk(self): + """Load the migrations from all INSTALLED_APPS from disk.""" + self.disk_migrations = {} + self.unmigrated_apps = set() + self.migrated_apps = set() + for app_config in apps.get_app_configs(): + # Get the migrations module directory + module_name, explicit = self.migrations_module(app_config.label) + if module_name is None: + self.unmigrated_apps.add(app_config.label) + continue + was_loaded = module_name in sys.modules + try: + module = import_module(module_name) + except ModuleNotFoundError as e: + if (explicit and self.ignore_no_migrations) or ( + not explicit and MIGRATIONS_MODULE_NAME in e.name.split(".") + ): + self.unmigrated_apps.add(app_config.label) + continue + raise + else: + # Module is not a package (e.g. migrations.py). + if not hasattr(module, "__path__"): + self.unmigrated_apps.add(app_config.label) + continue + # Empty directories are namespaces. Namespace packages have no + # __file__ and don't use a list for __path__. See + # https://docs.python.org/3/reference/import.html#namespace-packages + if getattr(module, "__file__", None) is None and not isinstance( + module.__path__, list + ): + self.unmigrated_apps.add(app_config.label) + continue + # Force a reload if it's already loaded (tests need this) + if was_loaded: + reload(module) + self.migrated_apps.add(app_config.label) + migration_names = { + name + for _, name, is_pkg in pkgutil.iter_modules(module.__path__) + if not is_pkg and name[0] not in "_~" + } + # Load migrations + for migration_name in migration_names: + migration_path = "%s.%s" % (module_name, migration_name) + try: + migration_module = import_module(migration_path) + except ImportError as e: + if "bad magic number" in str(e): + raise ImportError( + "Couldn't import %r as it appears to be a stale " + ".pyc file." % migration_path + ) from e + else: + raise + if not hasattr(migration_module, "Migration"): + raise BadMigrationError( + "Migration %s in app %s has no Migration class" + % (migration_name, app_config.label) + ) + self.disk_migrations[ + app_config.label, migration_name + ] = migration_module.Migration( + migration_name, + app_config.label, + ) + + def get_migration(self, app_label, name_prefix): + """Return the named migration or raise NodeNotFoundError.""" + return self.graph.nodes[app_label, name_prefix] + + def get_migration_by_prefix(self, app_label, name_prefix): + """ + Return the migration(s) which match the given app label and name_prefix. + """ + # Do the search + results = [] + for migration_app_label, migration_name in self.disk_migrations: + if migration_app_label == app_label and migration_name.startswith( + name_prefix + ): + results.append((migration_app_label, migration_name)) + if len(results) > 1: + raise AmbiguityError( + "There is more than one migration for '%s' with the prefix '%s'" + % (app_label, name_prefix) + ) + elif not results: + raise KeyError( + f"There is no migration for '{app_label}' with the prefix " + f"'{name_prefix}'" + ) + else: + return self.disk_migrations[results[0]] + + def check_key(self, key, current_app): + if (key[1] != "__first__" and key[1] != "__latest__") or key in self.graph: + return key + # Special-case __first__, which means "the first migration" for + # migrated apps, and is ignored for unmigrated apps. It allows + # makemigrations to declare dependencies on apps before they even have + # migrations. + if key[0] == current_app: + # Ignore __first__ references to the same app (#22325) + return + if key[0] in self.unmigrated_apps: + # This app isn't migrated, but something depends on it. + # The models will get auto-added into the state, though + # so we're fine. + return + if key[0] in self.migrated_apps: + try: + if key[1] == "__first__": + return self.graph.root_nodes(key[0])[0] + else: # "__latest__" + return self.graph.leaf_nodes(key[0])[0] + except IndexError: + if self.ignore_no_migrations: + return None + else: + raise ValueError( + "Dependency on app with no migrations: %s" % key[0] + ) + raise ValueError("Dependency on unknown app: %s" % key[0]) + + def add_internal_dependencies(self, key, migration): + """ + Internal dependencies need to be added first to ensure `__first__` + dependencies find the correct root node. + """ + for parent in migration.dependencies: + # Ignore __first__ references to the same app. + if parent[0] == key[0] and parent[1] != "__first__": + self.graph.add_dependency(migration, key, parent, skip_validation=True) + + def add_external_dependencies(self, key, migration): + for parent in migration.dependencies: + # Skip internal dependencies + if key[0] == parent[0]: + continue + parent = self.check_key(parent, key[0]) + if parent is not None: + self.graph.add_dependency(migration, key, parent, skip_validation=True) + for child in migration.run_before: + child = self.check_key(child, key[0]) + if child is not None: + self.graph.add_dependency(migration, child, key, skip_validation=True) + + def build_graph(self): + """ + Build a migration dependency graph using both the disk and database. + You'll need to rebuild the graph if you apply migrations. This isn't + usually a problem as generally migration stuff runs in a one-shot process. + """ + # Load disk data + self.load_disk() + # Load database data + if self.connection is None: + self.applied_migrations = {} + else: + recorder = MigrationRecorder(self.connection) + self.applied_migrations = recorder.applied_migrations() + # To start, populate the migration graph with nodes for ALL migrations + # and their dependencies. Also make note of replacing migrations at this step. + self.graph = MigrationGraph() + self.replacements = {} + for key, migration in self.disk_migrations.items(): + self.graph.add_node(key, migration) + # Replacing migrations. + if migration.replaces: + self.replacements[key] = migration + for key, migration in self.disk_migrations.items(): + # Internal (same app) dependencies. + self.add_internal_dependencies(key, migration) + # Add external dependencies now that the internal ones have been resolved. + for key, migration in self.disk_migrations.items(): + self.add_external_dependencies(key, migration) + # Carry out replacements where possible and if enabled. + if self.replace_migrations: + for key, migration in self.replacements.items(): + # Get applied status of each of this migration's replacement + # targets. + applied_statuses = [ + (target in self.applied_migrations) for target in migration.replaces + ] + # The replacing migration is only marked as applied if all of + # its replacement targets are. + if all(applied_statuses): + self.applied_migrations[key] = migration + else: + self.applied_migrations.pop(key, None) + # A replacing migration can be used if either all or none of + # its replacement targets have been applied. + if all(applied_statuses) or (not any(applied_statuses)): + self.graph.remove_replaced_nodes(key, migration.replaces) + else: + # This replacing migration cannot be used because it is + # partially applied. Remove it from the graph and remap + # dependencies to it (#25945). + self.graph.remove_replacement_node(key, migration.replaces) + # Ensure the graph is consistent. + try: + self.graph.validate_consistency() + except NodeNotFoundError as exc: + # Check if the missing node could have been replaced by any squash + # migration but wasn't because the squash migration was partially + # applied before. In that case raise a more understandable exception + # (#23556). + # Get reverse replacements. + reverse_replacements = {} + for key, migration in self.replacements.items(): + for replaced in migration.replaces: + reverse_replacements.setdefault(replaced, set()).add(key) + # Try to reraise exception with more detail. + if exc.node in reverse_replacements: + candidates = reverse_replacements.get(exc.node, set()) + is_replaced = any( + candidate in self.graph.nodes for candidate in candidates + ) + if not is_replaced: + tries = ", ".join("%s.%s" % c for c in candidates) + raise NodeNotFoundError( + "Migration {0} depends on nonexistent node ('{1}', '{2}'). " + "Django tried to replace migration {1}.{2} with any of [{3}] " + "but wasn't able to because some of the replaced migrations " + "are already applied.".format( + exc.origin, exc.node[0], exc.node[1], tries + ), + exc.node, + ) from exc + raise + self.graph.ensure_not_cyclic() + + def check_consistent_history(self, connection): + """ + Raise InconsistentMigrationHistory if any applied migrations have + unapplied dependencies. + """ + recorder = MigrationRecorder(connection) + applied = recorder.applied_migrations() + for migration in applied: + # If the migration is unknown, skip it. + if migration not in self.graph.nodes: + continue + for parent in self.graph.node_map[migration].parents: + if parent not in applied: + # Skip unapplied squashed migrations that have all of their + # `replaces` applied. + if parent in self.replacements: + if all( + m in applied for m in self.replacements[parent].replaces + ): + continue + raise InconsistentMigrationHistory( + "Migration {}.{} is applied before its dependency " + "{}.{} on database '{}'.".format( + migration[0], + migration[1], + parent[0], + parent[1], + connection.alias, + ) + ) + + def detect_conflicts(self): + """ + Look through the loaded graph and detect any conflicts - apps + with more than one leaf migration. Return a dict of the app labels + that conflict with the migration names that conflict. + """ + seen_apps = {} + conflicting_apps = set() + for app_label, migration_name in self.graph.leaf_nodes(): + if app_label in seen_apps: + conflicting_apps.add(app_label) + seen_apps.setdefault(app_label, set()).add(migration_name) + return { + app_label: sorted(seen_apps[app_label]) for app_label in conflicting_apps + } + + def project_state(self, nodes=None, at_end=True): + """ + Return a ProjectState object representing the most recent state + that the loaded migrations represent. + + See graph.make_state() for the meaning of "nodes" and "at_end". + """ + return self.graph.make_state( + nodes=nodes, at_end=at_end, real_apps=self.unmigrated_apps + ) + + def collect_sql(self, plan): + """ + Take a migration plan and return a list of collected SQL statements + that represent the best-efforts version of that plan. + """ + statements = [] + state = None + for migration, backwards in plan: + with self.connection.schema_editor( + collect_sql=True, atomic=migration.atomic + ) as schema_editor: + if state is None: + state = self.project_state( + (migration.app_label, migration.name), at_end=False + ) + if not backwards: + state = migration.apply(state, schema_editor, collect_sql=True) + else: + state = migration.unapply(state, schema_editor, collect_sql=True) + statements.extend(schema_editor.collected_sql) + return statements diff --git a/venv/Lib/site-packages/django/db/migrations/migration.py b/venv/Lib/site-packages/django/db/migrations/migration.py new file mode 100644 index 000000000..ccbd2f72e --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/migration.py @@ -0,0 +1,235 @@ +from django.db.migrations.utils import get_migration_name_timestamp +from django.db.transaction import atomic + +from .exceptions import IrreversibleError + + +class Migration: + """ + The base class for all migrations. + + Migration files will import this from django.db.migrations.Migration + and subclass it as a class called Migration. It will have one or more + of the following attributes: + + - operations: A list of Operation instances, probably from + django.db.migrations.operations + - dependencies: A list of tuples of (app_path, migration_name) + - run_before: A list of tuples of (app_path, migration_name) + - replaces: A list of migration_names + + Note that all migrations come out of migrations and into the Loader or + Graph as instances, having been initialized with their app label and name. + """ + + # Operations to apply during this migration, in order. + operations = [] + + # Other migrations that should be run before this migration. + # Should be a list of (app, migration_name). + dependencies = [] + + # Other migrations that should be run after this one (i.e. have + # this migration added to their dependencies). Useful to make third-party + # apps' migrations run after your AUTH_USER replacement, for example. + run_before = [] + + # Migration names in this app that this migration replaces. If this is + # non-empty, this migration will only be applied if all these migrations + # are not applied. + replaces = [] + + # Is this an initial migration? Initial migrations are skipped on + # --fake-initial if the table or fields already exist. If None, check if + # the migration has any dependencies to determine if there are dependencies + # to tell if db introspection needs to be done. If True, always perform + # introspection. If False, never perform introspection. + initial = None + + # Whether to wrap the whole migration in a transaction. Only has an effect + # on database backends which support transactional DDL. + atomic = True + + def __init__(self, name, app_label): + self.name = name + self.app_label = app_label + # Copy dependencies & other attrs as we might mutate them at runtime + self.operations = list(self.__class__.operations) + self.dependencies = list(self.__class__.dependencies) + self.run_before = list(self.__class__.run_before) + self.replaces = list(self.__class__.replaces) + + def __eq__(self, other): + return ( + isinstance(other, Migration) + and self.name == other.name + and self.app_label == other.app_label + ) + + def __repr__(self): + return "" % (self.app_label, self.name) + + def __str__(self): + return "%s.%s" % (self.app_label, self.name) + + def __hash__(self): + return hash("%s.%s" % (self.app_label, self.name)) + + def mutate_state(self, project_state, preserve=True): + """ + Take a ProjectState and return a new one with the migration's + operations applied to it. Preserve the original object state by + default and return a mutated state from a copy. + """ + new_state = project_state + if preserve: + new_state = project_state.clone() + + for operation in self.operations: + operation.state_forwards(self.app_label, new_state) + return new_state + + def apply(self, project_state, schema_editor, collect_sql=False): + """ + Take a project_state representing all migrations prior to this one + and a schema_editor for a live database and apply the migration + in a forwards order. + + Return the resulting project state for efficient reuse by following + Migrations. + """ + for operation in self.operations: + # If this operation cannot be represented as SQL, place a comment + # there instead + if collect_sql: + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + schema_editor.collected_sql.append( + "-- MIGRATION NOW PERFORMS OPERATION THAT CANNOT BE WRITTEN AS " + "SQL:" + ) + schema_editor.collected_sql.append("-- %s" % operation.describe()) + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + continue + # Save the state before the operation has run + old_state = project_state.clone() + operation.state_forwards(self.app_label, project_state) + # Run the operation + atomic_operation = operation.atomic or ( + self.atomic and operation.atomic is not False + ) + if not schema_editor.atomic_migration and atomic_operation: + # Force a transaction on a non-transactional-DDL backend or an + # atomic operation inside a non-atomic migration. + with atomic(schema_editor.connection.alias): + operation.database_forwards( + self.app_label, schema_editor, old_state, project_state + ) + else: + # Normal behaviour + operation.database_forwards( + self.app_label, schema_editor, old_state, project_state + ) + return project_state + + def unapply(self, project_state, schema_editor, collect_sql=False): + """ + Take a project_state representing all migrations prior to this one + and a schema_editor for a live database and apply the migration + in a reverse order. + + The backwards migration process consists of two phases: + + 1. The intermediate states from right before the first until right + after the last operation inside this migration are preserved. + 2. The operations are applied in reverse order using the states + recorded in step 1. + """ + # Construct all the intermediate states we need for a reverse migration + to_run = [] + new_state = project_state + # Phase 1 + for operation in self.operations: + # If it's irreversible, error out + if not operation.reversible: + raise IrreversibleError( + "Operation %s in %s is not reversible" % (operation, self) + ) + # Preserve new state from previous run to not tamper the same state + # over all operations + new_state = new_state.clone() + old_state = new_state.clone() + operation.state_forwards(self.app_label, new_state) + to_run.insert(0, (operation, old_state, new_state)) + + # Phase 2 + for operation, to_state, from_state in to_run: + if collect_sql: + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + schema_editor.collected_sql.append( + "-- MIGRATION NOW PERFORMS OPERATION THAT CANNOT BE WRITTEN AS " + "SQL:" + ) + schema_editor.collected_sql.append("-- %s" % operation.describe()) + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + continue + atomic_operation = operation.atomic or ( + self.atomic and operation.atomic is not False + ) + if not schema_editor.atomic_migration and atomic_operation: + # Force a transaction on a non-transactional-DDL backend or an + # atomic operation inside a non-atomic migration. + with atomic(schema_editor.connection.alias): + operation.database_backwards( + self.app_label, schema_editor, from_state, to_state + ) + else: + # Normal behaviour + operation.database_backwards( + self.app_label, schema_editor, from_state, to_state + ) + return project_state + + def suggest_name(self): + """ + Suggest a name for the operations this migration might represent. Names + are not guaranteed to be unique, but put some effort into the fallback + name to avoid VCS conflicts if possible. + """ + if self.initial: + return "initial" + + raw_fragments = [op.migration_name_fragment for op in self.operations] + fragments = [name for name in raw_fragments if name] + + if not fragments or len(fragments) != len(self.operations): + return "auto_%s" % get_migration_name_timestamp() + + name = fragments[0] + for fragment in fragments[1:]: + new_name = f"{name}_{fragment}" + if len(new_name) > 52: + name = f"{name}_and_more" + break + name = new_name + return name + + +class SwappableTuple(tuple): + """ + Subclass of tuple so Django can tell this was originally a swappable + dependency when it reads the migration file. + """ + + def __new__(cls, value, setting): + self = tuple.__new__(cls, value) + self.setting = setting + return self + + +def swappable_dependency(value): + """Turn a setting value into a dependency.""" + return SwappableTuple((value.split(".", 1)[0], "__first__"), value) diff --git a/venv/Lib/site-packages/django/db/migrations/operations/__init__.py b/venv/Lib/site-packages/django/db/migrations/operations/__init__.py new file mode 100644 index 000000000..793969ed1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/operations/__init__.py @@ -0,0 +1,40 @@ +from .fields import AddField, AlterField, RemoveField, RenameField +from .models import ( + AddConstraint, + AddIndex, + AlterIndexTogether, + AlterModelManagers, + AlterModelOptions, + AlterModelTable, + AlterOrderWithRespectTo, + AlterUniqueTogether, + CreateModel, + DeleteModel, + RemoveConstraint, + RemoveIndex, + RenameModel, +) +from .special import RunPython, RunSQL, SeparateDatabaseAndState + +__all__ = [ + "CreateModel", + "DeleteModel", + "AlterModelTable", + "AlterUniqueTogether", + "RenameModel", + "AlterIndexTogether", + "AlterModelOptions", + "AddIndex", + "RemoveIndex", + "AddField", + "RemoveField", + "AlterField", + "RenameField", + "AddConstraint", + "RemoveConstraint", + "SeparateDatabaseAndState", + "RunSQL", + "RunPython", + "AlterOrderWithRespectTo", + "AlterModelManagers", +] diff --git a/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b2f7fc50c141ab6c7955e9719cc1c51b650bded GIT binary patch literal 877 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef76c2412c1f3208c25bd03e9f2da712de7da0d7 GIT binary patch literal 27130 zcmcJ23v^t^dEVZ~KCoCU9s~iB;$uaL5+PHNVyRMWvkFzxvQ~sTyjrJC(El?PhK@U(K%;ss#yWnG*)&QXMqO8O%RA9E@QS0sEC;d`Cq2p^a5 zF@*1P?nn53p}&Ig3FiTXA8;!u|6YV2bWS3CQo_d(o^u{T_#p}3hw$5+QwX1u@cqui z=QDHjUuFNy8GdfH<+x1`zL6K!T~%){x7H9SKF{d$?RwjtGyRFBWw+_nl)L0Acdg-i z{)BS9R`Z&RxMrAVYOSSK>&@kkTWhy2x$VoYLP_I|dgHR|)YerC<+rbY6+<91m-P!z zJI*sK)-OKYY`aSP%kn3p#2Z>}?Fxi0M$MKcLa~6;H1e|u}R_2D; zHO^%|vhRk~wYuiDjM~>W90UH$k~x#PWqi`;nww_V+QK-znsqYZin-8v{F&Cqnp1H$ z)|<->w7zn!-rR62C%nq?TIH;A5hbi)OkG{tSasLh^K+JOd2ZV;evpaZtyD|-R^4&t z>}mmtYNXn?TZ=1Rb!5W>Gf=4KTX1h@)HLY*+S=K7Ui^UPD(~V;8=hCcc&^ouqP>gn zS#G~~WAWlM%gSp%{Gw{DxQ+J3Ywp^$i_a}DUi6mR?!)W##+CXd*SqMf)YmSx9&r{Q zSzW%Q`_g-aY?m(b9?^Y0zkc1{Uqh!fuGE%Vsus1?8zuiH;N*+~{+UM6u(wN={dF~i z$OfLCpB03>Z-vLrR1GInH66n-G3_kZb}Yw!4UDd4ovf2XT<%kuC4*D;wL&%jsf?Ye z7QplozbqV$I=!cB+0A^UYbj;AMmJM~;5eVTZ7ke2e4EV07_~jOxugyug>Y0m`w{dD zwc7I9a=TVzBkr)UqS2Y{t#dw1)8Oz7fAoiy-;v5QE16AW3ze$_csFNCg?_f#dev38 z4RsG9)72MAU`$$PTm(QT%Q!u$>Aa!p3X5v2E6QQ7DmOOcjNyMsW^KN9L4g~PeG zX`q|TEpxpLa!nA68MtMZBEH#v*4x0i^mEE}HX5#a02zgs0sa0+G;GxgyhBHi)M|}p z-ScX-xNp@-ysO~xa&V@MoRQn^?B78?tH3zJKoBn1{9=u*-e|hDnqR8bu5Q$u`i(k_ za#Vp1xvA-5CH`1YeZy@wLlQW3)!XQBps86n^mrvWg$yQ;RWu6Lv?XsEi0t{1Yy5c% zPCR|8)+K1g&ly$QnUM)&JK5JpFo|+bo|DKaI3xI*cZ$v^{uZ2)Glst-PT3j9-=aI} zOgNJ=@k-8=vk!4&QqHuq9}}-E6K@<7Z`L182(-?u4pizD84wS8m3Dox=~B4mmMEw_ zKi^uXe(?OlYJCk7M|lekGCus#AB}|$0$ucdEz`BubITaAHKS{!O2^>$FuGoLv| zWt`&g9Zuj+ppK8^FPb+DYKsqMpb1Romf0=C?6&2b^N;FjZUiGwx?M!e$mvV&n)|VJ z_0(f5l5IC{&SW|dCKwxumig1oRs(|nsre|EpIxkbuGd2(Cm{>+_)xM6k+V09Hs-#Q zxn-)cuCZdQm}|wh)iv5SVrDSSvRj!oOuL{F2GyCLt*yH4`odh!&tI;4^>$mS(=e3g0Mh7p&s8 zX%@e(9!GRfo05!Ie+qA71}hfSuYzx5{5#>yjYv-_vRIKjepY6C^U0WdSyH%W5zO}0&|9)v%hA)d1$mV-LF@B+8OrUS(dg2 zheMdM+A+Q#gA6`XjnhR>ny2~3Qb*~w?Un43aU}@httD@B>QTJSIdTw)rD zLz=9lDXffO5*bStdOWufsH9Z0F>@CQ96VvyTv6*u&JWF1VGW5_Ptze!{rvNKj;m9Q zdIS#i3>BQ8yYebfjhE^)f7Eds5Dsm%(P*<6j~up5+sM6{vx~+wn0iQ<8;Tm~#rZ_8 z9g2lIS9r-m0=SlGQ?Y=582OnM`A0Nj<@auigYMscEq2>NkE7ow$av0zvO*0q5&pwbT&cs}tM~W|wed z%ma>Gt=C*AXbeJe+C?3nRB3a7$fayoeHUL@P{1lr939%Ydjc z8Qa%6+P6tj!X9yAAOi=4Oo0kKSicAYrG7+*7ae;IVgPX_*EAvkI+MBrEKr2)`0Hn} z`1;uOXF56gTk$h;6OF0+l3_)I`>q2q?_%+*R`)81Zjg3 zu1+Cu5qT#7DsngS?NLIY6=TWl=DYSSOPvYQJ?a3x&shr>o|!Af=v~X4SP(x&2AzRZ z9T8#qXQ+%tF_NQN$g^E@g@nfA#1#Hk_eaQGPu-dpY-f-F(13{7&kD3lb%MZNsxObw zw*a9H2}Ueyn%fhm`DV#7@8+`R%`!A(3G+0Eux)n^C%Yx8+S7IK=#M;#wpd3QZaecj zWIMPzP2Rtb2RxRG^X)ux6c97Q9C(U&Mjh)rvX{^& zlBa|`uOK!o`xOGx73&KIa>Bh~;qMswZ4A9{Gwzz9-ru!0%U#>aYyp5?JtsPb+IxgX zgg$jlppH)_>iA@wBT?HVN}pObzQC!xlg@o8vwf7Sw?UzFT5t)MvnfxI3!d&$@iQ0Y-Mg( zP9EH?U`COrFteWZO<%I4Ch(9LNef6E9{baUW1(9YF6$Zb3JmT@EB zWuIe|poHUHSQ`FxCP8DdhsORC9*g*tq;N(k#L@(HX!>3j%4k9iDATmOVO%|zqNXC$ zTmfALQgk{=(bz5&-HQd#@z)`NwkQ|M3+kho8qdtxDIlkz+5VPtTvdB@xqTT1IBy-= z8YZ_M@ynS-$*_+zjI)>vEs;vH)ai2EXE1j-0t~Dhpg_LMyh@7#^;n1^UHE~1WF=s% z`NlQaI37ZrmKUPzil>R88m-m!r+y7@M1SWpIdf(kOYsMKB?8ysiB(XP5i6DPjkV>g z8?oikFE6h-?#CiaVo&2JAlW#s2)qa2$P%f{C6aU&L@_!G);|Eja6u&Ec1I~>laxZs zg_KeROxMh@RG&5BBGLf|YmO`_YNePNvM~Ceh!P6`7e+OAmuSwf#P8E5ngxm|ePy70Wj2JF%zwdiX(J5E{#nAy;L{jEAdZnw>aUumAyH zQUgZahxF*Bi$G-e8+%lydpfpadV2?9^Sh! z4a@w9dskg$;c90M{>bStHMTcGrkUB&H%t@DsNMQC%-h46o_^ga3Iah;4!M)=S&vi> z>e+)JQZV^@6Src7bsdk1j+i67OWRqYKa8Vrsq$ra$7_)2V`>~D2honN@t9z>_%(-x*De! zmNRZ{z>LyrH5KQnYSVd;4*McRZVxfy1Re6rx30L?)t{#?r)ktgh~Yve7-g>%@E73m zD(D7+vtj_w>}(h^vo^q6@bByPcA=K%XtU(0MBT*^#sEx)sinM93BVGRP=FKcTvuuMSqB$i81CZ;w|!Ii(j{I7V{0Qkbf+=P0V+?=OF zJBOdI)tpuXw&8<-+soY2k`0s^EPeGgrzXY^u{J%!EYHz-na)S()ZzGraJx%27)NO; zy`>(dFJ3Q7he}^^{4<#tp$ZuQZnJC_W(s44QXyN&nmI8g&&oVunLR&F@iTbtkd~w= z*%3o3OvyANXLdItyG3nA#;y&_$Uq{K>Qxlk*?$h(ca^khxJS%Tgp-c5csv?c^dYpD%uxFg)tS&U z1rO~+JifrLb8J$B(GWKZ4QQyvj$sTo) z&ILNDCUY!(3+mAZgCogWBFjQ(X&Pt)QO~nvsc2zPMI5hBL=_$FTTyJ8VCRNE`jJsH zmt5xJ7yG9dbX%x@)2-s*ei!n{BHp$-hm+OqSS_;f@JByK7kg5+;q=H7g9o;3$8|w^ z+XChebr9)Pg-(jGb;Mx-o>AQG>P#mI7-+)?D^}luJlr83akTvh6)m!k3Y}C%4aA*g zMaSXk+?T9qfVpA;W`JHPq&~%hIsDTShMW{Jqy7?otSmu*kRnruGxr3j5KE*MDTQ3Y zqBwy-vC4+bZD#NJSwYCV2~Sd(2)3p`DO7DYt3?U~MGk)1n}Q#kyRth~2zIANg59Y= ztWcF3L7P%Sybi(7FKPf(||*iF|$D;(ZHQ}CGt7uC=%#WP`a zrW2?p+Ux0&jK~m;U&V!nCc)J8aJQxJAi9nhFGhptP_mj{?6kMaHdxP~%KUPOdo`}P z(7)c^L_PI#p0E$j;<+Pzuw(0E1v{I;Mg>%WhlD-du)7}kFsPCRCJ+RykY&3wo8-!{ zodhlyg*0vu#hQRtk}WH#4J>K{*$ft}mlz9!R6>nZvH3Gl2}yc}s01FeCR@>vvk=E3Df-eC=Dblqg|TEp6F(8U^R@UmSEf*SsUXU z#K1*93E^*7&g^qj)`uO^;~_hy-(_zmb#~JnKwqe zqp0^CSS^-rjCIFW_Tw47VtO9_&aBL$h67&vYNK0X=tfz`-WW&8`R;hP%ocRV=}J3T zpTvR+wz0fr@GU}YD?&m=gGxMBz8tt`m^goW+`KZ>!Tt;}^nU zbzBZK;fPMKVOAXrBlK|iP8La=?ib^=fZkZqmQa)0U+2@&}sAS%c`|;>9Sv{Zy;GiHeVdTR1r?BTz!Df2kCr>`A0Z0g&rK7 zz*1Jc)pAI>Zi`e^9StL~!l-hOMw87&m(HtckP^jP9g`B@z8aJ|CUu3ugyIpML+rAM z@$7vR9`55z0Pb@a75k`nO8~Jp;k;Qe3x;Xa!3QThj5J zk-Q?lx((QTQROLOX|(RP74wtbnFF z6p9+!v1fuEEg-J_y0{47RoX4WJSvdBinERvKLUb8D5o{_K%f_rp|+5nKrhq-C%oDT z4;Imw3l-KZs33+04a9vhsuX)vNgfOUeLFx5IY>IZ_rl?M57`sh2X?^Zwqik;;}9c4 z7?vy81(Ds29PQq>%uR}T9=W;?9m#zV>`f()TouJWBVbC8Noh_zFa-q7qFTL96^uE@ zUSPBe%FsqOU82;A6IKeQ^Cs@K9_G8bF{lT9!IE2Fj zRe92}P_+cA+JLH-Km9!ILn)in;9jONfW6G&-i8GpJ1vv&1FTA4Pj(IIVH*H8t9v(` zm^s~>0+|T&^`ce!P#7|(=YEE~C?NxSNUTLU8wdXG=|}c_&}G?lmksCm52Eldvlfo! zLT1`fj2X<;3wRrH)iKCToDmHc8GjV3h4e-Vy)ogBi$PD?c7aFPLbO=fVaEvj7_>wS z3C7*gXp!mxGckjsjHzXWg~K8&IzE9Et|7#<@pn*0dIE8<{}LD^r^RFiaUex!|5Zd1 zV5`51LLj5C6A{$|EFJmdGdlxqD!&2})Eg+Kb5FYZVK_QcqO2>%(IU3ZWr1Z>fuK$O zb<$}0IAlV=C6J`1jhUVvuEL!`sQNcKhS=sqM(1dn!Xe0d1X&^?|0anXerV>s31kg{ ziA_H_L<7{B$2MM;F0m#y`x#S|nBpxS4>$s>n+J|A07sYbZcM#L@=93HHDlxVQqI*= zy_mI}z^u}JDa`uU&;r4z!cO%!7-Xx|_tN=3I-iAuGjfB#q56I%`df5+AYMq~Rfc0T@(UFh7K?v}k{FwynER}_8$zKYL=yi5u= z`;bXA^amWbpM$4!d|>r4{z2mCM?ZzqSv=lxI5F06GC1NfMlq~WhZCNsu@*W91N0&D zyaKx$u!lwnV6g5D5~$KfSI6nI1yMz^9xfa&LPOf06df~1M= z6#+sT$4C#JOv&ub4W%Tx?baX#;g7kaDOy1wo}%EYxvbC7;zU+xNK&6hqPeWre8NNF zmf#|8Nq8vF|IPRpk*WuYkIX;nAj%}z%>61LJP(l6SR2vTO(?o-o=G!B; zGPf**VWf$}oC%@Qp)I)+_GD{ ze%sdA=et?0U?>?J!et?aRPe@PbmK{iewYJ*6QYDoGidKt(KBvS|fWp}`BGM1Uwx!mE$Z*O%AYC%w5jRYN&I^&%tKF5hapYf1!M z1;O+grCnSi$e?WnAENE4Vrv z+&gV8RZ<7z2tE0}jZ+A2yV6>7=Oyd2YwH{B!MRp9ymn>Lt<)<(92FERM}a+^SFM8j zfk5XDZI8)YeTnT7EI=Q`TY-i>D_@q_54608W8$yiWk;XW>19KNQEun^B2bwMG5`i* z%pXPB--b$LpNQRQXQxfY*nyp=zJ#~vm?`O)XL;^0>X**Ie(61*xW{fuWg6ZqYa}`x zVepGs55>FsCy3CR<)6aW!+d7!$NcjV^Yxm)r>PO|)jwnQcs|GY{a@h4`&h<5X9|V} z^3;0;Z--5Y@J_JY2j+Fg5xK5k(3kabol!37SBv^`es$C>>1+AG=(x^kXR2jPrhV!r zs_DGrC3hX?U~x+T4#sfTrirXHzxcdYvg$#{cg+&74fy}(=b4^YGa z2rHBfg0PoZ|375?4-Be*7tESN=CgRbAAqw9W_>n|S%FSrx>2WqO7Yh_1%!^1+>G5E zabVBe3Qhy*_v(E*z4tuBIt6j=W^pUyJ?-EgM-6v6HcKcWALb0vtysRS1wU7lL8pic zu$F!Se+J$s(#9R~FFJ-K@I-wNqegLUvlbW`{CwciciAM>5I8KGdt!B~>T6lz*Jl;u z$t?)&WmL6>PV%^<)p!_JI<|AL;@dXh(RMDULnXVwjX1%|g*WZrFO-6nUZ0V@caSVF zyw@0%P%*=S^XnuV4-CznhX#$Vh?L=|Sw>g|WhGEE?|b0Z?M7xDTh;W(n`5TNp)&OU z5ppF&rf`)gen#Z(PEJwNsyf3o+S zREyzV|0Gu2t7^nefBA9^RANa~;uuuor0Sra&KCu@aEM^LKG-=8jPKBj^>)Q+tvv{L zS>f_X^LnMev;>bR%y70;^xaM==wx&G3NWdw7F)Qm$>TAnD)@fG>ayqYg8--WKwMtC zG&f&)@p}6*MqmS5Vf<)H)LovGv|7Jj@!HGHCJ1vKR=BD`=-g;^Qm%sr-xiQss?&kY z<6#MYaUc~N9%dj#)iGXg#ph^TuU%Wbj&BD^7N=T}Spwp!qY0X;`@*7=k!5^Fgx6_W zYc;Qa&8?P_ZLaQ1hHC504OMUM4Lv-DP8on6n+6H5qTe~#o1!V*8m`By>; zZ4ToixA2WXYV|N^2%_LZog$S|OLpNRVzi9hM0{FWQbqnW>b`>qbq7eQr^ayJME98+ ztSI~?D^>pzu^PLJP~K!PC7x*&`Z7D<$KmPR-=_n@>(jAPW23?!{iL-=G#?BWn9swW z8$e)BYm4EBX8$b-IfBwUeTL%RHN!-#8T2q7t_yySwH{}!+ML|O?MSTX+Zf?B;kj~O zEg)k`7LNV209D~$Oa+vzp9N9g3_Mf-g?yIr@U8VvL4SpYHR01+my`iQV! zW)F%8OKdWSboG~E9Jj3cEFR%AKo?*aT(P5FGM6*_)I}&eVkst4P6(+WYkE4d+kchR zd3=(0#5s{JDK#j=Qqukny2%*gS zEmrp9Y;!_{M3w#Vi>%*?>eHK1JtJ{Gs_!kxto?z^S`CKtUgXv9kqVJl{l?wi1=eIF zu)^AhORWFFdXJOadM(o1`nM*sUPm$C{Fduapp;((RguWT1x#XAh^t6sF--$c&yREP z44$52PduQ554*{wBA`y(0T7F3Sqw?hCA(@~%v`DO8gXKS5Ur4o!lUPrslJ>3V{|HX zrXxpIQJ+BYe#^RN=Jn*04p|CO zuA3$|n)YkxcVL#*`9eP#aEV9cX1fKrlRfQG9E458* z8{k78`s0L%x5T1=J+t#thwD|=@dY%(=2ivONhI`m_<_HQa<6Ux(W7dzB>q5Q<%9y@ zcRfP>%Yd~Y4Wzh9RIUB zlObWTe7BG;{L$Y}oZ@43_&|>kpgT%x9wb986r)A?Y*gJ4$;lNs4X0=E+<5}dE;git z0Ik@?gwpA;@#qm-NEmd4N2wz_{|eW$U>Ib=)ol*)aAJT1ec?}p&>Bp8y|$(@eri9b)Z!@9x&!oeY5ZqkTD9ngDtE2d*^ zTKZ#_`VBWsaUTK4aP@wke1Qk}gy|#&J{}Rj#Yee1_v)*sfo#A|pSIAz6#)ioO~*V{ z>7k13vGJTIRUAWd8$YK%19!_veyqWePr`tAPa+vU0Eq9=xw0-#^XUrS9|NB}7CxQ9 z&S2D6!Iyp#`>oN}89ER3pqBz<{cIjZ^W*kd-x4CZo%G$OwH<@ zOgkZNL=+BGMGX{p66D<>`({k6Iz#pi(CiDh`(Nslg~)R#ByqNxV>rEM8H*0_iSYd? zr29hSs`x?og>}kp6fa^=bWq8(VQ*LsSS6L^!a#7ZKP+@;-p~IXT*$UosD7_%Ru5JK*C% z^6?sT6DLV~HxRUP8Qn#>koVF)f0EWN5zR1m$s$-AddPtx+XDK+(S&@cO`|7iv{qQD zo}sRKl08F%i{2L~@j}ntaKz{y8m_XEjJqR@8-5`70qEvGNye#PA`4}7P*d;9sxohC z$!8x1Gm0wkDGsUs3=c2m#6v1#PX8qj`x6;uK8Y5DWKzF?h*13rp}VWUceD0?!`g8r zGEw^woflQR#p)msgPgIJ5;1VX!zRB_Av3sw#A&@kx&0yu_#8aFvv+qP%`q1X=}j{! zqQi^%BB>!r1i=d}LxuEt&>}*5TJGV*>=-1c)xYm;mCOSXPX7Tf9!7CVam&?{oDGpX z)J)O9)AK`)%o#kPxE+J4I4d8=G3C(Our<*22w|{aVesX za3UTfyTNAzdBb&-e9Ksnr$LmcEoJ=Vtb7y}0_C@m7y?DahE!2%5O+q0*+y9{f4v6Fi;h!9mhyCn}83H9bcnIBNCB zWcG>*e-k-AOcrqb2dI!@im0$?=70*BqJgL9ha8zRctSBXp>;>x2K8U@b`KItRF?Wh z7L}TTltZtPLn4Q8nS#ndd3|zWR4X>yf{oz+qimLy{O8yJU*&!;0(hA?F*vJX`y{!Lt z;o-&Sbp3mfkkOHjpchi|P*7O7z*atqsL)AKQb*k9Ny+En;jN_|l<1H7_E;I%{%}>J zewC&E8l7LKQ=yZpq=C2}VkN%;Pv_*0N(PBM^?SXANwNDG_ut`s0wty;7XemL02Wg$ z%$>lIK>6=Y=AA`lBC2|S6rPW&_2y%1=)8Qo9z|!Whx#Vfc%IE4kYEGn6g)*Ot8z?r zAW;lg1guT|Lj<|ZQ=JW7OSbu?jWzj*cD<=jD~r{m$g)Q1l<17nq0vhIgBAI2BJ_vw zUS-_J==>m^FVML`=SS)Ay|pQ1xRD&k&vo9Mxa>3-of#uNVg3x0V- z|BpE(oKWK0j_zTzU`-S!CNm$;d>pI3`zAh)&|?$tnkeDlxrrwyj!YCLo|t&s^xXdk Di?V58 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/special.cpython-310.pyc b/venv/Lib/site-packages/django/db/migrations/operations/__pycache__/special.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1ab30c7dcaa86ff07baa74f56b93f72033f81cc GIT binary patch literal 6467 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 a^X1N4#WlwdNsE%&>l!GAx$^zv*ZvDUlAsa* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/migrations/operations/base.py b/venv/Lib/site-packages/django/db/migrations/operations/base.py new file mode 100644 index 000000000..7d4dff259 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/operations/base.py @@ -0,0 +1,146 @@ +from django.db import router + + +class Operation: + """ + Base class for migration operations. + + It's responsible for both mutating the in-memory model state + (see db/migrations/state.py) to represent what it performs, as well + as actually performing it against a live database. + + Note that some operations won't modify memory state at all (e.g. data + copying operations), and some will need their modifications to be + optionally specified by the user (e.g. custom Python code snippets) + + Due to the way this class deals with deconstruction, it should be + considered immutable. + """ + + # If this migration can be run in reverse. + # Some operations are impossible to reverse, like deleting data. + reversible = True + + # Can this migration be represented as SQL? (things like RunPython cannot) + reduces_to_sql = True + + # Should this operation be forced as atomic even on backends with no + # DDL transaction support (i.e., does it have no DDL, like RunPython) + atomic = False + + # Should this operation be considered safe to elide and optimize across? + elidable = False + + serialization_expand_args = [] + + def __new__(cls, *args, **kwargs): + # We capture the arguments to make returning them trivial + self = object.__new__(cls) + self._constructor_args = (args, kwargs) + return self + + def deconstruct(self): + """ + Return a 3-tuple of class import path (or just name if it lives + under django.db.migrations), positional arguments, and keyword + arguments. + """ + return ( + self.__class__.__name__, + self._constructor_args[0], + self._constructor_args[1], + ) + + def state_forwards(self, app_label, state): + """ + Take the state from the previous migration, and mutate it + so that it matches what this migration would perform. + """ + raise NotImplementedError( + "subclasses of Operation must provide a state_forwards() method" + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + """ + Perform the mutation on the database schema in the normal + (forwards) direction. + """ + raise NotImplementedError( + "subclasses of Operation must provide a database_forwards() method" + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + """ + Perform the mutation on the database schema in the reverse + direction - e.g. if this were CreateModel, it would in fact + drop the model's table. + """ + raise NotImplementedError( + "subclasses of Operation must provide a database_backwards() method" + ) + + def describe(self): + """ + Output a brief summary of what the action does. + """ + return "%s: %s" % (self.__class__.__name__, self._constructor_args) + + @property + def migration_name_fragment(self): + """ + A filename part suitable for automatically naming a migration + containing this operation, or None if not applicable. + """ + return None + + def references_model(self, name, app_label): + """ + Return True if there is a chance this operation references the given + model name (as a string), with an app label for accuracy. + + Used for optimization. If in doubt, return True; + returning a false positive will merely make the optimizer a little + less efficient, while returning a false negative may result in an + unusable optimized migration. + """ + return True + + def references_field(self, model_name, name, app_label): + """ + Return True if there is a chance this operation references the given + field name, with an app label for accuracy. + + Used for optimization. If in doubt, return True. + """ + return self.references_model(model_name, app_label) + + def allow_migrate_model(self, connection_alias, model): + """ + Return whether or not a model may be migrated. + + This is a thin wrapper around router.allow_migrate_model() that + preemptively rejects any proxy, swapped out, or unmanaged model. + """ + if not model._meta.can_migrate(connection_alias): + return False + + return router.allow_migrate_model(connection_alias, model) + + def reduce(self, operation, app_label): + """ + Return either a list of operations the actual operation should be + replaced with or a boolean that indicates whether or not the specified + operation can be optimized across. + """ + if self.elidable: + return [operation] + elif operation.elidable: + return [self] + return False + + def __repr__(self): + return "<%s %s%s>" % ( + self.__class__.__name__, + ", ".join(map(repr, self._constructor_args[0])), + ",".join(" %s=%r" % x for x in self._constructor_args[1].items()), + ) diff --git a/venv/Lib/site-packages/django/db/migrations/operations/fields.py b/venv/Lib/site-packages/django/db/migrations/operations/fields.py new file mode 100644 index 000000000..a1bf81e5a --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/operations/fields.py @@ -0,0 +1,355 @@ +from django.db.migrations.utils import field_references +from django.db.models import NOT_PROVIDED +from django.utils.functional import cached_property + +from .base import Operation + + +class FieldOperation(Operation): + def __init__(self, model_name, name, field=None): + self.model_name = model_name + self.name = name + self.field = field + + @cached_property + def model_name_lower(self): + return self.model_name.lower() + + @cached_property + def name_lower(self): + return self.name.lower() + + def is_same_model_operation(self, operation): + return self.model_name_lower == operation.model_name_lower + + def is_same_field_operation(self, operation): + return ( + self.is_same_model_operation(operation) + and self.name_lower == operation.name_lower + ) + + def references_model(self, name, app_label): + name_lower = name.lower() + if name_lower == self.model_name_lower: + return True + if self.field: + return bool( + field_references( + (app_label, self.model_name_lower), + self.field, + (app_label, name_lower), + ) + ) + return False + + def references_field(self, model_name, name, app_label): + model_name_lower = model_name.lower() + # Check if this operation locally references the field. + if model_name_lower == self.model_name_lower: + if name == self.name: + return True + elif ( + self.field + and hasattr(self.field, "from_fields") + and name in self.field.from_fields + ): + return True + # Check if this operation remotely references the field. + if self.field is None: + return False + return bool( + field_references( + (app_label, self.model_name_lower), + self.field, + (app_label, model_name_lower), + name, + ) + ) + + def reduce(self, operation, app_label): + return super().reduce(operation, app_label) or not operation.references_field( + self.model_name, self.name, app_label + ) + + +class AddField(FieldOperation): + """Add a field to a model.""" + + def __init__(self, model_name, name, field, preserve_default=True): + self.preserve_default = preserve_default + super().__init__(model_name, name, field) + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "name": self.name, + "field": self.field, + } + if self.preserve_default is not True: + kwargs["preserve_default"] = self.preserve_default + return (self.__class__.__name__, [], kwargs) + + def state_forwards(self, app_label, state): + state.add_field( + app_label, + self.model_name_lower, + self.name, + self.field, + self.preserve_default, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + field = to_model._meta.get_field(self.name) + if not self.preserve_default: + field.default = self.field.default + schema_editor.add_field( + from_model, + field, + ) + if not self.preserve_default: + field.default = NOT_PROVIDED + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + from_model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, from_model): + schema_editor.remove_field( + from_model, from_model._meta.get_field(self.name) + ) + + def describe(self): + return "Add field %s to %s" % (self.name, self.model_name) + + @property + def migration_name_fragment(self): + return "%s_%s" % (self.model_name_lower, self.name_lower) + + def reduce(self, operation, app_label): + if isinstance(operation, FieldOperation) and self.is_same_field_operation( + operation + ): + if isinstance(operation, AlterField): + return [ + AddField( + model_name=self.model_name, + name=operation.name, + field=operation.field, + ), + ] + elif isinstance(operation, RemoveField): + return [] + elif isinstance(operation, RenameField): + return [ + AddField( + model_name=self.model_name, + name=operation.new_name, + field=self.field, + ), + ] + return super().reduce(operation, app_label) + + +class RemoveField(FieldOperation): + """Remove a field from a model.""" + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "name": self.name, + } + return (self.__class__.__name__, [], kwargs) + + def state_forwards(self, app_label, state): + state.remove_field(app_label, self.model_name_lower, self.name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + from_model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, from_model): + schema_editor.remove_field( + from_model, from_model._meta.get_field(self.name) + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.add_field(from_model, to_model._meta.get_field(self.name)) + + def describe(self): + return "Remove field %s from %s" % (self.name, self.model_name) + + @property + def migration_name_fragment(self): + return "remove_%s_%s" % (self.model_name_lower, self.name_lower) + + def reduce(self, operation, app_label): + from .models import DeleteModel + + if ( + isinstance(operation, DeleteModel) + and operation.name_lower == self.model_name_lower + ): + return [operation] + return super().reduce(operation, app_label) + + +class AlterField(FieldOperation): + """ + Alter a field's database column (e.g. null, max_length) to the provided + new field. + """ + + def __init__(self, model_name, name, field, preserve_default=True): + self.preserve_default = preserve_default + super().__init__(model_name, name, field) + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "name": self.name, + "field": self.field, + } + if self.preserve_default is not True: + kwargs["preserve_default"] = self.preserve_default + return (self.__class__.__name__, [], kwargs) + + def state_forwards(self, app_label, state): + state.alter_field( + app_label, + self.model_name_lower, + self.name, + self.field, + self.preserve_default, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + from_field = from_model._meta.get_field(self.name) + to_field = to_model._meta.get_field(self.name) + if not self.preserve_default: + to_field.default = self.field.default + schema_editor.alter_field(from_model, from_field, to_field) + if not self.preserve_default: + to_field.default = NOT_PROVIDED + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.database_forwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Alter field %s on %s" % (self.name, self.model_name) + + @property + def migration_name_fragment(self): + return "alter_%s_%s" % (self.model_name_lower, self.name_lower) + + def reduce(self, operation, app_label): + if isinstance(operation, RemoveField) and self.is_same_field_operation( + operation + ): + return [operation] + elif isinstance(operation, RenameField) and self.is_same_field_operation( + operation + ): + return [ + operation, + AlterField( + model_name=self.model_name, + name=operation.new_name, + field=self.field, + ), + ] + return super().reduce(operation, app_label) + + +class RenameField(FieldOperation): + """Rename a field on the model. Might affect db_column too.""" + + def __init__(self, model_name, old_name, new_name): + self.old_name = old_name + self.new_name = new_name + super().__init__(model_name, old_name) + + @cached_property + def old_name_lower(self): + return self.old_name.lower() + + @cached_property + def new_name_lower(self): + return self.new_name.lower() + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "old_name": self.old_name, + "new_name": self.new_name, + } + return (self.__class__.__name__, [], kwargs) + + def state_forwards(self, app_label, state): + state.rename_field( + app_label, self.model_name_lower, self.old_name, self.new_name + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.alter_field( + from_model, + from_model._meta.get_field(self.old_name), + to_model._meta.get_field(self.new_name), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.alter_field( + from_model, + from_model._meta.get_field(self.new_name), + to_model._meta.get_field(self.old_name), + ) + + def describe(self): + return "Rename field %s on %s to %s" % ( + self.old_name, + self.model_name, + self.new_name, + ) + + @property + def migration_name_fragment(self): + return "rename_%s_%s_%s" % ( + self.old_name_lower, + self.model_name_lower, + self.new_name_lower, + ) + + def references_field(self, model_name, name, app_label): + return self.references_model(model_name, app_label) and ( + name.lower() == self.old_name_lower or name.lower() == self.new_name_lower + ) + + def reduce(self, operation, app_label): + if ( + isinstance(operation, RenameField) + and self.is_same_model_operation(operation) + and self.new_name_lower == operation.old_name_lower + ): + return [ + RenameField( + self.model_name, + self.old_name, + operation.new_name, + ), + ] + # Skip `FieldOperation.reduce` as we want to run `references_field` + # against self.old_name and self.new_name. + return super(FieldOperation, self).reduce(operation, app_label) or not ( + operation.references_field(self.model_name, self.old_name, app_label) + or operation.references_field(self.model_name, self.new_name, app_label) + ) diff --git a/venv/Lib/site-packages/django/db/migrations/operations/models.py b/venv/Lib/site-packages/django/db/migrations/operations/models.py new file mode 100644 index 000000000..5a727d454 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/operations/models.py @@ -0,0 +1,936 @@ +from django.db import models +from django.db.migrations.operations.base import Operation +from django.db.migrations.state import ModelState +from django.db.migrations.utils import field_references, resolve_relation +from django.db.models.options import normalize_together +from django.utils.functional import cached_property + +from .fields import AddField, AlterField, FieldOperation, RemoveField, RenameField + + +def _check_for_duplicates(arg_name, objs): + used_vals = set() + for val in objs: + if val in used_vals: + raise ValueError( + "Found duplicate value %s in CreateModel %s argument." % (val, arg_name) + ) + used_vals.add(val) + + +class ModelOperation(Operation): + def __init__(self, name): + self.name = name + + @cached_property + def name_lower(self): + return self.name.lower() + + def references_model(self, name, app_label): + return name.lower() == self.name_lower + + def reduce(self, operation, app_label): + return super().reduce(operation, app_label) or not operation.references_model( + self.name, app_label + ) + + +class CreateModel(ModelOperation): + """Create a model's table.""" + + serialization_expand_args = ["fields", "options", "managers"] + + def __init__(self, name, fields, options=None, bases=None, managers=None): + self.fields = fields + self.options = options or {} + self.bases = bases or (models.Model,) + self.managers = managers or [] + super().__init__(name) + # Sanity-check that there are no duplicated field names, bases, or + # manager names + _check_for_duplicates("fields", (name for name, _ in self.fields)) + _check_for_duplicates( + "bases", + ( + base._meta.label_lower + if hasattr(base, "_meta") + else base.lower() + if isinstance(base, str) + else base + for base in self.bases + ), + ) + _check_for_duplicates("managers", (name for name, _ in self.managers)) + + def deconstruct(self): + kwargs = { + "name": self.name, + "fields": self.fields, + } + if self.options: + kwargs["options"] = self.options + if self.bases and self.bases != (models.Model,): + kwargs["bases"] = self.bases + if self.managers and self.managers != [("objects", models.Manager())]: + kwargs["managers"] = self.managers + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.add_model( + ModelState( + app_label, + self.name, + list(self.fields), + dict(self.options), + tuple(self.bases), + list(self.managers), + ) + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.create_model(model) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.delete_model(model) + + def describe(self): + return "Create %smodel %s" % ( + "proxy " if self.options.get("proxy", False) else "", + self.name, + ) + + @property + def migration_name_fragment(self): + return self.name_lower + + def references_model(self, name, app_label): + name_lower = name.lower() + if name_lower == self.name_lower: + return True + + # Check we didn't inherit from the model + reference_model_tuple = (app_label, name_lower) + for base in self.bases: + if ( + base is not models.Model + and isinstance(base, (models.base.ModelBase, str)) + and resolve_relation(base, app_label) == reference_model_tuple + ): + return True + + # Check we have no FKs/M2Ms with it + for _name, field in self.fields: + if field_references( + (app_label, self.name_lower), field, reference_model_tuple + ): + return True + return False + + def reduce(self, operation, app_label): + if ( + isinstance(operation, DeleteModel) + and self.name_lower == operation.name_lower + and not self.options.get("proxy", False) + ): + return [] + elif ( + isinstance(operation, RenameModel) + and self.name_lower == operation.old_name_lower + ): + return [ + CreateModel( + operation.new_name, + fields=self.fields, + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif ( + isinstance(operation, AlterModelOptions) + and self.name_lower == operation.name_lower + ): + options = {**self.options, **operation.options} + for key in operation.ALTER_OPTION_KEYS: + if key not in operation.options: + options.pop(key, None) + return [ + CreateModel( + self.name, + fields=self.fields, + options=options, + bases=self.bases, + managers=self.managers, + ), + ] + elif ( + isinstance(operation, AlterTogetherOptionOperation) + and self.name_lower == operation.name_lower + ): + return [ + CreateModel( + self.name, + fields=self.fields, + options={ + **self.options, + **{operation.option_name: operation.option_value}, + }, + bases=self.bases, + managers=self.managers, + ), + ] + elif ( + isinstance(operation, AlterOrderWithRespectTo) + and self.name_lower == operation.name_lower + ): + return [ + CreateModel( + self.name, + fields=self.fields, + options={ + **self.options, + "order_with_respect_to": operation.order_with_respect_to, + }, + bases=self.bases, + managers=self.managers, + ), + ] + elif ( + isinstance(operation, FieldOperation) + and self.name_lower == operation.model_name_lower + ): + if isinstance(operation, AddField): + return [ + CreateModel( + self.name, + fields=self.fields + [(operation.name, operation.field)], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, AlterField): + return [ + CreateModel( + self.name, + fields=[ + (n, operation.field if n == operation.name else v) + for n, v in self.fields + ], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, RemoveField): + options = self.options.copy() + for option_name in ("unique_together", "index_together"): + option = options.pop(option_name, None) + if option: + option = set( + filter( + bool, + ( + tuple( + f for f in fields if f != operation.name_lower + ) + for fields in option + ), + ) + ) + if option: + options[option_name] = option + order_with_respect_to = options.get("order_with_respect_to") + if order_with_respect_to == operation.name_lower: + del options["order_with_respect_to"] + return [ + CreateModel( + self.name, + fields=[ + (n, v) + for n, v in self.fields + if n.lower() != operation.name_lower + ], + options=options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, RenameField): + options = self.options.copy() + for option_name in ("unique_together", "index_together"): + option = options.get(option_name) + if option: + options[option_name] = { + tuple( + operation.new_name if f == operation.old_name else f + for f in fields + ) + for fields in option + } + order_with_respect_to = options.get("order_with_respect_to") + if order_with_respect_to == operation.old_name: + options["order_with_respect_to"] = operation.new_name + return [ + CreateModel( + self.name, + fields=[ + (operation.new_name if n == operation.old_name else n, v) + for n, v in self.fields + ], + options=options, + bases=self.bases, + managers=self.managers, + ), + ] + return super().reduce(operation, app_label) + + +class DeleteModel(ModelOperation): + """Drop a model's table.""" + + def deconstruct(self): + kwargs = { + "name": self.name, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.remove_model(app_label, self.name_lower) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.delete_model(model) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.create_model(model) + + def references_model(self, name, app_label): + # The deleted model could be referencing the specified model through + # related fields. + return True + + def describe(self): + return "Delete model %s" % self.name + + @property + def migration_name_fragment(self): + return "delete_%s" % self.name_lower + + +class RenameModel(ModelOperation): + """Rename a model.""" + + def __init__(self, old_name, new_name): + self.old_name = old_name + self.new_name = new_name + super().__init__(old_name) + + @cached_property + def old_name_lower(self): + return self.old_name.lower() + + @cached_property + def new_name_lower(self): + return self.new_name.lower() + + def deconstruct(self): + kwargs = { + "old_name": self.old_name, + "new_name": self.new_name, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.rename_model(app_label, self.old_name, self.new_name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.new_name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.old_name) + # Move the main table + schema_editor.alter_db_table( + new_model, + old_model._meta.db_table, + new_model._meta.db_table, + ) + # Alter the fields pointing to us + for related_object in old_model._meta.related_objects: + if related_object.related_model == old_model: + model = new_model + related_key = (app_label, self.new_name_lower) + else: + model = related_object.related_model + related_key = ( + related_object.related_model._meta.app_label, + related_object.related_model._meta.model_name, + ) + to_field = to_state.apps.get_model(*related_key)._meta.get_field( + related_object.field.name + ) + schema_editor.alter_field( + model, + related_object.field, + to_field, + ) + # Rename M2M fields whose name is based on this model's name. + fields = zip( + old_model._meta.local_many_to_many, new_model._meta.local_many_to_many + ) + for (old_field, new_field) in fields: + # Skip self-referential fields as these are renamed above. + if ( + new_field.model == new_field.related_model + or not new_field.remote_field.through._meta.auto_created + ): + continue + # Rename the M2M table that's based on this model's name. + old_m2m_model = old_field.remote_field.through + new_m2m_model = new_field.remote_field.through + schema_editor.alter_db_table( + new_m2m_model, + old_m2m_model._meta.db_table, + new_m2m_model._meta.db_table, + ) + # Rename the column in the M2M table that's based on this + # model's name. + schema_editor.alter_field( + new_m2m_model, + old_m2m_model._meta.get_field(old_model._meta.model_name), + new_m2m_model._meta.get_field(new_model._meta.model_name), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.new_name_lower, self.old_name_lower = ( + self.old_name_lower, + self.new_name_lower, + ) + self.new_name, self.old_name = self.old_name, self.new_name + + self.database_forwards(app_label, schema_editor, from_state, to_state) + + self.new_name_lower, self.old_name_lower = ( + self.old_name_lower, + self.new_name_lower, + ) + self.new_name, self.old_name = self.old_name, self.new_name + + def references_model(self, name, app_label): + return ( + name.lower() == self.old_name_lower or name.lower() == self.new_name_lower + ) + + def describe(self): + return "Rename model %s to %s" % (self.old_name, self.new_name) + + @property + def migration_name_fragment(self): + return "rename_%s_%s" % (self.old_name_lower, self.new_name_lower) + + def reduce(self, operation, app_label): + if ( + isinstance(operation, RenameModel) + and self.new_name_lower == operation.old_name_lower + ): + return [ + RenameModel( + self.old_name, + operation.new_name, + ), + ] + # Skip `ModelOperation.reduce` as we want to run `references_model` + # against self.new_name. + return super(ModelOperation, self).reduce( + operation, app_label + ) or not operation.references_model(self.new_name, app_label) + + +class ModelOptionOperation(ModelOperation): + def reduce(self, operation, app_label): + if ( + isinstance(operation, (self.__class__, DeleteModel)) + and self.name_lower == operation.name_lower + ): + return [operation] + return super().reduce(operation, app_label) + + +class AlterModelTable(ModelOptionOperation): + """Rename a model's table.""" + + def __init__(self, name, table): + self.table = table + super().__init__(name) + + def deconstruct(self): + kwargs = { + "name": self.name, + "table": self.table, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.alter_model_options(app_label, self.name_lower, {"db_table": self.table}) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.name) + schema_editor.alter_db_table( + new_model, + old_model._meta.db_table, + new_model._meta.db_table, + ) + # Rename M2M fields whose name is based on this model's db_table + for (old_field, new_field) in zip( + old_model._meta.local_many_to_many, new_model._meta.local_many_to_many + ): + if new_field.remote_field.through._meta.auto_created: + schema_editor.alter_db_table( + new_field.remote_field.through, + old_field.remote_field.through._meta.db_table, + new_field.remote_field.through._meta.db_table, + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Rename table for %s to %s" % ( + self.name, + self.table if self.table is not None else "(default)", + ) + + @property + def migration_name_fragment(self): + return "alter_%s_table" % self.name_lower + + +class AlterTogetherOptionOperation(ModelOptionOperation): + option_name = None + + def __init__(self, name, option_value): + if option_value: + option_value = set(normalize_together(option_value)) + setattr(self, self.option_name, option_value) + super().__init__(name) + + @cached_property + def option_value(self): + return getattr(self, self.option_name) + + def deconstruct(self): + kwargs = { + "name": self.name, + self.option_name: self.option_value, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.alter_model_options( + app_label, + self.name_lower, + {self.option_name: self.option_value}, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.name) + alter_together = getattr(schema_editor, "alter_%s" % self.option_name) + alter_together( + new_model, + getattr(old_model._meta, self.option_name, set()), + getattr(new_model._meta, self.option_name, set()), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def references_field(self, model_name, name, app_label): + return self.references_model(model_name, app_label) and ( + not self.option_value + or any((name in fields) for fields in self.option_value) + ) + + def describe(self): + return "Alter %s for %s (%s constraint(s))" % ( + self.option_name, + self.name, + len(self.option_value or ""), + ) + + @property + def migration_name_fragment(self): + return "alter_%s_%s" % (self.name_lower, self.option_name) + + +class AlterUniqueTogether(AlterTogetherOptionOperation): + """ + Change the value of unique_together to the target one. + Input value of unique_together must be a set of tuples. + """ + + option_name = "unique_together" + + def __init__(self, name, unique_together): + super().__init__(name, unique_together) + + +class AlterIndexTogether(AlterTogetherOptionOperation): + """ + Change the value of index_together to the target one. + Input value of index_together must be a set of tuples. + """ + + option_name = "index_together" + + def __init__(self, name, index_together): + super().__init__(name, index_together) + + +class AlterOrderWithRespectTo(ModelOptionOperation): + """Represent a change with the order_with_respect_to option.""" + + option_name = "order_with_respect_to" + + def __init__(self, name, order_with_respect_to): + self.order_with_respect_to = order_with_respect_to + super().__init__(name) + + def deconstruct(self): + kwargs = { + "name": self.name, + "order_with_respect_to": self.order_with_respect_to, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.alter_model_options( + app_label, + self.name_lower, + {self.option_name: self.order_with_respect_to}, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.name) + # Remove a field if we need to + if ( + from_model._meta.order_with_respect_to + and not to_model._meta.order_with_respect_to + ): + schema_editor.remove_field( + from_model, from_model._meta.get_field("_order") + ) + # Add a field if we need to (altering the column is untouched as + # it's likely a rename) + elif ( + to_model._meta.order_with_respect_to + and not from_model._meta.order_with_respect_to + ): + field = to_model._meta.get_field("_order") + if not field.has_default(): + field.default = 0 + schema_editor.add_field( + from_model, + field, + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.database_forwards(app_label, schema_editor, from_state, to_state) + + def references_field(self, model_name, name, app_label): + return self.references_model(model_name, app_label) and ( + self.order_with_respect_to is None or name == self.order_with_respect_to + ) + + def describe(self): + return "Set order_with_respect_to on %s to %s" % ( + self.name, + self.order_with_respect_to, + ) + + @property + def migration_name_fragment(self): + return "alter_%s_order_with_respect_to" % self.name_lower + + +class AlterModelOptions(ModelOptionOperation): + """ + Set new model options that don't directly affect the database schema + (like verbose_name, permissions, ordering). Python code in migrations + may still need them. + """ + + # Model options we want to compare and preserve in an AlterModelOptions op + ALTER_OPTION_KEYS = [ + "base_manager_name", + "default_manager_name", + "default_related_name", + "get_latest_by", + "managed", + "ordering", + "permissions", + "default_permissions", + "select_on_save", + "verbose_name", + "verbose_name_plural", + ] + + def __init__(self, name, options): + self.options = options + super().__init__(name) + + def deconstruct(self): + kwargs = { + "name": self.name, + "options": self.options, + } + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + state.alter_model_options( + app_label, + self.name_lower, + self.options, + self.ALTER_OPTION_KEYS, + ) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + pass + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + pass + + def describe(self): + return "Change Meta options on %s" % self.name + + @property + def migration_name_fragment(self): + return "alter_%s_options" % self.name_lower + + +class AlterModelManagers(ModelOptionOperation): + """Alter the model's managers.""" + + serialization_expand_args = ["managers"] + + def __init__(self, name, managers): + self.managers = managers + super().__init__(name) + + def deconstruct(self): + return (self.__class__.__qualname__, [self.name, self.managers], {}) + + def state_forwards(self, app_label, state): + state.alter_model_managers(app_label, self.name_lower, self.managers) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + pass + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + pass + + def describe(self): + return "Change managers on %s" % self.name + + @property + def migration_name_fragment(self): + return "alter_%s_managers" % self.name_lower + + +class IndexOperation(Operation): + option_name = "indexes" + + @cached_property + def model_name_lower(self): + return self.model_name.lower() + + +class AddIndex(IndexOperation): + """Add an index on a model.""" + + def __init__(self, model_name, index): + self.model_name = model_name + if not index.name: + raise ValueError( + "Indexes passed to AddIndex operations require a name " + "argument. %r doesn't have one." % index + ) + self.index = index + + def state_forwards(self, app_label, state): + state.add_index(app_label, self.model_name_lower, self.index) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.add_index(model, self.index) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.remove_index(model, self.index) + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "index": self.index, + } + return ( + self.__class__.__qualname__, + [], + kwargs, + ) + + def describe(self): + if self.index.expressions: + return "Create index %s on %s on model %s" % ( + self.index.name, + ", ".join([str(expression) for expression in self.index.expressions]), + self.model_name, + ) + return "Create index %s on field(s) %s of model %s" % ( + self.index.name, + ", ".join(self.index.fields), + self.model_name, + ) + + @property + def migration_name_fragment(self): + return "%s_%s" % (self.model_name_lower, self.index.name.lower()) + + +class RemoveIndex(IndexOperation): + """Remove an index from a model.""" + + def __init__(self, model_name, name): + self.model_name = model_name + self.name = name + + def state_forwards(self, app_label, state): + state.remove_index(app_label, self.model_name_lower, self.name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + from_model_state = from_state.models[app_label, self.model_name_lower] + index = from_model_state.get_index_by_name(self.name) + schema_editor.remove_index(model, index) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + to_model_state = to_state.models[app_label, self.model_name_lower] + index = to_model_state.get_index_by_name(self.name) + schema_editor.add_index(model, index) + + def deconstruct(self): + kwargs = { + "model_name": self.model_name, + "name": self.name, + } + return ( + self.__class__.__qualname__, + [], + kwargs, + ) + + def describe(self): + return "Remove index %s from %s" % (self.name, self.model_name) + + @property + def migration_name_fragment(self): + return "remove_%s_%s" % (self.model_name_lower, self.name.lower()) + + +class AddConstraint(IndexOperation): + option_name = "constraints" + + def __init__(self, model_name, constraint): + self.model_name = model_name + self.constraint = constraint + + def state_forwards(self, app_label, state): + state.add_constraint(app_label, self.model_name_lower, self.constraint) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.add_constraint(model, self.constraint) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.remove_constraint(model, self.constraint) + + def deconstruct(self): + return ( + self.__class__.__name__, + [], + { + "model_name": self.model_name, + "constraint": self.constraint, + }, + ) + + def describe(self): + return "Create constraint %s on model %s" % ( + self.constraint.name, + self.model_name, + ) + + @property + def migration_name_fragment(self): + return "%s_%s" % (self.model_name_lower, self.constraint.name.lower()) + + +class RemoveConstraint(IndexOperation): + option_name = "constraints" + + def __init__(self, model_name, name): + self.model_name = model_name + self.name = name + + def state_forwards(self, app_label, state): + state.remove_constraint(app_label, self.model_name_lower, self.name) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + from_model_state = from_state.models[app_label, self.model_name_lower] + constraint = from_model_state.get_constraint_by_name(self.name) + schema_editor.remove_constraint(model, constraint) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + to_model_state = to_state.models[app_label, self.model_name_lower] + constraint = to_model_state.get_constraint_by_name(self.name) + schema_editor.add_constraint(model, constraint) + + def deconstruct(self): + return ( + self.__class__.__name__, + [], + { + "model_name": self.model_name, + "name": self.name, + }, + ) + + def describe(self): + return "Remove constraint %s from model %s" % (self.name, self.model_name) + + @property + def migration_name_fragment(self): + return "remove_%s_%s" % (self.model_name_lower, self.name.lower()) diff --git a/venv/Lib/site-packages/django/db/migrations/operations/special.py b/venv/Lib/site-packages/django/db/migrations/operations/special.py new file mode 100644 index 000000000..94a6ec72d --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/operations/special.py @@ -0,0 +1,208 @@ +from django.db import router + +from .base import Operation + + +class SeparateDatabaseAndState(Operation): + """ + Take two lists of operations - ones that will be used for the database, + and ones that will be used for the state change. This allows operations + that don't support state change to have it applied, or have operations + that affect the state or not the database, or so on. + """ + + serialization_expand_args = ["database_operations", "state_operations"] + + def __init__(self, database_operations=None, state_operations=None): + self.database_operations = database_operations or [] + self.state_operations = state_operations or [] + + def deconstruct(self): + kwargs = {} + if self.database_operations: + kwargs["database_operations"] = self.database_operations + if self.state_operations: + kwargs["state_operations"] = self.state_operations + return (self.__class__.__qualname__, [], kwargs) + + def state_forwards(self, app_label, state): + for state_operation in self.state_operations: + state_operation.state_forwards(app_label, state) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + # We calculate state separately in here since our state functions aren't useful + for database_operation in self.database_operations: + to_state = from_state.clone() + database_operation.state_forwards(app_label, to_state) + database_operation.database_forwards( + app_label, schema_editor, from_state, to_state + ) + from_state = to_state + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + # We calculate state separately in here since our state functions aren't useful + to_states = {} + for dbop in self.database_operations: + to_states[dbop] = to_state + to_state = to_state.clone() + dbop.state_forwards(app_label, to_state) + # to_state now has the states of all the database_operations applied + # which is the from_state for the backwards migration of the last + # operation. + for database_operation in reversed(self.database_operations): + from_state = to_state + to_state = to_states[database_operation] + database_operation.database_backwards( + app_label, schema_editor, from_state, to_state + ) + + def describe(self): + return "Custom state/database change combination" + + +class RunSQL(Operation): + """ + Run some raw SQL. A reverse SQL statement may be provided. + + Also accept a list of operations that represent the state change effected + by this SQL change, in case it's custom column/table creation/deletion. + """ + + noop = "" + + def __init__( + self, sql, reverse_sql=None, state_operations=None, hints=None, elidable=False + ): + self.sql = sql + self.reverse_sql = reverse_sql + self.state_operations = state_operations or [] + self.hints = hints or {} + self.elidable = elidable + + def deconstruct(self): + kwargs = { + "sql": self.sql, + } + if self.reverse_sql is not None: + kwargs["reverse_sql"] = self.reverse_sql + if self.state_operations: + kwargs["state_operations"] = self.state_operations + if self.hints: + kwargs["hints"] = self.hints + return (self.__class__.__qualname__, [], kwargs) + + @property + def reversible(self): + return self.reverse_sql is not None + + def state_forwards(self, app_label, state): + for state_operation in self.state_operations: + state_operation.state_forwards(app_label, state) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if router.allow_migrate( + schema_editor.connection.alias, app_label, **self.hints + ): + self._run_sql(schema_editor, self.sql) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if self.reverse_sql is None: + raise NotImplementedError("You cannot reverse this operation") + if router.allow_migrate( + schema_editor.connection.alias, app_label, **self.hints + ): + self._run_sql(schema_editor, self.reverse_sql) + + def describe(self): + return "Raw SQL operation" + + def _run_sql(self, schema_editor, sqls): + if isinstance(sqls, (list, tuple)): + for sql in sqls: + params = None + if isinstance(sql, (list, tuple)): + elements = len(sql) + if elements == 2: + sql, params = sql + else: + raise ValueError("Expected a 2-tuple but got %d" % elements) + schema_editor.execute(sql, params=params) + elif sqls != RunSQL.noop: + statements = schema_editor.connection.ops.prepare_sql_script(sqls) + for statement in statements: + schema_editor.execute(statement, params=None) + + +class RunPython(Operation): + """ + Run Python code in a context suitable for doing versioned ORM operations. + """ + + reduces_to_sql = False + + def __init__( + self, code, reverse_code=None, atomic=None, hints=None, elidable=False + ): + self.atomic = atomic + # Forwards code + if not callable(code): + raise ValueError("RunPython must be supplied with a callable") + self.code = code + # Reverse code + if reverse_code is None: + self.reverse_code = None + else: + if not callable(reverse_code): + raise ValueError("RunPython must be supplied with callable arguments") + self.reverse_code = reverse_code + self.hints = hints or {} + self.elidable = elidable + + def deconstruct(self): + kwargs = { + "code": self.code, + } + if self.reverse_code is not None: + kwargs["reverse_code"] = self.reverse_code + if self.atomic is not None: + kwargs["atomic"] = self.atomic + if self.hints: + kwargs["hints"] = self.hints + return (self.__class__.__qualname__, [], kwargs) + + @property + def reversible(self): + return self.reverse_code is not None + + def state_forwards(self, app_label, state): + # RunPython objects have no state effect. To add some, combine this + # with SeparateDatabaseAndState. + pass + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + # RunPython has access to all models. Ensure that all models are + # reloaded in case any are delayed. + from_state.clear_delayed_apps_cache() + if router.allow_migrate( + schema_editor.connection.alias, app_label, **self.hints + ): + # We now execute the Python code in a context that contains a 'models' + # object, representing the versioned models as an app registry. + # We could try to override the global cache, but then people will still + # use direct imports, so we go with a documentation approach instead. + self.code(from_state.apps, schema_editor) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if self.reverse_code is None: + raise NotImplementedError("You cannot reverse this operation") + if router.allow_migrate( + schema_editor.connection.alias, app_label, **self.hints + ): + self.reverse_code(from_state.apps, schema_editor) + + def describe(self): + return "Raw Python operation" + + @staticmethod + def noop(apps, schema_editor): + return None diff --git a/venv/Lib/site-packages/django/db/migrations/optimizer.py b/venv/Lib/site-packages/django/db/migrations/optimizer.py new file mode 100644 index 000000000..7e5dea237 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/optimizer.py @@ -0,0 +1,69 @@ +class MigrationOptimizer: + """ + Power the optimization process, where you provide a list of Operations + and you are returned a list of equal or shorter length - operations + are merged into one if possible. + + For example, a CreateModel and an AddField can be optimized into a + new CreateModel, and CreateModel and DeleteModel can be optimized into + nothing. + """ + + def optimize(self, operations, app_label): + """ + Main optimization entry point. Pass in a list of Operation instances, + get out a new list of Operation instances. + + Unfortunately, due to the scope of the optimization (two combinable + operations might be separated by several hundred others), this can't be + done as a peephole optimization with checks/output implemented on + the Operations themselves; instead, the optimizer looks at each + individual operation and scans forwards in the list to see if there + are any matches, stopping at boundaries - operations which can't + be optimized over (RunSQL, operations on the same field/model, etc.) + + The inner loop is run until the starting list is the same as the result + list, and then the result is returned. This means that operation + optimization must be stable and always return an equal or shorter list. + """ + # Internal tracking variable for test assertions about # of loops + if app_label is None: + raise TypeError("app_label must be a str.") + self._iterations = 0 + while True: + result = self.optimize_inner(operations, app_label) + self._iterations += 1 + if result == operations: + return result + operations = result + + def optimize_inner(self, operations, app_label): + """Inner optimization loop.""" + new_operations = [] + for i, operation in enumerate(operations): + right = True # Should we reduce on the right or on the left. + # Compare it to each operation after it + for j, other in enumerate(operations[i + 1 :]): + result = operation.reduce(other, app_label) + if isinstance(result, list): + in_between = operations[i + 1 : i + j + 1] + if right: + new_operations.extend(in_between) + new_operations.extend(result) + elif all(op.reduce(other, app_label) is True for op in in_between): + # Perform a left reduction if all of the in-between + # operations can optimize through other. + new_operations.extend(result) + new_operations.extend(in_between) + else: + # Otherwise keep trying. + new_operations.append(operation) + break + new_operations.extend(operations[i + j + 2 :]) + return new_operations + elif not result: + # Can't perform a right reduction. + right = False + else: + new_operations.append(operation) + return new_operations diff --git a/venv/Lib/site-packages/django/db/migrations/questioner.py b/venv/Lib/site-packages/django/db/migrations/questioner.py new file mode 100644 index 000000000..2eedfe6a0 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/questioner.py @@ -0,0 +1,259 @@ +import datetime +import importlib +import os +import sys + +from django.apps import apps +from django.db.models import NOT_PROVIDED +from django.utils import timezone + +from .loader import MigrationLoader + + +class MigrationQuestioner: + """ + Give the autodetector responses to questions it might have. + This base class has a built-in noninteractive mode, but the + interactive subclass is what the command-line arguments will use. + """ + + def __init__(self, defaults=None, specified_apps=None, dry_run=None): + self.defaults = defaults or {} + self.specified_apps = specified_apps or set() + self.dry_run = dry_run + + def ask_initial(self, app_label): + """Should we create an initial migration for the app?""" + # If it was specified on the command line, definitely true + if app_label in self.specified_apps: + return True + # Otherwise, we look to see if it has a migrations module + # without any Python files in it, apart from __init__.py. + # Apps from the new app template will have these; the Python + # file check will ensure we skip South ones. + try: + app_config = apps.get_app_config(app_label) + except LookupError: # It's a fake app. + return self.defaults.get("ask_initial", False) + migrations_import_path, _ = MigrationLoader.migrations_module(app_config.label) + if migrations_import_path is None: + # It's an application with migrations disabled. + return self.defaults.get("ask_initial", False) + try: + migrations_module = importlib.import_module(migrations_import_path) + except ImportError: + return self.defaults.get("ask_initial", False) + else: + if getattr(migrations_module, "__file__", None): + filenames = os.listdir(os.path.dirname(migrations_module.__file__)) + elif hasattr(migrations_module, "__path__"): + if len(migrations_module.__path__) > 1: + return False + filenames = os.listdir(list(migrations_module.__path__)[0]) + return not any(x.endswith(".py") for x in filenames if x != "__init__.py") + + def ask_not_null_addition(self, field_name, model_name): + """Adding a NOT NULL field to a model.""" + # None means quit + return None + + def ask_not_null_alteration(self, field_name, model_name): + """Changing a NULL field to NOT NULL.""" + # None means quit + return None + + def ask_rename(self, model_name, old_name, new_name, field_instance): + """Was this field really renamed?""" + return self.defaults.get("ask_rename", False) + + def ask_rename_model(self, old_model_state, new_model_state): + """Was this model really renamed?""" + return self.defaults.get("ask_rename_model", False) + + def ask_merge(self, app_label): + """Should these migrations really be merged?""" + return self.defaults.get("ask_merge", False) + + def ask_auto_now_add_addition(self, field_name, model_name): + """Adding an auto_now_add field to a model.""" + # None means quit + return None + + +class InteractiveMigrationQuestioner(MigrationQuestioner): + def _boolean_input(self, question, default=None): + result = input("%s " % question) + if not result and default is not None: + return default + while not result or result[0].lower() not in "yn": + result = input("Please answer yes or no: ") + return result[0].lower() == "y" + + def _choice_input(self, question, choices): + print(question) + for i, choice in enumerate(choices): + print(" %s) %s" % (i + 1, choice)) + result = input("Select an option: ") + while True: + try: + value = int(result) + except ValueError: + pass + else: + if 0 < value <= len(choices): + return value + result = input("Please select a valid option: ") + + def _ask_default(self, default=""): + """ + Prompt for a default value. + + The ``default`` argument allows providing a custom default value (as a + string) which will be shown to the user and used as the return value + if the user doesn't provide any other input. + """ + print("Please enter the default value as valid Python.") + if default: + print( + f"Accept the default '{default}' by pressing 'Enter' or " + f"provide another value." + ) + print( + "The datetime and django.utils.timezone modules are available, so " + "it is possible to provide e.g. timezone.now as a value." + ) + print("Type 'exit' to exit this prompt") + while True: + if default: + prompt = "[default: {}] >>> ".format(default) + else: + prompt = ">>> " + code = input(prompt) + if not code and default: + code = default + if not code: + print("Please enter some code, or 'exit' (without quotes) to exit.") + elif code == "exit": + sys.exit(1) + else: + try: + return eval(code, {}, {"datetime": datetime, "timezone": timezone}) + except (SyntaxError, NameError) as e: + print("Invalid input: %s" % e) + + def ask_not_null_addition(self, field_name, model_name): + """Adding a NOT NULL field to a model.""" + if not self.dry_run: + choice = self._choice_input( + f"It is impossible to add a non-nullable field '{field_name}' " + f"to {model_name} without specifying a default. This is " + f"because the database needs something to populate existing " + f"rows.\n" + f"Please select a fix:", + [ + ( + "Provide a one-off default now (will be set on all existing " + "rows with a null value for this column)" + ), + "Quit and manually define a default value in models.py.", + ], + ) + if choice == 2: + sys.exit(3) + else: + return self._ask_default() + return None + + def ask_not_null_alteration(self, field_name, model_name): + """Changing a NULL field to NOT NULL.""" + if not self.dry_run: + choice = self._choice_input( + f"It is impossible to change a nullable field '{field_name}' " + f"on {model_name} to non-nullable without providing a " + f"default. This is because the database needs something to " + f"populate existing rows.\n" + f"Please select a fix:", + [ + ( + "Provide a one-off default now (will be set on all existing " + "rows with a null value for this column)" + ), + "Ignore for now. Existing rows that contain NULL values " + "will have to be handled manually, for example with a " + "RunPython or RunSQL operation.", + "Quit and manually define a default value in models.py.", + ], + ) + if choice == 2: + return NOT_PROVIDED + elif choice == 3: + sys.exit(3) + else: + return self._ask_default() + return None + + def ask_rename(self, model_name, old_name, new_name, field_instance): + """Was this field really renamed?""" + msg = "Was %s.%s renamed to %s.%s (a %s)? [y/N]" + return self._boolean_input( + msg + % ( + model_name, + old_name, + model_name, + new_name, + field_instance.__class__.__name__, + ), + False, + ) + + def ask_rename_model(self, old_model_state, new_model_state): + """Was this model really renamed?""" + msg = "Was the model %s.%s renamed to %s? [y/N]" + return self._boolean_input( + msg + % (old_model_state.app_label, old_model_state.name, new_model_state.name), + False, + ) + + def ask_merge(self, app_label): + return self._boolean_input( + "\nMerging will only work if the operations printed above do not conflict\n" + + "with each other (working on different fields or models)\n" + + "Should these migration branches be merged? [y/N]", + False, + ) + + def ask_auto_now_add_addition(self, field_name, model_name): + """Adding an auto_now_add field to a model.""" + if not self.dry_run: + choice = self._choice_input( + f"It is impossible to add the field '{field_name}' with " + f"'auto_now_add=True' to {model_name} without providing a " + f"default. This is because the database needs something to " + f"populate existing rows.\n", + [ + "Provide a one-off default now which will be set on all " + "existing rows", + "Quit and manually define a default value in models.py.", + ], + ) + if choice == 2: + sys.exit(3) + else: + return self._ask_default(default="timezone.now") + return None + + +class NonInteractiveMigrationQuestioner(MigrationQuestioner): + def ask_not_null_addition(self, field_name, model_name): + # We can't ask the user, so act like the user aborted. + sys.exit(3) + + def ask_not_null_alteration(self, field_name, model_name): + # We can't ask the user, so set as not provided. + return NOT_PROVIDED + + def ask_auto_now_add_addition(self, field_name, model_name): + # We can't ask the user, so act like the user aborted. + sys.exit(3) diff --git a/venv/Lib/site-packages/django/db/migrations/recorder.py b/venv/Lib/site-packages/django/db/migrations/recorder.py new file mode 100644 index 000000000..50876a9ee --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/recorder.py @@ -0,0 +1,103 @@ +from django.apps.registry import Apps +from django.db import DatabaseError, models +from django.utils.functional import classproperty +from django.utils.timezone import now + +from .exceptions import MigrationSchemaMissing + + +class MigrationRecorder: + """ + Deal with storing migration records in the database. + + Because this table is actually itself used for dealing with model + creation, it's the one thing we can't do normally via migrations. + We manually handle table creation/schema updating (using schema backend) + and then have a floating model to do queries with. + + If a migration is unapplied its row is removed from the table. Having + a row in the table always means a migration is applied. + """ + + _migration_class = None + + @classproperty + def Migration(cls): + """ + Lazy load to avoid AppRegistryNotReady if installed apps import + MigrationRecorder. + """ + if cls._migration_class is None: + + class Migration(models.Model): + app = models.CharField(max_length=255) + name = models.CharField(max_length=255) + applied = models.DateTimeField(default=now) + + class Meta: + apps = Apps() + app_label = "migrations" + db_table = "django_migrations" + + def __str__(self): + return "Migration %s for %s" % (self.name, self.app) + + cls._migration_class = Migration + return cls._migration_class + + def __init__(self, connection): + self.connection = connection + + @property + def migration_qs(self): + return self.Migration.objects.using(self.connection.alias) + + def has_table(self): + """Return True if the django_migrations table exists.""" + with self.connection.cursor() as cursor: + tables = self.connection.introspection.table_names(cursor) + return self.Migration._meta.db_table in tables + + def ensure_schema(self): + """Ensure the table exists and has the correct schema.""" + # If the table's there, that's fine - we've never changed its schema + # in the codebase. + if self.has_table(): + return + # Make the table + try: + with self.connection.schema_editor() as editor: + editor.create_model(self.Migration) + except DatabaseError as exc: + raise MigrationSchemaMissing( + "Unable to create the django_migrations table (%s)" % exc + ) + + def applied_migrations(self): + """ + Return a dict mapping (app_name, migration_name) to Migration instances + for all applied migrations. + """ + if self.has_table(): + return { + (migration.app, migration.name): migration + for migration in self.migration_qs + } + else: + # If the django_migrations table doesn't exist, then no migrations + # are applied. + return {} + + def record_applied(self, app, name): + """Record that a migration was applied.""" + self.ensure_schema() + self.migration_qs.create(app=app, name=name) + + def record_unapplied(self, app, name): + """Record that a migration was unapplied.""" + self.ensure_schema() + self.migration_qs.filter(app=app, name=name).delete() + + def flush(self): + """Delete all migration records. Useful for testing migrations.""" + self.migration_qs.all().delete() diff --git a/venv/Lib/site-packages/django/db/migrations/serializer.py b/venv/Lib/site-packages/django/db/migrations/serializer.py new file mode 100644 index 000000000..fb4a1964d --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/serializer.py @@ -0,0 +1,385 @@ +import builtins +import collections.abc +import datetime +import decimal +import enum +import functools +import math +import os +import pathlib +import re +import types +import uuid + +from django.conf import SettingsReference +from django.db import models +from django.db.migrations.operations.base import Operation +from django.db.migrations.utils import COMPILED_REGEX_TYPE, RegexObject +from django.utils.functional import LazyObject, Promise +from django.utils.timezone import utc +from django.utils.version import get_docs_version + + +class BaseSerializer: + def __init__(self, value): + self.value = value + + def serialize(self): + raise NotImplementedError( + "Subclasses of BaseSerializer must implement the serialize() method." + ) + + +class BaseSequenceSerializer(BaseSerializer): + def _format(self): + raise NotImplementedError( + "Subclasses of BaseSequenceSerializer must implement the _format() method." + ) + + def serialize(self): + imports = set() + strings = [] + for item in self.value: + item_string, item_imports = serializer_factory(item).serialize() + imports.update(item_imports) + strings.append(item_string) + value = self._format() + return value % (", ".join(strings)), imports + + +class BaseSimpleSerializer(BaseSerializer): + def serialize(self): + return repr(self.value), set() + + +class ChoicesSerializer(BaseSerializer): + def serialize(self): + return serializer_factory(self.value.value).serialize() + + +class DateTimeSerializer(BaseSerializer): + """For datetime.*, except datetime.datetime.""" + + def serialize(self): + return repr(self.value), {"import datetime"} + + +class DatetimeDatetimeSerializer(BaseSerializer): + """For datetime.datetime.""" + + def serialize(self): + if self.value.tzinfo is not None and self.value.tzinfo != utc: + self.value = self.value.astimezone(utc) + imports = ["import datetime"] + if self.value.tzinfo is not None: + imports.append("from django.utils.timezone import utc") + return repr(self.value).replace("datetime.timezone.utc", "utc"), set(imports) + + +class DecimalSerializer(BaseSerializer): + def serialize(self): + return repr(self.value), {"from decimal import Decimal"} + + +class DeconstructableSerializer(BaseSerializer): + @staticmethod + def serialize_deconstructed(path, args, kwargs): + name, imports = DeconstructableSerializer._serialize_path(path) + strings = [] + for arg in args: + arg_string, arg_imports = serializer_factory(arg).serialize() + strings.append(arg_string) + imports.update(arg_imports) + for kw, arg in sorted(kwargs.items()): + arg_string, arg_imports = serializer_factory(arg).serialize() + imports.update(arg_imports) + strings.append("%s=%s" % (kw, arg_string)) + return "%s(%s)" % (name, ", ".join(strings)), imports + + @staticmethod + def _serialize_path(path): + module, name = path.rsplit(".", 1) + if module == "django.db.models": + imports = {"from django.db import models"} + name = "models.%s" % name + else: + imports = {"import %s" % module} + name = path + return name, imports + + def serialize(self): + return self.serialize_deconstructed(*self.value.deconstruct()) + + +class DictionarySerializer(BaseSerializer): + def serialize(self): + imports = set() + strings = [] + for k, v in sorted(self.value.items()): + k_string, k_imports = serializer_factory(k).serialize() + v_string, v_imports = serializer_factory(v).serialize() + imports.update(k_imports) + imports.update(v_imports) + strings.append((k_string, v_string)) + return "{%s}" % (", ".join("%s: %s" % (k, v) for k, v in strings)), imports + + +class EnumSerializer(BaseSerializer): + def serialize(self): + enum_class = self.value.__class__ + module = enum_class.__module__ + return ( + "%s.%s[%r]" % (module, enum_class.__qualname__, self.value.name), + {"import %s" % module}, + ) + + +class FloatSerializer(BaseSimpleSerializer): + def serialize(self): + if math.isnan(self.value) or math.isinf(self.value): + return 'float("{}")'.format(self.value), set() + return super().serialize() + + +class FrozensetSerializer(BaseSequenceSerializer): + def _format(self): + return "frozenset([%s])" + + +class FunctionTypeSerializer(BaseSerializer): + def serialize(self): + if getattr(self.value, "__self__", None) and isinstance( + self.value.__self__, type + ): + klass = self.value.__self__ + module = klass.__module__ + return "%s.%s.%s" % (module, klass.__name__, self.value.__name__), { + "import %s" % module + } + # Further error checking + if self.value.__name__ == "": + raise ValueError("Cannot serialize function: lambda") + if self.value.__module__ is None: + raise ValueError("Cannot serialize function %r: No module" % self.value) + + module_name = self.value.__module__ + + if "<" not in self.value.__qualname__: # Qualname can include + return "%s.%s" % (module_name, self.value.__qualname__), { + "import %s" % self.value.__module__ + } + + raise ValueError( + "Could not find function %s in %s.\n" % (self.value.__name__, module_name) + ) + + +class FunctoolsPartialSerializer(BaseSerializer): + def serialize(self): + # Serialize functools.partial() arguments + func_string, func_imports = serializer_factory(self.value.func).serialize() + args_string, args_imports = serializer_factory(self.value.args).serialize() + keywords_string, keywords_imports = serializer_factory( + self.value.keywords + ).serialize() + # Add any imports needed by arguments + imports = {"import functools", *func_imports, *args_imports, *keywords_imports} + return ( + "functools.%s(%s, *%s, **%s)" + % ( + self.value.__class__.__name__, + func_string, + args_string, + keywords_string, + ), + imports, + ) + + +class IterableSerializer(BaseSerializer): + def serialize(self): + imports = set() + strings = [] + for item in self.value: + item_string, item_imports = serializer_factory(item).serialize() + imports.update(item_imports) + strings.append(item_string) + # When len(strings)==0, the empty iterable should be serialized as + # "()", not "(,)" because (,) is invalid Python syntax. + value = "(%s)" if len(strings) != 1 else "(%s,)" + return value % (", ".join(strings)), imports + + +class ModelFieldSerializer(DeconstructableSerializer): + def serialize(self): + attr_name, path, args, kwargs = self.value.deconstruct() + return self.serialize_deconstructed(path, args, kwargs) + + +class ModelManagerSerializer(DeconstructableSerializer): + def serialize(self): + as_manager, manager_path, qs_path, args, kwargs = self.value.deconstruct() + if as_manager: + name, imports = self._serialize_path(qs_path) + return "%s.as_manager()" % name, imports + else: + return self.serialize_deconstructed(manager_path, args, kwargs) + + +class OperationSerializer(BaseSerializer): + def serialize(self): + from django.db.migrations.writer import OperationWriter + + string, imports = OperationWriter(self.value, indentation=0).serialize() + # Nested operation, trailing comma is handled in upper OperationWriter._write() + return string.rstrip(","), imports + + +class PathLikeSerializer(BaseSerializer): + def serialize(self): + return repr(os.fspath(self.value)), {} + + +class PathSerializer(BaseSerializer): + def serialize(self): + # Convert concrete paths to pure paths to avoid issues with migrations + # generated on one platform being used on a different platform. + prefix = "Pure" if isinstance(self.value, pathlib.Path) else "" + return "pathlib.%s%r" % (prefix, self.value), {"import pathlib"} + + +class RegexSerializer(BaseSerializer): + def serialize(self): + regex_pattern, pattern_imports = serializer_factory( + self.value.pattern + ).serialize() + # Turn off default implicit flags (e.g. re.U) because regexes with the + # same implicit and explicit flags aren't equal. + flags = self.value.flags ^ re.compile("").flags + regex_flags, flag_imports = serializer_factory(flags).serialize() + imports = {"import re", *pattern_imports, *flag_imports} + args = [regex_pattern] + if flags: + args.append(regex_flags) + return "re.compile(%s)" % ", ".join(args), imports + + +class SequenceSerializer(BaseSequenceSerializer): + def _format(self): + return "[%s]" + + +class SetSerializer(BaseSequenceSerializer): + def _format(self): + # Serialize as a set literal except when value is empty because {} + # is an empty dict. + return "{%s}" if self.value else "set(%s)" + + +class SettingsReferenceSerializer(BaseSerializer): + def serialize(self): + return "settings.%s" % self.value.setting_name, { + "from django.conf import settings" + } + + +class TupleSerializer(BaseSequenceSerializer): + def _format(self): + # When len(value)==0, the empty tuple should be serialized as "()", + # not "(,)" because (,) is invalid Python syntax. + return "(%s)" if len(self.value) != 1 else "(%s,)" + + +class TypeSerializer(BaseSerializer): + def serialize(self): + special_cases = [ + (models.Model, "models.Model", ["from django.db import models"]), + (type(None), "type(None)", []), + ] + for case, string, imports in special_cases: + if case is self.value: + return string, set(imports) + if hasattr(self.value, "__module__"): + module = self.value.__module__ + if module == builtins.__name__: + return self.value.__name__, set() + else: + return "%s.%s" % (module, self.value.__qualname__), { + "import %s" % module + } + + +class UUIDSerializer(BaseSerializer): + def serialize(self): + return "uuid.%s" % repr(self.value), {"import uuid"} + + +class Serializer: + _registry = { + # Some of these are order-dependent. + frozenset: FrozensetSerializer, + list: SequenceSerializer, + set: SetSerializer, + tuple: TupleSerializer, + dict: DictionarySerializer, + models.Choices: ChoicesSerializer, + enum.Enum: EnumSerializer, + datetime.datetime: DatetimeDatetimeSerializer, + (datetime.date, datetime.timedelta, datetime.time): DateTimeSerializer, + SettingsReference: SettingsReferenceSerializer, + float: FloatSerializer, + (bool, int, type(None), bytes, str, range): BaseSimpleSerializer, + decimal.Decimal: DecimalSerializer, + (functools.partial, functools.partialmethod): FunctoolsPartialSerializer, + ( + types.FunctionType, + types.BuiltinFunctionType, + types.MethodType, + ): FunctionTypeSerializer, + collections.abc.Iterable: IterableSerializer, + (COMPILED_REGEX_TYPE, RegexObject): RegexSerializer, + uuid.UUID: UUIDSerializer, + pathlib.PurePath: PathSerializer, + os.PathLike: PathLikeSerializer, + } + + @classmethod + def register(cls, type_, serializer): + if not issubclass(serializer, BaseSerializer): + raise ValueError( + "'%s' must inherit from 'BaseSerializer'." % serializer.__name__ + ) + cls._registry[type_] = serializer + + @classmethod + def unregister(cls, type_): + cls._registry.pop(type_) + + +def serializer_factory(value): + if isinstance(value, Promise): + value = str(value) + elif isinstance(value, LazyObject): + # The unwrapped value is returned as the first item of the arguments + # tuple. + value = value.__reduce__()[1][0] + + if isinstance(value, models.Field): + return ModelFieldSerializer(value) + if isinstance(value, models.manager.BaseManager): + return ModelManagerSerializer(value) + if isinstance(value, Operation): + return OperationSerializer(value) + if isinstance(value, type): + return TypeSerializer(value) + # Anything that knows how to deconstruct itself. + if hasattr(value, "deconstruct"): + return DeconstructableSerializer(value) + for type_, serializer_cls in Serializer._registry.items(): + if isinstance(value, type_): + return serializer_cls(value) + raise ValueError( + "Cannot serialize: %r\nThere are some values Django cannot serialize into " + "migration files.\nFor more, see https://docs.djangoproject.com/en/%s/" + "topics/migrations/#migration-serializing" % (value, get_docs_version()) + ) diff --git a/venv/Lib/site-packages/django/db/migrations/state.py b/venv/Lib/site-packages/django/db/migrations/state.py new file mode 100644 index 000000000..7d7a9174f --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/state.py @@ -0,0 +1,963 @@ +import copy +from collections import defaultdict +from contextlib import contextmanager +from functools import partial + +from django.apps import AppConfig +from django.apps.registry import Apps +from django.apps.registry import apps as global_apps +from django.conf import settings +from django.core.exceptions import FieldDoesNotExist +from django.db import models +from django.db.migrations.utils import field_is_referenced, get_references +from django.db.models import NOT_PROVIDED +from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT +from django.db.models.options import DEFAULT_NAMES, normalize_together +from django.db.models.utils import make_model_tuple +from django.utils.functional import cached_property +from django.utils.module_loading import import_string +from django.utils.version import get_docs_version + +from .exceptions import InvalidBasesError +from .utils import resolve_relation + + +def _get_app_label_and_model_name(model, app_label=""): + if isinstance(model, str): + split = model.split(".", 1) + return tuple(split) if len(split) == 2 else (app_label, split[0]) + else: + return model._meta.app_label, model._meta.model_name + + +def _get_related_models(m): + """Return all models that have a direct relationship to the given model.""" + related_models = [ + subclass + for subclass in m.__subclasses__() + if issubclass(subclass, models.Model) + ] + related_fields_models = set() + for f in m._meta.get_fields(include_parents=True, include_hidden=True): + if ( + f.is_relation + and f.related_model is not None + and not isinstance(f.related_model, str) + ): + related_fields_models.add(f.model) + related_models.append(f.related_model) + # Reverse accessors of foreign keys to proxy models are attached to their + # concrete proxied model. + opts = m._meta + if opts.proxy and m in related_fields_models: + related_models.append(opts.concrete_model) + return related_models + + +def get_related_models_tuples(model): + """ + Return a list of typical (app_label, model_name) tuples for all related + models for the given model. + """ + return { + (rel_mod._meta.app_label, rel_mod._meta.model_name) + for rel_mod in _get_related_models(model) + } + + +def get_related_models_recursive(model): + """ + Return all models that have a direct or indirect relationship + to the given model. + + Relationships are either defined by explicit relational fields, like + ForeignKey, ManyToManyField or OneToOneField, or by inheriting from another + model (a superclass is related to its subclasses, but not vice versa). Note, + however, that a model inheriting from a concrete model is also related to + its superclass through the implicit *_ptr OneToOneField on the subclass. + """ + seen = set() + queue = _get_related_models(model) + for rel_mod in queue: + rel_app_label, rel_model_name = ( + rel_mod._meta.app_label, + rel_mod._meta.model_name, + ) + if (rel_app_label, rel_model_name) in seen: + continue + seen.add((rel_app_label, rel_model_name)) + queue.extend(_get_related_models(rel_mod)) + return seen - {(model._meta.app_label, model._meta.model_name)} + + +class ProjectState: + """ + Represent the entire project's overall state. This is the item that is + passed around - do it here rather than at the app level so that cross-app + FKs/etc. resolve properly. + """ + + def __init__(self, models=None, real_apps=None): + self.models = models or {} + # Apps to include from main registry, usually unmigrated ones + if real_apps is None: + real_apps = set() + else: + assert isinstance(real_apps, set) + self.real_apps = real_apps + self.is_delayed = False + # {remote_model_key: {model_key: {field_name: field}}} + self._relations = None + + @property + def relations(self): + if self._relations is None: + self.resolve_fields_and_relations() + return self._relations + + def add_model(self, model_state): + model_key = model_state.app_label, model_state.name_lower + self.models[model_key] = model_state + if self._relations is not None: + self.resolve_model_relations(model_key) + if "apps" in self.__dict__: # hasattr would cache the property + self.reload_model(*model_key) + + def remove_model(self, app_label, model_name): + model_key = app_label, model_name + del self.models[model_key] + if self._relations is not None: + self._relations.pop(model_key, None) + # Call list() since _relations can change size during iteration. + for related_model_key, model_relations in list(self._relations.items()): + model_relations.pop(model_key, None) + if not model_relations: + del self._relations[related_model_key] + if "apps" in self.__dict__: # hasattr would cache the property + self.apps.unregister_model(*model_key) + # Need to do this explicitly since unregister_model() doesn't clear + # the cache automatically (#24513) + self.apps.clear_cache() + + def rename_model(self, app_label, old_name, new_name): + # Add a new model. + old_name_lower = old_name.lower() + new_name_lower = new_name.lower() + renamed_model = self.models[app_label, old_name_lower].clone() + renamed_model.name = new_name + self.models[app_label, new_name_lower] = renamed_model + # Repoint all fields pointing to the old model to the new one. + old_model_tuple = (app_label, old_name_lower) + new_remote_model = f"{app_label}.{new_name}" + to_reload = set() + for model_state, name, field, reference in get_references( + self, old_model_tuple + ): + changed_field = None + if reference.to: + changed_field = field.clone() + changed_field.remote_field.model = new_remote_model + if reference.through: + if changed_field is None: + changed_field = field.clone() + changed_field.remote_field.through = new_remote_model + if changed_field: + model_state.fields[name] = changed_field + to_reload.add((model_state.app_label, model_state.name_lower)) + if self._relations is not None: + old_name_key = app_label, old_name_lower + new_name_key = app_label, new_name_lower + if old_name_key in self._relations: + self._relations[new_name_key] = self._relations.pop(old_name_key) + for model_relations in self._relations.values(): + if old_name_key in model_relations: + model_relations[new_name_key] = model_relations.pop(old_name_key) + # Reload models related to old model before removing the old model. + self.reload_models(to_reload, delay=True) + # Remove the old model. + self.remove_model(app_label, old_name_lower) + self.reload_model(app_label, new_name_lower, delay=True) + + def alter_model_options(self, app_label, model_name, options, option_keys=None): + model_state = self.models[app_label, model_name] + model_state.options = {**model_state.options, **options} + if option_keys: + for key in option_keys: + if key not in options: + model_state.options.pop(key, False) + self.reload_model(app_label, model_name, delay=True) + + def alter_model_managers(self, app_label, model_name, managers): + model_state = self.models[app_label, model_name] + model_state.managers = list(managers) + self.reload_model(app_label, model_name, delay=True) + + def _append_option(self, app_label, model_name, option_name, obj): + model_state = self.models[app_label, model_name] + model_state.options[option_name] = [*model_state.options[option_name], obj] + self.reload_model(app_label, model_name, delay=True) + + def _remove_option(self, app_label, model_name, option_name, obj_name): + model_state = self.models[app_label, model_name] + objs = model_state.options[option_name] + model_state.options[option_name] = [obj for obj in objs if obj.name != obj_name] + self.reload_model(app_label, model_name, delay=True) + + def add_index(self, app_label, model_name, index): + self._append_option(app_label, model_name, "indexes", index) + + def remove_index(self, app_label, model_name, index_name): + self._remove_option(app_label, model_name, "indexes", index_name) + + def add_constraint(self, app_label, model_name, constraint): + self._append_option(app_label, model_name, "constraints", constraint) + + def remove_constraint(self, app_label, model_name, constraint_name): + self._remove_option(app_label, model_name, "constraints", constraint_name) + + def add_field(self, app_label, model_name, name, field, preserve_default): + # If preserve default is off, don't use the default for future state. + if not preserve_default: + field = field.clone() + field.default = NOT_PROVIDED + else: + field = field + model_key = app_label, model_name + self.models[model_key].fields[name] = field + if self._relations is not None: + self.resolve_model_field_relations(model_key, name, field) + # Delay rendering of relationships if it's not a relational field. + delay = not field.is_relation + self.reload_model(*model_key, delay=delay) + + def remove_field(self, app_label, model_name, name): + model_key = app_label, model_name + model_state = self.models[model_key] + old_field = model_state.fields.pop(name) + if self._relations is not None: + self.resolve_model_field_relations(model_key, name, old_field) + # Delay rendering of relationships if it's not a relational field. + delay = not old_field.is_relation + self.reload_model(*model_key, delay=delay) + + def alter_field(self, app_label, model_name, name, field, preserve_default): + if not preserve_default: + field = field.clone() + field.default = NOT_PROVIDED + else: + field = field + model_key = app_label, model_name + fields = self.models[model_key].fields + if self._relations is not None: + old_field = fields.pop(name) + if old_field.is_relation: + self.resolve_model_field_relations(model_key, name, old_field) + fields[name] = field + if field.is_relation: + self.resolve_model_field_relations(model_key, name, field) + else: + fields[name] = field + # TODO: investigate if old relational fields must be reloaded or if + # it's sufficient if the new field is (#27737). + # Delay rendering of relationships if it's not a relational field and + # not referenced by a foreign key. + delay = not field.is_relation and not field_is_referenced( + self, model_key, (name, field) + ) + self.reload_model(*model_key, delay=delay) + + def rename_field(self, app_label, model_name, old_name, new_name): + model_key = app_label, model_name + model_state = self.models[model_key] + # Rename the field. + fields = model_state.fields + try: + found = fields.pop(old_name) + except KeyError: + raise FieldDoesNotExist( + f"{app_label}.{model_name} has no field named '{old_name}'" + ) + fields[new_name] = found + for field in fields.values(): + # Fix from_fields to refer to the new field. + from_fields = getattr(field, "from_fields", None) + if from_fields: + field.from_fields = tuple( + [ + new_name if from_field_name == old_name else from_field_name + for from_field_name in from_fields + ] + ) + # Fix index/unique_together to refer to the new field. + options = model_state.options + for option in ("index_together", "unique_together"): + if option in options: + options[option] = [ + [new_name if n == old_name else n for n in together] + for together in options[option] + ] + # Fix to_fields to refer to the new field. + delay = True + references = get_references(self, model_key, (old_name, found)) + for *_, field, reference in references: + delay = False + if reference.to: + remote_field, to_fields = reference.to + if getattr(remote_field, "field_name", None) == old_name: + remote_field.field_name = new_name + if to_fields: + field.to_fields = tuple( + [ + new_name if to_field_name == old_name else to_field_name + for to_field_name in to_fields + ] + ) + if self._relations is not None: + old_name_lower = old_name.lower() + new_name_lower = new_name.lower() + for to_model in self._relations.values(): + if old_name_lower in to_model[model_key]: + field = to_model[model_key].pop(old_name_lower) + field.name = new_name_lower + to_model[model_key][new_name_lower] = field + self.reload_model(*model_key, delay=delay) + + def _find_reload_model(self, app_label, model_name, delay=False): + if delay: + self.is_delayed = True + + related_models = set() + + try: + old_model = self.apps.get_model(app_label, model_name) + except LookupError: + pass + else: + # Get all relations to and from the old model before reloading, + # as _meta.apps may change + if delay: + related_models = get_related_models_tuples(old_model) + else: + related_models = get_related_models_recursive(old_model) + + # Get all outgoing references from the model to be rendered + model_state = self.models[(app_label, model_name)] + # Directly related models are the models pointed to by ForeignKeys, + # OneToOneFields, and ManyToManyFields. + direct_related_models = set() + for field in model_state.fields.values(): + if field.is_relation: + if field.remote_field.model == RECURSIVE_RELATIONSHIP_CONSTANT: + continue + rel_app_label, rel_model_name = _get_app_label_and_model_name( + field.related_model, app_label + ) + direct_related_models.add((rel_app_label, rel_model_name.lower())) + + # For all direct related models recursively get all related models. + related_models.update(direct_related_models) + for rel_app_label, rel_model_name in direct_related_models: + try: + rel_model = self.apps.get_model(rel_app_label, rel_model_name) + except LookupError: + pass + else: + if delay: + related_models.update(get_related_models_tuples(rel_model)) + else: + related_models.update(get_related_models_recursive(rel_model)) + + # Include the model itself + related_models.add((app_label, model_name)) + + return related_models + + def reload_model(self, app_label, model_name, delay=False): + if "apps" in self.__dict__: # hasattr would cache the property + related_models = self._find_reload_model(app_label, model_name, delay) + self._reload(related_models) + + def reload_models(self, models, delay=True): + if "apps" in self.__dict__: # hasattr would cache the property + related_models = set() + for app_label, model_name in models: + related_models.update( + self._find_reload_model(app_label, model_name, delay) + ) + self._reload(related_models) + + def _reload(self, related_models): + # Unregister all related models + with self.apps.bulk_update(): + for rel_app_label, rel_model_name in related_models: + self.apps.unregister_model(rel_app_label, rel_model_name) + + states_to_be_rendered = [] + # Gather all models states of those models that will be rerendered. + # This includes: + # 1. All related models of unmigrated apps + for model_state in self.apps.real_models: + if (model_state.app_label, model_state.name_lower) in related_models: + states_to_be_rendered.append(model_state) + + # 2. All related models of migrated apps + for rel_app_label, rel_model_name in related_models: + try: + model_state = self.models[rel_app_label, rel_model_name] + except KeyError: + pass + else: + states_to_be_rendered.append(model_state) + + # Render all models + self.apps.render_multiple(states_to_be_rendered) + + def update_model_field_relation( + self, + model, + model_key, + field_name, + field, + concretes, + ): + remote_model_key = resolve_relation(model, *model_key) + if remote_model_key[0] not in self.real_apps and remote_model_key in concretes: + remote_model_key = concretes[remote_model_key] + relations_to_remote_model = self._relations[remote_model_key] + if field_name in self.models[model_key].fields: + # The assert holds because it's a new relation, or an altered + # relation, in which case references have been removed by + # alter_field(). + assert field_name not in relations_to_remote_model[model_key] + relations_to_remote_model[model_key][field_name] = field + else: + del relations_to_remote_model[model_key][field_name] + if not relations_to_remote_model[model_key]: + del relations_to_remote_model[model_key] + + def resolve_model_field_relations( + self, + model_key, + field_name, + field, + concretes=None, + ): + remote_field = field.remote_field + if not remote_field: + return + if concretes is None: + concretes, _ = self._get_concrete_models_mapping_and_proxy_models() + + self.update_model_field_relation( + remote_field.model, + model_key, + field_name, + field, + concretes, + ) + + through = getattr(remote_field, "through", None) + if not through: + return + self.update_model_field_relation( + through, model_key, field_name, field, concretes + ) + + def resolve_model_relations(self, model_key, concretes=None): + if concretes is None: + concretes, _ = self._get_concrete_models_mapping_and_proxy_models() + + model_state = self.models[model_key] + for field_name, field in model_state.fields.items(): + self.resolve_model_field_relations(model_key, field_name, field, concretes) + + def resolve_fields_and_relations(self): + # Resolve fields. + for model_state in self.models.values(): + for field_name, field in model_state.fields.items(): + field.name = field_name + # Resolve relations. + # {remote_model_key: {model_key: {field_name: field}}} + self._relations = defaultdict(partial(defaultdict, dict)) + concretes, proxies = self._get_concrete_models_mapping_and_proxy_models() + + for model_key in concretes: + self.resolve_model_relations(model_key, concretes) + + for model_key in proxies: + self._relations[model_key] = self._relations[concretes[model_key]] + + def get_concrete_model_key(self, model): + ( + concrete_models_mapping, + _, + ) = self._get_concrete_models_mapping_and_proxy_models() + model_key = make_model_tuple(model) + return concrete_models_mapping[model_key] + + def _get_concrete_models_mapping_and_proxy_models(self): + concrete_models_mapping = {} + proxy_models = {} + # Split models to proxy and concrete models. + for model_key, model_state in self.models.items(): + if model_state.options.get("proxy"): + proxy_models[model_key] = model_state + # Find a concrete model for the proxy. + concrete_models_mapping[ + model_key + ] = self._find_concrete_model_from_proxy( + proxy_models, + model_state, + ) + else: + concrete_models_mapping[model_key] = model_key + return concrete_models_mapping, proxy_models + + def _find_concrete_model_from_proxy(self, proxy_models, model_state): + for base in model_state.bases: + if not (isinstance(base, str) or issubclass(base, models.Model)): + continue + base_key = make_model_tuple(base) + base_state = proxy_models.get(base_key) + if not base_state: + # Concrete model found, stop looking at bases. + return base_key + return self._find_concrete_model_from_proxy(proxy_models, base_state) + + def clone(self): + """Return an exact copy of this ProjectState.""" + new_state = ProjectState( + models={k: v.clone() for k, v in self.models.items()}, + real_apps=self.real_apps, + ) + if "apps" in self.__dict__: + new_state.apps = self.apps.clone() + new_state.is_delayed = self.is_delayed + return new_state + + def clear_delayed_apps_cache(self): + if self.is_delayed and "apps" in self.__dict__: + del self.__dict__["apps"] + + @cached_property + def apps(self): + return StateApps(self.real_apps, self.models) + + @classmethod + def from_apps(cls, apps): + """Take an Apps and return a ProjectState matching it.""" + app_models = {} + for model in apps.get_models(include_swapped=True): + model_state = ModelState.from_model(model) + app_models[(model_state.app_label, model_state.name_lower)] = model_state + return cls(app_models) + + def __eq__(self, other): + return self.models == other.models and self.real_apps == other.real_apps + + +class AppConfigStub(AppConfig): + """Stub of an AppConfig. Only provides a label and a dict of models.""" + + def __init__(self, label): + self.apps = None + self.models = {} + # App-label and app-name are not the same thing, so technically passing + # in the label here is wrong. In practice, migrations don't care about + # the app name, but we need something unique, and the label works fine. + self.label = label + self.name = label + + def import_models(self): + self.models = self.apps.all_models[self.label] + + +class StateApps(Apps): + """ + Subclass of the global Apps registry class to better handle dynamic model + additions and removals. + """ + + def __init__(self, real_apps, models, ignore_swappable=False): + # Any apps in self.real_apps should have all their models included + # in the render. We don't use the original model instances as there + # are some variables that refer to the Apps object. + # FKs/M2Ms from real apps are also not included as they just + # mess things up with partial states (due to lack of dependencies) + self.real_models = [] + for app_label in real_apps: + app = global_apps.get_app_config(app_label) + for model in app.get_models(): + self.real_models.append(ModelState.from_model(model, exclude_rels=True)) + # Populate the app registry with a stub for each application. + app_labels = {model_state.app_label for model_state in models.values()} + app_configs = [ + AppConfigStub(label) for label in sorted([*real_apps, *app_labels]) + ] + super().__init__(app_configs) + + # These locks get in the way of copying as implemented in clone(), + # which is called whenever Django duplicates a StateApps before + # updating it. + self._lock = None + self.ready_event = None + + self.render_multiple([*models.values(), *self.real_models]) + + # There shouldn't be any operations pending at this point. + from django.core.checks.model_checks import _check_lazy_references + + ignore = ( + {make_model_tuple(settings.AUTH_USER_MODEL)} if ignore_swappable else set() + ) + errors = _check_lazy_references(self, ignore=ignore) + if errors: + raise ValueError("\n".join(error.msg for error in errors)) + + @contextmanager + def bulk_update(self): + # Avoid clearing each model's cache for each change. Instead, clear + # all caches when we're finished updating the model instances. + ready = self.ready + self.ready = False + try: + yield + finally: + self.ready = ready + self.clear_cache() + + def render_multiple(self, model_states): + # We keep trying to render the models in a loop, ignoring invalid + # base errors, until the size of the unrendered models doesn't + # decrease by at least one, meaning there's a base dependency loop/ + # missing base. + if not model_states: + return + # Prevent that all model caches are expired for each render. + with self.bulk_update(): + unrendered_models = model_states + while unrendered_models: + new_unrendered_models = [] + for model in unrendered_models: + try: + model.render(self) + except InvalidBasesError: + new_unrendered_models.append(model) + if len(new_unrendered_models) == len(unrendered_models): + raise InvalidBasesError( + "Cannot resolve bases for %r\nThis can happen if you are " + "inheriting models from an app with migrations (e.g. " + "contrib.auth)\n in an app with no migrations; see " + "https://docs.djangoproject.com/en/%s/topics/migrations/" + "#dependencies for more" + % (new_unrendered_models, get_docs_version()) + ) + unrendered_models = new_unrendered_models + + def clone(self): + """Return a clone of this registry.""" + clone = StateApps([], {}) + clone.all_models = copy.deepcopy(self.all_models) + clone.app_configs = copy.deepcopy(self.app_configs) + # Set the pointer to the correct app registry. + for app_config in clone.app_configs.values(): + app_config.apps = clone + # No need to actually clone them, they'll never change + clone.real_models = self.real_models + return clone + + def register_model(self, app_label, model): + self.all_models[app_label][model._meta.model_name] = model + if app_label not in self.app_configs: + self.app_configs[app_label] = AppConfigStub(app_label) + self.app_configs[app_label].apps = self + self.app_configs[app_label].models[model._meta.model_name] = model + self.do_pending_operations(model) + self.clear_cache() + + def unregister_model(self, app_label, model_name): + try: + del self.all_models[app_label][model_name] + del self.app_configs[app_label].models[model_name] + except KeyError: + pass + + +class ModelState: + """ + Represent a Django Model. Don't use the actual Model class as it's not + designed to have its options changed - instead, mutate this one and then + render it into a Model as required. + + Note that while you are allowed to mutate .fields, you are not allowed + to mutate the Field instances inside there themselves - you must instead + assign new ones, as these are not detached during a clone. + """ + + def __init__( + self, app_label, name, fields, options=None, bases=None, managers=None + ): + self.app_label = app_label + self.name = name + self.fields = dict(fields) + self.options = options or {} + self.options.setdefault("indexes", []) + self.options.setdefault("constraints", []) + self.bases = bases or (models.Model,) + self.managers = managers or [] + for name, field in self.fields.items(): + # Sanity-check that fields are NOT already bound to a model. + if hasattr(field, "model"): + raise ValueError( + 'ModelState.fields cannot be bound to a model - "%s" is.' % name + ) + # Sanity-check that relation fields are NOT referring to a model class. + if field.is_relation and hasattr(field.related_model, "_meta"): + raise ValueError( + 'ModelState.fields cannot refer to a model class - "%s.to" does. ' + "Use a string reference instead." % name + ) + if field.many_to_many and hasattr(field.remote_field.through, "_meta"): + raise ValueError( + 'ModelState.fields cannot refer to a model class - "%s.through" ' + "does. Use a string reference instead." % name + ) + # Sanity-check that indexes have their name set. + for index in self.options["indexes"]: + if not index.name: + raise ValueError( + "Indexes passed to ModelState require a name attribute. " + "%r doesn't have one." % index + ) + + @cached_property + def name_lower(self): + return self.name.lower() + + def get_field(self, field_name): + if field_name == "_order": + field_name = self.options.get("order_with_respect_to", field_name) + return self.fields[field_name] + + @classmethod + def from_model(cls, model, exclude_rels=False): + """Given a model, return a ModelState representing it.""" + # Deconstruct the fields + fields = [] + for field in model._meta.local_fields: + if getattr(field, "remote_field", None) and exclude_rels: + continue + if isinstance(field, models.OrderWrt): + continue + name = field.name + try: + fields.append((name, field.clone())) + except TypeError as e: + raise TypeError( + "Couldn't reconstruct field %s on %s: %s" + % ( + name, + model._meta.label, + e, + ) + ) + if not exclude_rels: + for field in model._meta.local_many_to_many: + name = field.name + try: + fields.append((name, field.clone())) + except TypeError as e: + raise TypeError( + "Couldn't reconstruct m2m field %s on %s: %s" + % ( + name, + model._meta.object_name, + e, + ) + ) + # Extract the options + options = {} + for name in DEFAULT_NAMES: + # Ignore some special options + if name in ["apps", "app_label"]: + continue + elif name in model._meta.original_attrs: + if name == "unique_together": + ut = model._meta.original_attrs["unique_together"] + options[name] = set(normalize_together(ut)) + elif name == "index_together": + it = model._meta.original_attrs["index_together"] + options[name] = set(normalize_together(it)) + elif name == "indexes": + indexes = [idx.clone() for idx in model._meta.indexes] + for index in indexes: + if not index.name: + index.set_name_with_model(model) + options["indexes"] = indexes + elif name == "constraints": + options["constraints"] = [ + con.clone() for con in model._meta.constraints + ] + else: + options[name] = model._meta.original_attrs[name] + # If we're ignoring relationships, remove all field-listing model + # options (that option basically just means "make a stub model") + if exclude_rels: + for key in ["unique_together", "index_together", "order_with_respect_to"]: + if key in options: + del options[key] + # Private fields are ignored, so remove options that refer to them. + elif options.get("order_with_respect_to") in { + field.name for field in model._meta.private_fields + }: + del options["order_with_respect_to"] + + def flatten_bases(model): + bases = [] + for base in model.__bases__: + if hasattr(base, "_meta") and base._meta.abstract: + bases.extend(flatten_bases(base)) + else: + bases.append(base) + return bases + + # We can't rely on __mro__ directly because we only want to flatten + # abstract models and not the whole tree. However by recursing on + # __bases__ we may end up with duplicates and ordering issues, we + # therefore discard any duplicates and reorder the bases according + # to their index in the MRO. + flattened_bases = sorted( + set(flatten_bases(model)), key=lambda x: model.__mro__.index(x) + ) + + # Make our record + bases = tuple( + (base._meta.label_lower if hasattr(base, "_meta") else base) + for base in flattened_bases + ) + # Ensure at least one base inherits from models.Model + if not any( + (isinstance(base, str) or issubclass(base, models.Model)) for base in bases + ): + bases = (models.Model,) + + managers = [] + manager_names = set() + default_manager_shim = None + for manager in model._meta.managers: + if manager.name in manager_names: + # Skip overridden managers. + continue + elif manager.use_in_migrations: + # Copy managers usable in migrations. + new_manager = copy.copy(manager) + new_manager._set_creation_counter() + elif manager is model._base_manager or manager is model._default_manager: + # Shim custom managers used as default and base managers. + new_manager = models.Manager() + new_manager.model = manager.model + new_manager.name = manager.name + if manager is model._default_manager: + default_manager_shim = new_manager + else: + continue + manager_names.add(manager.name) + managers.append((manager.name, new_manager)) + + # Ignore a shimmed default manager called objects if it's the only one. + if managers == [("objects", default_manager_shim)]: + managers = [] + + # Construct the new ModelState + return cls( + model._meta.app_label, + model._meta.object_name, + fields, + options, + bases, + managers, + ) + + def construct_managers(self): + """Deep-clone the managers using deconstruction.""" + # Sort all managers by their creation counter + sorted_managers = sorted(self.managers, key=lambda v: v[1].creation_counter) + for mgr_name, manager in sorted_managers: + as_manager, manager_path, qs_path, args, kwargs = manager.deconstruct() + if as_manager: + qs_class = import_string(qs_path) + yield mgr_name, qs_class.as_manager() + else: + manager_class = import_string(manager_path) + yield mgr_name, manager_class(*args, **kwargs) + + def clone(self): + """Return an exact copy of this ModelState.""" + return self.__class__( + app_label=self.app_label, + name=self.name, + fields=dict(self.fields), + # Since options are shallow-copied here, operations such as + # AddIndex must replace their option (e.g 'indexes') rather + # than mutating it. + options=dict(self.options), + bases=self.bases, + managers=list(self.managers), + ) + + def render(self, apps): + """Create a Model object from our current state into the given apps.""" + # First, make a Meta object + meta_contents = {"app_label": self.app_label, "apps": apps, **self.options} + meta = type("Meta", (), meta_contents) + # Then, work out our bases + try: + bases = tuple( + (apps.get_model(base) if isinstance(base, str) else base) + for base in self.bases + ) + except LookupError: + raise InvalidBasesError( + "Cannot resolve one or more bases from %r" % (self.bases,) + ) + # Clone fields for the body, add other bits. + body = {name: field.clone() for name, field in self.fields.items()} + body["Meta"] = meta + body["__module__"] = "__fake__" + + # Restore managers + body.update(self.construct_managers()) + # Then, make a Model object (apps.register_model is called in __new__) + return type(self.name, bases, body) + + def get_index_by_name(self, name): + for index in self.options["indexes"]: + if index.name == name: + return index + raise ValueError("No index named %s on model %s" % (name, self.name)) + + def get_constraint_by_name(self, name): + for constraint in self.options["constraints"]: + if constraint.name == name: + return constraint + raise ValueError("No constraint named %s on model %s" % (name, self.name)) + + def __repr__(self): + return "<%s: '%s.%s'>" % (self.__class__.__name__, self.app_label, self.name) + + def __eq__(self, other): + return ( + (self.app_label == other.app_label) + and (self.name == other.name) + and (len(self.fields) == len(other.fields)) + and all( + k1 == k2 and f1.deconstruct()[1:] == f2.deconstruct()[1:] + for (k1, f1), (k2, f2) in zip( + sorted(self.fields.items()), + sorted(other.fields.items()), + ) + ) + and (self.options == other.options) + and (self.bases == other.bases) + and (self.managers == other.managers) + ) diff --git a/venv/Lib/site-packages/django/db/migrations/utils.py b/venv/Lib/site-packages/django/db/migrations/utils.py new file mode 100644 index 000000000..2b45a6033 --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/utils.py @@ -0,0 +1,127 @@ +import datetime +import re +from collections import namedtuple + +from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT + +FieldReference = namedtuple("FieldReference", "to through") + +COMPILED_REGEX_TYPE = type(re.compile("")) + + +class RegexObject: + def __init__(self, obj): + self.pattern = obj.pattern + self.flags = obj.flags + + def __eq__(self, other): + return self.pattern == other.pattern and self.flags == other.flags + + +def get_migration_name_timestamp(): + return datetime.datetime.now().strftime("%Y%m%d_%H%M") + + +def resolve_relation(model, app_label=None, model_name=None): + """ + Turn a model class or model reference string and return a model tuple. + + app_label and model_name are used to resolve the scope of recursive and + unscoped model relationship. + """ + if isinstance(model, str): + if model == RECURSIVE_RELATIONSHIP_CONSTANT: + if app_label is None or model_name is None: + raise TypeError( + "app_label and model_name must be provided to resolve " + "recursive relationships." + ) + return app_label, model_name + if "." in model: + app_label, model_name = model.split(".", 1) + return app_label, model_name.lower() + if app_label is None: + raise TypeError( + "app_label must be provided to resolve unscoped model relationships." + ) + return app_label, model.lower() + return model._meta.app_label, model._meta.model_name + + +def field_references( + model_tuple, + field, + reference_model_tuple, + reference_field_name=None, + reference_field=None, +): + """ + Return either False or a FieldReference if `field` references provided + context. + + False positives can be returned if `reference_field_name` is provided + without `reference_field` because of the introspection limitation it + incurs. This should not be an issue when this function is used to determine + whether or not an optimization can take place. + """ + remote_field = field.remote_field + if not remote_field: + return False + references_to = None + references_through = None + if resolve_relation(remote_field.model, *model_tuple) == reference_model_tuple: + to_fields = getattr(field, "to_fields", None) + if ( + reference_field_name is None + or + # Unspecified to_field(s). + to_fields is None + or + # Reference to primary key. + ( + None in to_fields + and (reference_field is None or reference_field.primary_key) + ) + or + # Reference to field. + reference_field_name in to_fields + ): + references_to = (remote_field, to_fields) + through = getattr(remote_field, "through", None) + if through and resolve_relation(through, *model_tuple) == reference_model_tuple: + through_fields = remote_field.through_fields + if ( + reference_field_name is None + or + # Unspecified through_fields. + through_fields is None + or + # Reference to field. + reference_field_name in through_fields + ): + references_through = (remote_field, through_fields) + if not (references_to or references_through): + return False + return FieldReference(references_to, references_through) + + +def get_references(state, model_tuple, field_tuple=()): + """ + Generator of (model_state, name, field, reference) referencing + provided context. + + If field_tuple is provided only references to this particular field of + model_tuple will be generated. + """ + for state_model_tuple, model_state in state.models.items(): + for name, field in model_state.fields.items(): + reference = field_references( + state_model_tuple, field, model_tuple, *field_tuple + ) + if reference: + yield model_state, name, field, reference + + +def field_is_referenced(state, model_tuple, field_tuple): + """Return whether `field_tuple` is referenced by any state models.""" + return next(get_references(state, model_tuple, field_tuple), None) is not None diff --git a/venv/Lib/site-packages/django/db/migrations/writer.py b/venv/Lib/site-packages/django/db/migrations/writer.py new file mode 100644 index 000000000..a59f0c8dc --- /dev/null +++ b/venv/Lib/site-packages/django/db/migrations/writer.py @@ -0,0 +1,311 @@ +import os +import re +from importlib import import_module + +from django import get_version +from django.apps import apps + +# SettingsReference imported for backwards compatibility in Django 2.2. +from django.conf import SettingsReference # NOQA +from django.db import migrations +from django.db.migrations.loader import MigrationLoader +from django.db.migrations.serializer import Serializer, serializer_factory +from django.utils.inspect import get_func_args +from django.utils.module_loading import module_dir +from django.utils.timezone import now + + +class OperationWriter: + def __init__(self, operation, indentation=2): + self.operation = operation + self.buff = [] + self.indentation = indentation + + def serialize(self): + def _write(_arg_name, _arg_value): + if _arg_name in self.operation.serialization_expand_args and isinstance( + _arg_value, (list, tuple, dict) + ): + if isinstance(_arg_value, dict): + self.feed("%s={" % _arg_name) + self.indent() + for key, value in _arg_value.items(): + key_string, key_imports = MigrationWriter.serialize(key) + arg_string, arg_imports = MigrationWriter.serialize(value) + args = arg_string.splitlines() + if len(args) > 1: + self.feed("%s: %s" % (key_string, args[0])) + for arg in args[1:-1]: + self.feed(arg) + self.feed("%s," % args[-1]) + else: + self.feed("%s: %s," % (key_string, arg_string)) + imports.update(key_imports) + imports.update(arg_imports) + self.unindent() + self.feed("},") + else: + self.feed("%s=[" % _arg_name) + self.indent() + for item in _arg_value: + arg_string, arg_imports = MigrationWriter.serialize(item) + args = arg_string.splitlines() + if len(args) > 1: + for arg in args[:-1]: + self.feed(arg) + self.feed("%s," % args[-1]) + else: + self.feed("%s," % arg_string) + imports.update(arg_imports) + self.unindent() + self.feed("],") + else: + arg_string, arg_imports = MigrationWriter.serialize(_arg_value) + args = arg_string.splitlines() + if len(args) > 1: + self.feed("%s=%s" % (_arg_name, args[0])) + for arg in args[1:-1]: + self.feed(arg) + self.feed("%s," % args[-1]) + else: + self.feed("%s=%s," % (_arg_name, arg_string)) + imports.update(arg_imports) + + imports = set() + name, args, kwargs = self.operation.deconstruct() + operation_args = get_func_args(self.operation.__init__) + + # See if this operation is in django.db.migrations. If it is, + # We can just use the fact we already have that imported, + # otherwise, we need to add an import for the operation class. + if getattr(migrations, name, None) == self.operation.__class__: + self.feed("migrations.%s(" % name) + else: + imports.add("import %s" % (self.operation.__class__.__module__)) + self.feed("%s.%s(" % (self.operation.__class__.__module__, name)) + + self.indent() + + for i, arg in enumerate(args): + arg_value = arg + arg_name = operation_args[i] + _write(arg_name, arg_value) + + i = len(args) + # Only iterate over remaining arguments + for arg_name in operation_args[i:]: + if arg_name in kwargs: # Don't sort to maintain signature order + arg_value = kwargs[arg_name] + _write(arg_name, arg_value) + + self.unindent() + self.feed("),") + return self.render(), imports + + def indent(self): + self.indentation += 1 + + def unindent(self): + self.indentation -= 1 + + def feed(self, line): + self.buff.append(" " * (self.indentation * 4) + line) + + def render(self): + return "\n".join(self.buff) + + +class MigrationWriter: + """ + Take a Migration instance and is able to produce the contents + of the migration file from it. + """ + + def __init__(self, migration, include_header=True): + self.migration = migration + self.include_header = include_header + self.needs_manual_porting = False + + def as_string(self): + """Return a string of the file contents.""" + items = { + "replaces_str": "", + "initial_str": "", + } + + imports = set() + + # Deconstruct operations + operations = [] + for operation in self.migration.operations: + operation_string, operation_imports = OperationWriter(operation).serialize() + imports.update(operation_imports) + operations.append(operation_string) + items["operations"] = "\n".join(operations) + "\n" if operations else "" + + # Format dependencies and write out swappable dependencies right + dependencies = [] + for dependency in self.migration.dependencies: + if dependency[0] == "__setting__": + dependencies.append( + " migrations.swappable_dependency(settings.%s)," + % dependency[1] + ) + imports.add("from django.conf import settings") + else: + dependencies.append(" %s," % self.serialize(dependency)[0]) + items["dependencies"] = "\n".join(dependencies) + "\n" if dependencies else "" + + # Format imports nicely, swapping imports of functions from migration files + # for comments + migration_imports = set() + for line in list(imports): + if re.match(r"^import (.*)\.\d+[^\s]*$", line): + migration_imports.add(line.split("import")[1].strip()) + imports.remove(line) + self.needs_manual_porting = True + + # django.db.migrations is always used, but models import may not be. + # If models import exists, merge it with migrations import. + if "from django.db import models" in imports: + imports.discard("from django.db import models") + imports.add("from django.db import migrations, models") + else: + imports.add("from django.db import migrations") + + # Sort imports by the package / module to be imported (the part after + # "from" in "from ... import ..." or after "import" in "import ..."). + sorted_imports = sorted(imports, key=lambda i: i.split()[1]) + items["imports"] = "\n".join(sorted_imports) + "\n" if imports else "" + if migration_imports: + items["imports"] += ( + "\n\n# Functions from the following migrations need manual " + "copying.\n# Move them and any dependencies into this file, " + "then update the\n# RunPython operations to refer to the local " + "versions:\n# %s" + ) % "\n# ".join(sorted(migration_imports)) + # If there's a replaces, make a string for it + if self.migration.replaces: + items["replaces_str"] = ( + "\n replaces = %s\n" % self.serialize(self.migration.replaces)[0] + ) + # Hinting that goes into comment + if self.include_header: + items["migration_header"] = MIGRATION_HEADER_TEMPLATE % { + "version": get_version(), + "timestamp": now().strftime("%Y-%m-%d %H:%M"), + } + else: + items["migration_header"] = "" + + if self.migration.initial: + items["initial_str"] = "\n initial = True\n" + + return MIGRATION_TEMPLATE % items + + @property + def basedir(self): + migrations_package_name, _ = MigrationLoader.migrations_module( + self.migration.app_label + ) + + if migrations_package_name is None: + raise ValueError( + "Django can't create migrations for app '%s' because " + "migrations have been disabled via the MIGRATION_MODULES " + "setting." % self.migration.app_label + ) + + # See if we can import the migrations module directly + try: + migrations_module = import_module(migrations_package_name) + except ImportError: + pass + else: + try: + return module_dir(migrations_module) + except ValueError: + pass + + # Alright, see if it's a direct submodule of the app + app_config = apps.get_app_config(self.migration.app_label) + ( + maybe_app_name, + _, + migrations_package_basename, + ) = migrations_package_name.rpartition(".") + if app_config.name == maybe_app_name: + return os.path.join(app_config.path, migrations_package_basename) + + # In case of using MIGRATION_MODULES setting and the custom package + # doesn't exist, create one, starting from an existing package + existing_dirs, missing_dirs = migrations_package_name.split("."), [] + while existing_dirs: + missing_dirs.insert(0, existing_dirs.pop(-1)) + try: + base_module = import_module(".".join(existing_dirs)) + except (ImportError, ValueError): + continue + else: + try: + base_dir = module_dir(base_module) + except ValueError: + continue + else: + break + else: + raise ValueError( + "Could not locate an appropriate location to create " + "migrations package %s. Make sure the toplevel " + "package exists and can be imported." % migrations_package_name + ) + + final_dir = os.path.join(base_dir, *missing_dirs) + os.makedirs(final_dir, exist_ok=True) + for missing_dir in missing_dirs: + base_dir = os.path.join(base_dir, missing_dir) + with open(os.path.join(base_dir, "__init__.py"), "w"): + pass + + return final_dir + + @property + def filename(self): + return "%s.py" % self.migration.name + + @property + def path(self): + return os.path.join(self.basedir, self.filename) + + @classmethod + def serialize(cls, value): + return serializer_factory(value).serialize() + + @classmethod + def register_serializer(cls, type_, serializer): + Serializer.register(type_, serializer) + + @classmethod + def unregister_serializer(cls, type_): + Serializer.unregister(type_) + + +MIGRATION_HEADER_TEMPLATE = """\ +# Generated by Django %(version)s on %(timestamp)s + +""" + + +MIGRATION_TEMPLATE = """\ +%(migration_header)s%(imports)s + +class Migration(migrations.Migration): +%(replaces_str)s%(initial_str)s + dependencies = [ +%(dependencies)s\ + ] + + operations = [ +%(operations)s\ + ] +""" diff --git a/venv/Lib/site-packages/django/db/models/__init__.py b/venv/Lib/site-packages/django/db/models/__init__.py new file mode 100644 index 000000000..ffca81de9 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/__init__.py @@ -0,0 +1,115 @@ +from django.core.exceptions import ObjectDoesNotExist +from django.db.models import signals +from django.db.models.aggregates import * # NOQA +from django.db.models.aggregates import __all__ as aggregates_all +from django.db.models.constraints import * # NOQA +from django.db.models.constraints import __all__ as constraints_all +from django.db.models.deletion import ( + CASCADE, + DO_NOTHING, + PROTECT, + RESTRICT, + SET, + SET_DEFAULT, + SET_NULL, + ProtectedError, + RestrictedError, +) +from django.db.models.enums import * # NOQA +from django.db.models.enums import __all__ as enums_all +from django.db.models.expressions import ( + Case, + Exists, + Expression, + ExpressionList, + ExpressionWrapper, + F, + Func, + OrderBy, + OuterRef, + RowRange, + Subquery, + Value, + ValueRange, + When, + Window, + WindowFrame, +) +from django.db.models.fields import * # NOQA +from django.db.models.fields import __all__ as fields_all +from django.db.models.fields.files import FileField, ImageField +from django.db.models.fields.json import JSONField +from django.db.models.fields.proxy import OrderWrt +from django.db.models.indexes import * # NOQA +from django.db.models.indexes import __all__ as indexes_all +from django.db.models.lookups import Lookup, Transform +from django.db.models.manager import Manager +from django.db.models.query import Prefetch, QuerySet, prefetch_related_objects +from django.db.models.query_utils import FilteredRelation, Q + +# Imports that would create circular imports if sorted +from django.db.models.base import DEFERRED, Model # isort:skip +from django.db.models.fields.related import ( # isort:skip + ForeignKey, + ForeignObject, + OneToOneField, + ManyToManyField, + ForeignObjectRel, + ManyToOneRel, + ManyToManyRel, + OneToOneRel, +) + + +__all__ = aggregates_all + constraints_all + enums_all + fields_all + indexes_all +__all__ += [ + "ObjectDoesNotExist", + "signals", + "CASCADE", + "DO_NOTHING", + "PROTECT", + "RESTRICT", + "SET", + "SET_DEFAULT", + "SET_NULL", + "ProtectedError", + "RestrictedError", + "Case", + "Exists", + "Expression", + "ExpressionList", + "ExpressionWrapper", + "F", + "Func", + "OrderBy", + "OuterRef", + "RowRange", + "Subquery", + "Value", + "ValueRange", + "When", + "Window", + "WindowFrame", + "FileField", + "ImageField", + "JSONField", + "OrderWrt", + "Lookup", + "Transform", + "Manager", + "Prefetch", + "Q", + "QuerySet", + "prefetch_related_objects", + "DEFERRED", + "Model", + "FilteredRelation", + "ForeignKey", + "ForeignObject", + "OneToOneField", + "ManyToManyField", + "ForeignObjectRel", + "ManyToOneRel", + "ManyToManyRel", + "OneToOneRel", +] diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3bf70649a2d58984fb814a7fb2b1835a52afde8 GIT binary patch literal 2327 zcmb`JSyLNF5P-D^bYEc1VZivdg+cg?k2tom4j{qE7ILWSQbo0r26^pmtunK+;qT-v z@A)lxn5sPGDSsdjc}n-Jf}DV>lB%d`zwPdsp6Ti7nU$ALCqnf5{kvaUKa=z;E1&+t zq&%lb{bYqgolwVeLui3zu{`FEVHm35NgB(u6Bu>H9(ErTP{|xz08(YLZi!(5TvoMQuFo*LnkLTbVF2DjV z!Xhrg5}t?ixD3m90WRQ0xQLhF5?+SOcm=NDRk%7F``U2qYc%$CV~e^sFb{cLffb|2 z+?%)xt45ByYgmB7(06_4yH38hj4k2b#yfBa@4{W9C*6B^AMP7D<$i$=-~m2_hxiB{ z8C%+Yj9!0bPvI#(gJ(w1y3cU~Ht+?!z#4F-^~PdTz~zU_wlEL!I0Y)&r6|lY623)Nj0>c}q`KTkk~MFL^@kdVcxPQ9fCt z%IWrOSCMF~u-32^}#3DV-=E z_N7qD@p?Kll6NRtJvq|%rQPofsjZ40uMB!^9j(fakS~sOtUB<8tce4P(EC`kdtE{C z3|ik0ggnv{-`eg#=!AI%jpO@oMNdceonFWLsFT6FB5f4;F&(csuBbS|?dZfd+TB2= zJjK7>tL~ZxQetNEed&`&WXJQ~5BfS@mv&DbcoI3QFYO*V%Y0bJUP*Bv{PtTNd(9#3 z3183Al8vn?g=^OiMmG!mXf7#j_MvWFy#K$oo3RhpbNRMmL55JVPmINK;9r_G6W0%G#Bh{SBfs}x{?z#Fl0ssK8mn-!lO--_|kTI zzJly0is?RoqB~74II#b;JI9MVj=vy!15^+rW-2gM9!1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/aggregates.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/aggregates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c83af3cf7bea06491cbac6454aa510d451594d2d GIT binary patch literal 6352 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 Sl`^US{gqnbSU4J1N~M1?AsB7| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/constants.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/constants.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3624c36ba769b23090e8e279d0d0c3bcc8373d28 GIT binary patch literal 268 zcmYk1&q@O^5XQ6Hie<6ykZX~4?;;}9e_(Z&mR^=%$e&?N-6kcI6!eXJr3FvEg9lHh zg5U@98@@TrH{-_Rf+T%CeaM*l=fV6}mds@;JW0@`Av$X^ov+Ab@OE0voy8z*KpGJ= z70NqA8lHhx%Li&KZNY*U-K^+y&L1avf6Tddiu0yeRMq{u=Bw-ao%li8{)=xpKVxeI zk8Bwc1-o)8ZXrdmTNCc0WH-iRnAYBHKn1o3yJrg{8JYmoolq~L1!Q_7Z0kxb%dOMU aVX6Kuo$X%x(RrH24lWMg;V@xHMn^wvLruB> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/constraints.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/constraints.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ae64fda88c4250e0603ae8fdf95db00446c3751 GIT binary patch literal 9822 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 Ywd_6@jFL(53DW6i(JDPzdT}-Xf812dkN^Mx literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/deletion.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/deletion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3a51ff83f9dd2058910951484724a540e3d2ba2 GIT binary patch literal 15196 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 U&riO4^0ujGC)Xw)ogVrB0P%qaPXGV_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/indexes.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/indexes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68ba1874e6e9357ded3abd9deb4fd09ebc2e374c GIT binary patch literal 10169 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 nmRVtnow5Do{*~g?smK2fH2AKq literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/options.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/options.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30a1da694f35d793e1f6d05f85aabe3c5fd314f4 GIT binary patch literal 25022 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/signals.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/signals.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11817db6b7258c74d1195327572ea5b71857efa5 GIT binary patch literal 1730 zcmZWpOOGQp5VrfBPS0a^htUWj)Cev)Y)0A>LI@#&SR^1IX5e5&^f+xN>6w0EyJs{} z&uK>5(;|KXNL=sR&EtGv5ju$PT>+4BktZK;yp*qVeSKBF4#8lxz9Z2zr-Zi zYJ;s7Znfc7i?-U{R@*mc9~gPaf-^K4{0Uj15$^n&3YF0u)Wd>a@ua92&lA<2^~7QR4ptaE=D5SI;&6|ezV-V5X);zJfu zH~dP6>w~OTVGN@;V%f~noJtw1B~>xa^Xf+HJeIsv7qqUEoX&VYHW4SZ;1}_{62;iKrLKX~iva$#{RK=p0l_eo49a)s zVWg}UxAxr1Q0xANf5LaZvRg+v_m+6Kwd#}ByL9iY*80V3edV{#J^t0wg+4>Au>iI` z5g1O@?0;RWtSaRwASdjSmWyi4W@A$VIj;IW0o{d!1)>WxnUzw}GUc5OAW6jdoHn^i z0G=dAz{c&mfK|-})n^M^hYC7J@_gQT1y{?8b&md^3j|MjcFjfS^{jT@)eRL3X=0N7 zb#Em7N3W1LfU{m-eDcBcJIRHde%nY%r=M17Q}9yB>GMo|-pr<-WkRZ_--zmxr)ql5 z%j@Zv*=#B^#h=zRy`l>)r#;+LHaqR%o=Veca$Mhb5tK?JF}doPG6E6d$99NAe1rpQ zb+Xeq<6Za3d8!H946W;WY8K?%AX;>Z6uw87R_j6~trn`s@JpzyuF=SvjI7SN;q

      )mW9qw>}l~>iziwPLA=78t^WBk=A* zfVM&4{ujYEd2tNBJ4x$6@4=LsR0r>4@9)*|ZmK({I+OFsWaLa>K=TDjQo@Z(k}gbi zgEqO=qa^vUq4|2pPZCz8z>?rLUBas{89nL-^QKHyRprv$D{}n5yVs};HZ{HEV6(aI2BF_RvftOV z791`KXC@R0z)Z3-Q)EzAQuV4?l=Paf7mXTfPk8yb;$&!iH%9TSNYW)d1)RYScoo?K uZZap4aa&t`RSXSAXd1fU!=BoY^y?zu0uiCeim+!L+TlBJb*#G*1y0=~c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/__pycache__/utils.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43a4663b8eb10924da9f85af6e1d442710d44f6c GIT binary patch literal 1793 zcmZ`)TW=gS6t+Dxo7qhoZCZ(nwn8RSSym*QKBH2BQYb|wLJhQ1v~-vqdy>g|XBOL& zXrqY)-AMGQzkrA2F@MPtPkrhi-~kDRV^5N95P0O{`?-AQGR3uPEd=e)7k><%G!S}Y z7qiWS#plqKB@8hv(3TyEz$3CnFk&9_kI8M~_&_cpgX_@8Qv`DGm;WRDeh%U$DaU|ja z7rk%o#SO4&5z~{U6|=>OU=&iu(_X1klX2>Oac#*X5x9RVI~Q{Z1CU zJkk9cc` zA8IL@gRVXT@*7GqgW7WxLLGvNsWJ0jp(#nB3NfDrzmus4)v>X0#pAXtT94aMP;DR@ zy@EnmL2*jKvztiXg3T^*3P>vujPw;3=_!^LvKdTUQ6xDl6COpYaN<;N zQ2_etLGRr=<2^0*9ZL}TAuut`C{m)(DvAI?Ur)wdTGQd!Nw;@u6{wwA-^$xSy3n1A z7JT9nNP-aif7d6WX{Jz|bWsRp=95Ce-@#_Ja*SP4IM+LqO;gAcf+T?ewR~sXX0zJ~ cG~s" + + def __str__(self): + return "" + + +DEFERRED = Deferred() + + +def subclass_exception(name, bases, module, attached_to): + """ + Create exception subclass. Used by ModelBase below. + + The exception is created in a way that allows it to be pickled, assuming + that the returned exception class will be added as an attribute to the + 'attached_to' class. + """ + return type( + name, + bases, + { + "__module__": module, + "__qualname__": "%s.%s" % (attached_to.__qualname__, name), + }, + ) + + +def _has_contribute_to_class(value): + # Only call contribute_to_class() if it's bound. + return not inspect.isclass(value) and hasattr(value, "contribute_to_class") + + +class ModelBase(type): + """Metaclass for all models.""" + + def __new__(cls, name, bases, attrs, **kwargs): + super_new = super().__new__ + + # Also ensure initialization is only performed for subclasses of Model + # (excluding Model class itself). + parents = [b for b in bases if isinstance(b, ModelBase)] + if not parents: + return super_new(cls, name, bases, attrs) + + # Create the class. + module = attrs.pop("__module__") + new_attrs = {"__module__": module} + classcell = attrs.pop("__classcell__", None) + if classcell is not None: + new_attrs["__classcell__"] = classcell + attr_meta = attrs.pop("Meta", None) + # Pass all attrs without a (Django-specific) contribute_to_class() + # method to type.__new__() so that they're properly initialized + # (i.e. __set_name__()). + contributable_attrs = {} + for obj_name, obj in attrs.items(): + if _has_contribute_to_class(obj): + contributable_attrs[obj_name] = obj + else: + new_attrs[obj_name] = obj + new_class = super_new(cls, name, bases, new_attrs, **kwargs) + + abstract = getattr(attr_meta, "abstract", False) + meta = attr_meta or getattr(new_class, "Meta", None) + base_meta = getattr(new_class, "_meta", None) + + app_label = None + + # Look for an application configuration to attach the model to. + app_config = apps.get_containing_app_config(module) + + if getattr(meta, "app_label", None) is None: + if app_config is None: + if not abstract: + raise RuntimeError( + "Model class %s.%s doesn't declare an explicit " + "app_label and isn't in an application in " + "INSTALLED_APPS." % (module, name) + ) + + else: + app_label = app_config.label + + new_class.add_to_class("_meta", Options(meta, app_label)) + if not abstract: + new_class.add_to_class( + "DoesNotExist", + subclass_exception( + "DoesNotExist", + tuple( + x.DoesNotExist + for x in parents + if hasattr(x, "_meta") and not x._meta.abstract + ) + or (ObjectDoesNotExist,), + module, + attached_to=new_class, + ), + ) + new_class.add_to_class( + "MultipleObjectsReturned", + subclass_exception( + "MultipleObjectsReturned", + tuple( + x.MultipleObjectsReturned + for x in parents + if hasattr(x, "_meta") and not x._meta.abstract + ) + or (MultipleObjectsReturned,), + module, + attached_to=new_class, + ), + ) + if base_meta and not base_meta.abstract: + # Non-abstract child classes inherit some attributes from their + # non-abstract parent (unless an ABC comes before it in the + # method resolution order). + if not hasattr(meta, "ordering"): + new_class._meta.ordering = base_meta.ordering + if not hasattr(meta, "get_latest_by"): + new_class._meta.get_latest_by = base_meta.get_latest_by + + is_proxy = new_class._meta.proxy + + # If the model is a proxy, ensure that the base class + # hasn't been swapped out. + if is_proxy and base_meta and base_meta.swapped: + raise TypeError( + "%s cannot proxy the swapped model '%s'." % (name, base_meta.swapped) + ) + + # Add remaining attributes (those with a contribute_to_class() method) + # to the class. + for obj_name, obj in contributable_attrs.items(): + new_class.add_to_class(obj_name, obj) + + # All the fields of any type declared on this model + new_fields = chain( + new_class._meta.local_fields, + new_class._meta.local_many_to_many, + new_class._meta.private_fields, + ) + field_names = {f.name for f in new_fields} + + # Basic setup for proxy models. + if is_proxy: + base = None + for parent in [kls for kls in parents if hasattr(kls, "_meta")]: + if parent._meta.abstract: + if parent._meta.fields: + raise TypeError( + "Abstract base class containing model fields not " + "permitted for proxy model '%s'." % name + ) + else: + continue + if base is None: + base = parent + elif parent._meta.concrete_model is not base._meta.concrete_model: + raise TypeError( + "Proxy model '%s' has more than one non-abstract model base " + "class." % name + ) + if base is None: + raise TypeError( + "Proxy model '%s' has no non-abstract model base class." % name + ) + new_class._meta.setup_proxy(base) + new_class._meta.concrete_model = base._meta.concrete_model + else: + new_class._meta.concrete_model = new_class + + # Collect the parent links for multi-table inheritance. + parent_links = {} + for base in reversed([new_class] + parents): + # Conceptually equivalent to `if base is Model`. + if not hasattr(base, "_meta"): + continue + # Skip concrete parent classes. + if base != new_class and not base._meta.abstract: + continue + # Locate OneToOneField instances. + for field in base._meta.local_fields: + if isinstance(field, OneToOneField) and field.remote_field.parent_link: + related = resolve_relation(new_class, field.remote_field.model) + parent_links[make_model_tuple(related)] = field + + # Track fields inherited from base models. + inherited_attributes = set() + # Do the appropriate setup for any model parents. + for base in new_class.mro(): + if base not in parents or not hasattr(base, "_meta"): + # Things without _meta aren't functional models, so they're + # uninteresting parents. + inherited_attributes.update(base.__dict__) + continue + + parent_fields = base._meta.local_fields + base._meta.local_many_to_many + if not base._meta.abstract: + # Check for clashes between locally declared fields and those + # on the base classes. + for field in parent_fields: + if field.name in field_names: + raise FieldError( + "Local field %r in class %r clashes with field of " + "the same name from base class %r." + % ( + field.name, + name, + base.__name__, + ) + ) + else: + inherited_attributes.add(field.name) + + # Concrete classes... + base = base._meta.concrete_model + base_key = make_model_tuple(base) + if base_key in parent_links: + field = parent_links[base_key] + elif not is_proxy: + attr_name = "%s_ptr" % base._meta.model_name + field = OneToOneField( + base, + on_delete=CASCADE, + name=attr_name, + auto_created=True, + parent_link=True, + ) + + if attr_name in field_names: + raise FieldError( + "Auto-generated field '%s' in class %r for " + "parent_link to base class %r clashes with " + "declared field of the same name." + % ( + attr_name, + name, + base.__name__, + ) + ) + + # Only add the ptr field if it's not already present; + # e.g. migrations will already have it specified + if not hasattr(new_class, attr_name): + new_class.add_to_class(attr_name, field) + else: + field = None + new_class._meta.parents[base] = field + else: + base_parents = base._meta.parents.copy() + + # Add fields from abstract base class if it wasn't overridden. + for field in parent_fields: + if ( + field.name not in field_names + and field.name not in new_class.__dict__ + and field.name not in inherited_attributes + ): + new_field = copy.deepcopy(field) + new_class.add_to_class(field.name, new_field) + # Replace parent links defined on this base by the new + # field. It will be appropriately resolved if required. + if field.one_to_one: + for parent, parent_link in base_parents.items(): + if field == parent_link: + base_parents[parent] = new_field + + # Pass any non-abstract parent classes onto child. + new_class._meta.parents.update(base_parents) + + # Inherit private fields (like GenericForeignKey) from the parent + # class + for field in base._meta.private_fields: + if field.name in field_names: + if not base._meta.abstract: + raise FieldError( + "Local field %r in class %r clashes with field of " + "the same name from base class %r." + % ( + field.name, + name, + base.__name__, + ) + ) + else: + field = copy.deepcopy(field) + if not base._meta.abstract: + field.mti_inherited = True + new_class.add_to_class(field.name, field) + + # Copy indexes so that index names are unique when models extend an + # abstract model. + new_class._meta.indexes = [ + copy.deepcopy(idx) for idx in new_class._meta.indexes + ] + + if abstract: + # Abstract base models can't be instantiated and don't appear in + # the list of models for an app. We do the final setup for them a + # little differently from normal models. + attr_meta.abstract = False + new_class.Meta = attr_meta + return new_class + + new_class._prepare() + new_class._meta.apps.register_model(new_class._meta.app_label, new_class) + return new_class + + def add_to_class(cls, name, value): + if _has_contribute_to_class(value): + value.contribute_to_class(cls, name) + else: + setattr(cls, name, value) + + def _prepare(cls): + """Create some methods once self._meta has been populated.""" + opts = cls._meta + opts._prepare(cls) + + if opts.order_with_respect_to: + cls.get_next_in_order = partialmethod( + cls._get_next_or_previous_in_order, is_next=True + ) + cls.get_previous_in_order = partialmethod( + cls._get_next_or_previous_in_order, is_next=False + ) + + # Defer creating accessors on the foreign class until it has been + # created and registered. If remote_field is None, we're ordering + # with respect to a GenericForeignKey and don't know what the + # foreign class is - we'll add those accessors later in + # contribute_to_class(). + if opts.order_with_respect_to.remote_field: + wrt = opts.order_with_respect_to + remote = wrt.remote_field.model + lazy_related_operation(make_foreign_order_accessors, cls, remote) + + # Give the class a docstring -- its definition. + if cls.__doc__ is None: + cls.__doc__ = "%s(%s)" % ( + cls.__name__, + ", ".join(f.name for f in opts.fields), + ) + + get_absolute_url_override = settings.ABSOLUTE_URL_OVERRIDES.get( + opts.label_lower + ) + if get_absolute_url_override: + setattr(cls, "get_absolute_url", get_absolute_url_override) + + if not opts.managers: + if any(f.name == "objects" for f in opts.fields): + raise ValueError( + "Model %s must specify a custom Manager, because it has a " + "field named 'objects'." % cls.__name__ + ) + manager = Manager() + manager.auto_created = True + cls.add_to_class("objects", manager) + + # Set the name of _meta.indexes. This can't be done in + # Options.contribute_to_class() because fields haven't been added to + # the model at that point. + for index in cls._meta.indexes: + if not index.name: + index.set_name_with_model(cls) + + class_prepared.send(sender=cls) + + @property + def _base_manager(cls): + return cls._meta.base_manager + + @property + def _default_manager(cls): + return cls._meta.default_manager + + +class ModelStateFieldsCacheDescriptor: + def __get__(self, instance, cls=None): + if instance is None: + return self + res = instance.fields_cache = {} + return res + + +class ModelState: + """Store model instance state.""" + + db = None + # If true, uniqueness validation checks will consider this a new, unsaved + # object. Necessary for correct validation of new instances of objects with + # explicit (non-auto) PKs. This impacts validation only; it has no effect + # on the actual save. + adding = True + fields_cache = ModelStateFieldsCacheDescriptor() + + +class Model(metaclass=ModelBase): + def __init__(self, *args, **kwargs): + # Alias some things as locals to avoid repeat global lookups + cls = self.__class__ + opts = self._meta + _setattr = setattr + _DEFERRED = DEFERRED + if opts.abstract: + raise TypeError("Abstract models cannot be instantiated.") + + pre_init.send(sender=cls, args=args, kwargs=kwargs) + + # Set up the storage for instance state + self._state = ModelState() + + # There is a rather weird disparity here; if kwargs, it's set, then args + # overrides it. It should be one or the other; don't duplicate the work + # The reason for the kwargs check is that standard iterator passes in by + # args, and instantiation for iteration is 33% faster. + if len(args) > len(opts.concrete_fields): + # Daft, but matches old exception sans the err msg. + raise IndexError("Number of args exceeds number of fields") + + if not kwargs: + fields_iter = iter(opts.concrete_fields) + # The ordering of the zip calls matter - zip throws StopIteration + # when an iter throws it. So if the first iter throws it, the second + # is *not* consumed. We rely on this, so don't change the order + # without changing the logic. + for val, field in zip(args, fields_iter): + if val is _DEFERRED: + continue + _setattr(self, field.attname, val) + else: + # Slower, kwargs-ready version. + fields_iter = iter(opts.fields) + for val, field in zip(args, fields_iter): + if val is _DEFERRED: + continue + _setattr(self, field.attname, val) + if kwargs.pop(field.name, NOT_PROVIDED) is not NOT_PROVIDED: + raise TypeError( + f"{cls.__qualname__}() got both positional and " + f"keyword arguments for field '{field.name}'." + ) + + # Now we're left with the unprocessed fields that *must* come from + # keywords, or default. + + for field in fields_iter: + is_related_object = False + # Virtual field + if field.attname not in kwargs and field.column is None: + continue + if kwargs: + if isinstance(field.remote_field, ForeignObjectRel): + try: + # Assume object instance was passed in. + rel_obj = kwargs.pop(field.name) + is_related_object = True + except KeyError: + try: + # Object instance wasn't passed in -- must be an ID. + val = kwargs.pop(field.attname) + except KeyError: + val = field.get_default() + else: + try: + val = kwargs.pop(field.attname) + except KeyError: + # This is done with an exception rather than the + # default argument on pop because we don't want + # get_default() to be evaluated, and then not used. + # Refs #12057. + val = field.get_default() + else: + val = field.get_default() + + if is_related_object: + # If we are passed a related instance, set it using the + # field.name instead of field.attname (e.g. "user" instead of + # "user_id") so that the object gets properly cached (and type + # checked) by the RelatedObjectDescriptor. + if rel_obj is not _DEFERRED: + _setattr(self, field.name, rel_obj) + else: + if val is not _DEFERRED: + _setattr(self, field.attname, val) + + if kwargs: + property_names = opts._property_names + for prop in tuple(kwargs): + try: + # Any remaining kwargs must correspond to properties or + # virtual fields. + if prop in property_names or opts.get_field(prop): + if kwargs[prop] is not _DEFERRED: + _setattr(self, prop, kwargs[prop]) + del kwargs[prop] + except (AttributeError, FieldDoesNotExist): + pass + for kwarg in kwargs: + raise TypeError( + "%s() got an unexpected keyword argument '%s'" + % (cls.__name__, kwarg) + ) + super().__init__() + post_init.send(sender=cls, instance=self) + + @classmethod + def from_db(cls, db, field_names, values): + if len(values) != len(cls._meta.concrete_fields): + values_iter = iter(values) + values = [ + next(values_iter) if f.attname in field_names else DEFERRED + for f in cls._meta.concrete_fields + ] + new = cls(*values) + new._state.adding = False + new._state.db = db + return new + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def __str__(self): + return "%s object (%s)" % (self.__class__.__name__, self.pk) + + def __eq__(self, other): + if not isinstance(other, Model): + return NotImplemented + if self._meta.concrete_model != other._meta.concrete_model: + return False + my_pk = self.pk + if my_pk is None: + return self is other + return my_pk == other.pk + + def __hash__(self): + if self.pk is None: + raise TypeError("Model instances without primary key value are unhashable") + return hash(self.pk) + + def __reduce__(self): + data = self.__getstate__() + data[DJANGO_VERSION_PICKLE_KEY] = django.__version__ + class_id = self._meta.app_label, self._meta.object_name + return model_unpickle, (class_id,), data + + def __getstate__(self): + """Hook to allow choosing the attributes to pickle.""" + state = self.__dict__.copy() + state["_state"] = copy.copy(state["_state"]) + state["_state"].fields_cache = state["_state"].fields_cache.copy() + # memoryview cannot be pickled, so cast it to bytes and store + # separately. + _memoryview_attrs = [] + for attr, value in state.items(): + if isinstance(value, memoryview): + _memoryview_attrs.append((attr, bytes(value))) + if _memoryview_attrs: + state["_memoryview_attrs"] = _memoryview_attrs + for attr, value in _memoryview_attrs: + state.pop(attr) + return state + + def __setstate__(self, state): + pickled_version = state.get(DJANGO_VERSION_PICKLE_KEY) + if pickled_version: + if pickled_version != django.__version__: + warnings.warn( + "Pickled model instance's Django version %s does not " + "match the current version %s." + % (pickled_version, django.__version__), + RuntimeWarning, + stacklevel=2, + ) + else: + warnings.warn( + "Pickled model instance's Django version is not specified.", + RuntimeWarning, + stacklevel=2, + ) + if "_memoryview_attrs" in state: + for attr, value in state.pop("_memoryview_attrs"): + state[attr] = memoryview(value) + self.__dict__.update(state) + + def _get_pk_val(self, meta=None): + meta = meta or self._meta + return getattr(self, meta.pk.attname) + + def _set_pk_val(self, value): + for parent_link in self._meta.parents.values(): + if parent_link and parent_link != self._meta.pk: + setattr(self, parent_link.target_field.attname, value) + return setattr(self, self._meta.pk.attname, value) + + pk = property(_get_pk_val, _set_pk_val) + + def get_deferred_fields(self): + """ + Return a set containing names of deferred fields for this instance. + """ + return { + f.attname + for f in self._meta.concrete_fields + if f.attname not in self.__dict__ + } + + def refresh_from_db(self, using=None, fields=None): + """ + Reload field values from the database. + + By default, the reloading happens from the database this instance was + loaded from, or by the read router if this instance wasn't loaded from + any database. The using parameter will override the default. + + Fields can be used to specify which fields to reload. The fields + should be an iterable of field attnames. If fields is None, then + all non-deferred fields are reloaded. + + When accessing deferred fields of an instance, the deferred loading + of the field will call this method. + """ + if fields is None: + self._prefetched_objects_cache = {} + else: + prefetched_objects_cache = getattr(self, "_prefetched_objects_cache", ()) + for field in fields: + if field in prefetched_objects_cache: + del prefetched_objects_cache[field] + fields.remove(field) + if not fields: + return + if any(LOOKUP_SEP in f for f in fields): + raise ValueError( + 'Found "%s" in fields argument. Relations and transforms ' + "are not allowed in fields." % LOOKUP_SEP + ) + + hints = {"instance": self} + db_instance_qs = self.__class__._base_manager.db_manager( + using, hints=hints + ).filter(pk=self.pk) + + # Use provided fields, if not set then reload all non-deferred fields. + deferred_fields = self.get_deferred_fields() + if fields is not None: + fields = list(fields) + db_instance_qs = db_instance_qs.only(*fields) + elif deferred_fields: + fields = [ + f.attname + for f in self._meta.concrete_fields + if f.attname not in deferred_fields + ] + db_instance_qs = db_instance_qs.only(*fields) + + db_instance = db_instance_qs.get() + non_loaded_fields = db_instance.get_deferred_fields() + for field in self._meta.concrete_fields: + if field.attname in non_loaded_fields: + # This field wasn't refreshed - skip ahead. + continue + setattr(self, field.attname, getattr(db_instance, field.attname)) + # Clear cached foreign keys. + if field.is_relation and field.is_cached(self): + field.delete_cached_value(self) + + # Clear cached relations. + for field in self._meta.related_objects: + if field.is_cached(self): + field.delete_cached_value(self) + + self._state.db = db_instance._state.db + + def serializable_value(self, field_name): + """ + Return the value of the field name for this instance. If the field is + a foreign key, return the id value instead of the object. If there's + no Field object with this name on the model, return the model + attribute's value. + + Used to serialize a field's value (in the serializer, or form output, + for example). Normally, you would just access the attribute directly + and not use this method. + """ + try: + field = self._meta.get_field(field_name) + except FieldDoesNotExist: + return getattr(self, field_name) + return getattr(self, field.attname) + + def save( + self, force_insert=False, force_update=False, using=None, update_fields=None + ): + """ + Save the current instance. Override this in a subclass if you want to + control the saving process. + + The 'force_insert' and 'force_update' parameters can be used to insist + that the "save" must be an SQL insert or update (or equivalent for + non-SQL backends), respectively. Normally, they should not be set. + """ + self._prepare_related_fields_for_save(operation_name="save") + + using = using or router.db_for_write(self.__class__, instance=self) + if force_insert and (force_update or update_fields): + raise ValueError("Cannot force both insert and updating in model saving.") + + deferred_fields = self.get_deferred_fields() + if update_fields is not None: + # If update_fields is empty, skip the save. We do also check for + # no-op saves later on for inheritance cases. This bailout is + # still needed for skipping signal sending. + if not update_fields: + return + + update_fields = frozenset(update_fields) + field_names = set() + + for field in self._meta.concrete_fields: + if not field.primary_key: + field_names.add(field.name) + + if field.name != field.attname: + field_names.add(field.attname) + + non_model_fields = update_fields.difference(field_names) + + if non_model_fields: + raise ValueError( + "The following fields do not exist in this model, are m2m " + "fields, or are non-concrete fields: %s" + % ", ".join(non_model_fields) + ) + + # If saving to the same database, and this model is deferred, then + # automatically do an "update_fields" save on the loaded fields. + elif not force_insert and deferred_fields and using == self._state.db: + field_names = set() + for field in self._meta.concrete_fields: + if not field.primary_key and not hasattr(field, "through"): + field_names.add(field.attname) + loaded_fields = field_names.difference(deferred_fields) + if loaded_fields: + update_fields = frozenset(loaded_fields) + + self.save_base( + using=using, + force_insert=force_insert, + force_update=force_update, + update_fields=update_fields, + ) + + save.alters_data = True + + def save_base( + self, + raw=False, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + ): + """ + Handle the parts of saving which should be done only once per save, + yet need to be done in raw saves, too. This includes some sanity + checks and signal sending. + + The 'raw' argument is telling save_base not to save any parent + models and not to do any changes to the values before save. This + is used by fixture loading. + """ + using = using or router.db_for_write(self.__class__, instance=self) + assert not (force_insert and (force_update or update_fields)) + assert update_fields is None or update_fields + cls = origin = self.__class__ + # Skip proxies, but keep the origin as the proxy model. + if cls._meta.proxy: + cls = cls._meta.concrete_model + meta = cls._meta + if not meta.auto_created: + pre_save.send( + sender=origin, + instance=self, + raw=raw, + using=using, + update_fields=update_fields, + ) + # A transaction isn't needed if one query is issued. + if meta.parents: + context_manager = transaction.atomic(using=using, savepoint=False) + else: + context_manager = transaction.mark_for_rollback_on_error(using=using) + with context_manager: + parent_inserted = False + if not raw: + parent_inserted = self._save_parents(cls, using, update_fields) + updated = self._save_table( + raw, + cls, + force_insert or parent_inserted, + force_update, + using, + update_fields, + ) + # Store the database on which the object was saved + self._state.db = using + # Once saved, this is no longer a to-be-added instance. + self._state.adding = False + + # Signal that the save is complete + if not meta.auto_created: + post_save.send( + sender=origin, + instance=self, + created=(not updated), + update_fields=update_fields, + raw=raw, + using=using, + ) + + save_base.alters_data = True + + def _save_parents(self, cls, using, update_fields): + """Save all the parents of cls using values from self.""" + meta = cls._meta + inserted = False + for parent, field in meta.parents.items(): + # Make sure the link fields are synced between parent and self. + if ( + field + and getattr(self, parent._meta.pk.attname) is None + and getattr(self, field.attname) is not None + ): + setattr(self, parent._meta.pk.attname, getattr(self, field.attname)) + parent_inserted = self._save_parents( + cls=parent, using=using, update_fields=update_fields + ) + updated = self._save_table( + cls=parent, + using=using, + update_fields=update_fields, + force_insert=parent_inserted, + ) + if not updated: + inserted = True + # Set the parent's PK value to self. + if field: + setattr(self, field.attname, self._get_pk_val(parent._meta)) + # Since we didn't have an instance of the parent handy set + # attname directly, bypassing the descriptor. Invalidate + # the related object cache, in case it's been accidentally + # populated. A fresh instance will be re-built from the + # database if necessary. + if field.is_cached(self): + field.delete_cached_value(self) + return inserted + + def _save_table( + self, + raw=False, + cls=None, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + ): + """ + Do the heavy-lifting involved in saving. Update or insert the data + for a single table. + """ + meta = cls._meta + non_pks = [f for f in meta.local_concrete_fields if not f.primary_key] + + if update_fields: + non_pks = [ + f + for f in non_pks + if f.name in update_fields or f.attname in update_fields + ] + + pk_val = self._get_pk_val(meta) + if pk_val is None: + pk_val = meta.pk.get_pk_value_on_save(self) + setattr(self, meta.pk.attname, pk_val) + pk_set = pk_val is not None + if not pk_set and (force_update or update_fields): + raise ValueError("Cannot force an update in save() with no primary key.") + updated = False + # Skip an UPDATE when adding an instance and primary key has a default. + if ( + not raw + and not force_insert + and self._state.adding + and meta.pk.default + and meta.pk.default is not NOT_PROVIDED + ): + force_insert = True + # If possible, try an UPDATE. If that doesn't update anything, do an INSERT. + if pk_set and not force_insert: + base_qs = cls._base_manager.using(using) + values = [ + ( + f, + None, + (getattr(self, f.attname) if raw else f.pre_save(self, False)), + ) + for f in non_pks + ] + forced_update = update_fields or force_update + updated = self._do_update( + base_qs, using, pk_val, values, update_fields, forced_update + ) + if force_update and not updated: + raise DatabaseError("Forced update did not affect any rows.") + if update_fields and not updated: + raise DatabaseError("Save with update_fields did not affect any rows.") + if not updated: + if meta.order_with_respect_to: + # If this is a model with an order_with_respect_to + # autopopulate the _order field + field = meta.order_with_respect_to + filter_args = field.get_filter_kwargs_for_object(self) + self._order = ( + cls._base_manager.using(using) + .filter(**filter_args) + .aggregate( + _order__max=Coalesce( + ExpressionWrapper( + Max("_order") + Value(1), output_field=IntegerField() + ), + Value(0), + ), + )["_order__max"] + ) + fields = meta.local_concrete_fields + if not pk_set: + fields = [f for f in fields if f is not meta.auto_field] + + returning_fields = meta.db_returning_fields + results = self._do_insert( + cls._base_manager, using, fields, returning_fields, raw + ) + if results: + for value, field in zip(results[0], returning_fields): + setattr(self, field.attname, value) + return updated + + def _do_update(self, base_qs, using, pk_val, values, update_fields, forced_update): + """ + Try to update the model. Return True if the model was updated (if an + update query was done and a matching row was found in the DB). + """ + filtered = base_qs.filter(pk=pk_val) + if not values: + # We can end up here when saving a model in inheritance chain where + # update_fields doesn't target any field in current model. In that + # case we just say the update succeeded. Another case ending up here + # is a model with just PK - in that case check that the PK still + # exists. + return update_fields is not None or filtered.exists() + if self._meta.select_on_save and not forced_update: + return ( + filtered.exists() + and + # It may happen that the object is deleted from the DB right after + # this check, causing the subsequent UPDATE to return zero matching + # rows. The same result can occur in some rare cases when the + # database returns zero despite the UPDATE being executed + # successfully (a row is matched and updated). In order to + # distinguish these two cases, the object's existence in the + # database is again checked for if the UPDATE query returns 0. + (filtered._update(values) > 0 or filtered.exists()) + ) + return filtered._update(values) > 0 + + def _do_insert(self, manager, using, fields, returning_fields, raw): + """ + Do an INSERT. If returning_fields is defined then this method should + return the newly created data for the model. + """ + return manager._insert( + [self], + fields=fields, + returning_fields=returning_fields, + using=using, + raw=raw, + ) + + def _prepare_related_fields_for_save(self, operation_name): + # Ensure that a model instance without a PK hasn't been assigned to + # a ForeignKey or OneToOneField on this model. If the field is + # nullable, allowing the save would result in silent data loss. + for field in self._meta.concrete_fields: + # If the related field isn't cached, then an instance hasn't been + # assigned and there's no need to worry about this check. + if field.is_relation and field.is_cached(self): + obj = getattr(self, field.name, None) + if not obj: + continue + # A pk may have been assigned manually to a model instance not + # saved to the database (or auto-generated in a case like + # UUIDField), but we allow the save to proceed and rely on the + # database to raise an IntegrityError if applicable. If + # constraints aren't supported by the database, there's the + # unavoidable risk of data corruption. + if obj.pk is None: + # Remove the object from a related instance cache. + if not field.remote_field.multiple: + field.remote_field.delete_cached_value(obj) + raise ValueError( + "%s() prohibited to prevent data loss due to unsaved " + "related object '%s'." % (operation_name, field.name) + ) + elif getattr(self, field.attname) in field.empty_values: + # Use pk from related object if it has been saved after + # an assignment. + setattr(self, field.attname, obj.pk) + # If the relationship's pk/to_field was changed, clear the + # cached relationship. + if getattr(obj, field.target_field.attname) != getattr( + self, field.attname + ): + field.delete_cached_value(self) + + def delete(self, using=None, keep_parents=False): + if self.pk is None: + raise ValueError( + "%s object can't be deleted because its %s attribute is set " + "to None." % (self._meta.object_name, self._meta.pk.attname) + ) + using = using or router.db_for_write(self.__class__, instance=self) + collector = Collector(using=using) + collector.collect([self], keep_parents=keep_parents) + return collector.delete() + + delete.alters_data = True + + def _get_FIELD_display(self, field): + value = getattr(self, field.attname) + choices_dict = dict(make_hashable(field.flatchoices)) + # force_str() to coerce lazy strings. + return force_str( + choices_dict.get(make_hashable(value), value), strings_only=True + ) + + def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs): + if not self.pk: + raise ValueError("get_next/get_previous cannot be used on unsaved objects.") + op = "gt" if is_next else "lt" + order = "" if is_next else "-" + param = getattr(self, field.attname) + q = Q((field.name, param), (f"pk__{op}", self.pk), _connector=Q.AND) + q = Q(q, (f"{field.name}__{op}", param), _connector=Q.OR) + qs = ( + self.__class__._default_manager.using(self._state.db) + .filter(**kwargs) + .filter(q) + .order_by("%s%s" % (order, field.name), "%spk" % order) + ) + try: + return qs[0] + except IndexError: + raise self.DoesNotExist( + "%s matching query does not exist." % self.__class__._meta.object_name + ) + + def _get_next_or_previous_in_order(self, is_next): + cachename = "__%s_order_cache" % is_next + if not hasattr(self, cachename): + op = "gt" if is_next else "lt" + order = "_order" if is_next else "-_order" + order_field = self._meta.order_with_respect_to + filter_args = order_field.get_filter_kwargs_for_object(self) + obj = ( + self.__class__._default_manager.filter(**filter_args) + .filter( + **{ + "_order__%s" + % op: self.__class__._default_manager.values("_order").filter( + **{self._meta.pk.name: self.pk} + ) + } + ) + .order_by(order)[:1] + .get() + ) + setattr(self, cachename, obj) + return getattr(self, cachename) + + def prepare_database_save(self, field): + if self.pk is None: + raise ValueError( + "Unsaved model instance %r cannot be used in an ORM query." % self + ) + return getattr(self, field.remote_field.get_related_field().attname) + + def clean(self): + """ + Hook for doing any extra model-wide validation after clean() has been + called on every field by self.clean_fields. Any ValidationError raised + by this method will not be associated with a particular field; it will + have a special-case association with the field defined by NON_FIELD_ERRORS. + """ + pass + + def validate_unique(self, exclude=None): + """ + Check unique constraints on the model and raise ValidationError if any + failed. + """ + unique_checks, date_checks = self._get_unique_checks(exclude=exclude) + + errors = self._perform_unique_checks(unique_checks) + date_errors = self._perform_date_checks(date_checks) + + for k, v in date_errors.items(): + errors.setdefault(k, []).extend(v) + + if errors: + raise ValidationError(errors) + + def _get_unique_checks(self, exclude=None): + """ + Return a list of checks to perform. Since validate_unique() could be + called from a ModelForm, some fields may have been excluded; we can't + perform a unique check on a model that is missing fields involved + in that check. Fields that did not validate should also be excluded, + but they need to be passed in via the exclude argument. + """ + if exclude is None: + exclude = [] + unique_checks = [] + + unique_togethers = [(self.__class__, self._meta.unique_together)] + constraints = [(self.__class__, self._meta.total_unique_constraints)] + for parent_class in self._meta.get_parent_list(): + if parent_class._meta.unique_together: + unique_togethers.append( + (parent_class, parent_class._meta.unique_together) + ) + if parent_class._meta.total_unique_constraints: + constraints.append( + (parent_class, parent_class._meta.total_unique_constraints) + ) + + for model_class, unique_together in unique_togethers: + for check in unique_together: + if not any(name in exclude for name in check): + # Add the check if the field isn't excluded. + unique_checks.append((model_class, tuple(check))) + + for model_class, model_constraints in constraints: + for constraint in model_constraints: + if not any(name in exclude for name in constraint.fields): + unique_checks.append((model_class, constraint.fields)) + + # These are checks for the unique_for_. + date_checks = [] + + # Gather a list of checks for fields declared as unique and add them to + # the list of checks. + + fields_with_class = [(self.__class__, self._meta.local_fields)] + for parent_class in self._meta.get_parent_list(): + fields_with_class.append((parent_class, parent_class._meta.local_fields)) + + for model_class, fields in fields_with_class: + for f in fields: + name = f.name + if name in exclude: + continue + if f.unique: + unique_checks.append((model_class, (name,))) + if f.unique_for_date and f.unique_for_date not in exclude: + date_checks.append((model_class, "date", name, f.unique_for_date)) + if f.unique_for_year and f.unique_for_year not in exclude: + date_checks.append((model_class, "year", name, f.unique_for_year)) + if f.unique_for_month and f.unique_for_month not in exclude: + date_checks.append((model_class, "month", name, f.unique_for_month)) + return unique_checks, date_checks + + def _perform_unique_checks(self, unique_checks): + errors = {} + + for model_class, unique_check in unique_checks: + # Try to look up an existing object with the same values as this + # object's values for all the unique field. + + lookup_kwargs = {} + for field_name in unique_check: + f = self._meta.get_field(field_name) + lookup_value = getattr(self, f.attname) + # TODO: Handle multiple backends with different feature flags. + if lookup_value is None or ( + lookup_value == "" + and connection.features.interprets_empty_strings_as_nulls + ): + # no value, skip the lookup + continue + if f.primary_key and not self._state.adding: + # no need to check for unique primary key when editing + continue + lookup_kwargs[str(field_name)] = lookup_value + + # some fields were skipped, no reason to do the check + if len(unique_check) != len(lookup_kwargs): + continue + + qs = model_class._default_manager.filter(**lookup_kwargs) + + # Exclude the current object from the query if we are editing an + # instance (as opposed to creating a new one) + # Note that we need to use the pk as defined by model_class, not + # self.pk. These can be different fields because model inheritance + # allows single model to have effectively multiple primary keys. + # Refs #17615. + model_class_pk = self._get_pk_val(model_class._meta) + if not self._state.adding and model_class_pk is not None: + qs = qs.exclude(pk=model_class_pk) + if qs.exists(): + if len(unique_check) == 1: + key = unique_check[0] + else: + key = NON_FIELD_ERRORS + errors.setdefault(key, []).append( + self.unique_error_message(model_class, unique_check) + ) + + return errors + + def _perform_date_checks(self, date_checks): + errors = {} + for model_class, lookup_type, field, unique_for in date_checks: + lookup_kwargs = {} + # there's a ticket to add a date lookup, we can remove this special + # case if that makes it's way in + date = getattr(self, unique_for) + if date is None: + continue + if lookup_type == "date": + lookup_kwargs["%s__day" % unique_for] = date.day + lookup_kwargs["%s__month" % unique_for] = date.month + lookup_kwargs["%s__year" % unique_for] = date.year + else: + lookup_kwargs["%s__%s" % (unique_for, lookup_type)] = getattr( + date, lookup_type + ) + lookup_kwargs[field] = getattr(self, field) + + qs = model_class._default_manager.filter(**lookup_kwargs) + # Exclude the current object from the query if we are editing an + # instance (as opposed to creating a new one) + if not self._state.adding and self.pk is not None: + qs = qs.exclude(pk=self.pk) + + if qs.exists(): + errors.setdefault(field, []).append( + self.date_error_message(lookup_type, field, unique_for) + ) + return errors + + def date_error_message(self, lookup_type, field_name, unique_for): + opts = self._meta + field = opts.get_field(field_name) + return ValidationError( + message=field.error_messages["unique_for_date"], + code="unique_for_date", + params={ + "model": self, + "model_name": capfirst(opts.verbose_name), + "lookup_type": lookup_type, + "field": field_name, + "field_label": capfirst(field.verbose_name), + "date_field": unique_for, + "date_field_label": capfirst(opts.get_field(unique_for).verbose_name), + }, + ) + + def unique_error_message(self, model_class, unique_check): + opts = model_class._meta + + params = { + "model": self, + "model_class": model_class, + "model_name": capfirst(opts.verbose_name), + "unique_check": unique_check, + } + + # A unique field + if len(unique_check) == 1: + field = opts.get_field(unique_check[0]) + params["field_label"] = capfirst(field.verbose_name) + return ValidationError( + message=field.error_messages["unique"], + code="unique", + params=params, + ) + + # unique_together + else: + field_labels = [ + capfirst(opts.get_field(f).verbose_name) for f in unique_check + ] + params["field_labels"] = get_text_list(field_labels, _("and")) + return ValidationError( + message=_("%(model_name)s with this %(field_labels)s already exists."), + code="unique_together", + params=params, + ) + + def full_clean(self, exclude=None, validate_unique=True): + """ + Call clean_fields(), clean(), and validate_unique() on the model. + Raise a ValidationError for any errors that occur. + """ + errors = {} + if exclude is None: + exclude = [] + else: + exclude = list(exclude) + + try: + self.clean_fields(exclude=exclude) + except ValidationError as e: + errors = e.update_error_dict(errors) + + # Form.clean() is run even if other validation fails, so do the + # same with Model.clean() for consistency. + try: + self.clean() + except ValidationError as e: + errors = e.update_error_dict(errors) + + # Run unique checks, but only for fields that passed validation. + if validate_unique: + for name in errors: + if name != NON_FIELD_ERRORS and name not in exclude: + exclude.append(name) + try: + self.validate_unique(exclude=exclude) + except ValidationError as e: + errors = e.update_error_dict(errors) + + if errors: + raise ValidationError(errors) + + def clean_fields(self, exclude=None): + """ + Clean all fields and raise a ValidationError containing a dict + of all validation errors if any occur. + """ + if exclude is None: + exclude = [] + + errors = {} + for f in self._meta.fields: + if f.name in exclude: + continue + # Skip validation for empty fields with blank=True. The developer + # is responsible for making sure they have a valid value. + raw_value = getattr(self, f.attname) + if f.blank and raw_value in f.empty_values: + continue + try: + setattr(self, f.attname, f.clean(raw_value, self)) + except ValidationError as e: + errors[f.name] = e.error_list + + if errors: + raise ValidationError(errors) + + @classmethod + def check(cls, **kwargs): + errors = [ + *cls._check_swappable(), + *cls._check_model(), + *cls._check_managers(**kwargs), + ] + if not cls._meta.swapped: + databases = kwargs.get("databases") or [] + errors += [ + *cls._check_fields(**kwargs), + *cls._check_m2m_through_same_relationship(), + *cls._check_long_column_names(databases), + ] + clash_errors = ( + *cls._check_id_field(), + *cls._check_field_name_clashes(), + *cls._check_model_name_db_lookup_clashes(), + *cls._check_property_name_related_field_accessor_clashes(), + *cls._check_single_primary_key(), + ) + errors.extend(clash_errors) + # If there are field name clashes, hide consequent column name + # clashes. + if not clash_errors: + errors.extend(cls._check_column_name_clashes()) + errors += [ + *cls._check_index_together(), + *cls._check_unique_together(), + *cls._check_indexes(databases), + *cls._check_ordering(), + *cls._check_constraints(databases), + *cls._check_default_pk(), + ] + + return errors + + @classmethod + def _check_default_pk(cls): + if ( + not cls._meta.abstract + and cls._meta.pk.auto_created + and + # Inherited PKs are checked in parents models. + not ( + isinstance(cls._meta.pk, OneToOneField) + and cls._meta.pk.remote_field.parent_link + ) + and not settings.is_overridden("DEFAULT_AUTO_FIELD") + and cls._meta.app_config + and not cls._meta.app_config._is_default_auto_field_overridden + ): + return [ + checks.Warning( + f"Auto-created primary key used when not defining a " + f"primary key type, by default " + f"'{settings.DEFAULT_AUTO_FIELD}'.", + hint=( + f"Configure the DEFAULT_AUTO_FIELD setting or the " + f"{cls._meta.app_config.__class__.__qualname__}." + f"default_auto_field attribute to point to a subclass " + f"of AutoField, e.g. 'django.db.models.BigAutoField'." + ), + obj=cls, + id="models.W042", + ), + ] + return [] + + @classmethod + def _check_swappable(cls): + """Check if the swapped model exists.""" + errors = [] + if cls._meta.swapped: + try: + apps.get_model(cls._meta.swapped) + except ValueError: + errors.append( + checks.Error( + "'%s' is not of the form 'app_label.app_name'." + % cls._meta.swappable, + id="models.E001", + ) + ) + except LookupError: + app_label, model_name = cls._meta.swapped.split(".") + errors.append( + checks.Error( + "'%s' references '%s.%s', which has not been " + "installed, or is abstract." + % (cls._meta.swappable, app_label, model_name), + id="models.E002", + ) + ) + return errors + + @classmethod + def _check_model(cls): + errors = [] + if cls._meta.proxy: + if cls._meta.local_fields or cls._meta.local_many_to_many: + errors.append( + checks.Error( + "Proxy model '%s' contains model fields." % cls.__name__, + id="models.E017", + ) + ) + return errors + + @classmethod + def _check_managers(cls, **kwargs): + """Perform all manager checks.""" + errors = [] + for manager in cls._meta.managers: + errors.extend(manager.check(**kwargs)) + return errors + + @classmethod + def _check_fields(cls, **kwargs): + """Perform all field checks.""" + errors = [] + for field in cls._meta.local_fields: + errors.extend(field.check(**kwargs)) + for field in cls._meta.local_many_to_many: + errors.extend(field.check(from_model=cls, **kwargs)) + return errors + + @classmethod + def _check_m2m_through_same_relationship(cls): + """Check if no relationship model is used by more than one m2m field.""" + + errors = [] + seen_intermediary_signatures = [] + + fields = cls._meta.local_many_to_many + + # Skip when the target model wasn't found. + fields = (f for f in fields if isinstance(f.remote_field.model, ModelBase)) + + # Skip when the relationship model wasn't found. + fields = (f for f in fields if isinstance(f.remote_field.through, ModelBase)) + + for f in fields: + signature = ( + f.remote_field.model, + cls, + f.remote_field.through, + f.remote_field.through_fields, + ) + if signature in seen_intermediary_signatures: + errors.append( + checks.Error( + "The model has two identical many-to-many relations " + "through the intermediate model '%s'." + % f.remote_field.through._meta.label, + obj=cls, + id="models.E003", + ) + ) + else: + seen_intermediary_signatures.append(signature) + return errors + + @classmethod + def _check_id_field(cls): + """Check if `id` field is a primary key.""" + fields = [ + f for f in cls._meta.local_fields if f.name == "id" and f != cls._meta.pk + ] + # fields is empty or consists of the invalid "id" field + if fields and not fields[0].primary_key and cls._meta.pk.name == "id": + return [ + checks.Error( + "'id' can only be used as a field name if the field also " + "sets 'primary_key=True'.", + obj=cls, + id="models.E004", + ) + ] + else: + return [] + + @classmethod + def _check_field_name_clashes(cls): + """Forbid field shadowing in multi-table inheritance.""" + errors = [] + used_fields = {} # name or attname -> field + + # Check that multi-inheritance doesn't cause field name shadowing. + for parent in cls._meta.get_parent_list(): + for f in parent._meta.local_fields: + clash = used_fields.get(f.name) or used_fields.get(f.attname) or None + if clash: + errors.append( + checks.Error( + "The field '%s' from parent model " + "'%s' clashes with the field '%s' " + "from parent model '%s'." + % (clash.name, clash.model._meta, f.name, f.model._meta), + obj=cls, + id="models.E005", + ) + ) + used_fields[f.name] = f + used_fields[f.attname] = f + + # Check that fields defined in the model don't clash with fields from + # parents, including auto-generated fields like multi-table inheritance + # child accessors. + for parent in cls._meta.get_parent_list(): + for f in parent._meta.get_fields(): + if f not in used_fields: + used_fields[f.name] = f + + for f in cls._meta.local_fields: + clash = used_fields.get(f.name) or used_fields.get(f.attname) or None + # Note that we may detect clash between user-defined non-unique + # field "id" and automatically added unique field "id", both + # defined at the same model. This special case is considered in + # _check_id_field and here we ignore it. + id_conflict = ( + f.name == "id" and clash and clash.name == "id" and clash.model == cls + ) + if clash and not id_conflict: + errors.append( + checks.Error( + "The field '%s' clashes with the field '%s' " + "from model '%s'." % (f.name, clash.name, clash.model._meta), + obj=f, + id="models.E006", + ) + ) + used_fields[f.name] = f + used_fields[f.attname] = f + + return errors + + @classmethod + def _check_column_name_clashes(cls): + # Store a list of column names which have already been used by other fields. + used_column_names = [] + errors = [] + + for f in cls._meta.local_fields: + _, column_name = f.get_attname_column() + + # Ensure the column name is not already in use. + if column_name and column_name in used_column_names: + errors.append( + checks.Error( + "Field '%s' has column name '%s' that is used by " + "another field." % (f.name, column_name), + hint="Specify a 'db_column' for the field.", + obj=cls, + id="models.E007", + ) + ) + else: + used_column_names.append(column_name) + + return errors + + @classmethod + def _check_model_name_db_lookup_clashes(cls): + errors = [] + model_name = cls.__name__ + if model_name.startswith("_") or model_name.endswith("_"): + errors.append( + checks.Error( + "The model name '%s' cannot start or end with an underscore " + "as it collides with the query lookup syntax." % model_name, + obj=cls, + id="models.E023", + ) + ) + elif LOOKUP_SEP in model_name: + errors.append( + checks.Error( + "The model name '%s' cannot contain double underscores as " + "it collides with the query lookup syntax." % model_name, + obj=cls, + id="models.E024", + ) + ) + return errors + + @classmethod + def _check_property_name_related_field_accessor_clashes(cls): + errors = [] + property_names = cls._meta._property_names + related_field_accessors = ( + f.get_attname() + for f in cls._meta._get_fields(reverse=False) + if f.is_relation and f.related_model is not None + ) + for accessor in related_field_accessors: + if accessor in property_names: + errors.append( + checks.Error( + "The property '%s' clashes with a related field " + "accessor." % accessor, + obj=cls, + id="models.E025", + ) + ) + return errors + + @classmethod + def _check_single_primary_key(cls): + errors = [] + if sum(1 for f in cls._meta.local_fields if f.primary_key) > 1: + errors.append( + checks.Error( + "The model cannot have more than one field with " + "'primary_key=True'.", + obj=cls, + id="models.E026", + ) + ) + return errors + + @classmethod + def _check_index_together(cls): + """Check the value of "index_together" option.""" + if not isinstance(cls._meta.index_together, (tuple, list)): + return [ + checks.Error( + "'index_together' must be a list or tuple.", + obj=cls, + id="models.E008", + ) + ] + + elif any( + not isinstance(fields, (tuple, list)) for fields in cls._meta.index_together + ): + return [ + checks.Error( + "All 'index_together' elements must be lists or tuples.", + obj=cls, + id="models.E009", + ) + ] + + else: + errors = [] + for fields in cls._meta.index_together: + errors.extend(cls._check_local_fields(fields, "index_together")) + return errors + + @classmethod + def _check_unique_together(cls): + """Check the value of "unique_together" option.""" + if not isinstance(cls._meta.unique_together, (tuple, list)): + return [ + checks.Error( + "'unique_together' must be a list or tuple.", + obj=cls, + id="models.E010", + ) + ] + + elif any( + not isinstance(fields, (tuple, list)) + for fields in cls._meta.unique_together + ): + return [ + checks.Error( + "All 'unique_together' elements must be lists or tuples.", + obj=cls, + id="models.E011", + ) + ] + + else: + errors = [] + for fields in cls._meta.unique_together: + errors.extend(cls._check_local_fields(fields, "unique_together")) + return errors + + @classmethod + def _check_indexes(cls, databases): + """Check fields, names, and conditions of indexes.""" + errors = [] + references = set() + for index in cls._meta.indexes: + # Index name can't start with an underscore or a number, restricted + # for cross-database compatibility with Oracle. + if index.name[0] == "_" or index.name[0].isdigit(): + errors.append( + checks.Error( + "The index name '%s' cannot start with an underscore " + "or a number." % index.name, + obj=cls, + id="models.E033", + ), + ) + if len(index.name) > index.max_name_length: + errors.append( + checks.Error( + "The index name '%s' cannot be longer than %d " + "characters." % (index.name, index.max_name_length), + obj=cls, + id="models.E034", + ), + ) + if index.contains_expressions: + for expression in index.expressions: + references.update( + ref[0] for ref in cls._get_expr_references(expression) + ) + for db in databases: + if not router.allow_migrate_model(db, cls): + continue + connection = connections[db] + if not ( + connection.features.supports_partial_indexes + or "supports_partial_indexes" in cls._meta.required_db_features + ) and any(index.condition is not None for index in cls._meta.indexes): + errors.append( + checks.Warning( + "%s does not support indexes with conditions." + % connection.display_name, + hint=( + "Conditions will be ignored. Silence this warning " + "if you don't care about it." + ), + obj=cls, + id="models.W037", + ) + ) + if not ( + connection.features.supports_covering_indexes + or "supports_covering_indexes" in cls._meta.required_db_features + ) and any(index.include for index in cls._meta.indexes): + errors.append( + checks.Warning( + "%s does not support indexes with non-key columns." + % connection.display_name, + hint=( + "Non-key columns will be ignored. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W040", + ) + ) + if not ( + connection.features.supports_expression_indexes + or "supports_expression_indexes" in cls._meta.required_db_features + ) and any(index.contains_expressions for index in cls._meta.indexes): + errors.append( + checks.Warning( + "%s does not support indexes on expressions." + % connection.display_name, + hint=( + "An index won't be created. Silence this warning " + "if you don't care about it." + ), + obj=cls, + id="models.W043", + ) + ) + fields = [ + field for index in cls._meta.indexes for field, _ in index.fields_orders + ] + fields += [include for index in cls._meta.indexes for include in index.include] + fields += references + errors.extend(cls._check_local_fields(fields, "indexes")) + return errors + + @classmethod + def _check_local_fields(cls, fields, option): + from django.db import models + + # In order to avoid hitting the relation tree prematurely, we use our + # own fields_map instead of using get_field() + forward_fields_map = {} + for field in cls._meta._get_fields(reverse=False): + forward_fields_map[field.name] = field + if hasattr(field, "attname"): + forward_fields_map[field.attname] = field + + errors = [] + for field_name in fields: + try: + field = forward_fields_map[field_name] + except KeyError: + errors.append( + checks.Error( + "'%s' refers to the nonexistent field '%s'." + % ( + option, + field_name, + ), + obj=cls, + id="models.E012", + ) + ) + else: + if isinstance(field.remote_field, models.ManyToManyRel): + errors.append( + checks.Error( + "'%s' refers to a ManyToManyField '%s', but " + "ManyToManyFields are not permitted in '%s'." + % ( + option, + field_name, + option, + ), + obj=cls, + id="models.E013", + ) + ) + elif field not in cls._meta.local_fields: + errors.append( + checks.Error( + "'%s' refers to field '%s' which is not local to model " + "'%s'." % (option, field_name, cls._meta.object_name), + hint="This issue may be caused by multi-table inheritance.", + obj=cls, + id="models.E016", + ) + ) + return errors + + @classmethod + def _check_ordering(cls): + """ + Check "ordering" option -- is it a list of strings and do all fields + exist? + """ + if cls._meta._ordering_clash: + return [ + checks.Error( + "'ordering' and 'order_with_respect_to' cannot be used together.", + obj=cls, + id="models.E021", + ), + ] + + if cls._meta.order_with_respect_to or not cls._meta.ordering: + return [] + + if not isinstance(cls._meta.ordering, (list, tuple)): + return [ + checks.Error( + "'ordering' must be a tuple or list (even if you want to order by " + "only one field).", + obj=cls, + id="models.E014", + ) + ] + + errors = [] + fields = cls._meta.ordering + + # Skip expressions and '?' fields. + fields = (f for f in fields if isinstance(f, str) and f != "?") + + # Convert "-field" to "field". + fields = ((f[1:] if f.startswith("-") else f) for f in fields) + + # Separate related fields and non-related fields. + _fields = [] + related_fields = [] + for f in fields: + if LOOKUP_SEP in f: + related_fields.append(f) + else: + _fields.append(f) + fields = _fields + + # Check related fields. + for field in related_fields: + _cls = cls + fld = None + for part in field.split(LOOKUP_SEP): + try: + # pk is an alias that won't be found by opts.get_field. + if part == "pk": + fld = _cls._meta.pk + else: + fld = _cls._meta.get_field(part) + if fld.is_relation: + _cls = fld.get_path_info()[-1].to_opts.model + else: + _cls = None + except (FieldDoesNotExist, AttributeError): + if fld is None or ( + fld.get_transform(part) is None and fld.get_lookup(part) is None + ): + errors.append( + checks.Error( + "'ordering' refers to the nonexistent field, " + "related field, or lookup '%s'." % field, + obj=cls, + id="models.E015", + ) + ) + + # Skip ordering on pk. This is always a valid order_by field + # but is an alias and therefore won't be found by opts.get_field. + fields = {f for f in fields if f != "pk"} + + # Check for invalid or nonexistent fields in ordering. + invalid_fields = [] + + # Any field name that is not present in field_names does not exist. + # Also, ordering by m2m fields is not allowed. + opts = cls._meta + valid_fields = set( + chain.from_iterable( + (f.name, f.attname) + if not (f.auto_created and not f.concrete) + else (f.field.related_query_name(),) + for f in chain(opts.fields, opts.related_objects) + ) + ) + + invalid_fields.extend(fields - valid_fields) + + for invalid_field in invalid_fields: + errors.append( + checks.Error( + "'ordering' refers to the nonexistent field, related " + "field, or lookup '%s'." % invalid_field, + obj=cls, + id="models.E015", + ) + ) + return errors + + @classmethod + def _check_long_column_names(cls, databases): + """ + Check that any auto-generated column names are shorter than the limits + for each database in which the model will be created. + """ + if not databases: + return [] + errors = [] + allowed_len = None + db_alias = None + + # Find the minimum max allowed length among all specified db_aliases. + for db in databases: + # skip databases where the model won't be created + if not router.allow_migrate_model(db, cls): + continue + connection = connections[db] + max_name_length = connection.ops.max_name_length() + if max_name_length is None or connection.features.truncates_names: + continue + else: + if allowed_len is None: + allowed_len = max_name_length + db_alias = db + elif max_name_length < allowed_len: + allowed_len = max_name_length + db_alias = db + + if allowed_len is None: + return errors + + for f in cls._meta.local_fields: + _, column_name = f.get_attname_column() + + # Check if auto-generated name for the field is too long + # for the database. + if ( + f.db_column is None + and column_name is not None + and len(column_name) > allowed_len + ): + errors.append( + checks.Error( + 'Autogenerated column name too long for field "%s". ' + 'Maximum length is "%s" for database "%s".' + % (column_name, allowed_len, db_alias), + hint="Set the column name manually using 'db_column'.", + obj=cls, + id="models.E018", + ) + ) + + for f in cls._meta.local_many_to_many: + # Skip nonexistent models. + if isinstance(f.remote_field.through, str): + continue + + # Check if auto-generated name for the M2M field is too long + # for the database. + for m2m in f.remote_field.through._meta.local_fields: + _, rel_name = m2m.get_attname_column() + if ( + m2m.db_column is None + and rel_name is not None + and len(rel_name) > allowed_len + ): + errors.append( + checks.Error( + "Autogenerated column name too long for M2M field " + '"%s". Maximum length is "%s" for database "%s".' + % (rel_name, allowed_len, db_alias), + hint=( + "Use 'through' to create a separate model for " + "M2M and then set column_name using 'db_column'." + ), + obj=cls, + id="models.E019", + ) + ) + + return errors + + @classmethod + def _get_expr_references(cls, expr): + if isinstance(expr, Q): + for child in expr.children: + if isinstance(child, tuple): + lookup, value = child + yield tuple(lookup.split(LOOKUP_SEP)) + yield from cls._get_expr_references(value) + else: + yield from cls._get_expr_references(child) + elif isinstance(expr, F): + yield tuple(expr.name.split(LOOKUP_SEP)) + elif hasattr(expr, "get_source_expressions"): + for src_expr in expr.get_source_expressions(): + yield from cls._get_expr_references(src_expr) + + @classmethod + def _check_constraints(cls, databases): + errors = [] + for db in databases: + if not router.allow_migrate_model(db, cls): + continue + connection = connections[db] + if not ( + connection.features.supports_table_check_constraints + or "supports_table_check_constraints" in cls._meta.required_db_features + ) and any( + isinstance(constraint, CheckConstraint) + for constraint in cls._meta.constraints + ): + errors.append( + checks.Warning( + "%s does not support check constraints." + % connection.display_name, + hint=( + "A constraint won't be created. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W027", + ) + ) + if not ( + connection.features.supports_partial_indexes + or "supports_partial_indexes" in cls._meta.required_db_features + ) and any( + isinstance(constraint, UniqueConstraint) + and constraint.condition is not None + for constraint in cls._meta.constraints + ): + errors.append( + checks.Warning( + "%s does not support unique constraints with " + "conditions." % connection.display_name, + hint=( + "A constraint won't be created. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W036", + ) + ) + if not ( + connection.features.supports_deferrable_unique_constraints + or "supports_deferrable_unique_constraints" + in cls._meta.required_db_features + ) and any( + isinstance(constraint, UniqueConstraint) + and constraint.deferrable is not None + for constraint in cls._meta.constraints + ): + errors.append( + checks.Warning( + "%s does not support deferrable unique constraints." + % connection.display_name, + hint=( + "A constraint won't be created. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W038", + ) + ) + if not ( + connection.features.supports_covering_indexes + or "supports_covering_indexes" in cls._meta.required_db_features + ) and any( + isinstance(constraint, UniqueConstraint) and constraint.include + for constraint in cls._meta.constraints + ): + errors.append( + checks.Warning( + "%s does not support unique constraints with non-key " + "columns." % connection.display_name, + hint=( + "A constraint won't be created. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W039", + ) + ) + if not ( + connection.features.supports_expression_indexes + or "supports_expression_indexes" in cls._meta.required_db_features + ) and any( + isinstance(constraint, UniqueConstraint) + and constraint.contains_expressions + for constraint in cls._meta.constraints + ): + errors.append( + checks.Warning( + "%s does not support unique constraints on " + "expressions." % connection.display_name, + hint=( + "A constraint won't be created. Silence this " + "warning if you don't care about it." + ), + obj=cls, + id="models.W044", + ) + ) + fields = set( + chain.from_iterable( + (*constraint.fields, *constraint.include) + for constraint in cls._meta.constraints + if isinstance(constraint, UniqueConstraint) + ) + ) + references = set() + for constraint in cls._meta.constraints: + if isinstance(constraint, UniqueConstraint): + if ( + connection.features.supports_partial_indexes + or "supports_partial_indexes" + not in cls._meta.required_db_features + ) and isinstance(constraint.condition, Q): + references.update( + cls._get_expr_references(constraint.condition) + ) + if ( + connection.features.supports_expression_indexes + or "supports_expression_indexes" + not in cls._meta.required_db_features + ) and constraint.contains_expressions: + for expression in constraint.expressions: + references.update(cls._get_expr_references(expression)) + elif isinstance(constraint, CheckConstraint): + if ( + connection.features.supports_table_check_constraints + or "supports_table_check_constraints" + not in cls._meta.required_db_features + ) and isinstance(constraint.check, Q): + references.update(cls._get_expr_references(constraint.check)) + for field_name, *lookups in references: + # pk is an alias that won't be found by opts.get_field. + if field_name != "pk": + fields.add(field_name) + if not lookups: + # If it has no lookups it cannot result in a JOIN. + continue + try: + if field_name == "pk": + field = cls._meta.pk + else: + field = cls._meta.get_field(field_name) + if not field.is_relation or field.many_to_many or field.one_to_many: + continue + except FieldDoesNotExist: + continue + # JOIN must happen at the first lookup. + first_lookup = lookups[0] + if ( + hasattr(field, "get_transform") + and hasattr(field, "get_lookup") + and field.get_transform(first_lookup) is None + and field.get_lookup(first_lookup) is None + ): + errors.append( + checks.Error( + "'constraints' refers to the joined field '%s'." + % LOOKUP_SEP.join([field_name] + lookups), + obj=cls, + id="models.E041", + ) + ) + errors.extend(cls._check_local_fields(fields, "constraints")) + return errors + + +############################################ +# HELPER FUNCTIONS (CURRIED MODEL METHODS) # +############################################ + +# ORDERING METHODS ######################### + + +def method_set_order(self, ordered_obj, id_list, using=None): + if using is None: + using = DEFAULT_DB_ALIAS + order_wrt = ordered_obj._meta.order_with_respect_to + filter_args = order_wrt.get_forward_related_filter(self) + ordered_obj.objects.db_manager(using).filter(**filter_args).bulk_update( + [ordered_obj(pk=pk, _order=order) for order, pk in enumerate(id_list)], + ["_order"], + ) + + +def method_get_order(self, ordered_obj): + order_wrt = ordered_obj._meta.order_with_respect_to + filter_args = order_wrt.get_forward_related_filter(self) + pk_name = ordered_obj._meta.pk.name + return ordered_obj.objects.filter(**filter_args).values_list(pk_name, flat=True) + + +def make_foreign_order_accessors(model, related_model): + setattr( + related_model, + "get_%s_order" % model.__name__.lower(), + partialmethod(method_get_order, model), + ) + setattr( + related_model, + "set_%s_order" % model.__name__.lower(), + partialmethod(method_set_order, model), + ) + + +######## +# MISC # +######## + + +def model_unpickle(model_id): + """Used to unpickle Model subclasses with deferred fields.""" + if isinstance(model_id, tuple): + model = apps.get_model(*model_id) + else: + # Backwards compat - the model was cached directly in earlier versions. + model = model_id + return model.__new__(model) + + +model_unpickle.__safe_for_unpickle__ = True diff --git a/venv/Lib/site-packages/django/db/models/constants.py b/venv/Lib/site-packages/django/db/models/constants.py new file mode 100644 index 000000000..a92fbf064 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/constants.py @@ -0,0 +1,6 @@ +""" +Constants used across the ORM in general. +""" + +# Separator used to split filter strings apart. +LOOKUP_SEP = "__" diff --git a/venv/Lib/site-packages/django/db/models/constraints.py b/venv/Lib/site-packages/django/db/models/constraints.py new file mode 100644 index 000000000..721e43ae5 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/constraints.py @@ -0,0 +1,267 @@ +from enum import Enum + +from django.db.models.expressions import ExpressionList, F +from django.db.models.indexes import IndexExpression +from django.db.models.query_utils import Q +from django.db.models.sql.query import Query + +__all__ = ["CheckConstraint", "Deferrable", "UniqueConstraint"] + + +class BaseConstraint: + def __init__(self, name): + self.name = name + + @property + def contains_expressions(self): + return False + + def constraint_sql(self, model, schema_editor): + raise NotImplementedError("This method must be implemented by a subclass.") + + def create_sql(self, model, schema_editor): + raise NotImplementedError("This method must be implemented by a subclass.") + + def remove_sql(self, model, schema_editor): + raise NotImplementedError("This method must be implemented by a subclass.") + + def deconstruct(self): + path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) + path = path.replace("django.db.models.constraints", "django.db.models") + return (path, (), {"name": self.name}) + + def clone(self): + _, args, kwargs = self.deconstruct() + return self.__class__(*args, **kwargs) + + +class CheckConstraint(BaseConstraint): + def __init__(self, *, check, name): + self.check = check + if not getattr(check, "conditional", False): + raise TypeError( + "CheckConstraint.check must be a Q instance or boolean expression." + ) + super().__init__(name) + + def _get_check_sql(self, model, schema_editor): + query = Query(model=model, alias_cols=False) + where = query.build_where(self.check) + compiler = query.get_compiler(connection=schema_editor.connection) + sql, params = where.as_sql(compiler, schema_editor.connection) + return sql % tuple(schema_editor.quote_value(p) for p in params) + + def constraint_sql(self, model, schema_editor): + check = self._get_check_sql(model, schema_editor) + return schema_editor._check_sql(self.name, check) + + def create_sql(self, model, schema_editor): + check = self._get_check_sql(model, schema_editor) + return schema_editor._create_check_sql(model, self.name, check) + + def remove_sql(self, model, schema_editor): + return schema_editor._delete_check_sql(model, self.name) + + def __repr__(self): + return "<%s: check=%s name=%s>" % ( + self.__class__.__qualname__, + self.check, + repr(self.name), + ) + + def __eq__(self, other): + if isinstance(other, CheckConstraint): + return self.name == other.name and self.check == other.check + return super().__eq__(other) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + kwargs["check"] = self.check + return path, args, kwargs + + +class Deferrable(Enum): + DEFERRED = "deferred" + IMMEDIATE = "immediate" + + # A similar format was proposed for Python 3.10. + def __repr__(self): + return f"{self.__class__.__qualname__}.{self._name_}" + + +class UniqueConstraint(BaseConstraint): + def __init__( + self, + *expressions, + fields=(), + name=None, + condition=None, + deferrable=None, + include=None, + opclasses=(), + ): + if not name: + raise ValueError("A unique constraint must be named.") + if not expressions and not fields: + raise ValueError( + "At least one field or expression is required to define a " + "unique constraint." + ) + if expressions and fields: + raise ValueError( + "UniqueConstraint.fields and expressions are mutually exclusive." + ) + if not isinstance(condition, (type(None), Q)): + raise ValueError("UniqueConstraint.condition must be a Q instance.") + if condition and deferrable: + raise ValueError("UniqueConstraint with conditions cannot be deferred.") + if include and deferrable: + raise ValueError("UniqueConstraint with include fields cannot be deferred.") + if opclasses and deferrable: + raise ValueError("UniqueConstraint with opclasses cannot be deferred.") + if expressions and deferrable: + raise ValueError("UniqueConstraint with expressions cannot be deferred.") + if expressions and opclasses: + raise ValueError( + "UniqueConstraint.opclasses cannot be used with expressions. " + "Use django.contrib.postgres.indexes.OpClass() instead." + ) + if not isinstance(deferrable, (type(None), Deferrable)): + raise ValueError( + "UniqueConstraint.deferrable must be a Deferrable instance." + ) + if not isinstance(include, (type(None), list, tuple)): + raise ValueError("UniqueConstraint.include must be a list or tuple.") + if not isinstance(opclasses, (list, tuple)): + raise ValueError("UniqueConstraint.opclasses must be a list or tuple.") + if opclasses and len(fields) != len(opclasses): + raise ValueError( + "UniqueConstraint.fields and UniqueConstraint.opclasses must " + "have the same number of elements." + ) + self.fields = tuple(fields) + self.condition = condition + self.deferrable = deferrable + self.include = tuple(include) if include else () + self.opclasses = opclasses + self.expressions = tuple( + F(expression) if isinstance(expression, str) else expression + for expression in expressions + ) + super().__init__(name) + + @property + def contains_expressions(self): + return bool(self.expressions) + + def _get_condition_sql(self, model, schema_editor): + if self.condition is None: + return None + query = Query(model=model, alias_cols=False) + where = query.build_where(self.condition) + compiler = query.get_compiler(connection=schema_editor.connection) + sql, params = where.as_sql(compiler, schema_editor.connection) + return sql % tuple(schema_editor.quote_value(p) for p in params) + + def _get_index_expressions(self, model, schema_editor): + if not self.expressions: + return None + index_expressions = [] + for expression in self.expressions: + index_expression = IndexExpression(expression) + index_expression.set_wrapper_classes(schema_editor.connection) + index_expressions.append(index_expression) + return ExpressionList(*index_expressions).resolve_expression( + Query(model, alias_cols=False), + ) + + def constraint_sql(self, model, schema_editor): + fields = [model._meta.get_field(field_name) for field_name in self.fields] + include = [ + model._meta.get_field(field_name).column for field_name in self.include + ] + condition = self._get_condition_sql(model, schema_editor) + expressions = self._get_index_expressions(model, schema_editor) + return schema_editor._unique_sql( + model, + fields, + self.name, + condition=condition, + deferrable=self.deferrable, + include=include, + opclasses=self.opclasses, + expressions=expressions, + ) + + def create_sql(self, model, schema_editor): + fields = [model._meta.get_field(field_name) for field_name in self.fields] + include = [ + model._meta.get_field(field_name).column for field_name in self.include + ] + condition = self._get_condition_sql(model, schema_editor) + expressions = self._get_index_expressions(model, schema_editor) + return schema_editor._create_unique_sql( + model, + fields, + self.name, + condition=condition, + deferrable=self.deferrable, + include=include, + opclasses=self.opclasses, + expressions=expressions, + ) + + def remove_sql(self, model, schema_editor): + condition = self._get_condition_sql(model, schema_editor) + include = [ + model._meta.get_field(field_name).column for field_name in self.include + ] + expressions = self._get_index_expressions(model, schema_editor) + return schema_editor._delete_unique_sql( + model, + self.name, + condition=condition, + deferrable=self.deferrable, + include=include, + opclasses=self.opclasses, + expressions=expressions, + ) + + def __repr__(self): + return "<%s:%s%s%s%s%s%s%s>" % ( + self.__class__.__qualname__, + "" if not self.fields else " fields=%s" % repr(self.fields), + "" if not self.expressions else " expressions=%s" % repr(self.expressions), + " name=%s" % repr(self.name), + "" if self.condition is None else " condition=%s" % self.condition, + "" if self.deferrable is None else " deferrable=%r" % self.deferrable, + "" if not self.include else " include=%s" % repr(self.include), + "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), + ) + + def __eq__(self, other): + if isinstance(other, UniqueConstraint): + return ( + self.name == other.name + and self.fields == other.fields + and self.condition == other.condition + and self.deferrable == other.deferrable + and self.include == other.include + and self.opclasses == other.opclasses + and self.expressions == other.expressions + ) + return super().__eq__(other) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fields: + kwargs["fields"] = self.fields + if self.condition: + kwargs["condition"] = self.condition + if self.deferrable: + kwargs["deferrable"] = self.deferrable + if self.include: + kwargs["include"] = self.include + if self.opclasses: + kwargs["opclasses"] = self.opclasses + return path, self.expressions, kwargs diff --git a/venv/Lib/site-packages/django/db/models/deletion.py b/venv/Lib/site-packages/django/db/models/deletion.py new file mode 100644 index 000000000..2d08da552 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/deletion.py @@ -0,0 +1,500 @@ +from collections import Counter, defaultdict +from functools import partial +from itertools import chain +from operator import attrgetter + +from django.db import IntegrityError, connections, transaction +from django.db.models import query_utils, signals, sql + + +class ProtectedError(IntegrityError): + def __init__(self, msg, protected_objects): + self.protected_objects = protected_objects + super().__init__(msg, protected_objects) + + +class RestrictedError(IntegrityError): + def __init__(self, msg, restricted_objects): + self.restricted_objects = restricted_objects + super().__init__(msg, restricted_objects) + + +def CASCADE(collector, field, sub_objs, using): + collector.collect( + sub_objs, + source=field.remote_field.model, + source_attr=field.name, + nullable=field.null, + fail_on_restricted=False, + ) + if field.null and not connections[using].features.can_defer_constraint_checks: + collector.add_field_update(field, None, sub_objs) + + +def PROTECT(collector, field, sub_objs, using): + raise ProtectedError( + "Cannot delete some instances of model '%s' because they are " + "referenced through a protected foreign key: '%s.%s'" + % ( + field.remote_field.model.__name__, + sub_objs[0].__class__.__name__, + field.name, + ), + sub_objs, + ) + + +def RESTRICT(collector, field, sub_objs, using): + collector.add_restricted_objects(field, sub_objs) + collector.add_dependency(field.remote_field.model, field.model) + + +def SET(value): + if callable(value): + + def set_on_delete(collector, field, sub_objs, using): + collector.add_field_update(field, value(), sub_objs) + + else: + + def set_on_delete(collector, field, sub_objs, using): + collector.add_field_update(field, value, sub_objs) + + set_on_delete.deconstruct = lambda: ("django.db.models.SET", (value,), {}) + return set_on_delete + + +def SET_NULL(collector, field, sub_objs, using): + collector.add_field_update(field, None, sub_objs) + + +def SET_DEFAULT(collector, field, sub_objs, using): + collector.add_field_update(field, field.get_default(), sub_objs) + + +def DO_NOTHING(collector, field, sub_objs, using): + pass + + +def get_candidate_relations_to_delete(opts): + # The candidate relations are the ones that come from N-1 and 1-1 relations. + # N-N (i.e., many-to-many) relations aren't candidates for deletion. + return ( + f + for f in opts.get_fields(include_hidden=True) + if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) + ) + + +class Collector: + def __init__(self, using): + self.using = using + # Initially, {model: {instances}}, later values become lists. + self.data = defaultdict(set) + # {model: {(field, value): {instances}}} + self.field_updates = defaultdict(partial(defaultdict, set)) + # {model: {field: {instances}}} + self.restricted_objects = defaultdict(partial(defaultdict, set)) + # fast_deletes is a list of queryset-likes that can be deleted without + # fetching the objects into memory. + self.fast_deletes = [] + + # Tracks deletion-order dependency for databases without transactions + # or ability to defer constraint checks. Only concrete model classes + # should be included, as the dependencies exist only between actual + # database tables; proxy models are represented here by their concrete + # parent. + self.dependencies = defaultdict(set) # {model: {models}} + + def add(self, objs, source=None, nullable=False, reverse_dependency=False): + """ + Add 'objs' to the collection of objects to be deleted. If the call is + the result of a cascade, 'source' should be the model that caused it, + and 'nullable' should be set to True if the relation can be null. + + Return a list of all objects that were not already collected. + """ + if not objs: + return [] + new_objs = [] + model = objs[0].__class__ + instances = self.data[model] + for obj in objs: + if obj not in instances: + new_objs.append(obj) + instances.update(new_objs) + # Nullable relationships can be ignored -- they are nulled out before + # deleting, and therefore do not affect the order in which objects have + # to be deleted. + if source is not None and not nullable: + self.add_dependency(source, model, reverse_dependency=reverse_dependency) + return new_objs + + def add_dependency(self, model, dependency, reverse_dependency=False): + if reverse_dependency: + model, dependency = dependency, model + self.dependencies[model._meta.concrete_model].add( + dependency._meta.concrete_model + ) + self.data.setdefault(dependency, self.data.default_factory()) + + def add_field_update(self, field, value, objs): + """ + Schedule a field update. 'objs' must be a homogeneous iterable + collection of model instances (e.g. a QuerySet). + """ + if not objs: + return + model = objs[0].__class__ + self.field_updates[model][field, value].update(objs) + + def add_restricted_objects(self, field, objs): + if objs: + model = objs[0].__class__ + self.restricted_objects[model][field].update(objs) + + def clear_restricted_objects_from_set(self, model, objs): + if model in self.restricted_objects: + self.restricted_objects[model] = { + field: items - objs + for field, items in self.restricted_objects[model].items() + } + + def clear_restricted_objects_from_queryset(self, model, qs): + if model in self.restricted_objects: + objs = set( + qs.filter( + pk__in=[ + obj.pk + for objs in self.restricted_objects[model].values() + for obj in objs + ] + ) + ) + self.clear_restricted_objects_from_set(model, objs) + + def _has_signal_listeners(self, model): + return signals.pre_delete.has_listeners( + model + ) or signals.post_delete.has_listeners(model) + + def can_fast_delete(self, objs, from_field=None): + """ + Determine if the objects in the given queryset-like or single object + can be fast-deleted. This can be done if there are no cascades, no + parents and no signal listeners for the object class. + + The 'from_field' tells where we are coming from - we need this to + determine if the objects are in fact to be deleted. Allow also + skipping parent -> child -> parent chain preventing fast delete of + the child. + """ + if from_field and from_field.remote_field.on_delete is not CASCADE: + return False + if hasattr(objs, "_meta"): + model = objs._meta.model + elif hasattr(objs, "model") and hasattr(objs, "_raw_delete"): + model = objs.model + else: + return False + if self._has_signal_listeners(model): + return False + # The use of from_field comes from the need to avoid cascade back to + # parent when parent delete is cascading to child. + opts = model._meta + return ( + all( + link == from_field + for link in opts.concrete_model._meta.parents.values() + ) + and + # Foreign keys pointing to this model. + all( + related.field.remote_field.on_delete is DO_NOTHING + for related in get_candidate_relations_to_delete(opts) + ) + and ( + # Something like generic foreign key. + not any( + hasattr(field, "bulk_related_objects") + for field in opts.private_fields + ) + ) + ) + + def get_del_batches(self, objs, fields): + """ + Return the objs in suitably sized batches for the used connection. + """ + field_names = [field.name for field in fields] + conn_batch_size = max( + connections[self.using].ops.bulk_batch_size(field_names, objs), 1 + ) + if len(objs) > conn_batch_size: + return [ + objs[i : i + conn_batch_size] + for i in range(0, len(objs), conn_batch_size) + ] + else: + return [objs] + + def collect( + self, + objs, + source=None, + nullable=False, + collect_related=True, + source_attr=None, + reverse_dependency=False, + keep_parents=False, + fail_on_restricted=True, + ): + """ + Add 'objs' to the collection of objects to be deleted as well as all + parent instances. 'objs' must be a homogeneous iterable collection of + model instances (e.g. a QuerySet). If 'collect_related' is True, + related objects will be handled by their respective on_delete handler. + + If the call is the result of a cascade, 'source' should be the model + that caused it and 'nullable' should be set to True, if the relation + can be null. + + If 'reverse_dependency' is True, 'source' will be deleted before the + current model, rather than after. (Needed for cascading to parent + models, the one case in which the cascade follows the forwards + direction of an FK rather than the reverse direction.) + + If 'keep_parents' is True, data of parent model's will be not deleted. + + If 'fail_on_restricted' is False, error won't be raised even if it's + prohibited to delete such objects due to RESTRICT, that defers + restricted object checking in recursive calls where the top-level call + may need to collect more objects to determine whether restricted ones + can be deleted. + """ + if self.can_fast_delete(objs): + self.fast_deletes.append(objs) + return + new_objs = self.add( + objs, source, nullable, reverse_dependency=reverse_dependency + ) + if not new_objs: + return + + model = new_objs[0].__class__ + + if not keep_parents: + # Recursively collect concrete model's parent models, but not their + # related objects. These will be found by meta.get_fields() + concrete_model = model._meta.concrete_model + for ptr in concrete_model._meta.parents.values(): + if ptr: + parent_objs = [getattr(obj, ptr.name) for obj in new_objs] + self.collect( + parent_objs, + source=model, + source_attr=ptr.remote_field.related_name, + collect_related=False, + reverse_dependency=True, + fail_on_restricted=False, + ) + if not collect_related: + return + + if keep_parents: + parents = set(model._meta.get_parent_list()) + model_fast_deletes = defaultdict(list) + protected_objects = defaultdict(list) + for related in get_candidate_relations_to_delete(model._meta): + # Preserve parent reverse relationships if keep_parents=True. + if keep_parents and related.model in parents: + continue + field = related.field + if field.remote_field.on_delete == DO_NOTHING: + continue + related_model = related.related_model + if self.can_fast_delete(related_model, from_field=field): + model_fast_deletes[related_model].append(field) + continue + batches = self.get_del_batches(new_objs, [field]) + for batch in batches: + sub_objs = self.related_objects(related_model, [field], batch) + # Non-referenced fields can be deferred if no signal receivers + # are connected for the related model as they'll never be + # exposed to the user. Skip field deferring when some + # relationships are select_related as interactions between both + # features are hard to get right. This should only happen in + # the rare cases where .related_objects is overridden anyway. + if not ( + sub_objs.query.select_related + or self._has_signal_listeners(related_model) + ): + referenced_fields = set( + chain.from_iterable( + (rf.attname for rf in rel.field.foreign_related_fields) + for rel in get_candidate_relations_to_delete( + related_model._meta + ) + ) + ) + sub_objs = sub_objs.only(*tuple(referenced_fields)) + if sub_objs: + try: + field.remote_field.on_delete(self, field, sub_objs, self.using) + except ProtectedError as error: + key = "'%s.%s'" % (field.model.__name__, field.name) + protected_objects[key] += error.protected_objects + if protected_objects: + raise ProtectedError( + "Cannot delete some instances of model %r because they are " + "referenced through protected foreign keys: %s." + % ( + model.__name__, + ", ".join(protected_objects), + ), + set(chain.from_iterable(protected_objects.values())), + ) + for related_model, related_fields in model_fast_deletes.items(): + batches = self.get_del_batches(new_objs, related_fields) + for batch in batches: + sub_objs = self.related_objects(related_model, related_fields, batch) + self.fast_deletes.append(sub_objs) + for field in model._meta.private_fields: + if hasattr(field, "bulk_related_objects"): + # It's something like generic foreign key. + sub_objs = field.bulk_related_objects(new_objs, self.using) + self.collect( + sub_objs, source=model, nullable=True, fail_on_restricted=False + ) + + if fail_on_restricted: + # Raise an error if collected restricted objects (RESTRICT) aren't + # candidates for deletion also collected via CASCADE. + for related_model, instances in self.data.items(): + self.clear_restricted_objects_from_set(related_model, instances) + for qs in self.fast_deletes: + self.clear_restricted_objects_from_queryset(qs.model, qs) + if self.restricted_objects.values(): + restricted_objects = defaultdict(list) + for related_model, fields in self.restricted_objects.items(): + for field, objs in fields.items(): + if objs: + key = "'%s.%s'" % (related_model.__name__, field.name) + restricted_objects[key] += objs + if restricted_objects: + raise RestrictedError( + "Cannot delete some instances of model %r because " + "they are referenced through restricted foreign keys: " + "%s." + % ( + model.__name__, + ", ".join(restricted_objects), + ), + set(chain.from_iterable(restricted_objects.values())), + ) + + def related_objects(self, related_model, related_fields, objs): + """ + Get a QuerySet of the related model to objs via related fields. + """ + predicate = query_utils.Q( + *((f"{related_field.name}__in", objs) for related_field in related_fields), + _connector=query_utils.Q.OR, + ) + return related_model._base_manager.using(self.using).filter(predicate) + + def instances_with_model(self): + for model, instances in self.data.items(): + for obj in instances: + yield model, obj + + def sort(self): + sorted_models = [] + concrete_models = set() + models = list(self.data) + while len(sorted_models) < len(models): + found = False + for model in models: + if model in sorted_models: + continue + dependencies = self.dependencies.get(model._meta.concrete_model) + if not (dependencies and dependencies.difference(concrete_models)): + sorted_models.append(model) + concrete_models.add(model._meta.concrete_model) + found = True + if not found: + return + self.data = {model: self.data[model] for model in sorted_models} + + def delete(self): + # sort instance collections + for model, instances in self.data.items(): + self.data[model] = sorted(instances, key=attrgetter("pk")) + + # if possible, bring the models in an order suitable for databases that + # don't support transactions or cannot defer constraint checks until the + # end of a transaction. + self.sort() + # number of objects deleted for each model label + deleted_counter = Counter() + + # Optimize for the case with a single obj and no dependencies + if len(self.data) == 1 and len(instances) == 1: + instance = list(instances)[0] + if self.can_fast_delete(instance): + with transaction.mark_for_rollback_on_error(self.using): + count = sql.DeleteQuery(model).delete_batch( + [instance.pk], self.using + ) + setattr(instance, model._meta.pk.attname, None) + return count, {model._meta.label: count} + + with transaction.atomic(using=self.using, savepoint=False): + # send pre_delete signals + for model, obj in self.instances_with_model(): + if not model._meta.auto_created: + signals.pre_delete.send( + sender=model, instance=obj, using=self.using + ) + + # fast deletes + for qs in self.fast_deletes: + count = qs._raw_delete(using=self.using) + if count: + deleted_counter[qs.model._meta.label] += count + + # update fields + for model, instances_for_fieldvalues in self.field_updates.items(): + for (field, value), instances in instances_for_fieldvalues.items(): + query = sql.UpdateQuery(model) + query.update_batch( + [obj.pk for obj in instances], {field.name: value}, self.using + ) + + # reverse instance collections + for instances in self.data.values(): + instances.reverse() + + # delete instances + for model, instances in self.data.items(): + query = sql.DeleteQuery(model) + pk_list = [obj.pk for obj in instances] + count = query.delete_batch(pk_list, self.using) + if count: + deleted_counter[model._meta.label] += count + + if not model._meta.auto_created: + for obj in instances: + signals.post_delete.send( + sender=model, instance=obj, using=self.using + ) + + # update collected instances + for instances_for_fieldvalues in self.field_updates.values(): + for (field, value), instances in instances_for_fieldvalues.items(): + for obj in instances: + setattr(obj, field.attname, value) + for model, instances in self.data.items(): + for instance in instances: + setattr(instance, model._meta.pk.attname, None) + return sum(deleted_counter.values()), dict(deleted_counter) diff --git a/venv/Lib/site-packages/django/db/models/enums.py b/venv/Lib/site-packages/django/db/models/enums.py new file mode 100644 index 000000000..9a7a2bb70 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/enums.py @@ -0,0 +1,92 @@ +import enum +from types import DynamicClassAttribute + +from django.utils.functional import Promise + +__all__ = ["Choices", "IntegerChoices", "TextChoices"] + + +class ChoicesMeta(enum.EnumMeta): + """A metaclass for creating a enum choices.""" + + def __new__(metacls, classname, bases, classdict, **kwds): + labels = [] + for key in classdict._member_names: + value = classdict[key] + if ( + isinstance(value, (list, tuple)) + and len(value) > 1 + and isinstance(value[-1], (Promise, str)) + ): + *value, label = value + value = tuple(value) + else: + label = key.replace("_", " ").title() + labels.append(label) + # Use dict.__setitem__() to suppress defenses against double + # assignment in enum's classdict. + dict.__setitem__(classdict, key, value) + cls = super().__new__(metacls, classname, bases, classdict, **kwds) + for member, label in zip(cls.__members__.values(), labels): + member._label_ = label + return enum.unique(cls) + + def __contains__(cls, member): + if not isinstance(member, enum.Enum): + # Allow non-enums to match against member values. + return any(x.value == member for x in cls) + return super().__contains__(member) + + @property + def names(cls): + empty = ["__empty__"] if hasattr(cls, "__empty__") else [] + return empty + [member.name for member in cls] + + @property + def choices(cls): + empty = [(None, cls.__empty__)] if hasattr(cls, "__empty__") else [] + return empty + [(member.value, member.label) for member in cls] + + @property + def labels(cls): + return [label for _, label in cls.choices] + + @property + def values(cls): + return [value for value, _ in cls.choices] + + +class Choices(enum.Enum, metaclass=ChoicesMeta): + """Class for creating enumerated choices.""" + + @DynamicClassAttribute + def label(self): + return self._label_ + + @property + def do_not_call_in_templates(self): + return True + + def __str__(self): + """ + Use value when cast to str, so that Choices set as model instance + attributes are rendered as expected in templates and similar contexts. + """ + return str(self.value) + + # A similar format was proposed for Python 3.10. + def __repr__(self): + return f"{self.__class__.__qualname__}.{self._name_}" + + +class IntegerChoices(int, Choices): + """Class for creating enumerated integer choices.""" + + pass + + +class TextChoices(str, Choices): + """Class for creating enumerated string choices.""" + + def _generate_next_value_(name, start, count, last_values): + return name diff --git a/venv/Lib/site-packages/django/db/models/expressions.py b/venv/Lib/site-packages/django/db/models/expressions.py new file mode 100644 index 000000000..4c5f13243 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/expressions.py @@ -0,0 +1,1595 @@ +import copy +import datetime +import functools +import inspect +from decimal import Decimal +from uuid import UUID + +from django.core.exceptions import EmptyResultSet, FieldError +from django.db import DatabaseError, NotSupportedError, connection +from django.db.models import fields +from django.db.models.constants import LOOKUP_SEP +from django.db.models.query_utils import Q +from django.utils.deconstruct import deconstructible +from django.utils.functional import cached_property +from django.utils.hashable import make_hashable + + +class SQLiteNumericMixin: + """ + Some expressions with output_field=DecimalField() must be cast to + numeric to be properly filtered. + """ + + def as_sqlite(self, compiler, connection, **extra_context): + sql, params = self.as_sql(compiler, connection, **extra_context) + try: + if self.output_field.get_internal_type() == "DecimalField": + sql = "CAST(%s AS NUMERIC)" % sql + except FieldError: + pass + return sql, params + + +class Combinable: + """ + Provide the ability to combine one or two objects with + some connector. For example F('foo') + F('bar'). + """ + + # Arithmetic connectors + ADD = "+" + SUB = "-" + MUL = "*" + DIV = "/" + POW = "^" + # The following is a quoted % operator - it is quoted because it can be + # used in strings that also have parameter substitution. + MOD = "%%" + + # Bitwise operators - note that these are generated by .bitand() + # and .bitor(), the '&' and '|' are reserved for boolean operator + # usage. + BITAND = "&" + BITOR = "|" + BITLEFTSHIFT = "<<" + BITRIGHTSHIFT = ">>" + BITXOR = "#" + + def _combine(self, other, connector, reversed): + if not hasattr(other, "resolve_expression"): + # everything must be resolvable to an expression + other = Value(other) + + if reversed: + return CombinedExpression(other, connector, self) + return CombinedExpression(self, connector, other) + + ############# + # OPERATORS # + ############# + + def __neg__(self): + return self._combine(-1, self.MUL, False) + + def __add__(self, other): + return self._combine(other, self.ADD, False) + + def __sub__(self, other): + return self._combine(other, self.SUB, False) + + def __mul__(self, other): + return self._combine(other, self.MUL, False) + + def __truediv__(self, other): + return self._combine(other, self.DIV, False) + + def __mod__(self, other): + return self._combine(other, self.MOD, False) + + def __pow__(self, other): + return self._combine(other, self.POW, False) + + def __and__(self, other): + if getattr(self, "conditional", False) and getattr(other, "conditional", False): + return Q(self) & Q(other) + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def bitand(self, other): + return self._combine(other, self.BITAND, False) + + def bitleftshift(self, other): + return self._combine(other, self.BITLEFTSHIFT, False) + + def bitrightshift(self, other): + return self._combine(other, self.BITRIGHTSHIFT, False) + + def bitxor(self, other): + return self._combine(other, self.BITXOR, False) + + def __or__(self, other): + if getattr(self, "conditional", False) and getattr(other, "conditional", False): + return Q(self) | Q(other) + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def bitor(self, other): + return self._combine(other, self.BITOR, False) + + def __radd__(self, other): + return self._combine(other, self.ADD, True) + + def __rsub__(self, other): + return self._combine(other, self.SUB, True) + + def __rmul__(self, other): + return self._combine(other, self.MUL, True) + + def __rtruediv__(self, other): + return self._combine(other, self.DIV, True) + + def __rmod__(self, other): + return self._combine(other, self.MOD, True) + + def __rpow__(self, other): + return self._combine(other, self.POW, True) + + def __rand__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def __ror__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + +class BaseExpression: + """Base class for all query expressions.""" + + empty_result_set_value = NotImplemented + # aggregate specific fields + is_summary = False + _output_field_resolved_to_none = False + # Can the expression be used in a WHERE clause? + filterable = True + # Can the expression can be used as a source expression in Window? + window_compatible = False + + def __init__(self, output_field=None): + if output_field is not None: + self.output_field = output_field + + def __getstate__(self): + state = self.__dict__.copy() + state.pop("convert_value", None) + return state + + def get_db_converters(self, connection): + return ( + [] + if self.convert_value is self._convert_value_noop + else [self.convert_value] + ) + self.output_field.get_db_converters(connection) + + def get_source_expressions(self): + return [] + + def set_source_expressions(self, exprs): + assert not exprs + + def _parse_expressions(self, *expressions): + return [ + arg + if hasattr(arg, "resolve_expression") + else (F(arg) if isinstance(arg, str) else Value(arg)) + for arg in expressions + ] + + def as_sql(self, compiler, connection): + """ + Responsible for returning a (sql, [params]) tuple to be included + in the current query. + + Different backends can provide their own implementation, by + providing an `as_{vendor}` method and patching the Expression: + + ``` + def override_as_sql(self, compiler, connection): + # custom logic + return super().as_sql(compiler, connection) + setattr(Expression, 'as_' + connection.vendor, override_as_sql) + ``` + + Arguments: + * compiler: the query compiler responsible for generating the query. + Must have a compile method, returning a (sql, [params]) tuple. + Calling compiler(value) will return a quoted `value`. + + * connection: the database connection used for the current query. + + Return: (sql, params) + Where `sql` is a string containing ordered sql parameters to be + replaced with the elements of the list `params`. + """ + raise NotImplementedError("Subclasses must implement as_sql()") + + @cached_property + def contains_aggregate(self): + return any( + expr and expr.contains_aggregate for expr in self.get_source_expressions() + ) + + @cached_property + def contains_over_clause(self): + return any( + expr and expr.contains_over_clause for expr in self.get_source_expressions() + ) + + @cached_property + def contains_column_references(self): + return any( + expr and expr.contains_column_references + for expr in self.get_source_expressions() + ) + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + """ + Provide the chance to do any preprocessing or validation before being + added to the query. + + Arguments: + * query: the backend query implementation + * allow_joins: boolean allowing or denying use of joins + in this query + * reuse: a set of reusable joins for multijoins + * summarize: a terminal aggregate clause + * for_save: whether this expression about to be used in a save or update + + Return: an Expression to be added to the query. + """ + c = self.copy() + c.is_summary = summarize + c.set_source_expressions( + [ + expr.resolve_expression(query, allow_joins, reuse, summarize) + if expr + else None + for expr in c.get_source_expressions() + ] + ) + return c + + @property + def conditional(self): + return isinstance(self.output_field, fields.BooleanField) + + @property + def field(self): + return self.output_field + + @cached_property + def output_field(self): + """Return the output type of this expressions.""" + output_field = self._resolve_output_field() + if output_field is None: + self._output_field_resolved_to_none = True + raise FieldError("Cannot resolve expression type, unknown output_field") + return output_field + + @cached_property + def _output_field_or_none(self): + """ + Return the output field of this expression, or None if + _resolve_output_field() didn't return an output type. + """ + try: + return self.output_field + except FieldError: + if not self._output_field_resolved_to_none: + raise + + def _resolve_output_field(self): + """ + Attempt to infer the output type of the expression. If the output + fields of all source fields match then, simply infer the same type + here. This isn't always correct, but it makes sense most of the time. + + Consider the difference between `2 + 2` and `2 / 3`. Inferring + the type here is a convenience for the common case. The user should + supply their own output_field with more complex computations. + + If a source's output field resolves to None, exclude it from this check. + If all sources are None, then an error is raised higher up the stack in + the output_field property. + """ + sources_iter = ( + source for source in self.get_source_fields() if source is not None + ) + for output_field in sources_iter: + for source in sources_iter: + if not isinstance(output_field, source.__class__): + raise FieldError( + "Expression contains mixed types: %s, %s. You must " + "set output_field." + % ( + output_field.__class__.__name__, + source.__class__.__name__, + ) + ) + return output_field + + @staticmethod + def _convert_value_noop(value, expression, connection): + return value + + @cached_property + def convert_value(self): + """ + Expressions provide their own converters because users have the option + of manually specifying the output_field which may be a different type + from the one the database returns. + """ + field = self.output_field + internal_type = field.get_internal_type() + if internal_type == "FloatField": + return ( + lambda value, expression, connection: None + if value is None + else float(value) + ) + elif internal_type.endswith("IntegerField"): + return ( + lambda value, expression, connection: None + if value is None + else int(value) + ) + elif internal_type == "DecimalField": + return ( + lambda value, expression, connection: None + if value is None + else Decimal(value) + ) + return self._convert_value_noop + + def get_lookup(self, lookup): + return self.output_field.get_lookup(lookup) + + def get_transform(self, name): + return self.output_field.get_transform(name) + + def relabeled_clone(self, change_map): + clone = self.copy() + clone.set_source_expressions( + [ + e.relabeled_clone(change_map) if e is not None else None + for e in self.get_source_expressions() + ] + ) + return clone + + def copy(self): + return copy.copy(self) + + def get_group_by_cols(self, alias=None): + if not self.contains_aggregate: + return [self] + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + def get_source_fields(self): + """Return the underlying field types used by this aggregate.""" + return [e._output_field_or_none for e in self.get_source_expressions()] + + def asc(self, **kwargs): + return OrderBy(self, **kwargs) + + def desc(self, **kwargs): + return OrderBy(self, descending=True, **kwargs) + + def reverse_ordering(self): + return self + + def flatten(self): + """ + Recursively yield this expression and all subexpressions, in + depth-first order. + """ + yield self + for expr in self.get_source_expressions(): + if expr: + if hasattr(expr, "flatten"): + yield from expr.flatten() + else: + yield expr + + def select_format(self, compiler, sql, params): + """ + Custom format for select clauses. For example, EXISTS expressions need + to be wrapped in CASE WHEN on Oracle. + """ + if hasattr(self.output_field, "select_format"): + return self.output_field.select_format(compiler, sql, params) + return sql, params + + +@deconstructible +class Expression(BaseExpression, Combinable): + """An expression that can be combined with other expressions.""" + + @cached_property + def identity(self): + constructor_signature = inspect.signature(self.__init__) + args, kwargs = self._constructor_args + signature = constructor_signature.bind_partial(*args, **kwargs) + signature.apply_defaults() + arguments = signature.arguments.items() + identity = [self.__class__] + for arg, value in arguments: + if isinstance(value, fields.Field): + if value.name and value.model: + value = (value.model._meta.label, value.name) + else: + value = type(value) + else: + value = make_hashable(value) + identity.append((arg, value)) + return tuple(identity) + + def __eq__(self, other): + if not isinstance(other, Expression): + return NotImplemented + return other.identity == self.identity + + def __hash__(self): + return hash(self.identity) + + +_connector_combinators = { + connector: [ + (fields.IntegerField, fields.IntegerField, fields.IntegerField), + (fields.IntegerField, fields.DecimalField, fields.DecimalField), + (fields.DecimalField, fields.IntegerField, fields.DecimalField), + (fields.IntegerField, fields.FloatField, fields.FloatField), + (fields.FloatField, fields.IntegerField, fields.FloatField), + ] + for connector in (Combinable.ADD, Combinable.SUB, Combinable.MUL, Combinable.DIV) +} + + +@functools.lru_cache(maxsize=128) +def _resolve_combined_type(connector, lhs_type, rhs_type): + combinators = _connector_combinators.get(connector, ()) + for combinator_lhs_type, combinator_rhs_type, combined_type in combinators: + if issubclass(lhs_type, combinator_lhs_type) and issubclass( + rhs_type, combinator_rhs_type + ): + return combined_type + + +class CombinedExpression(SQLiteNumericMixin, Expression): + def __init__(self, lhs, connector, rhs, output_field=None): + super().__init__(output_field=output_field) + self.connector = connector + self.lhs = lhs + self.rhs = rhs + + def __repr__(self): + return "<{}: {}>".format(self.__class__.__name__, self) + + def __str__(self): + return "{} {} {}".format(self.lhs, self.connector, self.rhs) + + def get_source_expressions(self): + return [self.lhs, self.rhs] + + def set_source_expressions(self, exprs): + self.lhs, self.rhs = exprs + + def _resolve_output_field(self): + try: + return super()._resolve_output_field() + except FieldError: + combined_type = _resolve_combined_type( + self.connector, + type(self.lhs.output_field), + type(self.rhs.output_field), + ) + if combined_type is None: + raise + return combined_type() + + def as_sql(self, compiler, connection): + expressions = [] + expression_params = [] + sql, params = compiler.compile(self.lhs) + expressions.append(sql) + expression_params.extend(params) + sql, params = compiler.compile(self.rhs) + expressions.append(sql) + expression_params.extend(params) + # order of precedence + expression_wrapper = "(%s)" + sql = connection.ops.combine_expression(self.connector, expressions) + return expression_wrapper % sql, expression_params + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + lhs = self.lhs.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + rhs = self.rhs.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + if not isinstance(self, (DurationExpression, TemporalSubtraction)): + try: + lhs_type = lhs.output_field.get_internal_type() + except (AttributeError, FieldError): + lhs_type = None + try: + rhs_type = rhs.output_field.get_internal_type() + except (AttributeError, FieldError): + rhs_type = None + if "DurationField" in {lhs_type, rhs_type} and lhs_type != rhs_type: + return DurationExpression( + self.lhs, self.connector, self.rhs + ).resolve_expression( + query, + allow_joins, + reuse, + summarize, + for_save, + ) + datetime_fields = {"DateField", "DateTimeField", "TimeField"} + if ( + self.connector == self.SUB + and lhs_type in datetime_fields + and lhs_type == rhs_type + ): + return TemporalSubtraction(self.lhs, self.rhs).resolve_expression( + query, + allow_joins, + reuse, + summarize, + for_save, + ) + c = self.copy() + c.is_summary = summarize + c.lhs = lhs + c.rhs = rhs + return c + + +class DurationExpression(CombinedExpression): + def compile(self, side, compiler, connection): + try: + output = side.output_field + except FieldError: + pass + else: + if output.get_internal_type() == "DurationField": + sql, params = compiler.compile(side) + return connection.ops.format_for_duration_arithmetic(sql), params + return compiler.compile(side) + + def as_sql(self, compiler, connection): + if connection.features.has_native_duration_field: + return super().as_sql(compiler, connection) + connection.ops.check_expression_support(self) + expressions = [] + expression_params = [] + sql, params = self.compile(self.lhs, compiler, connection) + expressions.append(sql) + expression_params.extend(params) + sql, params = self.compile(self.rhs, compiler, connection) + expressions.append(sql) + expression_params.extend(params) + # order of precedence + expression_wrapper = "(%s)" + sql = connection.ops.combine_duration_expression(self.connector, expressions) + return expression_wrapper % sql, expression_params + + def as_sqlite(self, compiler, connection, **extra_context): + sql, params = self.as_sql(compiler, connection, **extra_context) + if self.connector in {Combinable.MUL, Combinable.DIV}: + try: + lhs_type = self.lhs.output_field.get_internal_type() + rhs_type = self.rhs.output_field.get_internal_type() + except (AttributeError, FieldError): + pass + else: + allowed_fields = { + "DecimalField", + "DurationField", + "FloatField", + "IntegerField", + } + if lhs_type not in allowed_fields or rhs_type not in allowed_fields: + raise DatabaseError( + f"Invalid arguments for operator {self.connector}." + ) + return sql, params + + +class TemporalSubtraction(CombinedExpression): + output_field = fields.DurationField() + + def __init__(self, lhs, rhs): + super().__init__(lhs, self.SUB, rhs) + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + lhs = compiler.compile(self.lhs) + rhs = compiler.compile(self.rhs) + return connection.ops.subtract_temporals( + self.lhs.output_field.get_internal_type(), lhs, rhs + ) + + +@deconstructible +class F(Combinable): + """An object capable of resolving references to existing query objects.""" + + def __init__(self, name): + """ + Arguments: + * name: the name of the field this expression references + """ + self.name = name + + def __repr__(self): + return "{}({})".format(self.__class__.__name__, self.name) + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + return query.resolve_ref(self.name, allow_joins, reuse, summarize) + + def asc(self, **kwargs): + return OrderBy(self, **kwargs) + + def desc(self, **kwargs): + return OrderBy(self, descending=True, **kwargs) + + def __eq__(self, other): + return self.__class__ == other.__class__ and self.name == other.name + + def __hash__(self): + return hash(self.name) + + +class ResolvedOuterRef(F): + """ + An object that contains a reference to an outer query. + + In this case, the reference to the outer query has been resolved because + the inner query has been used as a subquery. + """ + + contains_aggregate = False + + def as_sql(self, *args, **kwargs): + raise ValueError( + "This queryset contains a reference to an outer query and may " + "only be used in a subquery." + ) + + def resolve_expression(self, *args, **kwargs): + col = super().resolve_expression(*args, **kwargs) + # FIXME: Rename possibly_multivalued to multivalued and fix detection + # for non-multivalued JOINs (e.g. foreign key fields). This should take + # into account only many-to-many and one-to-many relationships. + col.possibly_multivalued = LOOKUP_SEP in self.name + return col + + def relabeled_clone(self, relabels): + return self + + def get_group_by_cols(self, alias=None): + return [] + + +class OuterRef(F): + contains_aggregate = False + + def resolve_expression(self, *args, **kwargs): + if isinstance(self.name, self.__class__): + return self.name + return ResolvedOuterRef(self.name) + + def relabeled_clone(self, relabels): + return self + + +class Func(SQLiteNumericMixin, Expression): + """An SQL function call.""" + + function = None + template = "%(function)s(%(expressions)s)" + arg_joiner = ", " + arity = None # The number of arguments the function accepts. + + def __init__(self, *expressions, output_field=None, **extra): + if self.arity is not None and len(expressions) != self.arity: + raise TypeError( + "'%s' takes exactly %s %s (%s given)" + % ( + self.__class__.__name__, + self.arity, + "argument" if self.arity == 1 else "arguments", + len(expressions), + ) + ) + super().__init__(output_field=output_field) + self.source_expressions = self._parse_expressions(*expressions) + self.extra = extra + + def __repr__(self): + args = self.arg_joiner.join(str(arg) for arg in self.source_expressions) + extra = {**self.extra, **self._get_repr_options()} + if extra: + extra = ", ".join( + str(key) + "=" + str(val) for key, val in sorted(extra.items()) + ) + return "{}({}, {})".format(self.__class__.__name__, args, extra) + return "{}({})".format(self.__class__.__name__, args) + + def _get_repr_options(self): + """Return a dict of extra __init__() options to include in the repr.""" + return {} + + def get_source_expressions(self): + return self.source_expressions + + def set_source_expressions(self, exprs): + self.source_expressions = exprs + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = self.copy() + c.is_summary = summarize + for pos, arg in enumerate(c.source_expressions): + c.source_expressions[pos] = arg.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + return c + + def as_sql( + self, + compiler, + connection, + function=None, + template=None, + arg_joiner=None, + **extra_context, + ): + connection.ops.check_expression_support(self) + sql_parts = [] + params = [] + for arg in self.source_expressions: + try: + arg_sql, arg_params = compiler.compile(arg) + except EmptyResultSet: + empty_result_set_value = getattr( + arg, "empty_result_set_value", NotImplemented + ) + if empty_result_set_value is NotImplemented: + raise + arg_sql, arg_params = compiler.compile(Value(empty_result_set_value)) + sql_parts.append(arg_sql) + params.extend(arg_params) + data = {**self.extra, **extra_context} + # Use the first supplied value in this order: the parameter to this + # method, a value supplied in __init__()'s **extra (the value in + # `data`), or the value defined on the class. + if function is not None: + data["function"] = function + else: + data.setdefault("function", self.function) + template = template or data.get("template", self.template) + arg_joiner = arg_joiner or data.get("arg_joiner", self.arg_joiner) + data["expressions"] = data["field"] = arg_joiner.join(sql_parts) + return template % data, params + + def copy(self): + copy = super().copy() + copy.source_expressions = self.source_expressions[:] + copy.extra = self.extra.copy() + return copy + + +class Value(SQLiteNumericMixin, Expression): + """Represent a wrapped value as a node within an expression.""" + + # Provide a default value for `for_save` in order to allow unresolved + # instances to be compiled until a decision is taken in #25425. + for_save = False + + def __init__(self, value, output_field=None): + """ + Arguments: + * value: the value this expression represents. The value will be + added into the sql parameter list and properly quoted. + + * output_field: an instance of the model field type that this + expression will return, such as IntegerField() or CharField(). + """ + super().__init__(output_field=output_field) + self.value = value + + def __repr__(self): + return f"{self.__class__.__name__}({self.value!r})" + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + val = self.value + output_field = self._output_field_or_none + if output_field is not None: + if self.for_save: + val = output_field.get_db_prep_save(val, connection=connection) + else: + val = output_field.get_db_prep_value(val, connection=connection) + if hasattr(output_field, "get_placeholder"): + return output_field.get_placeholder(val, compiler, connection), [val] + if val is None: + # cx_Oracle does not always convert None to the appropriate + # NULL type (like in case expressions using numbers), so we + # use a literal SQL NULL + return "NULL", [] + return "%s", [val] + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + c.for_save = for_save + return c + + def get_group_by_cols(self, alias=None): + return [] + + def _resolve_output_field(self): + if isinstance(self.value, str): + return fields.CharField() + if isinstance(self.value, bool): + return fields.BooleanField() + if isinstance(self.value, int): + return fields.IntegerField() + if isinstance(self.value, float): + return fields.FloatField() + if isinstance(self.value, datetime.datetime): + return fields.DateTimeField() + if isinstance(self.value, datetime.date): + return fields.DateField() + if isinstance(self.value, datetime.time): + return fields.TimeField() + if isinstance(self.value, datetime.timedelta): + return fields.DurationField() + if isinstance(self.value, Decimal): + return fields.DecimalField() + if isinstance(self.value, bytes): + return fields.BinaryField() + if isinstance(self.value, UUID): + return fields.UUIDField() + + @property + def empty_result_set_value(self): + return self.value + + +class RawSQL(Expression): + def __init__(self, sql, params, output_field=None): + if output_field is None: + output_field = fields.Field() + self.sql, self.params = sql, params + super().__init__(output_field=output_field) + + def __repr__(self): + return "{}({}, {})".format(self.__class__.__name__, self.sql, self.params) + + def as_sql(self, compiler, connection): + return "(%s)" % self.sql, self.params + + def get_group_by_cols(self, alias=None): + return [self] + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + # Resolve parents fields used in raw SQL. + for parent in query.model._meta.get_parent_list(): + for parent_field in parent._meta.local_fields: + _, column_name = parent_field.get_attname_column() + if column_name.lower() in self.sql.lower(): + query.resolve_ref(parent_field.name, allow_joins, reuse, summarize) + break + return super().resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + + +class Star(Expression): + def __repr__(self): + return "'*'" + + def as_sql(self, compiler, connection): + return "*", [] + + +class Col(Expression): + + contains_column_references = True + possibly_multivalued = False + + def __init__(self, alias, target, output_field=None): + if output_field is None: + output_field = target + super().__init__(output_field=output_field) + self.alias, self.target = alias, target + + def __repr__(self): + alias, target = self.alias, self.target + identifiers = (alias, str(target)) if alias else (str(target),) + return "{}({})".format(self.__class__.__name__, ", ".join(identifiers)) + + def as_sql(self, compiler, connection): + alias, column = self.alias, self.target.column + identifiers = (alias, column) if alias else (column,) + sql = ".".join(map(compiler.quote_name_unless_alias, identifiers)) + return sql, [] + + def relabeled_clone(self, relabels): + if self.alias is None: + return self + return self.__class__( + relabels.get(self.alias, self.alias), self.target, self.output_field + ) + + def get_group_by_cols(self, alias=None): + return [self] + + def get_db_converters(self, connection): + if self.target == self.output_field: + return self.output_field.get_db_converters(connection) + return self.output_field.get_db_converters( + connection + ) + self.target.get_db_converters(connection) + + +class Ref(Expression): + """ + Reference to column alias of the query. For example, Ref('sum_cost') in + qs.annotate(sum_cost=Sum('cost')) query. + """ + + def __init__(self, refs, source): + super().__init__() + self.refs, self.source = refs, source + + def __repr__(self): + return "{}({}, {})".format(self.__class__.__name__, self.refs, self.source) + + def get_source_expressions(self): + return [self.source] + + def set_source_expressions(self, exprs): + (self.source,) = exprs + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + # The sub-expression `source` has already been resolved, as this is + # just a reference to the name of `source`. + return self + + def relabeled_clone(self, relabels): + return self + + def as_sql(self, compiler, connection): + return connection.ops.quote_name(self.refs), [] + + def get_group_by_cols(self, alias=None): + return [self] + + +class ExpressionList(Func): + """ + An expression containing multiple expressions. Can be used to provide a + list of expressions as an argument to another expression, like an + ordering clause. + """ + + template = "%(expressions)s" + + def __init__(self, *expressions, **extra): + if not expressions: + raise ValueError( + "%s requires at least one expression." % self.__class__.__name__ + ) + super().__init__(*expressions, **extra) + + def __str__(self): + return self.arg_joiner.join(str(arg) for arg in self.source_expressions) + + def as_sqlite(self, compiler, connection, **extra_context): + # Casting to numeric is unnecessary. + return self.as_sql(compiler, connection, **extra_context) + + +class ExpressionWrapper(Expression): + """ + An expression that can wrap another expression so that it can provide + extra context to the inner expression, such as the output_field. + """ + + def __init__(self, expression, output_field): + super().__init__(output_field=output_field) + self.expression = expression + + def set_source_expressions(self, exprs): + self.expression = exprs[0] + + def get_source_expressions(self): + return [self.expression] + + def get_group_by_cols(self, alias=None): + if isinstance(self.expression, Expression): + expression = self.expression.copy() + expression.output_field = self.output_field + return expression.get_group_by_cols(alias=alias) + # For non-expressions e.g. an SQL WHERE clause, the entire + # `expression` must be included in the GROUP BY clause. + return super().get_group_by_cols() + + def as_sql(self, compiler, connection): + return compiler.compile(self.expression) + + def __repr__(self): + return "{}({})".format(self.__class__.__name__, self.expression) + + +class When(Expression): + template = "WHEN %(condition)s THEN %(result)s" + # This isn't a complete conditional expression, must be used in Case(). + conditional = False + + def __init__(self, condition=None, then=None, **lookups): + if lookups: + if condition is None: + condition, lookups = Q(**lookups), None + elif getattr(condition, "conditional", False): + condition, lookups = Q(condition, **lookups), None + if condition is None or not getattr(condition, "conditional", False) or lookups: + raise TypeError( + "When() supports a Q object, a boolean expression, or lookups " + "as a condition." + ) + if isinstance(condition, Q) and not condition: + raise ValueError("An empty Q() can't be used as a When() condition.") + super().__init__(output_field=None) + self.condition = condition + self.result = self._parse_expressions(then)[0] + + def __str__(self): + return "WHEN %r THEN %r" % (self.condition, self.result) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_source_expressions(self): + return [self.condition, self.result] + + def set_source_expressions(self, exprs): + self.condition, self.result = exprs + + def get_source_fields(self): + # We're only interested in the fields of the result expressions. + return [self.result._output_field_or_none] + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = self.copy() + c.is_summary = summarize + if hasattr(c.condition, "resolve_expression"): + c.condition = c.condition.resolve_expression( + query, allow_joins, reuse, summarize, False + ) + c.result = c.result.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + return c + + def as_sql(self, compiler, connection, template=None, **extra_context): + connection.ops.check_expression_support(self) + template_params = extra_context + sql_params = [] + condition_sql, condition_params = compiler.compile(self.condition) + template_params["condition"] = condition_sql + sql_params.extend(condition_params) + result_sql, result_params = compiler.compile(self.result) + template_params["result"] = result_sql + sql_params.extend(result_params) + template = template or self.template + return template % template_params, sql_params + + def get_group_by_cols(self, alias=None): + # This is not a complete expression and cannot be used in GROUP BY. + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + +class Case(Expression): + """ + An SQL searched CASE expression: + + CASE + WHEN n > 0 + THEN 'positive' + WHEN n < 0 + THEN 'negative' + ELSE 'zero' + END + """ + + template = "CASE %(cases)s ELSE %(default)s END" + case_joiner = " " + + def __init__(self, *cases, default=None, output_field=None, **extra): + if not all(isinstance(case, When) for case in cases): + raise TypeError("Positional arguments must all be When objects.") + super().__init__(output_field) + self.cases = list(cases) + self.default = self._parse_expressions(default)[0] + self.extra = extra + + def __str__(self): + return "CASE %s, ELSE %r" % ( + ", ".join(str(c) for c in self.cases), + self.default, + ) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_source_expressions(self): + return self.cases + [self.default] + + def set_source_expressions(self, exprs): + *self.cases, self.default = exprs + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = self.copy() + c.is_summary = summarize + for pos, case in enumerate(c.cases): + c.cases[pos] = case.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + c.default = c.default.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + return c + + def copy(self): + c = super().copy() + c.cases = c.cases[:] + return c + + def as_sql( + self, compiler, connection, template=None, case_joiner=None, **extra_context + ): + connection.ops.check_expression_support(self) + if not self.cases: + return compiler.compile(self.default) + template_params = {**self.extra, **extra_context} + case_parts = [] + sql_params = [] + for case in self.cases: + try: + case_sql, case_params = compiler.compile(case) + except EmptyResultSet: + continue + case_parts.append(case_sql) + sql_params.extend(case_params) + default_sql, default_params = compiler.compile(self.default) + if not case_parts: + return default_sql, default_params + case_joiner = case_joiner or self.case_joiner + template_params["cases"] = case_joiner.join(case_parts) + template_params["default"] = default_sql + sql_params.extend(default_params) + template = template or template_params.get("template", self.template) + sql = template % template_params + if self._output_field_or_none is not None: + sql = connection.ops.unification_cast_sql(self.output_field) % sql + return sql, sql_params + + def get_group_by_cols(self, alias=None): + if not self.cases: + return self.default.get_group_by_cols(alias) + return super().get_group_by_cols(alias) + + +class Subquery(BaseExpression, Combinable): + """ + An explicit subquery. It may contain OuterRef() references to the outer + query which will be resolved when it is applied to that query. + """ + + template = "(%(subquery)s)" + contains_aggregate = False + empty_result_set_value = None + + def __init__(self, queryset, output_field=None, **extra): + # Allow the usage of both QuerySet and sql.Query objects. + self.query = getattr(queryset, "query", queryset) + self.extra = extra + super().__init__(output_field) + + def get_source_expressions(self): + return [self.query] + + def set_source_expressions(self, exprs): + self.query = exprs[0] + + def _resolve_output_field(self): + return self.query.output_field + + def copy(self): + clone = super().copy() + clone.query = clone.query.clone() + return clone + + @property + def external_aliases(self): + return self.query.external_aliases + + def get_external_cols(self): + return self.query.get_external_cols() + + def as_sql(self, compiler, connection, template=None, query=None, **extra_context): + connection.ops.check_expression_support(self) + template_params = {**self.extra, **extra_context} + query = query or self.query + subquery_sql, sql_params = query.as_sql(compiler, connection) + template_params["subquery"] = subquery_sql[1:-1] + + template = template or template_params.get("template", self.template) + sql = template % template_params + return sql, sql_params + + def get_group_by_cols(self, alias=None): + if alias: + return [Ref(alias, self)] + external_cols = self.get_external_cols() + if any(col.possibly_multivalued for col in external_cols): + return [self] + return external_cols + + +class Exists(Subquery): + template = "EXISTS(%(subquery)s)" + output_field = fields.BooleanField() + + def __init__(self, queryset, negated=False, **kwargs): + self.negated = negated + super().__init__(queryset, **kwargs) + + def __invert__(self): + clone = self.copy() + clone.negated = not self.negated + return clone + + def as_sql(self, compiler, connection, template=None, **extra_context): + query = self.query.exists(using=connection.alias) + sql, params = super().as_sql( + compiler, + connection, + template=template, + query=query, + **extra_context, + ) + if self.negated: + sql = "NOT {}".format(sql) + return sql, params + + def select_format(self, compiler, sql, params): + # Wrap EXISTS() with a CASE WHEN expression if a database backend + # (e.g. Oracle) doesn't support boolean expression in SELECT or GROUP + # BY list. + if not compiler.connection.features.supports_boolean_expr_in_select_clause: + sql = "CASE WHEN {} THEN 1 ELSE 0 END".format(sql) + return sql, params + + +class OrderBy(Expression): + template = "%(expression)s %(ordering)s" + conditional = False + + def __init__( + self, expression, descending=False, nulls_first=False, nulls_last=False + ): + if nulls_first and nulls_last: + raise ValueError("nulls_first and nulls_last are mutually exclusive") + self.nulls_first = nulls_first + self.nulls_last = nulls_last + self.descending = descending + if not hasattr(expression, "resolve_expression"): + raise ValueError("expression must be an expression type") + self.expression = expression + + def __repr__(self): + return "{}({}, descending={})".format( + self.__class__.__name__, self.expression, self.descending + ) + + def set_source_expressions(self, exprs): + self.expression = exprs[0] + + def get_source_expressions(self): + return [self.expression] + + def as_sql(self, compiler, connection, template=None, **extra_context): + template = template or self.template + if connection.features.supports_order_by_nulls_modifier: + if self.nulls_last: + template = "%s NULLS LAST" % template + elif self.nulls_first: + template = "%s NULLS FIRST" % template + else: + if self.nulls_last and not ( + self.descending and connection.features.order_by_nulls_first + ): + template = "%%(expression)s IS NULL, %s" % template + elif self.nulls_first and not ( + not self.descending and connection.features.order_by_nulls_first + ): + template = "%%(expression)s IS NOT NULL, %s" % template + connection.ops.check_expression_support(self) + expression_sql, params = compiler.compile(self.expression) + placeholders = { + "expression": expression_sql, + "ordering": "DESC" if self.descending else "ASC", + **extra_context, + } + params *= template.count("%(expression)s") + return (template % placeholders).rstrip(), params + + def as_oracle(self, compiler, connection): + # Oracle doesn't allow ORDER BY EXISTS() or filters unless it's wrapped + # in a CASE WHEN. + if connection.ops.conditional_expression_supported_in_where_clause( + self.expression + ): + copy = self.copy() + copy.expression = Case( + When(self.expression, then=True), + default=False, + ) + return copy.as_sql(compiler, connection) + return self.as_sql(compiler, connection) + + def get_group_by_cols(self, alias=None): + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + def reverse_ordering(self): + self.descending = not self.descending + if self.nulls_first or self.nulls_last: + self.nulls_first = not self.nulls_first + self.nulls_last = not self.nulls_last + return self + + def asc(self): + self.descending = False + + def desc(self): + self.descending = True + + +class Window(SQLiteNumericMixin, Expression): + template = "%(expression)s OVER (%(window)s)" + # Although the main expression may either be an aggregate or an + # expression with an aggregate function, the GROUP BY that will + # be introduced in the query as a result is not desired. + contains_aggregate = False + contains_over_clause = True + filterable = False + + def __init__( + self, + expression, + partition_by=None, + order_by=None, + frame=None, + output_field=None, + ): + self.partition_by = partition_by + self.order_by = order_by + self.frame = frame + + if not getattr(expression, "window_compatible", False): + raise ValueError( + "Expression '%s' isn't compatible with OVER clauses." + % expression.__class__.__name__ + ) + + if self.partition_by is not None: + if not isinstance(self.partition_by, (tuple, list)): + self.partition_by = (self.partition_by,) + self.partition_by = ExpressionList(*self.partition_by) + + if self.order_by is not None: + if isinstance(self.order_by, (list, tuple)): + self.order_by = ExpressionList(*self.order_by) + elif not isinstance(self.order_by, BaseExpression): + raise ValueError( + "order_by must be either an Expression or a sequence of " + "expressions." + ) + super().__init__(output_field=output_field) + self.source_expression = self._parse_expressions(expression)[0] + + def _resolve_output_field(self): + return self.source_expression.output_field + + def get_source_expressions(self): + return [self.source_expression, self.partition_by, self.order_by, self.frame] + + def set_source_expressions(self, exprs): + self.source_expression, self.partition_by, self.order_by, self.frame = exprs + + def as_sql(self, compiler, connection, template=None): + connection.ops.check_expression_support(self) + if not connection.features.supports_over_clause: + raise NotSupportedError("This backend does not support window expressions.") + expr_sql, params = compiler.compile(self.source_expression) + window_sql, window_params = [], [] + + if self.partition_by is not None: + sql_expr, sql_params = self.partition_by.as_sql( + compiler=compiler, + connection=connection, + template="PARTITION BY %(expressions)s", + ) + window_sql.extend(sql_expr) + window_params.extend(sql_params) + + if self.order_by is not None: + window_sql.append(" ORDER BY ") + order_sql, order_params = compiler.compile(self.order_by) + window_sql.extend(order_sql) + window_params.extend(order_params) + + if self.frame: + frame_sql, frame_params = compiler.compile(self.frame) + window_sql.append(" " + frame_sql) + window_params.extend(frame_params) + + params.extend(window_params) + template = template or self.template + + return ( + template % {"expression": expr_sql, "window": "".join(window_sql).strip()}, + params, + ) + + def as_sqlite(self, compiler, connection): + if isinstance(self.output_field, fields.DecimalField): + # Casting to numeric must be outside of the window expression. + copy = self.copy() + source_expressions = copy.get_source_expressions() + source_expressions[0].output_field = fields.FloatField() + copy.set_source_expressions(source_expressions) + return super(Window, copy).as_sqlite(compiler, connection) + return self.as_sql(compiler, connection) + + def __str__(self): + return "{} OVER ({}{}{})".format( + str(self.source_expression), + "PARTITION BY " + str(self.partition_by) if self.partition_by else "", + "ORDER BY " + str(self.order_by) if self.order_by else "", + str(self.frame or ""), + ) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_group_by_cols(self, alias=None): + return [] + + +class WindowFrame(Expression): + """ + Model the frame clause in window expressions. There are two types of frame + clauses which are subclasses, however, all processing and validation (by no + means intended to be complete) is done here. Thus, providing an end for a + frame is optional (the default is UNBOUNDED FOLLOWING, which is the last + row in the frame). + """ + + template = "%(frame_type)s BETWEEN %(start)s AND %(end)s" + + def __init__(self, start=None, end=None): + self.start = Value(start) + self.end = Value(end) + + def set_source_expressions(self, exprs): + self.start, self.end = exprs + + def get_source_expressions(self): + return [self.start, self.end] + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + start, end = self.window_frame_start_end( + connection, self.start.value, self.end.value + ) + return ( + self.template + % { + "frame_type": self.frame_type, + "start": start, + "end": end, + }, + [], + ) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_group_by_cols(self, alias=None): + return [] + + def __str__(self): + if self.start.value is not None and self.start.value < 0: + start = "%d %s" % (abs(self.start.value), connection.ops.PRECEDING) + elif self.start.value is not None and self.start.value == 0: + start = connection.ops.CURRENT_ROW + else: + start = connection.ops.UNBOUNDED_PRECEDING + + if self.end.value is not None and self.end.value > 0: + end = "%d %s" % (self.end.value, connection.ops.FOLLOWING) + elif self.end.value is not None and self.end.value == 0: + end = connection.ops.CURRENT_ROW + else: + end = connection.ops.UNBOUNDED_FOLLOWING + return self.template % { + "frame_type": self.frame_type, + "start": start, + "end": end, + } + + def window_frame_start_end(self, connection, start, end): + raise NotImplementedError("Subclasses must implement window_frame_start_end().") + + +class RowRange(WindowFrame): + frame_type = "ROWS" + + def window_frame_start_end(self, connection, start, end): + return connection.ops.window_frame_rows_start_end(start, end) + + +class ValueRange(WindowFrame): + frame_type = "RANGE" + + def window_frame_start_end(self, connection, start, end): + return connection.ops.window_frame_range_start_end(start, end) diff --git a/venv/Lib/site-packages/django/db/models/fields/__init__.py b/venv/Lib/site-packages/django/db/models/fields/__init__.py new file mode 100644 index 000000000..b2a16f078 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/fields/__init__.py @@ -0,0 +1,2738 @@ +import collections.abc +import copy +import datetime +import decimal +import math +import operator +import uuid +import warnings +from base64 import b64decode, b64encode +from functools import partialmethod, total_ordering + +from django import forms +from django.apps import apps +from django.conf import settings +from django.core import checks, exceptions, validators +from django.db import connection, connections, router +from django.db.models.constants import LOOKUP_SEP +from django.db.models.query_utils import DeferredAttribute, RegisterLookupMixin +from django.utils import timezone +from django.utils.datastructures import DictWrapper +from django.utils.dateparse import ( + parse_date, + parse_datetime, + parse_duration, + parse_time, +) +from django.utils.duration import duration_microseconds, duration_string +from django.utils.functional import Promise, cached_property +from django.utils.ipv6 import clean_ipv6_address +from django.utils.itercompat import is_iterable +from django.utils.text import capfirst +from django.utils.translation import gettext_lazy as _ + +__all__ = [ + "AutoField", + "BLANK_CHOICE_DASH", + "BigAutoField", + "BigIntegerField", + "BinaryField", + "BooleanField", + "CharField", + "CommaSeparatedIntegerField", + "DateField", + "DateTimeField", + "DecimalField", + "DurationField", + "EmailField", + "Empty", + "Field", + "FilePathField", + "FloatField", + "GenericIPAddressField", + "IPAddressField", + "IntegerField", + "NOT_PROVIDED", + "NullBooleanField", + "PositiveBigIntegerField", + "PositiveIntegerField", + "PositiveSmallIntegerField", + "SlugField", + "SmallAutoField", + "SmallIntegerField", + "TextField", + "TimeField", + "URLField", + "UUIDField", +] + + +class Empty: + pass + + +class NOT_PROVIDED: + pass + + +# The values to use for "blank" in SelectFields. Will be appended to the start +# of most "choices" lists. +BLANK_CHOICE_DASH = [("", "---------")] + + +def _load_field(app_label, model_name, field_name): + return apps.get_model(app_label, model_name)._meta.get_field(field_name) + + +# A guide to Field parameters: +# +# * name: The name of the field specified in the model. +# * attname: The attribute to use on the model object. This is the same as +# "name", except in the case of ForeignKeys, where "_id" is +# appended. +# * db_column: The db_column specified in the model (or None). +# * column: The database column for this field. This is the same as +# "attname", except if db_column is specified. +# +# Code that introspects values, or does other dynamic things, should use +# attname. For example, this gets the primary key value of object "obj": +# +# getattr(obj, opts.pk.attname) + + +def _empty(of_cls): + new = Empty() + new.__class__ = of_cls + return new + + +def return_None(): + return None + + +@total_ordering +class Field(RegisterLookupMixin): + """Base class for all field types""" + + # Designates whether empty strings fundamentally are allowed at the + # database level. + empty_strings_allowed = True + empty_values = list(validators.EMPTY_VALUES) + + # These track each time a Field instance is created. Used to retain order. + # The auto_creation_counter is used for fields that Django implicitly + # creates, creation_counter is used for all user-specified fields. + creation_counter = 0 + auto_creation_counter = -1 + default_validators = [] # Default set of validators + default_error_messages = { + "invalid_choice": _("Value %(value)r is not a valid choice."), + "null": _("This field cannot be null."), + "blank": _("This field cannot be blank."), + "unique": _("%(model_name)s with this %(field_label)s already exists."), + # Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. + # Eg: "Title must be unique for pub_date year" + "unique_for_date": _( + "%(field_label)s must be unique for " + "%(date_field_label)s %(lookup_type)s." + ), + } + system_check_deprecated_details = None + system_check_removed_details = None + + # Field flags + hidden = False + + many_to_many = None + many_to_one = None + one_to_many = None + one_to_one = None + related_model = None + + descriptor_class = DeferredAttribute + + # Generic field type description, usually overridden by subclasses + def _description(self): + return _("Field of type: %(field_type)s") % { + "field_type": self.__class__.__name__ + } + + description = property(_description) + + def __init__( + self, + verbose_name=None, + name=None, + primary_key=False, + max_length=None, + unique=False, + blank=False, + null=False, + db_index=False, + rel=None, + default=NOT_PROVIDED, + editable=True, + serialize=True, + unique_for_date=None, + unique_for_month=None, + unique_for_year=None, + choices=None, + help_text="", + db_column=None, + db_tablespace=None, + auto_created=False, + validators=(), + error_messages=None, + ): + self.name = name + self.verbose_name = verbose_name # May be set by set_attributes_from_name + self._verbose_name = verbose_name # Store original for deconstruction + self.primary_key = primary_key + self.max_length, self._unique = max_length, unique + self.blank, self.null = blank, null + self.remote_field = rel + self.is_relation = self.remote_field is not None + self.default = default + self.editable = editable + self.serialize = serialize + self.unique_for_date = unique_for_date + self.unique_for_month = unique_for_month + self.unique_for_year = unique_for_year + if isinstance(choices, collections.abc.Iterator): + choices = list(choices) + self.choices = choices + self.help_text = help_text + self.db_index = db_index + self.db_column = db_column + self._db_tablespace = db_tablespace + self.auto_created = auto_created + + # Adjust the appropriate creation counter, and save our local copy. + if auto_created: + self.creation_counter = Field.auto_creation_counter + Field.auto_creation_counter -= 1 + else: + self.creation_counter = Field.creation_counter + Field.creation_counter += 1 + + self._validators = list(validators) # Store for deconstruction later + + messages = {} + for c in reversed(self.__class__.__mro__): + messages.update(getattr(c, "default_error_messages", {})) + messages.update(error_messages or {}) + self._error_messages = error_messages # Store for deconstruction later + self.error_messages = messages + + def __str__(self): + """ + Return "app_label.model_label.field_name" for fields attached to + models. + """ + if not hasattr(self, "model"): + return super().__str__() + model = self.model + return "%s.%s" % (model._meta.label, self.name) + + def __repr__(self): + """Display the module, class, and name of the field.""" + path = "%s.%s" % (self.__class__.__module__, self.__class__.__qualname__) + name = getattr(self, "name", None) + if name is not None: + return "<%s: %s>" % (path, name) + return "<%s>" % path + + def check(self, **kwargs): + return [ + *self._check_field_name(), + *self._check_choices(), + *self._check_db_index(), + *self._check_null_allowed_for_primary_keys(), + *self._check_backend_specific_checks(**kwargs), + *self._check_validators(), + *self._check_deprecation_details(), + ] + + def _check_field_name(self): + """ + Check if field name is valid, i.e. 1) does not end with an + underscore, 2) does not contain "__" and 3) is not "pk". + """ + if self.name.endswith("_"): + return [ + checks.Error( + "Field names must not end with an underscore.", + obj=self, + id="fields.E001", + ) + ] + elif LOOKUP_SEP in self.name: + return [ + checks.Error( + 'Field names must not contain "%s".' % LOOKUP_SEP, + obj=self, + id="fields.E002", + ) + ] + elif self.name == "pk": + return [ + checks.Error( + "'pk' is a reserved word that cannot be used as a field name.", + obj=self, + id="fields.E003", + ) + ] + else: + return [] + + @classmethod + def _choices_is_value(cls, value): + return isinstance(value, (str, Promise)) or not is_iterable(value) + + def _check_choices(self): + if not self.choices: + return [] + + if not is_iterable(self.choices) or isinstance(self.choices, str): + return [ + checks.Error( + "'choices' must be an iterable (e.g., a list or tuple).", + obj=self, + id="fields.E004", + ) + ] + + choice_max_length = 0 + # Expect [group_name, [value, display]] + for choices_group in self.choices: + try: + group_name, group_choices = choices_group + except (TypeError, ValueError): + # Containing non-pairs + break + try: + if not all( + self._choices_is_value(value) and self._choices_is_value(human_name) + for value, human_name in group_choices + ): + break + if self.max_length is not None and group_choices: + choice_max_length = max( + [ + choice_max_length, + *( + len(value) + for value, _ in group_choices + if isinstance(value, str) + ), + ] + ) + except (TypeError, ValueError): + # No groups, choices in the form [value, display] + value, human_name = group_name, group_choices + if not self._choices_is_value(value) or not self._choices_is_value( + human_name + ): + break + if self.max_length is not None and isinstance(value, str): + choice_max_length = max(choice_max_length, len(value)) + + # Special case: choices=['ab'] + if isinstance(choices_group, str): + break + else: + if self.max_length is not None and choice_max_length > self.max_length: + return [ + checks.Error( + "'max_length' is too small to fit the longest value " + "in 'choices' (%d characters)." % choice_max_length, + obj=self, + id="fields.E009", + ), + ] + return [] + + return [ + checks.Error( + "'choices' must be an iterable containing " + "(actual value, human readable name) tuples.", + obj=self, + id="fields.E005", + ) + ] + + def _check_db_index(self): + if self.db_index not in (None, True, False): + return [ + checks.Error( + "'db_index' must be None, True or False.", + obj=self, + id="fields.E006", + ) + ] + else: + return [] + + def _check_null_allowed_for_primary_keys(self): + if ( + self.primary_key + and self.null + and not connection.features.interprets_empty_strings_as_nulls + ): + # We cannot reliably check this for backends like Oracle which + # consider NULL and '' to be equal (and thus set up + # character-based fields a little differently). + return [ + checks.Error( + "Primary keys must not have null=True.", + hint=( + "Set null=False on the field, or " + "remove primary_key=True argument." + ), + obj=self, + id="fields.E007", + ) + ] + else: + return [] + + def _check_backend_specific_checks(self, databases=None, **kwargs): + if databases is None: + return [] + app_label = self.model._meta.app_label + errors = [] + for alias in databases: + if router.allow_migrate( + alias, app_label, model_name=self.model._meta.model_name + ): + errors.extend(connections[alias].validation.check_field(self, **kwargs)) + return errors + + def _check_validators(self): + errors = [] + for i, validator in enumerate(self.validators): + if not callable(validator): + errors.append( + checks.Error( + "All 'validators' must be callable.", + hint=( + "validators[{i}] ({repr}) isn't a function or " + "instance of a validator class.".format( + i=i, + repr=repr(validator), + ) + ), + obj=self, + id="fields.E008", + ) + ) + return errors + + def _check_deprecation_details(self): + if self.system_check_removed_details is not None: + return [ + checks.Error( + self.system_check_removed_details.get( + "msg", + "%s has been removed except for support in historical " + "migrations." % self.__class__.__name__, + ), + hint=self.system_check_removed_details.get("hint"), + obj=self, + id=self.system_check_removed_details.get("id", "fields.EXXX"), + ) + ] + elif self.system_check_deprecated_details is not None: + return [ + checks.Warning( + self.system_check_deprecated_details.get( + "msg", "%s has been deprecated." % self.__class__.__name__ + ), + hint=self.system_check_deprecated_details.get("hint"), + obj=self, + id=self.system_check_deprecated_details.get("id", "fields.WXXX"), + ) + ] + return [] + + def get_col(self, alias, output_field=None): + if alias == self.model._meta.db_table and ( + output_field is None or output_field == self + ): + return self.cached_col + from django.db.models.expressions import Col + + return Col(alias, self, output_field) + + @cached_property + def cached_col(self): + from django.db.models.expressions import Col + + return Col(self.model._meta.db_table, self) + + def select_format(self, compiler, sql, params): + """ + Custom format for select clauses. For example, GIS columns need to be + selected as AsText(table.col) on MySQL as the table.col data can't be + used by Django. + """ + return sql, params + + def deconstruct(self): + """ + Return enough information to recreate the field as a 4-tuple: + + * The name of the field on the model, if contribute_to_class() has + been run. + * The import path of the field, including the class, e.g. + django.db.models.IntegerField. This should be the most portable + version, so less specific may be better. + * A list of positional arguments. + * A dict of keyword arguments. + + Note that the positional or keyword arguments must contain values of + the following types (including inner values of collection types): + + * None, bool, str, int, float, complex, set, frozenset, list, tuple, + dict + * UUID + * datetime.datetime (naive), datetime.date + * top-level classes, top-level functions - will be referenced by their + full import path + * Storage instances - these have their own deconstruct() method + + This is because the values here must be serialized into a text format + (possibly new Python code, possibly JSON) and these are the only types + with encoding handlers defined. + + There's no need to return the exact way the field was instantiated this + time, just ensure that the resulting field is the same - prefer keyword + arguments over positional ones, and omit parameters with their default + values. + """ + # Short-form way of fetching all the default parameters + keywords = {} + possibles = { + "verbose_name": None, + "primary_key": False, + "max_length": None, + "unique": False, + "blank": False, + "null": False, + "db_index": False, + "default": NOT_PROVIDED, + "editable": True, + "serialize": True, + "unique_for_date": None, + "unique_for_month": None, + "unique_for_year": None, + "choices": None, + "help_text": "", + "db_column": None, + "db_tablespace": None, + "auto_created": False, + "validators": [], + "error_messages": None, + } + attr_overrides = { + "unique": "_unique", + "error_messages": "_error_messages", + "validators": "_validators", + "verbose_name": "_verbose_name", + "db_tablespace": "_db_tablespace", + } + equals_comparison = {"choices", "validators"} + for name, default in possibles.items(): + value = getattr(self, attr_overrides.get(name, name)) + # Unroll anything iterable for choices into a concrete list + if name == "choices" and isinstance(value, collections.abc.Iterable): + value = list(value) + # Do correct kind of comparison + if name in equals_comparison: + if value != default: + keywords[name] = value + else: + if value is not default: + keywords[name] = value + # Work out path - we shorten it for known Django core fields + path = "%s.%s" % (self.__class__.__module__, self.__class__.__qualname__) + if path.startswith("django.db.models.fields.related"): + path = path.replace("django.db.models.fields.related", "django.db.models") + elif path.startswith("django.db.models.fields.files"): + path = path.replace("django.db.models.fields.files", "django.db.models") + elif path.startswith("django.db.models.fields.json"): + path = path.replace("django.db.models.fields.json", "django.db.models") + elif path.startswith("django.db.models.fields.proxy"): + path = path.replace("django.db.models.fields.proxy", "django.db.models") + elif path.startswith("django.db.models.fields"): + path = path.replace("django.db.models.fields", "django.db.models") + # Return basic info - other fields should override this. + return (self.name, path, [], keywords) + + def clone(self): + """ + Uses deconstruct() to clone a new copy of this Field. + Will not preserve any class attachments/attribute names. + """ + name, path, args, kwargs = self.deconstruct() + return self.__class__(*args, **kwargs) + + def __eq__(self, other): + # Needed for @total_ordering + if isinstance(other, Field): + return self.creation_counter == other.creation_counter and getattr( + self, "model", None + ) == getattr(other, "model", None) + return NotImplemented + + def __lt__(self, other): + # This is needed because bisect does not take a comparison function. + # Order by creation_counter first for backward compatibility. + if isinstance(other, Field): + if ( + self.creation_counter != other.creation_counter + or not hasattr(self, "model") + and not hasattr(other, "model") + ): + return self.creation_counter < other.creation_counter + elif hasattr(self, "model") != hasattr(other, "model"): + return not hasattr(self, "model") # Order no-model fields first + else: + # creation_counter's are equal, compare only models. + return (self.model._meta.app_label, self.model._meta.model_name) < ( + other.model._meta.app_label, + other.model._meta.model_name, + ) + return NotImplemented + + def __hash__(self): + return hash( + ( + self.creation_counter, + self.model._meta.app_label if hasattr(self, "model") else None, + self.model._meta.model_name if hasattr(self, "model") else None, + ) + ) + + def __deepcopy__(self, memodict): + # We don't have to deepcopy very much here, since most things are not + # intended to be altered after initial creation. + obj = copy.copy(self) + if self.remote_field: + obj.remote_field = copy.copy(self.remote_field) + if hasattr(self.remote_field, "field") and self.remote_field.field is self: + obj.remote_field.field = obj + memodict[id(self)] = obj + return obj + + def __copy__(self): + # We need to avoid hitting __reduce__, so define this + # slightly weird copy construct. + obj = Empty() + obj.__class__ = self.__class__ + obj.__dict__ = self.__dict__.copy() + return obj + + def __reduce__(self): + """ + Pickling should return the model._meta.fields instance of the field, + not a new copy of that field. So, use the app registry to load the + model and then the field back. + """ + if not hasattr(self, "model"): + # Fields are sometimes used without attaching them to models (for + # example in aggregation). In this case give back a plain field + # instance. The code below will create a new empty instance of + # class self.__class__, then update its dict with self.__dict__ + # values - so, this is very close to normal pickle. + state = self.__dict__.copy() + # The _get_default cached_property can't be pickled due to lambda + # usage. + state.pop("_get_default", None) + return _empty, (self.__class__,), state + return _load_field, ( + self.model._meta.app_label, + self.model._meta.object_name, + self.name, + ) + + def get_pk_value_on_save(self, instance): + """ + Hook to generate new PK values on save. This method is called when + saving instances with no primary key value set. If this method returns + something else than None, then the returned value is used when saving + the new instance. + """ + if self.default: + return self.get_default() + return None + + def to_python(self, value): + """ + Convert the input value into the expected Python data type, raising + django.core.exceptions.ValidationError if the data can't be converted. + Return the converted value. Subclasses should override this. + """ + return value + + @cached_property + def validators(self): + """ + Some validators can't be created at field initialization time. + This method provides a way to delay their creation until required. + """ + return [*self.default_validators, *self._validators] + + def run_validators(self, value): + if value in self.empty_values: + return + + errors = [] + for v in self.validators: + try: + v(value) + except exceptions.ValidationError as e: + if hasattr(e, "code") and e.code in self.error_messages: + e.message = self.error_messages[e.code] + errors.extend(e.error_list) + + if errors: + raise exceptions.ValidationError(errors) + + def validate(self, value, model_instance): + """ + Validate value and raise ValidationError if necessary. Subclasses + should override this to provide validation logic. + """ + if not self.editable: + # Skip validation for non-editable fields. + return + + if self.choices is not None and value not in self.empty_values: + for option_key, option_value in self.choices: + if isinstance(option_value, (list, tuple)): + # This is an optgroup, so look inside the group for + # options. + for optgroup_key, optgroup_value in option_value: + if value == optgroup_key: + return + elif value == option_key: + return + raise exceptions.ValidationError( + self.error_messages["invalid_choice"], + code="invalid_choice", + params={"value": value}, + ) + + if value is None and not self.null: + raise exceptions.ValidationError(self.error_messages["null"], code="null") + + if not self.blank and value in self.empty_values: + raise exceptions.ValidationError(self.error_messages["blank"], code="blank") + + def clean(self, value, model_instance): + """ + Convert the value's type and run validation. Validation errors + from to_python() and validate() are propagated. Return the correct + value if no error is raised. + """ + value = self.to_python(value) + self.validate(value, model_instance) + self.run_validators(value) + return value + + def db_type_parameters(self, connection): + return DictWrapper(self.__dict__, connection.ops.quote_name, "qn_") + + def db_check(self, connection): + """ + Return the database column check constraint for this field, for the + provided connection. Works the same way as db_type() for the case that + get_internal_type() does not map to a preexisting model field. + """ + data = self.db_type_parameters(connection) + try: + return ( + connection.data_type_check_constraints[self.get_internal_type()] % data + ) + except KeyError: + return None + + def db_type(self, connection): + """ + Return the database column data type for this field, for the provided + connection. + """ + # The default implementation of this method looks at the + # backend-specific data_types dictionary, looking up the field by its + # "internal type". + # + # A Field class can implement the get_internal_type() method to specify + # which *preexisting* Django Field class it's most similar to -- i.e., + # a custom field might be represented by a TEXT column type, which is + # the same as the TextField Django field type, which means the custom + # field's get_internal_type() returns 'TextField'. + # + # But the limitation of the get_internal_type() / data_types approach + # is that it cannot handle database column types that aren't already + # mapped to one of the built-in Django field types. In this case, you + # can implement db_type() instead of get_internal_type() to specify + # exactly which wacky database column type you want to use. + data = self.db_type_parameters(connection) + try: + return connection.data_types[self.get_internal_type()] % data + except KeyError: + return None + + def rel_db_type(self, connection): + """ + Return the data type that a related field pointing to this field should + use. For example, this method is called by ForeignKey and OneToOneField + to determine its data type. + """ + return self.db_type(connection) + + def cast_db_type(self, connection): + """Return the data type to use in the Cast() function.""" + db_type = connection.ops.cast_data_types.get(self.get_internal_type()) + if db_type: + return db_type % self.db_type_parameters(connection) + return self.db_type(connection) + + def db_parameters(self, connection): + """ + Extension of db_type(), providing a range of different return values + (type, checks). This will look at db_type(), allowing custom model + fields to override it. + """ + type_string = self.db_type(connection) + check_string = self.db_check(connection) + return { + "type": type_string, + "check": check_string, + } + + def db_type_suffix(self, connection): + return connection.data_types_suffix.get(self.get_internal_type()) + + def get_db_converters(self, connection): + if hasattr(self, "from_db_value"): + return [self.from_db_value] + return [] + + @property + def unique(self): + return self._unique or self.primary_key + + @property + def db_tablespace(self): + return self._db_tablespace or settings.DEFAULT_INDEX_TABLESPACE + + @property + def db_returning(self): + """ + Private API intended only to be used by Django itself. Currently only + the PostgreSQL backend supports returning multiple fields on a model. + """ + return False + + def set_attributes_from_name(self, name): + self.name = self.name or name + self.attname, self.column = self.get_attname_column() + self.concrete = self.column is not None + if self.verbose_name is None and self.name: + self.verbose_name = self.name.replace("_", " ") + + def contribute_to_class(self, cls, name, private_only=False): + """ + Register the field with the model class it belongs to. + + If private_only is True, create a separate instance of this field + for every subclass of cls, even if cls is not an abstract model. + """ + self.set_attributes_from_name(name) + self.model = cls + cls._meta.add_field(self, private=private_only) + if self.column: + setattr(cls, self.attname, self.descriptor_class(self)) + if self.choices is not None: + # Don't override a get_FOO_display() method defined explicitly on + # this class, but don't check methods derived from inheritance, to + # allow overriding inherited choices. For more complex inheritance + # structures users should override contribute_to_class(). + if "get_%s_display" % self.name not in cls.__dict__: + setattr( + cls, + "get_%s_display" % self.name, + partialmethod(cls._get_FIELD_display, field=self), + ) + + def get_filter_kwargs_for_object(self, obj): + """ + Return a dict that when passed as kwargs to self.model.filter(), would + yield all instances having the same value for this field as obj has. + """ + return {self.name: getattr(obj, self.attname)} + + def get_attname(self): + return self.name + + def get_attname_column(self): + attname = self.get_attname() + column = self.db_column or attname + return attname, column + + def get_internal_type(self): + return self.__class__.__name__ + + def pre_save(self, model_instance, add): + """Return field's value just before saving.""" + return getattr(model_instance, self.attname) + + def get_prep_value(self, value): + """Perform preliminary non-db specific value checks and conversions.""" + if isinstance(value, Promise): + value = value._proxy____cast() + return value + + def get_db_prep_value(self, value, connection, prepared=False): + """ + Return field's value prepared for interacting with the database backend. + + Used by the default implementations of get_db_prep_save(). + """ + if not prepared: + value = self.get_prep_value(value) + return value + + def get_db_prep_save(self, value, connection): + """Return field's value prepared for saving into a database.""" + return self.get_db_prep_value(value, connection=connection, prepared=False) + + def has_default(self): + """Return a boolean of whether this field has a default value.""" + return self.default is not NOT_PROVIDED + + def get_default(self): + """Return the default value for this field.""" + return self._get_default() + + @cached_property + def _get_default(self): + if self.has_default(): + if callable(self.default): + return self.default + return lambda: self.default + + if ( + not self.empty_strings_allowed + or self.null + and not connection.features.interprets_empty_strings_as_nulls + ): + return return_None + return str # return empty string + + def get_choices( + self, + include_blank=True, + blank_choice=BLANK_CHOICE_DASH, + limit_choices_to=None, + ordering=(), + ): + """ + Return choices with a default blank choices included, for use + as choices for this field. + + Analog of django.db.models.fields.Field.get_choices(), provided + initially for utilization by RelatedFieldListFilter. + """ + limit_choices_to = limit_choices_to or self.limit_choices_to + qs = self.related_model._default_manager.complex_filter(limit_choices_to) + if ordering: + qs = qs.order_by(*ordering) + return (blank_choice if include_blank else []) + [(x.pk, str(x)) for x in qs] + + def is_hidden(self): + """Should the related object be hidden?""" + return bool(self.related_name) and self.related_name[-1] == "+" + + def get_joining_columns(self): + return self.field.get_reverse_joining_columns() + + def get_extra_restriction(self, alias, related_alias): + return self.field.get_extra_restriction(related_alias, alias) + + def set_field_name(self): + """ + Set the related field's name, this is not available until later stages + of app loading, so set_field_name is called from + set_attributes_from_rel() + """ + # By default foreign object doesn't relate to any remote field (for + # example custom multicolumn joins currently have no remote field). + self.field_name = None + + def get_accessor_name(self, model=None): + # This method encapsulates the logic that decides what name to give an + # accessor descriptor that retrieves related many-to-one or + # many-to-many objects. It uses the lowercased object_name + "_set", + # but this can be overridden with the "related_name" option. Due to + # backwards compatibility ModelForms need to be able to provide an + # alternate model. See BaseInlineFormSet.get_default_prefix(). + opts = model._meta if model else self.related_model._meta + model = model or self.related_model + if self.multiple: + # If this is a symmetrical m2m relation on self, there is no + # reverse accessor. + if self.symmetrical and model == self.model: + return None + if self.related_name: + return self.related_name + return opts.model_name + ("_set" if self.multiple else "") + + def get_path_info(self, filtered_relation=None): + return self.field.get_reverse_path_info(filtered_relation) + + def get_cache_name(self): + """ + Return the name of the cache key to use for storing an instance of the + forward model on the reverse model. + """ + return self.get_accessor_name() + + +class ManyToOneRel(ForeignObjectRel): + """ + Used by the ForeignKey field to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + + Note: Because we somewhat abuse the Rel objects by using them as reverse + fields we get the funny situation where + ``ManyToOneRel.many_to_one == False`` and + ``ManyToOneRel.one_to_many == True``. This is unfortunate but the actual + ManyToOneRel class is a private API and there is work underway to turn + reverse relations into actual fields. + """ + + def __init__( + self, + field, + to, + field_name, + related_name=None, + related_query_name=None, + limit_choices_to=None, + parent_link=False, + on_delete=None, + ): + super().__init__( + field, + to, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + parent_link=parent_link, + on_delete=on_delete, + ) + + self.field_name = field_name + + def __getstate__(self): + state = self.__dict__.copy() + state.pop("related_model", None) + return state + + @property + def identity(self): + return super().identity + (self.field_name,) + + def get_related_field(self): + """ + Return the Field in the 'to' object to which this relationship is tied. + """ + field = self.model._meta.get_field(self.field_name) + if not field.concrete: + raise exceptions.FieldDoesNotExist( + "No related field named '%s'" % self.field_name + ) + return field + + def set_field_name(self): + self.field_name = self.field_name or self.model._meta.pk.name + + +class OneToOneRel(ManyToOneRel): + """ + Used by OneToOneField to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + """ + + def __init__( + self, + field, + to, + field_name, + related_name=None, + related_query_name=None, + limit_choices_to=None, + parent_link=False, + on_delete=None, + ): + super().__init__( + field, + to, + field_name, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + parent_link=parent_link, + on_delete=on_delete, + ) + + self.multiple = False + + +class ManyToManyRel(ForeignObjectRel): + """ + Used by ManyToManyField to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + """ + + def __init__( + self, + field, + to, + related_name=None, + related_query_name=None, + limit_choices_to=None, + symmetrical=True, + through=None, + through_fields=None, + db_constraint=True, + ): + super().__init__( + field, + to, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + ) + + if through and not db_constraint: + raise ValueError("Can't supply a through model and db_constraint=False") + self.through = through + + if through_fields and not through: + raise ValueError("Cannot specify through_fields without a through model") + self.through_fields = through_fields + + self.symmetrical = symmetrical + self.db_constraint = db_constraint + + @property + def identity(self): + return super().identity + ( + self.through, + make_hashable(self.through_fields), + self.db_constraint, + ) + + def get_related_field(self): + """ + Return the field in the 'to' object to which this relationship is tied. + Provided for symmetry with ManyToOneRel. + """ + opts = self.through._meta + if self.through_fields: + field = opts.get_field(self.through_fields[0]) + else: + for field in opts.fields: + rel = getattr(field, "remote_field", None) + if rel and rel.model == self.model: + break + return field.foreign_related_fields[0] diff --git a/venv/Lib/site-packages/django/db/models/functions/__init__.py b/venv/Lib/site-packages/django/db/models/functions/__init__.py new file mode 100644 index 000000000..cd7c80189 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/__init__.py @@ -0,0 +1,190 @@ +from .comparison import Cast, Coalesce, Collate, Greatest, JSONObject, Least, NullIf +from .datetime import ( + Extract, + ExtractDay, + ExtractHour, + ExtractIsoWeekDay, + ExtractIsoYear, + ExtractMinute, + ExtractMonth, + ExtractQuarter, + ExtractSecond, + ExtractWeek, + ExtractWeekDay, + ExtractYear, + Now, + Trunc, + TruncDate, + TruncDay, + TruncHour, + TruncMinute, + TruncMonth, + TruncQuarter, + TruncSecond, + TruncTime, + TruncWeek, + TruncYear, +) +from .math import ( + Abs, + ACos, + ASin, + ATan, + ATan2, + Ceil, + Cos, + Cot, + Degrees, + Exp, + Floor, + Ln, + Log, + Mod, + Pi, + Power, + Radians, + Random, + Round, + Sign, + Sin, + Sqrt, + Tan, +) +from .text import ( + MD5, + SHA1, + SHA224, + SHA256, + SHA384, + SHA512, + Chr, + Concat, + ConcatPair, + Left, + Length, + Lower, + LPad, + LTrim, + Ord, + Repeat, + Replace, + Reverse, + Right, + RPad, + RTrim, + StrIndex, + Substr, + Trim, + Upper, +) +from .window import ( + CumeDist, + DenseRank, + FirstValue, + Lag, + LastValue, + Lead, + NthValue, + Ntile, + PercentRank, + Rank, + RowNumber, +) + +__all__ = [ + # comparison and conversion + "Cast", + "Coalesce", + "Collate", + "Greatest", + "JSONObject", + "Least", + "NullIf", + # datetime + "Extract", + "ExtractDay", + "ExtractHour", + "ExtractMinute", + "ExtractMonth", + "ExtractQuarter", + "ExtractSecond", + "ExtractWeek", + "ExtractIsoWeekDay", + "ExtractWeekDay", + "ExtractIsoYear", + "ExtractYear", + "Now", + "Trunc", + "TruncDate", + "TruncDay", + "TruncHour", + "TruncMinute", + "TruncMonth", + "TruncQuarter", + "TruncSecond", + "TruncTime", + "TruncWeek", + "TruncYear", + # math + "Abs", + "ACos", + "ASin", + "ATan", + "ATan2", + "Ceil", + "Cos", + "Cot", + "Degrees", + "Exp", + "Floor", + "Ln", + "Log", + "Mod", + "Pi", + "Power", + "Radians", + "Random", + "Round", + "Sign", + "Sin", + "Sqrt", + "Tan", + # text + "MD5", + "SHA1", + "SHA224", + "SHA256", + "SHA384", + "SHA512", + "Chr", + "Concat", + "ConcatPair", + "Left", + "Length", + "Lower", + "LPad", + "LTrim", + "Ord", + "Repeat", + "Replace", + "Reverse", + "Right", + "RPad", + "RTrim", + "StrIndex", + "Substr", + "Trim", + "Upper", + # window + "CumeDist", + "DenseRank", + "FirstValue", + "Lag", + "LastValue", + "Lead", + "NthValue", + "Ntile", + "PercentRank", + "Rank", + "RowNumber", +] diff --git a/venv/Lib/site-packages/django/db/models/functions/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/functions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9496ff52cd673f04f25b3f8dd76324960025f751 GIT binary patch literal 2369 zcmc)LS##4?6bEoS-t8n1wruQ##Xw@R5<(C zN_VDDed-tJL!Wy8vICvYbf(ij;F~nKv_w^+M>ht@%U+Q&r_A7$FetJ}} zqW;_;gMok^(1T`xgB0W*>fsQDI80%VP=uotgRKGj?dG19-slfKo|HTUF1u2i7(S-zCu@ckOp~(hIp8Ud4xuIlt%d~UFBLDM&Rv zRt}`&zo`xd(lHs%YOW{aSz9xO+YmCAwM|p=gp6-ELLJp$a=W}+*sXsQ4Npe$0`sGV zwrOsCNDs-_+Go$v)JU>>lGDD(RQG(-ZaZ?I8*I7up%5n+@Ben`NNA4i>&82V)mEu{ z&qCYsj=xUcYio`tzD+KRhHdFzbK%)v=bj}xE5y$dD%htoQgPZ=Lniz~&i|s_(=XkN ze$graVz-`TC-AH3_0P|0=}hZZ(s^dZV9|Y&UsC5P3P=yi&}!Y4;nl1S%Z8<_XqJq? zDb)*Mm@g(qV<(R74R(c0&hjI5is?Z}?IB|~|;DMLH9E_;fGj1=ut^}EDMnr>*8 zE2AaN(ruQJlHFE6P`GR~)h&Lu@(+$DLn>K%SlyqSRfC(WlQOEDnwsexXXpIm^n53t zot#qD96K_awXKGx8r?Y-HN%nNy!fD2Lta=-)u~9{FC?5VYPt$4j=?gt>*%T?(Nc>^ zl_*-KhE-M)pM>KIRin{7_GGx^-%|2#iI+WR%hJVXRY$w-dMb^7J+j|w2`8OWtF_G{ zXQ*|U$O+38>ieF^~ZPzDvS4-UW~ zcnyvKfj5dm`aLBZHn%j#aBb^fG*rfQwI_J$fB5gM^*iV{?;o4&_xJy{R)$&gj=w{L zW!MvHFaMrxrs%1mwyx9v*lroC)il$r)qV~*@398JA1B#`>b|RXn`)`;x>_}7H`MlF zd2V&X@HX4^s=slJ7abdKxaucieX8b-det>NG2YS|Ct6duRsEx8HSLUE&#(#}Y84DZ-^$~M;X0*5ePZW=A?*IS* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/functions/__pycache__/comparison.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/functions/__pycache__/comparison.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0547235f355b24c05f10c0cd3568a3eeb89d211 GIT binary patch literal 8070 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 TJEa#So(Nx|R3Mbqi|YRa_mt;~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/functions/__pycache__/math.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/functions/__pycache__/math.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3eab3fe919390dde7f9dbbde1ab4969ffd5708f GIT binary patch literal 6542 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 Sjt)u898M08q(*4YnE8J!I_FUU literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/functions/__pycache__/mixins.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/functions/__pycache__/mixins.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1091d026256a908f4c4113a5889b6d8dbe82aeb7 GIT binary patch literal 2799 zcmb7GTW{P%6rLGh*1O$JlXjbiQrbW%)Pig(5Er2+YSqw-R2D=^AFKt-v1b==z4m6t z8zqq=fwofN0VMuGBJq+Rz@Hh3Ctlzgi3bFPbL?!gNfRL)&B@HM=Ul&Y&L*{5g~0R2 z7eBB3WD)WU9>yOH4!2;*$3OxS(1Co?F)sRSnrPF7HcQyEU>fG!ie@*Bt|O^;T9}e2f~R%1LClN2J9(uv_J!0x~ks|*Z0*ti2H-|qi{Wp zee`qm7_h;029~@JBqb^BvaW`bzGL5#jBM*WWJ}NVZQ~hf(?ARKrxtL{9kN7*bca%s z>D^LBGuCDy$+REo_voq741WbpHghI|!c(^&c|Mm;rRS}?LD&gX=~GZSde9@Z+s4QW z^j4r)n<>_~sVaQEFSwLp67Nz`#wEqauft_4=z4J{nGaUxdr80}Io}?{ehRwe zd=G;!8~qJcS%^Z&XwvI1PJ(J#1!5AWSN^H)F=qa~`R+-1Yk1P_Co=7T^{Y{1AxeBN zl8dkz39~JMF;tq|kgC!~M7d$yPLu}GR=S_`H=Jq7Q&%Pf;dA#e5>icfPUf4S71Y^= z(j|}D%0jclhznKmlQ@P@fOD$G*HhuSz)4}J3_nU@p2t<7bE1Z3)s8p-6-XqyKWSK0 zrxj}I`d|89-P(NRzrAll$}QK8y&iX6RdHR2_8`K2)pb_~UR1mhmryyTcZ{Gd!UTeR zsROY{mFAr1ifmLW@&a> zVUv;}=>n?9>!`)H^erPJUAC?5Ku3DQ#7w|4eLAnm%xDAtZLO(lBV~Ed*gSXV_VS|} z*X8W(<=N#2_nIFr*$^;84*FaO>=!xi)fDDDgp`Tci`;ah&uvp&z}M4AE+Ux$0)SeL zl-c)$*OR+cm0j15JSknb2y32Q3$okWfDd1U8xpg7iB3=p{x+|i7!Aa8e&I+%!i$)g zJS<E2z2FWps`&x#Z}NJuq8pSn8GeB*1YIZvdjV4fmBobn@7p$oqeY0ATQ%Z z>|4&1i$N8QWGNl8$Apqq7Jz_V+O(NK)aSi> zmkIolqNqI9u~d1X!(;5&i|?RR6wkhzA)B{O@xB2dlu5M4-SKfaHa14$PPJS#(5iVL zBMVWfxQQgs>jAvPTfln{`ELWUO(*Xx`%@+#!%}Hpypg+DOypVkP+d6DM$m>xcWOrj z97D9gD4@1{dRp`xHS<-cn{)pwBDQfH(I{EGiR94BLkQ2o3v_pXa@46nj$ILF;h%Hy zu-1zo0FA=^G0!oG&ZXzS8~sqof2`!=C@+m%{Fo&NL08s7G4&P^=S3JuomJ_CHgW#k F%)f!Xq0#^V literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/functions/__pycache__/text.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/functions/__pycache__/text.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c296a168aa54da0ff655c0e5301a3f8e65b1ab20 GIT binary patch literal 11821 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 NtA(jTu8^8a{Rf%FzJmY& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/functions/comparison.py b/venv/Lib/site-packages/django/db/models/functions/comparison.py new file mode 100644 index 000000000..eb1f20a77 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/comparison.py @@ -0,0 +1,212 @@ +"""Database functions that do comparisons or type conversions.""" +from django.db import NotSupportedError +from django.db.models.expressions import Func, Value +from django.db.models.fields.json import JSONField +from django.utils.regex_helper import _lazy_re_compile + + +class Cast(Func): + """Coerce an expression to a new field type.""" + + function = "CAST" + template = "%(function)s(%(expressions)s AS %(db_type)s)" + + def __init__(self, expression, output_field): + super().__init__(expression, output_field=output_field) + + def as_sql(self, compiler, connection, **extra_context): + extra_context["db_type"] = self.output_field.cast_db_type(connection) + return super().as_sql(compiler, connection, **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + db_type = self.output_field.db_type(connection) + if db_type in {"datetime", "time"}: + # Use strftime as datetime/time don't keep fractional seconds. + template = "strftime(%%s, %(expressions)s)" + sql, params = super().as_sql( + compiler, connection, template=template, **extra_context + ) + format_string = "%H:%M:%f" if db_type == "time" else "%Y-%m-%d %H:%M:%f" + params.insert(0, format_string) + return sql, params + elif db_type == "date": + template = "date(%(expressions)s)" + return super().as_sql( + compiler, connection, template=template, **extra_context + ) + return self.as_sql(compiler, connection, **extra_context) + + def as_mysql(self, compiler, connection, **extra_context): + template = None + output_type = self.output_field.get_internal_type() + # MySQL doesn't support explicit cast to float. + if output_type == "FloatField": + template = "(%(expressions)s + 0.0)" + # MariaDB doesn't support explicit cast to JSON. + elif output_type == "JSONField" and connection.mysql_is_mariadb: + template = "JSON_EXTRACT(%(expressions)s, '$')" + return self.as_sql(compiler, connection, template=template, **extra_context) + + def as_postgresql(self, compiler, connection, **extra_context): + # CAST would be valid too, but the :: shortcut syntax is more readable. + # 'expressions' is wrapped in parentheses in case it's a complex + # expression. + return self.as_sql( + compiler, + connection, + template="(%(expressions)s)::%(db_type)s", + **extra_context, + ) + + def as_oracle(self, compiler, connection, **extra_context): + if self.output_field.get_internal_type() == "JSONField": + # Oracle doesn't support explicit cast to JSON. + template = "JSON_QUERY(%(expressions)s, '$')" + return super().as_sql( + compiler, connection, template=template, **extra_context + ) + return self.as_sql(compiler, connection, **extra_context) + + +class Coalesce(Func): + """Return, from left to right, the first non-null expression.""" + + function = "COALESCE" + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError("Coalesce must take at least two expressions") + super().__init__(*expressions, **extra) + + @property + def empty_result_set_value(self): + for expression in self.get_source_expressions(): + result = expression.empty_result_set_value + if result is NotImplemented or result is not None: + return result + return None + + def as_oracle(self, compiler, connection, **extra_context): + # Oracle prohibits mixing TextField (NCLOB) and CharField (NVARCHAR2), + # so convert all fields to NCLOB when that type is expected. + if self.output_field.get_internal_type() == "TextField": + clone = self.copy() + clone.set_source_expressions( + [ + Func(expression, function="TO_NCLOB") + for expression in self.get_source_expressions() + ] + ) + return super(Coalesce, clone).as_sql(compiler, connection, **extra_context) + return self.as_sql(compiler, connection, **extra_context) + + +class Collate(Func): + function = "COLLATE" + template = "%(expressions)s %(function)s %(collation)s" + # Inspired from + # https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS + collation_re = _lazy_re_compile(r"^[\w\-]+$") + + def __init__(self, expression, collation): + if not (collation and self.collation_re.match(collation)): + raise ValueError("Invalid collation name: %r." % collation) + self.collation = collation + super().__init__(expression) + + def as_sql(self, compiler, connection, **extra_context): + extra_context.setdefault("collation", connection.ops.quote_name(self.collation)) + return super().as_sql(compiler, connection, **extra_context) + + +class Greatest(Func): + """ + Return the maximum expression. + + If any expression is null the return value is database-specific: + On PostgreSQL, the maximum not-null expression is returned. + On MySQL, Oracle, and SQLite, if any expression is null, null is returned. + """ + + function = "GREATEST" + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError("Greatest must take at least two expressions") + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection, **extra_context): + """Use the MAX function on SQLite.""" + return super().as_sqlite(compiler, connection, function="MAX", **extra_context) + + +class JSONObject(Func): + function = "JSON_OBJECT" + output_field = JSONField() + + def __init__(self, **fields): + expressions = [] + for key, value in fields.items(): + expressions.extend((Value(key), value)) + super().__init__(*expressions) + + def as_sql(self, compiler, connection, **extra_context): + if not connection.features.has_json_object_function: + raise NotSupportedError( + "JSONObject() is not supported on this database backend." + ) + return super().as_sql(compiler, connection, **extra_context) + + def as_postgresql(self, compiler, connection, **extra_context): + return self.as_sql( + compiler, + connection, + function="JSONB_BUILD_OBJECT", + **extra_context, + ) + + def as_oracle(self, compiler, connection, **extra_context): + class ArgJoiner: + def join(self, args): + args = [" VALUE ".join(arg) for arg in zip(args[::2], args[1::2])] + return ", ".join(args) + + return self.as_sql( + compiler, + connection, + arg_joiner=ArgJoiner(), + template="%(function)s(%(expressions)s RETURNING CLOB)", + **extra_context, + ) + + +class Least(Func): + """ + Return the minimum expression. + + If any expression is null the return value is database-specific: + On PostgreSQL, return the minimum not-null expression. + On MySQL, Oracle, and SQLite, if any expression is null, return null. + """ + + function = "LEAST" + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError("Least must take at least two expressions") + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection, **extra_context): + """Use the MIN function on SQLite.""" + return super().as_sqlite(compiler, connection, function="MIN", **extra_context) + + +class NullIf(Func): + function = "NULLIF" + arity = 2 + + def as_oracle(self, compiler, connection, **extra_context): + expression1 = self.get_source_expressions()[0] + if isinstance(expression1, Value) and expression1.value is None: + raise ValueError("Oracle does not allow Value(None) for expression1.") + return super().as_sql(compiler, connection, **extra_context) diff --git a/venv/Lib/site-packages/django/db/models/functions/datetime.py b/venv/Lib/site-packages/django/db/models/functions/datetime.py new file mode 100644 index 000000000..5f98e6bba --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/datetime.py @@ -0,0 +1,419 @@ +from datetime import datetime + +from django.conf import settings +from django.db.models.expressions import Func +from django.db.models.fields import ( + DateField, + DateTimeField, + DurationField, + Field, + IntegerField, + TimeField, +) +from django.db.models.lookups import ( + Transform, + YearExact, + YearGt, + YearGte, + YearLt, + YearLte, +) +from django.utils import timezone + + +class TimezoneMixin: + tzinfo = None + + def get_tzname(self): + # Timezone conversions must happen to the input datetime *before* + # applying a function. 2015-12-31 23:00:00 -02:00 is stored in the + # database as 2016-01-01 01:00:00 +00:00. Any results should be + # based on the input datetime not the stored datetime. + tzname = None + if settings.USE_TZ: + if self.tzinfo is None: + tzname = timezone.get_current_timezone_name() + else: + tzname = timezone._get_timezone_name(self.tzinfo) + return tzname + + +class Extract(TimezoneMixin, Transform): + lookup_name = None + output_field = IntegerField() + + def __init__(self, expression, lookup_name=None, tzinfo=None, **extra): + if self.lookup_name is None: + self.lookup_name = lookup_name + if self.lookup_name is None: + raise ValueError("lookup_name must be provided") + self.tzinfo = tzinfo + super().__init__(expression, **extra) + + def as_sql(self, compiler, connection): + if not connection.ops.extract_trunc_lookup_pattern.fullmatch(self.lookup_name): + raise ValueError("Invalid lookup_name: %s" % self.lookup_name) + sql, params = compiler.compile(self.lhs) + lhs_output_field = self.lhs.output_field + if isinstance(lhs_output_field, DateTimeField): + tzname = self.get_tzname() + sql = connection.ops.datetime_extract_sql(self.lookup_name, sql, tzname) + elif self.tzinfo is not None: + raise ValueError("tzinfo can only be used with DateTimeField.") + elif isinstance(lhs_output_field, DateField): + sql = connection.ops.date_extract_sql(self.lookup_name, sql) + elif isinstance(lhs_output_field, TimeField): + sql = connection.ops.time_extract_sql(self.lookup_name, sql) + elif isinstance(lhs_output_field, DurationField): + if not connection.features.has_native_duration_field: + raise ValueError( + "Extract requires native DurationField database support." + ) + sql = connection.ops.time_extract_sql(self.lookup_name, sql) + else: + # resolve_expression has already validated the output_field so this + # assert should never be hit. + assert False, "Tried to Extract from an invalid type." + return sql, params + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + copy = super().resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + field = getattr(copy.lhs, "output_field", None) + if field is None: + return copy + if not isinstance(field, (DateField, DateTimeField, TimeField, DurationField)): + raise ValueError( + "Extract input expression must be DateField, DateTimeField, " + "TimeField, or DurationField." + ) + # Passing dates to functions expecting datetimes is most likely a mistake. + if type(field) == DateField and copy.lookup_name in ( + "hour", + "minute", + "second", + ): + raise ValueError( + "Cannot extract time component '%s' from DateField '%s'." + % (copy.lookup_name, field.name) + ) + if isinstance(field, DurationField) and copy.lookup_name in ( + "year", + "iso_year", + "month", + "week", + "week_day", + "iso_week_day", + "quarter", + ): + raise ValueError( + "Cannot extract component '%s' from DurationField '%s'." + % (copy.lookup_name, field.name) + ) + return copy + + +class ExtractYear(Extract): + lookup_name = "year" + + +class ExtractIsoYear(Extract): + """Return the ISO-8601 week-numbering year.""" + + lookup_name = "iso_year" + + +class ExtractMonth(Extract): + lookup_name = "month" + + +class ExtractDay(Extract): + lookup_name = "day" + + +class ExtractWeek(Extract): + """ + Return 1-52 or 53, based on ISO-8601, i.e., Monday is the first of the + week. + """ + + lookup_name = "week" + + +class ExtractWeekDay(Extract): + """ + Return Sunday=1 through Saturday=7. + + To replicate this in Python: (mydatetime.isoweekday() % 7) + 1 + """ + + lookup_name = "week_day" + + +class ExtractIsoWeekDay(Extract): + """Return Monday=1 through Sunday=7, based on ISO-8601.""" + + lookup_name = "iso_week_day" + + +class ExtractQuarter(Extract): + lookup_name = "quarter" + + +class ExtractHour(Extract): + lookup_name = "hour" + + +class ExtractMinute(Extract): + lookup_name = "minute" + + +class ExtractSecond(Extract): + lookup_name = "second" + + +DateField.register_lookup(ExtractYear) +DateField.register_lookup(ExtractMonth) +DateField.register_lookup(ExtractDay) +DateField.register_lookup(ExtractWeekDay) +DateField.register_lookup(ExtractIsoWeekDay) +DateField.register_lookup(ExtractWeek) +DateField.register_lookup(ExtractIsoYear) +DateField.register_lookup(ExtractQuarter) + +TimeField.register_lookup(ExtractHour) +TimeField.register_lookup(ExtractMinute) +TimeField.register_lookup(ExtractSecond) + +DateTimeField.register_lookup(ExtractHour) +DateTimeField.register_lookup(ExtractMinute) +DateTimeField.register_lookup(ExtractSecond) + +ExtractYear.register_lookup(YearExact) +ExtractYear.register_lookup(YearGt) +ExtractYear.register_lookup(YearGte) +ExtractYear.register_lookup(YearLt) +ExtractYear.register_lookup(YearLte) + +ExtractIsoYear.register_lookup(YearExact) +ExtractIsoYear.register_lookup(YearGt) +ExtractIsoYear.register_lookup(YearGte) +ExtractIsoYear.register_lookup(YearLt) +ExtractIsoYear.register_lookup(YearLte) + + +class Now(Func): + template = "CURRENT_TIMESTAMP" + output_field = DateTimeField() + + def as_postgresql(self, compiler, connection, **extra_context): + # PostgreSQL's CURRENT_TIMESTAMP means "the time at the start of the + # transaction". Use STATEMENT_TIMESTAMP to be cross-compatible with + # other databases. + return self.as_sql( + compiler, connection, template="STATEMENT_TIMESTAMP()", **extra_context + ) + + +class TruncBase(TimezoneMixin, Transform): + kind = None + tzinfo = None + + # RemovedInDjango50Warning: when the deprecation ends, remove is_dst + # argument. + def __init__( + self, + expression, + output_field=None, + tzinfo=None, + is_dst=timezone.NOT_PASSED, + **extra, + ): + self.tzinfo = tzinfo + self.is_dst = is_dst + super().__init__(expression, output_field=output_field, **extra) + + def as_sql(self, compiler, connection): + if not connection.ops.extract_trunc_lookup_pattern.fullmatch(self.kind): + raise ValueError("Invalid kind: %s" % self.kind) + inner_sql, inner_params = compiler.compile(self.lhs) + tzname = None + if isinstance(self.lhs.output_field, DateTimeField): + tzname = self.get_tzname() + elif self.tzinfo is not None: + raise ValueError("tzinfo can only be used with DateTimeField.") + if isinstance(self.output_field, DateTimeField): + sql = connection.ops.datetime_trunc_sql(self.kind, inner_sql, tzname) + elif isinstance(self.output_field, DateField): + sql = connection.ops.date_trunc_sql(self.kind, inner_sql, tzname) + elif isinstance(self.output_field, TimeField): + sql = connection.ops.time_trunc_sql(self.kind, inner_sql, tzname) + else: + raise ValueError( + "Trunc only valid on DateField, TimeField, or DateTimeField." + ) + return sql, inner_params + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + copy = super().resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + field = copy.lhs.output_field + # DateTimeField is a subclass of DateField so this works for both. + if not isinstance(field, (DateField, TimeField)): + raise TypeError( + "%r isn't a DateField, TimeField, or DateTimeField." % field.name + ) + # If self.output_field was None, then accessing the field will trigger + # the resolver to assign it to self.lhs.output_field. + if not isinstance(copy.output_field, (DateField, DateTimeField, TimeField)): + raise ValueError( + "output_field must be either DateField, TimeField, or DateTimeField" + ) + # Passing dates or times to functions expecting datetimes is most + # likely a mistake. + class_output_field = ( + self.__class__.output_field + if isinstance(self.__class__.output_field, Field) + else None + ) + output_field = class_output_field or copy.output_field + has_explicit_output_field = ( + class_output_field or field.__class__ is not copy.output_field.__class__ + ) + if type(field) == DateField and ( + isinstance(output_field, DateTimeField) + or copy.kind in ("hour", "minute", "second", "time") + ): + raise ValueError( + "Cannot truncate DateField '%s' to %s." + % ( + field.name, + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField", + ) + ) + elif isinstance(field, TimeField) and ( + isinstance(output_field, DateTimeField) + or copy.kind in ("year", "quarter", "month", "week", "day", "date") + ): + raise ValueError( + "Cannot truncate TimeField '%s' to %s." + % ( + field.name, + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField", + ) + ) + return copy + + def convert_value(self, value, expression, connection): + if isinstance(self.output_field, DateTimeField): + if not settings.USE_TZ: + pass + elif value is not None: + value = value.replace(tzinfo=None) + value = timezone.make_aware(value, self.tzinfo, is_dst=self.is_dst) + elif not connection.features.has_zoneinfo_database: + raise ValueError( + "Database returned an invalid datetime value. Are time " + "zone definitions for your database installed?" + ) + elif isinstance(value, datetime): + if value is None: + pass + elif isinstance(self.output_field, DateField): + value = value.date() + elif isinstance(self.output_field, TimeField): + value = value.time() + return value + + +class Trunc(TruncBase): + + # RemovedInDjango50Warning: when the deprecation ends, remove is_dst + # argument. + def __init__( + self, + expression, + kind, + output_field=None, + tzinfo=None, + is_dst=timezone.NOT_PASSED, + **extra, + ): + self.kind = kind + super().__init__( + expression, output_field=output_field, tzinfo=tzinfo, is_dst=is_dst, **extra + ) + + +class TruncYear(TruncBase): + kind = "year" + + +class TruncQuarter(TruncBase): + kind = "quarter" + + +class TruncMonth(TruncBase): + kind = "month" + + +class TruncWeek(TruncBase): + """Truncate to midnight on the Monday of the week.""" + + kind = "week" + + +class TruncDay(TruncBase): + kind = "day" + + +class TruncDate(TruncBase): + kind = "date" + lookup_name = "date" + output_field = DateField() + + def as_sql(self, compiler, connection): + # Cast to date rather than truncate to date. + lhs, lhs_params = compiler.compile(self.lhs) + tzname = self.get_tzname() + sql = connection.ops.datetime_cast_date_sql(lhs, tzname) + return sql, lhs_params + + +class TruncTime(TruncBase): + kind = "time" + lookup_name = "time" + output_field = TimeField() + + def as_sql(self, compiler, connection): + # Cast to time rather than truncate to time. + lhs, lhs_params = compiler.compile(self.lhs) + tzname = self.get_tzname() + sql = connection.ops.datetime_cast_time_sql(lhs, tzname) + return sql, lhs_params + + +class TruncHour(TruncBase): + kind = "hour" + + +class TruncMinute(TruncBase): + kind = "minute" + + +class TruncSecond(TruncBase): + kind = "second" + + +DateTimeField.register_lookup(TruncDate) +DateTimeField.register_lookup(TruncTime) diff --git a/venv/Lib/site-packages/django/db/models/functions/math.py b/venv/Lib/site-packages/django/db/models/functions/math.py new file mode 100644 index 000000000..8b5fd79c3 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/math.py @@ -0,0 +1,212 @@ +import math + +from django.db.models.expressions import Func, Value +from django.db.models.fields import FloatField, IntegerField +from django.db.models.functions import Cast +from django.db.models.functions.mixins import ( + FixDecimalInputMixin, + NumericOutputFieldMixin, +) +from django.db.models.lookups import Transform + + +class Abs(Transform): + function = "ABS" + lookup_name = "abs" + + +class ACos(NumericOutputFieldMixin, Transform): + function = "ACOS" + lookup_name = "acos" + + +class ASin(NumericOutputFieldMixin, Transform): + function = "ASIN" + lookup_name = "asin" + + +class ATan(NumericOutputFieldMixin, Transform): + function = "ATAN" + lookup_name = "atan" + + +class ATan2(NumericOutputFieldMixin, Func): + function = "ATAN2" + arity = 2 + + def as_sqlite(self, compiler, connection, **extra_context): + if not getattr( + connection.ops, "spatialite", False + ) or connection.ops.spatial_version >= (5, 0, 0): + return self.as_sql(compiler, connection) + # This function is usually ATan2(y, x), returning the inverse tangent + # of y / x, but it's ATan2(x, y) on SpatiaLite < 5.0.0. + # Cast integers to float to avoid inconsistent/buggy behavior if the + # arguments are mixed between integer and float or decimal. + # https://www.gaia-gis.it/fossil/libspatialite/tktview?name=0f72cca3a2 + clone = self.copy() + clone.set_source_expressions( + [ + Cast(expression, FloatField()) + if isinstance(expression.output_field, IntegerField) + else expression + for expression in self.get_source_expressions()[::-1] + ] + ) + return clone.as_sql(compiler, connection, **extra_context) + + +class Ceil(Transform): + function = "CEILING" + lookup_name = "ceil" + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="CEIL", **extra_context) + + +class Cos(NumericOutputFieldMixin, Transform): + function = "COS" + lookup_name = "cos" + + +class Cot(NumericOutputFieldMixin, Transform): + function = "COT" + lookup_name = "cot" + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, connection, template="(1 / TAN(%(expressions)s))", **extra_context + ) + + +class Degrees(NumericOutputFieldMixin, Transform): + function = "DEGREES" + lookup_name = "degrees" + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, + connection, + template="((%%(expressions)s) * 180 / %s)" % math.pi, + **extra_context, + ) + + +class Exp(NumericOutputFieldMixin, Transform): + function = "EXP" + lookup_name = "exp" + + +class Floor(Transform): + function = "FLOOR" + lookup_name = "floor" + + +class Ln(NumericOutputFieldMixin, Transform): + function = "LN" + lookup_name = "ln" + + +class Log(FixDecimalInputMixin, NumericOutputFieldMixin, Func): + function = "LOG" + arity = 2 + + def as_sqlite(self, compiler, connection, **extra_context): + if not getattr(connection.ops, "spatialite", False): + return self.as_sql(compiler, connection) + # This function is usually Log(b, x) returning the logarithm of x to + # the base b, but on SpatiaLite it's Log(x, b). + clone = self.copy() + clone.set_source_expressions(self.get_source_expressions()[::-1]) + return clone.as_sql(compiler, connection, **extra_context) + + +class Mod(FixDecimalInputMixin, NumericOutputFieldMixin, Func): + function = "MOD" + arity = 2 + + +class Pi(NumericOutputFieldMixin, Func): + function = "PI" + arity = 0 + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, connection, template=str(math.pi), **extra_context + ) + + +class Power(NumericOutputFieldMixin, Func): + function = "POWER" + arity = 2 + + +class Radians(NumericOutputFieldMixin, Transform): + function = "RADIANS" + lookup_name = "radians" + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, + connection, + template="((%%(expressions)s) * %s / 180)" % math.pi, + **extra_context, + ) + + +class Random(NumericOutputFieldMixin, Func): + function = "RANDOM" + arity = 0 + + def as_mysql(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="RAND", **extra_context) + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, connection, function="DBMS_RANDOM.VALUE", **extra_context + ) + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="RAND", **extra_context) + + def get_group_by_cols(self, alias=None): + return [] + + +class Round(FixDecimalInputMixin, Transform): + function = "ROUND" + lookup_name = "round" + arity = None # Override Transform's arity=1 to enable passing precision. + + def __init__(self, expression, precision=0, **extra): + super().__init__(expression, precision, **extra) + + def as_sqlite(self, compiler, connection, **extra_context): + precision = self.get_source_expressions()[1] + if isinstance(precision, Value) and precision.value < 0: + raise ValueError("SQLite does not support negative precision.") + return super().as_sqlite(compiler, connection, **extra_context) + + def _resolve_output_field(self): + source = self.get_source_expressions()[0] + return source.output_field + + +class Sign(Transform): + function = "SIGN" + lookup_name = "sign" + + +class Sin(NumericOutputFieldMixin, Transform): + function = "SIN" + lookup_name = "sin" + + +class Sqrt(NumericOutputFieldMixin, Transform): + function = "SQRT" + lookup_name = "sqrt" + + +class Tan(NumericOutputFieldMixin, Transform): + function = "TAN" + lookup_name = "tan" diff --git a/venv/Lib/site-packages/django/db/models/functions/mixins.py b/venv/Lib/site-packages/django/db/models/functions/mixins.py new file mode 100644 index 000000000..caf20e131 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/mixins.py @@ -0,0 +1,57 @@ +import sys + +from django.db.models.fields import DecimalField, FloatField, IntegerField +from django.db.models.functions import Cast + + +class FixDecimalInputMixin: + def as_postgresql(self, compiler, connection, **extra_context): + # Cast FloatField to DecimalField as PostgreSQL doesn't support the + # following function signatures: + # - LOG(double, double) + # - MOD(double, double) + output_field = DecimalField(decimal_places=sys.float_info.dig, max_digits=1000) + clone = self.copy() + clone.set_source_expressions( + [ + Cast(expression, output_field) + if isinstance(expression.output_field, FloatField) + else expression + for expression in self.get_source_expressions() + ] + ) + return clone.as_sql(compiler, connection, **extra_context) + + +class FixDurationInputMixin: + def as_mysql(self, compiler, connection, **extra_context): + sql, params = super().as_sql(compiler, connection, **extra_context) + if self.output_field.get_internal_type() == "DurationField": + sql = "CAST(%s AS SIGNED)" % sql + return sql, params + + def as_oracle(self, compiler, connection, **extra_context): + if self.output_field.get_internal_type() == "DurationField": + expression = self.get_source_expressions()[0] + options = self._get_repr_options() + from django.db.backends.oracle.functions import ( + IntervalToSeconds, + SecondsToInterval, + ) + + return compiler.compile( + SecondsToInterval( + self.__class__(IntervalToSeconds(expression), **options) + ) + ) + return super().as_sql(compiler, connection, **extra_context) + + +class NumericOutputFieldMixin: + def _resolve_output_field(self): + source_fields = self.get_source_fields() + if any(isinstance(s, DecimalField) for s in source_fields): + return DecimalField() + if any(isinstance(s, IntegerField) for s in source_fields): + return FloatField() + return super()._resolve_output_field() if source_fields else FloatField() diff --git a/venv/Lib/site-packages/django/db/models/functions/text.py b/venv/Lib/site-packages/django/db/models/functions/text.py new file mode 100644 index 000000000..a54ce8f19 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/text.py @@ -0,0 +1,351 @@ +from django.db import NotSupportedError +from django.db.models.expressions import Func, Value +from django.db.models.fields import CharField, IntegerField +from django.db.models.functions import Coalesce +from django.db.models.lookups import Transform + + +class MySQLSHA2Mixin: + def as_mysql(self, compiler, connection, **extra_content): + return super().as_sql( + compiler, + connection, + template="SHA2(%%(expressions)s, %s)" % self.function[3:], + **extra_content, + ) + + +class OracleHashMixin: + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, + connection, + template=( + "LOWER(RAWTOHEX(STANDARD_HASH(UTL_I18N.STRING_TO_RAW(" + "%(expressions)s, 'AL32UTF8'), '%(function)s')))" + ), + **extra_context, + ) + + +class PostgreSQLSHAMixin: + def as_postgresql(self, compiler, connection, **extra_content): + return super().as_sql( + compiler, + connection, + template="ENCODE(DIGEST(%(expressions)s, '%(function)s'), 'hex')", + function=self.function.lower(), + **extra_content, + ) + + +class Chr(Transform): + function = "CHR" + lookup_name = "chr" + + def as_mysql(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, + connection, + function="CHAR", + template="%(function)s(%(expressions)s USING utf16)", + **extra_context, + ) + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, + connection, + template="%(function)s(%(expressions)s USING NCHAR_CS)", + **extra_context, + ) + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="CHAR", **extra_context) + + +class ConcatPair(Func): + """ + Concatenate two arguments together. This is used by `Concat` because not + all backend databases support more than two arguments. + """ + + function = "CONCAT" + + def as_sqlite(self, compiler, connection, **extra_context): + coalesced = self.coalesce() + return super(ConcatPair, coalesced).as_sql( + compiler, + connection, + template="%(expressions)s", + arg_joiner=" || ", + **extra_context, + ) + + def as_mysql(self, compiler, connection, **extra_context): + # Use CONCAT_WS with an empty separator so that NULLs are ignored. + return super().as_sql( + compiler, + connection, + function="CONCAT_WS", + template="%(function)s('', %(expressions)s)", + **extra_context, + ) + + def coalesce(self): + # null on either side results in null for expression, wrap with coalesce + c = self.copy() + c.set_source_expressions( + [ + Coalesce(expression, Value("")) + for expression in c.get_source_expressions() + ] + ) + return c + + +class Concat(Func): + """ + Concatenate text fields together. Backends that result in an entire + null expression when any arguments are null will wrap each argument in + coalesce functions to ensure a non-null result. + """ + + function = None + template = "%(expressions)s" + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError("Concat must take at least two expressions") + paired = self._paired(expressions) + super().__init__(paired, **extra) + + def _paired(self, expressions): + # wrap pairs of expressions in successive concat functions + # exp = [a, b, c, d] + # -> ConcatPair(a, ConcatPair(b, ConcatPair(c, d)))) + if len(expressions) == 2: + return ConcatPair(*expressions) + return ConcatPair(expressions[0], self._paired(expressions[1:])) + + +class Left(Func): + function = "LEFT" + arity = 2 + output_field = CharField() + + def __init__(self, expression, length, **extra): + """ + expression: the name of a field, or an expression returning a string + length: the number of characters to return from the start of the string + """ + if not hasattr(length, "resolve_expression"): + if length < 1: + raise ValueError("'length' must be greater than 0.") + super().__init__(expression, length, **extra) + + def get_substr(self): + return Substr(self.source_expressions[0], Value(1), self.source_expressions[1]) + + def as_oracle(self, compiler, connection, **extra_context): + return self.get_substr().as_oracle(compiler, connection, **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + return self.get_substr().as_sqlite(compiler, connection, **extra_context) + + +class Length(Transform): + """Return the number of characters in the expression.""" + + function = "LENGTH" + lookup_name = "length" + output_field = IntegerField() + + def as_mysql(self, compiler, connection, **extra_context): + return super().as_sql( + compiler, connection, function="CHAR_LENGTH", **extra_context + ) + + +class Lower(Transform): + function = "LOWER" + lookup_name = "lower" + + +class LPad(Func): + function = "LPAD" + output_field = CharField() + + def __init__(self, expression, length, fill_text=Value(" "), **extra): + if ( + not hasattr(length, "resolve_expression") + and length is not None + and length < 0 + ): + raise ValueError("'length' must be greater or equal to 0.") + super().__init__(expression, length, fill_text, **extra) + + +class LTrim(Transform): + function = "LTRIM" + lookup_name = "ltrim" + + +class MD5(OracleHashMixin, Transform): + function = "MD5" + lookup_name = "md5" + + +class Ord(Transform): + function = "ASCII" + lookup_name = "ord" + output_field = IntegerField() + + def as_mysql(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="ORD", **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="UNICODE", **extra_context) + + +class Repeat(Func): + function = "REPEAT" + output_field = CharField() + + def __init__(self, expression, number, **extra): + if ( + not hasattr(number, "resolve_expression") + and number is not None + and number < 0 + ): + raise ValueError("'number' must be greater or equal to 0.") + super().__init__(expression, number, **extra) + + def as_oracle(self, compiler, connection, **extra_context): + expression, number = self.source_expressions + length = None if number is None else Length(expression) * number + rpad = RPad(expression, length, expression) + return rpad.as_sql(compiler, connection, **extra_context) + + +class Replace(Func): + function = "REPLACE" + + def __init__(self, expression, text, replacement=Value(""), **extra): + super().__init__(expression, text, replacement, **extra) + + +class Reverse(Transform): + function = "REVERSE" + lookup_name = "reverse" + + def as_oracle(self, compiler, connection, **extra_context): + # REVERSE in Oracle is undocumented and doesn't support multi-byte + # strings. Use a special subquery instead. + return super().as_sql( + compiler, + connection, + template=( + "(SELECT LISTAGG(s) WITHIN GROUP (ORDER BY n DESC) FROM " + "(SELECT LEVEL n, SUBSTR(%(expressions)s, LEVEL, 1) s " + "FROM DUAL CONNECT BY LEVEL <= LENGTH(%(expressions)s)) " + "GROUP BY %(expressions)s)" + ), + **extra_context, + ) + + +class Right(Left): + function = "RIGHT" + + def get_substr(self): + return Substr( + self.source_expressions[0], self.source_expressions[1] * Value(-1) + ) + + +class RPad(LPad): + function = "RPAD" + + +class RTrim(Transform): + function = "RTRIM" + lookup_name = "rtrim" + + +class SHA1(OracleHashMixin, PostgreSQLSHAMixin, Transform): + function = "SHA1" + lookup_name = "sha1" + + +class SHA224(MySQLSHA2Mixin, PostgreSQLSHAMixin, Transform): + function = "SHA224" + lookup_name = "sha224" + + def as_oracle(self, compiler, connection, **extra_context): + raise NotSupportedError("SHA224 is not supported on Oracle.") + + +class SHA256(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): + function = "SHA256" + lookup_name = "sha256" + + +class SHA384(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): + function = "SHA384" + lookup_name = "sha384" + + +class SHA512(MySQLSHA2Mixin, OracleHashMixin, PostgreSQLSHAMixin, Transform): + function = "SHA512" + lookup_name = "sha512" + + +class StrIndex(Func): + """ + Return a positive integer corresponding to the 1-indexed position of the + first occurrence of a substring inside another string, or 0 if the + substring is not found. + """ + + function = "INSTR" + arity = 2 + output_field = IntegerField() + + def as_postgresql(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="STRPOS", **extra_context) + + +class Substr(Func): + function = "SUBSTRING" + output_field = CharField() + + def __init__(self, expression, pos, length=None, **extra): + """ + expression: the name of a field, or an expression returning a string + pos: an integer > 0, or an expression returning an integer + length: an optional number of characters to return + """ + if not hasattr(pos, "resolve_expression"): + if pos < 1: + raise ValueError("'pos' must be greater than 0") + expressions = [expression, pos] + if length is not None: + expressions.append(length) + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="SUBSTR", **extra_context) + + def as_oracle(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function="SUBSTR", **extra_context) + + +class Trim(Transform): + function = "TRIM" + lookup_name = "trim" + + +class Upper(Transform): + function = "UPPER" + lookup_name = "upper" diff --git a/venv/Lib/site-packages/django/db/models/functions/window.py b/venv/Lib/site-packages/django/db/models/functions/window.py new file mode 100644 index 000000000..671017aba --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/functions/window.py @@ -0,0 +1,120 @@ +from django.db.models.expressions import Func +from django.db.models.fields import FloatField, IntegerField + +__all__ = [ + "CumeDist", + "DenseRank", + "FirstValue", + "Lag", + "LastValue", + "Lead", + "NthValue", + "Ntile", + "PercentRank", + "Rank", + "RowNumber", +] + + +class CumeDist(Func): + function = "CUME_DIST" + output_field = FloatField() + window_compatible = True + + +class DenseRank(Func): + function = "DENSE_RANK" + output_field = IntegerField() + window_compatible = True + + +class FirstValue(Func): + arity = 1 + function = "FIRST_VALUE" + window_compatible = True + + +class LagLeadFunction(Func): + window_compatible = True + + def __init__(self, expression, offset=1, default=None, **extra): + if expression is None: + raise ValueError( + "%s requires a non-null source expression." % self.__class__.__name__ + ) + if offset is None or offset <= 0: + raise ValueError( + "%s requires a positive integer for the offset." + % self.__class__.__name__ + ) + args = (expression, offset) + if default is not None: + args += (default,) + super().__init__(*args, **extra) + + def _resolve_output_field(self): + sources = self.get_source_expressions() + return sources[0].output_field + + +class Lag(LagLeadFunction): + function = "LAG" + + +class LastValue(Func): + arity = 1 + function = "LAST_VALUE" + window_compatible = True + + +class Lead(LagLeadFunction): + function = "LEAD" + + +class NthValue(Func): + function = "NTH_VALUE" + window_compatible = True + + def __init__(self, expression, nth=1, **extra): + if expression is None: + raise ValueError( + "%s requires a non-null source expression." % self.__class__.__name__ + ) + if nth is None or nth <= 0: + raise ValueError( + "%s requires a positive integer as for nth." % self.__class__.__name__ + ) + super().__init__(expression, nth, **extra) + + def _resolve_output_field(self): + sources = self.get_source_expressions() + return sources[0].output_field + + +class Ntile(Func): + function = "NTILE" + output_field = IntegerField() + window_compatible = True + + def __init__(self, num_buckets=1, **extra): + if num_buckets <= 0: + raise ValueError("num_buckets must be greater than 0.") + super().__init__(num_buckets, **extra) + + +class PercentRank(Func): + function = "PERCENT_RANK" + output_field = FloatField() + window_compatible = True + + +class Rank(Func): + function = "RANK" + output_field = IntegerField() + window_compatible = True + + +class RowNumber(Func): + function = "ROW_NUMBER" + output_field = IntegerField() + window_compatible = True diff --git a/venv/Lib/site-packages/django/db/models/indexes.py b/venv/Lib/site-packages/django/db/models/indexes.py new file mode 100644 index 000000000..3c2b699cc --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/indexes.py @@ -0,0 +1,292 @@ +from django.db.backends.utils import names_digest, split_identifier +from django.db.models.expressions import Col, ExpressionList, F, Func, OrderBy +from django.db.models.functions import Collate +from django.db.models.query_utils import Q +from django.db.models.sql import Query +from django.utils.functional import partition + +__all__ = ["Index"] + + +class Index: + suffix = "idx" + # The max length of the name of the index (restricted to 30 for + # cross-database compatibility with Oracle) + max_name_length = 30 + + def __init__( + self, + *expressions, + fields=(), + name=None, + db_tablespace=None, + opclasses=(), + condition=None, + include=None, + ): + if opclasses and not name: + raise ValueError("An index must be named to use opclasses.") + if not isinstance(condition, (type(None), Q)): + raise ValueError("Index.condition must be a Q instance.") + if condition and not name: + raise ValueError("An index must be named to use condition.") + if not isinstance(fields, (list, tuple)): + raise ValueError("Index.fields must be a list or tuple.") + if not isinstance(opclasses, (list, tuple)): + raise ValueError("Index.opclasses must be a list or tuple.") + if not expressions and not fields: + raise ValueError( + "At least one field or expression is required to define an index." + ) + if expressions and fields: + raise ValueError( + "Index.fields and expressions are mutually exclusive.", + ) + if expressions and not name: + raise ValueError("An index must be named to use expressions.") + if expressions and opclasses: + raise ValueError( + "Index.opclasses cannot be used with expressions. Use " + "django.contrib.postgres.indexes.OpClass() instead." + ) + if opclasses and len(fields) != len(opclasses): + raise ValueError( + "Index.fields and Index.opclasses must have the same number of " + "elements." + ) + if fields and not all(isinstance(field, str) for field in fields): + raise ValueError("Index.fields must contain only strings with field names.") + if include and not name: + raise ValueError("A covering index must be named.") + if not isinstance(include, (type(None), list, tuple)): + raise ValueError("Index.include must be a list or tuple.") + self.fields = list(fields) + # A list of 2-tuple with the field name and ordering ('' or 'DESC'). + self.fields_orders = [ + (field_name[1:], "DESC") if field_name.startswith("-") else (field_name, "") + for field_name in self.fields + ] + self.name = name or "" + self.db_tablespace = db_tablespace + self.opclasses = opclasses + self.condition = condition + self.include = tuple(include) if include else () + self.expressions = tuple( + F(expression) if isinstance(expression, str) else expression + for expression in expressions + ) + + @property + def contains_expressions(self): + return bool(self.expressions) + + def _get_condition_sql(self, model, schema_editor): + if self.condition is None: + return None + query = Query(model=model, alias_cols=False) + where = query.build_where(self.condition) + compiler = query.get_compiler(connection=schema_editor.connection) + sql, params = where.as_sql(compiler, schema_editor.connection) + return sql % tuple(schema_editor.quote_value(p) for p in params) + + def create_sql(self, model, schema_editor, using="", **kwargs): + include = [ + model._meta.get_field(field_name).column for field_name in self.include + ] + condition = self._get_condition_sql(model, schema_editor) + if self.expressions: + index_expressions = [] + for expression in self.expressions: + index_expression = IndexExpression(expression) + index_expression.set_wrapper_classes(schema_editor.connection) + index_expressions.append(index_expression) + expressions = ExpressionList(*index_expressions).resolve_expression( + Query(model, alias_cols=False), + ) + fields = None + col_suffixes = None + else: + fields = [ + model._meta.get_field(field_name) + for field_name, _ in self.fields_orders + ] + col_suffixes = [order[1] for order in self.fields_orders] + expressions = None + return schema_editor._create_index_sql( + model, + fields=fields, + name=self.name, + using=using, + db_tablespace=self.db_tablespace, + col_suffixes=col_suffixes, + opclasses=self.opclasses, + condition=condition, + include=include, + expressions=expressions, + **kwargs, + ) + + def remove_sql(self, model, schema_editor, **kwargs): + return schema_editor._delete_index_sql(model, self.name, **kwargs) + + def deconstruct(self): + path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) + path = path.replace("django.db.models.indexes", "django.db.models") + kwargs = {"name": self.name} + if self.fields: + kwargs["fields"] = self.fields + if self.db_tablespace is not None: + kwargs["db_tablespace"] = self.db_tablespace + if self.opclasses: + kwargs["opclasses"] = self.opclasses + if self.condition: + kwargs["condition"] = self.condition + if self.include: + kwargs["include"] = self.include + return (path, self.expressions, kwargs) + + def clone(self): + """Create a copy of this Index.""" + _, args, kwargs = self.deconstruct() + return self.__class__(*args, **kwargs) + + def set_name_with_model(self, model): + """ + Generate a unique name for the index. + + The name is divided into 3 parts - table name (12 chars), field name + (8 chars) and unique hash + suffix (10 chars). Each part is made to + fit its size by truncating the excess length. + """ + _, table_name = split_identifier(model._meta.db_table) + column_names = [ + model._meta.get_field(field_name).column + for field_name, order in self.fields_orders + ] + column_names_with_order = [ + (("-%s" if order else "%s") % column_name) + for column_name, (field_name, order) in zip( + column_names, self.fields_orders + ) + ] + # The length of the parts of the name is based on the default max + # length of 30 characters. + hash_data = [table_name] + column_names_with_order + [self.suffix] + self.name = "%s_%s_%s" % ( + table_name[:11], + column_names[0][:7], + "%s_%s" % (names_digest(*hash_data, length=6), self.suffix), + ) + if len(self.name) > self.max_name_length: + raise ValueError( + "Index too long for multiple database support. Is self.suffix " + "longer than 3 characters?" + ) + if self.name[0] == "_" or self.name[0].isdigit(): + self.name = "D%s" % self.name[1:] + + def __repr__(self): + return "<%s:%s%s%s%s%s%s%s>" % ( + self.__class__.__qualname__, + "" if not self.fields else " fields=%s" % repr(self.fields), + "" if not self.expressions else " expressions=%s" % repr(self.expressions), + "" if not self.name else " name=%s" % repr(self.name), + "" + if self.db_tablespace is None + else " db_tablespace=%s" % repr(self.db_tablespace), + "" if self.condition is None else " condition=%s" % self.condition, + "" if not self.include else " include=%s" % repr(self.include), + "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), + ) + + def __eq__(self, other): + if self.__class__ == other.__class__: + return self.deconstruct() == other.deconstruct() + return NotImplemented + + +class IndexExpression(Func): + """Order and wrap expressions for CREATE INDEX statements.""" + + template = "%(expressions)s" + wrapper_classes = (OrderBy, Collate) + + def set_wrapper_classes(self, connection=None): + # Some databases (e.g. MySQL) treats COLLATE as an indexed expression. + if connection and connection.features.collate_as_index_expression: + self.wrapper_classes = tuple( + [ + wrapper_cls + for wrapper_cls in self.wrapper_classes + if wrapper_cls is not Collate + ] + ) + + @classmethod + def register_wrappers(cls, *wrapper_classes): + cls.wrapper_classes = wrapper_classes + + def resolve_expression( + self, + query=None, + allow_joins=True, + reuse=None, + summarize=False, + for_save=False, + ): + expressions = list(self.flatten()) + # Split expressions and wrappers. + index_expressions, wrappers = partition( + lambda e: isinstance(e, self.wrapper_classes), + expressions, + ) + wrapper_types = [type(wrapper) for wrapper in wrappers] + if len(wrapper_types) != len(set(wrapper_types)): + raise ValueError( + "Multiple references to %s can't be used in an indexed " + "expression." + % ", ".join( + [wrapper_cls.__qualname__ for wrapper_cls in self.wrapper_classes] + ) + ) + if expressions[1 : len(wrappers) + 1] != wrappers: + raise ValueError( + "%s must be topmost expressions in an indexed expression." + % ", ".join( + [wrapper_cls.__qualname__ for wrapper_cls in self.wrapper_classes] + ) + ) + # Wrap expressions in parentheses if they are not column references. + root_expression = index_expressions[1] + resolve_root_expression = root_expression.resolve_expression( + query, + allow_joins, + reuse, + summarize, + for_save, + ) + if not isinstance(resolve_root_expression, Col): + root_expression = Func(root_expression, template="(%(expressions)s)") + + if wrappers: + # Order wrappers and set their expressions. + wrappers = sorted( + wrappers, + key=lambda w: self.wrapper_classes.index(type(w)), + ) + wrappers = [wrapper.copy() for wrapper in wrappers] + for i, wrapper in enumerate(wrappers[:-1]): + wrapper.set_source_expressions([wrappers[i + 1]]) + # Set the root expression on the deepest wrapper. + wrappers[-1].set_source_expressions([root_expression]) + self.set_source_expressions([wrappers[0]]) + else: + # Use the root expression, if there are no wrappers. + self.set_source_expressions([root_expression]) + return super().resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + + def as_sqlite(self, compiler, connection, **extra_context): + # Casting to numeric is unnecessary. + return self.as_sql(compiler, connection, **extra_context) diff --git a/venv/Lib/site-packages/django/db/models/lookups.py b/venv/Lib/site-packages/django/db/models/lookups.py new file mode 100644 index 000000000..9ee49f2af --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/lookups.py @@ -0,0 +1,727 @@ +import itertools +import math + +from django.core.exceptions import EmptyResultSet +from django.db.models.expressions import Case, Expression, Func, Value, When +from django.db.models.fields import ( + BooleanField, + CharField, + DateTimeField, + Field, + IntegerField, + UUIDField, +) +from django.db.models.query_utils import RegisterLookupMixin +from django.utils.datastructures import OrderedSet +from django.utils.functional import cached_property +from django.utils.hashable import make_hashable + + +class Lookup(Expression): + lookup_name = None + prepare_rhs = True + can_use_none_as_rhs = False + + def __init__(self, lhs, rhs): + self.lhs, self.rhs = lhs, rhs + self.rhs = self.get_prep_lookup() + self.lhs = self.get_prep_lhs() + if hasattr(self.lhs, "get_bilateral_transforms"): + bilateral_transforms = self.lhs.get_bilateral_transforms() + else: + bilateral_transforms = [] + if bilateral_transforms: + # Warn the user as soon as possible if they are trying to apply + # a bilateral transformation on a nested QuerySet: that won't work. + from django.db.models.sql.query import Query # avoid circular import + + if isinstance(rhs, Query): + raise NotImplementedError( + "Bilateral transformations on nested querysets are not implemented." + ) + self.bilateral_transforms = bilateral_transforms + + def apply_bilateral_transforms(self, value): + for transform in self.bilateral_transforms: + value = transform(value) + return value + + def __repr__(self): + return f"{self.__class__.__name__}({self.lhs!r}, {self.rhs!r})" + + def batch_process_rhs(self, compiler, connection, rhs=None): + if rhs is None: + rhs = self.rhs + if self.bilateral_transforms: + sqls, sqls_params = [], [] + for p in rhs: + value = Value(p, output_field=self.lhs.output_field) + value = self.apply_bilateral_transforms(value) + value = value.resolve_expression(compiler.query) + sql, sql_params = compiler.compile(value) + sqls.append(sql) + sqls_params.extend(sql_params) + else: + _, params = self.get_db_prep_lookup(rhs, connection) + sqls, sqls_params = ["%s"] * len(params), params + return sqls, sqls_params + + def get_source_expressions(self): + if self.rhs_is_direct_value(): + return [self.lhs] + return [self.lhs, self.rhs] + + def set_source_expressions(self, new_exprs): + if len(new_exprs) == 1: + self.lhs = new_exprs[0] + else: + self.lhs, self.rhs = new_exprs + + def get_prep_lookup(self): + if not self.prepare_rhs or hasattr(self.rhs, "resolve_expression"): + return self.rhs + if hasattr(self.lhs, "output_field"): + if hasattr(self.lhs.output_field, "get_prep_value"): + return self.lhs.output_field.get_prep_value(self.rhs) + elif self.rhs_is_direct_value(): + return Value(self.rhs) + return self.rhs + + def get_prep_lhs(self): + if hasattr(self.lhs, "resolve_expression"): + return self.lhs + return Value(self.lhs) + + def get_db_prep_lookup(self, value, connection): + return ("%s", [value]) + + def process_lhs(self, compiler, connection, lhs=None): + lhs = lhs or self.lhs + if hasattr(lhs, "resolve_expression"): + lhs = lhs.resolve_expression(compiler.query) + sql, params = compiler.compile(lhs) + if isinstance(lhs, Lookup): + # Wrapped in parentheses to respect operator precedence. + sql = f"({sql})" + return sql, params + + def process_rhs(self, compiler, connection): + value = self.rhs + if self.bilateral_transforms: + if self.rhs_is_direct_value(): + # Do not call get_db_prep_lookup here as the value will be + # transformed before being used for lookup + value = Value(value, output_field=self.lhs.output_field) + value = self.apply_bilateral_transforms(value) + value = value.resolve_expression(compiler.query) + if hasattr(value, "as_sql"): + sql, params = compiler.compile(value) + # Ensure expression is wrapped in parentheses to respect operator + # precedence but avoid double wrapping as it can be misinterpreted + # on some backends (e.g. subqueries on SQLite). + if sql and sql[0] != "(": + sql = "(%s)" % sql + return sql, params + else: + return self.get_db_prep_lookup(value, connection) + + def rhs_is_direct_value(self): + return not hasattr(self.rhs, "as_sql") + + def get_group_by_cols(self, alias=None): + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + def as_oracle(self, compiler, connection): + # Oracle doesn't allow EXISTS() and filters to be compared to another + # expression unless they're wrapped in a CASE WHEN. + wrapped = False + exprs = [] + for expr in (self.lhs, self.rhs): + if connection.ops.conditional_expression_supported_in_where_clause(expr): + expr = Case(When(expr, then=True), default=False) + wrapped = True + exprs.append(expr) + lookup = type(self)(*exprs) if wrapped else self + return lookup.as_sql(compiler, connection) + + @cached_property + def output_field(self): + return BooleanField() + + @property + def identity(self): + return self.__class__, self.lhs, self.rhs + + def __eq__(self, other): + if not isinstance(other, Lookup): + return NotImplemented + return self.identity == other.identity + + def __hash__(self): + return hash(make_hashable(self.identity)) + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + c = self.copy() + c.is_summary = summarize + c.lhs = self.lhs.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + if hasattr(self.rhs, "resolve_expression"): + c.rhs = self.rhs.resolve_expression( + query, allow_joins, reuse, summarize, for_save + ) + return c + + def select_format(self, compiler, sql, params): + # Wrap filters with a CASE WHEN expression if a database backend + # (e.g. Oracle) doesn't support boolean expression in SELECT or GROUP + # BY list. + if not compiler.connection.features.supports_boolean_expr_in_select_clause: + sql = f"CASE WHEN {sql} THEN 1 ELSE 0 END" + return sql, params + + +class Transform(RegisterLookupMixin, Func): + """ + RegisterLookupMixin() is first so that get_lookup() and get_transform() + first examine self and then check output_field. + """ + + bilateral = False + arity = 1 + + @property + def lhs(self): + return self.get_source_expressions()[0] + + def get_bilateral_transforms(self): + if hasattr(self.lhs, "get_bilateral_transforms"): + bilateral_transforms = self.lhs.get_bilateral_transforms() + else: + bilateral_transforms = [] + if self.bilateral: + bilateral_transforms.append(self.__class__) + return bilateral_transforms + + +class BuiltinLookup(Lookup): + def process_lhs(self, compiler, connection, lhs=None): + lhs_sql, params = super().process_lhs(compiler, connection, lhs) + field_internal_type = self.lhs.output_field.get_internal_type() + db_type = self.lhs.output_field.db_type(connection=connection) + lhs_sql = connection.ops.field_cast_sql(db_type, field_internal_type) % lhs_sql + lhs_sql = ( + connection.ops.lookup_cast(self.lookup_name, field_internal_type) % lhs_sql + ) + return lhs_sql, list(params) + + def as_sql(self, compiler, connection): + lhs_sql, params = self.process_lhs(compiler, connection) + rhs_sql, rhs_params = self.process_rhs(compiler, connection) + params.extend(rhs_params) + rhs_sql = self.get_rhs_op(connection, rhs_sql) + return "%s %s" % (lhs_sql, rhs_sql), params + + def get_rhs_op(self, connection, rhs): + return connection.operators[self.lookup_name] % rhs + + +class FieldGetDbPrepValueMixin: + """ + Some lookups require Field.get_db_prep_value() to be called on their + inputs. + """ + + get_db_prep_lookup_value_is_iterable = False + + def get_db_prep_lookup(self, value, connection): + # For relational fields, use the 'target_field' attribute of the + # output_field. + field = getattr(self.lhs.output_field, "target_field", None) + get_db_prep_value = ( + getattr(field, "get_db_prep_value", None) + or self.lhs.output_field.get_db_prep_value + ) + return ( + "%s", + [get_db_prep_value(v, connection, prepared=True) for v in value] + if self.get_db_prep_lookup_value_is_iterable + else [get_db_prep_value(value, connection, prepared=True)], + ) + + +class FieldGetDbPrepValueIterableMixin(FieldGetDbPrepValueMixin): + """ + Some lookups require Field.get_db_prep_value() to be called on each value + in an iterable. + """ + + get_db_prep_lookup_value_is_iterable = True + + def get_prep_lookup(self): + if hasattr(self.rhs, "resolve_expression"): + return self.rhs + prepared_values = [] + for rhs_value in self.rhs: + if hasattr(rhs_value, "resolve_expression"): + # An expression will be handled by the database but can coexist + # alongside real values. + pass + elif self.prepare_rhs and hasattr(self.lhs.output_field, "get_prep_value"): + rhs_value = self.lhs.output_field.get_prep_value(rhs_value) + prepared_values.append(rhs_value) + return prepared_values + + def process_rhs(self, compiler, connection): + if self.rhs_is_direct_value(): + # rhs should be an iterable of values. Use batch_process_rhs() + # to prepare/transform those values. + return self.batch_process_rhs(compiler, connection) + else: + return super().process_rhs(compiler, connection) + + def resolve_expression_parameter(self, compiler, connection, sql, param): + params = [param] + if hasattr(param, "resolve_expression"): + param = param.resolve_expression(compiler.query) + if hasattr(param, "as_sql"): + sql, params = compiler.compile(param) + return sql, params + + def batch_process_rhs(self, compiler, connection, rhs=None): + pre_processed = super().batch_process_rhs(compiler, connection, rhs) + # The params list may contain expressions which compile to a + # sql/param pair. Zip them to get sql and param pairs that refer to the + # same argument and attempt to replace them with the result of + # compiling the param step. + sql, params = zip( + *( + self.resolve_expression_parameter(compiler, connection, sql, param) + for sql, param in zip(*pre_processed) + ) + ) + params = itertools.chain.from_iterable(params) + return sql, tuple(params) + + +class PostgresOperatorLookup(FieldGetDbPrepValueMixin, Lookup): + """Lookup defined by operators on PostgreSQL.""" + + postgres_operator = None + + def as_postgresql(self, compiler, connection): + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.process_rhs(compiler, connection) + params = tuple(lhs_params) + tuple(rhs_params) + return "%s %s %s" % (lhs, self.postgres_operator, rhs), params + + +@Field.register_lookup +class Exact(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = "exact" + + def process_rhs(self, compiler, connection): + from django.db.models.sql.query import Query + + if isinstance(self.rhs, Query): + if self.rhs.has_limit_one(): + if not self.rhs.has_select_fields: + self.rhs.clear_select_clause() + self.rhs.add_fields(["pk"]) + else: + raise ValueError( + "The QuerySet value for an exact lookup must be limited to " + "one result using slicing." + ) + return super().process_rhs(compiler, connection) + + def as_sql(self, compiler, connection): + # Avoid comparison against direct rhs if lhs is a boolean value. That + # turns "boolfield__exact=True" into "WHERE boolean_field" instead of + # "WHERE boolean_field = True" when allowed. + if ( + isinstance(self.rhs, bool) + and getattr(self.lhs, "conditional", False) + and connection.ops.conditional_expression_supported_in_where_clause( + self.lhs + ) + ): + lhs_sql, params = self.process_lhs(compiler, connection) + template = "%s" if self.rhs else "NOT %s" + return template % lhs_sql, params + return super().as_sql(compiler, connection) + + +@Field.register_lookup +class IExact(BuiltinLookup): + lookup_name = "iexact" + prepare_rhs = False + + def process_rhs(self, qn, connection): + rhs, params = super().process_rhs(qn, connection) + if params: + params[0] = connection.ops.prep_for_iexact_query(params[0]) + return rhs, params + + +@Field.register_lookup +class GreaterThan(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = "gt" + + +@Field.register_lookup +class GreaterThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = "gte" + + +@Field.register_lookup +class LessThan(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = "lt" + + +@Field.register_lookup +class LessThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = "lte" + + +class IntegerFieldFloatRounding: + """ + Allow floats to work as query values for IntegerField. Without this, the + decimal portion of the float would always be discarded. + """ + + def get_prep_lookup(self): + if isinstance(self.rhs, float): + self.rhs = math.ceil(self.rhs) + return super().get_prep_lookup() + + +@IntegerField.register_lookup +class IntegerGreaterThanOrEqual(IntegerFieldFloatRounding, GreaterThanOrEqual): + pass + + +@IntegerField.register_lookup +class IntegerLessThan(IntegerFieldFloatRounding, LessThan): + pass + + +@Field.register_lookup +class In(FieldGetDbPrepValueIterableMixin, BuiltinLookup): + lookup_name = "in" + + def process_rhs(self, compiler, connection): + db_rhs = getattr(self.rhs, "_db", None) + if db_rhs is not None and db_rhs != connection.alias: + raise ValueError( + "Subqueries aren't allowed across different databases. Force " + "the inner query to be evaluated using `list(inner_query)`." + ) + + if self.rhs_is_direct_value(): + # Remove None from the list as NULL is never equal to anything. + try: + rhs = OrderedSet(self.rhs) + rhs.discard(None) + except TypeError: # Unhashable items in self.rhs + rhs = [r for r in self.rhs if r is not None] + + if not rhs: + raise EmptyResultSet + + # rhs should be an iterable; use batch_process_rhs() to + # prepare/transform those values. + sqls, sqls_params = self.batch_process_rhs(compiler, connection, rhs) + placeholder = "(" + ", ".join(sqls) + ")" + return (placeholder, sqls_params) + else: + from django.db.models.sql.query import Query # avoid circular import + + if isinstance(self.rhs, Query): + query = self.rhs + query.clear_ordering(clear_default=True) + if not query.has_select_fields: + query.clear_select_clause() + query.add_fields(["pk"]) + + return super().process_rhs(compiler, connection) + + def get_group_by_cols(self, alias=None): + cols = self.lhs.get_group_by_cols() + if hasattr(self.rhs, "get_group_by_cols"): + if not getattr(self.rhs, "has_select_fields", True): + self.rhs.clear_select_clause() + self.rhs.add_fields(["pk"]) + cols.extend(self.rhs.get_group_by_cols()) + return cols + + def get_rhs_op(self, connection, rhs): + return "IN %s" % rhs + + def as_sql(self, compiler, connection): + max_in_list_size = connection.ops.max_in_list_size() + if ( + self.rhs_is_direct_value() + and max_in_list_size + and len(self.rhs) > max_in_list_size + ): + return self.split_parameter_list_as_sql(compiler, connection) + return super().as_sql(compiler, connection) + + def split_parameter_list_as_sql(self, compiler, connection): + # This is a special case for databases which limit the number of + # elements which can appear in an 'IN' clause. + max_in_list_size = connection.ops.max_in_list_size() + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.batch_process_rhs(compiler, connection) + in_clause_elements = ["("] + params = [] + for offset in range(0, len(rhs_params), max_in_list_size): + if offset > 0: + in_clause_elements.append(" OR ") + in_clause_elements.append("%s IN (" % lhs) + params.extend(lhs_params) + sqls = rhs[offset : offset + max_in_list_size] + sqls_params = rhs_params[offset : offset + max_in_list_size] + param_group = ", ".join(sqls) + in_clause_elements.append(param_group) + in_clause_elements.append(")") + params.extend(sqls_params) + in_clause_elements.append(")") + return "".join(in_clause_elements), params + + +class PatternLookup(BuiltinLookup): + param_pattern = "%%%s%%" + prepare_rhs = False + + def get_rhs_op(self, connection, rhs): + # Assume we are in startswith. We need to produce SQL like: + # col LIKE %s, ['thevalue%'] + # For python values we can (and should) do that directly in Python, + # but if the value is for example reference to other column, then + # we need to add the % pattern match to the lookup by something like + # col LIKE othercol || '%%' + # So, for Python values we don't need any special pattern, but for + # SQL reference values or SQL transformations we need the correct + # pattern added. + if hasattr(self.rhs, "as_sql") or self.bilateral_transforms: + pattern = connection.pattern_ops[self.lookup_name].format( + connection.pattern_esc + ) + return pattern.format(rhs) + else: + return super().get_rhs_op(connection, rhs) + + def process_rhs(self, qn, connection): + rhs, params = super().process_rhs(qn, connection) + if self.rhs_is_direct_value() and params and not self.bilateral_transforms: + params[0] = self.param_pattern % connection.ops.prep_for_like_query( + params[0] + ) + return rhs, params + + +@Field.register_lookup +class Contains(PatternLookup): + lookup_name = "contains" + + +@Field.register_lookup +class IContains(Contains): + lookup_name = "icontains" + + +@Field.register_lookup +class StartsWith(PatternLookup): + lookup_name = "startswith" + param_pattern = "%s%%" + + +@Field.register_lookup +class IStartsWith(StartsWith): + lookup_name = "istartswith" + + +@Field.register_lookup +class EndsWith(PatternLookup): + lookup_name = "endswith" + param_pattern = "%%%s" + + +@Field.register_lookup +class IEndsWith(EndsWith): + lookup_name = "iendswith" + + +@Field.register_lookup +class Range(FieldGetDbPrepValueIterableMixin, BuiltinLookup): + lookup_name = "range" + + def get_rhs_op(self, connection, rhs): + return "BETWEEN %s AND %s" % (rhs[0], rhs[1]) + + +@Field.register_lookup +class IsNull(BuiltinLookup): + lookup_name = "isnull" + prepare_rhs = False + + def as_sql(self, compiler, connection): + if not isinstance(self.rhs, bool): + raise ValueError( + "The QuerySet value for an isnull lookup must be True or False." + ) + sql, params = compiler.compile(self.lhs) + if self.rhs: + return "%s IS NULL" % sql, params + else: + return "%s IS NOT NULL" % sql, params + + +@Field.register_lookup +class Regex(BuiltinLookup): + lookup_name = "regex" + prepare_rhs = False + + def as_sql(self, compiler, connection): + if self.lookup_name in connection.operators: + return super().as_sql(compiler, connection) + else: + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.process_rhs(compiler, connection) + sql_template = connection.ops.regex_lookup(self.lookup_name) + return sql_template % (lhs, rhs), lhs_params + rhs_params + + +@Field.register_lookup +class IRegex(Regex): + lookup_name = "iregex" + + +class YearLookup(Lookup): + def year_lookup_bounds(self, connection, year): + from django.db.models.functions import ExtractIsoYear + + iso_year = isinstance(self.lhs, ExtractIsoYear) + output_field = self.lhs.lhs.output_field + if isinstance(output_field, DateTimeField): + bounds = connection.ops.year_lookup_bounds_for_datetime_field( + year, + iso_year=iso_year, + ) + else: + bounds = connection.ops.year_lookup_bounds_for_date_field( + year, + iso_year=iso_year, + ) + return bounds + + def as_sql(self, compiler, connection): + # Avoid the extract operation if the rhs is a direct value to allow + # indexes to be used. + if self.rhs_is_direct_value(): + # Skip the extract part by directly using the originating field, + # that is self.lhs.lhs. + lhs_sql, params = self.process_lhs(compiler, connection, self.lhs.lhs) + rhs_sql, _ = self.process_rhs(compiler, connection) + rhs_sql = self.get_direct_rhs_sql(connection, rhs_sql) + start, finish = self.year_lookup_bounds(connection, self.rhs) + params.extend(self.get_bound_params(start, finish)) + return "%s %s" % (lhs_sql, rhs_sql), params + return super().as_sql(compiler, connection) + + def get_direct_rhs_sql(self, connection, rhs): + return connection.operators[self.lookup_name] % rhs + + def get_bound_params(self, start, finish): + raise NotImplementedError( + "subclasses of YearLookup must provide a get_bound_params() method" + ) + + +class YearExact(YearLookup, Exact): + def get_direct_rhs_sql(self, connection, rhs): + return "BETWEEN %s AND %s" + + def get_bound_params(self, start, finish): + return (start, finish) + + +class YearGt(YearLookup, GreaterThan): + def get_bound_params(self, start, finish): + return (finish,) + + +class YearGte(YearLookup, GreaterThanOrEqual): + def get_bound_params(self, start, finish): + return (start,) + + +class YearLt(YearLookup, LessThan): + def get_bound_params(self, start, finish): + return (start,) + + +class YearLte(YearLookup, LessThanOrEqual): + def get_bound_params(self, start, finish): + return (finish,) + + +class UUIDTextMixin: + """ + Strip hyphens from a value when filtering a UUIDField on backends without + a native datatype for UUID. + """ + + def process_rhs(self, qn, connection): + if not connection.features.has_native_uuid_field: + from django.db.models.functions import Replace + + if self.rhs_is_direct_value(): + self.rhs = Value(self.rhs) + self.rhs = Replace( + self.rhs, Value("-"), Value(""), output_field=CharField() + ) + rhs, params = super().process_rhs(qn, connection) + return rhs, params + + +@UUIDField.register_lookup +class UUIDIExact(UUIDTextMixin, IExact): + pass + + +@UUIDField.register_lookup +class UUIDContains(UUIDTextMixin, Contains): + pass + + +@UUIDField.register_lookup +class UUIDIContains(UUIDTextMixin, IContains): + pass + + +@UUIDField.register_lookup +class UUIDStartsWith(UUIDTextMixin, StartsWith): + pass + + +@UUIDField.register_lookup +class UUIDIStartsWith(UUIDTextMixin, IStartsWith): + pass + + +@UUIDField.register_lookup +class UUIDEndsWith(UUIDTextMixin, EndsWith): + pass + + +@UUIDField.register_lookup +class UUIDIEndsWith(UUIDTextMixin, IEndsWith): + pass diff --git a/venv/Lib/site-packages/django/db/models/manager.py b/venv/Lib/site-packages/django/db/models/manager.py new file mode 100644 index 000000000..e37e56cd1 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/manager.py @@ -0,0 +1,213 @@ +import copy +import inspect +from importlib import import_module + +from django.db import router +from django.db.models.query import QuerySet + + +class BaseManager: + # To retain order, track each time a Manager instance is created. + creation_counter = 0 + + # Set to True for the 'objects' managers that are automatically created. + auto_created = False + + #: If set to True the manager will be serialized into migrations and will + #: thus be available in e.g. RunPython operations. + use_in_migrations = False + + def __new__(cls, *args, **kwargs): + # Capture the arguments to make returning them trivial. + obj = super().__new__(cls) + obj._constructor_args = (args, kwargs) + return obj + + def __init__(self): + super().__init__() + self._set_creation_counter() + self.model = None + self.name = None + self._db = None + self._hints = {} + + def __str__(self): + """Return "app_label.model_label.manager_name".""" + return "%s.%s" % (self.model._meta.label, self.name) + + def __class_getitem__(cls, *args, **kwargs): + return cls + + def deconstruct(self): + """ + Return a 5-tuple of the form (as_manager (True), manager_class, + queryset_class, args, kwargs). + + Raise a ValueError if the manager is dynamically generated. + """ + qs_class = self._queryset_class + if getattr(self, "_built_with_as_manager", False): + # using MyQuerySet.as_manager() + return ( + True, # as_manager + None, # manager_class + "%s.%s" % (qs_class.__module__, qs_class.__name__), # qs_class + None, # args + None, # kwargs + ) + else: + module_name = self.__module__ + name = self.__class__.__name__ + # Make sure it's actually there and not an inner class + module = import_module(module_name) + if not hasattr(module, name): + raise ValueError( + "Could not find manager %s in %s.\n" + "Please note that you need to inherit from managers you " + "dynamically generated with 'from_queryset()'." + % (name, module_name) + ) + return ( + False, # as_manager + "%s.%s" % (module_name, name), # manager_class + None, # qs_class + self._constructor_args[0], # args + self._constructor_args[1], # kwargs + ) + + def check(self, **kwargs): + return [] + + @classmethod + def _get_queryset_methods(cls, queryset_class): + def create_method(name, method): + def manager_method(self, *args, **kwargs): + return getattr(self.get_queryset(), name)(*args, **kwargs) + + manager_method.__name__ = method.__name__ + manager_method.__doc__ = method.__doc__ + return manager_method + + new_methods = {} + for name, method in inspect.getmembers( + queryset_class, predicate=inspect.isfunction + ): + # Only copy missing methods. + if hasattr(cls, name): + continue + # Only copy public methods or methods with the attribute + # queryset_only=False. + queryset_only = getattr(method, "queryset_only", None) + if queryset_only or (queryset_only is None and name.startswith("_")): + continue + # Copy the method onto the manager. + new_methods[name] = create_method(name, method) + return new_methods + + @classmethod + def from_queryset(cls, queryset_class, class_name=None): + if class_name is None: + class_name = "%sFrom%s" % (cls.__name__, queryset_class.__name__) + return type( + class_name, + (cls,), + { + "_queryset_class": queryset_class, + **cls._get_queryset_methods(queryset_class), + }, + ) + + def contribute_to_class(self, cls, name): + self.name = self.name or name + self.model = cls + + setattr(cls, name, ManagerDescriptor(self)) + + cls._meta.add_manager(self) + + def _set_creation_counter(self): + """ + Set the creation counter value for this instance and increment the + class-level copy. + """ + self.creation_counter = BaseManager.creation_counter + BaseManager.creation_counter += 1 + + def db_manager(self, using=None, hints=None): + obj = copy.copy(self) + obj._db = using or self._db + obj._hints = hints or self._hints + return obj + + @property + def db(self): + return self._db or router.db_for_read(self.model, **self._hints) + + ####################### + # PROXIES TO QUERYSET # + ####################### + + def get_queryset(self): + """ + Return a new QuerySet object. Subclasses can override this method to + customize the behavior of the Manager. + """ + return self._queryset_class(model=self.model, using=self._db, hints=self._hints) + + def all(self): + # We can't proxy this method through the `QuerySet` like we do for the + # rest of the `QuerySet` methods. This is because `QuerySet.all()` + # works by creating a "copy" of the current queryset and in making said + # copy, all the cached `prefetch_related` lookups are lost. See the + # implementation of `RelatedManager.get_queryset()` for a better + # understanding of how this comes into play. + return self.get_queryset() + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) + and self._constructor_args == other._constructor_args + ) + + def __hash__(self): + return id(self) + + +class Manager(BaseManager.from_queryset(QuerySet)): + pass + + +class ManagerDescriptor: + def __init__(self, manager): + self.manager = manager + + def __get__(self, instance, cls=None): + if instance is not None: + raise AttributeError( + "Manager isn't accessible via %s instances" % cls.__name__ + ) + + if cls._meta.abstract: + raise AttributeError( + "Manager isn't available; %s is abstract" % (cls._meta.object_name,) + ) + + if cls._meta.swapped: + raise AttributeError( + "Manager isn't available; '%s' has been swapped for '%s'" + % ( + cls._meta.label, + cls._meta.swapped, + ) + ) + + return cls._meta.managers_map[self.manager.name] + + +class EmptyManager(Manager): + def __init__(self, model): + super().__init__() + self.model = model + + def get_queryset(self): + return super().get_queryset().none() diff --git a/venv/Lib/site-packages/django/db/models/options.py b/venv/Lib/site-packages/django/db/models/options.py new file mode 100644 index 000000000..6b0749b53 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/options.py @@ -0,0 +1,992 @@ +import bisect +import copy +import inspect +from collections import defaultdict + +from django.apps import apps +from django.conf import settings +from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured +from django.db import connections +from django.db.models import AutoField, Manager, OrderWrt, UniqueConstraint +from django.db.models.query_utils import PathInfo +from django.utils.datastructures import ImmutableList, OrderedSet +from django.utils.functional import cached_property +from django.utils.module_loading import import_string +from django.utils.text import camel_case_to_spaces, format_lazy +from django.utils.translation import override + +PROXY_PARENTS = object() + +EMPTY_RELATION_TREE = () + +IMMUTABLE_WARNING = ( + "The return type of '%s' should never be mutated. If you want to manipulate this " + "list for your own use, make a copy first." +) + +DEFAULT_NAMES = ( + "verbose_name", + "verbose_name_plural", + "db_table", + "ordering", + "unique_together", + "permissions", + "get_latest_by", + "order_with_respect_to", + "app_label", + "db_tablespace", + "abstract", + "managed", + "proxy", + "swappable", + "auto_created", + "index_together", + "apps", + "default_permissions", + "select_on_save", + "default_related_name", + "required_db_features", + "required_db_vendor", + "base_manager_name", + "default_manager_name", + "indexes", + "constraints", +) + + +def normalize_together(option_together): + """ + option_together can be either a tuple of tuples, or a single + tuple of two strings. Normalize it to a tuple of tuples, so that + calling code can uniformly expect that. + """ + try: + if not option_together: + return () + if not isinstance(option_together, (tuple, list)): + raise TypeError + first_element = option_together[0] + if not isinstance(first_element, (tuple, list)): + option_together = (option_together,) + # Normalize everything to tuples + return tuple(tuple(ot) for ot in option_together) + except TypeError: + # If the value of option_together isn't valid, return it + # verbatim; this will be picked up by the check framework later. + return option_together + + +def make_immutable_fields_list(name, data): + return ImmutableList(data, warning=IMMUTABLE_WARNING % name) + + +class Options: + FORWARD_PROPERTIES = { + "fields", + "many_to_many", + "concrete_fields", + "local_concrete_fields", + "_forward_fields_map", + "managers", + "managers_map", + "base_manager", + "default_manager", + } + REVERSE_PROPERTIES = {"related_objects", "fields_map", "_relation_tree"} + + default_apps = apps + + def __init__(self, meta, app_label=None): + self._get_fields_cache = {} + self.local_fields = [] + self.local_many_to_many = [] + self.private_fields = [] + self.local_managers = [] + self.base_manager_name = None + self.default_manager_name = None + self.model_name = None + self.verbose_name = None + self.verbose_name_plural = None + self.db_table = "" + self.ordering = [] + self._ordering_clash = False + self.indexes = [] + self.constraints = [] + self.unique_together = [] + self.index_together = [] + self.select_on_save = False + self.default_permissions = ("add", "change", "delete", "view") + self.permissions = [] + self.object_name = None + self.app_label = app_label + self.get_latest_by = None + self.order_with_respect_to = None + self.db_tablespace = settings.DEFAULT_TABLESPACE + self.required_db_features = [] + self.required_db_vendor = None + self.meta = meta + self.pk = None + self.auto_field = None + self.abstract = False + self.managed = True + self.proxy = False + # For any class that is a proxy (including automatically created + # classes for deferred object loading), proxy_for_model tells us + # which class this model is proxying. Note that proxy_for_model + # can create a chain of proxy models. For non-proxy models, the + # variable is always None. + self.proxy_for_model = None + # For any non-abstract class, the concrete class is the model + # in the end of the proxy_for_model chain. In particular, for + # concrete models, the concrete_model is always the class itself. + self.concrete_model = None + self.swappable = None + self.parents = {} + self.auto_created = False + + # List of all lookups defined in ForeignKey 'limit_choices_to' options + # from *other* models. Needed for some admin checks. Internal use only. + self.related_fkey_lookups = [] + + # A custom app registry to use, if you're making a separate model set. + self.apps = self.default_apps + + self.default_related_name = None + + @property + def label(self): + return "%s.%s" % (self.app_label, self.object_name) + + @property + def label_lower(self): + return "%s.%s" % (self.app_label, self.model_name) + + @property + def app_config(self): + # Don't go through get_app_config to avoid triggering imports. + return self.apps.app_configs.get(self.app_label) + + @property + def installed(self): + return self.app_config is not None + + def contribute_to_class(self, cls, name): + from django.db import connection + from django.db.backends.utils import truncate_name + + cls._meta = self + self.model = cls + # First, construct the default values for these options. + self.object_name = cls.__name__ + self.model_name = self.object_name.lower() + self.verbose_name = camel_case_to_spaces(self.object_name) + + # Store the original user-defined values for each option, + # for use when serializing the model definition + self.original_attrs = {} + + # Next, apply any overridden values from 'class Meta'. + if self.meta: + meta_attrs = self.meta.__dict__.copy() + for name in self.meta.__dict__: + # Ignore any private attributes that Django doesn't care about. + # NOTE: We can't modify a dictionary's contents while looping + # over it, so we loop over the *original* dictionary instead. + if name.startswith("_"): + del meta_attrs[name] + for attr_name in DEFAULT_NAMES: + if attr_name in meta_attrs: + setattr(self, attr_name, meta_attrs.pop(attr_name)) + self.original_attrs[attr_name] = getattr(self, attr_name) + elif hasattr(self.meta, attr_name): + setattr(self, attr_name, getattr(self.meta, attr_name)) + self.original_attrs[attr_name] = getattr(self, attr_name) + + self.unique_together = normalize_together(self.unique_together) + self.index_together = normalize_together(self.index_together) + # App label/class name interpolation for names of constraints and + # indexes. + if not getattr(cls._meta, "abstract", False): + for attr_name in {"constraints", "indexes"}: + objs = getattr(self, attr_name, []) + setattr(self, attr_name, self._format_names_with_class(cls, objs)) + + # verbose_name_plural is a special case because it uses a 's' + # by default. + if self.verbose_name_plural is None: + self.verbose_name_plural = format_lazy("{}s", self.verbose_name) + + # order_with_respect_and ordering are mutually exclusive. + self._ordering_clash = bool(self.ordering and self.order_with_respect_to) + + # Any leftover attributes must be invalid. + if meta_attrs != {}: + raise TypeError( + "'class Meta' got invalid attribute(s): %s" % ",".join(meta_attrs) + ) + else: + self.verbose_name_plural = format_lazy("{}s", self.verbose_name) + del self.meta + + # If the db_table wasn't provided, use the app_label + model_name. + if not self.db_table: + self.db_table = "%s_%s" % (self.app_label, self.model_name) + self.db_table = truncate_name( + self.db_table, connection.ops.max_name_length() + ) + + def _format_names_with_class(self, cls, objs): + """App label/class name interpolation for object names.""" + new_objs = [] + for obj in objs: + obj = obj.clone() + obj.name = obj.name % { + "app_label": cls._meta.app_label.lower(), + "class": cls.__name__.lower(), + } + new_objs.append(obj) + return new_objs + + def _get_default_pk_class(self): + pk_class_path = getattr( + self.app_config, + "default_auto_field", + settings.DEFAULT_AUTO_FIELD, + ) + if self.app_config and self.app_config._is_default_auto_field_overridden: + app_config_class = type(self.app_config) + source = ( + f"{app_config_class.__module__}." + f"{app_config_class.__qualname__}.default_auto_field" + ) + else: + source = "DEFAULT_AUTO_FIELD" + if not pk_class_path: + raise ImproperlyConfigured(f"{source} must not be empty.") + try: + pk_class = import_string(pk_class_path) + except ImportError as e: + msg = ( + f"{source} refers to the module '{pk_class_path}' that could " + f"not be imported." + ) + raise ImproperlyConfigured(msg) from e + if not issubclass(pk_class, AutoField): + raise ValueError( + f"Primary key '{pk_class_path}' referred by {source} must " + f"subclass AutoField." + ) + return pk_class + + def _prepare(self, model): + if self.order_with_respect_to: + # The app registry will not be ready at this point, so we cannot + # use get_field(). + query = self.order_with_respect_to + try: + self.order_with_respect_to = next( + f + for f in self._get_fields(reverse=False) + if f.name == query or f.attname == query + ) + except StopIteration: + raise FieldDoesNotExist( + "%s has no field named '%s'" % (self.object_name, query) + ) + + self.ordering = ("_order",) + if not any( + isinstance(field, OrderWrt) for field in model._meta.local_fields + ): + model.add_to_class("_order", OrderWrt()) + else: + self.order_with_respect_to = None + + if self.pk is None: + if self.parents: + # Promote the first parent link in lieu of adding yet another + # field. + field = next(iter(self.parents.values())) + # Look for a local field with the same name as the + # first parent link. If a local field has already been + # created, use it instead of promoting the parent + already_created = [ + fld for fld in self.local_fields if fld.name == field.name + ] + if already_created: + field = already_created[0] + field.primary_key = True + self.setup_pk(field) + else: + pk_class = self._get_default_pk_class() + auto = pk_class(verbose_name="ID", primary_key=True, auto_created=True) + model.add_to_class("id", auto) + + def add_manager(self, manager): + self.local_managers.append(manager) + self._expire_cache() + + def add_field(self, field, private=False): + # Insert the given field in the order in which it was created, using + # the "creation_counter" attribute of the field. + # Move many-to-many related fields from self.fields into + # self.many_to_many. + if private: + self.private_fields.append(field) + elif field.is_relation and field.many_to_many: + bisect.insort(self.local_many_to_many, field) + else: + bisect.insort(self.local_fields, field) + self.setup_pk(field) + + # If the field being added is a relation to another known field, + # expire the cache on this field and the forward cache on the field + # being referenced, because there will be new relationships in the + # cache. Otherwise, expire the cache of references *to* this field. + # The mechanism for getting at the related model is slightly odd - + # ideally, we'd just ask for field.related_model. However, related_model + # is a cached property, and all the models haven't been loaded yet, so + # we need to make sure we don't cache a string reference. + if ( + field.is_relation + and hasattr(field.remote_field, "model") + and field.remote_field.model + ): + try: + field.remote_field.model._meta._expire_cache(forward=False) + except AttributeError: + pass + self._expire_cache() + else: + self._expire_cache(reverse=False) + + def setup_pk(self, field): + if not self.pk and field.primary_key: + self.pk = field + field.serialize = False + + def setup_proxy(self, target): + """ + Do the internal setup so that the current model is a proxy for + "target". + """ + self.pk = target._meta.pk + self.proxy_for_model = target + self.db_table = target._meta.db_table + + def __repr__(self): + return "" % self.object_name + + def __str__(self): + return self.label_lower + + def can_migrate(self, connection): + """ + Return True if the model can/should be migrated on the `connection`. + `connection` can be either a real connection or a connection alias. + """ + if self.proxy or self.swapped or not self.managed: + return False + if isinstance(connection, str): + connection = connections[connection] + if self.required_db_vendor: + return self.required_db_vendor == connection.vendor + if self.required_db_features: + return all( + getattr(connection.features, feat, False) + for feat in self.required_db_features + ) + return True + + @property + def verbose_name_raw(self): + """Return the untranslated verbose name.""" + with override(None): + return str(self.verbose_name) + + @property + def swapped(self): + """ + Has this model been swapped out for another? If so, return the model + name of the replacement; otherwise, return None. + + For historical reasons, model name lookups using get_model() are + case insensitive, so we make sure we are case insensitive here. + """ + if self.swappable: + swapped_for = getattr(settings, self.swappable, None) + if swapped_for: + try: + swapped_label, swapped_object = swapped_for.split(".") + except ValueError: + # setting not in the format app_label.model_name + # raising ImproperlyConfigured here causes problems with + # test cleanup code - instead it is raised in get_user_model + # or as part of validation. + return swapped_for + + if ( + "%s.%s" % (swapped_label, swapped_object.lower()) + != self.label_lower + ): + return swapped_for + return None + + @cached_property + def managers(self): + managers = [] + seen_managers = set() + bases = (b for b in self.model.mro() if hasattr(b, "_meta")) + for depth, base in enumerate(bases): + for manager in base._meta.local_managers: + if manager.name in seen_managers: + continue + + manager = copy.copy(manager) + manager.model = self.model + seen_managers.add(manager.name) + managers.append((depth, manager.creation_counter, manager)) + + return make_immutable_fields_list( + "managers", + (m[2] for m in sorted(managers)), + ) + + @cached_property + def managers_map(self): + return {manager.name: manager for manager in self.managers} + + @cached_property + def base_manager(self): + base_manager_name = self.base_manager_name + if not base_manager_name: + # Get the first parent's base_manager_name if there's one. + for parent in self.model.mro()[1:]: + if hasattr(parent, "_meta"): + if parent._base_manager.name != "_base_manager": + base_manager_name = parent._base_manager.name + break + + if base_manager_name: + try: + return self.managers_map[base_manager_name] + except KeyError: + raise ValueError( + "%s has no manager named %r" + % ( + self.object_name, + base_manager_name, + ) + ) + + manager = Manager() + manager.name = "_base_manager" + manager.model = self.model + manager.auto_created = True + return manager + + @cached_property + def default_manager(self): + default_manager_name = self.default_manager_name + if not default_manager_name and not self.local_managers: + # Get the first parent's default_manager_name if there's one. + for parent in self.model.mro()[1:]: + if hasattr(parent, "_meta"): + default_manager_name = parent._meta.default_manager_name + break + + if default_manager_name: + try: + return self.managers_map[default_manager_name] + except KeyError: + raise ValueError( + "%s has no manager named %r" + % ( + self.object_name, + default_manager_name, + ) + ) + + if self.managers: + return self.managers[0] + + @cached_property + def fields(self): + """ + Return a list of all forward fields on the model and its parents, + excluding ManyToManyFields. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + # For legacy reasons, the fields property should only contain forward + # fields that are not private or with a m2m cardinality. Therefore we + # pass these three filters as filters to the generator. + # The third lambda is a longwinded way of checking f.related_model - we don't + # use that property directly because related_model is a cached property, + # and all the models may not have been loaded yet; we don't want to cache + # the string reference to the related_model. + def is_not_an_m2m_field(f): + return not (f.is_relation and f.many_to_many) + + def is_not_a_generic_relation(f): + return not (f.is_relation and f.one_to_many) + + def is_not_a_generic_foreign_key(f): + return not ( + f.is_relation + and f.many_to_one + and not (hasattr(f.remote_field, "model") and f.remote_field.model) + ) + + return make_immutable_fields_list( + "fields", + ( + f + for f in self._get_fields(reverse=False) + if is_not_an_m2m_field(f) + and is_not_a_generic_relation(f) + and is_not_a_generic_foreign_key(f) + ), + ) + + @cached_property + def concrete_fields(self): + """ + Return a list of all concrete fields on the model and its parents. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + return make_immutable_fields_list( + "concrete_fields", (f for f in self.fields if f.concrete) + ) + + @cached_property + def local_concrete_fields(self): + """ + Return a list of all concrete fields on the model. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + return make_immutable_fields_list( + "local_concrete_fields", (f for f in self.local_fields if f.concrete) + ) + + @cached_property + def many_to_many(self): + """ + Return a list of all many to many fields on the model and its parents. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this list. + """ + return make_immutable_fields_list( + "many_to_many", + ( + f + for f in self._get_fields(reverse=False) + if f.is_relation and f.many_to_many + ), + ) + + @cached_property + def related_objects(self): + """ + Return all related objects pointing to the current model. The related + objects can come from a one-to-one, one-to-many, or many-to-many field + relation type. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + all_related_fields = self._get_fields( + forward=False, reverse=True, include_hidden=True + ) + return make_immutable_fields_list( + "related_objects", + ( + obj + for obj in all_related_fields + if not obj.hidden or obj.field.many_to_many + ), + ) + + @cached_property + def _forward_fields_map(self): + res = {} + fields = self._get_fields(reverse=False) + for field in fields: + res[field.name] = field + # Due to the way Django's internals work, get_field() should also + # be able to fetch a field by attname. In the case of a concrete + # field with relation, includes the *_id name too + try: + res[field.attname] = field + except AttributeError: + pass + return res + + @cached_property + def fields_map(self): + res = {} + fields = self._get_fields(forward=False, include_hidden=True) + for field in fields: + res[field.name] = field + # Due to the way Django's internals work, get_field() should also + # be able to fetch a field by attname. In the case of a concrete + # field with relation, includes the *_id name too + try: + res[field.attname] = field + except AttributeError: + pass + return res + + def get_field(self, field_name): + """ + Return a field instance given the name of a forward or reverse field. + """ + try: + # In order to avoid premature loading of the relation tree + # (expensive) we prefer checking if the field is a forward field. + return self._forward_fields_map[field_name] + except KeyError: + # If the app registry is not ready, reverse fields are + # unavailable, therefore we throw a FieldDoesNotExist exception. + if not self.apps.models_ready: + raise FieldDoesNotExist( + "%s has no field named '%s'. The app cache isn't ready yet, " + "so if this is an auto-created related field, it won't " + "be available yet." % (self.object_name, field_name) + ) + + try: + # Retrieve field instance by name from cached or just-computed + # field map. + return self.fields_map[field_name] + except KeyError: + raise FieldDoesNotExist( + "%s has no field named '%s'" % (self.object_name, field_name) + ) + + def get_base_chain(self, model): + """ + Return a list of parent classes leading to `model` (ordered from + closest to most distant ancestor). This has to handle the case where + `model` is a grandparent or even more distant relation. + """ + if not self.parents: + return [] + if model in self.parents: + return [model] + for parent in self.parents: + res = parent._meta.get_base_chain(model) + if res: + res.insert(0, parent) + return res + return [] + + def get_parent_list(self): + """ + Return all the ancestors of this model as a list ordered by MRO. + Useful for determining if something is an ancestor, regardless of lineage. + """ + result = OrderedSet(self.parents) + for parent in self.parents: + for ancestor in parent._meta.get_parent_list(): + result.add(ancestor) + return list(result) + + def get_ancestor_link(self, ancestor): + """ + Return the field on the current model which points to the given + "ancestor". This is possible an indirect link (a pointer to a parent + model, which points, eventually, to the ancestor). Used when + constructing table joins for model inheritance. + + Return None if the model isn't an ancestor of this one. + """ + if ancestor in self.parents: + return self.parents[ancestor] + for parent in self.parents: + # Tries to get a link field from the immediate parent + parent_link = parent._meta.get_ancestor_link(ancestor) + if parent_link: + # In case of a proxied model, the first link + # of the chain to the ancestor is that parent + # links + return self.parents[parent] or parent_link + + def get_path_to_parent(self, parent): + """ + Return a list of PathInfos containing the path from the current + model to the parent model, or an empty list if parent is not a + parent of the current model. + """ + if self.model is parent: + return [] + # Skip the chain of proxy to the concrete proxied model. + proxied_model = self.concrete_model + path = [] + opts = self + for int_model in self.get_base_chain(parent): + if int_model is proxied_model: + opts = int_model._meta + else: + final_field = opts.parents[int_model] + targets = (final_field.remote_field.get_related_field(),) + opts = int_model._meta + path.append( + PathInfo( + from_opts=final_field.model._meta, + to_opts=opts, + target_fields=targets, + join_field=final_field, + m2m=False, + direct=True, + filtered_relation=None, + ) + ) + return path + + def get_path_from_parent(self, parent): + """ + Return a list of PathInfos containing the path from the parent + model to the current model, or an empty list if parent is not a + parent of the current model. + """ + if self.model is parent: + return [] + model = self.concrete_model + # Get a reversed base chain including both the current and parent + # models. + chain = model._meta.get_base_chain(parent) + chain.reverse() + chain.append(model) + # Construct a list of the PathInfos between models in chain. + path = [] + for i, ancestor in enumerate(chain[:-1]): + child = chain[i + 1] + link = child._meta.get_ancestor_link(ancestor) + path.extend(link.get_reverse_path_info()) + return path + + def _populate_directed_relation_graph(self): + """ + This method is used by each model to find its reverse objects. As this + method is very expensive and is accessed frequently (it looks up every + field in a model, in every app), it is computed on first access and then + is set as a property on every model. + """ + related_objects_graph = defaultdict(list) + + all_models = self.apps.get_models(include_auto_created=True) + for model in all_models: + opts = model._meta + # Abstract model's fields are copied to child models, hence we will + # see the fields from the child models. + if opts.abstract: + continue + fields_with_relations = ( + f + for f in opts._get_fields(reverse=False, include_parents=False) + if f.is_relation and f.related_model is not None + ) + for f in fields_with_relations: + if not isinstance(f.remote_field.model, str): + remote_label = f.remote_field.model._meta.concrete_model._meta.label + related_objects_graph[remote_label].append(f) + + for model in all_models: + # Set the relation_tree using the internal __dict__. In this way + # we avoid calling the cached property. In attribute lookup, + # __dict__ takes precedence over a data descriptor (such as + # @cached_property). This means that the _meta._relation_tree is + # only called if related_objects is not in __dict__. + related_objects = related_objects_graph[ + model._meta.concrete_model._meta.label + ] + model._meta.__dict__["_relation_tree"] = related_objects + # It seems it is possible that self is not in all_models, so guard + # against that with default for get(). + return self.__dict__.get("_relation_tree", EMPTY_RELATION_TREE) + + @cached_property + def _relation_tree(self): + return self._populate_directed_relation_graph() + + def _expire_cache(self, forward=True, reverse=True): + # This method is usually called by apps.cache_clear(), when the + # registry is finalized, or when a new field is added. + if forward: + for cache_key in self.FORWARD_PROPERTIES: + if cache_key in self.__dict__: + delattr(self, cache_key) + if reverse and not self.abstract: + for cache_key in self.REVERSE_PROPERTIES: + if cache_key in self.__dict__: + delattr(self, cache_key) + self._get_fields_cache = {} + + def get_fields(self, include_parents=True, include_hidden=False): + """ + Return a list of fields associated to the model. By default, include + forward and reverse fields, fields derived from inheritance, but not + hidden fields. The returned fields can be changed using the parameters: + + - include_parents: include fields derived from inheritance + - include_hidden: include fields that have a related_name that + starts with a "+" + """ + if include_parents is False: + include_parents = PROXY_PARENTS + return self._get_fields( + include_parents=include_parents, include_hidden=include_hidden + ) + + def _get_fields( + self, + forward=True, + reverse=True, + include_parents=True, + include_hidden=False, + seen_models=None, + ): + """ + Internal helper function to return fields of the model. + * If forward=True, then fields defined on this model are returned. + * If reverse=True, then relations pointing to this model are returned. + * If include_hidden=True, then fields with is_hidden=True are returned. + * The include_parents argument toggles if fields from parent models + should be included. It has three values: True, False, and + PROXY_PARENTS. When set to PROXY_PARENTS, the call will return all + fields defined for the current model or any of its parents in the + parent chain to the model's concrete model. + """ + if include_parents not in (True, False, PROXY_PARENTS): + raise TypeError( + "Invalid argument for include_parents: %s" % (include_parents,) + ) + # This helper function is used to allow recursion in ``get_fields()`` + # implementation and to provide a fast way for Django's internals to + # access specific subsets of fields. + + # We must keep track of which models we have already seen. Otherwise we + # could include the same field multiple times from different models. + topmost_call = seen_models is None + if topmost_call: + seen_models = set() + seen_models.add(self.model) + + # Creates a cache key composed of all arguments + cache_key = (forward, reverse, include_parents, include_hidden, topmost_call) + + try: + # In order to avoid list manipulation. Always return a shallow copy + # of the results. + return self._get_fields_cache[cache_key] + except KeyError: + pass + + fields = [] + # Recursively call _get_fields() on each parent, with the same + # options provided in this call. + if include_parents is not False: + for parent in self.parents: + # In diamond inheritance it is possible that we see the same + # model from two different routes. In that case, avoid adding + # fields from the same parent again. + if parent in seen_models: + continue + if ( + parent._meta.concrete_model != self.concrete_model + and include_parents == PROXY_PARENTS + ): + continue + for obj in parent._meta._get_fields( + forward=forward, + reverse=reverse, + include_parents=include_parents, + include_hidden=include_hidden, + seen_models=seen_models, + ): + if ( + not getattr(obj, "parent_link", False) + or obj.model == self.concrete_model + ): + fields.append(obj) + if reverse and not self.proxy: + # Tree is computed once and cached until the app cache is expired. + # It is composed of a list of fields pointing to the current model + # from other models. + all_fields = self._relation_tree + for field in all_fields: + # If hidden fields should be included or the relation is not + # intentionally hidden, add to the fields dict. + if include_hidden or not field.remote_field.hidden: + fields.append(field.remote_field) + + if forward: + fields += self.local_fields + fields += self.local_many_to_many + # Private fields are recopied to each child model, and they get a + # different model as field.model in each child. Hence we have to + # add the private fields separately from the topmost call. If we + # did this recursively similar to local_fields, we would get field + # instances with field.model != self.model. + if topmost_call: + fields += self.private_fields + + # In order to avoid list manipulation. Always + # return a shallow copy of the results + fields = make_immutable_fields_list("get_fields()", fields) + + # Store result into cache for later access + self._get_fields_cache[cache_key] = fields + return fields + + @cached_property + def total_unique_constraints(self): + """ + Return a list of total unique constraints. Useful for determining set + of fields guaranteed to be unique for all rows. + """ + return [ + constraint + for constraint in self.constraints + if ( + isinstance(constraint, UniqueConstraint) + and constraint.condition is None + and not constraint.contains_expressions + ) + ] + + @cached_property + def _property_names(self): + """Return a set of the names of the properties defined on the model.""" + names = [] + for name in dir(self.model): + attr = inspect.getattr_static(self.model, name) + if isinstance(attr, property): + names.append(name) + return frozenset(names) + + @cached_property + def db_returning_fields(self): + """ + Private API intended only to be used by Django itself. + Fields to be returned after a database insert. + """ + return [ + field + for field in self._get_fields( + forward=True, reverse=False, include_parents=PROXY_PARENTS + ) + if getattr(field, "db_returning", False) + ] diff --git a/venv/Lib/site-packages/django/db/models/query.py b/venv/Lib/site-packages/django/db/models/query.py new file mode 100644 index 000000000..57adf60c0 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/query.py @@ -0,0 +1,2270 @@ +""" +The main QuerySet implementation. This provides the public API for the ORM. +""" + +import copy +import operator +import warnings +from itertools import chain + +import django +from django.conf import settings +from django.core import exceptions +from django.db import ( + DJANGO_VERSION_PICKLE_KEY, + IntegrityError, + NotSupportedError, + connections, + router, + transaction, +) +from django.db.models import AutoField, DateField, DateTimeField, sql +from django.db.models.constants import LOOKUP_SEP +from django.db.models.deletion import Collector +from django.db.models.expressions import Case, Expression, F, Ref, Value, When +from django.db.models.functions import Cast, Trunc +from django.db.models.query_utils import FilteredRelation, Q +from django.db.models.sql.constants import CURSOR, GET_ITERATOR_CHUNK_SIZE +from django.db.models.utils import create_namedtuple_class, resolve_callables +from django.utils import timezone +from django.utils.functional import cached_property, partition + +# The maximum number of results to fetch in a get() query. +MAX_GET_RESULTS = 21 + +# The maximum number of items to display in a QuerySet.__repr__ +REPR_OUTPUT_SIZE = 20 + + +class BaseIterable: + def __init__( + self, queryset, chunked_fetch=False, chunk_size=GET_ITERATOR_CHUNK_SIZE + ): + self.queryset = queryset + self.chunked_fetch = chunked_fetch + self.chunk_size = chunk_size + + +class ModelIterable(BaseIterable): + """Iterable that yields a model instance for each row.""" + + def __iter__(self): + queryset = self.queryset + db = queryset.db + compiler = queryset.query.get_compiler(using=db) + # Execute the query. This will also fill compiler.select, klass_info, + # and annotations. + results = compiler.execute_sql( + chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size + ) + select, klass_info, annotation_col_map = ( + compiler.select, + compiler.klass_info, + compiler.annotation_col_map, + ) + model_cls = klass_info["model"] + select_fields = klass_info["select_fields"] + model_fields_start, model_fields_end = select_fields[0], select_fields[-1] + 1 + init_list = [ + f[0].target.attname for f in select[model_fields_start:model_fields_end] + ] + related_populators = get_related_populators(klass_info, select, db) + known_related_objects = [ + ( + field, + related_objs, + operator.attrgetter( + *[ + field.attname + if from_field == "self" + else queryset.model._meta.get_field(from_field).attname + for from_field in field.from_fields + ] + ), + ) + for field, related_objs in queryset._known_related_objects.items() + ] + for row in compiler.results_iter(results): + obj = model_cls.from_db( + db, init_list, row[model_fields_start:model_fields_end] + ) + for rel_populator in related_populators: + rel_populator.populate(row, obj) + if annotation_col_map: + for attr_name, col_pos in annotation_col_map.items(): + setattr(obj, attr_name, row[col_pos]) + + # Add the known related objects to the model. + for field, rel_objs, rel_getter in known_related_objects: + # Avoid overwriting objects loaded by, e.g., select_related(). + if field.is_cached(obj): + continue + rel_obj_id = rel_getter(obj) + try: + rel_obj = rel_objs[rel_obj_id] + except KeyError: + pass # May happen in qs1 | qs2 scenarios. + else: + setattr(obj, field.name, rel_obj) + + yield obj + + +class ValuesIterable(BaseIterable): + """ + Iterable returned by QuerySet.values() that yields a dict for each row. + """ + + def __iter__(self): + queryset = self.queryset + query = queryset.query + compiler = query.get_compiler(queryset.db) + + # extra(select=...) cols are always at the start of the row. + names = [ + *query.extra_select, + *query.values_select, + *query.annotation_select, + ] + indexes = range(len(names)) + for row in compiler.results_iter( + chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size + ): + yield {names[i]: row[i] for i in indexes} + + +class ValuesListIterable(BaseIterable): + """ + Iterable returned by QuerySet.values_list(flat=False) that yields a tuple + for each row. + """ + + def __iter__(self): + queryset = self.queryset + query = queryset.query + compiler = query.get_compiler(queryset.db) + + if queryset._fields: + # extra(select=...) cols are always at the start of the row. + names = [ + *query.extra_select, + *query.values_select, + *query.annotation_select, + ] + fields = [ + *queryset._fields, + *(f for f in query.annotation_select if f not in queryset._fields), + ] + if fields != names: + # Reorder according to fields. + index_map = {name: idx for idx, name in enumerate(names)} + rowfactory = operator.itemgetter(*[index_map[f] for f in fields]) + return map( + rowfactory, + compiler.results_iter( + chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size + ), + ) + return compiler.results_iter( + tuple_expected=True, + chunked_fetch=self.chunked_fetch, + chunk_size=self.chunk_size, + ) + + +class NamedValuesListIterable(ValuesListIterable): + """ + Iterable returned by QuerySet.values_list(named=True) that yields a + namedtuple for each row. + """ + + def __iter__(self): + queryset = self.queryset + if queryset._fields: + names = queryset._fields + else: + query = queryset.query + names = [ + *query.extra_select, + *query.values_select, + *query.annotation_select, + ] + tuple_class = create_namedtuple_class(*names) + new = tuple.__new__ + for row in super().__iter__(): + yield new(tuple_class, row) + + +class FlatValuesListIterable(BaseIterable): + """ + Iterable returned by QuerySet.values_list(flat=True) that yields single + values. + """ + + def __iter__(self): + queryset = self.queryset + compiler = queryset.query.get_compiler(queryset.db) + for row in compiler.results_iter( + chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size + ): + yield row[0] + + +class QuerySet: + """Represent a lazy database lookup for a set of objects.""" + + def __init__(self, model=None, query=None, using=None, hints=None): + self.model = model + self._db = using + self._hints = hints or {} + self._query = query or sql.Query(self.model) + self._result_cache = None + self._sticky_filter = False + self._for_write = False + self._prefetch_related_lookups = () + self._prefetch_done = False + self._known_related_objects = {} # {rel_field: {pk: rel_obj}} + self._iterable_class = ModelIterable + self._fields = None + self._defer_next_filter = False + self._deferred_filter = None + + @property + def query(self): + if self._deferred_filter: + negate, args, kwargs = self._deferred_filter + self._filter_or_exclude_inplace(negate, args, kwargs) + self._deferred_filter = None + return self._query + + @query.setter + def query(self, value): + if value.values_select: + self._iterable_class = ValuesIterable + self._query = value + + def as_manager(cls): + # Address the circular dependency between `Queryset` and `Manager`. + from django.db.models.manager import Manager + + manager = Manager.from_queryset(cls)() + manager._built_with_as_manager = True + return manager + + as_manager.queryset_only = True + as_manager = classmethod(as_manager) + + ######################## + # PYTHON MAGIC METHODS # + ######################## + + def __deepcopy__(self, memo): + """Don't populate the QuerySet's cache.""" + obj = self.__class__() + for k, v in self.__dict__.items(): + if k == "_result_cache": + obj.__dict__[k] = None + else: + obj.__dict__[k] = copy.deepcopy(v, memo) + return obj + + def __getstate__(self): + # Force the cache to be fully populated. + self._fetch_all() + return {**self.__dict__, DJANGO_VERSION_PICKLE_KEY: django.__version__} + + def __setstate__(self, state): + pickled_version = state.get(DJANGO_VERSION_PICKLE_KEY) + if pickled_version: + if pickled_version != django.__version__: + warnings.warn( + "Pickled queryset instance's Django version %s does not " + "match the current version %s." + % (pickled_version, django.__version__), + RuntimeWarning, + stacklevel=2, + ) + else: + warnings.warn( + "Pickled queryset instance's Django version is not specified.", + RuntimeWarning, + stacklevel=2, + ) + self.__dict__.update(state) + + def __repr__(self): + data = list(self[: REPR_OUTPUT_SIZE + 1]) + if len(data) > REPR_OUTPUT_SIZE: + data[-1] = "...(remaining elements truncated)..." + return "<%s %r>" % (self.__class__.__name__, data) + + def __len__(self): + self._fetch_all() + return len(self._result_cache) + + def __iter__(self): + """ + The queryset iterator protocol uses three nested iterators in the + default case: + 1. sql.compiler.execute_sql() + - Returns 100 rows at time (constants.GET_ITERATOR_CHUNK_SIZE) + using cursor.fetchmany(). This part is responsible for + doing some column masking, and returning the rows in chunks. + 2. sql.compiler.results_iter() + - Returns one row at time. At this point the rows are still just + tuples. In some cases the return values are converted to + Python values at this location. + 3. self.iterator() + - Responsible for turning the rows into model objects. + """ + self._fetch_all() + return iter(self._result_cache) + + def __bool__(self): + self._fetch_all() + return bool(self._result_cache) + + def __getitem__(self, k): + """Retrieve an item or slice from the set of results.""" + if not isinstance(k, (int, slice)): + raise TypeError( + "QuerySet indices must be integers or slices, not %s." + % type(k).__name__ + ) + if (isinstance(k, int) and k < 0) or ( + isinstance(k, slice) + and ( + (k.start is not None and k.start < 0) + or (k.stop is not None and k.stop < 0) + ) + ): + raise ValueError("Negative indexing is not supported.") + + if self._result_cache is not None: + return self._result_cache[k] + + if isinstance(k, slice): + qs = self._chain() + if k.start is not None: + start = int(k.start) + else: + start = None + if k.stop is not None: + stop = int(k.stop) + else: + stop = None + qs.query.set_limits(start, stop) + return list(qs)[:: k.step] if k.step else qs + + qs = self._chain() + qs.query.set_limits(k, k + 1) + qs._fetch_all() + return qs._result_cache[0] + + def __class_getitem__(cls, *args, **kwargs): + return cls + + def __and__(self, other): + self._merge_sanity_check(other) + if isinstance(other, EmptyQuerySet): + return other + if isinstance(self, EmptyQuerySet): + return self + combined = self._chain() + combined._merge_known_related_objects(other) + combined.query.combine(other.query, sql.AND) + return combined + + def __or__(self, other): + self._merge_sanity_check(other) + if isinstance(self, EmptyQuerySet): + return other + if isinstance(other, EmptyQuerySet): + return self + query = ( + self + if self.query.can_filter() + else self.model._base_manager.filter(pk__in=self.values("pk")) + ) + combined = query._chain() + combined._merge_known_related_objects(other) + if not other.query.can_filter(): + other = other.model._base_manager.filter(pk__in=other.values("pk")) + combined.query.combine(other.query, sql.OR) + return combined + + #################################### + # METHODS THAT DO DATABASE QUERIES # + #################################### + + def _iterator(self, use_chunked_fetch, chunk_size): + yield from self._iterable_class( + self, chunked_fetch=use_chunked_fetch, chunk_size=chunk_size + ) + + def iterator(self, chunk_size=2000): + """ + An iterator over the results from applying this QuerySet to the + database. + """ + if chunk_size <= 0: + raise ValueError("Chunk size must be strictly positive.") + use_chunked_fetch = not connections[self.db].settings_dict.get( + "DISABLE_SERVER_SIDE_CURSORS" + ) + return self._iterator(use_chunked_fetch, chunk_size) + + def aggregate(self, *args, **kwargs): + """ + Return a dictionary containing the calculations (aggregation) + over the current queryset. + + If args is present the expression is passed as a kwarg using + the Aggregate object's default alias. + """ + if self.query.distinct_fields: + raise NotImplementedError("aggregate() + distinct(fields) not implemented.") + self._validate_values_are_expressions( + (*args, *kwargs.values()), method_name="aggregate" + ) + for arg in args: + # The default_alias property raises TypeError if default_alias + # can't be set automatically or AttributeError if it isn't an + # attribute. + try: + arg.default_alias + except (AttributeError, TypeError): + raise TypeError("Complex aggregates require an alias") + kwargs[arg.default_alias] = arg + + query = self.query.chain() + for (alias, aggregate_expr) in kwargs.items(): + query.add_annotation(aggregate_expr, alias, is_summary=True) + annotation = query.annotations[alias] + if not annotation.contains_aggregate: + raise TypeError("%s is not an aggregate expression" % alias) + for expr in annotation.get_source_expressions(): + if ( + expr.contains_aggregate + and isinstance(expr, Ref) + and expr.refs in kwargs + ): + name = expr.refs + raise exceptions.FieldError( + "Cannot compute %s('%s'): '%s' is an aggregate" + % (annotation.name, name, name) + ) + return query.get_aggregation(self.db, kwargs) + + def count(self): + """ + Perform a SELECT COUNT() and return the number of records as an + integer. + + If the QuerySet is already fully cached, return the length of the + cached results set to avoid multiple SELECT COUNT(*) calls. + """ + if self._result_cache is not None: + return len(self._result_cache) + + return self.query.get_count(using=self.db) + + def get(self, *args, **kwargs): + """ + Perform the query and return a single object matching the given + keyword arguments. + """ + if self.query.combinator and (args or kwargs): + raise NotSupportedError( + "Calling QuerySet.get(...) with filters after %s() is not " + "supported." % self.query.combinator + ) + clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs) + if self.query.can_filter() and not self.query.distinct_fields: + clone = clone.order_by() + limit = None + if ( + not clone.query.select_for_update + or connections[clone.db].features.supports_select_for_update_with_limit + ): + limit = MAX_GET_RESULTS + clone.query.set_limits(high=limit) + num = len(clone) + if num == 1: + return clone._result_cache[0] + if not num: + raise self.model.DoesNotExist( + "%s matching query does not exist." % self.model._meta.object_name + ) + raise self.model.MultipleObjectsReturned( + "get() returned more than one %s -- it returned %s!" + % ( + self.model._meta.object_name, + num if not limit or num < limit else "more than %s" % (limit - 1), + ) + ) + + def create(self, **kwargs): + """ + Create a new object with the given kwargs, saving it to the database + and returning the created object. + """ + obj = self.model(**kwargs) + self._for_write = True + obj.save(force_insert=True, using=self.db) + return obj + + def _prepare_for_bulk_create(self, objs): + for obj in objs: + if obj.pk is None: + # Populate new PK values. + obj.pk = obj._meta.pk.get_pk_value_on_save(obj) + obj._prepare_related_fields_for_save(operation_name="bulk_create") + + def bulk_create(self, objs, batch_size=None, ignore_conflicts=False): + """ + Insert each of the instances into the database. Do *not* call + save() on each of the instances, do not send any pre/post_save + signals, and do not set the primary key attribute if it is an + autoincrement field (except if features.can_return_rows_from_bulk_insert=True). + Multi-table models are not supported. + """ + # When you bulk insert you don't get the primary keys back (if it's an + # autoincrement, except if can_return_rows_from_bulk_insert=True), so + # you can't insert into the child tables which references this. There + # are two workarounds: + # 1) This could be implemented if you didn't have an autoincrement pk + # 2) You could do it by doing O(n) normal inserts into the parent + # tables to get the primary keys back and then doing a single bulk + # insert into the childmost table. + # We currently set the primary keys on the objects when using + # PostgreSQL via the RETURNING ID clause. It should be possible for + # Oracle as well, but the semantics for extracting the primary keys is + # trickier so it's not done yet. + if batch_size is not None and batch_size <= 0: + raise ValueError("Batch size must be a positive integer.") + # Check that the parents share the same concrete model with the our + # model to detect the inheritance pattern ConcreteGrandParent -> + # MultiTableParent -> ProxyChild. Simply checking self.model._meta.proxy + # would not identify that case as involving multiple tables. + for parent in self.model._meta.get_parent_list(): + if parent._meta.concrete_model is not self.model._meta.concrete_model: + raise ValueError("Can't bulk create a multi-table inherited model") + if not objs: + return objs + self._for_write = True + connection = connections[self.db] + opts = self.model._meta + fields = opts.concrete_fields + objs = list(objs) + self._prepare_for_bulk_create(objs) + with transaction.atomic(using=self.db, savepoint=False): + objs_with_pk, objs_without_pk = partition(lambda o: o.pk is None, objs) + if objs_with_pk: + returned_columns = self._batched_insert( + objs_with_pk, + fields, + batch_size, + ignore_conflicts=ignore_conflicts, + ) + for obj_with_pk, results in zip(objs_with_pk, returned_columns): + for result, field in zip(results, opts.db_returning_fields): + if field != opts.pk: + setattr(obj_with_pk, field.attname, result) + for obj_with_pk in objs_with_pk: + obj_with_pk._state.adding = False + obj_with_pk._state.db = self.db + if objs_without_pk: + fields = [f for f in fields if not isinstance(f, AutoField)] + returned_columns = self._batched_insert( + objs_without_pk, + fields, + batch_size, + ignore_conflicts=ignore_conflicts, + ) + if ( + connection.features.can_return_rows_from_bulk_insert + and not ignore_conflicts + ): + assert len(returned_columns) == len(objs_without_pk) + for obj_without_pk, results in zip(objs_without_pk, returned_columns): + for result, field in zip(results, opts.db_returning_fields): + setattr(obj_without_pk, field.attname, result) + obj_without_pk._state.adding = False + obj_without_pk._state.db = self.db + + return objs + + def bulk_update(self, objs, fields, batch_size=None): + """ + Update the given fields in each of the given objects in the database. + """ + if batch_size is not None and batch_size < 0: + raise ValueError("Batch size must be a positive integer.") + if not fields: + raise ValueError("Field names must be given to bulk_update().") + objs = tuple(objs) + if any(obj.pk is None for obj in objs): + raise ValueError("All bulk_update() objects must have a primary key set.") + fields = [self.model._meta.get_field(name) for name in fields] + if any(not f.concrete or f.many_to_many for f in fields): + raise ValueError("bulk_update() can only be used with concrete fields.") + if any(f.primary_key for f in fields): + raise ValueError("bulk_update() cannot be used with primary key fields.") + if not objs: + return 0 + # PK is used twice in the resulting update query, once in the filter + # and once in the WHEN. Each field will also have one CAST. + max_batch_size = connections[self.db].ops.bulk_batch_size( + ["pk", "pk"] + fields, objs + ) + batch_size = min(batch_size, max_batch_size) if batch_size else max_batch_size + requires_casting = connections[self.db].features.requires_casted_case_in_updates + batches = (objs[i : i + batch_size] for i in range(0, len(objs), batch_size)) + updates = [] + for batch_objs in batches: + update_kwargs = {} + for field in fields: + when_statements = [] + for obj in batch_objs: + attr = getattr(obj, field.attname) + if not isinstance(attr, Expression): + attr = Value(attr, output_field=field) + when_statements.append(When(pk=obj.pk, then=attr)) + case_statement = Case(*when_statements, output_field=field) + if requires_casting: + case_statement = Cast(case_statement, output_field=field) + update_kwargs[field.attname] = case_statement + updates.append(([obj.pk for obj in batch_objs], update_kwargs)) + rows_updated = 0 + with transaction.atomic(using=self.db, savepoint=False): + for pks, update_kwargs in updates: + rows_updated += self.filter(pk__in=pks).update(**update_kwargs) + return rows_updated + + bulk_update.alters_data = True + + def get_or_create(self, defaults=None, **kwargs): + """ + Look up an object with the given kwargs, creating one if necessary. + Return a tuple of (object, created), where created is a boolean + specifying whether an object was created. + """ + # The get() needs to be targeted at the write database in order + # to avoid potential transaction consistency problems. + self._for_write = True + try: + return self.get(**kwargs), False + except self.model.DoesNotExist: + params = self._extract_model_params(defaults, **kwargs) + # Try to create an object using passed params. + try: + with transaction.atomic(using=self.db): + params = dict(resolve_callables(params)) + return self.create(**params), True + except IntegrityError: + try: + return self.get(**kwargs), False + except self.model.DoesNotExist: + pass + raise + + def update_or_create(self, defaults=None, **kwargs): + """ + Look up an object with the given kwargs, updating one with defaults + if it exists, otherwise create a new one. + Return a tuple (object, created), where created is a boolean + specifying whether an object was created. + """ + defaults = defaults or {} + self._for_write = True + with transaction.atomic(using=self.db): + # Lock the row so that a concurrent update is blocked until + # update_or_create() has performed its save. + obj, created = self.select_for_update().get_or_create(defaults, **kwargs) + if created: + return obj, created + for k, v in resolve_callables(defaults): + setattr(obj, k, v) + obj.save(using=self.db) + return obj, False + + def _extract_model_params(self, defaults, **kwargs): + """ + Prepare `params` for creating a model instance based on the given + kwargs; for use by get_or_create(). + """ + defaults = defaults or {} + params = {k: v for k, v in kwargs.items() if LOOKUP_SEP not in k} + params.update(defaults) + property_names = self.model._meta._property_names + invalid_params = [] + for param in params: + try: + self.model._meta.get_field(param) + except exceptions.FieldDoesNotExist: + # It's okay to use a model's property if it has a setter. + if not (param in property_names and getattr(self.model, param).fset): + invalid_params.append(param) + if invalid_params: + raise exceptions.FieldError( + "Invalid field name(s) for model %s: '%s'." + % ( + self.model._meta.object_name, + "', '".join(sorted(invalid_params)), + ) + ) + return params + + def _earliest(self, *fields): + """ + Return the earliest object according to fields (if given) or by the + model's Meta.get_latest_by. + """ + if fields: + order_by = fields + else: + order_by = getattr(self.model._meta, "get_latest_by") + if order_by and not isinstance(order_by, (tuple, list)): + order_by = (order_by,) + if order_by is None: + raise ValueError( + "earliest() and latest() require either fields as positional " + "arguments or 'get_latest_by' in the model's Meta." + ) + obj = self._chain() + obj.query.set_limits(high=1) + obj.query.clear_ordering(force=True) + obj.query.add_ordering(*order_by) + return obj.get() + + def earliest(self, *fields): + if self.query.is_sliced: + raise TypeError("Cannot change a query once a slice has been taken.") + return self._earliest(*fields) + + def latest(self, *fields): + if self.query.is_sliced: + raise TypeError("Cannot change a query once a slice has been taken.") + return self.reverse()._earliest(*fields) + + def first(self): + """Return the first object of a query or None if no match is found.""" + for obj in (self if self.ordered else self.order_by("pk"))[:1]: + return obj + + def last(self): + """Return the last object of a query or None if no match is found.""" + for obj in (self.reverse() if self.ordered else self.order_by("-pk"))[:1]: + return obj + + def in_bulk(self, id_list=None, *, field_name="pk"): + """ + Return a dictionary mapping each of the given IDs to the object with + that ID. If `id_list` isn't provided, evaluate the entire QuerySet. + """ + if self.query.is_sliced: + raise TypeError("Cannot use 'limit' or 'offset' with in_bulk().") + opts = self.model._meta + unique_fields = [ + constraint.fields[0] + for constraint in opts.total_unique_constraints + if len(constraint.fields) == 1 + ] + if ( + field_name != "pk" + and not opts.get_field(field_name).unique + and field_name not in unique_fields + and self.query.distinct_fields != (field_name,) + ): + raise ValueError( + "in_bulk()'s field_name must be a unique field but %r isn't." + % field_name + ) + if id_list is not None: + if not id_list: + return {} + filter_key = "{}__in".format(field_name) + batch_size = connections[self.db].features.max_query_params + id_list = tuple(id_list) + # If the database has a limit on the number of query parameters + # (e.g. SQLite), retrieve objects in batches if necessary. + if batch_size and batch_size < len(id_list): + qs = () + for offset in range(0, len(id_list), batch_size): + batch = id_list[offset : offset + batch_size] + qs += tuple(self.filter(**{filter_key: batch}).order_by()) + else: + qs = self.filter(**{filter_key: id_list}).order_by() + else: + qs = self._chain() + return {getattr(obj, field_name): obj for obj in qs} + + def delete(self): + """Delete the records in the current QuerySet.""" + self._not_support_combined_queries("delete") + if self.query.is_sliced: + raise TypeError("Cannot use 'limit' or 'offset' with delete().") + if self.query.distinct or self.query.distinct_fields: + raise TypeError("Cannot call delete() after .distinct().") + if self._fields is not None: + raise TypeError("Cannot call delete() after .values() or .values_list()") + + del_query = self._chain() + + # The delete is actually 2 queries - one to find related objects, + # and one to delete. Make sure that the discovery of related + # objects is performed on the same database as the deletion. + del_query._for_write = True + + # Disable non-supported fields. + del_query.query.select_for_update = False + del_query.query.select_related = False + del_query.query.clear_ordering(force=True) + + collector = Collector(using=del_query.db) + collector.collect(del_query) + deleted, _rows_count = collector.delete() + + # Clear the result cache, in case this QuerySet gets reused. + self._result_cache = None + return deleted, _rows_count + + delete.alters_data = True + delete.queryset_only = True + + def _raw_delete(self, using): + """ + Delete objects found from the given queryset in single direct SQL + query. No signals are sent and there is no protection for cascades. + """ + query = self.query.clone() + query.__class__ = sql.DeleteQuery + cursor = query.get_compiler(using).execute_sql(CURSOR) + if cursor: + with cursor: + return cursor.rowcount + return 0 + + _raw_delete.alters_data = True + + def update(self, **kwargs): + """ + Update all elements in the current QuerySet, setting all the given + fields to the appropriate values. + """ + self._not_support_combined_queries("update") + if self.query.is_sliced: + raise TypeError("Cannot update a query once a slice has been taken.") + self._for_write = True + query = self.query.chain(sql.UpdateQuery) + query.add_update_values(kwargs) + # Clear any annotations so that they won't be present in subqueries. + query.annotations = {} + with transaction.mark_for_rollback_on_error(using=self.db): + rows = query.get_compiler(self.db).execute_sql(CURSOR) + self._result_cache = None + return rows + + update.alters_data = True + + def _update(self, values): + """ + A version of update() that accepts field objects instead of field names. + Used primarily for model saving and not intended for use by general + code (it requires too much poking around at model internals to be + useful at that level). + """ + if self.query.is_sliced: + raise TypeError("Cannot update a query once a slice has been taken.") + query = self.query.chain(sql.UpdateQuery) + query.add_update_fields(values) + # Clear any annotations so that they won't be present in subqueries. + query.annotations = {} + self._result_cache = None + return query.get_compiler(self.db).execute_sql(CURSOR) + + _update.alters_data = True + _update.queryset_only = False + + def exists(self): + if self._result_cache is None: + return self.query.has_results(using=self.db) + return bool(self._result_cache) + + def contains(self, obj): + """Return True if the queryset contains an object.""" + self._not_support_combined_queries("contains") + if self._fields is not None: + raise TypeError( + "Cannot call QuerySet.contains() after .values() or .values_list()." + ) + try: + if obj._meta.concrete_model != self.model._meta.concrete_model: + return False + except AttributeError: + raise TypeError("'obj' must be a model instance.") + if obj.pk is None: + raise ValueError("QuerySet.contains() cannot be used on unsaved objects.") + if self._result_cache is not None: + return obj in self._result_cache + return self.filter(pk=obj.pk).exists() + + def _prefetch_related_objects(self): + # This method can only be called once the result cache has been filled. + prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups) + self._prefetch_done = True + + def explain(self, *, format=None, **options): + return self.query.explain(using=self.db, format=format, **options) + + ################################################## + # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS # + ################################################## + + def raw(self, raw_query, params=(), translations=None, using=None): + if using is None: + using = self.db + qs = RawQuerySet( + raw_query, + model=self.model, + params=params, + translations=translations, + using=using, + ) + qs._prefetch_related_lookups = self._prefetch_related_lookups[:] + return qs + + def _values(self, *fields, **expressions): + clone = self._chain() + if expressions: + clone = clone.annotate(**expressions) + clone._fields = fields + clone.query.set_values(fields) + return clone + + def values(self, *fields, **expressions): + fields += tuple(expressions) + clone = self._values(*fields, **expressions) + clone._iterable_class = ValuesIterable + return clone + + def values_list(self, *fields, flat=False, named=False): + if flat and named: + raise TypeError("'flat' and 'named' can't be used together.") + if flat and len(fields) > 1: + raise TypeError( + "'flat' is not valid when values_list is called with more than one " + "field." + ) + + field_names = {f for f in fields if not hasattr(f, "resolve_expression")} + _fields = [] + expressions = {} + counter = 1 + for field in fields: + if hasattr(field, "resolve_expression"): + field_id_prefix = getattr( + field, "default_alias", field.__class__.__name__.lower() + ) + while True: + field_id = field_id_prefix + str(counter) + counter += 1 + if field_id not in field_names: + break + expressions[field_id] = field + _fields.append(field_id) + else: + _fields.append(field) + + clone = self._values(*_fields, **expressions) + clone._iterable_class = ( + NamedValuesListIterable + if named + else FlatValuesListIterable + if flat + else ValuesListIterable + ) + return clone + + def dates(self, field_name, kind, order="ASC"): + """ + Return a list of date objects representing all available dates for + the given field_name, scoped to 'kind'. + """ + if kind not in ("year", "month", "week", "day"): + raise ValueError("'kind' must be one of 'year', 'month', 'week', or 'day'.") + if order not in ("ASC", "DESC"): + raise ValueError("'order' must be either 'ASC' or 'DESC'.") + return ( + self.annotate( + datefield=Trunc(field_name, kind, output_field=DateField()), + plain_field=F(field_name), + ) + .values_list("datefield", flat=True) + .distinct() + .filter(plain_field__isnull=False) + .order_by(("-" if order == "DESC" else "") + "datefield") + ) + + # RemovedInDjango50Warning: when the deprecation ends, remove is_dst + # argument. + def datetimes( + self, field_name, kind, order="ASC", tzinfo=None, is_dst=timezone.NOT_PASSED + ): + """ + Return a list of datetime objects representing all available + datetimes for the given field_name, scoped to 'kind'. + """ + if kind not in ("year", "month", "week", "day", "hour", "minute", "second"): + raise ValueError( + "'kind' must be one of 'year', 'month', 'week', 'day', " + "'hour', 'minute', or 'second'." + ) + if order not in ("ASC", "DESC"): + raise ValueError("'order' must be either 'ASC' or 'DESC'.") + if settings.USE_TZ: + if tzinfo is None: + tzinfo = timezone.get_current_timezone() + else: + tzinfo = None + return ( + self.annotate( + datetimefield=Trunc( + field_name, + kind, + output_field=DateTimeField(), + tzinfo=tzinfo, + is_dst=is_dst, + ), + plain_field=F(field_name), + ) + .values_list("datetimefield", flat=True) + .distinct() + .filter(plain_field__isnull=False) + .order_by(("-" if order == "DESC" else "") + "datetimefield") + ) + + def none(self): + """Return an empty QuerySet.""" + clone = self._chain() + clone.query.set_empty() + return clone + + ################################################################## + # PUBLIC METHODS THAT ALTER ATTRIBUTES AND RETURN A NEW QUERYSET # + ################################################################## + + def all(self): + """ + Return a new QuerySet that is a copy of the current one. This allows a + QuerySet to proxy for a model manager in some cases. + """ + return self._chain() + + def filter(self, *args, **kwargs): + """ + Return a new QuerySet instance with the args ANDed to the existing + set. + """ + self._not_support_combined_queries("filter") + return self._filter_or_exclude(False, args, kwargs) + + def exclude(self, *args, **kwargs): + """ + Return a new QuerySet instance with NOT (args) ANDed to the existing + set. + """ + self._not_support_combined_queries("exclude") + return self._filter_or_exclude(True, args, kwargs) + + def _filter_or_exclude(self, negate, args, kwargs): + if (args or kwargs) and self.query.is_sliced: + raise TypeError("Cannot filter a query once a slice has been taken.") + clone = self._chain() + if self._defer_next_filter: + self._defer_next_filter = False + clone._deferred_filter = negate, args, kwargs + else: + clone._filter_or_exclude_inplace(negate, args, kwargs) + return clone + + def _filter_or_exclude_inplace(self, negate, args, kwargs): + if negate: + self._query.add_q(~Q(*args, **kwargs)) + else: + self._query.add_q(Q(*args, **kwargs)) + + def complex_filter(self, filter_obj): + """ + Return a new QuerySet instance with filter_obj added to the filters. + + filter_obj can be a Q object or a dictionary of keyword lookup + arguments. + + This exists to support framework features such as 'limit_choices_to', + and usually it will be more natural to use other methods. + """ + if isinstance(filter_obj, Q): + clone = self._chain() + clone.query.add_q(filter_obj) + return clone + else: + return self._filter_or_exclude(False, args=(), kwargs=filter_obj) + + def _combinator_query(self, combinator, *other_qs, all=False): + # Clone the query to inherit the select list and everything + clone = self._chain() + # Clear limits and ordering so they can be reapplied + clone.query.clear_ordering(force=True) + clone.query.clear_limits() + clone.query.combined_queries = (self.query,) + tuple( + qs.query for qs in other_qs + ) + clone.query.combinator = combinator + clone.query.combinator_all = all + return clone + + def union(self, *other_qs, all=False): + # If the query is an EmptyQuerySet, combine all nonempty querysets. + if isinstance(self, EmptyQuerySet): + qs = [q for q in other_qs if not isinstance(q, EmptyQuerySet)] + if not qs: + return self + if len(qs) == 1: + return qs[0] + return qs[0]._combinator_query("union", *qs[1:], all=all) + return self._combinator_query("union", *other_qs, all=all) + + def intersection(self, *other_qs): + # If any query is an EmptyQuerySet, return it. + if isinstance(self, EmptyQuerySet): + return self + for other in other_qs: + if isinstance(other, EmptyQuerySet): + return other + return self._combinator_query("intersection", *other_qs) + + def difference(self, *other_qs): + # If the query is an EmptyQuerySet, return it. + if isinstance(self, EmptyQuerySet): + return self + return self._combinator_query("difference", *other_qs) + + def select_for_update(self, nowait=False, skip_locked=False, of=(), no_key=False): + """ + Return a new QuerySet instance that will select objects with a + FOR UPDATE lock. + """ + if nowait and skip_locked: + raise ValueError("The nowait option cannot be used with skip_locked.") + obj = self._chain() + obj._for_write = True + obj.query.select_for_update = True + obj.query.select_for_update_nowait = nowait + obj.query.select_for_update_skip_locked = skip_locked + obj.query.select_for_update_of = of + obj.query.select_for_no_key_update = no_key + return obj + + def select_related(self, *fields): + """ + Return a new QuerySet instance that will select related objects. + + If fields are specified, they must be ForeignKey fields and only those + related objects are included in the selection. + + If select_related(None) is called, clear the list. + """ + self._not_support_combined_queries("select_related") + if self._fields is not None: + raise TypeError( + "Cannot call select_related() after .values() or .values_list()" + ) + + obj = self._chain() + if fields == (None,): + obj.query.select_related = False + elif fields: + obj.query.add_select_related(fields) + else: + obj.query.select_related = True + return obj + + def prefetch_related(self, *lookups): + """ + Return a new QuerySet instance that will prefetch the specified + Many-To-One and Many-To-Many related objects when the QuerySet is + evaluated. + + When prefetch_related() is called more than once, append to the list of + prefetch lookups. If prefetch_related(None) is called, clear the list. + """ + self._not_support_combined_queries("prefetch_related") + clone = self._chain() + if lookups == (None,): + clone._prefetch_related_lookups = () + else: + for lookup in lookups: + if isinstance(lookup, Prefetch): + lookup = lookup.prefetch_to + lookup = lookup.split(LOOKUP_SEP, 1)[0] + if lookup in self.query._filtered_relations: + raise ValueError( + "prefetch_related() is not supported with FilteredRelation." + ) + clone._prefetch_related_lookups = clone._prefetch_related_lookups + lookups + return clone + + def annotate(self, *args, **kwargs): + """ + Return a query set in which the returned objects have been annotated + with extra data or aggregations. + """ + self._not_support_combined_queries("annotate") + return self._annotate(args, kwargs, select=True) + + def alias(self, *args, **kwargs): + """ + Return a query set with added aliases for extra data or aggregations. + """ + self._not_support_combined_queries("alias") + return self._annotate(args, kwargs, select=False) + + def _annotate(self, args, kwargs, select=True): + self._validate_values_are_expressions( + args + tuple(kwargs.values()), method_name="annotate" + ) + annotations = {} + for arg in args: + # The default_alias property may raise a TypeError. + try: + if arg.default_alias in kwargs: + raise ValueError( + "The named annotation '%s' conflicts with the " + "default name for another annotation." % arg.default_alias + ) + except TypeError: + raise TypeError("Complex annotations require an alias") + annotations[arg.default_alias] = arg + annotations.update(kwargs) + + clone = self._chain() + names = self._fields + if names is None: + names = set( + chain.from_iterable( + (field.name, field.attname) + if hasattr(field, "attname") + else (field.name,) + for field in self.model._meta.get_fields() + ) + ) + + for alias, annotation in annotations.items(): + if alias in names: + raise ValueError( + "The annotation '%s' conflicts with a field on " + "the model." % alias + ) + if isinstance(annotation, FilteredRelation): + clone.query.add_filtered_relation(annotation, alias) + else: + clone.query.add_annotation( + annotation, + alias, + is_summary=False, + select=select, + ) + for alias, annotation in clone.query.annotations.items(): + if alias in annotations and annotation.contains_aggregate: + if clone._fields is None: + clone.query.group_by = True + else: + clone.query.set_group_by() + break + + return clone + + def order_by(self, *field_names): + """Return a new QuerySet instance with the ordering changed.""" + if self.query.is_sliced: + raise TypeError("Cannot reorder a query once a slice has been taken.") + obj = self._chain() + obj.query.clear_ordering(force=True, clear_default=False) + obj.query.add_ordering(*field_names) + return obj + + def distinct(self, *field_names): + """ + Return a new QuerySet instance that will select only distinct results. + """ + self._not_support_combined_queries("distinct") + if self.query.is_sliced: + raise TypeError( + "Cannot create distinct fields once a slice has been taken." + ) + obj = self._chain() + obj.query.add_distinct_fields(*field_names) + return obj + + def extra( + self, + select=None, + where=None, + params=None, + tables=None, + order_by=None, + select_params=None, + ): + """Add extra SQL fragments to the query.""" + self._not_support_combined_queries("extra") + if self.query.is_sliced: + raise TypeError("Cannot change a query once a slice has been taken.") + clone = self._chain() + clone.query.add_extra(select, select_params, where, params, tables, order_by) + return clone + + def reverse(self): + """Reverse the ordering of the QuerySet.""" + if self.query.is_sliced: + raise TypeError("Cannot reverse a query once a slice has been taken.") + clone = self._chain() + clone.query.standard_ordering = not clone.query.standard_ordering + return clone + + def defer(self, *fields): + """ + Defer the loading of data for certain fields until they are accessed. + Add the set of deferred fields to any existing set of deferred fields. + The only exception to this is if None is passed in as the only + parameter, in which case removal all deferrals. + """ + self._not_support_combined_queries("defer") + if self._fields is not None: + raise TypeError("Cannot call defer() after .values() or .values_list()") + clone = self._chain() + if fields == (None,): + clone.query.clear_deferred_loading() + else: + clone.query.add_deferred_loading(fields) + return clone + + def only(self, *fields): + """ + Essentially, the opposite of defer(). Only the fields passed into this + method and that are not already specified as deferred are loaded + immediately when the queryset is evaluated. + """ + self._not_support_combined_queries("only") + if self._fields is not None: + raise TypeError("Cannot call only() after .values() or .values_list()") + if fields == (None,): + # Can only pass None to defer(), not only(), as the rest option. + # That won't stop people trying to do this, so let's be explicit. + raise TypeError("Cannot pass None as an argument to only().") + for field in fields: + field = field.split(LOOKUP_SEP, 1)[0] + if field in self.query._filtered_relations: + raise ValueError("only() is not supported with FilteredRelation.") + clone = self._chain() + clone.query.add_immediate_loading(fields) + return clone + + def using(self, alias): + """Select which database this QuerySet should execute against.""" + clone = self._chain() + clone._db = alias + return clone + + ################################### + # PUBLIC INTROSPECTION ATTRIBUTES # + ################################### + + @property + def ordered(self): + """ + Return True if the QuerySet is ordered -- i.e. has an order_by() + clause or a default ordering on the model (or is empty). + """ + if isinstance(self, EmptyQuerySet): + return True + if self.query.extra_order_by or self.query.order_by: + return True + elif ( + self.query.default_ordering + and self.query.get_meta().ordering + and + # A default ordering doesn't affect GROUP BY queries. + not self.query.group_by + ): + return True + else: + return False + + @property + def db(self): + """Return the database used if this query is executed now.""" + if self._for_write: + return self._db or router.db_for_write(self.model, **self._hints) + return self._db or router.db_for_read(self.model, **self._hints) + + ################### + # PRIVATE METHODS # + ################### + + def _insert( + self, + objs, + fields, + returning_fields=None, + raw=False, + using=None, + ignore_conflicts=False, + ): + """ + Insert a new record for the given model. This provides an interface to + the InsertQuery class and is how Model.save() is implemented. + """ + self._for_write = True + if using is None: + using = self.db + query = sql.InsertQuery(self.model, ignore_conflicts=ignore_conflicts) + query.insert_values(fields, objs, raw=raw) + return query.get_compiler(using=using).execute_sql(returning_fields) + + _insert.alters_data = True + _insert.queryset_only = False + + def _batched_insert(self, objs, fields, batch_size, ignore_conflicts=False): + """ + Helper method for bulk_create() to insert objs one batch at a time. + """ + if ( + ignore_conflicts + and not connections[self.db].features.supports_ignore_conflicts + ): + raise NotSupportedError( + "This database backend does not support ignoring conflicts." + ) + ops = connections[self.db].ops + max_batch_size = max(ops.bulk_batch_size(fields, objs), 1) + batch_size = min(batch_size, max_batch_size) if batch_size else max_batch_size + inserted_rows = [] + bulk_return = connections[self.db].features.can_return_rows_from_bulk_insert + for item in [objs[i : i + batch_size] for i in range(0, len(objs), batch_size)]: + if bulk_return and not ignore_conflicts: + inserted_rows.extend( + self._insert( + item, + fields=fields, + using=self.db, + returning_fields=self.model._meta.db_returning_fields, + ignore_conflicts=ignore_conflicts, + ) + ) + else: + self._insert( + item, + fields=fields, + using=self.db, + ignore_conflicts=ignore_conflicts, + ) + return inserted_rows + + def _chain(self): + """ + Return a copy of the current QuerySet that's ready for another + operation. + """ + obj = self._clone() + if obj._sticky_filter: + obj.query.filter_is_sticky = True + obj._sticky_filter = False + return obj + + def _clone(self): + """ + Return a copy of the current QuerySet. A lightweight alternative + to deepcopy(). + """ + c = self.__class__( + model=self.model, + query=self.query.chain(), + using=self._db, + hints=self._hints, + ) + c._sticky_filter = self._sticky_filter + c._for_write = self._for_write + c._prefetch_related_lookups = self._prefetch_related_lookups[:] + c._known_related_objects = self._known_related_objects + c._iterable_class = self._iterable_class + c._fields = self._fields + return c + + def _fetch_all(self): + if self._result_cache is None: + self._result_cache = list(self._iterable_class(self)) + if self._prefetch_related_lookups and not self._prefetch_done: + self._prefetch_related_objects() + + def _next_is_sticky(self): + """ + Indicate that the next filter call and the one following that should + be treated as a single filter. This is only important when it comes to + determining when to reuse tables for many-to-many filters. Required so + that we can filter naturally on the results of related managers. + + This doesn't return a clone of the current QuerySet (it returns + "self"). The method is only used internally and should be immediately + followed by a filter() that does create a clone. + """ + self._sticky_filter = True + return self + + def _merge_sanity_check(self, other): + """Check that two QuerySet classes may be merged.""" + if self._fields is not None and ( + set(self.query.values_select) != set(other.query.values_select) + or set(self.query.extra_select) != set(other.query.extra_select) + or set(self.query.annotation_select) != set(other.query.annotation_select) + ): + raise TypeError( + "Merging '%s' classes must involve the same values in each case." + % self.__class__.__name__ + ) + + def _merge_known_related_objects(self, other): + """ + Keep track of all known related objects from either QuerySet instance. + """ + for field, objects in other._known_related_objects.items(): + self._known_related_objects.setdefault(field, {}).update(objects) + + def resolve_expression(self, *args, **kwargs): + if self._fields and len(self._fields) > 1: + # values() queryset can only be used as nested queries + # if they are set up to select only a single field. + raise TypeError("Cannot use multi-field values as a filter value.") + query = self.query.resolve_expression(*args, **kwargs) + query._db = self._db + return query + + resolve_expression.queryset_only = True + + def _add_hints(self, **hints): + """ + Update hinting information for use by routers. Add new key/values or + overwrite existing key/values. + """ + self._hints.update(hints) + + def _has_filters(self): + """ + Check if this QuerySet has any filtering going on. This isn't + equivalent with checking if all objects are present in results, for + example, qs[1:]._has_filters() -> False. + """ + return self.query.has_filters() + + @staticmethod + def _validate_values_are_expressions(values, method_name): + invalid_args = sorted( + str(arg) for arg in values if not hasattr(arg, "resolve_expression") + ) + if invalid_args: + raise TypeError( + "QuerySet.%s() received non-expression(s): %s." + % ( + method_name, + ", ".join(invalid_args), + ) + ) + + def _not_support_combined_queries(self, operation_name): + if self.query.combinator: + raise NotSupportedError( + "Calling QuerySet.%s() after %s() is not supported." + % (operation_name, self.query.combinator) + ) + + +class InstanceCheckMeta(type): + def __instancecheck__(self, instance): + return isinstance(instance, QuerySet) and instance.query.is_empty() + + +class EmptyQuerySet(metaclass=InstanceCheckMeta): + """ + Marker class to checking if a queryset is empty by .none(): + isinstance(qs.none(), EmptyQuerySet) -> True + """ + + def __init__(self, *args, **kwargs): + raise TypeError("EmptyQuerySet can't be instantiated") + + +class RawQuerySet: + """ + Provide an iterator which converts the results of raw SQL queries into + annotated model instances. + """ + + def __init__( + self, + raw_query, + model=None, + query=None, + params=(), + translations=None, + using=None, + hints=None, + ): + self.raw_query = raw_query + self.model = model + self._db = using + self._hints = hints or {} + self.query = query or sql.RawQuery(sql=raw_query, using=self.db, params=params) + self.params = params + self.translations = translations or {} + self._result_cache = None + self._prefetch_related_lookups = () + self._prefetch_done = False + + def resolve_model_init_order(self): + """Resolve the init field names and value positions.""" + converter = connections[self.db].introspection.identifier_converter + model_init_fields = [ + f for f in self.model._meta.fields if converter(f.column) in self.columns + ] + annotation_fields = [ + (column, pos) + for pos, column in enumerate(self.columns) + if column not in self.model_fields + ] + model_init_order = [ + self.columns.index(converter(f.column)) for f in model_init_fields + ] + model_init_names = [f.attname for f in model_init_fields] + return model_init_names, model_init_order, annotation_fields + + def prefetch_related(self, *lookups): + """Same as QuerySet.prefetch_related()""" + clone = self._clone() + if lookups == (None,): + clone._prefetch_related_lookups = () + else: + clone._prefetch_related_lookups = clone._prefetch_related_lookups + lookups + return clone + + def _prefetch_related_objects(self): + prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups) + self._prefetch_done = True + + def _clone(self): + """Same as QuerySet._clone()""" + c = self.__class__( + self.raw_query, + model=self.model, + query=self.query, + params=self.params, + translations=self.translations, + using=self._db, + hints=self._hints, + ) + c._prefetch_related_lookups = self._prefetch_related_lookups[:] + return c + + def _fetch_all(self): + if self._result_cache is None: + self._result_cache = list(self.iterator()) + if self._prefetch_related_lookups and not self._prefetch_done: + self._prefetch_related_objects() + + def __len__(self): + self._fetch_all() + return len(self._result_cache) + + def __bool__(self): + self._fetch_all() + return bool(self._result_cache) + + def __iter__(self): + self._fetch_all() + return iter(self._result_cache) + + def iterator(self): + # Cache some things for performance reasons outside the loop. + db = self.db + compiler = connections[db].ops.compiler("SQLCompiler")( + self.query, connections[db], db + ) + + query = iter(self.query) + + try: + ( + model_init_names, + model_init_pos, + annotation_fields, + ) = self.resolve_model_init_order() + if self.model._meta.pk.attname not in model_init_names: + raise exceptions.FieldDoesNotExist( + "Raw query must include the primary key" + ) + model_cls = self.model + fields = [self.model_fields.get(c) for c in self.columns] + converters = compiler.get_converters( + [f.get_col(f.model._meta.db_table) if f else None for f in fields] + ) + if converters: + query = compiler.apply_converters(query, converters) + for values in query: + # Associate fields to values + model_init_values = [values[pos] for pos in model_init_pos] + instance = model_cls.from_db(db, model_init_names, model_init_values) + if annotation_fields: + for column, pos in annotation_fields: + setattr(instance, column, values[pos]) + yield instance + finally: + # Done iterating the Query. If it has its own cursor, close it. + if hasattr(self.query, "cursor") and self.query.cursor: + self.query.cursor.close() + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.query) + + def __getitem__(self, k): + return list(self)[k] + + @property + def db(self): + """Return the database used if this query is executed now.""" + return self._db or router.db_for_read(self.model, **self._hints) + + def using(self, alias): + """Select the database this RawQuerySet should execute against.""" + return RawQuerySet( + self.raw_query, + model=self.model, + query=self.query.chain(using=alias), + params=self.params, + translations=self.translations, + using=alias, + ) + + @cached_property + def columns(self): + """ + A list of model field names in the order they'll appear in the + query results. + """ + columns = self.query.get_columns() + # Adjust any column names which don't match field names + for (query_name, model_name) in self.translations.items(): + # Ignore translations for nonexistent column names + try: + index = columns.index(query_name) + except ValueError: + pass + else: + columns[index] = model_name + return columns + + @cached_property + def model_fields(self): + """A dict mapping column names to model field names.""" + converter = connections[self.db].introspection.identifier_converter + model_fields = {} + for field in self.model._meta.fields: + name, column = field.get_attname_column() + model_fields[converter(column)] = field + return model_fields + + +class Prefetch: + def __init__(self, lookup, queryset=None, to_attr=None): + # `prefetch_through` is the path we traverse to perform the prefetch. + self.prefetch_through = lookup + # `prefetch_to` is the path to the attribute that stores the result. + self.prefetch_to = lookup + if queryset is not None and ( + isinstance(queryset, RawQuerySet) + or ( + hasattr(queryset, "_iterable_class") + and not issubclass(queryset._iterable_class, ModelIterable) + ) + ): + raise ValueError( + "Prefetch querysets cannot use raw(), values(), and values_list()." + ) + if to_attr: + self.prefetch_to = LOOKUP_SEP.join( + lookup.split(LOOKUP_SEP)[:-1] + [to_attr] + ) + + self.queryset = queryset + self.to_attr = to_attr + + def __getstate__(self): + obj_dict = self.__dict__.copy() + if self.queryset is not None: + queryset = self.queryset._chain() + # Prevent the QuerySet from being evaluated + queryset._result_cache = [] + queryset._prefetch_done = True + obj_dict["queryset"] = queryset + return obj_dict + + def add_prefix(self, prefix): + self.prefetch_through = prefix + LOOKUP_SEP + self.prefetch_through + self.prefetch_to = prefix + LOOKUP_SEP + self.prefetch_to + + def get_current_prefetch_to(self, level): + return LOOKUP_SEP.join(self.prefetch_to.split(LOOKUP_SEP)[: level + 1]) + + def get_current_to_attr(self, level): + parts = self.prefetch_to.split(LOOKUP_SEP) + to_attr = parts[level] + as_attr = self.to_attr and level == len(parts) - 1 + return to_attr, as_attr + + def get_current_queryset(self, level): + if self.get_current_prefetch_to(level) == self.prefetch_to: + return self.queryset + return None + + def __eq__(self, other): + if not isinstance(other, Prefetch): + return NotImplemented + return self.prefetch_to == other.prefetch_to + + def __hash__(self): + return hash((self.__class__, self.prefetch_to)) + + +def normalize_prefetch_lookups(lookups, prefix=None): + """Normalize lookups into Prefetch objects.""" + ret = [] + for lookup in lookups: + if not isinstance(lookup, Prefetch): + lookup = Prefetch(lookup) + if prefix: + lookup.add_prefix(prefix) + ret.append(lookup) + return ret + + +def prefetch_related_objects(model_instances, *related_lookups): + """ + Populate prefetched object caches for a list of model instances based on + the lookups/Prefetch instances given. + """ + if not model_instances: + return # nothing to do + + # We need to be able to dynamically add to the list of prefetch_related + # lookups that we look up (see below). So we need some book keeping to + # ensure we don't do duplicate work. + done_queries = {} # dictionary of things like 'foo__bar': [results] + + auto_lookups = set() # we add to this as we go through. + followed_descriptors = set() # recursion protection + + all_lookups = normalize_prefetch_lookups(reversed(related_lookups)) + while all_lookups: + lookup = all_lookups.pop() + if lookup.prefetch_to in done_queries: + if lookup.queryset is not None: + raise ValueError( + "'%s' lookup was already seen with a different queryset. " + "You may need to adjust the ordering of your lookups." + % lookup.prefetch_to + ) + + continue + + # Top level, the list of objects to decorate is the result cache + # from the primary QuerySet. It won't be for deeper levels. + obj_list = model_instances + + through_attrs = lookup.prefetch_through.split(LOOKUP_SEP) + for level, through_attr in enumerate(through_attrs): + # Prepare main instances + if not obj_list: + break + + prefetch_to = lookup.get_current_prefetch_to(level) + if prefetch_to in done_queries: + # Skip any prefetching, and any object preparation + obj_list = done_queries[prefetch_to] + continue + + # Prepare objects: + good_objects = True + for obj in obj_list: + # Since prefetching can re-use instances, it is possible to have + # the same instance multiple times in obj_list, so obj might + # already be prepared. + if not hasattr(obj, "_prefetched_objects_cache"): + try: + obj._prefetched_objects_cache = {} + except (AttributeError, TypeError): + # Must be an immutable object from + # values_list(flat=True), for example (TypeError) or + # a QuerySet subclass that isn't returning Model + # instances (AttributeError), either in Django or a 3rd + # party. prefetch_related() doesn't make sense, so quit. + good_objects = False + break + if not good_objects: + break + + # Descend down tree + + # We assume that objects retrieved are homogeneous (which is the premise + # of prefetch_related), so what applies to first object applies to all. + first_obj = obj_list[0] + to_attr = lookup.get_current_to_attr(level)[0] + prefetcher, descriptor, attr_found, is_fetched = get_prefetcher( + first_obj, through_attr, to_attr + ) + + if not attr_found: + raise AttributeError( + "Cannot find '%s' on %s object, '%s' is an invalid " + "parameter to prefetch_related()" + % ( + through_attr, + first_obj.__class__.__name__, + lookup.prefetch_through, + ) + ) + + if level == len(through_attrs) - 1 and prefetcher is None: + # Last one, this *must* resolve to something that supports + # prefetching, otherwise there is no point adding it and the + # developer asking for it has made a mistake. + raise ValueError( + "'%s' does not resolve to an item that supports " + "prefetching - this is an invalid parameter to " + "prefetch_related()." % lookup.prefetch_through + ) + + obj_to_fetch = None + if prefetcher is not None: + obj_to_fetch = [obj for obj in obj_list if not is_fetched(obj)] + + if obj_to_fetch: + obj_list, additional_lookups = prefetch_one_level( + obj_to_fetch, + prefetcher, + lookup, + level, + ) + # We need to ensure we don't keep adding lookups from the + # same relationships to stop infinite recursion. So, if we + # are already on an automatically added lookup, don't add + # the new lookups from relationships we've seen already. + if not ( + prefetch_to in done_queries + and lookup in auto_lookups + and descriptor in followed_descriptors + ): + done_queries[prefetch_to] = obj_list + new_lookups = normalize_prefetch_lookups( + reversed(additional_lookups), prefetch_to + ) + auto_lookups.update(new_lookups) + all_lookups.extend(new_lookups) + followed_descriptors.add(descriptor) + else: + # Either a singly related object that has already been fetched + # (e.g. via select_related), or hopefully some other property + # that doesn't support prefetching but needs to be traversed. + + # We replace the current list of parent objects with the list + # of related objects, filtering out empty or missing values so + # that we can continue with nullable or reverse relations. + new_obj_list = [] + for obj in obj_list: + if through_attr in getattr(obj, "_prefetched_objects_cache", ()): + # If related objects have been prefetched, use the + # cache rather than the object's through_attr. + new_obj = list(obj._prefetched_objects_cache.get(through_attr)) + else: + try: + new_obj = getattr(obj, through_attr) + except exceptions.ObjectDoesNotExist: + continue + if new_obj is None: + continue + # We special-case `list` rather than something more generic + # like `Iterable` because we don't want to accidentally match + # user models that define __iter__. + if isinstance(new_obj, list): + new_obj_list.extend(new_obj) + else: + new_obj_list.append(new_obj) + obj_list = new_obj_list + + +def get_prefetcher(instance, through_attr, to_attr): + """ + For the attribute 'through_attr' on the given instance, find + an object that has a get_prefetch_queryset(). + Return a 4 tuple containing: + (the object with get_prefetch_queryset (or None), + the descriptor object representing this relationship (or None), + a boolean that is False if the attribute was not found at all, + a function that takes an instance and returns a boolean that is True if + the attribute has already been fetched for that instance) + """ + + def has_to_attr_attribute(instance): + return hasattr(instance, to_attr) + + prefetcher = None + is_fetched = has_to_attr_attribute + + # For singly related objects, we have to avoid getting the attribute + # from the object, as this will trigger the query. So we first try + # on the class, in order to get the descriptor object. + rel_obj_descriptor = getattr(instance.__class__, through_attr, None) + if rel_obj_descriptor is None: + attr_found = hasattr(instance, through_attr) + else: + attr_found = True + if rel_obj_descriptor: + # singly related object, descriptor object has the + # get_prefetch_queryset() method. + if hasattr(rel_obj_descriptor, "get_prefetch_queryset"): + prefetcher = rel_obj_descriptor + is_fetched = rel_obj_descriptor.is_cached + else: + # descriptor doesn't support prefetching, so we go ahead and get + # the attribute on the instance rather than the class to + # support many related managers + rel_obj = getattr(instance, through_attr) + if hasattr(rel_obj, "get_prefetch_queryset"): + prefetcher = rel_obj + if through_attr != to_attr: + # Special case cached_property instances because hasattr + # triggers attribute computation and assignment. + if isinstance( + getattr(instance.__class__, to_attr, None), cached_property + ): + + def has_cached_property(instance): + return to_attr in instance.__dict__ + + is_fetched = has_cached_property + else: + + def in_prefetched_cache(instance): + return through_attr in instance._prefetched_objects_cache + + is_fetched = in_prefetched_cache + return prefetcher, rel_obj_descriptor, attr_found, is_fetched + + +def prefetch_one_level(instances, prefetcher, lookup, level): + """ + Helper function for prefetch_related_objects(). + + Run prefetches on all instances using the prefetcher object, + assigning results to relevant caches in instance. + + Return the prefetched objects along with any additional prefetches that + must be done due to prefetch_related lookups found from default managers. + """ + # prefetcher must have a method get_prefetch_queryset() which takes a list + # of instances, and returns a tuple: + + # (queryset of instances of self.model that are related to passed in instances, + # callable that gets value to be matched for returned instances, + # callable that gets value to be matched for passed in instances, + # boolean that is True for singly related objects, + # cache or field name to assign to, + # boolean that is True when the previous argument is a cache name vs a field name). + + # The 'values to be matched' must be hashable as they will be used + # in a dictionary. + + ( + rel_qs, + rel_obj_attr, + instance_attr, + single, + cache_name, + is_descriptor, + ) = prefetcher.get_prefetch_queryset(instances, lookup.get_current_queryset(level)) + # We have to handle the possibility that the QuerySet we just got back + # contains some prefetch_related lookups. We don't want to trigger the + # prefetch_related functionality by evaluating the query. Rather, we need + # to merge in the prefetch_related lookups. + # Copy the lookups in case it is a Prefetch object which could be reused + # later (happens in nested prefetch_related). + additional_lookups = [ + copy.copy(additional_lookup) + for additional_lookup in getattr(rel_qs, "_prefetch_related_lookups", ()) + ] + if additional_lookups: + # Don't need to clone because the manager should have given us a fresh + # instance, so we access an internal instead of using public interface + # for performance reasons. + rel_qs._prefetch_related_lookups = () + + all_related_objects = list(rel_qs) + + rel_obj_cache = {} + for rel_obj in all_related_objects: + rel_attr_val = rel_obj_attr(rel_obj) + rel_obj_cache.setdefault(rel_attr_val, []).append(rel_obj) + + to_attr, as_attr = lookup.get_current_to_attr(level) + # Make sure `to_attr` does not conflict with a field. + if as_attr and instances: + # We assume that objects retrieved are homogeneous (which is the premise + # of prefetch_related), so what applies to first object applies to all. + model = instances[0].__class__ + try: + model._meta.get_field(to_attr) + except exceptions.FieldDoesNotExist: + pass + else: + msg = "to_attr={} conflicts with a field on the {} model." + raise ValueError(msg.format(to_attr, model.__name__)) + + # Whether or not we're prefetching the last part of the lookup. + leaf = len(lookup.prefetch_through.split(LOOKUP_SEP)) - 1 == level + + for obj in instances: + instance_attr_val = instance_attr(obj) + vals = rel_obj_cache.get(instance_attr_val, []) + + if single: + val = vals[0] if vals else None + if as_attr: + # A to_attr has been given for the prefetch. + setattr(obj, to_attr, val) + elif is_descriptor: + # cache_name points to a field name in obj. + # This field is a descriptor for a related object. + setattr(obj, cache_name, val) + else: + # No to_attr has been given for this prefetch operation and the + # cache_name does not point to a descriptor. Store the value of + # the field in the object's field cache. + obj._state.fields_cache[cache_name] = val + else: + if as_attr: + setattr(obj, to_attr, vals) + else: + manager = getattr(obj, to_attr) + if leaf and lookup.queryset is not None: + qs = manager._apply_rel_filters(lookup.queryset) + else: + qs = manager.get_queryset() + qs._result_cache = vals + # We don't want the individual qs doing prefetch_related now, + # since we have merged this into the current work. + qs._prefetch_done = True + obj._prefetched_objects_cache[cache_name] = qs + return all_related_objects, additional_lookups + + +class RelatedPopulator: + """ + RelatedPopulator is used for select_related() object instantiation. + + The idea is that each select_related() model will be populated by a + different RelatedPopulator instance. The RelatedPopulator instances get + klass_info and select (computed in SQLCompiler) plus the used db as + input for initialization. That data is used to compute which columns + to use, how to instantiate the model, and how to populate the links + between the objects. + + The actual creation of the objects is done in populate() method. This + method gets row and from_obj as input and populates the select_related() + model instance. + """ + + def __init__(self, klass_info, select, db): + self.db = db + # Pre-compute needed attributes. The attributes are: + # - model_cls: the possibly deferred model class to instantiate + # - either: + # - cols_start, cols_end: usually the columns in the row are + # in the same order model_cls.__init__ expects them, so we + # can instantiate by model_cls(*row[cols_start:cols_end]) + # - reorder_for_init: When select_related descends to a child + # class, then we want to reuse the already selected parent + # data. However, in this case the parent data isn't necessarily + # in the same order that Model.__init__ expects it to be, so + # we have to reorder the parent data. The reorder_for_init + # attribute contains a function used to reorder the field data + # in the order __init__ expects it. + # - pk_idx: the index of the primary key field in the reordered + # model data. Used to check if a related object exists at all. + # - init_list: the field attnames fetched from the database. For + # deferred models this isn't the same as all attnames of the + # model's fields. + # - related_populators: a list of RelatedPopulator instances if + # select_related() descends to related models from this model. + # - local_setter, remote_setter: Methods to set cached values on + # the object being populated and on the remote object. Usually + # these are Field.set_cached_value() methods. + select_fields = klass_info["select_fields"] + from_parent = klass_info["from_parent"] + if not from_parent: + self.cols_start = select_fields[0] + self.cols_end = select_fields[-1] + 1 + self.init_list = [ + f[0].target.attname for f in select[self.cols_start : self.cols_end] + ] + self.reorder_for_init = None + else: + attname_indexes = { + select[idx][0].target.attname: idx for idx in select_fields + } + model_init_attnames = ( + f.attname for f in klass_info["model"]._meta.concrete_fields + ) + self.init_list = [ + attname for attname in model_init_attnames if attname in attname_indexes + ] + self.reorder_for_init = operator.itemgetter( + *[attname_indexes[attname] for attname in self.init_list] + ) + + self.model_cls = klass_info["model"] + self.pk_idx = self.init_list.index(self.model_cls._meta.pk.attname) + self.related_populators = get_related_populators(klass_info, select, self.db) + self.local_setter = klass_info["local_setter"] + self.remote_setter = klass_info["remote_setter"] + + def populate(self, row, from_obj): + if self.reorder_for_init: + obj_data = self.reorder_for_init(row) + else: + obj_data = row[self.cols_start : self.cols_end] + if obj_data[self.pk_idx] is None: + obj = None + else: + obj = self.model_cls.from_db(self.db, self.init_list, obj_data) + for rel_iter in self.related_populators: + rel_iter.populate(row, obj) + self.local_setter(from_obj, obj) + if obj is not None: + self.remote_setter(obj, from_obj) + + +def get_related_populators(klass_info, select, db): + iterators = [] + related_klass_infos = klass_info.get("related_klass_infos", []) + for rel_klass_info in related_klass_infos: + rel_cls = RelatedPopulator(rel_klass_info, select, db) + iterators.append(rel_cls) + return iterators diff --git a/venv/Lib/site-packages/django/db/models/query_utils.py b/venv/Lib/site-packages/django/db/models/query_utils.py new file mode 100644 index 000000000..6ea82b652 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/query_utils.py @@ -0,0 +1,336 @@ +""" +Various data structures used in query construction. + +Factored out from django.db.models.query to avoid making the main module very +large and/or so that they can be used by other modules without getting into +circular import difficulties. +""" +import copy +import functools +import inspect +from collections import namedtuple + +from django.core.exceptions import FieldError +from django.db.models.constants import LOOKUP_SEP +from django.utils import tree + +# PathInfo is used when converting lookups (fk__somecol). The contents +# describe the relation in Model terms (model Options and Fields for both +# sides of the relation. The join_field is the field backing the relation. +PathInfo = namedtuple( + "PathInfo", + "from_opts to_opts target_fields join_field m2m direct filtered_relation", +) + + +def subclasses(cls): + yield cls + for subclass in cls.__subclasses__(): + yield from subclasses(subclass) + + +class Q(tree.Node): + """ + Encapsulate filters as objects that can then be combined logically (using + `&` and `|`). + """ + + # Connection types + AND = "AND" + OR = "OR" + default = AND + conditional = True + + def __init__(self, *args, _connector=None, _negated=False, **kwargs): + super().__init__( + children=[*args, *sorted(kwargs.items())], + connector=_connector, + negated=_negated, + ) + + def _combine(self, other, conn): + if not (isinstance(other, Q) or getattr(other, "conditional", False) is True): + raise TypeError(other) + + if not self: + return other.copy() if hasattr(other, "copy") else copy.copy(other) + elif isinstance(other, Q) and not other: + _, args, kwargs = self.deconstruct() + return type(self)(*args, **kwargs) + + obj = type(self)() + obj.connector = conn + obj.add(self, conn) + obj.add(other, conn) + return obj + + def __or__(self, other): + return self._combine(other, self.OR) + + def __and__(self, other): + return self._combine(other, self.AND) + + def __invert__(self): + obj = type(self)() + obj.add(self, self.AND) + obj.negate() + return obj + + def resolve_expression( + self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False + ): + # We must promote any new joins to left outer joins so that when Q is + # used as an expression, rows aren't filtered due to joins. + clause, joins = query._add_q( + self, + reuse, + allow_joins=allow_joins, + split_subq=False, + check_filterable=False, + ) + query.promote_joins(joins) + return clause + + def deconstruct(self): + path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) + if path.startswith("django.db.models.query_utils"): + path = path.replace("django.db.models.query_utils", "django.db.models") + args = tuple(self.children) + kwargs = {} + if self.connector != self.default: + kwargs["_connector"] = self.connector + if self.negated: + kwargs["_negated"] = True + return path, args, kwargs + + +class DeferredAttribute: + """ + A wrapper for a deferred-loading field. When the value is read from this + object the first time, the query is executed. + """ + + def __init__(self, field): + self.field = field + + def __get__(self, instance, cls=None): + """ + Retrieve and caches the value from the datastore on the first lookup. + Return the cached value. + """ + if instance is None: + return self + data = instance.__dict__ + field_name = self.field.attname + if field_name not in data: + # Let's see if the field is part of the parent chain. If so we + # might be able to reuse the already loaded value. Refs #18343. + val = self._check_parent_chain(instance) + if val is None: + instance.refresh_from_db(fields=[field_name]) + else: + data[field_name] = val + return data[field_name] + + def _check_parent_chain(self, instance): + """ + Check if the field value can be fetched from a parent field already + loaded in the instance. This can be done if the to-be fetched + field is a primary key field. + """ + opts = instance._meta + link_field = opts.get_ancestor_link(self.field.model) + if self.field.primary_key and self.field != link_field: + return getattr(instance, link_field.attname) + return None + + +class RegisterLookupMixin: + @classmethod + def _get_lookup(cls, lookup_name): + return cls.get_lookups().get(lookup_name, None) + + @classmethod + @functools.lru_cache(maxsize=None) + def get_lookups(cls): + class_lookups = [ + parent.__dict__.get("class_lookups", {}) for parent in inspect.getmro(cls) + ] + return cls.merge_dicts(class_lookups) + + def get_lookup(self, lookup_name): + from django.db.models.lookups import Lookup + + found = self._get_lookup(lookup_name) + if found is None and hasattr(self, "output_field"): + return self.output_field.get_lookup(lookup_name) + if found is not None and not issubclass(found, Lookup): + return None + return found + + def get_transform(self, lookup_name): + from django.db.models.lookups import Transform + + found = self._get_lookup(lookup_name) + if found is None and hasattr(self, "output_field"): + return self.output_field.get_transform(lookup_name) + if found is not None and not issubclass(found, Transform): + return None + return found + + @staticmethod + def merge_dicts(dicts): + """ + Merge dicts in reverse to preference the order of the original list. e.g., + merge_dicts([a, b]) will preference the keys in 'a' over those in 'b'. + """ + merged = {} + for d in reversed(dicts): + merged.update(d) + return merged + + @classmethod + def _clear_cached_lookups(cls): + for subclass in subclasses(cls): + subclass.get_lookups.cache_clear() + + @classmethod + def register_lookup(cls, lookup, lookup_name=None): + if lookup_name is None: + lookup_name = lookup.lookup_name + if "class_lookups" not in cls.__dict__: + cls.class_lookups = {} + cls.class_lookups[lookup_name] = lookup + cls._clear_cached_lookups() + return lookup + + @classmethod + def _unregister_lookup(cls, lookup, lookup_name=None): + """ + Remove given lookup from cls lookups. For use in tests only as it's + not thread-safe. + """ + if lookup_name is None: + lookup_name = lookup.lookup_name + del cls.class_lookups[lookup_name] + + +def select_related_descend(field, restricted, requested, load_fields, reverse=False): + """ + Return True if this field should be used to descend deeper for + select_related() purposes. Used by both the query construction code + (sql.query.fill_related_selections()) and the model instance creation code + (query.get_klass_info()). + + Arguments: + * field - the field to be checked + * restricted - a boolean field, indicating if the field list has been + manually restricted using a requested clause) + * requested - The select_related() dictionary. + * load_fields - the set of fields to be loaded on this model + * reverse - boolean, True if we are checking a reverse select related + """ + if not field.remote_field: + return False + if field.remote_field.parent_link and not reverse: + return False + if restricted: + if reverse and field.related_query_name() not in requested: + return False + if not reverse and field.name not in requested: + return False + if not restricted and field.null: + return False + if load_fields: + if field.attname not in load_fields: + if restricted and field.name in requested: + msg = ( + "Field %s.%s cannot be both deferred and traversed using " + "select_related at the same time." + ) % (field.model._meta.object_name, field.name) + raise FieldError(msg) + return True + + +def refs_expression(lookup_parts, annotations): + """ + Check if the lookup_parts contains references to the given annotations set. + Because the LOOKUP_SEP is contained in the default annotation names, check + each prefix of the lookup_parts for a match. + """ + for n in range(1, len(lookup_parts) + 1): + level_n_lookup = LOOKUP_SEP.join(lookup_parts[0:n]) + if level_n_lookup in annotations and annotations[level_n_lookup]: + return annotations[level_n_lookup], lookup_parts[n:] + return False, () + + +def check_rel_lookup_compatibility(model, target_opts, field): + """ + Check that self.model is compatible with target_opts. Compatibility + is OK if: + 1) model and opts match (where proxy inheritance is removed) + 2) model is parent of opts' model or the other way around + """ + + def check(opts): + return ( + model._meta.concrete_model == opts.concrete_model + or opts.concrete_model in model._meta.get_parent_list() + or model in opts.get_parent_list() + ) + + # If the field is a primary key, then doing a query against the field's + # model is ok, too. Consider the case: + # class Restaurant(models.Model): + # place = OneToOneField(Place, primary_key=True): + # Restaurant.objects.filter(pk__in=Restaurant.objects.all()). + # If we didn't have the primary key check, then pk__in (== place__in) would + # give Place's opts as the target opts, but Restaurant isn't compatible + # with that. This logic applies only to primary keys, as when doing __in=qs, + # we are going to turn this into __in=qs.values('pk') later on. + return check(target_opts) or ( + getattr(field, "primary_key", False) and check(field.model._meta) + ) + + +class FilteredRelation: + """Specify custom filtering in the ON clause of SQL joins.""" + + def __init__(self, relation_name, *, condition=Q()): + if not relation_name: + raise ValueError("relation_name cannot be empty.") + self.relation_name = relation_name + self.alias = None + if not isinstance(condition, Q): + raise ValueError("condition argument must be a Q() instance.") + self.condition = condition + self.path = [] + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + return ( + self.relation_name == other.relation_name + and self.alias == other.alias + and self.condition == other.condition + ) + + def clone(self): + clone = FilteredRelation(self.relation_name, condition=self.condition) + clone.alias = self.alias + clone.path = self.path[:] + return clone + + def resolve_expression(self, *args, **kwargs): + """ + QuerySet.annotate() only accepts expression-like arguments + (with a resolve_expression() method). + """ + raise NotImplementedError("FilteredRelation.resolve_expression() is unused.") + + def as_sql(self, compiler, connection): + # Resolve the condition in Join.filtered_relation. + query = compiler.query + where = query.build_filtered_relation_q(self.condition, reuse=set(self.path)) + return compiler.compile(where) diff --git a/venv/Lib/site-packages/django/db/models/signals.py b/venv/Lib/site-packages/django/db/models/signals.py new file mode 100644 index 000000000..a0720937a --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/signals.py @@ -0,0 +1,54 @@ +from functools import partial + +from django.db.models.utils import make_model_tuple +from django.dispatch import Signal + +class_prepared = Signal() + + +class ModelSignal(Signal): + """ + Signal subclass that allows the sender to be lazily specified as a string + of the `app_label.ModelName` form. + """ + + def _lazy_method(self, method, apps, receiver, sender, **kwargs): + from django.db.models.options import Options + + # This partial takes a single optional argument named "sender". + partial_method = partial(method, receiver, **kwargs) + if isinstance(sender, str): + apps = apps or Options.default_apps + apps.lazy_model_operation(partial_method, make_model_tuple(sender)) + else: + return partial_method(sender) + + def connect(self, receiver, sender=None, weak=True, dispatch_uid=None, apps=None): + self._lazy_method( + super().connect, + apps, + receiver, + sender, + weak=weak, + dispatch_uid=dispatch_uid, + ) + + def disconnect(self, receiver=None, sender=None, dispatch_uid=None, apps=None): + return self._lazy_method( + super().disconnect, apps, receiver, sender, dispatch_uid=dispatch_uid + ) + + +pre_init = ModelSignal(use_caching=True) +post_init = ModelSignal(use_caching=True) + +pre_save = ModelSignal(use_caching=True) +post_save = ModelSignal(use_caching=True) + +pre_delete = ModelSignal(use_caching=True) +post_delete = ModelSignal(use_caching=True) + +m2m_changed = ModelSignal(use_caching=True) + +pre_migrate = Signal() +post_migrate = Signal() diff --git a/venv/Lib/site-packages/django/db/models/sql/__init__.py b/venv/Lib/site-packages/django/db/models/sql/__init__.py new file mode 100644 index 000000000..2956e047b --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/__init__.py @@ -0,0 +1,6 @@ +from django.db.models.sql.query import * # NOQA +from django.db.models.sql.query import Query +from django.db.models.sql.subqueries import * # NOQA +from django.db.models.sql.where import AND, OR + +__all__ = ["Query", "AND", "OR"] diff --git a/venv/Lib/site-packages/django/db/models/sql/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/sql/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..502fc9f7a62d8622796be751de5cb6a88cb47568 GIT binary patch literal 411 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/sql/__pycache__/datastructures.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/sql/__pycache__/datastructures.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cddaf85a470bf8ebacae0524529e38355d0b3e57 GIT binary patch literal 6239 zcmai2&5s;M74Pcq>FMd6on1SQ6DI++Rx#d*>~Rta2q7^}>|H0u857$HsI{T#o$A@` zaZmSbRgdi*&49!P!G#04A#t#!9Poh?e*hBPxNzWt8gW3Ja*l)`L|T5YdcO7}N{_mx zzU#eL@BQ9;oh~jq8lHdu@E@Di=QQnK)R=!vG%n+nw@`4+(>UXL%(}X#cMZ>A+BJUxds^>v`$zW^?UUZr!-~-kr5uE$W?rbTlsGl~1DxHIIQ+oioqiIyXMlJd>Ls zwv<=i>Bm`gJ&lsV$Bv5!v~zcJ*X^L|0Ci~a(9KdeN_f-?GSop@57RO?$lUweQES@` z)E-^h^TNF#?qe^t(fvSTQWkc58M;=Zwp!c@;y4uU{UFIC?VO1aJ7wEJrnU(mw8CBn z!C=~My`lPA2KbpgR3}ES;Qe$N#gGj(UmNNu!SHSEF>8{j;_zM=drL{s4W)lS%C`Mp zkZsqE+>~M5_A13dFO}XB4HQ#U=VMJ&uC=&#|hWp)Z)(t^} zVv&j(6(qyCLY+wW^(0=!pskrqP|uO`=#DSbv>&0Eo#z=9oj<88l|h-6g?gpJHa#mW z7k0VF$SQdi3SZ%iyoP^=FY#skFYpumB>t=X34RLyi(Cf}r*o5RA^0cM>VP@mrW)@m ziwzR)QVT|TCGGYi(qQQBR+xl>tm693x0`M&4q(R;wnA#X9jd+7Z{2*yh0=)KhPw^~ z2p#M*@MH@`Z3I~SVv}gV{QG8t4zH(U`3|gFbg*0aK*jzlG>i8-E6w6 zD=7{X#aLrD&yVpSZS=FtL~`9ceW!*R7=n--JXcLfr#Q=LL&|?T*Z4M0Gvs` z8}u6P8*!|7i4>RabVTje?aK_*yCh5S(uGw;AeC^XC(?TnkCH9LbvupY^ggwK4kFs@ zXV{J;4Cb~|E?=E;cEME~DP4D0VK7)!KQgMwa93fd32q6j)DGv}R*(>J%`^$; zcOanhv)x|kuFlO+SPfcaIAxar$_+%AoXZrtK|*bjcBjO+;9xh~K15)TR%HH|!U8T8 zK_qa@mTIqa5WbptfJ|3L-6#%3ygPRYG;2!oJRi6r=;!Kumk8rvGmJy-w_3ADSqQVd>>UiG3@7z7Sw+F&?(jo&4de4((1zkDaw*cv}fsgI4h%#`ZJ6Jp`8)qf< zQvU;U^{lMtC8d3XfHYwauYo8O+w2lK#kLJBb9uzw1Toz%sjM3!@_@4#D>!gbDY&aV zK_&thks)BMMH(y{gOdA3^QxO`pBdO`u!P;tN)&|fAf$dWe`=?nW?|v{`$-&1S%6D! zq&?|5vr%yxN|{?huNNkK&K}4VyeG-#!Us4X<}*D%FB59Rx8)YbXc<{cUdChs>fCvs zg1a>#Qju4Dpb8uZq7IXIE6k3Jt-h@6Ft^8>VIAV#1Q8Ng^pK)KRf;;W&Z`#HV!c=6AqXNsP?zN`rZ`49WCF&#qHxCt zuepKtAqaq+6n?IQe)&EM(=wUGY*sT&rZZcoy2bR*^?hsKs@lxlH;o#rF$cZN%v3d# zE$cdFW5vF?@0d^P`o50!Hu`jCeQsNW1=65KaaN0Pck+}_Ata%|M+y|b&>oTnBed-> z*u6e(BgpOOXp?;!TBlG84n^9u(Az7f&DP4ul4o$z5=$tUAu-GyJWm-*h zDtMit$&Fu@VV7pJMRDHbA@T^+2})H$u?2!Yut!Xh!iFI0SNaYNTFJ7`aszsTcu;S= zn6utvhHKwO7qrHg{f&BbkwIT-u|Z=?F`!GHZXZs-$zsZ8cttQ=|;?5-O90 zb*414z924O^_+4meJv?>mzxyTi|1*AatQ|=LA_LXijkEzha}I0H zZ@fr5Dpr;bk@{nd$Q2aJ&NoIxKHZLDM5CEZYAftfpzjF9sNNh=g5up+M^>wTL7VM?e% zF20G*$9jPrB?aC`Ow{+o9pC>A9ZI`8ptZ`zCRL0bksnd2sHFP>l`y6~Hm2&ao}1f& z+*U`6Z(zdV6Om-m1mAyz!B1%~XBG|=BS+*yDV4f0e1=dr#__G;XZjgPsDm#LMV%y5 z*PEa0P__JnX{Z{1$V^Qnw)YF&V|!7m^{a(FsZe#z&IY6cO25R6E3O z8EFC?_B$H;E{Z`_S;@G&*r|3n&7^#}NO38KQ>^7Smh_Mg?H00qod({dVx5ZXRNSCq zMu4i3mMHZkvyr6Pl%nd-IRCMqv0u?oIn1uuCEKvgYDvv&VakDr7`%*E{s6^%;>vX- ztU8iad`>DpHF@Q60&9;G*h=V36WE1u0$Uv?u#4jawx$x+6M5y$K!$fH5+3|fg*JB( zKTZ2)Ii1SnC==Sm{2~=X#L-6J3`?X;)m8cFBzi%Ds&+e)q^`8nbOqC=Vbtxl8*5kY zxGxmzi{bCTwRUSw1!m-`)znE!I~O$}9aM>r3LlEdt9c-*CK-}$UcoB}0gH>*3m7NW zh6YbV{k)_+``lHkTcnu&4|vsw2B0t-oScg1_+Xw+qNC|p`7#Qig+dI3xHe}9aS3%b zgt7*LYN|6Bmx=VqcnX2P3T=(1cor)K89#_r35aq&U!jh%%lR73I7h_`C_J04hGLY% zERZ_?39lqxDVV4lz`Nxc8^^>EB)2kN#RMrZp#YIOCRxP|j}Spjp?S`2C}*nVTL7^j z=XjVZf{s7qRgT+aClLw_&dg{!TtyxZFY=DQTX?F3@Wi5)TY9x)R&IMR~0;| zu!5lR5ZsD)s831m5YirpuO#c=6A2T1HOmxq*t%`nWxWK9HSAK=Pj#ACT3jO!a+HVRdoI$552puN7ZVFOh;u`gUn* Q%jU9CTdbMdPfkAjfBvwi;s5{u literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/sql/__pycache__/query.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/sql/__pycache__/query.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0427b843b2120bbda856d7aebac359afb9f6a1b8 GIT binary patch literal 69202 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 bm7sht4D~c_8LoA`>F579LN=83Z^-@^>jdau literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3131c863e54758997449b072eed8e2837049937a GIT binary patch literal 6185 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/db/models/sql/__pycache__/where.cpython-310.pyc b/venv/Lib/site-packages/django/db/models/sql/__pycache__/where.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7fd06f09f490c2c74c9f357fa05a8654217d7c5e GIT binary patch literal 8887 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 JRhe5{_&<{V8T start_alias to + # be used by local fields. + seen_models = {None: start_alias} + + for field in opts.concrete_fields: + model = field.model._meta.concrete_model + # A proxy model will have a different model and concrete_model. We + # will assign None if the field belongs to this model. + if model == opts.model: + model = None + if ( + from_parent + and model is not None + and issubclass( + from_parent._meta.concrete_model, model._meta.concrete_model + ) + ): + # Avoid loading data for already loaded parents. + # We end up here in the case select_related() resolution + # proceeds from parent model to child model. In that case the + # parent model data is already present in the SELECT clause, + # and we want to avoid reloading the same data again. + continue + if field.model in only_load and field.attname not in only_load[field.model]: + continue + alias = self.query.join_parent_model(opts, model, start_alias, seen_models) + column = field.get_col(alias) + result.append(column) + return result + + def get_distinct(self): + """ + Return a quoted list of fields to use in DISTINCT ON part of the query. + + This method can alter the tables in the query, and thus it must be + called before get_from_clause(). + """ + result = [] + params = [] + opts = self.query.get_meta() + + for name in self.query.distinct_fields: + parts = name.split(LOOKUP_SEP) + _, targets, alias, joins, path, _, transform_function = self._setup_joins( + parts, opts, None + ) + targets, alias, _ = self.query.trim_joins(targets, joins, path) + for target in targets: + if name in self.query.annotation_select: + result.append(name) + else: + r, p = self.compile(transform_function(target, alias)) + result.append(r) + params.append(p) + return result, params + + def find_ordering_name( + self, name, opts, alias=None, default_order="ASC", already_seen=None + ): + """ + Return the table alias (the name might be ambiguous, the alias will + not be) and column name for ordering by the given 'name' parameter. + The 'name' is of the form 'field1__field2__...__fieldN'. + """ + name, order = get_order_dir(name, default_order) + descending = order == "DESC" + pieces = name.split(LOOKUP_SEP) + ( + field, + targets, + alias, + joins, + path, + opts, + transform_function, + ) = self._setup_joins(pieces, opts, alias) + + # If we get to this point and the field is a relation to another model, + # append the default ordering for that model unless it is the pk + # shortcut or the attribute name of the field that is specified. + if ( + field.is_relation + and opts.ordering + and getattr(field, "attname", None) != pieces[-1] + and name != "pk" + ): + # Firstly, avoid infinite loops. + already_seen = already_seen or set() + join_tuple = tuple( + getattr(self.query.alias_map[j], "join_cols", None) for j in joins + ) + if join_tuple in already_seen: + raise FieldError("Infinite loop caused by ordering.") + already_seen.add(join_tuple) + + results = [] + for item in opts.ordering: + if hasattr(item, "resolve_expression") and not isinstance( + item, OrderBy + ): + item = item.desc() if descending else item.asc() + if isinstance(item, OrderBy): + results.append((item, False)) + continue + results.extend( + self.find_ordering_name(item, opts, alias, order, already_seen) + ) + return results + targets, alias, _ = self.query.trim_joins(targets, joins, path) + return [ + (OrderBy(transform_function(t, alias), descending=descending), False) + for t in targets + ] + + def _setup_joins(self, pieces, opts, alias): + """ + Helper method for get_order_by() and get_distinct(). + + get_ordering() and get_distinct() must produce same target columns on + same input, as the prefixes of get_ordering() and get_distinct() must + match. Executing SQL where this is not true is an error. + """ + alias = alias or self.query.get_initial_alias() + field, targets, opts, joins, path, transform_function = self.query.setup_joins( + pieces, opts, alias + ) + alias = joins[-1] + return field, targets, alias, joins, path, opts, transform_function + + def get_from_clause(self): + """ + Return a list of strings that are joined together to go after the + "FROM" part of the query, as well as a list any extra parameters that + need to be included. Subclasses, can override this to create a + from-clause via a "select". + + This should only be called after any SQL construction methods that + might change the tables that are needed. This means the select columns, + ordering, and distinct must be done first. + """ + result = [] + params = [] + for alias in tuple(self.query.alias_map): + if not self.query.alias_refcount[alias]: + continue + try: + from_clause = self.query.alias_map[alias] + except KeyError: + # Extra tables can end up in self.tables, but not in the + # alias_map if they aren't in a join. That's OK. We skip them. + continue + clause_sql, clause_params = self.compile(from_clause) + result.append(clause_sql) + params.extend(clause_params) + for t in self.query.extra_tables: + alias, _ = self.query.table_alias(t) + # Only add the alias if it's not already present (the table_alias() + # call increments the refcount, so an alias refcount of one means + # this is the only reference). + if ( + alias not in self.query.alias_map + or self.query.alias_refcount[alias] == 1 + ): + result.append(", %s" % self.quote_name_unless_alias(alias)) + return result, params + + def get_related_selections( + self, + select, + opts=None, + root_alias=None, + cur_depth=1, + requested=None, + restricted=None, + ): + """ + Fill in the information needed for a select_related query. The current + depth is measured as the number of connections away from the root model + (for example, cur_depth=1 means we are looking at models with direct + connections to the root model). + """ + + def _get_field_choices(): + direct_choices = (f.name for f in opts.fields if f.is_relation) + reverse_choices = ( + f.field.related_query_name() + for f in opts.related_objects + if f.field.unique + ) + return chain( + direct_choices, reverse_choices, self.query._filtered_relations + ) + + related_klass_infos = [] + if not restricted and cur_depth > self.query.max_depth: + # We've recursed far enough; bail out. + return related_klass_infos + + if not opts: + opts = self.query.get_meta() + root_alias = self.query.get_initial_alias() + only_load = self.query.get_loaded_field_names() + + # Setup for the case when only particular related fields should be + # included in the related selection. + fields_found = set() + if requested is None: + restricted = isinstance(self.query.select_related, dict) + if restricted: + requested = self.query.select_related + + def get_related_klass_infos(klass_info, related_klass_infos): + klass_info["related_klass_infos"] = related_klass_infos + + for f in opts.fields: + field_model = f.model._meta.concrete_model + fields_found.add(f.name) + + if restricted: + next = requested.get(f.name, {}) + if not f.is_relation: + # If a non-related field is used like a relation, + # or if a single non-relational field is given. + if next or f.name in requested: + raise FieldError( + "Non-relational field given in select_related: '%s'. " + "Choices are: %s" + % ( + f.name, + ", ".join(_get_field_choices()) or "(none)", + ) + ) + else: + next = False + + if not select_related_descend( + f, restricted, requested, only_load.get(field_model) + ): + continue + klass_info = { + "model": f.remote_field.model, + "field": f, + "reverse": False, + "local_setter": f.set_cached_value, + "remote_setter": f.remote_field.set_cached_value + if f.unique + else lambda x, y: None, + "from_parent": False, + } + related_klass_infos.append(klass_info) + select_fields = [] + _, _, _, joins, _, _ = self.query.setup_joins([f.name], opts, root_alias) + alias = joins[-1] + columns = self.get_default_columns( + start_alias=alias, opts=f.remote_field.model._meta + ) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info["select_fields"] = select_fields + next_klass_infos = self.get_related_selections( + select, + f.remote_field.model._meta, + alias, + cur_depth + 1, + next, + restricted, + ) + get_related_klass_infos(klass_info, next_klass_infos) + + if restricted: + related_fields = [ + (o.field, o.related_model) + for o in opts.related_objects + if o.field.unique and not o.many_to_many + ] + for f, model in related_fields: + if not select_related_descend( + f, restricted, requested, only_load.get(model), reverse=True + ): + continue + + related_field_name = f.related_query_name() + fields_found.add(related_field_name) + + join_info = self.query.setup_joins( + [related_field_name], opts, root_alias + ) + alias = join_info.joins[-1] + from_parent = issubclass(model, opts.model) and model is not opts.model + klass_info = { + "model": model, + "field": f, + "reverse": True, + "local_setter": f.remote_field.set_cached_value, + "remote_setter": f.set_cached_value, + "from_parent": from_parent, + } + related_klass_infos.append(klass_info) + select_fields = [] + columns = self.get_default_columns( + start_alias=alias, opts=model._meta, from_parent=opts.model + ) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info["select_fields"] = select_fields + next = requested.get(f.related_query_name(), {}) + next_klass_infos = self.get_related_selections( + select, model._meta, alias, cur_depth + 1, next, restricted + ) + get_related_klass_infos(klass_info, next_klass_infos) + + def local_setter(obj, from_obj): + # Set a reverse fk object when relation is non-empty. + if from_obj: + f.remote_field.set_cached_value(from_obj, obj) + + def remote_setter(name, obj, from_obj): + setattr(from_obj, name, obj) + + for name in list(requested): + # Filtered relations work only on the topmost level. + if cur_depth > 1: + break + if name in self.query._filtered_relations: + fields_found.add(name) + f, _, join_opts, joins, _, _ = self.query.setup_joins( + [name], opts, root_alias + ) + model = join_opts.model + alias = joins[-1] + from_parent = ( + issubclass(model, opts.model) and model is not opts.model + ) + klass_info = { + "model": model, + "field": f, + "reverse": True, + "local_setter": local_setter, + "remote_setter": partial(remote_setter, name), + "from_parent": from_parent, + } + related_klass_infos.append(klass_info) + select_fields = [] + columns = self.get_default_columns( + start_alias=alias, + opts=model._meta, + from_parent=opts.model, + ) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info["select_fields"] = select_fields + next_requested = requested.get(name, {}) + next_klass_infos = self.get_related_selections( + select, + opts=model._meta, + root_alias=alias, + cur_depth=cur_depth + 1, + requested=next_requested, + restricted=restricted, + ) + get_related_klass_infos(klass_info, next_klass_infos) + fields_not_found = set(requested).difference(fields_found) + if fields_not_found: + invalid_fields = ("'%s'" % s for s in fields_not_found) + raise FieldError( + "Invalid field name(s) given in select_related: %s. " + "Choices are: %s" + % ( + ", ".join(invalid_fields), + ", ".join(_get_field_choices()) or "(none)", + ) + ) + return related_klass_infos + + def get_select_for_update_of_arguments(self): + """ + Return a quoted list of arguments for the SELECT FOR UPDATE OF part of + the query. + """ + + def _get_parent_klass_info(klass_info): + concrete_model = klass_info["model"]._meta.concrete_model + for parent_model, parent_link in concrete_model._meta.parents.items(): + parent_list = parent_model._meta.get_parent_list() + yield { + "model": parent_model, + "field": parent_link, + "reverse": False, + "select_fields": [ + select_index + for select_index in klass_info["select_fields"] + # Selected columns from a model or its parents. + if ( + self.select[select_index][0].target.model == parent_model + or self.select[select_index][0].target.model in parent_list + ) + ], + } + + def _get_first_selected_col_from_model(klass_info): + """ + Find the first selected column from a model. If it doesn't exist, + don't lock a model. + + select_fields is filled recursively, so it also contains fields + from the parent models. + """ + concrete_model = klass_info["model"]._meta.concrete_model + for select_index in klass_info["select_fields"]: + if self.select[select_index][0].target.model == concrete_model: + return self.select[select_index][0] + + def _get_field_choices(): + """Yield all allowed field paths in breadth-first search order.""" + queue = collections.deque([(None, self.klass_info)]) + while queue: + parent_path, klass_info = queue.popleft() + if parent_path is None: + path = [] + yield "self" + else: + field = klass_info["field"] + if klass_info["reverse"]: + field = field.remote_field + path = parent_path + [field.name] + yield LOOKUP_SEP.join(path) + queue.extend( + (path, klass_info) + for klass_info in _get_parent_klass_info(klass_info) + ) + queue.extend( + (path, klass_info) + for klass_info in klass_info.get("related_klass_infos", []) + ) + + result = [] + invalid_names = [] + for name in self.query.select_for_update_of: + klass_info = self.klass_info + if name == "self": + col = _get_first_selected_col_from_model(klass_info) + else: + for part in name.split(LOOKUP_SEP): + klass_infos = ( + *klass_info.get("related_klass_infos", []), + *_get_parent_klass_info(klass_info), + ) + for related_klass_info in klass_infos: + field = related_klass_info["field"] + if related_klass_info["reverse"]: + field = field.remote_field + if field.name == part: + klass_info = related_klass_info + break + else: + klass_info = None + break + if klass_info is None: + invalid_names.append(name) + continue + col = _get_first_selected_col_from_model(klass_info) + if col is not None: + if self.connection.features.select_for_update_of_column: + result.append(self.compile(col)[0]) + else: + result.append(self.quote_name_unless_alias(col.alias)) + if invalid_names: + raise FieldError( + "Invalid field name(s) given in select_for_update(of=(...)): %s. " + "Only relational fields followed in the query are allowed. " + "Choices are: %s." + % ( + ", ".join(invalid_names), + ", ".join(_get_field_choices()), + ) + ) + return result + + def deferred_to_columns(self): + """ + Convert the self.deferred_loading data structure to mapping of table + names to sets of column names which are to be loaded. Return the + dictionary. + """ + columns = {} + self.query.deferred_to_data(columns, self.query.get_loaded_field_names_cb) + return columns + + def get_converters(self, expressions): + converters = {} + for i, expression in enumerate(expressions): + if expression: + backend_converters = self.connection.ops.get_db_converters(expression) + field_converters = expression.get_db_converters(self.connection) + if backend_converters or field_converters: + converters[i] = (backend_converters + field_converters, expression) + return converters + + def apply_converters(self, rows, converters): + connection = self.connection + converters = list(converters.items()) + for row in map(list, rows): + for pos, (convs, expression) in converters: + value = row[pos] + for converter in convs: + value = converter(value, expression, connection) + row[pos] = value + yield row + + def results_iter( + self, + results=None, + tuple_expected=False, + chunked_fetch=False, + chunk_size=GET_ITERATOR_CHUNK_SIZE, + ): + """Return an iterator over the results from executing this query.""" + if results is None: + results = self.execute_sql( + MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size + ) + fields = [s[0] for s in self.select[0 : self.col_count]] + converters = self.get_converters(fields) + rows = chain.from_iterable(results) + if converters: + rows = self.apply_converters(rows, converters) + if tuple_expected: + rows = map(tuple, rows) + return rows + + def has_results(self): + """ + Backends (e.g. NoSQL) can override this in order to use optimized + versions of "query has any results." + """ + return bool(self.execute_sql(SINGLE)) + + def execute_sql( + self, result_type=MULTI, chunked_fetch=False, chunk_size=GET_ITERATOR_CHUNK_SIZE + ): + """ + Run the query against the database and return the result(s). The + return value is a single data item if result_type is SINGLE, or an + iterator over the results if the result_type is MULTI. + + result_type is either MULTI (use fetchmany() to retrieve all rows), + SINGLE (only retrieve a single row), or None. In this last case, the + cursor is returned if any query is executed, since it's used by + subclasses such as InsertQuery). It's possible, however, that no query + is needed, as the filters describe an empty set. In that case, None is + returned, to avoid any unnecessary database interaction. + """ + result_type = result_type or NO_RESULTS + try: + sql, params = self.as_sql() + if not sql: + raise EmptyResultSet + except EmptyResultSet: + if result_type == MULTI: + return iter([]) + else: + return + if chunked_fetch: + cursor = self.connection.chunked_cursor() + else: + cursor = self.connection.cursor() + try: + cursor.execute(sql, params) + except Exception: + # Might fail for server-side cursors (e.g. connection closed) + cursor.close() + raise + + if result_type == CURSOR: + # Give the caller the cursor to process and close. + return cursor + if result_type == SINGLE: + try: + val = cursor.fetchone() + if val: + return val[0 : self.col_count] + return val + finally: + # done with the cursor + cursor.close() + if result_type == NO_RESULTS: + cursor.close() + return + + result = cursor_iter( + cursor, + self.connection.features.empty_fetchmany_value, + self.col_count if self.has_extra_select else None, + chunk_size, + ) + if not chunked_fetch or not self.connection.features.can_use_chunked_reads: + # If we are using non-chunked reads, we return the same data + # structure as normally, but ensure it is all read into memory + # before going any further. Use chunked_fetch if requested, + # unless the database doesn't support it. + return list(result) + return result + + def as_subquery_condition(self, alias, columns, compiler): + qn = compiler.quote_name_unless_alias + qn2 = self.connection.ops.quote_name + + for index, select_col in enumerate(self.query.select): + lhs_sql, lhs_params = self.compile(select_col) + rhs = "%s.%s" % (qn(alias), qn2(columns[index])) + self.query.where.add(RawSQL("%s = %s" % (lhs_sql, rhs), lhs_params), "AND") + + sql, params = self.as_sql() + return "EXISTS (%s)" % sql, params + + def explain_query(self): + result = list(self.execute_sql()) + # Some backends return 1 item tuples with strings, and others return + # tuples with integers and strings. Flatten them out into strings. + output_formatter = ( + json.dumps if self.query.explain_info.format == "json" else str + ) + for row in result[0]: + if not isinstance(row, str): + yield " ".join(output_formatter(c) for c in row) + else: + yield row + + +class SQLInsertCompiler(SQLCompiler): + returning_fields = None + returning_params = tuple() + + def field_as_sql(self, field, val): + """ + Take a field and a value intended to be saved on that field, and + return placeholder SQL and accompanying params. Check for raw values, + expressions, and fields with get_placeholder() defined in that order. + + When field is None, consider the value raw and use it as the + placeholder, with no corresponding parameters returned. + """ + if field is None: + # A field value of None means the value is raw. + sql, params = val, [] + elif hasattr(val, "as_sql"): + # This is an expression, let's compile it. + sql, params = self.compile(val) + elif hasattr(field, "get_placeholder"): + # Some fields (e.g. geo fields) need special munging before + # they can be inserted. + sql, params = field.get_placeholder(val, self, self.connection), [val] + else: + # Return the common case for the placeholder + sql, params = "%s", [val] + + # The following hook is only used by Oracle Spatial, which sometimes + # needs to yield 'NULL' and [] as its placeholder and params instead + # of '%s' and [None]. The 'NULL' placeholder is produced earlier by + # OracleOperations.get_geom_placeholder(). The following line removes + # the corresponding None parameter. See ticket #10888. + params = self.connection.ops.modify_insert_params(sql, params) + + return sql, params + + def prepare_value(self, field, value): + """ + Prepare a value to be used in a query by resolving it if it is an + expression and otherwise calling the field's get_db_prep_save(). + """ + if hasattr(value, "resolve_expression"): + value = value.resolve_expression( + self.query, allow_joins=False, for_save=True + ) + # Don't allow values containing Col expressions. They refer to + # existing columns on a row, but in the case of insert the row + # doesn't exist yet. + if value.contains_column_references: + raise ValueError( + 'Failed to insert expression "%s" on %s. F() expressions ' + "can only be used to update, not to insert." % (value, field) + ) + if value.contains_aggregate: + raise FieldError( + "Aggregate functions are not allowed in this query " + "(%s=%r)." % (field.name, value) + ) + if value.contains_over_clause: + raise FieldError( + "Window expressions are not allowed in this query (%s=%r)." + % (field.name, value) + ) + else: + value = field.get_db_prep_save(value, connection=self.connection) + return value + + def pre_save_val(self, field, obj): + """ + Get the given field's value off the given obj. pre_save() is used for + things like auto_now on DateTimeField. Skip it if this is a raw query. + """ + if self.query.raw: + return getattr(obj, field.attname) + return field.pre_save(obj, add=True) + + def assemble_as_sql(self, fields, value_rows): + """ + Take a sequence of N fields and a sequence of M rows of values, and + generate placeholder SQL and parameters for each field and value. + Return a pair containing: + * a sequence of M rows of N SQL placeholder strings, and + * a sequence of M rows of corresponding parameter values. + + Each placeholder string may contain any number of '%s' interpolation + strings, and each parameter row will contain exactly as many params + as the total number of '%s's in the corresponding placeholder row. + """ + if not value_rows: + return [], [] + + # list of (sql, [params]) tuples for each object to be saved + # Shape: [n_objs][n_fields][2] + rows_of_fields_as_sql = ( + (self.field_as_sql(field, v) for field, v in zip(fields, row)) + for row in value_rows + ) + + # tuple like ([sqls], [[params]s]) for each object to be saved + # Shape: [n_objs][2][n_fields] + sql_and_param_pair_rows = (zip(*row) for row in rows_of_fields_as_sql) + + # Extract separate lists for placeholders and params. + # Each of these has shape [n_objs][n_fields] + placeholder_rows, param_rows = zip(*sql_and_param_pair_rows) + + # Params for each field are still lists, and need to be flattened. + param_rows = [[p for ps in row for p in ps] for row in param_rows] + + return placeholder_rows, param_rows + + def as_sql(self): + # We don't need quote_name_unless_alias() here, since these are all + # going to be column names (so we can avoid the extra overhead). + qn = self.connection.ops.quote_name + opts = self.query.get_meta() + insert_statement = self.connection.ops.insert_statement( + ignore_conflicts=self.query.ignore_conflicts + ) + result = ["%s %s" % (insert_statement, qn(opts.db_table))] + fields = self.query.fields or [opts.pk] + result.append("(%s)" % ", ".join(qn(f.column) for f in fields)) + + if self.query.fields: + value_rows = [ + [ + self.prepare_value(field, self.pre_save_val(field, obj)) + for field in fields + ] + for obj in self.query.objs + ] + else: + # An empty object. + value_rows = [ + [self.connection.ops.pk_default_value()] for _ in self.query.objs + ] + fields = [None] + + # Currently the backends just accept values when generating bulk + # queries and generate their own placeholders. Doing that isn't + # necessary and it should be possible to use placeholders and + # expressions in bulk inserts too. + can_bulk = ( + not self.returning_fields and self.connection.features.has_bulk_insert + ) + + placeholder_rows, param_rows = self.assemble_as_sql(fields, value_rows) + + ignore_conflicts_suffix_sql = self.connection.ops.ignore_conflicts_suffix_sql( + ignore_conflicts=self.query.ignore_conflicts + ) + if ( + self.returning_fields + and self.connection.features.can_return_columns_from_insert + ): + if self.connection.features.can_return_rows_from_bulk_insert: + result.append( + self.connection.ops.bulk_insert_sql(fields, placeholder_rows) + ) + params = param_rows + else: + result.append("VALUES (%s)" % ", ".join(placeholder_rows[0])) + params = [param_rows[0]] + if ignore_conflicts_suffix_sql: + result.append(ignore_conflicts_suffix_sql) + # Skip empty r_sql to allow subclasses to customize behavior for + # 3rd party backends. Refs #19096. + r_sql, self.returning_params = self.connection.ops.return_insert_columns( + self.returning_fields + ) + if r_sql: + result.append(r_sql) + params += [self.returning_params] + return [(" ".join(result), tuple(chain.from_iterable(params)))] + + if can_bulk: + result.append(self.connection.ops.bulk_insert_sql(fields, placeholder_rows)) + if ignore_conflicts_suffix_sql: + result.append(ignore_conflicts_suffix_sql) + return [(" ".join(result), tuple(p for ps in param_rows for p in ps))] + else: + if ignore_conflicts_suffix_sql: + result.append(ignore_conflicts_suffix_sql) + return [ + (" ".join(result + ["VALUES (%s)" % ", ".join(p)]), vals) + for p, vals in zip(placeholder_rows, param_rows) + ] + + def execute_sql(self, returning_fields=None): + assert not ( + returning_fields + and len(self.query.objs) != 1 + and not self.connection.features.can_return_rows_from_bulk_insert + ) + opts = self.query.get_meta() + self.returning_fields = returning_fields + with self.connection.cursor() as cursor: + for sql, params in self.as_sql(): + cursor.execute(sql, params) + if not self.returning_fields: + return [] + if ( + self.connection.features.can_return_rows_from_bulk_insert + and len(self.query.objs) > 1 + ): + rows = self.connection.ops.fetch_returned_insert_rows(cursor) + elif self.connection.features.can_return_columns_from_insert: + assert len(self.query.objs) == 1 + rows = [ + self.connection.ops.fetch_returned_insert_columns( + cursor, + self.returning_params, + ) + ] + else: + rows = [ + ( + self.connection.ops.last_insert_id( + cursor, + opts.db_table, + opts.pk.column, + ), + ) + ] + cols = [field.get_col(opts.db_table) for field in self.returning_fields] + converters = self.get_converters(cols) + if converters: + rows = list(self.apply_converters(rows, converters)) + return rows + + +class SQLDeleteCompiler(SQLCompiler): + @cached_property + def single_alias(self): + # Ensure base table is in aliases. + self.query.get_initial_alias() + return sum(self.query.alias_refcount[t] > 0 for t in self.query.alias_map) == 1 + + @classmethod + def _expr_refs_base_model(cls, expr, base_model): + if isinstance(expr, Query): + return expr.model == base_model + if not hasattr(expr, "get_source_expressions"): + return False + return any( + cls._expr_refs_base_model(source_expr, base_model) + for source_expr in expr.get_source_expressions() + ) + + @cached_property + def contains_self_reference_subquery(self): + return any( + self._expr_refs_base_model(expr, self.query.model) + for expr in chain( + self.query.annotations.values(), self.query.where.children + ) + ) + + def _as_sql(self, query): + result = ["DELETE FROM %s" % self.quote_name_unless_alias(query.base_table)] + where, params = self.compile(query.where) + if where: + result.append("WHERE %s" % where) + return " ".join(result), tuple(params) + + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + if self.single_alias and not self.contains_self_reference_subquery: + return self._as_sql(self.query) + innerq = self.query.clone() + innerq.__class__ = Query + innerq.clear_select_clause() + pk = self.query.model._meta.pk + innerq.select = [pk.get_col(self.query.get_initial_alias())] + outerq = Query(self.query.model) + if not self.connection.features.update_can_self_select: + # Force the materialization of the inner query to allow reference + # to the target table on MySQL. + sql, params = innerq.get_compiler(connection=self.connection).as_sql() + innerq = RawSQL("SELECT * FROM (%s) subquery" % sql, params) + outerq.add_filter("pk__in", innerq) + return self._as_sql(outerq) + + +class SQLUpdateCompiler(SQLCompiler): + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + self.pre_sql_setup() + if not self.query.values: + return "", () + qn = self.quote_name_unless_alias + values, update_params = [], [] + for field, model, val in self.query.values: + if hasattr(val, "resolve_expression"): + val = val.resolve_expression( + self.query, allow_joins=False, for_save=True + ) + if val.contains_aggregate: + raise FieldError( + "Aggregate functions are not allowed in this query " + "(%s=%r)." % (field.name, val) + ) + if val.contains_over_clause: + raise FieldError( + "Window expressions are not allowed in this query " + "(%s=%r)." % (field.name, val) + ) + elif hasattr(val, "prepare_database_save"): + if field.remote_field: + val = field.get_db_prep_save( + val.prepare_database_save(field), + connection=self.connection, + ) + else: + raise TypeError( + "Tried to update field %s with a model instance, %r. " + "Use a value compatible with %s." + % (field, val, field.__class__.__name__) + ) + else: + val = field.get_db_prep_save(val, connection=self.connection) + + # Getting the placeholder for the field. + if hasattr(field, "get_placeholder"): + placeholder = field.get_placeholder(val, self, self.connection) + else: + placeholder = "%s" + name = field.column + if hasattr(val, "as_sql"): + sql, params = self.compile(val) + values.append("%s = %s" % (qn(name), placeholder % sql)) + update_params.extend(params) + elif val is not None: + values.append("%s = %s" % (qn(name), placeholder)) + update_params.append(val) + else: + values.append("%s = NULL" % qn(name)) + table = self.query.base_table + result = [ + "UPDATE %s SET" % qn(table), + ", ".join(values), + ] + where, params = self.compile(self.query.where) + if where: + result.append("WHERE %s" % where) + return " ".join(result), tuple(update_params + params) + + def execute_sql(self, result_type): + """ + Execute the specified update. Return the number of rows affected by + the primary update query. The "primary update query" is the first + non-empty query that is executed. Row counts for any subsequent, + related queries are not available. + """ + cursor = super().execute_sql(result_type) + try: + rows = cursor.rowcount if cursor else 0 + is_empty = cursor is None + finally: + if cursor: + cursor.close() + for query in self.query.get_related_updates(): + aux_rows = query.get_compiler(self.using).execute_sql(result_type) + if is_empty and aux_rows: + rows = aux_rows + is_empty = False + return rows + + def pre_sql_setup(self): + """ + If the update depends on results from other tables, munge the "where" + conditions to match the format required for (portable) SQL updates. + + If multiple updates are required, pull out the id values to update at + this point so that they don't change as a result of the progressive + updates. + """ + refcounts_before = self.query.alias_refcount.copy() + # Ensure base table is in the query + self.query.get_initial_alias() + count = self.query.count_active_tables() + if not self.query.related_updates and count == 1: + return + query = self.query.chain(klass=Query) + query.select_related = False + query.clear_ordering(force=True) + query.extra = {} + query.select = [] + query.add_fields([query.get_meta().pk.name]) + super().pre_sql_setup() + + must_pre_select = ( + count > 1 and not self.connection.features.update_can_self_select + ) + + # Now we adjust the current query: reset the where clause and get rid + # of all the tables we don't need (since they're in the sub-select). + self.query.clear_where() + if self.query.related_updates or must_pre_select: + # Either we're using the idents in multiple update queries (so + # don't want them to change), or the db backend doesn't support + # selecting from the updating table (e.g. MySQL). + idents = [] + for rows in query.get_compiler(self.using).execute_sql(MULTI): + idents.extend(r[0] for r in rows) + self.query.add_filter("pk__in", idents) + self.query.related_ids = idents + else: + # The fast path. Filters and updates in one query. + self.query.add_filter("pk__in", query) + self.query.reset_refcounts(refcounts_before) + + +class SQLAggregateCompiler(SQLCompiler): + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + sql, params = [], [] + for annotation in self.query.annotation_select.values(): + ann_sql, ann_params = self.compile(annotation) + ann_sql, ann_params = annotation.select_format(self, ann_sql, ann_params) + sql.append(ann_sql) + params.extend(ann_params) + self.col_count = len(self.query.annotation_select) + sql = ", ".join(sql) + params = tuple(params) + + inner_query_sql, inner_query_params = self.query.inner_query.get_compiler( + self.using, + elide_empty=self.elide_empty, + ).as_sql(with_col_aliases=True) + sql = "SELECT %s FROM (%s) subquery" % (sql, inner_query_sql) + params = params + inner_query_params + return sql, params + + +def cursor_iter(cursor, sentinel, col_count, itersize): + """ + Yield blocks of rows from a cursor and ensure the cursor is closed when + done. + """ + try: + for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel): + yield rows if col_count is None else [r[:col_count] for r in rows] + finally: + cursor.close() diff --git a/venv/Lib/site-packages/django/db/models/sql/constants.py b/venv/Lib/site-packages/django/db/models/sql/constants.py new file mode 100644 index 000000000..fdfb2ea89 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/constants.py @@ -0,0 +1,24 @@ +""" +Constants specific to the SQL storage portion of the ORM. +""" + +# Size of each "chunk" for get_iterator calls. +# Larger values are slightly faster at the expense of more storage space. +GET_ITERATOR_CHUNK_SIZE = 100 + +# Namedtuples for sql.* internal use. + +# How many results to expect from a cursor.execute call +MULTI = "multi" +SINGLE = "single" +CURSOR = "cursor" +NO_RESULTS = "no results" + +ORDER_DIR = { + "ASC": ("ASC", "DESC"), + "DESC": ("DESC", "ASC"), +} + +# SQL join types. +INNER = "INNER JOIN" +LOUTER = "LEFT OUTER JOIN" diff --git a/venv/Lib/site-packages/django/db/models/sql/datastructures.py b/venv/Lib/site-packages/django/db/models/sql/datastructures.py new file mode 100644 index 000000000..1edf040e8 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/datastructures.py @@ -0,0 +1,220 @@ +""" +Useful auxiliary data structures for query construction. Not useful outside +the SQL domain. +""" +from django.db.models.sql.constants import INNER, LOUTER + + +class MultiJoin(Exception): + """ + Used by join construction code to indicate the point at which a + multi-valued join was attempted (if the caller wants to treat that + exceptionally). + """ + + def __init__(self, names_pos, path_with_names): + self.level = names_pos + # The path travelled, this includes the path to the multijoin. + self.names_with_path = path_with_names + + +class Empty: + pass + + +class Join: + """ + Used by sql.Query and sql.SQLCompiler to generate JOIN clauses into the + FROM entry. For example, the SQL generated could be + LEFT OUTER JOIN "sometable" T1 + ON ("othertable"."sometable_id" = "sometable"."id") + + This class is primarily used in Query.alias_map. All entries in alias_map + must be Join compatible by providing the following attributes and methods: + - table_name (string) + - table_alias (possible alias for the table, can be None) + - join_type (can be None for those entries that aren't joined from + anything) + - parent_alias (which table is this join's parent, can be None similarly + to join_type) + - as_sql() + - relabeled_clone() + """ + + def __init__( + self, + table_name, + parent_alias, + table_alias, + join_type, + join_field, + nullable, + filtered_relation=None, + ): + # Join table + self.table_name = table_name + self.parent_alias = parent_alias + # Note: table_alias is not necessarily known at instantiation time. + self.table_alias = table_alias + # LOUTER or INNER + self.join_type = join_type + # A list of 2-tuples to use in the ON clause of the JOIN. + # Each 2-tuple will create one join condition in the ON clause. + self.join_cols = join_field.get_joining_columns() + # Along which field (or ForeignObjectRel in the reverse join case) + self.join_field = join_field + # Is this join nullabled? + self.nullable = nullable + self.filtered_relation = filtered_relation + + def as_sql(self, compiler, connection): + """ + Generate the full + LEFT OUTER JOIN sometable ON sometable.somecol = othertable.othercol, params + clause for this join. + """ + join_conditions = [] + params = [] + qn = compiler.quote_name_unless_alias + qn2 = connection.ops.quote_name + + # Add a join condition for each pair of joining columns. + for lhs_col, rhs_col in self.join_cols: + join_conditions.append( + "%s.%s = %s.%s" + % ( + qn(self.parent_alias), + qn2(lhs_col), + qn(self.table_alias), + qn2(rhs_col), + ) + ) + + # Add a single condition inside parentheses for whatever + # get_extra_restriction() returns. + extra_cond = self.join_field.get_extra_restriction( + self.table_alias, self.parent_alias + ) + if extra_cond: + extra_sql, extra_params = compiler.compile(extra_cond) + join_conditions.append("(%s)" % extra_sql) + params.extend(extra_params) + if self.filtered_relation: + extra_sql, extra_params = compiler.compile(self.filtered_relation) + if extra_sql: + join_conditions.append("(%s)" % extra_sql) + params.extend(extra_params) + if not join_conditions: + # This might be a rel on the other end of an actual declared field. + declared_field = getattr(self.join_field, "field", self.join_field) + raise ValueError( + "Join generated an empty ON clause. %s did not yield either " + "joining columns or extra restrictions." % declared_field.__class__ + ) + on_clause_sql = " AND ".join(join_conditions) + alias_str = ( + "" if self.table_alias == self.table_name else (" %s" % self.table_alias) + ) + sql = "%s %s%s ON (%s)" % ( + self.join_type, + qn(self.table_name), + alias_str, + on_clause_sql, + ) + return sql, params + + def relabeled_clone(self, change_map): + new_parent_alias = change_map.get(self.parent_alias, self.parent_alias) + new_table_alias = change_map.get(self.table_alias, self.table_alias) + if self.filtered_relation is not None: + filtered_relation = self.filtered_relation.clone() + filtered_relation.path = [ + change_map.get(p, p) for p in self.filtered_relation.path + ] + else: + filtered_relation = None + return self.__class__( + self.table_name, + new_parent_alias, + new_table_alias, + self.join_type, + self.join_field, + self.nullable, + filtered_relation=filtered_relation, + ) + + @property + def identity(self): + return ( + self.__class__, + self.table_name, + self.parent_alias, + self.join_field, + self.filtered_relation, + ) + + def __eq__(self, other): + if not isinstance(other, Join): + return NotImplemented + return self.identity == other.identity + + def __hash__(self): + return hash(self.identity) + + def equals(self, other): + # Ignore filtered_relation in equality check. + return self.identity[:-1] == other.identity[:-1] + + def demote(self): + new = self.relabeled_clone({}) + new.join_type = INNER + return new + + def promote(self): + new = self.relabeled_clone({}) + new.join_type = LOUTER + return new + + +class BaseTable: + """ + The BaseTable class is used for base table references in FROM clause. For + example, the SQL "foo" in + SELECT * FROM "foo" WHERE somecond + could be generated by this class. + """ + + join_type = None + parent_alias = None + filtered_relation = None + + def __init__(self, table_name, alias): + self.table_name = table_name + self.table_alias = alias + + def as_sql(self, compiler, connection): + alias_str = ( + "" if self.table_alias == self.table_name else (" %s" % self.table_alias) + ) + base_sql = compiler.quote_name_unless_alias(self.table_name) + return base_sql + alias_str, [] + + def relabeled_clone(self, change_map): + return self.__class__( + self.table_name, change_map.get(self.table_alias, self.table_alias) + ) + + @property + def identity(self): + return self.__class__, self.table_name, self.table_alias + + def __eq__(self, other): + if not isinstance(other, BaseTable): + return NotImplemented + return self.identity == other.identity + + def __hash__(self): + return hash(self.identity) + + def equals(self, other): + return self.identity == other.identity diff --git a/venv/Lib/site-packages/django/db/models/sql/query.py b/venv/Lib/site-packages/django/db/models/sql/query.py new file mode 100644 index 000000000..fd4bbdaf3 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/query.py @@ -0,0 +1,2671 @@ +""" +Create SQL statements for QuerySets. + +The code in here encapsulates all of the SQL construction so that QuerySets +themselves do not have to (and could be backed by things other than SQL +databases). The abstraction barrier only works one way: this module has to know +all about the internals of models in order to get the information it needs. +""" +import copy +import difflib +import functools +import sys +from collections import Counter, namedtuple +from collections.abc import Iterator, Mapping +from itertools import chain, count, product +from string import ascii_uppercase + +from django.core.exceptions import FieldDoesNotExist, FieldError +from django.db import DEFAULT_DB_ALIAS, NotSupportedError, connections +from django.db.models.aggregates import Count +from django.db.models.constants import LOOKUP_SEP +from django.db.models.expressions import ( + BaseExpression, + Col, + Exists, + F, + OuterRef, + Ref, + ResolvedOuterRef, +) +from django.db.models.fields import Field +from django.db.models.fields.related_lookups import MultiColSource +from django.db.models.lookups import Lookup +from django.db.models.query_utils import ( + Q, + check_rel_lookup_compatibility, + refs_expression, +) +from django.db.models.sql.constants import INNER, LOUTER, ORDER_DIR, SINGLE +from django.db.models.sql.datastructures import BaseTable, Empty, Join, MultiJoin +from django.db.models.sql.where import AND, OR, ExtraWhere, NothingNode, WhereNode +from django.utils.functional import cached_property +from django.utils.regex_helper import _lazy_re_compile +from django.utils.tree import Node + +__all__ = ["Query", "RawQuery"] + +# Quotation marks ('"`[]), whitespace characters, semicolons, or inline +# SQL comments are forbidden in column aliases. +FORBIDDEN_ALIAS_PATTERN = _lazy_re_compile(r"['`\"\]\[;\s]|--|/\*|\*/") + +# Inspired from +# https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS +EXPLAIN_OPTIONS_PATTERN = _lazy_re_compile(r"[\w\-]+") + + +def get_field_names_from_opts(opts): + return set( + chain.from_iterable( + (f.name, f.attname) if f.concrete else (f.name,) for f in opts.get_fields() + ) + ) + + +def get_children_from_q(q): + for child in q.children: + if isinstance(child, Node): + yield from get_children_from_q(child) + else: + yield child + + +JoinInfo = namedtuple( + "JoinInfo", + ("final_field", "targets", "opts", "joins", "path", "transform_function"), +) + + +class RawQuery: + """A single raw SQL query.""" + + def __init__(self, sql, using, params=()): + self.params = params + self.sql = sql + self.using = using + self.cursor = None + + # Mirror some properties of a normal query so that + # the compiler can be used to process results. + self.low_mark, self.high_mark = 0, None # Used for offset/limit + self.extra_select = {} + self.annotation_select = {} + + def chain(self, using): + return self.clone(using) + + def clone(self, using): + return RawQuery(self.sql, using, params=self.params) + + def get_columns(self): + if self.cursor is None: + self._execute_query() + converter = connections[self.using].introspection.identifier_converter + return [converter(column_meta[0]) for column_meta in self.cursor.description] + + def __iter__(self): + # Always execute a new query for a new iterator. + # This could be optimized with a cache at the expense of RAM. + self._execute_query() + if not connections[self.using].features.can_use_chunked_reads: + # If the database can't use chunked reads we need to make sure we + # evaluate the entire query up front. + result = list(self.cursor) + else: + result = self.cursor + return iter(result) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + @property + def params_type(self): + if self.params is None: + return None + return dict if isinstance(self.params, Mapping) else tuple + + def __str__(self): + if self.params_type is None: + return self.sql + return self.sql % self.params_type(self.params) + + def _execute_query(self): + connection = connections[self.using] + + # Adapt parameters to the database, as much as possible considering + # that the target type isn't known. See #17755. + params_type = self.params_type + adapter = connection.ops.adapt_unknown_value + if params_type is tuple: + params = tuple(adapter(val) for val in self.params) + elif params_type is dict: + params = {key: adapter(val) for key, val in self.params.items()} + elif params_type is None: + params = None + else: + raise RuntimeError("Unexpected params type: %s" % params_type) + + self.cursor = connection.cursor() + self.cursor.execute(self.sql, params) + + +ExplainInfo = namedtuple("ExplainInfo", ("format", "options")) + + +class Query(BaseExpression): + """A single SQL query.""" + + alias_prefix = "T" + empty_result_set_value = None + subq_aliases = frozenset([alias_prefix]) + + compiler = "SQLCompiler" + + def __init__(self, model, alias_cols=True): + self.model = model + self.alias_refcount = {} + # alias_map is the most important data structure regarding joins. + # It's used for recording which joins exist in the query and what + # types they are. The key is the alias of the joined table (possibly + # the table name) and the value is a Join-like object (see + # sql.datastructures.Join for more information). + self.alias_map = {} + # Whether to provide alias to columns during reference resolving. + self.alias_cols = alias_cols + # Sometimes the query contains references to aliases in outer queries (as + # a result of split_exclude). Correct alias quoting needs to know these + # aliases too. + # Map external tables to whether they are aliased. + self.external_aliases = {} + self.table_map = {} # Maps table names to list of aliases. + self.default_cols = True + self.default_ordering = True + self.standard_ordering = True + self.used_aliases = set() + self.filter_is_sticky = False + self.subquery = False + + # SQL-related attributes + # Select and related select clauses are expressions to use in the + # SELECT clause of the query. + # The select is used for cases where we want to set up the select + # clause to contain other than default fields (values(), subqueries...) + # Note that annotations go to annotations dictionary. + self.select = () + self.where = WhereNode() + # The group_by attribute can have one of the following forms: + # - None: no group by at all in the query + # - A tuple of expressions: group by (at least) those expressions. + # String refs are also allowed for now. + # - True: group by all select fields of the model + # See compiler.get_group_by() for details. + self.group_by = None + self.order_by = () + self.low_mark, self.high_mark = 0, None # Used for offset/limit + self.distinct = False + self.distinct_fields = () + self.select_for_update = False + self.select_for_update_nowait = False + self.select_for_update_skip_locked = False + self.select_for_update_of = () + self.select_for_no_key_update = False + + self.select_related = False + # Arbitrary limit for select_related to prevents infinite recursion. + self.max_depth = 5 + + # Holds the selects defined by a call to values() or values_list() + # excluding annotation_select and extra_select. + self.values_select = () + + # SQL annotation-related attributes + self.annotations = {} # Maps alias -> Annotation Expression + self.annotation_select_mask = None + self._annotation_select_cache = None + + # Set combination attributes + self.combinator = None + self.combinator_all = False + self.combined_queries = () + + # These are for extensions. The contents are more or less appended + # verbatim to the appropriate clause. + self.extra = {} # Maps col_alias -> (col_sql, params). + self.extra_select_mask = None + self._extra_select_cache = None + + self.extra_tables = () + self.extra_order_by = () + + # A tuple that is a set of model field names and either True, if these + # are the fields to defer, or False if these are the only fields to + # load. + self.deferred_loading = (frozenset(), True) + + self._filtered_relations = {} + + self.explain_info = None + + @property + def output_field(self): + if len(self.select) == 1: + select = self.select[0] + return getattr(select, "target", None) or select.field + elif len(self.annotation_select) == 1: + return next(iter(self.annotation_select.values())).output_field + + @property + def has_select_fields(self): + return bool( + self.select or self.annotation_select_mask or self.extra_select_mask + ) + + @cached_property + def base_table(self): + for alias in self.alias_map: + return alias + + def __str__(self): + """ + Return the query as a string of SQL with the parameter values + substituted in (use sql_with_params() to see the unsubstituted string). + + Parameter values won't necessarily be quoted correctly, since that is + done by the database interface at execution time. + """ + sql, params = self.sql_with_params() + return sql % params + + def sql_with_params(self): + """ + Return the query as an SQL string and the parameters that will be + substituted into the query. + """ + return self.get_compiler(DEFAULT_DB_ALIAS).as_sql() + + def __deepcopy__(self, memo): + """Limit the amount of work when a Query is deepcopied.""" + result = self.clone() + memo[id(self)] = result + return result + + def get_compiler(self, using=None, connection=None, elide_empty=True): + if using is None and connection is None: + raise ValueError("Need either using or connection") + if using: + connection = connections[using] + return connection.ops.compiler(self.compiler)( + self, connection, using, elide_empty + ) + + def get_meta(self): + """ + Return the Options instance (the model._meta) from which to start + processing. Normally, this is self.model._meta, but it can be changed + by subclasses. + """ + return self.model._meta + + def clone(self): + """ + Return a copy of the current Query. A lightweight alternative to + to deepcopy(). + """ + obj = Empty() + obj.__class__ = self.__class__ + # Copy references to everything. + obj.__dict__ = self.__dict__.copy() + # Clone attributes that can't use shallow copy. + obj.alias_refcount = self.alias_refcount.copy() + obj.alias_map = self.alias_map.copy() + obj.external_aliases = self.external_aliases.copy() + obj.table_map = self.table_map.copy() + obj.where = self.where.clone() + obj.annotations = self.annotations.copy() + if self.annotation_select_mask is not None: + obj.annotation_select_mask = self.annotation_select_mask.copy() + if self.combined_queries: + obj.combined_queries = tuple( + [query.clone() for query in self.combined_queries] + ) + # _annotation_select_cache cannot be copied, as doing so breaks the + # (necessary) state in which both annotations and + # _annotation_select_cache point to the same underlying objects. + # It will get re-populated in the cloned queryset the next time it's + # used. + obj._annotation_select_cache = None + obj.extra = self.extra.copy() + if self.extra_select_mask is not None: + obj.extra_select_mask = self.extra_select_mask.copy() + if self._extra_select_cache is not None: + obj._extra_select_cache = self._extra_select_cache.copy() + if self.select_related is not False: + # Use deepcopy because select_related stores fields in nested + # dicts. + obj.select_related = copy.deepcopy(obj.select_related) + if "subq_aliases" in self.__dict__: + obj.subq_aliases = self.subq_aliases.copy() + obj.used_aliases = self.used_aliases.copy() + obj._filtered_relations = self._filtered_relations.copy() + # Clear the cached_property + try: + del obj.base_table + except AttributeError: + pass + return obj + + def chain(self, klass=None): + """ + Return a copy of the current Query that's ready for another operation. + The klass argument changes the type of the Query, e.g. UpdateQuery. + """ + obj = self.clone() + if klass and obj.__class__ != klass: + obj.__class__ = klass + if not obj.filter_is_sticky: + obj.used_aliases = set() + obj.filter_is_sticky = False + if hasattr(obj, "_setup_query"): + obj._setup_query() + return obj + + def relabeled_clone(self, change_map): + clone = self.clone() + clone.change_aliases(change_map) + return clone + + def _get_col(self, target, field, alias): + if not self.alias_cols: + alias = None + return target.get_col(alias, field) + + def rewrite_cols(self, annotation, col_cnt): + # We must make sure the inner query has the referred columns in it. + # If we are aggregating over an annotation, then Django uses Ref() + # instances to note this. However, if we are annotating over a column + # of a related model, then it might be that column isn't part of the + # SELECT clause of the inner query, and we must manually make sure + # the column is selected. An example case is: + # .aggregate(Sum('author__awards')) + # Resolving this expression results in a join to author, but there + # is no guarantee the awards column of author is in the select clause + # of the query. Thus we must manually add the column to the inner + # query. + orig_exprs = annotation.get_source_expressions() + new_exprs = [] + for expr in orig_exprs: + # FIXME: These conditions are fairly arbitrary. Identify a better + # method of having expressions decide which code path they should + # take. + if isinstance(expr, Ref): + # Its already a Ref to subquery (see resolve_ref() for + # details) + new_exprs.append(expr) + elif isinstance(expr, (WhereNode, Lookup)): + # Decompose the subexpressions further. The code here is + # copied from the else clause, but this condition must appear + # before the contains_aggregate/is_summary condition below. + new_expr, col_cnt = self.rewrite_cols(expr, col_cnt) + new_exprs.append(new_expr) + else: + # Reuse aliases of expressions already selected in subquery. + for col_alias, selected_annotation in self.annotation_select.items(): + if selected_annotation is expr: + new_expr = Ref(col_alias, expr) + break + else: + # An expression that is not selected the subquery. + if isinstance(expr, Col) or ( + expr.contains_aggregate and not expr.is_summary + ): + # Reference column or another aggregate. Select it + # under a non-conflicting alias. + col_cnt += 1 + col_alias = "__col%d" % col_cnt + self.annotations[col_alias] = expr + self.append_annotation_mask([col_alias]) + new_expr = Ref(col_alias, expr) + else: + # Some other expression not referencing database values + # directly. Its subexpression might contain Cols. + new_expr, col_cnt = self.rewrite_cols(expr, col_cnt) + new_exprs.append(new_expr) + annotation.set_source_expressions(new_exprs) + return annotation, col_cnt + + def get_aggregation(self, using, added_aggregate_names): + """ + Return the dictionary with the values of the existing aggregations. + """ + if not self.annotation_select: + return {} + existing_annotations = [ + annotation + for alias, annotation in self.annotations.items() + if alias not in added_aggregate_names + ] + # Decide if we need to use a subquery. + # + # Existing annotations would cause incorrect results as get_aggregation() + # must produce just one result and thus must not use GROUP BY. But we + # aren't smart enough to remove the existing annotations from the + # query, so those would force us to use GROUP BY. + # + # If the query has limit or distinct, or uses set operations, then + # those operations must be done in a subquery so that the query + # aggregates on the limit and/or distinct results instead of applying + # the distinct and limit after the aggregation. + if ( + isinstance(self.group_by, tuple) + or self.is_sliced + or existing_annotations + or self.distinct + or self.combinator + ): + from django.db.models.sql.subqueries import AggregateQuery + + inner_query = self.clone() + inner_query.subquery = True + outer_query = AggregateQuery(self.model, inner_query) + inner_query.select_for_update = False + inner_query.select_related = False + inner_query.set_annotation_mask(self.annotation_select) + # Queries with distinct_fields need ordering and when a limit is + # applied we must take the slice from the ordered query. Otherwise + # no need for ordering. + inner_query.clear_ordering(force=False) + if not inner_query.distinct: + # If the inner query uses default select and it has some + # aggregate annotations, then we must make sure the inner + # query is grouped by the main model's primary key. However, + # clearing the select clause can alter results if distinct is + # used. + has_existing_aggregate_annotations = any( + annotation + for annotation in existing_annotations + if getattr(annotation, "contains_aggregate", True) + ) + if inner_query.default_cols and has_existing_aggregate_annotations: + inner_query.group_by = ( + self.model._meta.pk.get_col(inner_query.get_initial_alias()), + ) + inner_query.default_cols = False + + relabels = {t: "subquery" for t in inner_query.alias_map} + relabels[None] = "subquery" + # Remove any aggregates marked for reduction from the subquery + # and move them to the outer AggregateQuery. + col_cnt = 0 + for alias, expression in list(inner_query.annotation_select.items()): + annotation_select_mask = inner_query.annotation_select_mask + if expression.is_summary: + expression, col_cnt = inner_query.rewrite_cols(expression, col_cnt) + outer_query.annotations[alias] = expression.relabeled_clone( + relabels + ) + del inner_query.annotations[alias] + annotation_select_mask.remove(alias) + # Make sure the annotation_select wont use cached results. + inner_query.set_annotation_mask(inner_query.annotation_select_mask) + if ( + inner_query.select == () + and not inner_query.default_cols + and not inner_query.annotation_select_mask + ): + # In case of Model.objects[0:3].count(), there would be no + # field selected in the inner query, yet we must use a subquery. + # So, make sure at least one field is selected. + inner_query.select = ( + self.model._meta.pk.get_col(inner_query.get_initial_alias()), + ) + else: + outer_query = self + self.select = () + self.default_cols = False + self.extra = {} + + empty_set_result = [ + expression.empty_result_set_value + for expression in outer_query.annotation_select.values() + ] + elide_empty = not any(result is NotImplemented for result in empty_set_result) + outer_query.clear_ordering(force=True) + outer_query.clear_limits() + outer_query.select_for_update = False + outer_query.select_related = False + compiler = outer_query.get_compiler(using, elide_empty=elide_empty) + result = compiler.execute_sql(SINGLE) + if result is None: + result = empty_set_result + + converters = compiler.get_converters(outer_query.annotation_select.values()) + result = next(compiler.apply_converters((result,), converters)) + + return dict(zip(outer_query.annotation_select, result)) + + def get_count(self, using): + """ + Perform a COUNT() query using the current filter constraints. + """ + obj = self.clone() + obj.add_annotation(Count("*"), alias="__count", is_summary=True) + number = obj.get_aggregation(using, ["__count"])["__count"] + if number is None: + number = 0 + return number + + def has_filters(self): + return self.where + + def exists(self, using, limit=True): + q = self.clone() + if not q.distinct: + if q.group_by is True: + q.add_fields( + (f.attname for f in self.model._meta.concrete_fields), False + ) + # Disable GROUP BY aliases to avoid orphaning references to the + # SELECT clause which is about to be cleared. + q.set_group_by(allow_aliases=False) + q.clear_select_clause() + if q.combined_queries and q.combinator == "union": + limit_combined = connections[ + using + ].features.supports_slicing_ordering_in_compound + q.combined_queries = tuple( + combined_query.exists(using, limit=limit_combined) + for combined_query in q.combined_queries + ) + q.clear_ordering(force=True) + if limit: + q.set_limits(high=1) + q.add_extra({"a": 1}, None, None, None, None, None) + q.set_extra_mask(["a"]) + return q + + def has_results(self, using): + q = self.exists(using) + compiler = q.get_compiler(using=using) + return compiler.has_results() + + def explain(self, using, format=None, **options): + q = self.clone() + for option_name in options: + if ( + not EXPLAIN_OPTIONS_PATTERN.fullmatch(option_name) + or "--" in option_name + ): + raise ValueError(f"Invalid option name: {option_name!r}.") + q.explain_info = ExplainInfo(format, options) + compiler = q.get_compiler(using=using) + return "\n".join(compiler.explain_query()) + + def combine(self, rhs, connector): + """ + Merge the 'rhs' query into the current one (with any 'rhs' effects + being applied *after* (that is, "to the right of") anything in the + current query. 'rhs' is not modified during a call to this function. + + The 'connector' parameter describes how to connect filters from the + 'rhs' query. + """ + if self.model != rhs.model: + raise TypeError("Cannot combine queries on two different base models.") + if self.is_sliced: + raise TypeError("Cannot combine queries once a slice has been taken.") + if self.distinct != rhs.distinct: + raise TypeError("Cannot combine a unique query with a non-unique query.") + if self.distinct_fields != rhs.distinct_fields: + raise TypeError("Cannot combine queries with different distinct fields.") + + # Work out how to relabel the rhs aliases, if necessary. + change_map = {} + conjunction = connector == AND + + # Determine which existing joins can be reused. When combining the + # query with AND we must recreate all joins for m2m filters. When + # combining with OR we can reuse joins. The reason is that in AND + # case a single row can't fulfill a condition like: + # revrel__col=1 & revrel__col=2 + # But, there might be two different related rows matching this + # condition. In OR case a single True is enough, so single row is + # enough, too. + # + # Note that we will be creating duplicate joins for non-m2m joins in + # the AND case. The results will be correct but this creates too many + # joins. This is something that could be fixed later on. + reuse = set() if conjunction else set(self.alias_map) + # Base table must be present in the query - this is the same + # table on both sides. + self.get_initial_alias() + joinpromoter = JoinPromoter(connector, 2, False) + joinpromoter.add_votes( + j for j in self.alias_map if self.alias_map[j].join_type == INNER + ) + rhs_votes = set() + # Now, add the joins from rhs query into the new query (skipping base + # table). + rhs_tables = list(rhs.alias_map)[1:] + for alias in rhs_tables: + join = rhs.alias_map[alias] + # If the left side of the join was already relabeled, use the + # updated alias. + join = join.relabeled_clone(change_map) + new_alias = self.join(join, reuse=reuse) + if join.join_type == INNER: + rhs_votes.add(new_alias) + # We can't reuse the same join again in the query. If we have two + # distinct joins for the same connection in rhs query, then the + # combined query must have two joins, too. + reuse.discard(new_alias) + if alias != new_alias: + change_map[alias] = new_alias + if not rhs.alias_refcount[alias]: + # The alias was unused in the rhs query. Unref it so that it + # will be unused in the new query, too. We have to add and + # unref the alias so that join promotion has information of + # the join type for the unused alias. + self.unref_alias(new_alias) + joinpromoter.add_votes(rhs_votes) + joinpromoter.update_join_types(self) + + # Combine subqueries aliases to ensure aliases relabelling properly + # handle subqueries when combining where and select clauses. + self.subq_aliases |= rhs.subq_aliases + + # Now relabel a copy of the rhs where-clause and add it to the current + # one. + w = rhs.where.clone() + w.relabel_aliases(change_map) + self.where.add(w, connector) + + # Selection columns and extra extensions are those provided by 'rhs'. + if rhs.select: + self.set_select([col.relabeled_clone(change_map) for col in rhs.select]) + else: + self.select = () + + if connector == OR: + # It would be nice to be able to handle this, but the queries don't + # really make sense (or return consistent value sets). Not worth + # the extra complexity when you can write a real query instead. + if self.extra and rhs.extra: + raise ValueError( + "When merging querysets using 'or', you cannot have " + "extra(select=...) on both sides." + ) + self.extra.update(rhs.extra) + extra_select_mask = set() + if self.extra_select_mask is not None: + extra_select_mask.update(self.extra_select_mask) + if rhs.extra_select_mask is not None: + extra_select_mask.update(rhs.extra_select_mask) + if extra_select_mask: + self.set_extra_mask(extra_select_mask) + self.extra_tables += rhs.extra_tables + + # Ordering uses the 'rhs' ordering, unless it has none, in which case + # the current ordering is used. + self.order_by = rhs.order_by or self.order_by + self.extra_order_by = rhs.extra_order_by or self.extra_order_by + + def deferred_to_data(self, target, callback): + """ + Convert the self.deferred_loading data structure to an alternate data + structure, describing the field that *will* be loaded. This is used to + compute the columns to select from the database and also by the + QuerySet class to work out which fields are being initialized on each + model. Models that have all their fields included aren't mentioned in + the result, only those that have field restrictions in place. + + The "target" parameter is the instance that is populated (in place). + The "callback" is a function that is called whenever a (model, field) + pair need to be added to "target". It accepts three parameters: + "target", and the model and list of fields being added for that model. + """ + field_names, defer = self.deferred_loading + if not field_names: + return + orig_opts = self.get_meta() + seen = {} + must_include = {orig_opts.concrete_model: {orig_opts.pk}} + for field_name in field_names: + parts = field_name.split(LOOKUP_SEP) + cur_model = self.model._meta.concrete_model + opts = orig_opts + for name in parts[:-1]: + old_model = cur_model + if name in self._filtered_relations: + name = self._filtered_relations[name].relation_name + source = opts.get_field(name) + if is_reverse_o2o(source): + cur_model = source.related_model + else: + cur_model = source.remote_field.model + opts = cur_model._meta + # Even if we're "just passing through" this model, we must add + # both the current model's pk and the related reference field + # (if it's not a reverse relation) to the things we select. + if not is_reverse_o2o(source): + must_include[old_model].add(source) + add_to_dict(must_include, cur_model, opts.pk) + field = opts.get_field(parts[-1]) + is_reverse_object = field.auto_created and not field.concrete + model = field.related_model if is_reverse_object else field.model + model = model._meta.concrete_model + if model == opts.model: + model = cur_model + if not is_reverse_o2o(field): + add_to_dict(seen, model, field) + + if defer: + # We need to load all fields for each model, except those that + # appear in "seen" (for all models that appear in "seen"). The only + # slight complexity here is handling fields that exist on parent + # models. + workset = {} + for model, values in seen.items(): + for field in model._meta.local_fields: + if field not in values: + m = field.model._meta.concrete_model + add_to_dict(workset, m, field) + for model, values in must_include.items(): + # If we haven't included a model in workset, we don't add the + # corresponding must_include fields for that model, since an + # empty set means "include all fields". That's why there's no + # "else" branch here. + if model in workset: + workset[model].update(values) + for model, values in workset.items(): + callback(target, model, values) + else: + for model, values in must_include.items(): + if model in seen: + seen[model].update(values) + else: + # As we've passed through this model, but not explicitly + # included any fields, we have to make sure it's mentioned + # so that only the "must include" fields are pulled in. + seen[model] = values + # Now ensure that every model in the inheritance chain is mentioned + # in the parent list. Again, it must be mentioned to ensure that + # only "must include" fields are pulled in. + for model in orig_opts.get_parent_list(): + seen.setdefault(model, set()) + for model, values in seen.items(): + callback(target, model, values) + + def table_alias(self, table_name, create=False, filtered_relation=None): + """ + Return a table alias for the given table_name and whether this is a + new alias or not. + + If 'create' is true, a new alias is always created. Otherwise, the + most recently created alias for the table (if one exists) is reused. + """ + alias_list = self.table_map.get(table_name) + if not create and alias_list: + alias = alias_list[0] + self.alias_refcount[alias] += 1 + return alias, False + + # Create a new alias for this table. + if alias_list: + alias = "%s%d" % (self.alias_prefix, len(self.alias_map) + 1) + alias_list.append(alias) + else: + # The first occurrence of a table uses the table name directly. + alias = ( + filtered_relation.alias if filtered_relation is not None else table_name + ) + self.table_map[table_name] = [alias] + self.alias_refcount[alias] = 1 + return alias, True + + def ref_alias(self, alias): + """Increases the reference count for this alias.""" + self.alias_refcount[alias] += 1 + + def unref_alias(self, alias, amount=1): + """Decreases the reference count for this alias.""" + self.alias_refcount[alias] -= amount + + def promote_joins(self, aliases): + """ + Promote recursively the join type of given aliases and its children to + an outer join. If 'unconditional' is False, only promote the join if + it is nullable or the parent join is an outer join. + + The children promotion is done to avoid join chains that contain a LOUTER + b INNER c. So, if we have currently a INNER b INNER c and a->b is promoted, + then we must also promote b->c automatically, or otherwise the promotion + of a->b doesn't actually change anything in the query results. + """ + aliases = list(aliases) + while aliases: + alias = aliases.pop(0) + if self.alias_map[alias].join_type is None: + # This is the base table (first FROM entry) - this table + # isn't really joined at all in the query, so we should not + # alter its join type. + continue + # Only the first alias (skipped above) should have None join_type + assert self.alias_map[alias].join_type is not None + parent_alias = self.alias_map[alias].parent_alias + parent_louter = ( + parent_alias and self.alias_map[parent_alias].join_type == LOUTER + ) + already_louter = self.alias_map[alias].join_type == LOUTER + if (self.alias_map[alias].nullable or parent_louter) and not already_louter: + self.alias_map[alias] = self.alias_map[alias].promote() + # Join type of 'alias' changed, so re-examine all aliases that + # refer to this one. + aliases.extend( + join + for join in self.alias_map + if self.alias_map[join].parent_alias == alias + and join not in aliases + ) + + def demote_joins(self, aliases): + """ + Change join type from LOUTER to INNER for all joins in aliases. + + Similarly to promote_joins(), this method must ensure no join chains + containing first an outer, then an inner join are generated. If we + are demoting b->c join in chain a LOUTER b LOUTER c then we must + demote a->b automatically, or otherwise the demotion of b->c doesn't + actually change anything in the query results. . + """ + aliases = list(aliases) + while aliases: + alias = aliases.pop(0) + if self.alias_map[alias].join_type == LOUTER: + self.alias_map[alias] = self.alias_map[alias].demote() + parent_alias = self.alias_map[alias].parent_alias + if self.alias_map[parent_alias].join_type == INNER: + aliases.append(parent_alias) + + def reset_refcounts(self, to_counts): + """ + Reset reference counts for aliases so that they match the value passed + in `to_counts`. + """ + for alias, cur_refcount in self.alias_refcount.copy().items(): + unref_amount = cur_refcount - to_counts.get(alias, 0) + self.unref_alias(alias, unref_amount) + + def change_aliases(self, change_map): + """ + Change the aliases in change_map (which maps old-alias -> new-alias), + relabelling any references to them in select columns and the where + clause. + """ + assert set(change_map).isdisjoint(change_map.values()) + + # 1. Update references in "select" (normal columns plus aliases), + # "group by" and "where". + self.where.relabel_aliases(change_map) + if isinstance(self.group_by, tuple): + self.group_by = tuple( + [col.relabeled_clone(change_map) for col in self.group_by] + ) + self.select = tuple([col.relabeled_clone(change_map) for col in self.select]) + self.annotations = self.annotations and { + key: col.relabeled_clone(change_map) + for key, col in self.annotations.items() + } + + # 2. Rename the alias in the internal table/alias datastructures. + for old_alias, new_alias in change_map.items(): + if old_alias not in self.alias_map: + continue + alias_data = self.alias_map[old_alias].relabeled_clone(change_map) + self.alias_map[new_alias] = alias_data + self.alias_refcount[new_alias] = self.alias_refcount[old_alias] + del self.alias_refcount[old_alias] + del self.alias_map[old_alias] + + table_aliases = self.table_map[alias_data.table_name] + for pos, alias in enumerate(table_aliases): + if alias == old_alias: + table_aliases[pos] = new_alias + break + self.external_aliases = { + # Table is aliased or it's being changed and thus is aliased. + change_map.get(alias, alias): (aliased or alias in change_map) + for alias, aliased in self.external_aliases.items() + } + + def bump_prefix(self, outer_query): + """ + Change the alias prefix to the next letter in the alphabet in a way + that the outer query's aliases and this query's aliases will not + conflict. Even tables that previously had no alias will get an alias + after this call. + """ + + def prefix_gen(): + """ + Generate a sequence of characters in alphabetical order: + -> 'A', 'B', 'C', ... + + When the alphabet is finished, the sequence will continue with the + Cartesian product: + -> 'AA', 'AB', 'AC', ... + """ + alphabet = ascii_uppercase + prefix = chr(ord(self.alias_prefix) + 1) + yield prefix + for n in count(1): + seq = alphabet[alphabet.index(prefix) :] if prefix else alphabet + for s in product(seq, repeat=n): + yield "".join(s) + prefix = None + + if self.alias_prefix != outer_query.alias_prefix: + # No clashes between self and outer query should be possible. + return + + # Explicitly avoid infinite loop. The constant divider is based on how + # much depth recursive subquery references add to the stack. This value + # might need to be adjusted when adding or removing function calls from + # the code path in charge of performing these operations. + local_recursion_limit = sys.getrecursionlimit() // 16 + for pos, prefix in enumerate(prefix_gen()): + if prefix not in self.subq_aliases: + self.alias_prefix = prefix + break + if pos > local_recursion_limit: + raise RecursionError( + "Maximum recursion depth exceeded: too many subqueries." + ) + self.subq_aliases = self.subq_aliases.union([self.alias_prefix]) + outer_query.subq_aliases = outer_query.subq_aliases.union(self.subq_aliases) + self.change_aliases( + { + alias: "%s%d" % (self.alias_prefix, pos) + for pos, alias in enumerate(self.alias_map) + } + ) + + def get_initial_alias(self): + """ + Return the first alias for this query, after increasing its reference + count. + """ + if self.alias_map: + alias = self.base_table + self.ref_alias(alias) + else: + alias = self.join(BaseTable(self.get_meta().db_table, None)) + return alias + + def count_active_tables(self): + """ + Return the number of tables in this query with a non-zero reference + count. After execution, the reference counts are zeroed, so tables + added in compiler will not be seen by this method. + """ + return len([1 for count in self.alias_refcount.values() if count]) + + def join(self, join, reuse=None, reuse_with_filtered_relation=False): + """ + Return an alias for the 'join', either reusing an existing alias for + that join or creating a new one. 'join' is either a + sql.datastructures.BaseTable or Join. + + The 'reuse' parameter can be either None which means all joins are + reusable, or it can be a set containing the aliases that can be reused. + + The 'reuse_with_filtered_relation' parameter is used when computing + FilteredRelation instances. + + A join is always created as LOUTER if the lhs alias is LOUTER to make + sure chains like t1 LOUTER t2 INNER t3 aren't generated. All new + joins are created as LOUTER if the join is nullable. + """ + if reuse_with_filtered_relation and reuse: + reuse_aliases = [ + a for a, j in self.alias_map.items() if a in reuse and j.equals(join) + ] + else: + reuse_aliases = [ + a + for a, j in self.alias_map.items() + if (reuse is None or a in reuse) and j == join + ] + if reuse_aliases: + if join.table_alias in reuse_aliases: + reuse_alias = join.table_alias + else: + # Reuse the most recent alias of the joined table + # (a many-to-many relation may be joined multiple times). + reuse_alias = reuse_aliases[-1] + self.ref_alias(reuse_alias) + return reuse_alias + + # No reuse is possible, so we need a new alias. + alias, _ = self.table_alias( + join.table_name, create=True, filtered_relation=join.filtered_relation + ) + if join.join_type: + if self.alias_map[join.parent_alias].join_type == LOUTER or join.nullable: + join_type = LOUTER + else: + join_type = INNER + join.join_type = join_type + join.table_alias = alias + self.alias_map[alias] = join + return alias + + def join_parent_model(self, opts, model, alias, seen): + """ + Make sure the given 'model' is joined in the query. If 'model' isn't + a parent of 'opts' or if it is None this method is a no-op. + + The 'alias' is the root alias for starting the join, 'seen' is a dict + of model -> alias of existing joins. It must also contain a mapping + of None -> some alias. This will be returned in the no-op case. + """ + if model in seen: + return seen[model] + chain = opts.get_base_chain(model) + if not chain: + return alias + curr_opts = opts + for int_model in chain: + if int_model in seen: + curr_opts = int_model._meta + alias = seen[int_model] + continue + # Proxy model have elements in base chain + # with no parents, assign the new options + # object and skip to the next base in that + # case + if not curr_opts.parents[int_model]: + curr_opts = int_model._meta + continue + link_field = curr_opts.get_ancestor_link(int_model) + join_info = self.setup_joins([link_field.name], curr_opts, alias) + curr_opts = int_model._meta + alias = seen[int_model] = join_info.joins[-1] + return alias or seen[None] + + def check_alias(self, alias): + if FORBIDDEN_ALIAS_PATTERN.search(alias): + raise ValueError( + "Column aliases cannot contain whitespace characters, quotation marks, " + "semicolons, or SQL comments." + ) + + def add_annotation(self, annotation, alias, is_summary=False, select=True): + """Add a single annotation expression to the Query.""" + self.check_alias(alias) + annotation = annotation.resolve_expression( + self, allow_joins=True, reuse=None, summarize=is_summary + ) + if select: + self.append_annotation_mask([alias]) + else: + self.set_annotation_mask(set(self.annotation_select).difference({alias})) + self.annotations[alias] = annotation + + def resolve_expression(self, query, *args, **kwargs): + clone = self.clone() + # Subqueries need to use a different set of aliases than the outer query. + clone.bump_prefix(query) + clone.subquery = True + clone.where.resolve_expression(query, *args, **kwargs) + for key, value in clone.annotations.items(): + resolved = value.resolve_expression(query, *args, **kwargs) + if hasattr(resolved, "external_aliases"): + resolved.external_aliases.update(clone.external_aliases) + clone.annotations[key] = resolved + # Outer query's aliases are considered external. + for alias, table in query.alias_map.items(): + clone.external_aliases[alias] = ( + isinstance(table, Join) + and table.join_field.related_model._meta.db_table != alias + ) or ( + isinstance(table, BaseTable) and table.table_name != table.table_alias + ) + return clone + + def get_external_cols(self): + exprs = chain(self.annotations.values(), self.where.children) + return [ + col + for col in self._gen_cols(exprs, include_external=True) + if col.alias in self.external_aliases + ] + + def as_sql(self, compiler, connection): + # Some backends (e.g. Oracle) raise an error when a subquery contains + # unnecessary ORDER BY clause. + if ( + self.subquery + and not connection.features.ignores_unnecessary_order_by_in_subqueries + ): + self.clear_ordering(force=False) + sql, params = self.get_compiler(connection=connection).as_sql() + if self.subquery: + sql = "(%s)" % sql + return sql, params + + def resolve_lookup_value(self, value, can_reuse, allow_joins): + if hasattr(value, "resolve_expression"): + value = value.resolve_expression( + self, + reuse=can_reuse, + allow_joins=allow_joins, + ) + elif isinstance(value, (list, tuple)): + # The items of the iterable may be expressions and therefore need + # to be resolved independently. + values = ( + self.resolve_lookup_value(sub_value, can_reuse, allow_joins) + for sub_value in value + ) + type_ = type(value) + if hasattr(type_, "_make"): # namedtuple + return type_(*values) + return type_(values) + return value + + def solve_lookup_type(self, lookup): + """ + Solve the lookup type from the lookup (e.g.: 'foobar__id__icontains'). + """ + lookup_splitted = lookup.split(LOOKUP_SEP) + if self.annotations: + expression, expression_lookups = refs_expression( + lookup_splitted, self.annotations + ) + if expression: + return expression_lookups, (), expression + _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta()) + field_parts = lookup_splitted[0 : len(lookup_splitted) - len(lookup_parts)] + if len(lookup_parts) > 1 and not field_parts: + raise FieldError( + 'Invalid lookup "%s" for model %s".' + % (lookup, self.get_meta().model.__name__) + ) + return lookup_parts, field_parts, False + + def check_query_object_type(self, value, opts, field): + """ + Check whether the object passed while querying is of the correct type. + If not, raise a ValueError specifying the wrong object. + """ + if hasattr(value, "_meta"): + if not check_rel_lookup_compatibility(value._meta.model, opts, field): + raise ValueError( + 'Cannot query "%s": Must be "%s" instance.' + % (value, opts.object_name) + ) + + def check_related_objects(self, field, value, opts): + """Check the type of object passed to query relations.""" + if field.is_relation: + # Check that the field and the queryset use the same model in a + # query like .filter(author=Author.objects.all()). For example, the + # opts would be Author's (from the author field) and value.model + # would be Author.objects.all() queryset's .model (Author also). + # The field is the related field on the lhs side. + if ( + isinstance(value, Query) + and not value.has_select_fields + and not check_rel_lookup_compatibility(value.model, opts, field) + ): + raise ValueError( + 'Cannot use QuerySet for "%s": Use a QuerySet for "%s".' + % (value.model._meta.object_name, opts.object_name) + ) + elif hasattr(value, "_meta"): + self.check_query_object_type(value, opts, field) + elif hasattr(value, "__iter__"): + for v in value: + self.check_query_object_type(v, opts, field) + + def check_filterable(self, expression): + """Raise an error if expression cannot be used in a WHERE clause.""" + if hasattr(expression, "resolve_expression") and not getattr( + expression, "filterable", True + ): + raise NotSupportedError( + expression.__class__.__name__ + " is disallowed in the filter " + "clause." + ) + if hasattr(expression, "get_source_expressions"): + for expr in expression.get_source_expressions(): + self.check_filterable(expr) + + def build_lookup(self, lookups, lhs, rhs): + """ + Try to extract transforms and lookup from given lhs. + + The lhs value is something that works like SQLExpression. + The rhs value is what the lookup is going to compare against. + The lookups is a list of names to extract using get_lookup() + and get_transform(). + """ + # __exact is the default lookup if one isn't given. + *transforms, lookup_name = lookups or ["exact"] + for name in transforms: + lhs = self.try_transform(lhs, name) + # First try get_lookup() so that the lookup takes precedence if the lhs + # supports both transform and lookup for the name. + lookup_class = lhs.get_lookup(lookup_name) + if not lookup_class: + if lhs.field.is_relation: + raise FieldError( + "Related Field got invalid lookup: {}".format(lookup_name) + ) + # A lookup wasn't found. Try to interpret the name as a transform + # and do an Exact lookup against it. + lhs = self.try_transform(lhs, lookup_name) + lookup_name = "exact" + lookup_class = lhs.get_lookup(lookup_name) + if not lookup_class: + return + + lookup = lookup_class(lhs, rhs) + # Interpret '__exact=None' as the sql 'is NULL'; otherwise, reject all + # uses of None as a query value unless the lookup supports it. + if lookup.rhs is None and not lookup.can_use_none_as_rhs: + if lookup_name not in ("exact", "iexact"): + raise ValueError("Cannot use None as a query value") + return lhs.get_lookup("isnull")(lhs, True) + + # For Oracle '' is equivalent to null. The check must be done at this + # stage because join promotion can't be done in the compiler. Using + # DEFAULT_DB_ALIAS isn't nice but it's the best that can be done here. + # A similar thing is done in is_nullable(), too. + if ( + lookup_name == "exact" + and lookup.rhs == "" + and connections[DEFAULT_DB_ALIAS].features.interprets_empty_strings_as_nulls + ): + return lhs.get_lookup("isnull")(lhs, True) + + return lookup + + def try_transform(self, lhs, name): + """ + Helper method for build_lookup(). Try to fetch and initialize + a transform for name parameter from lhs. + """ + transform_class = lhs.get_transform(name) + if transform_class: + return transform_class(lhs) + else: + output_field = lhs.output_field.__class__ + suggested_lookups = difflib.get_close_matches( + name, output_field.get_lookups() + ) + if suggested_lookups: + suggestion = ", perhaps you meant %s?" % " or ".join(suggested_lookups) + else: + suggestion = "." + raise FieldError( + "Unsupported lookup '%s' for %s or join on the field not " + "permitted%s" % (name, output_field.__name__, suggestion) + ) + + def build_filter( + self, + filter_expr, + branch_negated=False, + current_negated=False, + can_reuse=None, + allow_joins=True, + split_subq=True, + reuse_with_filtered_relation=False, + check_filterable=True, + ): + """ + Build a WhereNode for a single filter clause but don't add it + to this Query. Query.add_q() will then add this filter to the where + Node. + + The 'branch_negated' tells us if the current branch contains any + negations. This will be used to determine if subqueries are needed. + + The 'current_negated' is used to determine if the current filter is + negated or not and this will be used to determine if IS NULL filtering + is needed. + + The difference between current_negated and branch_negated is that + branch_negated is set on first negation, but current_negated is + flipped for each negation. + + Note that add_filter will not do any negating itself, that is done + upper in the code by add_q(). + + The 'can_reuse' is a set of reusable joins for multijoins. + + If 'reuse_with_filtered_relation' is True, then only joins in can_reuse + will be reused. + + The method will create a filter clause that can be added to the current + query. However, if the filter isn't added to the query then the caller + is responsible for unreffing the joins used. + """ + if isinstance(filter_expr, dict): + raise FieldError("Cannot parse keyword query as dict") + if isinstance(filter_expr, Q): + return self._add_q( + filter_expr, + branch_negated=branch_negated, + current_negated=current_negated, + used_aliases=can_reuse, + allow_joins=allow_joins, + split_subq=split_subq, + check_filterable=check_filterable, + ) + if hasattr(filter_expr, "resolve_expression"): + if not getattr(filter_expr, "conditional", False): + raise TypeError("Cannot filter against a non-conditional expression.") + condition = filter_expr.resolve_expression(self, allow_joins=allow_joins) + if not isinstance(condition, Lookup): + condition = self.build_lookup(["exact"], condition, True) + return WhereNode([condition], connector=AND), [] + arg, value = filter_expr + if not arg: + raise FieldError("Cannot parse keyword query %r" % arg) + lookups, parts, reffed_expression = self.solve_lookup_type(arg) + + if check_filterable: + self.check_filterable(reffed_expression) + + if not allow_joins and len(parts) > 1: + raise FieldError("Joined field references are not permitted in this query") + + pre_joins = self.alias_refcount.copy() + value = self.resolve_lookup_value(value, can_reuse, allow_joins) + used_joins = { + k for k, v in self.alias_refcount.items() if v > pre_joins.get(k, 0) + } + + if check_filterable: + self.check_filterable(value) + + if reffed_expression: + condition = self.build_lookup(lookups, reffed_expression, value) + return WhereNode([condition], connector=AND), [] + + opts = self.get_meta() + alias = self.get_initial_alias() + allow_many = not branch_negated or not split_subq + + try: + join_info = self.setup_joins( + parts, + opts, + alias, + can_reuse=can_reuse, + allow_many=allow_many, + reuse_with_filtered_relation=reuse_with_filtered_relation, + ) + + # Prevent iterator from being consumed by check_related_objects() + if isinstance(value, Iterator): + value = list(value) + self.check_related_objects(join_info.final_field, value, join_info.opts) + + # split_exclude() needs to know which joins were generated for the + # lookup parts + self._lookup_joins = join_info.joins + except MultiJoin as e: + return self.split_exclude(filter_expr, can_reuse, e.names_with_path) + + # Update used_joins before trimming since they are reused to determine + # which joins could be later promoted to INNER. + used_joins.update(join_info.joins) + targets, alias, join_list = self.trim_joins( + join_info.targets, join_info.joins, join_info.path + ) + if can_reuse is not None: + can_reuse.update(join_list) + + if join_info.final_field.is_relation: + # No support for transforms for relational fields + num_lookups = len(lookups) + if num_lookups > 1: + raise FieldError( + "Related Field got invalid lookup: {}".format(lookups[0]) + ) + if len(targets) == 1: + col = self._get_col(targets[0], join_info.final_field, alias) + else: + col = MultiColSource( + alias, targets, join_info.targets, join_info.final_field + ) + else: + col = self._get_col(targets[0], join_info.final_field, alias) + + condition = self.build_lookup(lookups, col, value) + lookup_type = condition.lookup_name + clause = WhereNode([condition], connector=AND) + + require_outer = ( + lookup_type == "isnull" and condition.rhs is True and not current_negated + ) + if ( + current_negated + and (lookup_type != "isnull" or condition.rhs is False) + and condition.rhs is not None + ): + require_outer = True + if lookup_type != "isnull": + # The condition added here will be SQL like this: + # NOT (col IS NOT NULL), where the first NOT is added in + # upper layers of code. The reason for addition is that if col + # is null, then col != someval will result in SQL "unknown" + # which isn't the same as in Python. The Python None handling + # is wanted, and it can be gotten by + # (col IS NULL OR col != someval) + # <=> + # NOT (col IS NOT NULL AND col = someval). + if ( + self.is_nullable(targets[0]) + or self.alias_map[join_list[-1]].join_type == LOUTER + ): + lookup_class = targets[0].get_lookup("isnull") + col = self._get_col(targets[0], join_info.targets[0], alias) + clause.add(lookup_class(col, False), AND) + # If someval is a nullable column, someval IS NOT NULL is + # added. + if isinstance(value, Col) and self.is_nullable(value.target): + lookup_class = value.target.get_lookup("isnull") + clause.add(lookup_class(value, False), AND) + return clause, used_joins if not require_outer else () + + def add_filter(self, filter_lhs, filter_rhs): + self.add_q(Q((filter_lhs, filter_rhs))) + + def add_q(self, q_object): + """ + A preprocessor for the internal _add_q(). Responsible for doing final + join promotion. + """ + # For join promotion this case is doing an AND for the added q_object + # and existing conditions. So, any existing inner join forces the join + # type to remain inner. Existing outer joins can however be demoted. + # (Consider case where rel_a is LOUTER and rel_a__col=1 is added - if + # rel_a doesn't produce any rows, then the whole condition must fail. + # So, demotion is OK. + existing_inner = { + a for a in self.alias_map if self.alias_map[a].join_type == INNER + } + clause, _ = self._add_q(q_object, self.used_aliases) + if clause: + self.where.add(clause, AND) + self.demote_joins(existing_inner) + + def build_where(self, filter_expr): + return self.build_filter(filter_expr, allow_joins=False)[0] + + def clear_where(self): + self.where = WhereNode() + + def _add_q( + self, + q_object, + used_aliases, + branch_negated=False, + current_negated=False, + allow_joins=True, + split_subq=True, + check_filterable=True, + ): + """Add a Q-object to the current filter.""" + connector = q_object.connector + current_negated = current_negated ^ q_object.negated + branch_negated = branch_negated or q_object.negated + target_clause = WhereNode(connector=connector, negated=q_object.negated) + joinpromoter = JoinPromoter( + q_object.connector, len(q_object.children), current_negated + ) + for child in q_object.children: + child_clause, needed_inner = self.build_filter( + child, + can_reuse=used_aliases, + branch_negated=branch_negated, + current_negated=current_negated, + allow_joins=allow_joins, + split_subq=split_subq, + check_filterable=check_filterable, + ) + joinpromoter.add_votes(needed_inner) + if child_clause: + target_clause.add(child_clause, connector) + needed_inner = joinpromoter.update_join_types(self) + return target_clause, needed_inner + + def build_filtered_relation_q( + self, q_object, reuse, branch_negated=False, current_negated=False + ): + """Add a FilteredRelation object to the current filter.""" + connector = q_object.connector + current_negated ^= q_object.negated + branch_negated = branch_negated or q_object.negated + target_clause = WhereNode(connector=connector, negated=q_object.negated) + for child in q_object.children: + if isinstance(child, Node): + child_clause = self.build_filtered_relation_q( + child, + reuse=reuse, + branch_negated=branch_negated, + current_negated=current_negated, + ) + else: + child_clause, _ = self.build_filter( + child, + can_reuse=reuse, + branch_negated=branch_negated, + current_negated=current_negated, + allow_joins=True, + split_subq=False, + reuse_with_filtered_relation=True, + ) + target_clause.add(child_clause, connector) + return target_clause + + def add_filtered_relation(self, filtered_relation, alias): + filtered_relation.alias = alias + lookups = dict(get_children_from_q(filtered_relation.condition)) + relation_lookup_parts, relation_field_parts, _ = self.solve_lookup_type( + filtered_relation.relation_name + ) + if relation_lookup_parts: + raise ValueError( + "FilteredRelation's relation_name cannot contain lookups " + "(got %r)." % filtered_relation.relation_name + ) + for lookup in chain(lookups): + lookup_parts, lookup_field_parts, _ = self.solve_lookup_type(lookup) + shift = 2 if not lookup_parts else 1 + lookup_field_path = lookup_field_parts[:-shift] + for idx, lookup_field_part in enumerate(lookup_field_path): + if len(relation_field_parts) > idx: + if relation_field_parts[idx] != lookup_field_part: + raise ValueError( + "FilteredRelation's condition doesn't support " + "relations outside the %r (got %r)." + % (filtered_relation.relation_name, lookup) + ) + else: + raise ValueError( + "FilteredRelation's condition doesn't support nested " + "relations deeper than the relation_name (got %r for " + "%r)." % (lookup, filtered_relation.relation_name) + ) + self._filtered_relations[filtered_relation.alias] = filtered_relation + + def names_to_path(self, names, opts, allow_many=True, fail_on_missing=False): + """ + Walk the list of names and turns them into PathInfo tuples. A single + name in 'names' can generate multiple PathInfos (m2m, for example). + + 'names' is the path of names to travel, 'opts' is the model Options we + start the name resolving from, 'allow_many' is as for setup_joins(). + If fail_on_missing is set to True, then a name that can't be resolved + will generate a FieldError. + + Return a list of PathInfo tuples. In addition return the final field + (the last used join field) and target (which is a field guaranteed to + contain the same value as the final field). Finally, return those names + that weren't found (which are likely transforms and the final lookup). + """ + path, names_with_path = [], [] + for pos, name in enumerate(names): + cur_names_with_path = (name, []) + if name == "pk": + name = opts.pk.name + + field = None + filtered_relation = None + try: + field = opts.get_field(name) + except FieldDoesNotExist: + if name in self.annotation_select: + field = self.annotation_select[name].output_field + elif name in self._filtered_relations and pos == 0: + filtered_relation = self._filtered_relations[name] + if LOOKUP_SEP in filtered_relation.relation_name: + parts = filtered_relation.relation_name.split(LOOKUP_SEP) + filtered_relation_path, field, _, _ = self.names_to_path( + parts, + opts, + allow_many, + fail_on_missing, + ) + path.extend(filtered_relation_path[:-1]) + else: + field = opts.get_field(filtered_relation.relation_name) + if field is not None: + # Fields that contain one-to-many relations with a generic + # model (like a GenericForeignKey) cannot generate reverse + # relations and therefore cannot be used for reverse querying. + if field.is_relation and not field.related_model: + raise FieldError( + "Field %r does not generate an automatic reverse " + "relation and therefore cannot be used for reverse " + "querying. If it is a GenericForeignKey, consider " + "adding a GenericRelation." % name + ) + try: + model = field.model._meta.concrete_model + except AttributeError: + # QuerySet.annotate() may introduce fields that aren't + # attached to a model. + model = None + else: + # We didn't find the current field, so move position back + # one step. + pos -= 1 + if pos == -1 or fail_on_missing: + available = sorted( + [ + *get_field_names_from_opts(opts), + *self.annotation_select, + *self._filtered_relations, + ] + ) + raise FieldError( + "Cannot resolve keyword '%s' into field. " + "Choices are: %s" % (name, ", ".join(available)) + ) + break + # Check if we need any joins for concrete inheritance cases (the + # field lives in parent, but we are currently in one of its + # children) + if model is not opts.model: + path_to_parent = opts.get_path_to_parent(model) + if path_to_parent: + path.extend(path_to_parent) + cur_names_with_path[1].extend(path_to_parent) + opts = path_to_parent[-1].to_opts + if hasattr(field, "get_path_info"): + pathinfos = field.get_path_info(filtered_relation) + if not allow_many: + for inner_pos, p in enumerate(pathinfos): + if p.m2m: + cur_names_with_path[1].extend(pathinfos[0 : inner_pos + 1]) + names_with_path.append(cur_names_with_path) + raise MultiJoin(pos + 1, names_with_path) + last = pathinfos[-1] + path.extend(pathinfos) + final_field = last.join_field + opts = last.to_opts + targets = last.target_fields + cur_names_with_path[1].extend(pathinfos) + names_with_path.append(cur_names_with_path) + else: + # Local non-relational field. + final_field = field + targets = (field,) + if fail_on_missing and pos + 1 != len(names): + raise FieldError( + "Cannot resolve keyword %r into field. Join on '%s'" + " not permitted." % (names[pos + 1], name) + ) + break + return path, final_field, targets, names[pos + 1 :] + + def setup_joins( + self, + names, + opts, + alias, + can_reuse=None, + allow_many=True, + reuse_with_filtered_relation=False, + ): + """ + Compute the necessary table joins for the passage through the fields + given in 'names'. 'opts' is the Options class for the current model + (which gives the table we are starting from), 'alias' is the alias for + the table to start the joining from. + + The 'can_reuse' defines the reverse foreign key joins we can reuse. It + can be None in which case all joins are reusable or a set of aliases + that can be reused. Note that non-reverse foreign keys are always + reusable when using setup_joins(). + + The 'reuse_with_filtered_relation' can be used to force 'can_reuse' + parameter and force the relation on the given connections. + + If 'allow_many' is False, then any reverse foreign key seen will + generate a MultiJoin exception. + + Return the final field involved in the joins, the target field (used + for any 'where' constraint), the final 'opts' value, the joins, the + field path traveled to generate the joins, and a transform function + that takes a field and alias and is equivalent to `field.get_col(alias)` + in the simple case but wraps field transforms if they were included in + names. + + The target field is the field containing the concrete value. Final + field can be something different, for example foreign key pointing to + that value. Final field is needed for example in some value + conversions (convert 'obj' in fk__id=obj to pk val using the foreign + key field for example). + """ + joins = [alias] + # The transform can't be applied yet, as joins must be trimmed later. + # To avoid making every caller of this method look up transforms + # directly, compute transforms here and create a partial that converts + # fields to the appropriate wrapped version. + + def final_transformer(field, alias): + if not self.alias_cols: + alias = None + return field.get_col(alias) + + # Try resolving all the names as fields first. If there's an error, + # treat trailing names as lookups until a field can be resolved. + last_field_exception = None + for pivot in range(len(names), 0, -1): + try: + path, final_field, targets, rest = self.names_to_path( + names[:pivot], + opts, + allow_many, + fail_on_missing=True, + ) + except FieldError as exc: + if pivot == 1: + # The first item cannot be a lookup, so it's safe + # to raise the field error here. + raise + else: + last_field_exception = exc + else: + # The transforms are the remaining items that couldn't be + # resolved into fields. + transforms = names[pivot:] + break + for name in transforms: + + def transform(field, alias, *, name, previous): + try: + wrapped = previous(field, alias) + return self.try_transform(wrapped, name) + except FieldError: + # FieldError is raised if the transform doesn't exist. + if isinstance(final_field, Field) and last_field_exception: + raise last_field_exception + else: + raise + + final_transformer = functools.partial( + transform, name=name, previous=final_transformer + ) + # Then, add the path to the query's joins. Note that we can't trim + # joins at this stage - we will need the information about join type + # of the trimmed joins. + for join in path: + if join.filtered_relation: + filtered_relation = join.filtered_relation.clone() + table_alias = filtered_relation.alias + else: + filtered_relation = None + table_alias = None + opts = join.to_opts + if join.direct: + nullable = self.is_nullable(join.join_field) + else: + nullable = True + connection = Join( + opts.db_table, + alias, + table_alias, + INNER, + join.join_field, + nullable, + filtered_relation=filtered_relation, + ) + reuse = can_reuse if join.m2m or reuse_with_filtered_relation else None + alias = self.join( + connection, + reuse=reuse, + reuse_with_filtered_relation=reuse_with_filtered_relation, + ) + joins.append(alias) + if filtered_relation: + filtered_relation.path = joins[:] + return JoinInfo(final_field, targets, opts, joins, path, final_transformer) + + def trim_joins(self, targets, joins, path): + """ + The 'target' parameter is the final field being joined to, 'joins' + is the full list of join aliases. The 'path' contain the PathInfos + used to create the joins. + + Return the final target field and table alias and the new active + joins. + + Always trim any direct join if the target column is already in the + previous table. Can't trim reverse joins as it's unknown if there's + anything on the other side of the join. + """ + joins = joins[:] + for pos, info in enumerate(reversed(path)): + if len(joins) == 1 or not info.direct: + break + if info.filtered_relation: + break + join_targets = {t.column for t in info.join_field.foreign_related_fields} + cur_targets = {t.column for t in targets} + if not cur_targets.issubset(join_targets): + break + targets_dict = { + r[1].column: r[0] + for r in info.join_field.related_fields + if r[1].column in cur_targets + } + targets = tuple(targets_dict[t.column] for t in targets) + self.unref_alias(joins.pop()) + return targets, joins[-1], joins + + @classmethod + def _gen_cols(cls, exprs, include_external=False): + for expr in exprs: + if isinstance(expr, Col): + yield expr + elif include_external and callable( + getattr(expr, "get_external_cols", None) + ): + yield from expr.get_external_cols() + elif hasattr(expr, "get_source_expressions"): + yield from cls._gen_cols( + expr.get_source_expressions(), + include_external=include_external, + ) + + @classmethod + def _gen_col_aliases(cls, exprs): + yield from (expr.alias for expr in cls._gen_cols(exprs)) + + def resolve_ref(self, name, allow_joins=True, reuse=None, summarize=False): + annotation = self.annotations.get(name) + if annotation is not None: + if not allow_joins: + for alias in self._gen_col_aliases([annotation]): + if isinstance(self.alias_map[alias], Join): + raise FieldError( + "Joined field references are not permitted in this query" + ) + if summarize: + # Summarize currently means we are doing an aggregate() query + # which is executed as a wrapped subquery if any of the + # aggregate() elements reference an existing annotation. In + # that case we need to return a Ref to the subquery's annotation. + if name not in self.annotation_select: + raise FieldError( + "Cannot aggregate over the '%s' alias. Use annotate() " + "to promote it." % name + ) + return Ref(name, self.annotation_select[name]) + else: + return annotation + else: + field_list = name.split(LOOKUP_SEP) + annotation = self.annotations.get(field_list[0]) + if annotation is not None: + for transform in field_list[1:]: + annotation = self.try_transform(annotation, transform) + return annotation + join_info = self.setup_joins( + field_list, self.get_meta(), self.get_initial_alias(), can_reuse=reuse + ) + targets, final_alias, join_list = self.trim_joins( + join_info.targets, join_info.joins, join_info.path + ) + if not allow_joins and len(join_list) > 1: + raise FieldError( + "Joined field references are not permitted in this query" + ) + if len(targets) > 1: + raise FieldError( + "Referencing multicolumn fields with F() objects isn't supported" + ) + # Verify that the last lookup in name is a field or a transform: + # transform_function() raises FieldError if not. + transform = join_info.transform_function(targets[0], final_alias) + if reuse is not None: + reuse.update(join_list) + return transform + + def split_exclude(self, filter_expr, can_reuse, names_with_path): + """ + When doing an exclude against any kind of N-to-many relation, we need + to use a subquery. This method constructs the nested query, given the + original exclude filter (filter_expr) and the portion up to the first + N-to-many relation field. + + For example, if the origin filter is ~Q(child__name='foo'), filter_expr + is ('child__name', 'foo') and can_reuse is a set of joins usable for + filters in the original query. + + We will turn this into equivalent of: + WHERE NOT EXISTS( + SELECT 1 + FROM child + WHERE name = 'foo' AND child.parent_id = parent.id + LIMIT 1 + ) + """ + # Generate the inner query. + query = Query(self.model) + query._filtered_relations = self._filtered_relations + filter_lhs, filter_rhs = filter_expr + if isinstance(filter_rhs, OuterRef): + filter_rhs = OuterRef(filter_rhs) + elif isinstance(filter_rhs, F): + filter_rhs = OuterRef(filter_rhs.name) + query.add_filter(filter_lhs, filter_rhs) + query.clear_ordering(force=True) + # Try to have as simple as possible subquery -> trim leading joins from + # the subquery. + trimmed_prefix, contains_louter = query.trim_start(names_with_path) + + col = query.select[0] + select_field = col.target + alias = col.alias + if alias in can_reuse: + pk = select_field.model._meta.pk + # Need to add a restriction so that outer query's filters are in effect for + # the subquery, too. + query.bump_prefix(self) + lookup_class = select_field.get_lookup("exact") + # Note that the query.select[0].alias is different from alias + # due to bump_prefix above. + lookup = lookup_class(pk.get_col(query.select[0].alias), pk.get_col(alias)) + query.where.add(lookup, AND) + query.external_aliases[alias] = True + + lookup_class = select_field.get_lookup("exact") + lookup = lookup_class(col, ResolvedOuterRef(trimmed_prefix)) + query.where.add(lookup, AND) + condition, needed_inner = self.build_filter(Exists(query)) + + if contains_louter: + or_null_condition, _ = self.build_filter( + ("%s__isnull" % trimmed_prefix, True), + current_negated=True, + branch_negated=True, + can_reuse=can_reuse, + ) + condition.add(or_null_condition, OR) + # Note that the end result will be: + # (outercol NOT IN innerq AND outercol IS NOT NULL) OR outercol IS NULL. + # This might look crazy but due to how IN works, this seems to be + # correct. If the IS NOT NULL check is removed then outercol NOT + # IN will return UNKNOWN. If the IS NULL check is removed, then if + # outercol IS NULL we will not match the row. + return condition, needed_inner + + def set_empty(self): + self.where.add(NothingNode(), AND) + for query in self.combined_queries: + query.set_empty() + + def is_empty(self): + return any(isinstance(c, NothingNode) for c in self.where.children) + + def set_limits(self, low=None, high=None): + """ + Adjust the limits on the rows retrieved. Use low/high to set these, + as it makes it more Pythonic to read and write. When the SQL query is + created, convert them to the appropriate offset and limit values. + + Apply any limits passed in here to the existing constraints. Add low + to the current low value and clamp both to any existing high value. + """ + if high is not None: + if self.high_mark is not None: + self.high_mark = min(self.high_mark, self.low_mark + high) + else: + self.high_mark = self.low_mark + high + if low is not None: + if self.high_mark is not None: + self.low_mark = min(self.high_mark, self.low_mark + low) + else: + self.low_mark = self.low_mark + low + + if self.low_mark == self.high_mark: + self.set_empty() + + def clear_limits(self): + """Clear any existing limits.""" + self.low_mark, self.high_mark = 0, None + + @property + def is_sliced(self): + return self.low_mark != 0 or self.high_mark is not None + + def has_limit_one(self): + return self.high_mark is not None and (self.high_mark - self.low_mark) == 1 + + def can_filter(self): + """ + Return True if adding filters to this instance is still possible. + + Typically, this means no limits or offsets have been put on the results. + """ + return not self.is_sliced + + def clear_select_clause(self): + """Remove all fields from SELECT clause.""" + self.select = () + self.default_cols = False + self.select_related = False + self.set_extra_mask(()) + self.set_annotation_mask(()) + + def clear_select_fields(self): + """ + Clear the list of fields to select (but not extra_select columns). + Some queryset types completely replace any existing list of select + columns. + """ + self.select = () + self.values_select = () + + def add_select_col(self, col, name): + self.select += (col,) + self.values_select += (name,) + + def set_select(self, cols): + self.default_cols = False + self.select = tuple(cols) + + def add_distinct_fields(self, *field_names): + """ + Add and resolve the given fields to the query's "distinct on" clause. + """ + self.distinct_fields = field_names + self.distinct = True + + def add_fields(self, field_names, allow_m2m=True): + """ + Add the given (model) fields to the select set. Add the field names in + the order specified. + """ + alias = self.get_initial_alias() + opts = self.get_meta() + + try: + cols = [] + for name in field_names: + # Join promotion note - we must not remove any rows here, so + # if there is no existing joins, use outer join. + join_info = self.setup_joins( + name.split(LOOKUP_SEP), opts, alias, allow_many=allow_m2m + ) + targets, final_alias, joins = self.trim_joins( + join_info.targets, + join_info.joins, + join_info.path, + ) + for target in targets: + cols.append(join_info.transform_function(target, final_alias)) + if cols: + self.set_select(cols) + except MultiJoin: + raise FieldError("Invalid field name: '%s'" % name) + except FieldError: + if LOOKUP_SEP in name: + # For lookups spanning over relationships, show the error + # from the model on which the lookup failed. + raise + elif name in self.annotations: + raise FieldError( + "Cannot select the '%s' alias. Use annotate() to promote " + "it." % name + ) + else: + names = sorted( + [ + *get_field_names_from_opts(opts), + *self.extra, + *self.annotation_select, + *self._filtered_relations, + ] + ) + raise FieldError( + "Cannot resolve keyword %r into field. " + "Choices are: %s" % (name, ", ".join(names)) + ) + + def add_ordering(self, *ordering): + """ + Add items from the 'ordering' sequence to the query's "order by" + clause. These items are either field names (not column names) -- + possibly with a direction prefix ('-' or '?') -- or OrderBy + expressions. + + If 'ordering' is empty, clear all ordering from the query. + """ + errors = [] + for item in ordering: + if isinstance(item, str): + if item == "?": + continue + if item.startswith("-"): + item = item[1:] + if item in self.annotations: + continue + if self.extra and item in self.extra: + continue + # names_to_path() validates the lookup. A descriptive + # FieldError will be raise if it's not. + self.names_to_path(item.split(LOOKUP_SEP), self.model._meta) + elif not hasattr(item, "resolve_expression"): + errors.append(item) + if getattr(item, "contains_aggregate", False): + raise FieldError( + "Using an aggregate in order_by() without also including " + "it in annotate() is not allowed: %s" % item + ) + if errors: + raise FieldError("Invalid order_by arguments: %s" % errors) + if ordering: + self.order_by += ordering + else: + self.default_ordering = False + + def clear_ordering(self, force=False, clear_default=True): + """ + Remove any ordering settings if the current query allows it without + side effects, set 'force' to True to clear the ordering regardless. + If 'clear_default' is True, there will be no ordering in the resulting + query (not even the model's default). + """ + if not force and ( + self.is_sliced or self.distinct_fields or self.select_for_update + ): + return + self.order_by = () + self.extra_order_by = () + if clear_default: + self.default_ordering = False + + def set_group_by(self, allow_aliases=True): + """ + Expand the GROUP BY clause required by the query. + + This will usually be the set of all non-aggregate fields in the + return data. If the database backend supports grouping by the + primary key, and the query would be equivalent, the optimization + will be made automatically. + """ + # Column names from JOINs to check collisions with aliases. + if allow_aliases: + column_names = set() + seen_models = set() + for join in list(self.alias_map.values())[1:]: # Skip base table. + model = join.join_field.related_model + if model not in seen_models: + column_names.update( + {field.column for field in model._meta.local_concrete_fields} + ) + seen_models.add(model) + + group_by = list(self.select) + if self.annotation_select: + for alias, annotation in self.annotation_select.items(): + if not allow_aliases or alias in column_names: + alias = None + group_by_cols = annotation.get_group_by_cols(alias=alias) + group_by.extend(group_by_cols) + self.group_by = tuple(group_by) + + def add_select_related(self, fields): + """ + Set up the select_related data structure so that we only select + certain related models (as opposed to all models, when + self.select_related=True). + """ + if isinstance(self.select_related, bool): + field_dict = {} + else: + field_dict = self.select_related + for field in fields: + d = field_dict + for part in field.split(LOOKUP_SEP): + d = d.setdefault(part, {}) + self.select_related = field_dict + + def add_extra(self, select, select_params, where, params, tables, order_by): + """ + Add data to the various extra_* attributes for user-created additions + to the query. + """ + if select: + # We need to pair any placeholder markers in the 'select' + # dictionary with their parameters in 'select_params' so that + # subsequent updates to the select dictionary also adjust the + # parameters appropriately. + select_pairs = {} + if select_params: + param_iter = iter(select_params) + else: + param_iter = iter([]) + for name, entry in select.items(): + self.check_alias(name) + entry = str(entry) + entry_params = [] + pos = entry.find("%s") + while pos != -1: + if pos == 0 or entry[pos - 1] != "%": + entry_params.append(next(param_iter)) + pos = entry.find("%s", pos + 2) + select_pairs[name] = (entry, entry_params) + self.extra.update(select_pairs) + if where or params: + self.where.add(ExtraWhere(where, params), AND) + if tables: + self.extra_tables += tuple(tables) + if order_by: + self.extra_order_by = order_by + + def clear_deferred_loading(self): + """Remove any fields from the deferred loading set.""" + self.deferred_loading = (frozenset(), True) + + def add_deferred_loading(self, field_names): + """ + Add the given list of model field names to the set of fields to + exclude from loading from the database when automatic column selection + is done. Add the new field names to any existing field names that + are deferred (or removed from any existing field names that are marked + as the only ones for immediate loading). + """ + # Fields on related models are stored in the literal double-underscore + # format, so that we can use a set datastructure. We do the foo__bar + # splitting and handling when computing the SQL column names (as part of + # get_columns()). + existing, defer = self.deferred_loading + if defer: + # Add to existing deferred names. + self.deferred_loading = existing.union(field_names), True + else: + # Remove names from the set of any existing "immediate load" names. + if new_existing := existing.difference(field_names): + self.deferred_loading = new_existing, False + else: + self.clear_deferred_loading() + if new_only := set(field_names).difference(existing): + self.deferred_loading = new_only, True + + def add_immediate_loading(self, field_names): + """ + Add the given list of model field names to the set of fields to + retrieve when the SQL is executed ("immediate loading" fields). The + field names replace any existing immediate loading field names. If + there are field names already specified for deferred loading, remove + those names from the new field_names before storing the new names + for immediate loading. (That is, immediate loading overrides any + existing immediate values, but respects existing deferrals.) + """ + existing, defer = self.deferred_loading + field_names = set(field_names) + if "pk" in field_names: + field_names.remove("pk") + field_names.add(self.get_meta().pk.name) + + if defer: + # Remove any existing deferred names from the current set before + # setting the new names. + self.deferred_loading = field_names.difference(existing), False + else: + # Replace any existing "immediate load" field names. + self.deferred_loading = frozenset(field_names), False + + def get_loaded_field_names(self): + """ + If any fields are marked to be deferred, return a dictionary mapping + models to a set of names in those fields that will be loaded. If a + model is not in the returned dictionary, none of its fields are + deferred. + + If no fields are marked for deferral, return an empty dictionary. + """ + # We cache this because we call this function multiple times + # (compiler.fill_related_selections, query.iterator) + try: + return self._loaded_field_names_cache + except AttributeError: + collection = {} + self.deferred_to_data(collection, self.get_loaded_field_names_cb) + self._loaded_field_names_cache = collection + return collection + + def get_loaded_field_names_cb(self, target, model, fields): + """Callback used by get_deferred_field_names().""" + target[model] = {f.attname for f in fields} + + def set_annotation_mask(self, names): + """Set the mask of annotations that will be returned by the SELECT.""" + if names is None: + self.annotation_select_mask = None + else: + self.annotation_select_mask = set(names) + self._annotation_select_cache = None + + def append_annotation_mask(self, names): + if self.annotation_select_mask is not None: + self.set_annotation_mask(self.annotation_select_mask.union(names)) + + def set_extra_mask(self, names): + """ + Set the mask of extra select items that will be returned by SELECT. + Don't remove them from the Query since they might be used later. + """ + if names is None: + self.extra_select_mask = None + else: + self.extra_select_mask = set(names) + self._extra_select_cache = None + + def set_values(self, fields): + self.select_related = False + self.clear_deferred_loading() + self.clear_select_fields() + + if fields: + field_names = [] + extra_names = [] + annotation_names = [] + if not self.extra and not self.annotations: + # Shortcut - if there are no extra or annotations, then + # the values() clause must be just field names. + field_names = list(fields) + else: + self.default_cols = False + for f in fields: + if f in self.extra_select: + extra_names.append(f) + elif f in self.annotation_select: + annotation_names.append(f) + else: + field_names.append(f) + self.set_extra_mask(extra_names) + self.set_annotation_mask(annotation_names) + selected = frozenset(field_names + extra_names + annotation_names) + else: + field_names = [f.attname for f in self.model._meta.concrete_fields] + selected = frozenset(field_names) + # Selected annotations must be known before setting the GROUP BY + # clause. + if self.group_by is True: + self.add_fields( + (f.attname for f in self.model._meta.concrete_fields), False + ) + # Disable GROUP BY aliases to avoid orphaning references to the + # SELECT clause which is about to be cleared. + self.set_group_by(allow_aliases=False) + self.clear_select_fields() + elif self.group_by: + # Resolve GROUP BY annotation references if they are not part of + # the selected fields anymore. + group_by = [] + for expr in self.group_by: + if isinstance(expr, Ref) and expr.refs not in selected: + expr = self.annotations[expr.refs] + group_by.append(expr) + self.group_by = tuple(group_by) + + self.values_select = tuple(field_names) + self.add_fields(field_names, True) + + @property + def annotation_select(self): + """ + Return the dictionary of aggregate columns that are not masked and + should be used in the SELECT clause. Cache this result for performance. + """ + if self._annotation_select_cache is not None: + return self._annotation_select_cache + elif not self.annotations: + return {} + elif self.annotation_select_mask is not None: + self._annotation_select_cache = { + k: v + for k, v in self.annotations.items() + if k in self.annotation_select_mask + } + return self._annotation_select_cache + else: + return self.annotations + + @property + def extra_select(self): + if self._extra_select_cache is not None: + return self._extra_select_cache + if not self.extra: + return {} + elif self.extra_select_mask is not None: + self._extra_select_cache = { + k: v for k, v in self.extra.items() if k in self.extra_select_mask + } + return self._extra_select_cache + else: + return self.extra + + def trim_start(self, names_with_path): + """ + Trim joins from the start of the join path. The candidates for trim + are the PathInfos in names_with_path structure that are m2m joins. + + Also set the select column so the start matches the join. + + This method is meant to be used for generating the subquery joins & + cols in split_exclude(). + + Return a lookup usable for doing outerq.filter(lookup=self) and a + boolean indicating if the joins in the prefix contain a LEFT OUTER join. + _""" + all_paths = [] + for _, paths in names_with_path: + all_paths.extend(paths) + contains_louter = False + # Trim and operate only on tables that were generated for + # the lookup part of the query. That is, avoid trimming + # joins generated for F() expressions. + lookup_tables = [ + t for t in self.alias_map if t in self._lookup_joins or t == self.base_table + ] + for trimmed_paths, path in enumerate(all_paths): + if path.m2m: + break + if self.alias_map[lookup_tables[trimmed_paths + 1]].join_type == LOUTER: + contains_louter = True + alias = lookup_tables[trimmed_paths] + self.unref_alias(alias) + # The path.join_field is a Rel, lets get the other side's field + join_field = path.join_field.field + # Build the filter prefix. + paths_in_prefix = trimmed_paths + trimmed_prefix = [] + for name, path in names_with_path: + if paths_in_prefix - len(path) < 0: + break + trimmed_prefix.append(name) + paths_in_prefix -= len(path) + trimmed_prefix.append(join_field.foreign_related_fields[0].name) + trimmed_prefix = LOOKUP_SEP.join(trimmed_prefix) + # Lets still see if we can trim the first join from the inner query + # (that is, self). We can't do this for: + # - LEFT JOINs because we would miss those rows that have nothing on + # the outer side, + # - INNER JOINs from filtered relations because we would miss their + # filters. + first_join = self.alias_map[lookup_tables[trimmed_paths + 1]] + if first_join.join_type != LOUTER and not first_join.filtered_relation: + select_fields = [r[0] for r in join_field.related_fields] + select_alias = lookup_tables[trimmed_paths + 1] + self.unref_alias(lookup_tables[trimmed_paths]) + extra_restriction = join_field.get_extra_restriction( + None, lookup_tables[trimmed_paths + 1] + ) + if extra_restriction: + self.where.add(extra_restriction, AND) + else: + # TODO: It might be possible to trim more joins from the start of the + # inner query if it happens to have a longer join chain containing the + # values in select_fields. Lets punt this one for now. + select_fields = [r[1] for r in join_field.related_fields] + select_alias = lookup_tables[trimmed_paths] + # The found starting point is likely a Join instead of a BaseTable reference. + # But the first entry in the query's FROM clause must not be a JOIN. + for table in self.alias_map: + if self.alias_refcount[table] > 0: + self.alias_map[table] = BaseTable( + self.alias_map[table].table_name, table + ) + break + self.set_select([f.get_col(select_alias) for f in select_fields]) + return trimmed_prefix, contains_louter + + def is_nullable(self, field): + """ + Check if the given field should be treated as nullable. + + Some backends treat '' as null and Django treats such fields as + nullable for those backends. In such situations field.null can be + False even if we should treat the field as nullable. + """ + # We need to use DEFAULT_DB_ALIAS here, as QuerySet does not have + # (nor should it have) knowledge of which connection is going to be + # used. The proper fix would be to defer all decisions where + # is_nullable() is needed to the compiler stage, but that is not easy + # to do currently. + return ( + connections[DEFAULT_DB_ALIAS].features.interprets_empty_strings_as_nulls + and field.empty_strings_allowed + ) or field.null + + +def get_order_dir(field, default="ASC"): + """ + Return the field name and direction for an order specification. For + example, '-foo' is returned as ('foo', 'DESC'). + + The 'default' param is used to indicate which way no prefix (or a '+' + prefix) should sort. The '-' prefix always sorts the opposite way. + """ + dirn = ORDER_DIR[default] + if field[0] == "-": + return field[1:], dirn[1] + return field, dirn[0] + + +def add_to_dict(data, key, value): + """ + Add "value" to the set of values for "key", whether or not "key" already + exists. + """ + if key in data: + data[key].add(value) + else: + data[key] = {value} + + +def is_reverse_o2o(field): + """ + Check if the given field is reverse-o2o. The field is expected to be some + sort of relation field or related object. + """ + return field.is_relation and field.one_to_one and not field.concrete + + +class JoinPromoter: + """ + A class to abstract away join promotion problems for complex filter + conditions. + """ + + def __init__(self, connector, num_children, negated): + self.connector = connector + self.negated = negated + if self.negated: + if connector == AND: + self.effective_connector = OR + else: + self.effective_connector = AND + else: + self.effective_connector = self.connector + self.num_children = num_children + # Maps of table alias to how many times it is seen as required for + # inner and/or outer joins. + self.votes = Counter() + + def add_votes(self, votes): + """ + Add single vote per item to self.votes. Parameter can be any + iterable. + """ + self.votes.update(votes) + + def update_join_types(self, query): + """ + Change join types so that the generated query is as efficient as + possible, but still correct. So, change as many joins as possible + to INNER, but don't make OUTER joins INNER if that could remove + results from the query. + """ + to_promote = set() + to_demote = set() + # The effective_connector is used so that NOT (a AND b) is treated + # similarly to (a OR b) for join promotion. + for table, votes in self.votes.items(): + # We must use outer joins in OR case when the join isn't contained + # in all of the joins. Otherwise the INNER JOIN itself could remove + # valid results. Consider the case where a model with rel_a and + # rel_b relations is queried with rel_a__col=1 | rel_b__col=2. Now, + # if rel_a join doesn't produce any results is null (for example + # reverse foreign key or null value in direct foreign key), and + # there is a matching row in rel_b with col=2, then an INNER join + # to rel_a would remove a valid match from the query. So, we need + # to promote any existing INNER to LOUTER (it is possible this + # promotion in turn will be demoted later on). + if self.effective_connector == "OR" and votes < self.num_children: + to_promote.add(table) + # If connector is AND and there is a filter that can match only + # when there is a joinable row, then use INNER. For example, in + # rel_a__col=1 & rel_b__col=2, if either of the rels produce NULL + # as join output, then the col=1 or col=2 can't match (as + # NULL=anything is always false). + # For the OR case, if all children voted for a join to be inner, + # then we can use INNER for the join. For example: + # (rel_a__col__icontains=Alex | rel_a__col__icontains=Russell) + # then if rel_a doesn't produce any rows, the whole condition + # can't match. Hence we can safely use INNER join. + if self.effective_connector == "AND" or ( + self.effective_connector == "OR" and votes == self.num_children + ): + to_demote.add(table) + # Finally, what happens in cases where we have: + # (rel_a__col=1|rel_b__col=2) & rel_a__col__gte=0 + # Now, we first generate the OR clause, and promote joins for it + # in the first if branch above. Both rel_a and rel_b are promoted + # to LOUTER joins. After that we do the AND case. The OR case + # voted no inner joins but the rel_a__col__gte=0 votes inner join + # for rel_a. We demote it back to INNER join (in AND case a single + # vote is enough). The demotion is OK, if rel_a doesn't produce + # rows, then the rel_a__col__gte=0 clause can't be true, and thus + # the whole clause must be false. So, it is safe to use INNER + # join. + # Note that in this example we could just as well have the __gte + # clause and the OR clause swapped. Or we could replace the __gte + # clause with an OR clause containing rel_a__col=1|rel_a__col=2, + # and again we could safely demote to INNER. + query.promote_joins(to_promote) + query.demote_joins(to_demote) + return to_demote diff --git a/venv/Lib/site-packages/django/db/models/sql/subqueries.py b/venv/Lib/site-packages/django/db/models/sql/subqueries.py new file mode 100644 index 000000000..1ed6e561a --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/subqueries.py @@ -0,0 +1,167 @@ +""" +Query subclasses which provide extra functionality beyond simple data retrieval. +""" + +from django.core.exceptions import FieldError +from django.db.models.sql.constants import CURSOR, GET_ITERATOR_CHUNK_SIZE, NO_RESULTS +from django.db.models.sql.query import Query + +__all__ = ["DeleteQuery", "UpdateQuery", "InsertQuery", "AggregateQuery"] + + +class DeleteQuery(Query): + """A DELETE SQL query.""" + + compiler = "SQLDeleteCompiler" + + def do_query(self, table, where, using): + self.alias_map = {table: self.alias_map[table]} + self.where = where + cursor = self.get_compiler(using).execute_sql(CURSOR) + if cursor: + with cursor: + return cursor.rowcount + return 0 + + def delete_batch(self, pk_list, using): + """ + Set up and execute delete queries for all the objects in pk_list. + + More than one physical query may be executed if there are a + lot of values in pk_list. + """ + # number of objects deleted + num_deleted = 0 + field = self.get_meta().pk + for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): + self.clear_where() + self.add_filter( + f"{field.attname}__in", + pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE], + ) + num_deleted += self.do_query( + self.get_meta().db_table, self.where, using=using + ) + return num_deleted + + +class UpdateQuery(Query): + """An UPDATE SQL query.""" + + compiler = "SQLUpdateCompiler" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._setup_query() + + def _setup_query(self): + """ + Run on initialization and at the end of chaining. Any attributes that + would normally be set in __init__() should go here instead. + """ + self.values = [] + self.related_ids = None + self.related_updates = {} + + def clone(self): + obj = super().clone() + obj.related_updates = self.related_updates.copy() + return obj + + def update_batch(self, pk_list, values, using): + self.add_update_values(values) + for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): + self.clear_where() + self.add_filter( + "pk__in", pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE] + ) + self.get_compiler(using).execute_sql(NO_RESULTS) + + def add_update_values(self, values): + """ + Convert a dictionary of field name to value mappings into an update + query. This is the entry point for the public update() method on + querysets. + """ + values_seq = [] + for name, val in values.items(): + field = self.get_meta().get_field(name) + direct = ( + not (field.auto_created and not field.concrete) or not field.concrete + ) + model = field.model._meta.concrete_model + if not direct or (field.is_relation and field.many_to_many): + raise FieldError( + "Cannot update model field %r (only non-relations and " + "foreign keys permitted)." % field + ) + if model is not self.get_meta().concrete_model: + self.add_related_update(model, field, val) + continue + values_seq.append((field, model, val)) + return self.add_update_fields(values_seq) + + def add_update_fields(self, values_seq): + """ + Append a sequence of (field, model, value) triples to the internal list + that will be used to generate the UPDATE query. Might be more usefully + called add_update_targets() to hint at the extra information here. + """ + for field, model, val in values_seq: + if hasattr(val, "resolve_expression"): + # Resolve expressions here so that annotations are no longer needed + val = val.resolve_expression(self, allow_joins=False, for_save=True) + self.values.append((field, model, val)) + + def add_related_update(self, model, field, value): + """ + Add (name, value) to an update query for an ancestor model. + + Update are coalesced so that only one update query per ancestor is run. + """ + self.related_updates.setdefault(model, []).append((field, None, value)) + + def get_related_updates(self): + """ + Return a list of query objects: one for each update required to an + ancestor model. Each query will have the same filtering conditions as + the current query but will only update a single table. + """ + if not self.related_updates: + return [] + result = [] + for model, values in self.related_updates.items(): + query = UpdateQuery(model) + query.values = values + if self.related_ids is not None: + query.add_filter("pk__in", self.related_ids) + result.append(query) + return result + + +class InsertQuery(Query): + compiler = "SQLInsertCompiler" + + def __init__(self, *args, ignore_conflicts=False, **kwargs): + super().__init__(*args, **kwargs) + self.fields = [] + self.objs = [] + self.ignore_conflicts = ignore_conflicts + + def insert_values(self, fields, objs, raw=False): + self.fields = fields + self.objs = objs + self.raw = raw + + +class AggregateQuery(Query): + """ + Take another query as a parameter to the FROM clause and only select the + elements in the provided list. + """ + + compiler = "SQLAggregateCompiler" + + def __init__(self, model, inner_query): + self.inner_query = inner_query + super().__init__(model) diff --git a/venv/Lib/site-packages/django/db/models/sql/where.py b/venv/Lib/site-packages/django/db/models/sql/where.py new file mode 100644 index 000000000..532780fd9 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/sql/where.py @@ -0,0 +1,278 @@ +""" +Code to manage the creation and SQL rendering of 'where' constraints. +""" + +from django.core.exceptions import EmptyResultSet +from django.utils import tree +from django.utils.functional import cached_property + +# Connection types +AND = "AND" +OR = "OR" + + +class WhereNode(tree.Node): + """ + An SQL WHERE clause. + + The class is tied to the Query class that created it (in order to create + the correct SQL). + + A child is usually an expression producing boolean values. Most likely the + expression is a Lookup instance. + + However, a child could also be any class with as_sql() and either + relabeled_clone() method or relabel_aliases() and clone() methods and + contains_aggregate attribute. + """ + + default = AND + resolved = False + conditional = True + + def split_having(self, negated=False): + """ + Return two possibly None nodes: one for those parts of self that + should be included in the WHERE clause and one for those parts of + self that must be included in the HAVING clause. + """ + if not self.contains_aggregate: + return self, None + in_negated = negated ^ self.negated + # If the effective connector is OR and this node contains an aggregate, + # then we need to push the whole branch to HAVING clause. + may_need_split = (in_negated and self.connector == AND) or ( + not in_negated and self.connector == OR + ) + if may_need_split and self.contains_aggregate: + return None, self + where_parts = [] + having_parts = [] + for c in self.children: + if hasattr(c, "split_having"): + where_part, having_part = c.split_having(in_negated) + if where_part is not None: + where_parts.append(where_part) + if having_part is not None: + having_parts.append(having_part) + elif c.contains_aggregate: + having_parts.append(c) + else: + where_parts.append(c) + having_node = ( + self.__class__(having_parts, self.connector, self.negated) + if having_parts + else None + ) + where_node = ( + self.__class__(where_parts, self.connector, self.negated) + if where_parts + else None + ) + return where_node, having_node + + def as_sql(self, compiler, connection): + """ + Return the SQL version of the where clause and the value to be + substituted in. Return '', [] if this node matches everything, + None, [] if this node is empty, and raise EmptyResultSet if this + node can't match anything. + """ + result = [] + result_params = [] + if self.connector == AND: + full_needed, empty_needed = len(self.children), 1 + else: + full_needed, empty_needed = 1, len(self.children) + + for child in self.children: + try: + sql, params = compiler.compile(child) + except EmptyResultSet: + empty_needed -= 1 + else: + if sql: + result.append(sql) + result_params.extend(params) + else: + full_needed -= 1 + # Check if this node matches nothing or everything. + # First check the amount of full nodes and empty nodes + # to make this node empty/full. + # Now, check if this node is full/empty using the + # counts. + if empty_needed == 0: + if self.negated: + return "", [] + else: + raise EmptyResultSet + if full_needed == 0: + if self.negated: + raise EmptyResultSet + else: + return "", [] + conn = " %s " % self.connector + sql_string = conn.join(result) + if sql_string: + if self.negated: + # Some backends (Oracle at least) need parentheses + # around the inner SQL in the negated case, even if the + # inner SQL contains just a single expression. + sql_string = "NOT (%s)" % sql_string + elif len(result) > 1 or self.resolved: + sql_string = "(%s)" % sql_string + return sql_string, result_params + + def get_group_by_cols(self, alias=None): + cols = [] + for child in self.children: + cols.extend(child.get_group_by_cols()) + return cols + + def get_source_expressions(self): + return self.children[:] + + def set_source_expressions(self, children): + assert len(children) == len(self.children) + self.children = children + + def relabel_aliases(self, change_map): + """ + Relabel the alias values of any children. 'change_map' is a dictionary + mapping old (current) alias values to the new values. + """ + for pos, child in enumerate(self.children): + if hasattr(child, "relabel_aliases"): + # For example another WhereNode + child.relabel_aliases(change_map) + elif hasattr(child, "relabeled_clone"): + self.children[pos] = child.relabeled_clone(change_map) + + def clone(self): + """ + Create a clone of the tree. Must only be called on root nodes (nodes + with empty subtree_parents). Childs must be either (Constraint, lookup, + value) tuples, or objects supporting .clone(). + """ + clone = self.__class__._new_instance( + children=None, + connector=self.connector, + negated=self.negated, + ) + for child in self.children: + if hasattr(child, "clone"): + clone.children.append(child.clone()) + else: + clone.children.append(child) + return clone + + def relabeled_clone(self, change_map): + clone = self.clone() + clone.relabel_aliases(change_map) + return clone + + def copy(self): + return self.clone() + + @classmethod + def _contains_aggregate(cls, obj): + if isinstance(obj, tree.Node): + return any(cls._contains_aggregate(c) for c in obj.children) + return obj.contains_aggregate + + @cached_property + def contains_aggregate(self): + return self._contains_aggregate(self) + + @classmethod + def _contains_over_clause(cls, obj): + if isinstance(obj, tree.Node): + return any(cls._contains_over_clause(c) for c in obj.children) + return obj.contains_over_clause + + @cached_property + def contains_over_clause(self): + return self._contains_over_clause(self) + + @staticmethod + def _resolve_leaf(expr, query, *args, **kwargs): + if hasattr(expr, "resolve_expression"): + expr = expr.resolve_expression(query, *args, **kwargs) + return expr + + @classmethod + def _resolve_node(cls, node, query, *args, **kwargs): + if hasattr(node, "children"): + for child in node.children: + cls._resolve_node(child, query, *args, **kwargs) + if hasattr(node, "lhs"): + node.lhs = cls._resolve_leaf(node.lhs, query, *args, **kwargs) + if hasattr(node, "rhs"): + node.rhs = cls._resolve_leaf(node.rhs, query, *args, **kwargs) + + def resolve_expression(self, *args, **kwargs): + clone = self.clone() + clone._resolve_node(clone, *args, **kwargs) + clone.resolved = True + return clone + + @cached_property + def output_field(self): + from django.db.models import BooleanField + + return BooleanField() + + def select_format(self, compiler, sql, params): + # Wrap filters with a CASE WHEN expression if a database backend + # (e.g. Oracle) doesn't support boolean expression in SELECT or GROUP + # BY list. + if not compiler.connection.features.supports_boolean_expr_in_select_clause: + sql = f"CASE WHEN {sql} THEN 1 ELSE 0 END" + return sql, params + + def get_db_converters(self, connection): + return self.output_field.get_db_converters(connection) + + def get_lookup(self, lookup): + return self.output_field.get_lookup(lookup) + + +class NothingNode: + """A node that matches nothing.""" + + contains_aggregate = False + + def as_sql(self, compiler=None, connection=None): + raise EmptyResultSet + + +class ExtraWhere: + # The contents are a black box - assume no aggregates are used. + contains_aggregate = False + + def __init__(self, sqls, params): + self.sqls = sqls + self.params = params + + def as_sql(self, compiler=None, connection=None): + sqls = ["(%s)" % sql for sql in self.sqls] + return " AND ".join(sqls), list(self.params or ()) + + +class SubqueryConstraint: + # Even if aggregates would be used in a subquery, the outer query isn't + # interested about those. + contains_aggregate = False + + def __init__(self, alias, columns, targets, query_object): + self.alias = alias + self.columns = columns + self.targets = targets + query_object.clear_ordering(clear_default=True) + self.query_object = query_object + + def as_sql(self, compiler, connection): + query = self.query_object + query.set_values(self.targets) + query_compiler = query.get_compiler(connection=connection) + return query_compiler.as_subquery_condition(self.alias, self.columns, compiler) diff --git a/venv/Lib/site-packages/django/db/models/utils.py b/venv/Lib/site-packages/django/db/models/utils.py new file mode 100644 index 000000000..7a167b129 --- /dev/null +++ b/venv/Lib/site-packages/django/db/models/utils.py @@ -0,0 +1,52 @@ +import functools +from collections import namedtuple + + +def make_model_tuple(model): + """ + Take a model or a string of the form "app_label.ModelName" and return a + corresponding ("app_label", "modelname") tuple. If a tuple is passed in, + assume it's a valid model tuple already and return it unchanged. + """ + try: + if isinstance(model, tuple): + model_tuple = model + elif isinstance(model, str): + app_label, model_name = model.split(".") + model_tuple = app_label, model_name.lower() + else: + model_tuple = model._meta.app_label, model._meta.model_name + assert len(model_tuple) == 2 + return model_tuple + except (ValueError, AssertionError): + raise ValueError( + "Invalid model reference '%s'. String model references " + "must be of the form 'app_label.ModelName'." % model + ) + + +def resolve_callables(mapping): + """ + Generate key/value pairs for the given mapping where the values are + evaluated if they're callable. + """ + for k, v in mapping.items(): + yield k, v() if callable(v) else v + + +def unpickle_named_row(names, values): + return create_namedtuple_class(*names)(*values) + + +@functools.lru_cache() +def create_namedtuple_class(*names): + # Cache type() with @lru_cache() since it's too slow to be called for every + # QuerySet evaluation. + def __reduce__(self): + return unpickle_named_row, (names, tuple(self)) + + return type( + "Row", + (namedtuple("Row", names),), + {"__reduce__": __reduce__, "__slots__": ()}, + ) diff --git a/venv/Lib/site-packages/django/db/transaction.py b/venv/Lib/site-packages/django/db/transaction.py new file mode 100644 index 000000000..5344f5da2 --- /dev/null +++ b/venv/Lib/site-packages/django/db/transaction.py @@ -0,0 +1,332 @@ +from contextlib import ContextDecorator, contextmanager + +from django.db import ( + DEFAULT_DB_ALIAS, + DatabaseError, + Error, + ProgrammingError, + connections, +) + + +class TransactionManagementError(ProgrammingError): + """Transaction management is used improperly.""" + + pass + + +def get_connection(using=None): + """ + Get a database connection by name, or the default database connection + if no name is provided. This is a private API. + """ + if using is None: + using = DEFAULT_DB_ALIAS + return connections[using] + + +def get_autocommit(using=None): + """Get the autocommit status of the connection.""" + return get_connection(using).get_autocommit() + + +def set_autocommit(autocommit, using=None): + """Set the autocommit status of the connection.""" + return get_connection(using).set_autocommit(autocommit) + + +def commit(using=None): + """Commit a transaction.""" + get_connection(using).commit() + + +def rollback(using=None): + """Roll back a transaction.""" + get_connection(using).rollback() + + +def savepoint(using=None): + """ + Create a savepoint (if supported and required by the backend) inside the + current transaction. Return an identifier for the savepoint that will be + used for the subsequent rollback or commit. + """ + return get_connection(using).savepoint() + + +def savepoint_rollback(sid, using=None): + """ + Roll back the most recent savepoint (if one exists). Do nothing if + savepoints are not supported. + """ + get_connection(using).savepoint_rollback(sid) + + +def savepoint_commit(sid, using=None): + """ + Commit the most recent savepoint (if one exists). Do nothing if + savepoints are not supported. + """ + get_connection(using).savepoint_commit(sid) + + +def clean_savepoints(using=None): + """ + Reset the counter used to generate unique savepoint ids in this thread. + """ + get_connection(using).clean_savepoints() + + +def get_rollback(using=None): + """Get the "needs rollback" flag -- for *advanced use* only.""" + return get_connection(using).get_rollback() + + +def set_rollback(rollback, using=None): + """ + Set or unset the "needs rollback" flag -- for *advanced use* only. + + When `rollback` is `True`, trigger a rollback when exiting the innermost + enclosing atomic block that has `savepoint=True` (that's the default). Use + this to force a rollback without raising an exception. + + When `rollback` is `False`, prevent such a rollback. Use this only after + rolling back to a known-good state! Otherwise, you break the atomic block + and data corruption may occur. + """ + return get_connection(using).set_rollback(rollback) + + +@contextmanager +def mark_for_rollback_on_error(using=None): + """ + Internal low-level utility to mark a transaction as "needs rollback" when + an exception is raised while not enforcing the enclosed block to be in a + transaction. This is needed by Model.save() and friends to avoid starting a + transaction when in autocommit mode and a single query is executed. + + It's equivalent to: + + connection = get_connection(using) + if connection.get_autocommit(): + yield + else: + with transaction.atomic(using=using, savepoint=False): + yield + + but it uses low-level utilities to avoid performance overhead. + """ + try: + yield + except Exception: + connection = get_connection(using) + if connection.in_atomic_block: + connection.needs_rollback = True + raise + + +def on_commit(func, using=None): + """ + Register `func` to be called when the current transaction is committed. + If the current transaction is rolled back, `func` will not be called. + """ + get_connection(using).on_commit(func) + + +################################# +# Decorators / context managers # +################################# + + +class Atomic(ContextDecorator): + """ + Guarantee the atomic execution of a given block. + + An instance can be used either as a decorator or as a context manager. + + When it's used as a decorator, __call__ wraps the execution of the + decorated function in the instance itself, used as a context manager. + + When it's used as a context manager, __enter__ creates a transaction or a + savepoint, depending on whether a transaction is already in progress, and + __exit__ commits the transaction or releases the savepoint on normal exit, + and rolls back the transaction or to the savepoint on exceptions. + + It's possible to disable the creation of savepoints if the goal is to + ensure that some code runs within a transaction without creating overhead. + + A stack of savepoints identifiers is maintained as an attribute of the + connection. None denotes the absence of a savepoint. + + This allows reentrancy even if the same AtomicWrapper is reused. For + example, it's possible to define `oa = atomic('other')` and use `@oa` or + `with oa:` multiple times. + + Since database connections are thread-local, this is thread-safe. + + An atomic block can be tagged as durable. In this case, raise a + RuntimeError if it's nested within another atomic block. This guarantees + that database changes in a durable block are committed to the database when + the block exists without error. + + This is a private API. + """ + + # This private flag is provided only to disable the durability checks in + # TestCase. + _ensure_durability = True + + def __init__(self, using, savepoint, durable): + self.using = using + self.savepoint = savepoint + self.durable = durable + + def __enter__(self): + connection = get_connection(self.using) + + if self.durable and self._ensure_durability and connection.in_atomic_block: + raise RuntimeError( + "A durable atomic block cannot be nested within another " + "atomic block." + ) + if not connection.in_atomic_block: + # Reset state when entering an outermost atomic block. + connection.commit_on_exit = True + connection.needs_rollback = False + if not connection.get_autocommit(): + # Pretend we're already in an atomic block to bypass the code + # that disables autocommit to enter a transaction, and make a + # note to deal with this case in __exit__. + connection.in_atomic_block = True + connection.commit_on_exit = False + + if connection.in_atomic_block: + # We're already in a transaction; create a savepoint, unless we + # were told not to or we're already waiting for a rollback. The + # second condition avoids creating useless savepoints and prevents + # overwriting needs_rollback until the rollback is performed. + if self.savepoint and not connection.needs_rollback: + sid = connection.savepoint() + connection.savepoint_ids.append(sid) + else: + connection.savepoint_ids.append(None) + else: + connection.set_autocommit( + False, force_begin_transaction_with_broken_autocommit=True + ) + connection.in_atomic_block = True + + def __exit__(self, exc_type, exc_value, traceback): + connection = get_connection(self.using) + + if connection.savepoint_ids: + sid = connection.savepoint_ids.pop() + else: + # Prematurely unset this flag to allow using commit or rollback. + connection.in_atomic_block = False + + try: + if connection.closed_in_transaction: + # The database will perform a rollback by itself. + # Wait until we exit the outermost block. + pass + + elif exc_type is None and not connection.needs_rollback: + if connection.in_atomic_block: + # Release savepoint if there is one + if sid is not None: + try: + connection.savepoint_commit(sid) + except DatabaseError: + try: + connection.savepoint_rollback(sid) + # The savepoint won't be reused. Release it to + # minimize overhead for the database server. + connection.savepoint_commit(sid) + except Error: + # If rolling back to a savepoint fails, mark for + # rollback at a higher level and avoid shadowing + # the original exception. + connection.needs_rollback = True + raise + else: + # Commit transaction + try: + connection.commit() + except DatabaseError: + try: + connection.rollback() + except Error: + # An error during rollback means that something + # went wrong with the connection. Drop it. + connection.close() + raise + else: + # This flag will be set to True again if there isn't a savepoint + # allowing to perform the rollback at this level. + connection.needs_rollback = False + if connection.in_atomic_block: + # Roll back to savepoint if there is one, mark for rollback + # otherwise. + if sid is None: + connection.needs_rollback = True + else: + try: + connection.savepoint_rollback(sid) + # The savepoint won't be reused. Release it to + # minimize overhead for the database server. + connection.savepoint_commit(sid) + except Error: + # If rolling back to a savepoint fails, mark for + # rollback at a higher level and avoid shadowing + # the original exception. + connection.needs_rollback = True + else: + # Roll back transaction + try: + connection.rollback() + except Error: + # An error during rollback means that something + # went wrong with the connection. Drop it. + connection.close() + + finally: + # Outermost block exit when autocommit was enabled. + if not connection.in_atomic_block: + if connection.closed_in_transaction: + connection.connection = None + else: + connection.set_autocommit(True) + # Outermost block exit when autocommit was disabled. + elif not connection.savepoint_ids and not connection.commit_on_exit: + if connection.closed_in_transaction: + connection.connection = None + else: + connection.in_atomic_block = False + + +def atomic(using=None, savepoint=True, durable=False): + # Bare decorator: @atomic -- although the first argument is called + # `using`, it's actually the function being decorated. + if callable(using): + return Atomic(DEFAULT_DB_ALIAS, savepoint, durable)(using) + # Decorator: @atomic(...) or context manager: with atomic(...): ... + else: + return Atomic(using, savepoint, durable) + + +def _non_atomic_requests(view, using): + try: + view._non_atomic_requests.add(using) + except AttributeError: + view._non_atomic_requests = {using} + return view + + +def non_atomic_requests(using=None): + if callable(using): + return _non_atomic_requests(using, DEFAULT_DB_ALIAS) + else: + if using is None: + using = DEFAULT_DB_ALIAS + return lambda view: _non_atomic_requests(view, using) diff --git a/venv/Lib/site-packages/django/db/utils.py b/venv/Lib/site-packages/django/db/utils.py new file mode 100644 index 000000000..282aa4059 --- /dev/null +++ b/venv/Lib/site-packages/django/db/utils.py @@ -0,0 +1,301 @@ +import pkgutil +from importlib import import_module + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured + +# For backwards compatibility with Django < 3.2 +from django.utils.connection import ConnectionDoesNotExist # NOQA: F401 +from django.utils.connection import BaseConnectionHandler +from django.utils.functional import cached_property +from django.utils.module_loading import import_string + +DEFAULT_DB_ALIAS = "default" +DJANGO_VERSION_PICKLE_KEY = "_django_version" + + +class Error(Exception): + pass + + +class InterfaceError(Error): + pass + + +class DatabaseError(Error): + pass + + +class DataError(DatabaseError): + pass + + +class OperationalError(DatabaseError): + pass + + +class IntegrityError(DatabaseError): + pass + + +class InternalError(DatabaseError): + pass + + +class ProgrammingError(DatabaseError): + pass + + +class NotSupportedError(DatabaseError): + pass + + +class DatabaseErrorWrapper: + """ + Context manager and decorator that reraises backend-specific database + exceptions using Django's common wrappers. + """ + + def __init__(self, wrapper): + """ + wrapper is a database wrapper. + + It must have a Database attribute defining PEP-249 exceptions. + """ + self.wrapper = wrapper + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type is None: + return + for dj_exc_type in ( + DataError, + OperationalError, + IntegrityError, + InternalError, + ProgrammingError, + NotSupportedError, + DatabaseError, + InterfaceError, + Error, + ): + db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__) + if issubclass(exc_type, db_exc_type): + dj_exc_value = dj_exc_type(*exc_value.args) + # Only set the 'errors_occurred' flag for errors that may make + # the connection unusable. + if dj_exc_type not in (DataError, IntegrityError): + self.wrapper.errors_occurred = True + raise dj_exc_value.with_traceback(traceback) from exc_value + + def __call__(self, func): + # Note that we are intentionally not using @wraps here for performance + # reasons. Refs #21109. + def inner(*args, **kwargs): + with self: + return func(*args, **kwargs) + + return inner + + +def load_backend(backend_name): + """ + Return a database backend's "base" module given a fully qualified database + backend name, or raise an error if it doesn't exist. + """ + # This backend was renamed in Django 1.9. + if backend_name == "django.db.backends.postgresql_psycopg2": + backend_name = "django.db.backends.postgresql" + + try: + return import_module("%s.base" % backend_name) + except ImportError as e_user: + # The database backend wasn't found. Display a helpful error message + # listing all built-in database backends. + import django.db.backends + + builtin_backends = [ + name + for _, name, ispkg in pkgutil.iter_modules(django.db.backends.__path__) + if ispkg and name not in {"base", "dummy"} + ] + if backend_name not in ["django.db.backends.%s" % b for b in builtin_backends]: + backend_reprs = map(repr, sorted(builtin_backends)) + raise ImproperlyConfigured( + "%r isn't an available database backend or couldn't be " + "imported. Check the above exception. To use one of the " + "built-in backends, use 'django.db.backends.XXX', where XXX " + "is one of:\n" + " %s" % (backend_name, ", ".join(backend_reprs)) + ) from e_user + else: + # If there's some other error, this must be an error in Django + raise + + +class ConnectionHandler(BaseConnectionHandler): + settings_name = "DATABASES" + # Connections needs to still be an actual thread local, as it's truly + # thread-critical. Database backends should use @async_unsafe to protect + # their code from async contexts, but this will give those contexts + # separate connections in case it's needed as well. There's no cleanup + # after async contexts, though, so we don't allow that if we can help it. + thread_critical = True + + def configure_settings(self, databases): + databases = super().configure_settings(databases) + if databases == {}: + databases[DEFAULT_DB_ALIAS] = {"ENGINE": "django.db.backends.dummy"} + elif DEFAULT_DB_ALIAS not in databases: + raise ImproperlyConfigured( + f"You must define a '{DEFAULT_DB_ALIAS}' database." + ) + elif databases[DEFAULT_DB_ALIAS] == {}: + databases[DEFAULT_DB_ALIAS]["ENGINE"] = "django.db.backends.dummy" + return databases + + @property + def databases(self): + return self.settings + + def ensure_defaults(self, alias): + """ + Put the defaults into the settings dictionary for a given connection + where no settings is provided. + """ + try: + conn = self.databases[alias] + except KeyError: + raise self.exception_class(f"The connection '{alias}' doesn't exist.") + + conn.setdefault("ATOMIC_REQUESTS", False) + conn.setdefault("AUTOCOMMIT", True) + conn.setdefault("ENGINE", "django.db.backends.dummy") + if conn["ENGINE"] == "django.db.backends." or not conn["ENGINE"]: + conn["ENGINE"] = "django.db.backends.dummy" + conn.setdefault("CONN_MAX_AGE", 0) + conn.setdefault("OPTIONS", {}) + conn.setdefault("TIME_ZONE", None) + for setting in ["NAME", "USER", "PASSWORD", "HOST", "PORT"]: + conn.setdefault(setting, "") + + def prepare_test_settings(self, alias): + """ + Make sure the test settings are available in the 'TEST' sub-dictionary. + """ + try: + conn = self.databases[alias] + except KeyError: + raise self.exception_class(f"The connection '{alias}' doesn't exist.") + + test_settings = conn.setdefault("TEST", {}) + default_test_settings = [ + ("CHARSET", None), + ("COLLATION", None), + ("MIGRATE", True), + ("MIRROR", None), + ("NAME", None), + ] + for key, value in default_test_settings: + test_settings.setdefault(key, value) + + def create_connection(self, alias): + self.ensure_defaults(alias) + self.prepare_test_settings(alias) + db = self.databases[alias] + backend = load_backend(db["ENGINE"]) + return backend.DatabaseWrapper(db, alias) + + def close_all(self): + for alias in self: + try: + connection = getattr(self._connections, alias) + except AttributeError: + continue + connection.close() + + +class ConnectionRouter: + def __init__(self, routers=None): + """ + If routers is not specified, default to settings.DATABASE_ROUTERS. + """ + self._routers = routers + + @cached_property + def routers(self): + if self._routers is None: + self._routers = settings.DATABASE_ROUTERS + routers = [] + for r in self._routers: + if isinstance(r, str): + router = import_string(r)() + else: + router = r + routers.append(router) + return routers + + def _router_func(action): + def _route_db(self, model, **hints): + chosen_db = None + for router in self.routers: + try: + method = getattr(router, action) + except AttributeError: + # If the router doesn't have a method, skip to the next one. + pass + else: + chosen_db = method(model, **hints) + if chosen_db: + return chosen_db + instance = hints.get("instance") + if instance is not None and instance._state.db: + return instance._state.db + return DEFAULT_DB_ALIAS + + return _route_db + + db_for_read = _router_func("db_for_read") + db_for_write = _router_func("db_for_write") + + def allow_relation(self, obj1, obj2, **hints): + for router in self.routers: + try: + method = router.allow_relation + except AttributeError: + # If the router doesn't have a method, skip to the next one. + pass + else: + allow = method(obj1, obj2, **hints) + if allow is not None: + return allow + return obj1._state.db == obj2._state.db + + def allow_migrate(self, db, app_label, **hints): + for router in self.routers: + try: + method = router.allow_migrate + except AttributeError: + # If the router doesn't have a method, skip to the next one. + continue + + allow = method(db, app_label, **hints) + + if allow is not None: + return allow + return True + + def allow_migrate_model(self, db, model): + return self.allow_migrate( + db, + model._meta.app_label, + model_name=model._meta.model_name, + model=model, + ) + + def get_migratable_models(self, app_config, db, include_auto_created=False): + """Return app models allowed to be migrated on provided db.""" + models = app_config.get_models(include_auto_created=include_auto_created) + return [model for model in models if self.allow_migrate_model(db, model)] diff --git a/venv/Lib/site-packages/django/dispatch/__init__.py b/venv/Lib/site-packages/django/dispatch/__init__.py new file mode 100644 index 000000000..a615f9905 --- /dev/null +++ b/venv/Lib/site-packages/django/dispatch/__init__.py @@ -0,0 +1,9 @@ +"""Multi-consumer multi-producer dispatching mechanism + +Originally based on pydispatch (BSD) https://pypi.org/project/PyDispatcher/2.0.1/ +See license.txt for original license. + +Heavily modified for Django's purposes. +""" + +from django.dispatch.dispatcher import Signal, receiver # NOQA diff --git a/venv/Lib/site-packages/django/dispatch/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/dispatch/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51523c6d91f17c6b695a1689ae9d2c9f35cc5755 GIT binary patch literal 496 zcmYjOJ#X7E5T#|eH3WF;P;@A`H6AP_8H1uIS|jz)e4s`bgNQB?rV2Pw)=*P}=k=C4Z*`+0)ksbTwL(+!8q`V}q&iK{JeFu= zRkeI62{gBcyLMO1_dd_3W4;Q((NUhe)?sFSna8fzphAA$P9NKX&kwWx>>y9)0K7s4 zh9C>S0>84J+eekBi!_~qTw_$Nt;Q>i!d>0;TAI?nC+-^WECFTdO?1u1$>!x8%Q)v| z=s^Ll!Jm!?n^#4lttyJeTfKdm?FN5J!2522z8~Qa^Dnx*gS*QwN8$&8C-J=@l45FA zT$>3bzG9d)OL2^z!sPtHsaS(qi*L9TgaIZ_s-Ln15)ZQZPBt$JG#H8^bM0pMA$n^n P_!xhc(ICQry&m2J20EO0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/dispatch/__pycache__/dispatcher.cpython-310.pyc b/venv/Lib/site-packages/django/dispatch/__pycache__/dispatcher.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58b9a69776566a3cc1e59e53601f776ac52eb422 GIT binary patch literal 8614 zcmd5>+ix7#d7m>gJ3G5vUL;bIEi1^xiEXY!uhRytYgHC3i+<(XdTk=82nvd4~C%jT6MtyO(j^DM9YNb|}^dTYkB zy$br&JhraYtG~n?TC>iQ#qJ>JwB1gJ_aoWfJ#fXA9L{??Zm<SDQDlZhR=YkQ;XgQo0+fVP~+%gGg??>qqYmHaBkh zLPoEBSA;vf6Ky=?!NZOB{ml*ONBp(E+u3!uxZFtJ>h=7siW4px{X^)m=kD^h@6k3% z3r&?RF`Egx?%i{29c&!Fc8?;?8Eyb@OLg~VF-w*t2}{BhO6 z?;Tfir_*z#bh@E%++NR->bb0{=eL813v_pAjs49*#O2lW35^!K!~KU?Pt}+1(C-Ju z{at?OEc;&Fx#}EncUSQ4az3Q)jMSi89UX6;|LB|!WfZ@UlPwrU8=HTkKc+Jyh8eWY zn2B>y>BM@h1l~^c{Y<>USbP3|w)TT$DWUxM&v=)hM3K zw>^j*->&P4NoFb*@Pf)P)24z;GGRaPqjuZDl_Z<7%qp|kd8^8X^Xc9-@;=Rbof3NF zKeBN;$fzWc4LAYj+8!H~m=>3Iba4f(A+AJN!6PP@A^`u0{RN9Gb$ul&dnR4Srg$kf zBRd8NyZT>hfsJ#F7~hEv@j+DCsg5vmRE}n1=9K{5Rdr^mv&v45p6<+!%CV9^Vo~K} zE-nMy^N)3Cr0pzx_A>oHIrms&T6F$Xt;>|L+jzFP3cy3lT{=HmI@V(7@|dY{7fvqH zi2IsXF*Q>=G8oR*wcpd^4-U|S{{9pP-K$sKe=-3=vP}Bj41)mRE^O3^LMPogg@Dxh z8)F;4A+}PEn6P`2lkajNm~PVVhC}2;M&S^m0>=+zcL4H(PO3zJ9NZZtLjsTWAC zN57@)Goo@kc3>sZHjJb13Kv*`wz%lJJ(*juj6@i0VMQ~O zm1_Po0s#`dqjzdqCN1pDkQ;!hhqd*)KBlG7>TLplf53Z(`Ljb9DwK=-&YLUs>lm*;7m|B5+c=g$ReiNXbYd>L0wHJoFgFfAu zaEg^{TRh+&_r>)+k`Fr9^iM8p!>?ujFk_R(H8^aT%k@UlzgfS87$^-x(W@&iVQi~P zr~cMJa4#vXuD$c&yNR8zPExsd*yn3PghEg#l2ku(dxPu-`D1a8?iw&cL5d_*iUjT` zYFCSs*j*nHlRxCi0-XL{_>dRAU(C~p3++yiyW&(>kQhL;s8I*Y?e`H&h()?6sm^s< zT%apE_dAJ|@>0tryeG9u^Hy&uzK;H_`MiHSg;~0)v_nG08|7^6UdJ6t5m)VNHN!@{ zYU?`FnfcT-=h%X7>J~HE5?Tw-=J3>J&#?toV=w-CI5)iw9a@(BN0U%YaubLATQrCq zDzSlJU&R(96R`z6J7SCCj)!;!KA(N|x{3`D`5`ti5VL4IC5i}EwFegvS>P(Rp4VVv z<&ll3!raxx8=kJl;>lYW6|nsm(a$<5XVHR@M+-56VMGh>O-2iJuWq^}?0NygRbOTc zQ~)Yv-!BUpa`!vIQ?5ukX@wk3E-~Psnaq=s`GK;)6=M%lXrZ_RoRM0Smuir2xZ@6@ zaL)xP5w%Q^-tQc_q;qfi64VRLa?2qm9BU0frdSG!!#DY7nJ?E%d2$e+?DG!M>S;dy z61OUNp+vUMQ!0#uGYWVn=POn$kA%pn4HS##98UZmlA{@~^YjZAGH%^#0(A=V1Y7Y6 z8juxITAmm^9w@9TjEYzBs9sSB72l-3E7ZJ3%~#MUbY{Cwl;a~$_*h(~$1hMr0GXh> z>Ug#H@kD+Djk%b@kf3><00=nJp?_X8tN&?M7XHJm49{gi9FISfT@f}F7Uyt6DfbDB z*<+w;T@%mY79}T}Vc0{~(nD%jFqf?B>FcRCJEia}Vp4R6-2_Mm{~BT>QRf^RE@c`` zb(m6$JO?Q?L!%`w~2#0**_ea8s+BV(Y6*)8~uPqk0kr+U|*wC0h0%uY;tPH6(A zeePE$fx8a=%%bWkz`~FKlW|B`SovfeP2nn{s{#PR^(99<891E$f{KXJQ>QP&zPp7a zQ#zX{5Wud4^5$f>D}^ZmPcU-Sr#JdI<0T3Id-{N}ob|6_S#kxeDV9 z`ydQnQL%5z7-{gEDFd`ARVShLn^@pW;Fn=8Ly1)NfQGY{My_rS=uQ@>=5gu-^AP$1 zgm7N50689;ba$L8WMOm8Z++Au(#WfL?+K}Qc{C7#<2qz%3d4gw)~fHKXybgZs4T2t z(J11UyuRWz8V%>cI9!^FS;$1mkjcv`j8U=S!Q2RdKsw8g*)gJ(pXtZi-?5({_57*6 zPvr&ui4NDR)+9xFfdwGsd5BU3@We<;Y6VV%MmgQ;HF||kxYxh__cS?)uryu2_|$qj z{Avan+J%XTrWjE#jfp2QP~A#u%@5jl*KV%e{%Gy)y7&VKs~Z#ZUL~cJmT%IT(f|dB z!226qN-9E_i~7?!UH<~UUbl7Yi{Z?K4pV3?qc?Qe^FvJv}yeY!nVG z&-g3UGGgPT5}UD=mH_S}z4y$K^+RiaDgA%I4)Q*ww9o!hY+%1Eck_S83r>e>mxNpe z{z;zrKf~5dPz&V*Af2fs&{+;bu}6O0fww(_rU^fprO|n4ft2_#93VxH(uCu{4I)Q| zRDn<&6rPb4b~*!5pMcx{I}jHt{}1%+EN3By3W(A?d9axlIVUo;wU4P-jWP{rLZs9} zL4n%jacYM$LK-Saq{6B~q_{cfr!lpNH-LuWYbtSo$@F@(&M!$wawfpk7U3q!0Lyh} z`6XGW#EpO4LB+2dW+_p13~q4^62)885T=t#p>bmM!mTYXl9JLkskPht*k>Xf)V}NJ zTrZy@04j8*tSA*hQ6iCECkBL^4nby!A2MbC0rDh8IObAL6O`(OnTBw+8c>e4=PjN4$t;D}76rt+B;*oQzjEip*p7Dt8DBq64E~?_|8Xa}Bd231z z$)FPGIu6-Dqd0sKrAA^I?Rk`r@g+eQi|N%7N}>Ya{P-FNRmXY_=&PCy{ih4fqvKkag*56P9Sg|u| zz8;wf!j>oqi*;H;v4Q8M&)!rSnx!(dGG%ci1GGr*m7>b7F5iet zv4K48TCAT`V~eV}`*rlz#GP1|@2MOQn{!PIN-;@M=cw|sJZ}qZWNr5+vo_3Ej&;m- zd1RsbY(=%5S#0=iXyigAcK!k~9p zXmxs?BAlwvrC$-0$xt9OK^jHUlIAd~vQTb*&|GWZUR5L^ZqooNXNW&Rla(0KsD^sC zDrqE$VoYl$UxoAn-`VI}2bF0k-)WskHrS?@948E?C`EDDzoM_Cc*HE%P&=>jdKgt26|G{K`j?^8=uZkrmUN2p`e#4E;3>v3elVQ zfGb+CJf)#GIIS&l(m8O0N@S|#;iY`mQx%;$yHz)u$P|rcvzca4v-A-s<>I8;Zl{$} z@G?OyDYx5R*um9Bnv@tze484|e8hEX-lc|eO|@cz6q!&?Q2~W;g2FHoBB`-8lT|C# z`RY5>Z`g+Y75kfZb?z0_XNoTk^reFa%kyX`r|JUIlu;4Tu|S6VL%g`My&EV3cS7Mt zs72HF!7RKW`^@b@p+ctL3>(ge6u)mCA}B{DgI@4{aGy$6+Q(Ujm^^^bhSe1uU`x~A z5hyLsCcHZF@#XD&=4GTyQCqqXQ65gs@vS?DcS4W%>IHC6!_Kn6!Z4T9zAH{q)Vx}B zCtM+A7#A4ElYMVuHg$@5P@{hE+srM0r^!i)sZGnBoJv$yv1t*K|c(KKZNw^m|UJW}aX_vvnGtES=reCb3!l9VD!sFYDs8Gt@xB}`JjlU9Gl zA7Sp)7F7~aMFlgnjygewID;w^OUyLRKLu2;a$6iLLiu!n5Di%Vy&gD&^w6yo@~IIqw*A`McfK_`+XHNi5t|P zI6=IRCb6=*sEV@)7HWcLAuh46rC7cWeKbkc5?dqks_9i7ptCGv&d`3O{is&{Z$sy# A=Kufz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/dispatch/dispatcher.py b/venv/Lib/site-packages/django/dispatch/dispatcher.py new file mode 100644 index 000000000..86eb1c3b2 --- /dev/null +++ b/venv/Lib/site-packages/django/dispatch/dispatcher.py @@ -0,0 +1,305 @@ +import logging +import threading +import weakref + +from django.utils.inspect import func_accepts_kwargs + +logger = logging.getLogger("django.dispatch") + + +def _make_id(target): + if hasattr(target, "__func__"): + return (id(target.__self__), id(target.__func__)) + return id(target) + + +NONE_ID = _make_id(None) + +# A marker for caching +NO_RECEIVERS = object() + + +class Signal: + """ + Base class for all signals + + Internal attributes: + + receivers + { receiverkey (id) : weakref(receiver) } + """ + + def __init__(self, use_caching=False): + """ + Create a new signal. + """ + self.receivers = [] + self.lock = threading.Lock() + self.use_caching = use_caching + # For convenience we create empty caches even if they are not used. + # A note about caching: if use_caching is defined, then for each + # distinct sender we cache the receivers that sender has in + # 'sender_receivers_cache'. The cache is cleaned when .connect() or + # .disconnect() is called and populated on send(). + self.sender_receivers_cache = weakref.WeakKeyDictionary() if use_caching else {} + self._dead_receivers = False + + def connect(self, receiver, sender=None, weak=True, dispatch_uid=None): + """ + Connect receiver to sender for signal. + + Arguments: + + receiver + A function or an instance method which is to receive signals. + Receivers must be hashable objects. + + If weak is True, then receiver must be weak referenceable. + + Receivers must be able to accept keyword arguments. + + If a receiver is connected with a dispatch_uid argument, it + will not be added if another receiver was already connected + with that dispatch_uid. + + sender + The sender to which the receiver should respond. Must either be + a Python object, or None to receive events from any sender. + + weak + Whether to use weak references to the receiver. By default, the + module will attempt to use weak references to the receiver + objects. If this parameter is false, then strong references will + be used. + + dispatch_uid + An identifier used to uniquely identify a particular instance of + a receiver. This will usually be a string, though it may be + anything hashable. + """ + from django.conf import settings + + # If DEBUG is on, check that we got a good receiver + if settings.configured and settings.DEBUG: + if not callable(receiver): + raise TypeError("Signal receivers must be callable.") + # Check for **kwargs + if not func_accepts_kwargs(receiver): + raise ValueError( + "Signal receivers must accept keyword arguments (**kwargs)." + ) + + if dispatch_uid: + lookup_key = (dispatch_uid, _make_id(sender)) + else: + lookup_key = (_make_id(receiver), _make_id(sender)) + + if weak: + ref = weakref.ref + receiver_object = receiver + # Check for bound methods + if hasattr(receiver, "__self__") and hasattr(receiver, "__func__"): + ref = weakref.WeakMethod + receiver_object = receiver.__self__ + receiver = ref(receiver) + weakref.finalize(receiver_object, self._remove_receiver) + + with self.lock: + self._clear_dead_receivers() + if not any(r_key == lookup_key for r_key, _ in self.receivers): + self.receivers.append((lookup_key, receiver)) + self.sender_receivers_cache.clear() + + def disconnect(self, receiver=None, sender=None, dispatch_uid=None): + """ + Disconnect receiver from sender for signal. + + If weak references are used, disconnect need not be called. The receiver + will be removed from dispatch automatically. + + Arguments: + + receiver + The registered receiver to disconnect. May be none if + dispatch_uid is specified. + + sender + The registered sender to disconnect + + dispatch_uid + the unique identifier of the receiver to disconnect + """ + if dispatch_uid: + lookup_key = (dispatch_uid, _make_id(sender)) + else: + lookup_key = (_make_id(receiver), _make_id(sender)) + + disconnected = False + with self.lock: + self._clear_dead_receivers() + for index in range(len(self.receivers)): + (r_key, _) = self.receivers[index] + if r_key == lookup_key: + disconnected = True + del self.receivers[index] + break + self.sender_receivers_cache.clear() + return disconnected + + def has_listeners(self, sender=None): + return bool(self._live_receivers(sender)) + + def send(self, sender, **named): + """ + Send signal from sender to all connected receivers. + + If any receiver raises an error, the error propagates back through send, + terminating the dispatch loop. So it's possible that all receivers + won't be called if an error is raised. + + Arguments: + + sender + The sender of the signal. Either a specific object or None. + + named + Named arguments which will be passed to receivers. + + Return a list of tuple pairs [(receiver, response), ... ]. + """ + if ( + not self.receivers + or self.sender_receivers_cache.get(sender) is NO_RECEIVERS + ): + return [] + + return [ + (receiver, receiver(signal=self, sender=sender, **named)) + for receiver in self._live_receivers(sender) + ] + + def send_robust(self, sender, **named): + """ + Send signal from sender to all connected receivers catching errors. + + Arguments: + + sender + The sender of the signal. Can be any Python object (normally one + registered with a connect if you actually want something to + occur). + + named + Named arguments which will be passed to receivers. + + Return a list of tuple pairs [(receiver, response), ... ]. + + If any receiver raises an error (specifically any subclass of + Exception), return the error instance as the result for that receiver. + """ + if ( + not self.receivers + or self.sender_receivers_cache.get(sender) is NO_RECEIVERS + ): + return [] + + # Call each receiver with whatever arguments it can accept. + # Return a list of tuple pairs [(receiver, response), ... ]. + responses = [] + for receiver in self._live_receivers(sender): + try: + response = receiver(signal=self, sender=sender, **named) + except Exception as err: + logger.error( + "Error calling %s in Signal.send_robust() (%s)", + receiver.__qualname__, + err, + exc_info=err, + ) + responses.append((receiver, err)) + else: + responses.append((receiver, response)) + return responses + + def _clear_dead_receivers(self): + # Note: caller is assumed to hold self.lock. + if self._dead_receivers: + self._dead_receivers = False + self.receivers = [ + r + for r in self.receivers + if not (isinstance(r[1], weakref.ReferenceType) and r[1]() is None) + ] + + def _live_receivers(self, sender): + """ + Filter sequence of receivers to get resolved, live receivers. + + This checks for weak references and resolves them, then returning only + live receivers. + """ + receivers = None + if self.use_caching and not self._dead_receivers: + receivers = self.sender_receivers_cache.get(sender) + # We could end up here with NO_RECEIVERS even if we do check this case in + # .send() prior to calling _live_receivers() due to concurrent .send() call. + if receivers is NO_RECEIVERS: + return [] + if receivers is None: + with self.lock: + self._clear_dead_receivers() + senderkey = _make_id(sender) + receivers = [] + for (receiverkey, r_senderkey), receiver in self.receivers: + if r_senderkey == NONE_ID or r_senderkey == senderkey: + receivers.append(receiver) + if self.use_caching: + if not receivers: + self.sender_receivers_cache[sender] = NO_RECEIVERS + else: + # Note, we must cache the weakref versions. + self.sender_receivers_cache[sender] = receivers + non_weak_receivers = [] + for receiver in receivers: + if isinstance(receiver, weakref.ReferenceType): + # Dereference the weak reference. + receiver = receiver() + if receiver is not None: + non_weak_receivers.append(receiver) + else: + non_weak_receivers.append(receiver) + return non_weak_receivers + + def _remove_receiver(self, receiver=None): + # Mark that the self.receivers list has dead weakrefs. If so, we will + # clean those up in connect, disconnect and _live_receivers while + # holding self.lock. Note that doing the cleanup here isn't a good + # idea, _remove_receiver() will be called as side effect of garbage + # collection, and so the call can happen while we are already holding + # self.lock. + self._dead_receivers = True + + +def receiver(signal, **kwargs): + """ + A decorator for connecting receivers to signals. Used by passing in the + signal (or list of signals) and keyword arguments to connect:: + + @receiver(post_save, sender=MyModel) + def signal_receiver(sender, **kwargs): + ... + + @receiver([post_save, post_delete], sender=MyModel) + def signals_receiver(sender, **kwargs): + ... + """ + + def _decorator(func): + if isinstance(signal, (list, tuple)): + for s in signal: + s.connect(func, **kwargs) + else: + signal.connect(func, **kwargs) + return func + + return _decorator diff --git a/venv/Lib/site-packages/django/dispatch/license.txt b/venv/Lib/site-packages/django/dispatch/license.txt new file mode 100644 index 000000000..505090dff --- /dev/null +++ b/venv/Lib/site-packages/django/dispatch/license.txt @@ -0,0 +1,36 @@ +django.dispatch was originally forked from PyDispatcher. + +PyDispatcher License: + + Copyright (c) 2001-2003, Patrick K. O'Brien and Contributors + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + The name of Patrick K. O'Brien, or the name of any Contributor, + may not be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/venv/Lib/site-packages/django/forms/__init__.py b/venv/Lib/site-packages/django/forms/__init__.py new file mode 100644 index 000000000..1c319219a --- /dev/null +++ b/venv/Lib/site-packages/django/forms/__init__.py @@ -0,0 +1,11 @@ +""" +Django validation and HTML form handling. +""" + +from django.core.exceptions import ValidationError # NOQA +from django.forms.boundfield import * # NOQA +from django.forms.fields import * # NOQA +from django.forms.forms import * # NOQA +from django.forms.formsets import * # NOQA +from django.forms.models import * # NOQA +from django.forms.widgets import * # NOQA diff --git a/venv/Lib/site-packages/django/forms/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69dd228abaecd310fd735bb818e8f57f78e90d51 GIT binary patch literal 505 zcmZWmyH3L}6t&xwmZ}wq=bE*kraM9ii2@x8LQohigO$W?FeG+lJLU05{8A+*CVqf{ z2`3GR!nJ&l@40VTw%bi$<>TfxNFe}kx$#>n*4VdK_pPD;0Saj)hDilgVE(Sg)zJ){ z5^E(clvppZVbQq&o!awuvw!D{NV*e0=F~S_3fC9Z9gI$f?pUhCy|re{MdUT#ZClWR z)1|AQ*h8hHvJ~7p?JQ2~gisk0f;MPT)C;9z9(xQ~nitk8-vDiv&b+$z0+|Uq<}9XY zb!yBq??+7IS({$5RF4oYxFN(#pQepn XJ4qI^J^Q6VFI(k+meYXWrv<+NGHsTT literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/forms/__pycache__/boundfield.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/boundfield.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4252df79a92c56421802929f7a94d63fb052d19a GIT binary patch literal 10333 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 MpJ_icsw?{c05GAZ_y7O^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/forms/__pycache__/fields.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/fields.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69fe5cd99881c5d1280096d8829a4fd92a4de6d6 GIT binary patch literal 39078 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 bPi%B=<7?SJEFCEBEsmG2PJFnO$v6Ht(Sd|> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/forms/__pycache__/renderers.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/renderers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a380b7ebbdb0a57bc06739b376462f1d43014ce GIT binary patch literal 2992 zcmbVOO>Y}T7@pY=+i`3saRRgy=n9ZpBh{7Q1VSjKaZ6F-L{7M@tghBOlVr_)xHG%` zuv`g|h#UU^q4bzLzh)&)oH!$KKuGYuv)4TccRl13ffsL)DGI3`=%N)y<$BR_uzZmx86R zYFAag94v=5yG98or}fu_RoK!AIi_~wAz@Xvd_vgrv1YG8tH$ckszYlPS`D@Wtrfn? zSB?$41U;*44SLq5J!{a@Wb4qg4l{JS$><(wZTt==C*2m!j9oW5g8z!-N#aL`66z~k zLpM5%_jx!9+=R1BC{cR+!4f0s;b#=3Db@-EILn>)kkcR19<05h506T4qQd9Ax!^SSNBr zu8_?Ov{aO!XhQx24^pAy>+`2=&+pXr5S1dKmtb3w{ti?oHV7(+VICOV@( zYNy(35CGT%rz{KpH03e@E#R(MDTh2WQB$LqDNs9N4Ts8J93}ikBG$20DJ-~n_zf6+ z19Hw6ZPM}j!twJB#1c$tnOVhA2slnwb(}C}X~3agbDXEC8z450qYfr;*}1Jyi$Z}_ zhZ>$w;`u88S3?)rceO$+7`>PDeYr?jhX9%H{UKD4Vn!31 zfNu|VJju|wK@LIqK7_=d3_MfI=lPXgVYa_JAPz6_Zj%) z+!Q}j-!BBY*#d6F@Sca2b%S>^Lm;z$x&Y;wBa|&}X3F z=tq#JPGQiBslK=b3F>$gCnCO!kT8wuQ-?4B8Z#?>?MFlR1#)Bh(rL$$JX z5t_XF5-tlKf%3$xyb+@n2K|79^cAHL{E*bHK;}WDAK;&6-^`h57s$7#QkU&~!|A+S z)A-FC#>#gQ_fH|K7+2E_ZQRI_C|0`6oOmDCQBuB=HQeeGTsD`oK{XSkjJ+P@g@hJw zLYC+-^StG(!9|yIwz^+DDfaT$##qeQE9{q6D&YZfPGdU&<#VwRg>JX3=SRMGWckv9 zi{QXNOa*6ZtpVJn%!(tcc+j->JKMXD@9lT?avfiap67h!7wiNs*lFYxc!!Cr;^hMz z#G7&a?nS#64%>x`>p~<^@T+k0U;cuTbQAKqztl{DeXaFu=^%~3C*we7{Gc;FJs6Z(dYij<$+*_FL1zH1Px3R$KdV2-;p1AFQ% zmn{V%bv%42s%MhA2~{vuGEz3piTONWWR=hJ)xJPaQNf@Bmr_lGtbQfEN*iWlskz!* H+Nl2v>A#KsAl8eNA~13C5Wo1zDLoKLDph#OAF%(1AEwGLNnZTyDwpjC(cd|A z)rML>bo@=^tjTrctSehxKwioLdhy#~9LX?^lGf{5CmLDjc2yck)d)Lr8fev$N-N5D)2OMsNlR7jtfWjm zY^!Xkk?3Za1`pC^96U^-7V6D5L;WZ)VMF1gg3eO)Bn{%QyI&V1PXCY64#FJ-vw^5* z8Hc3qS*?y;EOt^hFsdt*Hm7480qx7xL z&Nlab{hK;@sOstVW7T@ReJ|SCHc_gsx5N6Qa95da`7mtlCO1eA=0+!tVpD7HXLD_h zdGE8J^E5%io?|;=N$6E1Cp1w+29>iWVkCC01A$wGVB5 zq37t$p8c%QD>THB5Y`8754!6JeWfQTx92qMJU?|vmuayl4#i=CzZ`to^tDdfErvhG zQj|UX4YVA3GO80KLcQ-L4KGYn9qn{dWk~0tX8@j9c?P+y-5NK2_kr>-<&JJC*)Q<+ zqB!>INh=Mb7FxwBl&J3+=uUZ!B#x6kRNmS59;y9TFFy|Bj=KCZ_x9bl?_D?PKE`N= zSm2uXjh2^UgnDQc3*_x23Hob!-0Ed6L@)V}VY{tD%^mGU>4T(`Vsx&Ej#4i&UT6%K zTB2E)4%!+|CSEH6m=u*H-i{i|lA~Rsd4sFB(E%!rX$hUGW;@+yQCfXfco2|txub!) z_#@Ys!4@NV`u(L3bkf;<;9VW=psU_B=w~nFWw<)M*{)V|Et+W3pmWWf3gI3t_y zYrFsHP;OS_8oZVAXoWhPX~bcQ@^knw7Z5pf1p2aYL`B#ix?%zGl3f<1=lTT{*AXWE z3i!H>V7`DzS-y~#Z%ZL3U^}lcJw4_P3$jX z8XMsbbxTuD!TpEgBT==tx?jKF*{R30o`#S$)sNTgfL_`BRp{C6MUaSdWF29{-?xs%R<)>SQ9E-7%$}9? zm2(3gE(o%65Hu6ni51e7Ao!pY#zfaaz@qR7*-Q{%8wG)nW_;!ZV}cN?YeJ#^9HQ$8 zh71DNf-FVHbp_|2Kpa8iHdUs1oj_bcIzS#!CrkJ(${FCz%~nT~dIQXVI_3z#filT+S)@OV{_%r=7c6_-$uc&X$}>; zyK#zGHL7%CKMZ8kgh0r1YfPS0j|B46lX~1?-X;Pz9T*9n7JuJNX}jI>(r|Yu_UfeA zT;o*HT}Z{HcQL;HGNSIKGlb`Ae{=$`j7=bpKHCI3aW4IFuJmkaQu#oJVM zf-Gn0#0N(3*zTF9J-CTV3w*=e>-HcxCt838QH5LzYj$ma6XllSY`gc-pz&?Pn4qH$=@B{7bJ zk$8k+s`%+R$ffG9=E~%15@(;fo+JYmehb6r8|hPIpo*VC2K{H~?6lE%+25tYTZp+{8*0o1gVh4dPAj(18j*@6-wVvkFvG~yQ@IT|s*?+ln^4^=6NY?Vbc1@o(Z34S z=)CE^cxE+1MlF4kcD*yJbYkuV_c1<0hd3ewg_eTCB7(V$D76l8T=eV+=lXw$AH&GU zsXh<$AIC^gkTBhIv^!bRblOVONgB1H6z3)FTpnR?e!ql_%n9|b$x4s*=oiMxY!I;F zg9gk%Og>*nO@fIbSyo`VbytS#SQ`v56dZLd625?N2fN7Zq-IDj)f+h_0&E4CJJ^3J+6rE@`)Z#vM0@vf>}ev zn}=*z_m8QCOuAKS1_ws2mh!k-{>eHL6N=G)g?gF}BTV3{lpd`mZR$q|tcXii_e&$O zCy4qqb!cJ`{nx_|iJ)`aiUxd$z`d@)k~yQ-i4~s!$pTvEdLXELj8z6evROrZ5W_`r zO#THX2b>-Bo8vSW$wT9*h1axQnh0!3muy>w9 zzDdznD5BkU3Df7{em91pe*>-=@9$D8OjQr|`3?ciFDa7qYb#de)?VX2_0 zypAyOM;ng*%!i217AB|6V%!NabcB_8HH@-ew!;!AQ~E`XEEa#1d!bWSeI75rA@ zsyv6^d3j#0;deo<%MJW4a_dcb0j-yqzn8HfFZB7FTt?mZ{@?kVybY&QE&<>(P%c;d zbjsx_1Ij&dcN*?b!ZUF#>>GBa^lWK$EWIFM?*w+MB+1PJX9|7chP9D8%)murVBl8& z4cd1rL-6v=Tfc_P96j$Km6h^?>jW`pE-^LhsMteZ zzK6DF^RkV0cc?AhKyX3CfpRDw60Lq78P$R&&}9x0t6$Ey8VlngdwP@6Huy)%XTv3@ zKpwqMsuTO22Btt-W(LePd<4f9gaF4wmpB*(VvxErr=GO;Sr51by@(wBJ&LB(L3#g- zz5T>u1}PfE|7QlETz<`a}Yu^0j!&_b{V z^1CP&0p~PRuf3(ei9*;U3_%a+X(=uv?_UvE=Qg~ULw+5O+~?O%A2+q&!L&%zgQd4K z2cBA;IWg^lQ^qE%hH3=CGYF7lFSkf|=t1F$%gf|^1!4bCJRTTLI4l1a-Su(C%ha5j zG`S#XQt(}xAo%y;;ACK@j}saO9=& zk*R26Oq%d;(l6nImbfQ2;YNniZFUlX_^FwXa1QPW|i&r?K%ptmV{9}yUW zu$qZT|A6u)(V5K!0Z>Oy#vnLGIo~+SaQqNT`zLUJnTGWy5JIC-V567L-abNXq6ip; zHW|JL@MlY)^&jj_ybG|;y0G;tnk)QwTM+RzBsJ-q&StG-r>+9^BnSr9?;R??OXW_~ z0uxU$3K=v1g}^57S_#yen>0g!4Lj7=s3$fdR;Ek{eV>YG3a6S6%w)8g*;dgZr6ffS zipW~kB!=dj;YiCYDVr4Up)^G>Foa31dt}I?tEHK=OpMqIVXnN`C4?mp4m1})5g5jH)c?I`buZe3d8iwQJ_Ot2ffrqd8E5q_p zdpmOna%4*2x{N~ z>Ejd@11+acC>pLMkJDE?ca9UBbv&XEVvcMzO-|_b7bxJve4|J&Gn$yC`Z@iVRDW*d zr7_H^xIyq6XAQfs!IJoE!yK(@Sj~L74X^jGkZfL4!)D|MWW&ZUZXtPJ{8E}vW_dh| z9VEH2KFqkE0lHV-ppSpZV{f$ONd+xHknO!Sq07#ib29N3!6(TOA9M==PtQ# HRWAGiy;D_LCG7D5FEF+&n0 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 z

      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. + """ + return self.as_widget(TextInput(), attrs, **kwargs) + + def as_textarea(self, attrs=None, **kwargs): + """Return a string of HTML for representing this as a diff --git a/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/time.html b/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/time.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/time.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/url.html b/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/url.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/jinja2/django/forms/widgets/url.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/models.py b/venv/Lib/site-packages/django/forms/models.py new file mode 100644 index 000000000..688b91033 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/models.py @@ -0,0 +1,1657 @@ +""" +Helper functions for creating Form classes from Django models +and database field objects. +""" +from itertools import chain + +from django.core.exceptions import ( + NON_FIELD_ERRORS, + FieldError, + ImproperlyConfigured, + ValidationError, +) +from django.forms.fields import ChoiceField, Field +from django.forms.forms import BaseForm, DeclarativeFieldsMetaclass +from django.forms.formsets import BaseFormSet, formset_factory +from django.forms.utils import ErrorList +from django.forms.widgets import ( + HiddenInput, + MultipleHiddenInput, + RadioSelect, + SelectMultiple, +) +from django.utils.text import capfirst, get_text_list +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ + +__all__ = ( + "ModelForm", + "BaseModelForm", + "model_to_dict", + "fields_for_model", + "ModelChoiceField", + "ModelMultipleChoiceField", + "ALL_FIELDS", + "BaseModelFormSet", + "modelformset_factory", + "BaseInlineFormSet", + "inlineformset_factory", + "modelform_factory", +) + +ALL_FIELDS = "__all__" + + +def construct_instance(form, instance, fields=None, exclude=None): + """ + Construct and return a model instance from the bound ``form``'s + ``cleaned_data``, but do not save the returned instance to the database. + """ + from django.db import models + + opts = instance._meta + + cleaned_data = form.cleaned_data + file_field_list = [] + for f in opts.fields: + if ( + not f.editable + or isinstance(f, models.AutoField) + or f.name not in cleaned_data + ): + continue + if fields is not None and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + # Leave defaults for fields that aren't in POST data, except for + # checkbox inputs because they don't appear in POST data if not checked. + if ( + f.has_default() + and form[f.name].field.widget.value_omitted_from_data( + form.data, form.files, form.add_prefix(f.name) + ) + and cleaned_data.get(f.name) in form[f.name].field.empty_values + ): + continue + # Defer saving file-type fields until after the other fields, so a + # callable upload_to can use the values from other fields. + if isinstance(f, models.FileField): + file_field_list.append(f) + else: + f.save_form_data(instance, cleaned_data[f.name]) + + for f in file_field_list: + f.save_form_data(instance, cleaned_data[f.name]) + + return instance + + +# ModelForms ################################################################# + + +def model_to_dict(instance, fields=None, exclude=None): + """ + Return a dict containing the data in ``instance`` suitable for passing as + a Form's ``initial`` keyword argument. + + ``fields`` is an optional list of field names. If provided, return only the + named. + + ``exclude`` is an optional list of field names. If provided, exclude the + named from the returned dict, even if they are listed in the ``fields`` + argument. + """ + opts = instance._meta + data = {} + for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many): + if not getattr(f, "editable", False): + continue + if fields is not None and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + data[f.name] = f.value_from_object(instance) + return data + + +def apply_limit_choices_to_to_formfield(formfield): + """Apply limit_choices_to to the formfield's queryset if needed.""" + from django.db.models import Exists, OuterRef, Q + + if hasattr(formfield, "queryset") and hasattr(formfield, "get_limit_choices_to"): + limit_choices_to = formfield.get_limit_choices_to() + if limit_choices_to: + complex_filter = limit_choices_to + if not isinstance(complex_filter, Q): + complex_filter = Q(**limit_choices_to) + complex_filter &= Q(pk=OuterRef("pk")) + # Use Exists() to avoid potential duplicates. + formfield.queryset = formfield.queryset.filter( + Exists(formfield.queryset.model._base_manager.filter(complex_filter)), + ) + + +def fields_for_model( + model, + fields=None, + exclude=None, + widgets=None, + formfield_callback=None, + localized_fields=None, + labels=None, + help_texts=None, + error_messages=None, + field_classes=None, + *, + apply_limit_choices_to=True, +): + """ + Return a dictionary containing form fields for the given model. + + ``fields`` is an optional list of field names. If provided, return only the + named fields. + + ``exclude`` is an optional list of field names. If provided, exclude the + named fields from the returned fields, even if they are listed in the + ``fields`` argument. + + ``widgets`` is a dictionary of model field names mapped to a widget. + + ``formfield_callback`` is a callable that takes a model field and returns + a form field. + + ``localized_fields`` is a list of names of fields which should be localized. + + ``labels`` is a dictionary of model field names mapped to a label. + + ``help_texts`` is a dictionary of model field names mapped to a help text. + + ``error_messages`` is a dictionary of model field names mapped to a + dictionary of error messages. + + ``field_classes`` is a dictionary of model field names mapped to a form + field class. + + ``apply_limit_choices_to`` is a boolean indicating if limit_choices_to + should be applied to a field's queryset. + """ + field_dict = {} + ignored = [] + opts = model._meta + # Avoid circular import + from django.db.models import Field as ModelField + + sortable_private_fields = [ + f for f in opts.private_fields if isinstance(f, ModelField) + ] + for f in sorted( + chain(opts.concrete_fields, sortable_private_fields, opts.many_to_many) + ): + if not getattr(f, "editable", False): + if ( + fields is not None + and f.name in fields + and (exclude is None or f.name not in exclude) + ): + raise FieldError( + "'%s' cannot be specified for %s model form as it is a " + "non-editable field" % (f.name, model.__name__) + ) + continue + if fields is not None and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + + kwargs = {} + if widgets and f.name in widgets: + kwargs["widget"] = widgets[f.name] + if localized_fields == ALL_FIELDS or ( + localized_fields and f.name in localized_fields + ): + kwargs["localize"] = True + if labels and f.name in labels: + kwargs["label"] = labels[f.name] + if help_texts and f.name in help_texts: + kwargs["help_text"] = help_texts[f.name] + if error_messages and f.name in error_messages: + kwargs["error_messages"] = error_messages[f.name] + if field_classes and f.name in field_classes: + kwargs["form_class"] = field_classes[f.name] + + if formfield_callback is None: + formfield = f.formfield(**kwargs) + elif not callable(formfield_callback): + raise TypeError("formfield_callback must be a function or callable") + else: + formfield = formfield_callback(f, **kwargs) + + if formfield: + if apply_limit_choices_to: + apply_limit_choices_to_to_formfield(formfield) + field_dict[f.name] = formfield + else: + ignored.append(f.name) + if fields: + field_dict = { + f: field_dict.get(f) + for f in fields + if (not exclude or f not in exclude) and f not in ignored + } + return field_dict + + +class ModelFormOptions: + def __init__(self, options=None): + self.model = getattr(options, "model", None) + self.fields = getattr(options, "fields", None) + self.exclude = getattr(options, "exclude", None) + self.widgets = getattr(options, "widgets", None) + self.localized_fields = getattr(options, "localized_fields", None) + self.labels = getattr(options, "labels", None) + self.help_texts = getattr(options, "help_texts", None) + self.error_messages = getattr(options, "error_messages", None) + self.field_classes = getattr(options, "field_classes", None) + + +class ModelFormMetaclass(DeclarativeFieldsMetaclass): + def __new__(mcs, name, bases, attrs): + base_formfield_callback = None + for b in bases: + if hasattr(b, "Meta") and hasattr(b.Meta, "formfield_callback"): + base_formfield_callback = b.Meta.formfield_callback + break + + formfield_callback = attrs.pop("formfield_callback", base_formfield_callback) + + new_class = super().__new__(mcs, name, bases, attrs) + + if bases == (BaseModelForm,): + return new_class + + opts = new_class._meta = ModelFormOptions(getattr(new_class, "Meta", None)) + + # We check if a string was passed to `fields` or `exclude`, + # which is likely to be a mistake where the user typed ('foo') instead + # of ('foo',) + for opt in ["fields", "exclude", "localized_fields"]: + value = getattr(opts, opt) + if isinstance(value, str) and value != ALL_FIELDS: + msg = ( + "%(model)s.Meta.%(opt)s cannot be a string. " + "Did you mean to type: ('%(value)s',)?" + % { + "model": new_class.__name__, + "opt": opt, + "value": value, + } + ) + raise TypeError(msg) + + if opts.model: + # If a model is defined, extract form fields from it. + if opts.fields is None and opts.exclude is None: + raise ImproperlyConfigured( + "Creating a ModelForm without either the 'fields' attribute " + "or the 'exclude' attribute is prohibited; form %s " + "needs updating." % name + ) + + if opts.fields == ALL_FIELDS: + # Sentinel for fields_for_model to indicate "get the list of + # fields from the model" + opts.fields = None + + fields = fields_for_model( + opts.model, + opts.fields, + opts.exclude, + opts.widgets, + formfield_callback, + opts.localized_fields, + opts.labels, + opts.help_texts, + opts.error_messages, + opts.field_classes, + # limit_choices_to will be applied during ModelForm.__init__(). + apply_limit_choices_to=False, + ) + + # make sure opts.fields doesn't specify an invalid field + none_model_fields = {k for k, v in fields.items() if not v} + missing_fields = none_model_fields.difference(new_class.declared_fields) + if missing_fields: + message = "Unknown field(s) (%s) specified for %s" + message = message % (", ".join(missing_fields), opts.model.__name__) + raise FieldError(message) + # Override default model fields with any custom declared ones + # (plus, include all the other declared fields). + fields.update(new_class.declared_fields) + else: + fields = new_class.declared_fields + + new_class.base_fields = fields + + return new_class + + +class BaseModelForm(BaseForm): + def __init__( + self, + data=None, + files=None, + auto_id="id_%s", + prefix=None, + initial=None, + error_class=ErrorList, + label_suffix=None, + empty_permitted=False, + instance=None, + use_required_attribute=None, + renderer=None, + ): + opts = self._meta + if opts.model is None: + raise ValueError("ModelForm has no model class specified.") + if instance is None: + # if we didn't get an instance, instantiate a new one + self.instance = opts.model() + object_data = {} + else: + self.instance = instance + object_data = model_to_dict(instance, opts.fields, opts.exclude) + # if initial was provided, it should override the values from instance + if initial is not None: + object_data.update(initial) + # self._validate_unique will be set to True by BaseModelForm.clean(). + # It is False by default so overriding self.clean() and failing to call + # super will stop validate_unique from being called. + self._validate_unique = False + super().__init__( + data, + files, + auto_id, + prefix, + object_data, + error_class, + label_suffix, + empty_permitted, + use_required_attribute=use_required_attribute, + renderer=renderer, + ) + for formfield in self.fields.values(): + apply_limit_choices_to_to_formfield(formfield) + + def _get_validation_exclusions(self): + """ + For backwards-compatibility, exclude several types of fields from model + validation. See tickets #12507, #12521, #12553. + """ + exclude = [] + # Build up a list of fields that should be excluded from model field + # validation and unique checks. + for f in self.instance._meta.fields: + field = f.name + # Exclude fields that aren't on the form. The developer may be + # adding these values to the model after form validation. + if field not in self.fields: + exclude.append(f.name) + + # Don't perform model validation on fields that were defined + # manually on the form and excluded via the ModelForm's Meta + # class. See #12901. + elif self._meta.fields and field not in self._meta.fields: + exclude.append(f.name) + elif self._meta.exclude and field in self._meta.exclude: + exclude.append(f.name) + + # Exclude fields that failed form validation. There's no need for + # the model fields to validate them as well. + elif field in self._errors: + exclude.append(f.name) + + # Exclude empty fields that are not required by the form, if the + # underlying model field is required. This keeps the model field + # from raising a required error. Note: don't exclude the field from + # validation if the model field allows blanks. If it does, the blank + # value may be included in a unique check, so cannot be excluded + # from validation. + else: + form_field = self.fields[field] + field_value = self.cleaned_data.get(field) + if ( + not f.blank + and not form_field.required + and field_value in form_field.empty_values + ): + exclude.append(f.name) + return exclude + + def clean(self): + self._validate_unique = True + return self.cleaned_data + + def _update_errors(self, errors): + # Override any validation error messages defined at the model level + # with those defined at the form level. + opts = self._meta + + # Allow the model generated by construct_instance() to raise + # ValidationError and have them handled in the same way as others. + if hasattr(errors, "error_dict"): + error_dict = errors.error_dict + else: + error_dict = {NON_FIELD_ERRORS: errors} + + for field, messages in error_dict.items(): + if ( + field == NON_FIELD_ERRORS + and opts.error_messages + and NON_FIELD_ERRORS in opts.error_messages + ): + error_messages = opts.error_messages[NON_FIELD_ERRORS] + elif field in self.fields: + error_messages = self.fields[field].error_messages + else: + continue + + for message in messages: + if ( + isinstance(message, ValidationError) + and message.code in error_messages + ): + message.message = error_messages[message.code] + + self.add_error(None, errors) + + def _post_clean(self): + opts = self._meta + + exclude = self._get_validation_exclusions() + + # Foreign Keys being used to represent inline relationships + # are excluded from basic field value validation. This is for two + # reasons: firstly, the value may not be supplied (#12507; the + # case of providing new values to the admin); secondly the + # object being referred to may not yet fully exist (#12749). + # However, these fields *must* be included in uniqueness checks, + # so this can't be part of _get_validation_exclusions(). + for name, field in self.fields.items(): + if isinstance(field, InlineForeignKeyField): + exclude.append(name) + + try: + self.instance = construct_instance( + self, self.instance, opts.fields, opts.exclude + ) + except ValidationError as e: + self._update_errors(e) + + try: + self.instance.full_clean(exclude=exclude, validate_unique=False) + except ValidationError as e: + self._update_errors(e) + + # Validate uniqueness if needed. + if self._validate_unique: + self.validate_unique() + + def validate_unique(self): + """ + Call the instance's validate_unique() method and update the form's + validation errors if any were raised. + """ + exclude = self._get_validation_exclusions() + try: + self.instance.validate_unique(exclude=exclude) + except ValidationError as e: + self._update_errors(e) + + def _save_m2m(self): + """ + Save the many-to-many fields and generic relations for this form. + """ + cleaned_data = self.cleaned_data + exclude = self._meta.exclude + fields = self._meta.fields + opts = self.instance._meta + # Note that for historical reasons we want to include also + # private_fields here. (GenericRelation was previously a fake + # m2m field). + for f in chain(opts.many_to_many, opts.private_fields): + if not hasattr(f, "save_form_data"): + continue + if fields and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + if f.name in cleaned_data: + f.save_form_data(self.instance, cleaned_data[f.name]) + + def save(self, commit=True): + """ + Save this form's self.instance object if commit=True. Otherwise, add + a save_m2m() method to the form which can be called after the instance + is saved manually at a later time. Return the model instance. + """ + if self.errors: + raise ValueError( + "The %s could not be %s because the data didn't validate." + % ( + self.instance._meta.object_name, + "created" if self.instance._state.adding else "changed", + ) + ) + if commit: + # If committing, save the instance and the m2m data immediately. + self.instance.save() + self._save_m2m() + else: + # If not committing, add a method to the form to allow deferred + # saving of m2m data. + self.save_m2m = self._save_m2m + return self.instance + + save.alters_data = True + + +class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): + pass + + +def modelform_factory( + model, + form=ModelForm, + fields=None, + exclude=None, + formfield_callback=None, + widgets=None, + localized_fields=None, + labels=None, + help_texts=None, + error_messages=None, + field_classes=None, +): + """ + Return a ModelForm containing form fields for the given model. You can + optionally pass a `form` argument to use as a starting point for + constructing the ModelForm. + + ``fields`` is an optional list of field names. If provided, include only + the named fields in the returned fields. If omitted or '__all__', use all + fields. + + ``exclude`` is an optional list of field names. If provided, exclude the + named fields from the returned fields, even if they are listed in the + ``fields`` argument. + + ``widgets`` is a dictionary of model field names mapped to a widget. + + ``localized_fields`` is a list of names of fields which should be localized. + + ``formfield_callback`` is a callable that takes a model field and returns + a form field. + + ``labels`` is a dictionary of model field names mapped to a label. + + ``help_texts`` is a dictionary of model field names mapped to a help text. + + ``error_messages`` is a dictionary of model field names mapped to a + dictionary of error messages. + + ``field_classes`` is a dictionary of model field names mapped to a form + field class. + """ + # Create the inner Meta class. FIXME: ideally, we should be able to + # construct a ModelForm without creating and passing in a temporary + # inner class. + + # Build up a list of attributes that the Meta object will have. + attrs = {"model": model} + if fields is not None: + attrs["fields"] = fields + if exclude is not None: + attrs["exclude"] = exclude + if widgets is not None: + attrs["widgets"] = widgets + if localized_fields is not None: + attrs["localized_fields"] = localized_fields + if labels is not None: + attrs["labels"] = labels + if help_texts is not None: + attrs["help_texts"] = help_texts + if error_messages is not None: + attrs["error_messages"] = error_messages + if field_classes is not None: + attrs["field_classes"] = field_classes + + # If parent form class already has an inner Meta, the Meta we're + # creating needs to inherit from the parent's inner meta. + bases = (form.Meta,) if hasattr(form, "Meta") else () + Meta = type("Meta", bases, attrs) + if formfield_callback: + Meta.formfield_callback = staticmethod(formfield_callback) + # Give this new form class a reasonable name. + class_name = model.__name__ + "Form" + + # Class attributes for the new form class. + form_class_attrs = {"Meta": Meta, "formfield_callback": formfield_callback} + + if getattr(Meta, "fields", None) is None and getattr(Meta, "exclude", None) is None: + raise ImproperlyConfigured( + "Calling modelform_factory without defining 'fields' or " + "'exclude' explicitly is prohibited." + ) + + # Instantiate type(form) in order to use the same metaclass as form. + return type(form)(class_name, (form,), form_class_attrs) + + +# ModelFormSets ############################################################## + + +class BaseModelFormSet(BaseFormSet): + """ + A ``FormSet`` for editing a queryset and/or adding new objects to it. + """ + + model = None + + # Set of fields that must be unique among forms of this set. + unique_fields = set() + + def __init__( + self, + data=None, + files=None, + auto_id="id_%s", + prefix=None, + queryset=None, + *, + initial=None, + **kwargs, + ): + self.queryset = queryset + self.initial_extra = initial + super().__init__( + **{ + "data": data, + "files": files, + "auto_id": auto_id, + "prefix": prefix, + **kwargs, + } + ) + + def initial_form_count(self): + """Return the number of forms that are required in this FormSet.""" + if not self.is_bound: + return len(self.get_queryset()) + return super().initial_form_count() + + def _existing_object(self, pk): + if not hasattr(self, "_object_dict"): + self._object_dict = {o.pk: o for o in self.get_queryset()} + return self._object_dict.get(pk) + + def _get_to_python(self, field): + """ + If the field is a related field, fetch the concrete field's (that + is, the ultimate pointed-to field's) to_python. + """ + while field.remote_field is not None: + field = field.remote_field.get_related_field() + return field.to_python + + def _construct_form(self, i, **kwargs): + pk_required = i < self.initial_form_count() + if pk_required: + if self.is_bound: + pk_key = "%s-%s" % (self.add_prefix(i), self.model._meta.pk.name) + try: + pk = self.data[pk_key] + except KeyError: + # The primary key is missing. The user may have tampered + # with POST data. + pass + else: + to_python = self._get_to_python(self.model._meta.pk) + try: + pk = to_python(pk) + except ValidationError: + # The primary key exists but is an invalid value. The + # user may have tampered with POST data. + pass + else: + kwargs["instance"] = self._existing_object(pk) + else: + kwargs["instance"] = self.get_queryset()[i] + elif self.initial_extra: + # Set initial values for extra forms + try: + kwargs["initial"] = self.initial_extra[i - self.initial_form_count()] + except IndexError: + pass + form = super()._construct_form(i, **kwargs) + if pk_required: + form.fields[self.model._meta.pk.name].required = True + return form + + def get_queryset(self): + if not hasattr(self, "_queryset"): + if self.queryset is not None: + qs = self.queryset + else: + qs = self.model._default_manager.get_queryset() + + # If the queryset isn't already ordered we need to add an + # artificial ordering here to make sure that all formsets + # constructed from this queryset have the same form order. + if not qs.ordered: + qs = qs.order_by(self.model._meta.pk.name) + + # Removed queryset limiting here. As per discussion re: #13023 + # on django-dev, max_num should not prevent existing + # related objects/inlines from being displayed. + self._queryset = qs + return self._queryset + + def save_new(self, form, commit=True): + """Save and return a new model instance for the given form.""" + return form.save(commit=commit) + + def save_existing(self, form, instance, commit=True): + """Save and return an existing model instance for the given form.""" + return form.save(commit=commit) + + def delete_existing(self, obj, commit=True): + """Deletes an existing model instance.""" + if commit: + obj.delete() + + def save(self, commit=True): + """ + Save model instances for every form, adding and changing instances + as necessary, and return the list of instances. + """ + if not commit: + self.saved_forms = [] + + def save_m2m(): + for form in self.saved_forms: + form.save_m2m() + + self.save_m2m = save_m2m + return self.save_existing_objects(commit) + self.save_new_objects(commit) + + save.alters_data = True + + def clean(self): + self.validate_unique() + + def validate_unique(self): + # Collect unique_checks and date_checks to run from all the forms. + all_unique_checks = set() + all_date_checks = set() + forms_to_delete = self.deleted_forms + valid_forms = [ + form + for form in self.forms + if form.is_valid() and form not in forms_to_delete + ] + for form in valid_forms: + exclude = form._get_validation_exclusions() + unique_checks, date_checks = form.instance._get_unique_checks( + exclude=exclude + ) + all_unique_checks.update(unique_checks) + all_date_checks.update(date_checks) + + errors = [] + # Do each of the unique checks (unique and unique_together) + for uclass, unique_check in all_unique_checks: + seen_data = set() + for form in valid_forms: + # Get the data for the set of fields that must be unique among + # the forms. + row_data = ( + field if field in self.unique_fields else form.cleaned_data[field] + for field in unique_check + if field in form.cleaned_data + ) + # Reduce Model instances to their primary key values + row_data = tuple( + d._get_pk_val() if hasattr(d, "_get_pk_val") + # Prevent "unhashable type: list" errors later on. + else tuple(d) if isinstance(d, list) else d + for d in row_data + ) + if row_data and None not in row_data: + # if we've already seen it then we have a uniqueness failure + if row_data in seen_data: + # poke error messages into the right places and mark + # the form as invalid + errors.append(self.get_unique_error_message(unique_check)) + form._errors[NON_FIELD_ERRORS] = self.error_class( + [self.get_form_error()], + renderer=self.renderer, + ) + # Remove the data from the cleaned_data dict since it + # was invalid. + for field in unique_check: + if field in form.cleaned_data: + del form.cleaned_data[field] + # mark the data as seen + seen_data.add(row_data) + # iterate over each of the date checks now + for date_check in all_date_checks: + seen_data = set() + uclass, lookup, field, unique_for = date_check + for form in valid_forms: + # see if we have data for both fields + if ( + form.cleaned_data + and form.cleaned_data[field] is not None + and form.cleaned_data[unique_for] is not None + ): + # if it's a date lookup we need to get the data for all the fields + if lookup == "date": + date = form.cleaned_data[unique_for] + date_data = (date.year, date.month, date.day) + # otherwise it's just the attribute on the date/datetime + # object + else: + date_data = (getattr(form.cleaned_data[unique_for], lookup),) + data = (form.cleaned_data[field],) + date_data + # if we've already seen it then we have a uniqueness failure + if data in seen_data: + # poke error messages into the right places and mark + # the form as invalid + errors.append(self.get_date_error_message(date_check)) + form._errors[NON_FIELD_ERRORS] = self.error_class( + [self.get_form_error()], + renderer=self.renderer, + ) + # Remove the data from the cleaned_data dict since it + # was invalid. + del form.cleaned_data[field] + # mark the data as seen + seen_data.add(data) + + if errors: + raise ValidationError(errors) + + def get_unique_error_message(self, unique_check): + if len(unique_check) == 1: + return gettext("Please correct the duplicate data for %(field)s.") % { + "field": unique_check[0], + } + else: + return gettext( + "Please correct the duplicate data for %(field)s, which must be unique." + ) % { + "field": get_text_list(unique_check, _("and")), + } + + def get_date_error_message(self, date_check): + return gettext( + "Please correct the duplicate data for %(field_name)s " + "which must be unique for the %(lookup)s in %(date_field)s." + ) % { + "field_name": date_check[2], + "date_field": date_check[3], + "lookup": str(date_check[1]), + } + + def get_form_error(self): + return gettext("Please correct the duplicate values below.") + + def save_existing_objects(self, commit=True): + self.changed_objects = [] + self.deleted_objects = [] + if not self.initial_forms: + return [] + + saved_instances = [] + forms_to_delete = self.deleted_forms + for form in self.initial_forms: + obj = form.instance + # If the pk is None, it means either: + # 1. The object is an unexpected empty model, created by invalid + # POST data such as an object outside the formset's queryset. + # 2. The object was already deleted from the database. + if obj.pk is None: + continue + if form in forms_to_delete: + self.deleted_objects.append(obj) + self.delete_existing(obj, commit=commit) + elif form.has_changed(): + self.changed_objects.append((obj, form.changed_data)) + saved_instances.append(self.save_existing(form, obj, commit=commit)) + if not commit: + self.saved_forms.append(form) + return saved_instances + + def save_new_objects(self, commit=True): + self.new_objects = [] + for form in self.extra_forms: + if not form.has_changed(): + continue + # If someone has marked an add form for deletion, don't save the + # object. + if self.can_delete and self._should_delete_form(form): + continue + self.new_objects.append(self.save_new(form, commit=commit)) + if not commit: + self.saved_forms.append(form) + return self.new_objects + + def add_fields(self, form, index): + """Add a hidden field for the object's primary key.""" + from django.db.models import AutoField, ForeignKey, OneToOneField + + self._pk_field = pk = self.model._meta.pk + # If a pk isn't editable, then it won't be on the form, so we need to + # add it here so we can tell which object is which when we get the + # data back. Generally, pk.editable should be false, but for some + # reason, auto_created pk fields and AutoField's editable attribute is + # True, so check for that as well. + + def pk_is_not_editable(pk): + return ( + (not pk.editable) + or (pk.auto_created or isinstance(pk, AutoField)) + or ( + pk.remote_field + and pk.remote_field.parent_link + and pk_is_not_editable(pk.remote_field.model._meta.pk) + ) + ) + + if pk_is_not_editable(pk) or pk.name not in form.fields: + if form.is_bound: + # If we're adding the related instance, ignore its primary key + # as it could be an auto-generated default which isn't actually + # in the database. + pk_value = None if form.instance._state.adding else form.instance.pk + else: + try: + if index is not None: + pk_value = self.get_queryset()[index].pk + else: + pk_value = None + except IndexError: + pk_value = None + if isinstance(pk, (ForeignKey, OneToOneField)): + qs = pk.remote_field.model._default_manager.get_queryset() + else: + qs = self.model._default_manager.get_queryset() + qs = qs.using(form.instance._state.db) + if form._meta.widgets: + widget = form._meta.widgets.get(self._pk_field.name, HiddenInput) + else: + widget = HiddenInput + form.fields[self._pk_field.name] = ModelChoiceField( + qs, initial=pk_value, required=False, widget=widget + ) + super().add_fields(form, index) + + +def modelformset_factory( + model, + form=ModelForm, + formfield_callback=None, + formset=BaseModelFormSet, + extra=1, + can_delete=False, + can_order=False, + max_num=None, + fields=None, + exclude=None, + widgets=None, + validate_max=False, + localized_fields=None, + labels=None, + help_texts=None, + error_messages=None, + min_num=None, + validate_min=False, + field_classes=None, + absolute_max=None, + can_delete_extra=True, + renderer=None, +): + """Return a FormSet class for the given Django model class.""" + meta = getattr(form, "Meta", None) + if ( + getattr(meta, "fields", fields) is None + and getattr(meta, "exclude", exclude) is None + ): + raise ImproperlyConfigured( + "Calling modelformset_factory without defining 'fields' or " + "'exclude' explicitly is prohibited." + ) + + form = modelform_factory( + model, + form=form, + fields=fields, + exclude=exclude, + formfield_callback=formfield_callback, + widgets=widgets, + localized_fields=localized_fields, + labels=labels, + help_texts=help_texts, + error_messages=error_messages, + field_classes=field_classes, + ) + FormSet = formset_factory( + form, + formset, + extra=extra, + min_num=min_num, + max_num=max_num, + can_order=can_order, + can_delete=can_delete, + validate_min=validate_min, + validate_max=validate_max, + absolute_max=absolute_max, + can_delete_extra=can_delete_extra, + renderer=renderer, + ) + FormSet.model = model + return FormSet + + +# InlineFormSets ############################################################# + + +class BaseInlineFormSet(BaseModelFormSet): + """A formset for child objects related to a parent.""" + + def __init__( + self, + data=None, + files=None, + instance=None, + save_as_new=False, + prefix=None, + queryset=None, + **kwargs, + ): + if instance is None: + self.instance = self.fk.remote_field.model() + else: + self.instance = instance + self.save_as_new = save_as_new + if queryset is None: + queryset = self.model._default_manager + if self.instance.pk is not None: + qs = queryset.filter(**{self.fk.name: self.instance}) + else: + qs = queryset.none() + self.unique_fields = {self.fk.name} + super().__init__(data, files, prefix=prefix, queryset=qs, **kwargs) + + # Add the generated field to form._meta.fields if it's defined to make + # sure validation isn't skipped on that field. + if self.form._meta.fields and self.fk.name not in self.form._meta.fields: + if isinstance(self.form._meta.fields, tuple): + self.form._meta.fields = list(self.form._meta.fields) + self.form._meta.fields.append(self.fk.name) + + def initial_form_count(self): + if self.save_as_new: + return 0 + return super().initial_form_count() + + def _construct_form(self, i, **kwargs): + form = super()._construct_form(i, **kwargs) + if self.save_as_new: + mutable = getattr(form.data, "_mutable", None) + # Allow modifying an immutable QueryDict. + if mutable is not None: + form.data._mutable = True + # Remove the primary key from the form's data, we are only + # creating new instances + form.data[form.add_prefix(self._pk_field.name)] = None + # Remove the foreign key from the form's data + form.data[form.add_prefix(self.fk.name)] = None + if mutable is not None: + form.data._mutable = mutable + + # Set the fk value here so that the form can do its validation. + fk_value = self.instance.pk + if self.fk.remote_field.field_name != self.fk.remote_field.model._meta.pk.name: + fk_value = getattr(self.instance, self.fk.remote_field.field_name) + fk_value = getattr(fk_value, "pk", fk_value) + setattr(form.instance, self.fk.get_attname(), fk_value) + return form + + @classmethod + def get_default_prefix(cls): + return cls.fk.remote_field.get_accessor_name(model=cls.model).replace("+", "") + + def save_new(self, form, commit=True): + # Ensure the latest copy of the related instance is present on each + # form (it may have been saved after the formset was originally + # instantiated). + setattr(form.instance, self.fk.name, self.instance) + return super().save_new(form, commit=commit) + + def add_fields(self, form, index): + super().add_fields(form, index) + if self._pk_field == self.fk: + name = self._pk_field.name + kwargs = {"pk_field": True} + else: + # The foreign key field might not be on the form, so we poke at the + # Model field to get the label, since we need that for error messages. + name = self.fk.name + kwargs = { + "label": getattr( + form.fields.get(name), "label", capfirst(self.fk.verbose_name) + ) + } + + # The InlineForeignKeyField assumes that the foreign key relation is + # based on the parent model's pk. If this isn't the case, set to_field + # to correctly resolve the initial form value. + if self.fk.remote_field.field_name != self.fk.remote_field.model._meta.pk.name: + kwargs["to_field"] = self.fk.remote_field.field_name + + # If we're adding a new object, ignore a parent's auto-generated key + # as it will be regenerated on the save request. + if self.instance._state.adding: + if kwargs.get("to_field") is not None: + to_field = self.instance._meta.get_field(kwargs["to_field"]) + else: + to_field = self.instance._meta.pk + if to_field.has_default(): + setattr(self.instance, to_field.attname, None) + + form.fields[name] = InlineForeignKeyField(self.instance, **kwargs) + + def get_unique_error_message(self, unique_check): + unique_check = [field for field in unique_check if field != self.fk.name] + return super().get_unique_error_message(unique_check) + + +def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False): + """ + Find and return the ForeignKey from model to parent if there is one + (return None if can_fail is True and no such field exists). If fk_name is + provided, assume it is the name of the ForeignKey field. Unless can_fail is + True, raise an exception if there isn't a ForeignKey from model to + parent_model. + """ + # avoid circular import + from django.db.models import ForeignKey + + opts = model._meta + if fk_name: + fks_to_parent = [f for f in opts.fields if f.name == fk_name] + if len(fks_to_parent) == 1: + fk = fks_to_parent[0] + parent_list = parent_model._meta.get_parent_list() + if ( + not isinstance(fk, ForeignKey) + or ( + # ForeignKey to proxy models. + fk.remote_field.model._meta.proxy + and fk.remote_field.model._meta.proxy_for_model not in parent_list + ) + or ( + # ForeignKey to concrete models. + not fk.remote_field.model._meta.proxy + and fk.remote_field.model != parent_model + and fk.remote_field.model not in parent_list + ) + ): + raise ValueError( + "fk_name '%s' is not a ForeignKey to '%s'." + % (fk_name, parent_model._meta.label) + ) + elif not fks_to_parent: + raise ValueError( + "'%s' has no field named '%s'." % (model._meta.label, fk_name) + ) + else: + # Try to discover what the ForeignKey from model to parent_model is + parent_list = parent_model._meta.get_parent_list() + fks_to_parent = [ + f + for f in opts.fields + if isinstance(f, ForeignKey) + and ( + f.remote_field.model == parent_model + or f.remote_field.model in parent_list + or ( + f.remote_field.model._meta.proxy + and f.remote_field.model._meta.proxy_for_model in parent_list + ) + ) + ] + if len(fks_to_parent) == 1: + fk = fks_to_parent[0] + elif not fks_to_parent: + if can_fail: + return + raise ValueError( + "'%s' has no ForeignKey to '%s'." + % ( + model._meta.label, + parent_model._meta.label, + ) + ) + else: + raise ValueError( + "'%s' has more than one ForeignKey to '%s'. You must specify " + "a 'fk_name' attribute." + % ( + model._meta.label, + parent_model._meta.label, + ) + ) + return fk + + +def inlineformset_factory( + parent_model, + model, + form=ModelForm, + formset=BaseInlineFormSet, + fk_name=None, + fields=None, + exclude=None, + extra=3, + can_order=False, + can_delete=True, + max_num=None, + formfield_callback=None, + widgets=None, + validate_max=False, + localized_fields=None, + labels=None, + help_texts=None, + error_messages=None, + min_num=None, + validate_min=False, + field_classes=None, + absolute_max=None, + can_delete_extra=True, + renderer=None, +): + """ + Return an ``InlineFormSet`` for the given kwargs. + + ``fk_name`` must be provided if ``model`` has more than one ``ForeignKey`` + to ``parent_model``. + """ + fk = _get_foreign_key(parent_model, model, fk_name=fk_name) + # enforce a max_num=1 when the foreign key to the parent model is unique. + if fk.unique: + max_num = 1 + kwargs = { + "form": form, + "formfield_callback": formfield_callback, + "formset": formset, + "extra": extra, + "can_delete": can_delete, + "can_order": can_order, + "fields": fields, + "exclude": exclude, + "min_num": min_num, + "max_num": max_num, + "widgets": widgets, + "validate_min": validate_min, + "validate_max": validate_max, + "localized_fields": localized_fields, + "labels": labels, + "help_texts": help_texts, + "error_messages": error_messages, + "field_classes": field_classes, + "absolute_max": absolute_max, + "can_delete_extra": can_delete_extra, + "renderer": renderer, + } + FormSet = modelformset_factory(model, **kwargs) + FormSet.fk = fk + return FormSet + + +# Fields ##################################################################### + + +class InlineForeignKeyField(Field): + """ + A basic integer field that deals with validating the given value to a + given parent instance in an inline. + """ + + widget = HiddenInput + default_error_messages = { + "invalid_choice": _("The inline value did not match the parent instance."), + } + + def __init__(self, parent_instance, *args, pk_field=False, to_field=None, **kwargs): + self.parent_instance = parent_instance + self.pk_field = pk_field + self.to_field = to_field + if self.parent_instance is not None: + if self.to_field: + kwargs["initial"] = getattr(self.parent_instance, self.to_field) + else: + kwargs["initial"] = self.parent_instance.pk + kwargs["required"] = False + super().__init__(*args, **kwargs) + + def clean(self, value): + if value in self.empty_values: + if self.pk_field: + return None + # if there is no value act as we did before. + return self.parent_instance + # ensure the we compare the values as equal types. + if self.to_field: + orig = getattr(self.parent_instance, self.to_field) + else: + orig = self.parent_instance.pk + if str(value) != str(orig): + raise ValidationError( + self.error_messages["invalid_choice"], code="invalid_choice" + ) + return self.parent_instance + + def has_changed(self, initial, data): + return False + + +class ModelChoiceIteratorValue: + def __init__(self, value, instance): + self.value = value + self.instance = instance + + def __str__(self): + return str(self.value) + + def __hash__(self): + return hash(self.value) + + def __eq__(self, other): + if isinstance(other, ModelChoiceIteratorValue): + other = other.value + return self.value == other + + +class ModelChoiceIterator: + def __init__(self, field): + self.field = field + self.queryset = field.queryset + + def __iter__(self): + if self.field.empty_label is not None: + yield ("", self.field.empty_label) + queryset = self.queryset + # Can't use iterator() when queryset uses prefetch_related() + if not queryset._prefetch_related_lookups: + queryset = queryset.iterator() + for obj in queryset: + yield self.choice(obj) + + def __len__(self): + # count() adds a query but uses less memory since the QuerySet results + # won't be cached. In most cases, the choices will only be iterated on, + # and __len__() won't be called. + return self.queryset.count() + (1 if self.field.empty_label is not None else 0) + + def __bool__(self): + return self.field.empty_label is not None or self.queryset.exists() + + def choice(self, obj): + return ( + ModelChoiceIteratorValue(self.field.prepare_value(obj), obj), + self.field.label_from_instance(obj), + ) + + +class ModelChoiceField(ChoiceField): + """A ChoiceField whose choices are a model QuerySet.""" + + # This class is a subclass of ChoiceField for purity, but it doesn't + # actually use any of ChoiceField's implementation. + default_error_messages = { + "invalid_choice": _( + "Select a valid choice. That choice is not one of the available choices." + ), + } + iterator = ModelChoiceIterator + + def __init__( + self, + queryset, + *, + empty_label="---------", + required=True, + widget=None, + label=None, + initial=None, + help_text="", + to_field_name=None, + limit_choices_to=None, + blank=False, + **kwargs, + ): + # Call Field instead of ChoiceField __init__() because we don't need + # ChoiceField.__init__(). + Field.__init__( + self, + required=required, + widget=widget, + label=label, + initial=initial, + help_text=help_text, + **kwargs, + ) + if (required and initial is not None) or ( + isinstance(self.widget, RadioSelect) and not blank + ): + self.empty_label = None + else: + self.empty_label = empty_label + self.queryset = queryset + self.limit_choices_to = limit_choices_to # limit the queryset later. + self.to_field_name = to_field_name + + def get_limit_choices_to(self): + """ + Return ``limit_choices_to`` for this form field. + + If it is a callable, invoke it and return the result. + """ + if callable(self.limit_choices_to): + return self.limit_choices_to() + return self.limit_choices_to + + def __deepcopy__(self, memo): + result = super(ChoiceField, self).__deepcopy__(memo) + # Need to force a new ModelChoiceIterator to be created, bug #11183 + if self.queryset is not None: + result.queryset = self.queryset.all() + return result + + def _get_queryset(self): + return self._queryset + + def _set_queryset(self, queryset): + self._queryset = None if queryset is None else queryset.all() + self.widget.choices = self.choices + + queryset = property(_get_queryset, _set_queryset) + + # this method will be used to create object labels by the QuerySetIterator. + # Override it to customize the label. + def label_from_instance(self, obj): + """ + Convert objects into strings and generate the labels for the choices + presented by this object. Subclasses can override this method to + customize the display of the choices. + """ + return str(obj) + + def _get_choices(self): + # If self._choices is set, then somebody must have manually set + # the property self.choices. In this case, just return self._choices. + if hasattr(self, "_choices"): + return self._choices + + # Otherwise, execute the QuerySet in self.queryset to determine the + # choices dynamically. Return a fresh ModelChoiceIterator that has not been + # consumed. Note that we're instantiating a new ModelChoiceIterator *each* + # time _get_choices() is called (and, thus, each time self.choices is + # accessed) so that we can ensure the QuerySet has not been consumed. This + # construct might look complicated but it allows for lazy evaluation of + # the queryset. + return self.iterator(self) + + choices = property(_get_choices, ChoiceField._set_choices) + + def prepare_value(self, value): + if hasattr(value, "_meta"): + if self.to_field_name: + return value.serializable_value(self.to_field_name) + else: + return value.pk + return super().prepare_value(value) + + def to_python(self, value): + if value in self.empty_values: + return None + try: + key = self.to_field_name or "pk" + if isinstance(value, self.queryset.model): + value = getattr(value, key) + value = self.queryset.get(**{key: value}) + except (ValueError, TypeError, self.queryset.model.DoesNotExist): + raise ValidationError( + self.error_messages["invalid_choice"], + code="invalid_choice", + params={"value": value}, + ) + return value + + def validate(self, value): + return Field.validate(self, value) + + def has_changed(self, initial, data): + if self.disabled: + return False + initial_value = initial if initial is not None else "" + data_value = data if data is not None else "" + return str(self.prepare_value(initial_value)) != str(data_value) + + +class ModelMultipleChoiceField(ModelChoiceField): + """A MultipleChoiceField whose choices are a model QuerySet.""" + + widget = SelectMultiple + hidden_widget = MultipleHiddenInput + default_error_messages = { + "invalid_list": _("Enter a list of values."), + "invalid_choice": _( + "Select a valid choice. %(value)s is not one of the available choices." + ), + "invalid_pk_value": _("“%(pk)s” is not a valid value."), + } + + def __init__(self, queryset, **kwargs): + super().__init__(queryset, empty_label=None, **kwargs) + + def to_python(self, value): + if not value: + return [] + return list(self._check_values(value)) + + def clean(self, value): + value = self.prepare_value(value) + if self.required and not value: + raise ValidationError(self.error_messages["required"], code="required") + elif not self.required and not value: + return self.queryset.none() + if not isinstance(value, (list, tuple)): + raise ValidationError( + self.error_messages["invalid_list"], + code="invalid_list", + ) + qs = self._check_values(value) + # Since this overrides the inherited ModelChoiceField.clean + # we run custom validators here + self.run_validators(value) + return qs + + def _check_values(self, value): + """ + Given a list of possible PK values, return a QuerySet of the + corresponding objects. Raise a ValidationError if a given value is + invalid (not a valid PK, not in the queryset, etc.) + """ + key = self.to_field_name or "pk" + # deduplicate given values to avoid creating many querysets or + # requiring the database backend deduplicate efficiently. + try: + value = frozenset(value) + except TypeError: + # list of lists isn't hashable, for example + raise ValidationError( + self.error_messages["invalid_list"], + code="invalid_list", + ) + for pk in value: + try: + self.queryset.filter(**{key: pk}) + except (ValueError, TypeError): + raise ValidationError( + self.error_messages["invalid_pk_value"], + code="invalid_pk_value", + params={"pk": pk}, + ) + qs = self.queryset.filter(**{"%s__in" % key: value}) + pks = {str(getattr(o, key)) for o in qs} + for val in value: + if str(val) not in pks: + raise ValidationError( + self.error_messages["invalid_choice"], + code="invalid_choice", + params={"value": val}, + ) + return qs + + def prepare_value(self, value): + if ( + hasattr(value, "__iter__") + and not isinstance(value, str) + and not hasattr(value, "_meta") + ): + prepare_value = super().prepare_value + return [prepare_value(v) for v in value] + return super().prepare_value(value) + + def has_changed(self, initial, data): + if self.disabled: + return False + if initial is None: + initial = [] + if data is None: + data = [] + if len(initial) != len(data): + return True + initial_set = {str(value) for value in self.prepare_value(initial)} + data_set = {str(value) for value in data} + return data_set != initial_set + + +def modelform_defines_fields(form_class): + return hasattr(form_class, "_meta") and ( + form_class._meta.fields is not None or form_class._meta.exclude is not None + ) diff --git a/venv/Lib/site-packages/django/forms/renderers.py b/venv/Lib/site-packages/django/forms/renderers.py new file mode 100644 index 000000000..8286c71cb --- /dev/null +++ b/venv/Lib/site-packages/django/forms/renderers.py @@ -0,0 +1,71 @@ +import functools +from pathlib import Path + +from django.conf import settings +from django.template.backends.django import DjangoTemplates +from django.template.loader import get_template +from django.utils.functional import cached_property +from django.utils.module_loading import import_string + + +@functools.lru_cache() +def get_default_renderer(): + renderer_class = import_string(settings.FORM_RENDERER) + return renderer_class() + + +class BaseRenderer: + def get_template(self, template_name): + raise NotImplementedError("subclasses must implement get_template()") + + def render(self, template_name, context, request=None): + template = self.get_template(template_name) + return template.render(context, request=request).strip() + + +class EngineMixin: + def get_template(self, template_name): + return self.engine.get_template(template_name) + + @cached_property + def engine(self): + return self.backend( + { + "APP_DIRS": True, + "DIRS": [Path(__file__).parent / self.backend.app_dirname], + "NAME": "djangoforms", + "OPTIONS": {}, + } + ) + + +class DjangoTemplates(EngineMixin, BaseRenderer): + """ + Load Django templates from the built-in widget templates in + django/forms/templates and from apps' 'templates' directory. + """ + + backend = DjangoTemplates + + +class Jinja2(EngineMixin, BaseRenderer): + """ + Load Jinja2 templates from the built-in widget templates in + django/forms/jinja2 and from apps' 'jinja2' directory. + """ + + @cached_property + def backend(self): + from django.template.backends.jinja2 import Jinja2 + + return Jinja2 + + +class TemplatesSetting(BaseRenderer): + """ + Load templates using template.loader.get_template() which is configured + based on settings.TEMPLATES. + """ + + def get_template(self, template_name): + return get_template(template_name) diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/attrs.html b/venv/Lib/site-packages/django/forms/templates/django/forms/attrs.html new file mode 100644 index 000000000..50de36bae --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/attrs.html @@ -0,0 +1 @@ +{% for name, value in attrs.items %}{% if value is not False %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/default.html b/venv/Lib/site-packages/django/forms/templates/django/forms/default.html new file mode 100644 index 000000000..d034b60d5 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/default.html @@ -0,0 +1 @@ +{% include "django/forms/table.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/default.html b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/default.html new file mode 100644 index 000000000..8a833c658 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/default.html @@ -0,0 +1 @@ +{% include "django/forms/errors/dict/ul.html" %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/text.txt b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/text.txt new file mode 100644 index 000000000..dc9fd80c9 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/text.txt @@ -0,0 +1,3 @@ +{% for field, errors in errors %}* {{ field }} +{% for error in errors %} * {{ error }} +{% endfor %}{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/ul.html b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/ul.html new file mode 100644 index 000000000..c16fd6591 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/dict/ul.html @@ -0,0 +1 @@ +{% if errors %}

      {% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/default.html b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/default.html new file mode 100644 index 000000000..b174f26f4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/default.html @@ -0,0 +1 @@ +{% include "django/forms/errors/list/ul.html" %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/text.txt b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/text.txt new file mode 100644 index 000000000..aa7f870b4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/text.txt @@ -0,0 +1,2 @@ +{% for error in errors %}* {{ error }} +{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/ul.html b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/ul.html new file mode 100644 index 000000000..57b34ccb8 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/errors/list/ul.html @@ -0,0 +1 @@ +{% if errors %}
        {% for error in errors %}
      • {{ error }}
      • {% endfor %}
      {% endif %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/default.html b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/default.html new file mode 100644 index 000000000..d8284c5da --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/default.html @@ -0,0 +1 @@ +{{ formset.management_form }}{% for form in formset %}{{ form }}{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/p.html b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/p.html new file mode 100644 index 000000000..00c2df6b3 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/p.html @@ -0,0 +1 @@ +{{ formset.management_form }}{% for form in formset %}{{ form.as_p }}{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/table.html b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/table.html new file mode 100644 index 000000000..4fa5e4254 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/table.html @@ -0,0 +1 @@ +{{ formset.management_form }}{% for form in formset %}{{ form.as_table }}{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/ul.html b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/ul.html new file mode 100644 index 000000000..272e1290e --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/formsets/ul.html @@ -0,0 +1 @@ +{{ formset.management_form }}{% for form in formset %}{{ form.as_ul }}{% endfor %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/label.html b/venv/Lib/site-packages/django/forms/templates/django/forms/label.html new file mode 100644 index 000000000..eb2a9f797 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/label.html @@ -0,0 +1 @@ +{% if use_tag %}{{ label }}{% else %}{{ label }}{% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/p.html b/venv/Lib/site-packages/django/forms/templates/django/forms/p.html new file mode 100644 index 000000000..1346937a3 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/p.html @@ -0,0 +1,20 @@ +{{ errors }} +{% if errors and not fields %} +

      {% for field in hidden_fields %}{{ field }}{% endfor %}

      +{% endif %} +{% for field, errors in fields %} + {{ errors }} + + {% if field.label %}{{ field.label_tag }}{% endif %} + {{ field }} + {% if field.help_text %} + {{ field.help_text|safe }} + {% endif %} + {% if forloop.last %} + {% for field in hidden_fields %}{{ field }}{% endfor %} + {% endif %} +

      +{% endfor %} +{% if not fields and not errors %} + {% for field in hidden_fields %}{{ field }}{% endfor %} +{% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/table.html b/venv/Lib/site-packages/django/forms/templates/django/forms/table.html new file mode 100644 index 000000000..d4aaafcf5 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/table.html @@ -0,0 +1,29 @@ +{% if errors %} + + + {{ errors }} + {% if not fields %} + {% for field in hidden_fields %}{{ field }}{% endfor %} + {% endif %} + + +{% endif %} +{% for field, errors in fields %} + + {% if field.label %}{{ field.label_tag }}{% endif %} + + {{ errors }} + {{ field }} + {% if field.help_text %} +
      + {{ field.help_text|safe }} + {% endif %} + {% if forloop.last %} + {% for field in hidden_fields %}{{ field }}{% endfor %} + {% endif %} + + +{% endfor %} +{% if not fields and not errors %} + {% for field in hidden_fields %}{{ field }}{% endfor %} +{% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/ul.html b/venv/Lib/site-packages/django/forms/templates/django/forms/ul.html new file mode 100644 index 000000000..ae38af652 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/ul.html @@ -0,0 +1,24 @@ +{% if errors %} +
    10. + {{ errors }} + {% if not fields %} + {% for field in hidden_fields %}{{ field }}{% endfor %} + {% endif %} +
    11. +{% endif %} +{% for field, errors in fields %} + + {{ errors }} + {% if field.label %}{{ field.label_tag }}{% endif %} + {{ field }} + {% if field.help_text %} + {{ field.help_text|safe }} + {% endif %} + {% if forloop.last %} + {% for field in hidden_fields %}{{ field }}{% endfor %} + {% endif %} + +{% endfor %} +{% if not fields and not errors %} + {% for field in hidden_fields %}{{ field }}{% endfor %} +{% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/attrs.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/attrs.html new file mode 100644 index 000000000..7a5592afc --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/attrs.html @@ -0,0 +1 @@ +{% for name, value in widget.attrs.items %}{% if value is not False %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %} \ No newline at end of file diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html new file mode 100644 index 000000000..bb9acbafd --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input_option.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html new file mode 100644 index 000000000..780899af4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html new file mode 100644 index 000000000..93812837f --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html @@ -0,0 +1,5 @@ +{% if widget.is_initial %}{{ widget.initial_text }}:
      {{ widget.value }}{% if not widget.required %} + +{% endif %}
      +{{ widget.input_text }}:{% endif %} + diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/date.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/date.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/date.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/datetime.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/datetime.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/datetime.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/email.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/email.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/email.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/file.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/file.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/file.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/hidden.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/hidden.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/hidden.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input.html new file mode 100644 index 000000000..9010a9214 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input.html @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input_option.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input_option.html new file mode 100644 index 000000000..48cd65b93 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/input_option.html @@ -0,0 +1 @@ +{% if widget.wrap_label %}{% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %} {{ widget.label }}{% endif %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html new file mode 100644 index 000000000..b9695deb0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiwidget.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html new file mode 100644 index 000000000..2a0fec6ec --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html @@ -0,0 +1,5 @@ +{% with id=widget.attrs.id %}{% for group, options, index in widget.optgroups %}{% if group %} +
      {% endif %}{% for option in options %}
      + {% include option.template_name with widget=option %}
      {% endfor %}{% if group %} +
      {% endif %}{% endfor %} +{% endwith %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html new file mode 100644 index 000000000..7e687a136 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html @@ -0,0 +1 @@ +{% spaceless %}{% for widget in widget.subwidgets %}{% include widget.template_name %}{% endfor %}{% endspaceless %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/number.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/number.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/number.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/password.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/password.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/password.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio.html new file mode 100644 index 000000000..780899af4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio_option.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio_option.html new file mode 100644 index 000000000..bb9acbafd --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/radio_option.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input_option.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select.html new file mode 100644 index 000000000..4d1f6b057 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select.html @@ -0,0 +1,5 @@ + diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_date.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_date.html new file mode 100644 index 000000000..32fda8260 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_date.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_option.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_option.html new file mode 100644 index 000000000..8d31961dd --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/select_option.html @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html new file mode 100644 index 000000000..32fda8260 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html new file mode 100644 index 000000000..32fda8260 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/text.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/text.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/text.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/textarea.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/textarea.html new file mode 100644 index 000000000..b86766c89 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/textarea.html @@ -0,0 +1,2 @@ + diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/time.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/time.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/time.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/url.html b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/url.html new file mode 100644 index 000000000..08b1e61c0 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/templates/django/forms/widgets/url.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/venv/Lib/site-packages/django/forms/utils.py b/venv/Lib/site-packages/django/forms/utils.py new file mode 100644 index 000000000..7d3bb5ad4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/utils.py @@ -0,0 +1,221 @@ +import json +from collections import UserList + +from django.conf import settings +from django.core.exceptions import ValidationError +from django.forms.renderers import get_default_renderer +from django.utils import timezone +from django.utils.html import escape, format_html_join +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ + + +def pretty_name(name): + """Convert 'first_name' to 'First name'.""" + if not name: + return "" + return name.replace("_", " ").capitalize() + + +def flatatt(attrs): + """ + Convert a dictionary of attributes to a single string. + The returned string will contain a leading space followed by key="value", + XML-style pairs. In the case of a boolean value, the key will appear + without a value. It is assumed that the keys do not need to be + XML-escaped. If the passed dictionary is empty, then return an empty + string. + + The result is passed through 'mark_safe' (by way of 'format_html_join'). + """ + key_value_attrs = [] + boolean_attrs = [] + for attr, value in attrs.items(): + if isinstance(value, bool): + if value: + boolean_attrs.append((attr,)) + elif value is not None: + key_value_attrs.append((attr, value)) + + return format_html_join("", ' {}="{}"', sorted(key_value_attrs)) + format_html_join( + "", " {}", sorted(boolean_attrs) + ) + + +class RenderableMixin: + def get_context(self): + raise NotImplementedError( + "Subclasses of RenderableMixin must provide a get_context() method." + ) + + def render(self, template_name=None, context=None, renderer=None): + return mark_safe( + (renderer or self.renderer).render( + template_name or self.template_name, + context or self.get_context(), + ) + ) + + __str__ = render + __html__ = render + + +class RenderableFormMixin(RenderableMixin): + def as_p(self): + """Render as

      elements.""" + return self.render(self.template_name_p) + + def as_table(self): + """Render as elements excluding the surrounding tag.""" + return self.render(self.template_name_table) + + def as_ul(self): + """Render as
    12. elements excluding the surrounding
        tag.""" + return self.render(self.template_name_ul) + + +class RenderableErrorMixin(RenderableMixin): + def as_json(self, escape_html=False): + return json.dumps(self.get_json_data(escape_html)) + + def as_text(self): + return self.render(self.template_name_text) + + def as_ul(self): + return self.render(self.template_name_ul) + + +class ErrorDict(dict, RenderableErrorMixin): + """ + A collection of errors that knows how to display itself in various formats. + + The dictionary keys are the field names, and the values are the errors. + """ + + template_name = "django/forms/errors/dict/default.html" + template_name_text = "django/forms/errors/dict/text.txt" + template_name_ul = "django/forms/errors/dict/ul.html" + + def __init__(self, *args, renderer=None, **kwargs): + super().__init__(*args, **kwargs) + self.renderer = renderer or get_default_renderer() + + def as_data(self): + return {f: e.as_data() for f, e in self.items()} + + def get_json_data(self, escape_html=False): + return {f: e.get_json_data(escape_html) for f, e in self.items()} + + def get_context(self): + return { + "errors": self.items(), + "error_class": "errorlist", + } + + +class ErrorList(UserList, list, RenderableErrorMixin): + """ + A collection of errors that knows how to display itself in various formats. + """ + + template_name = "django/forms/errors/list/default.html" + template_name_text = "django/forms/errors/list/text.txt" + template_name_ul = "django/forms/errors/list/ul.html" + + def __init__(self, initlist=None, error_class=None, renderer=None): + super().__init__(initlist) + + if error_class is None: + self.error_class = "errorlist" + else: + self.error_class = "errorlist {}".format(error_class) + self.renderer = renderer or get_default_renderer() + + def as_data(self): + return ValidationError(self.data).error_list + + def copy(self): + copy = super().copy() + copy.error_class = self.error_class + return copy + + def get_json_data(self, escape_html=False): + errors = [] + for error in self.as_data(): + message = next(iter(error)) + errors.append( + { + "message": escape(message) if escape_html else message, + "code": error.code or "", + } + ) + return errors + + def get_context(self): + return { + "errors": self, + "error_class": self.error_class, + } + + def __repr__(self): + return repr(list(self)) + + def __contains__(self, item): + return item in list(self) + + def __eq__(self, other): + return list(self) == other + + def __getitem__(self, i): + error = self.data[i] + if isinstance(error, ValidationError): + return next(iter(error)) + return error + + def __reduce_ex__(self, *args, **kwargs): + # The `list` reduce function returns an iterator as the fourth element + # that is normally used for repopulating. Since we only inherit from + # `list` for `isinstance` backward compatibility (Refs #17413) we + # nullify this iterator as it would otherwise result in duplicate + # entries. (Refs #23594) + info = super(UserList, self).__reduce_ex__(*args, **kwargs) + return info[:3] + (None, None) + + +# Utilities for time zone support in DateTimeField et al. + + +def from_current_timezone(value): + """ + When time zone support is enabled, convert naive datetimes + entered in the current time zone to aware datetimes. + """ + if settings.USE_TZ and value is not None and timezone.is_naive(value): + current_timezone = timezone.get_current_timezone() + try: + if not timezone._is_pytz_zone( + current_timezone + ) and timezone._datetime_ambiguous_or_imaginary(value, current_timezone): + raise ValueError("Ambiguous or non-existent time.") + return timezone.make_aware(value, current_timezone) + except Exception as exc: + raise ValidationError( + _( + "%(datetime)s couldn’t be interpreted " + "in time zone %(current_timezone)s; it " + "may be ambiguous or it may not exist." + ), + code="ambiguous_timezone", + params={"datetime": value, "current_timezone": current_timezone}, + ) from exc + return value + + +def to_current_timezone(value): + """ + When time zone support is enabled, convert aware datetimes + to naive datetimes in the current time zone for display. + """ + if settings.USE_TZ and value is not None and timezone.is_aware(value): + return timezone.make_naive(value) + return value diff --git a/venv/Lib/site-packages/django/forms/widgets.py b/venv/Lib/site-packages/django/forms/widgets.py new file mode 100644 index 000000000..12b9bbbd4 --- /dev/null +++ b/venv/Lib/site-packages/django/forms/widgets.py @@ -0,0 +1,1172 @@ +""" +HTML Widget classes +""" + +import copy +import datetime +import warnings +from collections import defaultdict +from itertools import chain + +from django.forms.utils import to_current_timezone +from django.templatetags.static import static +from django.utils import formats +from django.utils.datastructures import OrderedSet +from django.utils.dates import MONTHS +from django.utils.formats import get_format +from django.utils.html import format_html, html_safe +from django.utils.regex_helper import _lazy_re_compile +from django.utils.safestring import mark_safe +from django.utils.topological_sort import CyclicDependencyError, stable_topological_sort +from django.utils.translation import gettext_lazy as _ + +from .renderers import get_default_renderer + +__all__ = ( + "Media", + "MediaDefiningClass", + "Widget", + "TextInput", + "NumberInput", + "EmailInput", + "URLInput", + "PasswordInput", + "HiddenInput", + "MultipleHiddenInput", + "FileInput", + "ClearableFileInput", + "Textarea", + "DateInput", + "DateTimeInput", + "TimeInput", + "CheckboxInput", + "Select", + "NullBooleanSelect", + "SelectMultiple", + "RadioSelect", + "CheckboxSelectMultiple", + "MultiWidget", + "SplitDateTimeWidget", + "SplitHiddenDateTimeWidget", + "SelectDateWidget", +) + +MEDIA_TYPES = ("css", "js") + + +class MediaOrderConflictWarning(RuntimeWarning): + pass + + +@html_safe +class Media: + def __init__(self, media=None, css=None, js=None): + if media is not None: + css = getattr(media, "css", {}) + js = getattr(media, "js", []) + else: + if css is None: + css = {} + if js is None: + js = [] + self._css_lists = [css] + self._js_lists = [js] + + def __repr__(self): + return "Media(css=%r, js=%r)" % (self._css, self._js) + + def __str__(self): + return self.render() + + @property + def _css(self): + css = defaultdict(list) + for css_list in self._css_lists: + for medium, sublist in css_list.items(): + css[medium].append(sublist) + return {medium: self.merge(*lists) for medium, lists in css.items()} + + @property + def _js(self): + return self.merge(*self._js_lists) + + def render(self): + return mark_safe( + "\n".join( + chain.from_iterable( + getattr(self, "render_" + name)() for name in MEDIA_TYPES + ) + ) + ) + + def render_js(self): + return [ + format_html('', self.absolute_path(path)) + for path in self._js + ] + + def render_css(self): + # To keep rendering order consistent, we can't just iterate over items(). + # We need to sort the keys, and iterate over the sorted list. + media = sorted(self._css) + return chain.from_iterable( + [ + format_html( + '', + self.absolute_path(path), + medium, + ) + for path in self._css[medium] + ] + for medium in media + ) + + def absolute_path(self, path): + """ + Given a relative or absolute path to a static asset, return an absolute + path. An absolute path will be returned unchanged while a relative path + will be passed to django.templatetags.static.static(). + """ + if path.startswith(("http://", "https://", "/")): + return path + return static(path) + + def __getitem__(self, name): + """Return a Media object that only contains media of the given type.""" + if name in MEDIA_TYPES: + return Media(**{str(name): getattr(self, "_" + name)}) + raise KeyError('Unknown media type "%s"' % name) + + @staticmethod + def merge(*lists): + """ + Merge lists while trying to keep the relative order of the elements. + Warn if the lists have the same elements in a different relative order. + + For static assets it can be important to have them included in the DOM + in a certain order. In JavaScript you may not be able to reference a + global or in CSS you might want to override a style. + """ + dependency_graph = defaultdict(set) + all_items = OrderedSet() + for list_ in filter(None, lists): + head = list_[0] + # The first items depend on nothing but have to be part of the + # dependency graph to be included in the result. + dependency_graph.setdefault(head, set()) + for item in list_: + all_items.add(item) + # No self dependencies + if head != item: + dependency_graph[item].add(head) + head = item + try: + return stable_topological_sort(all_items, dependency_graph) + except CyclicDependencyError: + warnings.warn( + "Detected duplicate Media files in an opposite order: {}".format( + ", ".join(repr(list_) for list_ in lists) + ), + MediaOrderConflictWarning, + ) + return list(all_items) + + def __add__(self, other): + combined = Media() + combined._css_lists = self._css_lists[:] + combined._js_lists = self._js_lists[:] + for item in other._css_lists: + if item and item not in self._css_lists: + combined._css_lists.append(item) + for item in other._js_lists: + if item and item not in self._js_lists: + combined._js_lists.append(item) + return combined + + +def media_property(cls): + def _media(self): + # Get the media property of the superclass, if it exists + sup_cls = super(cls, self) + try: + base = sup_cls.media + except AttributeError: + base = Media() + + # Get the media definition for this class + definition = getattr(cls, "Media", None) + if definition: + extend = getattr(definition, "extend", True) + if extend: + if extend is True: + m = base + else: + m = Media() + for medium in extend: + m = m + base[medium] + return m + Media(definition) + return Media(definition) + return base + + return property(_media) + + +class MediaDefiningClass(type): + """ + Metaclass for classes that can have media definitions. + """ + + def __new__(mcs, name, bases, attrs): + new_class = super().__new__(mcs, name, bases, attrs) + + if "media" not in attrs: + new_class.media = media_property(new_class) + + return new_class + + +class Widget(metaclass=MediaDefiningClass): + needs_multipart_form = False # Determines does this widget need multipart form + is_localized = False + is_required = False + supports_microseconds = True + + def __init__(self, attrs=None): + self.attrs = {} if attrs is None else attrs.copy() + + def __deepcopy__(self, memo): + obj = copy.copy(self) + obj.attrs = self.attrs.copy() + memo[id(self)] = obj + return obj + + @property + def is_hidden(self): + return self.input_type == "hidden" if hasattr(self, "input_type") else False + + def subwidgets(self, name, value, attrs=None): + context = self.get_context(name, value, attrs) + yield context["widget"] + + def format_value(self, value): + """ + Return a value as it should appear when rendered in a template. + """ + if value == "" or value is None: + return None + if self.is_localized: + return formats.localize_input(value) + return str(value) + + def get_context(self, name, value, attrs): + return { + "widget": { + "name": name, + "is_hidden": self.is_hidden, + "required": self.is_required, + "value": self.format_value(value), + "attrs": self.build_attrs(self.attrs, attrs), + "template_name": self.template_name, + }, + } + + def render(self, name, value, attrs=None, renderer=None): + """Render the widget as an HTML string.""" + context = self.get_context(name, value, attrs) + return self._render(self.template_name, context, renderer) + + def _render(self, template_name, context, renderer=None): + if renderer is None: + renderer = get_default_renderer() + return mark_safe(renderer.render(template_name, context)) + + def build_attrs(self, base_attrs, extra_attrs=None): + """Build an attribute dictionary.""" + return {**base_attrs, **(extra_attrs or {})} + + def value_from_datadict(self, data, files, name): + """ + Given a dictionary of data and this widget's name, return the value + of this widget or None if it's not provided. + """ + return data.get(name) + + def value_omitted_from_data(self, data, files, name): + return name not in data + + def id_for_label(self, id_): + """ + Return the HTML ID attribute of this Widget for use by a
    13. + + + + + + + + + {% if raising_view_name %} + + + + + {% endif %} +
      Request Method:{{ request.META.REQUEST_METHOD }}
      Request URL:{{ request.build_absolute_uri }}
      Raised by:{{ raising_view_name }}
      + +

      + {% if urlpatterns %} +

      + Using the URLconf defined in {{ urlconf }}, + Django tried these URL patterns, in this order: +

      +
        + {% for pattern in urlpatterns %} +
      1. + {% for pat in pattern %} + {{ pat.pattern }} + {% if forloop.last and pat.name %}[name='{{ pat.name }}']{% endif %} + {% endfor %} +
      2. + {% endfor %} +
      +

      + {% if request_path %} + The current path, {{ request_path }}, + {% else %} + The empty path + {% endif %} + {% if resolved %}matched the last one.{% else %}didn’t match any of these.{% endif %} +

      + {% endif %} +
      + +
      +

      + You’re seeing this error because you have DEBUG = True in + your Django settings file. Change that to False, and Django + will display a standard 404 page. +

      +
      + + diff --git a/venv/Lib/site-packages/django/views/templates/technical_500.html b/venv/Lib/site-packages/django/views/templates/technical_500.html new file mode 100644 index 000000000..5ace2a136 --- /dev/null +++ b/venv/Lib/site-packages/django/views/templates/technical_500.html @@ -0,0 +1,482 @@ + + + + + + {% if exception_type %}{{ exception_type }}{% else %}Report{% endif %} + {% if request %} at {{ request.path_info }}{% endif %} + + {% if not is_email %} + + {% endif %} + + +
      +

      {% if exception_type %}{{ exception_type }}{% else %}Report{% endif %} + {% if request %} at {{ request.path_info }}{% endif %}

      +
      {% if exception_value %}{{ exception_value|force_escape }}{% else %}No exception message supplied{% endif %}
      + +{% if request %} + + + + + + + + +{% endif %} + + + + +{% if exception_type %} + + + + +{% endif %} +{% if exception_type and exception_value %} + + + + +{% endif %} +{% if lastframe %} + + + + +{% endif %} + + + + + + + + + + + + + + + + +
      Request Method:{{ request.META.REQUEST_METHOD }}
      Request URL:{{ request_insecure_uri }}
      Django Version:{{ django_version_info }}
      Exception Type:{{ exception_type }}
      Exception Value:
      {{ exception_value|force_escape }}
      Exception Location:{{ lastframe.filename }}, line {{ lastframe.lineno }}, in {{ lastframe.function }}
      Python Executable:{{ sys_executable }}
      Python Version:{{ sys_version_info }}
      Python Path:
      {{ sys_path|pprint }}
      Server time:{{server_time|date:"r"}}
      +
      +{% if unicode_hint %} +
      +

      Unicode error hint

      +

      The string that could not be encoded/decoded was: {{ unicode_hint }}

      +
      +{% endif %} +{% if template_does_not_exist %} +
      +

      Template-loader postmortem

      + {% if postmortem %} +

      Django tried loading these templates, in this order:

      + {% for entry in postmortem %} +

      Using engine {{ entry.backend.name }}:

      +
        + {% if entry.tried %} + {% for attempt in entry.tried %} +
      • {{ attempt.0.loader_name }}: {{ attempt.0.name }} ({{ attempt.1 }})
      • + {% endfor %} + {% else %} +
      • This engine did not provide a list of tried templates.
      • + {% endif %} +
      + {% endfor %} + {% else %} +

      No templates were found because your 'TEMPLATES' setting is not configured.

      + {% endif %} +
      +{% endif %} +{% if template_info %} +
      +

      Error during template rendering

      +

      In template {{ template_info.name }}, error at line {{ template_info.line }}

      +

      {{ template_info.message }}

      + + {% for source_line in template_info.source_lines %} + {% if source_line.0 == template_info.line %} + + + + {% else %} + + + {% endif %} + {% endfor %} +
      {{ source_line.0 }}{{ template_info.before }}{{ template_info.during }}{{ template_info.after }}
      {{ source_line.0 }}{{ source_line.1 }}
      +
      +{% endif %} +{% if frames %} +
      +

      Traceback{% if not is_email %} + Switch to copy-and-paste view{% endif %} +

      +
      +
        + {% for frame in frames %} + {% ifchanged frame.exc_cause %}{% if frame.exc_cause %} +
      • + {% if frame.exc_cause_explicit %} + The above exception ({{ frame.exc_cause|force_escape }}) was the direct cause of the following exception: + {% else %} + During handling of the above exception ({{ frame.exc_cause|force_escape }}), another exception occurred: + {% endif %} +

      • + {% endif %}{% endifchanged %} +
      • + {% if not frame.tb %} + {% if forloop.first %}None{% else %}Traceback: None{% endif %} + {% else %} + {{ frame.filename }}, line {{ frame.lineno }}, in {{ frame.function }} + {% endif %} + + {% if frame.context_line %} +
        + {% if frame.pre_context and not is_email %} +
          + {% for line in frame.pre_context %} +
        1. {{ line }}
        2. + {% endfor %} +
        + {% endif %} +
          +
        1. {{ frame.context_line }}
          {% if not is_email %} {% endif %}
        2. +
        + {% if frame.post_context and not is_email %} +
          + {% for line in frame.post_context %} +
        1. {{ line }}
        2. + {% endfor %} +
        + {% endif %} +
        + {% endif %} + + {% if frame.vars %} + {% if is_email %} +
        +

        Local Vars

        +
        + {% else %} +
        + Local vars + {% endif %} + + + + + + + + + {% for var in frame.vars|dictsort:0 %} + + + + + {% endfor %} + +
        VariableValue
        {{ var.0 }}
        {{ var.1 }}
        + {% if not is_email %}
        {% endif %} + {% endif %} +
      • + {% endfor %} +
      +
      +{% if not is_email %} +
      +
      + + + + + +

      + +
      +
      +{% endif %} +
      +{% endif %} + +
      +

      Request information

      + +{% if request %} + {% if user_str %} +

      USER

      +

      {{ user_str }}

      + {% endif %} + +

      GET

      + {% if request.GET %} + + + + + + + + + {% for k, v in request_GET_items %} + + + + + {% endfor %} + +
      VariableValue
      {{ k }}
      {{ v|pprint }}
      + {% else %} +

      No GET data

      + {% endif %} + +

      POST

      + {% if filtered_POST_items %} + + + + + + + + + {% for k, v in filtered_POST_items %} + + + + + {% endfor %} + +
      VariableValue
      {{ k }}
      {{ v|pprint }}
      + {% else %} +

      No POST data

      + {% endif %} +

      FILES

      + {% if request.FILES %} + + + + + + + + + {% for k, v in request_FILES_items %} + + + + + {% endfor %} + +
      VariableValue
      {{ k }}
      {{ v|pprint }}
      + {% else %} +

      No FILES data

      + {% endif %} + + + + {% if request.COOKIES %} + + + + + + + + + {% for k, v in request_COOKIES_items %} + + + + + {% endfor %} + +
      VariableValue
      {{ k }}
      {{ v|pprint }}
      + {% else %} +

      No cookie data

      + {% endif %} + +

      META

      + + + + + + + + + {% for var in request_meta.items|dictsort:0 %} + + + + + {% endfor %} + +
      VariableValue
      {{ var.0 }}
      {{ var.1|pprint }}
      +{% else %} +

      Request data not supplied

      +{% endif %} + +

      Settings

      +

      Using settings module {{ settings.SETTINGS_MODULE }}

      + + + + + + + + + {% for var in settings.items|dictsort:0 %} + + + + + {% endfor %} + +
      SettingValue
      {{ var.0 }}
      {{ var.1|pprint }}
      + +
      +{% if not is_email %} +
      +

      + You’re seeing this error because you have DEBUG = True in your + Django settings file. Change that to False, and Django will + display a standard page generated by the handler for this status code. +

      +
      +{% endif %} + + diff --git a/venv/Lib/site-packages/django/views/templates/technical_500.txt b/venv/Lib/site-packages/django/views/templates/technical_500.txt new file mode 100644 index 000000000..5c86a3139 --- /dev/null +++ b/venv/Lib/site-packages/django/views/templates/technical_500.txt @@ -0,0 +1,65 @@ +{% firstof exception_type 'Report' %}{% if request %} at {{ request.path_info }}{% endif %} +{% firstof exception_value 'No exception message supplied' %} +{% if request %} +Request Method: {{ request.META.REQUEST_METHOD }} +Request URL: {{ request_insecure_uri }}{% endif %} +Django Version: {{ django_version_info }} +Python Executable: {{ sys_executable }} +Python Version: {{ sys_version_info }} +Python Path: {{ sys_path }} +Server time: {{server_time|date:"r"}} +Installed Applications: +{{ settings.INSTALLED_APPS|pprint }} +Installed Middleware: +{{ settings.MIDDLEWARE|pprint }} +{% if template_does_not_exist %}Template loader postmortem +{% if postmortem %}Django tried loading these templates, in this order: +{% for entry in postmortem %} +Using engine {{ entry.backend.name }}: +{% if entry.tried %}{% for attempt in entry.tried %} * {{ attempt.0.loader_name }}: {{ attempt.0.name }} ({{ attempt.1 }}) +{% endfor %}{% else %} This engine did not provide a list of tried templates. +{% endif %}{% endfor %} +{% else %}No templates were found because your 'TEMPLATES' setting is not configured. +{% endif %} +{% endif %}{% if template_info %} +Template error: +In template {{ template_info.name }}, error at line {{ template_info.line }} + {{ template_info.message }} +{% for source_line in template_info.source_lines %}{% if source_line.0 == template_info.line %} {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}{% else %} {{ source_line.0 }} : {{ source_line.1 }}{% endif %}{% endfor %}{% endif %}{% if frames %} + +Traceback (most recent call last): +{% for frame in frames %}{% ifchanged frame.exc_cause %}{% if frame.exc_cause %} +{% if frame.exc_cause_explicit %}The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception:{% else %}During handling of the above exception ({{ frame.exc_cause }}), another exception occurred:{% endif %} +{% endif %}{% endifchanged %} {% if frame.tb %}File "{{ frame.filename }}"{% if frame.context_line %}, line {{ frame.lineno }}{% endif %}, in {{ frame.function }} +{% if frame.context_line %} {% spaceless %}{{ frame.context_line }}{% endspaceless %}{% endif %}{% else %}{% if forloop.first %}None{% else %}Traceback: None{% endif %}{% endif %} +{% endfor %} +{% if exception_type %}Exception Type: {{ exception_type }}{% if request %} at {{ request.path_info }}{% endif %} +{% if exception_value %}Exception Value: {{ exception_value }}{% endif %}{% endif %}{% endif %} +{% if request %}Request information: +{% if user_str %}USER: {{ user_str }}{% endif %} + +GET:{% for k, v in request_GET_items %} +{{ k }} = {{ v|stringformat:"r" }}{% empty %} No GET data{% endfor %} + +POST:{% for k, v in filtered_POST_items %} +{{ k }} = {{ v|stringformat:"r" }}{% empty %} No POST data{% endfor %} + +FILES:{% for k, v in request_FILES_items %} +{{ k }} = {{ v|stringformat:"r" }}{% empty %} No FILES data{% endfor %} + +COOKIES:{% for k, v in request_COOKIES_items %} +{{ k }} = {{ v|stringformat:"r" }}{% empty %} No cookie data{% endfor %} + +META:{% for k, v in request_meta.items|dictsort:0 %} +{{ k }} = {{ v|stringformat:"r" }}{% endfor %} +{% else %}Request data not supplied +{% endif %} +Settings: +Using settings module {{ settings.SETTINGS_MODULE }}{% for k, v in settings.items|dictsort:0 %} +{{ k }} = {{ v|stringformat:"r" }}{% endfor %} + +{% if not is_email %} +You’re seeing this error because you have DEBUG = True in your +Django settings file. Change that to False, and Django will +display a standard page generated by the handler for this status code. +{% endif %} diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/INSTALLER b/venv/Lib/site-packages/pip-22.0.4.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/LICENSE.txt b/venv/Lib/site-packages/pip-22.0.4.dist-info/LICENSE.txt new file mode 100644 index 000000000..8e7b65eaf --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/METADATA b/venv/Lib/site-packages/pip-22.0.4.dist-info/METADATA new file mode 100644 index 000000000..4e683996d --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/METADATA @@ -0,0 +1,92 @@ +Metadata-Version: 2.1 +Name: pip +Version: 22.0.4 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: distutils-sig@python.org +License: MIT +Project-URL: Documentation, https://pip.pypa.io +Project-URL: Source, https://github.com/pypa/pip +Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=3.7 +License-File: LICENSE.txt + +pip - The Python Package Installer +================================== + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.org/project/pip/ + +.. image:: https://readthedocs.org/projects/pip/badge/?version=latest + :target: https://pip.pypa.io/en/latest + +pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. + +Please take a look at our documentation for how to install and use pip: + +* `Installation`_ +* `Usage`_ + +We release updates regularly, with a new version every 3 months. Find more details in our documentation: + +* `Release notes`_ +* `Release process`_ + +In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right. + +**Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3. + +If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: + +* `Issue tracking`_ +* `Discourse channel`_ +* `User IRC`_ + +If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: + +* `GitHub page`_ +* `Development documentation`_ +* `Development mailing list`_ +* `Development IRC`_ + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. + +.. _package installer: https://packaging.python.org/guides/tool-recommendations/ +.. _Python Package Index: https://pypi.org +.. _Installation: https://pip.pypa.io/en/stable/installation/ +.. _Usage: https://pip.pypa.io/en/stable/ +.. _Release notes: https://pip.pypa.io/en/stable/news.html +.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ +.. _GitHub page: https://github.com/pypa/pip +.. _Development documentation: https://pip.pypa.io/en/latest/development +.. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html +.. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020 +.. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html +.. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support +.. _Issue tracking: https://github.com/pypa/pip/issues +.. _Discourse channel: https://discuss.python.org/c/packaging +.. _Development mailing list: https://mail.python.org/mailman3/lists/distutils-sig.python.org/ +.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa +.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev +.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md + + diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/RECORD b/venv/Lib/site-packages/pip-22.0.4.dist-info/RECORD new file mode 100644 index 000000000..43d8d2585 --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/RECORD @@ -0,0 +1,1053 @@ +../../Scripts/pip.exe,sha256=kdb4AzWxLAVu-_JTGOF0KX8pDYe1p5lWSeiWcmGpBOY,106380 +../../Scripts/pip3.10.exe,sha256=kdb4AzWxLAVu-_JTGOF0KX8pDYe1p5lWSeiWcmGpBOY,106380 +../../Scripts/pip3.exe,sha256=kdb4AzWxLAVu-_JTGOF0KX8pDYe1p5lWSeiWcmGpBOY,106380 +pip-22.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-22.0.4.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 +pip-22.0.4.dist-info/METADATA,sha256=bGtDzdgW1AF93Nx32ySc78yQHtHkOrRD146Dvsz85CM,4166 +pip-22.0.4.dist-info/RECORD,, +pip-22.0.4.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip-22.0.4.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +pip-22.0.4.dist-info/entry_points.txt,sha256=5ExSa1s54zSPNA_1epJn5SX06786S8k5YHwskMvVYzw,125 +pip-22.0.4.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/__init__.py,sha256=b_avKym1xgWv1_1CobpKDp59sdjm_9nwB7sencJQUEY,357 +pip/__main__.py,sha256=mXwWDftNLMKfwVqKFWGE_uuBZvGSIiUELhLkeysIuZc,1198 +pip/__pycache__/__init__.cpython-310.pyc,, +pip/__pycache__/__main__.cpython-310.pyc,, +pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573 +pip/_internal/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/__pycache__/build_env.cpython-310.pyc,, +pip/_internal/__pycache__/cache.cpython-310.pyc,, +pip/_internal/__pycache__/configuration.cpython-310.pyc,, +pip/_internal/__pycache__/exceptions.cpython-310.pyc,, +pip/_internal/__pycache__/main.cpython-310.pyc,, +pip/_internal/__pycache__/pyproject.cpython-310.pyc,, +pip/_internal/__pycache__/self_outdated_check.cpython-310.pyc,, +pip/_internal/__pycache__/wheel_builder.cpython-310.pyc,, +pip/_internal/build_env.py,sha256=QAsnxJFvj74jS2cZUcxk7zXLvrtAYiRL0EkSPkpSJTo,9739 +pip/_internal/cache.py,sha256=71eaYwrls34HJ6gzbmmYiotiKhPNFTM_tqYJXD5nf3s,9441 +pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 +pip/_internal/cli/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/cli/__pycache__/autocompletion.cpython-310.pyc,, +pip/_internal/cli/__pycache__/base_command.cpython-310.pyc,, +pip/_internal/cli/__pycache__/cmdoptions.cpython-310.pyc,, +pip/_internal/cli/__pycache__/command_context.cpython-310.pyc,, +pip/_internal/cli/__pycache__/main.cpython-310.pyc,, +pip/_internal/cli/__pycache__/main_parser.cpython-310.pyc,, +pip/_internal/cli/__pycache__/parser.cpython-310.pyc,, +pip/_internal/cli/__pycache__/progress_bars.cpython-310.pyc,, +pip/_internal/cli/__pycache__/req_command.cpython-310.pyc,, +pip/_internal/cli/__pycache__/spinners.cpython-310.pyc,, +pip/_internal/cli/__pycache__/status_codes.cpython-310.pyc,, +pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676 +pip/_internal/cli/base_command.py,sha256=zYHdQssEkCvWHYf3dtIApaVaxOwAh3maA61nVxaZF2M,8152 +pip/_internal/cli/cmdoptions.py,sha256=TTYO0nxK9YyLwrXk1NHrn7X3dbGoqdV02Yb8kdVoVhc,28526 +pip/_internal/cli/command_context.py,sha256=a1pBBvvGLDiZ1Kw64_4tT6HmRTwYDoYy8JFgG5Czn7s,760 +pip/_internal/cli/main.py,sha256=ioJ8IVlb2K1qLOxR-tXkee9lURhYV89CDM71MKag7YY,2472 +pip/_internal/cli/main_parser.py,sha256=Q9TnytfuC5Z2JSjBFWVGtEdYLFy7rukNIb04movHdAo,2614 +pip/_internal/cli/parser.py,sha256=CDXTuFr2UD8ozOlZYf1KDziQdo9-X_IaYOiUcyJQwrA,10788 +pip/_internal/cli/progress_bars.py,sha256=_52w11WoZrvDSR3oItLWvLrEZFUKAfLf4Y6I6WtOnIU,10339 +pip/_internal/cli/req_command.py,sha256=VwqonOy18QwZsRsVjHhp-6w15fG9x3Ltwoa8yJqQno8,18669 +pip/_internal/cli/spinners.py,sha256=TFhjxtOnLeNJ5YmRvQm4eKPgPbJNkZiqO8jOXuxRaYU,5076 +pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 +pip/_internal/commands/__init__.py,sha256=Vc1HjsLEtyCh7506OozPHPKXe2Hk-z9cFkFF3BMj1lM,3736 +pip/_internal/commands/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/commands/__pycache__/cache.cpython-310.pyc,, +pip/_internal/commands/__pycache__/check.cpython-310.pyc,, +pip/_internal/commands/__pycache__/completion.cpython-310.pyc,, +pip/_internal/commands/__pycache__/configuration.cpython-310.pyc,, +pip/_internal/commands/__pycache__/debug.cpython-310.pyc,, +pip/_internal/commands/__pycache__/download.cpython-310.pyc,, +pip/_internal/commands/__pycache__/freeze.cpython-310.pyc,, +pip/_internal/commands/__pycache__/hash.cpython-310.pyc,, +pip/_internal/commands/__pycache__/help.cpython-310.pyc,, +pip/_internal/commands/__pycache__/index.cpython-310.pyc,, +pip/_internal/commands/__pycache__/install.cpython-310.pyc,, +pip/_internal/commands/__pycache__/list.cpython-310.pyc,, +pip/_internal/commands/__pycache__/search.cpython-310.pyc,, +pip/_internal/commands/__pycache__/show.cpython-310.pyc,, +pip/_internal/commands/__pycache__/uninstall.cpython-310.pyc,, +pip/_internal/commands/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/commands/cache.py,sha256=p9gvc6W_xgxE2zO0o8NXqO1gGJEinEK42qEC-a7Cnuk,7524 +pip/_internal/commands/check.py,sha256=0gjXR7j36xJT5cs2heYU_dfOfpnFfzX8OoPNNoKhqdM,1685 +pip/_internal/commands/completion.py,sha256=kTG_I1VR3N5kGC4Ma9pQTSoY9Q1URCrNyseHSQ-rCL4,2958 +pip/_internal/commands/configuration.py,sha256=arE8vLstjBg-Ar1krXF-bBmT1qBtnL7Fpk-NVh38a0U,8944 +pip/_internal/commands/debug.py,sha256=krET-y45CnQzXwKR1qA3M_tJE4LE2vnQtm3yfGyDSnE,6629 +pip/_internal/commands/download.py,sha256=gVIAEOcpWolhRj9hl89Qzn52G2b_pcZ8naXhxaXobdo,4942 +pip/_internal/commands/freeze.py,sha256=gCjoD6foBZPBAAYx5t8zZLkJhsF_ZRtnb3dPuD7beO8,2951 +pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703 +pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132 +pip/_internal/commands/index.py,sha256=8pYkICUJlccjm3E83b7UuZ5DtOfLh1N7ZHXAgkajjHo,4849 +pip/_internal/commands/install.py,sha256=YVygBF6vfrNi0jmdNBCM6bcoWb7vaALEGG1--8Mmf88,27893 +pip/_internal/commands/list.py,sha256=tTjZ7u0VIh3uhnX231Q9pwt6ObT_zrDfixRQvgpJAvM,12221 +pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697 +pip/_internal/commands/show.py,sha256=2VicM3jF0YWgn4O1jG_QF5oxOT0ln57VDu1NE6hqWcM,5859 +pip/_internal/commands/uninstall.py,sha256=DNTYAGJNljMO_YYBxrpcwj0FEl7lo_P55_98O6g2TNk,3526 +pip/_internal/commands/wheel.py,sha256=7HAjLclZxIzBrX6JmhmGBVxH5xrjaBYCtSdpQi1pWCE,6206 +pip/_internal/configuration.py,sha256=qmCX3uuVM73PQeAuWQHic22bhops8s31B8k02nFAoiQ,13171 +pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 +pip/_internal/distributions/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/distributions/__pycache__/base.cpython-310.pyc,, +pip/_internal/distributions/__pycache__/installed.cpython-310.pyc,, +pip/_internal/distributions/__pycache__/sdist.cpython-310.pyc,, +pip/_internal/distributions/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/distributions/base.py,sha256=3FUYD8Gb4YuSu3pggC_FRctZBDbpm5ZK89tPksIUjoE,1172 +pip/_internal/distributions/installed.py,sha256=HzfNRu3smoOm54m8H2iK6LHzBx6_DEnka4OPEsizbXg,680 +pip/_internal/distributions/sdist.py,sha256=0nJvU1RhZtbwaeYtLbzSwYrbGRcY6IgNsWdEhAHROK8,5499 +pip/_internal/distributions/wheel.py,sha256=-NgzdIs-w_hcer_U81yzgpVTljJRg5m79xufqvbjv0s,1115 +pip/_internal/exceptions.py,sha256=U-dV1ixkSz6NAU6Aw9dosKi2EzZ5D3BA7ilYZuTLKeU,20912 +pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30 +pip/_internal/index/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/index/__pycache__/collector.cpython-310.pyc,, +pip/_internal/index/__pycache__/package_finder.cpython-310.pyc,, +pip/_internal/index/__pycache__/sources.cpython-310.pyc,, +pip/_internal/index/collector.py,sha256=E4yZHzlzPtaXg2BxaugrNg1Jwtwgs4gC-Q_0bzYrBU4,19671 +pip/_internal/index/package_finder.py,sha256=9UVg-7582nYNEWa0cIIl8otzPm4mlfyrQVuozAcssLo,36783 +pip/_internal/index/sources.py,sha256=SVyPitv08-Qalh2_Bk5diAJ9GAA_d-a93koouQodAG0,6557 +pip/_internal/locations/__init__.py,sha256=ergvPwlfNTmQYFmaRYbj--ZwTN5izgTL9KE5d0FB7-8,17362 +pip/_internal/locations/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/locations/__pycache__/_distutils.cpython-310.pyc,, +pip/_internal/locations/__pycache__/_sysconfig.cpython-310.pyc,, +pip/_internal/locations/__pycache__/base.cpython-310.pyc,, +pip/_internal/locations/_distutils.py,sha256=Sk7tw8ZP1DWMYJ8MibABsa8IME2Ejv1PKeGlYQCBTZc,5871 +pip/_internal/locations/_sysconfig.py,sha256=LQNKTJKyjVqxXaPntlBwdUqTG1xwYf6GVCKMbyRJx5M,7918 +pip/_internal/locations/base.py,sha256=x5D1ONktmPJd8nnUTh-ELsAJ7fiXA-k-0a_vhfi2_Us,1579 +pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340 +pip/_internal/metadata/__init__.py,sha256=iGoDbe_iTXQTIAEVy9f7dm-VQfZANO8kkwFr1CpqxqI,2036 +pip/_internal/metadata/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/metadata/__pycache__/base.cpython-310.pyc,, +pip/_internal/metadata/__pycache__/pkg_resources.cpython-310.pyc,, +pip/_internal/metadata/base.py,sha256=SCRPtShrtPy0lfFxuaFTgJJHsRXToGFToQUAZoBBbeA,19429 +pip/_internal/metadata/pkg_resources.py,sha256=wAnEtrcgH9YtV996MfoBjR2hGLHvi3uxk0vUOHbqBak,9456 +pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 +pip/_internal/models/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/models/__pycache__/candidate.cpython-310.pyc,, +pip/_internal/models/__pycache__/direct_url.cpython-310.pyc,, +pip/_internal/models/__pycache__/format_control.cpython-310.pyc,, +pip/_internal/models/__pycache__/index.cpython-310.pyc,, +pip/_internal/models/__pycache__/link.cpython-310.pyc,, +pip/_internal/models/__pycache__/scheme.cpython-310.pyc,, +pip/_internal/models/__pycache__/search_scope.cpython-310.pyc,, +pip/_internal/models/__pycache__/selection_prefs.cpython-310.pyc,, +pip/_internal/models/__pycache__/target_python.cpython-310.pyc,, +pip/_internal/models/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWUnCPQ,990 +pip/_internal/models/direct_url.py,sha256=7XtGQSLLDQb5ZywI2EMnnLcddtf5CJLx44lMtTHPxFw,6350 +pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520 +pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 +pip/_internal/models/link.py,sha256=hoT_qsOBAgLBm9GKqpBrNF_mrEXeGXQE-aH_RX2cGgg,9817 +pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738 +pip/_internal/models/search_scope.py,sha256=LwloG0PJAmtI1hFXIypsD95kWE9xfR5hf_a2v1Vw7sk,4520 +pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907 +pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858 +pip/_internal/models/wheel.py,sha256=hN9Ub-m-cAJCajCcQHyQNsqpcDCbPPDlEzBDwaBMc14,3500 +pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 +pip/_internal/network/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/network/__pycache__/auth.cpython-310.pyc,, +pip/_internal/network/__pycache__/cache.cpython-310.pyc,, +pip/_internal/network/__pycache__/download.cpython-310.pyc,, +pip/_internal/network/__pycache__/lazy_wheel.cpython-310.pyc,, +pip/_internal/network/__pycache__/session.cpython-310.pyc,, +pip/_internal/network/__pycache__/utils.cpython-310.pyc,, +pip/_internal/network/__pycache__/xmlrpc.cpython-310.pyc,, +pip/_internal/network/auth.py,sha256=a3C7Xaa8kTJjXkdi_wrUjqaySc8Z9Yz7U6QIbXfzMyc,12190 +pip/_internal/network/cache.py,sha256=FJ3uTUo3wgf2KHmeZ3ltN9x3tQoy_0X6qNsRtNXsuL0,2131 +pip/_internal/network/download.py,sha256=12Ef_L7MlhNUN_0-n_3DggozWJER8c9J0us16cbvkKA,6062 +pip/_internal/network/lazy_wheel.py,sha256=1b8ZJ1w4bSBzpGzGwJR_CL2yQ6AFIwWQkS1vbPPw2XU,7627 +pip/_internal/network/session.py,sha256=38IKGKC64MTVUIH5XOR1hr2pOCzp39RccykdmGAvqRU,16729 +pip/_internal/network/utils.py,sha256=igLlTu_-q0LmL8FdJKq-Uj7AT_owrQ-T9FfyarkhK5U,4059 +pip/_internal/network/xmlrpc.py,sha256=AzQgG4GgS152_cqmGr_Oz2MIXsCal-xfsis7fA7nmU0,1791 +pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/operations/__pycache__/check.cpython-310.pyc,, +pip/_internal/operations/__pycache__/freeze.cpython-310.pyc,, +pip/_internal/operations/__pycache__/prepare.cpython-310.pyc,, +pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/build/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/metadata.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/metadata_editable.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/wheel_editable.cpython-310.pyc,, +pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-310.pyc,, +pip/_internal/operations/build/metadata.py,sha256=ES_uRmAvhrNm_nDTpZxshBfUsvnXtkj-g_4rZrH9Rww,1404 +pip/_internal/operations/build/metadata_editable.py,sha256=_Rai0VZjxoeJUkjkuICrq45LtjwFoDOveosMYH43rKc,1456 +pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198 +pip/_internal/operations/build/wheel.py,sha256=AO9XnTGhTgHtZmU8Dkbfo1OGr41rBuSDjIgAa4zUKgE,1063 +pip/_internal/operations/build/wheel_editable.py,sha256=TVETY-L_M_dSEKBhTIcQOP75zKVXw8tuq1U354Mm30A,1405 +pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064 +pip/_internal/operations/check.py,sha256=ca4O9CkPt9Em9sLCf3H0iVt1GIcW7M8C0U5XooaBuT4,5109 +pip/_internal/operations/freeze.py,sha256=ZiYw5GlUpLVx4VJHz4S1AP2JFNyvH0iq5kpcYj2ovyw,9770 +pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51 +pip/_internal/operations/install/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/operations/install/__pycache__/editable_legacy.cpython-310.pyc,, +pip/_internal/operations/install/__pycache__/legacy.cpython-310.pyc,, +pip/_internal/operations/install/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/operations/install/editable_legacy.py,sha256=ee4kfJHNuzTdKItbfAsNOSEwq_vD7DRPGkBdK48yBhU,1354 +pip/_internal/operations/install/legacy.py,sha256=x7BG8kBm0K3JO6AR4sBl0zh2LOrfUaz7EdNt-keHBv4,4091 +pip/_internal/operations/install/wheel.py,sha256=QuQyCZE-XjuJjDYRixo40oUt2ucFhNmSrCbcXY7A9aE,27412 +pip/_internal/operations/prepare.py,sha256=LJP97jsuiCAaTGVIRrcINvxc1ntVsB45MoRbyMIukg4,24145 +pip/_internal/pyproject.py,sha256=Wm2ljdT6spC-tSdf1LBRaMYSJaXr1xUxV3OwdHCW9jc,6722 +pip/_internal/req/__init__.py,sha256=A7mUvT1KAcCYP3H7gUOTx2GRMlgoDur3H68Q0OJqM5A,2793 +pip/_internal/req/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/req/__pycache__/constructors.cpython-310.pyc,, +pip/_internal/req/__pycache__/req_file.cpython-310.pyc,, +pip/_internal/req/__pycache__/req_install.cpython-310.pyc,, +pip/_internal/req/__pycache__/req_set.cpython-310.pyc,, +pip/_internal/req/__pycache__/req_tracker.cpython-310.pyc,, +pip/_internal/req/__pycache__/req_uninstall.cpython-310.pyc,, +pip/_internal/req/constructors.py,sha256=fXmtNI_J77JFP_HRvYcQW-1nKw3AiUu6Q3b1Nm8aMm0,16094 +pip/_internal/req/req_file.py,sha256=5N8OTouPCof-305StC2YK9HBxQMw-xO46skRoBPbkZo,17421 +pip/_internal/req/req_install.py,sha256=jU1HQBT_DnXZean7jY8wPNMhb6_CzdKHcilHFY_o-Fc,32524 +pip/_internal/req/req_set.py,sha256=kHYiLvkKRx21WaLTwOI-54Ng0SSzZZ9SE7FD0PsfvYA,7584 +pip/_internal/req/req_tracker.py,sha256=jK7JDu-Wt73X-gqozrFtgJVlUlnQo0P4IQ4x4_gPlfM,4117 +pip/_internal/req/req_uninstall.py,sha256=K2BHYRRJAfkSpFqcPzc9XfX2EvbhaRtQIPRFmMtUdfo,23814 +pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/resolution/__pycache__/base.cpython-310.pyc,, +pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583 +pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/legacy/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/resolution/legacy/__pycache__/resolver.cpython-310.pyc,, +pip/_internal/resolution/legacy/resolver.py,sha256=b7bf5qL1ROg73sl8dhTvLdD1w5XF8xybBAF6eF_kz7c,18288 +pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/base.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-310.pyc,, +pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220 +pip/_internal/resolution/resolvelib/candidates.py,sha256=KR5jxZRSahByOABXbwrX-zNoawa7Gm9Iss-HrvrcvNw,18357 +pip/_internal/resolution/resolvelib/factory.py,sha256=0bbxnUSSjaeTmtIEgeeKtEqhEFfNhv3xpq7j9IaMq2c,28298 +pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705 +pip/_internal/resolution/resolvelib/provider.py,sha256=LzQQyzMVaZYAwLgKInbq-it6mbQL1gX0hGohz5Cr5wg,9915 +pip/_internal/resolution/resolvelib/reporter.py,sha256=3ZVVYrs5PqvLFJkGLcuXoMK5mTInFzl31xjUpDBpZZk,2526 +pip/_internal/resolution/resolvelib/requirements.py,sha256=B1ndvKPSuyyyTEXt9sKhbwminViSWnBrJa7qO2ln4Z0,5455 +pip/_internal/resolution/resolvelib/resolver.py,sha256=UsWuwuTu9aYHIfEBnEb7e1r3tXGgJbSA5LVgQqdVZ2w,11633 +pip/_internal/self_outdated_check.py,sha256=GKSatNlt2cz_CMGxu72FbUzuPaXpWOnIVKOOYIk0gvY,6849 +pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/utils/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/utils/__pycache__/_log.cpython-310.pyc,, +pip/_internal/utils/__pycache__/appdirs.cpython-310.pyc,, +pip/_internal/utils/__pycache__/compat.cpython-310.pyc,, +pip/_internal/utils/__pycache__/compatibility_tags.cpython-310.pyc,, +pip/_internal/utils/__pycache__/datetime.cpython-310.pyc,, +pip/_internal/utils/__pycache__/deprecation.cpython-310.pyc,, +pip/_internal/utils/__pycache__/direct_url_helpers.cpython-310.pyc,, +pip/_internal/utils/__pycache__/distutils_args.cpython-310.pyc,, +pip/_internal/utils/__pycache__/egg_link.cpython-310.pyc,, +pip/_internal/utils/__pycache__/encoding.cpython-310.pyc,, +pip/_internal/utils/__pycache__/entrypoints.cpython-310.pyc,, +pip/_internal/utils/__pycache__/filesystem.cpython-310.pyc,, +pip/_internal/utils/__pycache__/filetypes.cpython-310.pyc,, +pip/_internal/utils/__pycache__/glibc.cpython-310.pyc,, +pip/_internal/utils/__pycache__/hashes.cpython-310.pyc,, +pip/_internal/utils/__pycache__/inject_securetransport.cpython-310.pyc,, +pip/_internal/utils/__pycache__/logging.cpython-310.pyc,, +pip/_internal/utils/__pycache__/misc.cpython-310.pyc,, +pip/_internal/utils/__pycache__/models.cpython-310.pyc,, +pip/_internal/utils/__pycache__/packaging.cpython-310.pyc,, +pip/_internal/utils/__pycache__/setuptools_build.cpython-310.pyc,, +pip/_internal/utils/__pycache__/subprocess.cpython-310.pyc,, +pip/_internal/utils/__pycache__/temp_dir.cpython-310.pyc,, +pip/_internal/utils/__pycache__/unpacking.cpython-310.pyc,, +pip/_internal/utils/__pycache__/urls.cpython-310.pyc,, +pip/_internal/utils/__pycache__/virtualenv.cpython-310.pyc,, +pip/_internal/utils/__pycache__/wheel.cpython-310.pyc,, +pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 +pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665 +pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884 +pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377 +pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242 +pip/_internal/utils/deprecation.py,sha256=NKo8VqLioJ4nnXXGmW4KdasxF90EFHkZaHeX1fT08C8,3627 +pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206 +pip/_internal/utils/distutils_args.py,sha256=mcAscyp80vTt3xAGTipnpgc83V-_wCvydNELVXLq7JI,1249 +pip/_internal/utils/egg_link.py,sha256=5MVlpz5LirT4iLQq86OYzjXaYF0D4Qk1dprEI7ThST4,2203 +pip/_internal/utils/encoding.py,sha256=bdZ3YgUpaOEBI5MP4-DEXiQarCW3V0rxw1kRz-TaU1Q,1169 +pip/_internal/utils/entrypoints.py,sha256=aPvCnQVi9Hdk35Kloww_D5ibjUpqxgqcJP8O9VuMZek,1055 +pip/_internal/utils/filesystem.py,sha256=rrl-rY1w8TYyKYndUyZlE9ffkQyA4-jI9x_59zXkn5s,5893 +pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716 +pip/_internal/utils/glibc.py,sha256=tDfwVYnJCOC0BNVpItpy8CGLP9BjkxFHdl0mTS0J7fc,3110 +pip/_internal/utils/hashes.py,sha256=anpZfFGIT6HcIj2td9NHtE8AWg6GeAIhwpP8GPvZE0E,4811 +pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795 +pip/_internal/utils/logging.py,sha256=Rvght-fDXL70VWib1cpgZ3iU-kXODV98bNeLUlbqVto,11522 +pip/_internal/utils/misc.py,sha256=yLQuNWaRGtSGQqK7GT-Kj2mO7oXnPcJZkr5-9Q7AGwE,18392 +pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193 +pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108 +pip/_internal/utils/setuptools_build.py,sha256=vNH9hQB9wT6d-h1hVQhBKw91jNeT42meHpVeii-urOI,5652 +pip/_internal/utils/subprocess.py,sha256=vIWGpet5ARBmZ2Qn4NEHNgzCOduqbPIuByZmhhmr6mM,9182 +pip/_internal/utils/temp_dir.py,sha256=zob3PYMVevONkheOMUp_4jDofrEY3HIu5DHK78cSspI,7662 +pip/_internal/utils/unpacking.py,sha256=HUFlMEyCa9dPwdLh6sWeh95DeKytV8rsOyKShEw9y6g,8906 +pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759 +pip/_internal/utils/virtualenv.py,sha256=4_48qMzCwB_F5jIK5BC_ua7uiAMVifmQWU9NdaGUoVA,3459 +pip/_internal/utils/wheel.py,sha256=lXOgZyTlOm5HmK8tw5iw0A3_5A6wRzsXHOaQkIvvloU,4549 +pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 +pip/_internal/vcs/__pycache__/__init__.cpython-310.pyc,, +pip/_internal/vcs/__pycache__/bazaar.cpython-310.pyc,, +pip/_internal/vcs/__pycache__/git.cpython-310.pyc,, +pip/_internal/vcs/__pycache__/mercurial.cpython-310.pyc,, +pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc,, +pip/_internal/vcs/__pycache__/versioncontrol.cpython-310.pyc,, +pip/_internal/vcs/bazaar.py,sha256=IGb5ca1xSZfgegRD2_JeyoZPrQQHs7lEYEIgpVsKpoU,3047 +pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116 +pip/_internal/vcs/mercurial.py,sha256=Bzbd518Jsx-EJI0IhIobiQqiRsUv5TWYnrmRIFWE0Gw,5238 +pip/_internal/vcs/subversion.py,sha256=TEMRdwECvMcXakZX0pTNUep79kmBYkWDkWFkrYmcmac,11718 +pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811 +pip/_internal/wheel_builder.py,sha256=65rOA8FSYt3c3HyqEw17uujjlCgqmoKEIv6rv9xN2NM,12307 +pip/_vendor/__init__.py,sha256=xjcBX0EP50pkaMdCssrsBXoZgo2hTtYxlcH1CIyA3T4,4708 +pip/_vendor/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/__pycache__/distro.cpython-310.pyc,, +pip/_vendor/__pycache__/six.cpython-310.pyc,, +pip/_vendor/__pycache__/typing_extensions.cpython-310.pyc,, +pip/_vendor/cachecontrol/__init__.py,sha256=1j_YQfjmiix6YyouLrftC6NzksAm8e8xGSjMKMRPIkM,465 +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-310.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-310.pyc,, +pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379 +pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033 +pip/_vendor/cachecontrol/cache.py,sha256=eMS9Bn9JWQkHiIYA5GPRBqKVU95uS-yXkxrzpoafRig,917 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=gGFOtIH8QDRvkP4YAfGIh-u9YYcGZVxwLM1-6e1mPNI,170 +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-310.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-310.pyc,, +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=P2KHcNXiqxEW7fCq5KC-NYHGSk0nNR9NIKuN-vBTn-E,4251 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=tu_YBV7EV8vdBRGazUErkoRqYYjSBmNcB8dZ7BNomqk,940 +pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778 +pip/_vendor/cachecontrol/controller.py,sha256=9DSEiV58Gx7Ce69fLCrRcpN-_sHzXTY4ol9bEviatR0,15625 +pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946 +pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154 +pip/_vendor/cachecontrol/serialize.py,sha256=dlySaeA5U7Q5eHvjiObgo1M8j8_huVjfWjid7Aq-r8c,6783 +pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774 +pip/_vendor/certifi/__init__.py,sha256=xWdRgntT3j1V95zkRipGOg_A1UfEju2FcpujhysZLRI,62 +pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 +pip/_vendor/certifi/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/certifi/__pycache__/__main__.cpython-310.pyc,, +pip/_vendor/certifi/__pycache__/core.cpython-310.pyc,, +pip/_vendor/certifi/cacert.pem,sha256=-og4Keu4zSpgL5shwfhd4kz0eUnVILzrGCi0zRy2kGw,265969 +pip/_vendor/certifi/core.py,sha256=gOFd0zHYlx4krrLEn982esOtmz3djiG0BFSDhgjlvcI,2840 +pip/_vendor/chardet/__init__.py,sha256=mWZaWmvZkhwfBEAT9O1Y6nRTfKzhT7FHhQTTAujbqUA,3271 +pip/_vendor/chardet/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/big5freq.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/big5prober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/chardistribution.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/charsetprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/cp949prober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/enums.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/escprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/escsm.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/eucjpprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/euckrfreq.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/euckrprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/euctwfreq.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/euctwprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/gb2312freq.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/gb2312prober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/hebrewprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/jisfreq.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/jpcntx.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langthaimodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/latin1prober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/mbcssm.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/sjisprober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/universaldetector.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/utf8prober.cpython-310.pyc,, +pip/_vendor/chardet/__pycache__/version.cpython-310.pyc,, +pip/_vendor/chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254 +pip/_vendor/chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757 +pip/_vendor/chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411 +pip/_vendor/chardet/charsetgroupprober.py,sha256=GZLReHP6FRRn43hvSOoGCxYamErKzyp6RgOQxVeC3kg,3839 +pip/_vendor/chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110 +pip/_vendor/chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +pip/_vendor/chardet/cli/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-310.pyc,, +pip/_vendor/chardet/cli/chardetect.py,sha256=XK5zqjUG2a4-y6eLHZ8ThYcp6WWUrdlmELxNypcc2SE,2747 +pip/_vendor/chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590 +pip/_vendor/chardet/compat.py,sha256=40zr6wICZwknxyuLGGcIOPyve8DTebBCbbvttvnmp5Q,1200 +pip/_vendor/chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855 +pip/_vendor/chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661 +pip/_vendor/chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950 +pip/_vendor/chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510 +pip/_vendor/chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749 +pip/_vendor/chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546 +pip/_vendor/chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748 +pip/_vendor/chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621 +pip/_vendor/chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747 +pip/_vendor/chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715 +pip/_vendor/chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754 +pip/_vendor/chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838 +pip/_vendor/chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777 +pip/_vendor/chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643 +pip/_vendor/chardet/langbulgarianmodel.py,sha256=rk9CJpuxO0bObboJcv6gNgWuosYZmd8qEEds5y7DS_Y,105697 +pip/_vendor/chardet/langgreekmodel.py,sha256=S-uNQ1ihC75yhBvSux24gLFZv3QyctMwC6OxLJdX-bw,99571 +pip/_vendor/chardet/langhebrewmodel.py,sha256=DzPP6TPGG_-PV7tqspu_d8duueqm7uN-5eQ0aHUw1Gg,98776 +pip/_vendor/chardet/langhungarianmodel.py,sha256=RtJH7DZdsmaHqyK46Kkmnk5wQHiJwJPPJSqqIlpeZRc,102498 +pip/_vendor/chardet/langrussianmodel.py,sha256=THqJOhSxiTQcHboDNSc5yofc2koXXQFHFyjtyuntUfM,131180 +pip/_vendor/chardet/langthaimodel.py,sha256=R1wXHnUMtejpw0JnH_JO8XdYasME6wjVqp1zP7TKLgg,103312 +pip/_vendor/chardet/langturkishmodel.py,sha256=rfwanTptTwSycE4-P-QasPmzd-XVYgevytzjlEzBBu8,95946 +pip/_vendor/chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370 +pip/_vendor/chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413 +pip/_vendor/chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012 +pip/_vendor/chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481 +pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/chardet/metadata/__pycache__/languages.cpython-310.pyc,, +pip/_vendor/chardet/metadata/languages.py,sha256=41tLq3eLSrBEbEVVQpVGFq9K7o1ln9b1HpY1l0hCUQo,19474 +pip/_vendor/chardet/sbcharsetprober.py,sha256=nmyMyuxzG87DN6K3Rk2MUzJLMLR69MrWpdnHzOwVUwQ,6136 +pip/_vendor/chardet/sbcsgroupprober.py,sha256=hqefQuXmiFyDBArOjujH6hd6WFXlOD1kWCsxDhjx5Vc,4309 +pip/_vendor/chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774 +pip/_vendor/chardet/universaldetector.py,sha256=DpZTXCX0nUHXxkQ9sr4GZxGB_hveZ6hWt3uM94cgWKs,12503 +pip/_vendor/chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766 +pip/_vendor/chardet/version.py,sha256=A4CILFAd8MRVG1HoXPp45iK9RLlWyV73a1EtwE8Tvn8,242 +pip/_vendor/colorama/__init__.py,sha256=pCdErryzLSzDW5P-rRPBlPLqbBtIRNJB6cMgoeJns5k,239 +pip/_vendor/colorama/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-310.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-310.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-310.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-310.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-310.pyc,, +pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +pip/_vendor/colorama/ansitowin32.py,sha256=yV7CEmCb19MjnJKODZEEvMH_fnbJhwnpzo4sxZuGXmA,10517 +pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915 +pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404 +pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438 +pip/_vendor/distlib/__init__.py,sha256=HTGLP7dnTRTQCbEZNGUxBq-0sobr0KQUMn3yd6uEObA,581 +pip/_vendor/distlib/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-310.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-310.pyc,, +pip/_vendor/distlib/_backport/__init__.py,sha256=bqS_dTOH6uW9iGgd0uzfpPjo6vZ4xpPZ7kyfZJ2vNaw,274 +pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/distlib/_backport/__pycache__/misc.cpython-310.pyc,, +pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-310.pyc,, +pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-310.pyc,, +pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-310.pyc,, +pip/_vendor/distlib/_backport/misc.py,sha256=KWecINdbFNOxSOP1fGF680CJnaC6S4fBRgEtaYTw0ig,971 +pip/_vendor/distlib/_backport/shutil.py,sha256=IX_G2NPqwecJibkIDje04bqu0xpHkfSQ2GaGdEVqM5Y,25707 +pip/_vendor/distlib/_backport/sysconfig.cfg,sha256=swZKxq9RY5e9r3PXCrlvQPMsvOdiWZBTHLEbqS8LJLU,2617 +pip/_vendor/distlib/_backport/sysconfig.py,sha256=BQHFlb6pubCl_dvT1NjtzIthylofjKisox239stDg0U,26854 +pip/_vendor/distlib/_backport/tarfile.py,sha256=Ihp7rXRcjbIKw8COm9wSePV9ARGXbSF9gGXAMn2Q-KU,92628 +pip/_vendor/distlib/compat.py,sha256=fbsxc5PfJ2wBx1K4k6mQ2goAYs-GZW0tcOPIlE_vf0I,41495 +pip/_vendor/distlib/database.py,sha256=Kl0YvPQKc4OcpVi7k5cFziydM1xOK8iqdxLGXgbZHV4,51059 +pip/_vendor/distlib/index.py,sha256=UfcimNW19AB7IKWam4VaJbXuCBvArKfSxhV16EwavzE,20739 +pip/_vendor/distlib/locators.py,sha256=AKlB3oZvfOTg4E0CtfwOzujFL19X5V4XUA4eHdKOu44,51965 +pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811 +pip/_vendor/distlib/markers.py,sha256=9c70ISEKwBjmUOHuIdOygVnRVESOKdNYp9a2TVn4qrI,4989 +pip/_vendor/distlib/metadata.py,sha256=vatoxFdmBr6ie-sTVXVNPOPG3uwMDWJTnEECnm7xDCw,39109 +pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 +pip/_vendor/distlib/scripts.py,sha256=tjSwENINeV91ROZxec5zTSMRg2jEeKc4enyCHDzNvEE,17720 +pip/_vendor/distlib/t32.exe,sha256=NS3xBCVAld35JVFNmb-1QRyVtThukMrwZVeXn4LhaEQ,96768 +pip/_vendor/distlib/t64-arm.exe,sha256=8WGDh6aI8WJAjngRNQpyJpB21Sv20PCYYFSNW1fWd6w,180736 +pip/_vendor/distlib/t64.exe,sha256=oAqHes78rUWVM0OtVqIhUvequl_PKhAhXYQWnUf7zR0,105984 +pip/_vendor/distlib/util.py,sha256=0Uq_qa63FCLtdyNdWvMnmPbiSvVa-ykHM2E8HT7LSIU,67766 +pip/_vendor/distlib/version.py,sha256=WG__LyAa2GwmA6qSoEJtvJE8REA1LZpbSizy8WvhJLk,23513 +pip/_vendor/distlib/w32.exe,sha256=lJtnZdeUxTZWya_EW5DZos_K5rswRECGspIl8ZJCIXs,90112 +pip/_vendor/distlib/w64-arm.exe,sha256=Q_HdzVu9zxYdaBa3m0iJ5_ddLOEqtPe8x30WADoXza8,166400 +pip/_vendor/distlib/w64.exe,sha256=0aRzoN2BO9NWW4ENy4_4vHkHR4qZTFZNVSAJJYlODTI,99840 +pip/_vendor/distlib/wheel.py,sha256=pj5VVCjqZMcHvgizORWwAFPS7hOk61CZ59dxP8laQ4E,42943 +pip/_vendor/distro.py,sha256=O1EeHMq1-xAO373JI2_6pYEtd09yEkxtmrYkdY-9S-w,48414 +pip/_vendor/html5lib/__init__.py,sha256=BYzcKCqeEii52xDrqBFruhnmtmkiuHXFyFh-cglQ8mk,1160 +pip/_vendor/html5lib/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/_inputstream.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/_utils.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/constants.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/html5parser.cpython-310.pyc,, +pip/_vendor/html5lib/__pycache__/serializer.cpython-310.pyc,, +pip/_vendor/html5lib/_ihatexml.py,sha256=ifOwF7pXqmyThIXc3boWc96s4MDezqRrRVp7FwDYUFs,16728 +pip/_vendor/html5lib/_inputstream.py,sha256=jErNASMlkgs7MpOM9Ve_VdLDJyFFweAjLuhVutZz33U,32353 +pip/_vendor/html5lib/_tokenizer.py,sha256=04mgA2sNTniutl2fxFv-ei5bns4iRaPxVXXHh_HrV_4,77040 +pip/_vendor/html5lib/_trie/__init__.py,sha256=nqfgO910329BEVJ5T4psVwQtjd2iJyEXQ2-X8c1YxwU,109 +pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-310.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/py.cpython-310.pyc,, +pip/_vendor/html5lib/_trie/_base.py,sha256=CaybYyMro8uERQYjby2tTeSUatnWDfWroUN9N7ety5w,1013 +pip/_vendor/html5lib/_trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775 +pip/_vendor/html5lib/_utils.py,sha256=Dx9AKntksRjFT1veBj7I362pf5OgIaT0zglwq43RnfU,4931 +pip/_vendor/html5lib/constants.py,sha256=Ll-yzLU_jcjyAI_h57zkqZ7aQWE5t5xA4y_jQgoUUhw,83464 +pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/base.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/lint.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-310.pyc,, +pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-310.pyc,, +pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919 +pip/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286 +pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945 +pip/_vendor/html5lib/filters/lint.py,sha256=jk6q56xY0ojiYfvpdP-OZSm9eTqcAdRqhCoPItemPYA,3643 +pip/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588 +pip/_vendor/html5lib/filters/sanitizer.py,sha256=m6oGmkBhkGAnn2nV6D4hE78SCZ6WEnK9rKdZB3uXBIc,26897 +pip/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214 +pip/_vendor/html5lib/html5parser.py,sha256=anr-aXre_ImfrkQ35c_rftKXxC80vJCREKe06Tq15HA,117186 +pip/_vendor/html5lib/serializer.py,sha256=_PpvcZF07cwE7xr9uKkZqh5f4UEaI8ltCU2xPJzaTpk,15759 +pip/_vendor/html5lib/treeadapters/__init__.py,sha256=A0rY5gXIe4bJOiSGRO_j_tFhngRBO8QZPzPtPw5dFzo,679 +pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-310.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-310.pyc,, +pip/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715 +pip/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776 +pip/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592 +pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-310.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-310.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-310.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-310.pyc,, +pip/_vendor/html5lib/treebuilders/base.py,sha256=z-o51vt9r_l2IDG5IioTOKGzZne4Fy3_Fc-7ztrOh4I,14565 +pip/_vendor/html5lib/treebuilders/dom.py,sha256=22whb0C71zXIsai5mamg6qzBEiigcBIvaDy4Asw3at0,8925 +pip/_vendor/html5lib/treebuilders/etree.py,sha256=w5ZFpKk6bAxnrwD2_BrF5EVC7vzz0L3LMi9Sxrbc_8w,12836 +pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=9gqDjs-IxsPhBYa5cpvv2FZ1KZlG83Giusy2lFmvIkE,14766 +pip/_vendor/html5lib/treewalkers/__init__.py,sha256=OBPtc1TU5mGyy18QDMxKEyYEz0wxFUUNj5v0-XgmYhY,5719 +pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-310.pyc,, +pip/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476 +pip/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413 +pip/_vendor/html5lib/treewalkers/etree.py,sha256=xo1L5m9VtkfpFJK0pFmkLVajhqYYVisVZn3k9kYpPkI,4551 +pip/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=_b0LAVWLcVu9WaU_-w3D8f0IRSpCbjf667V-3NRdhTw,6357 +pip/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309 +pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849 +pip/_vendor/idna/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/codec.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/core.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/idnadata.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/intranges.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/package_data.cpython-310.pyc,, +pip/_vendor/idna/__pycache__/uts46data.cpython-310.pyc,, +pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374 +pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321 +pip/_vendor/idna/core.py,sha256=RFIkY-HhFZaDoBEFjGwyGd_vWI04uOAQjnzueMWqwOU,12795 +pip/_vendor/idna/idnadata.py,sha256=fzMzkCea2xieVxcrjngJ-2pLsKQNejPCZFlBajIuQdw,44025 +pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881 +pip/_vendor/idna/package_data.py,sha256=szxQhV0ZD0nKJ84Kuobw3l8q4_KeCyXjFRdpwIpKZmw,21 +pip/_vendor/idna/uts46data.py,sha256=o-D7V-a0fOLZNd7tvxof6MYfUd0TBZzE2bLR5XO67xU,204400 +pip/_vendor/msgpack/__init__.py,sha256=2gJwcsTIaAtCM0GMi2rU-_Y6kILeeQuqRkrQ22jSANc,1118 +pip/_vendor/msgpack/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/msgpack/__pycache__/_version.cpython-310.pyc,, +pip/_vendor/msgpack/__pycache__/exceptions.cpython-310.pyc,, +pip/_vendor/msgpack/__pycache__/ext.cpython-310.pyc,, +pip/_vendor/msgpack/__pycache__/fallback.cpython-310.pyc,, +pip/_vendor/msgpack/_version.py,sha256=JpTcnRd3YUioA24NDtDZbLW0Nhl2yA-N1Rq2lLDBB-g,20 +pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 +pip/_vendor/msgpack/ext.py,sha256=4l356Y4sVEcvCla2dh_cL57vh4GMhZfa3kuWHFHYz6A,6088 +pip/_vendor/msgpack/fallback.py,sha256=L5jriXysURbf6rPbbHbvXgvoFrKZiryIBmujMTcrf3A,34475 +pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661 +pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497 +pip/_vendor/packaging/__pycache__/__about__.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/_manylinux.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/_musllinux.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/requirements.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/tags.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/utils.cpython-310.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-310.pyc,, +pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488 +pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378 +pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 +pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487 +pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676 +pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110 +pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699 +pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200 +pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665 +pip/_vendor/pep517/__init__.py,sha256=Y1bATL2qbFNN6M_DQa4yyrwqjpIiL-j9T6kBmR0DS14,130 +pip/_vendor/pep517/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/build.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/check.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/colorlog.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/dirtools.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/envbuild.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/meta.cpython-310.pyc,, +pip/_vendor/pep517/__pycache__/wrappers.cpython-310.pyc,, +pip/_vendor/pep517/build.py,sha256=2bar6EdjwIz2Dlfy94qdxn3oA9mVnnny40mfoT5f-qI,3457 +pip/_vendor/pep517/check.py,sha256=bCORq1WrHjhpTONa-zpAqG0EB9rHNuhO1ORu6DsDuL8,6084 +pip/_vendor/pep517/colorlog.py,sha256=Tk9AuYm_cLF3BKTBoSTJt9bRryn0aFojIQOwbfVUTxQ,4098 +pip/_vendor/pep517/compat.py,sha256=NmLImE5oiDT3gbEhJ4w7xeoMFcpAPrGu_NltBytSJUY,1253 +pip/_vendor/pep517/dirtools.py,sha256=2mkAkAL0mRz_elYFjRKuekTJVipH1zTn4tbf1EDev84,1129 +pip/_vendor/pep517/envbuild.py,sha256=zFde--rmzjXMLXcm7SA_3hDtgk5VCTA8hjpk88RbF6E,6100 +pip/_vendor/pep517/in_process/__init__.py,sha256=MyWoAi8JHdcBv7yXuWpUSVADbx6LSB9rZh7kTIgdA8Y,563 +pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-310.pyc,, +pip/_vendor/pep517/in_process/_in_process.py,sha256=D3waguyNSGcwosociD5USfcycYr2RCzCjYtxX5UHQmQ,11201 +pip/_vendor/pep517/meta.py,sha256=8mnM5lDnT4zXQpBTliJbRGfesH7iioHwozbDxALPS9Y,2463 +pip/_vendor/pep517/wrappers.py,sha256=impq7Cz_LL1iDF1iiOzYWB4MaEu6O6Gps7TJ5qsJz1Q,13429 +pip/_vendor/pkg_resources/__init__.py,sha256=NnpQ3g6BCHzpMgOR_OLBmYtniY4oOzdKpwqghfq_6ug,108287 +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-310.pyc,, +pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562 +pip/_vendor/platformdirs/__init__.py,sha256=Aizpxewwd4nY63Gqw-Od1Rso9Ah4bSoc6rkx-GBRu2Y,12676 +pip/_vendor/platformdirs/__main__.py,sha256=ZmsnTxEOxtTvwa-Y_Vfab_JN3X4XCVeN8X0yyy9-qnc,1176 +pip/_vendor/platformdirs/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/__main__.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/android.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/api.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/macos.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/unix.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/version.cpython-310.pyc,, +pip/_vendor/platformdirs/__pycache__/windows.cpython-310.pyc,, +pip/_vendor/platformdirs/android.py,sha256=xhlD4NmrKCARe5lgnpBGYo4lOYxEOBOByNDNYy91gEE,4012 +pip/_vendor/platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910 +pip/_vendor/platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655 +pip/_vendor/platformdirs/unix.py,sha256=b4aVYTz0qZ50HntwOXo8r6tp82jAa3qTjxw-WlnC2yc,6910 +pip/_vendor/platformdirs/version.py,sha256=bXzLJCe23FNQRQrf7ZRWKejxWnct_wft7dxdkMGT33E,80 +pip/_vendor/platformdirs/windows.py,sha256=ISruopR5UGBePC0BxCxXevkZYfjJsIZc49YWU5iYfQ4,6439 +pip/_vendor/progress/__init__.py,sha256=1HejNZtv2ouUNQeStUDAtZrtwkz_3FmYKQ476hJ7zOs,5294 +pip/_vendor/progress/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/progress/__pycache__/bar.cpython-310.pyc,, +pip/_vendor/progress/__pycache__/colors.cpython-310.pyc,, +pip/_vendor/progress/__pycache__/counter.cpython-310.pyc,, +pip/_vendor/progress/__pycache__/spinner.cpython-310.pyc,, +pip/_vendor/progress/bar.py,sha256=GbedY0oZ-Q1duXjmvVLO0tSf-uTSH7hJ3zzyI91Esws,2942 +pip/_vendor/progress/colors.py,sha256=cCYXQnYFYVmQKKmYEbQ_lj6SPSFzdw4FN98F2x2kR-U,2655 +pip/_vendor/progress/counter.py,sha256=zYt9DWH0_05s8Q9TrJwHVud-WwsyyaR3PwYtk5hxwwQ,1613 +pip/_vendor/progress/spinner.py,sha256=u5ElzW94XEiLGH-aAlr54VJtKfeK745xr6UfGvvflzU,1461 +pip/_vendor/pygments/__init__.py,sha256=CAmA9UthykwxvtutUcH0IxqtiyQcSg6CmYdM-jKlcRY,3002 +pip/_vendor/pygments/__main__.py,sha256=X7rGLMUC54EXgO14FZ9goKXZDmhPzKXTsUglmb_McIU,353 +pip/_vendor/pygments/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/__main__.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/cmdline.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/console.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/filter.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/formatter.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/lexer.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/modeline.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/plugin.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/regexopt.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/scanner.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/sphinxext.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/style.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/token.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/unistring.cpython-310.pyc,, +pip/_vendor/pygments/__pycache__/util.cpython-310.pyc,, +pip/_vendor/pygments/cmdline.py,sha256=XpsyWgErcSqHC7rXiYKLF3Y61Uy8SR2DNQDDhZGuezg,23408 +pip/_vendor/pygments/console.py,sha256=QZXBUAkyl4dPLQ1e6XHjQu3mmXBWvuGQwsQT2q1mtCY,1697 +pip/_vendor/pygments/filter.py,sha256=35iMZiB1rcuogxokm92kViB2DPXPp_wWoxWuMmwvvzY,1938 +pip/_vendor/pygments/filters/__init__.py,sha256=-veOimzCyYGEARru2Dfo6ofSYcZ8tGsIVuMprtaZQ24,40292 +pip/_vendor/pygments/filters/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pygments/formatter.py,sha256=zSBbX2U_OOriy7SJvSTK6OAxjuXtROWxQlNpJEJZjBA,2917 +pip/_vendor/pygments/formatters/__init__.py,sha256=fjkYDy5-F998XczKi0ymHFayr5ObIRLHF8cgp9k8kpA,5119 +pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/groff.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/html.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/img.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/irc.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/latex.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/other.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/svg.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-310.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-310.pyc,, +pip/_vendor/pygments/formatters/_mapping.py,sha256=3A1rYSjYN9MLduCFWy2_mYhllPVpwlw55anRYnPXX8w,6516 +pip/_vendor/pygments/formatters/bbcode.py,sha256=cSKMOioUnE4TzvCCsK4IbJ6G78W07ZwHtkz4V1Wte0U,3314 +pip/_vendor/pygments/formatters/groff.py,sha256=ULgMKvGeLswX0KZn3IBp0p0U3rruiSHBtpl6O5qbqLs,5005 +pip/_vendor/pygments/formatters/html.py,sha256=0jM7Jc4xA4tsjmPq35uklm_En_OVdcNb0__SEXp2pDQ,35330 +pip/_vendor/pygments/formatters/img.py,sha256=r4iag_jCfyv_LhIt-1fRDeVEEoAfVJzkD9nZChIwiS8,21819 +pip/_vendor/pygments/formatters/irc.py,sha256=gi_IeIZeNaTfTMtvseLigZdS6lNicN7r7O7rnI6myo0,5871 +pip/_vendor/pygments/formatters/latex.py,sha256=qZUerrHt2Nn2aB4gJcdqj99qBkIxl_1v1ukYsf230Gk,18930 +pip/_vendor/pygments/formatters/other.py,sha256=Q01LtkqPZ8m_EYdgMVzXPUGjHoL00lXI3By97wzytYU,5073 +pip/_vendor/pygments/formatters/pangomarkup.py,sha256=ZpjALTSuGFwviJd5kOYwr-1NgqxCX3XRJrjXC7x1UbQ,2212 +pip/_vendor/pygments/formatters/rtf.py,sha256=qh7-z_wbUsTY6z7fZUGrYECYBlWB0wEdBwIZVEVybL0,5014 +pip/_vendor/pygments/formatters/svg.py,sha256=T7Jj004I3JUPOr48aAhQ368K2qWCciUyMQ2tdU-LB-4,7335 +pip/_vendor/pygments/formatters/terminal.py,sha256=cRD5hitINOkYlGZo9ma252vpJYPSGNgLivrsm6zGyec,4674 +pip/_vendor/pygments/formatters/terminal256.py,sha256=Bvz9zZL3UWc94TDm1GhKMI4x0BTit0XplhyRL0zmtkw,11753 +pip/_vendor/pygments/lexer.py,sha256=ECXWlEsbRnKs_njozZns6BGQ4riTMzct_BzAr3zV6dY,31937 +pip/_vendor/pygments/lexers/__init__.py,sha256=6Ds0GVBP3jrIU02wmjRdpoL4eFGhwT2IVD1zf3cV5_Y,11307 +pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-310.pyc,, +pip/_vendor/pygments/lexers/__pycache__/python.cpython-310.pyc,, +pip/_vendor/pygments/lexers/_mapping.py,sha256=jAxmvh5wvNkD-p3Fh6E7hY_B0sGbcxWRfseT6iq7ex4,70032 +pip/_vendor/pygments/lexers/python.py,sha256=LXnk43Lcngqn9xj6eRqdk2f73oF4kHZWiwgHMM_RlVM,52776 +pip/_vendor/pygments/modeline.py,sha256=37fen3cf1moCz4vMVJqX41eAQCmj8pzUchikgPcHp-U,986 +pip/_vendor/pygments/plugin.py,sha256=zGSig3S7QX-3o6RDxd4_Uvice_t25l_BN9aQQ9k8vmU,1727 +pip/_vendor/pygments/regexopt.py,sha256=mj8Fgu3sT0d5PZwRwDLexEvVOQbuHeosubQnqVwgiqs,3072 +pip/_vendor/pygments/scanner.py,sha256=nGoHy-Npk2ylUd4bws_CJN1hK785Xqo8e0teRmNX2jo,3091 +pip/_vendor/pygments/sphinxext.py,sha256=FZ2puvLe2Bztqtj6UJvQd7D8TvtOZ1GsfRJObvH59tE,4630 +pip/_vendor/pygments/style.py,sha256=lGyan5bU42q1kGMfFqafwL3g1j5EurTvfkv8vdP7NzQ,6257 +pip/_vendor/pygments/styles/__init__.py,sha256=Qx2zq6ufbDNE2cTp51M-s9zW-sDE-KLIqFw31qr3Bhg,3252 +pip/_vendor/pygments/styles/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pygments/token.py,sha256=lNPgeaQTzu2DEUi6n_lxAIU7uy4DVj8LMI3nSVnTjks,6143 +pip/_vendor/pygments/unistring.py,sha256=Xs0FzOzE0l0iWRoTlcgi-Q_kAMdF5Gt5FL_goGKJc98,63188 +pip/_vendor/pygments/util.py,sha256=s9n8BQXIxG3lIwCPWv5-ci8yhaqq5JbEVK9v8Z-8_3I,9123 +pip/_vendor/pyparsing/__init__.py,sha256=jXheGTFT1b6r_4WxuOE0uVUqiouLJ3WHzOScpLieRgQ,9107 +pip/_vendor/pyparsing/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/actions.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/common.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/core.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/exceptions.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/helpers.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/results.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/testing.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/unicode.cpython-310.pyc,, +pip/_vendor/pyparsing/__pycache__/util.cpython-310.pyc,, +pip/_vendor/pyparsing/actions.py,sha256=60v7mETOBzc01YPH_qQD5isavgcSJpAfIKpzgjM3vaU,6429 +pip/_vendor/pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936 +pip/_vendor/pyparsing/core.py,sha256=GtQsD06HlwKPc7M8K8hyOuOW-cRnd87AxAHq-ad5lEk,212248 +pip/_vendor/pyparsing/diagram/__init__.py,sha256=h0gsUwmo5N3shgvfXVQTtqvTpUAv-ZdQjSQ6IUJmsxY,22165 +pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/pyparsing/exceptions.py,sha256=H4D9gqMavqmAFSsdrU_J6bO-jA-T-A7yvtXWZpooIUA,9030 +pip/_vendor/pyparsing/helpers.py,sha256=kqpIZFG-y0fQ3g_TmloYllo9we6YCYiewZMXIK0y5wc,38299 +pip/_vendor/pyparsing/results.py,sha256=4D-oURF1cLeL7k0d3zMqUuWH_gTjop_OrZwik9O0HXU,25339 +pip/_vendor/pyparsing/testing.py,sha256=szs8AKZREZMhL0y0vsMfaTVAnpqPHetg6VKJBNmc4QY,13388 +pip/_vendor/pyparsing/unicode.py,sha256=IR-ioeGY29cZ49tG8Ts7ITPWWNP5G2DcZs58oa8zn44,10381 +pip/_vendor/pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805 +pip/_vendor/requests/__init__.py,sha256=6IUFQM6K9V2NIu4fe4LtUsN21-TFbw_w3EfPpdUN-qc,5130 +pip/_vendor/requests/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/__version__.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/_internal_utils.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/help.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/packages.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-310.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-310.pyc,, +pip/_vendor/requests/__version__.py,sha256=q8miOQaomOv3S74lK4eQs1zZ5jwcnOusyEU-M2idhts,441 +pip/_vendor/requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096 +pip/_vendor/requests/adapters.py,sha256=WazYJQ_b2LHhNDb_y0hscNlWVsSe5ca5I3pymPrer5w,21861 +pip/_vendor/requests/api.py,sha256=hjuoP79IAEmX6Dysrw8t032cLfwLHxbI_wM4gC5G9t0,6402 +pip/_vendor/requests/auth.py,sha256=OMoJIVKyRLy9THr91y8rxysZuclwPB-K1Xg1zBomUhQ,10207 +pip/_vendor/requests/certs.py,sha256=nXRVq9DtGmv_1AYbwjTu9UrgAcdJv05ZvkNeaoLOZxY,465 +pip/_vendor/requests/compat.py,sha256=N1281mkcTluMjKqCSLf88LR6HNOygEhS1TbR9LLsoVY,2114 +pip/_vendor/requests/cookies.py,sha256=Y-bKX6TvW3FnYlE6Au0SXtVVWcaNdFvuAwQxw-G0iTI,18430 +pip/_vendor/requests/exceptions.py,sha256=VcpBXOL-9JYhNbK8OZxCIImBgpQSXJlUelDPf1f-pmM,3446 +pip/_vendor/requests/help.py,sha256=dyhe3lcmHXnFCzDiZVjcGmVvvO_jtsfAm-AC542ndw8,3972 +pip/_vendor/requests/hooks.py,sha256=QReGyy0bRcr5rkwCuObNakbYsc7EkiKeBwG4qHekr2Q,757 +pip/_vendor/requests/models.py,sha256=7pzscX_47qxx7-zEaBWGxMoB33Vdf6HLoUKZh1ktEvM,35116 +pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 +pip/_vendor/requests/sessions.py,sha256=Zu-Y9YPlwTIsyFx1hvIrc3ziyeFpuFPqcOuSuz8BNWs,29835 +pip/_vendor/requests/status_codes.py,sha256=gT79Pbs_cQjBgp-fvrUgg1dn2DQO32bDj4TInjnMPSc,4188 +pip/_vendor/requests/structures.py,sha256=msAtr9mq1JxHd-JRyiILfdFlpbJwvvFuP3rfUQT_QxE,3005 +pip/_vendor/requests/utils.py,sha256=siud-FQ6xgKFbL49DRvAb3PMQMMHoeCL_TCmuHh9AUU,33301 +pip/_vendor/resolvelib/__init__.py,sha256=UL-B2BDI0_TRIqkfGwLHKLxY-LjBlomz7941wDqzB1I,537 +pip/_vendor/resolvelib/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/resolvelib/__pycache__/providers.cpython-310.pyc,, +pip/_vendor/resolvelib/__pycache__/reporters.cpython-310.pyc,, +pip/_vendor/resolvelib/__pycache__/resolvers.cpython-310.pyc,, +pip/_vendor/resolvelib/__pycache__/structs.cpython-310.pyc,, +pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-310.pyc,, +pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156 +pip/_vendor/resolvelib/providers.py,sha256=roVmFBItQJ0TkhNua65h8LdNny7rmeqVEXZu90QiP4o,5872 +pip/_vendor/resolvelib/reporters.py,sha256=fW91NKf-lK8XN7i6Yd_rczL5QeOT3sc6AKhpaTEnP3E,1583 +pip/_vendor/resolvelib/resolvers.py,sha256=2wYzVGBGerbmcIpH8cFmgSKgLSETz8jmwBMGjCBMHG4,17592 +pip/_vendor/resolvelib/structs.py,sha256=IVIYof6sA_N4ZEiE1C1UhzTX495brCNnyCdgq6CYq28,4794 +pip/_vendor/rich/__init__.py,sha256=wF1th4JGBCVC02xfaw8j6P2MrFcJaQJL72scKtEmDYQ,5804 +pip/_vendor/rich/__main__.py,sha256=vd1PP-o7_1un-ThdgMU9LHV-D8z56yz_-fryczn38eE,8810 +pip/_vendor/rich/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/__main__.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_cell_widths.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_emoji_codes.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_emoji_replace.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_extension.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_inspect.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_log_render.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_loop.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_lru_cache.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_palettes.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_pick.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_ratio.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_spinners.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_stack.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_timer.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_windows.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/_wrap.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/abc.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/align.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/ansi.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/bar.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/box.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/cells.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/color.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/color_triplet.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/columns.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/console.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/constrain.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/containers.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/control.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/default_styles.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/diagnose.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/emoji.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/errors.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/file_proxy.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/filesize.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/highlighter.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/json.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/jupyter.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/layout.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/live.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/live_render.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/logging.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/markup.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/measure.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/padding.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/pager.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/palette.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/panel.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/pretty.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/progress.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/progress_bar.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/prompt.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/protocol.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/region.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/repr.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/rule.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/scope.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/screen.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/segment.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/spinner.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/status.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/style.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/styled.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/syntax.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/table.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/tabulate.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/terminal_theme.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/text.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/theme.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/themes.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/traceback.cpython-310.pyc,, +pip/_vendor/rich/__pycache__/tree.cpython-310.pyc,, +pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096 +pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 +pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 +pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 +pip/_vendor/rich/_inspect.py,sha256=vq6BjewwEvddjcBTr_lCcjYQBsKi92aTNpcXyaA5ERA,7444 +pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 +pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 +pip/_vendor/rich/_lru_cache.py,sha256=M7H1ZQF32o6SxrpOur9zTIhEHlNXT9XnrcdhruUmG5I,1246 +pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 +pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 +pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472 +pip/_vendor/rich/_spinners.py,sha256=huT1biTlwyp9Lm8S7bLfVzg1psUaIH5xHDwTaWEHVh0,26521 +pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 +pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 +pip/_vendor/rich/_windows.py,sha256=nBO71icHMIHlzT7hg6fkoIdh1mT-5MvDdPDwunkshyw,2065 +pip/_vendor/rich/_wrap.py,sha256=OtnSxnERkuNlSM1d_MYtNg8KIYTcTBk3peg16dCZH_U,1804 +pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 +pip/_vendor/rich/align.py,sha256=2zRHV8SzR5eP-vQkSDgjmgsBLBluCBwykgejAW6oRD0,10425 +pip/_vendor/rich/ansi.py,sha256=QaVVkfvVL6C3OsuWI9iQ-iJFkMsMohjYlxgMLnVTEPo,6676 +pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264 +pip/_vendor/rich/box.py,sha256=o0ywz1iW0WjGLPrRVDAZPh1CVPEgAOaWsn8Bf3sf43g,9069 +pip/_vendor/rich/cells.py,sha256=NadN20gFxE8Aj-2S3Drn7qgn-ZpsRZcNnTNtweRL7rA,4285 +pip/_vendor/rich/color.py,sha256=SD3yTf3t8japb-jOv8GYCMCDqyzpipzXS_0rAXhSlU4,17285 +pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 +pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 +pip/_vendor/rich/console.py,sha256=bioCy8012eZ8PIOBxMyyqxYPltKk2pGEG9jmwylNCQk,81236 +pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 +pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497 +pip/_vendor/rich/control.py,sha256=qxg6Yjd78XuF0VxthlT8O4dpvpACYwKkBfm2S4-IvHA,5298 +pip/_vendor/rich/default_styles.py,sha256=At42PcWzmnYWcx5fUOKyOUpI8HK5m4ItZqxkgHToaMs,7614 +pip/_vendor/rich/diagnose.py,sha256=4L8SZfbqjIRotzJ39QzD9-d4I80FyV1mNKHryg1eArE,183 +pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501 +pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 +pip/_vendor/rich/file_proxy.py,sha256=fHeReSO3VJ7IbH_9ri-OrPYbFC3UYOzeTNjngiiWOcY,1613 +pip/_vendor/rich/filesize.py,sha256=oQJnM5_7ygkpzt3GtNq5l3F6gmB7YahBA5vpdQVKLwI,2511 +pip/_vendor/rich/highlighter.py,sha256=AdhjC0meTYswZ_xKgka0cRYdNjLABLUzHAbyF3QpPWo,4894 +pip/_vendor/rich/json.py,sha256=RCm4lXBXrjvXHpqrWPH8wdGP0jEo4IohLmkddlhRY18,5051 +pip/_vendor/rich/jupyter.py,sha256=4sxNAwJs4g3dYfWy_enPw9fp0Tdn-82tV4T9uh9vAOM,3025 +pip/_vendor/rich/layout.py,sha256=b64KMDP2EPiC103P-v-_VZKGY13oWiiGS418P_KRRlc,14048 +pip/_vendor/rich/live.py,sha256=OKxMaFU5sFfuR--cJftGYjSvg1VPQri1U_DNZUjCsvI,13711 +pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667 +pip/_vendor/rich/logging.py,sha256=YNcCSK6pCo2Wg6JKqScAe6VgFqebHBnS5nDnBO4gXAA,10868 +pip/_vendor/rich/markup.py,sha256=hsVW_k1TIvj5OPPQ12ihAii9HSVa8N1TStvA5B2GGpo,8058 +pip/_vendor/rich/measure.py,sha256=Z74XvzIgLZm0xH-QIo1uX5d4oahavHe8D8MKyxLNqPQ,5258 +pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970 +pip/_vendor/rich/pager.py,sha256=VK_2EfH0JduZWdyV-KZma06bvi_V5PWmHG6W7BoiaTg,838 +pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 +pip/_vendor/rich/panel.py,sha256=O6ORyIhDcOLSEasTjpcDvmhvIcppPGCeQoXpoycIUT8,8637 +pip/_vendor/rich/pretty.py,sha256=HAB68BpYysaL1EXeV4X5Tt-U2hDlcLpbFz06fkojWWE,32572 +pip/_vendor/rich/progress.py,sha256=jcgi7aMnQ_YjSpAmQkalwtNsgVn9i56SeZGprr7tuOk,35926 +pip/_vendor/rich/progress_bar.py,sha256=ELiBaxJOgsRYKpNIrot7BC0bFXvmf8cTd6nxI02BbK0,7762 +pip/_vendor/rich/prompt.py,sha256=gKVd13YWv6jedzwcRPZGUINBjC-xcJhJ_xz_NvMW80c,11307 +pip/_vendor/rich/protocol.py,sha256=Vx6n4fEoSDhzSup8t3KH0iK2RWyssIOks5E0S1qw1GA,1401 +pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 +pip/_vendor/rich/repr.py,sha256=1A0U0_ibG_bZbw71pUBIctO9Az-CQUuyOTbiKcJOwyw,4309 +pip/_vendor/rich/rule.py,sha256=cPK6NYo4kzh-vM_8a-rXajXplsbaHa6ahErYvGSsrJ0,4197 +pip/_vendor/rich/scope.py,sha256=HX13XsJfqzQHpPfw4Jn9JmJjCsRj9uhHxXQEqjkwyLA,2842 +pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 +pip/_vendor/rich/segment.py,sha256=MBBAWaHyqCQFCfiNbrTW4BGaFR1uU31XktJ1S3Taqb4,23916 +pip/_vendor/rich/spinner.py,sha256=V6dW0jIk5IO0_2MyxyftQf5VjCHI0T2cRhJ4F31hPIQ,4312 +pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425 +pip/_vendor/rich/style.py,sha256=AD1I7atfclsFCtGeL8ronH1Jj-02WLp9ZQ2VYqmpBjM,26469 +pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 +pip/_vendor/rich/syntax.py,sha256=pJAD08ywowg5xVwTGCqUOMpDYskjoMoDYEV-hryEX5s,26994 +pip/_vendor/rich/table.py,sha256=oQAEBaV4zMUPyg_tSA93_GrCirdIf-osolxf9wb3pEo,36757 +pip/_vendor/rich/tabulate.py,sha256=nl0oeNbiXectEgTHyj3K7eN4NZMISpaogpOdZyEOGbs,1700 +pip/_vendor/rich/terminal_theme.py,sha256=E0nI_ycFpvflamt-KVCY4J52LmUjRi1Y6ICB-Ef3gMo,1459 +pip/_vendor/rich/text.py,sha256=auX3LpY-I6PBiNyxB3o3LyMEx7lna2cx9IbNQJDwtw8,44424 +pip/_vendor/rich/theme.py,sha256=GKNtQhDBZKAzDaY0vQVQQFzbc0uWfFe6CJXA-syT7zQ,3627 +pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 +pip/_vendor/rich/traceback.py,sha256=hAU3IR295eFuup_px2NU4aCEWu7KQs1qpZbnqoHCtR0,25935 +pip/_vendor/rich/tree.py,sha256=JxyWbc27ZuwoLQnd7I-rSsRsqI9lzaVKlfTLJXla9U0,9122 +pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549 +pip/_vendor/tenacity/__init__.py,sha256=GLLsTFD4Bd5VDgTR6mU_FxyOsrxc48qONorVaRebeD4,18257 +pip/_vendor/tenacity/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/_asyncio.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/_utils.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/after.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/before.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/before_sleep.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/nap.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/retry.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/stop.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-310.pyc,, +pip/_vendor/tenacity/__pycache__/wait.cpython-310.pyc,, +pip/_vendor/tenacity/_asyncio.py,sha256=HEb0BVJEeBJE9P-m9XBxh1KcaF96BwoeqkJCL5sbVcQ,3314 +pip/_vendor/tenacity/_utils.py,sha256=-y68scDcyoqvTJuJJ0GTfjdSCljEYlbCYvgk7nM4NdM,1944 +pip/_vendor/tenacity/after.py,sha256=dlmyxxFy2uqpLXDr838DiEd7jgv2AGthsWHGYcGYsaI,1496 +pip/_vendor/tenacity/before.py,sha256=7XtvRmO0dRWUp8SVn24OvIiGFj8-4OP5muQRUiWgLh0,1376 +pip/_vendor/tenacity/before_sleep.py,sha256=ThyDvqKU5yle_IvYQz_b6Tp6UjUS0PhVp6zgqYl9U6Y,1908 +pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383 +pip/_vendor/tenacity/retry.py,sha256=62R71W59bQjuNyFKsDM7hE2aEkEPtwNBRA0tnsEvgSk,6645 +pip/_vendor/tenacity/stop.py,sha256=sKHmHaoSaW6sKu3dTxUVKr1-stVkY7lw4Y9yjZU30zQ,2790 +pip/_vendor/tenacity/tornadoweb.py,sha256=E8lWO2nwe6dJgoB-N2HhQprYLDLB_UdSgFnv-EN6wKE,2145 +pip/_vendor/tenacity/wait.py,sha256=e_Saa6I2tsNLpCL1t9897wN2fGb0XQMQlE4bU2t9V2w,6691 +pip/_vendor/tomli/__init__.py,sha256=z1Elt0nLAqU5Y0DOn9p__8QnLWavlEOpRyQikdYgKro,230 +pip/_vendor/tomli/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/tomli/__pycache__/_parser.cpython-310.pyc,, +pip/_vendor/tomli/__pycache__/_re.cpython-310.pyc,, +pip/_vendor/tomli/_parser.py,sha256=50BD4o9YbzFAGAYyZLqZC8F81DQ7iWWyJnrHNwBKa6A,22415 +pip/_vendor/tomli/_re.py,sha256=5GPfgXKteg7wRFCF-DzlkAPI2ilHbkMK2-JC49F-AJQ,2681 +pip/_vendor/typing_extensions.py,sha256=1uqi_RSlI7gos4eJB_NEV3d5wQwzTUQHd3_jrkbTo8Q,87149 +pip/_vendor/urllib3/__init__.py,sha256=j3yzHIbmW7CS-IKQJ9-PPQf_YKO8EOAey_rMW0UR7us,2763 +pip/_vendor/urllib3/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/_collections.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/_version.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/connection.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/connectionpool.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/exceptions.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/fields.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/filepost.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/poolmanager.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/request.cpython-310.pyc,, +pip/_vendor/urllib3/__pycache__/response.cpython-310.pyc,, +pip/_vendor/urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811 +pip/_vendor/urllib3/_version.py,sha256=_NdMUQaeBvFHAX2z3zAIX2Wum58A6rVtY1f7ByHsQ4g,63 +pip/_vendor/urllib3/connection.py,sha256=6zokyboYYKm9VkyrQvVVLgxMyCZK7n9Vmg_2ZK6pbhc,20076 +pip/_vendor/urllib3/connectionpool.py,sha256=qz-ICrW6g4TZVCbDQ8fRe68BMpXkskkR9vAVY9zUWtA,39013 +pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 +pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-310.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 +pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 +pip/_vendor/urllib3/contrib/appengine.py,sha256=lfzpHFmJiO82shClLEm3QB62SYgHWnjpZOH_2JhU5Tc,11034 +pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=ej9gGvfAb2Gt00lafFp45SIoRz-QwrQ4WChm6gQmAlM,4538 +pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=DD4pInv_3OEEGffEFynBoirc8ldR789sLmGSKukzA0E,16900 +pip/_vendor/urllib3/contrib/securetransport.py,sha256=4qUKo7PUV-vVIqXmr2BD-sH7qplB918jiD5eNsRI9vU,34449 +pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 +pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 +pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 +pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 +pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/packages/__pycache__/six.cpython-310.pyc,, +pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-310.pyc,, +pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 +pip/_vendor/urllib3/packages/six.py,sha256=1LVW7ljqRirFlfExjwl-v1B7vSAUNTmzGMs-qays2zg,34666 +pip/_vendor/urllib3/poolmanager.py,sha256=whzlX6UTEgODMOCy0ZDMUONRBCz5wyIM8Z9opXAY-Lk,19763 +pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985 +pip/_vendor/urllib3/response.py,sha256=hGhGBh7TkEkh_IQg5C1W_xuPNrgIKv5BUXPyE-q0LuE,28203 +pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 +pip/_vendor/urllib3/util/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/connection.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/proxy.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/queue.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/request.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/response.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/retry.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/timeout.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/url.cpython-310.pyc,, +pip/_vendor/urllib3/util/__pycache__/wait.cpython-310.pyc,, +pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 +pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 +pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 +pip/_vendor/urllib3/util/request.py,sha256=NnzaEKQ1Pauw5MFMV6HmgEMHITf0Aua9fQuzi2uZzGc,4123 +pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 +pip/_vendor/urllib3/util/retry.py,sha256=iESg2PvViNdXBRY4MpL4h0kqwOOkHkxmLn1kkhFHPU8,22001 +pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177 +pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=w01jCYuwvQ038p9mhc1P1gF8IiTN1qHakThpoukOlbw,5751 +pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 +pip/_vendor/urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003 +pip/_vendor/urllib3/util/url.py,sha256=QVEzcbHipbXyCWwH6R4K4TR-N8T4LM55WEMwNUTBmLE,14047 +pip/_vendor/urllib3/util/wait.py,sha256=3MUKRSAUJDB2tgco7qRUskW0zXGAWYvRRE4Q1_6xlLs,5404 +pip/_vendor/vendor.txt,sha256=SpijkWP2aapE1DEgOKL1wxuOz1ztM7E2Xs2PZ-V1PKA,496 +pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 +pip/_vendor/webencodings/__pycache__/__init__.cpython-310.pyc,, +pip/_vendor/webencodings/__pycache__/labels.cpython-310.pyc,, +pip/_vendor/webencodings/__pycache__/mklabels.cpython-310.pyc,, +pip/_vendor/webencodings/__pycache__/tests.cpython-310.pyc,, +pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-310.pyc,, +pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 +pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 +pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 +pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 +pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/REQUESTED b/venv/Lib/site-packages/pip-22.0.4.dist-info/REQUESTED new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/WHEEL b/venv/Lib/site-packages/pip-22.0.4.dist-info/WHEEL new file mode 100644 index 000000000..becc9a66e --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/entry_points.txt b/venv/Lib/site-packages/pip-22.0.4.dist-info/entry_points.txt new file mode 100644 index 000000000..9609f72c5 --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip._internal.cli.main:main +pip3 = pip._internal.cli.main:main +pip3.9 = pip._internal.cli.main:main + diff --git a/venv/Lib/site-packages/pip-22.0.4.dist-info/top_level.txt b/venv/Lib/site-packages/pip-22.0.4.dist-info/top_level.txt new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/venv/Lib/site-packages/pip-22.0.4.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/venv/Lib/site-packages/pip/__init__.py b/venv/Lib/site-packages/pip/__init__.py new file mode 100644 index 000000000..3a0d263ef --- /dev/null +++ b/venv/Lib/site-packages/pip/__init__.py @@ -0,0 +1,13 @@ +from typing import List, Optional + +__version__ = "22.0.4" + + +def main(args: Optional[List[str]] = None) -> int: + """This is an internal API only meant for use by pip's own console scripts. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/Lib/site-packages/pip/__main__.py b/venv/Lib/site-packages/pip/__main__.py new file mode 100644 index 000000000..fe34a7b77 --- /dev/null +++ b/venv/Lib/site-packages/pip/__main__.py @@ -0,0 +1,31 @@ +import os +import sys +import warnings + +# Remove '' and current working directory from the first entry +# of sys.path, if present to avoid using current directory +# in pip commands check, freeze, install, list and show, +# when invoked as python -m pip +if sys.path[0] in ("", os.getcwd()): + sys.path.pop(0) + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == "": + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +if __name__ == "__main__": + # Work around the error reported in #9540, pending a proper fix. + # Note: It is essential the warning filter is set *before* importing + # pip, as the deprecation happens at import time, not runtime. + warnings.filterwarnings( + "ignore", category=DeprecationWarning, module=".*packaging\\.version" + ) + from pip._internal.cli.main import main as _main + + sys.exit(_main()) diff --git a/venv/Lib/site-packages/pip/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7545cf8a6a800e50e7002cee8930de8342566fc0 GIT binary patch literal 633 zcmYjPPiqx15Ks1Bw@(Wmy!2#l^1$v&d7u^%rBW42Em|*+#U*c(z8Bq1LMHplmU`0f z;Aij?_+1t}dGafGa`Hs!keSScnfd*aiP_ni5R~ule=H;=`3IJKZ3Q{}Q1W^bi$pqY+d@fx#zA$rZgKpD7~5mtW6T3K%Y~ znbKZ5?9ZN^zG6nV1M4K$o}C-VdXQ`}FstlcVCF)z#%M6DWY9QeJrt7(Lpj1!E`<6^ zlnLp%YT+IODcQ<<3kPMnRDRVjipF%M9V{=gXQ=>s3FU*?qld+&kqeiZ(lM_u9Jf|F ze1P-*8tLLWaJ1m6i zh4L@^MRlYc_`OqSKFG#bYpK`Ov07B1yxg;(n}X+;9@l6jk;bV1)N}Ak1=>R#z=ZovSE46Y=`{(ac4x|$|vC^ LAmH30NyOqmqO+)W literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/__pycache__/__main__.cpython-310.pyc b/venv/Lib/site-packages/pip/__pycache__/__main__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3208e248e23a6a455fe3e94521eb4283f0bf42d GIT binary patch literal 595 zcmYjNL5tKd6i(8#6L)83S6LQ4=zWB(;88>b7xl1+xQbAUrPI8vnQhaOWM&<&p8W?N zrbjPc{VxGep8N%Z7k%xlVjwTP?|pgS_g*uZ><~O(-+Y^Y;e>qelmAbM$wR#M69!2n ztw^$cX+npbB@E~ykmLrD49JFeBD^XzBG<$se|=jWeZ@r}HW@5s}2rB4dG^T2fBpgAC9y*Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/__init__.py b/venv/Lib/site-packages/pip/_internal/__init__.py new file mode 100644 index 000000000..6afb5c627 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/__init__.py @@ -0,0 +1,19 @@ +from typing import List, Optional + +import pip._internal.utils.inject_securetransport # noqa +from pip._internal.utils import _log + +# init_logging() must be called before any call to logging.getLogger() +# which happens at import of most modules. +_log.init_logging() + + +def main(args: (Optional[List[str]]) = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3f6031601b6030aecacc782e0649364b00cc6a0 GIT binary patch literal 754 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60d046a9440b93e3bcf9683d6f5f3eccd76f6ee6 GIT binary patch literal 11127 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ceee40548123b7787a5d994165b5aa526aa3097 GIT binary patch literal 23126 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 M{5^x~_3i2Z4Yh6$It7im1Htbk~r?){L`gQ8~eL zaOVklmq?sA@d}(62dV1F^Z9c$KcB~OdwX-i_VfL()tMCHcRXCT86Tdp(|rabjBG_G zm$FNii4^9BNg)9V>Au((CWGuEGc%Kan=NN1c`FvhAI=hsWXw)1g|T?$gLS=bPsdE- zn#LR<4A?i^`N|Sz(T~{a4ug>2+qP;23gH3}`o{L_xni@SoKNJKOK4;4f1S!e(6*&}iU8Cm z1W$)mwYFh1tjfl9mEUb&Y+b=vl&-;G%$u_Hyel@|%dUt%Fo7x|cn po#z>0d=N|-#*_k%DXX2LCVAK3W(+Bwbj}PdJdGoms@@hV{Ri&8rBwg` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98fa28dea34f37137be46f6025d15abd62c9e9b6 GIT binary patch literal 3538 zcmb7HUvC@75#QZAo{r>^k|ia!3fsN9DP#f`69X-32(H^YP8%1hEZAv{5=w~^cS)Un z|Gc}DLiSjsRv!9d6n##E+I{PLfxZ;T#|UshpZe6V5FmDE_DG5{(gHo;Py8N`4=u0pE@jl1h4uV44iNpkq-W65sg`gQJhD~ z({aq69WBLf$2IdxRE=w$T3qkc&Dx2)xY23E%}z63?kvOJlCZfeR{A!t^4ceM=Nzw# zRoGdD9gjC)XH78P91ywHBxVr7Hyb3nHW@0y`^#QFy5*Z4Yr19;xx^Z{wT z`ESsi?6zo8OM+N%J=roSP7AscoCPzUO^84b+ zFq9$|i7x633lMScZlZJ$MFDcZCuJ&&OH;1B(Vk2niJrba45OJ0Rb2Xcs8pB?{>x`8 zJ$O_&Qs|*fdKC4ZJ~+4FeHUJJ5e7|iq5+Dup&6%~eFEz{&GU5wP zCcgvX58Vj`AryuDl2G!5aRRJ#7fi2(pd(n8^h9APEn$nb-zn@+i}MFk3@2`zY`wpD-g1k1--|?K&bsJ z%--&Xi53#je>)pxC1~wzR8(&cL?S-Qj2WD7q;>HI_0ZDUgNR{{FqZ!VaF|+7U(ks? zoimtMa$B9xE9$(qa_dvT;?mS<5L4a%NA>p?c~ToYx{=pTz}AQ4$qSq4=IC=uCXheJHABCe*FI&RG33hYPtp4NZ|leO7&HP* zT)@OLv$X+v!6uCXnKX0H==ufsCSIxUq^XzlYVPIDym127wAO>$kY#q#fcyGT`17c1 zV=VanFcR%r&4*_%kPr!QZPm6}Z_fqHbvE$}n(RP!!2Il| z{nDs1#cZmtGjA?t7WV&BfFXihWssS(g0<$J0P6<;B3_x<+0zS&dD1@?n-U0!O)_VR&WJqK)#N2V07OjX zi6RJ=pbr7&1ITFhnUherVP=dw!20S#bqQsfAh2f$=jqxQ4zZN_VT?eQyk%A_ExS5Z z7mAZUY@JoQ!~*O55kQ(Q#*r`6RG)@l%N##`=<`%4KS{M8WSIygavdPtdn0`a!8k2+ z+kPTKbcVk<3#Lurg5^Ap&E4Dd`{^*@?QvzO`&&1lPjN*84h3L#$DYApOPTaPzI!KB z!9fIHzUH?1p#p$SU$Z^a;Z)Vb0L%*z@nHsG{lS-wQt}j;@xlKsdUin-h%G%em4!Fr zHxtn1wTK$8n$vZfLPh_fX1V8d?-XTE)_GM+D2FxQc$qn?Un)F?Y5Y_47EsZ z;(#;2X=&PPj4$5RXuWZXkBtGU0R001rP{#R0($Jd0+lA?w}7~pCQwNs0R_nnv&9Rs z?E~;-0F@!LA~*0{Y_JL^RG2Mg6&H4zi9|X$twfMpq3pvkys!pB7Y^L|IM5P{sOdQ* zHssR9VF`yzFtnEC6`X$?hqrL}4h%&DGU91#P*ibg;45e!4A06EUWP}v3=acKQD3-) zMa3i-`Aro2EgXCtu*qBKl-5x3)3c0ZY&}#CgLlEBE@RZC_A9&6q$~8|E05XCbv?@9 z&wl0D9xdlJW`E^W+=@*-%eHOcb83t_FTJYk)TnE@h68t8hXGI1tU>ZiX0fl_kJ+o5 z<5A$FcEhDjCU1ZOtv3z!MZK3o=ICL%R}%ZU!qKA)JS;6(NNikW1-I+ac(%LHl=4)T zp1HEH(=KBM_}U9VsnQ?lnc{+>o;9v*@lj8hpAgD;ymTRYw6G5#l1sm0t7O_W<5Hvd z0?Gz&)0Db5II?UG^qlNu)<7mc^@$*O4>%wT3>w2QylHg(%-Tl#OeZT)xJj{cY0uKt(X zW&Ewg>sQ*9zTfsuT5l&a{c5|W>rPVd&$efEy_7WibL}}@ca!=4x%N3-FDDEA^X>Dx z?j;xci|s{SuOt`yOYNoprS_%%<@ROW=O)os=lLSLz@6T8R%2$@WsB@0`oGW2 zHKV!oFOt)Prj^@or=#4t9d}gI%u9nvNRCSFew=QvW=X<3DihT4FzReaoBVE^GEN1{3UKV_iU>2?BsT>L(vRLfRFF#&c?yoGfN6YtaEq`!p zd99t>+kBL}f~%oOJJ9#>W1~jjDn1FA7-M5<92gT*nNw?Q9+*=bEo*G88Q+)>nojP5 z;f(RTycNl&jBz>C96%;I*}VlFFx;q05R3=eZEyxc46nJ)9$3}$-F z2C}Mo9qR9{k|x)Psl3vOz%1!a%wnep9qR-eq!=<{t(-rg5<@*9j0~kYHpOja_3WuL zHkqkPW25Kpn+GaP3@Q1moF;&iiF%S&4FdHsa~ z2)?s#mFdyA*F z)H+&y%5=z#=+oLEyeLR~%@7S#$#=++%-sQuJbuzNMH9VexY9>{9sQD&?pk~EXSOAy ztqw+mINX7?z%%64&QQQ*z%9gm-XVM(JsQwxXm0+B3iNNt66s5shd4pcfw^zWhVCt$ z?lozJJGQ1}W_c$HR_*swp4f-EpE?Fx7wF-PmGR9v9qH55&^&@C}2Zc_0Qiri8BiOS9H z8Jz>J(GLF!W=Pt@wH$Na#^*RC&$LYUKMk*HHOwo(J{zIYR(CzvD;Ey!jB`N;sE zBmsEFylKsWFoaz0#FQgBN@ag%oxFy1skIPUf%ZuJdd_w49Q?9F_2~|P+7oYi2yhXusj$J zHbumE&_@hKC?={Yt)?|`8g!$M(sWKyhlwiQ4-R8W(2r6q6*mGo>}&;Kg{9pfOM|Urg81JSeu2_tvFraB>E?T{95Qn;kUlOjrn zp!yiorGujC&YOZFPhOTqPLP+g0nwMI0tAH&51$tLBRHc%=nQe2Vz%@dL_M~8)&wRz zarVAcHWc6>D43IyD)mZJ7t!5i4otJWV~95yjJl}lQIA^8Su#}Rz?ziD?znu>nED3> zbGI>DkCv8UjK{ioKXqUsp)#uYXL9%gq8R>cf| z>`xoSZ*OigGoH~@x(GkuTg{JWde*)P>ZR$qu`_lL;5gL67;$z|9oysTwvl~4wtMHt z)!zASJNsN+U~q4f+PEfve@J7ockye3)&68n>S}3viPf>r8P^XS?Silig52fNH-!sQ zOT8;>7Q8o}VyDNNi(R8RxA%7q)u5Y+AW8u>G9KN6(pm*R@5lWZpac@Tf`2wd5F7a1^E6oaN_>7RnG) z1=8FI;LW`))lc3)rifTwPmno>oukw_pGE90l3`lXmH8sf8;LU-9f*g8M{D=W!3yj& z9_)SjI2#6$fWb@T82U(u!7*5tzX-OnU5@sR;6*11IogThB-%)L%cu2nD;p*(=)j(0 zWbB8|gXrzVkrvhUV}K=$i)rYNdq2iFIR;FeW2eQUvTP2Y5$ zH*DYZY{#+?&k@nTwLJa*&MDE~v)uny%O0{%->ll6gkqQ{myzWwy+g73PR!&6nQc6=$_Tmw%8oc3am!3(>x_rcs6NY7%GGWrwlP=VpGAcjf9W(iL}yT=OJEW7 zby`>CiImUf7ysY%ehhc1b4G1#6-4{{8q4CBB%n{Jc#8_ULl%jVvyo*<5xZS|W06{O vC%|=_VddVNMcVc&x<*LSl!r^{i??A`Exfp+(7S-ov3z^puDkO;zvBN7|C-&x literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0954c5ba0a4aa9fa20382a53fe45f4f2a0c34443 GIT binary patch literal 9140 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/build_env.py b/venv/Lib/site-packages/pip/_internal/build_env.py new file mode 100644 index 000000000..daeb7fbc8 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/build_env.py @@ -0,0 +1,296 @@ +"""Build Environment used for isolation during sdist building +""" + +import contextlib +import logging +import os +import pathlib +import sys +import textwrap +import zipfile +from collections import OrderedDict +from sysconfig import get_paths +from types import TracebackType +from typing import TYPE_CHECKING, Iterable, Iterator, List, Optional, Set, Tuple, Type + +from pip._vendor.certifi import where +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.version import Version + +from pip import __file__ as pip_location +from pip._internal.cli.spinners import open_spinner +from pip._internal.locations import get_platlib, get_prefixed_libs, get_purelib +from pip._internal.metadata import get_environment +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds + +if TYPE_CHECKING: + from pip._internal.index.package_finder import PackageFinder + +logger = logging.getLogger(__name__) + + +class _Prefix: + def __init__(self, path: str) -> None: + self.path = path + self.setup = False + self.bin_dir = get_paths( + "nt" if os.name == "nt" else "posix_prefix", + vars={"base": path, "platbase": path}, + )["scripts"] + self.lib_dirs = get_prefixed_libs(path) + + +@contextlib.contextmanager +def _create_standalone_pip() -> Iterator[str]: + """Create a "standalone pip" zip file. + + The zip file's content is identical to the currently-running pip. + It will be used to install requirements into the build environment. + """ + source = pathlib.Path(pip_location).resolve().parent + + # Return the current instance if `source` is not a directory. We can't build + # a zip from this, and it likely means the instance is already standalone. + if not source.is_dir(): + yield str(source) + return + + with TempDirectory(kind="standalone-pip") as tmp_dir: + pip_zip = os.path.join(tmp_dir.path, "__env_pip__.zip") + kwargs = {} + if sys.version_info >= (3, 8): + kwargs["strict_timestamps"] = False + with zipfile.ZipFile(pip_zip, "w", **kwargs) as zf: + for child in source.rglob("*"): + zf.write(child, child.relative_to(source.parent).as_posix()) + yield os.path.join(pip_zip, "pip") + + +class BuildEnvironment: + """Creates and manages an isolated environment to install build deps""" + + def __init__(self) -> None: + temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True) + + self._prefixes = OrderedDict( + (name, _Prefix(os.path.join(temp_dir.path, name))) + for name in ("normal", "overlay") + ) + + self._bin_dirs: List[str] = [] + self._lib_dirs: List[str] = [] + for prefix in reversed(list(self._prefixes.values())): + self._bin_dirs.append(prefix.bin_dir) + self._lib_dirs.extend(prefix.lib_dirs) + + # Customize site to: + # - ensure .pth files are honored + # - prevent access to system site packages + system_sites = { + os.path.normcase(site) for site in (get_purelib(), get_platlib()) + } + self._site_dir = os.path.join(temp_dir.path, "site") + if not os.path.exists(self._site_dir): + os.mkdir(self._site_dir) + with open( + os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8" + ) as fp: + fp.write( + textwrap.dedent( + """ + import os, site, sys + + # First, drop system-sites related paths. + original_sys_path = sys.path[:] + known_paths = set() + for path in {system_sites!r}: + site.addsitedir(path, known_paths=known_paths) + system_paths = set( + os.path.normcase(path) + for path in sys.path[len(original_sys_path):] + ) + original_sys_path = [ + path for path in original_sys_path + if os.path.normcase(path) not in system_paths + ] + sys.path = original_sys_path + + # Second, add lib directories. + # ensuring .pth file are processed. + for path in {lib_dirs!r}: + assert not path in sys.path + site.addsitedir(path) + """ + ).format(system_sites=system_sites, lib_dirs=self._lib_dirs) + ) + + def __enter__(self) -> None: + self._save_env = { + name: os.environ.get(name, None) + for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH") + } + + path = self._bin_dirs[:] + old_path = self._save_env["PATH"] + if old_path: + path.extend(old_path.split(os.pathsep)) + + pythonpath = [self._site_dir] + + os.environ.update( + { + "PATH": os.pathsep.join(path), + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": os.pathsep.join(pythonpath), + } + ) + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + for varname, old_value in self._save_env.items(): + if old_value is None: + os.environ.pop(varname, None) + else: + os.environ[varname] = old_value + + def check_requirements( + self, reqs: Iterable[str] + ) -> Tuple[Set[Tuple[str, str]], Set[str]]: + """Return 2 sets: + - conflicting requirements: set of (installed, wanted) reqs tuples + - missing requirements: set of reqs + """ + missing = set() + conflicting = set() + if reqs: + env = get_environment(self._lib_dirs) + for req_str in reqs: + req = Requirement(req_str) + dist = env.get_distribution(req.name) + if not dist: + missing.add(req_str) + continue + if isinstance(dist.version, Version): + installed_req_str = f"{req.name}=={dist.version}" + else: + installed_req_str = f"{req.name}==={dist.version}" + if dist.version not in req.specifier: + conflicting.add((installed_req_str, req_str)) + # FIXME: Consider direct URL? + return conflicting, missing + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + prefix = self._prefixes[prefix_as_string] + assert not prefix.setup + prefix.setup = True + if not requirements: + return + with contextlib.ExitStack() as ctx: + pip_runnable = ctx.enter_context(_create_standalone_pip()) + self._install_requirements( + pip_runnable, + finder, + requirements, + prefix, + kind=kind, + ) + + @staticmethod + def _install_requirements( + pip_runnable: str, + finder: "PackageFinder", + requirements: Iterable[str], + prefix: _Prefix, + *, + kind: str, + ) -> None: + args: List[str] = [ + sys.executable, + pip_runnable, + "install", + "--ignore-installed", + "--no-user", + "--prefix", + prefix.path, + "--no-warn-script-location", + ] + if logger.getEffectiveLevel() <= logging.DEBUG: + args.append("-v") + for format_control in ("no_binary", "only_binary"): + formats = getattr(finder.format_control, format_control) + args.extend( + ( + "--" + format_control.replace("_", "-"), + ",".join(sorted(formats or {":none:"})), + ) + ) + + index_urls = finder.index_urls + if index_urls: + args.extend(["-i", index_urls[0]]) + for extra_index in index_urls[1:]: + args.extend(["--extra-index-url", extra_index]) + else: + args.append("--no-index") + for link in finder.find_links: + args.extend(["--find-links", link]) + + for host in finder.trusted_hosts: + args.extend(["--trusted-host", host]) + if finder.allow_all_prereleases: + args.append("--pre") + if finder.prefer_binary: + args.append("--prefer-binary") + args.append("--") + args.extend(requirements) + extra_environ = {"_PIP_STANDALONE_CERT": where()} + with open_spinner(f"Installing {kind}") as spinner: + call_subprocess( + args, + command_desc=f"pip subprocess to install {kind}", + spinner=spinner, + extra_environ=extra_environ, + ) + + +class NoOpBuildEnvironment(BuildEnvironment): + """A no-op drop-in replacement for BuildEnvironment""" + + def __init__(self) -> None: + pass + + def __enter__(self) -> None: + pass + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + pass + + def cleanup(self) -> None: + pass + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + raise NotImplementedError() diff --git a/venv/Lib/site-packages/pip/_internal/cache.py b/venv/Lib/site-packages/pip/_internal/cache.py new file mode 100644 index 000000000..1d6df2201 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cache.py @@ -0,0 +1,264 @@ +"""Cache Management +""" + +import hashlib +import json +import logging +import os +from typing import Any, Dict, List, Optional, Set + +from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InvalidWheelFilename +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.urls import path_to_url + +logger = logging.getLogger(__name__) + + +def _hash_dict(d: Dict[str, str]) -> str: + """Return a stable sha224 of a dictionary.""" + s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True) + return hashlib.sha224(s.encode("ascii")).hexdigest() + + +class Cache: + """An abstract class - provides cache directories for data from links + + + :param cache_dir: The root of the cache. + :param format_control: An object of FormatControl class to limit + binaries being read from the cache. + :param allowed_formats: which formats of files the cache should store. + ('binary' and 'source' are the only allowed values) + """ + + def __init__( + self, cache_dir: str, format_control: FormatControl, allowed_formats: Set[str] + ) -> None: + super().__init__() + assert not cache_dir or os.path.isabs(cache_dir) + self.cache_dir = cache_dir or None + self.format_control = format_control + self.allowed_formats = allowed_formats + + _valid_formats = {"source", "binary"} + assert self.allowed_formats.union(_valid_formats) == _valid_formats + + def _get_cache_path_parts(self, link: Link) -> List[str]: + """Get parts of part that must be os.path.joined with cache_dir""" + + # We want to generate an url to use as our cache key, we don't want to + # just re-use the URL because it might have other items in the fragment + # and we don't care about those. + key_parts = {"url": link.url_without_fragment} + if link.hash_name is not None and link.hash is not None: + key_parts[link.hash_name] = link.hash + if link.subdirectory_fragment: + key_parts["subdirectory"] = link.subdirectory_fragment + + # Include interpreter name, major and minor version in cache key + # to cope with ill-behaved sdists that build a different wheel + # depending on the python version their setup.py is being run on, + # and don't encode the difference in compatibility tags. + # https://github.com/pypa/pip/issues/7296 + key_parts["interpreter_name"] = interpreter_name() + key_parts["interpreter_version"] = interpreter_version() + + # Encode our key url with sha224, we'll use this because it has similar + # security properties to sha256, but with a shorter total output (and + # thus less secure). However the differences don't make a lot of + # difference for our use case here. + hashed = _hash_dict(key_parts) + + # We want to nest the directories some to prevent having a ton of top + # level directories where we might run out of sub directories on some + # FS. + parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] + + return parts + + def _get_candidates(self, link: Link, canonical_package_name: str) -> List[Any]: + can_not_cache = not self.cache_dir or not canonical_package_name or not link + if can_not_cache: + return [] + + formats = self.format_control.get_allowed_formats(canonical_package_name) + if not self.allowed_formats.intersection(formats): + return [] + + candidates = [] + path = self.get_path_for_link(link) + if os.path.isdir(path): + for candidate in os.listdir(path): + candidates.append((candidate, path)) + return candidates + + def get_path_for_link(self, link: Link) -> str: + """Return a directory to store cached items in for link.""" + raise NotImplementedError() + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + """Returns a link to a cached item if it exists, otherwise returns the + passed link. + """ + raise NotImplementedError() + + +class SimpleWheelCache(Cache): + """A cache of wheels for future installs.""" + + def __init__(self, cache_dir: str, format_control: FormatControl) -> None: + super().__init__(cache_dir, format_control, {"binary"}) + + def get_path_for_link(self, link: Link) -> str: + """Return a directory to store cached wheels for link + + Because there are M wheels for any one sdist, we provide a directory + to cache them in, and then consult that directory when looking up + cache hits. + + We only insert things into the cache if they have plausible version + numbers, so that we don't contaminate the cache with things that were + not unique. E.g. ./package might have dozens of installs done for it + and build a version of 0.0...and if we built and cached a wheel, we'd + end up using the same wheel even if the source has been edited. + + :param link: The link of the sdist for which this will cache wheels. + """ + parts = self._get_cache_path_parts(link) + assert self.cache_dir + # Store wheels within the root cache_dir + return os.path.join(self.cache_dir, "wheels", *parts) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + candidates = [] + + if not package_name: + return link + + canonical_package_name = canonicalize_name(package_name) + for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name): + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if canonicalize_name(wheel.name) != canonical_package_name: + logger.debug( + "Ignoring cached wheel %s for %s as it " + "does not match the expected distribution name %s.", + wheel_name, + link, + package_name, + ) + continue + if not wheel.supported(supported_tags): + # Built for a different python/arch/etc + continue + candidates.append( + ( + wheel.support_index_min(supported_tags), + wheel_name, + wheel_dir, + ) + ) + + if not candidates: + return link + + _, wheel_name, wheel_dir = min(candidates) + return Link(path_to_url(os.path.join(wheel_dir, wheel_name))) + + +class EphemWheelCache(SimpleWheelCache): + """A SimpleWheelCache that creates it's own temporary cache directory""" + + def __init__(self, format_control: FormatControl) -> None: + self._temp_dir = TempDirectory( + kind=tempdir_kinds.EPHEM_WHEEL_CACHE, + globally_managed=True, + ) + + super().__init__(self._temp_dir.path, format_control) + + +class CacheEntry: + def __init__( + self, + link: Link, + persistent: bool, + ): + self.link = link + self.persistent = persistent + + +class WheelCache(Cache): + """Wraps EphemWheelCache and SimpleWheelCache into a single Cache + + This Cache allows for gracefully degradation, using the ephem wheel cache + when a certain link is not found in the simple wheel cache first. + """ + + def __init__(self, cache_dir: str, format_control: FormatControl) -> None: + super().__init__(cache_dir, format_control, {"binary"}) + self._wheel_cache = SimpleWheelCache(cache_dir, format_control) + self._ephem_cache = EphemWheelCache(format_control) + + def get_path_for_link(self, link: Link) -> str: + return self._wheel_cache.get_path_for_link(link) + + def get_ephem_path_for_link(self, link: Link) -> str: + return self._ephem_cache.get_path_for_link(link) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + cache_entry = self.get_cache_entry(link, package_name, supported_tags) + if cache_entry is None: + return link + return cache_entry.link + + def get_cache_entry( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Optional[CacheEntry]: + """Returns a CacheEntry with a link to a cached item if it exists or + None. The cache entry indicates if the item was found in the persistent + or ephemeral cache. + """ + retval = self._wheel_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=True) + + retval = self._ephem_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=False) + + return None diff --git a/venv/Lib/site-packages/pip/_internal/cli/__init__.py b/venv/Lib/site-packages/pip/_internal/cli/__init__.py new file mode 100644 index 000000000..e589bb917 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/__init__.py @@ -0,0 +1,4 @@ +"""Subpackage containing all of pip's command line interface related code +""" + +# This file intentionally does not import submodules diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3f586f33f7e24f89932decb090e4b3d9c2ee9e5 GIT binary patch literal 274 zcmYjM%Sr=55S-1$C6IrZo8%DpE+T?rJcx+Fiwq9)=!DkUnPqw=pl5%^FYsRip8N|> z_683r=qjrFP}ONRn+nF)^SAwA{Ta<68a5X^)G~STBz&_H^U3>iRqbHhtJ#2bDHekf z<3^egWLnDshhyS>-<#-Vzz7m!fxI>jWQJf0cs_fW-p!lck=8yrtv^McaLS&3?d7R@ zB*>&5Dv?oF$<-cWA+^MEQ?0tjOl5JO(+jwwwh*`K7Of&Iu=sCAii>o5A018TT)vs>{8?P5}v literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62653f4034077dda924ecd3fa91da26c85b49eaf GIT binary patch literal 5309 zcmb7I&2QYs73U1OTrRa*ecF~3CuPz$%{I0iv7Z z-uy=K;Gk>Z`TC2$FON?d#y{wz|0&_)L%hkKQ3zwf5KQohEinDd7r6d47fk$`k<}k$Ogz7x#`U<-ih?wZn_k#VQa_3U;Vo}_OG~Y=0s1-N3oKKy-lCbs}Gj@$VS2+8uY{ZLbEo~VcJG14ZbO1VvXf5v> zPxxc@n6Gf*ih)N?R$LzxWij{_^g+LqIr35FK)2l~rIoC-gIPE4pQzz0XsB%Pj+?o1 zKONdN#Ly1cBL^^YK#%;x;mCA2v!J1zmDfksN6~MxGnfsokEP@5r#4LaSJY4AJ#)s; zmRB-!Zz8KeGP%OZw#~0MpNe6u+1LdRa?g_AY28oE$L0zXBibTUTVg&oAVH+V#;zot zq8-Wg@0gvTY)Jl_)}3M9onbLXb7#Z(Xc}|(wa!R3BE~0;&M1DZNdsOV&n1G3Q>0y- z-r!m~D$cxzez1I0TmG#1iI~tcvh`Q=oMYJ-EMn_t$(r=lz1Om_ebyQ8?HOjdk&Q#^ zXun?|y_WGq-#`cSZNA$a?piaRTY`R{BZj)xP$Z=lF}e2x?S(1r1?wZ*g z`i(%j$V@U#?uF?ZTKV)l$`VL5sN3~>u@s5oQT?g$Z0+*Q;-|QyHlK6{P;(D9% zMzVN4Oh0ZfFJ22}lAfQF@p@2C7q^gF7H@{ji%FOU=UaY#!(R=OMP$AUH8?krNMaZ2 zQF!5KrkrkVEB9iA1yFvx^fNMe7=>+c?lS(}u*LslG5f`X{tO#TUyNcHlw3lkH}np2 zovX#QxEXD$V%M?CYWeBfOYSW|$vkPpF_pWwMDE>#L-%nSO&UE%K4Tw9+8az?NLo>t zKIQTZz7@MKU%_u)oTb{UC}#2gllE`QIHHp>s)bi?sfUW*(()qjAZ9bR+ugtn87kL& zIC<673gwS5O0g|0q|}nZRt=Gu9MgUaT@upny{w%q*4p1dMQb1IY2QO28qb*blD-39ACIn{pZoO6w=kFdAr(KRLR)(fPYH>BjH2o(9w(~UJ;EjJ zqA~$3<=$wD;Qm!9V=0RywP^j4&T(ZX+ljJ*`(dg#QW8B=g@{OtIt!#qfU`?gKp-$G zTy7KNNK~OEY4S0`YmLAOY7>BWq-%*J8mH`>gQ%fCr`14uRsmP=Dd*+F?+9LX68Ce`ML?(IJG&FTA8`S z_6kHE(f(!!wCZ4VK@@NR*po(Pq4#x+wB?6sQ51y(nuM?3xE)Z6yq$yC(mQW#zP>p^ zdaEV>CJv43L5f>K;8EBTpP-%Xrx6zd7b%R%DogWlrx9y%zCc0if%{%oFlbtXP~f~vdQl$KVic2VvrBj(F^kO4O;ZUhezqws49D{6oDFJ(3u%4}BDdw5RETrFGdjw=GVJa5%I zZ2Ku7cw+@XIF@1ot}uZ(#~uLU?9!@b&2CMDJmmYOWbR^S70AT{Q8_O_A zJWZs-=Bh_rnzZDUXldzvF9z!6y)XeLz(w;(`-bZ2zIXWaQN-u7=2)X+iQu&y^wLNm zjv)KsUl97JJQ;LHFn5@2x*4c?6ty3D6uZ)g&6L58c!jP;7a%`w+3ZW0B<}ZfiYuaz z8j}^={V86+efQa(+2ciBgd&wz*(^>qy8Prgb(*nk)P3AYh>>c(1RmXUg{L^&kPcx?Q{VOSz2B zsz|{DXUJ>xWrvAQErl?F49M3fG{H`ldLG+WFQ`V>!#stN?R{DBfHN!SVj~vqD7Xad8_8QJ fkft@KDYFSy=EQbfldsu2Cct`#`Ed97YZLzkF{Me8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d13f32c2acf9a927e096ea759bab7a0c71f18cc9 GIT binary patch literal 6349 zcmb7INpBoUcFwI~j)j_v&%OYv{g0G#;0{rY;ww ziFneR)a6n%6(94C>2f(b9#4DI@d@vQu2-U&_@s9-KINT?PkX21Gu|29UX9Mi=e%?A zd)|Ao>$&lH?|l5e_kR3=_d)!j_o1d4i!Q_;c^~O=ExH(A@-D?Kuchnt=zH<^z3<1D zz011Zh-TxqcSV=SQNHS3jjwsvbiEl}k3aT4MtNf0^nQ<9d%w?ruy1;QaNl5)Y~lsl z`LSKw`$J|uG+I-GOSb~a-P>s#2MKdKQ6S}Imx_W%LB{b-`&pQ9`JZ$n3oTO>9|cjL z%T__zpC#L>d^?DuU@hXxnGa>A%8R`$Op_o|h2?%P;uulMM9|@DLFWl7)lSS(O(Id7 z8m@dhO)~y0`*HYeE@@e667_Dlo=>$D2+4&yyV7F;wz7VQcY}VE$ z`3sB7{=LPOg*&a1s@@9Na9gT2EZh|$6>9QM7_29$%)-u6*vs1{<`S6^3+U8&)ARz* zwo>r~he&wmu>JUw;7`M}FK_k3h}{WAPCm7ggs;y5)-*dCyz|8G1=)t5ZY4OPrDkr4 z^a)QMW(>D7pRTWi9r+}6$+LdXkMcHjlHOQWppb-%;LSraW|x@CgbxO38AWnS+Vp#oFrX+Q}^ zt>e6!m%G+UqwBC^>^LZzM=0uOon|M{I`LZT3_FR|$zK|d;Y~rE&WQ6klrmJIFTt~W zYAS@d2<{91vp(4EKPA>UNf2{Yl6~l$fC7aw)vBh70(U5qg$@DU=vPF6cxEHXUm?qk zU1QJOH%w#4+%bG>$3kvr&W^EJ$cnqhuffY5^Vi02?5wnFFpH=*%R4r+zb=8Y!VKh9 zv{`#&`$X;h#(M5#wY@spDm%_T&DY4r_nO)G<^;9vTh9yh-J9Gg?3-BE*qfsDnSnDG z7QQjvd##fA0DDu8mbglHq?T$tV9eiuruw4_n3#TV$)K9Lb~Z zk?qpaR2?Jqcwb*U6f@DQz63J*zJ^@ie`$Qvy?tYK1xP1XAM~XRR_~;pe$10huHFx` z&--hu_d+4F*(H%~LUC6~mR9G(wN)8re6|O4g~-X(Uf8<=z5x<}!B;v_cx4R;?{{*9 zZ}+yv6>RDnlKdXBs#&y(re!*21If}Q%Pjv-vD&noreiy3b$(lOYSy4RRO$BUUOF(x z2R|xPx{V}BfJr)DnhWBOP;Qyx20pr+XE&+(39?0`|F)1h=3rzE+DEvmN;$)2hloZ$ zDw9U&)h1EMpbgC2wM6L);}>ubAer`{TXl!O<&99f_z&D9olSeLOx;HUc(mx4P#m`x*d`=F}INeY%T{*3HnX(Ny@Nr3D8%(TVV4z6Z4 zU}7WSao7VU=*fLO=>rf;I^1MwFtW<+cM&Tm5bLr-d>H+x{K_q4;D-1Nt=QSrLYmFR zu*oDJ{!m^vuc*j=66+l^4n>9F!DIsMD)rD3m`tQ1Yh8m z>3o^FYwVL9Ktj!;nm(^htY5XBThGlMYtun0%wU9H%wPpJi>Q~8D$M-a{!0U;s+eU~ zHnv$~_NP>@i%*!d*PznAsoM*>eO%0Ad{fS66T9%pv&p?FR-`qvV|&N5X}!9&c|x#k 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 EGjU)?O8@`> literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d665b389ed804a08ea513a6cd6f686de78c22d4 GIT binary patch literal 1308 zcmZuxOOM<{5Uy@N#^cNkOR@=xh$7(TL$czE5JGISc?d=ky98lbX}s><$ia`HyJxez z$|1?DloR4FB**-M{FjzEapE6DNC>LzoiK!L%U@TQyX)~)wcGJH1{|;N|F-*v1N=^l z)#2mfOMJ~&2ofZ#pk^tndCD2BdF9o9>eoRU)L|MjP@(jsFN0rrI=Bfkl!IfCg9T3` z8Er!{`~&Sk!rk!3L20*bUi{=HMcY_)VC%feA1Ix8ZnD{HzUehCx^0!tZL8g2=WwR( z<=Szvvy(74EZY5Cmw96gGQ2t{bQh*B(el zTEWBDTt=|4fEVl~AbIRD2yVRv;Ot94%Y3?(1THZ1nbIy2qHIblgj+*F)H%WlQJPG; z@qcu$nDdRQ_HZ5wQB=7xLcD@M%gxWS?~KwW`*vAhkI%wm z&`drB^Wh`LP|x6p{wqgnanCmGd@J|TBS^gI&Q`+p7=7sp!FvSf-oiRcZnR1~Z8fCk zPhuW&&LVuS{2hDzue09KN2lewdfcs@6j01`yI)GB3##ODEE{DL73Km0X$Se3ioUFbZz&>qgp=0WeTb5D)fdnSu3uDT+3^^HF7 SGx>t9s-Xs4gLS0ltoIL73^OGF literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f59ca48289c5eaf1f4ef289339fd2e396a24ad01 GIT binary patch literal 1372 zcmZWoON%5$5YEhc_H%k>)^^4hg|cWLy63)#xQy!qn%QAQ7K>twn##1Twq9grPj5Hf zi?Dk14=6&u*HvXP!uAHDamn&4J9El)Cw&_?a&5lqg zH}4j`uxEHL?-zUFp5gs`Q0#~M7%{RtV29T@yhD4m#XRP+SB}v!qHQ+(%BCIK{muzr zrQ~xo>aT-yo)rmS1xa1!S(?bKDg#zZzN)LNl#}*z_ycq{BFdg-LMs1Ztxb}AgjF|L z$SSRhI%kr>y;mn(uoxsoQc@7~Q_d23TjHN*^#jf;4%!Z7HD^soWhZT%=oya47H`QTRK9B? z>8|c$w6#F{I=uCEJ|!FLC-gJ9#_-NaWNY4TZo3Y}ntO!4gm_!)sZ}}+UE(ELw`6zM zlihirTGvEdmB$dFJKtMTh+#vFt{m+4slBlqz42l{wT%~`+KW8cVCrnh6{7ABWb164 z-QfnZfy#Ji&ou~Z@4>~z!;5=?LhHMq&B}^rlWsoHgkofAXUzi zXObyW3FYNk$povF&7NdZxlL%*f>dr;cX}G%pH7uys;w=wYvoXOxtMWXQ)L%PR*qZ_ z1B8^H7BnuCf;F7!28%sO6=ur2>8M{3e;aK7dVG2>`a&=+qKkzPN%T>bE(+*b5q*-$ zPZyWb#~BxLe9o&mOJ#J$%ByIaT}A@ZAJ<9xO)_I5sWW%WX4xoCQ&HDhwx)XSznau~zyJUM literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5675bec6e7ae7f2df29fb24665ad39b57c9911e2 GIT binary patch literal 2158 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0651fe00307c240ca341e64feec7c9955806c025 GIT binary patch literal 353 zcmYk1&q~8U5XLuc`Uf%KLC}LQ&_nHAM65|_gLP9j-3noGNwcf0wn@lr3Ow7v+BBRQ2oxh>#g=HrEzyqK!j5gx zi94bjp+RqF5@^>f>{<=l4eSOd26)h|dl7YAKZ@#(Pe@2=hvGXNK48AL$IE~$=y>Mi zCCA}{PeO{l`gBhGWf0Pc-_T&@aW5c$`6C?i`|-k^`q4i7j!MUz`o;H?d%-Bk5*Vof z66WP;wUL None: + """Entry Point for completion of main and subcommand options.""" + # Don't complete if user hasn't sourced bash_completion file. + if "PIP_AUTO_COMPLETE" not in os.environ: + return + cwords = os.environ["COMP_WORDS"].split()[1:] + cword = int(os.environ["COMP_CWORD"]) + try: + current = cwords[cword - 1] + except IndexError: + current = "" + + parser = create_main_parser() + subcommands = list(commands_dict) + options = [] + + # subcommand + subcommand_name: Optional[str] = None + for word in cwords: + if word in subcommands: + subcommand_name = word + break + # subcommand options + if subcommand_name is not None: + # special case: 'help' subcommand has no options + if subcommand_name == "help": + sys.exit(1) + # special case: list locally installed dists for show and uninstall + should_list_installed = not current.startswith("-") and subcommand_name in [ + "show", + "uninstall", + ] + if should_list_installed: + env = get_default_environment() + lc = current.lower() + installed = [ + dist.canonical_name + for dist in env.iter_installed_distributions(local_only=True) + if dist.canonical_name.startswith(lc) + and dist.canonical_name not in cwords[1:] + ] + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + should_list_installables = ( + not current.startswith("-") and subcommand_name == "install" + ) + if should_list_installables: + for path in auto_complete_paths(current, "path"): + print(path) + sys.exit(1) + + subcommand = create_command(subcommand_name) + + for opt in subcommand.parser.option_list_all: + if opt.help != optparse.SUPPRESS_HELP: + for opt_str in opt._long_opts + opt._short_opts: + options.append((opt_str, opt.nargs)) + + # filter out previously specified options from available options + prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + # get completion type given cwords and available subcommand options + completion_type = get_path_completion_type( + cwords, + cword, + subcommand.parser.option_list_all, + ) + # get completion files and directories if ``completion_type`` is + # ````, ```` or ```` + if completion_type: + paths = auto_complete_paths(current, completion_type) + options = [(path, 0) for path in paths] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1] and option[0][:2] == "--": + opt_label += "=" + print(opt_label) + else: + # show main parser options only when necessary + + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + flattened_opts = chain.from_iterable(opts) + if current.startswith("-"): + for opt in flattened_opts: + if opt.help != optparse.SUPPRESS_HELP: + subcommands += opt._long_opts + opt._short_opts + else: + # get completion type given cwords and all available options + completion_type = get_path_completion_type(cwords, cword, flattened_opts) + if completion_type: + subcommands = list(auto_complete_paths(current, completion_type)) + + print(" ".join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def get_path_completion_type( + cwords: List[str], cword: int, opts: Iterable[Any] +) -> Optional[str]: + """Get the type of path completion (``file``, ``dir``, ``path`` or None) + + :param cwords: same as the environmental variable ``COMP_WORDS`` + :param cword: same as the environmental variable ``COMP_CWORD`` + :param opts: The available options to check + :return: path completion type (``file``, ``dir``, ``path`` or None) + """ + if cword < 2 or not cwords[cword - 2].startswith("-"): + return None + for opt in opts: + if opt.help == optparse.SUPPRESS_HELP: + continue + for o in str(opt).split("/"): + if cwords[cword - 2].split("=")[0] == o: + if not opt.metavar or any( + x in ("path", "file", "dir") for x in opt.metavar.split("/") + ): + return opt.metavar + return None + + +def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]: + """If ``completion_type`` is ``file`` or ``path``, list all regular files + and directories starting with ``current``; otherwise only list directories + starting with ``current``. + + :param current: The word to be completed + :param completion_type: path completion type(``file``, ``path`` or ``dir``) + :return: A generator of regular files and/or directories + """ + directory, filename = os.path.split(current) + current_path = os.path.abspath(directory) + # Don't complete paths if they can't be accessed + if not os.access(current_path, os.R_OK): + return + filename = os.path.normcase(filename) + # list all files that start with ``filename`` + file_list = ( + x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename) + ) + for f in file_list: + opt = os.path.join(current_path, f) + comp_file = os.path.normcase(os.path.join(directory, f)) + # complete regular files when there is not ```` after option + # complete directories when there is ````, ```` or + # ````after option + if completion_type != "dir" and os.path.isfile(opt): + yield comp_file + elif os.path.isdir(opt): + yield os.path.join(comp_file, "") diff --git a/venv/Lib/site-packages/pip/_internal/cli/base_command.py b/venv/Lib/site-packages/pip/_internal/cli/base_command.py new file mode 100644 index 000000000..78b96bb70 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/base_command.py @@ -0,0 +1,223 @@ +"""Base Command class, and related routines""" + +import functools +import logging +import logging.config +import optparse +import os +import sys +import traceback +from optparse import Values +from typing import Any, Callable, List, Optional, Tuple + +from pip._vendor.rich import traceback as rich_traceback + +from pip._internal.cli import cmdoptions +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.cli.status_codes import ( + ERROR, + PREVIOUS_BUILD_DIR_ERROR, + UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) +from pip._internal.exceptions import ( + BadCommand, + CommandError, + DiagnosticPipError, + InstallationError, + NetworkConnectionError, + PreviousBuildDirError, + UninstallationError, +) +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging +from pip._internal.utils.misc import get_prog, normalize_path +from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry +from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = ["Command"] + +logger = logging.getLogger(__name__) + + +class Command(CommandContextMixIn): + usage: str = "" + ignore_require_venv: bool = False + + def __init__(self, name: str, summary: str, isolated: bool = False) -> None: + super().__init__() + + self.name = name + self.summary = summary + self.parser = ConfigOptionParser( + usage=self.usage, + prog=f"{get_prog()} {name}", + formatter=UpdatingDefaultsHelpFormatter(), + add_help_option=False, + name=name, + description=self.__doc__, + isolated=isolated, + ) + + self.tempdir_registry: Optional[TempDirRegistry] = None + + # Commands should add options to this option group + optgroup_name = f"{self.name.capitalize()} Options" + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group( + cmdoptions.general_group, + self.parser, + ) + self.parser.add_option_group(gen_opts) + + self.add_options() + + def add_options(self) -> None: + pass + + def handle_pip_version_check(self, options: Values) -> None: + """ + This is a no-op so that commands by default do not do the pip version + check. + """ + # Make sure we do the pip version check if the index_group options + # are present. + assert not hasattr(options, "no_index") + + def run(self, options: Values, args: List[str]) -> int: + raise NotImplementedError + + def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]: + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args: List[str]) -> int: + try: + with self.main_context(): + return self._main(args) + finally: + logging.shutdown() + + def _main(self, args: List[str]) -> int: + # We must initialize this before the tempdir manager, otherwise the + # configuration would not be accessible by the time we clean up the + # tempdir manager. + self.tempdir_registry = self.enter_context(tempdir_registry()) + # Intentionally set as early as possible so globally-managed temporary + # directories are available to the rest of the code. + self.enter_context(global_tempdir_manager()) + + options, args = self.parse_args(args) + + # Set verbosity so that it can be used elsewhere. + self.verbosity = options.verbose - options.quiet + + level_number = setup_logging( + verbosity=self.verbosity, + no_color=options.no_color, + user_log_file=options.log, + ) + + # TODO: Try to get these passing down from the command? + # without resorting to os.environ to hold these. + # This also affects isolated builds and it should. + + if options.no_input: + os.environ["PIP_NO_INPUT"] = "1" + + if options.exists_action: + os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action) + + if options.require_venv and not self.ignore_require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.critical("Could not find an activated virtualenv (required).") + sys.exit(VIRTUALENV_NOT_FOUND) + + if options.cache_dir: + options.cache_dir = normalize_path(options.cache_dir) + if not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "or is not writable by the current user. The cache " + "has been disabled. Check the permissions and owner of " + "that directory. If executing pip with sudo, you should " + "use sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + if "2020-resolver" in options.features_enabled: + logger.warning( + "--use-feature=2020-resolver no longer has any effect, " + "since it is now the default dependency resolver in pip. " + "This will become an error in pip 21.0." + ) + + def intercepts_unhandled_exc( + run_func: Callable[..., int] + ) -> Callable[..., int]: + @functools.wraps(run_func) + def exc_logging_wrapper(*args: Any) -> int: + try: + status = run_func(*args) + assert isinstance(status, int) + return status + except DiagnosticPipError as exc: + logger.error("[present-diagnostic] %s", exc) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except ( + InstallationError, + UninstallationError, + BadCommand, + NetworkConnectionError, + ) as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical("%s", exc) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BrokenStdoutLoggingError: + # Bypass our logger and write any remaining messages to + # stderr because stdout no longer works. + print("ERROR: Pipe to stdout was broken", file=sys.stderr) + if level_number <= logging.DEBUG: + traceback.print_exc(file=sys.stderr) + + return ERROR + except KeyboardInterrupt: + logger.critical("Operation cancelled by user") + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BaseException: + logger.critical("Exception:", exc_info=True) + + return UNKNOWN_ERROR + + return exc_logging_wrapper + + try: + if not options.debug_mode: + run = intercepts_unhandled_exc(self.run) + else: + run = self.run + rich_traceback.install(show_locals=True) + return run(options, args) + finally: + self.handle_pip_version_check(options) diff --git a/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py b/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py new file mode 100644 index 000000000..71b1d1906 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py @@ -0,0 +1,1018 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them +globally. One reason being that options with action='append' can carry state +between parses. pip parses general options twice internally, and shouldn't +pass on state. To be consistent, all options will follow this design. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import os +import textwrap +from functools import partial +from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values +from textwrap import dedent +from typing import Any, Callable, Dict, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.parser import ConfigOptionParser +from pip._internal.cli.progress_bars import BAR_TYPES +from pip._internal.exceptions import CommandError +from pip._internal.locations import USER_CACHE_DIR, get_src_prefix +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.models.target_python import TargetPython +from pip._internal.utils.hashes import STRONG_HASHES +from pip._internal.utils.misc import strtobool + +logger = logging.getLogger(__name__) + + +def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None: + """ + Raise an option parsing error using parser.error(). + + Args: + parser: an OptionParser instance. + option: an Option instance. + msg: the error text. + """ + msg = f"{option} error: {msg}" + msg = textwrap.fill(" ".join(msg.split())) + parser.error(msg) + + +def make_option_group(group: Dict[str, Any], parser: ConfigOptionParser) -> OptionGroup: + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group["name"]) + for option in group["options"]: + option_group.add_option(option()) + return option_group + + +def check_install_build_global( + options: Values, check_options: Optional[Values] = None +) -> None: + """Disable wheels if per-setup.py call options are set. + + :param options: The OptionParser options to update. + :param check_options: The options to check, if not supplied defaults to + options. + """ + if check_options is None: + check_options = options + + def getname(n: str) -> Optional[Any]: + return getattr(check_options, n, None) + + names = ["build_options", "global_options", "install_options"] + if any(map(getname, names)): + control = options.format_control + control.disallow_binaries() + logger.warning( + "Disabling all use of wheels due to the use of --build-option " + "/ --global-option / --install-option.", + ) + + +def check_dist_restriction(options: Values, check_target: bool = False) -> None: + """Function for determining if custom platform options are allowed. + + :param options: The OptionParser options. + :param check_target: Whether or not to check if --target is being used. + """ + dist_restriction_set = any( + [ + options.python_version, + options.platforms, + options.abis, + options.implementation, + ] + ) + + binary_only = FormatControl(set(), {":all:"}) + sdist_dependencies_allowed = ( + options.format_control != binary_only and not options.ignore_dependencies + ) + + # Installations or downloads using dist restrictions must not combine + # source distributions and dist-specific wheels, as they are not + # guaranteed to be locally compatible. + if dist_restriction_set and sdist_dependencies_allowed: + raise CommandError( + "When restricting platform and interpreter constraints using " + "--python-version, --platform, --abi, or --implementation, " + "either --no-deps must be set, or --only-binary=:all: must be " + "set and --no-binary must not be set (or must be set to " + ":none:)." + ) + + if check_target: + if dist_restriction_set and not options.target_dir: + raise CommandError( + "Can not use any platform or abi specific options unless " + "installing via '--target'" + ) + + +def _path_option_check(option: Option, opt: str, value: str) -> str: + return os.path.expanduser(value) + + +def _package_name_option_check(option: Option, opt: str, value: str) -> str: + return canonicalize_name(value) + + +class PipOption(Option): + TYPES = Option.TYPES + ("path", "package_name") + TYPE_CHECKER = Option.TYPE_CHECKER.copy() + TYPE_CHECKER["package_name"] = _package_name_option_check + TYPE_CHECKER["path"] = _path_option_check + + +########### +# options # +########### + +help_: Callable[..., Option] = partial( + Option, + "-h", + "--help", + dest="help", + action="help", + help="Show help.", +) + +debug_mode: Callable[..., Option] = partial( + Option, + "--debug", + dest="debug_mode", + action="store_true", + default=False, + help=( + "Let unhandled exceptions propagate outside the main subroutine, " + "instead of logging them to stderr." + ), +) + +isolated_mode: Callable[..., Option] = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) + +require_virtualenv: Callable[..., Option] = partial( + Option, + "--require-virtualenv", + "--require-venv", + dest="require_venv", + action="store_true", + default=False, + help=( + "Allow pip to only run in a virtual environment; " + "exit with an error otherwise." + ), +) + +verbose: Callable[..., Option] = partial( + Option, + "-v", + "--verbose", + dest="verbose", + action="count", + default=0, + help="Give more output. Option is additive, and can be used up to 3 times.", +) + +no_color: Callable[..., Option] = partial( + Option, + "--no-color", + dest="no_color", + action="store_true", + default=False, + help="Suppress colored output.", +) + +version: Callable[..., Option] = partial( + Option, + "-V", + "--version", + dest="version", + action="store_true", + help="Show version and exit.", +) + +quiet: Callable[..., Option] = partial( + Option, + "-q", + "--quiet", + dest="quiet", + action="count", + default=0, + help=( + "Give less output. Option is additive, and can be used up to 3" + " times (corresponding to WARNING, ERROR, and CRITICAL logging" + " levels)." + ), +) + +progress_bar: Callable[..., Option] = partial( + Option, + "--progress-bar", + dest="progress_bar", + type="choice", + choices=list(BAR_TYPES.keys()), + default="on", + help=( + "Specify type of progress to be displayed [" + + "|".join(BAR_TYPES.keys()) + + "] (default: %default)" + ), +) + +log: Callable[..., Option] = partial( + PipOption, + "--log", + "--log-file", + "--local-log", + dest="log", + metavar="path", + type="path", + help="Path to a verbose appending log.", +) + +no_input: Callable[..., Option] = partial( + Option, + # Don't ask for input + "--no-input", + dest="no_input", + action="store_true", + default=False, + help="Disable prompting for input.", +) + +proxy: Callable[..., Option] = partial( + Option, + "--proxy", + dest="proxy", + type="str", + default="", + help="Specify a proxy in the form [user:passwd@]proxy.server:port.", +) + +retries: Callable[..., Option] = partial( + Option, + "--retries", + dest="retries", + type="int", + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).", +) + +timeout: Callable[..., Option] = partial( + Option, + "--timeout", + "--default-timeout", + metavar="sec", + dest="timeout", + type="float", + default=15, + help="Set the socket timeout (default %default seconds).", +) + + +def exists_action() -> Option: + return Option( + # Option when path already exist + "--exists-action", + dest="exists_action", + type="choice", + choices=["s", "i", "w", "b", "a"], + default=[], + action="append", + metavar="action", + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.", + ) + + +cert: Callable[..., Option] = partial( + PipOption, + "--cert", + dest="cert", + type="path", + metavar="path", + help=( + "Path to PEM-encoded CA certificate bundle. " + "If provided, overrides the default. " + "See 'SSL Certificate Verification' in pip documentation " + "for more information." + ), +) + +client_cert: Callable[..., Option] = partial( + PipOption, + "--client-cert", + dest="client_cert", + type="path", + default=None, + metavar="path", + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.", +) + +index_url: Callable[..., Option] = partial( + Option, + "-i", + "--index-url", + "--pypi-url", + dest="index_url", + metavar="URL", + default=PyPI.simple_url, + help="Base URL of the Python Package Index (default %default). " + "This should point to a repository compliant with PEP 503 " + "(the simple repository API) or a local directory laid out " + "in the same format.", +) + + +def extra_index_url() -> Option: + return Option( + "--extra-index-url", + dest="extra_index_urls", + metavar="URL", + action="append", + default=[], + help="Extra URLs of package indexes to use in addition to " + "--index-url. Should follow the same rules as " + "--index-url.", + ) + + +no_index: Callable[..., Option] = partial( + Option, + "--no-index", + dest="no_index", + action="store_true", + default=False, + help="Ignore package index (only looking at --find-links URLs instead).", +) + + +def find_links() -> Option: + return Option( + "-f", + "--find-links", + dest="find_links", + action="append", + default=[], + metavar="url", + help="If a URL or path to an html file, then parse for links to " + "archives such as sdist (.tar.gz) or wheel (.whl) files. " + "If a local path or file:// URL that's a directory, " + "then look for archives in the directory listing. " + "Links to VCS project URLs are not supported.", + ) + + +def trusted_host() -> Option: + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host or host:port pair as trusted, even though it " + "does not have valid or any HTTPS.", + ) + + +def constraints() -> Option: + return Option( + "-c", + "--constraint", + dest="constraints", + action="append", + default=[], + metavar="file", + help="Constrain versions using the given constraints file. " + "This option can be used multiple times.", + ) + + +def requirements() -> Option: + return Option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help="Install from the given requirements file. " + "This option can be used multiple times.", + ) + + +def editable() -> Option: + return Option( + "-e", + "--editable", + dest="editables", + action="append", + default=[], + metavar="path/url", + help=( + "Install a project in editable mode (i.e. setuptools " + '"develop mode") from a local project path or a VCS url.' + ), + ) + + +def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None: + value = os.path.abspath(value) + setattr(parser.values, option.dest, value) + + +src: Callable[..., Option] = partial( + PipOption, + "--src", + "--source", + "--source-dir", + "--source-directory", + dest="src_dir", + type="path", + metavar="dir", + default=get_src_prefix(), + action="callback", + callback=_handle_src, + help="Directory to check out editable projects into. " + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".', +) + + +def _get_format_control(values: Values, option: Option) -> Any: + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.no_binary, + existing.only_binary, + ) + + +def _handle_only_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.only_binary, + existing.no_binary, + ) + + +def no_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--no-binary", + dest="format_control", + action="callback", + callback=_handle_no_binary, + type="str", + default=format_control, + help="Do not use binary packages. Can be supplied multiple times, and " + 'each time adds to the existing value. Accepts either ":all:" to ' + 'disable all binary packages, ":none:" to empty the set (notice ' + "the colons), or one or more package names with commas between " + "them (no colons). Note that some packages are tricky to compile " + "and may fail to install when this option is used on them.", + ) + + +def only_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--only-binary", + dest="format_control", + action="callback", + callback=_handle_only_binary, + type="str", + default=format_control, + help="Do not use source packages. Can be supplied multiple times, and " + 'each time adds to the existing value. Accepts either ":all:" to ' + 'disable all source packages, ":none:" to empty the set, or one ' + "or more package names with commas between them. Packages " + "without binary distributions will fail to install when this " + "option is used on them.", + ) + + +platforms: Callable[..., Option] = partial( + Option, + "--platform", + dest="platforms", + metavar="platform", + action="append", + default=None, + help=( + "Only use wheels compatible with . Defaults to the " + "platform of the running system. Use this option multiple times to " + "specify multiple platforms supported by the target interpreter." + ), +) + + +# This was made a separate function for unit-testing purposes. +def _convert_python_version(value: str) -> Tuple[Tuple[int, ...], Optional[str]]: + """ + Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. + + :return: A 2-tuple (version_info, error_msg), where `error_msg` is + non-None if and only if there was a parsing error. + """ + if not value: + # The empty string is the same as not providing a value. + return (None, None) + + parts = value.split(".") + if len(parts) > 3: + return ((), "at most three version parts are allowed") + + if len(parts) == 1: + # Then we are in the case of "3" or "37". + value = parts[0] + if len(value) > 1: + parts = [value[0], value[1:]] + + try: + version_info = tuple(int(part) for part in parts) + except ValueError: + return ((), "each version part must be an integer") + + return (version_info, None) + + +def _handle_python_version( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """ + Handle a provided --python-version value. + """ + version_info, error_msg = _convert_python_version(value) + if error_msg is not None: + msg = "invalid --python-version value: {!r}: {}".format( + value, + error_msg, + ) + raise_option_error(parser, option=option, msg=msg) + + parser.values.python_version = version_info + + +python_version: Callable[..., Option] = partial( + Option, + "--python-version", + dest="python_version", + metavar="python_version", + action="callback", + callback=_handle_python_version, + type="str", + default=None, + help=dedent( + """\ + The Python interpreter version to use for wheel and "Requires-Python" + compatibility checks. Defaults to a version derived from the running + interpreter. The version can be specified using up to three dot-separated + integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor + version can also be given as a string without dots (e.g. "37" for 3.7.0). + """ + ), +) + + +implementation: Callable[..., Option] = partial( + Option, + "--implementation", + dest="implementation", + metavar="implementation", + default=None, + help=( + "Only use wheels compatible with Python " + "implementation , e.g. 'pp', 'jy', 'cp', " + " or 'ip'. If not specified, then the current " + "interpreter implementation is used. Use 'py' to force " + "implementation-agnostic wheels." + ), +) + + +abis: Callable[..., Option] = partial( + Option, + "--abi", + dest="abis", + metavar="abi", + action="append", + default=None, + help=( + "Only use wheels compatible with Python abi , e.g. 'pypy_41'. " + "If not specified, then the current interpreter abi tag is used. " + "Use this option multiple times to specify multiple abis supported " + "by the target interpreter. Generally you will need to specify " + "--implementation, --platform, and --python-version when using this " + "option." + ), +) + + +def add_target_python_options(cmd_opts: OptionGroup) -> None: + cmd_opts.add_option(platforms()) + cmd_opts.add_option(python_version()) + cmd_opts.add_option(implementation()) + cmd_opts.add_option(abis()) + + +def make_target_python(options: Values) -> TargetPython: + target_python = TargetPython( + platforms=options.platforms, + py_version_info=options.python_version, + abis=options.abis, + implementation=options.implementation, + ) + + return target_python + + +def prefer_binary() -> Option: + return Option( + "--prefer-binary", + dest="prefer_binary", + action="store_true", + default=False, + help="Prefer older binary packages over newer source packages.", + ) + + +cache_dir: Callable[..., Option] = partial( + PipOption, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + type="path", + help="Store the cache data in .", +) + + +def _handle_no_cache_dir( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-cache-dir option. + + This is an optparse.Option callback for the --no-cache-dir option. + """ + # The value argument will be None if --no-cache-dir is passed via the + # command-line, since the option doesn't accept arguments. However, + # the value can be non-None if the option is triggered e.g. by an + # environment variable, like PIP_NO_CACHE_DIR=true. + if value is not None: + # Then parse the string value to get argument error-checking. + try: + strtobool(value) + except ValueError as exc: + raise_option_error(parser, option=option, msg=str(exc)) + + # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() + # converted to 0 (like "false" or "no") caused cache_dir to be disabled + # rather than enabled (logic would say the latter). Thus, we disable + # the cache directory not just on values that parse to True, but (for + # backwards compatibility reasons) also on values that parse to False. + # In other words, always set it to False if the option is provided in + # some (valid) form. + parser.values.cache_dir = False + + +no_cache: Callable[..., Option] = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="callback", + callback=_handle_no_cache_dir, + help="Disable the cache.", +) + +no_deps: Callable[..., Option] = partial( + Option, + "--no-deps", + "--no-dependencies", + dest="ignore_dependencies", + action="store_true", + default=False, + help="Don't install package dependencies.", +) + +ignore_requires_python: Callable[..., Option] = partial( + Option, + "--ignore-requires-python", + dest="ignore_requires_python", + action="store_true", + help="Ignore the Requires-Python information.", +) + +no_build_isolation: Callable[..., Option] = partial( + Option, + "--no-build-isolation", + dest="build_isolation", + action="store_false", + default=True, + help="Disable isolation when building a modern source distribution. " + "Build dependencies specified by PEP 518 must be already installed " + "if this option is used.", +) + + +def _handle_no_use_pep517( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-use-pep517 option. + + This is an optparse.Option callback for the no_use_pep517 option. + """ + # Since --no-use-pep517 doesn't accept arguments, the value argument + # will be None if --no-use-pep517 is passed via the command-line. + # However, the value can be non-None if the option is triggered e.g. + # by an environment variable, for example "PIP_NO_USE_PEP517=true". + if value is not None: + msg = """A value was passed for --no-use-pep517, + probably using either the PIP_NO_USE_PEP517 environment variable + or the "no-use-pep517" config file option. Use an appropriate value + of the PIP_USE_PEP517 environment variable or the "use-pep517" + config file option instead. + """ + raise_option_error(parser, option=option, msg=msg) + + # Otherwise, --no-use-pep517 was passed via the command-line. + parser.values.use_pep517 = False + + +use_pep517: Any = partial( + Option, + "--use-pep517", + dest="use_pep517", + action="store_true", + default=None, + help="Use PEP 517 for building source distributions " + "(use --no-use-pep517 to force legacy behaviour).", +) + +no_use_pep517: Any = partial( + Option, + "--no-use-pep517", + dest="use_pep517", + action="callback", + callback=_handle_no_use_pep517, + default=None, + help=SUPPRESS_HELP, +) + +install_options: Callable[..., Option] = partial( + Option, + "--install-option", + dest="install_options", + action="append", + metavar="options", + help="Extra arguments to be supplied to the setup.py install " + 'command (use like --install-option="--install-scripts=/usr/local/' + 'bin"). Use multiple --install-option options to pass multiple ' + "options to setup.py install. If you are using an option with a " + "directory path, be sure to use absolute path.", +) + +build_options: Callable[..., Option] = partial( + Option, + "--build-option", + dest="build_options", + metavar="options", + action="append", + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", +) + +global_options: Callable[..., Option] = partial( + Option, + "--global-option", + dest="global_options", + action="append", + metavar="options", + help="Extra global options to be supplied to the setup.py " + "call before the install or bdist_wheel command.", +) + +no_clean: Callable[..., Option] = partial( + Option, + "--no-clean", + action="store_true", + default=False, + help="Don't clean up build directories.", +) + +pre: Callable[..., Option] = partial( + Option, + "--pre", + action="store_true", + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.", +) + +disable_pip_version_check: Callable[..., Option] = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=False, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.", +) + + +def _handle_merge_hash( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """Given a value spelled "algo:digest", append the digest to a list + pointed to in a dict by the algo name.""" + if not parser.values.hashes: + parser.values.hashes = {} + try: + algo, digest = value.split(":", 1) + except ValueError: + parser.error( + "Arguments to {} must be a hash name " # noqa + "followed by a value, like --hash=sha256:" + "abcde...".format(opt_str) + ) + if algo not in STRONG_HASHES: + parser.error( + "Allowed hash algorithms for {} are {}.".format( # noqa + opt_str, ", ".join(STRONG_HASHES) + ) + ) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash: Callable[..., Option] = partial( + Option, + "--hash", + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest="hashes", + action="callback", + callback=_handle_merge_hash, + type="string", + help="Verify that the package's archive matches this " + "hash before installing. Example: --hash=sha256:abcdef...", +) + + +require_hashes: Callable[..., Option] = partial( + Option, + "--require-hashes", + dest="require_hashes", + action="store_true", + default=False, + help="Require a hash to check each requirement against, for " + "repeatable installs. This option is implied when any package in a " + "requirements file has a --hash option.", +) + + +list_path: Callable[..., Option] = partial( + PipOption, + "--path", + dest="path", + type="path", + action="append", + help="Restrict to the specified installation path for listing " + "packages (can be used multiple times).", +) + + +def check_list_path_option(options: Values) -> None: + if options.path and (options.user or options.local): + raise CommandError("Cannot combine '--path' with '--user' or '--local'") + + +list_exclude: Callable[..., Option] = partial( + PipOption, + "--exclude", + dest="excludes", + action="append", + metavar="package", + type="package_name", + help="Exclude specified package from the output", +) + + +no_python_version_warning: Callable[..., Option] = partial( + Option, + "--no-python-version-warning", + dest="no_python_version_warning", + action="store_true", + default=False, + help="Silence deprecation warnings for upcoming unsupported Pythons.", +) + + +use_new_feature: Callable[..., Option] = partial( + Option, + "--use-feature", + dest="features_enabled", + metavar="feature", + action="append", + default=[], + choices=["2020-resolver", "fast-deps", "in-tree-build"], + help="Enable new functionality, that may be backward incompatible.", +) + +use_deprecated_feature: Callable[..., Option] = partial( + Option, + "--use-deprecated", + dest="deprecated_features_enabled", + metavar="feature", + action="append", + default=[], + choices=[ + "legacy-resolver", + "out-of-tree-build", + "backtrack-on-build-failures", + "html5lib", + ], + help=("Enable deprecated functionality, that will be removed in the future."), +) + + +########## +# groups # +########## + +general_group: Dict[str, Any] = { + "name": "General Options", + "options": [ + help_, + debug_mode, + isolated_mode, + require_virtualenv, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + no_color, + no_python_version_warning, + use_new_feature, + use_deprecated_feature, + ], +} + +index_group: Dict[str, Any] = { + "name": "Package Index Options", + "options": [ + index_url, + extra_index_url, + no_index, + find_links, + ], +} diff --git a/venv/Lib/site-packages/pip/_internal/cli/command_context.py b/venv/Lib/site-packages/pip/_internal/cli/command_context.py new file mode 100644 index 000000000..ed6832237 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/command_context.py @@ -0,0 +1,27 @@ +from contextlib import ExitStack, contextmanager +from typing import ContextManager, Iterator, TypeVar + +_T = TypeVar("_T", covariant=True) + + +class CommandContextMixIn: + def __init__(self) -> None: + super().__init__() + self._in_main_context = False + self._main_context = ExitStack() + + @contextmanager + def main_context(self) -> Iterator[None]: + assert not self._in_main_context + + self._in_main_context = True + try: + with self._main_context: + yield + finally: + self._in_main_context = False + + def enter_context(self, context_provider: ContextManager[_T]) -> _T: + assert self._in_main_context + + return self._main_context.enter_context(context_provider) diff --git a/venv/Lib/site-packages/pip/_internal/cli/main.py b/venv/Lib/site-packages/pip/_internal/cli/main.py new file mode 100644 index 000000000..0e3122154 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/main.py @@ -0,0 +1,70 @@ +"""Primary application entrypoint. +""" +import locale +import logging +import os +import sys +from typing import List, Optional + +from pip._internal.cli.autocompletion import autocomplete +from pip._internal.cli.main_parser import parse_command +from pip._internal.commands import create_command +from pip._internal.exceptions import PipError +from pip._internal.utils import deprecation + +logger = logging.getLogger(__name__) + + +# Do not import and use main() directly! Using it directly is actively +# discouraged by pip's maintainers. The name, location and behavior of +# this function is subject to change, so calling it directly is not +# portable across different pip versions. + +# In addition, running pip in-process is unsupported and unsafe. This is +# elaborated in detail at +# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program. +# That document also provides suggestions that should work for nearly +# all users that are considering importing and using main() directly. + +# However, we know that certain users will still want to invoke pip +# in-process. If you understand and accept the implications of using pip +# in an unsupported manner, the best approach is to use runpy to avoid +# depending on the exact location of this entry point. + +# The following example shows how to use runpy to invoke pip in that +# case: +# +# sys.argv = ["pip", your, args, here] +# runpy.run_module("pip", run_name="__main__") +# +# Note that this will exit the process after running, unlike a direct +# call to main. As it is not safe to do any processing after calling +# main, this should not be an issue in practice. + + +def main(args: Optional[List[str]] = None) -> int: + if args is None: + args = sys.argv[1:] + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parse_command(args) + except PipError as exc: + sys.stderr.write(f"ERROR: {exc}") + sys.stderr.write(os.linesep) + sys.exit(1) + + # Needed for locale.getpreferredencoding(False) to work + # in pip._internal.utils.encoding.auto_decode + try: + locale.setlocale(locale.LC_ALL, "") + except locale.Error as e: + # setlocale can apparently crash if locale are uninitialized + logger.debug("Ignoring error %s when setting locale", e) + command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) + + return command.main(cmd_args) diff --git a/venv/Lib/site-packages/pip/_internal/cli/main_parser.py b/venv/Lib/site-packages/pip/_internal/cli/main_parser.py new file mode 100644 index 000000000..3666ab04c --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/main_parser.py @@ -0,0 +1,87 @@ +"""A single place for constructing and exposing the main parser +""" + +import os +import sys +from typing import List, Tuple + +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.commands import commands_dict, get_similar_commands +from pip._internal.exceptions import CommandError +from pip._internal.utils.misc import get_pip_version, get_prog + +__all__ = ["create_main_parser", "parse_command"] + + +def create_main_parser() -> ConfigOptionParser: + """Creates and returns the main parser for pip's CLI""" + + parser = ConfigOptionParser( + usage="\n%prog [options]", + add_help_option=False, + formatter=UpdatingDefaultsHelpFormatter(), + name="global", + prog=get_prog(), + ) + parser.disable_interspersed_args() + + parser.version = get_pip_version() + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + # so the help formatter knows + parser.main = True # type: ignore + + # create command listing for description + description = [""] + [ + f"{name:27} {command_info.summary}" + for name, command_info in commands_dict.items() + ] + parser.description = "\n".join(description) + + return parser + + +def parse_command(args: List[str]) -> Tuple[str, List[str]]: + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == "help" and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args diff --git a/venv/Lib/site-packages/pip/_internal/cli/parser.py b/venv/Lib/site-packages/pip/_internal/cli/parser.py new file mode 100644 index 000000000..a1c99a8cb --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/parser.py @@ -0,0 +1,292 @@ +"""Base option parser setup""" + +import logging +import optparse +import shutil +import sys +import textwrap +from contextlib import suppress +from typing import Any, Dict, Iterator, List, Tuple + +from pip._internal.cli.status_codes import UNKNOWN_ERROR +from pip._internal.configuration import Configuration, ConfigurationError +from pip._internal.utils.misc import redact_auth_from_url, strtobool + +logger = logging.getLogger(__name__) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args: Any, **kwargs: Any) -> None: + # help position must be aligned with __init__.parseopts.description + kwargs["max_help_position"] = 30 + kwargs["indent_increment"] = 1 + kwargs["width"] = shutil.get_terminal_size()[0] - 2 + super().__init__(*args, **kwargs) + + def format_option_strings(self, option: optparse.Option) -> str: + return self._format_option_strings(option) + + def _format_option_strings( + self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", " + ) -> str: + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + assert option.dest is not None + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt.format(metavar.lower())) + + return "".join(opts) + + def format_heading(self, heading: str) -> str: + if heading == "Options": + return "" + return heading + ":\n" + + def format_usage(self, usage: str) -> str: + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " ")) + return msg + + def format_description(self, description: str) -> str: + # leave full control over description to us + if description: + if hasattr(self.parser, "main"): + label = "Commands" + else: + label = "Description" + # some doc strings have initial newlines, some don't + description = description.lstrip("\n") + # some doc strings have final newlines and spaces, some don't + description = description.rstrip() + # dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = f"{label}:\n{description}\n" + return description + else: + return "" + + def format_epilog(self, epilog: str) -> str: + # leave full control over epilog to us + if epilog: + return epilog + else: + return "" + + def indent_lines(self, text: str, indent: str) -> str: + new_lines = [indent + line for line in text.split("\n")] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser. + + This is updates the defaults before expanding them, allowing + them to show up correctly in the help listing. + + Also redact auth from url type options + """ + + def expand_default(self, option: optparse.Option) -> str: + default_values = None + if self.parser is not None: + assert isinstance(self.parser, ConfigOptionParser) + self.parser._update_defaults(self.parser.defaults) + assert option.dest is not None + default_values = self.parser.defaults.get(option.dest) + help_text = super().expand_default(option) + + if default_values and option.metavar == "URL": + if isinstance(default_values, str): + default_values = [default_values] + + # If its not a list, we should abort and just return the help text + if not isinstance(default_values, list): + default_values = [] + + for val in default_values: + help_text = help_text.replace(val, redact_auth_from_url(val)) + + return help_text + + +class CustomOptionParser(optparse.OptionParser): + def insert_option_group( + self, idx: int, *args: Any, **kwargs: Any + ) -> optparse.OptionGroup: + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self) -> List[optparse.Option]: + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + def __init__( + self, + *args: Any, + name: str, + isolated: bool = False, + **kwargs: Any, + ) -> None: + self.name = name + self.config = Configuration(isolated) + + assert self.name + super().__init__(*args, **kwargs) + + def check_default(self, option: optparse.Option, key: str, val: Any) -> Any: + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print(f"An error occurred during configuration: {exc}") + sys.exit(3) + + def _get_ordered_configuration_items(self) -> Iterator[Tuple[str, Any]]: + # Configuration gives keys in an unordered manner. Order them. + override_order = ["global", self.name, ":env:"] + + # Pool the options into different groups + section_items: Dict[str, List[Tuple[str, Any]]] = { + name: [] for name in override_order + } + for section_key, val in self.config.items(): + # ignore empty values + if not val: + logger.debug( + "Ignoring configuration key '%s' as it's value is empty.", + section_key, + ) + continue + + section, key = section_key.split(".", 1) + if section in override_order: + section_items[section].append((key, val)) + + # Yield each group in their override order + for section in override_order: + for key, val in section_items[section]: + yield key, val + + def _update_defaults(self, defaults: Dict[str, Any]) -> Dict[str, Any]: + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + + # Accumulate complex default state. + self.values = optparse.Values(self.defaults) + late_eval = set() + # Then set the options with those values + for key, val in self._get_ordered_configuration_items(): + # '--' because configuration supports only long names + option = self.get_option("--" + key) + + # Ignore options not present in this parser. E.g. non-globals put + # in [global] by users that want them to apply to all applicable + # commands. + if option is None: + continue + + assert option.dest is not None + + if option.action in ("store_true", "store_false"): + try: + val = strtobool(val) + except ValueError: + self.error( + "{} is not a valid value for {} option, " # noqa + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.".format(val, key) + ) + elif option.action == "count": + with suppress(ValueError): + val = strtobool(val) + with suppress(ValueError): + val = int(val) + if not isinstance(val, int) or val < 0: + self.error( + "{} is not a valid value for {} option, " # noqa + "please instead specify either a non-negative integer " + "or a boolean value like yes/no or false/true " + "which is equivalent to 1/0.".format(val, key) + ) + elif option.action == "append": + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == "callback": + assert option.callback is not None + late_eval.add(option.dest) + opt_str = option.get_opt_string() + val = option.convert_value(opt_str, val) + # From take_action + args = option.callback_args or () + kwargs = option.callback_kwargs or {} + option.callback(option, opt_str, val, self, *args, **kwargs) + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + + for key in late_eval: + defaults[key] = getattr(self.values, key) + self.values = None + return defaults + + def get_default_values(self) -> optparse.Values: + """Overriding to make updating the defaults after instantiation of + the option parser possible, _update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + # Load the configuration, or error out in case of an error + try: + self.config.load() + except ConfigurationError as err: + self.exit(UNKNOWN_ERROR, str(err)) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + assert option.dest is not None + default = defaults.get(option.dest) + if isinstance(default, str): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg: str) -> None: + self.print_usage(sys.stderr) + self.exit(UNKNOWN_ERROR, f"{msg}\n") diff --git a/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py b/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py new file mode 100644 index 000000000..ffa1964fc --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py @@ -0,0 +1,321 @@ +import functools +import itertools +import sys +from signal import SIGINT, default_int_handler, signal +from typing import Any, Callable, Iterator, Optional, Tuple + +from pip._vendor.progress.bar import Bar, FillingCirclesBar, IncrementalBar +from pip._vendor.progress.spinner import Spinner +from pip._vendor.rich.progress import ( + BarColumn, + DownloadColumn, + FileSizeColumn, + Progress, + ProgressColumn, + SpinnerColumn, + TextColumn, + TimeElapsedColumn, + TimeRemainingColumn, + TransferSpeedColumn, +) + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation +from pip._internal.utils.misc import format_size + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + +DownloadProgressRenderer = Callable[[Iterator[bytes]], Iterator[bytes]] + + +def _select_progress_class(preferred: Bar, fallback: Bar) -> Bar: + encoding = getattr(preferred.file, "encoding", None) + + # If we don't know what encoding this file is in, then we'll just assume + # that it doesn't support unicode and use the ASCII bar. + if not encoding: + return fallback + + # Collect all of the possible characters we want to use with the preferred + # bar. + characters = [ + getattr(preferred, "empty_fill", ""), + getattr(preferred, "fill", ""), + ] + characters += list(getattr(preferred, "phases", [])) + + # Try to decode the characters we're using for the bar using the encoding + # of the given file, if this works then we'll assume that we can use the + # fancier bar and if not we'll fall back to the plaintext bar. + try: + "".join(characters).encode(encoding) + except UnicodeEncodeError: + return fallback + else: + return preferred + + +_BaseBar: Any = _select_progress_class(IncrementalBar, Bar) + + +class InterruptibleMixin: + """ + Helper to ensure that self.finish() gets called on keyboard interrupt. + + This allows downloads to be interrupted without leaving temporary state + (like hidden cursors) behind. + + This class is similar to the progress library's existing SigIntMixin + helper, but as of version 1.2, that helper has the following problems: + + 1. It calls sys.exit(). + 2. It discards the existing SIGINT handler completely. + 3. It leaves its own handler in place even after an uninterrupted finish, + which will have unexpected delayed effects if the user triggers an + unrelated keyboard interrupt some time after a progress-displaying + download has already completed, for example. + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + """ + Save the original SIGINT handler for later. + """ + # https://github.com/python/mypy/issues/5887 + super().__init__(*args, **kwargs) # type: ignore + + self.original_handler = signal(SIGINT, self.handle_sigint) + + # If signal() returns None, the previous handler was not installed from + # Python, and we cannot restore it. This probably should not happen, + # but if it does, we must restore something sensible instead, at least. + # The least bad option should be Python's default SIGINT handler, which + # just raises KeyboardInterrupt. + if self.original_handler is None: + self.original_handler = default_int_handler + + def finish(self) -> None: + """ + Restore the original SIGINT handler after finishing. + + This should happen regardless of whether the progress display finishes + normally, or gets interrupted. + """ + super().finish() # type: ignore + signal(SIGINT, self.original_handler) + + def handle_sigint(self, signum, frame): # type: ignore + """ + Call self.finish() before delegating to the original SIGINT handler. + + This handler should only be in place while the progress display is + active. + """ + self.finish() + self.original_handler(signum, frame) + + +class SilentBar(Bar): + def update(self) -> None: + pass + + +class BlueEmojiBar(IncrementalBar): + + suffix = "%(percent)d%%" + bar_prefix = " " + bar_suffix = " " + phases = ("\U0001F539", "\U0001F537", "\U0001F535") + + +class DownloadProgressMixin: + def __init__(self, *args: Any, **kwargs: Any) -> None: + # https://github.com/python/mypy/issues/5887 + super().__init__(*args, **kwargs) # type: ignore + self.message: str = (" " * (get_indentation() + 2)) + self.message + + @property + def downloaded(self) -> str: + return format_size(self.index) # type: ignore + + @property + def download_speed(self) -> str: + # Avoid zero division errors... + if self.avg == 0.0: # type: ignore + return "..." + return format_size(1 / self.avg) + "/s" # type: ignore + + @property + def pretty_eta(self) -> str: + if self.eta: # type: ignore + return f"eta {self.eta_td}" # type: ignore + return "" + + def iter(self, it): # type: ignore + for x in it: + yield x + # B305 is incorrectly raised here + # https://github.com/PyCQA/flake8-bugbear/issues/59 + self.next(len(x)) # noqa: B305 + self.finish() + + +class WindowsMixin: + def __init__(self, *args: Any, **kwargs: Any) -> None: + # The Windows terminal does not support the hide/show cursor ANSI codes + # even with colorama. So we'll ensure that hide_cursor is False on + # Windows. + # This call needs to go before the super() call, so that hide_cursor + # is set in time. The base progress bar class writes the "hide cursor" + # code to the terminal in its init, so if we don't set this soon + # enough, we get a "hide" with no corresponding "show"... + if WINDOWS and self.hide_cursor: # type: ignore + self.hide_cursor = False + + # https://github.com/python/mypy/issues/5887 + super().__init__(*args, **kwargs) # type: ignore + + # Check if we are running on Windows and we have the colorama module, + # if we do then wrap our file with it. + if WINDOWS and colorama: + self.file = colorama.AnsiToWin32(self.file) # type: ignore + # The progress code expects to be able to call self.file.isatty() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.isatty = lambda: self.file.wrapped.isatty() + # The progress code expects to be able to call self.file.flush() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.flush = lambda: self.file.wrapped.flush() + + +class BaseDownloadProgressBar(WindowsMixin, InterruptibleMixin, DownloadProgressMixin): + + file = sys.stdout + message = "%(percent)d%%" + suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" + + +class DefaultDownloadProgressBar(BaseDownloadProgressBar, _BaseBar): + pass + + +class DownloadSilentBar(BaseDownloadProgressBar, SilentBar): + pass + + +class DownloadBar(BaseDownloadProgressBar, Bar): + pass + + +class DownloadFillingCirclesBar(BaseDownloadProgressBar, FillingCirclesBar): + pass + + +class DownloadBlueEmojiProgressBar(BaseDownloadProgressBar, BlueEmojiBar): + pass + + +class DownloadProgressSpinner( + WindowsMixin, InterruptibleMixin, DownloadProgressMixin, Spinner +): + + file = sys.stdout + suffix = "%(downloaded)s %(download_speed)s" + + def next_phase(self) -> str: + if not hasattr(self, "_phaser"): + self._phaser = itertools.cycle(self.phases) + return next(self._phaser) + + def update(self) -> None: + message = self.message % self + phase = self.next_phase() + suffix = self.suffix % self + line = "".join( + [ + message, + " " if message else "", + phase, + " " if suffix else "", + suffix, + ] + ) + + self.writeln(line) + + +BAR_TYPES = { + "off": (DownloadSilentBar, DownloadSilentBar), + "on": (DefaultDownloadProgressBar, DownloadProgressSpinner), + "ascii": (DownloadBar, DownloadProgressSpinner), + "pretty": (DownloadFillingCirclesBar, DownloadProgressSpinner), + "emoji": (DownloadBlueEmojiProgressBar, DownloadProgressSpinner), +} + + +def _legacy_progress_bar( + progress_bar: str, max: Optional[int] +) -> DownloadProgressRenderer: + if max is None or max == 0: + return BAR_TYPES[progress_bar][1]().iter # type: ignore + else: + return BAR_TYPES[progress_bar][0](max=max).iter + + +# +# Modern replacement, for our legacy progress bars. +# +def _rich_progress_bar( + iterable: Iterator[bytes], + *, + bar_type: str, + size: int, +) -> Iterator[bytes]: + assert bar_type == "on", "This should only be used in the default mode." + + if not size: + total = float("inf") + columns: Tuple[ProgressColumn, ...] = ( + TextColumn("[progress.description]{task.description}"), + SpinnerColumn("line", speed=1.5), + FileSizeColumn(), + TransferSpeedColumn(), + TimeElapsedColumn(), + ) + else: + total = size + columns = ( + TextColumn("[progress.description]{task.description}"), + BarColumn(), + DownloadColumn(), + TransferSpeedColumn(), + TextColumn("eta"), + TimeRemainingColumn(), + ) + + progress = Progress(*columns, refresh_per_second=30) + task_id = progress.add_task(" " * (get_indentation() + 2), total=total) + with progress: + for chunk in iterable: + yield chunk + progress.update(task_id, advance=len(chunk)) + + +def get_download_progress_renderer( + *, bar_type: str, size: Optional[int] = None +) -> DownloadProgressRenderer: + """Get an object that can be used to render the download progress. + + Returns a callable, that takes an iterable to "wrap". + """ + if bar_type == "on": + return functools.partial(_rich_progress_bar, bar_type=bar_type, size=size) + elif bar_type == "off": + return iter # no-op, when passed an iterator + else: + return _legacy_progress_bar(bar_type, size) diff --git a/venv/Lib/site-packages/pip/_internal/cli/req_command.py b/venv/Lib/site-packages/pip/_internal/cli/req_command.py new file mode 100644 index 000000000..5d4d1f0f4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/req_command.py @@ -0,0 +1,506 @@ +"""Contains the Command base classes that depend on PipSession. + +The classes in this module are in a separate module so the commands not +needing download / PackageFinder capability don't unnecessarily import the +PackageFinder machinery and all its vendored dependencies, etc. +""" + +import logging +import os +import sys +from functools import partial +from optparse import Values +from typing import Any, List, Optional, Tuple + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.exceptions import CommandError, PreviousBuildDirError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, + install_req_from_parsed_requirement, + install_req_from_req_string, +) +from pip._internal.req.req_file import parse_requirements +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.resolution.base import BaseResolver +from pip._internal.self_outdated_check import pip_self_version_check +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.temp_dir import ( + TempDirectory, + TempDirectoryTypeRegistry, + tempdir_kinds, +) +from pip._internal.utils.virtualenv import running_under_virtualenv + +logger = logging.getLogger(__name__) + + +class SessionCommandMixin(CommandContextMixIn): + + """ + A class mixin for command classes needing _build_session(). + """ + + def __init__(self) -> None: + super().__init__() + self._session: Optional[PipSession] = None + + @classmethod + def _get_index_urls(cls, options: Values) -> Optional[List[str]]: + """Return a list of index urls from user-provided options.""" + index_urls = [] + if not getattr(options, "no_index", False): + url = getattr(options, "index_url", None) + if url: + index_urls.append(url) + urls = getattr(options, "extra_index_urls", None) + if urls: + index_urls.extend(urls) + # Return None rather than an empty list + return index_urls or None + + def get_default_session(self, options: Values) -> PipSession: + """Get a default-managed session.""" + if self._session is None: + self._session = self.enter_context(self._build_session(options)) + # there's no type annotation on requests.Session, so it's + # automatically ContextManager[Any] and self._session becomes Any, + # then https://github.com/python/mypy/issues/7696 kicks in + assert self._session is not None + return self._session + + def _build_session( + self, + options: Values, + retries: Optional[int] = None, + timeout: Optional[int] = None, + ) -> PipSession: + assert not options.cache_dir or os.path.isabs(options.cache_dir) + session = PipSession( + cache=( + os.path.join(options.cache_dir, "http") if options.cache_dir else None + ), + retries=retries if retries is not None else options.retries, + trusted_hosts=options.trusted_hosts, + index_urls=self._get_index_urls(options), + ) + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle SSL client certificate + if options.client_cert: + session.cert = options.client_cert + + # Handle timeouts + if options.timeout or timeout: + session.timeout = timeout if timeout is not None else options.timeout + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + +class IndexGroupCommand(Command, SessionCommandMixin): + + """ + Abstract base class for commands with the index_group options. + + This also corresponds to the commands that permit the pip version check. + """ + + def handle_pip_version_check(self, options: Values) -> None: + """ + Do the pip version check if not disabled. + + This overrides the default behavior of not doing the check. + """ + # Make sure the index_group options are present. + assert hasattr(options, "no_index") + + if options.disable_pip_version_check or options.no_index: + return + + # Otherwise, check if we're using the latest version of pip available. + session = self._build_session( + options, retries=0, timeout=min(5, options.timeout) + ) + with session: + pip_self_version_check(session, options) + + +KEEPABLE_TEMPDIR_TYPES = [ + tempdir_kinds.BUILD_ENV, + tempdir_kinds.EPHEM_WHEEL_CACHE, + tempdir_kinds.REQ_BUILD, +] + + +def warn_if_run_as_root() -> None: + """Output a warning for sudo users on Unix. + + In a virtual environment, sudo pip still writes to virtualenv. + On Windows, users may run pip as Administrator without issues. + This warning only applies to Unix root users outside of virtualenv. + """ + if running_under_virtualenv(): + return + if not hasattr(os, "getuid"): + return + # On Windows, there are no "system managed" Python packages. Installing as + # Administrator via pip is the correct way of updating system environments. + # + # We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform + # checks: https://mypy.readthedocs.io/en/stable/common_issues.html + if sys.platform == "win32" or sys.platform == "cygwin": + return + + if os.getuid() != 0: + return + + logger.warning( + "Running pip as the 'root' user can result in broken permissions and " + "conflicting behaviour with the system package manager. " + "It is recommended to use a virtual environment instead: " + "https://pip.pypa.io/warnings/venv" + ) + + +def with_cleanup(func: Any) -> Any: + """Decorator for common logic related to managing temporary + directories. + """ + + def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None: + for t in KEEPABLE_TEMPDIR_TYPES: + registry.set_delete(t, False) + + def wrapper( + self: RequirementCommand, options: Values, args: List[Any] + ) -> Optional[int]: + assert self.tempdir_registry is not None + if options.no_clean: + configure_tempdir_registry(self.tempdir_registry) + + try: + return func(self, options, args) + except PreviousBuildDirError: + # This kind of conflict can occur when the user passes an explicit + # build directory with a pre-existing folder. In that case we do + # not want to accidentally remove it. + configure_tempdir_registry(self.tempdir_registry) + raise + + return wrapper + + +class RequirementCommand(IndexGroupCommand): + def __init__(self, *args: Any, **kw: Any) -> None: + super().__init__(*args, **kw) + + self.cmd_opts.add_option(cmdoptions.no_clean()) + + @staticmethod + def determine_resolver_variant(options: Values) -> str: + """Determines which resolver should be used, based on the given options.""" + if "legacy-resolver" in options.deprecated_features_enabled: + return "legacy" + + return "2020-resolver" + + @staticmethod + def determine_build_failure_suppression(options: Values) -> bool: + """Determines whether build failures should be suppressed and backtracked on.""" + if "backtrack-on-build-failures" not in options.deprecated_features_enabled: + return False + + if "legacy-resolver" in options.deprecated_features_enabled: + raise CommandError("Cannot backtrack with legacy resolver.") + + deprecated( + reason=( + "Backtracking on build failures can mask issues related to how " + "a package generates metadata or builds a wheel. This flag will " + "be removed in pip 22.2." + ), + gone_in=None, + replacement=( + "avoiding known-bad versions by explicitly telling pip to ignore them " + "(either directly as requirements, or via a constraints file)" + ), + feature_flag=None, + issue=10655, + ) + return True + + @classmethod + def make_requirement_preparer( + cls, + temp_build_dir: TempDirectory, + options: Values, + req_tracker: RequirementTracker, + session: PipSession, + finder: PackageFinder, + use_user_site: bool, + download_dir: Optional[str] = None, + verbosity: int = 0, + ) -> RequirementPreparer: + """ + Create a RequirementPreparer instance for the given parameters. + """ + temp_build_dir_path = temp_build_dir.path + assert temp_build_dir_path is not None + + resolver_variant = cls.determine_resolver_variant(options) + if resolver_variant == "2020-resolver": + lazy_wheel = "fast-deps" in options.features_enabled + if lazy_wheel: + logger.warning( + "pip is using lazily downloaded wheels using HTTP " + "range requests to obtain dependency information. " + "This experimental feature is enabled through " + "--use-feature=fast-deps and it is not ready for " + "production." + ) + else: + lazy_wheel = False + if "fast-deps" in options.features_enabled: + logger.warning( + "fast-deps has no effect when used with the legacy resolver." + ) + + in_tree_build = "out-of-tree-build" not in options.deprecated_features_enabled + if "in-tree-build" in options.features_enabled: + deprecated( + reason="In-tree builds are now the default.", + replacement="to remove the --use-feature=in-tree-build flag", + gone_in="22.1", + ) + if "out-of-tree-build" in options.deprecated_features_enabled: + deprecated( + reason="Out-of-tree builds are deprecated.", + replacement=None, + gone_in="22.1", + ) + + if options.progress_bar not in {"on", "off"}: + deprecated( + reason="Custom progress bar styles are deprecated", + replacement="to use the default progress bar style.", + gone_in="22.1", + ) + + return RequirementPreparer( + build_dir=temp_build_dir_path, + src_dir=options.src_dir, + download_dir=download_dir, + build_isolation=options.build_isolation, + req_tracker=req_tracker, + session=session, + progress_bar=options.progress_bar, + finder=finder, + require_hashes=options.require_hashes, + use_user_site=use_user_site, + lazy_wheel=lazy_wheel, + verbosity=verbosity, + in_tree_build=in_tree_build, + ) + + @classmethod + def make_resolver( + cls, + preparer: RequirementPreparer, + finder: PackageFinder, + options: Values, + wheel_cache: Optional[WheelCache] = None, + use_user_site: bool = False, + ignore_installed: bool = True, + ignore_requires_python: bool = False, + force_reinstall: bool = False, + upgrade_strategy: str = "to-satisfy-only", + use_pep517: Optional[bool] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> BaseResolver: + """ + Create a Resolver instance for the given parameters. + """ + make_install_req = partial( + install_req_from_req_string, + isolated=options.isolated_mode, + use_pep517=use_pep517, + ) + suppress_build_failures = cls.determine_build_failure_suppression(options) + resolver_variant = cls.determine_resolver_variant(options) + # The long import name and duplicated invocation is needed to convince + # Mypy into correctly typechecking. Otherwise it would complain the + # "Resolver" class being redefined. + if resolver_variant == "2020-resolver": + import pip._internal.resolution.resolvelib.resolver + + return pip._internal.resolution.resolvelib.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + suppress_build_failures=suppress_build_failures, + ) + import pip._internal.resolution.legacy.resolver + + return pip._internal.resolution.legacy.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + ) + + def get_requirements( + self, + args: List[str], + options: Values, + finder: PackageFinder, + session: PipSession, + ) -> List[InstallRequirement]: + """ + Parse command-line arguments into the corresponding requirements. + """ + requirements: List[InstallRequirement] = [] + for filename in options.constraints: + for parsed_req in parse_requirements( + filename, + constraint=True, + finder=finder, + options=options, + session=session, + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + user_supplied=False, + ) + requirements.append(req_to_add) + + for req in args: + req_to_add = install_req_from_line( + req, + None, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + ) + requirements.append(req_to_add) + + for req in options.editables: + req_to_add = install_req_from_editable( + req, + user_supplied=True, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + ) + requirements.append(req_to_add) + + # NOTE: options.require_hashes may be set if --require-hashes is True + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, finder=finder, options=options, session=session + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + ) + requirements.append(req_to_add) + + # If any requirement has hash options, enable hash checking. + if any(req.has_hash_options for req in requirements): + options.require_hashes = True + + if not (args or options.editables or options.requirements): + opts = {"name": self.name} + if options.find_links: + raise CommandError( + "You must give at least one requirement to {name} " + '(maybe you meant "pip {name} {links}"?)'.format( + **dict(opts, links=" ".join(options.find_links)) + ) + ) + else: + raise CommandError( + "You must give at least one requirement to {name} " + '(see "pip help {name}")'.format(**opts) + ) + + return requirements + + @staticmethod + def trace_basic_info(finder: PackageFinder) -> None: + """ + Trace basic information about the provided objects. + """ + # Display where finder is looking for packages + search_scope = finder.search_scope + locations = search_scope.get_formatted_locations() + if locations: + logger.info(locations) + + def _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to this requirement command. + + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + link_collector = LinkCollector.create(session, options=options) + selection_prefs = SelectionPreferences( + allow_yanked=True, + format_control=options.format_control, + allow_all_prereleases=options.pre, + prefer_binary=options.prefer_binary, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + use_deprecated_html5lib="html5lib" in options.deprecated_features_enabled, + ) diff --git a/venv/Lib/site-packages/pip/_internal/cli/spinners.py b/venv/Lib/site-packages/pip/_internal/cli/spinners.py new file mode 100644 index 000000000..1e313e109 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/spinners.py @@ -0,0 +1,157 @@ +import contextlib +import itertools +import logging +import sys +import time +from typing import IO, Iterator + +from pip._vendor.progress import HIDE_CURSOR, SHOW_CURSOR + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation + +logger = logging.getLogger(__name__) + + +class SpinnerInterface: + def spin(self) -> None: + raise NotImplementedError() + + def finish(self, final_status: str) -> None: + raise NotImplementedError() + + +class InteractiveSpinner(SpinnerInterface): + def __init__( + self, + message: str, + file: IO[str] = None, + spin_chars: str = "-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds: float = 0.125, + ): + self._message = message + if file is None: + file = sys.stdout + self._file = file + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._finished = False + + self._spin_cycle = itertools.cycle(spin_chars) + + self._file.write(" " * get_indentation() + self._message + " ... ") + self._width = 0 + + def _write(self, status: str) -> None: + assert not self._finished + # Erase what we wrote before by backspacing to the beginning, writing + # spaces to overwrite the old text, and then backspacing again + backup = "\b" * self._width + self._file.write(backup + " " * self._width + backup) + # Now we have a blank slate to add our status + self._file.write(status) + self._width = len(status) + self._file.flush() + self._rate_limiter.reset() + + def spin(self) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status: str) -> None: + if self._finished: + return + self._write(final_status) + self._file.write("\n") + self._file.flush() + self._finished = True + + +# Used for dumb terminals, non-interactive installs (no tty), etc. +# We still print updates occasionally (once every 60 seconds by default) to +# act as a keep-alive for systems like Travis-CI that take lack-of-output as +# an indication that a task has frozen. +class NonInteractiveSpinner(SpinnerInterface): + def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None: + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status: str) -> None: + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status: str) -> None: + if self._finished: + return + self._update(f"finished with status '{final_status}'") + self._finished = True + + +class RateLimiter: + def __init__(self, min_update_interval_seconds: float) -> None: + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update: float = 0 + + def ready(self) -> bool: + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self) -> None: + self._last_update = time.time() + + +@contextlib.contextmanager +def open_spinner(message: str) -> Iterator[SpinnerInterface]: + # Interactive spinner goes directly to sys.stdout rather than being routed + # through the logging system, but it acts like it has level INFO, + # i.e. it's only displayed if we're at level INFO or better. + # Non-interactive spinner goes through the logging system, so it is always + # in sync with logging configuration. + if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: + spinner: SpinnerInterface = InteractiveSpinner(message) + else: + spinner = NonInteractiveSpinner(message) + try: + with hidden_cursor(sys.stdout): + yield spinner + except KeyboardInterrupt: + spinner.finish("canceled") + raise + except Exception: + spinner.finish("error") + raise + else: + spinner.finish("done") + + +@contextlib.contextmanager +def hidden_cursor(file: IO[str]) -> Iterator[None]: + # The Windows terminal does not support the hide/show cursor ANSI codes, + # even via colorama. So don't even try. + if WINDOWS: + yield + # We don't want to clutter the output with control characters if we're + # writing to a file, or if the user is running with --quiet. + # See https://github.com/pypa/pip/issues/3418 + elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: + yield + else: + file.write(HIDE_CURSOR) + try: + yield + finally: + file.write(SHOW_CURSOR) diff --git a/venv/Lib/site-packages/pip/_internal/cli/status_codes.py b/venv/Lib/site-packages/pip/_internal/cli/status_codes.py new file mode 100644 index 000000000..5e29502cd --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/cli/status_codes.py @@ -0,0 +1,6 @@ +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__init__.py b/venv/Lib/site-packages/pip/_internal/commands/__init__.py new file mode 100644 index 000000000..c72f24f30 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/__init__.py @@ -0,0 +1,127 @@ +""" +Package containing all pip commands +""" + +import importlib +from collections import namedtuple +from typing import Any, Dict, Optional + +from pip._internal.cli.base_command import Command + +CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") + +# This dictionary does a bunch of heavy lifting for help output: +# - Enables avoiding additional (costly) imports for presenting `--help`. +# - The ordering matters for help display. +# +# Even though the module path starts with the same "pip._internal.commands" +# prefix, the full path makes testing easier (specifically when modifying +# `commands_dict` in test setup / teardown). +commands_dict: Dict[str, CommandInfo] = { + "install": CommandInfo( + "pip._internal.commands.install", + "InstallCommand", + "Install packages.", + ), + "download": CommandInfo( + "pip._internal.commands.download", + "DownloadCommand", + "Download packages.", + ), + "uninstall": CommandInfo( + "pip._internal.commands.uninstall", + "UninstallCommand", + "Uninstall packages.", + ), + "freeze": CommandInfo( + "pip._internal.commands.freeze", + "FreezeCommand", + "Output installed packages in requirements format.", + ), + "list": CommandInfo( + "pip._internal.commands.list", + "ListCommand", + "List installed packages.", + ), + "show": CommandInfo( + "pip._internal.commands.show", + "ShowCommand", + "Show information about installed packages.", + ), + "check": CommandInfo( + "pip._internal.commands.check", + "CheckCommand", + "Verify installed packages have compatible dependencies.", + ), + "config": CommandInfo( + "pip._internal.commands.configuration", + "ConfigurationCommand", + "Manage local and global configuration.", + ), + "search": CommandInfo( + "pip._internal.commands.search", + "SearchCommand", + "Search PyPI for packages.", + ), + "cache": CommandInfo( + "pip._internal.commands.cache", + "CacheCommand", + "Inspect and manage pip's wheel cache.", + ), + "index": CommandInfo( + "pip._internal.commands.index", + "IndexCommand", + "Inspect information available from package indexes.", + ), + "wheel": CommandInfo( + "pip._internal.commands.wheel", + "WheelCommand", + "Build wheels from your requirements.", + ), + "hash": CommandInfo( + "pip._internal.commands.hash", + "HashCommand", + "Compute hashes of package archives.", + ), + "completion": CommandInfo( + "pip._internal.commands.completion", + "CompletionCommand", + "A helper command used for command completion.", + ), + "debug": CommandInfo( + "pip._internal.commands.debug", + "DebugCommand", + "Show information useful for debugging.", + ), + "help": CommandInfo( + "pip._internal.commands.help", + "HelpCommand", + "Show help for commands.", + ), +} + + +def create_command(name: str, **kwargs: Any) -> Command: + """ + Create an instance of the Command class with the given name. + """ + module_path, class_name, summary = commands_dict[name] + module = importlib.import_module(module_path) + command_class = getattr(module, class_name) + command = command_class(name=name, summary=summary, **kwargs) + + return command + + +def get_similar_commands(name: str) -> Optional[str]: + """Command name auto-correct.""" + from difflib import get_close_matches + + name = name.lower() + + close_commands = get_close_matches(name, commands_dict.keys()) + + if close_commands: + return close_commands[0] + else: + return None diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ab27e11e2d4f3b769c31070942730e4f772ba8c GIT binary patch literal 3137 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03f4a73a2bf6d328bc661505b6398cc48ccda768 GIT binary patch literal 3138 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5ec7b3842c41f39309d6547b91a819ff6bc4f93 GIT binary patch literal 6687 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 F{14kz>&gHC literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88e19d11644e6e4f43981429bc14e025e74ec1be GIT binary patch literal 2150 zcmZuyOK%)S5T2g*&hFaIgCv*`CL)elDc-<=ixnaw$BB_52YF2p!-mo9bbEK4dAYkM zCd>NdTqFL%`h@re{FjzEapEU{5TR<;b~Y$I>YD1V>Yl2v9#gd2o(AK$AATSFVr$wT zxR@WXr+o=iOo331l2i+3ZxWDttp_^1_0-7Bz$7R$QY*6qyXMW*$=txLc`I#XUf^ZT zpjof&w3W4kcD4{K)N3bQ%$9|Ah;XpBtHvkS*0xcE?`E^WNjXoI;&M(`f>*d^M8 z*qVADIqm4m+SuNHysezx zH|y&gy&mkeAKZKLc>AlJjd1f`Z&S5v7r3;Dqtq{>_*par36Dp~bJq20{hbjL%#WkoA27cX zjQR(O9QmuO_3+8@=D2z zq5pkR%B0A}Q~wSgz3X?o-5q6fCM%wA#bgc|!+Plsdumfx|INtuw!iAO~eGokD#M!%Fp*=|&&Qkf%`mK=TPxXO() z8iMCSc@eES(B&=&xdTMmy9Li8IJ8$Jxw6ZM3&zz2fRJ&C2SGg?@}ep+Lj_BBf7SR0 zaPseXeXaiuXo>!IB}CM}U&K`%nf}8>ZdQZ-gMitxq~z*J z3W$E0l()kqmyG98dOMzFzPODs@0KrA^NrDB8NMp60I`Wa_n5>b`fK~Ii_P)nxh(9? zom9?A?3Eeup@(G=o zB@=UENC)YWegyqwe@VI!Z+&aLv?A8LS>ApD?270#INGh6B?ni-N^4NRH}&%*a*TG-wMP1DoRfzP8iZ6hHY!+ z$%SN?LlTE4`UVS>=ieUh|5^9l>BmL*Ahq@$FeF8OlXh?|P5rGIghY+=?IWaN1`-|Vg zU%}K&?Z|){Hm24w)a_@QxN!hde7=Kuy5BLz*SG7I;mgyKrO6N~a@OH6UR|a0!B)ps zW>GRIOpIlk43v?x1Kt4hlwFlHl1w#5?8n(@2=AGL$~ozbP|9#rS#>-AKU^QfMW4g0 zgWS?R(t<~S?fvVTOaHhgM|tN8{}jLHq{VQUO%IY{>gM#dy z6=XL~lkOlAEIg@9ZsLh|C_%@Sl>jwpPP1&rq*cprUsuTl+A=x?TG)T;PNc59ODju6 zT%$EBiN=u0N8kli%gx$qbO{!iHT)J5ba)P=I>qX8aPQ0#`7ZXvx`Viy3ta;NYw1e_ LA5UL0mT&$C)G9I# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5cc554048642149c4b43dd4b14abdb691e113b4 GIT binary patch literal 1311 zcmZux&5qkP5GFDw<6boU29`>+apoboUGzj3PNr4~;>ZU~np@J-O9c?5^ zA*tQikT2alK<`C?-D97i??Rxbp85*8v_shr+@NFd({Nx8zxigQdUrQOV1NAd=d`2< z{be`X1~K#imU;%j5W^*^aE!6_ozkgDOnRS`v~pv&_i5=>e(d+YTL#r29$@qcF^~Cg z5c9cvN#c+N6Ld8A8?vG!Y`pKYvgHaq`lL`Ap8mM5s!TBJPM(j)4<{3FhwJD=DQlVA z!`tS;<^e4AIRHm7W+-+TjtO&O%1G=o%01?Cp9i;r4j-HXB^JD)KxY7SLbLOjm(BW) z#s1_)eG$EYNOW4uC|?m$i~TU_?XyPKv*_MBe*Zh;*NrY}p$yIBOc_sd-Aa)YV6!o+ zb^vP(OZ@`CFz5)HE=lDqX+@Tx;lk^H_HDHEen4V}B2DLaFtR`Gdgwrmw4$j(s{okMt>tSybL;De$fS2P;BR~qSw$f?KAHx=z?o}iGRi&?N1K6!P(#{ zyzaAu2>w%vf!7f+yPJwrR^-~;$R*D-PuEeiH{&{0MOBoU+yvF)W-DHb`a*2viVol6 z!^O=in@@Q(uiL2Nnb6VUf<(vB(T>?~ie{7+LUSpyapP zm6{oU&Et0@KY>GU^YPu}IpkK!x2;lH@>QL;6&G41j|%;`ohDxwQt9JovOeRvPR_YF zPo5OhL=~DJH(CBNn{kyusVDDBJ=v6cVu_BLxgoL@AHr?w0ALS0-q0E106YH#B)~Tu zif;i1PKc?q_+V>LM{w>bNExJkA!%yDG_7jZmK^+Hn!akY(v}E2KTTPkgX6XeIGK-% znW!aCC4bcx@U+aOV|B7qYlza)5KvQoYGYQ5Ex2R1K7bWgtwx&yJL()beY|G{FU6`c zHm&jWyeY(NmHyzp=9k52nyGgqChgb9{Li11&UC9_=onY4arpSZnfU9RuinLeKzcG; c#QQoddlTGS33cDjyt4B)L_=(aAL2doFI5a(rvLx| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dfc42b77fd7b59d3c0b54ba0dd02dd1a7178d24 GIT binary patch literal 4634 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%0DGIc`S?oZyj zvUuZ+GQxzbudl9o$^gKtgy|Oyw}~%1SojDdk^5F3wiJZlHdt3%p!U}&<|e#$_>hbx zgOc@rtHVLf z`_VXlm9;uSp4~Q7L2}{ob&-1jTYfJ6-AEZ2V7Jr$zMVPOTl%OfQwDn9~f}%WexocgB^TRDM_#jiOY+N zmlvTM;-~PA+)I=DBUC6O{C}fVmNo-EY!4H{go&T9B>-Vg_5&&wSv*facq_fD*%0XiU#ILl@pYDNUtB#>m_=T)UT{&ECi5&M_DUaqTiwHKcyF4 z)FDE^g5GJA1*x;jgopoU21o++PsLK;PPKtQ dQ70R=dhrS;^jYN8WZ1t7e8X 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc676ed2a54b302000a5b7e903ed752d52ffef10 GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97b099ba21591e56096312388d35577b1a14c116 GIT binary patch literal 3108 zcmZt|+ioOBwQtki(=+4C+Iz`{U5X8>WKd=n@c?L9MG@W*B9>Kz<480P?RHnqOndw0 zs%kqPjirdqtG@st*>CU#`~e?P5>Gtw#v_o3<(!)9I_a4{ed<)5Q>V_g%1$RR;Q8zC z|9<$lj$!-*2dhs52Jgcw{tSQ`)Xa`Fgmn@n*J>Z-$#153(EiR=AaKhueDG%5LVj!ds@n zjLX~X&XpOy@u5N6wDYAwJIrUnODDWb&0V9r_D|5(c-}RY`)QojOaSIQONE5*W)c@= zktT7Lj#*U1IRm1%Q|5VG(5|Jnc9{@qSSNs$JGeVOZp+(Km zrdH_C7Hv@XODAklkGa%m9`oM--?HYwrA->ZOh6s5ZCh>Z6*E<5Hj0048b(0iSu+I}#;lY5Hv&U0mJ@RqQ z8KL0NTBey;aIFYBP34Fj98_m=R2D=qSy%n)Y`);&;9YV$N|TXRj*yJSCyX4j5txn? zCCQnLX)I&Zl`_eA4juxISdu}SF+ollD6mkwuf_DpZo<<_l2aa672{&LfE=EEi!zj* zu&k^O4yOF$y_q%-!No)JyK;K)&&ZRRG2bKo{&XoJ*Vptod9oU3T2IZOTn?w_#q$Kb zw0ID2!n*^ncnV-*92rL@HK|2y>I@AG2kKpT=6uG-Fn}DEr2nvGnrNxacK^b*lj3>G9f{O1Vc)Blnr87qdfHYNz9cqVp#=8 zI2$*5y)!11jUW)RWVvzD&=N>5sD}hZ}#&qEJyEfkf z1M_VJw-KQ6yN>dcoJOEG>=09pp;oR=d#<)1ycn0b026!2%esR6cLd7@e=+!XLB@Ya zJCFDGV3pYaO)W&c|FleMU1s(_Oyw`@!~I{RT*%(XygY)Eu@443*?*QE?u%5i-aJM3 zAvqsKX#rtg#Mz@{S_;LZMUq0|sMb~*u+#{Rco46B4I*7kCpBTqY*|>D6HECd&9yejN2fX*rJ?T%pi8-;UePIJ->)e;k ziGNMn&NXR2JbruPh)*O`LkNBQkB}&{uluLQOY;w=Y*BCGoEX%YD$o=%g6*B~}^PlFm-f%65yUiTU|q=d!MkIEC%rZ@hJ?JVMhM;#xccrtm7-FNEM!cokaV^VemNd#c zVf?TZth=SQhD=7Ybc|-o@D{4pnHwMiiA*_o3hv;Ho0Y>M)zcpmK~G-bR4s zjl-n|R)XQ+7ND97(rp$HmGeE?r00Psoe4SQ~>Hg1kHed`% zWxHPou4TGr@CtC#edXF~ruBvOAIG;$-~o#B%4*N;b9x1;E|jx#(HjJznKWdcZ}7SP=J_kfpM2rzS% zEhJYq6cYYpq+x|x0R)F@0B*u7&`rJpdIo`W|F))g-&7vD6kMr%C=Am&h~kwi&non= z-sVjRsD1>sjF!AVEn+a&*H?jQWZc&)<`u1n0v|5cVC~V- zpuR;KT=irvU@i0$9WCn4>(Z9@79ECa^Yv-iNC)b5*+B0@c7Pr01bU9pDWIeI`Ud*6 z{X7-PG{l>bK+kkO@SmXOJp^d&6%S~K5TGgl$<)K|VJ8xI0r*DSgrC*6Ht-8S_&R}g G%l<#eij*b* literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7f0d83e27341d9bf62c4141d93672ae920f061c GIT binary patch literal 4840 zcmai2&2QYs6(_k|E|>eE)rT$lGmIP8QDUuHpluSvHPYB|n!<34IEj&sQi9@)B+C3) z&v2zk*e!x6Ko5m3y%q(e-g@hyK>vu|dgx(*o_gvZP@qkaqQ5uXmDWm=a>3!enKy4{ z-h1Wb?k1gdwl}Nm^<*xc z@6GGFmn@{`dgpY#k(^H#dyDB(Z%Nb5;tpcU^evHRLxR*he`@p6hfaOQ`#fVji()Rjo|aIKjnVJZzKWGTloW1ql9GnS zO+7B(*x*9?#TNHNwi9LrG2|P5mKRzGRF$XwIEk~(a%P!t6uY6|J{t&X!>m1nC-Sa4aa zmV249KZZ(P4EjZ$C-Tk@zterS+({{?WWUjm`@U|t;SVGfNBdi6aM#kXQxbgsaRHx! zyZRdT$xqX~2go9P{i%(#PD}@NIt}lK(#-$s_DyGK5aZH;uVH zc0!W9dcv$60b7XdVFbTDc`Vdiym#@+9rO&1ZDZSHCbL+D*@d-Tp(An#=%bz^v#^h< z$HuWaMLTEc+8NqCL)XvH-Wj@ahHjprTW9F@8G7an-8nMU4m}-oKtc1cI<>30 zQ!c&h`BNIBT6zq?_YeW%L^BH|4|H^{u(!{neeu{Dne;tcVx6IRY-#S2f(XA5h4Nt#~_B%Jpzj2P~RBF)tDXcP zbKv-Z-`~G}FVAiie%a;68zp>|=Z)5|159U_OPqs$DJP65*oZ|C0-@R1udb~01>gVR z?JPU_M3 z(8wntR0jRMVhh4+5Qsn`Rg*wWa4Caz*sxVDVhm}jy_w|eVM6;P&8hZyf?z9@TU@Hy zGI*tR>uKej-yZ?201mHd>PZq_fa^OWtKnNv@GY}okqv}-@j8%%XGfzxE=GP#RBcw zmTltqpLTV@++TXE6Q?rtcc&&+wTW`=P;APmf;CK@SyUQ$HMsr(j#mIc0RkF4k1VQ< zDnsL_GBk%30EJ!HLvy=|*Ez68)uM))dw>yvThz-s!N-wTG!6j4Bd2JhwbeupOK^Qy z8P(9+9zycahD3Yh0(xeKkTZ0K6|_Mfv(eUJ)kAkwM{Rakr}iPuI)`_jz<%UG&ce{v zEA_U|4PD5u9a^KtrZH*`8{6lP7LSd4#zzaI*08m`B;>GubYa*c{-;~T#bN8f6vJWj z=+a5s!{@ON*7xw;a8l#SB?9Uh1kG{?7;JGpE99N*TnaN5X z8y^60N1b1Ep8mT0?wY$s@#1jiz+~Q&iuh}>%o+#gr)KdI<$MoSRpafu%N6A?AXCAW z4Jc)*Q=TnA0y1T!V(k91tJ(#!)-e(ghP(#rs|HTpB=1!<#$alRyso z{ah5BmD!X86u(7la!SY+D>S5wV!updDM)CMI)S~8j0UM8XSe+8QX}X7wfnlkKS{Il z3|Z(nlhh;S^2;T5UM!a|PB_O}DYd5N>0U4nIKf0E=f*taR4ynrBUxXiWueT9 zk@9DS$P>|`J#@; zx4Q;HRNJdrw|rCgEMHSKGCT|}t`hqi3gse5m9d5BH!-kHfT zk)CXfDuVv&QD4I|{;xqpz}ac&#K>+M%SfY!1`&1n*`<^`8qx{OHHch#mZgMW?Z|)y zeQ5PDt^;8n=<_F1Qb#}qS#HXj+PK=!-P@(h+@a)DUPIv;`` can be a glob expression or a package name. + """ + + ignore_require_venv = True + usage = """ + %prog dir + %prog info + %prog list [] [--format=[human, abspath]] + %prog remove + %prog purge + """ + + def add_options(self) -> None: + + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="human", + choices=("human", "abspath"), + help="Select the output format among: human (default) or abspath", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "dir": self.get_cache_dir, + "info": self.get_cache_info, + "list": self.list_cache_items, + "remove": self.remove_cache_items, + "purge": self.purge_cache, + } + + if not options.cache_dir: + logger.error("pip cache commands can not function since cache is disabled.") + return ERROR + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def get_cache_dir(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + logger.info(options.cache_dir) + + def get_cache_info(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + num_http_files = len(self._find_http_files(options)) + num_packages = len(self._find_wheels(options, "*")) + + http_cache_location = self._cache_dir(options, "http") + wheels_cache_location = self._cache_dir(options, "wheels") + http_cache_size = filesystem.format_directory_size(http_cache_location) + wheels_cache_size = filesystem.format_directory_size(wheels_cache_location) + + message = ( + textwrap.dedent( + """ + Package index page cache location: {http_cache_location} + Package index page cache size: {http_cache_size} + Number of HTTP files: {num_http_files} + Wheels location: {wheels_cache_location} + Wheels size: {wheels_cache_size} + Number of wheels: {package_count} + """ + ) + .format( + http_cache_location=http_cache_location, + http_cache_size=http_cache_size, + num_http_files=num_http_files, + wheels_cache_location=wheels_cache_location, + package_count=num_packages, + wheels_cache_size=wheels_cache_size, + ) + .strip() + ) + + logger.info(message) + + def list_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if args: + pattern = args[0] + else: + pattern = "*" + + files = self._find_wheels(options, pattern) + if options.list_format == "human": + self.format_for_human(files) + else: + self.format_for_abspath(files) + + def format_for_human(self, files: List[str]) -> None: + if not files: + logger.info("Nothing cached.") + return + + results = [] + for filename in files: + wheel = os.path.basename(filename) + size = filesystem.format_file_size(filename) + results.append(f" - {wheel} ({size})") + logger.info("Cache contents:\n") + logger.info("\n".join(sorted(results))) + + def format_for_abspath(self, files: List[str]) -> None: + if not files: + return + + results = [] + for filename in files: + results.append(filename) + + logger.info("\n".join(sorted(results))) + + def remove_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if not args: + raise CommandError("Please provide a pattern") + + files = self._find_wheels(options, args[0]) + + no_matching_msg = "No matching packages" + if args[0] == "*": + # Only fetch http files if no specific pattern given + files += self._find_http_files(options) + else: + # Add the pattern to the log message + no_matching_msg += ' for pattern "{}"'.format(args[0]) + + if not files: + logger.warning(no_matching_msg) + + for filename in files: + os.unlink(filename) + logger.verbose("Removed %s", filename) + logger.info("Files removed: %s", len(files)) + + def purge_cache(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + return self.remove_cache_items(options, ["*"]) + + def _cache_dir(self, options: Values, subdir: str) -> str: + return os.path.join(options.cache_dir, subdir) + + def _find_http_files(self, options: Values) -> List[str]: + http_dir = self._cache_dir(options, "http") + return filesystem.find_files(http_dir, "*") + + def _find_wheels(self, options: Values, pattern: str) -> List[str]: + wheel_dir = self._cache_dir(options, "wheels") + + # The wheel filename format, as specified in PEP 427, is: + # {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl + # + # Additionally, non-alphanumeric values in the distribution are + # normalized to underscores (_), meaning hyphens can never occur + # before `-{version}`. + # + # Given that information: + # - If the pattern we're given contains a hyphen (-), the user is + # providing at least the version. Thus, we can just append `*.whl` + # to match the rest of it. + # - If the pattern we're given doesn't contain a hyphen (-), the + # user is only providing the name. Thus, we append `-*.whl` to + # match the hyphen before the version, followed by anything else. + # + # PEP 427: https://www.python.org/dev/peps/pep-0427/ + pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl") + + return filesystem.find_files(wheel_dir, pattern) diff --git a/venv/Lib/site-packages/pip/_internal/commands/check.py b/venv/Lib/site-packages/pip/_internal/commands/check.py new file mode 100644 index 000000000..3864220b2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/check.py @@ -0,0 +1,53 @@ +import logging +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.operations.check import ( + check_package_set, + create_package_set_from_installed, +) +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + + usage = """ + %prog [options]""" + + def run(self, options: Values, args: List[str]) -> int: + + package_set, parsing_probs = create_package_set_from_installed() + missing, conflicting = check_package_set(package_set) + + for project_name in missing: + version = package_set[project_name].version + for dependency in missing[project_name]: + write_output( + "%s %s requires %s, which is not installed.", + project_name, + version, + dependency[0], + ) + + for project_name in conflicting: + version = package_set[project_name].version + for dep_name, dep_version, req in conflicting[project_name]: + write_output( + "%s %s has requirement %s, but you have %s %s.", + project_name, + version, + req, + dep_name, + dep_version, + ) + + if missing or conflicting or parsing_probs: + return ERROR + else: + write_output("No broken requirements found.") + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/completion.py b/venv/Lib/site-packages/pip/_internal/commands/completion.py new file mode 100644 index 000000000..c0fb4caf8 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/completion.py @@ -0,0 +1,96 @@ +import sys +import textwrap +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.utils.misc import get_prog + +BASE_COMPLETION = """ +# pip {shell} completion start{script}# pip {shell} completion end +""" + +COMPLETION_SCRIPTS = { + "bash": """ + _pip_completion() + {{ + COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) ) + }} + complete -o default -F _pip_completion {prog} + """, + "zsh": """ + function _pip_completion {{ + local words cword + read -Ac words + read -cn cword + reply=( $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$(( cword-1 )) \\ + PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )) + }} + compctl -K _pip_completion {prog} + """, + "fish": """ + function __fish_complete_pip + set -lx COMP_WORDS (commandline -o) "" + set -lx COMP_CWORD ( \\ + math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\ + ) + set -lx PIP_AUTO_COMPLETE 1 + string split \\ -- (eval $COMP_WORDS[1]) + end + complete -fa "(__fish_complete_pip)" -c {prog} + """, +} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--bash", + "-b", + action="store_const", + const="bash", + dest="shell", + help="Emit completion code for bash", + ) + self.cmd_opts.add_option( + "--zsh", + "-z", + action="store_const", + const="zsh", + dest="shell", + help="Emit completion code for zsh", + ) + self.cmd_opts.add_option( + "--fish", + "-f", + action="store_const", + const="fish", + dest="shell", + help="Emit completion code for fish", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ["--" + shell for shell in sorted(shells)] + if options.shell in shells: + script = textwrap.dedent( + COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog()) + ) + print(BASE_COMPLETION.format(script=script, shell=options.shell)) + return SUCCESS + else: + sys.stderr.write( + "ERROR: You must pass {}\n".format(" or ".join(shell_options)) + ) + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/configuration.py b/venv/Lib/site-packages/pip/_internal/commands/configuration.py new file mode 100644 index 000000000..c6c74ed50 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/configuration.py @@ -0,0 +1,266 @@ +import logging +import os +import subprocess +from optparse import Values +from typing import Any, List, Optional + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.configuration import ( + Configuration, + Kind, + get_configuration_files, + kinds, +) +from pip._internal.exceptions import PipError +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_prog, write_output + +logger = logging.getLogger(__name__) + + +class ConfigurationCommand(Command): + """ + Manage local and global configuration. + + Subcommands: + + - list: List the active configuration (or from the file specified) + - edit: Edit the configuration file in an editor + - get: Get the value associated with name + - set: Set the name=value + - unset: Unset the value associated with name + - debug: List the configuration files and values defined under them + + If none of --user, --global and --site are passed, a virtual + environment configuration file is used if one is active and the file + exists. Otherwise, all modifications happen to the user file by + default. + """ + + ignore_require_venv = True + usage = """ + %prog [] list + %prog [] [--editor ] edit + + %prog [] get name + %prog [] set name value + %prog [] unset name + %prog [] debug + """ + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--editor", + dest="editor", + action="store", + default=None, + help=( + "Editor to use to edit the file. Uses VISUAL or EDITOR " + "environment variables if not provided." + ), + ) + + self.cmd_opts.add_option( + "--global", + dest="global_file", + action="store_true", + default=False, + help="Use the system-wide configuration file only", + ) + + self.cmd_opts.add_option( + "--user", + dest="user_file", + action="store_true", + default=False, + help="Use the user configuration file only", + ) + + self.cmd_opts.add_option( + "--site", + dest="site_file", + action="store_true", + default=False, + help="Use the current environment configuration file only", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "list": self.list_values, + "edit": self.open_in_editor, + "get": self.get_name, + "set": self.set_name_value, + "unset": self.unset_name, + "debug": self.list_config_values, + } + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Determine which configuration files are to be loaded + # Depends on whether the command is modifying. + try: + load_only = self._determine_file( + options, need_value=(action in ["get", "set", "unset", "edit"]) + ) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + # Load a new configuration + self.configuration = Configuration( + isolated=options.isolated_mode, load_only=load_only + ) + self.configuration.load() + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _determine_file(self, options: Values, need_value: bool) -> Optional[Kind]: + file_options = [ + key + for key, value in ( + (kinds.USER, options.user_file), + (kinds.GLOBAL, options.global_file), + (kinds.SITE, options.site_file), + ) + if value + ] + + if not file_options: + if not need_value: + return None + # Default to user, unless there's a site file. + elif any( + os.path.exists(site_config_file) + for site_config_file in get_configuration_files()[kinds.SITE] + ): + return kinds.SITE + else: + return kinds.USER + elif len(file_options) == 1: + return file_options[0] + + raise PipError( + "Need exactly one file to operate upon " + "(--user, --site, --global) to perform." + ) + + def list_values(self, options: Values, args: List[str]) -> None: + self._get_n_args(args, "list", n=0) + + for key, value in sorted(self.configuration.items()): + write_output("%s=%r", key, value) + + def get_name(self, options: Values, args: List[str]) -> None: + key = self._get_n_args(args, "get [name]", n=1) + value = self.configuration.get_value(key) + + write_output("%s", value) + + def set_name_value(self, options: Values, args: List[str]) -> None: + key, value = self._get_n_args(args, "set [name] [value]", n=2) + self.configuration.set_value(key, value) + + self._save_configuration() + + def unset_name(self, options: Values, args: List[str]) -> None: + key = self._get_n_args(args, "unset [name]", n=1) + self.configuration.unset_value(key) + + self._save_configuration() + + def list_config_values(self, options: Values, args: List[str]) -> None: + """List config key-value pairs across different config files""" + self._get_n_args(args, "debug", n=0) + + self.print_env_var_values() + # Iterate over config files and print if they exist, and the + # key-value pairs present in them if they do + for variant, files in sorted(self.configuration.iter_config_files()): + write_output("%s:", variant) + for fname in files: + with indent_log(): + file_exists = os.path.exists(fname) + write_output("%s, exists: %r", fname, file_exists) + if file_exists: + self.print_config_file_values(variant) + + def print_config_file_values(self, variant: Kind) -> None: + """Get key-value pairs from the file of a variant""" + for name, value in self.configuration.get_values_in_config(variant).items(): + with indent_log(): + write_output("%s: %s", name, value) + + def print_env_var_values(self) -> None: + """Get key-values pairs present as environment variables""" + write_output("%s:", "env_var") + with indent_log(): + for key, value in sorted(self.configuration.get_environ_vars()): + env_var = f"PIP_{key.upper()}" + write_output("%s=%r", env_var, value) + + def open_in_editor(self, options: Values, args: List[str]) -> None: + editor = self._determine_editor(options) + + fname = self.configuration.get_file_to_edit() + if fname is None: + raise PipError("Could not determine appropriate file.") + + try: + subprocess.check_call([editor, fname]) + except subprocess.CalledProcessError as e: + raise PipError( + "Editor Subprocess exited with exit code {}".format(e.returncode) + ) + + def _get_n_args(self, args: List[str], example: str, n: int) -> Any: + """Helper to make sure the command got the right number of arguments""" + if len(args) != n: + msg = ( + "Got unexpected number of arguments, expected {}. " + '(example: "{} config {}")' + ).format(n, get_prog(), example) + raise PipError(msg) + + if n == 1: + return args[0] + else: + return args + + def _save_configuration(self) -> None: + # We successfully ran a modifying command. Need to save the + # configuration. + try: + self.configuration.save() + except Exception: + logger.exception( + "Unable to save configuration. Please report this as a bug." + ) + raise PipError("Internal Error.") + + def _determine_editor(self, options: Values) -> str: + if options.editor is not None: + return options.editor + elif "VISUAL" in os.environ: + return os.environ["VISUAL"] + elif "EDITOR" in os.environ: + return os.environ["EDITOR"] + else: + raise PipError("Could not determine editor to use.") diff --git a/venv/Lib/site-packages/pip/_internal/commands/debug.py b/venv/Lib/site-packages/pip/_internal/commands/debug.py new file mode 100644 index 000000000..d3f1f28de --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/debug.py @@ -0,0 +1,202 @@ +import locale +import logging +import os +import sys +from optparse import Values +from types import ModuleType +from typing import Any, Dict, List, Optional + +import pip._vendor +from pip._vendor.certifi import where +from pip._vendor.packaging.version import parse as parse_version + +from pip import __file__ as pip_location +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.configuration import Configuration +from pip._internal.metadata import get_environment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_pip_version + +logger = logging.getLogger(__name__) + + +def show_value(name: str, value: Any) -> None: + logger.info("%s: %s", name, value) + + +def show_sys_implementation() -> None: + logger.info("sys.implementation:") + implementation_name = sys.implementation.name + with indent_log(): + show_value("name", implementation_name) + + +def create_vendor_txt_map() -> Dict[str, str]: + vendor_txt_path = os.path.join( + os.path.dirname(pip_location), "_vendor", "vendor.txt" + ) + + with open(vendor_txt_path) as f: + # Purge non version specifying lines. + # Also, remove any space prefix or suffixes (including comments). + lines = [ + line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line + ] + + # Transform into "module" -> version dict. + return dict(line.split("==", 1) for line in lines) # type: ignore + + +def get_module_from_module_name(module_name: str) -> ModuleType: + # Module name can be uppercase in vendor.txt for some reason... + module_name = module_name.lower() + # PATCH: setuptools is actually only pkg_resources. + if module_name == "setuptools": + module_name = "pkg_resources" + + __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0) + return getattr(pip._vendor, module_name) + + +def get_vendor_version_from_module(module_name: str) -> Optional[str]: + module = get_module_from_module_name(module_name) + version = getattr(module, "__version__", None) + + if not version: + # Try to find version in debundled module info. + env = get_environment([os.path.dirname(module.__file__)]) + dist = env.get_distribution(module_name) + if dist: + version = str(dist.version) + + return version + + +def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None: + """Log the actual version and print extra info if there is + a conflict or if the actual version could not be imported. + """ + for module_name, expected_version in vendor_txt_versions.items(): + extra_message = "" + actual_version = get_vendor_version_from_module(module_name) + if not actual_version: + extra_message = ( + " (Unable to locate actual module version, using" + " vendor.txt specified version)" + ) + actual_version = expected_version + elif parse_version(actual_version) != parse_version(expected_version): + extra_message = ( + " (CONFLICT: vendor.txt suggests version should" + " be {})".format(expected_version) + ) + logger.info("%s==%s%s", module_name, actual_version, extra_message) + + +def show_vendor_versions() -> None: + logger.info("vendored library versions:") + + vendor_txt_versions = create_vendor_txt_map() + with indent_log(): + show_actual_vendor_versions(vendor_txt_versions) + + +def show_tags(options: Values) -> None: + tag_limit = 10 + + target_python = make_target_python(options) + tags = target_python.get_tags() + + # Display the target options that were explicitly provided. + formatted_target = target_python.format_given() + suffix = "" + if formatted_target: + suffix = f" (target: {formatted_target})" + + msg = "Compatible tags: {}{}".format(len(tags), suffix) + logger.info(msg) + + if options.verbose < 1 and len(tags) > tag_limit: + tags_limited = True + tags = tags[:tag_limit] + else: + tags_limited = False + + with indent_log(): + for tag in tags: + logger.info(str(tag)) + + if tags_limited: + msg = ( + "...\n[First {tag_limit} tags shown. Pass --verbose to show all.]" + ).format(tag_limit=tag_limit) + logger.info(msg) + + +def ca_bundle_info(config: Configuration) -> str: + levels = set() + for key, _ in config.items(): + levels.add(key.split(".")[0]) + + if not levels: + return "Not specified" + + levels_that_override_global = ["install", "wheel", "download"] + global_overriding_level = [ + level for level in levels if level in levels_that_override_global + ] + if not global_overriding_level: + return "global" + + if "global" in levels: + levels.remove("global") + return ", ".join(levels) + + +class DebugCommand(Command): + """ + Display debug information. + """ + + usage = """ + %prog """ + ignore_require_venv = True + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + self.parser.insert_option_group(0, self.cmd_opts) + self.parser.config.load() + + def run(self, options: Values, args: List[str]) -> int: + logger.warning( + "This command is only meant for debugging. " + "Do not use this with automation for parsing and getting these " + "details, since the output and options of this command may " + "change without notice." + ) + show_value("pip version", get_pip_version()) + show_value("sys.version", sys.version) + show_value("sys.executable", sys.executable) + show_value("sys.getdefaultencoding", sys.getdefaultencoding()) + show_value("sys.getfilesystemencoding", sys.getfilesystemencoding()) + show_value( + "locale.getpreferredencoding", + locale.getpreferredencoding(), + ) + show_value("sys.platform", sys.platform) + show_sys_implementation() + + show_value("'cert' config value", ca_bundle_info(self.parser.config)) + show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE")) + show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE")) + show_value("pip._vendor.certifi.where()", where()) + show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED) + + show_vendor_versions() + + show_tags(options) + + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/download.py b/venv/Lib/site-packages/pip/_internal/commands/download.py new file mode 100644 index 000000000..233b7e983 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/download.py @@ -0,0 +1,140 @@ +import logging +import os +from optparse import Values +from typing import List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.req.req_tracker import get_requirement_tracker +from pip._internal.utils.misc import ensure_dir, normalize_path, write_output +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +class DownloadCommand(RequirementCommand): + """ + Download packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports downloading from "requirements files", which provide + an easy way to specify a whole environment to be downloaded. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.global_options()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + + self.cmd_opts.add_option( + "-d", + "--dest", + "--destination-dir", + "--destination-directory", + dest="download_dir", + metavar="dir", + default=os.curdir, + help="Download packages into .", + ) + + cmdoptions.add_target_python_options(self.cmd_opts) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + + options.ignore_installed = True + # editable doesn't really make sense for `pip download`, but the bowels + # of the RequirementSet code require that property. + options.editables = [] + + cmdoptions.check_dist_restriction(options) + + options.download_dir = normalize_path(options.download_dir) + ensure_dir(options.download_dir) + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + req_tracker = self.enter_context(get_requirement_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="download", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + session=session, + finder=finder, + download_dir=options.download_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + ignore_requires_python=options.ignore_requires_python, + py_version_info=options.python_version, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + downloaded: List[str] = [] + for req in requirement_set.requirements.values(): + if req.satisfied_by is None: + assert req.name is not None + preparer.save_linked_requirement(req) + downloaded.append(req.name) + if downloaded: + write_output("Successfully downloaded %s", " ".join(downloaded)) + + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/freeze.py b/venv/Lib/site-packages/pip/_internal/commands/freeze.py new file mode 100644 index 000000000..5fa6d39b2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/freeze.py @@ -0,0 +1,97 @@ +import sys +from optparse import Values +from typing import List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.operations.freeze import freeze +from pip._internal.utils.compat import stdlib_pkgs + +DEV_PKGS = {"pip", "setuptools", "distribute", "wheel"} + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + + usage = """ + %prog [options]""" + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help=( + "Use the order in the given requirements file and its " + "comments when generating output. This option can be " + "used multiple times." + ), + ) + self.cmd_opts.add_option( + "-l", + "--local", + dest="local", + action="store_true", + default=False, + help=( + "If in a virtualenv that has global access, do not output " + "globally-installed packages." + ), + ) + self.cmd_opts.add_option( + "--user", + dest="user", + action="store_true", + default=False, + help="Only output packages installed in user-site.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--all", + dest="freeze_all", + action="store_true", + help=( + "Do not skip these packages in the output:" + " {}".format(", ".join(DEV_PKGS)) + ), + ) + self.cmd_opts.add_option( + "--exclude-editable", + dest="exclude_editable", + action="store_true", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + if options.excludes: + skip.update(options.excludes) + + cmdoptions.check_list_path_option(options) + + for line in freeze( + requirement=options.requirements, + local_only=options.local, + user_only=options.user, + paths=options.path, + isolated=options.isolated_mode, + skip=skip, + exclude_editable=options.exclude_editable, + ): + sys.stdout.write(line + "\n") + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/hash.py b/venv/Lib/site-packages/pip/_internal/commands/hash.py new file mode 100644 index 000000000..042dac813 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/hash.py @@ -0,0 +1,59 @@ +import hashlib +import logging +import sys +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES +from pip._internal.utils.misc import read_chunks, write_output + +logger = logging.getLogger(__name__) + + +class HashCommand(Command): + """ + Compute a hash of a local package archive. + + These can be used with --hash in a requirements file to do repeatable + installs. + """ + + usage = "%prog [options] ..." + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-a", + "--algorithm", + dest="algorithm", + choices=STRONG_HASHES, + action="store", + default=FAVORITE_HASH, + help="The hash algorithm to use: one of {}".format( + ", ".join(STRONG_HASHES) + ), + ) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + write_output( + "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm) + ) + return SUCCESS + + +def _hash_of_file(path: str, algorithm: str) -> str: + """Return the hash digest of a file.""" + with open(path, "rb") as archive: + hash = hashlib.new(algorithm) + for chunk in read_chunks(archive): + hash.update(chunk) + return hash.hexdigest() diff --git a/venv/Lib/site-packages/pip/_internal/commands/help.py b/venv/Lib/site-packages/pip/_internal/commands/help.py new file mode 100644 index 000000000..62066318b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/help.py @@ -0,0 +1,41 @@ +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + + usage = """ + %prog """ + ignore_require_venv = True + + def run(self, options: Values, args: List[str]) -> int: + from pip._internal.commands import ( + commands_dict, + create_command, + get_similar_commands, + ) + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + command = create_command(cmd_name) + command.parser.print_help() + + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/index.py b/venv/Lib/site-packages/pip/_internal/commands/index.py new file mode 100644 index 000000000..9d8aae3b5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/index.py @@ -0,0 +1,139 @@ +import logging +from optparse import Values +from typing import Any, Iterable, List, Optional, Union + +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.commands.search import print_dist_installation_info +from pip._internal.exceptions import CommandError, DistributionNotFound, PipError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class IndexCommand(IndexGroupCommand): + """ + Inspect information available from package indexes. + """ + + usage = """ + %prog versions + """ + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "versions": self.get_available_package_versions, + } + + logger.warning( + "pip index is currently an experimental command. " + "It may be removed/changed in a future release " + "without prior warning." + ) + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to the index command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + use_deprecated_html5lib="html5lib" in options.deprecated_features_enabled, + ) + + def get_available_package_versions(self, options: Values, args: List[Any]) -> None: + if len(args) != 1: + raise CommandError("You need to specify exactly one argument") + + target_python = cmdoptions.make_target_python(options) + query = args[0] + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + versions: Iterable[Union[LegacyVersion, Version]] = ( + candidate.version for candidate in finder.find_all_candidates(query) + ) + + if not options.pre: + # Remove prereleases + versions = ( + version for version in versions if not version.is_prerelease + ) + versions = set(versions) + + if not versions: + raise DistributionNotFound( + "No matching distribution found for {}".format(query) + ) + + formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)] + latest = formatted_versions[0] + + write_output("{} ({})".format(query, latest)) + write_output("Available versions: {}".format(", ".join(formatted_versions))) + print_dist_installation_info(query, latest) diff --git a/venv/Lib/site-packages/pip/_internal/commands/install.py b/venv/Lib/site-packages/pip/_internal/commands/install.py new file mode 100644 index 000000000..34e4c2f84 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/install.py @@ -0,0 +1,771 @@ +import errno +import operator +import os +import shutil +import site +from optparse import SUPPRESS_HELP, Values +from typing import Iterable, List, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import ( + RequirementCommand, + warn_if_run_as_root, + with_cleanup, +) +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import CommandError, InstallationError +from pip._internal.locations import get_scheme +from pip._internal.metadata import get_environment +from pip._internal.models.format_control import FormatControl +from pip._internal.operations.check import ConflictDetails, check_install_conflicts +from pip._internal.req import install_given_reqs +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_tracker import get_requirement_tracker +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.distutils_args import parse_distutils_args +from pip._internal.utils.filesystem import test_writable_dir +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + ensure_dir, + get_pip_version, + protect_pip_from_modification_on_windows, + write_output, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) +from pip._internal.wheel_builder import ( + BinaryAllowedPredicate, + build, + should_build_for_install_command, +) + +logger = getLogger(__name__) + + +def get_check_binary_allowed(format_control: FormatControl) -> BinaryAllowedPredicate: + def check_binary_allowed(req: InstallRequirement) -> bool: + canonical_name = canonicalize_name(req.name or "") + allowed_formats = format_control.get_allowed_formats(canonical_name) + return "binary" in allowed_formats + + return check_binary_allowed + + +class InstallCommand(RequirementCommand): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.pre()) + + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option( + "-t", + "--target", + dest="target_dir", + metavar="dir", + default=None, + help=( + "Install packages into . " + "By default this will not replace existing files/folders in " + ". Use --upgrade to replace existing packages in " + "with new versions." + ), + ) + cmdoptions.add_target_python_options(self.cmd_opts) + + self.cmd_opts.add_option( + "--user", + dest="use_user_site", + action="store_true", + help=( + "Install to the Python user install directory for your " + "platform. Typically ~/.local/, or %APPDATA%\\Python on " + "Windows. (See the Python documentation for site.USER_BASE " + "for full details.)" + ), + ) + self.cmd_opts.add_option( + "--no-user", + dest="use_user_site", + action="store_false", + help=SUPPRESS_HELP, + ) + self.cmd_opts.add_option( + "--root", + dest="root_path", + metavar="dir", + default=None, + help="Install everything relative to this alternate root directory.", + ) + self.cmd_opts.add_option( + "--prefix", + dest="prefix_path", + metavar="dir", + default=None, + help=( + "Installation prefix where lib, bin and other top-level " + "folders are placed" + ), + ) + + self.cmd_opts.add_option(cmdoptions.src()) + + self.cmd_opts.add_option( + "-U", + "--upgrade", + dest="upgrade", + action="store_true", + help=( + "Upgrade all specified packages to the newest available " + "version. The handling of dependencies depends on the " + "upgrade-strategy used." + ), + ) + + self.cmd_opts.add_option( + "--upgrade-strategy", + dest="upgrade_strategy", + default="only-if-needed", + choices=["only-if-needed", "eager"], + help=( + "Determines how dependency upgrading should be handled " + "[default: %default]. " + '"eager" - dependencies are upgraded regardless of ' + "whether the currently installed version satisfies the " + "requirements of the upgraded package(s). " + '"only-if-needed" - are upgraded only when they do not ' + "satisfy the requirements of the upgraded package(s)." + ), + ) + + self.cmd_opts.add_option( + "--force-reinstall", + dest="force_reinstall", + action="store_true", + help="Reinstall all packages even if they are already up-to-date.", + ) + + self.cmd_opts.add_option( + "-I", + "--ignore-installed", + dest="ignore_installed", + action="store_true", + help=( + "Ignore the installed packages, overwriting them. " + "This can break your system if the existing package " + "is of a different version or was installed " + "with a different package manager!" + ), + ) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + + self.cmd_opts.add_option(cmdoptions.install_options()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile Python source files to bytecode", + ) + + self.cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile Python source files to bytecode", + ) + + self.cmd_opts.add_option( + "--no-warn-script-location", + action="store_false", + dest="warn_script_location", + default=True, + help="Do not warn when installing scripts outside PATH", + ) + self.cmd_opts.add_option( + "--no-warn-conflicts", + action="store_false", + dest="warn_about_conflicts", + default=True, + help="Do not warn about broken dependencies", + ) + + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + if options.use_user_site and options.target_dir is not None: + raise CommandError("Can not combine '--user' and '--target'") + + cmdoptions.check_install_build_global(options) + upgrade_strategy = "to-satisfy-only" + if options.upgrade: + upgrade_strategy = options.upgrade_strategy + + cmdoptions.check_dist_restriction(options, check_target=True) + + install_options = options.install_options or [] + + logger.verbose("Using %s", get_pip_version()) + options.use_user_site = decide_user_install( + options.use_user_site, + prefix_path=options.prefix_path, + target_dir=options.target_dir, + root_path=options.root_path, + isolated_mode=options.isolated_mode, + ) + + target_temp_dir: Optional[TempDirectory] = None + target_temp_dir_path: Optional[str] = None + if options.target_dir: + options.ignore_installed = True + options.target_dir = os.path.abspath(options.target_dir) + if ( + # fmt: off + os.path.exists(options.target_dir) and + not os.path.isdir(options.target_dir) + # fmt: on + ): + raise CommandError( + "Target path exists but is not a directory, will not continue." + ) + + # Create a target directory for using with the target option + target_temp_dir = TempDirectory(kind="target") + target_temp_dir_path = target_temp_dir.path + self.enter_context(target_temp_dir) + + global_options = options.global_options or [] + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + req_tracker = self.enter_context(get_requirement_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="install", + globally_managed=True, + ) + + try: + reqs = self.get_requirements(args, options, finder, session) + + # Only when installing is it permitted to use PEP 660. + # In other circumstances (pip wheel, pip download) we generate + # regular (i.e. non editable) metadata and wheels. + for req in reqs: + req.permit_editable_wheels = True + + reject_location_related_install_options(reqs, options.install_options) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + session=session, + finder=finder, + use_user_site=options.use_user_site, + verbosity=self.verbosity, + ) + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + use_user_site=options.use_user_site, + ignore_installed=options.ignore_installed, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + upgrade_strategy=upgrade_strategy, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve( + reqs, check_supported_wheels=not options.target_dir + ) + + try: + pip_req = requirement_set.get_requirement("pip") + except KeyError: + modifying_pip = False + else: + # If we're not replacing an already installed pip, + # we're not modifying it. + modifying_pip = pip_req.satisfied_by is None + protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) + + check_binary_allowed = get_check_binary_allowed(finder.format_control) + + reqs_to_build = [ + r + for r in requirement_set.requirements.values() + if should_build_for_install_command(r, check_binary_allowed) + ] + + _, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=True, + build_options=[], + global_options=[], + ) + + # If we're using PEP 517, we cannot do a legacy setup.py install + # so we fail here. + pep517_build_failure_names: List[str] = [ + r.name for r in build_failures if r.use_pep517 # type: ignore + ] + if pep517_build_failure_names: + raise InstallationError( + "Could not build wheels for {}, which is required to " + "install pyproject.toml-based projects".format( + ", ".join(pep517_build_failure_names) + ) + ) + + # For now, we just warn about failures building legacy + # requirements, as we'll fall through to a setup.py install for + # those. + for r in build_failures: + if not r.use_pep517: + r.legacy_install_reason = 8368 + + to_install = resolver.get_installation_order(requirement_set) + + # Check for conflicts in the package set we're installing. + conflicts: Optional[ConflictDetails] = None + should_warn_about_conflicts = ( + not options.ignore_dependencies and options.warn_about_conflicts + ) + if should_warn_about_conflicts: + conflicts = self._determine_conflicts(to_install) + + # Don't warn about script install locations if + # --target or --prefix has been specified + warn_script_location = options.warn_script_location + if options.target_dir or options.prefix_path: + warn_script_location = False + + installed = install_given_reqs( + to_install, + install_options, + global_options, + root=options.root_path, + home=target_temp_dir_path, + prefix=options.prefix_path, + warn_script_location=warn_script_location, + use_user_site=options.use_user_site, + pycompile=options.compile, + ) + + lib_locations = get_lib_location_guesses( + user=options.use_user_site, + home=target_temp_dir_path, + root=options.root_path, + prefix=options.prefix_path, + isolated=options.isolated_mode, + ) + env = get_environment(lib_locations) + + installed.sort(key=operator.attrgetter("name")) + items = [] + for result in installed: + item = result.name + try: + installed_dist = env.get_distribution(item) + if installed_dist is not None: + item = f"{item}-{installed_dist.version}" + except Exception: + pass + items.append(item) + + if conflicts is not None: + self._warn_about_conflicts( + conflicts, + resolver_variant=self.determine_resolver_variant(options), + ) + + installed_desc = " ".join(items) + if installed_desc: + write_output( + "Successfully installed %s", + installed_desc, + ) + except OSError as error: + show_traceback = self.verbosity >= 1 + + message = create_os_error_message( + error, + show_traceback, + options.use_user_site, + ) + logger.error(message, exc_info=show_traceback) # noqa + + return ERROR + + if options.target_dir: + assert target_temp_dir + self._handle_target_dir( + options.target_dir, target_temp_dir, options.upgrade + ) + + warn_if_run_as_root() + return SUCCESS + + def _handle_target_dir( + self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool + ) -> None: + ensure_dir(target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + scheme = get_scheme("", home=target_temp_dir.path) + purelib_dir = scheme.purelib + platlib_dir = scheme.platlib + data_dir = scheme.data + + if os.path.exists(purelib_dir): + lib_dir_list.append(purelib_dir) + if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: + lib_dir_list.append(platlib_dir) + if os.path.exists(data_dir): + lib_dir_list.append(data_dir) + + for lib_dir in lib_dir_list: + for item in os.listdir(lib_dir): + if lib_dir == data_dir: + ddir = os.path.join(data_dir, item) + if any(s.startswith(ddir) for s in lib_dir_list[:-1]): + continue + target_item_dir = os.path.join(target_dir, item) + if os.path.exists(target_item_dir): + if not upgrade: + logger.warning( + "Target directory %s already exists. Specify " + "--upgrade to force replacement.", + target_item_dir, + ) + continue + if os.path.islink(target_item_dir): + logger.warning( + "Target directory %s already exists and is " + "a link. pip will not automatically replace " + "links, please remove if replacement is " + "desired.", + target_item_dir, + ) + continue + if os.path.isdir(target_item_dir): + shutil.rmtree(target_item_dir) + else: + os.remove(target_item_dir) + + shutil.move(os.path.join(lib_dir, item), target_item_dir) + + def _determine_conflicts( + self, to_install: List[InstallRequirement] + ) -> Optional[ConflictDetails]: + try: + return check_install_conflicts(to_install) + except Exception: + logger.exception( + "Error while checking for conflicts. Please file an issue on " + "pip's issue tracker: https://github.com/pypa/pip/issues/new" + ) + return None + + def _warn_about_conflicts( + self, conflict_details: ConflictDetails, resolver_variant: str + ) -> None: + package_set, (missing, conflicting) = conflict_details + if not missing and not conflicting: + return + + parts: List[str] = [] + if resolver_variant == "legacy": + parts.append( + "pip's legacy dependency resolver does not consider dependency " + "conflicts when selecting packages. This behaviour is the " + "source of the following dependency conflicts." + ) + else: + assert resolver_variant == "2020-resolver" + parts.append( + "pip's dependency resolver does not currently take into account " + "all the packages that are installed. This behaviour is the " + "source of the following dependency conflicts." + ) + + # NOTE: There is some duplication here, with commands/check.py + for project_name in missing: + version = package_set[project_name][0] + for dependency in missing[project_name]: + message = ( + "{name} {version} requires {requirement}, " + "which is not installed." + ).format( + name=project_name, + version=version, + requirement=dependency[1], + ) + parts.append(message) + + for project_name in conflicting: + version = package_set[project_name][0] + for dep_name, dep_version, req in conflicting[project_name]: + message = ( + "{name} {version} requires {requirement}, but {you} have " + "{dep_name} {dep_version} which is incompatible." + ).format( + name=project_name, + version=version, + requirement=req, + dep_name=dep_name, + dep_version=dep_version, + you=("you" if resolver_variant == "2020-resolver" else "you'll"), + ) + parts.append(message) + + logger.critical("\n".join(parts)) + + +def get_lib_location_guesses( + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> List[str]: + scheme = get_scheme( + "", + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + return [scheme.purelib, scheme.platlib] + + +def site_packages_writable(root: Optional[str], isolated: bool) -> bool: + return all( + test_writable_dir(d) + for d in set(get_lib_location_guesses(root=root, isolated=isolated)) + ) + + +def decide_user_install( + use_user_site: Optional[bool], + prefix_path: Optional[str] = None, + target_dir: Optional[str] = None, + root_path: Optional[str] = None, + isolated_mode: bool = False, +) -> bool: + """Determine whether to do a user install based on the input options. + + If use_user_site is False, no additional checks are done. + If use_user_site is True, it is checked for compatibility with other + options. + If use_user_site is None, the default behaviour depends on the environment, + which is provided by the other arguments. + """ + # In some cases (config from tox), use_user_site can be set to an integer + # rather than a bool, which 'use_user_site is False' wouldn't catch. + if (use_user_site is not None) and (not use_user_site): + logger.debug("Non-user install by explicit request") + return False + + if use_user_site: + if prefix_path: + raise CommandError( + "Can not combine '--user' and '--prefix' as they imply " + "different installation locations" + ) + if virtualenv_no_global(): + raise InstallationError( + "Can not perform a '--user' install. User site-packages " + "are not visible in this virtualenv." + ) + logger.debug("User install by explicit request") + return True + + # If we are here, user installs have not been explicitly requested/avoided + assert use_user_site is None + + # user install incompatible with --prefix/--target + if prefix_path or target_dir: + logger.debug("Non-user install due to --prefix or --target option") + return False + + # If user installs are not enabled, choose a non-user install + if not site.ENABLE_USER_SITE: + logger.debug("Non-user install because user site-packages disabled") + return False + + # If we have permission for a non-user install, do that, + # otherwise do a user install. + if site_packages_writable(root=root_path, isolated=isolated_mode): + logger.debug("Non-user install because site-packages writeable") + return False + + logger.info( + "Defaulting to user installation because normal site-packages " + "is not writeable" + ) + return True + + +def reject_location_related_install_options( + requirements: List[InstallRequirement], options: Optional[List[str]] +) -> None: + """If any location-changing --install-option arguments were passed for + requirements or on the command-line, then show a deprecation warning. + """ + + def format_options(option_names: Iterable[str]) -> List[str]: + return ["--{}".format(name.replace("_", "-")) for name in option_names] + + offenders = [] + + for requirement in requirements: + install_options = requirement.install_options + location_options = parse_distutils_args(install_options) + if location_options: + offenders.append( + "{!r} from {}".format( + format_options(location_options.keys()), requirement + ) + ) + + if options: + location_options = parse_distutils_args(options) + if location_options: + offenders.append( + "{!r} from command line".format(format_options(location_options.keys())) + ) + + if not offenders: + return + + raise CommandError( + "Location-changing options found in --install-option: {}." + " This is unsupported, use pip-level options like --user," + " --prefix, --root, and --target instead.".format("; ".join(offenders)) + ) + + +def create_os_error_message( + error: OSError, show_traceback: bool, using_user_site: bool +) -> str: + """Format an error message for an OSError + + It may occur anytime during the execution of the install command. + """ + parts = [] + + # Mention the error if we are not going to show a traceback + parts.append("Could not install packages due to an OSError") + if not show_traceback: + parts.append(": ") + parts.append(str(error)) + else: + parts.append(".") + + # Spilt the error indication from a helper message (if any) + parts[-1] += "\n" + + # Suggest useful actions to the user: + # (1) using user site-packages or (2) verifying the permissions + if error.errno == errno.EACCES: + user_option_part = "Consider using the `--user` option" + permissions_part = "Check the permissions" + + if not running_under_virtualenv() and not using_user_site: + parts.extend( + [ + user_option_part, + " or ", + permissions_part.lower(), + ] + ) + else: + parts.append(permissions_part) + parts.append(".\n") + + # Suggest the user to enable Long Paths if path length is + # more than 260 + if ( + WINDOWS + and error.errno == errno.ENOENT + and error.filename + and len(error.filename) > 260 + ): + parts.append( + "HINT: This error might have occurred since " + "this system does not have Windows Long Path " + "support enabled. You can find information on " + "how to enable this at " + "https://pip.pypa.io/warnings/enable-long-paths\n" + ) + + return "".join(parts).strip() + "\n" diff --git a/venv/Lib/site-packages/pip/_internal/commands/list.py b/venv/Lib/site-packages/pip/_internal/commands/list.py new file mode 100644 index 000000000..57f05e008 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/list.py @@ -0,0 +1,361 @@ +import json +import logging +from optparse import Values +from typing import TYPE_CHECKING, Iterator, List, Optional, Sequence, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.compat import stdlib_pkgs +from pip._internal.utils.misc import tabulate, write_output + +if TYPE_CHECKING: + from pip._internal.metadata.base import DistributionVersion + + class _DistWithLatestInfo(BaseDistribution): + """Give the distribution object a couple of extra fields. + + These will be populated during ``get_outdated()``. This is dirty but + makes the rest of the code much cleaner. + """ + + latest_version: DistributionVersion + latest_filetype: str + + _ProcessedDists = Sequence[_DistWithLatestInfo] + + +logger = logging.getLogger(__name__) + + +class ListCommand(IndexGroupCommand): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + + ignore_require_venv = True + usage = """ + %prog [options]""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-o", + "--outdated", + action="store_true", + default=False, + help="List outdated packages", + ) + self.cmd_opts.add_option( + "-u", + "--uptodate", + action="store_true", + default=False, + help="List uptodate packages", + ) + self.cmd_opts.add_option( + "-e", + "--editable", + action="store_true", + default=False, + help="List editable projects.", + ) + self.cmd_opts.add_option( + "-l", + "--local", + action="store_true", + default=False, + help=( + "If in a virtualenv that has global access, do not list " + "globally-installed packages." + ), + ) + self.cmd_opts.add_option( + "--user", + dest="user", + action="store_true", + default=False, + help="Only output packages installed in user-site.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="columns", + choices=("columns", "freeze", "json"), + help="Select the output format among: columns (default), freeze, or json", + ) + + self.cmd_opts.add_option( + "--not-required", + action="store_true", + dest="not_required", + help="List packages that are not dependencies of installed packages.", + ) + + self.cmd_opts.add_option( + "--exclude-editable", + action="store_false", + dest="include_editable", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option( + "--include-editable", + action="store_true", + dest="include_editable", + help="Include editable package from output.", + default=True, + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + def _build_package_finder( + self, options: Values, session: PipSession + ) -> PackageFinder: + """ + Create a package finder appropriate to this list command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + use_deprecated_html5lib="html5lib" in options.deprecated_features_enabled, + ) + + def run(self, options: Values, args: List[str]) -> int: + if options.outdated and options.uptodate: + raise CommandError("Options --outdated and --uptodate cannot be combined.") + + cmdoptions.check_list_path_option(options) + + skip = set(stdlib_pkgs) + if options.excludes: + skip.update(canonicalize_name(n) for n in options.excludes) + + packages: "_ProcessedDists" = [ + cast("_DistWithLatestInfo", d) + for d in get_environment(options.path).iter_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + include_editables=options.include_editable, + skip=skip, + ) + ] + + # get_not_required must be called firstly in order to find and + # filter out all dependencies correctly. Otherwise a package + # can't be identified as requirement because some parent packages + # could be filtered out before. + if options.not_required: + packages = self.get_not_required(packages, options) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + self.output_package_listing(packages, options) + return SUCCESS + + def get_outdated( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version > dist.version + ] + + def get_uptodate( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version == dist.version + ] + + def get_not_required( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + dep_keys = { + canonicalize_name(dep.name) + for dist in packages + for dep in (dist.iter_dependencies() or ()) + } + + # Create a set to remove duplicate packages, and cast it to a list + # to keep the return type consistent with get_outdated and + # get_uptodate + return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys}) + + def iter_packages_latest_infos( + self, packages: "_ProcessedDists", options: Values + ) -> Iterator["_DistWithLatestInfo"]: + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + + def latest_info( + dist: "_DistWithLatestInfo", + ) -> Optional["_DistWithLatestInfo"]: + all_candidates = finder.find_all_candidates(dist.canonical_name) + if not options.pre: + # Remove prereleases + all_candidates = [ + candidate + for candidate in all_candidates + if not candidate.version.is_prerelease + ] + + evaluator = finder.make_candidate_evaluator( + project_name=dist.canonical_name, + ) + best_candidate = evaluator.sort_best_candidate(all_candidates) + if best_candidate is None: + return None + + remote_version = best_candidate.version + if best_candidate.link.is_wheel: + typ = "wheel" + else: + typ = "sdist" + dist.latest_version = remote_version + dist.latest_filetype = typ + return dist + + for dist in map(latest_info, packages): + if dist is not None: + yield dist + + def output_package_listing( + self, packages: "_ProcessedDists", options: Values + ) -> None: + packages = sorted( + packages, + key=lambda dist: dist.canonical_name, + ) + if options.list_format == "columns" and packages: + data, header = format_for_columns(packages, options) + self.output_package_listing_columns(data, header) + elif options.list_format == "freeze": + for dist in packages: + if options.verbose >= 1: + write_output( + "%s==%s (%s)", dist.raw_name, dist.version, dist.location + ) + else: + write_output("%s==%s", dist.raw_name, dist.version) + elif options.list_format == "json": + write_output(format_for_json(packages, options)) + + def output_package_listing_columns( + self, data: List[List[str]], header: List[str] + ) -> None: + # insert the header first: we need to know the size of column names + if len(data) > 0: + data.insert(0, header) + + pkg_strings, sizes = tabulate(data) + + # Create and add a separator. + if len(data) > 0: + pkg_strings.insert(1, " ".join(map(lambda x: "-" * x, sizes))) + + for val in pkg_strings: + write_output(val) + + +def format_for_columns( + pkgs: "_ProcessedDists", options: Values +) -> Tuple[List[List[str]], List[str]]: + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + header = ["Package", "Version"] + + running_outdated = options.outdated + if running_outdated: + header.extend(["Latest", "Type"]) + + has_editables = any(x.editable for x in pkgs) + if has_editables: + header.append("Editable project location") + + if options.verbose >= 1: + header.append("Location") + if options.verbose >= 1: + header.append("Installer") + + data = [] + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.raw_name, str(proj.version)] + + if running_outdated: + row.append(str(proj.latest_version)) + row.append(proj.latest_filetype) + + if has_editables: + row.append(proj.editable_project_location or "") + + if options.verbose >= 1: + row.append(proj.location or "") + if options.verbose >= 1: + row.append(proj.installer) + + data.append(row) + + return data, header + + +def format_for_json(packages: "_ProcessedDists", options: Values) -> str: + data = [] + for dist in packages: + info = { + "name": dist.raw_name, + "version": str(dist.version), + } + if options.verbose >= 1: + info["location"] = dist.location or "" + info["installer"] = dist.installer + if options.outdated: + info["latest_version"] = str(dist.latest_version) + info["latest_filetype"] = dist.latest_filetype + editable_project_location = dist.editable_project_location + if editable_project_location: + info["editable_project_location"] = editable_project_location + data.append(info) + return json.dumps(data) diff --git a/venv/Lib/site-packages/pip/_internal/commands/search.py b/venv/Lib/site-packages/pip/_internal/commands/search.py new file mode 100644 index 000000000..03ed925b2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/search.py @@ -0,0 +1,174 @@ +import logging +import shutil +import sys +import textwrap +import xmlrpc.client +from collections import OrderedDict +from optparse import Values +from typing import TYPE_CHECKING, Dict, List, Optional + +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin +from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.metadata import get_default_environment +from pip._internal.models.index import PyPI +from pip._internal.network.xmlrpc import PipXmlrpcTransport +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import write_output + +if TYPE_CHECKING: + from typing import TypedDict + + class TransformedHit(TypedDict): + name: str + summary: str + versions: List[str] + + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command, SessionCommandMixin): + """Search for PyPI packages whose name or summary contains .""" + + usage = """ + %prog [options] """ + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-i", + "--index", + dest="index", + metavar="URL", + default=PyPI.pypi_url, + help="Base URL of Python Package Index (default %default)", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + raise CommandError("Missing required argument (search query).") + query = args + pypi_hits = self.search(query, options) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = shutil.get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query: List[str], options: Values) -> List[Dict[str, str]]: + index_url = options.index + + session = self.get_default_session(options) + + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc.client.ServerProxy(index_url, transport) + try: + hits = pypi.search({"name": query, "summary": query}, "or") + except xmlrpc.client.Fault as fault: + message = "XMLRPC request failed [code: {code}]\n{string}".format( + code=fault.faultCode, + string=fault.faultString, + ) + raise CommandError(message) + assert isinstance(hits, list) + return hits + + +def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]: + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages: Dict[str, "TransformedHit"] = OrderedDict() + for hit in hits: + name = hit["name"] + summary = hit["summary"] + version = hit["version"] + + if name not in packages.keys(): + packages[name] = { + "name": name, + "summary": summary, + "versions": [version], + } + else: + packages[name]["versions"].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]["versions"]): + packages[name]["summary"] = summary + + return list(packages.values()) + + +def print_dist_installation_info(name: str, latest: str) -> None: + env = get_default_environment() + dist = env.get_distribution(name) + if dist is not None: + with indent_log(): + if dist.version == latest: + write_output("INSTALLED: %s (latest)", dist.version) + else: + write_output("INSTALLED: %s", dist.version) + if parse_version(latest).pre: + write_output( + "LATEST: %s (pre-release; install" + " with `pip install --pre`)", + latest, + ) + else: + write_output("LATEST: %s", latest) + + +def print_results( + hits: List["TransformedHit"], + name_column_width: Optional[int] = None, + terminal_width: Optional[int] = None, +) -> None: + if not hits: + return + if name_column_width is None: + name_column_width = ( + max( + [ + len(hit["name"]) + len(highest_version(hit.get("versions", ["-"]))) + for hit in hits + ] + ) + + 4 + ) + + for hit in hits: + name = hit["name"] + summary = hit["summary"] or "" + latest = highest_version(hit.get("versions", ["-"])) + if terminal_width is not None: + target_width = terminal_width - name_column_width - 5 + if target_width > 10: + # wrap and indent summary to fit terminal + summary_lines = textwrap.wrap(summary, target_width) + summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines) + + name_latest = f"{name} ({latest})" + line = f"{name_latest:{name_column_width}} - {summary}" + try: + write_output(line) + print_dist_installation_info(name, latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions: List[str]) -> str: + return max(versions, key=parse_version) diff --git a/venv/Lib/site-packages/pip/_internal/commands/show.py b/venv/Lib/site-packages/pip/_internal/commands/show.py new file mode 100644 index 000000000..d5540d68b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/show.py @@ -0,0 +1,178 @@ +import logging +from optparse import Values +from typing import Iterator, List, NamedTuple, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """ + Show information about one or more installed packages. + + The output is in RFC-compliant mail header format. + """ + + usage = """ + %prog [options] ...""" + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-f", + "--files", + dest="files", + action="store_true", + default=False, + help="Show the full list of installed files for each package.", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + logger.warning("ERROR: Please provide a package name or names.") + return ERROR + query = args + + results = search_packages_info(query) + if not print_results( + results, list_files=options.files, verbose=options.verbose + ): + return ERROR + return SUCCESS + + +class _PackageInfo(NamedTuple): + name: str + version: str + location: str + requires: List[str] + required_by: List[str] + installer: str + metadata_version: str + classifiers: List[str] + summary: str + homepage: str + author: str + author_email: str + license: str + entry_points: List[str] + files: Optional[List[str]] + + +def search_packages_info(query: List[str]) -> Iterator[_PackageInfo]: + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + env = get_default_environment() + + installed = {dist.canonical_name: dist for dist in env.iter_distributions()} + query_names = [canonicalize_name(name) for name in query] + missing = sorted( + [name for name, pkg in zip(query, query_names) if pkg not in installed] + ) + if missing: + logger.warning("Package(s) not found: %s", ", ".join(missing)) + + def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: + return ( + dist.metadata["Name"] or "UNKNOWN" + for dist in installed.values() + if current_dist.canonical_name + in {canonicalize_name(d.name) for d in dist.iter_dependencies()} + ) + + for query_name in query_names: + try: + dist = installed[query_name] + except KeyError: + continue + + requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower) + required_by = sorted(_get_requiring_packages(dist), key=str.lower) + + try: + entry_points_text = dist.read_text("entry_points.txt") + entry_points = entry_points_text.splitlines(keepends=False) + except FileNotFoundError: + entry_points = [] + + files_iter = dist.iter_declared_entries() + if files_iter is None: + files: Optional[List[str]] = None + else: + files = sorted(files_iter) + + metadata = dist.metadata + + yield _PackageInfo( + name=dist.raw_name, + version=str(dist.version), + location=dist.location or "", + requires=requires, + required_by=required_by, + installer=dist.installer, + metadata_version=dist.metadata_version or "", + classifiers=metadata.get_all("Classifier", []), + summary=metadata.get("Summary", ""), + homepage=metadata.get("Home-page", ""), + author=metadata.get("Author", ""), + author_email=metadata.get("Author-email", ""), + license=metadata.get("License", ""), + entry_points=entry_points, + files=files, + ) + + +def print_results( + distributions: Iterator[_PackageInfo], + list_files: bool, + verbose: bool, +) -> bool: + """ + Print the information from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + write_output("---") + + write_output("Name: %s", dist.name) + write_output("Version: %s", dist.version) + write_output("Summary: %s", dist.summary) + write_output("Home-page: %s", dist.homepage) + write_output("Author: %s", dist.author) + write_output("Author-email: %s", dist.author_email) + write_output("License: %s", dist.license) + write_output("Location: %s", dist.location) + write_output("Requires: %s", ", ".join(dist.requires)) + write_output("Required-by: %s", ", ".join(dist.required_by)) + + if verbose: + write_output("Metadata-Version: %s", dist.metadata_version) + write_output("Installer: %s", dist.installer) + write_output("Classifiers:") + for classifier in dist.classifiers: + write_output(" %s", classifier) + write_output("Entry-points:") + for entry in dist.entry_points: + write_output(" %s", entry.strip()) + if list_files: + write_output("Files:") + if dist.files is None: + write_output("Cannot locate RECORD or installed-files.txt") + else: + for line in dist.files: + write_output(" %s", line.strip()) + return results_printed diff --git a/venv/Lib/site-packages/pip/_internal/commands/uninstall.py b/venv/Lib/site-packages/pip/_internal/commands/uninstall.py new file mode 100644 index 000000000..bb9e8e6a3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/uninstall.py @@ -0,0 +1,105 @@ +import logging +from optparse import Values +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin, warn_if_run_as_root +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import InstallationError +from pip._internal.req import parse_requirements +from pip._internal.req.constructors import ( + install_req_from_line, + install_req_from_parsed_requirement, +) +from pip._internal.utils.misc import protect_pip_from_modification_on_windows + +logger = logging.getLogger(__name__) + + +class UninstallCommand(Command, SessionCommandMixin): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + + usage = """ + %prog [options] ... + %prog [options] -r ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help=( + "Uninstall all the packages listed in the given requirements " + "file. This option can be used multiple times." + ), + ) + self.cmd_opts.add_option( + "-y", + "--yes", + dest="yes", + action="store_true", + help="Don't ask for confirmation of uninstall deletions.", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + session = self.get_default_session(options) + + reqs_to_uninstall = {} + for name in args: + req = install_req_from_line( + name, + isolated=options.isolated_mode, + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + else: + logger.warning( + "Invalid requirement: %r ignored -" + " the uninstall command expects named" + " requirements.", + name, + ) + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, options=options, session=session + ): + req = install_req_from_parsed_requirement( + parsed_req, isolated=options.isolated_mode + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + if not reqs_to_uninstall: + raise InstallationError( + f"You must give at least one requirement to {self.name} (see " + f'"pip help {self.name}")' + ) + + protect_pip_from_modification_on_windows( + modifying_pip="pip" in reqs_to_uninstall + ) + + for req in reqs_to_uninstall.values(): + uninstall_pathset = req.uninstall( + auto_confirm=options.yes, + verbose=self.verbosity > 0, + ) + if uninstall_pathset: + uninstall_pathset.commit() + + warn_if_run_as_root() + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/commands/wheel.py b/venv/Lib/site-packages/pip/_internal/commands/wheel.py new file mode 100644 index 000000000..d5b20dc9f --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/commands/wheel.py @@ -0,0 +1,178 @@ +import logging +import os +import shutil +from optparse import Values +from typing import List + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_tracker import get_requirement_tracker +from pip._internal.utils.misc import ensure_dir, normalize_path +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.wheel_builder import build, should_build_for_wheel_command + +logger = logging.getLogger(__name__) + + +class WheelCommand(RequirementCommand): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not + recompiling your software during every install. For more details, see the + wheel docs: https://wheel.readthedocs.io/en/latest/ + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel + package to build individual wheels. + + """ + + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + + self.cmd_opts.add_option( + "-w", + "--wheel-dir", + dest="wheel_dir", + metavar="dir", + default=os.curdir, + help=( + "Build wheels into , where the default is the " + "current working directory." + ), + ) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + + self.cmd_opts.add_option( + "--no-verify", + dest="no_verify", + action="store_true", + default=False, + help="Don't verify if built wheel is valid.", + ) + + self.cmd_opts.add_option(cmdoptions.build_options()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + cmdoptions.check_install_build_global(options) + + session = self.get_default_session(options) + + finder = self._build_package_finder(options, session) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + options.wheel_dir = normalize_path(options.wheel_dir) + ensure_dir(options.wheel_dir) + + req_tracker = self.enter_context(get_requirement_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="wheel", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + session=session, + finder=finder, + download_dir=options.wheel_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + reqs_to_build: List[InstallRequirement] = [] + for req in requirement_set.requirements.values(): + if req.is_wheel: + preparer.save_linked_requirement(req) + elif should_build_for_wheel_command(req): + reqs_to_build.append(req) + + # build wheels + build_successes, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=(not options.no_verify), + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + for req in build_successes: + assert req.link and req.link.is_wheel + assert req.local_file_path + # copy from cache to target directory + try: + shutil.copy(req.local_file_path, options.wheel_dir) + except OSError as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + build_failures.append(req) + if len(build_failures) != 0: + raise CommandError("Failed to build one or more wheels") + + return SUCCESS diff --git a/venv/Lib/site-packages/pip/_internal/configuration.py b/venv/Lib/site-packages/pip/_internal/configuration.py new file mode 100644 index 000000000..a8092d1ae --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/configuration.py @@ -0,0 +1,366 @@ +"""Configuration management setup + +Some terminology: +- name + As written in config files. +- value + Value associated with a name +- key + Name combined with it's section (section.name) +- variant + A single word describing where the configuration key-value pair came from +""" + +import configparser +import locale +import os +import sys +from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple + +from pip._internal.exceptions import ( + ConfigurationError, + ConfigurationFileCouldNotBeLoaded, +) +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ensure_dir, enum + +RawConfigParser = configparser.RawConfigParser # Shorthand +Kind = NewType("Kind", str) + +CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf" +ENV_NAMES_IGNORED = "version", "help" + +# The kinds of configurations there are. +kinds = enum( + USER="user", # User Specific + GLOBAL="global", # System Wide + SITE="site", # [Virtual] Environment Specific + ENV="env", # from PIP_CONFIG_FILE + ENV_VAR="env-var", # from Environment Variables +) +OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR +VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE + +logger = getLogger(__name__) + + +# NOTE: Maybe use the optionx attribute to normalize keynames. +def _normalize_name(name: str) -> str: + """Make a name consistent regardless of source (environment or file)""" + name = name.lower().replace("_", "-") + if name.startswith("--"): + name = name[2:] # only prefer long opts + return name + + +def _disassemble_key(name: str) -> List[str]: + if "." not in name: + error_message = ( + "Key does not contain dot separated section and key. " + "Perhaps you wanted to use 'global.{}' instead?" + ).format(name) + raise ConfigurationError(error_message) + return name.split(".", 1) + + +def get_configuration_files() -> Dict[Kind, List[str]]: + global_config_files = [ + os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip") + ] + + site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) + legacy_config_file = os.path.join( + os.path.expanduser("~"), + "pip" if WINDOWS else ".pip", + CONFIG_BASENAME, + ) + new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME) + return { + kinds.GLOBAL: global_config_files, + kinds.SITE: [site_config_file], + kinds.USER: [legacy_config_file, new_config_file], + } + + +class Configuration: + """Handles management of configuration. + + Provides an interface to accessing and managing configuration files. + + This class converts provides an API that takes "section.key-name" style + keys and stores the value associated with it as "key-name" under the + section "section". + + This allows for a clean interface wherein the both the section and the + key-name are preserved in an easy to manage form in the configuration files + and the data stored is also nice. + """ + + def __init__(self, isolated: bool, load_only: Optional[Kind] = None) -> None: + super().__init__() + + if load_only is not None and load_only not in VALID_LOAD_ONLY: + raise ConfigurationError( + "Got invalid value for load_only - should be one of {}".format( + ", ".join(map(repr, VALID_LOAD_ONLY)) + ) + ) + self.isolated = isolated + self.load_only = load_only + + # Because we keep track of where we got the data from + self._parsers: Dict[Kind, List[Tuple[str, RawConfigParser]]] = { + variant: [] for variant in OVERRIDE_ORDER + } + self._config: Dict[Kind, Dict[str, Any]] = { + variant: {} for variant in OVERRIDE_ORDER + } + self._modified_parsers: List[Tuple[str, RawConfigParser]] = [] + + def load(self) -> None: + """Loads configuration from configuration files and environment""" + self._load_config_files() + if not self.isolated: + self._load_environment_vars() + + def get_file_to_edit(self) -> Optional[str]: + """Returns the file with highest priority in configuration""" + assert self.load_only is not None, "Need to be specified a file to be editing" + + try: + return self._get_parser_to_modify()[0] + except IndexError: + return None + + def items(self) -> Iterable[Tuple[str, Any]]: + """Returns key-value pairs like dict.items() representing the loaded + configuration + """ + return self._dictionary.items() + + def get_value(self, key: str) -> Any: + """Get a value from the configuration.""" + try: + return self._dictionary[key] + except KeyError: + raise ConfigurationError(f"No such key - {key}") + + def set_value(self, key: str, value: Any) -> None: + """Modify a value in the configuration.""" + self._ensure_have_load_only() + + assert self.load_only + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + + # Modify the parser and the configuration + if not parser.has_section(section): + parser.add_section(section) + parser.set(section, name, value) + + self._config[self.load_only][key] = value + self._mark_as_modified(fname, parser) + + def unset_value(self, key: str) -> None: + """Unset a value in the configuration.""" + self._ensure_have_load_only() + + assert self.load_only + if key not in self._config[self.load_only]: + raise ConfigurationError(f"No such key - {key}") + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + if not ( + parser.has_section(section) and parser.remove_option(section, name) + ): + # The option was not removed. + raise ConfigurationError( + "Fatal Internal error [id=1]. Please report as a bug." + ) + + # The section may be empty after the option was removed. + if not parser.items(section): + parser.remove_section(section) + self._mark_as_modified(fname, parser) + + del self._config[self.load_only][key] + + def save(self) -> None: + """Save the current in-memory state.""" + self._ensure_have_load_only() + + for fname, parser in self._modified_parsers: + logger.info("Writing to %s", fname) + + # Ensure directory exists. + ensure_dir(os.path.dirname(fname)) + + with open(fname, "w") as f: + parser.write(f) + + # + # Private routines + # + + def _ensure_have_load_only(self) -> None: + if self.load_only is None: + raise ConfigurationError("Needed a specific file to be modifying.") + logger.debug("Will be working with %s variant only", self.load_only) + + @property + def _dictionary(self) -> Dict[str, Any]: + """A dictionary representing the loaded configuration.""" + # NOTE: Dictionaries are not populated if not loaded. So, conditionals + # are not needed here. + retval = {} + + for variant in OVERRIDE_ORDER: + retval.update(self._config[variant]) + + return retval + + def _load_config_files(self) -> None: + """Loads configuration from configuration files""" + config_files = dict(self.iter_config_files()) + if config_files[kinds.ENV][0:1] == [os.devnull]: + logger.debug( + "Skipping loading configuration files due to " + "environment's PIP_CONFIG_FILE being os.devnull" + ) + return + + for variant, files in config_files.items(): + for fname in files: + # If there's specific variant set in `load_only`, load only + # that variant, not the others. + if self.load_only is not None and variant != self.load_only: + logger.debug("Skipping file '%s' (variant: %s)", fname, variant) + continue + + parser = self._load_file(variant, fname) + + # Keeping track of the parsers used + self._parsers[variant].append((fname, parser)) + + def _load_file(self, variant: Kind, fname: str) -> RawConfigParser: + logger.verbose("For variant '%s', will try loading '%s'", variant, fname) + parser = self._construct_parser(fname) + + for section in parser.sections(): + items = parser.items(section) + self._config[variant].update(self._normalized_keys(section, items)) + + return parser + + def _construct_parser(self, fname: str) -> RawConfigParser: + parser = configparser.RawConfigParser() + # If there is no such file, don't bother reading it but create the + # parser anyway, to hold the data. + # Doing this is useful when modifying and saving files, where we don't + # need to construct a parser. + if os.path.exists(fname): + locale_encoding = locale.getpreferredencoding(False) + try: + parser.read(fname, encoding=locale_encoding) + except UnicodeDecodeError: + # See https://github.com/pypa/pip/issues/4963 + raise ConfigurationFileCouldNotBeLoaded( + reason=f"contains invalid {locale_encoding} characters", + fname=fname, + ) + except configparser.Error as error: + # See https://github.com/pypa/pip/issues/4893 + raise ConfigurationFileCouldNotBeLoaded(error=error) + return parser + + def _load_environment_vars(self) -> None: + """Loads configuration from environment variables""" + self._config[kinds.ENV_VAR].update( + self._normalized_keys(":env:", self.get_environ_vars()) + ) + + def _normalized_keys( + self, section: str, items: Iterable[Tuple[str, Any]] + ) -> Dict[str, Any]: + """Normalizes items to construct a dictionary with normalized keys. + + This routine is where the names become keys and are made the same + regardless of source - configuration files or environment. + """ + normalized = {} + for name, val in items: + key = section + "." + _normalize_name(name) + normalized[key] = val + return normalized + + def get_environ_vars(self) -> Iterable[Tuple[str, str]]: + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if key.startswith("PIP_"): + name = key[4:].lower() + if name not in ENV_NAMES_IGNORED: + yield name, val + + # XXX: This is patched in the tests. + def iter_config_files(self) -> Iterable[Tuple[Kind, List[str]]]: + """Yields variant and configuration files associated with it. + + This should be treated like items of a dictionary. + """ + # SMELL: Move the conditions out of this function + + # environment variables have the lowest priority + config_file = os.environ.get("PIP_CONFIG_FILE", None) + if config_file is not None: + yield kinds.ENV, [config_file] + else: + yield kinds.ENV, [] + + config_files = get_configuration_files() + + # at the base we have any global configuration + yield kinds.GLOBAL, config_files[kinds.GLOBAL] + + # per-user configuration next + should_load_user_config = not self.isolated and not ( + config_file and os.path.exists(config_file) + ) + if should_load_user_config: + # The legacy config file is overridden by the new config file + yield kinds.USER, config_files[kinds.USER] + + # finally virtualenv configuration first trumping others + yield kinds.SITE, config_files[kinds.SITE] + + def get_values_in_config(self, variant: Kind) -> Dict[str, Any]: + """Get values present in a config file""" + return self._config[variant] + + def _get_parser_to_modify(self) -> Tuple[str, RawConfigParser]: + # Determine which parser to modify + assert self.load_only + parsers = self._parsers[self.load_only] + if not parsers: + # This should not happen if everything works correctly. + raise ConfigurationError( + "Fatal Internal error [id=2]. Please report as a bug." + ) + + # Use the highest priority parser. + return parsers[-1] + + # XXX: This is patched in the tests. + def _mark_as_modified(self, fname: str, parser: RawConfigParser) -> None: + file_parser_tuple = (fname, parser) + if file_parser_tuple not in self._modified_parsers: + self._modified_parsers.append(file_parser_tuple) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self._dictionary!r})" diff --git a/venv/Lib/site-packages/pip/_internal/distributions/__init__.py b/venv/Lib/site-packages/pip/_internal/distributions/__init__.py new file mode 100644 index 000000000..9a89a838b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/distributions/__init__.py @@ -0,0 +1,21 @@ +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.distributions.sdist import SourceDistribution +from pip._internal.distributions.wheel import WheelDistribution +from pip._internal.req.req_install import InstallRequirement + + +def make_distribution_for_install_requirement( + install_req: InstallRequirement, +) -> AbstractDistribution: + """Returns a Distribution for the given InstallRequirement""" + # Editable requirements will always be source distributions. They use the + # legacy logic until we create a modern standard for them. + if install_req.editable: + return SourceDistribution(install_req) + + # If it's a wheel, it's a WheelDistribution + if install_req.is_wheel: + return WheelDistribution(install_req) + + # Otherwise, a SourceDistribution + return SourceDistribution(install_req) diff --git a/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc0b1c19f3561c6f867e95395966d8a45aa37d5a GIT binary patch literal 801 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/distributions/base.py b/venv/Lib/site-packages/pip/_internal/distributions/base.py new file mode 100644 index 000000000..149fff55d --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/distributions/base.py @@ -0,0 +1,36 @@ +import abc + +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata.base import BaseDistribution +from pip._internal.req import InstallRequirement + + +class AbstractDistribution(metaclass=abc.ABCMeta): + """A base class for handling installable artifacts. + + The requirements for anything installable are as follows: + + - we must be able to determine the requirement name + (or we can't correctly handle the non-upgrade case). + + - for packages with setup requirements, we must also be able + to determine their requirements without installing additional + packages (for the same reason as run-time dependencies) + + - we must be able to create a Distribution object exposing the + above metadata. + """ + + def __init__(self, req: InstallRequirement) -> None: + super().__init__() + self.req = req + + @abc.abstractmethod + def get_metadata_distribution(self) -> BaseDistribution: + raise NotImplementedError() + + @abc.abstractmethod + def prepare_distribution_metadata( + self, finder: PackageFinder, build_isolation: bool + ) -> None: + raise NotImplementedError() diff --git a/venv/Lib/site-packages/pip/_internal/distributions/installed.py b/venv/Lib/site-packages/pip/_internal/distributions/installed.py new file mode 100644 index 000000000..be5962f98 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/distributions/installed.py @@ -0,0 +1,20 @@ +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution + + +class InstalledDistribution(AbstractDistribution): + """Represents an installed package. + + This does not need any preparation as the required information has already + been computed. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + assert self.req.satisfied_by is not None, "not actually installed" + return self.req.satisfied_by + + def prepare_distribution_metadata( + self, finder: PackageFinder, build_isolation: bool + ) -> None: + pass diff --git a/venv/Lib/site-packages/pip/_internal/distributions/sdist.py b/venv/Lib/site-packages/pip/_internal/distributions/sdist.py new file mode 100644 index 000000000..bdaf4033c --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/distributions/sdist.py @@ -0,0 +1,127 @@ +import logging +from typing import Iterable, Set, Tuple + +from pip._internal.build_env import BuildEnvironment +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.exceptions import InstallationError +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +class SourceDistribution(AbstractDistribution): + """Represents a source distribution. + + The preparation step for these needs metadata for the packages to be + generated, either using PEP 517 or using the legacy `setup.py egg_info`. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + return self.req.get_dist() + + def prepare_distribution_metadata( + self, finder: PackageFinder, build_isolation: bool + ) -> None: + # Load pyproject.toml, to determine whether PEP 517 is to be used + self.req.load_pyproject_toml() + + # Set up the build isolation, if this requirement should be isolated + should_isolate = self.req.use_pep517 and build_isolation + if should_isolate: + # Setup an isolated environment and install the build backend static + # requirements in it. + self._prepare_build_backend(finder) + # Check that if the requirement is editable, it either supports PEP 660 or + # has a setup.py or a setup.cfg. This cannot be done earlier because we need + # to setup the build backend to verify it supports build_editable, nor can + # it be done later, because we want to avoid installing build requirements + # needlessly. Doing it here also works around setuptools generating + # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory + # without setup.py nor setup.cfg. + self.req.isolated_editable_sanity_check() + # Install the dynamic build requirements. + self._install_build_reqs(finder) + + self.req.prepare_metadata() + + def _prepare_build_backend(self, finder: PackageFinder) -> None: + # Isolate in a BuildEnvironment and install the build-time + # requirements. + pyproject_requires = self.req.pyproject_requires + assert pyproject_requires is not None + + self.req.build_env = BuildEnvironment() + self.req.build_env.install_requirements( + finder, pyproject_requires, "overlay", kind="build dependencies" + ) + conflicting, missing = self.req.build_env.check_requirements( + self.req.requirements_to_check + ) + if conflicting: + self._raise_conflicts("PEP 517/518 supported requirements", conflicting) + if missing: + logger.warning( + "Missing build requirements in pyproject.toml for %s.", + self.req, + ) + logger.warning( + "The project does not specify a build backend, and " + "pip cannot fall back to setuptools without %s.", + " and ".join(map(repr, sorted(missing))), + ) + + def _get_build_requires_wheel(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message("Getting requirements to build wheel") + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_wheel() + + def _get_build_requires_editable(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message( + "Getting requirements to build editable" + ) + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_editable() + + def _install_build_reqs(self, finder: PackageFinder) -> None: + # Install any extra build dependencies that the backend requests. + # This must be done in a second pass, as the pyproject.toml + # dependencies must be installed before we can call the backend. + if ( + self.req.editable + and self.req.permit_editable_wheels + and self.req.supports_pyproject_editable() + ): + build_reqs = self._get_build_requires_editable() + else: + build_reqs = self._get_build_requires_wheel() + conflicting, missing = self.req.build_env.check_requirements(build_reqs) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + self.req.build_env.install_requirements( + finder, missing, "normal", kind="backend dependencies" + ) + + def _raise_conflicts( + self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]] + ) -> None: + format_string = ( + "Some build dependencies for {requirement} " + "conflict with {conflicting_with}: {description}." + ) + error_message = format_string.format( + requirement=self.req, + conflicting_with=conflicting_with, + description=", ".join( + f"{installed} is incompatible with {wanted}" + for installed, wanted in sorted(conflicting_reqs) + ), + ) + raise InstallationError(error_message) diff --git a/venv/Lib/site-packages/pip/_internal/distributions/wheel.py b/venv/Lib/site-packages/pip/_internal/distributions/wheel.py new file mode 100644 index 000000000..340b0f3c5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/distributions/wheel.py @@ -0,0 +1,31 @@ +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) + + +class WheelDistribution(AbstractDistribution): + """Represents a wheel distribution. + + This does not need any preparation as wheels can be directly unpacked. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + """Loads the metadata from the wheel file into memory and returns a + Distribution that uses it, not relying on the wheel file or + requirement. + """ + assert self.req.local_file_path, "Set as part of preparation during download" + assert self.req.name, "Wheels are never unnamed" + wheel = FilesystemWheel(self.req.local_file_path) + return get_wheel_distribution(wheel, canonicalize_name(self.req.name)) + + def prepare_distribution_metadata( + self, finder: PackageFinder, build_isolation: bool + ) -> None: + pass diff --git a/venv/Lib/site-packages/pip/_internal/exceptions.py b/venv/Lib/site-packages/pip/_internal/exceptions.py new file mode 100644 index 000000000..97b9612a1 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/exceptions.py @@ -0,0 +1,658 @@ +"""Exceptions used throughout package. + +This module MUST NOT try to import from anything within `pip._internal` to +operate. This is expected to be importable from any/all files within the +subpackage and, thus, should not depend on them. +""" + +import configparser +import re +from itertools import chain, groupby, repeat +from typing import TYPE_CHECKING, Dict, List, Optional, Union + +from pip._vendor.requests.models import Request, Response +from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult +from pip._vendor.rich.markup import escape +from pip._vendor.rich.text import Text + +if TYPE_CHECKING: + from hashlib import _Hash + from typing import Literal + + from pip._internal.metadata import BaseDistribution + from pip._internal.req.req_install import InstallRequirement + + +# +# Scaffolding +# +def _is_kebab_case(s: str) -> bool: + return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None + + +def _prefix_with_indent( + s: Union[Text, str], + console: Console, + *, + prefix: str, + indent: str, +) -> Text: + if isinstance(s, Text): + text = s + else: + text = console.render_str(s) + + return console.render_str(prefix, overflow="ignore") + console.render_str( + f"\n{indent}", overflow="ignore" + ).join(text.split(allow_blank=True)) + + +class PipError(Exception): + """The base pip error.""" + + +class DiagnosticPipError(PipError): + """An error, that presents diagnostic information to the user. + + This contains a bunch of logic, to enable pretty presentation of our error + messages. Each error gets a unique reference. Each error can also include + additional context, a hint and/or a note -- which are presented with the + main error message in a consistent style. + + This is adapted from the error output styling in `sphinx-theme-builder`. + """ + + reference: str + + def __init__( + self, + *, + kind: 'Literal["error", "warning"]' = "error", + reference: Optional[str] = None, + message: Union[str, Text], + context: Optional[Union[str, Text]], + hint_stmt: Optional[Union[str, Text]], + note_stmt: Optional[Union[str, Text]] = None, + link: Optional[str] = None, + ) -> None: + # Ensure a proper reference is provided. + if reference is None: + assert hasattr(self, "reference"), "error reference not provided!" + reference = self.reference + assert _is_kebab_case(reference), "error reference must be kebab-case!" + + self.kind = kind + self.reference = reference + + self.message = message + self.context = context + + self.note_stmt = note_stmt + self.hint_stmt = hint_stmt + + self.link = link + + super().__init__(f"<{self.__class__.__name__}: {self.reference}>") + + def __repr__(self) -> str: + return ( + f"<{self.__class__.__name__}(" + f"reference={self.reference!r}, " + f"message={self.message!r}, " + f"context={self.context!r}, " + f"note_stmt={self.note_stmt!r}, " + f"hint_stmt={self.hint_stmt!r}" + ")>" + ) + + def __rich_console__( + self, + console: Console, + options: ConsoleOptions, + ) -> RenderResult: + colour = "red" if self.kind == "error" else "yellow" + + yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]" + yield "" + + if not options.ascii_only: + # Present the main message, with relevant context indented. + if self.context is not None: + yield _prefix_with_indent( + self.message, + console, + prefix=f"[{colour}]×[/] ", + indent=f"[{colour}]│[/] ", + ) + yield _prefix_with_indent( + self.context, + console, + prefix=f"[{colour}]╰─>[/] ", + indent=f"[{colour}] [/] ", + ) + else: + yield _prefix_with_indent( + self.message, + console, + prefix="[red]×[/] ", + indent=" ", + ) + else: + yield self.message + if self.context is not None: + yield "" + yield self.context + + if self.note_stmt is not None or self.hint_stmt is not None: + yield "" + + if self.note_stmt is not None: + yield _prefix_with_indent( + self.note_stmt, + console, + prefix="[magenta bold]note[/]: ", + indent=" ", + ) + if self.hint_stmt is not None: + yield _prefix_with_indent( + self.hint_stmt, + console, + prefix="[cyan bold]hint[/]: ", + indent=" ", + ) + + if self.link is not None: + yield "" + yield f"Link: {self.link}" + + +# +# Actual Errors +# +class ConfigurationError(PipError): + """General exception in configuration""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class MissingPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml has `build-system`, but no `build-system.requires`.""" + + reference = "missing-pyproject-build-system-requires" + + def __init__(self, *, package: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid pyproject.toml file.\n" + "The [build-system] table is missing the mandatory `requires` key." + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class InvalidPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml an invalid `build-system.requires`.""" + + reference = "invalid-pyproject-build-system-requires" + + def __init__(self, *, package: str, reason: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid `build-system.requires` key in " + f"pyproject.toml.\n{reason}" + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class NoneMetadataError(PipError): + """Raised when accessing a Distribution's "METADATA" or "PKG-INFO". + + This signifies an inconsistency, when the Distribution claims to have + the metadata file (if not, raise ``FileNotFoundError`` instead), but is + not actually able to produce its content. This may be due to permission + errors. + """ + + def __init__( + self, + dist: "BaseDistribution", + metadata_name: str, + ) -> None: + """ + :param dist: A Distribution object. + :param metadata_name: The name of the metadata being accessed + (can be "METADATA" or "PKG-INFO"). + """ + self.dist = dist + self.metadata_name = metadata_name + + def __str__(self) -> str: + # Use `dist` in the error message because its stringification + # includes more information, like the version and location. + return "None {} metadata found for distribution: {}".format( + self.metadata_name, + self.dist, + ) + + +class UserInstallationInvalid(InstallationError): + """A --user install is requested on an environment without user site.""" + + def __str__(self) -> str: + return "User base directory is not specified" + + +class InvalidSchemeCombination(InstallationError): + def __str__(self) -> str: + before = ", ".join(str(a) for a in self.args[:-1]) + return f"Cannot set {before} and {self.args[-1]} together" + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class RequirementsFileParseError(InstallationError): + """Raised when a general error occurs parsing a requirements file line.""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed.""" + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class NetworkConnectionError(PipError): + """HTTP connection error""" + + def __init__( + self, error_msg: str, response: Response = None, request: Request = None + ) -> None: + """ + Initialize NetworkConnectionError with `request` and `response` + objects. + """ + self.response = response + self.request = request + self.error_msg = error_msg + if ( + self.response is not None + and not self.request + and hasattr(response, "request") + ): + self.request = self.response.request + super().__init__(error_msg, response, request) + + def __str__(self) -> str: + return str(self.error_msg) + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class InvalidWheel(InstallationError): + """Invalid (e.g. corrupt) wheel.""" + + def __init__(self, location: str, name: str): + self.location = location + self.name = name + + def __str__(self) -> str: + return f"Wheel '{self.name}' located at {self.location} is invalid." + + +class MetadataInconsistent(InstallationError): + """Built metadata contains inconsistent information. + + This is raised when the metadata contains values (e.g. name and version) + that do not match the information previously obtained from sdist filename + or user-supplied ``#egg=`` value. + """ + + def __init__( + self, ireq: "InstallRequirement", field: str, f_val: str, m_val: str + ) -> None: + self.ireq = ireq + self.field = field + self.f_val = f_val + self.m_val = m_val + + def __str__(self) -> str: + template = ( + "Requested {} has inconsistent {}: " + "filename has {!r}, but metadata has {!r}" + ) + return template.format(self.ireq, self.field, self.f_val, self.m_val) + + +class LegacyInstallFailure(DiagnosticPipError): + """Error occurred while executing `setup.py install`""" + + reference = "legacy-install-failure" + + def __init__(self, package_details: str) -> None: + super().__init__( + message="Encountered error while trying to install package.", + context=package_details, + hint_stmt="See above for output from the failure.", + note_stmt="This is an issue with the package mentioned above, not pip.", + ) + + +class InstallationSubprocessError(DiagnosticPipError, InstallationError): + """A subprocess call failed.""" + + reference = "subprocess-exited-with-error" + + def __init__( + self, + *, + command_description: str, + exit_code: int, + output_lines: Optional[List[str]], + ) -> None: + if output_lines is None: + output_prompt = Text("See above for output.") + else: + output_prompt = ( + Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n") + + Text("".join(output_lines)) + + Text.from_markup(R"[red]\[end of output][/]") + ) + + super().__init__( + message=( + f"[green]{escape(command_description)}[/] did not run successfully.\n" + f"exit code: {exit_code}" + ), + context=output_prompt, + hint_stmt=None, + note_stmt=( + "This error originates from a subprocess, and is likely not a " + "problem with pip." + ), + ) + + self.command_description = command_description + self.exit_code = exit_code + + def __str__(self) -> str: + return f"{self.command_description} exited with {self.exit_code}" + + +class MetadataGenerationFailed(InstallationSubprocessError, InstallationError): + reference = "metadata-generation-failed" + + def __init__( + self, + *, + package_details: str, + ) -> None: + super(InstallationSubprocessError, self).__init__( + message="Encountered error while generating package metadata.", + context=escape(package_details), + hint_stmt="See above for details.", + note_stmt="This is an issue with the package mentioned above, not pip.", + ) + + def __str__(self) -> str: + return "metadata generation failed" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self) -> None: + self.errors: List["HashError"] = [] + + def append(self, error: "HashError") -> None: + self.errors.append(error) + + def __str__(self) -> str: + lines = [] + self.errors.sort(key=lambda e: e.order) + for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): + lines.append(cls.head) + lines.extend(e.body() for e in errors_of_cls) + if lines: + return "\n".join(lines) + return "" + + def __bool__(self) -> bool: + return bool(self.errors) + + +class HashError(InstallationError): + """ + A failure to verify a package against known-good hashes + + :cvar order: An int sorting hash exception classes by difficulty of + recovery (lower being harder), so the user doesn't bother fretting + about unpinned packages when he has deeper issues, like VCS + dependencies, to deal with. Also keeps error reports in a + deterministic order. + :cvar head: A section heading for display above potentially many + exceptions of this kind + :ivar req: The InstallRequirement that triggered this error. This is + pasted on after the exception is instantiated, because it's not + typically available earlier. + + """ + + req: Optional["InstallRequirement"] = None + head = "" + order: int = -1 + + def body(self) -> str: + """Return a summary of me for display under the heading. + + This default implementation simply prints a description of the + triggering requirement. + + :param req: The InstallRequirement that provoked this error, with + its link already populated by the resolver's _populate_link(). + + """ + return f" {self._requirement_name()}" + + def __str__(self) -> str: + return f"{self.head}\n{self.body()}" + + def _requirement_name(self) -> str: + """Return a description of the requirement that triggered me. + + This default implementation returns long description of the req, with + line numbers + + """ + return str(self.req) if self.req else "unknown package" + + +class VcsHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 0 + head = ( + "Can't verify hashes for these requirements because we don't " + "have a way to hash version control repositories:" + ) + + +class DirectoryUrlHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 1 + head = ( + "Can't verify hashes for these file:// requirements because they " + "point to directories:" + ) + + +class HashMissing(HashError): + """A hash was needed for a requirement but is absent.""" + + order = 2 + head = ( + "Hashes are required in --require-hashes mode, but they are " + "missing from some requirements. Here is a list of those " + "requirements along with the hashes their downloaded archives " + "actually had. Add lines like these to your requirements files to " + "prevent tampering. (If you did not enable --require-hashes " + "manually, note that it turns on automatically when any package " + "has a hash.)" + ) + + def __init__(self, gotten_hash: str) -> None: + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self) -> str: + # Dodge circular import. + from pip._internal.utils.hashes import FAVORITE_HASH + + package = None + if self.req: + # In the case of URL-based requirements, display the original URL + # seen in the requirements file rather than the package name, + # so the output can be directly copied into the requirements file. + package = ( + self.req.original_link + if self.req.original_link + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, "req", None) + ) + return " {} --hash={}:{}".format( + package or "unknown package", FAVORITE_HASH, self.gotten_hash + ) + + +class HashUnpinned(HashError): + """A requirement had a hash specified but was not pinned to a specific + version.""" + + order = 3 + head = ( + "In --require-hashes mode, all requirements must have their " + "versions pinned with ==. These do not:" + ) + + +class HashMismatch(HashError): + """ + Distribution file hash values don't match. + + :ivar package_name: The name of the package that triggered the hash + mismatch. Feel free to write to this after the exception is raise to + improve its error message. + + """ + + order = 4 + head = ( + "THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS " + "FILE. If you have updated the package versions, please update " + "the hashes. Otherwise, examine the package contents carefully; " + "someone may have tampered with them." + ) + + def __init__(self, allowed: Dict[str, List[str]], gots: Dict[str, "_Hash"]) -> None: + """ + :param allowed: A dict of algorithm names pointing to lists of allowed + hex digests + :param gots: A dict of algorithm names pointing to hashes we + actually got from the files under suspicion + """ + self.allowed = allowed + self.gots = gots + + def body(self) -> str: + return " {}:\n{}".format(self._requirement_name(), self._hash_comparison()) + + def _hash_comparison(self) -> str: + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + + def hash_then_or(hash_name: str) -> "chain[str]": + # For now, all the decent hashes have 6-char names, so we can get + # away with hard-coding space literals. + return chain([hash_name], repeat(" or")) + + lines: List[str] = [] + for hash_name, expecteds in self.allowed.items(): + prefix = hash_then_or(hash_name) + lines.extend( + (" Expected {} {}".format(next(prefix), e)) for e in expecteds + ) + lines.append( + " Got {}\n".format(self.gots[hash_name].hexdigest()) + ) + return "\n".join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" + + +class ConfigurationFileCouldNotBeLoaded(ConfigurationError): + """When there are errors while loading a configuration file""" + + def __init__( + self, + reason: str = "could not be loaded", + fname: Optional[str] = None, + error: Optional[configparser.Error] = None, + ) -> None: + super().__init__(error) + self.reason = reason + self.fname = fname + self.error = error + + def __str__(self) -> str: + if self.fname is not None: + message_part = f" in {self.fname}." + else: + assert self.error is not None + message_part = f".\n{self.error}\n" + return f"Configuration file {self.reason}{message_part}" diff --git a/venv/Lib/site-packages/pip/_internal/index/__init__.py b/venv/Lib/site-packages/pip/_internal/index/__init__.py new file mode 100644 index 000000000..7a17b7b3b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/index/__init__.py @@ -0,0 +1,2 @@ +"""Index interaction code +""" diff --git a/venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..296564b88a63a66b1e51c03b3848975a528b9166 GIT binary patch literal 228 zcmYjLF^U2~5S%r+MKCrKQv=;xLOq1cL5W(ev{;Iw1U^?3#3iBEEVaYobORW0 z9^maBQkWWSWRtPvO_bCowv*I)6R_-BN8VIYcAT=4N>yzCNTu>GYge3f;vcEJys1X&ikBunyrzMd2aBQnS+88U1N!_k*X^fY~8(T|T8xy68#?g+}Kmv(|Dxxh}`GuUgOcyqf&S4dmE3H9&0>adR*>@>Q6MD zEIldpe0^VIe`&wehwD>~1Em8}FVvrE94sA_`bhmyW4bgg^SPK( z(s;J?tlW>)ztDKD^c?D2{PFr18_$=XZ@f@?q4A~CmyAp>uD*wTZpGeaN;5{LX$D^| z%>?%P(cs0~M(J2kSbk~w`0~r8SAy-qY%sfE?#z@<_!Ggbzb)7q%-?gvYJ`+o$?Q$^)>&gq{Z?N`iIam zx1nX)Ka7^wgWURg|LGvN{MFlL>4N_Z-Z&Cm#0(tgS^o>@GoS2p7CU&({~}u6@ShK` z_hjdQh0Ogz0*(EEhUq*hPz|I3}ExN|5ETa=6V|= zANOBI|9AXXe8O~Fz)>v!gntsPr9iizl9lOaj(^%ebIZDEl)i>h&-$|%bry46!rfQ= zS8?}hP{bVX4w?QX|6H)&e=XRJHJ>8x{5h!0_(ddn_--G5i`bx~%z z1Q^WwZ=k*08|4wad5~`fJALBa@!#~{LXXRs_ig_j%==ET1M^mJU-G|(`>$bDSA6qg zX6oym*YopBf!Cot@ zx~gmCu+>)8AlyGSo&N#F!rYV*=g-W)cJ6#dg@MAI^Jb;q4#KJ7cx3*a^C!!*XHL$( zdUoz~?9Nu|^~#lc5L+i|)hKq)MuF1z=W1aT7hh{fynU^*vQld<#`(EQBk=Q;Img8Os!j)Dt4A3Kg zA&AuKNu^o}<6Jx^HT0RB3!)n>h3z(**e-@kpIC$fdJJC-Dyq74vD#V*aGO70Te%p7 zAtyHCF;%IBL3yF2%3)NA+MIT@7MA%&?K&RR>YUwOsnpaB^o%D|;8&_qxzdi7$_uL1 zD7RG|FJ-S+!yg!c>Qpu!pRF|gnqP^6@DzHSuPg>}o~yYi7>Em3+O@i$-~;cv=T$3e z0ZnlhgT;;tqPA*QIa>N>qGI8i#T9-LMU+`KPGsKQwq|rQ>*npudbVraHq?%8CbGK5 zO#`H6T+iU%Ff&HxV&+;_NGaP{JlASn^{`>@&Do1ySX~MlLFj?7B2d^H7tT%R^B(>H zZma=BC3F{|o4?_OgC5?WYc)Z4B*Q=j`$DhT0)?XIv<%QOpPHGQvej-ZHqIsU#CE-P zBT#W3z*bRsqZTd2*?IsHP!Yl31ygokTQ zKX~tO!V}<*mDPAlS=L^F3{+`` zYBT_}ab z0}i#QTvmthqMAkla<#&szR+*^*ocS9V$^ zRIdu4BIM@9_bo9A`$XA^oY}xi6~q`?{W&I%L%(kXN>C+ z;}qS^7V5!!(P7F#%|D+MHclRAJ{jtDm;?Fb^lHL5y9mMf1oo+(WFe5rB{UQ}jUZZT z`CzXZJ`}7AaC>Ntx0VChO_@`d^{B6+bLgTd+C`&iSohQ`xT)eA_@jV2jw>vn=o3GH z2#KlpJb!*}DyyEub4978o@dctL2nsq77yOQmEais#uf+;Evl;&faxDsX5(Uy@DvIP z!*!7SZR3)?X0Bz|tTlVh>4Fij8)`ht-pu?o5Wj47Grs9(KQh;Hk=@PRG>lB-=-&kO z|NLUm^u3CA=H$yKyab3ucp@7QdJycMhSyJu{rU4f>_f_?NUvP4)I_n0L>`=&LRLiS z{}cTjBgA5RDT-FY*y7JTbsO|}>qZ$$tfn9`Lz0pMr9;(guh0&NUEGE%^;)DcV38!$ z4h$wlFy)G*R^&&upHn!^AgZ^jv9(fxG`FF>)oSc6sLCQmb!?GCHlUmw9d8>Tx|E0B z!6TuiNymkJDVnZPFx6MlI)MHx8hYrzfSV{2fs1b%%jQi(jYQclq@Ztn1Zfyq>$YzK z$#|-z<8lr}0J-ejzi9dnNWqNUF5W}mA^qE>$(5^20Ddo5VK0S1x-hl30(Ih1XL+Yj z&TCrGs(OGH65gMuaR#9f!afSMwWfjqV?giCXdU~^w0Bn2C-tsZhh7f7upO?{s+J*w`0{Bxk3bn^hy|uUq zeQo=}mG+`~i2Yt-(PzW#1~xp;M}46x95!BtUeGcg_B zJ9pg)H)omZEe^!R4QN#I8#V7NuJ8zoZbohQ!EvxJw@0)+U~BHA@P&R|GksVed;;+c zm+2z74g6$vUObVK36&tAzf`$S;$DS3t+s?1YfaKXg+@FLQW(pL&JCy4moaagt1eMQ zMRNddwz^o03nH=-tp!EHwTqUE9XzQt!p&gWC16Qs)CPQ_Nx#kQ@=Jlcx*gan%U0o`~U=Y z*sd#(UruS+MIIPrKng-!bQ%9!Ky=kMfjM854_SdF^X|J+?^>|`+h)jh5*n500R2rDLibo-07E~G7;2BJ(&T?HaH9)Iz zuHBRh1apBwVs3bYQtVL;LY;R zS$A*aO(Sy+T4#NzYYBCkodcV2BJf;kDbXL4Sz2I{Zq!jM2pX4L5`@R&uz|rI*8{&S zN(Hy@lEv)Zg--DhLI^5qwd!GPqeHD3JBV$;{EF>1epPHOw`$F)oWMoZ`AS|B+CsZo z6|(L7#WorgH@AH!D2rpd|-vm>+4*&31l8VEbCnS^^0peno+_ z(5Ag69G6I?QxNgNdlkw~=#>R;AO5wfkgYvc0U1b*1KYV?r^N_aT(49i%*B}A`^1r_ z_a2l9X@{|`)uz5^BcgbSGttZvGi-xINCbi*u!l`W`h;`R7Z3Df0Cphx93BaEFG5I?!#x@OUsFw{3V#%Q3mNLlMO z;60VH1CbmTeHlxcHkKz1q{ef~krZiUK5hS_q-F6zp=k zJR-svztk`noif*%K!CGyh)yzG$?(w1D$v&K3`^^3rFk{*5nIYvTL>?TofVI!eapIU zJfgb+1(gudSV!Bq1mOlW=724-ni$GJ@So#j$`|!M3(;?axuKQSWCC>)PhyK0+RR=% z%T>%41!X?e=3fGiAK{<e^0R@BQwi4}!l{IVyWE25=lx;axe|F8i6_KIU<~~{K%Rtt=u;zh?9z^7 za}o}u;!6Km=Osi$RSZ_ng!We?;(;I_0+JUq>M$O_SQxL;5z%`m{e!R6&&nf3yI$&> zASOY&aVUHV%n&A>hwr!4UH~w*g;NJ~0~bgz$s+fl5@DIzXTNE-iip60%CT^iS3&i9 zxmKL7VTFhk^Tfbns7x<#F9twFOIG|BQQx%U*eRETYvuAJ7tNXX7@db6uw?cdkf3;{ z56%K^uu=q<7+FZyg@EZ&C0y#S1%`*LWs{&l7?l0W<(=t53J->z?g=48bf|B#cnrnd z)X?VO8N;x#)4IZlH*7p;DD{`wltqMF{T060Ux(D_4yq4PY~ea6blgnd7`Mi=()u}i zrXoL%D`Y&eN6&C!K(`2-1Xf_n`4vOjq-F{m7so0TwG_9=G^L>%` zr*UjWYnx_>SVCfvinfzTR(f*xHR9@Bk4IS44XKDZ=v65r=<~>M=`he1S~Gh4uLi47 z-B(t<`!N+fxONjJuJ)SJQDvyh6lRy<{vjgH>a@%>AdS2iU-V8@>S2(0R6L^0A*2%4 zIze2N{uGfgryvZ43?2ha?<;Gz65>Qul=)D27^h+zxY(qAz##ExY0D?E6O6lXl6Q27rNnaGtw z_nTbz;HtCgFK}_>X7!6GuySrdR{pW6SN;Tcikn9}(F}ISw zkAU%z5QW&rLv_{GaL|hqRwBXcxR%XHL#$F@`nP&3`qa8PnxYZ-xI7{wNP+g;nY+Zna*+K#UMCIr>B9X^looX$6dv_;OOY}AWF=n(O0 zEvWkvZ%KkEiNOJG3_UWTr-eD9m@?MWQ7mBqb(!600l^cJco7UX!GMGuNX252 z;i;IJ>Sx#@bl4}xZFGd75@>yeJ#B!@nN0XNy5pSHq48xJ&S#F32YH%u$9vZ{8I$`{ z^*xSD-XCBo(i|}_Sns0pQ*=NJRNps^lQ65#0Bb%3CCv`1a|Gr<4J*jv0Pang*f<8H zOL|*7p6CN(+g#4AJlVx*5^64-)GaW!hq`c5K@VBb1x#(<0A0Lr?Laptba8-lAl#`# zAOD}|f-dY_$8JXphh9+M#pdA35)5&X*d-0gL`q}pZ}W+@5Cp#Z6;>TT096DUJ2{P= zP%sH|S};gxO2ib-lH%)np!Zq(RTlTd(k;a9g?LaFI z`vsUKL%s_%6vdM2?7NW0{&;%8Gnhqqs+D>RZY9N!FeiM}d4bmk0En=C46B)|(ydPa zST}La;tF@8kVE&39J(7_ggI~k4|>7@JZZtKGyol8ZQ?Nr5~d6`Bhkh5j;@x*mNYMl zE>DH9+!>&mL)w=-!lOFb@A;b;ue_s90Fan9!m3aFh00n0C z_1KbZM99Gsz|6ho!D(b*a15MwNsk|AED0LR8W8^{ zn8ZvtD95Hr@SzVNq&(aYmB>aBBa&RP8Owu$O1z$HBx;c>MJGvjNbQ-Pw=Ua*1`0y{hj$$LzA^`?|FA`vo^wLX!vBev9128ZA2sf}`_TrETEX|&du(B}k z{dy$*t%Sw%l1wuU4jWN_2a|X7S%wA|!#-dH#A2@o!HPCUbV`vO)k-9Ow37*eS|Whcgm&@eN;vW6s1KE zXDU0#WBD=gIHNQYi$r8U1gSoav4jpc2;;wpHds?a#j*@ZlIdfTc>YT%*&;{Blq{X? zgIc0Tym1!iIk8P`9u7ET^uKt`;tDUI;CcF0Q|*M3gkuJUhZ@fP(o?MrPPMj+;1jov z8^aqW-q=TFyPieN5h|B4Ts})St|}NgHY(Wb`>eTgVu{@=Zc|-jo8=?j5Zo*~{!KRj z7K{6xYK$%cq3{hPwG12kdBTAXz&L^yE-veyYfhl-?AZj5O)n1E6$AsZDxe_9y9Vrl z0)o|IHwajYy#qbqmlA)jzrb|uTy|{HDvNELd?87q&xyi>{|Ftv!zEL26naN6oz2Kg zfizXvBm>lM;6=^z!tUfuHNrxK!9Qk=lc+DT=+EBIvmzILm@a{GVA6gvH|+{{i3z~y zC_{Cz#k`^^bNc?NX#y+C5(Jq^EIB&8JP75XF&vt#CIi5!^Te#E2p$VA1jrqfgP|wF z8SjbEJLH8|Ym!e2l4ov^dJ_dA0b-5(6E^%di~d#!NaU6z_#~vLu*ysm_+{?P!E@Jk zj4?y~4yyCwO%0%%sAjL;7E%$;6AT)RRPsn9Vt$DwsK$Ew784Bykn<({=(A{wR;`Li zJLo&Z2C*yTtxanmMJD3aKp)$4>3^52F5(r0BE=FG+xU+9T{I1>n?%D))?F}#V+ndU zg3)`^K>8COP;M)muB4;_b4hIOQ`i@Sg!s!hD zbuHfkU!RYLmhfiv!2et7l2C!>t=Eq}D@emnCWxTSyQTYFaTCeY$L zW9+SAbt4l!(nX%rvgdF42$6)T@wv`R{d^D-*8VB4Q9}|mEZ}Dl*pV2%4_yc%dl zwJ3SEGv2-=|8CzW#$)PX5SRi*W;$nQb@mTa5TGE*tu#XMa|Mw;1pNjM{E>W0?^H6J z+ADN>ZvI}L3^cT{Wr7bG>yl2C z1nwnaltOHJ9(`I(oR}p*z(gDS@IU&o_>(8gr`I5&@NU=t$u^gi-h3!LEl6s>W- zpS`W~5{ZcbzeRydQ`XHg?quB?x7@4_Nyz99PKXqSVHIBNMd2^(9I?VPe8Q!@Ca)0Xt^wWFX=J8?C?Q|s_&!cj|fKU z(R^l%$D(Ze+_tE%j^hfyi6Y&WZ{WyGT!+ABmL{A6M#OQ@5afnjd@RLhLxJn(14PAr zelkRlANc~Md@zg%K_M8SQ-O#oy7MZI4G7Qc1wpQk{Pw9>E34=m=|IO7S|APYB4D8>4thL>=CQFzzDq6Mf15 zU@$(^$J|izd@W65OazDo1e*xk&{vl!DLf<*A3nEy{G-#kDKwbBm8_uuVUMSuCw>Zf zBQAvU^$Wghz~?Uy_?!Udf;Jq;eG0AUVO*UxS7O6Hn07S@BS_qa5P9G-qrWAdKo6 zI6h}Wus%M|b^d8DERlq45>=?vx-ROxbVeem?(ie2r70@=v555L&HJ12-b!LEc(=CL zY(el-p&UBYY#kB^cp5mpWiZMj8DbzTL;~74-br-AhA*6wU~+%{&cs;`&aN_QAjb74 z#=(Km1xbKnCgimP1;VG9cXMkvg@VCuNN7`>8+|rwNFW2TXLI^#twjcDARaop7&MVT zr;a_GQiA#ZWTvxkkP`G^eE-;__ZDK*zlT+*-$w!Kzej6Rd1U6K5-T3VCljio=|x0X z?55R)nb7kQ-hP>=tw*zaGn;H>%$(sx{}LmZS7ZbNF<;9k|g zL!S}uaxW^y0vt`~gK@*UYgzfMWZ4?dU4&84>Y%MNaX%OgU<1+_h>xMeGFF- zzk;%O47q?|fHbe54Dqs9Yl3J04Ts5ss8HvSI&LEfJ;2+4i-I4f{E(c8vx1E2n*UoE zgC>+=eVV`5d3umqHz~RM$chI-LH!YCnaa+qAK-UR{a2Lgzp?lqECyF~2CGtkjP}os zMozehOFr>q-L~p3$*CoT7fxhJctZ2sQHi zSNSaE6JsVe^6C${$Sv`3YSrLrJp8)Cu~FdjlV1@z@eamRdh%E2f{I-eI}+3iwbW#= zCN9*%lTDu1`$!OsbNr+MA|bXc{K4Vgb0%UemUFpR*d>DEGZkwzDAV>rWqt#kSKno1*m5!FuWw zd}@HiZ@77@it=BF^?r{velMa;a+=NRKeAw~O#_ZS%=9Xt$=qJr3-Y33N= zHzmTKzXLwBtvme|#{3JPn%;ylnKhk$d-0CwO|b&h-^Wl>RULPHhfDYq7V9hoy`Qr7 z&rrlBvTK=Br#uKO)d%OUF`qEFNX?S5d@65HsiG6DZ9_B2R1~jCgn>W#p2Zc$gvm z~y~4I77FSW=%OePAfFRDF zJw5mOg_E-{Up%QAeEf4PR#|+5#Rn`tWbq3ueu>5RSo|6bVOfURbqM5lSra2jq#k+n ze#{%YNA+ja$H2gu@Vh9ijBD{5rNMs%gciPFj1}>D7rvb2o&Lul#RM!+oXndzna7jK z?AY*lZY)1(O^!_-nH(D5HtrUSliBe}a}-$@_fn2`to)tguCc;+ZgSGxx!XW}m-&eG f8MO7iJmg0{ksmwq=CGx6;Upg}e|PMqar^%OvJ~Os literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eff7efaf3099387780c05c36808253c2788f4b95 GIT binary patch literal 28122 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 Optional[str]: + """Look for VCS schemes in the URL. + + Returns the matched VCS scheme, or None if there's no match. + """ + for scheme in vcs.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in "+:": + return scheme + return None + + +class _NotHTML(Exception): + def __init__(self, content_type: str, request_desc: str) -> None: + super().__init__(content_type, request_desc) + self.content_type = content_type + self.request_desc = request_desc + + +def _ensure_html_header(response: Response) -> None: + """Check the Content-Type header to ensure the response contains HTML. + + Raises `_NotHTML` if the content type is not text/html. + """ + content_type = response.headers.get("Content-Type", "") + if not content_type.lower().startswith("text/html"): + raise _NotHTML(content_type, response.request.method) + + +class _NotHTTP(Exception): + pass + + +def _ensure_html_response(url: str, session: PipSession) -> None: + """Send a HEAD request to the URL, and ensure the response contains HTML. + + Raises `_NotHTTP` if the URL is not available for a HEAD request, or + `_NotHTML` if the content type is not text/html. + """ + scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url) + if scheme not in {"http", "https"}: + raise _NotHTTP() + + resp = session.head(url, allow_redirects=True) + raise_for_status(resp) + + _ensure_html_header(resp) + + +def _get_html_response(url: str, session: PipSession) -> Response: + """Access an HTML page with GET, and return the response. + + This consists of three parts: + + 1. If the URL looks suspiciously like an archive, send a HEAD first to + check the Content-Type is HTML, to avoid downloading a large file. + Raise `_NotHTTP` if the content type cannot be determined, or + `_NotHTML` if it is not HTML. + 2. Actually perform the request. Raise HTTP exceptions on network failures. + 3. Check the Content-Type header to make sure we got HTML, and raise + `_NotHTML` otherwise. + """ + if is_archive_file(Link(url).filename): + _ensure_html_response(url, session=session) + + logger.debug("Getting page %s", redact_auth_from_url(url)) + + resp = session.get( + url, + headers={ + "Accept": "text/html", + # We don't want to blindly returned cached data for + # /simple/, because authors generally expecting that + # twine upload && pip install will function, but if + # they've done a pip install in the last ~10 minutes + # it won't. Thus by setting this to zero we will not + # blindly use any cached data, however the benefit of + # using max-age=0 instead of no-cache, is that we will + # still support conditional requests, so we will still + # minimize traffic sent in cases where the page hasn't + # changed at all, we will just always incur the round + # trip for the conditional GET now instead of only + # once per 10 minutes. + # For more information, please see pypa/pip#5670. + "Cache-Control": "max-age=0", + }, + ) + raise_for_status(resp) + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement of an url. Unless we issue a HEAD request on every + # url we cannot know ahead of time for sure if something is HTML + # or not. However we can check after we've downloaded it. + _ensure_html_header(resp) + + return resp + + +def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]: + """Determine if we have any encoding information in our headers.""" + if headers and "Content-Type" in headers: + content_type, params = cgi.parse_header(headers["Content-Type"]) + if "charset" in params: + return params["charset"] + return None + + +def _determine_base_url(document: HTMLElement, page_url: str) -> str: + """Determine the HTML document's base URL. + + This looks for a ```` tag in the HTML document. If present, its href + attribute denotes the base URL of anchor tags in the document. If there is + no such tag (or if it does not have a valid href attribute), the HTML + file's URL is used as the base URL. + + :param document: An HTML document representation. The current + implementation expects the result of ``html5lib.parse()``. + :param page_url: The URL of the HTML document. + + TODO: Remove when `html5lib` is dropped. + """ + for base in document.findall(".//base"): + href = base.get("href") + if href is not None: + return href + return page_url + + +def _clean_url_path_part(part: str) -> str: + """ + Clean a "part" of a URL path (i.e. after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + return urllib.parse.quote(urllib.parse.unquote(part)) + + +def _clean_file_url_path(part: str) -> str: + """ + Clean the first part of a URL path that corresponds to a local + filesystem path (i.e. the first part after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + # Also, on Windows the path part might contain a drive letter which + # should not be quoted. On Linux where drive letters do not + # exist, the colon should be quoted. We rely on urllib.request + # to do the right thing here. + return urllib.request.pathname2url(urllib.request.url2pathname(part)) + + +# percent-encoded: / +_reserved_chars_re = re.compile("(@|%2F)", re.IGNORECASE) + + +def _clean_url_path(path: str, is_local_path: bool) -> str: + """ + Clean the path portion of a URL. + """ + if is_local_path: + clean_func = _clean_file_url_path + else: + clean_func = _clean_url_path_part + + # Split on the reserved characters prior to cleaning so that + # revision strings in VCS URLs are properly preserved. + parts = _reserved_chars_re.split(path) + + cleaned_parts = [] + for to_clean, reserved in pairwise(itertools.chain(parts, [""])): + cleaned_parts.append(clean_func(to_clean)) + # Normalize %xx escapes (e.g. %2f -> %2F) + cleaned_parts.append(reserved.upper()) + + return "".join(cleaned_parts) + + +def _clean_link(url: str) -> str: + """ + Make sure a link is fully quoted. + For example, if ' ' occurs in the URL, it will be replaced with "%20", + and without double-quoting other characters. + """ + # Split the URL into parts according to the general structure + # `scheme://netloc/path;parameters?query#fragment`. + result = urllib.parse.urlparse(url) + # If the netloc is empty, then the URL refers to a local filesystem path. + is_local_path = not result.netloc + path = _clean_url_path(result.path, is_local_path=is_local_path) + return urllib.parse.urlunparse(result._replace(path=path)) + + +def _create_link_from_element( + element_attribs: Dict[str, Optional[str]], + page_url: str, + base_url: str, +) -> Optional[Link]: + """ + Convert an anchor element's attributes in a simple repository page to a Link. + """ + href = element_attribs.get("href") + if not href: + return None + + url = _clean_link(urllib.parse.urljoin(base_url, href)) + pyrequire = element_attribs.get("data-requires-python") + yanked_reason = element_attribs.get("data-yanked") + + link = Link( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + ) + + return link + + +class CacheablePageContent: + def __init__(self, page: "HTMLPage") -> None: + assert page.cache_link_parsing + self.page = page + + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and self.page.url == other.page.url + + def __hash__(self) -> int: + return hash(self.page.url) + + +class ParseLinks(Protocol): + def __call__( + self, page: "HTMLPage", use_deprecated_html5lib: bool + ) -> Iterable[Link]: + ... + + +def with_cached_html_pages(fn: ParseLinks) -> ParseLinks: + """ + Given a function that parses an Iterable[Link] from an HTMLPage, cache the + function's result (keyed by CacheablePageContent), unless the HTMLPage + `page` has `page.cache_link_parsing == False`. + """ + + @functools.lru_cache(maxsize=None) + def wrapper( + cacheable_page: CacheablePageContent, use_deprecated_html5lib: bool + ) -> List[Link]: + return list(fn(cacheable_page.page, use_deprecated_html5lib)) + + @functools.wraps(fn) + def wrapper_wrapper(page: "HTMLPage", use_deprecated_html5lib: bool) -> List[Link]: + if page.cache_link_parsing: + return wrapper(CacheablePageContent(page), use_deprecated_html5lib) + return list(fn(page, use_deprecated_html5lib)) + + return wrapper_wrapper + + +def _parse_links_html5lib(page: "HTMLPage") -> Iterable[Link]: + """ + Parse an HTML document, and yield its anchor elements as Link objects. + + TODO: Remove when `html5lib` is dropped. + """ + document = html5lib.parse( + page.content, + transport_encoding=page.encoding, + namespaceHTMLElements=False, + ) + + url = page.url + base_url = _determine_base_url(document, url) + for anchor in document.findall(".//a"): + link = _create_link_from_element( + anchor.attrib, + page_url=url, + base_url=base_url, + ) + if link is None: + continue + yield link + + +@with_cached_html_pages +def parse_links(page: "HTMLPage", use_deprecated_html5lib: bool) -> Iterable[Link]: + """ + Parse an HTML document, and yield its anchor elements as Link objects. + """ + + if use_deprecated_html5lib: + yield from _parse_links_html5lib(page) + return + + parser = HTMLLinkParser(page.url) + encoding = page.encoding or "utf-8" + parser.feed(page.content.decode(encoding)) + + url = page.url + base_url = parser.base_url or url + for anchor in parser.anchors: + link = _create_link_from_element( + anchor, + page_url=url, + base_url=base_url, + ) + if link is None: + continue + yield link + + +class HTMLPage: + """Represents one page, along with its URL""" + + def __init__( + self, + content: bytes, + encoding: Optional[str], + url: str, + cache_link_parsing: bool = True, + ) -> None: + """ + :param encoding: the encoding to decode the given content. + :param url: the URL from which the HTML was downloaded. + :param cache_link_parsing: whether links parsed from this page's url + should be cached. PyPI index urls should + have this set to False, for example. + """ + self.content = content + self.encoding = encoding + self.url = url + self.cache_link_parsing = cache_link_parsing + + def __str__(self) -> str: + return redact_auth_from_url(self.url) + + +class HTMLLinkParser(HTMLParser): + """ + HTMLParser that keeps the first base HREF and a list of all anchor + elements' attributes. + """ + + def __init__(self, url: str) -> None: + super().__init__(convert_charrefs=True) + + self.url: str = url + self.base_url: Optional[str] = None + self.anchors: List[Dict[str, Optional[str]]] = [] + + def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None: + if tag == "base" and self.base_url is None: + href = self.get_href(attrs) + if href is not None: + self.base_url = href + elif tag == "a": + self.anchors.append(dict(attrs)) + + def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]: + for name, value in attrs: + if name == "href": + return value + return None + + +def _handle_get_page_fail( + link: Link, + reason: Union[str, Exception], + meth: Optional[Callable[..., None]] = None, +) -> None: + if meth is None: + meth = logger.debug + meth("Could not fetch URL %s: %s - skipping", link, reason) + + +def _make_html_page(response: Response, cache_link_parsing: bool = True) -> HTMLPage: + encoding = _get_encoding_from_headers(response.headers) + return HTMLPage( + response.content, + encoding=encoding, + url=response.url, + cache_link_parsing=cache_link_parsing, + ) + + +def _get_html_page( + link: Link, session: Optional[PipSession] = None +) -> Optional["HTMLPage"]: + if session is None: + raise TypeError( + "_get_html_page() missing 1 required keyword argument: 'session'" + ) + + url = link.url.split("#", 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + vcs_scheme = _match_vcs_scheme(url) + if vcs_scheme: + logger.warning( + "Cannot look at %s URL %s because it does not support lookup as web pages.", + vcs_scheme, + link, + ) + return None + + # Tack index.html onto file:// URLs that point to directories + scheme, _, path, _, _, _ = urllib.parse.urlparse(url) + if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith("/"): + url += "/" + url = urllib.parse.urljoin(url, "index.html") + logger.debug(" file: URL is directory, getting %s", url) + + try: + resp = _get_html_response(url, session=session) + except _NotHTTP: + logger.warning( + "Skipping page %s because it looks like an archive, and cannot " + "be checked by a HTTP HEAD request.", + link, + ) + except _NotHTML as exc: + logger.warning( + "Skipping page %s because the %s request got Content-Type: %s." + "The only supported Content-Type is text/html", + link, + exc.request_desc, + exc.content_type, + ) + except NetworkConnectionError as exc: + _handle_get_page_fail(link, exc) + except RetryError as exc: + _handle_get_page_fail(link, exc) + except SSLError as exc: + reason = "There was a problem confirming the ssl certificate: " + reason += str(exc) + _handle_get_page_fail(link, reason, meth=logger.info) + except requests.ConnectionError as exc: + _handle_get_page_fail(link, f"connection error: {exc}") + except requests.Timeout: + _handle_get_page_fail(link, "timed out") + else: + return _make_html_page(resp, cache_link_parsing=link.cache_link_parsing) + return None + + +class CollectedSources(NamedTuple): + find_links: Sequence[Optional[LinkSource]] + index_urls: Sequence[Optional[LinkSource]] + + +class LinkCollector: + + """ + Responsible for collecting Link objects from all configured locations, + making network requests as needed. + + The class's main method is its collect_sources() method. + """ + + def __init__( + self, + session: PipSession, + search_scope: SearchScope, + ) -> None: + self.search_scope = search_scope + self.session = session + + @classmethod + def create( + cls, + session: PipSession, + options: Values, + suppress_no_index: bool = False, + ) -> "LinkCollector": + """ + :param session: The Session to use to make requests. + :param suppress_no_index: Whether to ignore the --no-index option + when constructing the SearchScope object. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index and not suppress_no_index: + logger.debug( + "Ignoring indexes: %s", + ",".join(redact_auth_from_url(url) for url in index_urls), + ) + index_urls = [] + + # Make sure find_links is a list before passing to create(). + find_links = options.find_links or [] + + search_scope = SearchScope.create( + find_links=find_links, + index_urls=index_urls, + ) + link_collector = LinkCollector( + session=session, + search_scope=search_scope, + ) + return link_collector + + @property + def find_links(self) -> List[str]: + return self.search_scope.find_links + + def fetch_page(self, location: Link) -> Optional[HTMLPage]: + """ + Fetch an HTML page containing package links. + """ + return _get_html_page(location, session=self.session) + + def collect_sources( + self, + project_name: str, + candidates_from_page: CandidatesFromPage, + ) -> CollectedSources: + # The OrderedDict calls deduplicate sources by URL. + index_url_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=False, + cache_link_parsing=False, + ) + for loc in self.search_scope.get_index_urls_locations(project_name) + ).values() + find_links_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=True, + cache_link_parsing=True, + ) + for loc in self.find_links + ).values() + + if logger.isEnabledFor(logging.DEBUG): + lines = [ + f"* {s.link}" + for s in itertools.chain(find_links_sources, index_url_sources) + if s is not None and s.link is not None + ] + lines = [ + f"{len(lines)} location(s) to search " + f"for versions of {project_name}:" + ] + lines + logger.debug("\n".join(lines)) + + return CollectedSources( + find_links=list(find_links_sources), + index_urls=list(index_url_sources), + ) diff --git a/venv/Lib/site-packages/pip/_internal/index/package_finder.py b/venv/Lib/site-packages/pip/_internal/index/package_finder.py new file mode 100644 index 000000000..223d06df6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/index/package_finder.py @@ -0,0 +1,1004 @@ +"""Routines related to PyPI, indexes""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import functools +import itertools +import logging +import re +from typing import FrozenSet, Iterable, List, Optional, Set, Tuple, Union + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.tags import Tag +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import _BaseVersion +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.index.collector import LinkCollector, parse_links +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.search_scope import SearchScope +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.models.wheel import Wheel +from pip._internal.req import InstallRequirement +from pip._internal.utils._log import getLogger +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import build_netloc +from pip._internal.utils.packaging import check_requires_python +from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS + +__all__ = ["FormatControl", "BestCandidateResult", "PackageFinder"] + + +logger = getLogger(__name__) + +BuildTag = Union[Tuple[()], Tuple[int, str]] +CandidateSortingKey = Tuple[int, int, int, _BaseVersion, Optional[int], BuildTag] + + +def _check_link_requires_python( + link: Link, + version_info: Tuple[int, int, int], + ignore_requires_python: bool = False, +) -> bool: + """ + Return whether the given Python version is compatible with a link's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + """ + try: + is_compatible = check_requires_python( + link.requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier: + logger.debug( + "Ignoring invalid Requires-Python (%r) for link: %s", + link.requires_python, + link, + ) + else: + if not is_compatible: + version = ".".join(map(str, version_info)) + if not ignore_requires_python: + logger.verbose( + "Link requires a different Python (%s not in: %r): %s", + version, + link.requires_python, + link, + ) + return False + + logger.debug( + "Ignoring failed Requires-Python check (%s not in: %r) for link: %s", + version, + link.requires_python, + link, + ) + + return True + + +class LinkEvaluator: + + """ + Responsible for evaluating links for a particular project. + """ + + _py_version_re = re.compile(r"-py([123]\.?[0-9]?)$") + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + project_name: str, + canonical_name: str, + formats: FrozenSet[str], + target_python: TargetPython, + allow_yanked: bool, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + :param project_name: The user supplied package name. + :param canonical_name: The canonical package name. + :param formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. + :param target_python: The target Python interpreter to use when + evaluating link compatibility. This is used, for example, to + check wheel compatibility, as well as when checking the Python + version, e.g. the Python version embedded in a link filename + (or egg fragment) and against an HTML link's optional PEP 503 + "data-requires-python" attribute. + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param ignore_requires_python: Whether to ignore incompatible + PEP 503 "data-requires-python" values in HTML links. Defaults + to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self._allow_yanked = allow_yanked + self._canonical_name = canonical_name + self._ignore_requires_python = ignore_requires_python + self._formats = formats + self._target_python = target_python + + self.project_name = project_name + + def evaluate_link(self, link: Link) -> Tuple[bool, Optional[str]]: + """ + Determine whether a link is a candidate for installation. + + :return: A tuple (is_candidate, result), where `result` is (1) a + version string if `is_candidate` is True, and (2) if + `is_candidate` is False, an optional string to log the reason + the link fails to qualify. + """ + version = None + if link.is_yanked and not self._allow_yanked: + reason = link.yanked_reason or "" + return (False, f"yanked for reason: {reason}") + + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + return (False, "not a file") + if ext not in SUPPORTED_EXTENSIONS: + return (False, f"unsupported archive format: {ext}") + if "binary" not in self._formats and ext == WHEEL_EXTENSION: + reason = "No binaries permitted for {}".format(self.project_name) + return (False, reason) + if "macosx10" in link.path and ext == ".zip": + return (False, "macosx10 one") + if ext == WHEEL_EXTENSION: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + return (False, "invalid wheel filename") + if canonicalize_name(wheel.name) != self._canonical_name: + reason = "wrong project name (not {})".format(self.project_name) + return (False, reason) + + supported_tags = self._target_python.get_tags() + if not wheel.supported(supported_tags): + # Include the wheel's tags in the reason string to + # simplify troubleshooting compatibility issues. + file_tags = wheel.get_formatted_file_tags() + reason = ( + "none of the wheel's tags ({}) are compatible " + "(run pip debug --verbose to show compatible tags)".format( + ", ".join(file_tags) + ) + ) + return (False, reason) + + version = wheel.version + + # This should be up by the self.ok_binary check, but see issue 2700. + if "source" not in self._formats and ext != WHEEL_EXTENSION: + reason = f"No sources permitted for {self.project_name}" + return (False, reason) + + if not version: + version = _extract_version_from_fragment( + egg_info, + self._canonical_name, + ) + if not version: + reason = f"Missing project version for {self.project_name}" + return (False, reason) + + match = self._py_version_re.search(version) + if match: + version = version[: match.start()] + py_version = match.group(1) + if py_version != self._target_python.py_version: + return (False, "Python version is incorrect") + + supports_python = _check_link_requires_python( + link, + version_info=self._target_python.py_version_info, + ignore_requires_python=self._ignore_requires_python, + ) + if not supports_python: + # Return None for the reason text to suppress calling + # _log_skipped_link(). + return (False, None) + + logger.debug("Found link %s, version: %s", link, version) + + return (True, version) + + +def filter_unallowed_hashes( + candidates: List[InstallationCandidate], + hashes: Hashes, + project_name: str, +) -> List[InstallationCandidate]: + """ + Filter out candidates whose hashes aren't allowed, and return a new + list of candidates. + + If at least one candidate has an allowed hash, then all candidates with + either an allowed hash or no hash specified are returned. Otherwise, + the given candidates are returned. + + Including the candidates with no hash specified when there is a match + allows a warning to be logged if there is a more preferred candidate + with no hash specified. Returning all candidates in the case of no + matches lets pip report the hash of the candidate that would otherwise + have been installed (e.g. permitting the user to more easily update + their requirements file with the desired hash). + """ + if not hashes: + logger.debug( + "Given no hashes to check %s links for project %r: " + "discarding no candidates", + len(candidates), + project_name, + ) + # Make sure we're not returning back the given value. + return list(candidates) + + matches_or_no_digest = [] + # Collect the non-matches for logging purposes. + non_matches = [] + match_count = 0 + for candidate in candidates: + link = candidate.link + if not link.has_hash: + pass + elif link.is_hash_allowed(hashes=hashes): + match_count += 1 + else: + non_matches.append(candidate) + continue + + matches_or_no_digest.append(candidate) + + if match_count: + filtered = matches_or_no_digest + else: + # Make sure we're not returning back the given value. + filtered = list(candidates) + + if len(filtered) == len(candidates): + discard_message = "discarding no candidates" + else: + discard_message = "discarding {} non-matches:\n {}".format( + len(non_matches), + "\n ".join(str(candidate.link) for candidate in non_matches), + ) + + logger.debug( + "Checked %s links for project %r against %s hashes " + "(%s matches, %s no digest): %s", + len(candidates), + project_name, + hashes.digest_count, + match_count, + len(matches_or_no_digest) - match_count, + discard_message, + ) + + return filtered + + +class CandidatePreferences: + + """ + Encapsulates some of the preferences for filtering and sorting + InstallationCandidate objects. + """ + + def __init__( + self, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + ) -> None: + """ + :param allow_all_prereleases: Whether to allow all pre-releases. + """ + self.allow_all_prereleases = allow_all_prereleases + self.prefer_binary = prefer_binary + + +class BestCandidateResult: + """A collection of candidates, returned by `PackageFinder.find_best_candidate`. + + This class is only intended to be instantiated by CandidateEvaluator's + `compute_best_candidate()` method. + """ + + def __init__( + self, + candidates: List[InstallationCandidate], + applicable_candidates: List[InstallationCandidate], + best_candidate: Optional[InstallationCandidate], + ) -> None: + """ + :param candidates: A sequence of all available candidates found. + :param applicable_candidates: The applicable candidates. + :param best_candidate: The most preferred candidate found, or None + if no applicable candidates were found. + """ + assert set(applicable_candidates) <= set(candidates) + + if best_candidate is None: + assert not applicable_candidates + else: + assert best_candidate in applicable_candidates + + self._applicable_candidates = applicable_candidates + self._candidates = candidates + + self.best_candidate = best_candidate + + def iter_all(self) -> Iterable[InstallationCandidate]: + """Iterate through all candidates.""" + return iter(self._candidates) + + def iter_applicable(self) -> Iterable[InstallationCandidate]: + """Iterate through the applicable candidates.""" + return iter(self._applicable_candidates) + + +class CandidateEvaluator: + + """ + Responsible for filtering and sorting candidates for installation based + on what tags are valid. + """ + + @classmethod + def create( + cls, + project_name: str, + target_python: Optional[TargetPython] = None, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> "CandidateEvaluator": + """Create a CandidateEvaluator object. + + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + :param hashes: An optional collection of allowed hashes. + """ + if target_python is None: + target_python = TargetPython() + if specifier is None: + specifier = specifiers.SpecifierSet() + + supported_tags = target_python.get_tags() + + return cls( + project_name=project_name, + supported_tags=supported_tags, + specifier=specifier, + prefer_binary=prefer_binary, + allow_all_prereleases=allow_all_prereleases, + hashes=hashes, + ) + + def __init__( + self, + project_name: str, + supported_tags: List[Tag], + specifier: specifiers.BaseSpecifier, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + hashes: Optional[Hashes] = None, + ) -> None: + """ + :param supported_tags: The PEP 425 tags supported by the target + Python in order of preference (most preferred first). + """ + self._allow_all_prereleases = allow_all_prereleases + self._hashes = hashes + self._prefer_binary = prefer_binary + self._project_name = project_name + self._specifier = specifier + self._supported_tags = supported_tags + # Since the index of the tag in the _supported_tags list is used + # as a priority, precompute a map from tag to index/priority to be + # used in wheel.find_most_preferred_tag. + self._wheel_tag_preferences = { + tag: idx for idx, tag in enumerate(supported_tags) + } + + def get_applicable_candidates( + self, + candidates: List[InstallationCandidate], + ) -> List[InstallationCandidate]: + """ + Return the applicable candidates from a list of candidates. + """ + # Using None infers from the specifier instead. + allow_prereleases = self._allow_all_prereleases or None + specifier = self._specifier + versions = { + str(v) + for v in specifier.filter( + # We turn the version object into a str here because otherwise + # when we're debundled but setuptools isn't, Python will see + # packaging.version.Version and + # pkg_resources._vendor.packaging.version.Version as different + # types. This way we'll use a str as a common data interchange + # format. If we stop using the pkg_resources provided specifier + # and start using our own, we can drop the cast to str(). + (str(c.version) for c in candidates), + prereleases=allow_prereleases, + ) + } + + # Again, converting version to str to deal with debundling. + applicable_candidates = [c for c in candidates if str(c.version) in versions] + + filtered_applicable_candidates = filter_unallowed_hashes( + candidates=applicable_candidates, + hashes=self._hashes, + project_name=self._project_name, + ) + + return sorted(filtered_applicable_candidates, key=self._sort_key) + + def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey: + """ + Function to pass as the `key` argument to a call to sorted() to sort + InstallationCandidates by preference. + + Returns a tuple such that tuples sorting as greater using Python's + default comparison operator are more preferred. + + The preference is as follows: + + First and foremost, candidates with allowed (matching) hashes are + always preferred over candidates without matching hashes. This is + because e.g. if the only candidate with an allowed hash is yanked, + we still want to use that candidate. + + Second, excepting hash considerations, candidates that have been + yanked (in the sense of PEP 592) are always less preferred than + candidates that haven't been yanked. Then: + + If not finding wheels, they are sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min(self._supported_tags) + 3. source archives + If prefer_binary was set, then all wheels are sorted above sources. + + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + valid_tags = self._supported_tags + support_num = len(valid_tags) + build_tag: BuildTag = () + binary_preference = 0 + link = candidate.link + if link.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(link.filename) + try: + pri = -( + wheel.find_most_preferred_tag( + valid_tags, self._wheel_tag_preferences + ) + ) + except ValueError: + raise UnsupportedWheel( + "{} is not a supported wheel for this platform. It " + "can't be sorted.".format(wheel.filename) + ) + if self._prefer_binary: + binary_preference = 1 + if wheel.build_tag is not None: + match = re.match(r"^(\d+)(.*)$", wheel.build_tag) + build_tag_groups = match.groups() + build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) + else: # sdist + pri = -(support_num) + has_allowed_hash = int(link.is_hash_allowed(self._hashes)) + yank_value = -1 * int(link.is_yanked) # -1 for yanked. + return ( + has_allowed_hash, + yank_value, + binary_preference, + candidate.version, + pri, + build_tag, + ) + + def sort_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> Optional[InstallationCandidate]: + """ + Return the best candidate per the instance's sort order, or None if + no candidate is acceptable. + """ + if not candidates: + return None + best_candidate = max(candidates, key=self._sort_key) + return best_candidate + + def compute_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> BestCandidateResult: + """ + Compute and return a `BestCandidateResult` instance. + """ + applicable_candidates = self.get_applicable_candidates(candidates) + + best_candidate = self.sort_best_candidate(applicable_candidates) + + return BestCandidateResult( + candidates, + applicable_candidates=applicable_candidates, + best_candidate=best_candidate, + ) + + +class PackageFinder: + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links. + """ + + def __init__( + self, + link_collector: LinkCollector, + target_python: TargetPython, + allow_yanked: bool, + use_deprecated_html5lib: bool, + format_control: Optional[FormatControl] = None, + candidate_prefs: Optional[CandidatePreferences] = None, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + This constructor is primarily meant to be used by the create() class + method and from tests. + + :param format_control: A FormatControl object, used to control + the selection of source packages / binary packages when consulting + the index and links. + :param candidate_prefs: Options to use when creating a + CandidateEvaluator object. + """ + if candidate_prefs is None: + candidate_prefs = CandidatePreferences() + + format_control = format_control or FormatControl(set(), set()) + + self._allow_yanked = allow_yanked + self._candidate_prefs = candidate_prefs + self._ignore_requires_python = ignore_requires_python + self._link_collector = link_collector + self._target_python = target_python + self._use_deprecated_html5lib = use_deprecated_html5lib + + self.format_control = format_control + + # These are boring links that have already been logged somehow. + self._logged_links: Set[Link] = set() + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + @classmethod + def create( + cls, + link_collector: LinkCollector, + selection_prefs: SelectionPreferences, + target_python: Optional[TargetPython] = None, + *, + use_deprecated_html5lib: bool, + ) -> "PackageFinder": + """Create a PackageFinder. + + :param selection_prefs: The candidate selection preferences, as a + SelectionPreferences object. + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + """ + if target_python is None: + target_python = TargetPython() + + candidate_prefs = CandidatePreferences( + prefer_binary=selection_prefs.prefer_binary, + allow_all_prereleases=selection_prefs.allow_all_prereleases, + ) + + return cls( + candidate_prefs=candidate_prefs, + link_collector=link_collector, + target_python=target_python, + allow_yanked=selection_prefs.allow_yanked, + format_control=selection_prefs.format_control, + ignore_requires_python=selection_prefs.ignore_requires_python, + use_deprecated_html5lib=use_deprecated_html5lib, + ) + + @property + def target_python(self) -> TargetPython: + return self._target_python + + @property + def search_scope(self) -> SearchScope: + return self._link_collector.search_scope + + @search_scope.setter + def search_scope(self, search_scope: SearchScope) -> None: + self._link_collector.search_scope = search_scope + + @property + def find_links(self) -> List[str]: + return self._link_collector.find_links + + @property + def index_urls(self) -> List[str]: + return self.search_scope.index_urls + + @property + def trusted_hosts(self) -> Iterable[str]: + for host_port in self._link_collector.session.pip_trusted_origins: + yield build_netloc(*host_port) + + @property + def allow_all_prereleases(self) -> bool: + return self._candidate_prefs.allow_all_prereleases + + def set_allow_all_prereleases(self) -> None: + self._candidate_prefs.allow_all_prereleases = True + + @property + def prefer_binary(self) -> bool: + return self._candidate_prefs.prefer_binary + + def set_prefer_binary(self) -> None: + self._candidate_prefs.prefer_binary = True + + def make_link_evaluator(self, project_name: str) -> LinkEvaluator: + canonical_name = canonicalize_name(project_name) + formats = self.format_control.get_allowed_formats(canonical_name) + + return LinkEvaluator( + project_name=project_name, + canonical_name=canonical_name, + formats=formats, + target_python=self._target_python, + allow_yanked=self._allow_yanked, + ignore_requires_python=self._ignore_requires_python, + ) + + def _sort_links(self, links: Iterable[Link]) -> List[Link]: + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen: Set[Link] = set() + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _log_skipped_link(self, link: Link, reason: str) -> None: + if link not in self._logged_links: + # Put the link at the end so the reason is more visible and because + # the link string is usually very long. + logger.debug("Skipping link: %s: %s", reason, link) + self._logged_links.add(link) + + def get_install_candidate( + self, link_evaluator: LinkEvaluator, link: Link + ) -> Optional[InstallationCandidate]: + """ + If the link is a candidate for install, convert it to an + InstallationCandidate and return it. Otherwise, return None. + """ + is_candidate, result = link_evaluator.evaluate_link(link) + if not is_candidate: + if result: + self._log_skipped_link(link, reason=result) + return None + + return InstallationCandidate( + name=link_evaluator.project_name, + link=link, + version=result, + ) + + def evaluate_links( + self, link_evaluator: LinkEvaluator, links: Iterable[Link] + ) -> List[InstallationCandidate]: + """ + Convert links that are candidates to InstallationCandidate objects. + """ + candidates = [] + for link in self._sort_links(links): + candidate = self.get_install_candidate(link_evaluator, link) + if candidate is not None: + candidates.append(candidate) + + return candidates + + def process_project_url( + self, project_url: Link, link_evaluator: LinkEvaluator + ) -> List[InstallationCandidate]: + logger.debug( + "Fetching project page and analyzing links: %s", + project_url, + ) + html_page = self._link_collector.fetch_page(project_url) + if html_page is None: + return [] + + page_links = list(parse_links(html_page, self._use_deprecated_html5lib)) + + with indent_log(): + package_links = self.evaluate_links( + link_evaluator, + links=page_links, + ) + + return package_links + + @functools.lru_cache(maxsize=None) + def find_all_candidates(self, project_name: str) -> List[InstallationCandidate]: + """Find all available InstallationCandidate for project_name + + This checks index_urls and find_links. + All versions found are returned as an InstallationCandidate list. + + See LinkEvaluator.evaluate_link() for details on which files + are accepted. + """ + link_evaluator = self.make_link_evaluator(project_name) + + collected_sources = self._link_collector.collect_sources( + project_name=project_name, + candidates_from_page=functools.partial( + self.process_project_url, + link_evaluator=link_evaluator, + ), + ) + + page_candidates_it = itertools.chain.from_iterable( + source.page_candidates() + for sources in collected_sources + for source in sources + if source is not None + ) + page_candidates = list(page_candidates_it) + + file_links_it = itertools.chain.from_iterable( + source.file_links() + for sources in collected_sources + for source in sources + if source is not None + ) + file_candidates = self.evaluate_links( + link_evaluator, + sorted(file_links_it, reverse=True), + ) + + if logger.isEnabledFor(logging.DEBUG) and file_candidates: + paths = [] + for candidate in file_candidates: + assert candidate.link.url # we need to have a URL + try: + paths.append(candidate.link.file_path) + except Exception: + paths.append(candidate.link.url) # it's not a local file + + logger.debug("Local files found: %s", ", ".join(paths)) + + # This is an intentional priority ordering + return file_candidates + page_candidates + + def make_candidate_evaluator( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> CandidateEvaluator: + """Create a CandidateEvaluator object to use.""" + candidate_prefs = self._candidate_prefs + return CandidateEvaluator.create( + project_name=project_name, + target_python=self._target_python, + prefer_binary=candidate_prefs.prefer_binary, + allow_all_prereleases=candidate_prefs.allow_all_prereleases, + specifier=specifier, + hashes=hashes, + ) + + @functools.lru_cache(maxsize=None) + def find_best_candidate( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> BestCandidateResult: + """Find matches for the given project and specifier. + + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + + :return: A `BestCandidateResult` instance. + """ + candidates = self.find_all_candidates(project_name) + candidate_evaluator = self.make_candidate_evaluator( + project_name=project_name, + specifier=specifier, + hashes=hashes, + ) + return candidate_evaluator.compute_best_candidate(candidates) + + def find_requirement( + self, req: InstallRequirement, upgrade: bool + ) -> Optional[InstallationCandidate]: + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a InstallationCandidate if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + hashes = req.hashes(trust_internet=False) + best_candidate_result = self.find_best_candidate( + req.name, + specifier=req.specifier, + hashes=hashes, + ) + best_candidate = best_candidate_result.best_candidate + + installed_version: Optional[_BaseVersion] = None + if req.satisfied_by is not None: + installed_version = req.satisfied_by.version + + def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str: + # This repeated parse_version and str() conversion is needed to + # handle different vendoring sources from pip and pkg_resources. + # If we stop using the pkg_resources provided specifier and start + # using our own, we can drop the cast to str(). + return ( + ", ".join( + sorted( + {str(c.version) for c in cand_iter}, + key=parse_version, + ) + ) + or "none" + ) + + if installed_version is None and best_candidate is None: + logger.critical( + "Could not find a version that satisfies the requirement %s " + "(from versions: %s)", + req, + _format_versions(best_candidate_result.iter_all()), + ) + + raise DistributionNotFound( + "No matching distribution found for {}".format(req) + ) + + best_installed = False + if installed_version and ( + best_candidate is None or best_candidate.version <= installed_version + ): + best_installed = True + + if not upgrade and installed_version is not None: + if best_installed: + logger.debug( + "Existing installed version (%s) is most up-to-date and " + "satisfies requirement", + installed_version, + ) + else: + logger.debug( + "Existing installed version (%s) satisfies requirement " + "(most up-to-date version is %s)", + installed_version, + best_candidate.version, + ) + return None + + if best_installed: + # We have an existing version, and its the best version + logger.debug( + "Installed version (%s) is most up-to-date (past versions: %s)", + installed_version, + _format_versions(best_candidate_result.iter_applicable()), + ) + raise BestVersionAlreadyInstalled + + logger.debug( + "Using version %s (newest of versions: %s)", + best_candidate.version, + _format_versions(best_candidate_result.iter_applicable()), + ) + return best_candidate + + +def _find_name_version_sep(fragment: str, canonical_name: str) -> int: + """Find the separator's index based on the package's canonical name. + + :param fragment: A + filename "fragment" (stem) or + egg fragment. + :param canonical_name: The package's canonical name. + + This function is needed since the canonicalized name does not necessarily + have the same length as the egg info's name part. An example:: + + >>> fragment = 'foo__bar-1.0' + >>> canonical_name = 'foo-bar' + >>> _find_name_version_sep(fragment, canonical_name) + 8 + """ + # Project name and version must be separated by one single dash. Find all + # occurrences of dashes; if the string in front of it matches the canonical + # name, this is the one separating the name and version parts. + for i, c in enumerate(fragment): + if c != "-": + continue + if canonicalize_name(fragment[:i]) == canonical_name: + return i + raise ValueError(f"{fragment} does not match {canonical_name}") + + +def _extract_version_from_fragment(fragment: str, canonical_name: str) -> Optional[str]: + """Parse the version string from a + filename + "fragment" (stem) or egg fragment. + + :param fragment: The string to parse. E.g. foo-2.1 + :param canonical_name: The canonicalized name of the package this + belongs to. + """ + try: + version_start = _find_name_version_sep(fragment, canonical_name) + 1 + except ValueError: + return None + version = fragment[version_start:] + if not version: + return None + return version diff --git a/venv/Lib/site-packages/pip/_internal/index/sources.py b/venv/Lib/site-packages/pip/_internal/index/sources.py new file mode 100644 index 000000000..eec3f12f7 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/index/sources.py @@ -0,0 +1,224 @@ +import logging +import mimetypes +import os +import pathlib +from typing import Callable, Iterable, Optional, Tuple + +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url, url_to_path +from pip._internal.vcs import is_url + +logger = logging.getLogger(__name__) + +FoundCandidates = Iterable[InstallationCandidate] +FoundLinks = Iterable[Link] +CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]] +PageValidator = Callable[[Link], bool] + + +class LinkSource: + @property + def link(self) -> Optional[Link]: + """Returns the underlying link, if there's one.""" + raise NotImplementedError() + + def page_candidates(self) -> FoundCandidates: + """Candidates found by parsing an archive listing HTML file.""" + raise NotImplementedError() + + def file_links(self) -> FoundLinks: + """Links found by specifying archives directly.""" + raise NotImplementedError() + + +def _is_html_file(file_url: str) -> bool: + return mimetypes.guess_type(file_url, strict=False)[0] == "text/html" + + +class _FlatDirectorySource(LinkSource): + """Link source specified by ``--find-links=``. + + This looks the content of the directory, and returns: + + * ``page_candidates``: Links listed on each HTML file in the directory. + * ``file_candidates``: Archives in the directory. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + path: str, + ) -> None: + self._candidates_from_page = candidates_from_page + self._path = pathlib.Path(os.path.realpath(path)) + + @property + def link(self) -> Optional[Link]: + return None + + def page_candidates(self) -> FoundCandidates: + for path in self._path.iterdir(): + url = path_to_url(str(path)) + if not _is_html_file(url): + continue + yield from self._candidates_from_page(Link(url)) + + def file_links(self) -> FoundLinks: + for path in self._path.iterdir(): + url = path_to_url(str(path)) + if _is_html_file(url): + continue + yield Link(url) + + +class _LocalFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to + the option, it is converted to a URL first. This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not _is_html_file(self._link.url): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + if _is_html_file(self._link.url): + return + yield self._link + + +class _RemoteFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._page_validator = page_validator + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not self._page_validator(self._link): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + yield self._link + + +class _IndexDirectorySource(LinkSource): + """``--[extra-]index-url=``. + + This is treated like a remote URL; ``candidates_from_page`` contains logic + for this by appending ``index.html`` to the link. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + return () + + +def build_source( + location: str, + *, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + expand_dir: bool, + cache_link_parsing: bool, +) -> Tuple[Optional[str], Optional[LinkSource]]: + + path: Optional[str] = None + url: Optional[str] = None + if os.path.exists(location): # Is a local path. + url = path_to_url(location) + path = location + elif location.startswith("file:"): # A file: URL. + url = location + path = url_to_path(location) + elif is_url(location): + url = location + + if url is None: + msg = ( + "Location '%s' is ignored: " + "it is either a non-existing path or lacks a specific scheme." + ) + logger.warning(msg, location) + return (None, None) + + if path is None: + source: LinkSource = _RemoteFileSource( + candidates_from_page=candidates_from_page, + page_validator=page_validator, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + + if os.path.isdir(path): + if expand_dir: + source = _FlatDirectorySource( + candidates_from_page=candidates_from_page, + path=path, + ) + else: + source = _IndexDirectorySource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + elif os.path.isfile(path): + source = _LocalFileSource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + logger.warning( + "Location '%s' is ignored: it is neither a file nor a directory.", + location, + ) + return (url, None) diff --git a/venv/Lib/site-packages/pip/_internal/locations/__init__.py b/venv/Lib/site-packages/pip/_internal/locations/__init__.py new file mode 100644 index 000000000..ac0c166e5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/locations/__init__.py @@ -0,0 +1,520 @@ +import functools +import logging +import os +import pathlib +import sys +import sysconfig +from typing import Any, Dict, Iterator, List, Optional, Tuple + +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.virtualenv import running_under_virtualenv + +from . import _distutils, _sysconfig +from .base import ( + USER_CACHE_DIR, + get_major_minor_version, + get_src_prefix, + is_osx_framework, + site_packages, + user_site, +) + +__all__ = [ + "USER_CACHE_DIR", + "get_bin_prefix", + "get_bin_user", + "get_major_minor_version", + "get_platlib", + "get_prefixed_libs", + "get_purelib", + "get_scheme", + "get_src_prefix", + "site_packages", + "user_site", +] + + +logger = logging.getLogger(__name__) + + +_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib") + +_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10) + + +def _should_use_sysconfig() -> bool: + """This function determines the value of _USE_SYSCONFIG. + + By default, pip uses sysconfig on Python 3.10+. + But Python distributors can override this decision by setting: + sysconfig._PIP_USE_SYSCONFIG = True / False + Rationale in https://github.com/pypa/pip/issues/10647 + + This is a function for testability, but should be constant during any one + run. + """ + return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT)) + + +_USE_SYSCONFIG = _should_use_sysconfig() + +# Be noisy about incompatibilities if this platforms "should" be using +# sysconfig, but is explicitly opting out and using distutils instead. +if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG: + _MISMATCH_LEVEL = logging.WARNING +else: + _MISMATCH_LEVEL = logging.DEBUG + + +def _looks_like_bpo_44860() -> bool: + """The resolution to bpo-44860 will change this incorrect platlib. + + See . + """ + from distutils.command.install import INSTALL_SCHEMES # type: ignore + + try: + unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"] + except KeyError: + return False + return unix_user_platlib == "$usersite" + + +def _looks_like_red_hat_patched_platlib_purelib(scheme: Dict[str, str]) -> bool: + platlib = scheme["platlib"] + if "/$platlibdir/" in platlib: + platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/") + if "/lib64/" not in platlib: + return False + unpatched = platlib.replace("/lib64/", "/lib/") + return unpatched.replace("$platbase/", "$base/") == scheme["purelib"] + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_lib() -> bool: + """Red Hat patches platlib in unix_prefix and unix_home, but not purelib. + + This is the only way I can see to tell a Red Hat-patched Python. + """ + from distutils.command.install import INSTALL_SCHEMES # type: ignore + + return all( + k in INSTALL_SCHEMES + and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k]) + for k in ("unix_prefix", "unix_home") + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_debian_scheme() -> bool: + """Debian adds two additional schemes.""" + from distutils.command.install import INSTALL_SCHEMES # type: ignore + + return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_scheme() -> bool: + """Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``. + + Red Hat's ``00251-change-user-install-location.patch`` changes the install + command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is + (fortunately?) done quite unconditionally, so we create a default command + object without any configuration to detect this. + """ + from distutils.command.install import install + from distutils.dist import Distribution + + cmd: Any = install(Distribution()) + cmd.finalize_options() + return ( + cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local" + and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local" + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_slackware_scheme() -> bool: + """Slackware patches sysconfig but fails to patch distutils and site. + + Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib + path, but does not do the same to the site module. + """ + if user_site is None: # User-site not available. + return False + try: + paths = sysconfig.get_paths(scheme="posix_user", expand=False) + except KeyError: # User-site not available. + return False + return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site + + +@functools.lru_cache(maxsize=None) +def _looks_like_msys2_mingw_scheme() -> bool: + """MSYS2 patches distutils and sysconfig to use a UNIX-like scheme. + + However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is + likely going to be included in their 3.10 release, so we ignore the warning. + See msys2/MINGW-packages#9319. + + MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase, + and is missing the final ``"site-packages"``. + """ + paths = sysconfig.get_paths("nt", expand=False) + return all( + "Lib" not in p and "lib" in p and not p.endswith("site-packages") + for p in (paths[key] for key in ("platlib", "purelib")) + ) + + +def _fix_abiflags(parts: Tuple[str]) -> Iterator[str]: + ldversion = sysconfig.get_config_var("LDVERSION") + abiflags: str = getattr(sys, "abiflags", None) + + # LDVERSION does not end with sys.abiflags. Just return the path unchanged. + if not ldversion or not abiflags or not ldversion.endswith(abiflags): + yield from parts + return + + # Strip sys.abiflags from LDVERSION-based path components. + for part in parts: + if part.endswith(ldversion): + part = part[: (0 - len(abiflags))] + yield part + + +@functools.lru_cache(maxsize=None) +def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None: + issue_url = "https://github.com/pypa/pip/issues/10151" + message = ( + "Value for %s does not match. Please report this to <%s>" + "\ndistutils: %s" + "\nsysconfig: %s" + ) + logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new) + + +def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool: + if old == new: + return False + _warn_mismatched(old, new, key=key) + return True + + +@functools.lru_cache(maxsize=None) +def _log_context( + *, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + prefix: Optional[str] = None, +) -> None: + parts = [ + "Additional context:", + "user = %r", + "home = %r", + "root = %r", + "prefix = %r", + ] + + logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix) + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + new = _sysconfig.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + if _USE_SYSCONFIG: + return new + + old = _distutils.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + + warning_contexts = [] + for k in SCHEME_KEYS: + old_v = pathlib.Path(getattr(old, k)) + new_v = pathlib.Path(getattr(new, k)) + + if old_v == new_v: + continue + + # distutils incorrectly put PyPy packages under ``site-packages/python`` + # in the ``posix_home`` scheme, but PyPy devs said they expect the + # directory name to be ``pypy`` instead. So we treat this as a bug fix + # and not warn about it. See bpo-43307 and python/cpython#24628. + skip_pypy_special_case = ( + sys.implementation.name == "pypy" + and home is not None + and k in ("platlib", "purelib") + and old_v.parent == new_v.parent + and old_v.name.startswith("python") + and new_v.name.startswith("pypy") + ) + if skip_pypy_special_case: + continue + + # sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in + # the ``include`` value, but distutils's ``headers`` does. We'll let + # CPython decide whether this is a bug or feature. See bpo-43948. + skip_osx_framework_user_special_case = ( + user + and is_osx_framework() + and k == "headers" + and old_v.parent.parent == new_v.parent + and old_v.parent.name.startswith("python") + ) + if skip_osx_framework_user_special_case: + continue + + # On Red Hat and derived Linux distributions, distutils is patched to + # use "lib64" instead of "lib" for platlib. + if k == "platlib" and _looks_like_red_hat_lib(): + continue + + # On Python 3.9+, sysconfig's posix_user scheme sets platlib against + # sys.platlibdir, but distutils's unix_user incorrectly coninutes + # using the same $usersite for both platlib and purelib. This creates a + # mismatch when sys.platlibdir is not "lib". + skip_bpo_44860 = ( + user + and k == "platlib" + and not WINDOWS + and sys.version_info >= (3, 9) + and _PLATLIBDIR != "lib" + and _looks_like_bpo_44860() + ) + if skip_bpo_44860: + continue + + # Slackware incorrectly patches posix_user to use lib64 instead of lib, + # but not usersite to match the location. + skip_slackware_user_scheme = ( + user + and k in ("platlib", "purelib") + and not WINDOWS + and _looks_like_slackware_scheme() + ) + if skip_slackware_user_scheme: + continue + + # Both Debian and Red Hat patch Python to place the system site under + # /usr/local instead of /usr. Debian also places lib in dist-packages + # instead of site-packages, but the /usr/local check should cover it. + skip_linux_system_special_case = ( + not (user or home or prefix or running_under_virtualenv()) + and old_v.parts[1:3] == ("usr", "local") + and len(new_v.parts) > 1 + and new_v.parts[1] == "usr" + and (len(new_v.parts) < 3 or new_v.parts[2] != "local") + and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme()) + ) + if skip_linux_system_special_case: + continue + + # On Python 3.7 and earlier, sysconfig does not include sys.abiflags in + # the "pythonX.Y" part of the path, but distutils does. + skip_sysconfig_abiflag_bug = ( + sys.version_info < (3, 8) + and not WINDOWS + and k in ("headers", "platlib", "purelib") + and tuple(_fix_abiflags(old_v.parts)) == new_v.parts + ) + if skip_sysconfig_abiflag_bug: + continue + + # MSYS2 MINGW's sysconfig patch does not include the "site-packages" + # part of the path. This is incorrect and will be fixed in MSYS. + skip_msys2_mingw_bug = ( + WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme() + ) + if skip_msys2_mingw_bug: + continue + + # CPython's POSIX install script invokes pip (via ensurepip) against the + # interpreter located in the source tree, not the install site. This + # triggers special logic in sysconfig that's not present in distutils. + # https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194 + skip_cpython_build = ( + sysconfig.is_python_build(check_home=True) + and not WINDOWS + and k in ("headers", "include", "platinclude") + ) + if skip_cpython_build: + continue + + warning_contexts.append((old_v, new_v, f"scheme.{k}")) + + if not warning_contexts: + return old + + # Check if this path mismatch is caused by distutils config files. Those + # files will no longer work once we switch to sysconfig, so this raises a + # deprecation message for them. + default_old = _distutils.distutils_scheme( + dist_name, + user, + home, + root, + isolated, + prefix, + ignore_config_files=True, + ) + if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS): + deprecated( + reason=( + "Configuring installation scheme with distutils config files " + "is deprecated and will no longer work in the near future. If you " + "are using a Homebrew or Linuxbrew Python, please see discussion " + "at https://github.com/Homebrew/homebrew-core/issues/76621" + ), + replacement=None, + gone_in=None, + ) + return old + + # Post warnings about this mismatch so user can report them back. + for old_v, new_v, key in warning_contexts: + _warn_mismatched(old_v, new_v, key=key) + _log_context(user=user, home=home, root=root, prefix=prefix) + + return old + + +def get_bin_prefix() -> str: + new = _sysconfig.get_bin_prefix() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_bin_prefix() + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"): + _log_context() + return old + + +def get_bin_user() -> str: + return _sysconfig.get_scheme("", user=True).scripts + + +def _looks_like_deb_system_dist_packages(value: str) -> bool: + """Check if the value is Debian's APT-controlled dist-packages. + + Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the + default package path controlled by APT, but does not patch ``sysconfig`` to + do the same. This is similar to the bug worked around in ``get_scheme()``, + but here the default is ``deb_system`` instead of ``unix_local``. Ultimately + we can't do anything about this Debian bug, and this detection allows us to + skip the warning when needed. + """ + if not _looks_like_debian_scheme(): + return False + if value == "/usr/lib/python3/dist-packages": + return True + return False + + +def get_purelib() -> str: + """Return the default pure-Python lib location.""" + new = _sysconfig.get_purelib() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_purelib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"): + _log_context() + return old + + +def get_platlib() -> str: + """Return the default platform-shared lib location.""" + new = _sysconfig.get_platlib() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_platlib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"): + _log_context() + return old + + +def _deduplicated(v1: str, v2: str) -> List[str]: + """Deduplicate values from a list.""" + if v1 == v2: + return [v1] + return [v1, v2] + + +def _looks_like_apple_library(path: str) -> bool: + """Apple patches sysconfig to *always* look under */Library/Python*.""" + if sys.platform[:6] != "darwin": + return False + return path == f"/Library/Python/{get_major_minor_version()}/site-packages" + + +def get_prefixed_libs(prefix: str) -> List[str]: + """Return the lib locations under ``prefix``.""" + new_pure, new_plat = _sysconfig.get_prefixed_libs(prefix) + if _USE_SYSCONFIG: + return _deduplicated(new_pure, new_plat) + + old_pure, old_plat = _distutils.get_prefixed_libs(prefix) + old_lib_paths = _deduplicated(old_pure, old_plat) + + # Apple's Python (shipped with Xcode and Command Line Tools) hard-code + # platlib and purelib to '/Library/Python/X.Y/site-packages'. This will + # cause serious build isolation bugs when Apple starts shipping 3.10 because + # pip will install build backends to the wrong location. This tells users + # who is at fault so Apple may notice it and fix the issue in time. + if all(_looks_like_apple_library(p) for p in old_lib_paths): + deprecated( + reason=( + "Python distributed by Apple's Command Line Tools incorrectly " + "patches sysconfig to always point to '/Library/Python'. This " + "will cause build isolation to operate incorrectly on Python " + "3.10 or later. Please help report this to Apple so they can " + "fix this. https://developer.apple.com/bug-reporting/" + ), + replacement=None, + gone_in=None, + ) + return old_lib_paths + + warned = [ + _warn_if_mismatch( + pathlib.Path(old_pure), + pathlib.Path(new_pure), + key="prefixed-purelib", + ), + _warn_if_mismatch( + pathlib.Path(old_plat), + pathlib.Path(new_plat), + key="prefixed-platlib", + ), + ] + if any(warned): + _log_context(prefix=prefix) + + return old_lib_paths diff --git a/venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a94436e3d40f90c325a8a9a727e3d23ebc464b75 GIT binary patch literal 12388 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de00a6fc797b8240ef43e10d9645a4a1db5064ad GIT binary patch literal 4656 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 H?b`nX_v5i6 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae638617dad4ca53df25249b861fae3b818b6ae1 GIT binary patch literal 1538 zcmZux&2Hm15GEyA{)sHRNxGW^{SgARK+wkN&!Iq(77eo5X3;hYoCMny+zPTpJMzk; zKvGHUZBE&1`waH6PtbQE&{I!+g&x`trDT%@mIBF{A!j)J=A&4%*+9_#`1#NNM>ax# zY2|*af$|M>pa)HOKw}v1U$O0jWtUBbT&R5oyQvHj1mHH8A2@Tz_f#Z{28(cmcG z?uQOGu&Rbx7AIVQxWaQv6FLlX8WSFzCtT)XO6a*Vvm{g1EaxOm`l=}sNrEhlo`*vs zl+B6EIgND0`^^Al7rJm@i17$XJTiVmaJn%i4G&tkaP;IE@y6kZ@y&5U8TZZ!7YU;t z8x%`X&N-pdJDSKdu!h15Js~+H`mskk!%h)u{qxQj>mE3R@aZS(rEyw$an*TowP7lI z!1y?n$`li!oSOrJgbvv6h%Z2X#qdwO`(^J`!129qE=1US#G-r*XN%sqiQLcoy~lu* z+&toJL?YQc2W)!ZC;grVWb+n~9)Pt4u_fU&Ot(@Ng%YkKw)&wUoou2W4v7qk3kSu8 zgPVL7HCP%or^1^sy@n_TgJx%e=#L;sbd9*9F`b#x8dYLEH?9y}n=ahg@XVeA?%E1W zaV;dPlMhO!NNZM$jXB1sWJ}>u{{_u8H_QWoiAU3~PM|IWmI4>N3Cq2Z6OUYyD3<`e z2bc5)oQ=IGq#k8n%IFX__O%P}r?b)ECS<7$CX|(h@=RGHmQY^TMmytVkX$Mokcci~ zRXsf3*E%< zL}7GB0{9Oo_w;zL8|?1v?(YSUo^(}BqpXX;;eUx#?J(114pZQWq~Bu9&Xr){OR=2^u#3Ygo(pe^N`I;Q#;t literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/locations/_distutils.py b/venv/Lib/site-packages/pip/_internal/locations/_distutils.py new file mode 100644 index 000000000..2ec79e65b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/locations/_distutils.py @@ -0,0 +1,169 @@ +"""Locations where we look for configs, install stuff, etc""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import os +import sys +from distutils.cmd import Command as DistutilsCommand +from distutils.command.install import SCHEME_KEYS +from distutils.command.install import install as distutils_install_command +from distutils.sysconfig import get_python_lib +from typing import Dict, List, Optional, Tuple, Union, cast + +from pip._internal.models.scheme import Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import get_major_minor_version + +logger = logging.getLogger(__name__) + + +def distutils_scheme( + dist_name: str, + user: bool = False, + home: str = None, + root: str = None, + isolated: bool = False, + prefix: str = None, + *, + ignore_config_files: bool = False, +) -> Dict[str, str]: + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name} + if isolated: + dist_args["script_args"] = ["--no-user-cfg"] + + d = Distribution(dist_args) + if not ignore_config_files: + try: + d.parse_config_files() + except UnicodeDecodeError: + # Typeshed does not include find_config_files() for some reason. + paths = d.find_config_files() # type: ignore + logger.warning( + "Ignore distutils configs in %s due to encoding errors.", + ", ".join(os.path.basename(p) for p in paths), + ) + obj: Optional[DistutilsCommand] = None + obj = d.get_command_obj("install", create=True) + assert obj is not None + i = cast(distutils_install_command, obj) + # NOTE: setting user or home has the side-effect of creating the home dir + # or user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + assert not (user and prefix), f"user={user} prefix={prefix}" + assert not (home and prefix), f"home={home} prefix={prefix}" + i.user = user or i.user + if user or home: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + + scheme = {} + for key in SCHEME_KEYS: + scheme[key] = getattr(i, "install_" + key) + + # install_lib specified in setup.cfg should install *everything* + # into there (i.e. it takes precedence over both purelib and + # platlib). Note, i.install_lib is *always* set after + # finalize_options(); we only want to override here if the user + # has explicitly requested it hence going back to the config + if "install_lib" in d.get_option_dict("install"): + scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) + + if running_under_virtualenv(): + if home: + prefix = home + elif user: + prefix = i.install_userbase # type: ignore + else: + prefix = i.prefix + scheme["headers"] = os.path.join( + prefix, + "include", + "site", + f"python{get_major_minor_version()}", + dist_name, + ) + + if root is not None: + path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1] + scheme["headers"] = os.path.join(root, path_no_drive[1:]) + + return scheme + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. The distutils + documentation provides the context for the available schemes: + https://docs.python.org/3/install/index.html#alternate-installation + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme and provides the base + directory for the same + :param root: root under which other directories are re-based + :param isolated: equivalent to --no-user-cfg, i.e. do not consider + ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for + scheme paths + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) + return Scheme( + platlib=scheme["platlib"], + purelib=scheme["purelib"], + headers=scheme["headers"], + scripts=scheme["scripts"], + data=scheme["data"], + ) + + +def get_bin_prefix() -> str: + # XXX: In old virtualenv versions, sys.prefix can contain '..' components, + # so we need to call normpath to eliminate them. + prefix = os.path.normpath(sys.prefix) + if WINDOWS: + bin_py = os.path.join(prefix, "Scripts") + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(prefix, "bin") + return bin_py + # Forcing to use /usr/local/bin for standard macOS framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return os.path.join(prefix, "bin") + + +def get_purelib() -> str: + return get_python_lib(plat_specific=False) + + +def get_platlib() -> str: + return get_python_lib(plat_specific=True) + + +def get_prefixed_libs(prefix: str) -> Tuple[str, str]: + return ( + get_python_lib(plat_specific=False, prefix=prefix), + get_python_lib(plat_specific=True, prefix=prefix), + ) diff --git a/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py b/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py new file mode 100644 index 000000000..5e141aa1b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py @@ -0,0 +1,219 @@ +import distutils.util # FIXME: For change_root. +import logging +import os +import sys +import sysconfig +import typing + +from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import get_major_minor_version, is_osx_framework + +logger = logging.getLogger(__name__) + + +# Notes on _infer_* functions. +# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no +# way to ask things like "what is the '_prefix' scheme on this platform". These +# functions try to answer that with some heuristics while accounting for ad-hoc +# platforms not covered by CPython's default sysconfig implementation. If the +# ad-hoc implementation does not fully implement sysconfig, we'll fall back to +# a POSIX scheme. + +_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) + +_PREFERRED_SCHEME_API = getattr(sysconfig, "get_preferred_scheme", None) + + +def _should_use_osx_framework_prefix() -> bool: + """Check for Apple's ``osx_framework_library`` scheme. + + Python distributed by Apple's Command Line Tools has this special scheme + that's used when: + + * This is a framework build. + * We are installing into the system prefix. + + This does not account for ``pip install --prefix`` (also means we're not + installing to the system prefix), which should use ``posix_prefix``, but + logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But + since ``prefix`` is not available for ``sysconfig.get_default_scheme()``, + which is the stdlib replacement for ``_infer_prefix()``, presumably Apple + wouldn't be able to magically switch between ``osx_framework_library`` and + ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library`` + means its behavior is consistent whether we use the stdlib implementation + or our own, and we deal with this special case in ``get_scheme()`` instead. + """ + return ( + "osx_framework_library" in _AVAILABLE_SCHEMES + and not running_under_virtualenv() + and is_osx_framework() + ) + + +def _infer_prefix() -> str: + """Try to find a prefix scheme for the current platform. + + This tries: + + * A special ``osx_framework_library`` for Python distributed by Apple's + Command Line Tools, when not running in a virtual environment. + * Implementation + OS, used by PyPy on Windows (``pypy_nt``). + * Implementation without OS, used by PyPy on POSIX (``pypy``). + * OS + "prefix", used by CPython on POSIX (``posix_prefix``). + * Just the OS name, used by CPython on Windows (``nt``). + + If none of the above works, fall back to ``posix_prefix``. + """ + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("prefix") + if _should_use_osx_framework_prefix(): + return "osx_framework_library" + implementation_suffixed = f"{sys.implementation.name}_{os.name}" + if implementation_suffixed in _AVAILABLE_SCHEMES: + return implementation_suffixed + if sys.implementation.name in _AVAILABLE_SCHEMES: + return sys.implementation.name + suffixed = f"{os.name}_prefix" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". + return os.name + return "posix_prefix" + + +def _infer_user() -> str: + """Try to find a user scheme for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("user") + if is_osx_framework() and not running_under_virtualenv(): + suffixed = "osx_framework_user" + else: + suffixed = f"{os.name}_user" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. + raise UserInstallationInvalid() + return "posix_user" + + +def _infer_home() -> str: + """Try to find a home for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("home") + suffixed = f"{os.name}_home" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + return "posix_home" + + +# Update these keys if the user sets a custom home. +_HOME_KEYS = [ + "installed_base", + "base", + "installed_platbase", + "platbase", + "prefix", + "exec_prefix", +] +if sysconfig.get_config_var("userbase") is not None: + _HOME_KEYS.append("userbase") + + +def get_scheme( + dist_name: str, + user: bool = False, + home: typing.Optional[str] = None, + root: typing.Optional[str] = None, + isolated: bool = False, + prefix: typing.Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme + :param root: root under which other directories are re-based + :param isolated: ignored, but kept for distutils compatibility (where + this controls whether the user-site pydistutils.cfg is honored) + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + if user and prefix: + raise InvalidSchemeCombination("--user", "--prefix") + if home and prefix: + raise InvalidSchemeCombination("--home", "--prefix") + + if home is not None: + scheme_name = _infer_home() + elif user: + scheme_name = _infer_user() + else: + scheme_name = _infer_prefix() + + # Special case: When installing into a custom prefix, use posix_prefix + # instead of osx_framework_library. See _should_use_osx_framework_prefix() + # docstring for details. + if prefix is not None and scheme_name == "osx_framework_library": + scheme_name = "posix_prefix" + + if home is not None: + variables = {k: home for k in _HOME_KEYS} + elif prefix is not None: + variables = {k: prefix for k in _HOME_KEYS} + else: + variables = {} + + paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) + + # Logic here is very arbitrary, we're doing it for compatibility, don't ask. + # 1. Pip historically uses a special header path in virtual environments. + # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We + # only do the same when not running in a virtual environment because + # pip's historical header path logic (see point 1) did not do this. + if running_under_virtualenv(): + if user: + base = variables.get("userbase", sys.prefix) + else: + base = variables.get("base", sys.prefix) + python_xy = f"python{get_major_minor_version()}" + paths["include"] = os.path.join(base, "include", "site", python_xy) + elif not dist_name: + dist_name = "UNKNOWN" + + scheme = Scheme( + platlib=paths["platlib"], + purelib=paths["purelib"], + headers=os.path.join(paths["include"], dist_name), + scripts=paths["scripts"], + data=paths["data"], + ) + if root is not None: + for key in SCHEME_KEYS: + value = distutils.util.change_root(root, getattr(scheme, key)) + setattr(scheme, key, value) + return scheme + + +def get_bin_prefix() -> str: + # Forcing to use /usr/local/bin for standard macOS framework installs. + if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return sysconfig.get_paths()["scripts"] + + +def get_purelib() -> str: + return sysconfig.get_paths()["purelib"] + + +def get_platlib() -> str: + return sysconfig.get_paths()["platlib"] + + +def get_prefixed_libs(prefix: str) -> typing.Tuple[str, str]: + paths = sysconfig.get_paths(vars={"base": prefix, "platbase": prefix}) + return (paths["purelib"], paths["platlib"]) diff --git a/venv/Lib/site-packages/pip/_internal/locations/base.py b/venv/Lib/site-packages/pip/_internal/locations/base.py new file mode 100644 index 000000000..86dad4a3a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/locations/base.py @@ -0,0 +1,52 @@ +import functools +import os +import site +import sys +import sysconfig +import typing + +from pip._internal.utils import appdirs +from pip._internal.utils.virtualenv import running_under_virtualenv + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + +# FIXME doesn't account for venv linked to global site-packages +site_packages: typing.Optional[str] = sysconfig.get_path("purelib") + + +def get_major_minor_version() -> str: + """ + Return the major-minor version of the current Python as a string, e.g. + "3.7" or "3.10". + """ + return "{}.{}".format(*sys.version_info) + + +def get_src_prefix() -> str: + if running_under_virtualenv(): + src_prefix = os.path.join(sys.prefix, "src") + else: + # FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), "src") + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit("The folder you are executing pip from can no longer be found.") + + # under macOS + virtualenv sys.prefix is not properly resolved + # it is something like /path/to/python/bin/.. + return os.path.abspath(src_prefix) + + +try: + # Use getusersitepackages if this is present, as it ensures that the + # value is initialised properly. + user_site: typing.Optional[str] = site.getusersitepackages() +except AttributeError: + user_site = site.USER_SITE + + +@functools.lru_cache(maxsize=None) +def is_osx_framework() -> bool: + return bool(sysconfig.get_config_var("PYTHONFRAMEWORK")) diff --git a/venv/Lib/site-packages/pip/_internal/main.py b/venv/Lib/site-packages/pip/_internal/main.py new file mode 100644 index 000000000..33c6d24cd --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/main.py @@ -0,0 +1,12 @@ +from typing import List, Optional + + +def main(args: Optional[List[str]] = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/Lib/site-packages/pip/_internal/metadata/__init__.py b/venv/Lib/site-packages/pip/_internal/metadata/__init__.py new file mode 100644 index 000000000..cc037c14f --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/metadata/__init__.py @@ -0,0 +1,62 @@ +from typing import List, Optional + +from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel + +__all__ = [ + "BaseDistribution", + "BaseEnvironment", + "FilesystemWheel", + "MemoryWheel", + "Wheel", + "get_default_environment", + "get_environment", + "get_wheel_distribution", +] + + +def get_default_environment() -> BaseEnvironment: + """Get the default representation for the current environment. + + This returns an Environment instance from the chosen backend. The default + Environment instance should be built from ``sys.path`` and may use caching + to share instance state accorss calls. + """ + from .pkg_resources import Environment + + return Environment.default() + + +def get_environment(paths: Optional[List[str]]) -> BaseEnvironment: + """Get a representation of the environment specified by ``paths``. + + This returns an Environment instance from the chosen backend based on the + given import paths. The backend must build a fresh instance representing + the state of installed distributions when this function is called. + """ + from .pkg_resources import Environment + + return Environment.from_paths(paths) + + +def get_directory_distribution(directory: str) -> BaseDistribution: + """Get the distribution metadata representation in the specified directory. + + This returns a Distribution instance from the chosen backend based on + the given on-disk ``.dist-info`` directory. + """ + from .pkg_resources import Distribution + + return Distribution.from_directory(directory) + + +def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution: + """Get the representation of the specified wheel's distribution metadata. + + This returns a Distribution instance from the chosen backend based on + the given wheel's ``.dist-info`` directory. + + :param canonical_name: Normalized project name of the given wheel. + """ + from .pkg_resources import Distribution + + return Distribution.from_wheel(wheel, canonical_name) diff --git a/venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e74fda85eb03b667785c1630d29a28585c771524 GIT binary patch literal 2294 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 str: + raise NotImplementedError() + + @property + def value(self) -> str: + raise NotImplementedError() + + @property + def group(self) -> str: + raise NotImplementedError() + + +def _convert_installed_files_path( + entry: Tuple[str, ...], + info: Tuple[str, ...], +) -> str: + """Convert a legacy installed-files.txt path into modern RECORD path. + + The legacy format stores paths relative to the info directory, while the + modern format stores paths relative to the package root, e.g. the + site-packages directory. + + :param entry: Path parts of the installed-files.txt entry. + :param info: Path parts of the egg-info directory relative to package root. + :returns: The converted entry. + + For best compatibility with symlinks, this does not use ``abspath()`` or + ``Path.resolve()``, but tries to work with path parts: + + 1. While ``entry`` starts with ``..``, remove the equal amounts of parts + from ``info``; if ``info`` is empty, start appending ``..`` instead. + 2. Join the two directly. + """ + while entry and entry[0] == "..": + if not info or info[-1] == "..": + info += ("..",) + else: + info = info[:-1] + entry = entry[1:] + return str(pathlib.Path(*info, *entry)) + + +class BaseDistribution(Protocol): + def __repr__(self) -> str: + return f"{self.raw_name} {self.version} ({self.location})" + + def __str__(self) -> str: + return f"{self.raw_name} {self.version}" + + @property + def location(self) -> Optional[str]: + """Where the distribution is loaded from. + + A string value is not necessarily a filesystem path, since distributions + can be loaded from other sources, e.g. arbitrary zip archives. ``None`` + means the distribution is created in-memory. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and files in the distribution. + """ + raise NotImplementedError() + + @property + def editable_project_location(self) -> Optional[str]: + """The project location for editable distributions. + + This is the directory where pyproject.toml or setup.py is located. + None if the distribution is not installed in editable mode. + """ + # TODO: this property is relatively costly to compute, memoize it ? + direct_url = self.direct_url + if direct_url: + if direct_url.is_local_editable(): + return url_to_path(direct_url.url) + else: + # Search for an .egg-link file by walking sys.path, as it was + # done before by dist_is_editable(). + egg_link_path = egg_link_path_from_sys_path(self.raw_name) + if egg_link_path: + # TODO: get project location from second line of egg_link file + # (https://github.com/pypa/pip/issues/10243) + return self.location + return None + + @property + def installed_location(self) -> Optional[str]: + """The distribution's "installed" location. + + This should generally be a ``site-packages`` directory. This is + usually ``dist.location``, except for legacy develop-installed packages, + where ``dist.location`` is the source code location, and this is where + the ``.egg-link`` file is. + + The returned location is normalized (in particular, with symlinks removed). + """ + egg_link = egg_link_path_from_location(self.raw_name) + if egg_link: + location = egg_link + elif self.location: + location = self.location + else: + return None + return normalize_path(location) + + @property + def info_location(self) -> Optional[str]: + """Location of the .[egg|dist]-info directory or file. + + Similarly to ``location``, a string value is not necessarily a + filesystem path. ``None`` means the distribution is created in-memory. + + For a modern .dist-info installation on disk, this should be something + like ``{location}/{raw_name}-{version}.dist-info``. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and other files in the distribution. + """ + raise NotImplementedError() + + @property + def installed_by_distutils(self) -> bool: + """Whether this distribution is installed with legacy distutils format. + + A distribution installed with "raw" distutils not patched by setuptools + uses one single file at ``info_location`` to store metadata. We need to + treat this specially on uninstallation. + """ + info_location = self.info_location + if not info_location: + return False + return pathlib.Path(info_location).is_file() + + @property + def installed_as_egg(self) -> bool: + """Whether this distribution is installed as an egg. + + This usually indicates the distribution was installed by (older versions + of) easy_install. + """ + location = self.location + if not location: + return False + return location.endswith(".egg") + + @property + def installed_with_setuptools_egg_info(self) -> bool: + """Whether this distribution is installed with the ``.egg-info`` format. + + This usually indicates the distribution was installed with setuptools + with an old pip version or with ``single-version-externally-managed``. + + Note that this ensure the metadata store is a directory. distutils can + also installs an ``.egg-info``, but as a file, not a directory. This + property is *False* for that case. Also see ``installed_by_distutils``. + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".egg-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def installed_with_dist_info(self) -> bool: + """Whether this distribution is installed with the "modern format". + + This indicates a "modern" installation, e.g. storing metadata in the + ``.dist-info`` directory. This applies to installations made by + setuptools (but through pip, not directly), or anything using the + standardized build backend interface (PEP 517). + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".dist-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def canonical_name(self) -> NormalizedName: + raise NotImplementedError() + + @property + def version(self) -> DistributionVersion: + raise NotImplementedError() + + @property + def setuptools_filename(self) -> str: + """Convert a project name to its setuptools-compatible filename. + + This is a copy of ``pkg_resources.to_filename()`` for compatibility. + """ + return self.raw_name.replace("-", "_") + + @property + def direct_url(self) -> Optional[DirectUrl]: + """Obtain a DirectUrl from this distribution. + + Returns None if the distribution has no `direct_url.json` metadata, + or if `direct_url.json` is invalid. + """ + try: + content = self.read_text(DIRECT_URL_METADATA_NAME) + except FileNotFoundError: + return None + try: + return DirectUrl.from_json(content) + except ( + UnicodeDecodeError, + json.JSONDecodeError, + DirectUrlValidationError, + ) as e: + logger.warning( + "Error parsing %s for %s: %s", + DIRECT_URL_METADATA_NAME, + self.canonical_name, + e, + ) + return None + + @property + def installer(self) -> str: + try: + installer_text = self.read_text("INSTALLER") + except (OSError, ValueError, NoneMetadataError): + return "" # Fail silently if the installer file cannot be read. + for line in installer_text.splitlines(): + cleaned_line = line.strip() + if cleaned_line: + return cleaned_line + return "" + + @property + def editable(self) -> bool: + return bool(self.editable_project_location) + + @property + def local(self) -> bool: + """If distribution is installed in the current virtual environment. + + Always True if we're not in a virtualenv. + """ + if self.installed_location is None: + return False + return is_local(self.installed_location) + + @property + def in_usersite(self) -> bool: + if self.installed_location is None or user_site is None: + return False + return self.installed_location.startswith(normalize_path(user_site)) + + @property + def in_site_packages(self) -> bool: + if self.installed_location is None or site_packages is None: + return False + return self.installed_location.startswith(normalize_path(site_packages)) + + def is_file(self, path: InfoPath) -> bool: + """Check whether an entry in the info directory is a file.""" + raise NotImplementedError() + + def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: + """Iterate through a directory in the info directory. + + Each item yielded would be a path relative to the info directory. + + :raise FileNotFoundError: If ``name`` does not exist in the directory. + :raise NotADirectoryError: If ``name`` does not point to a directory. + """ + raise NotImplementedError() + + def read_text(self, path: InfoPath) -> str: + """Read a file in the info directory. + + :raise FileNotFoundError: If ``name`` does not exist in the directory. + :raise NoneMetadataError: If ``name`` exists in the info directory, but + cannot be read. + """ + raise NotImplementedError() + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + raise NotImplementedError() + + @property + def metadata(self) -> email.message.Message: + """Metadata of distribution parsed from e.g. METADATA or PKG-INFO. + + This should return an empty message if the metadata file is unavailable. + + :raises NoneMetadataError: If the metadata file is available, but does + not contain valid metadata. + """ + raise NotImplementedError() + + @property + def metadata_version(self) -> Optional[str]: + """Value of "Metadata-Version:" in distribution metadata, if available.""" + return self.metadata.get("Metadata-Version") + + @property + def raw_name(self) -> str: + """Value of "Name:" in distribution metadata.""" + # The metadata should NEVER be missing the Name: key, but if it somehow + # does, fall back to the known canonical name. + return self.metadata.get("Name", self.canonical_name) + + @property + def requires_python(self) -> SpecifierSet: + """Value of "Requires-Python:" in distribution metadata. + + If the key does not exist or contains an invalid value, an empty + SpecifierSet should be returned. + """ + value = self.metadata.get("Requires-Python") + if value is None: + return SpecifierSet() + try: + # Convert to str to satisfy the type checker; this can be a Header object. + spec = SpecifierSet(str(value)) + except InvalidSpecifier as e: + message = "Package %r has an invalid Requires-Python: %s" + logger.warning(message, self.raw_name, e) + return SpecifierSet() + return spec + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + """Dependencies of this distribution. + + For modern .dist-info distributions, this is the collection of + "Requires-Dist:" entries in distribution metadata. + """ + raise NotImplementedError() + + def iter_provided_extras(self) -> Iterable[str]: + """Extras provided by this distribution. + + For modern .dist-info distributions, this is the collection of + "Provides-Extra:" entries in distribution metadata. + """ + raise NotImplementedError() + + def _iter_declared_entries_from_record(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("RECORD") + except FileNotFoundError: + return None + # This extra Path-str cast normalizes entries. + return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines())) + + def _iter_declared_entries_from_legacy(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("installed-files.txt") + except FileNotFoundError: + return None + paths = (p for p in text.splitlines(keepends=False) if p) + root = self.location + info = self.info_location + if root is None or info is None: + return paths + try: + info_rel = pathlib.Path(info).relative_to(root) + except ValueError: # info is not relative to root. + return paths + if not info_rel.parts: # info *is* root. + return paths + return ( + _convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts) + for p in paths + ) + + def iter_declared_entries(self) -> Optional[Iterator[str]]: + """Iterate through file entires declared in this distribution. + + For modern .dist-info distributions, this is the files listed in the + ``RECORD`` metadata file. For legacy setuptools distributions, this + comes from ``installed-files.txt``, with entries normalized to be + compatible with the format used by ``RECORD``. + + :return: An iterator for listed entries, or None if the distribution + contains neither ``RECORD`` nor ``installed-files.txt``. + """ + return ( + self._iter_declared_entries_from_record() + or self._iter_declared_entries_from_legacy() + ) + + +class BaseEnvironment: + """An environment containing distributions to introspect.""" + + @classmethod + def default(cls) -> "BaseEnvironment": + raise NotImplementedError() + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> "BaseEnvironment": + raise NotImplementedError() + + def get_distribution(self, name: str) -> Optional["BaseDistribution"]: + """Given a requirement name, return the installed distributions. + + The name may not be normalized. The implementation must canonicalize + it for lookup. + """ + raise NotImplementedError() + + def _iter_distributions(self) -> Iterator["BaseDistribution"]: + """Iterate through installed distributions. + + This function should be implemented by subclass, but never called + directly. Use the public ``iter_distribution()`` instead, which + implements additional logic to make sure the distributions are valid. + """ + raise NotImplementedError() + + def iter_distributions(self) -> Iterator["BaseDistribution"]: + """Iterate through installed distributions.""" + for dist in self._iter_distributions(): + # Make sure the distribution actually comes from a valid Python + # packaging distribution. Pip's AdjacentTempDirectory leaves folders + # e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The + # valid project name pattern is taken from PEP 508. + project_name_valid = re.match( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", + dist.canonical_name, + flags=re.IGNORECASE, + ) + if not project_name_valid: + logger.warning( + "Ignoring invalid distribution %s (%s)", + dist.canonical_name, + dist.location, + ) + continue + yield dist + + def iter_installed_distributions( + self, + local_only: bool = True, + skip: Container[str] = stdlib_pkgs, + include_editables: bool = True, + editables_only: bool = False, + user_only: bool = False, + ) -> Iterator[BaseDistribution]: + """Return a list of installed distributions. + + :param local_only: If True (default), only return installations + local to the current virtualenv, if in a virtualenv. + :param skip: An iterable of canonicalized project names to ignore; + defaults to ``stdlib_pkgs``. + :param include_editables: If False, don't report editables. + :param editables_only: If True, only report editables. + :param user_only: If True, only report installations in the user + site directory. + """ + it = self.iter_distributions() + if local_only: + it = (d for d in it if d.local) + if not include_editables: + it = (d for d in it if not d.editable) + if editables_only: + it = (d for d in it if d.editable) + if user_only: + it = (d for d in it if d.in_usersite) + return (d for d in it if d.canonical_name not in skip) + + +class Wheel(Protocol): + location: str + + def as_zipfile(self) -> zipfile.ZipFile: + raise NotImplementedError() + + +class FilesystemWheel(Wheel): + def __init__(self, location: str) -> None: + self.location = location + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.location, allowZip64=True) + + +class MemoryWheel(Wheel): + def __init__(self, location: str, stream: IO[bytes]) -> None: + self.location = location + self.stream = stream + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.stream, allowZip64=True) diff --git a/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py b/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py new file mode 100644 index 000000000..d39f0ba31 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py @@ -0,0 +1,256 @@ +import email.message +import email.parser +import logging +import os +import pathlib +import zipfile +from typing import Collection, Iterable, Iterator, List, Mapping, NamedTuple, Optional + +from pip._vendor import pkg_resources +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel +from pip._internal.utils.misc import display_path +from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file + +from .base import ( + BaseDistribution, + BaseEntryPoint, + BaseEnvironment, + DistributionVersion, + InfoPath, + Wheel, +) + +logger = logging.getLogger(__name__) + + +class EntryPoint(NamedTuple): + name: str + value: str + group: str + + +class WheelMetadata: + """IMetadataProvider that reads metadata files from a dictionary. + + This also maps metadata decoding exceptions to our internal exception type. + """ + + def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None: + self._metadata = metadata + self._wheel_name = wheel_name + + def has_metadata(self, name: str) -> bool: + return name in self._metadata + + def get_metadata(self, name: str) -> str: + try: + return self._metadata[name].decode() + except UnicodeDecodeError as e: + # Augment the default error with the origin of the file. + raise UnsupportedWheel( + f"Error decoding metadata for {self._wheel_name}: {e} in {name} file" + ) + + def get_metadata_lines(self, name: str) -> Iterable[str]: + return pkg_resources.yield_lines(self.get_metadata(name)) + + def metadata_isdir(self, name: str) -> bool: + return False + + def metadata_listdir(self, name: str) -> List[str]: + return [] + + def run_script(self, script_name: str, namespace: str) -> None: + pass + + +class Distribution(BaseDistribution): + def __init__(self, dist: pkg_resources.Distribution) -> None: + self._dist = dist + + @classmethod + def from_directory(cls, directory: str) -> "Distribution": + dist_dir = directory.rstrip(os.sep) + + # Build a PathMetadata object, from path to metadata. :wink: + base_dir, dist_dir_name = os.path.split(dist_dir) + metadata = pkg_resources.PathMetadata(base_dir, dist_dir) + + # Determine the correct Distribution object type. + if dist_dir.endswith(".egg-info"): + dist_cls = pkg_resources.Distribution + dist_name = os.path.splitext(dist_dir_name)[0] + else: + assert dist_dir.endswith(".dist-info") + dist_cls = pkg_resources.DistInfoDistribution + dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0] + + dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata) + return cls(dist) + + @classmethod + def from_wheel(cls, wheel: Wheel, name: str) -> "Distribution": + """Load the distribution from a given wheel. + + :raises InvalidWheel: Whenever loading of the wheel causes a + :py:exc:`zipfile.BadZipFile` exception to be thrown. + :raises UnsupportedWheel: If the wheel is a valid zip, but malformed + internally. + """ + try: + with wheel.as_zipfile() as zf: + info_dir, _ = parse_wheel(zf, name) + metadata_text = { + path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path) + for path in zf.namelist() + if path.startswith(f"{info_dir}/") + } + except zipfile.BadZipFile as e: + raise InvalidWheel(wheel.location, name) from e + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") + dist = pkg_resources.DistInfoDistribution( + location=wheel.location, + metadata=WheelMetadata(metadata_text, wheel.location), + project_name=name, + ) + return cls(dist) + + @property + def location(self) -> Optional[str]: + return self._dist.location + + @property + def info_location(self) -> Optional[str]: + return self._dist.egg_info + + @property + def installed_by_distutils(self) -> bool: + # A distutils-installed distribution is provided by FileMetadata. This + # provider has a "path" attribute not present anywhere else. Not the + # best introspection logic, but pip has been doing this for a long time. + try: + return bool(self._dist._provider.path) + except AttributeError: + return False + + @property + def canonical_name(self) -> NormalizedName: + return canonicalize_name(self._dist.project_name) + + @property + def version(self) -> DistributionVersion: + return parse_version(self._dist.version) + + def is_file(self, path: InfoPath) -> bool: + return self._dist.has_metadata(str(path)) + + def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: + name = str(path) + if not self._dist.has_metadata(name): + raise FileNotFoundError(name) + if not self._dist.isdir(name): + raise NotADirectoryError(name) + for child in self._dist.metadata_listdir(name): + yield pathlib.PurePosixPath(path, child) + + def read_text(self, path: InfoPath) -> str: + name = str(path) + if not self._dist.has_metadata(name): + raise FileNotFoundError(name) + content = self._dist.get_metadata(name) + if content is None: + raise NoneMetadataError(self, name) + return content + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + for group, entries in self._dist.get_entry_map().items(): + for name, entry_point in entries.items(): + name, _, value = str(entry_point).partition("=") + yield EntryPoint(name=name.strip(), value=value.strip(), group=group) + + @property + def metadata(self) -> email.message.Message: + """ + :raises NoneMetadataError: if the distribution reports `has_metadata()` + True but `get_metadata()` returns None. + """ + if isinstance(self._dist, pkg_resources.DistInfoDistribution): + metadata_name = "METADATA" + else: + metadata_name = "PKG-INFO" + try: + metadata = self.read_text(metadata_name) + except FileNotFoundError: + if self.location: + displaying_path = display_path(self.location) + else: + displaying_path = repr(self.location) + logger.warning("No metadata found in %s", displaying_path) + metadata = "" + feed_parser = email.parser.FeedParser() + feed_parser.feed(metadata) + return feed_parser.close() + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + if extras: # pkg_resources raises on invalid extras, so we sanitize. + extras = frozenset(extras).intersection(self._dist.extras) + return self._dist.requires(extras) + + def iter_provided_extras(self) -> Iterable[str]: + return self._dist.extras + + +class Environment(BaseEnvironment): + def __init__(self, ws: pkg_resources.WorkingSet) -> None: + self._ws = ws + + @classmethod + def default(cls) -> BaseEnvironment: + return cls(pkg_resources.working_set) + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: + return cls(pkg_resources.WorkingSet(paths)) + + def _search_distribution(self, name: str) -> Optional[BaseDistribution]: + """Find a distribution matching the ``name`` in the environment. + + This searches from *all* distributions available in the environment, to + match the behavior of ``pkg_resources.get_distribution()``. + """ + canonical_name = canonicalize_name(name) + for dist in self.iter_distributions(): + if dist.canonical_name == canonical_name: + return dist + return None + + def get_distribution(self, name: str) -> Optional[BaseDistribution]: + # Search the distribution by looking through the working set. + dist = self._search_distribution(name) + if dist: + return dist + + # If distribution could not be found, call working_set.require to + # update the working set, and try to find the distribution again. + # This might happen for e.g. when you install a package twice, once + # using setup.py develop and again using setup.py install. Now when + # running pip uninstall twice, the package gets removed from the + # working set in the first uninstall, so we have to populate the + # working set again so that pip knows about it and the packages gets + # picked up and is successfully uninstalled the second time too. + try: + # We didn't pass in any version specifiers, so this can never + # raise pkg_resources.VersionConflict. + self._ws.require(name) + except pkg_resources.DistributionNotFound: + return None + return self._search_distribution(name) + + def _iter_distributions(self) -> Iterator[BaseDistribution]: + for dist in self._ws: + yield Distribution(dist) diff --git a/venv/Lib/site-packages/pip/_internal/models/__init__.py b/venv/Lib/site-packages/pip/_internal/models/__init__.py new file mode 100644 index 000000000..7855226e4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/__init__.py @@ -0,0 +1,2 @@ +"""A package that contains models that represent entities. +""" diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52c37f76d17e30373793bfb42ceec581ae31ec3e GIT binary patch literal 262 zcmYjM%Sr@64D8v9!@~YUU-z&(R}t}nq8>y<@gl*drzdE1w!7(M7W9w&0{>;flYimK zjO)RIs*r*tl{A}8jpF0svpv-MH8%fIX>+9HTBS4hrmJqveDbz?Y_kt9{t>M_d9fiy z@f6vvQinZn&4RfgV-%|-A>`%sYF=%2oa<6>?%kA$uKks7JlTUg#=>wjFnc&nVOZ%L z!#T;t(83uNmc?~R&lm*O7}sz~Eief#{<1J+%8jEaSfcNnZJ5TXL*m>rzi#S%HHRJ# K#?N>>Uz;DoJWfdf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec25943c590705042dc5e50a20f79a4d73b0d52d GIT binary patch literal 1414 zcmZ`&&u?IAG^l-Fg@Y)KD7jBWAi{kjLK*G(X+uO$Nz(WaPLqVX zaLBch-~RJ<(89HSRUbG9&lfg?#u1xYrVes8q1a9 zwy4TAUW!6+E63NK$f1@-me#~P9#$5-f~)vaJ`cGR_bVM23#WUD?}CyKq-*R*ZQwo^ zD9BhxkbrKW!JJ&Ar5)*VJx8AB1AUxO4`Qx^na~Mg#L|hkhn_d_!TL7XBU|BwY!R3q zOuz5jNYJ-+bs!^eJ@K5sEq7g4$bL~4Hojn;D!?Sx;J{ll-+5N&k7;R*~7uwjX zk9D;rbDQnRawmIOY-Fae^6HT1+k8`+Y*-9e;c+W<$<^wh5>lDfL&AH*UEKvpZDa_Y zh_+}%Bd<$6+WI=aaAYNW^K^0wN9F^4Om7Y5r)4mLzC%WV=_#v!`!$#2B$$bim%Uw)m-^vExB(U=Qp zV0;mw#fRL*muK~kU%igG1)J#85US6j`2ksjF=GMP3htc)GhR881faH#OO9bOD163T zi!mtNNTJ_m?8S(y*$!MQsvJIpa*V310oR8MG)lg%to{wX^I%+OrmkEn1w?&EcmhL^ zz*?TzR0ajn1ooQV1+UvW)2MgWlV-XCg6e_NOHt|GRAtZ(y}9%~yaf-tb9LZcdA+If tdUfw2ICuX4`y*Q@GmFyLwDpS%AZxhOD&Ly2aT^t9u>ISl?X~H${|%NgXp{f| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..192fcc999ec85d2023dc9054a3cfe0e4b79e8b76 GIT binary patch literal 7291 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8e3f5b9b1ab8346e9141c128a049a6d1ac39fa3 GIT binary patch literal 2739 zcmaJ@TW{RP6`mPhmP@bJmf|ROS~N`RqS?Y)r3l;>g6jr#>ZE9~2`aP?i%kiNGm^U8J>Uq z@n0MNY%}(6T3mb_EIz_8_dq0*JZED*nR+xW?4DU_#t)w;=UGU;5H zd(z$Xr7v5D9yAS9TY4(obY)wHhwktSR;^7TugDHo9kn1AR7-XnNw{50lq4gNSLL-s z_ka((auIhtb(OvbNlWq#@LrQ|$?Nh>%oe2!f83}R9+Y~V*!yK+b(zn8`Kih$N=KWe zj$m%Gl@(jGz!ej1>T(=C+RoDLD2XOXx|?jN2+oQ&RFoCQCV8%8ziJm{ypa`&eo|d2 zi~PyU#h~)FvQu586w%X%<^tnBhPe$ghwr9Lw=6qg`+P3yRkvP=IiIr_d!X1~XV3Wn zv2={GIsmJtFkr(qD&IWcdCqhf2PeDt*G9iLN}JK|rp6?rkIQsAR)saAPcr-IbYt`& z)5flRuFD;j+R;N*JRJQt+ZdV5s+E`Kn$aYitj1Ykl?G&1$E8%cS#3NNr;Qi;lP6UW z<5Fhhcmba_9gx8DdBA<{i;&NjFS)&cdb#pSyRCFe9yxtz?qZOq%o>Pg&)74*!w-ZB ztXQYH^Nj5{yN^6DbdhVP1dlySXwunEy$7VnLwhz=^9QW_$B{I+4>z{G;yeiC04X`3rRXdK;JTWGY ztL~t*zaCF=MPXEuj!a%!I&uKUo@i95l_Ch}H;L3r`Eg92dz&<(`qSYq?+BN_EoRqW zr`IL7kqgOfHE5SHk^Bgb+u=Ka=8l8m9y@Ti7|g<_`|m&9za2f@@4*hg0gAo>9)buJ zmpHxvRer&FwZ^rwxT)1d$MN^UXM7Nsce(rDS7Fp#tGtIvK2?=(6OABUN;uN{O!vQG zF=t26|CsBxmZE~o3VF5;0^d(%uS6a6@X>2-SdPx$Q6D@n5CMfIo zh!DCer%;b7m%`Zq|2%ff+vpm(ipNtsP4ZYhPV=c$=6!IPAAy8IaDiBcPJr?d@Q`2U z0e~3%CkSXQ>OH{oWOnN^FkdgY>YlZ)8eW%b3Dpo9HE_jvPt-+oa$8RA3&d;TNiOn zouE#Os*SFLPK_GhbDHG%0B6)o%rv*(_VycqdyG(*kCcp?WHZ0OeM5;(&JB6c3Qs`2 z@M};f{05ZI-o5PF*GT#Q1)xbH_@egJas98PE&z>Hj$S=AsIl)ITGk*rN6I45Rjb}K z%uJczkmgjKT!ILG!Hd~Dmo=&4rgYc%uA4Qhv#yHS?8{x02!XupHpu~|A+cDs~~dDKnx9U?y= za&F$4jk<*cYSneK31C+sgbUkVAPv3=9q~fA;nzzG-L~*<@#W=ir{);++NfnuCipX= z>yMl(`W^J+evDo%OWkjpG;Z~$Hp@+uv^VM-ryaYG1XOjcFm=k;@?WQF72Iunc8`jN NA*HXgj_8Ob=YOFFnLPji literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d52b079441d0769bef3e7cb396b779fc014fbf2 GIT binary patch literal 1231 zcmZ`&&2AGh5VrR(o3KSK&>qTVuQ{}lI3k1)AbuoNRs395E3D1hX&pAZi^r*G)EkvJ z@eYL>Pr$oa;>3wp-~uz72EqYH9(^;jw&(k1(rj!D7_P6czm21SvG3%pFO0E!xZxHW z$t15>#ve23N&lQl|Gk%a%9DW%W%SX@e8fE&cQ}yz1snE%;5l|sl3icXr2|h8D7;g$ z%#%FxkMQo#JPV|+LK)!3n;9>EYL_MVRP5zzv&dESvHR6m#mM=pM?+4~Bu+z>K+y#`RE@DNaSl zeCU}i%IuK2@yBcvqRR*XJ+a9byZ@H7F7B{Tt*MKd62c9HK%R3PCE*ew-p-5aGSd?{ zRV9W|Xs8;CLOUO<>2&Dc!=^1;P^zlJHvcW@8kN-5wPFnPr;k~{V{g~nO$@~sTgTS6 zaCy9VzxSWBp-YfI&fb1E tdP{k!02dsd9zJ#POFT?yjX}qS7`XV(QlPsWy{`8$yXq&~9uN57*KYy?LkR!? literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..adf3470afff9b60379f306a321395665fba049b7 GIT binary patch literal 10163 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 xP1;oxF5Iw#jTw45``#<#ZqGm+yX^yB0#fg~5J{ zVekmL`v?q2JW^;GO`|CISm9+njU)6F@t7yC5l?=?(}brl&>;IA_M<^mwZAUBG@2>! z`y*qQ%%2(Utxy;Ute>N4(uq5D=Y5`vlxNUeA``9m z5pRRv0Y3%5%acWqzr}m6(`lP0faa*W|3WB{2P6|K7Qzah3-^k53A86VXN4;j^TH8- zAxO?NmmG$~?V?C=8%7q!5^h#n8OEhPuaiIsk=l8t6iktYRKgAGl{abCgITkpYo;#+ zuij}!U@2s^a0GM0RY#B(*r9ntPt|XZq;sj6U03hQb8W1kR=g~w6^<5be_`}!Y%`$C zLh+Do2h#~ARJF>i@TJvx*syEC$I#E9yCIlO%A*q5jN>2EO|(H2Z7|qq6NAN@1Z=!X z!6rNcDr2^S@G~m{J&fE%D>3u$f$L$nzJ6f%v|yGk$vz9Gn#w;)jKvC(2kzH!Y7+xi?p3aYu)3IKGbv^hXy`6W9CS)GukjJGqZ3!w?*0^#|c zhyuFMLOQ9r_<;mjfuJt8S_+F>G7r>o%O+6JtUxF+ihoSzr6*TR$>7#fIzY~)^Tb?1 z9T?GKwF4fe|HIhb3OqQw*#h8mvn-gGb9Gp|2hX?iJ)YF^eGs6PKoC^BxhHun77RFn zr)bECDJO1mj7K&F$quqA0k#+atNb^}hM&o`Iy;>~*{qvAFP&qv$0jeALVGuRD*adG zd^VES`QwQ-L9nwcp|57o8ZMMOxv6$|!wWYo)>WIr zF6k+KFTAZIFzx$El;JE2UpIR7!CkLqxQiMjqw#1w=!86)Ed`}jmr^*cRKf32`m$td zyV9bRn;fP)lsaX+12>r)qilHGHV)=qFoB0X6HwU%O!yDDhhW+$iP|Z?hokT%*BIk} zaE$-X68slV@t;|SuW{?>k2-2RNUO}R3lMC5Q1u~@GrS>Z*pM?kd|C~faOfV88dpG5 UwLfp}_(c>T1zbJU!*9p`0tW5h+yDRo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8157080cfee8920e60545be36c67b6d40700be3 GIT binary patch literal 3447 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 I+Dp#A0Kt` None: + self.name = name + self.version = parse_version(version) + self.link = link + + super().__init__( + key=(self.name, self.version, self.link), + defining_class=InstallationCandidate, + ) + + def __repr__(self) -> str: + return "".format( + self.name, + self.version, + self.link, + ) + + def __str__(self) -> str: + return "{!r} candidate (version {} at {})".format( + self.name, + self.version, + self.link, + ) diff --git a/venv/Lib/site-packages/pip/_internal/models/direct_url.py b/venv/Lib/site-packages/pip/_internal/models/direct_url.py new file mode 100644 index 000000000..92060d45d --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/direct_url.py @@ -0,0 +1,220 @@ +""" PEP 610 """ +import json +import re +import urllib.parse +from typing import Any, Dict, Iterable, Optional, Type, TypeVar, Union + +__all__ = [ + "DirectUrl", + "DirectUrlValidationError", + "DirInfo", + "ArchiveInfo", + "VcsInfo", +] + +T = TypeVar("T") + +DIRECT_URL_METADATA_NAME = "direct_url.json" +ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$") + + +class DirectUrlValidationError(Exception): + pass + + +def _get( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> Optional[T]: + """Get value from dictionary and verify expected type.""" + if key not in d: + return default + value = d[key] + if not isinstance(value, expected_type): + raise DirectUrlValidationError( + "{!r} has unexpected type for {} (expected {})".format( + value, key, expected_type + ) + ) + return value + + +def _get_required( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> T: + value = _get(d, expected_type, key, default) + if value is None: + raise DirectUrlValidationError(f"{key} must have a value") + return value + + +def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType": + infos = [info for info in infos if info is not None] + if not infos: + raise DirectUrlValidationError( + "missing one of archive_info, dir_info, vcs_info" + ) + if len(infos) > 1: + raise DirectUrlValidationError( + "more than one of archive_info, dir_info, vcs_info" + ) + assert infos[0] is not None + return infos[0] + + +def _filter_none(**kwargs: Any) -> Dict[str, Any]: + """Make dict excluding None values.""" + return {k: v for k, v in kwargs.items() if v is not None} + + +class VcsInfo: + name = "vcs_info" + + def __init__( + self, + vcs: str, + commit_id: str, + requested_revision: Optional[str] = None, + resolved_revision: Optional[str] = None, + resolved_revision_type: Optional[str] = None, + ) -> None: + self.vcs = vcs + self.requested_revision = requested_revision + self.commit_id = commit_id + self.resolved_revision = resolved_revision + self.resolved_revision_type = resolved_revision_type + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]: + if d is None: + return None + return cls( + vcs=_get_required(d, str, "vcs"), + commit_id=_get_required(d, str, "commit_id"), + requested_revision=_get(d, str, "requested_revision"), + resolved_revision=_get(d, str, "resolved_revision"), + resolved_revision_type=_get(d, str, "resolved_revision_type"), + ) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none( + vcs=self.vcs, + requested_revision=self.requested_revision, + commit_id=self.commit_id, + resolved_revision=self.resolved_revision, + resolved_revision_type=self.resolved_revision_type, + ) + + +class ArchiveInfo: + name = "archive_info" + + def __init__( + self, + hash: Optional[str] = None, + ) -> None: + self.hash = hash + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]: + if d is None: + return None + return cls(hash=_get(d, str, "hash")) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(hash=self.hash) + + +class DirInfo: + name = "dir_info" + + def __init__( + self, + editable: bool = False, + ) -> None: + self.editable = editable + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]: + if d is None: + return None + return cls(editable=_get_required(d, bool, "editable", default=False)) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(editable=self.editable or None) + + +InfoType = Union[ArchiveInfo, DirInfo, VcsInfo] + + +class DirectUrl: + def __init__( + self, + url: str, + info: InfoType, + subdirectory: Optional[str] = None, + ) -> None: + self.url = url + self.info = info + self.subdirectory = subdirectory + + def _remove_auth_from_netloc(self, netloc: str) -> str: + if "@" not in netloc: + return netloc + user_pass, netloc_no_user_pass = netloc.split("@", 1) + if ( + isinstance(self.info, VcsInfo) + and self.info.vcs == "git" + and user_pass == "git" + ): + return netloc + if ENV_VAR_RE.match(user_pass): + return netloc + return netloc_no_user_pass + + @property + def redacted_url(self) -> str: + """url with user:password part removed unless it is formed with + environment variables as specified in PEP 610, or it is ``git`` + in the case of a git URL. + """ + purl = urllib.parse.urlsplit(self.url) + netloc = self._remove_auth_from_netloc(purl.netloc) + surl = urllib.parse.urlunsplit( + (purl.scheme, netloc, purl.path, purl.query, purl.fragment) + ) + return surl + + def validate(self) -> None: + self.from_dict(self.to_dict()) + + @classmethod + def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl": + return DirectUrl( + url=_get_required(d, str, "url"), + subdirectory=_get(d, str, "subdirectory"), + info=_exactly_one_of( + [ + ArchiveInfo._from_dict(_get(d, dict, "archive_info")), + DirInfo._from_dict(_get(d, dict, "dir_info")), + VcsInfo._from_dict(_get(d, dict, "vcs_info")), + ] + ), + ) + + def to_dict(self) -> Dict[str, Any]: + res = _filter_none( + url=self.redacted_url, + subdirectory=self.subdirectory, + ) + res[self.info.name] = self.info._to_dict() + return res + + @classmethod + def from_json(cls, s: str) -> "DirectUrl": + return cls.from_dict(json.loads(s)) + + def to_json(self) -> str: + return json.dumps(self.to_dict(), sort_keys=True) + + def is_local_editable(self) -> bool: + return isinstance(self.info, DirInfo) and self.info.editable diff --git a/venv/Lib/site-packages/pip/_internal/models/format_control.py b/venv/Lib/site-packages/pip/_internal/models/format_control.py new file mode 100644 index 000000000..db3995eac --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/format_control.py @@ -0,0 +1,80 @@ +from typing import FrozenSet, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import CommandError + + +class FormatControl: + """Helper for managing formats from which a package can be installed.""" + + __slots__ = ["no_binary", "only_binary"] + + def __init__( + self, + no_binary: Optional[Set[str]] = None, + only_binary: Optional[Set[str]] = None, + ) -> None: + if no_binary is None: + no_binary = set() + if only_binary is None: + only_binary = set() + + self.no_binary = no_binary + self.only_binary = only_binary + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return NotImplemented + + if self.__slots__ != other.__slots__: + return False + + return all(getattr(self, k) == getattr(other, k) for k in self.__slots__) + + def __repr__(self) -> str: + return "{}({}, {})".format( + self.__class__.__name__, self.no_binary, self.only_binary + ) + + @staticmethod + def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None: + if value.startswith("-"): + raise CommandError( + "--no-binary / --only-binary option requires 1 argument." + ) + new = value.split(",") + while ":all:" in new: + other.clear() + target.clear() + target.add(":all:") + del new[: new.index(":all:") + 1] + # Without a none, we want to discard everything as :all: covers it + if ":none:" not in new: + return + for name in new: + if name == ":none:": + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]: + result = {"binary", "source"} + if canonical_name in self.only_binary: + result.discard("source") + elif canonical_name in self.no_binary: + result.discard("binary") + elif ":all:" in self.only_binary: + result.discard("source") + elif ":all:" in self.no_binary: + result.discard("binary") + return frozenset(result) + + def disallow_binaries(self) -> None: + self.handle_mutual_excludes( + ":all:", + self.no_binary, + self.only_binary, + ) diff --git a/venv/Lib/site-packages/pip/_internal/models/index.py b/venv/Lib/site-packages/pip/_internal/models/index.py new file mode 100644 index 000000000..b94c32511 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/index.py @@ -0,0 +1,28 @@ +import urllib.parse + + +class PackageIndex: + """Represents a Package Index and provides easier access to endpoints""" + + __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"] + + def __init__(self, url: str, file_storage_domain: str) -> None: + super().__init__() + self.url = url + self.netloc = urllib.parse.urlsplit(url).netloc + self.simple_url = self._url_for_path("simple") + self.pypi_url = self._url_for_path("pypi") + + # This is part of a temporary hack used to block installs of PyPI + # packages which depend on external urls only necessary until PyPI can + # block such packages themselves + self.file_storage_domain = file_storage_domain + + def _url_for_path(self, path: str) -> str: + return urllib.parse.urljoin(self.url, path) + + +PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org") +TestPyPI = PackageIndex( + "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org" +) diff --git a/venv/Lib/site-packages/pip/_internal/models/link.py b/venv/Lib/site-packages/pip/_internal/models/link.py new file mode 100644 index 000000000..6069b278b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/link.py @@ -0,0 +1,288 @@ +import functools +import logging +import os +import posixpath +import re +import urllib.parse +from typing import TYPE_CHECKING, Dict, List, NamedTuple, Optional, Tuple, Union + +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + redact_auth_from_url, + split_auth_from_netloc, + splitext, +) +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.urls import path_to_url, url_to_path + +if TYPE_CHECKING: + from pip._internal.index.collector import HTMLPage + +logger = logging.getLogger(__name__) + + +_SUPPORTED_HASHES = ("sha1", "sha224", "sha384", "sha256", "sha512", "md5") + + +class Link(KeyBasedCompareMixin): + """Represents a parsed link from a Package Index's simple URL""" + + __slots__ = [ + "_parsed_url", + "_url", + "comes_from", + "requires_python", + "yanked_reason", + "cache_link_parsing", + ] + + def __init__( + self, + url: str, + comes_from: Optional[Union[str, "HTMLPage"]] = None, + requires_python: Optional[str] = None, + yanked_reason: Optional[str] = None, + cache_link_parsing: bool = True, + ) -> None: + """ + :param url: url of the resource pointed to (href of the link) + :param comes_from: instance of HTMLPage where the link was found, + or string. + :param requires_python: String containing the `Requires-Python` + metadata field, specified in PEP 345. This may be specified by + a data-requires-python attribute in the HTML link tag, as + described in PEP 503. + :param yanked_reason: the reason the file has been yanked, if the + file has been yanked, or None if the file hasn't been yanked. + This is the value of the "data-yanked" attribute, if present, in + a simple repository HTML link. If the file has been yanked but + no reason was provided, this should be the empty string. See + PEP 592 for more information and the specification. + :param cache_link_parsing: A flag that is used elsewhere to determine + whether resources retrieved from this link + should be cached. PyPI index urls should + generally have this set to False, for + example. + """ + + # url can be a UNC windows share + if url.startswith("\\\\"): + url = path_to_url(url) + + self._parsed_url = urllib.parse.urlsplit(url) + # Store the url as a private attribute to prevent accidentally + # trying to set a new value. + self._url = url + + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + self.yanked_reason = yanked_reason + + super().__init__(key=url, defining_class=Link) + + self.cache_link_parsing = cache_link_parsing + + def __str__(self) -> str: + if self.requires_python: + rp = f" (requires-python:{self.requires_python})" + else: + rp = "" + if self.comes_from: + return "{} (from {}){}".format( + redact_auth_from_url(self._url), self.comes_from, rp + ) + else: + return redact_auth_from_url(str(self._url)) + + def __repr__(self) -> str: + return f"" + + @property + def url(self) -> str: + return self._url + + @property + def filename(self) -> str: + path = self.path.rstrip("/") + name = posixpath.basename(path) + if not name: + # Make sure we don't leak auth information if the netloc + # includes a username and password. + netloc, user_pass = split_auth_from_netloc(self.netloc) + return netloc + + name = urllib.parse.unquote(name) + assert name, f"URL {self._url!r} produced no filename" + return name + + @property + def file_path(self) -> str: + return url_to_path(self.url) + + @property + def scheme(self) -> str: + return self._parsed_url.scheme + + @property + def netloc(self) -> str: + """ + This can contain auth information. + """ + return self._parsed_url.netloc + + @property + def path(self) -> str: + return urllib.parse.unquote(self._parsed_url.path) + + def splitext(self) -> Tuple[str, str]: + return splitext(posixpath.basename(self.path.rstrip("/"))) + + @property + def ext(self) -> str: + return self.splitext()[1] + + @property + def url_without_fragment(self) -> str: + scheme, netloc, path, query, fragment = self._parsed_url + return urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + + _egg_fragment_re = re.compile(r"[#&]egg=([^&]*)") + + @property + def egg_fragment(self) -> Optional[str]: + match = self._egg_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + _subdirectory_fragment_re = re.compile(r"[#&]subdirectory=([^&]*)") + + @property + def subdirectory_fragment(self) -> Optional[str]: + match = self._subdirectory_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile( + r"({choices})=([a-f0-9]+)".format(choices="|".join(_SUPPORTED_HASHES)) + ) + + @property + def hash(self) -> Optional[str]: + match = self._hash_re.search(self._url) + if match: + return match.group(2) + return None + + @property + def hash_name(self) -> Optional[str]: + match = self._hash_re.search(self._url) + if match: + return match.group(1) + return None + + @property + def show_url(self) -> str: + return posixpath.basename(self._url.split("#", 1)[0].split("?", 1)[0]) + + @property + def is_file(self) -> bool: + return self.scheme == "file" + + def is_existing_dir(self) -> bool: + return self.is_file and os.path.isdir(self.file_path) + + @property + def is_wheel(self) -> bool: + return self.ext == WHEEL_EXTENSION + + @property + def is_vcs(self) -> bool: + from pip._internal.vcs import vcs + + return self.scheme in vcs.all_schemes + + @property + def is_yanked(self) -> bool: + return self.yanked_reason is not None + + @property + def has_hash(self) -> bool: + return self.hash_name is not None + + def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: + """ + Return True if the link has a hash and it is allowed. + """ + if hashes is None or not self.has_hash: + return False + # Assert non-None so mypy knows self.hash_name and self.hash are str. + assert self.hash_name is not None + assert self.hash is not None + + return hashes.is_hash_allowed(self.hash_name, hex_digest=self.hash) + + +class _CleanResult(NamedTuple): + """Convert link for equivalency check. + + This is used in the resolver to check whether two URL-specified requirements + likely point to the same distribution and can be considered equivalent. This + equivalency logic avoids comparing URLs literally, which can be too strict + (e.g. "a=1&b=2" vs "b=2&a=1") and produce conflicts unexpecting to users. + + Currently this does three things: + + 1. Drop the basic auth part. This is technically wrong since a server can + serve different content based on auth, but if it does that, it is even + impossible to guarantee two URLs without auth are equivalent, since + the user can input different auth information when prompted. So the + practical solution is to assume the auth doesn't affect the response. + 2. Parse the query to avoid the ordering issue. Note that ordering under the + same key in the query are NOT cleaned; i.e. "a=1&a=2" and "a=2&a=1" are + still considered different. + 3. Explicitly drop most of the fragment part, except ``subdirectory=`` and + hash values, since it should have no impact the downloaded content. Note + that this drops the "egg=" part historically used to denote the requested + project (and extras), which is wrong in the strictest sense, but too many + people are supplying it inconsistently to cause superfluous resolution + conflicts, so we choose to also ignore them. + """ + + parsed: urllib.parse.SplitResult + query: Dict[str, List[str]] + subdirectory: str + hashes: Dict[str, str] + + +def _clean_link(link: Link) -> _CleanResult: + parsed = link._parsed_url + netloc = parsed.netloc.rsplit("@", 1)[-1] + # According to RFC 8089, an empty host in file: means localhost. + if parsed.scheme == "file" and not netloc: + netloc = "localhost" + fragment = urllib.parse.parse_qs(parsed.fragment) + if "egg" in fragment: + logger.debug("Ignoring egg= fragment in %s", link) + try: + # If there are multiple subdirectory values, use the first one. + # This matches the behavior of Link.subdirectory_fragment. + subdirectory = fragment["subdirectory"][0] + except (IndexError, KeyError): + subdirectory = "" + # If there are multiple hash values under the same algorithm, use the + # first one. This matches the behavior of Link.hash_value. + hashes = {k: fragment[k][0] for k in _SUPPORTED_HASHES if k in fragment} + return _CleanResult( + parsed=parsed._replace(netloc=netloc, query="", fragment=""), + query=urllib.parse.parse_qs(parsed.query), + subdirectory=subdirectory, + hashes=hashes, + ) + + +@functools.lru_cache(maxsize=None) +def links_equivalent(link1: Link, link2: Link) -> bool: + return _clean_link(link1) == _clean_link(link2) diff --git a/venv/Lib/site-packages/pip/_internal/models/scheme.py b/venv/Lib/site-packages/pip/_internal/models/scheme.py new file mode 100644 index 000000000..f51190ac6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/scheme.py @@ -0,0 +1,31 @@ +""" +For types associated with installation schemes. + +For a general overview of available schemes and their context, see +https://docs.python.org/3/install/index.html#alternate-installation. +""" + + +SCHEME_KEYS = ["platlib", "purelib", "headers", "scripts", "data"] + + +class Scheme: + """A Scheme holds paths which are used as the base directories for + artifacts associated with a Python package. + """ + + __slots__ = SCHEME_KEYS + + def __init__( + self, + platlib: str, + purelib: str, + headers: str, + scripts: str, + data: str, + ) -> None: + self.platlib = platlib + self.purelib = purelib + self.headers = headers + self.scripts = scripts + self.data = data diff --git a/venv/Lib/site-packages/pip/_internal/models/search_scope.py b/venv/Lib/site-packages/pip/_internal/models/search_scope.py new file mode 100644 index 000000000..e4e54c2f4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/search_scope.py @@ -0,0 +1,129 @@ +import itertools +import logging +import os +import posixpath +import urllib.parse +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.models.index import PyPI +from pip._internal.utils.compat import has_tls +from pip._internal.utils.misc import normalize_path, redact_auth_from_url + +logger = logging.getLogger(__name__) + + +class SearchScope: + + """ + Encapsulates the locations that pip is configured to search. + """ + + __slots__ = ["find_links", "index_urls"] + + @classmethod + def create( + cls, + find_links: List[str], + index_urls: List[str], + ) -> "SearchScope": + """ + Create a SearchScope object after normalizing the `find_links`. + """ + # Build find_links. If an argument starts with ~, it may be + # a local file relative to a home directory. So try normalizing + # it and if it exists, use the normalized version. + # This is deliberately conservative - it might be fine just to + # blindly normalize anything starting with a ~... + built_find_links: List[str] = [] + for link in find_links: + if link.startswith("~"): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + built_find_links.append(link) + + # If we don't have TLS enabled, then WARN if anyplace we're looking + # relies on TLS. + if not has_tls(): + for link in itertools.chain(index_urls, built_find_links): + parsed = urllib.parse.urlparse(link) + if parsed.scheme == "https": + logger.warning( + "pip is configured with locations that require " + "TLS/SSL, however the ssl module in Python is not " + "available." + ) + break + + return cls( + find_links=built_find_links, + index_urls=index_urls, + ) + + def __init__( + self, + find_links: List[str], + index_urls: List[str], + ) -> None: + self.find_links = find_links + self.index_urls = index_urls + + def get_formatted_locations(self) -> str: + lines = [] + redacted_index_urls = [] + if self.index_urls and self.index_urls != [PyPI.simple_url]: + for url in self.index_urls: + + redacted_index_url = redact_auth_from_url(url) + + # Parse the URL + purl = urllib.parse.urlsplit(redacted_index_url) + + # URL is generally invalid if scheme and netloc is missing + # there are issues with Python and URL parsing, so this test + # is a bit crude. See bpo-20271, bpo-23505. Python doesn't + # always parse invalid URLs correctly - it should raise + # exceptions for malformed URLs + if not purl.scheme and not purl.netloc: + logger.warning( + 'The index url "%s" seems invalid, please provide a scheme.', + redacted_index_url, + ) + + redacted_index_urls.append(redacted_index_url) + + lines.append( + "Looking in indexes: {}".format(", ".join(redacted_index_urls)) + ) + + if self.find_links: + lines.append( + "Looking in links: {}".format( + ", ".join(redact_auth_from_url(url) for url in self.find_links) + ) + ) + return "\n".join(lines) + + def get_index_urls_locations(self, project_name: str) -> List[str]: + """Returns the locations found via self.index_urls + + Checks the url_name on the main (first in the list) index and + use this url_name to produce all locations + """ + + def mkurl_pypi_url(url: str) -> str: + loc = posixpath.join( + url, urllib.parse.quote(canonicalize_name(project_name)) + ) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's + # behavior. + if not loc.endswith("/"): + loc = loc + "/" + return loc + + return [mkurl_pypi_url(url) for url in self.index_urls] diff --git a/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py b/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py new file mode 100644 index 000000000..977bc4caa --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py @@ -0,0 +1,51 @@ +from typing import Optional + +from pip._internal.models.format_control import FormatControl + + +class SelectionPreferences: + """ + Encapsulates the candidate selection preferences for downloading + and installing files. + """ + + __slots__ = [ + "allow_yanked", + "allow_all_prereleases", + "format_control", + "prefer_binary", + "ignore_requires_python", + ] + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + allow_yanked: bool, + allow_all_prereleases: bool = False, + format_control: Optional[FormatControl] = None, + prefer_binary: bool = False, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """Create a SelectionPreferences object. + + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param format_control: A FormatControl object or None. Used to control + the selection of source packages / binary packages when consulting + the index and links. + :param prefer_binary: Whether to prefer an old, but valid, binary + dist over a new source dist. + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self.allow_yanked = allow_yanked + self.allow_all_prereleases = allow_all_prereleases + self.format_control = format_control + self.prefer_binary = prefer_binary + self.ignore_requires_python = ignore_requires_python diff --git a/venv/Lib/site-packages/pip/_internal/models/target_python.py b/venv/Lib/site-packages/pip/_internal/models/target_python.py new file mode 100644 index 000000000..744bd7ef5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/target_python.py @@ -0,0 +1,110 @@ +import sys +from typing import List, Optional, Tuple + +from pip._vendor.packaging.tags import Tag + +from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot +from pip._internal.utils.misc import normalize_version_info + + +class TargetPython: + + """ + Encapsulates the properties of a Python interpreter one is targeting + for a package install, download, etc. + """ + + __slots__ = [ + "_given_py_version_info", + "abis", + "implementation", + "platforms", + "py_version", + "py_version_info", + "_valid_tags", + ] + + def __init__( + self, + platforms: Optional[List[str]] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + abis: Optional[List[str]] = None, + implementation: Optional[str] = None, + ) -> None: + """ + :param platforms: A list of strings or None. If None, searches for + packages that are supported by the current system. Otherwise, will + find packages that can be built on the platforms passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param py_version_info: An optional tuple of ints representing the + Python version information to use (e.g. `sys.version_info[:3]`). + This can have length 1, 2, or 3 when provided. + :param abis: A list of strings or None. This is passed to + compatibility_tags.py's get_supported() function as is. + :param implementation: A string or None. This is passed to + compatibility_tags.py's get_supported() function as is. + """ + # Store the given py_version_info for when we call get_supported(). + self._given_py_version_info = py_version_info + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + py_version = ".".join(map(str, py_version_info[:2])) + + self.abis = abis + self.implementation = implementation + self.platforms = platforms + self.py_version = py_version + self.py_version_info = py_version_info + + # This is used to cache the return value of get_tags(). + self._valid_tags: Optional[List[Tag]] = None + + def format_given(self) -> str: + """ + Format the given, non-None attributes for display. + """ + display_version = None + if self._given_py_version_info is not None: + display_version = ".".join( + str(part) for part in self._given_py_version_info + ) + + key_values = [ + ("platforms", self.platforms), + ("version_info", display_version), + ("abis", self.abis), + ("implementation", self.implementation), + ] + return " ".join( + f"{key}={value!r}" for key, value in key_values if value is not None + ) + + def get_tags(self) -> List[Tag]: + """ + Return the supported PEP 425 tags to check wheel candidates against. + + The tags are returned in order of preference (most preferred first). + """ + if self._valid_tags is None: + # Pass versions=None if no py_version_info was given since + # versions=None uses special default logic. + py_version_info = self._given_py_version_info + if py_version_info is None: + version = None + else: + version = version_info_to_nodot(py_version_info) + + tags = get_supported( + version=version, + platforms=self.platforms, + abis=self.abis, + impl=self.implementation, + ) + self._valid_tags = tags + + return self._valid_tags diff --git a/venv/Lib/site-packages/pip/_internal/models/wheel.py b/venv/Lib/site-packages/pip/_internal/models/wheel.py new file mode 100644 index 000000000..e09161227 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/models/wheel.py @@ -0,0 +1,89 @@ +"""Represents a wheel file and provides access to the various parts of the +name that have meaning. +""" +import re +from typing import Dict, Iterable, List + +from pip._vendor.packaging.tags import Tag + +from pip._internal.exceptions import InvalidWheelFilename + + +class Wheel: + """A wheel file""" + + wheel_file_re = re.compile( + r"""^(?P(?P.+?)-(?P.*?)) + ((-(?P\d[^-]*?))?-(?P.+?)-(?P.+?)-(?P.+?) + \.whl|\.dist-info)$""", + re.VERBOSE, + ) + + def __init__(self, filename: str) -> None: + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename(f"{filename} is not a valid wheel filename.") + self.filename = filename + self.name = wheel_info.group("name").replace("_", "-") + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group("ver").replace("_", "-") + self.build_tag = wheel_info.group("build") + self.pyversions = wheel_info.group("pyver").split(".") + self.abis = wheel_info.group("abi").split(".") + self.plats = wheel_info.group("plat").split(".") + + # All the tag combinations from this file + self.file_tags = { + Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats + } + + def get_formatted_file_tags(self) -> List[str]: + """Return the wheel's tags as a sorted list of strings.""" + return sorted(str(tag) for tag in self.file_tags) + + def support_index_min(self, tags: List[Tag]) -> int: + """Return the lowest index that one of the wheel's file_tag combinations + achieves in the given list of supported tags. + + For example, if there are 8 supported tags and one of the file tags + is first in the list, then return 0. + + :param tags: the PEP 425 tags to check the wheel against, in order + with most preferred first. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + return min(tags.index(tag) for tag in self.file_tags if tag in tags) + + def find_most_preferred_tag( + self, tags: List[Tag], tag_to_priority: Dict[Tag, int] + ) -> int: + """Return the priority of the most preferred tag that one of the wheel's file + tag combinations achieves in the given list of supported tags using the given + tag_to_priority mapping, where lower priorities are more-preferred. + + This is used in place of support_index_min in some cases in order to avoid + an expensive linear scan of a large list of tags. + + :param tags: the PEP 425 tags to check the wheel against. + :param tag_to_priority: a mapping from tag to priority of that tag, where + lower is more preferred. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + return min( + tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority + ) + + def supported(self, tags: Iterable[Tag]) -> bool: + """Return whether the wheel is compatible with one of the given tags. + + :param tags: the PEP 425 tags to check the wheel against. + """ + return not self.file_tags.isdisjoint(tags) diff --git a/venv/Lib/site-packages/pip/_internal/network/__init__.py b/venv/Lib/site-packages/pip/_internal/network/__init__.py new file mode 100644 index 000000000..b51bde91b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/__init__.py @@ -0,0 +1,2 @@ +"""Contains purely network-related utilities. +""" diff --git a/venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f2f60e02ddca4c6ac8929abdacef0df36a1bca8 GIT binary patch literal 250 zcmYk1!Ab)`42EZWaVhj2_F81S;88?`itRx}EM6pZnB9pIyPX*(nM!@5K7sF2@Z?)~ za#lR}L;mpPkU#O0$yjB5tUuec+`k6+uOh=$E-tfK^`vaEQq$4<>D)UpU(9Be=V$svD1{(+ox%cX#v0tE0Om*kK@)=K$a^~`WcjF2I^ zy1IVXtM|V5)ni((`v!jh^e6we^>;T7A5YpS7}vxUduD7joq#G{FdLFYt89zr(5gQTlHR})zIH=_f&7bHLvrP?m};| zwW#x6_jGTmwbVP)I@4QjE%(m0&i2l=&gr^p_k3@qwPG4#QCxUxwk`@!T%x~@b>3*b zF?99XE=QNYFp{@yLj?POY8v#%S#mA^9$w`>`d@i!K4WF8 zFN`nIx^?B(R}!au@0oiBpA!{v>Ab;fqjw$emGef&VmE$7vFLB)WYeGvB|HCV3PmSr8|=ke#S4g10{% zbo2Ob+C%v-qAYGx-)0acJczO^ZO2hAc(C0ah@hQv5p+`N_htGd=5ewew58xQQPia| z1I&t682g(%NIO9?T8Rc z{jO*-<8)shsw^oh_t!;VaQ;XroPO4jejd0B{&yJ>q;hvD@C zKTbO7^LKtF_9Y1<&Vp<=?)M=x4w2<4BpHZr+CuN{cCeZ$iw5=vnUG1;6Uvn$AIPN5 zNHn9Li#M6V9X#2;ASn!K=SBvVduR;r44vHAF%K9NuWB1P+doq(9+Yln&&aJqo3p|o zB`feQ%%|+YDlBdeOnJSqb{srz2fZH}U%+@CqJ_Mxds$_#+&HXIzh~^gE^K+PFbjLS zec1~$d;1;JIB=le3+P|vcJ3F>NWIMnqeH#T1Lw~jnx)KEUskCZ*kmoYq8sy?bDO0K3uGS^xaIrPmmS@midE*&Wjnr@QRsC>$=&G_8$poub zR+h`AE0@qucb4a91e<1*7b$B&Q~uGASCN0db?5fx=TMSt^T8m?qRqQ$d(eZeWt;cn z{G-9v=6Wo%{KjW8-4X446B2u}`ANLBnZ>!d(U01@(YDAo`*Hs!^c~g?)4Dk_$eSeV zwf?@ErzMYeua*35%$&WC#ItOZF=qN^%|z~1&GJppY?!WTvzjjRP4>dBvH!8Fjpt}V zH7^^sZF+yfp37AX(Z+M^SH;)Q@npbcLl`X+0MDw7U*(ptxGikq2=}}J-~$)}>|9>? z)@fC^CtU8J7Iht)SGf-e^r~icj$Z>ry1b6w4Lpvhc07KH&!d;GYaB5r+_LAWKcE|9 zEbv8)QRAmY9lh!(S>k6<(%{Q_uDR(x!Xm&&o3s2J+MGfUtHbztzJjlLenBkoi((O_ z3t00d{su}BzT;>5vmrj(v$*-XFj0W#jwKNNeA8n{A(6$Hkfd2S#!o@cPOqpDU zAlnv_@sIL^A$Ra(q)o6|Bh&~GnlTV0WSmlq!|t2rM$?u*Kr2Z{j!8y1n5m`k$O5u3 zPs1#FBAS-6GtuoFb*kX|Xo49FzzC0p#PskPJA*9O3n|^s)CwM< zbLoMx4g$&SaXRSo;4#h#2@m2t3&!q6JM!`2PUbIt9Xxzjiiq#81s`|xTqo8-$DJ56Ztd&k)27!ZO*WpJH=*RD-*O%aJT34y?khjb zBbjG=F*t%Pe~;=3l9f47ZeNN{{LM+_ZiEDs6YKi|tuq?ZuiK{27J-r;Fw$njtFu-8 zSnqXJ8_QX9j5%mfx>phxRWCnAnA|2a82?ToGck+*!bc9ncxrB12ljz;;1=#CJE$CZ z1&joa{zBoE?_3*5;b=PG!r2=z5&M~WP%WzRU5rtEY99E7FW)VEj8#3DJE-YCR#DY` zs`7qO<2GQK#zp?vJoiWQ+}C}a(L6QG!(^D-w8DdWQAeKE;g0I-sJG-GcZzCJdCK}b z$T^fdXcP^UQ`^d@Z3As9h1VgD>kWUrj$_bTJ<_jf3eU}P;LdkoSXzg`Npim3gR!EjG;UXp1&;+BZSFY7=@91G^noBSbJmQt-%$K|Y%)(=^8+^@Mo>`XK z$l1EywtO4b^wM^Sd3bEte7#MbnDLkwA+|w2QG1bpMrL9zV8h_G#-Ry@YeJdHc)(Bx zMz&mlVGj&>vj7v`VNWQBcLD!DQu?ypJEW|;47E^9b~J*S{k|T-l z#ta2GcRAY63_YJIH_F!8SLOWjkIMP8uYPH8__Dt>ehdHhm+*4Bw*>>Rqwu&Nn^u3^ zHgND-m&ghxPU5%+1J-Mh5y00{L+P?NRz&hy0CSAP>GqOt(S?zWYJ#inR7x<;X=|DR z?{AYD62zv1d|E56Ph8XWVCOZ-6b%24cB)C52i^3957ajf?C*Bav`T{| z$}F2mn$;-_)kOamRo$k9?h7T)XM;qs{@zJ5I;YKu1cwuu7TQ0cXZ8+~My+A3xD6PN zZ_YE%0VTIwo4s@y9-F;zZTp4i*x&n=;f>du&5Rk81;TU8ejH3UaW@~~0~P~^vqLsx z9h5f23Ntiuvoy5BvCDT3dnxRvr~~xF#tw1wgx=fQnGhFa8_JX8Yr7+f;gxqHVvVXU z#Wn&0z^}(?x~qJUA>I|?Pk#8Lrc=t6EV}G4k?2WDf{hX}3&Vd!+pLCUk-649Yp{j| zH~l(BTK182WUrUS7HV@iL$XiKersWutYBG)I=QN3Lmo=zlgM?YDzRP{albwU>~@ z6vo2R>PK=?Hr@KP{+*Q8Qdr(GLU^-@*Z2?g(IjUcfK70H(Od-0@y*u(@{BRsw9xU7 z@)Lz34~Kw;P2@ZWdFK$-HU!75UGnqJ#`^H;Ln5?OMoxG%hN)lg-`x1>cA(6CWhPA~ z&tg1TN76J)CAmrkI=P0N3c`{l>)Xs^k955mjriYal~LSg_Bao+aOlIXoP8W#hZQfjrh9;T(@h%^yHc@-C9*IW-5y zo)5B+B9QtDs$5`LH{McCKavO#did125*IWa(?wL9vLxix=qx`)PE~Y>GRc8?(VnVF z(G>_XV(=u98iFdL%b)y^n$J=ACQK88AT>|7;b~}AKJ|k?MDUXC$O%^!xS~9j`^t?F z2u%3cCv4C%?$eO2UMrvS2sVu?3E7lKtcKL+gqg~9)c!A?jBMJ6Rl0Z@%tp%a=l{;G zcu-y79FZyu!5Z5)&(Ygym`fJu6dPWisn$mrdrW05%tIEdRrU%pICxT7CQoUGPKsca zz)s*tPtzXW8i!;9g3~QTqR4Pbh(WXkHb57}85BZ(h6#pE2szNvw(G&2so*mC;c>5$ zb0dl@{}5eDvV56xe@qEEU7(@9)=eaSQj}k!5&erny9OU@l;T(3OZ(L@m?@ws6*wj# zk`AeimQaoiIfj9mc_46_x&h;Aqo4(hnH(WGOnD2EBdjyzPlt6Kdc}yNICr`75Znx+($*aucG+`RdMYNLQmvq0F$L-vEF*AApF2suqS{52Eg<#@*Ggc0fT@(5@AshvP ztqU_7LB0ZkO)VUfMr&nevq2uC)f^hAa-4B=drjA@QH-9JNTg4l(?gtS(TlUT<_aZc zBDSOhM4HO0;CPoO?Q9M9kpbSxZAhH8KGF{LB7M^buI8q|N~^n?`?%LnWv;PIE4CyA zl^Up4DMyDm>vWa(vr^UGhe{h6X_0Ms?nMxO(&ZYvXx1tos4UZwc#6u8ZUk-FWfJgogf{~Cg%B+lr6yA1b<#uRO)H#`xyP=!c!kX#3Sv~hc&$MgVQtpSo zY1gymyb(4`+sm4HD{SQ};fm=mWvlsGxCU*XH`p>??>nr)nnzA}f!ok`nRS`;E!JWy zN6wgr8=n%k%GQnuTjSo?4xeJyHfgUPUb%hm-j_iVC%ZgI^D5&xFI243vgr7KgBxV4 zO?4|N3&p=zd0fOhT(m9ieWtjGRVlQ0r$XyE1G}YXwB!{_c zG24q1_)MhoD(Zukt_xmepo3{XFXTY*h^4T$n9kBQ!PP(%3B@f^H{p>D5Q>Zp z!AulAG^zzmitGHteM1zVocqQ;GT)-})lrKQzM{-zW^lL)NH{jkj_^ikQL>}*N zjb=#N*5UqV{b0x;l*LObh?9g%87PRV*#owU>2R<&kSdV()5?sc#ZC|xET}|@bNm1< z!5<8`R5FNVkoIS0!&u_tyoh@lXB}gT{HWjA{zQmU7(nL)`l&Cz79 z1`L|8SwC2AgEnZ5TBqW|)N^<}xt69)c?1nkAfZTTF&f&;;tsQ!(|3L$eac)`J8Fb3 ztD}~KmU(OmQlbV)f|@$_ASoQS%o?CwVi%0Q$vxJBG5<0#Yk6#itsc4I@?;jS&eqsE z%xL@q;D=3M*M@Fx$9+Dd_~Foi@nL{;4tkIVYzq8vH%)efR0b04162kC$pa273WgXG zjF5^2P%{9=1Hnph5ajWJS*|Em(Bso!rhs`+ieM;Gh4@e4*Gsc$0&`$1L0+9**v7|( z$8c!`&<&{cJ_p{6=}%OVF*&9uz@!l!k;q~MoU^tLpTB7;!ffpzN6t+5vsD(n)3&t> zk>!x35fDFBQ6!#%&p?7Zl4pI>c?@MBijpjr5{5C|1ad-L1o0v~vIb(6`fwj^E&$p& zTU0wmobv^*FzIKB{}yx<_%Na;^r5A!5%|F9&rtowbY$(&i{zoL>^*1C9g)4-4jtLQ z(Yxf=iJyPFFuPqBxD8$7MN%@Zoh+3~Tcy-a6{}tC?3HOT@y!vJz*1Z>=DV@n@-ulia-K2-lp7VCmTHE*e!GCN2xM9>DmU^W#%)XiN0k zj=;)fvQ;}}#S85S9y8DzfH1Zq0HJCBJTf-8`UVV1WP(pUlliUF)zfu)?euVM5f`x4 z?tYvN;EdqkSCAnx!O)*w7`PcMN6?wU;wXgWHG~Djf9#H&6QDfwYa=)iA2lDkBloyI zvQ9t;g>~k7;eq2X&O5HWk-N79v#dqSDM;_m+oJ9<-D>+!0227uAg-baK?f& zmDeujGZ*ND;Z?gf2jMHIeHBH3qK(32(JYm;ExCFd^fNdiova3Z=CoyB`{z8IV7tI7 ztP8jc!>SLUF@w)C@U;-WWBb1#O;8)VpSMA3smoJ~jSQN+pw)V5T@)SpR! zkWAX`9VjjZ=BT#e5ErjOOCU*gb6UO5znNk<2sX%o&C6U1}e>D2M;lMAQjIIM-4gkC9~E!%RH5d z;kR~rWto}38B-OE=X2qGLRjy;Nr>LZ|2O$G2#0ufgRasB@D|=6*KNz$pd0?b780_E literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e78276fc80fd4310ce4f6a97cc86ec9b85e7fb2 GIT binary patch literal 5497 zcmbVQTXWmS6$Ta{08$inwQTvyIB{yaHk~w`rcFDEU0-4+j_g`;oN$z)5V4dXfdIW& zS`hQiR=)~C8n-0v(%>JoQ)A%_RM2aCn-Ip_P% zS;phzB@Lh7|NPG@zdNdFf1%F)PZ6Cf_$BMQrukY!^L3wvdP7%N)?n&tGz@h$8z!zs zSZG@ft8F*zw$pHQdd3Wk?NX!E9&3!LejzNk#~b6SZH1NgL}Nm=?QpU^)tFLkC!B82 zG-g!07|ynjG>)itDV%E`Z5&nYvG7=XzA@iE-ZeJj6J_hX>zY6Vl-`4yW z{Ig$Z{@HETxQO11{!8e+gx)2eEo!xMz1sD7GYVtRueO4aC)LeBu2nlCUKKn^szKxj zO;5%msh7SYhb`2M%(*SO@K!>eId?lUh$An|3QOHi$ZIT{zIJzE>Bhp6d+pYPg?HV> z+l?EUbDt-jI7)a;&rYv$>H33ry2BT_f=50VTwui90+*Yy*tix)5pUA`H-w1kj(KnE z-fgL$AiReiMZ`Hz2+KCUb+`_7O`$TgLT@sZd|>7nUi$FK=O}eX43PSCAjR0 zsEL>zeW*>beht6mB1F%TTB@xhlIOK;{h_v~nVMwMkY>x+LZs36L&W@|wyD+FLa)+{ zBgrFqDdf?rT&oo_BZy>XuW=6+O0v@XUfAWzB$@Lr-^yFXrL9h`tm$F~uYID4~!k`Y!7iWRad07i4K?%x7s~m+4w$sh*Md&@S(4a(unAVTw0= zvu{O522Wj8y-I2%H~j+i#nkXEjCxP?7~PcH~r4k0{(V0Q(DXCZZYHj0cmBUELtQ?b>Gb9BS$+k-C_|Ehtk&st7Ej zApzqZmTJ4?Nxk<@sfy2{7X=bdsme88Jv*G}Z1pk0v`X|;^{U`9h3V@7paE!spsG2b z>uM744~vt`?09mGyq&1k0LtIPYY%UKJ{i2y9Z-ckeCsWYP8dYl6hFWvn;DMq_g%wBn5 z*-MJ&v|1_m!W{02ACn-HifM?f*bds9h9Qx!c9HL0gohH!T9#P`ag_8j{5(s(R!NPnrY^42)OM2B9|xRo;?5|S z)zKm6@2KK-m-z-9u#D&r5Y1tm&{6} z;9eWMq-|#fRiEV68mGY(h?*&GP@C8|D@jjKo(2QwhM^i^AG1#98Jva;sa0S^;y_Ge zuWFy~pwq}w3sq^sw@{T9e4AUoLt0eGCO2D%aojEX zCERs<6B{1OO2b^pMZSKbcrgpHaG*>esv?{buKq?DECpG)8sc1Yv4%zMiN5dz8Ppy4 zB^%!>I+0bM7)Yr+Z0&o;A(J>R3ZFo_ZjatTp0oh--ptcbJajUA+9j~M>IIw`M? z>cT&wGpq|!9cVWmYSAgG3%Abcz`L&Xrc!eqr=6~z9DPUoT$kof0c8tx>sG4o8oKs5 z&O3ecQ*%?_)T9m8pm|X60QDv89t94Hk}=XFw94B?-O z3RDU{wJ~v@o>L{v18NbCWI9)*l-CQCtHotf52;Hf)U2S&mpvsB)nT$hP+_5=>ry62 z&O{1W0_2Q@rn>>FmVubEl; z=UGSH{}vTcs9&Ln$iV-Z3b;M54d}q)4k!WCFdzjG!#-*#4ya+`r=D!C4WsUV;0JLB z3li^-7HG+Cpplp{2ij4y}CmWLi$STR7Abtr(0@l|0 z#t8AiVBZ`e{sItRP>3%K5PxzX;-LfLjS=DtpB4s)rvyP5A0plYE^Qzl`T^n{Al@Dz z9!OV+FQr8wzN8R;^IM4j-~i&yeTXL}vD2{@Yq9si36H={3jMDP{V+m*auELXC&B^z zi}zs_@sPv^B(9M75TaJjLAOB)1v&*kmB4>NI+egZY7y+j3JJ2a@JSqUB*pYDehEFr zK66YufaVBebPUzauUP>o`+KQ)7-f^X`Pb*UegL+TXwmytNvx3|pNoKm!WE^X{{~#^ z824-Z5=w1{!NnXpDg$uO=2+z$L1Sz6%yyBNo31NpO zcjE*O?{yb-oF9w2;Ezx+$)pa7;9-&<+Ndtg&ZuF-Gk(1p2KC{I%tfM1)X^?Gc5oE` zxXIODKuJ!?#}D4lUsA`vNc`jclsf<10fZ%Gu`FNgXcdEh8tP5@gC{?mo;oezaCM`}#H9VE^CJWMC#LDh+>=#DxU=l-XpBaV=u%24?~E39lu zp5*C;4q$oFs#1_jUc{%$m;0i1#I~99lbpEUq#{ohQl{qMkV@ZKeUg=t3x?lWXi99( ZU^d0bkd`gb^7Mr{d#*Bfq+(B>`4>8pVukq&CtVt&KLzwQ_T;HYT52 z{&@35?L>2;HX-ka{FBYe+NA84{8P=T+Env&?XnTEwqGVL>? z_9kXdvQwCOYFDdWVN**=<#cD_vD?|UYmc7V;Y%*;hs(=PlQYyVy1^P>t9yn38ik76#|I24KT7`rCclUD47 zf$JxQ<#r3RwWM^{Wi_wWz}lpUjwGTcC+cnx243Cuy$*K*?1Q-z^G_C*?=LJn^ADdb z{Loo?RJ)&8i#%$DLBuP1GJe;M_&sbSywx^slnnofH$$=goL)4UTH|r{&Lo3;5?-YA z)N3vAD8dquDL%Y^=idFrrDR;VkcZOVklk?rQx*W1BnR42jp|5V)E#ubgA z;R?)9scB4wsx(2*7C_%}b;pAS1>}D{;PF-{Hn01zo>V5)*0$vEByn$`u@pm14B{uzVIxT~N+pz-g2!zU z)OAeCe+6{N73Xn957ER*SM6%M+83vG^jPic8(LT2)pm?n?;5euRd&@~?YW}C>kHD`yb^u{(BvmLK=BCfs1GotFk_UJ0e++Gdu)u2qgR$Q>B$K; zA!m-U57;E_z{eW~JH@83!-;J5X*P{D6YM6N#f&p@R>V~MEj&thg=;j@UWWQr+kTyENGd(| zuvfRGn*kDG>(^3G_&;5SwFP-D{5SR}s<`CjsYePMQcC@yByrt|5Ou^Qj4sp(3iBVK z99{FcqFbB}qj7Oy9T)$N!^ozXk>I&Z~u5@sR*eHif0 z`9t7HDmw&Bm5Ib4+Jb;VOruGL)5z%5L&g!=@)%)IT9FK=VN!}S(Gh&aRa#R-frql6S06Zh&e&axO;tKKfEoyq9 zQz99~ThhAY+`z+#xGw9KT2`mjan({sR1<#_ve%g&0MTl`vDKP|W2RI#M zbXh6|n?b%rStqHbnMEf`?(RgkOVI|2pT~nb+|EOOMU)`9b`Z6A-D`LVG|0{7Zlv*u z*15i)?bQxq&$sVCd0>z*ln2!~h{yF;k$pPa~uG zgcMN=z+Mq2W{RfJXdJc%otPZtZ*j>3$w+ZrodxoZ1NDwV3vKs$3(eg5y#aUbH&h}( zPWk_FquzD9`X&Or4TeiCzg?>Bcy-9tBw*&-|hX=_Hlsfx9!Ij7$8`)qxG=ug9Nuf`p|yo`+Wp% z+_dN0LLkfPv1iZ8HJND!d`+^{zv$hY_I>!$!Jg@gc7&rR^0<6SnirAn=Gcd5%Qq`} zYK(sa`HDqq20{j5&jtyfaHVV=wK1Y{#KwAXOr@S2j?(~^SsMwaKJckpc(7X?>iyDn`SnA2O+Cpj`@8BA!mBdQhe;XR>dnU4_6 z3@VkLzrrQOIAR@j&^&WHqS#(|%fMqaW9otHN4)yrFU0pP;l%_cKO=sQhlPB~kzIS{ zbbtU9-Mfg4U#h)eKIAxX9WET_SljtAHvUI?X~L6|YN(x=!D!kekm&qX{SX_(0$m>y zh1`xd)UNsqFd?2{H1{hcr~DNqr@026qVL7RE*Azc{=gP*p$b9WHpqqkWljs(Y0UVNXzIPUlo+H%TT#cvC{0q5*!C* zoV$~PJm1OmLwrK>YSfHTL(Y=nJM1}N;zu+(fbZYM*spL!R3a*AQ^+Gqs-~hi1P{@^ z(e#P`(#*48Yo8i_?#v$Xm)_|urTr7oK$RIaTPHiPzW%UH;MCQn@ft`k)n6-6j`nNi zw>TCv{gy(Qgwk+tvf}3?Myqo(Gh`}^AylUoV=_Vaa5*qdJY`x%Pa%eC z$CN4QhhM96NkJZ#J5~_R)hWm8jLy@)IXYpB&|ik3$^)*Mf^@}5jCzQ=>KwQi?^8o= zh$@`KS}9->g7_&lv~ob+$vAA5vJ@xh`FEHkD{_`Gsao2k+Ody_d0N({Nx~HRr;a*3y$?+<%QTvu(9w^n3Rd0BREcVK}6H2|5p!b61 z9kCW2BxeLbsSUh^rIo%!E#RCXq00&O*3$|CyKMgb6!-qpY|=?S{Si*)uZYnG74l^f z&PR2Q@HKaOY)bX!LmNtk9;V?o@Y=TT{*_b~Qn0uO)x#*ijep`h)I6ewVppP5t)(<* zuZ*5^dT#oW@6|cJ38ep3FHtuVb#u^=O{dAl8vkdkiKftKpPnC{MFocHE@fbdh3krX z^u(GjJCx)XvE0HXLHjr8q(SYA+p2;O4GO%U4y-yXQrQ4lqmQB+4xvys|%IU6qG6NNVP#OnkvVq9(k**y$Onq zVul(zPo{^)0;NT~QhdG25DilNLp_5&VhyND#)aR5UNnuSq>TXMr*V;n#-S^q{C{8i zpJTG2+*ARAm#`9rNFfbNmBA=adgzg?N>{FkS?Zsm<}4bN1#tkbBOg0KcRFB9kg14w zsQG}#tdQR;_ z$e0ABSi+=+P%%{jMZ2`rNokarphil6lzLJbGKd}oN!gR1PcCE1TezYPH1sJ=8#2Dp zNP79DmHw=akE@yisTw7N{!bd^^0ZMd(N!|03{9U@OT*gu!AeBiZ!}t2>e0#Ql`%Ry zB}KbXxhh)NmL!T}9X>9a>9<@Vjf(6kDai``tJwEe_|YlRdd$sj2L9^@Lz9%LSooWY02s)KS23q>{k`UpBze2?`b`4OsiXh!}OtV)GV z%pl!MNhed1kc3*~h}Ha)n>a}`DNnsxwsfUr z=>99Ji=!eSi_YQ&ZAW>x6m6fg^mLtAx6-e;AJKV7rbdQhY2(s$Y$~>BP%Z8z)p32+ Hm^ksjLNvfxK_sAoq^oX7Jd^7XS_a24=1Ga+SSAX(53m==Y6tV3f|v%(s@#r zcLh&1o_3y=<)PpMjg!vF#xu?{vOXM~YJAZ7psIN0`m^418>;gmZ`_;4-?6*lRW*L3H@sF&FR)DL(EP(P3QLG~c(4|@AizkvEf z>=5dQyuI~Vv|MD`oKktXvwX>K&3RGehs|=e$;wf?)e3p+HGfZ)m95D3F~5uKvV-^%@OQo%@djVb}K-3rHP)3CaiST zNMzeQ2>gX7DykShU9By9r?F=q2GgwC!U7nZf4&-dX;tK3oS(n6)i-#Fd#x(>*yZFD z!n*85t*{w+3B1UgLAe?Ev46v(ZKJt}6`Ed+_IN1_1GJ3Mpjw-IDU^>?IpGXFdDp$+ zaYC@`qPly@i(Td|R@*`Bdd(X?51S3INl<}=<~8Ia7trUQ2^+vWHtyG^+wn5m2j;4a z-Z?+;Bv^C8hcA2U#XZCU1XNyxD^TY2tSDXtLQQlIl!w1%V8AvH+S-npLlBO zG5S0H^tO)d$&-&CfBZzRQ5cIjg&Z-9HS{Q2mKB+Z;@sKOS1zA*FJ7K`VP=F;_Aj+#Z0P5;_ zf8i=<);rd!)~;2Tyyz+paNPBq;0Q3*@sxLuM+x&!wN^y#)RNcqZngNcAElieNVM0+ zl}>^Mm$2a0{Has&@}p;`Hiu)+dKFwfetO0|JNxp?<%_cy&d$!eFHc{dnSTEK**STP zzT^Zzivfw;9@w9tB?)swS^gxlZI?)z&cY`z@s}}*0h3I7LyOgQZ9`!?a(zSbp-bM- zSAlJonLsN(^P0xX$*8n7drE1Z>lwgV<8v;IuCKUcPwr{IOxK2l_>%$ug|0ep7ca`-K_JFT! zXiNtrb$t|l|B&Q;efwqK82Y}8KIDKkiMHKq3ja@>*$&26&8}IWKzkYOd)Acoz3jk- zx|;1~ncY@Dr*bvk*Ui=oYlQuS81umTe)ix7?n(BZ=nTY@^)h>qJ%m$F)(@~l?BUz` zs`U}2X&Xv>@N?=)Sq0yz%Ey%E&`qUl0q2J|2=WP(A7qaJR%Jq2e@O1`2v#_>rl9v} z_GlBUVAZ2&d$@jh{SkHyJIi%*>DnLe=FmHJN@2(Am97#WsXvPPW9(7(_-&n?xJ{b& ziO!S#BBok~=p>yA-NQYo7pZX}b;@nq2DyoOT^&lKc#Xq2nmn;Bg7()=n8eD-7a!e69e zGn9}(=O5lI$to?+&m&o*!UZHkhdvhuDRuq=)lF9AH~pr_G^(|WbHa>PqS$MQEcXHr zwvEtht+p5pTQF3jpl5IhJAy`Q#V}DKF|<|Q?9cEv?xvGFb}S{VC9H+tzdQ$#ZbmUw z92eQxZ+Kxlj!g8(3FWs5mu3DEQZXQ#dLZY8R`bO;>EtVOXD_?cFOVXT#WU0M(;_GF z$*OU+^MQ|3_R1y+zxoR4yjNF`-_xFM?$y=u$LmqpT&-w#)T4LQlh`Cq2(yN4$VlWO zSg!6hZzV#9LBNGU<10t`DDBj01=V;ln974?r!b|-LN2ebk4!8wtLdQFA=$ttOd+Ubp?CZi z-%H!f;)-cKPE;(fFf|wXe6M@iZ+e_83t_mpZ!viB(%IR$x%2MJXD`pqT%6@&)K`+G zCUJ?s&?Z}zPgAoQEu$8Q%*|!Lwu}YZ3oY;w>;O@K@m#y+;<8(9Y;A7-%*8A7B6s#y z&65VX$V9EcM-TJp7*bL5V*tvh2(pd^aUfv08uLYJ$*^{#6;*8R(V%OTNOB&Mtn5k_ zPB$kC2}4U1NBoimC=b_1xHJUlC#p?%$$yG~N;cZ$C1G!I?JMYxej16DF;z>`?waqG ztRc0enyRf9R0Ch}Zb=`~N@__fXa#jl(^L(;1yy^`xT~2|F3PfDS{QGshQ@OlP*d`a3lhBF|&!(F0yp6vW{bE&siqCg6z4wbT+jkPsp6`_W%ez^AMCB?POUP?RfF& zc~V;-&80>xwOGfFy<72dh$X)XC!|1rD-`#!`IVN}Ask6ll!p+C+mS1ollW2?)FQGM=gx9Yes&Dd!g5`bK(0$3Qxy_Y zXnrWN&#%N@G;>jy@VCL;Lg&?+BICggg|Hxz5eYkCZpcK>ROEL&IICV2A|nz8X(^GZ1tDDQ0qoEV7Wro|mfxm?=!t)plAopIb4Vb$ z;iD!(6V_4-VhE>-gznv{39HdVNuictELnYrNWd~p_H_V@NM+kOQ-e5AHLXZ2sTb5o zRAbP3P5b^(b_ncGOsuKKyXM`3WrJ}$!`nGwilE)2?nx_3$|l>1+&g|01u2{=D*sBa zyk&FnH_`TQ_@r56sGX4=%Opt3fbnMGC`x{strYn$Vv4X`7e{XgbdLqsz22?{$*pn{ zCBj&M+ULZ4oH!2lUJybo=cs}70GH~V$cFz4CA5`3IV#a74U?Zi#~@{H{7W$QWS> z&tw{0MGC%C;63vODfBFqcLquu#15qll`V4{b(>0P%VP`z?TbZ8_!N#PA^<;_^vfOt z>U$T0!-d=sJHUoL3nAtN-l#VqM_6o(?S`T+vVu40mB?^Fm|y~PcCkI)5LyQo4Yrr< zL(4FG01)=$qut5Xy^)mdCRrJ5H!9g~3~YB$*q1iL$g_zACs`neg7cV55k%+=AF;Gs6t9GGsPd(V|0zu-1%cl3c?yJRw-HQm%{U9|K}9e{|03N<24Mp= z&LIS3-lhPA#-EApINwEx1#MZ_2Uc9@uLH(F(~67f46B=^7KA?r8LW~G3gu8a2aBRt zw&T(of+pzE&nU0v5KK_&yAV)-Ax2LE*FVYzfY)NDE`tULO_ooRo6{(7!`#Vo5+shw z%`h&CG_C;t>-8_9EXTMh*D~IU`5ChveAnR2s?(0i|%5z2ImZhPrgyT z<)(xHRVHuuTY%HCWQh6X@#CE=m1Ke9!zhr!RH7#dX#L0y!lfk~Vzx5Ge-{(UjKRZ1 z4D~k*hs*7uCgeVbMbgUVzl4FDWH~4cQFLCQVg`X;z9OX-Cw0UpC?R$hqnlueHr;CS zguscm;CqK{JS>n_6QwF++lIo&`3ga~59#u6QpaD)Y1o*2Cg?#H#T|7+M%8!7v2SCp ziA#tmGCDM18U?+e8-}KvS$uEXqehn86nyV#2Icm9HryR@XNtN7*T%Tp8Qx;isZGQc zo8CgXtiOlMyo8txf*j{hS;Fr%;yLgs&kN{vKJ??=`FeG(<4aJqUl4%{){V>T89{m{6iucg)N6jYuJ4USBJDchbYNJKx^Ke0qsQekaQ_ zF}-z!*QzUYZE)vq_zZVere0iMHO3`HX!r2A*N%df@`C4WzeMnd$F^=Sg`ObxWO=$- z4$~*Ta?+LtM2||Tm2x^sFP@MKExfr^A`*&f&?6=Mm@>U`Z7tOq#oE-D3Iw@nP-7=s zeuPGr@2C}Fkf6kHVHAuUMF>iWNmz&#ATFT| zfoaEdiZ~SU8Sm}M71!P1ls0~=zvK|v4$^t8p$W27SF~`5uCb118ayW;#oWtXOTxJPG3ELs zo*hg)JJ{Vk*xtE52@#OPm?da^T8DB4!ei+V;wSHAzVkox5T|%Y2=Uy9XIs41(F-msgGmoX#KvSCR5!T+MnQ5f2{Y59KgKM0 z#4*VuFqJhz02MuUIs6^23c+^i8NeveH{|9)?2%$Bw;pWOs3?v;;K78z0%FD;306G*M zo;p`4A(kQ^{zXQs`CC-U`7Q7enHDfXThPc` z<@9w_*e_RuwwJ_CGT0fSvfrht*>um9Lc$6EE`iI%8N%?=0&yWWmWJzVxMq zj`wsi=(^P=m`n;Pa^uO=NNCWa5}lTl3CF)fiS)!t_;XrW6y~Hscu~@fBuu`WI)Mj8 zM)i`|*dI~bmZh`hq5lawXl!&21snIP(f#1hywmg5af3fH;j7yS&uB6{Q+#Laf@UGS zjSw~LMVW&N-W!@6${ab(31;Pz$hs~IYp}2LG6*;&V}N`eo%{_-{)>`DBqEz?Z2l!` zIz|b(3A{r|my$XXQAikeD&bO!ZwRaBt_TxBLkOV+dqgb~KMD3ss%9yX7?mLmo2nrt zc}hqri1F6e%gdB>HYp~E{{@nEzVkqTcY4LqRBGf$yhw0}CY` zyzelWChZ#j5d{J8Ap&-=e^i2jC#EPQmHY=$i{f+?t#S6>Zy;iv$>U4JM`(XfQ6k^7 z#^mtce{@WN*>DoPLXBaBnAp)Nw?2humur%|#GdW_sT`S-PLlMO5)^Dg?+uVhl@8NR z5Ry7@t_Fg&$>Y?HJtPB`cD?4iG~O_t5}%@PKp(c4N}_2DC#5e#g(pUOyNVItBQq%on&5 za?Fdo*dsR(FR|b*Vg>HAkQIBBmDs`y+F9VVhgliCi@eN2PWa*t)C*XJRbTj>3M=lR z+R~q}KB^H*w?%4f_`qz>XPvX4?ot6!ExgKUx^BT4*ZEnso zb<)hFHfM>Z6UOC!wK7Is=&+pXO_OBMXb28x@JlI;|` zOO%=g%SGpZg;+2pU<)t`UZL;(b1ZK#|4Pmd3nAxWo>RWe zDgHlaiq%t7nBpm7rI+Lz%n)F_(6(sek4&$=F)0b1)i*XixKn>mdTgEkG07wLxH{!(9s&4=4#S*_(86zp)FzQBcc>;hlh!{R8?J4@ zIPk#j@_`iYV>=(_3)uxoF(V!40Uj);0sy?`sUmc?a%{{n=8n{OppR4qoIfIU4Z6S6 z=4SUmbEUhxBdwF}c9xC?P=W5=7iMR4*u5u|HucX{_6)SqJ>~MW`>8nWYGHVNn4~Ak z5!cUzamIt&fc8>&9?wmsBD&j{%B!w$WR#w0;{5#br$VC9q4FTm;@4 zSt0adjjj-KL1`J&3w0gBR2hsdrN<+A5^FKxDPZ|un=35^kKPCKHJZEy%!0b6m|;d< zl5O;be@>?4At>v4=@Fd0Jp^ha2f#Ix1zfKx|c$XA30gkW;L^hdZB z{9e9E2!M$Lc*sBGjk*m%wWuW__m=DIT z=3#Tj8~jUmQ^3ukbKxm>?yU#a*=igoQf44eHyg(}oz{a)1=lIcH*%#cr%9F97T$$L gM}7X0yHoTUm}Rs?%4GH0vPW*w3n(ss15$bOFU9zO3pdhPAZY%VJY zp{Alw`~x16$NmET%Sb%̤C&Um*;fsQrDb2&3U^L^hLm(8Y+p#1*hAA{F6LVxPc z+r@;=7f{77U?_?Z#gybY!u6X(M*TJ;3*JU64mVeuzn+6S-r9H%~xx;l+~Mn zUx?M&H70jT{$Qmn3YO|MH#jdj%=qis_#P7ihM?ExNhVmlQSw;8-V*_Pdhu#0WN&ZG zR5QMlaIux-c{0dZs=xYn3FaNqhXz9c9Eu3Vk>L@#L=9$AlUdYaHnpj<;XXkdxIT6> za%vBsHfR7|P3F>;_F^7gxPUf%+NO(-t;m0ZOcXT$mQ!j8;{Luy<`|Xf-F04WXOwl4 z&i!|wcK<)Hb+)rayPhC$-|s*v2SdQ9Teoj2FDoe9jVC-;j+g7)PV+>FIDU$r(Unj7-wMV>|L#PHr2l1^PPEcQ|5hefCxiaYj0<@kpw=k$ zw^^~>znu;GB9rX;I7uHQn@se_*?1WOmy8!lzFf@Iw>%@IJKp095XO0^!UYo;0d}#E zrIURAGq^h;Y6}k8p*Cq{0=UkogpC*!z|=hUTGFSwNCKy{vOT!}|{S*+ZwYE2DC# zLCs&yeOJ1bdjPanCQ#^A=+Lj+VdDsY2V|N^277lf+V?P;E>zyIDL&WVldZ!AYU%#4 zUD-zlMvvgT``%C94&Fhby*3RXStS5}U8mmEm26jP0DGaKOwe8eD6oVAQOX8fSTdSk zUG4SOJ4|PG=RMKc*~)U(*1di^|VLRzPMKDN_cl;->)!-qvOjjPgNLlcJUt zKcffCu?8J(OT@40eyg5~IfHws02LZM+2LCE$~_*l^Kx@jOE=}2%+e%RjoD=qrzK^f z&(G@ZE@^XFn=9JXyK8Anp$v$Ecl7A{V3fgjQ+`2rYjaVLIdkGW&=DVkX*o+czyx$; zgPlG03)i-B3mzYvFs5hBm&9^^CVx*azC&yCO+$P$40Prd$%sMb`Efid=_J?fAdVkS zl6*en#4#af*$NaXHuB6ooaHrBrnF(duTzo+MU-ko1R zGe9oA+h-!PT+EcEbGpu0<$+pn*XrS#R37SJ?OBw{JHF}bbG`-Ni7wnvXH0#DVWrSF XjEP*s1zEIlKmw46N!r*a=Z${=9F{sz literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/network/auth.py b/venv/Lib/site-packages/pip/_internal/network/auth.py new file mode 100644 index 000000000..ca42798bd --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/auth.py @@ -0,0 +1,323 @@ +"""Network Authentication Helpers + +Contains interface (MultiDomainBasicAuth) and associated glue code for +providing credentials in the context of network requests. +""" + +import urllib.parse +from typing import Any, Dict, List, Optional, Tuple + +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import Request, Response +from pip._vendor.requests.utils import get_netrc_auth + +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + ask, + ask_input, + ask_password, + remove_auth_from_url, + split_auth_netloc_from_url, +) +from pip._internal.vcs.versioncontrol import AuthInfo + +logger = getLogger(__name__) + +Credentials = Tuple[str, str, str] + +try: + import keyring +except ImportError: + keyring = None # type: ignore[assignment] +except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", + str(exc), + ) + keyring = None # type: ignore[assignment] + + +def get_keyring_auth(url: Optional[str], username: Optional[str]) -> Optional[AuthInfo]: + """Return the tuple auth for a given url from keyring.""" + global keyring + if not url or not keyring: + return None + + try: + try: + get_credential = keyring.get_credential + except AttributeError: + pass + else: + logger.debug("Getting credentials from keyring for %s", url) + cred = get_credential(url, username) + if cred is not None: + return cred.username, cred.password + return None + + if username: + logger.debug("Getting password from keyring for %s", url) + password = keyring.get_password(url, username) + if password: + return username, password + + except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", + str(exc), + ) + keyring = None # type: ignore[assignment] + return None + + +class MultiDomainBasicAuth(AuthBase): + def __init__( + self, prompting: bool = True, index_urls: Optional[List[str]] = None + ) -> None: + self.prompting = prompting + self.index_urls = index_urls + self.passwords: Dict[str, AuthInfo] = {} + # When the user is prompted to enter credentials and keyring is + # available, we will offer to save them. If the user accepts, + # this value is set to the credentials they entered. After the + # request authenticates, the caller should call + # ``save_credentials`` to save these. + self._credentials_to_save: Optional[Credentials] = None + + def _get_index_url(self, url: str) -> Optional[str]: + """Return the original index URL matching the requested URL. + + Cached or dynamically generated credentials may work against + the original index URL rather than just the netloc. + + The provided url should have had its username and password + removed already. If the original index url had credentials then + they will be included in the return value. + + Returns None if no matching index was found, or if --no-index + was specified by the user. + """ + if not url or not self.index_urls: + return None + + for u in self.index_urls: + prefix = remove_auth_from_url(u).rstrip("/") + "/" + if url.startswith(prefix): + return u + return None + + def _get_new_credentials( + self, + original_url: str, + allow_netrc: bool = True, + allow_keyring: bool = False, + ) -> AuthInfo: + """Find and return credentials for the specified URL.""" + # Split the credentials and netloc from the url. + url, netloc, url_user_password = split_auth_netloc_from_url( + original_url, + ) + + # Start with the credentials embedded in the url + username, password = url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in url for %s", netloc) + return url_user_password + + # Find a matching index url for this request + index_url = self._get_index_url(url) + if index_url: + # Split the credentials from the url. + index_info = split_auth_netloc_from_url(index_url) + if index_info: + index_url, _, index_url_user_password = index_info + logger.debug("Found index url %s", index_url) + + # If an index URL was found, try its embedded credentials + if index_url and index_url_user_password[0] is not None: + username, password = index_url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in index url for %s", netloc) + return index_url_user_password + + # Get creds from netrc if we still don't have them + if allow_netrc: + netrc_auth = get_netrc_auth(original_url) + if netrc_auth: + logger.debug("Found credentials in netrc for %s", netloc) + return netrc_auth + + # If we don't have a password and keyring is available, use it. + if allow_keyring: + # The index url is more specific than the netloc, so try it first + # fmt: off + kr_auth = ( + get_keyring_auth(index_url, username) or + get_keyring_auth(netloc, username) + ) + # fmt: on + if kr_auth: + logger.debug("Found credentials in keyring for %s", netloc) + return kr_auth + + return username, password + + def _get_url_and_credentials( + self, original_url: str + ) -> Tuple[str, Optional[str], Optional[str]]: + """Return the credentials to use for the provided URL. + + If allowed, netrc and keyring may be used to obtain the + correct credentials. + + Returns (url_without_credentials, username, password). Note + that even if the original URL contains credentials, this + function may return a different username and password. + """ + url, netloc, _ = split_auth_netloc_from_url(original_url) + + # Try to get credentials from original url + username, password = self._get_new_credentials(original_url) + + # If credentials not found, use any stored credentials for this netloc. + # Do this if either the username or the password is missing. + # This accounts for the situation in which the user has specified + # the username in the index url, but the password comes from keyring. + if (username is None or password is None) and netloc in self.passwords: + un, pw = self.passwords[netloc] + # It is possible that the cached credentials are for a different username, + # in which case the cache should be ignored. + if username is None or username == un: + username, password = un, pw + + if username is not None or password is not None: + # Convert the username and password if they're None, so that + # this netloc will show up as "cached" in the conditional above. + # Further, HTTPBasicAuth doesn't accept None, so it makes sense to + # cache the value that is going to be used. + username = username or "" + password = password or "" + + # Store any acquired credentials. + self.passwords[netloc] = (username, password) + + assert ( + # Credentials were found + (username is not None and password is not None) + # Credentials were not found + or (username is None and password is None) + ), f"Could not load credentials from url: {original_url}" + + return url, username, password + + def __call__(self, req: Request) -> Request: + # Get credentials for this request + url, username, password = self._get_url_and_credentials(req.url) + + # Set the url of the request to the url without any credentials + req.url = url + + if username is not None and password is not None: + # Send the basic auth with this request + req = HTTPBasicAuth(username, password)(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + # Factored out to allow for easy patching in tests + def _prompt_for_password( + self, netloc: str + ) -> Tuple[Optional[str], Optional[str], bool]: + username = ask_input(f"User for {netloc}: ") + if not username: + return None, None, False + auth = get_keyring_auth(netloc, username) + if auth and auth[0] is not None and auth[1] is not None: + return auth[0], auth[1], False + password = ask_password("Password: ") + return username, password, True + + # Factored out to allow for easy patching in tests + def _should_save_password_to_keyring(self) -> bool: + if not keyring: + return False + return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" + + def handle_401(self, resp: Response, **kwargs: Any) -> Response: + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simply return the response + if not self.prompting: + return resp + + parsed = urllib.parse.urlparse(resp.url) + + # Query the keyring for credentials: + username, password = self._get_new_credentials( + resp.url, + allow_netrc=False, + allow_keyring=True, + ) + + # Prompt the user for a new username and password + save = False + if not username and not password: + username, password, save = self._prompt_for_password(parsed.netloc) + + # Store the new username and password to use for future requests + self._credentials_to_save = None + if username is not None and password is not None: + self.passwords[parsed.netloc] = (username, password) + + # Prompt to save the password to keyring + if save and self._should_save_password_to_keyring(): + self._credentials_to_save = (parsed.netloc, username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + req.register_hook("response", self.warn_on_401) + + # On successful request, save the credentials that were used to + # keyring. (Note that if the user responded "no" above, this member + # is not set and nothing will be saved.) + if self._credentials_to_save: + req.register_hook("response", self.save_credentials) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def warn_on_401(self, resp: Response, **kwargs: Any) -> None: + """Response callback to warn about incorrect credentials.""" + if resp.status_code == 401: + logger.warning( + "401 Error, Credentials not correct for %s", + resp.request.url, + ) + + def save_credentials(self, resp: Response, **kwargs: Any) -> None: + """Response callback to save credentials on success.""" + assert keyring is not None, "should never reach here without keyring" + if not keyring: + return + + creds = self._credentials_to_save + self._credentials_to_save = None + if creds and resp.status_code < 400: + try: + logger.info("Saving credentials to keyring") + keyring.set_password(*creds) + except Exception: + logger.exception("Failed to save credentials") diff --git a/venv/Lib/site-packages/pip/_internal/network/cache.py b/venv/Lib/site-packages/pip/_internal/network/cache.py new file mode 100644 index 000000000..9dba7edf9 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/cache.py @@ -0,0 +1,69 @@ +"""HTTP cache implementation. +""" + +import os +from contextlib import contextmanager +from typing import Iterator, Optional + +from pip._vendor.cachecontrol.cache import BaseCache +from pip._vendor.cachecontrol.caches import FileCache +from pip._vendor.requests.models import Response + +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import ensure_dir + + +def is_from_cache(response: Response) -> bool: + return getattr(response, "from_cache", False) + + +@contextmanager +def suppressed_cache_errors() -> Iterator[None]: + """If we can't access the cache then we can just skip caching and process + requests as if caching wasn't enabled. + """ + try: + yield + except OSError: + pass + + +class SafeFileCache(BaseCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, directory: str) -> None: + assert directory is not None, "Cache directory must not be None." + super().__init__() + self.directory = directory + + def _get_cache_path(self, name: str) -> str: + # From cachecontrol.caches.file_cache.FileCache._fn, brought into our + # class for backwards-compatibility and to avoid using a non-public + # method. + hashed = FileCache.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key: str) -> Optional[bytes]: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + with open(path, "rb") as f: + return f.read() + + def set(self, key: str, value: bytes, expires: Optional[int] = None) -> None: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + ensure_dir(os.path.dirname(path)) + + with adjacent_tmp_file(path) as f: + f.write(value) + + replace(f.name, path) + + def delete(self, key: str) -> None: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + os.remove(path) diff --git a/venv/Lib/site-packages/pip/_internal/network/download.py b/venv/Lib/site-packages/pip/_internal/network/download.py new file mode 100644 index 000000000..35bc970e2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/download.py @@ -0,0 +1,185 @@ +"""Download files with progress indicators. +""" +import cgi +import logging +import mimetypes +import os +from typing import Iterable, Optional, Tuple + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.cli.progress_bars import get_download_progress_renderer +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.models.index import PyPI +from pip._internal.models.link import Link +from pip._internal.network.cache import is_from_cache +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks +from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext + +logger = logging.getLogger(__name__) + + +def _get_http_response_size(resp: Response) -> Optional[int]: + try: + return int(resp.headers["content-length"]) + except (ValueError, KeyError, TypeError): + return None + + +def _prepare_download( + resp: Response, + link: Link, + progress_bar: str, +) -> Iterable[bytes]: + total_length = _get_http_response_size(resp) + + if link.netloc == PyPI.file_storage_domain: + url = link.show_url + else: + url = link.url_without_fragment + + logged_url = redact_auth_from_url(url) + + if total_length: + logged_url = "{} ({})".format(logged_url, format_size(total_length)) + + if is_from_cache(resp): + logger.info("Using cached %s", logged_url) + else: + logger.info("Downloading %s", logged_url) + + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif is_from_cache(resp): + show_progress = False + elif not total_length: + show_progress = True + elif total_length > (40 * 1000): + show_progress = True + else: + show_progress = False + + chunks = response_chunks(resp, CONTENT_CHUNK_SIZE) + + if not show_progress: + return chunks + + renderer = get_download_progress_renderer(bar_type=progress_bar, size=total_length) + return renderer(chunks) + + +def sanitize_content_filename(filename: str) -> str: + """ + Sanitize the "filename" value from a Content-Disposition header. + """ + return os.path.basename(filename) + + +def parse_content_disposition(content_disposition: str, default_filename: str) -> str: + """ + Parse the "filename" value from a Content-Disposition header, and + return the default filename if the result is empty. + """ + _type, params = cgi.parse_header(content_disposition) + filename = params.get("filename") + if filename: + # We need to sanitize the filename to prevent directory traversal + # in case the filename contains ".." path parts. + filename = sanitize_content_filename(filename) + return filename or default_filename + + +def _get_http_response_filename(resp: Response, link: Link) -> str: + """Get an ideal filename from the given HTTP response, falling back to + the link filename if not provided. + """ + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get("content-disposition") + if content_disposition: + filename = parse_content_disposition(content_disposition, filename) + ext: Optional[str] = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(resp.headers.get("content-type", "")) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + return filename + + +def _http_get_download(session: PipSession, link: Link) -> Response: + target_url = link.url.split("#", 1)[0] + resp = session.get(target_url, headers=HEADERS, stream=True) + raise_for_status(resp) + return resp + + +class Downloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__(self, link: Link, location: str) -> Tuple[str, str]: + """Download the file given by link into location.""" + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", e.response.status_code, link + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + return filepath, content_type + + +class BatchDownloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__( + self, links: Iterable[Link], location: str + ) -> Iterable[Tuple[Link, Tuple[str, str]]]: + """Download the files given by links into location.""" + for link in links: + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", + e.response.status_code, + link, + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + yield link, (filepath, content_type) diff --git a/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py b/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py new file mode 100644 index 000000000..c9e44d5be --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py @@ -0,0 +1,210 @@ +"""Lazy ZIP over HTTP""" + +__all__ = ["HTTPRangeRequestUnsupported", "dist_from_wheel_url"] + +from bisect import bisect_left, bisect_right +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, Dict, Iterator, List, Optional, Tuple +from zipfile import BadZipfile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.metadata import BaseDistribution, MemoryWheel, get_wheel_distribution +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks + + +class HTTPRangeRequestUnsupported(Exception): + pass + + +def dist_from_wheel_url(name: str, url: str, session: PipSession) -> BaseDistribution: + """Return a distribution object from the given wheel URL. + + This uses HTTP range requests to only fetch the potion of the wheel + containing metadata, just enough for the object to be constructed. + If such requests are not supported, HTTPRangeRequestUnsupported + is raised. + """ + with LazyZipOverHTTP(url, session) as zf: + # For read-only ZIP files, ZipFile only needs methods read, + # seek, seekable and tell, not the whole IO protocol. + wheel = MemoryWheel(zf.name, zf) # type: ignore + # After context manager exit, wheel.name + # is an invalid file by intention. + return get_wheel_distribution(wheel, canonicalize_name(name)) + + +class LazyZipOverHTTP: + """File-like object mapped to a ZIP file over HTTP. + + This uses HTTP range requests to lazily fetch the file's content, + which is supposed to be fed to ZipFile. If such requests are not + supported by the server, raise HTTPRangeRequestUnsupported + during initialization. + """ + + def __init__( + self, url: str, session: PipSession, chunk_size: int = CONTENT_CHUNK_SIZE + ) -> None: + head = session.head(url, headers=HEADERS) + raise_for_status(head) + assert head.status_code == 200 + self._session, self._url, self._chunk_size = session, url, chunk_size + self._length = int(head.headers["Content-Length"]) + self._file = NamedTemporaryFile() + self.truncate(self._length) + self._left: List[int] = [] + self._right: List[int] = [] + if "bytes" not in head.headers.get("Accept-Ranges", "none"): + raise HTTPRangeRequestUnsupported("range request is not supported") + self._check_zip() + + @property + def mode(self) -> str: + """Opening mode, which is always rb.""" + return "rb" + + @property + def name(self) -> str: + """Path to the underlying file.""" + return self._file.name + + def seekable(self) -> bool: + """Return whether random access is supported, which is True.""" + return True + + def close(self) -> None: + """Close the file.""" + self._file.close() + + @property + def closed(self) -> bool: + """Whether the file is closed.""" + return self._file.closed + + def read(self, size: int = -1) -> bytes: + """Read up to size bytes from the object and return them. + + As a convenience, if size is unspecified or -1, + all bytes until EOF are returned. Fewer than + size bytes may be returned if EOF is reached. + """ + download_size = max(size, self._chunk_size) + start, length = self.tell(), self._length + stop = length if size < 0 else min(start + download_size, length) + start = max(0, stop - download_size) + self._download(start, stop - 1) + return self._file.read(size) + + def readable(self) -> bool: + """Return whether the file is readable, which is True.""" + return True + + def seek(self, offset: int, whence: int = 0) -> int: + """Change stream position and return the new absolute position. + + Seek to offset relative position indicated by whence: + * 0: Start of stream (the default). pos should be >= 0; + * 1: Current position - pos may be negative; + * 2: End of stream - pos usually negative. + """ + return self._file.seek(offset, whence) + + def tell(self) -> int: + """Return the current position.""" + return self._file.tell() + + def truncate(self, size: Optional[int] = None) -> int: + """Resize the stream to the given size in bytes. + + If size is unspecified resize to the current position. + The current stream position isn't changed. + + Return the new file size. + """ + return self._file.truncate(size) + + def writable(self) -> bool: + """Return False.""" + return False + + def __enter__(self) -> "LazyZipOverHTTP": + self._file.__enter__() + return self + + def __exit__(self, *exc: Any) -> Optional[bool]: + return self._file.__exit__(*exc) + + @contextmanager + def _stay(self) -> Iterator[None]: + """Return a context manager keeping the position. + + At the end of the block, seek back to original position. + """ + pos = self.tell() + try: + yield + finally: + self.seek(pos) + + def _check_zip(self) -> None: + """Check and download until the file is a valid ZIP.""" + end = self._length - 1 + for start in reversed(range(0, end, self._chunk_size)): + self._download(start, end) + with self._stay(): + try: + # For read-only ZIP files, ZipFile only needs + # methods read, seek, seekable and tell. + ZipFile(self) # type: ignore + except BadZipfile: + pass + else: + break + + def _stream_response( + self, start: int, end: int, base_headers: Dict[str, str] = HEADERS + ) -> Response: + """Return HTTP response to a range request from start to end.""" + headers = base_headers.copy() + headers["Range"] = f"bytes={start}-{end}" + # TODO: Get range requests to be correctly cached + headers["Cache-Control"] = "no-cache" + return self._session.get(self._url, headers=headers, stream=True) + + def _merge( + self, start: int, end: int, left: int, right: int + ) -> Iterator[Tuple[int, int]]: + """Return an iterator of intervals to be fetched. + + Args: + start (int): Start of needed interval + end (int): End of needed interval + left (int): Index of first overlapping downloaded data + right (int): Index after last overlapping downloaded data + """ + lslice, rslice = self._left[left:right], self._right[left:right] + i = start = min([start] + lslice[:1]) + end = max([end] + rslice[-1:]) + for j, k in zip(lslice, rslice): + if j > i: + yield i, j - 1 + i = k + 1 + if i <= end: + yield i, end + self._left[left:right], self._right[left:right] = [start], [end] + + def _download(self, start: int, end: int) -> None: + """Download bytes from start to end inclusively.""" + with self._stay(): + left = bisect_left(self._right, start) + right = bisect_right(self._left, end) + for start, end in self._merge(start, end, left, right): + response = self._stream_response(start, end) + response.raise_for_status() + self.seek(start) + for chunk in response_chunks(response, self._chunk_size): + self._file.write(chunk) diff --git a/venv/Lib/site-packages/pip/_internal/network/session.py b/venv/Lib/site-packages/pip/_internal/network/session.py new file mode 100644 index 000000000..cbe743ba6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/session.py @@ -0,0 +1,454 @@ +"""PipSession and supporting code, containing all pip-specific +network request configuration and behavior. +""" + +import email.utils +import io +import ipaddress +import json +import logging +import mimetypes +import os +import platform +import shutil +import subprocess +import sys +import urllib.parse +import warnings +from typing import Any, Dict, Iterator, List, Mapping, Optional, Sequence, Tuple, Union + +from pip._vendor import requests, urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter +from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter +from pip._vendor.requests.models import PreparedRequest, Response +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.urllib3.connectionpool import ConnectionPool +from pip._vendor.urllib3.exceptions import InsecureRequestWarning + +from pip import __version__ +from pip._internal.metadata import get_default_environment +from pip._internal.models.link import Link +from pip._internal.network.auth import MultiDomainBasicAuth +from pip._internal.network.cache import SafeFileCache + +# Import ssl from compat so the initial import occurs in only one place. +from pip._internal.utils.compat import has_tls +from pip._internal.utils.glibc import libc_ver +from pip._internal.utils.misc import build_url_from_netloc, parse_netloc +from pip._internal.utils.urls import url_to_path + +logger = logging.getLogger(__name__) + +SecureOrigin = Tuple[str, str, Optional[Union[int, str]]] + + +# Ignore warning raised when using --trusted-host. +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +SECURE_ORIGINS: List[SecureOrigin] = [ + # protocol, hostname, port + # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) + ("https", "*", "*"), + ("*", "localhost", "*"), + ("*", "127.0.0.0/8", "*"), + ("*", "::1/128", "*"), + ("file", "*", None), + # ssh is always secure. + ("ssh", "*", "*"), +] + + +# These are environment variables present when running under various +# CI systems. For each variable, some CI systems that use the variable +# are indicated. The collection was chosen so that for each of a number +# of popular systems, at least one of the environment variables is used. +# This list is used to provide some indication of and lower bound for +# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. +# For more background, see: https://github.com/pypa/pip/issues/5499 +CI_ENVIRONMENT_VARIABLES = ( + # Azure Pipelines + "BUILD_BUILDID", + # Jenkins + "BUILD_ID", + # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI + "CI", + # Explicit environment variable. + "PIP_IS_CI", +) + + +def looks_like_ci() -> bool: + """ + Return whether it looks like pip is running under CI. + """ + # We don't use the method of checking for a tty (e.g. using isatty()) + # because some CI systems mimic a tty (e.g. Travis CI). Thus that + # method doesn't provide definitive information in either direction. + return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) + + +def user_agent() -> str: + """ + Return a string representing the user agent. + """ + data: Dict[str, Any] = { + "installer": {"name": "pip", "version": __version__}, + "python": platform.python_version(), + "implementation": { + "name": platform.python_implementation(), + }, + } + + if data["implementation"]["name"] == "CPython": + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == "PyPy": + pypy_version_info = sys.pypy_version_info # type: ignore + if pypy_version_info.releaselevel == "final": + pypy_version_info = pypy_version_info[:3] + data["implementation"]["version"] = ".".join( + [str(x) for x in pypy_version_info] + ) + elif data["implementation"]["name"] == "Jython": + # Complete Guess + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == "IronPython": + # Complete Guess + data["implementation"]["version"] = platform.python_version() + + if sys.platform.startswith("linux"): + from pip._vendor import distro + + linux_distribution = distro.name(), distro.version(), distro.codename() + distro_infos: Dict[str, Any] = dict( + filter( + lambda x: x[1], + zip(["name", "version", "id"], linux_distribution), + ) + ) + libc = dict( + filter( + lambda x: x[1], + zip(["lib", "version"], libc_ver()), + ) + ) + if libc: + distro_infos["libc"] = libc + if distro_infos: + data["distro"] = distro_infos + + if sys.platform.startswith("darwin") and platform.mac_ver()[0]: + data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} + + if platform.system(): + data.setdefault("system", {})["name"] = platform.system() + + if platform.release(): + data.setdefault("system", {})["release"] = platform.release() + + if platform.machine(): + data["cpu"] = platform.machine() + + if has_tls(): + import _ssl as ssl + + data["openssl_version"] = ssl.OPENSSL_VERSION + + setuptools_dist = get_default_environment().get_distribution("setuptools") + if setuptools_dist is not None: + data["setuptools_version"] = str(setuptools_dist.version) + + if shutil.which("rustc") is not None: + # If for any reason `rustc --version` fails, silently ignore it + try: + rustc_output = subprocess.check_output( + ["rustc", "--version"], stderr=subprocess.STDOUT, timeout=0.5 + ) + except Exception: + pass + else: + if rustc_output.startswith(b"rustc "): + # The format of `rustc --version` is: + # `b'rustc 1.52.1 (9bc8c42bb 2021-05-09)\n'` + # We extract just the middle (1.52.1) part + data["rustc_version"] = rustc_output.split(b" ")[1].decode() + + # Use None rather than False so as not to give the impression that + # pip knows it is not being run under CI. Rather, it is a null or + # inconclusive result. Also, we include some value rather than no + # value to make it easier to know that the check has been run. + data["ci"] = True if looks_like_ci() else None + + user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") + if user_data is not None: + data["user_data"] = user_data + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class LocalFSAdapter(BaseAdapter): + def send( + self, + request: PreparedRequest, + stream: bool = False, + timeout: Optional[Union[float, Tuple[float, float]]] = None, + verify: Union[bool, str] = True, + cert: Optional[Union[str, Tuple[str, str]]] = None, + proxies: Optional[Mapping[str, str]] = None, + ) -> Response: + pathname = url_to_path(request.url) + + resp = Response() + resp.status_code = 200 + resp.url = request.url + + try: + stats = os.stat(pathname) + except OSError as exc: + # format the exception raised as a io.BytesIO object, + # to return a better error message: + resp.status_code = 404 + resp.reason = type(exc).__name__ + resp.raw = io.BytesIO(f"{resp.reason}: {exc}".encode("utf8")) + else: + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + content_type = mimetypes.guess_type(pathname)[0] or "text/plain" + resp.headers = CaseInsensitiveDict( + { + "Content-Type": content_type, + "Content-Length": stats.st_size, + "Last-Modified": modified, + } + ) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self) -> None: + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class InsecureCacheControlAdapter(CacheControlAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class PipSession(requests.Session): + + timeout: Optional[int] = None + + def __init__( + self, + *args: Any, + retries: int = 0, + cache: Optional[str] = None, + trusted_hosts: Sequence[str] = (), + index_urls: Optional[List[str]] = None, + **kwargs: Any, + ) -> None: + """ + :param trusted_hosts: Domains not to emit warnings for when not using + HTTPS. + """ + super().__init__(*args, **kwargs) + + # Namespace the attribute with "pip_" just in case to prevent + # possible conflicts with the base class. + self.pip_trusted_origins: List[Tuple[str, Optional[int]]] = [] + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth(index_urls=index_urls) + + # Create our urllib3.Retry instance which will allow us to customize + # how we handle retries. + retries = urllib3.Retry( + # Set the total number of retries that a particular request can + # have. + total=retries, + # A 503 error from PyPI typically means that the Fastly -> Origin + # connection got interrupted in some way. A 503 error in general + # is typically considered a transient error so we'll go ahead and + # retry it. + # A 500 may indicate transient error in Amazon S3 + # A 520 or 527 - may indicate transient error in CloudFlare + status_forcelist=[500, 503, 520, 527], + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) # type: ignore + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching so we'll use it for all http:// URLs. + # If caching is disabled, we will also use it for + # https:// hosts that we've marked as ignoring + # TLS errors for (trusted-hosts). + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + # We want to _only_ cache responses on securely fetched origins or when + # the host is specified as trusted. We do this because + # we can't validate the response of an insecurely/untrusted fetched + # origin, and we don't want someone to be able to poison the cache and + # require manual eviction from the cache to fix it. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ) + self._trusted_host_adapter = InsecureCacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries) + self._trusted_host_adapter = insecure_adapter + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + for host in trusted_hosts: + self.add_trusted_host(host, suppress_logging=True) + + def update_index_urls(self, new_index_urls: List[str]) -> None: + """ + :param new_index_urls: New index urls to update the authentication + handler with. + """ + self.auth.index_urls = new_index_urls + + def add_trusted_host( + self, host: str, source: Optional[str] = None, suppress_logging: bool = False + ) -> None: + """ + :param host: It is okay to provide a host that has previously been + added. + :param source: An optional source string, for logging where the host + string came from. + """ + if not suppress_logging: + msg = f"adding trusted host: {host!r}" + if source is not None: + msg += f" (from {source})" + logger.info(msg) + + host_port = parse_netloc(host) + if host_port not in self.pip_trusted_origins: + self.pip_trusted_origins.append(host_port) + + self.mount( + build_url_from_netloc(host, scheme="http") + "/", self._trusted_host_adapter + ) + self.mount(build_url_from_netloc(host) + "/", self._trusted_host_adapter) + if not host_port[1]: + self.mount( + build_url_from_netloc(host, scheme="http") + ":", + self._trusted_host_adapter, + ) + # Mount wildcard ports for the same host. + self.mount(build_url_from_netloc(host) + ":", self._trusted_host_adapter) + + def iter_secure_origins(self) -> Iterator[SecureOrigin]: + yield from SECURE_ORIGINS + for host, port in self.pip_trusted_origins: + yield ("*", host, "*" if port is None else port) + + def is_secure_origin(self, location: Link) -> bool: + # Determine if this url used a secure transport mechanism + parsed = urllib.parse.urlparse(str(location)) + origin_protocol, origin_host, origin_port = ( + parsed.scheme, + parsed.hostname, + parsed.port, + ) + + # The protocol to use to see if the protocol matches. + # Don't count the repository type as part of the protocol: in + # cases such as "git+ssh", only use "ssh". (I.e., Only verify against + # the last scheme.) + origin_protocol = origin_protocol.rsplit("+", 1)[-1] + + # Determine if our origin is a secure origin by looking through our + # hardcoded list of secure origins, as well as any additional ones + # configured on this PackageFinder instance. + for secure_origin in self.iter_secure_origins(): + secure_protocol, secure_host, secure_port = secure_origin + if origin_protocol != secure_protocol and secure_protocol != "*": + continue + + try: + addr = ipaddress.ip_address(origin_host) + network = ipaddress.ip_network(secure_host) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if ( + origin_host + and origin_host.lower() != secure_host.lower() + and secure_host != "*" + ): + continue + else: + # We have a valid address and network, so see if the address + # is contained within the network. + if addr not in network: + continue + + # Check to see if the port matches. + if ( + origin_port != secure_port + and secure_port != "*" + and secure_port is not None + ): + continue + + # If we've gotten here, then this origin matches the current + # secure origin and we should return True + return True + + # If we've gotten to this point, then the origin isn't secure and we + # will not accept it as a valid location to search. We will however + # log a warning that we are ignoring it. + logger.warning( + "The repository located at %s is not a trusted or secure host and " + "is being ignored. If this repository is available via HTTPS we " + "recommend you use HTTPS instead, otherwise you may silence " + "this warning and allow it anyway with '--trusted-host %s'.", + origin_host, + origin_host, + ) + + return False + + def request(self, method: str, url: str, *args: Any, **kwargs: Any) -> Response: + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super().request(method, url, *args, **kwargs) diff --git a/venv/Lib/site-packages/pip/_internal/network/utils.py b/venv/Lib/site-packages/pip/_internal/network/utils.py new file mode 100644 index 000000000..094cf1b4a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/utils.py @@ -0,0 +1,96 @@ +from typing import Dict, Iterator + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.exceptions import NetworkConnectionError + +# The following comments and HTTP headers were originally added by +# Donald Stufft in git commit 22c562429a61bb77172039e480873fb239dd8c03. +# +# We use Accept-Encoding: identity here because requests defaults to +# accepting compressed responses. This breaks in a variety of ways +# depending on how the server is configured. +# - Some servers will notice that the file isn't a compressible file +# and will leave the file alone and with an empty Content-Encoding +# - Some servers will notice that the file is already compressed and +# will leave the file alone, adding a Content-Encoding: gzip header +# - Some servers won't notice anything at all and will take a file +# that's already been compressed and compress it again, and set +# the Content-Encoding: gzip header +# By setting this to request only the identity encoding we're hoping +# to eliminate the third case. Hopefully there does not exist a server +# which when given a file will notice it is already compressed and that +# you're not asking for a compressed file and will then decompress it +# before sending because if that's the case I don't think it'll ever be +# possible to make this work. +HEADERS: Dict[str, str] = {"Accept-Encoding": "identity"} + + +def raise_for_status(resp: Response) -> None: + http_error_msg = "" + if isinstance(resp.reason, bytes): + # We attempt to decode utf-8 first because some servers + # choose to localize their reason strings. If the string + # isn't utf-8, we fall back to iso-8859-1 for all other + # encodings. + try: + reason = resp.reason.decode("utf-8") + except UnicodeDecodeError: + reason = resp.reason.decode("iso-8859-1") + else: + reason = resp.reason + + if 400 <= resp.status_code < 500: + http_error_msg = ( + f"{resp.status_code} Client Error: {reason} for url: {resp.url}" + ) + + elif 500 <= resp.status_code < 600: + http_error_msg = ( + f"{resp.status_code} Server Error: {reason} for url: {resp.url}" + ) + + if http_error_msg: + raise NetworkConnectionError(http_error_msg, response=resp) + + +def response_chunks( + response: Response, chunk_size: int = CONTENT_CHUNK_SIZE +) -> Iterator[bytes]: + """Given a requests Response, provide the data chunks.""" + try: + # Special case for urllib3. + for chunk in response.raw.stream( + chunk_size, + # We use decode_content=False here because we don't + # want urllib3 to mess with the raw bytes we get + # from the server. If we decompress inside of + # urllib3 then we cannot verify the checksum + # because the checksum will be of the compressed + # file. This breakage will only occur if the + # server adds a Content-Encoding header, which + # depends on how the server was configured: + # - Some servers will notice that the file isn't a + # compressible file and will leave the file alone + # and with an empty Content-Encoding + # - Some servers will notice that the file is + # already compressed and will leave the file + # alone and will add a Content-Encoding: gzip + # header + # - Some servers won't notice anything at all and + # will take a file that's already been compressed + # and compress it again and set the + # Content-Encoding: gzip header + # + # By setting this not to decode automatically we + # hope to eliminate problems with the second case. + decode_content=False, + ): + yield chunk + except AttributeError: + # Standard file-like object. + while True: + chunk = response.raw.read(chunk_size) + if not chunk: + break + yield chunk diff --git a/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py b/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py new file mode 100644 index 000000000..4a7d55d0e --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py @@ -0,0 +1,60 @@ +"""xmlrpclib.Transport implementation +""" + +import logging +import urllib.parse +import xmlrpc.client +from typing import TYPE_CHECKING, Tuple + +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status + +if TYPE_CHECKING: + from xmlrpc.client import _HostType, _Marshallable + +logger = logging.getLogger(__name__) + + +class PipXmlrpcTransport(xmlrpc.client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__( + self, index_url: str, session: PipSession, use_datetime: bool = False + ) -> None: + super().__init__(use_datetime) + index_parts = urllib.parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request( + self, + host: "_HostType", + handler: str, + request_body: bytes, + verbose: bool = False, + ) -> Tuple["_Marshallable", ...]: + assert isinstance(host, str) + parts = (self._scheme, host, handler, None, None, None) + url = urllib.parse.urlunparse(parts) + try: + headers = {"Content-Type": "text/xml"} + response = self._session.post( + url, + data=request_body, + headers=headers, + stream=True, + ) + raise_for_status(response) + self.verbose = verbose + return self.parse_response(response.raw) + except NetworkConnectionError as exc: + assert exc.response + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, + url, + ) + raise diff --git a/venv/Lib/site-packages/pip/_internal/operations/__init__.py b/venv/Lib/site-packages/pip/_internal/operations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1889e3398c50b43ba5cb68df11777a043f88b5a GIT binary patch literal 198 zcmYk0F$%&!6ht?YLWCT|BBmD+K~W14QS3g3P4bbi$?md$H{g*xfp-zCyoHsUN(bf* zGu7xM8Hk|A=~Z<3?(nZDlvyyx0hKt2VYIyq+s!|GXg-D`qh;88W(f;j`UaI_Sdm-% z0+wXir8}!HSUPA?wXmTAm>i}?mREU3216#xNjbDi)|obFr6a94%fm`8&qwC=>`xk9 N`5LF)1?~mJ;tR+fHemn& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3ae6a85ea9e982e8185420a8bd1aaf3a26b1ba0 GIT binary patch literal 4011 zcmZ`+TW=h<6(%{ev$GeiSF$5p@ontdb+&C}ASnVga8kE&oEUH&!_Ea=D4mX$Txq14 zofSE2!@_J4zy^{Q$a7!i$NYl+m12NC^{GFgF9mA%JDgoMy08e#iE`z`K*v|F})!M4w!=V0Wb zomEp8)|ef=H0xiS^)F-gC3V@31!$jFfo)%rZQHv_y`hjxvh%|2|EMA4d3j2mmt9p? zj=HwZm7TH1Fh3Z2a#^mtsP(VQ)2gOct@O&!m1pD|SpDN8DQRdcUoAnmCs*ZJjNXvv zDv8y9Jh~>|#OPa6JZ8NM2RFWml2}H0oQ;BP7)Ui%BdJD%SQ+Y%qrqOZtxWSDbeRu& z_0r#nk|f$nRO#M{2YKnJ^+@ecVy#j& z%6p>hJjis4%@35M#pUuK8fBw+U`62wBCP49(Vhw=w$Sm`gw%$^Oo#Ev5uy&=$9tbYN4r>^!Wjc1Pt=oS3ryq}s4-FPhgHGqfKXhGjDh(@ahh zg?2j(_a{+8CI~~_!M5e8FpNf{EVmbBAaxroA=|bO%vzp?fG4Aj^pu7m^fD&mv}Q9 zD_w1SbFiZZd+Xz8x{J+LP>hGF$$Z}BR#tjiId&`WFy>9 zZh|OC021p33t%w;ERkVwcBz2$`dw>nV7QrNz-yR|l4qrB_Turu^^dg9H2ek-8*K** z05t)S8(cT)E&+QFYU$jO3u2*}Nh8{mq9*aU-YWNAl&ty7R z63TMjYg=UKpOU6}8XIz{vW2F?q|=I5x~hReIc6CQ61!JDGVeaGcZ{9N7v+?!4p)F{4o0eH+r z%NP2W^f}Euo4d*Y8PU;0yiTO*pqTei5lI5vd@6EIwDnv}og8qX)*sOaocT9wXesoC zPf)Z#au3v9(2YGh5fSi|@2KPW{w&zm(Re3#NHkM6-U&lCSv?jcQeoTd4FZRw>s)6Q`4eSZcP|hOsakmdoLczK%~p zw}O?o@v8WUhvka3PPlcX00^&4_ygPN_ zXYMYHZ%41fv~FRkowE_&U%_k`SpN!|d$r0)6fBR~uln?wJy30FQQMy{D#G~djR4y+58lc@pX@fx8h%sHK?X?kIx+KMK i)e$T1Yr(~9#Fy7XG+(X0EzTg>vN8{Sar(H|dG#N^Uorat literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b265d3fbc90772f6656de498ea6c9f020a2409e GIT binary patch literal 6196 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20ffea2e954dbc26c9e1f5f54574ced5b550f1e5 GIT binary patch literal 14894 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8696903bb378428562d0e6ac471a1ca7532a6703 GIT binary patch literal 1465 zcmZuxPmdcl6t_K-nMpdyZhN70S7-zrh{PsTYKv45LTtBxB&edcs3M9OO~&4=voqt7 z?b$R@f-1_j>R0F<;lz#aG7=|Fd;~ajd7jOLt-vF{@$-AOe}2FBEZXfBg7(|@zmI=y zAoPb(E;bL8FQKa`2#SV?VoDM`#PGKgl3GIxn>jnN)5fq-jT?!RxRw8<>mVr_bfwGTb&)AmpHutUjX)a@*8e8Y4^BOL`3mN6M=F0vpI z6CMYLLIz3{GG+ngN=rU2j8*koe*#MMu#3y>0n2Y*|Mb2P$NN!|Flpw#DtJN^BBbhE_7F!1Vx|z89(D$LM zUqI+8^3-}sR@Ty*;+4HbuRg;_6KcP}tHu()ww8@k{OWy-7A|P^(mus2=PAmr*hn|# zeT-Hv*c|OF32nT@OZP`Yot688JHs>d6j8@UHhKYkX5MwAZqG1A=KBu%f2zERoYX*v#uu%^Rj7#smyX~vx81^xOwSsCXD8+5A;nT z@a#~8X12jh{{D>QyRgOI&-QPRzEw=B(W3(Lb96_m2c_VRgoZC$!7tYtM$UHMkmtL9b=q)rYT5mRV77;)q?Bw%x;|ciy3c1 z76+lG*Qnyc1tBFDB>n>a4~`>o;=~zFrEPfQ-8CB&G1fefXP#%?y!U&*7uRYQg7(W7 zzjeMh5&B(yOtva~d@`M4C6L$hUu zl~yIRT2?-11XE$PRn5ocpcd9!^?Ymw)8R~O1|xq+xe3)hu}=RovOhCZ(-s}2Ev zN0^fge@DJlC*eV*I00N?vWSWuKiy~$Nt)Ls?*5GUG;Hx=`_7H_CxUU&Uh50twpU`W zui`1%_x$vuey6?abCE7R;_)W{cN9#P!x7?~A-I~!uC#6j04*;LlUrxieU$spp}}RR3l1ux+q@aX5Lj^w24nSs z{V<+zU*Ro4Zy$UM9{fYab+Ggx=FCnvz}a!c{{N4!_qh6}QI;eYvaHU6eYp;EQVUol z4M>g9O{Jc=>4wxdV?SyTuINElx`5Hh4VlP2IutW%rGD}0AXeiTjaZ(mb^xp7rA>@gALGgJ zAt#o`N&Xn}PTvA#%b8vfcYvyPozRUScPOk>$9v=vu1B%chm3T*IO_Vn!No_MB`#OT z7Y1G%U$ik;Om@=^VDRxwVGuB|=Iu~fg(QQss6(0XWO>ZbK$#v^LZ2d7J^HJRKAq^&#)*9Vn=|izb4iY6H(n%)A-Kv>&iriXg>x5IQn7 n6X>go7jU&y#Z_#PIgLz1D2^dOuZc!p0mHo{CGs~h>M#BQ$ZV$3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32a48a5ba3d5261b4eef7c12ae289347d6f38cbd GIT binary patch literal 1221 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 str: + """Generate metadata using mechanisms described in PEP 517. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that Pep517HookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)") + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py b/venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py new file mode 100644 index 000000000..4c3f48b6c --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py @@ -0,0 +1,41 @@ +"""Metadata generation logic for source distributions. +""" + +import os + +from pip._vendor.pep517.wrappers import Pep517HookCaller + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import ( + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + + +def generate_editable_metadata( + build_env: BuildEnvironment, backend: Pep517HookCaller, details: str +) -> str: + """Generate metadata using mechanisms described in PEP 660. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that Pep517HookCaller implements a fallback for + # prepare_metadata_for_build_wheel/editable, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message( + "Preparing editable metadata (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py b/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py new file mode 100644 index 000000000..e60988d64 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py @@ -0,0 +1,74 @@ +"""Metadata generation logic for legacy source distributions. +""" + +import logging +import os + +from pip._internal.build_env import BuildEnvironment +from pip._internal.cli.spinners import open_spinner +from pip._internal.exceptions import ( + InstallationError, + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +def _find_egg_info(directory: str) -> str: + """Find an .egg-info subdirectory in `directory`.""" + filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")] + + if not filenames: + raise InstallationError(f"No .egg-info directory found in {directory}") + + if len(filenames) > 1: + raise InstallationError( + "More than one .egg-info directory found in {}".format(directory) + ) + + return os.path.join(directory, filenames[0]) + + +def generate_metadata( + build_env: BuildEnvironment, + setup_py_path: str, + source_dir: str, + isolated: bool, + details: str, +) -> str: + """Generate metadata using setup.py-based defacto mechanisms. + + Returns the generated metadata directory. + """ + logger.debug( + "Running setup.py (path:%s) egg_info for package %s", + setup_py_path, + details, + ) + + egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path + + args = make_setuptools_egg_info_args( + setup_py_path, + egg_info_dir=egg_info_dir, + no_user_config=isolated, + ) + + with build_env: + with open_spinner("Preparing metadata (setup.py)") as spinner: + try: + call_subprocess( + args, + cwd=source_dir, + command_desc="python setup.py egg_info", + spinner=spinner, + ) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + # Return the .egg-info directory. + return _find_egg_info(egg_info_dir) diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py b/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py new file mode 100644 index 000000000..b0d2fc9ea --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py @@ -0,0 +1,37 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pep517.wrappers import Pep517HookCaller + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_pep517( + name: str, + backend: Pep517HookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 517 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building wheel for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + wheel_name = backend.build_wheel( + tempd, + metadata_directory=metadata_directory, + ) + except Exception: + logger.error("Failed building wheel for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py b/venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py new file mode 100644 index 000000000..cf7b01aed --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py @@ -0,0 +1,46 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pep517.wrappers import HookMissing, Pep517HookCaller + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_editable( + name: str, + backend: Pep517HookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 660 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building editable for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + wheel_name = backend.build_editable( + tempd, + metadata_directory=metadata_directory, + ) + except HookMissing as e: + logger.error( + "Cannot build editable %s because the build " + "backend does not have the %s hook", + name, + e, + ) + return None + except Exception: + logger.error("Failed building editable for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py b/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py new file mode 100644 index 000000000..c5f0492cc --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py @@ -0,0 +1,102 @@ +import logging +import os.path +from typing import List, Optional + +from pip._internal.cli.spinners import open_spinner +from pip._internal.utils.setuptools_build import make_setuptools_bdist_wheel_args +from pip._internal.utils.subprocess import call_subprocess, format_command_args + +logger = logging.getLogger(__name__) + + +def format_command_result( + command_args: List[str], + command_output: str, +) -> str: + """Format command information for logging.""" + command_desc = format_command_args(command_args) + text = f"Command arguments: {command_desc}\n" + + if not command_output: + text += "Command output: None" + elif logger.getEffectiveLevel() > logging.DEBUG: + text += "Command output: [use --verbose to show]" + else: + if not command_output.endswith("\n"): + command_output += "\n" + text += f"Command output:\n{command_output}" + + return text + + +def get_legacy_build_wheel_path( + names: List[str], + temp_dir: str, + name: str, + command_args: List[str], + command_output: str, +) -> Optional[str]: + """Return the path to the wheel in the temporary build directory.""" + # Sort for determinism. + names = sorted(names) + if not names: + msg = ("Legacy build of wheel for {!r} created no files.\n").format(name) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + return None + + if len(names) > 1: + msg = ( + "Legacy build of wheel for {!r} created more than one file.\n" + "Filenames (choosing first): {}\n" + ).format(name, names) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + + return os.path.join(temp_dir, names[0]) + + +def build_wheel_legacy( + name: str, + setup_py_path: str, + source_dir: str, + global_options: List[str], + build_options: List[str], + tempd: str, +) -> Optional[str]: + """Build one unpacked package using the "legacy" build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + wheel_args = make_setuptools_bdist_wheel_args( + setup_py_path, + global_options=global_options, + build_options=build_options, + destination_dir=tempd, + ) + + spin_message = f"Building wheel for {name} (setup.py)" + with open_spinner(spin_message) as spinner: + logger.debug("Destination directory: %s", tempd) + + try: + output = call_subprocess( + wheel_args, + command_desc="python setup.py bdist_wheel", + cwd=source_dir, + spinner=spinner, + ) + except Exception: + spinner.finish("error") + logger.error("Failed building wheel for %s", name) + return None + + names = os.listdir(tempd) + wheel_path = get_legacy_build_wheel_path( + names=names, + temp_dir=tempd, + name=name, + command_args=wheel_args, + command_output=output, + ) + return wheel_path diff --git a/venv/Lib/site-packages/pip/_internal/operations/check.py b/venv/Lib/site-packages/pip/_internal/operations/check.py new file mode 100644 index 000000000..fb3ac8b9c --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/check.py @@ -0,0 +1,149 @@ +"""Validation of dependencies of packages +""" + +import logging +from typing import Callable, Dict, List, NamedTuple, Optional, Set, Tuple + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.metadata import get_default_environment +from pip._internal.metadata.base import DistributionVersion +from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +class PackageDetails(NamedTuple): + version: DistributionVersion + dependencies: List[Requirement] + + +# Shorthands +PackageSet = Dict[NormalizedName, PackageDetails] +Missing = Tuple[NormalizedName, Requirement] +Conflicting = Tuple[NormalizedName, DistributionVersion, Requirement] + +MissingDict = Dict[NormalizedName, List[Missing]] +ConflictingDict = Dict[NormalizedName, List[Conflicting]] +CheckResult = Tuple[MissingDict, ConflictingDict] +ConflictDetails = Tuple[PackageSet, CheckResult] + + +def create_package_set_from_installed() -> Tuple[PackageSet, bool]: + """Converts a list of distributions into a PackageSet.""" + package_set = {} + problems = False + env = get_default_environment() + for dist in env.iter_installed_distributions(local_only=False, skip=()): + name = dist.canonical_name + try: + dependencies = list(dist.iter_dependencies()) + package_set[name] = PackageDetails(dist.version, dependencies) + except (OSError, ValueError) as e: + # Don't crash on unreadable or broken metadata. + logger.warning("Error parsing requirements for %s: %s", name, e) + problems = True + return package_set, problems + + +def check_package_set( + package_set: PackageSet, should_ignore: Optional[Callable[[str], bool]] = None +) -> CheckResult: + """Check if a package set is consistent + + If should_ignore is passed, it should be a callable that takes a + package name and returns a boolean. + """ + + missing = {} + conflicting = {} + + for package_name, package_detail in package_set.items(): + # Info about dependencies of package_name + missing_deps: Set[Missing] = set() + conflicting_deps: Set[Conflicting] = set() + + if should_ignore and should_ignore(package_name): + continue + + for req in package_detail.dependencies: + name = canonicalize_name(req.name) + + # Check if it's missing + if name not in package_set: + missed = True + if req.marker is not None: + missed = req.marker.evaluate() + if missed: + missing_deps.add((name, req)) + continue + + # Check if there's a conflict + version = package_set[name].version + if not req.specifier.contains(version, prereleases=True): + conflicting_deps.add((name, version, req)) + + if missing_deps: + missing[package_name] = sorted(missing_deps, key=str) + if conflicting_deps: + conflicting[package_name] = sorted(conflicting_deps, key=str) + + return missing, conflicting + + +def check_install_conflicts(to_install: List[InstallRequirement]) -> ConflictDetails: + """For checking if the dependency graph would be consistent after \ + installing given requirements + """ + # Start from the current state + package_set, _ = create_package_set_from_installed() + # Install packages + would_be_installed = _simulate_installation_of(to_install, package_set) + + # Only warn about directly-dependent packages; create a whitelist of them + whitelist = _create_whitelist(would_be_installed, package_set) + + return ( + package_set, + check_package_set( + package_set, should_ignore=lambda name: name not in whitelist + ), + ) + + +def _simulate_installation_of( + to_install: List[InstallRequirement], package_set: PackageSet +) -> Set[NormalizedName]: + """Computes the version of packages after installing to_install.""" + # Keep track of packages that were installed + installed = set() + + # Modify it as installing requirement_set would (assuming no errors) + for inst_req in to_install: + abstract_dist = make_distribution_for_install_requirement(inst_req) + dist = abstract_dist.get_metadata_distribution() + name = dist.canonical_name + package_set[name] = PackageDetails(dist.version, list(dist.iter_dependencies())) + + installed.add(name) + + return installed + + +def _create_whitelist( + would_be_installed: Set[NormalizedName], package_set: PackageSet +) -> Set[NormalizedName]: + packages_affected = set(would_be_installed) + + for package_name in package_set: + if package_name in packages_affected: + continue + + for req in package_set[package_name].dependencies: + if canonicalize_name(req.name) in packages_affected: + packages_affected.add(package_name) + break + + return packages_affected diff --git a/venv/Lib/site-packages/pip/_internal/operations/freeze.py b/venv/Lib/site-packages/pip/_internal/operations/freeze.py new file mode 100644 index 000000000..456554085 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/freeze.py @@ -0,0 +1,254 @@ +import collections +import logging +import os +from typing import Container, Dict, Iterable, Iterator, List, NamedTuple, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_file import COMMENT_RE +from pip._internal.utils.direct_url_helpers import direct_url_as_pep440_direct_reference + +logger = logging.getLogger(__name__) + + +class _EditableInfo(NamedTuple): + requirement: str + comments: List[str] + + +def freeze( + requirement: Optional[List[str]] = None, + local_only: bool = False, + user_only: bool = False, + paths: Optional[List[str]] = None, + isolated: bool = False, + exclude_editable: bool = False, + skip: Container[str] = (), +) -> Iterator[str]: + installations: Dict[str, FrozenRequirement] = {} + + dists = get_environment(paths).iter_installed_distributions( + local_only=local_only, + skip=(), + user_only=user_only, + ) + for dist in dists: + req = FrozenRequirement.from_dist(dist) + if exclude_editable and req.editable: + continue + installations[req.canonical_name] = req + + if requirement: + # the options that don't get turned into an InstallRequirement + # should only be emitted once, even if the same option is in multiple + # requirements files, so we need to keep track of what has been emitted + # so that we don't emit it again if it's seen again + emitted_options: Set[str] = set() + # keep track of which files a requirement is in so that we can + # give an accurate warning if a requirement appears multiple times. + req_files: Dict[str, List[str]] = collections.defaultdict(list) + for req_file_path in requirement: + with open(req_file_path) as req_file: + for line in req_file: + if ( + not line.strip() + or line.strip().startswith("#") + or line.startswith( + ( + "-r", + "--requirement", + "-f", + "--find-links", + "-i", + "--index-url", + "--pre", + "--trusted-host", + "--process-dependency-links", + "--extra-index-url", + "--use-feature", + ) + ) + ): + line = line.rstrip() + if line not in emitted_options: + emitted_options.add(line) + yield line + continue + + if line.startswith("-e") or line.startswith("--editable"): + if line.startswith("-e"): + line = line[2:].strip() + else: + line = line[len("--editable") :].strip().lstrip("=") + line_req = install_req_from_editable( + line, + isolated=isolated, + ) + else: + line_req = install_req_from_line( + COMMENT_RE.sub("", line).strip(), + isolated=isolated, + ) + + if not line_req.name: + logger.info( + "Skipping line in requirement file [%s] because " + "it's not clear what it would install: %s", + req_file_path, + line.strip(), + ) + logger.info( + " (add #egg=PackageName to the URL to avoid" + " this warning)" + ) + else: + line_req_canonical_name = canonicalize_name(line_req.name) + if line_req_canonical_name not in installations: + # either it's not installed, or it is installed + # but has been processed already + if not req_files[line_req.name]: + logger.warning( + "Requirement file [%s] contains %s, but " + "package %r is not installed", + req_file_path, + COMMENT_RE.sub("", line).strip(), + line_req.name, + ) + else: + req_files[line_req.name].append(req_file_path) + else: + yield str(installations[line_req_canonical_name]).rstrip() + del installations[line_req_canonical_name] + req_files[line_req.name].append(req_file_path) + + # Warn about requirements that were included multiple times (in a + # single requirements file or in different requirements files). + for name, files in req_files.items(): + if len(files) > 1: + logger.warning( + "Requirement %s included multiple times [%s]", + name, + ", ".join(sorted(set(files))), + ) + + yield ("## The following requirements were added by pip freeze:") + for installation in sorted(installations.values(), key=lambda x: x.name.lower()): + if installation.canonical_name not in skip: + yield str(installation).rstrip() + + +def _format_as_name_version(dist: BaseDistribution) -> str: + if isinstance(dist.version, Version): + return f"{dist.raw_name}=={dist.version}" + return f"{dist.raw_name}==={dist.version}" + + +def _get_editable_info(dist: BaseDistribution) -> _EditableInfo: + """ + Compute and return values (req, comments) for use in + FrozenRequirement.from_dist(). + """ + editable_project_location = dist.editable_project_location + assert editable_project_location + location = os.path.normcase(os.path.abspath(editable_project_location)) + + from pip._internal.vcs import RemoteNotFoundError, RemoteNotValidError, vcs + + vcs_backend = vcs.get_backend_for_dir(location) + + if vcs_backend is None: + display = _format_as_name_version(dist) + logger.debug( + 'No VCS found for editable requirement "%s" in: %r', + display, + location, + ) + return _EditableInfo( + requirement=location, + comments=[f"# Editable install with no version control ({display})"], + ) + + vcs_name = type(vcs_backend).__name__ + + try: + req = vcs_backend.get_src_requirement(location, dist.raw_name) + except RemoteNotFoundError: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[f"# Editable {vcs_name} install with no remote ({display})"], + ) + except RemoteNotValidError as ex: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[ + f"# Editable {vcs_name} install ({display}) with either a deleted " + f"local remote or invalid URI:", + f"# '{ex.url}'", + ], + ) + except BadCommand: + logger.warning( + "cannot determine version of editable source in %s " + "(%s command not found in path)", + location, + vcs_backend.name, + ) + return _EditableInfo(requirement=location, comments=[]) + except InstallationError as exc: + logger.warning("Error when trying to get requirement for VCS system %s", exc) + else: + return _EditableInfo(requirement=req, comments=[]) + + logger.warning("Could not determine repository location of %s", location) + + return _EditableInfo( + requirement=location, + comments=["## !! Could not determine repository location"], + ) + + +class FrozenRequirement: + def __init__( + self, + name: str, + req: str, + editable: bool, + comments: Iterable[str] = (), + ) -> None: + self.name = name + self.canonical_name = canonicalize_name(name) + self.req = req + self.editable = editable + self.comments = comments + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "FrozenRequirement": + editable = dist.editable + if editable: + req, comments = _get_editable_info(dist) + else: + comments = [] + direct_url = dist.direct_url + if direct_url: + # if PEP 610 metadata is present, use it + req = direct_url_as_pep440_direct_reference(direct_url, dist.raw_name) + else: + # name==version requirement + req = _format_as_name_version(dist) + + return cls(dist.raw_name, req, editable, comments=comments) + + def __str__(self) -> str: + req = self.req + if self.editable: + req = f"-e {req}" + return "\n".join(list(self.comments) + [str(req)]) + "\n" diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py b/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py new file mode 100644 index 000000000..24d6a5dd3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py @@ -0,0 +1,2 @@ +"""For modules related to installing packages. +""" diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7fab151863bfe4799663ffcf488977424a301c13 GIT binary patch literal 262 zcmYk1O-chn5QTfPaR}rNy$zVm!ktJ6DA9$8C~l-l(=%O!(oR>~RTIz~c>?beaOEvr z+2arRpkDDPczi{Z$ygP=t>4?DvOk9KUsVaqGF%t)>R$QkR!v7Qhbzi@OTG`lIzw;* zUJGfAEG`6$8=YMD=r+Lf@zu22A6Vr4;OiP=HinM-U9qrmL1-y}?p#VC-Y3k@a6PLLuuzc7t0R}^dK>3LtD N{7^53&v-zo)fd1+POJa` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e47009a5e65ef829c86b57092f04d85a5046682 GIT binary patch literal 1549 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 C7^l4e literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdeb49cc8d81965535a90ca7c935bfb1371b020e GIT binary patch literal 21095 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 NjL6R4rB(L({~x8`q;miO literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py b/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py new file mode 100644 index 000000000..bb548cdca --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py @@ -0,0 +1,47 @@ +"""Legacy editable installation process, i.e. `setup.py develop`. +""" +import logging +from typing import List, Optional, Sequence + +from pip._internal.build_env import BuildEnvironment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.setuptools_build import make_setuptools_develop_args +from pip._internal.utils.subprocess import call_subprocess + +logger = logging.getLogger(__name__) + + +def install_editable( + install_options: List[str], + global_options: Sequence[str], + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, + name: str, + setup_py_path: str, + isolated: bool, + build_env: BuildEnvironment, + unpacked_source_directory: str, +) -> None: + """Install a package in editable mode. Most arguments are pass-through + to setuptools. + """ + logger.info("Running setup.py develop for %s", name) + + args = make_setuptools_develop_args( + setup_py_path, + global_options=global_options, + install_options=install_options, + no_user_config=isolated, + prefix=prefix, + home=home, + use_user_site=use_user_site, + ) + + with indent_log(): + with build_env: + call_subprocess( + args, + command_desc="python setup.py develop", + cwd=unpacked_source_directory, + ) diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py b/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py new file mode 100644 index 000000000..5b7ef9017 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py @@ -0,0 +1,120 @@ +"""Legacy installation process, i.e. `setup.py install`. +""" + +import logging +import os +from distutils.util import change_root +from typing import List, Optional, Sequence + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import InstallationError, LegacyInstallFailure +from pip._internal.models.scheme import Scheme +from pip._internal.utils.misc import ensure_dir +from pip._internal.utils.setuptools_build import make_setuptools_install_args +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +def write_installed_files_from_setuptools_record( + record_lines: List[str], + root: Optional[str], + req_description: str, +) -> None: + def prepend_root(path: str) -> str: + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + for line in record_lines: + directory = os.path.dirname(line) + if directory.endswith(".egg-info"): + egg_info_dir = prepend_root(directory) + break + else: + message = ( + "{} did not indicate that it installed an " + ".egg-info directory. Only setup.py projects " + "generating .egg-info directories are supported." + ).format(req_description) + raise InstallationError(message) + + new_lines = [] + for line in record_lines: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append(os.path.relpath(prepend_root(filename), egg_info_dir)) + new_lines.sort() + ensure_dir(egg_info_dir) + inst_files_path = os.path.join(egg_info_dir, "installed-files.txt") + with open(inst_files_path, "w") as f: + f.write("\n".join(new_lines) + "\n") + + +def install( + install_options: List[str], + global_options: Sequence[str], + root: Optional[str], + home: Optional[str], + prefix: Optional[str], + use_user_site: bool, + pycompile: bool, + scheme: Scheme, + setup_py_path: str, + isolated: bool, + req_name: str, + build_env: BuildEnvironment, + unpacked_source_directory: str, + req_description: str, +) -> bool: + + header_dir = scheme.headers + + with TempDirectory(kind="record") as temp_dir: + try: + record_filename = os.path.join(temp_dir.path, "install-record.txt") + install_args = make_setuptools_install_args( + setup_py_path, + global_options=global_options, + install_options=install_options, + record_filename=record_filename, + root=root, + prefix=prefix, + header_dir=header_dir, + home=home, + use_user_site=use_user_site, + no_user_config=isolated, + pycompile=pycompile, + ) + + runner = runner_with_spinner_message( + f"Running setup.py install for {req_name}" + ) + with build_env: + runner( + cmd=install_args, + cwd=unpacked_source_directory, + ) + + if not os.path.exists(record_filename): + logger.debug("Record file %s not found", record_filename) + # Signal to the caller that we didn't install the new package + return False + + except Exception as e: + # Signal to the caller that we didn't install the new package + raise LegacyInstallFailure(package_details=req_name) from e + + # At this point, we have successfully installed the requirement. + + # We intentionally do not use any encoding to read the file because + # setuptools writes the file using distutils.file_util.write_file, + # which does not specify an encoding. + with open(record_filename) as f: + record_lines = f.read().splitlines() + + write_installed_files_from_setuptools_record(record_lines, root, req_description) + return True diff --git a/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py b/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py new file mode 100644 index 000000000..e191b1343 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py @@ -0,0 +1,738 @@ +"""Support for installing and building the "wheel" binary package format. +""" + +import collections +import compileall +import contextlib +import csv +import importlib +import logging +import os.path +import re +import shutil +import sys +import warnings +from base64 import urlsafe_b64encode +from email.message import Message +from itertools import chain, filterfalse, starmap +from typing import ( + IO, + TYPE_CHECKING, + Any, + BinaryIO, + Callable, + Dict, + Iterable, + Iterator, + List, + NewType, + Optional, + Sequence, + Set, + Tuple, + Union, + cast, +) +from zipfile import ZipFile, ZipInfo + +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor.distlib.util import get_export_entry +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InstallationError +from pip._internal.locations import get_major_minor_version +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) +from pip._internal.models.direct_url import DIRECT_URL_METADATA_NAME, DirectUrl +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import captured_stdout, ensure_dir, hash_file, partition +from pip._internal.utils.unpacking import ( + current_umask, + is_within_directory, + set_extracted_file_to_default_mode_plus_executable, + zip_item_is_executable, +) +from pip._internal.utils.wheel import parse_wheel + +if TYPE_CHECKING: + from typing import Protocol + + class File(Protocol): + src_record_path: "RecordPath" + dest_path: str + changed: bool + + def save(self) -> None: + pass + + +logger = logging.getLogger(__name__) + +RecordPath = NewType("RecordPath", str) +InstalledCSVRow = Tuple[RecordPath, str, Union[int, str]] + + +def rehash(path: str, blocksize: int = 1 << 20) -> Tuple[str, str]: + """Return (encoded_digest, length) for path using hashlib.sha256()""" + h, length = hash_file(path, blocksize) + digest = "sha256=" + urlsafe_b64encode(h.digest()).decode("latin1").rstrip("=") + return (digest, str(length)) + + +def csv_io_kwargs(mode: str) -> Dict[str, Any]: + """Return keyword arguments to properly open a CSV file + in the given mode. + """ + return {"mode": mode, "newline": "", "encoding": "utf-8"} + + +def fix_script(path: str) -> bool: + """Replace #!python with #!/path/to/python + Return True if file was changed. + """ + # XXX RECORD hashes will need to be updated + assert os.path.isfile(path) + + with open(path, "rb") as script: + firstline = script.readline() + if not firstline.startswith(b"#!python"): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = b"#!" + exename + os.linesep.encode("ascii") + rest = script.read() + with open(path, "wb") as script: + script.write(firstline) + script.write(rest) + return True + + +def wheel_root_is_purelib(metadata: Message) -> bool: + return metadata.get("Root-Is-Purelib", "").lower() == "true" + + +def get_entrypoints(dist: BaseDistribution) -> Tuple[Dict[str, str], Dict[str, str]]: + console_scripts = {} + gui_scripts = {} + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + console_scripts[entry_point.name] = entry_point.value + elif entry_point.group == "gui_scripts": + gui_scripts[entry_point.name] = entry_point.value + return console_scripts, gui_scripts + + +def message_about_scripts_not_on_PATH(scripts: Sequence[str]) -> Optional[str]: + """Determine if any scripts are not on PATH and format a warning. + Returns a warning message if one or more scripts are not on PATH, + otherwise None. + """ + if not scripts: + return None + + # Group scripts by the path they were installed in + grouped_by_dir: Dict[str, Set[str]] = collections.defaultdict(set) + for destfile in scripts: + parent_dir = os.path.dirname(destfile) + script_name = os.path.basename(destfile) + grouped_by_dir[parent_dir].add(script_name) + + # We don't want to warn for directories that are on PATH. + not_warn_dirs = [ + os.path.normcase(i).rstrip(os.sep) + for i in os.environ.get("PATH", "").split(os.pathsep) + ] + # If an executable sits with sys.executable, we don't warn for it. + # This covers the case of venv invocations without activating the venv. + not_warn_dirs.append(os.path.normcase(os.path.dirname(sys.executable))) + warn_for: Dict[str, Set[str]] = { + parent_dir: scripts + for parent_dir, scripts in grouped_by_dir.items() + if os.path.normcase(parent_dir) not in not_warn_dirs + } + if not warn_for: + return None + + # Format a message + msg_lines = [] + for parent_dir, dir_scripts in warn_for.items(): + sorted_scripts: List[str] = sorted(dir_scripts) + if len(sorted_scripts) == 1: + start_text = "script {} is".format(sorted_scripts[0]) + else: + start_text = "scripts {} are".format( + ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] + ) + + msg_lines.append( + "The {} installed in '{}' which is not on PATH.".format( + start_text, parent_dir + ) + ) + + last_line_fmt = ( + "Consider adding {} to PATH or, if you prefer " + "to suppress this warning, use --no-warn-script-location." + ) + if len(msg_lines) == 1: + msg_lines.append(last_line_fmt.format("this directory")) + else: + msg_lines.append(last_line_fmt.format("these directories")) + + # Add a note if any directory starts with ~ + warn_for_tilde = any( + i[0] == "~" for i in os.environ.get("PATH", "").split(os.pathsep) if i + ) + if warn_for_tilde: + tilde_warning_msg = ( + "NOTE: The current PATH contains path(s) starting with `~`, " + "which may not be expanded by all applications." + ) + msg_lines.append(tilde_warning_msg) + + # Returns the formatted multiline message + return "\n".join(msg_lines) + + +def _normalized_outrows( + outrows: Iterable[InstalledCSVRow], +) -> List[Tuple[str, str, str]]: + """Normalize the given rows of a RECORD file. + + Items in each row are converted into str. Rows are then sorted to make + the value more predictable for tests. + + Each row is a 3-tuple (path, hash, size) and corresponds to a record of + a RECORD file (see PEP 376 and PEP 427 for details). For the rows + passed to this function, the size can be an integer as an int or string, + or the empty string. + """ + # Normally, there should only be one row per path, in which case the + # second and third elements don't come into play when sorting. + # However, in cases in the wild where a path might happen to occur twice, + # we don't want the sort operation to trigger an error (but still want + # determinism). Since the third element can be an int or string, we + # coerce each element to a string to avoid a TypeError in this case. + # For additional background, see-- + # https://github.com/pypa/pip/issues/5868 + return sorted( + (record_path, hash_, str(size)) for record_path, hash_, size in outrows + ) + + +def _record_to_fs_path(record_path: RecordPath) -> str: + return record_path + + +def _fs_to_record_path(path: str, relative_to: Optional[str] = None) -> RecordPath: + if relative_to is not None: + # On Windows, do not handle relative paths if they belong to different + # logical disks + if ( + os.path.splitdrive(path)[0].lower() + == os.path.splitdrive(relative_to)[0].lower() + ): + path = os.path.relpath(path, relative_to) + path = path.replace(os.path.sep, "/") + return cast("RecordPath", path) + + +def get_csv_rows_for_installed( + old_csv_rows: List[List[str]], + installed: Dict[RecordPath, RecordPath], + changed: Set[RecordPath], + generated: List[str], + lib_dir: str, +) -> List[InstalledCSVRow]: + """ + :param installed: A map from archive RECORD path to installation RECORD + path. + """ + installed_rows: List[InstalledCSVRow] = [] + for row in old_csv_rows: + if len(row) > 3: + logger.warning("RECORD line has more than three elements: %s", row) + old_record_path = cast("RecordPath", row[0]) + new_record_path = installed.pop(old_record_path, old_record_path) + if new_record_path in changed: + digest, length = rehash(_record_to_fs_path(new_record_path)) + else: + digest = row[1] if len(row) > 1 else "" + length = row[2] if len(row) > 2 else "" + installed_rows.append((new_record_path, digest, length)) + for f in generated: + path = _fs_to_record_path(f, lib_dir) + digest, length = rehash(f) + installed_rows.append((path, digest, length)) + for installed_record_path in installed.values(): + installed_rows.append((installed_record_path, "", "")) + return installed_rows + + +def get_console_script_specs(console: Dict[str, str]) -> List[str]: + """ + Given the mapping from entrypoint name to callable, return the relevant + console script specs. + """ + # Don't mutate caller's version + console = console.copy() + + scripts_to_generate = [] + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop("pip", None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append("pip = " + pip_script) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + scripts_to_generate.append( + "pip{} = {}".format(sys.version_info[0], pip_script) + ) + + scripts_to_generate.append(f"pip{get_major_minor_version()} = {pip_script}") + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r"pip(\d(\.\d)?)?$", k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop("easy_install", None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append("easy_install = " + easy_install_script) + + scripts_to_generate.append( + "easy_install-{} = {}".format( + get_major_minor_version(), easy_install_script + ) + ) + # Delete any other versioned easy_install entry points + easy_install_ep = [ + k for k in console if re.match(r"easy_install(-\d\.\d)?$", k) + ] + for k in easy_install_ep: + del console[k] + + # Generate the console entry points specified in the wheel + scripts_to_generate.extend(starmap("{} = {}".format, console.items())) + + return scripts_to_generate + + +class ZipBackedFile: + def __init__( + self, src_record_path: RecordPath, dest_path: str, zip_file: ZipFile + ) -> None: + self.src_record_path = src_record_path + self.dest_path = dest_path + self._zip_file = zip_file + self.changed = False + + def _getinfo(self) -> ZipInfo: + return self._zip_file.getinfo(self.src_record_path) + + def save(self) -> None: + # directory creation is lazy and after file filtering + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + parent_dir = os.path.dirname(self.dest_path) + ensure_dir(parent_dir) + + # When we open the output file below, any existing file is truncated + # before we start writing the new contents. This is fine in most + # cases, but can cause a segfault if pip has loaded a shared + # object (e.g. from pyopenssl through its vendored urllib3) + # Since the shared object is mmap'd an attempt to call a + # symbol in it will then cause a segfault. Unlinking the file + # allows writing of new contents while allowing the process to + # continue to use the old copy. + if os.path.exists(self.dest_path): + os.unlink(self.dest_path) + + zipinfo = self._getinfo() + + with self._zip_file.open(zipinfo) as f: + with open(self.dest_path, "wb") as dest: + shutil.copyfileobj(f, dest) + + if zip_item_is_executable(zipinfo): + set_extracted_file_to_default_mode_plus_executable(self.dest_path) + + +class ScriptFile: + def __init__(self, file: "File") -> None: + self._file = file + self.src_record_path = self._file.src_record_path + self.dest_path = self._file.dest_path + self.changed = False + + def save(self) -> None: + self._file.save() + self.changed = fix_script(self.dest_path) + + +class MissingCallableSuffix(InstallationError): + def __init__(self, entry_point: str) -> None: + super().__init__( + "Invalid script entry point: {} - A callable " + "suffix is required. Cf https://packaging.python.org/" + "specifications/entry-points/#use-for-scripts for more " + "information.".format(entry_point) + ) + + +def _raise_for_invalid_entrypoint(specification: str) -> None: + entry = get_export_entry(specification) + if entry is not None and entry.suffix is None: + raise MissingCallableSuffix(str(entry)) + + +class PipScriptMaker(ScriptMaker): + def make(self, specification: str, options: Dict[str, Any] = None) -> List[str]: + _raise_for_invalid_entrypoint(specification) + return super().make(specification, options) + + +def _install_wheel( + name: str, + wheel_zip: ZipFile, + wheel_path: str, + scheme: Scheme, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + """Install a wheel. + + :param name: Name of the project to install + :param wheel_zip: open ZipFile for wheel being installed + :param scheme: Distutils scheme dictating the install directories + :param req_description: String used in place of the requirement, for + logging + :param pycompile: Whether to byte-compile installed Python files + :param warn_script_location: Whether to check that scripts are installed + into a directory on PATH + :raises UnsupportedWheel: + * when the directory holds an unpacked wheel with incompatible + Wheel-Version + * when the .dist-info dir does not match the wheel + """ + info_dir, metadata = parse_wheel(wheel_zip, name) + + if wheel_root_is_purelib(metadata): + lib_dir = scheme.purelib + else: + lib_dir = scheme.platlib + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed: Dict[RecordPath, RecordPath] = {} + changed: Set[RecordPath] = set() + generated: List[str] = [] + + def record_installed( + srcfile: RecordPath, destfile: str, modified: bool = False + ) -> None: + """Map archive RECORD paths to installation RECORD paths.""" + newpath = _fs_to_record_path(destfile, lib_dir) + installed[srcfile] = newpath + if modified: + changed.add(_fs_to_record_path(destfile)) + + def is_dir_path(path: RecordPath) -> bool: + return path.endswith("/") + + def assert_no_path_traversal(dest_dir_path: str, target_path: str) -> None: + if not is_within_directory(dest_dir_path, target_path): + message = ( + "The wheel {!r} has a file {!r} trying to install" + " outside the target directory {!r}" + ) + raise InstallationError( + message.format(wheel_path, target_path, dest_dir_path) + ) + + def root_scheme_file_maker( + zip_file: ZipFile, dest: str + ) -> Callable[[RecordPath], "File"]: + def make_root_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + dest_path = os.path.join(dest, normed_path) + assert_no_path_traversal(dest, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_root_scheme_file + + def data_scheme_file_maker( + zip_file: ZipFile, scheme: Scheme + ) -> Callable[[RecordPath], "File"]: + scheme_paths = {key: getattr(scheme, key) for key in SCHEME_KEYS} + + def make_data_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + try: + _, scheme_key, dest_subpath = normed_path.split(os.path.sep, 2) + except ValueError: + message = ( + "Unexpected file in {}: {!r}. .data directory contents" + " should be named like: '/'." + ).format(wheel_path, record_path) + raise InstallationError(message) + + try: + scheme_path = scheme_paths[scheme_key] + except KeyError: + valid_scheme_keys = ", ".join(sorted(scheme_paths)) + message = ( + "Unknown scheme key used in {}: {} (for file {!r}). .data" + " directory contents should be in subdirectories named" + " with a valid scheme key ({})" + ).format(wheel_path, scheme_key, record_path, valid_scheme_keys) + raise InstallationError(message) + + dest_path = os.path.join(scheme_path, dest_subpath) + assert_no_path_traversal(scheme_path, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_data_scheme_file + + def is_data_scheme_path(path: RecordPath) -> bool: + return path.split("/", 1)[0].endswith(".data") + + paths = cast(List[RecordPath], wheel_zip.namelist()) + file_paths = filterfalse(is_dir_path, paths) + root_scheme_paths, data_scheme_paths = partition(is_data_scheme_path, file_paths) + + make_root_scheme_file = root_scheme_file_maker(wheel_zip, lib_dir) + files: Iterator[File] = map(make_root_scheme_file, root_scheme_paths) + + def is_script_scheme_path(path: RecordPath) -> bool: + parts = path.split("/", 2) + return len(parts) > 2 and parts[0].endswith(".data") and parts[1] == "scripts" + + other_scheme_paths, script_scheme_paths = partition( + is_script_scheme_path, data_scheme_paths + ) + + make_data_scheme_file = data_scheme_file_maker(wheel_zip, scheme) + other_scheme_files = map(make_data_scheme_file, other_scheme_paths) + files = chain(files, other_scheme_files) + + # Get the defined entry points + distribution = get_wheel_distribution( + FilesystemWheel(wheel_path), + canonicalize_name(name), + ) + console, gui = get_entrypoints(distribution) + + def is_entrypoint_wrapper(file: "File") -> bool: + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + path = file.dest_path + name = os.path.basename(path) + if name.lower().endswith(".exe"): + matchname = name[:-4] + elif name.lower().endswith("-script.py"): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return matchname in console or matchname in gui + + script_scheme_files: Iterator[File] = map( + make_data_scheme_file, script_scheme_paths + ) + script_scheme_files = filterfalse(is_entrypoint_wrapper, script_scheme_files) + script_scheme_files = map(ScriptFile, script_scheme_files) + files = chain(files, script_scheme_files) + + for file in files: + file.save() + record_installed(file.src_record_path, file.dest_path, file.changed) + + def pyc_source_file_paths() -> Iterator[str]: + # We de-duplicate installation paths, since there can be overlap (e.g. + # file in .data maps to same location as file in wheel root). + # Sorting installation paths makes it easier to reproduce and debug + # issues related to permissions on existing files. + for installed_path in sorted(set(installed.values())): + full_installed_path = os.path.join(lib_dir, installed_path) + if not os.path.isfile(full_installed_path): + continue + if not full_installed_path.endswith(".py"): + continue + yield full_installed_path + + def pyc_output_path(path: str) -> str: + """Return the path the pyc file would have been written to.""" + return importlib.util.cache_from_source(path) + + # Compile all of the pyc files for the installed files + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings("ignore") + for path in pyc_source_file_paths(): + success = compileall.compile_file(path, force=True, quiet=True) + if success: + pyc_path = pyc_output_path(path) + assert os.path.exists(pyc_path) + pyc_record_path = cast( + "RecordPath", pyc_path.replace(os.path.sep, "/") + ) + record_installed(pyc_record_path, pyc_path) + logger.debug(stdout.getvalue()) + + maker = PipScriptMaker(None, scheme.scripts) + + # Ensure old scripts are overwritten. + # See https://github.com/pypa/pip/issues/1800 + maker.clobber = True + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = {""} + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + # Generate the console and GUI entry points specified in the wheel + scripts_to_generate = get_console_script_specs(console) + + gui_scripts_to_generate = list(starmap("{} = {}".format, gui.items())) + + generated_console_scripts = maker.make_multiple(scripts_to_generate) + generated.extend(generated_console_scripts) + + generated.extend(maker.make_multiple(gui_scripts_to_generate, {"gui": True})) + + if warn_script_location: + msg = message_about_scripts_not_on_PATH(generated_console_scripts) + if msg is not None: + logger.warning(msg) + + generated_file_mode = 0o666 & ~current_umask() + + @contextlib.contextmanager + def _generate_file(path: str, **kwargs: Any) -> Iterator[BinaryIO]: + with adjacent_tmp_file(path, **kwargs) as f: + yield f + os.chmod(f.name, generated_file_mode) + replace(f.name, path) + + dest_info_dir = os.path.join(lib_dir, info_dir) + + # Record pip as the installer + installer_path = os.path.join(dest_info_dir, "INSTALLER") + with _generate_file(installer_path) as installer_file: + installer_file.write(b"pip\n") + generated.append(installer_path) + + # Record the PEP 610 direct URL reference + if direct_url is not None: + direct_url_path = os.path.join(dest_info_dir, DIRECT_URL_METADATA_NAME) + with _generate_file(direct_url_path) as direct_url_file: + direct_url_file.write(direct_url.to_json().encode("utf-8")) + generated.append(direct_url_path) + + # Record the REQUESTED file + if requested: + requested_path = os.path.join(dest_info_dir, "REQUESTED") + with open(requested_path, "wb"): + pass + generated.append(requested_path) + + record_text = distribution.read_text("RECORD") + record_rows = list(csv.reader(record_text.splitlines())) + + rows = get_csv_rows_for_installed( + record_rows, + installed=installed, + changed=changed, + generated=generated, + lib_dir=lib_dir, + ) + + # Record details of all files installed + record_path = os.path.join(dest_info_dir, "RECORD") + + with _generate_file(record_path, **csv_io_kwargs("w")) as record_file: + # Explicitly cast to typing.IO[str] as a workaround for the mypy error: + # "writer" has incompatible type "BinaryIO"; expected "_Writer" + writer = csv.writer(cast("IO[str]", record_file)) + writer.writerows(_normalized_outrows(rows)) + + +@contextlib.contextmanager +def req_error_context(req_description: str) -> Iterator[None]: + try: + yield + except InstallationError as e: + message = "For req: {}. {}".format(req_description, e.args[0]) + raise InstallationError(message) from e + + +def install_wheel( + name: str, + wheel_path: str, + scheme: Scheme, + req_description: str, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + with ZipFile(wheel_path, allowZip64=True) as z: + with req_error_context(req_description): + _install_wheel( + name=name, + wheel_zip=z, + wheel_path=wheel_path, + scheme=scheme, + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=direct_url, + requested=requested, + ) diff --git a/venv/Lib/site-packages/pip/_internal/operations/prepare.py b/venv/Lib/site-packages/pip/_internal/operations/prepare.py new file mode 100644 index 000000000..a726f031a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/operations/prepare.py @@ -0,0 +1,642 @@ +"""Prepares a distribution for installation +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import mimetypes +import os +import shutil +from typing import Dict, Iterable, List, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.distributions.installed import InstalledDistribution +from pip._internal.exceptions import ( + DirectoryUrlHashUnsupported, + HashMismatch, + HashUnpinned, + InstallationError, + NetworkConnectionError, + PreviousBuildDirError, + VcsHashUnsupported, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.network.download import BatchDownloader, Downloader +from pip._internal.network.lazy_wheel import ( + HTTPRangeRequestUnsupported, + dist_from_wheel_url, +) +from pip._internal.network.session import PipSession +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.utils.filesystem import copy2_fixed +from pip._internal.utils.hashes import Hashes, MissingHashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import display_path, hide_url, is_installable_dir, rmtree +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.unpacking import unpack_file +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + + +def _get_prepared_distribution( + req: InstallRequirement, + req_tracker: RequirementTracker, + finder: PackageFinder, + build_isolation: bool, +) -> BaseDistribution: + """Prepare a distribution for installation.""" + abstract_dist = make_distribution_for_install_requirement(req) + with req_tracker.track(req): + abstract_dist.prepare_distribution_metadata(finder, build_isolation) + return abstract_dist.get_metadata_distribution() + + +def unpack_vcs_link(link: Link, location: str, verbosity: int) -> None: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend is not None + vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity) + + +class File: + def __init__(self, path: str, content_type: Optional[str]) -> None: + self.path = path + if content_type is None: + self.content_type = mimetypes.guess_type(path)[0] + else: + self.content_type = content_type + + +def get_http_url( + link: Link, + download: Downloader, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> File: + temp_dir = TempDirectory(kind="unpack", globally_managed=True) + # If a download dir is specified, is the file already downloaded there? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, download_dir, hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + content_type = None + else: + # let's download to a tmp dir + from_path, content_type = download(link, temp_dir.path) + if hashes: + hashes.check_against_path(from_path) + + return File(from_path, content_type) + + +def _copy2_ignoring_special_files(src: str, dest: str) -> None: + """Copying special files is not supported, but as a convenience to users + we skip errors copying them. This supports tools that may create e.g. + socket files in the project source directory. + """ + try: + copy2_fixed(src, dest) + except shutil.SpecialFileError as e: + # SpecialFileError may be raised due to either the source or + # destination. If the destination was the cause then we would actually + # care, but since the destination directory is deleted prior to + # copy we ignore all of them assuming it is caused by the source. + logger.warning( + "Ignoring special file error '%s' encountered copying %s to %s.", + str(e), + src, + dest, + ) + + +def _copy_source_tree(source: str, target: str) -> None: + target_abspath = os.path.abspath(target) + target_basename = os.path.basename(target_abspath) + target_dirname = os.path.dirname(target_abspath) + + def ignore(d: str, names: List[str]) -> List[str]: + skipped: List[str] = [] + if d == source: + # Pulling in those directories can potentially be very slow, + # exclude the following directories if they appear in the top + # level dir (and only it). + # See discussion at https://github.com/pypa/pip/pull/6770 + skipped += [".tox", ".nox"] + if os.path.abspath(d) == target_dirname: + # Prevent an infinite recursion if the target is in source. + # This can happen when TMPDIR is set to ${PWD}/... + # and we copy PWD to TMPDIR. + skipped += [target_basename] + return skipped + + shutil.copytree( + source, + target, + ignore=ignore, + symlinks=True, + copy_function=_copy2_ignoring_special_files, + ) + + +def get_file_url( + link: Link, download_dir: Optional[str] = None, hashes: Optional[Hashes] = None +) -> File: + """Get file and optionally check its hash.""" + # If a download dir is specified, is the file already there and valid? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, download_dir, hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + else: + from_path = link.file_path + + # If --require-hashes is off, `hashes` is either empty, the + # link's embedded hash, or MissingHashes; it is required to + # match. If --require-hashes is on, we are satisfied by any + # hash in `hashes` matching: a URL-based or an option-based + # one; no internet-sourced hash will be in `hashes`. + if hashes: + hashes.check_against_path(from_path) + return File(from_path, None) + + +def unpack_url( + link: Link, + location: str, + download: Downloader, + verbosity: int, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> Optional[File]: + """Unpack link into location, downloading if required. + + :param hashes: A Hashes object, one of whose embedded hashes must match, + or HashMismatch will be raised. If the Hashes is empty, no matches are + required, and unhashable types of requirements (like VCS ones, which + would ordinarily raise HashUnsupported) are allowed. + """ + # non-editable vcs urls + if link.is_vcs: + unpack_vcs_link(link, location, verbosity=verbosity) + return None + + # Once out-of-tree-builds are no longer supported, could potentially + # replace the below condition with `assert not link.is_existing_dir` + # - unpack_url does not need to be called for in-tree-builds. + # + # As further cleanup, _copy_source_tree and accompanying tests can + # be removed. + # + # TODO when use-deprecated=out-of-tree-build is removed + if link.is_existing_dir(): + if os.path.isdir(location): + rmtree(location) + _copy_source_tree(link.file_path, location) + return None + + # file urls + if link.is_file: + file = get_file_url(link, download_dir, hashes=hashes) + + # http urls + else: + file = get_http_url( + link, + download, + download_dir, + hashes=hashes, + ) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies, except wheels + if not link.is_wheel: + unpack_file(file.path, location, file.content_type) + + return file + + +def _check_download_dir( + link: Link, download_dir: str, hashes: Optional[Hashes] +) -> Optional[str]: + """Check download_dir for previously downloaded file with correct hash + If a correct file is found return its path else None + """ + download_path = os.path.join(download_dir, link.filename) + + if not os.path.exists(download_path): + return None + + # If already downloaded, does its hash match? + logger.info("File was already downloaded %s", download_path) + if hashes: + try: + hashes.check_against_path(download_path) + except HashMismatch: + logger.warning( + "Previously-downloaded file %s has bad hash. Re-downloading.", + download_path, + ) + os.unlink(download_path) + return None + return download_path + + +class RequirementPreparer: + """Prepares a Requirement""" + + def __init__( + self, + build_dir: str, + download_dir: Optional[str], + src_dir: str, + build_isolation: bool, + req_tracker: RequirementTracker, + session: PipSession, + progress_bar: str, + finder: PackageFinder, + require_hashes: bool, + use_user_site: bool, + lazy_wheel: bool, + verbosity: int, + in_tree_build: bool, + ) -> None: + super().__init__() + + self.src_dir = src_dir + self.build_dir = build_dir + self.req_tracker = req_tracker + self._session = session + self._download = Downloader(session, progress_bar) + self._batch_download = BatchDownloader(session, progress_bar) + self.finder = finder + + # Where still-packed archives should be written to. If None, they are + # not saved, and are deleted immediately after unpacking. + self.download_dir = download_dir + + # Is build isolation allowed? + self.build_isolation = build_isolation + + # Should hash-checking be required? + self.require_hashes = require_hashes + + # Should install in user site-packages? + self.use_user_site = use_user_site + + # Should wheels be downloaded lazily? + self.use_lazy_wheel = lazy_wheel + + # How verbose should underlying tooling be? + self.verbosity = verbosity + + # Should in-tree builds be used for local paths? + self.in_tree_build = in_tree_build + + # Memoized downloaded files, as mapping of url: path. + self._downloaded: Dict[str, str] = {} + + # Previous "header" printed for a link-based InstallRequirement + self._previous_requirement_header = ("", "") + + def _log_preparing_link(self, req: InstallRequirement) -> None: + """Provide context for the requirement being prepared.""" + if req.link.is_file and not req.original_link_is_in_wheel_cache: + message = "Processing %s" + information = str(display_path(req.link.file_path)) + else: + message = "Collecting %s" + information = str(req.req or req) + + if (message, information) != self._previous_requirement_header: + self._previous_requirement_header = (message, information) + logger.info(message, information) + + if req.original_link_is_in_wheel_cache: + with indent_log(): + logger.info("Using cached %s", req.link.filename) + + def _ensure_link_req_src_dir( + self, req: InstallRequirement, parallel_builds: bool + ) -> None: + """Ensure source_dir of a linked InstallRequirement.""" + # Since source_dir is only set for editable requirements. + if req.link.is_wheel: + # We don't need to unpack wheels, so no need for a source + # directory. + return + assert req.source_dir is None + if req.link.is_existing_dir() and self.in_tree_build: + # build local directories in-tree + req.source_dir = req.link.file_path + return + + # We always delete unpacked sdists after pip runs. + req.ensure_has_source_dir( + self.build_dir, + autodelete=True, + parallel_builds=parallel_builds, + ) + + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + # FIXME: this won't upgrade when there's an existing + # package unpacked in `req.source_dir` + # TODO: this check is now probably dead code + if is_installable_dir(req.source_dir): + raise PreviousBuildDirError( + "pip can't proceed with requirements '{}' due to a" + "pre-existing build directory ({}). This is likely " + "due to a previous installation that failed . pip is " + "being responsible and not assuming it can delete this. " + "Please delete it and try again.".format(req, req.source_dir) + ) + + def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes: + # By the time this is called, the requirement's link should have + # been checked so we can tell what kind of requirements req is + # and raise some more informative errors than otherwise. + # (For example, we can raise VcsHashUnsupported for a VCS URL + # rather than HashMissing.) + if not self.require_hashes: + return req.hashes(trust_internet=True) + + # We could check these first 2 conditions inside unpack_url + # and save repetition of conditions, but then we would + # report less-useful error messages for unhashable + # requirements, complaining that there's no hash provided. + if req.link.is_vcs: + raise VcsHashUnsupported() + if req.link.is_existing_dir(): + raise DirectoryUrlHashUnsupported() + + # Unpinned packages are asking for trouble when a new version + # is uploaded. This isn't a security check, but it saves users + # a surprising hash mismatch in the future. + # file:/// URLs aren't pinnable, so don't complain about them + # not being pinned. + if req.original_link is None and not req.is_pinned: + raise HashUnpinned() + + # If known-good hashes are missing for this requirement, + # shim it with a facade object that will provoke hash + # computation and then raise a HashMissing exception + # showing the user what the hash should be. + return req.hashes(trust_internet=False) or MissingHashes() + + def _fetch_metadata_using_lazy_wheel( + self, + link: Link, + ) -> Optional[BaseDistribution]: + """Fetch metadata using lazy wheel, if possible.""" + if not self.use_lazy_wheel: + return None + if self.require_hashes: + logger.debug("Lazy wheel is not used as hash checking is required") + return None + if link.is_file or not link.is_wheel: + logger.debug( + "Lazy wheel is not used as %r does not points to a remote wheel", + link, + ) + return None + + wheel = Wheel(link.filename) + name = canonicalize_name(wheel.name) + logger.info( + "Obtaining dependency information from %s %s", + name, + wheel.version, + ) + url = link.url.split("#", 1)[0] + try: + return dist_from_wheel_url(name, url, self._session) + except HTTPRangeRequestUnsupported: + logger.debug("%s does not support range requests", url) + return None + + def _complete_partial_requirements( + self, + partially_downloaded_reqs: Iterable[InstallRequirement], + parallel_builds: bool = False, + ) -> None: + """Download any requirements which were only fetched by metadata.""" + # Download to a temporary directory. These will be copied over as + # needed for downstream 'download', 'wheel', and 'install' commands. + temp_dir = TempDirectory(kind="unpack", globally_managed=True).path + + # Map each link to the requirement that owns it. This allows us to set + # `req.local_file_path` on the appropriate requirement after passing + # all the links at once into BatchDownloader. + links_to_fully_download: Dict[Link, InstallRequirement] = {} + for req in partially_downloaded_reqs: + assert req.link + links_to_fully_download[req.link] = req + + batch_download = self._batch_download( + links_to_fully_download.keys(), + temp_dir, + ) + for link, (filepath, _) in batch_download: + logger.debug("Downloading link %s to %s", link, filepath) + req = links_to_fully_download[link] + req.local_file_path = filepath + + # This step is necessary to ensure all lazy wheels are processed + # successfully by the 'download', 'wheel', and 'install' commands. + for req in partially_downloaded_reqs: + self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool = False + ) -> BaseDistribution: + """Prepare a requirement to be obtained from req.link.""" + assert req.link + link = req.link + self._log_preparing_link(req) + with indent_log(): + # Check if the relevant file is already available + # in the download directory + file_path = None + if self.download_dir is not None and link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir(req.link, self.download_dir, hashes) + + if file_path is not None: + # The file is already available, so mark it as downloaded + self._downloaded[req.link.url] = file_path + else: + # The file is not available, attempt to fetch only metadata + wheel_dist = self._fetch_metadata_using_lazy_wheel(link) + if wheel_dist is not None: + req.needs_more_preparation = True + return wheel_dist + + # None of the optimizations worked, fully prepare the requirement + return self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirements_more( + self, reqs: Iterable[InstallRequirement], parallel_builds: bool = False + ) -> None: + """Prepare linked requirements more, if needed.""" + reqs = [req for req in reqs if req.needs_more_preparation] + for req in reqs: + # Determine if any of these requirements were already downloaded. + if self.download_dir is not None and req.link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir(req.link, self.download_dir, hashes) + if file_path is not None: + self._downloaded[req.link.url] = file_path + req.needs_more_preparation = False + + # Prepare requirements we found were already downloaded for some + # reason. The other downloads will be completed separately. + partially_downloaded_reqs: List[InstallRequirement] = [] + for req in reqs: + if req.needs_more_preparation: + partially_downloaded_reqs.append(req) + else: + self._prepare_linked_requirement(req, parallel_builds) + + # TODO: separate this part out from RequirementPreparer when the v1 + # resolver can be removed! + self._complete_partial_requirements( + partially_downloaded_reqs, + parallel_builds=parallel_builds, + ) + + def _prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool + ) -> BaseDistribution: + assert req.link + link = req.link + + self._ensure_link_req_src_dir(req, parallel_builds) + hashes = self._get_linked_req_hashes(req) + + if link.is_existing_dir() and self.in_tree_build: + local_file = None + elif link.url not in self._downloaded: + try: + local_file = unpack_url( + link, + req.source_dir, + self._download, + self.verbosity, + self.download_dir, + hashes, + ) + except NetworkConnectionError as exc: + raise InstallationError( + "Could not install requirement {} because of HTTP " + "error {} for URL {}".format(req, exc, link) + ) + else: + file_path = self._downloaded[link.url] + if hashes: + hashes.check_against_path(file_path) + local_file = File(file_path, content_type=None) + + # For use in later processing, + # preserve the file path on the requirement. + if local_file: + req.local_file_path = local_file.path + + dist = _get_prepared_distribution( + req, + self.req_tracker, + self.finder, + self.build_isolation, + ) + return dist + + def save_linked_requirement(self, req: InstallRequirement) -> None: + assert self.download_dir is not None + assert req.link is not None + link = req.link + if link.is_vcs or (link.is_existing_dir() and req.editable): + # Make a .zip of the source_dir we already created. + req.archive(self.download_dir) + return + + if link.is_existing_dir(): + logger.debug( + "Not copying link to destination directory " + "since it is a directory: %s", + link, + ) + return + if req.local_file_path is None: + # No distribution was downloaded for this requirement. + return + + download_location = os.path.join(self.download_dir, link.filename) + if not os.path.exists(download_location): + shutil.copy(req.local_file_path, download_location) + download_path = display_path(download_location) + logger.info("Saved %s", download_path) + + def prepare_editable_requirement( + self, + req: InstallRequirement, + ) -> BaseDistribution: + """Prepare an editable requirement.""" + assert req.editable, "cannot prepare a non-editable req as editable" + + logger.info("Obtaining %s", req) + + with indent_log(): + if self.require_hashes: + raise InstallationError( + "The editable requirement {} cannot be installed when " + "requiring hashes, because there is no single file to " + "hash.".format(req) + ) + req.ensure_has_source_dir(self.src_dir) + req.update_editable() + + dist = _get_prepared_distribution( + req, + self.req_tracker, + self.finder, + self.build_isolation, + ) + + req.check_if_exists(self.use_user_site) + + return dist + + def prepare_installed_requirement( + self, + req: InstallRequirement, + skip_reason: str, + ) -> BaseDistribution: + """Prepare an already-installed requirement.""" + assert req.satisfied_by, "req should have been satisfied but isn't" + assert skip_reason is not None, ( + "did not get skip reason skipped but req.satisfied_by " + "is set to {}".format(req.satisfied_by) + ) + logger.info( + "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version + ) + with indent_log(): + if self.require_hashes: + logger.debug( + "Since it is already installed, we are trusting this " + "package without checking its hash. To ensure a " + "completely repeatable environment, install into an " + "empty virtualenv." + ) + return InstalledDistribution(req).get_metadata_distribution() diff --git a/venv/Lib/site-packages/pip/_internal/pyproject.py b/venv/Lib/site-packages/pip/_internal/pyproject.py new file mode 100644 index 000000000..e183eaf86 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/pyproject.py @@ -0,0 +1,168 @@ +import os +from collections import namedtuple +from typing import Any, List, Optional + +from pip._vendor import tomli +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement + +from pip._internal.exceptions import ( + InstallationError, + InvalidPyProjectBuildRequires, + MissingPyProjectBuildRequires, +) + + +def _is_list_of_str(obj: Any) -> bool: + return isinstance(obj, list) and all(isinstance(item, str) for item in obj) + + +def make_pyproject_path(unpacked_source_directory: str) -> str: + return os.path.join(unpacked_source_directory, "pyproject.toml") + + +BuildSystemDetails = namedtuple( + "BuildSystemDetails", ["requires", "backend", "check", "backend_path"] +) + + +def load_pyproject_toml( + use_pep517: Optional[bool], pyproject_toml: str, setup_py: str, req_name: str +) -> Optional[BuildSystemDetails]: + """Load the pyproject.toml file. + + Parameters: + use_pep517 - Has the user requested PEP 517 processing? None + means the user hasn't explicitly specified. + pyproject_toml - Location of the project's pyproject.toml file + setup_py - Location of the project's setup.py file + req_name - The name of the requirement we're processing (for + error reporting) + + Returns: + None if we should use the legacy code path, otherwise a tuple + ( + requirements from pyproject.toml, + name of PEP 517 backend, + requirements we should check are installed after setting + up the build environment + directory paths to import the backend from (backend-path), + relative to the project root. + ) + """ + has_pyproject = os.path.isfile(pyproject_toml) + has_setup = os.path.isfile(setup_py) + + if not has_pyproject and not has_setup: + raise InstallationError( + f"{req_name} does not appear to be a Python project: " + f"neither 'setup.py' nor 'pyproject.toml' found." + ) + + if has_pyproject: + with open(pyproject_toml, encoding="utf-8") as f: + pp_toml = tomli.loads(f.read()) + build_system = pp_toml.get("build-system") + else: + build_system = None + + # The following cases must use PEP 517 + # We check for use_pep517 being non-None and falsey because that means + # the user explicitly requested --no-use-pep517. The value 0 as + # opposed to False can occur when the value is provided via an + # environment variable or config file option (due to the quirk of + # strtobool() returning an integer in pip's configuration code). + if has_pyproject and not has_setup: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project does not have a setup.py" + ) + use_pep517 = True + elif build_system and "build-backend" in build_system: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project specifies a build backend of {} " + "in pyproject.toml".format(build_system["build-backend"]) + ) + use_pep517 = True + + # If we haven't worked out whether to use PEP 517 yet, + # and the user hasn't explicitly stated a preference, + # we do so if the project has a pyproject.toml file. + elif use_pep517 is None: + use_pep517 = has_pyproject + + # At this point, we know whether we're going to use PEP 517. + assert use_pep517 is not None + + # If we're using the legacy code path, there is nothing further + # for us to do here. + if not use_pep517: + return None + + if build_system is None: + # Either the user has a pyproject.toml with no build-system + # section, or the user has no pyproject.toml, but has opted in + # explicitly via --use-pep517. + # In the absence of any explicit backend specification, we + # assume the setuptools backend that most closely emulates the + # traditional direct setup.py execution, and require wheel and + # a version of setuptools that supports that backend. + + build_system = { + "requires": ["setuptools>=40.8.0", "wheel"], + "build-backend": "setuptools.build_meta:__legacy__", + } + + # If we're using PEP 517, we have build system information (either + # from pyproject.toml, or defaulted by the code above). + # Note that at this point, we do not know if the user has actually + # specified a backend, though. + assert build_system is not None + + # Ensure that the build-system section in pyproject.toml conforms + # to PEP 518. + + # Specifying the build-system table but not the requires key is invalid + if "requires" not in build_system: + raise MissingPyProjectBuildRequires(package=req_name) + + # Error out if requires is not a list of strings + requires = build_system["requires"] + if not _is_list_of_str(requires): + raise InvalidPyProjectBuildRequires( + package=req_name, + reason="It is not a list of strings.", + ) + + # Each requirement must be valid as per PEP 508 + for requirement in requires: + try: + Requirement(requirement) + except InvalidRequirement as error: + raise InvalidPyProjectBuildRequires( + package=req_name, + reason=f"It contains an invalid requirement: {requirement!r}", + ) from error + + backend = build_system.get("build-backend") + backend_path = build_system.get("backend-path", []) + check: List[str] = [] + if backend is None: + # If the user didn't specify a backend, we assume they want to use + # the setuptools backend. But we can't be sure they have included + # a version of setuptools which supplies the backend, or wheel + # (which is needed by the backend) in their requirements. So we + # make a note to check that those requirements are present once + # we have set up the environment. + # This is quite a lot of work to check for a very specific case. But + # the problem is, that case is potentially quite common - projects that + # adopted PEP 518 early for the ability to specify requirements to + # execute setup.py, but never considered needing to mention the build + # tools themselves. The original PEP 518 code had a similar check (but + # implemented in a different way). + backend = "setuptools.build_meta:__legacy__" + check = ["setuptools>=40.8.0", "wheel"] + + return BuildSystemDetails(requires, backend, check, backend_path) diff --git a/venv/Lib/site-packages/pip/_internal/req/__init__.py b/venv/Lib/site-packages/pip/_internal/req/__init__.py new file mode 100644 index 000000000..70dea27a6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/__init__.py @@ -0,0 +1,94 @@ +import collections +import logging +from typing import Iterator, List, Optional, Sequence, Tuple + +from pip._internal.utils.logging import indent_log + +from .req_file import parse_requirements +from .req_install import InstallRequirement +from .req_set import RequirementSet + +__all__ = [ + "RequirementSet", + "InstallRequirement", + "parse_requirements", + "install_given_reqs", +] + +logger = logging.getLogger(__name__) + + +class InstallationResult: + def __init__(self, name: str) -> None: + self.name = name + + def __repr__(self) -> str: + return f"InstallationResult(name={self.name!r})" + + +def _validate_requirements( + requirements: List[InstallRequirement], +) -> Iterator[Tuple[str, InstallRequirement]]: + for req in requirements: + assert req.name, f"invalid to-be-installed requirement: {req}" + yield req.name, req + + +def install_given_reqs( + requirements: List[InstallRequirement], + install_options: List[str], + global_options: Sequence[str], + root: Optional[str], + home: Optional[str], + prefix: Optional[str], + warn_script_location: bool, + use_user_site: bool, + pycompile: bool, +) -> List[InstallationResult]: + """ + Install everything in the given list. + + (to be called after having downloaded and unpacked the packages) + """ + to_install = collections.OrderedDict(_validate_requirements(requirements)) + + if to_install: + logger.info( + "Installing collected packages: %s", + ", ".join(to_install.keys()), + ) + + installed = [] + + with indent_log(): + for req_name, requirement in to_install.items(): + if requirement.should_reinstall: + logger.info("Attempting uninstall: %s", req_name) + with indent_log(): + uninstalled_pathset = requirement.uninstall(auto_confirm=True) + else: + uninstalled_pathset = None + + try: + requirement.install( + install_options, + global_options, + root=root, + home=home, + prefix=prefix, + warn_script_location=warn_script_location, + use_user_site=use_user_site, + pycompile=pycompile, + ) + except Exception: + # if install did not succeed, rollback previous uninstall + if uninstalled_pathset and not requirement.install_succeeded: + uninstalled_pathset.rollback() + raise + else: + if uninstalled_pathset and requirement.install_succeeded: + uninstalled_pathset.commit() + + installed.append(InstallationResult(req_name)) + + return installed diff --git a/venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9794408f14c812e70808929a93f1e3c955265f3b GIT binary patch literal 2598 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..048eeb1ed0e2b94004a7734a65a536c7040cc7dc GIT binary patch literal 13493 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..636e5265d40caf840253b3208dfd3ca572058e61 GIT binary patch literal 4306 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52ce65ab39d9dedef78bf10028ebd06a3a0c3081 GIT binary patch literal 18948 zcma)kX>c4@e&6&lGd+XB00cnr7MrAa3`GugIIA_S)kTVu)-yWA0w>i7Qd|Ni%5dvr9P!tam2`lGqbd#Tj_;>+MKhnJV}1b=Fz zQeMh48mU?R*O)cr-JCV$uQhAoui3Dh>DjcwHdZ6k%+6+;&aBhS&E}f<*?e}l?u-79&g zv9Gy*cE99vjRVbtvj>}pW)I1GzVSr!@a*BHJL@)&%pPeTojuw-HhWC!MjB5xkIx=& zo|rvhr2K>a$$Q4^DX-v{yiq(w|Fk#ekNBm1sd>j6_jcX4XP@#We8-zaX%?mCz7$#v zz0cd;l(!o#&-iD&X@9ymg6-|`_TIPgg|ps1KhIH7SCr9hZ@+f{eaeriIp`fi&AEY^ zxL4d4bHF#B@D8KZ)32vI*E@1Q;quw#R9mCtRcze=2j<@4@d(Jbirb;J1 z?NA|^fEsUHuLtn|e&V_9i z*_Z19YTjB7>+M#x5m{ILFiKxrU2gaod-9!Dy%mHUhV`#0)m9}lDlYh8Wv*(Jr?a7JL=u>n+c3g_TBop_GoSYH%xZ>H%JBm};@rR?TXo-tlFeD69Ndwdn^@ zMm0m_`xt8XE8bGIh7qp$&E<=A<=3$0^=NeXHOr-Vbrp>SHC0~@D;y@u;6n?mb&TeR ztEyGA2=Mr4<1e2Yo?sTq*HU3>$=EczsjjhQZdhIGD=8xtTEQ51t84u(PSwXI%Or2b zc~c#icU!;r+NS&OrA+6$7nENOeK%b6-TBon?2Me%Co&;x*gsDyAgVdJc z8KLQ!c&yM0dFC_UNX;9b?WOM*?im|Km*+V%6WLX@5Jcv!HT48~6SaE31m9jlN$^D^ z#J78?4fBIkH&qAD{T<_5#>LcoMPgppyltp`U31guT3ZG&j(E2+;-#*pJ~3u+EUW;B z+^TvWcHksNQ>TzbcHsN1$Ohz^pBU-{%ee>YNmgb6t(8@ur2+TOyqhs649CbD8Nl)n*M#y%vLI<*&c`vtRsE*W*bhBH=4RgcU$aQm` z;pM*$OxeiCJ)Lge8`+cU_Z}!O43@845biKq{jWexIjZm0{f6g)g3EdC;k*!Amj_Z4 z1A^0?1KIZ6cFVo;+J(2STs*s04;S03;aMDzU#+#@%MT2wdxq`a$fOW~TTl9y-Af=b zK3J2B-kN^&D$lsUJsFH74fQp*+VYrba|9L!q-&tbnqrsrr{76V?Aw?(7*!d=oGQ6t z^%m(~RrM%grGhbqEmk-xCm#>-=6t+3w;s5yb_hzi+Val0s#*^)Nbd`Mes@MDN>I4V z?I5UwpJI|ApiK=!GG3YTn=@Chy>j{TYgc5o@%I+Pa5*@C?wqDY_0|HW1E99bZMASN zSoUimy64 z5H7-Md}N#TRvq$~+gfeT0c{{P$Rq`ETYk+4|5odRok)~49Z3#7j`^39cV#H0v(aw!D3qhb>v&+PmIXA<*yHc zj;x!kgGVFaR+DwSw{HXNdlSrc6H3ySv1PRPeUJ*xc%W%rDIsSk`>BHFEhp@5Z} zk#TyaWJP&kxC%9bWgw+Mw2Z8V-$Dbk{B)F)X>pyOm>QkHmX`-uZtjHzzvbUqRxi$T zUc_J^K+3enAMQ8u4?Fv7dQ18ox7VTM4B+||bX2F2M45nq@YD=ntZHjrJ%wD!Qg5(e zL?)!sR9;paUM09ykLUE4(I#fh@rR*nYAMOdWPqnd!?c{w>~x-ZYN)@0+94=Y4JFSP z1SNw8n=|hN(nLKVC?HJ)3=PlnY?MQs-jce|^3oqcs1}jO_A;UEWkVaPljG&?+aE&A z0ZL!~&Qa9Z-_oe~`VJk^g=Q zja~T{JSeL~u@`Tn@W=e#{#55AOB9Gm1@yk6Au)jYy*{5mSE?C{oNIn?u3lNjP! z;Ej~$2j{C^MuDP&x0AT%UI64}l6O!WaFPd8ofAKOl1Uf!CYnb^^-)2e6QHnv9gip= z8mL0bA)I~-I0dklPz%w$2Uhhi3WTR&4Hf1EoPC()2=)pUulG4HXFFy5jM?_OJOWWp zP)OxbWQ0@}5{Qy(Y+BHP4beGF>Kval-OK0<@n2)X8q5N=YPZ8a{ZmA+U&9mdd*)sD zXM#5&myb-C=*kKIm?$6<2D*M=d_eWdxTn>l{#0cOy_tERSWy;&C>3pW6aCd3lOAkk zn!kafAM0uEA0~PPb@F*tV^410@F(V#pOncFkRiXpq6H+Sq7ZL&4f!Z@yV_XwgP4MY zr>J+>j+hYHYt_arC~C_dj0MpyuRcHTx()NNV2libNsXrQFHdvhln1U#qWYSWp zAteiZlAoS@%n?~eMZnr(#xeF&*fAYz+Az(GnK7n}gT@nvV^b6|?@pPD2X1JKM^Qk= zasf~96C_|IF-xJ2EQCL19+Y$5I}9x@4W1U~X-(4!tbqF>Mn1?LQ$x?Cr_W$UG-p)JJAH9yL*;14(bcAK2g}ilqgZw!;?@3A(zrjBr+l} z8H!AwZ9=<*YJ&mDJY&WSEm$Tm!|0VQQjna3O~j=Tw2Z08a%Oc7!^vdk+YJv2hUSv$ zd7xegrwXSgtW==Ibn<0tV^HVj+d~*jsz8CW$3ulL4e(G1oMw+J{W4k(ait?Hh)E~Z zAI?D^vty{xB;>2e{TsefNb8h`4jokb_EwgS3n8;6W*v-L@tNim^Y4G-XFm@1!!)&yb1A2jCvN% z{ZzE)YFG^xeXnQ4cpHGb>W7`{uL!E+bP;^980of`;SHd59;RNLBle9C0q8?RBRCHc z+TfI~_iYTZklHMZ{4z6y*&sbBV)q3?gN8y%hn3Uc83aIA%X-@ z&0vFU%+o0cAMCYIPhb-?-%YiQwN#f@Kr6JD(wiB|H!q-MDGj(=osacINUN}%A&ZrZ-^I9$ zA~{K+K$?Uw_DvA_AZc}|%!!LQ7pWW#pu z&lKed?xbFNMHcv9&?P7$F*7usLpj`@06*`X`P^N5%pgOXM}pbgynlh0zQPfUpCWjA zkQ+9jEqVqFxn|e8WvS;nSux?#q-tZMPhg|d>&Nv*>+O}XU^)lGHFba8H`pE5V9Oy& zWN0n{Qouy4M|?rgA`9cLDdyp{n(ac@gz3e>muIDSu4^wD5GBB#nFG?;onP-G4G(3k z({ZC=0BOPc24UDG0~8LltlGEh;GWq0mhY0PlJO?49%w|u6nk6HLzaPKc>aQay<#+775;{+mh@4;c*ZXKfH(Ns}a;CNlYo*e9M`i#~>_xxoMGp8*f)hvz=?TMz3Cx56jII}3u*Z2&$mLN|G~tGUl-N1>Q*o(3 z?hqQ0e((_*&_G7E2xc7^cnbZ^E{KOf?S{9&X5EI>N+X}vd2Bum3D|UN9w-C(&{XH* zao}@deiJewYeL%nt$QZgkV+e!kCKh27}MJ^9%>=Z6pysW5k^u7FfD)0O~`?kGl(N^ zpcyE6u->E}6?CO1zrZ4YyIuD{9H0QKC-#K6Axz~8$1E0DIMCq6N9lTi36Y6&RP`MI zNBs^HDkD**3L&WFMQPRKw(mh1l+ZqX7$H_v;5FqK4(2VUq@8=74#;T!A36sUNcP*@ z-@G}FJT(jQ|^ zk|&XiGLTI0xgwZkKuR`Y(tVaUI!}Dwl68lnHB*}$!6R$_Psni1SnmjkAnd)Ku>kwa z_lzqr7GTx%XtDM(paG)TIUPbj_h97(c3Qwr&CjU)oR)l+Bv3sa+Q47I>{edNb5edj z%)^Xjpx+4njKu2esg((k)57{!4G>o&)tSH-Ad!$9q8+~mV#)mV)VnD!yt%?2|h}D{@m)q z0HN#v`s!~Xp?g%0%->|mUM4&q>RYT!LppCOwTXNwtu%>x}^0Hm9Hrc{g|-%*^eR3H>W67*KV z4=PciQel`wT$8O-ymqZpQQzcDmYDR()5m<>Wb*frL=LzmWZQ6E{eWekFzKJf-f>i4 zN5#LxBZf97WgB^G!kH*e9LVp^XU)keLt50(V(3Rx!^?PrKR_}h?3=z#+ciY|w3mUX zp7yeS#xw3FDrPBX&3%e?&j{l~;!J1JZHP z2_Ry`x^trX_GqN`eNxpISp)GDtC0T~no-tHG}+uC#!KwrBZTV|GBnIkEr|b`LYg7N zq0A1`QkUtg4B6O+5j!ZdP%Gyl*F<(@nI1fF9hk$orNA7KjCDik$-<(ZL(KpdkRA&z zJwwDL{=?-4VoXhD4`LMmv^mDTrdHuR)M6(|P10rWnc(_HGVf}&qxgn19nHqS&<#;fR;qgzEgX*d#}k~Q-w>6-dWNMM7Y zSyU*jdYQQ+Os1Jow}~?T9iU90{)i?2n2DG={*ZN!IE4K>q2m4yiaF}HS#QJZ+1LSB z>HabS%J89aW4~Q6K~qSi%_$oK?RIDC5fH;B271LPIB+F(5glt5lH|uc9|1MpcCorD zK`a8e!#pob4Efm|;_Se~gtso$Q~A4(;;S%n4eq717H1hmnNa$S28zJppWqtT1}oz#<33 zV>6=fey$Bu-5@}C!uSY4{wFe6W-1tkoB_!PdDvwsYj{+(*dLU^%kM_mQF}f_@%P`7kb6n)kFUuDZC!}Q{&$OX_+=J}JIbKIP`2I{PSX#r# z{P!-UB3g8_of}ugga*SXDKnJ1n>T4FDQgmU^CmPxkdYX0nlzt+L;`PFkAU2~IS5>I z0ns5jDwR9WBZ%bWU<}F0?Sk~_ddE^Ognvw}_NFbQ<%XC)3A ziPFMHqI}=uDAWYeGvVS6q*s4}F>VmyPa~6oR-=PCY-tfqrGpyluwz_N&^_+!&J zy4~6H$Z^mU9HO|C`Fj-iE?y8*2;2yff+A|cK|~J3Zy3QI1StUH?=hYX(QGY;u^)T~ z_S^7?fFO9;SSK|-xXML4H9cZ{TJnbaMYPEyx=s4AEX;baN!~NP(OcAGi=CG*#%=@c zO%VO)5uboq`>{pMWky=5Arw`wVj*HDj_rsh-jg5CJkR-6JQ87xb=f3YjH>L4Ydth^ zdiP*vSQQDMoX;%%J!l~$Z)Fna3#TnUZ|IHlbz2m+aQDj4p%_Fpj!8_(QcKHjB?DAu9xNnJ12JDPp7blBGiSwPO^edey zy2w4%3)?~zF2rTnX~oS_I^Q||Xk%FZ1DKH{Hb+9Y(QNWMtw{*&(Y=ZC=R0F>>tp4f zdiPwb^pcBk7Gpg!T2V^@^; zjOyQ_Y@HA!i{5Y9Iama2sK+=hI`p;()#B%Y=6L%=sx^%@A0&RDmxe}{uqPW%;t1ZMGyNFk~U2m@j z*py}!U{CA{{wYx1lbY&Mff79yb7Ed7;Vht7w2IB)e5k-cETdsXalHR`@+Ghj;)4dX(J8CKlEwKMK$}JQki{6Di_%Xbv=%=;SrM6vBpg$M|DtfrEkn z)SW{_1cA_kAT4EJQX!79A50(&+1-MHBxwm3E(rI17zhyv3^%j3PGDw2#a>Q4o6Yn>>|$Ty#m6K(LzSt4Wm(ROB2>^>o3rLS^}7V z1nau7xyQ@HNScRreFWy9z3W?Ah*?N|2tlTmg`p?Ew2v(0BjdxA1i;g=g}_7fL>Tnu zKAtTh;U_jmdfyYrxXe+U-#Ul2jBzcPGiP7G`}mIcUHX0Hk6OQj)$doIh6lWf&4Yv& zWA+dPZY&-8j-iS&f{Z2Ke1eR_n}nZWRL?=u!%{j01%~b2ZqeJ_9c9=xRF!#*bOa;0 z;Zb4$VCHNT^t?F3?-(o7t!v#3S~SCB-ON4X+Y=jOGU}7vvCZRKsm&8xU}qcSgRH8R zdj>s&FAcJ)?sylf4@$p+K=$eGI99!f>%rf>T@&fPkF&Be!bFRw#Dm@O3Q*z=tN<(G z?6bhJliq&l5T;<5v2+SE?S>_Y3A5RsS z@GN?Me`g)$br5?Y5C$y14*Vz(Kf>}n*0TPG8cVbf#yb?A^PUKw_6~>7girILgj|WT zHzvE2nBlH_I2nNMlt6bXhVH-b(r|cmrgL@%T(Kuk##X-ov2D<}5i+f#y^|PWuk*~~ znj?hZcmN+u%qDT0q^{a6S~XBUMB7L%NFGE!A)^xyeulRV6b`)h-4D>#$Hb7SucF%z zNt>u6Wm51v8Rlmox7(ewkFYtKFU7>s7ZQ5zdc<{xUZXx2qa&0u7Sb zJp>zf%R^9)i$O?*%bi>qceEsKp)-m=jfw?jT_Hezd{+RO}_p8A=_6)n(Xq2I%bj3_7Z3r| zI}JS#6J?4{+C7DX@W3c_N<^Yy73$w&du>ShqnR85I2RZf#yrBl5K2B0s&&;uh6)fmvFC2-Jt)@u;t-+@_4Z)B7=qF>(HPWWUVKaLyj_Y$a0M=TyM}v7yW~Ov4!2sbEF(5D#QmfN)rL3c zIA#^u#5@T9&*4QbszoCMZ3oV_VC1w676XBbsTRdC=js_+8u%VeG#8J{yeSswlnb zykMv((<(+EVljB7SM(-fpxrcF$s#$4)ihBisqC>uCzO{YK=e;EE<)WB%WRs zafrPPiIN+xo~*XF)zO$(g8FC{je88G1EuD^@VG|@2loJc0lOuXLCizZSRW2TeWK!U zK{U~$yFEG|^;tn>`PPDRIY*&7$=Lk*juOxz+?8C63Y?TaX7GoRGJtIf$x#2DFGft> z|1(}BgbmjQ6Q1{XN#g%EDi{yyK({vW;G&G};9b8-$xob&V|FDQ_42&|Ez+ughF(ax3BW`0v zCvP+Q0M{HahY8F*-4B=(Gp|^>c_74YC91d95jRm5jo^w^5Hx*URPz*w?x2!*jGajF)E^)@%blUW zlkT$#Ya%=0Oi%93O&rP}%#WJ(UPD^d&|v6CdEjL{!5c{WE;Jvc-m~DcVr;99nM+D^ z%v>7La5`2FfjDr2nN%py(vb+bqWYH@PW_O{&u~9+$~2r;V8azh6O=l7 zVCX=|SI``8B`T*LPnRDgDztn|VA2N+0e*pWpXL!AV%Ry@-^89tz3)}Jh=xN3Kk`cg z=>i_Pk<@pwz=>k1X?d5x6gowMX-Mb@FZ5t!hF}#3r%*x`ZfMWQ&4vfYjR(fLp}RqJ zglKZ5>8z&^>&Fludd_{tbqn22mdlCm;Cxd52A4~FUBQ^j^D^6@qTOFGOjAQrG{pca z+Oo{2flIXAiBU#J59kva^d_OKrO7s~Ev5in0nQ zdfd9f6>zm!!*>VQAX{6Q8L+p5)*>)ku0snlGX18LmC zN5sglpz{vKICeO}>{?avo`d=ezKJvscF0%C$6LQ&}9K+&^9C@MicGkqNF89Ngbsl@D@LBJ!GA^MqUD81A{C(!QoeKXOP0tt3{n&|!Vi+apsl(I2Nx<`8 ze%m(3AAS=ZnN&834{SPFN*l09`XgpV@7%ZOZC=;$P6PI~n6%Uspja6c(r_8B{1Bx_P z@k@%4WYJz+=`KTt15|NK5dWt~919hQWF74pu1;jsKtx{=f}`o-CJ-H}xP?>|0VLW# zTq!cU+(>|)D5CPg$2CXd)HZe?qy;~kdWXYzF>l#;Yu@|bOpoELPw z(~CgURPY5Pjs&9cR`?kRqI4kf-#ElX-WGqtI=#y*>^1g3wSV%&(c-hkI Tuple[str, Optional[str]]: + m = re.match(r"^(.+)(\[[^\]]+\])$", path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def convert_extras(extras: Optional[str]) -> Set[str]: + if not extras: + return set() + return get_requirement("placeholder" + extras.lower()).extras + + +def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]: + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + url = editable_req + + # If a file path is specified with extras, strip off the extras. + url_no_extras, extras = _strip_extras(url) + + if os.path.isdir(url_no_extras): + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith("file:"): + package_name = Link(url_no_extras).egg_fragment + if extras: + return ( + package_name, + url_no_extras, + get_requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, set() + + for version_control in vcs: + if url.lower().startswith(f"{version_control}:"): + url = f"{version_control}+{url}" + break + + link = Link(url) + + if not link.is_vcs: + backends = ", ".join(vcs.all_schemes) + raise InstallationError( + f"{editable_req} is not a valid editable requirement. " + f"It should either be a path to a local project or a VCS URL " + f"(beginning with {backends})." + ) + + package_name = link.egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name for '{}', please specify one " + "with #egg=your_package_name".format(editable_req) + ) + return package_name, url, set() + + +def check_first_requirement_in_file(filename: str) -> None: + """Check if file is parsable as a requirements file. + + This is heavily based on ``pkg_resources.parse_requirements``, but + simplified to just check the first meaningful line. + + :raises InvalidRequirement: If the first meaningful line cannot be parsed + as an requirement. + """ + with open(filename, encoding="utf-8", errors="ignore") as f: + # Create a steppable iterator, so we can handle \-continuations. + lines = ( + line + for line in (line.strip() for line in f) + if line and not line.startswith("#") # Skip blank lines/comments. + ) + + for line in lines: + # Drop comments -- a hash without a space may be in a URL. + if " #" in line: + line = line[: line.find(" #")] + # If there is a line continuation, drop it, and append the next line. + if line.endswith("\\"): + line = line[:-2].strip() + next(lines, "") + Requirement(line) + return + + +def deduce_helpful_msg(req: str) -> str: + """Returns helpful msg in case requirements file does not exist, + or cannot be parsed. + + :params req: Requirements file path + """ + if not os.path.exists(req): + return f" File '{req}' does not exist." + msg = " The path does exist. " + # Try to parse and check if it is a requirements file. + try: + check_first_requirement_in_file(req) + except InvalidRequirement: + logger.debug("Cannot parse '%s' as requirements file", req) + else: + msg += ( + f"The argument you provided " + f"({req}) appears to be a" + f" requirements file. If that is the" + f" case, use the '-r' flag to install" + f" the packages specified within it." + ) + return msg + + +class RequirementParts: + def __init__( + self, + requirement: Optional[Requirement], + link: Optional[Link], + markers: Optional[Marker], + extras: Set[str], + ): + self.requirement = requirement + self.link = link + self.markers = markers + self.extras = extras + + +def parse_req_from_editable(editable_req: str) -> RequirementParts: + name, url, extras_override = parse_editable(editable_req) + + if name is not None: + try: + req: Optional[Requirement] = Requirement(name) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{name}'") + else: + req = None + + link = Link(url) + + return RequirementParts(req, link, None, extras_override) + + +# ---- The actual constructors follow ---- + + +def install_req_from_editable( + editable_req: str, + comes_from: Optional[Union[InstallRequirement, str]] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + options: Optional[Dict[str, Any]] = None, + constraint: bool = False, + user_supplied: bool = False, + permit_editable_wheels: bool = False, +) -> InstallRequirement: + + parts = parse_req_from_editable(editable_req) + + return InstallRequirement( + parts.requirement, + comes_from=comes_from, + user_supplied=user_supplied, + editable=True, + permit_editable_wheels=permit_editable_wheels, + link=parts.link, + constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, + install_options=options.get("install_options", []) if options else [], + global_options=options.get("global_options", []) if options else [], + hash_options=options.get("hashes", {}) if options else {}, + extras=parts.extras, + ) + + +def _looks_like_path(name: str) -> bool: + """Checks whether the string "looks like" a path on the filesystem. + + This does not check whether the target actually exists, only judge from the + appearance. + + Returns true if any of the following conditions is true: + * a path separator is found (either os.path.sep or os.path.altsep); + * a dot is found (which represents the current directory). + """ + if os.path.sep in name: + return True + if os.path.altsep is not None and os.path.altsep in name: + return True + if name.startswith("."): + return True + return False + + +def _get_url_from_path(path: str, name: str) -> Optional[str]: + """ + First, it checks whether a provided path is an installable directory. If it + is, returns the path. + + If false, check if the path is an archive file (such as a .whl). + The function checks if the path is a file. If false, if the path has + an @, it will treat it as a PEP 440 URL requirement and return the path. + """ + if _looks_like_path(name) and os.path.isdir(path): + if is_installable_dir(path): + return path_to_url(path) + # TODO: The is_installable_dir test here might not be necessary + # now that it is done in load_pyproject_toml too. + raise InstallationError( + f"Directory {name!r} is not installable. Neither 'setup.py' " + "nor 'pyproject.toml' found." + ) + if not is_archive_file(path): + return None + if os.path.isfile(path): + return path_to_url(path) + urlreq_parts = name.split("@", 1) + if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): + # If the path contains '@' and the part before it does not look + # like a path, try to treat it as a PEP 440 URL req instead. + return None + logger.warning( + "Requirement %r looks like a filename, but the file does not exist", + name, + ) + return path_to_url(path) + + +def parse_req_from_line(name: str, line_source: Optional[str]) -> RequirementParts: + if is_url(name): + marker_sep = "; " + else: + marker_sep = ";" + if marker_sep in name: + name, markers_as_string = name.split(marker_sep, 1) + markers_as_string = markers_as_string.strip() + if not markers_as_string: + markers = None + else: + markers = Marker(markers_as_string) + else: + markers = None + name = name.strip() + req_as_string = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras_as_string = None + + if is_url(name): + link = Link(name) + else: + p, extras_as_string = _strip_extras(path) + url = _get_url_from_path(p, name) + if url is not None: + link = Link(url) + + # it's a local file, dir, or url + if link: + # Handle relative file URLs + if link.scheme == "file" and re.search(r"\.\./", link.url): + link = Link(path_to_url(os.path.normpath(os.path.abspath(link.path)))) + # wheel file + if link.is_wheel: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + req_as_string = f"{wheel.name}=={wheel.version}" + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req_as_string = link.egg_fragment + + # a requirement specifier + else: + req_as_string = name + + extras = convert_extras(extras_as_string) + + def with_source(text: str) -> str: + if not line_source: + return text + return f"{text} (from {line_source})" + + def _parse_req_string(req_as_string: str) -> Requirement: + try: + req = get_requirement(req_as_string) + except InvalidRequirement: + if os.path.sep in req_as_string: + add_msg = "It looks like a path." + add_msg += deduce_helpful_msg(req_as_string) + elif "=" in req_as_string and not any( + op in req_as_string for op in operators + ): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = "" + msg = with_source(f"Invalid requirement: {req_as_string!r}") + if add_msg: + msg += f"\nHint: {add_msg}" + raise InstallationError(msg) + else: + # Deprecate extras after specifiers: "name>=1.0[extras]" + # This currently works by accident because _strip_extras() parses + # any extras in the end of the string and those are saved in + # RequirementParts + for spec in req.specifier: + spec_str = str(spec) + if spec_str.endswith("]"): + msg = f"Extras after version '{spec_str}'." + raise InstallationError(msg) + return req + + if req_as_string is not None: + req: Optional[Requirement] = _parse_req_string(req_as_string) + else: + req = None + + return RequirementParts(req, link, markers, extras) + + +def install_req_from_line( + name: str, + comes_from: Optional[Union[str, InstallRequirement]] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + options: Optional[Dict[str, Any]] = None, + constraint: bool = False, + line_source: Optional[str] = None, + user_supplied: bool = False, +) -> InstallRequirement: + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + + :param line_source: An optional string describing where the line is from, + for logging purposes in case of an error. + """ + parts = parse_req_from_line(name, line_source) + + return InstallRequirement( + parts.requirement, + comes_from, + link=parts.link, + markers=parts.markers, + use_pep517=use_pep517, + isolated=isolated, + install_options=options.get("install_options", []) if options else [], + global_options=options.get("global_options", []) if options else [], + hash_options=options.get("hashes", {}) if options else {}, + constraint=constraint, + extras=parts.extras, + user_supplied=user_supplied, + ) + + +def install_req_from_req_string( + req_string: str, + comes_from: Optional[InstallRequirement] = None, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, +) -> InstallRequirement: + try: + req = get_requirement(req_string) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{req_string}'") + + domains_not_allowed = [ + PyPI.file_storage_domain, + TestPyPI.file_storage_domain, + ] + if ( + req.url + and comes_from + and comes_from.link + and comes_from.link.netloc in domains_not_allowed + ): + # Explicitly disallow pypi packages that depend on external urls + raise InstallationError( + "Packages installed from PyPI cannot depend on packages " + "which are not also hosted on PyPI.\n" + "{} depends on {} ".format(comes_from.name, req) + ) + + return InstallRequirement( + req, + comes_from, + isolated=isolated, + use_pep517=use_pep517, + user_supplied=user_supplied, + ) + + +def install_req_from_parsed_requirement( + parsed_req: ParsedRequirement, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, +) -> InstallRequirement: + if parsed_req.is_editable: + req = install_req_from_editable( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + constraint=parsed_req.constraint, + isolated=isolated, + user_supplied=user_supplied, + ) + + else: + req = install_req_from_line( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + isolated=isolated, + options=parsed_req.options, + constraint=parsed_req.constraint, + line_source=parsed_req.line_source, + user_supplied=user_supplied, + ) + return req + + +def install_req_from_link_and_ireq( + link: Link, ireq: InstallRequirement +) -> InstallRequirement: + return InstallRequirement( + req=ireq.req, + comes_from=ireq.comes_from, + editable=ireq.editable, + link=link, + markers=ireq.markers, + use_pep517=ireq.use_pep517, + isolated=ireq.isolated, + install_options=ireq.install_options, + global_options=ireq.global_options, + hash_options=ireq.hash_options, + ) diff --git a/venv/Lib/site-packages/pip/_internal/req/req_file.py b/venv/Lib/site-packages/pip/_internal/req/req_file.py new file mode 100644 index 000000000..03ae50492 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/req_file.py @@ -0,0 +1,536 @@ +""" +Requirements file parsing +""" + +import optparse +import os +import re +import shlex +import urllib.parse +from optparse import Values +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + Iterator, + List, + Optional, + Tuple, +) + +from pip._internal.cli import cmdoptions +from pip._internal.exceptions import InstallationError, RequirementsFileParseError +from pip._internal.models.search_scope import SearchScope +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status +from pip._internal.utils.encoding import auto_decode +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + from pip._internal.index.package_finder import PackageFinder + +__all__ = ["parse_requirements"] + +ReqFileLines = Iterable[Tuple[int, str]] + +LineParser = Callable[[str], Tuple[str, Values]] + +SCHEME_RE = re.compile(r"^(http|https|file):", re.I) +COMMENT_RE = re.compile(r"(^|\s+)#.*$") + +# Matches environment variable-style values in '${MY_VARIABLE_1}' with the +# variable name consisting of only uppercase letters, digits or the '_' +# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, +# 2013 Edition. +ENV_VAR_RE = re.compile(r"(?P\$\{(?P[A-Z0-9_]+)\})") + +SUPPORTED_OPTIONS: List[Callable[..., optparse.Option]] = [ + cmdoptions.index_url, + cmdoptions.extra_index_url, + cmdoptions.no_index, + cmdoptions.constraints, + cmdoptions.requirements, + cmdoptions.editable, + cmdoptions.find_links, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.prefer_binary, + cmdoptions.require_hashes, + cmdoptions.pre, + cmdoptions.trusted_host, + cmdoptions.use_new_feature, +] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ: List[Callable[..., optparse.Option]] = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] + + +class ParsedRequirement: + def __init__( + self, + requirement: str, + is_editable: bool, + comes_from: str, + constraint: bool, + options: Optional[Dict[str, Any]] = None, + line_source: Optional[str] = None, + ) -> None: + self.requirement = requirement + self.is_editable = is_editable + self.comes_from = comes_from + self.options = options + self.constraint = constraint + self.line_source = line_source + + +class ParsedLine: + def __init__( + self, + filename: str, + lineno: int, + args: str, + opts: Values, + constraint: bool, + ) -> None: + self.filename = filename + self.lineno = lineno + self.opts = opts + self.constraint = constraint + + if args: + self.is_requirement = True + self.is_editable = False + self.requirement = args + elif opts.editables: + self.is_requirement = True + self.is_editable = True + # We don't support multiple -e on one line + self.requirement = opts.editables[0] + else: + self.is_requirement = False + + +def parse_requirements( + filename: str, + session: PipSession, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + constraint: bool = False, +) -> Iterator[ParsedRequirement]: + """Parse a requirements file and yield ParsedRequirement instances. + + :param filename: Path or url of requirements file. + :param session: PipSession instance. + :param finder: Instance of pip.index.PackageFinder. + :param options: cli options. + :param constraint: If true, parsing a constraint file rather than + requirements file. + """ + line_parser = get_line_parser(finder) + parser = RequirementsFileParser(session, line_parser) + + for parsed_line in parser.parse(filename, constraint): + parsed_req = handle_line( + parsed_line, options=options, finder=finder, session=session + ) + if parsed_req is not None: + yield parsed_req + + +def preprocess(content: str) -> ReqFileLines: + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + """ + lines_enum: ReqFileLines = enumerate(content.splitlines(), start=1) + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = expand_env_variables(lines_enum) + return lines_enum + + +def handle_requirement_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, +) -> ParsedRequirement: + + # preserve for the nested code path + line_comes_from = "{} {} (line {})".format( + "-c" if line.constraint else "-r", + line.filename, + line.lineno, + ) + + assert line.is_requirement + + if line.is_editable: + # For editable requirements, we don't support per-requirement + # options, so just return the parsed requirement. + return ParsedRequirement( + requirement=line.requirement, + is_editable=line.is_editable, + comes_from=line_comes_from, + constraint=line.constraint, + ) + else: + if options: + # Disable wheels if the user has specified build options + cmdoptions.check_install_build_global(options, line.opts) + + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in line.opts.__dict__ and line.opts.__dict__[dest]: + req_options[dest] = line.opts.__dict__[dest] + + line_source = f"line {line.lineno} of {line.filename}" + return ParsedRequirement( + requirement=line.requirement, + is_editable=line.is_editable, + comes_from=line_comes_from, + constraint=line.constraint, + options=req_options, + line_source=line_source, + ) + + +def handle_option_line( + opts: Values, + filename: str, + lineno: int, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + session: Optional[PipSession] = None, +) -> None: + + if options: + # percolate options upward + if opts.require_hashes: + options.require_hashes = opts.require_hashes + if opts.features_enabled: + options.features_enabled.extend( + f for f in opts.features_enabled if f not in options.features_enabled + ) + + # set finder options + if finder: + find_links = finder.find_links + index_urls = finder.index_urls + if opts.index_url: + index_urls = [opts.index_url] + if opts.no_index is True: + index_urls = [] + if opts.extra_index_urls: + index_urls.extend(opts.extra_index_urls) + if opts.find_links: + # FIXME: it would be nice to keep track of the source + # of the find_links: support a find-links local path + # relative to a requirements file. + value = opts.find_links[0] + req_dir = os.path.dirname(os.path.abspath(filename)) + relative_to_reqs_file = os.path.join(req_dir, value) + if os.path.exists(relative_to_reqs_file): + value = relative_to_reqs_file + find_links.append(value) + + if session: + # We need to update the auth urls in session + session.update_index_urls(index_urls) + + search_scope = SearchScope( + find_links=find_links, + index_urls=index_urls, + ) + finder.search_scope = search_scope + + if opts.pre: + finder.set_allow_all_prereleases() + + if opts.prefer_binary: + finder.set_prefer_binary() + + if session: + for host in opts.trusted_hosts or []: + source = f"line {lineno} of {filename}" + session.add_trusted_host(host, source=source) + + +def handle_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, + finder: Optional["PackageFinder"] = None, + session: Optional[PipSession] = None, +) -> Optional[ParsedRequirement]: + """Handle a single parsed requirements line; This can result in + creating/yielding requirements, or updating the finder. + + :param line: The parsed line to be processed. + :param options: CLI options. + :param finder: The finder - updated by non-requirement lines. + :param session: The session - updated by non-requirement lines. + + Returns a ParsedRequirement object if the line is a requirement line, + otherwise returns None. + + For lines that contain requirements, the only options that have an effect + are from SUPPORTED_OPTIONS_REQ, and they are scoped to the + requirement. Other options from SUPPORTED_OPTIONS may be present, but are + ignored. + + For lines that do not contain requirements, the only options that have an + effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may + be present, but are ignored. These lines may contain multiple options + (although our docs imply only one is supported), and all our parsed and + affect the finder. + """ + + if line.is_requirement: + parsed_req = handle_requirement_line(line, options) + return parsed_req + else: + handle_option_line( + line.opts, + line.filename, + line.lineno, + finder, + options, + session, + ) + return None + + +class RequirementsFileParser: + def __init__( + self, + session: PipSession, + line_parser: LineParser, + ) -> None: + self._session = session + self._line_parser = line_parser + + def parse(self, filename: str, constraint: bool) -> Iterator[ParsedLine]: + """Parse a given file, yielding parsed lines.""" + yield from self._parse_and_recurse(filename, constraint) + + def _parse_and_recurse( + self, filename: str, constraint: bool + ) -> Iterator[ParsedLine]: + for line in self._parse_file(filename, constraint): + if not line.is_requirement and ( + line.opts.requirements or line.opts.constraints + ): + # parse a nested requirements file + if line.opts.requirements: + req_path = line.opts.requirements[0] + nested_constraint = False + else: + req_path = line.opts.constraints[0] + nested_constraint = True + + # original file is over http + if SCHEME_RE.search(filename): + # do a url join so relative paths work + req_path = urllib.parse.urljoin(filename, req_path) + # original file and nested file are paths + elif not SCHEME_RE.search(req_path): + # do a join so relative paths work + req_path = os.path.join( + os.path.dirname(filename), + req_path, + ) + + yield from self._parse_and_recurse(req_path, nested_constraint) + else: + yield line + + def _parse_file(self, filename: str, constraint: bool) -> Iterator[ParsedLine]: + _, content = get_file_content(filename, self._session) + + lines_enum = preprocess(content) + + for line_number, line in lines_enum: + try: + args_str, opts = self._line_parser(line) + except OptionParsingError as e: + # add offending line + msg = f"Invalid requirement: {line}\n{e.msg}" + raise RequirementsFileParseError(msg) + + yield ParsedLine( + filename, + line_number, + args_str, + opts, + constraint, + ) + + +def get_line_parser(finder: Optional["PackageFinder"]) -> LineParser: + def parse_line(line: str) -> Tuple[str, Values]: + # Build new parser for each line since it accumulates appendable + # options. + parser = build_parser() + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + defaults.format_control = finder.format_control + + args_str, options_str = break_args_options(line) + + opts, _ = parser.parse_args(shlex.split(options_str), defaults) + + return args_str, opts + + return parse_line + + +def break_args_options(line: str) -> Tuple[str, str]: + """Break up the line into an args and options string. We only want to shlex + (and then optparse) the options, not the args. args can contain markers + which are corrupted by shlex. + """ + tokens = line.split(" ") + args = [] + options = tokens[:] + for token in tokens: + if token.startswith("-") or token.startswith("--"): + break + else: + args.append(token) + options.pop(0) + return " ".join(args), " ".join(options) + + +class OptionParsingError(Exception): + def __init__(self, msg: str) -> None: + self.msg = msg + + +def build_parser() -> optparse.OptionParser: + """ + Return a parser for parsing requirement lines + """ + parser = optparse.OptionParser(add_help_option=False) + + option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ + for option_factory in option_factories: + option = option_factory() + parser.add_option(option) + + # By default optparse sys.exits on parsing errors. We want to wrap + # that in our own exception. + def parser_exit(self: Any, msg: str) -> "NoReturn": + raise OptionParsingError(msg) + + # NOTE: mypy disallows assigning to a method + # https://github.com/python/mypy/issues/2427 + parser.exit = parser_exit # type: ignore + + return parser + + +def join_lines(lines_enum: ReqFileLines) -> ReqFileLines: + """Joins a line ending in '\' with the previous line (except when following + comments). The joined line takes on the index of the first line. + """ + primary_line_number = None + new_line: List[str] = [] + for line_number, line in lines_enum: + if not line.endswith("\\") or COMMENT_RE.match(line): + if COMMENT_RE.match(line): + # this ensures comments are always matched later + line = " " + line + if new_line: + new_line.append(line) + assert primary_line_number is not None + yield primary_line_number, "".join(new_line) + new_line = [] + else: + yield line_number, line + else: + if not new_line: + primary_line_number = line_number + new_line.append(line.strip("\\")) + + # last line contains \ + if new_line: + assert primary_line_number is not None + yield primary_line_number, "".join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines: + """ + Strips comments and filter empty lines. + """ + for line_number, line in lines_enum: + line = COMMENT_RE.sub("", line) + line = line.strip() + if line: + yield line_number, line + + +def expand_env_variables(lines_enum: ReqFileLines) -> ReqFileLines: + """Replace all environment variables that can be retrieved via `os.getenv`. + + The only allowed format for environment variables defined in the + requirement file is `${MY_VARIABLE_1}` to ensure two things: + + 1. Strings that contain a `$` aren't accidentally (partially) expanded. + 2. Ensure consistency across platforms for requirement files. + + These points are the result of a discussion on the `github pull + request #3514 `_. + + Valid characters in variable names follow the `POSIX standard + `_ and are limited + to uppercase letter, digits and the `_` (underscore). + """ + for line_number, line in lines_enum: + for env_var, var_name in ENV_VAR_RE.findall(line): + value = os.getenv(var_name) + if not value: + continue + + line = line.replace(env_var, value) + + yield line_number, line + + +def get_file_content(url: str, session: PipSession) -> Tuple[str, str]: + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode. + Respects # -*- coding: declarations on the retrieved files. + + :param url: File path or url. + :param session: PipSession instance. + """ + scheme = get_url_scheme(url) + + # Pip has special support for file:// URLs (LocalFSAdapter). + if scheme in ["http", "https", "file"]: + resp = session.get(url) + raise_for_status(resp) + return resp.url, resp.text + + # Assume this is a bare path. + try: + with open(url, "rb") as f: + content = auto_decode(f.read()) + except OSError as exc: + raise InstallationError(f"Could not open requirements file: {exc}") + return url, content diff --git a/venv/Lib/site-packages/pip/_internal/req/req_install.py b/venv/Lib/site-packages/pip/_internal/req/req_install.py new file mode 100644 index 000000000..02dbda194 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/req_install.py @@ -0,0 +1,858 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import functools +import logging +import os +import shutil +import sys +import uuid +import zipfile +from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, Union + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.pep517.wrappers import Pep517HookCaller + +from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment +from pip._internal.exceptions import InstallationError, LegacyInstallFailure +from pip._internal.locations import get_scheme +from pip._internal.metadata import ( + BaseDistribution, + get_default_environment, + get_directory_distribution, +) +from pip._internal.models.link import Link +from pip._internal.operations.build.metadata import generate_metadata +from pip._internal.operations.build.metadata_editable import generate_editable_metadata +from pip._internal.operations.build.metadata_legacy import ( + generate_metadata as generate_metadata_legacy, +) +from pip._internal.operations.install.editable_legacy import ( + install_editable as install_editable_legacy, +) +from pip._internal.operations.install.legacy import install as install_legacy +from pip._internal.operations.install.wheel import install_wheel +from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path +from pip._internal.req.req_uninstall import UninstallPathSet +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.direct_url_helpers import ( + direct_url_for_editable, + direct_url_from_link, +) +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + ask_path_exists, + backup_dir, + display_path, + hide_url, + redact_auth_from_url, +) +from pip._internal.utils.packaging import safe_extra +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.virtualenv import running_under_virtualenv +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + + +class InstallRequirement: + """ + Represents something that may be installed later on, may have information + about where to fetch the relevant requirement and also contains logic for + installing the said requirement. + """ + + def __init__( + self, + req: Optional[Requirement], + comes_from: Optional[Union[str, "InstallRequirement"]], + editable: bool = False, + link: Optional[Link] = None, + markers: Optional[Marker] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + install_options: Optional[List[str]] = None, + global_options: Optional[List[str]] = None, + hash_options: Optional[Dict[str, List[str]]] = None, + constraint: bool = False, + extras: Collection[str] = (), + user_supplied: bool = False, + permit_editable_wheels: bool = False, + ) -> None: + assert req is None or isinstance(req, Requirement), req + self.req = req + self.comes_from = comes_from + self.constraint = constraint + self.editable = editable + self.permit_editable_wheels = permit_editable_wheels + self.legacy_install_reason: Optional[int] = None + + # source_dir is the local directory where the linked requirement is + # located, or unpacked. In case unpacking is needed, creating and + # populating source_dir is done by the RequirementPreparer. Note this + # is not necessarily the directory where pyproject.toml or setup.py is + # located - that one is obtained via unpacked_source_directory. + self.source_dir: Optional[str] = None + if self.editable: + assert link + if link.is_file: + self.source_dir = os.path.normpath(os.path.abspath(link.file_path)) + + if link is None and req and req.url: + # PEP 508 URL requirement + link = Link(req.url) + self.link = self.original_link = link + self.original_link_is_in_wheel_cache = False + + # Path to any downloaded or already-existing package. + self.local_file_path: Optional[str] = None + if self.link and self.link.is_file: + self.local_file_path = self.link.file_path + + if extras: + self.extras = extras + elif req: + self.extras = {safe_extra(extra) for extra in req.extras} + else: + self.extras = set() + if markers is None and req: + markers = req.marker + self.markers = markers + + # This holds the Distribution object if this requirement is already installed. + self.satisfied_by: Optional[BaseDistribution] = None + # Whether the installation process should try to uninstall an existing + # distribution before installing this requirement. + self.should_reinstall = False + # Temporary build location + self._temp_build_dir: Optional[TempDirectory] = None + # Set to True after successful installation + self.install_succeeded: Optional[bool] = None + # Supplied options + self.install_options = install_options if install_options else [] + self.global_options = global_options if global_options else [] + self.hash_options = hash_options if hash_options else {} + # Set to True after successful preparation of this requirement + self.prepared = False + # User supplied requirement are explicitly requested for installation + # by the user via CLI arguments or requirements files, as opposed to, + # e.g. dependencies, extras or constraints. + self.user_supplied = user_supplied + + self.isolated = isolated + self.build_env: BuildEnvironment = NoOpBuildEnvironment() + + # For PEP 517, the directory where we request the project metadata + # gets stored. We need this to pass to build_wheel, so the backend + # can ensure that the wheel matches the metadata (see the PEP for + # details). + self.metadata_directory: Optional[str] = None + + # The static build requirements (from pyproject.toml) + self.pyproject_requires: Optional[List[str]] = None + + # Build requirements that we will check are available + self.requirements_to_check: List[str] = [] + + # The PEP 517 backend we should use to build the project + self.pep517_backend: Optional[Pep517HookCaller] = None + + # Are we using PEP 517 for this requirement? + # After pyproject.toml has been loaded, the only valid values are True + # and False. Before loading, None is valid (meaning "use the default"). + # Setting an explicit value before loading pyproject.toml is supported, + # but after loading this flag should be treated as read only. + self.use_pep517 = use_pep517 + + # This requirement needs more preparation before it can be built + self.needs_more_preparation = False + + def __str__(self) -> str: + if self.req: + s = str(self.req) + if self.link: + s += " from {}".format(redact_auth_from_url(self.link.url)) + elif self.link: + s = redact_auth_from_url(self.link.url) + else: + s = "" + if self.satisfied_by is not None: + s += " in {}".format(display_path(self.satisfied_by.location)) + if self.comes_from: + if isinstance(self.comes_from, str): + comes_from: Optional[str] = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += f" (from {comes_from})" + return s + + def __repr__(self) -> str: + return "<{} object: {} editable={!r}>".format( + self.__class__.__name__, str(self), self.editable + ) + + def format_debug(self) -> str: + """An un-tested helper for getting state, for debugging.""" + attributes = vars(self) + names = sorted(attributes) + + state = ("{}={!r}".format(attr, attributes[attr]) for attr in sorted(names)) + return "<{name} object: {{{state}}}>".format( + name=self.__class__.__name__, + state=", ".join(state), + ) + + # Things that are valid for all kinds of requirements? + @property + def name(self) -> Optional[str]: + if self.req is None: + return None + return self.req.name + + @functools.lru_cache() # use cached_property in python 3.8+ + def supports_pyproject_editable(self) -> bool: + if not self.use_pep517: + return False + assert self.pep517_backend + with self.build_env: + runner = runner_with_spinner_message( + "Checking if build backend supports build_editable" + ) + with self.pep517_backend.subprocess_runner(runner): + return "build_editable" in self.pep517_backend._supported_features() + + @property + def specifier(self) -> SpecifierSet: + return self.req.specifier + + @property + def is_pinned(self) -> bool: + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + specifiers = self.specifier + return len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="} + + def match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> bool: + if not extras_requested: + # Provide an extra to safely evaluate the markers + # without matching any extra + extras_requested = ("",) + if self.markers is not None: + return any( + self.markers.evaluate({"extra": extra}) for extra in extras_requested + ) + else: + return True + + @property + def has_hash_options(self) -> bool: + """Return whether any known-good hashes are specified as options. + + These activate --require-hashes mode; hashes specified as part of a + URL do not. + + """ + return bool(self.hash_options) + + def hashes(self, trust_internet: bool = True) -> Hashes: + """Return a hash-comparer that considers my option- and URL-based + hashes to be known-good. + + Hashes in URLs--ones embedded in the requirements file, not ones + downloaded from an index server--are almost peers with ones from + flags. They satisfy --require-hashes (whether it was implicitly or + explicitly activated) but do not activate it. md5 and sha224 are not + allowed in flags, which should nudge people toward good algos. We + always OR all hashes together, even ones from URLs. + + :param trust_internet: Whether to trust URL-based (#md5=...) hashes + downloaded from the internet, as by populate_link() + + """ + good_hashes = self.hash_options.copy() + link = self.link if trust_internet else self.original_link + if link and link.hash: + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + def from_path(self) -> Optional[str]: + """Format a nice indicator to show where this "comes from" """ + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, str): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += "->" + comes_from + return s + + def ensure_build_location( + self, build_dir: str, autodelete: bool, parallel_builds: bool + ) -> str: + assert build_dir is not None + if self._temp_build_dir is not None: + assert self._temp_build_dir.path + return self._temp_build_dir.path + if self.req is None: + # Some systems have /tmp as a symlink which confuses custom + # builds (such as numpy). Thus, we ensure that the real path + # is returned. + self._temp_build_dir = TempDirectory( + kind=tempdir_kinds.REQ_BUILD, globally_managed=True + ) + + return self._temp_build_dir.path + + # This is the only remaining place where we manually determine the path + # for the temporary directory. It is only needed for editables where + # it is the value of the --src option. + + # When parallel builds are enabled, add a UUID to the build directory + # name so multiple builds do not interfere with each other. + dir_name: str = canonicalize_name(self.name) + if parallel_builds: + dir_name = f"{dir_name}_{uuid.uuid4().hex}" + + # FIXME: Is there a better place to create the build_dir? (hg and bzr + # need this) + if not os.path.exists(build_dir): + logger.debug("Creating directory %s", build_dir) + os.makedirs(build_dir) + actual_build_dir = os.path.join(build_dir, dir_name) + # `None` indicates that we respect the globally-configured deletion + # settings, which is what we actually want when auto-deleting. + delete_arg = None if autodelete else False + return TempDirectory( + path=actual_build_dir, + delete=delete_arg, + kind=tempdir_kinds.REQ_BUILD, + globally_managed=True, + ).path + + def _set_requirement(self) -> None: + """Set requirement after generating metadata.""" + assert self.req is None + assert self.metadata is not None + assert self.source_dir is not None + + # Construct a Requirement object from the generated metadata + if isinstance(parse_version(self.metadata["Version"]), Version): + op = "==" + else: + op = "===" + + self.req = Requirement( + "".join( + [ + self.metadata["Name"], + op, + self.metadata["Version"], + ] + ) + ) + + def warn_on_mismatching_name(self) -> None: + metadata_name = canonicalize_name(self.metadata["Name"]) + if canonicalize_name(self.req.name) == metadata_name: + # Everything is fine. + return + + # If we're here, there's a mismatch. Log a warning about it. + logger.warning( + "Generating metadata for package %s " + "produced metadata for project name %s. Fix your " + "#egg=%s fragments.", + self.name, + metadata_name, + self.name, + ) + self.req = Requirement(metadata_name) + + def check_if_exists(self, use_user_site: bool) -> None: + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.should_reinstall appropriately. + """ + if self.req is None: + return + existing_dist = get_default_environment().get_distribution(self.req.name) + if not existing_dist: + return + + version_compatible = self.req.specifier.contains( + existing_dist.version, + prereleases=True, + ) + if not version_compatible: + self.satisfied_by = None + if use_user_site: + if existing_dist.in_usersite: + self.should_reinstall = True + elif running_under_virtualenv() and existing_dist.in_site_packages: + raise InstallationError( + f"Will not install to the user site because it will " + f"lack sys.path precedence to {existing_dist.raw_name} " + f"in {existing_dist.location}" + ) + else: + self.should_reinstall = True + else: + if self.editable: + self.should_reinstall = True + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + else: + self.satisfied_by = existing_dist + + # Things valid for wheels + @property + def is_wheel(self) -> bool: + if not self.link: + return False + return self.link.is_wheel + + # Things valid for sdists + @property + def unpacked_source_directory(self) -> str: + return os.path.join( + self.source_dir, self.link and self.link.subdirectory_fragment or "" + ) + + @property + def setup_py_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_py = os.path.join(self.unpacked_source_directory, "setup.py") + + return setup_py + + @property + def setup_cfg_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_cfg = os.path.join(self.unpacked_source_directory, "setup.cfg") + + return setup_cfg + + @property + def pyproject_toml_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + return make_pyproject_path(self.unpacked_source_directory) + + def load_pyproject_toml(self) -> None: + """Load the pyproject.toml file. + + After calling this routine, all of the attributes related to PEP 517 + processing for this requirement have been set. In particular, the + use_pep517 attribute can be used to determine whether we should + follow the PEP 517 or legacy (setup.py) code path. + """ + pyproject_toml_data = load_pyproject_toml( + self.use_pep517, self.pyproject_toml_path, self.setup_py_path, str(self) + ) + + if pyproject_toml_data is None: + self.use_pep517 = False + return + + self.use_pep517 = True + requires, backend, check, backend_path = pyproject_toml_data + self.requirements_to_check = check + self.pyproject_requires = requires + self.pep517_backend = Pep517HookCaller( + self.unpacked_source_directory, + backend, + backend_path=backend_path, + ) + + def isolated_editable_sanity_check(self) -> None: + """Check that an editable requirement if valid for use with PEP 517/518. + + This verifies that an editable that has a pyproject.toml either supports PEP 660 + or as a setup.py or a setup.cfg + """ + if ( + self.editable + and self.use_pep517 + and not self.supports_pyproject_editable() + and not os.path.isfile(self.setup_py_path) + and not os.path.isfile(self.setup_cfg_path) + ): + raise InstallationError( + f"Project {self} has a 'pyproject.toml' and its build " + f"backend is missing the 'build_editable' hook. Since it does not " + f"have a 'setup.py' nor a 'setup.cfg', " + f"it cannot be installed in editable mode. " + f"Consider using a build backend that supports PEP 660." + ) + + def prepare_metadata(self) -> None: + """Ensure that project metadata is available. + + Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. + Under legacy processing, call setup.py egg-info. + """ + assert self.source_dir + details = self.name or f"from {self.link}" + + if self.use_pep517: + assert self.pep517_backend is not None + if ( + self.editable + and self.permit_editable_wheels + and self.supports_pyproject_editable() + ): + self.metadata_directory = generate_editable_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata_legacy( + build_env=self.build_env, + setup_py_path=self.setup_py_path, + source_dir=self.unpacked_source_directory, + isolated=self.isolated, + details=details, + ) + + # Act on the newly generated metadata, based on the name and version. + if not self.name: + self._set_requirement() + else: + self.warn_on_mismatching_name() + + self.assert_source_matches_version() + + @property + def metadata(self) -> Any: + if not hasattr(self, "_metadata"): + self._metadata = self.get_dist().metadata + + return self._metadata + + def get_dist(self) -> BaseDistribution: + return get_directory_distribution(self.metadata_directory) + + def assert_source_matches_version(self) -> None: + assert self.source_dir + version = self.metadata["version"] + if self.req.specifier and version not in self.req.specifier: + logger.warning( + "Requested %s, but installing version %s", + self, + version, + ) + else: + logger.debug( + "Source in %s has version %s, which satisfies requirement %s", + display_path(self.source_dir), + version, + self, + ) + + # For both source distributions and editables + def ensure_has_source_dir( + self, + parent_dir: str, + autodelete: bool = False, + parallel_builds: bool = False, + ) -> None: + """Ensure that a source_dir is set. + + This will create a temporary build dir if the name of the requirement + isn't known yet. + + :param parent_dir: The ideal pip parent_dir for the source_dir. + Generally src_dir for editables and build_dir for sdists. + :return: self.source_dir + """ + if self.source_dir is None: + self.source_dir = self.ensure_build_location( + parent_dir, + autodelete=autodelete, + parallel_builds=parallel_builds, + ) + + # For editable installations + def update_editable(self) -> None: + if not self.link: + logger.debug( + "Cannot update repository at %s; repository location is unknown", + self.source_dir, + ) + return + assert self.editable + assert self.source_dir + if self.link.scheme == "file": + # Static paths don't get updated + return + vcs_backend = vcs.get_backend_for_scheme(self.link.scheme) + # Editable requirements are validated in Requirement constructors. + # So here, if it's neither a path nor a valid VCS URL, it's a bug. + assert vcs_backend, f"Unsupported VCS URL {self.link.url}" + hidden_url = hide_url(self.link.url) + vcs_backend.obtain(self.source_dir, url=hidden_url, verbosity=0) + + # Top-level Actions + def uninstall( + self, auto_confirm: bool = False, verbose: bool = False + ) -> Optional[UninstallPathSet]: + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + assert self.req + dist = get_default_environment().get_distribution(self.req.name) + if not dist: + logger.warning("Skipping %s as it is not installed.", self.name) + return None + logger.info("Found existing installation: %s", dist) + + uninstalled_pathset = UninstallPathSet.from_dist(dist) + uninstalled_pathset.remove(auto_confirm, verbose) + return uninstalled_pathset + + def _get_archive_name(self, path: str, parentdir: str, rootdir: str) -> str: + def _clean_zip_name(name: str, prefix: str) -> str: + assert name.startswith( + prefix + os.path.sep + ), f"name {name!r} doesn't start with prefix {prefix!r}" + name = name[len(prefix) + 1 :] + name = name.replace(os.path.sep, "/") + return name + + path = os.path.join(parentdir, path) + name = _clean_zip_name(path, rootdir) + return self.name + "/" + name + + def archive(self, build_dir: Optional[str]) -> None: + """Saves archive to provided build_dir. + + Used for saving downloaded VCS requirements as part of `pip download`. + """ + assert self.source_dir + if build_dir is None: + return + + create_archive = True + archive_name = "{}-{}.zip".format(self.name, self.metadata["version"]) + archive_path = os.path.join(build_dir, archive_name) + + if os.path.exists(archive_path): + response = ask_path_exists( + "The file {} exists. (i)gnore, (w)ipe, " + "(b)ackup, (a)bort ".format(display_path(archive_path)), + ("i", "w", "b", "a"), + ) + if response == "i": + create_archive = False + elif response == "w": + logger.warning("Deleting %s", display_path(archive_path)) + os.remove(archive_path) + elif response == "b": + dest_file = backup_dir(archive_path) + logger.warning( + "Backing up %s to %s", + display_path(archive_path), + display_path(dest_file), + ) + shutil.move(archive_path, dest_file) + elif response == "a": + sys.exit(-1) + + if not create_archive: + return + + zip_output = zipfile.ZipFile( + archive_path, + "w", + zipfile.ZIP_DEFLATED, + allowZip64=True, + ) + with zip_output: + dir = os.path.normcase(os.path.abspath(self.unpacked_source_directory)) + for dirpath, dirnames, filenames in os.walk(dir): + for dirname in dirnames: + dir_arcname = self._get_archive_name( + dirname, + parentdir=dirpath, + rootdir=dir, + ) + zipdir = zipfile.ZipInfo(dir_arcname + "/") + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip_output.writestr(zipdir, "") + for filename in filenames: + file_arcname = self._get_archive_name( + filename, + parentdir=dirpath, + rootdir=dir, + ) + filename = os.path.join(dirpath, filename) + zip_output.write(filename, file_arcname) + + logger.info("Saved %s", display_path(archive_path)) + + def install( + self, + install_options: List[str], + global_options: Optional[Sequence[str]] = None, + root: Optional[str] = None, + home: Optional[str] = None, + prefix: Optional[str] = None, + warn_script_location: bool = True, + use_user_site: bool = False, + pycompile: bool = True, + ) -> None: + scheme = get_scheme( + self.name, + user=use_user_site, + home=home, + root=root, + isolated=self.isolated, + prefix=prefix, + ) + + global_options = global_options if global_options is not None else [] + if self.editable and not self.is_wheel: + install_editable_legacy( + install_options, + global_options, + prefix=prefix, + home=home, + use_user_site=use_user_site, + name=self.name, + setup_py_path=self.setup_py_path, + isolated=self.isolated, + build_env=self.build_env, + unpacked_source_directory=self.unpacked_source_directory, + ) + self.install_succeeded = True + return + + if self.is_wheel: + assert self.local_file_path + direct_url = None + if self.editable: + direct_url = direct_url_for_editable(self.unpacked_source_directory) + elif self.original_link: + direct_url = direct_url_from_link( + self.original_link, + self.source_dir, + self.original_link_is_in_wheel_cache, + ) + install_wheel( + self.name, + self.local_file_path, + scheme=scheme, + req_description=str(self.req), + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=direct_url, + requested=self.user_supplied, + ) + self.install_succeeded = True + return + + # TODO: Why don't we do this for editable installs? + + # Extend the list of global and install options passed on to + # the setup.py call with the ones from the requirements file. + # Options specified in requirements file override those + # specified on the command line, since the last option given + # to setup.py is the one that is used. + global_options = list(global_options) + self.global_options + install_options = list(install_options) + self.install_options + + try: + success = install_legacy( + install_options=install_options, + global_options=global_options, + root=root, + home=home, + prefix=prefix, + use_user_site=use_user_site, + pycompile=pycompile, + scheme=scheme, + setup_py_path=self.setup_py_path, + isolated=self.isolated, + req_name=self.name, + build_env=self.build_env, + unpacked_source_directory=self.unpacked_source_directory, + req_description=str(self.req), + ) + except LegacyInstallFailure as exc: + self.install_succeeded = False + raise exc + except Exception: + self.install_succeeded = True + raise + + self.install_succeeded = success + + if success and self.legacy_install_reason == 8368: + deprecated( + reason=( + "{} was installed using the legacy 'setup.py install' " + "method, because a wheel could not be built for it.".format( + self.name + ) + ), + replacement="to fix the wheel build issue reported above", + gone_in=None, + issue=8368, + ) + + +def check_invalid_constraint_type(req: InstallRequirement) -> str: + + # Check for unsupported forms + problem = "" + if not req.name: + problem = "Unnamed requirements are not allowed as constraints" + elif req.editable: + problem = "Editable requirements are not allowed as constraints" + elif req.extras: + problem = "Constraints cannot have extras" + + if problem: + deprecated( + reason=( + "Constraints are only allowed to take the form of a package " + "name and a version specifier. Other forms were originally " + "permitted as an accident of the implementation, but were " + "undocumented. The new implementation of the resolver no " + "longer supports these forms." + ), + replacement="replacing the constraint with a requirement", + # No plan yet for when the new resolver becomes default + gone_in=None, + issue=8210, + ) + + return problem diff --git a/venv/Lib/site-packages/pip/_internal/req/req_set.py b/venv/Lib/site-packages/pip/_internal/req/req_set.py new file mode 100644 index 000000000..6626c37e2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/req_set.py @@ -0,0 +1,189 @@ +import logging +from collections import OrderedDict +from typing import Dict, Iterable, List, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InstallationError +from pip._internal.models.wheel import Wheel +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils import compatibility_tags + +logger = logging.getLogger(__name__) + + +class RequirementSet: + def __init__(self, check_supported_wheels: bool = True) -> None: + """Create a RequirementSet.""" + + self.requirements: Dict[str, InstallRequirement] = OrderedDict() + self.check_supported_wheels = check_supported_wheels + + self.unnamed_requirements: List[InstallRequirement] = [] + + def __str__(self) -> str: + requirements = sorted( + (req for req in self.requirements.values() if not req.comes_from), + key=lambda req: canonicalize_name(req.name or ""), + ) + return " ".join(str(req.req) for req in requirements) + + def __repr__(self) -> str: + requirements = sorted( + self.requirements.values(), + key=lambda req: canonicalize_name(req.name or ""), + ) + + format_string = "<{classname} object; {count} requirement(s): {reqs}>" + return format_string.format( + classname=self.__class__.__name__, + count=len(requirements), + reqs=", ".join(str(req.req) for req in requirements), + ) + + def add_unnamed_requirement(self, install_req: InstallRequirement) -> None: + assert not install_req.name + self.unnamed_requirements.append(install_req) + + def add_named_requirement(self, install_req: InstallRequirement) -> None: + assert install_req.name + + project_name = canonicalize_name(install_req.name) + self.requirements[project_name] = install_req + + def add_requirement( + self, + install_req: InstallRequirement, + parent_req_name: Optional[str] = None, + extras_requested: Optional[Iterable[str]] = None, + ) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]]: + """Add install_req as a requirement to install. + + :param parent_req_name: The name of the requirement that needed this + added. The name is used because when multiple unnamed requirements + resolve to the same name, we could otherwise end up with dependency + links that point outside the Requirements set. parent_req must + already be added. Note that None implies that this is a user + supplied requirement, vs an inferred one. + :param extras_requested: an iterable of extras used to evaluate the + environment markers. + :return: Additional requirements to scan. That is either [] if + the requirement is not applicable, or [install_req] if the + requirement is applicable and has just been added. + """ + # If the markers do not match, ignore this requirement. + if not install_req.match_markers(extras_requested): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + install_req.name, + install_req.markers, + ) + return [], None + + # If the wheel is not supported, raise an error. + # Should check this after filtering out based on environment markers to + # allow specifying different wheels based on the environment/OS, in a + # single requirements file. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + tags = compatibility_tags.get_supported() + if self.check_supported_wheels and not wheel.supported(tags): + raise InstallationError( + "{} is not a supported wheel on this platform.".format( + wheel.filename + ) + ) + + # This next bit is really a sanity check. + assert ( + not install_req.user_supplied or parent_req_name is None + ), "a user supplied req shouldn't have a parent" + + # Unnamed requirements are scanned again and the requirement won't be + # added as a dependency until after scanning. + if not install_req.name: + self.add_unnamed_requirement(install_req) + return [install_req], None + + try: + existing_req: Optional[InstallRequirement] = self.get_requirement( + install_req.name + ) + except KeyError: + existing_req = None + + has_conflicting_requirement = ( + parent_req_name is None + and existing_req + and not existing_req.constraint + and existing_req.extras == install_req.extras + and existing_req.req + and install_req.req + and existing_req.req.specifier != install_req.req.specifier + ) + if has_conflicting_requirement: + raise InstallationError( + "Double requirement given: {} (already in {}, name={!r})".format( + install_req, existing_req, install_req.name + ) + ) + + # When no existing requirement exists, add the requirement as a + # dependency and it will be scanned again after. + if not existing_req: + self.add_named_requirement(install_req) + # We'd want to rescan this requirement later + return [install_req], install_req + + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + if install_req.constraint or not existing_req.constraint: + return [], existing_req + + does_not_satisfy_constraint = install_req.link and not ( + existing_req.link and install_req.link.path == existing_req.link.path + ) + if does_not_satisfy_constraint: + raise InstallationError( + "Could not satisfy constraints for '{}': " + "installation from path or url cannot be " + "constrained to a version".format(install_req.name) + ) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + # If we're now installing a user supplied requirement, + # mark the existing object as such. + if install_req.user_supplied: + existing_req.user_supplied = True + existing_req.extras = tuple( + sorted(set(existing_req.extras) | set(install_req.extras)) + ) + logger.debug( + "Setting %s extras to: %s", + existing_req, + existing_req.extras, + ) + # Return the existing requirement for addition to the parent and + # scanning again. + return [existing_req], existing_req + + def has_requirement(self, name: str) -> bool: + project_name = canonicalize_name(name) + + return ( + project_name in self.requirements + and not self.requirements[project_name].constraint + ) + + def get_requirement(self, name: str) -> InstallRequirement: + project_name = canonicalize_name(name) + + if project_name in self.requirements: + return self.requirements[project_name] + + raise KeyError(f"No project with the name {name!r}") + + @property + def all_requirements(self) -> List[InstallRequirement]: + return self.unnamed_requirements + list(self.requirements.values()) diff --git a/venv/Lib/site-packages/pip/_internal/req/req_tracker.py b/venv/Lib/site-packages/pip/_internal/req/req_tracker.py new file mode 100644 index 000000000..24d3c5303 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/req_tracker.py @@ -0,0 +1,124 @@ +import contextlib +import hashlib +import logging +import os +from types import TracebackType +from typing import Dict, Iterator, Optional, Set, Type, Union + +from pip._internal.models.link import Link +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +@contextlib.contextmanager +def update_env_context_manager(**changes: str) -> Iterator[None]: + target = os.environ + + # Save values from the target and change them. + non_existent_marker = object() + saved_values: Dict[str, Union[object, str]] = {} + for name, new_value in changes.items(): + try: + saved_values[name] = target[name] + except KeyError: + saved_values[name] = non_existent_marker + target[name] = new_value + + try: + yield + finally: + # Restore original values in the target. + for name, original_value in saved_values.items(): + if original_value is non_existent_marker: + del target[name] + else: + assert isinstance(original_value, str) # for mypy + target[name] = original_value + + +@contextlib.contextmanager +def get_requirement_tracker() -> Iterator["RequirementTracker"]: + root = os.environ.get("PIP_REQ_TRACKER") + with contextlib.ExitStack() as ctx: + if root is None: + root = ctx.enter_context(TempDirectory(kind="req-tracker")).path + ctx.enter_context(update_env_context_manager(PIP_REQ_TRACKER=root)) + logger.debug("Initialized build tracking at %s", root) + + with RequirementTracker(root) as tracker: + yield tracker + + +class RequirementTracker: + def __init__(self, root: str) -> None: + self._root = root + self._entries: Set[InstallRequirement] = set() + logger.debug("Created build tracker: %s", self._root) + + def __enter__(self) -> "RequirementTracker": + logger.debug("Entered build tracker: %s", self._root) + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.cleanup() + + def _entry_path(self, link: Link) -> str: + hashed = hashlib.sha224(link.url_without_fragment.encode()).hexdigest() + return os.path.join(self._root, hashed) + + def add(self, req: InstallRequirement) -> None: + """Add an InstallRequirement to build tracking.""" + + assert req.link + # Get the file to write information about this requirement. + entry_path = self._entry_path(req.link) + + # Try reading from the file. If it exists and can be read from, a build + # is already in progress, so a LookupError is raised. + try: + with open(entry_path) as fp: + contents = fp.read() + except FileNotFoundError: + pass + else: + message = "{} is already being built: {}".format(req.link, contents) + raise LookupError(message) + + # If we're here, req should really not be building already. + assert req not in self._entries + + # Start tracking this requirement. + with open(entry_path, "w", encoding="utf-8") as fp: + fp.write(str(req)) + self._entries.add(req) + + logger.debug("Added %s to build tracker %r", req, self._root) + + def remove(self, req: InstallRequirement) -> None: + """Remove an InstallRequirement from build tracking.""" + + assert req.link + # Delete the created file and the corresponding entries. + os.unlink(self._entry_path(req.link)) + self._entries.remove(req) + + logger.debug("Removed %s from build tracker %r", req, self._root) + + def cleanup(self) -> None: + for req in set(self._entries): + self.remove(req) + + logger.debug("Removed build tracker: %r", self._root) + + @contextlib.contextmanager + def track(self, req: InstallRequirement) -> Iterator[None]: + self.add(req) + yield + self.remove(req) diff --git a/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py b/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py new file mode 100644 index 000000000..472090a0d --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py @@ -0,0 +1,633 @@ +import functools +import os +import sys +import sysconfig +from importlib.util import cache_from_source +from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Set, Tuple + +from pip._internal.exceptions import UninstallationError +from pip._internal.locations import get_bin_prefix, get_bin_user +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.egg_link import egg_link_path_from_location +from pip._internal.utils.logging import getLogger, indent_log +from pip._internal.utils.misc import ask, is_local, normalize_path, renames, rmtree +from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory + +logger = getLogger(__name__) + + +def _script_names(bin_dir: str, script_name: str, is_gui: bool) -> Iterator[str]: + """Create the fully qualified name of the files created by + {console,gui}_scripts for the given ``dist``. + Returns the list of file names + """ + exe_name = os.path.join(bin_dir, script_name) + yield exe_name + if not WINDOWS: + return + yield f"{exe_name}.exe" + yield f"{exe_name}.exe.manifest" + if is_gui: + yield f"{exe_name}-script.pyw" + else: + yield f"{exe_name}-script.py" + + +def _unique(fn: Callable[..., Iterator[Any]]) -> Callable[..., Iterator[Any]]: + @functools.wraps(fn) + def unique(*args: Any, **kw: Any) -> Iterator[Any]: + seen: Set[Any] = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + + return unique + + +@_unique +def uninstallation_paths(dist: BaseDistribution) -> Iterator[str]: + """ + Yield all the uninstallation paths for dist based on RECORD-without-.py[co] + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc and .pyo in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .py[co]. + + If RECORD is not found, raises UninstallationError, + with possible information from the INSTALLER file. + + https://packaging.python.org/specifications/recording-installed-packages/ + """ + location = dist.location + assert location is not None, "not installed" + + entries = dist.iter_declared_entries() + if entries is None: + msg = "Cannot uninstall {dist}, RECORD file not found.".format(dist=dist) + installer = dist.installer + if not installer or installer == "pip": + dep = "{}=={}".format(dist.raw_name, dist.version) + msg += ( + " You might be able to recover from this via: " + "'pip install --force-reinstall --no-deps {}'.".format(dep) + ) + else: + msg += " Hint: The package was installed by {}.".format(installer) + raise UninstallationError(msg) + + for entry in entries: + path = os.path.join(location, entry) + yield path + if path.endswith(".py"): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + ".pyc") + yield path + path = os.path.join(dn, base + ".pyo") + yield path + + +def compact(paths: Iterable[str]) -> Set[str]: + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + + sep = os.path.sep + short_paths: Set[str] = set() + for path in sorted(paths, key=len): + should_skip = any( + path.startswith(shortpath.rstrip("*")) + and path[len(shortpath.rstrip("*").rstrip(sep))] == sep + for shortpath in short_paths + ) + if not should_skip: + short_paths.add(path) + return short_paths + + +def compress_for_rename(paths: Iterable[str]) -> Set[str]: + """Returns a set containing the paths that need to be renamed. + + This set may include directories when the original sequence of paths + included every file on disk. + """ + case_map = {os.path.normcase(p): p for p in paths} + remaining = set(case_map) + unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len) + wildcards: Set[str] = set() + + def norm_join(*a: str) -> str: + return os.path.normcase(os.path.join(*a)) + + for root in unchecked: + if any(os.path.normcase(root).startswith(w) for w in wildcards): + # This directory has already been handled. + continue + + all_files: Set[str] = set() + all_subdirs: Set[str] = set() + for dirname, subdirs, files in os.walk(root): + all_subdirs.update(norm_join(root, dirname, d) for d in subdirs) + all_files.update(norm_join(root, dirname, f) for f in files) + # If all the files we found are in our remaining set of files to + # remove, then remove them from the latter set and add a wildcard + # for the directory. + if not (all_files - remaining): + remaining.difference_update(all_files) + wildcards.add(root + os.sep) + + return set(map(case_map.__getitem__, remaining)) | wildcards + + +def compress_for_output_listing(paths: Iterable[str]) -> Tuple[Set[str], Set[str]]: + """Returns a tuple of 2 sets of which paths to display to user + + The first set contains paths that would be deleted. Files of a package + are not added and the top-level directory of the package has a '*' added + at the end - to signify that all it's contents are removed. + + The second set contains files that would have been skipped in the above + folders. + """ + + will_remove = set(paths) + will_skip = set() + + # Determine folders and files + folders = set() + files = set() + for path in will_remove: + if path.endswith(".pyc"): + continue + if path.endswith("__init__.py") or ".dist-info" in path: + folders.add(os.path.dirname(path)) + files.add(path) + + # probably this one https://github.com/python/mypy/issues/390 + _normcased_files = set(map(os.path.normcase, files)) # type: ignore + + folders = compact(folders) + + # This walks the tree using os.walk to not miss extra folders + # that might get added. + for folder in folders: + for dirpath, _, dirfiles in os.walk(folder): + for fname in dirfiles: + if fname.endswith(".pyc"): + continue + + file_ = os.path.join(dirpath, fname) + if ( + os.path.isfile(file_) + and os.path.normcase(file_) not in _normcased_files + ): + # We are skipping this file. Add it to the set. + will_skip.add(file_) + + will_remove = files | {os.path.join(folder, "*") for folder in folders} + + return will_remove, will_skip + + +class StashedUninstallPathSet: + """A set of file rename operations to stash files while + tentatively uninstalling them.""" + + def __init__(self) -> None: + # Mapping from source file root to [Adjacent]TempDirectory + # for files under that directory. + self._save_dirs: Dict[str, TempDirectory] = {} + # (old path, new path) tuples for each move that may need + # to be undone. + self._moves: List[Tuple[str, str]] = [] + + def _get_directory_stash(self, path: str) -> str: + """Stashes a directory. + + Directories are stashed adjacent to their original location if + possible, or else moved/copied into the user's temp dir.""" + + try: + save_dir: TempDirectory = AdjacentTempDirectory(path) + except OSError: + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[os.path.normcase(path)] = save_dir + + return save_dir.path + + def _get_file_stash(self, path: str) -> str: + """Stashes a file. + + If no root has been provided, one will be created for the directory + in the user's temp directory.""" + path = os.path.normcase(path) + head, old_head = os.path.dirname(path), None + save_dir = None + + while head != old_head: + try: + save_dir = self._save_dirs[head] + break + except KeyError: + pass + head, old_head = os.path.dirname(head), head + else: + # Did not find any suitable root + head = os.path.dirname(path) + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[head] = save_dir + + relpath = os.path.relpath(path, head) + if relpath and relpath != os.path.curdir: + return os.path.join(save_dir.path, relpath) + return save_dir.path + + def stash(self, path: str) -> str: + """Stashes the directory or file and returns its new location. + Handle symlinks as files to avoid modifying the symlink targets. + """ + path_is_dir = os.path.isdir(path) and not os.path.islink(path) + if path_is_dir: + new_path = self._get_directory_stash(path) + else: + new_path = self._get_file_stash(path) + + self._moves.append((path, new_path)) + if path_is_dir and os.path.isdir(new_path): + # If we're moving a directory, we need to + # remove the destination first or else it will be + # moved to inside the existing directory. + # We just created new_path ourselves, so it will + # be removable. + os.rmdir(new_path) + renames(path, new_path) + return new_path + + def commit(self) -> None: + """Commits the uninstall by removing stashed files.""" + for _, save_dir in self._save_dirs.items(): + save_dir.cleanup() + self._moves = [] + self._save_dirs = {} + + def rollback(self) -> None: + """Undoes the uninstall by moving stashed files back.""" + for p in self._moves: + logger.info("Moving to %s\n from %s", *p) + + for new_path, path in self._moves: + try: + logger.debug("Replacing %s from %s", new_path, path) + if os.path.isfile(new_path) or os.path.islink(new_path): + os.unlink(new_path) + elif os.path.isdir(new_path): + rmtree(new_path) + renames(path, new_path) + except OSError as ex: + logger.error("Failed to restore %s", new_path) + logger.debug("Exception: %s", ex) + + self.commit() + + @property + def can_rollback(self) -> bool: + return bool(self._moves) + + +class UninstallPathSet: + """A set of file paths to be removed in the uninstallation of a + requirement.""" + + def __init__(self, dist: BaseDistribution) -> None: + self._paths: Set[str] = set() + self._refuse: Set[str] = set() + self._pth: Dict[str, UninstallPthEntries] = {} + self._dist = dist + self._moved_paths = StashedUninstallPathSet() + + def _permitted(self, path: str) -> bool: + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path: str) -> None: + head, tail = os.path.split(path) + + # we normalize the head to resolve parent directory symlinks, but not + # the tail, since we only want to uninstall symlinks, not their targets + path = os.path.join(normalize_path(head), os.path.normcase(tail)) + + if not os.path.exists(path): + return + if self._permitted(path): + self._paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, + # due to imports + if os.path.splitext(path)[1] == ".py": + self.add(cache_from_source(path)) + + def add_pth(self, pth_file: str, entry: str) -> None: + pth_file = normalize_path(pth_file) + if self._permitted(pth_file): + if pth_file not in self._pth: + self._pth[pth_file] = UninstallPthEntries(pth_file) + self._pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def remove(self, auto_confirm: bool = False, verbose: bool = False) -> None: + """Remove paths in ``self._paths`` with confirmation (unless + ``auto_confirm`` is True).""" + + if not self._paths: + logger.info( + "Can't uninstall '%s'. No files were found to uninstall.", + self._dist.raw_name, + ) + return + + dist_name_version = f"{self._dist.raw_name}-{self._dist.version}" + logger.info("Uninstalling %s:", dist_name_version) + + with indent_log(): + if auto_confirm or self._allowed_to_proceed(verbose): + moved = self._moved_paths + + for_rename = compress_for_rename(self._paths) + + for path in sorted(compact(for_rename)): + moved.stash(path) + logger.verbose("Removing file or directory %s", path) + + for pth in self._pth.values(): + pth.remove() + + logger.info("Successfully uninstalled %s", dist_name_version) + + def _allowed_to_proceed(self, verbose: bool) -> bool: + """Display which files would be deleted and prompt for confirmation""" + + def _display(msg: str, paths: Iterable[str]) -> None: + if not paths: + return + + logger.info(msg) + with indent_log(): + for path in sorted(compact(paths)): + logger.info(path) + + if not verbose: + will_remove, will_skip = compress_for_output_listing(self._paths) + else: + # In verbose mode, display all the files that are going to be + # deleted. + will_remove = set(self._paths) + will_skip = set() + + _display("Would remove:", will_remove) + _display("Would not remove (might be manually added):", will_skip) + _display("Would not remove (outside of prefix):", self._refuse) + if verbose: + _display("Will actually move:", compress_for_rename(self._paths)) + + return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n" + + def rollback(self) -> None: + """Rollback the changes previously made by remove().""" + if not self._moved_paths.can_rollback: + logger.error( + "Can't roll back %s; was not uninstalled", + self._dist.raw_name, + ) + return + logger.info("Rolling back uninstall of %s", self._dist.raw_name) + self._moved_paths.rollback() + for pth in self._pth.values(): + pth.rollback() + + def commit(self) -> None: + """Remove temporary save dir: rollback will no longer be possible.""" + self._moved_paths.commit() + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "UninstallPathSet": + dist_location = dist.location + info_location = dist.info_location + if dist_location is None: + logger.info( + "Not uninstalling %s since it is not installed", + dist.canonical_name, + ) + return cls(dist) + + normalized_dist_location = normalize_path(dist_location) + if not dist.local: + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.canonical_name, + normalized_dist_location, + sys.prefix, + ) + return cls(dist) + + if normalized_dist_location in { + p + for p in {sysconfig.get_path("stdlib"), sysconfig.get_path("platstdlib")} + if p + }: + logger.info( + "Not uninstalling %s at %s, as it is in the standard library.", + dist.canonical_name, + normalized_dist_location, + ) + return cls(dist) + + paths_to_remove = cls(dist) + develop_egg_link = egg_link_path_from_location(dist.raw_name) + + # Distribution is installed with metadata in a "flat" .egg-info + # directory. This means it is not a modern .dist-info installation, an + # egg, or legacy editable. + setuptools_flat_installation = ( + dist.installed_with_setuptools_egg_info + and info_location is not None + and os.path.exists(info_location) + # If dist is editable and the location points to a ``.egg-info``, + # we are in fact in the legacy editable case. + and not info_location.endswith(f"{dist.setuptools_filename}.egg-info") + ) + + # Uninstall cases order do matter as in the case of 2 installs of the + # same package, pip needs to uninstall the currently detected version + if setuptools_flat_installation: + if info_location is not None: + paths_to_remove.add(info_location) + installed_files = dist.iter_declared_entries() + if installed_files is not None: + for installed_file in installed_files: + paths_to_remove.add(os.path.join(dist_location, installed_file)) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.is_file("top_level.txt"): + try: + namespace_packages = dist.read_text("namespace_packages.txt") + except FileNotFoundError: + namespaces = [] + else: + namespaces = namespace_packages.splitlines(keepends=False) + for top_level_pkg in [ + p + for p in dist.read_text("top_level.txt").splitlines() + if p and p not in namespaces + ]: + path = os.path.join(dist_location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(f"{path}.py") + paths_to_remove.add(f"{path}.pyc") + paths_to_remove.add(f"{path}.pyo") + + elif dist.installed_by_distutils: + raise UninstallationError( + "Cannot uninstall {!r}. It is a distutils installed project " + "and thus we cannot accurately determine which files belong " + "to it which would lead to only a partial uninstall.".format( + dist.raw_name, + ) + ) + + elif dist.installed_as_egg: + # package installed by easy_install + # We cannot match on dist.egg_name because it can slightly vary + # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg + paths_to_remove.add(dist_location) + easy_install_egg = os.path.split(dist_location)[1] + easy_install_pth = os.path.join( + os.path.dirname(dist_location), + "easy-install.pth", + ) + paths_to_remove.add_pth(easy_install_pth, "./" + easy_install_egg) + + elif dist.installed_with_dist_info: + for path in uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # PEP 660 modern editable is handled in the ``.dist-info`` case + # above, so this only covers the setuptools-style editable. + with open(develop_egg_link) as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + assert link_pointer == dist_location, ( + f"Egg-link {link_pointer} does not match installed location of " + f"{dist.raw_name} (at {dist_location})" + ) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join( + os.path.dirname(develop_egg_link), "easy-install.pth" + ) + paths_to_remove.add_pth(easy_install_pth, dist_location) + + else: + logger.debug( + "Not sure how to uninstall: %s - Check: %s", + dist, + dist_location, + ) + + if dist.in_usersite: + bin_dir = get_bin_user() + else: + bin_dir = get_bin_prefix() + + # find distutils scripts= scripts + try: + for script in dist.iterdir("scripts"): + paths_to_remove.add(os.path.join(bin_dir, script.name)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, f"{script.name}.bat")) + except (FileNotFoundError, NotADirectoryError): + pass + + # find console_scripts and gui_scripts + def iter_scripts_to_remove( + dist: BaseDistribution, + bin_dir: str, + ) -> Iterator[str]: + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + yield from _script_names(bin_dir, entry_point.name, False) + elif entry_point.group == "gui_scripts": + yield from _script_names(bin_dir, entry_point.name, True) + + for s in iter_scripts_to_remove(dist, bin_dir): + paths_to_remove.add(s) + + return paths_to_remove + + +class UninstallPthEntries: + def __init__(self, pth_file: str) -> None: + self.file = pth_file + self.entries: Set[str] = set() + self._saved_lines: Optional[List[bytes]] = None + + def add(self, entry: str) -> None: + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + # os.path.splitdrive is used instead of os.path.isabs because isabs + # treats non-absolute paths with drive letter markings like c:foo\bar + # as absolute paths. It also does not recognize UNC paths if they don't + # have more than "\\sever\share". Valid examples: "\\server\share\" or + # "\\server\share\folder". + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace("\\", "/") + self.entries.add(entry) + + def remove(self) -> None: + logger.verbose("Removing pth entries from %s:", self.file) + + # If the file doesn't exist, log a warning and return + if not os.path.isfile(self.file): + logger.warning("Cannot remove entries from nonexistent file %s", self.file) + return + with open(self.file, "rb") as fh: + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + if any(b"\r\n" in line for line in lines): + endline = "\r\n" + else: + endline = "\n" + # handle missing trailing newline + if lines and not lines[-1].endswith(endline.encode("utf-8")): + lines[-1] = lines[-1] + endline.encode("utf-8") + for entry in self.entries: + try: + logger.verbose("Removing entry: %s", entry) + lines.remove((entry + endline).encode("utf-8")) + except ValueError: + pass + with open(self.file, "wb") as fh: + fh.writelines(lines) + + def rollback(self) -> bool: + if self._saved_lines is None: + logger.error("Cannot roll back changes to %s, none were made", self.file) + return False + logger.debug("Rolling %s back to previous state", self.file) + with open(self.file, "wb") as fh: + fh.writelines(self._saved_lines) + return True diff --git a/venv/Lib/site-packages/pip/_internal/resolution/__init__.py b/venv/Lib/site-packages/pip/_internal/resolution/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92a745bf12d91b8754dfd7f38589def5a9666948 GIT binary patch literal 198 zcmYk0O$x#=6ogahLWCZ~MeSZh1Vvqlh~n;H=+8r*wn@lK3LeQ5co)Hyw{T^;(t-Jg znbqhd8Hk|A=~Z<3?(nZDlvyyx0hKt2VYIyq+s!|GXg-D`qh;88<{TEf^bIPfgc5ZzsW#7WZvZK;$>oH*ss_Kqr4QJ_?+0!qcjvap=&B$(QktT{BhAaq&S>||o48nAZ85U1AHEHa1Y_TAvTQCT2jr?xAerPD z%X!Fi5sKUi9d6G==H_1L)v=TLc_VCa1{?x#!0WKF0B26N^H}2vcRYh96;g7OSc(3)CRv&mRFYWqbr(;biF0+Y7TXCqE>=vFtRvWMB9- z?_G1V(JS4=w&gitSl-z zO7)v+5WP-O>7932e1f5lW-ysWC+Q$ksfL|08J;C$P*ItddvQ9^fTZ&t+VLtY`rd%1 z-7U{eqduEKo8G*kzX$W3i_K*zc7He6&S|V@3$|-vHeL*jE0mzU2v-TZ0w36T(}Epo z4v#1@TVv2ft6q6x`NRcEKwHBNf{UmBP`JOl*KL|0jweYDaco*~oENgnY}}6HX_aL2 z3fiThXPj2+XMj<+~?v>SQo8Z;n~O+Yqx0odfgS{ z>+>?5jM2(5f6snZ;S-X7_mBLfSxTDK9PS&! Z1p9MAp4$bfHG)mn7HuxX8h7v3y RequirementSet: + raise NotImplementedError() + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + raise NotImplementedError() diff --git a/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py b/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7fc358d03e2bd5ee5fd81cec73052249011f8a7 GIT binary patch literal 205 zcmYk0K?=e!5JgkzLWCZ~MeSZh1Vvqlh~jRrr0GziZ4xp`p-1ur-bHZbEnJzd^ufH( zpV^E~k`W6$F0Z1`cdvhO(ff{k=r zU%*;ga_Pb9D+&iKsup�Fn+>DoJ~RaRrgMVIB_C|#aU TO!pkl8eRGt=lv%%2#VPkZmu~T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53860a5361c7ff42efd39ad93926e7c000b937d7 GIT binary patch literal 12292 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 None: + """ + Check whether the given Python version is compatible with a distribution's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + + :raises UnsupportedPythonVersion: When the given Python version isn't + compatible. + """ + # This idiosyncratically converts the SpecifierSet to str and let + # check_requires_python then parse it again into SpecifierSet. But this + # is the legacy resolver so I'm just not going to bother refactoring. + try: + requires_python = str(dist.requires_python) + except FileNotFoundError as e: + raise NoneMetadataError(dist, str(e)) + try: + is_compatible = check_requires_python( + requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier as exc: + logger.warning( + "Package %r has an invalid Requires-Python: %s", dist.raw_name, exc + ) + return + + if is_compatible: + return + + version = ".".join(map(str, version_info)) + if ignore_requires_python: + logger.debug( + "Ignoring failed Requires-Python check for package %r: %s not in %r", + dist.raw_name, + version, + requires_python, + ) + return + + raise UnsupportedPythonVersion( + "Package {!r} requires a different Python: {} not in {!r}".format( + dist.raw_name, version, requires_python + ) + ) + + +class Resolver(BaseResolver): + """Resolves which packages need to be installed/uninstalled to perform \ + the requested operation without breaking the requirements of any package. + """ + + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + self._py_version_info = py_version_info + + self.preparer = preparer + self.finder = finder + self.wheel_cache = wheel_cache + + self.upgrade_strategy = upgrade_strategy + self.force_reinstall = force_reinstall + self.ignore_dependencies = ignore_dependencies + self.ignore_installed = ignore_installed + self.ignore_requires_python = ignore_requires_python + self.use_user_site = use_user_site + self._make_install_req = make_install_req + + self._discovered_dependencies: DiscoveredDependencies = defaultdict(list) + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + """Resolve what operations need to be done + + As a side-effect of this method, the packages (and their dependencies) + are downloaded, unpacked and prepared for installation. This + preparation is done by ``pip.operations.prepare``. + + Once PyPI has static dependency metadata available, it would be + possible to move the preparation to become a step separated from + dependency resolution. + """ + requirement_set = RequirementSet(check_supported_wheels=check_supported_wheels) + for req in root_reqs: + if req.constraint: + check_invalid_constraint_type(req) + requirement_set.add_requirement(req) + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # _populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs: List[InstallRequirement] = [] + hash_errors = HashErrors() + for req in chain(requirement_set.all_requirements, discovered_reqs): + try: + discovered_reqs.extend(self._resolve_one(requirement_set, req)) + except HashError as exc: + exc.req = req + hash_errors.append(exc) + + if hash_errors: + raise hash_errors + + return requirement_set + + def _is_upgrade_allowed(self, req: InstallRequirement) -> bool: + if self.upgrade_strategy == "to-satisfy-only": + return False + elif self.upgrade_strategy == "eager": + return True + else: + assert self.upgrade_strategy == "only-if-needed" + return req.user_supplied or req.constraint + + def _set_req_to_reinstall(self, req: InstallRequirement) -> None: + """ + Set a requirement to be installed. + """ + # Don't uninstall the conflict if doing a user install and the + # conflict is not a user install. + if not self.use_user_site or req.satisfied_by.in_usersite: + req.should_reinstall = True + req.satisfied_by = None + + def _check_skip_installed( + self, req_to_install: InstallRequirement + ) -> Optional[str]: + """Check if req_to_install should be skipped. + + This will check if the req is installed, and whether we should upgrade + or reinstall it, taking into account all the relevant user options. + + After calling this req_to_install will only have satisfied_by set to + None if the req_to_install is to be upgraded/reinstalled etc. Any + other value will be a dist recording the current thing installed that + satisfies the requirement. + + Note that for vcs urls and the like we can't assess skipping in this + routine - we simply identify that we need to pull the thing down, + then later on it is pulled down and introspected to assess upgrade/ + reinstalls etc. + + :return: A text reason for why it was skipped, or None. + """ + if self.ignore_installed: + return None + + req_to_install.check_if_exists(self.use_user_site) + if not req_to_install.satisfied_by: + return None + + if self.force_reinstall: + self._set_req_to_reinstall(req_to_install) + return None + + if not self._is_upgrade_allowed(req_to_install): + if self.upgrade_strategy == "only-if-needed": + return "already satisfied, skipping upgrade" + return "already satisfied" + + # Check for the possibility of an upgrade. For link-based + # requirements we have to pull the tree down and inspect to assess + # the version #, so it's handled way down. + if not req_to_install.link: + try: + self.finder.find_requirement(req_to_install, upgrade=True) + except BestVersionAlreadyInstalled: + # Then the best version is installed. + return "already up-to-date" + except DistributionNotFound: + # No distribution found, so we squash the error. It will + # be raised later when we re-try later to do the install. + # Why don't we just raise here? + pass + + self._set_req_to_reinstall(req_to_install) + return None + + def _find_requirement_link(self, req: InstallRequirement) -> Optional[Link]: + upgrade = self._is_upgrade_allowed(req) + best_candidate = self.finder.find_requirement(req, upgrade) + if not best_candidate: + return None + + # Log a warning per PEP 592 if necessary before returning. + link = best_candidate.link + if link.is_yanked: + reason = link.yanked_reason or "" + msg = ( + # Mark this as a unicode string to prevent + # "UnicodeEncodeError: 'ascii' codec can't encode character" + # in Python 2 when the reason contains non-ascii characters. + "The candidate selected for download or install is a " + "yanked version: {candidate}\n" + "Reason for being yanked: {reason}" + ).format(candidate=best_candidate, reason=reason) + logger.warning(msg) + + return link + + def _populate_link(self, req: InstallRequirement) -> None: + """Ensure that if a link can be found for this, that it is found. + + Note that req.link may still be None - if the requirement is already + installed and not needed to be upgraded based on the return value of + _is_upgrade_allowed(). + + If preparer.require_hashes is True, don't use the wheel cache, because + cached wheels, always built locally, have different hashes than the + files downloaded from the index server and thus throw false hash + mismatches. Furthermore, cached wheels at present have undeterministic + contents due to file modification times. + """ + if req.link is None: + req.link = self._find_requirement_link(req) + + if self.wheel_cache is None or self.preparer.require_hashes: + return + cache_entry = self.wheel_cache.get_cache_entry( + link=req.link, + package_name=req.name, + supported_tags=get_supported(), + ) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + if req.link is req.original_link and cache_entry.persistent: + req.original_link_is_in_wheel_cache = True + req.link = cache_entry.link + + def _get_dist_for(self, req: InstallRequirement) -> BaseDistribution: + """Takes a InstallRequirement and returns a single AbstractDist \ + representing a prepared variant of the same. + """ + if req.editable: + return self.preparer.prepare_editable_requirement(req) + + # satisfied_by is only evaluated by calling _check_skip_installed, + # so it must be None here. + assert req.satisfied_by is None + skip_reason = self._check_skip_installed(req) + + if req.satisfied_by: + return self.preparer.prepare_installed_requirement(req, skip_reason) + + # We eagerly populate the link, since that's our "legacy" behavior. + self._populate_link(req) + dist = self.preparer.prepare_linked_requirement(req) + + # NOTE + # The following portion is for determining if a certain package is + # going to be re-installed/upgraded or not and reporting to the user. + # This should probably get cleaned up in a future refactor. + + # req.req is only avail after unpack for URL + # pkgs repeat check_if_exists to uninstall-on-upgrade + # (#14) + if not self.ignore_installed: + req.check_if_exists(self.use_user_site) + + if req.satisfied_by: + should_modify = ( + self.upgrade_strategy != "to-satisfy-only" + or self.force_reinstall + or self.ignore_installed + or req.link.scheme == "file" + ) + if should_modify: + self._set_req_to_reinstall(req) + else: + logger.info( + "Requirement already satisfied (use --upgrade to upgrade): %s", + req, + ) + return dist + + def _resolve_one( + self, + requirement_set: RequirementSet, + req_to_install: InstallRequirement, + ) -> List[InstallRequirement]: + """Prepare a single requirements file. + + :return: A list of additional InstallRequirements to also install. + """ + # Tell user what we are doing for this requirement: + # obtain (editable), skipping, processing (local url), collecting + # (remote url or package name) + if req_to_install.constraint or req_to_install.prepared: + return [] + + req_to_install.prepared = True + + # Parse and return dependencies + dist = self._get_dist_for(req_to_install) + # This will raise UnsupportedPythonVersion if the given Python + # version isn't compatible with the distribution's Requires-Python. + _check_dist_requires_python( + dist, + version_info=self._py_version_info, + ignore_requires_python=self.ignore_requires_python, + ) + + more_reqs: List[InstallRequirement] = [] + + def add_req(subreq: Requirement, extras_requested: Iterable[str]) -> None: + # This idiosyncratically converts the Requirement to str and let + # make_install_req then parse it again into Requirement. But this is + # the legacy resolver so I'm just not going to bother refactoring. + sub_install_req = self._make_install_req(str(subreq), req_to_install) + parent_req_name = req_to_install.name + to_scan_again, add_to_parent = requirement_set.add_requirement( + sub_install_req, + parent_req_name=parent_req_name, + extras_requested=extras_requested, + ) + if parent_req_name and add_to_parent: + self._discovered_dependencies[parent_req_name].append(add_to_parent) + more_reqs.extend(to_scan_again) + + with indent_log(): + # We add req_to_install before its dependencies, so that we + # can refer to it when adding dependencies. + if not requirement_set.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + # 'unnamed' requirements can only come from being directly + # provided by the user. + assert req_to_install.user_supplied + requirement_set.add_requirement(req_to_install, parent_req_name=None) + + if not self.ignore_dependencies: + if req_to_install.extras: + logger.debug( + "Installing extra requirements: %r", + ",".join(req_to_install.extras), + ) + missing_requested = sorted( + set(req_to_install.extras) - set(dist.iter_provided_extras()) + ) + for missing in missing_requested: + logger.warning( + "%s %s does not provide the extra '%s'", + dist.raw_name, + dist.version, + missing, + ) + + available_requested = sorted( + set(dist.iter_provided_extras()) & set(req_to_install.extras) + ) + for subreq in dist.iter_dependencies(available_requested): + add_req(subreq, extras_requested=available_requested) + + return more_reqs + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """Create the installation order. + + The installation order is topological - requirements are installed + before the requiring thing. We break cycles at an arbitrary point, + and make no other guarantees. + """ + # The current implementation, which we may change at any point + # installs the user specified things in the order given, except when + # dependencies must come earlier to achieve topological order. + order = [] + ordered_reqs: Set[InstallRequirement] = set() + + def schedule(req: InstallRequirement) -> None: + if req.satisfied_by or req in ordered_reqs: + return + if req.constraint: + return + ordered_reqs.add(req) + for dep in self._discovered_dependencies[req.name]: + schedule(dep) + order.append(req) + + for install_req in req_set.requirements.values(): + schedule(install_req) + return order diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cfdc72625c008af48ae4d1bdfd6741fa6e449b9 GIT binary patch literal 209 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0da96b7262fe53279e6f594a35c5bc6edc2d6b8c GIT binary patch literal 18363 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..591db5669ac02fc0d0aee310674e24f03c7719ff GIT binary patch literal 19217 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 BFlPV& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34c2627230169b64ccdee860bc60627c21dc6073 GIT binary patch literal 4869 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 MUmE9+widj90}V?z#{d8T literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46f71ac528cf4660b8cb4dcd8d3e3b710efe27d5 GIT binary patch literal 7711 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c873f2ba101bd0b6fa562dfd5abec4bd1d7f7f0d GIT binary patch literal 3178 zcmai0OK%iM5T4h**TxuQFp#8y5ZGYWi4+M1kqBZ0K|&6K{xcE^kDz(`x$U0q%MbyfA(oy^SC4Sc`<@JH{@ znqmA!o$1d(=LUXi0KpAzhDKy|Oq1GHXhn9%&f0e9M5RtCDtF3R-w7*GwNpjA#LHnV zs(0#9qth@AVTkBvbBJqUjgmHnLM?oyu_D0}uOsvV7pF{&s z2R-=M4)g{~^oEd3?nOkk*|!^+;V|S(dyfS3$W18PqrbBe3_?wa!X!o-nBMSWHdI3| zY_so^A&Y|khGwx4n4hqLOtu0pU?l)-AYv|Je+NsdB*Zpy7)nbd4?Q27($WiJja3p@ z@u4r69L73`M4LSnf^BF$P}f#g5T5p6XW+GiWM$ivF%YSh9%6y{eui&7k*q&N)?*)Y z@2;~QpxgFhO|HEj3IwRI9k^cxPN5WA)iPw4*=oCG%L@>G5J6 z<@R>maR$;wH-Z!7Lb;xH3!9f_>L?Mezcl1AxcFDEUh96RkizbRAKTGD2lwfCBmSG zW_}D1sI=!#&cC9Bl@XS6U?zwL=(TJtBT#;3hcJ}Tofepx9$Kx5a~ zGfN>5-&|uC6pns#y3$)^c?3(R4wb!}qh>kGcp-Iycs)tWNPpyMBz+b4L6IFp_tA?qnZ#4X49&hj#;-(nWK}_ftogdX~_nR*IH$YG=Xy6 zwC=i5!iOQXo38s9XCxny$6+g}xa9jJs4k`ip^=m#T3=DDtH{>kVy5%aedD9?8~CYT zAPUklL02cZ!%Ltk(3JpHaT~-%)a!K0nWiQxnYPU9ya8>MPc#m1@)>Aqd{)%?5z!di z&GDnqHu?Nm= zKqQnqFiW4&=@npz9g;Y+fo4hw)y~6wfLm?sJuAprG_>&?ocbcWs{q1U8y%ah+*aC? z8c;5^kg_Eh%TpwdlGsZ_Ru9#Q?WY)2bOdJ2(R+vOr|_DV0x;ZnCqw{Zto7<-)%-6!F z7*0NFPe99y=ui|{0TMip7#0whS>|Dk)Sg26F{bW^+nk<#l?+-CqqB!XowohouoejS z@|@2*5Wd6klylo_1(MTmL6SD6uFJGM@FYDX_J^(nUs*X4`AqV?YrV*xOnFJ3FM{du zJeYgeFkmmUBJ<;TULkyK68q|O{-A>|V3t+vyg9mf=xz?q$vE=eAzmtQPxD_9Xq>8o zaQ6Ytxb6mR;4S%{cKU8G3k8@#5Yro=z#%_5BvO^J6{RKzaputAjLqZ+uxlNWjLgrH zI0undT$d-l>&gqHBEpgMUX*lRF{L5b?6}tAYb7{jQE$bbC@8?*k3Oj6omy!z(<%w*M z-(7edpqcZpl5~NjP7m+q{7TAzGbnR@q>Ct9|1jWb^?H8AeMv7|MfBD*n&uoX%{i-T J&Djg*{sV4QA_D*b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfd549af2022693700d544fc609adc318de8a3e9 GIT binary patch literal 7467 zcmd5>TaOgS74F;2&TVIBFDzgT?geZZ2i7EUtk|*;HW-XU#)O4L8g0_)ovMW%dM;G; z5@;4F$`UD3;wY9PWRjtcxlUQR?sf6BHBgOo<_UG%4nBW zyNY&&O`|=n+B2-WqSa?!f)cH+N0pU6Z+Yt;7b`rd8&S2<6CKz0Le3g)hexw5x7+J_ zE!E|8(S?uZu6AYM`u+`mZ^IM3!@I#toz}CW;zhU1Jmv;Gnn_--^?G+V`cZjgepFtk zjRLh~i-;M05`p~*yA92yP*o|KdU4_gY>s z%1ses8nB%gJlGK3M#~uCh~BAOMA;@~+0-{R2j{<{z0eykbWuUy3nQ{5_t)cwCg#!i z>cPcNR&Plz3H-5d(eQyn~$!W^v{==x?;0rHs9HMud zs4wZ^+bP^H4=1)r35E~74_TJ9M4)YIZGB5$(ZmdzP&QKrB4$<>bLdhW$JGLw(Ujw0 zhT}}r*dnU%Nc#3_)~?-2i%8&-7Gru_?cX*)1@!0}1E*;=!XuAbzAL5D!^fu|CFi&# z9@jx)X=hYX3Kh@Cni~}zCmwW2RAd^CqvnW1*l&^-OcA^fW@8JuUlyG4>n z-Ss%89--+=sKP^Od(yYN_8QY7;`o{V9ELNtYi;08@Xz5w^h7EJC$OMU9}tP1`wIxXlA6Q7*?<9+Ak2NjaTHO4=uxUPYN0d6l+ycbuGA+J$_{ zh-J-q(vfc9NqBzdtUY`$q2xpwB@?sjv*IW|h)Ryr>9GwTiXT-R=iY|v56obS)&mr3 z;viLrsXB%#DnP6HTm%n=Nqsg|q!&WTf>c_ZL={Wz$9lu;E?BpqZy zo71ai)im-o-LPtU)vB6{rkc~j@YwVJfGl%-23S)AvdpsuAj_;mmIKj3g2kiIVgX_A z337qikRnfGcoQCuX&ag>eg$v0rT

      ;{Q_(@?DMewVew|39RT|*>_FIOU`(cN};u9S^0`^|mk+Ao`j)KKgb~_sOF4!@!cfyW^#S>3E4)%7~ z@vyhSPJqQzC%Yr;EwB?|Z-$)&i#vWh8Ru~$>=bO{`|oxt?DeqIV6TJS2^Qatw$ov+ zft>++HSA1Sd|%eig1r)UXV@!XXT##VlXe%_%V2kfy%aVF7T=$V9$YduxnsLuxG>W1$!3keAqK#7r>qY zn-9Ahc5m3zVfTSO4R#^ysj!P+SHUiZJq5M^=Ye+*Z6UT-!tM)u5^NDH-XF8Yuq$9o zU{8Qu0*iNl>{8g{VE2PP7IuGFysu#ofIS-aK-i^vHwum z!?3*!7QgrKq;r{WvfD{-Z{1D}PCee;>-GXKmnLiu$iSwNA|tsTm?QLm&gB PW{A`b@fXby4LAHBBIc?EvzoA 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 M{_q!`RM%Vce~503CIA2c literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c73828e82d32e7a63c5374b1539bfb1df4d2322 GIT binary patch literal 44739 zcmeHv2YeOP_H}YNB%$}-dk@v#K#HIU3fK^hffFH0GYQy5uy+&{d&l1ETzl`m8{62$ z-k!bu*V;GRJ15K~2}Ixby@dQ&d(S?7&A$7TnR^#BYE(Z1|AIZ=p1FKQX2u7+i2iGj zi;?(WeAtYP442_D=Vr{yoSvDPQJCQj|GPRXGMyEyE0`siEtumnkXp~x2R0CFD3(U9 zF)U3aPgAip6KpQnLhLOCTQMivX)P&j#MV~y#-g{ATHA}>LG+G-odi2eΜNl|0=< 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84a2a4c5c4e5e6d064e5f7ba306b80363e0470ff GIT binary patch literal 44580 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35065a603316e789cb11c8f9a3db3f5be5a92908 GIT binary patch literal 2251 zcmZ`)UvC>l5Z~SVle1$xZj!bsP+>p?EYTJoKq@K-NYXY^>mbKL$TD4>y&LD8^PRi5 zu88GIhy?YC?+`!c8}M0H;)$m|^Tq>ZX6=MTP4>LwnVsF)+1dHcrp02OK>OqApY81; zA%CH8wz(jD13mi`h#-Q-q)(faBF|#hcbZP$ZMu{^B*GEyArY>m2Ts!y-WI9)uP7|5 zQd3;r4b_&^->bAORh5|na#7OV(xH~7@FeW)Mv1gi2bP>`=mWOw2OyF(sUS@zXwwl3 zFUbzI`{tUikS~l07 z3}YRAx3A?nUq_XE1=__*tEzRFb#F?LcV<2N1Q<;;9g_prV`D1l?>2N}!W}_?x`GMT zWx#oYfE!K?f;At9Ntf?Lv6ku;TCMuV%Z3A~ln0UtIFFJ@b8fDRDAOux4|S9#JWRrP ze?8`)Ft%s3*G;FsXL@Lv_;nsSxqg&5q^1SspYPYgT%iDvnvln({)*3{EyBu^P zRd;bqA@$vU8@WvCfxY`XgMF0)2R?$H1wa<54_}Fn-n}@+cTP^*!CX3N$e)J!J_sja zK4KF>A+$Y5Eg(IWU3DE~cPb0GiZfwnH8lq|s=h*xrcw5k1gF(J4j@KU0mv~`fD)og zNXkgAAXx-*8+wLwN^qRK?Qp1fE;*Dn{>F*$RIAYc#+29OS9(lqa8paQRB!YLvBVpZ zVqK|JsU?^)b>Y+xQ<#OCCt+WHj)pKDT{imQ5;xAyztkJGj9Xnrat+BvI|rDvLr8*q zIO7J8OYie!<~i74V&fIy>9c=<*!!dh@U4-betZEC>9HecOvmg7na~%`*wJp!+hgiO z(D+Al0zlRapy$SH0`*Aed-DLR0wu{kJGTgPKZDWIZ1j#DU4YT2)^>S9Ubtg`BaCbU zRAC<&zapIb_`i6xgwoiZFiM{Jvk~w{I4cC{b@CgoIMGw#&ek)#ei?SY3YN!q<+TYx z?&$giZLjRPYJB1u$jeX&yxQo!TUiBuQ`l5?BVB<4kg7_kD{ZJ!ptDJ(HXHoO zy78wgjla>@LOFP_xm{c18x7-aHNLGk%u-iEaTzKFiD`=rZj2zXkTLF#lmcp(E%Ldw z^~U;YW25%aEOb-NWs(lNyIh1iG$m^%O?Dz7la4ftTaPyDjn(Z2Z#=56gYbB*>RITS z01pp-DMKSj_*td1I|P`{99^)GIK_qf7(Dt4diDj7GA#o>1L*GSfVq}Oien|ZNLLsG z4g00!6j+`XD1%u(8@+uAgz$)OKnG!GQyD77bl$QL+&HVosLW{z`_b~v|{*j6tSK%T)1qxa9` z0*1|cV~Vr4q9fxNmi-@ITL^6pL0mD2dS+nAhie~)RYzqR8`Xo$+B1__9i%8Ct=qv0_A|z zNKr1Wy3! z6PTF9RFISgl%j75E42gL__lD;LQpWiBZ_G$C>g&X%4sF27{4go)C)Z0mxP~IgR1e% zVlJHz=8azw*V2Vxfs!2(yRmmhVvo~PJE+BelhmufD3npBy4HBxl1-lN$U#2bmxDH! zkadp^x7RPD=I-<6H1eJvHFo!>p}(`acJJ=mG{)^02bW=Ef8+kfG;}wU?t^KBXAfVG z!wBlRvan&e)NL@F1T-dr6+7poLt`tp&nkg^P8&$I3_r*@ zDBuo2ErF>~$8zZGQ~d3_A8-CA!OB1Sb-D)%K{xuXlryGX#?nEY3-o=)-sLSZ-Z9tc z>V##)g@E2I!i{57L+=I}Y;PT)u%~6RL``O|eqGm)1hj6Zeu?U9H_tljV?ss_?W$g) zCJFqE_IMukCY+5<+V8e;wkL;BHFM}#PBJK=_M#z7_#}gRYPStTK1raq=B4cYB!fbm ca%Y$sj>t@xAB|h{82?X&dH literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07f07b2da544447ae86479d8ccbf47383cc4f893 GIT binary patch literal 18761 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 ZFgiwlN5kki`J4t)@^gC9)R4^6{{eOY>#G0& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8eb2ba140f43263e2a594679a45d344199b41dd2 GIT binary patch literal 3080 zcmZ`5O>Y~ym7Fh)Mjvq;ZxY8zArwhb70qVR7Fg_JTPJJFAFU&&mQtVtwZv#h%Oj68 z3TNcNu5^llMGyS}?aA)Vmp%8l5a^-UQ!Z_Ry|e|2^gWIp+q)G9eDnDDNIt$#CY6du zp#9~yf9?M34k2IR;A*pA@DzI51i%TWF&R*wQo;>x#>T+(O^sWzHL!hq;P}p<;1?(n zl-oVRoj=nzhVQNuUf}LA;jS>>n0}ELTcqy2g*{1~DsLDJ1kc8!SiGe&d*h%d)J>$bEMbY{Lb5?HQq_w|Ho(Q|c6K<5!XRd& zB#pA@Krk6(QKIJeg&46Q4Wo#~A_GZN<-|8Q^-XU0 z7B_vHTfW0@eL;4qR$b9AXuQb1W7l^@k(YS+n7pCB2Y7{7HD2O3_}nq^%lsyvhkxY@ zViCUz%3e@+zNL&@xo@9>1QGC&-mY$cU+(?skJ!$Z*P7vlpumJY#60im&jHCuMknNr zablbjN+y6ab7BCrCMH0e6M&9}1r1#diyC?pa#F%|oV3UpZPv@mPRAo5(yRYk@^I5K7IjQnSR<l}#TL1!!KcEEeY<53XqgX5*0Q8aqOV2&s9 z35vu;_9X2h27=}H{BU$A7eF;XhMpo)r4Drr`0%g4GCiuzu=9r(`V29~E*j$RP5LPe zuA7u=lX9a+GwZ}YB@4Mh(ZmIg(A5wO3O;5w-@bz#q>f=v-a;HrDIXxXi=Y5N&G#_y z#se1Sp&W@+F5>Jx1WO3+1307dJBWW5!9xU(5a4Fdpr>U3paEk}-`q2f9?ZJAHtx5s zjbg4q|N1t73F(7$2>Y~!BLn|(9;WK1gw#l65y1xtzK=jlbSW0j{sQ{f4gkk+scRfP zoF&k?S+x_-luOp}n5zmXY6Zv=oiKFjv z`Y|yG^CmW|D*-*w^zu2q4AjcCnd6ZaJA8?0J{z3u@WZ;yOSAV2Pcd?xZC?bOn|_b++tR#Reh9X))M*1}}C8*waA zwV&1=r9Z5_7PYu5L>^5~QQ$JG^a^13z@J*YCkobDwu3&&Y4+XJ`W+e=~& zo7ErWeo=+P)V5^-qOLSO08$lUu-p4YtwJ&$joC|M=Qoo9=tj{(1%oUwb5>@v^SgUP;@?L zjpp{t^$oVu*kbLCoknY8duvryF$Y{~L@mA8Zf&+Ve+8#(Z11#JUbe3=J8{zM3CPl1 zbjLmAu5E*;Y_koOL0?BLH5=>CX0C2-x7qVXy{OZPa=Y*xfOYbU60E!k=%TNjSZ5|3 z@5;NB@f#7ZtX(1aui?VF6uO2-EyzR=`0!P!=Rmirv<$dI=V;ZK#~Gsx6qkC?Eo!}U z4afEV?NS3i82{I`9OLNzth9j#UP~7k!suT*Y_|a67^vXz+yF;@2(Ag~EHnD%qR!lX zvV;L+_3b5s0S&l=8NFY~$K2evVU>k*kk9RA?{^DduK(@mcv!6yi?uId`2 zT&TM68p#gx%&(L0Q=CO%;hB*?0YVYSj9s~pE?2rzVeNYiJ;g|I;ad4uHOf`P^Qhr~ z7dUet=^ELrd#V&BaSTrch}Tr2X;tM~{g?RuQnrB7nd*?07;d_zN*6I*Y%lB5`{JbB Z&vFg?3~OGBNuqqeY%EaAL=7)^{{sg>_|^ab literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fcf401041363d61a7dd1776438d08e0a067200a GIT binary patch literal 1703 zcmZWo&2Aev5GHq5E6G~@SdkssFxp;qh#e=8>l8&%OLlC*e}&eDQ9>xO(lYYayOK(- zT%=G=4v<&qp$F%fH|UG>LZGLfdgu%E(sH3 zg#Lob?6B12TlI_I6!^%;A&M};7;GanB9oZfHbW~)kyK<8ThFa99c4%+%95;}r^1CO zM{?S>Lnq3Ud{iKXs7Q)YiIk#6vKW;~S;y1iqo_hE+RlVa(K1=qb~bz*RY?`2edI6r zxwpvAF??f^72k1DE&n%GCDyPkH!nTzvUr~l$D{A~u*1zEW8?_WLGw>otsa&8y#5e@oq4X!!i6o+{kojp7dMpeTkDsZ6 z5&&WI&jEnyb@dCNCW9(idroSrvJ7`rgv?xz8)}hs5(bhRYjMbO=neYaaoG2G;0?4k z?zxr)i1s;SS4ref53&f6BwZ5H0xN-+E2i#pX&GrjX?X_0~OWFFSXmtK(M0BK2` zBOddsKwKtnEw-W}EVY5~kTYYr~qlHuSlOviGt HgDd9$ZnnH& literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9567fa2009ad5616466465eda89398811a927e70 GIT binary patch literal 2474 zcmZ`5+fExtbY}MA^pd)Tci23w@#I%-X>;%9@!uGiT=9FZ9c0pTPI$FMqfHsu1!I zZl*sQHg{pDUt!{e)0iZ*Nh!iCW{K6b3~a@A;xrut+p(Jzngs(pv6mE^MFYFBpUgC8 zl2Wro$pgX*+&dxM6ZF_>mU*#GYW_I|HZ`gjw}){S{dAa#^@C8>MfODY+d=|nZoSW= zv|G=@Ol*gpgD4enx?F#>Ro{qICZqN+i~8xkG>i{bqyRUMxb=RTiC5XwaT$+;`gX9r zyRrGW#&ijJOi1g}n7Coo0jaKh)_A9$03b+{a?)gP$UfzivlFjr8Q9`Bz_xI>!`%~d zOq(viMs0u#yvY3%()9QYFTq-TLu}IY!3<^Xqj0&-9W=@0Ll}AEP~X9nk&KSWF*{{v zgp$n4>|@vmPUapHSPPkF*5Zhq`gntrI(bKTYBSnV!-0^p2t>3O1W_7gK_HQ^bn&d% zF@_FQA~6W`0-rK(5TbpL;Jt&mY9}}E`(y1$p+xqMYFmkTAJ$?JbmCB{Ab3aq-CzHq z^;8L|T6;sK!q!H=GfYI9sn&xidpK;j?nhE(x4-~B(aBmbMf$S!IBK_4l!;q|u=70Z z3e_4!gS7x~yf4=}5GGt?YpNHifr*vdgF{&Y;cmiE7~~b|QxAS6dSpT(H}CC<>L0iB zXYlx{okyf+6MP3HntT{h1sF!%yP&wSJw1ls z26=Y)nt}T4)EdzdTOnukwKamM?>Wzz{1PzkX@Nrq^gI~F5j(RXEBxLJo{`t~h;ard&qk2ZD`@g-+`5D7-08g8*&}-y^63x6+GmU+ z?s|^P_b=S>ZIF~(OK@wM0OaJ*2k*=+a|7;PVu1?f?pOk5Bv=617eThShW^qSLFjb( z3?*23Zp*h5-C(}}-YV=I-MFb%;V(~()q^Noh1~7S)i7IaLzM;GIoe-hoSmaL&ao1l zU%*%U1hN?%DYO-fRF>gf`zaLDKw%M<7?Il9+}qpT({9}Fc7@aq7wutJV#LW6oY0}# z-Pvsf+nd_WUut)&QOCV^fA{ImMzGb;PQ7t&uc7C=5XYUNlu#1_3{7CH{Q&AmzRe@v z-WP&P=vu(uh@y)dn~lx&#@5aQJ=^VPfk^wq?m@uAEYuZ4v!CuqT%;YL=jso4_ZsU@ z8$sjY-X?4wZ`2$)htxbY3CJiljUcbabr6-+9!e9S9j?Z@{0bg^4@2FDsYy^Yr|KKob@;LzD zY;sB=bTRyyfmmkJrxPa8-t|JhcUvXAb2qh;~ZnEwJDC;gE)oelpRh*5E@t_ zUtJ!zl8%UDXjzwzFm=|HSnO(Fz)*CNq&=>Dd1goq zeLa`E+{9Fp|BqoBBlJ0JGgEyqZ;ftm&`Gmbc`tN@+e!==Oq aLW#9^C%4Lvn1Kp|y7VcCZGKgH-TDt2;Z$A# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d7bc9d8243389a6f96955de6b47c8912f930094 GIT binary patch literal 5826 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 Dq#+_} literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40f5c16140307cf376d3c130140fcf6f8c136cd9 GIT binary patch literal 1983 zcmZ`)Pj4GV6rY*>lt{hu5t?H!J@YB}03#uRIOPNqH%`1a>!bHLoM`}Efs>)1=+A!T~XZ=i?aJwHp9;VV-uzk5U z7UzreCA?&(^WY9|Z}aWudVMQ`o3DJ%+|nITBKF(P z{SkiSED9N16JqDY5f`IgA0WE1 zb-%YhjwXprGu_)5W}A~i@4-;%Yz=Z7$tdeRmFd&o)^O0%!%VIn^rQX$p47dA;lV8q zYhtW!p;sZZTa#?}&VhZ`n+J!g2tj@bLkA!#v_yRx(&@@8+-{yH^?KaigQHh*n~{-| zBPb9(*W$$*XRwh}J%zq3WGX}rOI| zb22t^_L;htxg!tjmXh>cJ6nL+8!#KpXIJfP5oSNNH-pt;jn=MOu^Yj^IqI%Z`LUM89-1#Mt^D3+-$8)!mHOU3ni zr(WwkY;2f{-8)WqheD>2G|TPHW~)=%>F~~Gs}9E2dev1G^dAfkGYP(xp%GNTyj^Xq z|0)l6S4wdg&gdH;0%(*H4XAq|E3`t{4RULkkM5f#piUI)^dVI{kby_XxmO;=z3aqkS9Voq&;-m9`4k8-n7=e5oI zE&iz0{03%iqW&a}hx;-w|BIqmAHWS;Ff_IyCbNV|vFY2F!oP}UHAJez9^u@SI8Vl6 z5~Ch+{$$dR^A+_m+-Ld4wy+6+bbu zDZ~kuglc~(MFvkyCyaxl+T=k#2h0hq2GtfQ6XiI5#51Y_-|u0g6Cryrz#NWJ%vWo$ zM=%efHSEta%+eqhS<7G4_k(WGE!|+)^2$aS5)p@CxgCa;FbnF+D%WM>?qoE+xEj7W za?_q+Res{*9=cW50~#5nFdB&1WRz=#&X_(o5jtg3>Gri04>Z=Opu9krEJBKD+FlDs jIm +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +#Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 + +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py b/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py new file mode 100644 index 000000000..98f997012 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import Big5DistributionAnalysis +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self): + super(Big5Prober, self).__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "Big5" + + @property + def language(self): + return "Chinese" diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py b/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py new file mode 100644 index 000000000..c0395f4a4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO) +from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO) +from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO) +from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO) +from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO) + + +class CharDistributionAnalysis(object): + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self): + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order = None + self._table_size = None # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = None + self._done = None + self._total_chars = None + self._freq_chars = None + self.reset() + + def reset(self): + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char, char_len): + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self): + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = (self._freq_chars / ((self._total_chars - self._freq_chars) + * self.typical_distribution_ratio)) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self): + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, byte_str): + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCTWDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + else: + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCKRDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + else: + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(GB2312DistributionAnalysis, self).__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + else: + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(Big5DistributionAnalysis, self).__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + else: + return 157 * (first_char - 0xA4) + second_char - 0x40 + else: + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(SJISDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0x81) and (first_char <= 0x9F): + order = 188 * (first_char - 0x81) + elif (first_char >= 0xE0) and (first_char <= 0xEF): + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCJPDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xa1 + else: + return -1 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py new file mode 100644 index 000000000..5812cef0b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py @@ -0,0 +1,107 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState +from .charsetprober import CharSetProber + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter=None): + super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers = [] + self._best_guess_prober = None + + def reset(self): + super(CharSetGroupProber, self).reset() + self._active_num = 0 + for prober in self.probers: + if prober: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str): + for prober in self.probers: + if not prober: + continue + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + self._state = ProbingState.FOUND_IT + return self.state + elif state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self): + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + elif state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober: + continue + if not prober.active: + self.logger.debug('%s not active', prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py new file mode 100644 index 000000000..eac4e5986 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re + +from .enums import ProbingState + + +class CharSetProber(object): + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter=None): + self._state = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self): + self._state = ProbingState.DETECTING + + @property + def charset_name(self): + return None + + def feed(self, buf): + pass + + @property + def state(self): + return self._state + + def get_confidence(self): + return 0.0 + + @staticmethod + def filter_high_byte_only(buf): + buf = re.sub(b'([\x00-\x7F])+', b' ', buf) + return buf + + @staticmethod + def filter_international_words(buf): + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', + buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b'\x80': + last_char = b' ' + filtered.extend(last_char) + + return filtered + + @staticmethod + def filter_with_english_letters(buf): + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + Also retains English alphabet and high byte characters immediately + before occurrences of >. + + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + + for curr in range(len(buf)): + # Slice here to get bytes instead of an int with Python 3 + buf_char = buf[curr:curr + 1] + # Check if we're coming out of or entering an HTML tag + if buf_char == b'>': + in_tag = False + elif buf_char == b'<': + in_tag = True + + # If current character is not extended-ASCII and not alphabetic... + if buf_char < b'\x80' and not buf_char.isalpha(): + # ...and we're not in a tag + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b' ') + prev = curr + 1 + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py b/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py @@ -0,0 +1 @@ + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..937bebcd49f9b6c8cbacff4b05bdb8da10975022 GIT binary patch literal 197 zcmd1j<>g`kf*o;plNf>YV-N=!fCL?YxR?bv@#i>Qb zF+rup#fdR4`N^fZsd**EG47cq9;Hb!Zka{JCAtAc`B|ySB{5~Gd1Wy^nMpClnI);Z z1&PVoiRr1uF$I|g`td-yl>8$7&c5*8*M8+C!QMbN@-ngE7i*iM14Ox8=zP+Dq# zn3-9rqNyw8vVI2&yR){*B%@X0Z8q82kaRJVC>pfx`%Mb5ghix9|pD;SYRb=Da)@1oj&aLVW#vtB3}X zT?_K_so%B`3B^fW73bt=1e@7=$L zfjXk&s+?pDXK?yq@BWqem4ZG^u7ek`QO%PCaphI3@Wiz^uPStT7jy`zjRgFUaMViY~X8 zK-JPcCkvmsHy!aC=3T~%)d+L`O=oHF5t!K}dFph+`FGaaPq?Z@NmIB6mLDSS62KXm zE`n%WI!Z@?${Gf=nn2h_x)N4Ho=Ih98wC>HHQ?yaQjr!k&q^-)^chsyE>#shlIzn?jla#wP(34=;7d^>&6AATl*yy25t%5?a!8rRUIM*q=BHjfm=l}S;su6KcMO~JL7B`9>N(D#?!Y4dG>(R%^a!DUNd-ACJkgC%RMJ;Wp z&f>z5Qc6d8S{^qzg0T`Tl;$fs1Og`Xtg1y*vU(Ju#*m(-rJ}~9+vXCR7wC4)bPRv{ zhC~iJZ|Ml;f_p(a?LV$?`q&JGZl#PRShd*IkqO2#c*v5HxCUEAghq#>dNSccTsJeO zT92Y-@fC&MlPjqN^3OkaTOe|qF&D%ziU!+-i zA3gaV8h_g*;j7SdN$g%D;s2r_!Z>zgHv*mbUijTL-~U$p+U$&y#OyT%*j~Fs4m$gK zD@j;2P7)m_sNtw=JV}Hpzrr((;T-Y4X^gpppMdjvE6(e!!fGuZy!`_!J#YYim>Leh z^+N*qS7?3!nt!57*wWCrWqoNw+&u{!4;8Jd(oL*qNw+YyX!xh*hh N?8U!`-ig7d{|Ax(BbopJ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py b/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py new file mode 100644 index 000000000..6d6f93aab --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py @@ -0,0 +1,84 @@ +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + +from __future__ import absolute_import, print_function, unicode_literals + +import argparse +import sys + +from pip._vendor.chardet import __version__ +from pip._vendor.chardet.compat import PY2 +from pip._vendor.chardet.universaldetector import UniversalDetector + + +def description_of(lines, name='stdin'): + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + """ + u = UniversalDetector() + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if PY2: + name = name.decode(sys.getfilesystemencoding(), 'ignore') + if result['encoding']: + return '{}: {} with confidence {}'.format(name, result['encoding'], + result['confidence']) + else: + return '{}: no result'.format(name) + + +def main(argv=None): + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description="Takes one or more file paths and reports their detected \ + encodings") + parser.add_argument('input', + help='File whose encoding we would like to determine. \ + (default: stdin)', + type=argparse.FileType('rb'), nargs='*', + default=[sys.stdin if PY2 else sys.stdin.buffer]) + parser.add_argument('--version', action='version', + version='%(prog)s {}'.format(__version__)) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print("You are running chardetect interactively. Press " + + "CTRL-D twice at the start of a blank line to signal the " + + "end of your input. If you want help, run chardetect " + + "--help\n", file=sys.stderr) + print(description_of(f, f.name)) + + +if __name__ == '__main__': + main() diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py b/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py new file mode 100644 index 000000000..68fba44f1 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .enums import MachineState + + +class CodingStateMachine(object): + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + def __init__(self, sm): + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = None + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self): + self._curr_state = MachineState.START + + def next_state(self, c): + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model['class_table'][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model['char_len_table'][byte_class] + # from byte's class and state_table, we get its next state + curr_state = (self._curr_state * self._model['class_factor'] + + byte_class) + self._curr_state = self._model['state_table'][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self): + return self._curr_char_len + + def get_coding_state_machine(self): + return self._model['name'] + + @property + def language(self): + return self._model['language'] diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/compat.py b/venv/Lib/site-packages/pip/_vendor/chardet/compat.py new file mode 100644 index 000000000..8941572b3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/compat.py @@ -0,0 +1,36 @@ +######################## BEGIN LICENSE BLOCK ######################## +# Contributor(s): +# Dan Blanchard +# Ian Cordasco +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import sys + + +if sys.version_info < (3, 0): + PY2 = True + PY3 = False + string_types = (str, unicode) + text_type = unicode + iteritems = dict.iteritems +else: + PY2 = False + PY3 = True + string_types = (bytes, str) + text_type = str + iteritems = dict.items diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py b/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py new file mode 100644 index 000000000..efd793abc --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self): + super(CP949Prober, self).__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "CP949" + + @property + def language(self): + return "Korean" diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/enums.py b/venv/Lib/site-packages/pip/_vendor/chardet/enums.py new file mode 100644 index 000000000..045120722 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/enums.py @@ -0,0 +1,76 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + + +class InputState(object): + """ + This enum represents the different states a universal detector can be in. + """ + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(object): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(object): + """ + This enum represents the different states a prober can be in. + """ + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState(object): + """ + This enum represents the different states a state machine can be in. + """ + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood(object): + """ + This enum represents the likelihood of a character following the previous one. + """ + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls): + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory(object): + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py new file mode 100644 index 000000000..c70493f2b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py @@ -0,0 +1,101 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, ProbingState, MachineState +from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter=None): + super(EscCharSetProber, self).__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = None + self._detected_charset = None + self._detected_language = None + self._state = None + self.reset() + + def reset(self): + super(EscCharSetProber, self).reset() + for coding_sm in self.coding_sm: + if not coding_sm: + continue + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self): + return self._detected_charset + + @property + def language(self): + return self._detected_language + + def get_confidence(self): + if self._detected_charset: + return 0.99 + else: + return 0.00 + + def feed(self, byte_str): + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm or not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py b/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py new file mode 100644 index 000000000..0069523a0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py @@ -0,0 +1,246 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +HZ_CLS = ( +1,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,0,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,4,0,5,2,0, # 78 - 7f +1,1,1,1,1,1,1,1, # 80 - 87 +1,1,1,1,1,1,1,1, # 88 - 8f +1,1,1,1,1,1,1,1, # 90 - 97 +1,1,1,1,1,1,1,1, # 98 - 9f +1,1,1,1,1,1,1,1, # a0 - a7 +1,1,1,1,1,1,1,1, # a8 - af +1,1,1,1,1,1,1,1, # b0 - b7 +1,1,1,1,1,1,1,1, # b8 - bf +1,1,1,1,1,1,1,1, # c0 - c7 +1,1,1,1,1,1,1,1, # c8 - cf +1,1,1,1,1,1,1,1, # d0 - d7 +1,1,1,1,1,1,1,1, # d8 - df +1,1,1,1,1,1,1,1, # e0 - e7 +1,1,1,1,1,1,1,1, # e8 - ef +1,1,1,1,1,1,1,1, # f0 - f7 +1,1,1,1,1,1,1,1, # f8 - ff +) + +HZ_ST = ( +MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 + 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f + 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 + 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f +) + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL = {'class_table': HZ_CLS, + 'class_factor': 6, + 'state_table': HZ_ST, + 'char_len_table': HZ_CHAR_LEN_TABLE, + 'name': "HZ-GB-2312", + 'language': 'Chinese'} + +ISO2022CN_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,3,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,4,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022CN_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 + 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f +) + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, + 'class_factor': 9, + 'state_table': ISO2022CN_ST, + 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, + 'name': "ISO-2022-CN", + 'language': 'Chinese'} + +ISO2022JP_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,2,2, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,7,0,0,0, # 20 - 27 +3,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +6,0,4,0,8,0,0,0, # 40 - 47 +0,9,5,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022JP_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 +) + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, + 'class_factor': 10, + 'state_table': ISO2022JP_ST, + 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, + 'name': "ISO-2022-JP", + 'language': 'Japanese'} + +ISO2022KR_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,3,0,0,0, # 20 - 27 +0,4,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,5,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022KR_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 +) + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, + 'class_factor': 6, + 'state_table': ISO2022KR_ST, + 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, + 'name': "ISO-2022-KR", + 'language': 'Korean'} + + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py new file mode 100644 index 000000000..20ce8f7d1 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState, MachineState +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCJPDistributionAnalysis +from .jpcntx import EUCJPContextAnalysis +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self): + super(EUCJPProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self): + super(EUCJPProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return "EUC-JP" + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py b/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py new file mode 100644 index 000000000..b68078cb9 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py @@ -0,0 +1,195 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py new file mode 100644 index 000000000..345a060d0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCKRDistributionAnalysis +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self): + super(EUCKRProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-KR" + + @property + def language(self): + return "Korean" diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py b/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py new file mode 100644 index 000000000..ed7a995a3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py @@ -0,0 +1,387 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table , +EUCTW_TABLE_SIZE = 5376 + +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 +3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 +1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 + 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 +3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 +4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 +7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 + 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 + 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 + 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 +2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 +1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 +3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 + 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 +3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 +2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 + 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 +3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 +1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 +7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 + 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 +7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 +1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 + 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 + 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 +3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 +3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 + 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 +2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 +2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 + 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 + 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 +3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 +1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 +1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 +1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 +2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 + 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 +4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 +1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 +7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 +2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 + 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 + 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 + 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 + 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 +7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 + 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 +1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 + 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 + 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 +7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 +1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 + 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 +3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 +4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 +3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 + 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 + 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 +1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 +4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 +3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 +3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 +2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 +7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 +3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 +7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 +1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 +2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 +1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 + 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 +1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 +4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 +3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 + 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 + 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 + 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 +2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 +7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 +1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 +2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 +1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 +1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 +7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 +7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 +7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 +3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 +4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 +1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 +7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 +2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 +7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 +3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 +3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 +7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 +2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 +7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 + 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 +4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 +2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 +7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 +3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 +2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 +2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 + 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 +2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 +1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 +1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 +2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 +1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 +7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 +7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 +2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 +4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 +1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 +7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 + 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 +4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 + 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 +2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 + 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 +1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 +1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 + 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 +3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 +3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 +1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 +3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 +7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 +7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 +1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 +2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 +1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 +3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 +2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 +3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 +2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 +4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 +4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 +3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 + 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 +3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 + 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 +3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 +3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 +3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 +1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 +7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 + 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 +7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 +1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 + 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 +4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 +3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 + 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 +2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 +2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 +3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 +1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 +4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 +2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 +1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 +1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 +2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 +3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 +1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 +7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 +1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 +4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 +1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 + 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 +1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 +3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 +3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 +2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 +1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 +4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 + 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 +7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 +2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 +3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 +4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 + 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 +7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 +7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 +1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 +4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 +3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 +2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 +3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 +3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 +2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 +1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 +4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 +3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 +3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 +2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 +4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 +7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 +3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 +2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 +3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 +1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 +2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 +3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 +4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 +2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 +2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 +7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 +1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 +2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 +1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 +3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 +4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 +2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 +3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 +3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 +2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 +4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 +2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 +3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 +4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 +7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 +3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 + 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 +1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 +4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 +1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 +4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 +7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 + 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 +7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 +2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 +1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 +1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 +3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 + 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 + 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 + 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 +3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 +2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 + 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 +7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 +1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 +3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 +7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 +1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 +7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 +4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 +1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 +2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 +2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 +4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 + 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 + 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 +3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 +3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 +1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 +2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 +7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 +1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 +1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 +3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 + 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 +1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 +4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 +7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 +2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 +3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 + 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 +1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 +2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 +2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 +7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 +7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 +7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 +2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 +2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 +1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 +4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 +3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 +3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 +4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 +4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 +2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 +2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 +7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 +4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 +7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 +2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 +1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 +3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 +4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 +2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 + 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 +2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 +1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 +2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 +2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 +4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 +7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 +1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 +3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 +7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 +1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 +8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 +2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 +8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 +2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 +2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 +8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 +8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 +8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 + 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 +8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 +4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 +3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 +8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 +1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 +8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 + 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 +1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 + 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 +4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 +1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 +4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 +1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 + 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 +3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 +4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 +8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 + 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 +3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 + 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 +2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 +) + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py new file mode 100644 index 000000000..35669cc4d --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCTWDistributionAnalysis +from .mbcssm import EUCTW_SM_MODEL + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self): + super(EUCTWProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-TW" + + @property + def language(self): + return "Taiwan" diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py b/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py new file mode 100644 index 000000000..697837bd9 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py @@ -0,0 +1,283 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py b/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py new file mode 100644 index 000000000..8446d2dd9 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import GB2312DistributionAnalysis +from .mbcssm import GB2312_SM_MODEL + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self): + super(GB2312Prober, self).__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "GB2312" + + @property + def language(self): + return "Chinese" diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py new file mode 100644 index 000000000..b0e1bf492 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py @@ -0,0 +1,292 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + +class HebrewProber(CharSetProber): + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xea + NORMAL_KAF = 0xeb + FINAL_MEM = 0xed + NORMAL_MEM = 0xee + FINAL_NUN = 0xef + NORMAL_NUN = 0xf0 + FINAL_PE = 0xf3 + NORMAL_PE = 0xf4 + FINAL_TSADI = 0xf5 + NORMAL_TSADI = 0xf6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self): + super(HebrewProber, self).__init__() + self._final_char_logical_score = None + self._final_char_visual_score = None + self._prev = None + self._before_prev = None + self._logical_prober = None + self._visual_prober = None + self.reset() + + def reset(self): + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = ' ' + self._before_prev = ' ' + # These probers are owned by the group prober. + + def set_model_probers(self, logicalProber, visualProber): + self._logical_prober = logicalProber + self._visual_prober = visualProber + + def is_final(self, c): + return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, + self.FINAL_PE, self.FINAL_TSADI] + + def is_non_final(self, c): + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, + self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str): + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == ' ': + # We stand on a space - a word just ended + if self._before_prev != ' ': + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ((self._before_prev == ' ') and + (self.is_final(self._prev)) and (cur != ' ')): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self): + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = (self._logical_prober.get_confidence() + - self._visual_prober.get_confidence()) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self): + return 'Hebrew' + + @property + def state(self): + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and \ + (self._visual_prober.state == ProbingState.NOT_ME): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py b/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py new file mode 100644 index 000000000..83fc082b5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) + + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py b/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py new file mode 100644 index 000000000..20044e4bc --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +jp2CharContext = ( +(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), +(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), +(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), +(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), +(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), +(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), +(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), +(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), +(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), +(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), +(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), +(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), +(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), +(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), +(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), +(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), +(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), +(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), +(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), +(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), +(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), +(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), +(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), +(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), +(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), +(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), +(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), +(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), +(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), +(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), +(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), +(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), +(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), +(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), +(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), +(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), +(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), +(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), +(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), +(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), +(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), +(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), +(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), +(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), +(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), +(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), +(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), +(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), +(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), +(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), +(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), +(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), +(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), +(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), +(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), +(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), +(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), +(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), +(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), +(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), +(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), +(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), +(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), +(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), +(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), +(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), +(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), +(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), +(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), +(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), +(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), +(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), +(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), +(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), +) + +class JapaneseContextAnalysis(object): + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self): + self._total_rel = None + self._rel_sample = None + self._need_to_skip_char_num = None + self._last_char_order = None + self._done = None + self.reset() + + def reset(self): + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str, num_bytes): + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i:i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 + self._last_char_order = order + + def got_enough_data(self): + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self): + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + else: + return self.DONT_KNOW + + def get_order(self, byte_str): + return -1, 1 + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self): + super(SJISContextAnalysis, self).__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self): + return self._charset_name + + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len + + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py new file mode 100644 index 000000000..e963a5097 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py @@ -0,0 +1,4650 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +BULGARIAN_LANG_MODEL = { + 63: { # 'e' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 45: { # '\xad' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 31: { # 'А' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 2, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 0, # 'и' + 26: 2, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 32: { # 'Б' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 2, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 35: { # 'В' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 2, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 43: { # 'Г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 37: { # 'Д' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 2, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 44: { # 'Е' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 2, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 0, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 55: { # 'Ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 47: { # 'З' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 40: { # 'И' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 2, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 3, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 59: { # 'Й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 33: { # 'К' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 46: { # 'Л' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 38: { # 'М' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 36: { # 'Н' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 41: { # 'О' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 30: { # 'П' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 2, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 39: { # 'Р' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 28: { # 'С' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 3, # 'А' + 32: 2, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 34: { # 'Т' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 51: { # 'У' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 48: { # 'Ф' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 49: { # 'Х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 53: { # 'Ц' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 50: { # 'Ч' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 54: { # 'Ш' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 57: { # 'Щ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 61: { # 'Ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 60: { # 'Ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 2, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 56: { # 'Я' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 1: { # 'а' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 18: { # 'б' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 3, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 9: { # 'в' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 20: { # 'г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 11: { # 'д' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 3: { # 'е' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 23: { # 'ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 15: { # 'з' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 2: { # 'и' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 26: { # 'й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 12: { # 'к' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 10: { # 'л' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 3, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 14: { # 'м' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 6: { # 'н' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 2, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 4: { # 'о' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 13: { # 'п' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 7: { # 'р' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 3, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 8: { # 'с' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 5: { # 'т' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 19: { # 'у' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 2, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 29: { # 'ф' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 2, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 25: { # 'х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 22: { # 'ц' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 21: { # 'ч' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 27: { # 'ш' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 24: { # 'щ' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 17: { # 'ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 52: { # 'ь' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 42: { # 'ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 16: { # 'я' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 1, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 3, # 'х' + 22: 2, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 58: { # 'є' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 62: { # '№' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_5_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 194, # '\x80' + 129: 195, # '\x81' + 130: 196, # '\x82' + 131: 197, # '\x83' + 132: 198, # '\x84' + 133: 199, # '\x85' + 134: 200, # '\x86' + 135: 201, # '\x87' + 136: 202, # '\x88' + 137: 203, # '\x89' + 138: 204, # '\x8a' + 139: 205, # '\x8b' + 140: 206, # '\x8c' + 141: 207, # '\x8d' + 142: 208, # '\x8e' + 143: 209, # '\x8f' + 144: 210, # '\x90' + 145: 211, # '\x91' + 146: 212, # '\x92' + 147: 213, # '\x93' + 148: 214, # '\x94' + 149: 215, # '\x95' + 150: 216, # '\x96' + 151: 217, # '\x97' + 152: 218, # '\x98' + 153: 219, # '\x99' + 154: 220, # '\x9a' + 155: 221, # '\x9b' + 156: 222, # '\x9c' + 157: 223, # '\x9d' + 158: 224, # '\x9e' + 159: 225, # '\x9f' + 160: 81, # '\xa0' + 161: 226, # 'Ё' + 162: 227, # 'Ђ' + 163: 228, # 'Ѓ' + 164: 229, # 'Є' + 165: 230, # 'Ѕ' + 166: 105, # 'І' + 167: 231, # 'Ї' + 168: 232, # 'Ј' + 169: 233, # 'Љ' + 170: 234, # 'Њ' + 171: 235, # 'Ћ' + 172: 236, # 'Ќ' + 173: 45, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 31, # 'А' + 177: 32, # 'Б' + 178: 35, # 'В' + 179: 43, # 'Г' + 180: 37, # 'Д' + 181: 44, # 'Е' + 182: 55, # 'Ж' + 183: 47, # 'З' + 184: 40, # 'И' + 185: 59, # 'Й' + 186: 33, # 'К' + 187: 46, # 'Л' + 188: 38, # 'М' + 189: 36, # 'Н' + 190: 41, # 'О' + 191: 30, # 'П' + 192: 39, # 'Р' + 193: 28, # 'С' + 194: 34, # 'Т' + 195: 51, # 'У' + 196: 48, # 'Ф' + 197: 49, # 'Х' + 198: 53, # 'Ц' + 199: 50, # 'Ч' + 200: 54, # 'Ш' + 201: 57, # 'Щ' + 202: 61, # 'Ъ' + 203: 239, # 'Ы' + 204: 67, # 'Ь' + 205: 240, # 'Э' + 206: 60, # 'Ю' + 207: 56, # 'Я' + 208: 1, # 'а' + 209: 18, # 'б' + 210: 9, # 'в' + 211: 20, # 'г' + 212: 11, # 'д' + 213: 3, # 'е' + 214: 23, # 'ж' + 215: 15, # 'з' + 216: 2, # 'и' + 217: 26, # 'й' + 218: 12, # 'к' + 219: 10, # 'л' + 220: 14, # 'м' + 221: 6, # 'н' + 222: 4, # 'о' + 223: 13, # 'п' + 224: 7, # 'р' + 225: 8, # 'с' + 226: 5, # 'т' + 227: 19, # 'у' + 228: 29, # 'ф' + 229: 25, # 'х' + 230: 22, # 'ц' + 231: 21, # 'ч' + 232: 27, # 'ш' + 233: 24, # 'щ' + 234: 17, # 'ъ' + 235: 75, # 'ы' + 236: 52, # 'ь' + 237: 241, # 'э' + 238: 42, # 'ю' + 239: 16, # 'я' + 240: 62, # '№' + 241: 242, # 'ё' + 242: 243, # 'ђ' + 243: 244, # 'ѓ' + 244: 58, # 'є' + 245: 245, # 'ѕ' + 246: 98, # 'і' + 247: 246, # 'ї' + 248: 247, # 'ј' + 249: 248, # 'љ' + 250: 249, # 'њ' + 251: 250, # 'ћ' + 252: 251, # 'ќ' + 253: 91, # '§' + 254: 252, # 'ў' + 255: 253, # 'џ' +} + +ISO_8859_5_BULGARIAN_MODEL = SingleByteCharSetModel(charset_name='ISO-8859-5', + language='Bulgarian', + char_to_order_map=ISO_8859_5_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя') + +WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 206, # 'Ђ' + 129: 207, # 'Ѓ' + 130: 208, # '‚' + 131: 209, # 'ѓ' + 132: 210, # '„' + 133: 211, # '…' + 134: 212, # '†' + 135: 213, # '‡' + 136: 120, # '€' + 137: 214, # '‰' + 138: 215, # 'Љ' + 139: 216, # '‹' + 140: 217, # 'Њ' + 141: 218, # 'Ќ' + 142: 219, # 'Ћ' + 143: 220, # 'Џ' + 144: 221, # 'ђ' + 145: 78, # '‘' + 146: 64, # '’' + 147: 83, # '“' + 148: 121, # '”' + 149: 98, # '•' + 150: 117, # '–' + 151: 105, # '—' + 152: 222, # None + 153: 223, # '™' + 154: 224, # 'љ' + 155: 225, # '›' + 156: 226, # 'њ' + 157: 227, # 'ќ' + 158: 228, # 'ћ' + 159: 229, # 'џ' + 160: 88, # '\xa0' + 161: 230, # 'Ў' + 162: 231, # 'ў' + 163: 232, # 'Ј' + 164: 233, # '¤' + 165: 122, # 'Ґ' + 166: 89, # '¦' + 167: 106, # '§' + 168: 234, # 'Ё' + 169: 235, # '©' + 170: 236, # 'Є' + 171: 237, # '«' + 172: 238, # '¬' + 173: 45, # '\xad' + 174: 239, # '®' + 175: 240, # 'Ї' + 176: 73, # '°' + 177: 80, # '±' + 178: 118, # 'І' + 179: 114, # 'і' + 180: 241, # 'ґ' + 181: 242, # 'µ' + 182: 243, # '¶' + 183: 244, # '·' + 184: 245, # 'ё' + 185: 62, # '№' + 186: 58, # 'є' + 187: 246, # '»' + 188: 247, # 'ј' + 189: 248, # 'Ѕ' + 190: 249, # 'ѕ' + 191: 250, # 'ї' + 192: 31, # 'А' + 193: 32, # 'Б' + 194: 35, # 'В' + 195: 43, # 'Г' + 196: 37, # 'Д' + 197: 44, # 'Е' + 198: 55, # 'Ж' + 199: 47, # 'З' + 200: 40, # 'И' + 201: 59, # 'Й' + 202: 33, # 'К' + 203: 46, # 'Л' + 204: 38, # 'М' + 205: 36, # 'Н' + 206: 41, # 'О' + 207: 30, # 'П' + 208: 39, # 'Р' + 209: 28, # 'С' + 210: 34, # 'Т' + 211: 51, # 'У' + 212: 48, # 'Ф' + 213: 49, # 'Х' + 214: 53, # 'Ц' + 215: 50, # 'Ч' + 216: 54, # 'Ш' + 217: 57, # 'Щ' + 218: 61, # 'Ъ' + 219: 251, # 'Ы' + 220: 67, # 'Ь' + 221: 252, # 'Э' + 222: 60, # 'Ю' + 223: 56, # 'Я' + 224: 1, # 'а' + 225: 18, # 'б' + 226: 9, # 'в' + 227: 20, # 'г' + 228: 11, # 'д' + 229: 3, # 'е' + 230: 23, # 'ж' + 231: 15, # 'з' + 232: 2, # 'и' + 233: 26, # 'й' + 234: 12, # 'к' + 235: 10, # 'л' + 236: 14, # 'м' + 237: 6, # 'н' + 238: 4, # 'о' + 239: 13, # 'п' + 240: 7, # 'р' + 241: 8, # 'с' + 242: 5, # 'т' + 243: 19, # 'у' + 244: 29, # 'ф' + 245: 25, # 'х' + 246: 22, # 'ц' + 247: 21, # 'ч' + 248: 27, # 'ш' + 249: 24, # 'щ' + 250: 17, # 'ъ' + 251: 75, # 'ы' + 252: 52, # 'ь' + 253: 253, # 'э' + 254: 42, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_BULGARIAN_MODEL = SingleByteCharSetModel(charset_name='windows-1251', + language='Bulgarian', + char_to_order_map=WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py new file mode 100644 index 000000000..d99528ede --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py @@ -0,0 +1,4398 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +GREEK_LANG_MODEL = { + 60: { # 'e' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 55: { # 'o' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 58: { # 't' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 1, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 36: { # '·' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 61: { # 'Ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 1, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 1, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 46: { # 'Έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 1, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 54: { # 'Ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 31: { # 'Α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 2, # 'Β' + 43: 2, # 'Γ' + 41: 1, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 51: { # 'Β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 1, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 43: { # 'Γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 1, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 41: { # 'Δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 34: { # 'Ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 0, # 'ώ' + }, + 40: { # 'Η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 52: { # 'Θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 1, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 47: { # 'Ι' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 1, # 'Β' + 43: 1, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 1, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 44: { # 'Κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 1, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 53: { # 'Λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 1, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 38: { # 'Μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 2, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 2, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 49: { # 'Ν' + 60: 2, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 59: { # 'Ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 39: { # 'Ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 1, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 2, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 35: { # 'Π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 1, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 48: { # 'Ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 37: { # 'Σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 2, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 33: { # 'Τ' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 2, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 45: { # 'Υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 2, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 1, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 56: { # 'Φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 1, # 'ώ' + }, + 50: { # 'Χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 1, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 57: { # 'Ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 17: { # 'ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 18: { # 'έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 22: { # 'ή' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 15: { # 'ί' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 1: { # 'α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 3, # 'ζ' + 13: 1, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 29: { # 'β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 20: { # 'γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 21: { # 'δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 3: { # 'ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 32: { # 'ζ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 13: { # 'η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 25: { # 'θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 5: { # 'ι' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 11: { # 'κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 16: { # 'λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 1, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 10: { # 'μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 3, # 'φ' + 23: 0, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 6: { # 'ν' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 30: { # 'ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 1, # 'ώ' + }, + 4: { # 'ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 9: { # 'π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 8: { # 'ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 14: { # 'ς' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 7: { # 'σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 2: { # 'τ' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 12: { # 'υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 28: { # 'φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 1, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 23: { # 'χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 42: { # 'ψ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 24: { # 'ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 1, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 19: { # 'ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 1, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 26: { # 'ύ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 27: { # 'ώ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 1, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 1, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1253_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '€' + 129: 255, # None + 130: 255, # '‚' + 131: 255, # 'ƒ' + 132: 255, # '„' + 133: 255, # '…' + 134: 255, # '†' + 135: 255, # '‡' + 136: 255, # None + 137: 255, # '‰' + 138: 255, # None + 139: 255, # '‹' + 140: 255, # None + 141: 255, # None + 142: 255, # None + 143: 255, # None + 144: 255, # None + 145: 255, # '‘' + 146: 255, # '’' + 147: 255, # '“' + 148: 255, # '”' + 149: 255, # '•' + 150: 255, # '–' + 151: 255, # '—' + 152: 255, # None + 153: 255, # '™' + 154: 255, # None + 155: 255, # '›' + 156: 255, # None + 157: 255, # None + 158: 255, # None + 159: 255, # None + 160: 253, # '\xa0' + 161: 233, # '΅' + 162: 61, # 'Ά' + 163: 253, # '£' + 164: 253, # '¤' + 165: 253, # '¥' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # None + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # '®' + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 253, # 'µ' + 182: 253, # '¶' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +WINDOWS_1253_GREEK_MODEL = SingleByteCharSetModel(charset_name='windows-1253', + language='Greek', + char_to_order_map=WINDOWS_1253_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet='ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ') + +ISO_8859_7_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '\x80' + 129: 255, # '\x81' + 130: 255, # '\x82' + 131: 255, # '\x83' + 132: 255, # '\x84' + 133: 255, # '\x85' + 134: 255, # '\x86' + 135: 255, # '\x87' + 136: 255, # '\x88' + 137: 255, # '\x89' + 138: 255, # '\x8a' + 139: 255, # '\x8b' + 140: 255, # '\x8c' + 141: 255, # '\x8d' + 142: 255, # '\x8e' + 143: 255, # '\x8f' + 144: 255, # '\x90' + 145: 255, # '\x91' + 146: 255, # '\x92' + 147: 255, # '\x93' + 148: 255, # '\x94' + 149: 255, # '\x95' + 150: 255, # '\x96' + 151: 255, # '\x97' + 152: 255, # '\x98' + 153: 255, # '\x99' + 154: 255, # '\x9a' + 155: 255, # '\x9b' + 156: 255, # '\x9c' + 157: 255, # '\x9d' + 158: 255, # '\x9e' + 159: 255, # '\x9f' + 160: 253, # '\xa0' + 161: 233, # '‘' + 162: 90, # '’' + 163: 253, # '£' + 164: 253, # '€' + 165: 253, # '₯' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # 'ͺ' + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # None + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 248, # '΅' + 182: 61, # 'Ά' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +ISO_8859_7_GREEK_MODEL = SingleByteCharSetModel(charset_name='ISO-8859-7', + language='Greek', + char_to_order_map=ISO_8859_7_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet='ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py new file mode 100644 index 000000000..484c652a4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py @@ -0,0 +1,4383 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HEBREW_LANG_MODEL = { + 50: { # 'a' + 50: 0, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 0, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 60: { # 'c' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 61: { # 'd' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 42: { # 'e' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 2, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 53: { # 'i' + 50: 1, # 'a' + 60: 2, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 0, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 56: { # 'l' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 2, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 54: { # 'n' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 49: { # 'o' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 51: { # 'r' + 50: 2, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 43: { # 's' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 2, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 44: { # 't' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 63: { # 'u' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 34: { # '\xa0' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 2, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 55: { # '´' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 48: { # '¼' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 39: { # '½' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 57: { # '¾' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 30: { # 'ְ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 59: { # 'ֱ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 41: { # 'ֲ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 33: { # 'ִ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 37: { # 'ֵ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 1, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 36: { # 'ֶ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 2, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 31: { # 'ַ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 29: { # 'ָ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 35: { # 'ֹ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 62: { # 'ֻ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 28: { # 'ּ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 3, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 3, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 2, # 'ׁ' + 45: 1, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 1, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 38: { # 'ׁ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 45: { # 'ׂ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 9: { # 'א' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 2, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 8: { # 'ב' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 1, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 20: { # 'ג' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 16: { # 'ד' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 3: { # 'ה' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 2: { # 'ו' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 3, # 'ֹ' + 62: 0, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 24: { # 'ז' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 1, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 14: { # 'ח' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 1, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 22: { # 'ט' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 1, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 2, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 1: { # 'י' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 25: { # 'ך' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 15: { # 'כ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 4: { # 'ל' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 11: { # 'ם' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 6: { # 'מ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 23: { # 'ן' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 12: { # 'נ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 19: { # 'ס' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 2, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 13: { # 'ע' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 1, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 26: { # 'ף' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 18: { # 'פ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 27: { # 'ץ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 21: { # 'צ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 1, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 0, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 17: { # 'ק' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 7: { # 'ר' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 10: { # 'ש' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 3, # 'ׁ' + 45: 2, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 5: { # 'ת' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 1, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 32: { # '–' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 52: { # '’' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 47: { # '“' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 46: { # '”' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 58: { # '†' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 2, # '†' + 40: 0, # '…' + }, + 40: { # '…' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1255_HEBREW_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 69, # 'A' + 66: 91, # 'B' + 67: 79, # 'C' + 68: 80, # 'D' + 69: 92, # 'E' + 70: 89, # 'F' + 71: 97, # 'G' + 72: 90, # 'H' + 73: 68, # 'I' + 74: 111, # 'J' + 75: 112, # 'K' + 76: 82, # 'L' + 77: 73, # 'M' + 78: 95, # 'N' + 79: 85, # 'O' + 80: 78, # 'P' + 81: 121, # 'Q' + 82: 86, # 'R' + 83: 71, # 'S' + 84: 67, # 'T' + 85: 102, # 'U' + 86: 107, # 'V' + 87: 84, # 'W' + 88: 114, # 'X' + 89: 103, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 50, # 'a' + 98: 74, # 'b' + 99: 60, # 'c' + 100: 61, # 'd' + 101: 42, # 'e' + 102: 76, # 'f' + 103: 70, # 'g' + 104: 64, # 'h' + 105: 53, # 'i' + 106: 105, # 'j' + 107: 93, # 'k' + 108: 56, # 'l' + 109: 65, # 'm' + 110: 54, # 'n' + 111: 49, # 'o' + 112: 66, # 'p' + 113: 110, # 'q' + 114: 51, # 'r' + 115: 43, # 's' + 116: 44, # 't' + 117: 63, # 'u' + 118: 81, # 'v' + 119: 77, # 'w' + 120: 98, # 'x' + 121: 75, # 'y' + 122: 108, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 124, # '€' + 129: 202, # None + 130: 203, # '‚' + 131: 204, # 'ƒ' + 132: 205, # '„' + 133: 40, # '…' + 134: 58, # '†' + 135: 206, # '‡' + 136: 207, # 'ˆ' + 137: 208, # '‰' + 138: 209, # None + 139: 210, # '‹' + 140: 211, # None + 141: 212, # None + 142: 213, # None + 143: 214, # None + 144: 215, # None + 145: 83, # '‘' + 146: 52, # '’' + 147: 47, # '“' + 148: 46, # '”' + 149: 72, # '•' + 150: 32, # '–' + 151: 94, # '—' + 152: 216, # '˜' + 153: 113, # '™' + 154: 217, # None + 155: 109, # '›' + 156: 218, # None + 157: 219, # None + 158: 220, # None + 159: 221, # None + 160: 34, # '\xa0' + 161: 116, # '¡' + 162: 222, # '¢' + 163: 118, # '£' + 164: 100, # '₪' + 165: 223, # '¥' + 166: 224, # '¦' + 167: 117, # '§' + 168: 119, # '¨' + 169: 104, # '©' + 170: 125, # '×' + 171: 225, # '«' + 172: 226, # '¬' + 173: 87, # '\xad' + 174: 99, # '®' + 175: 227, # '¯' + 176: 106, # '°' + 177: 122, # '±' + 178: 123, # '²' + 179: 228, # '³' + 180: 55, # '´' + 181: 229, # 'µ' + 182: 230, # '¶' + 183: 101, # '·' + 184: 231, # '¸' + 185: 232, # '¹' + 186: 120, # '÷' + 187: 233, # '»' + 188: 48, # '¼' + 189: 39, # '½' + 190: 57, # '¾' + 191: 234, # '¿' + 192: 30, # 'ְ' + 193: 59, # 'ֱ' + 194: 41, # 'ֲ' + 195: 88, # 'ֳ' + 196: 33, # 'ִ' + 197: 37, # 'ֵ' + 198: 36, # 'ֶ' + 199: 31, # 'ַ' + 200: 29, # 'ָ' + 201: 35, # 'ֹ' + 202: 235, # None + 203: 62, # 'ֻ' + 204: 28, # 'ּ' + 205: 236, # 'ֽ' + 206: 126, # '־' + 207: 237, # 'ֿ' + 208: 238, # '׀' + 209: 38, # 'ׁ' + 210: 45, # 'ׂ' + 211: 239, # '׃' + 212: 240, # 'װ' + 213: 241, # 'ױ' + 214: 242, # 'ײ' + 215: 243, # '׳' + 216: 127, # '״' + 217: 244, # None + 218: 245, # None + 219: 246, # None + 220: 247, # None + 221: 248, # None + 222: 249, # None + 223: 250, # None + 224: 9, # 'א' + 225: 8, # 'ב' + 226: 20, # 'ג' + 227: 16, # 'ד' + 228: 3, # 'ה' + 229: 2, # 'ו' + 230: 24, # 'ז' + 231: 14, # 'ח' + 232: 22, # 'ט' + 233: 1, # 'י' + 234: 25, # 'ך' + 235: 15, # 'כ' + 236: 4, # 'ל' + 237: 11, # 'ם' + 238: 6, # 'מ' + 239: 23, # 'ן' + 240: 12, # 'נ' + 241: 19, # 'ס' + 242: 13, # 'ע' + 243: 26, # 'ף' + 244: 18, # 'פ' + 245: 27, # 'ץ' + 246: 21, # 'צ' + 247: 17, # 'ק' + 248: 7, # 'ר' + 249: 10, # 'ש' + 250: 5, # 'ת' + 251: 251, # None + 252: 252, # None + 253: 128, # '\u200e' + 254: 96, # '\u200f' + 255: 253, # None +} + +WINDOWS_1255_HEBREW_MODEL = SingleByteCharSetModel(charset_name='windows-1255', + language='Hebrew', + char_to_order_map=WINDOWS_1255_HEBREW_CHAR_TO_ORDER, + language_model=HEBREW_LANG_MODEL, + typical_positive_ratio=0.984004, + keep_ascii_letters=False, + alphabet='אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py new file mode 100644 index 000000000..bbc5cda64 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py @@ -0,0 +1,4650 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HUNGARIAN_LANG_MODEL = { + 28: { # 'A' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 2, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 40: { # 'B' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 3, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 54: { # 'C' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 3, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 45: { # 'D' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 32: { # 'E' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 50: { # 'F' + 28: 1, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 0, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 49: { # 'G' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 38: { # 'H' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 39: { # 'I' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 53: { # 'J' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 36: { # 'K' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 2, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 41: { # 'L' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 34: { # 'M' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 35: { # 'N' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 47: { # 'O' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 46: { # 'P' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 43: { # 'R' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 2, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 2, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 33: { # 'S' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 3, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 37: { # 'T' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 57: { # 'U' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 48: { # 'V' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 55: { # 'Y' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 52: { # 'Z' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 2: { # 'a' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 18: { # 'b' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 26: { # 'c' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 17: { # 'd' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 1: { # 'e' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 2, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 27: { # 'f' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 3, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 12: { # 'g' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 20: { # 'h' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 9: { # 'i' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 1, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 22: { # 'j' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 7: { # 'k' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 3, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 6: { # 'l' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 3, # 'ő' + 56: 1, # 'ű' + }, + 13: { # 'm' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 4: { # 'n' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 1, # 'x' + 16: 3, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 8: { # 'o' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 23: { # 'p' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 10: { # 'r' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 2, # 'ű' + }, + 5: { # 's' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 3: { # 't' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 3, # 'ő' + 56: 2, # 'ű' + }, + 21: { # 'u' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 19: { # 'v' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 62: { # 'x' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 16: { # 'y' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 11: { # 'z' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 51: { # 'Á' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 44: { # 'É' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 61: { # 'Í' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 58: { # 'Ó' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 2, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 59: { # 'Ö' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 60: { # 'Ú' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 2, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 63: { # 'Ü' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 14: { # 'á' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 15: { # 'é' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 30: { # 'í' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 25: { # 'ó' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 24: { # 'ö' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 31: { # 'ú' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 3, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 29: { # 'ü' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 42: { # 'ő' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 56: { # 'ű' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 72, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 161, # '€' + 129: 162, # None + 130: 163, # '‚' + 131: 164, # None + 132: 165, # '„' + 133: 166, # '…' + 134: 167, # '†' + 135: 168, # '‡' + 136: 169, # None + 137: 170, # '‰' + 138: 171, # 'Š' + 139: 172, # '‹' + 140: 173, # 'Ś' + 141: 174, # 'Ť' + 142: 175, # 'Ž' + 143: 176, # 'Ź' + 144: 177, # None + 145: 178, # '‘' + 146: 179, # '’' + 147: 180, # '“' + 148: 78, # '”' + 149: 181, # '•' + 150: 69, # '–' + 151: 182, # '—' + 152: 183, # None + 153: 184, # '™' + 154: 185, # 'š' + 155: 186, # '›' + 156: 187, # 'ś' + 157: 188, # 'ť' + 158: 189, # 'ž' + 159: 190, # 'ź' + 160: 191, # '\xa0' + 161: 192, # 'ˇ' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ą' + 166: 197, # '¦' + 167: 76, # '§' + 168: 198, # '¨' + 169: 199, # '©' + 170: 200, # 'Ş' + 171: 201, # '«' + 172: 202, # '¬' + 173: 203, # '\xad' + 174: 204, # '®' + 175: 205, # 'Ż' + 176: 81, # '°' + 177: 206, # '±' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'µ' + 182: 211, # '¶' + 183: 212, # '·' + 184: 213, # '¸' + 185: 214, # 'ą' + 186: 215, # 'ş' + 187: 216, # '»' + 188: 217, # 'Ľ' + 189: 218, # '˝' + 190: 219, # 'ľ' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 83, # 'Â' + 195: 222, # 'Ă' + 196: 80, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 70, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 84, # 'ŕ' + 225: 14, # 'á' + 226: 75, # 'â' + 227: 242, # 'ă' + 228: 71, # 'ä' + 229: 82, # 'ĺ' + 230: 243, # 'ć' + 231: 73, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 85, # 'ę' + 235: 79, # 'ë' + 236: 86, # 'ě' + 237: 30, # 'í' + 238: 77, # 'î' + 239: 87, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 74, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +WINDOWS_1250_HUNGARIAN_MODEL = SingleByteCharSetModel(charset_name='windows-1250', + language='Hungarian', + char_to_order_map=WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet='ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű') + +ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 71, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 159, # '\x80' + 129: 160, # '\x81' + 130: 161, # '\x82' + 131: 162, # '\x83' + 132: 163, # '\x84' + 133: 164, # '\x85' + 134: 165, # '\x86' + 135: 166, # '\x87' + 136: 167, # '\x88' + 137: 168, # '\x89' + 138: 169, # '\x8a' + 139: 170, # '\x8b' + 140: 171, # '\x8c' + 141: 172, # '\x8d' + 142: 173, # '\x8e' + 143: 174, # '\x8f' + 144: 175, # '\x90' + 145: 176, # '\x91' + 146: 177, # '\x92' + 147: 178, # '\x93' + 148: 179, # '\x94' + 149: 180, # '\x95' + 150: 181, # '\x96' + 151: 182, # '\x97' + 152: 183, # '\x98' + 153: 184, # '\x99' + 154: 185, # '\x9a' + 155: 186, # '\x9b' + 156: 187, # '\x9c' + 157: 188, # '\x9d' + 158: 189, # '\x9e' + 159: 190, # '\x9f' + 160: 191, # '\xa0' + 161: 192, # 'Ą' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ľ' + 166: 197, # 'Ś' + 167: 75, # '§' + 168: 198, # '¨' + 169: 199, # 'Š' + 170: 200, # 'Ş' + 171: 201, # 'Ť' + 172: 202, # 'Ź' + 173: 203, # '\xad' + 174: 204, # 'Ž' + 175: 205, # 'Ż' + 176: 79, # '°' + 177: 206, # 'ą' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'ľ' + 182: 211, # 'ś' + 183: 212, # 'ˇ' + 184: 213, # '¸' + 185: 214, # 'š' + 186: 215, # 'ş' + 187: 216, # 'ť' + 188: 217, # 'ź' + 189: 218, # '˝' + 190: 219, # 'ž' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 81, # 'Â' + 195: 222, # 'Ă' + 196: 78, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 69, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 82, # 'ŕ' + 225: 14, # 'á' + 226: 74, # 'â' + 227: 242, # 'ă' + 228: 70, # 'ä' + 229: 80, # 'ĺ' + 230: 243, # 'ć' + 231: 72, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 83, # 'ę' + 235: 77, # 'ë' + 236: 84, # 'ě' + 237: 30, # 'í' + 238: 76, # 'î' + 239: 85, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 73, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +ISO_8859_2_HUNGARIAN_MODEL = SingleByteCharSetModel(charset_name='ISO-8859-2', + language='Hungarian', + char_to_order_map=ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet='ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py new file mode 100644 index 000000000..5594452b5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py @@ -0,0 +1,5718 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +RUSSIAN_LANG_MODEL = { + 37: { # 'А' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 44: { # 'Б' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 33: { # 'В' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 46: { # 'Г' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 41: { # 'Д' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 3, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 48: { # 'Е' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 56: { # 'Ж' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 0, # 'я' + }, + 51: { # 'З' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 42: { # 'И' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 60: { # 'Й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 36: { # 'К' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 49: { # 'Л' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 38: { # 'М' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 31: { # 'Н' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 34: { # 'О' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 2, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 2, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 35: { # 'П' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 1, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 45: { # 'Р' + 37: 2, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 32: { # 'С' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 2, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 40: { # 'Т' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 52: { # 'У' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 53: { # 'Ф' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 55: { # 'Х' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 58: { # 'Ц' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 50: { # 'Ч' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 57: { # 'Ш' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 63: { # 'Щ' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 62: { # 'Ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 61: { # 'Ь' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 47: { # 'Э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 59: { # 'Ю' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 43: { # 'Я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 3: { # 'а' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 21: { # 'б' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 10: { # 'в' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 19: { # 'г' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 13: { # 'д' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 2: { # 'е' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 24: { # 'ж' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 20: { # 'з' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 4: { # 'и' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 23: { # 'й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 11: { # 'к' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 8: { # 'л' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 12: { # 'м' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 5: { # 'н' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 1: { # 'о' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 15: { # 'п' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 9: { # 'р' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 7: { # 'с' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 6: { # 'т' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 14: { # 'у' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 2, # 'я' + }, + 39: { # 'ф' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 26: { # 'х' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 28: { # 'ц' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 22: { # 'ч' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 25: { # 'ш' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 29: { # 'щ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 2, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 54: { # 'ъ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 18: { # 'ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 1, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 17: { # 'ь' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 0, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 30: { # 'э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 27: { # 'ю' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 16: { # 'я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 2, # 'я' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +IBM866_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 3, # 'а' + 161: 21, # 'б' + 162: 10, # 'в' + 163: 19, # 'г' + 164: 13, # 'д' + 165: 2, # 'е' + 166: 24, # 'ж' + 167: 20, # 'з' + 168: 4, # 'и' + 169: 23, # 'й' + 170: 11, # 'к' + 171: 8, # 'л' + 172: 12, # 'м' + 173: 5, # 'н' + 174: 1, # 'о' + 175: 15, # 'п' + 176: 191, # '░' + 177: 192, # '▒' + 178: 193, # '▓' + 179: 194, # '│' + 180: 195, # '┤' + 181: 196, # '╡' + 182: 197, # '╢' + 183: 198, # '╖' + 184: 199, # '╕' + 185: 200, # '╣' + 186: 201, # '║' + 187: 202, # '╗' + 188: 203, # '╝' + 189: 204, # '╜' + 190: 205, # '╛' + 191: 206, # '┐' + 192: 207, # '└' + 193: 208, # '┴' + 194: 209, # '┬' + 195: 210, # '├' + 196: 211, # '─' + 197: 212, # '┼' + 198: 213, # '╞' + 199: 214, # '╟' + 200: 215, # '╚' + 201: 216, # '╔' + 202: 217, # '╩' + 203: 218, # '╦' + 204: 219, # '╠' + 205: 220, # '═' + 206: 221, # '╬' + 207: 222, # '╧' + 208: 223, # '╨' + 209: 224, # '╤' + 210: 225, # '╥' + 211: 226, # '╙' + 212: 227, # '╘' + 213: 228, # '╒' + 214: 229, # '╓' + 215: 230, # '╫' + 216: 231, # '╪' + 217: 232, # '┘' + 218: 233, # '┌' + 219: 234, # '█' + 220: 235, # '▄' + 221: 236, # '▌' + 222: 237, # '▐' + 223: 238, # '▀' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # 'Ё' + 241: 68, # 'ё' + 242: 240, # 'Є' + 243: 241, # 'є' + 244: 242, # 'Ї' + 245: 243, # 'ї' + 246: 244, # 'Ў' + 247: 245, # 'ў' + 248: 246, # '°' + 249: 247, # '∙' + 250: 248, # '·' + 251: 249, # '√' + 252: 250, # '№' + 253: 251, # '¤' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM866_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='IBM866', + language='Russian', + char_to_order_map=IBM866_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + +WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'Ђ' + 129: 192, # 'Ѓ' + 130: 193, # '‚' + 131: 194, # 'ѓ' + 132: 195, # '„' + 133: 196, # '…' + 134: 197, # '†' + 135: 198, # '‡' + 136: 199, # '€' + 137: 200, # '‰' + 138: 201, # 'Љ' + 139: 202, # '‹' + 140: 203, # 'Њ' + 141: 204, # 'Ќ' + 142: 205, # 'Ћ' + 143: 206, # 'Џ' + 144: 207, # 'ђ' + 145: 208, # '‘' + 146: 209, # '’' + 147: 210, # '“' + 148: 211, # '”' + 149: 212, # '•' + 150: 213, # '–' + 151: 214, # '—' + 152: 215, # None + 153: 216, # '™' + 154: 217, # 'љ' + 155: 218, # '›' + 156: 219, # 'њ' + 157: 220, # 'ќ' + 158: 221, # 'ћ' + 159: 222, # 'џ' + 160: 223, # '\xa0' + 161: 224, # 'Ў' + 162: 225, # 'ў' + 163: 226, # 'Ј' + 164: 227, # '¤' + 165: 228, # 'Ґ' + 166: 229, # '¦' + 167: 230, # '§' + 168: 231, # 'Ё' + 169: 232, # '©' + 170: 233, # 'Є' + 171: 234, # '«' + 172: 235, # '¬' + 173: 236, # '\xad' + 174: 237, # '®' + 175: 238, # 'Ї' + 176: 239, # '°' + 177: 240, # '±' + 178: 241, # 'І' + 179: 242, # 'і' + 180: 243, # 'ґ' + 181: 244, # 'µ' + 182: 245, # '¶' + 183: 246, # '·' + 184: 68, # 'ё' + 185: 247, # '№' + 186: 248, # 'є' + 187: 249, # '»' + 188: 250, # 'ј' + 189: 251, # 'Ѕ' + 190: 252, # 'ѕ' + 191: 253, # 'ї' + 192: 37, # 'А' + 193: 44, # 'Б' + 194: 33, # 'В' + 195: 46, # 'Г' + 196: 41, # 'Д' + 197: 48, # 'Е' + 198: 56, # 'Ж' + 199: 51, # 'З' + 200: 42, # 'И' + 201: 60, # 'Й' + 202: 36, # 'К' + 203: 49, # 'Л' + 204: 38, # 'М' + 205: 31, # 'Н' + 206: 34, # 'О' + 207: 35, # 'П' + 208: 45, # 'Р' + 209: 32, # 'С' + 210: 40, # 'Т' + 211: 52, # 'У' + 212: 53, # 'Ф' + 213: 55, # 'Х' + 214: 58, # 'Ц' + 215: 50, # 'Ч' + 216: 57, # 'Ш' + 217: 63, # 'Щ' + 218: 70, # 'Ъ' + 219: 62, # 'Ы' + 220: 61, # 'Ь' + 221: 47, # 'Э' + 222: 59, # 'Ю' + 223: 43, # 'Я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='windows-1251', + language='Russian', + char_to_order_map=WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + +IBM855_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'ђ' + 129: 192, # 'Ђ' + 130: 193, # 'ѓ' + 131: 194, # 'Ѓ' + 132: 68, # 'ё' + 133: 195, # 'Ё' + 134: 196, # 'є' + 135: 197, # 'Є' + 136: 198, # 'ѕ' + 137: 199, # 'Ѕ' + 138: 200, # 'і' + 139: 201, # 'І' + 140: 202, # 'ї' + 141: 203, # 'Ї' + 142: 204, # 'ј' + 143: 205, # 'Ј' + 144: 206, # 'љ' + 145: 207, # 'Љ' + 146: 208, # 'њ' + 147: 209, # 'Њ' + 148: 210, # 'ћ' + 149: 211, # 'Ћ' + 150: 212, # 'ќ' + 151: 213, # 'Ќ' + 152: 214, # 'ў' + 153: 215, # 'Ў' + 154: 216, # 'џ' + 155: 217, # 'Џ' + 156: 27, # 'ю' + 157: 59, # 'Ю' + 158: 54, # 'ъ' + 159: 70, # 'Ъ' + 160: 3, # 'а' + 161: 37, # 'А' + 162: 21, # 'б' + 163: 44, # 'Б' + 164: 28, # 'ц' + 165: 58, # 'Ц' + 166: 13, # 'д' + 167: 41, # 'Д' + 168: 2, # 'е' + 169: 48, # 'Е' + 170: 39, # 'ф' + 171: 53, # 'Ф' + 172: 19, # 'г' + 173: 46, # 'Г' + 174: 218, # '«' + 175: 219, # '»' + 176: 220, # '░' + 177: 221, # '▒' + 178: 222, # '▓' + 179: 223, # '│' + 180: 224, # '┤' + 181: 26, # 'х' + 182: 55, # 'Х' + 183: 4, # 'и' + 184: 42, # 'И' + 185: 225, # '╣' + 186: 226, # '║' + 187: 227, # '╗' + 188: 228, # '╝' + 189: 23, # 'й' + 190: 60, # 'Й' + 191: 229, # '┐' + 192: 230, # '└' + 193: 231, # '┴' + 194: 232, # '┬' + 195: 233, # '├' + 196: 234, # '─' + 197: 235, # '┼' + 198: 11, # 'к' + 199: 36, # 'К' + 200: 236, # '╚' + 201: 237, # '╔' + 202: 238, # '╩' + 203: 239, # '╦' + 204: 240, # '╠' + 205: 241, # '═' + 206: 242, # '╬' + 207: 243, # '¤' + 208: 8, # 'л' + 209: 49, # 'Л' + 210: 12, # 'м' + 211: 38, # 'М' + 212: 5, # 'н' + 213: 31, # 'Н' + 214: 1, # 'о' + 215: 34, # 'О' + 216: 15, # 'п' + 217: 244, # '┘' + 218: 245, # '┌' + 219: 246, # '█' + 220: 247, # '▄' + 221: 35, # 'П' + 222: 16, # 'я' + 223: 248, # '▀' + 224: 43, # 'Я' + 225: 9, # 'р' + 226: 45, # 'Р' + 227: 7, # 'с' + 228: 32, # 'С' + 229: 6, # 'т' + 230: 40, # 'Т' + 231: 14, # 'у' + 232: 52, # 'У' + 233: 24, # 'ж' + 234: 56, # 'Ж' + 235: 10, # 'в' + 236: 33, # 'В' + 237: 17, # 'ь' + 238: 61, # 'Ь' + 239: 249, # '№' + 240: 250, # '\xad' + 241: 18, # 'ы' + 242: 62, # 'Ы' + 243: 20, # 'з' + 244: 51, # 'З' + 245: 25, # 'ш' + 246: 57, # 'Ш' + 247: 30, # 'э' + 248: 47, # 'Э' + 249: 29, # 'щ' + 250: 63, # 'Щ' + 251: 22, # 'ч' + 252: 50, # 'Ч' + 253: 251, # '§' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM855_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='IBM855', + language='Russian', + char_to_order_map=IBM855_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + +KOI8_R_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '─' + 129: 192, # '│' + 130: 193, # '┌' + 131: 194, # '┐' + 132: 195, # '└' + 133: 196, # '┘' + 134: 197, # '├' + 135: 198, # '┤' + 136: 199, # '┬' + 137: 200, # '┴' + 138: 201, # '┼' + 139: 202, # '▀' + 140: 203, # '▄' + 141: 204, # '█' + 142: 205, # '▌' + 143: 206, # '▐' + 144: 207, # '░' + 145: 208, # '▒' + 146: 209, # '▓' + 147: 210, # '⌠' + 148: 211, # '■' + 149: 212, # '∙' + 150: 213, # '√' + 151: 214, # '≈' + 152: 215, # '≤' + 153: 216, # '≥' + 154: 217, # '\xa0' + 155: 218, # '⌡' + 156: 219, # '°' + 157: 220, # '²' + 158: 221, # '·' + 159: 222, # '÷' + 160: 223, # '═' + 161: 224, # '║' + 162: 225, # '╒' + 163: 68, # 'ё' + 164: 226, # '╓' + 165: 227, # '╔' + 166: 228, # '╕' + 167: 229, # '╖' + 168: 230, # '╗' + 169: 231, # '╘' + 170: 232, # '╙' + 171: 233, # '╚' + 172: 234, # '╛' + 173: 235, # '╜' + 174: 236, # '╝' + 175: 237, # '╞' + 176: 238, # '╟' + 177: 239, # '╠' + 178: 240, # '╡' + 179: 241, # 'Ё' + 180: 242, # '╢' + 181: 243, # '╣' + 182: 244, # '╤' + 183: 245, # '╥' + 184: 246, # '╦' + 185: 247, # '╧' + 186: 248, # '╨' + 187: 249, # '╩' + 188: 250, # '╪' + 189: 251, # '╫' + 190: 252, # '╬' + 191: 253, # '©' + 192: 27, # 'ю' + 193: 3, # 'а' + 194: 21, # 'б' + 195: 28, # 'ц' + 196: 13, # 'д' + 197: 2, # 'е' + 198: 39, # 'ф' + 199: 19, # 'г' + 200: 26, # 'х' + 201: 4, # 'и' + 202: 23, # 'й' + 203: 11, # 'к' + 204: 8, # 'л' + 205: 12, # 'м' + 206: 5, # 'н' + 207: 1, # 'о' + 208: 15, # 'п' + 209: 16, # 'я' + 210: 9, # 'р' + 211: 7, # 'с' + 212: 6, # 'т' + 213: 14, # 'у' + 214: 24, # 'ж' + 215: 10, # 'в' + 216: 17, # 'ь' + 217: 18, # 'ы' + 218: 20, # 'з' + 219: 25, # 'ш' + 220: 30, # 'э' + 221: 29, # 'щ' + 222: 22, # 'ч' + 223: 54, # 'ъ' + 224: 59, # 'Ю' + 225: 37, # 'А' + 226: 44, # 'Б' + 227: 58, # 'Ц' + 228: 41, # 'Д' + 229: 48, # 'Е' + 230: 53, # 'Ф' + 231: 46, # 'Г' + 232: 55, # 'Х' + 233: 42, # 'И' + 234: 60, # 'Й' + 235: 36, # 'К' + 236: 49, # 'Л' + 237: 38, # 'М' + 238: 31, # 'Н' + 239: 34, # 'О' + 240: 35, # 'П' + 241: 43, # 'Я' + 242: 45, # 'Р' + 243: 32, # 'С' + 244: 40, # 'Т' + 245: 52, # 'У' + 246: 56, # 'Ж' + 247: 33, # 'В' + 248: 61, # 'Ь' + 249: 62, # 'Ы' + 250: 51, # 'З' + 251: 57, # 'Ш' + 252: 47, # 'Э' + 253: 63, # 'Щ' + 254: 50, # 'Ч' + 255: 70, # 'Ъ' +} + +KOI8_R_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='KOI8-R', + language='Russian', + char_to_order_map=KOI8_R_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + +MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 191, # '†' + 161: 192, # '°' + 162: 193, # 'Ґ' + 163: 194, # '£' + 164: 195, # '§' + 165: 196, # '•' + 166: 197, # '¶' + 167: 198, # 'І' + 168: 199, # '®' + 169: 200, # '©' + 170: 201, # '™' + 171: 202, # 'Ђ' + 172: 203, # 'ђ' + 173: 204, # '≠' + 174: 205, # 'Ѓ' + 175: 206, # 'ѓ' + 176: 207, # '∞' + 177: 208, # '±' + 178: 209, # '≤' + 179: 210, # '≥' + 180: 211, # 'і' + 181: 212, # 'µ' + 182: 213, # 'ґ' + 183: 214, # 'Ј' + 184: 215, # 'Є' + 185: 216, # 'є' + 186: 217, # 'Ї' + 187: 218, # 'ї' + 188: 219, # 'Љ' + 189: 220, # 'љ' + 190: 221, # 'Њ' + 191: 222, # 'њ' + 192: 223, # 'ј' + 193: 224, # 'Ѕ' + 194: 225, # '¬' + 195: 226, # '√' + 196: 227, # 'ƒ' + 197: 228, # '≈' + 198: 229, # '∆' + 199: 230, # '«' + 200: 231, # '»' + 201: 232, # '…' + 202: 233, # '\xa0' + 203: 234, # 'Ћ' + 204: 235, # 'ћ' + 205: 236, # 'Ќ' + 206: 237, # 'ќ' + 207: 238, # 'ѕ' + 208: 239, # '–' + 209: 240, # '—' + 210: 241, # '“' + 211: 242, # '”' + 212: 243, # '‘' + 213: 244, # '’' + 214: 245, # '÷' + 215: 246, # '„' + 216: 247, # 'Ў' + 217: 248, # 'ў' + 218: 249, # 'Џ' + 219: 250, # 'џ' + 220: 251, # '№' + 221: 252, # 'Ё' + 222: 68, # 'ё' + 223: 16, # 'я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 255, # '€' +} + +MACCYRILLIC_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='MacCyrillic', + language='Russian', + char_to_order_map=MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + +ISO_8859_5_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '\x80' + 129: 192, # '\x81' + 130: 193, # '\x82' + 131: 194, # '\x83' + 132: 195, # '\x84' + 133: 196, # '\x85' + 134: 197, # '\x86' + 135: 198, # '\x87' + 136: 199, # '\x88' + 137: 200, # '\x89' + 138: 201, # '\x8a' + 139: 202, # '\x8b' + 140: 203, # '\x8c' + 141: 204, # '\x8d' + 142: 205, # '\x8e' + 143: 206, # '\x8f' + 144: 207, # '\x90' + 145: 208, # '\x91' + 146: 209, # '\x92' + 147: 210, # '\x93' + 148: 211, # '\x94' + 149: 212, # '\x95' + 150: 213, # '\x96' + 151: 214, # '\x97' + 152: 215, # '\x98' + 153: 216, # '\x99' + 154: 217, # '\x9a' + 155: 218, # '\x9b' + 156: 219, # '\x9c' + 157: 220, # '\x9d' + 158: 221, # '\x9e' + 159: 222, # '\x9f' + 160: 223, # '\xa0' + 161: 224, # 'Ё' + 162: 225, # 'Ђ' + 163: 226, # 'Ѓ' + 164: 227, # 'Є' + 165: 228, # 'Ѕ' + 166: 229, # 'І' + 167: 230, # 'Ї' + 168: 231, # 'Ј' + 169: 232, # 'Љ' + 170: 233, # 'Њ' + 171: 234, # 'Ћ' + 172: 235, # 'Ќ' + 173: 236, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 37, # 'А' + 177: 44, # 'Б' + 178: 33, # 'В' + 179: 46, # 'Г' + 180: 41, # 'Д' + 181: 48, # 'Е' + 182: 56, # 'Ж' + 183: 51, # 'З' + 184: 42, # 'И' + 185: 60, # 'Й' + 186: 36, # 'К' + 187: 49, # 'Л' + 188: 38, # 'М' + 189: 31, # 'Н' + 190: 34, # 'О' + 191: 35, # 'П' + 192: 45, # 'Р' + 193: 32, # 'С' + 194: 40, # 'Т' + 195: 52, # 'У' + 196: 53, # 'Ф' + 197: 55, # 'Х' + 198: 58, # 'Ц' + 199: 50, # 'Ч' + 200: 57, # 'Ш' + 201: 63, # 'Щ' + 202: 70, # 'Ъ' + 203: 62, # 'Ы' + 204: 61, # 'Ь' + 205: 47, # 'Э' + 206: 59, # 'Ю' + 207: 43, # 'Я' + 208: 3, # 'а' + 209: 21, # 'б' + 210: 10, # 'в' + 211: 19, # 'г' + 212: 13, # 'д' + 213: 2, # 'е' + 214: 24, # 'ж' + 215: 20, # 'з' + 216: 4, # 'и' + 217: 23, # 'й' + 218: 11, # 'к' + 219: 8, # 'л' + 220: 12, # 'м' + 221: 5, # 'н' + 222: 1, # 'о' + 223: 15, # 'п' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # '№' + 241: 68, # 'ё' + 242: 240, # 'ђ' + 243: 241, # 'ѓ' + 244: 242, # 'є' + 245: 243, # 'ѕ' + 246: 244, # 'і' + 247: 245, # 'ї' + 248: 246, # 'ј' + 249: 247, # 'љ' + 250: 248, # 'њ' + 251: 249, # 'ћ' + 252: 250, # 'ќ' + 253: 251, # '§' + 254: 252, # 'ў' + 255: 255, # 'џ' +} + +ISO_8859_5_RUSSIAN_MODEL = SingleByteCharSetModel(charset_name='ISO-8859-5', + language='Russian', + char_to_order_map=ISO_8859_5_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet='ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py new file mode 100644 index 000000000..9a37db573 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py @@ -0,0 +1,4383 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +THAI_LANG_MODEL = { + 5: { # 'ก' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 3, # 'ฎ' + 57: 2, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 1, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 30: { # 'ข' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 2, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 24: { # 'ค' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 3, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 8: { # 'ง' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 1, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 2, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 3, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 26: { # 'จ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 52: { # 'ฉ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 34: { # 'ช' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 1, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 51: { # 'ซ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 47: { # 'ญ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 58: { # 'ฎ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 57: { # 'ฏ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 49: { # 'ฐ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 53: { # 'ฑ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 55: { # 'ฒ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 43: { # 'ณ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 3, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 3, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 20: { # 'ด' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 2, # '็' + 6: 1, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 19: { # 'ต' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 2, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 44: { # 'ถ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 14: { # 'ท' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 3, # 'ศ' + 46: 1, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 48: { # 'ธ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 2, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 3: { # 'น' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 1, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 3, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 3, # 'โ' + 29: 3, # 'ใ' + 33: 3, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 17: { # 'บ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 25: { # 'ป' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 1, # 'ฎ' + 57: 3, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 1, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 2, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 39: { # 'ผ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 0, # 'ุ' + 35: 3, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 62: { # 'ฝ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 2, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 31: { # 'พ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 3, # 'ื' + 32: 1, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 0, # '่' + 7: 1, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 54: { # 'ฟ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 45: { # 'ภ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 9: { # 'ม' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 2, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 16: { # 'ย' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 2: { # 'ร' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 3, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 3, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 3, # 'เ' + 28: 3, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 61: { # 'ฤ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 2, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 15: { # 'ล' + 5: 2, # 'ก' + 30: 3, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 2, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 12: { # 'ว' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 42: { # 'ศ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 3, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 46: { # 'ษ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 2, # 'ฎ' + 57: 1, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 18: { # 'ส' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 3, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 21: { # 'ห' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 4: { # 'อ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 63: { # 'ฯ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 22: { # 'ะ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 10: { # 'ั' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 3, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 1: { # 'า' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 1, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 2, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 36: { # 'ำ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 23: { # 'ิ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 3, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 13: { # 'ี' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 40: { # 'ึ' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 27: { # 'ื' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 32: { # 'ุ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 1, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 35: { # 'ู' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 11: { # 'เ' + 5: 3, # 'ก' + 30: 3, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 3, # 'ฉ' + 34: 3, # 'ช' + 51: 2, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 3, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 28: { # 'แ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 3, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 41: { # 'โ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 29: { # 'ใ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 33: { # 'ไ' + 5: 1, # 'ก' + 30: 2, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 50: { # 'ๆ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 37: { # '็' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 6: { # '่' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 7: { # '้' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 38: { # '์' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 56: { # '๑' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 1, # '๕' + }, + 59: { # '๒' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 1, # '๑' + 59: 1, # '๒' + 60: 3, # '๕' + }, + 60: { # '๕' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 0, # '๕' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +TIS_620_THAI_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 182, # 'A' + 66: 106, # 'B' + 67: 107, # 'C' + 68: 100, # 'D' + 69: 183, # 'E' + 70: 184, # 'F' + 71: 185, # 'G' + 72: 101, # 'H' + 73: 94, # 'I' + 74: 186, # 'J' + 75: 187, # 'K' + 76: 108, # 'L' + 77: 109, # 'M' + 78: 110, # 'N' + 79: 111, # 'O' + 80: 188, # 'P' + 81: 189, # 'Q' + 82: 190, # 'R' + 83: 89, # 'S' + 84: 95, # 'T' + 85: 112, # 'U' + 86: 113, # 'V' + 87: 191, # 'W' + 88: 192, # 'X' + 89: 193, # 'Y' + 90: 194, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 64, # 'a' + 98: 72, # 'b' + 99: 73, # 'c' + 100: 114, # 'd' + 101: 74, # 'e' + 102: 115, # 'f' + 103: 116, # 'g' + 104: 102, # 'h' + 105: 81, # 'i' + 106: 201, # 'j' + 107: 117, # 'k' + 108: 90, # 'l' + 109: 103, # 'm' + 110: 78, # 'n' + 111: 82, # 'o' + 112: 96, # 'p' + 113: 202, # 'q' + 114: 91, # 'r' + 115: 79, # 's' + 116: 84, # 't' + 117: 104, # 'u' + 118: 105, # 'v' + 119: 97, # 'w' + 120: 98, # 'x' + 121: 92, # 'y' + 122: 203, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 209, # '\x80' + 129: 210, # '\x81' + 130: 211, # '\x82' + 131: 212, # '\x83' + 132: 213, # '\x84' + 133: 88, # '\x85' + 134: 214, # '\x86' + 135: 215, # '\x87' + 136: 216, # '\x88' + 137: 217, # '\x89' + 138: 218, # '\x8a' + 139: 219, # '\x8b' + 140: 220, # '\x8c' + 141: 118, # '\x8d' + 142: 221, # '\x8e' + 143: 222, # '\x8f' + 144: 223, # '\x90' + 145: 224, # '\x91' + 146: 99, # '\x92' + 147: 85, # '\x93' + 148: 83, # '\x94' + 149: 225, # '\x95' + 150: 226, # '\x96' + 151: 227, # '\x97' + 152: 228, # '\x98' + 153: 229, # '\x99' + 154: 230, # '\x9a' + 155: 231, # '\x9b' + 156: 232, # '\x9c' + 157: 233, # '\x9d' + 158: 234, # '\x9e' + 159: 235, # '\x9f' + 160: 236, # None + 161: 5, # 'ก' + 162: 30, # 'ข' + 163: 237, # 'ฃ' + 164: 24, # 'ค' + 165: 238, # 'ฅ' + 166: 75, # 'ฆ' + 167: 8, # 'ง' + 168: 26, # 'จ' + 169: 52, # 'ฉ' + 170: 34, # 'ช' + 171: 51, # 'ซ' + 172: 119, # 'ฌ' + 173: 47, # 'ญ' + 174: 58, # 'ฎ' + 175: 57, # 'ฏ' + 176: 49, # 'ฐ' + 177: 53, # 'ฑ' + 178: 55, # 'ฒ' + 179: 43, # 'ณ' + 180: 20, # 'ด' + 181: 19, # 'ต' + 182: 44, # 'ถ' + 183: 14, # 'ท' + 184: 48, # 'ธ' + 185: 3, # 'น' + 186: 17, # 'บ' + 187: 25, # 'ป' + 188: 39, # 'ผ' + 189: 62, # 'ฝ' + 190: 31, # 'พ' + 191: 54, # 'ฟ' + 192: 45, # 'ภ' + 193: 9, # 'ม' + 194: 16, # 'ย' + 195: 2, # 'ร' + 196: 61, # 'ฤ' + 197: 15, # 'ล' + 198: 239, # 'ฦ' + 199: 12, # 'ว' + 200: 42, # 'ศ' + 201: 46, # 'ษ' + 202: 18, # 'ส' + 203: 21, # 'ห' + 204: 76, # 'ฬ' + 205: 4, # 'อ' + 206: 66, # 'ฮ' + 207: 63, # 'ฯ' + 208: 22, # 'ะ' + 209: 10, # 'ั' + 210: 1, # 'า' + 211: 36, # 'ำ' + 212: 23, # 'ิ' + 213: 13, # 'ี' + 214: 40, # 'ึ' + 215: 27, # 'ื' + 216: 32, # 'ุ' + 217: 35, # 'ู' + 218: 86, # 'ฺ' + 219: 240, # None + 220: 241, # None + 221: 242, # None + 222: 243, # None + 223: 244, # '฿' + 224: 11, # 'เ' + 225: 28, # 'แ' + 226: 41, # 'โ' + 227: 29, # 'ใ' + 228: 33, # 'ไ' + 229: 245, # 'ๅ' + 230: 50, # 'ๆ' + 231: 37, # '็' + 232: 6, # '่' + 233: 7, # '้' + 234: 67, # '๊' + 235: 77, # '๋' + 236: 38, # '์' + 237: 93, # 'ํ' + 238: 246, # '๎' + 239: 247, # '๏' + 240: 68, # '๐' + 241: 56, # '๑' + 242: 59, # '๒' + 243: 65, # '๓' + 244: 69, # '๔' + 245: 60, # '๕' + 246: 70, # '๖' + 247: 80, # '๗' + 248: 71, # '๘' + 249: 87, # '๙' + 250: 248, # '๚' + 251: 249, # '๛' + 252: 250, # None + 253: 251, # None + 254: 252, # None + 255: 253, # None +} + +TIS_620_THAI_MODEL = SingleByteCharSetModel(charset_name='TIS-620', + language='Thai', + char_to_order_map=TIS_620_THAI_CHAR_TO_ORDER, + language_model=THAI_LANG_MODEL, + typical_positive_ratio=0.926386, + keep_ascii_letters=False, + alphabet='กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py b/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py new file mode 100644 index 000000000..43f4230ae --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py @@ -0,0 +1,4383 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +TURKISH_LANG_MODEL = { + 23: { # 'A' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 37: { # 'B' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 47: { # 'C' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 39: { # 'D' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 29: { # 'E' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 52: { # 'F' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 36: { # 'G' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 45: { # 'H' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 2, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 2, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 53: { # 'I' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 60: { # 'J' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 16: { # 'K' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 49: { # 'L' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 2, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 20: { # 'M' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 46: { # 'N' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 42: { # 'O' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 48: { # 'P' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 44: { # 'R' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 35: { # 'S' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 31: { # 'T' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 51: { # 'U' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 38: { # 'V' + 23: 1, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 62: { # 'W' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 43: { # 'Y' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 56: { # 'Z' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 1: { # 'a' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 21: { # 'b' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 28: { # 'c' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 3, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 1, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 12: { # 'd' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 2: { # 'e' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 18: { # 'f' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 1, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 27: { # 'g' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 25: { # 'h' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 3: { # 'i' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 24: { # 'j' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 10: { # 'k' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 5: { # 'l' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 13: { # 'm' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 4: { # 'n' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 15: { # 'o' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 2, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 2, # 'ş' + }, + 26: { # 'p' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 7: { # 'r' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 8: { # 's' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 9: { # 't' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 14: { # 'u' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 32: { # 'v' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 57: { # 'w' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 1, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 58: { # 'x' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 11: { # 'y' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 22: { # 'z' + 23: 2, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 2, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 3, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 2, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 63: { # '·' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 54: { # 'Ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 50: { # 'Ö' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 55: { # 'Ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 59: { # 'â' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 33: { # 'ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 61: { # 'î' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 34: { # 'ö' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 3, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 17: { # 'ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 30: { # 'ğ' + 23: 0, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 41: { # 'İ' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 6: { # 'ı' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 40: { # 'Ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 2, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 3, # 'f' + 27: 0, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 1, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 19: { # 'ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_9_TURKISH_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 255, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 255, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 255, # ' ' + 33: 255, # '!' + 34: 255, # '"' + 35: 255, # '#' + 36: 255, # '$' + 37: 255, # '%' + 38: 255, # '&' + 39: 255, # "'" + 40: 255, # '(' + 41: 255, # ')' + 42: 255, # '*' + 43: 255, # '+' + 44: 255, # ',' + 45: 255, # '-' + 46: 255, # '.' + 47: 255, # '/' + 48: 255, # '0' + 49: 255, # '1' + 50: 255, # '2' + 51: 255, # '3' + 52: 255, # '4' + 53: 255, # '5' + 54: 255, # '6' + 55: 255, # '7' + 56: 255, # '8' + 57: 255, # '9' + 58: 255, # ':' + 59: 255, # ';' + 60: 255, # '<' + 61: 255, # '=' + 62: 255, # '>' + 63: 255, # '?' + 64: 255, # '@' + 65: 23, # 'A' + 66: 37, # 'B' + 67: 47, # 'C' + 68: 39, # 'D' + 69: 29, # 'E' + 70: 52, # 'F' + 71: 36, # 'G' + 72: 45, # 'H' + 73: 53, # 'I' + 74: 60, # 'J' + 75: 16, # 'K' + 76: 49, # 'L' + 77: 20, # 'M' + 78: 46, # 'N' + 79: 42, # 'O' + 80: 48, # 'P' + 81: 69, # 'Q' + 82: 44, # 'R' + 83: 35, # 'S' + 84: 31, # 'T' + 85: 51, # 'U' + 86: 38, # 'V' + 87: 62, # 'W' + 88: 65, # 'X' + 89: 43, # 'Y' + 90: 56, # 'Z' + 91: 255, # '[' + 92: 255, # '\\' + 93: 255, # ']' + 94: 255, # '^' + 95: 255, # '_' + 96: 255, # '`' + 97: 1, # 'a' + 98: 21, # 'b' + 99: 28, # 'c' + 100: 12, # 'd' + 101: 2, # 'e' + 102: 18, # 'f' + 103: 27, # 'g' + 104: 25, # 'h' + 105: 3, # 'i' + 106: 24, # 'j' + 107: 10, # 'k' + 108: 5, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 15, # 'o' + 112: 26, # 'p' + 113: 64, # 'q' + 114: 7, # 'r' + 115: 8, # 's' + 116: 9, # 't' + 117: 14, # 'u' + 118: 32, # 'v' + 119: 57, # 'w' + 120: 58, # 'x' + 121: 11, # 'y' + 122: 22, # 'z' + 123: 255, # '{' + 124: 255, # '|' + 125: 255, # '}' + 126: 255, # '~' + 127: 255, # '\x7f' + 128: 180, # '\x80' + 129: 179, # '\x81' + 130: 178, # '\x82' + 131: 177, # '\x83' + 132: 176, # '\x84' + 133: 175, # '\x85' + 134: 174, # '\x86' + 135: 173, # '\x87' + 136: 172, # '\x88' + 137: 171, # '\x89' + 138: 170, # '\x8a' + 139: 169, # '\x8b' + 140: 168, # '\x8c' + 141: 167, # '\x8d' + 142: 166, # '\x8e' + 143: 165, # '\x8f' + 144: 164, # '\x90' + 145: 163, # '\x91' + 146: 162, # '\x92' + 147: 161, # '\x93' + 148: 160, # '\x94' + 149: 159, # '\x95' + 150: 101, # '\x96' + 151: 158, # '\x97' + 152: 157, # '\x98' + 153: 156, # '\x99' + 154: 155, # '\x9a' + 155: 154, # '\x9b' + 156: 153, # '\x9c' + 157: 152, # '\x9d' + 158: 151, # '\x9e' + 159: 106, # '\x9f' + 160: 150, # '\xa0' + 161: 149, # '¡' + 162: 148, # '¢' + 163: 147, # '£' + 164: 146, # '¤' + 165: 145, # '¥' + 166: 144, # '¦' + 167: 100, # '§' + 168: 143, # '¨' + 169: 142, # '©' + 170: 141, # 'ª' + 171: 140, # '«' + 172: 139, # '¬' + 173: 138, # '\xad' + 174: 137, # '®' + 175: 136, # '¯' + 176: 94, # '°' + 177: 80, # '±' + 178: 93, # '²' + 179: 135, # '³' + 180: 105, # '´' + 181: 134, # 'µ' + 182: 133, # '¶' + 183: 63, # '·' + 184: 132, # '¸' + 185: 131, # '¹' + 186: 130, # 'º' + 187: 129, # '»' + 188: 128, # '¼' + 189: 127, # '½' + 190: 126, # '¾' + 191: 125, # '¿' + 192: 124, # 'À' + 193: 104, # 'Á' + 194: 73, # 'Â' + 195: 99, # 'Ã' + 196: 79, # 'Ä' + 197: 85, # 'Å' + 198: 123, # 'Æ' + 199: 54, # 'Ç' + 200: 122, # 'È' + 201: 98, # 'É' + 202: 92, # 'Ê' + 203: 121, # 'Ë' + 204: 120, # 'Ì' + 205: 91, # 'Í' + 206: 103, # 'Î' + 207: 119, # 'Ï' + 208: 68, # 'Ğ' + 209: 118, # 'Ñ' + 210: 117, # 'Ò' + 211: 97, # 'Ó' + 212: 116, # 'Ô' + 213: 115, # 'Õ' + 214: 50, # 'Ö' + 215: 90, # '×' + 216: 114, # 'Ø' + 217: 113, # 'Ù' + 218: 112, # 'Ú' + 219: 111, # 'Û' + 220: 55, # 'Ü' + 221: 41, # 'İ' + 222: 40, # 'Ş' + 223: 86, # 'ß' + 224: 89, # 'à' + 225: 70, # 'á' + 226: 59, # 'â' + 227: 78, # 'ã' + 228: 71, # 'ä' + 229: 82, # 'å' + 230: 88, # 'æ' + 231: 33, # 'ç' + 232: 77, # 'è' + 233: 66, # 'é' + 234: 84, # 'ê' + 235: 83, # 'ë' + 236: 110, # 'ì' + 237: 75, # 'í' + 238: 61, # 'î' + 239: 96, # 'ï' + 240: 30, # 'ğ' + 241: 67, # 'ñ' + 242: 109, # 'ò' + 243: 74, # 'ó' + 244: 87, # 'ô' + 245: 102, # 'õ' + 246: 34, # 'ö' + 247: 95, # '÷' + 248: 81, # 'ø' + 249: 108, # 'ù' + 250: 76, # 'ú' + 251: 72, # 'û' + 252: 17, # 'ü' + 253: 6, # 'ı' + 254: 19, # 'ş' + 255: 107, # 'ÿ' +} + +ISO_8859_9_TURKISH_MODEL = SingleByteCharSetModel(charset_name='ISO-8859-9', + language='Turkish', + char_to_order_map=ISO_8859_9_TURKISH_CHAR_TO_ORDER, + language_model=TURKISH_LANG_MODEL, + typical_positive_ratio=0.97029, + keep_ascii_letters=True, + alphabet='ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyzÂÇÎÖÛÜâçîöûüĞğİıŞş') + diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py b/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py new file mode 100644 index 000000000..7d1e8c20f --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) + + +class Latin1Prober(CharSetProber): + def __init__(self): + super(Latin1Prober, self).__init__() + self._last_char_class = None + self._freq_counter = None + self.reset() + + def reset(self): + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + CharSetProber.reset(self) + + @property + def charset_name(self): + return "ISO-8859-1" + + @property + def language(self): + return "" + + def feed(self, byte_str): + byte_str = self.filter_with_english_letters(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self): + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + if total < 0.01: + confidence = 0.0 + else: + confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) + / total) + if confidence < 0.0: + confidence = 0.0 + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence = confidence * 0.73 + return confidence diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py new file mode 100644 index 000000000..6256ecfd1 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py @@ -0,0 +1,91 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter=None): + super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) + self.distribution_analyzer = None + self.coding_sm = None + self._last_char = [0, 0] + + def reset(self): + super(MultiByteCharSetProber, self).reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = [0, 0] + + @property + def charset_name(self): + raise NotImplementedError + + @property + def language(self): + raise NotImplementedError + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.distribution_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + return self.distribution_analyzer.get_confidence() diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py new file mode 100644 index 000000000..530abe75e --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py @@ -0,0 +1,54 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .utf8prober import UTF8Prober +from .sjisprober import SJISProber +from .eucjpprober import EUCJPProber +from .gb2312prober import GB2312Prober +from .euckrprober import EUCKRProber +from .cp949prober import CP949Prober +from .big5prober import Big5Prober +from .euctwprober import EUCTWProber + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter=None): + super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber() + ] + self.reset() diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py b/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py new file mode 100644 index 000000000..8360d0f28 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py @@ -0,0 +1,572 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +# BIG5 + +BIG5_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 4,4,4,4,4,4,4,4, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 4,3,3,3,3,3,3,3, # a0 - a7 + 3,3,3,3,3,3,3,3, # a8 - af + 3,3,3,3,3,3,3,3, # b0 - b7 + 3,3,3,3,3,3,3,3, # b8 - bf + 3,3,3,3,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL = {'class_table': BIG5_CLS, + 'class_factor': 5, + 'state_table': BIG5_ST, + 'char_len_table': BIG5_CHAR_LEN_TABLE, + 'name': 'Big5'} + +# CP949 + +CP949_CLS = ( + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f + 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f + 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f + 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f + 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f + 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f + 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f + 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f + 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af + 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf + 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL = {'class_table': CP949_CLS, + 'class_factor': 10, + 'state_table': CP949_ST, + 'char_len_table': CP949_CHAR_LEN_TABLE, + 'name': 'CP949'} + +# EUC-JP + +EUCJP_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,5,5, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,5,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,4,4,4,4,4,4,4, # 30 - 37 + 4,4,4,4,4,4,4,4, # 38 - 3f + 4,4,4,4,4,4,4,4, # 40 - 47 + 4,4,4,4,4,4,4,4, # 48 - 4f + 4,4,4,4,4,4,4,4, # 50 - 57 + 4,4,4,4,4,4,4,4, # 58 - 5f + 4,4,4,4,4,4,4,4, # 60 - 67 + 4,4,4,4,4,4,4,4, # 68 - 6f + 4,4,4,4,4,4,4,4, # 70 - 77 + 4,4,4,4,4,4,4,4, # 78 - 7f + 5,5,5,5,5,5,5,5, # 80 - 87 + 5,5,5,5,5,5,1,3, # 88 - 8f + 5,5,5,5,5,5,5,5, # 90 - 97 + 5,5,5,5,5,5,5,5, # 98 - 9f + 5,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,0,5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, + 'class_factor': 6, + 'state_table': EUCJP_ST, + 'char_len_table': EUCJP_CHAR_LEN_TABLE, + 'name': 'EUC-JP'} + +# EUC-KR + +EUCKR_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,3,3,3, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,3,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 2,2,2,2,2,2,2,2, # e0 - e7 + 2,2,2,2,2,2,2,2, # e8 - ef + 2,2,2,2,2,2,2,2, # f0 - f7 + 2,2,2,2,2,2,2,0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, + 'class_factor': 4, + 'state_table': EUCKR_ST, + 'char_len_table': EUCKR_CHAR_LEN_TABLE, + 'name': 'EUC-KR'} + +# EUC-TW + +EUCTW_CLS = ( + 2,2,2,2,2,2,2,2, # 00 - 07 + 2,2,2,2,2,2,0,0, # 08 - 0f + 2,2,2,2,2,2,2,2, # 10 - 17 + 2,2,2,0,2,2,2,2, # 18 - 1f + 2,2,2,2,2,2,2,2, # 20 - 27 + 2,2,2,2,2,2,2,2, # 28 - 2f + 2,2,2,2,2,2,2,2, # 30 - 37 + 2,2,2,2,2,2,2,2, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,2, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,6,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,3,4,4,4,4,4,4, # a0 - a7 + 5,5,1,1,1,1,1,1, # a8 - af + 1,1,1,1,1,1,1,1, # b0 - b7 + 1,1,1,1,1,1,1,1, # b8 - bf + 1,1,3,1,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, + 'class_factor': 7, + 'state_table': EUCTW_ST, + 'char_len_table': EUCTW_CHAR_LEN_TABLE, + 'name': 'x-euc-tw'} + +# GB2312 + +GB2312_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 3,3,3,3,3,3,3,3, # 30 - 37 + 3,3,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,4, # 78 - 7f + 5,6,6,6,6,6,6,6, # 80 - 87 + 6,6,6,6,6,6,6,6, # 88 - 8f + 6,6,6,6,6,6,6,6, # 90 - 97 + 6,6,6,6,6,6,6,6, # 98 - 9f + 6,6,6,6,6,6,6,6, # a0 - a7 + 6,6,6,6,6,6,6,6, # a8 - af + 6,6,6,6,6,6,6,6, # b0 - b7 + 6,6,6,6,6,6,6,6, # b8 - bf + 6,6,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 6,6,6,6,6,6,6,6, # e0 - e7 + 6,6,6,6,6,6,6,6, # e8 - ef + 6,6,6,6,6,6,6,6, # f0 - f7 + 6,6,6,6,6,6,6,0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL = {'class_table': GB2312_CLS, + 'class_factor': 7, + 'state_table': GB2312_ST, + 'char_len_table': GB2312_CHAR_LEN_TABLE, + 'name': 'GB2312'} + +# Shift_JIS + +SJIS_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 3,3,3,3,3,2,2,3, # 80 - 87 + 3,3,3,3,3,3,3,3, # 88 - 8f + 3,3,3,3,3,3,3,3, # 90 - 97 + 3,3,3,3,3,3,3,3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,4,4,4, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,0,0,0) # f8 - ff + + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL = {'class_table': SJIS_CLS, + 'class_factor': 6, + 'state_table': SJIS_ST, + 'char_len_table': SJIS_CHAR_LEN_TABLE, + 'name': 'Shift_JIS'} + +# UCS2-BE + +UCS2BE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, + 'class_factor': 6, + 'state_table': UCS2BE_ST, + 'char_len_table': UCS2BE_CHAR_LEN_TABLE, + 'name': 'UTF-16BE'} + +# UCS2-LE + +UCS2LE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, + 'class_factor': 6, + 'state_table': UCS2LE_ST, + 'char_len_table': UCS2LE_CHAR_LEN_TABLE, + 'name': 'UTF-16LE'} + +# UTF-8 + +UTF8_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 2,2,2,2,3,3,3,3, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 5,5,5,5,5,5,5,5, # a0 - a7 + 5,5,5,5,5,5,5,5, # a8 - af + 5,5,5,5,5,5,5,5, # b0 - b7 + 5,5,5,5,5,5,5,5, # b8 - bf + 0,0,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 7,8,8,8,8,8,8,8, # e0 - e7 + 8,8,8,8,8,9,8,8, # e8 - ef + 10,11,11,11,11,11,11,11, # f0 - f7 + 12,13,13,13,14,15,0,0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL = {'class_table': UTF8_CLS, + 'class_factor': 16, + 'state_table': UTF8_ST, + 'char_len_table': UTF8_CHAR_LEN_TABLE, + 'name': 'UTF-8'} diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py b/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0140daefd6b942da81a7d4c462abbfcc42501f6e GIT binary patch literal 202 zcmYk0F$%&!5JfkVLWCT|BBmD+K~W14QS1hn&F-M9CL4Ap0gvPjJd0rEEv(#B`e5GY z&otwbq$dK8!z*v|-Rhqxlt~zhgN)dTezd*|->!f96w@K>2|dBKCQ>kSx-PI}f`#Q} zox|LE;&kKP88t(LWdkdl16jtjQu?BfNKn}-li_BZ&-6)ogPaw}$|zQul(w`i<)FGf RyQ9LH`ikTB4eA8N;tQ#9H=Y0h literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..233527163f57782232eb7bf272452ed0a5d32611 GIT binary patch literal 7964 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py b/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py new file mode 100644 index 000000000..3237d5abf --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py @@ -0,0 +1,310 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Metadata about languages used by our model training code for our +SingleByteCharSetProbers. Could be used for other things in the future. + +This code is based on the language metadata from the uchardet project. +""" +from __future__ import absolute_import, print_function + +from string import ascii_letters + + +# TODO: Add Ukranian (KOI8-U) + +class Language(object): + """Metadata about a language useful for training models + + :ivar name: The human name for the language, in English. + :type name: str + :ivar iso_code: 2-letter ISO 639-1 if possible, 3-letter ISO code otherwise, + or use another catalog as a last resort. + :type iso_code: str + :ivar use_ascii: Whether or not ASCII letters should be included in trained + models. + :type use_ascii: bool + :ivar charsets: The charsets we want to support and create data for. + :type charsets: list of str + :ivar alphabet: The characters in the language's alphabet. If `use_ascii` is + `True`, you only need to add those not in the ASCII set. + :type alphabet: str + :ivar wiki_start_pages: The Wikipedia pages to start from if we're crawling + Wikipedia for training data. + :type wiki_start_pages: list of str + """ + def __init__(self, name=None, iso_code=None, use_ascii=True, charsets=None, + alphabet=None, wiki_start_pages=None): + super(Language, self).__init__() + self.name = name + self.iso_code = iso_code + self.use_ascii = use_ascii + self.charsets = charsets + if self.use_ascii: + if alphabet: + alphabet += ascii_letters + else: + alphabet = ascii_letters + elif not alphabet: + raise ValueError('Must supply alphabet if use_ascii is False') + self.alphabet = ''.join(sorted(set(alphabet))) if alphabet else None + self.wiki_start_pages = wiki_start_pages + + def __repr__(self): + return '{}({})'.format(self.__class__.__name__, + ', '.join('{}={!r}'.format(k, v) + for k, v in self.__dict__.items() + if not k.startswith('_'))) + + +LANGUAGES = {'Arabic': Language(name='Arabic', + iso_code='ar', + use_ascii=False, + # We only support encodings that use isolated + # forms, because the current recommendation is + # that the rendering system handles presentation + # forms. This means we purposefully skip IBM864. + charsets=['ISO-8859-6', 'WINDOWS-1256', + 'CP720', 'CP864'], + alphabet=u'ءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّ', + wiki_start_pages=[u'الصفحة_الرئيسية']), + 'Belarusian': Language(name='Belarusian', + iso_code='be', + use_ascii=False, + charsets=['ISO-8859-5', 'WINDOWS-1251', + 'IBM866', 'MacCyrillic'], + alphabet=(u'АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯ' + u'абвгдеёжзійклмнопрстуўфхцчшыьэюяʼ'), + wiki_start_pages=[u'Галоўная_старонка']), + 'Bulgarian': Language(name='Bulgarian', + iso_code='bg', + use_ascii=False, + charsets=['ISO-8859-5', 'WINDOWS-1251', + 'IBM855'], + alphabet=(u'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ' + u'абвгдежзийклмнопрстуфхцчшщъьюя'), + wiki_start_pages=[u'Начална_страница']), + 'Czech': Language(name='Czech', + iso_code='cz', + use_ascii=True, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=u'áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ', + wiki_start_pages=[u'Hlavní_strana']), + 'Danish': Language(name='Danish', + iso_code='da', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'æøåÆØÅ', + wiki_start_pages=[u'Forside']), + 'German': Language(name='German', + iso_code='de', + use_ascii=True, + charsets=['ISO-8859-1', 'WINDOWS-1252'], + alphabet=u'äöüßÄÖÜ', + wiki_start_pages=[u'Wikipedia:Hauptseite']), + 'Greek': Language(name='Greek', + iso_code='el', + use_ascii=False, + charsets=['ISO-8859-7', 'WINDOWS-1253'], + alphabet=(u'αβγδεζηθικλμνξοπρσςτυφχψωάέήίόύώ' + u'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΣΤΥΦΧΨΩΆΈΉΊΌΎΏ'), + wiki_start_pages=[u'Πύλη:Κύρια']), + 'English': Language(name='English', + iso_code='en', + use_ascii=True, + charsets=['ISO-8859-1', 'WINDOWS-1252'], + wiki_start_pages=[u'Main_Page']), + 'Esperanto': Language(name='Esperanto', + iso_code='eo', + # Q, W, X, and Y not used at all + use_ascii=False, + charsets=['ISO-8859-3'], + alphabet=(u'abcĉdefgĝhĥijĵklmnoprsŝtuŭvz' + u'ABCĈDEFGĜHĤIJĴKLMNOPRSŜTUŬVZ'), + wiki_start_pages=[u'Vikipedio:Ĉefpaĝo']), + 'Spanish': Language(name='Spanish', + iso_code='es', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'ñáéíóúüÑÁÉÍÓÚÜ', + wiki_start_pages=[u'Wikipedia:Portada']), + 'Estonian': Language(name='Estonian', + iso_code='et', + use_ascii=False, + charsets=['ISO-8859-4', 'ISO-8859-13', + 'WINDOWS-1257'], + # C, F, Š, Q, W, X, Y, Z, Ž are only for + # loanwords + alphabet=(u'ABDEGHIJKLMNOPRSTUVÕÄÖÜ' + u'abdeghijklmnoprstuvõäöü'), + wiki_start_pages=[u'Esileht']), + 'Finnish': Language(name='Finnish', + iso_code='fi', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'ÅÄÖŠŽåäöšž', + wiki_start_pages=[u'Wikipedia:Etusivu']), + 'French': Language(name='French', + iso_code='fr', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'œàâçèéîïùûêŒÀÂÇÈÉÎÏÙÛÊ', + wiki_start_pages=[u'Wikipédia:Accueil_principal', + u'Bœuf (animal)']), + 'Hebrew': Language(name='Hebrew', + iso_code='he', + use_ascii=False, + charsets=['ISO-8859-8', 'WINDOWS-1255'], + alphabet=u'אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ', + wiki_start_pages=[u'עמוד_ראשי']), + 'Croatian': Language(name='Croatian', + iso_code='hr', + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=(u'abcčćdđefghijklmnoprsštuvzž' + u'ABCČĆDĐEFGHIJKLMNOPRSŠTUVZŽ'), + wiki_start_pages=[u'Glavna_stranica']), + 'Hungarian': Language(name='Hungarian', + iso_code='hu', + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=(u'abcdefghijklmnoprstuvzáéíóöőúüű' + u'ABCDEFGHIJKLMNOPRSTUVZÁÉÍÓÖŐÚÜŰ'), + wiki_start_pages=[u'Kezdőlap']), + 'Italian': Language(name='Italian', + iso_code='it', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'ÀÈÉÌÒÓÙàèéìòóù', + wiki_start_pages=[u'Pagina_principale']), + 'Lithuanian': Language(name='Lithuanian', + iso_code='lt', + use_ascii=False, + charsets=['ISO-8859-13', 'WINDOWS-1257', + 'ISO-8859-4'], + # Q, W, and X not used at all + alphabet=(u'AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ' + u'aąbcčdeęėfghiįyjklmnoprsštuųūvzž'), + wiki_start_pages=[u'Pagrindinis_puslapis']), + 'Latvian': Language(name='Latvian', + iso_code='lv', + use_ascii=False, + charsets=['ISO-8859-13', 'WINDOWS-1257', + 'ISO-8859-4'], + # Q, W, X, Y are only for loanwords + alphabet=(u'AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ' + u'aābcčdeēfgģhiījkķlļmnņoprsštuūvzž'), + wiki_start_pages=[u'Sākumlapa']), + 'Macedonian': Language(name='Macedonian', + iso_code='mk', + use_ascii=False, + charsets=['ISO-8859-5', 'WINDOWS-1251', + 'MacCyrillic', 'IBM855'], + alphabet=(u'АБВГДЃЕЖЗЅИЈКЛЉМНЊОПРСТЌУФХЦЧЏШ' + u'абвгдѓежзѕијклљмнњопрстќуфхцчџш'), + wiki_start_pages=[u'Главна_страница']), + 'Dutch': Language(name='Dutch', + iso_code='nl', + use_ascii=True, + charsets=['ISO-8859-1', 'WINDOWS-1252'], + wiki_start_pages=[u'Hoofdpagina']), + 'Polish': Language(name='Polish', + iso_code='pl', + # Q and X are only used for foreign words. + use_ascii=False, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=(u'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ' + u'aąbcćdeęfghijklłmnńoóprsśtuwyzźż'), + wiki_start_pages=[u'Wikipedia:Strona_główna']), + 'Portuguese': Language(name='Portuguese', + iso_code='pt', + use_ascii=True, + charsets=['ISO-8859-1', 'ISO-8859-15', + 'WINDOWS-1252'], + alphabet=u'ÁÂÃÀÇÉÊÍÓÔÕÚáâãàçéêíóôõú', + wiki_start_pages=[u'Wikipédia:Página_principal']), + 'Romanian': Language(name='Romanian', + iso_code='ro', + use_ascii=True, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=u'ăâîșțĂÂÎȘȚ', + wiki_start_pages=[u'Pagina_principală']), + 'Russian': Language(name='Russian', + iso_code='ru', + use_ascii=False, + charsets=['ISO-8859-5', 'WINDOWS-1251', + 'KOI8-R', 'MacCyrillic', 'IBM866', + 'IBM855'], + alphabet=(u'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' + u'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'), + wiki_start_pages=[u'Заглавная_страница']), + 'Slovak': Language(name='Slovak', + iso_code='sk', + use_ascii=True, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=u'áäčďéíĺľňóôŕšťúýžÁÄČĎÉÍĹĽŇÓÔŔŠŤÚÝŽ', + wiki_start_pages=[u'Hlavná_stránka']), + 'Slovene': Language(name='Slovene', + iso_code='sl', + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=['ISO-8859-2', 'WINDOWS-1250'], + alphabet=(u'abcčdefghijklmnoprsštuvzž' + u'ABCČDEFGHIJKLMNOPRSŠTUVZŽ'), + wiki_start_pages=[u'Glavna_stran']), + # Serbian can be written in both Latin and Cyrillic, but there's no + # simple way to get the Latin alphabet pages from Wikipedia through + # the API, so for now we just support Cyrillic. + 'Serbian': Language(name='Serbian', + iso_code='sr', + alphabet=(u'АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШ' + u'абвгдђежзијклљмнњопрстћуфхцчџш'), + charsets=['ISO-8859-5', 'WINDOWS-1251', + 'MacCyrillic', 'IBM855'], + wiki_start_pages=[u'Главна_страна']), + 'Thai': Language(name='Thai', + iso_code='th', + use_ascii=False, + charsets=['ISO-8859-11', 'TIS-620', 'CP874'], + alphabet=u'กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛', + wiki_start_pages=[u'หน้าหลัก']), + 'Turkish': Language(name='Turkish', + iso_code='tr', + # Q, W, and X are not used by Turkish + use_ascii=False, + charsets=['ISO-8859-3', 'ISO-8859-9', + 'WINDOWS-1254'], + alphabet=(u'abcçdefgğhıijklmnoöprsştuüvyzâîû' + u'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZÂÎÛ'), + wiki_start_pages=[u'Ana_Sayfa']), + 'Vietnamese': Language(name='Vietnamese', + iso_code='vi', + use_ascii=False, + # Windows-1258 is the only common 8-bit + # Vietnamese encoding supported by Python. + # From Wikipedia: + # For systems that lack support for Unicode, + # dozens of 8-bit Vietnamese code pages are + # available.[1] The most common are VISCII + # (TCVN 5712:1993), VPS, and Windows-1258.[3] + # Where ASCII is required, such as when + # ensuring readability in plain text e-mail, + # Vietnamese letters are often encoded + # according to Vietnamese Quoted-Readable + # (VIQR) or VSCII Mnemonic (VSCII-MNEM),[4] + # though usage of either variable-width + # scheme has declined dramatically following + # the adoption of Unicode on the World Wide + # Web. + charsets=['WINDOWS-1258'], + alphabet=(u'aăâbcdđeêghiklmnoôơpqrstuưvxy' + u'AĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXY'), + wiki_start_pages=[u'Chữ_Quốc_ngữ']), + } diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py new file mode 100644 index 000000000..46ba835c6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from collections import namedtuple + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +SingleByteCharSetModel = namedtuple('SingleByteCharSetModel', + ['charset_name', + 'language', + 'char_to_order_map', + 'language_model', + 'typical_positive_ratio', + 'keep_ascii_letters', + 'alphabet']) + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__(self, model, reversed=False, name_prober=None): + super(SingleByteCharSetProber, self).__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = None + self._seq_counters = None + self._total_seqs = None + self._total_char = None + self._freq_char = None + self.reset() + + def reset(self): + super(SingleByteCharSetProber, self).reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self): + if self._name_prober: + return self._name_prober.charset_name + else: + return self._model.charset_name + + @property + def language(self): + if self._name_prober: + return self._name_prober.language + else: + return self._model.language + + def feed(self, byte_str): + # TODO: Make filter_international_words keep things in self.alphabet + if not self._model.keep_ascii_letters: + byte_str = self.filter_international_words(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model.char_to_order_map + language_model = self._model.language_model + for char in byte_str: + order = char_to_order_map.get(char, CharacterCategory.UNDEFINED) + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + # TODO: Follow uchardet's lead and discount confidence for frequent + # control characters. + # See https://github.com/BYVoid/uchardet/commit/55b4f23971db61 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + lm_cat = language_model[self._last_order][order] + else: + lm_cat = language_model[order][self._last_order] + self._seq_counters[lm_cat] += 1 + self._last_order = order + + charset_name = self._model.charset_name + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, we have a winner', + charset_name, confidence) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, below negative ' + 'shortcut threshhold %s', charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self): + r = 0.01 + if self._total_seqs > 0: + r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / + self._total_seqs / self._model.typical_positive_ratio) + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py new file mode 100644 index 000000000..bdeef4e15 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py @@ -0,0 +1,83 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .hebrewprober import HebrewProber +from .langbulgarianmodel import (ISO_8859_5_BULGARIAN_MODEL, + WINDOWS_1251_BULGARIAN_MODEL) +from .langgreekmodel import ISO_8859_7_GREEK_MODEL, WINDOWS_1253_GREEK_MODEL +from .langhebrewmodel import WINDOWS_1255_HEBREW_MODEL +# from .langhungarianmodel import (ISO_8859_2_HUNGARIAN_MODEL, +# WINDOWS_1250_HUNGARIAN_MODEL) +from .langrussianmodel import (IBM855_RUSSIAN_MODEL, IBM866_RUSSIAN_MODEL, + ISO_8859_5_RUSSIAN_MODEL, KOI8_R_RUSSIAN_MODEL, + MACCYRILLIC_RUSSIAN_MODEL, + WINDOWS_1251_RUSSIAN_MODEL) +from .langthaimodel import TIS_620_THAI_MODEL +from .langturkishmodel import ISO_8859_9_TURKISH_MODEL +from .sbcharsetprober import SingleByteCharSetProber + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self): + super(SBCSGroupProber, self).__init__() + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber(WINDOWS_1255_HEBREW_MODEL, + False, hebrew_prober) + # TODO: See if using ISO-8859-8 Hebrew model works better here, since + # it's actually the visual one + visual_hebrew_prober = SingleByteCharSetProber(WINDOWS_1255_HEBREW_MODEL, + True, hebrew_prober) + hebrew_prober.set_model_probers(logical_hebrew_prober, + visual_hebrew_prober) + # TODO: ORDER MATTERS HERE. I changed the order vs what was in master + # and several tests failed that did not before. Some thought + # should be put into the ordering, and we should consider making + # order not matter here, because that is very counter-intuitive. + self.probers = [ + SingleByteCharSetProber(WINDOWS_1251_RUSSIAN_MODEL), + SingleByteCharSetProber(KOI8_R_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_5_RUSSIAN_MODEL), + SingleByteCharSetProber(MACCYRILLIC_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM866_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM855_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_7_GREEK_MODEL), + SingleByteCharSetProber(WINDOWS_1253_GREEK_MODEL), + SingleByteCharSetProber(ISO_8859_5_BULGARIAN_MODEL), + SingleByteCharSetProber(WINDOWS_1251_BULGARIAN_MODEL), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(ISO_8859_2_HUNGARIAN_MODEL), + # SingleByteCharSetProber(WINDOWS_1250_HUNGARIAN_MODEL), + SingleByteCharSetProber(TIS_620_THAI_MODEL), + SingleByteCharSetProber(ISO_8859_9_TURKISH_MODEL), + hebrew_prober, + logical_hebrew_prober, + visual_hebrew_prober, + ] + self.reset() diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py b/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py new file mode 100644 index 000000000..9e29623bd --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import SJISDistributionAnalysis +from .jpcntx import SJISContextAnalysis +from .mbcssm import SJIS_SM_MODEL +from .enums import ProbingState, MachineState + + +class SJISProber(MultiByteCharSetProber): + def __init__(self): + super(SJISProber, self).__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self): + super(SJISProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return self.context_analyzer.charset_name + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char[2 - char_len:], + char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 + - char_len], char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py b/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py new file mode 100644 index 000000000..055a8ac1b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py @@ -0,0 +1,286 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re + +from .charsetgroupprober import CharSetGroupProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .mbcsgroupprober import MBCSGroupProber +from .sbcsgroupprober import SBCSGroupProber + + +class UniversalDetector(object): + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') + ESC_DETECTOR = re.compile(b'(\033|~{)') + WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') + ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', + 'iso-8859-2': 'Windows-1250', + 'iso-8859-5': 'Windows-1251', + 'iso-8859-6': 'Windows-1256', + 'iso-8859-7': 'Windows-1253', + 'iso-8859-8': 'Windows-1255', + 'iso-8859-9': 'Windows-1254', + 'iso-8859-13': 'Windows-1257'} + + def __init__(self, lang_filter=LanguageFilter.ALL): + self._esc_charset_prober = None + self._charset_probers = [] + self.result = None + self.done = None + self._got_data = None + self._input_state = None + self._last_char = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = None + self.reset() + + def reset(self): + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {'encoding': None, 'confidence': 0.0, 'language': None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b'' + if self._esc_charset_prober: + self._esc_charset_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str): + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not len(byte_str): + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = {'encoding': "UTF-8-SIG", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_UTF32_LE, + codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {'encoding': "UTF-32", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\xFE\xFF\x00\x00'): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = {'encoding': "X-ISO-10646-UCS-4-3412", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\x00\x00\xFF\xFE'): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = {'encoding': "X-ISO-10646-UCS-4-2143", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {'encoding': "UTF-16", + 'confidence': 1.0, + 'language': ''} + + self._got_data = True + if self.result['encoding'] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif self._input_state == InputState.PURE_ASCII and \ + self.ESC_DETECTOR.search(self._last_char + byte_str): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': + self._esc_charset_prober.charset_name, + 'confidence': + self._esc_charset_prober.get_confidence(), + 'language': + self._esc_charset_prober.language} + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': prober.charset_name, + 'confidence': prober.get_confidence(), + 'language': prober.language} + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self): + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug('no data received!') + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {'encoding': 'ascii', + 'confidence': 1.0, + 'language': ''} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + lower_charset_name = max_prober.charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith('iso-8859'): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get(lower_charset_name, + charset_name) + self.result = {'encoding': charset_name, + 'confidence': confidence, + 'language': max_prober.language} + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() <= logging.DEBUG: + if self.result['encoding'] is None: + self.logger.debug('no probers hit minimum threshold') + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + else: + self.logger.debug('%s %s confidence = %s', + group_prober.charset_name, + group_prober.language, + group_prober.get_confidence()) + return self.result diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py b/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py new file mode 100644 index 000000000..6c3196cc2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState +from .codingstatemachine import CodingStateMachine +from .mbcssm import UTF8_SM_MODEL + + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self): + super(UTF8Prober, self).__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = None + self.reset() + + def reset(self): + super(UTF8Prober, self).reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self): + return "utf-8" + + @property + def language(self): + return "" + + def feed(self, byte_str): + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars + return 1.0 - unlike + else: + return unlike diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/version.py b/venv/Lib/site-packages/pip/_vendor/chardet/version.py new file mode 100644 index 000000000..70369b9d6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setup.py and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "4.0.0" +VERSION = __version__.split('.') diff --git a/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py b/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 000000000..b149ed79b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,6 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.4' diff --git a/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21da8f0278a4d7381a641b5fd6189e2c0ec9d23f GIT binary patch literal 445 zcmYjN%}N6?5Z>%xx7{vY`wDw#E83HYs4dllh*(7k!LZ#865VV{lC9P^@(p~JfG1C$ zyn8aE2oB_%%ul|_H!{n5p0n56x8u#e82Jc<3RYuNO4m$jE*nZ;JhcU_0AFmnN3PufO)gul z3o?^sD_CPRIpOBCU6MIh+6*t0yl15$Yu2pE8DA2|&xR`}r?_L9toUl|1~ipa<3H(R dNA>w%Bc@wh~k*j$@J(<3x6%l*O>!c!p%bvCYf| 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 Q5(h~b-;fool(=5`AN3PuNdN!< literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c24069281e1a7ae29c282edf6661e23d9154f4d8 GIT binary patch literal 3952 zcmaJ^&2tmU6`$_;&`6er%!fa~fH8rf4QqBGU$sS%#j*{q5*B5dI6LKJYCPStM~pP0 zr-iXgR3&Au$u(E@xc@xu-rSt%QIKEg>PWAVeA?3Z63ZI^Tygmuh<^< z#@i*Y1gkr(b6)w0!3u2box#R<@zC@pxZOJ6y5L;|>7^aQFZz?fO+h=YB{SY--7oQp zL$X8pWi7t~Z6?oqvs&)7u7Y%SAe|jZuX)$Cv<$NA1KIU~Y|gu(W#d3E@iH%A3wzl7 z#$e`+!OVH@rk)9Vd@}duVD8Pq+#h+jV9sqg$*qCpmOsskY#fmKF)Oii&=$DSB&^IP z-Vtwxoo5#`idWesHVGrw*c6+FkvnXLU50j^U177(RuJ9Fwdh|*M@P{=fqaivUaJr_ zUW>LxAogoXz_@?`cQ5M5{Vq>KoO1kt`N49A@dVy~SU{N3Fuo&e-vLp?7Y+<*^6%~H zS6eSqF4C>_UYZ75OG(&k^Nvino<#C#Z+mMc5~=+Bxky?(lv}TP=k*rou$4xVf8Gtk zm%$ECx4KdHo)0pXh&H)%WMAPi6M4E`_3BVd9 z9W}Q1SV|FX_asl1n~Kc{pxsj!*xs|?P1NqSvjO}%L^~fp$QR+Q!kaz?!bsm}8Lf;` z;7!e&E#xhD;b@xXG<7x211;!zg%)j&O@i-K=-R>jom=eg|NW~}#>52ds>nBr{6?Gy zR$M@G5eLnUq^qnNZ%XAXCQ>GCWv@p&yHY?dGr*Uvl*i2z-xO$OmGgbT&iAiDCq)OM zqzFHYOapa39L%4M`oiGTH876r`<7#|=WXK<8(Aihxh-O2wrx{dEV`HiQVnboOyuLoN+0fPyt0#DE z?K}q^I3(bLmIixMv~^}>us2xy_|TU40_JLii`&SdVL|6S zga!}Ve#FEb9Ihbw42jn7M9Ir%J4q9!r??(^XJ%!Kil4zih^9Gy&_wuF;ni+E(42yg zqK6K3rCL`t?Kg&gxxwGaVM42z;-|2NvI9tQX{Pr_+D@JEX&d)O_*_yT;+Mc|gs9W; zgUbxjeGMISp+7+!^+}5`@{*(_;2^`lB%+Kig>sP4X>6fBnl>`r#eHc?sE%6pTdQwc zm_V(T^9zF-KGA&&{haPo2}u(yXv=)x?wg1Mc(}k!{5_INLCixVCXq}bL1@L7NH8r5 zba^p@1Z}KlMsPcQD^#2eIJbLzO*jE-^-`%OvX(P{D59zOL1?E>pgq0%E7&|mgyhVCs5rF#?<| z?Y`AVmocT&w;?6iZ=r4F^c|yNtGJoBW3pEchuacL9W=ADmvl0o^;e=e9^|}wPj-8< z3io^vN-iE}InRC_#64cgWr$h23~*xJ*^#@-PGumZMn{cxdToDCL{jq34+qZKTOEQ* zDQ0pPZlVJGC@n#Xbg00a_iVJj0_h1_?;&_JF62D~yv7PRjg=!Uz{=KG*?kAGLX-}I zxlfcDM%SIW-2pIn=P=JNj8qbL=b+F?I#@M;Fi8ZiA{p~dC_Ze7+{gNyI|&y(^Ut^@F76Uhho(X{DxYP+ zd>^_{a_VAS;1uORm9|u?DFCRZXkBFO3Hcqcx|b+ta1V_cKDAW%R{$u z8Edg#uZf@Ivf9oV?E>9YUHQZwBaya<(-3~KigU{!VYMlq;c%|@yt>)gSl9Qq4h@am z2+}(H>*B+Gn3ZOa(1vLrh-F$3S6PH%HnN}$DG~agY1^S?>Ylf#bL5&Xg_bz~buHwe i+!}CngoAak0Q=zPvN@;w*($D6wA@_5a?iVkV&Q*F&WP9m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1074e24a1c451be919df5d3a2d1d7557feee5649 GIT binary patch literal 4569 zcmaJ_Npl;=6`r0AgM}oxNTg-SW-QqWl1NJIBu*5^A_*>bnF1A%j4Xu76o?*DfI)!i z8AujuSe2^i>f|qww(}eNEv z=dbtQd&4lkp~moIqp^e%65$4CZR3d57&A5uZgT6D!L7jjn^m*Wwz-40quMswF3+Hy zQEi8N+eRsS!LUtEca?Tp2f~N={;$7%H4KXTwtvsXsZj8h((0-xNwNLL^2?iQeJw#->Dx3zAtmW zf7Io@Ht_}D|4XmlPDY%S&E@iE(q7rzU6am6b#1L8?ef#*inOY0t1|Owd1I}zvn<`G zYnz)}Po#}0PhT72I^Lnkcf9;yZ#N7?xL56kVSR74+vptyohaPfXhxs(_V?DCB8=`n z7Ts3Ri1wZbo#%U-&HcTw83lKb>y0n!he5b^+&sSTV~lsj{RSyoKdRq{9iu=T-8+6M zNKaBOoB{C+n+^XwrpB+f_yQJPZgE)GQP$m#UbX|FEa_qP#a}@xC0FE8ivp1e5b0L7 zs*jd8rMpu7bmNm9Ijw7d1y7q!C|xyQ4w7=ZHwp63N{8E_MP5}e21;ZwW_E(>m&&w$JESw4rA zdGuW4*U?kpxA{C@05`$!@EiP1aFgI}@>}4h_*?vK%rEi`O!cnJ0Ej#ANrNDmKE#vQ zWt8w^kjOY=k|tsOS`m_EZ?co=RHpuDgGSPa_`YZFp%FuzB?#jaXFf#C zR4o>>$ZT0C_KKl;9OX%?A}9n43Q0Ij16j#Jg0vL3h>++dQ&41-&hvV^7mSH7Ze!?& zC?Q3G9GhgnAv4nV^LA;u(^SrI7t+HF!#$zOo{xgq)cGu9h6=A;ktsrA3zL<2TAdax$s zHcnx4$jo9>T#F4G@QAFIy=9n&Z+391(w-^fk?O-5C$7nSyo z!q31v@6))g9b>Bl*EE%M85ijR`aYum-+&B+phXQbZTb+OnmSZaxy;mb29dHA zU|>Qms3l5RtWTek%t~;qV#cLX{T2&0P;@#_hJuMEQWL3#BjOPfsFZ2Z&p;9+AcCG5 z=fFb5TIQ(*EEK_6r&h$y?AVIgxe08Ow^^m+i2GQnVyajKr-J8NwJPVg`vG<*_%iB8 z(!}wCe5&-2?z4J_BTtUT7C~x1LQye~;vF210-a|2It|Xv$Qd0mJRK0q9gv&!fw6&N zVD>{oFtkIP$h&2dYt|5^saZB7aftiLfgkcX7vPb~}=NF4@zPc8hpObG+kZ zY)lhbpg5Qg?qaHP5zebM36)OfQgw!>UF|8-C-Ia^UO-M{%1e`!9pNS8%o_HRAgIFX zN|{CQ;&&i&Vc?%p%~A&uEHuzayK$XnRm@T*>8ti9%uBpwTYYc6nW}fmijgx*@tiK4 z3Xdyblx9Gj@RVkh@vRv7{?v(`7JP*S<{x5buq_{?bzkWAzxV})CNgh4TIRR-Lhc{qVAjl1EuW@wb9D7 zoO$Ea1#s9GrnpNzr)b@YiT(!wj|T(dh-1{n$P`8_jBJdII2bWC_|CFO z0Cw!fnRA=bLCXPr###Q{Nc)l<4l!21Tqg}5DlxkHTBg1}1bP2Ewutmc2T+mZzNTV} z0 zg=p~yB4d8aY4f(5o!}oB4i`aEFOi34;G3fI6H)Tef_XBNp7z1wkz{3J6AMM1a=PTe zYARXj5T?VosdSZ7gP^_BjM_nZQFJ0|jf<;3RMf~nv8}qDPYzuWDIV)}DnlStuH!2S z@e-8^M(d^Nu}@WT7aQqga+|nc5TP5IpgWPED~QV5I> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py b/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 000000000..115494810 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2019 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.3.3' + +class DistlibException(Exception): + pass + +try: + from logging import NullHandler +except ImportError: # pragma: no cover + class NullHandler(logging.Handler): + def handle(self, record): pass + def emit(self, record): pass + def createLock(self): self.lock = None + +logger = logging.getLogger(__name__) +logger.addHandler(NullHandler()) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0da88d7924bb97a125e09f744735a99c35698aa8 GIT binary patch literal 1064 zcmZ`&!EVz)5S_I*w&S!A3hEbdAcv+%y&;4uwWUR>B1DA{mc`2PF2U5X!>&_k#I601 z_Siq*TUO%4i8D7YFtcfCRA8bV?RaM1%)Fh{%gZsKe0lSAxZ?qQBV$n_G&b>=5|sqW zN=QI@3EKtfOMVKHEAPZl{8@zFRtaOCa0aiSTH&Bt#}63L52FJaVsxnBeSq=&HB{^) zC^!pMbk35tYM;f5pTId|SmgkE(RZu}gIVigf1|&Vld&iajZHje36+9`Nk}}G=-KXe zVVbfS?tIGCq$%oZ(DQ91M3s$|5H=QKT+3-m_az}dOtW(Cxd0s?no~dJ)}!>LQQD+0 zrp9FHcAZbhs%lKSTQqyqVfwVtrdfNg>-Q>e(j!$JrTfJ&HASP=CRu)%jg(0z#bjNe zPu6-}&bwL{qNs{Si2meQBj?beF*vFSICEcm%ytITvfRrmSt|Y4@RYSlS@%(04==q_ zNc{P`BwV&+fOboU#HOZ~%qj6o=uRwd;rT)3B^uX7#(7$ z4c@udRw$Q%ILuZSI_}Ti|E;Inn4@X+=DslZljuY7vag3Q}b6scj|+N zF@!7OGYB`5D}#*kvd#~COw+>LtQF^4WsTa$hvjy0X#Z`G4UFF=%M`DBxb#^ZYKh Mx5~Uc+O0~~M;@O2MK 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d75fcb904be975ac5f71d3a19bb02526d547f944 GIT binary patch literal 42618 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 ...' % action) + + thedir = convert_path(words[1]) + patterns = [convert_path(word) for word in words[2:]] + + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistlibException( + '%r expects a single ' % action) + + dir_pattern = convert_path(words[1]) + + else: + raise DistlibException('unknown action %r' % action) + + return action, patterns, thedir, dir_pattern + + def _include_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. + + Patterns are not quite the same as implemented by the 'fnmatch' + module: '*' and '?' match non-special characters, where "special" + is platform-dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found. + """ + # XXX docstring lying about what the special chars are? + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.files.add(name) + found = True + return found + + def _exclude_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. + + Other parameters are the same as for 'include_pattern()', above. + The list 'self.files' is modified in place. Return True if files are + found. + + This API is public to allow e.g. exclusion of SCM subdirs, e.g. when + packaging source distributions + """ + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + for f in list(self.files): + if pattern_re.search(f): + self.files.remove(f) + found = True + return found + + def _translate_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Translate a shell-like wildcard pattern to a compiled regular + expression. + + Return the compiled regex. If 'is_regex' true, + then 'pattern' is directly compiled to a regex (if it's a string) + or just returned as-is (assumes it's a regex object). + """ + if is_regex: + if isinstance(pattern, str): + return re.compile(pattern) + else: + return pattern + + if _PYTHON_VERSION > (3, 2): + # ditch start and end characters + start, _, end = self._glob_to_re('_').partition('_') + + if pattern: + pattern_re = self._glob_to_re(pattern) + if _PYTHON_VERSION > (3, 2): + assert pattern_re.startswith(start) and pattern_re.endswith(end) + else: + pattern_re = '' + + base = re.escape(os.path.join(self.base, '')) + if prefix is not None: + # ditch end of pattern character + if _PYTHON_VERSION <= (3, 2): + empty_pattern = self._glob_to_re('') + prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] + else: + prefix_re = self._glob_to_re(prefix) + assert prefix_re.startswith(start) and prefix_re.endswith(end) + prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] + sep = os.sep + if os.sep == '\\': + sep = r'\\' + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + sep.join((prefix_re, + '.*' + pattern_re)) + else: + pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] + pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, + pattern_re, end) + else: # no prefix -- respect anchor flag + if anchor: + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + pattern_re + else: + pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) + + return re.compile(pattern_re) + + def _glob_to_re(self, pattern): + """Translate a shell-like glob pattern to a regular expression. + + Return a string containing the regex. Differs from + 'fnmatch.translate()' in that '*' does not match "special characters" + (which are platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((? y, + '!=': lambda x, y: x != y, + '<': lambda x, y: x < y, + '<=': lambda x, y: x == y or x < y, + '>': lambda x, y: x > y, + '>=': lambda x, y: x == y or x > y, + 'and': lambda x, y: x and y, + 'or': lambda x, y: x or y, + 'in': lambda x, y: x in y, + 'not in': lambda x, y: x not in y, + } + + def evaluate(self, expr, context): + """ + Evaluate a marker expression returned by the :func:`parse_requirement` + function in the specified context. + """ + if isinstance(expr, string_types): + if expr[0] in '\'"': + result = expr[1:-1] + else: + if expr not in context: + raise SyntaxError('unknown variable: %s' % expr) + result = context[expr] + else: + assert isinstance(expr, dict) + op = expr['op'] + if op not in self.operations: + raise NotImplementedError('op not implemented: %s' % op) + elhs = expr['lhs'] + erhs = expr['rhs'] + if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): + raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) + + lhs = self.evaluate(elhs, context) + rhs = self.evaluate(erhs, context) + if ((elhs == 'python_version' or erhs == 'python_version') and + op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): + lhs = NV(lhs) + rhs = NV(rhs) + elif elhs == 'python_version' and op in ('in', 'not in'): + lhs = NV(lhs) + rhs = _get_versions(rhs) + result = self.operations[op](lhs, rhs) + return result + +def default_context(): + def format_full_version(info): + version = '%s.%s.%s' % (info.major, info.minor, info.micro) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + if hasattr(sys, 'implementation'): + implementation_version = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + implementation_version = '0' + implementation_name = '' + + result = { + 'implementation_name': implementation_name, + 'implementation_version': implementation_version, + 'os_name': os.name, + 'platform_machine': platform.machine(), + 'platform_python_implementation': platform.python_implementation(), + 'platform_release': platform.release(), + 'platform_system': platform.system(), + 'platform_version': platform.version(), + 'platform_in_venv': str(in_venv()), + 'python_full_version': platform.python_version(), + 'python_version': platform.python_version()[:3], + 'sys_platform': sys.platform, + } + return result + +DEFAULT_CONTEXT = default_context() +del default_context + +evaluator = Evaluator() + +def interpret(marker, execution_context=None): + """ + Interpret a marker and return a result depending on environment. + + :param marker: The marker to interpret. + :type marker: str + :param execution_context: The context used for name lookup. + :type execution_context: mapping + """ + try: + expr, rest = parse_marker(marker) + except Exception as e: + raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) + if rest and rest[0] != '#': + raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) + context = dict(DEFAULT_CONTEXT) + if execution_context: + context.update(execution_context) + return evaluator.evaluate(expr, context) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py b/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 000000000..6a26b0ab2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1058 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Implementation of the Metadata for Python packages PEPs. + +Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and withdrawn 2.0). +""" +from __future__ import unicode_literals + +import codecs +from email import message_from_file +import json +import logging +import re + + +from . import DistlibException, __version__ +from .compat import StringIO, string_types, text_type +from .markers import interpret +from .util import extract_by_key, get_extras +from .version import get_scheme, PEP440_VERSION_RE + +logger = logging.getLogger(__name__) + + +class MetadataMissingError(DistlibException): + """A required metadata is missing""" + + +class MetadataConflictError(DistlibException): + """Attempt to read or write metadata fields that are conflictual.""" + + +class MetadataUnrecognizedVersionError(DistlibException): + """Unknown metadata version number.""" + + +class MetadataInvalidError(DistlibException): + """A metadata value is invalid""" + +# public API of this module +__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] + +# Encoding used for the PKG-INFO files +PKG_INFO_ENCODING = 'utf-8' + +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.1' + +_LINE_PREFIX_1_2 = re.compile('\n \\|') +_LINE_PREFIX_PRE_1_2 = re.compile('\n ') +_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License') + +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', + 'Download-URL') + +_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') + +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') + +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + +# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in +# the metadata. Include them in the tuple literal below to allow them +# (for now). +# Ditto for Obsoletes - see issue #140. +_566_FIELDS = _426_FIELDS + ('Description-Content-Type', + 'Requires', 'Provides', 'Obsoletes') + +_566_MARKERS = ('Description-Content-Type',) + +_ALL_FIELDS = set() +_ALL_FIELDS.update(_241_FIELDS) +_ALL_FIELDS.update(_314_FIELDS) +_ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) +_ALL_FIELDS.update(_566_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') + + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + elif version in ('1.3', '2.1'): + # avoid adding field names if already there + return _345_FIELDS + tuple(f for f in _566_FIELDS if f not in _345_FIELDS) + elif version == '2.0': + return _426_FIELDS + raise MetadataUnrecognizedVersionError(version) + + +def _best_version(fields): + """Detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + for marker in markers: + if marker in keys: + return True + return False + + keys = [] + for key, value in fields.items(): + if value in ([], 'UNKNOWN', None): + continue + keys.append(key) + + possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.0', '2.1'] + + # first let's try to see if a field is not part of one of the version + for key in keys: + if key not in _241_FIELDS and '1.0' in possible_versions: + possible_versions.remove('1.0') + logger.debug('Removed 1.0 due to %s', key) + if key not in _314_FIELDS and '1.1' in possible_versions: + possible_versions.remove('1.1') + logger.debug('Removed 1.1 due to %s', key) + if key not in _345_FIELDS and '1.2' in possible_versions: + possible_versions.remove('1.2') + logger.debug('Removed 1.2 due to %s', key) + if key not in _566_FIELDS and '1.3' in possible_versions: + possible_versions.remove('1.3') + logger.debug('Removed 1.3 due to %s', key) + if key not in _566_FIELDS and '2.1' in possible_versions: + if key != 'Description': # In 2.1, description allowed after headers + possible_versions.remove('2.1') + logger.debug('Removed 2.1 due to %s', key) + if key not in _426_FIELDS and '2.0' in possible_versions: + possible_versions.remove('2.0') + logger.debug('Removed 2.0 due to %s', key) + + # possible_version contains qualified versions + if len(possible_versions) == 1: + return possible_versions[0] # found ! + elif len(possible_versions) == 0: + logger.debug('Out of options - unknown metadata set: %s', fields) + raise MetadataConflictError('Unknown metadata set') + + # let's see if one unique marker is found + is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) + is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) + is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) + is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_0) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.0/2.1 fields') + + # we have the choice, 1.0, or 1.2, or 2.0 + # - 1.0 has a broken Summary field but works with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but has little adoption + # - 2.0 adds more features and is very new + if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_0: + # we couldn't find any specific marker + if PKG_INFO_PREFERRED_VERSION in possible_versions: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + if is_1_2: + return '1.2' + if is_2_1: + return '2.1' + + return '2.0' + +# This follows the rules about transforming keys as described in +# https://www.python.org/dev/peps/pep-0566/#id17 +_ATTR2FIELD = { + name.lower().replace("-", "_"): name for name in _ALL_FIELDS +} +_FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()} + +_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) +_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension') +_LISTTUPLEFIELDS = ('Project-URL',) + +_ELEMENTSFIELD = ('Keywords',) + +_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') + +_MISSING = object() + +_FILESAFE = re.compile('[^A-Za-z0-9.]+') + + +def _get_name_and_version(name, version, for_filename=False): + """Return the distribution name with version. + + If for_filename is true, return a filename-escaped form.""" + if for_filename: + # For both name and version any runs of non-alphanumeric or '.' + # characters are replaced with a single '-'. Additionally any + # spaces in the version string become '.' + name = _FILESAFE.sub('-', name) + version = _FILESAFE.sub('-', version.replace(' ', '.')) + return '%s-%s' % (name, version) + + +class LegacyMetadata(object): + """The legacy metadata of a release. + + Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can + instantiate the class with one of these arguments (or none): + - *path*, the path to a metadata file + - *fileobj* give a file-like object with metadata as content + - *mapping* is a dict-like object + - *scheme* is a version scheme name + """ + # TODO document the mapping API and UNKNOWN default key + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._fields = {} + self.requires_files = [] + self._dependencies = None + self.scheme = scheme + if path is not None: + self.read(path) + elif fileobj is not None: + self.read_file(fileobj) + elif mapping is not None: + self.update(mapping) + self.set_metadata_version() + + def set_metadata_version(self): + self._fields['Metadata-Version'] = _best_version(self._fields) + + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + return self.set(name, value) + + def __delitem__(self, name): + field_name = self._convert_name(name) + try: + del self._fields[field_name] + except KeyError: + raise KeyError(name) + + def __contains__(self, name): + return (name in self._fields or + self._convert_name(name) in self._fields) + + def _convert_name(self, name): + if name in _ALL_FIELDS: + return name + name = name.replace('-', '_').lower() + return _ATTR2FIELD.get(name, name) + + def _default_value(self, name): + if name in _LISTFIELDS or name in _ELEMENTSFIELD: + return [] + return 'UNKNOWN' + + def _remove_line_prefix(self, value): + if self.metadata_version in ('1.0', '1.1'): + return _LINE_PREFIX_PRE_1_2.sub('\n', value) + else: + return _LINE_PREFIX_1_2.sub('\n', value) + + def __getattr__(self, name): + if name in _ATTR2FIELD: + return self[name] + raise AttributeError(name) + + # + # Public API + # + +# dependencies = property(_get_dependencies, _set_dependencies) + + def get_fullname(self, filesafe=False): + """Return the distribution name with version. + + If filesafe is true, return a filename-escaped form.""" + return _get_name_and_version(self['Name'], self['Version'], filesafe) + + def is_field(self, name): + """return True if name is a valid metadata key""" + name = self._convert_name(name) + return name in _ALL_FIELDS + + def is_multi_field(self, name): + name = self._convert_name(name) + return name in _LISTFIELDS + + def read(self, filepath): + """Read the metadata values from a file path.""" + fp = codecs.open(filepath, 'r', encoding='utf-8') + try: + self.read_file(fp) + finally: + fp.close() + + def read_file(self, fileob): + """Read the metadata values from a file object.""" + msg = message_from_file(fileob) + self._fields['Metadata-Version'] = msg['metadata-version'] + + # When reading, get all the fields we can + for field in _ALL_FIELDS: + if field not in msg: + continue + if field in _LISTFIELDS: + # we can have multiple lines + values = msg.get_all(field) + if field in _LISTTUPLEFIELDS and values is not None: + values = [tuple(value.split(',')) for value in values] + self.set(field, values) + else: + # single line + value = msg[field] + if value is not None and value != 'UNKNOWN': + self.set(field, value) + + # PEP 566 specifies that the body be used for the description, if + # available + body = msg.get_payload() + self["Description"] = body if body else self["Description"] + # logger.debug('Attempting to set metadata for %s', self) + # self.set_metadata_version() + + def write(self, filepath, skip_unknown=False): + """Write the metadata fields to filepath.""" + fp = codecs.open(filepath, 'w', encoding='utf-8') + try: + self.write_file(fp, skip_unknown) + finally: + fp.close() + + def write_file(self, fileobject, skip_unknown=False): + """Write the PKG-INFO format data to a file object.""" + self.set_metadata_version() + + for field in _version2fieldlist(self['Metadata-Version']): + values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue + if field in _ELEMENTSFIELD: + self._write_field(fileobject, field, ','.join(values)) + continue + if field not in _LISTFIELDS: + if field == 'Description': + if self.metadata_version in ('1.0', '1.1'): + values = values.replace('\n', '\n ') + else: + values = values.replace('\n', '\n |') + values = [values] + + if field in _LISTTUPLEFIELDS: + values = [','.join(value) for value in values] + + for value in values: + self._write_field(fileobject, field, value) + + def update(self, other=None, **kwargs): + """Set metadata values from the given iterable `other` and kwargs. + + Behavior is like `dict.update`: If `other` has a ``keys`` method, + they are looped over and ``self[key]`` is assigned ``other[key]``. + Else, ``other`` is an iterable of ``(key, value)`` iterables. + + Keys that don't match a metadata field or that have an empty value are + dropped. + """ + def _set(key, value): + if key in _ATTR2FIELD and value: + self.set(self._convert_name(key), value) + + if not other: + # other is None or empty container + pass + elif hasattr(other, 'keys'): + for k in other.keys(): + _set(k, other[k]) + else: + for k, v in other: + _set(k, v) + + if kwargs: + for k, v in kwargs.items(): + _set(k, v) + + def set(self, name, value): + """Control then set a metadata field.""" + name = self._convert_name(name) + + if ((name in _ELEMENTSFIELD or name == 'Platform') and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [v.strip() for v in value.split(',')] + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [value] + else: + value = [] + + if logger.isEnabledFor(logging.WARNING): + project_name = self['Name'] + + scheme = get_scheme(self.scheme) + if name in _PREDICATE_FIELDS and value is not None: + for v in value: + # check that the values are valid + if not scheme.is_valid_matcher(v.split(';')[0]): + logger.warning( + "'%s': '%s' is not valid (field '%s')", + project_name, v, name) + # FIXME this rejects UNKNOWN, is that right? + elif name in _VERSIONS_FIELDS and value is not None: + if not scheme.is_valid_constraint_list(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + elif name in _VERSION_FIELDS and value is not None: + if not scheme.is_valid_version(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + + if name in _UNICODEFIELDS: + if name == 'Description': + value = self._remove_line_prefix(value) + + self._fields[name] = value + + def get(self, name, default=_MISSING): + """Get a metadata field.""" + name = self._convert_name(name) + if name not in self._fields: + if default is _MISSING: + default = self._default_value(name) + return default + if name in _UNICODEFIELDS: + value = self._fields[name] + return value + elif name in _LISTFIELDS: + value = self._fields[name] + if value is None: + return [] + res = [] + for val in value: + if name not in _LISTTUPLEFIELDS: + res.append(val) + else: + # That's for Project-URL + res.append((val[0], val[1])) + return res + + elif name in _ELEMENTSFIELD: + value = self._fields[name] + if isinstance(value, string_types): + return value.split(',') + return self._fields[name] + + def check(self, strict=False): + """Check if the metadata is compliant. If strict is True then raise if + no Name or Version are provided""" + self.set_metadata_version() + + # XXX should check the versions (if the file was loaded) + missing, warnings = [], [] + + for attr in ('Name', 'Version'): # required by PEP 345 + if attr not in self: + missing.append(attr) + + if strict and missing != []: + msg = 'missing required metadata: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + + for attr in ('Home-page', 'Author'): + if attr not in self: + missing.append(attr) + + # checking metadata 1.2 (XXX needs to check 1.1, 1.0) + if self['Metadata-Version'] != '1.2': + return missing, warnings + + scheme = get_scheme(self.scheme) + + def are_valid_constraints(value): + for v in value: + if not scheme.is_valid_matcher(v.split(';')[0]): + return False + return True + + for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), + (_VERSIONS_FIELDS, + scheme.is_valid_constraint_list), + (_VERSION_FIELDS, + scheme.is_valid_version)): + for field in fields: + value = self.get(field, None) + if value is not None and not controller(value): + warnings.append("Wrong value for '%s': %s" % (field, value)) + + return missing, warnings + + def todict(self, skip_missing=False): + """Return fields as a dict. + + Field names will be converted to use the underscore-lowercase style + instead of hyphen-mixed case (i.e. home_page instead of Home-page). + This is as per https://www.python.org/dev/peps/pep-0566/#id17. + """ + self.set_metadata_version() + + fields = _version2fieldlist(self['Metadata-Version']) + + data = {} + + for field_name in fields: + if not skip_missing or field_name in self._fields: + key = _FIELD2ATTR[field_name] + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in self[field_name]] + + return data + + def add_requirements(self, requirements): + if self['Metadata-Version'] == '1.1': + # we can't have 1.1 metadata *and* Setuptools requires + for field in ('Obsoletes', 'Requires', 'Provides'): + if field in self: + del self[field] + self['Requires-Dist'] += requirements + + # Mapping API + # TODO could add iter* variants + + def keys(self): + return list(_version2fieldlist(self['Metadata-Version'])) + + def __iter__(self): + for key in self.keys(): + yield key + + def values(self): + return [self[key] for key in self.keys()] + + def items(self): + return [(key, self[key]) for key in self.keys()] + + def __repr__(self): + return '<%s %s %s>' % (self.__class__.__name__, self.name, + self.version) + + +METADATA_FILENAME = 'pydist.json' +WHEEL_METADATA_FILENAME = 'metadata.json' +LEGACY_METADATA_FILENAME = 'METADATA' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.0 (JSON) + metadata where possible. If not possible, it wraps a LegacyMetadata + instance which handles the key-value metadata format. + """ + + METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') + + NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) + + VERSION_MATCHER = PEP440_VERSION_RE + + SUMMARY_MATCHER = re.compile('.{1,2047}') + + METADATA_VERSION = '2.0' + + GENERATOR = 'distlib (%s)' % __version__ + + MANDATORY_KEYS = { + 'name': (), + 'version': (), + 'summary': ('legacy',), + } + + INDEX_KEYS = ('name version license summary description author ' + 'author_email keywords platform home_page classifiers ' + 'download_url') + + DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' + 'dev_requires provides meta_requires obsoleted_by ' + 'supports_environments') + + SYNTAX_VALIDATORS = { + 'metadata_version': (METADATA_VERSION_MATCHER, ()), + 'name': (NAME_MATCHER, ('legacy',)), + 'version': (VERSION_MATCHER, ('legacy',)), + 'summary': (SUMMARY_MATCHER, ('legacy',)), + } + + __slots__ = ('_legacy', '_data', 'scheme') + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._legacy = None + self._data = None + self.scheme = scheme + #import pdb; pdb.set_trace() + if mapping is not None: + try: + self._validate_mapping(mapping, scheme) + self._data = mapping + except MetadataUnrecognizedVersionError: + self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) + self.validate() + else: + data = None + if path: + with open(path, 'rb') as f: + data = f.read() + elif fileobj: + data = fileobj.read() + if data is None: + # Initialised with no args - to be added + self._data = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + else: + if not isinstance(data, text_type): + data = data.decode('utf-8') + try: + self._data = json.loads(data) + self._validate_mapping(self._data, scheme) + except ValueError: + # Note: MetadataUnrecognizedVersionError does not + # inherit from ValueError (it's a DistlibException, + # which should not inherit from ValueError). + # The ValueError comes from the json.load - if that + # succeeds and we get a validation error, we want + # that to propagate + self._legacy = LegacyMetadata(fileobj=StringIO(data), + scheme=scheme) + self.validate() + + common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) + + none_list = (None, list) + none_dict = (None, dict) + + mapped_keys = { + 'run_requires': ('Requires-Dist', list), + 'build_requires': ('Setup-Requires-Dist', list), + 'dev_requires': none_list, + 'test_requires': none_list, + 'meta_requires': none_list, + 'extras': ('Provides-Extra', list), + 'modules': none_list, + 'namespaces': none_list, + 'exports': none_dict, + 'commands': none_dict, + 'classifiers': ('Classifier', list), + 'source_url': ('Download-URL', None), + 'metadata_version': ('Metadata-Version', None), + } + + del none_list, none_dict + + def __getattribute__(self, key): + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, maker = mapped[key] + if self._legacy: + if lk is None: + result = None if maker is None else maker() + else: + result = self._legacy.get(lk) + else: + value = None if maker is None else maker() + if key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + result = self._data.get(key, value) + else: + # special cases for PEP 459 + sentinel = object() + result = sentinel + d = self._data.get('extensions') + if d: + if key == 'commands': + result = d.get('python.commands', value) + elif key == 'classifiers': + d = d.get('python.details') + if d: + result = d.get(key, value) + else: + d = d.get('python.exports') + if not d: + d = self._data.get('python.exports') + if d: + result = d.get(key, value) + if result is sentinel: + result = value + elif key not in common: + result = object.__getattribute__(self, key) + elif self._legacy: + result = self._legacy.get(key) + else: + result = self._data.get(key) + return result + + def _validate_value(self, key, value, scheme=None): + if key in self.SYNTAX_VALIDATORS: + pattern, exclusions = self.SYNTAX_VALIDATORS[key] + if (scheme or self.scheme) not in exclusions: + m = pattern.match(value) + if not m: + raise MetadataInvalidError("'%s' is an invalid value for " + "the '%s' property" % (value, + key)) + + def __setattr__(self, key, value): + self._validate_value(key, value) + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, _ = mapped[key] + if self._legacy: + if lk is None: + raise NotImplementedError + self._legacy[lk] = value + elif key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + self._data[key] = value + else: + # special cases for PEP 459 + d = self._data.setdefault('extensions', {}) + if key == 'commands': + d['python.commands'] = value + elif key == 'classifiers': + d = d.setdefault('python.details', {}) + d[key] = value + else: + d = d.setdefault('python.exports', {}) + d[key] = value + elif key not in common: + object.__setattr__(self, key, value) + else: + if key == 'keywords': + if isinstance(value, string_types): + value = value.strip() + if value: + value = value.split() + else: + value = [] + if self._legacy: + self._legacy[key] = value + else: + self._data[key] = value + + @property + def name_and_version(self): + return _get_name_and_version(self.name, self.version, True) + + @property + def provides(self): + if self._legacy: + result = self._legacy['Provides-Dist'] + else: + result = self._data.setdefault('provides', []) + s = '%s (%s)' % (self.name, self.version) + if s not in result: + result.append(s) + return result + + @provides.setter + def provides(self, value): + if self._legacy: + self._legacy['Provides-Dist'] = value + else: + self._data['provides'] = value + + def get_requirements(self, reqts, extras=None, env=None): + """ + Base method to get dependencies, given a set of extras + to satisfy and an optional environment context. + :param reqts: A list of sometimes-wanted dependencies, + perhaps dependent on extras and environment. + :param extras: A list of optional components being requested. + :param env: An optional environment for marker evaluation. + """ + if self._legacy: + result = reqts + else: + result = [] + extras = get_extras(extras or [], self.extras) + for d in reqts: + if 'extra' not in d and 'environment' not in d: + # unconditional + include = True + else: + if 'extra' not in d: + # Not extra-dependent - only environment-dependent + include = True + else: + include = d.get('extra') in extras + if include: + # Not excluded because of extras, check environment + marker = d.get('environment') + if marker: + include = interpret(marker, env) + if include: + result.extend(d['requires']) + for key in ('build', 'dev', 'test'): + e = ':%s:' % key + if e in extras: + extras.remove(e) + # A recursive call, but it should terminate since 'test' + # has been removed from the extras + reqts = self._data.get('%s_requires' % key, []) + result.extend(self.get_requirements(reqts, extras=extras, + env=env)) + return result + + @property + def dictionary(self): + if self._legacy: + return self._from_legacy() + return self._data + + @property + def dependencies(self): + if self._legacy: + raise NotImplementedError + else: + return extract_by_key(self._data, self.DEPENDENCY_KEYS) + + @dependencies.setter + def dependencies(self, value): + if self._legacy: + raise NotImplementedError + else: + self._data.update(value) + + def _validate_mapping(self, mapping, scheme): + if mapping.get('metadata_version') != self.METADATA_VERSION: + raise MetadataUnrecognizedVersionError() + missing = [] + for key, exclusions in self.MANDATORY_KEYS.items(): + if key not in mapping: + if scheme not in exclusions: + missing.append(key) + if missing: + msg = 'Missing metadata items: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + for k, v in mapping.items(): + self._validate_value(k, v, scheme) + + def validate(self): + if self._legacy: + missing, warnings = self._legacy.check(True) + if missing or warnings: + logger.warning('Metadata: missing: %s, warnings: %s', + missing, warnings) + else: + self._validate_mapping(self._data, self.scheme) + + def todict(self): + if self._legacy: + return self._legacy.todict(True) + else: + result = extract_by_key(self._data, self.INDEX_KEYS) + return result + + def _from_legacy(self): + assert self._legacy and not self._data + result = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + lmd = self._legacy.todict(True) # skip missing ones + for k in ('name', 'version', 'license', 'summary', 'description', + 'classifier'): + if k in lmd: + if k == 'classifier': + nk = 'classifiers' + else: + nk = k + result[nk] = lmd[k] + kw = lmd.get('Keywords', []) + if kw == ['']: + kw = [] + result['keywords'] = kw + keys = (('requires_dist', 'run_requires'), + ('setup_requires_dist', 'build_requires')) + for ok, nk in keys: + if ok in lmd and lmd[ok]: + result[nk] = [{'requires': lmd[ok]}] + result['provides'] = self.provides + author = {} + maintainer = {} + return result + + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + ('extensions', 'python.details', 'license'): 'License', + 'summary': 'Summary', + 'description': 'Description', + ('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page', + ('extensions', 'python.project', 'contacts', 0, 'name'): 'Author', + ('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email', + 'source_url': 'Download-URL', + ('extensions', 'python.details', 'classifiers'): 'Classifier', + } + + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == "%s"' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + + assert self._data and not self._legacy + result = LegacyMetadata() + nmd = self._data + # import pdb; pdb.set_trace() + for nk, ok in self.LEGACY_MAPPING.items(): + if not isinstance(nk, tuple): + if nk in nmd: + result[ok] = nmd[nk] + else: + d = nmd + found = True + for k in nk: + try: + d = d[k] + except (KeyError, IndexError): + found = False + break + if found: + result[ok] = d + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) + # TODO: any other fields wanted + return result + + def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): + if [path, fileobj].count(None) != 1: + raise ValueError('Exactly one of path and fileobj is needed') + self.validate() + if legacy: + if self._legacy: + legacy_md = self._legacy + else: + legacy_md = self._to_legacy() + if path: + legacy_md.write(path, skip_unknown=skip_unknown) + else: + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) + else: + if self._legacy: + d = self._from_legacy() + else: + d = self._data + if fileobj: + json.dump(d, fileobj, ensure_ascii=True, indent=2, + sort_keys=True) + else: + with codecs.open(path, 'w', 'utf-8') as f: + json.dump(d, f, ensure_ascii=True, indent=2, + sort_keys=True) + + def add_requirements(self, requirements): + if self._legacy: + self._legacy.add_requirements(requirements) + else: + run_requires = self._data.setdefault('run_requires', []) + always = None + for entry in run_requires: + if 'environment' not in entry and 'extra' not in entry: + always = entry + break + if always is None: + always = { 'requires': requirements } + run_requires.insert(0, always) + else: + rset = set(always['requires']) | set(requirements) + always['requires'] = sorted(rset) + + def __repr__(self): + name = self.name or '(no name)' + version = self.version or 'no version' + return '<%s %s %s (%s)>' % (self.__class__.__name__, + self.metadata_version, name, version) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/resources.py b/venv/Lib/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 000000000..fef52aa10 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,358 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import bisect +import io +import logging +import os +import pkgutil +import sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, Cache + +logger = logging.getLogger(__name__) + + +cache = None # created when needed + + +class ResourceCache(Cache): + def __init__(self, base=None): + if base is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('resource-cache')) + super(ResourceCache, self).__init__(base) + + def is_stale(self, resource, path): + """ + Is the cache stale for the given resource? + + :param resource: The :class:`Resource` being cached. + :param path: The path of the resource in the cache. + :return: True if the cache is stale. + """ + # Cache invalidation is a hard problem :-) + return True + + def get(self, resource): + """ + Get a resource into the cache, + + :param resource: A :class:`Resource` instance. + :return: The pathname of the resource in the cache. + """ + prefix, path = resource.finder.get_cache_info(resource) + if prefix is None: + result = path + else: + result = os.path.join(self.base, self.prefix_to_dir(prefix), path) + dirname = os.path.dirname(result) + if not os.path.isdir(dirname): + os.makedirs(dirname) + if not os.path.exists(result): + stale = True + else: + stale = self.is_stale(resource, path) + if stale: + # write the bytes of the resource to the cache location + with open(result, 'wb') as f: + f.write(resource.bytes) + return result + + +class ResourceBase(object): + def __init__(self, finder, name): + self.finder = finder + self.name = name + + +class Resource(ResourceBase): + """ + A class representing an in-package resource, such as a data file. This is + not normally instantiated by user code, but rather by a + :class:`ResourceFinder` which manages the resource. + """ + is_container = False # Backwards compatibility + + def as_stream(self): + """ + Get the resource as a stream. + + This is not a property to make it obvious that it returns a new stream + each time. + """ + return self.finder.get_stream(self) + + @cached_property + def file_path(self): + global cache + if cache is None: + cache = ResourceCache() + return cache.get(self) + + @cached_property + def bytes(self): + return self.finder.get_bytes(self) + + @cached_property + def size(self): + return self.finder.get_size(self) + + +class ResourceContainer(ResourceBase): + is_container = True # Backwards compatibility + + @cached_property + def resources(self): + return self.finder.get_resources(self) + + +class ResourceFinder(object): + """ + Resource finder for file system resources. + """ + + if sys.platform.startswith('java'): + skipped_extensions = ('.pyc', '.pyo', '.class') + else: + skipped_extensions = ('.pyc', '.pyo') + + def __init__(self, module): + self.module = module + self.loader = getattr(module, '__loader__', None) + self.base = os.path.dirname(getattr(module, '__file__', '')) + + def _adjust_path(self, path): + return os.path.realpath(path) + + def _make_path(self, resource_name): + # Issue #50: need to preserve type of path on Python 2.x + # like os.path._get_sep + if isinstance(resource_name, bytes): # should only happen on 2.x + sep = b'/' + else: + sep = '/' + parts = resource_name.split(sep) + parts.insert(0, self.base) + result = os.path.join(*parts) + return self._adjust_path(result) + + def _find(self, path): + return os.path.exists(path) + + def get_cache_info(self, resource): + return None, resource.path + + def find(self, resource_name): + path = self._make_path(resource_name) + if not self._find(path): + result = None + else: + if self._is_directory(path): + result = ResourceContainer(self, resource_name) + else: + result = Resource(self, resource_name) + result.path = path + return result + + def get_stream(self, resource): + return open(resource.path, 'rb') + + def get_bytes(self, resource): + with open(resource.path, 'rb') as f: + return f.read() + + def get_size(self, resource): + return os.path.getsize(resource.path) + + def get_resources(self, resource): + def allowed(f): + return (f != '__pycache__' and not + f.endswith(self.skipped_extensions)) + return set([f for f in os.listdir(resource.path) if allowed(f)]) + + def is_container(self, resource): + return self._is_directory(resource.path) + + _is_directory = staticmethod(os.path.isdir) + + def iterator(self, resource_name): + resource = self.find(resource_name) + if resource is not None: + todo = [resource] + while todo: + resource = todo.pop(0) + yield resource + if resource.is_container: + rname = resource.name + for name in resource.resources: + if not rname: + new_name = name + else: + new_name = '/'.join([rname, name]) + child = self.find(new_name) + if child.is_container: + todo.append(child) + else: + yield child + + +class ZipResourceFinder(ResourceFinder): + """ + Resource finder for resources in .zip files. + """ + def __init__(self, module): + super(ZipResourceFinder, self).__init__(module) + archive = self.loader.archive + self.prefix_len = 1 + len(archive) + # PyPy doesn't have a _files attr on zipimporter, and you can't set one + if hasattr(self.loader, '_files'): + self._files = self.loader._files + else: + self._files = zipimport._zip_directory_cache[archive] + self.index = sorted(self._files) + + def _adjust_path(self, path): + return path + + def _find(self, path): + path = path[self.prefix_len:] + if path in self._files: + result = True + else: + if path and path[-1] != os.sep: + path = path + os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + if not result: + logger.debug('_find failed: %r %r', path, self.loader.prefix) + else: + logger.debug('_find worked: %r %r', path, self.loader.prefix) + return result + + def get_cache_info(self, resource): + prefix = self.loader.archive + path = resource.path[1 + len(prefix):] + return prefix, path + + def get_bytes(self, resource): + return self.loader.get_data(resource.path) + + def get_stream(self, resource): + return io.BytesIO(self.get_bytes(resource)) + + def get_size(self, resource): + path = resource.path[self.prefix_len:] + return self._files[path][3] + + def get_resources(self, resource): + path = resource.path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + plen = len(path) + result = set() + i = bisect.bisect(self.index, path) + while i < len(self.index): + if not self.index[i].startswith(path): + break + s = self.index[i][plen:] + result.add(s.split(os.sep, 1)[0]) # only immediate children + i += 1 + return result + + def _is_directory(self, path): + path = path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + return result + + +_finder_registry = { + type(None): ResourceFinder, + zipimport.zipimporter: ZipResourceFinder +} + +try: + # In Python 3.6, _frozen_importlib -> _frozen_importlib_external + try: + import _frozen_importlib_external as _fi + except ImportError: + import _frozen_importlib as _fi + _finder_registry[_fi.SourceFileLoader] = ResourceFinder + _finder_registry[_fi.FileFinder] = ResourceFinder + # See issue #146 + _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder + del _fi +except (ImportError, AttributeError): + pass + + +def register_finder(loader, finder_maker): + _finder_registry[type(loader)] = finder_maker + + +_finder_cache = {} + + +def finder(package): + """ + Return a resource finder for a package. + :param package: The name of the package. + :return: A :class:`ResourceFinder` instance for the package. + """ + if package in _finder_cache: + result = _finder_cache[package] + else: + if package not in sys.modules: + __import__(package) + module = sys.modules[package] + path = getattr(module, '__path__', None) + if path is None: + raise DistlibException('You cannot get a finder for a module, ' + 'only for a package') + loader = getattr(module, '__loader__', None) + finder_maker = _finder_registry.get(type(loader)) + if finder_maker is None: + raise DistlibException('Unable to locate finder for %r' % package) + result = finder_maker(module) + _finder_cache[package] = result + return result + + +_dummy_module = types.ModuleType(str('__dummy__')) + + +def finder_for_path(path): + """ + Return a resource finder for a path, which should represent a container. + + :param path: The path. + :return: A :class:`ResourceFinder` instance for the path. + """ + result = None + # calls any path hooks, gets importer into cache + pkgutil.get_importer(path) + loader = sys.path_importer_cache.get(path) + finder = _finder_registry.get(type(loader)) + if finder: + module = _dummy_module + module.__file__ = os.path.join(path, '') + module.__loader__ = loader + result = finder(module) + return result diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py b/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 000000000..913912c7b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,429 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from io import BytesIO +import logging +import os +import re +import struct +import sys + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, get_platform, in_venv) + +logger = logging.getLogger(__name__) + +_DEFAULT_MANIFEST = ''' + + + + + + + + + + + + +'''.strip() + +# check if Python is called on the first line with this expression +FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') +SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- +import re +import sys +from %(module)s import %(import_name)s +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +''' + + +def enquote_executable(executable): + if ' ' in executable: + # make sure we quote only the executable in case of env + # for example /usr/bin/env "/dir with spaces/bin/jython" + # instead of "/usr/bin/env /dir with spaces/bin/jython" + # otherwise whole + if executable.startswith('/usr/bin/env '): + env, _executable = executable.split(' ', 1) + if ' ' in _executable and not _executable.startswith('"'): + executable = '%s "%s"' % (env, _executable) + else: + if not executable.startswith('"'): + executable = '"%s"' % executable + return executable + +# Keep the old name around (for now), as there is at least one project using it! +_enquote_executable = enquote_executable + +class ScriptMaker(object): + """ + A class to copy or create scripts from source scripts or callable + specifications. + """ + script_template = SCRIPT_TEMPLATE + + executable = None # for shebangs + + def __init__(self, source_dir, target_dir, add_launchers=True, + dry_run=False, fileop=None): + self.source_dir = source_dir + self.target_dir = target_dir + self.add_launchers = add_launchers + self.force = False + self.clobber = False + # It only makes sense to set mode bits on POSIX. + self.set_mode = (os.name == 'posix') or (os.name == 'java' and + os._name == 'posix') + self.variants = set(('', 'X.Y')) + self._fileop = fileop or FileOperator(dry_run) + + self._is_nt = os.name == 'nt' or ( + os.name == 'java' and os._name == 'nt') + self.version_info = sys.version_info + + def _get_alternate_executable(self, executable, options): + if options.get('gui', False) and self._is_nt: # pragma: no cover + dn, fn = os.path.split(executable) + fn = fn.replace('python', 'pythonw') + executable = os.path.join(dn, fn) + return executable + + if sys.platform.startswith('java'): # pragma: no cover + def _is_shell(self, executable): + """ + Determine if the specified executable is a script + (contains a #! line) + """ + try: + with open(executable) as fp: + return fp.read(2) == '#!' + except (OSError, IOError): + logger.warning('Failed to open %s', executable) + return False + + def _fix_jython_executable(self, executable): + if self._is_shell(executable): + # Workaround for Jython is not needed on Linux systems. + import java + + if java.lang.System.getProperty('os.name') == 'Linux': + return executable + elif executable.lower().endswith('jython.exe'): + # Use wrapper exe for Jython on Windows + return executable + return '/usr/bin/env %s' % executable + + def _build_shebang(self, executable, post_interp): + """ + Build a shebang line. In the simple case (on Windows, or a shebang line + which is not too long or contains spaces) use a simple formulation for + the shebang. Otherwise, use /bin/sh as the executable, with a contrived + shebang which allows the script to run either under Python or sh, using + suitable quoting. Thanks to Harald Nordgren for his input. + + See also: http://www.in-ulm.de/~mascheck/various/shebang/#length + https://hg.mozilla.org/mozilla-central/file/tip/mach + """ + if os.name != 'posix': + simple_shebang = True + else: + # Add 3 for '#!' prefix and newline suffix. + shebang_length = len(executable) + len(post_interp) + 3 + if sys.platform == 'darwin': + max_shebang_length = 512 + else: + max_shebang_length = 127 + simple_shebang = ((b' ' not in executable) and + (shebang_length <= max_shebang_length)) + + if simple_shebang: + result = b'#!' + executable + post_interp + b'\n' + else: + result = b'#!/bin/sh\n' + result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' + result += b"' '''" + return result + + def _get_shebang(self, encoding, post_interp=b'', options=None): + enquote = True + if self.executable: + executable = self.executable + enquote = False # assume this will be taken care of + elif not sysconfig.is_python_build(): + executable = get_executable() + elif in_venv(): # pragma: no cover + executable = os.path.join(sysconfig.get_path('scripts'), + 'python%s' % sysconfig.get_config_var('EXE')) + else: # pragma: no cover + executable = os.path.join( + sysconfig.get_config_var('BINDIR'), + 'python%s%s' % (sysconfig.get_config_var('VERSION'), + sysconfig.get_config_var('EXE'))) + if not os.path.isfile(executable): + # for Python builds from source on Windows, no Python executables with + # a version suffix are created, so we use python.exe + executable = os.path.join(sysconfig.get_config_var('BINDIR'), + 'python%s' % (sysconfig.get_config_var('EXE'))) + if options: + executable = self._get_alternate_executable(executable, options) + + if sys.platform.startswith('java'): # pragma: no cover + executable = self._fix_jython_executable(executable) + + # Normalise case for Windows - COMMENTED OUT + # executable = os.path.normcase(executable) + # N.B. The normalising operation above has been commented out: See + # issue #124. Although paths in Windows are generally case-insensitive, + # they aren't always. For example, a path containing a ẞ (which is a + # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a + # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by + # Windows as equivalent in path names. + + # If the user didn't specify an executable, it may be necessary to + # cater for executable paths with spaces (not uncommon on Windows) + if enquote: + executable = enquote_executable(executable) + # Issue #51: don't use fsencode, since we later try to + # check that the shebang is decodable using utf-8. + executable = executable.encode('utf-8') + # in case of IronPython, play safe and enable frames support + if (sys.platform == 'cli' and '-X:Frames' not in post_interp + and '-X:FullFrames' not in post_interp): # pragma: no cover + post_interp += b' -X:Frames' + shebang = self._build_shebang(executable, post_interp) + # Python parser starts to read a script using UTF-8 until + # it gets a #coding:xxx cookie. The shebang has to be the + # first line of a file, the #coding:xxx cookie cannot be + # written before. So the shebang has to be decodable from + # UTF-8. + try: + shebang.decode('utf-8') + except UnicodeDecodeError: # pragma: no cover + raise ValueError( + 'The shebang (%r) is not decodable from utf-8' % shebang) + # If the script is encoded to a custom encoding (use a + # #coding:xxx cookie), the shebang has to be decodable from + # the script encoding too. + if encoding != 'utf-8': + try: + shebang.decode(encoding) + except UnicodeDecodeError: # pragma: no cover + raise ValueError( + 'The shebang (%r) is not decodable ' + 'from the script encoding (%r)' % (shebang, encoding)) + return shebang + + def _get_script_text(self, entry): + return self.script_template % dict(module=entry.prefix, + import_name=entry.suffix.split('.')[0], + func=entry.suffix) + + manifest = _DEFAULT_MANIFEST + + def get_manifest(self, exename): + base = os.path.basename(exename) + return self.manifest % base + + def _write_script(self, names, shebang, script_bytes, filenames, ext): + use_launcher = self.add_launchers and self._is_nt + linesep = os.linesep.encode('utf-8') + if not shebang.endswith(linesep): + shebang += linesep + if not use_launcher: + script_bytes = shebang + script_bytes + else: # pragma: no cover + if ext == 'py': + launcher = self._get_launcher('t') + else: + launcher = self._get_launcher('w') + stream = BytesIO() + with ZipFile(stream, 'w') as zf: + zf.writestr('__main__.py', script_bytes) + zip_data = stream.getvalue() + script_bytes = launcher + shebang + zip_data + for name in names: + outname = os.path.join(self.target_dir, name) + if use_launcher: # pragma: no cover + n, e = os.path.splitext(outname) + if e.startswith('.py'): + outname = n + outname = '%s.exe' % outname + try: + self._fileop.write_binary_file(outname, script_bytes) + except Exception: + # Failed writing an executable - it might be in use. + logger.warning('Failed to write executable - trying to ' + 'use .deleteme logic') + dfname = '%s.deleteme' % outname + if os.path.exists(dfname): + os.remove(dfname) # Not allowed to fail here + os.rename(outname, dfname) # nor here + self._fileop.write_binary_file(outname, script_bytes) + logger.debug('Able to replace executable using ' + '.deleteme logic') + try: + os.remove(dfname) + except Exception: + pass # still in use - ignore error + else: + if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover + outname = '%s.%s' % (outname, ext) + if os.path.exists(outname) and not self.clobber: + logger.warning('Skipping existing file %s', outname) + continue + self._fileop.write_binary_file(outname, script_bytes) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + + variant_separator = '-' + + def get_script_filenames(self, name): + result = set() + if '' in self.variants: + result.add(name) + if 'X' in self.variants: + result.add('%s%s' % (name, self.version_info[0])) + if 'X.Y' in self.variants: + result.add('%s%s%s.%s' % (name, self.variant_separator, + self.version_info[0], self.version_info[1])) + return result + + def _make_script(self, entry, filenames, options=None): + post_interp = b'' + if options: + args = options.get('interpreter_args', []) + if args: + args = ' %s' % ' '.join(args) + post_interp = args.encode('utf-8') + shebang = self._get_shebang('utf-8', post_interp, options=options) + script = self._get_script_text(entry).encode('utf-8') + scriptnames = self.get_script_filenames(entry.name) + if options and options.get('gui', False): + ext = 'pyw' + else: + ext = 'py' + self._write_script(scriptnames, shebang, script, filenames, ext) + + def _copy_script(self, script, filenames): + adjust = False + script = os.path.join(self.source_dir, convert_path(script)) + outname = os.path.join(self.target_dir, os.path.basename(script)) + if not self.force and not self._fileop.newer(script, outname): + logger.debug('not copying %s (up-to-date)', script) + return + + # Always open the file, but ignore failures in dry-run mode -- + # that way, we'll get accurate feedback if we can read the + # script. + try: + f = open(script, 'rb') + except IOError: # pragma: no cover + if not self.dry_run: + raise + f = None + else: + first_line = f.readline() + if not first_line: # pragma: no cover + logger.warning('%s is an empty file (skipping)', script) + return + + match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) + if match: + adjust = True + post_interp = match.group(1) or b'' + + if not adjust: + if f: + f.close() + self._fileop.copy_file(script, outname) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + else: + logger.info('copying and adjusting %s -> %s', script, + self.target_dir) + if not self._fileop.dry_run: + encoding, lines = detect_encoding(f.readline) + f.seek(0) + shebang = self._get_shebang(encoding, post_interp) + if b'pythonw' in first_line: # pragma: no cover + ext = 'pyw' + else: + ext = 'py' + n = os.path.basename(outname) + self._write_script([n], shebang, f.read(), filenames, ext) + if f: + f.close() + + @property + def dry_run(self): + return self._fileop.dry_run + + @dry_run.setter + def dry_run(self, value): + self._fileop.dry_run = value + + if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover + # Executable launcher support. + # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ + + def _get_launcher(self, kind): + if struct.calcsize('P') == 8: # 64-bit + bits = '64' + else: + bits = '32' + platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' + name = '%s%s%s.exe' % (kind, bits, platform_suffix) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + resource = finder(distlib_package).find(name) + if not resource: + msg = ('Unable to find resource %s in package %s' % (name, + distlib_package)) + raise ValueError(msg) + return resource.bytes + + # Public API follows + + def make(self, specification, options=None): + """ + Make a script. + + :param specification: The specification, which is either a valid export + entry specification (to make a script from a + callable) or a filename (to make a script by + copying from a source location). + :param options: A dictionary of options controlling script generation. + :return: A list of all absolute pathnames written to. + """ + filenames = [] + entry = get_export_entry(specification) + if entry is None: + self._copy_script(specification, filenames) + else: + self._make_script(entry, filenames, options=options) + return filenames + + def make_multiple(self, specifications, options=None): + """ + Take a list of specifications and make scripts from them, + :param specifications: A list of specifications. + :return: A list of all absolute pathnames written to, + """ + filenames = [] + for specification in specifications: + filenames.extend(self.make(specification, options)) + return filenames diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe b/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe new file mode 100644 index 0000000000000000000000000000000000000000..8932a18e4596952373a38c60b81b7116d4ef9ee8 GIT binary patch literal 96768 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 F{{j_Hb~FG0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe b/venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe new file mode 100644 index 0000000000000000000000000000000000000000..c5df4869da5ee0970ef4f652d967caa80d5ec63d GIT binary patch literal 180736 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�=7K@@+*KjCK2bkM{rnwW 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe b/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe new file mode 100644 index 0000000000000000000000000000000000000000..325b8057c08cf7113d4fd889991fa5638d443793 GIT binary patch literal 105984 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

      ^h^N4aZyJe%k(7BL*-gn=9``8`j0CuR45%cHI z_uuQ8!-|TEvJ}r=zF@%uKc8U@W1eNxUymJ(e45Tb6KDNieQcKe?L-gR8zZj^wFmi= z{5sAxrfP3BOZz~T$3h=Gi%jFg1%D>!6t*l^`zH2G#1PiYtvOBSI#q&y?8qN57P^LA zq9U)rQU+*y!XEgsGMCJM7yWOS+9lW~^axz>9gyv{Pu^qsBg%ZkfzkaN`$zV#>=oFn zwANnf4&g*eu~pAMC~1dl8FZ-^aeQgZ7=osPU=58@oke z55pen;eU@Z`iL!`$;1-VA&$VF4gN7ttU>relx5d-_x=|95B47HeeiYJZ$$38(ddJH zcrW3>{OR2@KF^H}gAbdZDX=AzyZHSizB_(9`v&$-69)D4WBjSaY@YVD`kl8;nl#Cu z5h1U}Tp}-l|Nde9w|3Pc@Aps8-X~fh_EGq!b-~*$a&nv>05-_n;)z{t+vW|PpX{Oj zKE#i|Gsq9Jhpor%Fqiu6y5}jjnz?*$b)h|UO;3NGd-k|9?ZqeVXL!9~vaIO0E8bVb zejzv5ZG0}~1A7{a3!hob11v4ihxvzh!S5>3I?4E~N9+^m8@sHve^M+wb{f3t2VUsD z*C*C&;z_`=&t~mbE@mHC`k7cGl3rKU9U84p?fzGxTg1q z)-Ai@eQSs49?#VDZ(BQ5_sXt#*VAn)X1Lk5l>kvHP6SDZX>#ITM7@`jxR;sQ>OG+Pe$CuXbGOdj zGq+|zTtQMnhk{-O{R=KF7*}vZ!OVhr1xpLo6l^NkTCk^}W?@_*Z|>hH7&o`>+{q8j zm_Kv=-1+n7FPgt}{>u4l=C7T3KtbFEnHc+rVzeuEi5hE<2hHiD6S}>D5l co{tw5U0O7=?|={2,3}|[~!]=)\s*') +MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') +OR = re.compile(r'^or\b\s*') +AND = re.compile(r'^and\b\s*') +NON_SPACE = re.compile(r'(\S+)\s*') +STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') + + +def parse_marker(marker_string): + """ + Parse a marker string and return a dictionary containing a marker expression. + + The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in + the expression grammar, or strings. A string contained in quotes is to be + interpreted as a literal string, and a string not contained in quotes is a + variable (such as os_name). + """ + def marker_var(remaining): + # either identifier, or literal string + m = IDENTIFIER.match(remaining) + if m: + result = m.groups()[0] + remaining = remaining[m.end():] + elif not remaining: + raise SyntaxError('unexpected end of input') + else: + q = remaining[0] + if q not in '\'"': + raise SyntaxError('invalid expression: %s' % remaining) + oq = '\'"'.replace(q, '') + remaining = remaining[1:] + parts = [q] + while remaining: + # either a string chunk, or oq, or q to terminate + if remaining[0] == q: + break + elif remaining[0] == oq: + parts.append(oq) + remaining = remaining[1:] + else: + m = STRING_CHUNK.match(remaining) + if not m: + raise SyntaxError('error in string literal: %s' % remaining) + parts.append(m.groups()[0]) + remaining = remaining[m.end():] + else: + s = ''.join(parts) + raise SyntaxError('unterminated string: %s' % s) + parts.append(q) + result = ''.join(parts) + remaining = remaining[1:].lstrip() # skip past closing quote + return result, remaining + + def marker_expr(remaining): + if remaining and remaining[0] == '(': + result, remaining = marker(remaining[1:].lstrip()) + if remaining[0] != ')': + raise SyntaxError('unterminated parenthesis: %s' % remaining) + remaining = remaining[1:].lstrip() + else: + lhs, remaining = marker_var(remaining) + while remaining: + m = MARKER_OP.match(remaining) + if not m: + break + op = m.groups()[0] + remaining = remaining[m.end():] + rhs, remaining = marker_var(remaining) + lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} + result = lhs + return result, remaining + + def marker_and(remaining): + lhs, remaining = marker_expr(remaining) + while remaining: + m = AND.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_expr(remaining) + lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + def marker(remaining): + lhs, remaining = marker_and(remaining) + while remaining: + m = OR.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_and(remaining) + lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + return marker(marker_string) + + +def parse_requirement(req): + """ + Parse a requirement passed in as a string. Return a Container + whose attributes contain the various parts of the requirement. + """ + remaining = req.strip() + if not remaining or remaining.startswith('#'): + return None + m = IDENTIFIER.match(remaining) + if not m: + raise SyntaxError('name expected: %s' % remaining) + distname = m.groups()[0] + remaining = remaining[m.end():] + extras = mark_expr = versions = uri = None + if remaining and remaining[0] == '[': + i = remaining.find(']', 1) + if i < 0: + raise SyntaxError('unterminated extra: %s' % remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + extras = [] + while s: + m = IDENTIFIER.match(s) + if not m: + raise SyntaxError('malformed extra: %s' % s) + extras.append(m.groups()[0]) + s = s[m.end():] + if not s: + break + if s[0] != ',': + raise SyntaxError('comma expected in extras: %s' % s) + s = s[1:].lstrip() + if not extras: + extras = None + if remaining: + if remaining[0] == '@': + # it's a URI + remaining = remaining[1:].lstrip() + m = NON_SPACE.match(remaining) + if not m: + raise SyntaxError('invalid URI: %s' % remaining) + uri = m.groups()[0] + t = urlparse(uri) + # there are issues with Python and URL parsing, so this test + # is a bit crude. See bpo-20271, bpo-23505. Python doesn't + # always parse invalid URLs correctly - it should raise + # exceptions for malformed URLs + if not (t.scheme and t.netloc): + raise SyntaxError('Invalid URL: %s' % uri) + remaining = remaining[m.end():].lstrip() + else: + + def get_versions(ver_remaining): + """ + Return a list of operator, version tuples if any are + specified, else None. + """ + m = COMPARE_OP.match(ver_remaining) + versions = None + if m: + versions = [] + while True: + op = m.groups()[0] + ver_remaining = ver_remaining[m.end():] + m = VERSION_IDENTIFIER.match(ver_remaining) + if not m: + raise SyntaxError('invalid version: %s' % ver_remaining) + v = m.groups()[0] + versions.append((op, v)) + ver_remaining = ver_remaining[m.end():] + if not ver_remaining or ver_remaining[0] != ',': + break + ver_remaining = ver_remaining[1:].lstrip() + # Some packages have a trailing comma which would break things + # See issue #148 + if not ver_remaining: + break + m = COMPARE_OP.match(ver_remaining) + if not m: + raise SyntaxError('invalid constraint: %s' % ver_remaining) + if not versions: + versions = None + return versions, ver_remaining + + if remaining[0] != '(': + versions, remaining = get_versions(remaining) + else: + i = remaining.find(')', 1) + if i < 0: + raise SyntaxError('unterminated parenthesis: %s' % remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + # As a special diversion from PEP 508, allow a version number + # a.b.c in parentheses as a synonym for ~= a.b.c (because this + # is allowed in earlier PEPs) + if COMPARE_OP.match(s): + versions, _ = get_versions(s) + else: + m = VERSION_IDENTIFIER.match(s) + if not m: + raise SyntaxError('invalid constraint: %s' % s) + v = m.groups()[0] + s = s[m.end():].lstrip() + if s: + raise SyntaxError('invalid constraint: %s' % s) + versions = [('~=', v)] + + if remaining: + if remaining[0] != ';': + raise SyntaxError('invalid requirement: %s' % remaining) + remaining = remaining[1:].lstrip() + + mark_expr, remaining = parse_marker(remaining) + + if remaining and remaining[0] != '#': + raise SyntaxError('unexpected trailing data: %s' % remaining) + + if not versions: + rs = distname + else: + rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) + return Container(name=distname, extras=extras, constraints=versions, + marker=mark_expr, url=uri, requirement=rs) + + +def get_resources_dests(resources_root, rules): + """Find destinations for resources files""" + + def get_rel_path(root, path): + # normalizes and returns a lstripped-/-separated path + root = root.replace(os.path.sep, '/') + path = path.replace(os.path.sep, '/') + assert path.startswith(root) + return path[len(root):].lstrip('/') + + destinations = {} + for base, suffix, dest in rules: + prefix = os.path.join(resources_root, base) + for abs_base in iglob(prefix): + abs_glob = os.path.join(abs_base, suffix) + for abs_path in iglob(abs_glob): + resource_file = get_rel_path(resources_root, abs_path) + if dest is None: # remove the entry if it was here + destinations.pop(resource_file, None) + else: + rel_path = get_rel_path(abs_base, abs_path) + rel_dest = dest.replace(os.path.sep, '/').rstrip('/') + destinations[resource_file] = rel_dest + '/' + rel_path + return destinations + + +def in_venv(): + if hasattr(sys, 'real_prefix'): + # virtualenv venvs + result = True + else: + # PEP 405 venvs + result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) + return result + + +def get_executable(): +# The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as +# changes to the stub launcher mean that sys.executable always points +# to the stub on OS X +# if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' +# in os.environ): +# result = os.environ['__PYVENV_LAUNCHER__'] +# else: +# result = sys.executable +# return result + # Avoid normcasing: see issue #143 + # result = os.path.normcase(sys.executable) + result = sys.executable + if not isinstance(result, text_type): + result = fsdecode(result) + return result + + +def proceed(prompt, allowed_chars, error_prompt=None, default=None): + p = prompt + while True: + s = raw_input(p) + p = prompt + if not s and default: + s = default + if s: + c = s[0].lower() + if c in allowed_chars: + break + if error_prompt: + p = '%c: %s\n%s' % (c, error_prompt, prompt) + return c + + +def extract_by_key(d, keys): + if isinstance(keys, string_types): + keys = keys.split() + result = {} + for key in keys: + if key in d: + result[key] = d[key] + return result + +def read_exports(stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + # Try to load as JSON, falling back on legacy format + data = stream.read() + stream = StringIO(data) + try: + jdata = json.load(stream) + result = jdata['extensions']['python.exports']['exports'] + for group, entries in result.items(): + for k, v in entries.items(): + s = '%s = %s' % (k, v) + entry = get_export_entry(s) + assert entry is not None + entries[k] = entry + return result + except Exception: + stream.seek(0, 0) + + def read_stream(cp, stream): + if hasattr(cp, 'read_file'): + cp.read_file(stream) + else: + cp.readfp(stream) + + cp = configparser.ConfigParser() + try: + read_stream(cp, stream) + except configparser.MissingSectionHeaderError: + stream.close() + data = textwrap.dedent(data) + stream = StringIO(data) + read_stream(cp, stream) + + result = {} + for key in cp.sections(): + result[key] = entries = {} + for name, value in cp.items(key): + s = '%s = %s' % (name, value) + entry = get_export_entry(s) + assert entry is not None + #entry.dist = self + entries[name] = entry + return result + + +def write_exports(exports, stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getwriter('utf-8')(stream) + cp = configparser.ConfigParser() + for k, v in exports.items(): + # TODO check k, v for valid values + cp.add_section(k) + for entry in v.values(): + if entry.suffix is None: + s = entry.prefix + else: + s = '%s:%s' % (entry.prefix, entry.suffix) + if entry.flags: + s = '%s [%s]' % (s, ', '.join(entry.flags)) + cp.set(k, entry.name, s) + cp.write(stream) + + +@contextlib.contextmanager +def tempdir(): + td = tempfile.mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + +@contextlib.contextmanager +def chdir(d): + cwd = os.getcwd() + try: + os.chdir(d) + yield + finally: + os.chdir(cwd) + + +@contextlib.contextmanager +def socket_timeout(seconds=15): + cto = socket.getdefaulttimeout() + try: + socket.setdefaulttimeout(seconds) + yield + finally: + socket.setdefaulttimeout(cto) + + +class cached_property(object): + def __init__(self, func): + self.func = func + #for attr in ('__name__', '__module__', '__doc__'): + # setattr(self, attr, getattr(func, attr, None)) + + def __get__(self, obj, cls=None): + if obj is None: + return self + value = self.func(obj) + object.__setattr__(obj, self.func.__name__, value) + #obj.__dict__[self.func.__name__] = value = self.func(obj) + return value + +def convert_path(pathname): + """Return 'pathname' as a name that will work on the native filesystem. + + The path is split on '/' and put back together again using the current + directory separator. Needed because filenames in the setup script are + always supplied in Unix style, and have to be converted to the local + convention before we can actually use them in the filesystem. Raises + ValueError on non-Unix-ish systems if 'pathname' either starts or + ends with a slash. + """ + if os.sep == '/': + return pathname + if not pathname: + return pathname + if pathname[0] == '/': + raise ValueError("path '%s' cannot be absolute" % pathname) + if pathname[-1] == '/': + raise ValueError("path '%s' cannot end with '/'" % pathname) + + paths = pathname.split('/') + while os.curdir in paths: + paths.remove(os.curdir) + if not paths: + return os.curdir + return os.path.join(*paths) + + +class FileOperator(object): + def __init__(self, dry_run=False): + self.dry_run = dry_run + self.ensured = set() + self._init_record() + + def _init_record(self): + self.record = False + self.files_written = set() + self.dirs_created = set() + + def record_as_written(self, path): + if self.record: + self.files_written.add(path) + + def newer(self, source, target): + """Tell if the target is newer than the source. + + Returns true if 'source' exists and is more recently modified than + 'target', or if 'source' exists and 'target' doesn't. + + Returns false if both exist and 'target' is the same age or younger + than 'source'. Raise PackagingFileError if 'source' does not exist. + + Note that this test is not very accurate: files created in the same + second will have the same "age". + """ + if not os.path.exists(source): + raise DistlibException("file '%r' does not exist" % + os.path.abspath(source)) + if not os.path.exists(target): + return True + + return os.stat(source).st_mtime > os.stat(target).st_mtime + + def copy_file(self, infile, outfile, check=True): + """Copy a file respecting dry-run and force flags. + """ + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying %s to %s', infile, outfile) + if not self.dry_run: + msg = None + if check: + if os.path.islink(outfile): + msg = '%s is a symlink' % outfile + elif os.path.exists(outfile) and not os.path.isfile(outfile): + msg = '%s is a non-regular file' % outfile + if msg: + raise ValueError(msg + ' which would be overwritten') + shutil.copyfile(infile, outfile) + self.record_as_written(outfile) + + def copy_stream(self, instream, outfile, encoding=None): + assert not os.path.isdir(outfile) + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying stream %s to %s', instream, outfile) + if not self.dry_run: + if encoding is None: + outstream = open(outfile, 'wb') + else: + outstream = codecs.open(outfile, 'w', encoding=encoding) + try: + shutil.copyfileobj(instream, outstream) + finally: + outstream.close() + self.record_as_written(outfile) + + def write_binary_file(self, path, data): + self.ensure_dir(os.path.dirname(path)) + if not self.dry_run: + if os.path.exists(path): + os.remove(path) + with open(path, 'wb') as f: + f.write(data) + self.record_as_written(path) + + def write_text_file(self, path, data, encoding): + self.write_binary_file(path, data.encode(encoding)) + + def set_mode(self, bits, mask, files): + if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): + # Set the executable bits (owner, group, and world) on + # all the files specified. + for f in files: + if self.dry_run: + logger.info("changing mode of %s", f) + else: + mode = (os.stat(f).st_mode | bits) & mask + logger.info("changing mode of %s to %o", f, mode) + os.chmod(f, mode) + + set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) + + def ensure_dir(self, path): + path = os.path.abspath(path) + if path not in self.ensured and not os.path.exists(path): + self.ensured.add(path) + d, f = os.path.split(path) + self.ensure_dir(d) + logger.info('Creating %s' % path) + if not self.dry_run: + os.mkdir(path) + if self.record: + self.dirs_created.add(path) + + def byte_compile(self, path, optimize=False, force=False, prefix=None, hashed_invalidation=False): + dpath = cache_from_source(path, not optimize) + logger.info('Byte-compiling %s to %s', path, dpath) + if not self.dry_run: + if force or self.newer(path, dpath): + if not prefix: + diagpath = None + else: + assert path.startswith(prefix) + diagpath = path[len(prefix):] + compile_kwargs = {} + if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): + compile_kwargs['invalidation_mode'] = py_compile.PycInvalidationMode.CHECKED_HASH + py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # raise error + self.record_as_written(dpath) + return dpath + + def ensure_removed(self, path): + if os.path.exists(path): + if os.path.isdir(path) and not os.path.islink(path): + logger.debug('Removing directory tree at %s', path) + if not self.dry_run: + shutil.rmtree(path) + if self.record: + if path in self.dirs_created: + self.dirs_created.remove(path) + else: + if os.path.islink(path): + s = 'link' + else: + s = 'file' + logger.debug('Removing %s %s', s, path) + if not self.dry_run: + os.remove(path) + if self.record: + if path in self.files_written: + self.files_written.remove(path) + + def is_writable(self, path): + result = False + while not result: + if os.path.exists(path): + result = os.access(path, os.W_OK) + break + parent = os.path.dirname(path) + if parent == path: + break + path = parent + return result + + def commit(self): + """ + Commit recorded changes, turn off recording, return + changes. + """ + assert self.record + result = self.files_written, self.dirs_created + self._init_record() + return result + + def rollback(self): + if not self.dry_run: + for f in list(self.files_written): + if os.path.exists(f): + os.remove(f) + # dirs should all be empty now, except perhaps for + # __pycache__ subdirs + # reverse so that subdirs appear before their parents + dirs = sorted(self.dirs_created, reverse=True) + for d in dirs: + flist = os.listdir(d) + if flist: + assert flist == ['__pycache__'] + sd = os.path.join(d, flist[0]) + os.rmdir(sd) + os.rmdir(d) # should fail if non-empty + self._init_record() + +def resolve(module_name, dotted_path): + if module_name in sys.modules: + mod = sys.modules[module_name] + else: + mod = __import__(module_name) + if dotted_path is None: + result = mod + else: + parts = dotted_path.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + +class ExportEntry(object): + def __init__(self, name, prefix, suffix, flags): + self.name = name + self.prefix = prefix + self.suffix = suffix + self.flags = flags + + @cached_property + def value(self): + return resolve(self.prefix, self.suffix) + + def __repr__(self): # pragma: no cover + return '' % (self.name, self.prefix, + self.suffix, self.flags) + + def __eq__(self, other): + if not isinstance(other, ExportEntry): + result = False + else: + result = (self.name == other.name and + self.prefix == other.prefix and + self.suffix == other.suffix and + self.flags == other.flags) + return result + + __hash__ = object.__hash__ + + +ENTRY_RE = re.compile(r'''(?P(\w|[-.+])+) + \s*=\s*(?P(\w+)([:\.]\w+)*) + \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? + ''', re.VERBOSE) + +def get_export_entry(specification): + m = ENTRY_RE.search(specification) + if not m: + result = None + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + else: + d = m.groupdict() + name = d['name'] + path = d['callable'] + colons = path.count(':') + if colons == 0: + prefix, suffix = path, None + else: + if colons != 1: + raise DistlibException("Invalid specification " + "'%s'" % specification) + prefix, suffix = path.split(':') + flags = d['flags'] + if flags is None: + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + flags = [] + else: + flags = [f.strip() for f in flags.split(',')] + result = ExportEntry(name, prefix, suffix, flags) + return result + + +def get_cache_base(suffix=None): + """ + Return the default base location for distlib caches. If the directory does + not exist, it is created. Use the suffix provided for the base directory, + and default to '.distlib' if it isn't provided. + + On Windows, if LOCALAPPDATA is defined in the environment, then it is + assumed to be a directory, and will be the parent directory of the result. + On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home + directory - using os.expanduser('~') - will be the parent directory of + the result. + + The result is just the directory '.distlib' in the parent directory as + determined above, or with the name specified with ``suffix``. + """ + if suffix is None: + suffix = '.distlib' + if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: + result = os.path.expandvars('$localappdata') + else: + # Assume posix, or old Windows + result = os.path.expanduser('~') + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if os.path.isdir(result): + usable = os.access(result, os.W_OK) + if not usable: + logger.warning('Directory exists but is not writable: %s', result) + else: + try: + os.makedirs(result) + usable = True + except OSError: + logger.warning('Unable to create %s', result, exc_info=True) + usable = False + if not usable: + result = tempfile.mkdtemp() + logger.warning('Default location unusable, using %s', result) + return os.path.join(result, suffix) + + +def path_to_cache_dir(path): + """ + Convert an absolute path to a directory name for use in a cache. + + The algorithm used is: + + #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. + #. Any occurrence of ``os.sep`` is replaced with ``'--'``. + #. ``'.cache'`` is appended. + """ + d, p = os.path.splitdrive(os.path.abspath(path)) + if d: + d = d.replace(':', '---') + p = p.replace(os.sep, '--') + return d + p + '.cache' + + +def ensure_slash(s): + if not s.endswith('/'): + return s + '/' + return s + + +def parse_credentials(netloc): + username = password = None + if '@' in netloc: + prefix, netloc = netloc.rsplit('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + if username: + username = unquote(username) + if password: + password = unquote(password) + return username, password, netloc + + +def get_process_umask(): + result = os.umask(0o22) + os.umask(result) + return result + +def is_string_sequence(seq): + result = True + i = None + for i, s in enumerate(seq): + if not isinstance(s, string_types): + result = False + break + assert i is not None + return result + +PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' + '([a-z0-9_.+-]+)', re.I) +PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') + + +def split_filename(filename, project_name=None): + """ + Extract name, version, python version from a filename (no extension) + + Return name, version, pyver or None + """ + result = None + pyver = None + filename = unquote(filename).replace(' ', '-') + m = PYTHON_VERSION.search(filename) + if m: + pyver = m.group(1) + filename = filename[:m.start()] + if project_name and len(filename) > len(project_name) + 1: + m = re.match(re.escape(project_name) + r'\b', filename) + if m: + n = m.end() + result = filename[:n], filename[n + 1:], pyver + if result is None: + m = PROJECT_NAME_AND_VERSION.match(filename) + if m: + result = m.group(1), m.group(3), pyver + return result + +# Allow spaces in name because of legacy dists like "Twisted Core" +NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' + r'\(\s*(?P[^\s)]+)\)$') + +def parse_name_and_version(p): + """ + A utility method used to get name and version from a string. + + From e.g. a Provides-Dist value. + + :param p: A value in a form 'foo (1.0)' + :return: The name and version as a tuple. + """ + m = NAME_VERSION_RE.match(p) + if not m: + raise DistlibException('Ill-formed name/version string: \'%s\'' % p) + d = m.groupdict() + return d['name'].strip().lower(), d['ver'] + +def get_extras(requested, available): + result = set() + requested = set(requested or []) + available = set(available or []) + if '*' in requested: + requested.remove('*') + result |= available + for r in requested: + if r == '-': + result.add(r) + elif r.startswith('-'): + unwanted = r[1:] + if unwanted not in available: + logger.warning('undeclared extra: %s' % unwanted) + if unwanted in result: + result.remove(unwanted) + else: + if r not in available: + logger.warning('undeclared extra: %s' % r) + result.add(r) + return result +# +# Extended metadata functionality +# + +def _get_external_data(url): + result = {} + try: + # urlopen might fail if it runs into redirections, + # because of Python issue #13696. Fixed in locators + # using a custom redirect handler. + resp = urlopen(url) + headers = resp.info() + ct = headers.get('Content-Type') + if not ct.startswith('application/json'): + logger.debug('Unexpected response for JSON request: %s', ct) + else: + reader = codecs.getreader('utf-8')(resp) + #data = reader.read().decode('utf-8') + #result = json.loads(data) + result = json.load(reader) + except Exception as e: + logger.exception('Failed to get external data for %s: %s', url, e) + return result + +_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' + +def get_project_data(name): + url = '%s/%s/project.json' % (name[0].upper(), name) + url = urljoin(_external_data_base_url, url) + result = _get_external_data(url) + return result + +def get_package_data(name, version): + url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) + url = urljoin(_external_data_base_url, url) + return _get_external_data(url) + + +class Cache(object): + """ + A class implementing a cache for resources that need to live in the file system + e.g. shared libraries. This class was moved from resources to here because it + could be used by other modules, e.g. the wheel module. + """ + + def __init__(self, base): + """ + Initialise an instance. + + :param base: The base directory where the cache should be located. + """ + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if not os.path.isdir(base): # pragma: no cover + os.makedirs(base) + if (os.stat(base).st_mode & 0o77) != 0: + logger.warning('Directory \'%s\' is not private', base) + self.base = os.path.abspath(os.path.normpath(base)) + + def prefix_to_dir(self, prefix): + """ + Converts a resource prefix to a directory name in the cache. + """ + return path_to_cache_dir(prefix) + + def clear(self): + """ + Clear the cache. + """ + not_removed = [] + for fn in os.listdir(self.base): + fn = os.path.join(self.base, fn) + try: + if os.path.islink(fn) or os.path.isfile(fn): + os.remove(fn) + elif os.path.isdir(fn): + shutil.rmtree(fn) + except Exception: + not_removed.append(fn) + return not_removed + + +class EventMixin(object): + """ + A very simple publish/subscribe system. + """ + def __init__(self): + self._subscribers = {} + + def add(self, event, subscriber, append=True): + """ + Add a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be added (and called when the + event is published). + :param append: Whether to append or prepend the subscriber to an + existing subscriber list for the event. + """ + subs = self._subscribers + if event not in subs: + subs[event] = deque([subscriber]) + else: + sq = subs[event] + if append: + sq.append(subscriber) + else: + sq.appendleft(subscriber) + + def remove(self, event, subscriber): + """ + Remove a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be removed. + """ + subs = self._subscribers + if event not in subs: + raise ValueError('No subscribers: %r' % event) + subs[event].remove(subscriber) + + def get_subscribers(self, event): + """ + Return an iterator for the subscribers for an event. + :param event: The event to return subscribers for. + """ + return iter(self._subscribers.get(event, ())) + + def publish(self, event, *args, **kwargs): + """ + Publish a event and return a list of values returned by its + subscribers. + + :param event: The event to publish. + :param args: The positional arguments to pass to the event's + subscribers. + :param kwargs: The keyword arguments to pass to the event's + subscribers. + """ + result = [] + for subscriber in self.get_subscribers(event): + try: + value = subscriber(event, *args, **kwargs) + except Exception: + logger.exception('Exception during event publication') + value = None + result.append(value) + logger.debug('publish %s: args = %s, kwargs = %s, result = %s', + event, args, kwargs, result) + return result + +# +# Simple sequencing +# +class Sequencer(object): + def __init__(self): + self._preds = {} + self._succs = {} + self._nodes = set() # nodes with no preds/succs + + def add_node(self, node): + self._nodes.add(node) + + def remove_node(self, node, edges=False): + if node in self._nodes: + self._nodes.remove(node) + if edges: + for p in set(self._preds.get(node, ())): + self.remove(p, node) + for s in set(self._succs.get(node, ())): + self.remove(node, s) + # Remove empties + for k, v in list(self._preds.items()): + if not v: + del self._preds[k] + for k, v in list(self._succs.items()): + if not v: + del self._succs[k] + + def add(self, pred, succ): + assert pred != succ + self._preds.setdefault(succ, set()).add(pred) + self._succs.setdefault(pred, set()).add(succ) + + def remove(self, pred, succ): + assert pred != succ + try: + preds = self._preds[succ] + succs = self._succs[pred] + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of anything' % succ) + try: + preds.remove(pred) + succs.remove(succ) + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of %r' % (succ, pred)) + + def is_step(self, step): + return (step in self._preds or step in self._succs or + step in self._nodes) + + def get_steps(self, final): + if not self.is_step(final): + raise ValueError('Unknown: %r' % final) + result = [] + todo = [] + seen = set() + todo.append(final) + while todo: + step = todo.pop(0) + if step in seen: + # if a step was already seen, + # move it to the end (so it will appear earlier + # when reversed on return) ... but not for the + # final step, as that would be confusing for + # users + if step != final: + result.remove(step) + result.append(step) + else: + seen.add(step) + result.append(step) + preds = self._preds.get(step, ()) + todo.extend(preds) + return reversed(result) + + @property + def strong_connections(self): + #http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm + index_counter = [0] + stack = [] + lowlinks = {} + index = {} + result = [] + + graph = self._succs + + def strongconnect(node): + # set the depth index for this node to the smallest unused index + index[node] = index_counter[0] + lowlinks[node] = index_counter[0] + index_counter[0] += 1 + stack.append(node) + + # Consider successors + try: + successors = graph[node] + except Exception: + successors = [] + for successor in successors: + if successor not in lowlinks: + # Successor has not yet been visited + strongconnect(successor) + lowlinks[node] = min(lowlinks[node],lowlinks[successor]) + elif successor in stack: + # the successor is in the stack and hence in the current + # strongly connected component (SCC) + lowlinks[node] = min(lowlinks[node],index[successor]) + + # If `node` is a root node, pop the stack and generate an SCC + if lowlinks[node] == index[node]: + connected_component = [] + + while True: + successor = stack.pop() + connected_component.append(successor) + if successor == node: break + component = tuple(connected_component) + # storing the result + result.append(component) + + for node in graph: + if node not in lowlinks: + strongconnect(node) + + return result + + @property + def dot(self): + result = ['digraph G {'] + for succ in self._preds: + preds = self._preds[succ] + for pred in preds: + result.append(' %s -> %s;' % (pred, succ)) + for node in self._nodes: + result.append(' %s;' % node) + result.append('}') + return '\n'.join(result) + +# +# Unarchiving functionality for zip, tar, tgz, tbz, whl +# + +ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', + '.tgz', '.tbz', '.whl') + +def unarchive(archive_filename, dest_dir, format=None, check=True): + + def check_path(path): + if not isinstance(path, text_type): + path = path.decode('utf-8') + p = os.path.abspath(os.path.join(dest_dir, path)) + if not p.startswith(dest_dir) or p[plen] != os.sep: + raise ValueError('path outside destination: %r' % p) + + dest_dir = os.path.abspath(dest_dir) + plen = len(dest_dir) + archive = None + if format is None: + if archive_filename.endswith(('.zip', '.whl')): + format = 'zip' + elif archive_filename.endswith(('.tar.gz', '.tgz')): + format = 'tgz' + mode = 'r:gz' + elif archive_filename.endswith(('.tar.bz2', '.tbz')): + format = 'tbz' + mode = 'r:bz2' + elif archive_filename.endswith('.tar'): + format = 'tar' + mode = 'r' + else: # pragma: no cover + raise ValueError('Unknown format for %r' % archive_filename) + try: + if format == 'zip': + archive = ZipFile(archive_filename, 'r') + if check: + names = archive.namelist() + for name in names: + check_path(name) + else: + archive = tarfile.open(archive_filename, mode) + if check: + names = archive.getnames() + for name in names: + check_path(name) + if format != 'zip' and sys.version_info[0] < 3: + # See Python issue 17153. If the dest path contains Unicode, + # tarfile extraction fails on Python 2.x if a member path name + # contains non-ASCII characters - it leads to an implicit + # bytes -> unicode conversion using ASCII to decode. + for tarinfo in archive.getmembers(): + if not isinstance(tarinfo.name, text_type): + tarinfo.name = tarinfo.name.decode('utf-8') + archive.extractall(dest_dir) + + finally: + if archive: + archive.close() + + +def zip_dir(directory): + """zip a directory tree into a BytesIO object""" + result = io.BytesIO() + dlen = len(directory) + with ZipFile(result, "w") as zf: + for root, dirs, files in os.walk(directory): + for name in files: + full = os.path.join(root, name) + rel = root[dlen:] + dest = os.path.join(rel, name) + zf.write(full, dest) + return result + +# +# Simple progress bar +# + +UNITS = ('', 'K', 'M', 'G','T','P') + + +class Progress(object): + unknown = 'UNKNOWN' + + def __init__(self, minval=0, maxval=100): + assert maxval is None or maxval >= minval + self.min = self.cur = minval + self.max = maxval + self.started = None + self.elapsed = 0 + self.done = False + + def update(self, curval): + assert self.min <= curval + assert self.max is None or curval <= self.max + self.cur = curval + now = time.time() + if self.started is None: + self.started = now + else: + self.elapsed = now - self.started + + def increment(self, incr): + assert incr >= 0 + self.update(self.cur + incr) + + def start(self): + self.update(self.min) + return self + + def stop(self): + if self.max is not None: + self.update(self.max) + self.done = True + + @property + def maximum(self): + return self.unknown if self.max is None else self.max + + @property + def percentage(self): + if self.done: + result = '100 %' + elif self.max is None: + result = ' ?? %' + else: + v = 100.0 * (self.cur - self.min) / (self.max - self.min) + result = '%3d %%' % v + return result + + def format_duration(self, duration): + if (duration <= 0) and self.max is None or self.cur == self.min: + result = '??:??:??' + #elif duration < 1: + # result = '--:--:--' + else: + result = time.strftime('%H:%M:%S', time.gmtime(duration)) + return result + + @property + def ETA(self): + if self.done: + prefix = 'Done' + t = self.elapsed + #import pdb; pdb.set_trace() + else: + prefix = 'ETA ' + if self.max is None: + t = -1 + elif self.elapsed == 0 or (self.cur == self.min): + t = 0 + else: + #import pdb; pdb.set_trace() + t = float(self.max - self.min) + t /= self.cur - self.min + t = (t - 1) * self.elapsed + return '%s: %s' % (prefix, self.format_duration(t)) + + @property + def speed(self): + if self.elapsed == 0: + result = 0.0 + else: + result = (self.cur - self.min) / self.elapsed + for unit in UNITS: + if result < 1000: + break + result /= 1000.0 + return '%d %sB/s' % (result, unit) + +# +# Glob functionality +# + +RICH_GLOB = re.compile(r'\{([^}]*)\}') +_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') +_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') + + +def iglob(path_glob): + """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" + if _CHECK_RECURSIVE_GLOB.search(path_glob): + msg = """invalid glob %r: recursive glob "**" must be used alone""" + raise ValueError(msg % path_glob) + if _CHECK_MISMATCH_SET.search(path_glob): + msg = """invalid glob %r: mismatching set marker '{' or '}'""" + raise ValueError(msg % path_glob) + return _iglob(path_glob) + + +def _iglob(path_glob): + rich_path_glob = RICH_GLOB.split(path_glob, 1) + if len(rich_path_glob) > 1: + assert len(rich_path_glob) == 3, rich_path_glob + prefix, set, suffix = rich_path_glob + for item in set.split(','): + for path in _iglob(''.join((prefix, item, suffix))): + yield path + else: + if '**' not in path_glob: + for item in std_iglob(path_glob): + yield item + else: + prefix, radical = path_glob.split('**', 1) + if prefix == '': + prefix = '.' + if radical == '': + radical = '*' + else: + # we support both + radical = radical.lstrip('/') + radical = radical.lstrip('\\') + for path, dir, files in os.walk(prefix): + path = os.path.normpath(path) + for fn in _iglob(os.path.join(path, radical)): + yield fn + +if ssl: + from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, + CertificateError) + + +# +# HTTPSConnection which verifies certificates/matches domains +# + + class HTTPSConnection(httplib.HTTPSConnection): + ca_certs = None # set this to the path to the certs file (.pem) + check_domain = True # only used if ca_certs is not None + + # noinspection PyPropertyAccess + def connect(self): + sock = socket.create_connection((self.host, self.port), self.timeout) + if getattr(self, '_tunnel_host', False): + self.sock = sock + self._tunnel() + + if not hasattr(ssl, 'SSLContext'): + # For 2.x + if self.ca_certs: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, + cert_reqs=cert_reqs, + ssl_version=ssl.PROTOCOL_SSLv23, + ca_certs=self.ca_certs) + else: # pragma: no cover + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(ssl, 'OP_NO_SSLv2'): + context.options |= ssl.OP_NO_SSLv2 + if self.cert_file: + context.load_cert_chain(self.cert_file, self.key_file) + kwargs = {} + if self.ca_certs: + context.verify_mode = ssl.CERT_REQUIRED + context.load_verify_locations(cafile=self.ca_certs) + if getattr(ssl, 'HAS_SNI', False): + kwargs['server_hostname'] = self.host + self.sock = context.wrap_socket(sock, **kwargs) + if self.ca_certs and self.check_domain: + try: + match_hostname(self.sock.getpeercert(), self.host) + logger.debug('Host verified: %s', self.host) + except CertificateError: # pragma: no cover + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + class HTTPSHandler(BaseHTTPSHandler): + def __init__(self, ca_certs, check_domain=True): + BaseHTTPSHandler.__init__(self) + self.ca_certs = ca_certs + self.check_domain = check_domain + + def _conn_maker(self, *args, **kwargs): + """ + This is called to create a connection instance. Normally you'd + pass a connection class to do_open, but it doesn't actually check for + a class, and just expects a callable. As long as we behave just as a + constructor would have, we should be OK. If it ever changes so that + we *must* pass a class, we'll create an UnsafeHTTPSConnection class + which just sets check_domain to False in the class definition, and + choose which one to pass to do_open. + """ + result = HTTPSConnection(*args, **kwargs) + if self.ca_certs: + result.ca_certs = self.ca_certs + result.check_domain = self.check_domain + return result + + def https_open(self, req): + try: + return self.do_open(self._conn_maker, req) + except URLError as e: + if 'certificate verify failed' in str(e.reason): + raise CertificateError('Unable to verify server certificate ' + 'for %s' % req.host) + else: + raise + + # + # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- + # Middle proxy using HTTP listens on port 443, or an index mistakenly serves + # HTML containing a http://xyz link when it should be https://xyz), + # you can use the following handler class, which does not allow HTTP traffic. + # + # It works by inheriting from HTTPHandler - so build_opener won't add a + # handler for HTTP itself. + # + class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): + def http_open(self, req): + raise URLError('Unexpected HTTP request on what should be a secure ' + 'connection: %s' % req) + +# +# XML-RPC with timeouts +# + +_ver_info = sys.version_info[:2] + +if _ver_info == (2, 6): + class HTTP(httplib.HTTP): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + + if ssl: + class HTTPS(httplib.HTTPS): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + +class Transport(xmlrpclib.Transport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.Transport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, x509 = self.get_host_info(host) + if _ver_info == (2, 6): + result = HTTP(h, timeout=self.timeout) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + result = self._connection[1] + return result + +if ssl: + class SafeTransport(xmlrpclib.SafeTransport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.SafeTransport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, kwargs = self.get_host_info(host) + if not kwargs: + kwargs = {} + kwargs['timeout'] = self.timeout + if _ver_info == (2, 6): + result = HTTPS(host, None, **kwargs) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection(h, None, + **kwargs) + result = self._connection[1] + return result + + +class ServerProxy(xmlrpclib.ServerProxy): + def __init__(self, uri, **kwargs): + self.timeout = timeout = kwargs.pop('timeout', None) + # The above classes only come into play if a timeout + # is specified + if timeout is not None: + # scheme = splittype(uri) # deprecated as of Python 3.8 + scheme = urlparse(uri)[0] + use_datetime = kwargs.get('use_datetime', 0) + if scheme == 'https': + tcls = SafeTransport + else: + tcls = Transport + kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) + self.transport = t + xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) + +# +# CSV functionality. This is provided because on 2.x, the csv module can't +# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. +# + +def _csv_open(fn, mode, **kwargs): + if sys.version_info[0] < 3: + mode += 'b' + else: + kwargs['newline'] = '' + # Python 3 determines encoding from locale. Force 'utf-8' + # file encoding to match other forced utf-8 encoding + kwargs['encoding'] = 'utf-8' + return open(fn, mode, **kwargs) + + +class CSVBase(object): + defaults = { + 'delimiter': str(','), # The strs are used because we need native + 'quotechar': str('"'), # str in the csv API (2.x won't take + 'lineterminator': str('\n') # Unicode) + } + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.stream.close() + + +class CSVReader(CSVBase): + def __init__(self, **kwargs): + if 'stream' in kwargs: + stream = kwargs['stream'] + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + self.stream = stream + else: + self.stream = _csv_open(kwargs['path'], 'r') + self.reader = csv.reader(self.stream, **self.defaults) + + def __iter__(self): + return self + + def next(self): + result = next(self.reader) + if sys.version_info[0] < 3: + for i, item in enumerate(result): + if not isinstance(item, text_type): + result[i] = item.decode('utf-8') + return result + + __next__ = next + +class CSVWriter(CSVBase): + def __init__(self, fn, **kwargs): + self.stream = _csv_open(fn, 'w') + self.writer = csv.writer(self.stream, **self.defaults) + + def writerow(self, row): + if sys.version_info[0] < 3: + r = [] + for item in row: + if isinstance(item, text_type): + item = item.encode('utf-8') + r.append(item) + row = r + self.writer.writerow(row) + +# +# Configurator functionality +# + +class Configurator(BaseConfigurator): + + value_converters = dict(BaseConfigurator.value_converters) + value_converters['inc'] = 'inc_convert' + + def __init__(self, config, base=None): + super(Configurator, self).__init__(config) + self.base = base or os.getcwd() + + def configure_custom(self, config): + def convert(o): + if isinstance(o, (list, tuple)): + result = type(o)([convert(i) for i in o]) + elif isinstance(o, dict): + if '()' in o: + result = self.configure_custom(o) + else: + result = {} + for k in o: + result[k] = convert(o[k]) + else: + result = self.convert(o) + return result + + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + args = config.pop('[]', ()) + if args: + args = tuple([convert(o) for o in args]) + items = [(k, convert(config[k])) for k in config if valid_ident(k)] + kwargs = dict(items) + result = c(*args, **kwargs) + if props: + for n, v in props.items(): + setattr(result, n, convert(v)) + return result + + def __getitem__(self, key): + result = self.config[key] + if isinstance(result, dict) and '()' in result: + self.config[key] = result = self.configure_custom(result) + return result + + def inc_convert(self, value): + """Default converter for the inc:// protocol.""" + if not os.path.isabs(value): + value = os.path.join(self.base, value) + with codecs.open(value, 'r', encoding='utf-8') as f: + result = json.load(f) + return result + + +class SubprocessMixin(object): + """ + Mixin for running subprocesses and capturing their output + """ + def __init__(self, verbose=False, progress=None): + self.verbose = verbose + self.progress = progress + + def reader(self, stream, context): + """ + Read lines from a subprocess' output stream and either pass to a progress + callable (if specified) or write progress information to sys.stderr. + """ + progress = self.progress + verbose = self.verbose + while True: + s = stream.readline() + if not s: + break + if progress is not None: + progress(s, context) + else: + if not verbose: + sys.stderr.write('.') + else: + sys.stderr.write(s.decode('utf-8')) + sys.stderr.flush() + stream.close() + + def run_command(self, cmd, **kwargs): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, **kwargs) + t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) + t1.start() + t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) + t2.start() + p.wait() + t1.join() + t2.join() + if self.progress is not None: + self.progress('done.', 'main') + elif self.verbose: + sys.stderr.write('done.\n') + return p + + +def normalize_name(name): + """Normalize a python package name a la PEP 503""" + # https://www.python.org/dev/peps/pep-0503/#normalized-names + return re.sub('[-_.]+', '-', name).lower() + +# def _get_pypirc_command(): + # """ + # Get the distutils command for interacting with PyPI configurations. + # :return: the command. + # """ + # from distutils.core import Distribution + # from distutils.config import PyPIRCCommand + # d = Distribution() + # return PyPIRCCommand(d) + +class PyPIRCFile(object): + + DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' + DEFAULT_REALM = 'pypi' + + def __init__(self, fn=None, url=None): + if fn is None: + fn = os.path.join(os.path.expanduser('~'), '.pypirc') + self.filename = fn + self.url = url + + def read(self): + result = {} + + if os.path.exists(self.filename): + repository = self.url or self.DEFAULT_REPOSITORY + + config = configparser.RawConfigParser() + config.read(self.filename) + sections = config.sections() + if 'distutils' in sections: + # let's get the list of servers + index_servers = config.get('distutils', 'index-servers') + _servers = [server.strip() for server in + index_servers.split('\n') + if server.strip() != ''] + if _servers == []: + # nothing set, let's try to get the default pypi + if 'pypi' in sections: + _servers = ['pypi'] + else: + for server in _servers: + result = {'server': server} + result['username'] = config.get(server, 'username') + + # optional params + for key, default in (('repository', self.DEFAULT_REPOSITORY), + ('realm', self.DEFAULT_REALM), + ('password', None)): + if config.has_option(server, key): + result[key] = config.get(server, key) + else: + result[key] = default + + # work around people having "repository" for the "pypi" + # section of their config set to the HTTP (rather than + # HTTPS) URL + if (server == 'pypi' and + repository in (self.DEFAULT_REPOSITORY, 'pypi')): + result['repository'] = self.DEFAULT_REPOSITORY + elif (result['server'] != repository and + result['repository'] != repository): + result = {} + elif 'server-login' in sections: + # old format + server = 'server-login' + if config.has_option(server, 'repository'): + repository = config.get(server, 'repository') + else: + repository = self.DEFAULT_REPOSITORY + result = { + 'username': config.get(server, 'username'), + 'password': config.get(server, 'password'), + 'repository': repository, + 'server': server, + 'realm': self.DEFAULT_REALM + } + return result + + def update(self, username, password): + # import pdb; pdb.set_trace() + config = configparser.RawConfigParser() + fn = self.filename + config.read(fn) + if not config.has_section('pypi'): + config.add_section('pypi') + config.set('pypi', 'username', username) + config.set('pypi', 'password', password) + with open(fn, 'w') as f: + config.write(f) + +def _load_pypirc(index): + """ + Read the PyPI access configuration as supported by distutils. + """ + return PyPIRCFile(url=index.url).read() + +def _store_pypirc(index): + PyPIRCFile().update(index.username, index.password) + +# +# get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor +# tweaks +# + +def get_host_platform(): + """Return a string that identifies the current platform. This is used mainly to + distinguish platform-specific build directories and platform-specific built + distributions. Typically includes the OS name and version and the + architecture (as supplied by 'os.uname()'), although the exact information + included depends on the OS; eg. on Linux, the kernel version isn't + particularly important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + + """ + if os.name == 'nt': + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): + return 'win-arm32' + if '(arm64)' in sys.version.lower(): + return 'win-arm64' + return sys.platform + + # Set for cross builds explicitly + if "_PYTHON_HOST_PLATFORM" in os.environ: + return os.environ["_PYTHON_HOST_PLATFORM"] + + if os.name != 'posix' or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + + (osname, host, release, version, machine) = os.uname() + + # Convert the OS name to lowercase, remove '/' characters, and translate + # spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_').replace('/', '-') + + if osname[:5] == 'linux': + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + + elif osname[:5] == 'sunos': + if release[0] >= '5': # SunOS 5 == Solaris 2 + osname = 'solaris' + release = '%d.%s' % (int(release[0]) - 3, release[2:]) + # We can't use 'platform.architecture()[0]' because a + # bootstrap problem. We use a dict to get an error + # if some suspicious happens. + bitness = {2147483647:'32bit', 9223372036854775807:'64bit'} + machine += '.%s' % bitness[sys.maxsize] + # fall through to standard osname-release-machine representation + elif osname[:3] == 'aix': + from _aix_support import aix_platform + return aix_platform() + elif osname[:6] == 'cygwin': + osname = 'cygwin' + rel_re = re.compile (r'[\d.]+', re.ASCII) + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == 'darwin': + import _osx_support, distutils.sysconfig + osname, release, machine = _osx_support.get_platform_osx( + distutils.sysconfig.get_config_vars(), + osname, release, machine) + + return '%s-%s-%s' % (osname, release, machine) + + +_TARGET_TO_PLAT = { + 'x86' : 'win32', + 'x64' : 'win-amd64', + 'arm' : 'win-arm32', +} + + +def get_platform(): + if os.name != 'nt': + return get_host_platform() + cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') + if cross_compilation_target not in _TARGET_TO_PLAT: + return get_host_platform() + return _TARGET_TO_PLAT[cross_compilation_target] diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/version.py b/venv/Lib/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 000000000..c7c8bb6ff --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,739 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Implementation of a flexible versioning scheme providing support for PEP-440, +setuptools-compatible and semantic versioning. +""" + +import logging +import re + +from .compat import string_types +from .util import parse_requirement + +__all__ = ['NormalizedVersion', 'NormalizedMatcher', + 'LegacyVersion', 'LegacyMatcher', + 'SemanticVersion', 'SemanticMatcher', + 'UnsupportedVersionError', 'get_scheme'] + +logger = logging.getLogger(__name__) + + +class UnsupportedVersionError(ValueError): + """This is an unsupported version.""" + pass + + +class Version(object): + def __init__(self, s): + self._string = s = s.strip() + self._parts = parts = self.parse(s) + assert isinstance(parts, tuple) + assert len(parts) > 0 + + def parse(self, s): + raise NotImplementedError('please implement in a subclass') + + def _check_compatible(self, other): + if type(self) != type(other): + raise TypeError('cannot compare %r and %r' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + self._check_compatible(other) + return self._parts < other._parts + + def __gt__(self, other): + return not (self.__lt__(other) or self.__eq__(other)) + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __ge__(self, other): + return self.__gt__(other) or self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self._parts) + + def __repr__(self): + return "%s('%s')" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + @property + def is_prerelease(self): + raise NotImplementedError('Please implement in subclasses.') + + +class Matcher(object): + version_class = None + + # value is either a callable or the name of a method + _operators = { + '<': lambda v, c, p: v < c, + '>': lambda v, c, p: v > c, + '<=': lambda v, c, p: v == c or v < c, + '>=': lambda v, c, p: v == c or v > c, + '==': lambda v, c, p: v == c, + '===': lambda v, c, p: v == c, + # by default, compatible => >=. + '~=': lambda v, c, p: v == c or v > c, + '!=': lambda v, c, p: v != c, + } + + # this is a method only to support alternative implementations + # via overriding + def parse_requirement(self, s): + return parse_requirement(s) + + def __init__(self, s): + if self.version_class is None: + raise ValueError('Please specify a version class') + self._string = s = s.strip() + r = self.parse_requirement(s) + if not r: + raise ValueError('Not valid: %r' % s) + self.name = r.name + self.key = self.name.lower() # for case-insensitive comparisons + clist = [] + if r.constraints: + # import pdb; pdb.set_trace() + for op, s in r.constraints: + if s.endswith('.*'): + if op not in ('==', '!='): + raise ValueError('\'.*\' not allowed for ' + '%r constraints' % op) + # Could be a partial version (e.g. for '2.*') which + # won't parse as a version, so keep it as a string + vn, prefix = s[:-2], True + # Just to check that vn is a valid version + self.version_class(vn) + else: + # Should parse as a version, so we can create an + # instance for the comparison + vn, prefix = self.version_class(s), False + clist.append((op, vn, prefix)) + self._parts = tuple(clist) + + def match(self, version): + """ + Check if the provided version matches the constraints. + + :param version: The version to match against this instance. + :type version: String or :class:`Version` instance. + """ + if isinstance(version, string_types): + version = self.version_class(version) + for operator, constraint, prefix in self._parts: + f = self._operators.get(operator) + if isinstance(f, string_types): + f = getattr(self, f) + if not f: + msg = ('%r not implemented ' + 'for %s' % (operator, self.__class__.__name__)) + raise NotImplementedError(msg) + if not f(version, constraint, prefix): + return False + return True + + @property + def exact_version(self): + result = None + if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): + result = self._parts[0][1] + return result + + def _check_compatible(self, other): + if type(self) != type(other) or self.name != other.name: + raise TypeError('cannot compare %s and %s' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self.key == other.key and self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self.key) + hash(self._parts) + + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + +PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' + r'(\.(post)(\d+))?(\.(dev)(\d+))?' + r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') + + +def _pep_440_key(s): + s = s.strip() + m = PEP440_VERSION_RE.match(s) + if not m: + raise UnsupportedVersionError('Not a valid version: %s' % s) + groups = m.groups() + nums = tuple(int(v) for v in groups[1].split('.')) + while len(nums) > 1 and nums[-1] == 0: + nums = nums[:-1] + + if not groups[0]: + epoch = 0 + else: + epoch = int(groups[0][:-1]) + pre = groups[4:6] + post = groups[7:9] + dev = groups[10:12] + local = groups[13] + if pre == (None, None): + pre = () + else: + pre = pre[0], int(pre[1]) + if post == (None, None): + post = () + else: + post = post[0], int(post[1]) + if dev == (None, None): + dev = () + else: + dev = dev[0], int(dev[1]) + if local is None: + local = () + else: + parts = [] + for part in local.split('.'): + # to ensure that numeric compares as > lexicographic, avoid + # comparing them directly, but encode a tuple which ensures + # correct sorting + if part.isdigit(): + part = (1, int(part)) + else: + part = (0, part) + parts.append(part) + local = tuple(parts) + if not pre: + # either before pre-release, or final release and after + if not post and dev: + # before pre-release + pre = ('a', -1) # to sort before a0 + else: + pre = ('z',) # to sort after all pre-releases + # now look at the state of post and dev. + if not post: + post = ('_',) # sort before 'a' + if not dev: + dev = ('final',) + + #print('%s -> %s' % (s, m.groups())) + return epoch, nums, pre, post, dev, local + + +_normalized_key = _pep_440_key + + +class NormalizedVersion(Version): + """A rational version. + + Good: + 1.2 # equivalent to "1.2.0" + 1.2.0 + 1.2a1 + 1.2.3a2 + 1.2.3b1 + 1.2.3c1 + 1.2.3.4 + TODO: fill this out + + Bad: + 1 # minimum two numbers + 1.2a # release level must have a release serial + 1.2.3b + """ + def parse(self, s): + result = _normalized_key(s) + # _normalized_key loses trailing zeroes in the release + # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 + # However, PEP 440 prefix matching needs it: for example, + # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). + m = PEP440_VERSION_RE.match(s) # must succeed + groups = m.groups() + self._release_clause = tuple(int(v) for v in groups[1].split('.')) + return result + + PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) + + @property + def is_prerelease(self): + return any(t[0] in self.PREREL_TAGS for t in self._parts if t) + + +def _match_prefix(x, y): + x = str(x) + y = str(y) + if x == y: + return True + if not x.startswith(y): + return False + n = len(y) + return x[n] == '.' + + +class NormalizedMatcher(Matcher): + version_class = NormalizedVersion + + # value is either a callable or the name of a method + _operators = { + '~=': '_match_compatible', + '<': '_match_lt', + '>': '_match_gt', + '<=': '_match_le', + '>=': '_match_ge', + '==': '_match_eq', + '===': '_match_arbitrary', + '!=': '_match_ne', + } + + def _adjust_local(self, version, constraint, prefix): + if prefix: + strip_local = '+' not in constraint and version._parts[-1] + else: + # both constraint and version are + # NormalizedVersion instances. + # If constraint does not have a local component, + # ensure the version doesn't, either. + strip_local = not constraint._parts[-1] and version._parts[-1] + if strip_local: + s = version._string.split('+', 1)[0] + version = self.version_class(s) + return version, constraint + + def _match_lt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version >= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_gt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version <= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_le(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version <= constraint + + def _match_ge(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version >= constraint + + def _match_eq(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version == constraint) + else: + result = _match_prefix(version, constraint) + return result + + def _match_arbitrary(self, version, constraint, prefix): + return str(version) == str(constraint) + + def _match_ne(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version != constraint) + else: + result = not _match_prefix(version, constraint) + return result + + def _match_compatible(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version == constraint: + return True + if version < constraint: + return False +# if not prefix: +# return True + release_clause = constraint._release_clause + if len(release_clause) > 1: + release_clause = release_clause[:-1] + pfx = '.'.join([str(i) for i in release_clause]) + return _match_prefix(version, pfx) + +_REPLACEMENTS = ( + (re.compile('[.+-]$'), ''), # remove trailing puncts + (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start + (re.compile('^[.-]'), ''), # remove leading puncts + (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses + (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha + (re.compile(r'\b(pre-alpha|prealpha)\b'), + 'pre.alpha'), # standardise + (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses +) + +_SUFFIX_REPLACEMENTS = ( + (re.compile('^[:~._+-]+'), ''), # remove leading puncts + (re.compile('[,*")([\\]]'), ''), # remove unwanted chars + (re.compile('[~:+_ -]'), '.'), # replace illegal chars + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\.$'), ''), # trailing '.' +) + +_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') + + +def _suggest_semantic_version(s): + """ + Try to suggest a semantic form for a version for which + _suggest_normalized_version couldn't come up with anything. + """ + result = s.strip().lower() + for pat, repl in _REPLACEMENTS: + result = pat.sub(repl, result) + if not result: + result = '0.0.0' + + # Now look for numeric prefix, and separate it out from + # the rest. + #import pdb; pdb.set_trace() + m = _NUMERIC_PREFIX.match(result) + if not m: + prefix = '0.0.0' + suffix = result + else: + prefix = m.groups()[0].split('.') + prefix = [int(i) for i in prefix] + while len(prefix) < 3: + prefix.append(0) + if len(prefix) == 3: + suffix = result[m.end():] + else: + suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] + prefix = prefix[:3] + prefix = '.'.join([str(i) for i in prefix]) + suffix = suffix.strip() + if suffix: + #import pdb; pdb.set_trace() + # massage the suffix. + for pat, repl in _SUFFIX_REPLACEMENTS: + suffix = pat.sub(repl, suffix) + + if not suffix: + result = prefix + else: + sep = '-' if 'dev' in suffix else '+' + result = prefix + sep + suffix + if not is_semver(result): + result = None + return result + + +def _suggest_normalized_version(s): + """Suggest a normalized version close to the given version string. + + If you have a version string that isn't rational (i.e. NormalizedVersion + doesn't like it) then you might be able to get an equivalent (or close) + rational version from this function. + + This does a number of simple normalizations to the given string, based + on observation of versions currently in use on PyPI. Given a dump of + those version during PyCon 2009, 4287 of them: + - 2312 (53.93%) match NormalizedVersion without change + with the automatic suggestion + - 3474 (81.04%) match when using this suggestion method + + @param s {str} An irrational version string. + @returns A rational version string, or None, if couldn't determine one. + """ + try: + _normalized_key(s) + return s # already rational + except UnsupportedVersionError: + pass + + rs = s.lower() + + # part of this could use maketrans + for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), + ('beta', 'b'), ('rc', 'c'), ('-final', ''), + ('-pre', 'c'), + ('-release', ''), ('.release', ''), ('-stable', ''), + ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), + ('final', '')): + rs = rs.replace(orig, repl) + + # if something ends with dev or pre, we add a 0 + rs = re.sub(r"pre$", r"pre0", rs) + rs = re.sub(r"dev$", r"dev0", rs) + + # if we have something like "b-2" or "a.2" at the end of the + # version, that is probably beta, alpha, etc + # let's remove the dash or dot + rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) + + # 1.0-dev-r371 -> 1.0.dev371 + # 0.1-dev-r79 -> 0.1.dev79 + rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) + + # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 + rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) + + # Clean: v0.3, v1.0 + if rs.startswith('v'): + rs = rs[1:] + + # Clean leading '0's on numbers. + #TODO: unintended side-effect on, e.g., "2003.05.09" + # PyPI stats: 77 (~2%) better + rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) + + # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers + # zero. + # PyPI stats: 245 (7.56%) better + rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) + + # the 'dev-rNNN' tag is a dev tag + rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) + + # clean the - when used as a pre delimiter + rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) + + # a terminal "dev" or "devel" can be changed into ".dev0" + rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) + + # a terminal "dev" can be changed into ".dev0" + rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) + + # a terminal "final" or "stable" can be removed + rs = re.sub(r"(final|stable)$", "", rs) + + # The 'r' and the '-' tags are post release tags + # 0.4a1.r10 -> 0.4a1.post10 + # 0.9.33-17222 -> 0.9.33.post17222 + # 0.9.33-r17222 -> 0.9.33.post17222 + rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) + + # Clean 'r' instead of 'dev' usage: + # 0.9.33+r17222 -> 0.9.33.dev17222 + # 1.0dev123 -> 1.0.dev123 + # 1.0.git123 -> 1.0.dev123 + # 1.0.bzr123 -> 1.0.dev123 + # 0.1a0dev.123 -> 0.1a0.dev123 + # PyPI stats: ~150 (~4%) better + rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) + + # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: + # 0.2.pre1 -> 0.2c1 + # 0.2-c1 -> 0.2c1 + # 1.0preview123 -> 1.0c123 + # PyPI stats: ~21 (0.62%) better + rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) + + # Tcl/Tk uses "px" for their post release markers + rs = re.sub(r"p(\d+)$", r".post\1", rs) + + try: + _normalized_key(rs) + except UnsupportedVersionError: + rs = None + return rs + +# +# Legacy version processing (distribute-compatible) +# + +_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) +_VERSION_REPLACE = { + 'pre': 'c', + 'preview': 'c', + '-': 'final-', + 'rc': 'c', + 'dev': '@', + '': None, + '.': None, +} + + +def _legacy_key(s): + def get_parts(s): + result = [] + for p in _VERSION_PART.split(s.lower()): + p = _VERSION_REPLACE.get(p, p) + if p: + if '0' <= p[:1] <= '9': + p = p.zfill(8) + else: + p = '*' + p + result.append(p) + result.append('*final') + return result + + result = [] + for p in get_parts(s): + if p.startswith('*'): + if p < '*final': + while result and result[-1] == '*final-': + result.pop() + while result and result[-1] == '00000000': + result.pop() + result.append(p) + return tuple(result) + + +class LegacyVersion(Version): + def parse(self, s): + return _legacy_key(s) + + @property + def is_prerelease(self): + result = False + for x in self._parts: + if (isinstance(x, string_types) and x.startswith('*') and + x < '*final'): + result = True + break + return result + + +class LegacyMatcher(Matcher): + version_class = LegacyVersion + + _operators = dict(Matcher._operators) + _operators['~='] = '_match_compatible' + + numeric_re = re.compile(r'^(\d+(\.\d+)*)') + + def _match_compatible(self, version, constraint, prefix): + if version < constraint: + return False + m = self.numeric_re.match(str(constraint)) + if not m: + logger.warning('Cannot compute compatible match for version %s ' + ' and constraint %s', version, constraint) + return True + s = m.groups()[0] + if '.' in s: + s = s.rsplit('.', 1)[0] + return _match_prefix(version, s) + +# +# Semantic versioning +# + +_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' + r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' + r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) + + +def is_semver(s): + return _SEMVER_RE.match(s) + + +def _semantic_key(s): + def make_tuple(s, absent): + if s is None: + result = (absent,) + else: + parts = s[1:].split('.') + # We can't compare ints and strings on Python 3, so fudge it + # by zero-filling numeric values so simulate a numeric comparison + result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) + return result + + m = is_semver(s) + if not m: + raise UnsupportedVersionError(s) + groups = m.groups() + major, minor, patch = [int(i) for i in groups[:3]] + # choose the '|' and '*' so that versions sort correctly + pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') + return (major, minor, patch), pre, build + + +class SemanticVersion(Version): + def parse(self, s): + return _semantic_key(s) + + @property + def is_prerelease(self): + return self._parts[1][0] != '|' + + +class SemanticMatcher(Matcher): + version_class = SemanticVersion + + +class VersionScheme(object): + def __init__(self, key, matcher, suggester=None): + self.key = key + self.matcher = matcher + self.suggester = suggester + + def is_valid_version(self, s): + try: + self.matcher.version_class(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_matcher(self, s): + try: + self.matcher(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_constraint_list(self, s): + """ + Used for processing some metadata fields + """ + # See issue #140. Be tolerant of a single trailing comma. + if s.endswith(','): + s = s[:-1] + return self.is_valid_matcher('dummy_name (%s)' % s) + + def suggest(self, s): + if self.suggester is None: + result = None + else: + result = self.suggester(s) + return result + +_SCHEMES = { + 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, + _suggest_normalized_version), + 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), + 'semantic': VersionScheme(_semantic_key, SemanticMatcher, + _suggest_semantic_version), +} + +_SCHEMES['default'] = _SCHEMES['normalized'] + + +def get_scheme(name): + if name not in _SCHEMES: + raise ValueError('unknown scheme name: %r' % name) + return _SCHEMES[name] diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe b/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe new file mode 100644 index 0000000000000000000000000000000000000000..e6439e9e45897365d5ac6a85a46864c158a225fd GIT binary patch literal 90112 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�gPVRVBXt_FM7e4<}XM;HRH{62JZSn^<*L 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 OB+yBqlfeHwf&T)jA)JE% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe b/venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe new file mode 100644 index 0000000000000000000000000000000000000000..70a2ec2685231fe363cbc6e9109fd4e8a09f6db4 GIT binary patch literal 166400 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�L=7(0pY6Ly8H~~{Ts}z` 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe b/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe new file mode 100644 index 0000000000000000000000000000000000000000..46139dbf9400b7bc0b64e6756ce17b4eb5fd7436 GIT binary patch literal 99840 zcmeFadwf*Yx%fTFWXJ#sJ17GIjf@Z!jhAS=Bo5RJ%*Y;@2v$*4R5Y5>N-GUBf)zD! zCoRKvTCCc7THD&|v8VRfp0->qBm@X|0^WkC;C+t+8Wocu!hXNc+A|?wdp_s)|I0^b zulwa$&w6g_St~U+FLk+HE>|A^+qTQKg0K9mR=@xIk45&7(W{2I{yuQ~nJaRl+t0jy z&Nt`#=hff)jru#j?XSJ#JKwoC=D+i9e|`Kr{%?NAADVWZ|J(Q8b@v5@g@Z~nO?QmY zpLpWFv)Z%&=U1+2f0Fo*(#iIJsPCigAE@t&_FwS*#gKorKgRco`_69Ps?rx{%D<5L zu2$c#f3tRuw3(g3^sviy*Y^jw;%6V7l}+n%jd2am9prMoM9P0VsZE#jEmGm?9QjB% z*X8oa5C5`Xl?c$1?p$)J8?%)%bt&mIlKn{COo{|u3(v@LO_0FS9M|ur^KHm+y~I%Z z{&nTJ?qUGdpSfJ8_a*)x0$ncGCTFPsvhW45yBEgDS^pwGG9a0|EPlU#ewS$o1V8u=eYEW^?IVIw49Wvxn-3=JCdAS ztS6(T<)P#xyTaBJp;Etf>6uhX7IuFLHStyMm-?MF@rN3kXl{w0r#J77U9Bg5M=7A2 zTWw!~lu3A+GX(~##2@T)xzb~!NzX@8EO~utd2nTsE5}u_xjj@me#Kyyt1hvq)NgmJ zlm)kams5UQ+qVC8E{vFg`1;L-l>c=u@oS~?!gJMJ=F){Tm)+5m<}xxnmue}K@ccDX zz?sYHH#2kj`u}Y%_fVd>=!sdSUOf>jExJ)R4){&ak&Eco{6aTBsn{DeH%F6`zSP!q zM9j_BFW7QXa})55m6)CvRkzy*y(Trrj^fF8`d?u~e+L5xO zy8B4#2Vli&$WWfS)oMS*>6cC+6i1pFUDxq`Z_4x=GTS2NtGc{bY&iUh0({V+7Xyn#-l8VTQXDI4WA);RAYE zFLQnG3}>!Ub0d8+Gb=!!PDf8V9Z4@2&`VHT9(L6QJU=5j?x``~OV>$j$)76t?PeY? z0YB^Uue6vNk!^AE2}9rWrEOo6oKoYMlfi4nDYrfphwJig0}~63*H)>b!*$UZ4R!^xIqxL9714zlDzQ( z!KT^PkKt%~^8B9);;?4t2UiN^V92`pO2uX=GhR>3WheWZ_PSinEm~6(;9M)aI{hGs z_lLt$|N7E7LTF}M?=Vl@l&DG6?6kU1rPki~*Ht`S>NFoUzuNpb)qH$Zh3tjW*(~WT zG;LiCm>5`mW7?xSRqa?W6iPR91P$rg30=^XB*|X5kHbj;ncd%v-VB_AQ~S71BJV#2j6#Z!X)6?OVBr_L9C)6g4+lw^O)cx2)ql z7{(lH@-&xgWw&kHfNb6zIxV*7eC`21b$U}uR^+3MIjOM9E=Q^Efu>%iKt+E zwA8;+1TWjSi#k!tFwOfIT-0o@*lf-1wQVyb7=C@}OjaY|x%sLb3O`L@!Oq#X?{FqK z)7Sz$=4WHFPo~>GL*hx_B4@fOX)Y@1r;?uCtFq@nnpkP^jnMlWgu&?Mht&EGwG=)l zS$)WSa1D4vilVq7ZTVDh9cWlqXB-|A8y7TRv3@NZuq8f{x))2`FbE$hXW)8rL9w=ch;%trI=h6< z6cW;-+o6}2QimE=jubaG=4Of)NO6xdHcL0(tP5406&tB7A1vty;Rv)aNH^MY$ru~| zAd~Tu%7}UELW!}GDeS<1B+CPGWqxXWa1bHTN%mTuapjo!Idw*0j5D4>3Nd^c(sv{~ z+mg|qE5l=!6_g0BfIX<$KZY#BF7wwJ51%n6Hu88wmqYD43t`40EJ3 zp4OO=wtSOS>?9V*xV7c(Iwts@p174xpx?SV7nC+P3XKus;)i(8x*a(H(l8S#V;;z` zu=qIdPd-~I+obWpGx;)1&puz4jw~G@n7i|3i1ZkyP*+tM^CYJoOXq9Lcj`tLC0p0izuqNlB2h;@tp6Dp!74QX6Aj|sU8bj}~qP*oVy8mb1x2I+RI9@td>QQFNupg!_K(x=gc ztoYBVT)p^mMJ~&ZM9ns4vNCnlbiX3eFhB0b$hZ2o)WB|3j(!k9$P?v}; znyx1yt94Z@M+_8a5nr-yfGB_p19fnvuIlo*1#XR1GwAxkoXvhZ3;fE!4M05&Qz zPBa1Mx2|Qc3&o2-s}ygy9zYs{CV%x`U7a>sBq1sU3hy{2#}yx{x3(75^|ab{JomFU zy>)X@YR^b0dWQdJNcjvA!F1^@Z0>iog>c2ept(UuH+r&#MHylJY#dzAHJrAsvk6wT zq#6mUGP_lo*y}_fjORMB9oApYl!12&FPtv>xzM^nwZT%l(rYPsL41rgxvyD(CvbtVOd8dWk0ASxn6}95;ohA{Z=%PfY>f7kRYXk z&XKIG)|;7cJ#7fxlDVY9(x4vLGXH#~Fe+V9t@|F`RMXFuv9)>iz`pu}U(x$iaS_H* zEB8n%BY?%Jx;Ypy$8zmm*_x^TH8b+Q)0Hvt;_2){b59IgK;hYht#4hZ$c$GeKU@-? zynq2GeLvnUpTb%`)B;u}Y^OxJWOtNRQwd;(ZFYMPc&e~UWl5X2}X?9oo{(xpQbaG^v_t5(SpLsLKh!vxl(F< zr#nf7lJq;0mWG?(jcE>a=8Z)tY<@R>R=a1{nGR5#j2p=aLfP7&XMAnnAGQlxvIO&F zM=u0dtFsy-yIK}&cd8B%e4B(>ww%;VVxpa(8|0*>s;q5FKqtvum#UH!XRolgUcC^M z+iJ}NYpB1{2H?_&b*fWOu=jFBH=<@M@R@fZ7=h;0%c#J*5!O%rvSgjM@B5@6u3SkR zYT;0a?4Cr1uZEi-|6A^IRbFV{X;mb|eAe~S1eiD2x|$Foc6Gulrj--hU|Ver7E^F{ z{9$X4Y}~};BHdit;*uacZSe{fn#u$BiX}USN$Xu+770!}k1FicnR&6tc$wl3&h1~csLzT(hIJr0n0j((aGwtD={$uQu z|K=e7&BFk+&>y@Wa$Ak$9|1>|wJB(>uMw=?A_Il`j=|1&a{{1^nTv+F|i4^|Bsq`RQM)GmZr72l0FJg1kDT%`c*h(W{brRZ@#z zBpTh`9;>cHcL>x4I%6Btmmt`Stm3y`y#m=|xuzo8@=mLrxDu^1wFXHokJQ?Rkf|+i zD{Bo^qQ4>cuuA2|uLW*L1vjUQSe#)wNH=p7md=9d0D|!qFr3{{b5E7$=JSE@0$>pP zUS|GGIy?W8%>1c~F5b-iqh+s6)|MBXijJgaby&@+)sKXGN}chAO8Y{kt@B5Wb-59H zQ;achmN9RMt=E>X)0S^8+XUiDlc=E93;^l0f1*uLXtr^9|AIx1>7seFu7wYS?v3Yx zD6Ev@!5WnI;mn5DdId+3`oF>Vvs6;uw5c@eIeZv0TBr&AeL zTH&=b#NH@Krzht^Kohs}f4ovpJXnp5Q3vnu9LRJkHt2~ko4vb6@bc4)Brx3Cj#V)$ z3EV_DbuXmaT04Om1vb_XKt-xZzZNmWE>j-{jIR$O6e63g5{e#Dw3r{ibpaKkwflj< zmDcy9Nx&t-#dipsuGHz27NtrMwUFPN7l5=a{yL!t{}7vlQu#hs7$k;37SVK`+p{V359|i}L)_ zbYp*)HJ;JwW&1^EfWz3abK3K_ZG%OgYJDg~8;TBqwRYDVZ^%|?FG{;3s5Z@ZyvX|V zY1xHKT}XQZi3|t;NCpa6G!z%I#zSjp=@jq+`<$S_eF$=9XS%?;n|3ll(Ua4<8mpwQ zxW{@7!;FZ!H7wC~YnmumCM#&Nf+j0yvVzIGi^Nul^{h`ssYbUF%b7zeI;@?vB9zwe z$jsIUOsioLHkW_3Y2hUf4@o`8j5xQD^9m5Ck^_nHk;LS#h*4{~tXuL080#x#KeKQA z*eCmJ+enmR*fu{AbIcsw+)`s6t`ULxQ$2Bg={&*LQ8l28uco;>ezrAdRNsdG9GTle zabaryKBk6oP&Z#FZD6fsg@&-s#wI(`b0`|vbl*9;ami*X?g&5B=kKoA1*J`bBaqJhoY4?bjMQ4>W5{hT>lbFZSga~61m=Ef*{b&g(U z={aPJd5)jiQFoVKwkh>%RgL_x*%}F0^>f02#m_VXAKr&CWnI|(G}!Y=dZ2D@2$`Qp zdb&bopQZ;%Fz{hmoAN2m3r627de5#f>^jq3#C!$5``eHpoMZGgdhOUfSZ>R#)O}1y zDii=GNrpxB2Nx@Vz#by@Mszm?5mCJ6$Wl_~U}~QtmjJx558%Qxtlyxnv~%Li zZoHHt#0Eys!Op!@M*A{8KT7)S`BBq0=c^9lpDN4#tjPeQFtue7SuhX#$TGawW2mQCz zk>^$N5WHF_*=u!yO>t3-!YhOj5}S`y;+Z)-hs@2|@;p6#)=DxEe-Lbh)s~0MR@>LU zUQ9Af*rP2cLtEaeE#Ep;IF+bXif@K1_STpkC~LqaKEgVm*=Bge7gbg=lm9{PfF+40YkEk+I^i=wzWl3rq<1h|w{(E=*eo&@)Gg@uE*@<3y-6U3PN4 zoPSj>uIkak$oS5**!MGYQ2b@*aStMwLW9BnO)5-3wN8>75A+3QanDWY`)jrnBqLr zWd^X6JYJ4{>*KO}in`aiV-tjpFq+n0kMY*%h?&=--?MpUcgX8)i1|duOAl(O92C#B zH|TbY9&p!x0--w1+>q)3x=p(meq#Ndp*f>W-3%&puS1`Co=h2GJip>#>NiBn9w@3Y z57d~4+z)sot;ak;o8Q-a5>lXNNC-h5fX`l}iJ?3x;-2F80O-OJUfa*&B1450vUj z&tr(`SJS)dIS>7_y{so0x|AJo+=MCiOYmP%UyPVo2{QB@2^J*J=)Zf|FIj_!&-&xA zEGVqY2(n=5QC2UUZK>?Sd`1QbCG=n+qfvH9)zoeR+=!X1l? zeGrcMy~pD7tQV+dRF2V_AEhDdzlkM^Qwsc1DBp>33N_Wf&PEelol%?>B?RL9LG_K(7{7T-aky#k{eyzWJ70zpw-l#G1-sjFV#E0L#)bs7 zRqqU{&u^bxD%(~n4gH!_YFC{5Ot2Q5!UVb@8HQPlu?204DPTvI%_+t^88iD5+vM@h z88ka(z=u!Rq4|9Sx1NCI$>`5ViyLGd$%%Q4Bf0T6ES=NIrP!B6F5PK;B%8KVLYqi; zPEEhsH^!B$|AaB|TN9zQx>@pB5$c5biPmI*6vC}5^s15_B*x;_l*B9VAdW{w$#SX7z^2O9yGo9S4qq#c_GV0G6;?{(f%f}Gl2T_(xPM|?bEIi2 zKn|R9fY{X1JH@z_3@yyfvUZ?%Tw&_tL(aL(ak)dusNw>$65-Zm?FYk_R_tZ^&E1Z5 z_f+cz?YKgu6Hec!C(aN_)2$~)n{7}Y$Ey2^h#Ic~MllRAu4!^?Q^pvh80%ND;-bk| zpMC@aCI*OVILx|(<}ym)4FpXP2B`&uzf_Gc|WOMW`rYzYVosqJ^yDH=A(Q^b#rCgr@C+jOFD- zjFw!iyO3IYOFTsb@uIpgb)S;DV;FFH9Wqe+alOQE>;#vUk$IR^PpJ%_x8V$f+tXKd z2aAo^71m-V%Z4y}tuq8+*c#mkc>rOmgEJnQNkfpQj+c=SvgRI?ZCpFvWz-gDI86CT zd!!%lqH@2@G0ggq&NJg!pg2_eEXGkC8(`c~>`Hf87YxX7vP9w9woG|O|_QpzapNxOF zaxjQdSEU!n_f_mQRy5JnkoyK!J=IGrgDrRbZ8l1r@#K$>kiXeGt48>gAG zuW}VLNO&4K4YcmMNrflUnl*c7rmR=WuA!_|Gb57(*>G8ZB1y@));TFLNXPP7#GgpH zKeDjhq0+fI+Hw@a;L1T14{6~oxO9ldu+y6Gz5rX84@{9ckidXP z&PWosSr_uVRK$y?OIOgC-njl5KI)7ET0Y+Tl?)s)G$p)DXeTJaaxIp!$-;5W$M*eb zB@xq8Gz2n4*E88pBAm|_{b;6D_(yU{=7bjw!4(VYoJm$vp9Vtc4P=!|sM=vMNlyn# zri4+3aS@2ZeP)W=!E83@>Sw{AF}m4Qss@noJk0>~WF~5~Kw3TLNRsJ!L_P`6XM-iy zRJv69OLz{^cDrW_i39UoE$yE5gdo6D;W3W3rCStlPcjpphaDZTBs`Z;&sma507TAz zzehR{*vlf@zPpJS6NgX;3EC+)igLE^uH~FCN>}P^<}#_%xL(E%A5y-Jw|FCodx|58 z`F`

      This is a doc

      ') + + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parse(doc, **kwargs) + + +def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML fragment as a string or file-like object into a tree + + :arg doc: the fragment to parse as a string or file-like object + + :arg container: the container context to parse the fragment in + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import parseFragment + >>> parseFragment('this is a fragment') + + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parseFragment(doc, container=container, **kwargs) + + +def method_decorator_metaclass(function): + class Decorated(type): + def __new__(meta, classname, bases, classDict): + for attributeName, attribute in classDict.items(): + if isinstance(attribute, types.FunctionType): + attribute = function(attribute) + + classDict[attributeName] = attribute + return type.__new__(meta, classname, bases, classDict) + return Decorated + + +class HTMLParser(object): + """HTML parser + + Generates a tree structure from a stream of (possibly malformed) HTML. + + """ + + def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): + """ + :arg tree: a treebuilder class controlling the type of tree that will be + returned. Built in treebuilders can be accessed through + html5lib.treebuilders.getTreeBuilder(treeType) + + :arg strict: raise an exception when a parse error is encountered + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :arg debug: whether or not to enable debug mode which logs things + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() # generates parser with etree builder + >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict + + """ + + # Raise an exception on the first error encountered + self.strict = strict + + if tree is None: + tree = treebuilders.getTreeBuilder("etree") + self.tree = tree(namespaceHTMLElements) + self.errors = [] + + self.phases = {name: cls(self, self.tree) for name, cls in + getPhases(debug).items()} + + def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): + + self.innerHTMLMode = innerHTML + self.container = container + self.scripting = scripting + self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) + self.reset() + + try: + self.mainLoop() + except _ReparseException: + self.reset() + self.mainLoop() + + def reset(self): + self.tree.reset() + self.firstStartTag = False + self.errors = [] + self.log = [] # only used with debug mode + # "quirks" / "limited quirks" / "no quirks" + self.compatMode = "no quirks" + + if self.innerHTMLMode: + self.innerHTML = self.container.lower() + + if self.innerHTML in cdataElements: + self.tokenizer.state = self.tokenizer.rcdataState + elif self.innerHTML in rcdataElements: + self.tokenizer.state = self.tokenizer.rawtextState + elif self.innerHTML == 'plaintext': + self.tokenizer.state = self.tokenizer.plaintextState + else: + # state already is data state + # self.tokenizer.state = self.tokenizer.dataState + pass + self.phase = self.phases["beforeHtml"] + self.phase.insertHtmlElement() + self.resetInsertionMode() + else: + self.innerHTML = False # pylint:disable=redefined-variable-type + self.phase = self.phases["initial"] + + self.lastPhase = None + + self.beforeRCDataPhase = None + + self.framesetOK = True + + @property + def documentEncoding(self): + """Name of the character encoding that was used to decode the input stream, or + :obj:`None` if that is not determined yet + + """ + if not hasattr(self, 'tokenizer'): + return None + return self.tokenizer.stream.charEncoding[0].name + + def isHTMLIntegrationPoint(self, element): + if (element.name == "annotation-xml" and + element.namespace == namespaces["mathml"]): + return ("encoding" in element.attributes and + element.attributes["encoding"].translate( + asciiUpper2Lower) in + ("text/html", "application/xhtml+xml")) + else: + return (element.namespace, element.name) in htmlIntegrationPointElements + + def isMathMLTextIntegrationPoint(self, element): + return (element.namespace, element.name) in mathmlTextIntegrationPointElements + + def mainLoop(self): + CharactersToken = tokenTypes["Characters"] + SpaceCharactersToken = tokenTypes["SpaceCharacters"] + StartTagToken = tokenTypes["StartTag"] + EndTagToken = tokenTypes["EndTag"] + CommentToken = tokenTypes["Comment"] + DoctypeToken = tokenTypes["Doctype"] + ParseErrorToken = tokenTypes["ParseError"] + + for token in self.tokenizer: + prev_token = None + new_token = token + while new_token is not None: + prev_token = new_token + currentNode = self.tree.openElements[-1] if self.tree.openElements else None + currentNodeNamespace = currentNode.namespace if currentNode else None + currentNodeName = currentNode.name if currentNode else None + + type = new_token["type"] + + if type == ParseErrorToken: + self.parseError(new_token["data"], new_token.get("datavars", {})) + new_token = None + else: + if (len(self.tree.openElements) == 0 or + currentNodeNamespace == self.tree.defaultNamespace or + (self.isMathMLTextIntegrationPoint(currentNode) and + ((type == StartTagToken and + token["name"] not in frozenset(["mglyph", "malignmark"])) or + type in (CharactersToken, SpaceCharactersToken))) or + (currentNodeNamespace == namespaces["mathml"] and + currentNodeName == "annotation-xml" and + type == StartTagToken and + token["name"] == "svg") or + (self.isHTMLIntegrationPoint(currentNode) and + type in (StartTagToken, CharactersToken, SpaceCharactersToken))): + phase = self.phase + else: + phase = self.phases["inForeignContent"] + + if type == CharactersToken: + new_token = phase.processCharacters(new_token) + elif type == SpaceCharactersToken: + new_token = phase.processSpaceCharacters(new_token) + elif type == StartTagToken: + new_token = phase.processStartTag(new_token) + elif type == EndTagToken: + new_token = phase.processEndTag(new_token) + elif type == CommentToken: + new_token = phase.processComment(new_token) + elif type == DoctypeToken: + new_token = phase.processDoctype(new_token) + + if (type == StartTagToken and prev_token["selfClosing"] and + not prev_token["selfClosingAcknowledged"]): + self.parseError("non-void-element-with-trailing-solidus", + {"name": prev_token["name"]}) + + # When the loop finishes it's EOF + reprocess = True + phases = [] + while reprocess: + phases.append(self.phase) + reprocess = self.phase.processEOF() + if reprocess: + assert self.phase not in phases + + def parse(self, stream, *args, **kwargs): + """Parse a HTML document into a well-formed tree + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element). + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parse('

      This is a doc

      ') + + + """ + self._parse(stream, False, None, *args, **kwargs) + return self.tree.getDocument() + + def parseFragment(self, stream, *args, **kwargs): + """Parse a HTML fragment into a well-formed tree fragment + + :arg container: name of the element we're setting the innerHTML + property if set to None, default to 'div' + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parseFragment('this is a fragment') + + + """ + self._parse(stream, True, *args, **kwargs) + return self.tree.getFragment() + + def parseError(self, errorcode="XXX-undefined-error", datavars=None): + # XXX The idea is to make errorcode mandatory. + if datavars is None: + datavars = {} + self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) + if self.strict: + raise ParseError(E[errorcode] % datavars) + + def adjustMathMLAttributes(self, token): + adjust_attributes(token, adjustMathMLAttributes) + + def adjustSVGAttributes(self, token): + adjust_attributes(token, adjustSVGAttributes) + + def adjustForeignAttributes(self, token): + adjust_attributes(token, adjustForeignAttributesMap) + + def reparseTokenNormal(self, token): + # pylint:disable=unused-argument + self.parser.phase() + + def resetInsertionMode(self): + # The name of this method is mostly historical. (It's also used in the + # specification.) + last = False + newModes = { + "select": "inSelect", + "td": "inCell", + "th": "inCell", + "tr": "inRow", + "tbody": "inTableBody", + "thead": "inTableBody", + "tfoot": "inTableBody", + "caption": "inCaption", + "colgroup": "inColumnGroup", + "table": "inTable", + "head": "inBody", + "body": "inBody", + "frameset": "inFrameset", + "html": "beforeHead" + } + for node in self.tree.openElements[::-1]: + nodeName = node.name + new_phase = None + if node == self.tree.openElements[0]: + assert self.innerHTML + last = True + nodeName = self.innerHTML + # Check for conditions that should only happen in the innerHTML + # case + if nodeName in ("select", "colgroup", "head", "html"): + assert self.innerHTML + + if not last and node.namespace != self.tree.defaultNamespace: + continue + + if nodeName in newModes: + new_phase = self.phases[newModes[nodeName]] + break + elif last: + new_phase = self.phases["inBody"] + break + + self.phase = new_phase + + def parseRCDataRawtext(self, token, contentType): + # Generic RCDATA/RAWTEXT Parsing algorithm + assert contentType in ("RAWTEXT", "RCDATA") + + self.tree.insertElement(token) + + if contentType == "RAWTEXT": + self.tokenizer.state = self.tokenizer.rawtextState + else: + self.tokenizer.state = self.tokenizer.rcdataState + + self.originalPhase = self.phase + + self.phase = self.phases["text"] + + +@_utils.memoize +def getPhases(debug): + def log(function): + """Logger that records which phase processes each token""" + type_names = {value: key for key, value in tokenTypes.items()} + + def wrapped(self, *args, **kwargs): + if function.__name__.startswith("process") and len(args) > 0: + token = args[0] + info = {"type": type_names[token['type']]} + if token['type'] in tagTokenTypes: + info["name"] = token['name'] + + self.parser.log.append((self.parser.tokenizer.state.__name__, + self.parser.phase.__class__.__name__, + self.__class__.__name__, + function.__name__, + info)) + return function(self, *args, **kwargs) + else: + return function(self, *args, **kwargs) + return wrapped + + def getMetaclass(use_metaclass, metaclass_func): + if use_metaclass: + return method_decorator_metaclass(metaclass_func) + else: + return type + + # pylint:disable=unused-argument + class Phase(with_metaclass(getMetaclass(debug, log))): + """Base class for helper object that implements each phase of processing + """ + __slots__ = ("parser", "tree", "__startTagCache", "__endTagCache") + + def __init__(self, parser, tree): + self.parser = parser + self.tree = tree + self.__startTagCache = {} + self.__endTagCache = {} + + def processEOF(self): + raise NotImplementedError + + def processComment(self, token): + # For most phases the following is correct. Where it's not it will be + # overridden. + self.tree.insertComment(token, self.tree.openElements[-1]) + + def processDoctype(self, token): + self.parser.parseError("unexpected-doctype") + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processSpaceCharacters(self, token): + self.tree.insertText(token["data"]) + + def processStartTag(self, token): + # Note the caching is done here rather than BoundMethodDispatcher as doing it there + # requires a circular reference to the Phase, and this ends up with a significant + # (CPython 2.7, 3.8) GC cost when parsing many short inputs + name = token["name"] + # In Py2, using `in` is quicker in general than try/except KeyError + # In Py3, `in` is quicker when there are few cache hits (typically short inputs) + if name in self.__startTagCache: + func = self.__startTagCache[name] + else: + func = self.__startTagCache[name] = self.startTagHandler[name] + # bound the cache size in case we get loads of unknown tags + while len(self.__startTagCache) > len(self.startTagHandler) * 1.1: + # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 + self.__startTagCache.pop(next(iter(self.__startTagCache))) + return func(token) + + def startTagHtml(self, token): + if not self.parser.firstStartTag and token["name"] == "html": + self.parser.parseError("non-html-root") + # XXX Need a check here to see if the first start tag token emitted is + # this token... If it's not, invoke self.parser.parseError(). + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[0].attributes: + self.tree.openElements[0].attributes[attr] = value + self.parser.firstStartTag = False + + def processEndTag(self, token): + # Note the caching is done here rather than BoundMethodDispatcher as doing it there + # requires a circular reference to the Phase, and this ends up with a significant + # (CPython 2.7, 3.8) GC cost when parsing many short inputs + name = token["name"] + # In Py2, using `in` is quicker in general than try/except KeyError + # In Py3, `in` is quicker when there are few cache hits (typically short inputs) + if name in self.__endTagCache: + func = self.__endTagCache[name] + else: + func = self.__endTagCache[name] = self.endTagHandler[name] + # bound the cache size in case we get loads of unknown tags + while len(self.__endTagCache) > len(self.endTagHandler) * 1.1: + # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 + self.__endTagCache.pop(next(iter(self.__endTagCache))) + return func(token) + + class InitialPhase(Phase): + __slots__ = tuple() + + def processSpaceCharacters(self, token): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + correct = token["correct"] + + if (name != "html" or publicId is not None or + systemId is not None and systemId != "about:legacy-compat"): + self.parser.parseError("unknown-doctype") + + if publicId is None: + publicId = "" + + self.tree.insertDoctype(token) + + if publicId != "": + publicId = publicId.translate(asciiUpper2Lower) + + if (not correct or token["name"] != "html" or + publicId.startswith( + ("+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//")) or + publicId in ("-//w3o//dtd w3 html strict 3.0//en//", + "-/w3c/dtd html 4.0 transitional/en", + "html") or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is None or + systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): + self.parser.compatMode = "quirks" + elif (publicId.startswith( + ("-//w3c//dtd xhtml 1.0 frameset//", + "-//w3c//dtd xhtml 1.0 transitional//")) or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is not None): + self.parser.compatMode = "limited quirks" + + self.parser.phase = self.parser.phases["beforeHtml"] + + def anythingElse(self): + self.parser.compatMode = "quirks" + self.parser.phase = self.parser.phases["beforeHtml"] + + def processCharacters(self, token): + self.parser.parseError("expected-doctype-but-got-chars") + self.anythingElse() + return token + + def processStartTag(self, token): + self.parser.parseError("expected-doctype-but-got-start-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEndTag(self, token): + self.parser.parseError("expected-doctype-but-got-end-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEOF(self): + self.parser.parseError("expected-doctype-but-got-eof") + self.anythingElse() + return True + + class BeforeHtmlPhase(Phase): + __slots__ = tuple() + + # helper methods + def insertHtmlElement(self): + self.tree.insertRoot(impliedTagToken("html", "StartTag")) + self.parser.phase = self.parser.phases["beforeHead"] + + # other + def processEOF(self): + self.insertHtmlElement() + return True + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.insertHtmlElement() + return token + + def processStartTag(self, token): + if token["name"] == "html": + self.parser.firstStartTag = True + self.insertHtmlElement() + return token + + def processEndTag(self, token): + if token["name"] not in ("head", "body", "html", "br"): + self.parser.parseError("unexpected-end-tag-before-html", + {"name": token["name"]}) + else: + self.insertHtmlElement() + return token + + class BeforeHeadPhase(Phase): + __slots__ = tuple() + + def processEOF(self): + self.startTagHead(impliedTagToken("head", "StartTag")) + return True + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.tree.insertElement(token) + self.tree.headPointer = self.tree.openElements[-1] + self.parser.phase = self.parser.phases["inHead"] + + def startTagOther(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagImplyHead(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagOther(self, token): + self.parser.parseError("end-tag-after-implied-root", + {"name": token["name"]}) + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther + + endTagHandler = _utils.MethodDispatcher([ + (("head", "body", "html", "br"), endTagImplyHead) + ]) + endTagHandler.default = endTagOther + + class InHeadPhase(Phase): + __slots__ = tuple() + + # the real thing + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.parser.parseError("two-heads-are-not-better-than-one") + + def startTagBaseLinkCommand(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagMeta(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + attributes = token["data"] + if self.parser.tokenizer.stream.charEncoding[1] == "tentative": + if "charset" in attributes: + self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) + elif ("content" in attributes and + "http-equiv" in attributes and + attributes["http-equiv"].lower() == "content-type"): + # Encoding it as UTF-8 here is a hack, as really we should pass + # the abstract Unicode string, and just use the + # ContentAttrParser on that, but using UTF-8 allows all chars + # to be encoded and as a ASCII-superset works. + data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) + parser = _inputstream.ContentAttrParser(data) + codec = parser.parse() + self.parser.tokenizer.stream.changeEncoding(codec) + + def startTagTitle(self, token): + self.parser.parseRCDataRawtext(token, "RCDATA") + + def startTagNoFramesStyle(self, token): + # Need to decide whether to implement the scripting-disabled case + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagNoscript(self, token): + if self.parser.scripting: + self.parser.parseRCDataRawtext(token, "RAWTEXT") + else: + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inHeadNoscript"] + + def startTagScript(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState + self.parser.originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["text"] + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHead(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "head", "Expected head got %s" % node.name + self.parser.phase = self.parser.phases["afterHead"] + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.endTagHead(impliedTagToken("head")) + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("title", startTagTitle), + (("noframes", "style"), startTagNoFramesStyle), + ("noscript", startTagNoscript), + ("script", startTagScript), + (("base", "basefont", "bgsound", "command", "link"), + startTagBaseLinkCommand), + ("meta", startTagMeta), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther + + endTagHandler = _utils.MethodDispatcher([ + ("head", endTagHead), + (("br", "html", "body"), endTagHtmlBodyBr) + ]) + endTagHandler.default = endTagOther + + class InHeadNoscriptPhase(Phase): + __slots__ = tuple() + + def processEOF(self): + self.parser.parseError("eof-in-head-noscript") + self.anythingElse() + return True + + def processComment(self, token): + return self.parser.phases["inHead"].processComment(token) + + def processCharacters(self, token): + self.parser.parseError("char-in-head-noscript") + self.anythingElse() + return token + + def processSpaceCharacters(self, token): + return self.parser.phases["inHead"].processSpaceCharacters(token) + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBaseLinkCommand(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagHeadNoscript(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagNoscript(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "noscript", "Expected noscript got %s" % node.name + self.parser.phase = self.parser.phases["inHead"] + + def endTagBr(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + # Caller must raise parse error first! + self.endTagNoscript(impliedTagToken("noscript")) + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + (("basefont", "bgsound", "link", "meta", "noframes", "style"), startTagBaseLinkCommand), + (("head", "noscript"), startTagHeadNoscript), + ]) + startTagHandler.default = startTagOther + + endTagHandler = _utils.MethodDispatcher([ + ("noscript", endTagNoscript), + ("br", endTagBr), + ]) + endTagHandler.default = endTagOther + + class AfterHeadPhase(Phase): + __slots__ = tuple() + + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBody(self, token): + self.parser.framesetOK = False + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inBody"] + + def startTagFrameset(self, token): + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] + + def startTagFromHead(self, token): + self.parser.parseError("unexpected-start-tag-out-of-my-head", + {"name": token["name"]}) + self.tree.openElements.append(self.tree.headPointer) + self.parser.phases["inHead"].processStartTag(token) + for node in self.tree.openElements[::-1]: + if node.name == "head": + self.tree.openElements.remove(node) + break + + def startTagHead(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.tree.insertElement(impliedTagToken("body", "StartTag")) + self.parser.phase = self.parser.phases["inBody"] + self.parser.framesetOK = True + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("body", startTagBody), + ("frameset", startTagFrameset), + (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", + "style", "title"), + startTagFromHead), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther + endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), + endTagHtmlBodyBr)]) + endTagHandler.default = endTagOther + + class InBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody + # the really-really-really-very crazy mode + __slots__ = ("processSpaceCharacters",) + + def __init__(self, *args, **kwargs): + super(InBodyPhase, self).__init__(*args, **kwargs) + # Set this to the default handler + self.processSpaceCharacters = self.processSpaceCharactersNonPre + + def isMatchingFormattingElement(self, node1, node2): + return (node1.name == node2.name and + node1.namespace == node2.namespace and + node1.attributes == node2.attributes) + + # helper + def addFormattingElement(self, token): + self.tree.insertElement(token) + element = self.tree.openElements[-1] + + matchingElements = [] + for node in self.tree.activeFormattingElements[::-1]: + if node is Marker: + break + elif self.isMatchingFormattingElement(node, element): + matchingElements.append(node) + + assert len(matchingElements) <= 3 + if len(matchingElements) == 3: + self.tree.activeFormattingElements.remove(matchingElements[-1]) + self.tree.activeFormattingElements.append(element) + + # the real deal + def processEOF(self): + allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", + "tfoot", "th", "thead", "tr", "body", + "html")) + for node in self.tree.openElements[::-1]: + if node.name not in allowed_elements: + self.parser.parseError("expected-closing-tag-but-got-eof") + break + # Stop parsing + + def processSpaceCharactersDropNewline(self, token): + # Sometimes (start of
      , , and 

      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[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))? +-(?P\w+\d+(\.\w+\d+)*) +-(?P\w+) +-(?P\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))?$ +''', re.IGNORECASE | re.VERBOSE) + +SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') +SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') +SHEBANG_PYTHON = b'#!python' +SHEBANG_PYTHONW = b'#!pythonw' + +if os.sep == '/': + to_posix = lambda o: o +else: + to_posix = lambda o: o.replace(os.sep, '/') + + +class Mounter(object): + def __init__(self): + self.impure_wheels = {} + self.libs = {} + + def add(self, pathname, extensions): + self.impure_wheels[pathname] = extensions + self.libs.update(extensions) + + def remove(self, pathname): + extensions = self.impure_wheels.pop(pathname) + for k, v in extensions: + if k in self.libs: + del self.libs[k] + + def find_module(self, fullname, path=None): + if fullname in self.libs: + result = self + else: + result = None + return result + + def load_module(self, fullname): + if fullname in sys.modules: + result = sys.modules[fullname] + else: + if fullname not in self.libs: + raise ImportError('unable to find extension for %s' % fullname) + result = imp.load_dynamic(fullname, self.libs[fullname]) + result.__loader__ = self + parts = fullname.rsplit('.', 1) + if len(parts) > 1: + result.__package__ = parts[0] + return result + +_hook = Mounter() + + +class Wheel(object): + """ + Class to build and install from Wheel files (PEP 427). + """ + + wheel_version = (1, 1) + hash_kind = 'sha256' + + def __init__(self, filename=None, sign=False, verify=False): + """ + Initialise an instance using a (valid) filename. + """ + self.sign = sign + self.should_verify = verify + self.buildver = '' + self.pyver = [PYVER] + self.abi = ['none'] + self.arch = ['any'] + self.dirname = os.getcwd() + if filename is None: + self.name = 'dummy' + self.version = '0.1' + self._filename = self.filename + else: + m = NAME_VERSION_RE.match(filename) + if m: + info = m.groupdict('') + self.name = info['nm'] + # Reinstate the local version separator + self.version = info['vn'].replace('_', '-') + self.buildver = info['bn'] + self._filename = self.filename + else: + dirname, filename = os.path.split(filename) + m = FILENAME_RE.match(filename) + if not m: + raise DistlibException('Invalid name or ' + 'filename: %r' % filename) + if dirname: + self.dirname = os.path.abspath(dirname) + self._filename = filename + info = m.groupdict('') + self.name = info['nm'] + self.version = info['vn'] + self.buildver = info['bn'] + self.pyver = info['py'].split('.') + self.abi = info['bi'].split('.') + self.arch = info['ar'].split('.') + + @property + def filename(self): + """ + Build and return a filename from the various components. + """ + if self.buildver: + buildver = '-' + self.buildver + else: + buildver = '' + pyver = '.'.join(self.pyver) + abi = '.'.join(self.abi) + arch = '.'.join(self.arch) + # replace - with _ as a local version separator + version = self.version.replace('-', '_') + return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, + pyver, abi, arch) + + @property + def exists(self): + path = os.path.join(self.dirname, self.filename) + return os.path.isfile(path) + + @property + def tags(self): + for pyver in self.pyver: + for abi in self.abi: + for arch in self.arch: + yield pyver, abi, arch + + @cached_property + def metadata(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + wrapper = codecs.getreader('utf-8') + with ZipFile(pathname, 'r') as zf: + wheel_metadata = self.get_wheel_metadata(zf) + wv = wheel_metadata['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + # if file_version < (1, 1): + # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, + # LEGACY_METADATA_FILENAME] + # else: + # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] + fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] + result = None + for fn in fns: + try: + metadata_filename = posixpath.join(info_dir, fn) + with zf.open(metadata_filename) as bf: + wf = wrapper(bf) + result = Metadata(fileobj=wf) + if result: + break + except KeyError: + pass + if not result: + raise ValueError('Invalid wheel, because metadata is ' + 'missing: looked in %s' % ', '.join(fns)) + return result + + def get_wheel_metadata(self, zf): + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + metadata_filename = posixpath.join(info_dir, 'WHEEL') + with zf.open(metadata_filename) as bf: + wf = codecs.getreader('utf-8')(bf) + message = message_from_file(wf) + return dict(message) + + @cached_property + def info(self): + pathname = os.path.join(self.dirname, self.filename) + with ZipFile(pathname, 'r') as zf: + result = self.get_wheel_metadata(zf) + return result + + def process_shebang(self, data): + m = SHEBANG_RE.match(data) + if m: + end = m.end() + shebang, data_after_shebang = data[:end], data[end:] + # Preserve any arguments after the interpreter + if b'pythonw' in shebang.lower(): + shebang_python = SHEBANG_PYTHONW + else: + shebang_python = SHEBANG_PYTHON + m = SHEBANG_DETAIL_RE.match(shebang) + if m: + args = b' ' + m.groups()[-1] + else: + args = b'' + shebang = shebang_python + args + data = shebang + data_after_shebang + else: + cr = data.find(b'\r') + lf = data.find(b'\n') + if cr < 0 or cr > lf: + term = b'\n' + else: + if data[cr:cr + 2] == b'\r\n': + term = b'\r\n' + else: + term = b'\r' + data = SHEBANG_PYTHON + term + data + return data + + def get_hash(self, data, hash_kind=None): + if hash_kind is None: + hash_kind = self.hash_kind + try: + hasher = getattr(hashlib, hash_kind) + except AttributeError: + raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) + result = hasher(data).digest() + result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') + return hash_kind, result + + def write_record(self, records, record_path, base): + records = list(records) # make a copy, as mutated + p = to_posix(os.path.relpath(record_path, base)) + records.append((p, '', '')) + with CSVWriter(record_path) as writer: + for row in records: + writer.writerow(row) + + def write_records(self, info, libdir, archive_paths): + records = [] + distinfo, info_dir = info + hasher = getattr(hashlib, self.hash_kind) + for ap, p in archive_paths: + with open(p, 'rb') as f: + data = f.read() + digest = '%s=%s' % self.get_hash(data) + size = os.path.getsize(p) + records.append((ap, digest, size)) + + p = os.path.join(distinfo, 'RECORD') + self.write_record(records, p, libdir) + ap = to_posix(os.path.join(info_dir, 'RECORD')) + archive_paths.append((ap, p)) + + def build_zip(self, pathname, archive_paths): + with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: + for ap, p in archive_paths: + logger.debug('Wrote %s to %s in wheel', p, ap) + zf.write(p, ap) + + def build(self, paths, tags=None, wheel_version=None): + """ + Build a wheel from files in specified paths, and use any specified tags + when determining the name of the wheel. + """ + if tags is None: + tags = {} + + libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] + if libkey == 'platlib': + is_pure = 'false' + default_pyver = [IMPVER] + default_abi = [ABI] + default_arch = [ARCH] + else: + is_pure = 'true' + default_pyver = [PYVER] + default_abi = ['none'] + default_arch = ['any'] + + self.pyver = tags.get('pyver', default_pyver) + self.abi = tags.get('abi', default_abi) + self.arch = tags.get('arch', default_arch) + + libdir = paths[libkey] + + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + archive_paths = [] + + # First, stuff which is not in site-packages + for key in ('data', 'headers', 'scripts'): + if key not in paths: + continue + path = paths[key] + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + for fn in files: + p = fsdecode(os.path.join(root, fn)) + rp = os.path.relpath(p, path) + ap = to_posix(os.path.join(data_dir, key, rp)) + archive_paths.append((ap, p)) + if key == 'scripts' and not p.endswith('.exe'): + with open(p, 'rb') as f: + data = f.read() + data = self.process_shebang(data) + with open(p, 'wb') as f: + f.write(data) + + # Now, stuff which is in site-packages, other than the + # distinfo stuff. + path = libdir + distinfo = None + for root, dirs, files in os.walk(path): + if root == path: + # At the top level only, save distinfo for later + # and skip it for now + for i, dn in enumerate(dirs): + dn = fsdecode(dn) + if dn.endswith('.dist-info'): + distinfo = os.path.join(root, dn) + del dirs[i] + break + assert distinfo, '.dist-info directory expected, not found' + + for fn in files: + # comment out next suite to leave .pyc files in + if fsdecode(fn).endswith(('.pyc', '.pyo')): + continue + p = os.path.join(root, fn) + rp = to_posix(os.path.relpath(p, path)) + archive_paths.append((rp, p)) + + # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. + files = os.listdir(distinfo) + for fn in files: + if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): + p = fsdecode(os.path.join(distinfo, fn)) + ap = to_posix(os.path.join(info_dir, fn)) + archive_paths.append((ap, p)) + + wheel_metadata = [ + 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), + 'Generator: distlib %s' % __version__, + 'Root-Is-Purelib: %s' % is_pure, + ] + for pyver, abi, arch in self.tags: + wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) + p = os.path.join(distinfo, 'WHEEL') + with open(p, 'w') as f: + f.write('\n'.join(wheel_metadata)) + ap = to_posix(os.path.join(info_dir, 'WHEEL')) + archive_paths.append((ap, p)) + + # sort the entries by archive path. Not needed by any spec, but it + # keeps the archive listing and RECORD tidier than they would otherwise + # be. Use the number of path segments to keep directory entries together, + # and keep the dist-info stuff at the end. + def sorter(t): + ap = t[0] + n = ap.count('/') + if '.dist-info' in ap: + n += 10000 + return (n, ap) + archive_paths = sorted(archive_paths, key=sorter) + + # Now, at last, RECORD. + # Paths in here are archive paths - nothing else makes sense. + self.write_records((distinfo, info_dir), libdir, archive_paths) + # Now, ready to build the zip file + pathname = os.path.join(self.dirname, self.filename) + self.build_zip(pathname, archive_paths) + return pathname + + def skip_entry(self, arcname): + """ + Determine whether an archive entry should be skipped when verifying + or installing. + """ + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + # We also skip directories, as they won't be in RECORD + # either. See: + # + # https://github.com/pypa/wheel/issues/294 + # https://github.com/pypa/wheel/issues/287 + # https://github.com/pypa/wheel/pull/289 + # + return arcname.endswith(('/', '/RECORD.jws')) + + def install(self, paths, maker, **kwargs): + """ + Install a wheel to the specified paths. If kwarg ``warner`` is + specified, it should be a callable, which will be called with two + tuples indicating the wheel version of this software and the wheel + version in the file, if there is a discrepancy in the versions. + This can be used to issue any warnings to raise any exceptions. + If kwarg ``lib_only`` is True, only the purelib/platlib files are + installed, and the headers, scripts, data and dist-info metadata are + not written. If kwarg ``bytecode_hashed_invalidation`` is True, written + bytecode will try to use file-hash based invalidation (PEP-552) on + supported interpreter versions (CPython 2.7+). + + The return value is a :class:`InstalledDistribution` instance unless + ``options.lib_only`` is True, in which case the return value is ``None``. + """ + + dry_run = maker.dry_run + warner = kwargs.get('warner') + lib_only = kwargs.get('lib_only', False) + bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if (file_version != self.wheel_version) and warner: + warner(self.wheel_version, file_version) + + if message['Root-Is-Purelib'] == 'true': + libdir = paths['purelib'] + else: + libdir = paths['platlib'] + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + data_pfx = posixpath.join(data_dir, '') + info_pfx = posixpath.join(info_dir, '') + script_pfx = posixpath.join(data_dir, 'scripts', '') + + # make a new instance rather than a copy of maker's, + # as we mutate it + fileop = FileOperator(dry_run=dry_run) + fileop.record = True # so we can rollback if needed + + bc = not sys.dont_write_bytecode # Double negatives. Lovely! + + outfiles = [] # for RECORD writing + + # for script copying/shebang processing + workdir = tempfile.mkdtemp() + # set target dir later + # we default add_launchers to False, as the + # Python Launcher should be used instead + maker.source_dir = workdir + maker.target_dir = None + try: + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + if lib_only and u_arcname.startswith((info_pfx, data_pfx)): + logger.debug('lib_only: skipping %s', u_arcname) + continue + is_script = (u_arcname.startswith(script_pfx) + and not u_arcname.endswith('.exe')) + + if u_arcname.startswith(data_pfx): + _, where, rp = u_arcname.split('/', 2) + outfile = os.path.join(paths[where], convert_path(rp)) + else: + # meant for site-packages. + if u_arcname in (wheel_metadata_name, record_name): + continue + outfile = os.path.join(libdir, convert_path(u_arcname)) + if not is_script: + with zf.open(arcname) as bf: + fileop.copy_stream(bf, outfile) + # Issue #147: permission bits aren't preserved. Using + # zf.extract(zinfo, libdir) should have worked, but didn't, + # see https://www.thetopsites.net/article/53834422.shtml + # So ... manually preserve permission bits as given in zinfo + if os.name == 'posix': + # just set the normal permission bits + os.chmod(outfile, (zinfo.external_attr >> 16) & 0x1FF) + outfiles.append(outfile) + # Double check the digest of the written file + if not dry_run and row[1]: + with open(outfile, 'rb') as bf: + data = bf.read() + _, newdigest = self.get_hash(data, kind) + if newdigest != digest: + raise DistlibException('digest mismatch ' + 'on write for ' + '%s' % outfile) + if bc and outfile.endswith('.py'): + try: + pyc = fileop.byte_compile(outfile, + hashed_invalidation=bc_hashed_invalidation) + outfiles.append(pyc) + except Exception: + # Don't give up if byte-compilation fails, + # but log it and perhaps warn the user + logger.warning('Byte-compilation failed', + exc_info=True) + else: + fn = os.path.basename(convert_path(arcname)) + workname = os.path.join(workdir, fn) + with zf.open(arcname) as bf: + fileop.copy_stream(bf, workname) + + dn, fn = os.path.split(outfile) + maker.target_dir = dn + filenames = maker.make(fn) + fileop.set_executable_mode(filenames) + outfiles.extend(filenames) + + if lib_only: + logger.debug('lib_only: returning None') + dist = None + else: + # Generate scripts + + # Try to get pydist.json so we can see if there are + # any commands to generate. If this fails (e.g. because + # of a legacy wheel), log a warning but don't give up. + commands = None + file_version = self.info['Wheel-Version'] + if file_version == '1.0': + # Use legacy info + ep = posixpath.join(info_dir, 'entry_points.txt') + try: + with zf.open(ep) as bwf: + epdata = read_exports(bwf) + commands = {} + for key in ('console', 'gui'): + k = '%s_scripts' % key + if k in epdata: + commands['wrap_%s' % key] = d = {} + for v in epdata[k].values(): + s = '%s:%s' % (v.prefix, v.suffix) + if v.flags: + s += ' [%s]' % ','.join(v.flags) + d[v.name] = s + except Exception: + logger.warning('Unable to read legacy script ' + 'metadata, so cannot generate ' + 'scripts') + else: + try: + with zf.open(metadata_name) as bwf: + wf = wrapper(bwf) + commands = json.load(wf).get('extensions') + if commands: + commands = commands.get('python.commands') + except Exception: + logger.warning('Unable to read JSON metadata, so ' + 'cannot generate scripts') + if commands: + console_scripts = commands.get('wrap_console', {}) + gui_scripts = commands.get('wrap_gui', {}) + if console_scripts or gui_scripts: + script_dir = paths.get('scripts', '') + if not os.path.isdir(script_dir): + raise ValueError('Valid script path not ' + 'specified') + maker.target_dir = script_dir + for k, v in console_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script) + fileop.set_executable_mode(filenames) + + if gui_scripts: + options = {'gui': True } + for k, v in gui_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script, options) + fileop.set_executable_mode(filenames) + + p = os.path.join(libdir, info_dir) + dist = InstalledDistribution(p) + + # Write SHARED + paths = dict(paths) # don't change passed in dict + del paths['purelib'] + del paths['platlib'] + paths['lib'] = libdir + p = dist.write_shared_locations(paths, dry_run) + if p: + outfiles.append(p) + + # Write RECORD + dist.write_installed_files(outfiles, paths['prefix'], + dry_run) + return dist + except Exception: # pragma: no cover + logger.exception('installation failed.') + fileop.rollback() + raise + finally: + shutil.rmtree(workdir) + + def _get_dylib_cache(self): + global cache + if cache is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('dylib-cache'), + '%s.%s' % sys.version_info[:2]) + cache = Cache(base) + return cache + + def _get_extensions(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + arcname = posixpath.join(info_dir, 'EXTENSIONS') + wrapper = codecs.getreader('utf-8') + result = [] + with ZipFile(pathname, 'r') as zf: + try: + with zf.open(arcname) as bf: + wf = wrapper(bf) + extensions = json.load(wf) + cache = self._get_dylib_cache() + prefix = cache.prefix_to_dir(pathname) + cache_base = os.path.join(cache.base, prefix) + if not os.path.isdir(cache_base): + os.makedirs(cache_base) + for name, relpath in extensions.items(): + dest = os.path.join(cache_base, convert_path(relpath)) + if not os.path.exists(dest): + extract = True + else: + file_time = os.stat(dest).st_mtime + file_time = datetime.datetime.fromtimestamp(file_time) + info = zf.getinfo(relpath) + wheel_time = datetime.datetime(*info.date_time) + extract = wheel_time > file_time + if extract: + zf.extract(relpath, cache_base) + result.append((name, dest)) + except KeyError: + pass + return result + + def is_compatible(self): + """ + Determine if a wheel is compatible with the running system. + """ + return is_compatible(self) + + def is_mountable(self): + """ + Determine if a wheel is asserted as mountable by its metadata. + """ + return True # for now - metadata details TBD + + def mount(self, append=False): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if not self.is_compatible(): + msg = 'Wheel %s not compatible with this Python.' % pathname + raise DistlibException(msg) + if not self.is_mountable(): + msg = 'Wheel %s is marked as not mountable.' % pathname + raise DistlibException(msg) + if pathname in sys.path: + logger.debug('%s already in path', pathname) + else: + if append: + sys.path.append(pathname) + else: + sys.path.insert(0, pathname) + extensions = self._get_extensions() + if extensions: + if _hook not in sys.meta_path: + sys.meta_path.append(_hook) + _hook.add(pathname, extensions) + + def unmount(self): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if pathname not in sys.path: + logger.debug('%s not in path', pathname) + else: + sys.path.remove(pathname) + if pathname in _hook.impure_wheels: + _hook.remove(pathname) + if not _hook.impure_wheels: + if _hook in sys.meta_path: + sys.meta_path.remove(_hook) + + def verify(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + # TODO version verification + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + # See issue #115: some wheels have .. in their entries, but + # in the filename ... e.g. __main__..py ! So the check is + # updated to look for .. in the directory portions + p = u_arcname.split('/') + if '..' in p: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + def update(self, modifier, dest_dir=None, **kwargs): + """ + Update the contents of a wheel in a generic way. The modifier should + be a callable which expects a dictionary argument: its keys are + archive-entry paths, and its values are absolute filesystem paths + where the contents the corresponding archive entries can be found. The + modifier is free to change the contents of the files pointed to, add + new entries and remove entries, before returning. This method will + extract the entire contents of the wheel to a temporary location, call + the modifier, and then use the passed (and possibly updated) + dictionary to write a new wheel. If ``dest_dir`` is specified, the new + wheel is written there -- otherwise, the original wheel is overwritten. + + The modifier should return True if it updated the wheel, else False. + This method returns the same value the modifier returns. + """ + + def get_version(path_map, info_dir): + version = path = None + key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME) + if key not in path_map: + key = '%s/PKG-INFO' % info_dir + if key in path_map: + path = path_map[key] + version = Metadata(path=path).version + return version, path + + def update_version(version, path): + updated = None + try: + v = NormalizedVersion(version) + i = version.find('-') + if i < 0: + updated = '%s+1' % version + else: + parts = [int(s) for s in version[i + 1:].split('.')] + parts[-1] += 1 + updated = '%s+%s' % (version[:i], + '.'.join(str(i) for i in parts)) + except UnsupportedVersionError: + logger.debug('Cannot update non-compliant (PEP-440) ' + 'version %r', version) + if updated: + md = Metadata(path=path) + md.version = updated + legacy = path.endswith(LEGACY_METADATA_FILENAME) + md.write(path=path, legacy=legacy) + logger.debug('Version updated from %r to %r', version, + updated) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + record_name = posixpath.join(info_dir, 'RECORD') + with tempdir() as workdir: + with ZipFile(pathname, 'r') as zf: + path_map = {} + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if u_arcname == record_name: + continue + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + zf.extract(zinfo, workdir) + path = os.path.join(workdir, convert_path(u_arcname)) + path_map[u_arcname] = path + + # Remember the version. + original_version, _ = get_version(path_map, info_dir) + # Files extracted. Call the modifier. + modified = modifier(path_map, **kwargs) + if modified: + # Something changed - need to build a new wheel. + current_version, path = get_version(path_map, info_dir) + if current_version and (current_version == original_version): + # Add or update local version to signify changes. + update_version(current_version, path) + # Decide where the new wheel goes. + if dest_dir is None: + fd, newpath = tempfile.mkstemp(suffix='.whl', + prefix='wheel-update-', + dir=workdir) + os.close(fd) + else: + if not os.path.isdir(dest_dir): + raise DistlibException('Not a directory: %r' % dest_dir) + newpath = os.path.join(dest_dir, self.filename) + archive_paths = list(path_map.items()) + distinfo = os.path.join(workdir, info_dir) + info = distinfo, info_dir + self.write_records(info, workdir, archive_paths) + self.build_zip(newpath, archive_paths) + if dest_dir is None: + shutil.copyfile(newpath, pathname) + return modified + +def _get_glibc_version(): + import platform + ver = platform.libc_ver() + result = [] + if ver[0] == 'glibc': + for s in ver[1].split('.'): + result.append(int(s) if s.isdigit() else 0) + result = tuple(result) + return result + +def compatible_tags(): + """ + Return (pyver, abi, arch) tuples compatible with this Python. + """ + versions = [VER_SUFFIX] + major = VER_SUFFIX[0] + for minor in range(sys.version_info[1] - 1, - 1, -1): + versions.append(''.join([major, str(minor)])) + + abis = [] + for suffix, _, _ in imp.get_suffixes(): + if suffix.startswith('.abi'): + abis.append(suffix.split('.', 2)[1]) + abis.sort() + if ABI != 'none': + abis.insert(0, ABI) + abis.append('none') + result = [] + + arches = [ARCH] + if sys.platform == 'darwin': + m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) + if m: + name, major, minor, arch = m.groups() + minor = int(minor) + matches = [arch] + if arch in ('i386', 'ppc'): + matches.append('fat') + if arch in ('i386', 'ppc', 'x86_64'): + matches.append('fat3') + if arch in ('ppc64', 'x86_64'): + matches.append('fat64') + if arch in ('i386', 'x86_64'): + matches.append('intel') + if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): + matches.append('universal') + while minor >= 0: + for match in matches: + s = '%s_%s_%s_%s' % (name, major, minor, match) + if s != ARCH: # already there + arches.append(s) + minor -= 1 + + # Most specific - our Python version, ABI and arch + for abi in abis: + for arch in arches: + result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) + # manylinux + if abi != 'none' and sys.platform.startswith('linux'): + arch = arch.replace('linux_', '') + parts = _get_glibc_version() + if len(parts) == 2: + if parts >= (2, 5): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux1_%s' % arch)) + if parts >= (2, 12): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2010_%s' % arch)) + if parts >= (2, 17): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2014_%s' % arch)) + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux_%s_%s_%s' % (parts[0], parts[1], + arch))) + + # where no ABI / arch dependency, but IMP_PREFIX dependency + for i, version in enumerate(versions): + result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) + if i == 0: + result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) + + # no IMP_PREFIX, ABI or arch dependency + for i, version in enumerate(versions): + result.append((''.join(('py', version)), 'none', 'any')) + if i == 0: + result.append((''.join(('py', version[0])), 'none', 'any')) + + return set(result) + + +COMPATIBLE_TAGS = compatible_tags() + +del compatible_tags + + +def is_compatible(wheel, tags=None): + if not isinstance(wheel, Wheel): + wheel = Wheel(wheel) # assume it's a filename + result = False + if tags is None: + tags = COMPATIBLE_TAGS + for ver, abi, arch in tags: + if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: + result = True + break + return result diff --git a/venv/Lib/site-packages/pip/_vendor/distro.py b/venv/Lib/site-packages/pip/_vendor/distro.py new file mode 100644 index 000000000..789274134 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distro.py @@ -0,0 +1,1386 @@ +# Copyright 2015,2016,2017 Nir Cohen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +The ``distro`` package (``distro`` stands for Linux Distribution) provides +information about the Linux distribution it runs on, such as a reliable +machine-readable distro ID, or version information. + +It is the recommended replacement for Python's original +:py:func:`platform.linux_distribution` function, but it provides much more +functionality. An alternative implementation became necessary because Python +3.5 deprecated this function, and Python 3.8 removed it altogether. Its +predecessor function :py:func:`platform.dist` was already deprecated since +Python 2.6 and removed in Python 3.8. Still, there are many cases in which +access to OS distribution information is needed. See `Python issue 1322 +`_ for more information. +""" + +import argparse +import json +import logging +import os +import re +import shlex +import subprocess +import sys +import warnings + +__version__ = "1.6.0" + +# Use `if False` to avoid an ImportError on Python 2. After dropping Python 2 +# support, can use typing.TYPE_CHECKING instead. See: +# https://docs.python.org/3/library/typing.html#typing.TYPE_CHECKING +if False: # pragma: nocover + from typing import ( + Any, + Callable, + Dict, + Iterable, + Optional, + Sequence, + TextIO, + Tuple, + Type, + TypedDict, + Union, + ) + + VersionDict = TypedDict( + "VersionDict", {"major": str, "minor": str, "build_number": str} + ) + InfoDict = TypedDict( + "InfoDict", + { + "id": str, + "version": str, + "version_parts": VersionDict, + "like": str, + "codename": str, + }, + ) + + +_UNIXCONFDIR = os.environ.get("UNIXCONFDIR", "/etc") +_UNIXUSRLIBDIR = os.environ.get("UNIXUSRLIBDIR", "/usr/lib") +_OS_RELEASE_BASENAME = "os-release" + +#: Translation table for normalizing the "ID" attribute defined in os-release +#: files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as defined in the os-release file, translated to lower case, +#: with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_OS_ID = { + "ol": "oracle", # Oracle Linux +} + +#: Translation table for normalizing the "Distributor ID" attribute returned by +#: the lsb_release command, for use by the :func:`distro.id` method. +#: +#: * Key: Value as returned by the lsb_release command, translated to lower +#: case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_LSB_ID = { + "enterpriseenterpriseas": "oracle", # Oracle Enterprise Linux 4 + "enterpriseenterpriseserver": "oracle", # Oracle Linux 5 + "redhatenterpriseworkstation": "rhel", # RHEL 6, 7 Workstation + "redhatenterpriseserver": "rhel", # RHEL 6, 7 Server + "redhatenterprisecomputenode": "rhel", # RHEL 6 ComputeNode +} + +#: Translation table for normalizing the distro ID derived from the file name +#: of distro release files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as derived from the file name of a distro release file, +#: translated to lower case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_DISTRO_ID = { + "redhat": "rhel", # RHEL 6.x, 7.x +} + +# Pattern for content of distro release file (reversed) +_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( + r"(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)" +) + +# Pattern for base file name of distro release file +_DISTRO_RELEASE_BASENAME_PATTERN = re.compile(r"(\w+)[-_](release|version)$") + +# Base file names to be ignored when searching for distro release file +_DISTRO_RELEASE_IGNORE_BASENAMES = ( + "debian_version", + "lsb-release", + "oem-release", + _OS_RELEASE_BASENAME, + "system-release", + "plesk-release", + "iredmail-release", +) + + +def linux_distribution(full_distribution_name=True): + # type: (bool) -> Tuple[str, str, str] + """ + .. deprecated:: 1.6.0 + + :func:`distro.linux_distribution()` is deprecated. It should only be + used as a compatibility shim with Python's + :py:func:`platform.linux_distribution()`. Please use :func:`distro.id`, + :func:`distro.version` and :func:`distro.name` instead. + + Return information about the current OS distribution as a tuple + ``(id_name, version, codename)`` with items as follows: + + * ``id_name``: If *full_distribution_name* is false, the result of + :func:`distro.id`. Otherwise, the result of :func:`distro.name`. + + * ``version``: The result of :func:`distro.version`. + + * ``codename``: The result of :func:`distro.codename`. + + The interface of this function is compatible with the original + :py:func:`platform.linux_distribution` function, supporting a subset of + its parameters. + + The data it returns may not exactly be the same, because it uses more data + sources than the original function, and that may lead to different data if + the OS distribution is not consistent across multiple data sources it + provides (there are indeed such distributions ...). + + Another reason for differences is the fact that the :func:`distro.id` + method normalizes the distro ID string to a reliable machine-readable value + for a number of popular OS distributions. + """ + warnings.warn( + "distro.linux_distribution() is deprecated. It should only be used as a " + "compatibility shim with Python's platform.linux_distribution(). Please use " + "distro.id(), distro.version() and distro.name() instead.", + DeprecationWarning, + stacklevel=2, + ) + return _distro.linux_distribution(full_distribution_name) + + +def id(): + # type: () -> str + """ + Return the distro ID of the current distribution, as a + machine-readable string. + + For a number of OS distributions, the returned distro ID value is + *reliable*, in the sense that it is documented and that it does not change + across releases of the distribution. + + This package maintains the following reliable distro ID values: + + ============== ========================================= + Distro ID Distribution + ============== ========================================= + "ubuntu" Ubuntu + "debian" Debian + "rhel" RedHat Enterprise Linux + "centos" CentOS + "fedora" Fedora + "sles" SUSE Linux Enterprise Server + "opensuse" openSUSE + "amazon" Amazon Linux + "arch" Arch Linux + "cloudlinux" CloudLinux OS + "exherbo" Exherbo Linux + "gentoo" GenToo Linux + "ibm_powerkvm" IBM PowerKVM + "kvmibm" KVM for IBM z Systems + "linuxmint" Linux Mint + "mageia" Mageia + "mandriva" Mandriva Linux + "parallels" Parallels + "pidora" Pidora + "raspbian" Raspbian + "oracle" Oracle Linux (and Oracle Enterprise Linux) + "scientific" Scientific Linux + "slackware" Slackware + "xenserver" XenServer + "openbsd" OpenBSD + "netbsd" NetBSD + "freebsd" FreeBSD + "midnightbsd" MidnightBSD + ============== ========================================= + + If you have a need to get distros for reliable IDs added into this set, + or if you find that the :func:`distro.id` function returns a different + distro ID for one of the listed distros, please create an issue in the + `distro issue tracker`_. + + **Lookup hierarchy and transformations:** + + First, the ID is obtained from the following sources, in the specified + order. The first available and non-empty value is used: + + * the value of the "ID" attribute of the os-release file, + + * the value of the "Distributor ID" attribute returned by the lsb_release + command, + + * the first part of the file name of the distro release file, + + The so determined ID value then passes the following transformations, + before it is returned by this method: + + * it is translated to lower case, + + * blanks (which should not be there anyway) are translated to underscores, + + * a normalization of the ID is performed, based upon + `normalization tables`_. The purpose of this normalization is to ensure + that the ID is as reliable as possible, even across incompatible changes + in the OS distributions. A common reason for an incompatible change is + the addition of an os-release file, or the addition of the lsb_release + command, with ID values that differ from what was previously determined + from the distro release file name. + """ + return _distro.id() + + +def name(pretty=False): + # type: (bool) -> str + """ + Return the name of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the name is returned without version or codename. + (e.g. "CentOS Linux") + + If *pretty* is true, the version and codename are appended. + (e.g. "CentOS Linux 7.1.1503 (Core)") + + **Lookup hierarchy:** + + The name is obtained from the following sources, in the specified order. + The first available and non-empty value is used: + + * If *pretty* is false: + + - the value of the "NAME" attribute of the os-release file, + + - the value of the "Distributor ID" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file. + + * If *pretty* is true: + + - the value of the "PRETTY_NAME" attribute of the os-release file, + + - the value of the "Description" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file, appended + with the value of the pretty version ("" and "" + fields) of the distro release file, if available. + """ + return _distro.name(pretty) + + +def version(pretty=False, best=False): + # type: (bool, bool) -> str + """ + Return the version of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the version is returned without codename (e.g. + "7.0"). + + If *pretty* is true, the codename in parenthesis is appended, if the + codename is non-empty (e.g. "7.0 (Maipo)"). + + Some distributions provide version numbers with different precisions in + the different sources of distribution information. Examining the different + sources in a fixed priority order does not always yield the most precise + version (e.g. for Debian 8.2, or CentOS 7.1). + + The *best* parameter can be used to control the approach for the returned + version: + + If *best* is false, the first non-empty version number in priority order of + the examined sources is returned. + + If *best* is true, the most precise version number out of all examined + sources is returned. + + **Lookup hierarchy:** + + In all cases, the version number is obtained from the following sources. + If *best* is false, this order represents the priority order: + + * the value of the "VERSION_ID" attribute of the os-release file, + * the value of the "Release" attribute returned by the lsb_release + command, + * the version number parsed from the "" field of the first line + of the distro release file, + * the version number parsed from the "PRETTY_NAME" attribute of the + os-release file, if it follows the format of the distro release files. + * the version number parsed from the "Description" attribute returned by + the lsb_release command, if it follows the format of the distro release + files. + """ + return _distro.version(pretty, best) + + +def version_parts(best=False): + # type: (bool) -> Tuple[str, str, str] + """ + Return the version of the current OS distribution as a tuple + ``(major, minor, build_number)`` with items as follows: + + * ``major``: The result of :func:`distro.major_version`. + + * ``minor``: The result of :func:`distro.minor_version`. + + * ``build_number``: The result of :func:`distro.build_number`. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.version_parts(best) + + +def major_version(best=False): + # type: (bool) -> str + """ + Return the major version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The major version is the first + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.major_version(best) + + +def minor_version(best=False): + # type: (bool) -> str + """ + Return the minor version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The minor version is the second + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.minor_version(best) + + +def build_number(best=False): + # type: (bool) -> str + """ + Return the build number of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The build number is the third part + of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.build_number(best) + + +def like(): + # type: () -> str + """ + Return a space-separated list of distro IDs of distributions that are + closely related to the current OS distribution in regards to packaging + and programming interfaces, for example distributions the current + distribution is a derivative from. + + **Lookup hierarchy:** + + This information item is only provided by the os-release file. + For details, see the description of the "ID_LIKE" attribute in the + `os-release man page + `_. + """ + return _distro.like() + + +def codename(): + # type: () -> str + """ + Return the codename for the release of the current OS distribution, + as a string. + + If the distribution does not have a codename, an empty string is returned. + + Note that the returned codename is not always really a codename. For + example, openSUSE returns "x86_64". This function does not handle such + cases in any special way and just returns the string it finds, if any. + + **Lookup hierarchy:** + + * the codename within the "VERSION" attribute of the os-release file, if + provided, + + * the value of the "Codename" attribute returned by the lsb_release + command, + + * the value of the "" field of the distro release file. + """ + return _distro.codename() + + +def info(pretty=False, best=False): + # type: (bool, bool) -> InfoDict + """ + Return certain machine-readable information items about the current OS + distribution in a dictionary, as shown in the following example: + + .. sourcecode:: python + + { + 'id': 'rhel', + 'version': '7.0', + 'version_parts': { + 'major': '7', + 'minor': '0', + 'build_number': '' + }, + 'like': 'fedora', + 'codename': 'Maipo' + } + + The dictionary structure and keys are always the same, regardless of which + information items are available in the underlying data sources. The values + for the various keys are as follows: + + * ``id``: The result of :func:`distro.id`. + + * ``version``: The result of :func:`distro.version`. + + * ``version_parts -> major``: The result of :func:`distro.major_version`. + + * ``version_parts -> minor``: The result of :func:`distro.minor_version`. + + * ``version_parts -> build_number``: The result of + :func:`distro.build_number`. + + * ``like``: The result of :func:`distro.like`. + + * ``codename``: The result of :func:`distro.codename`. + + For a description of the *pretty* and *best* parameters, see the + :func:`distro.version` method. + """ + return _distro.info(pretty, best) + + +def os_release_info(): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information items + from the os-release file data source of the current OS distribution. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_info() + + +def lsb_release_info(): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information items + from the lsb_release command data source of the current OS distribution. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_info() + + +def distro_release_info(): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_info() + + +def uname_info(): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + """ + return _distro.uname_info() + + +def os_release_attr(attribute): + # type: (str) -> str + """ + Return a single named information item from the os-release file data source + of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_attr(attribute) + + +def lsb_release_attr(attribute): + # type: (str) -> str + """ + Return a single named information item from the lsb_release command output + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_attr(attribute) + + +def distro_release_attr(attribute): + # type: (str) -> str + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_attr(attribute) + + +def uname_attr(attribute): + # type: (str) -> str + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + """ + return _distro.uname_attr(attribute) + + +try: + from functools import cached_property +except ImportError: + # Python < 3.8 + class cached_property(object): # type: ignore + """A version of @property which caches the value. On access, it calls the + underlying function and sets the value in `__dict__` so future accesses + will not re-call the property. + """ + + def __init__(self, f): + # type: (Callable[[Any], Any]) -> None + self._fname = f.__name__ + self._f = f + + def __get__(self, obj, owner): + # type: (Any, Type[Any]) -> Any + assert obj is not None, "call {} on an instance".format(self._fname) + ret = obj.__dict__[self._fname] = self._f(obj) + return ret + + +class LinuxDistribution(object): + """ + Provides information about a OS distribution. + + This package creates a private module-global instance of this class with + default initialization arguments, that is used by the + `consolidated accessor functions`_ and `single source accessor functions`_. + By using default initialization arguments, that module-global instance + returns data about the current OS distribution (i.e. the distro this + package runs on). + + Normally, it is not necessary to create additional instances of this class. + However, in situations where control is needed over the exact data sources + that are used, instances of this class can be created with a specific + distro release file, or a specific os-release file, or without invoking the + lsb_release command. + """ + + def __init__( + self, + include_lsb=True, + os_release_file="", + distro_release_file="", + include_uname=True, + root_dir=None, + ): + # type: (bool, str, str, bool, Optional[str]) -> None + """ + The initialization method of this class gathers information from the + available data sources, and stores that in private instance attributes. + Subsequent access to the information items uses these private instance + attributes, so that the data sources are read only once. + + Parameters: + + * ``include_lsb`` (bool): Controls whether the + `lsb_release command output`_ is included as a data source. + + If the lsb_release command is not available in the program execution + path, the data source for the lsb_release command will be empty. + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is to be used as a data source. + + An empty string (the default) will cause the default path name to + be used (see `os-release file`_ for details). + + If the specified or defaulted os-release file does not exist, the + data source for the os-release file will be empty. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is to be used as a data source. + + An empty string (the default) will cause a default search algorithm + to be used (see `distro release file`_ for details). + + If the specified distro release file does not exist, or if no default + distro release file can be found, the data source for the distro + release file will be empty. + + * ``include_uname`` (bool): Controls whether uname command output is + included as a data source. If the uname command is not available in + the program execution path the data source for the uname command will + be empty. + + * ``root_dir`` (string): The absolute path to the root directory to use + to find distro-related information files. + + Public instance attributes: + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. + This controls whether the lsb information will be loaded. + + * ``include_uname`` (bool): The result of the ``include_uname`` + parameter. This controls whether the uname information will + be loaded. + + Raises: + + * :py:exc:`IOError`: Some I/O issue with an os-release file or distro + release file. + + * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had + some issue (other than not being available in the program execution + path). + + * :py:exc:`UnicodeError`: A data source has unexpected characters or + uses an unexpected encoding. + """ + self.root_dir = root_dir + self.etc_dir = os.path.join(root_dir, "etc") if root_dir else _UNIXCONFDIR + self.usr_lib_dir = ( + os.path.join(root_dir, "usr/lib") if root_dir else _UNIXUSRLIBDIR + ) + + if os_release_file: + self.os_release_file = os_release_file + else: + etc_dir_os_release_file = os.path.join(self.etc_dir, _OS_RELEASE_BASENAME) + usr_lib_os_release_file = os.path.join( + self.usr_lib_dir, _OS_RELEASE_BASENAME + ) + + # NOTE: The idea is to respect order **and** have it set + # at all times for API backwards compatibility. + if os.path.isfile(etc_dir_os_release_file) or not os.path.isfile( + usr_lib_os_release_file + ): + self.os_release_file = etc_dir_os_release_file + else: + self.os_release_file = usr_lib_os_release_file + + self.distro_release_file = distro_release_file or "" # updated later + self.include_lsb = include_lsb + self.include_uname = include_uname + + def __repr__(self): + # type: () -> str + """Return repr of all info""" + return ( + "LinuxDistribution(" + "os_release_file={self.os_release_file!r}, " + "distro_release_file={self.distro_release_file!r}, " + "include_lsb={self.include_lsb!r}, " + "include_uname={self.include_uname!r}, " + "_os_release_info={self._os_release_info!r}, " + "_lsb_release_info={self._lsb_release_info!r}, " + "_distro_release_info={self._distro_release_info!r}, " + "_uname_info={self._uname_info!r})".format(self=self) + ) + + def linux_distribution(self, full_distribution_name=True): + # type: (bool) -> Tuple[str, str, str] + """ + Return information about the OS distribution that is compatible + with Python's :func:`platform.linux_distribution`, supporting a subset + of its parameters. + + For details, see :func:`distro.linux_distribution`. + """ + return ( + self.name() if full_distribution_name else self.id(), + self.version(), + self.codename(), + ) + + def id(self): + # type: () -> str + """Return the distro ID of the OS distribution, as a string. + + For details, see :func:`distro.id`. + """ + + def normalize(distro_id, table): + # type: (str, Dict[str, str]) -> str + distro_id = distro_id.lower().replace(" ", "_") + return table.get(distro_id, distro_id) + + distro_id = self.os_release_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_OS_ID) + + distro_id = self.lsb_release_attr("distributor_id") + if distro_id: + return normalize(distro_id, NORMALIZED_LSB_ID) + + distro_id = self.distro_release_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + distro_id = self.uname_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + return "" + + def name(self, pretty=False): + # type: (bool) -> str + """ + Return the name of the OS distribution, as a string. + + For details, see :func:`distro.name`. + """ + name = ( + self.os_release_attr("name") + or self.lsb_release_attr("distributor_id") + or self.distro_release_attr("name") + or self.uname_attr("name") + ) + if pretty: + name = self.os_release_attr("pretty_name") or self.lsb_release_attr( + "description" + ) + if not name: + name = self.distro_release_attr("name") or self.uname_attr("name") + version = self.version(pretty=True) + if version: + name = name + " " + version + return name or "" + + def version(self, pretty=False, best=False): + # type: (bool, bool) -> str + """ + Return the version of the OS distribution, as a string. + + For details, see :func:`distro.version`. + """ + versions = [ + self.os_release_attr("version_id"), + self.lsb_release_attr("release"), + self.distro_release_attr("version_id"), + self._parse_distro_release_content(self.os_release_attr("pretty_name")).get( + "version_id", "" + ), + self._parse_distro_release_content( + self.lsb_release_attr("description") + ).get("version_id", ""), + self.uname_attr("release"), + ] + version = "" + if best: + # This algorithm uses the last version in priority order that has + # the best precision. If the versions are not in conflict, that + # does not matter; otherwise, using the last one instead of the + # first one might be considered a surprise. + for v in versions: + if v.count(".") > version.count(".") or version == "": + version = v + else: + for v in versions: + if v != "": + version = v + break + if pretty and version and self.codename(): + version = "{0} ({1})".format(version, self.codename()) + return version + + def version_parts(self, best=False): + # type: (bool) -> Tuple[str, str, str] + """ + Return the version of the OS distribution, as a tuple of version + numbers. + + For details, see :func:`distro.version_parts`. + """ + version_str = self.version(best=best) + if version_str: + version_regex = re.compile(r"(\d+)\.?(\d+)?\.?(\d+)?") + matches = version_regex.match(version_str) + if matches: + major, minor, build_number = matches.groups() + return major, minor or "", build_number or "" + return "", "", "" + + def major_version(self, best=False): + # type: (bool) -> str + """ + Return the major version number of the current distribution. + + For details, see :func:`distro.major_version`. + """ + return self.version_parts(best)[0] + + def minor_version(self, best=False): + # type: (bool) -> str + """ + Return the minor version number of the current distribution. + + For details, see :func:`distro.minor_version`. + """ + return self.version_parts(best)[1] + + def build_number(self, best=False): + # type: (bool) -> str + """ + Return the build number of the current distribution. + + For details, see :func:`distro.build_number`. + """ + return self.version_parts(best)[2] + + def like(self): + # type: () -> str + """ + Return the IDs of distributions that are like the OS distribution. + + For details, see :func:`distro.like`. + """ + return self.os_release_attr("id_like") or "" + + def codename(self): + # type: () -> str + """ + Return the codename of the OS distribution. + + For details, see :func:`distro.codename`. + """ + try: + # Handle os_release specially since distros might purposefully set + # this to empty string to have no codename + return self._os_release_info["codename"] + except KeyError: + return ( + self.lsb_release_attr("codename") + or self.distro_release_attr("codename") + or "" + ) + + def info(self, pretty=False, best=False): + # type: (bool, bool) -> InfoDict + """ + Return certain machine-readable information about the OS + distribution. + + For details, see :func:`distro.info`. + """ + return dict( + id=self.id(), + version=self.version(pretty, best), + version_parts=dict( + major=self.major_version(best), + minor=self.minor_version(best), + build_number=self.build_number(best), + ), + like=self.like(), + codename=self.codename(), + ) + + def os_release_info(self): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information + items from the os-release file data source of the OS distribution. + + For details, see :func:`distro.os_release_info`. + """ + return self._os_release_info + + def lsb_release_info(self): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information + items from the lsb_release command data source of the OS + distribution. + + For details, see :func:`distro.lsb_release_info`. + """ + return self._lsb_release_info + + def distro_release_info(self): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information + items from the distro release file data source of the OS + distribution. + + For details, see :func:`distro.distro_release_info`. + """ + return self._distro_release_info + + def uname_info(self): + # type: () -> Dict[str, str] + """ + Return a dictionary containing key-value pairs for the information + items from the uname command data source of the OS distribution. + + For details, see :func:`distro.uname_info`. + """ + return self._uname_info + + def os_release_attr(self, attribute): + # type: (str) -> str + """ + Return a single named information item from the os-release file data + source of the OS distribution. + + For details, see :func:`distro.os_release_attr`. + """ + return self._os_release_info.get(attribute, "") + + def lsb_release_attr(self, attribute): + # type: (str) -> str + """ + Return a single named information item from the lsb_release command + output data source of the OS distribution. + + For details, see :func:`distro.lsb_release_attr`. + """ + return self._lsb_release_info.get(attribute, "") + + def distro_release_attr(self, attribute): + # type: (str) -> str + """ + Return a single named information item from the distro release file + data source of the OS distribution. + + For details, see :func:`distro.distro_release_attr`. + """ + return self._distro_release_info.get(attribute, "") + + def uname_attr(self, attribute): + # type: (str) -> str + """ + Return a single named information item from the uname command + output data source of the OS distribution. + + For details, see :func:`distro.uname_attr`. + """ + return self._uname_info.get(attribute, "") + + @cached_property + def _os_release_info(self): + # type: () -> Dict[str, str] + """ + Get the information items from the specified os-release file. + + Returns: + A dictionary containing all information items. + """ + if os.path.isfile(self.os_release_file): + with open(self.os_release_file) as release_file: + return self._parse_os_release_content(release_file) + return {} + + @staticmethod + def _parse_os_release_content(lines): + # type: (TextIO) -> Dict[str, str] + """ + Parse the lines of an os-release file. + + Parameters: + + * lines: Iterable through the lines in the os-release file. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + lexer = shlex.shlex(lines, posix=True) + lexer.whitespace_split = True + + # The shlex module defines its `wordchars` variable using literals, + # making it dependent on the encoding of the Python source file. + # In Python 2.6 and 2.7, the shlex source file is encoded in + # 'iso-8859-1', and the `wordchars` variable is defined as a byte + # string. This causes a UnicodeDecodeError to be raised when the + # parsed content is a unicode object. The following fix resolves that + # (... but it should be fixed in shlex...): + if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes): + lexer.wordchars = lexer.wordchars.decode("iso-8859-1") + + tokens = list(lexer) + for token in tokens: + # At this point, all shell-like parsing has been done (i.e. + # comments processed, quotes and backslash escape sequences + # processed, multi-line values assembled, trailing newlines + # stripped, etc.), so the tokens are now either: + # * variable assignments: var=value + # * commands or their arguments (not allowed in os-release) + if "=" in token: + k, v = token.split("=", 1) + props[k.lower()] = v + else: + # Ignore any tokens that are not variable assignments + pass + + if "version_codename" in props: + # os-release added a version_codename field. Use that in + # preference to anything else Note that some distros purposefully + # do not have code names. They should be setting + # version_codename="" + props["codename"] = props["version_codename"] + elif "ubuntu_codename" in props: + # Same as above but a non-standard field name used on older Ubuntus + props["codename"] = props["ubuntu_codename"] + elif "version" in props: + # If there is no version_codename, parse it from the version + match = re.search(r"(\(\D+\))|,(\s+)?\D+", props["version"]) + if match: + codename = match.group() + codename = codename.strip("()") + codename = codename.strip(",") + codename = codename.strip() + # codename appears within paranthese. + props["codename"] = codename + + return props + + @cached_property + def _lsb_release_info(self): + # type: () -> Dict[str, str] + """ + Get the information items from the lsb_release command output. + + Returns: + A dictionary containing all information items. + """ + if not self.include_lsb: + return {} + with open(os.devnull, "wb") as devnull: + try: + cmd = ("lsb_release", "-a") + stdout = subprocess.check_output(cmd, stderr=devnull) + # Command not found or lsb_release returned error + except (OSError, subprocess.CalledProcessError): + return {} + content = self._to_str(stdout).splitlines() + return self._parse_lsb_release_content(content) + + @staticmethod + def _parse_lsb_release_content(lines): + # type: (Iterable[str]) -> Dict[str, str] + """ + Parse the output of the lsb_release command. + + Parameters: + + * lines: Iterable through the lines of the lsb_release output. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + for line in lines: + kv = line.strip("\n").split(":", 1) + if len(kv) != 2: + # Ignore lines without colon. + continue + k, v = kv + props.update({k.replace(" ", "_").lower(): v.strip()}) + return props + + @cached_property + def _uname_info(self): + # type: () -> Dict[str, str] + with open(os.devnull, "wb") as devnull: + try: + cmd = ("uname", "-rs") + stdout = subprocess.check_output(cmd, stderr=devnull) + except OSError: + return {} + content = self._to_str(stdout).splitlines() + return self._parse_uname_content(content) + + @staticmethod + def _parse_uname_content(lines): + # type: (Sequence[str]) -> Dict[str, str] + props = {} + match = re.search(r"^([^\s]+)\s+([\d\.]+)", lines[0].strip()) + if match: + name, version = match.groups() + + # This is to prevent the Linux kernel version from + # appearing as the 'best' version on otherwise + # identifiable distributions. + if name == "Linux": + return {} + props["id"] = name.lower() + props["name"] = name + props["release"] = version + return props + + @staticmethod + def _to_str(text): + # type: (Union[bytes, str]) -> str + encoding = sys.getfilesystemencoding() + encoding = "utf-8" if encoding == "ascii" else encoding + + if sys.version_info[0] >= 3: + if isinstance(text, bytes): + return text.decode(encoding) + else: + if isinstance(text, unicode): # noqa + return text.encode(encoding) + + return text + + @cached_property + def _distro_release_info(self): + # type: () -> Dict[str, str] + """ + Get the information items from the specified distro release file. + + Returns: + A dictionary containing all information items. + """ + if self.distro_release_file: + # If it was specified, we use it and parse what we can, even if + # its file name or content does not match the expected pattern. + distro_info = self._parse_distro_release_file(self.distro_release_file) + basename = os.path.basename(self.distro_release_file) + # The file name pattern for user-specified distro release files + # is somewhat more tolerant (compared to when searching for the + # file), because we want to use what was specified as best as + # possible. + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if "name" in distro_info and "cloudlinux" in distro_info["name"].lower(): + distro_info["id"] = "cloudlinux" + elif match: + distro_info["id"] = match.group(1) + return distro_info + else: + try: + basenames = os.listdir(self.etc_dir) + # We sort for repeatability in cases where there are multiple + # distro specific files; e.g. CentOS, Oracle, Enterprise all + # containing `redhat-release` on top of their own. + basenames.sort() + except OSError: + # This may occur when /etc is not readable but we can't be + # sure about the *-release files. Check common entries of + # /etc for information. If they turn out to not be there the + # error is handled in `_parse_distro_release_file()`. + basenames = [ + "SuSE-release", + "arch-release", + "base-release", + "centos-release", + "fedora-release", + "gentoo-release", + "mageia-release", + "mandrake-release", + "mandriva-release", + "mandrivalinux-release", + "manjaro-release", + "oracle-release", + "redhat-release", + "sl-release", + "slackware-version", + ] + for basename in basenames: + if basename in _DISTRO_RELEASE_IGNORE_BASENAMES: + continue + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if match: + filepath = os.path.join(self.etc_dir, basename) + distro_info = self._parse_distro_release_file(filepath) + if "name" in distro_info: + # The name is always present if the pattern matches + self.distro_release_file = filepath + distro_info["id"] = match.group(1) + if "cloudlinux" in distro_info["name"].lower(): + distro_info["id"] = "cloudlinux" + return distro_info + return {} + + def _parse_distro_release_file(self, filepath): + # type: (str) -> Dict[str, str] + """ + Parse a distro release file. + + Parameters: + + * filepath: Path name of the distro release file. + + Returns: + A dictionary containing all information items. + """ + try: + with open(filepath) as fp: + # Only parse the first line. For instance, on SLES there + # are multiple lines. We don't want them... + return self._parse_distro_release_content(fp.readline()) + except (OSError, IOError): + # Ignore not being able to read a specific, seemingly version + # related file. + # See https://github.com/python-distro/distro/issues/162 + return {} + + @staticmethod + def _parse_distro_release_content(line): + # type: (str) -> Dict[str, str] + """ + Parse a line from a distro release file. + + Parameters: + * line: Line from the distro release file. Must be a unicode string + or a UTF-8 encoded byte string. + + Returns: + A dictionary containing all information items. + """ + matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match(line.strip()[::-1]) + distro_info = {} + if matches: + # regexp ensures non-None + distro_info["name"] = matches.group(3)[::-1] + if matches.group(2): + distro_info["version_id"] = matches.group(2)[::-1] + if matches.group(1): + distro_info["codename"] = matches.group(1)[::-1] + elif line: + distro_info["name"] = line.strip() + return distro_info + + +_distro = LinuxDistribution() + + +def main(): + # type: () -> None + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler(sys.stdout)) + + parser = argparse.ArgumentParser(description="OS distro info tool") + parser.add_argument( + "--json", "-j", help="Output in machine readable format", action="store_true" + ) + + parser.add_argument( + "--root-dir", + "-r", + type=str, + dest="root_dir", + help="Path to the root filesystem directory (defaults to /)", + ) + + args = parser.parse_args() + + if args.root_dir: + dist = LinuxDistribution( + include_lsb=False, include_uname=False, root_dir=args.root_dir + ) + else: + dist = _distro + + if args.json: + logger.info(json.dumps(dist.info(), indent=4, sort_keys=True)) + else: + logger.info("Name: %s", dist.name(pretty=True)) + distribution_version = dist.version(pretty=True) + logger.info("Version: %s", distribution_version) + distribution_codename = dist.codename() + logger.info("Codename: %s", distribution_codename) + + +if __name__ == "__main__": + main() diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py b/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py new file mode 100644 index 000000000..d1d82f157 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py @@ -0,0 +1,35 @@ +""" +HTML parsing library based on the `WHATWG HTML specification +`_. The parser is designed to be compatible with +existing HTML found in the wild and implements well-defined error recovery that +is largely compatible with modern desktop web browsers. + +Example usage:: + + from pip._vendor import html5lib + with open("my_document.html", "rb") as f: + tree = html5lib.parse(f) + +For convenience, this module re-exports the following names: + +* :func:`~.html5parser.parse` +* :func:`~.html5parser.parseFragment` +* :class:`~.html5parser.HTMLParser` +* :func:`~.treebuilders.getTreeBuilder` +* :func:`~.treewalkers.getTreeWalker` +* :func:`~.serializer.serialize` +""" + +from __future__ import absolute_import, division, unicode_literals + +from .html5parser import HTMLParser, parse, parseFragment +from .treebuilders import getTreeBuilder +from .treewalkers import getTreeWalker +from .serializer import serialize + +__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", + "getTreeWalker", "serialize"] + +# this has to be at the top level, see how setup.py parses this +#: Distribution version number. +__version__ = "1.1" diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15ca360a288ed6216b6e467751d989721a07c5d3 GIT binary patch literal 1304 zcmaJ>O>f&a7?wX`J9M08K(I5BQ#~{?dg#UIigxYN9J->|G6WEW(UeHZTu4zMsW|DO z=l+h~3iJo`w+QH|r~ZYV`jX0mBm*YHuSx3V^E~gD^=yVBcs~F2C3`=NqOX2)^XbFp zDSYh;42zP8^;lo_R6psfK{8OoWY~+?fDPrA8YLq&PR44IOv2fg+*T+-VLg&lwUg|G z^;pi-ZnE2p%7{%q^pbmQJK1CCk7z!npMVe@pZxX;*VI^1l~{_*P;-ehYB|HY!fws+ z>h$>8$>~cRJZ;T$QHY#6p)2%w?Obh_i^XP5-KLDSDHm&}R0 z6`(qeGmdkuYQV@O#~b0+h+hcnyoA6~=%!*=bo?738K!=(YRMI^oW&b1@PWw==9pSsEQ7a) zb%t~N^EFBwvUR_hBXk5Dxvqds@G9pIASj3kls6#F@I!v#`E96Ap{3LtpSy}GZb9-- zcv&=6zFfTv?2o!CbnvVHeS2hR=~V}>TvBWAg82Hp301v?&cEjy7Y;So%Ed-U~EjRJ?a)rLZSVZ$ddyi&T%f@lim7$$5aV{)0WV_c?B8U1C zDI7Oc+Hbw?PU!Pace@qx(ayrpzY))S?e1;ea5B3(=_JCz_O+b($czBmjJ=t7v+a$a za5Dw-cJMHM_-+4T3uTAIGNYFL}T6z;gm z(j#H4JA7mG-#m9IwBmXCN@S^p%pTS>KZE(ODGbHpYAC|w`)ODZA}ZksiR;UD^0@2T XC%zDN56m#y|8c*+)AOH6f3o!*-@Kgx literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dc9dee90a4a90379084a054acb3661b109601e7 GIT binary patch literal 13861 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de2c120869cf7afd89a9a93ac00c07a5e7159f94 GIT binary patch literal 21680 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 wHfi&hvk)hWZ>0Yrc_xO=|u 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⁢v$cgxSMb)K^~sk{NGfDsE->zZUq}e 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py new file mode 100644 index 000000000..3ff803c19 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py @@ -0,0 +1,289 @@ +from __future__ import absolute_import, division, unicode_literals + +import re +import warnings + +from .constants import DataLossWarning + +baseChar = """ +[#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | +[#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | +[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | +[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | +[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | +[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | +[#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | +[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | +[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | +[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | +[#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | +[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | +[#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | +[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | +[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | +[#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | +[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | +[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | +[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | +[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | +[#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | +[#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | +[#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | +[#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | +[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | +[#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | +[#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | +[#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | +[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | +[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | +#x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | +#x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | +#x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | +[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | +[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | +#x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | +[#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | +[#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | +[#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | +[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | +[#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | +#x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | +[#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | +[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | +[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | +[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]""" + +ideographic = """[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]""" + +combiningCharacter = """ +[#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | +[#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | +[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | +[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | +#x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | +[#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | +[#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | +#x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | +[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | +[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | +#x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | +[#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | +[#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | +[#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | +[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | +[#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | +#x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | +[#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | +#x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | +[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | +[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | +#x3099 | #x309A""" + +digit = """ +[#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | +[#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | +[#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | +[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]""" + +extender = """ +#x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | +#[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]""" + +letter = " | ".join([baseChar, ideographic]) + +# Without the +name = " | ".join([letter, digit, ".", "-", "_", combiningCharacter, + extender]) +nameFirst = " | ".join([letter, "_"]) + +reChar = re.compile(r"#x([\d|A-F]{4,4})") +reCharRange = re.compile(r"\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]") + + +def charStringToList(chars): + charRanges = [item.strip() for item in chars.split(" | ")] + rv = [] + for item in charRanges: + foundMatch = False + for regexp in (reChar, reCharRange): + match = regexp.match(item) + if match is not None: + rv.append([hexToInt(item) for item in match.groups()]) + if len(rv[-1]) == 1: + rv[-1] = rv[-1] * 2 + foundMatch = True + break + if not foundMatch: + assert len(item) == 1 + + rv.append([ord(item)] * 2) + rv = normaliseCharList(rv) + return rv + + +def normaliseCharList(charList): + charList = sorted(charList) + for item in charList: + assert item[1] >= item[0] + rv = [] + i = 0 + while i < len(charList): + j = 1 + rv.append(charList[i]) + while i + j < len(charList) and charList[i + j][0] <= rv[-1][1] + 1: + rv[-1][1] = charList[i + j][1] + j += 1 + i += j + return rv + + +# We don't really support characters above the BMP :( +max_unicode = int("FFFF", 16) + + +def missingRanges(charList): + rv = [] + if charList[0] != 0: + rv.append([0, charList[0][0] - 1]) + for i, item in enumerate(charList[:-1]): + rv.append([item[1] + 1, charList[i + 1][0] - 1]) + if charList[-1][1] != max_unicode: + rv.append([charList[-1][1] + 1, max_unicode]) + return rv + + +def listToRegexpStr(charList): + rv = [] + for item in charList: + if item[0] == item[1]: + rv.append(escapeRegexp(chr(item[0]))) + else: + rv.append(escapeRegexp(chr(item[0])) + "-" + + escapeRegexp(chr(item[1]))) + return "[%s]" % "".join(rv) + + +def hexToInt(hex_str): + return int(hex_str, 16) + + +def escapeRegexp(string): + specialCharacters = (".", "^", "$", "*", "+", "?", "{", "}", + "[", "]", "|", "(", ")", "-") + for char in specialCharacters: + string = string.replace(char, "\\" + char) + + return string + +# output from the above +nonXmlNameBMPRegexp = re.compile('[\x00-,/:-@\\[-\\^`\\{-\xb6\xb8-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u02cf\u02d2-\u02ff\u0346-\u035f\u0362-\u0385\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482\u0487-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u0653-\u065f\u066a-\u066f\u06b8-\u06b9\u06bf\u06cf\u06d4\u06e9\u06ee-\u06ef\u06fa-\u0900\u0904\u093a-\u093b\u094e-\u0950\u0955-\u0957\u0964-\u0965\u0970-\u0980\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09bd\u09c5-\u09c6\u09c9-\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09f2-\u0a01\u0a03-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0adf\u0ae1-\u0ae5\u0af0-\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3b\u0b44-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbd\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44-\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0e00\u0e2f\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6a-\u0f70\u0f85\u0f8c-\u0f8f\u0f96\u0f98\u0fae-\u0fb0\u0fb8\u0fba-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u20cf\u20dd-\u20e0\u20e2-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3004\u3006\u3008-\u3020\u3030\u3036-\u3040\u3095-\u3098\u309b-\u309c\u309f-\u30a0\u30fb\u30ff-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +nonXmlNameFirstBMPRegexp = re.compile('[\x00-@\\[-\\^`\\{-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u0640\u064b-\u0670\u06b8-\u06b9\u06bf\u06cf\u06d4\u06d6-\u06e4\u06e7-\u0904\u093a-\u093c\u093e-\u0957\u0962-\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0adf\u0ae1-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0e00\u0e2f\u0e31\u0e34-\u0e3f\u0e46-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eb1\u0eb4-\u0ebc\u0ebe-\u0ebf\u0ec5-\u0f3f\u0f48\u0f6a-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3006\u3008-\u3020\u302a-\u3040\u3095-\u30a0\u30fb-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +# Simpler things +nonPubidCharRegexp = re.compile("[^\x20\x0D\x0Aa-zA-Z0-9\\-'()+,./:=?;!*#@$_%]") + + +class InfosetFilter(object): + replacementRegexp = re.compile(r"U[\dA-F]{5,5}") + + def __init__(self, + dropXmlnsLocalName=False, + dropXmlnsAttrNs=False, + preventDoubleDashComments=False, + preventDashAtCommentEnd=False, + replaceFormFeedCharacters=True, + preventSingleQuotePubid=False): + + self.dropXmlnsLocalName = dropXmlnsLocalName + self.dropXmlnsAttrNs = dropXmlnsAttrNs + + self.preventDoubleDashComments = preventDoubleDashComments + self.preventDashAtCommentEnd = preventDashAtCommentEnd + + self.replaceFormFeedCharacters = replaceFormFeedCharacters + + self.preventSingleQuotePubid = preventSingleQuotePubid + + self.replaceCache = {} + + def coerceAttribute(self, name, namespace=None): + if self.dropXmlnsLocalName and name.startswith("xmlns:"): + warnings.warn("Attributes cannot begin with xmlns", DataLossWarning) + return None + elif (self.dropXmlnsAttrNs and + namespace == "http://www.w3.org/2000/xmlns/"): + warnings.warn("Attributes cannot be in the xml namespace", DataLossWarning) + return None + else: + return self.toXmlName(name) + + def coerceElement(self, name): + return self.toXmlName(name) + + def coerceComment(self, data): + if self.preventDoubleDashComments: + while "--" in data: + warnings.warn("Comments cannot contain adjacent dashes", DataLossWarning) + data = data.replace("--", "- -") + if data.endswith("-"): + warnings.warn("Comments cannot end in a dash", DataLossWarning) + data += " " + return data + + def coerceCharacters(self, data): + if self.replaceFormFeedCharacters: + for _ in range(data.count("\x0C")): + warnings.warn("Text cannot contain U+000C", DataLossWarning) + data = data.replace("\x0C", " ") + # Other non-xml characters + return data + + def coercePubid(self, data): + dataOutput = data + for char in nonPubidCharRegexp.findall(data): + warnings.warn("Coercing non-XML pubid", DataLossWarning) + replacement = self.getReplacementCharacter(char) + dataOutput = dataOutput.replace(char, replacement) + if self.preventSingleQuotePubid and dataOutput.find("'") >= 0: + warnings.warn("Pubid cannot contain single quote", DataLossWarning) + dataOutput = dataOutput.replace("'", self.getReplacementCharacter("'")) + return dataOutput + + def toXmlName(self, name): + nameFirst = name[0] + nameRest = name[1:] + m = nonXmlNameFirstBMPRegexp.match(nameFirst) + if m: + warnings.warn("Coercing non-XML name: %s" % name, DataLossWarning) + nameFirstOutput = self.getReplacementCharacter(nameFirst) + else: + nameFirstOutput = nameFirst + + nameRestOutput = nameRest + replaceChars = set(nonXmlNameBMPRegexp.findall(nameRest)) + for char in replaceChars: + warnings.warn("Coercing non-XML name: %s" % name, DataLossWarning) + replacement = self.getReplacementCharacter(char) + nameRestOutput = nameRestOutput.replace(char, replacement) + return nameFirstOutput + nameRestOutput + + def getReplacementCharacter(self, char): + if char in self.replaceCache: + replacement = self.replaceCache[char] + else: + replacement = self.escapeChar(char) + return replacement + + def fromXmlName(self, name): + for item in set(self.replacementRegexp.findall(name)): + name = name.replace(item, self.unescapeChar(item)) + return name + + def escapeChar(self, char): + replacement = "U%05X" % ord(char) + self.replaceCache[char] = replacement + return replacement + + def unescapeChar(self, charcode): + return chr(int(charcode[1:], 16)) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py new file mode 100644 index 000000000..e0bb37602 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py @@ -0,0 +1,918 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type +from pip._vendor.six.moves import http_client, urllib + +import codecs +import re +from io import BytesIO, StringIO + +from pip._vendor import webencodings + +from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase +from .constants import _ReparseException +from . import _utils + +# Non-unicode versions of constants for use in the pre-parser +spaceCharactersBytes = frozenset([item.encode("ascii") for item in spaceCharacters]) +asciiLettersBytes = frozenset([item.encode("ascii") for item in asciiLetters]) +asciiUppercaseBytes = frozenset([item.encode("ascii") for item in asciiUppercase]) +spacesAngleBrackets = spaceCharactersBytes | frozenset([b">", b"<"]) + + +invalid_unicode_no_surrogate = "[\u0001-\u0008\u000B\u000E-\u001F\u007F-\u009F\uFDD0-\uFDEF\uFFFE\uFFFF\U0001FFFE\U0001FFFF\U0002FFFE\U0002FFFF\U0003FFFE\U0003FFFF\U0004FFFE\U0004FFFF\U0005FFFE\U0005FFFF\U0006FFFE\U0006FFFF\U0007FFFE\U0007FFFF\U0008FFFE\U0008FFFF\U0009FFFE\U0009FFFF\U000AFFFE\U000AFFFF\U000BFFFE\U000BFFFF\U000CFFFE\U000CFFFF\U000DFFFE\U000DFFFF\U000EFFFE\U000EFFFF\U000FFFFE\U000FFFFF\U0010FFFE\U0010FFFF]" # noqa + +if _utils.supports_lone_surrogates: + # Use one extra step of indirection and create surrogates with + # eval. Not using this indirection would introduce an illegal + # unicode literal on platforms not supporting such lone + # surrogates. + assert invalid_unicode_no_surrogate[-1] == "]" and invalid_unicode_no_surrogate.count("]") == 1 + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate[:-1] + + eval('"\\uD800-\\uDFFF"') + # pylint:disable=eval-used + "]") +else: + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate) + +non_bmp_invalid_codepoints = {0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, + 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, + 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, + 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, + 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, + 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, + 0x10FFFE, 0x10FFFF} + +ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005C\u005B-\u0060\u007B-\u007E]") + +# Cache for charsUntil() +charsUntilRegEx = {} + + +class BufferedStream(object): + """Buffering for streams that do not have buffering of their own + + The buffer is implemented as a list of chunks on the assumption that + joining many strings will be slow since it is O(n**2) + """ + + def __init__(self, stream): + self.stream = stream + self.buffer = [] + self.position = [-1, 0] # chunk number, offset + + def tell(self): + pos = 0 + for chunk in self.buffer[:self.position[0]]: + pos += len(chunk) + pos += self.position[1] + return pos + + def seek(self, pos): + assert pos <= self._bufferedBytes() + offset = pos + i = 0 + while len(self.buffer[i]) < offset: + offset -= len(self.buffer[i]) + i += 1 + self.position = [i, offset] + + def read(self, bytes): + if not self.buffer: + return self._readStream(bytes) + elif (self.position[0] == len(self.buffer) and + self.position[1] == len(self.buffer[-1])): + return self._readStream(bytes) + else: + return self._readFromBuffer(bytes) + + def _bufferedBytes(self): + return sum([len(item) for item in self.buffer]) + + def _readStream(self, bytes): + data = self.stream.read(bytes) + self.buffer.append(data) + self.position[0] += 1 + self.position[1] = len(data) + return data + + def _readFromBuffer(self, bytes): + remainingBytes = bytes + rv = [] + bufferIndex = self.position[0] + bufferOffset = self.position[1] + while bufferIndex < len(self.buffer) and remainingBytes != 0: + assert remainingBytes > 0 + bufferedData = self.buffer[bufferIndex] + + if remainingBytes <= len(bufferedData) - bufferOffset: + bytesToRead = remainingBytes + self.position = [bufferIndex, bufferOffset + bytesToRead] + else: + bytesToRead = len(bufferedData) - bufferOffset + self.position = [bufferIndex, len(bufferedData)] + bufferIndex += 1 + rv.append(bufferedData[bufferOffset:bufferOffset + bytesToRead]) + remainingBytes -= bytesToRead + + bufferOffset = 0 + + if remainingBytes: + rv.append(self._readStream(remainingBytes)) + + return b"".join(rv) + + +def HTMLInputStream(source, **kwargs): + # Work around Python bug #20007: read(0) closes the connection. + # http://bugs.python.org/issue20007 + if (isinstance(source, http_client.HTTPResponse) or + # Also check for addinfourl wrapping HTTPResponse + (isinstance(source, urllib.response.addbase) and + isinstance(source.fp, http_client.HTTPResponse))): + isUnicode = False + elif hasattr(source, "read"): + isUnicode = isinstance(source.read(0), text_type) + else: + isUnicode = isinstance(source, text_type) + + if isUnicode: + encodings = [x for x in kwargs if x.endswith("_encoding")] + if encodings: + raise TypeError("Cannot set an encoding with a unicode input, set %r" % encodings) + + return HTMLUnicodeInputStream(source, **kwargs) + else: + return HTMLBinaryInputStream(source, **kwargs) + + +class HTMLUnicodeInputStream(object): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + _defaultChunkSize = 10240 + + def __init__(self, source): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + + if not _utils.supports_lone_surrogates: + # Such platforms will have already checked for such + # surrogate errors, so no need to do this checking. + self.reportCharacterErrors = None + elif len("\U0010FFFF") == 1: + self.reportCharacterErrors = self.characterErrorsUCS4 + else: + self.reportCharacterErrors = self.characterErrorsUCS2 + + # List of where new lines occur + self.newLines = [0] + + self.charEncoding = (lookupEncoding("utf-8"), "certain") + self.dataStream = self.openStream(source) + + self.reset() + + def reset(self): + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + self.errors = [] + + # number of (complete) lines in previous chunks + self.prevNumLines = 0 + # number of columns in the last line of the previous chunk + self.prevNumCols = 0 + + # Deal with CR LF and surrogates split over chunk boundaries + self._bufferedCharacter = None + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = StringIO(source) + + return stream + + def _position(self, offset): + chunk = self.chunk + nLines = chunk.count('\n', 0, offset) + positionLine = self.prevNumLines + nLines + lastLinePos = chunk.rfind('\n', 0, offset) + if lastLinePos == -1: + positionColumn = self.prevNumCols + offset + else: + positionColumn = offset - (lastLinePos + 1) + return (positionLine, positionColumn) + + def position(self): + """Returns (line, col) of the current position in the stream.""" + line, col = self._position(self.chunkOffset) + return (line + 1, col) + + def char(self): + """ Read one character from the stream or queue if available. Return + EOF when EOF is reached. + """ + # Read a new chunk from the input stream if necessary + if self.chunkOffset >= self.chunkSize: + if not self.readChunk(): + return EOF + + chunkOffset = self.chunkOffset + char = self.chunk[chunkOffset] + self.chunkOffset = chunkOffset + 1 + + return char + + def readChunk(self, chunkSize=None): + if chunkSize is None: + chunkSize = self._defaultChunkSize + + self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) + + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + + data = self.dataStream.read(chunkSize) + + # Deal with CR LF and surrogates broken across chunks + if self._bufferedCharacter: + data = self._bufferedCharacter + data + self._bufferedCharacter = None + elif not data: + # We have no more data, bye-bye stream + return False + + if len(data) > 1: + lastv = ord(data[-1]) + if lastv == 0x0D or 0xD800 <= lastv <= 0xDBFF: + self._bufferedCharacter = data[-1] + data = data[:-1] + + if self.reportCharacterErrors: + self.reportCharacterErrors(data) + + # Replace invalid characters + data = data.replace("\r\n", "\n") + data = data.replace("\r", "\n") + + self.chunk = data + self.chunkSize = len(data) + + return True + + def characterErrorsUCS4(self, data): + for _ in range(len(invalid_unicode_re.findall(data))): + self.errors.append("invalid-codepoint") + + def characterErrorsUCS2(self, data): + # Someone picked the wrong compile option + # You lose + skip = False + for match in invalid_unicode_re.finditer(data): + if skip: + continue + codepoint = ord(match.group()) + pos = match.start() + # Pretty sure there should be endianness issues here + if _utils.isSurrogatePair(data[pos:pos + 2]): + # We have a surrogate pair! + char_val = _utils.surrogatePairToCodepoint(data[pos:pos + 2]) + if char_val in non_bmp_invalid_codepoints: + self.errors.append("invalid-codepoint") + skip = True + elif (codepoint >= 0xD800 and codepoint <= 0xDFFF and + pos == len(data) - 1): + self.errors.append("invalid-codepoint") + else: + skip = False + self.errors.append("invalid-codepoint") + + def charsUntil(self, characters, opposite=False): + """ Returns a string of characters from the stream up to but not + including any character in 'characters' or EOF. 'characters' must be + a container that supports the 'in' method and iteration over its + characters. + """ + + # Use a cache of regexps to find the required characters + try: + chars = charsUntilRegEx[(characters, opposite)] + except KeyError: + if __debug__: + for c in characters: + assert(ord(c) < 128) + regex = "".join(["\\x%02x" % ord(c) for c in characters]) + if not opposite: + regex = "^%s" % regex + chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) + + rv = [] + + while True: + # Find the longest matching prefix + m = chars.match(self.chunk, self.chunkOffset) + if m is None: + # If nothing matched, and it wasn't because we ran out of chunk, + # then stop + if self.chunkOffset != self.chunkSize: + break + else: + end = m.end() + # If not the whole chunk matched, return everything + # up to the part that didn't match + if end != self.chunkSize: + rv.append(self.chunk[self.chunkOffset:end]) + self.chunkOffset = end + break + # If the whole remainder of the chunk matched, + # use it all and read the next chunk + rv.append(self.chunk[self.chunkOffset:]) + if not self.readChunk(): + # Reached EOF + break + + r = "".join(rv) + return r + + def unget(self, char): + # Only one character is allowed to be ungotten at once - it must + # be consumed again before any further call to unget + if char is not EOF: + if self.chunkOffset == 0: + # unget is called quite rarely, so it's a good idea to do + # more work here if it saves a bit of work in the frequently + # called char and charsUntil. + # So, just prepend the ungotten character onto the current + # chunk: + self.chunk = char + self.chunk + self.chunkSize += 1 + else: + self.chunkOffset -= 1 + assert self.chunk[self.chunkOffset] == char + + +class HTMLBinaryInputStream(HTMLUnicodeInputStream): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + def __init__(self, source, override_encoding=None, transport_encoding=None, + same_origin_parent_encoding=None, likely_encoding=None, + default_encoding="windows-1252", useChardet=True): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + # Raw Stream - for unicode objects this will encode to utf-8 and set + # self.charEncoding as appropriate + self.rawStream = self.openStream(source) + + HTMLUnicodeInputStream.__init__(self, self.rawStream) + + # Encoding Information + # Number of bytes to use when looking for a meta element with + # encoding information + self.numBytesMeta = 1024 + # Number of bytes to use when using detecting encoding using chardet + self.numBytesChardet = 100 + # Things from args + self.override_encoding = override_encoding + self.transport_encoding = transport_encoding + self.same_origin_parent_encoding = same_origin_parent_encoding + self.likely_encoding = likely_encoding + self.default_encoding = default_encoding + + # Determine encoding + self.charEncoding = self.determineEncoding(useChardet) + assert self.charEncoding[0] is not None + + # Call superclass + self.reset() + + def reset(self): + self.dataStream = self.charEncoding[0].codec_info.streamreader(self.rawStream, 'replace') + HTMLUnicodeInputStream.reset(self) + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = BytesIO(source) + + try: + stream.seek(stream.tell()) + except Exception: + stream = BufferedStream(stream) + + return stream + + def determineEncoding(self, chardet=True): + # BOMs take precedence over everything + # This will also read past the BOM if present + charEncoding = self.detectBOM(), "certain" + if charEncoding[0] is not None: + return charEncoding + + # If we've been overridden, we've been overridden + charEncoding = lookupEncoding(self.override_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Now check the transport layer + charEncoding = lookupEncoding(self.transport_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Look for meta elements with encoding information + charEncoding = self.detectEncodingMeta(), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Parent document encoding + charEncoding = lookupEncoding(self.same_origin_parent_encoding), "tentative" + if charEncoding[0] is not None and not charEncoding[0].name.startswith("utf-16"): + return charEncoding + + # "likely" encoding + charEncoding = lookupEncoding(self.likely_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Guess with chardet, if available + if chardet: + try: + from pip._vendor.chardet.universaldetector import UniversalDetector + except ImportError: + pass + else: + buffers = [] + detector = UniversalDetector() + while not detector.done: + buffer = self.rawStream.read(self.numBytesChardet) + assert isinstance(buffer, bytes) + if not buffer: + break + buffers.append(buffer) + detector.feed(buffer) + detector.close() + encoding = lookupEncoding(detector.result['encoding']) + self.rawStream.seek(0) + if encoding is not None: + return encoding, "tentative" + + # Try the default encoding + charEncoding = lookupEncoding(self.default_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Fallback to html5lib's default if even that hasn't worked + return lookupEncoding("windows-1252"), "tentative" + + def changeEncoding(self, newEncoding): + assert self.charEncoding[1] != "certain" + newEncoding = lookupEncoding(newEncoding) + if newEncoding is None: + return + if newEncoding.name in ("utf-16be", "utf-16le"): + newEncoding = lookupEncoding("utf-8") + assert newEncoding is not None + elif newEncoding == self.charEncoding[0]: + self.charEncoding = (self.charEncoding[0], "certain") + else: + self.rawStream.seek(0) + self.charEncoding = (newEncoding, "certain") + self.reset() + raise _ReparseException("Encoding changed from %s to %s" % (self.charEncoding[0], newEncoding)) + + def detectBOM(self): + """Attempts to detect at BOM at the start of the stream. If + an encoding can be determined from the BOM return the name of the + encoding otherwise return None""" + bomDict = { + codecs.BOM_UTF8: 'utf-8', + codecs.BOM_UTF16_LE: 'utf-16le', codecs.BOM_UTF16_BE: 'utf-16be', + codecs.BOM_UTF32_LE: 'utf-32le', codecs.BOM_UTF32_BE: 'utf-32be' + } + + # Go to beginning of file and read in 4 bytes + string = self.rawStream.read(4) + assert isinstance(string, bytes) + + # Try detecting the BOM using bytes from the string + encoding = bomDict.get(string[:3]) # UTF-8 + seek = 3 + if not encoding: + # Need to detect UTF-32 before UTF-16 + encoding = bomDict.get(string) # UTF-32 + seek = 4 + if not encoding: + encoding = bomDict.get(string[:2]) # UTF-16 + seek = 2 + + # Set the read position past the BOM if one was found, otherwise + # set it to the start of the stream + if encoding: + self.rawStream.seek(seek) + return lookupEncoding(encoding) + else: + self.rawStream.seek(0) + return None + + def detectEncodingMeta(self): + """Report the encoding declared by the meta element + """ + buffer = self.rawStream.read(self.numBytesMeta) + assert isinstance(buffer, bytes) + parser = EncodingParser(buffer) + self.rawStream.seek(0) + encoding = parser.getEncoding() + + if encoding is not None and encoding.name in ("utf-16be", "utf-16le"): + encoding = lookupEncoding("utf-8") + + return encoding + + +class EncodingBytes(bytes): + """String-like object with an associated position and various extra methods + If the position is ever greater than the string length then an exception is + raised""" + def __new__(self, value): + assert isinstance(value, bytes) + return bytes.__new__(self, value.lower()) + + def __init__(self, value): + # pylint:disable=unused-argument + self._position = -1 + + def __iter__(self): + return self + + def __next__(self): + p = self._position = self._position + 1 + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + return self[p:p + 1] + + def next(self): + # Py2 compat + return self.__next__() + + def previous(self): + p = self._position + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + self._position = p = p - 1 + return self[p:p + 1] + + def setPosition(self, position): + if self._position >= len(self): + raise StopIteration + self._position = position + + def getPosition(self): + if self._position >= len(self): + raise StopIteration + if self._position >= 0: + return self._position + else: + return None + + position = property(getPosition, setPosition) + + def getCurrentByte(self): + return self[self.position:self.position + 1] + + currentByte = property(getCurrentByte) + + def skip(self, chars=spaceCharactersBytes): + """Skip past a list of characters""" + p = self.position # use property for the error-checking + while p < len(self): + c = self[p:p + 1] + if c not in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def skipUntil(self, chars): + p = self.position + while p < len(self): + c = self[p:p + 1] + if c in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def matchBytes(self, bytes): + """Look for a sequence of bytes at the start of a string. If the bytes + are found return True and advance the position to the byte after the + match. Otherwise return False and leave the position alone""" + rv = self.startswith(bytes, self.position) + if rv: + self.position += len(bytes) + return rv + + def jumpTo(self, bytes): + """Look for the next sequence of bytes matching a given sequence. If + a match is found advance the position to the last byte of the match""" + try: + self._position = self.index(bytes, self.position) + len(bytes) - 1 + except ValueError: + raise StopIteration + return True + + +class EncodingParser(object): + """Mini parser for detecting character encoding from meta elements""" + + def __init__(self, data): + """string - the data to work on for encoding detection""" + self.data = EncodingBytes(data) + self.encoding = None + + def getEncoding(self): + if b"") + + def handleMeta(self): + if self.data.currentByte not in spaceCharactersBytes: + # if we have ") + + def getAttribute(self): + """Return a name,value pair for the next attribute in the stream, + if one is found, or None""" + data = self.data + # Step 1 (skip chars) + c = data.skip(spaceCharactersBytes | frozenset([b"/"])) + assert c is None or len(c) == 1 + # Step 2 + if c in (b">", None): + return None + # Step 3 + attrName = [] + attrValue = [] + # Step 4 attribute name + while True: + if c == b"=" and attrName: + break + elif c in spaceCharactersBytes: + # Step 6! + c = data.skip() + break + elif c in (b"/", b">"): + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrName.append(c.lower()) + elif c is None: + return None + else: + attrName.append(c) + # Step 5 + c = next(data) + # Step 7 + if c != b"=": + data.previous() + return b"".join(attrName), b"" + # Step 8 + next(data) + # Step 9 + c = data.skip() + # Step 10 + if c in (b"'", b'"'): + # 10.1 + quoteChar = c + while True: + # 10.2 + c = next(data) + # 10.3 + if c == quoteChar: + next(data) + return b"".join(attrName), b"".join(attrValue) + # 10.4 + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + # 10.5 + else: + attrValue.append(c) + elif c == b">": + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + # Step 11 + while True: + c = next(data) + if c in spacesAngleBrackets: + return b"".join(attrName), b"".join(attrValue) + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + + +class ContentAttrParser(object): + def __init__(self, data): + assert isinstance(data, bytes) + self.data = data + + def parse(self): + try: + # Check if the attr name is charset + # otherwise return + self.data.jumpTo(b"charset") + self.data.position += 1 + self.data.skip() + if not self.data.currentByte == b"=": + # If there is no = sign keep looking for attrs + return None + self.data.position += 1 + self.data.skip() + # Look for an encoding between matching quote marks + if self.data.currentByte in (b'"', b"'"): + quoteMark = self.data.currentByte + self.data.position += 1 + oldPosition = self.data.position + if self.data.jumpTo(quoteMark): + return self.data[oldPosition:self.data.position] + else: + return None + else: + # Unquoted value + oldPosition = self.data.position + try: + self.data.skipUntil(spaceCharactersBytes) + return self.data[oldPosition:self.data.position] + except StopIteration: + # Return the whole remaining value + return self.data[oldPosition:] + except StopIteration: + return None + + +def lookupEncoding(encoding): + """Return the python codec name corresponding to an encoding or None if the + string doesn't correspond to a valid encoding.""" + if isinstance(encoding, bytes): + try: + encoding = encoding.decode("ascii") + except UnicodeDecodeError: + return None + + if encoding is not None: + try: + return webencodings.lookup(encoding) + except AttributeError: + return None + else: + return None diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py new file mode 100644 index 000000000..5f00253e2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py @@ -0,0 +1,1735 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import unichr as chr + +from collections import deque, OrderedDict +from sys import version_info + +from .constants import spaceCharacters +from .constants import entities +from .constants import asciiLetters, asciiUpper2Lower +from .constants import digits, hexDigits, EOF +from .constants import tokenTypes, tagTokenTypes +from .constants import replacementCharacters + +from ._inputstream import HTMLInputStream + +from ._trie import Trie + +entitiesTrie = Trie(entities) + +if version_info >= (3, 7): + attributeMap = dict +else: + attributeMap = OrderedDict + + +class HTMLTokenizer(object): + """ This class takes care of tokenizing HTML. + + * self.currentToken + Holds the token that is currently being processed. + + * self.state + Holds a reference to the method to be invoked... XXX + + * self.stream + Points to HTMLInputStream object. + """ + + def __init__(self, stream, parser=None, **kwargs): + + self.stream = HTMLInputStream(stream, **kwargs) + self.parser = parser + + # Setup the initial tokenizer state + self.escapeFlag = False + self.lastFourChars = [] + self.state = self.dataState + self.escape = False + + # The current token being created + self.currentToken = None + super(HTMLTokenizer, self).__init__() + + def __iter__(self): + """ This is where the magic happens. + + We do our usually processing through the states and when we have a token + to return we yield the token which pauses processing until the next token + is requested. + """ + self.tokenQueue = deque([]) + # Start processing. When EOF is reached self.state will return False + # instead of True and the loop will terminate. + while self.state(): + while self.stream.errors: + yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} + while self.tokenQueue: + yield self.tokenQueue.popleft() + + def consumeNumberEntity(self, isHex): + """This function returns either U+FFFD or the character based on the + decimal or hexadecimal representation. It also discards ";" if present. + If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked. + """ + + allowed = digits + radix = 10 + if isHex: + allowed = hexDigits + radix = 16 + + charStack = [] + + # Consume all the characters that are in range while making sure we + # don't hit an EOF. + c = self.stream.char() + while c in allowed and c is not EOF: + charStack.append(c) + c = self.stream.char() + + # Convert the set of characters consumed to an int. + charAsInt = int("".join(charStack), radix) + + # Certain characters get replaced with others + if charAsInt in replacementCharacters: + char = replacementCharacters[charAsInt] + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + elif ((0xD800 <= charAsInt <= 0xDFFF) or + (charAsInt > 0x10FFFF)): + char = "\uFFFD" + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + else: + # Should speed up this check somehow (e.g. move the set to a constant) + if ((0x0001 <= charAsInt <= 0x0008) or + (0x000E <= charAsInt <= 0x001F) or + (0x007F <= charAsInt <= 0x009F) or + (0xFDD0 <= charAsInt <= 0xFDEF) or + charAsInt in frozenset([0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, + 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, + 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, + 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, + 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, + 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, + 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, + 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, + 0xFFFFF, 0x10FFFE, 0x10FFFF])): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + try: + # Try/except needed as UCS-2 Python builds' unichar only works + # within the BMP. + char = chr(charAsInt) + except ValueError: + v = charAsInt - 0x10000 + char = chr(0xD800 | (v >> 10)) + chr(0xDC00 | (v & 0x3FF)) + + # Discard the ; if present. Otherwise, put it back on the queue and + # invoke parseError on parser. + if c != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "numeric-entity-without-semicolon"}) + self.stream.unget(c) + + return char + + def consumeEntity(self, allowedChar=None, fromAttribute=False): + # Initialise to the default output for when no entity is matched + output = "&" + + charStack = [self.stream.char()] + if (charStack[0] in spaceCharacters or charStack[0] in (EOF, "<", "&") or + (allowedChar is not None and allowedChar == charStack[0])): + self.stream.unget(charStack[0]) + + elif charStack[0] == "#": + # Read the next character to see if it's hex or decimal + hex = False + charStack.append(self.stream.char()) + if charStack[-1] in ("x", "X"): + hex = True + charStack.append(self.stream.char()) + + # charStack[-1] should be the first digit + if (hex and charStack[-1] in hexDigits) \ + or (not hex and charStack[-1] in digits): + # At least one digit found, so consume the whole number + self.stream.unget(charStack[-1]) + output = self.consumeNumberEntity(hex) + else: + # No digits found + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "expected-numeric-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + else: + # At this point in the process might have named entity. Entities + # are stored in the global variable "entities". + # + # Consume characters and compare to these to a substring of the + # entity names in the list until the substring no longer matches. + while (charStack[-1] is not EOF): + if not entitiesTrie.has_keys_with_prefix("".join(charStack)): + break + charStack.append(self.stream.char()) + + # At this point we have a string that starts with some characters + # that may match an entity + # Try to find the longest entity the string will match to take care + # of ¬i for instance. + try: + entityName = entitiesTrie.longest_prefix("".join(charStack[:-1])) + entityLength = len(entityName) + except KeyError: + entityName = None + + if entityName is not None: + if entityName[-1] != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "named-entity-without-semicolon"}) + if (entityName[-1] != ";" and fromAttribute and + (charStack[entityLength] in asciiLetters or + charStack[entityLength] in digits or + charStack[entityLength] == "=")): + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + else: + output = entities[entityName] + self.stream.unget(charStack.pop()) + output += "".join(charStack[entityLength:]) + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-named-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + if fromAttribute: + self.currentToken["data"][-1][1] += output + else: + if output in spaceCharacters: + tokenType = "SpaceCharacters" + else: + tokenType = "Characters" + self.tokenQueue.append({"type": tokenTypes[tokenType], "data": output}) + + def processEntityInAttribute(self, allowedChar): + """This method replaces the need for "entityInAttributeValueState". + """ + self.consumeEntity(allowedChar=allowedChar, fromAttribute=True) + + def emitCurrentToken(self): + """This method is a generic handler for emitting the tags. It also sets + the state to "data" because that's what's needed after a token has been + emitted. + """ + token = self.currentToken + # Add token to the queue to be yielded + if (token["type"] in tagTokenTypes): + token["name"] = token["name"].translate(asciiUpper2Lower) + if token["type"] == tokenTypes["StartTag"]: + raw = token["data"] + data = attributeMap(raw) + if len(raw) > len(data): + # we had some duplicated attribute, fix so first wins + data.update(raw[::-1]) + token["data"] = data + + if token["type"] == tokenTypes["EndTag"]: + if token["data"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "attributes-in-end-tag"}) + if token["selfClosing"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "self-closing-flag-on-end-tag"}) + self.tokenQueue.append(token) + self.state = self.dataState + + # Below are the various tokenizer states worked out. + def dataState(self): + data = self.stream.char() + if data == "&": + self.state = self.entityDataState + elif data == "<": + self.state = self.tagOpenState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\u0000"}) + elif data is EOF: + # Tokenization ends. + return False + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def entityDataState(self): + self.consumeEntity() + self.state = self.dataState + return True + + def rcdataState(self): + data = self.stream.char() + if data == "&": + self.state = self.characterReferenceInRcdata + elif data == "<": + self.state = self.rcdataLessThanSignState + elif data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def characterReferenceInRcdata(self): + self.consumeEntity() + self.state = self.rcdataState + return True + + def rawtextState(self): + data = self.stream.char() + if data == "<": + self.state = self.rawtextLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def scriptDataState(self): + data = self.stream.char() + if data == "<": + self.state = self.scriptDataLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def plaintextState(self): + data = self.stream.char() + if data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + self.stream.charsUntil("\u0000")}) + return True + + def tagOpenState(self): + data = self.stream.char() + if data == "!": + self.state = self.markupDeclarationOpenState + elif data == "/": + self.state = self.closeTagOpenState + elif data in asciiLetters: + self.currentToken = {"type": tokenTypes["StartTag"], + "name": data, "data": [], + "selfClosing": False, + "selfClosingAcknowledged": False} + self.state = self.tagNameState + elif data == ">": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-right-bracket"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) + self.state = self.dataState + elif data == "?": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-question-mark"}) + self.stream.unget(data) + self.state = self.bogusCommentState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.dataState + return True + + def closeTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.currentToken = {"type": tokenTypes["EndTag"], "name": data, + "data": [], "selfClosing": False} + self.state = self.tagNameState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-right-bracket"}) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-eof"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "": + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-tag-name"}) + self.state = self.dataState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + else: + self.currentToken["name"] += data + # (Don't use charsUntil here, because tag names are + # very short and it's faster to not do anything fancy) + return True + + def rcdataLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.rcdataEndTagOpenState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.rcdataState + return True + + def rcdataEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer += data + self.state = self.rcdataEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataEscapedState + elif data == EOF: + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.scriptDataEscapedEndTagOpenState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) + self.temporaryBuffer = data + self.state = self.scriptDataDoubleEscapeStartState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer = data + self.state = self.scriptDataEscapedEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": ""))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataDoubleEscapedState + else: + self.state = self.scriptDataEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataDoubleEscapedState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + return True + + def scriptDataDoubleEscapedDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedDashDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) + self.temporaryBuffer = "" + self.state = self.scriptDataDoubleEscapeEndState + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapeEndState(self): + data = self.stream.char() + if data in (spaceCharacters | frozenset(("/", ">"))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataEscapedState + else: + self.state = self.scriptDataDoubleEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def beforeAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data in ("'", '"', "=", "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-name-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def attributeNameState(self): + data = self.stream.char() + leavingThisState = True + emitToken = False + if data == "=": + self.state = self.beforeAttributeValueState + elif data in asciiLetters: + self.currentToken["data"][-1][0] += data +\ + self.stream.charsUntil(asciiLetters, True) + leavingThisState = False + elif data == ">": + # XXX If we emit here the attributes are converted to a dict + # without being checked and when the code below runs we error + # because data is a dict not a list + emitToken = True + elif data in spaceCharacters: + self.state = self.afterAttributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][0] += "\uFFFD" + leavingThisState = False + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"][-1][0] += data + leavingThisState = False + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-attribute-name"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][0] += data + leavingThisState = False + + if leavingThisState: + # Attributes are not dropped at this stage. That happens when the + # start tag token is emitted so values can still be safely appended + # to attributes, but we do want to report the parse error in time. + self.currentToken["data"][-1][0] = ( + self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) + for name, _ in self.currentToken["data"][:-1]: + if self.currentToken["data"][-1][0] == name: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "duplicate-attribute"}) + break + # XXX Fix for above XXX + if emitToken: + self.emitCurrentToken() + return True + + def afterAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "=": + self.state = self.beforeAttributeValueState + elif data == ">": + self.emitCurrentToken() + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-after-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-end-of-tag-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def beforeAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "\"": + self.state = self.attributeValueDoubleQuotedState + elif data == "&": + self.state = self.attributeValueUnQuotedState + self.stream.unget(data) + elif data == "'": + self.state = self.attributeValueSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-right-bracket"}) + self.emitCurrentToken() + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + self.state = self.attributeValueUnQuotedState + elif data in ("=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "equals-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + return True + + def attributeValueDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute('"') + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-double-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("\"", "&", "\u0000")) + return True + + def attributeValueSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute("'") + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-single-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("'", "&", "\u0000")) + return True + + def attributeValueUnQuotedState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == "&": + self.processEntityInAttribute(">") + elif data == ">": + self.emitCurrentToken() + elif data in ('"', "'", "=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-no-quotes"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.stream.charsUntil( + frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) + return True + + def afterAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-EOF-after-attribute-value"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-attribute-value"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def selfClosingStartTagState(self): + data = self.stream.char() + if data == ">": + self.currentToken["selfClosing"] = True + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "unexpected-EOF-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def bogusCommentState(self): + # Make a new comment token and give it as value all the characters + # until the first > or EOF (charsUntil checks for EOF automatically) + # and emit it. + data = self.stream.charsUntil(">") + data = data.replace("\u0000", "\uFFFD") + self.tokenQueue.append( + {"type": tokenTypes["Comment"], "data": data}) + + # Eat the character directly after the bogus comment which is either a + # ">" or an EOF. + self.stream.char() + self.state = self.dataState + return True + + def markupDeclarationOpenState(self): + charStack = [self.stream.char()] + if charStack[-1] == "-": + charStack.append(self.stream.char()) + if charStack[-1] == "-": + self.currentToken = {"type": tokenTypes["Comment"], "data": ""} + self.state = self.commentStartState + return True + elif charStack[-1] in ('d', 'D'): + matched = True + for expected in (('o', 'O'), ('c', 'C'), ('t', 'T'), + ('y', 'Y'), ('p', 'P'), ('e', 'E')): + charStack.append(self.stream.char()) + if charStack[-1] not in expected: + matched = False + break + if matched: + self.currentToken = {"type": tokenTypes["Doctype"], + "name": "", + "publicId": None, "systemId": None, + "correct": True} + self.state = self.doctypeState + return True + elif (charStack[-1] == "[" and + self.parser is not None and + self.parser.tree.openElements and + self.parser.tree.openElements[-1].namespace != self.parser.tree.defaultNamespace): + matched = True + for expected in ["C", "D", "A", "T", "A", "["]: + charStack.append(self.stream.char()) + if charStack[-1] != expected: + matched = False + break + if matched: + self.state = self.cdataSectionState + return True + + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-dashes-or-doctype"}) + + while charStack: + self.stream.unget(charStack.pop()) + self.state = self.bogusCommentState + return True + + def commentStartState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentStartDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + self.state = self.commentState + return True + + def commentStartDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + \ + self.stream.charsUntil(("-", "\u0000")) + return True + + def commentEndDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentEndState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--\uFFFD" + self.state = self.commentState + elif data == "!": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-bang-after-double-dash-in-comment"}) + self.state = self.commentEndBangState + elif data == "-": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-dash-after-double-dash-in-comment"}) + self.currentToken["data"] += data + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-double-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-comment"}) + self.currentToken["data"] += "--" + data + self.state = self.commentState + return True + + def commentEndBangState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "-": + self.currentToken["data"] += "--!" + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--!\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-bang-state"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "--!" + data + self.state = self.commentState + return True + + def doctypeState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "need-space-after-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeNameState + return True + + def beforeDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-right-bracket"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] = "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] = data + self.state = self.doctypeNameState + return True + + def doctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.state = self.afterDoctypeNameState + elif data == ">": + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype-name"}) + self.currentToken["correct"] = False + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] += data + return True + + def afterDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.currentToken["correct"] = False + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + if data in ("p", "P"): + matched = True + for expected in (("u", "U"), ("b", "B"), ("l", "L"), + ("i", "I"), ("c", "C")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypePublicKeywordState + return True + elif data in ("s", "S"): + matched = True + for expected in (("y", "Y"), ("s", "S"), ("t", "T"), + ("e", "E"), ("m", "M")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypeSystemKeywordState + return True + + # All the characters read before the current 'data' will be + # [a-zA-Z], so they're garbage in the bogus doctype and can be + # discarded; only the latest character might be '>' or EOF + # and needs to be ungetted + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-space-or-right-bracket-in-doctype", "datavars": + {"data": data}}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + + return True + + def afterDoctypePublicKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypePublicIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + return True + + def beforeDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypePublicIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def doctypePublicIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def afterDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.betweenDoctypePublicAndSystemIdentifiersState + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def betweenDoctypePublicAndSystemIdentifiersState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def afterDoctypeSystemKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeSystemIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + return True + + def beforeDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypeSystemIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def doctypeSystemIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def afterDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.state = self.bogusDoctypeState + return True + + def bogusDoctypeState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + # XXX EMIT + self.stream.unget(data) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + pass + return True + + def cdataSectionState(self): + data = [] + while True: + data.append(self.stream.charsUntil("]")) + data.append(self.stream.charsUntil(">")) + char = self.stream.char() + if char == EOF: + break + else: + assert char == ">" + if data[-1][-2:] == "]]": + data[-1] = data[-1][:-2] + break + else: + data.append(char) + + data = "".join(data) # pylint:disable=redefined-variable-type + # Deal with null here rather than in the parser + nullCount = data.count("\u0000") + if nullCount > 0: + for _ in range(nullCount): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + data = data.replace("\u0000", "\uFFFD") + if data: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": data}) + self.state = self.dataState + return True diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py new file mode 100644 index 000000000..07bad5d31 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py @@ -0,0 +1,5 @@ +from __future__ import absolute_import, division, unicode_literals + +from .py import Trie + +__all__ = ["Trie"] diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7fe24e0787771350646a06dcc92a90077e6c6111 GIT binary patch literal 354 zcmYjM%Sr?>5KLxfA1p3<@F!MS=j2611VufFh>yz}x_ z1y3e>vZ1TH=xV6a^ZAU#`g;9tRGdGF{I4vMi`e!k0wp2%Xnje4@k!+zaZExi+fs@KMaDaQdV>Mk7k4qMFyNOZ!~(r#(`p`my- zD9kvL`^6;80N%XwMgW*($K(l$2qEh?J6V_j)KUU`5|i@m;CFp_%3iE6mOXlFYj&ku zuSDl8yFqvB8+MJxy5)n>AEI?^5Z%D;uwgdZS@w0iu2;gc9{UpFjcZfBJ0(vfHYK>| dumr#k9l&wF3DYyBxtHQRWw6QnA=%4j*&l+nVtxPs literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37a0e18b4e3e5bdfa0e29a98ea7cc3126e5c9672 GIT binary patch literal 1606 zcmZ`(&2Ah;5U%c--JRXFy_RhPjuK%&LfS*txp0Xr3lx)p04u^lz-U8jcDmOdGC%9? z9w%OnFW4wK^91%WZ@{y(#EDZLfD0F>nsuTz2{Y=R{;BTzzN)XLSX}G?KEMC;$LKE) z;7^*&KLJiY#b$oMPJ(19WGrME4|(Q=9)oFst336yM%ZBRJ>)$fRP*=)2K3f@t=Zm> zkh3RnAEYP!GmyS&oO)p(8+*`izQo(1@3~$yGDTWiC6a7XXzK!*93>_xa<^RONnA)J z(!?qqrKZnZ>zimYN%H-ej?X{-<;2{n2(|pUj+x*PudtqtdZnz;(Th9r9`mQRhPl-KFKlS9@e+NWe=x z-~n6V)AnnxZ)A)VbC(W$h+PHeZ~;5;sB^+AevX00ATObuF*}F8#6V+?9^UKo8iOVu zeNV68r$**HL|n&t))6ANb`TjsOavuH%#!gA?ii}T1=e9r#{coX>3R+FZPxz}`T<^1 zp~#LvH!B2b5h{v~oifSZMd=}xHKc-NQ1LGO%GZ%1+I}>@!m(bFUeBW4Df@->`R+@S zAqKsnqkLaEFIBk}*T*1{!=TtwJjn%6j13eShR-5UYMOO3uY)t07MX=34eagnB2 zz4-SugJ=|M`iZ#im-U~uPND10nbcR#p{ViH(has|^tMS3brRQr^JR?EGA41&{})#* BbGHBh literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8afdc7084cfc2d56259090a0b8d859ab9cc92ee GIT binary patch literal 2269 zcmah~OK%%D5GJ_~tz_9&Qp1V+R3Av8ww7~g3j{%sSCgU$jG}dO5Y!SYk+#=f?J6YY z+QJHGtNf7on19e?e+Pk{ddjJX+*OX-up8o z8V#zQ8YTCM z2u0;F5fxdRdY!6>z9p^dGq6Zno?VT5I!{MN@? zr@BRL)yQMR&B;&#v(!tp>>HlSUGt2hJ!<_OmB>CCfBEx(xe0%L4~QfkDoBS3D%fMv z@q{OQ7~#kwgfS2m5y2RWs;I$O5e-on%a3U%5-VaABvr8lSGb@eFxF>4<{!=xvpewD zUjZ?I89FKG6M9PSk|~{1y=s{7rt}wD(1LK!_~q&pxj^_pLlKxt0lK>kxJVFi7jF0Q zit}&oN`pYZ4&-N2knf`jHQ>z9DSJpLdBkw*Q@Y(^wg#YP+QeC3ssQvs#M)OaJ$_2m zGVp)NJJ-73X{mJgn~~OW_io-F4P<6?_kLo&9QC^Q5~a=N*D5~%(7Q)6JL*12dR-0C z*&N3G!+1~X?l2i{aaa?%+S)gR^wTuyZE*uZ*&3d-hbOjreNSfcc&KhH;n5K;_S0oD zZerltoF`dgIB#E1^FD<9Mth+?zI-c9n}_m5HwPnanmyUnU^m;-mM9nfs`cVDwLa?D z>JB8y7fR*I23*7@wxNdnk^!@P1v0MBd^+)ex>N7r2D~5Qiq-7AsP|Ef$#)K0P~dz6<<7|hPbdE$JORyu zZp`siZ=sd97cQJL7sDma_oRWd3^;#t;i@sa&thr&jJpabV)3}}{RWc)I?0IWB^c=; zgAv^8hH*hfWTCX7gb%z^s;;Ye+I1w3So0Ff&p=Tlcz}V!=OWM* zhUknp93rpURhC!{`%@MVB?Lvc{~5NJOJ*gUTx*p?K^niR~^Pi*UQV@z}}{@r>&7X099ve-aiz+?Y;m2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py new file mode 100644 index 000000000..6b71975f0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py @@ -0,0 +1,40 @@ +from __future__ import absolute_import, division, unicode_literals + +try: + from collections.abc import Mapping +except ImportError: # Python 2.7 + from collections import Mapping + + +class Trie(Mapping): + """Abstract base class for tries""" + + def keys(self, prefix=None): + # pylint:disable=arguments-differ + keys = super(Trie, self).keys() + + if prefix is None: + return set(keys) + + return {x for x in keys if x.startswith(prefix)} + + def has_keys_with_prefix(self, prefix): + for key in self.keys(): + if key.startswith(prefix): + return True + + return False + + def longest_prefix(self, prefix): + if prefix in self: + return prefix + + for i in range(1, len(prefix) + 1): + if prefix[:-i] in self: + return prefix[:-i] + + raise KeyError(prefix) + + def longest_prefix_item(self, prefix): + lprefix = self.longest_prefix(prefix) + return (lprefix, self[lprefix]) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py new file mode 100644 index 000000000..c178b219d --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py @@ -0,0 +1,67 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +from bisect import bisect_left + +from ._base import Trie as ABCTrie + + +class Trie(ABCTrie): + def __init__(self, data): + if not all(isinstance(x, text_type) for x in data.keys()): + raise TypeError("All keys must be strings") + + self._data = data + self._keys = sorted(data.keys()) + self._cachestr = "" + self._cachepoints = (0, len(data)) + + def __contains__(self, key): + return key in self._data + + def __len__(self): + return len(self._data) + + def __iter__(self): + return iter(self._data) + + def __getitem__(self, key): + return self._data[key] + + def keys(self, prefix=None): + if prefix is None or prefix == "" or not self._keys: + return set(self._keys) + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + start = i = bisect_left(self._keys, prefix, lo, hi) + else: + start = i = bisect_left(self._keys, prefix) + + keys = set() + if start == len(self._keys): + return keys + + while self._keys[i].startswith(prefix): + keys.add(self._keys[i]) + i += 1 + + self._cachestr = prefix + self._cachepoints = (start, i) + + return keys + + def has_keys_with_prefix(self, prefix): + if prefix in self._data: + return True + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + i = bisect_left(self._keys, prefix, lo, hi) + else: + i = bisect_left(self._keys, prefix) + + if i == len(self._keys): + return False + + return self._keys[i].startswith(prefix) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py b/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py new file mode 100644 index 000000000..d7c4926af --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py @@ -0,0 +1,159 @@ +from __future__ import absolute_import, division, unicode_literals + +from types import ModuleType + +try: + from collections.abc import Mapping +except ImportError: + from collections import Mapping + +from pip._vendor.six import text_type, PY3 + +if PY3: + import xml.etree.ElementTree as default_etree +else: + try: + import xml.etree.cElementTree as default_etree + except ImportError: + import xml.etree.ElementTree as default_etree + + +__all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", + "surrogatePairToCodepoint", "moduleFactoryFactory", + "supports_lone_surrogates"] + + +# Platforms not supporting lone surrogates (\uD800-\uDFFF) should be +# caught by the below test. In general this would be any platform +# using UTF-16 as its encoding of unicode strings, such as +# Jython. This is because UTF-16 itself is based on the use of such +# surrogates, and there is no mechanism to further escape such +# escapes. +try: + _x = eval('"\\uD800"') # pylint:disable=eval-used + if not isinstance(_x, text_type): + # We need this with u"" because of http://bugs.jython.org/issue2039 + _x = eval('u"\\uD800"') # pylint:disable=eval-used + assert isinstance(_x, text_type) +except Exception: + supports_lone_surrogates = False +else: + supports_lone_surrogates = True + + +class MethodDispatcher(dict): + """Dict with 2 special properties: + + On initiation, keys that are lists, sets or tuples are converted to + multiple keys so accessing any one of the items in the original + list-like object returns the matching value + + md = MethodDispatcher({("foo", "bar"):"baz"}) + md["foo"] == "baz" + + A default value which can be set through the default attribute. + """ + + def __init__(self, items=()): + _dictEntries = [] + for name, value in items: + if isinstance(name, (list, tuple, frozenset, set)): + for item in name: + _dictEntries.append((item, value)) + else: + _dictEntries.append((name, value)) + dict.__init__(self, _dictEntries) + assert len(self) == len(_dictEntries) + self.default = None + + def __getitem__(self, key): + return dict.get(self, key, self.default) + + def __get__(self, instance, owner=None): + return BoundMethodDispatcher(instance, self) + + +class BoundMethodDispatcher(Mapping): + """Wraps a MethodDispatcher, binding its return values to `instance`""" + def __init__(self, instance, dispatcher): + self.instance = instance + self.dispatcher = dispatcher + + def __getitem__(self, key): + # see https://docs.python.org/3/reference/datamodel.html#object.__get__ + # on a function, __get__ is used to bind a function to an instance as a bound method + return self.dispatcher[key].__get__(self.instance) + + def get(self, key, default): + if key in self.dispatcher: + return self[key] + else: + return default + + def __iter__(self): + return iter(self.dispatcher) + + def __len__(self): + return len(self.dispatcher) + + def __contains__(self, key): + return key in self.dispatcher + + +# Some utility functions to deal with weirdness around UCS2 vs UCS4 +# python builds + +def isSurrogatePair(data): + return (len(data) == 2 and + ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and + ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) + + +def surrogatePairToCodepoint(data): + char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + + (ord(data[1]) - 0xDC00)) + return char_val + +# Module Factory Factory (no, this isn't Java, I know) +# Here to stop this being duplicated all over the place. + + +def moduleFactoryFactory(factory): + moduleCache = {} + + def moduleFactory(baseModule, *args, **kwargs): + if isinstance(ModuleType.__name__, type("")): + name = "_%s_factory" % baseModule.__name__ + else: + name = b"_%s_factory" % baseModule.__name__ + + kwargs_tuple = tuple(kwargs.items()) + + try: + return moduleCache[name][args][kwargs_tuple] + except KeyError: + mod = ModuleType(name) + objs = factory(baseModule, *args, **kwargs) + mod.__dict__.update(objs) + if "name" not in moduleCache: + moduleCache[name] = {} + if "args" not in moduleCache[name]: + moduleCache[name][args] = {} + if "kwargs" not in moduleCache[name][args]: + moduleCache[name][args][kwargs_tuple] = {} + moduleCache[name][args][kwargs_tuple] = mod + return mod + + return moduleFactory + + +def memoize(func): + cache = {} + + def wrapped(*args, **kwargs): + key = (tuple(args), tuple(kwargs.items())) + if key not in cache: + cache[key] = func(*args, **kwargs) + return cache[key] + + return wrapped diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py b/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py new file mode 100644 index 000000000..fe3e237cd --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py @@ -0,0 +1,2946 @@ +from __future__ import absolute_import, division, unicode_literals + +import string + +EOF = None + +E = { + "null-character": + "Null character in input stream, replaced with U+FFFD.", + "invalid-codepoint": + "Invalid codepoint in stream.", + "incorrectly-placed-solidus": + "Solidus (/) incorrectly placed in tag.", + "incorrect-cr-newline-entity": + "Incorrect CR newline entity, replaced with LF.", + "illegal-windows-1252-entity": + "Entity used with illegal number (windows-1252 reference).", + "cant-convert-numeric-entity": + "Numeric entity couldn't be converted to character " + "(codepoint U+%(charAsInt)08x).", + "illegal-codepoint-for-numeric-entity": + "Numeric entity represents an illegal codepoint: " + "U+%(charAsInt)08x.", + "numeric-entity-without-semicolon": + "Numeric entity didn't end with ';'.", + "expected-numeric-entity-but-got-eof": + "Numeric entity expected. Got end of file instead.", + "expected-numeric-entity": + "Numeric entity expected but none found.", + "named-entity-without-semicolon": + "Named entity didn't end with ';'.", + "expected-named-entity": + "Named entity expected. Got none.", + "attributes-in-end-tag": + "End tag contains unexpected attributes.", + 'self-closing-flag-on-end-tag': + "End tag contains unexpected self-closing flag.", + "expected-tag-name-but-got-right-bracket": + "Expected tag name. Got '>' instead.", + "expected-tag-name-but-got-question-mark": + "Expected tag name. Got '?' instead. (HTML doesn't " + "support processing instructions.)", + "expected-tag-name": + "Expected tag name. Got something else instead", + "expected-closing-tag-but-got-right-bracket": + "Expected closing tag. Got '>' instead. Ignoring ''.", + "expected-closing-tag-but-got-eof": + "Expected closing tag. Unexpected end of file.", + "expected-closing-tag-but-got-char": + "Expected closing tag. Unexpected character '%(data)s' found.", + "eof-in-tag-name": + "Unexpected end of file in the tag name.", + "expected-attribute-name-but-got-eof": + "Unexpected end of file. Expected attribute name instead.", + "eof-in-attribute-name": + "Unexpected end of file in attribute name.", + "invalid-character-in-attribute-name": + "Invalid character in attribute name", + "duplicate-attribute": + "Dropped duplicate attribute on tag.", + "expected-end-of-tag-name-but-got-eof": + "Unexpected end of file. Expected = or end of tag.", + "expected-attribute-value-but-got-eof": + "Unexpected end of file. Expected attribute value.", + "expected-attribute-value-but-got-right-bracket": + "Expected attribute value. Got '>' instead.", + 'equals-in-unquoted-attribute-value': + "Unexpected = in unquoted attribute", + 'unexpected-character-in-unquoted-attribute-value': + "Unexpected character in unquoted attribute", + "invalid-character-after-attribute-name": + "Unexpected character after attribute name.", + "unexpected-character-after-attribute-value": + "Unexpected character after attribute value.", + "eof-in-attribute-value-double-quote": + "Unexpected end of file in attribute value (\").", + "eof-in-attribute-value-single-quote": + "Unexpected end of file in attribute value (').", + "eof-in-attribute-value-no-quotes": + "Unexpected end of file in attribute value.", + "unexpected-EOF-after-solidus-in-tag": + "Unexpected end of file in tag. Expected >", + "unexpected-character-after-solidus-in-tag": + "Unexpected character after / in tag. Expected >", + "expected-dashes-or-doctype": + "Expected '--' or 'DOCTYPE'. Not found.", + "unexpected-bang-after-double-dash-in-comment": + "Unexpected ! after -- in comment", + "unexpected-space-after-double-dash-in-comment": + "Unexpected space after -- in comment", + "incorrect-comment": + "Incorrect comment.", + "eof-in-comment": + "Unexpected end of file in comment.", + "eof-in-comment-end-dash": + "Unexpected end of file in comment (-)", + "unexpected-dash-after-double-dash-in-comment": + "Unexpected '-' after '--' found in comment.", + "eof-in-comment-double-dash": + "Unexpected end of file in comment (--).", + "eof-in-comment-end-space-state": + "Unexpected end of file in comment.", + "eof-in-comment-end-bang-state": + "Unexpected end of file in comment.", + "unexpected-char-in-comment": + "Unexpected character in comment found.", + "need-space-after-doctype": + "No space after literal string 'DOCTYPE'.", + "expected-doctype-name-but-got-right-bracket": + "Unexpected > character. Expected DOCTYPE name.", + "expected-doctype-name-but-got-eof": + "Unexpected end of file. Expected DOCTYPE name.", + "eof-in-doctype-name": + "Unexpected end of file in DOCTYPE name.", + "eof-in-doctype": + "Unexpected end of file in DOCTYPE.", + "expected-space-or-right-bracket-in-doctype": + "Expected space or '>'. Got '%(data)s'", + "unexpected-end-of-doctype": + "Unexpected end of DOCTYPE.", + "unexpected-char-in-doctype": + "Unexpected character in DOCTYPE.", + "eof-in-innerhtml": + "XXX innerHTML EOF", + "unexpected-doctype": + "Unexpected DOCTYPE. Ignored.", + "non-html-root": + "html needs to be the first start tag.", + "expected-doctype-but-got-eof": + "Unexpected End of file. Expected DOCTYPE.", + "unknown-doctype": + "Erroneous DOCTYPE.", + "expected-doctype-but-got-chars": + "Unexpected non-space characters. Expected DOCTYPE.", + "expected-doctype-but-got-start-tag": + "Unexpected start tag (%(name)s). Expected DOCTYPE.", + "expected-doctype-but-got-end-tag": + "Unexpected end tag (%(name)s). Expected DOCTYPE.", + "end-tag-after-implied-root": + "Unexpected end tag (%(name)s) after the (implied) root element.", + "expected-named-closing-tag-but-got-eof": + "Unexpected end of file. Expected end tag (%(name)s).", + "two-heads-are-not-better-than-one": + "Unexpected start tag head in existing head. Ignored.", + "unexpected-end-tag": + "Unexpected end tag (%(name)s). Ignored.", + "unexpected-start-tag-out-of-my-head": + "Unexpected start tag (%(name)s) that can be in head. Moved.", + "unexpected-start-tag": + "Unexpected start tag (%(name)s).", + "missing-end-tag": + "Missing end tag (%(name)s).", + "missing-end-tags": + "Missing end tags (%(name)s).", + "unexpected-start-tag-implies-end-tag": + "Unexpected start tag (%(startName)s) " + "implies end tag (%(endName)s).", + "unexpected-start-tag-treated-as": + "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", + "deprecated-tag": + "Unexpected start tag %(name)s. Don't use it!", + "unexpected-start-tag-ignored": + "Unexpected start tag %(name)s. Ignored.", + "expected-one-end-tag-but-got-another": + "Unexpected end tag (%(gotName)s). " + "Missing end tag (%(expectedName)s).", + "end-tag-too-early": + "End tag (%(name)s) seen too early. Expected other end tag.", + "end-tag-too-early-named": + "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", + "end-tag-too-early-ignored": + "End tag (%(name)s) seen too early. Ignored.", + "adoption-agency-1.1": + "End tag (%(name)s) violates step 1, " + "paragraph 1 of the adoption agency algorithm.", + "adoption-agency-1.2": + "End tag (%(name)s) violates step 1, " + "paragraph 2 of the adoption agency algorithm.", + "adoption-agency-1.3": + "End tag (%(name)s) violates step 1, " + "paragraph 3 of the adoption agency algorithm.", + "adoption-agency-4.4": + "End tag (%(name)s) violates step 4, " + "paragraph 4 of the adoption agency algorithm.", + "unexpected-end-tag-treated-as": + "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", + "no-end-tag": + "This element (%(name)s) has no end tag.", + "unexpected-implied-end-tag-in-table": + "Unexpected implied end tag (%(name)s) in the table phase.", + "unexpected-implied-end-tag-in-table-body": + "Unexpected implied end tag (%(name)s) in the table body phase.", + "unexpected-char-implies-table-voodoo": + "Unexpected non-space characters in " + "table context caused voodoo mode.", + "unexpected-hidden-input-in-table": + "Unexpected input with type hidden in table context.", + "unexpected-form-in-table": + "Unexpected form in table context.", + "unexpected-start-tag-implies-table-voodoo": + "Unexpected start tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-end-tag-implies-table-voodoo": + "Unexpected end tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-cell-in-table-body": + "Unexpected table cell start tag (%(name)s) " + "in the table body phase.", + "unexpected-cell-end-tag": + "Got table cell end tag (%(name)s) " + "while required end tags are missing.", + "unexpected-end-tag-in-table-body": + "Unexpected end tag (%(name)s) in the table body phase. Ignored.", + "unexpected-implied-end-tag-in-table-row": + "Unexpected implied end tag (%(name)s) in the table row phase.", + "unexpected-end-tag-in-table-row": + "Unexpected end tag (%(name)s) in the table row phase. Ignored.", + "unexpected-select-in-select": + "Unexpected select start tag in the select phase " + "treated as select end tag.", + "unexpected-input-in-select": + "Unexpected input start tag in the select phase.", + "unexpected-start-tag-in-select": + "Unexpected start tag token (%(name)s in the select phase. " + "Ignored.", + "unexpected-end-tag-in-select": + "Unexpected end tag (%(name)s) in the select phase. Ignored.", + "unexpected-table-element-start-tag-in-select-in-table": + "Unexpected table element start tag (%(name)s) in the select in table phase.", + "unexpected-table-element-end-tag-in-select-in-table": + "Unexpected table element end tag (%(name)s) in the select in table phase.", + "unexpected-char-after-body": + "Unexpected non-space characters in the after body phase.", + "unexpected-start-tag-after-body": + "Unexpected start tag token (%(name)s)" + " in the after body phase.", + "unexpected-end-tag-after-body": + "Unexpected end tag token (%(name)s)" + " in the after body phase.", + "unexpected-char-in-frameset": + "Unexpected characters in the frameset phase. Characters ignored.", + "unexpected-start-tag-in-frameset": + "Unexpected start tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-frameset-in-frameset-innerhtml": + "Unexpected end tag token (frameset) " + "in the frameset phase (innerHTML).", + "unexpected-end-tag-in-frameset": + "Unexpected end tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-char-after-frameset": + "Unexpected non-space characters in the " + "after frameset phase. Ignored.", + "unexpected-start-tag-after-frameset": + "Unexpected start tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-frameset": + "Unexpected end tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-body-innerhtml": + "Unexpected end tag after body(innerHtml)", + "expected-eof-but-got-char": + "Unexpected non-space characters. Expected end of file.", + "expected-eof-but-got-start-tag": + "Unexpected start tag (%(name)s)" + ". Expected end of file.", + "expected-eof-but-got-end-tag": + "Unexpected end tag (%(name)s)" + ". Expected end of file.", + "eof-in-table": + "Unexpected end of file. Expected table content.", + "eof-in-select": + "Unexpected end of file. Expected select content.", + "eof-in-frameset": + "Unexpected end of file. Expected frameset content.", + "eof-in-script-in-script": + "Unexpected end of file. Expected script content.", + "eof-in-foreign-lands": + "Unexpected end of file. Expected foreign content", + "non-void-element-with-trailing-solidus": + "Trailing solidus not allowed on element %(name)s", + "unexpected-html-element-in-foreign-content": + "Element %(name)s not allowed in a non-html context", + "unexpected-end-tag-before-html": + "Unexpected end tag (%(name)s) before html.", + "unexpected-inhead-noscript-tag": + "Element %(name)s not allowed in a inhead-noscript context", + "eof-in-head-noscript": + "Unexpected end of file. Expected inhead-noscript content", + "char-in-head-noscript": + "Unexpected non-space character. Expected inhead-noscript content", + "XXX-undefined-error": + "Undefined error (this sucks and should be fixed)", +} + +namespaces = { + "html": "http://www.w3.org/1999/xhtml", + "mathml": "http://www.w3.org/1998/Math/MathML", + "svg": "http://www.w3.org/2000/svg", + "xlink": "http://www.w3.org/1999/xlink", + "xml": "http://www.w3.org/XML/1998/namespace", + "xmlns": "http://www.w3.org/2000/xmlns/" +} + +scopingElements = frozenset([ + (namespaces["html"], "applet"), + (namespaces["html"], "caption"), + (namespaces["html"], "html"), + (namespaces["html"], "marquee"), + (namespaces["html"], "object"), + (namespaces["html"], "table"), + (namespaces["html"], "td"), + (namespaces["html"], "th"), + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext"), + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title"), +]) + +formattingElements = frozenset([ + (namespaces["html"], "a"), + (namespaces["html"], "b"), + (namespaces["html"], "big"), + (namespaces["html"], "code"), + (namespaces["html"], "em"), + (namespaces["html"], "font"), + (namespaces["html"], "i"), + (namespaces["html"], "nobr"), + (namespaces["html"], "s"), + (namespaces["html"], "small"), + (namespaces["html"], "strike"), + (namespaces["html"], "strong"), + (namespaces["html"], "tt"), + (namespaces["html"], "u") +]) + +specialElements = frozenset([ + (namespaces["html"], "address"), + (namespaces["html"], "applet"), + (namespaces["html"], "area"), + (namespaces["html"], "article"), + (namespaces["html"], "aside"), + (namespaces["html"], "base"), + (namespaces["html"], "basefont"), + (namespaces["html"], "bgsound"), + (namespaces["html"], "blockquote"), + (namespaces["html"], "body"), + (namespaces["html"], "br"), + (namespaces["html"], "button"), + (namespaces["html"], "caption"), + (namespaces["html"], "center"), + (namespaces["html"], "col"), + (namespaces["html"], "colgroup"), + (namespaces["html"], "command"), + (namespaces["html"], "dd"), + (namespaces["html"], "details"), + (namespaces["html"], "dir"), + (namespaces["html"], "div"), + (namespaces["html"], "dl"), + (namespaces["html"], "dt"), + (namespaces["html"], "embed"), + (namespaces["html"], "fieldset"), + (namespaces["html"], "figure"), + (namespaces["html"], "footer"), + (namespaces["html"], "form"), + (namespaces["html"], "frame"), + (namespaces["html"], "frameset"), + (namespaces["html"], "h1"), + (namespaces["html"], "h2"), + (namespaces["html"], "h3"), + (namespaces["html"], "h4"), + (namespaces["html"], "h5"), + (namespaces["html"], "h6"), + (namespaces["html"], "head"), + (namespaces["html"], "header"), + (namespaces["html"], "hr"), + (namespaces["html"], "html"), + (namespaces["html"], "iframe"), + # Note that image is commented out in the spec as "this isn't an + # element that can end up on the stack, so it doesn't matter," + (namespaces["html"], "image"), + (namespaces["html"], "img"), + (namespaces["html"], "input"), + (namespaces["html"], "isindex"), + (namespaces["html"], "li"), + (namespaces["html"], "link"), + (namespaces["html"], "listing"), + (namespaces["html"], "marquee"), + (namespaces["html"], "menu"), + (namespaces["html"], "meta"), + (namespaces["html"], "nav"), + (namespaces["html"], "noembed"), + (namespaces["html"], "noframes"), + (namespaces["html"], "noscript"), + (namespaces["html"], "object"), + (namespaces["html"], "ol"), + (namespaces["html"], "p"), + (namespaces["html"], "param"), + (namespaces["html"], "plaintext"), + (namespaces["html"], "pre"), + (namespaces["html"], "script"), + (namespaces["html"], "section"), + (namespaces["html"], "select"), + (namespaces["html"], "style"), + (namespaces["html"], "table"), + (namespaces["html"], "tbody"), + (namespaces["html"], "td"), + (namespaces["html"], "textarea"), + (namespaces["html"], "tfoot"), + (namespaces["html"], "th"), + (namespaces["html"], "thead"), + (namespaces["html"], "title"), + (namespaces["html"], "tr"), + (namespaces["html"], "ul"), + (namespaces["html"], "wbr"), + (namespaces["html"], "xmp"), + (namespaces["svg"], "foreignObject") +]) + +htmlIntegrationPointElements = frozenset([ + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title") +]) + +mathmlTextIntegrationPointElements = frozenset([ + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext") +]) + +adjustSVGAttributes = { + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan" +} + +adjustMathMLAttributes = {"definitionurl": "definitionURL"} + +adjustForeignAttributes = { + "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), + "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), + "xlink:href": ("xlink", "href", namespaces["xlink"]), + "xlink:role": ("xlink", "role", namespaces["xlink"]), + "xlink:show": ("xlink", "show", namespaces["xlink"]), + "xlink:title": ("xlink", "title", namespaces["xlink"]), + "xlink:type": ("xlink", "type", namespaces["xlink"]), + "xml:base": ("xml", "base", namespaces["xml"]), + "xml:lang": ("xml", "lang", namespaces["xml"]), + "xml:space": ("xml", "space", namespaces["xml"]), + "xmlns": (None, "xmlns", namespaces["xmlns"]), + "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) +} + +unadjustForeignAttributes = {(ns, local): qname for qname, (prefix, local, ns) in + adjustForeignAttributes.items()} + +spaceCharacters = frozenset([ + "\t", + "\n", + "\u000C", + " ", + "\r" +]) + +tableInsertModeElements = frozenset([ + "table", + "tbody", + "tfoot", + "thead", + "tr" +]) + +asciiLowercase = frozenset(string.ascii_lowercase) +asciiUppercase = frozenset(string.ascii_uppercase) +asciiLetters = frozenset(string.ascii_letters) +digits = frozenset(string.digits) +hexDigits = frozenset(string.hexdigits) + +asciiUpper2Lower = {ord(c): ord(c.lower()) for c in string.ascii_uppercase} + +# Heading elements need to be ordered +headingElements = ( + "h1", + "h2", + "h3", + "h4", + "h5", + "h6" +) + +voidElements = frozenset([ + "base", + "command", + "event-source", + "link", + "meta", + "hr", + "br", + "img", + "embed", + "param", + "area", + "col", + "input", + "source", + "track" +]) + +cdataElements = frozenset(['title', 'textarea']) + +rcdataElements = frozenset([ + 'style', + 'script', + 'xmp', + 'iframe', + 'noembed', + 'noframes', + 'noscript' +]) + +booleanAttributes = { + "": frozenset(["irrelevant", "itemscope"]), + "style": frozenset(["scoped"]), + "img": frozenset(["ismap"]), + "audio": frozenset(["autoplay", "controls"]), + "video": frozenset(["autoplay", "controls"]), + "script": frozenset(["defer", "async"]), + "details": frozenset(["open"]), + "datagrid": frozenset(["multiple", "disabled"]), + "command": frozenset(["hidden", "disabled", "checked", "default"]), + "hr": frozenset(["noshade"]), + "menu": frozenset(["autosubmit"]), + "fieldset": frozenset(["disabled", "readonly"]), + "option": frozenset(["disabled", "readonly", "selected"]), + "optgroup": frozenset(["disabled", "readonly"]), + "button": frozenset(["disabled", "autofocus"]), + "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), + "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), + "output": frozenset(["disabled", "readonly"]), + "iframe": frozenset(["seamless"]), +} + +# entitiesWindows1252 has to be _ordered_ and needs to have an index. It +# therefore can't be a frozenset. +entitiesWindows1252 = ( + 8364, # 0x80 0x20AC EURO SIGN + 65533, # 0x81 UNDEFINED + 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK + 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK + 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK + 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS + 8224, # 0x86 0x2020 DAGGER + 8225, # 0x87 0x2021 DOUBLE DAGGER + 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT + 8240, # 0x89 0x2030 PER MILLE SIGN + 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON + 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE + 65533, # 0x8D UNDEFINED + 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON + 65533, # 0x8F UNDEFINED + 65533, # 0x90 UNDEFINED + 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK + 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK + 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK + 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK + 8226, # 0x95 0x2022 BULLET + 8211, # 0x96 0x2013 EN DASH + 8212, # 0x97 0x2014 EM DASH + 732, # 0x98 0x02DC SMALL TILDE + 8482, # 0x99 0x2122 TRADE MARK SIGN + 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON + 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE + 65533, # 0x9D UNDEFINED + 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON + 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +) + +xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) + +entities = { + "AElig": "\xc6", + "AElig;": "\xc6", + "AMP": "&", + "AMP;": "&", + "Aacute": "\xc1", + "Aacute;": "\xc1", + "Abreve;": "\u0102", + "Acirc": "\xc2", + "Acirc;": "\xc2", + "Acy;": "\u0410", + "Afr;": "\U0001d504", + "Agrave": "\xc0", + "Agrave;": "\xc0", + "Alpha;": "\u0391", + "Amacr;": "\u0100", + "And;": "\u2a53", + "Aogon;": "\u0104", + "Aopf;": "\U0001d538", + "ApplyFunction;": "\u2061", + "Aring": "\xc5", + "Aring;": "\xc5", + "Ascr;": "\U0001d49c", + "Assign;": "\u2254", + "Atilde": "\xc3", + "Atilde;": "\xc3", + "Auml": "\xc4", + "Auml;": "\xc4", + "Backslash;": "\u2216", + "Barv;": "\u2ae7", + "Barwed;": "\u2306", + "Bcy;": "\u0411", + "Because;": "\u2235", + "Bernoullis;": "\u212c", + "Beta;": "\u0392", + "Bfr;": "\U0001d505", + "Bopf;": "\U0001d539", + "Breve;": "\u02d8", + "Bscr;": "\u212c", + "Bumpeq;": "\u224e", + "CHcy;": "\u0427", + "COPY": "\xa9", + "COPY;": "\xa9", + "Cacute;": "\u0106", + "Cap;": "\u22d2", + "CapitalDifferentialD;": "\u2145", + "Cayleys;": "\u212d", + "Ccaron;": "\u010c", + "Ccedil": "\xc7", + "Ccedil;": "\xc7", + "Ccirc;": "\u0108", + "Cconint;": "\u2230", + "Cdot;": "\u010a", + "Cedilla;": "\xb8", + "CenterDot;": "\xb7", + "Cfr;": "\u212d", + "Chi;": "\u03a7", + "CircleDot;": "\u2299", + "CircleMinus;": "\u2296", + "CirclePlus;": "\u2295", + "CircleTimes;": "\u2297", + "ClockwiseContourIntegral;": "\u2232", + "CloseCurlyDoubleQuote;": "\u201d", + "CloseCurlyQuote;": "\u2019", + "Colon;": "\u2237", + "Colone;": "\u2a74", + "Congruent;": "\u2261", + "Conint;": "\u222f", + "ContourIntegral;": "\u222e", + "Copf;": "\u2102", + "Coproduct;": "\u2210", + "CounterClockwiseContourIntegral;": "\u2233", + "Cross;": "\u2a2f", + "Cscr;": "\U0001d49e", + "Cup;": "\u22d3", + "CupCap;": "\u224d", + "DD;": "\u2145", + "DDotrahd;": "\u2911", + "DJcy;": "\u0402", + "DScy;": "\u0405", + "DZcy;": "\u040f", + "Dagger;": "\u2021", + "Darr;": "\u21a1", + "Dashv;": "\u2ae4", + "Dcaron;": "\u010e", + "Dcy;": "\u0414", + "Del;": "\u2207", + "Delta;": "\u0394", + "Dfr;": "\U0001d507", + "DiacriticalAcute;": "\xb4", + "DiacriticalDot;": "\u02d9", + "DiacriticalDoubleAcute;": "\u02dd", + "DiacriticalGrave;": "`", + "DiacriticalTilde;": "\u02dc", + "Diamond;": "\u22c4", + "DifferentialD;": "\u2146", + "Dopf;": "\U0001d53b", + "Dot;": "\xa8", + "DotDot;": "\u20dc", + "DotEqual;": "\u2250", + "DoubleContourIntegral;": "\u222f", + "DoubleDot;": "\xa8", + "DoubleDownArrow;": "\u21d3", + "DoubleLeftArrow;": "\u21d0", + "DoubleLeftRightArrow;": "\u21d4", + "DoubleLeftTee;": "\u2ae4", + "DoubleLongLeftArrow;": "\u27f8", + "DoubleLongLeftRightArrow;": "\u27fa", + "DoubleLongRightArrow;": "\u27f9", + "DoubleRightArrow;": "\u21d2", + "DoubleRightTee;": "\u22a8", + "DoubleUpArrow;": "\u21d1", + "DoubleUpDownArrow;": "\u21d5", + "DoubleVerticalBar;": "\u2225", + "DownArrow;": "\u2193", + "DownArrowBar;": "\u2913", + "DownArrowUpArrow;": "\u21f5", + "DownBreve;": "\u0311", + "DownLeftRightVector;": "\u2950", + "DownLeftTeeVector;": "\u295e", + "DownLeftVector;": "\u21bd", + "DownLeftVectorBar;": "\u2956", + "DownRightTeeVector;": "\u295f", + "DownRightVector;": "\u21c1", + "DownRightVectorBar;": "\u2957", + "DownTee;": "\u22a4", + "DownTeeArrow;": "\u21a7", + "Downarrow;": "\u21d3", + "Dscr;": "\U0001d49f", + "Dstrok;": "\u0110", + "ENG;": "\u014a", + "ETH": "\xd0", + "ETH;": "\xd0", + "Eacute": "\xc9", + "Eacute;": "\xc9", + "Ecaron;": "\u011a", + "Ecirc": "\xca", + "Ecirc;": "\xca", + "Ecy;": "\u042d", + "Edot;": "\u0116", + "Efr;": "\U0001d508", + "Egrave": "\xc8", + "Egrave;": "\xc8", + "Element;": "\u2208", + "Emacr;": "\u0112", + "EmptySmallSquare;": "\u25fb", + "EmptyVerySmallSquare;": "\u25ab", + "Eogon;": "\u0118", + "Eopf;": "\U0001d53c", + "Epsilon;": "\u0395", + "Equal;": "\u2a75", + "EqualTilde;": "\u2242", + "Equilibrium;": "\u21cc", + "Escr;": "\u2130", + "Esim;": "\u2a73", + "Eta;": "\u0397", + "Euml": "\xcb", + "Euml;": "\xcb", + "Exists;": "\u2203", + "ExponentialE;": "\u2147", + "Fcy;": "\u0424", + "Ffr;": "\U0001d509", + "FilledSmallSquare;": "\u25fc", + "FilledVerySmallSquare;": "\u25aa", + "Fopf;": "\U0001d53d", + "ForAll;": "\u2200", + "Fouriertrf;": "\u2131", + "Fscr;": "\u2131", + "GJcy;": "\u0403", + "GT": ">", + "GT;": ">", + "Gamma;": "\u0393", + "Gammad;": "\u03dc", + "Gbreve;": "\u011e", + "Gcedil;": "\u0122", + "Gcirc;": "\u011c", + "Gcy;": "\u0413", + "Gdot;": "\u0120", + "Gfr;": "\U0001d50a", + "Gg;": "\u22d9", + "Gopf;": "\U0001d53e", + "GreaterEqual;": "\u2265", + "GreaterEqualLess;": "\u22db", + "GreaterFullEqual;": "\u2267", + "GreaterGreater;": "\u2aa2", + "GreaterLess;": "\u2277", + "GreaterSlantEqual;": "\u2a7e", + "GreaterTilde;": "\u2273", + "Gscr;": "\U0001d4a2", + "Gt;": "\u226b", + "HARDcy;": "\u042a", + "Hacek;": "\u02c7", + "Hat;": "^", + "Hcirc;": "\u0124", + "Hfr;": "\u210c", + "HilbertSpace;": "\u210b", + "Hopf;": "\u210d", + "HorizontalLine;": "\u2500", + "Hscr;": "\u210b", + "Hstrok;": "\u0126", + "HumpDownHump;": "\u224e", + "HumpEqual;": "\u224f", + "IEcy;": "\u0415", + "IJlig;": "\u0132", + "IOcy;": "\u0401", + "Iacute": "\xcd", + "Iacute;": "\xcd", + "Icirc": "\xce", + "Icirc;": "\xce", + "Icy;": "\u0418", + "Idot;": "\u0130", + "Ifr;": "\u2111", + "Igrave": "\xcc", + "Igrave;": "\xcc", + "Im;": "\u2111", + "Imacr;": "\u012a", + "ImaginaryI;": "\u2148", + "Implies;": "\u21d2", + "Int;": "\u222c", + "Integral;": "\u222b", + "Intersection;": "\u22c2", + "InvisibleComma;": "\u2063", + "InvisibleTimes;": "\u2062", + "Iogon;": "\u012e", + "Iopf;": "\U0001d540", + "Iota;": "\u0399", + "Iscr;": "\u2110", + "Itilde;": "\u0128", + "Iukcy;": "\u0406", + "Iuml": "\xcf", + "Iuml;": "\xcf", + "Jcirc;": "\u0134", + "Jcy;": "\u0419", + "Jfr;": "\U0001d50d", + "Jopf;": "\U0001d541", + "Jscr;": "\U0001d4a5", + "Jsercy;": "\u0408", + "Jukcy;": "\u0404", + "KHcy;": "\u0425", + "KJcy;": "\u040c", + "Kappa;": "\u039a", + "Kcedil;": "\u0136", + "Kcy;": "\u041a", + "Kfr;": "\U0001d50e", + "Kopf;": "\U0001d542", + "Kscr;": "\U0001d4a6", + "LJcy;": "\u0409", + "LT": "<", + "LT;": "<", + "Lacute;": "\u0139", + "Lambda;": "\u039b", + "Lang;": "\u27ea", + "Laplacetrf;": "\u2112", + "Larr;": "\u219e", + "Lcaron;": "\u013d", + "Lcedil;": "\u013b", + "Lcy;": "\u041b", + "LeftAngleBracket;": "\u27e8", + "LeftArrow;": "\u2190", + "LeftArrowBar;": "\u21e4", + "LeftArrowRightArrow;": "\u21c6", + "LeftCeiling;": "\u2308", + "LeftDoubleBracket;": "\u27e6", + "LeftDownTeeVector;": "\u2961", + "LeftDownVector;": "\u21c3", + "LeftDownVectorBar;": "\u2959", + "LeftFloor;": "\u230a", + "LeftRightArrow;": "\u2194", + "LeftRightVector;": "\u294e", + "LeftTee;": "\u22a3", + "LeftTeeArrow;": "\u21a4", + "LeftTeeVector;": "\u295a", + "LeftTriangle;": "\u22b2", + "LeftTriangleBar;": "\u29cf", + "LeftTriangleEqual;": "\u22b4", + "LeftUpDownVector;": "\u2951", + "LeftUpTeeVector;": "\u2960", + "LeftUpVector;": "\u21bf", + "LeftUpVectorBar;": "\u2958", + "LeftVector;": "\u21bc", + "LeftVectorBar;": "\u2952", + "Leftarrow;": "\u21d0", + "Leftrightarrow;": "\u21d4", + "LessEqualGreater;": "\u22da", + "LessFullEqual;": "\u2266", + "LessGreater;": "\u2276", + "LessLess;": "\u2aa1", + "LessSlantEqual;": "\u2a7d", + "LessTilde;": "\u2272", + "Lfr;": "\U0001d50f", + "Ll;": "\u22d8", + "Lleftarrow;": "\u21da", + "Lmidot;": "\u013f", + "LongLeftArrow;": "\u27f5", + "LongLeftRightArrow;": "\u27f7", + "LongRightArrow;": "\u27f6", + "Longleftarrow;": "\u27f8", + "Longleftrightarrow;": "\u27fa", + "Longrightarrow;": "\u27f9", + "Lopf;": "\U0001d543", + "LowerLeftArrow;": "\u2199", + "LowerRightArrow;": "\u2198", + "Lscr;": "\u2112", + "Lsh;": "\u21b0", + "Lstrok;": "\u0141", + "Lt;": "\u226a", + "Map;": "\u2905", + "Mcy;": "\u041c", + "MediumSpace;": "\u205f", + "Mellintrf;": "\u2133", + "Mfr;": "\U0001d510", + "MinusPlus;": "\u2213", + "Mopf;": "\U0001d544", + "Mscr;": "\u2133", + "Mu;": "\u039c", + "NJcy;": "\u040a", + "Nacute;": "\u0143", + "Ncaron;": "\u0147", + "Ncedil;": "\u0145", + "Ncy;": "\u041d", + "NegativeMediumSpace;": "\u200b", + "NegativeThickSpace;": "\u200b", + "NegativeThinSpace;": "\u200b", + "NegativeVeryThinSpace;": "\u200b", + "NestedGreaterGreater;": "\u226b", + "NestedLessLess;": "\u226a", + "NewLine;": "\n", + "Nfr;": "\U0001d511", + "NoBreak;": "\u2060", + "NonBreakingSpace;": "\xa0", + "Nopf;": "\u2115", + "Not;": "\u2aec", + "NotCongruent;": "\u2262", + "NotCupCap;": "\u226d", + "NotDoubleVerticalBar;": "\u2226", + "NotElement;": "\u2209", + "NotEqual;": "\u2260", + "NotEqualTilde;": "\u2242\u0338", + "NotExists;": "\u2204", + "NotGreater;": "\u226f", + "NotGreaterEqual;": "\u2271", + "NotGreaterFullEqual;": "\u2267\u0338", + "NotGreaterGreater;": "\u226b\u0338", + "NotGreaterLess;": "\u2279", + "NotGreaterSlantEqual;": "\u2a7e\u0338", + "NotGreaterTilde;": "\u2275", + "NotHumpDownHump;": "\u224e\u0338", + "NotHumpEqual;": "\u224f\u0338", + "NotLeftTriangle;": "\u22ea", + "NotLeftTriangleBar;": "\u29cf\u0338", + "NotLeftTriangleEqual;": "\u22ec", + "NotLess;": "\u226e", + "NotLessEqual;": "\u2270", + "NotLessGreater;": "\u2278", + "NotLessLess;": "\u226a\u0338", + "NotLessSlantEqual;": "\u2a7d\u0338", + "NotLessTilde;": "\u2274", + "NotNestedGreaterGreater;": "\u2aa2\u0338", + "NotNestedLessLess;": "\u2aa1\u0338", + "NotPrecedes;": "\u2280", + "NotPrecedesEqual;": "\u2aaf\u0338", + "NotPrecedesSlantEqual;": "\u22e0", + "NotReverseElement;": "\u220c", + "NotRightTriangle;": "\u22eb", + "NotRightTriangleBar;": "\u29d0\u0338", + "NotRightTriangleEqual;": "\u22ed", + "NotSquareSubset;": "\u228f\u0338", + "NotSquareSubsetEqual;": "\u22e2", + "NotSquareSuperset;": "\u2290\u0338", + "NotSquareSupersetEqual;": "\u22e3", + "NotSubset;": "\u2282\u20d2", + "NotSubsetEqual;": "\u2288", + "NotSucceeds;": "\u2281", + "NotSucceedsEqual;": "\u2ab0\u0338", + "NotSucceedsSlantEqual;": "\u22e1", + "NotSucceedsTilde;": "\u227f\u0338", + "NotSuperset;": "\u2283\u20d2", + "NotSupersetEqual;": "\u2289", + "NotTilde;": "\u2241", + "NotTildeEqual;": "\u2244", + "NotTildeFullEqual;": "\u2247", + "NotTildeTilde;": "\u2249", + "NotVerticalBar;": "\u2224", + "Nscr;": "\U0001d4a9", + "Ntilde": "\xd1", + "Ntilde;": "\xd1", + "Nu;": "\u039d", + "OElig;": "\u0152", + "Oacute": "\xd3", + "Oacute;": "\xd3", + "Ocirc": "\xd4", + "Ocirc;": "\xd4", + "Ocy;": "\u041e", + "Odblac;": "\u0150", + "Ofr;": "\U0001d512", + "Ograve": "\xd2", + "Ograve;": "\xd2", + "Omacr;": "\u014c", + "Omega;": "\u03a9", + "Omicron;": "\u039f", + "Oopf;": "\U0001d546", + "OpenCurlyDoubleQuote;": "\u201c", + "OpenCurlyQuote;": "\u2018", + "Or;": "\u2a54", + "Oscr;": "\U0001d4aa", + "Oslash": "\xd8", + "Oslash;": "\xd8", + "Otilde": "\xd5", + "Otilde;": "\xd5", + "Otimes;": "\u2a37", + "Ouml": "\xd6", + "Ouml;": "\xd6", + "OverBar;": "\u203e", + "OverBrace;": "\u23de", + "OverBracket;": "\u23b4", + "OverParenthesis;": "\u23dc", + "PartialD;": "\u2202", + "Pcy;": "\u041f", + "Pfr;": "\U0001d513", + "Phi;": "\u03a6", + "Pi;": "\u03a0", + "PlusMinus;": "\xb1", + "Poincareplane;": "\u210c", + "Popf;": "\u2119", + "Pr;": "\u2abb", + "Precedes;": "\u227a", + "PrecedesEqual;": "\u2aaf", + "PrecedesSlantEqual;": "\u227c", + "PrecedesTilde;": "\u227e", + "Prime;": "\u2033", + "Product;": "\u220f", + "Proportion;": "\u2237", + "Proportional;": "\u221d", + "Pscr;": "\U0001d4ab", + "Psi;": "\u03a8", + "QUOT": "\"", + "QUOT;": "\"", + "Qfr;": "\U0001d514", + "Qopf;": "\u211a", + "Qscr;": "\U0001d4ac", + "RBarr;": "\u2910", + "REG": "\xae", + "REG;": "\xae", + "Racute;": "\u0154", + "Rang;": "\u27eb", + "Rarr;": "\u21a0", + "Rarrtl;": "\u2916", + "Rcaron;": "\u0158", + "Rcedil;": "\u0156", + "Rcy;": "\u0420", + "Re;": "\u211c", + "ReverseElement;": "\u220b", + "ReverseEquilibrium;": "\u21cb", + "ReverseUpEquilibrium;": "\u296f", + "Rfr;": "\u211c", + "Rho;": "\u03a1", + "RightAngleBracket;": "\u27e9", + "RightArrow;": "\u2192", + "RightArrowBar;": "\u21e5", + "RightArrowLeftArrow;": "\u21c4", + "RightCeiling;": "\u2309", + "RightDoubleBracket;": "\u27e7", + "RightDownTeeVector;": "\u295d", + "RightDownVector;": "\u21c2", + "RightDownVectorBar;": "\u2955", + "RightFloor;": "\u230b", + "RightTee;": "\u22a2", + "RightTeeArrow;": "\u21a6", + "RightTeeVector;": "\u295b", + "RightTriangle;": "\u22b3", + "RightTriangleBar;": "\u29d0", + "RightTriangleEqual;": "\u22b5", + "RightUpDownVector;": "\u294f", + "RightUpTeeVector;": "\u295c", + "RightUpVector;": "\u21be", + "RightUpVectorBar;": "\u2954", + "RightVector;": "\u21c0", + "RightVectorBar;": "\u2953", + "Rightarrow;": "\u21d2", + "Ropf;": "\u211d", + "RoundImplies;": "\u2970", + "Rrightarrow;": "\u21db", + "Rscr;": "\u211b", + "Rsh;": "\u21b1", + "RuleDelayed;": "\u29f4", + "SHCHcy;": "\u0429", + "SHcy;": "\u0428", + "SOFTcy;": "\u042c", + "Sacute;": "\u015a", + "Sc;": "\u2abc", + "Scaron;": "\u0160", + "Scedil;": "\u015e", + "Scirc;": "\u015c", + "Scy;": "\u0421", + "Sfr;": "\U0001d516", + "ShortDownArrow;": "\u2193", + "ShortLeftArrow;": "\u2190", + "ShortRightArrow;": "\u2192", + "ShortUpArrow;": "\u2191", + "Sigma;": "\u03a3", + "SmallCircle;": "\u2218", + "Sopf;": "\U0001d54a", + "Sqrt;": "\u221a", + "Square;": "\u25a1", + "SquareIntersection;": "\u2293", + "SquareSubset;": "\u228f", + "SquareSubsetEqual;": "\u2291", + "SquareSuperset;": "\u2290", + "SquareSupersetEqual;": "\u2292", + "SquareUnion;": "\u2294", + "Sscr;": "\U0001d4ae", + "Star;": "\u22c6", + "Sub;": "\u22d0", + "Subset;": "\u22d0", + "SubsetEqual;": "\u2286", + "Succeeds;": "\u227b", + "SucceedsEqual;": "\u2ab0", + "SucceedsSlantEqual;": "\u227d", + "SucceedsTilde;": "\u227f", + "SuchThat;": "\u220b", + "Sum;": "\u2211", + "Sup;": "\u22d1", + "Superset;": "\u2283", + "SupersetEqual;": "\u2287", + "Supset;": "\u22d1", + "THORN": "\xde", + "THORN;": "\xde", + "TRADE;": "\u2122", + "TSHcy;": "\u040b", + "TScy;": "\u0426", + "Tab;": "\t", + "Tau;": "\u03a4", + "Tcaron;": "\u0164", + "Tcedil;": "\u0162", + "Tcy;": "\u0422", + "Tfr;": "\U0001d517", + "Therefore;": "\u2234", + "Theta;": "\u0398", + "ThickSpace;": "\u205f\u200a", + "ThinSpace;": "\u2009", + "Tilde;": "\u223c", + "TildeEqual;": "\u2243", + "TildeFullEqual;": "\u2245", + "TildeTilde;": "\u2248", + "Topf;": "\U0001d54b", + "TripleDot;": "\u20db", + "Tscr;": "\U0001d4af", + "Tstrok;": "\u0166", + "Uacute": "\xda", + "Uacute;": "\xda", + "Uarr;": "\u219f", + "Uarrocir;": "\u2949", + "Ubrcy;": "\u040e", + "Ubreve;": "\u016c", + "Ucirc": "\xdb", + "Ucirc;": "\xdb", + "Ucy;": "\u0423", + "Udblac;": "\u0170", + "Ufr;": "\U0001d518", + "Ugrave": "\xd9", + "Ugrave;": "\xd9", + "Umacr;": "\u016a", + "UnderBar;": "_", + "UnderBrace;": "\u23df", + "UnderBracket;": "\u23b5", + "UnderParenthesis;": "\u23dd", + "Union;": "\u22c3", + "UnionPlus;": "\u228e", + "Uogon;": "\u0172", + "Uopf;": "\U0001d54c", + "UpArrow;": "\u2191", + "UpArrowBar;": "\u2912", + "UpArrowDownArrow;": "\u21c5", + "UpDownArrow;": "\u2195", + "UpEquilibrium;": "\u296e", + "UpTee;": "\u22a5", + "UpTeeArrow;": "\u21a5", + "Uparrow;": "\u21d1", + "Updownarrow;": "\u21d5", + "UpperLeftArrow;": "\u2196", + "UpperRightArrow;": "\u2197", + "Upsi;": "\u03d2", + "Upsilon;": "\u03a5", + "Uring;": "\u016e", + "Uscr;": "\U0001d4b0", + "Utilde;": "\u0168", + "Uuml": "\xdc", + "Uuml;": "\xdc", + "VDash;": "\u22ab", + "Vbar;": "\u2aeb", + "Vcy;": "\u0412", + "Vdash;": "\u22a9", + "Vdashl;": "\u2ae6", + "Vee;": "\u22c1", + "Verbar;": "\u2016", + "Vert;": "\u2016", + "VerticalBar;": "\u2223", + "VerticalLine;": "|", + "VerticalSeparator;": "\u2758", + "VerticalTilde;": "\u2240", + "VeryThinSpace;": "\u200a", + "Vfr;": "\U0001d519", + "Vopf;": "\U0001d54d", + "Vscr;": "\U0001d4b1", + "Vvdash;": "\u22aa", + "Wcirc;": "\u0174", + "Wedge;": "\u22c0", + "Wfr;": "\U0001d51a", + "Wopf;": "\U0001d54e", + "Wscr;": "\U0001d4b2", + "Xfr;": "\U0001d51b", + "Xi;": "\u039e", + "Xopf;": "\U0001d54f", + "Xscr;": "\U0001d4b3", + "YAcy;": "\u042f", + "YIcy;": "\u0407", + "YUcy;": "\u042e", + "Yacute": "\xdd", + "Yacute;": "\xdd", + "Ycirc;": "\u0176", + "Ycy;": "\u042b", + "Yfr;": "\U0001d51c", + "Yopf;": "\U0001d550", + "Yscr;": "\U0001d4b4", + "Yuml;": "\u0178", + "ZHcy;": "\u0416", + "Zacute;": "\u0179", + "Zcaron;": "\u017d", + "Zcy;": "\u0417", + "Zdot;": "\u017b", + "ZeroWidthSpace;": "\u200b", + "Zeta;": "\u0396", + "Zfr;": "\u2128", + "Zopf;": "\u2124", + "Zscr;": "\U0001d4b5", + "aacute": "\xe1", + "aacute;": "\xe1", + "abreve;": "\u0103", + "ac;": "\u223e", + "acE;": "\u223e\u0333", + "acd;": "\u223f", + "acirc": "\xe2", + "acirc;": "\xe2", + "acute": "\xb4", + "acute;": "\xb4", + "acy;": "\u0430", + "aelig": "\xe6", + "aelig;": "\xe6", + "af;": "\u2061", + "afr;": "\U0001d51e", + "agrave": "\xe0", + "agrave;": "\xe0", + "alefsym;": "\u2135", + "aleph;": "\u2135", + "alpha;": "\u03b1", + "amacr;": "\u0101", + "amalg;": "\u2a3f", + "amp": "&", + "amp;": "&", + "and;": "\u2227", + "andand;": "\u2a55", + "andd;": "\u2a5c", + "andslope;": "\u2a58", + "andv;": "\u2a5a", + "ang;": "\u2220", + "ange;": "\u29a4", + "angle;": "\u2220", + "angmsd;": "\u2221", + "angmsdaa;": "\u29a8", + "angmsdab;": "\u29a9", + "angmsdac;": "\u29aa", + "angmsdad;": "\u29ab", + "angmsdae;": "\u29ac", + "angmsdaf;": "\u29ad", + "angmsdag;": "\u29ae", + "angmsdah;": "\u29af", + "angrt;": "\u221f", + "angrtvb;": "\u22be", + "angrtvbd;": "\u299d", + "angsph;": "\u2222", + "angst;": "\xc5", + "angzarr;": "\u237c", + "aogon;": "\u0105", + "aopf;": "\U0001d552", + "ap;": "\u2248", + "apE;": "\u2a70", + "apacir;": "\u2a6f", + "ape;": "\u224a", + "apid;": "\u224b", + "apos;": "'", + "approx;": "\u2248", + "approxeq;": "\u224a", + "aring": "\xe5", + "aring;": "\xe5", + "ascr;": "\U0001d4b6", + "ast;": "*", + "asymp;": "\u2248", + "asympeq;": "\u224d", + "atilde": "\xe3", + "atilde;": "\xe3", + "auml": "\xe4", + "auml;": "\xe4", + "awconint;": "\u2233", + "awint;": "\u2a11", + "bNot;": "\u2aed", + "backcong;": "\u224c", + "backepsilon;": "\u03f6", + "backprime;": "\u2035", + "backsim;": "\u223d", + "backsimeq;": "\u22cd", + "barvee;": "\u22bd", + "barwed;": "\u2305", + "barwedge;": "\u2305", + "bbrk;": "\u23b5", + "bbrktbrk;": "\u23b6", + "bcong;": "\u224c", + "bcy;": "\u0431", + "bdquo;": "\u201e", + "becaus;": "\u2235", + "because;": "\u2235", + "bemptyv;": "\u29b0", + "bepsi;": "\u03f6", + "bernou;": "\u212c", + "beta;": "\u03b2", + "beth;": "\u2136", + "between;": "\u226c", + "bfr;": "\U0001d51f", + "bigcap;": "\u22c2", + "bigcirc;": "\u25ef", + "bigcup;": "\u22c3", + "bigodot;": "\u2a00", + "bigoplus;": "\u2a01", + "bigotimes;": "\u2a02", + "bigsqcup;": "\u2a06", + "bigstar;": "\u2605", + "bigtriangledown;": "\u25bd", + "bigtriangleup;": "\u25b3", + "biguplus;": "\u2a04", + "bigvee;": "\u22c1", + "bigwedge;": "\u22c0", + "bkarow;": "\u290d", + "blacklozenge;": "\u29eb", + "blacksquare;": "\u25aa", + "blacktriangle;": "\u25b4", + "blacktriangledown;": "\u25be", + "blacktriangleleft;": "\u25c2", + "blacktriangleright;": "\u25b8", + "blank;": "\u2423", + "blk12;": "\u2592", + "blk14;": "\u2591", + "blk34;": "\u2593", + "block;": "\u2588", + "bne;": "=\u20e5", + "bnequiv;": "\u2261\u20e5", + "bnot;": "\u2310", + "bopf;": "\U0001d553", + "bot;": "\u22a5", + "bottom;": "\u22a5", + "bowtie;": "\u22c8", + "boxDL;": "\u2557", + "boxDR;": "\u2554", + "boxDl;": "\u2556", + "boxDr;": "\u2553", + "boxH;": "\u2550", + "boxHD;": "\u2566", + "boxHU;": "\u2569", + "boxHd;": "\u2564", + "boxHu;": "\u2567", + "boxUL;": "\u255d", + "boxUR;": "\u255a", + "boxUl;": "\u255c", + "boxUr;": "\u2559", + "boxV;": "\u2551", + "boxVH;": "\u256c", + "boxVL;": "\u2563", + "boxVR;": "\u2560", + "boxVh;": "\u256b", + "boxVl;": "\u2562", + "boxVr;": "\u255f", + "boxbox;": "\u29c9", + "boxdL;": "\u2555", + "boxdR;": "\u2552", + "boxdl;": "\u2510", + "boxdr;": "\u250c", + "boxh;": "\u2500", + "boxhD;": "\u2565", + "boxhU;": "\u2568", + "boxhd;": "\u252c", + "boxhu;": "\u2534", + "boxminus;": "\u229f", + "boxplus;": "\u229e", + "boxtimes;": "\u22a0", + "boxuL;": "\u255b", + "boxuR;": "\u2558", + "boxul;": "\u2518", + "boxur;": "\u2514", + "boxv;": "\u2502", + "boxvH;": "\u256a", + "boxvL;": "\u2561", + "boxvR;": "\u255e", + "boxvh;": "\u253c", + "boxvl;": "\u2524", + "boxvr;": "\u251c", + "bprime;": "\u2035", + "breve;": "\u02d8", + "brvbar": "\xa6", + "brvbar;": "\xa6", + "bscr;": "\U0001d4b7", + "bsemi;": "\u204f", + "bsim;": "\u223d", + "bsime;": "\u22cd", + "bsol;": "\\", + "bsolb;": "\u29c5", + "bsolhsub;": "\u27c8", + "bull;": "\u2022", + "bullet;": "\u2022", + "bump;": "\u224e", + "bumpE;": "\u2aae", + "bumpe;": "\u224f", + "bumpeq;": "\u224f", + "cacute;": "\u0107", + "cap;": "\u2229", + "capand;": "\u2a44", + "capbrcup;": "\u2a49", + "capcap;": "\u2a4b", + "capcup;": "\u2a47", + "capdot;": "\u2a40", + "caps;": "\u2229\ufe00", + "caret;": "\u2041", + "caron;": "\u02c7", + "ccaps;": "\u2a4d", + "ccaron;": "\u010d", + "ccedil": "\xe7", + "ccedil;": "\xe7", + "ccirc;": "\u0109", + "ccups;": "\u2a4c", + "ccupssm;": "\u2a50", + "cdot;": "\u010b", + "cedil": "\xb8", + "cedil;": "\xb8", + "cemptyv;": "\u29b2", + "cent": "\xa2", + "cent;": "\xa2", + "centerdot;": "\xb7", + "cfr;": "\U0001d520", + "chcy;": "\u0447", + "check;": "\u2713", + "checkmark;": "\u2713", + "chi;": "\u03c7", + "cir;": "\u25cb", + "cirE;": "\u29c3", + "circ;": "\u02c6", + "circeq;": "\u2257", + "circlearrowleft;": "\u21ba", + "circlearrowright;": "\u21bb", + "circledR;": "\xae", + "circledS;": "\u24c8", + "circledast;": "\u229b", + "circledcirc;": "\u229a", + "circleddash;": "\u229d", + "cire;": "\u2257", + "cirfnint;": "\u2a10", + "cirmid;": "\u2aef", + "cirscir;": "\u29c2", + "clubs;": "\u2663", + "clubsuit;": "\u2663", + "colon;": ":", + "colone;": "\u2254", + "coloneq;": "\u2254", + "comma;": ",", + "commat;": "@", + "comp;": "\u2201", + "compfn;": "\u2218", + "complement;": "\u2201", + "complexes;": "\u2102", + "cong;": "\u2245", + "congdot;": "\u2a6d", + "conint;": "\u222e", + "copf;": "\U0001d554", + "coprod;": "\u2210", + "copy": "\xa9", + "copy;": "\xa9", + "copysr;": "\u2117", + "crarr;": "\u21b5", + "cross;": "\u2717", + "cscr;": "\U0001d4b8", + "csub;": "\u2acf", + "csube;": "\u2ad1", + "csup;": "\u2ad0", + "csupe;": "\u2ad2", + "ctdot;": "\u22ef", + "cudarrl;": "\u2938", + "cudarrr;": "\u2935", + "cuepr;": "\u22de", + "cuesc;": "\u22df", + "cularr;": "\u21b6", + "cularrp;": "\u293d", + "cup;": "\u222a", + "cupbrcap;": "\u2a48", + "cupcap;": "\u2a46", + "cupcup;": "\u2a4a", + "cupdot;": "\u228d", + "cupor;": "\u2a45", + "cups;": "\u222a\ufe00", + "curarr;": "\u21b7", + "curarrm;": "\u293c", + "curlyeqprec;": "\u22de", + "curlyeqsucc;": "\u22df", + "curlyvee;": "\u22ce", + "curlywedge;": "\u22cf", + "curren": "\xa4", + "curren;": "\xa4", + "curvearrowleft;": "\u21b6", + "curvearrowright;": "\u21b7", + "cuvee;": "\u22ce", + "cuwed;": "\u22cf", + "cwconint;": "\u2232", + "cwint;": "\u2231", + "cylcty;": "\u232d", + "dArr;": "\u21d3", + "dHar;": "\u2965", + "dagger;": "\u2020", + "daleth;": "\u2138", + "darr;": "\u2193", + "dash;": "\u2010", + "dashv;": "\u22a3", + "dbkarow;": "\u290f", + "dblac;": "\u02dd", + "dcaron;": "\u010f", + "dcy;": "\u0434", + "dd;": "\u2146", + "ddagger;": "\u2021", + "ddarr;": "\u21ca", + "ddotseq;": "\u2a77", + "deg": "\xb0", + "deg;": "\xb0", + "delta;": "\u03b4", + "demptyv;": "\u29b1", + "dfisht;": "\u297f", + "dfr;": "\U0001d521", + "dharl;": "\u21c3", + "dharr;": "\u21c2", + "diam;": "\u22c4", + "diamond;": "\u22c4", + "diamondsuit;": "\u2666", + "diams;": "\u2666", + "die;": "\xa8", + "digamma;": "\u03dd", + "disin;": "\u22f2", + "div;": "\xf7", + "divide": "\xf7", + "divide;": "\xf7", + "divideontimes;": "\u22c7", + "divonx;": "\u22c7", + "djcy;": "\u0452", + "dlcorn;": "\u231e", + "dlcrop;": "\u230d", + "dollar;": "$", + "dopf;": "\U0001d555", + "dot;": "\u02d9", + "doteq;": "\u2250", + "doteqdot;": "\u2251", + "dotminus;": "\u2238", + "dotplus;": "\u2214", + "dotsquare;": "\u22a1", + "doublebarwedge;": "\u2306", + "downarrow;": "\u2193", + "downdownarrows;": "\u21ca", + "downharpoonleft;": "\u21c3", + "downharpoonright;": "\u21c2", + "drbkarow;": "\u2910", + "drcorn;": "\u231f", + "drcrop;": "\u230c", + "dscr;": "\U0001d4b9", + "dscy;": "\u0455", + "dsol;": "\u29f6", + "dstrok;": "\u0111", + "dtdot;": "\u22f1", + "dtri;": "\u25bf", + "dtrif;": "\u25be", + "duarr;": "\u21f5", + "duhar;": "\u296f", + "dwangle;": "\u29a6", + "dzcy;": "\u045f", + "dzigrarr;": "\u27ff", + "eDDot;": "\u2a77", + "eDot;": "\u2251", + "eacute": "\xe9", + "eacute;": "\xe9", + "easter;": "\u2a6e", + "ecaron;": "\u011b", + "ecir;": "\u2256", + "ecirc": "\xea", + "ecirc;": "\xea", + "ecolon;": "\u2255", + "ecy;": "\u044d", + "edot;": "\u0117", + "ee;": "\u2147", + "efDot;": "\u2252", + "efr;": "\U0001d522", + "eg;": "\u2a9a", + "egrave": "\xe8", + "egrave;": "\xe8", + "egs;": "\u2a96", + "egsdot;": "\u2a98", + "el;": "\u2a99", + "elinters;": "\u23e7", + "ell;": "\u2113", + "els;": "\u2a95", + "elsdot;": "\u2a97", + "emacr;": "\u0113", + "empty;": "\u2205", + "emptyset;": "\u2205", + "emptyv;": "\u2205", + "emsp13;": "\u2004", + "emsp14;": "\u2005", + "emsp;": "\u2003", + "eng;": "\u014b", + "ensp;": "\u2002", + "eogon;": "\u0119", + "eopf;": "\U0001d556", + "epar;": "\u22d5", + "eparsl;": "\u29e3", + "eplus;": "\u2a71", + "epsi;": "\u03b5", + "epsilon;": "\u03b5", + "epsiv;": "\u03f5", + "eqcirc;": "\u2256", + "eqcolon;": "\u2255", + "eqsim;": "\u2242", + "eqslantgtr;": "\u2a96", + "eqslantless;": "\u2a95", + "equals;": "=", + "equest;": "\u225f", + "equiv;": "\u2261", + "equivDD;": "\u2a78", + "eqvparsl;": "\u29e5", + "erDot;": "\u2253", + "erarr;": "\u2971", + "escr;": "\u212f", + "esdot;": "\u2250", + "esim;": "\u2242", + "eta;": "\u03b7", + "eth": "\xf0", + "eth;": "\xf0", + "euml": "\xeb", + "euml;": "\xeb", + "euro;": "\u20ac", + "excl;": "!", + "exist;": "\u2203", + "expectation;": "\u2130", + "exponentiale;": "\u2147", + "fallingdotseq;": "\u2252", + "fcy;": "\u0444", + "female;": "\u2640", + "ffilig;": "\ufb03", + "fflig;": "\ufb00", + "ffllig;": "\ufb04", + "ffr;": "\U0001d523", + "filig;": "\ufb01", + "fjlig;": "fj", + "flat;": "\u266d", + "fllig;": "\ufb02", + "fltns;": "\u25b1", + "fnof;": "\u0192", + "fopf;": "\U0001d557", + "forall;": "\u2200", + "fork;": "\u22d4", + "forkv;": "\u2ad9", + "fpartint;": "\u2a0d", + "frac12": "\xbd", + "frac12;": "\xbd", + "frac13;": "\u2153", + "frac14": "\xbc", + "frac14;": "\xbc", + "frac15;": "\u2155", + "frac16;": "\u2159", + "frac18;": "\u215b", + "frac23;": "\u2154", + "frac25;": "\u2156", + "frac34": "\xbe", + "frac34;": "\xbe", + "frac35;": "\u2157", + "frac38;": "\u215c", + "frac45;": "\u2158", + "frac56;": "\u215a", + "frac58;": "\u215d", + "frac78;": "\u215e", + "frasl;": "\u2044", + "frown;": "\u2322", + "fscr;": "\U0001d4bb", + "gE;": "\u2267", + "gEl;": "\u2a8c", + "gacute;": "\u01f5", + "gamma;": "\u03b3", + "gammad;": "\u03dd", + "gap;": "\u2a86", + "gbreve;": "\u011f", + "gcirc;": "\u011d", + "gcy;": "\u0433", + "gdot;": "\u0121", + "ge;": "\u2265", + "gel;": "\u22db", + "geq;": "\u2265", + "geqq;": "\u2267", + "geqslant;": "\u2a7e", + "ges;": "\u2a7e", + "gescc;": "\u2aa9", + "gesdot;": "\u2a80", + "gesdoto;": "\u2a82", + "gesdotol;": "\u2a84", + "gesl;": "\u22db\ufe00", + "gesles;": "\u2a94", + "gfr;": "\U0001d524", + "gg;": "\u226b", + "ggg;": "\u22d9", + "gimel;": "\u2137", + "gjcy;": "\u0453", + "gl;": "\u2277", + "glE;": "\u2a92", + "gla;": "\u2aa5", + "glj;": "\u2aa4", + "gnE;": "\u2269", + "gnap;": "\u2a8a", + "gnapprox;": "\u2a8a", + "gne;": "\u2a88", + "gneq;": "\u2a88", + "gneqq;": "\u2269", + "gnsim;": "\u22e7", + "gopf;": "\U0001d558", + "grave;": "`", + "gscr;": "\u210a", + "gsim;": "\u2273", + "gsime;": "\u2a8e", + "gsiml;": "\u2a90", + "gt": ">", + "gt;": ">", + "gtcc;": "\u2aa7", + "gtcir;": "\u2a7a", + "gtdot;": "\u22d7", + "gtlPar;": "\u2995", + "gtquest;": "\u2a7c", + "gtrapprox;": "\u2a86", + "gtrarr;": "\u2978", + "gtrdot;": "\u22d7", + "gtreqless;": "\u22db", + "gtreqqless;": "\u2a8c", + "gtrless;": "\u2277", + "gtrsim;": "\u2273", + "gvertneqq;": "\u2269\ufe00", + "gvnE;": "\u2269\ufe00", + "hArr;": "\u21d4", + "hairsp;": "\u200a", + "half;": "\xbd", + "hamilt;": "\u210b", + "hardcy;": "\u044a", + "harr;": "\u2194", + "harrcir;": "\u2948", + "harrw;": "\u21ad", + "hbar;": "\u210f", + "hcirc;": "\u0125", + "hearts;": "\u2665", + "heartsuit;": "\u2665", + "hellip;": "\u2026", + "hercon;": "\u22b9", + "hfr;": "\U0001d525", + "hksearow;": "\u2925", + "hkswarow;": "\u2926", + "hoarr;": "\u21ff", + "homtht;": "\u223b", + "hookleftarrow;": "\u21a9", + "hookrightarrow;": "\u21aa", + "hopf;": "\U0001d559", + "horbar;": "\u2015", + "hscr;": "\U0001d4bd", + "hslash;": "\u210f", + "hstrok;": "\u0127", + "hybull;": "\u2043", + "hyphen;": "\u2010", + "iacute": "\xed", + "iacute;": "\xed", + "ic;": "\u2063", + "icirc": "\xee", + "icirc;": "\xee", + "icy;": "\u0438", + "iecy;": "\u0435", + "iexcl": "\xa1", + "iexcl;": "\xa1", + "iff;": "\u21d4", + "ifr;": "\U0001d526", + "igrave": "\xec", + "igrave;": "\xec", + "ii;": "\u2148", + "iiiint;": "\u2a0c", + "iiint;": "\u222d", + "iinfin;": "\u29dc", + "iiota;": "\u2129", + "ijlig;": "\u0133", + "imacr;": "\u012b", + "image;": "\u2111", + "imagline;": "\u2110", + "imagpart;": "\u2111", + "imath;": "\u0131", + "imof;": "\u22b7", + "imped;": "\u01b5", + "in;": "\u2208", + "incare;": "\u2105", + "infin;": "\u221e", + "infintie;": "\u29dd", + "inodot;": "\u0131", + "int;": "\u222b", + "intcal;": "\u22ba", + "integers;": "\u2124", + "intercal;": "\u22ba", + "intlarhk;": "\u2a17", + "intprod;": "\u2a3c", + "iocy;": "\u0451", + "iogon;": "\u012f", + "iopf;": "\U0001d55a", + "iota;": "\u03b9", + "iprod;": "\u2a3c", + "iquest": "\xbf", + "iquest;": "\xbf", + "iscr;": "\U0001d4be", + "isin;": "\u2208", + "isinE;": "\u22f9", + "isindot;": "\u22f5", + "isins;": "\u22f4", + "isinsv;": "\u22f3", + "isinv;": "\u2208", + "it;": "\u2062", + "itilde;": "\u0129", + "iukcy;": "\u0456", + "iuml": "\xef", + "iuml;": "\xef", + "jcirc;": "\u0135", + "jcy;": "\u0439", + "jfr;": "\U0001d527", + "jmath;": "\u0237", + "jopf;": "\U0001d55b", + "jscr;": "\U0001d4bf", + "jsercy;": "\u0458", + "jukcy;": "\u0454", + "kappa;": "\u03ba", + "kappav;": "\u03f0", + "kcedil;": "\u0137", + "kcy;": "\u043a", + "kfr;": "\U0001d528", + "kgreen;": "\u0138", + "khcy;": "\u0445", + "kjcy;": "\u045c", + "kopf;": "\U0001d55c", + "kscr;": "\U0001d4c0", + "lAarr;": "\u21da", + "lArr;": "\u21d0", + "lAtail;": "\u291b", + "lBarr;": "\u290e", + "lE;": "\u2266", + "lEg;": "\u2a8b", + "lHar;": "\u2962", + "lacute;": "\u013a", + "laemptyv;": "\u29b4", + "lagran;": "\u2112", + "lambda;": "\u03bb", + "lang;": "\u27e8", + "langd;": "\u2991", + "langle;": "\u27e8", + "lap;": "\u2a85", + "laquo": "\xab", + "laquo;": "\xab", + "larr;": "\u2190", + "larrb;": "\u21e4", + "larrbfs;": "\u291f", + "larrfs;": "\u291d", + "larrhk;": "\u21a9", + "larrlp;": "\u21ab", + "larrpl;": "\u2939", + "larrsim;": "\u2973", + "larrtl;": "\u21a2", + "lat;": "\u2aab", + "latail;": "\u2919", + "late;": "\u2aad", + "lates;": "\u2aad\ufe00", + "lbarr;": "\u290c", + "lbbrk;": "\u2772", + "lbrace;": "{", + "lbrack;": "[", + "lbrke;": "\u298b", + "lbrksld;": "\u298f", + "lbrkslu;": "\u298d", + "lcaron;": "\u013e", + "lcedil;": "\u013c", + "lceil;": "\u2308", + "lcub;": "{", + "lcy;": "\u043b", + "ldca;": "\u2936", + "ldquo;": "\u201c", + "ldquor;": "\u201e", + "ldrdhar;": "\u2967", + "ldrushar;": "\u294b", + "ldsh;": "\u21b2", + "le;": "\u2264", + "leftarrow;": "\u2190", + "leftarrowtail;": "\u21a2", + "leftharpoondown;": "\u21bd", + "leftharpoonup;": "\u21bc", + "leftleftarrows;": "\u21c7", + "leftrightarrow;": "\u2194", + "leftrightarrows;": "\u21c6", + "leftrightharpoons;": "\u21cb", + "leftrightsquigarrow;": "\u21ad", + "leftthreetimes;": "\u22cb", + "leg;": "\u22da", + "leq;": "\u2264", + "leqq;": "\u2266", + "leqslant;": "\u2a7d", + "les;": "\u2a7d", + "lescc;": "\u2aa8", + "lesdot;": "\u2a7f", + "lesdoto;": "\u2a81", + "lesdotor;": "\u2a83", + "lesg;": "\u22da\ufe00", + "lesges;": "\u2a93", + "lessapprox;": "\u2a85", + "lessdot;": "\u22d6", + "lesseqgtr;": "\u22da", + "lesseqqgtr;": "\u2a8b", + "lessgtr;": "\u2276", + "lesssim;": "\u2272", + "lfisht;": "\u297c", + "lfloor;": "\u230a", + "lfr;": "\U0001d529", + "lg;": "\u2276", + "lgE;": "\u2a91", + "lhard;": "\u21bd", + "lharu;": "\u21bc", + "lharul;": "\u296a", + "lhblk;": "\u2584", + "ljcy;": "\u0459", + "ll;": "\u226a", + "llarr;": "\u21c7", + "llcorner;": "\u231e", + "llhard;": "\u296b", + "lltri;": "\u25fa", + "lmidot;": "\u0140", + "lmoust;": "\u23b0", + "lmoustache;": "\u23b0", + "lnE;": "\u2268", + "lnap;": "\u2a89", + "lnapprox;": "\u2a89", + "lne;": "\u2a87", + "lneq;": "\u2a87", + "lneqq;": "\u2268", + "lnsim;": "\u22e6", + "loang;": "\u27ec", + "loarr;": "\u21fd", + "lobrk;": "\u27e6", + "longleftarrow;": "\u27f5", + "longleftrightarrow;": "\u27f7", + "longmapsto;": "\u27fc", + "longrightarrow;": "\u27f6", + "looparrowleft;": "\u21ab", + "looparrowright;": "\u21ac", + "lopar;": "\u2985", + "lopf;": "\U0001d55d", + "loplus;": "\u2a2d", + "lotimes;": "\u2a34", + "lowast;": "\u2217", + "lowbar;": "_", + "loz;": "\u25ca", + "lozenge;": "\u25ca", + "lozf;": "\u29eb", + "lpar;": "(", + "lparlt;": "\u2993", + "lrarr;": "\u21c6", + "lrcorner;": "\u231f", + "lrhar;": "\u21cb", + "lrhard;": "\u296d", + "lrm;": "\u200e", + "lrtri;": "\u22bf", + "lsaquo;": "\u2039", + "lscr;": "\U0001d4c1", + "lsh;": "\u21b0", + "lsim;": "\u2272", + "lsime;": "\u2a8d", + "lsimg;": "\u2a8f", + "lsqb;": "[", + "lsquo;": "\u2018", + "lsquor;": "\u201a", + "lstrok;": "\u0142", + "lt": "<", + "lt;": "<", + "ltcc;": "\u2aa6", + "ltcir;": "\u2a79", + "ltdot;": "\u22d6", + "lthree;": "\u22cb", + "ltimes;": "\u22c9", + "ltlarr;": "\u2976", + "ltquest;": "\u2a7b", + "ltrPar;": "\u2996", + "ltri;": "\u25c3", + "ltrie;": "\u22b4", + "ltrif;": "\u25c2", + "lurdshar;": "\u294a", + "luruhar;": "\u2966", + "lvertneqq;": "\u2268\ufe00", + "lvnE;": "\u2268\ufe00", + "mDDot;": "\u223a", + "macr": "\xaf", + "macr;": "\xaf", + "male;": "\u2642", + "malt;": "\u2720", + "maltese;": "\u2720", + "map;": "\u21a6", + "mapsto;": "\u21a6", + "mapstodown;": "\u21a7", + "mapstoleft;": "\u21a4", + "mapstoup;": "\u21a5", + "marker;": "\u25ae", + "mcomma;": "\u2a29", + "mcy;": "\u043c", + "mdash;": "\u2014", + "measuredangle;": "\u2221", + "mfr;": "\U0001d52a", + "mho;": "\u2127", + "micro": "\xb5", + "micro;": "\xb5", + "mid;": "\u2223", + "midast;": "*", + "midcir;": "\u2af0", + "middot": "\xb7", + "middot;": "\xb7", + "minus;": "\u2212", + "minusb;": "\u229f", + "minusd;": "\u2238", + "minusdu;": "\u2a2a", + "mlcp;": "\u2adb", + "mldr;": "\u2026", + "mnplus;": "\u2213", + "models;": "\u22a7", + "mopf;": "\U0001d55e", + "mp;": "\u2213", + "mscr;": "\U0001d4c2", + "mstpos;": "\u223e", + "mu;": "\u03bc", + "multimap;": "\u22b8", + "mumap;": "\u22b8", + "nGg;": "\u22d9\u0338", + "nGt;": "\u226b\u20d2", + "nGtv;": "\u226b\u0338", + "nLeftarrow;": "\u21cd", + "nLeftrightarrow;": "\u21ce", + "nLl;": "\u22d8\u0338", + "nLt;": "\u226a\u20d2", + "nLtv;": "\u226a\u0338", + "nRightarrow;": "\u21cf", + "nVDash;": "\u22af", + "nVdash;": "\u22ae", + "nabla;": "\u2207", + "nacute;": "\u0144", + "nang;": "\u2220\u20d2", + "nap;": "\u2249", + "napE;": "\u2a70\u0338", + "napid;": "\u224b\u0338", + "napos;": "\u0149", + "napprox;": "\u2249", + "natur;": "\u266e", + "natural;": "\u266e", + "naturals;": "\u2115", + "nbsp": "\xa0", + "nbsp;": "\xa0", + "nbump;": "\u224e\u0338", + "nbumpe;": "\u224f\u0338", + "ncap;": "\u2a43", + "ncaron;": "\u0148", + "ncedil;": "\u0146", + "ncong;": "\u2247", + "ncongdot;": "\u2a6d\u0338", + "ncup;": "\u2a42", + "ncy;": "\u043d", + "ndash;": "\u2013", + "ne;": "\u2260", + "neArr;": "\u21d7", + "nearhk;": "\u2924", + "nearr;": "\u2197", + "nearrow;": "\u2197", + "nedot;": "\u2250\u0338", + "nequiv;": "\u2262", + "nesear;": "\u2928", + "nesim;": "\u2242\u0338", + "nexist;": "\u2204", + "nexists;": "\u2204", + "nfr;": "\U0001d52b", + "ngE;": "\u2267\u0338", + "nge;": "\u2271", + "ngeq;": "\u2271", + "ngeqq;": "\u2267\u0338", + "ngeqslant;": "\u2a7e\u0338", + "nges;": "\u2a7e\u0338", + "ngsim;": "\u2275", + "ngt;": "\u226f", + "ngtr;": "\u226f", + "nhArr;": "\u21ce", + "nharr;": "\u21ae", + "nhpar;": "\u2af2", + "ni;": "\u220b", + "nis;": "\u22fc", + "nisd;": "\u22fa", + "niv;": "\u220b", + "njcy;": "\u045a", + "nlArr;": "\u21cd", + "nlE;": "\u2266\u0338", + "nlarr;": "\u219a", + "nldr;": "\u2025", + "nle;": "\u2270", + "nleftarrow;": "\u219a", + "nleftrightarrow;": "\u21ae", + "nleq;": "\u2270", + "nleqq;": "\u2266\u0338", + "nleqslant;": "\u2a7d\u0338", + "nles;": "\u2a7d\u0338", + "nless;": "\u226e", + "nlsim;": "\u2274", + "nlt;": "\u226e", + "nltri;": "\u22ea", + "nltrie;": "\u22ec", + "nmid;": "\u2224", + "nopf;": "\U0001d55f", + "not": "\xac", + "not;": "\xac", + "notin;": "\u2209", + "notinE;": "\u22f9\u0338", + "notindot;": "\u22f5\u0338", + "notinva;": "\u2209", + "notinvb;": "\u22f7", + "notinvc;": "\u22f6", + "notni;": "\u220c", + "notniva;": "\u220c", + "notnivb;": "\u22fe", + "notnivc;": "\u22fd", + "npar;": "\u2226", + "nparallel;": "\u2226", + "nparsl;": "\u2afd\u20e5", + "npart;": "\u2202\u0338", + "npolint;": "\u2a14", + "npr;": "\u2280", + "nprcue;": "\u22e0", + "npre;": "\u2aaf\u0338", + "nprec;": "\u2280", + "npreceq;": "\u2aaf\u0338", + "nrArr;": "\u21cf", + "nrarr;": "\u219b", + "nrarrc;": "\u2933\u0338", + "nrarrw;": "\u219d\u0338", + "nrightarrow;": "\u219b", + "nrtri;": "\u22eb", + "nrtrie;": "\u22ed", + "nsc;": "\u2281", + "nsccue;": "\u22e1", + "nsce;": "\u2ab0\u0338", + "nscr;": "\U0001d4c3", + "nshortmid;": "\u2224", + "nshortparallel;": "\u2226", + "nsim;": "\u2241", + "nsime;": "\u2244", + "nsimeq;": "\u2244", + "nsmid;": "\u2224", + "nspar;": "\u2226", + "nsqsube;": "\u22e2", + "nsqsupe;": "\u22e3", + "nsub;": "\u2284", + "nsubE;": "\u2ac5\u0338", + "nsube;": "\u2288", + "nsubset;": "\u2282\u20d2", + "nsubseteq;": "\u2288", + "nsubseteqq;": "\u2ac5\u0338", + "nsucc;": "\u2281", + "nsucceq;": "\u2ab0\u0338", + "nsup;": "\u2285", + "nsupE;": "\u2ac6\u0338", + "nsupe;": "\u2289", + "nsupset;": "\u2283\u20d2", + "nsupseteq;": "\u2289", + "nsupseteqq;": "\u2ac6\u0338", + "ntgl;": "\u2279", + "ntilde": "\xf1", + "ntilde;": "\xf1", + "ntlg;": "\u2278", + "ntriangleleft;": "\u22ea", + "ntrianglelefteq;": "\u22ec", + "ntriangleright;": "\u22eb", + "ntrianglerighteq;": "\u22ed", + "nu;": "\u03bd", + "num;": "#", + "numero;": "\u2116", + "numsp;": "\u2007", + "nvDash;": "\u22ad", + "nvHarr;": "\u2904", + "nvap;": "\u224d\u20d2", + "nvdash;": "\u22ac", + "nvge;": "\u2265\u20d2", + "nvgt;": ">\u20d2", + "nvinfin;": "\u29de", + "nvlArr;": "\u2902", + "nvle;": "\u2264\u20d2", + "nvlt;": "<\u20d2", + "nvltrie;": "\u22b4\u20d2", + "nvrArr;": "\u2903", + "nvrtrie;": "\u22b5\u20d2", + "nvsim;": "\u223c\u20d2", + "nwArr;": "\u21d6", + "nwarhk;": "\u2923", + "nwarr;": "\u2196", + "nwarrow;": "\u2196", + "nwnear;": "\u2927", + "oS;": "\u24c8", + "oacute": "\xf3", + "oacute;": "\xf3", + "oast;": "\u229b", + "ocir;": "\u229a", + "ocirc": "\xf4", + "ocirc;": "\xf4", + "ocy;": "\u043e", + "odash;": "\u229d", + "odblac;": "\u0151", + "odiv;": "\u2a38", + "odot;": "\u2299", + "odsold;": "\u29bc", + "oelig;": "\u0153", + "ofcir;": "\u29bf", + "ofr;": "\U0001d52c", + "ogon;": "\u02db", + "ograve": "\xf2", + "ograve;": "\xf2", + "ogt;": "\u29c1", + "ohbar;": "\u29b5", + "ohm;": "\u03a9", + "oint;": "\u222e", + "olarr;": "\u21ba", + "olcir;": "\u29be", + "olcross;": "\u29bb", + "oline;": "\u203e", + "olt;": "\u29c0", + "omacr;": "\u014d", + "omega;": "\u03c9", + "omicron;": "\u03bf", + "omid;": "\u29b6", + "ominus;": "\u2296", + "oopf;": "\U0001d560", + "opar;": "\u29b7", + "operp;": "\u29b9", + "oplus;": "\u2295", + "or;": "\u2228", + "orarr;": "\u21bb", + "ord;": "\u2a5d", + "order;": "\u2134", + "orderof;": "\u2134", + "ordf": "\xaa", + "ordf;": "\xaa", + "ordm": "\xba", + "ordm;": "\xba", + "origof;": "\u22b6", + "oror;": "\u2a56", + "orslope;": "\u2a57", + "orv;": "\u2a5b", + "oscr;": "\u2134", + "oslash": "\xf8", + "oslash;": "\xf8", + "osol;": "\u2298", + "otilde": "\xf5", + "otilde;": "\xf5", + "otimes;": "\u2297", + "otimesas;": "\u2a36", + "ouml": "\xf6", + "ouml;": "\xf6", + "ovbar;": "\u233d", + "par;": "\u2225", + "para": "\xb6", + "para;": "\xb6", + "parallel;": "\u2225", + "parsim;": "\u2af3", + "parsl;": "\u2afd", + "part;": "\u2202", + "pcy;": "\u043f", + "percnt;": "%", + "period;": ".", + "permil;": "\u2030", + "perp;": "\u22a5", + "pertenk;": "\u2031", + "pfr;": "\U0001d52d", + "phi;": "\u03c6", + "phiv;": "\u03d5", + "phmmat;": "\u2133", + "phone;": "\u260e", + "pi;": "\u03c0", + "pitchfork;": "\u22d4", + "piv;": "\u03d6", + "planck;": "\u210f", + "planckh;": "\u210e", + "plankv;": "\u210f", + "plus;": "+", + "plusacir;": "\u2a23", + "plusb;": "\u229e", + "pluscir;": "\u2a22", + "plusdo;": "\u2214", + "plusdu;": "\u2a25", + "pluse;": "\u2a72", + "plusmn": "\xb1", + "plusmn;": "\xb1", + "plussim;": "\u2a26", + "plustwo;": "\u2a27", + "pm;": "\xb1", + "pointint;": "\u2a15", + "popf;": "\U0001d561", + "pound": "\xa3", + "pound;": "\xa3", + "pr;": "\u227a", + "prE;": "\u2ab3", + "prap;": "\u2ab7", + "prcue;": "\u227c", + "pre;": "\u2aaf", + "prec;": "\u227a", + "precapprox;": "\u2ab7", + "preccurlyeq;": "\u227c", + "preceq;": "\u2aaf", + "precnapprox;": "\u2ab9", + "precneqq;": "\u2ab5", + "precnsim;": "\u22e8", + "precsim;": "\u227e", + "prime;": "\u2032", + "primes;": "\u2119", + "prnE;": "\u2ab5", + "prnap;": "\u2ab9", + "prnsim;": "\u22e8", + "prod;": "\u220f", + "profalar;": "\u232e", + "profline;": "\u2312", + "profsurf;": "\u2313", + "prop;": "\u221d", + "propto;": "\u221d", + "prsim;": "\u227e", + "prurel;": "\u22b0", + "pscr;": "\U0001d4c5", + "psi;": "\u03c8", + "puncsp;": "\u2008", + "qfr;": "\U0001d52e", + "qint;": "\u2a0c", + "qopf;": "\U0001d562", + "qprime;": "\u2057", + "qscr;": "\U0001d4c6", + "quaternions;": "\u210d", + "quatint;": "\u2a16", + "quest;": "?", + "questeq;": "\u225f", + "quot": "\"", + "quot;": "\"", + "rAarr;": "\u21db", + "rArr;": "\u21d2", + "rAtail;": "\u291c", + "rBarr;": "\u290f", + "rHar;": "\u2964", + "race;": "\u223d\u0331", + "racute;": "\u0155", + "radic;": "\u221a", + "raemptyv;": "\u29b3", + "rang;": "\u27e9", + "rangd;": "\u2992", + "range;": "\u29a5", + "rangle;": "\u27e9", + "raquo": "\xbb", + "raquo;": "\xbb", + "rarr;": "\u2192", + "rarrap;": "\u2975", + "rarrb;": "\u21e5", + "rarrbfs;": "\u2920", + "rarrc;": "\u2933", + "rarrfs;": "\u291e", + "rarrhk;": "\u21aa", + "rarrlp;": "\u21ac", + "rarrpl;": "\u2945", + "rarrsim;": "\u2974", + "rarrtl;": "\u21a3", + "rarrw;": "\u219d", + "ratail;": "\u291a", + "ratio;": "\u2236", + "rationals;": "\u211a", + "rbarr;": "\u290d", + "rbbrk;": "\u2773", + "rbrace;": "}", + "rbrack;": "]", + "rbrke;": "\u298c", + "rbrksld;": "\u298e", + "rbrkslu;": "\u2990", + "rcaron;": "\u0159", + "rcedil;": "\u0157", + "rceil;": "\u2309", + "rcub;": "}", + "rcy;": "\u0440", + "rdca;": "\u2937", + "rdldhar;": "\u2969", + "rdquo;": "\u201d", + "rdquor;": "\u201d", + "rdsh;": "\u21b3", + "real;": "\u211c", + "realine;": "\u211b", + "realpart;": "\u211c", + "reals;": "\u211d", + "rect;": "\u25ad", + "reg": "\xae", + "reg;": "\xae", + "rfisht;": "\u297d", + "rfloor;": "\u230b", + "rfr;": "\U0001d52f", + "rhard;": "\u21c1", + "rharu;": "\u21c0", + "rharul;": "\u296c", + "rho;": "\u03c1", + "rhov;": "\u03f1", + "rightarrow;": "\u2192", + "rightarrowtail;": "\u21a3", + "rightharpoondown;": "\u21c1", + "rightharpoonup;": "\u21c0", + "rightleftarrows;": "\u21c4", + "rightleftharpoons;": "\u21cc", + "rightrightarrows;": "\u21c9", + "rightsquigarrow;": "\u219d", + "rightthreetimes;": "\u22cc", + "ring;": "\u02da", + "risingdotseq;": "\u2253", + "rlarr;": "\u21c4", + "rlhar;": "\u21cc", + "rlm;": "\u200f", + "rmoust;": "\u23b1", + "rmoustache;": "\u23b1", + "rnmid;": "\u2aee", + "roang;": "\u27ed", + "roarr;": "\u21fe", + "robrk;": "\u27e7", + "ropar;": "\u2986", + "ropf;": "\U0001d563", + "roplus;": "\u2a2e", + "rotimes;": "\u2a35", + "rpar;": ")", + "rpargt;": "\u2994", + "rppolint;": "\u2a12", + "rrarr;": "\u21c9", + "rsaquo;": "\u203a", + "rscr;": "\U0001d4c7", + "rsh;": "\u21b1", + "rsqb;": "]", + "rsquo;": "\u2019", + "rsquor;": "\u2019", + "rthree;": "\u22cc", + "rtimes;": "\u22ca", + "rtri;": "\u25b9", + "rtrie;": "\u22b5", + "rtrif;": "\u25b8", + "rtriltri;": "\u29ce", + "ruluhar;": "\u2968", + "rx;": "\u211e", + "sacute;": "\u015b", + "sbquo;": "\u201a", + "sc;": "\u227b", + "scE;": "\u2ab4", + "scap;": "\u2ab8", + "scaron;": "\u0161", + "sccue;": "\u227d", + "sce;": "\u2ab0", + "scedil;": "\u015f", + "scirc;": "\u015d", + "scnE;": "\u2ab6", + "scnap;": "\u2aba", + "scnsim;": "\u22e9", + "scpolint;": "\u2a13", + "scsim;": "\u227f", + "scy;": "\u0441", + "sdot;": "\u22c5", + "sdotb;": "\u22a1", + "sdote;": "\u2a66", + "seArr;": "\u21d8", + "searhk;": "\u2925", + "searr;": "\u2198", + "searrow;": "\u2198", + "sect": "\xa7", + "sect;": "\xa7", + "semi;": ";", + "seswar;": "\u2929", + "setminus;": "\u2216", + "setmn;": "\u2216", + "sext;": "\u2736", + "sfr;": "\U0001d530", + "sfrown;": "\u2322", + "sharp;": "\u266f", + "shchcy;": "\u0449", + "shcy;": "\u0448", + "shortmid;": "\u2223", + "shortparallel;": "\u2225", + "shy": "\xad", + "shy;": "\xad", + "sigma;": "\u03c3", + "sigmaf;": "\u03c2", + "sigmav;": "\u03c2", + "sim;": "\u223c", + "simdot;": "\u2a6a", + "sime;": "\u2243", + "simeq;": "\u2243", + "simg;": "\u2a9e", + "simgE;": "\u2aa0", + "siml;": "\u2a9d", + "simlE;": "\u2a9f", + "simne;": "\u2246", + "simplus;": "\u2a24", + "simrarr;": "\u2972", + "slarr;": "\u2190", + "smallsetminus;": "\u2216", + "smashp;": "\u2a33", + "smeparsl;": "\u29e4", + "smid;": "\u2223", + "smile;": "\u2323", + "smt;": "\u2aaa", + "smte;": "\u2aac", + "smtes;": "\u2aac\ufe00", + "softcy;": "\u044c", + "sol;": "/", + "solb;": "\u29c4", + "solbar;": "\u233f", + "sopf;": "\U0001d564", + "spades;": "\u2660", + "spadesuit;": "\u2660", + "spar;": "\u2225", + "sqcap;": "\u2293", + "sqcaps;": "\u2293\ufe00", + "sqcup;": "\u2294", + "sqcups;": "\u2294\ufe00", + "sqsub;": "\u228f", + "sqsube;": "\u2291", + "sqsubset;": "\u228f", + "sqsubseteq;": "\u2291", + "sqsup;": "\u2290", + "sqsupe;": "\u2292", + "sqsupset;": "\u2290", + "sqsupseteq;": "\u2292", + "squ;": "\u25a1", + "square;": "\u25a1", + "squarf;": "\u25aa", + "squf;": "\u25aa", + "srarr;": "\u2192", + "sscr;": "\U0001d4c8", + "ssetmn;": "\u2216", + "ssmile;": "\u2323", + "sstarf;": "\u22c6", + "star;": "\u2606", + "starf;": "\u2605", + "straightepsilon;": "\u03f5", + "straightphi;": "\u03d5", + "strns;": "\xaf", + "sub;": "\u2282", + "subE;": "\u2ac5", + "subdot;": "\u2abd", + "sube;": "\u2286", + "subedot;": "\u2ac3", + "submult;": "\u2ac1", + "subnE;": "\u2acb", + "subne;": "\u228a", + "subplus;": "\u2abf", + "subrarr;": "\u2979", + "subset;": "\u2282", + "subseteq;": "\u2286", + "subseteqq;": "\u2ac5", + "subsetneq;": "\u228a", + "subsetneqq;": "\u2acb", + "subsim;": "\u2ac7", + "subsub;": "\u2ad5", + "subsup;": "\u2ad3", + "succ;": "\u227b", + "succapprox;": "\u2ab8", + "succcurlyeq;": "\u227d", + "succeq;": "\u2ab0", + "succnapprox;": "\u2aba", + "succneqq;": "\u2ab6", + "succnsim;": "\u22e9", + "succsim;": "\u227f", + "sum;": "\u2211", + "sung;": "\u266a", + "sup1": "\xb9", + "sup1;": "\xb9", + "sup2": "\xb2", + "sup2;": "\xb2", + "sup3": "\xb3", + "sup3;": "\xb3", + "sup;": "\u2283", + "supE;": "\u2ac6", + "supdot;": "\u2abe", + "supdsub;": "\u2ad8", + "supe;": "\u2287", + "supedot;": "\u2ac4", + "suphsol;": "\u27c9", + "suphsub;": "\u2ad7", + "suplarr;": "\u297b", + "supmult;": "\u2ac2", + "supnE;": "\u2acc", + "supne;": "\u228b", + "supplus;": "\u2ac0", + "supset;": "\u2283", + "supseteq;": "\u2287", + "supseteqq;": "\u2ac6", + "supsetneq;": "\u228b", + "supsetneqq;": "\u2acc", + "supsim;": "\u2ac8", + "supsub;": "\u2ad4", + "supsup;": "\u2ad6", + "swArr;": "\u21d9", + "swarhk;": "\u2926", + "swarr;": "\u2199", + "swarrow;": "\u2199", + "swnwar;": "\u292a", + "szlig": "\xdf", + "szlig;": "\xdf", + "target;": "\u2316", + "tau;": "\u03c4", + "tbrk;": "\u23b4", + "tcaron;": "\u0165", + "tcedil;": "\u0163", + "tcy;": "\u0442", + "tdot;": "\u20db", + "telrec;": "\u2315", + "tfr;": "\U0001d531", + "there4;": "\u2234", + "therefore;": "\u2234", + "theta;": "\u03b8", + "thetasym;": "\u03d1", + "thetav;": "\u03d1", + "thickapprox;": "\u2248", + "thicksim;": "\u223c", + "thinsp;": "\u2009", + "thkap;": "\u2248", + "thksim;": "\u223c", + "thorn": "\xfe", + "thorn;": "\xfe", + "tilde;": "\u02dc", + "times": "\xd7", + "times;": "\xd7", + "timesb;": "\u22a0", + "timesbar;": "\u2a31", + "timesd;": "\u2a30", + "tint;": "\u222d", + "toea;": "\u2928", + "top;": "\u22a4", + "topbot;": "\u2336", + "topcir;": "\u2af1", + "topf;": "\U0001d565", + "topfork;": "\u2ada", + "tosa;": "\u2929", + "tprime;": "\u2034", + "trade;": "\u2122", + "triangle;": "\u25b5", + "triangledown;": "\u25bf", + "triangleleft;": "\u25c3", + "trianglelefteq;": "\u22b4", + "triangleq;": "\u225c", + "triangleright;": "\u25b9", + "trianglerighteq;": "\u22b5", + "tridot;": "\u25ec", + "trie;": "\u225c", + "triminus;": "\u2a3a", + "triplus;": "\u2a39", + "trisb;": "\u29cd", + "tritime;": "\u2a3b", + "trpezium;": "\u23e2", + "tscr;": "\U0001d4c9", + "tscy;": "\u0446", + "tshcy;": "\u045b", + "tstrok;": "\u0167", + "twixt;": "\u226c", + "twoheadleftarrow;": "\u219e", + "twoheadrightarrow;": "\u21a0", + "uArr;": "\u21d1", + "uHar;": "\u2963", + "uacute": "\xfa", + "uacute;": "\xfa", + "uarr;": "\u2191", + "ubrcy;": "\u045e", + "ubreve;": "\u016d", + "ucirc": "\xfb", + "ucirc;": "\xfb", + "ucy;": "\u0443", + "udarr;": "\u21c5", + "udblac;": "\u0171", + "udhar;": "\u296e", + "ufisht;": "\u297e", + "ufr;": "\U0001d532", + "ugrave": "\xf9", + "ugrave;": "\xf9", + "uharl;": "\u21bf", + "uharr;": "\u21be", + "uhblk;": "\u2580", + "ulcorn;": "\u231c", + "ulcorner;": "\u231c", + "ulcrop;": "\u230f", + "ultri;": "\u25f8", + "umacr;": "\u016b", + "uml": "\xa8", + "uml;": "\xa8", + "uogon;": "\u0173", + "uopf;": "\U0001d566", + "uparrow;": "\u2191", + "updownarrow;": "\u2195", + "upharpoonleft;": "\u21bf", + "upharpoonright;": "\u21be", + "uplus;": "\u228e", + "upsi;": "\u03c5", + "upsih;": "\u03d2", + "upsilon;": "\u03c5", + "upuparrows;": "\u21c8", + "urcorn;": "\u231d", + "urcorner;": "\u231d", + "urcrop;": "\u230e", + "uring;": "\u016f", + "urtri;": "\u25f9", + "uscr;": "\U0001d4ca", + "utdot;": "\u22f0", + "utilde;": "\u0169", + "utri;": "\u25b5", + "utrif;": "\u25b4", + "uuarr;": "\u21c8", + "uuml": "\xfc", + "uuml;": "\xfc", + "uwangle;": "\u29a7", + "vArr;": "\u21d5", + "vBar;": "\u2ae8", + "vBarv;": "\u2ae9", + "vDash;": "\u22a8", + "vangrt;": "\u299c", + "varepsilon;": "\u03f5", + "varkappa;": "\u03f0", + "varnothing;": "\u2205", + "varphi;": "\u03d5", + "varpi;": "\u03d6", + "varpropto;": "\u221d", + "varr;": "\u2195", + "varrho;": "\u03f1", + "varsigma;": "\u03c2", + "varsubsetneq;": "\u228a\ufe00", + "varsubsetneqq;": "\u2acb\ufe00", + "varsupsetneq;": "\u228b\ufe00", + "varsupsetneqq;": "\u2acc\ufe00", + "vartheta;": "\u03d1", + "vartriangleleft;": "\u22b2", + "vartriangleright;": "\u22b3", + "vcy;": "\u0432", + "vdash;": "\u22a2", + "vee;": "\u2228", + "veebar;": "\u22bb", + "veeeq;": "\u225a", + "vellip;": "\u22ee", + "verbar;": "|", + "vert;": "|", + "vfr;": "\U0001d533", + "vltri;": "\u22b2", + "vnsub;": "\u2282\u20d2", + "vnsup;": "\u2283\u20d2", + "vopf;": "\U0001d567", + "vprop;": "\u221d", + "vrtri;": "\u22b3", + "vscr;": "\U0001d4cb", + "vsubnE;": "\u2acb\ufe00", + "vsubne;": "\u228a\ufe00", + "vsupnE;": "\u2acc\ufe00", + "vsupne;": "\u228b\ufe00", + "vzigzag;": "\u299a", + "wcirc;": "\u0175", + "wedbar;": "\u2a5f", + "wedge;": "\u2227", + "wedgeq;": "\u2259", + "weierp;": "\u2118", + "wfr;": "\U0001d534", + "wopf;": "\U0001d568", + "wp;": "\u2118", + "wr;": "\u2240", + "wreath;": "\u2240", + "wscr;": "\U0001d4cc", + "xcap;": "\u22c2", + "xcirc;": "\u25ef", + "xcup;": "\u22c3", + "xdtri;": "\u25bd", + "xfr;": "\U0001d535", + "xhArr;": "\u27fa", + "xharr;": "\u27f7", + "xi;": "\u03be", + "xlArr;": "\u27f8", + "xlarr;": "\u27f5", + "xmap;": "\u27fc", + "xnis;": "\u22fb", + "xodot;": "\u2a00", + "xopf;": "\U0001d569", + "xoplus;": "\u2a01", + "xotime;": "\u2a02", + "xrArr;": "\u27f9", + "xrarr;": "\u27f6", + "xscr;": "\U0001d4cd", + "xsqcup;": "\u2a06", + "xuplus;": "\u2a04", + "xutri;": "\u25b3", + "xvee;": "\u22c1", + "xwedge;": "\u22c0", + "yacute": "\xfd", + "yacute;": "\xfd", + "yacy;": "\u044f", + "ycirc;": "\u0177", + "ycy;": "\u044b", + "yen": "\xa5", + "yen;": "\xa5", + "yfr;": "\U0001d536", + "yicy;": "\u0457", + "yopf;": "\U0001d56a", + "yscr;": "\U0001d4ce", + "yucy;": "\u044e", + "yuml": "\xff", + "yuml;": "\xff", + "zacute;": "\u017a", + "zcaron;": "\u017e", + "zcy;": "\u0437", + "zdot;": "\u017c", + "zeetrf;": "\u2128", + "zeta;": "\u03b6", + "zfr;": "\U0001d537", + "zhcy;": "\u0436", + "zigrarr;": "\u21dd", + "zopf;": "\U0001d56b", + "zscr;": "\U0001d4cf", + "zwj;": "\u200d", + "zwnj;": "\u200c", +} + +replacementCharacters = { + 0x0: "\uFFFD", + 0x0d: "\u000D", + 0x80: "\u20AC", + 0x81: "\u0081", + 0x82: "\u201A", + 0x83: "\u0192", + 0x84: "\u201E", + 0x85: "\u2026", + 0x86: "\u2020", + 0x87: "\u2021", + 0x88: "\u02C6", + 0x89: "\u2030", + 0x8A: "\u0160", + 0x8B: "\u2039", + 0x8C: "\u0152", + 0x8D: "\u008D", + 0x8E: "\u017D", + 0x8F: "\u008F", + 0x90: "\u0090", + 0x91: "\u2018", + 0x92: "\u2019", + 0x93: "\u201C", + 0x94: "\u201D", + 0x95: "\u2022", + 0x96: "\u2013", + 0x97: "\u2014", + 0x98: "\u02DC", + 0x99: "\u2122", + 0x9A: "\u0161", + 0x9B: "\u203A", + 0x9C: "\u0153", + 0x9D: "\u009D", + 0x9E: "\u017E", + 0x9F: "\u0178", +} + +tokenTypes = { + "Doctype": 0, + "Characters": 1, + "SpaceCharacters": 2, + "StartTag": 3, + "EndTag": 4, + "EmptyTag": 5, + "Comment": 6, + "ParseError": 7 +} + +tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], + tokenTypes["EmptyTag"]]) + + +prefixes = {v: k for k, v in namespaces.items()} +prefixes["http://www.w3.org/1998/Math/MathML"] = "math" + + +class DataLossWarning(UserWarning): + """Raised when the current tree is unable to represent the input data""" + pass + + +class _ReparseException(Exception): + pass diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bcb92b24121850cd06fb039da4730477e1f557f GIT binary patch literal 202 zcmd1j<>g`kf*o;plR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_+vsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOhIOWemqbvCBH~Nqa-)SG$%7jKP@w-1Zc2+e0*kJW=VX!UP0w84x8Nk Rl+v73JCHMqnScZf0|2OLH=FcXqvQ0%=17KIqUA78?81OEDoKZW2myOVSS*rWtETTCePx(OA-K zSa%I6$+hQRlVksb{w;!@ddi=WUfTC$yGfv8-jkl*=>6W8q&GLm1jZjv{+#_56Y>`d z?~Vk7J3#g;V1fu*lZNKBiSnq4^OzD5iMURhG*4koL{bl$VLpU)Dh4k|o;@I9D6$ts zWHLP(J&*H|7(FJ_@oTV0rm?@mXI9s}lcj1pZJf`9S}Ln_>#z2$s$D`DRF#t3Po*i)6OPy|4Rqf$;%wXKTR9Uv*OUXEEc_VGdE6Ln~J63_& znPgJAg*5EoU|+ZL;DDiFX2EQGxXpf)!4~{_6AtL6;|5OyJ=Jiy;=K*>>L%<9HJ?M= ztz&N0N&6YInmv_ptX)duf}#IVoJRL$)4A0J7@I3&-S)Zj22; zrot2=)w55q$~m^os70pFTaKYZ}@tS`ssL@pEz(xdis0(O#ynh#QFH*9iX1 zis&ppOV-IcTF1NOWD92aYnQC)4}_AFp&;n%zE7~e)5vF!9XIYfe(19=v68q-1a}-R zK@8cM4$S}@GMm7BR+e~Q%F+x`9AL9b;ZxXbY)BrYA+fTa`_$=U+4>a2w?4tX_34t= zy?omNW&1NIS+y$&pTc9l-(04Sm#{46P=;ZeQZ>0}eQYR?E_l%d*j; zuW>yo%afkh7n)&N3SEJ}2=WeaXu^PwaiP*;lo?3?ImEg@9i!cO54RWW8f*d+Bg1#g uVAF)e_>D@}HS{MuD>kGh3wFH%`nr?Gj+58UM_9zWHXXcXuZQo3q7YXemt6NjbBd~5WTEM2ye%_@7Nip&D5!)0E6$}gqOmTEcU;1k-+KDxSk zUa4ZX@TJ;Wkz0AR{L;mot42A_M*#d2E1uBny`Ip~y|08RZ3Xv#F>_>1uIPr&iHX36 zjIg_&Q9?}&cb-;nuooT`LOA!%DO?RPz30DfGKlis#PA+-O*g?G)bXWsxpQ~Gfd}rw zCa>kc@H?E}#d5v_*(~yz((A`t-dp!Y5@EHNh4XI0d96iT;eN{b=Qgi;kHIwNA)0+O zIL3iN(gr(>U)v(-n8Y+@Q|50G1X3?r*BVG|upEPY4aRqoE^y91bdc0z^zD4vSM>^K LWAV)aIbgp5r;x&0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..373c71c7fb901d1a1efc1599ba1ebefcd83f83e8 GIT binary patch literal 1870 zcmZt{%WfP+u)C+{;mtZ;VkacxG6!;4B-ib+TA#scX8r-qlq#`Rr_m!20>Szqg-W zAmkrJrWXg~7Hs_q06_#zNJ;~mvVf&lU{NBNuo9lyflbLK5nR~Mh_I!-?|g3sj&Sah zzWWMfN#CmHqHUcgrIBHr7P&IDC*q@6$9Y!w$}Aq`LWW6fq>2*#ilPjy`F5n`2o+2( z2FNYg+6N#>Km`eypn-+%JR<>b9SQ8#f!f)K6VQ8n<4(3OM@IWwTdS!wkw4mtl$Pek z?ZMiY>vsm5H@CKY6YctOW^#W|M#9f`e36gJRAy#mfwi-RXUxtTY<(4gA^Y@%RivV) zjFJjYp(QB9&yLNSl97?xkNnn=PRF0Dl}PRSIxp2ouJ~q8PR_o`4`k+R1A^%}Zka)* z;%v9&Kf^%6he+P?4*Fa<;Fod%)Lt0IS!}|v_Rb{WMYxv9PVKbz)eJEHL{t|(|2|q< z8Q#}Y>EYL<*3oc%k^?>5jLqle_HZLs+AMyha!ly(NM=XFFXHW?hWA@6qR~OLEA_C5 zi{%h#B3H|MCQUw0;_c;~<}LJc+`L7I?+{MjVX1hmJTQ-2V|Fik9eO<1CT-~~gb~)p z*~0q8Fh{WUFF<(;RXU~>*@t>9$(Zeuv1RB!JFzNqO4rGQKgPV`f?XqHyRwCKz|?iX z`89IFPoZ`J|4=w%n*9h=7qB0us2<>t#LU=%yADX$rvx;9G-N|IcE{d$rgFh5RqKbJ zR$im;0!Vy|-n0^xTX{Qdm5A;bswDF(Ps{?xsG4cGFX9jtHE4sO8E; zkCfi8FDnb~tP@9EKBdSHR(^e#PT>3fe|(ny4PzBo;7zD-K=)rjcPoBMDLL#_9JL+x z1c6R@e-LWBwzYwQ5pU0ANoz?NCm8%%dLd!HGTb7<}1Pz!~k*OK`{OLPO~>#MqMs z#+gIC*Bqr@cNyF@atjpC93+v}r5qq&aPk=cbGomaybSsd&MEX7lGF*qG#6!p=WZAt zmQgaHxM2t*ISiXo(fB_V6HYJH1cq}DCxdP$3cAs~&`iTY-$nI1r75A>LWRE*g#%sT b%&E!SM|+pz+FNZMyNOS((ZmAjvMbhqRshQQ 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 F{|l^hh-Lr) literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db4bc34783ac173abf83cc2468b86ace276ef1e5 GIT binary patch literal 20036 zcmb`P2b>(mweDwXdcyVwtpXA7G#w!^7|XoRdU8w(9vtp5=jNdhlT;AIJXR01zg z;1vmcbONtT;QJ-;F$sKZ0w0&a_fOylBycf-k5Awe5_nYtpP0a_6ZnA%d{P3hN#KbD zUYo${68Pi^8QJ%M*5@KgftOyEiaPbY9S zft>_)6L=a6N$=3EWKJR*c*Ds67enC9t2sK>~LYcs_ymCh)!l zUP$0>0zW!|dkMThfgh8=Hze?l34BumKQ@7HPT*S-_;CsR_yoQ+fuE4TPfXw^CGeAD z{FH>B7yQ&j{?iip=?VOd1imeSpP9hVO5kTF@N*LQxe5Hd1b%)3zaW8Mn7}Ve;1?(G zOA`2{3H-7IK9Il%6Zqu`{E7sAWdgq{fnS}#uSww7Ch$`d`1S;TT>`&8f!~n8ZxnoG z>gIHLg+yiNO}C|;HmaL3$_YU8HxD-a~pX=?>ESNbe_ofb>Dqhe#hL zeT4K;(#J?2Cw+qSNz$iCpC)~V^jXs9NS`Ntf%HYvmq=eGeTDQ@($`2|Cw+tTP13hW z-zI&B6q3G6`X1@~q#uxeNcs`!$E2T-eoFco>F1Z`XlL2q(77XLi#J|Z>0Yw9U}b?>F=a}kp4-!>$dbW(oRZcS|wvlPDZ7r zGOIGDGOx0ra!94Ea#-bv%2AbLDi^67SGic_5|v9;E>n4w%H=9os61NbN|pChd5p?q zRUW7E{wg1!vZ(TSl_#iNrSe3Tt5rTwXCC#x)}T(5G2%2QOHs&b>s z(^Q_W@qMluJ}TT;(HFUaIo4guGnwBUN6Z@=^aHuhg8aDx=ZAO7Yby zuTgoe%Ij1{Jx6NKuh*W(v6)sy*KvFvTx*QxYP;63L*_k%e4fhZt9*gV7pi=b$``AAiOQF%e3{Av zDi5lBxyo0le5J})seHA{*Qk80%G*`GPUY)WzCq<1RlZ5(n^nF=8Ou4K(Jw$N84?1LvRMkt3O&sF^3v zj1sL^y2~l|P0;-meG7DqqHlwaRrDRuaf(9F{S|!|^Z-TQ0~Ouuf#a#?`)+pE2?tGi z)kWe}f8f}+uyc3EcAa>0rhKB4*_vAO!*nWD*@!sbZF_FD61Yxr#%nc-b3vp2pn7e( zcy-`D zT7*jNnqQ>htwzIbIyAoG7b|46>y@fYR5uHU9tepq0tW@`IDxeIG`YVN+cKLaQEMZeOl1+}j0(V@Y> zy3QFzpE>;BONP(IjpKwF$E}BX z#|+(viAo#&|~9}B56w=*@j?)YvH+B3D;LBqfu z&kb`kEjmF1XIjlbq}K>@b8f{U&&-`l+DJN$bUNulqz99{FkK5XwZ?3itu@=7pq!~S zv4Gv~!mQgYXLe6JVYXhGcI)L_-6hKjO}!ST8)2qVX@?eM=#;Y!mj`p&*Qqnq3`wS0 znJ?#>?!KT#c`|ZPlFGwEs~tpRl>^DJrrTi#!xQUk&FZwJ_k?M`Z26T2BkH@=X!L!z z4h*w?qf)PGEsgeEr5Usu<>3Z{5*MeK zN2AIXYA>~GXUX*Uc!6973w4(t=_NHG>8W0}`B6K}IW1kyHl(kDJ$_*Lc(NU7X+>x? z@mGw~{4AVl*64~Gj>KR~tKRa$(fI1Jmd?p|e0h~uY5Hnzg=)RlzJf7;Ej16)l`Y4e zfr$=%Dd%0hQQLRBLt>$&8N5z+YyeB*in^nRuYIo?rf199+4@3zuAH6Q?Rw2{tX^xn z74IUi;?!V9XvuZRM0orh7BIw$aIZVs!0*o>;aLX*DA=v;cBQM{aq*C6tM!VneF9-0@_=l=Gvci4I$}8Jx=fk; zEY6xnX(tv{F-URmP862qciegt{}J7otF{;_eSjtQMS*f&z)W3-d_-`&GVA(;$ia_T zu-3$nu6P%@!28cs@RNeGgoBEhfwv~^2SMJKb%9noR*Wx%}!oV`{!OQh4;5A#u&h>T*+?a%Gd9B!^} zZp4xrPD;nlnxlw5b&fTIR8|mx)kQVWsf*GA!~?y>)S^CVkZBM+<=1Qtcixu!^Y9_= zlD9c(d3m_*&IrT$hGWI`3+a8Gw?ZBNF1|${Rd2Plt|0+c*q~+daup3yS%2~I_d5KU zdTXydJBN;^ilDYnvWC!Nn}PHaSBqiDoa1O*R-iiInMO@J7DYWMD!*Ie#N?J-vlS0b zm~XcHIij%M&pOf59*35+N{Z$s5;i)G+qplFgJMoJ-)cvM>Duj9O%?&MY3152Kbp64 zroBf8JWsHww<_AM92{?`_bJ=r)rhLBP2}MPmP1afSy#uC;SMspHmh2<5|pBjAHIw_ zmyg%H@$Gv$HBW6bh{ul%H_UXR*~-oL-8ZX)O1%^Hk;OtS zzA4Pjv!0KwW4=$2vNi8DWFo@s-kPK47FuE=VP;>W?!CI-vS@+PZ_qG)tkY=rpIDBs zC6sBeN2A{lPfOVz(!idw^RrQ@i44q0sN z>r){Q2V)#&TddbKgcNAsU})rGFfMjvld(f7=e$8PhNHDso%OcNMtLZj@HjMc#U82> zL@g??u5?)pEQHy8RK44KIkUt%VGeG8CYrGBs6=^4J8-6c6e71L~Bvx zu%@S5YX8}3cUE~_Hq#MRs?6?Xku&bvY$)RP-cBQiWGz>c1(P(12+4euJlPI=aUdsx zYSff=nW{d)RJGo;`g-H2FEx%D7lE(ei*m;4cszrk#kQN<4~+;YwZzv4Qu@%4W{BI6 ztKoQ6*r=)V;#Z#BcZl7Q=qj2NDX#Wc>YF2#OX}F}gl3h8 zWeY(iZHOTire%#44iN{h5O*(ChBjAQ+kNv53tV2sI>NtQ+7qpLOUy{}vQg8^k@(kv z(~L7N?z1w4SF&dAH@|;#F8M?-wa@Ma$Ar3^8iB=GTBw%)J*-n)D-mN>LmxqV5yFA*w z26II1*|{S|Z^e;64TkV`nH<^c?iR9i$0JyBDg;%}Q`g>IoX8x^nQb>=w|g_tZC`t?7>*b&H4Cz4BQ=!af#Za=M&5!Y>919$raKQ zmnB^5q~|eOu>h@QzUJ;dPaS93mXo*X8s}~57;@S_y(6vkF6>Jc)aM21b7*&4t;V@c=L&W!!`=`2VI^|IEb+v- z-!84Mc09l3dGh6!Uh_k=I`sCD<^5H}Uqt*FAvJSI;qUee90yJ;lIsGy&5LA@&4t&D z3VE$qw`08r?Hw=oa7TW|y`;f(daI%gZ(e?VTU_+fk&cd5;`mXv@XoSP@Op8nn?$cK z=PO;-zQJ5~{O}qeVn=srwB0O48_YN}-j~W%y&`7`BXKDmnC{~EN_GzM9ZTXYU8u%+ z@lLihprZE-n&aIj;sp8>4sjY6ojiG8C6jdzD+4`V4zn|?v;*%{Df>$izY-zGw%)Hr z{6@sf5Zy7h?My`}UWRpt)qgw7NIprXtyGXIaDL5-1y+bo(HQfxlLL)f?Elt;)T6c`jXrL(R!mB$n->Owz zj(8+udtZ>z7~VUF`_RE~y)Tk8aS|uAoM&*3!74M%PII`vTNLN9oKnL{WUKC!k#eFG z*+Drw%_6Sp9ZL;mIeJwyV0VnS;{+||a2$co&vdGDevQLnLM#h4juzc!*FHWvOy`U( z%(2z4*Q#tLv6V7g$_B$gOl-;FuWa}_4X-W_VNW-|5VE1;1w-9?i)3Y6byjZd)+8oz z?v!hHJa&MxE8?6@EsbfRkQ`Cg>I{w?991|yl(VE^b#*K#8OLyF;KbMg$OwhG1B7Px)FDX;rs0drcun4}WOiipPTduQlH(URJBUw3&53_nC&%rK-X!Hu7 z&|-7y?&WBAw$)~#%vFke^zIO}d`H)p$c1b4OF*?#tHZKj{iW83}g z=|(#;zzu9jYR$@}yri&;_wi@PeU?~NysQFmc!3kISBtWZDxO(sv$Epd6sCRlhBGDa z?E9>1&E_l4jBA3$o6#;@*_$11rI)bVq)`sH>_Cf-TfxHzSk%GJ9Vxq zp3957hO2MMWF@7qk~lcK&;Fgfe(imhIq^PARI$w?{^+OAg@y<8qf)$3 zmmKzB0yc5XQpAI__PWj#kyGB7`kU0O=}$j{0f-8fO6KCS%W7rmPb_EZ^}KlK%UC<)Y|v{*sAYO9X?YZJbKI4t;NIH zgU2TybGLTHo&Gl;$v$weoJSw=z<%cc-^cMf=$?8g_W8f=A+N_-{oLDBQmwr8s2}cK zY)bOL=ofu$e)W}?`1fKBNf-UE)g;4!uT|~bDd+b)cNV2iUc&cdPGrcOxJ183N51w}c}mQMwm#hp9* zycu+sX0cS@>w|k5G?^Z0h&E7f^`}^A4;ra{q<>_D&ynZzW?LJ3M9a8|?=U#dyZe~x z6NJlCEX)`MIo3X+`aX${th}hDk9dUK>6c2JDq!vR*rm%S7PBqtus2h085X9dYPid( zsj#rO;x+LPyh{`mj!z{%?wD%$v*D8dwA}Q>NAe%H;XH zUQ~xYc~LF6xHCO@Va@Y{(iL877dxU!zDJm!ytFnw$*B&9J1p7dt=D9`*4{A1Z%)e_ ze6F)0+KT!c2H%dXZ!dUTX~Q>J+4)D){PA@oCTDW#Bmdgz?xHBBtnV8@mAeLiaG~-1=iY-`qH!w$m2fFgIHNNH$(;u1bUZ zf3g4x(_2WsY%qFhC%rPY-}H=Q=2PB!t}|TIe8)mtgy_r+UE7tKPx&YIEGN}Tc@sg} z$*xQt{>7W1%Np#rruv-+87H^fc&AIpdlI_ymq$m`nXs@`PO`3IC7-*X>4+{|zvdfBdH5# zeT3H-jH!;U4(uFx$IHOV4zG|Yq~-6J4DDUx#{ARH*rvcxTc&$dY$Hcb+Yy5;2Q89x zuwO{c4)(wxf38310Yh{keUMMu8E{rayUfukwIC}h(X-BCkg+98R#AJFY8mSsDYI>V zmUR~e+FvzpMVrp(qAIuym98B%c^>PP>STAM{n*F(MKCln4(!w(H z*QT0dRw@`?xH^q>^3UH=`}N+lQrD-N>Ak65-n+4v-!&3R+BQ0$_8h65Hj(e7nc5qJ zu>*^^8mGoWk9S|u?|WAF3I`TD*@G})*Ani#agd+dwUpK`?YG{0p0=EIY_jE2`pndx zTNs4`W|rEuj8VHIILaB~pJdpWqnPR)+_~Ht?wP~+D^mxJcSkbktdujNr9XvPuD~Gq zhkUdOeWt8LF@Cg|=IG_Rd+f+MdE3rZsdz)_qX#Da?d!r+M+o!#4}BmUNqW-mO1^KK z^w&wS#;iKF#2DzxzJzWUHG z7e!fhnH=l7-ZgT64#8JYEN4CM-GU1|SU;)@?Q0~+Um)N6u+`UyuAVnsEGvqsWOMld zNA{t5z%2(7yp@go^T0KGN~xUB2Ml~_GBU7h;?l%Wf=5{iAb#1_IHD{Khk_PyUsebl zs_<)hl-0*n|64%5JY(hJohzNWn;&aIiqnK{)BGq@8%d94Y?UMFLe_?M7HK47AmIqa zBL@_Wie@w@DfLGHcvw& zDQABI=yO#ZBo@EeiCyDz`2{O&UMPBH%6p`^JNS5v@NqVBq2wP(9TdJEH)$r#ertag zMrIDAoqX&{H}5Nm5(*J0M6g zbHw!n*aGq0>`#-E5sNrz{Kby7RZ3)>tX{8_YwW;~XE`~^!w#;+3NjK_{WW`z#}cv! z#lK-U-WkLK_Qg(~nX*>!&y!a~^Dm{?-ycjnHr7OWXPDA6JxlyMH7-(Ln%XslpS@n6 zKhn$69+qXzkv$LpztkE%+oraC_g2a=2k@{5BM;d<<_MQJ>8rcL1y11Hyg*FgoE>Yn zZ94gkRjb!e`h&Bnk6zi^tf0ajX(!yF~qH8u452epIlrD)$rdTfA zit?U_kfTVCH-z$?i+&&0o!YTx)iw^#Dy5loOBZfm*Yjql@#oIE)tgVAbk-s_tD2nH z+?#YBeaguj_fM`TOVOHYqv!J9zFw`_YczW8YOfvi+WUH|dnfnk%jSs_Cq}%zVzm0T z7q3hrhrVC4W;n{m4SD;xidN50lzh(9dC`+tNk56)iCn~mk4rD~8?z=~6Y@2k_c_Ut z&zEFJes@CL$gK-Ph*K!F#EfJtrGsUbK??DxN2iykN1%oJSz~ToP8uW6+-RHb(z`Ek zBoG`WyCQM=tXS=-DL$p*B{_IxYDzxVh=0jXO*yUV)YSj`{y-P#y1eydDdtIl@Pyc& zbS4~)_YU%rAJrd@CbB~JbOk2?{Oc@v{SyI&6dfga-2Ly^p9`A`iwjE%8^@PTtoB|c zb<>@hj=XH8Vp%eKj9ki-mA+1*ca;b9a7eH7b}_3<`jyGvsDK+G;x!}t49=Y`buP2qt2qlJYu=ouNXGZgRHljV6voIQSm#r&e^AFoHf48&df9#w&WarI)+XeGCd&vCNw#{GcVe@Bu#Qez~ zHGj0n%zxR7%zxVB<`4E_^Lu-V`44-k`JKJY{MJ6o{Kj5xer>NXciKmrU)d|oFYWu8 zU)aZ(pWDZppV`NmpW62~Kd~QRery-bkL=^k5A74o5A0Ru`}T?Ed-iJcUHgIjn}U`@!b3_Cw5P?1!39+Yd9JvNxGe+Gm(g*k_uL+h>`N*=L)N+MCTs>~qYA?Q_kC z?DNbA?Jed5_W9=h_66pB_J!sS`y%sR`(pDR`x5hR`{CwY_9M(Y?Mux&?90sC?aR&E z>_?in+EmKlc(TrhCKzy$*r3|xRl ze==~vzy$*r3|ug9!N3Ir7Ytl5aKXR@0~ZWjFmS=Z1p^lhTrhCKzy$*r3|ug9!N3Ir z7Ytl5aKXR@0~ZWjFmS=Z1p^lhTrhCKzy$*r3|ug9!N3Ir7Ytl5aKXR@0~ZWjFmS=Z z1p^lhTrhCKzy$*r3|ug9!N3Ir7Ytl5aKXR@0~ZWjFmS=Z1p^lhTrhCKzy$*r3|ug9 z!N3Ir7c977!37I0Sa89D3l?0k;DQAgEVy971q&`%aKVBL7F@94f&~{WxM0Br3ocl2 z!Ga4GT(IDR1s5#1V8I0oE?98Ef(sU0u;79P7c977!37I0Sa89D3l?0k;DQAgEVy97 z1q&`%$_4%xG|B}l=7JS-!HT(H#aysrE?6-ate6W{%mpjvf)#VYin(CLT(Dv;jKy5A zVh)&?16IrdE9QU|bHIu@z?xDyV8t9@N1+_BVh&g_2dtO_R?Gn_=71G*z=}CwVh$KM zV1xs!(BDU&i2j~%0{va|1JNP+B=mRCYtY|DPoTerUW@)FdL8;3=#$Z3N0-oFL$61F z6}(Q@4m(j0AZ$rNdJ&ArLdOP|R z=pE>nqo>dZ(L2!x&=vH{(9`IbqO0hapdIv!(JuN$=o$12(X;3mpy$xfN7vBLqdmLO z&*geI`Z?%2`q|_+(9hz!iGC)!g}x2lMn40+2mN%khkhF6ee_eg4$x0QchFBp&!eA& z-iv-BdLQ};=mqqx=q~#4-2Z6wf!6pRM}6Gy># z5iqe7j3)sTPr-N-FfkR3M*$O8!FUxgu@#JG0TW-rco#4+7L11h6KBDA8SqaOKR_|@ zmVCSo`NUlC@rr+_7_UPLR zJQ5h61jZ|Y@k?Ml6ByqF#yf%WPhdP07#{`3OM&rIU_2EVUj@cnf$>*hJQf(A1;%TE z@mpX#7Z~3K#(RPBUtl~K7#{}4i-GZDU_2QZUk1jTf$?WxJQ^6E2F9y_@oSN11LNDk zXKMb(731m1$JddMw*%wvz?&80^HMjA;PuGI?~#A5;twgt`;m|TBOeb4#s`A&f?)h0 zZNL+P@r7W#AsBxM#v_99iD0}UYbg98Onih%Tk&44uO(-Uzqvo!5+~B;sVX8BqPku~B@{(HK*(INeBMpsi~n_Z zeYDX<0;Qh=g-5;tPkfM-c;YEyQaYxM%bxIipdB+uVWh zJ?=vI9pgU9ayb3u(WuJvq*g)=emsIWTjvAuG8MHRWaXfiVr!tqOPxrOYz>l<4^%2M z0L5j%7U&r7QYXb6F9$}56GK6B_Rr{`=5L_a3aN2hGbINKzr*3#nEF_RxI zsk#L+dy_25+*%NnaOVLzrRB$<{~*~3!f9*wB1I8=4eWZ*0exA*?58574+gF`&uYM(OfY)`H>LXa# zPc~hr9z2Y)e?pi63t2!n7`_2v_TMM{RkPi@Bw%moBO6F6uo1*@QSm0n?=X&EG)evz z>BKRwQV{zGvN{o^657~#rnL0HwY-T7M$-~;ZMlsy^~ZfC-JlK?)W=nsb+>38N2>n#~*;f9Xt&$ct|Dg zhkZ=*pwW$lG$kU^!UbI$CWXX*UE3_iPpeYt1pWo9G<{UD=T%mkPFfXpmJ5m0x4E>Z hUyA@+LSp{Ld$?ltbIed-!8VB3)+C@k_MR1P{tM&2UQPf2 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py new file mode 100644 index 000000000..5ba926e3b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py @@ -0,0 +1,29 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + +from collections import OrderedDict + + +def _attr_key(attr): + """Return an appropriate key for an attribute for sorting + + Attributes have a namespace that can be either ``None`` or a string. We + can't compare the two because they're different types, so we convert + ``None`` to an empty string first. + + """ + return (attr[0][0] or ''), attr[0][1] + + +class Filter(base.Filter): + """Alphabetizes attributes for elements""" + def __iter__(self): + for token in base.Filter.__iter__(self): + if token["type"] in ("StartTag", "EmptyTag"): + attrs = OrderedDict() + for name, value in sorted(token["data"].items(), + key=_attr_key): + attrs[name] = value + token["data"] = attrs + yield token diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py new file mode 100644 index 000000000..c7dbaed0f --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import, division, unicode_literals + + +class Filter(object): + def __init__(self, source): + self.source = source + + def __iter__(self): + return iter(self.source) + + def __getattr__(self, name): + return getattr(self.source, name) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py new file mode 100644 index 000000000..aefb5c842 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Injects ```` tag into head of document""" + def __init__(self, source, encoding): + """Creates a Filter + + :arg source: the source token stream + + :arg encoding: the encoding to set + + """ + base.Filter.__init__(self, source) + self.encoding = encoding + + def __iter__(self): + state = "pre_head" + meta_found = (self.encoding is None) + pending = [] + + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag": + if token["name"].lower() == "head": + state = "in_head" + + elif type == "EmptyTag": + if token["name"].lower() == "meta": + # replace charset with actual encoding + has_http_equiv_content_type = False + for (namespace, name), value in token["data"].items(): + if namespace is not None: + continue + elif name.lower() == 'charset': + token["data"][(namespace, name)] = self.encoding + meta_found = True + break + elif name == 'http-equiv' and value.lower() == 'content-type': + has_http_equiv_content_type = True + else: + if has_http_equiv_content_type and (None, "content") in token["data"]: + token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding + meta_found = True + + elif token["name"].lower() == "head" and not meta_found: + # insert meta into empty head + yield {"type": "StartTag", "name": "head", + "data": token["data"]} + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + yield {"type": "EndTag", "name": "head"} + meta_found = True + continue + + elif type == "EndTag": + if token["name"].lower() == "head" and pending: + # insert meta into head (if necessary) and flush pending queue + yield pending.pop(0) + if not meta_found: + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + while pending: + yield pending.pop(0) + meta_found = True + state = "post_head" + + if state == "in_head": + pending.append(token) + else: + yield token diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py new file mode 100644 index 000000000..fcc07eec5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py @@ -0,0 +1,93 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type + +from . import base +from ..constants import namespaces, voidElements + +from ..constants import spaceCharacters +spaceCharacters = "".join(spaceCharacters) + + +class Filter(base.Filter): + """Lints the token stream for errors + + If it finds any errors, it'll raise an ``AssertionError``. + + """ + def __init__(self, source, require_matching_tags=True): + """Creates a Filter + + :arg source: the source token stream + + :arg require_matching_tags: whether or not to require matching tags + + """ + super(Filter, self).__init__(source) + self.require_matching_tags = require_matching_tags + + def __iter__(self): + open_elements = [] + for token in base.Filter.__iter__(self): + type = token["type"] + if type in ("StartTag", "EmptyTag"): + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(token["data"], dict) + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert type == "EmptyTag" + else: + assert type == "StartTag" + if type == "StartTag" and self.require_matching_tags: + open_elements.append((namespace, name)) + for (namespace, name), value in token["data"].items(): + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(value, text_type) + + elif type == "EndTag": + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} + elif self.require_matching_tags: + start = open_elements.pop() + assert start == (namespace, name) + + elif type == "Comment": + data = token["data"] + assert isinstance(data, text_type) + + elif type in ("Characters", "SpaceCharacters"): + data = token["data"] + assert isinstance(data, text_type) + assert data != "" + if type == "SpaceCharacters": + assert data.strip(spaceCharacters) == "" + + elif type == "Doctype": + name = token["name"] + assert name is None or isinstance(name, text_type) + assert token["publicId"] is None or isinstance(name, text_type) + assert token["systemId"] is None or isinstance(name, text_type) + + elif type == "Entity": + assert isinstance(token["name"], text_type) + + elif type == "SerializerError": + assert isinstance(token["data"], text_type) + + else: + assert False, "Unknown token type: %(type)s" % {"type": type} + + yield token diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py new file mode 100644 index 000000000..4a865012c --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py @@ -0,0 +1,207 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Removes optional tags from the token stream""" + def slider(self): + previous1 = previous2 = None + for token in self.source: + if previous1 is not None: + yield previous2, previous1, token + previous2 = previous1 + previous1 = token + if previous1 is not None: + yield previous2, previous1, None + + def __iter__(self): + for previous, token, next in self.slider(): + type = token["type"] + if type == "StartTag": + if (token["data"] or + not self.is_optional_start(token["name"], previous, next)): + yield token + elif type == "EndTag": + if not self.is_optional_end(token["name"], next): + yield token + else: + yield token + + def is_optional_start(self, tagname, previous, next): + type = next and next["type"] or None + if tagname in 'html': + # An html element's start tag may be omitted if the first thing + # inside the html element is not a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname == 'head': + # A head element's start tag may be omitted if the first thing + # inside the head element is an element. + # XXX: we also omit the start tag if the head element is empty + if type in ("StartTag", "EmptyTag"): + return True + elif type == "EndTag": + return next["name"] == "head" + elif tagname == 'body': + # A body element's start tag may be omitted if the first thing + # inside the body element is not a space character or a comment, + # except if the first thing inside the body element is a script + # or style element and the node immediately preceding the body + # element is a head element whose end tag has been omitted. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we do not look at the preceding event, so we never omit + # the body element's start tag if it's followed by a script or + # a style element. + return next["name"] not in ('script', 'style') + else: + return True + elif tagname == 'colgroup': + # A colgroup element's start tag may be omitted if the first thing + # inside the colgroup element is a col element, and if the element + # is not immediately preceded by another colgroup element whose + # end tag has been omitted. + if type in ("StartTag", "EmptyTag"): + # XXX: we do not look at the preceding event, so instead we never + # omit the colgroup element's end tag when it is immediately + # followed by another colgroup element. See is_optional_end. + return next["name"] == "col" + else: + return False + elif tagname == 'tbody': + # A tbody element's start tag may be omitted if the first thing + # inside the tbody element is a tr element, and if the element is + # not immediately preceded by a tbody, thead, or tfoot element + # whose end tag has been omitted. + if type == "StartTag": + # omit the thead and tfoot elements' end tag when they are + # immediately followed by a tbody element. See is_optional_end. + if previous and previous['type'] == 'EndTag' and \ + previous['name'] in ('tbody', 'thead', 'tfoot'): + return False + return next["name"] == 'tr' + else: + return False + return False + + def is_optional_end(self, tagname, next): + type = next and next["type"] or None + if tagname in ('html', 'head', 'body'): + # An html element's end tag may be omitted if the html element + # is not immediately followed by a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname in ('li', 'optgroup', 'tr'): + # A li element's end tag may be omitted if the li element is + # immediately followed by another li element or if there is + # no more content in the parent element. + # An optgroup element's end tag may be omitted if the optgroup + # element is immediately followed by another optgroup element, + # or if there is no more content in the parent element. + # A tr element's end tag may be omitted if the tr element is + # immediately followed by another tr element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] == tagname + else: + return type == "EndTag" or type is None + elif tagname in ('dt', 'dd'): + # A dt element's end tag may be omitted if the dt element is + # immediately followed by another dt element or a dd element. + # A dd element's end tag may be omitted if the dd element is + # immediately followed by another dd element or a dt element, + # or if there is no more content in the parent element. + if type == "StartTag": + return next["name"] in ('dt', 'dd') + elif tagname == 'dd': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'p': + # A p element's end tag may be omitted if the p element is + # immediately followed by an address, article, aside, + # blockquote, datagrid, dialog, dir, div, dl, fieldset, + # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, + # nav, ol, p, pre, section, table, or ul, element, or if + # there is no more content in the parent element. + if type in ("StartTag", "EmptyTag"): + return next["name"] in ('address', 'article', 'aside', + 'blockquote', 'datagrid', 'dialog', + 'dir', 'div', 'dl', 'fieldset', 'footer', + 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'header', 'hr', 'menu', 'nav', 'ol', + 'p', 'pre', 'section', 'table', 'ul') + else: + return type == "EndTag" or type is None + elif tagname == 'option': + # An option element's end tag may be omitted if the option + # element is immediately followed by another option element, + # or if it is immediately followed by an optgroup + # element, or if there is no more content in the parent + # element. + if type == "StartTag": + return next["name"] in ('option', 'optgroup') + else: + return type == "EndTag" or type is None + elif tagname in ('rt', 'rp'): + # An rt element's end tag may be omitted if the rt element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + # An rp element's end tag may be omitted if the rp element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('rt', 'rp') + else: + return type == "EndTag" or type is None + elif tagname == 'colgroup': + # A colgroup element's end tag may be omitted if the colgroup + # element is not immediately followed by a space character or + # a comment. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we also look for an immediately following colgroup + # element. See is_optional_start. + return next["name"] != 'colgroup' + else: + return True + elif tagname in ('thead', 'tbody'): + # A thead element's end tag may be omitted if the thead element + # is immediately followed by a tbody or tfoot element. + # A tbody element's end tag may be omitted if the tbody element + # is immediately followed by a tbody or tfoot element, or if + # there is no more content in the parent element. + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] in ['tbody', 'tfoot'] + elif tagname == 'tbody': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'tfoot': + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] == 'tbody' + else: + return type == "EndTag" or type is None + elif tagname in ('td', 'th'): + # A td element's end tag may be omitted if the td element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + # A th element's end tag may be omitted if the th element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('td', 'th') + else: + return type == "EndTag" or type is None + return False diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py new file mode 100644 index 000000000..aa7431d13 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py @@ -0,0 +1,916 @@ +"""Deprecated from html5lib 1.1. + +See `here `_ for +information about its deprecation; `Bleach `_ +is recommended as a replacement. Please let us know in the aforementioned issue +if Bleach is unsuitable for your needs. + +""" +from __future__ import absolute_import, division, unicode_literals + +import re +import warnings +from xml.sax.saxutils import escape, unescape + +from pip._vendor.six.moves import urllib_parse as urlparse + +from . import base +from ..constants import namespaces, prefixes + +__all__ = ["Filter"] + + +_deprecation_msg = ( + "html5lib's sanitizer is deprecated; see " + + "https://github.com/html5lib/html5lib-python/issues/443 and please let " + + "us know if Bleach is unsuitable for your needs" +) + +warnings.warn(_deprecation_msg, DeprecationWarning) + +allowed_elements = frozenset(( + (namespaces['html'], 'a'), + (namespaces['html'], 'abbr'), + (namespaces['html'], 'acronym'), + (namespaces['html'], 'address'), + (namespaces['html'], 'area'), + (namespaces['html'], 'article'), + (namespaces['html'], 'aside'), + (namespaces['html'], 'audio'), + (namespaces['html'], 'b'), + (namespaces['html'], 'big'), + (namespaces['html'], 'blockquote'), + (namespaces['html'], 'br'), + (namespaces['html'], 'button'), + (namespaces['html'], 'canvas'), + (namespaces['html'], 'caption'), + (namespaces['html'], 'center'), + (namespaces['html'], 'cite'), + (namespaces['html'], 'code'), + (namespaces['html'], 'col'), + (namespaces['html'], 'colgroup'), + (namespaces['html'], 'command'), + (namespaces['html'], 'datagrid'), + (namespaces['html'], 'datalist'), + (namespaces['html'], 'dd'), + (namespaces['html'], 'del'), + (namespaces['html'], 'details'), + (namespaces['html'], 'dfn'), + (namespaces['html'], 'dialog'), + (namespaces['html'], 'dir'), + (namespaces['html'], 'div'), + (namespaces['html'], 'dl'), + (namespaces['html'], 'dt'), + (namespaces['html'], 'em'), + (namespaces['html'], 'event-source'), + (namespaces['html'], 'fieldset'), + (namespaces['html'], 'figcaption'), + (namespaces['html'], 'figure'), + (namespaces['html'], 'footer'), + (namespaces['html'], 'font'), + (namespaces['html'], 'form'), + (namespaces['html'], 'header'), + (namespaces['html'], 'h1'), + (namespaces['html'], 'h2'), + (namespaces['html'], 'h3'), + (namespaces['html'], 'h4'), + (namespaces['html'], 'h5'), + (namespaces['html'], 'h6'), + (namespaces['html'], 'hr'), + (namespaces['html'], 'i'), + (namespaces['html'], 'img'), + (namespaces['html'], 'input'), + (namespaces['html'], 'ins'), + (namespaces['html'], 'keygen'), + (namespaces['html'], 'kbd'), + (namespaces['html'], 'label'), + (namespaces['html'], 'legend'), + (namespaces['html'], 'li'), + (namespaces['html'], 'm'), + (namespaces['html'], 'map'), + (namespaces['html'], 'menu'), + (namespaces['html'], 'meter'), + (namespaces['html'], 'multicol'), + (namespaces['html'], 'nav'), + (namespaces['html'], 'nextid'), + (namespaces['html'], 'ol'), + (namespaces['html'], 'output'), + (namespaces['html'], 'optgroup'), + (namespaces['html'], 'option'), + (namespaces['html'], 'p'), + (namespaces['html'], 'pre'), + (namespaces['html'], 'progress'), + (namespaces['html'], 'q'), + (namespaces['html'], 's'), + (namespaces['html'], 'samp'), + (namespaces['html'], 'section'), + (namespaces['html'], 'select'), + (namespaces['html'], 'small'), + (namespaces['html'], 'sound'), + (namespaces['html'], 'source'), + (namespaces['html'], 'spacer'), + (namespaces['html'], 'span'), + (namespaces['html'], 'strike'), + (namespaces['html'], 'strong'), + (namespaces['html'], 'sub'), + (namespaces['html'], 'sup'), + (namespaces['html'], 'table'), + (namespaces['html'], 'tbody'), + (namespaces['html'], 'td'), + (namespaces['html'], 'textarea'), + (namespaces['html'], 'time'), + (namespaces['html'], 'tfoot'), + (namespaces['html'], 'th'), + (namespaces['html'], 'thead'), + (namespaces['html'], 'tr'), + (namespaces['html'], 'tt'), + (namespaces['html'], 'u'), + (namespaces['html'], 'ul'), + (namespaces['html'], 'var'), + (namespaces['html'], 'video'), + (namespaces['mathml'], 'maction'), + (namespaces['mathml'], 'math'), + (namespaces['mathml'], 'merror'), + (namespaces['mathml'], 'mfrac'), + (namespaces['mathml'], 'mi'), + (namespaces['mathml'], 'mmultiscripts'), + (namespaces['mathml'], 'mn'), + (namespaces['mathml'], 'mo'), + (namespaces['mathml'], 'mover'), + (namespaces['mathml'], 'mpadded'), + (namespaces['mathml'], 'mphantom'), + (namespaces['mathml'], 'mprescripts'), + (namespaces['mathml'], 'mroot'), + (namespaces['mathml'], 'mrow'), + (namespaces['mathml'], 'mspace'), + (namespaces['mathml'], 'msqrt'), + (namespaces['mathml'], 'mstyle'), + (namespaces['mathml'], 'msub'), + (namespaces['mathml'], 'msubsup'), + (namespaces['mathml'], 'msup'), + (namespaces['mathml'], 'mtable'), + (namespaces['mathml'], 'mtd'), + (namespaces['mathml'], 'mtext'), + (namespaces['mathml'], 'mtr'), + (namespaces['mathml'], 'munder'), + (namespaces['mathml'], 'munderover'), + (namespaces['mathml'], 'none'), + (namespaces['svg'], 'a'), + (namespaces['svg'], 'animate'), + (namespaces['svg'], 'animateColor'), + (namespaces['svg'], 'animateMotion'), + (namespaces['svg'], 'animateTransform'), + (namespaces['svg'], 'clipPath'), + (namespaces['svg'], 'circle'), + (namespaces['svg'], 'defs'), + (namespaces['svg'], 'desc'), + (namespaces['svg'], 'ellipse'), + (namespaces['svg'], 'font-face'), + (namespaces['svg'], 'font-face-name'), + (namespaces['svg'], 'font-face-src'), + (namespaces['svg'], 'g'), + (namespaces['svg'], 'glyph'), + (namespaces['svg'], 'hkern'), + (namespaces['svg'], 'linearGradient'), + (namespaces['svg'], 'line'), + (namespaces['svg'], 'marker'), + (namespaces['svg'], 'metadata'), + (namespaces['svg'], 'missing-glyph'), + (namespaces['svg'], 'mpath'), + (namespaces['svg'], 'path'), + (namespaces['svg'], 'polygon'), + (namespaces['svg'], 'polyline'), + (namespaces['svg'], 'radialGradient'), + (namespaces['svg'], 'rect'), + (namespaces['svg'], 'set'), + (namespaces['svg'], 'stop'), + (namespaces['svg'], 'svg'), + (namespaces['svg'], 'switch'), + (namespaces['svg'], 'text'), + (namespaces['svg'], 'title'), + (namespaces['svg'], 'tspan'), + (namespaces['svg'], 'use'), +)) + +allowed_attributes = frozenset(( + # HTML attributes + (None, 'abbr'), + (None, 'accept'), + (None, 'accept-charset'), + (None, 'accesskey'), + (None, 'action'), + (None, 'align'), + (None, 'alt'), + (None, 'autocomplete'), + (None, 'autofocus'), + (None, 'axis'), + (None, 'background'), + (None, 'balance'), + (None, 'bgcolor'), + (None, 'bgproperties'), + (None, 'border'), + (None, 'bordercolor'), + (None, 'bordercolordark'), + (None, 'bordercolorlight'), + (None, 'bottompadding'), + (None, 'cellpadding'), + (None, 'cellspacing'), + (None, 'ch'), + (None, 'challenge'), + (None, 'char'), + (None, 'charoff'), + (None, 'choff'), + (None, 'charset'), + (None, 'checked'), + (None, 'cite'), + (None, 'class'), + (None, 'clear'), + (None, 'color'), + (None, 'cols'), + (None, 'colspan'), + (None, 'compact'), + (None, 'contenteditable'), + (None, 'controls'), + (None, 'coords'), + (None, 'data'), + (None, 'datafld'), + (None, 'datapagesize'), + (None, 'datasrc'), + (None, 'datetime'), + (None, 'default'), + (None, 'delay'), + (None, 'dir'), + (None, 'disabled'), + (None, 'draggable'), + (None, 'dynsrc'), + (None, 'enctype'), + (None, 'end'), + (None, 'face'), + (None, 'for'), + (None, 'form'), + (None, 'frame'), + (None, 'galleryimg'), + (None, 'gutter'), + (None, 'headers'), + (None, 'height'), + (None, 'hidefocus'), + (None, 'hidden'), + (None, 'high'), + (None, 'href'), + (None, 'hreflang'), + (None, 'hspace'), + (None, 'icon'), + (None, 'id'), + (None, 'inputmode'), + (None, 'ismap'), + (None, 'keytype'), + (None, 'label'), + (None, 'leftspacing'), + (None, 'lang'), + (None, 'list'), + (None, 'longdesc'), + (None, 'loop'), + (None, 'loopcount'), + (None, 'loopend'), + (None, 'loopstart'), + (None, 'low'), + (None, 'lowsrc'), + (None, 'max'), + (None, 'maxlength'), + (None, 'media'), + (None, 'method'), + (None, 'min'), + (None, 'multiple'), + (None, 'name'), + (None, 'nohref'), + (None, 'noshade'), + (None, 'nowrap'), + (None, 'open'), + (None, 'optimum'), + (None, 'pattern'), + (None, 'ping'), + (None, 'point-size'), + (None, 'poster'), + (None, 'pqg'), + (None, 'preload'), + (None, 'prompt'), + (None, 'radiogroup'), + (None, 'readonly'), + (None, 'rel'), + (None, 'repeat-max'), + (None, 'repeat-min'), + (None, 'replace'), + (None, 'required'), + (None, 'rev'), + (None, 'rightspacing'), + (None, 'rows'), + (None, 'rowspan'), + (None, 'rules'), + (None, 'scope'), + (None, 'selected'), + (None, 'shape'), + (None, 'size'), + (None, 'span'), + (None, 'src'), + (None, 'start'), + (None, 'step'), + (None, 'style'), + (None, 'summary'), + (None, 'suppress'), + (None, 'tabindex'), + (None, 'target'), + (None, 'template'), + (None, 'title'), + (None, 'toppadding'), + (None, 'type'), + (None, 'unselectable'), + (None, 'usemap'), + (None, 'urn'), + (None, 'valign'), + (None, 'value'), + (None, 'variable'), + (None, 'volume'), + (None, 'vspace'), + (None, 'vrml'), + (None, 'width'), + (None, 'wrap'), + (namespaces['xml'], 'lang'), + # MathML attributes + (None, 'actiontype'), + (None, 'align'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnlines'), + (None, 'columnspacing'), + (None, 'columnspan'), + (None, 'depth'), + (None, 'display'), + (None, 'displaystyle'), + (None, 'equalcolumns'), + (None, 'equalrows'), + (None, 'fence'), + (None, 'fontstyle'), + (None, 'fontweight'), + (None, 'frame'), + (None, 'height'), + (None, 'linethickness'), + (None, 'lspace'), + (None, 'mathbackground'), + (None, 'mathcolor'), + (None, 'mathvariant'), + (None, 'mathvariant'), + (None, 'maxsize'), + (None, 'minsize'), + (None, 'other'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowlines'), + (None, 'rowspacing'), + (None, 'rowspan'), + (None, 'rspace'), + (None, 'scriptlevel'), + (None, 'selection'), + (None, 'separator'), + (None, 'stretchy'), + (None, 'width'), + (None, 'width'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'type'), + # SVG attributes + (None, 'accent-height'), + (None, 'accumulate'), + (None, 'additive'), + (None, 'alphabetic'), + (None, 'arabic-form'), + (None, 'ascent'), + (None, 'attributeName'), + (None, 'attributeType'), + (None, 'baseProfile'), + (None, 'bbox'), + (None, 'begin'), + (None, 'by'), + (None, 'calcMode'), + (None, 'cap-height'), + (None, 'class'), + (None, 'clip-path'), + (None, 'color'), + (None, 'color-rendering'), + (None, 'content'), + (None, 'cx'), + (None, 'cy'), + (None, 'd'), + (None, 'dx'), + (None, 'dy'), + (None, 'descent'), + (None, 'display'), + (None, 'dur'), + (None, 'end'), + (None, 'fill'), + (None, 'fill-opacity'), + (None, 'fill-rule'), + (None, 'font-family'), + (None, 'font-size'), + (None, 'font-stretch'), + (None, 'font-style'), + (None, 'font-variant'), + (None, 'font-weight'), + (None, 'from'), + (None, 'fx'), + (None, 'fy'), + (None, 'g1'), + (None, 'g2'), + (None, 'glyph-name'), + (None, 'gradientUnits'), + (None, 'hanging'), + (None, 'height'), + (None, 'horiz-adv-x'), + (None, 'horiz-origin-x'), + (None, 'id'), + (None, 'ideographic'), + (None, 'k'), + (None, 'keyPoints'), + (None, 'keySplines'), + (None, 'keyTimes'), + (None, 'lang'), + (None, 'marker-end'), + (None, 'marker-mid'), + (None, 'marker-start'), + (None, 'markerHeight'), + (None, 'markerUnits'), + (None, 'markerWidth'), + (None, 'mathematical'), + (None, 'max'), + (None, 'min'), + (None, 'name'), + (None, 'offset'), + (None, 'opacity'), + (None, 'orient'), + (None, 'origin'), + (None, 'overline-position'), + (None, 'overline-thickness'), + (None, 'panose-1'), + (None, 'path'), + (None, 'pathLength'), + (None, 'points'), + (None, 'preserveAspectRatio'), + (None, 'r'), + (None, 'refX'), + (None, 'refY'), + (None, 'repeatCount'), + (None, 'repeatDur'), + (None, 'requiredExtensions'), + (None, 'requiredFeatures'), + (None, 'restart'), + (None, 'rotate'), + (None, 'rx'), + (None, 'ry'), + (None, 'slope'), + (None, 'stemh'), + (None, 'stemv'), + (None, 'stop-color'), + (None, 'stop-opacity'), + (None, 'strikethrough-position'), + (None, 'strikethrough-thickness'), + (None, 'stroke'), + (None, 'stroke-dasharray'), + (None, 'stroke-dashoffset'), + (None, 'stroke-linecap'), + (None, 'stroke-linejoin'), + (None, 'stroke-miterlimit'), + (None, 'stroke-opacity'), + (None, 'stroke-width'), + (None, 'systemLanguage'), + (None, 'target'), + (None, 'text-anchor'), + (None, 'to'), + (None, 'transform'), + (None, 'type'), + (None, 'u1'), + (None, 'u2'), + (None, 'underline-position'), + (None, 'underline-thickness'), + (None, 'unicode'), + (None, 'unicode-range'), + (None, 'units-per-em'), + (None, 'values'), + (None, 'version'), + (None, 'viewBox'), + (None, 'visibility'), + (None, 'width'), + (None, 'widths'), + (None, 'x'), + (None, 'x-height'), + (None, 'x1'), + (None, 'x2'), + (namespaces['xlink'], 'actuate'), + (namespaces['xlink'], 'arcrole'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'role'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'title'), + (namespaces['xlink'], 'type'), + (namespaces['xml'], 'base'), + (namespaces['xml'], 'lang'), + (namespaces['xml'], 'space'), + (None, 'y'), + (None, 'y1'), + (None, 'y2'), + (None, 'zoomAndPan'), +)) + +attr_val_is_uri = frozenset(( + (None, 'href'), + (None, 'src'), + (None, 'cite'), + (None, 'action'), + (None, 'longdesc'), + (None, 'poster'), + (None, 'background'), + (None, 'datasrc'), + (None, 'dynsrc'), + (None, 'lowsrc'), + (None, 'ping'), + (namespaces['xlink'], 'href'), + (namespaces['xml'], 'base'), +)) + +svg_attr_val_allows_ref = frozenset(( + (None, 'clip-path'), + (None, 'color-profile'), + (None, 'cursor'), + (None, 'fill'), + (None, 'filter'), + (None, 'marker'), + (None, 'marker-start'), + (None, 'marker-mid'), + (None, 'marker-end'), + (None, 'mask'), + (None, 'stroke'), +)) + +svg_allow_local_href = frozenset(( + (None, 'altGlyph'), + (None, 'animate'), + (None, 'animateColor'), + (None, 'animateMotion'), + (None, 'animateTransform'), + (None, 'cursor'), + (None, 'feImage'), + (None, 'filter'), + (None, 'linearGradient'), + (None, 'pattern'), + (None, 'radialGradient'), + (None, 'textpath'), + (None, 'tref'), + (None, 'set'), + (None, 'use') +)) + +allowed_css_properties = frozenset(( + 'azimuth', + 'background-color', + 'border-bottom-color', + 'border-collapse', + 'border-color', + 'border-left-color', + 'border-right-color', + 'border-top-color', + 'clear', + 'color', + 'cursor', + 'direction', + 'display', + 'elevation', + 'float', + 'font', + 'font-family', + 'font-size', + 'font-style', + 'font-variant', + 'font-weight', + 'height', + 'letter-spacing', + 'line-height', + 'overflow', + 'pause', + 'pause-after', + 'pause-before', + 'pitch', + 'pitch-range', + 'richness', + 'speak', + 'speak-header', + 'speak-numeral', + 'speak-punctuation', + 'speech-rate', + 'stress', + 'text-align', + 'text-decoration', + 'text-indent', + 'unicode-bidi', + 'vertical-align', + 'voice-family', + 'volume', + 'white-space', + 'width', +)) + +allowed_css_keywords = frozenset(( + 'auto', + 'aqua', + 'black', + 'block', + 'blue', + 'bold', + 'both', + 'bottom', + 'brown', + 'center', + 'collapse', + 'dashed', + 'dotted', + 'fuchsia', + 'gray', + 'green', + '!important', + 'italic', + 'left', + 'lime', + 'maroon', + 'medium', + 'none', + 'navy', + 'normal', + 'nowrap', + 'olive', + 'pointer', + 'purple', + 'red', + 'right', + 'solid', + 'silver', + 'teal', + 'top', + 'transparent', + 'underline', + 'white', + 'yellow', +)) + +allowed_svg_properties = frozenset(( + 'fill', + 'fill-opacity', + 'fill-rule', + 'stroke', + 'stroke-width', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-opacity', +)) + +allowed_protocols = frozenset(( + 'ed2k', + 'ftp', + 'http', + 'https', + 'irc', + 'mailto', + 'news', + 'gopher', + 'nntp', + 'telnet', + 'webcal', + 'xmpp', + 'callto', + 'feed', + 'urn', + 'aim', + 'rsync', + 'tag', + 'ssh', + 'sftp', + 'rtsp', + 'afs', + 'data', +)) + +allowed_content_types = frozenset(( + 'image/png', + 'image/jpeg', + 'image/gif', + 'image/webp', + 'image/bmp', + 'text/plain', +)) + + +data_content_type = re.compile(r''' + ^ + # Match a content type / + (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) + # Match any character set and encoding + (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) + |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) + # Assume the rest is data + ,.* + $ + ''', + re.VERBOSE) + + +class Filter(base.Filter): + """Sanitizes token stream of XHTML+MathML+SVG and of inline style attributes""" + def __init__(self, + source, + allowed_elements=allowed_elements, + allowed_attributes=allowed_attributes, + allowed_css_properties=allowed_css_properties, + allowed_css_keywords=allowed_css_keywords, + allowed_svg_properties=allowed_svg_properties, + allowed_protocols=allowed_protocols, + allowed_content_types=allowed_content_types, + attr_val_is_uri=attr_val_is_uri, + svg_attr_val_allows_ref=svg_attr_val_allows_ref, + svg_allow_local_href=svg_allow_local_href): + """Creates a Filter + + :arg allowed_elements: set of elements to allow--everything else will + be escaped + + :arg allowed_attributes: set of attributes to allow in + elements--everything else will be stripped + + :arg allowed_css_properties: set of CSS properties to allow--everything + else will be stripped + + :arg allowed_css_keywords: set of CSS keywords to allow--everything + else will be stripped + + :arg allowed_svg_properties: set of SVG properties to allow--everything + else will be removed + + :arg allowed_protocols: set of allowed protocols for URIs + + :arg allowed_content_types: set of allowed content types for ``data`` URIs. + + :arg attr_val_is_uri: set of attributes that have URI values--values + that have a scheme not listed in ``allowed_protocols`` are removed + + :arg svg_attr_val_allows_ref: set of SVG attributes that can have + references + + :arg svg_allow_local_href: set of SVG elements that can have local + hrefs--these are removed + + """ + super(Filter, self).__init__(source) + + warnings.warn(_deprecation_msg, DeprecationWarning) + + self.allowed_elements = allowed_elements + self.allowed_attributes = allowed_attributes + self.allowed_css_properties = allowed_css_properties + self.allowed_css_keywords = allowed_css_keywords + self.allowed_svg_properties = allowed_svg_properties + self.allowed_protocols = allowed_protocols + self.allowed_content_types = allowed_content_types + self.attr_val_is_uri = attr_val_is_uri + self.svg_attr_val_allows_ref = svg_attr_val_allows_ref + self.svg_allow_local_href = svg_allow_local_href + + def __iter__(self): + for token in base.Filter.__iter__(self): + token = self.sanitize_token(token) + if token: + yield token + + # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and + # stripping out all attributes not in ALLOWED_ATTRIBUTES. Style attributes + # are parsed, and a restricted set, specified by ALLOWED_CSS_PROPERTIES and + # ALLOWED_CSS_KEYWORDS, are allowed through. attributes in ATTR_VAL_IS_URI + # are scanned, and only URI schemes specified in ALLOWED_PROTOCOLS are + # allowed. + # + # sanitize_html('') + # => <script> do_nasty_stuff() </script> + # sanitize_html('Click here for $100') + # => Click here for $100 + def sanitize_token(self, token): + + # accommodate filters which use token_type differently + token_type = token["type"] + if token_type in ("StartTag", "EndTag", "EmptyTag"): + name = token["name"] + namespace = token["namespace"] + if ((namespace, name) in self.allowed_elements or + (namespace is None and + (namespaces["html"], name) in self.allowed_elements)): + return self.allowed_token(token) + else: + return self.disallowed_token(token) + elif token_type == "Comment": + pass + else: + return token + + def allowed_token(self, token): + if "data" in token: + attrs = token["data"] + attr_names = set(attrs.keys()) + + # Remove forbidden attributes + for to_remove in (attr_names - self.allowed_attributes): + del token["data"][to_remove] + attr_names.remove(to_remove) + + # Remove attributes with disallowed URL values + for attr in (attr_names & self.attr_val_is_uri): + assert attr in attrs + # I don't have a clue where this regexp comes from or why it matches those + # characters, nor why we call unescape. I just know it's always been here. + # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all + # this will do is remove *more* than it otherwise would. + val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\\s]+", '', + unescape(attrs[attr])).lower() + # remove replacement characters from unescaped characters + val_unescaped = val_unescaped.replace("\ufffd", "") + try: + uri = urlparse.urlparse(val_unescaped) + except ValueError: + uri = None + del attrs[attr] + if uri and uri.scheme: + if uri.scheme not in self.allowed_protocols: + del attrs[attr] + if uri.scheme == 'data': + m = data_content_type.match(uri.path) + if not m: + del attrs[attr] + elif m.group('content_type') not in self.allowed_content_types: + del attrs[attr] + + for attr in self.svg_attr_val_allows_ref: + if attr in attrs: + attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', + ' ', + unescape(attrs[attr])) + if (token["name"] in self.svg_allow_local_href and + (namespaces['xlink'], 'href') in attrs and re.search(r'^\s*[^#\s].*', + attrs[(namespaces['xlink'], 'href')])): + del attrs[(namespaces['xlink'], 'href')] + if (None, 'style') in attrs: + attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) + token["data"] = attrs + return token + + def disallowed_token(self, token): + token_type = token["type"] + if token_type == "EndTag": + token["data"] = "" % token["name"] + elif token["data"]: + assert token_type in ("StartTag", "EmptyTag") + attrs = [] + for (ns, name), v in token["data"].items(): + attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) + token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) + else: + token["data"] = "<%s>" % token["name"] + if token.get("selfClosing"): + token["data"] = token["data"][:-1] + "/>" + + token["type"] = "Characters" + + del token["name"] + return token + + def sanitize_css(self, style): + # disallow urls + style = re.compile(r'url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) + + # gauntlet + if not re.match(r"""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): + return '' + if not re.match(r"^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): + return '' + + clean = [] + for prop, value in re.findall(r"([-\w]+)\s*:\s*([^:;]*)", style): + if not value: + continue + if prop.lower() in self.allowed_css_properties: + clean.append(prop + ': ' + value + ';') + elif prop.split('-')[0].lower() in ['background', 'border', 'margin', + 'padding']: + for keyword in value.split(): + if keyword not in self.allowed_css_keywords and \ + not re.match(r"^(#[0-9a-fA-F]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa + break + else: + clean.append(prop + ': ' + value + ';') + elif prop.lower() in self.allowed_svg_properties: + clean.append(prop + ': ' + value + ';') + + return ' '.join(clean) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py new file mode 100644 index 000000000..0d12584b4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py @@ -0,0 +1,38 @@ +from __future__ import absolute_import, division, unicode_literals + +import re + +from . import base +from ..constants import rcdataElements, spaceCharacters +spaceCharacters = "".join(spaceCharacters) + +SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) + + +class Filter(base.Filter): + """Collapses whitespace except in pre, textarea, and script elements""" + spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) + + def __iter__(self): + preserve = 0 + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag" \ + and (preserve or token["name"] in self.spacePreserveElements): + preserve += 1 + + elif type == "EndTag" and preserve: + preserve -= 1 + + elif not preserve and type == "SpaceCharacters" and token["data"]: + # Test on token["data"] above to not introduce spaces where there were not + token["data"] = " " + + elif not preserve and type == "Characters": + token["data"] = collapse_spaces(token["data"]) + + yield token + + +def collapse_spaces(text): + return SPACES_REGEX.sub(' ', text) diff --git a/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py b/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py new file mode 100644 index 000000000..d06784f3d --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py @@ -0,0 +1,2795 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import with_metaclass, viewkeys + +import types + +from . import _inputstream +from . import _tokenizer + +from . import treebuilders +from .treebuilders.base import Marker + +from . import _utils +from .constants import ( + spaceCharacters, asciiUpper2Lower, + specialElements, headingElements, cdataElements, rcdataElements, + tokenTypes, tagTokenTypes, + namespaces, + htmlIntegrationPointElements, mathmlTextIntegrationPointElements, + adjustForeignAttributes as adjustForeignAttributesMap, + adjustMathMLAttributes, adjustSVGAttributes, + E, + _ReparseException +) + + +def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML document as a string or file-like object into a tree + + :arg doc: the document to parse as a string or file-like object + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import parse + >>> parse('

      +9b!*g&52Q7e0dNI0EM!iz> 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9d2aa98fd9a89a586d8e8a9c5e256ecef3a9911 GIT binary patch literal 38385 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ⅈ{95n6@d^C~En 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 W146sJ%suWEYOeQ|`x3`{mH!X3+;`jn literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d0d0ecf6ef1b596922081b39eb8c3ef526111f3 GIT binary patch literal 26564 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ace4606c14f7e4d0888c6b1d16252b67ad2b6e2c GIT binary patch literal 11256 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 K1^v+NX!t*fdeh1P literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8790b9e7f41f1b744acf134189533501103f89df GIT binary patch literal 20153 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 xj=^;@9E0`6j7P0+h2wF{`gR8?j{$HopPgDQ^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py new file mode 100644 index 000000000..f7dbf4c9a --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py @@ -0,0 +1,6 @@ +"""Modules copied from Python 3 standard libraries, for internal use only. + +Individual classes and functions are found in d2._backport.misc. Intended +usage is to always import things missing from 3.1 from that module: the +built-in/stdlib objects will be used if found. +""" diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..702d944f52a774903f7fd9a3e66b0c58e748c11a GIT binary patch literal 485 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ΠY< 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 RT1_E*0ncQ*4^B^y|2IOft84%O literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5574816d8ccf67c9050c0084cb175411603a7892 GIT binary patch literal 62482 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 ignored_names + + Since copytree() is called recursively, the callable will be + called once for each directory that is copied. It returns a + list of names relative to the `src` directory that should + not be copied. + + The optional copy_function argument is a callable that will be used + to copy each file. It will be called with the source path and the + destination path as arguments. By default, copy2() is used, but any + function that supports the same signature (like copy()) can be used. + + """ + names = os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.islink(srcname): + linkto = os.readlink(srcname) + if symlinks: + os.symlink(linkto, dstname) + else: + # ignore dangling symlink if the flag is on + if not os.path.exists(linkto) and ignore_dangling_symlinks: + continue + # otherwise let the copy occurs. copy2 will raise an error + copy_function(srcname, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, copy_function) + else: + # Will raise a SpecialFileError for unsupported file types + copy_function(srcname, dstname) + # catch the Error from the recursive copytree so that we can + # continue with other files + except Error as err: + errors.extend(err.args[0]) + except EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + copystat(src, dst) + except OSError as why: + if WindowsError is not None and isinstance(why, WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.extend((src, dst, str(why))) + if errors: + raise Error(errors) + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + try: + if os.path.islink(path): + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + # can't continue even if onerror hook returns + return + names = [] + try: + names = os.listdir(path) + except os.error: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + + +def _basename(path): + # A basename() variant which first strips the trailing slash, if present. + # Thus we always get the last component of the path, even for directories. + return os.path.basename(path.rstrip(os.path.sep)) + +def move(src, dst): + """Recursively move a file or directory to another location. This is + similar to the Unix "mv" command. + + If the destination is a directory or a symlink to a directory, the source + is moved inside the directory. The destination path must not already + exist. + + If the destination already exists but is not a directory, it may be + overwritten depending on os.rename() semantics. + + If the destination is on our current filesystem, then rename() is used. + Otherwise, src is copied to the destination and then removed. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + real_dst = dst + if os.path.isdir(dst): + if _samefile(src, dst): + # We might be on a case insensitive filesystem, + # perform the rename anyway. + os.rename(src, dst) + return + + real_dst = os.path.join(dst, _basename(src)) + if os.path.exists(real_dst): + raise Error("Destination path '%s' already exists" % real_dst) + try: + os.rename(src, real_dst) + except OSError: + if os.path.isdir(src): + if _destinsrc(src, dst): + raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) + copytree(src, real_dst, symlinks=True) + rmtree(src) + else: + copy2(src, real_dst) + os.unlink(src) + +def _destinsrc(src, dst): + src = abspath(src) + dst = abspath(dst) + if not src.endswith(os.path.sep): + src += os.path.sep + if not dst.endswith(os.path.sep): + dst += os.path.sep + return dst.startswith(src) + +def _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + return None + try: + result = getgrnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _get_uid(name): + """Returns an uid, given a user name.""" + if getpwnam is None or name is None: + return None + try: + result = getpwnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, + owner=None, group=None, logger=None): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", or None. + + 'owner' and 'group' can be used to define an owner and a group for the + archive that is being built. If not provided, the current owner and group + will be used. + + The output tar file will be named 'base_name' + ".tar", possibly plus + the appropriate compression extension (".gz", or ".bz2"). + + Returns the output filename. + """ + tar_compression = {'gzip': 'gz', None: ''} + compress_ext = {'gzip': '.gz'} + + if _BZ2_SUPPORTED: + tar_compression['bzip2'] = 'bz2' + compress_ext['bzip2'] = '.bz2' + + # flags for compression program, each element of list will be an argument + if compress is not None and compress not in compress_ext: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) + + archive_name = base_name + '.tar' + compress_ext.get(compress, '') + archive_dir = os.path.dirname(archive_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # creating the tarball + if logger is not None: + logger.info('Creating tar archive') + + uid = _get_uid(owner) + gid = _get_gid(group) + + def _set_uid_gid(tarinfo): + if gid is not None: + tarinfo.gid = gid + tarinfo.gname = group + if uid is not None: + tarinfo.uid = uid + tarinfo.uname = owner + return tarinfo + + if not dry_run: + tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + return archive_name + +def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): + # XXX see if we want to keep an external call here + if verbose: + zipoptions = "-r" + else: + zipoptions = "-rq" + from distutils.errors import DistutilsExecError + from distutils.spawn import spawn + try: + spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) + except DistutilsExecError: + # XXX really should distinguish between "couldn't find + # external 'zip' command" and "zip failed". + raise ExecError("unable to create zip file '%s': " + "could neither import the 'zipfile' module nor " + "find a standalone zip utility") % zip_filename + +def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Uses either the + "zipfile" Python module (if available) or the InfoZIP "zip" utility + (if installed and found on the default search path). If neither tool is + available, raises ExecError. Returns the name of the output zip + file. + """ + zip_filename = base_name + ".zip" + archive_dir = os.path.dirname(base_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # If zipfile module is not available, try spawning an external 'zip' + # command. + try: + import zipfile + except ImportError: + zipfile = None + + if zipfile is None: + _call_external_zip(base_dir, zip_filename, verbose, dry_run) + else: + if logger is not None: + logger.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) + + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + zip.close() + + return zip_filename + +_ARCHIVE_FORMATS = { + 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), + 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), + 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), + 'zip': (_make_zipfile, [], "ZIP file"), + } + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") + +def get_archive_formats(): + """Returns a list of supported formats for archiving and unarchiving. + + Each element of the returned sequence is a tuple (name, description) + """ + formats = [(name, registry[2]) for name, registry in + _ARCHIVE_FORMATS.items()] + formats.sort() + return formats + +def register_archive_format(name, function, extra_args=None, description=''): + """Registers an archive format. + + name is the name of the format. function is the callable that will be + used to create archives. If provided, extra_args is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_archive_formats() function. + """ + if extra_args is None: + extra_args = [] + if not isinstance(function, Callable): + raise TypeError('The %s object is not callable' % function) + if not isinstance(extra_args, (tuple, list)): + raise TypeError('extra_args needs to be a sequence') + for element in extra_args: + if not isinstance(element, (tuple, list)) or len(element) !=2: + raise TypeError('extra_args elements are : (arg_name, value)') + + _ARCHIVE_FORMATS[name] = (function, extra_args, description) + +def unregister_archive_format(name): + del _ARCHIVE_FORMATS[name] + +def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, + dry_run=0, owner=None, group=None, logger=None): + """Create an archive file (eg. zip or tar). + + 'base_name' is the name of the file to create, minus any format-specific + extension; 'format' is the archive format: one of "zip", "tar", "bztar" + or "gztar". + + 'root_dir' is a directory that will be the root directory of the + archive; ie. we typically chdir into 'root_dir' before creating the + archive. 'base_dir' is the directory where we start archiving from; + ie. 'base_dir' will be the common prefix of all files and + directories in the archive. 'root_dir' and 'base_dir' both default + to the current directory. Returns the name of the archive file. + + 'owner' and 'group' are used when creating a tar archive. By default, + uses the current owner and group. + """ + save_cwd = os.getcwd() + if root_dir is not None: + if logger is not None: + logger.debug("changing into '%s'", root_dir) + base_name = os.path.abspath(base_name) + if not dry_run: + os.chdir(root_dir) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run, 'logger': logger} + + try: + format_info = _ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir is not None: + if logger is not None: + logger.debug("changing back to '%s'", save_cwd) + os.chdir(save_cwd) + + return filename + + +def get_unpack_formats(): + """Returns a list of supported formats for unpacking. + + Each element of the returned sequence is a tuple + (name, extensions, description) + """ + formats = [(name, info[0], info[3]) for name, info in + _UNPACK_FORMATS.items()] + formats.sort() + return formats + +def _check_unpack_options(extensions, function, extra_args): + """Checks what gets registered as an unpacker.""" + # first make sure no other unpacker is registered for this extension + existing_extensions = {} + for name, info in _UNPACK_FORMATS.items(): + for ext in info[0]: + existing_extensions[ext] = name + + for extension in extensions: + if extension in existing_extensions: + msg = '%s is already registered for "%s"' + raise RegistryError(msg % (extension, + existing_extensions[extension])) + + if not isinstance(function, Callable): + raise TypeError('The registered function must be a callable') + + +def register_unpack_format(name, extensions, function, extra_args=None, + description=''): + """Registers an unpack format. + + `name` is the name of the format. `extensions` is a list of extensions + corresponding to the format. + + `function` is the callable that will be + used to unpack archives. The callable will receive archives to unpack. + If it's unable to handle an archive, it needs to raise a ReadError + exception. + + If provided, `extra_args` is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_unpack_formats() function. + """ + if extra_args is None: + extra_args = [] + _check_unpack_options(extensions, function, extra_args) + _UNPACK_FORMATS[name] = extensions, function, extra_args, description + +def unregister_unpack_format(name): + """Removes the pack format from the registry.""" + del _UNPACK_FORMATS[name] + +def _ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def _unpack_zipfile(filename, extract_dir): + """Unpack zip `filename` to `extract_dir` + """ + try: + import zipfile + except ImportError: + raise ReadError('zlib not supported, cannot unpack this archive.') + + if not zipfile.is_zipfile(filename): + raise ReadError("%s is not a zip file" % filename) + + zip = zipfile.ZipFile(filename) + try: + for info in zip.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name: + continue + + target = os.path.join(extract_dir, *name.split('/')) + if not target: + continue + + _ensure_directory(target) + if not name.endswith('/'): + # file + data = zip.read(info.filename) + f = open(target, 'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + zip.close() + +def _unpack_tarfile(filename, extract_dir): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise ReadError( + "%s is not a compressed or uncompressed tar file" % filename) + try: + tarobj.extractall(extract_dir) + finally: + tarobj.close() + +_UNPACK_FORMATS = { + 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), + 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") + } + +if _BZ2_SUPPORTED: + _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], + "bzip2'ed tar-file") + +def _find_unpack_format(filename): + for name, info in _UNPACK_FORMATS.items(): + for extension in info[0]: + if filename.endswith(extension): + return name + return None + +def unpack_archive(filename, extract_dir=None, format=None): + """Unpack an archive. + + `filename` is the name of the archive. + + `extract_dir` is the name of the target directory, where the archive + is unpacked. If not provided, the current working directory is used. + + `format` is the archive format: one of "zip", "tar", or "gztar". Or any + other registered format. If not provided, unpack_archive will use the + filename extension and see if an unpacker was registered for that + extension. + + In case none is found, a ValueError is raised. + """ + if extract_dir is None: + extract_dir = os.getcwd() + + if format is not None: + try: + format_info = _UNPACK_FORMATS[format] + except KeyError: + raise ValueError("Unknown unpack format '{0}'".format(format)) + + func = format_info[1] + func(filename, extract_dir, **dict(format_info[2])) + else: + # we need to look at the registered unpackers supported extensions + format = _find_unpack_format(filename) + if format is None: + raise ReadError("Unknown archive format '{0}'".format(filename)) + + func = _UNPACK_FORMATS[format][1] + kwargs = dict(_UNPACK_FORMATS[format][2]) + func(filename, extract_dir, **kwargs) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg new file mode 100644 index 000000000..1746bd01c --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg @@ -0,0 +1,84 @@ +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in [resource_locations]. +confdir = /etc +datadir = /usr/share +libdir = /usr/lib +statedir = /var +# User resource directory +local = ~/.local/{distribution.name} + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short}{abiflags} +platinclude = {platbase}/include/python{py_version_short}{abiflags} +data = {base} + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[osx_framework_user] +stdlib = {userbase}/lib/python +platstdlib = {userbase}/lib/python +purelib = {userbase}/lib/python/site-packages +platlib = {userbase}/lib/python/site-packages +include = {userbase}/include +scripts = {userbase}/bin +data = {userbase} diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py new file mode 100644 index 000000000..b470a373c --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py @@ -0,0 +1,786 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Access to Python's configuration information.""" + +import codecs +import os +import re +import sys +from os.path import pardir, realpath +try: + import configparser +except ImportError: + import ConfigParser as configparser + + +__all__ = [ + 'get_config_h_filename', + 'get_config_var', + 'get_config_vars', + 'get_makefile_filename', + 'get_path', + 'get_path_names', + 'get_paths', + 'get_platform', + 'get_python_version', + 'get_scheme_names', + 'parse_config_h', +] + + +def _safe_realpath(path): + try: + return realpath(path) + except OSError: + return path + + +if sys.executable: + _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = _safe_realpath(os.getcwd()) + +if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) +# PC/VS7.1 +if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) + + +def is_python_build(): + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): + return True + return False + +_PYTHON_BUILD = is_python_build() + +_cfg_read = False + +def _ensure_cfg_read(): + global _cfg_read + if not _cfg_read: + from ..resources import finder + backport_package = __name__.rsplit('.', 1)[0] + _finder = finder(backport_package) + _cfgfile = _finder.find('sysconfig.cfg') + assert _cfgfile, 'sysconfig.cfg exists' + with _cfgfile.as_stream() as s: + _SCHEMES.readfp(s) + if _PYTHON_BUILD: + for scheme in ('posix_prefix', 'posix_home'): + _SCHEMES.set(scheme, 'include', '{srcdir}/Include') + _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') + + _cfg_read = True + + +_SCHEMES = configparser.RawConfigParser() +_VAR_REPL = re.compile(r'\{([^{]*?)\}') + +def _expand_globals(config): + _ensure_cfg_read() + if config.has_section('globals'): + globals = config.items('globals') + else: + globals = tuple() + + sections = config.sections() + for section in sections: + if section == 'globals': + continue + for option, value in globals: + if config.has_option(section, option): + continue + config.set(section, option, value) + config.remove_section('globals') + + # now expanding local variables defined in the cfg file + # + for section in config.sections(): + variables = dict(config.items(section)) + + def _replacer(matchobj): + name = matchobj.group(1) + if name in variables: + return variables[name] + return matchobj.group(0) + + for option, value in config.items(section): + config.set(section, option, _VAR_REPL.sub(_replacer, value)) + +#_expand_globals(_SCHEMES) + +_PY_VERSION = '%s.%s.%s' % sys.version_info[:3] +_PY_VERSION_SHORT = '%s.%s' % sys.version_info[:2] +_PY_VERSION_SHORT_NO_DOT = '%s%s' % sys.version_info[:2] +_PREFIX = os.path.normpath(sys.prefix) +_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +_CONFIG_VARS = None +_USER_BASE = None + + +def _subst_vars(path, local_vars): + """In the string `path`, replace tokens like {some.thing} with the + corresponding value from the map `local_vars`. + + If there is no corresponding value, leave the token unchanged. + """ + def _replacer(matchobj): + name = matchobj.group(1) + if name in local_vars: + return local_vars[name] + elif name in os.environ: + return os.environ[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, path) + + +def _extend_dict(target_dict, other_dict): + target_keys = target_dict.keys() + for key, value in other_dict.items(): + if key in target_keys: + continue + target_dict[key] = value + + +def _expand_vars(scheme, vars): + res = {} + if vars is None: + vars = {} + _extend_dict(vars, get_config_vars()) + + for key, value in _SCHEMES.items(scheme): + if os.name in ('posix', 'nt'): + value = os.path.expanduser(value) + res[key] = os.path.normpath(_subst_vars(value, vars)) + return res + + +def format_value(value, vars): + def _replacer(matchobj): + name = matchobj.group(1) + if name in vars: + return vars[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, value) + + +def _get_default_scheme(): + if os.name == 'posix': + # the default scheme for posix is posix_prefix + return 'posix_prefix' + return os.name + + +def _getuserbase(): + env_base = os.environ.get("PYTHONUSERBASE", None) + + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + + # what about 'os2emx', 'riscos' ? + if os.name == "nt": + base = os.environ.get("APPDATA") or "~" + if env_base: + return env_base + else: + return joinuser(base, "Python") + + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + if env_base: + return env_base + else: + return joinuser("~", "Library", framework, "%d.%d" % + sys.version_info[:2]) + + if env_base: + return env_base + else: + return joinuser("~", ".local") + + +def _parse_makefile(filename, vars=None): + """Parse a Makefile-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + # Regexes needed for parsing Makefile (and similar syntaxes, + # like old-style Setup files). + _variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") + _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") + _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") + + if vars is None: + vars = {} + done = {} + notdone = {} + + with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: + lines = f.readlines() + + for line in lines: + if line.startswith('#') or line.strip() == '': + continue + m = _variable_rx.match(line) + if m: + n, v = m.group(1, 2) + v = v.strip() + # `$$' is a literal `$' in make + tmpv = v.replace('$$', '') + + if "$" in tmpv: + notdone[n] = v + else: + try: + v = int(v) + except ValueError: + # insert literal `$' + done[n] = v.replace('$$', '$') + else: + done[n] = v + + # do variable interpolation here + variables = list(notdone.keys()) + + # Variables with a 'PY_' prefix in the makefile. These need to + # be made available without that prefix through sysconfig. + # Special care is needed to ensure that variable expansion works, even + # if the expansion uses the name without a prefix. + renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') + + while len(variables) > 0: + for name in tuple(variables): + value = notdone[name] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + if m is not None: + n = m.group(1) + found = True + if n in done: + item = str(done[n]) + elif n in notdone: + # get it on a subsequent round + found = False + elif n in os.environ: + # do it like make: fall back to environment + item = os.environ[n] + + elif n in renamed_variables: + if (name.startswith('PY_') and + name[3:] in renamed_variables): + item = "" + + elif 'PY_' + n in notdone: + found = False + + else: + item = str(done['PY_' + n]) + + else: + done[n] = item = "" + + if found: + after = value[m.end():] + value = value[:m.start()] + item + after + if "$" in after: + notdone[name] = value + else: + try: + value = int(value) + except ValueError: + done[name] = value.strip() + else: + done[name] = value + variables.remove(name) + + if (name.startswith('PY_') and + name[3:] in renamed_variables): + + name = name[3:] + if name not in done: + done[name] = value + + else: + # bogus variable reference (e.g. "prefix=$/opt/python"); + # just drop it since we can't deal + done[name] = value + variables.remove(name) + + # strip spurious spaces + for k, v in done.items(): + if isinstance(v, str): + done[k] = v.strip() + + # save the results in the global dictionary + vars.update(done) + return vars + + +def get_makefile_filename(): + """Return the path of the Makefile.""" + if _PYTHON_BUILD: + return os.path.join(_PROJECT_BASE, "Makefile") + if hasattr(sys, 'abiflags'): + config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) + else: + config_dir_name = 'config' + return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') + + +def _init_posix(vars): + """Initialize the module as appropriate for POSIX systems.""" + # load the installed Makefile: + makefile = get_makefile_filename() + try: + _parse_makefile(makefile, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % makefile + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # load the installed pyconfig.h: + config_h = get_config_h_filename() + try: + with open(config_h) as f: + parse_config_h(f, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % config_h + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # On AIX, there are wrong paths to the linker scripts in the Makefile + # -- these paths are relative to the Python source, but when installed + # the scripts are in another directory. + if _PYTHON_BUILD: + vars['LDSHARED'] = vars['BLDSHARED'] + + +def _init_non_posix(vars): + """Initialize the module as appropriate for NT""" + # set basic install directories + vars['LIBDEST'] = get_path('stdlib') + vars['BINLIBDEST'] = get_path('platstdlib') + vars['INCLUDEPY'] = get_path('include') + vars['SO'] = '.pyd' + vars['EXE'] = '.exe' + vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + +# +# public APIs +# + + +def parse_config_h(fp, vars=None): + """Parse a config.h-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + if vars is None: + vars = {} + define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") + undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + + while True: + line = fp.readline() + if not line: + break + m = define_rx.match(line) + if m: + n, v = m.group(1, 2) + try: + v = int(v) + except ValueError: + pass + vars[n] = v + else: + m = undef_rx.match(line) + if m: + vars[m.group(1)] = 0 + return vars + + +def get_config_h_filename(): + """Return the path of pyconfig.h.""" + if _PYTHON_BUILD: + if os.name == "nt": + inc_dir = os.path.join(_PROJECT_BASE, "PC") + else: + inc_dir = _PROJECT_BASE + else: + inc_dir = get_path('platinclude') + return os.path.join(inc_dir, 'pyconfig.h') + + +def get_scheme_names(): + """Return a tuple containing the schemes names.""" + return tuple(sorted(_SCHEMES.sections())) + + +def get_path_names(): + """Return a tuple containing the paths names.""" + # xxx see if we want a static list + return _SCHEMES.options('posix_prefix') + + +def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): + """Return a mapping containing an install scheme. + + ``scheme`` is the install scheme name. If not provided, it will + return the default scheme for the current platform. + """ + _ensure_cfg_read() + if expand: + return _expand_vars(scheme, vars) + else: + return dict(_SCHEMES.items(scheme)) + + +def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): + """Return a path corresponding to the scheme. + + ``scheme`` is the install scheme name. + """ + return get_paths(scheme, vars, expand)[name] + + +def get_config_vars(*args): + """With no arguments, return a dictionary of all configuration + variables relevant for the current platform. + + On Unix, this means every variable defined in Python's installed Makefile; + On Windows and Mac OS it's a much smaller set. + + With arguments, return a list of values that result from looking up + each argument in the configuration variable dictionary. + """ + global _CONFIG_VARS + if _CONFIG_VARS is None: + _CONFIG_VARS = {} + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # distutils2 module. + _CONFIG_VARS['prefix'] = _PREFIX + _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX + _CONFIG_VARS['py_version'] = _PY_VERSION + _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT + _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] + _CONFIG_VARS['base'] = _PREFIX + _CONFIG_VARS['platbase'] = _EXEC_PREFIX + _CONFIG_VARS['projectbase'] = _PROJECT_BASE + try: + _CONFIG_VARS['abiflags'] = sys.abiflags + except AttributeError: + # sys.abiflags may not be defined on all platforms. + _CONFIG_VARS['abiflags'] = '' + + if os.name in ('nt', 'os2'): + _init_non_posix(_CONFIG_VARS) + if os.name == 'posix': + _init_posix(_CONFIG_VARS) + # Setting 'userbase' is done below the call to the + # init function to enable using 'get_config_var' in + # the init-function. + if sys.version >= '2.6': + _CONFIG_VARS['userbase'] = _getuserbase() + + if 'srcdir' not in _CONFIG_VARS: + _CONFIG_VARS['srcdir'] = _PROJECT_BASE + else: + _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) + + # Convert srcdir into an absolute path if it appears necessary. + # Normally it is relative to the build directory. However, during + # testing, for example, we might be running a non-installed python + # from a different directory. + if _PYTHON_BUILD and os.name == "posix": + base = _PROJECT_BASE + try: + cwd = os.getcwd() + except OSError: + cwd = None + if (not os.path.isabs(_CONFIG_VARS['srcdir']) and + base != cwd): + # srcdir is relative and we are not in the same directory + # as the executable. Assume executable is in the build + # directory and make srcdir absolute. + srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) + _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) + + if sys.platform == 'darwin': + kernel_version = os.uname()[2] # Kernel version (8.4.3) + major_version = int(kernel_version.split('.')[0]) + + if major_version < 8: + # On Mac OS X before 10.4, check if -arch and -isysroot + # are in CFLAGS or LDFLAGS and remove them if they are. + # This is needed when building extensions on a 10.3 system + # using a universal build of python. + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) + _CONFIG_VARS[key] = flags + else: + # Allow the user to override the architecture flags using + # an environment variable. + # NOTE: This name was introduced by Apple in OSX 10.5 and + # is used by several scripting languages distributed with + # that OS release. + if 'ARCHFLAGS' in os.environ: + arch = os.environ['ARCHFLAGS'] + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = flags + ' ' + arch + _CONFIG_VARS[key] = flags + + # If we're on OSX 10.5 or later and the user tries to + # compiles an extension using an SDK that is not present + # on the current machine it is better to not use an SDK + # than to fail. + # + # The major usecase for this is users using a Python.org + # binary installer on OSX 10.6: that installer uses + # the 10.4u SDK, but that SDK is not installed by default + # when you install Xcode. + # + CFLAGS = _CONFIG_VARS.get('CFLAGS', '') + m = re.search(r'-isysroot\s+(\S+)', CFLAGS) + if m is not None: + sdk = m.group(1) + if not os.path.exists(sdk): + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-isysroot\s+\S+(\s|$)', ' ', flags) + _CONFIG_VARS[key] = flags + + if args: + vals = [] + for name in args: + vals.append(_CONFIG_VARS.get(name)) + return vals + else: + return _CONFIG_VARS + + +def get_config_var(name): + """Return the value of a single variable using the dictionary returned by + 'get_config_vars()'. + + Equivalent to get_config_vars().get(name) + """ + return get_config_vars().get(name) + + +def get_platform(): + """Return a string that identifies the current platform. + + This is used mainly to distinguish platform-specific build directories and + platform-specific built distributions. Typically includes the OS name + and version and the architecture (as supplied by 'os.uname()'), + although the exact information included depends on the OS; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return sys.platform + j = sys.version.find(")", i) + look = sys.version[i+len(prefix):j].lower() + if look == 'amd64': + return 'win-amd64' + if look == 'itanium': + return 'win-ia64' + return sys.platform + + if os.name != "posix" or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + osname, host, release, version, machine = os.uname() + + # Convert the OS name to lowercase, remove '/' characters + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_') + machine = machine.replace('/', '-') + + if osname[:5] == "linux": + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + elif osname[:5] == "sunos": + if release[0] >= "5": # SunOS 5 == Solaris 2 + osname = "solaris" + release = "%d.%s" % (int(release[0]) - 3, release[2:]) + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile(r'[\d.]+') + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + # + # For our purposes, we'll assume that the system version from + # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set + # to. This makes the compatibility story a bit more sane because the + # machine is going to compile and link as if it were + # MACOSX_DEPLOYMENT_TARGET. + cfgvars = get_config_vars() + macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') + + if True: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver + # Get the system version. Reading this plist is a documented + # way to get the system version (see the documentation for + # the Gestalt Manager) + try: + f = open('/System/Library/CoreServices/SystemVersion.plist') + except IOError: + # We're on a plain darwin box, fall back to the default + # behaviour. + pass + else: + try: + m = re.search(r'ProductUserVisibleVersion\s*' + r'(.*?)', f.read()) + finally: + f.close() + if m is not None: + macrelease = '.'.join(m.group(1).split('.')[:2]) + # else: fall back to the default behaviour + + if not macver: + macver = macrelease + + if macver: + release = macver + osname = "macosx" + + if ((macrelease + '.') >= '10.4.' and + '-arch' in get_config_vars().get('CFLAGS', '').strip()): + # The universal build will build fat binaries, but not on + # systems before 10.4 + # + # Try to detect 4-way universal builds, those have machine-type + # 'universal' instead of 'fat'. + + machine = 'fat' + cflags = get_config_vars().get('CFLAGS') + + archs = re.findall(r'-arch\s+(\S+)', cflags) + archs = tuple(sorted(set(archs))) + + if len(archs) == 1: + machine = archs[0] + elif archs == ('i386', 'ppc'): + machine = 'fat' + elif archs == ('i386', 'x86_64'): + machine = 'intel' + elif archs == ('i386', 'ppc', 'x86_64'): + machine = 'fat3' + elif archs == ('ppc64', 'x86_64'): + machine = 'fat64' + elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): + machine = 'universal' + else: + raise ValueError( + "Don't know machine value for archs=%r" % (archs,)) + + elif machine == 'i386': + # On OSX the machine type returned by uname is always the + # 32-bit variant, even if the executable architecture is + # the 64-bit variant + if sys.maxsize >= 2**32: + machine = 'x86_64' + + elif machine in ('PowerPC', 'Power_Macintosh'): + # Pick a sane name for the PPC architecture. + # See 'i386' case + if sys.maxsize >= 2**32: + machine = 'ppc64' + else: + machine = 'ppc' + + return "%s-%s-%s" % (osname, release, machine) + + +def get_python_version(): + return _PY_VERSION_SHORT + + +def _print_dict(title, data): + for index, (key, value) in enumerate(sorted(data.items())): + if index == 0: + print('%s: ' % (title)) + print('\t%s = "%s"' % (key, value)) + + +def _main(): + """Display all information sysconfig detains.""" + print('Platform: "%s"' % get_platform()) + print('Python version: "%s"' % get_python_version()) + print('Current installation scheme: "%s"' % _get_default_scheme()) + print() + _print_dict('Paths', get_paths()) + print() + _print_dict('Variables', get_config_vars()) + + +if __name__ == '__main__': + _main() diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py new file mode 100644 index 000000000..d66d85663 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py @@ -0,0 +1,2607 @@ +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +from __future__ import print_function + +"""Read from and write to tar format archives. +""" + +__version__ = "$Revision$" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" +__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +import sys +import os +import stat +import errno +import time +import struct +import copy +import re + +try: + import grp, pwd +except ImportError: + grp = pwd = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +symlink_exception = (AttributeError, NotImplementedError) +try: + # WindowsError (1314) will be raised if the caller does not hold the + # SeCreateSymbolicLinkPrivilege privilege + symlink_exception += (WindowsError,) +except NameError: + pass + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] + +if sys.version_info[0] < 3: + import __builtin__ as builtins +else: + import builtins + +_open = builtins.open # Since 'open' is TarFile.open + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = GNU_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = set(("path", "linkpath", "uname", "gname")) + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# Bits used in the mode field, values in octal. +#--------------------------------------------------------- +S_IFLNK = 0o120000 # symbolic link +S_IFREG = 0o100000 # regular file +S_IFBLK = 0o060000 # block device +S_IFDIR = 0o040000 # directory +S_IFCHR = 0o020000 # character device +S_IFIFO = 0o010000 # fifo + +TSUID = 0o4000 # set UID on execution +TSGID = 0o2000 # set GID on execution +TSVTX = 0o1000 # reserved + +TUREAD = 0o400 # read by owner +TUWRITE = 0o200 # write by owner +TUEXEC = 0o100 # execute/search by owner +TGREAD = 0o040 # read by group +TGWRITE = 0o020 # write by group +TGEXEC = 0o010 # execute/search by group +TOREAD = 0o004 # read by other +TOWRITE = 0o002 # write by other +TOEXEC = 0o001 # execute/search by other + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name in ("nt", "ce"): + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] != chr(0o200): + try: + n = int(nts(s, "ascii", "strict") or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + else: + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += ord(s[i + 1]) + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 byte indicates this particular + # encoding, the following digits-1 bytes are a big-endian + # representation. This allows values up to (256**(digits-1))-1. + if 0 <= n < 8 ** (digits - 1): + s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL + else: + if format != GNU_FORMAT or n >= 256 ** (digits - 1): + raise ValueError("overflow in number field") + + if n < 0: + # XXX We mimic GNU tar's behaviour with negative numbers, + # this could raise OverflowError. + n = struct.unpack("L", struct.pack("l", n))[0] + + s = bytearray() + for i in range(digits - 1): + s.insert(0, n & 0o377) + n >>= 8 + s.insert(0, 0o200) + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) + signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + if length == 0: + return + if length is None: + while True: + buf = src.read(16*1024) + if not buf: + break + dst.write(buf) + return + + BUFSIZE = 16 * 1024 + blocks, remainder = divmod(length, BUFSIZE) + for b in range(blocks): + buf = src.read(BUFSIZE) + if len(buf) < BUFSIZE: + raise IOError("end of file reached") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise IOError("end of file reached") + dst.write(buf) + return + +filemode_table = ( + ((S_IFLNK, "l"), + (S_IFREG, "-"), + (S_IFBLK, "b"), + (S_IFDIR, "d"), + (S_IFCHR, "c"), + (S_IFIFO, "p")), + + ((TUREAD, "r"),), + ((TUWRITE, "w"),), + ((TUEXEC|TSUID, "s"), + (TSUID, "S"), + (TUEXEC, "x")), + + ((TGREAD, "r"),), + ((TGWRITE, "w"),), + ((TGEXEC|TSGID, "s"), + (TSGID, "S"), + (TGEXEC, "x")), + + ((TOREAD, "r"),), + ((TOWRITE, "w"),), + ((TOEXEC|TSVTX, "t"), + (TSVTX, "T"), + (TOEXEC, "x")) +) + +def filemode(mode): + """Convert a file's mode to a string of the form + -rwxrwxrwx. + Used by TarFile.list() + """ + perm = [] + for table in filemode_table: + for bit, char in table: + if mode & bit == bit: + perm.append(char) + break + else: + perm.append("-") + return "".join(perm) + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadable tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile(object): + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream(object): + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method and is accessed + blockwise. Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin, + sys.stdout, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize): + """Construct a _Stream object. + """ + self._extfileobj = True + if fileobj is None: + fileobj = _LowLevelFile(name, mode) + self._extfileobj = False + + if comptype == '*': + # Enable transparent compression detection for the + # stream interface + fileobj = _StreamProxy(fileobj) + comptype = fileobj.getcomptype() + + self.name = name or "" + self.mode = mode + self.comptype = comptype + self.fileobj = fileobj + self.bufsize = bufsize + self.buf = b"" + self.pos = 0 + self.closed = False + + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() + + if comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack(" self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + # The native zlib crc is an unsigned 32-bit integer, but + # the Python wrapper implicitly casts that to a signed C + # long. So, on a 32-bit box self.crc may "look negative", + # while the same crc on a 64-bit box may "look positive". + # To avoid irksome warnings from the `struct` module, force + # it to look positive on all boxes. + self.fileobj.write(struct.pack("= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size=None): + """Return the next size number of bytes from the stream. + If size is not defined, return all bytes of the stream + up to EOF. + """ + if size is None: + t = [] + while True: + buf = self._read(self.bufsize) + if not buf: + break + t.append(buf) + buf = "".join(t) + else: + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + while c < size: + buf = self.__read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except IOError: + raise ReadError("invalid compressed data") + self.dbuf += buf + c += len(buf) + buf = self.dbuf[:size] + self.dbuf = self.dbuf[size:] + return buf + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + self.buf += buf + c += len(buf) + buf = self.buf[:size] + self.buf = self.buf[size:] + return buf +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\037\213\010"): + return "gz" + if self.buf.startswith(b"BZh91"): + return "bz2" + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +class _BZ2Proxy(object): + """Small proxy class that enables external file object + support for "r:bz2" and "w:bz2" modes. This is actually + a workaround for a limitation in bz2 module's BZ2File + class which (unlike gzip.GzipFile) has no support for + a file object argument. + """ + + blocksize = 16 * 1024 + + def __init__(self, fileobj, mode): + self.fileobj = fileobj + self.mode = mode + self.name = getattr(self.fileobj, "name", None) + self.init() + + def init(self): + import bz2 + self.pos = 0 + if self.mode == "r": + self.bz2obj = bz2.BZ2Decompressor() + self.fileobj.seek(0) + self.buf = b"" + else: + self.bz2obj = bz2.BZ2Compressor() + + def read(self, size): + x = len(self.buf) + while x < size: + raw = self.fileobj.read(self.blocksize) + if not raw: + break + data = self.bz2obj.decompress(raw) + self.buf += data + x += len(data) + + buf = self.buf[:size] + self.buf = self.buf[size:] + self.pos += len(buf) + return buf + + def seek(self, pos): + if pos < self.pos: + self.init() + self.read(pos - self.pos) + + def tell(self): + return self.pos + + def write(self, data): + self.pos += len(data) + raw = self.bz2obj.compress(data) + self.fileobj.write(raw) + + def close(self): + if self.mode == "w": + raw = self.bz2obj.flush() + self.fileobj.write(raw) +# class _BZ2Proxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def seekable(self): + if not hasattr(self.fileobj, "seekable"): + # XXX gzip.GzipFile and bz2.BZ2File + return True + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position): + """Seek to a position in the file. + """ + self.position = position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + buf += self.fileobj.read(length) + else: + buf += NUL * length + size -= length + self.position += length + return buf +#class _FileInFile + + +class ExFileObject(object): + """File-like object for reading an archive member. + Is returned by TarFile.extractfile(). + """ + blocksize = 1024 + + def __init__(self, tarfile, tarinfo): + self.fileobj = _FileInFile(tarfile.fileobj, + tarinfo.offset_data, + tarinfo.size, + tarinfo.sparse) + self.name = tarinfo.name + self.mode = "r" + self.closed = False + self.size = tarinfo.size + + self.position = 0 + self.buffer = b"" + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def read(self, size=None): + """Read at most size bytes from the file. If size is not + present or None, read all data until EOF is reached. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + buf = b"" + if self.buffer: + if size is None: + buf = self.buffer + self.buffer = b"" + else: + buf = self.buffer[:size] + self.buffer = self.buffer[size:] + + if size is None: + buf += self.fileobj.read() + else: + buf += self.fileobj.read(size - len(buf)) + + self.position += len(buf) + return buf + + # XXX TextIOWrapper uses the read1() method. + read1 = read + + def readline(self, size=-1): + """Read one entire line from the file. If size is present + and non-negative, return a string with at most that + size, which may be an incomplete line. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + while True: + buf = self.fileobj.read(self.blocksize) + self.buffer += buf + if not buf or b"\n" in buf: + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + pos = len(self.buffer) + break + + if size != -1: + pos = min(size, pos) + + buf = self.buffer[:pos] + self.buffer = self.buffer[pos:] + self.position += len(buf) + return buf + + def readlines(self): + """Return a list with all remaining lines. + """ + result = [] + while True: + line = self.readline() + if not line: break + result.append(line) + return result + + def tell(self): + """Return the current file position. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + return self.position + + def seek(self, pos, whence=os.SEEK_SET): + """Seek to a position in the file. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + if whence == os.SEEK_SET: + self.position = min(max(pos, 0), self.size) + elif whence == os.SEEK_CUR: + if pos < 0: + self.position = max(self.position + pos, 0) + else: + self.position = min(self.position + pos, self.size) + elif whence == os.SEEK_END: + self.position = max(min(self.size + pos, self.size), 0) + else: + raise ValueError("Invalid argument") + + self.buffer = b"" + self.fileobj.seek(self.position) + + def close(self): + """Close the file object. + """ + self.closed = True + + def __iter__(self): + """Get an iterator over the file's lines. + """ + while True: + line = self.readline() + if not line: + break + yield line +#class ExFileObject + +#------------------ +# Exported Classes +#------------------ +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = ("name", "mode", "uid", "gid", "size", "mtime", + "chksum", "type", "linkname", "uname", "gname", + "devmajor", "devminor", + "offset", "offset_data", "pax_headers", "sparse", + "tarfile", "_sparse_structs", "_link_target") + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + # In pax headers the "name" and "linkname" field are called + # "path" and "linkpath". + def _getpath(self): + return self.name + def _setpath(self, name): + self.name = name + path = property(_getpath, _setpath) + + def _getlinkpath(self): + return self.linkname + def _setlinkpath(self, linkname): + self.linkname = linkname + linkpath = property(_getlinkpath, _setlinkpath) + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + info = { + "name": self.name, + "mode": self.mode & 0o7777, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"]) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"]) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"]) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"]) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"]) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + if name in pax_headers: + # The pax header has priority. Avoid overflow. + info[name] = 0 + continue + + val = info[name] + if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): + pax_headers[name] = str(val) + info[name] = 0 + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf8") + + def _posix_split_name(self, name): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + prefix = name[:LENGTH_PREFIX + 1] + while prefix and prefix[-1] != "/": + prefix = prefix[:-1] + + name = name[len(prefix):] + prefix = prefix[:-1] + + if not prefix or len(name) > LENGTH_NAME: + raise ValueError("name is too long") + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + info.get("type", REGTYPE), + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + itn(info.get("devmajor", 0), 8, format), + itn(info.get("devminor", 0), 8, format), + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + ("%06o\0" % chksum).encode("ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf8") + if binary: + # Try to restore the original byte representation of `value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + if len(buf) == 0: + raise EmptyHeaderError("empty header") + if len(buf) != BLOCKSIZE: + raise TruncatedHeaderError("truncated header") + if buf.count(NUL) == BLOCKSIZE: + raise EOFHeaderError("end of file header") + + chksum = nti(buf[148:156]) + if chksum not in calc_chksums(buf): + raise InvalidHeaderError("bad checksum") + + obj = cls() + obj.name = nts(buf[0:100], encoding, errors) + obj.mode = nti(buf[100:108]) + obj.uid = nti(buf[108:116]) + obj.gid = nti(buf[116:124]) + obj.size = nti(buf[124:136]) + obj.mtime = nti(buf[136:148]) + obj.chksum = chksum + obj.type = buf[156:157] + obj.linkname = nts(buf[157:257], encoding, errors) + obj.uname = nts(buf[265:297], encoding, errors) + obj.gname = nts(buf[297:329], encoding, errors) + obj.devmajor = nti(buf[329:337]) + obj.devminor = nti(buf[337:345]) + prefix = nts(buf[345:500], encoding, errors) + + # Old V7 tar format represents a directory as a regular + # file with a trailing slash. + if obj.type == AREGTYPE and obj.name.endswith("/"): + obj.type = DIRTYPE + + # The old GNU sparse format occupies some of the unused + # space in the buffer for up to 4 sparse structures. + # Save the them for later processing in _proc_sparse(). + if obj.type == GNUTYPE_SPARSE: + pos = 386 + structs = [] + for i in range(4): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[482]) + origsize = nti(buf[483:495]) + obj._sparse_structs = (structs, isextended, origsize) + + # Remove redundant slashes from directories. + if obj.isdir(): + obj.name = obj.name.rstrip("/") + + # Reconstruct a ustar longname. + if prefix and obj.type not in GNU_TYPES: + obj.name = prefix + "/" + obj.name + return obj + + @classmethod + def fromtarfile(cls, tarfile): + """Return the next TarInfo object from TarFile object + tarfile. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + obj.offset = tarfile.fileobj.tell() - BLOCKSIZE + return obj._proc_member(tarfile) + + #-------------------------------------------------------------------------- + # The following are methods that are called depending on the type of a + # member. The entry point is _proc_member() which can be overridden in a + # subclass to add custom _proc_*() methods. A _proc_*() method MUST + # implement the following + # operations: + # 1. Set self.offset_data to the position where the data blocks begin, + # if there is data that follows. + # 2. Set tarfile.offset to the position where the next member's header will + # begin. + # 3. Return self or another valid TarInfo object. + def _proc_member(self, tarfile): + """Choose the right processing method depending on + the type and call it. + """ + if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): + return self._proc_gnulong(tarfile) + elif self.type == GNUTYPE_SPARSE: + return self._proc_sparse(tarfile) + elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): + return self._proc_pax(tarfile) + else: + return self._proc_builtin(tarfile) + + def _proc_builtin(self, tarfile): + """Process a builtin type or an unknown type which + will be treated as a regular file. + """ + self.offset_data = tarfile.fileobj.tell() + offset = self.offset_data + if self.isreg() or self.type not in SUPPORTED_TYPES: + # Skip the following data blocks. + offset += self._block(self.size) + tarfile.offset = offset + + # Patch the TarInfo object with saved global + # header information. + self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + return next + + def _proc_sparse(self, tarfile): + """Process a GNU sparse header plus extra headers. + """ + # We already collected some sparse structures in frombuf(). + structs, isextended, origsize = self._sparse_structs + del self._sparse_structs + + # Collect sparse structures from extended header blocks. + while isextended: + buf = tarfile.fileobj.read(BLOCKSIZE) + pos = 0 + for i in range(21): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + if offset and numbytes: + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[504]) + self.sparse = structs + + self.offset_data = tarfile.fileobj.tell() + tarfile.offset = self.offset_data + self._block(self.size) + self.size = origsize + return self + + def _proc_pax(self, tarfile): + """Process an extended or global header as described in + POSIX.1-2008. + """ + # Read the header information. + buf = tarfile.fileobj.read(self._block(self.size)) + + # A pax header stores supplemental information for either + # the following file (extended) or all following files + # (global). + if self.type == XGLTYPE: + pax_headers = tarfile.pax_headers + else: + pax_headers = tarfile.pax_headers.copy() + + # Check if the pax header contains a hdrcharset field. This tells us + # the encoding of the path, linkpath, uname and gname fields. Normally, + # these fields are UTF-8 encoded but since POSIX.1-2008 tar + # implementations are allowed to store them as raw binary strings if + # the translation to UTF-8 fails. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf8") + + # For the time being, we don't care about anything other than "BINARY". + # The only other value that is currently allowed by the standard is + # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf8" + + # Parse pax header information. A record looks like that: + # "%d %s=%s\n" % (length, keyword, value). length is the size + # of the complete record including the length field itself and + # the newline. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while True: + match = regex.match(buf, pos) + if not match: + break + + length, keyword = match.groups() + length = int(length) + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf8", "utf8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf8", "utf8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, pax_headers, buf) + + elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": + # GNU extended sparse format version 1.0. + self._proc_gnusparse_10(next, pax_headers, tarfile) + + if self.type in (XHDTYPE, SOLARIS_XHDTYPE): + # Patch the TarInfo object with the extended header info. + next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) + next.offset = self.offset + + if "size" in pax_headers: + # If the extended header replaces the size field, + # we need to recalculate the offset where the next + # header starts. + offset = next.offset_data + if next.isreg() or next.type not in SUPPORTED_TYPES: + offset += next._block(next.size) + tarfile.offset = offset + + return next + + def _proc_gnusparse_00(self, next, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + next.sparse = list(zip(offsets, numbytes)) + + def _proc_gnusparse_01(self, next, pax_headers): + """Process a GNU tar extended sparse header, version 0.1. + """ + sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _proc_gnusparse_10(self, next, pax_headers, tarfile): + """Process a GNU tar extended sparse header, version 1.0. + """ + fields = None + sparse = [] + buf = tarfile.fileobj.read(BLOCKSIZE) + fields, buf = buf.split(b"\n", 1) + fields = int(fields) + while len(sparse) < fields * 2: + if b"\n" not in buf: + buf += tarfile.fileobj.read(BLOCKSIZE) + number, buf = buf.split(b"\n", 1) + sparse.append(int(number)) + next.offset_data = tarfile.fileobj.tell() + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _apply_pax_info(self, pax_headers, encoding, errors): + """Replace fields with supplemental information from a previous + pax extended or global header. + """ + for keyword, value in pax_headers.items(): + if keyword == "GNU.sparse.name": + setattr(self, "path", value) + elif keyword == "GNU.sparse.size": + setattr(self, "size", int(value)) + elif keyword == "GNU.sparse.realsize": + setattr(self, "size", int(value)) + elif keyword in PAX_FIELDS: + if keyword in PAX_NUMBER_FIELDS: + try: + value = PAX_NUMBER_FIELDS[keyword](value) + except ValueError: + value = 0 + if keyword == "path": + value = value.rstrip("/") + setattr(self, keyword, value) + + self.pax_headers = pax_headers.copy() + + def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): + """Decode a single field from a pax record. + """ + try: + return value.decode(encoding, "strict") + except UnicodeDecodeError: + return value.decode(fallback_encoding, fallback_errors) + + def _block(self, count): + """Round up a byte count by BLOCKSIZE and return it, + e.g. _block(834) => 1024. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + return self.type in REGULAR_TYPES + def isfile(self): + return self.isreg() + def isdir(self): + return self.type == DIRTYPE + def issym(self): + return self.type == SYMTYPE + def islnk(self): + return self.type == LNKTYPE + def ischr(self): + return self.type == CHRTYPE + def isblk(self): + return self.type == BLKTYPE + def isfifo(self): + return self.type == FIFOTYPE + def issparse(self): + return self.sparse is not None + def isdev(self): + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The default ExFileObject class to use. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, errorlevel=None): + """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. `mode' + defaults to 'r'. + If `fileobj' is given, it is used for reading or writing data. If it + can be determined, `mode' is overridden by `fileobj's mode. + `fileobj' is not closed, when TarFile is closed. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + self.mode = mode + self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if name is None and hasattr(fileobj, "name"): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) + + if self.mode in "aw": + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + """Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + + 'r|*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + for comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + if fileobj is not None: + fileobj.seek(saved_pos) + continue + raise ReadError("file could not be opened successfully") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in "aw": + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + try: + import gzip + gzip.GzipFile + except (ImportError, AttributeError): + raise CompressionError("gzip module is not available") + + extfileobj = fileobj is not None + try: + fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) + t = cls.taropen(name, mode, fileobj, **kwargs) + except IOError: + if not extfileobj and fileobj is not None: + fileobj.close() + if fileobj is None: + raise + raise ReadError("not a gzip file") + except: + if not extfileobj and fileobj is not None: + fileobj.close() + raise + t._extfileobj = extfileobj + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'.") + + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + + if fileobj is not None: + fileobj = _BZ2Proxy(fileobj, mode) + else: + fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (IOError, EOFError): + fileobj.close() + raise ReadError("not a bzip2 file") + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open" # bzip2 compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + if self.mode in "aw": + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + + if not self._extfileobj: + self.fileobj.close() + self.closed = True + + def getmember(self, name): + """Return a TarInfo object for member `name'. If `name' can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object for either the file `name' or the file + object `fileobj' (using os.fstat on its file descriptor). You can + modify some of the TarInfo's attributes before you add it using + addfile(). If given, `arcname' specifies an alternative name for the + file in the archive. + """ + self._check("aw") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo.tarfile = self + + # Use os.stat or os.lstat, depending on platform + # and if symlinks shall be resolved. + if fileobj is None: + if hasattr(os, "lstat") and not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + if type in (CHRTYPE, BLKTYPE): + if hasattr(os, "major") and hasattr(os, "minor"): + tarinfo.devmajor = os.major(statres.st_rdev) + tarinfo.devminor = os.minor(statres.st_rdev) + return tarinfo + + def list(self, verbose=True): + """Print a table of contents to sys.stdout. If `verbose' is False, only + the names of the members are printed. If it is True, an `ls -l'-like + output is produced. + """ + self._check() + + for tarinfo in self: + if verbose: + print(filemode(tarinfo.mode), end=' ') + print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid), end=' ') + if tarinfo.ischr() or tarinfo.isblk(): + print("%10s" % ("%d,%d" \ + % (tarinfo.devmajor, tarinfo.devminor)), end=' ') + else: + print("%10d" % tarinfo.size, end=' ') + print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6], end=' ') + + print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') + + if verbose: + if tarinfo.issym(): + print("->", tarinfo.linkname, end=' ') + if tarinfo.islnk(): + print("link to", tarinfo.linkname, end=' ') + print() + + def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): + """Add the file `name' to the archive. `name' may be any type of file + (directory, fifo, symbolic link, etc.). If given, `arcname' + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting `recursive' to False. `exclude' is a function that should + return True for each filename to be excluded. `filter' is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("aw") + + if arcname is None: + arcname = name + + # Exclude pathnames. + if exclude is not None: + import warnings + warnings.warn("use the filter argument instead", + DeprecationWarning, 2) + if exclude(name): + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + f = bltn_open(name, "rb") + self.addfile(tarinfo, f) + f.close() + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in os.listdir(name): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, exclude, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is + given, tarinfo.size bytes are read from it and added to the archive. + You can create TarInfo objects using gettarinfo(). + On Windows platforms, `fileobj' should always be opened with mode + 'rb' to avoid irritation about the file size. + """ + self._check("aw") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def extractall(self, path=".", members=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). + """ + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 0o700 + # Do not set_attrs directories, as we will do that further down + self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name) + directories.reverse() + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extract(self, member, path="", set_attrs=True): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. `member' may be a filename or a TarInfo object. You can + specify a different directory using `path'. File attributes (owner, + mtime, mode) are set unless `set_attrs' is False. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs) + except EnvironmentError as e: + if self.errorlevel > 0: + raise + else: + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extractfile(self, member): + """Extract a member from the archive as a file object. `member' may be + a filename or a TarInfo object. If `member' is a regular file, a + file-like object is returned. If `member' is a link, a file-like + object is constructed from the link's target. If `member' is none of + the above, None is returned. + The file-like object is read-only and provides the following + methods: read(), readline(), readlines(), seek() and tell() + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg(): + return self.fileobject(self, tarinfo) + + elif tarinfo.type not in SUPPORTED_TYPES: + # If a member's type is unknown, it is treated as a + # regular file. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # Fetch the TarInfo object for the given name + # and build the destination pathname, replacing + # forward slashes to platform specific separators. + targetpath = targetpath.rstrip("/") + targetpath = targetpath.replace("/", os.sep) + + # Create all upper directories. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + # Create directories that are not part of the archive with + # default permissions. + os.makedirs(upperdirs) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except EnvironmentError as e: + if e.errno != errno.EEXIST: + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + target = bltn_open(targetpath, "wb") + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size) + else: + copyfileobj(source, target, tarinfo.size) + target.seek(tarinfo.size) + target.truncate() + target.close() + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """Make a (symbolic) link called targetpath. If it cannot be created + (platform limitation), we try to make a copy of the referenced file + instead of a link. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + os.symlink(tarinfo.linkname, targetpath) + else: + # See extract(). + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + if tarinfo.issym(): + linkpath = os.path.join(os.path.dirname(tarinfo.name), + tarinfo.linkname) + else: + linkpath = tarinfo.linkname + else: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") + + def chown(self, tarinfo, targetpath): + """Set owner of targetpath according to tarinfo. + """ + if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + try: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + g = tarinfo.gid + try: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + u = tarinfo.uid + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + if sys.platform != "os2emx": + os.chown(targetpath, u, g) + except EnvironmentError as e: + raise ExtractError("could not change owner") + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if hasattr(os, 'chmod'): + try: + os.chmod(targetpath, tarinfo.mode) + except EnvironmentError as e: + raise ExtractError("could not change mode") + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) + except EnvironmentError as e: + raise ExtractError("could not change modification time") + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Read the next block. + self.fileobj.seek(self.offset) + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) + except SubsequentHeaderError as e: + raise ReadError(str(e)) + break + + if tarinfo is not None: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + if tarinfo is not None: + members = members[:members.index(tarinfo)] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while True: + tarinfo = self.next() + if tarinfo is None: + break + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise IOError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise IOError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = os.path.dirname(tarinfo.name) + "/" + tarinfo.linkname + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + return iter(self.members) + else: + return TarIter(self) + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True +# class TarFile + +class TarIter(object): + """Iterator Class. + + for tarinfo in TarFile(...): + suite... + """ + + def __init__(self, tarfile): + """Construct a TarIter object. + """ + self.tarfile = tarfile + self.index = 0 + def __iter__(self): + """Return iterator object. + """ + return self + + def __next__(self): + """Return the next item using TarFile's next() method. + When all members have been read, set TarFile as _loaded. + """ + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will cause TarIter to stop prematurely. + if not self.tarfile._loaded: + tarinfo = self.tarfile.next() + if not tarinfo: + self.tarfile._loaded = True + raise StopIteration + else: + try: + tarinfo = self.tarfile.members[self.index] + except IndexError: + raise StopIteration + self.index += 1 + return tarinfo + + next = __next__ # for Python 2.x + +#-------------------- +# exported functions +#-------------------- +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + """ + try: + t = open(name) + t.close() + return True + except TarError: + return False + +bltn_open = open +open = TarFile.open diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/compat.py b/venv/Lib/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 000000000..e59410695 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1122 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import absolute_import + +import os +import re +import sys + +try: + import ssl +except ImportError: # pragma: no cover + ssl = None + +if sys.version_info[0] < 3: # pragma: no cover + from StringIO import StringIO + string_types = basestring, + text_type = unicode + from types import FileType as file_type + import __builtin__ as builtins + import ConfigParser as configparser + from ._backport import shutil + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit + from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, + pathname2url, ContentTooShortError, splittype) + + def quote(s): + if isinstance(s, unicode): + s = s.encode('utf-8') + return _quote(s) + + import urllib2 + from urllib2 import (Request, urlopen, URLError, HTTPError, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPHandler, HTTPRedirectHandler, + build_opener) + if ssl: + from urllib2 import HTTPSHandler + import httplib + import xmlrpclib + import Queue as queue + from HTMLParser import HTMLParser + import htmlentitydefs + raw_input = raw_input + from itertools import ifilter as filter + from itertools import ifilterfalse as filterfalse + + # Leaving this around for now, in case it needs resurrecting in some way + # _userprog = None + # def splituser(host): + # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + # global _userprog + # if _userprog is None: + # import re + # _userprog = re.compile('^(.*)@(.*)$') + + # match = _userprog.match(host) + # if match: return match.group(1, 2) + # return None, host + +else: # pragma: no cover + from io import StringIO + string_types = str, + text_type = str + from io import TextIOWrapper as file_type + import builtins + import configparser + import shutil + from urllib.parse import (urlparse, urlunparse, urljoin, quote, + unquote, urlsplit, urlunsplit, splittype) + from urllib.request import (urlopen, urlretrieve, Request, url2pathname, + pathname2url, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPHandler, HTTPRedirectHandler, + build_opener) + if ssl: + from urllib.request import HTTPSHandler + from urllib.error import HTTPError, URLError, ContentTooShortError + import http.client as httplib + import urllib.request as urllib2 + import xmlrpc.client as xmlrpclib + import queue + from html.parser import HTMLParser + import html.entities as htmlentitydefs + raw_input = input + from itertools import filterfalse + filter = filter + + +try: + from ssl import match_hostname, CertificateError +except ImportError: # pragma: no cover + class CertificateError(ValueError): + pass + + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + parts = dn.split('.') + leftmost, remainder = parts[0], parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +try: + from types import SimpleNamespace as Container +except ImportError: # pragma: no cover + class Container(object): + """ + A generic container for when multiple values need to be returned + """ + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +try: + from shutil import which +except ImportError: # pragma: no cover + # Implementation from Python 3.3 + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None + + +# ZipFile is a context manager in 2.7, but not in 2.6 + +from zipfile import ZipFile as BaseZipFile + +if hasattr(BaseZipFile, '__enter__'): # pragma: no cover + ZipFile = BaseZipFile +else: # pragma: no cover + from zipfile import ZipExtFile as BaseZipExtFile + + class ZipExtFile(BaseZipExtFile): + def __init__(self, base): + self.__dict__.update(base.__dict__) + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + class ZipFile(BaseZipFile): + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + def open(self, *args, **kwargs): + base = BaseZipFile.open(self, *args, **kwargs) + return ZipExtFile(base) + +try: + from platform import python_implementation +except ImportError: # pragma: no cover + def python_implementation(): + """Return a string identifying the Python implementation.""" + if 'PyPy' in sys.version: + return 'PyPy' + if os.name == 'java': + return 'Jython' + if sys.version.startswith('IronPython'): + return 'IronPython' + return 'CPython' + +try: + import sysconfig +except ImportError: # pragma: no cover + from ._backport import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections.abc import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode + fsdecode = os.fsdecode +except AttributeError: # pragma: no cover + # Issue #99: on some systems (e.g. containerised), + # sys.getfilesystemencoding() returns None, and we need a real value, + # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and + # sys.getfilesystemencoding(): the return value is "the user’s preference + # according to the result of nl_langinfo(CODESET), or None if the + # nl_langinfo(CODESET) failed." + _fsencoding = sys.getfilesystemencoding() or 'utf-8' + if _fsencoding == 'mbcs': + _fserrors = 'strict' + else: + _fserrors = 'surrogateescape' + + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, text_type): + return filename.encode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + + def fsdecode(filename): + if isinstance(filename, text_type): + return filename + elif isinstance(filename, bytes): + return filename.decode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + +try: + from tokenize import detect_encoding +except ImportError: # pragma: no cover + from codecs import BOM_UTF8, lookup + import re + + cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") + + def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + + def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argument, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, + but disagree, a SyntaxError will be raised. If the encoding cookie is an + invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + try: + filename = readline.__self__.name + except AttributeError: + filename = None + bom_found = False + encoding = None + default = 'utf-8' + def read_or_stop(): + try: + return readline() + except StopIteration: + return b'' + + def find_cookie(line): + try: + # Decode as UTF-8. Either the line is an encoding declaration, + # in which case it should be pure ASCII, or it must be UTF-8 + # per default encoding. + line_string = line.decode('utf-8') + except UnicodeDecodeError: + msg = "invalid or missing encoding declaration" + if filename is not None: + msg = '{} for {!r}'.format(msg, filename) + raise SyntaxError(msg) + + matches = cookie_re.findall(line_string) + if not matches: + return None + encoding = _get_normal_name(matches[0]) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + if filename is None: + msg = "unknown encoding: " + encoding + else: + msg = "unknown encoding for {!r}: {}".format(filename, + encoding) + raise SyntaxError(msg) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + if filename is None: + msg = 'encoding problem: utf-8' + else: + msg = 'encoding problem for {!r}: utf-8'.format(filename) + raise SyntaxError(msg) + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + +# For converting & <-> & etc. +try: + from html import escape +except ImportError: + from cgi import escape +if sys.version_info[:2] < (3, 4): + unescape = HTMLParser().unescape +else: + from html import unescape + +try: + from collections import ChainMap +except ImportError: # pragma: no cover + from collections import MutableMapping + + try: + from reprlib import recursive_repr as _recursive_repr + except ImportError: + def _recursive_repr(fillvalue='...'): + ''' + Decorator to make a repr function return fillvalue for a recursive + call + ''' + + def decorating_function(user_function): + repr_running = set() + + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + # Can't use functools.wraps() here because of bootstrap issues + wrapper.__module__ = getattr(user_function, '__module__') + wrapper.__doc__ = getattr(user_function, '__doc__') + wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) + return wrapper + + return decorating_function + + class ChainMap(MutableMapping): + ''' A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + accessed or updated using the *maps* attribute. There is no other state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__(key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union(*self.maps)) # reuses stored hash values if possible + + def __iter__(self): + return iter(set().union(*self.maps)) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return '{0.__class__.__name__}({1})'.format( + self, ', '.join(map(repr, self.maps))) + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self): # like Django's Context.push() + 'New ChainMap with a new dict followed by all previous maps.' + return self.__class__({}, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + +try: + from importlib.util import cache_from_source # Python >= 3.4 +except ImportError: # pragma: no cover + try: + from imp import cache_from_source + except ImportError: # pragma: no cover + def cache_from_source(path, debug_override=None): + assert path.endswith('.py') + if debug_override is None: + debug_override = __debug__ + if debug_override: + suffix = 'c' + else: + suffix = 'o' + return path + suffix + +try: + from collections import OrderedDict +except ImportError: # pragma: no cover +## {{{ http://code.activestate.com/recipes/576693/ (r9) +# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. +# Passes Python2.7's test suite and incorporates all the latest updates. + try: + from thread import get_ident as _get_ident + except ImportError: + from dummy_thread import get_ident as _get_ident + + try: + from _abcoll import KeysView, ValuesView, ItemsView + except ImportError: + pass + + + class OrderedDict(dict): + 'Dictionary that remembers insertion order' + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as for regular dictionaries. + + # The internal self.__map dictionary maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # Each link is stored as a list of length three: [PREV, NEXT, KEY]. + + def __init__(self, *args, **kwds): + '''Initialize an ordered dictionary. Signature is the same as for + regular dictionaries, but keyword arguments are not recommended + because their insertion order is arbitrary. + + ''' + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + try: + self.__root + except AttributeError: + self.__root = root = [] # sentinel node + root[:] = [root, root, None] + self.__map = {} + self.__update(*args, **kwds) + + def __setitem__(self, key, value, dict_setitem=dict.__setitem__): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link which goes at the end of the linked + # list, and the inherited dictionary is updated with the new key/value pair. + if key not in self: + root = self.__root + last = root[0] + last[1] = root[0] = self.__map[key] = [last, root, key] + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which is + # then removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link_prev, link_next, key = self.__map.pop(key) + link_prev[1] = link_next + link_next[0] = link_prev + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + root = self.__root + curr = root[1] + while curr is not root: + yield curr[2] + curr = curr[1] + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + root = self.__root + curr = root[0] + while curr is not root: + yield curr[2] + curr = curr[0] + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + try: + for node in self.__map.itervalues(): + del node[:] + root = self.__root + root[:] = [root, root, None] + self.__map.clear() + except AttributeError: + pass + dict.clear(self) + + def popitem(self, last=True): + '''od.popitem() -> (k, v), return and remove a (key, value) pair. + Pairs are returned in LIFO order if last is true or FIFO order if false. + + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root[0] + link_prev = link[0] + link_prev[1] = root + root[0] = link_prev + else: + link = root[1] + link_next = link[1] + root[1] = link_next + link_next[0] = root + key = link[2] + del self.__map[key] + value = dict.pop(self, key) + return key, value + + # -- the following methods do not depend on the internal structure -- + + def keys(self): + 'od.keys() -> list of keys in od' + return list(self) + + def values(self): + 'od.values() -> list of values in od' + return [self[key] for key in self] + + def items(self): + 'od.items() -> list of (key, value) pairs in od' + return [(key, self[key]) for key in self] + + def iterkeys(self): + 'od.iterkeys() -> an iterator over the keys in od' + return iter(self) + + def itervalues(self): + 'od.itervalues -> an iterator over the values in od' + for k in self: + yield self[k] + + def iteritems(self): + 'od.iteritems -> an iterator over the (key, value) items in od' + for k in self: + yield (k, self[k]) + + def update(*args, **kwds): + '''od.update(E, **F) -> None. Update od from dict/iterable E and F. + + If E is a dict instance, does: for k in E: od[k] = E[k] + If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] + Or if E is an iterable of items, does: for k, v in E: od[k] = v + In either case, this is followed by: for k, v in F.items(): od[k] = v + + ''' + if len(args) > 2: + raise TypeError('update() takes at most 2 positional ' + 'arguments (%d given)' % (len(args),)) + elif not args: + raise TypeError('update() takes at least 1 argument (0 given)') + self = args[0] + # Make progressively weaker assumptions about "other" + other = () + if len(args) == 2: + other = args[1] + if isinstance(other, dict): + for key in other: + self[key] = other[key] + elif hasattr(other, 'keys'): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + __update = update # let subclasses override update without breaking __init__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' + if key in self: + return self[key] + self[key] = default + return default + + def __repr__(self, _repr_running=None): + 'od.__repr__() <==> repr(od)' + if not _repr_running: _repr_running = {} + call_key = id(self), _get_ident() + if call_key in _repr_running: + return '...' + _repr_running[call_key] = 1 + try: + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, self.items()) + finally: + del _repr_running[call_key] + + def __reduce__(self): + 'Return state information for pickling' + items = [[k, self[k]] for k in self] + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + if inst_dict: + return (self.__class__, (items,), inst_dict) + return self.__class__, (items,) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S + and values equal to v (which defaults to None). + + ''' + d = cls() + for key in iterable: + d[key] = value + return d + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return len(self)==len(other) and self.items() == other.items() + return dict.__eq__(self, other) + + def __ne__(self, other): + return not self == other + + # -- the following methods are only used in Python 2.7 -- + + def viewkeys(self): + "od.viewkeys() -> a set-like object providing a view on od's keys" + return KeysView(self) + + def viewvalues(self): + "od.viewvalues() -> an object providing a view on od's values" + return ValuesView(self) + + def viewitems(self): + "od.viewitems() -> a set-like object providing a view on od's items" + return ItemsView(self) + +try: + from logging.config import BaseConfigurator, valid_ident +except ImportError: # pragma: no cover + IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + + def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + + + # The ConvertingXXX classes are wrappers around standard Python containers, + # and they serve to convert any suitable values in the container. The + # conversion converts base dicts, lists and tuples to their wrapped + # equivalents, whereas strings which match a conversion format are converted + # appropriately. + # + # Each wrapper should have a configurator attribute holding the actual + # configurator to use for conversion. + + class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class ConvertingList(list): + """A converting list wrapper.""" + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext' : 'ext_convert', + 'cfg' : 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = staticmethod(__import__) + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + #print d, rest + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int(idx) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + #rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance(value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance(value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and\ + isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, string_types): + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/database.py b/venv/Lib/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 000000000..0a90c300b --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1339 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""PEP 376 implementation.""" + +from __future__ import unicode_literals + +import base64 +import codecs +import contextlib +import hashlib +import logging +import os +import posixpath +import sys +import zipimport + +from . import DistlibException, resources +from .compat import StringIO +from .version import get_scheme, UnsupportedVersionError +from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME) +from .util import (parse_requirement, cached_property, parse_name_and_version, + read_exports, write_exports, CSVReader, CSVWriter) + + +__all__ = ['Distribution', 'BaseInstalledDistribution', + 'InstalledDistribution', 'EggInfoDistribution', + 'DistributionPath'] + + +logger = logging.getLogger(__name__) + +EXPORTS_FILENAME = 'pydist-exports.json' +COMMANDS_FILENAME = 'pydist-commands.json' + +DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', + 'RESOURCES', EXPORTS_FILENAME, 'SHARED') + +DISTINFO_EXT = '.dist-info' + + +class _Cache(object): + """ + A simple cache mapping names and .dist-info paths to distributions + """ + def __init__(self): + """ + Initialise an instance. There is normally one for each DistributionPath. + """ + self.name = {} + self.path = {} + self.generated = False + + def clear(self): + """ + Clear the cache, setting it to its initial state. + """ + self.name.clear() + self.path.clear() + self.generated = False + + def add(self, dist): + """ + Add a distribution to the cache. + :param dist: The distribution to add. + """ + if dist.path not in self.path: + self.path[dist.path] = dist + self.name.setdefault(dist.key, []).append(dist) + + +class DistributionPath(object): + """ + Represents a set of distributions installed on a path (typically sys.path). + """ + def __init__(self, path=None, include_egg=False): + """ + Create an instance from a path, optionally including legacy (distutils/ + setuptools/distribute) distributions. + :param path: The path to use, as a list of directories. If not specified, + sys.path is used. + :param include_egg: If True, this instance will look for and return legacy + distributions as well as those based on PEP 376. + """ + if path is None: + path = sys.path + self.path = path + self._include_dist = True + self._include_egg = include_egg + + self._cache = _Cache() + self._cache_egg = _Cache() + self._cache_enabled = True + self._scheme = get_scheme('default') + + def _get_cache_enabled(self): + return self._cache_enabled + + def _set_cache_enabled(self, value): + self._cache_enabled = value + + cache_enabled = property(_get_cache_enabled, _set_cache_enabled) + + def clear_cache(self): + """ + Clears the internal cache. + """ + self._cache.clear() + self._cache_egg.clear() + + + def _yield_distributions(self): + """ + Yield .dist-info and/or .egg(-info) distributions. + """ + # We need to check if we've seen some resources already, because on + # some Linux systems (e.g. some Debian/Ubuntu variants) there are + # symlinks which alias other files in the environment. + seen = set() + for path in self.path: + finder = resources.finder_for_path(path) + if finder is None: + continue + r = finder.find('') + if not r or not r.is_container: + continue + rset = sorted(r.resources) + for entry in rset: + r = finder.find(entry) + if not r or r.path in seen: + continue + if self._include_dist and entry.endswith(DISTINFO_EXT): + possible_filenames = [METADATA_FILENAME, + WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME] + for metadata_filename in possible_filenames: + metadata_path = posixpath.join(entry, metadata_filename) + pydist = finder.find(metadata_path) + if pydist: + break + else: + continue + + with contextlib.closing(pydist.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + logger.debug('Found %s', r.path) + seen.add(r.path) + yield new_dist_class(r.path, metadata=metadata, + env=self) + elif self._include_egg and entry.endswith(('.egg-info', + '.egg')): + logger.debug('Found %s', r.path) + seen.add(r.path) + yield old_dist_class(r.path, self) + + def _generate_cache(self): + """ + Scan the path for distributions and populate the cache with + those that are found. + """ + gen_dist = not self._cache.generated + gen_egg = self._include_egg and not self._cache_egg.generated + if gen_dist or gen_egg: + for dist in self._yield_distributions(): + if isinstance(dist, InstalledDistribution): + self._cache.add(dist) + else: + self._cache_egg.add(dist) + + if gen_dist: + self._cache.generated = True + if gen_egg: + self._cache_egg.generated = True + + @classmethod + def distinfo_dirname(cls, name, version): + """ + The *name* and *version* parameters are converted into their + filename-escaped form, i.e. any ``'-'`` characters are replaced + with ``'_'`` other than the one in ``'dist-info'`` and the one + separating the name from the version number. + + :parameter name: is converted to a standard distribution name by replacing + any runs of non- alphanumeric characters with a single + ``'-'``. + :type name: string + :parameter version: is converted to a standard version string. Spaces + become dots, and all other non-alphanumeric characters + (except dots) become dashes, with runs of multiple + dashes condensed to a single dash. + :type version: string + :returns: directory name + :rtype: string""" + name = name.replace('-', '_') + return '-'.join([name, version]) + DISTINFO_EXT + + def get_distributions(self): + """ + Provides an iterator that looks for distributions and returns + :class:`InstalledDistribution` or + :class:`EggInfoDistribution` instances for each one of them. + + :rtype: iterator of :class:`InstalledDistribution` and + :class:`EggInfoDistribution` instances + """ + if not self._cache_enabled: + for dist in self._yield_distributions(): + yield dist + else: + self._generate_cache() + + for dist in self._cache.path.values(): + yield dist + + if self._include_egg: + for dist in self._cache_egg.path.values(): + yield dist + + def get_distribution(self, name): + """ + Looks for a named distribution on the path. + + This function only returns the first result found, as no more than one + value is expected. If nothing is found, ``None`` is returned. + + :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` + or ``None`` + """ + result = None + name = name.lower() + if not self._cache_enabled: + for dist in self._yield_distributions(): + if dist.key == name: + result = dist + break + else: + self._generate_cache() + + if name in self._cache.name: + result = self._cache.name[name][0] + elif self._include_egg and name in self._cache_egg.name: + result = self._cache_egg.name[name][0] + return result + + def provides_distribution(self, name, version=None): + """ + Iterates over all distributions to find which distributions provide *name*. + If a *version* is provided, it will be used to filter the results. + + This function only returns the first result found, since no more than + one values are expected. If the directory is not found, returns ``None``. + + :parameter version: a version specifier that indicates the version + required, conforming to the format in ``PEP-345`` + + :type name: string + :type version: string + """ + matcher = None + if version is not None: + try: + matcher = self._scheme.matcher('%s (%s)' % (name, version)) + except ValueError: + raise DistlibException('invalid name or version: %r, %r' % + (name, version)) + + for dist in self.get_distributions(): + # We hit a problem on Travis where enum34 was installed and doesn't + # have a provides attribute ... + if not hasattr(dist, 'provides'): + logger.debug('No "provides": %s', dist) + else: + provided = dist.provides + + for p in provided: + p_name, p_ver = parse_name_and_version(p) + if matcher is None: + if p_name == name: + yield dist + break + else: + if p_name == name and matcher.match(p_ver): + yield dist + break + + def get_file_path(self, name, relative_path): + """ + Return the path to a resource file. + """ + dist = self.get_distribution(name) + if dist is None: + raise LookupError('no distribution named %r found' % name) + return dist.get_resource_path(relative_path) + + def get_exported_entries(self, category, name=None): + """ + Return all of the exported entries in a particular category. + + :param category: The category to search for entries. + :param name: If specified, only entries with that name are returned. + """ + for dist in self.get_distributions(): + r = dist.exports + if category in r: + d = r[category] + if name is not None: + if name in d: + yield d[name] + else: + for v in d.values(): + yield v + + +class Distribution(object): + """ + A base class for distributions, whether installed or from indexes. + Either way, it must have some metadata, so that's all that's needed + for construction. + """ + + build_time_dependency = False + """ + Set to True if it's known to be only a build-time dependency (i.e. + not needed after installation). + """ + + requested = False + """A boolean that indicates whether the ``REQUESTED`` metadata file is + present (in other words, whether the package was installed by user + request or it was installed as a dependency).""" + + def __init__(self, metadata): + """ + Initialise an instance. + :param metadata: The instance of :class:`Metadata` describing this + distribution. + """ + self.metadata = metadata + self.name = metadata.name + self.key = self.name.lower() # for case-insensitive comparisons + self.version = metadata.version + self.locator = None + self.digest = None + self.extras = None # additional features requested + self.context = None # environment marker overrides + self.download_urls = set() + self.digests = {} + + @property + def source_url(self): + """ + The source archive download URL for this distribution. + """ + return self.metadata.source_url + + download_url = source_url # Backward compatibility + + @property + def name_and_version(self): + """ + A utility property which displays the name and version in parentheses. + """ + return '%s (%s)' % (self.name, self.version) + + @property + def provides(self): + """ + A set of distribution names and versions provided by this distribution. + :return: A set of "name (version)" strings. + """ + plist = self.metadata.provides + s = '%s (%s)' % (self.name, self.version) + if s not in plist: + plist.append(s) + return plist + + def _get_requirements(self, req_attr): + md = self.metadata + logger.debug('Getting requirements from metadata %r', md.todict()) + reqts = getattr(md, req_attr) + return set(md.get_requirements(reqts, extras=self.extras, + env=self.context)) + + @property + def run_requires(self): + return self._get_requirements('run_requires') + + @property + def meta_requires(self): + return self._get_requirements('meta_requires') + + @property + def build_requires(self): + return self._get_requirements('build_requires') + + @property + def test_requires(self): + return self._get_requirements('test_requires') + + @property + def dev_requires(self): + return self._get_requirements('dev_requires') + + def matches_requirement(self, req): + """ + Say if this instance matches (fulfills) a requirement. + :param req: The requirement to match. + :rtype req: str + :return: True if it matches, else False. + """ + # Requirement may contain extras - parse to lose those + # from what's passed to the matcher + r = parse_requirement(req) + scheme = get_scheme(self.metadata.scheme) + try: + matcher = scheme.matcher(r.requirement) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + result = False + for p in self.provides: + p_name, p_ver = parse_name_and_version(p) + if p_name != name: + continue + try: + result = matcher.match(p_ver) + break + except UnsupportedVersionError: + pass + return result + + def __repr__(self): + """ + Return a textual representation of this instance, + """ + if self.source_url: + suffix = ' [%s]' % self.source_url + else: + suffix = '' + return '' % (self.name, self.version, suffix) + + def __eq__(self, other): + """ + See if this distribution is the same as another. + :param other: The distribution to compare with. To be equal to one + another. distributions must have the same type, name, + version and source_url. + :return: True if it is the same, else False. + """ + if type(other) is not type(self): + result = False + else: + result = (self.name == other.name and + self.version == other.version and + self.source_url == other.source_url) + return result + + def __hash__(self): + """ + Compute hash in a way which matches the equality test. + """ + return hash(self.name) + hash(self.version) + hash(self.source_url) + + +class BaseInstalledDistribution(Distribution): + """ + This is the base class for installed distributions (whether PEP 376 or + legacy). + """ + + hasher = None + + def __init__(self, metadata, path, env=None): + """ + Initialise an instance. + :param metadata: An instance of :class:`Metadata` which describes the + distribution. This will normally have been initialised + from a metadata file in the ``path``. + :param path: The path of the ``.dist-info`` or ``.egg-info`` + directory for the distribution. + :param env: This is normally the :class:`DistributionPath` + instance where this distribution was found. + """ + super(BaseInstalledDistribution, self).__init__(metadata) + self.path = path + self.dist_path = env + + def get_hash(self, data, hasher=None): + """ + Get the hash of some data, using a particular hash algorithm, if + specified. + + :param data: The data to be hashed. + :type data: bytes + :param hasher: The name of a hash implementation, supported by hashlib, + or ``None``. Examples of valid values are ``'sha1'``, + ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and + ``'sha512'``. If no hasher is specified, the ``hasher`` + attribute of the :class:`InstalledDistribution` instance + is used. If the hasher is determined to be ``None``, MD5 + is used as the hashing algorithm. + :returns: The hash of the data. If a hasher was explicitly specified, + the returned hash will be prefixed with the specified hasher + followed by '='. + :rtype: str + """ + if hasher is None: + hasher = self.hasher + if hasher is None: + hasher = hashlib.md5 + prefix = '' + else: + hasher = getattr(hashlib, hasher) + prefix = '%s=' % self.hasher + digest = hasher(data).digest() + digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') + return '%s%s' % (prefix, digest) + + +class InstalledDistribution(BaseInstalledDistribution): + """ + Created with the *path* of the ``.dist-info`` directory provided to the + constructor. It reads the metadata contained in ``pydist.json`` when it is + instantiated., or uses a passed in Metadata instance (useful for when + dry-run mode is being used). + """ + + hasher = 'sha256' + + def __init__(self, path, metadata=None, env=None): + self.modules = [] + self.finder = finder = resources.finder_for_path(path) + if finder is None: + raise ValueError('finder unavailable for %s' % path) + if env and env._cache_enabled and path in env._cache.path: + metadata = env._cache.path[path].metadata + elif metadata is None: + r = finder.find(METADATA_FILENAME) + # Temporary - for Wheel 0.23 support + if r is None: + r = finder.find(WHEEL_METADATA_FILENAME) + # Temporary - for legacy support + if r is None: + r = finder.find(LEGACY_METADATA_FILENAME) + if r is None: + raise ValueError('no %s found in %s' % (METADATA_FILENAME, + path)) + with contextlib.closing(r.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + + super(InstalledDistribution, self).__init__(metadata, path, env) + + if env and env._cache_enabled: + env._cache.add(self) + + r = finder.find('REQUESTED') + self.requested = r is not None + p = os.path.join(path, 'top_level.txt') + if os.path.exists(p): + with open(p, 'rb') as f: + data = f.read().decode('utf-8') + self.modules = data.splitlines() + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def _get_records(self): + """ + Get the list of installed files for the distribution + :return: A list of tuples of path, hash and size. Note that hash and + size might be ``None`` for some entries. The path is exactly + as stored in the file (which is as in PEP 376). + """ + results = [] + r = self.get_distinfo_resource('RECORD') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as record_reader: + # Base location is parent dir of .dist-info dir + #base_location = os.path.dirname(self.path) + #base_location = os.path.abspath(base_location) + for row in record_reader: + missing = [None for i in range(len(row), 3)] + path, checksum, size = row + missing + #if not os.path.isabs(path): + # path = path.replace('/', os.sep) + # path = os.path.join(base_location, path) + results.append((path, checksum, size)) + return results + + @cached_property + def exports(self): + """ + Return the information exported by this distribution. + :return: A dictionary of exports, mapping an export category to a dict + of :class:`ExportEntry` instances describing the individual + export entries, and keyed by name. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + result = self.read_exports() + return result + + def read_exports(self): + """ + Read exports data from a file in .ini format. + + :return: A dictionary of exports, mapping an export category to a list + of :class:`ExportEntry` instances describing the individual + export entries. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + with contextlib.closing(r.as_stream()) as stream: + result = read_exports(stream) + return result + + def write_exports(self, exports): + """ + Write a dictionary of exports to a file in .ini format. + :param exports: A dictionary of exports, mapping an export category to + a list of :class:`ExportEntry` instances describing the + individual export entries. + """ + rf = self.get_distinfo_file(EXPORTS_FILENAME) + with open(rf, 'w') as f: + write_exports(exports, f) + + def get_resource_path(self, relative_path): + """ + NOTE: This API may change in the future. + + Return the absolute path to a resource file with the given relative + path. + + :param relative_path: The path, relative to .dist-info, of the resource + of interest. + :return: The absolute path where the resource is to be found. + """ + r = self.get_distinfo_resource('RESOURCES') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as resources_reader: + for relative, destination in resources_reader: + if relative == relative_path: + return destination + raise KeyError('no resource file with relative path %r ' + 'is installed' % relative_path) + + def list_installed_files(self): + """ + Iterates over the ``RECORD`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: iterator of (path, hash, size) + """ + for result in self._get_records(): + yield result + + def write_installed_files(self, paths, prefix, dry_run=False): + """ + Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any + existing ``RECORD`` file is silently overwritten. + + prefix is used to determine when to write absolute paths. + """ + prefix = os.path.join(prefix, '') + base = os.path.dirname(self.path) + base_under_prefix = base.startswith(prefix) + base = os.path.join(base, '') + record_path = self.get_distinfo_file('RECORD') + logger.info('creating %s', record_path) + if dry_run: + return None + with CSVWriter(record_path) as writer: + for path in paths: + if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): + # do not put size and hash, as in PEP-376 + hash_value = size = '' + else: + size = '%d' % os.path.getsize(path) + with open(path, 'rb') as fp: + hash_value = self.get_hash(fp.read()) + if path.startswith(base) or (base_under_prefix and + path.startswith(prefix)): + path = os.path.relpath(path, base) + writer.writerow((path, hash_value, size)) + + # add the RECORD file itself + if record_path.startswith(base): + record_path = os.path.relpath(record_path, base) + writer.writerow((record_path, '', '')) + return record_path + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + base = os.path.dirname(self.path) + record_path = self.get_distinfo_file('RECORD') + for path, hash_value, size in self.list_installed_files(): + if not os.path.isabs(path): + path = os.path.join(base, path) + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + elif os.path.isfile(path): + actual_size = str(os.path.getsize(path)) + if size and actual_size != size: + mismatches.append((path, 'size', size, actual_size)) + elif hash_value: + if '=' in hash_value: + hasher = hash_value.split('=', 1)[0] + else: + hasher = None + + with open(path, 'rb') as f: + actual_hash = self.get_hash(f.read(), hasher) + if actual_hash != hash_value: + mismatches.append((path, 'hash', hash_value, actual_hash)) + return mismatches + + @cached_property + def shared_locations(self): + """ + A dictionary of shared locations whose keys are in the set 'prefix', + 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. + The corresponding value is the absolute path of that category for + this distribution, and takes into account any paths selected by the + user at installation time (e.g. via command-line arguments). In the + case of the 'namespace' key, this would be a list of absolute paths + for the roots of namespace packages in this distribution. + + The first time this property is accessed, the relevant information is + read from the SHARED file in the .dist-info directory. + """ + result = {} + shared_path = os.path.join(self.path, 'SHARED') + if os.path.isfile(shared_path): + with codecs.open(shared_path, 'r', encoding='utf-8') as f: + lines = f.read().splitlines() + for line in lines: + key, value = line.split('=', 1) + if key == 'namespace': + result.setdefault(key, []).append(value) + else: + result[key] = value + return result + + def write_shared_locations(self, paths, dry_run=False): + """ + Write shared location information to the SHARED file in .dist-info. + :param paths: A dictionary as described in the documentation for + :meth:`shared_locations`. + :param dry_run: If True, the action is logged but no file is actually + written. + :return: The path of the file written to. + """ + shared_path = os.path.join(self.path, 'SHARED') + logger.info('creating %s', shared_path) + if dry_run: + return None + lines = [] + for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): + path = paths[key] + if os.path.isdir(paths[key]): + lines.append('%s=%s' % (key, path)) + for ns in paths.get('namespace', ()): + lines.append('namespace=%s' % ns) + + with codecs.open(shared_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + return shared_path + + def get_distinfo_resource(self, path): + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + finder = resources.finder_for_path(self.path) + if finder is None: + raise DistlibException('Unable to get a finder for %s' % self.path) + return finder.find(path) + + def get_distinfo_file(self, path): + """ + Returns a path located under the ``.dist-info`` directory. Returns a + string representing the path. + + :parameter path: a ``'/'``-separated path relative to the + ``.dist-info`` directory or an absolute path; + If *path* is an absolute path and doesn't start + with the ``.dist-info`` directory path, + a :class:`DistlibException` is raised + :type path: str + :rtype: str + """ + # Check if it is an absolute path # XXX use relpath, add tests + if path.find(os.sep) >= 0: + # it's an absolute path? + distinfo_dirname, path = path.split(os.sep)[-2:] + if distinfo_dirname != self.path.split(os.sep)[-1]: + raise DistlibException( + 'dist-info file %r does not belong to the %r %s ' + 'distribution' % (path, self.name, self.version)) + + # The file must be relative + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + + return os.path.join(self.path, path) + + def list_distinfo_files(self): + """ + Iterates over the ``RECORD`` entries and returns paths for each line if + the path is pointing to a file located in the ``.dist-info`` directory + or one of its subdirectories. + + :returns: iterator of paths + """ + base = os.path.dirname(self.path) + for path, checksum, size in self._get_records(): + # XXX add separator or use real relpath algo + if not os.path.isabs(path): + path = os.path.join(base, path) + if path.startswith(self.path): + yield path + + def __eq__(self, other): + return (isinstance(other, InstalledDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +class EggInfoDistribution(BaseInstalledDistribution): + """Created with the *path* of the ``.egg-info`` directory or file provided + to the constructor. It reads the metadata contained in the file itself, or + if the given path happens to be a directory, the metadata is read from the + file ``PKG-INFO`` under that directory.""" + + requested = True # as we have no way of knowing, assume it was + shared_locations = {} + + def __init__(self, path, env=None): + def set_name_and_version(s, n, v): + s.name = n + s.key = n.lower() # for case-insensitive comparisons + s.version = v + + self.path = path + self.dist_path = env + if env and env._cache_enabled and path in env._cache_egg.path: + metadata = env._cache_egg.path[path].metadata + set_name_and_version(self, metadata.name, metadata.version) + else: + metadata = self._get_metadata(path) + + # Need to be set before caching + set_name_and_version(self, metadata.name, metadata.version) + + if env and env._cache_enabled: + env._cache_egg.add(self) + super(EggInfoDistribution, self).__init__(metadata, path, env) + + def _get_metadata(self, path): + requires = None + + def parse_requires_data(data): + """Create a list of dependencies from a requires.txt file. + + *data*: the contents of a setuptools-produced requires.txt file. + """ + reqs = [] + lines = data.splitlines() + for line in lines: + line = line.strip() + if line.startswith('['): + logger.warning('Unexpected line: quitting requirement scan: %r', + line) + break + r = parse_requirement(line) + if not r: + logger.warning('Not recognised as a requirement: %r', line) + continue + if r.extras: + logger.warning('extra requirements in requires.txt are ' + 'not supported') + if not r.constraints: + reqs.append(r.name) + else: + cons = ', '.join('%s%s' % c for c in r.constraints) + reqs.append('%s (%s)' % (r.name, cons)) + return reqs + + def parse_requires_path(req_path): + """Create a list of dependencies from a requires.txt file. + + *req_path*: the path to a setuptools-produced requires.txt file. + """ + + reqs = [] + try: + with codecs.open(req_path, 'r', 'utf-8') as fp: + reqs = parse_requires_data(fp.read()) + except IOError: + pass + return reqs + + tl_path = tl_data = None + if path.endswith('.egg'): + if os.path.isdir(path): + p = os.path.join(path, 'EGG-INFO') + meta_path = os.path.join(p, 'PKG-INFO') + metadata = Metadata(path=meta_path, scheme='legacy') + req_path = os.path.join(p, 'requires.txt') + tl_path = os.path.join(p, 'top_level.txt') + requires = parse_requires_path(req_path) + else: + # FIXME handle the case where zipfile is not available + zipf = zipimport.zipimporter(path) + fileobj = StringIO( + zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) + metadata = Metadata(fileobj=fileobj, scheme='legacy') + try: + data = zipf.get_data('EGG-INFO/requires.txt') + tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') + requires = parse_requires_data(data.decode('utf-8')) + except IOError: + requires = None + elif path.endswith('.egg-info'): + if os.path.isdir(path): + req_path = os.path.join(path, 'requires.txt') + requires = parse_requires_path(req_path) + path = os.path.join(path, 'PKG-INFO') + tl_path = os.path.join(path, 'top_level.txt') + metadata = Metadata(path=path, scheme='legacy') + else: + raise DistlibException('path must end with .egg-info or .egg, ' + 'got %r' % path) + + if requires: + metadata.add_requirements(requires) + # look for top-level modules in top_level.txt, if present + if tl_data is None: + if tl_path is not None and os.path.exists(tl_path): + with open(tl_path, 'rb') as f: + tl_data = f.read().decode('utf-8') + if not tl_data: + tl_data = [] + else: + tl_data = tl_data.splitlines() + self.modules = tl_data + return metadata + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + for path, _, _ in self.list_installed_files(): + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + return mismatches + + def list_installed_files(self): + """ + Iterates over the ``installed-files.txt`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: a list of (path, hash, size) + """ + + def _md5(path): + f = open(path, 'rb') + try: + content = f.read() + finally: + f.close() + return hashlib.md5(content).hexdigest() + + def _size(path): + return os.stat(path).st_size + + record_path = os.path.join(self.path, 'installed-files.txt') + result = [] + if os.path.exists(record_path): + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + p = os.path.normpath(os.path.join(self.path, line)) + # "./" is present as a marker between installed files + # and installation metadata files + if not os.path.exists(p): + logger.warning('Non-existent file: %s', p) + if p.endswith(('.pyc', '.pyo')): + continue + #otherwise fall through and fail + if not os.path.isdir(p): + result.append((p, _md5(p), _size(p))) + result.append((record_path, None, None)) + return result + + def list_distinfo_files(self, absolute=False): + """ + Iterates over the ``installed-files.txt`` entries and returns paths for + each line if the path is pointing to a file located in the + ``.egg-info`` directory or one of its subdirectories. + + :parameter absolute: If *absolute* is ``True``, each returned path is + transformed into a local absolute path. Otherwise the + raw value from ``installed-files.txt`` is returned. + :type absolute: boolean + :returns: iterator of paths + """ + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + skip = True + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line == './': + skip = False + continue + if not skip: + p = os.path.normpath(os.path.join(self.path, line)) + if p.startswith(self.path): + if absolute: + yield p + else: + yield line + + def __eq__(self, other): + return (isinstance(other, EggInfoDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + +class DependencyGraph(object): + """ + Represents a dependency graph between distributions. + + The dependency relationships are stored in an ``adjacency_list`` that maps + distributions to a list of ``(other, label)`` tuples where ``other`` + is a distribution and the edge is labeled with ``label`` (i.e. the version + specifier, if such was provided). Also, for more efficient traversal, for + every distribution ``x``, a list of predecessors is kept in + ``reverse_list[x]``. An edge from distribution ``a`` to + distribution ``b`` means that ``a`` depends on ``b``. If any missing + dependencies are found, they are stored in ``missing``, which is a + dictionary that maps distributions to a list of requirements that were not + provided by any other distributions. + """ + + def __init__(self): + self.adjacency_list = {} + self.reverse_list = {} + self.missing = {} + + def add_distribution(self, distribution): + """Add the *distribution* to the graph. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + """ + self.adjacency_list[distribution] = [] + self.reverse_list[distribution] = [] + #self.missing[distribution] = [] + + def add_edge(self, x, y, label=None): + """Add an edge from distribution *x* to distribution *y* with the given + *label*. + + :type x: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type y: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type label: ``str`` or ``None`` + """ + self.adjacency_list[x].append((y, label)) + # multiple edges are allowed, so be careful + if x not in self.reverse_list[y]: + self.reverse_list[y].append(x) + + def add_missing(self, distribution, requirement): + """ + Add a missing *requirement* for the given *distribution*. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + :type requirement: ``str`` + """ + logger.debug('%s missing %r', distribution, requirement) + self.missing.setdefault(distribution, []).append(requirement) + + def _repr_dist(self, dist): + return '%s %s' % (dist.name, dist.version) + + def repr_node(self, dist, level=1): + """Prints only a subgraph""" + output = [self._repr_dist(dist)] + for other, label in self.adjacency_list[dist]: + dist = self._repr_dist(other) + if label is not None: + dist = '%s [%s]' % (dist, label) + output.append(' ' * level + str(dist)) + suboutput = self.repr_node(other, level + 1) + subs = suboutput.split('\n') + output.extend(subs[1:]) + return '\n'.join(output) + + def to_dot(self, f, skip_disconnected=True): + """Writes a DOT output for the graph to the provided file *f*. + + If *skip_disconnected* is set to ``True``, then all distributions + that are not dependent on any other distribution are skipped. + + :type f: has to support ``file``-like operations + :type skip_disconnected: ``bool`` + """ + disconnected = [] + + f.write("digraph dependencies {\n") + for dist, adjs in self.adjacency_list.items(): + if len(adjs) == 0 and not skip_disconnected: + disconnected.append(dist) + for other, label in adjs: + if not label is None: + f.write('"%s" -> "%s" [label="%s"]\n' % + (dist.name, other.name, label)) + else: + f.write('"%s" -> "%s"\n' % (dist.name, other.name)) + if not skip_disconnected and len(disconnected) > 0: + f.write('subgraph disconnected {\n') + f.write('label = "Disconnected"\n') + f.write('bgcolor = red\n') + + for dist in disconnected: + f.write('"%s"' % dist.name) + f.write('\n') + f.write('}\n') + f.write('}\n') + + def topological_sort(self): + """ + Perform a topological sort of the graph. + :return: A tuple, the first element of which is a topologically sorted + list of distributions, and the second element of which is a + list of distributions that cannot be sorted because they have + circular dependencies and so form a cycle. + """ + result = [] + # Make a shallow copy of the adjacency list + alist = {} + for k, v in self.adjacency_list.items(): + alist[k] = v[:] + while True: + # See what we can remove in this run + to_remove = [] + for k, v in list(alist.items())[:]: + if not v: + to_remove.append(k) + del alist[k] + if not to_remove: + # What's left in alist (if anything) is a cycle. + break + # Remove from the adjacency list of others + for k, v in alist.items(): + alist[k] = [(d, r) for d, r in v if d not in to_remove] + logger.debug('Moving to result: %s', + ['%s (%s)' % (d.name, d.version) for d in to_remove]) + result.extend(to_remove) + return result, list(alist.keys()) + + def __repr__(self): + """Representation of the graph""" + output = [] + for dist, adjs in self.adjacency_list.items(): + output.append(self.repr_node(dist)) + return '\n'.join(output) + + +def make_graph(dists, scheme='default'): + """Makes a dependency graph from the given distributions. + + :parameter dists: a list of distributions + :type dists: list of :class:`distutils2.database.InstalledDistribution` and + :class:`distutils2.database.EggInfoDistribution` instances + :rtype: a :class:`DependencyGraph` instance + """ + scheme = get_scheme(scheme) + graph = DependencyGraph() + provided = {} # maps names to lists of (version, dist) tuples + + # first, build the graph and find out what's provided + for dist in dists: + graph.add_distribution(dist) + + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + provided.setdefault(name, []).append((version, dist)) + + # now make the edges + for dist in dists: + requires = (dist.run_requires | dist.meta_requires | + dist.build_requires | dist.dev_requires) + for req in requires: + try: + matcher = scheme.matcher(req) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + matched = False + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + graph.add_edge(dist, provider, req) + matched = True + break + if not matched: + graph.add_missing(dist, req) + return graph + + +def get_dependent_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + dependent on *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + dep = [dist] # dependent distributions + todo = graph.reverse_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop() + dep.append(d) + for succ in graph.reverse_list[d]: + if succ not in dep: + todo.append(succ) + + dep.pop(0) # remove dist from dep, was there to prevent infinite loops + return dep + + +def get_required_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + required by *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = [] # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop()[0] + req.append(d) + for pred in graph.adjacency_list[d]: + if pred not in req: + todo.append(pred) + + return req + + +def make_dist(name, version, **kwargs): + """ + A convenience method for making a dist given just a name and version. + """ + summary = kwargs.pop('summary', 'Placeholder for summary') + md = Metadata(**kwargs) + md.name = name + md.version = version + md.summary = summary or 'Placeholder for summary' + return Distribution(md) diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/index.py b/venv/Lib/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 000000000..b1fbbf8e8 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,509 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import hashlib +import logging +import os +import shutil +import subprocess +import tempfile +try: + from threading import Thread +except ImportError: + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.org/pypi' +DEFAULT_REALM = 'pypi' + +class PackageIndex(object): + """ + This class represents a package index compatible with PyPI, the Python + Package Index. + """ + + boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' + + def __init__(self, url=None): + """ + Initialise an instance. + + :param url: The URL of the index. If not specified, the URL for PyPI is + used. + """ + self.url = url or DEFAULT_INDEX + self.read_configuration() + scheme, netloc, path, params, query, frag = urlparse(self.url) + if params or query or frag or scheme not in ('http', 'https'): + raise DistlibException('invalid repository: %s' % self.url) + self.password_handler = None + self.ssl_verifier = None + self.gpg = None + self.gpg_home = None + with open(os.devnull, 'w') as sink: + # Use gpg by default rather than gpg2, as gpg2 insists on + # prompting for passwords + for s in ('gpg', 'gpg2'): + try: + rc = subprocess.check_call([s, '--version'], stdout=sink, + stderr=sink) + if rc == 0: + self.gpg = s + break + except OSError: + pass + + def _get_pypirc_command(self): + """ + Get the distutils command for interacting with PyPI configurations. + :return: the command. + """ + from .util import _get_pypirc_command as cmd + return cmd() + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils. This populates + ``username``, ``password``, ``realm`` and ``url`` attributes from the + configuration. + """ + from .util import _load_pypirc + cfg = _load_pypirc(self) + self.username = cfg.get('username') + self.password = cfg.get('password') + self.realm = cfg.get('realm', 'pypi') + self.url = cfg.get('repository', self.url) + + def save_configuration(self): + """ + Save the PyPI access configuration. You must have set ``username`` and + ``password`` attributes before calling this method. + """ + self.check_credentials() + from .util import _store_pypirc + _store_pypirc(self) + + def check_credentials(self): + """ + Check that ``username`` and ``password`` have been set, and raise an + exception if not. + """ + if self.username is None or self.password is None: + raise DistlibException('username and password must be set') + pm = HTTPPasswordMgr() + _, netloc, _, _, _, _ = urlparse(self.url) + pm.add_password(self.realm, netloc, self.username, self.password) + self.password_handler = HTTPBasicAuthHandler(pm) + + def register(self, metadata): + """ + Register a distribution on PyPI, using the provided metadata. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the distribution to be + registered. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + metadata.validate() + d = metadata.todict() + d[':action'] = 'verify' + request = self.encode_request(d.items(), []) + response = self.send_request(request) + d[':action'] = 'submit' + request = self.encode_request(d.items(), []) + return self.send_request(request) + + def _reader(self, name, stream, outbuf): + """ + Thread runner for reading lines of from a subprocess into a buffer. + + :param name: The logical name of the stream (used for logging only). + :param stream: The stream to read from. This will typically a pipe + connected to the output stream of a subprocess. + :param outbuf: The list to append the read lines to. + """ + while True: + s = stream.readline() + if not s: + break + s = s.decode('utf-8').rstrip() + outbuf.append(s) + logger.debug('%s: %s' % (name, s)) + stream.close() + + def get_sign_command(self, filename, signer, sign_password, + keystore=None): + """ + Return a suitable command for signing a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The signing command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + if sign_password is not None: + cmd.extend(['--batch', '--passphrase-fd', '0']) + td = tempfile.mkdtemp() + sf = os.path.join(td, os.path.basename(filename) + '.asc') + cmd.extend(['--detach-sign', '--armor', '--local-user', + signer, '--output', sf, filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd, sf + + def run_command(self, cmd, input_data=None): + """ + Run a command in a child process , passing it any input data specified. + + :param cmd: The command to run. + :param input_data: If specified, this must be a byte string containing + data to be sent to the child process. + :return: A tuple consisting of the subprocess' exit code, a list of + lines read from the subprocess' ``stdout``, and a list of + lines read from the subprocess' ``stderr``. + """ + kwargs = { + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE, + } + if input_data is not None: + kwargs['stdin'] = subprocess.PIPE + stdout = [] + stderr = [] + p = subprocess.Popen(cmd, **kwargs) + # We don't use communicate() here because we may need to + # get clever with interacting with the command + t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) + t1.start() + t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) + t2.start() + if input_data is not None: + p.stdin.write(input_data) + p.stdin.close() + + p.wait() + t1.join() + t2.join() + return p.returncode, stdout, stderr + + def sign_file(self, filename, signer, sign_password, keystore=None): + """ + Sign a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The absolute pathname of the file where the signature is + stored. + """ + cmd, sig_file = self.get_sign_command(filename, signer, sign_password, + keystore) + rc, stdout, stderr = self.run_command(cmd, + sign_password.encode('utf-8')) + if rc != 0: + raise DistlibException('sign command failed with error ' + 'code %s' % rc) + return sig_file + + def upload_file(self, metadata, filename, signer=None, sign_password=None, + filetype='sdist', pyversion='source', keystore=None): + """ + Upload a release file to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the file to be uploaded. + :param filename: The pathname of the file to be uploaded. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param filetype: The type of the file being uploaded. This is the + distutils command which produced that file, e.g. + ``sdist`` or ``bdist_wheel``. + :param pyversion: The version of Python which the release relates + to. For code compatible with any Python, this would + be ``source``, otherwise it would be e.g. ``3.2``. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.exists(filename): + raise DistlibException('not found: %s' % filename) + metadata.validate() + d = metadata.todict() + sig_file = None + if signer: + if not self.gpg: + logger.warning('no signing program available - not signed') + else: + sig_file = self.sign_file(filename, signer, sign_password, + keystore) + with open(filename, 'rb') as f: + file_data = f.read() + md5_digest = hashlib.md5(file_data).hexdigest() + sha256_digest = hashlib.sha256(file_data).hexdigest() + d.update({ + ':action': 'file_upload', + 'protocol_version': '1', + 'filetype': filetype, + 'pyversion': pyversion, + 'md5_digest': md5_digest, + 'sha256_digest': sha256_digest, + }) + files = [('content', os.path.basename(filename), file_data)] + if sig_file: + with open(sig_file, 'rb') as f: + sig_data = f.read() + files.append(('gpg_signature', os.path.basename(sig_file), + sig_data)) + shutil.rmtree(os.path.dirname(sig_file)) + request = self.encode_request(d.items(), files) + return self.send_request(request) + + def upload_documentation(self, metadata, doc_dir): + """ + Upload documentation to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the documentation to be + uploaded. + :param doc_dir: The pathname of the directory which contains the + documentation. This should be the directory that + contains the ``index.html`` for the documentation. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.isdir(doc_dir): + raise DistlibException('not a directory: %r' % doc_dir) + fn = os.path.join(doc_dir, 'index.html') + if not os.path.exists(fn): + raise DistlibException('not found: %r' % fn) + metadata.validate() + name, version = metadata.name, metadata.version + zip_data = zip_dir(doc_dir).getvalue() + fields = [(':action', 'doc_upload'), + ('name', name), ('version', version)] + files = [('content', name, zip_data)] + request = self.encode_request(fields, files) + return self.send_request(request) + + def get_verify_command(self, signature_filename, data_filename, + keystore=None): + """ + Return a suitable command for verifying a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The verifying command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + cmd.extend(['--verify', signature_filename, data_filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd + + def verify_signature(self, signature_filename, data_filename, + keystore=None): + """ + Verify a signature for a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: True if the signature was verified, else False. + """ + if not self.gpg: + raise DistlibException('verification unavailable because gpg ' + 'unavailable') + cmd = self.get_verify_command(signature_filename, data_filename, + keystore) + rc, stdout, stderr = self.run_command(cmd) + if rc not in (0, 1): + raise DistlibException('verify command failed with error ' + 'code %s' % rc) + return rc == 0 + + def download_file(self, url, destfile, digest=None, reporthook=None): + """ + This is a convenience method for downloading a file from an URL. + Normally, this will be a file from the index, though currently + no check is made for this (i.e. a file can be downloaded from + anywhere). + + The method is just like the :func:`urlretrieve` function in the + standard library, except that it allows digest computation to be + done during download and checking that the downloaded data + matched any expected value. + + :param url: The URL of the file to be downloaded (assumed to be + available via an HTTP GET request). + :param destfile: The pathname where the downloaded file is to be + saved. + :param digest: If specified, this must be a (hasher, value) + tuple, where hasher is the algorithm used (e.g. + ``'md5'``) and ``value`` is the expected value. + :param reporthook: The same as for :func:`urlretrieve` in the + standard library. + """ + if digest is None: + digester = None + logger.debug('No digest specified') + else: + if isinstance(digest, (list, tuple)): + hasher, digest = digest + else: + hasher = 'md5' + digester = getattr(hashlib, hasher)() + logger.debug('Digest specified: %s' % digest) + # The following code is equivalent to urlretrieve. + # We need to do it this way so that we can compute the + # digest of the file as we go. + with open(destfile, 'wb') as dfp: + # addinfourl is not a context manager on 2.x + # so we have to use try/finally + sfp = self.send_request(Request(url)) + try: + headers = sfp.info() + blocksize = 8192 + size = -1 + read = 0 + blocknum = 0 + if "content-length" in headers: + size = int(headers["Content-Length"]) + if reporthook: + reporthook(blocknum, blocksize, size) + while True: + block = sfp.read(blocksize) + if not block: + break + read += len(block) + dfp.write(block) + if digester: + digester.update(block) + blocknum += 1 + if reporthook: + reporthook(blocknum, blocksize, size) + finally: + sfp.close() + + # check that we got the whole file, if we can + if size >= 0 and read < size: + raise DistlibException( + 'retrieval incomplete: got only %d out of %d bytes' + % (read, size)) + # if we have a digest, it must match. + if digester: + actual = digester.hexdigest() + if digest != actual: + raise DistlibException('%s digest mismatch for %s: expected ' + '%s, got %s' % (hasher, destfile, + digest, actual)) + logger.debug('Digest verified: %s', digest) + + def send_request(self, req): + """ + Send a standard library :class:`Request` to PyPI and return its + response. + + :param req: The request to send. + :return: The HTTP response from PyPI (a standard library HTTPResponse). + """ + handlers = [] + if self.password_handler: + handlers.append(self.password_handler) + if self.ssl_verifier: + handlers.append(self.ssl_verifier) + opener = build_opener(*handlers) + return opener.open(req) + + def encode_request(self, fields, files): + """ + Encode fields and files for posting to an HTTP server. + + :param fields: The fields to send as a list of (fieldname, value) + tuples. + :param files: The files to send as a list of (fieldname, filename, + file_bytes) tuple. + """ + # Adapted from packaging, which in turn was adapted from + # http://code.activestate.com/recipes/146306 + + parts = [] + boundary = self.boundary + for k, values in fields: + if not isinstance(values, (list, tuple)): + values = [values] + + for v in values: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"' % + k).encode('utf-8'), + b'', + v.encode('utf-8'))) + for key, filename, value in files: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"; filename="%s"' % + (key, filename)).encode('utf-8'), + b'', + value)) + + parts.extend((b'--' + boundary + b'--', b'')) + + body = b'\r\n'.join(parts) + ct = b'multipart/form-data; boundary=' + boundary + headers = { + 'Content-type': ct, + 'Content-length': str(len(body)) + } + return Request(self.url, body, headers) + + def search(self, terms, operator=None): + if isinstance(terms, string_types): + terms = {'name': terms} + rpc_proxy = ServerProxy(self.url, timeout=3.0) + try: + return rpc_proxy.search(terms, operator or 'and') + finally: + rpc_proxy('close')() diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/locators.py b/venv/Lib/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 000000000..0c7d63914 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1300 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# + +import gzip +from io import BytesIO +import json +import logging +import os +import posixpath +import re +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import zlib + +from . import DistlibException +from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, + queue, quote, unescape, build_opener, + HTTPRedirectHandler as BaseRedirectHandler, text_type, + Request, HTTPError, URLError) +from .database import Distribution, DistributionPath, make_dist +from .metadata import Metadata, MetadataInvalidError +from .util import (cached_property, ensure_slash, split_filename, get_project_data, + parse_requirement, parse_name_and_version, ServerProxy, + normalize_name) +from .version import get_scheme, UnsupportedVersionError +from .wheel import Wheel, is_compatible + +logger = logging.getLogger(__name__) + +HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') +CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) +HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') +DEFAULT_INDEX = 'https://pypi.org/pypi' + +def get_all_distribution_names(url=None): + """ + Return all distribution names known by an index. + :param url: The URL of the index. + :return: A list of all known distribution names. + """ + if url is None: + url = DEFAULT_INDEX + client = ServerProxy(url, timeout=3.0) + try: + return client.list_packages() + finally: + client('close')() + +class RedirectHandler(BaseRedirectHandler): + """ + A class to work around a bug in some Python 3.2.x releases. + """ + # There's a bug in the base version for some 3.2.x + # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header + # returns e.g. /abc, it bails because it says the scheme '' + # is bogus, when actually it should use the request's + # URL for the scheme. See Python issue #13696. + def http_error_302(self, req, fp, code, msg, headers): + # Some servers (incorrectly) return multiple Location headers + # (so probably same goes for URI). Use first header. + newurl = None + for key in ('location', 'uri'): + if key in headers: + newurl = headers[key] + break + if newurl is None: # pragma: no cover + return + urlparts = urlparse(newurl) + if urlparts.scheme == '': + newurl = urljoin(req.get_full_url(), newurl) + if hasattr(headers, 'replace_header'): + headers.replace_header(key, newurl) + else: + headers[key] = newurl + return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, + headers) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + +class Locator(object): + """ + A base class for locators - things that locate distributions. + """ + source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') + binary_extensions = ('.egg', '.exe', '.whl') + excluded_extensions = ('.pdf',) + + # A list of tags indicating which wheels you want to match. The default + # value of None matches against the tags compatible with the running + # Python. If you want to match other values, set wheel_tags on a locator + # instance to a list of tuples (pyver, abi, arch) which you want to match. + wheel_tags = None + + downloadable_extensions = source_extensions + ('.whl',) + + def __init__(self, scheme='default'): + """ + Initialise an instance. + :param scheme: Because locators look for most recent versions, they + need to know the version scheme to use. This specifies + the current PEP-recommended scheme - use ``'legacy'`` + if you need to support existing distributions on PyPI. + """ + self._cache = {} + self.scheme = scheme + # Because of bugs in some of the handlers on some of the platforms, + # we use our own opener rather than just using urlopen. + self.opener = build_opener(RedirectHandler()) + # If get_project() is called from locate(), the matcher instance + # is set from the requirement passed to locate(). See issue #18 for + # why this can be useful to know. + self.matcher = None + self.errors = queue.Queue() + + def get_errors(self): + """ + Return any errors which have occurred. + """ + result = [] + while not self.errors.empty(): # pragma: no cover + try: + e = self.errors.get(False) + result.append(e) + except self.errors.Empty: + continue + self.errors.task_done() + return result + + def clear_errors(self): + """ + Clear any errors which may have been logged. + """ + # Just get the errors and throw them away + self.get_errors() + + def clear_cache(self): + self._cache.clear() + + def _get_scheme(self): + return self._scheme + + def _set_scheme(self, value): + self._scheme = value + + scheme = property(_get_scheme, _set_scheme) + + def _get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This should be implemented in subclasses. + + If called from a locate() request, self.matcher will be set to a + matcher for the requirement to satisfy, otherwise it will be None. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This calls _get_project to do all the work, and just implements a caching layer on top. + """ + if self._cache is None: # pragma: no cover + result = self._get_project(name) + elif name in self._cache: + result = self._cache[name] + else: + self.clear_errors() + result = self._get_project(name) + self._cache[name] = result + return result + + def score_url(self, url): + """ + Give an url a score which can be used to choose preferred URLs + for a given project release. + """ + t = urlparse(url) + basename = posixpath.basename(t.path) + compatible = True + is_wheel = basename.endswith('.whl') + is_downloadable = basename.endswith(self.downloadable_extensions) + if is_wheel: + compatible = is_compatible(Wheel(basename), self.wheel_tags) + return (t.scheme == 'https', 'pypi.org' in t.netloc, + is_downloadable, is_wheel, compatible, basename) + + def prefer_url(self, url1, url2): + """ + Choose one of two URLs where both are candidates for distribution + archives for the same version of a distribution (for example, + .tar.gz vs. zip). + + The current implementation favours https:// URLs over http://, archives + from PyPI over those from other locations, wheel compatibility (if a + wheel) and then the archive name. + """ + result = url2 + if url1: + s1 = self.score_url(url1) + s2 = self.score_url(url2) + if s1 > s2: + result = url1 + if result != url2: + logger.debug('Not replacing %r with %r', url1, url2) + else: + logger.debug('Replacing %r with %r', url1, url2) + return result + + def split_filename(self, filename, project_name): + """ + Attempt to split a filename in project name, version and Python version. + """ + return split_filename(filename, project_name) + + def convert_url_to_download_info(self, url, project_name): + """ + See if a URL is a candidate for a download URL for a project (the URL + has typically been scraped from an HTML page). + + If it is, a dictionary is returned with keys "name", "version", + "filename" and "url"; otherwise, None is returned. + """ + def same_project(name1, name2): + return normalize_name(name1) == normalize_name(name2) + + result = None + scheme, netloc, path, params, query, frag = urlparse(url) + if frag.lower().startswith('egg='): # pragma: no cover + logger.debug('%s: version hint in fragment: %r', + project_name, frag) + m = HASHER_HASH.match(frag) + if m: + algo, digest = m.groups() + else: + algo, digest = None, None + origpath = path + if path and path[-1] == '/': # pragma: no cover + path = path[:-1] + if path.endswith('.whl'): + try: + wheel = Wheel(path) + if not is_compatible(wheel, self.wheel_tags): + logger.debug('Wheel not compatible: %s', path) + else: + if project_name is None: + include = True + else: + include = same_project(wheel.name, project_name) + if include: + result = { + 'name': wheel.name, + 'version': wheel.version, + 'filename': wheel.filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + 'python-version': ', '.join( + ['.'.join(list(v[2:])) for v in wheel.pyver]), + } + except Exception as e: # pragma: no cover + logger.warning('invalid path for wheel: %s', path) + elif not path.endswith(self.downloadable_extensions): # pragma: no cover + logger.debug('Not downloadable: %s', path) + else: # downloadable extension + path = filename = posixpath.basename(path) + for ext in self.downloadable_extensions: + if path.endswith(ext): + path = path[:-len(ext)] + t = self.split_filename(path, project_name) + if not t: # pragma: no cover + logger.debug('No match for project/version: %s', path) + else: + name, version, pyver = t + if not project_name or same_project(project_name, name): + result = { + 'name': name, + 'version': version, + 'filename': filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + #'packagetype': 'sdist', + } + if pyver: # pragma: no cover + result['python-version'] = pyver + break + if result and algo: + result['%s_digest' % algo] = digest + return result + + def _get_digest(self, info): + """ + Get a digest from a dictionary by looking at a "digests" dictionary + or keys of the form 'algo_digest'. + + Returns a 2-tuple (algo, digest) if found, else None. Currently + looks only for SHA256, then MD5. + """ + result = None + if 'digests' in info: + digests = info['digests'] + for algo in ('sha256', 'md5'): + if algo in digests: + result = (algo, digests[algo]) + break + if not result: + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break + return result + + def _update_version_data(self, result, info): + """ + Update a result dictionary (the final result from _get_project) with a + dictionary for a specific version, which typically holds information + gleaned from a filename or URL for an archive for the distribution. + """ + name = info.pop('name') + version = info.pop('version') + if version in result: + dist = result[version] + md = dist.metadata + else: + dist = make_dist(name, version, scheme=self.scheme) + md = dist.metadata + dist.digest = digest = self._get_digest(info) + url = info['url'] + result['digests'][url] = digest + if md.source_url != info['url']: + md.source_url = self.prefer_url(md.source_url, url) + result['urls'].setdefault(version, set()).add(url) + dist.locator = self + result[version] = dist + + def locate(self, requirement, prereleases=False): + """ + Find the most recent distribution which matches the given + requirement. + + :param requirement: A requirement of the form 'foo (1.0)' or perhaps + 'foo (>= 1.0, < 2.0, != 1.3)' + :param prereleases: If ``True``, allow pre-release versions + to be located. Otherwise, pre-release versions + are not returned. + :return: A :class:`Distribution` instance, or ``None`` if no such + distribution could be located. + """ + result = None + r = parse_requirement(requirement) + if r is None: # pragma: no cover + raise DistlibException('Not a valid requirement: %r' % requirement) + scheme = get_scheme(self.scheme) + self.matcher = matcher = scheme.matcher(r.requirement) + logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) + versions = self.get_project(r.name) + if len(versions) > 2: # urls and digests keys are present + # sometimes, versions are invalid + slist = [] + vcls = matcher.version_class + for k in versions: + if k in ('urls', 'digests'): + continue + try: + if not matcher.match(k): + pass # logger.debug('%s did not match %r', matcher, k) + else: + if prereleases or not vcls(k).is_prerelease: + slist.append(k) + # else: + # logger.debug('skipping pre-release ' + # 'version %s of %s', k, matcher.name) + except Exception: # pragma: no cover + logger.warning('error matching %s with %r', matcher, k) + pass # slist.append(k) + if len(slist) > 1: + slist = sorted(slist, key=scheme.key) + if slist: + logger.debug('sorted list: %s', slist) + version = slist[-1] + result = versions[version] + if result: + if r.extras: + result.extras = r.extras + result.download_urls = versions.get('urls', {}).get(version, set()) + d = {} + sd = versions.get('digests', {}) + for url in result.download_urls: + if url in sd: # pragma: no cover + d[url] = sd[url] + result.digests = d + self.matcher = None + return result + + +class PyPIRPCLocator(Locator): + """ + This locator uses XML-RPC to locate distributions. It therefore + cannot be used with simple mirrors (that only mirror file content). + """ + def __init__(self, url, **kwargs): + """ + Initialise an instance. + + :param url: The URL to use for XML-RPC. + :param kwargs: Passed to the superclass constructor. + """ + super(PyPIRPCLocator, self).__init__(**kwargs) + self.base_url = url + self.client = ServerProxy(url, timeout=3.0) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + return set(self.client.list_packages()) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + versions = self.client.package_releases(name, True) + for v in versions: + urls = self.client.release_urls(name, v) + data = self.client.release_data(name, v) + metadata = Metadata(scheme=self.scheme) + metadata.name = data['name'] + metadata.version = data['version'] + metadata.license = data.get('license') + metadata.keywords = data.get('keywords', []) + metadata.summary = data.get('summary') + dist = Distribution(metadata) + if urls: + info = urls[0] + metadata.source_url = info['url'] + dist.digest = self._get_digest(info) + dist.locator = self + result[v] = dist + for info in urls: + url = info['url'] + digest = self._get_digest(info) + result['urls'].setdefault(v, set()).add(url) + result['digests'][url] = digest + return result + +class PyPIJSONLocator(Locator): + """ + This locator uses PyPI's JSON interface. It's very limited in functionality + and probably not worth using. + """ + def __init__(self, url, **kwargs): + super(PyPIJSONLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + url = urljoin(self.base_url, '%s/json' % quote(name)) + try: + resp = self.opener.open(url) + data = resp.read().decode() # for now + d = json.loads(data) + md = Metadata(scheme=self.scheme) + data = d['info'] + md.name = data['name'] + md.version = data['version'] + md.license = data.get('license') + md.keywords = data.get('keywords', []) + md.summary = data.get('summary') + dist = Distribution(md) + dist.locator = self + urls = d['urls'] + result[md.version] = dist + for info in d['urls']: + url = info['url'] + dist.download_urls.add(url) + dist.digests[url] = self._get_digest(info) + result['urls'].setdefault(md.version, set()).add(url) + result['digests'][url] = self._get_digest(info) + # Now get other releases + for version, infos in d['releases'].items(): + if version == md.version: + continue # already done + omd = Metadata(scheme=self.scheme) + omd.name = md.name + omd.version = version + odist = Distribution(omd) + odist.locator = self + result[version] = odist + for info in infos: + url = info['url'] + odist.download_urls.add(url) + odist.digests[url] = self._get_digest(info) + result['urls'].setdefault(version, set()).add(url) + result['digests'][url] = self._get_digest(info) +# for info in urls: +# md.source_url = info['url'] +# dist.digest = self._get_digest(info) +# dist.locator = self +# for info in urls: +# url = info['url'] +# result['urls'].setdefault(md.version, set()).add(url) +# result['digests'][url] = self._get_digest(info) + except Exception as e: + self.errors.put(text_type(e)) + logger.exception('JSON fetch failed: %s', e) + return result + + +class Page(object): + """ + This class represents a scraped HTML page. + """ + # The following slightly hairy-looking regex just looks for the contents of + # an anchor link, which has an attribute "href" either immediately preceded + # or immediately followed by a "rel" attribute. The attribute values can be + # declared with double quotes, single quotes or no quotes - which leads to + # the length of the expression. + _href = re.compile(""" +(rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? +href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) +(\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""]+)""", re.I | re.S) + + def __init__(self, data, url): + """ + Initialise an instance with the Unicode page contents and the URL they + came from. + """ + self.data = data + self.base_url = self.url = url + m = self._base.search(self.data) + if m: + self.base_url = m.group(1) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + @cached_property + def links(self): + """ + Return the URLs of all the links on a page together with information + about their "rel" attribute, for determining which ones to treat as + downloads and which ones to queue for further scraping. + """ + def clean(url): + "Tidy up an URL." + scheme, netloc, path, params, query, frag = urlparse(url) + return urlunparse((scheme, netloc, quote(path), + params, query, frag)) + + result = set() + for match in self._href.finditer(self.data): + d = match.groupdict('') + rel = (d['rel1'] or d['rel2'] or d['rel3'] or + d['rel4'] or d['rel5'] or d['rel6']) + url = d['url1'] or d['url2'] or d['url3'] + url = urljoin(self.base_url, url) + url = unescape(url) + url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) + result.add((url, rel)) + # We sort the result, hoping to bring the most recent versions + # to the front + result = sorted(result, key=lambda t: t[0], reverse=True) + return result + + +class SimpleScrapingLocator(Locator): + """ + A locator which scrapes HTML pages to locate downloads for a distribution. + This runs multiple threads to do the I/O; performance is at least as good + as pip's PackageFinder, which works in an analogous fashion. + """ + + # These are used to deal with various Content-Encoding schemes. + decoders = { + 'deflate': zlib.decompress, + 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(b)).read(), + 'none': lambda b: b, + } + + def __init__(self, url, timeout=None, num_workers=10, **kwargs): + """ + Initialise an instance. + :param url: The root URL to use for scraping. + :param timeout: The timeout, in seconds, to be applied to requests. + This defaults to ``None`` (no timeout specified). + :param num_workers: The number of worker threads you want to do I/O, + This defaults to 10. + :param kwargs: Passed to the superclass. + """ + super(SimpleScrapingLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + self.timeout = timeout + self._page_cache = {} + self._seen = set() + self._to_fetch = queue.Queue() + self._bad_hosts = set() + self.skip_externals = False + self.num_workers = num_workers + self._lock = threading.RLock() + # See issue #45: we need to be resilient when the locator is used + # in a thread, e.g. with concurrent.futures. We can't use self._lock + # as it is for coordinating our internal threads - the ones created + # in _prepare_threads. + self._gplock = threading.RLock() + self.platform_check = False # See issue #112 + + def _prepare_threads(self): + """ + Threads are created only when get_project is called, and terminate + before it returns. They are there primarily to parallelise I/O (i.e. + fetching web pages). + """ + self._threads = [] + for i in range(self.num_workers): + t = threading.Thread(target=self._fetch) + t.setDaemon(True) + t.start() + self._threads.append(t) + + def _wait_threads(self): + """ + Tell all the threads to terminate (by sending a sentinel value) and + wait for them to do so. + """ + # Note that you need two loops, since you can't say which + # thread will get each sentinel + for t in self._threads: + self._to_fetch.put(None) # sentinel + for t in self._threads: + t.join() + self._threads = [] + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + with self._gplock: + self.result = result + self.project_name = name + url = urljoin(self.base_url, '%s/' % quote(name)) + self._seen.clear() + self._page_cache.clear() + self._prepare_threads() + try: + logger.debug('Queueing %s', url) + self._to_fetch.put(url) + self._to_fetch.join() + finally: + self._wait_threads() + del self.result + return result + + platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' + r'win(32|_amd64)|macosx_?\d+)\b', re.I) + + def _is_platform_dependent(self, url): + """ + Does an URL refer to a platform-specific download? + """ + return self.platform_dependent.search(url) + + def _process_download(self, url): + """ + See if an URL is a suitable download for a project. + + If it is, register information in the result dictionary (for + _get_project) about the specific version it's for. + + Note that the return value isn't actually used other than as a boolean + value. + """ + if self.platform_check and self._is_platform_dependent(url): + info = None + else: + info = self.convert_url_to_download_info(url, self.project_name) + logger.debug('process_download: %s -> %s', url, info) + if info: + with self._lock: # needed because self.result is shared + self._update_version_data(self.result, info) + return info + + def _should_queue(self, link, referrer, rel): + """ + Determine whether a link URL from a referring page and with a + particular "rel" attribute should be queued for scraping. + """ + scheme, netloc, path, _, _, _ = urlparse(link) + if path.endswith(self.source_extensions + self.binary_extensions + + self.excluded_extensions): + result = False + elif self.skip_externals and not link.startswith(self.base_url): + result = False + elif not referrer.startswith(self.base_url): + result = False + elif rel not in ('homepage', 'download'): + result = False + elif scheme not in ('http', 'https', 'ftp'): + result = False + elif self._is_platform_dependent(link): + result = False + else: + host = netloc.split(':', 1)[0] + if host.lower() == 'localhost': + result = False + else: + result = True + logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, + referrer, result) + return result + + def _fetch(self): + """ + Get a URL to fetch from the work queue, get the HTML page, examine its + links for download candidates and candidates for further scraping. + + This is a handy method to run in a thread. + """ + while True: + url = self._to_fetch.get() + try: + if url: + page = self.get_page(url) + if page is None: # e.g. after an error + continue + for link, rel in page.links: + if link not in self._seen: + try: + self._seen.add(link) + if (not self._process_download(link) and + self._should_queue(link, url, rel)): + logger.debug('Queueing %s from %s', link, url) + self._to_fetch.put(link) + except MetadataInvalidError: # e.g. invalid versions + pass + except Exception as e: # pragma: no cover + self.errors.put(text_type(e)) + finally: + # always do this, to avoid hangs :-) + self._to_fetch.task_done() + if not url: + #logger.debug('Sentinel seen, quitting.') + break + + def get_page(self, url): + """ + Get the HTML for an URL, possibly from an in-memory cache. + + XXX TODO Note: this cache is never actually cleared. It's assumed that + the data won't get stale over the lifetime of a locator instance (not + necessarily true for the default_locator). + """ + # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api + scheme, netloc, path, _, _, _ = urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + url = urljoin(ensure_slash(url), 'index.html') + + if url in self._page_cache: + result = self._page_cache[url] + logger.debug('Returning %s from cache: %s', url, result) + else: + host = netloc.split(':', 1)[0] + result = None + if host in self._bad_hosts: + logger.debug('Skipping %s due to bad host %s', url, host) + else: + req = Request(url, headers={'Accept-encoding': 'identity'}) + try: + logger.debug('Fetching %s', url) + resp = self.opener.open(req, timeout=self.timeout) + logger.debug('Fetched %s', url) + headers = resp.info() + content_type = headers.get('Content-Type', '') + if HTML_CONTENT_TYPE.match(content_type): + final_url = resp.geturl() + data = resp.read() + encoding = headers.get('Content-Encoding') + if encoding: + decoder = self.decoders[encoding] # fail if not found + data = decoder(data) + encoding = 'utf-8' + m = CHARSET.search(content_type) + if m: + encoding = m.group(1) + try: + data = data.decode(encoding) + except UnicodeError: # pragma: no cover + data = data.decode('latin-1') # fallback + result = Page(data, final_url) + self._page_cache[final_url] = result + except HTTPError as e: + if e.code != 404: + logger.exception('Fetch failed: %s: %s', url, e) + except URLError as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + with self._lock: + self._bad_hosts.add(host) + except Exception as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + finally: + self._page_cache[url] = result # even if None (failure) + return result + + _distname_re = re.compile(']*>([^<]+)<') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + page = self.get_page(self.base_url) + if not page: + raise DistlibException('Unable to get %s' % self.base_url) + for match in self._distname_re.finditer(page.data): + result.add(match.group(1)) + return result + +class DirectoryLocator(Locator): + """ + This class locates distributions in a directory tree. + """ + + def __init__(self, path, **kwargs): + """ + Initialise an instance. + :param path: The root of the directory tree to search. + :param kwargs: Passed to the superclass constructor, + except for: + * recursive - if True (the default), subdirectories are + recursed into. If False, only the top-level directory + is searched, + """ + self.recursive = kwargs.pop('recursive', True) + super(DirectoryLocator, self).__init__(**kwargs) + path = os.path.abspath(path) + if not os.path.isdir(path): # pragma: no cover + raise DistlibException('Not a directory: %r' % path) + self.base_dir = path + + def should_include(self, filename, parent): + """ + Should a filename be considered as a candidate for a distribution + archive? As well as the filename, the directory which contains it + is provided, though not used by the current implementation. + """ + return filename.endswith(self.downloadable_extensions) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, name) + if info: + self._update_version_data(result, info) + if not self.recursive: + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, None) + if info: + result.add(info['name']) + if not self.recursive: + break + return result + +class JSONLocator(Locator): + """ + This locator uses special extended metadata (not available on PyPI) and is + the basis of performant dependency resolution in distlib. Other locators + require archive downloads before dependencies can be determined! As you + might imagine, that can be slow. + """ + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + data = get_project_data(name) + if data: + for info in data.get('files', []): + if info['ptype'] != 'sdist' or info['pyversion'] != 'source': + continue + # We don't store summary in project metadata as it makes + # the data bigger for no benefit during dependency + # resolution + dist = make_dist(data['name'], info['version'], + summary=data.get('summary', + 'Placeholder for summary'), + scheme=self.scheme) + md = dist.metadata + md.source_url = info['url'] + # TODO SHA256 digest + if 'digest' in info and info['digest']: + dist.digest = ('md5', info['digest']) + md.dependencies = info.get('requirements', {}) + dist.exports = info.get('exports', {}) + result[dist.version] = dist + result['urls'].setdefault(dist.version, set()).add(info['url']) + return result + +class DistPathLocator(Locator): + """ + This locator finds installed distributions in a path. It can be useful for + adding to an :class:`AggregatingLocator`. + """ + def __init__(self, distpath, **kwargs): + """ + Initialise an instance. + + :param distpath: A :class:`DistributionPath` instance to search. + """ + super(DistPathLocator, self).__init__(**kwargs) + assert isinstance(distpath, DistributionPath) + self.distpath = distpath + + def _get_project(self, name): + dist = self.distpath.get_distribution(name) + if dist is None: + result = {'urls': {}, 'digests': {}} + else: + result = { + dist.version: dist, + 'urls': {dist.version: set([dist.source_url])}, + 'digests': {dist.version: set([None])} + } + return result + + +class AggregatingLocator(Locator): + """ + This class allows you to chain and/or merge a list of locators. + """ + def __init__(self, *locators, **kwargs): + """ + Initialise an instance. + + :param locators: The list of locators to search. + :param kwargs: Passed to the superclass constructor, + except for: + * merge - if False (the default), the first successful + search from any of the locators is returned. If True, + the results from all locators are merged (this can be + slow). + """ + self.merge = kwargs.pop('merge', False) + self.locators = locators + super(AggregatingLocator, self).__init__(**kwargs) + + def clear_cache(self): + super(AggregatingLocator, self).clear_cache() + for locator in self.locators: + locator.clear_cache() + + def _set_scheme(self, value): + self._scheme = value + for locator in self.locators: + locator.scheme = value + + scheme = property(Locator.scheme.fget, _set_scheme) + + def _get_project(self, name): + result = {} + for locator in self.locators: + d = locator.get_project(name) + if d: + if self.merge: + files = result.get('urls', {}) + digests = result.get('digests', {}) + # next line could overwrite result['urls'], result['digests'] + result.update(d) + df = result.get('urls') + if files and df: + for k, v in files.items(): + if k in df: + df[k] |= v + else: + df[k] = v + dd = result.get('digests') + if digests and dd: + dd.update(digests) + else: + # See issue #18. If any dists are found and we're looking + # for specific constraints, we only return something if + # a match is found. For example, if a DirectoryLocator + # returns just foo (1.0) while we're looking for + # foo (>= 2.0), we'll pretend there was nothing there so + # that subsequent locators can be queried. Otherwise we + # would just return foo (1.0) which would then lead to a + # failure to find foo (>= 2.0), because other locators + # weren't searched. Note that this only matters when + # merge=False. + if self.matcher is None: + found = True + else: + found = False + for k in d: + if self.matcher.match(k): + found = True + break + if found: + result = d + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for locator in self.locators: + try: + result |= locator.get_distribution_names() + except NotImplementedError: + pass + return result + + +# We use a legacy scheme simply because most of the dists on PyPI use legacy +# versions which don't conform to PEP 426 / PEP 440. +default_locator = AggregatingLocator( + JSONLocator(), + SimpleScrapingLocator('https://pypi.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + + +class DependencyFinder(object): + """ + Locate dependencies for distributions. + """ + + def __init__(self, locator=None): + """ + Initialise an instance, using the specified locator + to locate distributions. + """ + self.locator = locator or default_locator + self.scheme = get_scheme(self.locator.scheme) + + def add_distribution(self, dist): + """ + Add a distribution to the finder. This will update internal information + about who provides what. + :param dist: The distribution to add. + """ + logger.debug('adding distribution %s', dist) + name = dist.key + self.dists_by_name[name] = dist + self.dists[(name, dist.version)] = dist + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + self.provided.setdefault(name, set()).add((version, dist)) + + def remove_distribution(self, dist): + """ + Remove a distribution from the finder. This will update internal + information about who provides what. + :param dist: The distribution to remove. + """ + logger.debug('removing distribution %s', dist) + name = dist.key + del self.dists_by_name[name] + del self.dists[(name, dist.version)] + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Remove from provided: %s, %s, %s', name, version, dist) + s = self.provided[name] + s.remove((version, dist)) + if not s: + del self.provided[name] + + def get_matcher(self, reqt): + """ + Get a version matcher for a requirement. + :param reqt: The requirement + :type reqt: str + :return: A version matcher (an instance of + :class:`distlib.version.Matcher`). + """ + try: + matcher = self.scheme.matcher(reqt) + except UnsupportedVersionError: # pragma: no cover + # XXX compat-mode if cannot read the version + name = reqt.split()[0] + matcher = self.scheme.matcher(name) + return matcher + + def find_providers(self, reqt): + """ + Find the distributions which can fulfill a requirement. + + :param reqt: The requirement. + :type reqt: str + :return: A set of distribution which can fulfill the requirement. + """ + matcher = self.get_matcher(reqt) + name = matcher.key # case-insensitive + result = set() + provided = self.provided + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + result.add(provider) + break + return result + + def try_to_replace(self, provider, other, problems): + """ + Attempt to replace one provider with another. This is typically used + when resolving dependencies from multiple sources, e.g. A requires + (B >= 1.0) while C requires (B >= 1.1). + + For successful replacement, ``provider`` must meet all the requirements + which ``other`` fulfills. + + :param provider: The provider we are trying to replace with. + :param other: The provider we're trying to replace. + :param problems: If False is returned, this will contain what + problems prevented replacement. This is currently + a tuple of the literal string 'cantreplace', + ``provider``, ``other`` and the set of requirements + that ``provider`` couldn't fulfill. + :return: True if we can replace ``other`` with ``provider``, else + False. + """ + rlist = self.reqts[other] + unmatched = set() + for s in rlist: + matcher = self.get_matcher(s) + if not matcher.match(provider.version): + unmatched.add(s) + if unmatched: + # can't replace other with provider + problems.add(('cantreplace', provider, other, + frozenset(unmatched))) + result = False + else: + # can replace other with provider + self.remove_distribution(other) + del self.reqts[other] + for s in rlist: + self.reqts.setdefault(provider, set()).add(s) + self.add_distribution(provider) + result = True + return result + + def find(self, requirement, meta_extras=None, prereleases=False): + """ + Find a distribution and all distributions it depends on. + + :param requirement: The requirement specifying the distribution to + find, or a Distribution instance. + :param meta_extras: A list of meta extras such as :test:, :build: and + so on. + :param prereleases: If ``True``, allow pre-release versions to be + returned - otherwise, don't return prereleases + unless they're all that's available. + + Return a set of :class:`Distribution` instances and a set of + problems. + + The distributions returned should be such that they have the + :attr:`required` attribute set to ``True`` if they were + from the ``requirement`` passed to ``find()``, and they have the + :attr:`build_time_dependency` attribute set to ``True`` unless they + are post-installation dependencies of the ``requirement``. + + The problems should be a tuple consisting of the string + ``'unsatisfied'`` and the requirement which couldn't be satisfied + by any distribution known to the locator. + """ + + self.provided = {} + self.dists = {} + self.dists_by_name = {} + self.reqts = {} + + meta_extras = set(meta_extras or []) + if ':*:' in meta_extras: + meta_extras.remove(':*:') + # :meta: and :run: are implicitly included + meta_extras |= set([':test:', ':build:', ':dev:']) + + if isinstance(requirement, Distribution): + dist = odist = requirement + logger.debug('passed %s as requirement', odist) + else: + dist = odist = self.locator.locate(requirement, + prereleases=prereleases) + if dist is None: + raise DistlibException('Unable to locate %r' % requirement) + logger.debug('located %s', odist) + dist.requested = True + problems = set() + todo = set([dist]) + install_dists = set([odist]) + while todo: + dist = todo.pop() + name = dist.key # case-insensitive + if name not in self.dists_by_name: + self.add_distribution(dist) + else: + #import pdb; pdb.set_trace() + other = self.dists_by_name[name] + if other != dist: + self.try_to_replace(dist, other, problems) + + ireqts = dist.run_requires | dist.meta_requires + sreqts = dist.build_requires + ereqts = set() + if meta_extras and dist in install_dists: + for key in ('test', 'build', 'dev'): + e = ':%s:' % key + if e in meta_extras: + ereqts |= getattr(dist, '%s_requires' % key) + all_reqts = ireqts | sreqts | ereqts + for r in all_reqts: + providers = self.find_providers(r) + if not providers: + logger.debug('No providers found for %r', r) + provider = self.locator.locate(r, prereleases=prereleases) + # If no provider is found and we didn't consider + # prereleases, consider them now. + if provider is None and not prereleases: + provider = self.locator.locate(r, prereleases=True) + if provider is None: + logger.debug('Cannot satisfy %r', r) + problems.add(('unsatisfied', r)) + else: + n, v = provider.key, provider.version + if (n, v) not in self.dists: + todo.add(provider) + providers.add(provider) + if r in ireqts and dist in install_dists: + install_dists.add(provider) + logger.debug('Adding %s to install_dists', + provider.name_and_version) + for p in providers: + name = p.key + if name not in self.dists_by_name: + self.reqts.setdefault(p, set()).add(r) + else: + other = self.dists_by_name[name] + if other != p: + # see if other can be replaced by p + self.try_to_replace(p, other, problems) + + dists = set(self.dists.values()) + for dist in dists: + dist.build_time_dependency = dist not in install_dists + if dist.build_time_dependency: + logger.debug('%s is a build-time dependency only.', + dist.name_and_version) + logger.debug('find done for %s', odist) + return dists, problems diff --git a/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py b/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 000000000..ca0fe442d --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,393 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2013 Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Class representing the list of files in a distribution. + +Equivalent to distutils.filelist, but fixes some problems. +""" +import fnmatch +import logging +import os +import re +import sys + +from . import DistlibException +from .compat import fsdecode +from .util import convert_path + + +__all__ = ['Manifest'] + +logger = logging.getLogger(__name__) + +# a \ followed by some spaces + EOL +_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) +_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) + +# +# Due to the different results returned by fnmatch.translate, we need +# to do slightly different processing for Python 2.7 and 3.2 ... this needed +# to be brought in for Python 3.6 onwards. +# +_PYTHON_VERSION = sys.version_info[:2] + +class Manifest(object): + """A list of files built by on exploring the filesystem and filtered by + applying various patterns to what we find there. + """ + + def __init__(self, base=None): + """ + Initialise an instance. + + :param base: The base directory to explore under. + """ + self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) + self.prefix = self.base + os.sep + self.allfiles = None + self.files = set() + + # + # Public API + # + + def findall(self): + """Find all files under the base and set ``allfiles`` to the absolute + pathnames of files found. + """ + from stat import S_ISREG, S_ISDIR, S_ISLNK + + self.allfiles = allfiles = [] + root = self.base + stack = [root] + pop = stack.pop + push = stack.append + + while stack: + root = pop() + names = os.listdir(root) + + for name in names: + fullname = os.path.join(root, name) + + # Avoid excess stat calls -- just one will do, thank you! + stat = os.stat(fullname) + mode = stat.st_mode + if S_ISREG(mode): + allfiles.append(fsdecode(fullname)) + elif S_ISDIR(mode) and not S_ISLNK(mode): + push(fullname) + + def add(self, item): + """ + Add a file to the manifest. + + :param item: The pathname to add. This can be relative to the base. + """ + if not item.startswith(self.prefix): + item = os.path.join(self.base, item) + self.files.add(os.path.normpath(item)) + + def add_many(self, items): + """ + Add a list of files to the manifest. + + :param items: The pathnames to add. These can be relative to the base. + """ + for item in items: + self.add(item) + + def sorted(self, wantdirs=False): + """ + Return sorted files in directory order + """ + + def add_dir(dirs, d): + dirs.add(d) + logger.debug('add_dir added %s', d) + if d != self.base: + parent, _ = os.path.split(d) + assert parent not in ('', '/') + add_dir(dirs, parent) + + result = set(self.files) # make a copy! + if wantdirs: + dirs = set() + for f in result: + add_dir(dirs, os.path.dirname(f)) + result |= dirs + return [os.path.join(*path_tuple) for path_tuple in + sorted(os.path.split(path) for path in result)] + + def clear(self): + """Clear all collected files.""" + self.files = set() + self.allfiles = [] + + def process_directive(self, directive): + """ + Process a directive which either adds some files from ``allfiles`` to + ``files``, or removes some files from ``files``. + + :param directive: The directive to process. This should be in a format + compatible with distutils ``MANIFEST.in`` files: + + http://docs.python.org/distutils/sourcedist.html#commands + """ + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dirpattern). + action, patterns, thedir, dirpattern = self._parse_directive(directive) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=True): + logger.warning('no files found matching %r', pattern) + + elif action == 'exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=True) + #if not found: + # logger.warning('no previously-included files ' + # 'found matching %r', pattern) + + elif action == 'global-include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=False): + logger.warning('no files found matching %r ' + 'anywhere in distribution', pattern) + + elif action == 'global-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=False) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found anywhere in ' + # 'distribution', pattern) + + elif action == 'recursive-include': + for pattern in patterns: + if not self._include_pattern(pattern, prefix=thedir): + logger.warning('no files found matching %r ' + 'under directory %r', pattern, thedir) + + elif action == 'recursive-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, prefix=thedir) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found under directory %r', + # pattern, thedir) + + elif action == 'graft': + if not self._include_pattern(None, prefix=dirpattern): + logger.warning('no directories found matching %r', + dirpattern) + + elif action == 'prune': + if not self._exclude_pattern(None, prefix=dirpattern): + logger.warning('no previously-included directories found ' + 'matching %r', dirpattern) + else: # pragma: no cover + # This should never happen, as it should be caught in + # _parse_template_line + raise DistlibException( + 'invalid action %r' % action) + + # + # Private API + # + + def _parse_directive(self, directive): + """ + Validate a directive. + :param directive: The directive to validate. + :return: A tuple of action, patterns, thedir, dir_patterns + """ + words = directive.split() + if len(words) == 1 and words[0] not in ('include', 'exclude', + 'global-include', + 'global-exclude', + 'recursive-include', + 'recursive-exclude', + 'graft', 'prune'): + # no action given, let's use the default 'include' + words.insert(0, 'include') + + action = words[0] + patterns = thedir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistlibException( + '%r expects ...' % action) + + patterns = [convert_path(word) for word in words[1:]] + + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistlibException( + '%r expects

      AfpEcM$9b&9E$*_ZZyJoZr<^vjX&4+z3$yJ zcDEPcT@HhRdM>hPAj&zkeNu8Oq&N0Ad*=ya7hu!V)_$ z5}2?xtDW1@cfjQ6IGBK*VSE(BiJ&E-@<@L@FO*As8w1LycK8wBr@l0P$dZ1DlE6rb zU?fYh890)7Raz~^5m^{&4s=E#3+av0m{+F~nVnrjRKb}|ilJ1<|Bd@l+Sk9hZvW`q zkL#A8!-$C|Ym3c0jSU;4AEQW`Rx_%4xRh*iV@Gt$djgS(Z!gj!RaCKlfOKPP=mYDf zpx`6+G^7Nn5+xUO9z~K=sz!J?m5^QNM6+`!ihw3w7?k0OB4bN`rZe-oeo5QXA1fP# zqF8qgvA}XG8rdY;d9;shqW>`Ll1)7`@s4o*_r_uExz36QVbiQ|SUX5oTWX9!5p7L! zTR~9)&TSmxFY}LK^v|^C+PB6%k^p&31nfCzw%12EV=SMGbU9(BQR!3PlR>N3>7W0S zmZP;7wD99pAxr|~@~3_e>47|tm*Fa}^fQ9ult>d~`Jr*fe)$?tn6nWl+t3k$1(1bE zI*3f4cO$Fa^ST3H66N}?2qwu?5b-&_ljI5xtg^12@Dahl?u#PsVZF?QEeH%|j^6(EfvIB9R9Kn*m=iIeHwHRK!_BekC*OQgQ1 z+IL7>;MNiHwGH_e#$lercH4YxY#MC~U*sr3QUPwh5q@-a5cb1XE;VPD)$8!+~=<35*QQDY8Yfd_JQ>Y<})9RCP z$Y>NYkKz+jM6piESp2C%I1+Qn<`meU z-wjZvYM|Q=U5ma*5!EnEZ6)`BJdZe!qb_XPkQBD*}`>N#H1?I z8QV0fET04}3RDsM`^gr5hIxNLNu2SVk=$Aiov|rsR-;~P+W5(4*}=~_tS6S^-*FIL zFDJpARM-(6NuP!vcYGQ1Lg&~#s-_Kp09qFO9u@q)qkhLzc@nN%k=(_MD8A@^HNHD3 u(;Fo+3Mv$dBSE&(3yQR(!l&_d@Oe5tSwmIPYI?;uWYo;sQthLK)BgiiWI)#d literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82fcbc0dc735cd607ff299c13632d2693093a52e GIT binary patch literal 8229 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py new file mode 100644 index 000000000..b206692a0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py @@ -0,0 +1,141 @@ +from typing import FrozenSet, Iterable, Optional, Tuple, Union + +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.models.link import Link, links_equivalent +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.hashes import Hashes + +CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]] +CandidateVersion = Union[LegacyVersion, Version] + + +def format_name(project: str, extras: FrozenSet[str]) -> str: + if not extras: + return project + canonical_extras = sorted(canonicalize_name(e) for e in extras) + return "{}[{}]".format(project, ",".join(canonical_extras)) + + +class Constraint: + def __init__( + self, specifier: SpecifierSet, hashes: Hashes, links: FrozenSet[Link] + ) -> None: + self.specifier = specifier + self.hashes = hashes + self.links = links + + @classmethod + def empty(cls) -> "Constraint": + return Constraint(SpecifierSet(), Hashes(), frozenset()) + + @classmethod + def from_ireq(cls, ireq: InstallRequirement) -> "Constraint": + links = frozenset([ireq.link]) if ireq.link else frozenset() + return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links) + + def __bool__(self) -> bool: + return bool(self.specifier) or bool(self.hashes) or bool(self.links) + + def __and__(self, other: InstallRequirement) -> "Constraint": + if not isinstance(other, InstallRequirement): + return NotImplemented + specifier = self.specifier & other.specifier + hashes = self.hashes & other.hashes(trust_internet=False) + links = self.links + if other.link: + links = links.union([other.link]) + return Constraint(specifier, hashes, links) + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + # Reject if there are any mismatched URL constraints on this package. + if self.links and not all(_match_link(link, candidate) for link in self.links): + return False + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class Requirement: + @property + def project_name(self) -> NormalizedName: + """The "project name" of a requirement. + + This is different from ``name`` if this requirement contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Subclass should override") + + @property + def name(self) -> str: + """The name identifying this requirement in the resolver. + + This is different from ``project_name`` if this requirement contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Subclass should override") + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + return False + + def get_candidate_lookup(self) -> CandidateLookup: + raise NotImplementedError("Subclass should override") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") + + +def _match_link(link: Link, candidate: "Candidate") -> bool: + if candidate.source_link: + return links_equivalent(link, candidate.source_link) + return False + + +class Candidate: + @property + def project_name(self) -> NormalizedName: + """The "project name" of the candidate. + + This is different from ``name`` if this candidate contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Override in subclass") + + @property + def name(self) -> str: + """The name identifying this candidate in the resolver. + + This is different from ``project_name`` if this candidate contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Override in subclass") + + @property + def version(self) -> CandidateVersion: + raise NotImplementedError("Override in subclass") + + @property + def is_installed(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def is_editable(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def source_link(self) -> Optional[Link]: + raise NotImplementedError("Override in subclass") + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + raise NotImplementedError("Override in subclass") + + def get_install_requirement(self) -> Optional[InstallRequirement]: + raise NotImplementedError("Override in subclass") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py new file mode 100644 index 000000000..9b8450e86 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py @@ -0,0 +1,547 @@ +import logging +import sys +from typing import TYPE_CHECKING, Any, FrozenSet, Iterable, Optional, Tuple, Union, cast + +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import ( + HashError, + InstallationSubprocessError, + MetadataInconsistent, +) +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link, links_equivalent +from pip._internal.models.wheel import Wheel +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.misc import normalize_version_info + +from .base import Candidate, CandidateVersion, Requirement, format_name + +if TYPE_CHECKING: + from .factory import Factory + +logger = logging.getLogger(__name__) + +BaseCandidate = Union[ + "AlreadyInstalledCandidate", + "EditableCandidate", + "LinkCandidate", +] + +# Avoid conflicting with the PyPI package "Python". +REQUIRES_PYTHON_IDENTIFIER = cast(NormalizedName, "") + + +def as_base_candidate(candidate: Candidate) -> Optional[BaseCandidate]: + """The runtime version of BaseCandidate.""" + base_candidate_classes = ( + AlreadyInstalledCandidate, + EditableCandidate, + LinkCandidate, + ) + if isinstance(candidate, base_candidate_classes): + return candidate + return None + + +def make_install_req_from_link( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert not template.editable, "template is editable" + if template.req: + line = str(template.req) + else: + line = link.url + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + ) + ireq.original_link = template.original_link + ireq.link = link + return ireq + + +def make_install_req_from_editable( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert template.editable, "template not editable" + return install_req_from_editable( + link.url, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + permit_editable_wheels=template.permit_editable_wheels, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + ) + + +def _make_install_req_from_dist( + dist: BaseDistribution, template: InstallRequirement +) -> InstallRequirement: + if template.req: + line = str(template.req) + elif template.link: + line = f"{dist.canonical_name} @ {template.link.url}" + else: + line = f"{dist.canonical_name}=={dist.version}" + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + ) + ireq.satisfied_by = dist + return ireq + + +class _InstallRequirementBackedCandidate(Candidate): + """A candidate backed by an ``InstallRequirement``. + + This represents a package request with the target not being already + in the environment, and needs to be fetched and installed. The backing + ``InstallRequirement`` is responsible for most of the leg work; this + class exposes appropriate information to the resolver. + + :param link: The link passed to the ``InstallRequirement``. The backing + ``InstallRequirement`` will use this link to fetch the distribution. + :param source_link: The link this candidate "originates" from. This is + different from ``link`` when the link is found in the wheel cache. + ``link`` would point to the wheel cache, while this points to the + found remote link (e.g. from pypi.org). + """ + + dist: BaseDistribution + is_installed = False + + def __init__( + self, + link: Link, + source_link: Link, + ireq: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + self._link = link + self._source_link = source_link + self._factory = factory + self._ireq = ireq + self._name = name + self._version = version + self.dist = self._prepare() + + def __str__(self) -> str: + return f"{self.name} {self.version}" + + def __repr__(self) -> str: + return "{class_name}({link!r})".format( + class_name=self.__class__.__name__, + link=str(self._link), + ) + + def __hash__(self) -> int: + return hash((self.__class__, self._link)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return links_equivalent(self._link, other._link) + return False + + @property + def source_link(self) -> Optional[Link]: + return self._source_link + + @property + def project_name(self) -> NormalizedName: + """The normalised name of the project the candidate refers to""" + if self._name is None: + self._name = self.dist.canonical_name + return self._name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + if self._version is None: + self._version = self.dist.version + return self._version + + def format_for_error(self) -> str: + return "{} {} (from {})".format( + self.name, + self.version, + self._link.file_path if self._link.is_file else self._link, + ) + + def _prepare_distribution(self) -> BaseDistribution: + raise NotImplementedError("Override in subclass") + + def _check_metadata_consistency(self, dist: BaseDistribution) -> None: + """Check for consistency of project name and version of dist.""" + if self._name is not None and self._name != dist.canonical_name: + raise MetadataInconsistent( + self._ireq, + "name", + self._name, + dist.canonical_name, + ) + if self._version is not None and self._version != dist.version: + raise MetadataInconsistent( + self._ireq, + "version", + str(self._version), + str(dist.version), + ) + + def _prepare(self) -> BaseDistribution: + try: + dist = self._prepare_distribution() + except HashError as e: + # Provide HashError the underlying ireq that caused it. This + # provides context for the resulting error message to show the + # offending line to the user. + e.req = self._ireq + raise + except InstallationSubprocessError as exc: + # The output has been presented already, so don't duplicate it. + exc.context = "See above for output." + raise + + self._check_metadata_consistency(dist) + return dist + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + requires = self.dist.iter_dependencies() if with_requires else () + for r in requires: + yield self._factory.make_requirement_from_spec(str(r), self._ireq) + yield self._factory.make_requires_python_requirement(self.dist.requires_python) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return self._ireq + + +class LinkCandidate(_InstallRequirementBackedCandidate): + is_editable = False + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + source_link = link + cache_entry = factory.get_wheel_cache_entry(link, name) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + link = cache_entry.link + ireq = make_install_req_from_link(link, template) + assert ireq.link == link + if ireq.link.is_wheel and not ireq.link.is_file: + wheel = Wheel(ireq.link.filename) + wheel_name = canonicalize_name(wheel.name) + assert name == wheel_name, f"{name!r} != {wheel_name!r} for wheel" + # Version may not be present for PEP 508 direct URLs + if version is not None: + wheel_version = Version(wheel.version) + assert version == wheel_version, "{!r} != {!r} for wheel {}".format( + version, wheel_version, name + ) + + if ( + cache_entry is not None + and cache_entry.persistent + and template.link is template.original_link + ): + ireq.original_link_is_in_wheel_cache = True + + super().__init__( + link=link, + source_link=source_link, + ireq=ireq, + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + preparer = self._factory.preparer + return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) + + +class EditableCandidate(_InstallRequirementBackedCandidate): + is_editable = True + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + super().__init__( + link=link, + source_link=link, + ireq=make_install_req_from_editable(link, template), + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + return self._factory.preparer.prepare_editable_requirement(self._ireq) + + +class AlreadyInstalledCandidate(Candidate): + is_installed = True + source_link = None + + def __init__( + self, + dist: BaseDistribution, + template: InstallRequirement, + factory: "Factory", + ) -> None: + self.dist = dist + self._ireq = _make_install_req_from_dist(dist, template) + self._factory = factory + + # This is just logging some messages, so we can do it eagerly. + # The returned dist would be exactly the same as self.dist because we + # set satisfied_by in _make_install_req_from_dist. + # TODO: Supply reason based on force_reinstall and upgrade_strategy. + skip_reason = "already satisfied" + factory.preparer.prepare_installed_requirement(self._ireq, skip_reason) + + def __str__(self) -> str: + return str(self.dist) + + def __repr__(self) -> str: + return "{class_name}({distribution!r})".format( + class_name=self.__class__.__name__, + distribution=self.dist, + ) + + def __hash__(self) -> int: + return hash((self.__class__, self.name, self.version)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.name == other.name and self.version == other.version + return False + + @property + def project_name(self) -> NormalizedName: + return self.dist.canonical_name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + return self.dist.version + + @property + def is_editable(self) -> bool: + return self.dist.editable + + def format_for_error(self) -> str: + return f"{self.name} {self.version} (Installed)" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + if not with_requires: + return + for r in self.dist.iter_dependencies(): + yield self._factory.make_requirement_from_spec(str(r), self._ireq) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None + + +class ExtrasCandidate(Candidate): + """A candidate that has 'extras', indicating additional dependencies. + + Requirements can be for a project with dependencies, something like + foo[extra]. The extras don't affect the project/version being installed + directly, but indicate that we need additional dependencies. We model that + by having an artificial ExtrasCandidate that wraps the "base" candidate. + + The ExtrasCandidate differs from the base in the following ways: + + 1. It has a unique name, of the form foo[extra]. This causes the resolver + to treat it as a separate node in the dependency graph. + 2. When we're getting the candidate's dependencies, + a) We specify that we want the extra dependencies as well. + b) We add a dependency on the base candidate. + See below for why this is needed. + 3. We return None for the underlying InstallRequirement, as the base + candidate will provide it, and we don't want to end up with duplicates. + + The dependency on the base candidate is needed so that the resolver can't + decide that it should recommend foo[extra1] version 1.0 and foo[extra2] + version 2.0. Having those candidates depend on foo=1.0 and foo=2.0 + respectively forces the resolver to recognise that this is a conflict. + """ + + def __init__( + self, + base: BaseCandidate, + extras: FrozenSet[str], + ) -> None: + self.base = base + self.extras = extras + + def __str__(self) -> str: + name, rest = str(self.base).split(" ", 1) + return "{}[{}] {}".format(name, ",".join(self.extras), rest) + + def __repr__(self) -> str: + return "{class_name}(base={base!r}, extras={extras!r})".format( + class_name=self.__class__.__name__, + base=self.base, + extras=self.extras, + ) + + def __hash__(self) -> int: + return hash((self.base, self.extras)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.base == other.base and self.extras == other.extras + return False + + @property + def project_name(self) -> NormalizedName: + return self.base.project_name + + @property + def name(self) -> str: + """The normalised name of the project the candidate refers to""" + return format_name(self.base.project_name, self.extras) + + @property + def version(self) -> CandidateVersion: + return self.base.version + + def format_for_error(self) -> str: + return "{} [{}]".format( + self.base.format_for_error(), ", ".join(sorted(self.extras)) + ) + + @property + def is_installed(self) -> bool: + return self.base.is_installed + + @property + def is_editable(self) -> bool: + return self.base.is_editable + + @property + def source_link(self) -> Optional[Link]: + return self.base.source_link + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + factory = self.base._factory + + # Add a dependency on the exact base + # (See note 2b in the class docstring) + yield factory.make_requirement_from_candidate(self.base) + if not with_requires: + return + + # The user may have specified extras that the candidate doesn't + # support. We ignore any unsupported extras here. + valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras()) + invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras()) + for extra in sorted(invalid_extras): + logger.warning( + "%s %s does not provide the extra '%s'", + self.base.name, + self.version, + extra, + ) + + for r in self.base.dist.iter_dependencies(valid_extras): + requirement = factory.make_requirement_from_spec( + str(r), self.base._ireq, valid_extras + ) + if requirement: + yield requirement + + def get_install_requirement(self) -> Optional[InstallRequirement]: + # We don't return anything here, because we always + # depend on the base candidate, and we'll get the + # install requirement from that. + return None + + +class RequiresPythonCandidate(Candidate): + is_installed = False + source_link = None + + def __init__(self, py_version_info: Optional[Tuple[int, ...]]) -> None: + if py_version_info is not None: + version_info = normalize_version_info(py_version_info) + else: + version_info = sys.version_info[:3] + self._version = Version(".".join(str(c) for c in version_info)) + + # We don't need to implement __eq__() and __ne__() since there is always + # only one RequiresPythonCandidate in a resolution, i.e. the host Python. + # The built-in object.__eq__() and object.__ne__() do exactly what we want. + + def __str__(self) -> str: + return f"Python {self._version}" + + @property + def project_name(self) -> NormalizedName: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def name(self) -> str: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def version(self) -> CandidateVersion: + return self._version + + def format_for_error(self) -> str: + return f"Python {self.version}" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + return () + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py new file mode 100644 index 000000000..261d8d560 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py @@ -0,0 +1,739 @@ +import contextlib +import functools +import logging +from typing import ( + TYPE_CHECKING, + Dict, + FrozenSet, + Iterable, + Iterator, + List, + Mapping, + NamedTuple, + Optional, + Sequence, + Set, + Tuple, + TypeVar, + cast, +) + +from pip._vendor.packaging.requirements import InvalidRequirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.resolvelib import ResolutionImpossible + +from pip._internal.cache import CacheEntry, WheelCache +from pip._internal.exceptions import ( + DistributionNotFound, + InstallationError, + InstallationSubprocessError, + MetadataInconsistent, + UnsupportedPythonVersion, + UnsupportedWheel, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import install_req_from_link_and_ireq +from pip._internal.req.req_install import ( + InstallRequirement, + check_invalid_constraint_type, +) +from pip._internal.resolution.base import InstallRequirementProvider +from pip._internal.utils.compatibility_tags import get_supported +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.packaging import get_requirement +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import Candidate, CandidateVersion, Constraint, Requirement +from .candidates import ( + AlreadyInstalledCandidate, + BaseCandidate, + EditableCandidate, + ExtrasCandidate, + LinkCandidate, + RequiresPythonCandidate, + as_base_candidate, +) +from .found_candidates import FoundCandidates, IndexCandidateInfo +from .requirements import ( + ExplicitRequirement, + RequiresPythonRequirement, + SpecifierRequirement, + UnsatisfiableRequirement, +) + +if TYPE_CHECKING: + from typing import Protocol + + class ConflictCause(Protocol): + requirement: RequiresPythonRequirement + parent: Candidate + + +logger = logging.getLogger(__name__) + +C = TypeVar("C") +Cache = Dict[Link, C] + + +class CollectedRootRequirements(NamedTuple): + requirements: List[Requirement] + constraints: Dict[str, Constraint] + user_requested: Dict[str, int] + + +class Factory: + def __init__( + self, + finder: PackageFinder, + preparer: RequirementPreparer, + make_install_req: InstallRequirementProvider, + wheel_cache: Optional[WheelCache], + use_user_site: bool, + force_reinstall: bool, + ignore_installed: bool, + ignore_requires_python: bool, + suppress_build_failures: bool, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + self._finder = finder + self.preparer = preparer + self._wheel_cache = wheel_cache + self._python_candidate = RequiresPythonCandidate(py_version_info) + self._make_install_req_from_spec = make_install_req + self._use_user_site = use_user_site + self._force_reinstall = force_reinstall + self._ignore_requires_python = ignore_requires_python + self._suppress_build_failures = suppress_build_failures + + self._build_failures: Cache[InstallationError] = {} + self._link_candidate_cache: Cache[LinkCandidate] = {} + self._editable_candidate_cache: Cache[EditableCandidate] = {} + self._installed_candidate_cache: Dict[str, AlreadyInstalledCandidate] = {} + self._extras_candidate_cache: Dict[ + Tuple[int, FrozenSet[str]], ExtrasCandidate + ] = {} + + if not ignore_installed: + env = get_default_environment() + self._installed_dists = { + dist.canonical_name: dist + for dist in env.iter_installed_distributions(local_only=False) + } + else: + self._installed_dists = {} + + @property + def force_reinstall(self) -> bool: + return self._force_reinstall + + def _fail_if_link_is_unsupported_wheel(self, link: Link) -> None: + if not link.is_wheel: + return + wheel = Wheel(link.filename) + if wheel.supported(self._finder.target_python.get_tags()): + return + msg = f"{link.filename} is not a supported wheel on this platform." + raise UnsupportedWheel(msg) + + def _make_extras_candidate( + self, base: BaseCandidate, extras: FrozenSet[str] + ) -> ExtrasCandidate: + cache_key = (id(base), extras) + try: + candidate = self._extras_candidate_cache[cache_key] + except KeyError: + candidate = ExtrasCandidate(base, extras) + self._extras_candidate_cache[cache_key] = candidate + return candidate + + def _make_candidate_from_dist( + self, + dist: BaseDistribution, + extras: FrozenSet[str], + template: InstallRequirement, + ) -> Candidate: + try: + base = self._installed_candidate_cache[dist.canonical_name] + except KeyError: + base = AlreadyInstalledCandidate(dist, template, factory=self) + self._installed_candidate_cache[dist.canonical_name] = base + if not extras: + return base + return self._make_extras_candidate(base, extras) + + def _make_candidate_from_link( + self, + link: Link, + extras: FrozenSet[str], + template: InstallRequirement, + name: Optional[NormalizedName], + version: Optional[CandidateVersion], + ) -> Optional[Candidate]: + # TODO: Check already installed candidate, and use it if the link and + # editable flag match. + + if link in self._build_failures: + # We already tried this candidate before, and it does not build. + # Don't bother trying again. + return None + + if template.editable: + if link not in self._editable_candidate_cache: + try: + self._editable_candidate_cache[link] = EditableCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + except InstallationSubprocessError as e: + if not self._suppress_build_failures: + raise + logger.warning("Discarding %s due to build failure: %s", link, e) + self._build_failures[link] = e + return None + + base: BaseCandidate = self._editable_candidate_cache[link] + else: + if link not in self._link_candidate_cache: + try: + self._link_candidate_cache[link] = LinkCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + except InstallationSubprocessError as e: + if not self._suppress_build_failures: + raise + logger.warning("Discarding %s due to build failure: %s", link, e) + self._build_failures[link] = e + return None + base = self._link_candidate_cache[link] + + if not extras: + return base + return self._make_extras_candidate(base, extras) + + def _iter_found_candidates( + self, + ireqs: Sequence[InstallRequirement], + specifier: SpecifierSet, + hashes: Hashes, + prefers_installed: bool, + incompatible_ids: Set[int], + ) -> Iterable[Candidate]: + if not ireqs: + return () + + # The InstallRequirement implementation requires us to give it a + # "template". Here we just choose the first requirement to represent + # all of them. + # Hopefully the Project model can correct this mismatch in the future. + template = ireqs[0] + assert template.req, "Candidates found on index must be PEP 508" + name = canonicalize_name(template.req.name) + + extras: FrozenSet[str] = frozenset() + for ireq in ireqs: + assert ireq.req, "Candidates found on index must be PEP 508" + specifier &= ireq.req.specifier + hashes &= ireq.hashes(trust_internet=False) + extras |= frozenset(ireq.extras) + + def _get_installed_candidate() -> Optional[Candidate]: + """Get the candidate for the currently-installed version.""" + # If --force-reinstall is set, we want the version from the index + # instead, so we "pretend" there is nothing installed. + if self._force_reinstall: + return None + try: + installed_dist = self._installed_dists[name] + except KeyError: + return None + # Don't use the installed distribution if its version does not fit + # the current dependency graph. + if not specifier.contains(installed_dist.version, prereleases=True): + return None + candidate = self._make_candidate_from_dist( + dist=installed_dist, + extras=extras, + template=template, + ) + # The candidate is a known incompatibility. Don't use it. + if id(candidate) in incompatible_ids: + return None + return candidate + + def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]: + result = self._finder.find_best_candidate( + project_name=name, + specifier=specifier, + hashes=hashes, + ) + icans = list(result.iter_applicable()) + + # PEP 592: Yanked releases are ignored unless the specifier + # explicitly pins a version (via '==' or '===') that can be + # solely satisfied by a yanked release. + all_yanked = all(ican.link.is_yanked for ican in icans) + + def is_pinned(specifier: SpecifierSet) -> bool: + for sp in specifier: + if sp.operator == "===": + return True + if sp.operator != "==": + continue + if sp.version.endswith(".*"): + continue + return True + return False + + pinned = is_pinned(specifier) + + # PackageFinder returns earlier versions first, so we reverse. + for ican in reversed(icans): + if not (all_yanked and pinned) and ican.link.is_yanked: + continue + func = functools.partial( + self._make_candidate_from_link, + link=ican.link, + extras=extras, + template=template, + name=name, + version=ican.version, + ) + yield ican.version, func + + return FoundCandidates( + iter_index_candidate_infos, + _get_installed_candidate(), + prefers_installed, + incompatible_ids, + ) + + def _iter_explicit_candidates_from_base( + self, + base_requirements: Iterable[Requirement], + extras: FrozenSet[str], + ) -> Iterator[Candidate]: + """Produce explicit candidates from the base given an extra-ed package. + + :param base_requirements: Requirements known to the resolver. The + requirements are guaranteed to not have extras. + :param extras: The extras to inject into the explicit requirements' + candidates. + """ + for req in base_requirements: + lookup_cand, _ = req.get_candidate_lookup() + if lookup_cand is None: # Not explicit. + continue + # We've stripped extras from the identifier, and should always + # get a BaseCandidate here, unless there's a bug elsewhere. + base_cand = as_base_candidate(lookup_cand) + assert base_cand is not None, "no extras here" + yield self._make_extras_candidate(base_cand, extras) + + def _iter_candidates_from_constraints( + self, + identifier: str, + constraint: Constraint, + template: InstallRequirement, + ) -> Iterator[Candidate]: + """Produce explicit candidates from constraints. + + This creates "fake" InstallRequirement objects that are basically clones + of what "should" be the template, but with original_link set to link. + """ + for link in constraint.links: + self._fail_if_link_is_unsupported_wheel(link) + candidate = self._make_candidate_from_link( + link, + extras=frozenset(), + template=install_req_from_link_and_ireq(link, template), + name=canonicalize_name(identifier), + version=None, + ) + if candidate: + yield candidate + + def find_candidates( + self, + identifier: str, + requirements: Mapping[str, Iterable[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + constraint: Constraint, + prefers_installed: bool, + ) -> Iterable[Candidate]: + # Collect basic lookup information from the requirements. + explicit_candidates: Set[Candidate] = set() + ireqs: List[InstallRequirement] = [] + for req in requirements[identifier]: + cand, ireq = req.get_candidate_lookup() + if cand is not None: + explicit_candidates.add(cand) + if ireq is not None: + ireqs.append(ireq) + + # If the current identifier contains extras, add explicit candidates + # from entries from extra-less identifier. + with contextlib.suppress(InvalidRequirement): + parsed_requirement = get_requirement(identifier) + explicit_candidates.update( + self._iter_explicit_candidates_from_base( + requirements.get(parsed_requirement.name, ()), + frozenset(parsed_requirement.extras), + ), + ) + + # Add explicit candidates from constraints. We only do this if there are + # known ireqs, which represent requirements not already explicit. If + # there are no ireqs, we're constraining already-explicit requirements, + # which is handled later when we return the explicit candidates. + if ireqs: + try: + explicit_candidates.update( + self._iter_candidates_from_constraints( + identifier, + constraint, + template=ireqs[0], + ), + ) + except UnsupportedWheel: + # If we're constrained to install a wheel incompatible with the + # target architecture, no candidates will ever be valid. + return () + + # Since we cache all the candidates, incompatibility identification + # can be made quicker by comparing only the id() values. + incompat_ids = {id(c) for c in incompatibilities.get(identifier, ())} + + # If none of the requirements want an explicit candidate, we can ask + # the finder for candidates. + if not explicit_candidates: + return self._iter_found_candidates( + ireqs, + constraint.specifier, + constraint.hashes, + prefers_installed, + incompat_ids, + ) + + return ( + c + for c in explicit_candidates + if id(c) not in incompat_ids + and constraint.is_satisfied_by(c) + and all(req.is_satisfied_by(c) for req in requirements[identifier]) + ) + + def _make_requirement_from_install_req( + self, ireq: InstallRequirement, requested_extras: Iterable[str] + ) -> Optional[Requirement]: + if not ireq.match_markers(requested_extras): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + ireq.name, + ireq.markers, + ) + return None + if not ireq.link: + return SpecifierRequirement(ireq) + self._fail_if_link_is_unsupported_wheel(ireq.link) + cand = self._make_candidate_from_link( + ireq.link, + extras=frozenset(ireq.extras), + template=ireq, + name=canonicalize_name(ireq.name) if ireq.name else None, + version=None, + ) + if cand is None: + # There's no way we can satisfy a URL requirement if the underlying + # candidate fails to build. An unnamed URL must be user-supplied, so + # we fail eagerly. If the URL is named, an unsatisfiable requirement + # can make the resolver do the right thing, either backtrack (and + # maybe find some other requirement that's buildable) or raise a + # ResolutionImpossible eventually. + if not ireq.name: + raise self._build_failures[ireq.link] + return UnsatisfiableRequirement(canonicalize_name(ireq.name)) + return self.make_requirement_from_candidate(cand) + + def collect_root_requirements( + self, root_ireqs: List[InstallRequirement] + ) -> CollectedRootRequirements: + collected = CollectedRootRequirements([], {}, {}) + for i, ireq in enumerate(root_ireqs): + if ireq.constraint: + # Ensure we only accept valid constraints + problem = check_invalid_constraint_type(ireq) + if problem: + raise InstallationError(problem) + if not ireq.match_markers(): + continue + assert ireq.name, "Constraint must be named" + name = canonicalize_name(ireq.name) + if name in collected.constraints: + collected.constraints[name] &= ireq + else: + collected.constraints[name] = Constraint.from_ireq(ireq) + else: + req = self._make_requirement_from_install_req( + ireq, + requested_extras=(), + ) + if req is None: + continue + if ireq.user_supplied and req.name not in collected.user_requested: + collected.user_requested[req.name] = i + collected.requirements.append(req) + return collected + + def make_requirement_from_candidate( + self, candidate: Candidate + ) -> ExplicitRequirement: + return ExplicitRequirement(candidate) + + def make_requirement_from_spec( + self, + specifier: str, + comes_from: Optional[InstallRequirement], + requested_extras: Iterable[str] = (), + ) -> Optional[Requirement]: + ireq = self._make_install_req_from_spec(specifier, comes_from) + return self._make_requirement_from_install_req(ireq, requested_extras) + + def make_requires_python_requirement( + self, + specifier: SpecifierSet, + ) -> Optional[Requirement]: + if self._ignore_requires_python: + return None + # Don't bother creating a dependency for an empty Requires-Python. + if not str(specifier): + return None + return RequiresPythonRequirement(specifier, self._python_candidate) + + def get_wheel_cache_entry( + self, link: Link, name: Optional[str] + ) -> Optional[CacheEntry]: + """Look up the link in the wheel cache. + + If ``preparer.require_hashes`` is True, don't use the wheel cache, + because cached wheels, always built locally, have different hashes + than the files downloaded from the index server and thus throw false + hash mismatches. Furthermore, cached wheels at present have + nondeterministic contents due to file modification times. + """ + if self._wheel_cache is None or self.preparer.require_hashes: + return None + return self._wheel_cache.get_cache_entry( + link=link, + package_name=name, + supported_tags=get_supported(), + ) + + def get_dist_to_uninstall(self, candidate: Candidate) -> Optional[BaseDistribution]: + # TODO: Are there more cases this needs to return True? Editable? + dist = self._installed_dists.get(candidate.project_name) + if dist is None: # Not installed, no uninstallation required. + return None + + # We're installing into global site. The current installation must + # be uninstalled, no matter it's in global or user site, because the + # user site installation has precedence over global. + if not self._use_user_site: + return dist + + # We're installing into user site. Remove the user site installation. + if dist.in_usersite: + return dist + + # We're installing into user site, but the installed incompatible + # package is in global site. We can't uninstall that, and would let + # the new user installation to "shadow" it. But shadowing won't work + # in virtual environments, so we error out. + if running_under_virtualenv() and dist.in_site_packages: + message = ( + f"Will not install to the user site because it will lack " + f"sys.path precedence to {dist.raw_name} in {dist.location}" + ) + raise InstallationError(message) + return None + + def _report_requires_python_error( + self, causes: Sequence["ConflictCause"] + ) -> UnsupportedPythonVersion: + assert causes, "Requires-Python error reported with no cause" + + version = self._python_candidate.version + + if len(causes) == 1: + specifier = str(causes[0].requirement.specifier) + message = ( + f"Package {causes[0].parent.name!r} requires a different " + f"Python: {version} not in {specifier!r}" + ) + return UnsupportedPythonVersion(message) + + message = f"Packages require a different Python. {version} not in:" + for cause in causes: + package = cause.parent.format_for_error() + specifier = str(cause.requirement.specifier) + message += f"\n{specifier!r} (required by {package})" + return UnsupportedPythonVersion(message) + + def _report_single_requirement_conflict( + self, req: Requirement, parent: Optional[Candidate] + ) -> DistributionNotFound: + if parent is None: + req_disp = str(req) + else: + req_disp = f"{req} (from {parent.name})" + + cands = self._finder.find_all_candidates(req.project_name) + versions = [str(v) for v in sorted({c.version for c in cands})] + + logger.critical( + "Could not find a version that satisfies the requirement %s " + "(from versions: %s)", + req_disp, + ", ".join(versions) or "none", + ) + if str(req) == "requirements.txt": + logger.info( + "HINT: You are attempting to install a package literally " + 'named "requirements.txt" (which cannot exist). Consider ' + "using the '-r' flag to install the packages listed in " + "requirements.txt" + ) + + return DistributionNotFound(f"No matching distribution found for {req}") + + def get_installation_error( + self, + e: "ResolutionImpossible[Requirement, Candidate]", + constraints: Dict[str, Constraint], + ) -> InstallationError: + + assert e.causes, "Installation error reported with no cause" + + # If one of the things we can't solve is "we need Python X.Y", + # that is what we report. + requires_python_causes = [ + cause + for cause in e.causes + if isinstance(cause.requirement, RequiresPythonRequirement) + and not cause.requirement.is_satisfied_by(self._python_candidate) + ] + if requires_python_causes: + # The comprehension above makes sure all Requirement instances are + # RequiresPythonRequirement, so let's cast for convenience. + return self._report_requires_python_error( + cast("Sequence[ConflictCause]", requires_python_causes), + ) + + # Otherwise, we have a set of causes which can't all be satisfied + # at once. + + # The simplest case is when we have *one* cause that can't be + # satisfied. We just report that case. + if len(e.causes) == 1: + req, parent = e.causes[0] + if req.name not in constraints: + return self._report_single_requirement_conflict(req, parent) + + # OK, we now have a list of requirements that can't all be + # satisfied at once. + + # A couple of formatting helpers + def text_join(parts: List[str]) -> str: + if len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def describe_trigger(parent: Candidate) -> str: + ireq = parent.get_install_requirement() + if not ireq or not ireq.comes_from: + return f"{parent.name}=={parent.version}" + if isinstance(ireq.comes_from, InstallRequirement): + return str(ireq.comes_from.name) + return str(ireq.comes_from) + + triggers = set() + for req, parent in e.causes: + if parent is None: + # This is a root requirement, so we can report it directly + trigger = req.format_for_error() + else: + trigger = describe_trigger(parent) + triggers.add(trigger) + + if triggers: + info = text_join(sorted(triggers)) + else: + info = "the requested packages" + + msg = ( + "Cannot install {} because these package versions " + "have conflicting dependencies.".format(info) + ) + logger.critical(msg) + msg = "\nThe conflict is caused by:" + + relevant_constraints = set() + for req, parent in e.causes: + if req.name in constraints: + relevant_constraints.add(req.name) + msg = msg + "\n " + if parent: + msg = msg + f"{parent.name} {parent.version} depends on " + else: + msg = msg + "The user requested " + msg = msg + req.format_for_error() + for key in relevant_constraints: + spec = constraints[key].specifier + msg += f"\n The user requested (constraint) {key}{spec}" + + msg = ( + msg + + "\n\n" + + "To fix this you could try to:\n" + + "1. loosen the range of package versions you've specified\n" + + "2. remove package versions to allow pip attempt to solve " + + "the dependency conflict\n" + ) + + logger.info(msg) + + return DistributionNotFound( + "ResolutionImpossible: for help visit " + "https://pip.pypa.io/en/latest/topics/dependency-resolution/" + "#dealing-with-dependency-conflicts" + ) diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py new file mode 100644 index 000000000..8663097b4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py @@ -0,0 +1,155 @@ +"""Utilities to lazily create and visit candidates found. + +Creating and visiting a candidate is a *very* costly operation. It involves +fetching, extracting, potentially building modules from source, and verifying +distribution metadata. It is therefore crucial for performance to keep +everything here lazy all the way down, so we only touch candidates that we +absolutely need, and not "download the world" when we only need one version of +something. +""" + +import functools +from collections.abc import Sequence +from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Set, Tuple + +from pip._vendor.packaging.version import _BaseVersion + +from .base import Candidate + +IndexCandidateInfo = Tuple[_BaseVersion, Callable[[], Optional[Candidate]]] + +if TYPE_CHECKING: + SequenceCandidate = Sequence[Candidate] +else: + # For compatibility: Python before 3.9 does not support using [] on the + # Sequence class. + # + # >>> from collections.abc import Sequence + # >>> Sequence[str] + # Traceback (most recent call last): + # File "", line 1, in + # TypeError: 'ABCMeta' object is not subscriptable + # + # TODO: Remove this block after dropping Python 3.8 support. + SequenceCandidate = Sequence + + +def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the package is not already installed. Candidates + from index come later in their normal ordering. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_prepended( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers the already-installed + candidate and NOT to upgrade. The installed candidate is therefore + always yielded first, and candidates from index come later in their + normal ordering, except skipped when the version is already installed. + """ + yield installed + versions_found: Set[_BaseVersion] = {installed.version} + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_inserted( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers to upgrade an + already-installed package. Candidates from index are returned in their + normal ordering, except replaced when the version is already installed. + + The implementation iterates through and yields other candidates, inserting + the installed candidate exactly once before we start yielding older or + equivalent candidates, or after all other candidates if they are all newer. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + # If the installed candidate is better, yield it first. + if installed.version >= version: + yield installed + versions_found.add(installed.version) + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + # If the installed candidate is older than all other candidates. + if installed.version not in versions_found: + yield installed + + +class FoundCandidates(SequenceCandidate): + """A lazy sequence to provide candidates to the resolver. + + The intended usage is to return this from `find_matches()` so the resolver + can iterate through the sequence multiple times, but only access the index + page when remote packages are actually needed. This improve performances + when suitable candidates are already installed on disk. + """ + + def __init__( + self, + get_infos: Callable[[], Iterator[IndexCandidateInfo]], + installed: Optional[Candidate], + prefers_installed: bool, + incompatible_ids: Set[int], + ): + self._get_infos = get_infos + self._installed = installed + self._prefers_installed = prefers_installed + self._incompatible_ids = incompatible_ids + + def __getitem__(self, index: Any) -> Any: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + def __iter__(self) -> Iterator[Candidate]: + infos = self._get_infos() + if not self._installed: + iterator = _iter_built(infos) + elif self._prefers_installed: + iterator = _iter_built_with_prepended(self._installed, infos) + else: + iterator = _iter_built_with_inserted(self._installed, infos) + return (c for c in iterator if id(c) not in self._incompatible_ids) + + def __len__(self) -> int: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + @functools.lru_cache(maxsize=1) + def __bool__(self) -> bool: + if self._prefers_installed and self._installed: + return True + return any(self) diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py new file mode 100644 index 000000000..e6ec9594f --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py @@ -0,0 +1,248 @@ +import collections +import math +from typing import ( + TYPE_CHECKING, + Dict, + Iterable, + Iterator, + Mapping, + Sequence, + TypeVar, + Union, +) + +from pip._vendor.resolvelib.providers import AbstractProvider + +from .base import Candidate, Constraint, Requirement +from .candidates import REQUIRES_PYTHON_IDENTIFIER +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.providers import Preference + from pip._vendor.resolvelib.resolvers import RequirementInformation + + PreferenceInformation = RequirementInformation[Requirement, Candidate] + + _ProviderBase = AbstractProvider[Requirement, Candidate, str] +else: + _ProviderBase = AbstractProvider + +# Notes on the relationship between the provider, the factory, and the +# candidate and requirement classes. +# +# The provider is a direct implementation of the resolvelib class. Its role +# is to deliver the API that resolvelib expects. +# +# Rather than work with completely abstract "requirement" and "candidate" +# concepts as resolvelib does, pip has concrete classes implementing these two +# ideas. The API of Requirement and Candidate objects are defined in the base +# classes, but essentially map fairly directly to the equivalent provider +# methods. In particular, `find_matches` and `is_satisfied_by` are +# requirement methods, and `get_dependencies` is a candidate method. +# +# The factory is the interface to pip's internal mechanisms. It is stateless, +# and is created by the resolver and held as a property of the provider. It is +# responsible for creating Requirement and Candidate objects, and provides +# services to those objects (access to pip's finder and preparer). + + +D = TypeVar("D") +V = TypeVar("V") + + +def _get_with_identifier( + mapping: Mapping[str, V], + identifier: str, + default: D, +) -> Union[D, V]: + """Get item from a package name lookup mapping with a resolver identifier. + + This extra logic is needed when the target mapping is keyed by package + name, which cannot be directly looked up with an identifier (which may + contain requested extras). Additional logic is added to also look up a value + by "cleaning up" the extras from the identifier. + """ + if identifier in mapping: + return mapping[identifier] + # HACK: Theoretically we should check whether this identifier is a valid + # "NAME[EXTRAS]" format, and parse out the name part with packaging or + # some regular expression. But since pip's resolver only spits out three + # kinds of identifiers: normalized PEP 503 names, normalized names plus + # extras, and Requires-Python, we can cheat a bit here. + name, open_bracket, _ = identifier.partition("[") + if open_bracket and name in mapping: + return mapping[name] + return default + + +class PipProvider(_ProviderBase): + """Pip's provider implementation for resolvelib. + + :params constraints: A mapping of constraints specified by the user. Keys + are canonicalized project names. + :params ignore_dependencies: Whether the user specified ``--no-deps``. + :params upgrade_strategy: The user-specified upgrade strategy. + :params user_requested: A set of canonicalized package names that the user + supplied for pip to install/upgrade. + """ + + def __init__( + self, + factory: Factory, + constraints: Dict[str, Constraint], + ignore_dependencies: bool, + upgrade_strategy: str, + user_requested: Dict[str, int], + ) -> None: + self._factory = factory + self._constraints = constraints + self._ignore_dependencies = ignore_dependencies + self._upgrade_strategy = upgrade_strategy + self._user_requested = user_requested + self._known_depths: Dict[str, float] = collections.defaultdict(lambda: math.inf) + + def identify(self, requirement_or_candidate: Union[Requirement, Candidate]) -> str: + return requirement_or_candidate.name + + def get_preference( # type: ignore + self, + identifier: str, + resolutions: Mapping[str, Candidate], + candidates: Mapping[str, Iterator[Candidate]], + information: Mapping[str, Iterable["PreferenceInformation"]], + backtrack_causes: Sequence["PreferenceInformation"], + ) -> "Preference": + """Produce a sort key for given requirement based on preference. + + The lower the return value is, the more preferred this group of + arguments is. + + Currently pip considers the followings in order: + + * Prefer if any of the known requirements is "direct", e.g. points to an + explicit URL. + * If equal, prefer if any requirement is "pinned", i.e. contains + operator ``===`` or ``==``. + * If equal, calculate an approximate "depth" and resolve requirements + closer to the user-specified requirements first. + * Order user-specified requirements by the order they are specified. + * If equal, prefers "non-free" requirements, i.e. contains at least one + operator, such as ``>=`` or ``<``. + * If equal, order alphabetically for consistency (helps debuggability). + """ + lookups = (r.get_candidate_lookup() for r, _ in information[identifier]) + candidate, ireqs = zip(*lookups) + operators = [ + specifier.operator + for specifier_set in (ireq.specifier for ireq in ireqs if ireq) + for specifier in specifier_set + ] + + direct = candidate is not None + pinned = any(op[:2] == "==" for op in operators) + unfree = bool(operators) + + try: + requested_order: Union[int, float] = self._user_requested[identifier] + except KeyError: + requested_order = math.inf + parent_depths = ( + self._known_depths[parent.name] if parent is not None else 0.0 + for _, parent in information[identifier] + ) + inferred_depth = min(d for d in parent_depths) + 1.0 + else: + inferred_depth = 1.0 + self._known_depths[identifier] = inferred_depth + + requested_order = self._user_requested.get(identifier, math.inf) + + # Requires-Python has only one candidate and the check is basically + # free, so we always do it first to avoid needless work if it fails. + requires_python = identifier == REQUIRES_PYTHON_IDENTIFIER + + # HACK: Setuptools have a very long and solid backward compatibility + # track record, and extremely few projects would request a narrow, + # non-recent version range of it since that would break a lot things. + # (Most projects specify it only to request for an installer feature, + # which does not work, but that's another topic.) Intentionally + # delaying Setuptools helps reduce branches the resolver has to check. + # This serves as a temporary fix for issues like "apache-airflow[all]" + # while we work on "proper" branch pruning techniques. + delay_this = identifier == "setuptools" + + # Prefer the causes of backtracking on the assumption that the problem + # resolving the dependency tree is related to the failures that caused + # the backtracking + backtrack_cause = self.is_backtrack_cause(identifier, backtrack_causes) + + return ( + not requires_python, + delay_this, + not direct, + not pinned, + not backtrack_cause, + inferred_depth, + requested_order, + not unfree, + identifier, + ) + + def find_matches( + self, + identifier: str, + requirements: Mapping[str, Iterator[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + ) -> Iterable[Candidate]: + def _eligible_for_upgrade(identifier: str) -> bool: + """Are upgrades allowed for this project? + + This checks the upgrade strategy, and whether the project was one + that the user specified in the command line, in order to decide + whether we should upgrade if there's a newer version available. + + (Note that we don't need access to the `--upgrade` flag, because + an upgrade strategy of "to-satisfy-only" means that `--upgrade` + was not specified). + """ + if self._upgrade_strategy == "eager": + return True + elif self._upgrade_strategy == "only-if-needed": + user_order = _get_with_identifier( + self._user_requested, + identifier, + default=None, + ) + return user_order is not None + return False + + constraint = _get_with_identifier( + self._constraints, + identifier, + default=Constraint.empty(), + ) + return self._factory.find_candidates( + identifier=identifier, + requirements=requirements, + constraint=constraint, + prefers_installed=(not _eligible_for_upgrade(identifier)), + incompatibilities=incompatibilities, + ) + + def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool: + return requirement.is_satisfied_by(candidate) + + def get_dependencies(self, candidate: Candidate) -> Sequence[Requirement]: + with_requires = not self._ignore_dependencies + return [r for r in candidate.iter_dependencies(with_requires) if r is not None] + + @staticmethod + def is_backtrack_cause( + identifier: str, backtrack_causes: Sequence["PreferenceInformation"] + ) -> bool: + for backtrack_cause in backtrack_causes: + if identifier == backtrack_cause.requirement.name: + return True + if backtrack_cause.parent and identifier == backtrack_cause.parent.name: + return True + return False diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py new file mode 100644 index 000000000..6ced5329b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py @@ -0,0 +1,68 @@ +from collections import defaultdict +from logging import getLogger +from typing import Any, DefaultDict + +from pip._vendor.resolvelib.reporters import BaseReporter + +from .base import Candidate, Requirement + +logger = getLogger(__name__) + + +class PipReporter(BaseReporter): + def __init__(self) -> None: + self.backtracks_by_package: DefaultDict[str, int] = defaultdict(int) + + self._messages_at_backtrack = { + 1: ( + "pip is looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 8: ( + "pip is looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 13: ( + "This is taking longer than usual. You might need to provide " + "the dependency resolver with stricter constraints to reduce " + "runtime. See https://pip.pypa.io/warnings/backtracking for " + "guidance. If you want to abort this run, press Ctrl + C." + ), + } + + def backtracking(self, candidate: Candidate) -> None: + self.backtracks_by_package[candidate.name] += 1 + + count = self.backtracks_by_package[candidate.name] + if count not in self._messages_at_backtrack: + return + + message = self._messages_at_backtrack[count] + logger.info("INFO: %s", message.format(package_name=candidate.name)) + + +class PipDebuggingReporter(BaseReporter): + """A reporter that does an info log for every event it sees.""" + + def starting(self) -> None: + logger.info("Reporter.starting()") + + def starting_round(self, index: int) -> None: + logger.info("Reporter.starting_round(%r)", index) + + def ending_round(self, index: int, state: Any) -> None: + logger.info("Reporter.ending_round(%r, state)", index) + + def ending(self, state: Any) -> None: + logger.info("Reporter.ending(%r)", state) + + def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None: + logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent) + + def backtracking(self, candidate: Candidate) -> None: + logger.info("Reporter.backtracking(%r)", candidate) + + def pinning(self, candidate: Candidate) -> None: + logger.info("Reporter.pinning(%r)", candidate) diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py new file mode 100644 index 000000000..f561f1f1e --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py @@ -0,0 +1,166 @@ +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.req.req_install import InstallRequirement + +from .base import Candidate, CandidateLookup, Requirement, format_name + + +class ExplicitRequirement(Requirement): + def __init__(self, candidate: Candidate) -> None: + self.candidate = candidate + + def __str__(self) -> str: + return str(self.candidate) + + def __repr__(self) -> str: + return "{class_name}({candidate!r})".format( + class_name=self.__class__.__name__, + candidate=self.candidate, + ) + + @property + def project_name(self) -> NormalizedName: + # No need to canonicalize - the candidate did this + return self.candidate.project_name + + @property + def name(self) -> str: + # No need to canonicalize - the candidate did this + return self.candidate.name + + def format_for_error(self) -> str: + return self.candidate.format_for_error() + + def get_candidate_lookup(self) -> CandidateLookup: + return self.candidate, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return candidate == self.candidate + + +class SpecifierRequirement(Requirement): + def __init__(self, ireq: InstallRequirement) -> None: + assert ireq.link is None, "This is a link, not a specifier" + self._ireq = ireq + self._extras = frozenset(ireq.extras) + + def __str__(self) -> str: + return str(self._ireq.req) + + def __repr__(self) -> str: + return "{class_name}({requirement!r})".format( + class_name=self.__class__.__name__, + requirement=str(self._ireq.req), + ) + + @property + def project_name(self) -> NormalizedName: + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + return canonicalize_name(self._ireq.req.name) + + @property + def name(self) -> str: + return format_name(self.project_name, self._extras) + + def format_for_error(self) -> str: + + # Convert comma-separated specifiers into "A, B, ..., F and G" + # This makes the specifier a bit more "human readable", without + # risking a change in meaning. (Hopefully! Not all edge cases have + # been checked) + parts = [s.strip() for s in str(self).split(",")] + if len(parts) == 0: + return "" + elif len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def get_candidate_lookup(self) -> CandidateLookup: + return None, self._ireq + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self.name, ( + f"Internal issue: Candidate is not for this requirement " + f"{candidate.name} vs {self.name}" + ) + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + spec = self._ireq.req.specifier + return spec.contains(candidate.version, prereleases=True) + + +class RequiresPythonRequirement(Requirement): + """A requirement representing Requires-Python metadata.""" + + def __init__(self, specifier: SpecifierSet, match: Candidate) -> None: + self.specifier = specifier + self._candidate = match + + def __str__(self) -> str: + return f"Python {self.specifier}" + + def __repr__(self) -> str: + return "{class_name}({specifier!r})".format( + class_name=self.__class__.__name__, + specifier=str(self.specifier), + ) + + @property + def project_name(self) -> NormalizedName: + return self._candidate.project_name + + @property + def name(self) -> str: + return self._candidate.name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + if self.specifier.contains(self._candidate.version, prereleases=True): + return self._candidate, None + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self._candidate.name, "Not Python candidate" + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class UnsatisfiableRequirement(Requirement): + """A requirement that cannot be satisfied.""" + + def __init__(self, name: NormalizedName) -> None: + self._name = name + + def __str__(self) -> str: + return f"{self._name} (unavailable)" + + def __repr__(self) -> str: + return "{class_name}({name!r})".format( + class_name=self.__class__.__name__, + name=str(self._name), + ) + + @property + def project_name(self) -> NormalizedName: + return self._name + + @property + def name(self) -> str: + return self._name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return False diff --git a/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py new file mode 100644 index 000000000..32ef7899b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py @@ -0,0 +1,298 @@ +import functools +import logging +import os +from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.resolvelib import BaseReporter, ResolutionImpossible +from pip._vendor.resolvelib import Resolver as RLResolver +from pip._vendor.resolvelib.structs import DirectedGraph + +from pip._internal.cache import WheelCache +from pip._internal.index.package_finder import PackageFinder +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_set import RequirementSet +from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider +from pip._internal.resolution.resolvelib.provider import PipProvider +from pip._internal.resolution.resolvelib.reporter import ( + PipDebuggingReporter, + PipReporter, +) + +from .base import Candidate, Requirement +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.resolvers import Result as RLResult + + Result = RLResult[Requirement, Candidate, str] + + +logger = logging.getLogger(__name__) + + +class Resolver(BaseResolver): + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + suppress_build_failures: bool, + py_version_info: Optional[Tuple[int, ...]] = None, + ): + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + self.factory = Factory( + finder=finder, + preparer=preparer, + make_install_req=make_install_req, + wheel_cache=wheel_cache, + use_user_site=use_user_site, + force_reinstall=force_reinstall, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + suppress_build_failures=suppress_build_failures, + py_version_info=py_version_info, + ) + self.ignore_dependencies = ignore_dependencies + self.upgrade_strategy = upgrade_strategy + self._result: Optional[Result] = None + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + collected = self.factory.collect_root_requirements(root_reqs) + provider = PipProvider( + factory=self.factory, + constraints=collected.constraints, + ignore_dependencies=self.ignore_dependencies, + upgrade_strategy=self.upgrade_strategy, + user_requested=collected.user_requested, + ) + if "PIP_RESOLVER_DEBUG" in os.environ: + reporter: BaseReporter = PipDebuggingReporter() + else: + reporter = PipReporter() + resolver: RLResolver[Requirement, Candidate, str] = RLResolver( + provider, + reporter, + ) + + try: + try_to_avoid_resolution_too_deep = 2000000 + result = self._result = resolver.resolve( + collected.requirements, max_rounds=try_to_avoid_resolution_too_deep + ) + + except ResolutionImpossible as e: + error = self.factory.get_installation_error( + cast("ResolutionImpossible[Requirement, Candidate]", e), + collected.constraints, + ) + raise error from e + + req_set = RequirementSet(check_supported_wheels=check_supported_wheels) + for candidate in result.mapping.values(): + ireq = candidate.get_install_requirement() + if ireq is None: + continue + + # Check if there is already an installation under the same name, + # and set a flag for later stages to uninstall it, if needed. + installed_dist = self.factory.get_dist_to_uninstall(candidate) + if installed_dist is None: + # There is no existing installation -- nothing to uninstall. + ireq.should_reinstall = False + elif self.factory.force_reinstall: + # The --force-reinstall flag is set -- reinstall. + ireq.should_reinstall = True + elif installed_dist.version != candidate.version: + # The installation is different in version -- reinstall. + ireq.should_reinstall = True + elif candidate.is_editable or installed_dist.editable: + # The incoming distribution is editable, or different in + # editable-ness to installation -- reinstall. + ireq.should_reinstall = True + elif candidate.source_link and candidate.source_link.is_file: + # The incoming distribution is under file:// + if candidate.source_link.is_wheel: + # is a local wheel -- do nothing. + logger.info( + "%s is already installed with the same version as the " + "provided wheel. Use --force-reinstall to force an " + "installation of the wheel.", + ireq.name, + ) + continue + + # is a local sdist or path -- reinstall + ireq.should_reinstall = True + else: + continue + + link = candidate.source_link + if link and link.is_yanked: + # The reason can contain non-ASCII characters, Unicode + # is required for Python 2. + msg = ( + "The candidate selected for download or install is a " + "yanked version: {name!r} candidate (version {version} " + "at {link})\nReason for being yanked: {reason}" + ).format( + name=candidate.name, + version=candidate.version, + link=link, + reason=link.yanked_reason or "", + ) + logger.warning(msg) + + req_set.add_named_requirement(ireq) + + reqs = req_set.all_requirements + self.factory.preparer.prepare_linked_requirements_more(reqs) + return req_set + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """Get order for installation of requirements in RequirementSet. + + The returned list contains a requirement before another that depends on + it. This helps ensure that the environment is kept consistent as they + get installed one-by-one. + + The current implementation creates a topological ordering of the + dependency graph, giving more weight to packages with less + or no dependencies, while breaking any cycles in the graph at + arbitrary points. We make no guarantees about where the cycle + would be broken, other than it *would* be broken. + """ + assert self._result is not None, "must call resolve() first" + + if not req_set.requirements: + # Nothing is left to install, so we do not need an order. + return [] + + graph = self._result.graph + weights = get_topological_weights(graph, set(req_set.requirements.keys())) + + sorted_items = sorted( + req_set.requirements.items(), + key=functools.partial(_req_set_item_sorter, weights=weights), + reverse=True, + ) + return [ireq for _, ireq in sorted_items] + + +def get_topological_weights( + graph: "DirectedGraph[Optional[str]]", requirement_keys: Set[str] +) -> Dict[Optional[str], int]: + """Assign weights to each node based on how "deep" they are. + + This implementation may change at any point in the future without prior + notice. + + We first simplify the dependency graph by pruning any leaves and giving them + the highest weight: a package without any dependencies should be installed + first. This is done again and again in the same way, giving ever less weight + to the newly found leaves. The loop stops when no leaves are left: all + remaining packages have at least one dependency left in the graph. + + Then we continue with the remaining graph, by taking the length for the + longest path to any node from root, ignoring any paths that contain a single + node twice (i.e. cycles). This is done through a depth-first search through + the graph, while keeping track of the path to the node. + + Cycles in the graph result would result in node being revisited while also + being on its own path. In this case, take no action. This helps ensure we + don't get stuck in a cycle. + + When assigning weight, the longer path (i.e. larger length) is preferred. + + We are only interested in the weights of packages that are in the + requirement_keys. + """ + path: Set[Optional[str]] = set() + weights: Dict[Optional[str], int] = {} + + def visit(node: Optional[str]) -> None: + if node in path: + # We hit a cycle, so we'll break it here. + return + + # Time to visit the children! + path.add(node) + for child in graph.iter_children(node): + visit(child) + path.remove(node) + + if node not in requirement_keys: + return + + last_known_parent_count = weights.get(node, 0) + weights[node] = max(last_known_parent_count, len(path)) + + # Simplify the graph, pruning leaves that have no dependencies. + # This is needed for large graphs (say over 200 packages) because the + # `visit` function is exponentially slower then, taking minutes. + # See https://github.com/pypa/pip/issues/10557 + # We will loop until we explicitly break the loop. + while True: + leaves = set() + for key in graph: + if key is None: + continue + for _child in graph.iter_children(key): + # This means we have at least one child + break + else: + # No child. + leaves.add(key) + if not leaves: + # We are done simplifying. + break + # Calculate the weight for the leaves. + weight = len(graph) - 1 + for leaf in leaves: + if leaf not in requirement_keys: + continue + weights[leaf] = weight + # Remove the leaves from the graph, making it simpler. + for leaf in leaves: + graph.remove(leaf) + + # Visit the remaining graph. + # `None` is guaranteed to be the root node by resolvelib. + visit(None) + + # Sanity check: all requirement keys should be in the weights, + # and no other keys should be in the weights. + difference = set(weights.keys()).difference(requirement_keys) + assert not difference, difference + + return weights + + +def _req_set_item_sorter( + item: Tuple[str, InstallRequirement], + weights: Dict[Optional[str], int], +) -> Tuple[int, str]: + """Key function used to sort install requirements for installation. + + Based on the "weight" mapping calculated in ``get_installation_order()``. + The canonical package name is returned as the second member as a tie- + breaker to ensure the result is predictable, which is useful in tests. + """ + name = canonicalize_name(item[0]) + return weights[name], name diff --git a/venv/Lib/site-packages/pip/_internal/self_outdated_check.py b/venv/Lib/site-packages/pip/_internal/self_outdated_check.py new file mode 100644 index 000000000..7300e0ea4 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/self_outdated_check.py @@ -0,0 +1,189 @@ +import datetime +import hashlib +import json +import logging +import optparse +import os.path +import sys +from typing import Any, Dict + +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import get_default_environment +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace +from pip._internal.utils.misc import ensure_dir + +SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +def _get_statefile_name(key: str) -> str: + key_bytes = key.encode() + name = hashlib.sha224(key_bytes).hexdigest() + return name + + +class SelfCheckState: + def __init__(self, cache_dir: str) -> None: + self.state: Dict[str, Any] = {} + self.statefile_path = None + + # Try to load the existing state + if cache_dir: + self.statefile_path = os.path.join( + cache_dir, "selfcheck", _get_statefile_name(self.key) + ) + try: + with open(self.statefile_path, encoding="utf-8") as statefile: + self.state = json.load(statefile) + except (OSError, ValueError, KeyError): + # Explicitly suppressing exceptions, since we don't want to + # error out if the cache file is invalid. + pass + + @property + def key(self) -> str: + return sys.prefix + + def save(self, pypi_version: str, current_time: datetime.datetime) -> None: + # If we do not have a path to cache in, don't bother saving. + if not self.statefile_path: + return + + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self.statefile_path)): + return + + # Now that we've ensured the directory is owned by this user, we'll go + # ahead and make sure that all our directories are created. + ensure_dir(os.path.dirname(self.statefile_path)) + + state = { + # Include the key so it's easy to tell which pip wrote the + # file. + "key": self.key, + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + } + + text = json.dumps(state, sort_keys=True, separators=(",", ":")) + + with adjacent_tmp_file(self.statefile_path) as f: + f.write(text.encode()) + + try: + # Since we have a prefix-specific state file, we can just + # overwrite whatever is there, no need to check. + replace(f.name, self.statefile_path) + except OSError: + # Best effort. + pass + + +def was_installed_by_pip(pkg: str) -> bool: + """Checks whether pkg was installed by pip + + This is used not to display the upgrade message when pip is in fact + installed by system package manager, such as dnf on Fedora. + """ + dist = get_default_environment().get_distribution(pkg) + return dist is not None and "pip" == dist.installer + + +def pip_self_version_check(session: PipSession, options: optparse.Values) -> None: + """Check for an update for pip. + + Limit the frequency of checks to once per week. State is stored either in + the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix + of the pip script path. + """ + installed_dist = get_default_environment().get_distribution("pip") + if not installed_dist: + return + + pip_version = installed_dist.version + pypi_version = None + + try: + state = SelfCheckState(cache_dir=options.cache_dir) + + current_time = datetime.datetime.utcnow() + # Determine if we need to refresh the state + if "last_check" in state.state and "pypi_version" in state.state: + last_check = datetime.datetime.strptime( + state.state["last_check"], SELFCHECK_DATE_FMT + ) + if (current_time - last_check).total_seconds() < 7 * 24 * 60 * 60: + pypi_version = state.state["pypi_version"] + + # Refresh the version if we need to or just see if we need to warn + if pypi_version is None: + # Lets use PackageFinder to see what the latest pip version is + link_collector = LinkCollector.create( + session, + options=options, + suppress_no_index=True, + ) + + # Pass allow_yanked=False so we don't suggest upgrading to a + # yanked version. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=False, # Explicitly set to False + ) + + finder = PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + use_deprecated_html5lib=( + "html5lib" in options.deprecated_features_enabled + ), + ) + best_candidate = finder.find_best_candidate("pip").best_candidate + if best_candidate is None: + return + pypi_version = str(best_candidate.version) + + # save that we've performed a check + state.save(pypi_version, current_time) + + remote_version = parse_version(pypi_version) + + local_version_is_older = ( + pip_version < remote_version + and pip_version.base_version != remote_version.base_version + and was_installed_by_pip("pip") + ) + + # Determine if our pypi_version is older + if not local_version_is_older: + return + + # We cannot tell how the current pip is available in the current + # command context, so be pragmatic here and suggest the command + # that's always available. This does not accommodate spaces in + # `sys.executable` on purpose as it is not possible to do it + # correctly without knowing the user's shell. Thus, + # it won't be done until possible through the standard library. + # Do not be tempted to use the undocumented subprocess.list2cmdline. + # It is considered an internal implementation detail for a reason. + pip_cmd = f"{sys.executable} -m pip" + logger.warning( + "You are using pip version %s; however, version %s is " + "available.\nYou should consider upgrading via the " + "'%s install --upgrade pip' command.", + pip_version, + pypi_version, + pip_cmd, + ) + except Exception: + logger.debug( + "There was an error checking the latest version of pip", + exc_info=True, + ) diff --git a/venv/Lib/site-packages/pip/_internal/utils/__init__.py b/venv/Lib/site-packages/pip/_internal/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f74d6e5f992a2cbc0370fd84c78589714850a2be GIT binary patch literal 193 zcmd1j<>g`kg6(m4lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_YvsFxJacWU< zOi*cYabk>1esXDUYFQRXW=X1U zL1J=tVtQ(EOhIOWetc$LNorAEVvc@kNoG#5emqbhvm`!Vub}c4hfQvNN@-529mw`# JCLqDW005#3G)Vve literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85ea7b2f5d08ba4b5724904d4a17def3932b34f8 GIT binary patch literal 1521 zcmZux&2Hm15GEyBvXwXu_NN8*(DE1+iE=NBVw;~$3j|K#U>Aj9RFOs6QC5~*lFA~6 zZ@cHkKEkHxrG0_Ei-4Yb+9xQ`Q)ehU^`ap#BXUFzXTJG{Ww#p;7=Qfq=jd;jkiT%T zJ{T;Xg6KXdK?X!n;pB8c;p^tk)E&4}Hei$pHfWs?(GuPpB0Nd2yw~o)7rtzZw)DqL zbVTrm4LYJLHpC{(0^yvKaBKeiVWmwu&E}HlprS%Uv!I7=VZ;e3>`K zxtGgpnFj%f@#46DaCUyoGYv_aS5g-I``)uNNLBEoM#GcEJ6 z^5CTMQ6VftP#?Z;VRq$-kpzcN{__p$WR?56gYFntQwY0T>hoj?8v z;}wBIzi!8IkxXSA*FhXNjDY!O9RFM;`SOn+$D&NZ>}sPFdQ?aOo6nlsLR$;eHi*XT z+l0~2Th>-Hbf!9BO)03=z&V~d1krfV0Mf>J?=HwKeU0rx=Le7&Hpzdy+~uRna9QX| z0fEa(@sILbwhi#1DX$bEQ!Y4fLh+aW>dqa}L#iI*e=Jd>Y&M_45(!{o+;$YM|Hpi! ziVYuk8uA{(zoissu3>`SI`C3pBJTWMUrsU&MY|_tBpI??$jvahY zFJpH@510Hdmz{9ep2{K_@vPv$mFSKuQ4CXfCStoqZ9vGqu%(bI^_E`s{UJU(4Op9r z5U1E{J**$@Ujxa)g-F$#>yOVDV9^Lm;B8Zdu!N2+eJ|Wl4`JEd=b4)sl(k`$Ef2b{ py;J-4*z46J+>NkXH}_uM{<`7qH^?Q8(J<2Xw<%)}+y}u{>t7=&gk}H$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bd7000ba6a458970f369bb7e3246db009d27ab9 GIT binary patch literal 1619 zcmZWp&2A($5N>ySdODrS%n-qD00~)$ON-r%w0lDcAr=J=s|Z23j7GFPZD+=lo_5Q2 zC!45)gxCX@yu;?WPr$oa;>3wZfD>i+BqYI-|H|dBs=g{)?(C!iwBLXFWByAV1b@2C z-PVWAm(cZZFtA`6FvP+VO_86&X$W&vMr%C9$erP`w~nWMSoe6sVxAmh)@R9UJl$gN zcv;F*FOS(a8@%pKxBn;KVMCA)HVBv}?+1V~Vq-wrVc`!!wtMk+dbAXp6q0drrf98+ zS#om9D<&0Zgw{0^N|Uu@P05LoL`$!sxM@^HPHEY2O{n5&A=foEVh(D@QhBAKQHocF z)S~Vz%&F%4DVXF$R0fWOtO%F~T*c3nFr3`nX*68`@?&fTb~X9l|g~et%^9 zO42njTsY}XbH4SU`%u4v#Z9O!6!2Aa8Jchvy}@mGjnue>;8}DTwSoH3%X=-Xufxm8 z@8UMPMnDffJa`)_cqW0`hT$Upd9q)~>R2o$Szo!QVs|`Aj2h}VvZ2%#LwPN2PiQB= zD=8|Q@>eya-|1%9)93-!$U%%sQ8lmfQk?MIUG@BSgL|v?QNE^y)OnWcGXb^h&J!TwBx6FJ38^;VoC!tDB*aj{771%J*3PWLpz*ck>`PgmDs5%qX zff~T2tY;&Au5EHtecn(iiQyT4IIAn9C>v{C*ASv;4r?DFT*;i2z%FZsOtP`_{=iQa_)2T78k0TkM9 Lw1@YGA8h>#El!t~ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d43d29c328e6e51f04e26b06a3b33dadcec37f4 GIT binary patch literal 1509 zcmY*ZQEwwP5MFyX$u`}TQr!a*JXiwh6vQPJ)d>;M3Ao-tAxf$Slxq~R+N`~aTW7tp zy^T_}FC6~@A+_+tFW|pe;)y5z!o3{hO^Xh%>>bZ|?3vHsShiYC589tU{xzF6JnwHe zd9wvD`2xDWgn@b!k0Oc%nxN{BC%F3i6Mybe|2H%V7`myk`YoC?Xu!e@(;BV+989)o zgEc|3odqc;4;@F$tfvBVlt_gP0F=Vd{!D~>ih%Ac!RcY zqd7Bik(fnXa%#7=p@Pri;(V@cV|+9?9F9k}u9zuRo;siVhCv9SKZUM8hT*aSKzPEt z_QswIIPeTw?;_8Ar(TX$4me-nrGJf(cZDFOV4x6qe&0qmIvT~tr^DlCgVCtp4r~x> zE$sHuvXII=Q%WlPPQi;#e8F-mRi{(};yma;IzrW9lQvdxdtN2~;VE~guVzns(;qaT zF+C}@PNs)4Etde4o_@{EH|1>loGWb}9V>apQZt3EFQ$Dyn`&;@qasPqlR48!kr26`b&K?#Ga zGi4&gn#?6hR>}GLuQO9mH-$oQ`;QI zgW>aGzdsybcK_$`85wgSDxfyS;UEOe)cuya9aY>&j8PU#Z39`b+=j#W`xs3Y-6S8T(QiCiJBLQ(#+P23SjH6cy9evaEo)(-m{H3 zrZSCV+YoX-=lNVYwp(AX;iZUU03U2y@S60&%#;n|I8T-gly&C-nqVfS*p!10Z;|z( zsH#|06-#*kRM{q^tc+d(!EE3*QSK3bBTHA^%B5<<&zF*xf<1Air60f$c%dIc4TiYs M@A!MIkbDsQ3o(JIW&i*H literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3486c60e138f35581df5058cf9f67876dd2ab565 GIT binary patch literal 4078 zcmb_fTW=f372cU0E?1-^+qzn|lWc_+FnXk#aiQA06eHz)|En-ym%t-UwT zE^Wyn`yv;09{SMdpn&w4Uy%Q@K%e^LpHSC{`<+=*BwhEZU15haXJ*ei^PMx_86|Ub zH3QH0fB5?*TQ-b;&|vbJ#o*U?v%AbNq|q`YlRRWChF>$}k=ZgM(GpRmRbezILMy7a zs*&BYqnXxBRBP3udaEAIwq~Qb)?75-nrDX3_K(QQ0c#zVmS6FY$!eFc8PfI_xK#d{NPb{vgl`$o=k-bcbo{wJiy9zS4!%-kr9 zmmDi-{|}P@yNkTEFtc1Wn3}`HcZOQR&#U<6wf65ac-sEFmt|i2R?_K3ew=6R+d=+m zZ?pYLptAhzJ(WE4J9+zwA3tf|4K~|Zko#v-uk*;;^0Rgtr03u`Z~(&RdU+6L=SE2C zplHCF>29$+xlK1u+&Ga*jss<6D zQ`ywK9wr?x%x<7F`lwMU=3FvM7`iwZMFoaC+l95Il3tn>CL*PXuNqbDgL2TPMGq5& zpCHCh-RtB%FVs4UI@uhhvqftCtaSJkzAU|-pLXm7CNj#f8WZd&{%XvwTK^QY)*Hdp zX-rH3U4ek2t5Z8fN5=&5-A9riu(nx7wa+Dg#MOs=A}1Bv5H(^2+2N^ zm1zkg%%#A0m)||xur>ez}9BAwZImbsM@a~8t_2!}%w)!SIWa-CO9RP5I_6Q<6sUqOsujQDm621+q{2?|Xj zeIpanxDPVfGrqy;2ALSQj4w|Oc%Q#8u=Rz<^$F@=L@Js%%ooN!@0-Jv1IW=glJonh)ui&6HM_wD~V&gcOZEZ3k%jEe#m@3F6W3J)ca_DkGCXDl6SF#KpF6JrD3vqsYF>VEPp4bgca&4nMLu*dSPC$w3zXv)JZ)& z@Yl!#O;cH;Q_AM@$&27fn3OHbv39ddO8`UA7OhH8zj;KJ#_X;{W5*7T) z9tpLSBQ}z199S1UaImg;pm)UYaIRZM;3cV2)BsB&BehO_rbzV|=yEHII?0BGepH~a zF0;_gvQuoHtB=tw=7R`#2da;_ZX|JsLOXh>Pp|f!2#%_9&rns$tpOb+8qMbnBY68Q zB;Oi;qk6$m9~9j#RUHlbpHTl@j;>CghKajI7awG#!8R?hfd!n^Z4AL%a2VBeGsrrW zgQJIP3RP6?>>trV>I=yR6#}-$)NBd-paNit5BR_WFQC-Hb)K%}<{m=vh!3j$s%rGb zzQ`-6swVNpU-VIkYg&r>s->coYFQO4Ev&4JWPrf(z5sTg>pPF*IaJG>r0Zn8G)+|Q zONTCF4oaxwd!21(7$YZ3{Z7ygFdxJ<2hUf-ne3}(O$)ApmAz>6!8Pc{9Vm#mMv^mR zCg1i+cjT;Jy0q@V$oi#=>u2=$q!faUB=(!m1FRdFej0?Kv*|ltmf^w#2a}PvPSR7( zZ$7%yoOEEsN7sfv?@sJ;G?zKMNzZxe#kupu3j=xRz-aSucI3*PuJ-AS)60DAzrF`J z*>0Bmku%abT71?z(VnKjXZC2wpp9jGT&};c8en1hl$0PAZ zRHsI^`V0yhd}9OU8&Bh8QFUFJbX>RK3Z)?5O>sUHQJFHSA>L@6z!krVJ76pm)hzG* zSk3ylB?F0s?RRzG2`R92Q&me=bG$G9!tSd8nJ^V*NRKE&%aNo$<{ QXqo(nn&7Xk%KX3n4IKRL9{>OV literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16793125107925c62343b4fcafb8bfa98b651571 GIT binary patch literal 516 zcmYjNv2GMG5VhCdyX7D>^vLZY<*r8vAq9mLC_*5blf}xn9MMX;*QUp)(5t3}W}~nLWetL&8gyG& z%zjaScAn%OOi1O{_t++3%|1;6;1K#o8f=CBH51*o{DT%SSfyvA7dA zaulQ7NbdC23iC1))FNboAT#BmQ+eU8p#R1~UeF(V@?3w65TbrR z#Ax(u-wa!zne-cnXTw^bx)AaBUGSICpr)T!`mI~*=n#%~rrDSah?+LBtX+=~debcj zbX{Ej_q5pU)02at+Qqsff1$?K^iz_L6QUV^%&Q_iqU*d&)4I04sq2uRlAxwZuD$OL b?+4HK=wYs@UTnP`I(W$`J9Lz+5>LfnR(6L% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a063eebf7d53dcc6ac23b56ef35dca6219f686c GIT binary patch literal 3318 zcmaJ^TW{RP6()yQQ7g%|E_PD8VVX9hSo~0k=?aNPS+W^U3cVl zy^-JbO`2<`3!|VL)Zb3JIBIp5@a=Y&ZyMa={*l3bv2tj2PjMEX7PdIU7cLnKY=Q9$ zJP`OztPa>)2457OSV7wot9(hU@nzu%7yT8qt7x%)u*^^MGe=H$oqwON^0gzoyTKX$ z*8j@*2G*UO&OJA6-qg|Ws(c<6Z=a1a(Sf%0b;v~_ML*U_o~cgoC2%yh+fHR&&Gsw* zc0uEDTDkYd6MgG;W#8W~MCCllFx)mPr--Ez_*jghJs}lFqv&Ai`i(nxZ(O^2|JLp8 zi(#L(oPSJouHaQI2w}ig2Du65uxkBIQd~dL=<`O`?Y33NchSx6cJW$YS=WeM~ymLM8mo+XsHxvD7+1vRfkxFmgk@-W>*E@S6 z+uQjp>FuaQi_IeLKZ=J!?G#C|6(yM#5-4nyI!V>m9AcefUoPOtQ)G?};TyJDk5ubX zE|Xz`Ws%y=A5T%Qype!5Ls9v_Tnuvwlm|%)2aQDK!e1iGE1O0tn|hTig)U{*cd`5N zTnyqe)%Owc zZd?>1<88O{k8f1fQuXzN_Yg3({S7LMbNbe5%~@1OY;D#?k|`ahX*At0YOE(k717`+ z=G(3rnD$Hg19Wj)S_2UyI7Bo^<6-3x_I1F-D$lA#DT*}i*JMz6!#opkoqP`~}i`X@)mib zrh}!}unglR2UCq#Cl1@DCScJngjVNZl{*w2Z2wFnj1S7d$B znQAlh!ka3o5*GrNG06Yl% zL79fN$LaKwQz;Ws&<&D|1Je|k@Q^2}kK{z|hlODw^Sy+_Fd=vk$26#HAF!vBgAd7F zPbcByBu$adv3H*`J^=2C-FPp_OBwb7@lbRQKD?J8{Ave3oqW{H!o(~O(;O3IsLGl|FUeqt#F zDK5+)FJUrbdspj1UEJClCVIE*b>N+?V!w#DDD~D3QCm+ZFU+t{b;I!kUN9)%DtbE* ze?-Rn-I*OWF()9VItvmdQ8q;X8M5JX^Vf!He1YFkX_(tY;S@o!MsdM9A6L#^oPs`s zW-wA(&are&&>J+4oO7ni4s>_|( z$}bsKwOO6>ssMc7f0T+nks=pTMz2<;SLnE$sy60|spwbtZbm4rKDqUq%6^!G&Z+p2 z@6bY%!-@N=wHKZQ7V zp=B{V?kk9|na51_k~y#U?SBX781rA+o^P%(`7Ny^)e z=C0l^a3LijBgwInJS!b}~uU&`z*LB$o<^^8`YwQ#=-4}rIB}I+<+V9I>eG3QV Bndkrj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..359df62a297aef17777c0e5b748012faae40893a GIT binary patch literal 2084 zcmZuxTW{P%6!zF-ukH2b)--8Fp$mng6>8dtQY1vHqE_J|6cD9ItX5cF&m`;Amt|%) zrKwj!q~a~Fyi`cZBYyzi_#q?l#1lV(NNqT0c9U)qV|je$T*ha!y02a65l|RG8EJkvxAYDRGwsX61x=um6v~as_;dMQuck)KzcYPz%JSf6$ zXk<5U7Ew0>+2fQoc#HYGwdt{dg->XAjx~*jZc-Mp7HH;!dA7_JxDOV>Tjwpd$QK}n zZu)GAoq6JR7unoBt8?~m$j#~y?SDR0Syd)^hwA2sA{}Hq{F8FC(!t$K@KoIwxo&`H zbd9f5i2}sY&$99Xe4E2W4PsTrBay?>*-51inF&Rere#ua?Fp_%qD*c4>vT}~dhp(X zSN;Z5Z5>#L7O`r=$f`BAx2&-J zQQK%oz3~aeyR~x=PUJ%r?AT@=`=3Hqf6r5D~3f7*RXo8~8tE?m??| z4k16YyA4o!yVvei2{Ts9V)P;MHB7KnS^z)DUvNrUH)o` zSHOH!-g&=wUveRPUyh_qdUvaIWE^@QW$NQmzqg(Vsjhq>s%>bW-VQH!dY@(ep3D@# zGECA3$rhJA0Oo3(m5K{!y{jXY69+93U&8hsRFs$d>7T$MDKMBt2(L$L`pxk#DZNV65)AQ3f@Um!`g6 zO(43V8Z}jZ?Q92iqjnkDN4|uBk8=;X+&r|zUGTBCT@~%&-={WajeS_P#z7s3dv);C zGEAF$YW?Dj{b|H}?K8TM?4L$;+zkK~>nxUG(o5K;Tq@3D!FPZkRSEXf0*F;`IwCg# z_p=~%7PJR&!R<65%gPp4aUZ%7Xb~gu65zv&YWiJ9I}i%@juY@nMrxp!QS&fUgKDJW z6K3cLeNS?jlpWbQVbj@Jw!Mg%hh+HonN)BcVE;|186aC@yfIDEhQggtypFq>?s)?w z-Goz|;2;gw(+9Gdq%;F0?|-|vEDOr4Yumo8|$4V?WspYIG(^uUta{qubnb}t*98! z<=Tsk%vmSkAzdc-+xhfgM7`789{aA-Km?jMgDdHB1c6Y=O)5^BPG)*9chysevKkVoIO18S%L@>U;`_cbN5c*XfmWK_8XE3D) zONc@oqXc^xm$VTZiRqaYZN?0w?*sF&Yvsq&cg*LNTgEa=m z78;PS7S=x!uNgL8BDeV)?nf@x>s>BYp?EBJMf6;VOaOCbpQge1fT=83uAxbn2TGG8 z&~#g_dDUW1iM`#1Hp5(^hRy&$Q-;SvP|8)rb!{0n0clN6_M1oV5$&l zfXf(O4-57N%srU$5EhQ6c!IjNv%M7}`E&&UKrs*J1mCsau0*eTM}G`mO_cLK#69;KOJVW(1av8aPXuBF#|;k;UU zQB@t$z5CT1HG3vC<|$*SM#x3eqOH*pISV*I^h6D&4>eeAC2wVS&-tZWlG zb9r;Y9+XXU9T#DOnYPt9hujG0bR^0Ofyh8h@hp|1{10eTDp9>q1!8HrS1CV9vapER U)3VTH3zimY;Wb=0>gx~9e>Zn9UjP6A literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18ee66700b3c0289935c3516c575bb56cfefc350 GIT binary patch literal 2149 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 HXH)+V5>sd# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1112633cee47541182fd71142e2f2e41bd82ef08 GIT binary patch literal 1303 zcmZ8h&x<5A6s{lLJ-zKLco1Ph@ZFY%nd;LXc96w&7I%bY9M%z`X)me^EA$LJ*lVbDZkI<1ar)A_9%Ij$SIyx6FHM-KTg+k znSPZlAN;{c$?Y=hC$AKRe*UEk${L}UX+NojGW|sO9rZJhq4B0nYBt?(_i< zA$gnrl*#nxG)+SOeey$$kcmHe<29P#g@%I{&Y_3OdJtNJ)e_>T&RJyw6^jLMyJ0HU ztCDwg;FN>CAnpP83UG{RjM_SVn^ggq(`%!T8Wu@t-}jD*@!81NXK_tZ?Mjj&?irwj!qi}C`P zfhVA*syNL^w}YT+WRMfqu){FYt8L5N$F%QltO>SC1mqx!z_9{jeCKVeB*Q?Bq*NZ6J+BX30|Oi2%6selfbO&?aRAt(b{B9!F!pe)<)}3KpFZVIP8{tJP|!!oJxSrL9-4 zb7IB&R-+?UPo6w|I+{k_ zyz0LsKK>8>+Ff65zK*uqyl#lZ=7lYrnu|@Fmnz&e+s)_7Q@FhI_ARTvY0`O4Eb=P!S^`_A8>}OPKNj5`S~Zcm5s({@wYO> Mo+t08=NaVx0Biq}1ONa4 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1c4c140c41243f7fbaee395293644677220781f GIT binary patch literal 5161 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2531099e55e83c2bcd5f61683c20654613a30d9f GIT binary patch literal 943 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74466fad0e7f9844ccd1054ecfa4a338f691e7c6 GIT binary patch literal 988 zcmZuw&2AGh5Vm(WKV4E938@?^fsaILQ$cSCA)o}PRFbOOf~Z!koVDAyaqPwRCJLe_ zcn~=91iZ^ioH+3cTwr#SN>zm=k7hidXTI^bt5;V;1nbB9pTi9wp@+Lz$OYS&}l8C3d z;YWrln`z@ViB?2RO1B$^M?`Qv*JI?UwXs9Ed`D zrePc)Sxp1=OZpR<4x&wH!c~=&LXDyPAmb{E_KC2-Q->O+0lp(32XAt;A5HIfA9Tat z@UEy|)D3sJQE3@nE)Sd)*t@W;1LM#+W_awI21610SZ5wX(z`%!kqQIk{P}GRN?`O3 zl#0*{eM08}^T#!Fx5768AIRFIet~g$r&Zo@jZ<&FbL}4f+Wb~(3ROBaAjhbg31vWA zB-Yxf-ND70t%P)!LUvXP-_C8(%p`TE+Dss{vbeEVY1=bKn__)%(CfpKByW0$(cYk+ z^p9UZ>m3#wnaH}ylq;r9H#bs>;Z8Tz${8^<0W>WdgJ@CW*5c(8p`1>Z(2i#s0IHDR zky!=*kJ)_~A6ss0e3)BHzuweh>zyjcH#s^nwufC;?-dtM8-a2d-yMk!VAcl@G}BuuACVrp;C}NE*CTa literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04908b9a5ec4ee56c31187c1956c106dd08a64e3 GIT binary patch literal 9634 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24c507dddfbf3d2219e6ac9d8f7fc5ddcb095923 GIT binary patch literal 18716 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 x_i` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddcc24636531c4c44e6d563ade67bc5b8612ba21 GIT binary patch literal 1989 zcmbVNO>f&a80Lp0D~{tNZu*gQEes48;6oc=mjOjFbjz@A*cJ@SdJ&8gvPj!>Wl1IJ zU=Dmsf5>*sFW6=R|tae?z2y&Z0oF6VeOL9=>oo z)lMth9p1mXNKag0;=FZW0&qV3|cXj$K#V?f}nr zVKwf)QuDGU>H|vPY+Ec7Es`|0w&aMmuYrM4Zf3IM1h0A7aLk||LAN^~7IZ-bSul{0 z?-O!Ck9*AERhR|{xI53PbZA0EHb7huvjv}j2S-o(FRU`Q|I^Icxc^n2%%&=Hw*Oqa zZ)Su3*V_Zs3v<@7tiAY zDn`JXc0!;<3nfef+N5U>-j&?P%e@JOeanX9t9X$Ojx5N8p3@UzHeuRhr8kc4xQe(( zO$)FpzFM?lieBIrA$DPAQQLcbsCSlr?#9X_xOv%dj3Hp^|3SqI@++j@(Fywv*i^g2 z!P@0jmtkHg6T94$feQ$dC(Rwe_E0mLY16a&YjT8o*1BbGq2?+t+@Lmd z8$@MZ31RLcf>-f2Ic6WG6@Cu}>#f4^8(1BIv+uNe0LHMJ_gcl{H?g`d*85=b!H2Eh zELQb;O{^b*#qI~K;_)(=DmTvM{}_*~uNeOj2EYK|JaB;7&_UrL_a}ToC;a@X485|c zt4 zDP*y13IUJ7EX8q4h}W|?yL2QSlLZVhIquJ*UyS0f~;@j>9@XOUqc@o2~nSljFH&u<(x6dupc?#@m&Nq?p(AY>{~SkawUDjbL^M3qvgRE4Sum+7`M-m!Pr$^63h zB;6>S(kpk4$&r5m{ufJ}IPouV0G_>@ZB!7}jA!g;Kfmw2?{m4l95~Q^efit)zVA4{ zo597_g29*Y%3q+P4n>(0&Auo?cI-wjeBG>(dy$tnqh{WUT6sHaBeSlN`FSVm@(e z?>g<$E>=-WlVc1k*eqFKvpc}BhG}>?E~mx)z3&TJ!9Y3T(F!KO0RC0A}1L? zV)Uz5N)Wv&W>y(jQ#C0I-JS1@c`+(O-4aaIqDWm6$Gmy)ZNs|-uly9cV@Pi8h!%Bs z9Oay%W9JP0;41gDK^v!@YO2;TI&ses%r=f2$L@gx&^+=Ja-0A|+nTU+AM+7b6Nbn9 zfEDBtvMXopDnqC7qG*?dfTjsAo=-Li(?Z%!1wyfqzjiL%nK#4 zV3lAJlERBI_?>yP4opZn*(*gq=Y{Q4QJ(w5s>Bcq#QQM|$01JSRE8IG_I&f+i==lR z%Pf7HIN237Oa2$5B#KKYpR{S1*TqyVTtxLPBuE@`$!e#c>3T52(v5EP;D_ zB`D%0;}knB{$zXFJ2T%ugu66pR?2vYp~-_wzWCMBHnT zhX4nHh6+K*1twz1!JU}m8FC{70{^6-L{Pk858J>6$=OVW4~i)kbs>%3in8dFteTJl z$|-mX0s@JqP$A%-U`C1=Ng17i2e*J7l)4db+_uz*L*|;0b*3{?Xn3=VAZF zCmO}Qrf5R;g<+d^1q1EWL*2A!pxo~nn-Ro?atD%(SZuR=7c92Y>mBg{{P)&%$3ia4 z3~v6c9FGlm-UpLzscB^fh8Ut@I&*p3)1&Jkln^9X&{Bj8PFls!G=A$p7ld=&SYe8e zad*{p7EA|N`2+%BLi@4JLmcat2?=HzAWH2GAxtYQ-N{598>%zQSPSL?Zkqwib^m@| q(mG>b7>UUbq4OOd`Dh(oa=R#S1J`Y|ko$K4uj>YX1vjptwcsC~%U!ns literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27295832409132b47d2bf16d8f8340918f5c6aff GIT binary patch literal 4596 zcmZ`+&2!tv6$d~NqDV^eSCiPW<25~w#6*zmPG>r!+MagYIC1OB8C$t1N-2=Lq!57s zx(iB{N?$rT^wM*$_R;@9d+(otnVx#;y&tJ#H~qa`KqM6fHkP}K_ujtudta+$VWDo} z`O9zq*1hnSW&NEN)6YdLeuh_dZOh^owrA_(gsR z6icVde;0aQF1X5buAFinNqlcg>O1@@XOMb^+fS@^>mP*vM!S-`4?~sZwMS_dCUFqu zwI|}YBN6vRuv@jPI>RHLirz{u8Kz+*R+g8S_2zZ9xf?2m|F_dH^_9p*X_h3B@_RuP z33-?KJ`0#xuxvNT80gqY3B|I6$x+NS&sutD7Fim8p4271;x}u**!NPby z*$d;rG4m=(6LHXu1WRS|rRafAAIC$9MO27~9Y!ka%VfxQILsbpVWif2kh?=t4idS? z4#I4g#o|CnmIl4OV4x4nf|v)AtF>t@aom2$VGqoVL?D@vGLdX3lnMrd9qfw2Mq>e> ziWArttBerhGqQk%VmsCgCf{kJ>WOPVs?39S@tQzUZXiUB^l@vO% zY4~^|RJ@!4nK0hND46QWFoile*6;1C8FvQzNyrI5!TL!QB?oluK_FxNt{=-~Y#790 zU#P4z4EBUvXD~?v#QKO4w(R$owXOXG+P7v59f(-SAk(O+-EcVNNI017LQbS1r+`}P z^#^_uM~BC*HL?m%CTf)dG75n`5r;>ju2szBq0yCsw;-LwrzR0kdjiHk&~f&Wc3Yr~ z|0b-d4C8D?(~~56S|2@r{OIvIyBEaTKuV2KCZ;^YREXr6hQ9E7upfkx4%0AZty!sr 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 WU)v@2E8Ah8v9gYXzcBuMsrEZf;v?Mv literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91002cce789125d8bd80ee87a2699ae4c49d96d8 GIT binary patch literal 7298 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bdd9da2e80e7ddc773b7d393e1743f738c51a258 GIT binary patch literal 1594 zcmZ8hOK%%D5GJ_~tyYg1X==kg6fDq#b+C=*6c|Mi!097J;1qGwpu(c+N~EooSIZ5_ zm0@Fb>El-v0pw$UK`;F!1d1Md@?TKfxI@Y=obF84`z3wH%Mh87?qGzSfM3Lr~7&M@0ynJ%- z_}R-t<5e;@q2#)f#mH{nJeK$2+lNn4APm=NhGodmA*#^=WJWFs^ES}}Ux2RXA1v{n z^uScQD8vM+%rk9*T%2;*!_tEC3z8PO<#+pg$qU7$N}g9rrO9J4s;0cqD)}tapI5`= z(@ZM8{iPHWKGMmI7qjGPHcV8e`F5F(PSRtpk}@lI2U(%HgyeQBo#kp5GEzI`ndu&L zJpf^#Mq@tZHmZVBp$Pl<9+qujjbEmE{8rus)Yi)7y#tI!6TBdfdNsPh7kG}eKM58g z!>~3Mk<*ent}W=~d>m7F_C+z{Qqz>$5L64`j6G7xtsZfXT&Y~4R-|Q}x2)kn3k&KRC>)yif_1=C zZh-t2j<$Dfy&aCf0ki6v3#>X{AVzBRGxW}D?+5%n)_6h|4%;M{<2jjoKygjv`!!+y z36USLU`~pz_T?4}YqEhrYUqG9te4m1+DEu()TH({phj~KY?GR(L`OBmV9`kcvd3VM zSPUL5-`YgFIf-Y;NiaA+5!mfs%Pn@t%5$&wpsH)U38%e(f}J3vfiFKWkE+9M|ZI?XHoiIhUhcdeog`}c1;$9Op}OsKTXieuAB z)hNpbIoB|ks^`0AGI(IZf@?@-)nRrXZ#NhCv%O_qz6V?C0TACOIJ}C9|7P89laTm0 zCWOEMU#mhH$VatjXkI`WQ<@gWd*U6_I$Hv}$C(}jpu zbu$N{J}cq+(&A*ok+5^LO5TIS-2cM0xpRJNHe4cZK%$SQf>k+xX#ao8Vj02T#=dRb LChOkaa6SGPo%fdl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58b509ce1e899d421a6b7c8dec3c1ad6699ff5e5 GIT binary patch literal 3289 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 None: + return self.log(VERBOSE, msg, *args, **kwargs) + + +def getLogger(name: str) -> VerboseLogger: + """logging.getLogger, but ensures our VerboseLogger class is returned""" + return cast(VerboseLogger, logging.getLogger(name)) + + +def init_logging() -> None: + """Register our VerboseLogger and VERBOSE log level. + + Should be called before any calls to getLogger(), + i.e. in pip._internal.__init__ + """ + logging.setLoggerClass(VerboseLogger) + logging.addLevelName(VERBOSE, "VERBOSE") diff --git a/venv/Lib/site-packages/pip/_internal/utils/appdirs.py b/venv/Lib/site-packages/pip/_internal/utils/appdirs.py new file mode 100644 index 000000000..16933bf8a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/appdirs.py @@ -0,0 +1,52 @@ +""" +This code wraps the vendored appdirs module to so the return values are +compatible for the current pip code base. + +The intention is to rewrite current usages gradually, keeping the tests pass, +and eventually drop this after all usages are changed. +""" + +import os +import sys +from typing import List + +from pip._vendor import platformdirs as _appdirs + + +def user_cache_dir(appname: str) -> str: + return _appdirs.user_cache_dir(appname, appauthor=False) + + +def _macos_user_config_dir(appname: str, roaming: bool = True) -> str: + # Use ~/Application Support/pip, if the directory exists. + path = _appdirs.user_data_dir(appname, appauthor=False, roaming=roaming) + if os.path.isdir(path): + return path + + # Use a Linux-like ~/.config/pip, by default. + linux_like_path = "~/.config/" + if appname: + linux_like_path = os.path.join(linux_like_path, appname) + + return os.path.expanduser(linux_like_path) + + +def user_config_dir(appname: str, roaming: bool = True) -> str: + if sys.platform == "darwin": + return _macos_user_config_dir(appname, roaming) + + return _appdirs.user_config_dir(appname, appauthor=False, roaming=roaming) + + +# for the discussion regarding site_config_dir locations +# see +def site_config_dirs(appname: str) -> List[str]: + if sys.platform == "darwin": + return [_appdirs.site_data_dir(appname, appauthor=False, multipath=True)] + + dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) + if sys.platform == "win32": + return [dirval] + + # Unix-y system. Look in /etc as well. + return dirval.split(os.pathsep) + ["/etc"] diff --git a/venv/Lib/site-packages/pip/_internal/utils/compat.py b/venv/Lib/site-packages/pip/_internal/utils/compat.py new file mode 100644 index 000000000..3f4d300ce --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/compat.py @@ -0,0 +1,63 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" + +import logging +import os +import sys + +__all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] + + +logger = logging.getLogger(__name__) + + +def has_tls() -> bool: + try: + import _ssl # noqa: F401 # ignore unused + + return True + except ImportError: + pass + + from pip._vendor.urllib3.util import IS_PYOPENSSL + + return IS_PYOPENSSL + + +def get_path_uid(path: str) -> int: + """ + Return path's uid. + + Does not follow symlinks: + https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in compat due to differences on AIX and + Jython, that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, "O_NOFOLLOW"): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError(f"{path} is a symlink; Will not return uid for symlinks") + return file_uid + + +# packages in the stdlib that may have installation metadata, but should not be +# considered 'installed'. this theoretically could be determined based on +# dist.location (py27:`sysconfig.get_paths()['stdlib']`, +# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may +# make this ineffective, so hard-coding +stdlib_pkgs = {"python", "wsgiref", "argparse"} + + +# windows detection, covers cpython and ironpython +WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt") diff --git a/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py b/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py new file mode 100644 index 000000000..b6ed9a78e --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py @@ -0,0 +1,165 @@ +"""Generate and work with PEP 425 Compatibility Tags. +""" + +import re +from typing import List, Optional, Tuple + +from pip._vendor.packaging.tags import ( + PythonVersion, + Tag, + compatible_tags, + cpython_tags, + generic_tags, + interpreter_name, + interpreter_version, + mac_platforms, +) + +_osx_arch_pat = re.compile(r"(.+)_(\d+)_(\d+)_(.+)") + + +def version_info_to_nodot(version_info: Tuple[int, ...]) -> str: + # Only use up to the first two numbers. + return "".join(map(str, version_info[:2])) + + +def _mac_platforms(arch: str) -> List[str]: + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + mac_version = (int(major), int(minor)) + arches = [ + # Since we have always only checked that the platform starts + # with "macosx", for backwards-compatibility we extract the + # actual prefix provided by the user in case they provided + # something like "macosxcustom_". It may be good to remove + # this as undocumented or deprecate it in the future. + "{}_{}".format(name, arch[len("macosx_") :]) + for arch in mac_platforms(mac_version, actual_arch) + ] + else: + # arch pattern didn't match (?!) + arches = [arch] + return arches + + +def _custom_manylinux_platforms(arch: str) -> List[str]: + arches = [arch] + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch_prefix == "manylinux2014": + # manylinux1/manylinux2010 wheels run on most manylinux2014 systems + # with the exception of wheels depending on ncurses. PEP 599 states + # manylinux1/manylinux2010 wheels should be considered + # manylinux2014 wheels: + # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels + if arch_suffix in {"i686", "x86_64"}: + arches.append("manylinux2010" + arch_sep + arch_suffix) + arches.append("manylinux1" + arch_sep + arch_suffix) + elif arch_prefix == "manylinux2010": + # manylinux1 wheels run on most manylinux2010 systems with the + # exception of wheels depending on ncurses. PEP 571 states + # manylinux1 wheels should be considered manylinux2010 wheels: + # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels + arches.append("manylinux1" + arch_sep + arch_suffix) + return arches + + +def _get_custom_platforms(arch: str) -> List[str]: + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch.startswith("macosx"): + arches = _mac_platforms(arch) + elif arch_prefix in ["manylinux2014", "manylinux2010"]: + arches = _custom_manylinux_platforms(arch) + else: + arches = [arch] + return arches + + +def _expand_allowed_platforms(platforms: Optional[List[str]]) -> Optional[List[str]]: + if not platforms: + return None + + seen = set() + result = [] + + for p in platforms: + if p in seen: + continue + additions = [c for c in _get_custom_platforms(p) if c not in seen] + seen.update(additions) + result.extend(additions) + + return result + + +def _get_python_version(version: str) -> PythonVersion: + if len(version) > 1: + return int(version[0]), int(version[1:]) + else: + return (int(version[0]),) + + +def _get_custom_interpreter( + implementation: Optional[str] = None, version: Optional[str] = None +) -> str: + if implementation is None: + implementation = interpreter_name() + if version is None: + version = interpreter_version() + return f"{implementation}{version}" + + +def get_supported( + version: Optional[str] = None, + platforms: Optional[List[str]] = None, + impl: Optional[str] = None, + abis: Optional[List[str]] = None, +) -> List[Tag]: + """Return a list of supported tags for each version specified in + `versions`. + + :param version: a string version, of the form "33" or "32", + or None. The version will be assumed to support our ABI. + :param platform: specify a list of platforms you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abis: specify a list of abis you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported: List[Tag] = [] + + python_version: Optional[PythonVersion] = None + if version is not None: + python_version = _get_python_version(version) + + interpreter = _get_custom_interpreter(impl, version) + + platforms = _expand_allowed_platforms(platforms) + + is_cpython = (impl or interpreter_name()) == "cp" + if is_cpython: + supported.extend( + cpython_tags( + python_version=python_version, + abis=abis, + platforms=platforms, + ) + ) + else: + supported.extend( + generic_tags( + interpreter=interpreter, + abis=abis, + platforms=platforms, + ) + ) + supported.extend( + compatible_tags( + python_version=python_version, + interpreter=interpreter, + platforms=platforms, + ) + ) + + return supported diff --git a/venv/Lib/site-packages/pip/_internal/utils/datetime.py b/venv/Lib/site-packages/pip/_internal/utils/datetime.py new file mode 100644 index 000000000..8668b3b0e --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/datetime.py @@ -0,0 +1,11 @@ +"""For when pip wants to check the date or time. +""" + +import datetime + + +def today_is_later_than(year: int, month: int, day: int) -> bool: + today = datetime.date.today() + given = datetime.date(year, month, day) + + return today > given diff --git a/venv/Lib/site-packages/pip/_internal/utils/deprecation.py b/venv/Lib/site-packages/pip/_internal/utils/deprecation.py new file mode 100644 index 000000000..72bd6f25a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/deprecation.py @@ -0,0 +1,120 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" + +import logging +import warnings +from typing import Any, Optional, TextIO, Type, Union + +from pip._vendor.packaging.version import parse + +from pip import __version__ as current_version # NOTE: tests patch this name. + +DEPRECATION_MSG_PREFIX = "DEPRECATION: " + + +class PipDeprecationWarning(Warning): + pass + + +_original_showwarning: Any = None + + +# Warnings <-> Logging Integration +def _showwarning( + message: Union[Warning, str], + category: Type[Warning], + filename: str, + lineno: int, + file: Optional[TextIO] = None, + line: Optional[str] = None, +) -> None: + if file is not None: + if _original_showwarning is not None: + _original_showwarning(message, category, filename, lineno, file, line) + elif issubclass(category, PipDeprecationWarning): + # We use a specially named logger which will handle all of the + # deprecation messages for pip. + logger = logging.getLogger("pip._internal.deprecations") + logger.warning(message) + else: + _original_showwarning(message, category, filename, lineno, file, line) + + +def install_warning_logger() -> None: + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _original_showwarning + + if _original_showwarning is None: + _original_showwarning = warnings.showwarning + warnings.showwarning = _showwarning + + +def deprecated( + *, + reason: str, + replacement: Optional[str], + gone_in: Optional[str], + feature_flag: Optional[str] = None, + issue: Optional[int] = None, +) -> None: + """Helper to deprecate existing functionality. + + reason: + Textual reason shown to the user about why this functionality has + been deprecated. Should be a complete sentence. + replacement: + Textual suggestion shown to the user about what alternative + functionality they can use. + gone_in: + The version of pip does this functionality should get removed in. + Raises an error if pip's current version is greater than or equal to + this. + feature_flag: + Command-line flag of the form --use-feature={feature_flag} for testing + upcoming functionality. + issue: + Issue number on the tracker that would serve as a useful place for + users to find related discussion and provide feedback. + """ + + # Determine whether or not the feature is already gone in this version. + is_gone = gone_in is not None and parse(current_version) >= parse(gone_in) + + message_parts = [ + (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"), + ( + gone_in, + "pip {} will enforce this behaviour change." + if not is_gone + else "Since pip {}, this is no longer supported.", + ), + ( + replacement, + "A possible replacement is {}.", + ), + ( + feature_flag, + "You can use the flag --use-feature={} to test the upcoming behaviour." + if not is_gone + else None, + ), + ( + issue, + "Discussion can be found at https://github.com/pypa/pip/issues/{}", + ), + ] + + message = " ".join( + format_str.format(value) + for value, format_str in message_parts + if format_str is not None and value is not None + ) + + # Raise as an error if this behaviour is deprecated. + if is_gone: + raise PipDeprecationWarning(message) + + warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py b/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py new file mode 100644 index 000000000..0e8e5e160 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py @@ -0,0 +1,87 @@ +from typing import Optional + +from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + + +def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str: + """Convert a DirectUrl to a pip requirement string.""" + direct_url.validate() # if invalid, this is a pip bug + requirement = name + " @ " + fragments = [] + if isinstance(direct_url.info, VcsInfo): + requirement += "{}+{}@{}".format( + direct_url.info.vcs, direct_url.url, direct_url.info.commit_id + ) + elif isinstance(direct_url.info, ArchiveInfo): + requirement += direct_url.url + if direct_url.info.hash: + fragments.append(direct_url.info.hash) + else: + assert isinstance(direct_url.info, DirInfo) + requirement += direct_url.url + if direct_url.subdirectory: + fragments.append("subdirectory=" + direct_url.subdirectory) + if fragments: + requirement += "#" + "&".join(fragments) + return requirement + + +def direct_url_for_editable(source_dir: str) -> DirectUrl: + return DirectUrl( + url=path_to_url(source_dir), + info=DirInfo(editable=True), + ) + + +def direct_url_from_link( + link: Link, source_dir: Optional[str] = None, link_is_in_wheel_cache: bool = False +) -> DirectUrl: + if link.is_vcs: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend + url, requested_revision, _ = vcs_backend.get_url_rev_and_auth( + link.url_without_fragment + ) + # For VCS links, we need to find out and add commit_id. + if link_is_in_wheel_cache: + # If the requested VCS link corresponds to a cached + # wheel, it means the requested revision was an + # immutable commit hash, otherwise it would not have + # been cached. In that case we don't have a source_dir + # with the VCS checkout. + assert requested_revision + commit_id = requested_revision + else: + # If the wheel was not in cache, it means we have + # had to checkout from VCS to build and we have a source_dir + # which we can inspect to find out the commit id. + assert source_dir + commit_id = vcs_backend.get_revision(source_dir) + return DirectUrl( + url=url, + info=VcsInfo( + vcs=vcs_backend.name, + commit_id=commit_id, + requested_revision=requested_revision, + ), + subdirectory=link.subdirectory_fragment, + ) + elif link.is_existing_dir(): + return DirectUrl( + url=link.url_without_fragment, + info=DirInfo(), + subdirectory=link.subdirectory_fragment, + ) + else: + hash = None + hash_name = link.hash_name + if hash_name: + hash = f"{hash_name}={link.hash}" + return DirectUrl( + url=link.url_without_fragment, + info=ArchiveInfo(hash=hash), + subdirectory=link.subdirectory_fragment, + ) diff --git a/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py b/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py new file mode 100644 index 000000000..e4aa5b827 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py @@ -0,0 +1,42 @@ +from distutils.errors import DistutilsArgError +from distutils.fancy_getopt import FancyGetopt +from typing import Dict, List + +_options = [ + ("exec-prefix=", None, ""), + ("home=", None, ""), + ("install-base=", None, ""), + ("install-data=", None, ""), + ("install-headers=", None, ""), + ("install-lib=", None, ""), + ("install-platlib=", None, ""), + ("install-purelib=", None, ""), + ("install-scripts=", None, ""), + ("prefix=", None, ""), + ("root=", None, ""), + ("user", None, ""), +] + + +# typeshed doesn't permit Tuple[str, None, str], see python/typeshed#3469. +_distutils_getopt = FancyGetopt(_options) # type: ignore + + +def parse_distutils_args(args: List[str]) -> Dict[str, str]: + """Parse provided arguments, returning an object that has the + matched arguments. + + Any unknown arguments are ignored. + """ + result = {} + for arg in args: + try: + _, match = _distutils_getopt.getopt(args=[arg]) + except DistutilsArgError: + # We don't care about any other options, which here may be + # considered unrecognized since our option list is not + # exhaustive. + pass + else: + result.update(match.__dict__) + return result diff --git a/venv/Lib/site-packages/pip/_internal/utils/egg_link.py b/venv/Lib/site-packages/pip/_internal/utils/egg_link.py new file mode 100644 index 000000000..9e0da8d2d --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/egg_link.py @@ -0,0 +1,75 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import os +import re +import sys +from typing import Optional + +from pip._internal.locations import site_packages, user_site +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) + +__all__ = [ + "egg_link_path_from_sys_path", + "egg_link_path_from_location", +] + + +def _egg_link_name(raw_name: str) -> str: + """ + Convert a Name metadata value to a .egg-link name, by applying + the same substitution as pkg_resources's safe_name function. + Note: we cannot use canonicalize_name because it has a different logic. + """ + return re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link" + + +def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: + """ + Look for a .egg-link file for project name, by walking sys.path. + """ + egg_link_name = _egg_link_name(raw_name) + for path_item in sys.path: + egg_link = os.path.join(path_item, egg_link_name) + if os.path.isfile(egg_link): + return egg_link + return None + + +def egg_link_path_from_location(raw_name: str) -> Optional[str]: + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE + (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 + locations. + + This method will just return the first one found. + """ + sites = [] + if running_under_virtualenv(): + sites.append(site_packages) + if not virtualenv_no_global() and user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + egg_link_name = _egg_link_name(raw_name) + for site in sites: + egglink = os.path.join(site, egg_link_name) + if os.path.isfile(egglink): + return egglink + return None diff --git a/venv/Lib/site-packages/pip/_internal/utils/encoding.py b/venv/Lib/site-packages/pip/_internal/utils/encoding.py new file mode 100644 index 000000000..1c73f6c9a --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/encoding.py @@ -0,0 +1,36 @@ +import codecs +import locale +import re +import sys +from typing import List, Tuple + +BOMS: List[Tuple[bytes, str]] = [ + (codecs.BOM_UTF8, "utf-8"), + (codecs.BOM_UTF16, "utf-16"), + (codecs.BOM_UTF16_BE, "utf-16-be"), + (codecs.BOM_UTF16_LE, "utf-16-le"), + (codecs.BOM_UTF32, "utf-32"), + (codecs.BOM_UTF32_BE, "utf-32-be"), + (codecs.BOM_UTF32_LE, "utf-32-le"), +] + +ENCODING_RE = re.compile(br"coding[:=]\s*([-\w.]+)") + + +def auto_decode(data: bytes) -> str: + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom) :].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b"\n")[:2]: + if line[0:1] == b"#" and ENCODING_RE.search(line): + result = ENCODING_RE.search(line) + assert result is not None + encoding = result.groups()[0].decode("ascii") + return data.decode(encoding) + return data.decode( + locale.getpreferredencoding(False) or sys.getdefaultencoding(), + ) diff --git a/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py b/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py new file mode 100644 index 000000000..1504a1291 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py @@ -0,0 +1,27 @@ +import sys +from typing import List, Optional + +from pip._internal.cli.main import main + + +def _wrapper(args: Optional[List[str]] = None) -> int: + """Central wrapper for all old entrypoints. + + Historically pip has had several entrypoints defined. Because of issues + arising from PATH, sys.path, multiple Pythons, their interactions, and most + of them having a pip installed, users suffer every time an entrypoint gets + moved. + + To alleviate this pain, and provide a mechanism for warning users and + directing them to an appropriate place for help, we now define all of + our old entrypoints as wrappers for the current one. + """ + sys.stderr.write( + "WARNING: pip is being invoked by an old script wrapper. This will " + "fail in a future version of pip.\n" + "Please see https://github.com/pypa/pip/issues/5599 for advice on " + "fixing the underlying issue.\n" + "To avoid this problem you can invoke Python with '-m pip' instead of " + "running pip directly.\n" + ) + return main(args) diff --git a/venv/Lib/site-packages/pip/_internal/utils/filesystem.py b/venv/Lib/site-packages/pip/_internal/utils/filesystem.py new file mode 100644 index 000000000..b7e6191ab --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/filesystem.py @@ -0,0 +1,182 @@ +import fnmatch +import os +import os.path +import random +import shutil +import stat +import sys +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, BinaryIO, Iterator, List, Union, cast + +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip._internal.utils.compat import get_path_uid +from pip._internal.utils.misc import format_size + + +def check_path_owner(path: str) -> bool: + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if sys.platform == "win32" or not hasattr(os, "geteuid"): + return True + + assert os.path.isabs(path) + + previous = None + while path != previous: + if os.path.lexists(path): + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) + else: + previous, path = path, os.path.dirname(path) + return False # assume we don't own the path + + +def copy2_fixed(src: str, dest: str) -> None: + """Wrap shutil.copy2() but map errors copying socket files to + SpecialFileError as expected. + + See also https://bugs.python.org/issue37700. + """ + try: + shutil.copy2(src, dest) + except OSError: + for f in [src, dest]: + try: + is_socket_file = is_socket(f) + except OSError: + # An error has already occurred. Another error here is not + # a problem and we can ignore it. + pass + else: + if is_socket_file: + raise shutil.SpecialFileError(f"`{f}` is a socket") + + raise + + +def is_socket(path: str) -> bool: + return stat.S_ISSOCK(os.lstat(path).st_mode) + + +@contextmanager +def adjacent_tmp_file(path: str, **kwargs: Any) -> Iterator[BinaryIO]: + """Return a file-like object pointing to a tmp file next to path. + + The file is created securely and is ensured to be written to disk + after the context reaches its end. + + kwargs will be passed to tempfile.NamedTemporaryFile to control + the way the temporary file will be opened. + """ + with NamedTemporaryFile( + delete=False, + dir=os.path.dirname(path), + prefix=os.path.basename(path), + suffix=".tmp", + **kwargs, + ) as f: + result = cast(BinaryIO, f) + try: + yield result + finally: + result.flush() + os.fsync(result.fileno()) + + +# Tenacity raises RetryError by default, explicitly raise the original exception +_replace_retry = retry(reraise=True, stop=stop_after_delay(1), wait=wait_fixed(0.25)) + +replace = _replace_retry(os.replace) + + +# test_writable_dir and _test_writable_dir_win are copied from Flit, +# with the author's agreement to also place them under pip's license. +def test_writable_dir(path: str) -> bool: + """Check if a directory is writable. + + Uses os.access() on POSIX, tries creating files on Windows. + """ + # If the directory doesn't exist, find the closest parent that does. + while not os.path.isdir(path): + parent = os.path.dirname(path) + if parent == path: + break # Should never get here, but infinite loops are bad + path = parent + + if os.name == "posix": + return os.access(path, os.W_OK) + + return _test_writable_dir_win(path) + + +def _test_writable_dir_win(path: str) -> bool: + # os.access doesn't work on Windows: http://bugs.python.org/issue2528 + # and we can't use tempfile: http://bugs.python.org/issue22107 + basename = "accesstest_deleteme_fishfingers_custard_" + alphabet = "abcdefghijklmnopqrstuvwxyz0123456789" + for _ in range(10): + name = basename + "".join(random.choice(alphabet) for _ in range(6)) + file = os.path.join(path, name) + try: + fd = os.open(file, os.O_RDWR | os.O_CREAT | os.O_EXCL) + except FileExistsError: + pass + except PermissionError: + # This could be because there's a directory with the same name. + # But it's highly unlikely there's a directory called that, + # so we'll assume it's because the parent dir is not writable. + # This could as well be because the parent dir is not readable, + # due to non-privileged user access. + return False + else: + os.close(fd) + os.unlink(file) + return True + + # This should never be reached + raise OSError("Unexpected condition testing for writable directory") + + +def find_files(path: str, pattern: str) -> List[str]: + """Returns a list of absolute paths of files beneath path, recursively, + with filenames which match the UNIX-style shell glob pattern.""" + result: List[str] = [] + for root, _, files in os.walk(path): + matches = fnmatch.filter(files, pattern) + result.extend(os.path.join(root, f) for f in matches) + return result + + +def file_size(path: str) -> Union[int, float]: + # If it's a symlink, return 0. + if os.path.islink(path): + return 0 + return os.path.getsize(path) + + +def format_file_size(path: str) -> str: + return format_size(file_size(path)) + + +def directory_size(path: str) -> Union[int, float]: + size = 0.0 + for root, _dirs, files in os.walk(path): + for filename in files: + file_path = os.path.join(root, filename) + size += file_size(file_path) + return size + + +def format_directory_size(path: str) -> str: + return format_size(directory_size(path)) diff --git a/venv/Lib/site-packages/pip/_internal/utils/filetypes.py b/venv/Lib/site-packages/pip/_internal/utils/filetypes.py new file mode 100644 index 000000000..594857017 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/filetypes.py @@ -0,0 +1,27 @@ +"""Filetype information. +""" + +from typing import Tuple + +from pip._internal.utils.misc import splitext + +WHEEL_EXTENSION = ".whl" +BZ2_EXTENSIONS: Tuple[str, ...] = (".tar.bz2", ".tbz") +XZ_EXTENSIONS: Tuple[str, ...] = ( + ".tar.xz", + ".txz", + ".tlz", + ".tar.lz", + ".tar.lzma", +) +ZIP_EXTENSIONS: Tuple[str, ...] = (".zip", WHEEL_EXTENSION) +TAR_EXTENSIONS: Tuple[str, ...] = (".tar.gz", ".tgz", ".tar") +ARCHIVE_EXTENSIONS = ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS + + +def is_archive_file(name: str) -> bool: + """Return True if `name` is a considered as an archive file.""" + ext = splitext(name)[1].lower() + if ext in ARCHIVE_EXTENSIONS: + return True + return False diff --git a/venv/Lib/site-packages/pip/_internal/utils/glibc.py b/venv/Lib/site-packages/pip/_internal/utils/glibc.py new file mode 100644 index 000000000..7bd3c2068 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/glibc.py @@ -0,0 +1,88 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import os +import sys +from typing import Optional, Tuple + + +def glibc_version_string() -> Optional[str]: + "Returns glibc version string, or None if not using glibc." + return glibc_version_string_confstr() or glibc_version_string_ctypes() + + +def glibc_version_string_confstr() -> Optional[str]: + "Primary implementation of glibc_version_string using os.confstr." + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module: + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 + if sys.platform == "win32": + return None + try: + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": + _, version = os.confstr("CS_GNU_LIBC_VERSION").split() + except (AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def glibc_version_string_ctypes() -> Optional[str]: + "Fallback implementation of glibc_version_string using ctypes." + + try: + import ctypes + except ImportError: + return None + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver() -> Tuple[str, str]: + """Try to determine the glibc version + + Returns a tuple of strings (lib, version) which default to empty strings + in case the lookup fails. + """ + glibc_version = glibc_version_string() + if glibc_version is None: + return ("", "") + else: + return ("glibc", glibc_version) diff --git a/venv/Lib/site-packages/pip/_internal/utils/hashes.py b/venv/Lib/site-packages/pip/_internal/utils/hashes.py new file mode 100644 index 000000000..82eb035a0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/hashes.py @@ -0,0 +1,144 @@ +import hashlib +from typing import TYPE_CHECKING, BinaryIO, Dict, Iterator, List + +from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError +from pip._internal.utils.misc import read_chunks + +if TYPE_CHECKING: + from hashlib import _Hash + + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + +# The recommended hash algo of the moment. Change this whenever the state of +# the art changes; it won't hurt backward compatibility. +FAVORITE_HASH = "sha256" + + +# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` +# Currently, those are the ones at least as collision-resistant as sha256. +STRONG_HASHES = ["sha256", "sha384", "sha512"] + + +class Hashes: + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + + def __init__(self, hashes: Dict[str, List[str]] = None) -> None: + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + allowed = {} + if hashes is not None: + for alg, keys in hashes.items(): + # Make sure values are always sorted (to ease equality checks) + allowed[alg] = sorted(keys) + self._allowed = allowed + + def __and__(self, other: "Hashes") -> "Hashes": + if not isinstance(other, Hashes): + return NotImplemented + + # If either of the Hashes object is entirely empty (i.e. no hash + # specified at all), all hashes from the other object are allowed. + if not other: + return self + if not self: + return other + + # Otherwise only hashes that present in both objects are allowed. + new = {} + for alg, values in other._allowed.items(): + if alg not in self._allowed: + continue + new[alg] = [v for v in values if v in self._allowed[alg]] + return Hashes(new) + + @property + def digest_count(self) -> int: + return sum(len(digests) for digests in self._allowed.values()) + + def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool: + """Return whether the given hex digest is allowed.""" + return hex_digest in self._allowed.get(hash_name, []) + + def check_against_chunks(self, chunks: Iterator[bytes]) -> None: + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in self._allowed.keys(): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError(f"Unknown hash name: {hash_name}") + + for chunk in chunks: + for hash in gots.values(): + hash.update(chunk) + + for hash_name, got in gots.items(): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file: BinaryIO) -> None: + """Check good hashes against a file-like object + + Raise HashMismatch if none match. + + """ + return self.check_against_chunks(read_chunks(file)) + + def check_against_path(self, path: str) -> None: + with open(path, "rb") as file: + return self.check_against_file(file) + + def __bool__(self) -> bool: + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Hashes): + return NotImplemented + return self._allowed == other._allowed + + def __hash__(self) -> int: + return hash( + ",".join( + sorted( + ":".join((alg, digest)) + for alg, digest_list in self._allowed.items() + for digest in digest_list + ) + ) + ) + + +class MissingHashes(Hashes): + """A workalike for Hashes used when we're missing a hash for a requirement + + It computes the actual hash of the requirement and raises a HashMissing + exception showing it to the user. + + """ + + def __init__(self) -> None: + """Don't offer the ``hashes`` kwarg.""" + # Pass our favorite hash in to generate a "gotten hash". With the + # empty list, it will never match, so an error will always raise. + super().__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py b/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py new file mode 100644 index 000000000..276aa79bb --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py @@ -0,0 +1,35 @@ +"""A helper module that injects SecureTransport, on import. + +The import should be done as early as possible, to ensure all requests and +sessions (or whatever) are created after injecting SecureTransport. + +Note that we only do the injection on macOS, when the linked OpenSSL is too +old to handle TLSv1.2. +""" + +import sys + + +def inject_securetransport() -> None: + # Only relevant on macOS + if sys.platform != "darwin": + return + + try: + import ssl + except ImportError: + return + + # Checks for OpenSSL 1.0.1 + if ssl.OPENSSL_VERSION_NUMBER >= 0x1000100F: + return + + try: + from pip._vendor.urllib3.contrib import securetransport + except (ImportError, OSError): + return + + securetransport.inject_into_urllib3() + + +inject_securetransport() diff --git a/venv/Lib/site-packages/pip/_internal/utils/logging.py b/venv/Lib/site-packages/pip/_internal/utils/logging.py new file mode 100644 index 000000000..6e001c5d6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/logging.py @@ -0,0 +1,343 @@ +import contextlib +import errno +import logging +import logging.handlers +import os +import sys +import threading +from dataclasses import dataclass +from logging import Filter +from typing import IO, Any, ClassVar, Iterator, List, Optional, TextIO, Type + +from pip._vendor.rich.console import ( + Console, + ConsoleOptions, + ConsoleRenderable, + RenderResult, +) +from pip._vendor.rich.highlighter import NullHighlighter +from pip._vendor.rich.logging import RichHandler +from pip._vendor.rich.segment import Segment +from pip._vendor.rich.style import Style + +from pip._internal.exceptions import DiagnosticPipError +from pip._internal.utils._log import VERBOSE, getLogger +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX +from pip._internal.utils.misc import ensure_dir + +_log_state = threading.local() +subprocess_logger = getLogger("pip.subprocessor") + + +class BrokenStdoutLoggingError(Exception): + """ + Raised if BrokenPipeError occurs for the stdout stream while logging. + """ + + +def _is_broken_pipe_error(exc_class: Type[BaseException], exc: BaseException) -> bool: + if exc_class is BrokenPipeError: + return True + + # On Windows, a broken pipe can show up as EINVAL rather than EPIPE: + # https://bugs.python.org/issue19612 + # https://bugs.python.org/issue30418 + if not WINDOWS: + return False + + return isinstance(exc, OSError) and exc.errno in (errno.EINVAL, errno.EPIPE) + + +@contextlib.contextmanager +def indent_log(num: int = 2) -> Iterator[None]: + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + # For thread-safety + _log_state.indentation = get_indentation() + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation() -> int: + return getattr(_log_state, "indentation", 0) + + +class IndentingFormatter(logging.Formatter): + default_time_format = "%Y-%m-%dT%H:%M:%S" + + def __init__( + self, + *args: Any, + add_timestamp: bool = False, + **kwargs: Any, + ) -> None: + """ + A logging.Formatter that obeys the indent_log() context manager. + + :param add_timestamp: A bool indicating output lines should be prefixed + with their record's timestamp. + """ + self.add_timestamp = add_timestamp + super().__init__(*args, **kwargs) + + def get_message_start(self, formatted: str, levelno: int) -> str: + """ + Return the start of the formatted log message (not counting the + prefix to add to each line). + """ + if levelno < logging.WARNING: + return "" + if formatted.startswith(DEPRECATION_MSG_PREFIX): + # Then the message already has a prefix. We don't want it to + # look like "WARNING: DEPRECATION: ...." + return "" + if levelno < logging.ERROR: + return "WARNING: " + + return "ERROR: " + + def format(self, record: logging.LogRecord) -> str: + """ + Calls the standard formatter, but will indent all of the log message + lines by our current indentation level. + """ + formatted = super().format(record) + message_start = self.get_message_start(formatted, record.levelno) + formatted = message_start + formatted + + prefix = "" + if self.add_timestamp: + prefix = f"{self.formatTime(record)} " + prefix += " " * get_indentation() + formatted = "".join([prefix + line for line in formatted.splitlines(True)]) + return formatted + + +@dataclass +class IndentedRenderable: + renderable: ConsoleRenderable + indent: int + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + segments = console.render(self.renderable, options) + lines = Segment.split_lines(segments) + for line in lines: + yield Segment(" " * self.indent) + yield from line + yield Segment("\n") + + +class RichPipStreamHandler(RichHandler): + KEYWORDS: ClassVar[Optional[List[str]]] = [] + + def __init__(self, stream: Optional[TextIO], no_color: bool) -> None: + super().__init__( + console=Console(file=stream, no_color=no_color, soft_wrap=True), + show_time=False, + show_level=False, + show_path=False, + highlighter=NullHighlighter(), + ) + + # Our custom override on Rich's logger, to make things work as we need them to. + def emit(self, record: logging.LogRecord) -> None: + style: Optional[Style] = None + + # If we are given a diagnostic error to present, present it with indentation. + if record.msg == "[present-diagnostic] %s" and len(record.args) == 1: + diagnostic_error: DiagnosticPipError = record.args[0] # type: ignore[index] + assert isinstance(diagnostic_error, DiagnosticPipError) + + renderable: ConsoleRenderable = IndentedRenderable( + diagnostic_error, indent=get_indentation() + ) + else: + message = self.format(record) + renderable = self.render_message(record, message) + if record.levelno is not None: + if record.levelno >= logging.ERROR: + style = Style(color="red") + elif record.levelno >= logging.WARNING: + style = Style(color="yellow") + + try: + self.console.print(renderable, overflow="ignore", crop=False, style=style) + except Exception: + self.handleError(record) + + def handleError(self, record: logging.LogRecord) -> None: + """Called when logging is unable to log some output.""" + + exc_class, exc = sys.exc_info()[:2] + # If a broken pipe occurred while calling write() or flush() on the + # stdout stream in logging's Handler.emit(), then raise our special + # exception so we can handle it in main() instead of logging the + # broken pipe error and continuing. + if ( + exc_class + and exc + and self.console.file is sys.stdout + and _is_broken_pipe_error(exc_class, exc) + ): + raise BrokenStdoutLoggingError() + + return super().handleError(record) + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + def _open(self) -> IO[Any]: + ensure_dir(os.path.dirname(self.baseFilename)) + return super()._open() + + +class MaxLevelFilter(Filter): + def __init__(self, level: int) -> None: + self.level = level + + def filter(self, record: logging.LogRecord) -> bool: + return record.levelno < self.level + + +class ExcludeLoggerFilter(Filter): + + """ + A logging Filter that excludes records from a logger (or its children). + """ + + def filter(self, record: logging.LogRecord) -> bool: + # The base Filter class allows only records from a logger (or its + # children). + return not super().filter(record) + + +def setup_logging(verbosity: int, no_color: bool, user_log_file: Optional[str]) -> int: + """Configures and sets up all of the logging + + Returns the requested logging level, as its integer value. + """ + + # Determine the level to be logging at. + if verbosity >= 2: + level_number = logging.DEBUG + elif verbosity == 1: + level_number = VERBOSE + elif verbosity == -1: + level_number = logging.WARNING + elif verbosity == -2: + level_number = logging.ERROR + elif verbosity <= -3: + level_number = logging.CRITICAL + else: + level_number = logging.INFO + + level = logging.getLevelName(level_number) + + # The "root" logger should match the "console" level *unless* we also need + # to log to a user log file. + include_user_log = user_log_file is not None + if include_user_log: + additional_log_file = user_log_file + root_level = "DEBUG" + else: + additional_log_file = "/dev/null" + root_level = level + + # Disable any logging besides WARNING unless we have DEBUG level logging + # enabled for vendored libraries. + vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" + + # Shorthands for clarity + log_streams = { + "stdout": "ext://sys.stdout", + "stderr": "ext://sys.stderr", + } + handler_classes = { + "stream": "pip._internal.utils.logging.RichPipStreamHandler", + "file": "pip._internal.utils.logging.BetterRotatingFileHandler", + } + handlers = ["console", "console_errors", "console_subprocess"] + ( + ["user_log"] if include_user_log else [] + ) + + logging.config.dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip._internal.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + "restrict_to_subprocess": { + "()": "logging.Filter", + "name": subprocess_logger.name, + }, + "exclude_subprocess": { + "()": "pip._internal.utils.logging.ExcludeLoggerFilter", + "name": subprocess_logger.name, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + "indent_with_timestamp": { + "()": IndentingFormatter, + "format": "%(message)s", + "add_timestamp": True, + }, + }, + "handlers": { + "console": { + "level": level, + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stdout"], + "filters": ["exclude_subprocess", "exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["exclude_subprocess"], + "formatter": "indent", + }, + # A handler responsible for logging to the console messages + # from the "subprocessor" logger. + "console_subprocess": { + "level": level, + "class": handler_classes["stream"], + "stream": log_streams["stderr"], + "no_color": no_color, + "filters": ["restrict_to_subprocess"], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": handler_classes["file"], + "filename": additional_log_file, + "encoding": "utf-8", + "delay": True, + "formatter": "indent_with_timestamp", + }, + }, + "root": { + "level": root_level, + "handlers": handlers, + }, + "loggers": {"pip._vendor": {"level": vendored_log_level}}, + } + ) + + return level_number diff --git a/venv/Lib/site-packages/pip/_internal/utils/misc.py b/venv/Lib/site-packages/pip/_internal/utils/misc.py new file mode 100644 index 000000000..b07e56f9d --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/misc.py @@ -0,0 +1,629 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import contextlib +import errno +import getpass +import hashlib +import io +import logging +import os +import posixpath +import shutil +import stat +import sys +import urllib.parse +from io import StringIO +from itertools import filterfalse, tee, zip_longest +from types import TracebackType +from typing import ( + Any, + BinaryIO, + Callable, + ContextManager, + Iterable, + Iterator, + List, + Optional, + TextIO, + Tuple, + Type, + TypeVar, + cast, +) + +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip import __version__ +from pip._internal.exceptions import CommandError +from pip._internal.locations import get_major_minor_version +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = [ + "rmtree", + "display_path", + "backup_dir", + "ask", + "splitext", + "format_size", + "is_installable_dir", + "normalize_path", + "renames", + "get_prog", + "captured_stdout", + "ensure_dir", + "remove_auth_from_url", +] + + +logger = logging.getLogger(__name__) + +T = TypeVar("T") +ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +VersionInfo = Tuple[int, int, int] +NetlocTuple = Tuple[str, Tuple[Optional[str], Optional[str]]] + + +def get_pip_version() -> str: + pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") + pip_pkg_dir = os.path.abspath(pip_pkg_dir) + + return "pip {} from {} (python {})".format( + __version__, + pip_pkg_dir, + get_major_minor_version(), + ) + + +def normalize_version_info(py_version_info: Tuple[int, ...]) -> Tuple[int, int, int]: + """ + Convert a tuple of ints representing a Python version to one of length + three. + + :param py_version_info: a tuple of ints representing a Python version, + or None to specify no version. The tuple can have any length. + + :return: a tuple of length three if `py_version_info` is non-None. + Otherwise, return `py_version_info` unchanged (i.e. None). + """ + if len(py_version_info) < 3: + py_version_info += (3 - len(py_version_info)) * (0,) + elif len(py_version_info) > 3: + py_version_info = py_version_info[:3] + + return cast("VersionInfo", py_version_info) + + +def ensure_dir(path: str) -> None: + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + # Windows can raise spurious ENOTEMPTY errors. See #6426. + if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY: + raise + + +def get_prog() -> str: + try: + prog = os.path.basename(sys.argv[0]) + if prog in ("__main__.py", "-c"): + return f"{sys.executable} -m pip" + else: + return prog + except (AttributeError, TypeError, IndexError): + pass + return "pip" + + +# Retry every half second for up to 3 seconds +# Tenacity raises RetryError by default, explicitly raise the original exception +@retry(reraise=True, stop=stop_after_delay(3), wait=wait_fixed(0.5)) +def rmtree(dir: str, ignore_errors: bool = False) -> None: + shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func: Callable[..., Any], path: str, exc_info: ExcInfo) -> None: + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + try: + has_attr_readonly = not (os.stat(path).st_mode & stat.S_IWRITE) + except OSError: + # it's equivalent to os.path.exists + return + + if has_attr_readonly: + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + return + else: + raise + + +def display_path(path: str) -> str: + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if path.startswith(os.getcwd() + os.path.sep): + path = "." + path[len(os.getcwd()) :] + return path + + +def backup_dir(dir: str, ext: str = ".bak") -> str: + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def ask_path_exists(message: str, options: Iterable[str]) -> str: + for action in os.environ.get("PIP_EXISTS_ACTION", "").split(): + if action in options: + return action + return ask(message, options) + + +def _check_no_input(message: str) -> None: + """Raise an error if no input is allowed.""" + if os.environ.get("PIP_NO_INPUT"): + raise Exception( + f"No input was expected ($PIP_NO_INPUT set); question: {message}" + ) + + +def ask(message: str, options: Iterable[str]) -> str: + """Ask the message interactively, with the given possible responses""" + while 1: + _check_no_input(message) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + "Your response ({!r}) was not one of the expected responses: " + "{}".format(response, ", ".join(options)) + ) + else: + return response + + +def ask_input(message: str) -> str: + """Ask for input interactively.""" + _check_no_input(message) + return input(message) + + +def ask_password(message: str) -> str: + """Ask for a password interactively.""" + _check_no_input(message) + return getpass.getpass(message) + + +def strtobool(val: str) -> int: + """Convert a string representation of truth to true (1) or false (0). + + True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values + are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if + 'val' is anything else. + """ + val = val.lower() + if val in ("y", "yes", "t", "true", "on", "1"): + return 1 + elif val in ("n", "no", "f", "false", "off", "0"): + return 0 + else: + raise ValueError(f"invalid truth value {val!r}") + + +def format_size(bytes: float) -> str: + if bytes > 1000 * 1000: + return "{:.1f} MB".format(bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return "{} kB".format(int(bytes / 1000)) + elif bytes > 1000: + return "{:.1f} kB".format(bytes / 1000.0) + else: + return "{} bytes".format(int(bytes)) + + +def tabulate(rows: Iterable[Iterable[Any]]) -> Tuple[List[str], List[int]]: + """Return a list of formatted rows and a list of column sizes. + + For example:: + + >>> tabulate([['foobar', 2000], [0xdeadbeef]]) + (['foobar 2000', '3735928559'], [10, 4]) + """ + rows = [tuple(map(str, row)) for row in rows] + sizes = [max(map(len, col)) for col in zip_longest(*rows, fillvalue="")] + table = [" ".join(map(str.ljust, row, sizes)).rstrip() for row in rows] + return table, sizes + + +def is_installable_dir(path: str) -> bool: + """Is path is a directory containing pyproject.toml or setup.py? + + If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for + a legacy setuptools layout by identifying setup.py. We don't check for the + setup.cfg because using it without setup.py is only available for PEP 517 + projects, which are already covered by the pyproject.toml check. + """ + if not os.path.isdir(path): + return False + if os.path.isfile(os.path.join(path, "pyproject.toml")): + return True + if os.path.isfile(os.path.join(path, "setup.py")): + return True + return False + + +def read_chunks(file: BinaryIO, size: int = io.DEFAULT_BUFFER_SIZE) -> Iterator[bytes]: + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def normalize_path(path: str, resolve_symlinks: bool = True) -> str: + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = os.path.expanduser(path) + if resolve_symlinks: + path = os.path.realpath(path) + else: + path = os.path.abspath(path) + return os.path.normcase(path) + + +def splitext(path: str) -> Tuple[str, str]: + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith(".tar"): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old: str, new: str) -> None: + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path: str) -> bool: + """ + Return True if path is within sys.prefix, if we're running in a virtualenv. + + If we're not in a virtualenv, all paths are considered "local." + + Caution: this function assumes the head of path has been normalized + with normalize_path. + """ + if not running_under_virtualenv(): + return True + return path.startswith(normalize_path(sys.prefix)) + + +def write_output(msg: Any, *args: Any) -> None: + logger.info(msg, *args) + + +class StreamWrapper(StringIO): + orig_stream: TextIO = None + + @classmethod + def from_stream(cls, orig_stream: TextIO) -> "StreamWrapper": + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + # https://github.com/python/mypy/issues/4125 + @property + def encoding(self): # type: ignore + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name: str) -> Iterator[StreamWrapper]: + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout() -> ContextManager[StreamWrapper]: + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output("stdout") + + +def captured_stderr() -> ContextManager[StreamWrapper]: + """ + See captured_stdout(). + """ + return captured_output("stderr") + + +# Simulates an enum +def enum(*sequential: Any, **named: Any) -> Type[Any]: + enums = dict(zip(sequential, range(len(sequential))), **named) + reverse = {value: key for key, value in enums.items()} + enums["reverse_mapping"] = reverse + return type("Enum", (), enums) + + +def build_netloc(host: str, port: Optional[int]) -> str: + """ + Build a netloc from a host-port pair + """ + if port is None: + return host + if ":" in host: + # Only wrap host with square brackets when it is IPv6 + host = f"[{host}]" + return f"{host}:{port}" + + +def build_url_from_netloc(netloc: str, scheme: str = "https") -> str: + """ + Build a full URL from a netloc. + """ + if netloc.count(":") >= 2 and "@" not in netloc and "[" not in netloc: + # It must be a bare IPv6 address, so wrap it with brackets. + netloc = f"[{netloc}]" + return f"{scheme}://{netloc}" + + +def parse_netloc(netloc: str) -> Tuple[str, Optional[int]]: + """ + Return the host-port pair from a netloc. + """ + url = build_url_from_netloc(netloc) + parsed = urllib.parse.urlparse(url) + return parsed.hostname, parsed.port + + +def split_auth_from_netloc(netloc: str) -> NetlocTuple: + """ + Parse out and remove the auth information from a netloc. + + Returns: (netloc, (username, password)). + """ + if "@" not in netloc: + return netloc, (None, None) + + # Split from the right because that's how urllib.parse.urlsplit() + # behaves if more than one @ is present (which can be checked using + # the password attribute of urlsplit()'s return value). + auth, netloc = netloc.rsplit("@", 1) + pw: Optional[str] = None + if ":" in auth: + # Split from the left because that's how urllib.parse.urlsplit() + # behaves if more than one : is present (which again can be checked + # using the password attribute of the return value) + user, pw = auth.split(":", 1) + else: + user, pw = auth, None + + user = urllib.parse.unquote(user) + if pw is not None: + pw = urllib.parse.unquote(pw) + + return netloc, (user, pw) + + +def redact_netloc(netloc: str) -> str: + """ + Replace the sensitive data in a netloc with "****", if it exists. + + For example: + - "user:pass@example.com" returns "user:****@example.com" + - "accesstoken@example.com" returns "****@example.com" + """ + netloc, (user, password) = split_auth_from_netloc(netloc) + if user is None: + return netloc + if password is None: + user = "****" + password = "" + else: + user = urllib.parse.quote(user) + password = ":****" + return "{user}{password}@{netloc}".format( + user=user, password=password, netloc=netloc + ) + + +def _transform_url( + url: str, transform_netloc: Callable[[str], Tuple[Any, ...]] +) -> Tuple[str, NetlocTuple]: + """Transform and replace netloc in a url. + + transform_netloc is a function taking the netloc and returning a + tuple. The first element of this tuple is the new netloc. The + entire tuple is returned. + + Returns a tuple containing the transformed url as item 0 and the + original tuple returned by transform_netloc as item 1. + """ + purl = urllib.parse.urlsplit(url) + netloc_tuple = transform_netloc(purl.netloc) + # stripped url + url_pieces = (purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment) + surl = urllib.parse.urlunsplit(url_pieces) + return surl, cast("NetlocTuple", netloc_tuple) + + +def _get_netloc(netloc: str) -> NetlocTuple: + return split_auth_from_netloc(netloc) + + +def _redact_netloc(netloc: str) -> Tuple[str]: + return (redact_netloc(netloc),) + + +def split_auth_netloc_from_url(url: str) -> Tuple[str, str, Tuple[str, str]]: + """ + Parse a url into separate netloc, auth, and url with no auth. + + Returns: (url_without_auth, netloc, (username, password)) + """ + url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) + return url_without_auth, netloc, auth + + +def remove_auth_from_url(url: str) -> str: + """Return a copy of url with 'username:password@' removed.""" + # username/pass params are passed to subversion through flags + # and are not recognized in the url. + return _transform_url(url, _get_netloc)[0] + + +def redact_auth_from_url(url: str) -> str: + """Replace the password in a given url with ****.""" + return _transform_url(url, _redact_netloc)[0] + + +class HiddenText: + def __init__(self, secret: str, redacted: str) -> None: + self.secret = secret + self.redacted = redacted + + def __repr__(self) -> str: + return "".format(str(self)) + + def __str__(self) -> str: + return self.redacted + + # This is useful for testing. + def __eq__(self, other: Any) -> bool: + if type(self) != type(other): + return False + + # The string being used for redaction doesn't also have to match, + # just the raw, original string. + return self.secret == other.secret + + +def hide_value(value: str) -> HiddenText: + return HiddenText(value, redacted="****") + + +def hide_url(url: str) -> HiddenText: + redacted = redact_auth_from_url(url) + return HiddenText(url, redacted=redacted) + + +def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None: + """Protection of pip.exe from modification on Windows + + On Windows, any operation modifying pip should be run as: + python -m pip ... + """ + pip_names = [ + "pip.exe", + "pip{}.exe".format(sys.version_info[0]), + "pip{}.{}.exe".format(*sys.version_info[:2]), + ] + + # See https://github.com/pypa/pip/issues/1299 for more discussion + should_show_use_python_msg = ( + modifying_pip and WINDOWS and os.path.basename(sys.argv[0]) in pip_names + ) + + if should_show_use_python_msg: + new_command = [sys.executable, "-m", "pip"] + sys.argv[1:] + raise CommandError( + "To modify pip, please run the following command:\n{}".format( + " ".join(new_command) + ) + ) + + +def is_console_interactive() -> bool: + """Is this console interactive?""" + return sys.stdin is not None and sys.stdin.isatty() + + +def hash_file(path: str, blocksize: int = 1 << 20) -> Tuple[Any, int]: + """Return (hash, length) for path using hashlib.sha256()""" + + h = hashlib.sha256() + length = 0 + with open(path, "rb") as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + return h, length + + +def is_wheel_installed() -> bool: + """ + Return whether the wheel package is installed. + """ + try: + import wheel # noqa: F401 + except ImportError: + return False + + return True + + +def pairwise(iterable: Iterable[Any]) -> Iterator[Tuple[Any, Any]]: + """ + Return paired elements. + + For example: + s -> (s0, s1), (s2, s3), (s4, s5), ... + """ + iterable = iter(iterable) + return zip_longest(iterable, iterable) + + +def partition( + pred: Callable[[T], bool], + iterable: Iterable[T], +) -> Tuple[Iterable[T], Iterable[T]]: + """ + Use a predicate to partition entries into false entries and true entries, + like + + partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 + """ + t1, t2 = tee(iterable) + return filterfalse(pred, t1), filter(pred, t2) diff --git a/venv/Lib/site-packages/pip/_internal/utils/models.py b/venv/Lib/site-packages/pip/_internal/utils/models.py new file mode 100644 index 000000000..b6bb21a8b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/models.py @@ -0,0 +1,39 @@ +"""Utilities for defining models +""" + +import operator +from typing import Any, Callable, Type + + +class KeyBasedCompareMixin: + """Provides comparison capabilities that is based on a key""" + + __slots__ = ["_compare_key", "_defining_class"] + + def __init__(self, key: Any, defining_class: Type["KeyBasedCompareMixin"]) -> None: + self._compare_key = key + self._defining_class = defining_class + + def __hash__(self) -> int: + return hash(self._compare_key) + + def __lt__(self, other: Any) -> bool: + return self._compare(other, operator.__lt__) + + def __le__(self, other: Any) -> bool: + return self._compare(other, operator.__le__) + + def __gt__(self, other: Any) -> bool: + return self._compare(other, operator.__gt__) + + def __ge__(self, other: Any) -> bool: + return self._compare(other, operator.__ge__) + + def __eq__(self, other: Any) -> bool: + return self._compare(other, operator.__eq__) + + def _compare(self, other: Any, method: Callable[[Any, Any], bool]) -> bool: + if not isinstance(other, self._defining_class): + return NotImplemented + + return method(self._compare_key, other._compare_key) diff --git a/venv/Lib/site-packages/pip/_internal/utils/packaging.py b/venv/Lib/site-packages/pip/_internal/utils/packaging.py new file mode 100644 index 000000000..b9f6af4d1 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/packaging.py @@ -0,0 +1,57 @@ +import functools +import logging +import re +from typing import NewType, Optional, Tuple, cast + +from pip._vendor.packaging import specifiers, version +from pip._vendor.packaging.requirements import Requirement + +NormalizedExtra = NewType("NormalizedExtra", str) + +logger = logging.getLogger(__name__) + + +def check_requires_python( + requires_python: Optional[str], version_info: Tuple[int, ...] +) -> bool: + """ + Check if the given Python version matches a "Requires-Python" specifier. + + :param version_info: A 3-tuple of ints representing a Python + major-minor-micro version to check (e.g. `sys.version_info[:3]`). + + :return: `True` if the given Python version satisfies the requirement. + Otherwise, return `False`. + + :raises InvalidSpecifier: If `requires_python` has an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + python_version = version.parse(".".join(map(str, version_info))) + return python_version in requires_python_specifier + + +@functools.lru_cache(maxsize=512) +def get_requirement(req_string: str) -> Requirement: + """Construct a packaging.Requirement object with caching""" + # Parsing requirement strings is expensive, and is also expected to happen + # with a low diversity of different arguments (at least relative the number + # constructed). This method adds a cache to requirement object creation to + # minimize repeated parsing of the same string to construct equivalent + # Requirement objects. + return Requirement(req_string) + + +def safe_extra(extra: str) -> NormalizedExtra: + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + + This function is duplicated from ``pkg_resources``. Note that this is not + the same to either ``canonicalize_name`` or ``_egg_link_name``. + """ + return cast(NormalizedExtra, re.sub("[^A-Za-z0-9.-]+", "_", extra).lower()) diff --git a/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py b/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py new file mode 100644 index 000000000..f460c4003 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py @@ -0,0 +1,195 @@ +import sys +import textwrap +from typing import List, Optional, Sequence + +# Shim to wrap setup.py invocation with setuptools +# Note that __file__ is handled via two {!r} *and* %r, to ensure that paths on +# Windows are correctly handled (it should be "C:\\Users" not "C:\Users"). +_SETUPTOOLS_SHIM = textwrap.dedent( + """ + exec(compile(''' + # This is -- a caller that pip uses to run setup.py + # + # - It imports setuptools before invoking setup.py, to enable projects that directly + # import from `distutils.core` to work with newer packaging standards. + # - It provides a clear error message when setuptools is not installed. + # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so + # setuptools doesn't think the script is `-c`. This avoids the following warning: + # manifest_maker: standard file '-c' not found". + # - It generates a shim setup.py, for handling setup.cfg-only projects. + import os, sys, tokenize + + try: + import setuptools + except ImportError as error: + print( + "ERROR: Can not execute `setup.py` since setuptools is not available in " + "the build environment.", + file=sys.stderr, + ) + sys.exit(1) + + __file__ = %r + sys.argv[0] = __file__ + + if os.path.exists(__file__): + filename = __file__ + with tokenize.open(__file__) as f: + setup_py_code = f.read() + else: + filename = "" + setup_py_code = "from setuptools import setup; setup()" + + exec(compile(setup_py_code, filename, "exec")) + ''' % ({!r},), "", "exec")) + """ +).rstrip() + + +def make_setuptools_shim_args( + setup_py_path: str, + global_options: Sequence[str] = None, + no_user_config: bool = False, + unbuffered_output: bool = False, +) -> List[str]: + """ + Get setuptools command arguments with shim wrapped setup file invocation. + + :param setup_py_path: The path to setup.py to be wrapped. + :param global_options: Additional global options. + :param no_user_config: If True, disables personal user configuration. + :param unbuffered_output: If True, adds the unbuffered switch to the + argument list. + """ + args = [sys.executable] + if unbuffered_output: + args += ["-u"] + args += ["-c", _SETUPTOOLS_SHIM.format(setup_py_path)] + if global_options: + args += global_options + if no_user_config: + args += ["--no-user-cfg"] + return args + + +def make_setuptools_bdist_wheel_args( + setup_py_path: str, + global_options: Sequence[str], + build_options: Sequence[str], + destination_dir: str, +) -> List[str]: + # NOTE: Eventually, we'd want to also -S to the flags here, when we're + # isolating. Currently, it breaks Python in virtualenvs, because it + # relies on site.py to find parts of the standard library outside the + # virtualenv. + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["bdist_wheel", "-d", destination_dir] + args += build_options + return args + + +def make_setuptools_clean_args( + setup_py_path: str, + global_options: Sequence[str], +) -> List[str]: + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["clean", "--all"] + return args + + +def make_setuptools_develop_args( + setup_py_path: str, + global_options: Sequence[str], + install_options: Sequence[str], + no_user_config: bool, + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, +) -> List[str]: + assert not (use_user_site and prefix) + + args = make_setuptools_shim_args( + setup_py_path, + global_options=global_options, + no_user_config=no_user_config, + ) + + args += ["develop", "--no-deps"] + + args += install_options + + if prefix: + args += ["--prefix", prefix] + if home is not None: + args += ["--install-dir", home] + + if use_user_site: + args += ["--user", "--prefix="] + + return args + + +def make_setuptools_egg_info_args( + setup_py_path: str, + egg_info_dir: Optional[str], + no_user_config: bool, +) -> List[str]: + args = make_setuptools_shim_args(setup_py_path, no_user_config=no_user_config) + + args += ["egg_info"] + + if egg_info_dir: + args += ["--egg-base", egg_info_dir] + + return args + + +def make_setuptools_install_args( + setup_py_path: str, + global_options: Sequence[str], + install_options: Sequence[str], + record_filename: str, + root: Optional[str], + prefix: Optional[str], + header_dir: Optional[str], + home: Optional[str], + use_user_site: bool, + no_user_config: bool, + pycompile: bool, +) -> List[str]: + assert not (use_user_site and prefix) + assert not (use_user_site and root) + + args = make_setuptools_shim_args( + setup_py_path, + global_options=global_options, + no_user_config=no_user_config, + unbuffered_output=True, + ) + args += ["install", "--record", record_filename] + args += ["--single-version-externally-managed"] + + if root is not None: + args += ["--root", root] + if prefix is not None: + args += ["--prefix", prefix] + if home is not None: + args += ["--home", home] + if use_user_site: + args += ["--user", "--prefix="] + + if pycompile: + args += ["--compile"] + else: + args += ["--no-compile"] + + if header_dir: + args += ["--install-headers", header_dir] + + args += install_options + + return args diff --git a/venv/Lib/site-packages/pip/_internal/utils/subprocess.py b/venv/Lib/site-packages/pip/_internal/utils/subprocess.py new file mode 100644 index 000000000..b5b762418 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/subprocess.py @@ -0,0 +1,260 @@ +import logging +import os +import shlex +import subprocess +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Iterable, + List, + Mapping, + Optional, + Union, +) + +from pip._vendor.rich.markup import escape + +from pip._internal.cli.spinners import SpinnerInterface, open_spinner +from pip._internal.exceptions import InstallationSubprocessError +from pip._internal.utils.logging import VERBOSE, subprocess_logger +from pip._internal.utils.misc import HiddenText + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + +CommandArgs = List[Union[str, HiddenText]] + + +def make_command(*args: Union[str, HiddenText, CommandArgs]) -> CommandArgs: + """ + Create a CommandArgs object. + """ + command_args: CommandArgs = [] + for arg in args: + # Check for list instead of CommandArgs since CommandArgs is + # only known during type-checking. + if isinstance(arg, list): + command_args.extend(arg) + else: + # Otherwise, arg is str or HiddenText. + command_args.append(arg) + + return command_args + + +def format_command_args(args: Union[List[str], CommandArgs]) -> str: + """ + Format command arguments for display. + """ + # For HiddenText arguments, display the redacted form by calling str(). + # Also, we don't apply str() to arguments that aren't HiddenText since + # this can trigger a UnicodeDecodeError in Python 2 if the argument + # has type unicode and includes a non-ascii character. (The type + # checker doesn't ensure the annotations are correct in all cases.) + return " ".join( + shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg) + for arg in args + ) + + +def reveal_command_args(args: Union[List[str], CommandArgs]) -> List[str]: + """ + Return the arguments in their raw, unredacted form. + """ + return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args] + + +def call_subprocess( + cmd: Union[List[str], CommandArgs], + show_stdout: bool = False, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + unset_environ: Optional[Iterable[str]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: Optional[bool] = True, + stdout_only: Optional[bool] = False, + *, + command_desc: str, +) -> str: + """ + Args: + show_stdout: if true, use INFO to log the subprocess's stderr and + stdout streams. Otherwise, use DEBUG. Defaults to False. + extra_ok_returncodes: an iterable of integer return codes that are + acceptable, in addition to 0. Defaults to None, which means []. + unset_environ: an iterable of environment variable names to unset + prior to calling subprocess.Popen(). + log_failed_cmd: if false, failed commands are not logged, only raised. + stdout_only: if true, return only stdout, else return both. When true, + logging of both stdout and stderr occurs when the subprocess has + terminated, else logging occurs as subprocess output is produced. + """ + if extra_ok_returncodes is None: + extra_ok_returncodes = [] + if unset_environ is None: + unset_environ = [] + # Most places in pip use show_stdout=False. What this means is-- + # + # - We connect the child's output (combined stderr and stdout) to a + # single pipe, which we read. + # - We log this output to stderr at DEBUG level as it is received. + # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't + # requested), then we show a spinner so the user can still see the + # subprocess is in progress. + # - If the subprocess exits with an error, we log the output to stderr + # at ERROR level if it hasn't already been displayed to the console + # (e.g. if --verbose logging wasn't enabled). This way we don't log + # the output to the console twice. + # + # If show_stdout=True, then the above is still done, but with DEBUG + # replaced by INFO. + if show_stdout: + # Then log the subprocess output at INFO level. + log_subprocess = subprocess_logger.info + used_level = logging.INFO + else: + # Then log the subprocess output using VERBOSE. This also ensures + # it will be logged to the log file (aka user_log), if enabled. + log_subprocess = subprocess_logger.verbose + used_level = VERBOSE + + # Whether the subprocess will be visible in the console. + showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level + + # Only use the spinner if we're not showing the subprocess output + # and we have a spinner. + use_spinner = not showing_subprocess and spinner is not None + + log_subprocess("Running command %s", command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + for name in unset_environ: + env.pop(name, None) + try: + proc = subprocess.Popen( + # Convert HiddenText objects to the underlying str. + reveal_command_args(cmd), + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE, + cwd=cwd, + env=env, + errors="backslashreplace", + ) + except Exception as exc: + if log_failed_cmd: + subprocess_logger.critical( + "Error %s while executing command %s", + exc, + command_desc, + ) + raise + all_output = [] + if not stdout_only: + assert proc.stdout + assert proc.stdin + proc.stdin.close() + # In this mode, stdout and stderr are in the same pipe. + while True: + line: str = proc.stdout.readline() + if not line: + break + line = line.rstrip() + all_output.append(line + "\n") + + # Show the line immediately. + log_subprocess(line) + # Update the spinner. + if use_spinner: + assert spinner + spinner.spin() + try: + proc.wait() + finally: + if proc.stdout: + proc.stdout.close() + output = "".join(all_output) + else: + # In this mode, stdout and stderr are in different pipes. + # We must use communicate() which is the only safe way to read both. + out, err = proc.communicate() + # log line by line to preserve pip log indenting + for out_line in out.splitlines(): + log_subprocess(out_line) + all_output.append(out) + for err_line in err.splitlines(): + log_subprocess(err_line) + all_output.append(err) + output = out + + proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes + if use_spinner: + assert spinner + if proc_had_error: + spinner.finish("error") + else: + spinner.finish("done") + if proc_had_error: + if on_returncode == "raise": + error = InstallationSubprocessError( + command_description=command_desc, + exit_code=proc.returncode, + output_lines=all_output if not showing_subprocess else None, + ) + if log_failed_cmd: + subprocess_logger.error("[present-diagnostic] %s", error) + subprocess_logger.verbose( + "[bold magenta]full command[/]: [blue]%s[/]", + escape(format_command_args(cmd)), + extra={"markup": True}, + ) + subprocess_logger.verbose( + "[bold magenta]cwd[/]: %s", + escape(cwd or "[inherit]"), + extra={"markup": True}, + ) + + raise error + elif on_returncode == "warn": + subprocess_logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, + proc.returncode, + cwd, + ) + elif on_returncode == "ignore": + pass + else: + raise ValueError(f"Invalid value: on_returncode={on_returncode!r}") + return output + + +def runner_with_spinner_message(message: str) -> Callable[..., None]: + """Provide a subprocess_runner that shows a spinner message. + + Intended for use with for pep517's Pep517HookCaller. Thus, the runner has + an API that matches what's expected by Pep517HookCaller.subprocess_runner. + """ + + def runner( + cmd: List[str], + cwd: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + ) -> None: + with open_spinner(message) as spinner: + call_subprocess( + cmd, + command_desc=message, + cwd=cwd, + extra_environ=extra_environ, + spinner=spinner, + ) + + return runner diff --git a/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py b/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py new file mode 100644 index 000000000..442679a75 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py @@ -0,0 +1,246 @@ +import errno +import itertools +import logging +import os.path +import tempfile +from contextlib import ExitStack, contextmanager +from typing import Any, Dict, Iterator, Optional, TypeVar, Union + +from pip._internal.utils.misc import enum, rmtree + +logger = logging.getLogger(__name__) + +_T = TypeVar("_T", bound="TempDirectory") + + +# Kinds of temporary directories. Only needed for ones that are +# globally-managed. +tempdir_kinds = enum( + BUILD_ENV="build-env", + EPHEM_WHEEL_CACHE="ephem-wheel-cache", + REQ_BUILD="req-build", +) + + +_tempdir_manager: Optional[ExitStack] = None + + +@contextmanager +def global_tempdir_manager() -> Iterator[None]: + global _tempdir_manager + with ExitStack() as stack: + old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack + try: + yield + finally: + _tempdir_manager = old_tempdir_manager + + +class TempDirectoryTypeRegistry: + """Manages temp directory behavior""" + + def __init__(self) -> None: + self._should_delete: Dict[str, bool] = {} + + def set_delete(self, kind: str, value: bool) -> None: + """Indicate whether a TempDirectory of the given kind should be + auto-deleted. + """ + self._should_delete[kind] = value + + def get_delete(self, kind: str) -> bool: + """Get configured auto-delete flag for a given TempDirectory type, + default True. + """ + return self._should_delete.get(kind, True) + + +_tempdir_registry: Optional[TempDirectoryTypeRegistry] = None + + +@contextmanager +def tempdir_registry() -> Iterator[TempDirectoryTypeRegistry]: + """Provides a scoped global tempdir registry that can be used to dictate + whether directories should be deleted. + """ + global _tempdir_registry + old_tempdir_registry = _tempdir_registry + _tempdir_registry = TempDirectoryTypeRegistry() + try: + yield _tempdir_registry + finally: + _tempdir_registry = old_tempdir_registry + + +class _Default: + pass + + +_default = _Default() + + +class TempDirectory: + """Helper class that owns and cleans up a temporary directory. + + This class can be used as a context manager or as an OO representation of a + temporary directory. + + Attributes: + path + Location to the created temporary directory + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + Methods: + cleanup() + Deletes the temporary directory + + When used as a context manager, if the delete attribute is True, on + exiting the context the temporary directory is deleted. + """ + + def __init__( + self, + path: Optional[str] = None, + delete: Union[bool, None, _Default] = _default, + kind: str = "temp", + globally_managed: bool = False, + ): + super().__init__() + + if delete is _default: + if path is not None: + # If we were given an explicit directory, resolve delete option + # now. + delete = False + else: + # Otherwise, we wait until cleanup and see what + # tempdir_registry says. + delete = None + + # The only time we specify path is in for editables where it + # is the value of the --src option. + if path is None: + path = self._create(kind) + + self._path = path + self._deleted = False + self.delete = delete + self.kind = kind + + if globally_managed: + assert _tempdir_manager is not None + _tempdir_manager.enter_context(self) + + @property + def path(self) -> str: + assert not self._deleted, f"Attempted to access deleted path: {self._path}" + return self._path + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.path!r}>" + + def __enter__(self: _T) -> _T: + return self + + def __exit__(self, exc: Any, value: Any, tb: Any) -> None: + if self.delete is not None: + delete = self.delete + elif _tempdir_registry: + delete = _tempdir_registry.get_delete(self.kind) + else: + delete = True + + if delete: + self.cleanup() + + def _create(self, kind: str) -> str: + """Create a temporary directory and store its path in self.path""" + # We realpath here because some systems have their default tmpdir + # symlinked to another directory. This tends to confuse build + # scripts, so we canonicalize the path by traversing potential + # symlinks here. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + logger.debug("Created temporary directory: %s", path) + return path + + def cleanup(self) -> None: + """Remove the temporary directory created and reset state""" + self._deleted = True + if not os.path.exists(self._path): + return + rmtree(self._path) + + +class AdjacentTempDirectory(TempDirectory): + """Helper class that creates a temporary directory adjacent to a real one. + + Attributes: + original + The original directory to create a temp directory for. + path + After calling create() or entering, contains the full + path to the temporary directory. + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + """ + + # The characters that may be used to name the temp directory + # We always prepend a ~ and then rotate through these until + # a usable name is found. + # pkg_resources raises a different error for .dist-info folder + # with leading '-' and invalid metadata + LEADING_CHARS = "-~.=%0123456789" + + def __init__(self, original: str, delete: Optional[bool] = None) -> None: + self.original = original.rstrip("/\\") + super().__init__(delete=delete) + + @classmethod + def _generate_names(cls, name: str) -> Iterator[str]: + """Generates a series of temporary names. + + The algorithm replaces the leading characters in the name + with ones that are valid filesystem characters, but are not + valid package names (for both Python and pip definitions of + package). + """ + for i in range(1, len(name)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i - 1 + ): + new_name = "~" + "".join(candidate) + name[i:] + if new_name != name: + yield new_name + + # If we make it this far, we will have to make a longer name + for i in range(len(cls.LEADING_CHARS)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i + ): + new_name = "~" + "".join(candidate) + name + if new_name != name: + yield new_name + + def _create(self, kind: str) -> str: + root, name = os.path.split(self.original) + for candidate in self._generate_names(name): + path = os.path.join(root, candidate) + try: + os.mkdir(path) + except OSError as ex: + # Continue if the name exists already + if ex.errno != errno.EEXIST: + raise + else: + path = os.path.realpath(path) + break + else: + # Final fallback on the default behavior. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + + logger.debug("Created temporary directory: %s", path) + return path diff --git a/venv/Lib/site-packages/pip/_internal/utils/unpacking.py b/venv/Lib/site-packages/pip/_internal/utils/unpacking.py new file mode 100644 index 000000000..5f63f974b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/unpacking.py @@ -0,0 +1,258 @@ +"""Utilities related archives. +""" + +import logging +import os +import shutil +import stat +import tarfile +import zipfile +from typing import Iterable, List, Optional +from zipfile import ZipInfo + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.filetypes import ( + BZ2_EXTENSIONS, + TAR_EXTENSIONS, + XZ_EXTENSIONS, + ZIP_EXTENSIONS, +) +from pip._internal.utils.misc import ensure_dir + +logger = logging.getLogger(__name__) + + +SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS + +try: + import bz2 # noqa + + SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS +except ImportError: + logger.debug("bz2 module is not available") + +try: + # Only for Python 3.3+ + import lzma # noqa + + SUPPORTED_EXTENSIONS += XZ_EXTENSIONS +except ImportError: + logger.debug("lzma module is not available") + + +def current_umask() -> int: + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def split_leading_dir(path: str) -> List[str]: + path = path.lstrip("/").lstrip("\\") + if "/" in path and ( + ("\\" in path and path.find("/") < path.find("\\")) or "\\" not in path + ): + return path.split("/", 1) + elif "\\" in path: + return path.split("\\", 1) + else: + return [path, ""] + + +def has_leading_dir(paths: Iterable[str]) -> bool: + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def is_within_directory(directory: str, target: str) -> bool: + """ + Return true if the absolute path of target is within the directory + """ + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + return prefix == abs_directory + + +def set_extracted_file_to_default_mode_plus_executable(path: str) -> None: + """ + Make file present at path have execute for user/group/world + (chmod +x) is no-op on windows per python docs + """ + os.chmod(path, (0o777 & ~current_umask() | 0o111)) + + +def zip_item_is_executable(info: ZipInfo) -> bool: + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + return bool(mode and stat.S_ISREG(mode) and mode & 0o111) + + +def unzip_file(filename: str, location: str, flatten: bool = True) -> None: + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + zipfp = open(filename, "rb") + try: + zip = zipfile.ZipFile(zipfp, allowZip64=True) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if not is_within_directory(location, fn): + message = ( + "The zip file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, fn, location)) + if fn.endswith("/") or fn.endswith("\\"): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + # Don't use read() to avoid allocating an arbitrarily large + # chunk of memory for the file's content + fp = zip.open(name) + try: + with open(fn, "wb") as destfp: + shutil.copyfileobj(fp, destfp) + finally: + fp.close() + if zip_item_is_executable(info): + set_extracted_file_to_default_mode_plus_executable(fn) + finally: + zipfp.close() + + +def untar_file(filename: str, location: str) -> None: + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + if filename.lower().endswith(".gz") or filename.lower().endswith(".tgz"): + mode = "r:gz" + elif filename.lower().endswith(BZ2_EXTENSIONS): + mode = "r:bz2" + elif filename.lower().endswith(XZ_EXTENSIONS): + mode = "r:xz" + elif filename.lower().endswith(".tar"): + mode = "r" + else: + logger.warning( + "Cannot determine compression type for file %s", + filename, + ) + mode = "r:*" + tar = tarfile.open(filename, mode, encoding="utf-8") + try: + leading = has_leading_dir([member.name for member in tar.getmembers()]) + for member in tar.getmembers(): + fn = member.name + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if not is_within_directory(location, path): + message = ( + "The tar file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, path, location)) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + # https://github.com/python/typeshed/issues/2673 + tar._extract_member(member, path) # type: ignore + except Exception as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + "In the tar file %s the member %s is invalid: %s", + filename, + member.name, + exc, + ) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError) as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + "In the tar file %s the member %s is invalid: %s", + filename, + member.name, + exc, + ) + continue + ensure_dir(os.path.dirname(path)) + assert fp is not None + with open(path, "wb") as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + tar.utime(member, path) + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + set_extracted_file_to_default_mode_plus_executable(path) + finally: + tar.close() + + +def unpack_file( + filename: str, + location: str, + content_type: Optional[str] = None, +) -> None: + filename = os.path.realpath(filename) + if ( + content_type == "application/zip" + or filename.lower().endswith(ZIP_EXTENSIONS) + or zipfile.is_zipfile(filename) + ): + unzip_file(filename, location, flatten=not filename.endswith(".whl")) + elif ( + content_type == "application/x-gzip" + or tarfile.is_tarfile(filename) + or filename.lower().endswith(TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS) + ): + untar_file(filename, location) + else: + # FIXME: handle? + # FIXME: magic signatures? + logger.critical( + "Cannot unpack file %s (downloaded from %s, content-type: %s); " + "cannot detect archive format", + filename, + location, + content_type, + ) + raise InstallationError(f"Cannot determine archive format of {location}") diff --git a/venv/Lib/site-packages/pip/_internal/utils/urls.py b/venv/Lib/site-packages/pip/_internal/utils/urls.py new file mode 100644 index 000000000..6ba2e04f3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/urls.py @@ -0,0 +1,62 @@ +import os +import string +import urllib.parse +import urllib.request +from typing import Optional + +from .compat import WINDOWS + + +def get_url_scheme(url: str) -> Optional[str]: + if ":" not in url: + return None + return url.split(":", 1)[0].lower() + + +def path_to_url(path: str) -> str: + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + url = urllib.parse.urljoin("file:", urllib.request.pathname2url(path)) + return url + + +def url_to_path(url: str) -> str: + """ + Convert a file: URL to a path. + """ + assert url.startswith( + "file:" + ), f"You can only turn file: urls into filenames (not {url!r})" + + _, netloc, path, _, _ = urllib.parse.urlsplit(url) + + if not netloc or netloc == "localhost": + # According to RFC 8089, same as empty authority. + netloc = "" + elif WINDOWS: + # If we have a UNC path, prepend UNC share notation. + netloc = "\\\\" + netloc + else: + raise ValueError( + f"non-local file URIs are not supported on this platform: {url!r}" + ) + + path = urllib.request.url2pathname(netloc + path) + + # On Windows, urlsplit parses the path as something like "/C:/Users/foo". + # This creates issues for path-related functions like io.open(), so we try + # to detect and strip the leading slash. + if ( + WINDOWS + and not netloc # Not UNC. + and len(path) >= 3 + and path[0] == "/" # Leading slash to strip. + and path[1] in string.ascii_letters # Drive letter. + and path[2:4] in (":", ":/") # Colon + end of string, or colon + absolute path. + ): + path = path[1:] + + return path diff --git a/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py b/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py new file mode 100644 index 000000000..c926db4c3 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py @@ -0,0 +1,104 @@ +import logging +import os +import re +import site +import sys +from typing import List, Optional + +logger = logging.getLogger(__name__) +_INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( + r"include-system-site-packages\s*=\s*(?Ptrue|false)" +) + + +def _running_under_venv() -> bool: + """Checks if sys.base_prefix and sys.prefix match. + + This handles PEP 405 compliant virtual environments. + """ + return sys.prefix != getattr(sys, "base_prefix", sys.prefix) + + +def _running_under_regular_virtualenv() -> bool: + """Checks if sys.real_prefix is set. + + This handles virtual environments created with pypa's virtualenv. + """ + # pypa/virtualenv case + return hasattr(sys, "real_prefix") + + +def running_under_virtualenv() -> bool: + """Return True if we're running inside a virtualenv, False otherwise.""" + return _running_under_venv() or _running_under_regular_virtualenv() + + +def _get_pyvenv_cfg_lines() -> Optional[List[str]]: + """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines + + Returns None, if it could not read/access the file. + """ + pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg") + try: + # Although PEP 405 does not specify, the built-in venv module always + # writes with UTF-8. (pypa/pip#8717) + with open(pyvenv_cfg_file, encoding="utf-8") as f: + return f.read().splitlines() # avoids trailing newlines + except OSError: + return None + + +def _no_global_under_venv() -> bool: + """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion + + PEP 405 specifies that when system site-packages are not supposed to be + visible from a virtual environment, `pyvenv.cfg` must contain the following + line: + + include-system-site-packages = false + + Additionally, log a warning if accessing the file fails. + """ + cfg_lines = _get_pyvenv_cfg_lines() + if cfg_lines is None: + # We're not in a "sane" venv, so assume there is no system + # site-packages access (since that's PEP 405's default state). + logger.warning( + "Could not access 'pyvenv.cfg' despite a virtual environment " + "being active. Assuming global site-packages is not accessible " + "in this environment." + ) + return True + + for line in cfg_lines: + match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) + if match is not None and match.group("value") == "false": + return True + return False + + +def _no_global_under_regular_virtualenv() -> bool: + """Check if "no-global-site-packages.txt" exists beside site.py + + This mirrors logic in pypa/virtualenv for determining whether system + site-packages are visible in the virtual environment. + """ + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_site_packages_file = os.path.join( + site_mod_dir, + "no-global-site-packages.txt", + ) + return os.path.exists(no_global_site_packages_file) + + +def virtualenv_no_global() -> bool: + """Returns a boolean, whether running in venv with no system site-packages.""" + # PEP 405 compliance needs to be checked first since virtualenv >=20 would + # return True for both checks, but is only able to use the PEP 405 config. + if _running_under_venv(): + return _no_global_under_venv() + + if _running_under_regular_virtualenv(): + return _no_global_under_regular_virtualenv() + + return False diff --git a/venv/Lib/site-packages/pip/_internal/utils/wheel.py b/venv/Lib/site-packages/pip/_internal/utils/wheel.py new file mode 100644 index 000000000..e5e3f34ed --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/utils/wheel.py @@ -0,0 +1,136 @@ +"""Support functions for working with wheel files. +""" + +import logging +from email.message import Message +from email.parser import Parser +from typing import Tuple +from zipfile import BadZipFile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import UnsupportedWheel + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +def parse_wheel(wheel_zip: ZipFile, name: str) -> Tuple[str, Message]: + """Extract information from the provided wheel, ensuring it meets basic + standards. + + Returns the name of the .dist-info directory and the parsed WHEEL metadata. + """ + try: + info_dir = wheel_dist_info_dir(wheel_zip, name) + metadata = wheel_metadata(wheel_zip, info_dir) + version = wheel_version(metadata) + except UnsupportedWheel as e: + raise UnsupportedWheel("{} has an invalid wheel, {}".format(name, str(e))) + + check_compatibility(version, name) + + return info_dir, metadata + + +def wheel_dist_info_dir(source: ZipFile, name: str) -> str: + """Returns the name of the contained .dist-info directory. + + Raises AssertionError or UnsupportedWheel if not found, >1 found, or + it doesn't match the provided name. + """ + # Zip file path separators must be / + subdirs = {p.split("/", 1)[0] for p in source.namelist()} + + info_dirs = [s for s in subdirs if s.endswith(".dist-info")] + + if not info_dirs: + raise UnsupportedWheel(".dist-info directory not found") + + if len(info_dirs) > 1: + raise UnsupportedWheel( + "multiple .dist-info directories found: {}".format(", ".join(info_dirs)) + ) + + info_dir = info_dirs[0] + + info_dir_name = canonicalize_name(info_dir) + canonical_name = canonicalize_name(name) + if not info_dir_name.startswith(canonical_name): + raise UnsupportedWheel( + ".dist-info directory {!r} does not start with {!r}".format( + info_dir, canonical_name + ) + ) + + return info_dir + + +def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes: + try: + return source.read(path) + # BadZipFile for general corruption, KeyError for missing entry, + # and RuntimeError for password-protected files + except (BadZipFile, KeyError, RuntimeError) as e: + raise UnsupportedWheel(f"could not read {path!r} file: {e!r}") + + +def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message: + """Return the WHEEL metadata of an extracted wheel, if possible. + Otherwise, raise UnsupportedWheel. + """ + path = f"{dist_info_dir}/WHEEL" + # Zip file path separators must be / + wheel_contents = read_wheel_metadata_file(source, path) + + try: + wheel_text = wheel_contents.decode() + except UnicodeDecodeError as e: + raise UnsupportedWheel(f"error decoding {path!r}: {e!r}") + + # FeedParser (used by Parser) does not raise any exceptions. The returned + # message may have .defects populated, but for backwards-compatibility we + # currently ignore them. + return Parser().parsestr(wheel_text) + + +def wheel_version(wheel_data: Message) -> Tuple[int, ...]: + """Given WHEEL metadata, return the parsed Wheel-Version. + Otherwise, raise UnsupportedWheel. + """ + version_text = wheel_data["Wheel-Version"] + if version_text is None: + raise UnsupportedWheel("WHEEL is missing Wheel-Version") + + version = version_text.strip() + + try: + return tuple(map(int, version.split("."))) + except ValueError: + raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}") + + +def check_compatibility(version: Tuple[int, ...], name: str) -> None: + """Raises errors or warns if called with an incompatible Wheel-Version. + + pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "{}'s Wheel-Version ({}) is not compatible with this version " + "of pip".format(name, ".".join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + "Installing from a newer Wheel-Version (%s)", + ".".join(map(str, version)), + ) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/__init__.py b/venv/Lib/site-packages/pip/_internal/vcs/__init__.py new file mode 100644 index 000000000..b6beddbe6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/__init__.py @@ -0,0 +1,15 @@ +# Expose a limited set of classes and functions so callers outside of +# the vcs package don't need to import deeper than `pip._internal.vcs`. +# (The test directory may still need to import from a vcs sub-package.) +# Import all vcs modules to register each VCS in the VcsSupport object. +import pip._internal.vcs.bazaar +import pip._internal.vcs.git +import pip._internal.vcs.mercurial +import pip._internal.vcs.subversion # noqa: F401 +from pip._internal.vcs.versioncontrol import ( # noqa: F401 + RemoteNotFoundError, + RemoteNotValidError, + is_url, + make_vcs_requirement_url, + vcs, +) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49c1dc3a03eb62ed02ecc19ff0cf0e44c834d062 GIT binary patch literal 516 zcmZWm%Sr<=6wP${m{z(Hp`eRyyXbT;B7)C_6seEJ5F9cyp~NPW@g^D2Kk^Iwmw+o* z{(>u$GDu-=$T_*^kel2@j>jY9;`8|{d*~qa?UUVb8ai`Rc_>g3aFhgF?lc@W+}(1A z_e4MGi$O9FQ4)z^G8Cg^6u6!DXcqpsDrhSJITlC4ht-@riKOh<&C~ z1Kdso+0eAkRSNXgFrb2#dh3KvobB03#i}@ErKV649y>A4$U7lmL+99ow!LQB9=2sc zAveGXw?}PLnXIOum@MtI?KV~}OAV5Pe?162bUpMu^c{R482hz{-|YMtKPp!fuZ&Uz zU&!3}-W0xO`o?7VihSy(!ZfG}cWOKosp}n-3%?I;YD`;g4!9vy!+Sy{TNGxuhFY)CI5_BF}tj7Fj7V~-g z%n4Tb;`u6HxgfBfd|~zKFF+e>ujgp`IFU;Ge;BKz$fH!dPbcG)_iWwxJYkIIPx;qM zH(4UbX><~fBQ@#~-OQo`9>ztMMLC1<9L|TT2qz-#x!V79qDH^ZhlO5#!m~p0y+Z94 zlbn4fL?LwJ2|udNle+aME+m}%pvaXdQtceYGDh8Qe#XNvA-{)?TLEEKU^5ap%nm4X z0+-Ri<2B}TpLx8_{S9kKjs5hD1Pul=tik8l9B;BFpJyJMA2wKvEj*(^>lPO|K5Mf@ z;4Hj_v&5Ex)8>n?AD*?ueZGw6@y^h}Q@^o>gmu`;vnHGjUT3RD&If(g*!nZnXZ6}Y z^kMkZky7KbKBHt=LsH67#g#+gnkgha&$w?Qd;ue7(sbE`+hBFu~BS@+#vAKdSMDIv!FCle{7{=*`kWIR{0|0q$PPX_(n zL`b#uM^SvmW7R+6`BDFIGU&@h@vU(bA4L0H_Q%P1Cron11weEMAhI(sKG+_g=*4}m z!a*c?2zrN+*q2>6U817CU9MNo+I~YwQ^o=K4j@*~;mX2ffYkLPE(Qghf3g?5u*vL0 zgKN-?^&=pr&bf7Aow|yg0~n|F)K$)uoRJGi<|$?N0TCz|F;U(3<@>U$ z3iuTmld`t8bvQ}5dVwQteMh!5ITCFc^lG{RX?dBx+DnW5eJ(UjAUTBx0s>9aHIPBi zfhQ*URbKm=N}dkID$1>4w~pNgt}rf}ZA*t~w6Fa*V`i7@@QV)0)`wihqcG>k@4-;s zh0b>iyy%PV{?y+A0z#maaYJSs*9h1$Vbo&oYqM>f2mrv?Jd0! zE7*))c#MMlU^YaSTv%t$DFr?4DFqFkD-G$MrsGMPLiQYr9<1p(Mmg~=&_>su`&KpY zA^*0n+MA47r1*VcNpw(~EL|&H@nX!1*@rUDWs}=LDC^8RCsT4k`pzjiwNC-g2<;0Z zmcS6QW}N~TKcadlls9$Hh;0$5mjs|Vb+75e)x(ym{f+c$d!h@c?>>F*=s7tm zjzg&!q&E!AZ&>8%iTDsidUn}~u>fH57sGBfXHm|jhYO_cTxa=_o?G*M}i za|wY_A{mPvU;~Zwx)UZcLg<|R58DVWwHewwXZ7I z%cfT@-!h<*)ijSX9;4#34{0pU26LEr<`rg__dZRJqZ8Q$u*0?3RU_Vo>j$-wT~_2D zsBRWP{n|CU&D1s}>oeHob&Z!GqWCCFRG6@kA5I{)AZCgeb;^xPUEh@I-O+v+qSj%k z8)29gY?30~3`5+d;s`ub*H{9#aK?2VQD7G7ngn=efU_p#xJu%Tt5LzU1E>>Na>NRD zSRDntkuB}OT`oSrAr@HiGn|_~I)Iq=i literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ea3d20177aae1043e792d787cc58ed9b2befea1 GIT binary patch literal 12546 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbb753378fc97303e5137dac9ac4993b4b7f876e GIT binary patch literal 8450 zcmds6TaOz@cJ8WfHk%v{=c>_+JeGR3zKFItvUfMOGb?*nkt5rQGV4gPo#l>~?qM}& zS|Zt0RdYtekl0{Ho6T-uB%2$M8#41KcyO>aW89d^qq6+Q+h)>g^Z&W%VV+WSsBiQ-n!(3#tv zb|WlhbpEYKh_H1#yr1ZTh*Y}~99G*wvZq%fRjtJ>6*t0a)Jj4b)RJgF)Qf13S}F+| zjbI0TB9eLq^P;30bdtSlUB=C7D@+=3t;F@rwYb>~TH>nQRl3j&?uH<0TClix6%*cW z)nmPMGi=65xD_YY<4#NbvXrsZ`J3T>x?`n_?}buf@7Lm1BIAa(_iL&<+mVgeE?)ZH z_b-0%eCcBM3{j4fBot*C?xSN{Q1jBZdJgXqO&>MRUBTSfFKs+mx^kInH9D#BPhs$) z{*76<8Il0pKC9S*R~%tiGQz32VOC^9Pq<;O?ue}L9ymv=k`HG@&a@UnZ_Ppv-4XT7 zVm#U~-b3rGD4NzHTIbL@Z+cJ*=R(xithB6i(4fctu~lbcK`cHffYt(LEsbWR;}`2T zt!Kt9i!)~25_YqaQW9tJyS!#${WEn}tco?W{>sFz&WR^X>)BE3a5t-F7mipLPnr>H z7;zpuxGy6E)I6|lz95VY~=~8J{PWvXHvezv*OYNr?NiP zS`yEp^+~f+E}j=J;O)FwZ7Ez9o01cv@7njA0==CRhsmBv9iLasOE05{n3Cfl_<5y|8vS?j)s5H;abnmD=liRM|_Cb~iVy zsX;F$n%;WU2z6c>sjfo6v@64;BU?2-CS+8HbXnK%d_wSJw3ct(erQ2;>{>&~Wwgq( z!{SqMZFBowg>7!%>?jp%zY*6u&9IfI?Kh+3t9u{Em$8gtcUQKWy!9--vd$ zRg{F~c2K(;?1pN)9knl~It?ti3{ASMM$B)t5A~Ybi#rWb4TPwom-b(6%dj5Ze+oNM zv~7oXpE^CUjW3;`ZKz(2m>hnnP85h~<)IL)XYF!a0^jQLvNYV5n0x|Vr<}_*yy}JB zFsbeYDy)KPH2|huA}U1A;BVpza+vDkF}wLYR0Qku#5!g@cEaAU zK6q!_?%RE*pXph5c+c5qa&_10If4uRBYwrYm+d*nHuVwcCe|J2IMXxl!alM4u4!?5 zfO55gvDR_6XP>Zb-p}?ujAM7Xe502Yyu;MDe#QDBL)|%R_3c)%mzBTT%N}DC=H8rK zGs*RM&pYCMelMHkd;EyNKGVIK_XnSwM%MgfFZ7$i{ixY#`a=Zt>#_8K-9AaE@&UFX z-u+!bd&?gl(TI?w+uG7uh?tB*^(nhtn$bK~+BpascXbxv-wK)`Np~}bad3?3aPGuW zOS|EH7#*eOt8^Jq6eCC2ht9)#$V44PFf%qb2!%^zDJNI4n0yk2_J-Tl4qdl)u#nQM zs`G=LRO?s(jig%UW*e9>EiMIGcu465&{ZVAj=RkBtiU*)Mf&AM?(qW4v*MuDW8Je; zvNWWk-PE*cR{&S>ykDox$6W(Ly%6RurM<;!I zFH$~^P|8SzbV2cfG8afj)sJ8#Wz&eSpTz!7=(huRK_6mTbM51vCtb=slSOLUYe>s3%Rre2cr zl5Y)?%2!aljYpBXd0x?m#-5)#<*5a^@Yt52ZTBsh=>pC~(eDCa5yh#je{>5__xbg0IcXm%9!@H+KIrsOV*4 zk6;e>e99kzOUX(3+eF=9lFrf5!beg{zDkV-oehiM#OrV1F|f91=a~ng>Ry;)a(Wr< z4ev^O!)uygnwX{M8j+?w?OJ`_vm`V>#m-mg9Sq|gzq{PL6QY9M{HZ8VeYk+xHMoBb zXhutIlFcW79tpwcsN zOZuSBqi!ec4hNv({>;7E(4KP%KoyKacL1^O4_Sg)M@+f~PB9X2N&xK$t7FOMX++OS z&B?D_BRl4|;skI9J$UCZ*^66#J2j663V|W8l(9VYpH}`QLOEgJu^mW2jX&%L_?1eY zBzq-&DhNsBMHJd?#Jjstk?cVrTTyFQ&QjO2C`#@aq|L@M+N}-|R?k8~lF_Rq@zM^7 z-}K=ZQxGHfm?X4;fd*R~$1`V-(&hj$=QAhc{bzBOT49~n#_nU1!o-EpJrYyqLjD41 zFBk$GtBGsDVe>oou>RnHqbk<`kD6;3OV>5+01Hr zFF{xjU=`{6T|6x=a81JMyS>bDPGn%$u9_NI$Fzn(NA4u~WF{%xnMGewAmBNIed}jo z85vwx_L?=Q<<>wc4S#ysH>@Kj*e# zLP&DQi=v1=SIkiml`I`E)7S}GFL$2>_h-bsSb%2PVo@xK<&W%sK3M_fd`cOD$JAdL z`+Z9DjG=iJG%<>3_PzJ5R?&e`IQ)n7R0K4c^S;~nzH7DEfz|WmKPRiO?5sc2b9*y& z=rH_|QN6UXWejqO>4mokAsBfyCR~zaaI~e_tD60y<}bb2weyAi#{?V`{uen*89cY} zC^CxhEvyd~`vbKS)?G&eMTE6xNuB^asdmJE#_tiLu#XMs!#iz+Eo~z(gr~|kUeruX z3vT{O1NI*=S^M=rqP1w@7p(5(F~OYn3^uNiel*nUs0`Qjj=T(v@xNJgoGpeM`VDvWbcsX+hxKQj>rJ*d5@~22EB(AZQWXGKM5k205jZD15D?{5zG!LxOOt20i`1MW* zXM{qx!9kFVPOr6&B$osjI7q(%15f$$YmErK8~Kq3znNwnHvOx9LfJka*}NpcX|{F^ zJ$N_?LXMR9aINt`BbFmt6jy%u;ib}tANtYcgme*Xh4OwF1Fsr`Y9qhPgenrD%4uk^ zDT7FbYSRazUrUpLoBrGN(PRWdgit~ek+NPp<;;9VDn9R@;+ zAO{w!gT`s)n}_C=CBsNyFVeMqVG0O@A){oFPyT z#34dhy;bv*7usJiD)uV7=vjoyyTLv5=-G=*E16S|q#3W5nY~mFxvc3P!cW2oB36W-Fd=lgTEAyw9yh`ogqr#W;NA^!VnEg{A^T__$k@MKyr`jq15OXBOoYUL-W3+A3wu-2nZp-<3(Vf`TfX;o4 zDm|s)gObNyMfSN`ZN{R5e?6;kR;%Pir#-39P3BkUWY~_)1f5ND#7fT?;Aw`)K8ZBc za(3dlA8|(4oDK-%WqS0oeJZ=P~u7M zQ$g;mu_p#2j4(@LT>gv-x*|yjqGt!`+FA%NWstHp_xUOfF`3N;)F{88$T{*XWSGpC zliOmi;=%7a9Vq{To^yQub6$Lg@hk~1|AHRQ3!n2Dj63Ty{?a;IbykWi>&0b$VK{5_ z%k!U~TfLZ+_SbbUFog1S!H=hzzeeVZs9KPmYA?-58i=@~iQmbb2`^`Dadfjus*L*EvA% z4U;64e?pA}H98AB(Z+u;vQAAA6-_D{R1oL%C&(^r3jPu})h<(`E79JSR1{x_JX^{~ f;UV<#*fLw^^VxNl_wx9ggTC{&^#kh%#Y_JKzsHK3 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-310.pyc b/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28b5d4d1ede63394d1ffa205fa7868f62e79b32b GIT binary patch literal 21145 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 Izc`!yKYa9k`Tzg` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py b/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py new file mode 100644 index 000000000..a7b16e2e0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py @@ -0,0 +1,101 @@ +import logging +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = "bzr" + dirname = ".bzr" + repo_name = "branch" + schemes = ( + "bzr+http", + "bzr+https", + "bzr+ssh", + "bzr+sftp", + "bzr+ftp", + "bzr+lp", + "bzr+file", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + elif verbosity == 1: + flag = "" + else: + flag = f"-{'v'*verbosity}" + cmd_args = make_command("branch", flag, rev_options.to_args(), url, dest) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(make_command("switch", url), cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command("pull", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "bzr+" + url + return url, rev, user_pass + + @classmethod + def get_remote_url(cls, location: str) -> str: + urls = cls.run_command( + ["info"], show_stdout=False, stdout_only=True, cwd=location + ) + for line in urls.splitlines(): + line = line.strip() + for x in ("checkout of branch: ", "parent branch: "): + if line.startswith(x): + repo = line.split(x)[1] + if cls._is_local_repository(repo): + return path_to_url(repo) + return repo + raise RemoteNotFoundError + + @classmethod + def get_revision(cls, location: str) -> str: + revision = cls.run_command( + ["revno"], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return revision.splitlines()[-1] + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/git.py b/venv/Lib/site-packages/pip/_internal/vcs/git.py new file mode 100644 index 000000000..8d1d49937 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/git.py @@ -0,0 +1,526 @@ +import logging +import os.path +import pathlib +import re +import urllib.parse +import urllib.request +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path, hide_url +from pip._internal.utils.subprocess import make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RemoteNotValidError, + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +urlsplit = urllib.parse.urlsplit +urlunsplit = urllib.parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +GIT_VERSION_REGEX = re.compile( + r"^git version " # Prefix. + r"(\d+)" # Major. + r"\.(\d+)" # Dot, minor. + r"(?:\.(\d+))?" # Optional dot, patch. + r".*$" # Suffix, including any pre- and post-release segments we don't care about. +) + +HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$") + +# SCP (Secure copy protocol) shorthand. e.g. 'git@example.com:foo/bar.git' +SCP_REGEX = re.compile( + r"""^ + # Optional user, e.g. 'git@' + (\w+@)? + # Server, e.g. 'github.com'. + ([^/:]+): + # The server-side path. e.g. 'user/project.git'. Must start with an + # alphanumeric character so as not to be confusable with a Windows paths + # like 'C:/foo/bar' or 'C:\foo\bar'. + (\w[^:]*) + $""", + re.VERBOSE, +) + + +def looks_like_hash(sha: str) -> bool: + return bool(HASH_REGEX.match(sha)) + + +class Git(VersionControl): + name = "git" + dirname = ".git" + repo_name = "clone" + schemes = ( + "git+http", + "git+https", + "git+ssh", + "git+git", + "git+file", + ) + # Prevent the user's environment variables from interfering with pip: + # https://github.com/pypa/pip/issues/1130 + unset_environ = ("GIT_DIR", "GIT_WORK_TREE") + default_arg_rev = "HEAD" + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [rev] + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + _, rev_options = self.get_url_rev_options(hide_url(url)) + if not rev_options.rev: + return False + if not self.is_commit_id_equal(dest, rev_options.rev): + # the current commit is different from rev, + # which means rev was something else than a commit hash + return False + # return False in the rare case rev is both a commit hash + # and a tag or a branch; we don't want to cache in that case + # because that branch/tag could point to something else in the future + is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0]) + return not is_tag_or_branch + + def get_git_version(self) -> Tuple[int, ...]: + version = self.run_command( + ["version"], + command_desc="git version", + show_stdout=False, + stdout_only=True, + ) + match = GIT_VERSION_REGEX.match(version) + if not match: + logger.warning("Can't parse git version: %s", version) + return () + return tuple(int(c) for c in match.groups()) + + @classmethod + def get_current_branch(cls, location: str) -> Optional[str]: + """ + Return the current branch, or None if HEAD isn't at a branch + (e.g. detached HEAD). + """ + # git-symbolic-ref exits with empty stdout if "HEAD" is a detached + # HEAD rather than a symbolic ref. In addition, the -q causes the + # command to exit with status code 1 instead of 128 in this case + # and to suppress the message to stderr. + args = ["symbolic-ref", "-q", "HEAD"] + output = cls.run_command( + args, + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + ref = output.strip() + + if ref.startswith("refs/heads/"): + return ref[len("refs/heads/") :] + + return None + + @classmethod + def get_revision_sha(cls, dest: str, rev: str) -> Tuple[Optional[str], bool]: + """ + Return (sha_or_none, is_branch), where sha_or_none is a commit hash + if the revision names a remote branch or tag, otherwise None. + + Args: + dest: the repository directory. + rev: the revision name. + """ + # Pass rev to pre-filter the list. + output = cls.run_command( + ["show-ref", rev], + cwd=dest, + show_stdout=False, + stdout_only=True, + on_returncode="ignore", + ) + refs = {} + # NOTE: We do not use splitlines here since that would split on other + # unicode separators, which can be maliciously used to install a + # different revision. + for line in output.strip().split("\n"): + line = line.rstrip("\r") + if not line: + continue + try: + ref_sha, ref_name = line.split(" ", maxsplit=2) + except ValueError: + # Include the offending line to simplify troubleshooting if + # this error ever occurs. + raise ValueError(f"unexpected show-ref line: {line!r}") + + refs[ref_name] = ref_sha + + branch_ref = f"refs/remotes/origin/{rev}" + tag_ref = f"refs/tags/{rev}" + + sha = refs.get(branch_ref) + if sha is not None: + return (sha, True) + + sha = refs.get(tag_ref) + + return (sha, False) + + @classmethod + def _should_fetch(cls, dest: str, rev: str) -> bool: + """ + Return true if rev is a ref or is a commit that we don't have locally. + + Branches and tags are not considered in this method because they are + assumed to be always available locally (which is a normal outcome of + ``git clone`` and ``git fetch --tags``). + """ + if rev.startswith("refs/"): + # Always fetch remote refs. + return True + + if not looks_like_hash(rev): + # Git fetch would fail with abbreviated commits. + return False + + if cls.has_commit(dest, rev): + # Don't fetch if we have the commit locally. + return False + + return True + + @classmethod + def resolve_revision( + cls, dest: str, url: HiddenText, rev_options: RevOptions + ) -> RevOptions: + """ + Resolve a revision to a new RevOptions object with the SHA1 of the + branch, tag, or ref if found. + + Args: + rev_options: a RevOptions object. + """ + rev = rev_options.arg_rev + # The arg_rev property's implementation for Git ensures that the + # rev return value is always non-None. + assert rev is not None + + sha, is_branch = cls.get_revision_sha(dest, rev) + + if sha is not None: + rev_options = rev_options.make_new(sha) + rev_options.branch_name = rev if is_branch else None + + return rev_options + + # Do not show a warning for the common case of something that has + # the form of a Git commit hash. + if not looks_like_hash(rev): + logger.warning( + "Did not find branch or tag '%s', assuming revision or ref.", + rev, + ) + + if not cls._should_fetch(dest, rev): + return rev_options + + # fetch the requested revision + cls.run_command( + make_command("fetch", "-q", url, rev_options.to_args()), + cwd=dest, + ) + # Change the revision to the SHA of the ref we fetched + sha = cls.get_revision(dest, rev="FETCH_HEAD") + rev_options = rev_options.make_new(sha) + + return rev_options + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + Return whether the current commit hash equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + if not name: + # Then avoid an unnecessary subprocess call. + return False + + return cls.get_revision(dest) == name + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest)) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + else: + flags = ("--verbose", "--progress") + if self.get_git_version() >= (2, 17): + # Git added support for partial clone in 2.17 + # https://git-scm.com/docs/partial-clone + # Speeds up cloning by functioning without a complete copy of repository + self.run_command( + make_command( + "clone", + "--filter=blob:none", + *flags, + url, + dest, + ) + ) + else: + self.run_command(make_command("clone", *flags, url, dest)) + + if rev_options.rev: + # Then a specific revision was requested. + rev_options = self.resolve_revision(dest, url, rev_options) + branch_name = getattr(rev_options, "branch_name", None) + logger.debug("Rev options %s, branch_name %s", rev_options, branch_name) + if branch_name is None: + # Only do a checkout if the current commit id doesn't match + # the requested revision. + if not self.is_commit_id_equal(dest, rev_options.rev): + cmd_args = make_command( + "checkout", + "-q", + rev_options.to_args(), + ) + self.run_command(cmd_args, cwd=dest) + elif self.get_current_branch(dest) != branch_name: + # Then a specific branch was requested, and that branch + # is not yet checked out. + track_branch = f"origin/{branch_name}" + cmd_args = [ + "checkout", + "-b", + branch_name, + "--track", + track_branch, + ] + self.run_command(cmd_args, cwd=dest) + else: + sha = self.get_revision(dest) + rev_options = rev_options.make_new(sha) + + logger.info("Resolved %s to commit %s", url, rev_options.rev) + + #: repo may contain submodules + self.update_submodules(dest) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command( + make_command("config", "remote.origin.url", url), + cwd=dest, + ) + cmd_args = make_command("checkout", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + # First fetch changes from the default remote + if self.get_git_version() >= (1, 9): + # fetch tags in addition to everything else + self.run_command(["fetch", "-q", "--tags"], cwd=dest) + else: + self.run_command(["fetch", "-q"], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + rev_options = self.resolve_revision(dest, url, rev_options) + cmd_args = make_command("reset", "--hard", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + #: update submodules + self.update_submodules(dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return URL of the first remote encountered. + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + # We need to pass 1 for extra_ok_returncodes since the command + # exits with return code 1 if there are no matching lines. + stdout = cls.run_command( + ["config", "--get-regexp", r"remote\..*\.url"], + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + remotes = stdout.splitlines() + try: + found_remote = remotes[0] + except IndexError: + raise RemoteNotFoundError + + for remote in remotes: + if remote.startswith("remote.origin.url "): + found_remote = remote + break + url = found_remote.split(" ")[1] + return cls._git_remote_to_pip_url(url.strip()) + + @staticmethod + def _git_remote_to_pip_url(url: str) -> str: + """ + Convert a remote url from what git uses to what pip accepts. + + There are 3 legal forms **url** may take: + + 1. A fully qualified url: ssh://git@example.com/foo/bar.git + 2. A local project.git folder: /path/to/bare/repository.git + 3. SCP shorthand for form 1: git@example.com:foo/bar.git + + Form 1 is output as-is. Form 2 must be converted to URI and form 3 must + be converted to form 1. + + See the corresponding test test_git_remote_url_to_pip() for examples of + sample inputs/outputs. + """ + if re.match(r"\w+://", url): + # This is already valid. Pass it though as-is. + return url + if os.path.exists(url): + # A local bare remote (git clone --mirror). + # Needs a file:// prefix. + return pathlib.PurePath(url).as_uri() + scp_match = SCP_REGEX.match(url) + if scp_match: + # Add an ssh:// prefix and replace the ':' with a '/'. + return scp_match.expand(r"ssh://\1\2/\3") + # Otherwise, bail out. + raise RemoteNotValidError(url) + + @classmethod + def has_commit(cls, location: str, rev: str) -> bool: + """ + Check if rev is a commit that is available in the local repository. + """ + try: + cls.run_command( + ["rev-parse", "-q", "--verify", "sha^" + rev], + cwd=location, + log_failed_cmd=False, + ) + except InstallationError: + return False + else: + return True + + @classmethod + def get_revision(cls, location: str, rev: Optional[str] = None) -> str: + if rev is None: + rev = "HEAD" + current_rev = cls.run_command( + ["rev-parse", rev], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return current_rev.strip() + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + git_dir = cls.run_command( + ["rev-parse", "--git-dir"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + repo_root = os.path.abspath(os.path.join(git_dir, "..")) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes don't + work with a ssh:// scheme (e.g. GitHub). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + # Works around an apparent Git bug + # (see https://article.gmane.org/gmane.comp.version-control.git/146500) + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith("file"): + initial_slashes = path[: -len(path.lstrip("/"))] + newpath = initial_slashes + urllib.request.url2pathname(path).replace( + "\\", "/" + ).lstrip("/") + after_plus = scheme.find("+") + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + if "://" not in url: + assert "file:" not in url + url = url.replace("git+", "git+ssh://") + url, rev, user_pass = super().get_url_rev_and_auth(url) + url = url.replace("ssh://", "") + else: + url, rev, user_pass = super().get_url_rev_and_auth(url) + + return url, rev, user_pass + + @classmethod + def update_submodules(cls, location: str) -> None: + if not os.path.exists(os.path.join(location, ".gitmodules")): + return + cls.run_command( + ["submodule", "update", "--init", "--recursive", "-q"], + cwd=location, + ) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["rev-parse", "--show-toplevel"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under git control " + "because git is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + @staticmethod + def should_add_vcs_url_prefix(repo_url: str) -> bool: + """In either https or ssh form, requirements must be prefixed with git+.""" + return True + + +vcs.register(Git) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py b/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py new file mode 100644 index 000000000..2a005e0af --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py @@ -0,0 +1,163 @@ +import configparser +import logging +import os +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = "hg" + dirname = ".hg" + repo_name = "clone" + schemes = ( + "hg+file", + "hg+http", + "hg+https", + "hg+ssh", + "hg+static-http", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [rev] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Cloning hg %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + elif verbosity == 2: + flags = ("--verbose",) + else: + flags = ("--verbose", "--debug") + self.run_command(make_command("clone", "--noupdate", *flags, url, dest)) + self.run_command( + make_command("update", *flags, rev_options.to_args()), + cwd=dest, + ) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + repo_config = os.path.join(dest, self.dirname, "hgrc") + config = configparser.RawConfigParser() + try: + config.read(repo_config) + config.set("paths", "default", url.secret) + with open(repo_config, "w") as config_file: + config.write(config_file) + except (OSError, configparser.NoSectionError) as exc: + logger.warning("Could not switch Mercurial repository to %s: %s", url, exc) + else: + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(["pull", "-q"], cwd=dest) + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + url = cls.run_command( + ["showconfig", "paths.default"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if cls._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the repository-local changeset revision number, as an integer. + """ + current_revision = cls.run_command( + ["parents", "--template={rev}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_revision + + @classmethod + def get_requirement_revision(cls, location: str) -> str: + """ + Return the changeset identification hash, as a 40-character + hexadecimal string + """ + current_rev_hash = cls.run_command( + ["parents", "--template={node}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_rev_hash + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + repo_root = cls.run_command( + ["root"], show_stdout=False, stdout_only=True, cwd=location + ).strip() + if not os.path.isabs(repo_root): + repo_root = os.path.abspath(os.path.join(location, repo_root)) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["root"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under hg control " + "because hg is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + +vcs.register(Mercurial) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/subversion.py b/venv/Lib/site-packages/pip/_internal/vcs/subversion.py new file mode 100644 index 000000000..89c8754ce --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/subversion.py @@ -0,0 +1,324 @@ +import logging +import os +import re +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import ( + HiddenText, + display_path, + is_console_interactive, + is_installable_dir, + split_auth_from_netloc, +) +from pip._internal.utils.subprocess import CommandArgs, make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile(r'committed-rev="(\d+)"') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r"(.*)") + + +class Subversion(VersionControl): + name = "svn" + dirname = ".svn" + repo_name = "checkout" + schemes = ("svn+ssh", "svn+http", "svn+https", "svn+svn", "svn+file") + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + return True + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, _ in os.walk(location): + if cls.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(cls.dirname) + entries_fn = os.path.join(base, cls.dirname, "entries") + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = cls._get_svn_url_rev(base) + + if base == location: + assert dirurl is not None + base = dirurl + "/" # save the root url + elif not dirurl or not dirurl.startswith(base): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return str(revision) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + This override allows the auth information to be passed to svn via the + --username and --password options instead of via the URL. + """ + if scheme == "ssh": + # The --username and --password options can't be used for + # svn+ssh URLs, so keep the auth information in the URL. + return super().get_netloc_and_auth(netloc, scheme) + + return split_auth_from_netloc(netloc) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "svn+" + url + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + extra_args: CommandArgs = [] + if username: + extra_args += ["--username", username] + if password: + extra_args += ["--password", password] + + return extra_args + + @classmethod + def get_remote_url(cls, location: str) -> str: + # In cases where the source is in a subdirectory, we have to look up in + # the location until we find a valid project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + raise RemoteNotFoundError + + url, _rev = cls._get_svn_url_rev(location) + if url is None: + raise RemoteNotFoundError + + return url + + @classmethod + def _get_svn_url_rev(cls, location: str) -> Tuple[Optional[str], int]: + from pip._internal.exceptions import InstallationError + + entries_path = os.path.join(location, cls.dirname, "entries") + if os.path.exists(entries_path): + with open(entries_path) as f: + data = f.read() + else: # subversion >= 1.7 does not have the 'entries' file + data = "" + + url = None + if data.startswith("8") or data.startswith("9") or data.startswith("10"): + entries = list(map(str.splitlines, data.split("\n\x0c\n"))) + del entries[0][0] # get rid of the '8' + url = entries[0][3] + revs = [int(d[9]) for d in entries if len(d) > 9 and d[9]] + [0] + elif data.startswith("= 1.7 + # Note that using get_remote_call_options is not necessary here + # because `svn info` is being run against a local directory. + # We don't need to worry about making sure interactive mode + # is being used to prompt for passwords, because passwords + # are only potentially needed for remote server requests. + xml = cls.run_command( + ["info", "--xml", location], + show_stdout=False, + stdout_only=True, + ) + match = _svn_info_xml_url_re.search(xml) + assert match is not None + url = match.group(1) + revs = [int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + def __init__(self, use_interactive: bool = None) -> None: + if use_interactive is None: + use_interactive = is_console_interactive() + self.use_interactive = use_interactive + + # This member is used to cache the fetched version of the current + # ``svn`` client. + # Special value definitions: + # None: Not evaluated yet. + # Empty tuple: Could not parse version. + self._vcs_version: Optional[Tuple[int, ...]] = None + + super().__init__() + + def call_vcs_version(self) -> Tuple[int, ...]: + """Query the version of the currently installed Subversion client. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + # Example versions: + # svn, version 1.10.3 (r1842928) + # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 + # svn, version 1.7.14 (r1542130) + # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu + # svn, version 1.12.0-SlikSvn (SlikSvn/1.12.0) + # compiled May 28 2019, 13:44:56 on x86_64-microsoft-windows6.2 + version_prefix = "svn, version " + version = self.run_command(["--version"], show_stdout=False, stdout_only=True) + if not version.startswith(version_prefix): + return () + + version = version[len(version_prefix) :].split()[0] + version_list = version.partition("-")[0].split(".") + try: + parsed_version = tuple(map(int, version_list)) + except ValueError: + return () + + return parsed_version + + def get_vcs_version(self) -> Tuple[int, ...]: + """Return the version of the currently installed Subversion client. + + If the version of the Subversion client has already been queried, + a cached value will be used. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + if self._vcs_version is not None: + # Use cached version, if available. + # If parsing the version failed previously (empty tuple), + # do not attempt to parse it again. + return self._vcs_version + + vcs_version = self.call_vcs_version() + self._vcs_version = vcs_version + return vcs_version + + def get_remote_call_options(self) -> CommandArgs: + """Return options to be used on calls to Subversion that contact the server. + + These options are applicable for the following ``svn`` subcommands used + in this class. + + - checkout + - switch + - update + + :return: A list of command line arguments to pass to ``svn``. + """ + if not self.use_interactive: + # --non-interactive switch is available since Subversion 0.14.4. + # Subversion < 1.8 runs in interactive mode by default. + return ["--non-interactive"] + + svn_version = self.get_vcs_version() + # By default, Subversion >= 1.8 runs in non-interactive mode if + # stdin is not a TTY. Since that is how pip invokes SVN, in + # call_subprocess(), pip must pass --force-interactive to ensure + # the user can be prompted for a password, if required. + # SVN added the --force-interactive option in SVN 1.8. Since + # e.g. RHEL/CentOS 7, which is supported until 2024, ships with + # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip + # can't safely add the option if the SVN version is < 1.8 (or unknown). + if svn_version >= (1, 8): + return ["--force-interactive"] + + return [] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + else: + flag = "" + cmd_args = make_command( + "checkout", + flag, + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "switch", + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "update", + self.get_remote_call_options(), + rev_options.to_args(), + dest, + ) + self.run_command(cmd_args) + + +vcs.register(Subversion) diff --git a/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py b/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py new file mode 100644 index 000000000..02bbf68e7 --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py @@ -0,0 +1,705 @@ +"""Handles all VCS (version control) support""" + +import logging +import os +import shutil +import sys +import urllib.parse +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + Iterator, + List, + Mapping, + Optional, + Tuple, + Type, + Union, +) + +from pip._internal.cli.spinners import SpinnerInterface +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import ( + HiddenText, + ask_path_exists, + backup_dir, + display_path, + hide_url, + hide_value, + is_installable_dir, + rmtree, +) +from pip._internal.utils.subprocess import ( + CommandArgs, + call_subprocess, + format_command_args, + make_command, +) +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + + +__all__ = ["vcs"] + + +logger = logging.getLogger(__name__) + +AuthInfo = Tuple[Optional[str], Optional[str]] + + +def is_url(name: str) -> bool: + """ + Return true if the name looks like a URL. + """ + scheme = get_url_scheme(name) + if scheme is None: + return False + return scheme in ["http", "https", "file", "ftp"] + vcs.all_schemes + + +def make_vcs_requirement_url( + repo_url: str, rev: str, project_name: str, subdir: Optional[str] = None +) -> str: + """ + Return the URL for a VCS requirement. + + Args: + repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). + project_name: the (unescaped) project name. + """ + egg_project_name = project_name.replace("-", "_") + req = f"{repo_url}@{rev}#egg={egg_project_name}" + if subdir: + req += f"&subdirectory={subdir}" + + return req + + +def find_path_to_project_root_from_repo_root( + location: str, repo_root: str +) -> Optional[str]: + """ + Find the the Python project's root by searching up the filesystem from + `location`. Return the path to project root relative to `repo_root`. + Return None if the project root is `repo_root`, or cannot be found. + """ + # find project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find a Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + if os.path.samefile(repo_root, location): + return None + + return os.path.relpath(location, repo_root) + + +class RemoteNotFoundError(Exception): + pass + + +class RemoteNotValidError(Exception): + def __init__(self, url: str): + super().__init__(url) + self.url = url + + +class RevOptions: + + """ + Encapsulates a VCS-specific revision to install, along with any VCS + install options. + + Instances of this class should be treated as if immutable. + """ + + def __init__( + self, + vc_class: Type["VersionControl"], + rev: Optional[str] = None, + extra_args: Optional[CommandArgs] = None, + ) -> None: + """ + Args: + vc_class: a VersionControl subclass. + rev: the name of the revision to install. + extra_args: a list of extra options. + """ + if extra_args is None: + extra_args = [] + + self.extra_args = extra_args + self.rev = rev + self.vc_class = vc_class + self.branch_name: Optional[str] = None + + def __repr__(self) -> str: + return f"" + + @property + def arg_rev(self) -> Optional[str]: + if self.rev is None: + return self.vc_class.default_arg_rev + + return self.rev + + def to_args(self) -> CommandArgs: + """ + Return the VCS-specific command arguments. + """ + args: CommandArgs = [] + rev = self.arg_rev + if rev is not None: + args += self.vc_class.get_base_rev_args(rev) + args += self.extra_args + + return args + + def to_display(self) -> str: + if not self.rev: + return "" + + return f" (to revision {self.rev})" + + def make_new(self, rev: str) -> "RevOptions": + """ + Make a copy of the current instance, but with a new rev. + + Args: + rev: the name of the revision for the new object. + """ + return self.vc_class.make_rev_options(rev, extra_args=self.extra_args) + + +class VcsSupport: + _registry: Dict[str, "VersionControl"] = {} + schemes = ["ssh", "git", "hg", "bzr", "sftp", "svn"] + + def __init__(self) -> None: + # Register more schemes with urlparse for various version control + # systems + urllib.parse.uses_netloc.extend(self.schemes) + super().__init__() + + def __iter__(self) -> Iterator[str]: + return self._registry.__iter__() + + @property + def backends(self) -> List["VersionControl"]: + return list(self._registry.values()) + + @property + def dirnames(self) -> List[str]: + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self) -> List[str]: + schemes: List[str] = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls: Type["VersionControl"]) -> None: + if not hasattr(cls, "name"): + logger.warning("Cannot register VCS %s", cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls() + logger.debug("Registered VCS backend: %s", cls.name) + + def unregister(self, name: str) -> None: + if name in self._registry: + del self._registry[name] + + def get_backend_for_dir(self, location: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object if a repository of that type is found + at the given directory. + """ + vcs_backends = {} + for vcs_backend in self._registry.values(): + repo_path = vcs_backend.get_repository_root(location) + if not repo_path: + continue + logger.debug("Determine that %s uses VCS: %s", location, vcs_backend.name) + vcs_backends[repo_path] = vcs_backend + + if not vcs_backends: + return None + + # Choose the VCS in the inner-most directory. Since all repository + # roots found here would be either `location` or one of its + # parents, the longest path should have the most path components, + # i.e. the backend representing the inner-most repository. + inner_most_repo_path = max(vcs_backends, key=len) + return vcs_backends[inner_most_repo_path] + + def get_backend_for_scheme(self, scheme: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + for vcs_backend in self._registry.values(): + if scheme in vcs_backend.schemes: + return vcs_backend + return None + + def get_backend(self, name: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + name = name.lower() + return self._registry.get(name) + + +vcs = VcsSupport() + + +class VersionControl: + name = "" + dirname = "" + repo_name = "" + # List of supported schemes for this Version Control + schemes: Tuple[str, ...] = () + # Iterable of environment variable names to pass to call_subprocess(). + unset_environ: Tuple[str, ...] = () + default_arg_rev: Optional[str] = None + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + """ + Return whether the vcs prefix (e.g. "git+") should be added to a + repository's remote url when used in a requirement. + """ + return not remote_url.lower().startswith(f"{cls.name}:") + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + return None + + @classmethod + def get_requirement_revision(cls, repo_dir: str) -> str: + """ + Return the revision string that should be used in a requirement. + """ + return cls.get_revision(repo_dir) + + @classmethod + def get_src_requirement(cls, repo_dir: str, project_name: str) -> str: + """ + Return the requirement string to use to redownload the files + currently at the given repository directory. + + Args: + project_name: the (unescaped) project name. + + The return value has a form similar to the following: + + {repository_url}@{revision}#egg={project_name} + """ + repo_url = cls.get_remote_url(repo_dir) + + if cls.should_add_vcs_url_prefix(repo_url): + repo_url = f"{cls.name}+{repo_url}" + + revision = cls.get_requirement_revision(repo_dir) + subdir = cls.get_subdirectory(repo_dir) + req = make_vcs_requirement_url(repo_url, revision, project_name, subdir=subdir) + + return req + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + """ + Return the base revision arguments for a vcs command. + + Args: + rev: the name of a revision to install. Cannot be None. + """ + raise NotImplementedError + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + """ + Return true if the commit hash checked out at dest matches + the revision in url. + + Always return False, if the VCS does not support immutable commit + hashes. + + This method does not check if there are local uncommitted changes + in dest after checkout, as pip currently has no use case for that. + """ + return False + + @classmethod + def make_rev_options( + cls, rev: Optional[str] = None, extra_args: Optional[CommandArgs] = None + ) -> RevOptions: + """ + Return a RevOptions object. + + Args: + rev: the name of a revision to install. + extra_args: a list of extra options. + """ + return RevOptions(cls, rev, extra_args=extra_args) + + @classmethod + def _is_local_repository(cls, repo: str) -> bool: + """ + posix absolute paths start with os.path.sep, + win32 ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or bool(drive) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + Parse the repository URL's netloc, and return the new netloc to use + along with auth information. + + Args: + netloc: the original repository URL netloc. + scheme: the repository URL's scheme without the vcs prefix. + + This is mainly for the Subversion class to override, so that auth + information can be provided via the --username and --password options + instead of through the URL. For other subclasses like Git without + such an option, auth information must stay in the URL. + + Returns: (netloc, (username, password)). + """ + return netloc, (None, None) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Parse the repository URL to use, and return the URL, revision, + and auth info to use. + + Returns: (url, rev, (username, password)). + """ + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + if "+" not in scheme: + raise ValueError( + "Sorry, {!r} is a malformed VCS url. " + "The format is +://, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp".format(url) + ) + # Remove the vcs prefix. + scheme = scheme.split("+", 1)[1] + netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) + rev = None + if "@" in path: + path, rev = path.rsplit("@", 1) + if not rev: + raise InstallationError( + "The URL {!r} has an empty revision (after @) " + "which is not supported. Include a revision after @ " + "or remove @ from the URL.".format(url) + ) + url = urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + """ + Return the RevOptions "extra arguments" to use in obtain(). + """ + return [] + + def get_url_rev_options(self, url: HiddenText) -> Tuple[HiddenText, RevOptions]: + """ + Return the URL and RevOptions object to use in obtain(), + as a tuple (url, rev_options). + """ + secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) + username, secret_password = user_pass + password: Optional[HiddenText] = None + if secret_password is not None: + password = hide_value(secret_password) + extra_args = self.make_rev_args(username, password) + rev_options = self.make_rev_options(rev, extra_args=extra_args) + + return hide_url(secret_url), rev_options + + @staticmethod + def normalize_url(url: str) -> str: + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib.parse.unquote(url).rstrip("/") + + @classmethod + def compare_urls(cls, url1: str, url2: str) -> bool: + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return cls.normalize_url(url1) == cls.normalize_url(url2) + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + """ + Fetch a revision from a repository, in the case that this is the + first fetch from the repository. + + Args: + dest: the directory to fetch the repository to. + rev_options: a RevOptions object. + verbosity: verbosity level. + """ + raise NotImplementedError + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Switch the repo at ``dest`` to point to ``URL``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Update an already-existing repo to the given ``rev_options``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + Return whether the id of the current commit equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + raise NotImplementedError + + def obtain(self, dest: str, url: HiddenText, verbosity: int) -> None: + """ + Install or update in editable mode the package represented by this + VersionControl object. + + :param dest: the repository directory in which to install or update. + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + url, rev_options = self.get_url_rev_options(url) + + if not os.path.exists(dest): + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + rev_display = rev_options.to_display() + if self.is_repository_directory(dest): + existing_url = self.get_remote_url(dest) + if self.compare_urls(existing_url, url.secret): + logger.debug( + "%s in %s exists, and has correct URL (%s)", + self.repo_name.title(), + display_path(dest), + url, + ) + if not self.is_commit_id_equal(dest, rev_options.rev): + logger.info( + "Updating %s %s%s", + display_path(dest), + self.repo_name, + rev_display, + ) + self.update(dest, url, rev_options) + else: + logger.info("Skipping because already up-to-date.") + return + + logger.warning( + "%s %s in %s exists with URL %s", + self.name, + self.repo_name, + display_path(dest), + existing_url, + ) + prompt = ("(s)witch, (i)gnore, (w)ipe, (b)ackup ", ("s", "i", "w", "b")) + else: + logger.warning( + "Directory %s already exists, and is not a %s %s.", + dest, + self.name, + self.repo_name, + ) + # https://github.com/python/mypy/issues/1174 + prompt = ("(i)gnore, (w)ipe, (b)ackup ", ("i", "w", "b")) # type: ignore + + logger.warning( + "The plan is to install the %s repository %s", + self.name, + url, + ) + response = ask_path_exists("What to do? {}".format(prompt[0]), prompt[1]) + + if response == "a": + sys.exit(-1) + + if response == "w": + logger.warning("Deleting %s", display_path(dest)) + rmtree(dest) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + if response == "b": + dest_dir = backup_dir(dest) + logger.warning("Backing up %s to %s", display_path(dest), dest_dir) + shutil.move(dest, dest_dir) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + # Do nothing if the response is "i". + if response == "s": + logger.info( + "Switching %s %s to %s%s", + self.repo_name, + display_path(dest), + url, + rev_display, + ) + self.switch(dest, url, rev_options) + + def unpack(self, location: str, url: HiddenText, verbosity: int) -> None: + """ + Clean up current location and download the url repository + (and vcs infos) into location + + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location, url=url, verbosity=verbosity) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return the url used at location + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + raise NotImplementedError + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the current commit id of the files at the given location. + """ + raise NotImplementedError + + @classmethod + def run_command( + cls, + cmd: Union[List[str], CommandArgs], + show_stdout: bool = True, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + command_desc: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: bool = True, + stdout_only: bool = False, + ) -> str: + """ + Run a VCS subcommand + This is simply a wrapper around call_subprocess that adds the VCS + command name, and checks that the VCS is available + """ + cmd = make_command(cls.name, *cmd) + if command_desc is None: + command_desc = format_command_args(cmd) + try: + return call_subprocess( + cmd, + show_stdout, + cwd, + on_returncode=on_returncode, + extra_ok_returncodes=extra_ok_returncodes, + command_desc=command_desc, + extra_environ=extra_environ, + unset_environ=cls.unset_environ, + spinner=spinner, + log_failed_cmd=log_failed_cmd, + stdout_only=stdout_only, + ) + except FileNotFoundError: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + raise BadCommand( + f"Cannot find command {cls.name!r} - do you have " + f"{cls.name!r} installed and in your PATH?" + ) + except PermissionError: + # errno.EACCES = Permission denied + # This error occurs, for instance, when the command is installed + # only for another user. So, the current user don't have + # permission to call the other user command. + raise BadCommand( + f"No permission to execute {cls.name!r} - install it " + f"locally, globally (ask admin), or check your PATH. " + f"See possible solutions at " + f"https://pip.pypa.io/en/latest/reference/pip_freeze/" + f"#fixing-permission-denied." + ) + + @classmethod + def is_repository_directory(cls, path: str) -> bool: + """ + Return whether a directory path is a repository directory. + """ + logger.debug("Checking in %s for %s (%s)...", path, cls.dirname, cls.name) + return os.path.exists(os.path.join(path, cls.dirname)) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + """ + Return the "root" (top-level) directory controlled by the vcs, + or `None` if the directory is not in any. + + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + + This can do more than is_repository_directory() alone. For + example, the Git override checks that Git is actually available. + """ + if cls.is_repository_directory(location): + return location + return None diff --git a/venv/Lib/site-packages/pip/_internal/wheel_builder.py b/venv/Lib/site-packages/pip/_internal/wheel_builder.py new file mode 100644 index 000000000..d0663443b --- /dev/null +++ b/venv/Lib/site-packages/pip/_internal/wheel_builder.py @@ -0,0 +1,377 @@ +"""Orchestrator for building wheels from InstallRequirements. +""" + +import logging +import os.path +import re +import shutil +from typing import Any, Callable, Iterable, List, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name, canonicalize_version +from pip._vendor.packaging.version import InvalidVersion, Version + +from pip._internal.cache import WheelCache +from pip._internal.exceptions import InvalidWheelFilename, UnsupportedWheel +from pip._internal.metadata import FilesystemWheel, get_wheel_distribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.build.wheel import build_wheel_pep517 +from pip._internal.operations.build.wheel_editable import build_wheel_editable +from pip._internal.operations.build.wheel_legacy import build_wheel_legacy +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ensure_dir, hash_file, is_wheel_installed +from pip._internal.utils.setuptools_build import make_setuptools_clean_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + +_egg_info_re = re.compile(r"([a-z0-9_.]+)-([a-z0-9_.!+-]+)", re.IGNORECASE) + +BinaryAllowedPredicate = Callable[[InstallRequirement], bool] +BuildResult = Tuple[List[InstallRequirement], List[InstallRequirement]] + + +def _contains_egg_info(s: str) -> bool: + """Determine whether the string looks like an egg_info. + + :param s: The string to parse. E.g. foo-2.1 + """ + return bool(_egg_info_re.search(s)) + + +def _should_build( + req: InstallRequirement, + need_wheel: bool, + check_binary_allowed: BinaryAllowedPredicate, +) -> bool: + """Return whether an InstallRequirement should be built into a wheel.""" + if req.constraint: + # never build requirements that are merely constraints + return False + if req.is_wheel: + if need_wheel: + logger.info( + "Skipping %s, due to already being wheel.", + req.name, + ) + return False + + if need_wheel: + # i.e. pip wheel, not pip install + return True + + # From this point, this concerns the pip install command only + # (need_wheel=False). + + if not req.source_dir: + return False + + if req.editable: + # we only build PEP 660 editable requirements + return req.supports_pyproject_editable() + + if req.use_pep517: + return True + + if not check_binary_allowed(req): + logger.info( + "Skipping wheel build for %s, due to binaries being disabled for it.", + req.name, + ) + return False + + if not is_wheel_installed(): + # we don't build legacy requirements if wheel is not installed + logger.info( + "Using legacy 'setup.py install' for %s, " + "since package 'wheel' is not installed.", + req.name, + ) + return False + + return True + + +def should_build_for_wheel_command( + req: InstallRequirement, +) -> bool: + return _should_build(req, need_wheel=True, check_binary_allowed=_always_true) + + +def should_build_for_install_command( + req: InstallRequirement, + check_binary_allowed: BinaryAllowedPredicate, +) -> bool: + return _should_build( + req, need_wheel=False, check_binary_allowed=check_binary_allowed + ) + + +def _should_cache( + req: InstallRequirement, +) -> Optional[bool]: + """ + Return whether a built InstallRequirement can be stored in the persistent + wheel cache, assuming the wheel cache is available, and _should_build() + has determined a wheel needs to be built. + """ + if req.editable or not req.source_dir: + # never cache editable requirements + return False + + if req.link and req.link.is_vcs: + # VCS checkout. Do not cache + # unless it points to an immutable commit hash. + assert not req.editable + assert req.source_dir + vcs_backend = vcs.get_backend_for_scheme(req.link.scheme) + assert vcs_backend + if vcs_backend.is_immutable_rev_checkout(req.link.url, req.source_dir): + return True + return False + + assert req.link + base, ext = req.link.splitext() + if _contains_egg_info(base): + return True + + # Otherwise, do not cache. + return False + + +def _get_cache_dir( + req: InstallRequirement, + wheel_cache: WheelCache, +) -> str: + """Return the persistent or temporary cache directory where the built + wheel need to be stored. + """ + cache_available = bool(wheel_cache.cache_dir) + assert req.link + if cache_available and _should_cache(req): + cache_dir = wheel_cache.get_path_for_link(req.link) + else: + cache_dir = wheel_cache.get_ephem_path_for_link(req.link) + return cache_dir + + +def _always_true(_: Any) -> bool: + return True + + +def _verify_one(req: InstallRequirement, wheel_path: str) -> None: + canonical_name = canonicalize_name(req.name or "") + w = Wheel(os.path.basename(wheel_path)) + if canonicalize_name(w.name) != canonical_name: + raise InvalidWheelFilename( + "Wheel has unexpected file name: expected {!r}, " + "got {!r}".format(canonical_name, w.name), + ) + dist = get_wheel_distribution(FilesystemWheel(wheel_path), canonical_name) + dist_verstr = str(dist.version) + if canonicalize_version(dist_verstr) != canonicalize_version(w.version): + raise InvalidWheelFilename( + "Wheel has unexpected file name: expected {!r}, " + "got {!r}".format(dist_verstr, w.version), + ) + metadata_version_value = dist.metadata_version + if metadata_version_value is None: + raise UnsupportedWheel("Missing Metadata-Version") + try: + metadata_version = Version(metadata_version_value) + except InvalidVersion: + msg = f"Invalid Metadata-Version: {metadata_version_value}" + raise UnsupportedWheel(msg) + if metadata_version >= Version("1.2") and not isinstance(dist.version, Version): + raise UnsupportedWheel( + "Metadata 1.2 mandates PEP 440 version, " + "but {!r} is not".format(dist_verstr) + ) + + +def _build_one( + req: InstallRequirement, + output_dir: str, + verify: bool, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + artifact = "editable" if editable else "wheel" + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning( + "Building %s for %s failed: %s", + artifact, + req.name, + e, + ) + return None + + # Install build deps into temporary directory (PEP 518) + with req.build_env: + wheel_path = _build_one_inside_env( + req, output_dir, build_options, global_options, editable + ) + if wheel_path and verify: + try: + _verify_one(req, wheel_path) + except (InvalidWheelFilename, UnsupportedWheel) as e: + logger.warning("Built %s for %s is invalid: %s", artifact, req.name, e) + return None + return wheel_path + + +def _build_one_inside_env( + req: InstallRequirement, + output_dir: str, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + with TempDirectory(kind="wheel") as temp_dir: + assert req.name + if req.use_pep517: + assert req.metadata_directory + assert req.pep517_backend + if global_options: + logger.warning( + "Ignoring --global-option when building %s using PEP 517", req.name + ) + if build_options: + logger.warning( + "Ignoring --build-option when building %s using PEP 517", req.name + ) + if editable: + wheel_path = build_wheel_editable( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_pep517( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_legacy( + name=req.name, + setup_py_path=req.setup_py_path, + source_dir=req.unpacked_source_directory, + global_options=global_options, + build_options=build_options, + tempd=temp_dir.path, + ) + + if wheel_path is not None: + wheel_name = os.path.basename(wheel_path) + dest_path = os.path.join(output_dir, wheel_name) + try: + wheel_hash, length = hash_file(wheel_path) + shutil.move(wheel_path, dest_path) + logger.info( + "Created wheel for %s: filename=%s size=%d sha256=%s", + req.name, + wheel_name, + length, + wheel_hash.hexdigest(), + ) + logger.info("Stored in directory: %s", output_dir) + return dest_path + except Exception as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + # Ignore return, we can't do anything else useful. + if not req.use_pep517: + _clean_one_legacy(req, global_options) + return None + + +def _clean_one_legacy(req: InstallRequirement, global_options: List[str]) -> bool: + clean_args = make_setuptools_clean_args( + req.setup_py_path, + global_options=global_options, + ) + + logger.info("Running setup.py clean for %s", req.name) + try: + call_subprocess( + clean_args, command_desc="python setup.py clean", cwd=req.source_dir + ) + return True + except Exception: + logger.error("Failed cleaning build dir for %s", req.name) + return False + + +def build( + requirements: Iterable[InstallRequirement], + wheel_cache: WheelCache, + verify: bool, + build_options: List[str], + global_options: List[str], +) -> BuildResult: + """Build wheels. + + :return: The list of InstallRequirement that succeeded to build and + the list of InstallRequirement that failed to build. + """ + if not requirements: + return [], [] + + # Build the wheels. + logger.info( + "Building wheels for collected packages: %s", + ", ".join(req.name for req in requirements), # type: ignore + ) + + with indent_log(): + build_successes, build_failures = [], [] + for req in requirements: + assert req.name + cache_dir = _get_cache_dir(req, wheel_cache) + wheel_file = _build_one( + req, + cache_dir, + verify, + build_options, + global_options, + req.editable and req.permit_editable_wheels, + ) + if wheel_file: + # Update the link for this. + req.link = Link(path_to_url(wheel_file)) + req.local_file_path = req.link.file_path + assert req.link.is_wheel + build_successes.append(req) + else: + build_failures.append(req) + + # notify success/failure + if build_successes: + logger.info( + "Successfully built %s", + " ".join([req.name for req in build_successes]), # type: ignore + ) + if build_failures: + logger.info( + "Failed to build %s", + " ".join([req.name for req in build_failures]), # type: ignore + ) + # Return a list of requirements that failed to build + return build_successes, build_failures diff --git a/venv/Lib/site-packages/pip/_vendor/__init__.py b/venv/Lib/site-packages/pip/_vendor/__init__.py new file mode 100644 index 000000000..3843cb099 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,111 @@ +""" +pip._vendor is for vendoring dependencies of pip to prevent needing pip to +depend on something external. + +Files inside of pip._vendor should be considered immutable and should only be +updated to versions from upstream. +""" +from __future__ import absolute_import + +import glob +import os.path +import sys + +# Downstream redistributors which have debundled our dependencies should also +# patch this value to be true. This will trigger the additional patching +# to cause things like "six" to be available as pip. +DEBUNDLED = False + +# By default, look in this directory for a bunch of .whl files which we will +# add to the beginning of sys.path before attempting to import anything. This +# is done to support downstream re-distributors like Debian and Fedora who +# wish to create their own Wheels for our dependencies to aid in debundling. +WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) + + +# Define a small helper function to alias our vendored modules to the real ones +# if the vendored ones do not exist. This idea of this was taken from +# https://github.com/kennethreitz/requests/pull/2567. +def vendored(modulename): + vendored_name = "{0}.{1}".format(__name__, modulename) + + try: + __import__(modulename, globals(), locals(), level=0) + except ImportError: + # We can just silently allow import failures to pass here. If we + # got to this point it means that ``import pip._vendor.whatever`` + # failed and so did ``import whatever``. Since we're importing this + # upfront in an attempt to alias imports, not erroring here will + # just mean we get a regular import error whenever pip *actually* + # tries to import one of these modules to use it, which actually + # gives us a better error message than we would have otherwise + # gotten. + pass + else: + sys.modules[vendored_name] = sys.modules[modulename] + base, head = vendored_name.rsplit(".", 1) + setattr(sys.modules[base], head, sys.modules[modulename]) + + +# If we're operating in a debundled setup, then we want to go ahead and trigger +# the aliasing of our vendored libraries as well as looking for wheels to add +# to our sys.path. This will cause all of this code to be a no-op typically +# however downstream redistributors can enable it in a consistent way across +# all platforms. +if DEBUNDLED: + # Actually look inside of WHEEL_DIR to find .whl files and add them to the + # front of our sys.path. + sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path + + # Actually alias all of our vendored dependencies. + vendored("cachecontrol") + vendored("certifi") + vendored("colorama") + vendored("distlib") + vendored("distro") + vendored("html5lib") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("six.moves.urllib.parse") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pep517") + vendored("pkg_resources") + vendored("platformdirs") + vendored("progress") + vendored("requests") + vendored("requests.exceptions") + vendored("requests.packages") + vendored("requests.packages.urllib3") + vendored("requests.packages.urllib3._collections") + vendored("requests.packages.urllib3.connection") + vendored("requests.packages.urllib3.connectionpool") + vendored("requests.packages.urllib3.contrib") + vendored("requests.packages.urllib3.contrib.ntlmpool") + vendored("requests.packages.urllib3.contrib.pyopenssl") + vendored("requests.packages.urllib3.exceptions") + vendored("requests.packages.urllib3.fields") + vendored("requests.packages.urllib3.filepost") + vendored("requests.packages.urllib3.packages") + vendored("requests.packages.urllib3.packages.ordered_dict") + vendored("requests.packages.urllib3.packages.six") + vendored("requests.packages.urllib3.packages.ssl_match_hostname") + vendored("requests.packages.urllib3.packages.ssl_match_hostname." + "_implementation") + vendored("requests.packages.urllib3.poolmanager") + vendored("requests.packages.urllib3.request") + vendored("requests.packages.urllib3.response") + vendored("requests.packages.urllib3.util") + vendored("requests.packages.urllib3.util.connection") + vendored("requests.packages.urllib3.util.request") + vendored("requests.packages.urllib3.util.response") + vendored("requests.packages.urllib3.util.retry") + vendored("requests.packages.urllib3.util.ssl_") + vendored("requests.packages.urllib3.util.timeout") + vendored("requests.packages.urllib3.util.url") + vendored("resolvelib") + vendored("tenacity") + vendored("tomli") + vendored("urllib3") diff --git a/venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e73d90aae97f488db3c032169b51063f55ca8f8b GIT binary patch literal 2916 zcmbuB-EP!I6oCD=w%6H(0O2PTsQD*Q94Jj`5vr<^P>>L+KnQiUs^#@evJPX9J2MW% zBv)xKEA#l*j$lowc#kOXk zIicCn>}np+Jg7OTc}VlH<`K;)&7+#fG>>bZ(45vhsrjDfDb3TGXEfi}3^mVcp3^+9 zc|r4{<|WO`npZSuG_Pu2)BHg5x@M#~t9e87rsjv5w=_S}oYVYR^S0(Enx85n`)PB} z+^K&J%B+my6q{K$U!ALr! zMaXH6#ZXP*R|2ylAyE+A&j@JA3Z5aXmF;|)4{1eEIKW{_8v%wI zeK|lM?t5_a6=;yTX$W)8*s|8mx+APLL)aUJa5fBNA^Qi%G@ctp;25H{ddf7^?`t?! zPmPy`aF@L`V|qmMuCZor`p7}8Evs*>TkE!HHxkygv1V_}ZrI=vczecuTzju?tVgeJ zt~0ehSb2+pp@}r3H_bpGUGPty2ogzWf1FKLEl>pyEWt@sW=v(PO$_9O&34Faw(ih1R z=6wjASsi|}u#+MaaU7Ma(%=66Y2_72YDUMjtP^I(blcV+lM|EXDU%(8;ktD-dO0Mr zlP2j9L-YtniS$y;M7EeoKc$4SBu}J=GA>9qkgn=5D*d6z$($OodG@MqLlfn61@n4x zryEs_fJA-l?;}x}FtA8_v=NB(`p`}{(g9gd{WZi(oWgp*T+%IZId}86?3OQUOQB-EKD0BqZPR-CA47T@x9UrK zPDL?Tih!pYtrzx|0}~e`vHHrpNR^b5`s`Rq!N9~<_Z5i>K_H$%-L?H?%T)@wi*r(s z*~>0FhI^|7w-LnabK@ikE-4q|WOm#$ySJWgnTRrkAqB=LOT{>+?Yy8OcT!K$@2^!N zBlXPq`Dj-Zk2w=cRkXdV%loL@S=*R^(+UM!tl;-f%Q3CS#$6)^X-ozx z*AS>DknwzhizLm&s%#0GlT3P}M0acEp!DJx(R5T=7AsLPC^HQHI2zJX^+kG=L-rFx zX;IEPYP>za@Wr#o^N$whrPIuKP;o~cNM=nvfr7ON^&hmhpFdbwcofe+eA47^=`7Q% zXiCbi=BQHZ-yIdC&s6c_H8hUV@qEiSebZ@8xxVY3ykPsbdj8+PM(e+8>6p$he*#OQ Bl-2+M literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..096e28175d36ec63e3f686ae0d12f0eb74b4465e GIT binary patch literal 38234 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%0DIP1(RNk(x2_8s{)3+ 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30d6c23c744e63893e0a1c941b45b3b4f88a0e4b GIT binary patch literal 27587 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 Bnk|#AA=HJ*k?nX_kBe z-@$eyR;>C9thiHxlq=af$G+$K+-p0T#02BV*I&z@l#t&Y*^dE|GhFU7Zh~Y)(2R;+ z))W1#F9u?$2h}heQiAwEA5=jWJm5fwRg^`DLlNmXi)DN_lH)DCn;?3$C0mMj(I+yE zH_JIMuI1bs4^}6tsxA2Bo$(T`cp=j`e$Q7jQ9hB}-6r1tPq_kHB}Jz#cG?@|uWjQK zZB3aNUP)JD1((K~(Hl@jvf$vX**um=&XhG^i&bi&+yp1->9h3o*=W5Z-w7O{ z`eFN{=Fjsl4xi6IHqP<8gc$WEs{tJPwy6P`rpe2hLMeGz#>Bg?bZqX~f*t57-_+=0W7JEg%4C4^6&x4mF9`HU7 z;XUL7K7{v(AMz0&zohY49Poo@Ox_dYD+253nSG)U{ssnQ9#IoW@!LiytpI;COS6@j z)s>cY@qnj|781h!lRVRQ3I<+LFPAnvejt~dQdIhJDwU8Ko_NzJ0L*pJn|&SMogfDJ{6auFh2fUUM)@Uqnc5#m~7^`tD;{ zuSKR8m!i5{oaPq`m1}XgNwa6^Qm93fH`4^>crB+H>XWtlOp~nSN6m9H0=Anb>6jj3 z#vXJ-8qhJ7IDShS1_7M6(%c82iKbUj7AQVg;gt)*u)PBU(H-5p+yRNe8Wy`9ChOjg zCf*Lp8TIB*BgYIZwM6K2sZ0n-=V_5|L8AUjY-Fx6P`S(kAS(MYRvx|M))=G2^GLO^mBxqt(6b4)C)zhmv9%9R&=wjZeT-aF z`MnM~z3OfVV0MEeXTJ4kXh;6db~LYbn<}3i--!m6m6g>vKwN$aG^`Qjr-013t)mpG zsVgOn-+cm%Bh%lzS)SYkdyUL14Hk1TfB89{;NsqQHFC=|ukOIKt+GcwI&?heLuZVY zW-`K!L6YFAB#}N0qeI!p=m756QFq6z4dcnJ$dRSnx$da*oAqt{^?R4uJ=WLpckf@+ z-emB0_uYXE+xnwVTE)a5>`du7cxg}9H7P`EX4hYWsT^&tzK Ozzc?<7knI2_szenxsY`L literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5557e4c3369f2abcc655553f4541d0c41169600 GIT binary patch literal 3158 zcmai0Pj4H!6(4f`Xl5kKj^m`s=1;ZT!&WU;NwGb(+aOuTPFm~=Myz04LFjZWQqjnx z87;|)Yh!$=1Ef8qr+xqhZ4dqg{VoK0>S;ehd#L*!N0!~Lfl?qfpJ`tN(E*DdQG*tuLB=sbohe*+D(7)h;u^-uc5^l6{MKTYka(|3r)Z04ly)a!fG zTEAxcZt72ieqg@6G@RD^bz(iUSdIB_Ear3P#O^m3*|pliH?WJyH^Gu06O}Wr_cD7!8`J}tm?L{xPp8ovB)@Co-?LFze+}+v*9l_IN zsLUGZT;Gh-bT1z6Zzn1LO2o4n7en0ba>3JLkppPBg(vLOF`W9(q;Cf_z-oSM<*hX$ z%wg`EpzpAz>3OUMJvX3i)${`vLfb;xvnsKC)q7ZSTD7 zX?N#IZ}YkKo^E}y)q@ibYiQV_V9Z>ot5D@Hp;4A1rFB9lw5%mo>HmfNkr1l{`wL5~ zEBnOCNC`6{r*xrpOK*0EVc#q5SxeQ9gEAfKmL4%fT#}J%~WYa`C_%YO(QyxI%7cb|}`sHndOT$Ibc%@kmH~ zN{LSzXGeE8zm0;vyPpTOi1axw#27LK8(=0U6S|Y z*!{}N8jhu$iFmq~42X$Vlmd%%ziRox(~ zQIZh>Y}tsdW3Ti89nR68!q%eff*V?KOYpA?E>))m-fgKdKObl%*(ev&SS5MZQh7^q z-bzNTL@gEY-vT@&%rnc3J6kd6tiCE$a+YVH7Zx7yR>nC)Rn?@dv((h>0cgXK$fuE6 z++L{=;#F`H8{j?NG$Ix)4A#z3n(S#8P@D_h+$)k4Wz~kdHs&z{v}muGu~>0^9U{#V zJWQNM3!%X4Sls~tZ^qg+aRYa%Ew(U5h+8-mn9cDD=+&hii@hA&ReXTD?qYKfn~$OS zK2(XzLpLOptdS;Qh@LrgjcnMrs6&r#ZC-&UG-Z2;ba7sgJ`hd_FS!QnS~?3Txuq?c zfs+exVhAR2V*x1&kfJ4>IE?I5@naZu=LjGAo+2DdS`hIuqsKPPso^v54k?Jv{r3R8 z(mSTvLlxlq6QV-UzG*bnD-FcTK2!~muBhgG6(y5OVxPdC(F#b`z#cle_6N%ls>{4L z{&7vM&##v?v;k&aQyU7bJ)!fP3%h)C7Hjey*zctDC%2$QyKlqz2XG!Fy*u-}Wq?pG z?b46#l}OLEqrWcE^f^MoAbWwny~EZt-cPbu7jSRoqE$#7LY$h2cEY8G-Z+u1gCtE` zct?sEOh{9ljG-~`6SVV`;pZX*+?8 z1Mkm*GnTX<@Dhm*N`g_5!9$a$QrBj&!0_ps@dRh$Q=H+d!x@Kn^GoyO^`LXX7vg(3 zVXk+MG303qxsjoE)0hYt=i^1dEJ5Os zZvnYG6o|h1HUHVXL2owCHhy8A7ES?S zmR;qLdLMBD<)uRW&Na-LQ=b0SKNs&$tD-Y8P&|An+Jk5$AH9;H{&$Wz&Z{m>* z(#ifcZ zA8CcWg~xJo96n5kp-Bt5pU25jd?-zrr}^y&_Jq>6EzgOX6k27~q?ezR>`)e4h!kPF z^t7`|ss}s$1n+s-aJN*97O zl1v%72Mz`)SdabS>Ok9dyHJl1A*{q3^;6r5MG_Jt!D$QddVWKBTUz7;mD37b~Jz6TX# zh26h&ADA;L+q??~l|3U7ozc9R;>cN1*ku}BOP)dDm0ZL{+;uFWWhb13@CY04?jqi+s}$qX*UpU2oRq$yl>7*i;_#d?YQ^;#F?%mz9iOMr>ukM` z=n!J*PII73>TO(Ei^1vurSdU!gGJ}jU3%-^I?_!Qv_kqAUO{GF-2kK%u^tn>x5T^& z?*{z0{vSWfRlcb{t;9b;@R*86eYo4Le;iCSf??dQ|a`7FH`>f41uJ^lc*^DBg5~#*j^$CHmOeI&h`VQH;vfi}|SRG$_cdK&# R0{=b?63ls<@38CJ{{ijxVub(z literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd1eba91a39c5aaf2e586e5ac41f467c39295576 GIT binary patch literal 758 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..025beb3e2615dda26e736c9b97f25a7541f66313 GIT binary patch literal 4718 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 IcOCxy2f(+evH$=8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py new file mode 100644 index 000000000..4266b5ee9 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py @@ -0,0 +1,61 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +import logging + +from pip._vendor import requests + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.cache import DictCache +from pip._vendor.cachecontrol.controller import logger + +from argparse import ArgumentParser + + +def setup_logging(): + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler() + logger.addHandler(handler) + + +def get_session(): + adapter = CacheControlAdapter( + DictCache(), cache_etags=True, serializer=None, heuristic=None + ) + sess = requests.Session() + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + sess.cache_controller = adapter.controller + return sess + + +def get_args(): + parser = ArgumentParser() + parser.add_argument("url", help="The URL to try and cache") + return parser.parse_args() + + +def main(args=None): + args = get_args() + sess = get_session() + + # Make a request to get a response + resp = sess.get(args.url) + + # Turn on logging + setup_logging() + + # try setting the cache + sess.cache_controller.cache_response(resp.request, resp.raw) + + # Now try to get it + if sess.cache_controller.cached_request(resp.request): + print("Cached!") + else: + print("Not cached :(") + + +if __name__ == "__main__": + main() diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py new file mode 100644 index 000000000..94c75e1a0 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py @@ -0,0 +1,137 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +import types +import functools +import zlib + +from pip._vendor.requests.adapters import HTTPAdapter + +from .controller import CacheController, PERMANENT_REDIRECT_STATUSES +from .cache import DictCache +from .filewrapper import CallbackFileWrapper + + +class CacheControlAdapter(HTTPAdapter): + invalidating_methods = {"PUT", "PATCH", "DELETE"} + + def __init__( + self, + cache=None, + cache_etags=True, + controller_class=None, + serializer=None, + heuristic=None, + cacheable_methods=None, + *args, + **kw + ): + super(CacheControlAdapter, self).__init__(*args, **kw) + self.cache = DictCache() if cache is None else cache + self.heuristic = heuristic + self.cacheable_methods = cacheable_methods or ("GET",) + + controller_factory = controller_class or CacheController + self.controller = controller_factory( + self.cache, cache_etags=cache_etags, serializer=serializer + ) + + def send(self, request, cacheable_methods=None, **kw): + """ + Send a request. Use the request information to see if it + exists in the cache and cache the response if we need to and can. + """ + cacheable = cacheable_methods or self.cacheable_methods + if request.method in cacheable: + try: + cached_response = self.controller.cached_request(request) + except zlib.error: + cached_response = None + if cached_response: + return self.build_response(request, cached_response, from_cache=True) + + # check for etags and add headers if appropriate + request.headers.update(self.controller.conditional_headers(request)) + + resp = super(CacheControlAdapter, self).send(request, **kw) + + return resp + + def build_response( + self, request, response, from_cache=False, cacheable_methods=None + ): + """ + Build a response by making a request or using the cache. + + This will end up calling send and returning a potentially + cached response + """ + cacheable = cacheable_methods or self.cacheable_methods + if not from_cache and request.method in cacheable: + # Check for any heuristics that might update headers + # before trying to cache. + if self.heuristic: + response = self.heuristic.apply(response) + + # apply any expiration heuristics + if response.status == 304: + # We must have sent an ETag request. This could mean + # that we've been expired already or that we simply + # have an etag. In either case, we want to try and + # update the cache if that is the case. + cached_response = self.controller.update_cached_response( + request, response + ) + + if cached_response is not response: + from_cache = True + + # We are done with the server response, read a + # possible response body (compliant servers will + # not return one, but we cannot be 100% sure) and + # release the connection back to the pool. + response.read(decode_content=False) + response.release_conn() + + response = cached_response + + # We always cache the 301 responses + elif int(response.status) in PERMANENT_REDIRECT_STATUSES: + self.controller.cache_response(request, response) + else: + # Wrap the response file with a wrapper that will cache the + # response when the stream has been consumed. + response._fp = CallbackFileWrapper( + response._fp, + functools.partial( + self.controller.cache_response, request, response + ), + ) + if response.chunked: + super_update_chunk_length = response._update_chunk_length + + def _update_chunk_length(self): + super_update_chunk_length() + if self.chunk_left == 0: + self._fp._close() + + response._update_chunk_length = types.MethodType( + _update_chunk_length, response + ) + + resp = super(CacheControlAdapter, self).build_response(request, response) + + # See if we should invalidate the cache. + if request.method in self.invalidating_methods and resp.ok: + cache_url = self.controller.cache_url(request.url) + self.cache.delete(cache_url) + + # Give the request a from_cache attr to let people use it + resp.from_cache = from_cache + + return resp + + def close(self): + self.cache.close() + super(CacheControlAdapter, self).close() diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py new file mode 100644 index 000000000..44e4309d2 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py @@ -0,0 +1,43 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +""" +The cache object API for implementing caches. The default is a thread +safe in-memory dictionary. +""" +from threading import Lock + + +class BaseCache(object): + + def get(self, key): + raise NotImplementedError() + + def set(self, key, value, expires=None): + raise NotImplementedError() + + def delete(self, key): + raise NotImplementedError() + + def close(self): + pass + + +class DictCache(BaseCache): + + def __init__(self, init_dict=None): + self.lock = Lock() + self.data = init_dict or {} + + def get(self, key): + return self.data.get(key, None) + + def set(self, key, value, expires=None): + with self.lock: + self.data.update({key: value}) + + def delete(self, key): + with self.lock: + if key in self.data: + self.data.pop(key) diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py new file mode 100644 index 000000000..44becd684 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +from .file_cache import FileCache # noqa +from .redis_cache import RedisCache # noqa diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6296d925a194068bd3cf2794f71d60ccd643d65a GIT binary patch literal 295 zcmYk1!Ait15QdYsh*lST0AHYowRaH_R#p!pvf^b4hBg^Bnl>SmF8E0L0=`SZlP6!n zlauPff%#{?`G#fr{zpb|N{I&~nrUuX$Jd;vKC@YuuXF128&(xx zoK`A6?ktUkMWY^ppj?4AIMG#AjO9IfQYAB_r^nrp{J%*~lUEkDs7&(h7f0e2A)r_d zh>bXNYUrSkD9%m17+SG30pt8SxF=9iY@pwWOVbK85$3*8&&>m%@W$7YJncd~eXU#{ ggR{SYwUnkeQOZOAGHxGtP7fAN(lJ<&>=pa`2W*Q{!~g&Q literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a52c16d806f8b68cad9a59e4cfb3377f9956b59 GIT binary patch literal 3369 zcmZWr&2J<}6|buPnC|wB?R8)wyKK@#Kr$k0lZb${gs@q&-mGM1B71}J$fDJrs+wx_+!)~p?DD&L^yEcV&@jlNL=|lO5&80|ATUDj*S6%Px_bRW| zA_C7pfBWy9q#tsf!FeE-|PE> zN~=Q2*cAaKTO_NwM1&_lqy%3PiMbAI1=}Q}M}+&l@|3iyj|dNV_>}Nac&ARQ#v?ul z^Yff;l6v(5PCy!UYJ4uZ$n*t+F$}{8sS>Mcdtbm{!FE>jOv}9A7qX2^)5nEQ2yGRb z`YRAkdUV1H248H>1JWcDrd}a=MGb~p)x3$r1tZ$o2Gg;ku_~8@dHGnmI4utVKgPh~1pYAEcI{XVF zzYTl-SFYaM`9uk+b~Z*zr8~dO+oJ(EMeRK5>W@adJ8NC3^xcnT-V<%Tb11UIo%QbS zj_PW0cbK*h(mkPehTY*x0&6^%D{b^(yL4PRP%C(j#4aokPs~!HM0+Gff~QT6By9Bx zoJG9>#Al0sL$X$roS4_AD z3fPETyZAjNCBg zGFXQ-)F1k_UmbwhbYlGXD8BMEnol0yiyvokF1e7fkNp*F70;{}pX8%>Fj6|+PY=a4 zX*>ajN!-npP9f#_a=Z=P?KGQC#a$gAcGDQ5?cO!n7^h}j)19ud)T<`?b=n_^GGT%# zlY9-dG&iTi6@E_jyoZU%7KW4VVkL<5PSiI$oN&V|lts8+|=}u#X69BY6orfNBt7 zXY3ph^2|Ahc>01i0A3KH_WRvkBiK_w zQ)tX3HeS3uP`SZNU_U#~Pe1~WLI8vT@HH(M*0MjaS0SGZwnx83CXQx3rw0kp^Y&=r zd`>sWpD_hkz}$S>vrBkr;l0+ZoFYCwR%Ap z<0PG|3(N{(I&yB(n{-^e)CX2yQf7t{EfBd>W_-u01NG{&+QcawwD%TaP^4XWPoXqp zoq30-+ec7e@ZE;C1?!uzuAP&&r?WV7gbEubcR`tZ@E>^th;gMzxw(PoYvg(@A7$Kz z^;Bc$K%B^*A}8zYzoaVQ!VuOJ+%E{AGsKxs-+Eqke9E3*RT}u(=&|X8FgYvN|A4_v zX?I-H^bGvibI#ntJ%=#sdFO0ahJ9UuGJI#M7~U~JHbBnL?oK=%7G4hkuNPUP0Vtl$ z6|5}dmuAZr!Dv5w(P&enqOs73SI5A=d6ge|U6hD|U?4+P}8lJCKi!L-MK zu{kXlU`nE)%6!I}Wi#G*w%*k%HpC=mukj8Mm`p_+4*^$H=>QkOL;eEguuzx8roN+u zK7lEPn}Q#lTUaH*2UTYg^8dBx^UoN2Xe2cJWHPSYSir$ay3`2U2$~HMN?(s1Do$`$CI90`J$61@UB24CBiE z-&J@hS?k`K{0{Da2S}q)dL}|hMEfU+iIM~Wcm#Kj#8i{yccZjluE@7R!c?Ka0HzM0 z%;nsoL3#T7xaT7zA0fFkyX~Rvd#jmy4fltS?8l#68*X zs+i|O#aP}&rr>IIDKCxz=hSyCC-?#((1do=WF-4m@w#Ii=$jCKXqRkUUNL};yG7th zbeFp1&a+RKO13;%LWCLSmk39>##d`J0{{f0~1P%ZI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0308eb0ed84d5e6779db0d1c8c043cfe542ead86 GIT binary patch literal 1575 zcmZ`(&u`pB6rLZp*V%Ztfg)58ph280(ajYhR1m3Xke$y8}@52p)i;$c#!dW0FdCNoHJf8NeFIv5e&4 zl0v*#?!itZhjJg*flTBG)>wvs<4!kxqGV9PyeTx360Cz-9By1yvOXT_Pa*`it;=HQds9F|@P-8iG`{>2^|#GQN3Wbvwt^So** zm**n{jL3&{dH06gWa}?)vqU{T%LI%Sc}lM6imvG~F%fK}%yaAbnR3_6#IV)zXX=%w z+CNYogO?9r`p^koj(0-C)oF=^vmI#T$9-5#cSPjiq_-}g>xKBZ3}d;0cw>q$f=83S2p@Z7s8Hu+3~7z-Ng>WzjllDz%HUfn!U%;l current_age: + logger.debug('The response is "fresh", returning cached response') + logger.debug("%i > %i", freshness_lifetime, current_age) + return resp + + # we're not fresh. If we don't have an Etag, clear it out + if "etag" not in headers: + logger.debug('The cached response is "stale" with no etag, purging') + self.cache.delete(cache_url) + + # return the original handler + return False + + def conditional_headers(self, request): + cache_url = self.cache_url(request.url) + resp = self.serializer.loads(request, self.cache.get(cache_url)) + new_headers = {} + + if resp: + headers = CaseInsensitiveDict(resp.headers) + + if "etag" in headers: + new_headers["If-None-Match"] = headers["ETag"] + + if "last-modified" in headers: + new_headers["If-Modified-Since"] = headers["Last-Modified"] + + return new_headers + + def cache_response(self, request, response, body=None, status_codes=None): + """ + Algorithm for caching requests. + + This assumes a requests Response object. + """ + # From httplib2: Don't cache 206's since we aren't going to + # handle byte range requests + cacheable_status_codes = status_codes or self.cacheable_status_codes + if response.status not in cacheable_status_codes: + logger.debug( + "Status code %s not in %s", response.status, cacheable_status_codes + ) + return + + response_headers = CaseInsensitiveDict(response.headers) + + if "date" in response_headers: + date = calendar.timegm(parsedate_tz(response_headers["date"])) + else: + date = 0 + + # If we've been given a body, our response has a Content-Length, that + # Content-Length is valid then we can check to see if the body we've + # been given matches the expected size, and if it doesn't we'll just + # skip trying to cache it. + if ( + body is not None + and "content-length" in response_headers + and response_headers["content-length"].isdigit() + and int(response_headers["content-length"]) != len(body) + ): + return + + cc_req = self.parse_cache_control(request.headers) + cc = self.parse_cache_control(response_headers) + + cache_url = self.cache_url(request.url) + logger.debug('Updating cache with response from "%s"', cache_url) + + # Delete it from the cache if we happen to have it stored there + no_store = False + if "no-store" in cc: + no_store = True + logger.debug('Response header has "no-store"') + if "no-store" in cc_req: + no_store = True + logger.debug('Request header has "no-store"') + if no_store and self.cache.get(cache_url): + logger.debug('Purging existing cache entry to honor "no-store"') + self.cache.delete(cache_url) + if no_store: + return + + # https://tools.ietf.org/html/rfc7234#section-4.1: + # A Vary header field-value of "*" always fails to match. + # Storing such a response leads to a deserialization warning + # during cache lookup and is not allowed to ever be served, + # so storing it can be avoided. + if "*" in response_headers.get("vary", ""): + logger.debug('Response header has "Vary: *"') + return + + # If we've been given an etag, then keep the response + if self.cache_etags and "etag" in response_headers: + expires_time = 0 + if response_headers.get("expires"): + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires) - date + + expires_time = max(expires_time, 14 * 86400) + + logger.debug("etag object cached for {0} seconds".format(expires_time)) + logger.debug("Caching due to etag") + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body), + expires=expires_time, + ) + + # Add to the cache any permanent redirects. We do this before looking + # that the Date headers. + elif int(response.status) in PERMANENT_REDIRECT_STATUSES: + logger.debug("Caching permanent redirect") + self.cache.set(cache_url, self.serializer.dumps(request, response, b"")) + + # Add to the cache if the response headers demand it. If there + # is no date header then we can't do anything about expiring + # the cache. + elif "date" in response_headers: + date = calendar.timegm(parsedate_tz(response_headers["date"])) + # cache when there is a max-age > 0 + if "max-age" in cc and cc["max-age"] > 0: + logger.debug("Caching b/c date exists and max-age > 0") + expires_time = cc["max-age"] + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body), + expires=expires_time, + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif "expires" in response_headers: + if response_headers["expires"]: + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires) - date + else: + expires_time = None + + logger.debug( + "Caching b/c of expires header. expires in {0} seconds".format( + expires_time + ) + ) + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body=body), + expires=expires_time, + ) + + def update_cached_response(self, request, response): + """On a 304 we will get a new set of headers that we want to + update our cached value with, assuming we have one. + + This should only ever be called when we've sent an ETag and + gotten a 304 as the response. + """ + cache_url = self.cache_url(request.url) + + cached_response = self.serializer.loads(request, self.cache.get(cache_url)) + + if not cached_response: + # we didn't have a cached response + return response + + # Lets update our headers with the headers from the new request: + # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 + # + # The server isn't supposed to send headers that would make + # the cached body invalid. But... just in case, we'll be sure + # to strip out ones we know that might be problmatic due to + # typical assumptions. + excluded_headers = ["content-length"] + + cached_response.headers.update( + dict( + (k, v) + for k, v in response.headers.items() + if k.lower() not in excluded_headers + ) + ) + + # we want a 200 b/c we have content via the cache + cached_response.status = 200 + + # update our cache + self.cache.set(cache_url, self.serializer.dumps(request, cached_response)) + + return cached_response diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 000000000..f5ed5f6f6 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,111 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +from tempfile import NamedTemporaryFile +import mmap + + +class CallbackFileWrapper(object): + """ + Small wrapper around a fp object which will tee everything read into a + buffer, and when that file is closed it will execute a callback with the + contents of that buffer. + + All attributes are proxied to the underlying file object. + + This class uses members with a double underscore (__) leading prefix so as + not to accidentally shadow an attribute. + + The data is stored in a temporary file until it is all available. As long + as the temporary files directory is disk-based (sometimes it's a + memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory + pressure is high. For small files the disk usually won't be used at all, + it'll all be in the filesystem memory cache, so there should be no + performance impact. + """ + + def __init__(self, fp, callback): + self.__buf = NamedTemporaryFile("rb+", delete=True) + self.__fp = fp + self.__callback = callback + + def __getattr__(self, name): + # The vaguaries of garbage collection means that self.__fp is + # not always set. By using __getattribute__ and the private + # name[0] allows looking up the attribute value and raising an + # AttributeError when it doesn't exist. This stop thigns from + # infinitely recursing calls to getattr in the case where + # self.__fp hasn't been set. + # + # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers + fp = self.__getattribute__("_CallbackFileWrapper__fp") + return getattr(fp, name) + + def __is_fp_closed(self): + try: + return self.__fp.fp is None + + except AttributeError: + pass + + try: + return self.__fp.closed + + except AttributeError: + pass + + # We just don't cache it then. + # TODO: Add some logging here... + return False + + def _close(self): + if self.__callback: + if self.__buf.tell() == 0: + # Empty file: + result = b"" + else: + # Return the data without actually loading it into memory, + # relying on Python's buffer API and mmap(). mmap() just gives + # a view directly into the filesystem's memory cache, so it + # doesn't result in duplicate memory use. + self.__buf.seek(0, 0) + result = memoryview( + mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ) + ) + self.__callback(result) + + # We assign this to None here, because otherwise we can get into + # really tricky problems where the CPython interpreter dead locks + # because the callback is holding a reference to something which + # has a __del__ method. Setting this to None breaks the cycle + # and allows the garbage collector to do it's thing normally. + self.__callback = None + + # Closing the temporary file releases memory and frees disk space. + # Important when caching big files. + self.__buf.close() + + def read(self, amt=None): + data = self.__fp.read(amt) + if data: + # We may be dealing with b'', a sign that things are over: + # it's passed e.g. after we've already closed self.__buf. + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data + + def _safe_read(self, amt): + data = self.__fp._safe_read(amt) + if amt == 2 and data == b"\r\n": + # urllib executes this read to toss the CRLF at the end + # of the chunk. + return data + + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 000000000..ebe4a96f5 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,139 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +import calendar +import time + +from email.utils import formatdate, parsedate, parsedate_tz + +from datetime import datetime, timedelta + +TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" + + +def expire_after(delta, date=None): + date = date or datetime.utcnow() + return date + delta + + +def datetime_to_header(dt): + return formatdate(calendar.timegm(dt.timetuple())) + + +class BaseHeuristic(object): + + def warning(self, response): + """ + Return a valid 1xx warning header value describing the cache + adjustments. + + The response is provided too allow warnings like 113 + http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need + to explicitly say response is over 24 hours old. + """ + return '110 - "Response is Stale"' + + def update_headers(self, response): + """Update the response headers with any new headers. + + NOTE: This SHOULD always include some Warning header to + signify that the response was cached by the client, not + by way of the provided headers. + """ + return {} + + def apply(self, response): + updated_headers = self.update_headers(response) + + if updated_headers: + response.headers.update(updated_headers) + warning_header_value = self.warning(response) + if warning_header_value is not None: + response.headers.update({"Warning": warning_header_value}) + + return response + + +class OneDayCache(BaseHeuristic): + """ + Cache the response by providing an expires 1 day in the + future. + """ + + def update_headers(self, response): + headers = {} + + if "expires" not in response.headers: + date = parsedate(response.headers["date"]) + expires = expire_after(timedelta(days=1), date=datetime(*date[:6])) + headers["expires"] = datetime_to_header(expires) + headers["cache-control"] = "public" + return headers + + +class ExpiresAfter(BaseHeuristic): + """ + Cache **all** requests for a defined time period. + """ + + def __init__(self, **kw): + self.delta = timedelta(**kw) + + def update_headers(self, response): + expires = expire_after(self.delta) + return {"expires": datetime_to_header(expires), "cache-control": "public"} + + def warning(self, response): + tmpl = "110 - Automatically cached for %s. Response might be stale" + return tmpl % self.delta + + +class LastModified(BaseHeuristic): + """ + If there is no Expires header already, fall back on Last-Modified + using the heuristic from + http://tools.ietf.org/html/rfc7234#section-4.2.2 + to calculate a reasonable value. + + Firefox also does something like this per + https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ + http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 + Unlike mozilla we limit this to 24-hr. + """ + cacheable_by_default_statuses = { + 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501 + } + + def update_headers(self, resp): + headers = resp.headers + + if "expires" in headers: + return {} + + if "cache-control" in headers and headers["cache-control"] != "public": + return {} + + if resp.status not in self.cacheable_by_default_statuses: + return {} + + if "date" not in headers or "last-modified" not in headers: + return {} + + date = calendar.timegm(parsedate_tz(headers["date"])) + last_modified = parsedate(headers["last-modified"]) + if date is None or last_modified is None: + return {} + + now = time.time() + current_age = max(0, now - date) + delta = date - calendar.timegm(last_modified) + freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) + if freshness_lifetime <= current_age: + return {} + + expires = date + freshness_lifetime + return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))} + + def warning(self, resp): + return None diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 000000000..b075df186 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,186 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +import base64 +import io +import json +import zlib + +from pip._vendor import msgpack +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .compat import HTTPResponse, pickle, text_type + + +def _b64_decode_bytes(b): + return base64.b64decode(b.encode("ascii")) + + +def _b64_decode_str(s): + return _b64_decode_bytes(s).decode("utf8") + + +_default_body_read = object() + + +class Serializer(object): + def dumps(self, request, response, body=None): + response_headers = CaseInsensitiveDict(response.headers) + + if body is None: + # When a body isn't passed in, we'll read the response. We + # also update the response with a new file handler to be + # sure it acts as though it was never read. + body = response.read(decode_content=False) + response._fp = io.BytesIO(body) + + # NOTE: This is all a bit weird, but it's really important that on + # Python 2.x these objects are unicode and not str, even when + # they contain only ascii. The problem here is that msgpack + # understands the difference between unicode and bytes and we + # have it set to differentiate between them, however Python 2 + # doesn't know the difference. Forcing these to unicode will be + # enough to have msgpack know the difference. + data = { + u"response": { + u"body": body, + u"headers": dict( + (text_type(k), text_type(v)) for k, v in response.headers.items() + ), + u"status": response.status, + u"version": response.version, + u"reason": text_type(response.reason), + u"strict": response.strict, + u"decode_content": response.decode_content, + } + } + + # Construct our vary headers + data[u"vary"] = {} + if u"vary" in response_headers: + varied_headers = response_headers[u"vary"].split(",") + for header in varied_headers: + header = text_type(header).strip() + header_value = request.headers.get(header, None) + if header_value is not None: + header_value = text_type(header_value) + data[u"vary"][header] = header_value + + return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)]) + + def loads(self, request, data): + # Short circuit if we've been given an empty set of data + if not data: + return + + # Determine what version of the serializer the data was serialized + # with + try: + ver, data = data.split(b",", 1) + except ValueError: + ver = b"cc=0" + + # Make sure that our "ver" is actually a version and isn't a false + # positive from a , being in the data stream. + if ver[:3] != b"cc=": + data = ver + data + ver = b"cc=0" + + # Get the version number out of the cc=N + ver = ver.split(b"=", 1)[-1].decode("ascii") + + # Dispatch to the actual load method for the given version + try: + return getattr(self, "_loads_v{}".format(ver))(request, data) + + except AttributeError: + # This is a version we don't have a loads function for, so we'll + # just treat it as a miss and return None + return + + def prepare_response(self, request, cached): + """Verify our vary headers match and construct a real urllib3 + HTTPResponse object. + """ + # Special case the '*' Vary value as it means we cannot actually + # determine if the cached response is suitable for this request. + # This case is also handled in the controller code when creating + # a cache entry, but is left here for backwards compatibility. + if "*" in cached.get("vary", {}): + return + + # Ensure that the Vary headers for the cached response match our + # request + for header, value in cached.get("vary", {}).items(): + if request.headers.get(header, None) != value: + return + + body_raw = cached["response"].pop("body") + + headers = CaseInsensitiveDict(data=cached["response"]["headers"]) + if headers.get("transfer-encoding", "") == "chunked": + headers.pop("transfer-encoding") + + cached["response"]["headers"] = headers + + try: + body = io.BytesIO(body_raw) + except TypeError: + # This can happen if cachecontrol serialized to v1 format (pickle) + # using Python 2. A Python 2 str(byte string) will be unpickled as + # a Python 3 str (unicode string), which will cause the above to + # fail with: + # + # TypeError: 'str' does not support the buffer interface + body = io.BytesIO(body_raw.encode("utf8")) + + return HTTPResponse(body=body, preload_content=False, **cached["response"]) + + def _loads_v0(self, request, data): + # The original legacy cache data. This doesn't contain enough + # information to construct everything we need, so we'll treat this as + # a miss. + return + + def _loads_v1(self, request, data): + try: + cached = pickle.loads(data) + except ValueError: + return + + return self.prepare_response(request, cached) + + def _loads_v2(self, request, data): + try: + cached = json.loads(zlib.decompress(data).decode("utf8")) + except (ValueError, zlib.error): + return + + # We need to decode the items that we've base64 encoded + cached["response"]["body"] = _b64_decode_bytes(cached["response"]["body"]) + cached["response"]["headers"] = dict( + (_b64_decode_str(k), _b64_decode_str(v)) + for k, v in cached["response"]["headers"].items() + ) + cached["response"]["reason"] = _b64_decode_str(cached["response"]["reason"]) + cached["vary"] = dict( + (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) + for k, v in cached["vary"].items() + ) + + return self.prepare_response(request, cached) + + def _loads_v3(self, request, data): + # Due to Python 2 encoding issues, it's impossible to know for sure + # exactly how to load v3 entries, thus we'll treat these as a miss so + # that they get rewritten out as v4 entries. + return + + def _loads_v4(self, request, data): + try: + cached = msgpack.loads(data, raw=False) + except ValueError: + return + + return self.prepare_response(request, cached) diff --git a/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py b/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 000000000..b6ee7f203 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,33 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +from .adapter import CacheControlAdapter +from .cache import DictCache + + +def CacheControl( + sess, + cache=None, + cache_etags=True, + serializer=None, + heuristic=None, + controller_class=None, + adapter_class=None, + cacheable_methods=None, +): + + cache = DictCache() if cache is None else cache + adapter_class = adapter_class or CacheControlAdapter + adapter = adapter_class( + cache, + cache_etags=cache_etags, + serializer=serializer, + heuristic=heuristic, + controller_class=controller_class, + cacheable_methods=cacheable_methods, + ) + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + return sess diff --git a/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py b/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py new file mode 100644 index 000000000..8db1a0e55 --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py @@ -0,0 +1,3 @@ +from .core import contents, where + +__version__ = "2021.10.08" diff --git a/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py b/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py new file mode 100644 index 000000000..00376349e --- /dev/null +++ b/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from pip._vendor.certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70fb40b51c53f5f4d6658cc5de91355360b0d8ab GIT binary patch literal 277 zcmYk0!Ait15QdYqN?BR(=qvQFZFf&1vIvTLkVO#)D0`7ajCNf1a(mRx?Tzs}q&nl05yP zA){ zkN6#ih~Er|4L`GT=wdOy(Ef60`MGxJ7uU`{gYPvpu!VJeAJc$+lCeKAq)U|m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc08635f2ecae2e442348c4d05f89962996a7338 GIT binary patch literal 456 zcmYjLO-sW-5Z&E0F$OIK|AWv&+PjD-ih2+c#Y+0>`KJESlKu=cv!v}}&I^%(H-Jm-dxmzqM-NOYLvTOY$)C zyfG$|2UXr}8+oMdaWj#J8jX$5u$n<`B}KZECwd}{wh-4@ew$6fNQygN#vL!?j?=Wr ibeX23`oV?UMWvcK>~Oki1_U7+h)@i8$OF;meenY@!G)m! literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20e604f2dd3b7b3be6e6fa9a8ddefc6081a428ef GIT binary patch literal 1551 zcmZuxPmdcl6t_K2GMP-W+ifXTksw6~DTij&8$uOym4zz<064i4z}yOE2&|lh7@!BfmWVoA>)Y|DIL79wBJI{qXz#jT%CK z_`$^%!r&fsvjD@<0CCL87!U9R!~;&x5vPL8gF$e5OW-5ADDlz~56YsfKjdXzIY)zv z2zuRX|_I7&rcOHGy>#|Pw z@!q9b=&TQ01nhCIg|%1GTM~s=fjL(?9tkb3`x8Dc1gpXyq>N4zJ91Sm63(o6VgDB? zfPHzSkHN7Z&l%Di)=Q1dNkVL3$$~D?94D{}ID+2kRiNEo(QdD3zlq-7b*lu4@9cPD ztiQAO(1nM>vK&ZlJ>S{;&IQJ5S7i*+E;M785zA?O1jvl19)?jZ#+0~HVp1tnkA2;W zEU&oSg;|R%osmO9bj{1DIsH?1`=1Ms|{T{@1lqWX1K*nE?hIavd3Eg-JZs9WiCG)ITdl@l>D;rB;~> zKv6|CcpmPmoJ^IrW4Yhf!l;=}MUfNju@`_gyjS detector.MINIMUM_THRESHOLD: + charset_name = prober.charset_name + lower_charset_name = prober.charset_name.lower() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith('iso-8859'): + if detector._has_win_bytes: + charset_name = detector.ISO_WIN_MAP.get(lower_charset_name, + charset_name) + results.append({ + 'encoding': charset_name, + 'confidence': prober.get_confidence(), + 'language': prober.language, + }) + if len(results) > 0: + return sorted(results, key=lambda result: -result['confidence']) + + return [detector.result] diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25f3c74407562be203bf1b3eaad6660b344154d9 GIT binary patch literal 1901 zcmd5-PjBNy6!-XF95?Ou&$6Y!!5kxP+XF&cs#OJSyW2?HbZJ@;QNVHHY3kPYcxNWt zZE++-x$+G-Byi%$iI2c{7>N_7{R%4~c+YOOEoTl`n&&q&@1JLWzh^c(>uT`)_VpjV z-)oxoCr)lYI!r!>A+|t-T1a9oA#FlX*JC{~+D4%pv6)zHE3w-)(FR&*{zTf9&W}u-ekO?IZrqK(^MG$XMN&Av7Xr1 zBP3%}TDf*fCghTQMPg%bwkEut~J`1CC z;IX4(K7db5z23Q`o{$_i*4)BnBMW$t6dOKlY+xAg00NYz^!X4XQBN|Dz6_EmrE8^| zJkLs-YcH?cMJLhidW>I90?vc;ZnyAx{lWIj49=H^9_yWeQq(q$BhU%`3zz%efXNN- zn^C>0+(<;JkO9=8s&6cmRU}i@1BkHAIpfMcVmt|?GO@VwZpY)U2%VFvbWdhZbsi10kq-0PmiE>Ck&zqY*$M8?otnIz z8z*;0Cd%>rL>pPTHC_ny3E@q!SS;ky_-=0H=0pcOef(Aq){&s6;@9CDRO?}cJp~{Nc8Rg1_1YC-|2Po- zS(N%E;b$7HJ^zbF)8GB%nKB@OvV$xG%JF5a$B1dFY{5A68NLE5b(=51izDMyr942P z?6O4uKCUhnS>IHTmHg|7IdX6nhS&gci?})xx27YJ=Lpi+1u{EC2U?rD4l5>c{?fm# zS@Xovi#W}?s}_dSpU$)ql?}_H=`a!H(N?bhIoE#^Rq^rn;`>FTD1zN66#E#z0z|^X WVN5p>TLSO2wpb%jfZ-Um#eV=1FahTP literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a4e101e7d3a171ddb007441dd3b793f766458f7 GIT binary patch literal 27180 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9541aeac2d97c36a775c6b53f7b429c4a47cea58 GIT binary patch literal 1131 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 XZ|%tAj|wL~q0;H7uvaft`C{-7s_Nxf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84302d265d027ec916dec3d3d7dfce105aa14a0a GIT binary patch literal 3484 zcmai1&2JmW6`$EJt!PSCxmc|&dh5a9 zQI9Usz4J4nTAi>(c*>Ip=NK&$sX9zFd5Dp*Ff!5wLc^9A%3^-w=Jw6??K_*dB~`Kcs@LfV!9N4`*XW%?_m*e%;pY>bGiNg* z539&h6G?fTgRaTO&nKRF*3mec?-`_{o zQ1_tRF_9?2?tfQm7_(P;wtE7E4|2@_ARQrD6sD|=u4H+)r>Kfl!XjRU|hQP zB$Hf$+ezGq8pkVf?I9~IP^)aa7c17u(+Hhluwz%Dxbif?_XKGmMfXBIRiZ0di3pWu z8N~Gj?^oFk5Q65#-8{<`*!L*MlsC~I+fj)NrC?GFk}wh+jt1R<=p=$EsL+CiDvIN2 zWLIm|#?lXShp=!kNH7H82Rfi484t8#PkM3GV?1MNrdbZ*zBxYO=}E0t^3?AjK_>_P zhx<=g-aPntx*VSqQor1M^#&e;tf%q<>}t5hJZ4oWWjK`Y1ErXQ%;R87;fcR#xLk_4 zSed+PxCVcPUj|(8!Zq?!WeHeQ4h@Czko({9tQ8U=UUWx>ZN6>XVqk!N)0UpT+aLVm> ziNUNpasjKB{0;J_9;{qgUE&^K-sN+E;*F7eU<0Z*V4uC~$m=6ZT?bU7BtUjm2Y|wT zQxS~xef!Y@aDFr4i_*6=j1V!hdH6Ahoko=C>4xAxKOp zc0hrwJDjWIbg6_*3IhvM&ahINS~AVfF=#NQG2@`9JP{&gSFasnnI_zgL}ifrr2&)7 z{QoNAeqZny+Nfk$8P*n^43uV3luKDb?b-=w8P}2$H2iqbOsY#e)4d67Ds@x%m`Icv z4)DFPwSMQ$Azwd%>ZKW!o6;-|F*bn)C?eJ?c{@9Ip`@mtmi^|=&NN0}NxZ)#HUb83 z*UWfzTmBZwh`mh!6oWT(MbK2j9hZnyeu!T`fT7`)x7{V=@ZvPkVYhGwQammkG^+3+ z8IFb9`(wC0iFGd+-wZ(_G?sU~?G=jj>JDIR$y%~}%cDNd?YgyW*DRk}PaS*N2J|(K zMc;99%Up}1+50i0Eyu5Y$>wDYl-);xnx9{DA#oY~g8n#Gm z2?`&&)`5_ED9<7d%YytB4)5XDI`%Yi)E97*aQSPbU&i569I&fCG+?tS@%G1XDh7j3 z91DDNExSg2dpcT9jaru$so{p0V+T^!L06=CUzOdhm$k7GH%y1r7_FwU^{r*-SB{XdF*f(QTr literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60426b0a1f85c16165b8ee1d0f03cf0fba003b5e GIT binary patch literal 2903 zcmaJ@O>YxN7@pnr$HsA7%7+R@0yvh zAt;>SH}nigenJ1sNt72L@`UDu<#B1)LQLN`l*7K#;3&_lC21sY1SC9IDI>pNw(_@&W(%TahDdybBh}y!p9{mZgW0UIvMVB!3XmT;Tn7fd%Lc_Lr@?E78V$h-Is^GL|G2 z*gCcO)k=~ZEeEvo_}2F065}GJ53p?i;VNXIqVcMPLJO_rx zHH}FSCWpbvpN$d(Weg9*d1eKiW=UwGcpR<@b@Dj2xJU)LR0%|eb7C?cE16Kfz)(W5 z3fG!vFbtZ<;pkG8!{@Tz-QNCryHd7v_z_|MPgD3PUHJaEDZZShPU1y+E^f2xDkrfr z#MrUBm7*;m?^L<%L{iV=bc!G&WlzFYr}$9kWAcJQuxMC79=a(w4jGeex}&j=%2z$q z5Afc`Yra8q;2p3Cl^3n&T3<5s16zAjw~ed13t zyM9qKDjgQS8NXxt6zKkw-M-QP#VBq1+f!pi|4trH$H+C)zn|Ejri1>yL>qhck#b*-$uj^(^|Z%+1!TaqOvo< zW_fRSdHpdBH_-fm*AN^ioL@n~$+zTq`qUmeeuTjR+k@LLAOJ3~mp(?G_4k4&zCJH8 zifV2>z`Bo@MRnTY=4uz%SZb~bgJkmCyREuV~8@E>tfw`VZNWP*=^`L{yABkPWmhj8`Lyuz2>AUytrt&ICOAD z%LS$bD+Qzwaw-yqVD#eB3V9c2PxzSp?0ihz zNS__1&!F4&98rA^{o`EDAQfDWAdVvv23hk6`<#bC;j0xCRvbCOrHZ$|=~tNZ6@2Yd zxTsOWA;6rft2mu^2Hek)Ql)5~6gw5MmiOZ84-s2&?t|>~XFx<*DZ&)LFs8^){W)e< zDW$)}!moz}{FUifp=@>6^*Z(zt%wTMG^GO5j-sbikoG=+_@)6T%7PA0@_j9(fwZ<`#ao8rm?&8@Kp}l!zAuoPdD23 zx1h9;=ZK2$wW+skZ^zi literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4a76adab5f18652daf2d9624bfd2ef74a6ed749 GIT binary patch literal 1138 zcmZ`(OHbQC5Z?7GCJmHE(1&_!Pf-iGaG|RDN+^{e6cKT;tgamI65RTc?yix7xCM#7 zL67``{ufI<_0%)Bo;tGu5md3!j_2Xsnfc~(iuw6Ef%Wstuff|IA-~a>T@D!UV5=?& zPB=|TMgvMww^A#!1Ka3!>SS)<8r?~~tQOQL*(BWM-YMapa3^-)^ID&@{67?~YSHS+ z#(rmOubU_>lR>GIB7dJp=~yKSg3V6BlYH3MkruruK1^}}-iN(1)yapk7M;UL_J!V+ z#Xv}iEOd6)*Vb9T$9kW;8{09YxV7vnORa$-NI*FWtTS>zIpx-=AK1d-Hg`_Rga$6? zrf$%^Gvbf{>#kMzOpa;F7@N3WsAB@$>LmzGG(8~`>)iT5DABfdCSWsHdlLfB+6g)L zF~SL4Om|vym8;5;kkW(0mCsm`Cz>&d7fKg>bFsmLsZ3gEFY_7PScJeG3t72RD4{QC zr4!3+9DOSc{C<&jwd;O~)#69F+%N1sp_9nyY83xtWIldfMU} QoTb7)n8wov#ovHq)$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e6a97ed01b325700c59fa9194b66d7be192424f GIT binary patch literal 2585 zcmb7GTW{Mo6qbCEWi?6Du8$kW0xM7hs|)NgD~9-@IBFa@u$5sojLEXd*lK0TC8ZQG zu&4IV>=$gmMZli+_Qh45LD?aErqHy_eP;ProPVibAa=-0JtD=9&nLrfHjE=fJ;;dtV>)3T&4zKLt+i^ zExG}CL*f$M>?xJ4IX7xyNa7QcOc*hvbShxvCB);5q=HdEJWj`xI8Eddf8ue<5;F7r z7v7jv4P(bklS#~XNYjf*J@g{Eggm5PR2{A1?s)12VbzbP6~hM$-)SnKUFdH=2f>uS z3ijuy+RxKmzd-Z-A}#baS_FNy%&?+an)DJcVe_6rpgEI35C)nP&Ssnm7A0r{BQ!WU zVH_Y4xLgpAq)~9nxbQ*(HZVVlIq^a35hFoVmAfrK1!aL6Epj02N-5J_H}a;;bu+_t zr!h@K9B;Vp%hU^3GbPuhv5!lRj=QE?>oqJZE1SK>dbn@3_TBn3$NX90o3ODIe|U|Z z!Lb012HjK$Z_teWbczNHT0yd(js|-H7s;a|9zO?d2d6AL9khedKm-YUvJe?6gbDrAhNrSeakj` zrrWa)kJ{FrWj3?V*3X=7t!X({$F8+A{b}u}hAT7epwl&Lc2=@Gw%d4mkmYObc2-)w zl;z>kMYNZrEj$l(xdUC?10jP_fWWMNy1K2(6<5NuE)XP+Cf+%T3-d^^df(*mG)KCo7uWZl{}Rmec!?f%n0r%DI7vt{8}} z-Gwf`260n?F`a6(^hSBD_RFh+y4zzfQx^HG9lT&+Fo|P2|KVnrgy$=f;yr@w;Q3IE zSqbVlLSkUa2OvB30%S#*@R(CV)z!o z%&A3Z3DoSEgiOefiHI~hw$tsj30%~E9EpI!wM-!$LzX};t}fnx!S2OBDE>zA7m7bY z*p>3N@hSu5n0vt3&CF=SpIZkiKFGA*v%`9)ofVr_3ka#SI{Q+D*~iR$Gt)1ZiyAz? zeE-`fc;yQi@nv-UM+ak6K4WtMMhRr>{j?W-g$&u_LxlP9a9zrh7e%*^*$ z5OQB^CXRN3eRn4??-=ocCy1cSbTS{l@ z&6OM1Z`_z~oSl2HdUo#N+R>a3cRcZ+bMTSh0O6WPnC9t>cm|t#s&xo6n7Lo@OvR(o zwwL1;%QJgl+aq2c_yQ{`-ex7{>}y_um01P8#iyF7c_nbobUIy={t372{91J3S>Ft# zdqUt2C6{j7o%8#QyVBp}5ubD0gMsLS>)cLXxQr*xa=96F5?AuAAuPwU1P9eH;LPpEZqip<1&qf@(AjpA zO)g>e67->B-$@Q!|nwSIL zILIe3z>tdjD!Ocfp!9*@7Ei(W{o!M%d1QE z#d>WawID=1W&)ic@c*t?LUU|WNQ!% zu2GP&zPN@LgIit$JOLyj!LJUsMFq_H42FCM$PBTFL#E+Hio+Ve4%xYMIuWi;T$)x{;`QBS;u1Wgr}k>CcmV8|ID6;dQ7 z(ZS*(*p77P!Wo-Y;7%Bf#^acW@s|Yz3;?7)BaLT7-2y)90_xbKvr}gb6dJc9Uc<%c zI!oWVeCE)XHD7zSaACQ4A4rub!^H7*eY#x{|5{rkenWSPl(|QRkGT`>cw52LeqgqMJ<7~`osKBI6XU5GO-8AvB zfr1>5hmlmhM_}Z}@#NBnwsh2MREJTWC97-47d$Q(_E(uVZX;$Sb|L3&hs=_TWY+v2 DZ*g^| literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cd1de4ec2c5e1b23d50e1eccf4f209f9d748f91 GIT binary patch literal 8379 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eeb77e74334b54e3206f8f699d183de016909453 GIT binary patch literal 1139 zcmZ`(OK;Oa5Z?7GZg5Kpr2=t-QzY76I3a|9q!g)5L5+H`ELM(po0|F&cGr~>^_EKg z8|Bzvz#rjci4!Nzy>Vh@)2gXZSK9G6JKlMGGj_SS*d(xieEBu_=@If9mHFj>@)ox0 zg5ZSHjN~+=6tR_AxgFXD+nJNQp=+>{d3hsjP_jk1%e_;=Jwc~-=<`OOwEaI6T(xPv z+N(01z8`DRIgDjr=+Cko2nm)}r{rld?CV&IUYs1Jg@Ds1oBN&Zy>6)T zXJeHrFfJJ*>-SjiQ+IPGfe^QreWj_F00apsC!uvl4k)MGI`uxCEt;8rg{Xrk!}nOf)8cS4D_wKD~sx!Ri&cs5SRxsMi3 zz%kuzFVwE8MnXzx0jYh)(jwK2NpvV(JX=T%B~0ZKTT(ybb3CvZiI@mkyHY5jFKF#3 zksZKufw3fum169I{2g{)Mf*xf7420@#Zk9Rs$3LWMO&%!Y#sA;ssg6@n$&q&^Mk zWMz)O_3Ik{BNEB%z`n#fIR%2O-H8WR*S7cMGMvc(g+WF<0JRP<6DXY(aW2|$a%q8Z ztjXi~pz|-?8CbU9CIqd$?NW-kxI3ty#l^4!Qr6&xTmf;r#%pui$DU$ljMYuX@{(5> z;()PlRh-Q%hPB!U7GV1Mos{C1>Bob7&W^<+RQ_E+cnwh$K*|c_U$Yyirffofsh(l>y&t-Gd4gdA5 T#5dSXg@2gfX#gV-&=vb1c^VdG literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1cec3f19014afe8ea71a535b922b222f3af20ce1 GIT binary patch literal 27184 zcmYk^b<|gNvjuQcLb^p7=`QK+?(X)XyAhD?2I&@1y1PSALKGCF5#^|$f++SqpWnTI zT-SQXi9LJv%=bJ7vfjQ46UL7g{;|K^olX-+MvL}H@c;ja9tIV{{|!tMnl8~=Me7p1 zRrD?~TE*xRvvIUsvAT!Z@Q)|uqoSpZ7A+?eXo-p&Co~UZhv9$1#k_N&7sO*4F|R4i zN*8)Ng%^bx6NTnUtkAp)bp?Io7KgbYGjDT((8Lb;gE~6$%2kXTdc;Kyd_6Q%!Z7N6 z1oLBrCSBsNnpU+=!q7AhNu#!@rVk5Izu>#gTN;u^t<#&IS5I#g@1t;!Ak0S#K4nUw z`ZydHH9Hg@HC?s5+#KOtrfh^DTrQ}s<1VubkT!u_K@4zCe44|oeze}}?@`yhYN zm&v{{wS`f%s0`YUyI*?Y4UoQ8c+0-?-8m{m2k)tVXrs=mCCHd>#szX?+U>6}7yKQ; zS#UvE4Q2^P*ke@a1($_`2+G3SN?+HIG^ikKqirG5WA->;_(8qPRL=<~f{bITg*S*= z1Y8$OL&IypEh25P;SGdCLU8bm*NytejuQvuqj0ULDwb(t>0gnqR;?yi59vvyRrM}$ zjryo|3k%ryOVxqG=cE;(v`iQVh2@soauP4QL3Kdxn(=~HKco-#s6JAy?m?Fe-vFs= z+790P7A#Nh8>GDs+`;e|s@0q+x9UZ&(4BWY%muAb&9_!5ZHq&25OPL~nuegZ1%H7{ zAvb}ykCy`J9*13G?rmWQ1b2NU8F@39?w;%o9dRkh6!HcAg|jJmms#N&&*d7p)=@Hq1V4q~pqGxkdOzmH zbJJ*;@A1+DuhzSU87+LrmRSk!@30Ml>k^(_$Cj`fv_N&3jF%oDt36hRUhsuNeAC_! zyWt8kPAx#)uxty6wVFOpxOer+sjOF zgKPxt5$nd^?z?=2j;oiRv}pXGSJ)-G;v~(jf)>>wlY8f57Q8iX5C0Cr>FPSf#B(1hLnUZEaF>*97jZgH3!b{;aRL$fX zpl^aNBfeb1%G#ni$#tZY<+A%g_QQRNC6~39xXVnq-g0|Ld+g2|XlhkqiC+5*x5w~wc%dk%Zut5L01$m!4+q62nXx#5_1$c2Ps;GTK6gK#C8 zA61hnys0pb_pcdisX9r}d%`UU#;O(yaly6lE9NeuTZeTS`ZO2>9v_LaM++Cm|( zK@ExYH;`bQ-qXML$~IITJ#HnZWzqrC7)pR55&q+(CkRxyE$nsTr-Y zWYT*s^n#DzT2in8IGbEDx%`gPlF0Xn%pH+I_*trs=(y(@8_|59cTQo2upg@Pq|HOs zCk%tmyzXS=K@|tpkF?~FD=b`N^HgxxEHe_zD&StUe2l&~?+=BAE?&wW=Xu?Tj8E$X0l2t2I$1D3Eq)y+YO*&<6BdG{dT#^YVeT@YMCi4}pf9>*_9Dn- zqw#Wut*{Q?6jb-LeUJG*?*a1_$N`(T0(mIc1VIe+LoKrv=_mMpwe)(p<-&v7Udp{@ z%O5bW0&X2bg8DT7raD!}9{M_{7H5WGZs+lS2YJOTGjghpo>KLnu#MhFRQ-tl8{T8) zTjo2aJ1tXy*ITuZK?mgG8`K`vLf*Tf7kow4I^k1%1i6U?HUgZTY6$Uzi{By2uUGdkf?jd@XrDBZxs-Pkcia z`U-zhSmpJf^IkB&GKG+4ge%Ou9G)rYPGmoA4SfgeC~b=GmD~_4pUS;Nup{gZ#)KU~ zWo?b&{zlc#T{b%V1mI$*e$(+gQ%U$xwY`qjNITi6URVfzKy_1F3;V7G`IxuCT^5C_ z28TfEI7DY{hpd0XOUJWJZM{R0=4LtytD9DYw0{`Cs2sIM^%X(MKnkIM8|h2x3rE7x z3+kEnfp8=9IzjPt6fyiW(n^{8FXlF?{h2>e%>x<3%VhiUl%}t5&om$NVkGpXQbj7KKaY_Lb#+$CAQb z{-e8tST>7ho-ePmiRg}-@! z>Uc|`xV55TsjJY;f(6YTARKSd=W+)e%p>t- zMbJD#Z|Uf?L`xr(NyPhCH8C#`s# zW~@h5l&VW^FiLMy;4P|+t(r_23)O#2drxuJg2@#&fP6>Gaq2r@NuiLEnPkDOsHSTx zV#`ztshQF`1{j`3_y&`fDXya>sydiUJKaIvEi7L%Z^FevpDy%*vDRv0!8W`fsXA<# z^l)VmJVDTmf?`H40Lh?w+ciEA9?|iaYDR@Dz{7~lrZ=VAmu5;(kO^cPrO}dxrZ6p4 znX;y3R-KC=y6VTIwIeNta45bz=4OH0FMMKnOx1xDEEZ-}En{Ru*NE)_p793gcuVy) zxwhuU(wj~0cbfBi+UyYsuLzc6wyXrakT+Z*2gqG~d&u2qcpRkrBOXXO8@1$h^zfaS zoZ8;E!t1V)OPHHUCrobN)b@=XstQi>N>Q-g!QM9fFd6MAjcZy=(rl0_DdB^#S+_*+2a+2TNprC3A`(DQ!$J`4xFNW%E1WSP1 z8ejtk+a*V9jc;m8_YOhMtNG^GANH3ZGb;eEe6*f zUvuULlK{&IkhfI}!libNrE+bV42C~3yq~p-!)=7Sg}#Ka9b6ga1wqXeO4|G&L2omD z@hhrkI5HTDYP7Jk_ibld44M{RzP>9bM(h%iVLjzF{u-7eRlJmLPo;QV_IU zt`{#Y8I^5Wg&AqkdEn#Zwr8rsHPGAC)t2k{n~crC7pY1{_-uu$SbED%1+Eaef!$^(0$$9F)B7f>tiZo}o_ca8gdZANN!xA*tITW8Yht4&;h-SASNJd5 z2ogHoVWiz0r!)msbR<&9uI;?SD5NWN+>!g-`fu?5F!y7S@mBa#SO!a3TJAE}(Z?}7 zBc;uRe=--eB{rxpss|viK&n!3QMDQ`2}n%W_{UAZ2xkO8Tj3!=|H>r=NybzmEgz~9 z3b!y<$I`{fJLnV0eS*G*!XUU`(8pqG%8kGrpGo2Nwd6k4afzudOsVjn-chz(2%Jjp zBn4B2<-$U6jMD4w@;(K-949%YDVRE_N;%z0(#on{BcpC)21t4IM+{nzC6!za9pA&v zuuMw(zOPzOTWXN)!Wl^G%QaxqC{*+P^+eE6t|aE8p$WdE^oF*3M*g99u<9GyhVatz z{?eP;s=LX3Q?3!J#>@r;-&udOk0zRfm4jPE2h| zW#Lm^8Y6#1&=mMxGUlpgGO{_ySLRl?;1t!Bp5h-SuaW7EjH{4=_gJAm^Aj_Q$*8c0 z+#C4nV=gajW@HDdUYU^zZnf&WG{?2VQ09c{82e}P+tpp z2H}~oWM+mc3?d@~r5$v1WI8b=@nuKwl`XUA9qDS*B3HB4OpqKPopoG<>jGDTpjk-M zF?+qjr#5fxJ18l)Pi{ZcMQGXsRrEj`?BpCd>?WLnkbF7zAvZo-+oaYP;m z9;i1n8N;pch2Hw+##7x2H(BAK-aJ$_Q0)PCohfJTTxZ(H{EPmC-VC9Fpe4EQVX5fT z8)Vu}xWT+^q`ih^8^{p3@w|;rG6G9s;ZTLVhM%JJZfJtNn8(|)2x$$e`r7d6dgCA+ zrtKt_x8X`MJr(`}iD9km;TIOXjp|l7C^*W?XHa}?2Wf7Ec{r-ekwMg#^!aqgcLQGz z-)Vkral@i<4|*IvG@ejGMq6EVx4M7+gVx!89MDYKYt>3YMWSqY{xeefX}jZuAIS_#uysg9y_G*iutJbDvY<~!3eJL0>lh0V>YT1}yW zxzn)pc9Jn5@$rr2b)|2h>PZBZ={rNv0Bz~yj+!Vf1G$JzZ}F-c-HQm}Z`F zITBtb<`6(_Q)yDWy=r)`rJJ|yEh zGYYsGNOh)#jppK;$Em#k(iXuj>WiX3u4AdWqr*!En~3~e$JZdmK;~n~4l<2` z5(LFlJr~XmZtM7mpkFXA06u|qrQLQ|rjFqUkY18o2(pN|jb*mpmNdr~E>?&R_df5S zwxU>GSFL2#k`$CsSOT(?S;j19?%}IJ!5tk1s47BuD>GU%E8y;`_GL~2e~Yga=7K)u zyGHimwb5}2L0jG_;C8%~AxrS1^-s&qG50)utI)4zYAT#z{y=}0SK5p zUFVJF6*Q=vk^O*c(YHbG2Tbh{7lf(sU;DiDBVKlV)o8iT+@xi@6Q5SNk0q#t)9g7Rbx5YBL`w|#n>^loN8mP>%;j6svlc+OmRp$|cN z@TM~#3FDBqL|X;S`ON6Yl$0y&es2>wTv!q0nGU}zJ?eG2e?fAXc1&TKX|JK*f_^KL zLSb9z18oRhY9}MR$#v!xcjp912V&_L;(`H| z`42&fuo`?O{M~Ll5$s|nnwyxZNPR=#RlLep$V+`R;cnoIa(j5G?e@Sm+7MKS(nE$1 z4mogtoJf-dTl*;UFaE_CZm3Gp{1kIK zgX$qIEw>s=RRq= zue2SvTMW|%Ia6=BtZ-+UDR6mE%`#}V>N`jeTj83Hc_Ad&Ox2sftzBa*zWSE=5X&yP zm8xH3iK+TXSc!K8)qTuw0S|J?SPr&EbthaZB0H*nir^#OQEfFWorJ#k6lTEPvtUDE z7A$3e6CwT74UTEcr=t+&G&9AkHQ7s`v~gTJRX9fro}b9k7;wQ zbuq*R$MqHksX=p61fK}&>Rrcs&q*f3z3&EzQ2>CELB00$bDjkPnq+;e`CHRyv+17<0En(;hUq{UoNTMEefA7 zm&o{=cST!$f-cK_Z{!uK256hWYXvun+<|g~n5){hD#RddB3y%zCFtrJpJ4e63N);edkLIXJ)Eiqh*NR zp-d%^cQE%S=)7$n~A1tUDbeYs{jb}MW!?Sb4Ck6hUya*@^_!35?GEzNZ#bc4^W^-#wnrV3Tx z@T!Jh(8P>tynehpW;|BSYEV|fhtqsi_^lQG0{IrCI;!t@BNVnNjDfpA&_86%r{ICY zWFN?4g~q~XycR?z*SkvY399Qx2E4&~Q>d0jTEnzWyd}Wx@%;zf$kOTYrBc}BWsb{T z0Uk=m_xOHbS{gaRMkAU2ZvUe~Y+ex^Pld%WKjWpO;DKo)dH)%-S2zm6Xr{5Jc$fF9 zwpbn|74T%YZ)Id_<|llq%}4|HH?x81fbU0|tLa#2g|_x$$+w za@j_SP~Ct_jAgxQ6((BvOZibLcy&Bfa~&^Di>{DNZ&PhCgyZ3oAov~bEx5q*B!o+C z_;uBK?h;c+ET)m+J>`z;sEXy&$d8NO*dVVlbt$;#V2yR;VB#oraFQ>{7--OVx37jJ zk#L%k9YID@a6|a9YEA?_+%GPcc+9&X%}`YedxO@Ir*O&Uau0c5@jBs)ucIcu2}X8C z`nud0EW0c-(poolOw;?o$ft7Wd7ZJ01^!r=KyMehguDs(+FIdD9j9$R(V()xUEvbJ zJq1b3OTtV7nW*- znNrJ**D(b+DXO-nHBfDZZ#t#D5PU6csL-0%6Y~t!-l~0=Myh>zoeBTfv_z)OgqssG z2Y)$dW4IQUNkhRKOiFXxV9vw)#g?~u8zY`VO(UD=Z5lCQA-IGuErL{5cw$;FIKP7{ zstN^fs-|PoGyUkx!0XS89kvBMv23Nex87OgPC!uGNiqWeAE zzWeWWWCC7ow*k~wpuRcC0MmW|sjRKK>VeP%Yf+srH=*2In%kK+5%^;pJqqcA5^#eQ zl2KJk$5*_xaGA}Wq_>a4K-2b7l||u4kgUA7n6}P22xOb3v&ntue%W~gs2{AFLzqV) zCodN>+i|+ey@_49OCHV*CVH|I6qF=)c;v9*4T6jcspO_Q-9uC(R2xySml-LXZ|-!s zGX&){qrH(|8B~Vml7=sU>*cz$OuLTYmd9(4ITN{!5p)pt{m<&8j zp%muXaHV-=n9Qng0hbm2W5y^-)9d|Dp`1b&;m^P+5tNtfN>ysh%%=1aE#EMyKo(lz zfa+tp3>N$a!D#dq5L9F;F=x@|$MUXfM;-M&azcg2SZ?z=xK$_BC8SNkmyP#2`c2f| z(Ds2>C~ax~w;NG&Db1j|h^op)#uQfJeT#mv!WhGE0C&@t1$`aMOy$kt&1IGv`8`Ng z1f>ZdtGAjkyJ~gbb8V^NUeGtp%hXWFMcP*ejnmfIMjN%&RP7>cqPmRv0l_p>T@^0K z{eReiuCTKi zgA9LQ!MgbBF^`argFA?Mi9O=MO|?QA7y1ii8AvzM#@lEqTuX&6n7cB|L%Bh2GSV1% zmHPT-)W9-9TUNsFYs<=%HgbmCL(Hd*TyD^})YsJ3Mp!|0B7#ZGJ@f++yruV7rh!2X znU}(yI%e`3$@Re3nAe24hcplKDUnU(CSz{KJ4DqfhppofzhTJ?H{aY^5mlkmpr}=w z>-bJbET35mVN0eJbJ($4^U9Gs)Pg-}>E>W3bevPjqcDYnXgabP`I(VZ<=z7MSJ(#C zWNjy@Pr>V@`n!&{s?&7zGNYZaJ=2}$Y!Mdp9ppMj3S^|QWnxqhKxU!(4naNp*4Enz zxHHp*nQq2xxXv~os`p2@uB!L7b+XZLnimMWDZC@>9`Pc^@IMI3K|z$<>(=URctFbt z&)7qui$PI39^iX}Nv2vx$1@6MP&F##3#NFPBbd)KtI^LVXrZ?MbR?#wzOX0yi`4hx zMOXbm$40r1zJq1xXQJ;7a!0t#PrwYS`p9hp-mZ7BkxwE8d(4X5iaBqit_sTRx{brxi9c?a3X0U?4LS z^DJh$72=RvhP0}1jnH?a$ibNLAoH*^ zwtg+)Fw86LJDfLy>4W(rO6!D=7u>UDKlq3vj_B0Gn^w&rS z$gKt$54?sqP;L=v4}l*s3v^5XnaF%)H_-3TTj zorU0gxV)Il@)D>{1-?i@TDiftJSn$MTWZ4Z3Jc&HZuo3euL(cVHXLM#w%x)<1kC{% zDz}iJxx#tOQaAX)sz*)xm-iPzBQVbgS)?PSk(V%+)A0;d<;d+F=Rd+vD*U7{Qtz7z zt?;ekEkL!9d7q%gNZ)6EF!zkzI+~G+_l-gCQ@`Gc`=c*!+DQ&`R`tkO2xO&jpm>$t@GQFViG z85xO;d>8IR)r2(HGi{7qXSwBYZ^(V1Z6h;QwT9{>CM5+?m>1yN1hSd=m8zG_hr-wn z@sW;?gj<-c%r>S6f)AW?BeNH2Zf2PeWRu)x=3f{3#&Oa!DjD*_*vX@z^H@aLwbEi}KGjB2GJgRdD z&&&Ib=2cj>gnU6w`|iWCpP6j<0p4=Uys7O91&NSWBIB6cL6D-tfo3eW$051H%n{}& z^BBt|T8>2uhL_h-S?_!9vYM7u5ouPa?)9IVag~U+h6rx~*Fov+VWhxta2KX$~%g7Z*uC{NKj?p0JRLiTL=Y7n?vd0R$T@X&7 z!q1rF6y!4_Kl6t@ zVxh{VZJTM^@J%OtvfhnG?nG5sZZ}*M;W71ILwZ@^bKYF^v#?Y|dW?5M?pIzu@B0PZ zb!LYTbBYH`@IQz*WFE-NAU`?cZwk9YTyWhoGZYG%y99l2W(FYaE}y9f_&y++puIb z?F`&Es!idxN7ffk*E=UNTv$hSuCR#RzLQI5g(tjiaxsZ~E*HpsieQ=Ci!c{#bC>T7 zp9#F%O<%LeTW~o^8^U}g+@qS^$nQ~ga^kIee?`An^#_HQ!rz#&sNyi=m>;nG2r`m4 zkMJFKdn)&g`H7jY@H6ihW+%vVUST)gB^+yo)4sJA3h$x+PA-kpEkLl{MhkiSNc$D; z8|rr>cqv?@+78Qa!f*99!?KV0U2ZYRegtP#m%7FQ;S+6pP+jD`4|h;uJS{POdWC_T zqxwrOE zP%Rf;)$y0yJ+HMx__uJpcl(3L38eka{G;%l-dG`DaKX1xL)!{ei!Adm$RS()$BP#J zQgl>wCI%CeSqWT)+*py&acW{2$a|B5eT464R@mddY9@0J$ZgSkg0xkrhVmxr9qDS( zRL3v}nb>CRQ8-Lh0f*@0YI#*(Q;oyKWviro83mhC6P`^!p zk)|UD;YWqVFi(_A1~-Y9+3EH;)9TO*hI_Zqbo`^*3{`UAb>{wVg-fKJ67BLhfpVFtY!nJcDc z;xz|JK-xUG%yI`1#6Xo$;a9!obd)e-np_sRtV~I{9y+QZcw)hIOd`0qK;j|D#!D>s zQg|Hw9(%NK@$9NeRCDmEqMFa-6jtNK)R9ZL$xVk@`m(t_5yVnmpL8OZ!&Qds1#Qs=Ofcuxw(|>iq!j1ggZm+H(2e@-qdPQZ_$ng@VFbybtlcrmc|N zC~dFIJt;RIz2Dsu^%2|_=6hjP!gD)uVQsrzXqF$pq)xIGE)IfIObvx$z!@>0mW#_2 zpif}m$|1@K6S&K_Oj_m-EWctYil7)1Pwxt6e_J>Y zu6}r-;DJv*zG`uW63l7LC3$CfrFiS@`?Z^v7M{~_+Kh9woQ-HvnCk|~X>O^btXw%J zokD5~%0~!vRNz%)Dluy;^Mkgdn9B-()bX>cO=J4nZKYf{kcV<9OuObOu9@*U^B%}5 zrZVQ&$*sbh4xH7D8N9V-lw)QJtAZ@E<(~#s6Se}bifV^PnFaS$*jnK&W{;8Q&8V)U zJiZhJJ%jtzg+3#!lbv_9bs#l$q(Pqm zRZ7*J^rfV4qTVRET5zl3enh%n?`y)^3U!#a3Uzt)n1uLF6WIg7M?Twz7Tln>5>p?p z0dt$arSvrv{sy;;jE^a8B=>=i#=IuXcckUiaT9YYa(C;f4EL!sHHAy9(2Vz&t2O7f zU@l<3$g~vBhPy!XMW$7l3zqn(KLP1tMr*jvHmZSYk7@16cwaTEkp-Qk4O}8DZFzg) z`cN9*T30|mMS6)z4A%}W32$G7RM-=)ie-LwzYcO8nava|prDiRd(|_-H99)W?Z-05 zMu$`{M^?~wKp~C7Prz3c-Vi1=yo=s;p0TRAU4n-jOsddCh*6OLyi}_sPCVlTRz2&OY+`-5` z!r|8MN90`hJ0t9?P>#NRk*e?t`u@Dv&G?YC%>)gQ`@*1(Nbe}jLv_?1162nxSnM*tCFWOhafCxaj_F-P!8aDX0els%E64&jc&R!Rco;LBIj-#lvsU#UeIpb` zG8Nol6z?-s2i6b*li!URB z(;%I&jFJ0FwF2-31ZR!>6E33}&zUnip6ZwZa#P1G<{G(UBf?!{9B;Fc@A2LyttP(D z;l|5NU>3{qD3Ow%!) z`A~S+5$_0Q&luz4+zd%~+^ECBhL_XXyK!bQwt=9%96z_qo#FZV#WgqKzBq3{uN)WUais>%5nzx4e2H!h!H&B&xlC=u?UE@o+v%Z6Ma_gDLARBle z`d(6jr74IPnP~&xCtaZaDQukrT25!9T2$& zvpK>Nn&65V9|^ZG{SZ91$2Eu8DtBJT2>LQ0O@nWnLQ|_QkgG+(cDcz`Eu^=$+#qvz zDC}f*FPMRkv_s#%Sp~T(;ISi3_pTzp+V;rc4OJY>}B?are3a?w=z|2 zTDeK{_Dxzgs9CvUo%U5~Hg3|WW~HW0YSypUzEQ>SPq&i%AEIKVI#t^@uGy;Utu+6e zsa&ICqxMbex3AWyYQy&R8&#>=Xmhjyu|p*h^Jmw}rP?$d*mc0bHjM@k9N4i2elc}wa<_?b)q`885lLFYrcLRJNN9^ zz3ad>{i6C6Xdl+P^c_&3^E({}bm=;%K-a;Y2Mz5uplkp9{f6I)Tc&s4E`xh@_2ESG P8&aah$`dPQ+!+4@G*{F@ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c87fe5be09bf8edb3d6f150d1674076f799f4fbf GIT binary patch literal 1139 zcmZ`(%Wl&^6rJ%aZg3xjQh`{(ib%BGutEp{Nhyn_AkwOmWifI*({#Xg!pyi;qV7_u zzfqR`0zQPDC049hcgKo*omNeSI?`O4D#;P4u@ zZiC^3)0AX1q!fKCwK6-jE8k9?%njYjcTz8_g*8ex33s`7LbxaB#14I4>yoDbheE0* zEmt~4YUJCI5v_w*b%pt;20fu5(r691%==vv8_|iA1DOlBeYmmP+SzMMZItX4Mh@~f zd7O^4)DT>#f~?zNoe%AetprNkSoY;fKLSWw1vZM?wpVb4PEf7 zzQOlSi9IRrFmcUqIXhhvkDV_5s8To zMSd7<$zG(T5v#*E`5O0yj)ro$&LGAIYCQqwxG?LYNX*f&;%{v@Qa-f!1hz(Jf!3){ z13F%w!Efzq#{YmsFk7%Ma86DEAZvT`S*6Rt@+i6fM1-SRTds?M3}G&ie&`f}E>mFgIts3O9Y^6gy+AtTUDk zc#)zXF!rs8(`lqat@Hs!P=Xn$dzf?uOgVo^Vj|KMRB=7}0=|OtSHgJ=jz(~N5>U&l zQ_F79DuN1I%zBsOPkB-ZP}!L3O5>-NO+U3tb>&h;?TpB#y7M551`(nttJE{yT(jZ7 VoR0Vk$<+7{6Fdq)0s&pN{sDp{7SsR$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8332a97fbe26065ca2d43a2448a77f4805d617ba GIT binary patch literal 19108 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Çi`&RaISZB7d7c(RRE^3uX>!YS z0cnEv7_O5Gt4`o=-JKysPcW+JHV3YN`vH>))vg0q2L76tER!^fb>%u=0vRrR1u{~j1<@(7%K$&t9l%RxjMn^RR=eZs zHp4xOyBqg;CL8GfW?Df4-&!WVQ=Hh8$>rQXa@pmjvq389{w2+9&@tWLobDN(&y1Bq zFEiqX5S22#VHgy>@AQ^%^xaI#8)*?tR?yx{WmYP^s>U*W2jlby#lg=wQ}Yr2maQ`=^CfuwwbmAB(?4WryRi9jeHDT$jB|yt{}B7-4(66#v_Bq zxX$kl|AFZ5PA}Rr2BW2E)r2)5y|B9vAMAze1ptkQewf;OBIE7?g?V zKdk-hR6^s5@F7E!oib~*Fs)3GkHW9O;jQCz703vUJ#dwUq2yl<-KaBMKDAU~P!z0$ zw}i?4=H^A)BApP1N5NkBme<(JX&k@*9k6st8>J!|Us!CTs^-Q>dl1Oz^s~k$rypEr zVW&dw`3`VrwK7ge11_3n+AmhP5Fk-j>CfiQQtRzB3b-%PGScp``!clLZLIZcZ8^2? zUERX~j((ytT{I2jm)VN+y4DLk(h|jFIzVJ%<_5AHdCUliD&f z##P{#;2u(*q5F-rHmQr!fg1IJzj1Z>g)Bsi=w1yWT1~lt%TA+FDST$4D{B2owYGGA zBiC`7SvWy-HPIRdP0(%2b6=+(Xe;SW^xL!HbF0X z#qdo0l{e@$TULe3t-DtD1jg4!o@C=$YyAiOMtCSuCCIrW zXXr+iFy3PAF1tTt{Nq#=qcW*?q)Bf>X*QuS$Y|VUq=w<<_KJ=* ze77yzGPKJ@d`2n(l|!E3pKytJ?haCq)MmJkL23XOq`ZMt0&{nT8PQ+Bf2f^-yCbBd zSJKiivXLTKi)z5-XL1^;EV@_et@8jfayr+v_sva4Wdd+YxTLyYN(%|KI2~`~RyK~) zi;vqvS_z~T2YZ5w|7Rt<_iQwzGMM~DxFrOdYsAHPS!1zj%Y+wzU()!N$rjRN-p*aR z&*G+KvaCj7>1!He)qW_p@w42i?Hj-()f-!_ZO0?Y=S3ug+%cnNaDNATX z#hLud$Qc+%?NLFP#q&wrjlln+tyF7m#y&Gz!1cFLL!lU4Ay*uqtAf(*1Qto#xy}_# z{!QgOxD3)Fl%FP$RwEAOugu89^Q$10)jk0kqcM_HnIIoE<9?Rwyb!=qdg-fhi-gy# zHIK=eb~}zXgw*>&9Lf{fNYBCB9#j(YGjKoD9fbRnw1YjS0{6o`&go*0tOLj`4kkOj z6QrWAgN^8AUUHec-1_yY)CPH%%5MfWlU`&p9f3EcJ1zaRX&;0T#ZalEQApS#%x0|= z(f(|VP`l=`(-N&I{Zyl`jY>fm{;YD+kyV#e^P0e#@gRWaT z32=-->nOJ(8c%I(SiyfJ3nN|eduVBdKS0(5<*2{zmVk-sJDnmr2Dgpdc;fViFp-Tl zeu&iJFD*lUbBHP6hBBHvLZcu<+wAccfdZzLbxPnm|F&v8GoBLSdQe|d{zQ6(Kz9Ne zfh(f*3{uextbGSp0kfz4W-Fbua7wL;h{G)0E$1au2<6TH=gL-0FIhq^d{es(>b0@ zWujStvs&TT(1-@W{bcDDlt;1K#p$lMQbeAt7Zc__aD%z@t^?%+PA9Or{kbr zoqG=)(5gnvz?y?Pw5lG{f55=P4g2@$-nrwzR)ahD9^9&KOovtjVg`0D+_!zl9__n! z9?+_9Oy8nyL$6bx{zW@>Yu~?9=Yd7LcHp{8|IYo2^c{94$xFTZbQ;vNvv2V@{;4}o Lg8T{MC5iVx=Iw?% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbc9e67bb2c05eb6e10ee7a6f2a9dc670012184f GIT binary patch literal 1147 zcmZ`(%Wl&^6rJ%aZsb0QS`e^;6_IEo3M+&VG=Z{c3L;`-S&SUdG&R^xm>E|})mhmO124ixpz#sC+N%$ecl+5w*Q+#sx~#Z z`(>unt*I8>{a6l!{vgLgAtBQ0j(J*)20GTFA1C{1A>j7j_SWXpC!4)gX_*d7osNsw zMVw7lsvx>tN7Kosd1sDYuUO&=wB2xpPcrG<3nQ zItSl7Ar1+#^M(oPB6Xt)&T+ZW#|pUBV=$U%dPHW{sr8*uqHXQW;LKd@%?LajN95GU z2q%!4?zR_G#z~orLaS&y)$ht-^fr}Bufv32M53bu zQ5-}&=`d2M7VDEZ`5KReiYDo#!yv}TvXcOLT+=1L+)rd5ke;U|~ZpIjw9vr_Rpr?gsp9%NCVL{w&#daj!*Li`u?h%b>( Ph5t0c{QzVT&{gX%u^ts% literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a1349a90888a7a672c8b82dd56a7dc164545719 GIT binary patch literal 3024 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 KId$%dXa5JXUMy$; literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9460d36243cf754074d6f4d802517dbfe2d4c9c2 GIT binary patch literal 47924 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 SAOj?3h{O!Boo0yIoBj`}nB-gl literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02b7d96f5f6bfefc40cf49e1cf54049944b7d9be GIT binary patch literal 44563 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 F_&?{>TfYDR literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-310.pyc b/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..baaaf88383921f96ae12d66874bd134802340ce0 GIT binary patch literal 47884 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

      fqz2kdJ?44#zh-Nu3mQZAl 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 td*c)w_seC9(_PaN)-=!ejF11oTm|V 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/forms/__pycache__/forms.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/forms.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99bb73d940748a54f18b629311b12881b519b30a GIT binary patch literal 15588 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/forms/__pycache__/models.cpython-310.pyc b/venv/Lib/site-packages/django/forms/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54328a256ab0ee4c53eb3c8b288dd563ada44bd2 GIT binary patch literal 38611 zcmeHwd6XQ-dEazTPfyRevx~)I0fOX!1PBZXEKl(gNRh(9L*$YoKv5cj9t@^?fm!U% zEUIS#?s!(B2-*ZAQO}ZMS&r#sk=U`R9Ln>V*mC@QJC0-LkmICZ96NUGSiWshvP_Xg ze!s7}dyZXDl;ZrA%)F_o>aMD;UN=!P2lsDZ~3hgKlDe5#P2aN_?bfDKK%UK z%|yaYR1>b@nhVCFSv3vDlMBg3t7d%X}NAKIE$HTW-(jMN;;ZlPLs?{UZ6((^`j2V&#y1Y*~?o7~Cg6V+=o z#nG>Oue;fudf9NdxYN%kt2-Y^xLe(A&nMh%=gsOaq^@wcBemTtoKIG-L;6bhDx|OS z@<{JS`f9g~blKbOUFYt2$*S)0_PE8-?_Acs#=RCTsi4G8cNa?R^2SiZ^~~*E?_THb z#y2Y0j}^nKo898vW_OQUK^-@sj_chUP{$44^{8X7`!08{yAOBvd3(IQVJ$N#iBj_2 zxV|a(M)xL^nn8UxySJdeTf8jlyAkPI-P@494P$T@KIknhd8$0O+-h{1?UrAjYpZfYdG$`S zb+UZ8trp9Tg}U#1xTD&O<%9F}*2#8xvF&;bezx9n%Wl0>KT-F+@?6tfaLerz^IoIl z&t$(yaIF|Ys&T5`Y*nnFH2c_W?eIf~9ywS$^u!a7J#i$+9%hk4O0`um`OxB$YNIU+ zD+k)Gx#r1b<+;Jw`|1l#JONFUY!x%e9XQo)HasaBq~s4*op+-NY;LgapobPKlsT(2 z`Hy;?x^#l2qkKoaPB4bfF8W@lHdk+S+G+)@&B$XOY5E6pS<9L#>5oO9q=6H#a4@E@xam8r>jWtJN14YPH#hMc4>G z8T>o=9l+0j9f4r7#GEzjjx(#V(EpsuU-rq~`>ej@3 zc0RY3$FmCf6?=)bF-OA!t(~^qh!*yYRHh6}4S>~_dG%*2o2waDkim?5LhZ!OAXQt$N(=IXPYrAhqk-eO zO(2Q|FUU6ir~^Uf{^d?vFJ-G$U-W|9sk&cty}3FTTac2nfqky&Vu@6@oUJb`d$smr z6D!B9vGdZiz+zLGd%^RAY~6KhOUj#TJ`*HSEXaF{OP!UP6!xo`!^owdXxEpPyp|gj zITl<*y1Ggxu$Ty(sF`XvyO;K!X)G+ep6;yGUh4SjI^3v^@xe7|tE}$8n0qCm-iceU zeel5D$DZ^(M@G%saM z^GzpdzG0>&4AUs$XIti_qKVWc^Udj$`86}0Pv(tD(=jJeLfwNZ8c77v$3`TDpRCeT zh+vH*R+G)ds?{-i$$1mMB!1TUBq03S)l?_dOK~NiPx@QV6no%EupW0{{n|YP>v0FJ znW`db6YHpgbZRZ#OI$R17O(D4;EKf+QGX7gCouR#vPRQC4=ooX?_423-dE4zviDsu+UqFG=-paYQa?5pfQYLC98!jc8ULQG{ zK9*z|vk#h7Unmoum)mn8^&<@XGv$Zo${=QEo37{XjTUdawXnj5N`1`d#&w5)_03cs z79Fm*j~C*_%@NyM_5fhz<{Wdcpo^ZgUY5QLA@BzYGI}YE?2iF4lG=k=KRjD;)GkC6 z*v>>ShB*MU&nX0IiLlJ`Sg5dK8twjqH*2;tS4$|H+>{A_^V{P_uRj< z1ZY`k0@c+T!teMP#d3(5i3nt-0K8|GJ+%TJhSS>eJV4xxM%Br{KJ*NL(+`}-mOGw$ z!kY_>_XbW>AeaPl1il)6L|`tRe#KA^U|eQpq$|0g6yy0BjeOL*aa(Z!)j#dYN2)l+yg-YSWQ*zAQN|Fw8qkCyQ;-TdlAgnGr+T~a|9HE zYk|ubR@QZgpcg;nEZXF6LojIq(E&J!9*Y1M8;CG_$@wY}-($Fa6ztj5#`QHsDnlMZ zR0%)gMB+*RcW|Ydc+otWcrhusF(+^Zn0gVJUr5XW1G?7pPA@kP40+yI&37!|$Q<2Hrf>E6itrH!-dkcqQS#lUFVflOF11U6jE6 z#C&efoI>5t8E1BcB_9t<8tU;gJ1!XDWOO-lE<1p|i{Oe*Ngi@VrvSOQzctY-x|#in zUaFHnZTfyMrOrv76!M&Nv$&hXU0Z#dT(xoa+rZ~UCG)tKR-cl4Y25o%FCE`2;GUx{ z$~_17E`ooH$`x@hqdq71GPw7-UM9XbhI>sC_aM-qGw{L~F|=UEu(O&I&5gT`UW=EiaOdbBP=4WnDDx zdc5>&4M-j*z)yuVw#+oSQP915r`)NZhJYKf*V2svzB^(U`g0mTV4;nQnq6|EA?1{b zjJX2c!iYWa%jZrt8>hPi}E-dq5@Yq z>s@}dE{XQ)ez^&LgbS+GZtaT%KfP$x3|etCa3aVLQUbR@CI;A`I1Fn+mh-9Mp?mZC zC0$-z1`Cch)nheQnM$m1g|8cJGJi7Kdl3PVNIX5Uijh`XjyDJ@#`^+Q2K+bHFbfxr zPYsR#Ehwj+Ku}2vmx=~*@N-@t6I2 zGZI&!po2A=6*o!mbcQLzW*DDFoyL`}8@G4PV->2gFiGSyrTm4>ER)frtrQRWIP@ zcM({7EyFhQW){M+eaTD~4d+rmX+ubMAS81tw4iK)H#9F)6{ajn zrNUH7Qg)cKC6x|SX-PR@%8^tiOyM7m&d!d&j5>jaDVKrAV2%NSK%GQT$!ahihO@6z z#tbaqTbK*dS{(QFq7x~RGfzl|f}m5YeFZ6h0>SWvk@@d#)yT6ywlh(wSB%+;rE07x zTcd_`8Q@q8^0nHT<@!Rnh8A#p;JNX`RTDS9jGxb$aqwihvLOHZ$2}uSMaZ_WR_K+@>5=j9+0+rtdnQKddaneKkAwoN?MzGd;+xoirqsw1%?t zhLwO;GhNHLNj&Y!)eP=Az07%YHQUMdvYi~B^?v;4PeYsPTD>&1teIZcO}(6)O04F< z!RJJ7c_*}`W9ml{mfQrm{RPCvb*wYtLU*L)8{VgEqB<_*iCU=xt?NAXwbar=vpYX2 zde_Z}P2sl%ziIrox@p&WDYu$;Gj8_zL@&R#?PB5}rLjVy5ejwJUo?$mytkzCh_}b*yt0r3gqF`L(Nc35;EmvDG|expb|}(Ww+>1BPe4V3IpvKs#j*|FHc~G}*0rf!$?_ z@lB|SJ(5tl6N(Rmw?NvV-a6Gh0WGEbPGPsoU;(Ip@XO0f(8RIXht=a~&k*?~TyixW z!Ox#YaEj#DIcBaJt7gyiL2^IYC$$=}ClzxC#_7N~JFw1VeP{MV^C5)w-2ir{dHo)RUCA-%>**e{7pKEFUWRG7d@7aZ5l*8$od&`v_>R~)XongRv z4U$Xkr6A=m!*E6WhCD>EXR_EeO54RGwIV?hGpdO$k&3D_7(saC1%*<)HR=me82d#K zRJS=d=P3`?fa;hlmakYC39R{cv!!XiEz<)1x~O3EY*$J_a2oMP1;z>8?+kk?R9oxl6r1fMK$ZSU0ru)RxId_S2<4%8R4pzxMF$(EgLKIJ zL*tUE>H5Hy^l|74YD{u!TZoXPPT^-6=CgToLP+?O>7=sM_?cD`gxRp(Fy91e&X~{I zQ1b8!_^darOIaJF9mH6FkuUy&IKMhk%1fHH7r_ibb8dFGT^@`oDWM9Atx|0UY-msj zyU_4x<{AK2avz!(Swak!pol0;8j4p4N<*JqnDRS_L_`6o7D$_+2fhI6B&LnIoDd7k zO+BBfTCVM;Vc<=1?PlE^{?l&WE#TjQ!Fde-8Mow)<39@{G>z{@HRn!vxmsR` zO#$d@N}zc5wN%rs?eY&d@&oM~L!4aOkkcZP^q`s-=DOxD z&%x$Z9n-l(QtIw72Q`>?kK|xk>M)^g9jP09 z&sK6!(Az_2k7q)cZ_a1@6R{zW^t%u&8rK&B6trS936{r`?zwFZLisN^*?2t^WxM5IE_v6f`hH32Mb*i;mBK^PY5tK4m^@8Qnc2z;@Z{hrkbyN|0wbfS;d7;L;#Ne8LGd zXOC7)^>JJlGcT+n(q&mA@j`)n3-v{xi%>cih|%3N+#1O-B(G6oC!v=Ie-;ruGO=pH zk_v00*8UC5hQ%Ynx> zE`n+aLN#ZDtj0c6NdTe*m>%XZkrXHr1@)~AKEObrOiV&t?19w)JD|QD(Q1Z zw72!lHJjK3L@M7cU=~;wmIheSjrq)Z%v;TQD$&|vB|6!acNwrC8i{U>Goi`iQ;82y zvP*p^)dI=n|2gAaqMKzc^Lf}F!6v+f`HJhPzuh`eLqVO!lZqE%wc>osoF`{N8#RU) z3s-GK%s{mS0KN+&peI}AUfA8uv8Rv+t=N0KmBXT;6m&xm1C5LXhj292-$wu(vJCD? z){I_!{{UAbd?Sz{1q5*kco^O&G~{YaZ6AhHuFNkG6sU8w0R|J9EY&*CQuhX2a;caE z$M-Dsp-JKw9k(rDm`mNQBY@DaaR>?s?J*S0B7w0>VEzr64Vh8bcnLH86quPKAaF}& z0scUGO-K=H=|Z=lGCqCOTh?oi=3|)X%jdx3lvTay(>;MX`2p(Vn9qXkm1!1Mhts0s zX@m61B`o>WMaG8lq+<40ITuAloRldTeOgApd*$$0kMwD1y!k->WYs;32q0GT3>a%! zb%yW@iFs=t9%QhvTEu$LarKeWfmjGXjZo@zGW6S4pf zAo92DoPtEn8R`$YdI$P8TgeIO(JM^AUeKwGKM9w*kHNbbJj_5A1xrTjzbxhr6!)v$EyHsbmp?j0=-9}Z!K)&{ z=~B}jkU7M_#$ibL4~HMM$u%SMwVRA$FvwoV9BXMJBrF(5|IcISaoqu`q~V(rVRip_ zbRxoG#X6yya3)$ep_3|M9=sUX^)WpAeZ81*6N0Q-B(piOaQb#a!fVQ~7(YrqpD zH0r@NLL&tA=&*{^=isC;v{>Wn&?pYJTLy4IjR-#vSRm_V00c`k7txT=(TVyOVf

      ?1UqoXMlKz|LoR-R|pS=680YG+wk@N$?SZ%*8if(V=?Q)z%tW zt$%zwJ=0d7)lAM{rs{TYo)m4nuHEa+*EeifSXihHJJX}P!IN78Be~8STG58}EB5c* zzk9T>O|^|H6jj5a$r+-Ty6wd`_cqLTh+!|6@aOF6wj(oFPQG%~PK3_I`Q+}jk;#hJ z?JH-K-jK+;ZAB{%x&!_sQGd6n+ti=;i)~vjxBhn9x^&yNO?HRfXnDPD+h%Sz>2~X7 z+--JuoAmw_++MQ&@)gF;E|=C#vTkQ^Dm4cNXF5aoOGeIO+#EZ} zPDWV7VV<{Ucdngl4^Ah|B)2WO?*=hO0o8VJ`jP3~JZrU6H;}oCowZ9NxZmLWjTR4& zKsdP>%}e4oX%umkmZ;nsYvW|)aLAQmMKOE_lST<;*E&vIT{TfgpjAyITMh|qs3o|J z;YiJd#8{~A#Nu`(yG)`_%~fABhe`!W9XmZwn}bum$V}l>!d+@-+jD)=4!yy>wvnXR z2Af6}TD{FI1E%Hj$^^f{Qm5ucjCXRRC~#}_`LXHb;0#U# z8`FxiPOn@F=6qSYc1Y~)ToC3eQ6UaBQ_iZi+QJyEh=xSE%RQ%qam;G1GY; z?>rqR-F7P8RhUpWS4LUFK&NP&z3tfXuo_CyCQbO8Fo}Rptd>)Em2!gST8RM6{>8;yOX#WoPnQX zVt&>yew9{QOTS5HSUU?_QYZA%{N>ZwI~AO@tzVh$(6CaWN*%Y$rn40kGk6O@h1YcJ zN(o3xRduRLnNzt2b{==Igu1%fKR6ZI^4=MpN06~B6`q4=3Z$3jWvII~JB8Ir@kQn)9DXYC2qu?2TE^(u@s{o3EWx0N1sFbMSBA6J zgWQE37?VD4aEB9VU)`Q@n&znCyuEe+qP$hpG+pFhOdirqK46R$;saVKMpRm95R5&# z+mQ;5Z>HY$i+O4I;7opJ>TB0zvM!%Qw?m(!jc+ZG(FirKKcQvW}L` zptPHZT}7{M_7aWe&V*Dn-ll!=jI%})(Z(7eDua9BW;0f@=Fzj>&bJ1SiSbLj>dFl2 z3#(-PD^tm`>9i^XoZBXbg>w;+eITmr@1~X=TiV^)DZ+SCt>M>Pyzly{NbCLD8W11)3jfdTFwuEsMWGBbnIW*2on(>8C__5Sp!?tq z84yhAsEr@40n=Kk#J)-Jhj~XTIG(rrHA`o#2u_F5N4@2a2KTzex|4*kc}k{No^M3> z2WN_5ZPZ0{&DCY7LF3)*+9HuylsEP2FcW+6CfnxiUGUXJMuh#us(hvxI$#MMiFYV8 zNANXwt>u1+|v3&9i%E7*+F3#Ypn6ig*wKrkl?kNGE>n9apcRLSeM=# zkAemfo@3Zryy1A{bzG`h^boPSBkXEYG5&ahP=EGKbn2hOM3hB#w~M<-B~jlq^!q1x(C1lrH~$V|uO5DUw*N zbeN|olR{%(IHve&mUM|2u2T9anQfCwchcG7#OiEV2wNbzAzQ*Z)Ss&0@<#53ffi7 z(MSS_a7gA5Tss+yvGZ_uyDiQSa&`C==m@)>Zw_A3ls! z6CIUhnd!AsD`#Mq^r*BVs`|B>t>Du@OBSqGPVX`^&Ox$RpG|qpL&23&`B^%Fi+5cd zo7}gpyunoF-!>p)vaX9`- zULU6nD>{AnRI^ttBd6G1=Rpv8{l^4~pLB!Lxge;_SRmOxw2`4iIEJSjcK~d$^Y}YL z(7SbxaPgzhh}j{rbSf7xOxmWT(oo%w5o54I?PpscNRPf3x}EZvBr4-if%L`4qgL zH8^v^4K48SO1T~m{qS;}pCbW#RH?xBx-A)nqzW*bY@pqX_~_orqpZwWXe`IbaVqH0 zk}g1t~ op{4hBkVn?ipQ2m{u5U5J8XPt8R4GVC-(p5j2o!AOu*QD=4;sRlu>b%7 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 000000000..252e50d06 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,715 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2011-2012,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-22 21:17+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "D'éirigh le scriosadh %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ní féidir scriosadh %(name)s " + +msgid "Are you sure?" +msgstr "An bhfuil tú cinnte?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Scrios %(verbose_name_plural) roghnaithe" + +msgid "Administration" +msgstr "Riarachán" + +msgid "All" +msgstr "Gach" + +msgid "Yes" +msgstr "Tá" + +msgid "No" +msgstr "Níl" + +msgid "Unknown" +msgstr "Gan aithne" + +msgid "Any date" +msgstr "Aon dáta" + +msgid "Today" +msgstr "Inniu" + +msgid "Past 7 days" +msgstr "7 lá a chuaigh thart" + +msgid "This month" +msgstr "Táim cinnte" + +msgid "This year" +msgstr "An blian seo" + +msgid "No date" +msgstr "Gan dáta" + +msgid "Has date" +msgstr "Le dáta" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Cuir isteach an %(username)s agus focal faire ceart le haghaidh cuntas " +"foirne. Tabhair faoi deara go bhféadfadh an dá réimsí a cás-íogair." + +msgid "Action:" +msgstr "Aicsean:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Cuir eile %(verbose_name)s" + +msgid "Remove" +msgstr "Tóg amach" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Athraigh" + +msgid "Deletion" +msgstr "Scriosadh" + +msgid "action time" +msgstr "am aicsean" + +msgid "user" +msgstr "úsáideoir" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id oibiacht" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr oibiacht" + +msgid "action flag" +msgstr "brat an aicsean" + +msgid "change message" +msgstr "teachtaireacht athrú" + +msgid "log entry" +msgstr "loga iontráil" + +msgid "log entries" +msgstr "loga iontrálacha" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" curtha isteach." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s aithrithe" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s.\" scrioste" + +msgid "LogEntry Object" +msgstr "Oibiacht LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} curtha leis \"{object}\"." + +msgid "Added." +msgstr "Curtha leis." + +msgid "and" +msgstr "agus" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{fields} athrithe don {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} athrithe." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} scrioste: \"{object}\"." + +msgid "No fields changed." +msgstr "Dada réimse aithraithe" + +msgid "None" +msgstr "Dada" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Coinnigh síos \"Control\", nó \"Command\" ar Mac chun níos mó ná ceann " +"amháin a roghnú." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "Bhí {name} \"{obj}\" curtha leis go rathúil" + +msgid "You may edit it again below." +msgstr "Thig leat é a athrú arís faoi seo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"D'athraigh {name} \"{obj}\" go rathúil.\n" +"Thig leat é a athrú arís faoi seo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"D'athraigh {name} \"{obj}\" go rathúil.\n" +"Thig leat {name} eile a chuir leis." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "D'athraigh {name} \"{obj}\" go rathúil." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Ní mór Míreanna a roghnú chun caingne a dhéanamh orthu. Níl aon mhíreanna a " +"athrú." + +msgid "No action selected." +msgstr "Uimh gníomh roghnaithe." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Bhí %(name)s \"%(obj)s\" scrioste go rathúil." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "Níl%(name)s ann le aitheantais \"%(key)s\". B'fhéidir gur scriosadh é?" + +#, python-format +msgid "Add %s" +msgstr "Cuir %s le" + +#, python-format +msgid "Change %s" +msgstr "Aithrigh %s" + +#, python-format +msgid "View %s" +msgstr "Amharc ar %s" + +msgid "Database error" +msgstr "Botún bunachar sonraí" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s athraithe go rathúil" +msgstr[1] "%(count)s %(name)s athraithe go rathúil" +msgstr[2] "%(count)s %(name)s athraithe go rathúil" +msgstr[3] "%(count)s %(name)s athraithe go rathúil" +msgstr[4] "%(count)s %(name)s athraithe go rathúil" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s roghnaithe" +msgstr[1] "Gach %(total_count)s roghnaithe" +msgstr[2] "Gach %(total_count)s roghnaithe" +msgstr[3] "Gach %(total_count)s roghnaithe" +msgstr[4] "Gach %(total_count)s roghnaithe" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 as %(cnt)s roghnaithe." + +#, python-format +msgid "Change history: %s" +msgstr "Athraigh stáir %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Teastaíodh scriosadh %(class_name)s %(instance)s scriosadh na rudaí a " +"bhaineann leis: %(related_objects)s" + +msgid "Django site admin" +msgstr "Riarthóir suíomh Django" + +msgid "Django administration" +msgstr "Riarachán Django" + +msgid "Site administration" +msgstr "Riaracháin an suíomh" + +msgid "Log in" +msgstr "Logáil isteach" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s riaracháin" + +msgid "Page not found" +msgstr "Ní bhfuarthas an leathanach" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Tá brón orainn, ach ní bhfuarthas an leathanach iarraite." + +msgid "Home" +msgstr "Baile" + +msgid "Server error" +msgstr "Botún freastalaí" + +msgid "Server error (500)" +msgstr "Botún freastalaí (500)" + +msgid "Server Error (500)" +msgstr "Botún Freastalaí (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Tharla earráid. Tuairiscíodh don riarthóirí suíomh tríd an ríomhphost agus " +"ba chóir a shocrú go luath. Go raibh maith agat as do foighne." + +msgid "Run the selected action" +msgstr "Rith an gníomh roghnaithe" + +msgid "Go" +msgstr "Té" + +msgid "Click here to select the objects across all pages" +msgstr "" +"Cliceáil anseo chun na hobiacht go léir a roghnú ar fud gach leathanach" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Roghnaigh gach %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Scroiseadh modhnóir" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Ar dtús, iontráil ainm úsaideoir agus focal faire. Ansin, beidh tú in ann " +"cuir in eagar níos mó roghaí úsaideoira." + +msgid "Enter a username and password." +msgstr "Cuir isteach ainm úsáideora agus focal faire." + +msgid "Change password" +msgstr "Athraigh focal faire" + +msgid "Please correct the error below." +msgstr "Ceartaigh an botún thíos le do thoil." + +msgid "Please correct the errors below." +msgstr "Le do thoil cheartú earráidí thíos." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Iontráil focal faire nua le hadhaigh an úsaideor %(username)s." + +msgid "Welcome," +msgstr "Fáilte" + +msgid "View site" +msgstr "Breatnaigh ar an suíomh" + +msgid "Documentation" +msgstr "Doiciméadúchán" + +msgid "Log out" +msgstr "Logáil amach" + +#, python-format +msgid "Add %(name)s" +msgstr "Cuir %(name)s le" + +msgid "History" +msgstr "Stair" + +msgid "View on site" +msgstr "Breath ar suíomh" + +msgid "Filter" +msgstr "Scagaire" + +msgid "Remove from sorting" +msgstr "Bain as sórtáil" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sórtáil tosaíocht: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toggle sórtáil" + +msgid "Delete" +msgstr "Cealaigh" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Má scriossan tú %(object_name)s '%(escaped_object)s' scriosfaidh oibiachtí " +"gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Bheadh Scriosadh an %(object_name)s '%(escaped_object)s' a cheangal ar an " +"méid seo a leanas a scriosadh nithe cosanta a bhaineann le:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"An bhfuil tú cinnte na %(object_name)s \"%(escaped_object)s\" a scroiseadh?" +"Beidh gach oibiacht a leanúint scroiste freisin:" + +msgid "Objects" +msgstr "Oibiachtaí" + +msgid "Yes, I'm sure" +msgstr "Táim cinnte" + +msgid "No, take me back" +msgstr "Ní hea, tóg ar ais mé" + +msgid "Delete multiple objects" +msgstr "Scrios na réadanna" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Scriosadh an roghnaithe %(objects_name)s a bheadh mar thoradh ar na nithe " +"gaolmhara a scriosadh, ach níl cead do chuntas a scriosadh na cineálacha seo " +"a leanas na cuspóirí:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Teastaíonn scriosadh na %(objects_name)s roghnaithe scriosadh na hoibiacht " +"gaolta cosainte a leanúint:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"An bhfuil tú cinnte gur mian leat a scriosadh %(objects_name)s roghnaithe? " +"Beidh gach ceann de na nithe seo a leanas agus a n-ítimí gaolta scroiste:" + +msgid "View" +msgstr "Amharc ar" + +msgid "Delete?" +msgstr "Cealaigh?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Trí %(filter_title)s " + +msgid "Summary" +msgstr "Achoimre" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Samhlacha ins an %(name)s iarratais" + +msgid "Add" +msgstr "Cuir le" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Dada ar fáil" + +msgid "Unknown content" +msgstr "Inneachair anaithnid" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Tá rud éigin mícheart le suitéail do bunachar sonraí. Déan cinnte go bhfuil " +"boird an bunachar sonraI cruthaithe cheana, agus déan cinnte go bhfuil do " +"úsaideoir in ann an bunacchar sonraí a léamh." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Dearmad déanta ar do focal faire nó ainm úsaideora" + +msgid "Date/time" +msgstr "Dáta/am" + +msgid "User" +msgstr "Úsaideoir" + +msgid "Action" +msgstr "Aicsean" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Níl stáir aitraithe ag an oibiacht seo agús is dócha ná cuir le tríd an an " +"suíomh riarachán." + +msgid "Show all" +msgstr "Taispéan gach rud" + +msgid "Save" +msgstr "Sábháil" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Cuardach" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s toradh" +msgstr[1] "%(counter)s torthaí" +msgstr[2] "%(counter)s torthaí" +msgstr[3] "%(counter)s torthaí" +msgstr[4] "%(counter)s torthaí" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s iomlán" + +msgid "Save as new" +msgstr "Sabháil mar nua" + +msgid "Save and add another" +msgstr "Sabháil agus cuir le ceann eile" + +msgid "Save and continue editing" +msgstr "Sábhail agus lean ag cuir in eagar" + +msgid "Save and view" +msgstr "Sabháil agus amharc ar" + +msgid "Close" +msgstr "Druid" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Athraigh roghnaithe %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Cuir le %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Scrios roghnaithe %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Go raibh maith agat le hadhaigh do cuairt ar an suíomh idirlínn inniú." + +msgid "Log in again" +msgstr "Logáil isteacj arís" + +msgid "Password change" +msgstr "Athrú focal faire" + +msgid "Your password was changed." +msgstr "Bhí do focal faire aithraithe." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Le do thoil, iontráil do sean-focal faire, ar son slándáil, agus ansin " +"iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil " +"sé scríobhte isteach i gceart." + +msgid "Change my password" +msgstr "Athraigh mo focal faire" + +msgid "Password reset" +msgstr "Athsocraigh focal faire" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Tá do focal faire réidh. Is féidir leat logáil isteach anois." + +msgid "Password reset confirmation" +msgstr "Deimhniú athshocraigh focal faire" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Le do thoil, iontráil do focal faire dhá uaire cé go mbeimid in ann a " +"seiceal go bhfuil sé scríobhte isteach i gceart." + +msgid "New password:" +msgstr "Focal faire nua:" + +msgid "Confirm password:" +msgstr "Deimhnigh focal faire:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Bhí nasc athshocraigh an focal faire mícheart, b'fheidir mar go raibh sé " +"úsaidte cheana. Le do thoil, iarr ar athsocraigh focal faire nua." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Le do thoil té go dtí an leathanach a leanúint agus roghmaigh focal faire " +"nua:" + +msgid "Your username, in case you've forgotten:" +msgstr "Do ainm úsaideoir, má tá dearmad déanta agat." + +msgid "Thanks for using our site!" +msgstr "Go raibh maith agat le hadhaigh do cuairt!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Foireann an %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Seoladh ríomhphoist:" + +msgid "Reset my password" +msgstr "Athsocraigh mo focal faire" + +msgid "All dates" +msgstr "Gach dáta" + +#, python-format +msgid "Select %s" +msgstr "Roghnaigh %s" + +#, python-format +msgid "Select %s to change" +msgstr "Roghnaigh %s a athrú" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Dáta:" + +msgid "Time:" +msgstr "Am:" + +msgid "Lookup" +msgstr "Cuardach" + +msgid "Currently:" +msgstr "Faoi láthair:" + +msgid "Change:" +msgstr "Athraigh:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee000e278fc13e2dc8161c599d4e23b713519804 GIT binary patch literal 5247 zcmeHK&5s;M6)zG4VFL*XgwGI)1>0-lnfJUfc2vgh=5~-CZ+Xad*{F zUA?m-6a^%N_&8Yvg+xMVg$V3nQGyi`S)d@bf&d|LfdiKasUe&&I>%Q+Wl%uG(qyGF&jNJ!(=z9F1Z0=+1F5nRO7T_}hp9j7f z?H5A(Mc~`f{#|JQDd3-h??C@w1HKyYdMuto|1H3`0dEI>7NJnx6qlZXbyM zY!g4E=c7Q<^P51D^BC|k;1j@$z$O+!B>N?hUCec(w9 zz6Wo#?7e+-0Z_ER9udjS~1t`~t{2F^e^+GqQn_4qSD((5@OOlQ9d z?LPo-Li;a3+UHf^Q^3Cip9MaJMI`^BTWdWd;QeS{08;;R!0!Wp0VF=Z0HkA;i+NPa z3;R*2%%Of1^(g8zDwPk^z-EEOJ;fizFcpezI@eS_hDxyu*FxY-A+tjTH(kDeCe{w0 z=#a6K$u-B0ana11>=^G8EcLC**izXm3&)l=gvvyeNxr{e%R0#%cF5CbF(4+IHuOCcc-n$Smu$m zY*j|K6n4l~Rp!wCj7lUsCA9B5Rc1qWs??IL3md2S9kO+mXw^#{J7bK-kCQF_peebq zWGqijX}L(HNQlou+6`$rnbX{RE>wT*lX)alrIXhrcJHYhwbf_LfSrwv6HHT zcyvr|NN?5|_9aY4q&nh{tj2fOM;TAdptfjFKG}n^KrE6timX&1jz=dFq;U~DW%Oas z-!M$j2OZBvf`HfL2cdfsCt5>;L~W>~6dCrGSyFgz4kB3l)L!KGq$?qCODpe)=|OF-cP*I z`dV|GcP$|comMt%S!-5PGNDwd>n-=DLMF=j^fcmRt?Sh#aT5f4eg9d~KtY8FN5K@X z$&ALAbZ{46wF)lVw>sIkZZ!3+PxiHiE6KV0+E?_Je&!W@owT$C&FoCh?3D8A&Ie?o z>+T2GIcpw9`fjWxjn7G2AXZvDc^DyKrq0X0v97UR^iP$F%s=xwDP)azoM7 z2Ib`zUznS}r!jY|v9Q1w=37UO-8qLcby^gz(Xm1onQ+Fo`04V3zr<&fX&Xh3!4 z=BG1sN4~cin`U|8lUS*HrRd2#t*@=0+%;^zIXAUzw38Z|;mozTlbdd~p9!UpQ?S`Wy2a0SRvUNk&Lc&;(l$=& z*d$0iEq-^T+*rvL?}@2%S!qSqST!~;T3q*ivsnDZabABe&gjL(dHyLr$1%LPxPZ@j z`n>lpd@cB|c^W^0&!dNqPmM2AoYK)n%dP39S}2^Z|LgGRE?1f@smRJ|OS99}Wi1N9 zaH|Q+yVVx%_hl(SY%gW!YrQAG_)4|q#O?@R$|o9PvY||#(H34xb*T&a`|(h~HGrK} zhBH`5y5eyhv3t+(tlCz%S8KYe%k@2f&AGe8Vp$PeqY7NgDP6-EnSh&LM5z_59gCh& zRW;E$*tzWJyV50)}Nq^FQrE~)$ z!d^GgZwT|j*~Vc&{IeyEGsRXU&JGS1U#%`tzhx&d2(kqp%x!<}kWJ&1$5Ln=&dhjj zN2sFjv&~w;t8F}U44sBd;c^vpVn&&#$uXgeERf&?;eFtClL4J0t{U#+WxXi^8vKu@BE=a3q5l+k#^K6Q#xgv6IT2(j zqhe3u1AlapkG<&-t&!rZ?P@14@Z1B}Np%TVINbnI+AVQ25KnM4&a)K?8p1y@?oYh6 zI|v^n?unjuwG|, 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2011-2012,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-06-22 21:36+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s ar fáil" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Is é seo an liosta %s ar fáil. Is féidir leat a roghnú roinnt ag roghnú acu " +"sa bhosca thíos agus ansin cliceáil ar an saighead \"Roghnaigh\" idir an dá " +"boscaí." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Scríobh isteach sa bhosca seo a scagadh síos ar an liosta de %s ar fáil." + +msgid "Filter" +msgstr "Scagaire" + +msgid "Choose all" +msgstr "Roghnaigh iomlán" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Cliceáil anseo chun %s go léir a roghnú." + +msgid "Choose" +msgstr "Roghnaigh" + +msgid "Remove" +msgstr "Bain amach" + +#, javascript-format +msgid "Chosen %s" +msgstr "Roghnófar %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Is é seo an liosta de %s roghnaithe. Is féidir leat iad a bhaint amach má " +"roghnaionn tú cuid acu sa bhosca thíos agus ansin cliceáil ar an saighead " +"\"Bain\" idir an dá boscaí." + +msgid "Remove all" +msgstr "Scrois gach ceann" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Cliceáil anseo chun %s go léir roghnaithe a scroiseadh." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s roghnaithe" +msgstr[1] "%(sel)s de %(cnt)s roghnaithe" +msgstr[2] "%(sel)s de %(cnt)s roghnaithe" +msgstr[3] "%(sel)s de %(cnt)s roghnaithe" +msgstr[4] "%(sel)s de %(cnt)s roghnaithe" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tá aithrithe nach bhfuil sabhailte ar chuid do na réimse. Má ritheann tú " +"gníomh, caillfidh tú do chuid aithrithe." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Tá gníomh roghnaithe agat, ach níl do aithrithe sabhailte ar cuid de na " +"réímse. Clic OK chun iad a sábháil. Caithfidh tú an gníomh a rith arís." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Tá gníomh roghnaithe agat, ach níl do aithrithe sabhailte ar cuid de na " +"réímse. Is dócha go bhfuil tú ag iarraidh an cnaipe Té ná an cnaipe Sábháil." + +msgid "Now" +msgstr "Anois" + +msgid "Midnight" +msgstr "Meán oíche" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Nóin" + +msgid "6 p.m." +msgstr "6in" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Tabhair faoi deara: Tá tú %s uair a chloig roimh am an friothálaí." +msgstr[1] "Tabhair faoi deara: Tá tú %s uair a chloig roimh am an friothálaí." +msgstr[2] "Tabhair faoi deara: Tá tú %s uair a chloig roimh am an friothálaí." +msgstr[3] "Tabhair faoi deara: Tá tú %s uair a chloig roimh am an friothálaí." +msgstr[4] "Tabhair faoi deara: Tá tú %s uair a chloig roimh am an friothálaí." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Tabhair faoi deara: Tá tú %s uair a chloig taobh thiar am an friothálaí." +msgstr[1] "" +"Tabhair faoi deara: Tá tú %s uair a chloig taobh thiar am an friothálaí." +msgstr[2] "" +"Tabhair faoi deara: Tá tú %s uair a chloig taobh thiar am an friothálaí." +msgstr[3] "" +"Tabhair faoi deara: Tá tú %s uair a chloig taobh thiar am an friothálaí." +msgstr[4] "" +"Tabhair faoi deara: Tá tú %s uair a chloig taobh thiar am an friothálaí." + +msgid "Choose a Time" +msgstr "Roghnaigh Am" + +msgid "Choose a time" +msgstr "Roghnaigh am" + +msgid "Cancel" +msgstr "Cealaigh" + +msgid "Today" +msgstr "Inniu" + +msgid "Choose a Date" +msgstr "Roghnaigh Dáta" + +msgid "Yesterday" +msgstr "Inné" + +msgid "Tomorrow" +msgstr "Amárach" + +msgid "January" +msgstr "Eanáir" + +msgid "February" +msgstr "Feabhra" + +msgid "March" +msgstr "Márta" + +msgid "April" +msgstr "Aibreán" + +msgid "May" +msgstr "Bealtaine" + +msgid "June" +msgstr "Meitheamh" + +msgid "July" +msgstr "Iúil" + +msgid "August" +msgstr "Lúnasa" + +msgid "September" +msgstr "Meán Fómhair" + +msgid "October" +msgstr "Deireadh Fómhair" + +msgid "November" +msgstr "Samhain" + +msgid "December" +msgstr "Nollaig" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "C" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "D" + +msgctxt "one letter Friday" +msgid "F" +msgstr "A" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Taispeán" + +msgid "Hide" +msgstr "Folaigh" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3807caa45aeca54c57e76dffc073d46a81248819 GIT binary patch literal 18871 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 2 && n < 20) ? 2 : 3;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Sguab às na %(verbose_name_plural)s a chaidh a thaghadh" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Chaidh %(count)d %(items)s a sguabadh às." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Chan urrainn dhuinn %(name)s a sguabadh às" + +msgid "Are you sure?" +msgstr "A bheil thu cinnteach?" + +msgid "Administration" +msgstr "Rianachd" + +msgid "All" +msgstr "Na h-uile" + +msgid "Yes" +msgstr "Tha" + +msgid "No" +msgstr "Chan eil" + +msgid "Unknown" +msgstr "Chan eil fhios" + +msgid "Any date" +msgstr "Ceann-là sam bith" + +msgid "Today" +msgstr "An-diugh" + +msgid "Past 7 days" +msgstr "Na 7 làithean seo chaidh" + +msgid "This month" +msgstr "Am mìos seo" + +msgid "This year" +msgstr "Am bliadhna" + +msgid "No date" +msgstr "Gun cheann-là" + +msgid "Has date" +msgstr "Tha ceann-là aige" + +msgid "Empty" +msgstr "Falamh" + +msgid "Not empty" +msgstr "Neo-fhalamh" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Cuir a-steach %(username)s agus facal-faire ceart airson cunntas neach-" +"obrach. Thoir an aire gum bi aire do litrichean mòra ’s beaga air an dà " +"raon, ma dh’fhaoidte." + +msgid "Action:" +msgstr "Gnìomh:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Cuir %(verbose_name)s eile ris" + +msgid "Remove" +msgstr "Thoir air falbh" + +msgid "Addition" +msgstr "Cur ris" + +msgid "Change" +msgstr "Atharraich" + +msgid "Deletion" +msgstr "Sguabadh às" + +msgid "action time" +msgstr "àm a’ ghnìomha" + +msgid "user" +msgstr "cleachdaiche" + +msgid "content type" +msgstr "seòrsa susbainte" + +msgid "object id" +msgstr "id an oibceict" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "riochdachadh oibseict" + +msgid "action flag" +msgstr "bratach a’ ghnìomha" + +msgid "change message" +msgstr "teachdaireachd atharrachaidh" + +msgid "log entry" +msgstr "innteart loga" + +msgid "log entries" +msgstr "innteartan loga" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Chaidh “%(object)s” a chur ris." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Chaidh “%(object)s” atharrachadh – %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Chaidh “%(object)s” a sguabadh às." + +msgid "LogEntry Object" +msgstr "Oibseact innteart an loga" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Chaidh {name} “{object}” a chur ris." + +msgid "Added." +msgstr "Chaidh a chur ris." + +msgid "and" +msgstr "agus" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Chaidh {fields} atharrachadh airson {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Chaidh {fields} atharrachadh." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Chaidh {name} “{object}” a sguabadh às." + +msgid "No fields changed." +msgstr "Cha deach raon atharrachadh." + +msgid "None" +msgstr "Chan eil gin" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "Cum sìos “Control” no “Command” air Mac gus iomadh nì a thaghadh." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Chaidh {name} “{obj}” a chur ris." + +msgid "You may edit it again below." +msgstr "’S urrainn dhut a dheasachadh a-rithist gu h-ìosal." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Chaidh {name} “%{obj}” a chur ris. ’S urrainn dhut {name} eile a chur ris gu " +"h-ìosal." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Chaidh {name} “{obj}” atharrachadh. ’S urrainn dhut a dheasachadh a-rithist " +"gu h-ìosal." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Chaidh {name} “{obj}” a chur ris. ’S urrainn dhut a dheasachadh a-rithist gu " +"h-ìosal." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Chaidh {name} “{obj}” atharrachadh. ’S urrainn dhut {name} eile a chur ris " +"gu h-ìosal." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Chaidh {name} “{obj}” atharrachadh." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Feumaidh tu nithean a thaghadh mus dèan thu gnìomh orra. Cha deach nì " +"atharrachadh." + +msgid "No action selected." +msgstr "Cha deach gnìomh a thaghadh." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "Chaidh %(name)s “%(obj)s” a sguabadh às." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"Chan eil %(name)s leis an ID \"%(key)s\" ann. 'S dòcha gun deach a sguabadh " +"às?" + +#, python-format +msgid "Add %s" +msgstr "Cuir %s ris" + +#, python-format +msgid "Change %s" +msgstr "Atharraich %s" + +#, python-format +msgid "View %s" +msgstr "Seall %s" + +msgid "Database error" +msgstr "Mearachd an stòir-dhàta" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Chaidh %(count)s %(name)s atharrachadh." +msgstr[1] "Chaidh %(count)s %(name)s atharrachadh." +msgstr[2] "Chaidh %(count)s %(name)s atharrachadh." +msgstr[3] "Chaidh %(count)s %(name)s atharrachadh." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Chaidh %(total_count)s a thaghadh" +msgstr[1] "Chaidh a h-uile %(total_count)s a thaghadh" +msgstr[2] "Chaidh a h-uile %(total_count)s a thaghadh" +msgstr[3] "Chaidh a h-uile %(total_count)s a thaghadh" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Chaidh 0 à %(cnt)s a thaghadh" + +#, python-format +msgid "Change history: %s" +msgstr "Eachdraidh nan atharraichean: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Gus %(class_name)s %(instance)s a sguabadh às, bhiodh againn ris na h-" +"oibseactan dàimheach dìonta seo a sguabadh às cuideachd: %(related_objects)s" + +msgid "Django site admin" +msgstr "Rianachd làraich Django" + +msgid "Django administration" +msgstr "Rianachd Django" + +msgid "Site administration" +msgstr "Rianachd na làraich" + +msgid "Log in" +msgstr "Clàraich a-steach" + +#, python-format +msgid "%(app)s administration" +msgstr "Rianachd %(app)s" + +msgid "Page not found" +msgstr "Cha deach an duilleag a lorg" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Tha sinn duilich ach cha do lorg sinn an duilleag a dh’iarr thu." + +msgid "Home" +msgstr "Dhachaigh" + +msgid "Server error" +msgstr "Mearachd an fhrithealaiche" + +msgid "Server error (500)" +msgstr "Mearachd an fhrithealaiche (500)" + +msgid "Server Error (500)" +msgstr "Mearachd an fhrithealaiche (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Chaidh rudeigin cearr. Fhuair rianairean na làraich aithris air a’ phost-d " +"agus tha sinn an dùil gun dèid a chàradh a dh’aithghearr. Mòran taing airson " +"d’ fhoighidinn." + +msgid "Run the selected action" +msgstr "Ruith an gnìomh a thagh thu" + +msgid "Go" +msgstr "Siuthad" + +msgid "Click here to select the objects across all pages" +msgstr "" +"Briog an-seo gus na h-oibseactan a thaghadh air feadh nan duilleagan uile" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Tagh a h-uile %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Falamhaich an taghadh" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modailean ann an aplacaid %(name)s" + +msgid "Add" +msgstr "Cuir ris" + +msgid "View" +msgstr "Seall" + +msgid "You don’t have permission to view or edit anything." +msgstr "Chan eil cead agad gus dad a shealltainn no a dheasachadh." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Cuir ainm-cleachdaiche is facal-faire a-steach an toiseach. ’S urrainn dhut " +"barrachd roghainnean a’ chleachdaiche a dheasachadh an uairsin." + +msgid "Enter a username and password." +msgstr "Cuir ainm-cleachdaiche ’s facal-faire a-steach." + +msgid "Change password" +msgstr "Atharraich am facal-faire" + +msgid "Please correct the error below." +msgstr "Feuch an cuir thu a’ mhearachd gu h-ìosal gu ceart." + +msgid "Please correct the errors below." +msgstr "Feuch an cuir thu na mearachdan gu h-ìosal gu ceart." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Cuir a-steach facal-faire ùr airson a’ chleachdaiche %(username)s." + +msgid "Welcome," +msgstr "Fàilte," + +msgid "View site" +msgstr "Seall an làrach" + +msgid "Documentation" +msgstr "Docamaideadh" + +msgid "Log out" +msgstr "Clàraich a-mach" + +#, python-format +msgid "Add %(name)s" +msgstr "Cuir %(name)s ris" + +msgid "History" +msgstr "An eachdraidh" + +msgid "View on site" +msgstr "Seall e air an làrach" + +msgid "Filter" +msgstr "Criathraich" + +msgid "Clear all filters" +msgstr "Falamhaich gach crithrag" + +msgid "Remove from sorting" +msgstr "Thoir air falbh on t-seòrsachadh" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prìomhachas an t-seòrsachaidh: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toglaich an seòrsachadh" + +msgid "Delete" +msgstr "Sguab às" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Nan sguabadh tu às %(object_name)s “%(escaped_object)s”, rachadh oibseactan " +"dàimheach a sguabadh às cuideachd ach chan eil cead aig a’ chunntas agad gus " +"na seòrsaichean de dh’oibseact seo a sguabadh às:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Nan sguabadh tu às %(object_name)s “%(escaped_object)s”, bhiodh againn ris " +"na h-oibseactan dàimheach dìonta seo a sguabadh às cuideachd:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"A bheil thu cinnteach gu bheil thu airson %(object_name)s " +"“%(escaped_object)s” a sguabadh às? Thèid a h-uile nì dàimheach a sguabadh " +"às cuideachd:" + +msgid "Objects" +msgstr "Oibseactan" + +msgid "Yes, I’m sure" +msgstr "Tha mi cinnteach" + +msgid "No, take me back" +msgstr "Chan eil, air ais leam" + +msgid "Delete multiple objects" +msgstr "Sguab às iomadh oibseact" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Nan sguabadh tu às a’ %(objects_name)s a thagh thu, rachadh oibseactan " +"dàimheach a sguabadh às cuideachd ach chan eil cead aig a’ chunntas agad gus " +"na seòrsaichean de dh’oibseact seo a sguabadh às:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Nan sguabadh tu às a’ %(objects_name)s a thagh thu, bhiodh againn ris na h-" +"oibseactan dàimheach dìonta seo a sguabadh às cuideachd:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"A bheil thu cinnteach gu bheil thu airson a’ %(objects_name)s a thagh thu a " +"sguabadh às? Thèid a h-uile oibseact seo ’s na nithean dàimheach aca a " +"sguabadh às:" + +msgid "Delete?" +msgstr "A bheil thu airson a sguabadh às?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " le %(filter_title)s " + +msgid "Summary" +msgstr "Gearr-chunntas" + +msgid "Recent actions" +msgstr "Gnìomhan o chionn goirid" + +msgid "My actions" +msgstr "Na gnìomhan agam" + +msgid "None available" +msgstr "Chan eil gin ann" + +msgid "Unknown content" +msgstr "Susbaint nach aithne dhuinn" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Chaidh rudeigin cearr le stàladh an stòir-dhàta agad. Dèan cinnteach gun " +"deach na clàran stòir-dhàta iomchaidh a chruthachadh agus gur urrainn dhan " +"chleachdaiche iomchaidh an stòr-dàta a leughadh." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Chaidh do dhearbhadh mar %(username)s ach chan eil ùghdarras agad gus an " +"duilleag seo inntrigeadh. Am bu toigh leat clàradh a-steach le cunntas eile?" + +msgid "Forgotten your password or username?" +msgstr "" +"An do dhìochuimhnich thu am facal-faire no an t-ainm-cleachdaiche agad?" + +msgid "Toggle navigation" +msgstr "Toglaich an t-seòladaireachd" + +msgid "Start typing to filter…" +msgstr "Tòisich air sgrìobhadh airson criathradh…" + +msgid "Filter navigation items" +msgstr "Criathraich nithean na seòladaireachd" + +msgid "Date/time" +msgstr "Ceann-là ’s àm" + +msgid "User" +msgstr "Cleachdaiche" + +msgid "Action" +msgstr "Gnìomh" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Chan eil eachdraidh nan atharraichean aig an oibseact seo. Dh’fhaoidte nach " +"deach a chur ris leis an làrach rianachd seo." + +msgid "Show all" +msgstr "Seall na h-uile" + +msgid "Save" +msgstr "Sàbhail" + +msgid "Popup closing…" +msgstr "Tha a’ phriob-uinneag ’ga dùnadh…" + +msgid "Search" +msgstr "Lorg" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s toradh" +msgstr[1] "%(counter)s thoradh" +msgstr[2] "%(counter)s toraidhean" +msgstr[3] "%(counter)s toradh" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s gu h-iomlan" + +msgid "Save as new" +msgstr "Sàbhail mar fhear ùr" + +msgid "Save and add another" +msgstr "Sàbhail is cuir fear eile ris" + +msgid "Save and continue editing" +msgstr "Sàbhail is deasaich a-rithist" + +msgid "Save and view" +msgstr "Sàbhail is seall" + +msgid "Close" +msgstr "Dùin" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Atharraich a’ %(model)s a thagh thu" + +#, python-format +msgid "Add another %(model)s" +msgstr "Cuir %(model)s eile ris" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Sguab às a’ %(model)s a thagh thu" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" +"Mòran taing gun do chuir thu seachad deagh-àm air an làrach-lìn an-diugh." + +msgid "Log in again" +msgstr "Clàraich a-steach a-rithist" + +msgid "Password change" +msgstr "Atharrachadh an facail-fhaire" + +msgid "Your password was changed." +msgstr "Chaidh am facal-faire agad atharrachadh." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Cuir a-steach an seann fhacal-faire agad ri linn tèarainteachd agus cuir a-" +"steach am facal-faire ùr agad dà thuras an uairsin ach an dearbhaich sinn " +"nach do rinn thu mearachd sgrìobhaidh." + +msgid "Change my password" +msgstr "Atharraich am facal-faire agam" + +msgid "Password reset" +msgstr "Ath-shuidheachadh an fhacail-fhaire" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Chaidh am facal-faire agad a shuidheachadh. Faodaidh tu clàradh a-steach a-" +"nis." + +msgid "Password reset confirmation" +msgstr "Dearbhadh air ath-shuidheachadh an fhacail-fhaire" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Cuir a-steach am facal-faire ùr agad dà thuras ach an dearbhaich sinn nach " +"do rinn thu mearachd sgrìobhaidh." + +msgid "New password:" +msgstr "Am facal-faire ùr:" + +msgid "Confirm password:" +msgstr "Dearbhaich am facal-faire:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Bha an ceangal gus am facal-faire ath-suidheachadh mì-dhligheach; ’s dòcha " +"gun deach a chleachdadh mar-thà. Iarr ath-shuidheachadh an fhacail-fhaire às " +"ùr." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Chuir sinn stiùireadh thugad air mar a dh’ath-shuidhicheas tu am facal-faire " +"agad air a’ phost-d dhan chunntas puist-d a chuir thu a-steach. Bu chòir " +"dhut fhaighinn a dh’aithghearr." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Mura faigh thu post-d, dèan cinnteach gun do chuir thu a-steach an seòladh " +"puist-d leis an do chlàraich thu agus thoir sùil air pasgan an spama agad." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Fhuair thu am post-d seo air sgàth ’s gun do dh’iarr thu ath-shuidheachadh " +"an fhacail-fhaire agad airson a’ chunntais cleachdaiche agad air " +"%(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Tadhail air an duilleag seo is tagh facal-faire ùr:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" +"Seo an t-ainm-cleachdaiche agad air eagal ’s gun do dhìochuimhnich thu e:" + +msgid "Thanks for using our site!" +msgstr "Mòran taing airson an làrach againn a chleachdadh!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Sgioba %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Na dhìochuimhnich thu am facal-faire agad? Cuir a-steach an seòladh puist-d " +"agad gu h-ìosal agus cuiridh sinn stiùireadh thugad gus fear ùr a " +"shuidheachadh air a’ phost-d." + +msgid "Email address:" +msgstr "Seòladh puist-d:" + +msgid "Reset my password" +msgstr "Ath-shuidhich am facal-faire agam" + +msgid "All dates" +msgstr "A h-uile ceann-là" + +#, python-format +msgid "Select %s" +msgstr "Tagh %s" + +#, python-format +msgid "Select %s to change" +msgstr "Tagh %s gus atharrachadh" + +#, python-format +msgid "Select %s to view" +msgstr "Tagh %s gus a shealltainn" + +msgid "Date:" +msgstr "Ceann-là:" + +msgid "Time:" +msgstr "Àm:" + +msgid "Lookup" +msgstr "Lorg" + +msgid "Currently:" +msgstr "An-dràsta:" + +msgid "Change:" +msgstr "Atharrachadh:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..661e42e282d66ef6b6d03f0c3e44c5e02a390b38 GIT binary patch literal 5904 zcmd6qU5sQ!6~{|x`4~VE6hQ$?VAomM+w%bo(95z6v&;fA%Z6!05@S-`x2Erf+qcI1 zF|(5pvOM8~ng|#{k&H1W8zmZfP(d(iC&CMws00%uiTI$r=z|zF(dh5oTfIBeGa^DX z-gMpnty8B?o%+|QQ`Ik>)%dL9xsGzaloOP?Q?S8{=g3=?x)Qt(JPCZ#RDfZ z9z31;&wc&Z9)Aa(f&331|L*ZLjEx~b4?GpT1biRZ1b2c5!BfD}L#VHSCxTxC#m+Z;`**;PP=5w&gXdsG+V2KMzW~MVVP2@HBcS+sKPY}a z0Lu7}f)9aT0zU)JU_{1!4itMo=CucW5tM#s^Lh-t0DKsH8e9f%$N0O!AA#qBFM;m? z|LpOs)8L4D0GayrG5(vPk#jYslV_N zUQT{{jc0-)KM$1g#=%K&AGjA>1|@F34$3%BgJSnt5X#lheEToG{1spS6DZ@HcxJ7C zI*3S}3yQsQ@IvM_T&J^Wt>lf((hqV_&f@V-VZ@p=bwN_!56@%z$okJ^sMsv%dX#k3aSD7d`&U z<8OTXE581FUw;*pb^EKwzj^!zDDi#*K_u-bfl@!!*UtctbCGko^`MR3Z;B1IcHG}k zD>l}Ws&8)7%2*P2@79IW-O8LcNrG6LLOVujs<~l%X8Uf%R_&%rdBPOtQ+xOQwwpJ#=WRe2c1iK6}F}Cbfq?# zOjbv(%(RKD35CzxW-B(+GM(o3y14%Om37BPaT>lZv)ik#)U!V5R@JTD!U+SnRYZ9Z zzSN>!E^58S2*q|3=bB#;S)If=OfPA(VS$^~{QG8YxF)&lTisdnQ52^=>Dt$ETAAp$ z!^|UbtJ*LXT2kGWMe}<4qB>A6g3%16jxAO#Ix>2(>NMSL-rUxyW9xj}BOe8C(xaN9 zf9H`436HkxJMmk!*Oo0)CQ=LGPiD>cQWa%7bgT7@w&hdZX>(#x%t>TLhBzMXNJ!JB zTf{EiUGcZ(71EcFJW}Ys2?_aBR>Gt`%brg0A&ghzurvvy+a$~@c2Fl^mowL4o381^ zxoQEH9MKBX2OzpE3c6>8x(FFqS{B8dx~=)z?xCbNyO+~96j^r6K{(mspkA{@Qy)sK z$!#4Q`qmE#d(waCJ^MbjSVNrIAS-L{YHBt(R;Kl!+Y@5LxTw<9keQp7DwoCF2BIsE zM=h-rP5YePu9orzvJv1@GMriB}hPhzS$ zIW|XF+7vIyN-bU3!^OmMV&Zgq8d^)(PF@@eFk?HS|FVB#?1c2Zwd2J6QzDn=4hFEU~DzgC**tC=M=o9Y8G z_Z&7LpSKL2Oj&D_C~g8-tW94p87>QPnySTK8D~0-Y!Rt8E>|zzrDqx>gY~*PSnrQ~ zq((;i7%v(Js$51c$9z-$s}5UCSEIN%D=?8U zk)#uG%}e$E!IPaRG2JMvrf)f?nf_cBb5dj`=AJZfh%Iooujh>;Pg=A^ncY=Nz}4S_ z2YUS|cDd*+4AwL5jj5g+9E}U%bAdY)hfd&_a5v%#=IiXC$cQFh5zFmJ$S7sfrT8he z!Q*laQYj)A=Q6lVU07I(vY1n>_K!Q+f7uN4`2TWfvo}N|976M(qvs8q*+S17w)CIR zs|XfNpWP%IHwd%AI{Q|_VLy?AI8$w6hj1E({%Bnv-Xq!|A>m6b?L0A46ZSk1==N--?uUd^t z2#18pBi?&bcI}MBqTKu)|6gQ}`iV4keRjzFaBz;yFMl}#67IUVDZ~ibM*CqBVN%cA zvR|EA1w5t4dDK}6DcS^*lKEd*xjtkPUu5JS7xBDuS!}^Q;mwKZ-Ai@qm;s?Zq#9Zy z0~a~l&gAuaH1z^IPsT!|al)@8K^t+{gtC*jqd~^rG?i*$Au>stN=|)Mo%gCb57hxV t2RZp%tmKSS)#0Y 2 && n < 20) ? 2 : 3;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s ri am faighinn" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Seo liosta de %s a tha ri am faighinn. Gus feadhainn a thaghadh, tagh iad sa " +"bhogsa gu h-ìosal agus briog air an t-saighead “Tagh” eadar an dà bhogsa an " +"uair sin." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Sgrìobh sa bhogsa seo gus an liosta de %s ri am faighinn a chriathradh." + +msgid "Filter" +msgstr "Criathraich" + +msgid "Choose all" +msgstr "Tagh na h-uile" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Briog gus a h-uile %s a thaghadh aig an aon àm." + +msgid "Choose" +msgstr "Tagh" + +msgid "Remove" +msgstr "Thoir air falbh" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s a chaidh a thaghadh" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Seo liosta de %s a chaidh a thaghadh. Gus feadhainn a thoirt air falbh, tagh " +"iad sa bhogsa gu h-ìosal agus briog air an t-saighead “Thoir air falbh” " +"eadar an dà bhogsa an uair sin." + +msgid "Remove all" +msgstr "Thoir air falbh na h-uile" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Briog gus a h-uile %s a chaidh a thaghadh a thoirt air falbh." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Chaidh %(sel)s à %(cnt)s a thaghadh" +msgstr[1] "Chaidh %(sel)s à %(cnt)s a thaghadh" +msgstr[2] "Chaidh %(sel)s à %(cnt)s a thaghadh" +msgstr[3] "Chaidh %(sel)s à %(cnt)s a thaghadh" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tha atharraichean gun sàbhaladh agad ann an raon no dhà fa leth a ghabhas " +"deasachadh. Ma ruitheas tu gnìomh, thèid na dh’atharraich thu gun a " +"shàbhaladh air chall." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Thagh thu gnìomh ach cha do shàbhail thu na dh’atharraich thu ann an " +"raointean fa leth. Briog air “Ceart ma-thà” gus seo a shàbhaladh. Feumaidh " +"tu an gnìomh a ruith a-rithist." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Thagh thu gnìomh agus cha do rinn thu atharrachadh air ran fa leth sam bith. " +"’S dòcha gu bheil thu airson am putan “Siuthad” a chleachdadh seach am putan " +"“Sàbhail”." + +msgid "Now" +msgstr "An-dràsta" + +msgid "Midnight" +msgstr "Meadhan-oidhche" + +msgid "6 a.m." +msgstr "6m" + +msgid "Noon" +msgstr "Meadhan-latha" + +msgid "6 p.m." +msgstr "6f" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"An aire: Tha thu %s uair a thìde air thoiseach àm an fhrithealaiche." +msgstr[1] "" +"An aire: Tha thu %s uair a thìde air thoiseach àm an fhrithealaiche." +msgstr[2] "" +"An aire: Tha thu %s uairean a thìde air thoiseach àm an fhrithealaiche." +msgstr[3] "" +"An aire: Tha thu %s uair a thìde air thoiseach àm an fhrithealaiche." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"An aire: Tha thu %s uair a thìde air dheireadh àm an fhrithealaiche." +msgstr[1] "" +"An aire: Tha thu %s uair a thìde air dheireadh àm an fhrithealaiche." +msgstr[2] "" +"An aire: Tha thu %s uairean a thìde air dheireadh àm an fhrithealaiche." +msgstr[3] "" +"An aire: Tha thu %s uair a thìde air dheireadh àm an fhrithealaiche." + +msgid "Choose a Time" +msgstr "Tagh àm" + +msgid "Choose a time" +msgstr "Tagh àm" + +msgid "Cancel" +msgstr "Sguir dheth" + +msgid "Today" +msgstr "An-diugh" + +msgid "Choose a Date" +msgstr "Tagh ceann-là" + +msgid "Yesterday" +msgstr "An-dè" + +msgid "Tomorrow" +msgstr "A-màireach" + +msgid "January" +msgstr "Am Faoilleach" + +msgid "February" +msgstr "An Gearran" + +msgid "March" +msgstr "Am Màrt" + +msgid "April" +msgstr "An Giblean" + +msgid "May" +msgstr "An Cèitean" + +msgid "June" +msgstr "An t-Ògmhios" + +msgid "July" +msgstr "An t-Iuchar" + +msgid "August" +msgstr "An Lùnastal" + +msgid "September" +msgstr "An t-Sultain" + +msgid "October" +msgstr "An Dàmhair" + +msgid "November" +msgstr "An t-Samhain" + +msgid "December" +msgstr "An Dùbhlachd" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Faoi" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Gearr" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Màrt" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Gibl" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Cèit" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Ògmh" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Iuch" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Lùna" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sult" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Dàmh" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Samh" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dùbh" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Dò" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Lu" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Mà" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ci" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Da" + +msgctxt "one letter Friday" +msgid "F" +msgstr "hA" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Sa" + +msgid "Show" +msgstr "Seall" + +msgid "Hide" +msgstr "Falaich" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99e403a44b705447772da403cd276a3e61196ae0 GIT binary patch literal 10785 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 N$LMBd_&aRc{11Wd3mO0b literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 000000000..aec9f2821 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,708 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Denís Bermúdez Delgado , 2021 +# fasouto , 2011-2012 +# fonso , 2011,2013 +# fasouto , 2017 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +# Oscar Carballal , 2011-2012 +# Pablo, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-22 07:21+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Borrar %(verbose_name_plural)s seleccionados." + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Borrado exitosamente %(count)d %(items)s" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Non foi posíbel eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "Non" + +msgid "Unknown" +msgstr "Descoñecido" + +msgid "Any date" +msgstr "Calquera data" + +msgid "Today" +msgstr "Hoxe" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este ano" + +msgid "No date" +msgstr "Sen data" + +msgid "Has date" +msgstr "Ten data" + +msgid "Empty" +msgstr "Baleiro" + +msgid "Not empty" +msgstr "Non baleiro" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor, insira os %(username)s e contrasinal dunha conta de persoal. Teña " +"en conta que ambos os dous campos distingues maiúsculas e minúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Engadir outro %(verbose_name)s" + +msgid "Remove" +msgstr "Retirar" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "hora da acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contido" + +msgid "object id" +msgstr "id do obxecto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr do obxecto" + +msgid "action flag" +msgstr "código do tipo de acción" + +msgid "change message" +msgstr "cambiar mensaxe" + +msgid "log entry" +msgstr "entrada de rexistro" + +msgid "log entries" +msgstr "entradas de rexistro" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Engadido %(object)s" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "" + +msgid "LogEntry Object" +msgstr "Obxecto LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "Engadido" + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "Non se modificou ningún campo." + +msgid "None" +msgstr "Ningún" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Deb seleccionar ítems para poder facer accións con eles. Ningún ítem foi " +"cambiado." + +msgid "No action selected." +msgstr "Non se elixiu ningunha acción." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Engadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Erro da base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s foi cambiado satisfactoriamente." +msgstr[1] "%(count)s %(name)s foron cambiados satisfactoriamente." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado." +msgstr[1] "Tódolos %(total_count)s seleccionados." + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionados." + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de cambios: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Administración de sitio Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Administración do sitio" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "administración de %(app)s " + +msgid "Page not found" +msgstr "Páxina non atopada" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Erro no servidor" + +msgid "Server error (500)" +msgstr "Erro no servidor (500)" + +msgid "Server Error (500)" +msgstr "Erro no servidor (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Executar a acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Fai clic aquí para seleccionar os obxectos en tódalas páxinas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos os %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpar selección" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos na aplicación %(name)s" + +msgid "Add" +msgstr "Engadir" + +msgid "View" +msgstr "" + +msgid "You don’t have permission to view or edit anything." +msgstr "" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Introduza un nome de usuario e contrasinal." + +msgid "Change password" +msgstr "Cambiar contrasinal" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "Por favor, corrixa os erros de embaixo" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Insira un novo contrasinal para o usuario %(username)s." + +msgid "Welcome," +msgstr "Benvido," + +msgid "View site" +msgstr "Ver sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Rematar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Engadir %(name)s" + +msgid "History" +msgstr "Historial" + +msgid "View on site" +msgstr "Ver no sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Clear all filters" +msgstr "" + +msgid "Remove from sorting" +msgstr "Eliminar da clasificación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridade de clasificación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar clasificación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Borrar o %(object_name)s '%(escaped_object)s' resultaría na eliminación de " +"elementos relacionados, pero a súa conta non ten permiso para borrar os " +"seguintes tipos de elementos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Para borrar o obxecto %(object_name)s '%(escaped_object)s' requiriríase " +"borrar os seguintes obxectos protexidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Seguro que quere borrar o %(object_name)s \"%(escaped_object)s\"? " +"Eliminaranse os seguintes obxectos relacionados:" + +msgid "Objects" +msgstr "Obxectos" + +msgid "Yes, I’m sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples obxectos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Borrar os obxectos %(objects_name)s seleccionados resultaría na eliminación " +"de obxectos relacionados, pero a súa conta non ten permiso para borrar os " +"seguintes tipos de obxecto:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Para borrar os obxectos %(objects_name)s relacionados requiriríase eliminar " +"os seguintes obxectos protexidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Está seguro de que quere borrar os obxectos %(objects_name)s seleccionados? " +"Serán eliminados todos os seguintes obxectos e elementos relacionados on " +"eles:" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "" + +msgid "Recent actions" +msgstr "Accións recentes" + +msgid "My actions" +msgstr "As miñas accións" + +msgid "None available" +msgstr "Ningunha dispoñíbel" + +msgid "Unknown content" +msgstr "Contido descoñecido" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "¿Olvidou o usuario ou contrasinal?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Amosar todo" + +msgid "Save" +msgstr "Gardar" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Busca" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado. " +msgstr[1] "%(counter)s resultados." + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s en total" + +msgid "Save as new" +msgstr "Gardar como novo" + +msgid "Save and add another" +msgstr "Gardar e engadir outro" + +msgid "Save and continue editing" +msgstr "Gardar e seguir modificando" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "Engadir outro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "Entrar de novo" + +msgid "Password change" +msgstr "Cambiar o contrasinal" + +msgid "Your password was changed." +msgstr "Cambiouse o seu contrasinal." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Cambiar o contrasinal" + +msgid "Password reset" +msgstr "Recuperar o contrasinal" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"A túa clave foi gardada.\n" +"Xa podes entrar." + +msgid "Password reset confirmation" +msgstr "Confirmación de reseteo da contrasinal" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor insira a súa contrasinal dúas veces para que podamos verificar se " +"a escribiu correctamente." + +msgid "New password:" +msgstr "Contrasinal novo:" + +msgid "Confirm password:" +msgstr "Confirmar contrasinal:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"A ligazón de reseteo da contrasinal non é válida, posiblemente porque xa foi " +"usada. Por favor pida un novo reseteo da contrasinal." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Recibe este email porque solicitou restablecer o contrasinal para a súa " +"conta de usuario en %(site_name)s" + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor vaia á seguinte páxina e elixa una nova contrasinal:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Grazas por usar o noso sitio web!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "O equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Enderezo de correo electrónico:" + +msgid "Reset my password" +msgstr "Recuperar o meu contrasinal" + +msgid "All dates" +msgstr "Todas as datas" + +#, python-format +msgid "Select %s" +msgstr "Seleccione un/unha %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s que modificar" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Procurar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Modificar:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..fefbe0d1af3b661fd4b727d2025e1d2ba6d9861e GIT binary patch literal 3279 zcmcImO>Y}T7+#=!87NSod`f+Z6q2Z{?YQ*IX%K0ev?&dV5<}HW9LBq2d&+voof*eT zPjEsUD?pXtLXSOED(bC>lezH=kSe%TT#)(;kl=ZD*G?Lu_5iFr`|NzZ^Ssad&WwNE zv+L^s&l`F96F7=;`yssWbRG_Z!@!Hc$AH&>PXlk{^&fNm3HS`!e+CwSzW|>E-U03d z-UYq|-2F&q=OAzw>c@aj0B7?0X&`>V5?;LCDv<4+2l99c{0evhcp3N?@KNApbh4c* zz$xH&Kwkeg@EhRoK%Vy*26upaVf+ew{2W+CeIF)21w0RY4%h&)y4dx5W^>_K5pFQdGU@)8O^2u1KL3hVR=3S3CFd=Zm)c@uK+c)Ar20lKkJ3$^+9st_6Lqsrb(xqR z2_18brij_+<7gyPWrT#a7*vFH#rspkAlgdJVP?!Nc1R9t{DT~ANMEGoL<%Rfte~a$SvQ`aF-PKS z30r8iGPK={StiLAQeB-bxw8~9RzBT}15FkhDP1(&zKz>tLksV`wxagWH4v%-6F07d<6_%H3;jEQ{V;G(gURJ46o;(zm z4~CP6sdAt?S=nE%l*cw?({ zT4;@wJ0r2p6FLSqsJ@q^)uPf3^DgG-W>++2Sd*e%rIP|XP{H%@miL`%snqNBik?lX zhFmX3rd`UM8bFfIFEx|WL}77Zac8C%e z&4))e$MISXX~Q`knHWbwm5$VvAM&hHGbt=5T`Q7s-q^OQlJ2BcH(i;c>~nft)0@*Y zIWbijp2*k{gVS2N$Rvr1&3!vvaEM}oz107{e>K1v8!Oi_s9dj0H8{D24dzm7I83t- zL0#Pv)G}5KyO5*2n4{s!B{A+MkTbF^s3WY%dw7pws4EHV+4Ma&>c%KeO|HpH#b91E zMYHZJuX>-Dc?4ri;g%G;E}Ha2L^IKV-XH2b%7erHC=>Hbw6, 2011 +# fonso , 2011,2013 +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s dispoñíbeis" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta é unha lista de %s dispoñíbeis. Pode escoller algúns seleccionándoos na " +"caixa inferior e a continuación facendo clic na frecha \"Escoller\" situada " +"entre as dúas caixas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Escriba nesta caixa para filtrar a lista de %s dispoñíbeis." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Escoller todo" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Prema para escoller todos/as os/as '%s' dunha vez." + +msgid "Choose" +msgstr "Escoller" + +msgid "Remove" +msgstr "Retirar" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s escollido/a(s)" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s escollidos/as. Pode eliminar algúns seleccionándoos na " +"caixa inferior e a continuación facendo clic na frecha \"Eliminar\" situada " +"entre as dúas caixas." + +msgid "Remove all" +msgstr "Retirar todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Faga clic para eliminar da lista todos/as os/as '%s' escollidos/as." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s escollido" +msgstr[1] "%(sel)s de %(cnt)s escollidos" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tes cambios sen guardar en campos editables individuales. Se executas unha " +"acción, os cambios non gardados perderanse." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Escolleu unha acción, pero aínda non gardou os cambios nos campos " +"individuais. Prema OK para gardar. Despois terá que volver executar a acción." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Escolleu unha acción, pero aínda non gardou os cambios nos campos " +"individuais. Probabelmente estea buscando o botón Ir no canto do botón " +"Gardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Agora" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Escolla unha hora" + +msgid "Midnight" +msgstr "Medianoite" + +msgid "6 a.m." +msgstr "6 da mañá" + +msgid "Noon" +msgstr "Mediodía" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoxe" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Onte" + +msgid "Tomorrow" +msgstr "Mañá" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Amosar" + +msgid "Hide" +msgstr "Esconder" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..74a428dcf2b2f5ad42b7e5d7c0cce0e3ce456cd7 GIT binary patch literal 16297 zcmd6tdyt)Fea9aaxdbnWHxQABl!OGcn@t3PB@iJ52of$y0552I_MCTj4>{+&%eiD( zyrIRr)LpVm2nkCPFt<^v(>jjRj?<~5cG}TVdpR@J+KP6n{$XpC&gdW7&-eE{?|a^} z*2Kh6mSFhJn)U+3&2}q|6QQQmqF1n1-=q| zIQBmUo=W|*AWOS1fLiCP;A!ADV*j_mcTxX7_y9O^hI20j{~Z+l&w!%m1uqHnUJ9N` z{oIH{AXD82@N94^D7xz)|6C{H2SJV71Fiv&g0Rkg3*?{sE`P+rpMs+Im!Rl;A)9I3 zD?!n5E~s-}0BXN=;Dz8Fp!R)tZ2tgwFZKQ4J>c0db?zzfqu?kw{4(dB01trT(?*yn ze%{OfhU0p_#W_X@J{eYpw_?UtRVkQpyu5Hil1)>)!zV@f*nwNd;}EzPk`F@ zGayHIe+Fv)UxTp5eH}!^?t7s2{~4(B{u~tlPld@EedKOJ`7HR!{Bq6to_%4T7NUB^V|iB-ZCh8OoFh&eHav-2S7yU z4uLG~{v6bK{{a*o-vhPIe}Fp2e}h_2#-jCJ23`a%2kCORfwHeUD8AeWN=^@gn)fjH z8Sogm47}^yu;}A=Ljf%eGwFYe;n}_pw>MZy4Zdl zsPk+A|MWTNIw(1wenH^>GEj244E#HA8(0EYzbhF zjf2vUcY?6ieFW6{M?uN!OQ7idS5R{LQN(9J@l#F)6L+V9lE-=A`@z-VpMakQwSKa~ zIauOapw^iK)xJNrKLui1?(3k|`(bSV6)1k4zcSD}0D9_IgBmvi-U!|cYTYk_(yy<9 zn)h#@2Y&)ezt6lVv|j*f{1B*fUIBXW4)C?$Bq(`30ZRU#24}#pf*%66Gw5sJ55NzA zpIb%j0IwPd>z*+f_B#jExdy-`;B}zrz70GX90T73HbCwB6;R`T3Toe9f)9e{tak2F z@F;i){4S{Z9~ugL|2Qar@i-{|_-Ro5J#`Iw1ik{?4*m_O^)Ff*{KO@o>NkS&Be#QE zw+^Cut__Ob-Jtx+r@)iIzXGKvUjbhNeh(DA&w$dyGhY|h83JES{ZjCB@Otn}aBIX- zQ0q@c{5a^Te*zReUj`AK`wl4noO-cye*s<$-V6Q&{0eyYCB#~A?dyZy?*v8PG^q1^ z5_~E6IZ*QWTTttLKlYyibEW_1fF2wMMb}$F&ASKGI`0R?*J)6CGY@LL&x4TYz6pBp zQxX3XJdOG{!K=Y< zgI@w)vo7et_d)6155Y&kUx1M6cHty(P426p{Lz1bh{{b~75Mc@5EXV`0=3^W5l>kk z;_}&``2T89`m;9HuK^{GH-X}74Llos0MvQr!RLS#ik>?uJ1F}p*HdsuwlCmz>kp6o zm7Z%TkZ;f95&sB;wI-uCgS%q8&Ndz21?N&eLJ=)bQZA+Fxq~7)6$^CEO%y${0rB&L z6imiVQf{W)MbRT(if^w{B|h>;+bFlhdKo;0B7WB?n7lpj<}Yex@#|n{GT!4#+$SiA z&|OQpmr{JBS0_=$%yjo=ss*XLln+4nf8XNK~8N=mtpB3ZtR zA{*87VG1f?&+GY{#P=2`{nR75FSEB`8*hp4?}+$D@SX8}EBHiw-wPg~j8LkSjg&2v z*HH9G-?L{aFXvG{N|~Z;rrbu^NqLy^C`I}jIZPR)+)B~&2b6irb1Bk)J?{-* zfB!JPKM0;hd5rS5*mhOKmw`9M_wC>u<$lT^Q}$8xTt|5;rA9fQvWIerqUS@D_fT$E z#a}b!m#rAB*4jyPd%N1MB`aIrEn88VnBb*UsaG4-R=ZhhSJMW~R*^bqlQZ{B>Z7}Sv zuCPj_!nknkP-z*I8fkkxY0_6uD@hGDX=JZ;XVM%=TS;W7I$_n*_wQS_A|1IK0#~-4 zzW=eo&~8u-Tlb5FGuSyQrFOy&jVZ4;cQp*1N;|MVzD$-HZQo8klqBuMLm7mHjWUrg zUA7`=l}i&zWqU@!()C_Uf)koBn$~LRWVJDdBx>wZ@zr)xZ~4h8V@8s=b_KTlFLuvZ znv;>K)(N%@B%zj#iioK;e-k3syA7oV^2m;#%WH$Fs0-kiwX(Ny6hCcF4Huf~Q+@&i zm`t0MY}CSf;Y^v#!^*>PM#aBlw3^f^t#=K&4Yj1y^d(pqERemeB`hM7+fb{PcX)IN zd8IzIn;>#tl$&V_maxV|X$<*qsG(7AL)sXvHtRXL?A~cMlSaEXHSDe}wM!$VR^pRp zGi|DxtZrB9iM`Qn`Vqm`vA60(E%9;3tbLJ#hKZ3%RAbqSqJnRqsCAkp89^AgKH>t6 zA4KItkF@MrT#lbiJGBZba8IWSdrYe}rC&`anrYiiJ=c|Z4&=Hb>TuNcRz_O3%0lb7 z@ObOE@VBL+chtq~@mY72C-l`u@8p?D#uKjcBb~Nf04i2Cf9NY|(rR4T_T#0UiJwTC z^=hkynl11OJtJ>VO(ZSZe#W$Zatk^T2V{=qx0KCqy3PL~D=^Y)?^9aX+EZ?0gFx&{zL8Akwu{qknpSsO^sOTtr;V|z zmaR}V#GG}jW8+}HK-Ou_GILUc?mCO~5qzVxvpQzf1UF85v(;YZq0y*Vd=bBGJZY?w zVm*ETp5XRNBRB{gR8pz7eLck-jn;HR@v6nPX>%-Xx06Ot$BZ7&!LmKppJ>o}ADCi_ zoD`Wxz#$l|vLj9=ftWBriAl3#5xQmUYbEWr%sOy3Z6t&4`qbS(hGMbuhT!Yn4JjU_ zl1?@hh4G=Vx`sbmB|@#GUMKj_;xU?%-&`uMD)?nPc$;uSFB{yD;!-z_S`evy znkdy3s4Gcx&~38tT<^5n3eUO0;x-6k2pOT_2hgxOPQs+6qp@Xu(BGWK=x**}Btd*J zpBr>HrDOP>2);B{ij}m}RwE*7PWf9bi=m$G=uEiH%7I$)Si#lBG?7%3AQx<6^HfHK zySZQi!|vvkf3Yt=#h}_ueqacyJpyk|5sjEyPy9%!yo0fg#QylwPApFXjyplFnABhHxL(?bR{bq`jc(%OUE9voN*oFNMA-Rt-Wfr^MhgNf;8f*c&u> z@Pz%X1p|U%YI?R*(GB$3x~YB1lc0}|X8vCywal-CHjtWTOskisq#b1xaiEnna9QYR zPF2{{RIAS|wI{1(R4Vn8n%eLL`|9YFsi@+HQbP$lQmVW^vZ1h`>@D*KtD>crJI!i) z3L9wo76J_V&6zP7^Gm-&O7PkkfcV*qc}k;@jT;H^W)Q!eIa7%i2h&U^npM(Vd5bUssFB(fJXuFBvO%{s2-~w`Dn(YJnZ0jsbm}9zwYshCQWHloHNnv& zgm3|nI&Cdnm9zVl@?g7OE2*{{*Gi)5)(+vQIpwwya(09`*O5|srF_ae&ZkS4JiTX` zSvx7!tvNG0jwG$DRU13JuI$yu&Qh%kBPO_5R7YxZ4doJNlRb|!pi~nR)Qm~eUK#X0 zTDFq$1h=;!fw3J1*%b!XQQPtG8gj;vlv;E&X_TTu`gj2w^qbl+GaZ5LQ=%|LQfvYj zv$I-43@mG(D(uj4pDA?SZR1um?6##iVg8Pdk)>p|cza_h%6F5WwB79p(cK{n z(jOU%Awf}G3>AC3GpUtP&Qa_tlXRmNw>5n@&Y2wqaZ(gogxdK)`H7mn5jsw ztcHPjHrRiH)WzIhCbU()idQEGiHUu3FD9dFI8I%ghcrm*na`Ar-mGr{kjN}R3KVJ!ZJI1QaBK{4)xGi#WRr=ckReT+k|A&~So z$Vhw`^miHwBCS@%Oc_&4$CMN>*jK8fqhvPbPEF(28wpwZw8*_ho=WMNrJkk6lsO9y z!}h63wJ7_IX{s13=O8K6`s@GMhy5!e%9DUVXoT$GbDB;>ET7>KKV)@EBZ zdvj$zW;R$HR+AA)7%GipQ|7(lhQcPwxo~#jgIes8$59%EIuK|}*eEn1J#-2JL&`nu zLQL_awbEGjZr6QMSr?o?Nm8qYbX>FoIi|#k5=7Cgq8Qoxl#5ndtz>V_WTNRriMzF# z>a*3rrpmw_NmDn=VPCP!(UL961Zp<0xiwa;3|!M0YYl8mhy9XUZyDHdsm z;@1ogE!hwp!@xFJGVI&Qz3tT#HPYQHoK_%zbG^5QGF59lk&l`9(l$}9aEzkIoG_+`9M8(Qht z`yoHyK~)r zblL}D_bi`dT=yu$_cL5;g=i%=5wra63_XXs2R$#dyzJ}l?#>SWzn^r>sGjc5W@obC z9nWWR9Znb@xDbc4>Dn>-B%PhQBi~?uhH|MJnCdfBeFUMs(+X zXJdwZcV5T0&)^va$oesd;vAHIbZ7fsr85WUqcwXy#sWbT`r2B3wd^aoH#IuYeFFU` zE>QfMNDB4z{qxxuI{Q#woF+Z&UjSlqeb%yjMR>*|ggD(j!kPAla~XHDwnsI5y8D<^ z_Xw&x$3l|b!Ri;vJdRqGpf>hpV2hU^cgnX!*)4kIVp3` zN;4{;ll0T8#(8rKkFIwRH7yD4f%?abB=!^|cOZRk!E|H~($sOqHCE7}qqDK^^Hlfi z;1UEQHF}>Fj#>ASNV^p6I4R6zTO8z6bKPBGg9F`%vQ@R0dJ2c1 zMPEeCUTw(xQ5$XinF*YbFyy-;y}7opX6!-Hnzt}rN~imzK}A+ zoZ@bzs929`A4T11lXg;@Wu#n{scG;~(kRneu@*}@fh;m!7mu@;Pn%|a3`vGKFXjF{ ziM)@DnM}NkxYj^{Tq>S#=GU;Z5CV*uGZx@6yT#avW%n40q>gj=Fu`~l!b|SNk%;86 zz{B+0w^Tf2ec>03;OjyQbC1E|tOE~g3BWGJQTdV?9eEco(@VSiSXQcZ*zpIOQ#5#( zS5zVM&``dc;Ya024w}{=z7R8x!LFmf?#B*<3}^STfJMurI;{dum<$>DMtF(LKR>S5 z{URgxU2=tc7(Um1L^Ml}EXXXRd$A1^X=VpS#WaV3{&{%8;#$!now!NSh=VLX7fj+w z_E1IJ!m|R^^4iLtXty{d56%d4-9|u>L5!O1oiZ~yqU}-h{MkH>F+$^r^`g&Mm&?S~ zFGz7V$WbSfS?2h~7*V@-H7F1kbd?+~x8mGg;93xq{SmY5P9%0^vvsrFry+e> zH7#Kug@%mHv(%0;KMbEnqKBoyrn@?#l#R44TP)vCQIbKi9-Um@>2=7cUAaD4Q!n%E z9ZQ_clg0e7p*5y;iw~HAe#KgD)v{6C4;B2|{$Sh3I1V}yRWZu|IefHU&h@M#qh~Tp z?~U#A7{$+kQszEqq&tSLSyCV~tU@r;fd~q^O$8l{ltfpK)k=R&&6uw9NpMEd5ldzB zfl*qa?;#tsPnFf?vE)tVN8|E+#OD$?CZ9YD|6(kX8qGtXksYl_=Bsp?0IKB+7JrzA zUBN}Omy~O7bbxzKv~j^7D>%g4i{(owp`!UgNlrr5HIGjvH0z?>A7i3qbH7?RLd?B> z+mi$VK3+VBZXGC`qM2E=$RxoC^yR)bSL341?q-%{hKIVJklpGEb7XLk)ic920cVUYPUNA^$u;gRPKFwqiWmj# zr*o%qd{@3fZ;mPHao>gPTM?JC!jE>WD`6Vvl#Lu)_{-gK19XlBQ^Id}FzQhEA#oWC zk+mt#z-*IC7s-iFw0K*fk) zraa1ylu6__V!qH&QJi6D;RvvCm?h9ZQZg@B(+M zi+~b%<16NMzRNr?LAdZMp)=a#m@IJ;bMpYz=i=4QIx=$Ovx!QHujRn9pO}qn453OV zC4pdAbjUOC0Ky9EXEuyn%uZmh{F)pth7#l)vIjC!PlRTmrklS!@pmFdJjS+4XOx{X ziKRq_44k|`-v%&bIhLdPrYA*=N^BIEkCy(ErICKfZ5y{m+deIzPlwV^=*WGOZGnJk zJ{SaJeCcn_bAJgVx{LS%&*Tq!H7G}Zi?zs7AZV3ih)G2Hxu2<)a1lOcp*(lk^Abjn z^)?}7nNnx1wL7e0H+Y%y;wgO|$k;#%xu1Ek77oG<3!jCUZ&`jJBYyTPMxIO~wU8m_ zBuv{ulQrPv!Ewj| zLY#KaIf@n$=nvV{Keg3Ogl0^)8|y6G-N8avi6@x zR^r=U7>P6r=g4_xld|u*kf?JhLWH1gK0UV|^_sZs3aGU`qvK5&o83k1f~#4sG3#(1 z@z#|8j4>w-5f@Fqg}`ecR6IK?2}H3J??nu@uJELnLMw#jZS(R`TCeYh;25AN#%G%2 Jdh!#w{{cfG0owoo literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po new file mode 100644 index 000000000..ac68336dc --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,717 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 534b44a19bf18d20b71ecc4eb77c572f_db336e9 , 2011 +# Jannis Leidel , 2011 +# Meir Kriheli , 2011-2015,2017,2019-2020 +# Menachem G., 2021 +# Yaron Shahrabani , 2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-02 07:48+0000\n" +"Last-Translator: Menachem G.\n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "מחק %(verbose_name_plural)s שנבחרו" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s נמחקו בהצלחה." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "לא ניתן למחוק %(name)s" + +msgid "Are you sure?" +msgstr "להמשיך?" + +msgid "Administration" +msgstr "ניהול" + +msgid "All" +msgstr "הכול" + +msgid "Yes" +msgstr "כן" + +msgid "No" +msgstr "לא" + +msgid "Unknown" +msgstr "לא ידוע" + +msgid "Any date" +msgstr "כל תאריך" + +msgid "Today" +msgstr "היום" + +msgid "Past 7 days" +msgstr "בשבוע האחרון" + +msgid "This month" +msgstr "החודש" + +msgid "This year" +msgstr "השנה" + +msgid "No date" +msgstr "ללא תאריך" + +msgid "Has date" +msgstr "עם תאריך" + +msgid "Empty" +msgstr "ריק" + +msgid "Not empty" +msgstr "לא ריק" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"נא להזין את %(username)s והסיסמה הנכונים לחשבון איש צוות. נא לשים לב כי שני " +"השדות רגישים לאותיות גדולות/קטנות." + +msgid "Action:" +msgstr "פעולה" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "הוספת %(verbose_name)s" + +msgid "Remove" +msgstr "להסיר" + +msgid "Addition" +msgstr "הוספה" + +msgid "Change" +msgstr "שינוי" + +msgid "Deletion" +msgstr "מחיקה" + +msgid "action time" +msgstr "זמן פעולה" + +msgid "user" +msgstr "משתמש" + +msgid "content type" +msgstr "סוג תוכן" + +msgid "object id" +msgstr "מזהה אובייקט" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ייצוג אובייקט" + +msgid "action flag" +msgstr "דגל פעולה" + +msgid "change message" +msgstr "הערה לשינוי" + +msgid "log entry" +msgstr "רישום יומן" + +msgid "log entries" +msgstr "רישומי יומן" + +#, python-format +msgid "Added “%(object)s”." +msgstr "„%(object)s” נוסף." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "„%(object)s” נמחקו." + +msgid "LogEntry Object" +msgstr "אובייקט LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "" + +msgid "Added." +msgstr "נוסף." + +msgid "and" +msgstr "ו" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr " {fields} שונו." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "" + +msgid "No fields changed." +msgstr "אף שדה לא השתנה." + +msgid "None" +msgstr "ללא" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "יש להחזיק \"Control\" או \"Command\" במק, כדי לבחור יותר מאחד." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "ניתן לערוך שוב מתחת." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "יש לסמן פריטים כדי לבצע עליהם פעולות. לא שונו פריטים." + +msgid "No action selected." +msgstr "לא נבחרה פעולה." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "הוספת %s" + +#, python-format +msgid "Change %s" +msgstr "שינוי %s" + +#, python-format +msgid "View %s" +msgstr "צפיה ב%s" + +msgid "Database error" +msgstr "שגיאת בסיס נתונים" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[1] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[2] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[3] "שינוי %(count)s %(name)s בוצע בהצלחה." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s נבחר" +msgstr[1] "כל ה־%(total_count)s נבחרו" +msgstr[2] "כל ה־%(total_count)s נבחרו" +msgstr[3] "כל ה־%(total_count)s נבחרו" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 מ %(cnt)s נבחרים" + +#, python-format +msgid "Change history: %s" +msgstr "היסטוריית שינוי: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"מחיקת %(class_name)s %(instance)s תדרוש מחיקת האובייקטים הקשורים והמוגנים " +"הבאים: %(related_objects)s" + +msgid "Django site admin" +msgstr "ניהול אתר Django" + +msgid "Django administration" +msgstr "ניהול Django" + +msgid "Site administration" +msgstr "ניהול אתר" + +msgid "Log in" +msgstr "כניסה" + +#, python-format +msgid "%(app)s administration" +msgstr "ניהול %(app)s" + +msgid "Page not found" +msgstr "דף לא קיים" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "אנו מתנצלים, העמוד המבוקש אינו קיים." + +msgid "Home" +msgstr "דף הבית" + +msgid "Server error" +msgstr "שגיאת שרת" + +msgid "Server error (500)" +msgstr "שגיאת שרת (500)" + +msgid "Server Error (500)" +msgstr "שגיאת שרת (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "הפעל את הפעולה שבחרת בה." + +msgid "Go" +msgstr "בצע" + +msgid "Click here to select the objects across all pages" +msgstr "לחיצה כאן תבחר את האובייקטים בכל העמודים" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "בחירת כל %(total_count)s ה־%(module_name)s" + +msgid "Clear selection" +msgstr "איפוס בחירה" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "מודלים ביישום %(name)s" + +msgid "Add" +msgstr "הוספה" + +msgid "View" +msgstr "צפיה" + +msgid "You don’t have permission to view or edit anything." +msgstr "אין לך כלל הרשאות צפיה או עריכה." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"ראשית יש להזין שם משתמש וססמה. לאחר מכן ניתן יהיה לערוך אפשרויות משתמש " +"נוספות." + +msgid "Enter a username and password." +msgstr "נא לשים שם משתמש וסיסמה." + +msgid "Change password" +msgstr "שינוי סיסמה" + +msgid "Please correct the error below." +msgstr "נא לתקן את השגיאה מתחת." + +msgid "Please correct the errors below." +msgstr "נא לתקן את השגיאות מתחת." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "יש להזין סיסמה חדשה עבור המשתמש %(username)s." + +msgid "Welcome," +msgstr "שלום," + +msgid "View site" +msgstr "צפיה באתר" + +msgid "Documentation" +msgstr "תיעוד" + +msgid "Log out" +msgstr "יציאה" + +#, python-format +msgid "Add %(name)s" +msgstr "הוספת %(name)s" + +msgid "History" +msgstr "היסטוריה" + +msgid "View on site" +msgstr "צפיה באתר" + +msgid "Filter" +msgstr "סינון" + +msgid "Clear all filters" +msgstr "ניקוי כל הסינונים" + +msgid "Remove from sorting" +msgstr "הסרה ממיון" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "עדיפות מיון: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "החלף כיוון מיון" + +msgid "Delete" +msgstr "מחיקה" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, " +"אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"מחיקת ה%(object_name)s '%(escaped_object)s' תדרוש מחיקת האובייקטים הקשורים " +"והמוגנים הבאים:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים " +"הקשורים הבאים יימחקו:" + +msgid "Objects" +msgstr "אובייקטים" + +msgid "Yes, I’m sure" +msgstr "כן, בבטחה" + +msgid "No, take me back" +msgstr "לא, קח אותי חזרה." + +msgid "Delete multiple objects" +msgstr "מחק כמה פריטים" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"מחיקת ב%(objects_name)s הנבחרת תביא במחיקת אובייקטים קשורים, אבל החשבון שלך " +"אינו הרשאה למחוק את הסוגים הבאים של אובייקטים:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"מחיקת ה%(objects_name)s אשר סימנת תדרוש מחיקת האובייקטים הקשורים והמוגנים " +"הבאים:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"האם אתה בטוח שאתה רוצה למחוק את ה%(objects_name)s הנבחר? כל האובייקטים הבאים " +"ופריטים הקשורים להם יימחקו:" + +msgid "Delete?" +msgstr "מחיקה ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " לפי %(filter_title)s " + +msgid "Summary" +msgstr "סיכום" + +msgid "Recent actions" +msgstr "פעולות אחרונות" + +msgid "My actions" +msgstr "הפעולות שלי" + +msgid "None available" +msgstr "לא נמצאו" + +msgid "Unknown content" +msgstr "תוכן לא ידוע" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"משהו שגוי בהתקנת בסיס הנתונים שלך. יש לוודא יצירת הטבלאות המתאימות וקיום " +"הרשאות קריאה על בסיס הנתונים עבור המשתמש המתאים." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"התחברת בתור %(username)s, אך אין לך הרשאות גישה לעמוד זה. האם ברצונך להתחבר " +"בתור משתמש אחר?" + +msgid "Forgotten your password or username?" +msgstr "שכחת את שם המשתמש והסיסמה שלך ?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Start typing to filter…" +msgstr "התחל להקליד כדי לסנן..." + +msgid "Filter navigation items" +msgstr "סנן פריטי ניווט" + +msgid "Date/time" +msgstr "תאריך/שעה" + +msgid "User" +msgstr "משתמש" + +msgid "Action" +msgstr "פעולה" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "לאובייקט זה אין היסטוריית שינויים. כנראה לא נוסף דרך ממשק הניהול." + +msgid "Show all" +msgstr "הצג הכל" + +msgid "Save" +msgstr "שמירה" + +msgid "Popup closing…" +msgstr "חלון צץ נסגר..." + +msgid "Search" +msgstr "חיפוש" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "תוצאה %(counter)s" +msgstr[1] "%(counter)s תוצאות" +msgstr[2] "%(counter)s תוצאות" +msgstr[3] "%(counter)s תוצאות" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s סה\"כ" + +msgid "Save as new" +msgstr "שמירה כחדש" + +msgid "Save and add another" +msgstr "שמירה והוספת אחר" + +msgid "Save and continue editing" +msgstr "שמירה והמשך עריכה" + +msgid "Save and view" +msgstr "שמירה וצפיה" + +msgid "Close" +msgstr "סגירה" + +#, python-format +msgid "Change selected %(model)s" +msgstr "שינוי %(model)s הנבחר." + +#, python-format +msgid "Add another %(model)s" +msgstr "הוספת %(model)s נוסף." + +#, python-format +msgid "Delete selected %(model)s" +msgstr "מחיקת %(model)s הנבחר." + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" + +msgid "Log in again" +msgstr "התחבר/י שוב" + +msgid "Password change" +msgstr "שינוי סיסמה" + +msgid "Your password was changed." +msgstr "סיסמתך שונתה." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"נא להזין את הססמה הישנה שלך, למען האבטחה, ולאחר מכן את הססמה החדשה שלך " +"פעמיים כדי שנוכל לוודא שהקלדת אותה נכון." + +msgid "Change my password" +msgstr "שנה את סיסמתי" + +msgid "Password reset" +msgstr "איפוס סיסמה" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "ססמתך נשמרה. כעת ניתן להתחבר." + +msgid "Password reset confirmation" +msgstr "אימות איפוס סיסמה" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "נא להזין את סיסמתך החדשה פעמיים כדי שנוכל לוודא שהקלדת אותה כראוי." + +msgid "New password:" +msgstr "סיסמה חדשה:" + +msgid "Confirm password:" +msgstr "אימות סיסמה:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"הקישור לאיפוס הסיסמה אינו חוקי. ייתכן והשתמשו בו כבר. נא לבקש איפוס סיסמה " +"חדש." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"שלחנו לך הוראות לקביעת הססמה, בהנחה שקיים חשבון עם כתובת הדואר האלקטרוני " +"שהזנת. ההוראות אמורות להתקבל בקרוב." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"אם לא קיבלת דואר אלקטרוני, נא לוודא שהזנת את הכתובת שנרשמת עימה ושההודעה לא " +"נחתה בתיקיית דואר הזבל." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"הודעה זו נשלחה אליך עקב בקשתך לאיפוס הסיסמה עבור המשתמש שלך באתר " +"%(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "נא להגיע לעמוד הבא ולבחור סיסמה חדשה:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "שם המשתמש שלך במקרה ושכחת:" + +msgid "Thanks for using our site!" +msgstr "תודה על השימוש באתר שלנו!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "צוות %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"שכחת את הססמה שלך? נא להזין את כתובת הדואר האלקטרוני מתחת ואנו נשלח הוראות " +"לקביעת ססמה חדשה." + +msgid "Email address:" +msgstr "כתובת דוא\"ל:" + +msgid "Reset my password" +msgstr "אפס את סיסמתי" + +msgid "All dates" +msgstr "כל התאריכים" + +#, python-format +msgid "Select %s" +msgstr "בחירת %s" + +#, python-format +msgid "Select %s to change" +msgstr "בחירת %s לשינוי" + +#, python-format +msgid "Select %s to view" +msgstr "בחירת %s לצפיה" + +msgid "Date:" +msgstr "תאריך:" + +msgid "Time:" +msgstr "שעה:" + +msgid "Lookup" +msgstr "חפש" + +msgid "Currently:" +msgstr "נוכחי:" + +msgid "Change:" +msgstr "שינוי:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..852d04a1ae6759ec82fba2d3c994c94496f534ab GIT binary patch literal 5791 zcmdUxU2I%O6@Uj=N^tp2X!vVkYMPLc?E0r^5;k>yNb5EMCsDj@8mS=N^^U!_-M!b` zd)JPI1nE;zr6N0C*Ky;xPMS2fLE-@+fdq&rK!WmAxI925;Dt9{ka$3q_|Dw%#@@J1 zD})5sp8L(5IWu$S%sF%S_072%#dDZ)x0H7)byk?;#dH3>O6`Nsz&qfN9e)n_SHE=a zSK$X}zvkM1cKjRsAo9OEzTtQ$lXW2fBz!--4}KOF;C6TdZh{TRZ$kdnv%JK#@4)xL zY1h8wxCmK7U5D?1--R;I_g(*w;1jfe3QKS+lSu#5Q1lZh^Pb~{iaHO)&S#<6c>&7$ z^RNl8z$v(wNo3t$L7DHjybiz=%D64O7T`VbBK!#)g^w}$$KfyFC*bSwQ}CaToA1O& zwDWK)e8llUta|}| z4&H!0@Yhi0c>`jC+VqjEeHRq}YS-TB+It-Ppsd^PIN;U}{t1ST0|;gQU7NFU z`ypFWhoG!;0%C$X14VBH%KQoZ9{dJ;8ScQDqW>Ex{l9}>gnxvxkF9KS8r}uo!Rf`lppGnAN$daJ&@+AGuxYOfv@92t%LnmW=LX~c;-GUoX;uUs>FTda2nSl!ervGoq>1ng)OmPykIT?<2d0K*~Cil-mJ(TyZwc;wL*Aqz{-pjeaj z72euBl=OP@V#ZcP7PSn-C$|`=Crnb%r)tKFO%@yaPn>zO$ z(up?d3GP+7J9AXpy4;W)(<^QX<2FRFR@niX|#cW+O=`+?A^bso2TO| zUYz7hkr%`@F9{>Q7hXhW4OYEs07mhTUvdR)}OsBOl5dk*NV+P5RneSNw|Z{M!@oKvCIy;C33-MXl=&fZ%)du$)- z-By3SLe@G+r_9sKJog{yX#H?W7g|4R(#3QtolTe0nRMm9-oIC~*c40MNSFADlupXZ zI&G$}P?pj;{w^z|*KA{6sx#>Y%9ZqDCSSIe&WW}1!yx?Laba_} z1oMkBVlwmDD-sLhx9pCv*Q@j_GqZS4bFnRQh?C-YInQh2W0{55C0Z+};VHQ*t_l{g zmW{0ITt=Ejf5YQ#i!2IvJj4w1GKR(>)G{N3v+z8U0{w0resPR3-X!#fkGr7Nh;ZAgG%<% npprS&RwP7RWl<{YKMmO(f;hW4sAM+-mF3lcB6rr-m(;%j!~cOa literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..73788d5a7 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po @@ -0,0 +1,272 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 534b44a19bf18d20b71ecc4eb77c572f_db336e9 , 2012 +# Jannis Leidel , 2011 +# Meir Kriheli , 2011-2012,2014-2015,2017,2020 +# Yaron Shahrabani , 2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-05-17 12:28+0000\n" +"Last-Translator: Yaron Shahrabani \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#, javascript-format +msgid "Available %s" +msgstr "אפשרויות %s זמינות" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"זו רשימת %s הזמינים לבחירה. ניתן לבחור חלק ע\"י סימון בתיבה מתחת ולחיצה על " +"חץ \"בחר\" בין שתי התיבות." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "ניתן להקליד בתיבה זו כדי לסנן %s." + +msgid "Filter" +msgstr "סינון" + +msgid "Choose all" +msgstr "בחירת הכל" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "בחירת כל ה%s בבת אחת." + +msgid "Choose" +msgstr "בחר" + +msgid "Remove" +msgstr "הסרה" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s אשר נבחרו" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"זו רשימת %s אשר נבחרו. ניתן להסיר חלק ע\"י בחירה בתיבה מתחת ולחיצה על חץ " +"\"הסרה\" בין שתי התיבות." + +msgid "Remove all" +msgstr "הסרת הכל" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "הסרת כל %s אשר נבחרו בבת אחת." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s מ %(cnt)s נבחרות" +msgstr[1] "%(sel)s מ %(cnt)s נבחרות" +msgstr[2] "%(sel)s מ %(cnt)s נבחרות" +msgstr[3] "%(sel)s מ %(cnt)s נבחרות" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"יש לך שינויים שלא נשמרו על שדות יחידות. אם אתה מפעיל פעולה, שינויים שלא " +"נשמרו יאבדו." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"בחרת פעולה, אך לא שמרת עדיין את השינויים לשדות בודדים. נא ללחוץ על אישור כדי " +"לשמור. יהיה עליך להפעיל את הפעולה עוד פעם." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"בחרת פעולה, אך לא ביצעת שינויים בשדות. כנראה חיפשת את כפתור בצע במקום כפתור " +"שמירה." + +msgid "Now" +msgstr "כעת" + +msgid "Midnight" +msgstr "חצות" + +msgid "6 a.m." +msgstr "6 בבוקר" + +msgid "Noon" +msgstr "12 בצהריים" + +msgid "6 p.m." +msgstr "6 אחר הצהריים" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "הערה: את/ה %s שעה לפני זמן השרת." +msgstr[1] "הערה: את/ה %s שעות לפני זמן השרת." +msgstr[2] "הערה: את/ה %s שעות לפני זמן השרת." +msgstr[3] "הערה: את/ה %s שעות לפני זמן השרת." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "הערה: את/ה %s שעה אחרי זמן השרת." +msgstr[1] "הערה: את/ה %s שעות אחרי זמן השרת." +msgstr[2] "הערה: את/ה %s שעות אחרי זמן השרת." +msgstr[3] "הערה: את/ה %s שעות אחרי זמן השרת." + +msgid "Choose a Time" +msgstr "בחירת שעה" + +msgid "Choose a time" +msgstr "בחירת שעה" + +msgid "Cancel" +msgstr "ביטול" + +msgid "Today" +msgstr "היום" + +msgid "Choose a Date" +msgstr "בחירת תאריך" + +msgid "Yesterday" +msgstr "אתמול" + +msgid "Tomorrow" +msgstr "מחר" + +msgid "January" +msgstr "ינואר" + +msgid "February" +msgstr "פברואר" + +msgid "March" +msgstr "מרץ" + +msgid "April" +msgstr "אפריל" + +msgid "May" +msgstr "מאי" + +msgid "June" +msgstr "יוני" + +msgid "July" +msgstr "יולי" + +msgid "August" +msgstr "אוגוסט" + +msgid "September" +msgstr "ספטמבר" + +msgid "October" +msgstr "אוקטובר" + +msgid "November" +msgstr "נובמבר" + +msgid "December" +msgstr "דצמבר" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "ינו׳" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "פבר׳" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "מרץ" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "אפר׳" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "מאי" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "יונ׳" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "יול׳" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "אוג׳" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "ספט׳" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "אוק׳" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "נוב׳" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "דצמ׳" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "ר" + +msgctxt "one letter Monday" +msgid "M" +msgstr "ש" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "ש" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "ר" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "ח" + +msgctxt "one letter Friday" +msgid "F" +msgstr "ש" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "ש" + +msgid "Show" +msgstr "הצג" + +msgid "Hide" +msgstr "הסתר" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8c97bb4df2e48e3c799e309f5c296ef9a6cdd78 GIT binary patch literal 18457 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≺|5e$TE#M~`Qy5RqQEin9~nI%(k%Bt7LNfhBmJH!Z{$o^f0} zHq(H2nMRgzFMW_nKKq;VeLSm>*%aGoJbEz&@rGjHj&x=aMn>ZqiBh14f>4b&ckZ+` zb7m410TB&TIR z!nvS{rfFnWPbi^CS5W0m=Anwt3|a`F9D0^9KZ~0QmzmLEQLH}{?ubDii0b8zSXux= z$4p}!*6Yb)6~Db;EqYz) z?}R+6JWSI;77zg}A(-HsKm3$$7)ex-sU3%!#MtOQI=hTeGIf3x^B8z)9>H*gvTn~7 c5E;#Zd0tuB-<_|lG%}CzebDZG<6aE^16O07RsaA1 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 000000000..8ed2fb96b --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,666 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alkuma , 2013 +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Pratik , 2013 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s सफलतापूर्वक हटा दिया गया है| |" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s नहीं हटा सकते" + +msgid "Are you sure?" +msgstr "क्या आप निश्चित हैं?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "चुने हुए %(verbose_name_plural)s हटा दीजिये " + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "सभी" + +msgid "Yes" +msgstr "हाँ" + +msgid "No" +msgstr "नहीं" + +msgid "Unknown" +msgstr "अनजान" + +msgid "Any date" +msgstr "कोई भी तारीख" + +msgid "Today" +msgstr "आज" + +msgid "Past 7 days" +msgstr "पिछले 7 दिन" + +msgid "This month" +msgstr "इस महीने" + +msgid "This year" +msgstr "इस साल" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"कृपया कर्मचारी खाते का सही %(username)s व कूटशब्द भरें। भरते समय दीर्घाक्षर और लघु अक्षर " +"का खयाल रखें।" + +msgid "Action:" +msgstr " क्रिया:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "एक और %(verbose_name)s जोड़ें " + +msgid "Remove" +msgstr "निकालें" + +msgid "action time" +msgstr "कार्य समय" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "वस्तु आई डी " + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "वस्तु प्रतिनिधित्व" + +msgid "action flag" +msgstr "कार्य ध्वज" + +msgid "change message" +msgstr "परिवर्तन सन्देश" + +msgid "log entry" +msgstr "लॉग प्रविष्टि" + +msgid "log entries" +msgstr "लॉग प्रविष्टियाँ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" को जोड़ा गया." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "परिवर्तित \"%(object)s\" - %(changes)s " + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" को नष्ट कर दिया है." + +msgid "LogEntry Object" +msgstr "LogEntry ऑब्जेक्ट" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "और" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "कोई क्षेत्र नहीं बदला" + +msgid "None" +msgstr "कोई नहीं" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "कार्रवाई हेतु आयटम सही अनुक्रम में चुने जाने चाहिए | कोई आइटम नहीं बदले गये हैं." + +msgid "No action selected." +msgstr "कोई कार्रवाई नहीं चुनी है |" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" को कामयाबी से निकाला गया है" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s बढाएं" + +#, python-format +msgid "Change %s" +msgstr "%s बदलो" + +msgid "Database error" +msgstr "डेटाबेस त्रुटि" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s का परिवर्तन कामयाब हुआ |" +msgstr[1] "%(count)s %(name)s का परिवर्तन कामयाब हुआ |" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s चुने" +msgstr[1] "सभी %(total_count)s चुने " + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s में से 0 चुने" + +#, python-format +msgid "Change history: %s" +msgstr "इतिहास बदलो: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ज्याँगो साइट प्रशासन" + +msgid "Django administration" +msgstr "ज्याँगो प्रशासन" + +msgid "Site administration" +msgstr "साइट प्रशासन" + +msgid "Log in" +msgstr "लॉगिन" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "पृष्ठ लापता" + +msgid "We're sorry, but the requested page could not be found." +msgstr "क्षमा कीजिए पर निवेदित पृष्ठ लापता है ।" + +msgid "Home" +msgstr "गृह" + +msgid "Server error" +msgstr "सर्वर त्रुटि" + +msgid "Server error (500)" +msgstr "सर्वर त्रुटि (500)" + +msgid "Server Error (500)" +msgstr "सर्वर त्रुटि (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"एक त्रुटि मिली है। इसकी जानकारी स्थल के संचालकों को डाक द्वारा दे दी गई है, और यह जल्द " +"ठीक हो जानी चाहिए। धीरज रखने के लिए शुक्रिया।" + +msgid "Run the selected action" +msgstr "चयनित कार्रवाई चलाइये" + +msgid "Go" +msgstr "आगे बढ़े" + +msgid "Click here to select the objects across all pages" +msgstr "सभी पृष्ठों पर मौजूद वस्तुओं को चुनने के लिए यहाँ क्लिक करें " + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "तमाम %(total_count)s %(module_name)s चुनें" + +msgid "Clear selection" +msgstr "चयन खालिज किया जाये " + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"पहले प्रदवोक्ता नाम और कूटशब्द दर्ज करें । उसके पश्चात ही आप अधिक प्रवोक्ता विकल्प बदल " +"सकते हैं ।" + +msgid "Enter a username and password." +msgstr "उपयोगकर्ता का नाम और कूटशब्द दर्ज करें." + +msgid "Change password" +msgstr "कूटशब्द बदलें" + +msgid "Please correct the error below." +msgstr "कृपया नीचे पायी गयी गलतियाँ ठीक करें ।" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s प्रवोक्ता के लिए नयी कूटशब्द दर्ज करें ।" + +msgid "Welcome," +msgstr "आपका स्वागत है," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "दस्तावेज़ीकरण" + +msgid "Log out" +msgstr "लॉग आउट" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s बढाएं" + +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "साइट पे देखें" + +msgid "Filter" +msgstr "छन्नी" + +msgid "Remove from sorting" +msgstr "श्रेणीकरण से हटाये " + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "श्रेणीकरण प्राथमिकता : %(priority_number)s" + +msgid "Toggle sorting" +msgstr "टॉगल श्रेणीकरण" + +msgid "Delete" +msgstr "मिटाएँ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' को मिटाने पर सम्बंधित वस्तुएँ भी मिटा दी " +"जाएगी, परन्तु आप के खाते में निम्नलिखित प्रकार की वस्तुओं को मिटाने की अनुमति नहीं हैं |" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' को हटाने के लिए उनसे संबंधित निम्नलिखित " +"संरक्षित वस्तुओं को हटाने की आवश्यकता होगी:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"क्या आप %(object_name)s \"%(escaped_object)s\" हटाना चाहते हैं? निम्नलिखित सभी " +"संबंधित वस्तुएँ नष्ट की जाएगी" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "हाँ, मैंने पक्का तय किया हैं " + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "अनेक वस्तुएं हटाएँ" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"चयनित %(objects_name)s हटाने पर उस से सम्बंधित वस्तुएं भी हट जाएगी, परन्तु आपके खाते में " +"वस्तुओं के निम्नलिखित प्रकार हटाने की अनुमति नहीं है:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"चयनित %(objects_name)s को हटाने के पश्चात् निम्नलिखित संरक्षित संबंधित वस्तुओं को हटाने " +"की आवश्यकता होगी |" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"क्या आप ने पक्का तय किया हैं की चयनित %(objects_name)s को नष्ट किया जाये ? " +"निम्नलिखित सभी वस्तुएं और उनसे सम्बंधित वस्तुए भी नष्ट की जाएगी:" + +msgid "Change" +msgstr "बदलें" + +msgid "Delete?" +msgstr "मिटाएँ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s द्वारा" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s अनुप्रयोग के प्रतिरूप" + +msgid "Add" +msgstr "बढाएं" + +msgid "You don't have permission to edit anything." +msgstr "आपके पास कुछ भी संपादन करने के लिये अनुमति नहीं है ।" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr " कोई भी उपलब्ध नहीं" + +msgid "Unknown content" +msgstr "अज्ञात सामग्री" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"अपने डेटाबेस स्थापना के साथ कुछ गलत तो है | सुनिश्चित करें कि उचित डेटाबेस तालिका बनायीं " +"गयी है, और सुनिश्चित करें कि डेटाबेस उपयुक्त उपयोक्ता के द्वारा पठनीय है |" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "अपना पासवर्ड या उपयोगकर्ता नाम भूल गये हैं?" + +msgid "Date/time" +msgstr "तिथि / समय" + +msgid "User" +msgstr "उपभोक्ता" + +msgid "Action" +msgstr "कार्य" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"इस वस्तु का बदलाव इतिहास नहीं है. शायद वह इस साइट व्यवस्थापक के माध्यम से नहीं जोड़ा " +"गया है." + +msgid "Show all" +msgstr "सभी दिखाएँ" + +msgid "Save" +msgstr "सुरक्षित कीजिये" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "खोज" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s परिणाम" +msgstr[1] "%(counter)s परिणाम" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s कुल परिणाम" + +msgid "Save as new" +msgstr "नये सा सहेजें" + +msgid "Save and add another" +msgstr "सहेजें और एक और जोडें" + +msgid "Save and continue editing" +msgstr "सहेजें और संपादन करें" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "आज हमारे वेब साइट पर आने के लिए धन्यवाद ।" + +msgid "Log in again" +msgstr "फिर से लॉगिन कीजिए" + +msgid "Password change" +msgstr "कूटशब्द बदलें" + +msgid "Your password was changed." +msgstr "आपके कूटशब्द को बदला गया है" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"सुरक्षा कारणों के लिए कृपया पुराना कूटशब्द दर्ज करें । उसके पश्चात नए कूटशब्द को दो बार दर्ज " +"करें ताकि हम उसे सत्यापित कर सकें ।" + +msgid "Change my password" +msgstr "कूटशब्द बदलें" + +msgid "Password reset" +msgstr "कूटशब्द पुनस्थाप" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "आपके कूटशब्द को स्थापित किया गया है । अब आप लॉगिन कर सकते है ।" + +msgid "Password reset confirmation" +msgstr "कूटशब्द पुष्टि" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "कृपया आपके नये कूटशब्द को दो बार दर्ज करें ताकि हम उसकी सत्याप्ती कर सकते है ।" + +msgid "New password:" +msgstr "नया कूटशब्द " + +msgid "Confirm password:" +msgstr "कूटशब्द पुष्टि कीजिए" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"कूटशब्द पुनस्थाप संपर्क अमान्य है, संभावना है कि उसे उपयोग किया गया है। कृपया फिर से कूटशब्द " +"पुनस्थाप की आवेदन करें ।" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"अगर आपको कोई ईमेल प्राप्त नई होता है,यह ध्यान रखे की आपने सही पता रजिस्ट्रीकृत किया है " +"और आपने स्पॅम फोल्डर को जाचे|" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"आपको यह डाक इसलिए आई है क्योंकि आप ने %(site_name)s पर अपने खाते का कूटशब्द बदलने का " +"अनुरोध किया था |" + +msgid "Please go to the following page and choose a new password:" +msgstr "कृपया निम्नलिखित पृष्ठ पर नया कूटशब्द चुनिये :" + +msgid "Your username, in case you've forgotten:" +msgstr "आपका प्रवोक्ता नाम, यदि भूल गये हों :" + +msgid "Thanks for using our site!" +msgstr "हमारे साइट को उपयोग करने के लिए धन्यवाद ।" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s दल" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"कूटशब्द भूल गए? नीचे अपना डाक पता भरें, वहाँ पर हम आपको नया कूटशब्द रखने के निर्देश भेजेंगे।" + +msgid "Email address:" +msgstr "डाक पता -" + +msgid "Reset my password" +msgstr " मेरे कूटशब्द की पुनःस्थापना" + +msgid "All dates" +msgstr "सभी तिथियों" + +#, python-format +msgid "Select %s" +msgstr "%s चुनें" + +#, python-format +msgid "Select %s to change" +msgstr "%s के बदली के लिए चयन करें" + +msgid "Date:" +msgstr "तिथि:" + +msgid "Time:" +msgstr "समय:" + +msgid "Lookup" +msgstr "लुक अप" + +msgid "Currently:" +msgstr "फ़िलहाल - " + +msgid "Change:" +msgstr "बदलाव -" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb755ad12f284460b42cd95628ab357c43000a67 GIT binary patch literal 4893 zcmdUx+ix7z9ml5yTIv=kv_M->dm1Uk7R=h~mIO8gl^Rl#5@IE$5`F4;=h!=8c8-}D zXJaW+9T0>nY7rtADWobw<3NFs$WkDYz`P*wQ2v2Rs2WujkA3V@rS|hXXZB*p;a0UO zEAM{iobx-s%lCH~|K)}&k9mAcL?D*@FtWWCC0+3z2Nu3Nl^9;C~^I|T0adc*2k;$ zTVQ}+?}H&Y0@)(}JIED02A%;=f#T=RYd!BV-jEckqj?^o^9>L1iv+c$yV<12APr*|{oTlk6}@*x#AMu}UvgbMGQe1%8( zNR4?Lhcg|IWXjB_jl<0(=aCKF%ysy&XPZ?}YuCK{_6JcMOvhSn%)E&pY3kUUXc?2~ z3RIx-sNG-1_B_*xy%0yu$5d`q(_T?Q9J8&0Tp2Xgyov64s@rD2w&#et+kLU^QJm}4 zdoT*Mw<`*hXttGm4;z#4)A9D$yA_BEZ*Pn3saBLJ{_>Vqagm>IK~QsG{RP^vDtONgkOnSn#Gy+lb%Z)WV!5WKxz3e-bs%Gd2M#G#wYw zx_o+%>WnmrI$^dIkkD?aL7EDhd1R71EPo4?K(Z+(1tFPFBo9F{t0~n455j1F6wU`R zwsjn4mYYqfR&%MDrXCkmY>Xv;#-x_zpF#3`o^v@3U|lvbD*W#iPuyAU<6T2Y4Z4@xE3bp&^!kgT8o>TaVMi-l@_S1RinWJRDsrkg2T%QUZ zM!D_9E+;!?th=IafMDzIT1}k@7p7?iljSvUGBx{{0sfBA|AkI7^3qV@KIk_?d-R-1 zbAMMh8-@N)=Vvp2$~4r_LNObn)w)kUr`}Mn3eRJc-_1nkz3_TQNxj&T#NfrmWNgHZskR+7cLz*^^)jfE_ z@+Yxf)}my_+{>M0c0QQZ{*(^d4fUX8LJha_e6BG%+Uay^x#){#^nqH_v`1Y;U5Km8 zqpfIkWN6opT@UnQuh+(gCQOp+1fOVuhRXGUd~_}jqGYS&KFxH#?UAYN{#|`Ju{EPp z|AC}wLgqk2-8CKMJtrHg6%9?s^Jx(K+fCZe8Y-Ey%WT{DR^=YI4JYb{+f;pI>k#AE z&F8Xsqg*;%7Eh?MxWE&G+s*K@I9VJhWYduFkAQLS4S?4m;wL-9Ug zGc5}#vKsg_-T)L7j6gU0RjspLwBnML)4i-v=8_x=k2@|!7g!JG+UD`3ZHHGlvUw9x zQ3O!ZFSw_HGGK$C5rr<16aQS#9d*ToH7j6GU5!bZ3!%VTcPeXaFA{^=u%^N{a0Nr0 zNu82C0T;~W>g|ima8)}*_}^u?SEFZL4Sf!hsm4>DErVr%LX^^4o7;Y=xmHF@O4yaz z<@$P6HLo*1t%6J2gqo1@daW$pwjHo+n*_VAV7en#1`_s{)v$GUQL3w08DY2Tubx|W zHdYg%IB)y+84UEMYPUD3{X5vNihs2h8ktVzGDhg=YQP{(ej$f5H;-sq-c7Eo-{J^~ z?n0Wpx;HBK6h&Ef=4`k2}y>l%qpIMBkG{{sktWZfx$yS zPKS&ep}d*~|67vRvdN5eQ?|=JFN*4gjANV-kB`7L##BlKi}N>9C~Dxpv7YRR=k%Y8jFBvOs9k515vJB5bzt;e4-A+zYh&A43dF z@5nz1h)a*NmU^%iv}mj1|2C1Il)|d1ENP^l7q1MRK7GCS=w+yK>7&|vO=5dqSU)eD T;Bl9Ps{h!uy-V{QhPr, 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "उपलब्ध %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"यह उपलब्ध %s की सूची है. आप उन्हें नीचे दिए गए बॉक्स में से चयन करके कुछ को चुन सकते हैं और " +"उसके बाद दो बॉक्स के बीच \"चुनें\" तीर पर क्लिक करें." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "इस बॉक्स में टाइप करने के लिए नीचे उपलब्ध %s की सूची को फ़िल्टर करें." + +msgid "Filter" +msgstr "छानना" + +msgid "Choose all" +msgstr "सभी चुनें" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "एक ही बार में सभी %s को चुनने के लिए क्लिक करें." + +msgid "Choose" +msgstr "चुनें" + +msgid "Remove" +msgstr "हटाना" + +#, javascript-format +msgid "Chosen %s" +msgstr "चुनें %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"यह उपलब्ध %s की सूची है. आप उन्हें नीचे दिए गए बॉक्स में से चयन करके कुछ को हटा सकते हैं और " +"उसके बाद दो बॉक्स के बीच \"हटायें\" तीर पर क्लिक करें." + +msgid "Remove all" +msgstr "सभी को हटाएँ" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "एक ही बार में सभी %s को हटाने के लिए क्लिक करें." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s में से %(sel)s चुना गया हैं" +msgstr[1] "%(cnt)s में से %(sel)s चुने गए हैं" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में किये हुए बदल अभी रक्षित नहीं हैं | अगर आप कुछ कार्रवाई " +"करते हो तो वे खो जायेंगे |" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"आप ने कार्रवाई तो चुनी हैं, पर स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में किये हुए बदल अभी सुरक्षित " +"नहीं किये हैं| उन्हें सुरक्षित करने के लिए कृपया 'ओके' क्लिक करे | आप को चुनी हुई कार्रवाई " +"दोबारा चलानी होगी |" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"आप ने कार्रवाई चुनी हैं, और आप ने स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में बदल नहीं किये हैं| " +"संभवतः 'सेव' बटन के बजाय आप 'गो' बटन ढून्ढ रहे हो |" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "अब" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "एक समय चुनें" + +msgid "Midnight" +msgstr "मध्यरात्री" + +msgid "6 a.m." +msgstr "सुबह 6 बजे" + +msgid "Noon" +msgstr "दोपहर" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "रद्द करें" + +msgid "Today" +msgstr "आज" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "कल (बीता)" + +msgid "Tomorrow" +msgstr "कल" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "दिखाओ" + +msgid "Hide" +msgstr " छिपाओ" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb87cd149b88045aaa76cecdfdd2a648e68c22a6 GIT binary patch literal 14702 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, 2011,2013 +# Bojan Mihelač , 2012 +# Filip Cuk , 2016 +# Goran Zugelj , 2018 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2013,2015-2016 +# Ylodi , 2015 +# Vedran Linić , 2019 +# Ylodi , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-19 06:44+0000\n" +"Last-Translator: Vedran Linić \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspješno izbrisano %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nije moguće izbrisati %(name)s" + +msgid "Are you sure?" +msgstr "Jeste li sigurni?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Izbrišite odabrane %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Svi" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nepoznat pojam" + +msgid "Any date" +msgstr "Bilo koji datum" + +msgid "Today" +msgstr "Danas" + +msgid "Past 7 days" +msgstr "Prošlih 7 dana" + +msgid "This month" +msgstr "Ovaj mjesec" + +msgid "This year" +msgstr "Ova godina" + +msgid "No date" +msgstr "Nema datuma" + +msgid "Has date" +msgstr "Ima datum" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Molimo unesite ispravno %(username)s i lozinku za pristup. Imajte na umu da " +"oba polja mogu biti velika i mala slova." + +msgid "Action:" +msgstr "Akcija:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj još jedan %(verbose_name)s" + +msgid "Remove" +msgstr "Ukloni" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Promijeni" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "vrijeme akcije" + +msgid "user" +msgstr "korisnik" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr objekta" + +msgid "action flag" +msgstr "oznaka akcije" + +msgid "change message" +msgstr "promijeni poruku" + +msgid "log entry" +msgstr "zapis" + +msgid "log entries" +msgstr "zapisi" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Dodano \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Promijenjeno \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Obrisano \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Log zapis" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "Dodano." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nije bilo promjena polja." + +msgid "None" +msgstr "Nijedan" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Držite \"Control\" ili \"Command\" na Mac-u kako bi odabrali više od jednog " +"objekta. " + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Unosi moraju biti odabrani da bi se nad njima mogle izvršiti akcije. Nijedan " +"unos nije promijenjen." + +msgid "No action selected." +msgstr "Nije odabrana akcija." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" uspješno izbrisan." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Novi unos (%s)" + +#, python-format +msgid "Change %s" +msgstr "Promijeni %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Pogreška u bazi" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s uspješno promijenjen." +msgstr[1] "%(count)s %(name)s uspješno promijenjeno." +msgstr[2] "%(count)s %(name)s uspješno promijenjeno." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s odabrano" +msgstr[1] "Svih %(total_count)s odabrano" +msgstr[2] "Svih %(total_count)s odabrano" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s odabrano" + +#, python-format +msgid "Change history: %s" +msgstr "Promijeni povijest: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Brisanje %(class_name)s %(instance)s bi zahtjevalo i brisanje sljedećih " +"zaštićenih povezanih objekata: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administracija stranica" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija stranica" + +msgid "Log in" +msgstr "Prijavi se" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administracija" + +msgid "Page not found" +msgstr "Stranica nije pronađena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Ispričavamo se, ali tražena stranica nije pronađena." + +msgid "Home" +msgstr "Početna" + +msgid "Server error" +msgstr "Greška na serveru" + +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +msgid "Server Error (500)" +msgstr "Greška na serveru (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Dogodila se greška. Administratori su obaviješteni putem elektroničke pošte " +"te bi greška uskoro trebala biti ispravljena. Hvala na strpljenju." + +msgid "Run the selected action" +msgstr "Izvrši odabranu akciju" + +msgid "Go" +msgstr "Idi" + +msgid "Click here to select the objects across all pages" +msgstr "Klikni ovdje da bi odabrao unose kroz sve stranice" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Odaberi svih %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Očisti odabir" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Prvo, unesite korisničko ime i lozinku. Onda možete promijeniti više " +"postavki korisnika." + +msgid "Enter a username and password." +msgstr "Unesite korisničko ime i lozinku." + +msgid "Change password" +msgstr "Promijeni lozinku" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "Molimo ispravite navedene greške." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Unesite novu lozinku za korisnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "Pogledaj stranicu" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Novi unos - %(name)s" + +msgid "History" +msgstr "Povijest" + +msgid "View on site" +msgstr "Pogledaj na stranicama" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Odstrani iz sortiranja" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritet sortiranja: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Preklopi sortiranje" + +msgid "Delete" +msgstr "Izbriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Brisanje %(object_name)s '%(escaped_object)s' rezultiralo bi brisanjem " +"povezanih objekta, ali vi nemate privilegije za brisanje navedenih objekta: " + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Brisanje %(object_name)s '%(escaped_object)s' bi zahtijevalo i brisanje " +"sljedećih zaštićenih povezanih objekata:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Jeste li sigurni da želite izbrisati %(object_name)s \"%(escaped_object)s\"? " +"Svi navedeni objekti biti će izbrisani:" + +msgid "Objects" +msgstr "Objekti" + +msgid "Yes, I'm sure" +msgstr "Da, siguran sam" + +msgid "No, take me back" +msgstr "Ne, vrati me natrag" + +msgid "Delete multiple objects" +msgstr "Izbriši više unosa." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Brisanje odabranog %(objects_name)s rezultiralo bi brisanjem povezanih " +"objekta, ali vaš korisnički račun nema dozvolu za brisanje sljedeće vrste " +"objekata:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Brisanje odabranog %(objects_name)s će zahtijevati brisanje sljedećih " +"zaštićenih povezanih objekata:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Jeste li sigurni da želite izbrisati odabrane %(objects_name)s ? Svi " +"sljedeći objekti i povezane stavke će biti izbrisani:" + +msgid "View" +msgstr "Prikaz" + +msgid "Delete?" +msgstr "Izbriši?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Po %(filter_title)s " + +msgid "Summary" +msgstr "Sažetak" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeli u aplikaciji %(name)s" + +msgid "Add" +msgstr "Novi unos" + +msgid "You don't have permission to view or edit anything." +msgstr "Nemate dozvole za pregled ili izmjenu." + +msgid "Recent actions" +msgstr "Nedavne promjene" + +msgid "My actions" +msgstr "Moje promjene" + +msgid "None available" +msgstr "Nije dostupno" + +msgid "Unknown content" +msgstr "Sadržaj nepoznat" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nešto nije uredu sa instalacijom/postavkama baze. Provjerite jesu li " +"potrebne tablice u bazi kreirane i provjerite je li baza dostupna korisniku." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Prijavljeni ste kao %(username)s, ali nemate dopuštenje za pristup traženoj " +"stranici. Želite li se prijaviti drugim korisničkim računom?" + +msgid "Forgotten your password or username?" +msgstr "Zaboravili ste lozinku ili korisničko ime?" + +msgid "Date/time" +msgstr "Datum/vrijeme" + +msgid "User" +msgstr "Korisnik" + +msgid "Action" +msgstr "Akcija" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ovaj objekt nema povijest promjena. Moguće je da nije dodan korištenjem ove " +"administracije." + +msgid "Show all" +msgstr "Prikaži sve" + +msgid "Save" +msgstr "Spremi" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Traži" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultat" +msgstr[1] "%(counter)s rezultata" +msgstr[2] "%(counter)s rezultata" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s ukupno" + +msgid "Save as new" +msgstr "Spremi kao novi unos" + +msgid "Save and add another" +msgstr "Spremi i unesi novi unos" + +msgid "Save and continue editing" +msgstr "Spremi i nastavi uređivati" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "Zatvori" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Promijeni označene %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Dodaj još jedan %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Obriši odabrane %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala što ste proveli malo kvalitetnog vremena na stranicama danas." + +msgid "Log in again" +msgstr "Prijavite se ponovo" + +msgid "Password change" +msgstr "Promjena lozinke" + +msgid "Your password was changed." +msgstr "Vaša lozinka je promijenjena." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Molim unesite staru lozinku, zbog sigurnosti, i onda unesite novu lozinku " +"dvaput da bi mogli provjeriti jeste li je ispravno unijeli." + +msgid "Change my password" +msgstr "Promijeni moju lozinku" + +msgid "Password reset" +msgstr "Resetiranje lozinke" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaša lozinka je postavljena. Sada se možete prijaviti." + +msgid "Password reset confirmation" +msgstr "Potvrda promjene lozinke" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Molimo vas da unesete novu lozinku dvaput da bi mogli provjeriti jeste li je " +"ispravno unijeli." + +msgid "New password:" +msgstr "Nova lozinka:" + +msgid "Confirm password:" +msgstr "Potvrdi lozinku:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link za resetiranje lozinke je neispravan, vjerojatno jer je već korišten. " +"Molimo zatražite novo resetiranje lozinke." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Elektroničkom poštom smo vam poslali upute za postavljanje Vaše zaporke, ako " +"postoji korisnički račun s e-mail adresom koju ste unijeli. Uskoro bi ih " +"trebali primiti. " + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ako niste primili e-mail provjerite da li ste ispravno unijeli adresu s " +"kojom ste se registrirali i provjerite spam sandučić." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Primili ste ovu poruku jer ste zatražili postavljanje nove lozinke za svoj " +"korisnički račun na %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Molimo otiđite do sljedeće stranice i odaberite novu lozinku:" + +msgid "Your username, in case you've forgotten:" +msgstr "Vaše korisničko ime, u slučaju da ste zaboravili:" + +msgid "Thanks for using our site!" +msgstr "Hvala šta koristite naše stranice!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s tim" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Zaboravili ste lozinku? Unesite vašu e-mail adresu ispod i poslati ćemo vam " +"upute kako postaviti novu." + +msgid "Email address:" +msgstr "E-mail adresa:" + +msgid "Reset my password" +msgstr "Resetiraj moju lozinku" + +msgid "All dates" +msgstr "Svi datumi" + +#, python-format +msgid "Select %s" +msgstr "Odaberi %s" + +#, python-format +msgid "Select %s to change" +msgstr "Odaberi za promjenu - %s" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Vrijeme:" + +msgid "Lookup" +msgstr "Potraži" + +msgid "Currently:" +msgstr "Trenutno:" + +msgid "Change:" +msgstr "Promijeni:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..e8231f69af4f81310bfafe02a6ae3b0eab02b685 GIT binary patch literal 3360 zcmbtV&5s<#6|cl5f#oY0laTO{7fWk<1>HO2z}k#G7+Bk64Qnsn0m+w0HPf{-HPcqUB1IfPNL(WU2j4&()>0HH|3Y%f1uk$vAR!L?UUiRm02`#x>gr!t z)%*CpSFij1XV=cZ30!}~xF2KpFN9bC-u6p8aJ>gS2z(#-E8r(Jeh$11^RMdp&K=eM zt-#x{zN<#6F$T_I{Rr?D;L||%`5bUB@I@fo|2uFe@NMADz<2BUKY+N!2Y9gD6(HOD z5XkcX1ik_MH}EpBi^ZFOUjW(8*TBQT9av=lM}cnwSAeYdKVS~rgz^6(2cH7hG5;5o zS^q&OvEDvBZUr`hyxs=>8h8SDC-4;TF5q8l%z-TbN{z1p=P`d17y~~Bay*{_K|y?3 z&%deXI}jwtcMFi^?f`P!_u#?)3HT~-0eA^`1;}=e!71ZO;1X~R$odz7F9BZzz7D({ zhxjt^Eg-@c4`AGf@f!@jKqJJ%?+@|=7hHsEH=fMx4h*h^KVa;_;0xx(Z!zxWNqzBo zqg=%A>N)ed2ZQ6_+~Md#4c-m>JqG8MW0+oCS7LsDq0)td>;}#6?-`F*EU2DW$&c_fED-WEHdQ?H!(i%yhS)rrylffuK&HF!+KnV?$( zn-J>*EO!RFAl!bSDAfgAZjhXbG^Vq*q)cv3$rUzJ)ZMHzs7;?$GtwrQ=-PACRjHkj zGzqU5>M{FTj`ma;+e6Yh2z8a8D9EsPKd}ULRm9gNbuHj+Ms+%VCZj4bKgGxY~~6fMmPXU?4*k5y7?4mRe@t-bDY_M#DPw$5lJK2^V*t+L;f~v z0khBJ2ojvU;d79tuTaef3=%!oNhwqKR%ud%-0X9Ta%a1!)lEvR4awiIE@b&>B)Rk+ z%1$Edya=b9|8-_k?ZrP%4MH?at$=32EAAROWa9_qXjA!^)>0)4RaFI@euneL`W15& zzEQA+MW-THR?MoD%#bQgJ^8JDuiaWh2mKb2AAJe7|pLqCugHPr(*G7HiH9 z@tcTNlIR8H3Y<%ek|EM>=gz3yIv=eTeVs&4mHi^>*cQ#Lo$f@-PDwt)i2nvHI?!ky ziW-kb&4bizwjOOf)Hu*+KrlL^#+q$z%N>jwk44SLsJYa7r1?+-*W9zR@KMJ}Q>4;c z*P@fs7?j+z3ZHpON5BTtC(*;i3V$*e`o&Vmmj-#_p^Z!IoPCX?8+ zNxh-Y#XXxXRzXc6t@RfNZgF95b!GMVcKFS>F}G}uR|d536|~5!bAB;Tr8bB8_+6oV z`}xj^=+L$t``S=0I&OM4!LOi2hq~Hd1{_|m~UfX8A z*=V<$w0AG@YvWJtW|NLmgCLFhg$tDmWEu<5X+r0~;W>ei zx(jX=ZK3WE$+ScK-+N0`4omMWw+)-y#3*qL#Z>0(rVyu-vhdPqv2tE^mD5-V=oKZ> zm)Ue3^Rd%Ig$`0n&aBirRE$;7uVN^~GpQaK9ZXS(P2n9v+)ZpUREe=@WV2G`D78U@ zr8FqP)c3^ewz4iqV7q3G-MR?ixYlJN#q+^J4S~^`(<6EHBZM}#G{nEi<|x>tN`fAM zOiZix>PJj20Zp$V0&*Ijjl{im3Ed=-1X-q}97~oEN{1zS6_QGtMjR_|?5Xp!hYIf$ znhj*mXKL$mNy%6SEg92y$%N$K6uwKQPR7rqQzhgl*c_8a7GfQRB1K2%BRLEqT4apF zY9mmRpz5?ztB5;b=sU{xIt4VTtBJ_$gp+WbWixW7ptJM&XRJ zp{f#HCtYX3rOuG07lsPIJn2!ZV1_ef&1W)2@LJk zcc=)mSVLF3fp_>`wW-c*b*}6ez2Us9bfp=hL9ANjg0?R5q35W>F<9ny, 2011 +# Bojan Mihelač , 2012 +# Davor Lučić , 2011 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\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" + +#, javascript-format +msgid "Available %s" +msgstr "Dostupno %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ovo je popis dostupnih %s. Možete dodati pojedine na način da ih izaberete u " +"polju ispod i kliknete \"Izaberi\" strelicu između dva polja. " + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Tipkajte u ovo polje da filtrirate listu dostupnih %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Odaberi sve" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kliknite da odabrete sve %s odjednom." + +msgid "Choose" +msgstr "Izaberi" + +msgid "Remove" +msgstr "Ukloni" + +#, javascript-format +msgid "Chosen %s" +msgstr "Odabrano %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ovo je popis odabranih %s. Možete ukloniti pojedine na način da ih izaberete " +"u polju ispod i kliknete \"Ukloni\" strelicu između dva polja. " + +msgid "Remove all" +msgstr "Ukloni sve" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kliknite da uklonite sve izabrane %s odjednom." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "odabrano %(sel)s od %(cnt)s" +msgstr[1] "odabrano %(sel)s od %(cnt)s" +msgstr[2] "odabrano %(sel)s od %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Neke promjene nisu spremljene na pojedinim polja za uređivanje. Ako " +"pokrenete akciju, nespremljene promjene će biti izgubljene." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Odabrali ste akciju, ali niste još spremili promjene na pojedinim polja. " +"Molimo kliknite OK za spremanje. Morat ćete ponovno pokrenuti akciju." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Odabrali ste akciju, a niste napravili nikakve izmjene na pojedinim poljima. " +"Vjerojatno tražite gumb Idi umjesto gumb Spremi." + +msgid "Now" +msgstr "Sada" + +msgid "Midnight" +msgstr "Ponoć" + +msgid "6 a.m." +msgstr "6 ujutro" + +msgid "Noon" +msgstr "Podne" + +msgid "6 p.m." +msgstr "6 popodne" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Choose a Time" +msgstr "Izaberite vrijeme" + +msgid "Choose a time" +msgstr "Izaberite vrijeme" + +msgid "Cancel" +msgstr "Odustani" + +msgid "Today" +msgstr "Danas" + +msgid "Choose a Date" +msgstr "Odaberite datum" + +msgid "Yesterday" +msgstr "Jučer" + +msgid "Tomorrow" +msgstr "Sutra" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Prikaži" + +msgid "Hide" +msgstr "Sakri" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3569e8c5e3d69d755333229d70ecf5bd2f16b5e8 GIT binary patch literal 17520 zcmc(m3zS_|dB=|kqT!{8h>E&-#3V8^c@P8!LWoHq0TMzc5J77^bMKkC=f2M6oO5%z z11Lr?1*KXM6cdq1h2mS&+EuNoH8bt9Rb0B3tq)eaN^O^wrDCniw$|F;fA4+ny)#Tw zD0cNOcK+wF&)(nu-rwHC-=28n-2uPP(N3j(^{62DC3w>@{KKzuLJ+(NjKPz^w}3AL z?*Xp^KMTGJJns4K`AYCo?ze#FfbR$O{UhLW!0&@cgO7vH27d+~3;x2tKk@~x|1qHG zInCom;ETC`J*aUq@VVd=cs%$vP~*J^d>(j@e}6xCGxraJw}OjKgjVq5pw{zwP~&|A z)OX(o`7e0PI4Sw$5 z{}Nol{c$Hb`cDBh{~}QRmV=_}Tu|%22-N)7fQ!HuC_3H`z5=}8zyDM42JXKDUJq`C z`JV)*!3i*9(GP&%1;xKNGq~il8`L^J2#P#%af}-cE;KkrKLCyEVQyhIOKpq9> zgWJKYz%#*z!6x_!cm%i#;x*sJpy=KRUIAVO9tqwDz6E>$)Hr9n)Qx{5DE-(4>brM= z;_LhT`-i~Ox&I_6etrWK{f~m0_lF>?4t@mc`)8rNlJE0CR4zCb)cnJs*1H0f9M*v9 zf4P4?25R1Mf1iT<7rd2!WGWv7UkN@88t^M%4*n3_0`5SWZwEgOj)J2vck{PF&HHvx z^1d4sy?a5)pdQ!h>lZ1jk6fkI+lVO?|e|>Z315n z?f@YzxC0b_9|Xmh{h;LZ=b*m(I`|pzAHap+-7He`egRwpehU75pb~6?oOF9ADlAivJ%4C9iLJ{CiO2{sHkXbJn&Lb-`xVL{~e&_y${qp4}qflPr&DZ zf8pOh0*W7h18V*!KtvE6v($~Z5)^+f0u5LOr9ZcUb?~_u!CtTp?f_4O=sUm^6g|HJ zMeoro96w$T9>@Lp;0wS@LD6|FsCA5ks8X;86un;taT&qazyy38Wa{AcXS;dc0ZJ|> zuXN*_3TobkpzLlbcmnuNa5uOYd>wcu$}f4`42q81LCv=ZRR0G->Cxvv&3^z?|3^W| z_XnW#|L5R~z<>A8Pk4>HKNXZ5R)FI7CE!WmCQ##ygBrgH%0KM{HSfE@lfnBzOh5P| z@I>%?ASN9A7?eC-crLLNJRhup-vmDZUH}tizkdxH@FbkU^TBgK&3g$bd*2Gm&Jys& z;5+>L2mJF-fv5BQufUVRAA?%wQKN1>F9XG|(?MKqFbt~y6`K$7xV}{~9Pg`wpmnkAu$xe+i1m`z4|sN{dpAZfKPzS z!OCl${67G8x&IQl85~{f^z?R6e&QiebbbqzzCI2<3;Z`wbo>V>J3Mxso9CsV_&5Tp z{~A#1+YD+wlc2tTJ?%c)I1Lurn5Xp>zacKpqTNqhMAPp`8f>uYP`Rmg_t>gD-hF1Ju#l_ocZ>DKI`n}76{g>rgz1NNS@oL&jXwRlKXz!rC zg7#8c@soU~Xqb-ueS&|bEBakd!}RP=@+y9Nx!6JbecJnJH`8vViFbcMdmSyK>4&P@ z-`)Ist-rnl{1okNw2#m}L;DczT$+C3eewH1apCa+@O=Z%7ITf5g5UPfVo*A--%+%W z)848Z|Cr(%xk-5;o^z7o=549JkIOUlFS4P z7l*AD7h$;(H{&c%!#qx!JTBG4EZflx8|t=jaoo)Euvy|p?~-;iw~zh%PMDceC2USc zWs|i_r6|iL+Vy&OWZuqE8XdlOlrnf4W$k)i3^4FW6lnAvuE&monmozFI`0aa;=E!u zt}~C_vUlO)TGU;VJ$B0nO*x6O=3}?qo15qcmOEm$L}?{#WhTyzR#A@XQ6807Gmagv zH+sg45^sVv^}0Fa%Vj2+;BCpWr~gUGGIfoG(O^xPQOafdIa1wCW+7}Qc_m7D*GQlR zcB^Oq>CPw}PqN4hMlWIcjT+}>t@OrZyb75&v(yp)(yreU zkC?vMHM$DcAhmANM!x={6E<^`C!S>nvZ2~dROrp=3l~RODQrdM9R&rauQuW!Y|;l4 zNxhzQ;^rjct}{y+IYf=jbYl99M};`x*;AOk;CGLVLVpi2r6UR5Z7EL{tKi(5l8iM zb~DUO52Xt3n||Ms-q&;011)+l3@q7IWa!`8dK9K6L>|s}6i*ywau#draj9m|+DPi) zo?Gem7+gw|3_dePE1X2B*4EMCU~STzh|@-o2P~vJ+=re@^ljndL6h3is<+cnX6O2?_IOAebKT0$ z%M?03g88`*rP+t^rKXd#>t)pL`gRQW%372@nQa=aG|8>+>FK9mCc3oP+l{v`3CxmI zj560E7d_b`7d=xdp23WA@g{EeS6;XQzrrCi-p=KA(7=*)^v;7X%1tHQ8JSj;HsUNp z3+H&EzGKO|ttgYfDVR2!+yNEw9SZ053}y3lr}=+m1vb2{O7u?VrUCwGhEsO0f^|u$ z-M~a$ny|hR#&zD53B}oHu)fjCyTSS<8HNc>GwSqA+xjMHbvxtTh2$AYbMm5vi*@UQ z;Dt;5!;#(q#Y^j;3&%JTTw+rg52hLJj3+HME_Cob&GI1wjh2e}2Qk|!QFBO&MK0h% zO*oGKz<)($Qh`Q-Ia*qimSSYav`IRdR8ZYaJt1Ds}I#_wQ)?biX06xjUYz= z9I{L7M2;BOK^a%twkbnq*_TDRbqN@^tNQBxajRpZvxe!JZnoVJ8XuxgTh37bb-ZH_41dqFM!Uq0w;u5DcDn&82M;}Y+ zkiqlHQ#Zm|)JqRo3Vo~;@UjxUR}(u{8cjkj5u;3~&ns^IrAkB`u{_FJVMED5IZ8)@ zjW#7{w6k0(LC;`u8w5^-jL`4{M85`3!b(d^W6H*e*_`-{!n%v`2=TelRvrniNG9<; z9!xkH`kSPk>medbyXH!pP;sBs+O1%dk}{G-J3QXk=bGfu#6V{go4N%R!R7%A7!5Wj z{O8~GRxzSyR(_xhqdltJq*k?N zxuv`lmr$w1bo6P{kPE~UU8|ys8%jqdY)`2Q8qbD-0cCH6HyHAkT56|p-o*wolOaH- z->eyvv3}_{NC{pW0}wy^F;7{RzQJ zaN9_BMjp&Wnl#{1D(}NHl*SBZu3OvA8hVE5MhV6U(Dolo3DytV;->!)Wn<7bnuOEU z==#QX-x)_8f0rqe1Y=~Or3#=jOgVJ#O3QaPJ^Ps(!u40`Ik#xDC04uMtEI-G6!Dw& z$~Vo0QRAY;=PX;c<<7m87HmHW=%LO8lEIrpIuidBt)Xeds9k zS+D0@9mekxU0Y(;se*_%BlzXQnM$-cm^5jnF^*o|!hHbLNo@u^TNu6H!sjd7LZ!B`%qID&4ArAY{`K9D+% z4eS9FH5@~@N?kd(t@4%-Rma+dqqG}rBjnV4oNGnRvWCpyo4LLn)}g>C_jg>=ayrqt zu~|u;;G9MVKW|H?jWR}cIE`1TOTD8msvWl(Fi`N%*|u;WX@DXd%%iYj$0|%6Hp&v} zakFN34&vrcD24egYMpqzE_YN4;ir5^g(w}?#dtl&4e-1?VvP4DDgYu}?VO~^&Y;Cb zbLu+P_jXdO3MVyt%jM~HH`h|r%XtnMXfd13O`h)jy#Z|^#oBFPErP&di1Tszsjp_< z4|>!8uhw(;ArG~pREeA79D-F=Bo8uTHs<}OY1G1`ln6OjZFP5G&n-zavoj7|LS-Fb zRnTF-ERElg5TO`) zGLB2=N~v6y=QK++;kx|(ptUGJPZxh2Y{Mu=gKe@w{+*m8gYM_!#gig(T-~fSNlOEd z$~4HP^WbV+PH>It4)KSZMK+3T{WArq5>AYWgG+U-MaRFQ&ca+kDgJR9L< z-PdZj%!#qcndwO=^`Z=}jWV?%vyt`ioSn5mABC(fY}1$MNLC4*xR1ds$*o!4v^;gi zO;6De^@2c(F()~=j1Xz{n4m(RdNQdLmd>UePfU=9+u(2g^J+^%k?hY?Wh<_# zn6TCmHoG>ojo7c`N9HvWR<#If9UE-8kWx9G6>d@l_C*->aw_j=wYx}&g1ijRsVr~_$Xhqj?2Xr z-Xsk~Nw6hNwBI|tu{?ZDlxiPj)Rb*0zhJ9%Im4T>$+$fH+V*5Nye%0u3$|Q2yfxYx ztLyMObZgYCShiyM@UruVSDa^-pEtVvHD@j3x8Mp=|KV+E*v!aCl62H;ilIEJqfPY* zb73Q{w_C}@Sm5{+d$r+6Il72%nv-o7HN1^rIclzMQI;8UiSZc2SzO8U*67luola+j z%!mwqBD!G&gI?+gE}-rQSz5`)mo8bbY2&8#{k1J0S+-!U^Bcq4;Ml0iqZ{(2tva>a z1#)aDa$a@ywo8W3>-W=S==kvZW+_o(F>1~mkMkb2qlTFlY_S`E!&Lc=Y}7Q}K47+L zh3D8({$$f zAgRv(365;O59;x}-49Jr((7*zbReNVy{B9&RyFHkSe^HAJnz$_!{hl*g~~~V@`b#M z_dW@na>qjV^^S%18kiQkx-{Sj%sP(*+)h0 zc_i}ZeQ}8AUCNtfX38L8dwk@F=joc7)WZYS+swUjIh@|jIDSQ~-jmGquGgjQO3Y~f z+@Sx$eP5m4t?)tNJ9`V9#NMsHcdB$>|5RzOA4RI=dOdavd~_a4N%dd{H&3pj+0(}< z(kzV+w$JRF-sApNiP8-=Pw%OP)mp5(c7s!jQY1P%6hC37JoEXdcE;qS#+R#&oxxZ& zOFALNzW9^P>}q2v7)scRGiF1(t)Qc7sDqU!P3lDotK3qHlcmE=q@Fb@m(Wykoljxj zF}u>~Jz3tBvU%B}nq~Gt3IeBhj|A6Q^Ogc+-qg9a4_Ttm>rfbb)U=5J!PyKeW`yFq z4Rh|dTTK>k3uWnbE#?|6w4yj|nhJ|D0Tme35cjDxq<1o9A5|mmC>}yoP<~^Y$Dk!PLlA64Q(uq_a4%S==Jy z>w5J>AA8*C6X%?c{%S)jDCM)Ajw9!3a$oMPxA>z+`-epQ&Lcq zb;~om!s6XJHstL|l#Pw+hZ|9qla!Es47N>J=9cu}{;4wI`MR)0f!Ysug)}{WAw_6fB2zDb?U7P15ubg0Mv#7XgwKaF?Bqy*2qi{<@$a0K#!)adVe4 z72+&+t)8d9e`5wH*BNyU!)I7ZUC(t&R&gCLt%LhB=B-C;5qCJman-dF7_mf~V~$>z zdsGs~MqbR^8%_BEAzfRG!6wR6n+9yKXIsjF){z3FGY7OX++8V8IosN6v@YE?IM*VX zv!_~k`k7q^_fOv$HQ6H=hzK2AGa(VbZzO@H3k8Z-c2?<-4H6;VwH|wtYHj6+Wfqr* z5+((pC~l?gPTQ&$J18^z3O+C&rk|%#Rc^+Lf#~ZFy`&5?yQDvLwqfnJW&DD~1UGc> zMTp@lt%jW9g|%=bSckJE9QAd|2d`Pn3O$eIZDQ8csYc8^BH7s#2lA^(NQs0^1C+aO zAs3peMjeH}>&OMI7RXTC_P&ff!Av2&wflGH;-v&$g(80I^6cQEql z-HHFK_?kc+XRTx^M(g5Wa}_apU*Oi!MbhlTv)c+!Y_3lLh0}PKA`5Ul8psOVL^_MA zid)-#mcW8pzI&;6))MV9Lmbb{tx8#017~Q>Dm4oAy0nDNK$Hn%m4T`Pg7qa593>e@ zT(7CVcdL?2)tE@{e!&ah58fiQ501C@t-Jn2uJEuKUkzC+PCy&FC9 z=9{+?9+fe3&IpOcb3b=+pwrIz)5BQlJjo>HXeSA6aU=POanx99#dyS}B7Y#`pmLIg z2%LR=Q#CF37MABfG~9yEkh}2$bVZsi@Zbn>QR-dnaSfaldZx_Uv-0H&drH?;l^N!qfvlKlX*u*Bf5okt4J z`fauUw7Q#3{j}Dlls3DKi%o^Xt2|vY2F9%(-0%LfkbLz?$?;QKT(K+h6p83{A0Wc# z%g<{oDa1X8mQ=7B;aNWLzvzp{~}Lr zYke;92jd6#r&Cg$UP!SyL|9|vlt`}Z5@ur*WSZz$%HKtG60T75b}o64duCy&xO1hs zE0FCflTN$0fz{@3efkMnm7wx3{P}{y%zzK`v-lU#KyIVGNq-?_%EAg>!BtZ1?fd9LsOow7&G^r5 z8QCdzAJ!q$k4)7%U0-3jB8&pX zMU1p<3jx&t*mqGL;^e%ivbhc(j#38iA?IIJnd5dU5UoonmGKqTopL5u-VN-LZ|8pt zDD(nGdcAN3lBnCj_B{>9gs#a4D@MV@F?pV<;{D)(rU^Sb3yvpZr9CRxls#zQMBOD% z=`qV;dk=?gnSy#0JGC~#Qza-NkvG<2tP?M4nbpDOVl2B2)AXUXkd3V%`#!?*_el<_ zjkg^1B(~SOeo5$PE5yOhly}B93?Yp9{j3berJ_Y-)$W1cI3h=wbHJ&}C!<^^DA^q* zpSq&5Fu{r2Wd(imS!9|_-wE;4yD?|=!z_@1`06XXd50_f4iVN(Hb|k}2Jy;cS4fub z_6s=wL0jX|64vkxBG=)wne+q+w^5DM#S$yVJ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 000000000..efbbd58a5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,728 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-09-28 18:16+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Wubrane %(verbose_name_plural)s zhašeć" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s je so wuspěšnje zhašało." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s njeda so zhašeć." + +msgid "Are you sure?" +msgstr "Sće wěsty?" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Wšě" + +msgid "Yes" +msgstr "Haj" + +msgid "No" +msgstr "Ně" + +msgid "Unknown" +msgstr "Njeznaty" + +msgid "Any date" +msgstr "Někajki datum" + +msgid "Today" +msgstr "Dźensa" + +msgid "Past 7 days" +msgstr "Zańdźene 7 dnjow" + +msgid "This month" +msgstr "Tutón měsac" + +msgid "This year" +msgstr "Lětsa" + +msgid "No date" +msgstr "Žadyn datum" + +msgid "Has date" +msgstr "Ma datum" + +msgid "Empty" +msgstr "Prózdny" + +msgid "Not empty" +msgstr "Njeprózdny" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Prošu zapodajće korektne %(username)s a hesło za personalne konto. Dźiwajće " +"na to, zo wobě poli móžetej mjez wulko- a małopisanjom rozeznawać." + +msgid "Action:" +msgstr "Akcija:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Přidajće nowe %(verbose_name)s" + +msgid "Remove" +msgstr "Wotstronić" + +msgid "Addition" +msgstr "Přidaće" + +msgid "Change" +msgstr "Změnić" + +msgid "Deletion" +msgstr "Zhašenje" + +msgid "action time" +msgstr "akciski čas" + +msgid "user" +msgstr "wužiwar" + +msgid "content type" +msgstr "wobsahowy typ" + +msgid "object id" +msgstr "objektowy id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objektowa reprezentacija" + +msgid "action flag" +msgstr "akciske markěrowanje" + +msgid "change message" +msgstr "změnowa powěsć" + +msgid "log entry" +msgstr "protokolowy zapisk" + +msgid "log entries" +msgstr "protokolowe zapiski" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Je so „%(object)s“ přidał." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Je so „%(object)s“ změnił - %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Je so „%(object)s“ zhašał." + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Je so {name} „{object}“ přidał." + +msgid "Added." +msgstr "Přidaty." + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Je so {fields} za {name} „{object}“ změnił." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} změnjene." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Je so {name} „{object}“ zhašał." + +msgid "No fields changed." +msgstr "Žane pola změnjene." + +msgid "None" +msgstr "Žadyn" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Dźeržće „ctrl“ abo „cmd“ na Mac stłóčeny, zo byšće wjace hač jedyn wubrał." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}“ je so wuspěšnje přidał." + +msgid "You may edit it again below." +msgstr "Móžeće deleka unowa wobdźěłać." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} „{obj}“ je so wuspěšnje přidał. Móžeće deleka dalši {name} přidać." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} „{obj}“ je so wuspěšnje změnił. Móžeće jón deleka wobdźěłować." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} „{obj}“ je so wuspěšnje přidał. Móžeće jón deleka wobdźěłować." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} „{obj}“ je so wuspěšnje změnił. Móžeće deleka dalši {name} přidać." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}“ je so wuspěšnje změnił." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Dyrbiće zapiski wubrać, zo byšće akcije z nimi wuwjesć. Zapiski njejsu so " +"změnili." + +msgid "No action selected." +msgstr "žana akcija wubrana." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s“ je so wuspěšnje zhašał." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s z ID „%(key)s“ njeeksistuje. Je so snano zhašało?" + +#, python-format +msgid "Add %s" +msgstr "%s přidać" + +#, python-format +msgid "Change %s" +msgstr "%s změnić" + +#, python-format +msgid "View %s" +msgstr "%s pokazać" + +msgid "Database error" +msgstr "Zmylk datoweje banki" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s je so wuspěšnje změnił." +msgstr[1] "%(count)s %(name)s stej so wuspěšnje změniłoj." +msgstr[2] "%(count)s %(name)s su so wuspěšnje změnili." +msgstr[3] "%(count)s %(name)s je so wuspěšnje změniło." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s wubrany" +msgstr[1] "%(total_count)s wubranej" +msgstr[2] "%(total_count)s wubrane" +msgstr[3] "%(total_count)s wubranych" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 z %(cnt)s wubranych" + +#, python-format +msgid "Change history: %s" +msgstr "Změnowa historija: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Zo bychu so %(class_name)s %(instance)s zhašeli, dyrbja so slědowace škitane " +"přisłušne objekty zhašeć: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administrator sydła Django" + +msgid "Django administration" +msgstr "Administracija Django" + +msgid "Site administration" +msgstr "Sydłowa administracija" + +msgid "Log in" +msgstr "Přizjewić" + +#, python-format +msgid "%(app)s administration" +msgstr "Administracija %(app)s" + +msgid "Page not found" +msgstr "Strona njeje so namakała" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Je nam žel, ale požadana strona njeda so namakać." + +msgid "Home" +msgstr "Startowa strona" + +msgid "Server error" +msgstr "Serwerowy zmylk" + +msgid "Server error (500)" +msgstr "Serwerowy zmylk (500)" + +msgid "Server Error (500)" +msgstr "Serwerowy zmylk (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Zmylk je wustupił. Je so sydłowym administratoram přez e-mejl zdźělił a " +"dyrbjał so bórze wotstronić. Dźakujemy so za wašu sćerpliwosć." + +msgid "Run the selected action" +msgstr "Wubranu akciju wuwjesć" + +msgid "Go" +msgstr "Start" + +msgid "Click here to select the objects across all pages" +msgstr "Klikńće tu, zo byšće objekty wšěch stronow wubrać" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Wubjerće wšě %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Wuběr wotstronić" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele w nałoženju %(name)s" + +msgid "Add" +msgstr "Přidać" + +msgid "View" +msgstr "Pokazać" + +msgid "You don’t have permission to view or edit anything." +msgstr "Nimaće prawo něšto pokazać abo wobdźěłać." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Zapodajće najprjedy wužiwarske mjeno a hesło. Potom móžeće dalše wužiwarske " +"nastajenja wobdźěłować." + +msgid "Enter a username and password." +msgstr "Zapodajće wužiwarske mjeno a hesło." + +msgid "Change password" +msgstr "Hesło změnić" + +msgid "Please correct the error below." +msgstr "Prošu porjedźće slědowacy zmylk." + +msgid "Please correct the errors below." +msgstr "Prošu porjedźće slědowace zmylki." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Zapodajće nowe hesło za %(username)s." + +msgid "Welcome," +msgstr "Witajće," + +msgid "View site" +msgstr "Sydło pokazać" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Wotzjewić" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s přidać" + +msgid "History" +msgstr "Historija" + +msgid "View on site" +msgstr "Na sydle pokazać" + +msgid "Filter" +msgstr "Filtrować" + +msgid "Clear all filters" +msgstr "Wšě filtry zhašeć" + +msgid "Remove from sorting" +msgstr "Ze sortěrowanja wotstronić" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sortěrowanski porjad: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sortěrowanje přepinać" + +msgid "Delete" +msgstr "Zhašeć" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Hdyž so %(object_name)s '%(escaped_object)s' zhašeja, so tež přisłušne " +"objekty zhašeja, ale waše konto nima prawo slědowace typy objektow zhašeć:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Zo by so %(object_name)s '%(escaped_object)s' zhašało, dyrbja so slědowace " +"přisłušne objekty zhašeć:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Chceće woprawdźe %(object_name)s \"%(escaped_object)s\" zhašeć? Wšě " +"slědowace přisłušne zapiski so zhašeja:" + +msgid "Objects" +msgstr "Objekty" + +msgid "Yes, I’m sure" +msgstr "Haj, sym sej wěsty" + +msgid "No, take me back" +msgstr "Ně, prošu wróćo" + +msgid "Delete multiple objects" +msgstr "Wjacore objekty zhašeć" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Hdyž so wubrany %(objects_name)s zhaša, so přisłušne objekty zhašeja, ale " +"waše konto nima prawo slědowace typy objektow zhašeć: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Hdyž so wubrany %(objects_name)s zhaša, so slědowace škitane přisłušne " +"objekty zhašeja:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Chceće woprawdźe wubrane %(objects_name)s zhašeć? Wšě slědowace objekty a " +"jich přisłušne zapiski so zhašeja:" + +msgid "Delete?" +msgstr "Zhašeć?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Po %(filter_title)s " + +msgid "Summary" +msgstr "Zjeće" + +msgid "Recent actions" +msgstr "Najnowše akcije" + +msgid "My actions" +msgstr "Moje akcije" + +msgid "None available" +msgstr "Žadyn k dispoziciji" + +msgid "Unknown content" +msgstr "Njeznaty wobsah" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Něšto je so z instalaciju datoweje banki nimokuliło. Zawěsćće, zo wotpowědne " +"tabele datoweje banki su so wutworili, a, zo datowa banka da so wot " +"wotpowědneho wužiwarja čitać." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Sće jako %(username)s awtentifikowany, ale nimaće přistup na tutu stronu. " +"Chceće so pola druheho konta přizjewić?" + +msgid "Forgotten your password or username?" +msgstr "Sće swoje hesło abo wužiwarske mjeno zabył?" + +msgid "Toggle navigation" +msgstr "Nawigaciju přepinać" + +msgid "Start typing to filter…" +msgstr "Pisajće, zo byšće filtrował …" + +msgid "Filter navigation items" +msgstr "Nawigaciske zapiski fitrować" + +msgid "Date/time" +msgstr "Datum/čas" + +msgid "User" +msgstr "Wužiwar" + +msgid "Action" +msgstr "Akcija" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Tutón objekt nima změnowu historiju. Njeje so najskerje přez tute " +"administratorowe sydło přidał." + +msgid "Show all" +msgstr "Wšě pokazać" + +msgid "Save" +msgstr "Składować" + +msgid "Popup closing…" +msgstr "Wuskakowace wokno so začinja…" + +msgid "Search" +msgstr "Pytać" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s wuslědk" +msgstr[1] "%(counter)s wuslědkaj" +msgstr[2] "%(counter)s wuslědki" +msgstr[3] "%(counter)s wuslědkow" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s dohromady" + +msgid "Save as new" +msgstr "Jako nowy składować" + +msgid "Save and add another" +msgstr "Skłaodwac a druhi přidać" + +msgid "Save and continue editing" +msgstr "Składować a dale wobdźěłować" + +msgid "Save and view" +msgstr "Składować a pokazać" + +msgid "Close" +msgstr "Začinić" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Wubrane %(model)s změnić" + +#, python-format +msgid "Add another %(model)s" +msgstr "Druhi %(model)s přidać" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Wubrane %(model)s zhašeć" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" +"Wulki dźak, zo sće sej čas brał, zo byšće kwalitu websydła dźensa " +"přepruwował." + +msgid "Log in again" +msgstr "Znowa přizjewić" + +msgid "Password change" +msgstr "Hesło změnić" + +msgid "Your password was changed." +msgstr "Waše hesło je so změniło." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Prošu zapodajće swoje stare hesło k swojemu škitej a potom swoje nowe hesło " +"dwójce, zo bychmy móhli přepruwować, hač sće jo korektnje zapodał." + +msgid "Change my password" +msgstr "Moje hesło změnić" + +msgid "Password reset" +msgstr "Hesło wróćo stajić" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Waše hesło je so nastajiło. Móžeće pokročować a so nětko přizjewić." + +msgid "Password reset confirmation" +msgstr "Wobkrućenje wróćostajenja hesła" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Prošu zapodajće swoje hesło dwójce, zo bychmy móhli přepruwować, hač sće jo " +"korektnje zapodał." + +msgid "New password:" +msgstr "Nowe hesło:" + +msgid "Confirm password:" +msgstr "Hesło wobkrućić:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Wotkaz za wróćostajenje hesła bě njepłaćiwy, snano dokelž je so hižo wužił. " +"Prošu prošće wo nowe wróćostajenje hesła." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Smy wam e-mejlku z instrukcijemi wo nastajenju wašeho hesła pósłali, jeli " +"konto ze zapodatej e-mejlowej adresu eksistuje. Wy dyrbjał ju bórze dóstać." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jeli e-mejlku njedóstawaće, přepruwujće prošu adresu, z kotrejž sće so " +"zregistrował a hladajće do swojeho spamoweho rjadowaka." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Dóstawaće tutu e-mejlku, dokelž sće wo wróćostajenje hesła za swoje " +"wužiwarske konto na at %(site_name)s prosył." + +msgid "Please go to the following page and choose a new password:" +msgstr "Prošu dźiće k slědowacej stronje a wubjerće nowe hesło:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Waše wužiwarske mjeno, jeli sće jo zabył:" + +msgid "Thanks for using our site!" +msgstr "Wulki dźak za wužiwanje našeho sydła!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Team %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Sće swoje hesło zabył? Zapodajće deleka swoju e-mejlowu adresu a pósćelemy " +"wam instrukcije za postajenje noweho hesła přez e-mejl." + +msgid "Email address:" +msgstr "E-mejlowa adresa:" + +msgid "Reset my password" +msgstr "Moje hesło wróćo stajić" + +msgid "All dates" +msgstr "Wšě daty" + +#, python-format +msgid "Select %s" +msgstr "%s wubrać" + +#, python-format +msgid "Select %s to change" +msgstr "%s wubrać, zo by so změniło" + +#, python-format +msgid "Select %s to view" +msgstr "%s wubrać, kotryž ma so pokazać" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Čas:" + +msgid "Lookup" +msgstr "Pytanje" + +msgid "Currently:" +msgstr "Tuchylu:" + +msgid "Change:" +msgstr "Změnić:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..562a4d4b002fc153d4746a22326636c9bae1eb85 GIT binary patch literal 5681 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 S#mb5uby?>{jSnI#N9=!@Jfe{R literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..9408a8c83 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po @@ -0,0 +1,274 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-02-01 21:45+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s k dispoziciji" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"To je lisćina k dispoziciji stejacych %s. Móžeće někotre z nich w slědowacym " +"kašćiku wubrać a potom na šipk „Wubrać“ mjez kašćikomaj kliknyć." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Zapisajće do tutoho kašćika, zo byšće někotre z lisćiny k dispoziciji " +"stejacych %s wufiltrował." + +msgid "Filter" +msgstr "Filtrować" + +msgid "Choose all" +msgstr "Wšě wubrać" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikńće, zo byšće wšě %s naraz wubrał." + +msgid "Choose" +msgstr "Wubrać" + +msgid "Remove" +msgstr "Wotstronić" + +#, javascript-format +msgid "Chosen %s" +msgstr "Wubrane %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"To je lisćina wubranych %s. Móžeće někotre z nich wotstronić, hdyž je w " +"slědowacym kašćiku wuběraće a potom na šipk „Wotstronić“ mjez kašćikomaj " +"kliknjeće." + +msgid "Remove all" +msgstr "Wšě wotstronić" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikńće, zo byšće wšě wubrane %s naraz wotstronił." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s z %(cnt)s wubrany" +msgstr[1] "%(sel)s z %(cnt)s wubranej" +msgstr[2] "%(sel)s z %(cnt)s wubrane" +msgstr[3] "%(sel)s z %(cnt)s wubranych" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Maće njeskładowane změny za jednotliwe wobdźěłujomne pola. Jeli akciju " +"wuwjedźeće, so waše njeskładowane změny zhubja." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Sće akciju wubrał, ale njejsće hišće swoje změny na jednoliwych polach " +"składował. Prošu klikńće na „W porjadku, zo byšće składował. Dyrbiće akciju " +"znowa wuwjesć." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Sće akciju wubrał, a njejsće žane změny na jednotliwych polach přewjedł. " +"Pytajće najskerje za tłóčatkom „Pósłać“ město tłóčatka „Składować“." + +msgid "Now" +msgstr "Nětko" + +msgid "Midnight" +msgstr "Połnóc" + +msgid "6 a.m." +msgstr "6:00 hodź. dopołdnja" + +msgid "Noon" +msgstr "připołdnjo" + +msgid "6 p.m." +msgstr "6 hodź. popołdnju" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Kedźbu: Waš čas je wo %s hodźinu před serwerowym časom." +msgstr[1] "Kedźbu: Waš čas je wo %s hodźin před serwerowym časom." +msgstr[2] "Kedźbu: Waš čas je wo %s hodźiny před serwerowym časom." +msgstr[3] "Kedźbu: Waš čas je wo %s hodźin před serwerowym časom." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Kedźbu: Waš čas je wo %s hodźinu za serwerowym časom." +msgstr[1] "Kedźbu: Waš čas je wo %s hodźinje za serwerowym časom." +msgstr[2] "Kedźbu: Waš čas je wo %s hodźiny za serwerowym časom." +msgstr[3] "Kedźbu: Waš čas je wo %s hodźin za serwerowym časom." + +msgid "Choose a Time" +msgstr "Wubjerće čas" + +msgid "Choose a time" +msgstr "Wubjerće čas" + +msgid "Cancel" +msgstr "Přetorhnyć" + +msgid "Today" +msgstr "Dźensa" + +msgid "Choose a Date" +msgstr "Wubjerće datum" + +msgid "Yesterday" +msgstr "Wčera" + +msgid "Tomorrow" +msgstr "Jutře" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Měrc" + +msgid "April" +msgstr "Apryl" + +msgid "May" +msgstr "Meja" + +msgid "June" +msgstr "Junij" + +msgid "July" +msgstr "Julij" + +msgid "August" +msgstr "Awgust" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "Nowember" + +msgid "December" +msgstr "December" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan." + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb." + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Měr." + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr." + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Meja" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun." + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul." + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Awg." + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep." + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt." + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Now." + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dec." + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Nj" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Pó" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Wu" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Sr" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Št" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pj" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "So" + +msgid "Show" +msgstr "Pokazać" + +msgid "Hide" +msgstr "Schować" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..972ab3dee7d83060a432e59e38d80e88e7ca6262 GIT binary patch literal 17427 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 s-T~I7zbG5oh?mOB?uz|7-#Gs, 2015 +# Akos Zsolt Hochrein , 2018 +# András Veres-Szentkirályi, 2016,2018-2020 +# Istvan Farkas , 2019 +# Jannis Leidel , 2011 +# János R, 2017 +# János R, 2014 +# Kristóf Gruber <>, 2012 +# slink , 2011 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-20 07:29+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s sikeresen törölve lett." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s törlése nem sikerült" + +msgid "Are you sure?" +msgstr "Biztos benne?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Kiválasztott %(verbose_name_plural)s törlése" + +msgid "Administration" +msgstr "Adminisztráció" + +msgid "All" +msgstr "Mind" + +msgid "Yes" +msgstr "Igen" + +msgid "No" +msgstr "Nem" + +msgid "Unknown" +msgstr "Ismeretlen" + +msgid "Any date" +msgstr "Bármely dátum" + +msgid "Today" +msgstr "Ma" + +msgid "Past 7 days" +msgstr "Utolsó 7 nap" + +msgid "This month" +msgstr "Ez a hónap" + +msgid "This year" +msgstr "Ez az év" + +msgid "No date" +msgstr "Nincs dátuma" + +msgid "Has date" +msgstr "Van dátuma" + +msgid "Empty" +msgstr "Üres" + +msgid "Not empty" +msgstr "Nem üres" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Adja meg egy adminisztrációra jogosult %(username)s és jelszavát. Vegye " +"figyelembe, hogy mindkét mező megkülönböztetheti a kis- és nagybetűket." + +msgid "Action:" +msgstr "Művelet:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Újabb %(verbose_name)s hozzáadása" + +msgid "Remove" +msgstr "Törlés" + +msgid "Addition" +msgstr "Hozzáadás" + +msgid "Change" +msgstr "Módosítás" + +msgid "Deletion" +msgstr "Törlés" + +msgid "action time" +msgstr "művelet időpontja" + +msgid "user" +msgstr "felhasználó" + +msgid "content type" +msgstr "tartalom típusa" + +msgid "object id" +msgstr "objektum id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objektum repr" + +msgid "action flag" +msgstr "művelet jelölés" + +msgid "change message" +msgstr "üzenet módosítása" + +msgid "log entry" +msgstr "naplóbejegyzés" + +msgid "log entries" +msgstr "naplóbejegyzések" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\" hozzáadva." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "\"%(object)s\" módosítva — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" törölve." + +msgid "LogEntry Object" +msgstr "Naplóbejegyzés objektum" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "\"{object}\" {name} hozzáadva." + +msgid "Added." +msgstr "Hozzáadva." + +msgid "and" +msgstr "és" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "\"{object}\" {name} {fields} módosítva." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} módosítva." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "\"{object}\" {name} törölve." + +msgid "No fields changed." +msgstr "Egy mező sem változott." + +msgid "None" +msgstr "Egyik sem" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Több elem kiválasztásához tartsa nyomva a \"Control\" gombot, vagy Mac " +"gépeken a \"Command\" gombot." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "A(z) \"{obj}\" {name} sikeresen hozzáadva." + +msgid "You may edit it again below." +msgstr "Alább ismét szerkesztheti." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"A(z) \"{obj}\" {name} sikeresen hozzáadva. Alább hozzadhat egy új {name} " +"rekordot." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "A(z) \"{obj}\" {name} sikeresen módosítva. Alább újra szerkesztheti." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "A(z) \"{obj}\" {name} sikeresen hozzáadva. Alább újra szerkesztheti." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"A(z) \"{obj}\" {name} sikeresen módosítva. Alább hozzáadhat egy új {name} " +"rekordot." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "A(z) \"{obj}\" {name} sikeresen módosítva." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"A műveletek végrehajtásához ki kell választani legalább egy elemet. Semmi " +"sem lett módosítva." + +msgid "No action selected." +msgstr "Nem választott ki műveletet." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "A(z) \"%(obj)s\" %(name)s törölve lett." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"A(z) \"%(key)s\" azonosítójú %(name)s nem létezik. Esetleg törölve lett?" + +#, python-format +msgid "Add %s" +msgstr "Új %s" + +#, python-format +msgid "Change %s" +msgstr "%s módosítása" + +#, python-format +msgid "View %s" +msgstr "%s megtekintése" + +msgid "Database error" +msgstr "Adatbázishiba" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s sikeresen módosítva lett." +msgstr[1] "%(count)s %(name)s sikeresen módosítva lett." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s kiválasztva" +msgstr[1] "%(total_count)s kiválasztva" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 kiválasztva ennyiből: %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Változások története: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(instance)s %(class_name)s törlése az alábbi kapcsolódó védett objektumok " +"törlését is magával vonná: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django honlapadminisztráció" + +msgid "Django administration" +msgstr "Django adminisztráció" + +msgid "Site administration" +msgstr "Honlap karbantartása" + +msgid "Log in" +msgstr "Bejelentkezés" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s adminisztráció" + +msgid "Page not found" +msgstr "Nincs ilyen oldal" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Sajnáljuk, de a keresett oldal nem található." + +msgid "Home" +msgstr "Kezdőlap" + +msgid "Server error" +msgstr "Szerverhiba" + +msgid "Server error (500)" +msgstr "Szerverhiba (500)" + +msgid "Server Error (500)" +msgstr "Szerverhiba (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Hiba történt. Az oldal kezelőjét e-mailben értesítettük, a hiba rövidesen " +"javítva lesz. Köszönjük a türelmet." + +msgid "Run the selected action" +msgstr "Kiválasztott művelet futtatása" + +msgid "Go" +msgstr "Mehet" + +msgid "Click here to select the objects across all pages" +msgstr "Kattintson ide több oldalnyi objektum kiválasztásához" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Az összes %(module_name)s kiválasztása, összesen %(total_count)s db" + +msgid "Clear selection" +msgstr "Kiválasztás törlése" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s alkalmazásban elérhető modellek." + +msgid "Add" +msgstr "Új" + +msgid "View" +msgstr "Megtekintés" + +msgid "You don’t have permission to view or edit anything." +msgstr "Jelenleg nincs jogosultsága bármit megtekinteni vagy szerkeszteni." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Először adjon meg egy felhasználónevet és jelszót. A mentés után a többi " +"felhasználói adat is szerkeszthető lesz." + +msgid "Enter a username and password." +msgstr "Írjon be egy felhasználónevet és jelszót." + +msgid "Change password" +msgstr "Jelszó megváltoztatása" + +msgid "Please correct the error below." +msgstr "Kérem javítsa a hibát alább." + +msgid "Please correct the errors below." +msgstr "Kérem javítsa ki a lenti hibákat." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Adjon meg egy új jelszót %(username)s nevű felhasználónak." + +msgid "Welcome," +msgstr "Üdvözlöm," + +msgid "View site" +msgstr "Honlap megtekintése" + +msgid "Documentation" +msgstr "Dokumentáció" + +msgid "Log out" +msgstr "Kijelentkezés" + +#, python-format +msgid "Add %(name)s" +msgstr "Új %(name)s" + +msgid "History" +msgstr "Történet" + +msgid "View on site" +msgstr "Megtekintés a honlapon" + +msgid "Filter" +msgstr "Szűrő" + +msgid "Clear all filters" +msgstr "Összes szűrő törlése" + +msgid "Remove from sorting" +msgstr "Eltávolítás a rendezésből" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritás rendezésnél: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Rendezés megfordítása" + +msgid "Delete" +msgstr "Törlés" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"\"%(escaped_object)s\" %(object_name)s törlése a kapcsolódó objektumok " +"törlését is eredményezi, de a hozzáférése nem engedi a következő típusú " +"objektumok törlését:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"\"%(escaped_object)s\" %(object_name)s törlése az alábbi kapcsolódó " +"objektumok törlését is maga után vonja:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Biztos hogy törli a következőt: \"%(escaped_object)s\" (típus: " +"%(object_name)s)? A összes további kapcsolódó elem is törlődik:" + +msgid "Objects" +msgstr "Objektumok" + +msgid "Yes, I’m sure" +msgstr "Igen, biztos vagyok benne" + +msgid "No, take me back" +msgstr "Nem, forduljunk vissza" + +msgid "Delete multiple objects" +msgstr "Több elem törlése" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"A kiválasztott %(objects_name)s törlése kapcsolódó objektumok törlését vonja " +"maga után, de az alábbi objektumtípusok törléséhez nincs megfelelő " +"jogosultsága:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"A kiválasztott %(objects_name)s törlése az alábbi védett kapcsolódó " +"objektumok törlését is maga után vonja:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Biztosan törölni akarja a kiválasztott %(objects_name)s objektumokat? Minden " +"alábbi objektum, és a hozzájuk kapcsolódóak is törlésre kerülnek:" + +msgid "Delete?" +msgstr "Törli?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s szerint " + +msgid "Summary" +msgstr "Összegzés" + +msgid "Recent actions" +msgstr "Legutóbbi műveletek" + +msgid "My actions" +msgstr "Az én műveleteim" + +msgid "None available" +msgstr "Nincs elérhető" + +msgid "Unknown content" +msgstr "Ismeretlen tartalom" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Valami probléma van az adatbázissal. Kérjük győződjön meg róla, hogy a " +"megfelelő táblák létre lettek hozva, és hogy a megfelelő felhasználónak van " +"rájuk olvasási joga." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jelenleg be vagy lépve mint %(username)s, de nincs jogod elérni ezt az " +"oldalt. Szeretnél belépni egy másik fiókkal?" + +msgid "Forgotten your password or username?" +msgstr "Elfelejtette jelszavát vagy felhasználónevét?" + +msgid "Toggle navigation" +msgstr "Navigáció megjelenítése/elrejtése" + +msgid "Date/time" +msgstr "Dátum/idő" + +msgid "User" +msgstr "Felhasználó" + +msgid "Action" +msgstr "Művelet" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Ennek az objektumnak nincs változás naplója. Valószínűleg nem az admin " +"felületen keresztül lett rögzítve." + +msgid "Show all" +msgstr "Mutassa mindet" + +msgid "Save" +msgstr "Mentés" + +msgid "Popup closing…" +msgstr "A popup bezáródik…" + +msgid "Search" +msgstr "Keresés" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s találat" +msgstr[1] "%(counter)s találat" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s összesen" + +msgid "Save as new" +msgstr "Mentés újként" + +msgid "Save and add another" +msgstr "Mentés és másik hozzáadása" + +msgid "Save and continue editing" +msgstr "Mentés és a szerkesztés folytatása" + +msgid "Save and view" +msgstr "Mentés és megtekintés" + +msgid "Close" +msgstr "Bezárás" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Kiválasztott %(model)s szerkesztése" + +#, python-format +msgid "Add another %(model)s" +msgstr "Újabb %(model)s hozzáadása" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Kiválasztott %(model)s törlése" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Köszönjük hogy egy kis időt eltöltött ma a honlapunkon." + +msgid "Log in again" +msgstr "Jelentkezzen be újra" + +msgid "Password change" +msgstr "Jelszó megváltoztatása" + +msgid "Your password was changed." +msgstr "Megváltozott a jelszava." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Kérjük a biztoság kedvéért adja meg a jelenlegi jelszavát, majd az újat, " +"kétszer, hogy biztosak lehessünk abban, hogy megfelelően gépelte be." + +msgid "Change my password" +msgstr "Jelszavam megváltoztatása" + +msgid "Password reset" +msgstr "Jelszó beállítása" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Jelszava beállításra került. Most már bejelentkezhet." + +msgid "Password reset confirmation" +msgstr "Jelszó beállítás megerősítése" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Írja be az új jelszavát kétszer, hogy megbizonyosodhassunk annak " +"helyességéről." + +msgid "New password:" +msgstr "Új jelszó:" + +msgid "Confirm password:" +msgstr "Jelszó megerősítése:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"A jelszóbeállító link érvénytelen. Ennek egyik oka az lehet, hogy már " +"felhasználták. Kérem indítson új jelszóbeállítást." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Amennyiben a megadott e-mail címhez tartozik fiók, elküldtük e-mailben a " +"leírást, hogy hogyan tudja megváltoztatni a jelszavát. Hamarosan meg kell " +"érkeznie." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ha nem kapja meg a levelet, kérjük ellenőrizze, hogy a megfelelő e-mail " +"címet adta-e meg, illetve nézze meg a levélszemét mappában is." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Azért kapja ezt az e-mailt, mert jelszavának visszaállítását kérte ezen a " +"weboldalon: %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Kérjük látogassa meg a következő oldalt, és válasszon egy új jelszót:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "A felhasználóneve, amennyiben nem emlékezne rá:" + +msgid "Thanks for using our site!" +msgstr "Köszönjük, hogy használta honlapunkat!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s csapat" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Elfelejtette jelszavát? Adja meg az e-mail-címet, amellyel regisztrált " +"oldalunkon, és e-mailben elküldjük a leírását, hogy hogyan tud újat " +"beállítani." + +msgid "Email address:" +msgstr "E-mail cím:" + +msgid "Reset my password" +msgstr "Jelszavam törlése" + +msgid "All dates" +msgstr "Minden dátum" + +#, python-format +msgid "Select %s" +msgstr "%s kiválasztása" + +#, python-format +msgid "Select %s to change" +msgstr "Válasszon ki egyet a módosításhoz (%s)" + +#, python-format +msgid "Select %s to view" +msgstr "Válasszon ki egyet a megtekintéshez (%s)" + +msgid "Date:" +msgstr "Dátum:" + +msgid "Time:" +msgstr "Idő:" + +msgid "Lookup" +msgstr "Keresés" + +msgid "Currently:" +msgstr "Jelenleg:" + +msgid "Change:" +msgstr "Módosítás:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2cc3c16f0dbe8c05abb7a54d6c526943f4a7e894 GIT binary patch literal 5121 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, 2012 +# Jannis Leidel , 2011 +# János R, 2011 +# Máté Őry , 2012 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-01 15:16+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Elérhető %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ez az elérhető %s listája. Úgy választhat közülük, hogy rákattint az alábbi " +"dobozban, és megnyomja a dobozok közti \"Választás\" nyilat." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Írjon a mezőbe az elérhető %s szűréséhez." + +msgid "Filter" +msgstr "Szűrő" + +msgid "Choose all" +msgstr "Mindet kijelölni" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Kattintson az összes %s kiválasztásához." + +msgid "Choose" +msgstr "Választás" + +msgid "Remove" +msgstr "Eltávolítás" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s kiválasztva" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ez a kiválasztott %s listája. Eltávolíthat közülük, ha rákattint, majd a két " +"doboz közti \"Eltávolítás\" nyílra kattint." + +msgid "Remove all" +msgstr "Összes törlése" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Kattintson az összes %s eltávolításához." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s/%(cnt)s kijelölve" +msgstr[1] "%(sel)s/%(cnt)s kijelölve" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Még el nem mentett módosításai vannak egyes szerkeszthető mezőkön. Ha most " +"futtat egy műveletet, akkor a módosítások elvesznek." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Kiválasztott egy műveletet, de nem mentette az egyes mezőkhöz kapcsolódó " +"módosításait. Kattintson az OK gombra a mentéshez. Újra kell futtatnia az " +"műveletet." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Kiválasztott egy műveletet, és nem módosított egyetlen mezőt sem. " +"Feltehetően a Mehet gombot keresi a Mentés helyett." + +msgid "Now" +msgstr "Most" + +msgid "Midnight" +msgstr "Éjfél" + +msgid "6 a.m." +msgstr "Reggel 6 óra" + +msgid "Noon" +msgstr "Dél" + +msgid "6 p.m." +msgstr "Este 6 óra" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Megjegyzés: %s órával a szerveridő előtt jársz" +msgstr[1] "Megjegyzés: %s órával a szerveridő előtt jársz" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Megjegyzés: %s órával a szerveridő mögött jársz" +msgstr[1] "Megjegyzés: %s órával a szerveridő mögött jársz" + +msgid "Choose a Time" +msgstr "Válassza ki az időt" + +msgid "Choose a time" +msgstr "Válassza ki az időt" + +msgid "Cancel" +msgstr "Mégsem" + +msgid "Today" +msgstr "Ma" + +msgid "Choose a Date" +msgstr "Válassza ki a dátumot" + +msgid "Yesterday" +msgstr "Tegnap" + +msgid "Tomorrow" +msgstr "Holnap" + +msgid "January" +msgstr "január" + +msgid "February" +msgstr "február" + +msgid "March" +msgstr "március" + +msgid "April" +msgstr "április" + +msgid "May" +msgstr "május" + +msgid "June" +msgstr "június" + +msgid "July" +msgstr "július" + +msgid "August" +msgstr "augusztus" + +msgid "September" +msgstr "szeptember" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "már" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "ápr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "máj" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "jún" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "júl" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "aug" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "szep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "dec" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "V" + +msgctxt "one letter Monday" +msgid "M" +msgstr "H" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "K" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "S" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mutat" + +msgid "Hide" +msgstr "Elrejt" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1627b2d57c475ec905e2073697d53e29889ec43d GIT binary patch literal 18274 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 e#KJLI*EX_GMbzchcRK!+tmlpWOIbgDME?V-xEr, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-21 14:16-0300\n" +"PO-Revision-Date: 2018-11-01 20:23+0000\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Հաջողությամբ հեռացվել է %(count)d %(items)s։" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Հնարավոր չէ հեռացնել %(name)s" + +msgid "Are you sure?" +msgstr "Համոզված ե՞ք" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Հեռացնել նշված %(verbose_name_plural)sը" + +msgid "Administration" +msgstr "Ադմինիստրավորում" + +msgid "All" +msgstr "Բոլորը" + +msgid "Yes" +msgstr "Այո" + +msgid "No" +msgstr "Ոչ" + +msgid "Unknown" +msgstr "Անհայտ" + +msgid "Any date" +msgstr "Ցանկացած ամսաթիվ" + +msgid "Today" +msgstr "Այսօր" + +msgid "Past 7 days" +msgstr "Անցած 7 օրերին" + +msgid "This month" +msgstr "Այս ամիս" + +msgid "This year" +msgstr "Այս տարի" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "Մուտքագրեք անձնակազմի պրոֆիլի ճիշտ %(username)s և գաղտնաբառ։" + +msgid "Action:" +msgstr "Գործողություն" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ավելացնել այլ %(verbose_name)s" + +msgid "Remove" +msgstr "Հեռացնել" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Փոփոխել" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "գործողության ժամանակ" + +msgid "user" +msgstr "օգտագործող" + +msgid "content type" +msgstr "կոնտենտի տիպ" + +msgid "object id" +msgstr "օբյեկտի id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "օբյեկտի repr" + +msgid "action flag" +msgstr "գործողության դրոշ" + +msgid "change message" +msgstr "փոփոխել հաղորդագրությունը" + +msgid "log entry" +msgstr "log գրառում" + +msgid "log entries" +msgstr "log գրառումներ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "%(object)s֊ը ավելացվեց " + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "%(object)s֊ը փոփոխվեց ֊ %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "%(object)s-ը հեռացվեց" + +msgid "LogEntry Object" +msgstr "LogEntry օբյեկտ" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "Ավելացվեց։" + +msgid "and" +msgstr "և" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ոչ մի դաշտ չփոփոխվեց։" + +msgid "None" +msgstr "Ոչինչ" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Սեղմեք \"Control\", կամ \"Command\" Mac֊ի մրա, մեկից ավելին ընտրելու համար։" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Օբյեկտների հետ գործողություն կատարելու համար նրանք պետք է ընտրվեն․ Ոչ մի " +"օբյեկտ չի փոփոխվել։" + +msgid "No action selected." +msgstr "Գործողությունը ընտրված չէ։" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s %(obj)s֊ը հաջողությամբ հեռացվեց։" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ավելացնել %s" + +#, python-format +msgid "Change %s" +msgstr "Փոփոխել %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Տվյալների բազաի սխալ" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s հաջողությամբ փոփոխվեց։" +msgstr[1] "%(count)s %(name)s հաջողությամբ փոփոխվեցին։" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Ընտրված են %(total_count)s" +msgstr[1] "Բոլոր %(total_count)s֊ը ընտրված են " + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s֊ից 0֊ն ընտրված է" + +#, python-format +msgid "Change history: %s" +msgstr "Փոփոխությունների պատմություն %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(instance)s %(class_name)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(instance)s %(class_name)s֊ը հեռացնելու համար անհրաժեշտ է հեռացնել նրա հետ " +"կապված պաշտպանված օբյեկտները՝ %(related_objects)s" + +msgid "Django site admin" +msgstr "Django կայքի ադմինիստրավորման էջ" + +msgid "Django administration" +msgstr "Django ադմինիստրավորում" + +msgid "Site administration" +msgstr "Կայքի ադմինիստրավորում" + +msgid "Log in" +msgstr "Մուտք" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s ադմինիստրավորում" + +msgid "Page not found" +msgstr "Էջը գտնված չէ" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Ներողություն ենք հայցում, բայց հարցվող Էջը գտնված չէ" + +msgid "Home" +msgstr "Գլխավոր" + +msgid "Server error" +msgstr "Սերվերի սխալ" + +msgid "Server error (500)" +msgstr "Սերվերի սխալ (500)" + +msgid "Server Error (500)" +msgstr "Սերվերի սխալ (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Առաջացել է սխալ։ Ադմինիստրատորները տեղեկացվել են դրա մասին էլեկտրոնային " +"փոստի միջոցով և այն կուղղվի կարճ ժամանակահատվածի ընդացքում․ Շնորհակալ ենք " +"ձեր համբերության համար։" + +msgid "Run the selected action" +msgstr "Կատարել ընտրված գործողությունը" + +msgid "Go" +msgstr "Կատարել" + +msgid "Click here to select the objects across all pages" +msgstr "Սեղմեք այստեղ բոլոր էջերից օբյեկտներ ընտրելու համար" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Ընտրել բոլոր %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Չեղարկել ընտրությունը" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Սկզբում մուտքագրեք օգտագործողի անունը և գաղտնաբառը․ Հետո դուք " +"հնարավորություն կունենաք խմբագրել ավելին։" + +msgid "Enter a username and password." +msgstr "Մուտքագրեք օգտագործողի անունը և գաղտնաբառը։" + +msgid "Change password" +msgstr "Փոխել գաղտնաբառը" + +msgid "Please correct the error below." +msgstr "Ուղղեք ստորև նշված սխալը։" + +msgid "Please correct the errors below." +msgstr "Ուղղեք ստորև նշված սխալները․" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Մուտքագրեք նոր գաղտնաբառ %(username)s օգտագործողի համար։" + +msgid "Welcome," +msgstr "Բարի գալուստ, " + +msgid "View site" +msgstr "Դիտել կայքը" + +msgid "Documentation" +msgstr "Դոկումենտացիա" + +msgid "Log out" +msgstr "Դուրս գալ" + +#, python-format +msgid "Add %(name)s" +msgstr "Ավելացնել %(name)s" + +msgid "History" +msgstr "Պատմություն" + +msgid "View on site" +msgstr "Դիտել կայքում" + +msgid "Filter" +msgstr "Ֆիլտրել" + +msgid "Remove from sorting" +msgstr "Հեռացնել դասակարգումից" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Դասակարգման առաջնություն՝ %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toggle sorting" + +msgid "Delete" +msgstr "Հեռացնել" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s'֊ի հեռացումը կարող է հանգեցնել նրա հետ " +"կապված օբյեկտների հեռացմանը, բայց դուք չունեք իրավունք հեռացնել այդ տիպի " +"օբյեկտներ․" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s'֊ը հեռացնելու համար կարող է անհրաժեշտ " +"լինել հեռացնել նրա հետ կապված պաշտպանված օբյեկտները։" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Համոզված ե՞ք, որ ուզում եք հեռացնել %(object_name)s \"%(escaped_object)s\"֊" +"ը։ նրա հետ կապված այս բոլոր օբյեկտները կհեռացվեն․" + +msgid "Objects" +msgstr "Օբյեկտներ" + +msgid "Yes, I'm sure" +msgstr "Այո, ես համոզված եմ" + +msgid "No, take me back" +msgstr "Ոչ, տարեք ենձ ետ" + +msgid "Delete multiple objects" +msgstr "Հեռացնել մի քանի օբյեկտ" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s֊ների հեռացումը կարող է հանգեցնել նրա հետ կապված օբյեկտների " +"հեռացմանը, բայց դուք չունեք իրավունք հեռացնել այդ տիպի օբյեկտներ․" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s֊ը հեռացնելու համար կարող է անհրաժեշտ լինել հեռացնել նրա հետ " +"կապված պաշտպանված օբյեկտները։" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Համոզված ե՞ք, որ ուզում եք հեռացնել նշված %(objects_name)s֊ները։ Այս բոլոր " +"օբյեկտները, ինչպես նաև նրանց հետ կապված օբյեկտները կհեռացվեն․" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Հեռացնե՞լ" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s " + +msgid "Summary" +msgstr "Ամփոփում" + +#, python-format +msgid "Models in the %(name)s application" +msgstr " %(name)s հավելվածի մոդել" + +msgid "Add" +msgstr "Ավելացնել" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Ոչինք չկա" + +msgid "Unknown content" +msgstr "Անհայտ կոնտենտ" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ինչ֊որ բան այն չէ ձեր տվյալների բազայի հետ։ Համոզվեք, որ համապատասխան " +"աղյուսակները ստեղծվել են և համոզվեք, որ համապատասխան օգտագործողը կարող է " +"կարդալ բազան։" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Դուք մուտք եք գործել որպես %(username)s, բայց իրավունք չունեք դիտելու այս " +"էջը։ Ցանկանում ե՞ք մուտք գործել որպես այլ օգտագործող" + +msgid "Forgotten your password or username?" +msgstr "Մոռացել ե՞ք օգտագործողի անունը կամ գաղտնաբառը" + +msgid "Date/time" +msgstr "Ամսաթիվ/Ժամանակ" + +msgid "User" +msgstr "Օգտագործող" + +msgid "Action" +msgstr "Գործողություն" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Այս օբյեկտը չունի փոփոխման պատմություն։ Այն հավանաբար ավելացված չէ " +"ադմինիստրավորման էջից։" + +msgid "Show all" +msgstr "Ցույց տալ բոլորը" + +msgid "Save" +msgstr "Պահպանել" + +msgid "Popup closing..." +msgstr "Ելնող պատուհանը փակվում է" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Փոփոխել ընտրված %(model)s տիպի օբյեկտը" + +#, python-format +msgid "View selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "Ավելացնել այլ %(model)s տիպի օբյեկտ" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Հեռացնել ընտրված %(model)s տիպի օբյեկտը" + +msgid "Search" +msgstr "Փնտրել" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s արդյունք" +msgstr[1] "%(counter)s արդյունքներ" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s ընդհանուր" + +msgid "Save as new" +msgstr "Պահպանել որպես նոր" + +msgid "Save and add another" +msgstr "Պահպանել և ավելացնել նորը" + +msgid "Save and continue editing" +msgstr "Պահպանել և շարունակել խմբագրել" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Շնորհակալություն մեր կայքում ինչ֊որ ժամանակ ծախսելու համար։" + +msgid "Log in again" +msgstr "Մուտք գործել նորից" + +msgid "Password change" +msgstr "Փոխել գաղտնաբառը" + +msgid "Your password was changed." +msgstr "Ձեր գաղտնաբառը փոխվել է" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Մուտքագրեք ձեր հին գաղտնաբառը։ Անվտանգության նկատառումներով մուտքագրեք ձեր " +"նոր գաղտնաբառը երկու անգամ, որպեսզի մենք համոզված լինենք, որ այն ճիշտ է " +"հավաքված։" + +msgid "Change my password" +msgstr "Փոխել իմ գաղտնաբառը" + +msgid "Password reset" +msgstr "Գաղտնաբառի փոփոխում" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ձեր գաղտնաբառը պահպանված է․ Կարող եք մուտք գործել։" + +msgid "Password reset confirmation" +msgstr "Գաղտնաբառի փոփոխման հաստատում" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Մուտքագրեք ձեր նոր գաղտնաբառը երկու անգամ, որպեսզի մենք համոզված լինենք, որ " +"այն ճիշտ է հավաքված։" + +msgid "New password:" +msgstr "Նոր գաղտնաբառ․" + +msgid "Confirm password:" +msgstr "Նոր գաղտնաբառը նորից․" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Գաղտնաբառի փոփոխման հղում է սխալ է, հավանաբար այն արդեն օգտագործվել է․ Դուք " +"կարող եք ստանալ նոր հղում։" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Մենք ուղարկեցինք ձեր էլեկտրոնային փոստի հասցեին գաղտնաբառը փոփոխելու " +"հրահանգներ․ Դուք շուտով կստանաք դրանք։" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Եթե դուք չեք ստացել էլեկտրոնային նամակ, համոզվեք, որ հավաքել եք այն հասցեն, " +"որով գրանցվել եք և ստուգեք ձեր սպամի թղթապանակը։" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Դուք ստացել եք այս նամակը, քանի որ ցանկացել եք փոխել ձեր գաղտնաբառը " +"%(site_name)s կայքում։" + +msgid "Please go to the following page and choose a new password:" +msgstr "Բացեք հետևյալ էջը և ընտրեք նոր գաղտնաբառ։" + +msgid "Your username, in case you've forgotten:" +msgstr "Եթե դուք մոռացել եք ձեր օգտագործողի անունը․" + +msgid "Thanks for using our site!" +msgstr "Շնորհակալություն մեր կայքից օգտվելու համար։" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s կայքի թիմ" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Մոռացել ե՞ք ձեր գաղտնաբառը Մուտքագրեք ձեր էլեկտրոնային փոստի հասցեն և մենք " +"կուղարկենք ձեզ հրահանգներ նորը ստանալու համար։" + +msgid "Email address:" +msgstr "Email հասցե․" + +msgid "Reset my password" +msgstr "Փոխել գաղտնաբառը" + +msgid "All dates" +msgstr "Բոլոր ամսաթվերը" + +#, python-format +msgid "Select %s" +msgstr "Ընտրեք %s" + +#, python-format +msgid "Select %s to change" +msgstr "Ընտրեք %s փոխելու համար" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Ամսաթիվ․" + +msgid "Time:" +msgstr "Ժամանակ․" + +msgid "Lookup" +msgstr "Որոնում" + +msgid "Currently:" +msgstr "Հիմա․" + +msgid "Change:" +msgstr "Փոփոխել" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9a8fa2cff7723069f0ced6b0f39d5f5c51e86a5 GIT binary patch literal 5636 zcmdT`TWnlM8J@PGEe^D_v|LIkQ#sskY*MXeN)Qmzk6;?}KA?F8F((mIQfKmt|p;#r9YDxL~L;-#Vj2?_E2GqdYm z$IS)81EZbuotgP>^Z(z>*|%?B_X0!PhQ0y)&FdI@4EWU>@IV_|$Jm3w3h+kY8H0;GG!1ZN`5y?j_e0-iKDYw#`LCo%tL;BCO`QN%3p4&cMU{lMFS&jZPR)!?kbn!(=! zVS@d^;9r20pT7esK2oN5)&pt00r(=Y3wQ!pGwXx5YCQ)?eoH{o8wY+Gc-+j-04d&I z&^+?94D15F3t_T<7nI5WMqmk;GUFcs?}gk1@FC!@k*s&Hej|!O_5LgHdf>YT-!u3R zga0)6FN4>iNHD`bflh6!2K7X#RHMA4&_9m83H=^)YLs_sonoPO zp9WQPdbP}0BOVO#jok%5#w#X7Ar{Uh z*B;<@s+3|6@G?PfIdnbNn+zvW%z8&`*R%7U;2R^>XZr==vA$vuM8W{K`J;B+GRnE7 zmQma~@|12Qd}YjY3t!`LzzfP8w>=Nj+>UtwFDcg7SPw-h7!hh6qFQ@J>`_q=rMw7P zzsQG)9adPs>%|!FaUH?-*}j_Fmv|MnFYyH%u){(T&k7rG9p4=;#_Wk8@bQR6mOm9F z+zx58yci@Qw~NAdD4&rCM?}bJJE^s05&D%2^Smg!zH>!p*A^YoyM7`VW%~CprNAk*|B_v4)FcW@g6AuSMXocMN6aeP;Bn(b zB5B+%#BShkQTeMF0lzEeCEEeveX4`)4-1@V9}zh2i0dS_2j9YTB9)sikhL5Jc^uIS z_kutre<%P`k>$sbI%p2qcU?RBg#i!cILvfOzZln6QwigFOf)<87uI@TAG z;mFDbS>ADAf6nR)g-yJ&=wi8Z|zu-BVR)zw08T2z`+%j zA5JiKMY zR^@A4zTEicT5_s>2m|#kw&dhhNVb27m(R%ausl8bUl*67LPID9UlFUScw zEvM*vDv#m)tgJ#~hGtjXwh!uuITYuV`YSMgp+%6^URA4Px+-U`a7|8g`4dDoEf?Yb zq8(Fo&#CC<$|7(%$>pR;C2eN0{&g;AbrALO`mxKX&cg1S*!3Zki;L8k;S(9D z;W-D#6ZLT>Phen5N5k(@j@5)p)j60u+%QPFhD}&Uok>^^k#t=Ly`~0-Rq|_0;ziCY zfn{>LgxXEX*OhBMQU4}cIz%&#gd+=8+K7CEs01CX!6iMX8ZxFRnqN_4b`d4~pW31n z*RDxa|GA|jVAp(W3F%zS$*QWy>hg|5u!R#O(>BpUK#)~Y^L#r&j;or_*AH>bSLpyg zC##y4?Z=LTC!heHI4#Ig{TK(~Xa+Q&QG{5OXF2MKaSP44TtH<}P-xP10TmDnB*BTs z+v+nRFK~IaQ!Hu&bDTuLC0q=23~;*05_wPpTwPub z4ec6in?r8jSZ%zsdEvoMCt01Qb0R185nVGopzhV=XVqE$Kg`i;rme~oZuEJ%q)-3z zsM1-Y-(gj%8d6!6r%)M16}mu{P;<<^jtbK)Gk013fj0Fcs9p0eBfa*^ba|dU(8bR(XB}!B7MXTj=BvpKT7u)@sTcb zIz=S2z~xWXJ#6-hSV6ePHuY^+{|5BYAxU1F-Z|ZJ@+G|?P4z0pLzn1ztRRJSOW}%b ziv>)VKU3}}5&yGzn}s+91|riTZ7hSV+N<8i!nMv3Ic;-&Et5mrLH2QRw0>#vpIhy< z#VzHujT0QKM3JCe#m9ew_(oZwFWdqZM}LG+FRCh7LD^CNFzE7mAEMBIfF{8dbu>-R zwMAq8IbC%c=#rfWFD8gNux{?!1_5b!iO4{LGn6ahZfi+&H19{gmHf^SWsrjjT;BM1 W@-6utwmi?|QMQav|G0WT#{Lav{i*B# literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..e209f5428 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po @@ -0,0 +1,219 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ruben Harutyunov , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-01-15 10:40+0100\n" +"Last-Translator: Ruben Harutyunov \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Հասանելի %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Սա հասանելի %s ցուցակ է։ Դուք կարող եք ընտրել նրանցից որոշները ընտրելով " +"դրանք ստորև գտնվող վանդակում և սեղմելով երկու վանդակների միջև գտնվող \"Ընտրել" +"\" սլաքը։" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Մուտքագրեք այս դաշտում հասանելի %s ցուցակը ֆիլտրելու համար։" + +msgid "Filter" +msgstr "Ֆիլտրել" + +msgid "Choose all" +msgstr "Ընտրել բոլորը" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Սեղմեք բոլոր %sը ընտրելու համար։" + +msgid "Choose" +msgstr "Ընտրել" + +msgid "Remove" +msgstr "Հեռացնել" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ընտրված %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Սա հասանելի %sի ցուցակ է։ Դուք կարող եք հեռացնել նրանցից որոշները ընտրելով " +"դրանք ստորև գտնվող վանդակում և սեղմելով երկու վանդակների միջև գտնվող " +"\"Հեռացնել\" սլաքը։" + +msgid "Remove all" +msgstr "Հեռացնել բոլորը" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Սեղմեք բոլոր %sը հեռացնելու համար։" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Ընտրված է %(cnt)s-ից %(sel)s-ը" +msgstr[1] "Ընտրված է %(cnt)s-ից %(sel)s-ը" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Դուք ունեք չպահպանված անհատական խմբագրելի դաշտեր։ Եթե դուք կատարեք " +"գործողությունը, ձեր չպահպանված փոփոխությունները կկորեն։" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Դուք ընտրել եք գործողություն, բայց դեռ չեք պահպանել անհատական խմբագրելի " +"դաշտերի փոփոխությունները Սեղմեք OK պահպանելու համար։ Անհրաժեշտ կլինի " +"վերագործարկել գործողությունը" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Դուք ընտրել եք գործողություն, բայց դեռ չեք կատարել որևէ անհատական խմբագրելի " +"դաշտերի փոփոխություն Ձեզ հավանաբար պետք է Կատարել կոճակը, Պահպանել կոճակի " +"փոխարեն" + +msgid "Now" +msgstr "Հիմա" + +msgid "Midnight" +msgstr "Կեսգիշեր" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Կեսօր" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Ձեր ժամը առաջ է սերվերի ժամանակից %s ժամով" +msgstr[1] "Ձեր ժամը առաջ է սերվերի ժամանակից %s ժամով" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Ձեր ժամը հետ է սերվերի ժամանակից %s ժամով" +msgstr[1] "Ձեր ժամը հետ է սերվերի ժամանակից %s ժամով" + +msgid "Choose a Time" +msgstr "Ընտրեք ժամանակ" + +msgid "Choose a time" +msgstr "Ընտրեք ժամանակ" + +msgid "Cancel" +msgstr "Չեղարկել" + +msgid "Today" +msgstr "Այսօր" + +msgid "Choose a Date" +msgstr "Ընտրեք ամսաթիվ" + +msgid "Yesterday" +msgstr "Երեկ" + +msgid "Tomorrow" +msgstr "Վաղը" + +msgid "January" +msgstr "Հունվար" + +msgid "February" +msgstr "Փետրվար" + +msgid "March" +msgstr "Մարտ" + +msgid "April" +msgstr "Ապրիլ" + +msgid "May" +msgstr "Մայիս" + +msgid "June" +msgstr "Հունիս" + +msgid "July" +msgstr "Հուլիս" + +msgid "August" +msgstr "Օգոստոս" + +msgid "September" +msgstr "Սեպտեմբեր" + +msgid "October" +msgstr "Հոկտեմբեր" + +msgid "November" +msgstr "Նոյեմբեր" + +msgid "December" +msgstr "Դեկտեմբեր" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Կ" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Ե" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ե" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Չ" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Հ" + +msgctxt "one letter Friday" +msgid "F" +msgstr "ՈՒ" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Շ" + +msgid "Show" +msgstr "Ցույց տալ" + +msgid "Hide" +msgstr "Թաքցնել" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..06ddd422dc159a7beeeb01ff080edd4183c59089 GIT binary patch literal 11278 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, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s delite con successo." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Non pote deler %(name)s" + +msgid "Are you sure?" +msgstr "Es tu secur?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Deler le %(verbose_name_plural)s seligite" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Totes" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Incognite" + +msgid "Any date" +msgstr "Omne data" + +msgid "Today" +msgstr "Hodie" + +msgid "Past 7 days" +msgstr "Ultime 7 dies" + +msgid "This month" +msgstr "Iste mense" + +msgid "This year" +msgstr "Iste anno" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Action:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Adder un altere %(verbose_name)s" + +msgid "Remove" +msgstr "Remover" + +msgid "action time" +msgstr "hora de action" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id de objecto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr de objecto" + +msgid "action flag" +msgstr "marca de action" + +msgid "change message" +msgstr "message de cambio" + +msgid "log entry" +msgstr "entrata de registro" + +msgid "log entries" +msgstr "entratas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" addite." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" cambiate - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" delite." + +msgid "LogEntry Object" +msgstr "Objecto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nulle campo cambiate." + +msgid "None" +msgstr "Nulle" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Es necessari seliger elementos pro poter exequer actiones. Nulle elemento ha " +"essite cambiate." + +msgid "No action selected." +msgstr "Nulle action seligite." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Le %(name)s \"%(obj)s\" ha essite delite con successo." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Adder %s" + +#, python-format +msgid "Change %s" +msgstr "Cambiar %s" + +msgid "Database error" +msgstr "Error in le base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s cambiate con successo." +msgstr[1] "%(count)s %(name)s cambiate con successo." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seligite" +msgstr[1] "Tote le %(total_count)s seligite" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seligite" + +#, python-format +msgid "Change history: %s" +msgstr "Historia de cambiamentos: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Administration del sito Django" + +msgid "Django administration" +msgstr "Administration de Django" + +msgid "Site administration" +msgstr "Administration del sito" + +msgid "Log in" +msgstr "Aperir session" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Pagina non trovate" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Regrettabilemente, le pagina requestate non poteva esser trovate." + +msgid "Home" +msgstr "Initio" + +msgid "Server error" +msgstr "Error del servitor" + +msgid "Server error (500)" +msgstr "Error del servitor (500)" + +msgid "Server Error (500)" +msgstr "Error del servitor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Exequer le action seligite" + +msgid "Go" +msgstr "Va" + +msgid "Click here to select the objects across all pages" +msgstr "Clicca hic pro seliger le objectos in tote le paginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seliger tote le %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Rader selection" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primo, specifica un nomine de usator e un contrasigno. Postea, tu potera " +"modificar plus optiones de usator." + +msgid "Enter a username and password." +msgstr "Specifica un nomine de usator e un contrasigno." + +msgid "Change password" +msgstr "Cambiar contrasigno" + +msgid "Please correct the error below." +msgstr "Per favor corrige le errores sequente." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Specifica un nove contrasigno pro le usator %(username)s." + +msgid "Welcome," +msgstr "Benvenite," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Clauder session" + +#, python-format +msgid "Add %(name)s" +msgstr "Adder %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Vider in sito" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Remover del ordination" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritate de ordination: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Alternar le ordination" + +msgid "Delete" +msgstr "Deler" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Deler le %(object_name)s '%(escaped_object)s' resultarea in le deletion de " +"objectos associate, me tu conto non ha le permission de deler objectos del " +"sequente typos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Deler le %(object_name)s '%(escaped_object)s' necessitarea le deletion del " +"sequente objectos associate protegite:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Es tu secur de voler deler le %(object_name)s \"%(escaped_object)s\"? Tote " +"le sequente objectos associate essera delite:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Si, io es secur" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Deler plure objectos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Deler le %(objects_name)s seligite resultarea in le deletion de objectos " +"associate, ma tu conto non ha le permission de deler objectos del sequente " +"typos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Deler le %(objects_name)s seligite necessitarea le deletion del sequente " +"objectos associate protegite:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Es tu secur de voler deler le %(objects_name)s seligite? Tote le sequente " +"objectos e le objectos associate a illo essera delite:" + +msgid "Change" +msgstr "Cambiar" + +msgid "Delete?" +msgstr "Deler?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Per %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Adder" + +msgid "You don't have permission to edit anything." +msgstr "Tu non ha le permission de modificar alcun cosa." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nihil disponibile" + +msgid "Unknown content" +msgstr "Contento incognite" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Il ha un problema con le installation del base de datos. Assecura te que le " +"tabellas correcte ha essite create, e que le base de datos es legibile pro " +"le usator appropriate." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Contrasigno o nomine de usator oblidate?" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usator" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Iste objecto non ha un historia de cambiamentos. Illo probabilemente non " +"esseva addite per medio de iste sito administrative." + +msgid "Show all" +msgstr "Monstrar toto" + +msgid "Save" +msgstr "Salveguardar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Cercar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultato" +msgstr[1] "%(counter)s resultatos" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s in total" + +msgid "Save as new" +msgstr "Salveguardar como nove" + +msgid "Save and add another" +msgstr "Salveguardar e adder un altere" + +msgid "Save and continue editing" +msgstr "Salveguardar e continuar le modification" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gratias pro haber passate un tempore agradabile con iste sito web." + +msgid "Log in again" +msgstr "Aperir session de novo" + +msgid "Password change" +msgstr "Cambio de contrasigno" + +msgid "Your password was changed." +msgstr "Tu contrasigno ha essite cambiate." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Per favor specifica tu ancian contrasigno, pro securitate, e postea " +"specifica tu nove contrasigno duo vices pro verificar que illo es scribite " +"correctemente." + +msgid "Change my password" +msgstr "Cambiar mi contrasigno" + +msgid "Password reset" +msgstr "Reinitialisar contrasigno" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Tu contrasigno ha essite reinitialisate. Ora tu pote aperir session." + +msgid "Password reset confirmation" +msgstr "Confirmation de reinitialisation de contrasigno" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Per favor scribe le nove contrasigno duo vices pro verificar que illo es " +"scribite correctemente." + +msgid "New password:" +msgstr "Nove contrasigno:" + +msgid "Confirm password:" +msgstr "Confirma contrasigno:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Le ligamine pro le reinitialisation del contrasigno esseva invalide, forsan " +"perque illo ha jam essite usate. Per favor submitte un nove demanda de " +"reinitialisation del contrasigno." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Per favor va al sequente pagina pro eliger un nove contrasigno:" + +msgid "Your username, in case you've forgotten:" +msgstr "Tu nomine de usator, in caso que tu lo ha oblidate:" + +msgid "Thanks for using our site!" +msgstr "Gratias pro usar nostre sito!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Le equipa de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Reinitialisar mi contrasigno" + +msgid "All dates" +msgstr "Tote le datas" + +#, python-format +msgid "Select %s" +msgstr "Selige %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selige %s a modificar" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Recerca" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..4c9eccce331d52b1577ced5951f966ba7177dc48 GIT binary patch literal 3177 zcmbtWO>Z1U5FH?VEf64q@DU^`mP{Nav)(ntN!BqUI1X{Ju@x^7$*p&$cele#_ok=E z>qT7Pk_!@w1VYLsT)805NQetJegRU1I3P}lUw{O!dS<+K;)DYu_rB?`>Q}F-Yy9iJ zJzoZRUMbt(z)7^*58wyS;K3j`0lWr$1o#c`N#J*7|A!KP0zQTDpMf>tFTlrvzXM+d z{snvuxc8yL&T-%#^iKmH1D+}S7l8N+R`J8*$7I+)T>-S?b^EwD*{)d2=3XTCmIXDjFb*F%A?@T$r3cQZ~2f)vPzX93K z07e)$fb+nQfp97K9{3sXN8l~s@)MW?{t4s|vM+2OUC#sHuI!S(OyIY_23z_m(cj(91A9=GMOC7$aHCPD$)+G z7?6>Z@qOoJNz~JNaArfOM065KlUcAJbR?5tp>IqkOCUi`rQ=@W=QFAOhD1dlk~0+f zEhLfz!z3ITSgHpL)x4Fd*^qu7ON-s(W#?4lqz%riSOzO9)~eTc!F$GN{0xJOes2kE zB3SQZxZPJ7;m`FYB`U*_T@u^8sncbXQz}Lkxy+=JI-^n^rF*PR<~Si`5gp&@LSS$$VhTMmyIm2&(~Mujl{#mK~B6tqoh zn0L?~4J2Gf$QmR4&km z9YPQz@|xoybWb8xH5kNdL&dpBaJEe1%xiPlN*Y+xK|YQsF~*DEHP);A4n)qK!)7a> zIuGJd)_XO2IJ<&k847G}CC#hK=K4 z^90Sj-fGSqZOk+pSQuWE8;Wg?*PRF(r^4nbYR5TzmI!BTi!KPQ zk#frt*F2%qV1w>kiSO2x?wU8TNB45klVMwmv_(rA`Ig`Y=7OgB&J9}A)5GDg?%1m8 z%FTLY(&@sl3X;;qv=Y-tYAZ`Ci(>_v^+s*Mz^Dc@T!a=mx#^|{iBNiuGr(rj&A;D1 z7oHrirP=ikYpjY<~J`!k*CF#Nf2wdLx(!Ga~d#pPXm64B+9kK7ecc) z*K!eiC$Ht~3*v%nB89)qa0x5A_-6J6O%(Fk2`-W_gPAxt<$e_S-FQ@0pKx2+VYu$%k>>0U~ldvU~pbq z6+lIZP&vd&R8@6+=5o@gzL@Wd2-!-JNIOb!auhCkZ+UcJ3MqUkN0$2hp-9?7>avVq z67ZNUf>k-RE|Lw2+m4Tn#mDrXWK#T7vc)DFZz@vvPF^^;V2hxmj3X9Zv4O7&f8W6f zrQBbDu^9-(D{+1-JJJd+>2gydcf5pERbNV2j2)-3J3ILx8r#pO6ank1Nbv2g)4F0u X3ftS&_5s{sS!NkCK_=lNfy?+Wn2ev0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..828509781 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po @@ -0,0 +1,216 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibile" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Ecce le lista de %s disponibile. Tu pote seliger alcunes in le quadro " +"sequente; postea clicca le flecha \"Seliger\" inter le duo quadros." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Scribe in iste quadro pro filtrar le lista de %s disponibile." + +msgid "Filter" +msgstr "Filtrar" + +msgid "Choose all" +msgstr "Seliger totes" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Clicca pro seliger tote le %s immediatemente." + +msgid "Choose" +msgstr "Seliger" + +msgid "Remove" +msgstr "Remover" + +#, javascript-format +msgid "Chosen %s" +msgstr "Le %s seligite" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ecce le lista de %s seligite. Tu pote remover alcunes per seliger los in le " +"quadro sequente e cliccar le flecha \"Remover\" inter le duo quadros." + +msgid "Remove all" +msgstr "Remover totes" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Clicca pro remover tote le %s seligite immediatemente." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s seligite" +msgstr[1] "%(sel)s de %(cnt)s seligite" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Il ha cambiamentos non salveguardate in certe campos modificabile. Si tu " +"exeque un action, iste cambiamentos essera perdite." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Tu ha seligite un action, ma tu non ha salveguardate le cambiamentos in " +"certe campos. Per favor clicca OK pro salveguardar los. Tu debera re-exequer " +"le action." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Tu ha seligite un action, e tu non ha facite cambiamentos in alcun campo. Tu " +"probabilemente cerca le button Va e non le button Salveguardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Ora" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Selige un hora" + +msgid "Midnight" +msgstr "Medienocte" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mediedie" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Cancellar" + +msgid "Today" +msgstr "Hodie" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Heri" + +msgid "Tomorrow" +msgstr "Deman" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Monstrar" + +msgid "Hide" +msgstr "Celar" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8f97aeba595bb9558c1274e6926b2991f161f15e GIT binary patch literal 16681 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..244df7740 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,731 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014 +# Fery Setiawan , 2015-2019,2021 +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# oon arfiandwi , 2016,2020 +# rodin , 2011-2013 +# rodin , 2013-2017 +# sag᠎e , 2019 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-06 09:12+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Hapus %(verbose_name_plural)s yang dipilih" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sukses menghapus %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Tidak dapat menghapus %(name)s" + +msgid "Are you sure?" +msgstr "Yakin?" + +msgid "Administration" +msgstr "Administrasi" + +msgid "All" +msgstr "Semua" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Tidak" + +msgid "Unknown" +msgstr "Tidak diketahui" + +msgid "Any date" +msgstr "Kapanpun" + +msgid "Today" +msgstr "Hari ini" + +msgid "Past 7 days" +msgstr "Tujuh hari terakhir" + +msgid "This month" +msgstr "Bulan ini" + +msgid "This year" +msgstr "Tahun ini" + +msgid "No date" +msgstr "Tidak ada tanggal" + +msgid "Has date" +msgstr "Ada tanggal" + +msgid "Empty" +msgstr "Kosong" + +msgid "Not empty" +msgstr "Tidak kosong" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Masukkan nama pengguna %(username)s dan sandi yang benar untuk akun staf. " +"Huruf besar/kecil pada bidang ini berpengaruh." + +msgid "Action:" +msgstr "Aksi:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Tambahkan %(verbose_name)s lagi" + +msgid "Remove" +msgstr "Hapus" + +msgid "Addition" +msgstr "Tambahan" + +msgid "Change" +msgstr "Ubah" + +msgid "Deletion" +msgstr "Penghapusan" + +msgid "action time" +msgstr "waktu aksi" + +msgid "user" +msgstr "pengguna" + +msgid "content type" +msgstr "jenis isi" + +msgid "object id" +msgstr "id objek" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "representasi objek" + +msgid "action flag" +msgstr "jenis aksi" + +msgid "change message" +msgstr "ganti pesan" + +msgid "log entry" +msgstr "entri pencatatan" + +msgid "log entries" +msgstr "entri pencatatan" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” ditambahkan." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” diubah — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "“%(object)s” dihapus." + +msgid "LogEntry Object" +msgstr "Objek LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” ditambahkan." + +msgid "Added." +msgstr "Ditambahkan." + +msgid "and" +msgstr "dan" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{fields} diubah untuk {name} “{object}”." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} berubah." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}” dihapus." + +msgid "No fields changed." +msgstr "Tidak ada bidang yang berubah." + +msgid "None" +msgstr "None" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Tekan “Control”, atau “Command” pada Mac, untuk memilih lebih dari satu." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” berhasil ditambahkan." + +msgid "You may edit it again below." +msgstr "Anda dapat menyunting itu kembali di bawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} “{obj}” berhasil ditambahkan. Anda dapat menambahkan {name} lain di " +"bawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” berhasil diubah. Anda dapat mengeditnya kembali di bawah." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} “{obj}” berhasil ditambahkan. Anda dapat mengeditnya kembali di bawah." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} “{obj}” berhasil diubah. Anda dapat menambahkan {name} lain di bawah." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” berhasil diubah." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Objek harus dipilih sebelum dimanipulasi. Tidak ada objek yang berubah." + +msgid "No action selected." +msgstr "Tidak ada aksi yang dipilih." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” berhasil dihapus." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s dengan ID “%(key)s” tidak ada. Mungkin telah dihapus?" + +#, python-format +msgid "Add %s" +msgstr "Tambahkan %s" + +#, python-format +msgid "Change %s" +msgstr "Ubah %s" + +#, python-format +msgid "View %s" +msgstr "Lihat %s" + +msgid "Database error" +msgstr "Galat basis data" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s berhasil diubah." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s dipilih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 dari %(cnt)s dipilih" + +#, python-format +msgid "Change history: %s" +msgstr "Ubah riwayat: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Menghapus %(class_name)s %(instance)s memerlukan penghapusanobjek " +"terlindungi yang terkait sebagai berikut: %(related_objects)s" + +msgid "Django site admin" +msgstr "Admin situs Django" + +msgid "Django administration" +msgstr "Administrasi Django" + +msgid "Site administration" +msgstr "Administrasi situs" + +msgid "Log in" +msgstr "Masuk" + +#, python-format +msgid "%(app)s administration" +msgstr "Administrasi %(app)s" + +msgid "Page not found" +msgstr "Laman tidak ditemukan" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Maaf, laman yang Anda minta tidak ditemukan." + +msgid "Home" +msgstr "Beranda" + +msgid "Server error" +msgstr "Galat server" + +msgid "Server error (500)" +msgstr "Galat server (500)" + +msgid "Server Error (500)" +msgstr "Galat Server (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Terjadi sebuah galat dan telah dilaporkan ke administrator situs melalui " +"surel untuk diperbaiki. Terima kasih atas pengertian Anda." + +msgid "Run the selected action" +msgstr "Jalankan aksi terpilih" + +msgid "Go" +msgstr "Buka" + +msgid "Click here to select the objects across all pages" +msgstr "Klik di sini untuk memilih semua objek pada semua laman" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Pilih seluruh %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Bersihkan pilihan" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Model pada aplikasi %(name)s" + +msgid "Add" +msgstr "Tambah" + +msgid "View" +msgstr "Lihat" + +msgid "You don’t have permission to view or edit anything." +msgstr "Anda tidak memiliki izin untuk melihat atau mengedit apa pun." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Pertama-tama, masukkan nama pengguna dan sandi. Anda akan dapat mengubah " +"opsi pengguna lebih lengkap setelah itu." + +msgid "Enter a username and password." +msgstr "Masukkan nama pengguna dan sandi." + +msgid "Change password" +msgstr "Ganti sandi" + +msgid "Please correct the error below." +msgstr "Mohon perbaiki kesalahan di bawah ini." + +msgid "Please correct the errors below." +msgstr "Perbaiki galat di bawah ini." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Masukkan sandi baru untuk pengguna %(username)s." + +msgid "Welcome," +msgstr "Selamat datang," + +msgid "View site" +msgstr "Lihat situs" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Log out" +msgstr "Keluar" + +#, python-format +msgid "Add %(name)s" +msgstr "Tambahkan %(name)s" + +msgid "History" +msgstr "Riwayat" + +msgid "View on site" +msgstr "Lihat di situs" + +msgid "Filter" +msgstr "Filter" + +msgid "Clear all filters" +msgstr "Hapus semua penyaringan" + +msgid "Remove from sorting" +msgstr "Dihapus dari pengurutan" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritas pengurutan: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Ubah pengurutan" + +msgid "Delete" +msgstr "Hapus" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Menghapus %(object_name)s '%(escaped_object)s' akan menghapus objek lain " +"yang terkait, tetapi akun Anda tidak memiliki izin untuk menghapus objek " +"dengan tipe berikut:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Menghapus %(object_name)s '%(escaped_object)s' memerlukan penghapusan objek " +"terlindungi yang terkait sebagai berikut:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Yakin ingin menghapus %(object_name)s \"%(escaped_object)s\"? Semua objek " +"lain yang terkait juga akan dihapus:" + +msgid "Objects" +msgstr "Objek" + +msgid "Yes, I’m sure" +msgstr "Ya, saya yakin" + +msgid "No, take me back" +msgstr "Tidak, bawa saya kembali" + +msgid "Delete multiple objects" +msgstr "Hapus beberapa objek sekaligus" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Menghapus %(objects_name)s terpilih akan menghapus objek yang terkait, " +"tetapi akun Anda tidak memiliki izin untuk menghapus objek dengan tipe " +"berikut:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Menghapus %(objects_name)s terpilih memerlukan penghapusan objek terlindungi " +"yang terkait sebagai berikut:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Yakin akan menghapus %(objects_name)s terpilih? Semua objek berikut beserta " +"objek terkait juga akan dihapus:" + +msgid "Delete?" +msgstr "Hapus?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Berdasarkan %(filter_title)s " + +msgid "Summary" +msgstr "Ringkasan" + +msgid "Recent actions" +msgstr "Tindakan terbaru" + +msgid "My actions" +msgstr "Tindakan saya" + +msgid "None available" +msgstr "Tidak ada yang tersedia" + +msgid "Unknown content" +msgstr "Konten tidak diketahui" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ada masalah dengan instalasi basis data Anda. Pastikan tabel yang sesuai " +"pada basis data telah dibuat dan dapat dibaca oleh pengguna yang sesuai." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Anda diautentikasi sebagai %(username)s, tapi tidak diperbolehkan untuk " +"mengakses halaman ini. Ingin mencoba mengakses menggunakan akun yang lain?" + +msgid "Forgotten your password or username?" +msgstr "Lupa nama pengguna atau sandi?" + +msgid "Toggle navigation" +msgstr "Alihkan navigasi" + +msgid "Start typing to filter…" +msgstr "Mulai mengetik untuk menyaring..." + +msgid "Filter navigation items" +msgstr "Navigasi pencarian barang" + +msgid "Date/time" +msgstr "Tanggal/waktu" + +msgid "User" +msgstr "Pengguna" + +msgid "Action" +msgstr "Aksi" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Objek ini tidak memiliki riwayat perubahan. Mungkin objek ini tidak " +"ditambahkan melalui situs administrasi ini." + +msgid "Show all" +msgstr "Tampilkan semua" + +msgid "Save" +msgstr "Simpan" + +msgid "Popup closing…" +msgstr "Menutup jendela sembulan..." + +msgid "Search" +msgstr "Cari" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s buah" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Simpan sebagai baru" + +msgid "Save and add another" +msgstr "Simpan dan tambahkan lagi" + +msgid "Save and continue editing" +msgstr "Simpan dan terus mengedit" + +msgid "Save and view" +msgstr "Simpan dan tampilkan" + +msgid "Close" +msgstr "Tutup" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ubah %(model)s yang dipilih" + +#, python-format +msgid "Add another %(model)s" +msgstr "Tambahkan %(model)s yang lain" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Hapus %(model)s yang dipilih" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" +"Terima kasih untuk meluangkan waktu berkualitas dengan jaringan situs hari " +"ini." + +msgid "Log in again" +msgstr "Masuk kembali" + +msgid "Password change" +msgstr "Ubah sandi" + +msgid "Your password was changed." +msgstr "Sandi Anda telah diubah." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Masukkan sandi lama Anda, demi alasan keamanan, dan masukkan sandi baru Anda " +"dua kali untuk memastikan Anda tidak salah mengetikkannya." + +msgid "Change my password" +msgstr "Ubah sandi saya" + +msgid "Password reset" +msgstr "Setel ulang sandi" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Sandi Anda telah diperbarui. Silakan masuk." + +msgid "Password reset confirmation" +msgstr "Konfirmasi penyetelan ulang sandi" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Masukkan sandi baru dua kali untuk memastikan Anda tidak salah " +"mengetikkannya." + +msgid "New password:" +msgstr "Sandi baru:" + +msgid "Confirm password:" +msgstr "Konfirmasi sandi:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Tautan penyetelan ulang sandi tidak valid. Kemungkinan karena tautan " +"tersebut telah dipakai sebelumnya. Ajukan permintaan penyetelan sandi sekali " +"lagi." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Kami telah mengirimi Anda surel berisi petunjuk untuk mengatur sandi Anda, " +"jika ada akun dengan alamat surel yang sesuai. Anda seharusnya menerima " +"surel tersebut sesaat lagi." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jika Anda tidak menerima surel, pastikan Anda telah memasukkan alamat yang " +"digunakan saat pendaftaran serta periksa folder spam Anda." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Anda menerima email ini karena Anda meminta penyetelan ulang sandi untuk " +"akun pengguna di %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Kunjungi laman di bawah ini dan ketikkan sandi baru:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Nama pengguna Anda, jika lupa:" + +msgid "Thanks for using our site!" +msgstr "Terima kasih telah menggunakan situs kami!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tim %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Lupa sandi Anda? Masukkan alamat surel Anda di bawah ini dan kami akan " +"mengirimkan petunjuk untuk mengatur sandi baru Anda." + +msgid "Email address:" +msgstr "Alamat email:" + +msgid "Reset my password" +msgstr "Setel ulang sandi saya" + +msgid "All dates" +msgstr "Semua tanggal" + +#, python-format +msgid "Select %s" +msgstr "Pilih %s" + +#, python-format +msgid "Select %s to change" +msgstr "Pilih %s untuk diubah" + +#, python-format +msgid "Select %s to view" +msgstr "Pilih %s untuk melihat" + +msgid "Date:" +msgstr "Tanggal:" + +msgid "Time:" +msgstr "Waktu:" + +msgid "Lookup" +msgstr "Cari" + +msgid "Currently:" +msgstr "Saat ini:" + +msgid "Change:" +msgstr "Ubah:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6cfffc10370c7b81cb4c8a521fb8b0440bfa2d3 GIT binary patch literal 5006 zcmb`KZEPGz8OH~DKyi3!Q(6jr8%$CX>RX@P65LB&Vmo!?1Sgj7N*YliW^c#0fta2au4E%BM<{4@LivMIE`1$-@d1iS|fz3M2b=KDJMH27Wc`{2T1#$xc#AnCaQXAs+-k9$7h`9aUfGxkh8Gf(Te>-iB7 zZe*7|KkoSn&rfG>(oPkUmh^9zwKvgNdUVr&kiy+CpJHk5auPz*ePLNODdyd8!7 z|1b*0V;zO;M;A=tVwIkcpfpjAp-_C%MRp%vr~Cu?fUf&0xLD=>nLs)0eiWoJb^>Jq zh3r4P;4bzc3hm8@d?Q@I5Kio2g>tvA)4rs=LH?oZoha`?nWqXaic7jEPtrAu zLa{T0axV(S1;sS&Ps(w0!MxRV^jIO2;{`Wc{OGZcws=H?>{uDGm+CvgMUV#U1kVUd zS*{YcRCde4vZWoN5)menA1&C5&>fkumDrdGOv9T!Q0W-cr@cuT-mhW)ur&5m^a5Uobkq_9aN-XMUR3zD1 zpd6|z~>>2ralphxo#InB%Q=_*jB zVbL5yp|pJo8G5_z8;;?!2o6+gKqzi3(>Oh$CRL+=SSs1D+V;9I#~&t+4c?Fm!1xhUWrxYQ&4F zr$yRSeZfns2O+*+y#iw+YRg9o!X{TK$OqB}d?S&fkX3B(3+KpsG=8W(_Pv&v4b8c% z=Vhf`WtuU?N?pD5V1vj=S(m1UmRZ|!D${ghhISfH&eT^>A;gw2g$36-nMQuwXKi0wS+Bc zOVnEXT1zLnudN-Ic|nrxamjWmuWr03BV9FLWE;8J#z(Kd7S-P;^8!1p$)jy-BQv!r zGn3o;deK!;eYxxw^|op9sf`QuO}V2;v`$~MCZBK2&(#|b*5@AJjYjkSx%(Qprrs+G zTW{w=7m2VYZ}L@{4|q#jCHjc6hq`3Wq%Xr$-4x%=pkva9F-Uhy(UtYK6ls&M=?F$E z6y%S^)@IGw*?zwtSejLB$z2*WTd6xl;%Asu(d_Z5^|kd!_7*l5G^SP%s!~HUWU3~& za@WpgiBS3^ZO*)qcJZ|FdbX_kd4KG=kZCDsy3t#!(WSO!kEb%F87b+Oc^T7p zy^uYTD5w#zbBXHlp`h-@A}gsM6LPlzxM=@?(-OU7hYdA6Y^r%0{)LjuHvnL{DE%?8S1C_-e!qcseFJTK{H-%8RBQu+SuR2hiA%ie?ugo%bpjbx0L6#Q1EOXVv zCqhJ6TFfJ{WkpW9@AGg_EiV$Zu#sPo3viYbrC)YLHqygxJ%A%HEAJUAdN2bIvCrZe zo`|G`5I&4Oav>CfP$o3qKJDB;O~L{i<`^vT$*iUbUS3z{_z7J{q4EFM)*1Jj+Mc0p zr4U8SvM@b%4vD5WZV`0t#qR*Z*iqLqKSrk{!CaJCNv;~Y!Q#s;;K~_{)|H=-$I6rh z!V><QS7uq#0PH^@Z?e=O4uQjqH zc0P38Mg(gokA)*m;J{y5rb<*e2vG, 2015-2016,2021 +# Jannis Leidel , 2011 +# oon arfiandwi , 2020 +# rodin , 2011-2012 +# rodin , 2014,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-09-14 00:31+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s yang tersedia" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Berikut adalah daftar %s yang tersedia. Anda dapat memilih satu atau lebih " +"dengan memilihnya pada kotak di bawah, lalu mengeklik tanda panah \"Pilih\" " +"di antara kedua kotak." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Ketik pada kotak ini untuk menyaring daftar %s yang tersedia." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Pilih semua" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Pilih untuk memilih seluruh %s sekaligus." + +msgid "Choose" +msgstr "Pilih" + +msgid "Remove" +msgstr "Hapus" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s terpilih" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Berikut adalah daftar %s yang terpilih. Anda dapat menghapus satu atau lebih " +"dengan memilihnya pada kotak di bawah, lalu mengeklik tanda panah \"Hapus\" " +"di antara kedua kotak." + +msgid "Remove all" +msgstr "Hapus semua" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik untuk menghapus semua pilihan %s sekaligus." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s dari %(cnt)s terpilih" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Beberapa perubahan bidang yang Anda lakukan belum tersimpan. Perubahan yang " +"telah dilakukan akan hilang." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Anda telah memilih tindakan, tetapi Anda belum menyimpan perubahan ke masing-" +"masing bidang. Silakan klik OK untuk menyimpan. Anda harus menjalankan " +"kembali tindakan tersebut." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Anda telah memilih tindakan, dan Anda belum membuat perubahan apa pun di " +"setiap bidang. Anda mungkin mencari tombol Buka daripada tombol Simpan." + +msgid "Now" +msgstr "Sekarang" + +msgid "Midnight" +msgstr "Tengah malam" + +msgid "6 a.m." +msgstr "6 pagi" + +msgid "Noon" +msgstr "Siang" + +msgid "6 p.m." +msgstr "18.00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Catatan: Waktu Anda lebih cepat %s jam dibandingkan waktu server." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Catatan: Waktu Anda lebih lambat %s jam dibandingkan waktu server." + +msgid "Choose a Time" +msgstr "Pilih Waktu" + +msgid "Choose a time" +msgstr "Pilih waktu" + +msgid "Cancel" +msgstr "Batal" + +msgid "Today" +msgstr "Hari ini" + +msgid "Choose a Date" +msgstr "Pilih Tanggal" + +msgid "Yesterday" +msgstr "Kemarin" + +msgid "Tomorrow" +msgstr "Besok" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Maret" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "Agustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jun" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Jul" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Agu" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Des" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "M" + +msgctxt "one letter Monday" +msgid "M" +msgstr "S" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "S" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "R" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "K" + +msgctxt "one letter Friday" +msgid "F" +msgstr "J" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Bentangkan" + +msgid "Hide" +msgstr "Ciutkan" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..abe5bb50d40d8998e8c56b2c35d860268bc84aed GIT binary patch literal 12624 zcmc(lZLAzudB;z}OA?2a6v|r*?MaB^>%_ahPH~)UoEX1_Tw=$r?{z{TVCL?gy?4B` zGn<*&d%X^nqzwh6meNv0RoY4wZPgZ3TGUS!1wH_+P@%7&mLd>HK`1Svm5M~EK>hvC znc1DawgV`wI`Y~7%$YOiJm+~o&-Is{_ssVgu6NL0O6xt-n2&)UypkWTKe*bM7l3~V z{sj0j@U`H-fH#7-J}30Q9^A|G1l0HsfzJj%30?vIHTVqhA3^?^f8s~)p8&P)zk$yO zuev6Tdl`5Y&)0z>sKlou#(en)u(VB08kAU9+9{@LgEX?y+5D}Qqfg1l+5R%Q4)%)*& z;@4#mDY|X|HUBLjQ<=RWq?jd8>pTRC?x?~MsQKPfJ^wN&efn(>RWg4L{uKBr(1KqB zOYjPWdlGyT_%`q}U%;8_V-Ru`uIDb#{UucA@HN%b}(g;o#3y5cc~xzaqzp~ zBKTq+q_0ch7fo6msy{>z}o ze-G5WSEBTq@A;tUxf#^Dhd|M>4Bh~~uIhgj{Ar$l1(be#64bbV2Bkk=0X6@Bf|Bd^ zK*{HsFAw^84R{mJJ3z_t6o_h>GvGP!9JmVp2lz|i3X4l$z6$<4c*pjz?#Do__Ya`f z`x+?w_;>Iic=?TCzehmP*9A|318^t!QE&u)9TXoQ+!5$}1E}XUQ1m3=3GfL}dbk&* z(K<&#>Bj@0_|*rm1UEs+`B6~se+#@E{2(Yh{SYWU`2?tSz5r_8FN2tn`DXQe6-284 zC7}4T6O^7F0;RwARTzVh@%%V=5BO}Dy8)g6_kf=QuLQphYTe5)3eoW*Q0wgipAFs( zN)L{Mn%{w1|55M?@Lk~5;ID%k_q$*V{0L~lCqeP$>RsXe%RtF@FR1wrfscc)2O-6L z6=bXC8YYoG-3nqt<}Aom=Ix-q`!jGI{2TCX;BD<7?~jA8=lRp1=v&ww^lh=iTS3WT zKe!Ei5Y)bV)%yu3e!K+~pWXvr1^y-Y4Djzj>DT8#L~p(hijHd+gZ)lG@!?NEOv(He zcn$a@_#E)t;AP;mm|S{r1*rZPR`~L&e-XTv{sW-K^O<=QP1n@{%zfZNn&yEFGoU>} zdj+j|y{hr>I_@`Vduc~$2WYxpNkdiq^#*>WTe@zcJeQXwv1oY4_6FH0jXGX}X3q*_`y;(xm^o}FZAQ2borSw zE)%!2ux9&0H;IbkOd1XKynP`~i!w^PJm_6EPD|fiz2A%q+g*>+HP^GnxZ8C_(H|$t zqSi-aOIv2P#~w;&S%CS&Jhfz)*cIJqY+SlwVK-yOth#FM9=rPiR*4v-5{jk?G6TogS>bv#0D6@RhX><)Ic7z^pW_hn3wdJ`}_0P-5 zw%B6O=mM2LoVX~rVfWIA!%5s7SmcdRvZ~*6d%EFno)zpH9*?3mgnT$l`*A*;Qp2+2 zJa=iCOgiRBR7R^&;jGK^EZ3vkUB*M_?|ALSUx6KB74ax>wpy$1Z^)*pf@em_IFAxG z5vDm%;oN@P*N0xI$y1oV-OR>G4;el@j@i0bOMNo0XQMnTy~$05T~Uf)7AhsIlvTX- zWYx25Rqq`as`rkkOU2VzQ69<0>1^kg%UqG}DD8T*;q1ue z!?-9=p)F=Tv(j=ha)peyX4*Wt4JlUxYESSqW%I)>^Z&z&v&5LpM!jL2V(fY3{qvE~ zTj1EjD|004j)xdmcz<*l#R+eE1dO6%j;4e<8`;!tPR$WFnR_)J7rfig)LFWA*Y*WH z24}y2ch%XRPEfz}?yYt!ZF9Ger9fVkyDU`r)h<5RuB^Lsmo#QaaL3UqmW@wwy|}c) z3@h^#Wh3phVDc!)ing+M@%*yT5}=|oC+t*D=m zefTRpiwakkvem%7EOl-3s?6LI9Iv@2!)Gn^eGuzq()!$WU5w&KX_#@B#dFEi4WogZ z2D%-L@O&aV$(K~3^7G_wjoIqufRrYQT33GOLfB5 zd}2@d0MBza7>~^H4EI>bS!hRf?6T2lMC=H9d0#^TJLbNOe-&9%(%b6m$1dqj6D)P5 z&i~kG1I?Don3F^qt6UC+oqx45^CIpv1ghO5B# z^K1wQa@jI{sDy21N~gv_Yo`VjjKwSy!~Bn52`dGC+B@q+m6&vlp5VYVyS}j;4-kP_ zCX4E>14_x2rA_a&pH7ACVb&Wb)7*O5!WX(;Wp+z9~b&o36Ta|$IK097*0hTiL4HgKApt;<`0nJ1ASa4 zI;D$-ex6b7x0g|T3uo-2)XCCdxD5l2;c)v>5p_c=9g ztRJ7#?$?y3{vJoky-*3oqYTbaz4T_?vd#6+WQ3;}#gDkENOqPJO zeW9V8eyM!+t+dT63sazEqFF%;4<4FmAj=0&b;$4E_DD|wU_c-<`T z*jG~^Kyi<`80TU4Lk*9wO#EXzPW#zie3Pz?*=uVBx6!dnz05AGm*uFld-vw%W}7nv zc|+fwYolko!+vT=s!w;v+3ua&jxQZQI@|f4_To0q^iucM3Ry$PmhN1+dz6qG-XYt| zk@%gbSMF}zHXEn4`YvxBO}m+VYRBHT8kbWNJ2uX?o%F}`7J2@#=-4!z-iteLxr5AE z2l+b}QhVK`QtzP!}}=1pd(C(fH=ZlY9S?TfhqNpvjW}4r^oqb2?1cb zj40K*7cS=tw$*ic867Yu(lHqw0d}Lg)hUlT{KWlu0Q(P1yWj%ct~$qgRt2RPCo$`1 z(9n6eyFmoZre6}}8y!e?PAoIEoUhm&aYaAsRz9)h@z-VvLOyC!@8DYR(u6f+2-t zzt2B7#^R3UkqhE%mS*M@C-V88dz0*ZW58VPO~5JNg3HAK!aCA2Dh`SaM> z?E5`izSJLzGP94v0Y_a{Q6S0{l-CdfbYeP)#cL3%dci9=E#-opl|k^yz>g9q>J!9H zQk0oe6Zi%$86e;Jx*KJqD6bSKRNi1mOvuao=vf{^ZKf#e>+u6IMWx-zxX}HK0%^{? zALxzy*(3zwN=umqEzOcjO?^fh$Yv`FYlCRqm0HX!UDNtxX=g zK;F-1p^WrSYuaynoDBTum0PR7MD9b+_{uPt%Ii0SNxT~O-s*iWrRC}|J{Q`Wf^RLt z%@QHbrW-LTu%!}r!GK2YRDTj`a>r#g(8jtke>kuI$TN|tB{-zA#Zh~lnfsA@oppJ? z8F4g1DoRj$t}j#Bh}!o4ru&1p(@!YGk$qV2VZELqBD`E3mM+W$p4(Kd0SkA zNSg}y;)S>RIMt}JRpHyOK09|Eq3lNP!Cs`g1*JDOOm)T$M{LjgvMCqrIw1_xn0+&r zYfODIUvcWXaE7XmaI+xd z%2GtZ7qbE!h2Pmp5L48CFSM9&_^R9ysRHBtS0P2w0asiJiAt?0WGEFy, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s eliminesis sucesoze." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Onu ne povas eliminar %(name)s" + +msgid "Are you sure?" +msgstr "Ka vu esas certa?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar selektita %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Omni" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Nekonocato" + +msgid "Any date" +msgstr "Irga dato" + +msgid "Today" +msgstr "Hodie" + +msgid "Past 7 days" +msgstr "7 antea dii" + +msgid "This month" +msgstr "Ca monato" + +msgid "This year" +msgstr "Ca yaro" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Skribez la korekta %(username)s e pasvorto di kelka staff account. Remarkez " +"ke both feldi darfas rikonocar miniskulo e mayuskulo." + +msgid "Action:" +msgstr "Ago:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar altra %(verbose_name)s" + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "horo dil ago" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id dil objekto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr dil objekto" + +msgid "action flag" +msgstr "flago dil ago" + +msgid "change message" +msgstr "chanjar mesajo" + +msgid "log entry" +msgstr "logo informo" + +msgid "log entries" +msgstr "logo informi" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" agregesis." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" chanjesis - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" eliminesis." + +msgid "LogEntry Object" +msgstr "LogEntry Objekto" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nula feldo chanjesis." + +msgid "None" +msgstr "Nula" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Onu devas selektar la objekti por aplikar oli irga ago. Nula objekto " +"chanjesis." + +msgid "No action selected." +msgstr "Nula ago selektesis." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "La %(name)s \"%(obj)s\" eliminesis sucesoze." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#, python-format +msgid "Change %s" +msgstr "Chanjar %s" + +msgid "Database error" +msgstr "Eroro del datumaro" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s chanjesis sucesoze." +msgstr[1] "%(count)s %(name)s chanjesis sucesoze." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selektita" +msgstr[1] "La %(total_count)s selektita" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Selektita 0 di %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Modifikuro historio: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Por eliminar %(class_name)s %(instance)s on mustas eliminar la sequanta " +"protektita objekti relatita: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django situo admin" + +msgid "Django administration" +msgstr "Django administreyo" + +msgid "Site administration" +msgstr "Administrayo dil ret-situo" + +msgid "Log in" +msgstr "Startar sesiono" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "La pagino ne renkontresis" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Pardonez, ma la demandita pagino ne renkontresis." + +msgid "Home" +msgstr "Hemo" + +msgid "Server error" +msgstr "Eroro del servilo" + +msgid "Server error (500)" +msgstr "Eroro del servilo (500)" + +msgid "Server Error (500)" +msgstr "Eroro del servilo (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Eroro eventis. Ico informesis per e-posto a la administranti dil ret-situo e " +"la eroro esos korektigata balde. Danko pro vua pacienteso." + +msgid "Run the selected action" +msgstr "Exekutar la selektita ago" + +msgid "Go" +msgstr "Irar" + +msgid "Click here to select the objects across all pages" +msgstr "Kliktez hike por selektar la objekti di omna pagini" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Selektar omna %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Desfacar selekto" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Unesme, skribez uzer-nomo ed pasvorto. Pos, vu povos modifikar altra uzer-" +"selekto." + +msgid "Enter a username and password." +msgstr "Skribez uzer-nomo ed pasvorto." + +msgid "Change password" +msgstr "Chanjar pasvorto" + +msgid "Please correct the error below." +msgstr "Korektigez la eroro infre." + +msgid "Please correct the errors below." +msgstr "Korektigez la erori infre." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Skribez nova pasvorto por la uzero %(username)s." + +msgid "Welcome," +msgstr "Bonvenez," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dokumento" + +msgid "Log out" +msgstr "Klozar sesiono" + +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +msgid "History" +msgstr "Historio" + +msgid "View on site" +msgstr "Vidar en la ret-situo" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Remove from sorting" +msgstr "Eskartar de klasifiko" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Precedo dil klasifiko: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Aktivar/desaktivar klasifiko" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar la %(object_name)s '%(escaped_object)s' eliminos relatita objekti, " +"ma vua account ne havas permiso por eliminar la sequanta objekti:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar la %(object_name)s '%(escaped_object)s' eliminus la sequanta " +"protektita objekti relatita:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ka vu volas eliminar la %(object_name)s \"%(escaped_object)s\"? Omna " +"sequanta objekti relatita eliminesos:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Yes, me esas certa" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Eliminar multopla objekti" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar la selektita %(objects_name)s eliminos relatita objekti, ma vua " +"account ne havas permiso por eliminar la sequanta objekti:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar la selektita %(objects_name)s eliminos la sequanta protektita " +"objekti relatita:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ka vu volas eliminar la selektita %(objects_name)s? Omna sequanta objekti ed " +"olia relatita objekti eliminesos:" + +msgid "Change" +msgstr "Modifikar" + +msgid "Delete?" +msgstr "Ka eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Per %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeli en la %(name)s apliko" + +msgid "Add" +msgstr "Agregar" + +msgid "You don't have permission to edit anything." +msgstr "Vu ne havas permiso por facar modifiki." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nulo disponebla" + +msgid "Unknown content" +msgstr "Nekonocata kontenajo" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Vua datumaro instaluro esas defektiva. Verifikez ke la datumaro tabeli " +"kreadesis e ke la uzero havas permiso por lektar la datumaro." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Ka vu obliviis vua pasvorto od uzer-nomo?" + +msgid "Date/time" +msgstr "Dato/horo" + +msgid "User" +msgstr "Uzero" + +msgid "Action" +msgstr "Ago" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ica objekto ne havas chanjo-historio. Olu forsan ne agregesis per ica " +"administrala ret-situo." + +msgid "Show all" +msgstr "Montrar omni" + +msgid "Save" +msgstr "Salvar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Serchar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resulto" +msgstr[1] "%(counter)s resulti" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totala" + +msgid "Save as new" +msgstr "Salvar kom nova" + +msgid "Save and add another" +msgstr "Salvar ed agregar altra" + +msgid "Save and continue editing" +msgstr "Salvar e durar la modifiko" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Danko pro vua spensita tempo en la ret-situo hodie." + +msgid "Log in again" +msgstr "Ristartar sesiono" + +msgid "Password change" +msgstr "Pasvorto chanjo" + +msgid "Your password was changed." +msgstr "Vua pasvorto chanjesis." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por kauciono, skribez vua anta pasvorto e pos skribez vua nova pasvorto " +"dufoye por verifikar ke olu skribesis korekte." + +msgid "Change my password" +msgstr "Modifikar mea pasvorto" + +msgid "Password reset" +msgstr "Pasvorto chanjo" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vua pasvorto chanjesis. Vu darfas startar sesiono nun." + +msgid "Password reset confirmation" +msgstr "Pasvorto chanjo konfirmo" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Skribez vua nova pasvorto dufoye por verifikar ke olu skribesis korekte." + +msgid "New password:" +msgstr "Nova pasvorto:" + +msgid "Confirm password:" +msgstr "Konfirmez pasvorto:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"La link por chanjar pasvorto ne esis valida, forsan pro ke olu ja uzesis. " +"Demandez nova pasvorto chanjo." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se vu ne recevas mesajo, verifikez ke vu skribis la sama e-posto adreso " +"uzita por vua registro e lektez vua spam mesaji." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vu esas recevanta ica mesajo pro ke vu demandis pasvorto chanjo por vua " +"uzero account che %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Irez al sequanta pagino e selektez nova pasvorto:" + +msgid "Your username, in case you've forgotten:" +msgstr "Vua uzernomo, se vu obliviis olu:" + +msgid "Thanks for using our site!" +msgstr "Danko pro uzar nia ret-situo!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "La equipo di %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Ka vu obliviis vua pasvorto? Skribez vua e-posto adreso infre e ni sendos " +"instrucioni por kreadar nova pasvorto." + +msgid "Email address:" +msgstr "E-postala adreso:" + +msgid "Reset my password" +msgstr "Chanjar mea pasvorto" + +msgid "All dates" +msgstr "Omna dati" + +#, python-format +msgid "Select %s" +msgstr "Selektar %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selektar %s por chanjar" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Horo:" + +msgid "Lookup" +msgstr "Serchado" + +msgid "Currently:" +msgstr "Aktuale" + +msgid "Change:" +msgstr "Chanjo:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..fba64da89f8fb8d99dd31e965014a6bd1a0d0105 GIT binary patch literal 464 zcmYLE!A=4(6x8TxkDfi$!~+E1wj~mI(vO)*>gO7K3R-OZ<&Ms9NV3fhTa$Z{_NVb$Fx6w?M z)&-dOTxamK&OIbnkZAgvK;J1D&~^tj*j$V8-NYnJY+?TnRGD zEU7I*Cr`Hlfkh)k6F~WCMbhjeU(@* zsBNHSA+_m}bRnHrq4$;yp>yaa(*OVf literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..d7be82ec5 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po @@ -0,0 +1,145 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..553296860530c3d37bca2f335b2cc9b770a3af40 GIT binary patch literal 16804 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po new file mode 100644 index 000000000..868a4528c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dagur Ammendrup , 2019 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# 479d446b5da12875beba10cac54e9faf_a7ca1e7 , 2013 +# Thordur Sigurdsson , 2016-2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-14 19:53+0200\n" +"PO-Revision-Date: 2020-07-14 22:38+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eyddi %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Get ekki eytt %(name)s" + +msgid "Are you sure?" +msgstr "Ertu viss?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eyða völdum %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Vefstjórn" + +msgid "All" +msgstr "Allt" + +msgid "Yes" +msgstr "Já" + +msgid "No" +msgstr "Nei" + +msgid "Unknown" +msgstr "Óþekkt" + +msgid "Any date" +msgstr "Allar dagsetningar" + +msgid "Today" +msgstr "Dagurinn í dag" + +msgid "Past 7 days" +msgstr "Síðustu 7 dagar" + +msgid "This month" +msgstr "Þessi mánuður" + +msgid "This year" +msgstr "Þetta ár" + +msgid "No date" +msgstr "Engin dagsetning" + +msgid "Has date" +msgstr "Hefur dagsetningu" + +msgid "Empty" +msgstr "Tómt" + +msgid "Not empty" +msgstr "Ekki tómt" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Vinsamlegast sláðu inn rétt %(username)s og lykilorð fyrir starfsmanna " +"aðgang. Takið eftir að í báðum reitum skipta há- og lágstafir máli." + +msgid "Action:" +msgstr "Aðgerð:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Bæta við öðrum %(verbose_name)s" + +msgid "Remove" +msgstr "Fjarlægja" + +msgid "Addition" +msgstr "Viðbót" + +msgid "Change" +msgstr "Breyta" + +msgid "Deletion" +msgstr "Eyðing" + +msgid "action time" +msgstr "tími aðgerðar" + +msgid "user" +msgstr "notandi" + +msgid "content type" +msgstr "efnistag" + +msgid "object id" +msgstr "kenni hlutar" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "framsetning hlutar" + +msgid "action flag" +msgstr "aðgerðarveifa" + +msgid "change message" +msgstr "breyta skilaboði" + +msgid "log entry" +msgstr "kladdafærsla" + +msgid "log entries" +msgstr "kladdafærslur" + +#, python-format +msgid "Added “%(object)s”." +msgstr "Bætti við „%(object)s“." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Breytti „%(object)s“ — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "Eyddi „%(object)s.“" + +msgid "LogEntry Object" +msgstr "LogEntry hlutur" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Bætti við {name} „{object}“." + +msgid "Added." +msgstr "Bætti við." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Breytti {fields} fyrir {name} „{object}“." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Breytti {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Eyddi {name} „{object}“." + +msgid "No fields changed." +msgstr "Engum reitum breytt." + +msgid "None" +msgstr "Ekkert" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Haltu inni „Control“, eða „Command“ á Mac til þess að velja fleira en eitt." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}“ var bætt við." + +msgid "You may edit it again below." +msgstr "Þú mátt breyta þessu aftur hér að neðan." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"{name} „{obj}“ hefur verið bætt við. Þú getur bætt við öðru {name} að neðan." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} „{obj}“ hefur verið breytt. Þú getur breytt því aftur að neðan." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ hefur verið bætt við. Þú getur breytt því aftur að neðan." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" hefur verið breytt. Þú getur bætt við öðru {name} að neðan." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}“ hefur verið breytt." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Hlutir verða að vera valdir til að framkvæma aðgerðir á þeim. Engu hefur " +"verið breytt." + +msgid "No action selected." +msgstr "Engin aðgerð valin." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s“ var eytt." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s með ID \"%(key)s\" er ekki til. Var því mögulega eytt?" + +#, python-format +msgid "Add %s" +msgstr "Bæta við %s" + +#, python-format +msgid "Change %s" +msgstr "Breyta %s" + +#, python-format +msgid "View %s" +msgstr "Skoða %s" + +msgid "Database error" +msgstr "Gagnagrunnsvilla" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s var breytt." +msgstr[1] "%(count)s %(name)s var breytt." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Allir %(total_count)s valdir" +msgstr[1] "Allir %(total_count)s valdir" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 af %(cnt)s valin" + +#, python-format +msgid "Change history: %s" +msgstr "Breytingarsaga: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Að eyða %(class_name)s %(instance)s þyrfti að eyða eftirfarandi tengdum " +"hlutum: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django vefstjóri" + +msgid "Django administration" +msgstr "Django vefstjórn" + +msgid "Site administration" +msgstr "Vefstjóri" + +msgid "Log in" +msgstr "Skrá inn" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s vefstjórn" + +msgid "Page not found" +msgstr "Síða fannst ekki" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Því miður fannst umbeðin síða ekki." + +msgid "Home" +msgstr "Heim" + +msgid "Server error" +msgstr "Kerfisvilla" + +msgid "Server error (500)" +msgstr "Kerfisvilla (500)" + +msgid "Server Error (500)" +msgstr "Kerfisvilla (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Villa kom upp. Hún hefur verið tilkynnt til vefstjóra með tölvupósti og ætti " +"að lagast fljótlega. Þökkum þolinmæðina." + +msgid "Run the selected action" +msgstr "Keyra valda aðgerð" + +msgid "Go" +msgstr "Áfram" + +msgid "Click here to select the objects across all pages" +msgstr "Smelltu hér til að velja alla hluti" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Velja alla %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Hreinsa val" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Módel í appinu %(name)s" + +msgid "Add" +msgstr "Bæta við" + +msgid "View" +msgstr "Skoða" + +msgid "You don’t have permission to view or edit anything." +msgstr "Þú hefur ekki réttindi til að skoða eða breyta neinu." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Fyrst, settu inn notendanafn og lykilorð. Svo geturðu breytt öðrum " +"notendamöguleikum." + +msgid "Enter a username and password." +msgstr "Sláðu inn notandanafn og lykilorð." + +msgid "Change password" +msgstr "Breyta lykilorði" + +msgid "Please correct the error below." +msgstr "Vinsamlegast lagfærðu villuna fyrir neðan." + +msgid "Please correct the errors below." +msgstr "Vinsamlegast leiðréttu villurnar hér að neðan." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Settu inn nýtt lykilorð fyrir notandann %(username)s." + +msgid "Welcome," +msgstr "Velkomin(n)," + +msgid "View site" +msgstr "Skoða vef" + +msgid "Documentation" +msgstr "Skjölun" + +msgid "Log out" +msgstr "Skrá út" + +#, python-format +msgid "Add %(name)s" +msgstr "Bæta við %(name)s" + +msgid "History" +msgstr "Saga" + +msgid "View on site" +msgstr "Skoða á vef" + +msgid "Filter" +msgstr "Sía" + +msgid "Clear all filters" +msgstr "Hreinsa allar síur" + +msgid "Remove from sorting" +msgstr "Taka úr röðun" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Forgangur röðunar: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Röðun af/á" + +msgid "Delete" +msgstr "Eyða" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eyðing á %(object_name)s „%(escaped_object)s“ hefði í för með sér eyðingu á " +"tengdum hlutum en þú hefur ekki réttindi til að eyða eftirfarandi hlutum:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Að eyða %(object_name)s „%(escaped_object)s“ þyrfti að eyða eftirfarandi " +"tengdum hlutum:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ertu viss um að þú viljir eyða %(object_name)s „%(escaped_object)s“? Öllu " +"eftirfarandi verður eytt:" + +msgid "Objects" +msgstr "Hlutir" + +msgid "Yes, I’m sure" +msgstr "Já ég er viss." + +msgid "No, take me back" +msgstr "Nei, fara til baka" + +msgid "Delete multiple objects" +msgstr "Eyða mörgum hlutum." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Að eyða völdu %(objects_name)s leiðir til þess að skyldum hlutum er eytt, en " +"þinn aðgangur hefur ekki réttindi til að eyða eftirtöldum hlutum:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Að eyða völdum %(objects_name)s myndi leiða til þess að eftirtöldum skyldum " +"hlutum yrði eytt:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ertu viss um að þú viljir eyða völdum %(objects_name)s? Öllum eftirtöldum " +"hlutum og skyldum hlutum verður eytt:" + +msgid "Delete?" +msgstr "Eyða?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Eftir %(filter_title)s " + +msgid "Summary" +msgstr "Samantekt" + +msgid "Recent actions" +msgstr "Nýlegar aðgerðir" + +msgid "My actions" +msgstr "Mínar aðgerðir" + +msgid "None available" +msgstr "Engin fáanleg" + +msgid "Unknown content" +msgstr "Óþekkt innihald" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Eitthvað er að gagnagrunnsuppsetningu. Gakktu úr skugga um að allar töflur " +"séu til staðar og að notandinn hafi aðgang að grunninum." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Þú ert skráður inn sem %(username)s, en ert ekki með réttindi að þessari " +"síðu. Viltu skrá þig inn sem annar notandi?" + +msgid "Forgotten your password or username?" +msgstr "Gleymt notandanafn eða lykilorð?" + +msgid "Toggle navigation" +msgstr "" + +msgid "Date/time" +msgstr "Dagsetning/tími" + +msgid "User" +msgstr "Notandi" + +msgid "Action" +msgstr "Aðgerð" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Þessi hlutur hefur enga breytingasögu. Hann var líklega ekki búinn til á " +"þessu stjórnunarsvæði." + +msgid "Show all" +msgstr "Sýna allt" + +msgid "Save" +msgstr "Vista" + +msgid "Popup closing…" +msgstr "Sprettigluggi lokast..." + +msgid "Search" +msgstr "Leita" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s niðurstaða" +msgstr[1] "%(counter)s niðurstöður" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s í heildina" + +msgid "Save as new" +msgstr "Vista sem nýtt" + +msgid "Save and add another" +msgstr "Vista og búa til nýtt" + +msgid "Save and continue editing" +msgstr "Vista og halda áfram að breyta" + +msgid "Save and view" +msgstr "Vista og skoða" + +msgid "Close" +msgstr "Loka" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Breyta völdu %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Bæta við %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eyða völdu %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Takk fyrir að verja tíma í vefsíðuna í dag." + +msgid "Log in again" +msgstr "Skráðu þig inn aftur" + +msgid "Password change" +msgstr "Breyta lykilorði" + +msgid "Your password was changed." +msgstr "Lykilorði þínu var breytt" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vinsamlegast skrifaðu gamla lykilorðið þitt til öryggis. Sláðu svo nýja " +"lykilorðið tvisvar inn svo að hægt sé að ganga úr skugga um að þú hafir ekki " +"gert innsláttarvillu." + +msgid "Change my password" +msgstr "Breyta lykilorðinu mínu" + +msgid "Password reset" +msgstr "Endurstilla lykilorð" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Lykilorðið var endurstillt. Þú getur núna skráð þig inn á vefsvæðið." + +msgid "Password reset confirmation" +msgstr "Staðfesting endurstillingar lykilorðs" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Vinsamlegast settu inn nýja lykilorðið tvisvar til að forðast " +"innsláttarvillur." + +msgid "New password:" +msgstr "Nýtt lykilorð:" + +msgid "Confirm password:" +msgstr "Staðfestu lykilorð:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Endurstilling lykilorðs tókst ekki. Slóðin var ógild. Hugsanlega hefur hún " +"nú þegar verið notuð. Vinsamlegast biddu um nýja endurstillingu." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Við höfum sent þér tölvupóst með leiðbeiningum til að endurstilla lykilorðið " +"þitt, sé aðgangur til með netfanginu sem þú slóst inn. Þú ættir að fá " +"leiðbeiningarnar fljótlega. " + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ef þú færð ekki tölvupóstinn, gakktu úr skugga um að netfangið sem þú slóst " +"inn sé það sama og þú notaðir til að stofna aðganginn og að það hafi ekki " +"lent í spamsíu." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Þú ert að fá þennan tölvupóst því þú baðst um endurstillingu á lykilorði " +"fyrir aðganginn þinn á %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Vinsamlegast farðu á eftirfarandi síðu og veldu nýtt lykilorð:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Notandanafnið þitt ef þú skyldir hafa gleymt því:" + +msgid "Thanks for using our site!" +msgstr "Takk fyrir að nota vefinn okkar!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s hópurinn" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Hefurðu gleymt lykilorðinu þínu? Sláðu inn netfangið þitt hér að neðan og " +"við sendum þér tölvupóst með leiðbeiningum til að setja nýtt lykilorð. " + +msgid "Email address:" +msgstr "Netfang:" + +msgid "Reset my password" +msgstr "Endursstilla lykilorðið mitt" + +msgid "All dates" +msgstr "Allar dagsetningar" + +#, python-format +msgid "Select %s" +msgstr "Veldu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Veldu %s til að breyta" + +#, python-format +msgid "Select %s to view" +msgstr "Veldu %s til að skoða" + +msgid "Date:" +msgstr "Dagsetning:" + +msgid "Time:" +msgstr "Tími:" + +msgid "Lookup" +msgstr "Fletta upp" + +msgid "Currently:" +msgstr "Eins og er:" + +msgid "Change:" +msgstr "Breyta:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..29c2bc12ac009b2f2f7d1016be981cf0d3623716 GIT binary patch literal 5174 zcmb`KO^h5z6~_xQAz>2|;*dZ>LMod$Yvau9N1U}8XA?X2PGTo(Ti&sQ1wqtI*L2rT zch%5cJ-Y)DvV~B>!61?#@g-+4E^tDEQzSSb4j_aC;(+-0zwVmZ z@px@4nbuVQx?a7idiCnn$Go$t^fiWOH_`)?-p$x?VhJxiCvIkJ2Y3>E5BMX;pMvl>{YzT zv@e6VfN!|`w;bOB(FOY+coTRQq;|gV%6|xc9Qli29lRHfP0bgr4E`3p8~mH&t(YXze*h%; zjLX-+4AU+u&p1Prw=Q4^DpHokjULNPgeuI0aI_Pl7a0bB_C5`3sJRLF(ryNcx`! zzW@e~e*$TKI`1#+{VYiKoB*lbmq56Hy$O=uDoEox3!Vjk0KNsjj6sqe{{~6#=1q*v zgLi_|?@{n8;LG4Q!9Rlm_!=gG;_j~?wflFM|EJ@B9B;zp(D-k0yd9)^ce(sMj`utH zLynJtm_|0?xYco+W7%;M#L{QeF2CIoBDR%Y?jc`{yYFd`Y@#@P7-<3t?qJ)I9z?1j zJ%U8*|7j$O$1)Q6l^%)~s2sgIb<>$aBkv`(`v@YR}+}|YnDAF@XGnBzY^G*+~ z6M80*Xf7W|qL`+5nnI%WNqZbUnAYOiyd{z0)`XiD-@K)%Ej}TTO)EWit+H7zDp7^a z@(y87CsrZbllp05*`BUYp=gAXZ%)`=p_?*fdjn$<>A(fwC+twJuA-rw9nOV$-9+lV zu~0SJ+#24@o8ux3A?CtzgI+3ZZ@)a2k?G339I8d_b+vu6DWisrSxq+LRKz`2Q=vuv zdF4rVK%#QwSLO{FDD7QWvm2{+i%}mm%j{6o8uGxA+))nXFSaNVniGIlO2}{Vv(Ao$O;7FxW6LdG%lJ}8U1+fzn)Xjzd!K} z%Ol|-}B(}mt zqY=w)g-1r)fajZG3GY#PzCD((OO6!u_oEU%MvD47R0$s=MQ)!efukkZxk}i+t`KVp z@u+sbyOr=BQOAAUY&5c?|aoh5vX6uCX61dfyp_LLI7n9=Z?vL=y8sq(SIhssA}SCML&PO~bXnVOj{Pi-$x&GP9T z)hBjro5C~pqDXAH9t)j>!kW0s>w$?qEP_SlV@yecW%iUUWV@F{MI}$8j`maG%W_?c zsLJ=_1jTl#ntV%OZKpapxxBnwvDBt&$(2geM3aTFeLy{LU{WQMTgMjmFU+qGYq~Nu zwikgaHSEGZRpnN$*vU>Pl-@;4Gft$PJ6f-mcdqMEUo9Dz=XKL~*sQC3XG7V6p;a6a zV~4{u7Gb$&;wY(d-O01b+{`Xse9mpbA1&qF@>V6F%ZMb1PMocUEL-)n3%HKdvQ?o&>C*+``Rt6ff_GJRjvd2x zm=PcU*JvK;vSct0%I?66(7r2abBimuxZsXd9wZyYkPD={ADUBYZ zX=Rs|vhx~8?sYYgMmO99H6UA7;n2Ae8?M%b&d&F5LGYSjrfswH`BiW*C2YQzohv3f zjaagN9m+1ELUtNEmw@x~+mPa-1#fmKT+(965|NRSZTo{97l?-83GyG zl|DkNGHR>FvDV^UM6j2_+{?`CN2LA#SeLtSU>)qeih-wS<+1D}PR`iJ$+XyxRVxqE z+=(mXuKwCe5dXQ;MKO@8x}9aGxSySgF@Cr|kS)01tuQq0%NUK~PFWPlc3WYJuoiHH z_bhe*L6e1Rg|cbnd_=`qX>IHxSly@|qO|y$sEJri@IZ@BMO`Pn5Aw`^{>)Hr(DvKQyp z=e|JvRM*o#^-+lo%YwX literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..5ddb17c0c --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po @@ -0,0 +1,267 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# gudbergur , 2012 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# Thordur Sigurdsson , 2016-2017,2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-04-06 17:37+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Fáanleg %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Þetta er listi af því %s sem er í boði. Þú getur ákveðið hluti með því að " +"velja þá í boxinu að neðan og ýta svo á \"Velja\" örina milli boxana tveggja." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skrifaðu í boxið til að sía listann af því %s sem er í boði." + +msgid "Filter" +msgstr "Sía" + +msgid "Choose all" +msgstr "Velja öll" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Smelltu til að velja allt %s í einu." + +msgid "Choose" +msgstr "Veldu" + +msgid "Remove" +msgstr "Fjarlægja" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valin %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Þetta er listinn af völdu %s. Þú getur fjarlægt hluti með því að velja þá í " +"boxinu að neðan og ýta svo á \"Eyða\" örina á milli boxana tveggja." + +msgid "Remove all" +msgstr "Eyða öllum" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Smelltu til að fjarlægja allt valið %s í einu." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] " %(sel)s í %(cnt)s valin" +msgstr[1] " %(sel)s í %(cnt)s valin" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Enn eru óvistaðar breytingar í reitum. Ef þú keyrir aðgerð munu breytingar " +"ekki verða vistaðar." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Þú hefur valið aðgerð en hefur ekki vistað breytingar á reitum. Vinsamlegast " +"veldu 'Í lagi' til að vista. Þú þarft að endurkeyra aðgerðina." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Þú hefur valið aðgerð en hefur ekki gert breytingar á reitum. Þú ert líklega " +"að leita að 'Fara' hnappnum frekar en 'Vista' hnappnum." + +msgid "Now" +msgstr "Núna" + +msgid "Midnight" +msgstr "Miðnætti" + +msgid "6 a.m." +msgstr "6 f.h." + +msgid "Noon" +msgstr "Hádegi" + +msgid "6 p.m." +msgstr "6 e.h." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Athugaðu að þú ert %s klukkustund á undan tíma vefþjóns." +msgstr[1] "Athugaðu að þú ert %s klukkustundum á undan tíma vefþjóns." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Athugaðu að þú ert %s klukkustund á eftir tíma vefþjóns." +msgstr[1] "Athugaðu að þú ert %s klukkustundum á eftir tíma vefþjóns." + +msgid "Choose a Time" +msgstr "Veldu tíma" + +msgid "Choose a time" +msgstr "Veldu tíma" + +msgid "Cancel" +msgstr "Hætta við" + +msgid "Today" +msgstr "Í dag" + +msgid "Choose a Date" +msgstr "Veldu dagsetningu" + +msgid "Yesterday" +msgstr "Í gær" + +msgid "Tomorrow" +msgstr "Á morgun" + +msgid "January" +msgstr "janúar" + +msgid "February" +msgstr "febrúar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "maí" + +msgid "June" +msgstr "júní" + +msgid "July" +msgstr "júlí" + +msgid "August" +msgstr "ágúst" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "nóvember" + +msgid "December" +msgstr "desember" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Jan" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Maí" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Jún" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Júl" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ágú" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Sep" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Okt" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nóv" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Des" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Þ" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "F" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Sýna" + +msgid "Hide" +msgstr "Fela" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..45e90398094b5dcedd1096411bc2a57fdbb2c87e GIT binary patch literal 17309 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 aU8t}7gg*~eU%|APOn?7VTlmhi&ipUuYDd!m literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..e3807668a --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,742 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# 0d21a39e384d88c2313b89b5042c04cb, 2017 +# Carlo Miron , 2018-2019 +# Davide Targa , 2021 +# Denis Darii , 2011 +# Flavio Curella , 2013 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# Mirco Grillo , 2018,2020 +# Nicola Larosa , 2013 +# palmux , 2014-2015,2021 +# Mattia Procopio , 2015 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-11-12 11:54+0000\n" +"Last-Translator: Davide Targa \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Cancella %(verbose_name_plural)s selezionati" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Cancellati/e con successo %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Impossibile cancellare %(name)s " + +msgid "Are you sure?" +msgstr "Confermi?" + +msgid "Administration" +msgstr "Amministrazione" + +msgid "All" +msgstr "Tutti" + +msgid "Yes" +msgstr "Sì" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Sconosciuto" + +msgid "Any date" +msgstr "Qualsiasi data" + +msgid "Today" +msgstr "Oggi" + +msgid "Past 7 days" +msgstr "Ultimi 7 giorni" + +msgid "This month" +msgstr "Questo mese" + +msgid "This year" +msgstr "Quest'anno" + +msgid "No date" +msgstr "Senza data" + +msgid "Has date" +msgstr "Ha la data" + +msgid "Empty" +msgstr "Vuoto" + +msgid "Not empty" +msgstr "Non vuoto" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Inserisci %(username)s e password corretti per un account di staff. Nota che " +"entrambi i campi distinguono maiuscole e minuscole." + +msgid "Action:" +msgstr "Azione:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Aggiungi un altro %(verbose_name)s." + +msgid "Remove" +msgstr "Elimina" + +msgid "Addition" +msgstr "Aggiunta " + +msgid "Change" +msgstr "Modifica" + +msgid "Deletion" +msgstr "Eliminazione" + +msgid "action time" +msgstr "momento dell'azione" + +msgid "user" +msgstr "utente" + +msgid "content type" +msgstr "content type" + +msgid "object id" +msgstr "id dell'oggetto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "rappr. dell'oggetto" + +msgid "action flag" +msgstr "flag di azione" + +msgid "change message" +msgstr "messaggio di modifica" + +msgid "log entry" +msgstr "voce di log" + +msgid "log entries" +msgstr "voci di log" + +#, python-format +msgid "Added “%(object)s”." +msgstr "\"%(object)s\" aggiunto." + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "%(object)s%(changes)s modificati" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" cancellato." + +msgid "LogEntry Object" +msgstr "Oggetto LogEntry" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "Aggiunto {name} \"{object}\"." + +msgid "Added." +msgstr "Aggiunto." + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "Modificati {fields} per {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificati {fields}." + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "Eliminato {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nessun campo modificato." + +msgid "None" +msgstr "Nessuno" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"Tieni premuto \"Control\", o \"Command\" su Mac, per selezionarne più di uno." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "Il {name} \"{obj}\" è stato aggiunto con successo." + +msgid "You may edit it again below." +msgstr "Puoi modificarlo di nuovo qui sotto." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "" +"Il {name} \"{obj}\" è stato aggiunto con successo. Puoi aggiungere un altro " +"{name} qui sotto." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "" +"Il {name} \"{obj}\" è stato modificato con successo. Puoi modificarlo " +"nuovamente qui sotto." + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "" +"Il {name} \"{obj}\" è stato aggiunto con successo. Puoi modificarlo " +"nuovamente qui sotto." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "" +"Il {name} \"{obj}\" è stato modificato con successo. Puoi aggiungere un " +"altro {name} qui sotto." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "Il {name} \"{obj}\" è stato modificato con successo." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Occorre selezionare degli oggetti per potervi eseguire azioni. Nessun " +"oggetto è stato cambiato." + +msgid "No action selected." +msgstr "Nessuna azione selezionata." + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s \"%(obj)s\" cancellato correttamente." + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"%(name)s con ID \"%(key)s\" non esiste. Probabilmente è stato cancellato?" + +#, python-format +msgid "Add %s" +msgstr "Aggiungi %s" + +#, python-format +msgid "Change %s" +msgstr "Modifica %s" + +#, python-format +msgid "View %s" +msgstr "Vista %s" + +msgid "Database error" +msgstr "Errore del database" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s modificato correttamente." +msgstr[1] "%(count)s %(name)s modificati correttamente." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selezionato" +msgstr[1] "Tutti i %(total_count)s selezionati" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 di %(cnt)s selezionati" + +#, python-format +msgid "Change history: %s" +msgstr "Tracciato delle modifiche: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La cancellazione di %(class_name)s %(instance)s richiederebbe l'eliminazione " +"dei seguenti oggetti protetti correlati: %(related_objects)s" + +msgid "Django site admin" +msgstr "Amministrazione sito Django" + +msgid "Django administration" +msgstr "Amministrazione Django" + +msgid "Site administration" +msgstr "Amministrazione sito" + +msgid "Log in" +msgstr "Accedi" + +#, python-format +msgid "%(app)s administration" +msgstr "Amministrazione %(app)s" + +msgid "Page not found" +msgstr "Pagina non trovata" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "Spiacenti, ma la pagina richiesta non è stata trovata." + +msgid "Home" +msgstr "Pagina iniziale" + +msgid "Server error" +msgstr "Errore del server" + +msgid "Server error (500)" +msgstr "Errore del server (500)" + +msgid "Server Error (500)" +msgstr "Errore del server (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Si è verificato un errore. Gli amministratori del sito ne sono stati " +"informati per email, e vi porranno rimedio a breve. Grazie per la vostra " +"pazienza." + +msgid "Run the selected action" +msgstr "Esegui l'azione selezionata" + +msgid "Go" +msgstr "Vai" + +msgid "Click here to select the objects across all pages" +msgstr "Clicca qui per selezionare gli oggetti da tutte le pagine." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleziona tutti %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Annulla la selezione" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelli nell'applicazione %(name)s" + +msgid "Add" +msgstr "Aggiungi" + +msgid "View" +msgstr "Vista" + +msgid "You don’t have permission to view or edit anything." +msgstr "Non hai i permessi per visualizzare o modificare nulla." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"Prima di tutto inserisci nome utente e password. Poi potrai modificare le " +"altre impostazioni utente." + +msgid "Enter a username and password." +msgstr "Inserisci nome utente e password." + +msgid "Change password" +msgstr "Modifica password" + +msgid "Please correct the error below." +msgstr "Per favore, correggi l'errore sottostante" + +msgid "Please correct the errors below." +msgstr "Correggi gli errori qui sotto." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Inserisci una nuova password per l'utente %(username)s." + +msgid "Welcome," +msgstr "Benvenuto," + +msgid "View site" +msgstr "Visualizza il sito" + +msgid "Documentation" +msgstr "Documentazione" + +msgid "Log out" +msgstr "Annulla l'accesso" + +#, python-format +msgid "Add %(name)s" +msgstr "Aggiungi %(name)s" + +msgid "History" +msgstr "Storia" + +msgid "View on site" +msgstr "Vedi sul sito" + +msgid "Filter" +msgstr "Filtra" + +msgid "Clear all filters" +msgstr "Cancella tutti i filtri" + +msgid "Remove from sorting" +msgstr "Elimina dall'ordinamento" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Priorità d'ordinamento: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Abilita/disabilita ordinamento" + +msgid "Delete" +msgstr "Cancella" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"La cancellazione di %(object_name)s '%(escaped_object)s' causerebbe la " +"cancellazione di oggetti collegati, ma questo account non ha i permessi per " +"cancellare i seguenti tipi di oggetti:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"La cancellazione di %(object_name)s '%(escaped_object)s' richiederebbe " +"l'eliminazione dei seguenti oggetti protetti correlati:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Sicuro di voler cancellare %(object_name)s \"%(escaped_object)s\"? Tutti i " +"seguenti oggetti collegati verranno cancellati:" + +msgid "Objects" +msgstr "Oggetti" + +msgid "Yes, I’m sure" +msgstr "Sì, sono sicuro" + +msgid "No, take me back" +msgstr "No, torna indietro" + +msgid "Delete multiple objects" +msgstr "Cancella più oggetti" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Per eliminare l'elemento %(objects_name)s selezionato è necessario rimuovere " +"anche gli oggetti correlati, ma il tuo account non dispone " +"dell'autorizzazione a eliminare i seguenti tipi di oggetti:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"L'eliminazione dell'elemento %(objects_name)s selezionato richiederebbe la " +"rimozione dei seguenti oggetti protetti correlati:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Confermi la cancellazione dell'elemento %(objects_name)s selezionato? " +"Saranno rimossi tutti i seguenti oggetti e le loro voci correlate:" + +msgid "Delete?" +msgstr "Cancellare?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Per %(filter_title)s " + +msgid "Summary" +msgstr "Riepilogo" + +msgid "Recent actions" +msgstr "Azioni recenti" + +msgid "My actions" +msgstr "Le mie azioni" + +msgid "None available" +msgstr "Nulla disponibile" + +msgid "Unknown content" +msgstr "Contenuto sconosciuto" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Qualcosa non è andato a buon fine nell'installazione del database. " +"Assicurati che le tabelle del database siano state create, e che il database " +"sia leggibile dall'utente corretto." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Ti sei autenticato come %(username)s, ma non sei autorizzato ad accedere a " +"questa pagina. Vorresti autenticarti con un altro account?" + +msgid "Forgotten your password or username?" +msgstr "Hai dimenticato la password o lo username?" + +msgid "Toggle navigation" +msgstr "Abilita/disabilita navigazione" + +msgid "Start typing to filter…" +msgstr "Inizia a scrivere per filtrare..." + +msgid "Filter navigation items" +msgstr "Filtra gli oggetti di navigazione" + +msgid "Date/time" +msgstr "Data/ora" + +msgid "User" +msgstr "Utente" + +msgid "Action" +msgstr "Azione" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"Questo oggetto non ha cambiamenti registrati. Probabilmente non è stato " +"creato con questo sito di amministrazione." + +msgid "Show all" +msgstr "Mostra tutto" + +msgid "Save" +msgstr "Salva" + +msgid "Popup closing…" +msgstr "Chiusura popup..." + +msgid "Search" +msgstr "Cerca" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s risultato" +msgstr[1] "%(counter)s risultati" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s in tutto" + +msgid "Save as new" +msgstr "Salva come nuovo" + +msgid "Save and add another" +msgstr "Salva e aggiungi un altro" + +msgid "Save and continue editing" +msgstr "Salva e continua le modifiche" + +msgid "Save and view" +msgstr "Salva e visualizza" + +msgid "Close" +msgstr "Chiudi" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Modifica la selezione %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Aggiungi un altro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Elimina la selezione %(model)s" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "Grazie per avere trascorso del tempo di qualità sul sito oggi." + +msgid "Log in again" +msgstr "Accedi di nuovo" + +msgid "Password change" +msgstr "Cambio password" + +msgid "Your password was changed." +msgstr "La tua password è stata cambiata." + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Inserisci la password attuale, per ragioni di sicurezza, e poi la nuova " +"password due volte, per verificare di averla scritta correttamente." + +msgid "Change my password" +msgstr "Modifica la mia password" + +msgid "Password reset" +msgstr "Reimposta la password" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "La tua password è stata impostata. Ora puoi effettuare l'accesso." + +msgid "Password reset confirmation" +msgstr "Conferma reimpostazione password" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Inserisci la nuova password due volte, per verificare di averla scritta " +"correttamente." + +msgid "New password:" +msgstr "Nuova password:" + +msgid "Confirm password:" +msgstr "Conferma la password:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Il link per la reimpostazione della password non era valido, forse perché " +"era già stato usato. Richiedi una nuova reimpostazione della password." + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Abbiamo inviato istruzioni per impostare la password, se esiste un account " +"valido all'indirizzo email che hai indicato. Dovresti riceverle a breve." + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se non ricevi un messaggio email, accertati di aver inserito l'indirizzo con " +"cui ti sei registrato, e controlla la cartella dello spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ricevi questa mail perché hai richiesto di reimpostare la password del tuo " +"account utente presso %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Vai alla pagina seguente e scegli una nuova password:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "Il tuo nome utente, in caso tu l'abbia dimenticato:" + +msgid "Thanks for using our site!" +msgstr "Grazie per aver usato il nostro sito!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Il team di %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"Password dimenticata? Inserisci il tuo indirizzo email qui sotto e ti " +"invieremo le istruzioni per impostarne una nuova." + +msgid "Email address:" +msgstr "Indirizzo email:" + +msgid "Reset my password" +msgstr "Reimposta la mia password" + +msgid "All dates" +msgstr "Tutte le date" + +#, python-format +msgid "Select %s" +msgstr "Scegli %s" + +#, python-format +msgid "Select %s to change" +msgstr "Scegli %s da modificare" + +#, python-format +msgid "Select %s to view" +msgstr "Seleziona %s per visualizzarlo" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Ora:" + +msgid "Lookup" +msgstr "Consultazione" + +msgid "Currently:" +msgstr "Attualmente:" + +msgid "Change:" +msgstr "Modifica:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfa33eb7b99f9709faf44e6db3a2b271de0371b8 GIT binary patch literal 5119 zcmcJSTZ|k>6+jCZAZ!Q^2f{1C6%)s6?3wi%Y@Bg6cw>8=HC}t;UE8rlKsD2~GZpuA zjr%d{H7E){gddQ22@nYJ5F!#Ed?A4Z36dp(K)?q`K|%xpA0Q!QAwUrlNSxbUvybuG z7$I6yeY&b{Ro%XI@9moBx70qZxDHY7l=5Pw&I@bYxSn{aQtyHvf-i&L3H(0fr=AV< zpTJjA|3#?(Ht>(|HrlTS{wwfSCL5#uP4E@)9=H`Y;Jxr9yag74k3)XyNp7Or$KcE1 zCqw=7fnS0wp}q!R0>1%eo^OW!Z^K8Ze-AFgJD5cJFF=vcq0D=U8zSlnD0)5#MbA$_ zS^o?0Q}E01<8VKd$htp-GT%?R9fZ$88FxFkFT%UvXW@5YAD&_IH^3jjH^S%Po8b$A zTW-Zh)a&pLcr5UJP{tMT_3)!m#(fov{L}C)@R#s*__x4Y*d&p^6H5EuP@jRXqyAnf z>s*A|9Q7C#|fFf7GufPvN+1IVFt^DF?DE(L9gYZY8{kAQYziffB z|6hlX!$WL>_}w#sR|206{BhvV0)HO(T;Q()e-rroz&`~339^mqYT#c2{~GxBz!xB) zul^DE&(Kbj+9|hi$)0Ts&y!GMLHzJ;$_@(VQ17JNMQKppMiKixKoNheQ)EBn!Zf9? z%JV&xCS{x={wbI2*YG+N9%K*X+Etb%{%f4cRBT-cETpWv^7YWWVK-JSo=%MSO5KvjN)ZBPL&0TXem3wS0XoF2`mzDJP3v`-0BBZkN+(6UQ`blWWf^ z4Rv_fpW2=u*s>qdYV?}e5!<%CmQB@+ZKZ`tSJaG)bLtPd$g1NeDcg=0@rpWLBv#Ft zwB6;tqUKzbxK1}$C%sR&<+iEM`$C&kURHN~k!sVmCK7vQHXYbh%j+~YmqqoP7uGG? zbxCwn({3(0sNVXdUsk8uxfctZE)5kR_EHPBpI34VT?7}qF4O$-uGO*2u=J8P>o&Mi zzJJfG4EH4SJ*!(Q!HZndk)b{9l5&cczr=gQepwq{g`PyWWz&M3-c~uvHY}PV)Ux@q zMMhT7m%V1V%^I63wYtx18U-)-A2q5>^q(~H5$>_*dtUTbiz|K0E90rT*iYV?=cUri zbmW(-H`>&m>b%YHMVU@Kt84J%VMJmyZQ8l>$?npAD?uRn-4mb7b47_R$2#f9JZhO7Gb)gWADoiSn_x)mOh4|i#%s|YN$&i3ro*}XjAny zZmb?cdZT(7VFb*2#L_$}U1ql$_YraO9jz-P zttZK=k~?cWjC6&ZQiCHst2w2{lky36vpG(#XHtiw*JjqY&G|&y=GM0@n7ojXs4Z-0 zElSA^ZHwI^%|vo>z2stHuWdYMqois+r{+`t7$3d*Y*asM(~Jmf>gX}T$d8@2eV^v_ zxvb-&`h!I$t1tSd9-BW^KWzt2MCB)V~eFt{!;Tk((vb?^S znk0)&?$f63o48k8()U+9)amiHY_xsv0YsBdVLGJnC8aaj-y6oW0G8+yTpfDpN~!IIvwY$BZyVg9U_vs zG99_B?-SQ@u~XAYQpB-Q3vJt>T0s|y(UHlA&D6C|P0D1e0wWE%q(zxL<4}`3HDg?v zqjVoBwf8SEo=|sz)os z4q2I(gAEoa#piI5)ToC^3c1l&p3<=?&o+2NWsP;N!>6e5Zgp=-T_$c92`!wGOV3Rr zA3Hur_?K?;(Gp%P5WwPI^OZsteS5CvJ z@%k!O4j8l>deZ+vyI{-B)jNfMsUyB;5{apllZN=j#mcTjTS#cg$%n`y@9)5Dq?64o zt!9a3^$;PoYFi9gBs+}Q*<#9sBT1Kj{!@s49I~h7YUoTIfZftiFLn-Go0V*v&QY_B?kOOAcJt=i3h~(b(PvpLK;;o zlQAg8W(I{gISqB?X;ih, 2011 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# Mirco Grillo , 2020 +# Nicola Larosa , 2011-2012 +# palmux , 2015,2021 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-01-15 15:58+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibili" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Questa è la lista dei %s disponibili. Puoi sceglierne alcuni selezionandoli " +"nella casella qui sotto e poi facendo clic sulla freccia \"Scegli\" tra le " +"due caselle." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Scrivi in questa casella per filtrare l'elenco dei %s disponibili." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Scegli tutto" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Fai clic per scegliere tutti i %s in una volta." + +msgid "Choose" +msgstr "Scegli" + +msgid "Remove" +msgstr "Elimina" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s scelti" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Questa è la lista dei %s scelti. Puoi eliminarne alcuni selezionandoli nella " +"casella qui sotto e poi facendo clic sulla freccia \"Elimina\" tra le due " +"caselle." + +msgid "Remove all" +msgstr "Elimina tutti" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Fai clic per eliminare tutti i %s in una volta." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s di %(cnt)s selezionato" +msgstr[1] "%(sel)s di %(cnt)s selezionati" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ci sono aggiornamenti non salvati su singoli campi modificabili. Se esegui " +"un'azione, le modifiche non salvate andranno perse." + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"Hai selezionato un'azione, ma non hai ancora salvato le modifiche apportate " +"a campi singoli. Fai clic su OK per salvare. Poi dovrai rieseguire l'azione." + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Hai selezionato un'azione e non hai ancora apportato alcuna modifica ai " +"campi singoli. Probabilmente stai cercando il pulsante Vai, invece di Salva." + +msgid "Now" +msgstr "Adesso" + +msgid "Midnight" +msgstr "Mezzanotte" + +msgid "6 a.m." +msgstr "6 del mattino" + +msgid "Noon" +msgstr "Mezzogiorno" + +msgid "6 p.m." +msgstr "6 del pomeriggio" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Sei %s ora in anticipo rispetto al server." +msgstr[1] "Nota: Sei %s ore in anticipo rispetto al server." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Sei %s ora in ritardo rispetto al server." +msgstr[1] "Nota: Sei %s ore in ritardo rispetto al server." + +msgid "Choose a Time" +msgstr "Scegli un orario" + +msgid "Choose a time" +msgstr "Scegli un orario" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Today" +msgstr "Oggi" + +msgid "Choose a Date" +msgstr "Scegli una data" + +msgid "Yesterday" +msgstr "Ieri" + +msgid "Tomorrow" +msgstr "Domani" + +msgid "January" +msgstr "Gennaio" + +msgid "February" +msgstr "Febbraio" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Aprile" + +msgid "May" +msgstr "Maggio" + +msgid "June" +msgstr "Giugno" + +msgid "July" +msgstr "Luglio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Settembre" + +msgid "October" +msgstr "Ottobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Dicembre" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "Gen" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "Feb" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "Mar" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "Apr" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "Mag" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "Giu" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "Lug" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "Ago" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "Set" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "Ott" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "Nov" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "Dic" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ma" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Me" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "G" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostra" + +msgid "Hide" +msgstr "Nascondi" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b769e84a73dca848e146a64926070bfd928a70a0 GIT binary patch literal 18553 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, 2020 +# Claude Paroz , 2016 +# Goto Hayato , 2019 +# Jannis Leidel , 2011 +# Shinichi Katsumata , 2019 +# Shinya Okano , 2012-2018,2021 +# Takuro Onoue , 2020 +# Takuya N , 2020 +# Tetsuya Morimoto , 2011 +# 上田慶祐 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-21 10:22+0200\n" +"PO-Revision-Date: 2021-10-13 11:41+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "選択された %(verbose_name_plural)s の削除" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d 個の %(items)s を削除しました。" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s が削除できません" + +msgid "Are you sure?" +msgstr "よろしいですか?" + +msgid "Administration" +msgstr "管理" + +msgid "All" +msgstr "全て" + +msgid "Yes" +msgstr "はい" + +msgid "No" +msgstr "いいえ" + +msgid "Unknown" +msgstr "不明" + +msgid "Any date" +msgstr "いつでも" + +msgid "Today" +msgstr "今日" + +msgid "Past 7 days" +msgstr "過去 7 日間" + +msgid "This month" +msgstr "今月" + +msgid "This year" +msgstr "今年" + +msgid "No date" +msgstr "日付なし" + +msgid "Has date" +msgstr "日付あり" + +msgid "Empty" +msgstr "空" + +msgid "Not empty" +msgstr "空でない" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"スタッフアカウントの正しい%(username)sとパスワードを入力してください。どちら" +"のフィールドも大文字と小文字は区別されます。" + +msgid "Action:" +msgstr "操作:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "%(verbose_name)s の追加" + +msgid "Remove" +msgstr "削除" + +msgid "Addition" +msgstr "追加" + +msgid "Change" +msgstr "変更" + +msgid "Deletion" +msgstr "削除" + +msgid "action time" +msgstr "操作時刻" + +msgid "user" +msgstr "ユーザー" + +msgid "content type" +msgstr "コンテンツタイプ" + +msgid "object id" +msgstr "オブジェクト ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "オブジェクトの文字列表現" + +msgid "action flag" +msgstr "操作種別" + +msgid "change message" +msgstr "変更メッセージ" + +msgid "log entry" +msgstr "ログエントリー" + +msgid "log entries" +msgstr "ログエントリー" + +#, python-format +msgid "Added “%(object)s”." +msgstr "“%(object)s” を追加しました。" + +#, python-format +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” を変更しました — %(changes)s" + +#, python-format +msgid "Deleted “%(object)s.”" +msgstr "“%(object)s” を削除しました。" + +msgid "LogEntry Object" +msgstr "ログエントリー オブジェクト" + +#, python-brace-format +msgid "Added {name} “{object}”." +msgstr "{name} “{object}” を追加しました。" + +msgid "Added." +msgstr "追加されました。" + +msgid "and" +msgstr "と" + +#, python-brace-format +msgid "Changed {fields} for {name} “{object}”." +msgstr "{name} “{object}” の {fields} を変更しました。" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} を変更しました。" + +#, python-brace-format +msgid "Deleted {name} “{object}”." +msgstr "{name} “{object}” を削除しました。" + +msgid "No fields changed." +msgstr "変更はありませんでした。" + +msgid "None" +msgstr "None" + +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "" +"複数選択するときには Control キーを押したまま選択してください。Mac は " +"Command キーを使ってください" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} “{obj}” を追加しました。" + +msgid "You may edit it again below." +msgstr "以下で再度編集できます。" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was added successfully. You may add another {name} below." +msgstr "{name} “{obj}” を追加しました。別の {name} を以下から追加できます。" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} “{obj}” を変更しました。以下から再度編集できます。" + +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} “{obj}” を追加しました。続けて編集できます。" + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} “{obj}” を変更しました。 別の {name} を以下から追加できます。" + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} “{obj}” を変更しました。" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"操作を実行するには、対象を選択する必要があります。何も変更されませんでした。" + +msgid "No action selected." +msgstr "操作が選択されていません。" + +#, python-format +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” を削除しました。" + +#, python-format +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "" +"ID “%(key)s” の%(name)sは見つかりませんでした。削除された可能性があります。" + +#, python-format +msgid "Add %s" +msgstr "%s を追加" + +#, python-format +msgid "Change %s" +msgstr "%s を変更" + +#, python-format +msgid "View %s" +msgstr "%sを表示" + +msgid "Database error" +msgstr "データベースエラー" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s 個の %(name)s を変更しました。" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s 個選択されました" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s個の内ひとつも選択されていません" + +#, python-format +msgid "Change history: %s" +msgstr "変更履歴: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s を削除するには以下の保護された関連オブジェクトを" +"削除することになります: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django サイト管理" + +msgid "Django administration" +msgstr "Django 管理サイト" + +msgid "Site administration" +msgstr "サイト管理" + +msgid "Log in" +msgstr "ログイン" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 管理" + +msgid "Page not found" +msgstr "ページが見つかりません" + +msgid "We’re sorry, but the requested page could not be found." +msgstr "申し訳ありませんが、お探しのページは見つかりませんでした。" + +msgid "Home" +msgstr "ホーム" + +msgid "Server error" +msgstr "サーバーエラー" + +msgid "Server error (500)" +msgstr "サーバーエラー (500)" + +msgid "Server Error (500)" +msgstr "サーバーエラー (500)" + +msgid "" +"There’s been an error. It’s been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"エラーが発生しました。サイト管理者にメールで報告されたので、修正されるまでし" +"ばらくお待ちください。" + +msgid "Run the selected action" +msgstr "選択された操作を実行" + +msgid "Go" +msgstr "実行" + +msgid "Click here to select the objects across all pages" +msgstr "全ページの項目を選択するにはここをクリック" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s個ある%(module_name)s を全て選択" + +msgid "Clear selection" +msgstr "選択を解除" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s アプリケーション内のモデル" + +msgid "Add" +msgstr "追加" + +msgid "View" +msgstr "表示" + +msgid "You don’t have permission to view or edit anything." +msgstr "表示または変更のためのパーミッションがありません。" + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." +msgstr "" +"まずユーザー名とパスワードを登録してください。その後詳細情報が編集可能になり" +"ます。" + +msgid "Enter a username and password." +msgstr "ユーザー名とパスワードを入力してください。" + +msgid "Change password" +msgstr "パスワードの変更" + +msgid "Please correct the error below." +msgstr "下記のエラーを修正してください。" + +msgid "Please correct the errors below." +msgstr "下記のエラーを修正してください。" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"%(username)sさんの新しいパスワードを入力してください。" + +msgid "Welcome," +msgstr "ようこそ" + +msgid "View site" +msgstr "サイトを表示" + +msgid "Documentation" +msgstr "ドキュメント" + +msgid "Log out" +msgstr "ログアウト" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s を追加" + +msgid "History" +msgstr "履歴" + +msgid "View on site" +msgstr "サイト上で表示" + +msgid "Filter" +msgstr "フィルター" + +msgid "Clear all filters" +msgstr "全てのフィルターを解除" + +msgid "Remove from sorting" +msgstr "ソート条件から外します" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "ソート優先順位: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "昇順降順を切り替えます" + +msgid "Delete" +msgstr "削除" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' の削除時に関連づけられたオブジェクトも削" +"除しようとしましたが、あなたのアカウントには以下のタイプのオブジェクトを削除" +"するパーミッションがありません:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' を削除するには以下の保護された関連オブ" +"ジェクトを削除することになります:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\"を削除しますか? 関連づけられている以下" +"のオブジェクトも全て削除されます:" + +msgid "Objects" +msgstr "オブジェクト" + +msgid "Yes, I’m sure" +msgstr "はい、大丈夫です" + +msgid "No, take me back" +msgstr "戻る" + +msgid "Delete multiple objects" +msgstr "複数のオブジェクトを削除します" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"選択した %(objects_name)s を削除すると関連するオブジェクトも削除しますが、あ" +"なたのアカウントは以下のオブジェクト型を削除する権限がありません:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"選択した %(objects_name)s を削除すると以下の保護された関連オブジェクトを削除" +"することになります:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"本当に選択した %(objects_name)s を削除しますか? 以下の全てのオブジェクトと関" +"連する要素が削除されます:" + +msgid "Delete?" +msgstr "削除しますか?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s で絞り込む" + +msgid "Summary" +msgstr "概要" + +msgid "Recent actions" +msgstr "最近行った操作" + +msgid "My actions" +msgstr "自分の操作" + +msgid "None available" +msgstr "利用不可" + +msgid "Unknown content" +msgstr "不明なコンテント" + +msgid "" +"Something’s wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"データベースのインストールに問題があります。適切なデータベーステーブルが作ら" +"れているか、適切なユーザーがデータベースを読み込み可能かを確認してください。" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"あなたは %(username)s として認証されましたが、このページへのアクセス許可があ" +"りません。他のアカウントでログインしますか?" + +msgid "Forgotten your password or username?" +msgstr "パスワードまたはユーザー名を忘れましたか?" + +msgid "Toggle navigation" +msgstr "ナビゲーションを切り替えます" + +msgid "Start typing to filter…" +msgstr "絞り込みの入力..." + +msgid "Filter navigation items" +msgstr "ナビゲーション項目の絞り込み" + +msgid "Date/time" +msgstr "日付/時刻" + +msgid "User" +msgstr "ユーザー" + +msgid "Action" +msgstr "操作" + +msgid "" +"This object doesn’t have a change history. It probably wasn’t added via this " +"admin site." +msgstr "" +"このオブジェクトには変更履歴がありません。おそらくこの管理サイトで追加したも" +"のではありません。" + +msgid "Show all" +msgstr "全件表示" + +msgid "Save" +msgstr "保存" + +msgid "Popup closing…" +msgstr "ポップアップを閉じています..." + +msgid "Search" +msgstr "検索" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "結果 %(counter)s" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "全 %(full_result_count)s 件" + +msgid "Save as new" +msgstr "新規保存" + +msgid "Save and add another" +msgstr "保存してもう一つ追加" + +msgid "Save and continue editing" +msgstr "保存して編集を続ける" + +msgid "Save and view" +msgstr "保存して表示" + +msgid "Close" +msgstr "閉じる" + +#, python-format +msgid "Change selected %(model)s" +msgstr "選択された %(model)s の変更" + +#, python-format +msgid "Add another %(model)s" +msgstr "%(model)s の追加" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "選択された %(model)s を削除" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "ご利用ありがとうございました。" + +msgid "Log in again" +msgstr "もう一度ログイン" + +msgid "Password change" +msgstr "パスワードの変更" + +msgid "Your password was changed." +msgstr "あなたのパスワードは変更されました" + +msgid "" +"Please enter your old password, for security’s sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"セキュリティ上の理由から元のパスワードの入力が必要です。新しいパスワードは正" +"しく入力したか確認できるように二度入力してください。" + +msgid "Change my password" +msgstr "パスワードの変更" + +msgid "Password reset" +msgstr "パスワードをリセット" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "パスワードがセットされました。ログインしてください。" + +msgid "Password reset confirmation" +msgstr "パスワードリセットの確認" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "確認のために、新しいパスワードを二回入力してください。" + +msgid "New password:" +msgstr "新しいパスワード:" + +msgid "Confirm password:" +msgstr "新しいパスワード (確認用) :" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"パスワードリセットのリンクが不正です。おそらくこのリンクは既に使われていま" +"す。もう一度パスワードリセットしてください。" + +msgid "" +"We’ve emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"入力されたメールアドレスを持つアカウントが存在する場合、パスワードを設定する" +"ためのメールを送信しました。すぐに届くはずです。" + +msgid "" +"If you don’t receive an email, please make sure you’ve entered the address " +"you registered with, and check your spam folder." +msgstr "" +"メールが届かない場合は、登録したメールアドレスを入力したか確認し、スパムフォ" +"ルダに入っていないか確認してください。" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"このメールは %(site_name)s で、あなたのアカウントのパスワードリセットが要求さ" +"れたため、送信されました。" + +msgid "Please go to the following page and choose a new password:" +msgstr "次のページで新しいパスワードを選んでください:" + +msgid "Your username, in case you’ve forgotten:" +msgstr "あなたのユーザー名 (もし忘れていたら):" + +msgid "Thanks for using our site!" +msgstr "ご利用ありがとうございました!" + +#, python-format +msgid "The %(site_name)s team" +msgstr " %(site_name)s チーム" + +msgid "" +"Forgotten your password? Enter your email address below, and we’ll email " +"instructions for setting a new one." +msgstr "" +"パスワードを忘れましたか? メールアドレスを以下に入力すると、新しいパスワード" +"の設定方法をお知らせします。" + +msgid "Email address:" +msgstr "メールアドレス:" + +msgid "Reset my password" +msgstr "パスワードをリセット" + +msgid "All dates" +msgstr "いつでも" + +#, python-format +msgid "Select %s" +msgstr "%s を選択" + +#, python-format +msgid "Select %s to change" +msgstr "変更する %s を選択" + +#, python-format +msgid "Select %s to view" +msgstr "表示する%sを選択" + +msgid "Date:" +msgstr "日付:" + +msgid "Time:" +msgstr "時刻:" + +msgid "Lookup" +msgstr "検索" + +msgid "Currently:" +msgstr "現在の値:" + +msgid "Change:" +msgstr "変更後:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..700feaf9603e7e2e61c419e570412cf055948bb9 GIT binary patch literal 5284 zcmb`JU2Ggz6~`~IKyfJ_DHJFzy_mX9n(X=`jgxMgHX)7Mq&N=omNWuIn%%wjPC7fY z%*@)^2aso%5ZkenHXqbhoX;kyiIq6eR!W-0;R*TxNC+f&ss!U*+q_grNbrKh|J=E| zUT>T<6+RApY1sG^E-A z@YCR7B_C5f1>y*H4*Uc-0n$E`YWxcLGUOXz4155a(D*AL&38fCcMlp&VSOO!xep{g z4}o<47d<=RNSSQP)vceUm7I;JBq(m{S99T z^j!|pycQ*|0WpO=3z8lksy_z)0rL03>tOhc!TP@|{sY{F{(mcZ2QE1Qc^CK|SO?>0 z!9Rku?`9aExD}-HJC(dsahGC3F{PMRv_V?etN0_;UjQkt`xS>2UsXJ!IHEYFcnXC3 zWm%?3AfMGMxfvv#DGtAh`Zy}g!Jb5=n2Df%3zgpgGpH1gVN`^+EHI6XRT3UWCI2r) zrTCWh3&WqAM@t6Y5(D2J^?MH*wRsB2L1L@R}S`4lR>&8Jl_#UH|rH7I!< zxC-?fN~U)Sb4WW<*AuAEqPCELLUB%o@+6f;RPx0N)W=Yf0$39&y-&(|5W`>@4g}W9{$nCgh80hAj%PpJ|VH?Zi zwn$q&LXKl|6+M&nw-)h%;{v|mn5F#py!>hiRfM97=u3C-*l zc+)0yNa{U$GOHOlT^LD6S_jh+uo>Hmge+MzP|imoeAEn;GgJs4HA5;-g}~YoWUdg>*Dc+qKzHqIncYHY zYo;ULp*L64yA^qra%Tu1HA5<=gut4SN=^yki&-Y@CR_wLZ?km-dZ?|suiY}Kuf4jj zQ**QQBto4Fdb4uog1%TPYdbVERy{M86}NWo5J@xW-odun)^7ahg*PX|-xIcj7Z&Bo z-FQY;-FA_&Y&YEQbnD6Rx3k?&IA%q8-L{VKcG08L)G+;;MR`k8OLMqsb-1a8H?NGY zTD80hrS3bLn7>dwU};?WlK&J+!1TP_+z0t#90|H7=`b-`u`w{!-16 zrn-#?Q(;0YWT_~3#U8gYV`#d$mL8_<2zT8}v9|D<`FV6!m$1W|%!HLhs*dtCP`jdM zl<(H+wi#JlGs10_opz$!%t+B$*SwYopX-{|*5N-2`7cJXZ~yd_i|XGC2y@<*(%=bJ z9PTd;4D(iA8qG^#YDfuBmd5(o8fuFDKc6`=UOYHCTew0068QOxe&G$j@Rpyy<`*WI z+N$*Wx#?>oe*REd9?j4F?C|a7;@)xJJFg}O@V%pce#rMu2FFbLg$sV6;O8fOZ`9B4 z_dTo_^}VZD=X;mv=fASO@4fDOQ#9O{hlU?*>3%;yP#hSX8$G*Vo8}g}zHIygG{c=I z{QOP7aGlK^KQViHeCF)CteNJlrlysemDH@Frio07EztUf16br2`lH4XXY~g$GH~cp=edA^&WN=;SDen@wGk+Ckkk=qj zO<#di(Lbi#j8X5+xl?;*j$K;d**>qu_u!lbQ^`z-g8CqK>dBxd&lHC*W97mCKxCYU zDdhzZ%6;H)6{h9L!d3__=nex9R~fi`qgw+MuDt6T$;U>qb;pYY7OlU-EvB#Z%@xL> zd^uW!XK@?lr>_m-QL@s=0m6s*B!6h;of8PU*{SP(zR&k2C@{%tWaWh}nkeo)R~$UH z;IWiO#^qs$ho^6hRhc(8y<6XhO=Zlw4&Ym8cA4NQPgQWv!y4nP=uJW0@#3NpSYAi^OFd6fy2GQx?Y!f#adC?5Q&Fn;)8XQ~ z<-5rISG>7*_Blke%jjdN+E`pA^_jo`Gku*xJeB*?D(sgG@8yO|a7Cx7mLIjc|U^ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..e3ce22266 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Goto Hayato , 2021 +# Jannis Leidel , 2011 +# Shinya Okano , 2012,2014-2016 +# Takuro Onoue , 2020 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2021-07-02 13:55+0000\n" +"Last-Translator: Goto Hayato \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "利用可能 %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"これが使用可能な %s のリストです。下のボックスで項目を選択し、2つのボックス間" +"の \"選択\"の矢印をクリックして、いくつかを選択することができます。" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "使用可能な %s のリストを絞り込むには、このボックスに入力します。" + +msgid "Filter" +msgstr "フィルター" + +msgid "Choose all" +msgstr "全て選択" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "クリックするとすべての %s を選択します。" + +msgid "Choose" +msgstr "選択" + +msgid "Remove" +msgstr "削除" + +#, javascript-format +msgid "Chosen %s" +msgstr "選択された %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"これが選択された %s のリストです。下のボックスで選択し、2つのボックス間の " +"\"削除\"矢印をクリックして一部を削除することができます。" + +msgid "Remove all" +msgstr "すべて削除" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "クリックするとすべての %s を選択から削除します。" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s個中%(sel)s個選択" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"フィールドに未保存の変更があります。操作を実行すると未保存の変更は失われま" +"す。" + +msgid "" +"You have selected an action, but you haven’t saved your changes to " +"individual fields yet. Please click OK to save. You’ll need to re-run the " +"action." +msgstr "" +"操作を選択しましたが、フィールドに未保存の変更があります。OKをクリックして保" +"存してください。その後、操作を再度実行する必要があります。" + +msgid "" +"You have selected an action, and you haven’t made any changes on individual " +"fields. You’re probably looking for the Go button rather than the Save " +"button." +msgstr "" +"操作を選択しましたが、フィールドに変更はありませんでした。もしかして保存ボタ" +"ンではなくて実行ボタンをお探しですか。" + +msgid "Now" +msgstr "現在" + +msgid "Midnight" +msgstr "0時" + +msgid "6 a.m." +msgstr "午前 6 時" + +msgid "Noon" +msgstr "12時" + +msgid "6 p.m." +msgstr "午後 6 時" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "ノート: あなたの環境はサーバー時間より、%s時間進んでいます。" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "ノート: あなたの環境はサーバー時間より、%s時間遅れています。" + +msgid "Choose a Time" +msgstr "時間を選択" + +msgid "Choose a time" +msgstr "時間を選択" + +msgid "Cancel" +msgstr "キャンセル" + +msgid "Today" +msgstr "今日" + +msgid "Choose a Date" +msgstr "日付を選択" + +msgid "Yesterday" +msgstr "昨日" + +msgid "Tomorrow" +msgstr "明日" + +msgid "January" +msgstr "1月" + +msgid "February" +msgstr "2月" + +msgid "March" +msgstr "3月" + +msgid "April" +msgstr "4月" + +msgid "May" +msgstr "5月" + +msgid "June" +msgstr "6月" + +msgid "July" +msgstr "7月" + +msgid "August" +msgstr "8月" + +msgid "September" +msgstr "9月" + +msgid "October" +msgstr "10月" + +msgid "November" +msgstr "11月" + +msgid "December" +msgstr "12月" + +msgctxt "abbrev. month January" +msgid "Jan" +msgstr "1月" + +msgctxt "abbrev. month February" +msgid "Feb" +msgstr "2月" + +msgctxt "abbrev. month March" +msgid "Mar" +msgstr "3月" + +msgctxt "abbrev. month April" +msgid "Apr" +msgstr "4月" + +msgctxt "abbrev. month May" +msgid "May" +msgstr "5月" + +msgctxt "abbrev. month June" +msgid "Jun" +msgstr "6月" + +msgctxt "abbrev. month July" +msgid "Jul" +msgstr "7月" + +msgctxt "abbrev. month August" +msgid "Aug" +msgstr "8月" + +msgctxt "abbrev. month September" +msgid "Sep" +msgstr "9月" + +msgctxt "abbrev. month October" +msgid "Oct" +msgstr "10月" + +msgctxt "abbrev. month November" +msgid "Nov" +msgstr "11月" + +msgctxt "abbrev. month December" +msgid "Dec" +msgstr "12月" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "日" + +msgctxt "one letter Monday" +msgid "M" +msgstr "月" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "火" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "水" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "木" + +msgctxt "one letter Friday" +msgid "F" +msgstr "金" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "土" + +msgid "Show" +msgstr "表示" + +msgid "Hide" +msgstr "非表示" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed45180dd7220974c01d2e46054156db6a4cb804 GIT binary patch literal 20101 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 000000000..75aee9c58 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,699 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# David A. , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s წარმატებით წაიშალა." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ვერ იშლება" + +msgid "Are you sure?" +msgstr "დარწმუნებული ხართ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "არჩეული %(verbose_name_plural)s-ის წაშლა" + +msgid "Administration" +msgstr "ადმინისტრირება" + +msgid "All" +msgstr "ყველა" + +msgid "Yes" +msgstr "კი" + +msgid "No" +msgstr "არა" + +msgid "Unknown" +msgstr "გაურკვეველი" + +msgid "Any date" +msgstr "ნებისმიერი თარიღი" + +msgid "Today" +msgstr "დღეს" + +msgid "Past 7 days" +msgstr "ბოლო 7 დღე" + +msgid "This month" +msgstr "მიმდინარე თვე" + +msgid "This year" +msgstr "მიმდინარე წელი" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"გთხოვთ, შეიყვანოთ სწორი %(username)s და პაროლი პერსონალის ანგარიშისთვის. " +"იქონიეთ მხედველობაში, რომ ორივე ველი ითვალისწინებს მთავრულს." + +msgid "Action:" +msgstr "მოქმედება:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "კიდევ ერთი %(verbose_name)s-ის დამატება" + +msgid "Remove" +msgstr "წაშლა" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "შეცვლა" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "მოქმედების დრო" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "ობიექტის id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ობიექტის წარმ." + +msgid "action flag" +msgstr "მოქმედების დროშა" + +msgid "change message" +msgstr "შეცვლის შეტყობინება" + +msgid "log entry" +msgstr "ლოგის ერთეული" + +msgid "log entries" +msgstr "ლოგის ერთეულები" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "დამატებულია \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "შეცვლილია \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "წაშლილია \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "ჟურნალის ჩანაწერის ობიექტი" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "და" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "არცერთი ველი არ შეცვლილა." + +msgid "None" +msgstr "არცერთი" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"ობიექტებზე მოქმედებების შესასრულებლად ისინი არჩეული უნდა იყოს. არცერთი " +"ობიექტი არჩეული არ არის." + +msgid "No action selected." +msgstr "მოქმედება არჩეული არ არის." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" წარმატებით წაიშალა." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "დავამატოთ %s" + +#, python-format +msgid "Change %s" +msgstr "შევცვალოთ %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "მონაცემთა ბაზის შეცდომა" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s წარმატებით შეიცვალა." +msgstr[1] "%(count)s %(name)s წარმატებით შეიცვალა." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s-ია არჩეული" +msgstr[1] "%(total_count)s-ია არჩეული" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-დან არცერთი არჩეული არ არის" + +#, python-format +msgid "Change history: %s" +msgstr "ცვლილებების ისტორია: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django-ს ადმინისტრირების საიტი" + +msgid "Django administration" +msgstr "Django-ს ადმინისტრირება" + +msgid "Site administration" +msgstr "საიტის ადმინისტრირება" + +msgid "Log in" +msgstr "შესვლა" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s ადმინისტრირება" + +msgid "Page not found" +msgstr "გვერდი ვერ მოიძებნა" + +msgid "We're sorry, but the requested page could not be found." +msgstr "უკაცრავად, მოთხოვნილი გვერდი ვერ მოიძებნა." + +msgid "Home" +msgstr "საწყისი გვერდი" + +msgid "Server error" +msgstr "სერვერის შეცდომა" + +msgid "Server error (500)" +msgstr "სერვერის შეცდომა (500)" + +msgid "Server Error (500)" +msgstr "სერვერის შეცდომა (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"მოხდა შეცდომა. ინფორმაცია მასზე გადაეცა საიტის ადმინისტრატორებს ელ. ფოსტით " +"და ის უნდა შესწორდეს უმოკლეს ვადებში. გმადლობთ მოთმინებისთვის." + +msgid "Run the selected action" +msgstr "არჩეული მოქმედების შესრულება" + +msgid "Go" +msgstr "გადასვლა" + +msgid "Click here to select the objects across all pages" +msgstr "ყველა გვერდზე არსებული ობიექტის მოსანიშნად დააწკაპეთ აქ" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "ყველა %(total_count)s %(module_name)s-ის მონიშვნა" + +msgid "Clear selection" +msgstr "მონიშვნის გასუფთავება" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"ჯერ შეიყვანეთ მომხმარებლის სახელი და პაროლი. ამის შემდეგ თქვენ გექნებათ " +"მომხმარებლის სხვა ოპციების რედაქტირების შესაძლებლობა." + +msgid "Enter a username and password." +msgstr "შეიყვანეთ მომხმარებლის სახელი და პაროლი" + +msgid "Change password" +msgstr "პაროლის შეცვლა" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "გთხოვთ, შეასწოროთ ქვემოთმოყვანილი შეცდომები." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"შეიყვანეთ ახალი პაროლი მომხმარებლისათვის %(username)s." + +msgid "Welcome," +msgstr "კეთილი იყოს თქვენი მობრძანება," + +msgid "View site" +msgstr "საიტის ნახვა" + +msgid "Documentation" +msgstr "დოკუმენტაცია" + +msgid "Log out" +msgstr "გამოსვლა" + +#, python-format +msgid "Add %(name)s" +msgstr "დავამატოთ %(name)s" + +msgid "History" +msgstr "ისტორია" + +msgid "View on site" +msgstr "წარმოდგენა საიტზე" + +msgid "Filter" +msgstr "ფილტრი" + +msgid "Remove from sorting" +msgstr "დალაგებიდან მოშორება" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "დალაგების პრიორიტეტი: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "დალაგების გადართვა" + +msgid "Delete" +msgstr "წავშალოთ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"ობიექტების წაშლა: %(object_name)s '%(escaped_object)s' გამოიწვევს " +"დაკავშირებული ობიექტების წაშლას, მაგრამ თქვენ არა გაქვთ შემდეგი ტიპების " +"ობიექტების წაშლის უფლება:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s ტიპის '%(escaped_object)s' ობიექტის წაშლა მოითხოვს ასევე " +"შემდეგი დაკავშირებული ობიექტების წაშლას:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"ნამდვილად გსურთ, წაშალოთ %(object_name)s \"%(escaped_object)s\"? ყველა " +"ქვემოთ მოყვანილი დაკავშირებული ობიექტი წაშლილი იქნება:" + +msgid "Objects" +msgstr "ობიექტები" + +msgid "Yes, I'm sure" +msgstr "კი, ნამდვილად" + +msgid "No, take me back" +msgstr "არა, დამაბრუნეთ უკან" + +msgid "Delete multiple objects" +msgstr "რამდენიმე ობიექტის წაშლა" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s ტიპის ობიექტის წაშლა ითხოვს ასევე შემდეგი ობიექტების " +"წაშლას, მაგრამ თქვენ არ გაქვთ ამის ნებართვა:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"არჩეული %(objects_name)s ობიექტის წაშლა მოითხოვს ასევე შემდეგი დაცული " +"დაკავშირეული ობიექტების წაშლას:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"დარწმუნებული ხართ, რომ გსურთ %(objects_name)s ობიექტის წაშლა? ყველა შემდეგი " +"ობიექტი, და მათზე დამოკიდებული ჩანაწერები წაშლილი იქნება:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "წავშალოთ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s მიხედვით " + +msgid "Summary" +msgstr "შეჯამება" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "მოდელები %(name)s აპლიკაციაში" + +msgid "Add" +msgstr "დამატება" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "არ არის მისაწვდომი" + +msgid "Unknown content" +msgstr "უცნობი შიგთავსი" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"თქვენი მონაცემთა ბაზის ინსტალაცია არაკორექტულია. დარწმუნდით, რომ მონაცემთა " +"ბაზის შესაბამისი ცხრილები შექმნილია, და მონაცემთა ბაზის წაკითხვა შეუძლია " +"შესაბამის მომხმარებელს." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "დაგავიწყდათ თქვენი პაროლი ან მომხმარებლის სახელი?" + +msgid "Date/time" +msgstr "თარიღი/დრო" + +msgid "User" +msgstr "მომხმარებელი" + +msgid "Action" +msgstr "მოქმედება" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"ამ ობიექტს ცვლილებების ისტორია არა აქვს. როგორც ჩანს, იგი არ იყო დამატებული " +"ადმინისტრირების საიტის მეშვეობით." + +msgid "Show all" +msgstr "ვაჩვენოთ ყველა" + +msgid "Save" +msgstr "შევინახოთ" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "ძებნა" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s შედეგი" +msgstr[1] "%(counter)s შედეგი" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "სულ %(full_result_count)s" + +msgid "Save as new" +msgstr "შევინახოთ, როგორც ახალი" + +msgid "Save and add another" +msgstr "შევინახოთ და დავამატოთ ახალი" + +msgid "Save and continue editing" +msgstr "შევინახოთ და გავაგრძელოთ რედაქტირება" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "მონიშნული %(model)s-ის შეცვლა" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "მონიშნული %(model)s-ის წაშლა" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "გმადლობთ, რომ დღეს ამ საიტთან მუშაობას დაუთმეთ დრო." + +msgid "Log in again" +msgstr "ხელახლა შესვლა" + +msgid "Password change" +msgstr "პაროლის შეცვლა" + +msgid "Your password was changed." +msgstr "თქვენი პაროლი შეიცვალა." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"გთხოვთ, უსაფრთხოების დაცვის მიზნით, შეიყვანოთ თქვენი ძველი პაროლი, შემდეგ კი " +"ახალი პაროლი ორჯერ, რათა დარწმუნდეთ, რომ იგი შეყვანილია სწორად." + +msgid "Change my password" +msgstr "შევცვალოთ ჩემი პაროლი" + +msgid "Password reset" +msgstr "პაროლის აღდგენა" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"თქვენი პაროლი დაყენებულია. ახლა შეგიძლიათ გადახვიდეთ შემდეგ გვერდზე და " +"შეხვიდეთ სისტემაში." + +msgid "Password reset confirmation" +msgstr "პაროლი შეცვლის დამოწმება" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"გთხოვთ, შეიყვანეთ თქვენი ახალი პაროლი ორჯერ, რათა დავრწმუნდეთ, რომ იგი " +"სწორად ჩაბეჭდეთ." + +msgid "New password:" +msgstr "ახალი პაროლი:" + +msgid "Confirm password:" +msgstr "პაროლის დამოწმება:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"პაროლის აღდგენის ბმული არასწორი იყო, შესაძლოა იმის გამო, რომ იგი უკვე ყოფილა " +"გამოყენებული. გთხოვთ, კიდევ ერთხელ სცადოთ პაროლის აღდგენა." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"თქვენ მიიღეთ ეს წერილი იმიტომ, რომ გააკეთეთ პაროლის თავიდან დაყენების " +"მოთხოვნა თქვენი მომხმარებლის ანგარიშისთვის %(site_name)s-ზე." + +msgid "Please go to the following page and choose a new password:" +msgstr "გთხოვთ, გადახვიდეთ შემდეგ გვერდზე და აირჩიოთ ახალი პაროლი:" + +msgid "Your username, in case you've forgotten:" +msgstr "თქვენი მომხმარებლის სახელი (თუ დაგავიწყდათ):" + +msgid "Thanks for using our site!" +msgstr "გმადლობთ, რომ იყენებთ ჩვენს საიტს!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s საიტის გუნდი" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"დაგავიწყდათ თქვენი პაროლი? შეიყვანეთ თქვენი ელ. ფოსტის მისამართი ქვემოთ და " +"ჩვენ გამოგიგზავნით მითითებებს ახალი პაროლის დასაყენებლად." + +msgid "Email address:" +msgstr "ელ. ფოსტის მისამართი:" + +msgid "Reset my password" +msgstr "აღვადგინოთ ჩემი პაროლი" + +msgid "All dates" +msgstr "ყველა თარიღი" + +#, python-format +msgid "Select %s" +msgstr "ავირჩიოთ %s" + +#, python-format +msgid "Select %s to change" +msgstr "აირჩიეთ %s შესაცვლელად" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "თარიღი;" + +msgid "Time:" +msgstr "დრო:" + +msgid "Lookup" +msgstr "ძიება" + +msgid "Currently:" +msgstr "ამჟამად:" + +msgid "Change:" +msgstr "შეცვლა:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..a66299c892fe35522ccf7a1f8f69741b3f38507a GIT binary patch literal 5516 zcmds)%aa>d6~;RdNHT<1Fwa1^GgT(zvRfm$h&_>U3Yf%>Ato+IP^5|~szMZ zbhk#HEMOrhid81W&LoaQX-EQu=ZX!*f(3s7OIYyGAHXgv!h+wqrzMRi^29hrQI)Qd zzWX?j?|$dpmi@Q8ZoM4v+{5RSeD1s@2o8b&2IU#PBM6RzJK(#)zkqjw|0w7GEb%q) zy{x|u&VhHllMi?R{4{tE_!;m4P~uqdRxkl?2ftO$p9H_o{5xO+{4>a35MnHTHBjO& zgW|u!*Cp^_@M-X`;JZM_m&EOXC%|um!smD374VOs_)>nPWzKAGL^AY$1?EVEl1%CJaYJcE^iu0i8PyyKr{s1mx_b0Fo-tnOz zxEowQKwkEx<_vx9qzB}AAD>U~`IJm}kiM+bnEr-@Rids&p&C z7dE0eiB=P94(7p1ls0V=taO~qZ3!kaMckdv62G6@)H@_`^MWayX?hnEB?-$WDvTpi zC0H5nXSVA$tl!5}y{BfU;-s)y@NnF+!P&T##%rA-_=3C+}NzzPMo%GDC}(0esJEOv;;YD@L0$7gGMLL4Sz+)nk3E< zsBNNM+E@G`yV2%Y%G`CWS=}s)8K-OF+BI?NL#(=skWF0QMDS%NHBHgFv@;7@!v$o^ zFj}=m-(n-#i@r0s+q^Q9)TBI9MrHBdA|n;%%^0~>v>7y9*9q^SvAJ$JG7VOUesXHY zZQm}Y<@$P}nR*6~+nlD7aMC`Vi1r&_3`8?gvxr@K#Ot?N8l?9YrW>{B(^TpZrE8Xp zmBOGEZ^W%$l#tsdt=wyKFCDp_xm9k@rb(Rh;+I8>t^dVU?@k@}d%)%iI&ZvBER0@M|{9sY~6o zoR;w6>=j}!;F{gIN!|MHE?S4}`R{w16aFu87kti?1Mi!-c5*041n=eIaO3OWB zc_}64bFg9h`NU5vaoTnd;FGTPqBR>fY}Bor)7E8cF(+T_6vcXdX{q1uR|*Lkx9!DB z({-2hP-93+|D_Aj(xJJtXU;w}J$|iHom+8fVN+;v3+kq@7mKC!B#P4$QvNKr#mTQW zPKC=;JIU3yS@=-ebS+*5b+f!07ZaX!b0L~Lm-MnI2~WAKo7YXc?x*?5qbH0GPcEkO zCu@gJ%<=2te@?>D;F-~2Yc#lOJPb#JS4V?Oqrpp~!IjbAITrcl@jpU0Cu&hs-qmA_cVUwnO*fNNj5xi-JYZ!YlqJ>Y+sX!m?#d@9d(BifHAl~IML z1QFoNo|J(j5CtAA{ltH>eQEb9er%LWBtlVy!HH0ex9Y~L`pURc(xJchk%m%c{<$!w zOA6%2S;|2#F%o0WqGu+c4ocz4ObA#$%Z7+e(zg)-MAuIJKZ=SpoB8B!$Q@*^%!j`I za^1XWh$6P7iGcs(e6!wXSc-(#3nu(0DhnOvWFl%QxysL~awXSL@0nTfX_-ymbqhvr z->gcgpIXj(nZ2a~K$tVCSd+sje`!6A^R};qO0ehfTUrl_DKBOeqBvYfy+T)*APqf3 z2`MhW1ei!yvibtBU-OY}(hoOqvC78Mi=%P({P0MTq<1i(J*36C6wF!It2o@%XY8>q zRQ1?g8wRkSw(Sw!RCjzC$eDibM>GY;#$Gy+RehDP$`Y>`$*#6+uu8hgo?6H@5#?6t znUtdjQ?pN_(^uWq#usi8!T3N>S-dh?YeZb=W~P$Rh{ww&kF2JQfbf zh#@92#z@rgf4}leLmy$A|3Jx${Cd4n`jQUaD6Hxx1Dv43oaA~g`O%q#(gV=$_z6wv z*Z-!W^hgwbq5-MoFk~POqw6-C($b%YZIKKaUYZb_(f_KCW+V&34Yl1pdychB, 2013,2015 +# David A. , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "მისაწვდომი %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"ეს არის მისაწვდომი %s-ის სია. ზოგიერთი მათგანის ასარჩევად, მონიშვნით ისინი " +"ქვედა სარკმელში და დააწკაპუნეთ ორ სარკმელს შორის მდებარე ისარზე \"არჩევა\" ." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "აკრიფეთ ამ სარკმელში მისაწვდომი %s-ის სიის გასაფილტრად." + +msgid "Filter" +msgstr "ფილტრი" + +msgid "Choose all" +msgstr "ავირჩიოთ ყველა" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "დააწკაპუნეთ ერთდროულად ყველა %s-ის ასარჩევად." + +msgid "Choose" +msgstr "არჩევა" + +msgid "Remove" +msgstr "წავშალოთ" + +#, javascript-format +msgid "Chosen %s" +msgstr "არჩეული %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"ეს არის არჩეული %s-ის სია. ზოგიერთი მათგანის მოსაშორებლად, მონიშვნით ისინი " +"ქვედა სარკმელში და დააწკაპუნეთ ორ სარკმელს შორის მდებარე ისარზე \"მოშორება" +"\" ." + +msgid "Remove all" +msgstr "ყველას მოშორება" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "დააწკაპუნეთ ყველა არჩეული %s-ის ერთდროულად მოსაშორებლად." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-დან არჩეულია %(sel)s" +msgstr[1] "%(cnt)s-დან არჩეულია %(sel)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"ცალკეულ ველებში შეუნახავი ცვლილებები გაქვთ! თუ მოქმედებას შეასრულებთ, " +"შეუნახავი ცვლილებები დაიკარაგება." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"აგირჩევიათ მოქმედება, მაგრამ ცალკეული ველები ჯერ არ შეგინახიათ! გთხოვთ, " +"შენახვისთვის დააჭიროთ OK. მოქმედების ხელახლა გაშვება მოგიწევთ." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"აგირჩევიათ მოქმედება, მაგრამ ცალკეულ ველებში ცვლილებები არ გაგიკეთებიათ! " +"სავარაუდოდ, ეძებთ ღილაკს \"Go\", და არა \"შენახვა\"" + +msgid "Now" +msgstr "ახლა" + +msgid "Midnight" +msgstr "შუაღამე" + +msgid "6 a.m." +msgstr "დილის 6 სთ" + +msgid "Noon" +msgstr "შუადღე" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "შენიშვნა: თქვენ ხართ %s საათით წინ სერვერის დროზე." +msgstr[1] "შენიშვნა: თქვენ ხართ %s საათით წინ სერვერის დროზე." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "შენიშვნა: თქვენ ხართ %s საათით უკან სერვერის დროზე." +msgstr[1] "შენიშვნა: თქვენ ხართ %s საათით უკან სერვერის დროზე." + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ავირჩიოთ დრო" + +msgid "Cancel" +msgstr "უარი" + +msgid "Today" +msgstr "დღეს" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "გუშინ" + +msgid "Tomorrow" +msgstr "ხვალ" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ვაჩვენოთ" + +msgid "Hide" +msgstr "დავმალოთ" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d095721bce64c57a116dd52df7d9fdece6a7aadf GIT binary patch literal 3531 zcmZvdTWlRi8Gt8Hpf!|UD80}ElQyLZ@!CG7jgw7W=OlJ6Bu*^*xFHfknsau%XLELE zoxSArSjr29C#ZyIxIDC|C0ryV9?}=uA_S-sYCwoSAdo<+8Uzm@RUkk@h!?(pcb%Au z)&BF%^`HMTJNw3+H+@C%97P^LI`2@*z%SlJ!E^h&mEu)*P`n4;3*QNK)4!wPZuoxs zr@7h-wqUidQCfr_tX9?d@uY4l>NR3#m_5H^t{@Pzt)WZ8j8Qahwp=bf@1&Q;RoP< zAg{WOPO3@ObK8{qD-?g9#z?W_5)}Q2#GQJAs`}hpxRi{Me7kBQcO?8WDRW21k*PAhLfOk?&&{BKB=QAEqLCkXXv&)lhrk z93pp~?7t5YdnHzz&n%S#n++)OK8!rFrEh_{#Nh}sj~qlkfk+NNhCGh!K;&E7iEMp* z8skmJhqew-e+ZHLLmr9y!&ObGN8xTn&QJ^4gUGqj2q9GWBJxO%`wToLklI6;bLM_^KTQBKqN6V1o&eL@vsU%+wR(SheF=2d1#haiglH+L_g( zwA6W-**SH%Z(L{_=yj9l!!!$;wyzGSZY|1^>jU(ZS!P`kk9;+63ez>Y)i%r0OqzDG zh!R`X7`Cx3XjGU}^J%Y4SXmplkeDdeCI~W{=e{};#f8n((NrBXd2Q!0JV~>WI+mjG zWE$$oRY=PMrh{@_EsnIQf|9FKcDTjJQ>i+Y)@n|r&Z^VhbGBFHYRQCFyR^`2Y3Tx* zwY$1kN8x%Kqik_wxN7QN9gEt2rWSgJEk?Oown=)y0v73HblncMV(6AaQwPH=y z>w_3`By%e^yI`{>fGhoUs0~?Li3*ndZ#GxTBr$}e(~okUq^{`K)e$OHhp79ilVXlq zbpw|Uom$Na=o1lfNuAEoSU0NL8T$yQAWySwG_Jd4p^LuNnLS_Hys!Zd5T;&Q#z7UV zuC3!Wq0ZR2M>@vUSx!_Pdc78#aI;=z-w;`1Rgi04jMlA+Ngj2$|CoY^WLo*X`3 zPfxXGys4Jg+NWE4{73igo@z}^G0|JL7b4NQbzW=Ao7$sWE&nm*@r<1$r(P#BE{_dI z&)19PwU@qaU7!!y_&f(a(FeLV9+;j@W@ZkCa)c*{$K$MYVM)-ujx~v|Pnhl~wt8p3 zDAxVS$>DG~!AI%xXw5z;3npvFHW4?gCkLiGxod3k_~OEi7_=s)#`p>)nqG%!`ns@B z7L)6-iQIlUxEZHzcC~ZF+k0c4Y_?`IZ^8A_AabFv_jaS=x|zOar?I8D%uMVZNwXyP zwOg;6`Rw$5T~}v!I=y{Xw|4Cx&7!1|% z4V!FOrxPv*qs|&WcIi% zt}J}D+Aq~=Y8b_w!2k$@Nig#rgpu}GG{m5 z-iu8VBd5#%J3b$ASD~oPbK|&3Z5R^5DlmN0l|tDAFLb@liXFs!tu=IT!m5?dwIHm4%oDET4D&YlS)@iz>)fa}Jf49KXo_(5T& z1SHArc~N=B#E}kcs7p~|D>bb+L4pHN@bN* Jqp+oN;J?tM4u=2$ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 000000000..b3d89582e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,631 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-10-06 11:59+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "Tebɣiḍ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "Tadbelt" + +msgid "All" +msgstr "Akkw" + +msgid "Yes" +msgstr "Ih" + +msgid "No" +msgstr "Uhu" + +msgid "Unknown" +msgstr "Arussin" + +msgid "Any date" +msgstr "Yal azemz" + +msgid "Today" +msgstr "Ass-a" + +msgid "Past 7 days" +msgstr "Di 7 n wussan ineggura" + +msgid "This month" +msgstr "Aggur-agi" + +msgid "This year" +msgstr "Aseggass-agi" + +msgid "No date" +msgstr "Ulac azemz" + +msgid "Has date" +msgstr "Ɣur-s azemz" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Tigawt:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "Kkes" + +msgid "action time" +msgstr "akud n tigawt" + +msgid "user" +msgstr "aseqdac" + +msgid "content type" +msgstr "anaw n ugbur" + +msgid "object id" +msgstr "asulay n tɣawsa" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "anay n tigawt" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "anekcum n uɣmis" + +msgid "log entries" +msgstr "inekcam n uɣmis" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "yettwarna." + +msgid "and" +msgstr "akked" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "Ula yiwen" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Rnu %s" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "Agul n database" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "Asmel n tedbelt" + +msgid "Log in" +msgstr "Kcem" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Asebtar ulac-it" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Ad nesḥissef imi asebter i d-sutreḍ ulac-it." + +msgid "Home" +msgstr "Agejdan" + +msgid "Server error" +msgstr "Tuccḍa n uqeddac" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "Ẓer" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "Beddel awal n tbaḍnit" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Anṣuf," + +msgid "View site" +msgstr "Wali asmel" + +msgid "Documentation" +msgstr "Tasemlit" + +msgid "Log out" +msgstr "Asenser" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "History" +msgstr "Amazray" + +msgid "View on site" +msgstr "Wali deg usmel" + +msgid "Filter" +msgstr "Tastayt" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Mḥu" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "Tiɣawsiwin" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "Beddel" + +msgid "Delete?" +msgstr "Kkes?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "Agzul" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Rnu" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "Tigawin-iw" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Azemz/asrag" + +msgid "User" +msgstr "Amseqdac" + +msgid "Action" +msgstr "Tigawt" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Sken akk" + +msgid "Save" +msgstr "Sekles" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Anadi" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "Sekles d amaynut:" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "Abeddel n wawal uffir" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "Awennez n wawal uffir" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "Asentem n uwennez n wawal uffir" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "Awal n tbaḍnit amaynut:" + +msgid "Confirm password:" +msgstr "Sentem awal uffir" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Tansa e-mail :" + +msgid "Reset my password" +msgstr "Wennez awal-iw uffir" + +msgid "All dates" +msgstr "Izemzen merra" + +#, python-format +msgid "Select %s" +msgstr "Fren %s" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "Azemz:" + +msgid "Time:" +msgstr "Akud:" + +msgid "Lookup" +msgstr "Anadi" + +msgid "Currently:" +msgstr "Tura:" + +msgid "Change:" +msgstr "Beddel:" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..755849a2d60e60254a816167e1dc31040d3a991d GIT binary patch literal 1844 zcmaKqO>7%Q6vqczXzKFSmai5lQy@~JXzjHrakL>7u2ZW?>n2LJph{fE-m$&e-B~j` z8^<{!aYCFZCj=6z-~va43Kuw`_EIh!5h52ZaDW>eK>VLQ`9MO9_RVkJ%=?&q^L{*W z_&tX4JmhJ}xqBEZfmiOugfVf5u_|~JydSJtUIOofzGC%j-~-TKw|Z#V2Oq@#!1682 zcfkVoKLU?}pMewL7nWaxl);2dQ4?H%{tJvK&NL>XYgq-!|2#29nWC#EQI3ij)$oW$Z1+&JOMccpxjbIcH|a0l*T`{ zi`aUXBGD>M7n)1Wi~BVw7u`ZVRYoe@ZP>?88o6ak{aA!*p0|5KXVNTO^Bd0Gz8xj& zNbOuy?KB8g*W+`o(Cl5)7ZB#-HO0`d1`2^RN{JyY(APO;g}Ev3 z+|)9o-iGEI1;3je!4)5dJGb8X*G|4IV)oiNhmX23Kc{|=BKTj%#6=Xbx)~d+NBD_a TmN|mewq+CvwuE^2(~$iG9x{-_ literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..57f70c99e --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po @@ -0,0 +1,204 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-10-06 08:10+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Yella %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Tastayt" + +msgid "Choose all" +msgstr "Fren akk" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "Fren" + +msgid "Remove" +msgstr "kkes" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ifren %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "Kkes akk" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s si %(cnt)s yettwafren" +msgstr[1] "%(sel)s si %(cnt)s ttwafernen" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Tura" + +msgid "Choose a Time" +msgstr "Fren akud:" + +msgid "Choose a time" +msgstr "Fren akud" + +msgid "Midnight" +msgstr "Ttnaṣfa n yiḍ" + +msgid "6 a.m." +msgstr "6 f.t." + +msgid "Noon" +msgstr "Ttnaṣfa n uzal" + +msgid "6 p.m." +msgstr "6 m.d." + +msgid "Cancel" +msgstr "Sefsex" + +msgid "Today" +msgstr "Ass-a" + +msgid "Choose a Date" +msgstr "Fren azemz" + +msgid "Yesterday" +msgstr "Iḍelli" + +msgid "Tomorrow" +msgstr "Azekka" + +msgid "January" +msgstr "Yennayer" + +msgid "February" +msgstr "Fuṛaṛ" + +msgid "March" +msgstr "Meɣres" + +msgid "April" +msgstr "Yebrir" + +msgid "May" +msgstr "Mayyu" + +msgid "June" +msgstr "Yunyu" + +msgid "July" +msgstr "Yulyu" + +msgid "August" +msgstr "Ɣuct" + +msgid "September" +msgstr "Ctamber" + +msgid "October" +msgstr "Tuber" + +msgid "November" +msgstr "Wamber" + +msgid "December" +msgstr "Dujamber" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Sken" + +msgid "Hide" +msgstr "Ffer" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..abc3c54e8bdd09b2e719ac9fdfd72cfa633f6a5a GIT binary patch literal 12845 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 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 000000000..6d9625afd --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,695 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baurzhan Muftakhidinov , 2015 +# Leo Trubach , 2017 +# Nurlan Rakhimzhanov , 2011 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Таңдалған %(count)d %(items)s элемент өшірілді." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s өшіру мүмкін емес" + +msgid "Are you sure?" +msgstr "Осыған сенімдісіз бе?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Таңдалған %(verbose_name_plural)s өшірілді" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Барлығы" + +msgid "Yes" +msgstr "Иә" + +msgid "No" +msgstr "Жоқ" + +msgid "Unknown" +msgstr "Белгісіз" + +msgid "Any date" +msgstr "Кез келген күн" + +msgid "Today" +msgstr "Бүгін" + +msgid "Past 7 days" +msgstr "Өткен 7 күн" + +msgid "This month" +msgstr "Осы ай" + +msgid "This year" +msgstr "Осы жыл" + +msgid "No date" +msgstr "Күні жоқ" + +msgid "Has date" +msgstr "Күні бар" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Әрекет:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Тағы басқа %(verbose_name)s кос" + +msgid "Remove" +msgstr "Өшіру" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Өзгетру" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "әрекет уақыты" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "объекттің id-i" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "объекттің repr-i" + +msgid "action flag" +msgstr "әрекет белгісі" + +msgid "change message" +msgstr "хабарламаны өзгерту" + +msgid "log entry" +msgstr "Жорнал жазуы" + +msgid "log entries" +msgstr "Жорнал жазулары" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "және" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ешқандай толтырма өзгермеді." + +msgid "None" +msgstr "Ешнәрсе" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Бірнәрсені өзгерту үшін бірінші оларды таңдау керек. Ешнәрсе өзгертілмеді." + +msgid "No action selected." +msgstr "Ешқандай әрекет таңдалмады." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" сәтті өшірілді." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s қосу" + +#, python-format +msgid "Change %s" +msgstr "%s өзгету" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Мәліметтер базасының қатесі" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +"one: %(count)s %(name)s өзгертілді.\n" +"\n" +"other: %(count)s %(name)s таңдалғандарының барі өзгертілді." +msgstr[1] "" +"one: %(count)s %(name)s өзгертілді.\n" +"\n" +"other: %(count)s %(name)s таңдалғандарының барі өзгертілді." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +"one: %(total_count)s таңдалды\n" +"\n" +"other: Барлығы %(total_count)s таңдалды" +msgstr[1] "" +"one: %(total_count)s таңдалды\n" +"\n" +"other: Барлығы %(total_count)s таңдалды" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s-ден 0 таңдалды" + +#, python-format +msgid "Change history: %s" +msgstr "Өзгерес тарихы: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Даңғо сайтының әкімі" + +msgid "Django administration" +msgstr "Даңғо әкімшілігі" + +msgid "Site administration" +msgstr "Сайт әкімшілігі" + +msgid "Log in" +msgstr "Кіру" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Бет табылмады" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Кешірім сұраймыз, сіздің сұраған бетіңіз табылмады." + +msgid "Home" +msgstr "Негізгі" + +msgid "Server error" +msgstr "Сервердің қатесі" + +msgid "Server error (500)" +msgstr "Сервердің қатесі (500)" + +msgid "Server Error (500)" +msgstr "Сервердің қатесі (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Таңдалған әрәкетті іске қосу" + +msgid "Go" +msgstr "Алға" + +msgid "Click here to select the objects across all pages" +msgstr "Осы беттегі барлық объекттерді таңдау үшін осы жерді шертіңіз" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Осылардың %(total_count)s %(module_name)s барлығын таңдау" + +msgid "Clear selection" +msgstr "Белгілерді өшіру" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Алдымен, пайдаланушының атын және құпия сөзді енгізіңіз. Содан соң, тағы " +"басқа пайдаланушы параметрлерін енгізе аласыз." + +msgid "Enter a username and password." +msgstr "Пайдаланушының атын және құпия сөзді енгізіңіз." + +msgid "Change password" +msgstr "Құпия сөзді өзгерту" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"%(username)s пайдаланушы үшін жаңа құпия сөзді енгізіңіз." + +msgid "Welcome," +msgstr "Қош келдіңіз," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Құжаттама" + +msgid "Log out" +msgstr "Шығу" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s қосу" + +msgid "History" +msgstr "Тарих" + +msgid "View on site" +msgstr "Сайтта көру" + +msgid "Filter" +msgstr "Сүзгіз" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Өшіру" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' объектты өшіруы байланысты объекттерін " +"өшіруді қажет етеді, бырақ сізде осындай объектерді өшіру рұқсаты жоқ:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' объектті өшіру осындай байлансты " +"объекттерды өшіруді қажет етеді:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" объекттерді өшіруге сенімдісіз бе? " +"Бұл байланысты элементтер де өшіріледі:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Иә, сенімдімін" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Бірнеше объекттерді өшіру" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s объектты өшіруы байланысты объекттерін өшіруді қажет етеді, " +"бырақ сізде осындай объектерді өшіру рұқсаты жоқ:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Таңдалған %(objects_name)s-ді(ы) өшіру, онымен байланыстағы қорғалған " +"объектілердің барлығын жояды:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Таңдаған %(objects_name)s объектіңізді өшіруге сенімдісіз бе? Себебі, " +"таңдағын объектіліріңіз және онымен байланыстағы барлық элементтер жойылады:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Өшіру?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Қосу" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Қол жетімдісі жоқ" + +msgid "Unknown content" +msgstr "Белгісіз мазмұн" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Дерекқор орнатуыңызда бір қате бар. Дерекқор кестелері дұрыс құрылғаның және " +"дерекқор көрсетілген дерекқор пайдаланушыда оқұ рұқсаты бар." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Өшіру/Уақыт" + +msgid "User" +msgstr "Қолданушы" + +msgid "Action" +msgstr "Әрекет" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Бұл объекттың өзгерту тарихы жоқ. Мүмкін ол бұл сайт арқылы енгізілген жоқ." + +msgid "Show all" +msgstr "Барлығын көрсету" + +msgid "Save" +msgstr "Сақтау" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Іздеу" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s нәтиже" +msgstr[1] "%(counter)s нәтиже" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Барлығы %(full_result_count)s" + +msgid "Save as new" +msgstr "Жаңадан сақтау" + +msgid "Save and add another" +msgstr "Сақта және жаңасын қос" + +msgid "Save and continue editing" +msgstr "Сақта және өзгертуді жалғастыр" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Бүгін Веб-торапқа уақыт бөлгеніңіз үшін рахмет." + +msgid "Log in again" +msgstr "Қайтадан кіріңіз" + +msgid "Password change" +msgstr "Құпия сөзді өзгерту" + +msgid "Your password was changed." +msgstr "Құпия сөзіңіз өзгертілді." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Ескі құпия сөзіңізді енгізіңіз, содан сон сенімді болу үшін жаңа құпия " +"сөзіңізді екі рет енгізіңіз." + +msgid "Change my password" +msgstr "Құпия сөзімді өзгерту" + +msgid "Password reset" +msgstr "Құпия сөзді өзгерту" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Сіздің құпия сөзіңіз енгізілді. Жүйеге кіруіңізге болады." + +msgid "Password reset confirmation" +msgstr "Құпия сөзді өзгерту растау" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Сенімді болу үшін жаңа құпия сөзіңізді екі рет енгізіңіз." + +msgid "New password:" +msgstr "Жаңа құпия сөз:" + +msgid "Confirm password:" +msgstr "Құпия сөз (растау):" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Құпия сөзді өзгерту байланыс дұрыс емес, мүмкін ол осыған дейін " +"пайдаланылды. Жаңа құпия сөзді өзгерту сұрау жіберіңіз." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Жаңа құпия сөзді тандау үшін мынау бетке кіріңіз:" + +msgid "Your username, in case you've forgotten:" +msgstr "Егер ұмытып қалған болсаңыз, пайдалануш атыңыз:" + +msgid "Thanks for using our site!" +msgstr "Біздің веб-торабын қолданғаныңыз үшін рахмет!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s тобы" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Құпия сөзді жаңала" + +msgid "All dates" +msgstr "Барлық мерзімдер" + +#, python-format +msgid "Select %s" +msgstr "%s таңда" + +#, python-format +msgid "Select %s to change" +msgstr "%s өзгерту үщін таңда" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Күнтізбелік күн:" + +msgid "Time:" +msgstr "Уақыт:" + +msgid "Lookup" +msgstr "Іздеу" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b65151380cfe72e147902f67fd2d04afa69c094 GIT binary patch literal 2387 zcmb7E-)|IE6dn|Rt%8ca7&SSXH0;LCv?YeZmKqcRkye^gjKrtgox8ik&dyzC?zYs# zq(2fv(!@x#O(=;8_C=m3k+p$R)F%_4?reSbQ4{|IeeydqL%T&nbeh?3&bjBF^PTV9 z+u!!=T(I!GfcF)=H}SrTcW4KG@canu2mSw4_ zbTYdi_$cf{K+bbG^B)I3273s|@uR?}fFA>wfD-r>kT*8~3&3;C1x3!lK99`^v3>^f zzF&ZQfWHD?0{#JHzB^EqaX0XJ;LDk919Py8K;Cy0xEuIU=C5QJ0-4{Zz(0YX0sjV` zf5NhU2l`k9t)%y7fy}A%;hLPEb?$svJARluKS-PC#2i39;f4~M5BKmiUgq)~d%NcU0sV2Vmr5mY2P3&;yxZ^Cn%!l$w)eK&FlIroN=8lf5o z{VDR5s(C?$$|@vXm2_OucvEX^4h3v>qA0JNW+v&H^Kfbi+D0wH&V+2ZNlvSOlcOoA z9UAeafQlvGE7j=KNkSy=Pnr8Z1roX745b}5Q)a0o9i*B;TJphCNY~TJ= zbR7ai+>q|iH0goDxP)wxcC3+5ox_o_Pq_AnGK?^nBDv=vzsiluh6=Sk992Bmey3T9 z>@iiO+{h_=R8DvtYQHPAEYiN-zJ9y+pxt+n`t}#!?0cgZPi{y=+8zr<5cxu@ut@KV zAn+m@k~mL39YPV9hyBEKyr8V!!k(bg6cuTYNl`D-N%4uORViQ9x>4-unVg(-G$-`R z@`6)R^`4aJJ@B*LJ+)d-Avb(t_~=$oeNJ!ghzhg}Kx(Q1)>>ZBJq=%Y!2r)RjHDhs zGj_~AuocI($}+T%1|{X+9@w|KUFJ)W`JOE6ZkZQ9!SHonLo@mwC!cjM0smRZ`k2FHwPp&)WyLN3%W>y}x7 zf7Z0x%Lu~qMbiQaEUl8cny`cp@m$&r$Ywo&m033{)V{)W5ceg@ud`a+xa)cIg;`@) z;eq>z(<8QJejxBmvZe_*oWzvVI)OTF23b z3r7$V+<{a)!xo>74mpyAHI|?6LUt=4ET)}L|JfBfqInS8#Y>x;cE~KGvqB<1b!hC$ jwl+5TCQ2tGGB+SQPvD^yxC`EVH#tVQ6DW|JAIJI!iGJa8 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..9c51f35b8 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po @@ -0,0 +1,210 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nurlan Rakhimzhanov , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s бар" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Сүзгіш" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "Өшіру(жою)" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-ң %(sel)s-ы(і) таңдалды" +msgstr[1] "%(cnt)s-ң %(sel)s-ы(і) таңдалды" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Сіздің төмендегі өзгермелі алаңдарда(fields) өзгерістеріңіз бар. Егер артық " +"әрекет жасасаңызб сіз өзгерістеріңізді жоғалтасыз." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Сіз өз өзгерістеріңізді сақтамай, әрекет жасадыңыз. Өтініш, сақтау үшін ОК " +"батырмасын басыңыз және өз әрекетіңізді қайта жасап көріңіз. " + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Сіз Сақтау батырмасына қарағанда, Go(Алға) батырмасын іздеп отырған " +"боларсыз, себебі ешқандай өзгеріс жасамай, әрекет жасадыңыз." + +msgid "Now" +msgstr "Қазір" + +msgid "Midnight" +msgstr "Түн жарым" + +msgid "6 a.m." +msgstr "06" + +msgid "Noon" +msgstr "Талтүс" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Уақытты таңда" + +msgid "Cancel" +msgstr "Болдырмау" + +msgid "Today" +msgstr "Бүгін" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Кеше" + +msgid "Tomorrow" +msgstr "Ертең" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Көрсету" + +msgid "Hide" +msgstr "Жасыру" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a50821c263254c50fee624fe3b7990466f0dabc4 GIT binary patch literal 10403 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 XhX6z&+GozL`v2Tuqw3Z*|F-kLiZ%N0 literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po new file mode 100644 index 000000000..8b16d1fcb --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,636 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "តើលោកអ្នកប្រាកដទេ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "ទាំងអស់" + +msgid "Yes" +msgstr "យល់ព្រម" + +msgid "No" +msgstr "មិនយល់ព្រម" + +msgid "Unknown" +msgstr "មិន​ដឹង" + +msgid "Any date" +msgstr "កាល​បរិច្ឆេទណាមួយ" + +msgid "Today" +msgstr "ថ្ងៃនេះ" + +msgid "Past 7 days" +msgstr "៧​ថ្ងៃ​កន្លង​មក" + +msgid "This month" +msgstr "ខែ​នេះ" + +msgid "This year" +msgstr "ឆ្នាំ​នេះ" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "លប់ចេញ" + +msgid "action time" +msgstr "ពេលវេលាប្រតិបត្តិការ" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "លេខ​សំគាល់​កម្មវិធី (object id)" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "object repr" + +msgid "action flag" +msgstr "សកម្មភាព" + +msgid "change message" +msgstr "ផ្លាស់ប្តូរ" + +msgid "log entry" +msgstr "កំណត់ហេតុ" + +msgid "log entries" +msgstr "កំណត់ហេតុ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "និង" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "ពុំមានទិន្នន័យត្រូវបានផ្លាស់ប្តូរ។" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "ឈ្មោះកម្មវិធី %(name)s \"%(obj)s\" ត្រូវបានលប់ដោយជោគជ័យ។" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "បន្ថែម %s" + +#, python-format +msgid "Change %s" +msgstr "ផ្លាស់ប្តូរ %s" + +msgid "Database error" +msgstr "ទិន្នន័យមូលដ្ឋានមានបញ្ហា" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "" + +#, python-format +msgid "Change history: %s" +msgstr "សកម្មភាពផ្លាស់ប្តូរកន្លងមក : %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ទំព័រគ្រប់គ្រងរបស់ Django" + +msgid "Django administration" +msgstr "ការ​គ្រប់គ្រង​របស់ ​Django" + +msgid "Site administration" +msgstr "ទំព័រគ្រប់គ្រង" + +msgid "Log in" +msgstr "ពិនិត្យចូល" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "ទំព័រ​ដែល​លោកអ្នកចង់​រក​នេះពុំមាន​នៅក្នុងម៉ាស៊ីនរបស់យើងខ្ញុំទេ" + +msgid "We're sorry, but the requested page could not be found." +msgstr "សួមអភ័យទោស ទំព័រ​ដែល​លោកអ្នកចង់​រក​នេះពុំមាន​នឹងក្នុងម៉ាស៊ីនរបស់យើងខ្ញុំទេ" + +msgid "Home" +msgstr "គេហទំព័រ" + +msgid "Server error" +msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា" + +msgid "Server error (500)" +msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា (៥០០)" + +msgid "Server Error (500)" +msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា  (៥០០)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "ស្វែងរក" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"តំបូងសូមបំពេញ ឈ្មោះជាសមាជិក និង ពាក្យសំងាត់​។ បន្ទាប់មកលោកអ្នកអាចបំពេញបន្ថែមជំរើសផ្សេងៗទៀតបាន។ " + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "សូមស្វាគមន៏" + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "ឯកសារ" + +msgid "Log out" +msgstr "ចាកចេញ" + +#, python-format +msgid "Add %(name)s" +msgstr "បន្ថែម %(name)s" + +msgid "History" +msgstr "សកម្មភាព​កន្លង​មក" + +msgid "View on site" +msgstr "មើលនៅលើគេហទំព័រដោយផ្ទាល់" + +msgid "Filter" +msgstr "ស្វែងរកជាមួយ" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "លប់" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"ការលប់ %(object_name)s '%(escaped_object)s' អាចធ្វើអោយ​កម្មវិធីដែលពាក់​ព័ន្ធបាត់បង់ ។" +" ក៏ប៉ន្តែលោកអ្នក​ពុំមាន​សិទ្ធិលប់​កម្មវិធី​ប្រភេទនេះទេ។" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"តើលោកអ្នកប្រាកដជាចង់លប់ %(object_name)s \"%(escaped_object)s" +"\"? ការលប់ %(object_name)s '%(escaped_object)s' អាចធ្វើអោយ​កម្មវិធីដែលពាក់​ព័ន្ធបាត់បង់។" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "ខ្ញុំច្បាស់​ជាចង់លប់" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "ផ្លាស់ប្តូរ" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "ដោយ​  %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "បន្ថែម" + +msgid "You don't have permission to edit anything." +msgstr "លោកអ្នកពុំមានសិទ្ធិ ផ្លាស់​ប្តូរ ទេ។" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "គ្មាន" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"មូលដ្ឋាន​ទិន្នន័យ​​​ របស់លោកអ្នក មានបញ្ហា។ តើ លោកអ្នកបាន បង្កើត តារាង​ របស់មូលដ្ឋានទិន្នន័យ​" +" ហើយឬនៅ? តើ​ លោកអ្នកប្រាកដថាសមាជិកអាចអានមូលដ្ឋានទិន្នន័យនេះ​​បានឬទេ? " + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Date/time" + +msgid "User" +msgstr "សមាជិក" + +msgid "Action" +msgstr "សកម្មភាព" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"កម្មវិធីនេះមិនមានសកម្មភាព​កន្លងមកទេ។ ប្រហែលជាសកម្មភាពទាំងនេះមិនបានធ្វើនៅទំព័រគ្រប់គ្រងនេះ។" + +msgid "Show all" +msgstr "បង្ហាញទាំងអស់" + +msgid "Save" +msgstr "រក្សាទុក" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "សរុបទាំងអស់ %(full_result_count)s" + +msgid "Save as new" +msgstr "រក្សាទុក" + +msgid "Save and add another" +msgstr "រក្សាទុក ហើយ បន្ថែម​ថ្មី" + +msgid "Save and continue editing" +msgstr "រក្សាទុក ហើយ កែឯកសារដដែល" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "សូមថ្លែងអំណរគុណ ដែលបានចំណាយ ពេលវេលាដ៏មានតំលៃ របស់លោកអ្នកមកទស្សនាគេហទំព័ររបស់យើងខ្ញុំ" + +msgid "Log in again" +msgstr "ពិនិត្យចូលម្តងទៀត" + +msgid "Password change" +msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់" + +msgid "Your password was changed." +msgstr "ពាក្យសំងាត់របស់លោកអ្នកបានផ្លាស់ប្តូរហើយ" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "សូមបំពេញពាក្យសំងាត់ចាស់របស់លោកអ្នក។ ដើម្បីសុវត្ថភាព សូមបំពេញពាក្យសំងាត់ថ្មីខាងក្រោមពីរដង។" + +msgid "Change my password" +msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់" + +msgid "Password reset" +msgstr "ពាក្យសំងាត់បានកំណត់សារជាថ្មី" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "ពាក្យសំងាត់ថ្មី" + +msgid "Confirm password:" +msgstr "បំពេញពាក្យសំងាត់ថ្មីម្តងទៀត" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "ឈ្មោះជាសមាជិកក្នុងករណីភ្លេច:" + +msgid "Thanks for using our site!" +msgstr "សូមអរគុណដែលបានប្រើប្រាស់សេវាកម្មរបស់យើងខ្ញុំ" + +#, python-format +msgid "The %(site_name)s team" +msgstr "ក្រុមរបស់គេហទំព័រ %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "កំណត់ពាក្យសំងាត់សារជាថ្មី" + +msgid "All dates" +msgstr "កាលបរិច្ឆេទទាំងអស់" + +#, python-format +msgid "Select %s" +msgstr "ជ្រើសរើស %s" + +#, python-format +msgid "Select %s to change" +msgstr "ជ្រើសរើស %s ដើម្បីផ្លាស់ប្តូរ" + +msgid "Date:" +msgstr "កាលបរិច្ឆេទ" + +msgid "Time:" +msgstr "ម៉ោង" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0b94c12cc3f473b2b58d62b3979cd14ff82c886 GIT binary patch literal 1334 zcmaKo-)~Go6vwaMtY3*lNRUi~gvjjPTa@0apfvHLG|iHDlCeA8y?XD==H6+`gQQrb zL{KGu&P9SZk3@n$8I*{eiwa^LZD(I3~ zI3QJUJ{W*Yz*^Hj4=#mW2Xo*!xCngGe18Qlg#8+v3%&*CfbW~{pTK#rKZ7>zD`@k- zfj6K(q3dA_Bz1td!4=>aa0B=Qq~IJBxAZ{kKLxG^>rML!xDxgxX!E}}?cd-U*t0N% zjb8_%WhM)7+W)Y!3~KkYv)X^KJGTTSoW(5z#7LRgJ*>=z+THBGIqihyqr9_sm<1s_ z9dfcUak`l(@zCk6N||uNhzcS;Wrf*8!iA0O2|~qVr#C2zpi))NQ7HwE5vQL=a+o_s zS!U;OMlz1!J;@V2g~#XkCQ+OpOnuqQIWZRUX!t+y-6h~(|tpggchYw za(%~&v^(ZZA(rlEiu9`%#?Vw%<@!I`u z-WC^P$drtIa)=2LB;*JW$~+{yFb&K-VP@t7F(7v%M^uJbh0`Kukxvd+ zBOa4YRi$cvp)fKsl2^7~Fu>2|OEM}nHfkYkCKm>y!scA>!QKPYyL)*z*DZzO0yCYf zVL8RmszNPff#@WqDvJ}Yx{eon=+5al+iQTw^nfVIav&-`*?BrpQ$zY>Fv|6XLoo|! zkBpgEwsLv} z!)BADsQuS`&EEg&gW5>Kc8{}#PzGy`+GxAheWO1Z{QyB&bG)@39&R@7c);IW$o9IG zx$0S&=Cd6O0~!6o=x0X1w_Wrdn~+|GcjjlH#u!{vMJ~+@oat>$`#ftiiVS=crpIr; L%?e^-T*jO~i68Oj literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..fbe0ae159 --- /dev/null +++ b/venv/Lib/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po @@ -0,0 +1,201 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s ដែលអាច​ជ្រើសរើសបាន" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ស្វែងរកជាមួយ" + +msgid "Choose all" +msgstr "ជ្រើសរើសទាំងអស់" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "លប់ចេញ" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ដែលបានជ្រើសរើស" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "ឥឡូវនេះ" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ជ្រើសរើសម៉ោង" + +msgid "Midnight" +msgstr "អធ្រាត្រ" + +msgid "6 a.m." +msgstr "ម៉ោង ៦ ព្រឹក" + +msgid "Noon" +msgstr "ពេលថ្ងែត្រង់" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "លប់ចោល" + +msgid "Today" +msgstr "ថ្ងៃនេះ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "ម្សិលមិញ" + +msgid "Tomorrow" +msgstr "ថ្ងៃស្អែក" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.mo b/venv/Lib/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3740da20869e1bc139f8d7b780bd65d28d611e18 GIT binary patch literal 9203 zcmb`LYmgjO6~`NSh^vUfH$J$4VK=ffyNf7f!YhPCLLSCs10qGm-kILrCNtebcTbl2 zq6EqWMT4caVkt$8#DqeUP_rh1FT_Wc@1jaezo|8-Uo0)P{6cA2;_sY$yJsf5(R^?! zJ^#74&pproIo;XcUUJ^N$7dVYyScvo8qd2Q+;~1;eBSh0&wDGl415`#Lif=%!uuno%jz3%=#@DkQvariCpV%9H$%fOewH-cSI^!*hS z*Zu*Do>#%6-~|{FKaYcQ?x&#G`wb{^e*(9Ie+LQCyB%d5^)`U#f!jcl`xq$k>~Qz% zpyt7QTyAOeH0r!IM1fKxq z+zF5)-uJ*agFgc$|6Nf0`xhvFybfVP^4<-K+;Z?3xDvbx{3CcNIKrWEa1Ho2FauHH zJqmsd{4yx^{t9Y-9li=mp3Wx;;_pQuTizw$b>L;7*uM)DK70b?pI77SYA^xC{*&Mc z_yUMa-tQd#1(b9D1SOyUcKa8x5P#n3@Jdk5mB7c&AwE#_{+OgM2mb&XaOh1oFIR(- zubV*O#m7OZPZJcs9t7pwv)~Hw7ohm}FSoxO5?#Z319(07Nl?z61aAX>56bxwiXeTn z8I=6*1jX*Bz)#}m*TBnIUrLczffew*;4V<|I1iqO+&A3%FwTm<-{xx+{0S)fUjfD5 zTPWTYU}-)`4ef$Lar2j$!o;1TS82NeGz$mfImK*`hJ zz)4V&+yJ(NlArH`?*sn~-U2Qo*l};>RoCJoYX{=zFZ6dymzd zl8leCei_6S?*ll4>)r0{KhD+pxJEB*(BmT%o{1@FDxo+noHEILU52?{yOW#2s{anlUX0B1Y)ZUeN#|uwY^mqd@2@nj<}!NtNHH_@I!j1 z|Few+)X>ix`G(foFOpN?egEfXw~)F^jW=$#wg&X6_kp74@#dv|bsnCn6=`CPyyH9Sui=GL}ZJ~AEFvmn`# zg;_mVks6PkR=vI>3DQbVsa&b8F8yvC=ppHnrZfbrO zu!`FH%UhiUrX9CT+Dd|(y*0CbG!r;5%hUYVY?x+o(ysJvHQJ`>r|Ddr)N-lbI*z8p zq)`Y|yxaWDpYqed1W6JnvJA$uuo37lZU^-sV<8YmGbWo22q2!iFQ{faY#e5I`ACpf z{bo?xVQ;KRhs|8vs@IIohY2H7%QYlH9UC=cMbl9;)ygE$#Q0Uso2kV?8VzS=*54JF zW{@<(G$ny#(`pISi|M#tkLT2-)%7Z2Vdyj7U)8YXRJD8fJmL<=qxn zTa6&f?EQ6GQ*T|Eq}ixpJHRK?N`piKHGWhp@>VvJvq3Z}eh*W+Deg|y@hdh#EzC?K zrg(DD#7!}smc0+h-tD$l-t95z-5Af176-tfm4;?D#oiZe3}^=d3F0i1kqO+kW8mYKN@p0!hNOFhu?Yq(m6n8M|Z z8AV}Y(xBQ(!mK@PO<0OGe^>*3Y8Z_cv0f2+1pTparfhS*T)u)4e0-X(#-ext9U}p;wlYJ=R?xY5v zylpVAnn{Bczobw$lk6qXZ+Zj$!7e} z1*Ljy+eVeMS)3thb4g6^%!S#kWjd{Hn=Xt}CIk%uNy=suxz&DGg8R*85;v2OZjp&# z4*+$@uB|Z@P=IO@NITh*GzJtDhr*Ob^lM7dsrDk}Le#Q13A1*lw%pAis!3<1#9;1k z`E_biW4x(A8>? zrZPiSmmHA8`H0B^zkwbCX;A7}`_oR4!Exccx*9ha%VvFM$m0~jx5cCk7B~b0cZEKw zK&6fe^;N=PqaFB(H%Yh^Z&IT3wnsaocrNm`lPT}c5TY}V#6Rz@V3<}